<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Tarifs de location du linge — SCI Dubuval — 2022-2023</title> <meta charset="UTF-8"/> <style type="text/css"> /* <![CDATA[ */ body,div,table,thead,tbody,tfoot,tr,th,td,p {color: darkslategrey; font-family:Arial; font-size:medium;} table.montablo {border:0; border-collapse: collapse} table.montablo tr td {border: 1px solid; text-align: center; padding: 5px} table.montablo tr.gras td {font-weight: bold; background-color: darkslategrey; color: mediumturquoise} td.gras {font-weight: bold; background-color: darkslategrey; color: mediumturquoise} /* ]]> */ </style> </head> <body onpageshow="compute()"> <script> //<![CDATA[ //# 1 "mechanic.bc.runtime.js" // Generated by js_of_ocaml 4.0.0 (function(Object) {typeof globalThis !== "object" && (this ?get() :(Object.defineProperty (Object.prototype,"_T_",{configurable:true,get:get}), _T_)); function get() {var global=this || self; global.globalThis = global; delete Object.prototype._T_}} (Object)); (function(globalThis) {"use strict"; function caml_int64_is_zero(x){return + x.isZero()} function caml_str_repeat(n,s) {if(n == 0)return ""; if(s.repeat)return s.repeat(n); var r="",l=0; for(;;) {if(n & 1)r += s; n >>= 1; if(n == 0)return r; s += s; l++; if(l == 9)s.slice(0,1)}} var caml_int64_offset=Math.pow(2,- 24); function caml_raise_constant(tag){throw tag} var caml_global_data=[0]; function caml_raise_zero_divide() {caml_raise_constant(caml_global_data.Division_by_zero)} function MlInt64(lo,mi,hi) {this.lo = lo & 0xffffff;this.mi = mi & 0xffffff;this.hi = hi & 0xffff} MlInt64.prototype.caml_custom = "_j"; MlInt64.prototype.copy = function(){return new MlInt64(this.lo,this.mi,this.hi)}; MlInt64.prototype.ucompare = function(x) {if(this.hi > x.hi)return 1; if(this.hi < x.hi)return - 1; if(this.mi > x.mi)return 1; if(this.mi < x.mi)return - 1; if(this.lo > x.lo)return 1; if(this.lo < x.lo)return - 1; return 0}; MlInt64.prototype.compare = function(x) {var hi=this.hi << 16,xhi=x.hi << 16; if(hi > xhi)return 1; if(hi < xhi)return - 1; if(this.mi > x.mi)return 1; if(this.mi < x.mi)return - 1; if(this.lo > x.lo)return 1; if(this.lo < x.lo)return - 1; return 0}; MlInt64.prototype.neg = function() {var lo=- this.lo,mi=- this.mi + (lo >> 24),hi=- this.hi + (mi >> 24); return new MlInt64(lo,mi,hi)}; MlInt64.prototype.add = function(x) {var lo=this.lo + x.lo, mi=this.mi + x.mi + (lo >> 24), hi=this.hi + x.hi + (mi >> 24); return new MlInt64(lo,mi,hi)}; MlInt64.prototype.sub = function(x) {var lo=this.lo - x.lo, mi=this.mi - x.mi + (lo >> 24), hi=this.hi - x.hi + (mi >> 24); return new MlInt64(lo,mi,hi)}; MlInt64.prototype.mul = function(x) {var lo=this.lo * x.lo, mi=(lo * caml_int64_offset | 0) + this.mi * x.lo + this.lo * x.mi, hi= (mi * caml_int64_offset | 0) + this.hi * x.lo + this.mi * x.mi + this.lo * x.hi; return new MlInt64(lo,mi,hi)}; MlInt64.prototype.isZero = function(){return (this.lo | this.mi | this.hi) == 0}; MlInt64.prototype.isNeg = function(){return this.hi << 16 < 0}; MlInt64.prototype.and = function(x) {return new MlInt64(this.lo & x.lo,this.mi & x.mi,this.hi & x.hi)}; MlInt64.prototype.or = function(x) {return new MlInt64(this.lo | x.lo,this.mi | x.mi,this.hi | x.hi)}; MlInt64.prototype.xor = function(x) {return new MlInt64(this.lo ^ x.lo,this.mi ^ x.mi,this.hi ^ x.hi)}; MlInt64.prototype.shift_left = function(s) {s = s & 63; if(s == 0)return this; if(s < 24) return new MlInt64 (this.lo << s, this.mi << s | this.lo >> 24 - s, this.hi << s | this.mi >> 24 - s); if(s < 48) return new MlInt64 (0,this.lo << s - 24,this.mi << s - 24 | this.lo >> 48 - s); return new MlInt64(0,0,this.lo << s - 48)}; MlInt64.prototype.shift_right_unsigned = function(s) {s = s & 63; if(s == 0)return this; if(s < 24) return new MlInt64 (this.lo >> s | this.mi << 24 - s, this.mi >> s | this.hi << 24 - s, this.hi >> s); if(s < 48) return new MlInt64 (this.mi >> s - 24 | this.hi << 48 - s,this.hi >> s - 24,0); return new MlInt64(this.hi >> s - 48,0,0)}; MlInt64.prototype.shift_right = function(s) {s = s & 63; if(s == 0)return this; var h=this.hi << 16 >> 16; if(s < 24) return new MlInt64 (this.lo >> s | this.mi << 24 - s, this.mi >> s | h << 24 - s, this.hi << 16 >> s >>> 16); var sign=this.hi << 16 >> 31; if(s < 48) return new MlInt64 (this.mi >> s - 24 | this.hi << 48 - s, this.hi << 16 >> s - 24 >> 16, sign & 0xffff); return new MlInt64(this.hi << 16 >> s - 32,sign,sign)}; MlInt64.prototype.lsl1 = function() {this.hi = this.hi << 1 | this.mi >> 23; this.mi = (this.mi << 1 | this.lo >> 23) & 0xffffff; this.lo = this.lo << 1 & 0xffffff}; MlInt64.prototype.lsr1 = function() {this.lo = (this.lo >>> 1 | this.mi << 23) & 0xffffff; this.mi = (this.mi >>> 1 | this.hi << 23) & 0xffffff; this.hi = this.hi >>> 1}; MlInt64.prototype.udivmod = function(x) {var offset=0, modulus=this.copy(), divisor=x.copy(), quotient=new MlInt64(0,0,0); while(modulus.ucompare(divisor) > 0){offset++;divisor.lsl1()} while(offset >= 0) {offset--; quotient.lsl1(); if(modulus.ucompare(divisor) >= 0) {quotient.lo++;modulus = modulus.sub(divisor)} divisor.lsr1()} return {quotient:quotient,modulus:modulus}}; MlInt64.prototype.div = function(y) {var x=this; if(y.isZero())caml_raise_zero_divide(); var sign=x.hi ^ y.hi; if(x.hi & 0x8000)x = x.neg(); if(y.hi & 0x8000)y = y.neg(); var q=x.udivmod(y).quotient; if(sign & 0x8000)q = q.neg(); return q}; MlInt64.prototype.mod = function(y) {var x=this; if(y.isZero())caml_raise_zero_divide(); var sign=x.hi; if(x.hi & 0x8000)x = x.neg(); if(y.hi & 0x8000)y = y.neg(); var r=x.udivmod(y).modulus; if(sign & 0x8000)r = r.neg(); return r}; MlInt64.prototype.toInt = function(){return this.lo | this.mi << 24}; MlInt64.prototype.toFloat = function() {return (this.hi << 16) * Math.pow(2,32) + this.mi * Math.pow(2,24) + this.lo}; MlInt64.prototype.toArray = function() {return [this.hi >> 8, this.hi & 0xff, this.mi >> 16, this.mi >> 8 & 0xff, this.mi & 0xff, this.lo >> 16, this.lo >> 8 & 0xff, this.lo & 0xff]}; MlInt64.prototype.lo32 = function(){return this.lo | (this.mi & 0xff) << 24}; MlInt64.prototype.hi32 = function(){return this.mi >>> 8 & 0xffff | this.hi << 16}; function caml_int64_of_int32(x) {return new MlInt64(x & 0xffffff,x >> 24 & 0xffffff,x >> 31 & 0xffff)} function caml_int64_to_int32(x){return x.toInt()} function caml_int64_is_negative(x){return + x.isNeg()} function caml_int64_neg(x){return x.neg()} function caml_subarray_to_jsbytes(a,i,len) {var f=String.fromCharCode; if(i == 0 && len <= 4096 && len == a.length)return f.apply(null,a); var s=""; for(;0 < len;i += 1024,len -= 1024) s += f.apply(null,a.slice(i,i + Math.min(len,1024))); return s} function caml_convert_string_to_bytes(s) {if(s.t == 2) s.c += caml_str_repeat(s.l - s.c.length,"\0"); else s.c = caml_subarray_to_jsbytes(s.c,0,s.c.length); s.t = 0} function caml_jsbytes_of_string(s) {s.t & 6 && caml_convert_string_to_bytes(s);return s.c} function caml_raise_with_arg(tag,arg){throw [0,tag,arg]} function jsoo_is_ascii(s) {if(s.length < 24) {for(var i=0;i < s.length;i++)if(s.charCodeAt(i) > 127)return false; return true} else return ! /[^\x00-\x7f]/.test(s)} function caml_utf16_of_utf8(s) {for(var b="",t="",c,c1,c2,v,i=0,l=s.length;i < l;i++) {c1 = s.charCodeAt(i); if(c1 < 0x80) {for(var j=i + 1;j < l && (c1 = s.charCodeAt(j)) < 0x80;j++); if(j - i > 512) {t.substr(0,1);b += t;t = "";b += s.slice(i,j)} else t += s.slice(i,j); if(j == l)break; i = j} v = 1; if(++i < l && ((c2 = s.charCodeAt(i)) & - 64) == 128) {c = c2 + (c1 << 6); if(c1 < 0xe0) {v = c - 0x3080;if(v < 0x80)v = 1} else {v = 2; if(++i < l && ((c2 = s.charCodeAt(i)) & - 64) == 128) {c = c2 + (c << 6); if(c1 < 0xf0) {v = c - 0xe2080; if(v < 0x800 || v >= 0xd7ff && v < 0xe000)v = 2} else {v = 3; if (++i < l && ((c2 = s.charCodeAt(i)) & - 64) == 128 && c1 < 0xf5) {v = c2 - 0x3c82080 + (c << 6); if(v < 0x10000 || v > 0x10ffff)v = 3}}}}} if(v < 4) {i -= v;t += "\ufffd"} else if(v > 0xffff) t += String.fromCharCode(0xd7c0 + (v >> 10),0xdc00 + (v & 0x3FF)); else t += String.fromCharCode(v); if(t.length > 1024){t.substr(0,1);b += t;t = ""}} return b + t} function MlBytes(tag,contents,length) {this.t = tag;this.c = contents;this.l = length} MlBytes.prototype.toString = function() {switch(this.t) {case 9:return this.c; default:caml_convert_string_to_bytes(this);case 0: if(jsoo_is_ascii(this.c)){this.t = 9;return this.c}this.t = 8; case 8:return this.c }}; MlBytes.prototype.toUtf16 = function() {var r=this.toString(); if(this.t == 9)return r; return caml_utf16_of_utf8(r)}; MlBytes.prototype.slice = function() {var content=this.t == 4?this.c.slice():this.c; return new MlBytes(this.t,content,this.l)}; function caml_bytes_of_jsbytes(s){return new MlBytes(0,s,s.length)} function caml_string_of_jsbytes(s){return caml_bytes_of_jsbytes(s)} function caml_raise_with_string(tag,msg) {caml_raise_with_arg(tag,caml_string_of_jsbytes(msg))} function caml_invalid_argument(msg) {caml_raise_with_string(caml_global_data.Invalid_argument,msg)} function caml_parse_format(fmt) {fmt = caml_jsbytes_of_string(fmt); var len=fmt.length; if(len > 31)caml_invalid_argument("format_int: format too long"); var f= {justify:"+", signstyle:"-", filler:" ", alternate:false, base:0, signedconv:false, width:0, uppercase:false, sign:1, prec:- 1, conv:"f"}; for(var i=0;i < len;i++) {var c=fmt.charAt(i); switch(c) {case "-":f.justify = "-";break; case "+": case " ":f.signstyle = c;break; case "0":f.filler = "0";break; case "#":f.alternate = true;break; case "1": case "2": case "3": case "4": case "5": case "6": case "7": case "8": case "9": f.width = 0; while(c = fmt.charCodeAt(i) - 48,c >= 0 && c <= 9) {f.width = f.width * 10 + c;i++} i--; break; case ".": f.prec = 0; i++; while(c = fmt.charCodeAt(i) - 48,c >= 0 && c <= 9) {f.prec = f.prec * 10 + c;i++} i--; case "d": case "i":f.signedconv = true; case "u":f.base = 10;break; case "x":f.base = 16;break; case "X":f.base = 16;f.uppercase = true;break; case "o":f.base = 8;break; case "e": case "f": case "g":f.signedconv = true;f.conv = c;break; case "E": case "F": case "G": f.signedconv = true; f.uppercase = true; f.conv = c.toLowerCase(); break }} return f} function caml_finish_formatting(f,rawbuffer) {if(f.uppercase)rawbuffer = rawbuffer.toUpperCase(); var len=rawbuffer.length; if(f.signedconv && (f.sign < 0 || f.signstyle != "-"))len++; if(f.alternate){if(f.base == 8)len += 1;if(f.base == 16)len += 2} var buffer=""; if(f.justify == "+" && f.filler == " ") for(var i=len;i < f.width;i++)buffer += " "; if(f.signedconv) if(f.sign < 0) buffer += "-"; else if(f.signstyle != "-")buffer += f.signstyle; if(f.alternate && f.base == 8)buffer += "0"; if(f.alternate && f.base == 16)buffer += "0x"; if(f.justify == "+" && f.filler == "0") for(var i=len;i < f.width;i++)buffer += "0"; buffer += rawbuffer; if(f.justify == "-")for(var i=len;i < f.width;i++)buffer += " "; return caml_string_of_jsbytes(buffer)} function caml_int64_format(fmt,x) {var f=caml_parse_format(fmt); if(f.signedconv && caml_int64_is_negative(x)) {f.sign = - 1;x = caml_int64_neg(x)} var buffer="", wbase=caml_int64_of_int32(f.base), cvtbl="0123456789abcdef"; do {var p=x.udivmod(wbase); x = p.quotient; buffer = cvtbl.charAt(caml_int64_to_int32(p.modulus)) + buffer} while (! caml_int64_is_zero(x)); if(f.prec >= 0) {f.filler = " "; var n=f.prec - buffer.length; if(n > 0)buffer = caml_str_repeat(n,"0") + buffer} return caml_finish_formatting(f,buffer)} function caml_expm1_float(x){return Math.expm1(x)} function caml_jsstring_of_string(s){return s.toUtf16()} function fs_node_supported() {return typeof globalThis.process !== "undefined" && typeof globalThis.process.versions !== "undefined" && typeof globalThis.process.versions.node !== "undefined"} function make_path_is_absolute() {function posix(path) {if(path.charAt(0) === "/")return ["",path.substring(1)];return} function win32(path) {var splitDeviceRe= /^([a-zA-Z]:|[\\/]{2}[^\\/]+[\\/]+[^\\/]+)?([\\/])?([\s\S]*?)$/, result=splitDeviceRe.exec(path), device=result[1] || "", isUnc=Boolean(device && device.charAt(1) !== ":"); if(Boolean(result[2] || isUnc)) {var root=result[1] || "",sep=result[2] || ""; return [root,path.substring(root.length + sep.length)]} return} return fs_node_supported() && globalThis.process && globalThis.process.platform ?globalThis.process.platform === "win32"?win32:posix :posix} var path_is_absolute=make_path_is_absolute(); function caml_trailing_slash(name) {return name.slice(- 1) !== "/"?name + "/":name} if(fs_node_supported() && globalThis.process && globalThis.process.cwd) var caml_current_dir=globalThis.process.cwd().replace(/\\/g,"/"); else var caml_current_dir="/static"; caml_current_dir = caml_trailing_slash(caml_current_dir); function caml_make_path(name) {name = caml_jsstring_of_string(name); if(! path_is_absolute(name))name = caml_current_dir + name; var comp0=path_is_absolute(name),comp=comp0[1].split("/"),ncomp=[]; for(var i=0;i < comp.length;i++) switch(comp[i]) {case "..":if(ncomp.length > 1)ncomp.pop();break; case ".":break; default:ncomp.push(comp[i]);break} ncomp.unshift(comp0[0]); ncomp.orig = name; return ncomp} function caml_utf8_of_utf16(s) {for(var b="",t=b,c,d,i=0,l=s.length;i < l;i++) {c = s.charCodeAt(i); if(c < 0x80) {for(var j=i + 1;j < l && (c = s.charCodeAt(j)) < 0x80;j++); if(j - i > 512) {t.substr(0,1);b += t;t = "";b += s.slice(i,j)} else t += s.slice(i,j); if(j == l)break; i = j} if(c < 0x800) {t += String.fromCharCode(0xc0 | c >> 6); t += String.fromCharCode(0x80 | c & 0x3f)} else if(c < 0xd800 || c >= 0xdfff) t += String.fromCharCode (0xe0 | c >> 12,0x80 | c >> 6 & 0x3f,0x80 | c & 0x3f); else if (c >= 0xdbff || i + 1 == l || (d = s.charCodeAt(i + 1)) < 0xdc00 || d > 0xdfff) t += "\xef\xbf\xbd"; else {i++; c = (c << 10) + d - 0x35fdc00; t += String.fromCharCode (0xf0 | c >> 18, 0x80 | c >> 12 & 0x3f, 0x80 | c >> 6 & 0x3f, 0x80 | c & 0x3f)} if(t.length > 1024){t.substr(0,1);b += t;t = ""}} return b + t} function caml_bytes_of_utf16_jsstring(s) {var tag=9; if(! jsoo_is_ascii(s))tag = 8,s = caml_utf8_of_utf16(s); return new MlBytes(tag,s,s.length)} function caml_string_of_jsstring(s) {return caml_bytes_of_utf16_jsstring(s)} var unix_error= ["E2BIG", "EACCES", "EAGAIN", "EBADF", "EBUSY", "ECHILD", "EDEADLK", "EDOM", "EEXIST", "EFAULT", "EFBIG", "EINTR", "EINVAL", "EIO", "EISDIR", "EMFILE", "EMLINK", "ENAMETOOLONG", "ENFILE", "ENODEV", "ENOENT", "ENOEXEC", "ENOLCK", "ENOMEM", "ENOSPC", "ENOSYS", "ENOTDIR", "ENOTEMPTY", "ENOTTY", "ENXIO", "EPERM", "EPIPE", "ERANGE", "EROFS", "ESPIPE", "ESRCH", "EXDEV", "EWOULDBLOCK", "EINPROGRESS", "EALREADY", "ENOTSOCK", "EDESTADDRREQ", "EMSGSIZE", "EPROTOTYPE", "ENOPROTOOPT", "EPROTONOSUPPORT", "ESOCKTNOSUPPORT", "EOPNOTSUPP", "EPFNOSUPPORT", "EAFNOSUPPORT", "EADDRINUSE", "EADDRNOTAVAIL", "ENETDOWN", "ENETUNREACH", "ENETRESET", "ECONNABORTED", "ECONNRESET", "ENOBUFS", "EISCONN", "ENOTCONN", "ESHUTDOWN", "ETOOMANYREFS", "ETIMEDOUT", "ECONNREFUSED", "EHOSTDOWN", "EHOSTUNREACH", "ELOOP", "EOVERFLOW"]; function make_unix_err_args(code,syscall,path,errno) {var variant=unix_error.indexOf(code); if(variant < 0){if(errno == null)errno = - 9999;variant = [0,errno]} var args= [variant, caml_string_of_jsstring(syscall || ""), caml_string_of_jsstring(path || "")]; return args} var caml_named_values={}; function caml_named_value(nm){return caml_named_values[nm]} function caml_raise_with_args(tag,args){throw [0,tag].concat(args)} function caml_is_ml_bytes(s){return s instanceof MlBytes} function caml_is_ml_string(s){return caml_is_ml_bytes(s)} function caml_bytes_of_array(a){return new MlBytes(4,a,a.length)} function caml_bytes_of_string(s){return s} function caml_raise_sys_error(msg) {caml_raise_with_string(caml_global_data.Sys_error,msg)} function caml_raise_no_such_file(name) {caml_raise_sys_error(name + ": No such file or directory")} function caml_bytes_bound_error() {caml_invalid_argument("index out of bounds")} function caml_bytes_unsafe_get(s,i) {switch(s.t & 6) {default:if(i >= s.c.length)return 0;case 0:return s.c.charCodeAt(i); case 4:return s.c[i] }} function caml_bytes_get(s,i) {if(i >>> 0 >= s.l)caml_bytes_bound_error(); return caml_bytes_unsafe_get(s,i)} function caml_create_bytes(len) {if(len < 0)caml_invalid_argument("Bytes.create"); return new MlBytes(len?2:9,"",len)} function caml_ml_bytes_length(s){return s.l} function caml_convert_bytes_to_array(s) {if(globalThis.Uint8Array) var a=new (globalThis.Uint8Array)(s.l); else var a=new Array(s.l); var b=s.c,l=b.length,i=0; for(;i < l;i++)a[i] = b.charCodeAt(i); for(l = s.l;i < l;i++)a[i] = 0; s.c = a; s.t = 4; return a} function caml_blit_bytes(s1,i1,s2,i2,len) {if(len == 0)return 0; if(i2 == 0 && (len >= s2.l || s2.t == 2 && len >= s2.c.length)) {s2.c = s1.t == 4 ?caml_subarray_to_jsbytes(s1.c,i1,len) :i1 == 0 && s1.c.length == len?s1.c:s1.c.substr(i1,len); s2.t = s2.c.length == s2.l?0:2} else if(s2.t == 2 && i2 == s2.c.length) {s2.c += s1.t == 4 ?caml_subarray_to_jsbytes(s1.c,i1,len) :i1 == 0 && s1.c.length == len?s1.c:s1.c.substr(i1,len); s2.t = s2.c.length == s2.l?0:2} else {if(s2.t != 4)caml_convert_bytes_to_array(s2); var c1=s1.c,c2=s2.c; if(s1.t == 4) if(i2 <= i1) for(var i=0;i < len;i++)c2[i2 + i] = c1[i1 + i]; else for(var i=len - 1;i >= 0;i--)c2[i2 + i] = c1[i1 + i]; else {var l=Math.min(len,c1.length - i1); for(var i=0;i < l;i++)c2[i2 + i] = c1.charCodeAt(i1 + i); for(;i < len;i++)c2[i2 + i] = 0}} return 0} function caml_blit_string(a,b,c,d,e) {caml_blit_bytes(caml_bytes_of_string(a),b,c,d,e);return 0} function MlFile(){} function MlFakeFile(content){this.data = content} MlFakeFile.prototype = new MlFile(); MlFakeFile.prototype.truncate = function(len) {var old=this.data; this.data = caml_create_bytes(len | 0); caml_blit_bytes(old,0,this.data,0,len)}; MlFakeFile.prototype.length = function(){return caml_ml_bytes_length(this.data)}; MlFakeFile.prototype.write = function(offset,buf,pos,len) {var clen=this.length(); if(offset + len >= clen) {var new_str=caml_create_bytes(offset + len),old_data=this.data; this.data = new_str; caml_blit_bytes(old_data,0,this.data,0,clen)} caml_blit_string(buf,pos,this.data,offset,len); return 0}; MlFakeFile.prototype.read = function(offset,buf,pos,len) {var clen=this.length(); caml_blit_bytes(this.data,offset,buf,pos,len); return 0}; MlFakeFile.prototype.read_one = function(offset){return caml_bytes_get(this.data,offset)}; MlFakeFile.prototype.close = function(){}; MlFakeFile.prototype.constructor = MlFakeFile; function MlFakeDevice(root,f) {this.content = {};this.root = root;this.lookupFun = f} MlFakeDevice.prototype.nm = function(name){return this.root + name}; MlFakeDevice.prototype.create_dir_if_needed = function(name) {var comp=name.split("/"),res=""; for(var i=0;i < comp.length - 1;i++) {res += comp[i] + "/"; if(this.content[res])continue; this.content[res] = Symbol("directory")}}; MlFakeDevice.prototype.slash = function(name){return /\/$/.test(name)?name:name + "/"}; MlFakeDevice.prototype.lookup = function(name) {if(! this.content[name] && this.lookupFun) {var res= this.lookupFun (caml_string_of_jsbytes(this.root),caml_string_of_jsbytes(name)); if(res !== 0) {this.create_dir_if_needed(name); this.content[name] = new MlFakeFile(caml_bytes_of_string(res[1]))}}}; MlFakeDevice.prototype.exists = function(name) {if(name == "")return 1; var name_slash=this.slash(name); if(this.content[name_slash])return 1; this.lookup(name); return this.content[name]?1:0}; MlFakeDevice.prototype.mkdir = function(name,mode,raise_unix) {var unix_error=raise_unix && caml_named_value("Unix.Unix_error"); if(this.exists(name)) if(unix_error) caml_raise_with_args (unix_error,make_unix_err_args("EEXIST","mkdir",this.nm(name))); else caml_raise_sys_error(name + ": File exists"); var parent=/^(.*)\/[^/]+/.exec(name); parent = parent && parent[1] || ""; if(! this.exists(parent)) if(unix_error) caml_raise_with_args (unix_error,make_unix_err_args("ENOENT","mkdir",this.nm(parent))); else caml_raise_sys_error(parent + ": No such file or directory"); if(! this.is_dir(parent)) if(unix_error) caml_raise_with_args (unix_error,make_unix_err_args("ENOTDIR","mkdir",this.nm(parent))); else caml_raise_sys_error(parent + ": Not a directory"); this.create_dir_if_needed(this.slash(name))}; MlFakeDevice.prototype.rmdir = function(name,raise_unix) {var unix_error=raise_unix && caml_named_value("Unix.Unix_error"), name_slash=name == ""?"":this.slash(name), r=new RegExp("^" + name_slash + "([^/]+)"); if(! this.exists(name)) if(unix_error) caml_raise_with_args (unix_error,make_unix_err_args("ENOENT","rmdir",this.nm(name))); else caml_raise_sys_error(name + ": No such file or directory"); if(! this.is_dir(name)) if(unix_error) caml_raise_with_args (unix_error,make_unix_err_args("ENOTDIR","rmdir",this.nm(name))); else caml_raise_sys_error(name + ": Not a directory"); for(var n in this.content) if(n.match(r)) if(unix_error) caml_raise_with_args (unix_error,make_unix_err_args("ENOTEMPTY","rmdir",this.nm(name))); else caml_raise_sys_error(this.nm(name) + ": Directory not empty"); delete this.content[name_slash]}; MlFakeDevice.prototype.readdir = function(name) {var name_slash=name == ""?"":this.slash(name); if(! this.exists(name)) caml_raise_sys_error(name + ": No such file or directory"); if(! this.is_dir(name))caml_raise_sys_error(name + ": Not a directory"); var r=new RegExp("^" + name_slash + "([^/]+)"),seen={},a=[]; for(var n in this.content) {var m=n.match(r); if(m && ! seen[m[1]]){seen[m[1]] = true;a.push(m[1])}} return a}; MlFakeDevice.prototype.is_dir = function(name) {if(name == "")return true; var name_slash=this.slash(name); return this.content[name_slash]?1:0}; MlFakeDevice.prototype.unlink = function(name) {var ok=this.content[name]?true:false; delete this.content[name]; return ok}; MlFakeDevice.prototype.open = function(name,f) {if(f.rdonly && f.wronly) caml_raise_sys_error (this.nm(name) + " : flags Open_rdonly and Open_wronly are not compatible"); if(f.text && f.binary) caml_raise_sys_error (this.nm(name) + " : flags Open_text and Open_binary are not compatible"); this.lookup(name); if(this.content[name]) {if(this.is_dir(name)) caml_raise_sys_error(this.nm(name) + " : is a directory"); if(f.create && f.excl) caml_raise_sys_error(this.nm(name) + " : file already exists"); var file=this.content[name]; if(f.truncate)file.truncate(); return file} else if(f.create) {this.create_dir_if_needed(name); this.content[name] = new MlFakeFile(caml_create_bytes(0)); return this.content[name]} else caml_raise_no_such_file(this.nm(name))}; MlFakeDevice.prototype.register = function(name,content) {var file; if(this.content[name]) caml_raise_sys_error(this.nm(name) + " : file already exists"); if(caml_is_ml_bytes(content))file = new MlFakeFile(content); if(caml_is_ml_string(content)) file = new MlFakeFile(caml_bytes_of_string(content)); else if(content instanceof Array) file = new MlFakeFile(caml_bytes_of_array(content)); else if(typeof content === "string") file = new MlFakeFile(caml_bytes_of_jsbytes(content)); else if(content.toString) {var bytes= caml_bytes_of_string(caml_string_of_jsstring(content.toString())); file = new MlFakeFile(bytes)} if(file) {this.create_dir_if_needed(name);this.content[name] = file} else caml_raise_sys_error (this.nm(name) + " : registering file with invalid content type")}; MlFakeDevice.prototype.constructor = MlFakeDevice; function caml_ml_string_length(s){return caml_ml_bytes_length(s)} function caml_string_unsafe_get(s,i){return caml_bytes_unsafe_get(s,i)} function caml_array_of_string(s) {var l=caml_ml_string_length(s),a=new Array(l),i=0; for(;i < l;i++)a[i] = caml_string_unsafe_get(s,i); return a} function caml_array_of_bytes(s) {if(s.t != 4)caml_convert_bytes_to_array(s);return s.c} function caml_bytes_unsafe_set(s,i,c) {c &= 0xff; if(s.t != 4) {if(i == s.c.length) {s.c += String.fromCharCode(c);if(i + 1 == s.l)s.t = 0;return 0} caml_convert_bytes_to_array(s)} s.c[i] = c; return 0} function caml_bytes_set(s,i,c) {if(i >>> 0 >= s.l)caml_bytes_bound_error(); return caml_bytes_unsafe_set(s,i,c)} function MlNodeFile(fd){this.fs = require("fs");this.fd = fd} MlNodeFile.prototype = new MlFile(); MlNodeFile.prototype.truncate = function(len) {try {this.fs.ftruncateSync(this.fd,len | 0)} catch(err){caml_raise_sys_error(err.toString())}}; MlNodeFile.prototype.length = function() {try {return this.fs.fstatSync(this.fd).size} catch(err){caml_raise_sys_error(err.toString())}}; MlNodeFile.prototype.write = function(offset,buf,buf_offset,len) {var a=caml_array_of_string(buf); if(! (a instanceof globalThis.Uint8Array)) a = new (globalThis.Uint8Array)(a); var buffer=globalThis.Buffer.from(a); try {this.fs.writeSync(this.fd,buffer,buf_offset,len,offset)} catch(err){caml_raise_sys_error(err.toString())} return 0}; MlNodeFile.prototype.read = function(offset,buf,buf_offset,len) {var a=caml_array_of_bytes(buf); if(! (a instanceof globalThis.Uint8Array)) a = new (globalThis.Uint8Array)(a); var buffer=globalThis.Buffer.from(a); try {this.fs.readSync(this.fd,buffer,buf_offset,len,offset)} catch(err){caml_raise_sys_error(err.toString())} for(var i=0;i < len;i++) caml_bytes_set(buf,buf_offset + i,buffer[buf_offset + i]); return 0}; MlNodeFile.prototype.read_one = function(offset) {var a=new (globalThis.Uint8Array)(1),buffer=globalThis.Buffer.from(a); try {this.fs.readSync(this.fd,buffer,0,1,offset)} catch(err){caml_raise_sys_error(err.toString())} return buffer[0]}; MlNodeFile.prototype.close = function() {try {this.fs.closeSync(this.fd)} catch(err){caml_raise_sys_error(err.toString())}}; MlNodeFile.prototype.constructor = MlNodeFile; function MlNodeDevice(root){this.fs = require("fs");this.root = root} MlNodeDevice.prototype.nm = function(name){return this.root + name}; MlNodeDevice.prototype.exists = function(name) {try {return this.fs.existsSync(this.nm(name))?1:0}catch(err){return 0}}; MlNodeDevice.prototype.mkdir = function(name,mode,raise_unix) {try {this.fs.mkdirSync(this.nm(name),{mode:mode});return 0} catch(err){this.raise_nodejs_error(err,raise_unix)}}; MlNodeDevice.prototype.rmdir = function(name,raise_unix) {try {this.fs.rmdirSync(this.nm(name));return 0} catch(err){this.raise_nodejs_error(err,raise_unix)}}; MlNodeDevice.prototype.readdir = function(name,raise_unix) {try {return this.fs.readdirSync(this.nm(name))} catch(err){this.raise_nodejs_error(err,raise_unix)}}; MlNodeDevice.prototype.is_dir = function(name) {try {return this.fs.statSync(this.nm(name)).isDirectory()?1:0} catch(err){caml_raise_sys_error(err.toString())}}; MlNodeDevice.prototype.unlink = function(name,raise_unix) {try {var b=this.fs.existsSync(this.nm(name))?1:0; this.fs.unlinkSync(this.nm(name)); return b} catch(err){this.raise_nodejs_error(err,raise_unix)}}; MlNodeDevice.prototype.open = function(name,f,raise_unix) {var consts=require("constants"),res=0; for(var key in f) switch(key) {case "rdonly":res |= consts.O_RDONLY;break; case "wronly":res |= consts.O_WRONLY;break; case "append":res |= consts.O_WRONLY | consts.O_APPEND;break; case "create":res |= consts.O_CREAT;break; case "truncate":res |= consts.O_TRUNC;break; case "excl":res |= consts.O_EXCL;break; case "binary":res |= consts.O_BINARY;break; case "text":res |= consts.O_TEXT;break; case "nonblock":res |= consts.O_NONBLOCK;break } try {var fd=this.fs.openSync(this.nm(name),res);return new MlNodeFile(fd)} catch(err){this.raise_nodejs_error(err,raise_unix)}}; MlNodeDevice.prototype.rename = function(o,n,raise_unix) {try {this.fs.renameSync(this.nm(o),this.nm(n))} catch(err){this.raise_nodejs_error(err,raise_unix)}}; MlNodeDevice.prototype.stat = function(name,raise_unix) {try {var js_stats=this.fs.statSync(this.nm(name)); return this.stats_from_js(js_stats)} catch(err){this.raise_nodejs_error(err,raise_unix)}}; MlNodeDevice.prototype.lstat = function(name,raise_unix) {try {var js_stats=this.fs.lstatSync(this.nm(name)); return this.stats_from_js(js_stats)} catch(err){this.raise_nodejs_error(err,raise_unix)}}; MlNodeDevice.prototype.symlink = function(to_dir,target,path,raise_unix) {try {this.fs.symlinkSync(this.nm(target),this.nm(path),to_dir?"dir":"file"); return 0} catch(err){this.raise_nodejs_error(err,raise_unix)}}; MlNodeDevice.prototype.readlink = function(name,raise_unix) {try {var link=this.fs.readlinkSync(this.nm(name),"utf8"); return caml_string_of_jsstring(link)} catch(err){this.raise_nodejs_error(err,raise_unix)}}; MlNodeDevice.prototype.raise_nodejs_error = function(err,raise_unix) {var unix_error=caml_named_value("Unix.Unix_error"); if(raise_unix && unix_error) {var args=make_unix_err_args(err.code,err.syscall,err.path,err.errno); caml_raise_with_args(unix_error,args)} else caml_raise_sys_error(err.toString())}; MlNodeDevice.prototype.stats_from_js = function(js_stats) {var file_kind; if(js_stats.isFile()) file_kind = 0; else if(js_stats.isDirectory()) file_kind = 1; else if(js_stats.isCharacterDevice()) file_kind = 2; else if(js_stats.isBlockDevice()) file_kind = 3; else if(js_stats.isSymbolicLink()) file_kind = 4; else if(js_stats.isFIFO()) file_kind = 5; else if(js_stats.isSocket())file_kind = 6; return [0, js_stats.dev, js_stats.ino, file_kind, js_stats.mode, js_stats.nlink, js_stats.uid, js_stats.gid, js_stats.rdev, js_stats.size, js_stats.atimeMs, js_stats.mtimeMs, js_stats.ctimeMs]}; MlNodeDevice.prototype.constructor = MlNodeDevice; function caml_get_root(path) {var x=path_is_absolute(path);if(! x)return;return x[0] + "/"} function caml_failwith(msg) {if(! caml_global_data.Failure) caml_global_data.Failure = [248,caml_string_of_jsbytes("Failure"),- 3]; caml_raise_with_string(caml_global_data.Failure,msg)} var caml_root= caml_get_root(caml_current_dir) || caml_failwith("unable to compute caml_root"), jsoo_mount_point=[]; if(fs_node_supported()) jsoo_mount_point.push ({path:caml_root,device:new MlNodeDevice(caml_root)}); else jsoo_mount_point.push ({path:caml_root,device:new MlFakeDevice(caml_root)}); jsoo_mount_point.push ({path:"/static/",device:new MlFakeDevice("/static/")}); function resolve_fs_device(name) {var path=caml_make_path(name), name=path.join("/"), name_slash=caml_trailing_slash(name), res; for(var i=0;i < jsoo_mount_point.length;i++) {var m=jsoo_mount_point[i]; if (name_slash.search(m.path) == 0 && (! res || res.path.length < m.path.length)) res = {path:m.path, device:m.device, rest:name.substring(m.path.length,name.length)}} if(! res && fs_node_supported()) {var root=caml_get_root(name); if(root && root.match(/^[a-zA-Z]:\/$/)) {var m={path:root,device:new MlNodeDevice(root)}; jsoo_mount_point.push(m); res = {path:m.path, device:m.device, rest:name.substring(m.path.length,name.length)}}} if(res)return res; caml_raise_sys_error("no device found for " + name_slash)} function caml_sys_is_directory(name) {var root=resolve_fs_device(name),a=root.device.is_dir(root.rest); return a?1:0} function caml_raise_not_found() {caml_raise_constant(caml_global_data.Not_found)} function caml_sys_getenv(name) {var g=globalThis,n=caml_jsstring_of_string(name); if(g.process && g.process.env && g.process.env[n] != undefined) return caml_string_of_jsstring(g.process.env[n]); if(globalThis.jsoo_static_env && globalThis.jsoo_static_env[n]) return caml_string_of_jsstring(globalThis.jsoo_static_env[n]); caml_raise_not_found()} function shift_right_nat(nat1,ofs1,len1,nat2,ofs2,nbits) {if(nbits == 0){nat2.data[ofs2] = 0;return 0} var wrap=0; for(var i=len1 - 1;i >= 0;i--) {var a=nat1.data[ofs1 + i] >>> 0; nat1.data[ofs1 + i] = a >>> nbits | wrap; wrap = a << 32 - nbits} nat2.data[ofs2] = wrap; return 0} var caml_gr_state; function caml_gr_state_get() {if(caml_gr_state)return caml_gr_state; throw [0, caml_named_value("Graphics.Graphic_failure"), caml_string_of_jsbytes("Not initialized")]} function caml_gr_point_color(x,y) {var s=caml_gr_state_get(), im=s.context.getImageData(x,s.height - y,1,1), d=im.data; return (d[0] << 16) + (d[1] << 8) + d[2]} var MlObjectTable; if(typeof globalThis.WeakMap === "undefined") MlObjectTable = function() {function NaiveLookup(objs){this.objs = objs} NaiveLookup.prototype.get = function(v) {for(var i=0;i < this.objs.length;i++)if(this.objs[i] === v)return i}; NaiveLookup.prototype.set = function(){}; return function() {this.objs = [];this.lookup = new NaiveLookup(this.objs)}} (); else MlObjectTable = function(){this.objs = [];this.lookup = new (globalThis.WeakMap)()}; MlObjectTable.prototype.store = function(v){this.lookup.set(v,this.objs.length);this.objs.push(v)}; MlObjectTable.prototype.recall = function(v) {var i=this.lookup.get(v); return i === undefined?undefined:this.objs.length - i}; function caml_sys_rename(o,n) {var o_root=resolve_fs_device(o),n_root=resolve_fs_device(n); if(o_root.device != n_root.device) caml_failwith ("caml_sys_rename: cannot move file between two filesystem"); if(! o_root.device.rename) caml_failwith("caml_sys_rename: no implemented"); o_root.device.rename(o_root.rest,n_root.rest)} function caml_log10_float(x){return Math.log10(x)} function unix_unlink(name) {var root=resolve_fs_device(name); if(! root.device.unlink)caml_failwith("unix_unlink: not implemented"); return root.device.unlink(root.rest,true)} var caml_runtime_warnings=0; function caml_ml_enable_runtime_warnings(bool) {caml_runtime_warnings = bool;return 0} function caml_classify_float(x) {if(isFinite(x)) {if(Math.abs(x) >= 2.2250738585072014e-308)return 0; if(x != 0)return 1; return 2} return isNaN(x)?4:3} function unix_rmdir(name) {var root=resolve_fs_device(name); if(! root.device.rmdir)caml_failwith("unix_rmdir: not implemented"); return root.device.rmdir(root.rest,true)} function caml_ml_refill_input(chan) {var str=chan.refill(),str_len=caml_ml_string_length(str); if(str_len == 0)chan.refill = null; chan.file.write(chan.file.length(),str,0,str_len); return str_len} var caml_ml_channels=new Array(); function caml_ml_may_refill_input(chanid) {var chan=caml_ml_channels[chanid]; if(chan.refill == null)return; if(chan.file.length() != chan.offset)return; caml_ml_refill_input(chan)} function caml_array_bound_error() {caml_invalid_argument("index out of bounds")} function caml_ml_input_scan_line(chanid) {var chan=caml_ml_channels[chanid]; caml_ml_may_refill_input(chanid); var p=chan.offset,len=chan.file.length(); if(p >= len)return 0; while(true) {if(p >= len)return - (p - chan.offset); if(chan.file.read_one(p) == 10)return p - chan.offset + 1; p++}} function caml_gc_minor(){return 0} function caml_int64_of_bytes(a) {return new MlInt64 (a[7] << 0 | a[6] << 8 | a[5] << 16, a[4] << 0 | a[3] << 8 | a[2] << 16, a[1] << 0 | a[0] << 8)} function caml_ba_uint8_get64(ba,i0) {var ofs=ba.offset(i0); if(ofs + 7 >= ba.data.length)caml_array_bound_error(); var b1=ba.get(ofs + 0), b2=ba.get(ofs + 1), b3=ba.get(ofs + 2), b4=ba.get(ofs + 3), b5=ba.get(ofs + 4), b6=ba.get(ofs + 5), b7=ba.get(ofs + 6), b8=ba.get(ofs + 7); return caml_int64_of_bytes([b8,b7,b6,b5,b4,b3,b2,b1])} function caml_int64_to_bytes(x){return x.toArray()} function caml_int64_marshal(writer,v,sizes) {var b=caml_int64_to_bytes(v); for(var i=0;i < 8;i++)writer.write(8,b[i]); sizes[0] = 8; sizes[1] = 8} function caml_ba_num_dims(ba){return ba.dims.length} function caml_return_exn_constant(tag){return tag} function caml_wrap_exception(e) {if(e instanceof Array)return e; if (globalThis.RangeError && e instanceof globalThis.RangeError && e.message && e.message.match(/maximum call stack/i)) return caml_return_exn_constant(caml_global_data.Stack_overflow); if (globalThis.InternalError && e instanceof globalThis.InternalError && e.message && e.message.match(/too much recursion/i)) return caml_return_exn_constant(caml_global_data.Stack_overflow); if(e instanceof globalThis.Error && caml_named_value("jsError")) return [0,caml_named_value("jsError"),e]; return [0,caml_global_data.Failure,caml_string_of_jsstring(String(e))]} function caml_create_file(name,content) {var root=resolve_fs_device(name); if(! root.device.register)caml_failwith("cannot register file"); root.device.register(root.rest,content); return 0} function jsoo_create_file(name,content) {var name=caml_string_of_jsbytes(name), content=caml_string_of_jsbytes(content); return caml_create_file(name,content)} function caml_fs_init() {var tmp=globalThis.caml_fs_tmp; if(tmp) for(var i=0;i < tmp.length;i++) jsoo_create_file(tmp[i].name,tmp[i].content); globalThis.jsoo_create_file = jsoo_create_file; globalThis.caml_fs_tmp = []; return 0} function caml_set_parser_trace(){return 0} function caml_list_of_js_array(a) {var l=0; for(var i=a.length - 1;i >= 0;i--){var e=a[i];l = [0,e,l]} return l} function unix_gettimeofday(){return new Date().getTime() / 1000} function caml_mul(a,b){return Math.imul(a,b)} function caml_hash_mix_int(h,d) {d = caml_mul(d,0xcc9e2d51 | 0); d = d << 15 | d >>> 32 - 15; d = caml_mul(d,0x1b873593); h ^= d; h = h << 13 | h >>> 32 - 13; return (h + (h << 2) | 0) + (0xe6546b64 | 0) | 0} function num_digits_nat(nat,ofs,len) {for(var i=len - 1;i >= 0;i--)if(nat.data[ofs + i] != 0)return i + 1; return 1} function caml_hash_nat(x) {var len=num_digits_nat(x,0,x.data.length),h=0; for(var i=0;i < len;i++)h = caml_hash_mix_int(h,x.data[i]); return h} function caml_call_gen(f,args) {if(f.fun)return caml_call_gen(f.fun,args); if(typeof f !== "function")return f; var n=f.length | 0; if(n === 0)return f.apply(null,args); var argsLen=args.length | 0,d=n - argsLen | 0; if(d == 0) return f.apply(null,args); else if(d < 0) return caml_call_gen(f.apply(null,args.slice(0,n)),args.slice(n)); else return function() {var extra_args=arguments.length == 0?1:arguments.length, nargs=new Array(args.length + extra_args); for(var i=0;i < args.length;i++)nargs[i] = args[i]; for(var i=0;i < arguments.length;i++) nargs[args.length + i] = arguments[i]; return caml_call_gen(f,nargs)}} function caml_js_wrap_callback_arguments(f) {return function() {var len=arguments.length,args=new Array(len); for(var i=0;i < len;i++)args[i] = arguments[i]; return caml_call_gen(f,[args])}} function caml_sys_chdir(dir) {var root=resolve_fs_device(dir); if(root.device.exists(root.rest)) {if(root.rest) caml_current_dir = caml_trailing_slash(root.path + root.rest); else caml_current_dir = root.path; return 0} else caml_raise_no_such_file(caml_jsbytes_of_string(dir))} function caml_gc_counters(){return [254,0,0,0]} function caml_gr_synchronize() {caml_failwith("caml_gr_synchronize not Implemented")} function unix_has_symlink(unit){return fs_node_supported()?1:0} var log2_ok=Math.log2 && Math.log2(1.1235582092889474E+307) == 1020; function jsoo_floor_log2(x) {if(log2_ok)return Math.floor(Math.log2(x)); var i=0; if(x == 0)return - Infinity; if(x >= 1)while(x >= 2){x /= 2;i++}else while(x < 1){x *= 2;i--} return i} function caml_int32_bits_of_float(x) {var float32a=new (globalThis.Float32Array)(1); float32a[0] = x; var int32a=new (globalThis.Int32Array)(float32a.buffer); return int32a[0] | 0} function caml_int64_create_lo_mi_hi(lo,mi,hi) {return new MlInt64(lo,mi,hi)} function caml_int64_bits_of_float(x) {if(! isFinite(x)) {if(isNaN(x))return caml_int64_create_lo_mi_hi(1,0,0x7ff0); return x > 0 ?caml_int64_create_lo_mi_hi(0,0,0x7ff0) :caml_int64_create_lo_mi_hi(0,0,0xfff0)} var sign=x == 0 && 1 / x == - Infinity?0x8000:x >= 0?0:0x8000; if(sign)x = - x; var exp=jsoo_floor_log2(x) + 1023; if(exp <= 0) {exp = 0;x /= Math.pow(2,- 1026)} else {x /= Math.pow(2,exp - 1027); if(x < 16){x *= 2;exp -= 1} if(exp == 0)x /= 2} var k=Math.pow(2,24),r3=x | 0; x = (x - r3) * k; var r2=x | 0; x = (x - r2) * k; var r1=x | 0; r3 = r3 & 0xf | sign | exp << 4; return caml_int64_create_lo_mi_hi(r1,r2,r3)} function caml_ba_serialize(writer,ba,sz) {writer.write(32,ba.dims.length); writer.write(32,ba.kind | ba.layout << 8); if(ba.caml_custom == "_bigarr02") for(var i=0;i < ba.dims.length;i++) if(ba.dims[i] < 0xffff) writer.write(16,ba.dims[i]); else {writer.write(16,0xffff); writer.write(32,0); writer.write(32,ba.dims[i])} else for(var i=0;i < ba.dims.length;i++)writer.write(32,ba.dims[i]); switch(ba.kind) {case 2: case 3: case 12: for(var i=0;i < ba.data.length;i++)writer.write(8,ba.data[i]);break; case 4: case 5: for(var i=0;i < ba.data.length;i++)writer.write(16,ba.data[i]);break; case 6: for(var i=0;i < ba.data.length;i++)writer.write(32,ba.data[i]);break; case 8: case 9: writer.write(8,0); for(var i=0;i < ba.data.length;i++)writer.write(32,ba.data[i]); break; case 7: for(var i=0;i < ba.data.length / 2;i++) {var b=caml_int64_to_bytes(ba.get(i)); for(var j=0;j < 8;j++)writer.write(8,b[j])} break; case 1: for(var i=0;i < ba.data.length;i++) {var b=caml_int64_to_bytes(caml_int64_bits_of_float(ba.get(i))); for(var j=0;j < 8;j++)writer.write(8,b[j])} break; case 0: for(var i=0;i < ba.data.length;i++) {var b=caml_int32_bits_of_float(ba.get(i));writer.write(32,b)} break; case 10: for(var i=0;i < ba.data.length / 2;i++) {var j=ba.get(i); writer.write(32,caml_int32_bits_of_float(j[1])); writer.write(32,caml_int32_bits_of_float(j[2]))} break; case 11: for(var i=0;i < ba.data.length / 2;i++) {var complex=ba.get(i), b=caml_int64_to_bytes(caml_int64_bits_of_float(complex[1])); for(var j=0;j < 8;j++)writer.write(8,b[j]); var b=caml_int64_to_bytes(caml_int64_bits_of_float(complex[2])); for(var j=0;j < 8;j++)writer.write(8,b[j])} break } sz[0] = (4 + ba.dims.length) * 4; sz[1] = (4 + ba.dims.length) * 8} function caml_ba_get_size_per_element(kind) {switch(kind){case 7:case 10:case 11:return 2;default:return 1}} function caml_ba_create_buffer(kind,size) {var g=globalThis,view; switch(kind) {case 0:view = g.Float32Array;break; case 1:view = g.Float64Array;break; case 2:view = g.Int8Array;break; case 3:view = g.Uint8Array;break; case 4:view = g.Int16Array;break; case 5:view = g.Uint16Array;break; case 6:view = g.Int32Array;break; case 7:view = g.Int32Array;break; case 8:view = g.Int32Array;break; case 9:view = g.Int32Array;break; case 10:view = g.Float32Array;break; case 11:view = g.Float64Array;break; case 12:view = g.Uint8Array;break } if(! view)caml_invalid_argument("Bigarray.create: unsupported kind"); var data=new view(size * caml_ba_get_size_per_element(kind)); return data} function caml_int32_float_of_bits(x) {var int32a=new (globalThis.Int32Array)(1); int32a[0] = x; var float32a=new (globalThis.Float32Array)(int32a.buffer); return float32a[0]} function caml_int64_float_of_bits(x) {var lo=x.lo,mi=x.mi,hi=x.hi,exp=(hi & 0x7fff) >> 4; if(exp == 2047) return (lo | mi | hi & 0xf) == 0?hi & 0x8000?- Infinity:Infinity:NaN; var k=Math.pow(2,- 24),res=(lo * k + mi) * k + (hi & 0xf); if(exp > 0) {res += 16;res *= Math.pow(2,exp - 1027)} else res *= Math.pow(2,- 1026); if(hi & 0x8000)res = - res; return res} function caml_ba_get_size(dims) {var n_dims=dims.length,size=1; for(var i=0;i < n_dims;i++) {if(dims[i] < 0) caml_invalid_argument("Bigarray.create: negative dimension"); size = size * dims[i]} return size} function caml_int64_create_lo_hi(lo,hi) {return new MlInt64 (lo & 0xffffff, lo >>> 24 & 0xff | (hi & 0xffff) << 8, hi >>> 16 & 0xffff)} function caml_int64_hi32(v){return v.hi32()} function caml_int64_lo32(v){return v.lo32()} var caml_ba_custom_name="_bigarr02"; function Ml_Bigarray(kind,layout,dims,buffer) {this.kind = kind; this.layout = layout; this.dims = dims; this.data = buffer} Ml_Bigarray.prototype.caml_custom = caml_ba_custom_name; Ml_Bigarray.prototype.offset = function(arg) {var ofs=0; if(typeof arg === "number")arg = [arg]; if(! (arg instanceof Array)) caml_invalid_argument("bigarray.js: invalid offset"); if(this.dims.length != arg.length) caml_invalid_argument("Bigarray.get/set: bad number of dimensions"); if(this.layout == 0) for(var i=0;i < this.dims.length;i++) {if(arg[i] < 0 || arg[i] >= this.dims[i])caml_array_bound_error(); ofs = ofs * this.dims[i] + arg[i]} else for(var i=this.dims.length - 1;i >= 0;i--) {if(arg[i] < 1 || arg[i] > this.dims[i])caml_array_bound_error(); ofs = ofs * this.dims[i] + (arg[i] - 1)} return ofs}; Ml_Bigarray.prototype.get = function(ofs) {switch(this.kind) {case 7: var l=this.data[ofs * 2 + 0],h=this.data[ofs * 2 + 1]; return caml_int64_create_lo_hi(l,h); case 10: case 11: var r=this.data[ofs * 2 + 0],i=this.data[ofs * 2 + 1]; return [254,r,i]; default:return this.data[ofs]}}; Ml_Bigarray.prototype.set = function(ofs,v) {switch(this.kind) {case 7: this.data[ofs * 2 + 0] = caml_int64_lo32(v); this.data[ofs * 2 + 1] = caml_int64_hi32(v); break; case 10: case 11: this.data[ofs * 2 + 0] = v[1];this.data[ofs * 2 + 1] = v[2];break; default:this.data[ofs] = v;break} return 0}; Ml_Bigarray.prototype.fill = function(v) {switch(this.kind) {case 7: var a=caml_int64_lo32(v),b=caml_int64_hi32(v); if(a == b) this.data.fill(a); else for(var i=0;i < this.data.length;i++)this.data[i] = i % 2 == 0?a:b; break; case 10: case 11: var im=v[1],re=v[2]; if(im == re) this.data.fill(im); else for(var i=0;i < this.data.length;i++) this.data[i] = i % 2 == 0?im:re; break; default:this.data.fill(v);break}}; Ml_Bigarray.prototype.compare = function(b,total) {if(this.layout != b.layout || this.kind != b.kind) {var k1=this.kind | this.layout << 8,k2=b.kind | b.layout << 8; return k2 - k1} if(this.dims.length != b.dims.length) return b.dims.length - this.dims.length; for(var i=0;i < this.dims.length;i++) if(this.dims[i] != b.dims[i])return this.dims[i] < b.dims[i]?- 1:1; switch(this.kind) {case 0: case 1: case 10: case 11: var x,y; for(var i=0;i < this.data.length;i++) {x = this.data[i]; y = b.data[i]; if(x < y)return - 1; if(x > y)return 1; if(x != y) {if(! total)return NaN;if(x == x)return 1;if(y == y)return - 1}} break; case 7: for(var i=0;i < this.data.length;i += 2) {if(this.data[i + 1] < b.data[i + 1])return - 1; if(this.data[i + 1] > b.data[i + 1])return 1; if(this.data[i] >>> 0 < b.data[i] >>> 0)return - 1; if(this.data[i] >>> 0 > b.data[i] >>> 0)return 1} break; case 2: case 3: case 4: case 5: case 6: case 8: case 9: case 12: for(var i=0;i < this.data.length;i++) {if(this.data[i] < b.data[i])return - 1; if(this.data[i] > b.data[i])return 1} break } return 0}; function Ml_Bigarray_c_1_1(kind,layout,dims,buffer) {this.kind = kind; this.layout = layout; this.dims = dims; this.data = buffer} Ml_Bigarray_c_1_1.prototype = new Ml_Bigarray(); Ml_Bigarray_c_1_1.prototype.offset = function(arg) {if(typeof arg !== "number") if(arg instanceof Array && arg.length == 1) arg = arg[0]; else caml_invalid_argument("Ml_Bigarray_c_1_1.offset"); if(arg < 0 || arg >= this.dims[0])caml_array_bound_error(); return arg}; Ml_Bigarray_c_1_1.prototype.get = function(ofs){return this.data[ofs]}; Ml_Bigarray_c_1_1.prototype.set = function(ofs,v){this.data[ofs] = v;return 0}; Ml_Bigarray_c_1_1.prototype.fill = function(v){this.data.fill(v);return 0}; function caml_ba_create_unsafe(kind,layout,dims,data) {var size_per_element=caml_ba_get_size_per_element(kind); if(caml_ba_get_size(dims) * size_per_element != data.length) caml_invalid_argument("length doesn't match dims"); if(layout == 0 && dims.length == 1 && size_per_element == 1) return new Ml_Bigarray_c_1_1(kind,layout,dims,data); return new Ml_Bigarray(kind,layout,dims,data)} function caml_ba_deserialize(reader,sz,name) {var num_dims=reader.read32s(); if(num_dims < 0 || num_dims > 16) caml_failwith("input_value: wrong number of bigarray dimensions"); var tag=reader.read32s(),kind=tag & 0xff,layout=tag >> 8 & 1,dims=[]; if(name == "_bigarr02") for(var i=0;i < num_dims;i++) {var size_dim=reader.read16u(); if(size_dim == 0xffff) {var size_dim_hi=reader.read32u(),size_dim_lo=reader.read32u(); if(size_dim_hi != 0) caml_failwith("input_value: bigarray dimension overflow in 32bit"); size_dim = size_dim_lo} dims.push(size_dim)} else for(var i=0;i < num_dims;i++)dims.push(reader.read32u()); var size=caml_ba_get_size(dims), data=caml_ba_create_buffer(kind,size), ba=caml_ba_create_unsafe(kind,layout,dims,data); switch(kind) {case 2:for(var i=0;i < size;i++)data[i] = reader.read8s();break; case 3: case 12:for(var i=0;i < size;i++)data[i] = reader.read8u();break; case 4:for(var i=0;i < size;i++)data[i] = reader.read16s();break; case 5:for(var i=0;i < size;i++)data[i] = reader.read16u();break; case 6:for(var i=0;i < size;i++)data[i] = reader.read32s();break; case 8: case 9: var sixty=reader.read8u(); if(sixty) caml_failwith ("input_value: cannot read bigarray with 64-bit OCaml ints"); for(var i=0;i < size;i++)data[i] = reader.read32s(); break; case 7: var t=new Array(8); for(var i=0;i < size;i++) {for(var j=0;j < 8;j++)t[j] = reader.read8u(); var int64=caml_int64_of_bytes(t); ba.set(i,int64)} break; case 1: var t=new Array(8); for(var i=0;i < size;i++) {for(var j=0;j < 8;j++)t[j] = reader.read8u(); var f=caml_int64_float_of_bits(caml_int64_of_bytes(t)); ba.set(i,f)} break; case 0: for(var i=0;i < size;i++) {var f=caml_int32_float_of_bits(reader.read32s());ba.set(i,f)} break; case 10: for(var i=0;i < size;i++) {var re=caml_int32_float_of_bits(reader.read32s()), im=caml_int32_float_of_bits(reader.read32s()); ba.set(i,[254,re,im])} break; case 11: var t=new Array(8); for(var i=0;i < size;i++) {for(var j=0;j < 8;j++)t[j] = reader.read8u(); var re=caml_int64_float_of_bits(caml_int64_of_bytes(t)); for(var j=0;j < 8;j++)t[j] = reader.read8u(); var im=caml_int64_float_of_bits(caml_int64_of_bytes(t)); ba.set(i,[254,re,im])} break } sz[0] = (4 + num_dims) * 4; return caml_ba_create_unsafe(kind,layout,dims,data)} function caml_ba_compare(a,b,total){return a.compare(b,total)} function caml_hash_mix_int64(h,v) {h = caml_hash_mix_int(h,caml_int64_lo32(v)); h = caml_hash_mix_int(h,caml_int64_hi32(v)); return h} function caml_hash_mix_float(h,v0) {return caml_hash_mix_int64(h,caml_int64_bits_of_float(v0))} function caml_ba_hash(ba) {var num_elts=caml_ba_get_size(ba.dims),h=0; switch(ba.kind) {case 2: case 3: case 12: if(num_elts > 256)num_elts = 256; var w=0,i=0; for(i = 0;i + 4 <= ba.data.length;i += 4) {w = ba.data[i + 0] | ba.data[i + 1] << 8 | ba.data[i + 2] << 16 | ba.data[i + 3] << 24; h = caml_hash_mix_int(h,w)} w = 0; switch(num_elts & 3) {case 3:w = ba.data[i + 2] << 16; case 2:w |= ba.data[i + 1] << 8; case 1:w |= ba.data[i + 0];h = caml_hash_mix_int(h,w) } break; case 4: case 5: if(num_elts > 128)num_elts = 128; var w=0,i=0; for(i = 0;i + 2 <= ba.data.length;i += 2) {w = ba.data[i + 0] | ba.data[i + 1] << 16; h = caml_hash_mix_int(h,w)} if((num_elts & 1) != 0)h = caml_hash_mix_int(h,ba.data[i]); break; case 6: if(num_elts > 64)num_elts = 64; for(var i=0;i < num_elts;i++)h = caml_hash_mix_int(h,ba.data[i]); break; case 8: case 9: if(num_elts > 64)num_elts = 64; for(var i=0;i < num_elts;i++)h = caml_hash_mix_int(h,ba.data[i]); break; case 7: if(num_elts > 32)num_elts = 32; num_elts *= 2; for(var i=0;i < num_elts;i++)h = caml_hash_mix_int(h,ba.data[i]); break; case 10:num_elts *= 2; case 0: if(num_elts > 64)num_elts = 64; for(var i=0;i < num_elts;i++)h = caml_hash_mix_float(h,ba.data[i]); break; case 11:num_elts *= 2; case 1: if(num_elts > 32)num_elts = 32; for(var i=0;i < num_elts;i++)h = caml_hash_mix_float(h,ba.data[i]); break } return h} function caml_int32_unmarshal(reader,size) {size[0] = 4;return reader.read32s()} function caml_nativeint_unmarshal(reader,size) {switch(reader.read8u()) {case 1:size[0] = 4;return reader.read32s(); case 2:caml_failwith("input_value: native integer value too large"); default:caml_failwith("input_value: ill-formed native integer")}} function caml_int64_unmarshal(reader,size) {var t=new Array(8); for(var j=0;j < 8;j++)t[j] = reader.read8u(); size[0] = 8; return caml_int64_of_bytes(t)} function caml_int64_compare(x,y,total){return x.compare(y)} function caml_int64_hash(v){return v.lo32() ^ v.hi32()} var caml_custom_ops= {"_j": {deserialize:caml_int64_unmarshal, serialize:caml_int64_marshal, fixed_length:8, compare:caml_int64_compare, hash:caml_int64_hash}, "_i":{deserialize:caml_int32_unmarshal,fixed_length:4}, "_n":{deserialize:caml_nativeint_unmarshal,fixed_length:4}, "_bigarray": {deserialize: function(reader,sz){return caml_ba_deserialize(reader,sz,"_bigarray")}, serialize:caml_ba_serialize, compare:caml_ba_compare, hash:caml_ba_hash}, "_bigarr02": {deserialize: function(reader,sz){return caml_ba_deserialize(reader,sz,"_bigarr02")}, serialize:caml_ba_serialize, compare:caml_ba_compare, hash:caml_ba_hash}}; function caml_compare_val_get_custom(a) {return caml_custom_ops[a.caml_custom] && caml_custom_ops[a.caml_custom].compare} function caml_compare_val_number_custom(num,custom,swap,total) {var comp=caml_compare_val_get_custom(custom); if(comp) {var x=swap > 0?comp(custom,num,total):comp(num,custom,total); if(total && x != x)return swap; if(+ x != + x)return + x; if((x | 0) != 0)return x | 0} return swap} function caml_compare_val_tag(a) {if(typeof a === "number") return 1000; else if(caml_is_ml_bytes(a)) return 252; else if(caml_is_ml_string(a)) return 1252; else if(a instanceof Array && a[0] === a[0] >>> 0 && a[0] <= 255) {var tag=a[0] | 0;return tag == 254?0:tag} else if(a instanceof String) return 12520; else if(typeof a == "string") return 12520; else if(a instanceof Number) return 1000; else if(a && a.caml_custom) return 1255; else if(a && a.compare) return 1256; else if(typeof a == "function") return 1247; else if(typeof a == "symbol")return 1251; return 1001} function caml_int_compare(a,b) {if(a < b)return - 1;if(a == b)return 0;return 1} function caml_bytes_compare(s1,s2) {s1.t & 6 && caml_convert_string_to_bytes(s1); s2.t & 6 && caml_convert_string_to_bytes(s2); return s1.c < s2.c?- 1:s1.c > s2.c?1:0} function caml_string_compare(s1,s2){return caml_bytes_compare(s1,s2)} function caml_compare_val(a,b,total) {var stack=[]; for(;;) {if(! (total && a === b)) {var tag_a=caml_compare_val_tag(a); if(tag_a == 250){a = a[1];continue} var tag_b=caml_compare_val_tag(b); if(tag_b == 250){b = b[1];continue} if(tag_a !== tag_b) {if(tag_a == 1000) {if(tag_b == 1255) return caml_compare_val_number_custom(a,b,- 1,total); return - 1} if(tag_b == 1000) {if(tag_a == 1255) return caml_compare_val_number_custom(b,a,1,total); return 1} return tag_a < tag_b?- 1:1} switch(tag_a) {case 247:caml_invalid_argument("compare: functional value");break; case 248: var x=caml_int_compare(a[2],b[2]);if(x != 0)return x | 0;break; case 249:caml_invalid_argument("compare: functional value");break; case 250: caml_invalid_argument ("equal: got Forward_tag, should not happen"); break; case 251:caml_invalid_argument("equal: abstract value");break; case 252: if(a !== b){var x=caml_bytes_compare(a,b);if(x != 0)return x | 0} break; case 253: caml_invalid_argument("equal: got Double_tag, should not happen"); break; case 254: caml_invalid_argument ("equal: got Double_array_tag, should not happen"); break; case 255: caml_invalid_argument("equal: got Custom_tag, should not happen"); break; case 1247: caml_invalid_argument("compare: functional value");break; case 1255: var comp=caml_compare_val_get_custom(a); if(comp != caml_compare_val_get_custom(b)) return a.caml_custom < b.caml_custom?- 1:1; if(! comp)caml_invalid_argument("compare: abstract value"); var x=comp(a,b,total); if(x != x)return total?- 1:x; if(x !== (x | 0))return - 1; if(x != 0)return x | 0; break; case 1256: var x=a.compare(b,total); if(x != x)return total?- 1:x; if(x !== (x | 0))return - 1; if(x != 0)return x | 0; break; case 1000: a = + a; b = + b; if(a < b)return - 1; if(a > b)return 1; if(a != b) {if(! total)return NaN;if(a == a)return 1;if(b == b)return - 1} break; case 1001: if(a < b)return - 1; if(a > b)return 1; if(a != b) {if(! total)return NaN;if(a == a)return 1;if(b == b)return - 1} break; case 1251:if(a !== b){if(! total)return NaN;return 1}break; case 1252: var a=caml_jsbytes_of_string(a),b=caml_jsbytes_of_string(b); if(a !== b){if(a < b)return - 1;if(a > b)return 1} break; case 12520: var a=a.toString(),b=b.toString(); if(a !== b){if(a < b)return - 1;if(a > b)return 1} break; case 246: case 254: default: if(a.length != b.length)return a.length < b.length?- 1:1; if(a.length > 1)stack.push(a,b,1); break}} if(stack.length == 0)return 0; var i=stack.pop(); b = stack.pop(); a = stack.pop(); if(i + 1 < a.length)stack.push(a,b,i + 1); a = a[i]; b = b[i]}} function caml_greaterthan(x,y){return + (caml_compare_val(x,y,false) > 0)} function div_helper(a,b,c) {var x=a * 65536 + (b >>> 16), y=Math.floor(x / c) * 65536, z=x % c * 65536, w=z + (b & 0x0000FFFF); return [y + Math.floor(w / c),w % c]} function div_digit_nat(natq,ofsq,natr,ofsr,nat1,ofs1,len,nat2,ofs2) {var rem=nat1.data[ofs1 + len - 1] >>> 0; for(var i=len - 2;i >= 0;i--) {var x=div_helper(rem,nat1.data[ofs1 + i] >>> 0,nat2.data[ofs2] >>> 0); natq.data[ofsq + i] = x[0]; rem = x[1]} natr.data[ofsr] = rem; return 0} function num_leading_zero_bits_in_digit(nat,ofs) {var a=nat.data[ofs],b=0; if(a & 0xFFFF0000){b += 16;a >>>= 16} if(a & 0xFF00){b += 8;a >>>= 8} if(a & 0xF0){b += 4;a >>>= 4} if(a & 12){b += 2;a >>>= 2} if(a & 2){b += 1;a >>>= 1} if(a & 1)b += 1; return 32 - b} function shift_left_nat(nat1,ofs1,len1,nat2,ofs2,nbits) {if(nbits == 0){nat2.data[ofs2] = 0;return 0} var wrap=0; for(var i=0;i < len1;i++) {var a=nat1.data[ofs1 + i] >>> 0; nat1.data[ofs1 + i] = a << nbits | wrap; wrap = a >>> 32 - nbits} nat2.data[ofs2] = wrap; return 0} function MlNat(x) {this.data = new (globalThis.Int32Array)(x); this.length = this.data.length + 2} MlNat.prototype.caml_custom = "_nat"; function create_nat(size) {var arr=new MlNat(size); for(var i=0;i < size;i++)arr.data[i] = - 1; return arr} function set_to_zero_nat(nat,ofs,len) {for(var i=0;i < len;i++)nat.data[ofs + i] = 0;return 0} function incr_nat(nat,ofs,len,carry_in) {var carry=carry_in; for(var i=0;i < len;i++) {var x=(nat.data[ofs + i] >>> 0) + carry; nat.data[ofs + i] = x | 0; if(x == x >>> 0){carry = 0;break}else carry = 1} return carry} function add_nat(nat1,ofs1,len1,nat2,ofs2,len2,carry_in) {var carry=carry_in; for(var i=0;i < len2;i++) {var x= (nat1.data[ofs1 + i] >>> 0) + (nat2.data[ofs2 + i] >>> 0) + carry; nat1.data[ofs1 + i] = x; if(x == x >>> 0)carry = 0;else carry = 1} return incr_nat(nat1,ofs1 + len2,len1 - len2,carry)} function nat_of_array(l){return new MlNat(l)} function mult_digit_nat(nat1,ofs1,len1,nat2,ofs2,len2,nat3,ofs3) {var carry=0,a=nat3.data[ofs3] >>> 0; for(var i=0;i < len2;i++) {var x1= (nat1.data[ofs1 + i] >>> 0) + (nat2.data[ofs2 + i] >>> 0) * (a & 0x0000FFFF) + carry, x2=(nat2.data[ofs2 + i] >>> 0) * (a >>> 16); carry = Math.floor(x2 / 65536); var x3=x1 + x2 % 65536 * 65536; nat1.data[ofs1 + i] = x3; carry += Math.floor(x3 / 4294967296)} return len2 < len1 && carry ?add_nat (nat1,ofs1 + len2,len1 - len2,nat_of_array([carry]),0,1,0) :carry} function decr_nat(nat,ofs,len,carry_in) {var borrow=carry_in == 1?0:1; for(var i=0;i < len;i++) {var x=(nat.data[ofs + i] >>> 0) - borrow; nat.data[ofs + i] = x; if(x >= 0){borrow = 0;break}else borrow = 1} return borrow == 1?0:1} function sub_nat(nat1,ofs1,len1,nat2,ofs2,len2,carry_in) {var borrow=carry_in == 1?0:1; for(var i=0;i < len2;i++) {var x= (nat1.data[ofs1 + i] >>> 0) - (nat2.data[ofs2 + i] >>> 0) - borrow; nat1.data[ofs1 + i] = x; if(x >= 0)borrow = 0;else borrow = 1} return decr_nat(nat1,ofs1 + len2,len1 - len2,borrow == 1?0:1)} function compare_nat(nat1,ofs1,len1,nat2,ofs2,len2) {var a=num_digits_nat(nat1,ofs1,len1),b=num_digits_nat(nat2,ofs2,len2); if(a > b)return 1; if(a < b)return - 1; for(var i=len1 - 1;i >= 0;i--) {if(nat1.data[ofs1 + i] >>> 0 > nat2.data[ofs2 + i] >>> 0)return 1; if(nat1.data[ofs1 + i] >>> 0 < nat2.data[ofs2 + i] >>> 0)return - 1} return 0} function div_nat(nat1,ofs1,len1,nat2,ofs2,len2) {if(len2 == 1) {div_digit_nat(nat1,ofs1 + 1,nat1,ofs1,nat1,ofs1,len1,nat2,ofs2); return 0} var s=num_leading_zero_bits_in_digit(nat2,ofs2 + len2 - 1); shift_left_nat(nat2,ofs2,len2,nat_of_array([0]),0,s); shift_left_nat(nat1,ofs1,len1,nat_of_array([0]),0,s); var d=(nat2.data[ofs2 + len2 - 1] >>> 0) + 1,a=create_nat(len2 + 1); for(var i=len1 - 1;i >= len2;i--) {var quo= d == 4294967296 ?nat1.data[ofs1 + i] >>> 0 :div_helper (nat1.data[ofs1 + i] >>> 0,nat1.data[ofs1 + i - 1] >>> 0,d) [0]; set_to_zero_nat(a,0,len2 + 1); mult_digit_nat(a,0,len2 + 1,nat2,ofs2,len2,nat_of_array([quo]),0); sub_nat(nat1,ofs1 + i - len2,len2 + 1,a,0,len2 + 1,1); while (nat1.data[ofs1 + i] != 0 || compare_nat(nat1,ofs1 + i - len2,len2,nat2,ofs2,len2) >= 0) {quo = quo + 1; sub_nat(nat1,ofs1 + i - len2,len2 + 1,nat2,ofs2,len2,1)} nat1.data[ofs1 + i] = quo} shift_right_nat(nat1,ofs1,len2,nat_of_array([0]),0,s); shift_right_nat(nat2,ofs2,len2,nat_of_array([0]),0,s); return 0} function caml_ba_blit(src,dst) {if(dst.dims.length != src.dims.length) caml_invalid_argument("Bigarray.blit: dimension mismatch"); for(var i=0;i < dst.dims.length;i++) if(dst.dims[i] != src.dims[i]) caml_invalid_argument("Bigarray.blit: dimension mismatch"); dst.data.set(src.data); return 0} function is_digit_int(nat,ofs){if(nat.data[ofs] >= 0)return 1;return 0} function caml_int64_div(x,y){return x.div(y)} function caml_js_html_entities(s) {var entity=/^&#?[0-9a-zA-Z]+;$/; if(s.match(entity)) {var str,temp=document.createElement("p"); temp.innerHTML = s; str = temp.textContent || temp.innerText; temp = null; return str} else caml_failwith("Invalid entity " + s)} function caml_string_unsafe_set(s,i,c) {return caml_bytes_unsafe_set(s,i,c)} function caml_int64_of_float(x) {if(x < 0)x = Math.ceil(x); return new MlInt64 (x & 0xffffff, Math.floor(x * caml_int64_offset) & 0xffffff, Math.floor(x * caml_int64_offset * caml_int64_offset) & 0xffff)} function caml_ml_channel_size_64(chanid) {var chan=caml_ml_channels[chanid]; return caml_int64_of_float(chan.file.length())} function caml_ba_set_2(ba,i0,i1,v){ba.set(ba.offset([i0,i1]),v);return 0} var caml_argv= function() {var g=globalThis,main="a.out",args=[]; if(g.process && g.process.argv && g.process.argv.length > 1) {var argv=g.process.argv;main = argv[1];args = argv.slice(2)} var p=caml_string_of_jsstring(main),args2=[0,p]; for(var i=0;i < args.length;i++) args2.push(caml_string_of_jsstring(args[i])); return args2} (), caml_executable_name=caml_argv[1]; function caml_js_eval_string(s){return eval(caml_jsstring_of_string(s))} function serialize_nat(writer,nat,sz) {var len=nat.data.length; writer.write(32,len); for(var i=0;i < len;i++)writer.write(32,nat.data[i]); sz[0] = len * 4; sz[1] = len * 8} function caml_memprof_set(_control){return 0} function caml_sys_exit(code) {var g=globalThis; if(g.quit)g.quit(code); if(g.process && g.process.exit)g.process.exit(code); caml_invalid_argument("Function 'exit' not implemented")} function caml_channel_descriptor(chanid) {var chan=caml_ml_channels[chanid];return chan.fd} function caml_js_from_array(a){return a.slice(1)} function caml_ba_reshape(ba,vind) {vind = caml_js_from_array(vind); var new_dim=[],num_dims=vind.length; if(num_dims < 0 || num_dims > 16) caml_invalid_argument("Bigarray.reshape: bad number of dimensions"); var num_elts=1; for(var i=0;i < num_dims;i++) {new_dim[i] = vind[i]; if(new_dim[i] < 0) caml_invalid_argument("Bigarray.reshape: negative dimension"); num_elts = num_elts * new_dim[i]} var size=caml_ba_get_size(ba.dims); if(num_elts != size) caml_invalid_argument("Bigarray.reshape: size mismatch"); return caml_ba_create_unsafe(ba.kind,ba.layout,new_dim,ba.data)} var caml_oo_last_id=0; function caml_set_oo_id(b){b[2] = caml_oo_last_id++;return b} function caml_gr_fill_rect(x,y,w,h) {var s=caml_gr_state_get(); s.context.fillRect(x,s.height - y,w,- h); return 0} function caml_bigstring_blit_string_to_ba(str1,pos1,ba2,pos2,len) {if(12 != ba2.kind) caml_invalid_argument ("caml_bigstring_blit_string_to_ba: kind mismatch"); if(len == 0)return 0; var ofs2=ba2.offset(pos2); if(pos1 + len > caml_ml_string_length(str1))caml_array_bound_error(); if(ofs2 + len > ba2.data.length)caml_array_bound_error(); var slice=caml_array_of_string(str1).slice(pos1,pos1 + len); ba2.data.set(slice,ofs2); return 0} function caml_gr_set_window_title(name) {var s=caml_gr_state_get(); s.title = name; var jsname=caml_jsstring_of_string(name); if(s.set_title)s.set_title(jsname); return 0} function caml_get_global_data(){return caml_global_data} function caml_int64_shift_right_unsigned(x,s) {return x.shift_right_unsigned(s)} function caml_ba_uint8_get16(ba,i0) {var ofs=ba.offset(i0); if(ofs + 1 >= ba.data.length)caml_array_bound_error(); var b1=ba.get(ofs),b2=ba.get(ofs + 1); return b1 | b2 << 8} function caml_compare(a,b){return caml_compare_val(a,b,true)} function caml_fresh_oo_id(){return caml_oo_last_id++} function caml_int64_to_float(x){return x.toFloat()} function caml_ba_get_1(ba,i0){return ba.get(ba.offset(i0))} function caml_bigstring_memcmp(s1,pos1,s2,pos2,len) {for(var i=0;i < len;i++) {var a=caml_ba_get_1(s1,pos1 + i),b=caml_ba_get_1(s2,pos2 + i); if(a < b)return - 1; if(a > b)return 1} return 0} function caml_new_string(s){return caml_string_of_jsbytes(s)} function caml_erf_float(x) {var a1=0.254829592, a2=- 0.284496736, a3=1.421413741, a4=- 1.453152027, a5=1.061405429, p=0.3275911, sign=1; if(x < 0)sign = - 1; x = Math.abs(x); var t=1.0 / (1.0 + p * x), y= 1.0 - ((((a5 * t + a4) * t + a3) * t + a2) * t + a1) * t * Math.exp(- (x * x)); return sign * y} function caml_ba_uint8_get32(ba,i0) {var ofs=ba.offset(i0); if(ofs + 3 >= ba.data.length)caml_array_bound_error(); var b1=ba.get(ofs + 0), b2=ba.get(ofs + 1), b3=ba.get(ofs + 2), b4=ba.get(ofs + 3); return b1 << 0 | b2 << 8 | b3 << 16 | b4 << 24} function caml_raw_backtrace_length(){return 0} function caml_obj_block(tag,size) {var o=new Array(size + 1); o[0] = tag; for(var i=1;i <= size;i++)o[i] = 0; return o} function caml_gr_clear_graph() {var s=caml_gr_state_get(); s.canvas.width = s.width; s.canvas.height = s.height; return 0} function bigstring_to_array_buffer(bs){return bs.data.buffer} function caml_sys_const_naked_pointers_checked(_unit){return 0} function lxor_digit_nat(nat1,ofs1,nat2,ofs2) {nat1.data[ofs1] ^= nat2.data[ofs2];return 0} function caml_obj_add_offset(v,offset) {caml_failwith("Obj.add_offset is not supported")} function caml_final_release(){return 0} function caml_js_to_array(a) {var len=a.length,b=new Array(len + 1); b[0] = 0; for(var i=0;i < len;i++)b[i + 1] = a[i]; return b} function caml_gr_plot(x,y) {var s=caml_gr_state_get(), im=s.context.createImageData(1,1), d=im.data, color=s.color; d[0] = color >> 16 & 0xff; d[1] = color >> 8 & 0xff,d[2] = color >> 0 & 0xff; d[3] = 0xFF; s.x = x; s.y = y; s.context.putImageData(im,x,s.height - y); return 0} function caml_bytes_set16(s,i,i16) {if(i >>> 0 >= s.l - 1)caml_bytes_bound_error(); var b2=0xFF & i16 >> 8,b1=0xFF & i16; caml_bytes_unsafe_set(s,i + 0,b1); caml_bytes_unsafe_set(s,i + 1,b2); return 0} function caml_string_set16(s,i,i16){return caml_bytes_set16(s,i,i16)} function caml_bytes_set64(s,i,i64) {if(i >>> 0 >= s.l - 7)caml_bytes_bound_error(); var a=caml_int64_to_bytes(i64); for(var j=0;j < 8;j++)caml_bytes_unsafe_set(s,i + 7 - j,a[j]); return 0} function caml_int64_bswap(x) {var y=caml_int64_to_bytes(x); return caml_int64_of_bytes([y[7],y[6],y[5],y[4],y[3],y[2],y[1],y[0]])} function caml_fill_bytes(s,i,l,c) {if(l > 0) if(i == 0 && (l >= s.l || s.t == 2 && l >= s.c.length)) if(c == 0) {s.c = "";s.t = 2} else {s.c = caml_str_repeat(l,String.fromCharCode(c));s.t = l == s.l?0:2} else {if(s.t != 4)caml_convert_bytes_to_array(s); for(l += i;i < l;i++)s.c[i] = c} return 0} var caml_fill_string=caml_fill_bytes; function caml_gc_major(){return 0} function caml_lex_array(s) {s = caml_jsbytes_of_string(s); var l=s.length / 2,a=new Array(l); for(var i=0;i < l;i++) a[i] = (s.charCodeAt(2 * i) | s.charCodeAt(2 * i + 1) << 8) << 16 >> 16; return a} function caml_lex_engine(tbl,start_state,lexbuf) {var lex_buffer=2, lex_buffer_len=3, lex_start_pos=5, lex_curr_pos=6, lex_last_pos=7, lex_last_action=8, lex_eof_reached=9, lex_base=1, lex_backtrk=2, lex_default=3, lex_trans=4, lex_check=5; if(! tbl.lex_default) {tbl.lex_base = caml_lex_array(tbl[lex_base]); tbl.lex_backtrk = caml_lex_array(tbl[lex_backtrk]); tbl.lex_check = caml_lex_array(tbl[lex_check]); tbl.lex_trans = caml_lex_array(tbl[lex_trans]); tbl.lex_default = caml_lex_array(tbl[lex_default])} var c,state=start_state,buffer=caml_array_of_bytes(lexbuf[lex_buffer]); if(state >= 0) {lexbuf[lex_last_pos] = lexbuf[lex_start_pos] = lexbuf[lex_curr_pos]; lexbuf[lex_last_action] = - 1} else state = - state - 1; for(;;) {var base=tbl.lex_base[state]; if(base < 0)return - base - 1; var backtrk=tbl.lex_backtrk[state]; if(backtrk >= 0) {lexbuf[lex_last_pos] = lexbuf[lex_curr_pos]; lexbuf[lex_last_action] = backtrk} if(lexbuf[lex_curr_pos] >= lexbuf[lex_buffer_len]) if(lexbuf[lex_eof_reached] == 0)return - state - 1;else c = 256; else {c = buffer[lexbuf[lex_curr_pos]];lexbuf[lex_curr_pos]++} if(tbl.lex_check[base + c] == state) state = tbl.lex_trans[base + c]; else state = tbl.lex_default[state]; if(state < 0) {lexbuf[lex_curr_pos] = lexbuf[lex_last_pos]; if(lexbuf[lex_last_action] == - 1) caml_failwith("lexing: empty token"); else return lexbuf[lex_last_action]} else if(c == 256)lexbuf[lex_eof_reached] = 0}} function unix_getuid(unit) {if(globalThis.process && globalThis.process.getuid) return globalThis.process.getuid(); caml_raise_not_found()} function caml_sys_file_exists(name) {var root=resolve_fs_device(name);return root.device.exists(root.rest)} function caml_convert_raw_backtrace_slot() {caml_failwith("caml_convert_raw_backtrace_slot")} function caml_array_sub(a,i,len) {var a2=new Array(len + 1); a2[0] = 0; for(var i2=1,i1=i + 1;i2 <= len;i2++,i1++)a2[i2] = a[i1]; return a2} function caml_bytes_equal(s1,s2) {if(s1 === s2)return 1; s1.t & 6 && caml_convert_string_to_bytes(s1); s2.t & 6 && caml_convert_string_to_bytes(s2); return s1.c == s2.c?1:0} function caml_gr_size_x(){var s=caml_gr_state_get();return s.width} function caml_ml_debug_info_status(){return 0} var os_type= globalThis.process && globalThis.process.platform && globalThis.process.platform == "win32" ?"Cygwin" :"Unix"; function caml_sys_const_ostype_cygwin(){return os_type == "Cygwin"?1:0} function caml_cosh_float(x){return Math.cosh(x)} var caml_ephe_key_offset=3; function caml_weak_check(x,i) {return x[caml_ephe_key_offset + i] !== undefined && x[caml_ephe_key_offset + i] !== 0 ?1 :0} var caml_ephe_check_key=caml_weak_check; function caml_hash_mix_final(h) {h ^= h >>> 16; h = caml_mul(h,0x85ebca6b | 0); h ^= h >>> 13; h = caml_mul(h,0xc2b2ae35 | 0); h ^= h >>> 16; return h} function caml_gr_text_size(txt) {var s=caml_gr_state_get(), w=s.context.measureText(caml_jsstring_of_string(txt)).width; return [0,w,s.text_size]} function caml_lex_run_mem(s,i,mem,curr_pos) {for(;;) {var dst=s.charCodeAt(i); i++; if(dst == 0xff)return; var src=s.charCodeAt(i); i++; if(src == 0xff) mem[dst + 1] = curr_pos; else mem[dst + 1] = mem[src + 1]}} function caml_lex_run_tag(s,i,mem) {for(;;) {var dst=s.charCodeAt(i); i++; if(dst == 0xff)return; var src=s.charCodeAt(i); i++; if(src == 0xff)mem[dst + 1] = - 1;else mem[dst + 1] = mem[src + 1]}} function caml_new_lex_engine(tbl,start_state,lexbuf) {var lex_buffer=2, lex_buffer_len=3, lex_start_pos=5, lex_curr_pos=6, lex_last_pos=7, lex_last_action=8, lex_eof_reached=9, lex_mem=10, lex_base=1, lex_backtrk=2, lex_default=3, lex_trans=4, lex_check=5, lex_base_code=6, lex_backtrk_code=7, lex_default_code=8, lex_trans_code=9, lex_check_code=10, lex_code=11; if(! tbl.lex_default) {tbl.lex_base = caml_lex_array(tbl[lex_base]); tbl.lex_backtrk = caml_lex_array(tbl[lex_backtrk]); tbl.lex_check = caml_lex_array(tbl[lex_check]); tbl.lex_trans = caml_lex_array(tbl[lex_trans]); tbl.lex_default = caml_lex_array(tbl[lex_default])} if(! tbl.lex_default_code) {tbl.lex_base_code = caml_lex_array(tbl[lex_base_code]); tbl.lex_backtrk_code = caml_lex_array(tbl[lex_backtrk_code]); tbl.lex_check_code = caml_lex_array(tbl[lex_check_code]); tbl.lex_trans_code = caml_lex_array(tbl[lex_trans_code]); tbl.lex_default_code = caml_lex_array(tbl[lex_default_code])} if(tbl.lex_code == null) tbl.lex_code = caml_jsbytes_of_string(tbl[lex_code]); var c,state=start_state,buffer=caml_array_of_bytes(lexbuf[lex_buffer]); if(state >= 0) {lexbuf[lex_last_pos] = lexbuf[lex_start_pos] = lexbuf[lex_curr_pos]; lexbuf[lex_last_action] = - 1} else state = - state - 1; for(;;) {var base=tbl.lex_base[state]; if(base < 0) {var pc_off=tbl.lex_base_code[state]; caml_lex_run_tag(tbl.lex_code,pc_off,lexbuf[lex_mem]); return - base - 1} var backtrk=tbl.lex_backtrk[state]; if(backtrk >= 0) {var pc_off=tbl.lex_backtrk_code[state]; caml_lex_run_tag(tbl.lex_code,pc_off,lexbuf[lex_mem]); lexbuf[lex_last_pos] = lexbuf[lex_curr_pos]; lexbuf[lex_last_action] = backtrk} if(lexbuf[lex_curr_pos] >= lexbuf[lex_buffer_len]) if(lexbuf[lex_eof_reached] == 0)return - state - 1;else c = 256; else {c = buffer[lexbuf[lex_curr_pos]];lexbuf[lex_curr_pos]++} var pstate=state; if(tbl.lex_check[base + c] == state) state = tbl.lex_trans[base + c]; else state = tbl.lex_default[state]; if(state < 0) {lexbuf[lex_curr_pos] = lexbuf[lex_last_pos]; if(lexbuf[lex_last_action] == - 1) caml_failwith("lexing: empty token"); else return lexbuf[lex_last_action]} else {var base_code=tbl.lex_base_code[pstate],pc_off; if(tbl.lex_check_code[base_code + c] == pstate) pc_off = tbl.lex_trans_code[base_code + c]; else pc_off = tbl.lex_default_code[pstate]; if(pc_off > 0) caml_lex_run_mem (tbl.lex_code,pc_off,lexbuf[lex_mem],lexbuf[lex_curr_pos]); if(c == 256)lexbuf[lex_eof_reached] = 0}}} function caml_ba_uint8_set64(ba,i0,v) {var ofs=ba.offset(i0); if(ofs + 7 >= ba.data.length)caml_array_bound_error(); var v=caml_int64_to_bytes(v); for(var i=0;i < 8;i++)ba.set(ofs + i,v[7 - i]); return 0} function caml_sys_executable_name(a){return caml_executable_name} function caml_lessequal(x,y){return + (caml_compare_val(x,y,false) <= 0)} function caml_acosh_float(x){return Math.acosh(x)} function caml_ml_flush(chanid) {var chan=caml_ml_channels[chanid]; if(! chan.opened)caml_raise_sys_error("Cannot flush a closed channel"); if(! chan.buffer || chan.buffer == "")return 0; if (chan.fd && caml_global_data.fds[chan.fd] && caml_global_data.fds[chan.fd].output) {var output=caml_global_data.fds[chan.fd].output; switch(output.length) {case 2:output(chanid,chan.buffer);break;default:output(chan.buffer)}} chan.buffer = ""; return 0} function caml_ml_seek_out_64(chanid,pos) {caml_ml_flush(chanid); caml_ml_channels[chanid].offset = caml_int64_to_float(pos); return 0} function compare_nat_real(nat1,nat2) {return compare_nat(nat1,0,nat1.data.length,nat2,0,nat2.data.length)} function caml_gc_set(_control){return 0} function caml_js_get(o,f){return o[f]} function caml_ml_set_buffered(c,v){return 0} function caml_gc_compaction(){return 0} function caml_weak_get(x,i) {if(i < 0 || caml_ephe_key_offset + i >= x.length) caml_invalid_argument("Weak.get_key"); return x[caml_ephe_key_offset + i] === undefined ?0 :x[caml_ephe_key_offset + i]} var caml_ephe_get_key=caml_weak_get; function caml_bigstring_blit_bytes_to_ba(str1,pos1,ba2,pos2,len) {if(12 != ba2.kind) caml_invalid_argument ("caml_bigstring_blit_string_to_ba: kind mismatch"); if(len == 0)return 0; var ofs2=ba2.offset(pos2); if(pos1 + len > caml_ml_bytes_length(str1))caml_array_bound_error(); if(ofs2 + len > ba2.data.length)caml_array_bound_error(); var slice=caml_array_of_bytes(str1).slice(pos1,pos1 + len); ba2.data.set(slice,ofs2); return 0} function win_cleanup(){} function caml_sys_close(fd){delete caml_global_data.fds[fd];return 0} function caml_ml_close_channel(chanid) {var chan=caml_ml_channels[chanid]; caml_ml_flush(chanid); chan.opened = false; chan.file.close(); caml_sys_close(chan.fd); return 0} function caml_exn_with_js_backtrace(exn,force) {if(! exn.js_error || force || exn[0] == 248) exn.js_error = new (globalThis.Error)("Js exception containing backtrace"); return exn} function caml_sys_isatty(_chan){return 0} function is_digit_zero(nat,ofs){if(nat.data[ofs] == 0)return 1;return 0} function unix_inet_addr_of_string(){return 0} function caml_js_set(o,f,v){o[f] = v;return 0} function caml_array_get(array,index) {if(index < 0 || index >= array.length - 1)caml_array_bound_error(); return array[index + 1]} function caml_log2_float(x){return Math.log2(x)} function caml_gc_huge_fallback_count(unit){return 0} function caml_spacetime_only_works_for_native_code() {caml_failwith("Spacetime profiling only works for native code")} function caml_int64_sub(x,y){return x.sub(y)} function caml_ml_seek_in_64(chanid,pos) {var chan=caml_ml_channels[chanid]; if(chan.refill != null)caml_raise_sys_error("Illegal seek"); chan.offset = caml_int64_to_float(pos); return 0} function caml_int64_shift_left(x,s){return x.shift_left(s)} function caml_notequal(x,y){return + (caml_compare_val(x,y,false) != 0)} function caml_sys_const_int_size(){return 32} function caml_js_wrap_meth_callback(f) {return function() {var len=arguments.length,args=new Array(len + 1); args[0] = this; for(var i=0;i < len;i++)args[i + 1] = arguments[i]; return caml_call_gen(f,args)}} function caml_is_js(){return 1} function caml_ba_dim(ba,i) {if(i < 0 || i >= ba.dims.length)caml_invalid_argument("Bigarray.dim"); return ba.dims[i]} function caml_ba_dim_1(ba){return caml_ba_dim(ba,0)} function unix_localtime(t) {var d=new Date(t * 1000), d_num=d.getTime(), januaryfirst=new Date(d.getFullYear(),0,1).getTime(), doy=Math.floor((d_num - januaryfirst) / 86400000), jan=new Date(d.getFullYear(),0,1), jul=new Date(d.getFullYear(),6,1), stdTimezoneOffset= Math.max(jan.getTimezoneOffset(),jul.getTimezoneOffset()); return [0, d.getSeconds(), d.getMinutes(), d.getHours(), d.getDate(), d.getMonth(), d.getFullYear() - 1900, d.getDay(), doy, d.getTimezoneOffset() < stdTimezoneOffset | 0]} function caml_js_meth_call(o,f,args) {return o[caml_jsstring_of_string(f)].apply(o,caml_js_from_array(args))} function caml_weak_create(n) {if(n < 0)caml_invalid_argument("Weak.create"); var x=[251,"caml_ephe_list_head"]; x.length = caml_ephe_key_offset + n; return x} var caml_ephe_create=caml_weak_create; function caml_js_to_byte_string(s){return caml_string_of_jsbytes(s)} function unix_mktime(tm) {var d=new Date(tm[6] + 1900,tm[5],tm[4],tm[3],tm[2],tm[1]).getTime(), t=Math.floor(d / 1000), tm2=unix_localtime(t); return [0,t,tm2]} function caml_trampoline(res) {var c=1; while(res && res.joo_tramp) {res = res.joo_tramp.apply(null,res.joo_args);c++} return res} function caml_bytes_get64(s,i) {if(i >>> 0 >= s.l - 7)caml_bytes_bound_error(); var a=new Array(8); for(var j=0;j < 8;j++)a[7 - j] = caml_bytes_unsafe_get(s,i + j); return caml_int64_of_bytes(a)} function caml_weak_set(x,i,v) {if(i < 0 || caml_ephe_key_offset + i >= x.length) caml_invalid_argument("Weak.set"); x[caml_ephe_key_offset + i] = v; return 0} function caml_sys_remove(name) {var root=resolve_fs_device(name),ok=root.device.unlink(root.rest); if(ok == 0)caml_raise_no_such_file(caml_jsbytes_of_string(name)); return 0} function caml_string_bound_error() {caml_invalid_argument("index out of bounds")} function caml_string_get32(s,i) {if(i >>> 0 >= caml_ml_string_length(s) - 3)caml_string_bound_error(); var b1=caml_string_unsafe_get(s,i), b2=caml_string_unsafe_get(s,i + 1), b3=caml_string_unsafe_get(s,i + 2), b4=caml_string_unsafe_get(s,i + 3); return b4 << 24 | b3 << 16 | b2 << 8 | b1} function caml_hypot_float(x,y){return Math.hypot(x,y)} function caml_js_call(f,o,args) {return f.apply(o,caml_js_from_array(args))} function caml_sys_const_max_wosize(){return 0x7FFFFFFF / 4 | 0} function caml_ephe_unset_key(x,i){return caml_weak_set(x,i,0)} function caml_hash_mix_bytes_arr(h,s) {var len=s.length,i,w; for(i = 0;i + 4 <= len;i += 4) {w = s[i] | s[i + 1] << 8 | s[i + 2] << 16 | s[i + 3] << 24; h = caml_hash_mix_int(h,w)} w = 0; switch(len & 3) {case 3:w = s[i + 2] << 16; case 2:w |= s[i + 1] << 8; case 1:w |= s[i];h = caml_hash_mix_int(h,w) } h ^= len; return h} function caml_hash_mix_jsbytes(h,s) {var len=s.length,i,w; for(i = 0;i + 4 <= len;i += 4) {w = s.charCodeAt(i) | s.charCodeAt(i + 1) << 8 | s.charCodeAt(i + 2) << 16 | s.charCodeAt(i + 3) << 24; h = caml_hash_mix_int(h,w)} w = 0; switch(len & 3) {case 3:w = s.charCodeAt(i + 2) << 16; case 2:w |= s.charCodeAt(i + 1) << 8; case 1:w |= s.charCodeAt(i);h = caml_hash_mix_int(h,w) } h ^= len; return h} function caml_ml_bytes_content(s) {switch(s.t & 6) {default:caml_convert_string_to_bytes(s);case 0:return s.c; case 4:return s.c }} function caml_hash_mix_bytes(h,v) {var content=caml_ml_bytes_content(v); return typeof content === "string" ?caml_hash_mix_jsbytes(h,content) :caml_hash_mix_bytes_arr(h,content)} function caml_bytes_lessthan(s1,s2) {s1.t & 6 && caml_convert_string_to_bytes(s1); s2.t & 6 && caml_convert_string_to_bytes(s2); return s1.c < s2.c?1:0} function caml_erfc_float(x){return 1 - caml_erf_float(x)} function caml_gr_fill_poly(ar) {var s=caml_gr_state_get(); s.context.beginPath(); s.context.moveTo(ar[1][1],s.height - ar[1][2]); for(var i=2;i < ar.length;i++) s.context.lineTo(ar[i][1],s.height - ar[i][2]); s.context.lineTo(ar[1][1],s.height - ar[1][2]); s.context.fill(); return 0} function caml_gc_quick_stat(){return [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]} function caml_raise_end_of_file() {caml_raise_constant(caml_global_data.End_of_file)} function caml_ml_input_int(chanid) {var chan=caml_ml_channels[chanid],file=chan.file; while(chan.offset + 3 >= file.length()) {var l=caml_ml_refill_input(chan);if(l == 0)caml_raise_end_of_file()} var o=chan.offset, r= file.read_one(o) << 24 | file.read_one(o + 1) << 16 | file.read_one(o + 2) << 8 | file.read_one(o + 3); chan.offset += 4; return r} function caml_gr_display_mode() {caml_failwith("caml_gr_display_mode not Implemented")} function caml_obj_reachable_words(o){return 0} function nth_digit_nat(nat,ofs){return nat.data[ofs]} function caml_array_blit(a1,i1,a2,i2,len) {if(i2 <= i1) for(var j=1;j <= len;j++)a2[i2 + j] = a1[i1 + j]; else for(var j=len;j >= 1;j--)a2[i2 + j] = a1[i1 + j]; return 0} function caml_float_of_string(s) {var res; s = caml_jsbytes_of_string(s); res = + s; if(s.length > 0 && res === res)return res; s = s.replace(/_/g,""); res = + s; if(s.length > 0 && res === res || /^[+-]?nan$/i.test(s))return res; var m=/^ *([+-]?)0x([0-9a-f]+)\.?([0-9a-f]*)(p([+-]?[0-9]+))?/i.exec(s); if(m) {var m3=m[3].replace(/0+$/,""), mantissa=parseInt(m[1] + m[2] + m3,16), exponent=(m[5] | 0) - 4 * m3.length; res = mantissa * Math.pow(2,exponent); return res} if(/^\+?inf(inity)?$/i.test(s))return Infinity; if(/^-inf(inity)?$/i.test(s))return - Infinity; caml_failwith("float_of_string")} function caml_sys_getcwd() {return caml_string_of_jsbytes(caml_current_dir)} function caml_sys_const_big_endian(){return 0} function caml_list_to_js_array(l) {var a=[];for(;l !== 0;l = l[2])a.push(l[1]);return a} var caml_legacy_custom_code=false, caml_output_val= function() {function Writer(){this.chunk = []} Writer.prototype = {chunk_idx:20, block_len:0, obj_counter:0, size_32:0, size_64:0, write: function(size,value) {for(var i=size - 8;i >= 0;i -= 8) this.chunk[this.chunk_idx++] = value >> i & 0xFF}, write_at: function(pos,size,value) {var pos=pos; for(var i=size - 8;i >= 0;i -= 8) this.chunk[pos++] = value >> i & 0xFF}, write_code: function(size,code,value) {this.chunk[this.chunk_idx++] = code; for(var i=size - 8;i >= 0;i -= 8) this.chunk[this.chunk_idx++] = value >> i & 0xFF}, write_shared: function(offset) {if(offset < 1 << 8) this.write_code(8,0x04,offset); else if(offset < 1 << 16) this.write_code(16,0x05,offset); else this.write_code(32,0x06,offset)}, pos:function(){return this.chunk_idx}, finalize: function() {this.block_len = this.chunk_idx - 20; this.chunk_idx = 0; this.write(32,0x8495A6BE); this.write(32,this.block_len); this.write(32,this.obj_counter); this.write(32,this.size_32); this.write(32,this.size_64); return this.chunk}}; return function(v,flags) {flags = caml_list_to_js_array(flags); var no_sharing=flags.indexOf(0) !== - 1, closures=flags.indexOf(1) !== - 1; if(closures) globalThis.console.warn ("in caml_output_val: flag Marshal.Closures is not supported."); var writer=new Writer(), stack=[], intern_obj_table=no_sharing?null:new MlObjectTable(); function memo(v) {if(no_sharing)return false; var existing_offset=intern_obj_table.recall(v); if(existing_offset) {writer.write_shared(existing_offset);return true} else {intern_obj_table.store(v);return false}} function extern_rec(v) {if(v.caml_custom) {if(memo(v))return; var name=v.caml_custom, ops=caml_custom_ops[name], sz_32_64=[0,0]; if(! ops.serialize) caml_invalid_argument("output_value: abstract value (Custom)"); if(caml_legacy_custom_code) {writer.write(8,0x12); for(var i=0;i < name.length;i++) writer.write(8,name.charCodeAt(i)); writer.write(8,0); ops.serialize(writer,v,sz_32_64)} else if(ops.fixed_length == undefined) {writer.write(8,0x18); for(var i=0;i < name.length;i++) writer.write(8,name.charCodeAt(i)); writer.write(8,0); var header_pos=writer.pos(); for(var i=0;i < 12;i++)writer.write(8,0); ops.serialize(writer,v,sz_32_64); writer.write_at(header_pos,32,sz_32_64[0]); writer.write_at(header_pos + 4,32,0); writer.write_at(header_pos + 8,32,sz_32_64[1])} else {writer.write(8,0x19); for(var i=0;i < name.length;i++) writer.write(8,name.charCodeAt(i)); writer.write(8,0); var old_pos=writer.pos(); ops.serialize(writer,v,sz_32_64); if(ops.fixed_length != writer.pos() - old_pos) caml_failwith ("output_value: incorrect fixed sizes specified by " + name)} writer.size_32 += 2 + (sz_32_64[0] + 3 >> 2); writer.size_64 += 2 + (sz_32_64[1] + 7 >> 3)} else if(v instanceof Array && v[0] === (v[0] | 0)) {if(v[0] == 251) caml_failwith("output_value: abstract value (Abstract)"); if(v.length > 1 && memo(v))return; if(v[0] < 16 && v.length - 1 < 8) writer.write(8,0x80 + v[0] + (v.length - 1 << 4)); else writer.write_code(32,0x08,v.length - 1 << 10 | v[0]); writer.size_32 += v.length; writer.size_64 += v.length; if(v.length > 1)stack.push(v,1)} else if(caml_is_ml_bytes(v)) {if(! caml_is_ml_bytes(caml_string_of_jsbytes(""))) caml_failwith ("output_value: [Bytes.t] cannot safely be marshaled with [--enable use-js-string]"); if(memo(v))return; var len=caml_ml_bytes_length(v); if(len < 0x20) writer.write(8,0x20 + len); else if(len < 0x100) writer.write_code(8,0x09,len); else writer.write_code(32,0x0A,len); for(var i=0;i < len;i++) writer.write(8,caml_bytes_unsafe_get(v,i)); writer.size_32 += 1 + ((len + 4) / 4 | 0); writer.size_64 += 1 + ((len + 8) / 8 | 0)} else if(caml_is_ml_string(v)) {var len=caml_ml_string_length(v); if(len < 0x20) writer.write(8,0x20 + len); else if(len < 0x100) writer.write_code(8,0x09,len); else writer.write_code(32,0x0A,len); for(var i=0;i < len;i++) writer.write(8,caml_string_unsafe_get(v,i)); writer.size_32 += 1 + ((len + 4) / 4 | 0); writer.size_64 += 1 + ((len + 8) / 8 | 0)} else if(v != (v | 0)) {var type_of_v=typeof v; caml_failwith ("output_value: abstract value (" + type_of_v + ")")} else if(v >= 0 && v < 0x40) writer.write(8,0X40 + v); else if(v >= - (1 << 7) && v < 1 << 7) writer.write_code(8,0x00,v); else if(v >= - (1 << 15) && v < 1 << 15) writer.write_code(16,0x01,v); else writer.write_code(32,0x02,v)} extern_rec(v); while(stack.length > 0) {var i=stack.pop(),v=stack.pop(); if(i + 1 < v.length)stack.push(v,i + 1); extern_rec(v[i])} if(intern_obj_table) writer.obj_counter = intern_obj_table.objs.length; writer.finalize(); return writer.chunk}} (); function caml_string_of_array(a) {return caml_string_of_jsbytes(caml_subarray_to_jsbytes(a,0,a.length))} function caml_output_value_to_string(v,flags) {return caml_string_of_array(caml_output_val(v,flags))} function caml_raise_not_a_dir(name) {caml_raise_sys_error(name + ": Not a directory")} function caml_sys_system_command(cmd) {var cmd=caml_jsstring_of_string(cmd); if (typeof require != "undefined" && require("child_process") && require("child_process").execSync) try {require("child_process").execSync(cmd,{stdio:"inherit"});return 0} catch(e){return 1} else return 127} function unix_isatty(fileDescriptor) {if(fs_node_supported()) {var tty=require("tty");return tty.isatty(fileDescriptor)?1:0} else return 0} function caml_js_error_of_exception(exn) {if(exn.js_error)return exn.js_error;return null} function deserialize_nat(reader,sz) {var len=reader.read32s(),nat=new MlNat(len); for(var i=0;i < len;i++)nat.data[i] = reader.read32s(); sz[0] = len * 4; return nat} function initialize_nat() {caml_custom_ops["_nat"] = {deserialize:deserialize_nat,serialize:serialize_nat,hash:caml_hash_nat}} function caml_gr_open_subwindow(a,b,c,d) {caml_failwith("caml_gr_open_subwindow not Implemented")} function unix_lstat(name) {var root=resolve_fs_device(name); if(! root.device.lstat)caml_failwith("unix_lstat: not implemented"); return root.device.lstat(root.rest,true)} var unix_lstat_64=unix_lstat; function js_print_stdout(s) {var s=caml_utf16_of_utf8(s),g=globalThis; if(g.process && g.process.stdout && g.process.stdout.write) g.process.stdout.write(s); else {if(s.charCodeAt(s.length - 1) == 10)s = s.substr(0,s.length - 1); var v=g.console; v && v.log && v.log(s)}} function caml_copysign_float(x,y) {if(y == 0)y = 1 / y;x = Math.abs(x);return y < 0?- x:x} function caml_gr_set_text_size(size) {var s=caml_gr_state_get(); s.text_size = size; s.context.font = s.text_size + "px " + caml_jsstring_of_string(s.font); return 0} var caml_md5_bytes= function() {function add(x,y){return x + y | 0} function xx(q,a,b,x,s,t) {a = add(add(a,q),add(x,t));return add(a << s | a >>> 32 - s,b)} function ff(a,b,c,d,x,s,t){return xx(b & c | ~ b & d,a,b,x,s,t)} function gg(a,b,c,d,x,s,t){return xx(b & d | c & ~ d,a,b,x,s,t)} function hh(a,b,c,d,x,s,t){return xx(b ^ c ^ d,a,b,x,s,t)} function ii(a,b,c,d,x,s,t){return xx(c ^ (b | ~ d),a,b,x,s,t)} function md5(buffer,length) {var i=length; buffer[i >> 2] |= 0x80 << 8 * (i & 3); for(i = (i & ~ 0x3) + 8;(i & 0x3F) < 60;i += 4) buffer[(i >> 2) - 1] = 0; buffer[(i >> 2) - 1] = length << 3; buffer[i >> 2] = length >> 29 & 0x1FFFFFFF; var w=[0x67452301,0xEFCDAB89,0x98BADCFE,0x10325476]; for(i = 0;i < buffer.length;i += 16) {var a=w[0],b=w[1],c=w[2],d=w[3]; a = ff(a,b,c,d,buffer[i + 0],7,0xD76AA478); d = ff(d,a,b,c,buffer[i + 1],12,0xE8C7B756); c = ff(c,d,a,b,buffer[i + 2],17,0x242070DB); b = ff(b,c,d,a,buffer[i + 3],22,0xC1BDCEEE); a = ff(a,b,c,d,buffer[i + 4],7,0xF57C0FAF); d = ff(d,a,b,c,buffer[i + 5],12,0x4787C62A); c = ff(c,d,a,b,buffer[i + 6],17,0xA8304613); b = ff(b,c,d,a,buffer[i + 7],22,0xFD469501); a = ff(a,b,c,d,buffer[i + 8],7,0x698098D8); d = ff(d,a,b,c,buffer[i + 9],12,0x8B44F7AF); c = ff(c,d,a,b,buffer[i + 10],17,0xFFFF5BB1); b = ff(b,c,d,a,buffer[i + 11],22,0x895CD7BE); a = ff(a,b,c,d,buffer[i + 12],7,0x6B901122); d = ff(d,a,b,c,buffer[i + 13],12,0xFD987193); c = ff(c,d,a,b,buffer[i + 14],17,0xA679438E); b = ff(b,c,d,a,buffer[i + 15],22,0x49B40821); a = gg(a,b,c,d,buffer[i + 1],5,0xF61E2562); d = gg(d,a,b,c,buffer[i + 6],9,0xC040B340); c = gg(c,d,a,b,buffer[i + 11],14,0x265E5A51); b = gg(b,c,d,a,buffer[i + 0],20,0xE9B6C7AA); a = gg(a,b,c,d,buffer[i + 5],5,0xD62F105D); d = gg(d,a,b,c,buffer[i + 10],9,0x02441453); c = gg(c,d,a,b,buffer[i + 15],14,0xD8A1E681); b = gg(b,c,d,a,buffer[i + 4],20,0xE7D3FBC8); a = gg(a,b,c,d,buffer[i + 9],5,0x21E1CDE6); d = gg(d,a,b,c,buffer[i + 14],9,0xC33707D6); c = gg(c,d,a,b,buffer[i + 3],14,0xF4D50D87); b = gg(b,c,d,a,buffer[i + 8],20,0x455A14ED); a = gg(a,b,c,d,buffer[i + 13],5,0xA9E3E905); d = gg(d,a,b,c,buffer[i + 2],9,0xFCEFA3F8); c = gg(c,d,a,b,buffer[i + 7],14,0x676F02D9); b = gg(b,c,d,a,buffer[i + 12],20,0x8D2A4C8A); a = hh(a,b,c,d,buffer[i + 5],4,0xFFFA3942); d = hh(d,a,b,c,buffer[i + 8],11,0x8771F681); c = hh(c,d,a,b,buffer[i + 11],16,0x6D9D6122); b = hh(b,c,d,a,buffer[i + 14],23,0xFDE5380C); a = hh(a,b,c,d,buffer[i + 1],4,0xA4BEEA44); d = hh(d,a,b,c,buffer[i + 4],11,0x4BDECFA9); c = hh(c,d,a,b,buffer[i + 7],16,0xF6BB4B60); b = hh(b,c,d,a,buffer[i + 10],23,0xBEBFBC70); a = hh(a,b,c,d,buffer[i + 13],4,0x289B7EC6); d = hh(d,a,b,c,buffer[i + 0],11,0xEAA127FA); c = hh(c,d,a,b,buffer[i + 3],16,0xD4EF3085); b = hh(b,c,d,a,buffer[i + 6],23,0x04881D05); a = hh(a,b,c,d,buffer[i + 9],4,0xD9D4D039); d = hh(d,a,b,c,buffer[i + 12],11,0xE6DB99E5); c = hh(c,d,a,b,buffer[i + 15],16,0x1FA27CF8); b = hh(b,c,d,a,buffer[i + 2],23,0xC4AC5665); a = ii(a,b,c,d,buffer[i + 0],6,0xF4292244); d = ii(d,a,b,c,buffer[i + 7],10,0x432AFF97); c = ii(c,d,a,b,buffer[i + 14],15,0xAB9423A7); b = ii(b,c,d,a,buffer[i + 5],21,0xFC93A039); a = ii(a,b,c,d,buffer[i + 12],6,0x655B59C3); d = ii(d,a,b,c,buffer[i + 3],10,0x8F0CCC92); c = ii(c,d,a,b,buffer[i + 10],15,0xFFEFF47D); b = ii(b,c,d,a,buffer[i + 1],21,0x85845DD1); a = ii(a,b,c,d,buffer[i + 8],6,0x6FA87E4F); d = ii(d,a,b,c,buffer[i + 15],10,0xFE2CE6E0); c = ii(c,d,a,b,buffer[i + 6],15,0xA3014314); b = ii(b,c,d,a,buffer[i + 13],21,0x4E0811A1); a = ii(a,b,c,d,buffer[i + 4],6,0xF7537E82); d = ii(d,a,b,c,buffer[i + 11],10,0xBD3AF235); c = ii(c,d,a,b,buffer[i + 2],15,0x2AD7D2BB); b = ii(b,c,d,a,buffer[i + 9],21,0xEB86D391); w[0] = add(a,w[0]); w[1] = add(b,w[1]); w[2] = add(c,w[2]); w[3] = add(d,w[3])} var t=new Array(16); for(var i=0;i < 4;i++) for(var j=0;j < 4;j++)t[i * 4 + j] = w[i] >> 8 * j & 0xFF; return t} return function(s,ofs,len) {var buf=[],content=caml_ml_bytes_content(s); if(typeof content === "string") {var b=content; for(var i=0;i < len;i += 4) {var j=i + ofs; buf[i >> 2] = b.charCodeAt(j) | b.charCodeAt(j + 1) << 8 | b.charCodeAt(j + 2) << 16 | b.charCodeAt(j + 3) << 24} for(;i < len;i++) buf[i >> 2] |= b.charCodeAt(i + ofs) << 8 * (i & 3)} else {var a=content; for(var i=0;i < len;i += 4) {var j=i + ofs; buf[i >> 2] = a[j] | a[j + 1] << 8 | a[j + 2] << 16 | a[j + 3] << 24} for(;i < len;i++)buf[i >> 2] |= a[i + ofs] << 8 * (i & 3)} return caml_string_of_array(md5(buf,len))}} (); function caml_ba_set_generic(ba,i,v) {ba.set(ba.offset(caml_js_from_array(i)),v);return 0} function caml_ephe_set_key(x,i,v){return caml_weak_set(x,i,[0,v])} function caml_bytes_lessequal(s1,s2) {s1.t & 6 && caml_convert_string_to_bytes(s1); s2.t & 6 && caml_convert_string_to_bytes(s2); return s1.c <= s2.c?1:0} function caml_string_lessequal(s1,s2){return caml_bytes_lessequal(s1,s2)} function caml_string_greaterequal(s1,s2) {return caml_string_lessequal(s2,s1)} function caml_int64_add(x,y){return x.add(y)} function caml_nextafter_float(x,y) {if(isNaN(x) || isNaN(y))return NaN; if(x == y)return y; if(x == 0)return y < 0?- Math.pow(2,- 1074):Math.pow(2,- 1074); var bits=caml_int64_bits_of_float(x),one=caml_int64_of_int32(1); if(x < y == x > 0) bits = caml_int64_add(bits,one); else bits = caml_int64_sub(bits,one); return caml_int64_float_of_bits(bits)} function caml_gr_size_y(){var s=caml_gr_state_get();return s.height} function caml_ml_pos_in(chanid){return caml_ml_channels[chanid].offset} function caml_int64_and(x,y){return x.and(y)} function caml_sys_const_word_size(){return 32} function caml_std_output(chanid,s) {var chan=caml_ml_channels[chanid], str=caml_string_of_jsbytes(s), slen=caml_ml_string_length(str); chan.file.write(chan.offset,str,0,slen); chan.offset += slen; return 0} function js_print_stderr(s) {var s=caml_utf16_of_utf8(s),g=globalThis; if(g.process && g.process.stdout && g.process.stdout.write) g.process.stderr.write(s); else {if(s.charCodeAt(s.length - 1) == 10)s = s.substr(0,s.length - 1); var v=g.console; v && v.error && v.error(s)}} function caml_sys_open_internal(idx,output,file,flags) {if(caml_global_data.fds === undefined) caml_global_data.fds = new Array(); flags = flags?flags:{}; var info={}; info.file = file; info.offset = flags.append?file.length():0; info.flags = flags; info.output = output; caml_global_data.fds[idx] = info; if(! caml_global_data.fd_last_idx || idx > caml_global_data.fd_last_idx) caml_global_data.fd_last_idx = idx; return idx} function caml_sys_open(name,flags,_perms) {var f={}; while(flags) {switch(flags[1]) {case 0:f.rdonly = 1;break; case 1:f.wronly = 1;break; case 2:f.append = 1;break; case 3:f.create = 1;break; case 4:f.truncate = 1;break; case 5:f.excl = 1;break; case 6:f.binary = 1;break; case 7:f.text = 1;break; case 8:f.nonblock = 1;break } flags = flags[2]} if(f.rdonly && f.wronly) caml_raise_sys_error (caml_jsbytes_of_string(name) + " : flags Open_rdonly and Open_wronly are not compatible"); if(f.text && f.binary) caml_raise_sys_error (caml_jsbytes_of_string(name) + " : flags Open_text and Open_binary are not compatible"); var root=resolve_fs_device(name), file=root.device.open(root.rest,f), idx=caml_global_data.fd_last_idx?caml_global_data.fd_last_idx:0; return caml_sys_open_internal(idx + 1,caml_std_output,file,f)} caml_sys_open_internal (0,caml_std_output,new MlFakeFile(caml_create_bytes(0))); caml_sys_open_internal (1,js_print_stdout,new MlFakeFile(caml_create_bytes(0))); caml_sys_open_internal (2,js_print_stderr,new MlFakeFile(caml_create_bytes(0))); function MlStringReader(s,i) {this.s = caml_jsbytes_of_string(s);this.i = i} MlStringReader.prototype = {read8u:function(){return this.s.charCodeAt(this.i++)}, read8s:function(){return this.s.charCodeAt(this.i++) << 24 >> 24}, read16u: function() {var s=this.s,i=this.i; this.i = i + 2; return s.charCodeAt(i) << 8 | s.charCodeAt(i + 1)}, read16s: function() {var s=this.s,i=this.i; this.i = i + 2; return s.charCodeAt(i) << 24 >> 16 | s.charCodeAt(i + 1)}, read32u: function() {var s=this.s,i=this.i; this.i = i + 4; return (s.charCodeAt(i) << 24 | s.charCodeAt(i + 1) << 16 | s.charCodeAt(i + 2) << 8 | s.charCodeAt(i + 3)) >>> 0}, read32s: function() {var s=this.s,i=this.i; this.i = i + 4; return s.charCodeAt(i) << 24 | s.charCodeAt(i + 1) << 16 | s.charCodeAt(i + 2) << 8 | s.charCodeAt(i + 3)}, readstr: function(len) {var i=this.i; this.i = i + len; return caml_string_of_jsbytes(this.s.substring(i,i + len))}}; function caml_float_of_bytes(a) {return caml_int64_float_of_bits(caml_int64_of_bytes(a))} function caml_input_value_from_reader(reader,ofs) {var _magic=reader.read32u(), _block_len=reader.read32u(), num_objects=reader.read32u(), _size_32=reader.read32u(), _size_64=reader.read32u(), stack=[], intern_obj_table=num_objects > 0?[]:null, obj_counter=0; function intern_rec() {var code=reader.read8u(); if(code >= 0x40) if(code >= 0x80) {var tag=code & 0xF,size=code >> 4 & 0x7,v=[tag]; if(size == 0)return v; if(intern_obj_table)intern_obj_table[obj_counter++] = v; stack.push(v,size); return v} else return code & 0x3F; else if(code >= 0x20) {var len=code & 0x1F,v=reader.readstr(len); if(intern_obj_table)intern_obj_table[obj_counter++] = v; return v} else switch(code) {case 0x00:return reader.read8s(); case 0x01:return reader.read16s(); case 0x02:return reader.read32s(); case 0x03:caml_failwith("input_value: integer too large");break; case 0x04: var offset=reader.read8u(); return intern_obj_table[obj_counter - offset]; case 0x05: var offset=reader.read16u(); return intern_obj_table[obj_counter - offset]; case 0x06: var offset=reader.read32u(); return intern_obj_table[obj_counter - offset]; case 0x08: var header=reader.read32u(), tag=header & 0xFF, size=header >> 10, v=[tag]; if(size == 0)return v; if(intern_obj_table)intern_obj_table[obj_counter++] = v; stack.push(v,size); return v; case 0x13: caml_failwith("input_value: data block too large");break; case 0x09: var len=reader.read8u(),v=reader.readstr(len); if(intern_obj_table)intern_obj_table[obj_counter++] = v; return v; case 0x0A: var len=reader.read32u(),v=reader.readstr(len); if(intern_obj_table)intern_obj_table[obj_counter++] = v; return v; case 0x0C: var t=new Array(8); for(var i=0;i < 8;i++)t[7 - i] = reader.read8u(); var v=caml_float_of_bytes(t); if(intern_obj_table)intern_obj_table[obj_counter++] = v; return v; case 0x0B: var t=new Array(8); for(var i=0;i < 8;i++)t[i] = reader.read8u(); var v=caml_float_of_bytes(t); if(intern_obj_table)intern_obj_table[obj_counter++] = v; return v; case 0x0E: var len=reader.read8u(),v=new Array(len + 1); v[0] = 254; var t=new Array(8); if(intern_obj_table)intern_obj_table[obj_counter++] = v; for(var i=1;i <= len;i++) {for(var j=0;j < 8;j++)t[7 - j] = reader.read8u(); v[i] = caml_float_of_bytes(t)} return v; case 0x0D: var len=reader.read8u(),v=new Array(len + 1); v[0] = 254; var t=new Array(8); if(intern_obj_table)intern_obj_table[obj_counter++] = v; for(var i=1;i <= len;i++) {for(var j=0;j < 8;j++)t[j] = reader.read8u(); v[i] = caml_float_of_bytes(t)} return v; case 0x07: var len=reader.read32u(),v=new Array(len + 1); v[0] = 254; if(intern_obj_table)intern_obj_table[obj_counter++] = v; var t=new Array(8); for(var i=1;i <= len;i++) {for(var j=0;j < 8;j++)t[7 - j] = reader.read8u(); v[i] = caml_float_of_bytes(t)} return v; case 0x0F: var len=reader.read32u(),v=new Array(len + 1); v[0] = 254; var t=new Array(8); for(var i=1;i <= len;i++) {for(var j=0;j < 8;j++)t[j] = reader.read8u(); v[i] = caml_float_of_bytes(t)} return v; case 0x10: case 0x11:caml_failwith("input_value: code pointer");break; case 0x12: case 0x18: case 0x19: var c,s=""; while((c = reader.read8u()) != 0)s += String.fromCharCode(c); var ops=caml_custom_ops[s],expected_size; if(! ops) caml_failwith("input_value: unknown custom block identifier"); switch(code) {case 0x12:break; case 0x19: if(! ops.fixed_length) caml_failwith ("input_value: expected a fixed-size custom block"); expected_size = ops.fixed_length; break; case 0x18: expected_size = reader.read32u(); reader.read32s(); reader.read32s(); break } var old_pos=reader.i,size=[0],v=ops.deserialize(reader,size); if(expected_size != undefined) if(expected_size != size[0]) caml_failwith ("input_value: incorrect length of serialized custom block"); if(intern_obj_table)intern_obj_table[obj_counter++] = v; return v; default:caml_failwith("input_value: ill-formed message")}} var res=intern_rec(); while(stack.length > 0) {var size=stack.pop(),v=stack.pop(),d=v.length; if(d < size)stack.push(v,size); v[d] = intern_rec()} if(typeof ofs != "number")ofs[0] = reader.i; return res} function caml_string_of_bytes(s){return s} function caml_input_value_from_bytes(s,ofs) {var reader= new MlStringReader (caml_string_of_bytes(s),typeof ofs == "number"?ofs:ofs[0]); return caml_input_value_from_reader(reader,ofs)} function caml_string_get(s,i) {if(i >>> 0 >= caml_ml_string_length(s))caml_string_bound_error(); return caml_string_unsafe_get(s,i)} var re_match= function() {var re_word_letters= [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, 0xFE, 0xFF, 0xFF, 0x87, 0xFE, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF], opcodes= {CHAR:0, CHARNORM:1, STRING:2, STRINGNORM:3, CHARCLASS:4, BOL:5, EOL:6, WORDBOUNDARY:7, BEGGROUP:8, ENDGROUP:9, REFGROUP:10, ACCEPT:11, SIMPLEOPT:12, SIMPLESTAR:13, SIMPLEPLUS:14, GOTO:15, PUSHBACK:16, SETMARK:17, CHECKPROGRESS:18}; function is_word_letter(c) {return re_word_letters[c >> 3] >> (c & 7) & 1} function in_bitset(s,i) {return caml_string_get(s,i >> 3) >> (i & 7) & 1} function re_match_impl(re,s,pos,partial) {var prog=caml_js_from_array(re[1]), cpool=caml_js_from_array(re[2]), normtable=caml_jsbytes_of_string(re[3]), numgroups=re[4] | 0, numregisters=re[5] | 0, startchars=re[6] | 0, s=caml_array_of_string(s), pc=0, quit=false, stack=[], groups=new Array(numgroups), re_register=new Array(numregisters); for(var i=0;i < groups.length;i++)groups[i] = {start:- 1,end:- 1}; groups[0].start = pos; function backtrack() {while(stack.length) {var item=stack.pop(); if(item.undo) item.undo.obj[item.undo.prop] = item.undo.value; else if(item.pos){pc = item.pos.pc;pos = item.pos.txt;return}} quit = true} function push(item){stack.push(item)} function accept() {groups[0].end = pos; var result=new Array(1 + groups.length * 2); result[0] = 0; for(var i=0;i < groups.length;i++) {var g=groups[i]; if(g.start < 0 || g.end < 0)g.start = g.end = - 1; result[2 * i + 1] = g.start; result[2 * i + 1 + 1] = g.end} return result} function prefix_match() {if(partial)return accept();else backtrack()} while(! quit) {var op=prog[pc] & 0xff, sarg=prog[pc] >> 8, uarg=sarg & 0xff, c=s[pos], group; pc++; switch(op) {case opcodes.CHAR: if(pos === s.length){prefix_match();break} if(c === uarg)pos++;else backtrack(); break; case opcodes.CHARNORM: if(pos === s.length){prefix_match();break} if(normtable.charCodeAt(c) === uarg)pos++;else backtrack(); break; case opcodes.STRING: for (var arg=caml_jsbytes_of_string(cpool[uarg]),i=0; i < arg.length; i++) {if(pos === s.length){prefix_match();break} if(c === arg.charCodeAt(i)) c = s[++pos]; else {backtrack();break}} break; case opcodes.STRINGNORM: for (var arg=caml_jsbytes_of_string(cpool[uarg]),i=0; i < arg.length; i++) {if(pos === s.length){prefix_match();break} if(normtable.charCodeAt(c) === arg.charCodeAt(i)) c = s[++pos]; else {backtrack();break}} break; case opcodes.CHARCLASS: if(pos === s.length){prefix_match();break} if(in_bitset(cpool[uarg],c))pos++;else backtrack(); break; case opcodes.BOL: if(pos > 0 && s[pos - 1] != 10)backtrack();break; case opcodes.EOL: if(pos < s.length && s[pos] != 10)backtrack();break; case opcodes.WORDBOUNDARY: if(pos == 0) {if(pos === s.length){prefix_match();break} if(is_word_letter(s[0]))break; backtrack()} else if(pos === s.length) {if(is_word_letter(s[pos - 1]))break;backtrack()} else {if(is_word_letter(s[pos - 1]) != is_word_letter(s[pos])) break; backtrack()} break; case opcodes.BEGGROUP: group = groups[uarg]; push({undo:{obj:group,prop:"start",value:group.start}}); group.start = pos; break; case opcodes.ENDGROUP: group = groups[uarg]; push({undo:{obj:group,prop:"end",value:group.end}}); group.end = pos; break; case opcodes.REFGROUP: group = groups[uarg]; if(group.start < 0 || group.end < 0){backtrack();break} for(var i=group.start;i < group.end;i++) {if(pos === s.length){prefix_match();break} if(s[i] != s[pos]){backtrack();break} pos++} break; case opcodes.SIMPLEOPT:if(in_bitset(cpool[uarg],c))pos++;break; case opcodes.SIMPLESTAR: while(in_bitset(cpool[uarg],c))c = s[++pos];break; case opcodes.SIMPLEPLUS: if(pos === s.length){prefix_match();break} if(in_bitset(cpool[uarg],c)) do c = s[++pos];while(in_bitset(cpool[uarg],c)); else backtrack(); break; case opcodes.ACCEPT:return accept(); case opcodes.GOTO:pc = pc + sarg;break; case opcodes.PUSHBACK:push({pos:{pc:pc + sarg,txt:pos}});break; case opcodes.SETMARK: push ({undo:{obj:re_register,prop:uarg,value:re_register[uarg]}}); re_register[uarg] = pos; break; case opcodes.CHECKPROGRESS: if(re_register[uarg] === pos)backtrack();break; default:throw new Error("Invalid bytecode")}} return 0} return re_match_impl} (); function re_search_backward(re,s,pos) {if(pos < 0 || pos > caml_ml_string_length(s)) caml_invalid_argument("Str.search_backward"); while(pos >= 0){var res=re_match(re,s,pos,0);if(res)return res;pos--} return [0]} function caml_js_from_string(s){return caml_jsstring_of_string(s)} function caml_ba_sub(ba,ofs,len) {var changed_dim,mul=1; if(ba.layout == 0) {for(var i=1;i < ba.dims.length;i++)mul = mul * ba.dims[i]; changed_dim = 0} else {for(var i=0;i < ba.dims.length - 1;i++)mul = mul * ba.dims[i]; changed_dim = ba.dims.length - 1; ofs = ofs - 1} if(ofs < 0 || len < 0 || ofs + len > ba.dims[changed_dim]) caml_invalid_argument("Bigarray.sub: bad sub-array"); var new_dims=[]; for(var i=0;i < ba.dims.length;i++)new_dims[i] = ba.dims[i]; new_dims[changed_dim] = len; mul *= caml_ba_get_size_per_element(ba.kind); var new_data=ba.data.subarray(ofs * mul,(ofs + len) * mul); return caml_ba_create_unsafe(ba.kind,ba.layout,new_dims,new_data)} function caml_gc_full_major(){return 0} function caml_bytes_set32(s,i,i32) {if(i >>> 0 >= s.l - 3)caml_bytes_bound_error(); var b4=0xFF & i32 >> 24, b3=0xFF & i32 >> 16, b2=0xFF & i32 >> 8, b1=0xFF & i32; caml_bytes_unsafe_set(s,i + 0,b1); caml_bytes_unsafe_set(s,i + 1,b2); caml_bytes_unsafe_set(s,i + 2,b3); caml_bytes_unsafe_set(s,i + 3,b4); return 0} function caml_gr_sigio_signal(){return 0} function caml_ba_uint8_set32(ba,i0,v) {var ofs=ba.offset(i0); if(ofs + 3 >= ba.data.length)caml_array_bound_error(); ba.set(ofs + 0,v & 0xff); ba.set(ofs + 1,v >>> 8 & 0xff); ba.set(ofs + 2,v >>> 16 & 0xff); ba.set(ofs + 3,v >>> 24 & 0xff); return 0} function caml_sys_const_ostype_unix(){return os_type == "Unix"?1:0} function caml_signbit_float(x){if(x == 0)x = 1 / x;return x < 0?1:0} function caml_gr_set_line_width(w) {var s=caml_gr_state_get(); s.line_width = w; s.context.lineWidth = w; return 0} function caml_gr_set_font(f) {var s=caml_gr_state_get(); s.font = f; s.context.font = s.text_size + "px " + caml_jsstring_of_string(s.font); return 0} function caml_gr_set_color(color) {var s=caml_gr_state_get(); function convert(number) {var str="" + number.toString(16); while(str.length < 2)str = "0" + str; return str} var r=color >> 16 & 0xff,g=color >> 8 & 0xff,b=color >> 0 & 0xff; s.color = color; var c_str="#" + convert(r) + convert(g) + convert(b); s.context.fillStyle = c_str; s.context.strokeStyle = c_str; return 0} function caml_gr_moveto(x,y) {var s=caml_gr_state_get();s.x = x;s.y = y;return 0} function caml_gr_resize_window(w,h) {var s=caml_gr_state_get(); s.width = w; s.height = h; s.canvas.width = w; s.canvas.height = h; return 0} function caml_gr_state_init() {caml_gr_moveto(caml_gr_state.x,caml_gr_state.y); caml_gr_resize_window(caml_gr_state.width,caml_gr_state.height); caml_gr_set_line_width(caml_gr_state.line_width); caml_gr_set_text_size(caml_gr_state.text_size); caml_gr_set_font(caml_gr_state.font); caml_gr_set_color(caml_gr_state.color); caml_gr_set_window_title(caml_gr_state.title); caml_gr_state.context.textBaseline = "bottom"} function caml_gr_current_x(){var s=caml_gr_state_get();return s.x} function caml_ba_kind_of_typed_array(ta) {var g=globalThis,kind; if(ta instanceof g.Float32Array) kind = 0; else if(ta instanceof g.Float64Array) kind = 1; else if(ta instanceof g.Int8Array) kind = 2; else if(ta instanceof g.Uint8Array) kind = 3; else if(ta instanceof g.Int16Array) kind = 4; else if(ta instanceof g.Uint16Array) kind = 5; else if(ta instanceof g.Int32Array) kind = 6; else if(ta instanceof g.Uint32Array) kind = 6; else caml_invalid_argument ("caml_ba_kind_of_typed_array: unsupported kind"); return kind} function caml_ba_from_typed_array(ta) {var kind=caml_ba_kind_of_typed_array(ta); return caml_ba_create_unsafe(kind,0,[ta.length],ta)} function caml_ml_seek_out(chanid,pos) {caml_ml_flush(chanid);caml_ml_channels[chanid].offset = pos;return 0} function caml_js_typeof(o){return typeof o} function caml_restore_raw_backtrace(exn,bt){return 0} function caml_gr_lineto(x,y) {var s=caml_gr_state_get(); s.context.beginPath(); s.context.moveTo(s.x,s.height - s.y); s.context.lineTo(x,s.height - y); s.context.stroke(); s.x = x; s.y = y; return 0} function caml_js_wrap_meth_callback_unsafe(f) {return function() {var len=arguments.length,args=new Array(len + 1); args[0] = this; for(var i=0;i < len;i++)args[i + 1] = arguments[i]; return f.apply(null,args)}} function caml_ba_dim_3(ba){return caml_ba_dim(ba,2)} function caml_is_special_exception(exn) {switch(exn[2]){case - 8:case - 11:case - 12:return 1;default:return 0}} function caml_format_exception(exn) {var r=""; if(exn[0] == 0) {r += exn[1][1]; if (exn.length == 3 && exn[2][0] == 0 && caml_is_special_exception(exn[1])) var bucket=exn[2],start=1; else var start=2,bucket=exn; r += "("; for(var i=start;i < bucket.length;i++) {if(i > start)r += ", "; var v=bucket[i]; if(typeof v == "number") r += v.toString(); else if(v instanceof MlBytes) r += '"' + v.toString() + '"'; else if(typeof v == "string") r += '"' + v.toString() + '"'; else r += "_"} r += ")"} else if(exn[0] == 248)r += exn[1]; return r} function caml_fatal_uncaught_exception(err) {if(err instanceof Array && (err[0] == 0 || err[0] == 248)) {var handler=caml_named_value("Printexc.handle_uncaught_exception"); if(handler) handler(err,false); else {var msg=caml_format_exception(err), at_exit=caml_named_value("Pervasives.do_at_exit"); if(at_exit)at_exit(0); globalThis.console.error("Fatal error: exception " + msg + "\n")}} else throw err} var caml_ephe_data_offset=2; function caml_ephe_check_data(x) {return x[caml_ephe_data_offset] === undefined?0:1} function caml_bytes_get16(s,i) {if(i >>> 0 >= s.l - 1)caml_bytes_bound_error(); var b1=caml_bytes_unsafe_get(s,i),b2=caml_bytes_unsafe_get(s,i + 1); return b2 << 8 | b1} function caml_obj_make_forward(b,v){b[0] = 250;b[1] = v;return 0} function caml_js_from_bool(x){return ! ! x} function caml_ml_set_channel_name(){return 0} function caml_exp2_float(x){return Math.pow(2,x)} function caml_gr_close_graph() {var s=caml_gr_state_get(); s.canvas.width = 0; s.canvas.height = 0; return 0} function caml_create_string(len) {if(len < 0)caml_invalid_argument("String.create"); return new MlBytes(len?2:9,"",len)} function caml_md5_string(s,ofs,len) {return caml_md5_bytes(caml_bytes_of_string(s),ofs,len)} function caml_md5_chan(chanid,len) {var chan=caml_ml_channels[chanid],chan_len=chan.file.length(); if(len < 0)len = chan_len - chan.offset; if(chan.offset + len > chan_len)caml_raise_end_of_file(); var buf=caml_create_bytes(len); chan.file.read(chan.offset,buf,0,len); return caml_md5_string(caml_string_of_bytes(buf),0,len)} function caml_obj_dup(x) {var l=x.length,a=new Array(l); for(var i=0;i < l;i++)a[i] = x[i]; return a} function caml_weak_get_copy(x,i) {if(i < 0 || caml_ephe_key_offset + i >= x.length) caml_invalid_argument("Weak.get_copy"); var y=caml_weak_get(x,i); if(y === 0)return y; var z=y[1]; if(z instanceof Array)return [0,caml_obj_dup(z)]; return y} function caml_atanh_float(x){return Math.atanh(x)} function caml_ml_output_bytes(chanid,buffer,offset,len) {var chan=caml_ml_channels[chanid]; if(! chan.opened) caml_raise_sys_error("Cannot output to a closed channel"); var bytes; if(offset == 0 && caml_ml_bytes_length(buffer) == len) bytes = buffer; else {bytes = caml_create_bytes(len); caml_blit_bytes(buffer,offset,bytes,0,len)} var string=caml_string_of_bytes(bytes), jsstring=caml_jsbytes_of_string(string), id=jsstring.lastIndexOf("\n"); if(id < 0) chan.buffer += jsstring; else {chan.buffer += jsstring.substr(0,id + 1); caml_ml_flush(chanid); chan.buffer += jsstring.substr(id + 1)} return 0} function caml_ml_output(chanid,buffer,offset,len) {return caml_ml_output_bytes (chanid,caml_bytes_of_string(buffer),offset,len)} function caml_ephe_get_data(x) {return x[caml_ephe_data_offset] === undefined ?0 :[0,x[caml_ephe_data_offset]]} function caml_xmlhttprequest_create(unit) {var g=globalThis; if(typeof g.XMLHttpRequest !== "undefined") try {return new (g.XMLHttpRequest)()}catch(e){} if(typeof g.activeXObject !== "undefined") {try {return new (g.activeXObject)("Msxml2.XMLHTTP")}catch(e){} try {return new (g.activeXObject)("Msxml3.XMLHTTP")}catch(e){} try {return new (g.activeXObject)("Microsoft.XMLHTTP")}catch(e){}} caml_failwith("Cannot create a XMLHttpRequest")} function caml_trampoline_return(f,args) {return {joo_tramp:f,joo_args:args}} function caml_ml_is_buffered(c){return 1} function caml_array_append(a1,a2) {var l1=a1.length,l2=a2.length,l=l1 + l2 - 1,a=new Array(l); a[0] = 0; var i=1,j=1; for(;i < l1;i++)a[i] = a1[i]; for(;i < l;i++,j++)a[i] = a2[j]; return a} function caml_ml_set_channel_refill(chanid,f) {caml_ml_channels[chanid].refill = f;return 0} function caml_js_expr(s) {js_print_stderr("caml_js_expr: fallback to runtime evaluation\n"); return eval(caml_jsstring_of_string(s))} function caml_int64_mul(x,y){return x.mul(y)} function caml_ml_runtime_warnings_enabled(_unit) {return caml_runtime_warnings} function caml_output_value_to_bytes(v,flags) {return caml_bytes_of_array(caml_output_val(v,flags))} function caml_eventlog_resume(unit){return 0} function caml_hash_univ_param(count,limit,obj) {var hash_accu=0; function hash_aux(obj) {limit--; if(count < 0 || limit < 0)return; if(obj instanceof Array && obj[0] === (obj[0] | 0)) switch(obj[0]) {case 248:count--;hash_accu = hash_accu * 65599 + obj[2] | 0;break; case 250:limit++;hash_aux(obj);break; default: count--; hash_accu = hash_accu * 19 + obj[0] | 0; for(var i=obj.length - 1;i > 0;i--)hash_aux(obj[i])} else if(caml_is_ml_bytes(obj)) {count--; var content=caml_ml_bytes_content(obj); if(typeof content === "string") for(var b=content,l=b.length,i=0;i < l;i++) hash_accu = hash_accu * 19 + b.charCodeAt(i) | 0; else for(var a=content,l=a.length,i=0;i < l;i++) hash_accu = hash_accu * 19 + a[i] | 0} else if(caml_is_ml_string(obj)) {var jsbytes=caml_jsbytes_of_string(obj); for(var b=jsbytes,l=jsbytes.length,i=0;i < l;i++) hash_accu = hash_accu * 19 + b.charCodeAt(i) | 0} else if(typeof obj === "string") for(var b=obj,l=obj.length,i=0;i < l;i++) hash_accu = hash_accu * 19 + b.charCodeAt(i) | 0; else if(obj === (obj | 0)) {count--;hash_accu = hash_accu * 65599 + obj | 0} else if(obj === + obj) {count--; var p=caml_int64_to_bytes(caml_int64_bits_of_float(obj)); for(var i=7;i >= 0;i--)hash_accu = hash_accu * 19 + p[i] | 0} else if(obj && obj.caml_custom) if (caml_custom_ops[obj.caml_custom] && caml_custom_ops[obj.caml_custom].hash) {var h=caml_custom_ops[obj.caml_custom].hash(obj) | 0; hash_accu = hash_accu * 65599 + h | 0}} hash_aux(obj); return hash_accu & 0x3FFFFFFF} function caml_string_equal(s1,s2){return caml_bytes_equal(s1,s2)} function caml_output_value_to_buffer(s,ofs,len,v,flags) {var t=caml_output_val(v,flags); if(t.length > len)caml_failwith("Marshal.to_buffer: buffer overflow"); caml_blit_bytes(t,0,s,ofs,t.length); return 0} function re_replacement_text(repl,groups,orig) {var repl=caml_jsbytes_of_string(repl), len=repl.length, orig=caml_jsbytes_of_string(orig), res="", n=0, cur, start, end, c; while(n < len) {cur = repl.charAt(n++); if(cur != "\\") res += cur; else {if(n == len) caml_failwith("Str.replace: illegal backslash sequence"); cur = repl.charAt(n++); switch(cur) {case "\\":res += cur;break; case "0": case "1": case "2": case "3": case "4": case "5": case "6": case "7": case "8": case "9": c = + cur; if(c * 2 >= groups.length - 1) caml_failwith("Str.replace: reference to unmatched group"); start = caml_array_get(groups,c * 2); end = caml_array_get(groups,c * 2 + 1); if(start == - 1) caml_failwith("Str.replace: reference to unmatched group"); res += orig.slice(start,end); break; default:res += "\\" + cur}}} return caml_string_of_jsbytes(res)} function caml_pure_js_expr(s) {js_print_stderr("caml_pure_js_expr: fallback to runtime evaluation\n"); return eval(caml_jsstring_of_string(s))} function blit_nat(nat1,ofs1,nat2,ofs2,len) {for(var i=0;i < len;i++)nat1.data[ofs1 + i] = nat2.data[ofs2 + i]; return 0} function caml_int64_ult(x,y){return x.ucompare(y) < 0} function caml_int64_xor(x,y){return x.xor(y)} function caml_bigstring_blit_ba_to_bytes(ba1,pos1,bytes2,pos2,len) {if(12 != ba1.kind) caml_invalid_argument ("caml_bigstring_blit_string_to_ba: kind mismatch"); if(len == 0)return 0; var ofs1=ba1.offset(pos1); if(ofs1 + len > ba1.data.length)caml_array_bound_error(); if(pos2 + len > caml_ml_bytes_length(bytes2))caml_array_bound_error(); var slice=ba1.data.slice(ofs1,ofs1 + len); caml_blit_bytes(caml_bytes_of_array(slice),0,bytes2,pos2,len); return 0} function caml_register_named_value(nm,v) {caml_named_values[caml_jsbytes_of_string(nm)] = v;return 0} function jsoo_create_file_extern(name,content) {if(globalThis.jsoo_create_file) globalThis.jsoo_create_file(name,content); else {if(! globalThis.caml_fs_tmp)globalThis.caml_fs_tmp = []; globalThis.caml_fs_tmp.push({name:name,content:content})} return 0} function caml_to_js_string(s){return caml_jsstring_of_string(s)} function caml_parse_sign_and_base(s) {var i=0,len=caml_ml_string_length(s),base=10,sign=1; if(len > 0) switch(caml_string_unsafe_get(s,i)) {case 45:i++;sign = - 1;break;case 43:i++;sign = 1;break} if(i + 1 < len && caml_string_unsafe_get(s,i) == 48) switch(caml_string_unsafe_get(s,i + 1)) {case 120: case 88:base = 16;i += 2;break; case 111: case 79:base = 8;i += 2;break; case 98: case 66:base = 2;i += 2;break; case 117: case 85:i += 2;break } return [i,sign,base]} function caml_parse_digit(c) {if(c >= 48 && c <= 57)return c - 48; if(c >= 65 && c <= 90)return c - 55; if(c >= 97 && c <= 122)return c - 87; return - 1} function caml_int64_of_string(s) {var r=caml_parse_sign_and_base(s), i=r[0], sign=r[1], base=r[2], base64=caml_int64_of_int32(base), threshold= new MlInt64(0xffffff,0xfffffff,0xffff).udivmod(base64).quotient, c=caml_string_unsafe_get(s,i), d=caml_parse_digit(c); if(d < 0 || d >= base)caml_failwith("int_of_string"); var res=caml_int64_of_int32(d); for(;;) {i++; c = caml_string_unsafe_get(s,i); if(c == 95)continue; d = caml_parse_digit(c); if(d < 0 || d >= base)break; if(caml_int64_ult(threshold,res))caml_failwith("int_of_string"); d = caml_int64_of_int32(d); res = caml_int64_add(caml_int64_mul(base64,res),d); if(caml_int64_ult(res,d))caml_failwith("int_of_string")} if(i != caml_ml_string_length(s))caml_failwith("int_of_string"); if(base == 10 && caml_int64_ult(new MlInt64(0,0,0x8000),res)) caml_failwith("int_of_string"); if(sign < 0)res = caml_int64_neg(res); return res} function re_search_forward(re,s,pos) {if(pos < 0 || pos > caml_ml_string_length(s)) caml_invalid_argument("Str.search_forward"); while(pos <= caml_ml_string_length(s)) {var res=re_match(re,s,pos,0);if(res)return res;pos++} return [0]} var caml_blit_string_to_bigstring=caml_bigstring_blit_string_to_ba; function caml_make_vect(len,init) {if(len < 0)caml_array_bound_error(); var len=len + 1 | 0,b=new Array(len); b[0] = 0; for(var i=1;i < len;i++)b[i] = init; return b} function caml_ml_seek_in(chanid,pos) {var chan=caml_ml_channels[chanid]; if(chan.refill != null)caml_raise_sys_error("Illegal seek"); chan.offset = pos; return 0} function caml_sys_read_directory(name) {var root=resolve_fs_device(name), a=root.device.readdir(root.rest), l=new Array(a.length + 1); l[0] = 0; for(var i=0;i < a.length;i++)l[i + 1] = caml_string_of_jsbytes(a[i]); return l} function caml_ml_output_char(chanid,c) {var s=caml_string_of_jsbytes(String.fromCharCode(c)); caml_ml_output(chanid,s,0,1); return 0} function caml_sys_const_ostype_win32(){return os_type == "Win32"?1:0} function caml_obj_is_block(x){return + (x instanceof Array)} function caml_ml_input_char(chanid) {var chan=caml_ml_channels[chanid]; caml_ml_may_refill_input(chanid); if(chan.offset >= chan.file.length())caml_raise_end_of_file(); var res=chan.file.read_one(chan.offset); chan.offset++; return res} function caml_obj_set_raw_field(o,i,v){return o[i + 1] = v} function caml_js_var(x) {var x=caml_jsstring_of_string(x); if(! x.match(/^[a-zA-Z_$][a-zA-Z_$0-9]*(\.[a-zA-Z_$][a-zA-Z_$0-9]*)*$/)) js_print_stderr ('caml_js_var: "' + x + '" is not a valid JavaScript variable. continuing ..'); return eval(x)} function caml_trunc_float(x){return Math.trunc(x)} function caml_ephe_blit_data(src,dst) {dst[caml_ephe_data_offset] = src[caml_ephe_data_offset];return 0} function caml_is_printable(c){return + (c > 31 && c < 127)} function caml_equal(x,y){return + (caml_compare_val(x,y,false) == 0)} function re_partial_match(re,s,pos) {if(pos < 0 || pos > caml_ml_string_length(s)) caml_invalid_argument("Str.partial_match"); var res=re_match(re,s,pos,1); return res?res:[0]} function caml_sys_random_seed() {if(globalThis.crypto) if(typeof globalThis.crypto.getRandomValues === "function") {var a=new (globalThis.Uint32Array)(1); globalThis.crypto.getRandomValues(a); return [0,a[0]]} else if(globalThis.crypto.randomBytes === "function") {var buff=globalThis.crypto.randomBytes(4), a=new (globalThis.Uint32Array)(buff); return [0,a[0]]} var now=new Date().getTime(),x=now ^ 0xffffffff * Math.random(); return [0,x]} function caml_final_register_called_without_value(){return 0} function caml_ba_get_2(ba,i0,i1){return ba.get(ba.offset([i0,i1]))} function win_handle_fd(x){return x} function caml_ba_uint8_set16(ba,i0,v) {var ofs=ba.offset(i0); if(ofs + 1 >= ba.data.length)caml_array_bound_error(); ba.set(ofs + 0,v & 0xff); ba.set(ofs + 1,v >>> 8 & 0xff); return 0} var win_filedescr_of_channel=caml_channel_descriptor; function caml_js_delete(o,f){delete o[f];return 0} function caml_int_of_string(s) {var r=caml_parse_sign_and_base(s), i=r[0], sign=r[1], base=r[2], len=caml_ml_string_length(s), threshold=- 1 >>> 0, c=i < len?caml_string_unsafe_get(s,i):0, d=caml_parse_digit(c); if(d < 0 || d >= base)caml_failwith("int_of_string"); var res=d; for(i++;i < len;i++) {c = caml_string_unsafe_get(s,i); if(c == 95)continue; d = caml_parse_digit(c); if(d < 0 || d >= base)break; res = base * res + d; if(res > threshold)caml_failwith("int_of_string")} if(i != len)caml_failwith("int_of_string"); res = sign * res; if(base == 10 && (res | 0) != res)caml_failwith("int_of_string"); return res | 0} function caml_list_mount_point() {var prev=0; for(var i=0;i < jsoo_mount_point.length;i++) {var old=prev; prev = [0,caml_string_of_jsbytes(jsoo_mount_point[i].path),old]} return prev} var caml_marshal_constants= {PREFIX_SMALL_BLOCK:0x80, PREFIX_SMALL_INT:0x40, PREFIX_SMALL_STRING:0x20, CODE_INT8:0x00, CODE_INT16:0x01, CODE_INT32:0x02, CODE_INT64:0x03, CODE_SHARED8:0x04, CODE_SHARED16:0x05, CODE_SHARED32:0x06, CODE_BLOCK32:0x08, CODE_BLOCK64:0x13, CODE_STRING8:0x09, CODE_STRING32:0x0A, CODE_DOUBLE_BIG:0x0B, CODE_DOUBLE_LITTLE:0x0C, CODE_DOUBLE_ARRAY8_BIG:0x0D, CODE_DOUBLE_ARRAY8_LITTLE:0x0E, CODE_DOUBLE_ARRAY32_BIG:0x0F, CODE_DOUBLE_ARRAY32_LITTLE:0x07, CODE_CODEPOINTER:0x10, CODE_INFIXPOINTER:0x11, CODE_CUSTOM:0x12, CODE_CUSTOM_LEN:0x18, CODE_CUSTOM_FIXED:0x19}; function caml_obj_raw_field(o,i){return o[i + 1]} function caml_js_equals(x,y){return + (x == y)} function bigstring_to_typed_array(bs){return bs.data} function caml_gr_arc_aux(ctx,cx,cy,ry,rx,a1,a2) {while(a1 > a2)a2 += 360; a1 /= 180; a2 /= 180; var rot=0, xPos, yPos, xPos_prev, yPos_prev, space=2, num=(a2 - a1) * Math.PI * ((rx + ry) / 2) / space | 0, delta=(a2 - a1) * Math.PI / num, i=a1 * Math.PI; for(var j=0;j <= num;j++) {xPos = cx - rx * Math.sin(i) * Math.sin(rot * Math.PI) + ry * Math.cos(i) * Math.cos(rot * Math.PI); xPos = xPos.toFixed(2); yPos = cy + ry * Math.cos(i) * Math.sin(rot * Math.PI) + rx * Math.sin(i) * Math.cos(rot * Math.PI); yPos = yPos.toFixed(2); if(j == 0) ctx.moveTo(xPos,yPos); else if(xPos_prev != xPos || yPos_prev != yPos)ctx.lineTo(xPos,yPos); xPos_prev = xPos; yPos_prev = yPos; i -= delta} return 0} function caml_gr_fill_arc(x,y,rx,ry,a1,a2) {var s=caml_gr_state_get(); s.context.beginPath(); caml_gr_arc_aux(s.context,x,s.height - y,rx,ry,a1,a2); s.context.fill(); return 0} function caml_ba_slice(ba,vind) {vind = caml_js_from_array(vind); var num_inds=vind.length,index=[],sub_dims=[],ofs; if(num_inds > ba.dims.length) caml_invalid_argument("Bigarray.slice: too many indices"); if(ba.layout == 0) {for(var i=0;i < num_inds;i++)index[i] = vind[i]; for(;i < ba.dims.length;i++)index[i] = 0; sub_dims = ba.dims.slice(num_inds)} else {for(var i=0;i < num_inds;i++) index[ba.dims.length - num_inds + i] = vind[i]; for(var i=0;i < ba.dims.length - num_inds;i++)index[i] = 1; sub_dims = ba.dims.slice(0,ba.dims.length - num_inds)} ofs = ba.offset(index); var size=caml_ba_get_size(sub_dims), size_per_element=caml_ba_get_size_per_element(ba.kind), new_data= ba.data.subarray (ofs * size_per_element,(ofs + size) * size_per_element); return caml_ba_create_unsafe(ba.kind,ba.layout,sub_dims,new_data)} function caml_marshal_data_size(s,ofs) {function get32(s,i) {return caml_bytes_unsafe_get(s,i) << 24 | caml_bytes_unsafe_get(s,i + 1) << 16 | caml_bytes_unsafe_get(s,i + 2) << 8 | caml_bytes_unsafe_get(s,i + 3)} if(get32(s,ofs) != (0x8495A6BE | 0)) caml_failwith("Marshal.data_size: bad object"); return get32(s,ofs + 4)} function caml_input_value(chanid) {var chan=caml_ml_channels[chanid],buf=caml_create_bytes(8); chan.file.read(chan.offset,buf,0,8); var len=caml_marshal_data_size(buf,0) + 20,buf=caml_create_bytes(len); chan.file.read(chan.offset,buf,0,len); var offset=[0],res=caml_input_value_from_bytes(buf,offset); chan.offset = chan.offset + offset[0]; return res} function caml_ba_kind(ba){return ba.kind} function caml_js_fun_call(f,a) {switch(a.length) {case 1:return f(); case 2:return f(a[1]); case 3:return f(a[1],a[2]); case 4:return f(a[1],a[2],a[3]); case 5:return f(a[1],a[2],a[3],a[4]); case 6:return f(a[1],a[2],a[3],a[4],a[5]); case 7:return f(a[1],a[2],a[3],a[4],a[5],a[6]); case 8:return f(a[1],a[2],a[3],a[4],a[5],a[6],a[7]) } return f.apply(null,caml_js_from_array(a))} function caml_gc_major_slice(work){return 0} function caml_js_pure_expr(f){return f()} function compare_digits_nat(nat1,ofs1,nat2,ofs2) {if(nat1.data[ofs1] > nat2.data[ofs2])return 1; if(nat1.data[ofs1] < nat2.data[ofs2])return - 1; return 0} function caml_ml_input(chanid,s,i,l) {var chan=caml_ml_channels[chanid],l2=chan.file.length() - chan.offset; if(l2 == 0 && chan.refill != null)l2 = caml_ml_refill_input(chan); if(l2 < l)l = l2; chan.file.read(chan.offset,s,i,l); chan.offset += l; return l} function caml_gr_wait_event(_evl) {caml_failwith ("caml_gr_wait_event not Implemented: use Graphics_js instead")} function caml_gr_sigio_handler(){return 0} function caml_hash_mix_bigstring(h,bs) {return caml_hash_mix_bytes_arr(h,bs.data)} function caml_record_backtrace(){return 0} function unix_gmtime(t) {var d=new Date(t * 1000), d_num=d.getTime(), januaryfirst=new Date(Date.UTC(d.getUTCFullYear(),0,1)).getTime(), doy=Math.floor((d_num - januaryfirst) / 86400000); return [0, d.getUTCSeconds(), d.getUTCMinutes(), d.getUTCHours(), d.getUTCDate(), d.getUTCMonth(), d.getUTCFullYear() - 1900, d.getUTCDay(), doy, false | 0]} function caml_sys_const_backend_type() {return [0,caml_string_of_jsbytes("js_of_ocaml")]} function caml_sys_get_config() {return [0,caml_string_of_jsbytes(os_type),32,0]} function unix_time(){return Math.floor(unix_gettimeofday())} function caml_ml_out_channels_list() {var l=0; for(var c=0;c < caml_ml_channels.length;c++) if (caml_ml_channels[c] && caml_ml_channels[c].opened && caml_ml_channels[c].out) l = [0,caml_ml_channels[c].fd,l]; return l} function caml_asinh_float(x){return Math.asinh(x)} function bigstring_of_array_buffer(ab) {var ta=new (globalThis.Uint8Array)(ab); return caml_ba_create_unsafe(12,0,[ta.length],ta)} function caml_mod(x,y){if(y == 0)caml_raise_zero_divide();return x % y} function caml_ba_init(){return 0} function re_string_match(re,s,pos) {if(pos < 0 || pos > caml_ml_string_length(s)) caml_invalid_argument("Str.string_match"); var res=re_match(re,s,pos,0); return res?res:[0]} function BigStringReader(bs,i){this.s = bs;this.i = i} BigStringReader.prototype = {read8u:function(){return caml_ba_get_1(this.s,this.i++)}, read8s:function(){return caml_ba_get_1(this.s,this.i++) << 24 >> 24}, read16u: function() {var s=this.s,i=this.i; this.i = i + 2; return caml_ba_get_1(s,i) << 8 | caml_ba_get_1(s,i + 1)}, read16s: function() {var s=this.s,i=this.i; this.i = i + 2; return caml_ba_get_1(s,i) << 24 >> 16 | caml_ba_get_1(s,i + 1)}, read32u: function() {var s=this.s,i=this.i; this.i = i + 4; return (caml_ba_get_1(s,i) << 24 | caml_ba_get_1(s,i + 1) << 16 | caml_ba_get_1(s,i + 2) << 8 | caml_ba_get_1(s,i + 3)) >>> 0}, read32s: function() {var s=this.s,i=this.i; this.i = i + 4; return caml_ba_get_1(s,i) << 24 | caml_ba_get_1(s,i + 1) << 16 | caml_ba_get_1(s,i + 2) << 8 | caml_ba_get_1(s,i + 3)}, readstr: function(len) {var i=this.i,arr=new Array(len); for(var j=0;j < len;j++)arr[j] = caml_ba_get_1(this.s,i + j); this.i = i + len; return caml_string_of_array(arr)}}; function caml_gr_dump_image(im) {var data=[0]; for(var i=0;i < im.height;i++) {data[i + 1] = [0]; for(var j=0;j < im.width;j++) {var o=i * (im.width * 4) + j * 4, r=im.data[o + 0], g=im.data[o + 1], b=im.data[o + 2]; data[i + 1][j + 1] = (r << 16) + (g << 8) + b}} return data} function caml_ba_get_generic(ba,i) {var ofs=ba.offset(caml_js_from_array(i));return ba.get(ofs)} function caml_get_exception_backtrace(){return 0} function caml_format_float(fmt,x) {function toFixed(x,dp) {if(Math.abs(x) < 1.0) return x.toFixed(dp); else {var e=parseInt(x.toString().split("+")[1]); if(e > 20) {e -= 20; x /= Math.pow(10,e); x += new Array(e + 1).join("0"); if(dp > 0)x = x + "." + new Array(dp + 1).join("0"); return x} else return x.toFixed(dp)}} var s,f=caml_parse_format(fmt),prec=f.prec < 0?6:f.prec; if(x < 0 || x == 0 && 1 / x == - Infinity){f.sign = - 1;x = - x} if(isNaN(x)) {s = "nan";f.filler = " "} else if(! isFinite(x)) {s = "inf";f.filler = " "} else switch(f.conv) {case "e": var s=x.toExponential(prec),i=s.length; if(s.charAt(i - 3) == "e") s = s.slice(0,i - 1) + "0" + s.slice(i - 1); break; case "f":s = toFixed(x,prec);break; case "g": prec = prec?prec:1; s = x.toExponential(prec - 1); var j=s.indexOf("e"),exp=+ s.slice(j + 1); if(exp < - 4 || x >= 1e21 || x.toFixed(0).length > prec) {var i=j - 1; while(s.charAt(i) == "0")i--; if(s.charAt(i) == ".")i--; s = s.slice(0,i + 1) + s.slice(j); i = s.length; if(s.charAt(i - 3) == "e") s = s.slice(0,i - 1) + "0" + s.slice(i - 1); break} else {var p=prec; if(exp < 0) {p -= exp + 1;s = x.toFixed(p)} else while(s = x.toFixed(p),s.length > prec + 1)p--; if(p) {var i=s.length - 1; while(s.charAt(i) == "0")i--; if(s.charAt(i) == ".")i--; s = s.slice(0,i + 1)}} break } return caml_finish_formatting(f,s)} function caml_mount_autoload(name,f) {var path=caml_make_path(name),name=caml_trailing_slash(path.join("/")); jsoo_mount_point.push({path:name,device:new MlFakeDevice(name,f)}); return 0} function caml_bigstring_blit_ba_to_ba(ba1,pos1,ba2,pos2,len) {if(12 != ba1.kind) caml_invalid_argument("caml_bigstring_blit_ba_to_ba: kind mismatch"); if(12 != ba2.kind) caml_invalid_argument("caml_bigstring_blit_ba_to_ba: kind mismatch"); if(len == 0)return 0; var ofs1=ba1.offset(pos1),ofs2=ba2.offset(pos2); if(ofs1 + len > ba1.data.length)caml_array_bound_error(); if(ofs2 + len > ba2.data.length)caml_array_bound_error(); var slice=ba1.data.subarray(ofs1,ofs1 + len); ba2.data.set(slice,pos2); return 0} var caml_blit_bigstring_to_bigstring=caml_bigstring_blit_ba_to_ba; function caml_string_lessthan(s1,s2){return caml_bytes_lessthan(s1,s2)} function caml_string_greaterthan(s1,s2) {return caml_string_lessthan(s2,s1)} function caml_div(x,y) {if(y == 0)caml_raise_zero_divide();return x / y | 0} function caml_ephe_get_data_copy(x) {return x[caml_ephe_data_offset] === undefined ?0 :[0,caml_obj_dup(x[caml_ephe_data_offset])]} function caml_memprof_start(rate,stack_size,tracker){return 0} function caml_sys_get_argv(a){return [0,caml_argv[1],caml_argv]} function caml_js_to_bool(x){return + x} function caml_gr_create_image(x,y) {var s=caml_gr_state_get();return s.context.createImageData(x,y)} var caml_ephe_get_key_copy=caml_weak_get_copy; function caml_lessthan(x,y){return + (caml_compare_val(x,y,false) < 0)} function caml_raw_backtrace_next_slot(){return 0} function caml_register_global(n,v,name_opt) {if(name_opt && globalThis.toplevelReloc) n = globalThis.toplevelReloc(name_opt); caml_global_data[n + 1] = v; if(name_opt)caml_global_data[name_opt] = v} function mult_nat(nat1,ofs1,len1,nat2,ofs2,len2,nat3,ofs3,len3) {var carry=0; for(var i=0;i < len3;i++) carry += mult_digit_nat(nat1,ofs1 + i,len1 - i,nat2,ofs2,len2,nat3,ofs3 + i); return carry} function square_nat(nat1,ofs1,len1,nat2,ofs2,len2) {var carry=0; carry += add_nat(nat1,ofs1,len1,nat1,ofs1,len1,0); carry += mult_nat(nat1,ofs1,len1,nat2,ofs2,len2,nat2,ofs2,len2); return carry} function caml_js_from_float(x){return x} function caml_floatarray_create(len) {if(len < 0)caml_array_bound_error(); var len=len + 1 | 0,b=new Array(len); b[0] = 254; for(var i=1;i < len;i++)b[i] = 0; return b} function caml_gc_stat(){return [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]} function caml_get_major_credit(n){return 0} function caml_sys_modify_argv(arg){caml_argv = arg;return 0} var caml_method_cache=[]; function caml_get_public_method(obj,tag,cacheid) {var meths=obj[1],ofs=caml_method_cache[cacheid]; if(ofs === undefined) for(var i=caml_method_cache.length;i < cacheid;i++) caml_method_cache[i] = 0; else if(meths[ofs] === tag)return meths[ofs - 1]; var li=3,hi=meths[1] * 2 + 1,mi; while(li < hi) {mi = li + hi >> 1 | 1;if(tag < meths[mi + 1])hi = mi - 2;else li = mi} caml_method_cache[cacheid] = li + 1; return tag == meths[li + 1]?meths[li]:0} function caml_js_get_console() {var c=globalThis.console?globalThis.console:{}, m= ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml", "trace", "group", "groupCollapsed", "groupEnd", "time", "timeEnd"]; function f(){} for(var i=0;i < m.length;i++)if(! c[m[i]])c[m[i]] = f; return c} function caml_sys_unsafe_getenv(name){return caml_sys_getenv(name)} function caml_ml_open_descriptor_in(fd) {var data=caml_global_data.fds[fd]; if(data.flags.wronly)caml_raise_sys_error("fd " + fd + " is writeonly"); var refill=null; if(fd == 0 && fs_node_supported()) {var fs=require("fs"); refill = function(){return caml_string_of_jsstring(fs.readFileSync(0,"utf8"))}} var channel= {file:data.file, offset:data.offset, fd:fd, opened:true, out:false, refill:refill}; caml_ml_channels[channel.fd] = channel; return channel.fd} function bigstring_of_typed_array(ba) {var ta= new (globalThis.Uint8Array) (ba.buffer,ba.byteOffset,ba.length * ba.BYTES_PER_ELEMENT); return caml_ba_create_unsafe(12,0,[ta.length],ta)} function caml_round_float(x){return Math.round(x)} function unix_stat(name) {var root=resolve_fs_device(name); if(! root.device.stat)caml_failwith("unix_stat: not implemented"); return root.device.stat(root.rest,true)} var unix_stat_64=unix_stat; function caml_ojs_new_arr(c,a) {switch(a.length) {case 0:return new c(); case 1:return new c(a[0]); case 2:return new c(a[0],a[1]); case 3:return new c(a[0],a[1],a[2]); case 4:return new c(a[0],a[1],a[2],a[3]); case 5:return new c(a[0],a[1],a[2],a[3],a[4]); case 6:return new c(a[0],a[1],a[2],a[3],a[4],a[5]); case 7:return new c(a[0],a[1],a[2],a[3],a[4],a[5],a[6]) } function F(){return c.apply(this,a)} F.prototype = c.prototype; return new F()} function complement_nat(nat,ofs,len) {for(var i=0;i < len;i++) nat.data[ofs + i] = (- 1 >>> 0) - (nat.data[ofs + i] >>> 0)} var caml_js_regexps={amp:/&/g,lt:/</g,quot:/\"/g,all:/[&<\"]/}; function caml_js_html_escape(s) {if(! caml_js_regexps.all.test(s))return s; return s.replace(caml_js_regexps.amp,"&").replace (caml_js_regexps.lt,"<").replace (caml_js_regexps.quot,""")} function caml_ba_dim_2(ba){return caml_ba_dim(ba,1)} function caml_js_wrap_meth_callback_arguments(f) {return function() {var len=arguments.length,args=new Array(len); for(var i=0;i < len;i++)args[i] = arguments[i]; return caml_call_gen(f,[this,args])}} function caml_sinh_float(x){return Math.sinh(x)} function caml_ldexp_float(x,exp) {exp |= 0; if(exp > 1023) {exp -= 1023; x *= Math.pow(2,1023); if(exp > 1023){exp -= 1023;x *= Math.pow(2,1023)}} if(exp < - 1023){exp += 1023;x *= Math.pow(2,- 1023)} x *= Math.pow(2,exp); return x} function caml_gr_state_set(ctx) {caml_gr_state = ctx;caml_gr_state_init();return 0} function caml_js_wrap_callback_strict(arity,f) {return function() {var n=arguments.length; if(n == arity && f.length == arity)return f.apply(null,arguments); var args=new Array(arity),len=Math.min(arguments.length,arity); for(var i=0;i < len;i++)args[i] = arguments[i]; return caml_call_gen(f,args)}} function caml_gc_minor_words(unit){return 0} function caml_ba_set_1(ba,i0,v){ba.set(ba.offset(i0),v);return 0} function caml_get_current_callstack(){return [0]} function land_digit_nat(nat1,ofs1,nat2,ofs2) {nat1.data[ofs1] &= nat2.data[ofs2];return 0} function caml_int64_mod(x,y){return x.mod(y)} function unix_readlink(name) {var root=resolve_fs_device(name); if(! root.device.readlink) caml_failwith("unix_readlink: not implemented"); return root.device.readlink(root.rest,true)} function caml_obj_set_tag(x,tag){x[0] = tag;return 0} function caml_int32_bswap(x) {return (x & 0x000000FF) << 24 | (x & 0x0000FF00) << 8 | (x & 0x00FF0000) >>> 8 | (x & 0xFF000000) >>> 24} function win_startup(){} function caml_ba_set_3(ba,i0,i1,i2,v) {ba.set(ba.offset([i0,i1,i2]),v);return 0} function caml_js_instanceof(o,c){return o instanceof c?1:0} function caml_get_major_bucket(n){return 0} var caml_blit_bigstring_to_string=caml_bigstring_blit_ba_to_bytes; function set_digit_nat_native(nat,ofs,digit) {nat.data[ofs] = digit;return 0} function nth_digit_nat_native(nat,ofs){return nat.data[ofs]} function caml_string_set64(s,i,i64){return caml_bytes_set64(s,i,i64)} function caml_gr_state_create(canvas,w,h) {var context=canvas.getContext("2d"); return {context:context, canvas:canvas, x:0, y:0, width:w, height:h, line_width:1, font:caml_string_of_jsbytes("fixed"), text_size:26, color:0x000000, title:caml_string_of_jsbytes("")}} function caml_js_wrap_callback(f) {return function() {var len=arguments.length; if(len > 0) {var args=new Array(len); for(var i=0;i < len;i++)args[i] = arguments[i]; return caml_call_gen(f,args)} else return caml_call_gen(f,[undefined])}} function caml_gr_draw_arc(x,y,rx,ry,a1,a2) {var s=caml_gr_state_get(); s.context.beginPath(); caml_gr_arc_aux(s.context,x,s.height - y,rx,ry,a1,a2); s.context.stroke(); return 0} function caml_ba_map_file(vfd,kind,layout,shared,dims,pos) {caml_failwith("caml_ba_map_file not implemented")} function caml_ba_map_file_bytecode(argv,argn) {return caml_ba_map_file(argv[0],argv[1],argv[2],argv[3],argv[4],argv[5])} function unix_symlink(to_dir,src,dst) {var src_root=resolve_fs_device(src),dst_root=resolve_fs_device(dst); if(src_root.device != dst_root.device) caml_failwith("unix_symlink: cannot symlink between two filesystems"); if(! src_root.device.symlink) caml_failwith("unix_symlink: not implemented"); return src_root.device.symlink(to_dir,src_root.rest,dst_root.rest,true)} function caml_ba_create_from(data1,data2,jstyp,kind,layout,dims) {if(data2 || caml_ba_get_size_per_element(kind) == 2) caml_invalid_argument ("caml_ba_create_from: use return caml_ba_create_unsafe"); return caml_ba_create_unsafe(kind,layout,dims,data1)} function caml_tanh_float(x){return Math.tanh(x)} function caml_gr_draw_str(str) {var s=caml_gr_state_get(),m=s.context.measureText(str),dx=m.width; s.context.fillText(str,s.x,s.height - s.y); s.x += dx | 0; return 0} function caml_gr_draw_string(str) {caml_gr_draw_str(caml_jsstring_of_string(str));return 0} function caml_gr_draw_char(c) {caml_gr_draw_str(String.fromCharCode(c));return 0} function caml_unmount(name) {var path=caml_make_path(name), name=caml_trailing_slash(path.join("/")), idx=- 1; for(var i=0;i < jsoo_mount_point.length;i++) if(jsoo_mount_point[i].path == name)idx = i; if(idx > - 1)jsoo_mount_point.splice(idx,1); return 0} function caml_input_value_from_string(s,ofs) {var reader=new MlStringReader(s,typeof ofs == "number"?ofs:ofs[0]); return caml_input_value_from_reader(reader,ofs)} function caml_ml_pos_in_64(chanid) {return caml_int64_of_float(caml_ml_channels[chanid].offset)} function caml_gr_draw_image(im,x,y) {var s=caml_gr_state_get(); if(! im.image) {var canvas=document.createElement("canvas"); canvas.width = s.width; canvas.height = s.height; canvas.getContext("2d").putImageData(im,0,0); var image=new (globalThis.Image)(); image.onload = function() {s.context.drawImage(image,x,s.height - im.height - y); im.image = image}; image.src = canvas.toDataURL("image/png")} else s.context.drawImage(im.image,x,s.height - im.height - y); return 0} function caml_register_channel_for_spacetime(_channel){return 0} function caml_string_set(s,i,c) {if(i >>> 0 >= s.l)caml_string_bound_error(); return caml_string_unsafe_set(s,i,c)} function caml_sys_rmdir(name) {var root=resolve_fs_device(name);root.device.rmdir(root.rest);return 0} function caml_ml_pos_out(chanid) {caml_ml_flush(chanid);return caml_ml_channels[chanid].offset} function caml_spacetime_enabled(_unit){return 0} function caml_bytes_notequal(s1,s2){return 1 - caml_bytes_equal(s1,s2)} function caml_runtime_parameters(_unit){return caml_string_of_jsbytes("")} function caml_js_object(a) {var o={}; for(var i=1;i < a.length;i++) {var p=a[i];o[caml_jsstring_of_string(p[1])] = p[2]} return o} function caml_ba_create(kind,layout,dims_ml) {var dims=caml_js_from_array(dims_ml), data=caml_ba_create_buffer(kind,caml_ba_get_size(dims)); return caml_ba_create_unsafe(kind,layout,dims,data)} function caml_weak_blit(a1,i1,a2,i2,len) {caml_array_blit (a1,caml_ephe_key_offset + i1 - 1,a2,caml_ephe_key_offset + i2 - 1,len); return 0} function caml_gr_remember_mode() {caml_failwith("caml_gr_remember_mode not Implemented")} function caml_fma_float(x,y,z) {var SPLIT=Math.pow(2,27) + 1, MIN_VALUE=Math.pow(2,- 1022), EPSILON=Math.pow(2,- 52), C=416, A=Math.pow(2,+ C), B=Math.pow(2,- C); function multiply(a,b) {var at=SPLIT * a, ahi=at - (at - a), alo=a - ahi, bt=SPLIT * b, bhi=bt - (bt - b), blo=b - bhi, p=a * b, e=ahi * bhi - p + ahi * blo + alo * bhi + alo * blo; return {p:p,e:e}} function add(a,b) {var s=a + b,v=s - a,e=a - (s - v) + (b - v);return {s:s,e:e}} function adjust(x,y) {return x !== 0 && y !== 0 && SPLIT * x - (SPLIT * x - x) === x ?x * (1 + (x < 0?- 1:+ 1) * (y < 0?- 1:+ 1) * EPSILON) :x} if (x === 0 || x !== x || x === + (1 / 0) || x === - (1 / 0) || y === 0 || y !== y || y === + (1 / 0) || y === - (1 / 0)) return x * y + z; if(z === 0)return x * y; if(z !== z || z === + (1 / 0) || z === - (1 / 0))return z; var scale=1; while(Math.abs(x) > A){scale *= A;x *= B} while(Math.abs(y) > A){scale *= A;y *= B} if(scale === 1 / 0)return x * y * scale; while(Math.abs(x) < B){scale *= B;x *= A} while(Math.abs(y) < B){scale *= B;y *= A} if(scale === 0)return z; var xs=x,ys=y,zs=z / scale; if(Math.abs(zs) > Math.abs(xs * ys) * 4 / EPSILON)return z; if(Math.abs(zs) < Math.abs(xs * ys) * EPSILON / 4 * EPSILON / 4) zs = (z < 0?- 1:+ 1) * MIN_VALUE; var xy=multiply(xs,ys), s=add(xy.p,zs), u=add(xy.e,s.e), i=add(s.s,u.s), f=i.s + adjust(i.e,u.e); if(f === 0)return f; var fs=f * scale; if(Math.abs(fs) > MIN_VALUE)return fs; return fs + adjust(f - fs / scale,i.e) * scale} function caml_bswap16(x){return (x & 0x00FF) << 8 | (x & 0xFF00) >> 8} function caml_ml_set_binary_mode(chanid,mode) {var chan=caml_ml_channels[chanid],data=caml_global_data.fds[chan.fd]; data.flags.text = ! mode; data.flags.binary = mode; return 0} function caml_final_register(){return 0} function caml_gr_draw_rect(x,y,w,h) {var s=caml_gr_state_get(); s.context.strokeRect(x,s.height - y,w,- h); return 0} function caml_string_get16(s,i) {if(i >>> 0 >= caml_ml_string_length(s) - 1)caml_string_bound_error(); var b1=caml_string_unsafe_get(s,i),b2=caml_string_unsafe_get(s,i + 1); return b2 << 8 | b1} function caml_ephe_unset_data(x,data) {x[caml_ephe_data_offset] = undefined;return 0} function caml_output_value(chanid,v,flags) {var s=caml_output_value_to_string(v,flags); caml_ml_output(chanid,s,0,caml_ml_string_length(s)); return 0} function caml_ba_get_3(ba,i0,i1,i2){return ba.get(ba.offset([i0,i1,i2]))} var caml_ephe_blit_key=caml_weak_blit, caml_initial_time=new Date().getTime() * 0.001; function caml_sys_time() {var now=new Date().getTime();return now * 0.001 - caml_initial_time} function caml_sys_time_include_children(b){return caml_sys_time()} function caml_check_bound(array,index) {if(index >>> 0 >= array.length - 1)caml_array_bound_error(); return array} function unix_getpwuid(unit){caml_raise_not_found()} function caml_hash_mix_string(h,v) {return caml_hash_mix_jsbytes(h,caml_jsbytes_of_string(v))} function caml_hash(count,limit,seed,obj) {var queue,rd,wr,sz,num,h,v,i,len; sz = limit; if(sz < 0 || sz > 256)sz = 256; num = count; h = seed; queue = [obj]; rd = 0; wr = 1; while(rd < wr && num > 0) {v = queue[rd++]; if(v && v.caml_custom) {if (caml_custom_ops[v.caml_custom] && caml_custom_ops[v.caml_custom].hash) {var hh=caml_custom_ops[v.caml_custom].hash(v); h = caml_hash_mix_int(h,hh); num--}} else if(v instanceof Array && v[0] === (v[0] | 0)) switch(v[0]) {case 248:h = caml_hash_mix_int(h,v[2]);num--;break; case 250:queue[--rd] = v[1];break; default: var tag=v.length - 1 << 10 | v[0]; h = caml_hash_mix_int(h,tag); for(i = 1,len = v.length;i < len;i++) {if(wr >= sz)break;queue[wr++] = v[i]} break} else if(caml_is_ml_bytes(v)) {h = caml_hash_mix_bytes(h,v);num--} else if(caml_is_ml_string(v)) {h = caml_hash_mix_string(h,v);num--} else if(typeof v === "string") {h = caml_hash_mix_jsbytes(h,v);num--} else if(v === (v | 0)) {h = caml_hash_mix_int(h,v + v + 1);num--} else if(v === + v){h = caml_hash_mix_float(h,v);num--}} h = caml_hash_mix_final(h); return h & 0x3FFFFFFF} function caml_obj_tag(x) {if(x instanceof Array && x[0] == x[0] >>> 0) return x[0]; else if(caml_is_ml_bytes(x)) return 252; else if(caml_is_ml_string(x)) return 252; else if(x instanceof Function || typeof x == "function") return 247; else if(x && x.caml_custom)return 255;else return 1000} function caml_ba_to_typed_array(ba){return ba.data} function caml_bytes_get32(s,i) {if(i >>> 0 >= s.l - 3)caml_bytes_bound_error(); var b1=caml_bytes_unsafe_get(s,i), b2=caml_bytes_unsafe_get(s,i + 1), b3=caml_bytes_unsafe_get(s,i + 2), b4=caml_bytes_unsafe_get(s,i + 3); return b4 << 24 | b3 << 16 | b2 << 8 | b1} function caml_frexp_float(x) {if(x == 0 || ! isFinite(x))return [0,x,0]; var neg=x < 0; if(neg)x = - x; var exp=Math.max(- 1023,jsoo_floor_log2(x) + 1); x *= Math.pow(2,- exp); while(x < 0.5){x *= 2;exp--} while(x >= 1){x *= 0.5;exp++} if(neg)x = - x; return [0,x,exp]} function caml_string_get64(s,i) {if(i >>> 0 >= caml_ml_string_length(s) - 7)caml_string_bound_error(); var a=new Array(8); for(var j=0;j < 8;j++)a[7 - j] = caml_string_unsafe_get(s,i + j); return caml_int64_of_bytes(a)} function caml_js_error_option_of_exception(exn) {if(exn.js_error)return [0,exn.js_error];return 0} function caml_ml_pos_out_64(chanid) {caml_ml_flush(chanid); return caml_int64_of_float(caml_ml_channels[chanid].offset)} function caml_gr_close_subwindow(a) {caml_failwith("caml_gr_close_subwindow not Implemented")} function caml_floatarray_blit(a1,i1,a2,i2,len) {if(i2 <= i1) for(var j=1;j <= len;j++)a2[i2 + j] = a1[i1 + j]; else for(var j=len;j >= 1;j--)a2[i2 + j] = a1[i1 + j]; return 0} function caml_get_minor_free(unit){return 0} function caml_set_static_env(k,v) {if(! globalThis.jsoo_static_env)globalThis.jsoo_static_env = {}; globalThis.jsoo_static_env[k] = v; return 0} function caml_ba_change_layout(ba,layout) {if(ba.layout == layout)return ba; var new_dims=[]; for(var i=0;i < ba.dims.length;i++) new_dims[i] = ba.dims[ba.dims.length - i - 1]; return caml_ba_create_unsafe(ba.kind,layout,new_dims,ba.data)} function caml_js_new(c,a) {switch(a.length) {case 1:return new c(); case 2:return new c(a[1]); case 3:return new c(a[1],a[2]); case 4:return new c(a[1],a[2],a[3]); case 5:return new c(a[1],a[2],a[3],a[4]); case 6:return new c(a[1],a[2],a[3],a[4],a[5]); case 7:return new c(a[1],a[2],a[3],a[4],a[5],a[6]); case 8:return new c(a[1],a[2],a[3],a[4],a[5],a[6],a[7]) } function F(){return c.apply(this,caml_js_from_array(a))} F.prototype = c.prototype; return new F()} function unix_mkdir(name,perm) {var root=resolve_fs_device(name); if(! root.device.mkdir)caml_failwith("unix_mkdir: not implemented"); return root.device.mkdir(root.rest,perm,true)} function caml_gr_current_y(){var s=caml_gr_state_get();return s.y} function caml_format_int(fmt,i) {if(caml_jsbytes_of_string(fmt) == "%d") return caml_string_of_jsbytes("" + i); var f=caml_parse_format(fmt); if(i < 0)if(f.signedconv){f.sign = - 1;i = - i}else i >>>= 0; var s=i.toString(f.base); if(f.prec >= 0) {f.filler = " "; var n=f.prec - s.length; if(n > 0)s = caml_str_repeat(n,"0") + s} return caml_finish_formatting(f,s)} function caml_obj_truncate(x,s) {if(s <= 0 || s + 1 > x.length)caml_invalid_argument("Obj.truncate"); if(x.length != s + 1)x.length = s + 1; return 0} function caml_js_to_string(s){return caml_string_of_jsstring(s)} function is_digit_odd(nat,ofs){if(nat.data[ofs] & 1)return 1;return 0} function caml_runtime_variant(_unit){return caml_string_of_jsbytes("")} function caml_ml_open_descriptor_out(fd) {var data=caml_global_data.fds[fd]; if(data.flags.rdonly)caml_raise_sys_error("fd " + fd + " is readonly"); var channel= {file:data.file, offset:data.offset, fd:fd, opened:true, out:true, buffer:""}; caml_ml_channels[channel.fd] = channel; return channel.fd} function caml_array_concat(l) {var a=[0]; while(l !== 0) {var b=l[1];for(var i=1;i < b.length;i++)a.push(b[i]);l = l[2]} return a} function caml_gr_open_graph(info) {var g=globalThis,info=caml_jsstring_of_string(info); function get(name) {var res=info.match("(^|,) *" + name + " *= *([a-zA-Z0-9_]+) *(,|$)"); if(res)return res[2]} var specs=[]; if(! (info == ""))specs.push(info); var target=get("target"); if(! target)target = ""; var status=get("status"); if(! status)specs.push("status=1"); var w=get("width"); w = w?parseInt(w):200; specs.push("width=" + w); var h=get("height"); h = h?parseInt(h):200; specs.push("height=" + h); var win=g.open("about:blank",target,specs.join(",")); if(! win)caml_failwith("Graphics.open_graph: cannot open the window"); var doc=win.document,canvas=doc.createElement("canvas"); canvas.width = w; canvas.height = h; var ctx=caml_gr_state_create(canvas,w,h); ctx.set_title = function(title){doc.title = title}; caml_gr_state_set(ctx); var body=doc.body; body.style.margin = "0px"; body.appendChild(canvas); return 0} function caml_ephe_set_data(x,data) {x[caml_ephe_data_offset] = data;return 0} function caml_make_float_vect(len) {if(len < 0)caml_array_bound_error(); var len=len + 1 | 0,b=new Array(len); b[0] = 254; for(var i=1;i < len;i++)b[i] = 0; return b} function caml_cbrt_float(x){return Math.cbrt(x)} function caml_memprof_stop(unit){return 0} function caml_eventlog_pause(unit){return 0} function caml_greaterequal(x,y) {return + (caml_compare_val(x,y,false) >= 0)} function caml_get_exception_raw_backtrace(){return [0]} function caml_log1p_float(x){return Math.log1p(x)} function caml_int64_or(x,y){return x.or(y)} function caml_lazy_make_forward(v){return [250,v]} function lor_digit_nat(nat1,ofs1,nat2,ofs2) {nat1.data[ofs1] |= nat2.data[ofs2];return 0} function caml_gr_blit_image(im,x,y) {var s=caml_gr_state_get(), im2= s.context.getImageData(x,s.height - im.height - y,im.width,im.height); for(var i=0;i < im2.data.length;i += 4) {im.data[i] = im2.data[i]; im.data[i + 1] = im2.data[i + 1]; im.data[i + 2] = im2.data[i + 2]; im.data[i + 3] = im2.data[i + 3]} return 0} function caml_gr_window_id(a) {caml_failwith("caml_gr_window_id not Implemented")} function caml_js_on_ie() {var ua=globalThis.navigator?globalThis.navigator.userAgent:""; return ua.indexOf("MSIE") != - 1 && ua.indexOf("Opera") != 0} function caml_int64_shift_right(x,s){return x.shift_right(s)} function caml_ba_layout(ba){return ba.layout} function caml_convert_raw_backtrace(){return [0]} function caml_array_set(array,index,newval) {if(index < 0 || index >= array.length - 1)caml_array_bound_error(); array[index + 1] = newval; return 0} function caml_bytes_greaterequal(s1,s2) {return caml_bytes_lessequal(s2,s1)} function set_digit_nat(nat,ofs,digit){nat.data[ofs] = digit;return 0} function caml_gr_doc_of_state(state) {if(state.canvas.ownerDocument)return state.canvas.ownerDocument} function caml_ml_output_int(chanid,i) {var arr=[i >> 24 & 0xFF,i >> 16 & 0xFF,i >> 8 & 0xFF,i & 0xFF], s=caml_string_of_array(arr); caml_ml_output(chanid,s,0,4); return 0} function caml_obj_with_tag(tag,x) {var l=x.length,a=new Array(l); a[0] = tag; for(var i=1;i < l;i++)a[i] = x[i]; return a} function caml_ml_channel_size(chanid) {var chan=caml_ml_channels[chanid];return chan.file.length()} function caml_raw_backtrace_slot() {caml_invalid_argument ("Printexc.get_raw_backtrace_slot: index out of bounds")} function caml_hexstring_of_float(x,prec,style) {if(! isFinite(x)) {if(isNaN(x))return caml_string_of_jsstring("nan"); return caml_string_of_jsstring(x > 0?"infinity":"-infinity")} var sign=x == 0 && 1 / x == - Infinity?1:x >= 0?0:1; if(sign)x = - x; var exp=0; if(x == 0) ; else if(x < 1) while(x < 1 && exp > - 1022){x *= 2;exp--} else while(x >= 2){x /= 2;exp++} var exp_sign=exp < 0?"":"+",sign_str=""; if(sign) sign_str = "-"; else switch(style) {case 43:sign_str = "+";break; case 32:sign_str = " ";break; default:break} if(prec >= 0 && prec < 13) {var cst=Math.pow(2,prec * 4);x = Math.round(x * cst) / cst} var x_str=x.toString(16); if(prec >= 0) {var idx=x_str.indexOf("."); if(idx < 0) x_str += "." + caml_str_repeat(prec,"0"); else {var size=idx + 1 + prec; if(x_str.length < size) x_str += caml_str_repeat(size - x_str.length,"0"); else x_str = x_str.substr(0,size)}} return caml_string_of_jsstring (sign_str + "0x" + x_str + "p" + exp_sign + exp.toString(10))} function caml_js_wrap_meth_callback_strict(arity,f) {return function() {var args=new Array(arity + 1),len=Math.min(arguments.length,arity); args[0] = this; for(var i=0;i < len;i++)args[i + 1] = arguments[i]; return caml_call_gen(f,args)}} function caml_backtrace_status(){return 0} function caml_sys_argv(a){return caml_argv} function caml_install_signal_handler(){return 0} function caml_ba_fill(ba,v){ba.fill(v);return 0} function caml_modf_float(x) {if(isFinite(x)) {var neg=1 / x < 0; x = Math.abs(x); var i=Math.floor(x),f=x - i; if(neg){i = - i;f = - f} return [0,f,i]} if(isNaN(x))return [0,NaN,NaN]; return [0,1 / x,x]} function caml_gc_get(){return [0,0,0,0,0,0,0,0,0]} function caml_float_compare(x,y) {if(x === y)return 0; if(x < y)return - 1; if(x > y)return 1; if(x === x)return 1; if(y === y)return - 1; return 0} function caml_string_set32(s,i,i32){return caml_bytes_set32(s,i,i32)} function caml_parse_engine(tables,env,cmd,arg) {var ERRCODE=256, loop=6, testshift=7, shift=8, shift_recover=9, reduce=10, READ_TOKEN=0, RAISE_PARSE_ERROR=1, GROW_STACKS_1=2, GROW_STACKS_2=3, COMPUTE_SEMANTIC_ACTION=4, CALL_ERROR_FUNCTION=5, env_s_stack=1, env_v_stack=2, env_symb_start_stack=3, env_symb_end_stack=4, env_stacksize=5, env_stackbase=6, env_curr_char=7, env_lval=8, env_symb_start=9, env_symb_end=10, env_asp=11, env_rule_len=12, env_rule_number=13, env_sp=14, env_state=15, env_errflag=16, tbl_transl_const=2, tbl_transl_block=3, tbl_lhs=4, tbl_len=5, tbl_defred=6, tbl_dgoto=7, tbl_sindex=8, tbl_rindex=9, tbl_gindex=10, tbl_tablesize=11, tbl_table=12, tbl_check=13; if(! tables.dgoto) {tables.defred = caml_lex_array(tables[tbl_defred]); tables.sindex = caml_lex_array(tables[tbl_sindex]); tables.check = caml_lex_array(tables[tbl_check]); tables.rindex = caml_lex_array(tables[tbl_rindex]); tables.table = caml_lex_array(tables[tbl_table]); tables.len = caml_lex_array(tables[tbl_len]); tables.lhs = caml_lex_array(tables[tbl_lhs]); tables.gindex = caml_lex_array(tables[tbl_gindex]); tables.dgoto = caml_lex_array(tables[tbl_dgoto])} var res=0, n, n1, n2, state1, sp=env[env_sp], state=env[env_state], errflag=env[env_errflag]; exit: for(;;) switch(cmd) {case 0:state = 0;errflag = 0; case 6: n = tables.defred[state]; if(n != 0){cmd = reduce;break} if(env[env_curr_char] >= 0){cmd = testshift;break} res = READ_TOKEN; break exit; case 1: if(arg instanceof Array) {env[env_curr_char] = tables[tbl_transl_block][arg[0] + 1]; env[env_lval] = arg[1]} else {env[env_curr_char] = tables[tbl_transl_const][arg + 1]; env[env_lval] = 0} case 7: n1 = tables.sindex[state]; n2 = n1 + env[env_curr_char]; if (n1 != 0 && n2 >= 0 && n2 <= tables[tbl_tablesize] && tables.check[n2] == env[env_curr_char]) {cmd = shift;break} n1 = tables.rindex[state]; n2 = n1 + env[env_curr_char]; if (n1 != 0 && n2 >= 0 && n2 <= tables[tbl_tablesize] && tables.check[n2] == env[env_curr_char]) {n = tables.table[n2];cmd = reduce;break} if(errflag <= 0){res = CALL_ERROR_FUNCTION;break exit} case 5: if(errflag < 3) {errflag = 3; for(;;) {state1 = env[env_s_stack][sp + 1]; n1 = tables.sindex[state1]; n2 = n1 + ERRCODE; if (n1 != 0 && n2 >= 0 && n2 <= tables[tbl_tablesize] && tables.check[n2] == ERRCODE) {cmd = shift_recover;break} else {if(sp <= env[env_stackbase])return RAISE_PARSE_ERROR;sp--}}} else {if(env[env_curr_char] == 0)return RAISE_PARSE_ERROR; env[env_curr_char] = - 1; cmd = loop; break} case 8:env[env_curr_char] = - 1;if(errflag > 0)errflag--; case 9: state = tables.table[n2]; sp++; if(sp >= env[env_stacksize]){res = GROW_STACKS_1;break exit} case 2: env[env_s_stack][sp + 1] = state; env[env_v_stack][sp + 1] = env[env_lval]; env[env_symb_start_stack][sp + 1] = env[env_symb_start]; env[env_symb_end_stack][sp + 1] = env[env_symb_end]; cmd = loop; break; case 10: var m=tables.len[n]; env[env_asp] = sp; env[env_rule_number] = n; env[env_rule_len] = m; sp = sp - m + 1; m = tables.lhs[n]; state1 = env[env_s_stack][sp]; n1 = tables.gindex[m]; n2 = n1 + state1; if (n1 != 0 && n2 >= 0 && n2 <= tables[tbl_tablesize] && tables.check[n2] == state1) state = tables.table[n2]; else state = tables.dgoto[m]; if(sp >= env[env_stacksize]){res = GROW_STACKS_2;break exit} case 3:res = COMPUTE_SEMANTIC_ACTION;break exit; case 4: env[env_s_stack][sp + 1] = state; env[env_v_stack][sp + 1] = arg; var asp=env[env_asp]; env[env_symb_end_stack][sp + 1] = env[env_symb_end_stack][asp + 1]; if(sp > asp) env[env_symb_start_stack][sp + 1] = env[env_symb_end_stack][asp + 1]; cmd = loop; break; default:return RAISE_PARSE_ERROR} env[env_sp] = sp; env[env_state] = state; env[env_errflag] = errflag; return res} function caml_update_dummy(x,y) {if(typeof y === "function"){x.fun = y;return 0} if(y.fun){x.fun = y.fun;return 0} var i=y.length; while(i--)x[i] = y[i]; return 0} function caml_array_fill(array,ofs,len,v) {for(var i=0;i < len;i++)array[ofs + i + 1] = v;return 0} function caml_sys_mkdir(name,perm) {var root=resolve_fs_device(name); root.device.mkdir(root.rest,perm); return 0} function caml_string_notequal(s1,s2){return 1 - caml_string_equal(s1,s2)} function caml_bytes_greaterthan(s1,s2){return caml_bytes_lessthan(s2,s1)} function caml_gr_make_image(arr) {var s=caml_gr_state_get(), h=arr.length - 1, w=arr[1].length - 1, im=s.context.createImageData(w,h); for(var i=0;i < h;i++) for(var j=0;j < w;j++) {var c=arr[i + 1][j + 1],o=i * (w * 4) + j * 4; if(c == - 1) {im.data[o + 0] = 0; im.data[o + 1] = 0; im.data[o + 2] = 0; im.data[o + 3] = 0} else {im.data[o + 0] = c >> 16 & 0xff; im.data[o + 1] = c >> 8 & 0xff; im.data[o + 2] = c >> 0 & 0Xff; im.data[o + 3] = 0xff}} return im} function caml_ml_set_channel_output(chanid,f) {var chan=caml_ml_channels[chanid]; caml_global_data.fds[chan.fd].output = f; return 0} function caml_read_file_content(name) {var name=typeof name == "string"?caml_string_of_jsbytes(name):name, root=resolve_fs_device(name); if(root.device.exists(root.rest)) {var file=root.device.open(root.rest,{rdonly:1}), len=file.length(), buf=caml_create_bytes(len); file.read(0,buf,0,len); return caml_string_of_bytes(buf)} caml_raise_no_such_file(caml_jsbytes_of_string(name))} function caml_js_to_float(x){return x} function caml_setup_uncaught_exception_handler() {var g=globalThis; if(g.process && g.process.on) g.process.on ("uncaughtException", function(err,origin) {caml_fatal_uncaught_exception(err);g.process.exit(2)}); else if(g.addEventListener) g.addEventListener ("error", function(event) {if(event.error)caml_fatal_uncaught_exception(event.error)})} caml_setup_uncaught_exception_handler(); globalThis.jsoo_runtime = {caml_ephe_key_offset:caml_ephe_key_offset, caml_ephe_data_offset:caml_ephe_data_offset, caml_weak_create:caml_weak_create, caml_weak_set:caml_weak_set, caml_weak_get:caml_weak_get, caml_weak_get_copy:caml_weak_get_copy, caml_weak_check:caml_weak_check, caml_weak_blit:caml_weak_blit, caml_ephe_create:caml_ephe_create, caml_ephe_blit_key:caml_ephe_blit_key, caml_ephe_get_key:caml_ephe_get_key, caml_ephe_get_key_copy:caml_ephe_get_key_copy, caml_ephe_check_key:caml_ephe_check_key, caml_ephe_set_key:caml_ephe_set_key, caml_ephe_unset_key:caml_ephe_unset_key, caml_ephe_blit_data:caml_ephe_blit_data, caml_ephe_get_data:caml_ephe_get_data, caml_ephe_get_data_copy:caml_ephe_get_data_copy, caml_ephe_set_data:caml_ephe_set_data, caml_ephe_unset_data:caml_ephe_unset_data, caml_ephe_check_data:caml_ephe_check_data, unix_gettimeofday:unix_gettimeofday, unix_time:unix_time, unix_gmtime:unix_gmtime, unix_localtime:unix_localtime, unix_mktime:unix_mktime, win_startup:win_startup, win_cleanup:win_cleanup, win_handle_fd:win_handle_fd, unix_isatty:unix_isatty, make_unix_err_args:make_unix_err_args, unix_stat:unix_stat, unix_stat_64:unix_stat_64, unix_lstat:unix_lstat, unix_lstat_64:unix_lstat_64, unix_mkdir:unix_mkdir, unix_rmdir:unix_rmdir, unix_symlink:unix_symlink, unix_readlink:unix_readlink, unix_unlink:unix_unlink, unix_getuid:unix_getuid, unix_getpwuid:unix_getpwuid, unix_has_symlink:unix_has_symlink, re_match:re_match, re_search_forward:re_search_forward, re_search_backward:re_search_backward, re_string_match:re_string_match, re_partial_match:re_partial_match, re_replacement_text:re_replacement_text, caml_raise_sys_error:caml_raise_sys_error, caml_sys_exit:caml_sys_exit, caml_is_special_exception:caml_is_special_exception, caml_format_exception:caml_format_exception, caml_fatal_uncaught_exception:caml_fatal_uncaught_exception, caml_set_static_env:caml_set_static_env, caml_sys_getenv:caml_sys_getenv, caml_sys_unsafe_getenv:caml_sys_unsafe_getenv, caml_argv:caml_argv, caml_executable_name:caml_executable_name, caml_sys_get_argv:caml_sys_get_argv, caml_sys_argv:caml_sys_argv, caml_sys_modify_argv:caml_sys_modify_argv, caml_sys_executable_name:caml_sys_executable_name, caml_sys_system_command:caml_sys_system_command, caml_sys_time:caml_sys_time, caml_sys_time_include_children:caml_sys_time_include_children, caml_sys_random_seed:caml_sys_random_seed, caml_sys_const_big_endian:caml_sys_const_big_endian, caml_sys_const_word_size:caml_sys_const_word_size, caml_sys_const_int_size:caml_sys_const_int_size, caml_sys_const_max_wosize:caml_sys_const_max_wosize, caml_sys_const_ostype_unix:caml_sys_const_ostype_unix, caml_sys_const_ostype_win32:caml_sys_const_ostype_win32, caml_sys_const_ostype_cygwin:caml_sys_const_ostype_cygwin, caml_sys_const_backend_type:caml_sys_const_backend_type, os_type:os_type, caml_sys_get_config:caml_sys_get_config, caml_sys_isatty:caml_sys_isatty, caml_runtime_variant:caml_runtime_variant, caml_runtime_parameters:caml_runtime_parameters, caml_install_signal_handler:caml_install_signal_handler, unix_inet_addr_of_string:unix_inet_addr_of_string, caml_runtime_warnings:caml_runtime_warnings, caml_ml_enable_runtime_warnings:caml_ml_enable_runtime_warnings, caml_ml_runtime_warnings_enabled:caml_ml_runtime_warnings_enabled, caml_spacetime_enabled:caml_spacetime_enabled, caml_sys_const_naked_pointers_checked: caml_sys_const_naked_pointers_checked, caml_register_channel_for_spacetime:caml_register_channel_for_spacetime, caml_spacetime_only_works_for_native_code: caml_spacetime_only_works_for_native_code, caml_call_gen:caml_call_gen, caml_named_values:caml_named_values, caml_register_named_value:caml_register_named_value, caml_named_value:caml_named_value, caml_global_data:caml_global_data, caml_register_global:caml_register_global, caml_get_global_data:caml_get_global_data, caml_is_printable:caml_is_printable, caml_parse_engine:caml_parse_engine, caml_set_parser_trace:caml_set_parser_trace, caml_update_dummy:caml_update_dummy, caml_obj_is_block:caml_obj_is_block, caml_obj_tag:caml_obj_tag, caml_obj_set_tag:caml_obj_set_tag, caml_obj_block:caml_obj_block, caml_obj_with_tag:caml_obj_with_tag, caml_obj_dup:caml_obj_dup, caml_obj_truncate:caml_obj_truncate, caml_obj_make_forward:caml_obj_make_forward, caml_lazy_make_forward:caml_lazy_make_forward, caml_get_public_method:caml_get_public_method, caml_oo_last_id:caml_oo_last_id, caml_set_oo_id:caml_set_oo_id, caml_fresh_oo_id:caml_fresh_oo_id, caml_obj_raw_field:caml_obj_raw_field, caml_obj_set_raw_field:caml_obj_set_raw_field, caml_obj_reachable_words:caml_obj_reachable_words, caml_obj_add_offset:caml_obj_add_offset, initialize_nat:initialize_nat, MlNat:MlNat, caml_hash_nat:caml_hash_nat, nat_of_array:nat_of_array, create_nat:create_nat, set_to_zero_nat:set_to_zero_nat, blit_nat:blit_nat, set_digit_nat:set_digit_nat, nth_digit_nat:nth_digit_nat, set_digit_nat_native:set_digit_nat_native, nth_digit_nat_native:nth_digit_nat_native, num_digits_nat:num_digits_nat, num_leading_zero_bits_in_digit:num_leading_zero_bits_in_digit, is_digit_int:is_digit_int, is_digit_zero:is_digit_zero, is_digit_odd:is_digit_odd, incr_nat:incr_nat, add_nat:add_nat, complement_nat:complement_nat, decr_nat:decr_nat, sub_nat:sub_nat, mult_digit_nat:mult_digit_nat, mult_nat:mult_nat, square_nat:square_nat, shift_left_nat:shift_left_nat, div_helper:div_helper, div_digit_nat:div_digit_nat, div_nat:div_nat, shift_right_nat:shift_right_nat, compare_digits_nat:compare_digits_nat, compare_nat:compare_nat, compare_nat_real:compare_nat_real, land_digit_nat:land_digit_nat, lor_digit_nat:lor_digit_nat, lxor_digit_nat:lxor_digit_nat, serialize_nat:serialize_nat, deserialize_nat:deserialize_nat, caml_str_repeat:caml_str_repeat, caml_subarray_to_jsbytes:caml_subarray_to_jsbytes, caml_utf8_of_utf16:caml_utf8_of_utf16, caml_utf16_of_utf8:caml_utf16_of_utf8, jsoo_is_ascii:jsoo_is_ascii, caml_bytes_unsafe_get:caml_bytes_unsafe_get, caml_bytes_unsafe_set:caml_bytes_unsafe_set, caml_string_bound_error:caml_string_bound_error, caml_bytes_bound_error:caml_bytes_bound_error, caml_string_get:caml_string_get, caml_string_get16:caml_string_get16, caml_bytes_get16:caml_bytes_get16, caml_string_get32:caml_string_get32, caml_bytes_get32:caml_bytes_get32, caml_string_get64:caml_string_get64, caml_bytes_get64:caml_bytes_get64, caml_bytes_get:caml_bytes_get, caml_string_set:caml_string_set, caml_bytes_set16:caml_bytes_set16, caml_string_set16:caml_string_set16, caml_bytes_set32:caml_bytes_set32, caml_string_set32:caml_string_set32, caml_bytes_set64:caml_bytes_set64, caml_string_set64:caml_string_set64, caml_bytes_set:caml_bytes_set, caml_bytes_of_utf16_jsstring:caml_bytes_of_utf16_jsstring, MlBytes:MlBytes, caml_convert_string_to_bytes:caml_convert_string_to_bytes, caml_convert_bytes_to_array:caml_convert_bytes_to_array, caml_array_of_bytes:caml_array_of_bytes, caml_array_of_string:caml_array_of_string, caml_create_string:caml_create_string, caml_create_bytes:caml_create_bytes, caml_string_of_array:caml_string_of_array, caml_bytes_of_array:caml_bytes_of_array, caml_bytes_compare:caml_bytes_compare, caml_bytes_equal:caml_bytes_equal, caml_string_notequal:caml_string_notequal, caml_bytes_notequal:caml_bytes_notequal, caml_bytes_lessequal:caml_bytes_lessequal, caml_bytes_lessthan:caml_bytes_lessthan, caml_string_greaterequal:caml_string_greaterequal, caml_bytes_greaterequal:caml_bytes_greaterequal, caml_string_greaterthan:caml_string_greaterthan, caml_bytes_greaterthan:caml_bytes_greaterthan, caml_fill_bytes:caml_fill_bytes, caml_fill_string:caml_fill_string, caml_blit_bytes:caml_blit_bytes, caml_blit_string:caml_blit_string, caml_ml_bytes_length:caml_ml_bytes_length, caml_bytes_of_jsbytes:caml_bytes_of_jsbytes, caml_string_unsafe_get:caml_string_unsafe_get, caml_string_unsafe_set:caml_string_unsafe_set, caml_ml_string_length:caml_ml_string_length, caml_string_compare:caml_string_compare, caml_string_equal:caml_string_equal, caml_string_lessequal:caml_string_lessequal, caml_string_lessthan:caml_string_lessthan, caml_string_of_bytes:caml_string_of_bytes, caml_bytes_of_string:caml_bytes_of_string, caml_string_of_jsbytes:caml_string_of_jsbytes, caml_jsbytes_of_string:caml_jsbytes_of_string, caml_jsstring_of_string:caml_jsstring_of_string, caml_string_of_jsstring:caml_string_of_jsstring, caml_is_ml_bytes:caml_is_ml_bytes, caml_ml_bytes_content:caml_ml_bytes_content, caml_is_ml_string:caml_is_ml_string, caml_js_to_byte_string:caml_js_to_byte_string, caml_new_string:caml_new_string, caml_js_from_string:caml_js_from_string, caml_to_js_string:caml_to_js_string, caml_js_to_string:caml_js_to_string, caml_md5_chan:caml_md5_chan, caml_md5_string:caml_md5_string, caml_md5_bytes:caml_md5_bytes, caml_marshal_constants:caml_marshal_constants, MlStringReader:MlStringReader, BigStringReader:BigStringReader, caml_float_of_bytes:caml_float_of_bytes, caml_input_value_from_string:caml_input_value_from_string, caml_input_value_from_bytes:caml_input_value_from_bytes, caml_int64_unmarshal:caml_int64_unmarshal, caml_int64_marshal:caml_int64_marshal, caml_int32_unmarshal:caml_int32_unmarshal, caml_nativeint_unmarshal:caml_nativeint_unmarshal, caml_custom_ops:caml_custom_ops, caml_input_value_from_reader:caml_input_value_from_reader, caml_marshal_data_size:caml_marshal_data_size, MlObjectTable:MlObjectTable, caml_legacy_custom_code:caml_legacy_custom_code, caml_output_val:caml_output_val, caml_output_value_to_string:caml_output_value_to_string, caml_output_value_to_bytes:caml_output_value_to_bytes, caml_output_value_to_buffer:caml_output_value_to_buffer, caml_lex_array:caml_lex_array, caml_lex_engine:caml_lex_engine, caml_new_lex_engine:caml_new_lex_engine, caml_js_on_ie:caml_js_on_ie, caml_js_html_escape:caml_js_html_escape, caml_js_html_entities:caml_js_html_entities, caml_js_get_console:caml_js_get_console, caml_xmlhttprequest_create:caml_xmlhttprequest_create, caml_js_error_of_exception:caml_js_error_of_exception, caml_js_pure_expr:caml_js_pure_expr, caml_js_set:caml_js_set, caml_js_get:caml_js_get, caml_js_delete:caml_js_delete, caml_js_instanceof:caml_js_instanceof, caml_js_typeof:caml_js_typeof, caml_trampoline:caml_trampoline, caml_trampoline_return:caml_trampoline_return, js_print_stdout:js_print_stdout, js_print_stderr:js_print_stderr, caml_is_js:caml_is_js, caml_wrap_exception:caml_wrap_exception, caml_exn_with_js_backtrace:caml_exn_with_js_backtrace, caml_js_error_option_of_exception:caml_js_error_option_of_exception, caml_js_from_bool:caml_js_from_bool, caml_js_to_bool:caml_js_to_bool, caml_js_from_float:caml_js_from_float, caml_js_to_float:caml_js_to_float, caml_js_from_array:caml_js_from_array, caml_js_to_array:caml_js_to_array, caml_list_of_js_array:caml_list_of_js_array, caml_list_to_js_array:caml_list_to_js_array, caml_js_var:caml_js_var, caml_js_call:caml_js_call, caml_js_fun_call:caml_js_fun_call, caml_js_meth_call:caml_js_meth_call, caml_js_new:caml_js_new, caml_ojs_new_arr:caml_ojs_new_arr, caml_js_wrap_callback:caml_js_wrap_callback, caml_js_wrap_callback_arguments:caml_js_wrap_callback_arguments, caml_js_wrap_callback_strict:caml_js_wrap_callback_strict, caml_js_wrap_meth_callback:caml_js_wrap_meth_callback, caml_js_wrap_meth_callback_arguments:caml_js_wrap_meth_callback_arguments, caml_js_wrap_meth_callback_strict:caml_js_wrap_meth_callback_strict, caml_js_wrap_meth_callback_unsafe:caml_js_wrap_meth_callback_unsafe, caml_js_equals:caml_js_equals, caml_js_eval_string:caml_js_eval_string, caml_js_expr:caml_js_expr, caml_pure_js_expr:caml_pure_js_expr, caml_js_object:caml_js_object, caml_sys_close:caml_sys_close, caml_std_output:caml_std_output, caml_sys_open:caml_sys_open, caml_ml_set_channel_name:caml_ml_set_channel_name, caml_ml_channels:caml_ml_channels, caml_ml_out_channels_list:caml_ml_out_channels_list, caml_ml_open_descriptor_out:caml_ml_open_descriptor_out, caml_ml_open_descriptor_in:caml_ml_open_descriptor_in, caml_channel_descriptor:caml_channel_descriptor, win_filedescr_of_channel:win_filedescr_of_channel, caml_ml_set_binary_mode:caml_ml_set_binary_mode, caml_ml_close_channel:caml_ml_close_channel, caml_ml_channel_size:caml_ml_channel_size, caml_ml_channel_size_64:caml_ml_channel_size_64, caml_ml_set_channel_output:caml_ml_set_channel_output, caml_ml_set_channel_refill:caml_ml_set_channel_refill, caml_ml_refill_input:caml_ml_refill_input, caml_ml_may_refill_input:caml_ml_may_refill_input, caml_ml_input:caml_ml_input, caml_input_value:caml_input_value, caml_ml_input_char:caml_ml_input_char, caml_ml_input_int:caml_ml_input_int, caml_ml_seek_in:caml_ml_seek_in, caml_ml_seek_in_64:caml_ml_seek_in_64, caml_ml_pos_in:caml_ml_pos_in, caml_ml_pos_in_64:caml_ml_pos_in_64, caml_ml_input_scan_line:caml_ml_input_scan_line, caml_ml_flush:caml_ml_flush, caml_ml_output_bytes:caml_ml_output_bytes, caml_ml_output:caml_ml_output, caml_ml_output_char:caml_ml_output_char, caml_output_value:caml_output_value, caml_ml_seek_out:caml_ml_seek_out, caml_ml_seek_out_64:caml_ml_seek_out_64, caml_ml_pos_out:caml_ml_pos_out, caml_ml_pos_out_64:caml_ml_pos_out_64, caml_ml_output_int:caml_ml_output_int, caml_ml_is_buffered:caml_ml_is_buffered, caml_ml_set_buffered:caml_ml_set_buffered, caml_format_int:caml_format_int, caml_parse_sign_and_base:caml_parse_sign_and_base, caml_parse_digit:caml_parse_digit, caml_int_of_string:caml_int_of_string, caml_mul:caml_mul, caml_div:caml_div, caml_mod:caml_mod, caml_bswap16:caml_bswap16, caml_int32_bswap:caml_int32_bswap, caml_int64_bswap:caml_int64_bswap, caml_int64_offset:caml_int64_offset, MlInt64:MlInt64, caml_int64_ult:caml_int64_ult, caml_int64_compare:caml_int64_compare, caml_int64_neg:caml_int64_neg, caml_int64_add:caml_int64_add, caml_int64_sub:caml_int64_sub, caml_int64_mul:caml_int64_mul, caml_int64_is_zero:caml_int64_is_zero, caml_int64_is_negative:caml_int64_is_negative, caml_int64_and:caml_int64_and, caml_int64_or:caml_int64_or, caml_int64_xor:caml_int64_xor, caml_int64_shift_left:caml_int64_shift_left, caml_int64_shift_right_unsigned:caml_int64_shift_right_unsigned, caml_int64_shift_right:caml_int64_shift_right, caml_int64_div:caml_int64_div, caml_int64_mod:caml_int64_mod, caml_int64_of_int32:caml_int64_of_int32, caml_int64_to_int32:caml_int64_to_int32, caml_int64_to_float:caml_int64_to_float, caml_int64_of_float:caml_int64_of_float, caml_int64_format:caml_int64_format, caml_int64_of_string:caml_int64_of_string, caml_int64_create_lo_mi_hi:caml_int64_create_lo_mi_hi, caml_int64_create_lo_hi:caml_int64_create_lo_hi, caml_int64_lo32:caml_int64_lo32, caml_int64_hi32:caml_int64_hi32, caml_int64_of_bytes:caml_int64_of_bytes, caml_int64_to_bytes:caml_int64_to_bytes, caml_int64_hash:caml_int64_hash, jsoo_floor_log2:jsoo_floor_log2, caml_int64_bits_of_float:caml_int64_bits_of_float, caml_int32_bits_of_float:caml_int32_bits_of_float, caml_hexstring_of_float:caml_hexstring_of_float, caml_int64_float_of_bits:caml_int64_float_of_bits, caml_nextafter_float:caml_nextafter_float, caml_trunc_float:caml_trunc_float, caml_int32_float_of_bits:caml_int32_float_of_bits, caml_classify_float:caml_classify_float, caml_modf_float:caml_modf_float, caml_ldexp_float:caml_ldexp_float, caml_frexp_float:caml_frexp_float, caml_float_compare:caml_float_compare, caml_copysign_float:caml_copysign_float, caml_signbit_float:caml_signbit_float, caml_expm1_float:caml_expm1_float, caml_exp2_float:caml_exp2_float, caml_log1p_float:caml_log1p_float, caml_log2_float:caml_log2_float, caml_hypot_float:caml_hypot_float, caml_log10_float:caml_log10_float, caml_cosh_float:caml_cosh_float, caml_acosh_float:caml_acosh_float, caml_sinh_float:caml_sinh_float, caml_asinh_float:caml_asinh_float, caml_tanh_float:caml_tanh_float, caml_atanh_float:caml_atanh_float, caml_round_float:caml_round_float, caml_cbrt_float:caml_cbrt_float, caml_erf_float:caml_erf_float, caml_erfc_float:caml_erfc_float, caml_fma_float:caml_fma_float, caml_format_float:caml_format_float, caml_float_of_string:caml_float_of_string, caml_hash_univ_param:caml_hash_univ_param, caml_hash_mix_int:caml_hash_mix_int, caml_hash_mix_final:caml_hash_mix_final, caml_hash_mix_float:caml_hash_mix_float, caml_hash_mix_int64:caml_hash_mix_int64, caml_hash_mix_jsbytes:caml_hash_mix_jsbytes, caml_hash_mix_bytes_arr:caml_hash_mix_bytes_arr, caml_hash_mix_bytes:caml_hash_mix_bytes, caml_hash_mix_string:caml_hash_mix_string, caml_hash:caml_hash, caml_gr_state:caml_gr_state, caml_gr_state_get:caml_gr_state_get, caml_gr_state_set:caml_gr_state_set, caml_gr_open_graph:caml_gr_open_graph, caml_gr_state_init:caml_gr_state_init, caml_gr_state_create:caml_gr_state_create, caml_gr_doc_of_state:caml_gr_doc_of_state, caml_gr_close_graph:caml_gr_close_graph, caml_gr_set_window_title:caml_gr_set_window_title, caml_gr_resize_window:caml_gr_resize_window, caml_gr_clear_graph:caml_gr_clear_graph, caml_gr_size_x:caml_gr_size_x, caml_gr_size_y:caml_gr_size_y, caml_gr_set_color:caml_gr_set_color, caml_gr_plot:caml_gr_plot, caml_gr_point_color:caml_gr_point_color, caml_gr_moveto:caml_gr_moveto, caml_gr_current_x:caml_gr_current_x, caml_gr_current_y:caml_gr_current_y, caml_gr_lineto:caml_gr_lineto, caml_gr_draw_rect:caml_gr_draw_rect, caml_gr_arc_aux:caml_gr_arc_aux, caml_gr_draw_arc:caml_gr_draw_arc, caml_gr_set_line_width:caml_gr_set_line_width, caml_gr_fill_rect:caml_gr_fill_rect, caml_gr_fill_poly:caml_gr_fill_poly, caml_gr_fill_arc:caml_gr_fill_arc, caml_gr_draw_str:caml_gr_draw_str, caml_gr_draw_char:caml_gr_draw_char, caml_gr_draw_string:caml_gr_draw_string, caml_gr_set_font:caml_gr_set_font, caml_gr_set_text_size:caml_gr_set_text_size, caml_gr_text_size:caml_gr_text_size, caml_gr_make_image:caml_gr_make_image, caml_gr_dump_image:caml_gr_dump_image, caml_gr_draw_image:caml_gr_draw_image, caml_gr_create_image:caml_gr_create_image, caml_gr_blit_image:caml_gr_blit_image, caml_gr_sigio_handler:caml_gr_sigio_handler, caml_gr_sigio_signal:caml_gr_sigio_signal, caml_gr_wait_event:caml_gr_wait_event, caml_gr_synchronize:caml_gr_synchronize, caml_gr_remember_mode:caml_gr_remember_mode, caml_gr_display_mode:caml_gr_display_mode, caml_gr_window_id:caml_gr_window_id, caml_gr_open_subwindow:caml_gr_open_subwindow, caml_gr_close_subwindow:caml_gr_close_subwindow, caml_gc_minor:caml_gc_minor, caml_gc_major:caml_gc_major, caml_gc_full_major:caml_gc_full_major, caml_gc_compaction:caml_gc_compaction, caml_gc_counters:caml_gc_counters, caml_gc_quick_stat:caml_gc_quick_stat, caml_gc_stat:caml_gc_stat, caml_gc_set:caml_gc_set, caml_gc_get:caml_gc_get, caml_memprof_set:caml_memprof_set, caml_final_register:caml_final_register, caml_final_register_called_without_value: caml_final_register_called_without_value, caml_final_release:caml_final_release, caml_memprof_start:caml_memprof_start, caml_memprof_stop:caml_memprof_stop, caml_eventlog_resume:caml_eventlog_resume, caml_eventlog_pause:caml_eventlog_pause, caml_gc_huge_fallback_count:caml_gc_huge_fallback_count, caml_gc_major_slice:caml_gc_major_slice, caml_gc_minor_words:caml_gc_minor_words, caml_get_minor_free:caml_get_minor_free, caml_get_major_bucket:caml_get_major_bucket, caml_get_major_credit:caml_get_major_credit, fs_node_supported:fs_node_supported, MlNodeDevice:MlNodeDevice, MlNodeFile:MlNodeFile, MlFakeDevice:MlFakeDevice, MlFakeFile:MlFakeFile, caml_trailing_slash:caml_trailing_slash, caml_current_dir:caml_current_dir, caml_get_root:caml_get_root, caml_root:caml_root, MlFile:MlFile, path_is_absolute:path_is_absolute, caml_make_path:caml_make_path, jsoo_mount_point:jsoo_mount_point, caml_list_mount_point:caml_list_mount_point, resolve_fs_device:resolve_fs_device, caml_mount_autoload:caml_mount_autoload, caml_unmount:caml_unmount, caml_sys_getcwd:caml_sys_getcwd, caml_sys_chdir:caml_sys_chdir, caml_raise_no_such_file:caml_raise_no_such_file, caml_raise_not_a_dir:caml_raise_not_a_dir, caml_sys_file_exists:caml_sys_file_exists, caml_sys_read_directory:caml_sys_read_directory, caml_sys_remove:caml_sys_remove, caml_sys_is_directory:caml_sys_is_directory, caml_sys_rename:caml_sys_rename, caml_sys_mkdir:caml_sys_mkdir, caml_sys_rmdir:caml_sys_rmdir, caml_ba_map_file:caml_ba_map_file, caml_ba_map_file_bytecode:caml_ba_map_file_bytecode, jsoo_create_file_extern:jsoo_create_file_extern, caml_fs_init:caml_fs_init, caml_create_file:caml_create_file, jsoo_create_file:jsoo_create_file, caml_read_file_content:caml_read_file_content, caml_parse_format:caml_parse_format, caml_finish_formatting:caml_finish_formatting, caml_raise_constant:caml_raise_constant, caml_return_exn_constant:caml_return_exn_constant, caml_raise_with_arg:caml_raise_with_arg, caml_raise_with_args:caml_raise_with_args, caml_raise_with_string:caml_raise_with_string, caml_failwith:caml_failwith, caml_invalid_argument:caml_invalid_argument, caml_raise_end_of_file:caml_raise_end_of_file, caml_raise_zero_divide:caml_raise_zero_divide, caml_raise_not_found:caml_raise_not_found, caml_array_bound_error:caml_array_bound_error, caml_compare_val_tag:caml_compare_val_tag, caml_compare_val_get_custom:caml_compare_val_get_custom, caml_compare_val_number_custom:caml_compare_val_number_custom, caml_compare_val:caml_compare_val, caml_compare:caml_compare, caml_int_compare:caml_int_compare, caml_equal:caml_equal, caml_notequal:caml_notequal, caml_greaterequal:caml_greaterequal, caml_greaterthan:caml_greaterthan, caml_lessequal:caml_lessequal, caml_lessthan:caml_lessthan, caml_blit_bigstring_to_bigstring:caml_blit_bigstring_to_bigstring, caml_blit_bigstring_to_string:caml_blit_bigstring_to_string, caml_blit_string_to_bigstring:caml_blit_string_to_bigstring, caml_hash_mix_bigstring:caml_hash_mix_bigstring, bigstring_to_array_buffer:bigstring_to_array_buffer, bigstring_to_typed_array:bigstring_to_typed_array, bigstring_of_array_buffer:bigstring_of_array_buffer, bigstring_of_typed_array:bigstring_of_typed_array, caml_bigstring_memcmp:caml_bigstring_memcmp, caml_bigstring_blit_ba_to_ba:caml_bigstring_blit_ba_to_ba, caml_bigstring_blit_string_to_ba:caml_bigstring_blit_string_to_ba, caml_bigstring_blit_bytes_to_ba:caml_bigstring_blit_bytes_to_ba, caml_bigstring_blit_ba_to_bytes:caml_bigstring_blit_ba_to_bytes, caml_ba_init:caml_ba_init, caml_ba_get_size:caml_ba_get_size, caml_ba_get_size_per_element:caml_ba_get_size_per_element, caml_ba_create_buffer:caml_ba_create_buffer, caml_ba_custom_name:caml_ba_custom_name, Ml_Bigarray:Ml_Bigarray, Ml_Bigarray_c_1_1:Ml_Bigarray_c_1_1, caml_ba_compare:caml_ba_compare, caml_ba_create_unsafe:caml_ba_create_unsafe, caml_ba_create:caml_ba_create, caml_ba_change_layout:caml_ba_change_layout, caml_ba_kind:caml_ba_kind, caml_ba_layout:caml_ba_layout, caml_ba_num_dims:caml_ba_num_dims, caml_ba_dim:caml_ba_dim, caml_ba_dim_1:caml_ba_dim_1, caml_ba_dim_2:caml_ba_dim_2, caml_ba_dim_3:caml_ba_dim_3, caml_ba_get_generic:caml_ba_get_generic, caml_ba_uint8_get16:caml_ba_uint8_get16, caml_ba_uint8_get32:caml_ba_uint8_get32, caml_ba_uint8_get64:caml_ba_uint8_get64, caml_ba_get_1:caml_ba_get_1, caml_ba_get_2:caml_ba_get_2, caml_ba_get_3:caml_ba_get_3, caml_ba_set_generic:caml_ba_set_generic, caml_ba_uint8_set16:caml_ba_uint8_set16, caml_ba_uint8_set32:caml_ba_uint8_set32, caml_ba_uint8_set64:caml_ba_uint8_set64, caml_ba_set_1:caml_ba_set_1, caml_ba_set_2:caml_ba_set_2, caml_ba_set_3:caml_ba_set_3, caml_ba_fill:caml_ba_fill, caml_ba_blit:caml_ba_blit, caml_ba_sub:caml_ba_sub, caml_ba_slice:caml_ba_slice, caml_ba_reshape:caml_ba_reshape, caml_ba_serialize:caml_ba_serialize, caml_ba_deserialize:caml_ba_deserialize, caml_ba_create_from:caml_ba_create_from, caml_ba_hash:caml_ba_hash, caml_ba_to_typed_array:caml_ba_to_typed_array, caml_ba_kind_of_typed_array:caml_ba_kind_of_typed_array, caml_ba_from_typed_array:caml_ba_from_typed_array, caml_ml_debug_info_status:caml_ml_debug_info_status, caml_backtrace_status:caml_backtrace_status, caml_get_exception_backtrace:caml_get_exception_backtrace, caml_get_exception_raw_backtrace:caml_get_exception_raw_backtrace, caml_record_backtrace:caml_record_backtrace, caml_convert_raw_backtrace:caml_convert_raw_backtrace, caml_raw_backtrace_length:caml_raw_backtrace_length, caml_raw_backtrace_next_slot:caml_raw_backtrace_next_slot, caml_raw_backtrace_slot:caml_raw_backtrace_slot, caml_restore_raw_backtrace:caml_restore_raw_backtrace, caml_get_current_callstack:caml_get_current_callstack, caml_convert_raw_backtrace_slot:caml_convert_raw_backtrace_slot, caml_array_sub:caml_array_sub, caml_array_append:caml_array_append, caml_array_concat:caml_array_concat, caml_array_blit:caml_array_blit, caml_floatarray_blit:caml_floatarray_blit, caml_array_set:caml_array_set, caml_array_get:caml_array_get, caml_array_fill:caml_array_fill, caml_check_bound:caml_check_bound, caml_make_vect:caml_make_vect, caml_make_float_vect:caml_make_float_vect, caml_floatarray_create:caml_floatarray_create}; caml_fs_init(); caml_register_global (0,[248,caml_string_of_jsbytes("Out_of_memory"),-1],"Out_of_memory"); caml_register_global (1,[248,caml_string_of_jsbytes("Sys_error"),-2],"Sys_error"); caml_register_global (2,[248,caml_string_of_jsbytes("Failure"),-3],"Failure"); caml_register_global (3, [248,caml_string_of_jsbytes("Invalid_argument"),-4], "Invalid_argument"); caml_register_global (4,[248,caml_string_of_jsbytes("End_of_file"),-5],"End_of_file"); caml_register_global (5, [248,caml_string_of_jsbytes("Division_by_zero"),-6], "Division_by_zero"); caml_register_global (6,[248,caml_string_of_jsbytes("Not_found"),-7],"Not_found"); caml_register_global (7,[248,caml_string_of_jsbytes("Match_failure"),-8],"Match_failure"); caml_register_global (8,[248,caml_string_of_jsbytes("Stack_overflow"),-9],"Stack_overflow"); caml_register_global (9,[248,caml_string_of_jsbytes("Sys_blocked_io"),-10],"Sys_blocked_io"); caml_register_global (10,[248,caml_string_of_jsbytes("Assert_failure"),-11],"Assert_failure"); caml_register_global (11, [248,caml_string_of_jsbytes("Undefined_recursive_module"),-12], "Undefined_recursive_module"); return} (globalThis)); //# 1 "../.js/stdlib/stdlib.cma.js" (function(globalThis) {"use strict"; var runtime=globalThis.jsoo_runtime, caml_array_concat=runtime.caml_array_concat, caml_array_get=runtime.caml_array_get, caml_array_set=runtime.caml_array_set, caml_array_sub=runtime.caml_array_sub, caml_ba_change_layout=runtime.caml_ba_change_layout, caml_ba_create=runtime.caml_ba_create, caml_ba_dim_1=runtime.caml_ba_dim_1, caml_ba_dim_2=runtime.caml_ba_dim_2, caml_ba_kind=runtime.caml_ba_kind, caml_ba_num_dims=runtime.caml_ba_num_dims, caml_ba_reshape=runtime.caml_ba_reshape, caml_ba_set_1=runtime.caml_ba_set_1, caml_ba_set_2=runtime.caml_ba_set_2, caml_ba_set_3=runtime.caml_ba_set_3, caml_ba_set_generic=runtime.caml_ba_set_generic, caml_ba_slice=runtime.caml_ba_slice, caml_blit_bytes=runtime.caml_blit_bytes, caml_blit_string=runtime.caml_blit_string, caml_bswap16=runtime.caml_bswap16, caml_bytes_get=runtime.caml_bytes_get, caml_bytes_get16=runtime.caml_bytes_get16, caml_bytes_get32=runtime.caml_bytes_get32, caml_bytes_get64=runtime.caml_bytes_get64, caml_bytes_of_string=runtime.caml_bytes_of_string, caml_bytes_set=runtime.caml_bytes_set, caml_bytes_set16=runtime.caml_bytes_set16, caml_bytes_set32=runtime.caml_bytes_set32, caml_bytes_set64=runtime.caml_bytes_set64, caml_bytes_unsafe_get=runtime.caml_bytes_unsafe_get, caml_bytes_unsafe_set=runtime.caml_bytes_unsafe_set, caml_check_bound=runtime.caml_check_bound, caml_compare=runtime.caml_compare, caml_create_bytes=runtime.caml_create_bytes, caml_div=runtime.caml_div, caml_ephe_set_key=runtime.caml_ephe_set_key, caml_ephe_unset_key=runtime.caml_ephe_unset_key, caml_equal=runtime.caml_equal, caml_fill_bytes=runtime.caml_fill_bytes, caml_float_compare=runtime.caml_float_compare, caml_float_of_string=runtime.caml_float_of_string, caml_floatarray_blit=runtime.caml_floatarray_blit, caml_floatarray_create=runtime.caml_floatarray_create, caml_format_float=runtime.caml_format_float, caml_format_int=runtime.caml_format_int, caml_fresh_oo_id=runtime.caml_fresh_oo_id, caml_get_exception_raw_backtra=runtime.caml_get_exception_raw_backtrace, caml_get_public_method=runtime.caml_get_public_method, caml_greaterequal=runtime.caml_greaterequal, caml_greaterthan=runtime.caml_greaterthan, caml_hash=runtime.caml_hash, caml_input_value=runtime.caml_input_value, caml_int32_bswap=runtime.caml_int32_bswap, caml_int64_add=runtime.caml_int64_add, caml_int64_bswap=runtime.caml_int64_bswap, caml_int64_compare=runtime.caml_int64_compare, caml_int64_float_of_bits=runtime.caml_int64_float_of_bits, caml_int64_format=runtime.caml_int64_format, caml_int64_mul=runtime.caml_int64_mul, caml_int64_of_int32=runtime.caml_int64_of_int32, caml_int64_of_string=runtime.caml_int64_of_string, caml_int64_or=runtime.caml_int64_or, caml_int64_shift_left=runtime.caml_int64_shift_left, caml_int64_shift_right_unsigne=runtime.caml_int64_shift_right_unsigned, caml_int64_sub=runtime.caml_int64_sub, caml_int_compare=runtime.caml_int_compare, caml_int_of_string=runtime.caml_int_of_string, caml_lessequal=runtime.caml_lessequal, caml_lessthan=runtime.caml_lessthan, caml_make_vect=runtime.caml_make_vect, caml_marshal_data_size=runtime.caml_marshal_data_size, caml_md5_string=runtime.caml_md5_string, caml_ml_bytes_length=runtime.caml_ml_bytes_length, caml_ml_channel_size=runtime.caml_ml_channel_size, caml_ml_channel_size_64=runtime.caml_ml_channel_size_64, caml_ml_close_channel=runtime.caml_ml_close_channel, caml_ml_flush=runtime.caml_ml_flush, caml_ml_input=runtime.caml_ml_input, caml_ml_input_char=runtime.caml_ml_input_char, caml_ml_open_descriptor_in=runtime.caml_ml_open_descriptor_in, caml_ml_open_descriptor_out=runtime.caml_ml_open_descriptor_out, caml_ml_output=runtime.caml_ml_output, caml_ml_output_bytes=runtime.caml_ml_output_bytes, caml_ml_output_char=runtime.caml_ml_output_char, caml_ml_pos_in=runtime.caml_ml_pos_in, caml_ml_set_binary_mode=runtime.caml_ml_set_binary_mode, caml_ml_set_channel_name=runtime.caml_ml_set_channel_name, caml_ml_string_length=runtime.caml_ml_string_length, caml_mod=runtime.caml_mod, caml_mul=runtime.caml_mul, caml_nextafter_float=runtime.caml_nextafter_float, caml_notequal=runtime.caml_notequal, caml_obj_block=runtime.caml_obj_block, caml_obj_make_forward=runtime.caml_obj_make_forward, caml_obj_tag=runtime.caml_obj_tag, caml_output_value=runtime.caml_output_value, caml_register_global=runtime.caml_register_global, caml_register_named_value=runtime.caml_register_named_value, caml_restore_raw_backtrace=runtime.caml_restore_raw_backtrace, caml_set_oo_id=runtime.caml_set_oo_id, caml_signbit_float=runtime.caml_signbit_float, caml_string_compare=runtime.caml_string_compare, caml_string_equal=runtime.caml_string_equal, caml_string_get=runtime.caml_string_get, caml_string_notequal=runtime.caml_string_notequal, caml_string_of_bytes=runtime.caml_string_of_bytes, caml_string_of_jsbytes=runtime.caml_string_of_jsbytes, caml_string_unsafe_get=runtime.caml_string_unsafe_get, caml_sys_argv=runtime.caml_sys_argv, caml_sys_getenv=runtime.caml_sys_getenv, caml_sys_open=runtime.caml_sys_open, caml_sys_random_seed=runtime.caml_sys_random_seed, caml_trampoline=runtime.caml_trampoline, caml_trampoline_return=runtime.caml_trampoline_return, caml_wrap_exception=runtime.caml_wrap_exception; function caml_call1(f,a0) {return f.length == 1?f(a0):runtime.caml_call_gen(f,[a0])} function caml_call2(f,a0,a1) {return f.length == 2?f(a0,a1):runtime.caml_call_gen(f,[a0,a1])} function caml_call3(f,a0,a1,a2) {return f.length == 3?f(a0,a1,a2):runtime.caml_call_gen(f,[a0,a1,a2])} function caml_call4(f,a0,a1,a2,a3) {return f.length == 4 ?f(a0,a1,a2,a3) :runtime.caml_call_gen(f,[a0,a1,a2,a3])} function caml_call5(f,a0,a1,a2,a3,a4) {return f.length == 5 ?f(a0,a1,a2,a3,a4) :runtime.caml_call_gen(f,[a0,a1,a2,a3,a4])} function caml_call7(f,a0,a1,a2,a3,a4,a5,a6) {return f.length == 7 ?f(a0,a1,a2,a3,a4,a5,a6) :runtime.caml_call_gen(f,[a0,a1,a2,a3,a4,a5,a6])} var global_data=runtime.caml_get_global_data(), cst$0=caml_string_of_jsbytes("%,"), cst_really_input=caml_string_of_jsbytes("really_input"), cst_input=caml_string_of_jsbytes("input"), cst_output_substring=caml_string_of_jsbytes("output_substring"), cst_output=caml_string_of_jsbytes("output"), cst_12g=caml_string_of_jsbytes("%.12g"), cst=caml_string_of_jsbytes("."), cst_false$1=caml_string_of_jsbytes("false"), cst_true$1=caml_string_of_jsbytes("true"), cst_false$0=caml_string_of_jsbytes("false"), cst_true$0=caml_string_of_jsbytes("true"), cst_bool_of_string=caml_string_of_jsbytes("bool_of_string"), cst_true=caml_string_of_jsbytes("true"), cst_false=caml_string_of_jsbytes("false"), cst_char_of_int=caml_string_of_jsbytes("char_of_int"), cst_Stdlib_Exit=caml_string_of_jsbytes("Stdlib.Exit"), cst_Stdlib_Pervasives_Exit= caml_string_of_jsbytes("Stdlib.Pervasives.Exit"), cst_Stdlib_Sys_Break=caml_string_of_jsbytes("Stdlib.Sys.Break"), ocaml_version=caml_string_of_jsbytes("4.14.0"), ocaml_release=[0,4,14,0,0], cst_Obj_Ephemeron_blit_key= caml_string_of_jsbytes("Obj.Ephemeron.blit_key"), cst_Obj_Ephemeron_check_key= caml_string_of_jsbytes("Obj.Ephemeron.check_key"), cst_Obj_Ephemeron_unset_key= caml_string_of_jsbytes("Obj.Ephemeron.unset_key"), cst_Obj_Ephemeron_set_key=caml_string_of_jsbytes("Obj.Ephemeron.set_key"), cst_Obj_Ephemeron_get_key_copy= caml_string_of_jsbytes("Obj.Ephemeron.get_key_copy"), cst_Obj_Ephemeron_get_key=caml_string_of_jsbytes("Obj.Ephemeron.get_key"), cst_Obj_Ephemeron_create=caml_string_of_jsbytes("Obj.Ephemeron.create"), cst_Obj_extension_constructor$0= caml_string_of_jsbytes("Obj.extension_constructor"), cst_Obj_extension_constructor= caml_string_of_jsbytes("Obj.extension_constructor"), cst_CamlinternalLazy_Undefined= caml_string_of_jsbytes("CamlinternalLazy.Undefined"), cst_Seq_drop=caml_string_of_jsbytes("Seq.drop"), cst_Seq_take=caml_string_of_jsbytes("Seq.take"), cst_Seq_init=caml_string_of_jsbytes("Seq.init"), cst_Stdlib_Seq_Forced_twice= caml_string_of_jsbytes("Stdlib.Seq.Forced_twice"), cst_option_is_None=caml_string_of_jsbytes("option is None"), cst_result_is_Ok=caml_string_of_jsbytes("result is Ok _"), cst_result_is_Error=caml_string_of_jsbytes("result is Error _"), cst_true$2=caml_string_of_jsbytes("true"), cst_false$2=caml_string_of_jsbytes("false"), cst$1=caml_string_of_jsbytes("\\\\"), cst$2=caml_string_of_jsbytes("\\'"), cst_b=caml_string_of_jsbytes("\\b"), cst_t=caml_string_of_jsbytes("\\t"), cst_n=caml_string_of_jsbytes("\\n"), cst_r=caml_string_of_jsbytes("\\r"), cst_Char_chr=caml_string_of_jsbytes("Char.chr"), cst_is_not_a_latin1_character= caml_string_of_jsbytes(" is not a latin1 character"), cst_04X=caml_string_of_jsbytes("%04X"), cst_U=caml_string_of_jsbytes("U+"), cst_is_not_an_Unicode_scalar_v= caml_string_of_jsbytes(" is not an Unicode scalar value"), cst_X=caml_string_of_jsbytes("%X"), err_no_pred=caml_string_of_jsbytes("U+0000 has no predecessor"), err_no_succ=caml_string_of_jsbytes("U+10FFFF has no successor"), cst_List_map2=caml_string_of_jsbytes("List.map2"), cst_List_iter2=caml_string_of_jsbytes("List.iter2"), cst_List_fold_left2=caml_string_of_jsbytes("List.fold_left2"), cst_List_fold_right2=caml_string_of_jsbytes("List.fold_right2"), cst_List_for_all2=caml_string_of_jsbytes("List.for_all2"), cst_List_exists2=caml_string_of_jsbytes("List.exists2"), cst_List_combine=caml_string_of_jsbytes("List.combine"), cst_List_rev_map2=caml_string_of_jsbytes("List.rev_map2"), cst_List_init=caml_string_of_jsbytes("List.init"), cst_List_nth$0=caml_string_of_jsbytes("List.nth"), cst_nth=caml_string_of_jsbytes("nth"), cst_List_nth=caml_string_of_jsbytes("List.nth"), cst_tl=caml_string_of_jsbytes("tl"), cst_hd=caml_string_of_jsbytes("hd"), cst_index_out_of_bounds$2=caml_string_of_jsbytes("index out of bounds"), cst_index_out_of_bounds$1=caml_string_of_jsbytes("index out of bounds"), cst_index_out_of_bounds$0=caml_string_of_jsbytes("index out of bounds"), cst_index_out_of_bounds=caml_string_of_jsbytes("index out of bounds"), cst_Bytes_of_seq_cannot_grow_b= caml_string_of_jsbytes("Bytes.of_seq: cannot grow bytes"), cst_String_rcontains_from_Byte= caml_string_of_jsbytes("String.rcontains_from / Bytes.rcontains_from"), cst_String_contains_from_Bytes= caml_string_of_jsbytes("String.contains_from / Bytes.contains_from"), cst_String_rindex_from_opt_Byt= caml_string_of_jsbytes("String.rindex_from_opt / Bytes.rindex_from_opt"), cst_String_rindex_from_Bytes_r= caml_string_of_jsbytes("String.rindex_from / Bytes.rindex_from"), cst_String_index_from_opt_Byte= caml_string_of_jsbytes("String.index_from_opt / Bytes.index_from_opt"), cst_String_index_from_Bytes_in= caml_string_of_jsbytes("String.index_from / Bytes.index_from"), cst_Bytes_concat=caml_string_of_jsbytes("Bytes.concat"), cst_String_blit_Bytes_blit_str= caml_string_of_jsbytes("String.blit / Bytes.blit_string"), cst_Bytes_blit=caml_string_of_jsbytes("Bytes.blit"), cst_String_fill_Bytes_fill= caml_string_of_jsbytes("String.fill / Bytes.fill"), cst_Bytes_extend=caml_string_of_jsbytes("Bytes.extend"), cst_String_sub_Bytes_sub=caml_string_of_jsbytes("String.sub / Bytes.sub"), cst_String_rcontains_from_Byte$0= caml_string_of_jsbytes("String.rcontains_from / Bytes.rcontains_from"), cst_String_contains_from_Bytes$0= caml_string_of_jsbytes("String.contains_from / Bytes.contains_from"), cst_String_rindex_from_opt_Byt$0= caml_string_of_jsbytes("String.rindex_from_opt / Bytes.rindex_from_opt"), cst_String_rindex_from_Bytes_r$0= caml_string_of_jsbytes("String.rindex_from / Bytes.rindex_from"), cst_String_index_from_opt_Byte$0= caml_string_of_jsbytes("String.index_from_opt / Bytes.index_from_opt"), cst_String_index_from_Bytes_in$0= caml_string_of_jsbytes("String.index_from / Bytes.index_from"), cst$4=caml_string_of_jsbytes(""), cst$3=caml_string_of_jsbytes(""), cst_String_concat=caml_string_of_jsbytes("String.concat"), empty$1=caml_string_of_jsbytes(""), cst$5=caml_string_of_jsbytes("()"), cst_Marshal_from_bytes=caml_string_of_jsbytes("Marshal.from_bytes"), cst_Marshal_from_bytes$0=caml_string_of_jsbytes("Marshal.from_bytes"), cst_Marshal_data_size=caml_string_of_jsbytes("Marshal.data_size"), cst_Marshal_to_buffer_substrin= caml_string_of_jsbytes("Marshal.to_buffer: substring out of bounds"), cst_Array_combine=caml_string_of_jsbytes("Array.combine"), cst_Array_exists2=caml_string_of_jsbytes("Array.exists2"), cst_Array_for_all2=caml_string_of_jsbytes("Array.for_all2"), cst_Array_map2_arrays_must_hav= caml_string_of_jsbytes("Array.map2: arrays must have the same length"), cst_Array_iter2_arrays_must_ha= caml_string_of_jsbytes("Array.iter2: arrays must have the same length"), cst_Array_blit=caml_string_of_jsbytes("Array.blit"), cst_Array_fill=caml_string_of_jsbytes("Array.fill"), cst_Array_sub=caml_string_of_jsbytes("Array.sub"), cst_Array_init=caml_string_of_jsbytes("Array.init"), cst_Stdlib_Array_Bottom=caml_string_of_jsbytes("Stdlib.Array.Bottom"), cst_Float_Array_map2_arrays_mu= caml_string_of_jsbytes ("Float.Array.map2: arrays must have the same length"), cst_Float_Array_iter2_arrays_m= caml_string_of_jsbytes ("Float.Array.iter2: arrays must have the same length"), cst_Float_array_blit=caml_string_of_jsbytes("Float.array.blit"), cst_Float_array_blit$0=caml_string_of_jsbytes("Float.array.blit"), cst_Float_Array_fill=caml_string_of_jsbytes("Float.Array.fill"), cst_Float_Array_sub=caml_string_of_jsbytes("Float.Array.sub"), cst_Float_Array_concat=caml_string_of_jsbytes("Float.Array.concat"), cst_Float_Array_init=caml_string_of_jsbytes("Float.Array.init"), cst_Stdlib_Float_Array_Bottom= caml_string_of_jsbytes("Stdlib.Float.Array.Bottom"), cst_d=caml_string_of_jsbytes("%d"), cst_d$0=caml_string_of_jsbytes("%d"), zero$2=runtime.caml_int64_create_lo_mi_hi(0,0,0), one$2=runtime.caml_int64_create_lo_mi_hi(1,0,0), minus_one$2=runtime.caml_int64_create_lo_mi_hi(16777215,16777215,65535), min_int$2=runtime.caml_int64_create_lo_mi_hi(0,0,32768), max_int$2=runtime.caml_int64_create_lo_mi_hi(16777215,16777215,32767), cst_d$1=caml_string_of_jsbytes("%d"), cst_Lexing_lex_refill_cannot_g= caml_string_of_jsbytes("Lexing.lex_refill: cannot grow buffer"), dummy_pos=[0,caml_string_of_jsbytes(""),0,0,-1], zero_pos=[0,caml_string_of_jsbytes(""),1,0,0], cst_syntax_error=caml_string_of_jsbytes("syntax error"), cst_Stdlib_Parsing_YYexit=caml_string_of_jsbytes("Stdlib.Parsing.YYexit"), cst_Stdlib_Parsing_Parse_error= caml_string_of_jsbytes("Stdlib.Parsing.Parse_error"), cst_Set_remove_min_elt=caml_string_of_jsbytes("Set.remove_min_elt"), cst_Set_bal=caml_string_of_jsbytes("Set.bal"), cst_Set_bal$0=caml_string_of_jsbytes("Set.bal"), cst_Set_bal$1=caml_string_of_jsbytes("Set.bal"), cst_Set_bal$2=caml_string_of_jsbytes("Set.bal"), cst_Map_remove_min_elt=caml_string_of_jsbytes("Map.remove_min_elt"), cst_Map_bal=caml_string_of_jsbytes("Map.bal"), cst_Map_bal$0=caml_string_of_jsbytes("Map.bal"), cst_Map_bal$1=caml_string_of_jsbytes("Map.bal"), cst_Map_bal$2=caml_string_of_jsbytes("Map.bal"), cst_Stdlib_Stack_Empty=caml_string_of_jsbytes("Stdlib.Stack.Empty"), cst_Stdlib_Queue_Empty=caml_string_of_jsbytes("Stdlib.Queue.Empty"), cst_count=caml_string_of_jsbytes("{count = "), cst_data=caml_string_of_jsbytes("; data = "), cst$6=caml_string_of_jsbytes("}"), cst_Sempty=caml_string_of_jsbytes("Sempty"), cst_Scons=caml_string_of_jsbytes("Scons ("), cst$7=caml_string_of_jsbytes(", "), cst$8=caml_string_of_jsbytes(")"), cst_Sapp=caml_string_of_jsbytes("Sapp ("), cst$9=caml_string_of_jsbytes(", "), cst$10=caml_string_of_jsbytes(")"), cst_Slazy=caml_string_of_jsbytes("Slazy"), cst_Sgen=caml_string_of_jsbytes("Sgen"), cst_Sbuffio=caml_string_of_jsbytes("Sbuffio"), cst_Stdlib_Stream_Failure=caml_string_of_jsbytes("Stdlib.Stream.Failure"), cst_Stdlib_Stream_Error=caml_string_of_jsbytes("Stdlib.Stream.Error"), cst_Buffer_truncate=caml_string_of_jsbytes("Buffer.truncate"), cst_Buffer_add_channel=caml_string_of_jsbytes("Buffer.add_channel"), cst_Buffer_add_substring_add_s= caml_string_of_jsbytes("Buffer.add_substring/add_subbytes"), cst_Buffer_add_cannot_grow_buf= caml_string_of_jsbytes("Buffer.add: cannot grow buffer"), cst_Buffer_nth=caml_string_of_jsbytes("Buffer.nth"), cst_Buffer_blit=caml_string_of_jsbytes("Buffer.blit"), cst_Buffer_sub=caml_string_of_jsbytes("Buffer.sub"), cst_c=caml_string_of_jsbytes("%c"), cst_s=caml_string_of_jsbytes("%s"), cst_i=caml_string_of_jsbytes("%i"), cst_li=caml_string_of_jsbytes("%li"), cst_ni=caml_string_of_jsbytes("%ni"), cst_Li=caml_string_of_jsbytes("%Li"), cst_f=caml_string_of_jsbytes("%f"), cst_B=caml_string_of_jsbytes("%B"), cst$21=caml_string_of_jsbytes("%{"), cst$22=caml_string_of_jsbytes("%}"), cst$23=caml_string_of_jsbytes("%("), cst$24=caml_string_of_jsbytes("%)"), cst_a=caml_string_of_jsbytes("%a"), cst_t$0=caml_string_of_jsbytes("%t"), cst$25=caml_string_of_jsbytes("%?"), cst_r$0=caml_string_of_jsbytes("%r"), cst_r$1=caml_string_of_jsbytes("%_r"), cst_u$0=caml_string_of_jsbytes("%u"), cst_Printf_bad_conversion= caml_string_of_jsbytes("Printf: bad conversion %["), cst_Printf_bad_conversion$0= caml_string_of_jsbytes("Printf: bad conversion %_"), cst$30=caml_string_of_jsbytes("@{"), cst$31=caml_string_of_jsbytes("@["), cst$32=caml_string_of_jsbytes("@{"), cst$33=caml_string_of_jsbytes("@["), cst$34=caml_string_of_jsbytes("@{"), cst$35=caml_string_of_jsbytes("@["), cst_0=caml_string_of_jsbytes("0"), cst_padding=caml_string_of_jsbytes("padding"), cst_precision=caml_string_of_jsbytes("precision"), cst$40=caml_string_of_jsbytes("'*'"), cst$38=caml_string_of_jsbytes("'-'"), cst_0$2=caml_string_of_jsbytes("'0'"), cst$39=caml_string_of_jsbytes("'*'"), cst_0$0=caml_string_of_jsbytes("0"), cst_0$1=caml_string_of_jsbytes("0"), cst_precision$0=caml_string_of_jsbytes("precision"), cst_precision$1=caml_string_of_jsbytes("precision"), cst$41=caml_string_of_jsbytes("'+'"), cst$42=caml_string_of_jsbytes("'#'"), cst$43=caml_string_of_jsbytes("' '"), cst_padding$0=caml_string_of_jsbytes("`padding'"), cst_precision$2=caml_string_of_jsbytes("`precision'"), cst$44=caml_string_of_jsbytes("'+'"), cst$45=caml_string_of_jsbytes("'_'"), sub_format=[0,0,caml_string_of_jsbytes("")], formatting_lit=[0,caml_string_of_jsbytes("@;"),1,0], cst_digit=caml_string_of_jsbytes("digit"), cst_character=caml_string_of_jsbytes("character ')'"), cst_character$0=caml_string_of_jsbytes("character '}'"), cst$49=caml_string_of_jsbytes("'#'"), cst$46=caml_string_of_jsbytes("'+'"), cst$47=caml_string_of_jsbytes("'+'"), cst$48=caml_string_of_jsbytes("' '"), cst$50=caml_string_of_jsbytes("'+'"), cst_non_zero_widths_are_unsupp= caml_string_of_jsbytes ("non-zero widths are unsupported for %c conversions"), cst_unexpected_end_of_format= caml_string_of_jsbytes("unexpected end of format"), cst$36=caml_string_of_jsbytes(""), cst$37=caml_string_of_jsbytes(""), cst_b$0=caml_string_of_jsbytes("b"), cst_h=caml_string_of_jsbytes("h"), cst_hov=caml_string_of_jsbytes("hov"), cst_hv=caml_string_of_jsbytes("hv"), cst_v=caml_string_of_jsbytes("v"), cst_nan=caml_string_of_jsbytes("nan"), cst_neg_infinity=caml_string_of_jsbytes("neg_infinity"), cst_infinity=caml_string_of_jsbytes("infinity"), cst$29=caml_string_of_jsbytes("."), cst_nd$0=caml_string_of_jsbytes("%+nd"), cst_nd$1=caml_string_of_jsbytes("% nd"), cst_ni$1=caml_string_of_jsbytes("%+ni"), cst_ni$2=caml_string_of_jsbytes("% ni"), cst_nx=caml_string_of_jsbytes("%nx"), cst_nx$0=caml_string_of_jsbytes("%#nx"), cst_nX=caml_string_of_jsbytes("%nX"), cst_nX$0=caml_string_of_jsbytes("%#nX"), cst_no=caml_string_of_jsbytes("%no"), cst_no$0=caml_string_of_jsbytes("%#no"), cst_nd=caml_string_of_jsbytes("%nd"), cst_ni$0=caml_string_of_jsbytes("%ni"), cst_nu=caml_string_of_jsbytes("%nu"), cst_ld$0=caml_string_of_jsbytes("%+ld"), cst_ld$1=caml_string_of_jsbytes("% ld"), cst_li$1=caml_string_of_jsbytes("%+li"), cst_li$2=caml_string_of_jsbytes("% li"), cst_lx=caml_string_of_jsbytes("%lx"), cst_lx$0=caml_string_of_jsbytes("%#lx"), cst_lX=caml_string_of_jsbytes("%lX"), cst_lX$0=caml_string_of_jsbytes("%#lX"), cst_lo=caml_string_of_jsbytes("%lo"), cst_lo$0=caml_string_of_jsbytes("%#lo"), cst_ld=caml_string_of_jsbytes("%ld"), cst_li$0=caml_string_of_jsbytes("%li"), cst_lu=caml_string_of_jsbytes("%lu"), cst_Ld$0=caml_string_of_jsbytes("%+Ld"), cst_Ld$1=caml_string_of_jsbytes("% Ld"), cst_Li$1=caml_string_of_jsbytes("%+Li"), cst_Li$2=caml_string_of_jsbytes("% Li"), cst_Lx=caml_string_of_jsbytes("%Lx"), cst_Lx$0=caml_string_of_jsbytes("%#Lx"), cst_LX=caml_string_of_jsbytes("%LX"), cst_LX$0=caml_string_of_jsbytes("%#LX"), cst_Lo=caml_string_of_jsbytes("%Lo"), cst_Lo$0=caml_string_of_jsbytes("%#Lo"), cst_Ld=caml_string_of_jsbytes("%Ld"), cst_Li$0=caml_string_of_jsbytes("%Li"), cst_Lu=caml_string_of_jsbytes("%Lu"), cst_d$3=caml_string_of_jsbytes("%+d"), cst_d$4=caml_string_of_jsbytes("% d"), cst_i$1=caml_string_of_jsbytes("%+i"), cst_i$2=caml_string_of_jsbytes("% i"), cst_x=caml_string_of_jsbytes("%x"), cst_x$0=caml_string_of_jsbytes("%#x"), cst_X$0=caml_string_of_jsbytes("%X"), cst_X$1=caml_string_of_jsbytes("%#X"), cst_o=caml_string_of_jsbytes("%o"), cst_o$0=caml_string_of_jsbytes("%#o"), cst_d$2=caml_string_of_jsbytes("%d"), cst_i$0=caml_string_of_jsbytes("%i"), cst_u=caml_string_of_jsbytes("%u"), cst$26=caml_string_of_jsbytes("%!"), cst$27=caml_string_of_jsbytes("@{"), cst$28=caml_string_of_jsbytes("@["), cst_0c=caml_string_of_jsbytes("0c"), cst$20=caml_string_of_jsbytes("%%"), cst$12=caml_string_of_jsbytes("@]"), cst$13=caml_string_of_jsbytes("@}"), cst$14=caml_string_of_jsbytes("@?"), cst$15=caml_string_of_jsbytes("@\n"), cst$16=caml_string_of_jsbytes("@."), cst$17=caml_string_of_jsbytes("@@"), cst$18=caml_string_of_jsbytes("@%"), cst$19=caml_string_of_jsbytes("@"), cst$11=caml_string_of_jsbytes(".*"), cst_CamlinternalFormat_Type_mi= caml_string_of_jsbytes("CamlinternalFormat.Type_mismatch"), cst$58=caml_string_of_jsbytes(""), cst$59=caml_string_of_jsbytes("\n"), cst_a_boolean=caml_string_of_jsbytes("a boolean"), cst_an_integer=caml_string_of_jsbytes("an integer"), cst_an_integer$0=caml_string_of_jsbytes("an integer"), cst_a_float=caml_string_of_jsbytes("a float"), cst_a_float$0=caml_string_of_jsbytes("a float"), cst$55=caml_string_of_jsbytes(""), cst$56=caml_string_of_jsbytes(" "), cst$57=caml_string_of_jsbytes(""), cst_one_of=caml_string_of_jsbytes("one of: "), cst_Arg_Expand_is_is_only_allo= caml_string_of_jsbytes ("Arg.Expand is is only allowed with Arg.parse_and_expand_argv_dynamic"), cst_no_argument=caml_string_of_jsbytes("no argument"), cst$54=caml_string_of_jsbytes("(?)"), cst_help$3=caml_string_of_jsbytes("--help"), cst_help$4=caml_string_of_jsbytes("-help"), cst_help$2=caml_string_of_jsbytes("-help"), cst_Display_this_list_of_optio= caml_string_of_jsbytes(" Display this list of options"), cst_help=caml_string_of_jsbytes("-help"), cst_help$1=caml_string_of_jsbytes("--help"), cst_Display_this_list_of_optio$0= caml_string_of_jsbytes(" Display this list of options"), cst_help$0=caml_string_of_jsbytes("--help"), cst$51=caml_string_of_jsbytes("}"), cst$52=caml_string_of_jsbytes("|"), cst$53=caml_string_of_jsbytes("{"), cst_none=caml_string_of_jsbytes("<none>"), cst_Stdlib_Arg_Bad=caml_string_of_jsbytes("Stdlib.Arg.Bad"), cst_Stdlib_Arg_Help=caml_string_of_jsbytes("Stdlib.Arg.Help"), cst_Stdlib_Arg_Stop=caml_string_of_jsbytes("Stdlib.Arg.Stop"), cst$61=caml_string_of_jsbytes(""), cst_Fatal_error_out_of_memory_= caml_string_of_jsbytes ("Fatal error: out of memory in uncaught exception handler"), cst$65=caml_string_of_jsbytes(""), cst_Program_not_linked_with_g_= caml_string_of_jsbytes ("(Program not linked with -g, cannot print stack backtrace)\n"), cst_Raised_at=caml_string_of_jsbytes("Raised at"), cst_Re_raised_at=caml_string_of_jsbytes("Re-raised at"), cst_Raised_by_primitive_operat= caml_string_of_jsbytes("Raised by primitive operation at"), cst_Called_from=caml_string_of_jsbytes("Called from"), cst_inlined=caml_string_of_jsbytes(" (inlined)"), cst$64=caml_string_of_jsbytes(""), partial=[4,0,0,0,[12,45,[4,0,0,0,0]]], cst_Out_of_memory=caml_string_of_jsbytes("Out of memory"), cst_Stack_overflow=caml_string_of_jsbytes("Stack overflow"), cst_Pattern_matching_failed= caml_string_of_jsbytes("Pattern matching failed"), cst_Assertion_failed=caml_string_of_jsbytes("Assertion failed"), cst_Undefined_recursive_module= caml_string_of_jsbytes("Undefined recursive module"), cst$62=caml_string_of_jsbytes(""), cst$63=caml_string_of_jsbytes(""), cst$60=caml_string_of_jsbytes("_"), locfmt= [0, [11, caml_string_of_jsbytes('File "'), [2, 0, [11, caml_string_of_jsbytes('", line '), [4, 0, 0, 0, [11, caml_string_of_jsbytes(", characters "), [4, 0, 0, 0, [12,45,[4,0,0,0,[11,caml_string_of_jsbytes(": "),[2,0,0]]]]]]]]]], caml_string_of_jsbytes('File "%s", line %d, characters %d-%d: %s')], cst_Fun_Finally_raised=caml_string_of_jsbytes("Fun.Finally_raised: "), cst_Stdlib_Fun_Finally_raised= caml_string_of_jsbytes("Stdlib.Fun.Finally_raised"), cst_Digest_from_hex$0=caml_string_of_jsbytes("Digest.from_hex"), cst_Digest_from_hex=caml_string_of_jsbytes("Digest.from_hex"), cst_Digest_to_hex=caml_string_of_jsbytes("Digest.to_hex"), cst_Digest_substring=caml_string_of_jsbytes("Digest.substring"), cst_Random_int64=caml_string_of_jsbytes("Random.int64"), cst_Random_int32=caml_string_of_jsbytes("Random.int32"), cst_Random_full_int=caml_string_of_jsbytes("Random.full_int"), cst_Random_int=caml_string_of_jsbytes("Random.int"), cst_x$1=caml_string_of_jsbytes("x"), cst_Hashtbl_unsupported_hash_t= caml_string_of_jsbytes("Hashtbl: unsupported hash table format"), cst_OCAMLRUNPARAM=caml_string_of_jsbytes("OCAMLRUNPARAM"), cst_CAMLRUNPARAM=caml_string_of_jsbytes("CAMLRUNPARAM"), cst$66=caml_string_of_jsbytes(""), cst_Weak_Make_hash_bucket_cann= caml_string_of_jsbytes("Weak.Make: hash bucket cannot grow more"), cst_Weak_fill=caml_string_of_jsbytes("Weak.fill"), cst_Weak_blit=caml_string_of_jsbytes("Weak.blit"), cst_Weak_check=caml_string_of_jsbytes("Weak.check"), cst_Weak_get_copy=caml_string_of_jsbytes("Weak.get_copy"), cst_Weak_get=caml_string_of_jsbytes("Weak.get"), cst_Weak_set=caml_string_of_jsbytes("Weak.set"), cst_Weak_create=caml_string_of_jsbytes("Weak.create"), cst$84=caml_string_of_jsbytes(""), cst$85=caml_string_of_jsbytes(""), cst$83=caml_string_of_jsbytes("."), cst$80=caml_string_of_jsbytes(">"), cst$81=caml_string_of_jsbytes("<\/"), cst$82=caml_string_of_jsbytes(""), cst$77=caml_string_of_jsbytes(">"), cst$78=caml_string_of_jsbytes("<"), cst$79=caml_string_of_jsbytes(""), cst$76=caml_string_of_jsbytes("\n"), cst_Format_pp_set_geometry= caml_string_of_jsbytes("Format.pp_set_geometry: "), cst$72=caml_string_of_jsbytes(""), cst$73=caml_string_of_jsbytes(""), cst$74=caml_string_of_jsbytes(""), cst$75=caml_string_of_jsbytes(""), cst$68=caml_string_of_jsbytes(""), cst$69=caml_string_of_jsbytes(""), cst$70=caml_string_of_jsbytes(""), cst$71=caml_string_of_jsbytes(""), cst$67=caml_string_of_jsbytes(""), cst_Stdlib_Format_String_tag= caml_string_of_jsbytes("Stdlib.Format.String_tag"), cst_end_of_input_not_found= caml_string_of_jsbytes("end of input not found"), cst_scanf_bad_conversion_a= caml_string_of_jsbytes('scanf: bad conversion "%a"'), cst_scanf_bad_conversion_t= caml_string_of_jsbytes('scanf: bad conversion "%t"'), cst_scanf_missing_reader=caml_string_of_jsbytes("scanf: missing reader"), cst_scanf_bad_conversion_custo= caml_string_of_jsbytes('scanf: bad conversion "%?" (custom converter)'), cst_scanf_bad_conversion= caml_string_of_jsbytes('scanf: bad conversion "%*"'), cst_scanf_bad_conversion$0= caml_string_of_jsbytes('scanf: bad conversion "%*"'), cst_scanf_bad_conversion$1= caml_string_of_jsbytes('scanf: bad conversion "%-"'), cst_scanf_bad_conversion$2= caml_string_of_jsbytes('scanf: bad conversion "%*"'), cst$91=caml_string_of_jsbytes('"'), cst$92=caml_string_of_jsbytes('"'), cst$89=caml_string_of_jsbytes('"'), cst$90=caml_string_of_jsbytes('"'), cst$88=caml_string_of_jsbytes('"'), cst_in_format=caml_string_of_jsbytes(' in format "'), cst_an=caml_string_of_jsbytes("an"), cst_x$2=caml_string_of_jsbytes("x"), cst_nfinity=caml_string_of_jsbytes("nfinity"), cst_digits=caml_string_of_jsbytes("digits"), cst_decimal_digits=caml_string_of_jsbytes("decimal digits"), cst_0b=caml_string_of_jsbytes("0b"), cst_0o=caml_string_of_jsbytes("0o"), cst_0u=caml_string_of_jsbytes("0u"), cst_0x=caml_string_of_jsbytes("0x"), cst_false$3=caml_string_of_jsbytes("false"), cst_true$3=caml_string_of_jsbytes("true"), cst_not_a_valid_float_in_hexad= caml_string_of_jsbytes("not a valid float in hexadecimal notation"), cst_no_dot_or_exponent_part_fo= caml_string_of_jsbytes("no dot or exponent part found in float token"), cst$87=caml_string_of_jsbytes("-"), cst_unnamed_function=caml_string_of_jsbytes("unnamed function"), cst_unnamed_character_string= caml_string_of_jsbytes("unnamed character string"), cst_unnamed_Stdlib_input_chann= caml_string_of_jsbytes("unnamed Stdlib input channel"), cst$86=caml_string_of_jsbytes("-"), cst_Stdlib_Scanf_Scan_failure= caml_string_of_jsbytes("Stdlib.Scanf.Scan_failure"), cst_binary=caml_string_of_jsbytes("binary"), cst_octal=caml_string_of_jsbytes("octal"), cst_hexadecimal=caml_string_of_jsbytes("hexadecimal"), cst_a_Char=caml_string_of_jsbytes("a Char"), cst_a_String=caml_string_of_jsbytes("a String"), cst$93=caml_string_of_jsbytes(""), cst_CamlinternalMod_update_mod= caml_string_of_jsbytes("CamlinternalMod.update_mod: not a module"), cst_CamlinternalMod_init_mod_n= caml_string_of_jsbytes("CamlinternalMod.init_mod: not a module"), cst$94=caml_string_of_jsbytes(""), cst$95=caml_string_of_jsbytes(""), cst$96=caml_string_of_jsbytes(""), cst$97=caml_string_of_jsbytes(""), cst$99=caml_string_of_jsbytes(""), cst$98=caml_string_of_jsbytes(""), cst_Illegal_character=caml_string_of_jsbytes("Illegal character "), cst_Filename_chop_extension= caml_string_of_jsbytes("Filename.chop_extension"), cst$127=caml_string_of_jsbytes(""), cst_Filename_chop_suffix=caml_string_of_jsbytes("Filename.chop_suffix"), cst$126=caml_string_of_jsbytes(""), cst_2_1$0=caml_string_of_jsbytes(" 2>&1"), cst_2$0=caml_string_of_jsbytes(" 2>"), cst$125=caml_string_of_jsbytes(""), cst$117=caml_string_of_jsbytes(" >"), cst$124=caml_string_of_jsbytes(""), cst$118=caml_string_of_jsbytes(" <"), cst$123=caml_string_of_jsbytes(""), cst$119=caml_string_of_jsbytes(" "), cst$120=caml_string_of_jsbytes(" "), cst$121=caml_string_of_jsbytes('"'), cst$122=caml_string_of_jsbytes(""), cst_Filename_quote_command_bad= caml_string_of_jsbytes("Filename.quote_command: bad file name "), cst$115=caml_string_of_jsbytes('"'), cst$116=caml_string_of_jsbytes('"'), cst$113=caml_string_of_jsbytes("./"), cst$112=caml_string_of_jsbytes(".\\"), cst$111=caml_string_of_jsbytes("../"), cst$110=caml_string_of_jsbytes("..\\"), cst_2_1=caml_string_of_jsbytes(" 2>&1"), cst_2=caml_string_of_jsbytes(" 2>"), cst$109=caml_string_of_jsbytes(""), cst$104=caml_string_of_jsbytes(" >"), cst$108=caml_string_of_jsbytes(""), cst$105=caml_string_of_jsbytes(" <"), cst$107=caml_string_of_jsbytes(""), cst$106=caml_string_of_jsbytes(" "), cst$103=caml_string_of_jsbytes("./"), cst$102=caml_string_of_jsbytes("../"), cst$101=caml_string_of_jsbytes(""), cst$100=caml_string_of_jsbytes(""), null$0=caml_string_of_jsbytes("/dev/null"), current_dir_name=caml_string_of_jsbytes("."), parent_dir_name=caml_string_of_jsbytes(".."), dir_sep=caml_string_of_jsbytes("/"), cst_TMPDIR=caml_string_of_jsbytes("TMPDIR"), cst_tmp=caml_string_of_jsbytes("/tmp"), quotequote=caml_string_of_jsbytes("'\\''"), null$1=caml_string_of_jsbytes("NUL"), current_dir_name$0=caml_string_of_jsbytes("."), parent_dir_name$0=caml_string_of_jsbytes(".."), dir_sep$0=caml_string_of_jsbytes("\\"), cst_TEMP=caml_string_of_jsbytes("TEMP"), cst$114=caml_string_of_jsbytes("."), null$2=caml_string_of_jsbytes("/dev/null"), current_dir_name$1=caml_string_of_jsbytes("."), parent_dir_name$1=caml_string_of_jsbytes(".."), dir_sep$1=caml_string_of_jsbytes("/"), cst_Cygwin=caml_string_of_jsbytes("Cygwin"), cst_Win32=caml_string_of_jsbytes("Win32"), zero$4=[254,0.,0.], one$4=[254,1.,0.], i=[254,0.,1.], cst_Bigarray_array3_of_genarra= caml_string_of_jsbytes("Bigarray.array3_of_genarray"), cst_Bigarray_array2_of_genarra= caml_string_of_jsbytes("Bigarray.array2_of_genarray"), cst_Bigarray_array1_of_genarra= caml_string_of_jsbytes("Bigarray.array1_of_genarray"), cst_Bigarray_array0_of_genarra= caml_string_of_jsbytes("Bigarray.array0_of_genarray"), cst_Bigarray_Array3_of_array_n= caml_string_of_jsbytes("Bigarray.Array3.of_array: non-cubic data"), cst_Bigarray_Array3_of_array_n$0= caml_string_of_jsbytes("Bigarray.Array3.of_array: non-cubic data"), cst_Bigarray_Array2_of_array_n= caml_string_of_jsbytes("Bigarray.Array2.of_array: non-rectangular data"), cst_In_channel_input_all_chann= caml_string_of_jsbytes ("In_channel.input_all: channel content is larger than maximum string length"), Invalid_argument=global_data.Invalid_argument, Failure=global_data.Failure, Match_failure=global_data.Match_failure, Assert_failure=global_data.Assert_failure, Not_found=global_data.Not_found, Out_of_memory=global_data.Out_of_memory, Stack_overflow=global_data.Stack_overflow, Sys_error=global_data.Sys_error, End_of_file=global_data.End_of_file, Division_by_zero=global_data.Division_by_zero, Sys_blocked_io=global_data.Sys_blocked_io, Undefined_recursive_module=global_data.Undefined_recursive_module, _l_=[0,0,[0,6,0]], _k_=[0,0,[0,7,0]], _j_=[0,1,[0,3,[0,4,[0,6,0]]]], _i_=[0,1,[0,3,[0,4,[0,7,0]]]], _g_=[0,1], _h_=[0,0], _a_=runtime.caml_int64_create_lo_mi_hi(0,0,32752), _b_=runtime.caml_int64_create_lo_mi_hi(0,0,65520), _c_=runtime.caml_int64_create_lo_mi_hi(1,0,32752), _d_=runtime.caml_int64_create_lo_mi_hi(16777215,16777215,32751), _e_=runtime.caml_int64_create_lo_mi_hi(0,0,16), _f_=runtime.caml_int64_create_lo_mi_hi(0,0,15536), _n_=[0,caml_string_of_jsbytes("obj.ml"),95,4], _r_=[0,caml_string_of_jsbytes("seq.ml"),596,4], _x_=[0,caml_string_of_jsbytes("uchar.ml"),88,18], _w_=[0,caml_string_of_jsbytes("uchar.ml"),91,7], _v_=[0,caml_string_of_jsbytes("uchar.ml"),80,18], _u_=[0,caml_string_of_jsbytes("uchar.ml"),85,7], _A_=[0,0,0], _G_=[0,caml_string_of_jsbytes("bytes.ml"),808,20], _F_=[0,caml_string_of_jsbytes("bytes.ml"),819,9], _E_=[0,caml_string_of_jsbytes("bytes.ml"),754,20], _D_=[0,caml_string_of_jsbytes("bytes.ml"),765,9], _C_=[0,caml_string_of_jsbytes("bytes.ml"),642,20], _B_=[0,caml_string_of_jsbytes("bytes.ml"),667,9], _H_=[0,caml_string_of_jsbytes("array.ml"),322,4], _J_=[0,caml_string_of_jsbytes("float.ml"),395,6], _I_=[0,caml_string_of_jsbytes("float.ml"),222,14], _U_=runtime.caml_int64_create_lo_mi_hi(16777215,16777215,65535), _T_=runtime.caml_int64_create_lo_mi_hi(0,0,0), _S_=runtime.caml_int64_create_lo_mi_hi(1,0,0), _R_=runtime.caml_int64_create_lo_mi_hi(1,0,0), _V_=[0,0,0,0], _W_=[0,0,0], _X_=[0,caml_string_of_jsbytes("set.ml"),570,18], _Y_=[0,0,0,0], _Z_=[0,caml_string_of_jsbytes("map.ml"),400,10], ___=[0,0,0], _$_=[0,caml_string_of_jsbytes("stream.ml"),53,12], _aa_=[0,0], _ab_=[0,caml_string_of_jsbytes("stream.ml"),82,12], _af_=[0,caml_string_of_jsbytes("buffer.ml"),231,9], _ae_=[0,caml_string_of_jsbytes("buffer.ml"),212,2], _ad_=[0,caml_string_of_jsbytes("buffer.ml"),93,2], _ac_=[0,caml_string_of_jsbytes("buffer.ml"),94,2], _ah_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),850,23], _as_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),814,21], _ak_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),815,21], _at_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),818,21], _al_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),819,21], _au_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),822,19], _am_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),823,19], _av_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),826,22], _an_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),827,22], _aw_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),831,30], _ao_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),832,30], _aq_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),836,26], _ai_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),837,26], _ar_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),846,28], _aj_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),847,28], _ap_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),851,23], _ay_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),1558,4], _az_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),1626,39], _aA_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),1649,31], _aB_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),1650,31], _aC_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),1830,8], _a6_= [0, [11, caml_string_of_jsbytes("bad input: format type mismatch between "), [3,0,[11,caml_string_of_jsbytes(" and "),[3,0,0]]]], caml_string_of_jsbytes ("bad input: format type mismatch between %S and %S")], _a5_= [0, [11, caml_string_of_jsbytes("bad input: format type mismatch between "), [3,0,[11,caml_string_of_jsbytes(" and "),[3,0,0]]]], caml_string_of_jsbytes ("bad input: format type mismatch between %S and %S")], _aI_= [0, [11, caml_string_of_jsbytes("invalid format "), [3, 0, [11, caml_string_of_jsbytes(": at character number "), [4,0,0,0,[11,caml_string_of_jsbytes(", duplicate flag "),[1,0]]]]]], caml_string_of_jsbytes ("invalid format %S: at character number %d, duplicate flag %C")], _aJ_=[0,1,0], _aK_=[0,0], _aL_=[1,0], _aM_=[1,1], _aO_=[1,1], _aN_=[1,1], _aS_= [0, [11, caml_string_of_jsbytes("invalid format "), [3, 0, [11, caml_string_of_jsbytes(": at character number "), [4, 0, 0, 0, [11, caml_string_of_jsbytes(", flag "), [1, [11, caml_string_of_jsbytes(" is only allowed after the '"), [12, 37, [11, caml_string_of_jsbytes("', before padding and precision"), 0]]]]]]]]], caml_string_of_jsbytes ("invalid format %S: at character number %d, flag %C is only allowed after the '%%', before padding and precision")], _aP_= [0, [11, caml_string_of_jsbytes("invalid format "), [3, 0, [11, caml_string_of_jsbytes(": at character number "), [4, 0, 0, 0, [11, caml_string_of_jsbytes(', invalid conversion "'), [12,37,[0,[12,34,0]]]]]]]], caml_string_of_jsbytes ('invalid format %S: at character number %d, invalid conversion "%%%c"')], _aQ_=[0,0], _aR_=[0,0], _aT_=[0,[12,64,0]], _aU_=[0,caml_string_of_jsbytes("@ "),1,0], _aV_=[0,caml_string_of_jsbytes("@,"),0,0], _aW_=[2,60], _aX_= [0, [11, caml_string_of_jsbytes("invalid format "), [3, 0, [11, caml_string_of_jsbytes(": '"), [12, 37, [11, caml_string_of_jsbytes ("' alone is not accepted in character sets, use "), [12, 37, [12, 37, [11, caml_string_of_jsbytes(" instead at position "), [4,0,0,0,[12,46,0]]]]]]]]]], caml_string_of_jsbytes ("invalid format %S: '%%' alone is not accepted in character sets, use %%%% instead at position %d.")], _aY_= [0, [11, caml_string_of_jsbytes("invalid format "), [3, 0, [11, caml_string_of_jsbytes(": integer "), [4, 0, 0, 0, [11, caml_string_of_jsbytes(" is greater than the limit "), [4,0,0,0,0]]]]]], caml_string_of_jsbytes ("invalid format %S: integer %d is greater than the limit %d")], _aZ_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),2837,11], _a0_= [0, [11, caml_string_of_jsbytes("invalid format "), [3, 0, [11, caml_string_of_jsbytes(': unclosed sub-format, expected "'), [12, 37, [0, [11,caml_string_of_jsbytes('" at character number '),[4,0,0,0,0]]]]]]], caml_string_of_jsbytes ('invalid format %S: unclosed sub-format, expected "%%%c" at character number %d')], _a1_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),2899,34], _a2_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),2935,28], _a3_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),2957,11], _a4_= [0, [11, caml_string_of_jsbytes("invalid format "), [3, 0, [11, caml_string_of_jsbytes(": at character number "), [4, 0, 0, 0, [11, caml_string_of_jsbytes(", "), [2, 0, [11, caml_string_of_jsbytes(" is incompatible with '"), [0,[11,caml_string_of_jsbytes("' in sub-format "),[3,0,0]]]]]]]]]], caml_string_of_jsbytes ("invalid format %S: at character number %d, %s is incompatible with '%c' in sub-format %S")], _aH_= [0, [11, caml_string_of_jsbytes("invalid format "), [3, 0, [11, caml_string_of_jsbytes(": at character number "), [4, 0, 0, 0, [11, caml_string_of_jsbytes(", "), [2,0,[11,caml_string_of_jsbytes(" expected, read "),[1,0]]]]]]]], caml_string_of_jsbytes ("invalid format %S: at character number %d, %s expected, read %C")], _aG_= [0, [11, caml_string_of_jsbytes("invalid format "), [3, 0, [11, caml_string_of_jsbytes(": at character number "), [4, 0, 0, 0, [11, caml_string_of_jsbytes(", '"), [0,[11,caml_string_of_jsbytes("' without "),[2,0,0]]]]]]]], caml_string_of_jsbytes ("invalid format %S: at character number %d, '%c' without %s")], _aF_= [0, [11, caml_string_of_jsbytes("invalid format "), [3, 0, [11, caml_string_of_jsbytes(": at character number "), [4,0,0,0,[11,caml_string_of_jsbytes(", "),[2,0,0]]]]]], caml_string_of_jsbytes("invalid format %S: at character number %d, %s")], _aE_= [0, [11,caml_string_of_jsbytes("invalid box description "),[3,0,0]], caml_string_of_jsbytes("invalid box description %S")], _aD_=[0,0,4], _ax_=[0,103], _ag_=[0,0,0], _bq_=[0,[2,0,[0,0]],caml_string_of_jsbytes("%s%c")], _bk_=[0,[2,0,0],caml_string_of_jsbytes("%s")], _bl_=[0,[2,0,0],caml_string_of_jsbytes("%s")], _bi_=[0,[2,0,0],caml_string_of_jsbytes("%s")], _bj_=[0,[2,0,0],caml_string_of_jsbytes("%s")], _bg_=[0,[2,0,0],caml_string_of_jsbytes("%s")], _bh_=[0,[2,0,0],caml_string_of_jsbytes("%s")], _ba_= [0, [2, 0, [11, caml_string_of_jsbytes(": unknown option '"), [2,0,[11,caml_string_of_jsbytes("'.\n"),0]]]], caml_string_of_jsbytes("%s: unknown option '%s'.\n")], _bd_= [0, [2, 0, [11, caml_string_of_jsbytes(": wrong argument '"), [2, 0, [11, caml_string_of_jsbytes("'; option '"), [2, 0, [11, caml_string_of_jsbytes("' expects "), [2,0,[11,caml_string_of_jsbytes(".\n"),0]]]]]]]], caml_string_of_jsbytes ("%s: wrong argument '%s'; option '%s' expects %s.\n")], _be_= [0, [2, 0, [11, caml_string_of_jsbytes(": option '"), [2,0,[11,caml_string_of_jsbytes("' needs an argument.\n"),0]]]], caml_string_of_jsbytes("%s: option '%s' needs an argument.\n")], _bf_= [0, [2, 0, [11, caml_string_of_jsbytes(": "), [2,0,[11,caml_string_of_jsbytes(".\n"),0]]]], caml_string_of_jsbytes("%s: %s.\n")], _bb_=[0,caml_string_of_jsbytes("-help")], _bc_=[0,caml_string_of_jsbytes("--help")], _a$_=[0,[2,0,0],caml_string_of_jsbytes("%s")], _a__=[0,[2,0,[12,10,0]],caml_string_of_jsbytes("%s\n")], _a9_=[0,caml_string_of_jsbytes("-help")], _a7_= [0, [11,caml_string_of_jsbytes(" "),[2,0,[12,32,[2,0,[12,10,0]]]]], caml_string_of_jsbytes(" %s %s\n")], _a8_= [0, [11,caml_string_of_jsbytes(" "),[2,0,[12,32,[2,0,[2,0,[12,10,0]]]]]], caml_string_of_jsbytes(" %s %s%s\n")], _bv_= [0, [11,caml_string_of_jsbytes(", "),[2,0,[2,0,0]]], caml_string_of_jsbytes(", %s%s")], _bH_= [0, [11,caml_string_of_jsbytes("Fatal error: exception "),[2,0,[12,10,0]]], caml_string_of_jsbytes("Fatal error: exception %s\n")], _bI_= [0, [11, caml_string_of_jsbytes ("Fatal error in uncaught exception handler: exception "), [2,0,[12,10,0]]], caml_string_of_jsbytes ("Fatal error in uncaught exception handler: exception %s\n")], _bG_= [0, [11,caml_string_of_jsbytes("Fatal error: exception "),[2,0,[12,10,0]]], caml_string_of_jsbytes("Fatal error: exception %s\n")], _bE_=[0,[2,0,[12,10,0]],caml_string_of_jsbytes("%s\n")], _bC_=[0,[2,0,[12,10,0]],caml_string_of_jsbytes("%s\n")], _bD_= [0, [11, caml_string_of_jsbytes ("(Program not linked with -g, cannot print stack backtrace)\n"), 0], caml_string_of_jsbytes ("(Program not linked with -g, cannot print stack backtrace)\n")], _bA_= [0, [2, 0, [12, 32, [2, 0, [11, caml_string_of_jsbytes(' in file "'), [2, 0, [12, 34, [2, 0, [11, caml_string_of_jsbytes(", line "), [4,0,0,0,[11,caml_string_of_jsbytes(", characters "),partial]]]]]]]]]], caml_string_of_jsbytes ('%s %s in file "%s"%s, line %d, characters %d-%d')], _bB_= [0, [2,0,[11,caml_string_of_jsbytes(" unknown location"),0]], caml_string_of_jsbytes("%s unknown location")], _bz_= [0, [11,caml_string_of_jsbytes("Uncaught exception: "),[2,0,[12,10,0]]], caml_string_of_jsbytes("Uncaught exception: %s\n")], _by_= [0, [11,caml_string_of_jsbytes("Uncaught exception: "),[2,0,[12,10,0]]], caml_string_of_jsbytes("Uncaught exception: %s\n")], _bw_=[0,[12,40,[2,0,[2,0,[12,41,0]]]],caml_string_of_jsbytes("(%s%s)")], _bx_=[0,[12,40,[2,0,[12,41,0]]],caml_string_of_jsbytes("(%s)")], _bu_=[0,[4,0,0,0,0],caml_string_of_jsbytes("%d")], _bt_=[0,[3,0,0],caml_string_of_jsbytes("%S")], _bF_= [0, caml_string_of_jsbytes(""), caml_string_of_jsbytes ("(Cannot print locations:\n bytecode executable program file not found)"), caml_string_of_jsbytes ("(Cannot print locations:\n bytecode executable program file appears to be corrupt)"), caml_string_of_jsbytes ("(Cannot print locations:\n bytecode executable program file has wrong magic number)"), caml_string_of_jsbytes ("(Cannot print locations:\n bytecode executable program file cannot be opened;\n -- too many open files. Try running with OCAMLRUNPARAM=b=2)")], _bP_= [0, [11, caml_string_of_jsbytes("minor_collections: "), [4,0,0,0,[12,10,0]]], caml_string_of_jsbytes("minor_collections: %d\n")], _bQ_= [0, [11, caml_string_of_jsbytes("major_collections: "), [4,0,0,0,[12,10,0]]], caml_string_of_jsbytes("major_collections: %d\n")], _bR_= [0, [11, caml_string_of_jsbytes("compactions: "), [4,0,0,0,[12,10,0]]], caml_string_of_jsbytes("compactions: %d\n")], _bS_= [0, [11, caml_string_of_jsbytes("forced_major_collections: "), [4,0,0,0,[12,10,0]]], caml_string_of_jsbytes("forced_major_collections: %d\n")], _bT_=[0,[12,10,0],caml_string_of_jsbytes("\n")], _bU_=[0,[8,[0,0,0],0,[0,0],0],caml_string_of_jsbytes("%.0f")], _bV_= [0, [11, caml_string_of_jsbytes("minor_words: "), [8,[0,0,0],[1,1],[0,0],[12,10,0]]], caml_string_of_jsbytes("minor_words: %*.0f\n")], _bW_= [0, [11, caml_string_of_jsbytes("promoted_words: "), [8,[0,0,0],[1,1],[0,0],[12,10,0]]], caml_string_of_jsbytes("promoted_words: %*.0f\n")], _bX_= [0, [11, caml_string_of_jsbytes("major_words: "), [8,[0,0,0],[1,1],[0,0],[12,10,0]]], caml_string_of_jsbytes("major_words: %*.0f\n")], _bY_=[0,[12,10,0],caml_string_of_jsbytes("\n")], _bZ_=[0,[4,0,0,0,0],caml_string_of_jsbytes("%d")], _b0_= [0, [11,caml_string_of_jsbytes("top_heap_words: "),[4,0,[1,1],0,[12,10,0]]], caml_string_of_jsbytes("top_heap_words: %*d\n")], _b1_= [0, [11,caml_string_of_jsbytes("heap_words: "),[4,0,[1,1],0,[12,10,0]]], caml_string_of_jsbytes("heap_words: %*d\n")], _b2_= [0, [11,caml_string_of_jsbytes("live_words: "),[4,0,[1,1],0,[12,10,0]]], caml_string_of_jsbytes("live_words: %*d\n")], _b3_= [0, [11,caml_string_of_jsbytes("free_words: "),[4,0,[1,1],0,[12,10,0]]], caml_string_of_jsbytes("free_words: %*d\n")], _b4_= [0, [11,caml_string_of_jsbytes("largest_free: "),[4,0,[1,1],0,[12,10,0]]], caml_string_of_jsbytes("largest_free: %*d\n")], _b5_= [0, [11,caml_string_of_jsbytes("fragments: "),[4,0,[1,1],0,[12,10,0]]], caml_string_of_jsbytes("fragments: %*d\n")], _b6_=[0,[12,10,0],caml_string_of_jsbytes("\n")], _b7_= [0, [11,caml_string_of_jsbytes("live_blocks: "),[4,0,0,0,[12,10,0]]], caml_string_of_jsbytes("live_blocks: %d\n")], _b8_= [0, [11,caml_string_of_jsbytes("free_blocks: "),[4,0,0,0,[12,10,0]]], caml_string_of_jsbytes("free_blocks: %d\n")], _b9_= [0, [11,caml_string_of_jsbytes("heap_chunks: "),[4,0,0,0,[12,10,0]]], caml_string_of_jsbytes("heap_chunks: %d\n")], _cf_=runtime.caml_int64_create_lo_mi_hi(1,0,0), _cg_=runtime.caml_int64_create_lo_mi_hi(0,0,0), _ch_= [0, 987910699, 495797812, 364182224, 414272206, 318284740, 990407751, 383018966, 270373319, 840823159, 24560019, 536292337, 512266505, 189156120, 730249596, 143776328, 51606627, 140166561, 366354223, 1003410265, 700563762, 981890670, 913149062, 526082594, 1021425055, 784300257, 667753350, 630144451, 949649812, 48546892, 415514493, 258888527, 511570777, 89983870, 283659902, 308386020, 242688715, 482270760, 865188196, 1027664170, 207196989, 193777847, 619708188, 671350186, 149669678, 257044018, 87658204, 558145612, 183450813, 28133145, 901332182, 710253903, 510646120, 652377910, 409934019, 801085050], _ck_=[0,0], _cq_=[3,0,3], _cp_=[1,caml_string_of_jsbytes("max_indent < 2")], _cn_=[1,caml_string_of_jsbytes("margin <= max_indent")], _co_=[0,0], _cm_=[0,caml_string_of_jsbytes("")], _cl_=[0,caml_string_of_jsbytes(""),0,caml_string_of_jsbytes("")], _cG_=[0,91], _cF_=[0,123], _cH_=[0,caml_string_of_jsbytes("scanf.ml"),1453,13], _cI_=[0,[3,0,[10,0]],caml_string_of_jsbytes("%S%!")], _cE_=[0,37,caml_string_of_jsbytes("")], _cD_= [0, [11, caml_string_of_jsbytes("scanf: bad input at char number "), [4,3,0,0,[11,caml_string_of_jsbytes(": "),[2,0,0]]]], caml_string_of_jsbytes("scanf: bad input at char number %i: %s")], _cC_= [0, [11, caml_string_of_jsbytes("the character "), [1,[11,caml_string_of_jsbytes(" cannot start a boolean"),0]]], caml_string_of_jsbytes("the character %C cannot start a boolean")], _cB_= [0, [11, caml_string_of_jsbytes("bad character hexadecimal encoding \\"), [0,[0,0]]], caml_string_of_jsbytes("bad character hexadecimal encoding \\%c%c")], _cA_= [0, [11, caml_string_of_jsbytes("bad character decimal encoding \\"), [0,[0,[0,0]]]], caml_string_of_jsbytes("bad character decimal encoding \\%c%c%c")], _cz_= [0, [11, caml_string_of_jsbytes("character "), [1, [11, caml_string_of_jsbytes(" is not a valid "), [2,0,[11,caml_string_of_jsbytes(" digit"),0]]]]], caml_string_of_jsbytes("character %C is not a valid %s digit")], _cy_= [0, [11, caml_string_of_jsbytes("character "), [1,[11,caml_string_of_jsbytes(" is not a decimal digit"),0]]], caml_string_of_jsbytes("character %C is not a decimal digit")], _cx_=[0,caml_string_of_jsbytes("scanf.ml"),555,9], _cw_= [0, [11,caml_string_of_jsbytes("invalid boolean '"),[2,0,[12,39,0]]], caml_string_of_jsbytes("invalid boolean '%s'")], _cv_= [0, [11, caml_string_of_jsbytes("looking for "), [1,[11,caml_string_of_jsbytes(", found "),[1,0]]]], caml_string_of_jsbytes("looking for %C, found %C")], _cu_= [0, [11, caml_string_of_jsbytes("scanning of "), [2, 0, [11, caml_string_of_jsbytes (" failed: premature end of file occurred before end of token"), 0]]], caml_string_of_jsbytes ("scanning of %s failed: premature end of file occurred before end of token")], _ct_= [0, [11, caml_string_of_jsbytes("scanning of "), [2, 0, [11, caml_string_of_jsbytes (" failed: the specified length was too short for token"), 0]]], caml_string_of_jsbytes ("scanning of %s failed: the specified length was too short for token")], _cs_= [0, [11,caml_string_of_jsbytes("illegal escape character "),[1,0]], caml_string_of_jsbytes("illegal escape character %C")], _cP_=[0,caml_string_of_jsbytes("camlinternalOO.ml"),439,17], _cO_=[0,caml_string_of_jsbytes("camlinternalOO.ml"),421,13], _cN_=[0,caml_string_of_jsbytes("camlinternalOO.ml"),418,13], _cM_=[0,caml_string_of_jsbytes("camlinternalOO.ml"),415,13], _cL_=[0,caml_string_of_jsbytes("camlinternalOO.ml"),412,13], _cK_=[0,caml_string_of_jsbytes("camlinternalOO.ml"),409,13], _cJ_=[0,caml_string_of_jsbytes("camlinternalOO.ml"),281,50], _cQ_=[0,caml_string_of_jsbytes("camlinternalMod.ml"),72,5], _cR_=[0,caml_string_of_jsbytes("camlinternalMod.ml"),81,2], _cU_=[0,0], _cT_=[0,0], _cS_=[0,0], _cZ_=[0,7,0], _cY_=[0,1,[0,3,[0,5,0]]], _cX_=[0,[2,0,[4,6,[0,2,6],0,[2,0,0]]],caml_string_of_jsbytes("%s%06x%s")], _cW_=[0,caml_string_of_jsbytes('"'),0], _c0_=[254,0.,0.], _c1_=[0,0]; function erase_rel(param) {if(typeof param === "number") return 0; else switch(param[0]) {case 0:var rest=param[1];return [0,erase_rel(rest)]; case 1:var rest$0=param[1];return [1,erase_rel(rest$0)]; case 2:var rest$1=param[1];return [2,erase_rel(rest$1)]; case 3:var rest$2=param[1];return [3,erase_rel(rest$2)]; case 4:var rest$3=param[1];return [4,erase_rel(rest$3)]; case 5:var rest$4=param[1];return [5,erase_rel(rest$4)]; case 6:var rest$5=param[1];return [6,erase_rel(rest$5)]; case 7:var rest$6=param[1];return [7,erase_rel(rest$6)]; case 8: var rest$7=param[2],ty=param[1];return [8,ty,erase_rel(rest$7)]; case 9: var rest$8=param[3],ty1=param[1]; return [9,ty1,ty1,erase_rel(rest$8)]; case 10:var rest$9=param[1];return [10,erase_rel(rest$9)]; case 11:var rest$10=param[1];return [11,erase_rel(rest$10)]; case 12:var rest$11=param[1];return [12,erase_rel(rest$11)]; case 13:var rest$12=param[1];return [13,erase_rel(rest$12)]; default:var rest$13=param[1];return [14,erase_rel(rest$13)]}} function concat_fmtty(fmtty1,fmtty2) {if(typeof fmtty1 === "number") return fmtty2; else switch(fmtty1[0]) {case 0:var rest=fmtty1[1];return [0,concat_fmtty(rest,fmtty2)]; case 1:var rest$0=fmtty1[1];return [1,concat_fmtty(rest$0,fmtty2)]; case 2:var rest$1=fmtty1[1];return [2,concat_fmtty(rest$1,fmtty2)]; case 3:var rest$2=fmtty1[1];return [3,concat_fmtty(rest$2,fmtty2)]; case 4:var rest$3=fmtty1[1];return [4,concat_fmtty(rest$3,fmtty2)]; case 5:var rest$4=fmtty1[1];return [5,concat_fmtty(rest$4,fmtty2)]; case 6:var rest$5=fmtty1[1];return [6,concat_fmtty(rest$5,fmtty2)]; case 7:var rest$6=fmtty1[1];return [7,concat_fmtty(rest$6,fmtty2)]; case 8: var rest$7=fmtty1[2],ty=fmtty1[1]; return [8,ty,concat_fmtty(rest$7,fmtty2)]; case 9: var rest$8=fmtty1[3],ty2=fmtty1[2],ty1=fmtty1[1]; return [9,ty1,ty2,concat_fmtty(rest$8,fmtty2)]; case 10:var rest$9=fmtty1[1];return [10,concat_fmtty(rest$9,fmtty2)]; case 11: var rest$10=fmtty1[1];return [11,concat_fmtty(rest$10,fmtty2)]; case 12: var rest$11=fmtty1[1];return [12,concat_fmtty(rest$11,fmtty2)]; case 13: var rest$12=fmtty1[1];return [13,concat_fmtty(rest$12,fmtty2)]; default: var rest$13=fmtty1[1];return [14,concat_fmtty(rest$13,fmtty2)]}} function concat_fmt(fmt1,fmt2) {if(typeof fmt1 === "number") return fmt2; else switch(fmt1[0]) {case 0:var rest=fmt1[1];return [0,concat_fmt(rest,fmt2)]; case 1:var rest$0=fmt1[1];return [1,concat_fmt(rest$0,fmt2)]; case 2: var rest$1=fmt1[2],pad=fmt1[1]; return [2,pad,concat_fmt(rest$1,fmt2)]; case 3: var rest$2=fmt1[2],pad$0=fmt1[1]; return [3,pad$0,concat_fmt(rest$2,fmt2)]; case 4: var rest$3=fmt1[4],prec=fmt1[3],pad$1=fmt1[2],iconv=fmt1[1]; return [4,iconv,pad$1,prec,concat_fmt(rest$3,fmt2)]; case 5: var rest$4=fmt1[4],prec$0=fmt1[3],pad$2=fmt1[2],iconv$0=fmt1[1]; return [5,iconv$0,pad$2,prec$0,concat_fmt(rest$4,fmt2)]; case 6: var rest$5=fmt1[4],prec$1=fmt1[3],pad$3=fmt1[2],iconv$1=fmt1[1]; return [6,iconv$1,pad$3,prec$1,concat_fmt(rest$5,fmt2)]; case 7: var rest$6=fmt1[4],prec$2=fmt1[3],pad$4=fmt1[2],iconv$2=fmt1[1]; return [7,iconv$2,pad$4,prec$2,concat_fmt(rest$6,fmt2)]; case 8: var rest$7=fmt1[4],prec$3=fmt1[3],pad$5=fmt1[2],fconv=fmt1[1]; return [8,fconv,pad$5,prec$3,concat_fmt(rest$7,fmt2)]; case 9: var rest$8=fmt1[2],pad$6=fmt1[1]; return [9,pad$6,concat_fmt(rest$8,fmt2)]; case 10:var rest$9=fmt1[1];return [10,concat_fmt(rest$9,fmt2)]; case 11: var rest$10=fmt1[2],str=fmt1[1]; return [11,str,concat_fmt(rest$10,fmt2)]; case 12: var rest$11=fmt1[2],chr=fmt1[1]; return [12,chr,concat_fmt(rest$11,fmt2)]; case 13: var rest$12=fmt1[3],fmtty=fmt1[2],pad$7=fmt1[1]; return [13,pad$7,fmtty,concat_fmt(rest$12,fmt2)]; case 14: var rest$13=fmt1[3],fmtty$0=fmt1[2],pad$8=fmt1[1]; return [14,pad$8,fmtty$0,concat_fmt(rest$13,fmt2)]; case 15:var rest$14=fmt1[1];return [15,concat_fmt(rest$14,fmt2)]; case 16:var rest$15=fmt1[1];return [16,concat_fmt(rest$15,fmt2)]; case 17: var rest$16=fmt1[2],fmting_lit=fmt1[1]; return [17,fmting_lit,concat_fmt(rest$16,fmt2)]; case 18: var rest$17=fmt1[2],fmting_gen=fmt1[1]; return [18,fmting_gen,concat_fmt(rest$17,fmt2)]; case 19:var rest$18=fmt1[1];return [19,concat_fmt(rest$18,fmt2)]; case 20: var rest$19=fmt1[3],char_set=fmt1[2],width_opt=fmt1[1]; return [20,width_opt,char_set,concat_fmt(rest$19,fmt2)]; case 21: var rest$20=fmt1[2],counter=fmt1[1]; return [21,counter,concat_fmt(rest$20,fmt2)]; case 22:var rest$21=fmt1[1];return [22,concat_fmt(rest$21,fmt2)]; case 23: var rest$22=fmt1[2],ign=fmt1[1]; return [23,ign,concat_fmt(rest$22,fmt2)]; default: var rest$23=fmt1[3],f=fmt1[2],arity=fmt1[1]; return [24,arity,f,concat_fmt(rest$23,fmt2)]}} var CamlinternalFormatBasics=[0,concat_fmtty,erase_rel,concat_fmt]; caml_register_global (761,CamlinternalFormatBasics,"CamlinternalFormatBasics"); function make(v){return [0,v]} function get(r){return r[1]} function set(r,v){r[1] = v;return 0} function exchange(r,v){var cur=r[1];r[1] = v;return cur} function compare_and_set(r,seen,v) {var cur=r[1];return cur === seen?(r[1] = v,1):0} function fetch_and_add(r,n){var cur=r[1];r[1] = cur + n | 0;return cur} function incr(r){fetch_and_add(r,1);return 0} function decr(r){fetch_and_add(r,-1);return 0} var include= [0,make,get,set,exchange,compare_and_set,fetch_and_add,incr,decr]; caml_register_global(762,include,"CamlinternalAtomic"); function failwith(s){throw [0,Failure,s]} function invalid_arg(s){throw [0,Invalid_argument,s]} var Exit=[248,cst_Stdlib_Exit,caml_fresh_oo_id(0)]; function min(x,y){return caml_lessequal(x,y)?x:y} function max(x,y){return caml_greaterequal(x,y)?x:y} function abs(x){return 0 <= x?x:- x | 0} function lnot(x){return x ^ -1} var infinity=caml_int64_float_of_bits(_a_), neg_infinity=caml_int64_float_of_bits(_b_), nan=caml_int64_float_of_bits(_c_), max_float=caml_int64_float_of_bits(_d_), min_float=caml_int64_float_of_bits(_e_), epsilon=caml_int64_float_of_bits(_f_), max_int=2147483647, min_int=-2147483648; function cat(s1,s2) {var l1=caml_ml_string_length(s1), l2=caml_ml_string_length(s2), s=caml_create_bytes(l1 + l2 | 0); caml_blit_string(s1,0,s,0,l1); caml_blit_string(s2,0,s,l1,l2); return caml_string_of_bytes(s)} function char_of_int(n) {if(0 <= n && ! (255 < n))return n;return invalid_arg(cst_char_of_int)} function string_of_bool(b){return b?cst_true:cst_false} function bool_of_string(param) {return caml_string_notequal(param,cst_false$0) ?caml_string_notequal(param,cst_true$0) ?invalid_arg(cst_bool_of_string) :1 :0} function bool_of_string_opt(param) {return caml_string_notequal(param,cst_false$1) ?caml_string_notequal(param,cst_true$1)?0:_g_ :_h_} function string_of_int(n){return caml_string_of_jsbytes("" + n)} function int_of_string_opt(s) {try {var _EE_=[0,caml_int_of_string(s)];return _EE_} catch(_EF_) {_EF_ = caml_wrap_exception(_EF_); if(_EF_[1] === Failure)return 0; throw _EF_}} function valid_float_lexem(s) {var l=caml_ml_string_length(s),i=0; for(;;) {if(l <= i)return cat(s,cst); var match=caml_string_get(s,i),switch$0=0; if(48 <= match) {if(! (58 <= match))switch$0 = 1} else if(45 === match)switch$0 = 1; if(switch$0){var i$0=i + 1 | 0,i=i$0;continue} return s}} function to_string(f) {return valid_float_lexem(caml_format_float(cst_12g,f))} function of_string_opt(s) {try {var _EC_=[0,caml_float_of_string(s)];return _EC_} catch(_ED_) {_ED_ = caml_wrap_exception(_ED_); if(_ED_[1] === Failure)return 0; throw _ED_}} function append(l1,l2) {if(l1){var tl=l1[2],hd=l1[1];return [0,hd,append(tl,l2)]}return l2} var stdin=caml_ml_open_descriptor_in(0), stdout=caml_ml_open_descriptor_out(1), stderr=caml_ml_open_descriptor_out(2); function open_gen(mode,perm,name) {var c=caml_ml_open_descriptor_out(caml_sys_open(name,mode,perm)); caml_ml_set_channel_name(c,name); return c} function open_text(name){return open_gen(_i_,438,name)} function open_bin(name){return open_gen(_j_,438,name)} function flush_all(param) {function iter(param) {var param$0=param; for(;;) {if(param$0) {var l=param$0[2],a=param$0[1]; try {caml_ml_flush(a)} catch(_EB_) {_EB_ = caml_wrap_exception(_EB_); if(_EB_[1] !== Sys_error)throw _EB_; var _EA_=_EB_} var param$0=l; continue} return 0}} return iter(runtime.caml_ml_out_channels_list(0))} function output_bytes(oc,s) {return caml_ml_output_bytes(oc,s,0,caml_ml_bytes_length(s))} function output_string(oc,s) {return caml_ml_output(oc,s,0,caml_ml_string_length(s))} function output(oc,s,ofs,len) {if (0 <= ofs && 0 <= len && ! ((caml_ml_bytes_length(s) - len | 0) < ofs)) return caml_ml_output_bytes(oc,s,ofs,len); return invalid_arg(cst_output)} function output_substring(oc,s,ofs,len) {if (0 <= ofs && 0 <= len && ! ((caml_ml_string_length(s) - len | 0) < ofs)) return caml_ml_output(oc,s,ofs,len); return invalid_arg(cst_output_substring)} function output_value(chan,v){return caml_output_value(chan,v,0)} function close(oc){caml_ml_flush(oc);return caml_ml_close_channel(oc)} function close_noerr(oc) {try {caml_ml_flush(oc)}catch(_Ez_){} try {var _Ex_=caml_ml_close_channel(oc);return _Ex_} catch(_Ey_){return 0}} function open_gen$0(mode,perm,name) {var c=caml_ml_open_descriptor_in(caml_sys_open(name,mode,perm)); caml_ml_set_channel_name(c,name); return c} function open_text$0(name){return open_gen$0(_k_,0,name)} function open_bin$0(name){return open_gen$0(_l_,0,name)} function input(ic,s,ofs,len) {if (0 <= ofs && 0 <= len && ! ((caml_ml_bytes_length(s) - len | 0) < ofs)) return caml_ml_input(ic,s,ofs,len); return invalid_arg(cst_input)} function unsafe_really_input(ic,s,ofs,len) {var ofs$0=ofs,len$0=len; for(;;) {if(0 < len$0) {var r=caml_ml_input(ic,s,ofs$0,len$0); if(0 === r)throw End_of_file; var len$1=len$0 - r | 0,ofs$1=ofs$0 + r | 0,ofs$0=ofs$1,len$0=len$1; continue} return 0}} function really_input(ic,s,ofs,len) {if (0 <= ofs && 0 <= len && ! ((caml_ml_bytes_length(s) - len | 0) < ofs)) return unsafe_really_input(ic,s,ofs,len); return invalid_arg(cst_really_input)} function really_input_string(ic,len) {var s=caml_create_bytes(len); really_input(ic,s,0,len); return caml_string_of_bytes(s)} function input_line(chan) {function build_result(buf,pos,param) {var pos$0=pos,param$0=param; for(;;) {if(param$0) {var tl=param$0[2],hd=param$0[1],len=caml_ml_bytes_length(hd); caml_blit_bytes(hd,0,buf,pos$0 - len | 0,len); var pos$1=pos$0 - len | 0,pos$0=pos$1,param$0=tl; continue} return buf}} var accu=0,len=0; for(;;) {var n=runtime.caml_ml_input_scan_line(chan); if(0 === n) {if(! accu)throw End_of_file; var _Ew_=build_result(caml_create_bytes(len),len,accu)} else {if(! (0 < n)) {var beg=caml_create_bytes(- n | 0); caml_ml_input(chan,beg,0,- n | 0); var len$1=len - n | 0,accu$0=[0,beg,accu],accu=accu$0,len=len$1; continue} var res=caml_create_bytes(n - 1 | 0); caml_ml_input(chan,res,0,n - 1 | 0); caml_ml_input_char(chan); if(accu) var len$0=(len + n | 0) - 1 | 0, _Ew_=build_result(caml_create_bytes(len$0),len$0,[0,res,accu]); else var _Ew_=res} return caml_string_of_bytes(_Ew_)}} function close_noerr$0(ic) {try {var _Eu_=caml_ml_close_channel(ic);return _Eu_} catch(_Ev_){return 0}} function print_char(c){return caml_ml_output_char(stdout,c)} function print_string(s){return output_string(stdout,s)} function print_bytes(s){return output_bytes(stdout,s)} function print_int(i) {return output_string(stdout,caml_string_of_jsbytes("" + i))} function print_float(f){return output_string(stdout,to_string(f))} function print_endline(s) {output_string(stdout,s); caml_ml_output_char(stdout,10); return caml_ml_flush(stdout)} function print_newline(param) {caml_ml_output_char(stdout,10);return caml_ml_flush(stdout)} function prerr_char(c){return caml_ml_output_char(stderr,c)} function prerr_string(s){return output_string(stderr,s)} function prerr_bytes(s){return output_bytes(stderr,s)} function prerr_int(i) {return output_string(stderr,caml_string_of_jsbytes("" + i))} function prerr_float(f){return output_string(stderr,to_string(f))} function prerr_endline(s) {output_string(stderr,s); caml_ml_output_char(stderr,10); return caml_ml_flush(stderr)} function prerr_newline(param) {caml_ml_output_char(stderr,10);return caml_ml_flush(stderr)} function read_line(param){caml_ml_flush(stdout);return input_line(stdin)} function read_int(param){return caml_int_of_string(read_line(0))} function read_int_opt(param){return int_of_string_opt(read_line(0))} function read_float(param){return caml_float_of_string(read_line(0))} function read_float_opt(param){return of_string_opt(read_line(0))} function string_of_format(param){var str=param[2];return str} function symbol(param,_Es_) {var str2=_Es_[2], fmt2=_Es_[1], str1=param[2], fmt1=param[1], _Et_=cat(str1,cat(cst$0,str2)); return [0,concat_fmt(fmt1,fmt2),_Et_]} var exit_function=[0,flush_all]; function at_exit(f) {for(;;) {var f_yet_to_run=[0,1], old_exit=exit_function[1], new_exit$0= function(f_yet_to_run,old_exit) {function new_exit(param) {if(compare_and_set(f_yet_to_run,1,0))caml_call1(f,0); return caml_call1(old_exit,0)} return new_exit}, new_exit=new_exit$0(f_yet_to_run,old_exit), success=compare_and_set(exit_function,old_exit,new_exit), _Er_=1 - success; if(_Er_)continue; return _Er_}} function do_at_exit(param){return caml_call1(exit_function[1],0)} function exit(retcode) {do_at_exit(0);return runtime.caml_sys_exit(retcode)} caml_register_named_value (caml_string_of_jsbytes("Pervasives.do_at_exit"),do_at_exit); var _m_= [0, runtime.caml_ml_seek_out_64, runtime.caml_ml_pos_out_64, caml_ml_channel_size_64, runtime.caml_ml_seek_in_64, runtime.caml_ml_pos_in_64, caml_ml_channel_size_64], set_binary_mode=caml_ml_set_binary_mode, close$0=caml_ml_close_channel, in_channel_length=caml_ml_channel_size, pos_in=caml_ml_pos_in, seek_in=runtime.caml_ml_seek_in, input_value=caml_input_value, input_binary_int=runtime.caml_ml_input_int, input_byte=caml_ml_input_char, input_char=caml_ml_input_char, set_binary_mode$0=caml_ml_set_binary_mode, out_channel_length=caml_ml_channel_size, pos_out=runtime.caml_ml_pos_out, seek_out=runtime.caml_ml_seek_out, output_binary_int=runtime.caml_ml_output_int, output_byte=caml_ml_output_char, output_char=caml_ml_output_char, flush=caml_ml_flush, Stdlib= [0, invalid_arg, failwith, Exit, Match_failure, Assert_failure, Invalid_argument, Failure, Not_found, Out_of_memory, Stack_overflow, Sys_error, End_of_file, Division_by_zero, Sys_blocked_io, Undefined_recursive_module, min, max, abs, max_int, min_int, lnot, infinity, neg_infinity, nan, max_float, min_float, epsilon, cat, char_of_int, string_of_bool, bool_of_string_opt, bool_of_string, string_of_int, int_of_string_opt, to_string, of_string_opt, append, stdin, stdout, stderr, print_char, print_string, print_bytes, print_int, print_float, print_endline, print_newline, prerr_char, prerr_string, prerr_bytes, prerr_int, prerr_float, prerr_endline, prerr_newline, read_line, read_int_opt, read_int, read_float_opt, read_float, open_text, open_bin, open_gen, flush, flush_all, output_char, output_string, output_bytes, output, output_substring, output_byte, output_binary_int, output_value, seek_out, pos_out, out_channel_length, close, close_noerr, set_binary_mode$0, open_text$0, open_bin$0, open_gen$0, input_char, input_line, input, really_input, really_input_string, input_byte, input_binary_int, input_value, seek_in, pos_in, in_channel_length, close$0, close_noerr$0, set_binary_mode, _m_, string_of_format, symbol, exit, at_exit, valid_float_lexem, unsafe_really_input, do_at_exit]; caml_register_global(775,Stdlib,"Stdlib"); var Exit$0=[248,cst_Stdlib_Pervasives_Exit,caml_fresh_oo_id(0)], Stdlib_Pervasives= [0, invalid_arg, failwith, Exit$0, min, max, abs, max_int, min_int, lnot, infinity, neg_infinity, nan, max_float, min_float, epsilon, cat, char_of_int, string_of_bool, bool_of_string, bool_of_string_opt, string_of_int, int_of_string_opt, to_string, of_string_opt, append, stdin, stdout, stderr, print_char, print_string, print_bytes, print_int, print_float, print_endline, print_newline, prerr_char, prerr_string, prerr_bytes, prerr_int, prerr_float, prerr_endline, prerr_newline, read_line, read_int, read_int_opt, read_float, read_float_opt, open_text, open_bin, open_gen, flush, flush_all, output_char, output_string, output_bytes, output, output_substring, output_byte, output_binary_int, output_value, seek_out, pos_out, out_channel_length, close, close_noerr, set_binary_mode$0, open_text$0, open_bin$0, open_gen$0, input_char, input_line, input, really_input, really_input_string, input_byte, input_binary_int, input_value, seek_in, pos_in, in_channel_length, close$0, close_noerr$0, set_binary_mode, string_of_format, symbol, exit, at_exit, valid_float_lexem, do_at_exit]; caml_register_global(776,Stdlib_Pervasives,"Stdlib__Pervasives"); function left(v){return [0,v]} function right(v){return [1,v]} function is_left(param){return 0 === param[0]?1:0} function is_right(param){return 0 === param[0]?0:1} function find_left(param) {if(0 === param[0]){var v=param[1];return [0,v]}return 0} function find_right(param) {if(0 === param[0])return 0;var v=param[1];return [0,v]} function map_left(f,e) {if(0 === e[0]){var v=e[1];return [0,caml_call1(f,v)]}return e} function map_right(f,e) {if(0 === e[0])return e;var v=e[1];return [1,caml_call1(f,v)]} function map(left,right,param) {if(0 === param[0]){var v=param[1];return [0,caml_call1(left,v)]} var v$0=param[1]; return [1,caml_call1(right,v$0)]} function fold(left,right,param) {if(0 === param[0]){var v=param[1];return caml_call1(left,v)} var v$0=param[1]; return caml_call1(right,v$0)} function equal(left,right,e1,e2) {if(0 === e1[0]) {var _Ep_=e1[1]; if(0 === e2[0]){var v2=e2[1];return caml_call2(left,_Ep_,v2)}} else {var _Eq_=e1[1]; if(0 !== e2[0]){var v2$0=e2[1];return caml_call2(right,_Eq_,v2$0)}} return 0} function compare(left,right,e1,e2) {if(0 === e1[0]) {var _En_=e1[1]; if(0 === e2[0]){var v2=e2[1];return caml_call2(left,_En_,v2)} return -1} var _Eo_=e1[1]; if(0 === e2[0])return 1; var v2$0=e2[1]; return caml_call2(right,_Eo_,v2$0)} var Stdlib_Either= [0, left, right, is_left, is_right, find_left, find_right, map_left, map_right, map, fold, fold, fold, equal, compare]; caml_register_global(777,Stdlib_Either,"Stdlib__Either"); var executable_name=runtime.caml_sys_executable_name(0), match=runtime.caml_sys_get_config(0), os_type=match[1], match$0=[0,caml_string_of_jsbytes("js_of_ocaml")], unix=runtime.caml_sys_const_ostype_unix(0), win32=runtime.caml_sys_const_ostype_win32(0), cygwin=runtime.caml_sys_const_ostype_cygwin(0), max_array_length=runtime.caml_sys_const_max_wosize(0), max_floatarray_length=max_array_length / 2 | 0, max_string_length=(4 * max_array_length | 0) - 1 | 0, big_endian=0, match$1=32, int_size=32; function getenv_opt(s) {try {var _El_=[0,caml_sys_getenv(s)];return _El_} catch(_Em_) {_Em_ = caml_wrap_exception(_Em_); if(_Em_ === Not_found)return 0; throw _Em_}} var interactive=[0,0]; function set_signal(sig_num,sig_beh){return 0} var Break=[248,cst_Stdlib_Sys_Break,caml_fresh_oo_id(0)], sigabrt=-1, sigalrm=-2, sigfpe=-3, sighup=-4, sigill=-5, sigint=-6, sigkill=-7, sigpipe=-8, sigquit=-9, sigsegv=-10, sigterm=-11, sigusr1=-12, sigusr2=-13, sigchld=-14, sigcont=-15, sigstop=-16, sigtstp=-17, sigttin=-18, sigttou=-19, sigvtalrm=-20, sigprof=-21, sigbus=-22, sigpoll=-23, sigsys=-24, sigtrap=-25, sigurg=-26, sigxcpu=-27, sigxfsz=-28; function catch_break(on){return on?0:0} var development_version=0; function Make(_Ek_,_Ej_){return [0,1]} var Immediate64=[0,Make], Stdlib_Sys= [0, executable_name, getenv_opt, interactive, os_type, match$0, unix, win32, cygwin, match$1, int_size, big_endian, max_string_length, max_array_length, max_floatarray_length, set_signal, sigabrt, sigalrm, sigfpe, sighup, sigill, sigint, sigkill, sigpipe, sigquit, sigsegv, sigterm, sigusr1, sigusr2, sigchld, sigcont, sigstop, sigtstp, sigttin, sigttou, sigvtalrm, sigprof, sigbus, sigpoll, sigsys, sigtrap, sigurg, sigxcpu, sigxfsz, Break, catch_break, ocaml_version, development_version, ocaml_release, runtime.caml_ml_enable_runtime_warnings, runtime.caml_ml_runtime_warnings_enabled, Immediate64]; caml_register_global(778,Stdlib_Sys,"Stdlib__Sys"); function is_block(a){return 1 - (typeof a === "number"?1:0)} function double_field(x,i){return caml_array_get(x,i)} function set_double_field(x,i,v){return caml_array_set(x,i,v)} var first_non_constant_constructor=0, last_non_constant_constructor_=245, lazy_tag=246, closure_tag=247, object_tag=248, infix_tag=249, forward_tag=250, no_scan_tag=251, abstract_tag=251, string_tag=252, double_tag=253, double_array_tag=254, custom_tag=255, int_tag=1000, out_of_heap_tag=1001, unaligned_tag=1002; function info(obj) {if(caml_obj_tag(obj) === 247) {var info=runtime.caml_obj_raw_field(obj,1), arity=info >> 24, start_env=info << 8 >>> 9 | 0; return [0,arity,start_env]} throw [0,Assert_failure,_n_]} function of_val(x) {var switch$0=0; if(is_block(x) && caml_obj_tag(x) !== 248 && 1 <= x.length - 1) {var slot=x[1];switch$0 = 1} if(! switch$0)var slot=x; var switch$1=0; if(is_block(slot) && caml_obj_tag(slot) === 248) {var name=slot[1];switch$1 = 1} if(! switch$1)var name=invalid_arg(cst_Obj_extension_constructor$0); return caml_obj_tag(name) === 252 ?slot :invalid_arg(cst_Obj_extension_constructor)} function name(slot){return slot[1]} function id(slot){return slot[2]} var Extension_constructor=[0,of_val,name,id], extension_constructor=Extension_constructor[1], extension_name=Extension_constructor[2], extension_id=Extension_constructor[3], max_ephe_length=max_array_length - 2 | 0; function create(l) {var _Eh_=0 <= l?1:0,_Ei_=_Eh_?l <= max_ephe_length?1:0:_Eh_; if(1 - _Ei_)invalid_arg(cst_Obj_Ephemeron_create); return runtime.caml_ephe_create(l)} function length(x){return x.length - 1 - 2 | 0} function raise_if_invalid_offset(e,o,msg) {var _Ee_=0 <= o?1:0,_Ef_=_Ee_?o < length(e)?1:0:_Ee_,_Eg_=1 - _Ef_; return _Eg_?invalid_arg(msg):_Eg_} function get_key(e,o) {raise_if_invalid_offset(e,o,cst_Obj_Ephemeron_get_key); return runtime.caml_ephe_get_key(e,o)} function get_key_copy(e,o) {raise_if_invalid_offset(e,o,cst_Obj_Ephemeron_get_key_copy); return runtime.caml_ephe_get_key_copy(e,o)} function set_key(e,o,x) {raise_if_invalid_offset(e,o,cst_Obj_Ephemeron_set_key); return caml_ephe_set_key(e,o,x)} function unset_key(e,o) {raise_if_invalid_offset(e,o,cst_Obj_Ephemeron_unset_key); return caml_ephe_unset_key(e,o)} function check_key(e,o) {raise_if_invalid_offset(e,o,cst_Obj_Ephemeron_check_key); return runtime.caml_ephe_check_key(e,o)} function blit_key(e1,o1,e2,o2,l) {if (0 <= l && 0 <= o1 && ! ((length(e1) - l | 0) < o1) && 0 <= o2 && ! ((length(e2) - l | 0) < o2)) {var _Ec_=0 !== l?1:0, _Ed_=_Ec_?runtime.caml_ephe_blit_key(e1,o1,e2,o2,l):_Ec_; return _Ed_} return invalid_arg(cst_Obj_Ephemeron_blit_key)} var _o_=runtime.caml_ephe_blit_data, _p_=runtime.caml_ephe_check_data, _q_= [0, create, length, get_key, get_key_copy, set_key, unset_key, check_key, blit_key, runtime.caml_ephe_get_data, runtime.caml_ephe_get_data_copy, runtime.caml_ephe_set_data, function(_Eb_){return runtime.caml_ephe_unset_data(_Eb_)}, _p_, _o_, max_ephe_length], Stdlib_Obj= [0, is_block, double_field, set_double_field, first_non_constant_constructor, last_non_constant_constructor_, lazy_tag, closure_tag, object_tag, infix_tag, forward_tag, no_scan_tag, abstract_tag, string_tag, double_tag, double_array_tag, custom_tag, custom_tag, int_tag, out_of_heap_tag, unaligned_tag, [0,info], Extension_constructor, extension_constructor, extension_name, extension_id, _q_]; caml_register_global(779,Stdlib_Obj,"Stdlib__Obj"); var Undefined=[248,cst_CamlinternalLazy_Undefined,caml_fresh_oo_id(0)]; function raise_undefined(param){throw Undefined} function force_lazy_block(blk) {var closure=blk[1]; blk[1] = raise_undefined; try {var result=caml_call1(closure,0); caml_obj_make_forward(blk,result); return result} catch(e) {e = caml_wrap_exception(e);blk[1] = function(param){throw e};throw e}} function force_val_lazy_block(blk) {var closure=blk[1]; blk[1] = raise_undefined; var result=caml_call1(closure,0); caml_obj_make_forward(blk,result); return result} function force(lzv) {var t=caml_obj_tag(lzv); return t === 250?lzv[1]:t !== 246?lzv:force_lazy_block(lzv)} function force_val(lzv) {var t=caml_obj_tag(lzv); return t === 250?lzv[1]:t !== 246?lzv:force_val_lazy_block(lzv)} var CamlinternalLazy= [0,Undefined,force_lazy_block,force_val_lazy_block,force,force_val]; caml_register_global(780,CamlinternalLazy,"CamlinternalLazy"); function to_lazy(f){var x=caml_obj_block(246,1);x[1] = f;return x} function from_val(v) {var t=caml_obj_tag(v); if(t !== 250 && t !== 246 && t !== 253)return v; return runtime.caml_lazy_make_forward(v)} function is_val(l){return caml_obj_tag(l) !== 246?1:0} function map$0(f,x) {return [246, function(_D__) {var _D$_=caml_obj_tag(x), _Ea_=250 === _D$_?x[1]:246 === _D$_?force_lazy_block(x):x; return caml_call1(f,_Ea_)}]} function map_val(f,x) {if(is_val(x)) {var _D5_=caml_obj_tag(x), _D6_=250 === _D5_?x[1]:246 === _D5_?force_lazy_block(x):x; return from_val(caml_call1(f,_D6_))} return [246, function(_D7_) {var _D8_=caml_obj_tag(x), _D9_=250 === _D8_?x[1]:246 === _D8_?force_lazy_block(x):x; return caml_call1(f,_D9_)}]} var Stdlib_Lazy= [0, Undefined, map$0, is_val, from_val, map_val, to_lazy, force_val, to_lazy, from_val, is_val]; caml_register_global(781,Stdlib_Lazy,"Stdlib__Lazy"); function empty(param){return 0} function return$0(x,param){return [0,x,empty]} function cons(x,next,param){return [0,x,next]} function append$0(seq1,seq2,param) {var match=caml_call1(seq1,0); if(match) {var next=match[2],x=match[1]; return [0,x,function(_D4_){return append$0(next,seq2,_D4_)}]} return caml_call1(seq2,0)} function map$1(f,seq,param) {var match=caml_call1(seq,0); if(match) {var next=match[2], x=match[1], _D2_=function(_D3_){return map$1(f,next,_D3_)}; return [0,caml_call1(f,x),_D2_]} return 0} function filter_map(f,seq,param) {var seq$0=seq; for(;;) {var match=caml_call1(seq$0,0); if(match) {var next=match[2],x=match[1],match$0=caml_call1(f,x); if(match$0) {var y=match$0[1]; return [0,y,function(_D1_){return filter_map(f,next,_D1_)}]} var seq$0=next; continue} return 0}} function filter(f,seq,param) {var seq$0=seq; for(;;) {var match=caml_call1(seq$0,0); if(match) {var next=match[2],x=match[1]; if(caml_call1(f,x)) return [0,x,function(_D0_){return filter(f,next,_D0_)}]; var seq$0=next; continue} return 0}} function concat(seq,param) {var match=caml_call1(seq,0); if(match) {var next=match[2],x=match[1],_DY_=0; return append$0(x,function(_DZ_){return concat(next,_DZ_)},_DY_)} return 0} function flat_map(f,seq,param) {var match=caml_call1(seq,0); if(match) {var next=match[2], x=match[1], _DV_=0, _DW_=function(_DX_){return flat_map(f,next,_DX_)}; return append$0(caml_call1(f,x),_DW_,_DV_)} return 0} function fold_left(f,acc,seq) {var acc$0=acc,seq$0=seq; for(;;) {var match=caml_call1(seq$0,0); if(match) {var next=match[2], x=match[1], acc$1=caml_call2(f,acc$0,x), acc$0=acc$1, seq$0=next; continue} return acc$0}} function iter(f,seq) {var seq$0=seq; for(;;) {var match=caml_call1(seq$0,0); if(match) {var next=match[2],x=match[1]; caml_call1(f,x); var seq$0=next; continue} return 0}} function unfold(f,u,param) {var match=caml_call1(f,u); if(match) {var match$0=match[1],u$0=match$0[2],x=match$0[1]; return [0,x,function(_DU_){return unfold(f,u$0,_DU_)}]} return 0} function is_empty(xs){var match=caml_call1(xs,0);return match?0:1} function uncons(xs) {var match=caml_call1(xs,0); if(match){var xs$0=match[2],x=match[1];return [0,[0,x,xs$0]]} return 0} function length$0(xs$1) {var accu=0,xs=xs$1; for(;;) {var match=caml_call1(xs,0); if(match) {var xs$0=match[2],accu$0=accu + 1 | 0,accu=accu$0,xs=xs$0;continue} return accu}} function iteri(f,xs$1) {var i=0,xs=xs$1; for(;;) {var match=caml_call1(xs,0); if(match) {var xs$0=match[2],x=match[1]; caml_call2(f,i,x); var i$0=i + 1 | 0,i=i$0,xs=xs$0; continue} return 0}} function fold_lefti(f,accu$1,xs$1) {var accu=accu$1,i=0,xs=xs$1; for(;;) {var match=caml_call1(xs,0); if(match) {var xs$0=match[2], x=match[1], accu$0=caml_call3(f,accu,i,x), i$0=i + 1 | 0, accu=accu$0, i=i$0, xs=xs$0; continue} return accu}} function for_all(p,xs) {var xs$0=xs; for(;;) {var match=caml_call1(xs$0,0); if(match) {var xs$1=match[2],x=match[1],_DT_=caml_call1(p,x); if(_DT_){var xs$0=xs$1;continue} return _DT_} return 1}} function exists(p,xs) {var xs$0=xs; for(;;) {var match=caml_call1(xs$0,0); if(match) {var xs$1=match[2],x=match[1],_DS_=caml_call1(p,x); if(_DS_)return _DS_; var xs$0=xs$1; continue} return 0}} function find(p,xs) {var xs$0=xs; for(;;) {var match=caml_call1(xs$0,0); if(match) {var xs$1=match[2],x=match[1]; if(caml_call1(p,x))return [0,x]; var xs$0=xs$1; continue} return 0}} function find_map(f,xs) {var xs$0=xs; for(;;) {var match=caml_call1(xs$0,0); if(match) {var xs$1=match[2],x=match[1],result=caml_call1(f,x); if(result)return result; var xs$0=xs$1; continue} return 0}} function iter2(f,xs,ys) {var xs$0=xs,ys$0=ys; for(;;) {var match=caml_call1(xs$0,0); if(match) {var xs$1=match[2],x=match[1],match$0=caml_call1(ys$0,0); if(match$0) {var ys$1=match$0[2],y=match$0[1]; caml_call2(f,x,y); var xs$0=xs$1,ys$0=ys$1; continue} return 0} return 0}} function fold_left2(f,accu,xs,ys) {var accu$0=accu,xs$0=xs,ys$0=ys; for(;;) {var match=caml_call1(xs$0,0); if(match) {var xs$1=match[2],x=match[1],match$0=caml_call1(ys$0,0); if(match$0) {var ys$1=match$0[2], y=match$0[1], accu$1=caml_call3(f,accu$0,x,y), accu$0=accu$1, xs$0=xs$1, ys$0=ys$1; continue} return accu$0} return accu$0}} function for_all2(f,xs,ys) {var xs$0=xs,ys$0=ys; for(;;) {var match=caml_call1(xs$0,0); if(match) {var xs$1=match[2],x=match[1],match$0=caml_call1(ys$0,0); if(match$0) {var ys$1=match$0[2],y=match$0[1],_DR_=caml_call2(f,x,y); if(_DR_){var xs$0=xs$1,ys$0=ys$1;continue} return _DR_} return 1} return 1}} function exists2(f,xs,ys) {var xs$0=xs,ys$0=ys; for(;;) {var match=caml_call1(xs$0,0); if(match) {var xs$1=match[2],x=match[1],match$0=caml_call1(ys$0,0); if(match$0) {var ys$1=match$0[2],y=match$0[1],_DQ_=caml_call2(f,x,y); if(_DQ_)return _DQ_; var xs$0=xs$1,ys$0=ys$1; continue} return 0} return 0}} function equal$0(eq,xs,ys) {var xs$0=xs,ys$0=ys; for(;;) {var match=caml_call1(xs$0,0),match$0=caml_call1(ys$0,0); if(match) {if(match$0) {var ys$1=match$0[2], y=match$0[1], xs$1=match[2], x=match[1], _DP_=caml_call2(eq,x,y); if(_DP_){var xs$0=xs$1,ys$0=ys$1;continue} return _DP_}} else if(! match$0)return 1; return 0}} function compare$0(cmp,xs,ys) {var xs$0=xs,ys$0=ys; for(;;) {var match=caml_call1(xs$0,0),match$0=caml_call1(ys$0,0); if(match) {var _DN_=match[2],_DO_=match[1]; if(match$0) {var ys$1=match$0[2],y=match$0[1],c=caml_call2(cmp,_DO_,y); if(0 === c){var xs$0=_DN_,ys$0=ys$1;continue} return c} return 1} return match$0?-1:0}} function init_aux(f,i,j,param) {if(i < j) {var _DK_=i + 1 | 0, _DL_=function(_DM_){return init_aux(f,_DK_,j,_DM_)}; return [0,caml_call1(f,i),_DL_]} return 0} function init(n,f) {if(0 <= n) {var _DI_=0;return function(_DJ_){return init_aux(f,_DI_,n,_DJ_)}} return invalid_arg(cst_Seq_init)} function repeat(x,param) {return [0,x,function(_DH_){return repeat(x,_DH_)}]} function forever(f,param) {function _DF_(_DG_){return forever(f,_DG_)} return [0,caml_call1(f,0),_DF_]} function cycle_nonempty(xs,param) {var _DD_=0; return append$0(xs,function(_DE_){return cycle_nonempty(xs,_DE_)},_DD_)} function cycle(xs,param) {var match=caml_call1(xs,0); if(match) {var xs$0=match[2], x=match[1], _DA_=function(_DC_){return cycle_nonempty(xs,_DC_)}; return [0,x,function(_DB_){return append$0(xs$0,_DA_,_DB_)}]} return 0} function iterate1(f,x,param) {var y=caml_call1(f,x); return [0,y,function(_Dz_){return iterate1(f,y,_Dz_)}]} function iterate(f,x) {function _Dw_(_Dy_){return iterate1(f,x,_Dy_)} return function(_Dx_){return [0,x,_Dw_]}} function mapi_aux(f,i,xs,param) {var match=caml_call1(xs,0); if(match) {var xs$0=match[2], x=match[1], _Dt_=i + 1 | 0, _Du_=function(_Dv_){return mapi_aux(f,_Dt_,xs$0,_Dv_)}; return [0,caml_call2(f,i,x),_Du_]} return 0} function mapi(f,xs) {var _Dr_=0;return function(_Ds_){return mapi_aux(f,_Dr_,xs,_Ds_)}} function tail_scan(f,s,xs,param) {var match=caml_call1(xs,0); if(match) {var xs$0=match[2],x=match[1],s$0=caml_call2(f,s,x); return [0,s$0,function(_Dq_){return tail_scan(f,s$0,xs$0,_Dq_)}]} return 0} function scan(f,s,xs) {function _Dn_(_Dp_){return tail_scan(f,s,xs,_Dp_)} return function(_Do_){return [0,s,_Dn_]}} function take_aux(n,xs) {return 0 === n ?empty :function(param) {var match=caml_call1(xs,0); if(match) {var xs$0=match[2],x=match[1]; return [0,x,take_aux(n - 1 | 0,xs$0)]} return 0}} function take(n,xs) {if(n < 0)invalid_arg(cst_Seq_take);return take_aux(n,xs)} function drop(n,xs) {return 0 <= n ?0 === n ?xs :function(param) {var n$0=n,xs$0=xs; for(;;) {var match=caml_call1(xs$0,0); if(match) {var xs$1=match[2],n$1=n$0 - 1 | 0; if(0 === n$1)return caml_call1(xs$1,0); var n$0=n$1,xs$0=xs$1; continue} return 0}} :invalid_arg(cst_Seq_drop)} function take_while(p,xs,param) {var match=caml_call1(xs,0); if(match) {var xs$0=match[2],x=match[1]; return caml_call1(p,x) ?[0,x,function(_Dm_){return take_while(p,xs$0,_Dm_)}] :0} return 0} function drop_while(p,xs,param) {var xs$0=xs; for(;;) {var node=caml_call1(xs$0,0); if(node) {var xs$1=node[2],x=node[1]; if(caml_call1(p,x)){var xs$0=xs$1;continue} return node} return 0}} function group(eq,xs,param) {var match=caml_call1(xs,0); if(match) {var xs$0=match[2], x=match[1], _Dd_=caml_call1(eq,x), _De_=function(_Dl_){return drop_while(_Dd_,xs$0,_Dl_)}, _Df_=function(_Dk_){return group(eq,_De_,_Dk_)}, _Dg_=caml_call1(eq,x), _Dh_=function(_Dj_){return take_while(_Dg_,xs$0,_Dj_)}; return [0,function(_Di_){return [0,x,_Dh_]},_Df_]} return 0} var Forced_twice=[248,cst_Stdlib_Seq_Forced_twice,caml_fresh_oo_id(0)]; function failure(param){throw Forced_twice} function memoize(xs) {function s$0(param) {var match=caml_call1(xs,0); if(match){var xs$0=match[2],x=match[1];return [0,x,memoize(xs$0)]} return 0} var s=to_lazy(s$0); return function(_Dc_) {var _Db_=caml_obj_tag(s); return 250 === _Db_?s[1]:246 === _Db_?force_lazy_block(s):s}} function once(xs) {function f(param) {var match=caml_call1(xs,0); if(match){var xs$0=match[2],x=match[1];return [0,x,once(xs$0)]} return 0} var action=[0,f]; return function(param) {var f=exchange(action,failure);return caml_call1(f,0)}} function zip(xs,ys,param) {var match=caml_call1(xs,0); if(match) {var xs$0=match[2],x=match[1],match$0=caml_call1(ys,0); if(match$0) {var ys$0=match$0[2],y=match$0[1]; return [0,[0,x,y],function(_Da_){return zip(xs$0,ys$0,_Da_)}]} return 0} return 0} function map2(f,xs,ys,param) {var match=caml_call1(xs,0); if(match) {var xs$0=match[2],x=match[1],match$0=caml_call1(ys,0); if(match$0) {var ys$0=match$0[2], y=match$0[1], _C__=function(_C$_){return map2(f,xs$0,ys$0,_C$_)}; return [0,caml_call2(f,x,y),_C__]} return 0} return 0} function interleave(xs,ys,param) {var match=caml_call1(xs,0); if(match) {var xs$0=match[2],x=match[1]; return [0,x,function(_C9_){return interleave(ys,xs$0,_C9_)}]} return caml_call1(ys,0)} function sorted_merge1(cmp,x,xs,y,ys) {return 0 < caml_call2(cmp,x,y) ?[0, y, function(_C7_) {var match=caml_call1(ys,0); if(match) {var ys$0=match[2],y=match[1]; return sorted_merge1(cmp,x,xs,y,ys$0)} return [0,x,xs]}] :[0, x, function(_C8_) {var match=caml_call1(xs,0); if(match) {var xs$0=match[2],x=match[1]; return sorted_merge1(cmp,x,xs$0,y,ys)} return [0,y,ys]}]} function sorted_merge(cmp,xs,ys,param) {var match=caml_call1(xs,0),match$0=caml_call1(ys,0); if(match) {if(match$0) {var ys$0=match$0[2],y=match$0[1],xs$0=match[2],x=match[1]; return sorted_merge1(cmp,x,xs$0,y,ys$0)} var c=match} else {if(! match$0)return 0;var c=match$0} return c} function map_fst(xys,param) {var match=caml_call1(xys,0); if(match) {var xys$0=match[2],match$0=match[1],x=match$0[1]; return [0,x,function(_C6_){return map_fst(xys$0,_C6_)}]} return 0} function map_snd(xys,param) {var match=caml_call1(xys,0); if(match) {var xys$0=match[2],match$0=match[1],y=match$0[2]; return [0,y,function(_C5_){return map_snd(xys$0,_C5_)}]} return 0} function unzip(xys) {function _C2_(_C4_){return map_snd(xys,_C4_)} return [0,function(_C3_){return map_fst(xys,_C3_)},_C2_]} function filter_map_find_left_map(f,xs,param) {var xs$0=xs; for(;;) {var match=caml_call1(xs$0,0); if(match) {var xs$1=match[2],x=match[1],match$0=caml_call1(f,x); if(0 === match$0[0]) {var y=match$0[1]; return [0, y, function(_C1_){return filter_map_find_left_map(f,xs$1,_C1_)}]} var xs$0=xs$1; continue} return 0}} function filter_map_find_right_map(f,xs,param) {var xs$0=xs; for(;;) {var match=caml_call1(xs$0,0); if(match) {var xs$1=match[2],x=match[1],match$0=caml_call1(f,x); if(0 === match$0[0]){var xs$0=xs$1;continue} var z=match$0[1]; return [0, z, function(_C0_) {return filter_map_find_right_map(f,xs$1,_C0_)}]} return 0}} function partition_map(f,xs) {function _CX_(_CZ_){return filter_map_find_right_map(f,xs,_CZ_)} return [0, function(_CY_){return filter_map_find_left_map(f,xs,_CY_)}, _CX_]} function partition(p,xs) {function _CT_(x){return 1 - caml_call1(p,x)} function _CU_(_CW_){return filter(_CT_,xs,_CW_)} return [0,function(_CV_){return filter(p,xs,_CV_)},_CU_]} function peel(xss) {return unzip(function(_CS_){return filter_map(uncons,xss,_CS_)})} function transpose(xss,param) {var match=peel(xss),tails=match[2],heads=match[1]; if(is_empty(heads)) {if(is_empty(tails))return 0;throw [0,Assert_failure,_r_]} return [0,heads,function(_CR_){return transpose(tails,_CR_)}]} function _s_(remainders,xss,param) {var match=caml_call1(xss,0); if(match) {var xss$0=match[2],xs=match[1],match$0=caml_call1(xs,0); if(match$0) {var xs$0=match$0[2], x=match$0[1], match$1=peel(remainders), tails=match$1[2], heads=match$1[1], _CL_=function(_CQ_){return [0,xs$0,tails]}, _CM_=function(_CP_){return _s_(_CL_,xss$0,_CP_)}; return [0,function(_CO_){return [0,x,heads]},_CM_]} var match$2=peel(remainders),tails$0=match$2[2],heads$0=match$2[1]; return [0,heads$0,function(_CN_){return _s_(tails$0,xss$0,_CN_)}]} return transpose(remainders,0)} function map_product(f,xs,ys) {function _CF_(x) {function _CJ_(y){return caml_call2(f,x,y)} return function(_CK_){return map$1(_CJ_,ys,_CK_)}} function xss(_CI_){return map$1(_CF_,xs,_CI_)} function _CE_(_CH_){return _s_(empty,xss,_CH_)} return function(_CG_){return concat(_CE_,_CG_)}} function product(xs,ys) {return map_product(function(x,y){return [0,x,y]},xs,ys)} function of_dispenser(it) {function c(param) {var match=caml_call1(it,0); if(match){var x=match[1];return [0,x,c]} return 0} return c} function to_dispenser(xs) {var s=[0,xs]; return function(param) {var match=caml_call1(s[1],0); if(match){var xs=match[2],x=match[1];s[1] = xs;return [0,x]} return 0}} function ints(i,param) {var _CC_=i + 1 | 0;return [0,i,function(_CD_){return ints(_CC_,_CD_)}]} var Stdlib_Seq= [0, is_empty, uncons, length$0, iter, fold_left, iteri, fold_lefti, for_all, exists, find, find_map, iter2, fold_left2, for_all2, exists2, equal$0, compare$0, empty, return$0, cons, init, unfold, repeat, forever, cycle, iterate, map$1, mapi, filter, filter_map, scan, take, drop, take_while, drop_while, group, memoize, Forced_twice, once, transpose, append$0, concat, flat_map, flat_map, zip, map2, interleave, sorted_merge, product, map_product, unzip, unzip, partition_map, partition, of_dispenser, to_dispenser, ints]; caml_register_global(782,Stdlib_Seq,"Stdlib__Seq"); var none=0; function some(v){return [0,v]} function value(o,default$0){if(o){var v=o[1];return v}return default$0} function get$0(param) {if(param){var v=param[1];return v} return invalid_arg(cst_option_is_None)} function bind(o,f){if(o){var v=o[1];return caml_call1(f,v)}return 0} function join(param){if(param){var o=param[1];return o}return 0} function map$2(f,o){if(o){var v=o[1];return [0,caml_call1(f,v)]}return 0} function fold$0(none,some,param) {if(param){var v=param[1];return caml_call1(some,v)}return none} function iter$0(f,param) {if(param){var v=param[1];return caml_call1(f,v)}return 0} function is_none(param){return param?0:1} function is_some(param){return param?1:0} function equal$1(eq,o0,o1) {if(o0) {if(o1){var v1=o1[1],v0=o0[1];return caml_call2(eq,v0,v1)}} else if(! o1)return 1; return 0} function compare$1(cmp,o0,o1) {if(o0) {var _CB_=o0[1]; if(o1){var v1=o1[1];return caml_call2(cmp,_CB_,v1)} return 1} return o1?-1:0} function to_result(none,param) {if(param){var v=param[1];return [0,v]}return [1,none]} function to_list(param){if(param){var v=param[1];return [0,v,0]}return 0} function to_seq(param) {if(param){var v=param[1];return function(_CA_){return return$0(v,_CA_)}} return empty} var Stdlib_Option= [0, none, some, value, get$0, bind, join, map$2, fold$0, iter$0, is_none, is_some, equal$1, compare$1, to_result, to_list, to_seq]; caml_register_global(783,Stdlib_Option,"Stdlib__Option"); function ok(v){return [0,v]} function error(e){return [1,e]} function value$0(r,default$0) {if(0 === r[0]){var v=r[1];return v}return default$0} function get_ok(param) {if(0 === param[0]){var v=param[1];return v} return invalid_arg(cst_result_is_Error)} function get_error(param) {if(0 === param[0])return invalid_arg(cst_result_is_Ok); var e=param[1]; return e} function bind$0(r,f) {if(0 === r[0]){var v=r[1];return caml_call1(f,v)}return r} function join$0(e){if(0 === e[0]){var r=e[1];return r}return e} function map$3(f,e) {if(0 === e[0]){var v=e[1];return [0,caml_call1(f,v)]}return e} function map_error(f,v) {if(0 === v[0])return v;var e=v[1];return [1,caml_call1(f,e)]} function fold$1(ok,error,param) {if(0 === param[0]){var v=param[1];return caml_call1(ok,v)} var e=param[1]; return caml_call1(error,e)} function iter$1(f,param) {if(0 === param[0]){var v=param[1];return caml_call1(f,v)}return 0} function iter_error(f,param) {if(0 === param[0])return 0;var e=param[1];return caml_call1(f,e)} function is_ok(param){return 0 === param[0]?1:0} function is_error(param){return 0 === param[0]?0:1} function equal$2(ok,error,r0,r1) {if(0 === r0[0]) {var _Cy_=r0[1]; if(0 === r1[0]){var v1=r1[1];return caml_call2(ok,_Cy_,v1)}} else {var _Cz_=r0[1]; if(0 !== r1[0]){var e1=r1[1];return caml_call2(error,_Cz_,e1)}} return 0} function compare$2(ok,error,r0,r1) {if(0 === r0[0]) {var _Cw_=r0[1]; if(0 === r1[0]){var v1=r1[1];return caml_call2(ok,_Cw_,v1)} return -1} var _Cx_=r0[1]; if(0 === r1[0])return 1; var e1=r1[1]; return caml_call2(error,_Cx_,e1)} function to_option(param) {if(0 === param[0]){var v=param[1];return [0,v]}return 0} function to_list$0(param) {if(0 === param[0]){var v=param[1];return [0,v,0]}return 0} function to_seq$0(param) {if(0 === param[0]) {var v=param[1];return function(_Cv_){return return$0(v,_Cv_)}} return empty} var Stdlib_Result= [0, ok, error, value$0, get_ok, get_error, bind$0, join$0, map$3, map_error, fold$1, iter$1, iter_error, is_ok, is_error, equal$2, compare$2, to_option, to_list$0, to_seq$0]; caml_register_global(784,Stdlib_Result,"Stdlib__Result"); function equal$3(_Cu_,_Ct_){return _Cu_ === _Ct_?1:0} var compare$3=caml_int_compare; function to_float(param){return param?1.:0.} function to_string$0(param){return param?cst_true$2:cst_false$2} function _t_(_Cs_){return _Cs_} var Stdlib_Bool= [0, function(_Cr_){return 1 - _Cr_}, equal$3, compare$3, _t_, to_float, to_string$0]; caml_register_global(785,Stdlib_Bool,"Stdlib__Bool"); function chr(n) {if(0 <= n && ! (255 < n))return n;return invalid_arg(cst_Char_chr)} function escaped(c) {var switch$0=0; if(40 <= c) {if(92 === c)return cst$1;if(! (127 <= c))switch$0 = 1} else if(32 <= c) {if(39 <= c)return cst$2;switch$0 = 1} else if(! (14 <= c)) switch(c) {case 8:return cst_b; case 9:return cst_t; case 10:return cst_n; case 13:return cst_r } if(switch$0) {var s$0=caml_create_bytes(1); caml_bytes_unsafe_set(s$0,0,c); return caml_string_of_bytes(s$0)} var s=caml_create_bytes(4); caml_bytes_unsafe_set(s,0,92); caml_bytes_unsafe_set(s,1,48 + (c / 100 | 0) | 0); caml_bytes_unsafe_set(s,2,48 + ((c / 10 | 0) % 10 | 0) | 0); caml_bytes_unsafe_set(s,3,48 + (c % 10 | 0) | 0); return caml_string_of_bytes(s)} function lowercase(c) {var _Cq_=c - 192 | 0,switch$0=0; if(30 < _Cq_ >>> 0) {if(! (25 < _Cq_ + 127 >>> 0))switch$0 = 1} else if(23 !== _Cq_)switch$0 = 1; return switch$0?c + 32 | 0:c} function uppercase(c) {var _Cp_=c - 224 | 0,switch$0=0; if(30 < _Cp_ >>> 0) {if(! (25 < _Cp_ + 127 >>> 0))switch$0 = 1} else if(23 !== _Cp_)switch$0 = 1; return switch$0?c - 32 | 0:c} function lowercase_ascii(c){return 25 < c - 65 >>> 0?c:c + 32 | 0} function uppercase_ascii(c){return 25 < c - 97 >>> 0?c:c - 32 | 0} function compare$4(c1,c2){return c1 - c2 | 0} function equal$4(c1,c2){return 0 === (c1 - c2 | 0)?1:0} var Stdlib_Char= [0, chr, escaped, lowercase, uppercase, lowercase_ascii, uppercase_ascii, compare$4, equal$4]; caml_register_global(786,Stdlib_Char,"Stdlib__Char"); var min$0=0, max$0=1114111, lo_bound=55295, hi_bound=57344, bom=65279, rep=65533; function succ(u) {return u === 55295 ?hi_bound :u === 1114111?invalid_arg(err_no_succ):u + 1 | 0} function pred(u) {return u === 57344?lo_bound:u === 0?invalid_arg(err_no_pred):u - 1 | 0} function is_valid(i) {var _Cl_=0 <= i?1:0,_Cm_=_Cl_?i <= 55295?1:0:_Cl_; if(_Cm_) var _Cn_=_Cm_; else var _Co_=57344 <= i?1:0,_Cn_=_Co_?i <= 1114111?1:0:_Co_; return _Cn_} function of_int(i) {return is_valid(i) ?i :invalid_arg (cat(caml_format_int(cst_X,i),cst_is_not_an_Unicode_scalar_v))} function is_char(u){return u < 256?1:0} function of_char(c){return c} function to_char(u) {return 255 < u ?invalid_arg (cat (cst_U, cat (caml_format_int(cst_04X,u),cst_is_not_a_latin1_character))) :u} function unsafe_to_char(_Ck_){return _Ck_} function equal$5(_Cj_,_Ci_){return _Cj_ === _Ci_?1:0} var compare$5=caml_int_compare; function hash(_Ch_){return _Ch_} function utf_decode_is_valid(d){return 1 === (d >>> 27 | 0)?1:0} function utf_decode_length(d){return (d >>> 24 | 0) & 7} function utf_decode_uchar(d){return d & 16777215} function utf_decode(n,u){return (8 | n) << 24 | u} function dec_invalid(n){return n << 24 | 65533} function utf_8_byte_length(u) {if(0 <= u) {if(127 < u) {if(2047 < u) {if(65535 < u) {if(1114111 < u)throw [0,Assert_failure,_u_];return 4} return 3} return 2} return 1} throw [0,Assert_failure,_v_]} function utf_16_byte_length(u) {if(0 <= u) {if(65535 < u){if(1114111 < u)throw [0,Assert_failure,_w_];return 4} return 2} throw [0,Assert_failure,_x_]} function _y_(_Cg_){return _Cg_} var Stdlib_Uchar= [0, min$0, max$0, bom, rep, succ, pred, is_valid, of_int, function(_Cf_){return _Cf_}, _y_, is_char, of_char, to_char, unsafe_to_char, equal$5, compare$5, hash, utf_decode_is_valid, utf_decode_uchar, utf_decode_length, utf_decode, dec_invalid, utf_8_byte_length, utf_16_byte_length]; caml_register_global(787,Stdlib_Uchar,"Stdlib__Uchar"); function length$1(l) {var len=0,param=l; for(;;) {if(param) {var param$0=param[2],len$0=len + 1 | 0,len=len$0,param=param$0; continue} return len}} function cons$0(a,l){return [0,a,l]} function hd(param) {if(param){var a=param[1];return a}return failwith(cst_hd)} function tl(param) {if(param){var l=param[2];return l}return failwith(cst_tl)} function nth(l,n) {if(0 <= n) {var l$0=l,n$0=n; for(;;) {if(l$0) {var l$1=l$0[2],a=l$0[1]; if(0 === n$0)return a; var n$1=n$0 - 1 | 0,l$0=l$1,n$0=n$1; continue} return failwith(cst_nth)}} return invalid_arg(cst_List_nth)} function nth_opt(l,n) {if(0 <= n) {var l$0=l,n$0=n; for(;;) {if(l$0) {var l$1=l$0[2],a=l$0[1]; if(0 === n$0)return [0,a]; var n$1=n$0 - 1 | 0,l$0=l$1,n$0=n$1; continue} return 0}} return invalid_arg(cst_List_nth$0)} function rev_append(l1,l2) {var l1$0=l1,l2$0=l2; for(;;) {if(l1$0) {var l1$1=l1$0[2],a=l1$0[1],l2$1=[0,a,l2$0],l1$0=l1$1,l2$0=l2$1; continue} return l2$0}} function rev(l){return rev_append(l,0)} function init_aux$0(i,n,f) {if(n <= i)return 0; var r=caml_call1(f,i); return [0,r,init_aux$0(i + 1 | 0,n,f)]} function init$0(len,f) {if(0 <= len) {if(50 < len) {var acc=0,i=0; for(;;) {if(len <= i)return rev(acc); var i$0=i + 1 | 0,acc$0=[0,caml_call1(f,i),acc],acc=acc$0,i=i$0; continue}} return init_aux$0(0,len,f)} return invalid_arg(cst_List_init)} function flatten(param) {if(param){var r=param[2],l=param[1];return append(l,flatten(r))} return 0} function map$4(f,param) {if(param) {var l=param[2],a=param[1],r=caml_call1(f,a);return [0,r,map$4(f,l)]} return 0} function _z_(i,f,param) {if(param) {var l=param[2],a=param[1],r=caml_call2(f,i,a); return [0,r,_z_(i + 1 | 0,f,l)]} return 0} function mapi$0(f,l){return _z_(0,f,l)} function rev_map(f,param) {var accu=0,param$0=param; for(;;) {if(param$0) {var l=param$0[2], a=param$0[1], accu$0=[0,caml_call1(f,a),accu], accu=accu$0, param$0=l; continue} return accu}} function iter$2(f,param) {var param$0=param; for(;;) {if(param$0) {var l=param$0[2],a=param$0[1]; caml_call1(f,a); var param$0=l; continue} return 0}} function iteri$0(f,l$0) {var i=0,param=l$0; for(;;) {if(param) {var l=param[2],a=param[1]; caml_call2(f,i,a); var i$0=i + 1 | 0,i=i$0,param=l; continue} return 0}} function fold_left$0(f,accu,l) {var accu$0=accu,l$0=l; for(;;) {if(l$0) {var l$1=l$0[2], a=l$0[1], accu$1=caml_call2(f,accu$0,a), accu$0=accu$1, l$0=l$1; continue} return accu$0}} function fold_right(f,l,accu) {if(l){var l$0=l[2],a=l[1];return caml_call2(f,a,fold_right(f,l$0,accu))} return accu} function map2$0(f,l1,l2) {if(l1) {if(l2) {var l2$0=l2[2],a2=l2[1],l1$0=l1[2],a1=l1[1],r=caml_call2(f,a1,a2); return [0,r,map2$0(f,l1$0,l2$0)]}} else if(! l2)return 0; return invalid_arg(cst_List_map2)} function rev_map2(f,l1,l2) {var accu=0,l1$0=l1,l2$0=l2; for(;;) {if(l1$0) {if(l2$0) {var l2$1=l2$0[2], a2=l2$0[1], l1$1=l1$0[2], a1=l1$0[1], accu$0=[0,caml_call2(f,a1,a2),accu], accu=accu$0, l1$0=l1$1, l2$0=l2$1; continue}} else if(! l2$0)return accu; return invalid_arg(cst_List_rev_map2)}} function iter2$0(f,l1,l2) {var l1$0=l1,l2$0=l2; for(;;) {if(l1$0) {if(l2$0) {var l2$1=l2$0[2],a2=l2$0[1],l1$1=l1$0[2],a1=l1$0[1]; caml_call2(f,a1,a2); var l1$0=l1$1,l2$0=l2$1; continue}} else if(! l2$0)return 0; return invalid_arg(cst_List_iter2)}} function fold_left2$0(f,accu,l1,l2) {var accu$0=accu,l1$0=l1,l2$0=l2; for(;;) {if(l1$0) {if(l2$0) {var l2$1=l2$0[2], a2=l2$0[1], l1$1=l1$0[2], a1=l1$0[1], accu$1=caml_call3(f,accu$0,a1,a2), accu$0=accu$1, l1$0=l1$1, l2$0=l2$1; continue}} else if(! l2$0)return accu$0; return invalid_arg(cst_List_fold_left2)}} function fold_right2(f,l1,l2,accu) {if(l1) {if(l2) {var l2$0=l2[2],a2=l2[1],l1$0=l1[2],a1=l1[1]; return caml_call3(f,a1,a2,fold_right2(f,l1$0,l2$0,accu))}} else if(! l2)return accu; return invalid_arg(cst_List_fold_right2)} function for_all$0(p,param) {var param$0=param; for(;;) {if(param$0) {var l=param$0[2],a=param$0[1],_Ce_=caml_call1(p,a); if(_Ce_){var param$0=l;continue} return _Ce_} return 1}} function exists$0(p,param) {var param$0=param; for(;;) {if(param$0) {var l=param$0[2],a=param$0[1],_Cd_=caml_call1(p,a); if(_Cd_)return _Cd_; var param$0=l; continue} return 0}} function for_all2$0(p,l1,l2) {var l1$0=l1,l2$0=l2; for(;;) {if(l1$0) {if(l2$0) {var l2$1=l2$0[2], a2=l2$0[1], l1$1=l1$0[2], a1=l1$0[1], _Cc_=caml_call2(p,a1,a2); if(_Cc_){var l1$0=l1$1,l2$0=l2$1;continue} return _Cc_}} else if(! l2$0)return 1; return invalid_arg(cst_List_for_all2)}} function exists2$0(p,l1,l2) {var l1$0=l1,l2$0=l2; for(;;) {if(l1$0) {if(l2$0) {var l2$1=l2$0[2], a2=l2$0[1], l1$1=l1$0[2], a1=l1$0[1], _Cb_=caml_call2(p,a1,a2); if(_Cb_)return _Cb_; var l1$0=l1$1,l2$0=l2$1; continue}} else if(! l2$0)return 0; return invalid_arg(cst_List_exists2)}} function mem(x,param) {var param$0=param; for(;;) {if(param$0) {var l=param$0[2],a=param$0[1],_Ca_=0 === caml_compare(a,x)?1:0; if(_Ca_)return _Ca_; var param$0=l; continue} return 0}} function memq(x,param) {var param$0=param; for(;;) {if(param$0) {var l=param$0[2],a=param$0[1],_B$_=a === x?1:0; if(_B$_)return _B$_; var param$0=l; continue} return 0}} function assoc(x,param) {var param$0=param; for(;;) {if(param$0) {var l=param$0[2],match=param$0[1],b=match[2],a=match[1]; if(0 === caml_compare(a,x))return b; var param$0=l; continue} throw Not_found}} function assoc_opt(x,param) {var param$0=param; for(;;) {if(param$0) {var l=param$0[2],match=param$0[1],b=match[2],a=match[1]; if(0 === caml_compare(a,x))return [0,b]; var param$0=l; continue} return 0}} function assq(x,param) {var param$0=param; for(;;) {if(param$0) {var l=param$0[2],match=param$0[1],b=match[2],a=match[1]; if(a === x)return b; var param$0=l; continue} throw Not_found}} function assq_opt(x,param) {var param$0=param; for(;;) {if(param$0) {var l=param$0[2],match=param$0[1],b=match[2],a=match[1]; if(a === x)return [0,b]; var param$0=l; continue} return 0}} function mem_assoc(x,param) {var param$0=param; for(;;) {if(param$0) {var l=param$0[2], match=param$0[1], a=match[1], _B__=0 === caml_compare(a,x)?1:0; if(_B__)return _B__; var param$0=l; continue} return 0}} function mem_assq(x,param) {var param$0=param; for(;;) {if(param$0) {var l=param$0[2],match=param$0[1],a=match[1],_B9_=a === x?1:0; if(_B9_)return _B9_; var param$0=l; continue} return 0}} function remove_assoc(x,param) {if(param) {var l=param[2],pair=param[1],a=pair[1]; return 0 === caml_compare(a,x)?l:[0,pair,remove_assoc(x,l)]} return 0} function remove_assq(x,param) {if(param) {var l=param[2],pair=param[1],a=pair[1]; return a === x?l:[0,pair,remove_assq(x,l)]} return 0} function find$0(p,param) {var param$0=param; for(;;) {if(param$0) {var l=param$0[2],x=param$0[1]; if(caml_call1(p,x))return x; var param$0=l; continue} throw Not_found}} function find_opt(p,param) {var param$0=param; for(;;) {if(param$0) {var l=param$0[2],x=param$0[1]; if(caml_call1(p,x))return [0,x]; var param$0=l; continue} return 0}} function find_map$0(f,param) {var param$0=param; for(;;) {if(param$0) {var l=param$0[2],x=param$0[1],result=caml_call1(f,x); if(result)return result; var param$0=l; continue} return 0}} function find_all(p) {var accu=0; return function(param$0) {var accu$0=accu,param=param$0; for(;;) {if(param) {var l=param[2],x=param[1]; if(caml_call1(p,x)) {var accu$1=[0,x,accu$0],accu$0=accu$1,param=l;continue} var param=l; continue} return rev(accu$0)}}} function filteri(p,param) {var i=0,acc=0,param$0=param; for(;;) {if(param$0) {var l=param$0[2], x=param$0[1], acc$0=caml_call2(p,i,x)?[0,x,acc]:acc, i$0=i + 1 | 0, i=i$0, acc=acc$0, param$0=l; continue} return rev(acc)}} function filter_map$0(f) {var accu=0; return function(param$0) {var accu$0=accu,param=param$0; for(;;) {if(param) {var l=param[2],x=param[1],match=caml_call1(f,x); if(match) {var v=match[1],accu$1=[0,v,accu$0],accu$0=accu$1,param=l; continue} var param=l; continue} return rev(accu$0)}}} function concat_map(f,param) {var acc=0,param$0=param; for(;;) {if(param$0) {var l=param$0[2], x=param$0[1], xs=caml_call1(f,x), acc$0=rev_append(xs,acc), acc=acc$0, param$0=l; continue} return rev(acc)}} function fold_left_map(f,accu,param) {var accu$0=accu,l_accu=0,param$0=param; for(;;) {if(param$0) {var l=param$0[2], x=param$0[1], match=caml_call2(f,accu$0,x), x$0=match[2], accu$1=match[1], l_accu$0=[0,x$0,l_accu], accu$0=accu$1, l_accu=l_accu$0, param$0=l; continue} return [0,accu$0,rev(l_accu)]}} function partition$0(p,param) {var yes=0,no=0,param$0=param; for(;;) {if(param$0) {var l=param$0[2],x=param$0[1]; if(caml_call1(p,x)) {var yes$0=[0,x,yes],yes=yes$0,param$0=l;continue} var no$0=[0,x,no],no=no$0,param$0=l; continue} var _B8_=rev(no); return [0,rev(yes),_B8_]}} function partition_map$0(p,param) {var left=0,right=0,param$0=param; for(;;) {if(param$0) {var l=param$0[2],x=param$0[1],match=caml_call1(p,x); if(0 === match[0]) {var v=match[1],left$0=[0,v,left],left=left$0,param$0=l;continue} var v$0=match[1],right$0=[0,v$0,right],right=right$0,param$0=l; continue} var _B7_=rev(right); return [0,rev(left),_B7_]}} function split(param) {if(param) {var l=param[2], match=param[1], y=match[2], x=match[1], match$0=split(l), ry=match$0[2], rx=match$0[1]; return [0,[0,x,rx],[0,y,ry]]} return _A_} function combine(l1,l2) {if(l1) {if(l2) {var l2$0=l2[2],a2=l2[1],l1$0=l1[2],a1=l1[1]; return [0,[0,a1,a2],combine(l1$0,l2$0)]}} else if(! l2)return 0; return invalid_arg(cst_List_combine)} function merge(cmp,l1,l2) {if(l1) {if(l2) {var t2=l2[2],h2=l2[1],t1=l1[2],h1=l1[1]; return 0 < caml_call2(cmp,h1,h2) ?[0,h2,merge(cmp,l1,t2)] :[0,h1,merge(cmp,t1,l2)]} return l1} return l2} function fast_sort(cmp,l) {function rev_sort(n,l) {if(2 === n) {if(l) {var _B3_=l[2]; if(_B3_) {var tl=_B3_[2], x2=_B3_[1], x1=l[1], s=0 < caml_call2(cmp,x1,x2)?[0,x1,[0,x2,0]]:[0,x2,[0,x1,0]]; return [0,s,tl]}}} else if(3 === n && l) {var _B5_=l[2]; if(_B5_) {var _B6_=_B5_[2]; if(_B6_) {var tl$1=_B6_[2], x3=_B6_[1], x2$0=_B5_[1], x1$0=l[1], s$0= 0 < caml_call2(cmp,x1$0,x2$0) ?0 < caml_call2(cmp,x2$0,x3) ?[0,x1$0,[0,x2$0,[0,x3,0]]] :0 < caml_call2(cmp,x1$0,x3) ?[0,x1$0,[0,x3,[0,x2$0,0]]] :[0,x3,[0,x1$0,[0,x2$0,0]]] :0 < caml_call2(cmp,x1$0,x3) ?[0,x2$0,[0,x1$0,[0,x3,0]]] :0 < caml_call2(cmp,x2$0,x3) ?[0,x2$0,[0,x3,[0,x1$0,0]]] :[0,x3,[0,x2$0,[0,x1$0,0]]]; return [0,s$0,tl$1]}}} var n1=n >> 1, n2=n - n1 | 0, match=sort(n1,l), l2$0=match[2], s1=match[1], match$0=sort(n2,l2$0), tl$0=match$0[2], s2=match$0[1], l1=s1, l2=s2, accu=0; for(;;) {if(l1) {if(l2) {var t2=l2[2],h2=l2[1],t1=l1[2],h1=l1[1]; if(0 < caml_call2(cmp,h1,h2)) {var accu$0=[0,h2,accu],l2=t2,accu=accu$0;continue} var accu$1=[0,h1,accu],l1=t1,accu=accu$1; continue} var _B4_=rev_append(l1,accu)} else var _B4_=rev_append(l2,accu); return [0,_B4_,tl$0]}} function sort(n,l) {if(2 === n) {if(l) {var _BZ_=l[2]; if(_BZ_) {var tl=_BZ_[2], x2=_BZ_[1], x1=l[1], s=0 < caml_call2(cmp,x1,x2)?[0,x2,[0,x1,0]]:[0,x1,[0,x2,0]]; return [0,s,tl]}}} else if(3 === n && l) {var _B1_=l[2]; if(_B1_) {var _B2_=_B1_[2]; if(_B2_) {var tl$1=_B2_[2], x3=_B2_[1], x2$0=_B1_[1], x1$0=l[1], s$0= 0 < caml_call2(cmp,x1$0,x2$0) ?0 < caml_call2(cmp,x1$0,x3) ?0 < caml_call2(cmp,x2$0,x3) ?[0,x3,[0,x2$0,[0,x1$0,0]]] :[0,x2$0,[0,x3,[0,x1$0,0]]] :[0,x2$0,[0,x1$0,[0,x3,0]]] :0 < caml_call2(cmp,x2$0,x3) ?0 < caml_call2(cmp,x1$0,x3) ?[0,x3,[0,x1$0,[0,x2$0,0]]] :[0,x1$0,[0,x3,[0,x2$0,0]]] :[0,x1$0,[0,x2$0,[0,x3,0]]]; return [0,s$0,tl$1]}}} var n1=n >> 1, n2=n - n1 | 0, match=rev_sort(n1,l), l2$0=match[2], s1=match[1], match$0=rev_sort(n2,l2$0), tl$0=match$0[2], s2=match$0[1], l1=s1, l2=s2, accu=0; for(;;) {if(l1) {if(l2) {var t2=l2[2],h2=l2[1],t1=l1[2],h1=l1[1]; if(0 < caml_call2(cmp,h1,h2)) {var accu$0=[0,h1,accu],l1=t1,accu=accu$0;continue} var accu$1=[0,h2,accu],l2=t2,accu=accu$1; continue} var _B0_=rev_append(l1,accu)} else var _B0_=rev_append(l2,accu); return [0,_B0_,tl$0]}} var len=length$1(l); return 2 <= len?sort(len,l)[1]:l} function sort_uniq(cmp,l) {function rev_sort(n,l) {if(2 === n) {if(l) {var _BQ_=l[2]; if(_BQ_) {var tl=_BQ_[2], x2=_BQ_[1], x1=l[1], c$0=caml_call2(cmp,x1,x2), s=0 === c$0?[0,x1,0]:0 < c$0?[0,x1,[0,x2,0]]:[0,x2,[0,x1,0]]; return [0,s,tl]}}} else if(3 === n && l) {var _BS_=l[2]; if(_BS_) {var _BT_=_BS_[2]; if(_BT_) {var tl$1=_BT_[2], x3=_BT_[1], x2$0=_BS_[1], x1$0=l[1], c$1=caml_call2(cmp,x1$0,x2$0); if(0 === c$1) var c$2=caml_call2(cmp,x2$0,x3), _BU_= 0 === c$2 ?[0,x2$0,0] :0 < c$2?[0,x2$0,[0,x3,0]]:[0,x3,[0,x2$0,0]], s$0=_BU_; else if(0 < c$1) {var c$3=caml_call2(cmp,x2$0,x3); if(0 === c$3) var _BV_=[0,x1$0,[0,x2$0,0]]; else if(0 < c$3) var _BV_=[0,x1$0,[0,x2$0,[0,x3,0]]]; else var c$4=caml_call2(cmp,x1$0,x3), _BW_= 0 === c$4 ?[0,x1$0,[0,x2$0,0]] :0 < c$4 ?[0,x1$0,[0,x3,[0,x2$0,0]]] :[0,x3,[0,x1$0,[0,x2$0,0]]], _BV_=_BW_; var s$0=_BV_} else {var c$5=caml_call2(cmp,x1$0,x3); if(0 === c$5) var _BX_=[0,x2$0,[0,x1$0,0]]; else if(0 < c$5) var _BX_=[0,x2$0,[0,x1$0,[0,x3,0]]]; else var c$6=caml_call2(cmp,x2$0,x3), _BY_= 0 === c$6 ?[0,x2$0,[0,x1$0,0]] :0 < c$6 ?[0,x2$0,[0,x3,[0,x1$0,0]]] :[0,x3,[0,x2$0,[0,x1$0,0]]], _BX_=_BY_; var s$0=_BX_} return [0,s$0,tl$1]}}} var n1=n >> 1, n2=n - n1 | 0, match=sort(n1,l), l2$0=match[2], s1=match[1], match$0=sort(n2,l2$0), tl$0=match$0[2], s2=match$0[1], l1=s1, l2=s2, accu=0; for(;;) {if(l1) {if(l2) {var t2=l2[2],h2=l2[1],t1=l1[2],h1=l1[1],c=caml_call2(cmp,h1,h2); if(0 === c) {var accu$0=[0,h1,accu],l1=t1,l2=t2,accu=accu$0;continue} if(0 <= c){var accu$1=[0,h2,accu],l2=t2,accu=accu$1;continue} var accu$2=[0,h1,accu],l1=t1,accu=accu$2; continue} var _BR_=rev_append(l1,accu)} else var _BR_=rev_append(l2,accu); return [0,_BR_,tl$0]}} function sort(n,l) {if(2 === n) {if(l) {var _BH_=l[2]; if(_BH_) {var tl=_BH_[2], x2=_BH_[1], x1=l[1], c$0=caml_call2(cmp,x1,x2), s=0 === c$0?[0,x1,0]:0 <= c$0?[0,x2,[0,x1,0]]:[0,x1,[0,x2,0]]; return [0,s,tl]}}} else if(3 === n && l) {var _BJ_=l[2]; if(_BJ_) {var _BK_=_BJ_[2]; if(_BK_) {var tl$1=_BK_[2], x3=_BK_[1], x2$0=_BJ_[1], x1$0=l[1], c$1=caml_call2(cmp,x1$0,x2$0); if(0 === c$1) var c$2=caml_call2(cmp,x2$0,x3), _BL_= 0 === c$2 ?[0,x2$0,0] :0 <= c$2?[0,x3,[0,x2$0,0]]:[0,x2$0,[0,x3,0]], s$0=_BL_; else if(0 <= c$1) {var c$3=caml_call2(cmp,x1$0,x3); if(0 === c$3) var _BM_=[0,x2$0,[0,x1$0,0]]; else if(0 <= c$3) var c$4=caml_call2(cmp,x2$0,x3), _BN_= 0 === c$4 ?[0,x2$0,[0,x1$0,0]] :0 <= c$4 ?[0,x3,[0,x2$0,[0,x1$0,0]]] :[0,x2$0,[0,x3,[0,x1$0,0]]], _BM_=_BN_; else var _BM_=[0,x2$0,[0,x1$0,[0,x3,0]]]; var s$0=_BM_} else {var c$5=caml_call2(cmp,x2$0,x3); if(0 === c$5) var _BO_=[0,x1$0,[0,x2$0,0]]; else if(0 <= c$5) var c$6=caml_call2(cmp,x1$0,x3), _BP_= 0 === c$6 ?[0,x1$0,[0,x2$0,0]] :0 <= c$6 ?[0,x3,[0,x1$0,[0,x2$0,0]]] :[0,x1$0,[0,x3,[0,x2$0,0]]], _BO_=_BP_; else var _BO_=[0,x1$0,[0,x2$0,[0,x3,0]]]; var s$0=_BO_} return [0,s$0,tl$1]}}} var n1=n >> 1, n2=n - n1 | 0, match=rev_sort(n1,l), l2$0=match[2], s1=match[1], match$0=rev_sort(n2,l2$0), tl$0=match$0[2], s2=match$0[1], l1=s1, l2=s2, accu=0; for(;;) {if(l1) {if(l2) {var t2=l2[2],h2=l2[1],t1=l1[2],h1=l1[1],c=caml_call2(cmp,h1,h2); if(0 === c) {var accu$0=[0,h1,accu],l1=t1,l2=t2,accu=accu$0;continue} if(0 < c){var accu$1=[0,h1,accu],l1=t1,accu=accu$1;continue} var accu$2=[0,h2,accu],l2=t2,accu=accu$2; continue} var _BI_=rev_append(l1,accu)} else var _BI_=rev_append(l2,accu); return [0,_BI_,tl$0]}} var len=length$1(l); return 2 <= len?sort(len,l)[1]:l} function compare_lengths(l1,l2) {var l1$0=l1,l2$0=l2; for(;;) {if(l1$0) {if(l2$0){var l2$1=l2$0[2],l1$1=l1$0[2],l1$0=l1$1,l2$0=l2$1;continue} return 1} return l2$0?-1:0}} function compare_length_with(l,n) {var l$0=l,n$0=n; for(;;) {if(l$0) {var l$1=l$0[2]; if(0 < n$0){var n$1=n$0 - 1 | 0,l$0=l$1,n$0=n$1;continue} return 1} return 0 === n$0?0:0 < n$0?-1:1}} function equal$6(eq,l1,l2) {var l1$0=l1,l2$0=l2; for(;;) {if(l1$0) {if(l2$0) {var l2$1=l2$0[2], a2=l2$0[1], l1$1=l1$0[2], a1=l1$0[1], _BG_=caml_call2(eq,a1,a2); if(_BG_){var l1$0=l1$1,l2$0=l2$1;continue} return _BG_}} else if(! l2$0)return 1; return 0}} function compare$6(cmp,l1,l2) {var l1$0=l1,l2$0=l2; for(;;) {if(l1$0) {var _BE_=l1$0[2],_BF_=l1$0[1]; if(l2$0) {var l2$1=l2$0[2],a2=l2$0[1],c=caml_call2(cmp,_BF_,a2); if(0 === c){var l1$0=_BE_,l2$0=l2$1;continue} return c} return 1} return l2$0?-1:0}} function to_seq$1(l) {function aux(l,param) {if(l) {var tail=l[2],x=l[1]; return [0,x,function(_BD_){return aux(tail,_BD_)}]} return 0} return function(_BC_){return aux(l,_BC_)}} function of_seq(seq) {function direct(depth,seq) {if(0 === depth) {var _BB_=0; return rev(fold_left(function(acc,x){return [0,x,acc]},_BB_,seq))} var match=caml_call1(seq,0); if(match) {var next=match[2],x=match[1]; return [0,x,direct(depth - 1 | 0,next)]} return 0} return direct(500,seq)} var include$0= [0, length$1, compare_lengths, compare_length_with, cons$0, hd, tl, nth, nth_opt, rev, init$0, append, rev_append, flatten, flatten, equal$6, compare$6, iter$2, iteri$0, map$4, mapi$0, rev_map, filter_map$0, concat_map, fold_left_map, fold_left$0, fold_right, iter2$0, map2$0, rev_map2, fold_left2$0, fold_right2, for_all$0, exists$0, for_all2$0, exists2$0, mem, memq, find$0, find_opt, find_map$0, find_all, find_all, filteri, partition$0, partition_map$0, assoc, assoc_opt, assq, assq_opt, mem_assoc, mem_assq, remove_assoc, remove_assq, split, combine, fast_sort, fast_sort, fast_sort, sort_uniq, merge, to_seq$1, of_seq]; caml_register_global(788,include$0,"Stdlib__List"); var zero=0,one=1,minus_one=-1; function abs$0(x){return 0 <= x?x:- x | 0} var max_int$0=2147483647,min_int$0=-2147483648; function lognot(x){return x ^ -1} function equal$7(_BA_,_Bz_){return _BA_ === _Bz_?1:0} var compare$7=caml_int_compare; function min$1(x,y){return x <= y?x:y} function max$1(x,y){return y <= x?x:y} function to_string$1(x){return caml_string_of_jsbytes("" + x)} var Stdlib_Int= [0, zero, one, minus_one, abs$0, max_int$0, min_int$0, lognot, equal$7, compare$7, min$1, max$1, to_string$1]; caml_register_global(789,Stdlib_Int,"Stdlib__Int"); function make$0(n,c) {var s=caml_create_bytes(n);caml_fill_bytes(s,0,n,c);return s} function init$1(n,f) {var s=caml_create_bytes(n),_Bx_=n - 1 | 0,_Bw_=0; if(! (_Bx_ < 0)) {var i=_Bw_; for(;;) {caml_bytes_unsafe_set(s,i,caml_call1(f,i)); var _By_=i + 1 | 0; if(_Bx_ !== i){var i=_By_;continue} break}} return s} var empty$0=caml_create_bytes(0); function copy(s) {var len=caml_ml_bytes_length(s),r=caml_create_bytes(len); caml_blit_bytes(s,0,r,0,len); return r} function of_bytes(b){return caml_string_of_bytes(copy(b))} function to_bytes(s){return copy(caml_bytes_of_string(s))} function sub(s,ofs,len) {if (0 <= ofs && 0 <= len && ! ((caml_ml_bytes_length(s) - len | 0) < ofs)) {var r=caml_create_bytes(len);caml_blit_bytes(s,ofs,r,0,len);return r} return invalid_arg(cst_String_sub_Bytes_sub)} function sub_string(b,ofs,len) {return caml_string_of_bytes(sub(b,ofs,len))} function symbol$0(a,b) {var c=a + b | 0,_Bv_=b < 0?1:0,match=c < 0?1:0,switch$0=0; if(a < 0) {if(_Bv_ && ! match)switch$0 = 1} else if(! _Bv_ && match)switch$0 = 1; return switch$0?invalid_arg(cst_Bytes_extend):c} function extend(s,left,right) {var len=symbol$0(symbol$0(caml_ml_bytes_length(s),left),right), r=caml_create_bytes(len); if(0 <= left) var dstoff=left,srcoff=0; else var dstoff=0,srcoff=- left | 0; var cpylen=min$1(caml_ml_bytes_length(s) - srcoff | 0,len - dstoff | 0); if(0 < cpylen)caml_blit_bytes(s,srcoff,r,dstoff,cpylen); return r} function fill(s,ofs,len,c) {if (0 <= ofs && 0 <= len && ! ((caml_ml_bytes_length(s) - len | 0) < ofs)) return caml_fill_bytes(s,ofs,len,c); return invalid_arg(cst_String_fill_Bytes_fill)} function blit(s1,ofs1,s2,ofs2,len) {if (0 <= len && 0 <= ofs1 && ! ((caml_ml_bytes_length(s1) - len | 0) < ofs1) && 0 <= ofs2 && ! ((caml_ml_bytes_length(s2) - len | 0) < ofs2)) return caml_blit_bytes(s1,ofs1,s2,ofs2,len); return invalid_arg(cst_Bytes_blit)} function blit$0(s1,ofs1,s2,ofs2,len) {if (0 <= len && 0 <= ofs1 && ! ((caml_ml_string_length(s1) - len | 0) < ofs1) && 0 <= ofs2 && ! ((caml_ml_bytes_length(s2) - len | 0) < ofs2)) return caml_blit_string(s1,ofs1,s2,ofs2,len); return invalid_arg(cst_String_blit_Bytes_blit_str)} function iter$3(f,a) {var _Bt_=caml_ml_bytes_length(a) - 1 | 0,_Bs_=0; if(! (_Bt_ < 0)) {var i=_Bs_; for(;;) {caml_call1(f,caml_bytes_unsafe_get(a,i)); var _Bu_=i + 1 | 0; if(_Bt_ !== i){var i=_Bu_;continue} break}} return 0} function iteri$1(f,a) {var _Bq_=caml_ml_bytes_length(a) - 1 | 0,_Bp_=0; if(! (_Bq_ < 0)) {var i=_Bp_; for(;;) {caml_call2(f,i,caml_bytes_unsafe_get(a,i)); var _Br_=i + 1 | 0; if(_Bq_ !== i){var i=_Br_;continue} break}} return 0} function concat$0(sep,l) {if(l) {var seplen=caml_ml_bytes_length(sep),acc=0,param=l,pos$1=0; for(;;) {if(param) {var _Bm_=param[1]; if(param[2]) {var tl=param[2], x=(caml_ml_bytes_length(_Bm_) + seplen | 0) + acc | 0, acc$0=acc <= x?x:invalid_arg(cst_Bytes_concat), acc=acc$0, param=tl; continue} var _Bo_=caml_ml_bytes_length(_Bm_) + acc | 0} else var _Bo_=acc; var dst=caml_create_bytes(_Bo_),pos=pos$1,param$0=l; for(;;) {if(param$0) {var _Bn_=param$0[1]; if(param$0[2]) {var tl$0=param$0[2]; caml_blit_bytes(_Bn_,0,dst,pos,caml_ml_bytes_length(_Bn_)); caml_blit_bytes (sep,0,dst,pos + caml_ml_bytes_length(_Bn_) | 0,seplen); var pos$0=(pos + caml_ml_bytes_length(_Bn_) | 0) + seplen | 0, pos=pos$0, param$0=tl$0; continue} caml_blit_bytes(_Bn_,0,dst,pos,caml_ml_bytes_length(_Bn_)); return dst} return dst}}} return empty$0} function cat$0(s1,s2) {var l1=caml_ml_bytes_length(s1), l2=caml_ml_bytes_length(s2), r=caml_create_bytes(l1 + l2 | 0); caml_blit_bytes(s1,0,r,0,l1); caml_blit_bytes(s2,0,r,l1,l2); return r} function is_space(param) {var _Bl_=param - 9 | 0,switch$0=0; if(4 < _Bl_ >>> 0) {if(23 === _Bl_)switch$0 = 1} else if(2 !== _Bl_)switch$0 = 1; return switch$0?1:0} function trim(s) {var len=caml_ml_bytes_length(s),i=[0,0]; for(;;) {if(i[1] < len && is_space(caml_bytes_unsafe_get(s,i[1]))) {i[1]++;continue} var j=[0,len - 1 | 0]; for(;;) {if(i[1] <= j[1] && is_space(caml_bytes_unsafe_get(s,j[1]))) {j[1] += -1;continue} return i[1] <= j[1]?sub(s,i[1],(j[1] - i[1] | 0) + 1 | 0):empty$0}}} function escaped$0(s) {var n=[0,0],_Be_=caml_ml_bytes_length(s) - 1 | 0,_Bd_=0; if(! (_Be_ < 0)) {var i$0=_Bd_; for(;;) {var match=caml_bytes_unsafe_get(s,i$0),switch$0=0; if(32 <= match) {var _Bi_=match - 34 | 0,switch$1=0; if(58 < _Bi_ >>> 0) {if(93 <= _Bi_)switch$1 = 1} else if(56 < _Bi_ - 1 >>> 0){switch$0 = 1;switch$1 = 1} if(! switch$1){var _Bj_=1;switch$0 = 2}} else if(11 <= match) {if(13 === match)switch$0 = 1} else if(8 <= match)switch$0 = 1; switch(switch$0){case 0:var _Bj_=4;break;case 1:var _Bj_=2;break} n[1] = n[1] + _Bj_ | 0; var _Bk_=i$0 + 1 | 0; if(_Be_ !== i$0){var i$0=_Bk_;continue} break}} if(n[1] === caml_ml_bytes_length(s))return copy(s); var s$0=caml_create_bytes(n[1]); n[1] = 0; var _Bg_=caml_ml_bytes_length(s) - 1 | 0,_Bf_=0; if(! (_Bg_ < 0)) {var i=_Bf_; for(;;) {var c=caml_bytes_unsafe_get(s,i),switch$2=0; if(35 <= c) if(92 === c) switch$2 = 2; else if(127 <= c)switch$2 = 1;else switch$2 = 3; else if(32 <= c) if(34 <= c)switch$2 = 2;else switch$2 = 3; else if(14 <= c) switch$2 = 1; else switch(c) {case 8: caml_bytes_unsafe_set(s$0,n[1],92); n[1]++; caml_bytes_unsafe_set(s$0,n[1],98); break; case 9: caml_bytes_unsafe_set(s$0,n[1],92); n[1]++; caml_bytes_unsafe_set(s$0,n[1],116); break; case 10: caml_bytes_unsafe_set(s$0,n[1],92); n[1]++; caml_bytes_unsafe_set(s$0,n[1],110); break; case 13: caml_bytes_unsafe_set(s$0,n[1],92); n[1]++; caml_bytes_unsafe_set(s$0,n[1],114); break; default:switch$2 = 1} switch(switch$2) {case 1: caml_bytes_unsafe_set(s$0,n[1],92); n[1]++; caml_bytes_unsafe_set(s$0,n[1],48 + (c / 100 | 0) | 0); n[1]++; caml_bytes_unsafe_set(s$0,n[1],48 + ((c / 10 | 0) % 10 | 0) | 0); n[1]++; caml_bytes_unsafe_set(s$0,n[1],48 + (c % 10 | 0) | 0); break; case 2: caml_bytes_unsafe_set(s$0,n[1],92); n[1]++; caml_bytes_unsafe_set(s$0,n[1],c); break; case 3:caml_bytes_unsafe_set(s$0,n[1],c);break } n[1]++; var _Bh_=i + 1 | 0; if(_Bg_ !== i){var i=_Bh_;continue} break}} return s$0} function map$5(f,s) {var l=caml_ml_bytes_length(s); if(0 === l)return s; var r=caml_create_bytes(l),_Bb_=l - 1 | 0,_Ba_=0; if(! (_Bb_ < 0)) {var i=_Ba_; for(;;) {caml_bytes_unsafe_set(r,i,caml_call1(f,caml_bytes_unsafe_get(s,i))); var _Bc_=i + 1 | 0; if(_Bb_ !== i){var i=_Bc_;continue} break}} return r} function mapi$1(f,s) {var l=caml_ml_bytes_length(s); if(0 === l)return s; var r=caml_create_bytes(l),_A__=l - 1 | 0,_A9_=0; if(! (_A__ < 0)) {var i=_A9_; for(;;) {caml_bytes_unsafe_set (r,i,caml_call2(f,i,caml_bytes_unsafe_get(s,i))); var _A$_=i + 1 | 0; if(_A__ !== i){var i=_A$_;continue} break}} return r} function fold_left$1(f,x,a) {var r=[0,x],_A7_=caml_ml_bytes_length(a) - 1 | 0,_A6_=0; if(! (_A7_ < 0)) {var i=_A6_; for(;;) {r[1] = caml_call2(f,r[1],caml_bytes_unsafe_get(a,i)); var _A8_=i + 1 | 0; if(_A7_ !== i){var i=_A8_;continue} break}} return r[1]} function fold_right$0(f,a,x) {var r=[0,x],_A4_=caml_ml_bytes_length(a) - 1 | 0; if(! (_A4_ < 0)) {var i=_A4_; for(;;) {r[1] = caml_call2(f,caml_bytes_unsafe_get(a,i),r[1]); var _A5_=i - 1 | 0; if(0 !== i){var i=_A5_;continue} break}} return r[1]} function exists$1(p,s) {var n=caml_ml_bytes_length(s),i=0; for(;;) {if(i === n)return 0; if(caml_call1(p,caml_bytes_unsafe_get(s,i)))return 1; var i$0=i + 1 | 0,i=i$0; continue}} function for_all$1(p,s) {var n=caml_ml_bytes_length(s),i=0; for(;;) {if(i === n)return 1; if(caml_call1(p,caml_bytes_unsafe_get(s,i))) {var i$0=i + 1 | 0,i=i$0;continue} return 0}} function uppercase_ascii$0(s){return map$5(uppercase_ascii,s)} function lowercase_ascii$0(s){return map$5(lowercase_ascii,s)} function apply1(f,s) {if(0 === caml_ml_bytes_length(s))return s; var r=copy(s); caml_bytes_unsafe_set(r,0,caml_call1(f,caml_bytes_unsafe_get(s,0))); return r} function capitalize_ascii(s){return apply1(uppercase_ascii,s)} function uncapitalize_ascii(s){return apply1(lowercase_ascii,s)} function starts_with(prefix,s) {var len_s=caml_ml_bytes_length(s), len_pre=caml_ml_bytes_length(prefix), _A3_=len_pre <= len_s?1:0; if(_A3_) {var i=0; for(;;) {if(i === len_pre)return 1; if(caml_bytes_unsafe_get(s,i) !== caml_bytes_unsafe_get(prefix,i)) return 0; var i$0=i + 1 | 0,i=i$0; continue}} return _A3_} function ends_with(suffix,s) {var len_s=caml_ml_bytes_length(s), len_suf=caml_ml_bytes_length(suffix), diff=len_s - len_suf | 0, _A2_=0 <= diff?1:0; if(_A2_) {var i=0; for(;;) {if(i === len_suf)return 1; if (caml_bytes_unsafe_get(s,diff + i | 0) !== caml_bytes_unsafe_get(suffix,i)) return 0; var i$0=i + 1 | 0,i=i$0; continue}} return _A2_} function index_rec(s,lim,i,c) {var i$0=i; for(;;) {if(lim <= i$0)throw Not_found; if(caml_bytes_unsafe_get(s,i$0) === c)return i$0; var i$1=i$0 + 1 | 0,i$0=i$1; continue}} function index(s,c){return index_rec(s,caml_ml_bytes_length(s),0,c)} function index_rec_opt(s,lim,i,c) {var i$0=i; for(;;) {if(lim <= i$0)return 0; if(caml_bytes_unsafe_get(s,i$0) === c)return [0,i$0]; var i$1=i$0 + 1 | 0,i$0=i$1; continue}} function index_opt(s,c) {return index_rec_opt(s,caml_ml_bytes_length(s),0,c)} function index_from(s,i,c) {var l=caml_ml_bytes_length(s); if(0 <= i && ! (l < i))return index_rec(s,l,i,c); return invalid_arg(cst_String_index_from_Bytes_in)} function index_from_opt(s,i,c) {var l=caml_ml_bytes_length(s); if(0 <= i && ! (l < i))return index_rec_opt(s,l,i,c); return invalid_arg(cst_String_index_from_opt_Byte)} function rindex_rec(s,i,c) {var i$0=i; for(;;) {if(0 <= i$0) {if(caml_bytes_unsafe_get(s,i$0) === c)return i$0; var i$1=i$0 - 1 | 0,i$0=i$1; continue} throw Not_found}} function rindex(s,c) {return rindex_rec(s,caml_ml_bytes_length(s) - 1 | 0,c)} function rindex_from(s,i,c) {if(-1 <= i && ! (caml_ml_bytes_length(s) <= i))return rindex_rec(s,i,c); return invalid_arg(cst_String_rindex_from_Bytes_r)} function rindex_rec_opt(s,i,c) {var i$0=i; for(;;) {if(0 <= i$0) {if(caml_bytes_unsafe_get(s,i$0) === c)return [0,i$0]; var i$1=i$0 - 1 | 0,i$0=i$1; continue} return 0}} function rindex_opt(s,c) {return rindex_rec_opt(s,caml_ml_bytes_length(s) - 1 | 0,c)} function rindex_from_opt(s,i,c) {if(-1 <= i && ! (caml_ml_bytes_length(s) <= i)) return rindex_rec_opt(s,i,c); return invalid_arg(cst_String_rindex_from_opt_Byt)} function contains_from(s,i,c) {var l=caml_ml_bytes_length(s); if(0 <= i && ! (l < i)) try {index_rec(s,l,i,c);var _A0_=1;return _A0_} catch(_A1_) {_A1_ = caml_wrap_exception(_A1_); if(_A1_ === Not_found)return 0; throw _A1_} return invalid_arg(cst_String_contains_from_Bytes)} function contains(s,c){return contains_from(s,0,c)} function rcontains_from(s,i,c) {if(0 <= i && ! (caml_ml_bytes_length(s) <= i)) try {rindex_rec(s,i,c);var _AY_=1;return _AY_} catch(_AZ_) {_AZ_ = caml_wrap_exception(_AZ_); if(_AZ_ === Not_found)return 0; throw _AZ_} return invalid_arg(cst_String_rcontains_from_Byte)} function compare$8(x,y){return runtime.caml_bytes_compare(x,y)} function split_on_char(sep,s) {var r=[0,0], j=[0,caml_ml_bytes_length(s)], _AU_=caml_ml_bytes_length(s) - 1 | 0; if(! (_AU_ < 0)) {var i=_AU_; for(;;) {if(caml_bytes_unsafe_get(s,i) === sep) {var _AW_=r[1]; r[1] = [0,sub(s,i + 1 | 0,(j[1] - i | 0) - 1 | 0),_AW_]; j[1] = i} var _AX_=i - 1 | 0; if(0 !== i){var i=_AX_;continue} break}} var _AV_=r[1]; return [0,sub(s,0,j[1]),_AV_]} function uppercase$0(s){return map$5(uppercase,s)} function lowercase$0(s){return map$5(lowercase,s)} function capitalize(s){return apply1(uppercase,s)} function uncapitalize(s){return apply1(lowercase,s)} function to_seq$2(s) {function aux(i,param) {if(i === caml_ml_bytes_length(s))return 0; var x=caml_bytes_get(s,i),_AS_=i + 1 | 0; return [0,x,function(_AT_){return aux(_AS_,_AT_)}]} var _AQ_=0; return function(_AR_){return aux(_AQ_,_AR_)}} function to_seqi(s) {function aux(i,param) {if(i === caml_ml_bytes_length(s))return 0; var x=caml_bytes_get(s,i),_AO_=i + 1 | 0; return [0,[0,i,x],function(_AP_){return aux(_AO_,_AP_)}]} var _AM_=0; return function(_AN_){return aux(_AM_,_AN_)}} function of_seq$0(i) {var n=[0,0],buf=[0,make$0(256,0)]; iter (function(c) {if(n[1] === caml_ml_bytes_length(buf[1])) {var new_len= min$1(2 * caml_ml_bytes_length(buf[1]) | 0,max_string_length); if(caml_ml_bytes_length(buf[1]) === new_len) failwith(cst_Bytes_of_seq_cannot_grow_b); var new_buf=make$0(new_len,0); blit(buf[1],0,new_buf,0,n[1]); buf[1] = new_buf} caml_bytes_set(buf[1],n[1],c); n[1]++; return 0}, i); return sub(buf[1],0,n[1])} function get$1(b,i){return caml_bswap16(caml_bytes_get16(b,i))} function get_int8(b,i){return caml_bytes_get(b,i) << 24 >> 24} function get_uint16_le(b,i){return caml_bytes_get16(b,i)} function get_uint16_be(b,i){return caml_bswap16(caml_bytes_get16(b,i))} function get_int16_ne(b,i){return caml_bytes_get16(b,i) << 16 >> 16} function get_int16_le(b,i){return caml_bytes_get16(b,i) << 16 >> 16} function get_int16_be(b,i){return get_uint16_be(b,i) << 16 >> 16} function get_int32_le(b,i){return caml_bytes_get32(b,i)} function get_int32_be(b,i){return caml_int32_bswap(caml_bytes_get32(b,i))} function get_int64_le(b,i){return caml_bytes_get64(b,i)} function get_int64_be(b,i){return caml_int64_bswap(caml_bytes_get64(b,i))} function set$0(b,i,x){return caml_bytes_set16(b,i,caml_bswap16(x))} function set_int16_le(b,i,x){return caml_bytes_set16(b,i,x)} function set_int16_be(b,i,x){return caml_bytes_set16(b,i,caml_bswap16(x))} function set_int32_le(b,i,x){return caml_bytes_set32(b,i,x)} function set_int32_be(b,i,x) {return caml_bytes_set32(b,i,caml_int32_bswap(x))} function set_int64_le(b,i,x){return caml_bytes_set64(b,i,x)} function set_int64_be(b,i,x) {return caml_bytes_set64(b,i,caml_int64_bswap(x))} var set_uint8=caml_bytes_set,set_uint16_ne=caml_bytes_set16; function dec_ret(n,u){return utf_decode(n,u)} function not_in_x80_to_xBF(b){return 2 !== (b >>> 6 | 0)?1:0} function not_in_xA0_to_xBF(b){return 5 !== (b >>> 5 | 0)?1:0} function not_in_x80_to_x9F(b){return 4 !== (b >>> 5 | 0)?1:0} function not_in_x90_to_xBF(b) {var _AK_=b < 144?1:0,_AL_=_AK_ || (191 < b?1:0);return _AL_} function not_in_x80_to_x8F(b){return 8 !== (b >>> 4 | 0)?1:0} function utf_8_uchar_3(b0,b1,b2) {return (b0 & 15) << 12 | (b1 & 63) << 6 | b2 & 63} function utf_8_uchar_4(b0,b1,b2,b3) {return (b0 & 7) << 18 | (b1 & 63) << 12 | (b2 & 63) << 6 | b3 & 63} function get_utf_8_uchar(b,i) {var b0=caml_bytes_get(b,i),max=caml_ml_bytes_length(b) - 1 | 0; if(224 <= b0) {var switch$0=0; if(237 <= b0) {if(! (245 <= b0)) switch(b0 - 237 | 0) {case 0: var i$0=i + 1 | 0; if(max < i$0)return dec_invalid(1); var b1=caml_bytes_unsafe_get(b,i$0); if(not_in_x80_to_x9F(b1))return dec_invalid(1); var i$1=i$0 + 1 | 0; if(max < i$1)return dec_invalid(2); var b2=caml_bytes_unsafe_get(b,i$1); return not_in_x80_to_xBF(b2) ?dec_invalid(2) :dec_ret(3,utf_8_uchar_3(b0,b1,b2)); case 3: var i$4=i + 1 | 0; if(max < i$4)return dec_invalid(1); var b1$1=caml_bytes_unsafe_get(b,i$4); if(not_in_x90_to_xBF(b1$1))return dec_invalid(1); var i$5=i$4 + 1 | 0; if(max < i$5)return dec_invalid(2); var b2$1=caml_bytes_unsafe_get(b,i$5); if(not_in_x80_to_xBF(b2$1))return dec_invalid(2); var i$6=i$5 + 1 | 0; if(max < i$6)return dec_invalid(3); var b3=caml_bytes_unsafe_get(b,i$6); return not_in_x80_to_xBF(b3) ?dec_invalid(3) :dec_ret(4,utf_8_uchar_4(b0,b1$1,b2$1,b3)); case 7: var i$10=i + 1 | 0; if(max < i$10)return dec_invalid(1); var b1$3=caml_bytes_unsafe_get(b,i$10); if(not_in_x80_to_x8F(b1$3))return dec_invalid(1); var i$11=i$10 + 1 | 0; if(max < i$11)return dec_invalid(2); var b2$3=caml_bytes_unsafe_get(b,i$11); if(not_in_x80_to_xBF(b2$3))return dec_invalid(2); var i$12=i$11 + 1 | 0; if(max < i$12)return dec_invalid(3); var b3$1=caml_bytes_unsafe_get(b,i$12); return not_in_x80_to_xBF(b3$1) ?dec_invalid(3) :dec_ret(4,utf_8_uchar_4(b0,b1$3,b2$3,b3$1)); case 1: case 2:switch$0 = 1;break; default: var i$7=i + 1 | 0; if(max < i$7)return dec_invalid(1); var b1$2=caml_bytes_unsafe_get(b,i$7); if(not_in_x80_to_xBF(b1$2))return dec_invalid(1); var i$8=i$7 + 1 | 0; if(max < i$8)return dec_invalid(2); var b2$2=caml_bytes_unsafe_get(b,i$8); if(not_in_x80_to_xBF(b2$2))return dec_invalid(2); var i$9=i$8 + 1 | 0; if(max < i$9)return dec_invalid(3); var b3$0=caml_bytes_unsafe_get(b,i$9); return not_in_x80_to_xBF(b3$0) ?dec_invalid(3) :dec_ret(4,utf_8_uchar_4(b0,b1$2,b2$2,b3$0))}} else {if(! (225 <= b0)) {var i$13=i + 1 | 0; if(max < i$13)return dec_invalid(1); var b1$4=caml_bytes_unsafe_get(b,i$13); if(not_in_xA0_to_xBF(b1$4))return dec_invalid(1); var i$14=i$13 + 1 | 0; if(max < i$14)return dec_invalid(2); var b2$4=caml_bytes_unsafe_get(b,i$14); return not_in_x80_to_xBF(b2$4) ?dec_invalid(2) :dec_ret(3,utf_8_uchar_3(b0,b1$4,b2$4))} switch$0 = 1} if(switch$0) {var i$2=i + 1 | 0; if(max < i$2)return dec_invalid(1); var b1$0=caml_bytes_unsafe_get(b,i$2); if(not_in_x80_to_xBF(b1$0))return dec_invalid(1); var i$3=i$2 + 1 | 0; if(max < i$3)return dec_invalid(2); var b2$0=caml_bytes_unsafe_get(b,i$3); return not_in_x80_to_xBF(b2$0) ?dec_invalid(2) :dec_ret(3,utf_8_uchar_3(b0,b1$0,b2$0))}} else {if(! (128 <= b0))return dec_ret(1,b0); if(194 <= b0) {var i$15=i + 1 | 0; if(max < i$15)return dec_invalid(1); var b1$5=caml_bytes_unsafe_get(b,i$15); return not_in_x80_to_xBF(b1$5) ?dec_invalid(1) :dec_ret(2,(b0 & 31) << 6 | b1$5 & 63)}} return dec_invalid(1)} function set_utf_8_uchar(b,i,u) {function set(_AJ_,_AI_,_AH_) {caml_bytes_unsafe_set(_AJ_,_AI_,_AH_);return 0} var max=caml_ml_bytes_length(b) - 1 | 0; if(0 <= u) {if(127 < u) {if(2047 < u) {if(65535 < u) {if(1114111 < u)throw [0,Assert_failure,_B_]; var last=i + 3 | 0; return max < last ?0 :(caml_bytes_set(b,i,240 | u >>> 18 | 0), set(b,i + 1 | 0,128 | (u >>> 12 | 0) & 63), set(b,i + 2 | 0,128 | (u >>> 6 | 0) & 63), set(b,last,128 | u & 63), 4)} var last$0=i + 2 | 0; return max < last$0 ?0 :(caml_bytes_set(b,i,224 | u >>> 12 | 0), set(b,i + 1 | 0,128 | (u >>> 6 | 0) & 63), set(b,last$0,128 | u & 63), 3)} var last$1=i + 1 | 0; return max < last$1 ?0 :(caml_bytes_set(b,i,192 | u >>> 6 | 0), set(b,last$1,128 | u & 63), 2)} caml_bytes_set(b,i,u); return 1} throw [0,Assert_failure,_C_]} function is_valid_utf_8(b) {var max=caml_ml_bytes_length(b) - 1 | 0,i=0; for(;;) {if(max < i)return 1; var match=caml_bytes_unsafe_get(b,i); if(224 <= match) {var switch$0=0; if(237 <= match) {if(! (245 <= match)) switch(match - 237 | 0) {case 0: var last=i + 2 | 0; if (! (max < last) && ! not_in_x80_to_x9F(caml_bytes_unsafe_get(b,i + 1 | 0)) && ! not_in_x80_to_xBF(caml_bytes_unsafe_get(b,last))) {var i$0=last + 1 | 0,i=i$0;continue} return 0; case 3: var last$1=i + 3 | 0; if (! (max < last$1) && ! not_in_x90_to_xBF(caml_bytes_unsafe_get(b,i + 1 | 0)) && ! not_in_x80_to_xBF(caml_bytes_unsafe_get(b,i + 2 | 0)) && ! not_in_x80_to_xBF(caml_bytes_unsafe_get(b,last$1))) {var i$2=last$1 + 1 | 0,i=i$2;continue} return 0; case 7: var last$3=i + 3 | 0; if (! (max < last$3) && ! not_in_x80_to_x8F(caml_bytes_unsafe_get(b,i + 1 | 0)) && ! not_in_x80_to_xBF(caml_bytes_unsafe_get(b,i + 2 | 0)) && ! not_in_x80_to_xBF(caml_bytes_unsafe_get(b,last$3))) {var i$4=last$3 + 1 | 0,i=i$4;continue} return 0; case 1: case 2:switch$0 = 1;break; default: var last$2=i + 3 | 0; if (! (max < last$2) && ! not_in_x80_to_xBF(caml_bytes_unsafe_get(b,i + 1 | 0)) && ! not_in_x80_to_xBF(caml_bytes_unsafe_get(b,i + 2 | 0)) && ! not_in_x80_to_xBF(caml_bytes_unsafe_get(b,last$2))) {var i$3=last$2 + 1 | 0,i=i$3;continue} return 0}} else {if(! (225 <= match)) {var last$4=i + 2 | 0; if (! (max < last$4) && ! not_in_xA0_to_xBF(caml_bytes_unsafe_get(b,i + 1 | 0)) && ! not_in_x80_to_xBF(caml_bytes_unsafe_get(b,last$4))) {var i$5=last$4 + 1 | 0,i=i$5;continue} return 0} switch$0 = 1} if(switch$0) {var last$0=i + 2 | 0; if (! (max < last$0) && ! not_in_x80_to_xBF(caml_bytes_unsafe_get(b,i + 1 | 0)) && ! not_in_x80_to_xBF(caml_bytes_unsafe_get(b,last$0))) {var i$1=last$0 + 1 | 0,i=i$1;continue} return 0}} else {if(! (128 <= match)){var i$7=i + 1 | 0,i=i$7;continue} if(194 <= match) {var last$5=i + 1 | 0; if (! (max < last$5) && ! not_in_x80_to_xBF(caml_bytes_unsafe_get(b,last$5))) {var i$6=last$5 + 1 | 0,i=i$6;continue} return 0}} return 0}} function get_utf_16be_uchar(b,i) {var max=caml_ml_bytes_length(b) - 1 | 0; if(0 <= i && ! (max < i)) {if(i === max)return dec_invalid(1); var hi=get$1(b,i); if(55296 <= hi && ! (57343 < hi)) {if(56319 < hi)return dec_invalid(2); var last=i + 3 | 0; if(max < last)return dec_invalid((max - i | 0) + 1 | 0); var u=get$1(b,i + 2 | 0); if(56320 <= u && ! (57343 < u)) {var u$0=((hi & 1023) << 10 | u & 1023) + 65536 | 0; return dec_ret(4,u$0)} return dec_invalid(2)} return dec_ret(2,hi)} return invalid_arg(cst_index_out_of_bounds)} function set_utf_16be_uchar(b,i,u) {var max=caml_ml_bytes_length(b) - 1 | 0; if(0 <= i && ! (max < i)) {if(0 <= u) {if(65535 < u) {if(1114111 < u)throw [0,Assert_failure,_D_]; var last=i + 3 | 0; if(max < last)return 0; var u$0=u - 65536 | 0, hi=55296 | u$0 >>> 10 | 0, lo=56320 | u$0 & 1023; set$0(b,i,hi); set$0(b,i + 2 | 0,lo); return 4} var last$0=i + 1 | 0; return max < last$0?0:(set$0(b,i,u),2)} throw [0,Assert_failure,_E_]} return invalid_arg(cst_index_out_of_bounds$0)} function is_valid_utf_16be(b) {var max=caml_ml_bytes_length(b) - 1 | 0,i=0; for(;;) {if(max < i)return 1; if(i === max)return 0; var u=get$1(b,i); if(55296 <= u && ! (57343 < u)) {if(56319 < u)return 0; var last=i + 3 | 0; if(max < last)return 0; var u$0=get$1(b,i + 2 | 0); if(56320 <= u$0 && ! (57343 < u$0)) {var i$1=i + 4 | 0,i=i$1;continue} return 0} var i$0=i + 2 | 0,i=i$0; continue}} function get_utf_16le_uchar(b,i) {var max=caml_ml_bytes_length(b) - 1 | 0; if(0 <= i && ! (max < i)) {if(i === max)return dec_invalid(1); var hi=caml_bytes_get16(b,i); if(55296 <= hi && ! (57343 < hi)) {if(56319 < hi)return dec_invalid(2); var last=i + 3 | 0; if(max < last)return dec_invalid((max - i | 0) + 1 | 0); var u=caml_bytes_get16(b,i + 2 | 0); if(56320 <= u && ! (57343 < u)) {var u$0=((hi & 1023) << 10 | u & 1023) + 65536 | 0; return dec_ret(4,u$0)} return dec_invalid(2)} return dec_ret(2,hi)} return invalid_arg(cst_index_out_of_bounds$1)} function set_utf_16le_uchar(b,i,u) {var max=caml_ml_bytes_length(b) - 1 | 0; if(0 <= i && ! (max < i)) {if(0 <= u) {if(65535 < u) {if(1114111 < u)throw [0,Assert_failure,_F_]; var last=i + 3 | 0; if(max < last)return 0; var u$0=u - 65536 | 0, hi=55296 | u$0 >>> 10 | 0, lo=56320 | u$0 & 1023; caml_bytes_set16(b,i,hi); caml_bytes_set16(b,i + 2 | 0,lo); return 4} var last$0=i + 1 | 0; return max < last$0?0:(caml_bytes_set16(b,i,u),2)} throw [0,Assert_failure,_G_]} return invalid_arg(cst_index_out_of_bounds$2)} function is_valid_utf_16le(b) {var max=caml_ml_bytes_length(b) - 1 | 0,i=0; for(;;) {if(max < i)return 1; if(i === max)return 0; var u=caml_bytes_get16(b,i); if(55296 <= u && ! (57343 < u)) {if(56319 < u)return 0; var last=i + 3 | 0; if(max < last)return 0; var u$0=caml_bytes_get16(b,i + 2 | 0); if(56320 <= u$0 && ! (57343 < u$0)) {var i$1=i + 4 | 0,i=i$1;continue} return 0} var i$0=i + 2 | 0,i=i$0; continue}} var set_int64_ne=caml_bytes_set64, set_int32_ne=caml_bytes_set32, set_int16_ne=caml_bytes_set16, set_int8=caml_bytes_set, get_int64_ne=caml_bytes_get64, get_int32_ne=caml_bytes_get32, get_uint16_ne=caml_bytes_get16, get_uint8=caml_bytes_get, unsafe_of_string=caml_bytes_of_string, unsafe_to_string=caml_string_of_bytes, equal$8=runtime.caml_bytes_equal, include$1= [0, make$0, init$1, empty$0, copy, to_bytes, of_bytes, sub, sub_string, extend, fill, blit, blit$0, concat$0, cat$0, iter$3, iteri$1, map$5, mapi$1, fold_left$1, fold_right$0, for_all$1, exists$1, trim, escaped$0, index, index_opt, rindex, rindex_opt, index_from, index_from_opt, rindex_from, rindex_from_opt, contains, contains_from, rcontains_from, uppercase$0, lowercase$0, capitalize, uncapitalize, uppercase_ascii$0, lowercase_ascii$0, capitalize_ascii, uncapitalize_ascii, compare$8, equal$8, starts_with, ends_with, unsafe_to_string, unsafe_of_string, split_on_char, to_seq$2, to_seqi, of_seq$0, get_utf_8_uchar, set_utf_8_uchar, is_valid_utf_8, get_utf_16be_uchar, set_utf_16be_uchar, is_valid_utf_16be, get_utf_16le_uchar, set_utf_16le_uchar, is_valid_utf_16le, get_uint8, get_int8, get_uint16_ne, get_uint16_be, get_uint16_le, get_int16_ne, get_int16_be, get_int16_le, get_int32_ne, get_int32_be, get_int32_le, get_int64_ne, get_int64_be, get_int64_le, set_uint8, set_int8, set_uint16_ne, set_int16_be, set_int16_le, set_int16_ne, set_int16_be, set_int16_le, set_int32_ne, set_int32_be, set_int32_le, set_int64_ne, set_int64_be, set_int64_le]; caml_register_global(790,include$1,"Stdlib__Bytes"); function make$1(n,c){return caml_string_of_bytes(make$0(n,c))} function init$2(n,f){return caml_string_of_bytes(init$1(n,f))} function copy$0(s) {return caml_string_of_bytes(copy(caml_bytes_of_string(s)))} function sub$0(s,ofs,len) {return caml_string_of_bytes(sub(caml_bytes_of_string(s),ofs,len))} function concat$1(sep,l) {if(l) {var seplen=caml_ml_string_length(sep),acc=0,param=l,pos$1=0; for(;;) {if(param) {var _AE_=param[1]; if(param[2]) {var tl=param[2], x=(caml_ml_string_length(_AE_) + seplen | 0) + acc | 0, acc$0=acc <= x?x:invalid_arg(cst_String_concat), acc=acc$0, param=tl; continue} var _AG_=caml_ml_string_length(_AE_) + acc | 0} else var _AG_=acc; var dst=caml_create_bytes(_AG_),pos=pos$1,param$0=l; for(;;) {if(param$0) {var _AF_=param$0[1]; if(param$0[2]) {var tl$0=param$0[2]; caml_blit_string(_AF_,0,dst,pos,caml_ml_string_length(_AF_)); caml_blit_string (sep,0,dst,pos + caml_ml_string_length(_AF_) | 0,seplen); var pos$0=(pos + caml_ml_string_length(_AF_) | 0) + seplen | 0, pos=pos$0, param$0=tl$0; continue} caml_blit_string(_AF_,0,dst,pos,caml_ml_string_length(_AF_))} return caml_string_of_bytes(dst)}}} return cst$3} function iter$4(f,s) {var _AC_=caml_ml_string_length(s) - 1 | 0,_AB_=0; if(! (_AC_ < 0)) {var i=_AB_; for(;;) {caml_call1(f,caml_string_unsafe_get(s,i)); var _AD_=i + 1 | 0; if(_AC_ !== i){var i=_AD_;continue} break}} return 0} function iteri$2(f,s) {var _Az_=caml_ml_string_length(s) - 1 | 0,_Ay_=0; if(! (_Az_ < 0)) {var i=_Ay_; for(;;) {caml_call2(f,i,caml_string_unsafe_get(s,i)); var _AA_=i + 1 | 0; if(_Az_ !== i){var i=_AA_;continue} break}} return 0} function map$6(f,s) {return caml_string_of_bytes(map$5(f,caml_bytes_of_string(s)))} function mapi$2(f,s) {return caml_string_of_bytes(mapi$1(f,caml_bytes_of_string(s)))} function fold_right$1(f,x,a) {return fold_right$0(f,caml_bytes_of_string(x),a)} function fold_left$2(f,a,x) {return fold_left$1(f,a,caml_bytes_of_string(x))} function exists$2(f,s){return exists$1(f,caml_bytes_of_string(s))} function for_all$2(f,s){return for_all$1(f,caml_bytes_of_string(s))} function is_space$0(param) {var _Ax_=param - 9 | 0,switch$0=0; if(4 < _Ax_ >>> 0) {if(23 === _Ax_)switch$0 = 1} else if(2 !== _Ax_)switch$0 = 1; return switch$0?1:0} function trim$0(s) {if(caml_string_equal(s,cst$4))return s; if (! is_space$0(caml_string_unsafe_get(s,0)) && ! is_space$0(caml_string_unsafe_get(s,caml_ml_string_length(s) - 1 | 0))) return s; return caml_string_of_bytes(trim(caml_bytes_of_string(s)))} function escaped$1(s) {var n=caml_ml_string_length(s),i=0; for(;;) {if(n <= i)return s; var match=caml_string_unsafe_get(s,i),_Aw_=match - 32 | 0,switch$0=0; if(59 < _Aw_ >>> 0) {if(33 < _Aw_ - 61 >>> 0)switch$0 = 1} else if(2 === _Aw_)switch$0 = 1; if(switch$0) return caml_string_of_bytes(escaped$0(caml_bytes_of_string(s))); var i$0=i + 1 | 0,i=i$0; continue}} function index_rec$0(s,lim,i,c) {var i$0=i; for(;;) {if(lim <= i$0)throw Not_found; if(caml_string_unsafe_get(s,i$0) === c)return i$0; var i$1=i$0 + 1 | 0,i$0=i$1; continue}} function index$0(s,c){return index_rec$0(s,caml_ml_string_length(s),0,c)} function index_rec_opt$0(s,lim,i,c) {var i$0=i; for(;;) {if(lim <= i$0)return 0; if(caml_string_unsafe_get(s,i$0) === c)return [0,i$0]; var i$1=i$0 + 1 | 0,i$0=i$1; continue}} function index_opt$0(s,c) {return index_rec_opt$0(s,caml_ml_string_length(s),0,c)} function index_from$0(s,i,c) {var l=caml_ml_string_length(s); if(0 <= i && ! (l < i))return index_rec$0(s,l,i,c); return invalid_arg(cst_String_index_from_Bytes_in$0)} function index_from_opt$0(s,i,c) {var l=caml_ml_string_length(s); if(0 <= i && ! (l < i))return index_rec_opt$0(s,l,i,c); return invalid_arg(cst_String_index_from_opt_Byte$0)} function rindex_rec$0(s,i,c) {var i$0=i; for(;;) {if(0 <= i$0) {if(caml_string_unsafe_get(s,i$0) === c)return i$0; var i$1=i$0 - 1 | 0,i$0=i$1; continue} throw Not_found}} function rindex$0(s,c) {return rindex_rec$0(s,caml_ml_string_length(s) - 1 | 0,c)} function rindex_from$0(s,i,c) {if(-1 <= i && ! (caml_ml_string_length(s) <= i)) return rindex_rec$0(s,i,c); return invalid_arg(cst_String_rindex_from_Bytes_r$0)} function rindex_rec_opt$0(s,i,c) {var i$0=i; for(;;) {if(0 <= i$0) {if(caml_string_unsafe_get(s,i$0) === c)return [0,i$0]; var i$1=i$0 - 1 | 0,i$0=i$1; continue} return 0}} function rindex_opt$0(s,c) {return rindex_rec_opt$0(s,caml_ml_string_length(s) - 1 | 0,c)} function rindex_from_opt$0(s,i,c) {if(-1 <= i && ! (caml_ml_string_length(s) <= i)) return rindex_rec_opt$0(s,i,c); return invalid_arg(cst_String_rindex_from_opt_Byt$0)} function contains_from$0(s,i,c) {var l=caml_ml_string_length(s); if(0 <= i && ! (l < i)) try {index_rec$0(s,l,i,c);var _Au_=1;return _Au_} catch(_Av_) {_Av_ = caml_wrap_exception(_Av_); if(_Av_ === Not_found)return 0; throw _Av_} return invalid_arg(cst_String_contains_from_Bytes$0)} function contains$0(s,c){return contains_from$0(s,0,c)} function rcontains_from$0(s,i,c) {if(0 <= i && ! (caml_ml_string_length(s) <= i)) try {rindex_rec$0(s,i,c);var _As_=1;return _As_} catch(_At_) {_At_ = caml_wrap_exception(_At_); if(_At_ === Not_found)return 0; throw _At_} return invalid_arg(cst_String_rcontains_from_Byte$0)} function uppercase_ascii$1(s) {return caml_string_of_bytes(uppercase_ascii$0(caml_bytes_of_string(s)))} function lowercase_ascii$1(s) {return caml_string_of_bytes(lowercase_ascii$0(caml_bytes_of_string(s)))} function capitalize_ascii$0(s) {return caml_string_of_bytes(capitalize_ascii(caml_bytes_of_string(s)))} function uncapitalize_ascii$0(s) {return caml_string_of_bytes(uncapitalize_ascii(caml_bytes_of_string(s)))} function starts_with$0(prefix,s) {var len_s=caml_ml_string_length(s), len_pre=caml_ml_string_length(prefix), _Ar_=len_pre <= len_s?1:0; if(_Ar_) {var i=0; for(;;) {if(i === len_pre)return 1; if(caml_string_unsafe_get(s,i) !== caml_string_unsafe_get(prefix,i)) return 0; var i$0=i + 1 | 0,i=i$0; continue}} return _Ar_} function ends_with$0(suffix,s) {var len_s=caml_ml_string_length(s), len_suf=caml_ml_string_length(suffix), diff=len_s - len_suf | 0, _Aq_=0 <= diff?1:0; if(_Aq_) {var i=0; for(;;) {if(i === len_suf)return 1; if (caml_string_unsafe_get(s,diff + i | 0) !== caml_string_unsafe_get(suffix,i)) return 0; var i$0=i + 1 | 0,i=i$0; continue}} return _Aq_} function split_on_char$0(sep,s) {var r=[0,0], j=[0,caml_ml_string_length(s)], _Am_=caml_ml_string_length(s) - 1 | 0; if(! (_Am_ < 0)) {var i=_Am_; for(;;) {if(caml_string_unsafe_get(s,i) === sep) {var _Ao_=r[1]; r[1] = [0,sub$0(s,i + 1 | 0,(j[1] - i | 0) - 1 | 0),_Ao_]; j[1] = i} var _Ap_=i - 1 | 0; if(0 !== i){var i=_Ap_;continue} break}} var _An_=r[1]; return [0,sub$0(s,0,j[1]),_An_]} function uppercase$1(s) {return caml_string_of_bytes(uppercase$0(caml_bytes_of_string(s)))} function lowercase$1(s) {return caml_string_of_bytes(lowercase$0(caml_bytes_of_string(s)))} function capitalize$0(s) {return caml_string_of_bytes(capitalize(caml_bytes_of_string(s)))} function uncapitalize$0(s) {return caml_string_of_bytes(uncapitalize(caml_bytes_of_string(s)))} function compare$9(x,y){return caml_string_compare(x,y)} function to_seq$3(s){return to_seq$2(caml_bytes_of_string(s))} function to_seqi$0(s){return to_seqi(caml_bytes_of_string(s))} function of_seq$1(g){return caml_string_of_bytes(of_seq$0(g))} function get_utf_8_uchar$0(s,i) {return get_utf_8_uchar(caml_bytes_of_string(s),i)} function is_valid_utf_8$0(s) {return is_valid_utf_8(caml_bytes_of_string(s))} function get_utf_16be_uchar$0(s,i) {return get_utf_16be_uchar(caml_bytes_of_string(s),i)} function is_valid_utf_16be$0(s) {return is_valid_utf_16be(caml_bytes_of_string(s))} function get_utf_16le_uchar$0(s,i) {return get_utf_16le_uchar(caml_bytes_of_string(s),i)} function is_valid_utf_16le$0(s) {return is_valid_utf_16le(caml_bytes_of_string(s))} function get_int8$0(s,i){return get_int8(caml_bytes_of_string(s),i)} function get_uint16_le$0(s,i) {return caml_bytes_get16(caml_bytes_of_string(s),i)} function get_uint16_be$0(s,i) {return get_uint16_be(caml_bytes_of_string(s),i)} function get_int16_ne$0(s,i) {return get_int16_ne(caml_bytes_of_string(s),i)} function get_int16_le$0(s,i) {return get_int16_le(caml_bytes_of_string(s),i)} function get_int16_be$0(s,i) {return get_int16_be(caml_bytes_of_string(s),i)} function get_int32_le$0(s,i) {return caml_bytes_get32(caml_bytes_of_string(s),i)} function get_int32_be$0(s,i) {return get_int32_be(caml_bytes_of_string(s),i)} function get_int64_le$0(s,i) {return caml_bytes_get64(caml_bytes_of_string(s),i)} function get_int64_be$0(s,i) {return get_int64_be(caml_bytes_of_string(s),i)} var get_int64_ne$0=runtime.caml_string_get64, get_int32_ne$0=runtime.caml_string_get32, get_uint16_ne$0=runtime.caml_string_get16, get_uint8$0=caml_string_get, equal$9=caml_string_equal, include$2= [0, make$1, init$2, empty$1, of_bytes, to_bytes, concat$1, cat, equal$9, compare$9, starts_with$0, ends_with$0, contains_from$0, rcontains_from$0, contains$0, sub$0, split_on_char$0, map$6, mapi$2, fold_left$2, fold_right$1, for_all$2, exists$2, trim$0, escaped$1, uppercase_ascii$1, lowercase_ascii$1, capitalize_ascii$0, uncapitalize_ascii$0, iter$4, iteri$2, index_from$0, index_from_opt$0, rindex_from$0, rindex_from_opt$0, index$0, index_opt$0, rindex$0, rindex_opt$0, to_seq$3, to_seqi$0, of_seq$1, get_utf_8_uchar$0, is_valid_utf_8$0, get_utf_16be_uchar$0, is_valid_utf_16be$0, get_utf_16le_uchar$0, is_valid_utf_16le$0, blit$0, copy$0, fill, uppercase$1, lowercase$1, capitalize$0, uncapitalize$0, get_uint8$0, get_int8$0, get_uint16_ne$0, get_uint16_be$0, get_uint16_le$0, get_int16_ne$0, get_int16_be$0, get_int16_le$0, get_int32_ne$0, get_int32_be$0, get_int32_le$0, get_int64_ne$0, get_int64_be$0, get_int64_le$0]; caml_register_global(791,include$2,"Stdlib__String"); function equal$10(param,_Al_){return 1} function compare$10(param,_Ak_){return 0} function to_string$2(param){return cst$5} var Stdlib_Unit=[0,equal$10,compare$10,to_string$2]; caml_register_global(792,Stdlib_Unit,"Stdlib__Unit"); function to_buffer(buff,ofs,len,v,flags) {if (0 <= ofs && 0 <= len && ! ((caml_ml_bytes_length(buff) - len | 0) < ofs)) return runtime.caml_output_value_to_buffer(buff,ofs,len,v,flags); return invalid_arg(cst_Marshal_to_buffer_substrin)} var header_size=20; function data_size(buff,ofs) {if(0 <= ofs && ! ((caml_ml_bytes_length(buff) - 20 | 0) < ofs)) return caml_marshal_data_size(buff,ofs); return invalid_arg(cst_Marshal_data_size)} function total_size(buff,ofs){return 20 + data_size(buff,ofs) | 0} function from_bytes(buff,ofs) {if(0 <= ofs && ! ((caml_ml_bytes_length(buff) - 20 | 0) < ofs)) {var len=caml_marshal_data_size(buff,ofs); return (caml_ml_bytes_length(buff) - (20 + len | 0) | 0) < ofs ?invalid_arg(cst_Marshal_from_bytes$0) :runtime.caml_input_value_from_bytes(buff,ofs)} return invalid_arg(cst_Marshal_from_bytes)} function from_string(buff,ofs) {return from_bytes(caml_bytes_of_string(buff),ofs)} var Stdlib_Marshal= [0, caml_output_value, to_buffer, caml_input_value, from_bytes, from_string, header_size, data_size, total_size]; caml_register_global(793,Stdlib_Marshal,"Stdlib__Marshal"); var make_float=runtime.caml_make_float_vect,Floatarray=[0]; function init$3(l,f) {if(0 === l)return [0]; if(0 <= l) {var res=caml_make_vect(l,caml_call1(f,0)),_Ai_=l - 1 | 0,_Ah_=1; if(! (_Ai_ < 1)) {var i=_Ah_; for(;;) {res[1 + i] = caml_call1(f,i); var _Aj_=i + 1 | 0; if(_Ai_ !== i){var i=_Aj_;continue} break}} return res} return invalid_arg(cst_Array_init)} function create_matrix(sx,sy,init) {var res=caml_make_vect(sx,[0]),_Af_=sx - 1 | 0,_Ae_=0; if(! (_Af_ < 0)) {var x=_Ae_; for(;;) {res[1 + x] = caml_make_vect(sy,init); var _Ag_=x + 1 | 0; if(_Af_ !== x){var x=_Ag_;continue} break}} return res} function copy$1(a) {var l=a.length - 1;return 0 === l?[0]:caml_array_sub(a,0,l)} function append$1(a1,a2) {var l1=a1.length - 1; return 0 === l1 ?copy$1(a2) :0 === a2.length - 1 ?caml_array_sub(a1,0,l1) :runtime.caml_array_append(a1,a2)} function sub$1(a,ofs,len) {if(0 <= ofs && 0 <= len && ! ((a.length - 1 - len | 0) < ofs)) return caml_array_sub(a,ofs,len); return invalid_arg(cst_Array_sub)} function fill$0(a,ofs,len,v) {if(0 <= ofs && 0 <= len && ! ((a.length - 1 - len | 0) < ofs)) return runtime.caml_array_fill(a,ofs,len,v); return invalid_arg(cst_Array_fill)} function blit$1(a1,ofs1,a2,ofs2,len) {if (0 <= len && 0 <= ofs1 && ! ((a1.length - 1 - len | 0) < ofs1) && 0 <= ofs2 && ! ((a2.length - 1 - len | 0) < ofs2)) return runtime.caml_array_blit(a1,ofs1,a2,ofs2,len); return invalid_arg(cst_Array_blit)} function iter$5(f,a) {var _Ac_=a.length - 1 - 1 | 0,_Ab_=0; if(! (_Ac_ < 0)) {var i=_Ab_; for(;;) {caml_call1(f,a[1 + i]); var _Ad_=i + 1 | 0; if(_Ac_ !== i){var i=_Ad_;continue} break}} return 0} function iter2$1(f,a,b) {if(a.length - 1 !== b.length - 1) return invalid_arg(cst_Array_iter2_arrays_must_ha); var _z$_=a.length - 1 - 1 | 0,_z__=0; if(! (_z$_ < 0)) {var i=_z__; for(;;) {caml_call2(f,a[1 + i],b[1 + i]); var _Aa_=i + 1 | 0; if(_z$_ !== i){var i=_Aa_;continue} break}} return 0} function map$7(f,a) {var l=a.length - 1; if(0 === l)return [0]; var r=caml_make_vect(l,caml_call1(f,a[1])),_z8_=l - 1 | 0,_z7_=1; if(! (_z8_ < 1)) {var i=_z7_; for(;;) {r[1 + i] = caml_call1(f,a[1 + i]); var _z9_=i + 1 | 0; if(_z8_ !== i){var i=_z9_;continue} break}} return r} function map2$1(f,a,b) {var la=a.length - 1,lb=b.length - 1; if(la !== lb)return invalid_arg(cst_Array_map2_arrays_must_hav); if(0 === la)return [0]; var r=caml_make_vect(la,caml_call2(f,a[1],b[1])),_z5_=la - 1 | 0,_z4_=1; if(! (_z5_ < 1)) {var i=_z4_; for(;;) {r[1 + i] = caml_call2(f,a[1 + i],b[1 + i]); var _z6_=i + 1 | 0; if(_z5_ !== i){var i=_z6_;continue} break}} return r} function iteri$3(f,a) {var _z2_=a.length - 1 - 1 | 0,_z1_=0; if(! (_z2_ < 0)) {var i=_z1_; for(;;) {caml_call2(f,i,a[1 + i]); var _z3_=i + 1 | 0; if(_z2_ !== i){var i=_z3_;continue} break}} return 0} function mapi$3(f,a) {var l=a.length - 1; if(0 === l)return [0]; var r=caml_make_vect(l,caml_call2(f,0,a[1])),_zZ_=l - 1 | 0,_zY_=1; if(! (_zZ_ < 1)) {var i=_zY_; for(;;) {r[1 + i] = caml_call2(f,i,a[1 + i]); var _z0_=i + 1 | 0; if(_zZ_ !== i){var i=_z0_;continue} break}} return r} function to_list$1(a) {var i$1=a.length - 1 - 1 | 0,i=i$1,res=0; for(;;) {if(0 <= i) {var res$0=[0,a[1 + i],res],i$0=i - 1 | 0,i=i$0,res=res$0;continue} return res}} function list_length(accu,param) {var accu$0=accu,param$0=param; for(;;) {if(param$0) {var param$1=param$0[2], accu$1=accu$0 + 1 | 0, accu$0=accu$1, param$0=param$1; continue} return accu$0}} function of_list(l) {if(l) {var tl=l[2], hd=l[1], a=caml_make_vect(list_length(0,l),hd), i=1, param=tl; for(;;) {if(param) {var tl$0=param[2],hd$0=param[1]; a[1 + i] = hd$0; var i$0=i + 1 | 0,i=i$0,param=tl$0; continue} return a}} return [0]} function fold_left$3(f,x,a) {var r=[0,x],_zW_=a.length - 1 - 1 | 0,_zV_=0; if(! (_zW_ < 0)) {var i=_zV_; for(;;) {r[1] = caml_call2(f,r[1],a[1 + i]); var _zX_=i + 1 | 0; if(_zW_ !== i){var i=_zX_;continue} break}} return r[1]} function fold_left_map$0(f,acc,input_array) {var len=input_array.length - 1; if(0 === len)return [0,acc,[0]]; var match=caml_call2(f,acc,input_array[1]), elt=match[2], acc$0=match[1], output_array=caml_make_vect(len,elt), acc$1=[0,acc$0], _zT_=len - 1 | 0, _zS_=1; if(! (_zT_ < 1)) {var i=_zS_; for(;;) {var match$0=caml_call2(f,acc$1[1],input_array[1 + i]), elt$0=match$0[2], acc$2=match$0[1]; acc$1[1] = acc$2; output_array[1 + i] = elt$0; var _zU_=i + 1 | 0; if(_zT_ !== i){var i=_zU_;continue} break}} return [0,acc$1[1],output_array]} function fold_right$2(f,a,x) {var r=[0,x],_zQ_=a.length - 1 - 1 | 0; if(! (_zQ_ < 0)) {var i=_zQ_; for(;;) {r[1] = caml_call2(f,a[1 + i],r[1]); var _zR_=i - 1 | 0; if(0 !== i){var i=_zR_;continue} break}} return r[1]} function exists$3(p,a) {var n=a.length - 1,i=0; for(;;) {if(i === n)return 0; if(caml_call1(p,a[1 + i]))return 1; var i$0=i + 1 | 0,i=i$0; continue}} function for_all$3(p,a) {var n=a.length - 1,i=0; for(;;) {if(i === n)return 1; if(caml_call1(p,a[1 + i])){var i$0=i + 1 | 0,i=i$0;continue} return 0}} function for_all2$1(p,l1,l2) {var n1=l1.length - 1,n2=l2.length - 1; if(n1 !== n2)return invalid_arg(cst_Array_for_all2); var i=0; for(;;) {if(i === n1)return 1; if(caml_call2(p,l1[1 + i],l2[1 + i])) {var i$0=i + 1 | 0,i=i$0;continue} return 0}} function exists2$1(p,l1,l2) {var n1=l1.length - 1,n2=l2.length - 1; if(n1 !== n2)return invalid_arg(cst_Array_exists2); var i=0; for(;;) {if(i === n1)return 0; if(caml_call2(p,l1[1 + i],l2[1 + i]))return 1; var i$0=i + 1 | 0,i=i$0; continue}} function mem$0(x,a) {var n=a.length - 1,i=0; for(;;) {if(i === n)return 0; if(0 === caml_compare(a[1 + i],x))return 1; var i$0=i + 1 | 0,i=i$0; continue}} function memq$0(x,a) {var n=a.length - 1,i=0; for(;;) {if(i === n)return 0; if(x === a[1 + i])return 1; var i$0=i + 1 | 0,i=i$0; continue}} function find_opt$0(p,a) {var n=a.length - 1,i=0; for(;;) {if(i === n)return 0; var x=a[1 + i]; if(caml_call1(p,x))return [0,x]; var i$0=i + 1 | 0,i=i$0; continue}} function find_map$1(f,a) {var n=a.length - 1,i=0; for(;;) {if(i === n)return 0; var r=caml_call1(f,a[1 + i]); if(r)return r; var i$0=i + 1 | 0,i=i$0; continue}} function split$0(x) {if(caml_equal(x,[0]))return [0,[0],[0]]; var match=x[1], b0=match[2], a0=match[1], n=x.length - 1, a=caml_make_vect(n,a0), b=caml_make_vect(n,b0), _zO_=n - 1 | 0, _zN_=1; if(! (_zO_ < 1)) {var i=_zN_; for(;;) {var match$0=x[1 + i],bi=match$0[2],ai=match$0[1]; a[1 + i] = ai; b[1 + i] = bi; var _zP_=i + 1 | 0; if(_zO_ !== i){var i=_zP_;continue} break}} return [0,a,b]} function combine$0(a,b) {var na=a.length - 1,nb=b.length - 1; if(na !== nb)invalid_arg(cst_Array_combine); if(0 === na)return [0]; var x=caml_make_vect(na,[0,a[1],b[1]]),_zL_=na - 1 | 0,_zK_=1; if(! (_zL_ < 1)) {var i=_zK_; for(;;) {x[1 + i] = [0,a[1 + i],b[1 + i]]; var _zM_=i + 1 | 0; if(_zL_ !== i){var i=_zM_;continue} break}} return x} var Bottom=[248,cst_Stdlib_Array_Bottom,caml_fresh_oo_id(0)]; function sort(cmp,a) {function maxson(l,i) {var i31=((i + i | 0) + i | 0) + 1 | 0,x=[0,i31]; if((i31 + 2 | 0) < l) {var _zD_=i31 + 1 | 0,_zE_=caml_check_bound(a,_zD_)[1 + _zD_]; if(caml_call2(cmp,caml_check_bound(a,i31)[1 + i31],_zE_) < 0) x[1] = i31 + 1 | 0; var _zF_=i31 + 2 | 0, _zG_=caml_check_bound(a,_zF_)[1 + _zF_], _zH_=x[1]; if(caml_call2(cmp,caml_check_bound(a,_zH_)[1 + _zH_],_zG_) < 0) x[1] = i31 + 2 | 0; return x[1]} if((i31 + 1 | 0) < l) {var _zI_=i31 + 1 | 0,_zJ_=caml_check_bound(a,_zI_)[1 + _zI_]; if(! (0 <= caml_call2(cmp,caml_check_bound(a,i31)[1 + i31],_zJ_))) return i31 + 1 | 0} if(i31 < l)return i31; throw [0,Bottom,i]} function trickledown(l,i,e) {var i$0=i; for(;;) {var j=maxson(l,i$0); if(0 < caml_call2(cmp,caml_check_bound(a,j)[1 + j],e)) {var _zC_=caml_check_bound(a,j)[1 + j]; caml_check_bound(a,i$0)[1 + i$0] = _zC_; var i$0=j; continue} caml_check_bound(a,i$0)[1 + i$0] = e; return 0}} function trickle(l,i,e) {try {var _zB_=trickledown(l,i,e);return _zB_} catch(exn) {exn = caml_wrap_exception(exn); if(exn[1] === Bottom) {var i$0=exn[2];caml_check_bound(a,i$0)[1 + i$0] = e;return 0} throw exn}} function bubbledown(l,i) {var i$0=i; for(;;) {var i$1=maxson(l,i$0),_zA_=caml_check_bound(a,i$1)[1 + i$1]; caml_check_bound(a,i$0)[1 + i$0] = _zA_; var i$0=i$1; continue}} function bubble(l,i) {try {var _zz_=bubbledown(l,i);return _zz_} catch(exn) {exn = caml_wrap_exception(exn); if(exn[1] === Bottom){var i$0=exn[2];return i$0} throw exn}} var l=a.length - 1,_zr_=((l + 1 | 0) / 3 | 0) - 1 | 0; if(! (_zr_ < 0)) {var i$2=_zr_; for(;;) {trickle(l,i$2,caml_check_bound(a,i$2)[1 + i$2]); var _zy_=i$2 - 1 | 0; if(0 !== i$2){var i$2=_zy_;continue} break}} var _zs_=l - 1 | 0; if(! (_zs_ < 2)) {var i$0=_zs_; a: for(;;) {var e$0=caml_check_bound(a,i$0)[1 + i$0], _zw_=caml_check_bound(a,0)[1]; caml_check_bound(a,i$0)[1 + i$0] = _zw_; var i$1=bubble(i$0,0),i=i$1; for(;;) {var father=(i - 1 | 0) / 3 | 0; if(i === father)throw [0,Assert_failure,_H_]; if (0 <= caml_call2(cmp,caml_check_bound(a,father)[1 + father],e$0)) caml_check_bound(a,i)[1 + i] = e$0; else {var _zq_=caml_check_bound(a,father)[1 + father]; caml_check_bound(a,i)[1 + i] = _zq_; if(0 < father){var i=father;continue} caml_check_bound(a,0)[1] = e$0} var _zx_=i$0 - 1 | 0; if(2 !== i$0){var i$0=_zx_;continue a} break} break}} var _zt_=1 < l?1:0; if(_zt_) {var e=caml_check_bound(a,1)[2],_zu_=caml_check_bound(a,0)[1]; caml_check_bound(a,1)[2] = _zu_; caml_check_bound(a,0)[1] = e; var _zv_=0} else var _zv_=_zt_; return _zv_} function fast_sort$0(cmp,a) {function merge(src1ofs,src1len,src2,src2ofs,src2len,dst,dstofs) {var src1r=src1ofs + src1len | 0, src2r=src2ofs + src2len | 0, s2$1=caml_check_bound(src2,src2ofs)[1 + src2ofs], s1$1=caml_check_bound(a,src1ofs)[1 + src1ofs], i1=src1ofs, s1=s1$1, i2=src2ofs, s2=s2$1, d=dstofs; for(;;) {if(0 < caml_call2(cmp,s1,s2)) {caml_check_bound(dst,d)[1 + d] = s2; var i2$0=i2 + 1 | 0; if(i2$0 < src2r) {var d$0=d + 1 | 0, s2$0=caml_check_bound(src2,i2$0)[1 + i2$0], i2=i2$0, s2=s2$0, d=d$0; continue} return blit$1(a,i1,dst,d + 1 | 0,src1r - i1 | 0)} caml_check_bound(dst,d)[1 + d] = s1; var i1$0=i1 + 1 | 0; if(i1$0 < src1r) {var d$1=d + 1 | 0, s1$0=caml_check_bound(a,i1$0)[1 + i1$0], i1=i1$0, s1=s1$0, d=d$1; continue} return blit$1(src2,i2,dst,d + 1 | 0,src2r - i2 | 0)}} function isortto(srcofs,dst,dstofs,len) {var _zi_=len - 1 | 0,_zh_=0; if(! (_zi_ < 0)) {var i=_zh_; a: for(;;) {var _zj_=srcofs + i | 0, e=caml_check_bound(a,_zj_)[1 + _zj_], j=[0,(dstofs + i | 0) - 1 | 0]; for(;;) {if(dstofs <= j[1]) {var _zk_=j[1]; if(0 < caml_call2(cmp,caml_check_bound(dst,_zk_)[1 + _zk_],e)) {var _zl_=j[1], _zm_=caml_check_bound(dst,_zl_)[1 + _zl_], _zn_=j[1] + 1 | 0; caml_check_bound(dst,_zn_)[1 + _zn_] = _zm_; j[1] += -1; continue}} var _zo_=j[1] + 1 | 0; caml_check_bound(dst,_zo_)[1 + _zo_] = e; var _zp_=i + 1 | 0; if(_zi_ !== i){var i=_zp_;continue a} break} break}} return 0} function sortto(srcofs,dst,dstofs,len) {if(len <= 5)return isortto(srcofs,dst,dstofs,len); var l1=len / 2 | 0,l2=len - l1 | 0; sortto(srcofs + l1 | 0,dst,dstofs + l1 | 0,l2); sortto(srcofs,a,srcofs + l2 | 0,l1); return merge(srcofs + l2 | 0,l1,dst,dstofs + l1 | 0,l2,dst,dstofs)} var l=a.length - 1; if(l <= 5)return isortto(0,a,0,l); var l1=l / 2 | 0, l2=l - l1 | 0, t=caml_make_vect(l2,caml_check_bound(a,0)[1]); sortto(l1,t,0,l2); sortto(0,a,l2,l1); return merge(l2,l1,t,0,l2,a,0)} function to_seq$4(a) {function aux(i,param) {if(i < a.length - 1) {var x=a[1 + i],_zf_=i + 1 | 0; return [0,x,function(_zg_){return aux(_zf_,_zg_)}]} return 0} var _zd_=0; return function(_ze_){return aux(_zd_,_ze_)}} function to_seqi$1(a) {function aux(i,param) {if(i < a.length - 1) {var x=a[1 + i],_zb_=i + 1 | 0; return [0,[0,i,x],function(_zc_){return aux(_zb_,_zc_)}]} return 0} var _y$_=0; return function(_za_){return aux(_y$_,_za_)}} function of_seq$2(i$2) {var _y__=0,l=fold_left(function(acc,x){return [0,x,acc]},_y__,i$2); if(l) {var tl=l[2], hd=l[1], len=list_length(0,l), a=caml_make_vect(len,hd), i$1=len - 2 | 0, i=i$1, param=tl; for(;;) {if(param) {var tl$0=param[2],hd$0=param[1]; a[1 + i] = hd$0; var i$0=i - 1 | 0,i=i$0,param=tl$0; continue} return a}} return [0]} var concat$2=caml_array_concat, include$3= [0, make_float, init$3, create_matrix, create_matrix, append$1, concat$2, sub$1, copy$1, fill$0, blit$1, to_list$1, of_list, iter$5, iteri$3, map$7, mapi$3, fold_left$3, fold_left_map$0, fold_right$2, iter2$1, map2$1, for_all$3, exists$3, for_all2$1, exists2$1, mem$0, memq$0, find_opt$0, find_map$1, split$0, combine$0, sort, fast_sort$0, fast_sort$0, to_seq$4, to_seqi$1, of_seq$2, Floatarray]; caml_register_global(794,include$3,"Stdlib__Array"); var zero$0=0.,one$0=1.,minus_one$0=-1.; function is_finite(x){return x - x == 0.?1:0} function is_infinite(x){return 1. / x == 0.?1:0} function is_nan(x){return x != x?1:0} var pi=3.14159265358979312; function is_integer(x) {var _y9_=x == runtime.caml_trunc_float(x)?1:0; return _y9_?is_finite(x):_y9_} function succ$0(x){return caml_nextafter_float(x,infinity)} function pred$0(x){return caml_nextafter_float(x,neg_infinity)} function equal$11(x,y){return 0 === caml_float_compare(x,y)?1:0} function min$2(x,y) {if(! (x < y)) {var switch$0=0; if(caml_signbit_float(y) || ! caml_signbit_float(x))switch$0 = 1; if(switch$0)return x != x?x:y} return y != y?y:x} function max$2(x,y) {if(! (x < y)) {var switch$0=0; if(caml_signbit_float(y) || ! caml_signbit_float(x))switch$0 = 1; if(switch$0)return y != y?y:x} return x != x?x:y} function min_max(x,y) {if(x == x && y == y) {if(! (x < y)) {var switch$0=0; if(caml_signbit_float(y) || ! caml_signbit_float(x))switch$0 = 1; if(switch$0)return [0,y,x]} return [0,x,y]} return [0,nan,nan]} function min_num(x,y) {if(! (x < y)) {var switch$0=0; if(caml_signbit_float(y) || ! caml_signbit_float(x))switch$0 = 1; if(switch$0)return y != y?x:y} return x != x?y:x} function max_num(x,y) {if(! (x < y)) {var switch$0=0; if(caml_signbit_float(y) || ! caml_signbit_float(x))switch$0 = 1; if(switch$0)return x != x?y:x} return y != y?x:y} function min_max_num(x,y) {if(x != x)return [0,y,y]; if(y != y)return [0,x,x]; if(! (x < y)) {var switch$0=0; if(caml_signbit_float(y) || ! caml_signbit_float(x))switch$0 = 1; if(switch$0)return [0,y,x]} return [0,x,y]} function hash$0(x){return caml_hash(10,100,0,x)} function unsafe_fill(a,ofs,len,v) {var _y7_=(ofs + len | 0) - 1 | 0; if(! (_y7_ < ofs)) {var i=ofs; for(;;) {a[1 + i] = v; var _y8_=i + 1 | 0; if(_y7_ !== i){var i=_y8_;continue} break}} return 0} function check(a,ofs,len,msg) {var _y3_=ofs < 0?1:0; if(_y3_) var _y4_=_y3_; else {var _y5_=len < 0?1:0; if(_y5_) var _y4_=_y5_; else var _y6_=(ofs + len | 0) < 0?1:0, _y4_=_y6_ || (a.length - 1 < (ofs + len | 0)?1:0)} return _y4_?invalid_arg(msg):_y4_} function make$2(n,v) {var result=caml_floatarray_create(n); unsafe_fill(result,0,n,v); return result} function init$4(l,f) {if(0 <= l) {var res=caml_floatarray_create(l),_y1_=l - 1 | 0,_y0_=0; if(! (_y1_ < 0)) {var i=_y0_; for(;;) {res[1 + i] = caml_call1(f,i); var _y2_=i + 1 | 0; if(_y1_ !== i){var i=_y2_;continue} break}} return res} return invalid_arg(cst_Float_Array_init)} function append$2(a1,a2) {var l1=a1.length - 1, l2=a2.length - 1, result=caml_floatarray_create(l1 + l2 | 0); caml_floatarray_blit(a1,0,result,0,l1); caml_floatarray_blit(a2,0,result,l1,l2); return result} function concat$3(l) {var acc=0,param=l; for(;;) {if(param) {var tl=param[2], hd=param[1], x=hd.length - 1 + acc | 0, acc$0=acc <= x?x:invalid_arg(cst_Float_Array_concat), acc=acc$0, param=tl; continue} var result=caml_floatarray_create(acc),l$0=l,i=0; for(;;) {if(l$0) {var tl$0=l$0[2],hd$0=l$0[1],hlen=hd$0.length - 1; caml_floatarray_blit(hd$0,0,result,i,hlen); var i$0=i + hlen | 0,l$0=tl$0,i=i$0; continue} if(i === acc)return result; throw [0,Assert_failure,_I_]}}} function sub$2(a,ofs,len) {check(a,ofs,len,cst_Float_Array_sub); var result=caml_floatarray_create(len); caml_floatarray_blit(a,ofs,result,0,len); return result} function copy$2(a) {var l=a.length - 1,result=caml_floatarray_create(l); caml_floatarray_blit(a,0,result,0,l); return result} function fill$1(a,ofs,len,v) {check(a,ofs,len,cst_Float_Array_fill);return unsafe_fill(a,ofs,len,v)} function blit$2(src,sofs,dst,dofs,len) {check(src,sofs,len,cst_Float_array_blit); check(dst,dofs,len,cst_Float_array_blit$0); return caml_floatarray_blit(src,sofs,dst,dofs,len)} function to_list$2(a) {return init$0(a.length - 1,function(_yZ_){return a[1 + _yZ_]})} function of_list$0(l) {var result=caml_floatarray_create(length$1(l)),i=0,l$0=l; for(;;) {if(l$0) {var t=l$0[2],h=l$0[1]; result[1 + i] = h; var i$0=i + 1 | 0,i=i$0,l$0=t; continue} return result}} function iter$6(f,a) {var _yX_=a.length - 1 - 1 | 0,_yW_=0; if(! (_yX_ < 0)) {var i=_yW_; for(;;) {caml_call1(f,a[1 + i]); var _yY_=i + 1 | 0; if(_yX_ !== i){var i=_yY_;continue} break}} return 0} function iter2$2(f,a,b) {if(a.length - 1 !== b.length - 1) return invalid_arg(cst_Float_Array_iter2_arrays_m); var _yU_=a.length - 1 - 1 | 0,_yT_=0; if(! (_yU_ < 0)) {var i=_yT_; for(;;) {caml_call2(f,a[1 + i],b[1 + i]); var _yV_=i + 1 | 0; if(_yU_ !== i){var i=_yV_;continue} break}} return 0} function map$8(f,a) {var l=a.length - 1,r=caml_floatarray_create(l),_yR_=l - 1 | 0,_yQ_=0; if(! (_yR_ < 0)) {var i=_yQ_; for(;;) {r[1 + i] = caml_call1(f,a[1 + i]); var _yS_=i + 1 | 0; if(_yR_ !== i){var i=_yS_;continue} break}} return r} function map2$2(f,a,b) {var la=a.length - 1,lb=b.length - 1; if(la !== lb)return invalid_arg(cst_Float_Array_map2_arrays_mu); var r=caml_floatarray_create(la),_yO_=la - 1 | 0,_yN_=0; if(! (_yO_ < 0)) {var i=_yN_; for(;;) {r[1 + i] = caml_call2(f,a[1 + i],b[1 + i]); var _yP_=i + 1 | 0; if(_yO_ !== i){var i=_yP_;continue} break}} return r} function iteri$4(f,a) {var _yL_=a.length - 1 - 1 | 0,_yK_=0; if(! (_yL_ < 0)) {var i=_yK_; for(;;) {caml_call2(f,i,a[1 + i]); var _yM_=i + 1 | 0; if(_yL_ !== i){var i=_yM_;continue} break}} return 0} function mapi$4(f,a) {var l=a.length - 1,r=caml_floatarray_create(l),_yI_=l - 1 | 0,_yH_=0; if(! (_yI_ < 0)) {var i=_yH_; for(;;) {r[1 + i] = caml_call2(f,i,a[1 + i]); var _yJ_=i + 1 | 0; if(_yI_ !== i){var i=_yJ_;continue} break}} return r} function fold_left$4(f,x,a) {var r=[0,x],_yF_=a.length - 1 - 1 | 0,_yE_=0; if(! (_yF_ < 0)) {var i=_yE_; for(;;) {r[1] = caml_call2(f,r[1],a[1 + i]); var _yG_=i + 1 | 0; if(_yF_ !== i){var i=_yG_;continue} break}} return r[1]} function fold_right$3(f,a,x) {var r=[0,x],_yC_=a.length - 1 - 1 | 0; if(! (_yC_ < 0)) {var i=_yC_; for(;;) {r[1] = caml_call2(f,a[1 + i],r[1]); var _yD_=i - 1 | 0; if(0 !== i){var i=_yD_;continue} break}} return r[1]} function exists$4(p,a) {var n=a.length - 1,i=0; for(;;) {if(i === n)return 0; if(caml_call1(p,a[1 + i]))return 1; var i$0=i + 1 | 0,i=i$0; continue}} function for_all$4(p,a) {var n=a.length - 1,i=0; for(;;) {if(i === n)return 1; if(caml_call1(p,a[1 + i])){var i$0=i + 1 | 0,i=i$0;continue} return 0}} function mem$1(x,a) {var n=a.length - 1,i=0; for(;;) {if(i === n)return 0; if(0 === caml_float_compare(a[1 + i],x))return 1; var i$0=i + 1 | 0,i=i$0; continue}} function mem_ieee(x,a) {var n=a.length - 1,i=0; for(;;) {if(i === n)return 0; if(x == a[1 + i])return 1; var i$0=i + 1 | 0,i=i$0; continue}} var Bottom$0=[248,cst_Stdlib_Float_Array_Bottom,caml_fresh_oo_id(0)]; function sort$0(cmp,a) {function maxson(l,i) {var i31=((i + i | 0) + i | 0) + 1 | 0,x=[0,i31]; if((i31 + 2 | 0) < l) {if (caml_call2 (cmp,caml_array_get(a,i31),caml_array_get(a,i31 + 1 | 0)) < 0) x[1] = i31 + 1 | 0; if (caml_call2 (cmp,caml_array_get(a,x[1]),caml_array_get(a,i31 + 2 | 0)) < 0) x[1] = i31 + 2 | 0; return x[1]} if ((i31 + 1 | 0) < l && ! (0 <= caml_call2(cmp,caml_array_get(a,i31),caml_array_get(a,i31 + 1 | 0)))) return i31 + 1 | 0; if(i31 < l)return i31; throw [0,Bottom$0,i]} function trickledown(l,i,e) {var i$0=i; for(;;) {var j=maxson(l,i$0); if(0 < caml_call2(cmp,caml_array_get(a,j),e)) {caml_array_set(a,i$0,caml_array_get(a,j));var i$0=j;continue} return caml_array_set(a,i$0,e)}} function trickle(l,i,e) {try {var _yB_=trickledown(l,i,e);return _yB_} catch(exn) {exn = caml_wrap_exception(exn); if(exn[1] === Bottom$0) {var i$0=exn[2];return caml_array_set(a,i$0,e)} throw exn}} function bubbledown(l,i) {var i$0=i; for(;;) {var i$1=maxson(l,i$0); caml_array_set(a,i$0,caml_array_get(a,i$1)); var i$0=i$1; continue}} function bubble(l,i) {try {var _yA_=bubbledown(l,i);return _yA_} catch(exn) {exn = caml_wrap_exception(exn); if(exn[1] === Bottom$0){var i$0=exn[2];return i$0} throw exn}} var l=a.length - 1,_yu_=((l + 1 | 0) / 3 | 0) - 1 | 0; if(! (_yu_ < 0)) {var i$2=_yu_; for(;;) {trickle(l,i$2,caml_array_get(a,i$2)); var _yz_=i$2 - 1 | 0; if(0 !== i$2){var i$2=_yz_;continue} break}} var _yv_=l - 1 | 0; if(! (_yv_ < 2)) {var i$0=_yv_; a: for(;;) {var e$0=caml_array_get(a,i$0); caml_array_set(a,i$0,caml_array_get(a,0)); var i$1=bubble(i$0,0),i=i$1; for(;;) {var father=(i - 1 | 0) / 3 | 0; if(i === father)throw [0,Assert_failure,_J_]; if(0 <= caml_call2(cmp,caml_array_get(a,father),e$0)) caml_array_set(a,i,e$0); else {caml_array_set(a,i,caml_array_get(a,father)); if(0 < father){var i=father;continue} caml_array_set(a,0,e$0)} var _yy_=i$0 - 1 | 0; if(2 !== i$0){var i$0=_yy_;continue a} break} break}} var _yw_=1 < l?1:0; if(_yw_) {var e=caml_array_get(a,1); caml_array_set(a,1,caml_array_get(a,0)); var _yx_=caml_array_set(a,0,e)} else var _yx_=_yw_; return _yx_} function stable_sort(cmp,a) {function merge(src1ofs,src1len,src2,src2ofs,src2len,dst,dstofs) {var src1r=src1ofs + src1len | 0, src2r=src2ofs + src2len | 0, s2$1=caml_array_get(src2,src2ofs), s1$1=caml_array_get(a,src1ofs), i1=src1ofs, s1=s1$1, i2=src2ofs, s2=s2$1, d=dstofs; for(;;) {if(0 < caml_call2(cmp,s1,s2)) {caml_array_set(dst,d,s2); var i2$0=i2 + 1 | 0; if(i2$0 < src2r) {var d$0=d + 1 | 0, s2$0=caml_array_get(src2,i2$0), i2=i2$0, s2=s2$0, d=d$0; continue} return blit$2(a,i1,dst,d + 1 | 0,src1r - i1 | 0)} caml_array_set(dst,d,s1); var i1$0=i1 + 1 | 0; if(i1$0 < src1r) {var d$1=d + 1 | 0, s1$0=caml_array_get(a,i1$0), i1=i1$0, s1=s1$0, d=d$1; continue} return blit$2(src2,i2,dst,d + 1 | 0,src2r - i2 | 0)}} function isortto(srcofs,dst,dstofs,len) {var _ys_=len - 1 | 0,_yr_=0; if(! (_ys_ < 0)) {var i=_yr_; a: for(;;) {var e=caml_array_get(a,srcofs + i | 0), j=[0,(dstofs + i | 0) - 1 | 0]; for(;;) {if (dstofs <= j[1] && 0 < caml_call2(cmp,caml_array_get(dst,j[1]),e)) {caml_array_set(dst,j[1] + 1 | 0,caml_array_get(dst,j[1])); j[1] += -1; continue} caml_array_set(dst,j[1] + 1 | 0,e); var _yt_=i + 1 | 0; if(_ys_ !== i){var i=_yt_;continue a} break} break}} return 0} function sortto(srcofs,dst,dstofs,len) {if(len <= 5)return isortto(srcofs,dst,dstofs,len); var l1=len / 2 | 0,l2=len - l1 | 0; sortto(srcofs + l1 | 0,dst,dstofs + l1 | 0,l2); sortto(srcofs,a,srcofs + l2 | 0,l1); return merge(srcofs + l2 | 0,l1,dst,dstofs + l1 | 0,l2,dst,dstofs)} var l=a.length - 1; if(l <= 5)return isortto(0,a,0,l); var l1=l / 2 | 0,l2=l - l1 | 0,t=caml_floatarray_create(l2); sortto(l1,t,0,l2); sortto(0,a,l2,l1); return merge(l2,l1,t,0,l2,a,0)} function to_seq$5(a) {function aux(i,param) {if(i < a.length - 1) {var x=a[1 + i],_yp_=i + 1 | 0; return [0,x,function(_yq_){return aux(_yp_,_yq_)}]} return 0} var _yn_=0; return function(_yo_){return aux(_yn_,_yo_)}} function to_seqi$2(a) {function aux(i,param) {if(i < a.length - 1) {var x=a[1 + i],_yl_=i + 1 | 0; return [0,[0,i,x],function(_ym_){return aux(_yl_,_ym_)}]} return 0} var _yj_=0; return function(_yk_){return aux(_yj_,_yk_)}} function of_seq$3(i$2) {var _yi_=0, param$0=fold_left(function(acc,x){return [0,x,acc]},_yi_,i$2), len=length$1(param$0), a=caml_floatarray_create(len), i$1=len - 1 | 0, i=i$1, param=param$0; for(;;) {if(param) {var tl=param[2],hd=param[1]; a[1 + i] = hd; var i$0=i - 1 | 0,i=i$0,param=tl; continue} return a}} function map_to_array(f,a) {var l=a.length - 1; if(0 === l)return [0]; var r=caml_make_vect(l,caml_call1(f,a[1])),_yg_=l - 1 | 0,_yf_=1; if(! (_yg_ < 1)) {var i=_yf_; for(;;) {r[1 + i] = caml_call1(f,a[1 + i]); var _yh_=i + 1 | 0; if(_yg_ !== i){var i=_yh_;continue} break}} return r} function map_from_array(f,a) {var l=a.length - 1,r=caml_floatarray_create(l),_yd_=l - 1 | 0,_yc_=0; if(! (_yd_ < 0)) {var i=_yc_; for(;;) {r[1 + i] = caml_call1(f,a[1 + i]); var _ye_=i + 1 | 0; if(_yd_ !== i){var i=_ye_;continue} break}} return r} var _K_=caml_floatarray_create, _L_=caml_array_set, _M_=caml_array_get, _N_= [0, function(_yb_){return _yb_.length - 1}, _M_, _L_, make$2, _K_, init$4, append$2, concat$3, sub$2, copy$2, fill$1, blit$2, to_list$2, of_list$0, iter$6, iteri$4, map$8, mapi$4, fold_left$4, fold_right$3, iter2$2, map2$2, for_all$4, exists$4, mem$1, mem_ieee, sort$0, stable_sort, stable_sort, to_seq$5, to_seqi$2, of_seq$3, map_to_array, map_from_array], _O_=caml_floatarray_create, _P_=caml_array_set, _Q_=caml_array_get, Stdlib_Float= [0, zero$0, one$0, minus_one$0, succ$0, pred$0, infinity, neg_infinity, nan, pi, max_float, min_float, epsilon, is_finite, is_infinite, is_nan, is_integer, of_string_opt, to_string, caml_float_compare, equal$11, min$2, max$2, min_max, min_num, max_num, min_max_num, hash$0, [0, function(_ya_){return _ya_.length - 1}, _Q_, _P_, make$2, _O_, init$4, append$2, concat$3, sub$2, copy$2, fill$1, blit$2, to_list$2, of_list$0, iter$6, iteri$4, map$8, mapi$4, fold_left$4, fold_right$3, iter2$2, map2$2, for_all$4, exists$4, mem$1, mem_ieee, sort$0, stable_sort, stable_sort, to_seq$5, to_seqi$2, of_seq$3, map_to_array, map_from_array], _N_]; caml_register_global(795,Stdlib_Float,"Stdlib__Float"); var zero$1=0,one$1=1,minus_one$1=-1; function succ$1(n){return n + 1 | 0} function pred$1(n){return n - 1 | 0} function abs$1(n){return caml_greaterequal(n,0)?n:- n | 0} var min_int$1=-2147483648,max_int$1=2147483647; function lognot$0(n){return n ^ -1} function unsigned_to_int(n) {if (! (0 < caml_int_compare(0,n)) && ! (0 < caml_int_compare(n,2147483647))) return [0,n]; return 0} function to_string$3(n){return caml_format_int(cst_d,n)} function of_string_opt$0(s) {try {var _x__=[0,caml_int_of_string(s)];return _x__} catch(_x$_) {_x$_ = caml_wrap_exception(_x$_); if(_x$_[1] === Failure)return 0; throw _x$_}} function compare$11(x,y){return caml_int_compare(x,y)} function equal$12(x,y){return 0 === caml_int_compare(x,y)?1:0} function unsigned_compare(n,m) {return caml_int_compare(n + 2147483648 | 0,m + 2147483648 | 0)} function min$3(x,y){return caml_lessequal(x,y)?x:y} function max$3(x,y){return caml_greaterequal(x,y)?x:y} function unsigned_div(n,d) {if(caml_lessthan(d,0))return 0 <= unsigned_compare(n,d)?one$1:zero$1; var q=caml_div(n >>> 1 | 0,d) << 1,r=n - caml_mul(q,d) | 0; return 0 <= unsigned_compare(r,d)?q + 1 | 0:q} function unsigned_rem(n,d){return n - caml_mul(unsigned_div(n,d),d) | 0} var Stdlib_Int32= [0, zero$1, one$1, minus_one$1, unsigned_div, unsigned_rem, succ$1, pred$1, abs$1, max_int$1, min_int$1, lognot$0, unsigned_to_int, of_string_opt$0, to_string$3, compare$11, unsigned_compare, equal$12, min$3, max$3]; caml_register_global(796,Stdlib_Int32,"Stdlib__Int32"); function succ$2(n){return caml_int64_add(n,_R_)} function pred$2(n){return caml_int64_sub(n,_S_)} function abs$2(n) {return caml_greaterequal(n,_T_)?n:runtime.caml_int64_neg(n)} function lognot$1(n){return runtime.caml_int64_xor(n,_U_)} var max_int$3=caml_int64_of_int32(2147483647); function unsigned_to_int$0(n) {if (! (0 < caml_int64_compare(zero$2,n)) && ! (0 < caml_int64_compare(n,max_int$3))) return [0,runtime.caml_int64_to_int32(n)]; return 0} function to_string$4(n){return caml_int64_format(cst_d$0,n)} function of_string_opt$1(s) {try {var _x8_=[0,caml_int64_of_string(s)];return _x8_} catch(_x9_) {_x9_ = caml_wrap_exception(_x9_); if(_x9_[1] === Failure)return 0; throw _x9_}} function compare$12(x,y){return caml_int64_compare(x,y)} function equal$13(x,y){return 0 === caml_int64_compare(x,y)?1:0} function unsigned_compare$0(n,m) {return caml_int64_compare (caml_int64_sub(n,min_int$2),caml_int64_sub(m,min_int$2))} function min$4(x,y){return caml_lessequal(x,y)?x:y} function max$4(x,y){return caml_greaterequal(x,y)?x:y} function unsigned_div$0(n,d) {if(caml_lessthan(d,zero$2)) return 0 <= unsigned_compare$0(n,d)?one$2:zero$2; var q= caml_int64_shift_left (runtime.caml_int64_div(caml_int64_shift_right_unsigne(n,1),d),1), r=caml_int64_sub(n,caml_int64_mul(q,d)); return 0 <= unsigned_compare$0(r,d)?succ$2(q):q} function unsigned_rem$0(n,d) {return caml_int64_sub(n,caml_int64_mul(unsigned_div$0(n,d),d))} var Stdlib_Int64= [0, zero$2, one$2, minus_one$2, unsigned_div$0, unsigned_rem$0, succ$2, pred$2, abs$2, max_int$2, min_int$2, lognot$1, unsigned_to_int$0, of_string_opt$1, to_string$4, compare$12, unsigned_compare$0, equal$13, min$4, max$4]; caml_register_global(797,Stdlib_Int64,"Stdlib__Int64"); var zero$3=0,one$3=1,minus_one$3=-1; function succ$3(n){return n + 1 | 0} function pred$3(n){return n - 1 | 0} function abs$3(n){return caml_greaterequal(n,0)?n:- n | 0} var min_int$3=-2147483648,max_int$4=2147483647; function lognot$2(n){return n ^ -1} function unsigned_to_int$1(n) {if (! (0 < caml_int_compare(0,n)) && ! (0 < caml_int_compare(n,2147483647))) return [0,n]; return 0} function to_string$5(n){return caml_format_int(cst_d$1,n)} function of_string_opt$2(s) {try {var _x6_=[0,caml_int_of_string(s)];return _x6_} catch(_x7_) {_x7_ = caml_wrap_exception(_x7_); if(_x7_[1] === Failure)return 0; throw _x7_}} function compare$13(x,y){return caml_int_compare(x,y)} function equal$14(x,y){return 0 === caml_int_compare(x,y)?1:0} function unsigned_compare$1(n,m) {return caml_int_compare(n + 2147483648 | 0,m + 2147483648 | 0)} function min$5(x,y){return caml_lessequal(x,y)?x:y} function max$5(x,y){return caml_greaterequal(x,y)?x:y} function unsigned_div$1(n,d) {if(caml_lessthan(d,0))return 0 <= unsigned_compare$1(n,d)?one$3:zero$3; var q=caml_div(n >>> 1 | 0,d) << 1,r=n - caml_mul(q,d) | 0; return 0 <= unsigned_compare$1(r,d)?q + 1 | 0:q} function unsigned_rem$1(n,d) {return n - caml_mul(unsigned_div$1(n,d),d) | 0} var Stdlib_Nativeint= [0, zero$3, one$3, minus_one$3, unsigned_div$1, unsigned_rem$1, succ$3, pred$3, abs$3, match$1, max_int$4, min_int$3, lognot$2, unsigned_to_int$1, of_string_opt$2, to_string$5, compare$13, unsigned_compare$1, equal$14, min$5, max$5]; caml_register_global(798,Stdlib_Nativeint,"Stdlib__Nativeint"); function engine(tbl,state,buf) {var result=runtime.caml_lex_engine(tbl,state,buf), _x3_=0 <= result?1:0, _x4_=_x3_?buf[12] !== dummy_pos?1:0:_x3_; if(_x4_) {buf[11] = buf[12]; var _x5_=buf[12]; buf[12] = [0,_x5_[1],_x5_[2],_x5_[3],buf[4] + buf[6] | 0]} return result} function new_engine(tbl,state,buf) {var result=runtime.caml_new_lex_engine(tbl,state,buf), _x0_=0 <= result?1:0, _x1_=_x0_?buf[12] !== dummy_pos?1:0:_x0_; if(_x1_) {buf[11] = buf[12]; var _x2_=buf[12]; buf[12] = [0,_x2_[1],_x2_[2],_x2_[3],buf[4] + buf[6] | 0]} return result} function from_function(opt,f) {if(opt)var sth=opt[1],with_positions=sth;else var with_positions=1; var _xM_=with_positions?zero_pos:dummy_pos, _xN_=with_positions?zero_pos:dummy_pos, aux_buffer=caml_create_bytes(512), _xO_=[0], _xP_=0, _xQ_=0, _xR_=0, _xS_=0, _xT_=0, _xU_=0, _xV_=0, _xW_=caml_create_bytes(1024); return [0, function(lexbuf) {var read= caml_call2(f,aux_buffer,caml_ml_bytes_length(aux_buffer)), n=0 < read?read:(lexbuf[9] = 1,0); if(caml_ml_bytes_length(lexbuf[2]) < (lexbuf[3] + n | 0)) {if (((lexbuf[3] - lexbuf[5] | 0) + n | 0) <= caml_ml_bytes_length(lexbuf[2])) blit (lexbuf[2],lexbuf[5],lexbuf[2],0,lexbuf[3] - lexbuf[5] | 0); else {var newlen= min$1 (2 * caml_ml_bytes_length(lexbuf[2]) | 0,max_string_length); if(newlen < ((lexbuf[3] - lexbuf[5] | 0) + n | 0)) failwith(cst_Lexing_lex_refill_cannot_g); var newbuf=caml_create_bytes(newlen); blit(lexbuf[2],lexbuf[5],newbuf,0,lexbuf[3] - lexbuf[5] | 0); lexbuf[2] = newbuf} var s=lexbuf[5]; lexbuf[4] = lexbuf[4] + s | 0; lexbuf[6] = lexbuf[6] - s | 0; lexbuf[5] = 0; lexbuf[7] = lexbuf[7] - s | 0; lexbuf[3] = lexbuf[3] - s | 0; var t=lexbuf[10],_xY_=t.length - 1 - 1 | 0,_xX_=0; if(! (_xY_ < 0)) {var i=_xX_; for(;;) {var v=caml_check_bound(t,i)[1 + i]; if(0 <= v)caml_check_bound(t,i)[1 + i] = v - s | 0; var _xZ_=i + 1 | 0; if(_xY_ !== i){var i=_xZ_;continue} break}}} blit(aux_buffer,0,lexbuf[2],lexbuf[3],n); lexbuf[3] = lexbuf[3] + n | 0; return 0}, _xW_, _xV_, _xU_, _xT_, _xS_, _xR_, _xQ_, _xP_, _xO_, _xN_, _xM_]} function from_channel(with_positions,ic) {return from_function (with_positions,function(buf,n){return input(ic,buf,0,n)})} function from_string$0(opt,s) {if(opt)var sth=opt[1],with_positions=sth;else var with_positions=1; var _xB_=with_positions?zero_pos:dummy_pos, _xC_=with_positions?zero_pos:dummy_pos, _xD_=[0], _xE_=1, _xF_=0, _xG_=0, _xH_=0, _xI_=0, _xJ_=0, _xK_=caml_ml_string_length(s), _xL_=to_bytes(s); return [0, function(lexbuf){lexbuf[9] = 1;return 0}, _xL_, _xK_, _xJ_, _xI_, _xH_, _xG_, _xF_, _xE_, _xD_, _xC_, _xB_]} function set_position(lexbuf,position) {lexbuf[12] = [0,lexbuf[12][1],position[2],position[3],position[4]]; lexbuf[4] = position[4]; return 0} function set_filename(lexbuf,fname) {var _xA_=lexbuf[12]; lexbuf[12] = [0,fname,_xA_[2],_xA_[3],_xA_[4]]; return 0} function with_positions(lexbuf){return lexbuf[12] !== dummy_pos?1:0} function lexeme(lexbuf) {var len=lexbuf[6] - lexbuf[5] | 0; return sub_string(lexbuf[2],lexbuf[5],len)} function sub_lexeme(lexbuf,i1,i2) {var len=i2 - i1 | 0;return sub_string(lexbuf[2],i1,len)} function sub_lexeme_opt(lexbuf,i1,i2) {if(0 <= i1){var len=i2 - i1 | 0;return [0,sub_string(lexbuf[2],i1,len)]} return 0} function sub_lexeme_char(lexbuf,i){return caml_bytes_get(lexbuf[2],i)} function sub_lexeme_char_opt(lexbuf,i) {return 0 <= i?[0,caml_bytes_get(lexbuf[2],i)]:0} function lexeme_char(lexbuf,i) {return caml_bytes_get(lexbuf[2],lexbuf[5] + i | 0)} function lexeme_start(lexbuf){return lexbuf[11][4]} function lexeme_end(lexbuf){return lexbuf[12][4]} function lexeme_start_p(lexbuf){return lexbuf[11]} function lexeme_end_p(lexbuf){return lexbuf[12]} function new_line(lexbuf) {var lcp=lexbuf[12], _xy_=lcp !== dummy_pos?1:0, _xz_=_xy_?(lexbuf[12] = [0,lcp[1],lcp[2] + 1 | 0,lcp[4],lcp[4]],0):_xy_; return _xz_} function flush_input(lb) {lb[6] = 0; lb[4] = 0; var lcp=lb[12]; if(lcp !== dummy_pos) lb[12] = [0,lcp[1],zero_pos[2],zero_pos[3],zero_pos[4]]; lb[3] = 0; return 0} var Stdlib_Lexing= [0, dummy_pos, from_channel, from_string$0, from_function, set_position, set_filename, with_positions, lexeme, lexeme_char, lexeme_start, lexeme_end, lexeme_start_p, lexeme_end_p, new_line, flush_input, sub_lexeme, sub_lexeme_opt, sub_lexeme_char, sub_lexeme_char_opt, engine, new_engine]; caml_register_global(799,Stdlib_Lexing,"Stdlib__Lexing"); var YYexit=[248,cst_Stdlib_Parsing_YYexit,caml_fresh_oo_id(0)], Parse_error=[248,cst_Stdlib_Parsing_Parse_error,caml_fresh_oo_id(0)], env= [0, caml_make_vect(100,0), caml_make_vect(100,0), caml_make_vect(100,dummy_pos), caml_make_vect(100,dummy_pos), 100, 0, 0, 0, dummy_pos, dummy_pos, 0, 0, 0, 0, 0, 0]; function grow_stacks(param) {var oldsize=env[5], newsize=oldsize * 2 | 0, new_s=caml_make_vect(newsize,0), new_v=caml_make_vect(newsize,0), new_start=caml_make_vect(newsize,dummy_pos), new_end=caml_make_vect(newsize,dummy_pos); blit$1(env[1],0,new_s,0,oldsize); env[1] = new_s; blit$1(env[2],0,new_v,0,oldsize); env[2] = new_v; blit$1(env[3],0,new_start,0,oldsize); env[3] = new_start; blit$1(env[4],0,new_end,0,oldsize); env[4] = new_end; env[5] = newsize; return 0} function clear_parser(param) {fill$0(env[2],0,env[5],0);env[8] = 0;return 0} var current_lookahead_fun=[0,function(param){return 0}]; function yyparse(tables,start,lexer,lexbuf) {var init_asp=env[11], init_sp=env[14], init_stackbase=env[6], init_state=env[15], init_curr_char=env[7], init_lval=env[8], init_errflag=env[16]; env[6] = env[14] + 1 | 0; env[7] = start; env[10] = lexbuf[12]; try {var cmd=0,arg=0; for(;;) {var match=runtime.caml_parse_engine(tables,env,cmd,arg); switch(match) {case 0: var arg$0=caml_call1(lexer,lexbuf); env[9] = lexbuf[11]; env[10] = lexbuf[12]; var cmd=1,arg=arg$0; continue; case 1:throw Parse_error; case 2:grow_stacks(0);var cmd=2,arg=0;continue; case 3:grow_stacks(0);var cmd=3,arg=0;continue; case 4: try {var _xs_=env[13], _xt_= caml_call1(caml_check_bound(tables[1],_xs_)[1 + _xs_],env), _xu_=4, arg$1=_xt_, cmd$0=_xu_} catch(_xx_) {_xx_ = caml_wrap_exception(_xx_); if(_xx_ !== Parse_error)throw _xx_; var arg$1=0,cmd$0=5,_xv_=_xx_} var cmd=cmd$0,arg=arg$1; continue; default: caml_call1(tables[14],cst_syntax_error);var cmd=5,arg=0;continue}}} catch(exn) {exn = caml_wrap_exception(exn); var curr_char=env[7]; env[11] = init_asp; env[14] = init_sp; env[6] = init_stackbase; env[15] = init_state; env[7] = init_curr_char; env[8] = init_lval; env[16] = init_errflag; if(exn[1] === YYexit){var v=exn[2];return v} current_lookahead_fun[1] = function(tok) {if(is_block(tok)) {var _xw_=caml_obj_tag(tok); return caml_check_bound(tables[3],_xw_)[1 + _xw_] === curr_char ?1 :0} return caml_check_bound(tables[2],tok)[1 + tok] === curr_char?1:0}; throw exn}} function peek_val(env,n) {var _xr_=env[11] - n | 0;return caml_check_bound(env[2],_xr_)[1 + _xr_]} function symbol_start_pos(param) {var i=env[12]; for(;;) {if(0 < i) {var _xo_=(env[11] - i | 0) + 1 | 0, st=caml_check_bound(env[3],_xo_)[1 + _xo_], _xp_=(env[11] - i | 0) + 1 | 0, en=caml_check_bound(env[4],_xp_)[1 + _xp_]; if(caml_notequal(st,en))return st; var i$0=i - 1 | 0,i=i$0; continue} var _xq_=env[11]; return caml_check_bound(env[4],_xq_)[1 + _xq_]}} function symbol_end_pos(param) {var _xn_=env[11];return caml_check_bound(env[4],_xn_)[1 + _xn_]} function rhs_start_pos(n) {var _xm_=env[11] - (env[12] - n | 0) | 0; return caml_check_bound(env[3],_xm_)[1 + _xm_]} function rhs_end_pos(n) {var _xl_=env[11] - (env[12] - n | 0) | 0; return caml_check_bound(env[4],_xl_)[1 + _xl_]} function symbol_start(param){return symbol_start_pos(0)[4]} function symbol_end(param){return symbol_end_pos(0)[4]} function rhs_start(n){return rhs_start_pos(n)[4]} function rhs_end(n){return rhs_end_pos(n)[4]} function is_current_lookahead(tok) {return caml_call1(current_lookahead_fun[1],tok)} function parse_error(param){return 0} var Stdlib_Parsing= [0, symbol_start, symbol_end, rhs_start, rhs_end, symbol_start_pos, symbol_end_pos, rhs_start_pos, rhs_end_pos, clear_parser, Parse_error, function(_xk_){return runtime.caml_set_parser_trace(_xk_)}, YYexit, yyparse, peek_val, is_current_lookahead, parse_error]; caml_register_global(800,Stdlib_Parsing,"Stdlib__Parsing"); var Stdlib_Set= [0, function(Ord) {function height(param){if(param){var h=param[4];return h}return 0} function create(l,v,r) {if(l)var h=l[4],hl=h;else var hl=0; if(r)var h$0=r[4],hr=h$0;else var hr=0; var _xj_=hr <= hl?hl + 1 | 0:hr + 1 | 0; return [0,l,v,r,_xj_]} function bal(l,v,r) {if(l)var h=l[4],hl=h;else var hl=0; if(r)var h$0=r[4],hr=h$0;else var hr=0; if((hr + 2 | 0) < hl) {if(l) {var lr=l[3],lv=l[2],ll=l[1],_xe_=height(lr); if(_xe_ <= height(ll))return create(ll,lv,create(lr,v,r)); if(lr) {var lrr=lr[3],lrv=lr[2],lrl=lr[1],_xf_=create(lrr,v,r); return create(create(ll,lv,lrl),lrv,_xf_)} return invalid_arg(cst_Set_bal)} return invalid_arg(cst_Set_bal$0)} if((hl + 2 | 0) < hr) {if(r) {var rr=r[3],rv=r[2],rl=r[1],_xg_=height(rl); if(_xg_ <= height(rr))return create(create(l,v,rl),rv,rr); if(rl) {var rlr=rl[3],rlv=rl[2],rll=rl[1],_xh_=create(rlr,rv,rr); return create(create(l,v,rll),rlv,_xh_)} return invalid_arg(cst_Set_bal$1)} return invalid_arg(cst_Set_bal$2)} var _xi_=hr <= hl?hl + 1 | 0:hr + 1 | 0; return [0,l,v,r,_xi_]} function add(x,t) {if(t) {var r=t[3],v=t[2],l=t[1],c=caml_call2(Ord[1],x,v); if(0 === c)return t; if(0 <= c){var rr=add(x,r);return r === rr?t:bal(l,v,rr)} var ll=add(x,l); return l === ll?t:bal(ll,v,r)} return [0,0,x,0,1]} function singleton(x){return [0,0,x,0,1]} function add_min_element(x,param) {if(param) {var r=param[3],v=param[2],l=param[1]; return bal(add_min_element(x,l),v,r)} return singleton(x)} function add_max_element(x,param) {if(param) {var r=param[3],v=param[2],l=param[1]; return bal(l,v,add_max_element(x,r))} return singleton(x)} function join(l,v,r) {if(l) {if(r) {var rh=r[4], rr=r[3], rv=r[2], rl=r[1], lh=l[4], lr=l[3], lv=l[2], ll=l[1]; return (rh + 2 | 0) < lh ?bal(ll,lv,join(lr,v,r)) :(lh + 2 | 0) < rh?bal(join(l,v,rl),rv,rr):create(l,v,r)} return add_max_element(v,l)} return add_min_element(v,r)} function min_elt(param) {var param$0=param; for(;;) {if(param$0) {var _xd_=param$0[1]; if(_xd_){var param$0=_xd_;continue} var v=param$0[2]; return v} throw Not_found}} function min_elt_opt(param) {var param$0=param; for(;;) {if(param$0) {var _xc_=param$0[1]; if(_xc_){var param$0=_xc_;continue} var v=param$0[2]; return [0,v]} return 0}} function max_elt(param) {var param$0=param; for(;;) {if(param$0) {if(param$0[3]){var param$1=param$0[3],param$0=param$1;continue} var v=param$0[2]; return v} throw Not_found}} function max_elt_opt(param) {var param$0=param; for(;;) {if(param$0) {if(param$0[3]){var param$1=param$0[3],param$0=param$1;continue} var v=param$0[2]; return [0,v]} return 0}} function remove_min_elt(param) {if(param) {var _xb_=param[1]; if(_xb_) {var r=param[3],v=param[2];return bal(remove_min_elt(_xb_),v,r)} var r$0=param[3]; return r$0} return invalid_arg(cst_Set_remove_min_elt)} function concat(t1,t2) {if(t1) {if(t2) {var _xa_=remove_min_elt(t2);return join(t1,min_elt(t2),_xa_)} return t1} return t2} function split(x,param) {if(param) {var r=param[3],v=param[2],l=param[1],c=caml_call2(Ord[1],x,v); if(0 === c)return [0,l,1,r]; if(0 <= c) {var match=split(x,r),rr=match[3],pres=match[2],lr=match[1]; return [0,join(l,v,lr),pres,rr]} var match$0=split(x,l), rl=match$0[3], pres$0=match$0[2], ll=match$0[1]; return [0,ll,pres$0,join(rl,v,r)]} return _V_} var empty=0; function is_empty(param){return param?0:1} function mem(x,param) {var param$0=param; for(;;) {if(param$0) {var r=param$0[3], v=param$0[2], l=param$0[1], c=caml_call2(Ord[1],x,v), _w$_=0 === c?1:0; if(_w$_)return _w$_; var param$1=0 <= c?r:l,param$0=param$1; continue} return 0}} function remove(x,t) {if(t) {var r=t[3],v=t[2],l=t[1],c=caml_call2(Ord[1],x,v); if(0 === c) {if(l) {if(r) {var _w__=remove_min_elt(r);return bal(l,min_elt(r),_w__)} return l} return r} if(0 <= c){var rr=remove(x,r);return r === rr?t:bal(l,v,rr)} var ll=remove(x,l); return l === ll?t:bal(ll,v,r)} return 0} function union(s1,s2) {if(s1) {if(s2) {var h2=s2[4], r2=s2[3], v2=s2[2], l2=s2[1], h1=s1[4], r1=s1[3], v1=s1[2], l1=s1[1]; if(h2 <= h1) {if(1 === h2)return add(v2,s1); var match=split(v1,s2), r2$0=match[3], l2$0=match[1], _w8_=union(r1,r2$0); return join(union(l1,l2$0),v1,_w8_)} if(1 === h1)return add(v1,s2); var match$0=split(v2,s1), r1$0=match$0[3], l1$0=match$0[1], _w9_=union(r1$0,r2); return join(union(l1$0,l2),v2,_w9_)} return s1} return s2} function inter(s1,s2) {if(s1) {if(s2) {var r1=s1[3],v1=s1[2],l1=s1[1],_w4_=split(v1,s2),_w5_=_w4_[1]; if(_w4_[2]) {var r2=_w4_[3],_w6_=inter(r1,r2); return join(inter(l1,_w5_),v1,_w6_)} var r2$0=_w4_[3],_w7_=inter(r1,r2$0); return concat(inter(l1,_w5_),_w7_)} return 0} return 0} function split_bis(x,param) {if(param) {var r=param[3],v=param[2],l=param[1],c=caml_call2(Ord[1],x,v); if(0 === c)return 0; if(0 <= c) {var match=split_bis(x,r); if(match) {var rr=match[2],lr=match[1];return [0,join(l,v,lr),rr]} return 0} var match$0=split_bis(x,l); if(match$0) {var rl=match$0[2],ll=match$0[1]; return [0, ll, function(param){return join(caml_call1(rl,0),v,r)}]} return 0} return [0,0,function(param){return 0}]} function disjoint(s1,s2) {var s1$0=s1,s2$0=s2; for(;;) {if(s1$0 && s2$0) {var r1=s1$0[3],v1=s1$0[2],l1=s1$0[1]; if(s1$0 === s2$0)return 0; var match=split_bis(v1,s2$0); if(match) {var r2=match[2],l2=match[1],_w3_=disjoint(l1,l2); if(_w3_) {var s2$1=caml_call1(r2,0),s1$0=r1,s2$0=s2$1;continue} return _w3_} return 0} return 1}} function diff(s1,s2) {if(s1) {if(s2) {var r1=s1[3],v1=s1[2],l1=s1[1],_wZ_=split(v1,s2),_w0_=_wZ_[1]; if(_wZ_[2]) {var r2=_wZ_[3],_w1_=diff(r1,r2); return concat(diff(l1,_w0_),_w1_)} var r2$0=_wZ_[3],_w2_=diff(r1,r2$0); return join(diff(l1,_w0_),v1,_w2_)} return s1} return 0} function cons_enum(s,e) {var s$0=s,e$0=e; for(;;) {if(s$0) {var r=s$0[3], v=s$0[2], s$1=s$0[1], e$1=[0,v,r,e$0], s$0=s$1, e$0=e$1; continue} return e$0}} function compare(s1,s2) {var e2$2=cons_enum(s2,0),e1$2=cons_enum(s1,0),e1=e1$2,e2=e2$2; for(;;) {if(e1) {if(e2) {var e2$0=e2[3], r2=e2[2], v2=e2[1], e1$0=e1[3], r1=e1[2], v1=e1[1], c=caml_call2(Ord[1],v1,v2); if(0 === c) {var e2$1=cons_enum(r2,e2$0), e1$1=cons_enum(r1,e1$0), e1=e1$1, e2=e2$1; continue} return c} return 1} return e2?-1:0}} function equal(s1,s2){return 0 === compare(s1,s2)?1:0} function subset(s1,s2) {var s1$0=s1,s2$0=s2; for(;;) {if(s1$0) {if(s2$0) {var r2=s2$0[3], v2=s2$0[2], l2=s2$0[1], r1=s1$0[3], v1=s1$0[2], l1=s1$0[1], c=caml_call2(Ord[1],v1,v2); if(0 === c) {var _wW_=subset(l1,l2); if(_wW_){var s1$0=r1,s2$0=r2;continue} return _wW_} if(0 <= c) {var _wX_=subset([0,0,v1,r1,0],r2); if(_wX_){var s1$0=l1;continue} return _wX_} var _wY_=subset([0,l1,v1,0,0],l2); if(_wY_){var s1$0=r1;continue} return _wY_} return 0} return 1}} function iter(f,param) {var param$0=param; for(;;) {if(param$0) {var r=param$0[3],v=param$0[2],l=param$0[1]; iter(f,l); caml_call1(f,v); var param$0=r; continue} return 0}} function fold(f,s,accu) {var s$0=s,accu$0=accu; for(;;) {if(s$0) {var r=s$0[3], v=s$0[2], l=s$0[1], accu$1=caml_call2(f,v,fold(f,l,accu$0)), s$0=r, accu$0=accu$1; continue} return accu$0}} function for_all(p,param) {var param$0=param; for(;;) {if(param$0) {var r=param$0[3], v=param$0[2], l=param$0[1], _wT_=caml_call1(p,v); if(_wT_) {var _wU_=for_all(p,l); if(_wU_){var param$0=r;continue} var _wV_=_wU_} else var _wV_=_wT_; return _wV_} return 1}} function exists(p,param) {var param$0=param; for(;;) {if(param$0) {var r=param$0[3], v=param$0[2], l=param$0[1], _wQ_=caml_call1(p,v); if(_wQ_) var _wR_=_wQ_; else {var _wS_=exists(p,l); if(! _wS_){var param$0=r;continue} var _wR_=_wS_} return _wR_} return 0}} function filter(p,t) {if(t) {var r=t[3], v=t[2], l=t[1], l$0=filter(p,l), pv=caml_call1(p,v), r$0=filter(p,r); if(pv){if(l === l$0 && r === r$0)return t;return join(l$0,v,r$0)} return concat(l$0,r$0)} return 0} function partition(p,param) {if(param) {var r=param[3], v=param[2], l=param[1], match=partition(p,l), lf=match[2], lt=match[1], pv=caml_call1(p,v), match$0=partition(p,r), rf=match$0[2], rt=match$0[1]; if(pv){var _wO_=concat(lf,rf);return [0,join(lt,v,rt),_wO_]} var _wP_=join(lf,v,rf); return [0,concat(lt,rt),_wP_]} return _W_} function cardinal(param) {if(param) {var r=param[3],l=param[1],_wN_=cardinal(r); return (cardinal(l) + 1 | 0) + _wN_ | 0} return 0} function elements_aux(accu,param) {var accu$0=accu,param$0=param; for(;;) {if(param$0) {var r=param$0[3], v=param$0[2], l=param$0[1], accu$1=[0,v,elements_aux(accu$0,r)], accu$0=accu$1, param$0=l; continue} return accu$0}} function elements(s){return elements_aux(0,s)} function find(x,param) {var param$0=param; for(;;) {if(param$0) {var r=param$0[3], v=param$0[2], l=param$0[1], c=caml_call2(Ord[1],x,v); if(0 === c)return v; var param$1=0 <= c?r:l,param$0=param$1; continue} throw Not_found}} function find_first(f,param$0) {var param$1=param$0; for(;;) {if(param$1) {var r$0=param$1[3],v$0=param$1[2],l$0=param$1[1]; if(caml_call1(f,v$0)) {var v0=v$0,param=l$0; for(;;) {if(param) {var r=param[3],v=param[2],l=param[1]; if(caml_call1(f,v)){var v0=v,param=l;continue} var param=r; continue} return v0}} var param$1=r$0; continue} throw Not_found}} function find_first_opt(f,param$0) {var param$1=param$0; for(;;) {if(param$1) {var r$0=param$1[3],v$0=param$1[2],l$0=param$1[1]; if(caml_call1(f,v$0)) {var v0=v$0,param=l$0; for(;;) {if(param) {var r=param[3],v=param[2],l=param[1]; if(caml_call1(f,v)){var v0=v,param=l;continue} var param=r; continue} return [0,v0]}} var param$1=r$0; continue} return 0}} function find_last(f,param$0) {var param$1=param$0; for(;;) {if(param$1) {var r$0=param$1[3],v$0=param$1[2],l$0=param$1[1]; if(caml_call1(f,v$0)) {var v0=v$0,param=r$0; for(;;) {if(param) {var r=param[3],v=param[2],l=param[1]; if(caml_call1(f,v)){var v0=v,param=r;continue} var param=l; continue} return v0}} var param$1=l$0; continue} throw Not_found}} function find_last_opt(f,param$0) {var param$1=param$0; for(;;) {if(param$1) {var r$0=param$1[3],v$0=param$1[2],l$0=param$1[1]; if(caml_call1(f,v$0)) {var v0=v$0,param=r$0; for(;;) {if(param) {var r=param[3],v=param[2],l=param[1]; if(caml_call1(f,v)){var v0=v,param=r;continue} var param=l; continue} return [0,v0]}} var param$1=l$0; continue} return 0}} function find_opt(x,param) {var param$0=param; for(;;) {if(param$0) {var r=param$0[3], v=param$0[2], l=param$0[1], c=caml_call2(Ord[1],x,v); if(0 === c)return [0,v]; var param$1=0 <= c?r:l,param$0=param$1; continue} return 0}} function try_join(l,v,r) {var switch$0=0; if(0 !== l) {var _wM_=max_elt(l); if(0 <= caml_call2(Ord[1],_wM_,v))switch$0 = 1} if(! switch$0) {var switch$1=0; if(0 !== r) {var _wL_=min_elt(r); if(0 <= caml_call2(Ord[1],v,_wL_))switch$1 = 1} if(! switch$1)return join(l,v,r)} return union(l,add(v,r))} function map(f,t) {if(t) {var r=t[3], v=t[2], l=t[1], l$0=map(f,l), v$0=caml_call1(f,v), r$0=map(f,r); if(l === l$0 && v === v$0 && r === r$0)return t; return try_join(l$0,v$0,r$0)} return 0} function filter_map(f,t) {if(t) {var r=t[3], v=t[2], l=t[1], t1=filter_map(f,l), v$0=caml_call1(f,v), t2=filter_map(f,r); if(v$0) {var v$1=v$0[1]; if(l === t1 && v === v$1 && r === t2)return t; return try_join(t1,v$1,t2)} if(t1) {if(t2) {var _wK_=remove_min_elt(t2); return try_join(t1,min_elt(t2),_wK_)} return t1} return t2} return 0} function of_list(l) {if(l) {var _wz_=l[2],_wA_=l[1]; if(_wz_) {var _wB_=_wz_[2],_wC_=_wz_[1]; if(_wB_) {var _wD_=_wB_[2],_wE_=_wB_[1]; if(_wD_) {var _wF_=_wD_[2],_wG_=_wD_[1]; if(_wF_) {if(_wF_[2]) {var l$0=sort_uniq(Ord[1],l), sub= function(n,l) {if(! (3 < n >>> 0)) switch(n) {case 0:return [0,0,l]; case 1: if(l){var l$3=l[2],x0=l[1];return [0,[0,0,x0,0,1],l$3]} break; case 2: if(l) {var _wH_=l[2]; if(_wH_) {var l$4=_wH_[2],x1=_wH_[1],x0$0=l[1]; return [0,[0,[0,0,x0$0,0,1],x1,0,2],l$4]}} break; default: if(l) {var _wI_=l[2]; if(_wI_) {var _wJ_=_wI_[2]; if(_wJ_) {var l$5=_wJ_[2],x2=_wJ_[1],x1$0=_wI_[1],x0$1=l[1]; return [0,[0,[0,0,x0$1,0,1],x1$0,[0,0,x2,0,1],2],l$5]}}}} var nl=n / 2 | 0,match=sub(nl,l),l$0=match[2],left=match[1]; if(l$0) {var l$1=l$0[2], mid=l$0[1], match$0=sub((n - nl | 0) - 1 | 0,l$1), l$2=match$0[2], right=match$0[1]; return [0,create(left,mid,right),l$2]} throw [0,Assert_failure,_X_]}; return sub(length$1(l$0),l$0)[1]} var x4=_wF_[1]; return add(x4,add(_wG_,add(_wE_,add(_wC_,singleton(_wA_)))))} return add(_wG_,add(_wE_,add(_wC_,singleton(_wA_))))} return add(_wE_,add(_wC_,singleton(_wA_)))} return add(_wC_,singleton(_wA_))} return singleton(_wA_)} return empty} function add_seq(i,m) {return fold_left(function(s,x){return add(x,s)},m,i)} function of_seq(i){return add_seq(i,empty)} function seq_of_enum(c,param) {if(c) {var rest=c[3],t=c[2],x=c[1],_wx_=cons_enum(t,rest); return [0,x,function(_wy_){return seq_of_enum(_wx_,_wy_)}]} return 0} function to_seq(c) {var _wv_=cons_enum(c,0); return function(_ww_){return seq_of_enum(_wv_,_ww_)}} function snoc_enum(s,e) {var s$0=s,e$0=e; for(;;) {if(s$0) {var s$1=s$0[3], v=s$0[2], l=s$0[1], e$1=[0,v,l,e$0], s$0=s$1, e$0=e$1; continue} return e$0}} function rev_seq_of_enum(c,param) {if(c) {var rest=c[3],t=c[2],x=c[1],_wt_=snoc_enum(t,rest); return [0,x,function(_wu_){return rev_seq_of_enum(_wt_,_wu_)}]} return 0} function to_rev_seq(c) {var _wr_=snoc_enum(c,0); return function(_ws_){return rev_seq_of_enum(_wr_,_ws_)}} function to_seq_from(low,s) {var s$0=s,c=0; for(;;) {if(s$0) {var r=s$0[3],v=s$0[2],l=s$0[1],n=caml_call2(Ord[1],v,low); if(0 !== n) {if(0 <= n){var c$0=[0,v,r,c],s$0=l,c=c$0;continue} var s$0=r; continue} var _wp_=[0,v,r,c]} else var _wp_=c; return function(_wq_){return seq_of_enum(_wp_,_wq_)}}} return [0, empty, is_empty, mem, add, singleton, remove, union, inter, disjoint, diff, compare, equal, subset, iter, map, fold, for_all, exists, filter, filter_map, partition, cardinal, elements, min_elt, min_elt_opt, max_elt, max_elt_opt, min_elt, min_elt_opt, split, find, find_opt, find_first, find_first_opt, find_last, find_last_opt, of_list, to_seq_from, to_seq, to_rev_seq, add_seq, of_seq]}]; caml_register_global(801,Stdlib_Set,"Stdlib__Set"); var Stdlib_Map= [0, function(Ord) {function height(param){if(param){var h=param[5];return h}return 0} function create(l,x,d,r) {var hl=height(l),hr=height(r),_wo_=hr <= hl?hl + 1 | 0:hr + 1 | 0; return [0,l,x,d,r,_wo_]} function singleton(x,d){return [0,0,x,d,0,1]} function bal(l,x,d,r) {if(l)var h=l[5],hl=h;else var hl=0; if(r)var h$0=r[5],hr=h$0;else var hr=0; if((hr + 2 | 0) < hl) {if(l) {var lr=l[4],ld=l[3],lv=l[2],ll=l[1],_wj_=height(lr); if(_wj_ <= height(ll))return create(ll,lv,ld,create(lr,x,d,r)); if(lr) {var lrr=lr[4], lrd=lr[3], lrv=lr[2], lrl=lr[1], _wk_=create(lrr,x,d,r); return create(create(ll,lv,ld,lrl),lrv,lrd,_wk_)} return invalid_arg(cst_Map_bal)} return invalid_arg(cst_Map_bal$0)} if((hl + 2 | 0) < hr) {if(r) {var rr=r[4],rd=r[3],rv=r[2],rl=r[1],_wl_=height(rl); if(_wl_ <= height(rr))return create(create(l,x,d,rl),rv,rd,rr); if(rl) {var rlr=rl[4], rld=rl[3], rlv=rl[2], rll=rl[1], _wm_=create(rlr,rv,rd,rr); return create(create(l,x,d,rll),rlv,rld,_wm_)} return invalid_arg(cst_Map_bal$1)} return invalid_arg(cst_Map_bal$2)} var _wn_=hr <= hl?hl + 1 | 0:hr + 1 | 0; return [0,l,x,d,r,_wn_]} var empty=0; function is_empty(param){return param?0:1} function add(x,data,m) {if(m) {var h=m[5],r=m[4],d=m[3],v=m[2],l=m[1],c=caml_call2(Ord[1],x,v); if(0 === c)return d === data?m:[0,l,x,data,r,h]; if(0 <= c){var rr=add(x,data,r);return r === rr?m:bal(l,v,d,rr)} var ll=add(x,data,l); return l === ll?m:bal(ll,v,d,r)} return [0,0,x,data,0,1]} function find(x,param) {var param$0=param; for(;;) {if(param$0) {var r=param$0[4], d=param$0[3], v=param$0[2], l=param$0[1], c=caml_call2(Ord[1],x,v); if(0 === c)return d; var param$1=0 <= c?r:l,param$0=param$1; continue} throw Not_found}} function find_first(f,param$0) {var param$1=param$0; for(;;) {if(param$1) {var r$0=param$1[4], d$0=param$1[3], v$0=param$1[2], l$0=param$1[1]; if(caml_call1(f,v$0)) {var v0=v$0,d0=d$0,param=l$0; for(;;) {if(param) {var r=param[4],d=param[3],v=param[2],l=param[1]; if(caml_call1(f,v)){var v0=v,d0=d,param=l;continue} var param=r; continue} return [0,v0,d0]}} var param$1=r$0; continue} throw Not_found}} function find_first_opt(f,param$0) {var param$1=param$0; for(;;) {if(param$1) {var r$0=param$1[4], d$0=param$1[3], v$0=param$1[2], l$0=param$1[1]; if(caml_call1(f,v$0)) {var v0=v$0,d0=d$0,param=l$0; for(;;) {if(param) {var r=param[4],d=param[3],v=param[2],l=param[1]; if(caml_call1(f,v)){var v0=v,d0=d,param=l;continue} var param=r; continue} return [0,[0,v0,d0]]}} var param$1=r$0; continue} return 0}} function find_last(f,param$0) {var param$1=param$0; for(;;) {if(param$1) {var r$0=param$1[4], d$0=param$1[3], v$0=param$1[2], l$0=param$1[1]; if(caml_call1(f,v$0)) {var v0=v$0,d0=d$0,param=r$0; for(;;) {if(param) {var r=param[4],d=param[3],v=param[2],l=param[1]; if(caml_call1(f,v)){var v0=v,d0=d,param=r;continue} var param=l; continue} return [0,v0,d0]}} var param$1=l$0; continue} throw Not_found}} function find_last_opt(f,param$0) {var param$1=param$0; for(;;) {if(param$1) {var r$0=param$1[4], d$0=param$1[3], v$0=param$1[2], l$0=param$1[1]; if(caml_call1(f,v$0)) {var v0=v$0,d0=d$0,param=r$0; for(;;) {if(param) {var r=param[4],d=param[3],v=param[2],l=param[1]; if(caml_call1(f,v)){var v0=v,d0=d,param=r;continue} var param=l; continue} return [0,[0,v0,d0]]}} var param$1=l$0; continue} return 0}} function find_opt(x,param) {var param$0=param; for(;;) {if(param$0) {var r=param$0[4], d=param$0[3], v=param$0[2], l=param$0[1], c=caml_call2(Ord[1],x,v); if(0 === c)return [0,d]; var param$1=0 <= c?r:l,param$0=param$1; continue} return 0}} function mem(x,param) {var param$0=param; for(;;) {if(param$0) {var r=param$0[4], v=param$0[2], l=param$0[1], c=caml_call2(Ord[1],x,v), _wi_=0 === c?1:0; if(_wi_)return _wi_; var param$1=0 <= c?r:l,param$0=param$1; continue} return 0}} function min_binding(param) {var param$0=param; for(;;) {if(param$0) {var _wh_=param$0[1]; if(_wh_){var param$0=_wh_;continue} var d=param$0[3],v=param$0[2]; return [0,v,d]} throw Not_found}} function min_binding_opt(param) {var param$0=param; for(;;) {if(param$0) {var _wg_=param$0[1]; if(_wg_){var param$0=_wg_;continue} var d=param$0[3],v=param$0[2]; return [0,[0,v,d]]} return 0}} function max_binding(param) {var param$0=param; for(;;) {if(param$0) {if(param$0[4]){var param$1=param$0[4],param$0=param$1;continue} var d=param$0[3],v=param$0[2]; return [0,v,d]} throw Not_found}} function max_binding_opt(param) {var param$0=param; for(;;) {if(param$0) {if(param$0[4]){var param$1=param$0[4],param$0=param$1;continue} var d=param$0[3],v=param$0[2]; return [0,[0,v,d]]} return 0}} function remove_min_binding(param) {if(param) {var _wf_=param[1]; if(_wf_) {var r=param[4],d=param[3],v=param[2]; return bal(remove_min_binding(_wf_),v,d,r)} var r$0=param[4]; return r$0} return invalid_arg(cst_Map_remove_min_elt)} function _vQ_(t1,t2) {if(t1) {if(t2) {var match=min_binding(t2),d=match[2],x=match[1]; return bal(t1,x,d,remove_min_binding(t2))} return t1} return t2} function remove(x,m) {if(m) {var r=m[4],d=m[3],v=m[2],l=m[1],c=caml_call2(Ord[1],x,v); if(0 === c)return _vQ_(l,r); if(0 <= c){var rr=remove(x,r);return r === rr?m:bal(l,v,d,rr)} var ll=remove(x,l); return l === ll?m:bal(ll,v,d,r)} return 0} function update(x,f,m) {if(m) {var h=m[5],r=m[4],d=m[3],v=m[2],l=m[1],c=caml_call2(Ord[1],x,v); if(0 === c) {var match=caml_call1(f,[0,d]); if(match) {var data=match[1];return d === data?m:[0,l,x,data,r,h]} return _vQ_(l,r)} if(0 <= c){var rr=update(x,f,r);return r === rr?m:bal(l,v,d,rr)} var ll=update(x,f,l); return l === ll?m:bal(ll,v,d,r)} var match$0=caml_call1(f,0); if(match$0){var data$0=match$0[1];return [0,0,x,data$0,0,1]} return 0} function iter(f,param) {var param$0=param; for(;;) {if(param$0) {var r=param$0[4],d=param$0[3],v=param$0[2],l=param$0[1]; iter(f,l); caml_call2(f,v,d); var param$0=r; continue} return 0}} function map(f,param) {if(param) {var h=param[5], r=param[4], d=param[3], v=param[2], l=param[1], l$0=map(f,l), d$0=caml_call1(f,d), r$0=map(f,r); return [0,l$0,v,d$0,r$0,h]} return 0} function mapi(f,param) {if(param) {var h=param[5], r=param[4], d=param[3], v=param[2], l=param[1], l$0=mapi(f,l), d$0=caml_call2(f,v,d), r$0=mapi(f,r); return [0,l$0,v,d$0,r$0,h]} return 0} function fold(f,m,accu) {var m$0=m,accu$0=accu; for(;;) {if(m$0) {var r=m$0[4], d=m$0[3], v=m$0[2], l=m$0[1], accu$1=caml_call3(f,v,d,fold(f,l,accu$0)), m$0=r, accu$0=accu$1; continue} return accu$0}} function for_all(p,param) {var param$0=param; for(;;) {if(param$0) {var r=param$0[4], d=param$0[3], v=param$0[2], l=param$0[1], _wc_=caml_call2(p,v,d); if(_wc_) {var _wd_=for_all(p,l); if(_wd_){var param$0=r;continue} var _we_=_wd_} else var _we_=_wc_; return _we_} return 1}} function exists(p,param) {var param$0=param; for(;;) {if(param$0) {var r=param$0[4], d=param$0[3], v=param$0[2], l=param$0[1], _v$_=caml_call2(p,v,d); if(_v$_) var _wa_=_v$_; else {var _wb_=exists(p,l); if(! _wb_){var param$0=r;continue} var _wa_=_wb_} return _wa_} return 0}} function add_min_binding(k,x,param) {if(param) {var r=param[4],d=param[3],v=param[2],l=param[1]; return bal(add_min_binding(k,x,l),v,d,r)} return singleton(k,x)} function add_max_binding(k,x,param) {if(param) {var r=param[4],d=param[3],v=param[2],l=param[1]; return bal(l,v,d,add_max_binding(k,x,r))} return singleton(k,x)} function join(l,v,d,r) {if(l) {if(r) {var rh=r[5], rr=r[4], rd=r[3], rv=r[2], rl=r[1], lh=l[5], lr=l[4], ld=l[3], lv=l[2], ll=l[1]; return (rh + 2 | 0) < lh ?bal(ll,lv,ld,join(lr,v,d,r)) :(lh + 2 | 0) < rh ?bal(join(l,v,d,rl),rv,rd,rr) :create(l,v,d,r)} return add_max_binding(v,d,l)} return add_min_binding(v,d,r)} function concat(t1,t2) {if(t1) {if(t2) {var match=min_binding(t2),d=match[2],x=match[1]; return join(t1,x,d,remove_min_binding(t2))} return t1} return t2} function concat_or_join(t1,v,d,t2) {if(d){var d$0=d[1];return join(t1,v,d$0,t2)}return concat(t1,t2)} function split(x,param) {if(param) {var r=param[4], d=param[3], v=param[2], l=param[1], c=caml_call2(Ord[1],x,v); if(0 === c)return [0,l,[0,d],r]; if(0 <= c) {var match=split(x,r),rr=match[3],pres=match[2],lr=match[1]; return [0,join(l,v,d,lr),pres,rr]} var match$0=split(x,l), rl=match$0[3], pres$0=match$0[2], ll=match$0[1]; return [0,ll,pres$0,join(rl,v,d,r)]} return _Y_} function merge(f,s1,s2) {if(s1) {var h1=s1[5],r1=s1[4],d1=s1[3],v1=s1[2],l1=s1[1]; if(height(s2) <= h1) {var match=split(v1,s2), r2=match[3], d2=match[2], l2=match[1], _v7_=merge(f,r1,r2), _v8_=caml_call3(f,v1,[0,d1],d2); return concat_or_join(merge(f,l1,l2),v1,_v8_,_v7_)}} else if(! s2)return 0; if(s2) {var r2$0=s2[4], d2$0=s2[3], v2=s2[2], l2$0=s2[1], match$0=split(v2,s1), r1$0=match$0[3], d1$0=match$0[2], l1$0=match$0[1], _v9_=merge(f,r1$0,r2$0), _v__=caml_call3(f,v2,d1$0,[0,d2$0]); return concat_or_join(merge(f,l1$0,l2$0),v2,_v__,_v9_)} throw [0,Assert_failure,_Z_]} function union(f,s1,s2) {if(s1) {if(s2) {var h2=s2[5], r2=s2[4], d2=s2[3], v2=s2[2], l2=s2[1], h1=s1[5], r1=s1[4], d1=s1[3], v1=s1[2], l1=s1[1]; if(h2 <= h1) {var match=split(v1,s2), r2$0=match[3], d2$0=match[2], l2$0=match[1], l=union(f,l1,l2$0), r=union(f,r1,r2$0); if(d2$0) {var d2$1=d2$0[1]; return concat_or_join(l,v1,caml_call3(f,v1,d1,d2$1),r)} return join(l,v1,d1,r)} var match$0=split(v2,s1), r1$0=match$0[3], d1$0=match$0[2], l1$0=match$0[1], l$0=union(f,l1$0,l2), r$0=union(f,r1$0,r2); if(d1$0) {var d1$1=d1$0[1]; return concat_or_join(l$0,v2,caml_call3(f,v2,d1$1,d2),r$0)} return join(l$0,v2,d2,r$0)} var s=s1} else var s=s2; return s} function filter(p,m) {if(m) {var r=m[4], d=m[3], v=m[2], l=m[1], l$0=filter(p,l), pvd=caml_call2(p,v,d), r$0=filter(p,r); if(pvd) {if(l === l$0 && r === r$0)return m;return join(l$0,v,d,r$0)} return concat(l$0,r$0)} return 0} function filter_map(f,param) {if(param) {var r=param[4], d=param[3], v=param[2], l=param[1], l$0=filter_map(f,l), fvd=caml_call2(f,v,d), r$0=filter_map(f,r); if(fvd){var d$0=fvd[1];return join(l$0,v,d$0,r$0)} return concat(l$0,r$0)} return 0} function partition(p,param) {if(param) {var r=param[4], d=param[3], v=param[2], l=param[1], match=partition(p,l), lf=match[2], lt=match[1], pvd=caml_call2(p,v,d), match$0=partition(p,r), rf=match$0[2], rt=match$0[1]; if(pvd){var _v5_=concat(lf,rf);return [0,join(lt,v,d,rt),_v5_]} var _v6_=join(lf,v,d,rf); return [0,concat(lt,rt),_v6_]} return ___} function cons_enum(m,e) {var m$0=m,e$0=e; for(;;) {if(m$0) {var r=m$0[4], d=m$0[3], v=m$0[2], m$1=m$0[1], e$1=[0,v,d,r,e$0], m$0=m$1, e$0=e$1; continue} return e$0}} function compare(cmp,m1,m2) {var e2$2=cons_enum(m2,0),e1$2=cons_enum(m1,0),e1=e1$2,e2=e2$2; for(;;) {if(e1) {if(e2) {var e2$0=e2[4], r2=e2[3], d2=e2[2], v2=e2[1], e1$0=e1[4], r1=e1[3], d1=e1[2], v1=e1[1], c=caml_call2(Ord[1],v1,v2); if(0 === c) {var c$0=caml_call2(cmp,d1,d2); if(0 === c$0) {var e2$1=cons_enum(r2,e2$0), e1$1=cons_enum(r1,e1$0), e1=e1$1, e2=e2$1; continue} return c$0} return c} return 1} return e2?-1:0}} function equal(cmp,m1,m2) {var e2$2=cons_enum(m2,0),e1$2=cons_enum(m1,0),e1=e1$2,e2=e2$2; for(;;) {if(e1) {if(e2) {var e2$0=e2[4], r2=e2[3], d2=e2[2], v2=e2[1], e1$0=e1[4], r1=e1[3], d1=e1[2], v1=e1[1], _v2_=0 === caml_call2(Ord[1],v1,v2)?1:0; if(_v2_) {var _v3_=caml_call2(cmp,d1,d2); if(_v3_) {var e2$1=cons_enum(r2,e2$0), e1$1=cons_enum(r1,e1$0), e1=e1$1, e2=e2$1; continue} var _v4_=_v3_} else var _v4_=_v2_; return _v4_} return 0} return e2?0:1}} function cardinal(param) {if(param) {var r=param[4],l=param[1],_v1_=cardinal(r); return (cardinal(l) + 1 | 0) + _v1_ | 0} return 0} function bindings_aux(accu,param) {var accu$0=accu,param$0=param; for(;;) {if(param$0) {var r=param$0[4], d=param$0[3], v=param$0[2], l=param$0[1], accu$1=[0,[0,v,d],bindings_aux(accu$0,r)], accu$0=accu$1, param$0=l; continue} return accu$0}} function bindings(s){return bindings_aux(0,s)} function add_seq(i,m) {return fold_left (function(m,param) {var v=param[2],k=param[1];return add(k,v,m)}, m, i)} function of_seq(i){return add_seq(i,empty)} function seq_of_enum(c,param) {if(c) {var rest=c[4],t=c[3],v=c[2],k=c[1],_vZ_=cons_enum(t,rest); return [0,[0,k,v],function(_v0_){return seq_of_enum(_vZ_,_v0_)}]} return 0} function to_seq(m) {var _vX_=cons_enum(m,0); return function(_vY_){return seq_of_enum(_vX_,_vY_)}} function snoc_enum(s,e) {var s$0=s,e$0=e; for(;;) {if(s$0) {var s$1=s$0[4], d=s$0[3], v=s$0[2], l=s$0[1], e$1=[0,v,d,l,e$0], s$0=s$1, e$0=e$1; continue} return e$0}} function rev_seq_of_enum(c,param) {if(c) {var rest=c[4],t=c[3],v=c[2],k=c[1],_vV_=snoc_enum(t,rest); return [0, [0,k,v], function(_vW_){return rev_seq_of_enum(_vV_,_vW_)}]} return 0} function to_rev_seq(c) {var _vT_=snoc_enum(c,0); return function(_vU_){return rev_seq_of_enum(_vT_,_vU_)}} function to_seq_from(low,m) {var m$0=m,c=0; for(;;) {if(m$0) {var r=m$0[4], d=m$0[3], v=m$0[2], l=m$0[1], n=caml_call2(Ord[1],v,low); if(0 !== n) {if(0 <= n){var c$0=[0,v,d,r,c],m$0=l,c=c$0;continue} var m$0=r; continue} var _vR_=[0,v,d,r,c]} else var _vR_=c; return function(_vS_){return seq_of_enum(_vR_,_vS_)}}} return [0, empty, is_empty, mem, add, update, singleton, remove, merge, union, compare, equal, iter, fold, for_all, exists, filter, filter_map, partition, cardinal, bindings, min_binding, min_binding_opt, max_binding, max_binding_opt, min_binding, min_binding_opt, split, find, find_opt, find_first, find_first_opt, find_last, find_last_opt, map, mapi, to_seq, to_rev_seq, to_seq_from, add_seq, of_seq]}]; caml_register_global(802,Stdlib_Map,"Stdlib__Map"); var Empty=[248,cst_Stdlib_Stack_Empty,caml_fresh_oo_id(0)]; function create$0(param){return [0,0,0]} function clear(s){s[1] = 0;s[2] = 0;return 0} function copy$3(s){return [0,s[1],s[2]]} function push(x,s){s[1] = [0,x,s[1]];s[2] = s[2] + 1 | 0;return 0} function pop(s) {var _vP_=s[1]; if(_vP_) {var tl=_vP_[2],hd=_vP_[1];s[1] = tl;s[2] = s[2] - 1 | 0;return hd} throw Empty} function pop_opt(s) {var _vO_=s[1]; if(_vO_) {var tl=_vO_[2],hd=_vO_[1];s[1] = tl;s[2] = s[2] - 1 | 0;return [0,hd]} return 0} function top(s) {var _vN_=s[1];if(_vN_){var hd=_vN_[1];return hd}throw Empty} function top_opt(s) {var _vM_=s[1];if(_vM_){var hd=_vM_[1];return [0,hd]}return 0} function is_empty$0(s){return 0 === s[1]?1:0} function length$2(s){return s[2]} function iter$7(f,s){return iter$2(f,s[1])} function fold$2(f,acc,s){return fold_left$0(f,acc,s[1])} function to_seq$6(s){return to_seq$1(s[1])} function add_seq(q,i){return iter(function(x){return push(x,q)},i)} function of_seq$4(g){var s=create$0(0);add_seq(s,g);return s} var Stdlib_Stack= [0, Empty, create$0, push, pop, pop_opt, top, top_opt, clear, copy$3, is_empty$0, length$2, iter$7, fold$2, to_seq$6, add_seq, of_seq$4]; caml_register_global(803,Stdlib_Stack,"Stdlib__Stack"); var Empty$0=[248,cst_Stdlib_Queue_Empty,caml_fresh_oo_id(0)]; function create$1(param){return [0,0,0,0]} function clear$0(q){q[1] = 0;q[2] = 0;q[3] = 0;return 0} function add(x,q) {var cell=[0,x,0],_vL_=q[3]; return _vL_ ?(q[1] = q[1] + 1 | 0,_vL_[2] = cell,q[3] = cell,0) :(q[1] = 1,q[2] = cell,q[3] = cell,0)} function peek(q) {var _vK_=q[2];if(_vK_){var content=_vK_[1];return content}throw Empty$0} function peek_opt(q) {var _vJ_=q[2];if(_vJ_){var content=_vJ_[1];return [0,content]}return 0} function take$0(q) {var _vH_=q[2]; if(_vH_) {var _vI_=_vH_[1]; if(_vH_[2]) {var next=_vH_[2];q[1] = q[1] - 1 | 0;q[2] = next;return _vI_} clear$0(q); return _vI_} throw Empty$0} function take_opt(q) {var _vF_=q[2]; if(_vF_) {var _vG_=_vF_[1]; if(_vF_[2]) {var next=_vF_[2];q[1] = q[1] - 1 | 0;q[2] = next;return [0,_vG_]} clear$0(q); return [0,_vG_]} return 0} function copy$4(q) {var q_res=[0,q[1],0,0],prev=0,cell=q[2]; for(;;) {if(cell) {var content=cell[1],next=cell[2],res=[0,content,0]; if(prev)prev[2] = res;else q_res[2] = res; var prev=res,cell=next; continue} q_res[3] = prev; return q_res}} function is_empty$1(q){return 0 === q[1]?1:0} function length$3(q){return q[1]} function iter$8(f,q) {var cell=q[2]; for(;;) {if(cell) {var content=cell[1],next=cell[2]; caml_call1(f,content); var cell=next; continue} return 0}} function fold$3(f,accu$1,q) {var accu=accu$1,cell=q[2]; for(;;) {if(cell) {var content=cell[1], next=cell[2], accu$0=caml_call2(f,accu,content), accu=accu$0, cell=next; continue} return accu}} function transfer(q1,q2) {var _vD_=0 < q1[1]?1:0; if(_vD_) {var _vE_=q2[3]; return _vE_ ?(q2[1] = q2[1] + q1[1] | 0, _vE_[2] = q1[2], q2[3] = q1[3], clear$0(q1)) :(q2[1] = q1[1],q2[2] = q1[2],q2[3] = q1[3],clear$0(q1))} return _vD_} function to_seq$7(q) {function aux(c,param) {if(c) {var x=c[1],next=c[2]; return [0,x,function(_vC_){return aux(next,_vC_)}]} return 0} var _vA_=q[2]; return function(_vB_){return aux(_vA_,_vB_)}} function add_seq$0(q,i){return iter(function(x){return add(x,q)},i)} function of_seq$5(g){var q=create$1(0);add_seq$0(q,g);return q} var Stdlib_Queue= [0, Empty$0, create$1, add, add, take$0, take_opt, take$0, peek, peek_opt, peek, clear$0, copy$4, is_empty$1, length$3, iter$8, fold$3, transfer, to_seq$7, add_seq$0, of_seq$5]; caml_register_global(804,Stdlib_Queue,"Stdlib__Queue"); var Failure$0=[248,cst_Stdlib_Stream_Failure,caml_fresh_oo_id(0)], Error=[248,cst_Stdlib_Stream_Error,caml_fresh_oo_id(0)]; function count(param) {if(param){var match=param[1],count=match[1];return count}return 0} function data(param) {if(param){var match=param[1],data=match[2];return data}return 0} function fill_buff(b) {b[3] = input(b[1],b[2],0,caml_ml_bytes_length(b[2]));b[4] = 0;return 0} function get_data(count,d) {var d$0=d; for(;;) {if(typeof d$0 !== "number") switch(d$0[0]) {case 1: var d2=d$0[2],d1=d$0[1],match=get_data(count,d1); if(typeof match === "number") {var d$0=d2;continue} else {if(0 === match[0]) {var d11=match[2],a=match[1];return [0,a,[1,d11,d2]]} throw [0,Assert_failure,_$_]} case 2: var f=d$0[1], _vw_=caml_obj_tag(f), d$1=250 === _vw_?f[1]:246 === _vw_?force_lazy_block(f):f, d$0=d$1; continue; case 3: var _vx_=d$0[1],_vy_=_vx_[1]; if(_vy_) {var _vz_=_vy_[1]; if(_vz_){var a$0=_vz_[1];_vx_[1] = 0;return [0,a$0,d$0]} return 0} var match$0=caml_call1(_vx_[2],count); if(match$0){var a$1=match$0[1];return [0,a$1,d$0]} _vx_[1] = _aa_; return 0; case 4: var b=d$0[1]; if(b[3] <= b[4])fill_buff(b); if(0 === b[3])return 0; var r=caml_bytes_unsafe_get(b[2],b[4]); b[4] = b[4] + 1 | 0; return [0,r,d$0] } return d$0}} function peek_data(s) {for(;;) {var _vr_=s[2]; if(typeof _vr_ === "number") return 0; else switch(_vr_[0]) {case 0:var a=_vr_[1];return [0,a]; case 1: var d=get_data(s[1],s[2]); if(typeof d === "number") return 0; else {if(0 === d[0]){var a$0=d[1];s[2] = d;return [0,a$0]} throw [0,Assert_failure,_ab_]} case 2: var f=_vr_[1], _vs_=caml_obj_tag(f), _vt_=250 === _vs_?f[1]:246 === _vs_?force_lazy_block(f):f; s[2] = _vt_; continue; case 3: var _vu_=_vr_[1],_vv_=_vu_[1]; if(_vv_){var a$1=_vv_[1];return a$1} var x=caml_call1(_vu_[2],s[1]); _vu_[1] = [0,x]; return x; default: var b=_vr_[1]; if(b[3] <= b[4])fill_buff(b); return 0 === b[3] ?(s[2] = 0,0) :[0,caml_bytes_unsafe_get(b[2],b[4])]}}} function peek$0(param) {if(param){var s=param[1];return peek_data(s)}return 0} function junk_data(s) {for(;;) {var _vp_=s[2]; if(typeof _vp_ !== "number") switch(_vp_[0]) {case 0:var d=_vp_[2];s[1] = s[1] + 1 | 0;s[2] = d;return 0; case 3: var _vq_=_vp_[1]; if(_vq_[1]){s[1] = s[1] + 1 | 0;_vq_[1] = 0;return 0} break; case 4: var b=_vp_[1]; if(b[3] <= b[4])fill_buff(b); return 0 === b[3] ?(s[2] = 0,0) :(s[1] = s[1] + 1 | 0,b[4] = b[4] + 1 | 0,0) } var match=peek_data(s); if(match)continue; return 0}} function junk(param) {if(param){var data=param[1];return junk_data(data)}return 0} function nget_data(n,s) {if(0 < n) {var match=peek_data(s); if(match) {var a=match[1]; junk_data(s); var match$0=nget_data(n - 1 | 0,s), k=match$0[3], d=match$0[2], al=match$0[1]; return [0,[0,a,al],[0,a,d],k + 1 | 0]} return [0,0,s[2],0]} return [0,0,s[2],0]} function npeek(n,param) {if(param) {var d$0=param[1], match=nget_data(n,d$0), len=match[3], d=match[2], al=match[1]; d$0[1] = d$0[1] - len | 0; d$0[2] = d; return al} return 0} function next(s) {var match=peek$0(s); if(match){var a=match[1];junk(s);return a} throw Failure$0} function empty$2(s){var match=peek$0(s);if(match)throw Failure$0;return 0} function iter$9(f,strm) {for(;;) {var match=peek$0(strm); if(match){var a=match[1];junk(strm);caml_call1(f,a);continue} return 0}} function from(f){return [0,[0,0,[3,[0,0,f]]]]} function of_list$1(l) {var _vo_=0; return [0,[0,0,fold_right(function(x,l){return [0,x,l]},l,_vo_)]]} function of_string(s) {var count=[0,0]; return from (function(param) {var c=count[1]; return c < caml_ml_string_length(s) ?(count[1]++,[0,caml_string_get(s,c)]) :0})} function of_bytes$0(s) {var count=[0,0]; return from (function(param) {var c=count[1]; return c < caml_ml_bytes_length(s) ?(count[1]++,[0,caml_bytes_get(s,c)]) :0})} function of_channel(ic) {return [0,[0,0,[4,[0,ic,caml_create_bytes(4096),0,0]]]]} function iapp(i,s){var _vn_=data(s);return [0,[0,0,[1,data(i),_vn_]]]} function icons(i,s){return [0,[0,0,[0,i,data(s)]]]} function ising(i){return [0,[0,0,[0,i,0]]]} function lapp(f,s) {return [0, [0, 0, [2, [246, function(_vl_) {var _vm_=data(s);return [1,data(caml_call1(f,0)),_vm_]}]]]]} function lcons(f,s) {return [0, [0, 0, [2, [246, function(_vj_) {var _vk_=data(s);return [0,caml_call1(f,0),_vk_]}]]]]} function lsing(f) {return [0,[0,0,[2,[246,function(_vi_){return [0,caml_call1(f,0),0]}]]]]} var sempty=0; function slazy(f) {return [0,[0,0,[2,[246,function(_vh_){return data(caml_call1(f,0))}]]]]} function dump_data(f,param) {if(typeof param === "number") return print_string(cst_Sempty); else switch(param[0]) {case 0: var d=param[2],a=param[1]; print_string(cst_Scons); caml_call1(f,a); print_string(cst$7); dump_data(f,d); return print_string(cst$8); case 1: var d2=param[2],d1=param[1]; print_string(cst_Sapp); dump_data(f,d1); print_string(cst$9); dump_data(f,d2); return print_string(cst$10); case 2:return print_string(cst_Slazy); case 3:return print_string(cst_Sgen); default:return print_string(cst_Sbuffio)}} function dump(f,s) {print_string(cst_count); print_int(count(s)); print_string(cst_data); dump_data(f,data(s)); print_string(cst$6); return print_newline(0)} var Stdlib_Stream= [0, Failure$0, Error, from, of_list$1, of_string, of_bytes$0, of_channel, iter$9, next, empty$2, peek$0, junk, count, npeek, iapp, icons, ising, lapp, lcons, lsing, sempty, slazy, dump]; caml_register_global(805,Stdlib_Stream,"Stdlib__Stream"); function create$2(n) {var n$0=1 <= n?n:1, n$1=max_string_length < n$0?max_string_length:n$0, s=caml_create_bytes(n$1); return [0,s,0,n$1,s]} function contents(b){return sub_string(b[1],0,b[2])} function to_bytes$0(b){return sub(b[1],0,b[2])} function sub$3(b,ofs,len) {if(0 <= ofs && 0 <= len && ! ((b[2] - len | 0) < ofs)) return sub_string(b[1],ofs,len); return invalid_arg(cst_Buffer_sub)} function blit$3(src,srcoff,dst,dstoff,len) {if (0 <= len && 0 <= srcoff && ! ((src[2] - len | 0) < srcoff) && 0 <= dstoff && ! ((caml_ml_bytes_length(dst) - len | 0) < dstoff)) return caml_blit_bytes(src[1],srcoff,dst,dstoff,len); return invalid_arg(cst_Buffer_blit)} function nth$0(b,ofs) {if(0 <= ofs && ! (b[2] <= ofs))return caml_bytes_unsafe_get(b[1],ofs); return invalid_arg(cst_Buffer_nth)} function length$4(b){return b[2]} function clear$1(b){b[2] = 0;return 0} function reset(b) {b[2] = 0;b[1] = b[4];b[3] = caml_ml_bytes_length(b[1]);return 0} function resize(b,more) {var old_pos=b[2],old_len=b[3],new_len=[0,old_len]; for(;;) {if(new_len[1] < (old_pos + more | 0)) {new_len[1] = 2 * new_len[1] | 0;continue} if(max_string_length < new_len[1]) if((old_pos + more | 0) <= max_string_length) new_len[1] = max_string_length; else failwith(cst_Buffer_add_cannot_grow_buf); var new_buffer=caml_create_bytes(new_len[1]); blit(b[1],0,new_buffer,0,b[2]); b[1] = new_buffer; b[3] = new_len[1]; if((b[2] + more | 0) <= b[3]) {if((old_pos + more | 0) <= b[3])return 0; throw [0,Assert_failure,_ac_]} throw [0,Assert_failure,_ad_]}} function add_char(b,c) {var pos=b[2]; if(b[3] <= pos)resize(b,1); caml_bytes_unsafe_set(b[1],pos,c); b[2] = pos + 1 | 0; return 0} var uchar_utf_8_byte_length_max=4,uchar_utf_16_byte_length_max=4; function add_utf_8_uchar(b,u) {for(;;) {var pos=b[2]; if(b[3] <= pos)resize(b,uchar_utf_8_byte_length_max); var n=set_utf_8_uchar(b[1],pos,u); if(0 === n){resize(b,uchar_utf_8_byte_length_max);continue} b[2] = pos + n | 0; return 0}} function add_utf_16be_uchar(b,u) {for(;;) {var pos=b[2]; if(b[3] <= pos)resize(b,uchar_utf_16_byte_length_max); var n=set_utf_16be_uchar(b[1],pos,u); if(0 === n){resize(b,uchar_utf_16_byte_length_max);continue} b[2] = pos + n | 0; return 0}} function add_utf_16le_uchar(b,u) {for(;;) {var pos=b[2]; if(b[3] <= pos)resize(b,uchar_utf_16_byte_length_max); var n=set_utf_16le_uchar(b[1],pos,u); if(0 === n){resize(b,uchar_utf_16_byte_length_max);continue} b[2] = pos + n | 0; return 0}} function add_substring(b,s,offset,len) {var _ve_=offset < 0?1:0; if(_ve_) var _vf_=_ve_; else var _vg_=len < 0?1:0, _vf_=_vg_ || ((caml_ml_string_length(s) - len | 0) < offset?1:0); if(_vf_)invalid_arg(cst_Buffer_add_substring_add_s); var new_position=b[2] + len | 0; if(b[3] < new_position)resize(b,len); caml_blit_string(s,offset,b[1],b[2],len); b[2] = new_position; return 0} function add_subbytes(b,s,offset,len) {return add_substring(b,caml_string_of_bytes(s),offset,len)} function add_string(b,s) {var len=caml_ml_string_length(s),new_position=b[2] + len | 0; if(b[3] < new_position)resize(b,len); caml_blit_string(s,0,b[1],b[2],len); b[2] = new_position; return 0} function add_bytes(b,s){return add_string(b,caml_string_of_bytes(s))} function add_buffer(b,bs){return add_subbytes(b,bs[1],0,bs[2])} function add_channel(b,ic,len) {var _vc_=len < 0?1:0,_vd_=_vc_ || (max_string_length < len?1:0); if(_vd_)invalid_arg(cst_Buffer_add_channel); if(b[3] < (b[2] + len | 0))resize(b,len); var already_read=0,ofs=b[2],to_read=len,_vb_=b[1]; for(;;) {if(0 !== to_read) {var r=input(ic,_vb_,ofs,to_read); if(0 !== r) {var already_read$0=already_read + r | 0, ofs$0=ofs + r | 0, to_read$0=to_read - r | 0, already_read=already_read$0, ofs=ofs$0, to_read=to_read$0; continue}} if((b[2] + already_read | 0) <= b[3]) {b[2] = b[2] + already_read | 0; if(already_read < len)throw End_of_file; return 0} throw [0,Assert_failure,_ae_]}} function output_buffer(oc,b){return output(oc,b[1],0,b[2])} function add_substitute(b,f,s) {var lim$1=caml_ml_string_length(s),previous=32,i$7=0; for(;;) {if(i$7 < lim$1) {var current=caml_string_get(s,i$7); if(36 === current) {if(92 === previous) {add_char(b,current); var i$8=i$7 + 1 | 0,previous=32,i$7=i$8; continue} var start=i$7 + 1 | 0; if(lim$1 <= start)throw Not_found; var opening=caml_string_get(s,start),switch$0=0; if(40 !== opening && 123 !== opening) {var i$6=start + 1 | 0,lim$0=caml_ml_string_length(s),i$3=i$6; for(;;) {if(lim$0 <= i$3) var stop=lim$0; else {var match=caml_string_get(s,i$3),switch$1=0; if(91 <= match) {if(97 <= match) {if(! (123 <= match))switch$1 = 1} else if(95 === match)switch$1 = 1} else if(58 <= match) {if(65 <= match)switch$1 = 1} else if(48 <= match)switch$1 = 1; if(switch$1){var i$4=i$3 + 1 | 0,i$3=i$4;continue} var stop=i$3} var match$0=[0,sub$0(s,start,stop - start | 0),stop]; switch$0 = 1; break}} if(! switch$0) {var i$5=start + 1 | 0,k$2=0; if(40 === opening) var _u$_=41; else {if(123 !== opening)throw [0,Assert_failure,_af_];var _u$_=125} var lim=caml_ml_string_length(s),k=k$2,i=i$5; for(;;) {if(lim <= i)throw Not_found; if(caml_string_get(s,i) === opening) {var i$0=i + 1 | 0,k$0=k + 1 | 0,k=k$0,i=i$0;continue} if(caml_string_get(s,i) !== _u$_) {var i$2=i + 1 | 0,i=i$2;continue} if(0 !== k) {var i$1=i + 1 | 0,k$1=k - 1 | 0,k=k$1,i=i$1;continue} var match$0= [0,sub$0(s,i$5,(i - start | 0) - 1 | 0),i + 1 | 0]; break}} var next_i=match$0[2],ident=match$0[1]; add_string(b,caml_call1(f,ident)); var previous=32,i$7=next_i; continue} if(92 === previous) {add_char(b,92); add_char(b,current); var i$9=i$7 + 1 | 0,previous=32,i$7=i$9; continue} if(92 === current) {var i$10=i$7 + 1 | 0,previous=current,i$7=i$10;continue} add_char(b,current); var i$11=i$7 + 1 | 0,previous=current,i$7=i$11; continue} var _va_=92 === previous?1:0; return _va_?add_char(b,previous):_va_}} function truncate(b,len) {if(0 <= len && ! (b[2] < len)){b[2] = len;return 0} return invalid_arg(cst_Buffer_truncate)} function to_seq$8(b) {function aux(i,param) {if(b[2] <= i)return 0; var x=caml_bytes_unsafe_get(b[1],i),_u9_=i + 1 | 0; return [0,x,function(_u__){return aux(_u9_,_u__)}]} var _u7_=0; return function(_u8_){return aux(_u7_,_u8_)}} function to_seqi$3(b) {function aux(i,param) {if(b[2] <= i)return 0; var x=caml_bytes_unsafe_get(b[1],i),_u5_=i + 1 | 0; return [0,[0,i,x],function(_u6_){return aux(_u5_,_u6_)}]} var _u3_=0; return function(_u4_){return aux(_u3_,_u4_)}} function add_seq$1(b,seq) {return iter(function(_u2_){return add_char(b,_u2_)},seq)} function of_seq$6(i){var b=create$2(32);add_seq$1(b,i);return b} function add_int8(b,x) {var new_position=b[2] + 1 | 0; if(b[3] < new_position)resize(b,1); caml_bytes_unsafe_set(b[1],b[2],x); b[2] = new_position; return 0} function add_int16_ne(b,x) {var new_position=b[2] + 2 | 0; if(b[3] < new_position)resize(b,2); caml_bytes_set16(b[1],b[2],x); b[2] = new_position; return 0} function add_int32_ne(b,x) {var new_position=b[2] + 4 | 0; if(b[3] < new_position)resize(b,4); caml_bytes_set32(b[1],b[2],x); b[2] = new_position; return 0} function add_int64_ne(b,x) {var new_position=b[2] + 8 | 0; if(b[3] < new_position)resize(b,8); caml_bytes_set64(b[1],b[2],x); b[2] = new_position; return 0} function add_int16_le(b,x){return add_int16_ne(b,x)} function add_int16_be(b,x) {var x$0=caml_bswap16(x);return add_int16_ne(b,x$0)} function add_int32_le(b,x){return add_int32_ne(b,x)} function add_int32_be(b,x) {var x$0=caml_int32_bswap(x);return add_int32_ne(b,x$0)} function add_int64_le(b,x){return add_int64_ne(b,x)} function add_int64_be(b,x) {var x$0=caml_int64_bswap(x);return add_int64_ne(b,x$0)} var Stdlib_Buffer= [0, create$2, contents, to_bytes$0, sub$3, blit$3, nth$0, length$4, clear$1, reset, output_buffer, truncate, add_char, add_utf_8_uchar, add_utf_16le_uchar, add_utf_16be_uchar, add_string, add_bytes, add_substring, add_subbytes, add_substitute, add_buffer, add_channel, to_seq$8, to_seqi$3, add_seq$1, of_seq$6, add_int8, add_int8, add_int16_ne, add_int16_be, add_int16_le, add_int16_ne, add_int16_be, add_int16_le, add_int32_ne, add_int32_be, add_int32_le, add_int64_ne, add_int64_be, add_int64_le]; caml_register_global(806,Stdlib_Buffer,"Stdlib__Buffer"); function create_char_set(param){return make$0(32,0)} function add_in_char_set(char_set,c) {var str_ind=c >>> 3 | 0,mask=1 << (c & 7); return caml_bytes_set (char_set, str_ind, char_of_int(caml_bytes_get(char_set,str_ind) | mask))} function freeze_char_set(char_set){return of_bytes(char_set)} function rev_char_set(char_set) {var char_set$0=create_char_set(0),i=0; for(;;) {caml_bytes_set (char_set$0,i,char_of_int(caml_string_get(char_set,i) ^ 255)); var _u1_=i + 1 | 0; if(31 !== i){var i=_u1_;continue} return caml_string_of_bytes(char_set$0)}} function is_in_char_set(char_set,c) {var str_ind=c >>> 3 | 0,mask=1 << (c & 7); return 0 !== (caml_string_get(char_set,str_ind) & mask)?1:0} function pad_of_pad_opt(pad_opt) {if(pad_opt){var width=pad_opt[1];return [0,1,width]}return 0} function param_format_of_ignored_format(ign,fmt) {if(typeof ign === "number") switch(ign) {case 0:return [0,[0,fmt]]; case 1:return [0,[1,fmt]]; case 2:return [0,[19,fmt]]; default:return [0,[22,fmt]]} else switch(ign[0]) {case 0:var pad_opt=ign[1];return [0,[2,pad_of_pad_opt(pad_opt),fmt]]; case 1: var pad_opt$0=ign[1];return [0,[3,pad_of_pad_opt(pad_opt$0),fmt]]; case 2: var pad_opt$1=ign[2],iconv=ign[1]; return [0,[4,iconv,pad_of_pad_opt(pad_opt$1),0,fmt]]; case 3: var pad_opt$2=ign[2],iconv$0=ign[1]; return [0,[5,iconv$0,pad_of_pad_opt(pad_opt$2),0,fmt]]; case 4: var pad_opt$3=ign[2],iconv$1=ign[1]; return [0,[6,iconv$1,pad_of_pad_opt(pad_opt$3),0,fmt]]; case 5: var pad_opt$4=ign[2],iconv$2=ign[1]; return [0,[7,iconv$2,pad_of_pad_opt(pad_opt$4),0,fmt]]; case 6: var prec_opt=ign[2],pad_opt$5=ign[1]; if(prec_opt)var ndec=prec_opt[1],_u0_=[0,ndec];else var _u0_=0; return [0,[8,_ag_,pad_of_pad_opt(pad_opt$5),_u0_,fmt]]; case 7: var pad_opt$6=ign[1];return [0,[9,pad_of_pad_opt(pad_opt$6),fmt]]; case 8: var fmtty=ign[2],pad_opt$7=ign[1]; return [0,[13,pad_opt$7,fmtty,fmt]]; case 9: var fmtty$0=ign[2],pad_opt$8=ign[1]; return [0,[14,pad_opt$8,fmtty$0,fmt]]; case 10: var char_set=ign[2],width_opt=ign[1]; return [0,[20,width_opt,char_set,fmt]]; default:var counter=ign[1];return [0,[21,counter,fmt]]}} function default_float_precision(fconv){return 5 === fconv[2]?12:-6} function buffer_create(init_size) {return [0,0,caml_create_bytes(init_size)]} function buffer_check_size(buf,overhead) {var len=caml_ml_bytes_length(buf[2]), min_len=buf[1] + overhead | 0, _uY_=len < min_len?1:0; if(_uY_) {var new_len=max$1(len * 2 | 0,min_len), new_str=caml_create_bytes(new_len); blit(buf[2],0,new_str,0,len); buf[2] = new_str; var _uZ_=0} else var _uZ_=_uY_; return _uZ_} function buffer_add_char(buf,c) {buffer_check_size(buf,1); caml_bytes_set(buf[2],buf[1],c); buf[1] = buf[1] + 1 | 0; return 0} function buffer_add_string(buf,s) {var str_len=caml_ml_string_length(s); buffer_check_size(buf,str_len); blit$0(s,0,buf[2],buf[1],str_len); buf[1] = buf[1] + str_len | 0; return 0} function buffer_contents(buf){return sub_string(buf[2],0,buf[1])} function char_of_iconv(iconv) {switch(iconv) {case 6: case 7:return 120; case 8: case 9:return 88; case 10: case 11:return 111; case 12: case 15:return 117; case 0: case 1: case 2: case 13:return 100; default:return 105}} function char_of_fconv(opt,fconv) {if(opt)var sth=opt[1],cF=sth;else var cF=70; switch(fconv[2]) {case 0:return 102; case 1:return 101; case 2:return 69; case 3:return 103; case 4:return 71; case 5:return cF; case 6:return 104; case 7:return 72; default:return 70}} function bprint_padty(buf,padty) {switch(padty) {case 0:return buffer_add_char(buf,45); case 1:return 0; default:return buffer_add_char(buf,48)}} function bprint_ignored_flag(buf,ign_flag) {return ign_flag?buffer_add_char(buf,95):ign_flag} function bprint_pad_opt(buf,pad_opt) {if(pad_opt) {var width=pad_opt[1]; return buffer_add_string(buf,caml_string_of_jsbytes("" + width))} return 0} function bprint_padding(buf,pad) {if(typeof pad === "number") return 0; else {if(0 === pad[0]) {var n=pad[2],padty=pad[1]; bprint_padty(buf,padty); return buffer_add_string(buf,caml_string_of_jsbytes("" + n))} var padty$0=pad[1]; bprint_padty(buf,padty$0); return buffer_add_char(buf,42)}} function bprint_precision(buf,prec) {if(typeof prec === "number")return prec?buffer_add_string(buf,cst$11):0; var n=prec[1]; buffer_add_char(buf,46); return buffer_add_string(buf,caml_string_of_jsbytes("" + n))} function bprint_iconv_flag(buf,iconv) {switch(iconv) {case 1: case 4:return buffer_add_char(buf,43); case 2: case 5:return buffer_add_char(buf,32); case 7: case 9: case 11: case 13: case 14: case 15:return buffer_add_char(buf,35); default:return 0}} function bprint_altint_fmt(buf,ign_flag,iconv,pad,prec,c) {buffer_add_char(buf,37); bprint_ignored_flag(buf,ign_flag); bprint_iconv_flag(buf,iconv); bprint_padding(buf,pad); bprint_precision(buf,prec); buffer_add_char(buf,c); return buffer_add_char(buf,char_of_iconv(iconv))} function bprint_fconv_flag(buf,fconv) {switch(fconv[1]) {case 0:break; case 1:buffer_add_char(buf,43);break; default:buffer_add_char(buf,32)} return 8 <= fconv[2]?buffer_add_char(buf,35):0} function string_of_formatting_lit(formatting_lit) {if(typeof formatting_lit === "number") switch(formatting_lit) {case 0:return cst$12; case 1:return cst$13; case 2:return cst$14; case 3:return cst$15; case 4:return cst$16; case 5:return cst$17; default:return cst$18} else switch(formatting_lit[0]) {case 0:var str=formatting_lit[1];return str; case 1:var str$0=formatting_lit[1];return str$0; default:var c=formatting_lit[1];return cat(cst$19,make$1(1,c))}} function bprint_char_literal(buf,chr) {return 37 === chr?buffer_add_string(buf,cst$20):buffer_add_char(buf,chr)} function bprint_string_literal(buf,str) {var _uW_=caml_ml_string_length(str) - 1 | 0,_uV_=0; if(! (_uW_ < 0)) {var i=_uV_; for(;;) {bprint_char_literal(buf,caml_string_get(str,i)); var _uX_=i + 1 | 0; if(_uW_ !== i){var i=_uX_;continue} break}} return 0} function bprint_fmtty(buf,fmtty) {var fmtty$0=fmtty; for(;;) if(typeof fmtty$0 === "number") return 0; else switch(fmtty$0[0]) {case 0: var rest=fmtty$0[1]; buffer_add_string(buf,cst_c); var fmtty$0=rest; continue; case 1: var rest$0=fmtty$0[1]; buffer_add_string(buf,cst_s); var fmtty$0=rest$0; continue; case 2: var rest$1=fmtty$0[1]; buffer_add_string(buf,cst_i); var fmtty$0=rest$1; continue; case 3: var rest$2=fmtty$0[1]; buffer_add_string(buf,cst_li); var fmtty$0=rest$2; continue; case 4: var rest$3=fmtty$0[1]; buffer_add_string(buf,cst_ni); var fmtty$0=rest$3; continue; case 5: var rest$4=fmtty$0[1]; buffer_add_string(buf,cst_Li); var fmtty$0=rest$4; continue; case 6: var rest$5=fmtty$0[1]; buffer_add_string(buf,cst_f); var fmtty$0=rest$5; continue; case 7: var rest$6=fmtty$0[1]; buffer_add_string(buf,cst_B); var fmtty$0=rest$6; continue; case 8: var rest$7=fmtty$0[2],sub_fmtty=fmtty$0[1]; buffer_add_string(buf,cst$21); bprint_fmtty(buf,sub_fmtty); buffer_add_string(buf,cst$22); var fmtty$0=rest$7; continue; case 9: var rest$8=fmtty$0[3],sub_fmtty$0=fmtty$0[1]; buffer_add_string(buf,cst$23); bprint_fmtty(buf,sub_fmtty$0); buffer_add_string(buf,cst$24); var fmtty$0=rest$8; continue; case 10: var rest$9=fmtty$0[1]; buffer_add_string(buf,cst_a); var fmtty$0=rest$9; continue; case 11: var rest$10=fmtty$0[1]; buffer_add_string(buf,cst_t$0); var fmtty$0=rest$10; continue; case 12: var rest$11=fmtty$0[1]; buffer_add_string(buf,cst$25); var fmtty$0=rest$11; continue; case 13: var rest$12=fmtty$0[1]; buffer_add_string(buf,cst_r$0); var fmtty$0=rest$12; continue; default: var rest$13=fmtty$0[1]; buffer_add_string(buf,cst_r$1); var fmtty$0=rest$13; continue}} function int_of_custom_arity(param) {if(param){var x=param[1];return 1 + int_of_custom_arity(x) | 0}return 0} function string_of_fmt(fmt) {var buf=buffer_create(16); function fmtiter(fmt,ign_flag) {var fmt$0=fmt,ign_flag$0=ign_flag; a: for(;;) if(typeof fmt$0 === "number") return 0; else switch(fmt$0[0]) {case 0: var rest=fmt$0[1]; buffer_add_char(buf,37); bprint_ignored_flag(buf,ign_flag$0); buffer_add_char(buf,99); var fmt$0=rest,ign_flag$0=0; continue; case 1: var rest$0=fmt$0[1]; buffer_add_char(buf,37); bprint_ignored_flag(buf,ign_flag$0); buffer_add_char(buf,67); var fmt$0=rest$0,ign_flag$0=0; continue; case 2: var rest$1=fmt$0[2],pad=fmt$0[1]; buffer_add_char(buf,37); bprint_ignored_flag(buf,ign_flag$0); bprint_padding(buf,pad); buffer_add_char(buf,115); var fmt$0=rest$1,ign_flag$0=0; continue; case 3: var rest$2=fmt$0[2],pad$0=fmt$0[1]; buffer_add_char(buf,37); bprint_ignored_flag(buf,ign_flag$0); bprint_padding(buf,pad$0); buffer_add_char(buf,83); var fmt$0=rest$2,ign_flag$0=0; continue; case 4: var rest$3=fmt$0[4],prec=fmt$0[3],pad$1=fmt$0[2],iconv=fmt$0[1]; buffer_add_char(buf,37); bprint_ignored_flag(buf,ign_flag$0); bprint_iconv_flag(buf,iconv); bprint_padding(buf,pad$1); bprint_precision(buf,prec); buffer_add_char(buf,char_of_iconv(iconv)); var fmt$0=rest$3,ign_flag$0=0; continue; case 5: var rest$4=fmt$0[4], prec$0=fmt$0[3], pad$2=fmt$0[2], iconv$0=fmt$0[1]; bprint_altint_fmt(buf,ign_flag$0,iconv$0,pad$2,prec$0,108); var fmt$0=rest$4,ign_flag$0=0; continue; case 6: var rest$5=fmt$0[4], prec$1=fmt$0[3], pad$3=fmt$0[2], iconv$1=fmt$0[1]; bprint_altint_fmt(buf,ign_flag$0,iconv$1,pad$3,prec$1,110); var fmt$0=rest$5,ign_flag$0=0; continue; case 7: var rest$6=fmt$0[4], prec$2=fmt$0[3], pad$4=fmt$0[2], iconv$2=fmt$0[1]; bprint_altint_fmt(buf,ign_flag$0,iconv$2,pad$4,prec$2,76); var fmt$0=rest$6,ign_flag$0=0; continue; case 8: var rest$7=fmt$0[4], prec$3=fmt$0[3], pad$5=fmt$0[2], fconv=fmt$0[1]; buffer_add_char(buf,37); bprint_ignored_flag(buf,ign_flag$0); bprint_fconv_flag(buf,fconv); bprint_padding(buf,pad$5); bprint_precision(buf,prec$3); buffer_add_char(buf,char_of_fconv(0,fconv)); var fmt$0=rest$7,ign_flag$0=0; continue; case 9: var rest$8=fmt$0[2],pad$6=fmt$0[1]; buffer_add_char(buf,37); bprint_ignored_flag(buf,ign_flag$0); bprint_padding(buf,pad$6); buffer_add_char(buf,66); var fmt$0=rest$8,ign_flag$0=0; continue; case 10: var rest$9=fmt$0[1]; buffer_add_string(buf,cst$26); var fmt$0=rest$9; continue; case 11: var rest$10=fmt$0[2],str=fmt$0[1]; bprint_string_literal(buf,str); var fmt$0=rest$10; continue; case 12: var rest$11=fmt$0[2],chr$0=fmt$0[1]; bprint_char_literal(buf,chr$0); var fmt$0=rest$11; continue; case 13: var rest$12=fmt$0[3],fmtty=fmt$0[2],pad_opt=fmt$0[1]; buffer_add_char(buf,37); bprint_ignored_flag(buf,ign_flag$0); bprint_pad_opt(buf,pad_opt); buffer_add_char(buf,123); bprint_fmtty(buf,fmtty); buffer_add_char(buf,37); buffer_add_char(buf,125); var fmt$0=rest$12,ign_flag$0=0; continue; case 14: var rest$13=fmt$0[3],fmtty$0=fmt$0[2],pad_opt$0=fmt$0[1]; buffer_add_char(buf,37); bprint_ignored_flag(buf,ign_flag$0); bprint_pad_opt(buf,pad_opt$0); buffer_add_char(buf,40); bprint_fmtty(buf,fmtty$0); buffer_add_char(buf,37); buffer_add_char(buf,41); var fmt$0=rest$13,ign_flag$0=0; continue; case 15: var rest$14=fmt$0[1]; buffer_add_char(buf,37); bprint_ignored_flag(buf,ign_flag$0); buffer_add_char(buf,97); var fmt$0=rest$14,ign_flag$0=0; continue; case 16: var rest$15=fmt$0[1]; buffer_add_char(buf,37); bprint_ignored_flag(buf,ign_flag$0); buffer_add_char(buf,116); var fmt$0=rest$15,ign_flag$0=0; continue; case 17: var rest$16=fmt$0[2],fmting_lit=fmt$0[1]; bprint_string_literal(buf,string_of_formatting_lit(fmting_lit)); var fmt$0=rest$16; continue; case 18: var rest$17=fmt$0[2],fmting_gen=fmt$0[1]; if(0 === fmting_gen[0]) {var match$1=fmting_gen[1],str$0=match$1[2]; buffer_add_string(buf,cst$27); buffer_add_string(buf,str$0)} else {var match$2=fmting_gen[1],str$1=match$2[2]; buffer_add_string(buf,cst$28); buffer_add_string(buf,str$1)} var fmt$0=rest$17; continue; case 19: var rest$18=fmt$0[1]; buffer_add_char(buf,37); bprint_ignored_flag(buf,ign_flag$0); buffer_add_char(buf,114); var fmt$0=rest$18,ign_flag$0=0; continue; case 20: var rest$19=fmt$0[3],char_set=fmt$0[2],width_opt=fmt$0[1]; buffer_add_char(buf,37); bprint_ignored_flag(buf,ign_flag$0); bprint_pad_opt(buf,width_opt); var print_char= function(buf,i) {var c=char_of_int(i); return 37 === c ?(buffer_add_char(buf,37),buffer_add_char(buf,37)) :64 === c ?(buffer_add_char(buf,37),buffer_add_char(buf,64)) :buffer_add_char(buf,c)}; buffer_add_char(buf,91); var _uL_= is_in_char_set(char_set,0) ?(buffer_add_char(buf,94),rev_char_set(char_set)) :char_set, is_alone$0= function(_uQ_) {function is_alone(c) {var after=chr(c + 1 | 0), before=chr(c - 1 | 0), _uR_=is_in_char_set(_uQ_,c); if(_uR_) var _uS_=is_in_char_set(_uQ_,before), _uT_=_uS_?is_in_char_set(_uQ_,after):_uS_, _uU_=1 - _uT_; else var _uU_=_uR_; return _uU_} return is_alone}, is_alone=is_alone$0(_uL_); if(is_alone(93))buffer_add_char(buf,93); var i=1; b: for(;;) {if(i < 256) {if(! is_in_char_set(_uL_,char_of_int(i))) {var i$0=i + 1 | 0,i=i$0;continue} var match=char_of_int(i),switcher=match - 45 | 0,switch$0=0; if(48 < switcher >>> 0) if(210 <= switcher)print_char(buf,255);else switch$0 = 1; else {if(46 < switcher - 1 >>> 0) {var i$2=i + 1 | 0,i=i$2;continue} switch$0 = 1} if(switch$0) {var i$1=i + 1 | 0; if(! is_in_char_set(_uL_,char_of_int(i$1))) {print_char(buf,i$1 - 1 | 0); var i$6=i$1 + 1 | 0,i=i$6; continue} var match$0=char_of_int(i$1), switcher$0=match$0 - 45 | 0, switch$1=0; if(48 < switcher$0 >>> 0) if(210 <= switcher$0) {print_char(buf,254);print_char(buf,255)} else switch$1 = 1; else if(46 < switcher$0 - 1 >>> 0) {if(! is_in_char_set(_uL_,char_of_int(i$1 + 1 | 0))) {print_char(buf,i$1 - 1 | 0); var i$5=i$1 + 1 | 0,i=i$5; continue} switch$1 = 1} else switch$1 = 1; if(switch$1) {if(! is_in_char_set(_uL_,char_of_int(i$1 + 1 | 0))) {print_char(buf,i$1 - 1 | 0); print_char(buf,i$1); var i$4=i$1 + 2 | 0,i=i$4; continue} var j=i$1 + 2 | 0,i$3=i$1 - 1 | 0,j$0=j; for(;;) {if(256 !== j$0 && is_in_char_set(_uL_,char_of_int(j$0))) {var j$1=j$0 + 1 | 0,j$0=j$1;continue} print_char(buf,i$3); print_char(buf,45); print_char(buf,j$0 - 1 | 0); if(j$0 < 256){var i$7=j$0 + 1 | 0,i=i$7;continue b} break}}}} if(is_alone(45))buffer_add_char(buf,45); buffer_add_char(buf,93); var fmt$0=rest$19,ign_flag$0=0; continue a} case 21: var rest$20=fmt$0[2],counter=fmt$0[1]; buffer_add_char(buf,37); bprint_ignored_flag(buf,ign_flag$0); switch(counter) {case 0:var _uM_=108;break; case 1:var _uM_=110;break; default:var _uM_=78} buffer_add_char(buf,_uM_); var fmt$0=rest$20,ign_flag$0=0; continue; case 22: var rest$21=fmt$0[1]; buffer_add_char(buf,37); bprint_ignored_flag(buf,ign_flag$0); bprint_string_literal(buf,cst_0c); var fmt$0=rest$21,ign_flag$0=0; continue; case 23: var rest$22=fmt$0[2], ign=fmt$0[1], match$3=param_format_of_ignored_format(ign,rest$22), fmt$1=match$3[1], fmt$0=fmt$1, ign_flag$0=1; continue; default: var rest$23=fmt$0[3], arity=fmt$0[1], _uO_=int_of_custom_arity(arity), _uN_=1; if(! (_uO_ < 1)) {var i$8=_uN_; for(;;) {buffer_add_char(buf,37); bprint_ignored_flag(buf,ign_flag$0); buffer_add_char(buf,63); var _uP_=i$8 + 1 | 0; if(_uO_ !== i$8){var i$8=_uP_;continue} break}} var fmt$0=rest$23,ign_flag$0=0; continue}} fmtiter(fmt,0); return buffer_contents(buf)} function symm(param) {if(typeof param === "number") return 0; else switch(param[0]) {case 0:var rest=param[1];return [0,symm(rest)]; case 1:var rest$0=param[1];return [1,symm(rest$0)]; case 2:var rest$1=param[1];return [2,symm(rest$1)]; case 3:var rest$2=param[1];return [3,symm(rest$2)]; case 4:var rest$3=param[1];return [4,symm(rest$3)]; case 5:var rest$4=param[1];return [5,symm(rest$4)]; case 6:var rest$5=param[1];return [6,symm(rest$5)]; case 7:var rest$6=param[1];return [7,symm(rest$6)]; case 8:var rest$7=param[2],ty=param[1];return [8,ty,symm(rest$7)]; case 9: var rest$8=param[3],ty2=param[2],ty1=param[1]; return [9,ty2,ty1,symm(rest$8)]; case 10:var rest$9=param[1];return [10,symm(rest$9)]; case 11:var rest$10=param[1];return [11,symm(rest$10)]; case 12:var rest$11=param[1];return [12,symm(rest$11)]; case 13:var rest$12=param[1];return [13,symm(rest$12)]; default:var rest$13=param[1];return [14,symm(rest$13)]}} function trans(ty1,ty2) {var switch$0=0; if(typeof ty1 === "number") if(typeof ty2 === "number") return 0; else switch(ty2[0]) {case 10:break; case 11:switch$0 = 1;break; case 12:switch$0 = 2;break; case 13:switch$0 = 3;break; case 14:switch$0 = 4;break; case 8:switch$0 = 5;break; case 9:switch$0 = 6;break; default:throw [0,Assert_failure,_ah_]} else switch(ty1[0]) {case 0: var switch$1=0,_us_=ty1[1]; if(typeof ty2 !== "number") switch(ty2[0]) {case 0:var rest2=ty2[1];return [0,trans(_us_,rest2)]; case 8:switch$0 = 5;switch$1 = 1;break; case 9:switch$0 = 6;switch$1 = 1;break; case 10:switch$1 = 1;break; case 11:switch$0 = 1;switch$1 = 1;break; case 12:switch$0 = 2;switch$1 = 1;break; case 13:switch$0 = 3;switch$1 = 1;break; case 14:switch$0 = 4;switch$1 = 1;break } if(! switch$1)switch$0 = 7; break; case 1: var switch$2=0,_ut_=ty1[1]; if(typeof ty2 !== "number") switch(ty2[0]) {case 1:var rest2$0=ty2[1];return [1,trans(_ut_,rest2$0)]; case 8:switch$0 = 5;switch$2 = 1;break; case 9:switch$0 = 6;switch$2 = 1;break; case 10:switch$2 = 1;break; case 11:switch$0 = 1;switch$2 = 1;break; case 12:switch$0 = 2;switch$2 = 1;break; case 13:switch$0 = 3;switch$2 = 1;break; case 14:switch$0 = 4;switch$2 = 1;break } if(! switch$2)switch$0 = 7; break; case 2: var switch$3=0,_uu_=ty1[1]; if(typeof ty2 === "number") switch$3 = 1; else switch(ty2[0]) {case 2:var rest2$1=ty2[1];return [2,trans(_uu_,rest2$1)]; case 8:switch$0 = 5;break; case 9:switch$0 = 6;break; case 10:break; case 11:switch$0 = 1;break; case 12:switch$0 = 2;break; case 13:switch$0 = 3;break; case 14:switch$0 = 4;break; default:switch$3 = 1} if(switch$3)switch$0 = 7; break; case 3: var switch$4=0,_uv_=ty1[1]; if(typeof ty2 === "number") switch$4 = 1; else switch(ty2[0]) {case 3:var rest2$2=ty2[1];return [3,trans(_uv_,rest2$2)]; case 8:switch$0 = 5;break; case 9:switch$0 = 6;break; case 10:break; case 11:switch$0 = 1;break; case 12:switch$0 = 2;break; case 13:switch$0 = 3;break; case 14:switch$0 = 4;break; default:switch$4 = 1} if(switch$4)switch$0 = 7; break; case 4: var switch$5=0,_uw_=ty1[1]; if(typeof ty2 === "number") switch$5 = 1; else switch(ty2[0]) {case 4:var rest2$3=ty2[1];return [4,trans(_uw_,rest2$3)]; case 8:switch$0 = 5;break; case 9:switch$0 = 6;break; case 10:break; case 11:switch$0 = 1;break; case 12:switch$0 = 2;break; case 13:switch$0 = 3;break; case 14:switch$0 = 4;break; default:switch$5 = 1} if(switch$5)switch$0 = 7; break; case 5: var switch$6=0,_ux_=ty1[1]; if(typeof ty2 === "number") switch$6 = 1; else switch(ty2[0]) {case 5:var rest2$4=ty2[1];return [5,trans(_ux_,rest2$4)]; case 8:switch$0 = 5;break; case 9:switch$0 = 6;break; case 10:break; case 11:switch$0 = 1;break; case 12:switch$0 = 2;break; case 13:switch$0 = 3;break; case 14:switch$0 = 4;break; default:switch$6 = 1} if(switch$6)switch$0 = 7; break; case 6: var switch$7=0,_uy_=ty1[1]; if(typeof ty2 === "number") switch$7 = 1; else switch(ty2[0]) {case 6:var rest2$5=ty2[1];return [6,trans(_uy_,rest2$5)]; case 8:switch$0 = 5;break; case 9:switch$0 = 6;break; case 10:break; case 11:switch$0 = 1;break; case 12:switch$0 = 2;break; case 13:switch$0 = 3;break; case 14:switch$0 = 4;break; default:switch$7 = 1} if(switch$7)switch$0 = 7; break; case 7: var switch$8=0,_uz_=ty1[1]; if(typeof ty2 === "number") switch$8 = 1; else switch(ty2[0]) {case 7:var rest2$6=ty2[1];return [7,trans(_uz_,rest2$6)]; case 8:switch$0 = 5;break; case 9:switch$0 = 6;break; case 10:break; case 11:switch$0 = 1;break; case 12:switch$0 = 2;break; case 13:switch$0 = 3;break; case 14:switch$0 = 4;break; default:switch$8 = 1} if(switch$8)switch$0 = 7; break; case 8: var switch$9=0,_uA_=ty1[2],_uB_=ty1[1]; if(typeof ty2 === "number") switch$9 = 1; else switch(ty2[0]) {case 8: var rest2$7=ty2[2],ty2$0=ty2[1],_uC_=trans(_uA_,rest2$7); return [8,trans(_uB_,ty2$0),_uC_]; case 10:break; case 11:switch$0 = 1;break; case 12:switch$0 = 2;break; case 13:switch$0 = 3;break; case 14:switch$0 = 4;break; default:switch$9 = 1} if(switch$9)throw [0,Assert_failure,_aq_]; break; case 9: var switch$10=0,_uD_=ty1[3],_uE_=ty1[2],_uF_=ty1[1]; if(typeof ty2 === "number") switch$10 = 1; else switch(ty2[0]) {case 8:switch$0 = 5;break; case 9: var rest2$8=ty2[3], ty22=ty2[2], ty21=ty2[1], ty=trans(symm(_uE_),ty21), match=fmtty_rel_det(ty), f4=match[4], f2=match[2]; caml_call1(f2,0); caml_call1(f4,0); return [9,_uF_,ty22,trans(_uD_,rest2$8)]; case 10:break; case 11:switch$0 = 1;break; case 12:switch$0 = 2;break; case 13:switch$0 = 3;break; case 14:switch$0 = 4;break; default:switch$10 = 1} if(switch$10)throw [0,Assert_failure,_ar_]; break; case 10: var _uG_=ty1[1]; if(typeof ty2 !== "number" && 10 === ty2[0]) {var rest2$9=ty2[1];return [10,trans(_uG_,rest2$9)]} throw [0,Assert_failure,_as_]; case 11: var switch$11=0,_uH_=ty1[1]; if(typeof ty2 === "number") switch$11 = 1; else switch(ty2[0]) {case 10:break; case 11:var rest2$10=ty2[1];return [11,trans(_uH_,rest2$10)]; default:switch$11 = 1} if(switch$11)throw [0,Assert_failure,_at_]; break; case 12: var switch$12=0,_uI_=ty1[1]; if(typeof ty2 === "number") switch$12 = 1; else switch(ty2[0]) {case 10:break; case 11:switch$0 = 1;break; case 12:var rest2$11=ty2[1];return [12,trans(_uI_,rest2$11)]; default:switch$12 = 1} if(switch$12)throw [0,Assert_failure,_au_]; break; case 13: var switch$13=0,_uJ_=ty1[1]; if(typeof ty2 === "number") switch$13 = 1; else switch(ty2[0]) {case 10:break; case 11:switch$0 = 1;break; case 12:switch$0 = 2;break; case 13:var rest2$12=ty2[1];return [13,trans(_uJ_,rest2$12)]; default:switch$13 = 1} if(switch$13)throw [0,Assert_failure,_av_]; break; default: var switch$14=0,_uK_=ty1[1]; if(typeof ty2 === "number") switch$14 = 1; else switch(ty2[0]) {case 10:break; case 11:switch$0 = 1;break; case 12:switch$0 = 2;break; case 13:switch$0 = 3;break; case 14:var rest2$13=ty2[1];return [14,trans(_uK_,rest2$13)]; default:switch$14 = 1} if(switch$14)throw [0,Assert_failure,_aw_]} switch(switch$0) {case 0:throw [0,Assert_failure,_ak_]; case 1:throw [0,Assert_failure,_al_]; case 2:throw [0,Assert_failure,_am_]; case 3:throw [0,Assert_failure,_an_]; case 4:throw [0,Assert_failure,_ao_]; case 5:throw [0,Assert_failure,_ai_]; case 6:throw [0,Assert_failure,_aj_]; default:throw [0,Assert_failure,_ap_]}} function fmtty_rel_det(param) {if(typeof param === "number") {var _t6_=function(param){return 0}, _t7_=function(param){return 0}, _t8_=function(param){return 0}; return [0,function(param){return 0},_t8_,_t7_,_t6_]} else switch(param[0]) {case 0: var rest=param[1], match=fmtty_rel_det(rest), de=match[4], ed=match[3], af=match[2], fa=match[1], _t9_=function(param){caml_call1(af,0);return 0}; return [0,function(param){caml_call1(fa,0);return 0},_t9_,ed,de]; case 1: var rest$0=param[1], match$0=fmtty_rel_det(rest$0), de$0=match$0[4], ed$0=match$0[3], af$0=match$0[2], fa$0=match$0[1], _t__=function(param){caml_call1(af$0,0);return 0}; return [0, function(param){caml_call1(fa$0,0);return 0}, _t__, ed$0, de$0]; case 2: var rest$1=param[1], match$1=fmtty_rel_det(rest$1), de$1=match$1[4], ed$1=match$1[3], af$1=match$1[2], fa$1=match$1[1], _t$_=function(param){caml_call1(af$1,0);return 0}; return [0, function(param){caml_call1(fa$1,0);return 0}, _t$_, ed$1, de$1]; case 3: var rest$2=param[1], match$2=fmtty_rel_det(rest$2), de$2=match$2[4], ed$2=match$2[3], af$2=match$2[2], fa$2=match$2[1], _ua_=function(param){caml_call1(af$2,0);return 0}; return [0, function(param){caml_call1(fa$2,0);return 0}, _ua_, ed$2, de$2]; case 4: var rest$3=param[1], match$3=fmtty_rel_det(rest$3), de$3=match$3[4], ed$3=match$3[3], af$3=match$3[2], fa$3=match$3[1], _ub_=function(param){caml_call1(af$3,0);return 0}; return [0, function(param){caml_call1(fa$3,0);return 0}, _ub_, ed$3, de$3]; case 5: var rest$4=param[1], match$4=fmtty_rel_det(rest$4), de$4=match$4[4], ed$4=match$4[3], af$4=match$4[2], fa$4=match$4[1], _uc_=function(param){caml_call1(af$4,0);return 0}; return [0, function(param){caml_call1(fa$4,0);return 0}, _uc_, ed$4, de$4]; case 6: var rest$5=param[1], match$5=fmtty_rel_det(rest$5), de$5=match$5[4], ed$5=match$5[3], af$5=match$5[2], fa$5=match$5[1], _ud_=function(param){caml_call1(af$5,0);return 0}; return [0, function(param){caml_call1(fa$5,0);return 0}, _ud_, ed$5, de$5]; case 7: var rest$6=param[1], match$6=fmtty_rel_det(rest$6), de$6=match$6[4], ed$6=match$6[3], af$6=match$6[2], fa$6=match$6[1], _ue_=function(param){caml_call1(af$6,0);return 0}; return [0, function(param){caml_call1(fa$6,0);return 0}, _ue_, ed$6, de$6]; case 8: var rest$7=param[2], match$7=fmtty_rel_det(rest$7), de$7=match$7[4], ed$7=match$7[3], af$7=match$7[2], fa$7=match$7[1], _uf_=function(param){caml_call1(af$7,0);return 0}; return [0, function(param){caml_call1(fa$7,0);return 0}, _uf_, ed$7, de$7]; case 9: var rest$8=param[3], ty2=param[2], ty1=param[1], match$8=fmtty_rel_det(rest$8), de$8=match$8[4], ed$8=match$8[3], af$8=match$8[2], fa$8=match$8[1], ty=trans(symm(ty1),ty2), match$9=fmtty_rel_det(ty), jd=match$9[4], dj=match$9[3], ga=match$9[2], ag=match$9[1], _ug_=function(param){caml_call1(jd,0);caml_call1(de$8,0);return 0}, _uh_=function(param){caml_call1(ed$8,0);caml_call1(dj,0);return 0}, _ui_=function(param){caml_call1(ga,0);caml_call1(af$8,0);return 0}; return [0, function(param) {caml_call1(fa$8,0);caml_call1(ag,0);return 0}, _ui_, _uh_, _ug_]; case 10: var rest$9=param[1], match$10=fmtty_rel_det(rest$9), de$9=match$10[4], ed$9=match$10[3], af$9=match$10[2], fa$9=match$10[1], _uj_=function(param){caml_call1(af$9,0);return 0}; return [0, function(param){caml_call1(fa$9,0);return 0}, _uj_, ed$9, de$9]; case 11: var rest$10=param[1], match$11=fmtty_rel_det(rest$10), de$10=match$11[4], ed$10=match$11[3], af$10=match$11[2], fa$10=match$11[1], _uk_=function(param){caml_call1(af$10,0);return 0}; return [0, function(param){caml_call1(fa$10,0);return 0}, _uk_, ed$10, de$10]; case 12: var rest$11=param[1], match$12=fmtty_rel_det(rest$11), de$11=match$12[4], ed$11=match$12[3], af$11=match$12[2], fa$11=match$12[1], _ul_=function(param){caml_call1(af$11,0);return 0}; return [0, function(param){caml_call1(fa$11,0);return 0}, _ul_, ed$11, de$11]; case 13: var rest$12=param[1], match$13=fmtty_rel_det(rest$12), de$12=match$13[4], ed$12=match$13[3], af$12=match$13[2], fa$12=match$13[1], _um_=function(param){caml_call1(de$12,0);return 0}, _un_=function(param){caml_call1(ed$12,0);return 0}, _uo_=function(param){caml_call1(af$12,0);return 0}; return [0, function(param){caml_call1(fa$12,0);return 0}, _uo_, _un_, _um_]; default: var rest$13=param[1], match$14=fmtty_rel_det(rest$13), de$13=match$14[4], ed$13=match$14[3], af$13=match$14[2], fa$13=match$14[1], _up_=function(param){caml_call1(de$13,0);return 0}, _uq_=function(param){caml_call1(ed$13,0);return 0}, _ur_=function(param){caml_call1(af$13,0);return 0}; return [0, function(param){caml_call1(fa$13,0);return 0}, _ur_, _uq_, _up_]}} function fmtty_of_precision_fmtty(prec,fmtty) {return typeof prec === "number"?prec?[2,fmtty]:fmtty:fmtty} function fmtty_of_padding_fmtty(pad,fmtty) {return typeof pad === "number"?fmtty:0 === pad[0]?fmtty:[2,fmtty]} function fmtty_of_custom(arity,fmtty) {if(arity) {var arity$0=arity[1];return [12,fmtty_of_custom(arity$0,fmtty)]} return fmtty} function fmtty_of_fmt(fmtty) {var fmtty$0=fmtty; for(;;) if(typeof fmtty$0 === "number") return 0; else switch(fmtty$0[0]) {case 0:var rest=fmtty$0[1];return [0,fmtty_of_fmt(rest)]; case 1:var rest$0=fmtty$0[1];return [0,fmtty_of_fmt(rest$0)]; case 2: var rest$1=fmtty$0[2],pad=fmtty$0[1]; return fmtty_of_padding_fmtty(pad,[1,fmtty_of_fmt(rest$1)]); case 3: var rest$2=fmtty$0[2],pad$0=fmtty$0[1]; return fmtty_of_padding_fmtty(pad$0,[1,fmtty_of_fmt(rest$2)]); case 4: var rest$3=fmtty$0[4], prec=fmtty$0[3], pad$1=fmtty$0[2], ty_rest=fmtty_of_fmt(rest$3), prec_ty=fmtty_of_precision_fmtty(prec,[2,ty_rest]); return fmtty_of_padding_fmtty(pad$1,prec_ty); case 5: var rest$4=fmtty$0[4], prec$0=fmtty$0[3], pad$2=fmtty$0[2], ty_rest$0=fmtty_of_fmt(rest$4), prec_ty$0=fmtty_of_precision_fmtty(prec$0,[3,ty_rest$0]); return fmtty_of_padding_fmtty(pad$2,prec_ty$0); case 6: var rest$5=fmtty$0[4], prec$1=fmtty$0[3], pad$3=fmtty$0[2], ty_rest$1=fmtty_of_fmt(rest$5), prec_ty$1=fmtty_of_precision_fmtty(prec$1,[4,ty_rest$1]); return fmtty_of_padding_fmtty(pad$3,prec_ty$1); case 7: var rest$6=fmtty$0[4], prec$2=fmtty$0[3], pad$4=fmtty$0[2], ty_rest$2=fmtty_of_fmt(rest$6), prec_ty$2=fmtty_of_precision_fmtty(prec$2,[5,ty_rest$2]); return fmtty_of_padding_fmtty(pad$4,prec_ty$2); case 8: var rest$7=fmtty$0[4], prec$3=fmtty$0[3], pad$5=fmtty$0[2], ty_rest$3=fmtty_of_fmt(rest$7), prec_ty$3=fmtty_of_precision_fmtty(prec$3,[6,ty_rest$3]); return fmtty_of_padding_fmtty(pad$5,prec_ty$3); case 9: var rest$8=fmtty$0[2],pad$6=fmtty$0[1]; return fmtty_of_padding_fmtty(pad$6,[7,fmtty_of_fmt(rest$8)]); case 10:var fmtty$1=fmtty$0[1],fmtty$0=fmtty$1;continue; case 11:var fmtty$2=fmtty$0[2],fmtty$0=fmtty$2;continue; case 12:var fmtty$3=fmtty$0[2],fmtty$0=fmtty$3;continue; case 13: var rest$9=fmtty$0[3],ty=fmtty$0[2]; return [8,ty,fmtty_of_fmt(rest$9)]; case 14: var rest$10=fmtty$0[3],ty$0=fmtty$0[2]; return [9,ty$0,ty$0,fmtty_of_fmt(rest$10)]; case 15:var rest$11=fmtty$0[1];return [10,fmtty_of_fmt(rest$11)]; case 16:var rest$12=fmtty$0[1];return [11,fmtty_of_fmt(rest$12)]; case 17:var fmtty$4=fmtty$0[2],fmtty$0=fmtty$4;continue; case 18: var rest$13=fmtty$0[2], fmting_gen=fmtty$0[1], _t4_=fmtty_of_fmt(rest$13); if(0 === fmting_gen[0]) var match=fmting_gen[1],fmt=match[1],_t5_=fmtty_of_fmt(fmt); else var match$0=fmting_gen[1], fmt$0=match$0[1], _t5_=fmtty_of_fmt(fmt$0); return concat_fmtty(_t5_,_t4_); case 19:var rest$14=fmtty$0[1];return [13,fmtty_of_fmt(rest$14)]; case 20:var rest$15=fmtty$0[3];return [1,fmtty_of_fmt(rest$15)]; case 21:var rest$16=fmtty$0[2];return [2,fmtty_of_fmt(rest$16)]; case 22:var rest$17=fmtty$0[1];return [0,fmtty_of_fmt(rest$17)]; case 23: var rest$18=fmtty$0[2],ign=fmtty$0[1]; if(typeof ign === "number") switch(ign) {case 0:var fmtty$0=rest$18;continue; case 1:var fmtty$0=rest$18;continue; case 2:return [14,fmtty_of_fmt(rest$18)]; default:var fmtty$0=rest$18;continue} else switch(ign[0]) {case 0:var fmtty$0=rest$18;continue; case 1:var fmtty$0=rest$18;continue; case 2:var fmtty$0=rest$18;continue; case 3:var fmtty$0=rest$18;continue; case 4:var fmtty$0=rest$18;continue; case 5:var fmtty$0=rest$18;continue; case 6:var fmtty$0=rest$18;continue; case 7:var fmtty$0=rest$18;continue; case 8:var fmtty$0=rest$18;continue; case 9: var fmtty$5=ign[2]; return concat_fmtty(fmtty$5,fmtty_of_fmt(rest$18)); case 10:var fmtty$0=rest$18;continue; default:var fmtty$0=rest$18;continue} default: var rest$19=fmtty$0[3],arity=fmtty$0[1]; return fmtty_of_custom(arity,fmtty_of_fmt(rest$19))}} var Type_mismatch= [248,cst_CamlinternalFormat_Type_mi,caml_fresh_oo_id(0)]; function type_padding(pad,fmtty) {if(typeof pad === "number") return [0,0,fmtty]; else {if(0 === pad[0]) {var w=pad[2],padty=pad[1];return [0,[0,padty,w],fmtty]} if(typeof fmtty !== "number" && 2 === fmtty[0]) {var rest=fmtty[1],padty$0=pad[1];return [0,[1,padty$0],rest]} throw Type_mismatch}} function type_padprec(pad,prec,fmtty) {var match=type_padding(pad,fmtty); if(typeof prec === "number") {if(prec) {var _t3_=match[2]; if(typeof _t3_ !== "number" && 2 === _t3_[0]) {var rest=_t3_[1],pad$0=match[1];return [0,pad$0,1,rest]} throw Type_mismatch} var rest$0=match[2],pad$1=match[1]; return [0,pad$1,0,rest$0]} var rest$1=match[2],pad$2=match[1],p=prec[1]; return [0,pad$2,[0,p],rest$1]} function type_ignored_format_substituti(sub_fmtty,fmt,fmtty) {if(typeof sub_fmtty === "number") return [0,0,type_format_gen(fmt,fmtty)]; else switch(sub_fmtty[0]) {case 0: if(typeof fmtty !== "number" && 0 === fmtty[0]) {var fmtty_rest=fmtty[1], sub_fmtty_rest=sub_fmtty[1], match= type_ignored_format_substituti(sub_fmtty_rest,fmt,fmtty_rest), fmt$0=match[2], sub_fmtty_rest$0=match[1]; return [0,[0,sub_fmtty_rest$0],fmt$0]} break; case 1: if(typeof fmtty !== "number" && 1 === fmtty[0]) {var fmtty_rest$0=fmtty[1], sub_fmtty_rest$1=sub_fmtty[1], match$0= type_ignored_format_substituti (sub_fmtty_rest$1,fmt,fmtty_rest$0), fmt$1=match$0[2], sub_fmtty_rest$2=match$0[1]; return [0,[1,sub_fmtty_rest$2],fmt$1]} break; case 2: if(typeof fmtty !== "number" && 2 === fmtty[0]) {var fmtty_rest$1=fmtty[1], sub_fmtty_rest$3=sub_fmtty[1], match$1= type_ignored_format_substituti (sub_fmtty_rest$3,fmt,fmtty_rest$1), fmt$2=match$1[2], sub_fmtty_rest$4=match$1[1]; return [0,[2,sub_fmtty_rest$4],fmt$2]} break; case 3: if(typeof fmtty !== "number" && 3 === fmtty[0]) {var fmtty_rest$2=fmtty[1], sub_fmtty_rest$5=sub_fmtty[1], match$2= type_ignored_format_substituti (sub_fmtty_rest$5,fmt,fmtty_rest$2), fmt$3=match$2[2], sub_fmtty_rest$6=match$2[1]; return [0,[3,sub_fmtty_rest$6],fmt$3]} break; case 4: if(typeof fmtty !== "number" && 4 === fmtty[0]) {var fmtty_rest$3=fmtty[1], sub_fmtty_rest$7=sub_fmtty[1], match$3= type_ignored_format_substituti (sub_fmtty_rest$7,fmt,fmtty_rest$3), fmt$4=match$3[2], sub_fmtty_rest$8=match$3[1]; return [0,[4,sub_fmtty_rest$8],fmt$4]} break; case 5: if(typeof fmtty !== "number" && 5 === fmtty[0]) {var fmtty_rest$4=fmtty[1], sub_fmtty_rest$9=sub_fmtty[1], match$4= type_ignored_format_substituti (sub_fmtty_rest$9,fmt,fmtty_rest$4), fmt$5=match$4[2], sub_fmtty_rest$10=match$4[1]; return [0,[5,sub_fmtty_rest$10],fmt$5]} break; case 6: if(typeof fmtty !== "number" && 6 === fmtty[0]) {var fmtty_rest$5=fmtty[1], sub_fmtty_rest$11=sub_fmtty[1], match$5= type_ignored_format_substituti (sub_fmtty_rest$11,fmt,fmtty_rest$5), fmt$6=match$5[2], sub_fmtty_rest$12=match$5[1]; return [0,[6,sub_fmtty_rest$12],fmt$6]} break; case 7: if(typeof fmtty !== "number" && 7 === fmtty[0]) {var fmtty_rest$6=fmtty[1], sub_fmtty_rest$13=sub_fmtty[1], match$6= type_ignored_format_substituti (sub_fmtty_rest$13,fmt,fmtty_rest$6), fmt$7=match$6[2], sub_fmtty_rest$14=match$6[1]; return [0,[7,sub_fmtty_rest$14],fmt$7]} break; case 8: if(typeof fmtty !== "number" && 8 === fmtty[0]) {var fmtty_rest$7=fmtty[2], sub2_fmtty=fmtty[1], sub_fmtty_rest$15=sub_fmtty[2], sub2_fmtty$0=sub_fmtty[1]; if(caml_notequal([0,sub2_fmtty$0],[0,sub2_fmtty])) throw Type_mismatch; var match$7= type_ignored_format_substituti (sub_fmtty_rest$15,fmt,fmtty_rest$7), fmt$8=match$7[2], sub_fmtty_rest$16=match$7[1]; return [0,[8,sub2_fmtty,sub_fmtty_rest$16],fmt$8]} break; case 9: if(typeof fmtty !== "number" && 9 === fmtty[0]) {var fmtty_rest$8=fmtty[3], sub2_fmtty$1=fmtty[2], sub1_fmtty=fmtty[1], sub_fmtty_rest$17=sub_fmtty[3], sub2_fmtty$2=sub_fmtty[2], sub1_fmtty$0=sub_fmtty[1], _t1_=[0,erase_rel(sub1_fmtty)]; if(caml_notequal([0,erase_rel(sub1_fmtty$0)],_t1_)) throw Type_mismatch; var _t2_=[0,erase_rel(sub2_fmtty$1)]; if(caml_notequal([0,erase_rel(sub2_fmtty$2)],_t2_)) throw Type_mismatch; var sub_fmtty$0=trans(symm(sub1_fmtty),sub2_fmtty$1), match$8=fmtty_rel_det(sub_fmtty$0), f4=match$8[4], f2=match$8[2]; caml_call1(f2,0); caml_call1(f4,0); var match$9= type_ignored_format_substituti (erase_rel(sub_fmtty_rest$17),fmt,fmtty_rest$8), fmt$9=match$9[2], sub_fmtty_rest$18=match$9[1]; return [0, [9,sub1_fmtty,sub2_fmtty$1,symm(sub_fmtty_rest$18)], fmt$9]} break; case 10: if(typeof fmtty !== "number" && 10 === fmtty[0]) {var fmtty_rest$9=fmtty[1], sub_fmtty_rest$19=sub_fmtty[1], match$10= type_ignored_format_substituti (sub_fmtty_rest$19,fmt,fmtty_rest$9), fmt$10=match$10[2], sub_fmtty_rest$20=match$10[1]; return [0,[10,sub_fmtty_rest$20],fmt$10]} break; case 11: if(typeof fmtty !== "number" && 11 === fmtty[0]) {var fmtty_rest$10=fmtty[1], sub_fmtty_rest$21=sub_fmtty[1], match$11= type_ignored_format_substituti (sub_fmtty_rest$21,fmt,fmtty_rest$10), fmt$11=match$11[2], sub_fmtty_rest$22=match$11[1]; return [0,[11,sub_fmtty_rest$22],fmt$11]} break; case 13: if(typeof fmtty !== "number" && 13 === fmtty[0]) {var fmtty_rest$11=fmtty[1], sub_fmtty_rest$23=sub_fmtty[1], match$12= type_ignored_format_substituti (sub_fmtty_rest$23,fmt,fmtty_rest$11), fmt$12=match$12[2], sub_fmtty_rest$24=match$12[1]; return [0,[13,sub_fmtty_rest$24],fmt$12]} break; case 14: if(typeof fmtty !== "number" && 14 === fmtty[0]) {var fmtty_rest$12=fmtty[1], sub_fmtty_rest$25=sub_fmtty[1], match$13= type_ignored_format_substituti (sub_fmtty_rest$25,fmt,fmtty_rest$12), fmt$13=match$13[2], sub_fmtty_rest$26=match$13[1]; return [0,[14,sub_fmtty_rest$26],fmt$13]} break } throw Type_mismatch} function type_format_gen(fmt,fmtty) {if(typeof fmt === "number") return [0,0,fmtty]; else switch(fmt[0]) {case 0: if(typeof fmtty !== "number" && 0 === fmtty[0]) {var fmtty_rest=fmtty[1], fmt_rest=fmt[1], match=type_format_gen(fmt_rest,fmtty_rest), fmtty$0=match[2], fmt$0=match[1]; return [0,[0,fmt$0],fmtty$0]} break; case 1: if(typeof fmtty !== "number" && 0 === fmtty[0]) {var fmtty_rest$0=fmtty[1], fmt_rest$0=fmt[1], match$0=type_format_gen(fmt_rest$0,fmtty_rest$0), fmtty$1=match$0[2], fmt$1=match$0[1]; return [0,[1,fmt$1],fmtty$1]} break; case 2: var fmt_rest$1=fmt[2], pad=fmt[1], match$1=type_padding(pad,fmtty), _tK_=match$1[2], _tJ_=match$1[1]; if(typeof _tK_ !== "number" && 1 === _tK_[0]) {var fmtty_rest$1=_tK_[1], match$2=type_format_gen(fmt_rest$1,fmtty_rest$1), fmtty$2=match$2[2], fmt$2=match$2[1]; return [0,[2,_tJ_,fmt$2],fmtty$2]} throw Type_mismatch; case 3: var fmt_rest$2=fmt[2], pad$0=fmt[1], match$3=type_padding(pad$0,fmtty), _tM_=match$3[2], _tL_=match$3[1]; if(typeof _tM_ !== "number" && 1 === _tM_[0]) {var fmtty_rest$2=_tM_[1], match$4=type_format_gen(fmt_rest$2,fmtty_rest$2), fmtty$3=match$4[2], fmt$3=match$4[1]; return [0,[3,_tL_,fmt$3],fmtty$3]} throw Type_mismatch; case 4: var fmt_rest$3=fmt[4], prec=fmt[3], pad$1=fmt[2], iconv=fmt[1], match$5=type_padprec(pad$1,prec,fmtty), _tO_=match$5[3], _tN_=match$5[1]; if(typeof _tO_ !== "number" && 2 === _tO_[0]) {var fmtty_rest$3=_tO_[1], prec$0=match$5[2], match$6=type_format_gen(fmt_rest$3,fmtty_rest$3), fmtty$4=match$6[2], fmt$4=match$6[1]; return [0,[4,iconv,_tN_,prec$0,fmt$4],fmtty$4]} throw Type_mismatch; case 5: var fmt_rest$4=fmt[4], prec$1=fmt[3], pad$2=fmt[2], iconv$0=fmt[1], match$7=type_padprec(pad$2,prec$1,fmtty), _tQ_=match$7[3], _tP_=match$7[1]; if(typeof _tQ_ !== "number" && 3 === _tQ_[0]) {var fmtty_rest$4=_tQ_[1], prec$2=match$7[2], match$8=type_format_gen(fmt_rest$4,fmtty_rest$4), fmtty$5=match$8[2], fmt$5=match$8[1]; return [0,[5,iconv$0,_tP_,prec$2,fmt$5],fmtty$5]} throw Type_mismatch; case 6: var fmt_rest$5=fmt[4], prec$3=fmt[3], pad$3=fmt[2], iconv$1=fmt[1], match$9=type_padprec(pad$3,prec$3,fmtty), _tS_=match$9[3], _tR_=match$9[1]; if(typeof _tS_ !== "number" && 4 === _tS_[0]) {var fmtty_rest$5=_tS_[1], prec$4=match$9[2], match$10=type_format_gen(fmt_rest$5,fmtty_rest$5), fmtty$6=match$10[2], fmt$6=match$10[1]; return [0,[6,iconv$1,_tR_,prec$4,fmt$6],fmtty$6]} throw Type_mismatch; case 7: var fmt_rest$6=fmt[4], prec$5=fmt[3], pad$4=fmt[2], iconv$2=fmt[1], match$11=type_padprec(pad$4,prec$5,fmtty), _tU_=match$11[3], _tT_=match$11[1]; if(typeof _tU_ !== "number" && 5 === _tU_[0]) {var fmtty_rest$6=_tU_[1], prec$6=match$11[2], match$12=type_format_gen(fmt_rest$6,fmtty_rest$6), fmtty$7=match$12[2], fmt$7=match$12[1]; return [0,[7,iconv$2,_tT_,prec$6,fmt$7],fmtty$7]} throw Type_mismatch; case 8: var fmt_rest$7=fmt[4], prec$7=fmt[3], pad$5=fmt[2], fconv=fmt[1], match$13=type_padprec(pad$5,prec$7,fmtty), _tW_=match$13[3], _tV_=match$13[1]; if(typeof _tW_ !== "number" && 6 === _tW_[0]) {var fmtty_rest$7=_tW_[1], prec$8=match$13[2], match$14=type_format_gen(fmt_rest$7,fmtty_rest$7), fmtty$8=match$14[2], fmt$8=match$14[1]; return [0,[8,fconv,_tV_,prec$8,fmt$8],fmtty$8]} throw Type_mismatch; case 9: var fmt_rest$8=fmt[2], pad$6=fmt[1], match$15=type_padding(pad$6,fmtty), _tY_=match$15[2], _tX_=match$15[1]; if(typeof _tY_ !== "number" && 7 === _tY_[0]) {var fmtty_rest$8=_tY_[1], match$16=type_format_gen(fmt_rest$8,fmtty_rest$8), fmtty$9=match$16[2], fmt$9=match$16[1]; return [0,[9,_tX_,fmt$9],fmtty$9]} throw Type_mismatch; case 10: var fmt_rest$9=fmt[1], match$17=type_format_gen(fmt_rest$9,fmtty), fmtty$10=match$17[2], fmt$10=match$17[1]; return [0,[10,fmt$10],fmtty$10]; case 11: var fmt_rest$10=fmt[2], str=fmt[1], match$18=type_format_gen(fmt_rest$10,fmtty), fmtty$11=match$18[2], fmt$11=match$18[1]; return [0,[11,str,fmt$11],fmtty$11]; case 12: var fmt_rest$11=fmt[2], chr=fmt[1], match$19=type_format_gen(fmt_rest$11,fmtty), fmtty$12=match$19[2], fmt$12=match$19[1]; return [0,[12,chr,fmt$12],fmtty$12]; case 13: if(typeof fmtty !== "number" && 8 === fmtty[0]) {var fmtty_rest$9=fmtty[2], sub_fmtty=fmtty[1], fmt_rest$12=fmt[3], sub_fmtty$0=fmt[2], pad_opt=fmt[1]; if(caml_notequal([0,sub_fmtty$0],[0,sub_fmtty])) throw Type_mismatch; var match$20=type_format_gen(fmt_rest$12,fmtty_rest$9), fmtty$13=match$20[2], fmt$13=match$20[1]; return [0,[13,pad_opt,sub_fmtty,fmt$13],fmtty$13]} break; case 14: if(typeof fmtty !== "number" && 9 === fmtty[0]) {var fmtty_rest$10=fmtty[3], sub_fmtty1=fmtty[1], fmt_rest$13=fmt[3], sub_fmtty$1=fmt[2], pad_opt$0=fmt[1], _tZ_=[0,erase_rel(sub_fmtty1)]; if(caml_notequal([0,erase_rel(sub_fmtty$1)],_tZ_)) throw Type_mismatch; var match$21=type_format_gen(fmt_rest$13,erase_rel(fmtty_rest$10)), fmtty$14=match$21[2], fmt$14=match$21[1]; return [0,[14,pad_opt$0,sub_fmtty1,fmt$14],fmtty$14]} break; case 15: if(typeof fmtty !== "number" && 10 === fmtty[0]) {var fmtty_rest$11=fmtty[1], fmt_rest$14=fmt[1], match$22=type_format_gen(fmt_rest$14,fmtty_rest$11), fmtty$15=match$22[2], fmt$15=match$22[1]; return [0,[15,fmt$15],fmtty$15]} break; case 16: if(typeof fmtty !== "number" && 11 === fmtty[0]) {var fmtty_rest$12=fmtty[1], fmt_rest$15=fmt[1], match$23=type_format_gen(fmt_rest$15,fmtty_rest$12), fmtty$16=match$23[2], fmt$16=match$23[1]; return [0,[16,fmt$16],fmtty$16]} break; case 17: var fmt_rest$16=fmt[2], formatting_lit=fmt[1], match$24=type_format_gen(fmt_rest$16,fmtty), fmtty$17=match$24[2], fmt$17=match$24[1]; return [0,[17,formatting_lit,fmt$17],fmtty$17]; case 18: var fmt_rest$17=fmt[2],formatting_gen=fmt[1]; if(0 === formatting_gen[0]) {var match$28=formatting_gen[1], str$0=match$28[2], fmt1=match$28[1], match$29=type_format_gen(fmt1,fmtty), fmtty2=match$29[2], fmt2=match$29[1], match$30=type_format_gen(fmt_rest$17,fmtty2), fmtty3=match$30[2], fmt3=match$30[1]; return [0,[18,[0,[0,fmt2,str$0]],fmt3],fmtty3]} var match$31=formatting_gen[1], str$1=match$31[2], fmt1$0=match$31[1], match$32=type_format_gen(fmt1$0,fmtty), fmtty2$0=match$32[2], fmt2$0=match$32[1], match$33=type_format_gen(fmt_rest$17,fmtty2$0), fmtty3$0=match$33[2], fmt3$0=match$33[1]; return [0,[18,[1,[0,fmt2$0,str$1]],fmt3$0],fmtty3$0]; case 19: if(typeof fmtty !== "number" && 13 === fmtty[0]) {var fmtty_rest$13=fmtty[1], fmt_rest$18=fmt[1], match$25=type_format_gen(fmt_rest$18,fmtty_rest$13), fmtty$18=match$25[2], fmt$18=match$25[1]; return [0,[19,fmt$18],fmtty$18]} break; case 20: if(typeof fmtty !== "number" && 1 === fmtty[0]) {var fmtty_rest$14=fmtty[1], fmt_rest$19=fmt[3], char_set=fmt[2], width_opt=fmt[1], match$26=type_format_gen(fmt_rest$19,fmtty_rest$14), fmtty$19=match$26[2], fmt$19=match$26[1]; return [0,[20,width_opt,char_set,fmt$19],fmtty$19]} break; case 21: if(typeof fmtty !== "number" && 2 === fmtty[0]) {var fmtty_rest$15=fmtty[1], fmt_rest$20=fmt[2], counter=fmt[1], match$27=type_format_gen(fmt_rest$20,fmtty_rest$15), fmtty$20=match$27[2], fmt$20=match$27[1]; return [0,[21,counter,fmt$20],fmtty$20]} break; case 23: var rest=fmt[2],ign=fmt[1]; if(typeof ign === "number") switch(ign) {case 0:return type_ignored_param_one(ign,rest,fmtty); case 1:return type_ignored_param_one(ign,rest,fmtty); case 2: if(typeof fmtty !== "number" && 14 === fmtty[0]) {var fmtty_rest$16=fmtty[1], match$34=type_format_gen(rest,fmtty_rest$16), fmtty$21=match$34[2], fmt$21=match$34[1]; return [0,[23,2,fmt$21],fmtty$21]} throw Type_mismatch; default:return type_ignored_param_one(ign,rest,fmtty)} else switch(ign[0]) {case 0:return type_ignored_param_one(ign,rest,fmtty); case 1:return type_ignored_param_one(ign,rest,fmtty); case 2:return type_ignored_param_one(ign,rest,fmtty); case 3:return type_ignored_param_one(ign,rest,fmtty); case 4:return type_ignored_param_one(ign,rest,fmtty); case 5:return type_ignored_param_one(ign,rest,fmtty); case 6:return type_ignored_param_one(ign,rest,fmtty); case 7:return type_ignored_param_one(ign,rest,fmtty); case 8: var sub_fmtty$2=ign[2],pad_opt$1=ign[1]; return type_ignored_param_one ([8,pad_opt$1,sub_fmtty$2],rest,fmtty); case 9: var sub_fmtty$3=ign[2], pad_opt$2=ign[1], _t0_=type_ignored_format_substituti(sub_fmtty$3,rest,fmtty), match$35=_t0_[2], fmtty$22=match$35[2], fmt$22=match$35[1], sub_fmtty$4=_t0_[1]; return [0,[23,[9,pad_opt$2,sub_fmtty$4],fmt$22],fmtty$22]; case 10:return type_ignored_param_one(ign,rest,fmtty); default:return type_ignored_param_one(ign,rest,fmtty)} } throw Type_mismatch} function type_ignored_param_one(ign,fmt,fmtty) {var match=type_format_gen(fmt,fmtty),fmtty$0=match[2],fmt$0=match[1]; return [0,[23,ign,fmt$0],fmtty$0]} function type_format(fmt,fmtty) {var _tI_=type_format_gen(fmt,fmtty); if(typeof _tI_[2] === "number"){var fmt$0=_tI_[1];return fmt$0} throw Type_mismatch} function recast(fmt,fmtty){return type_format(fmt,erase_rel(symm(fmtty)))} function fix_padding(padty,width,str) {var len=caml_ml_string_length(str), padty$0=0 <= width?padty:0, width$0=abs(width); if(width$0 <= len)return str; var _tH_=2 === padty$0?48:32,res=make$0(width$0,_tH_); switch(padty$0) {case 0:blit$0(str,0,res,0,len);break; case 1:blit$0(str,0,res,width$0 - len | 0,len);break; default: var switch$0=0; if(0 < len) {var switch$1=0; if (43 !== caml_string_get(str,0) && 45 !== caml_string_get(str,0) && 32 !== caml_string_get(str,0)) {switch$0 = 1;switch$1 = 1} if(! switch$1) {caml_bytes_set(res,0,caml_string_get(str,0)); blit$0(str,1,res,(width$0 - len | 0) + 1 | 0,len - 1 | 0)}} else switch$0 = 1; if(switch$0) {var switch$2=0; if(1 < len && 48 === caml_string_get(str,0)) {var switch$3=0; if (120 !== caml_string_get(str,1) && 88 !== caml_string_get(str,1)) {switch$2 = 1;switch$3 = 1} if(! switch$3) {caml_bytes_set(res,1,caml_string_get(str,1)); blit$0(str,2,res,(width$0 - len | 0) + 2 | 0,len - 2 | 0)}} else switch$2 = 1; if(switch$2)blit$0(str,0,res,width$0 - len | 0,len)}} return caml_string_of_bytes(res)} function fix_int_precision(prec,str) {var prec$0=abs(prec), len=caml_ml_string_length(str), c=caml_string_get(str,0), switch$0=0; if(58 <= c) {if(71 <= c) {if(! (5 < c - 97 >>> 0))switch$0 = 1} else if(65 <= c)switch$0 = 1} else {var switch$1=0; if(32 !== c) if(43 <= c) switch(c - 43 | 0) {case 5: if(len < (prec$0 + 2 | 0) && 1 < len) {var switch$2=0; if (120 === caml_string_get(str,1) || 88 === caml_string_get(str,1)) switch$2 = 1; if(switch$2) {var res$1=make$0(prec$0 + 2 | 0,48); caml_bytes_set(res$1,1,caml_string_get(str,1)); blit$0(str,2,res$1,(prec$0 - len | 0) + 4 | 0,len - 2 | 0); return caml_string_of_bytes(res$1)}} switch$0 = 1; switch$1 = 1; break; case 0: case 2:break; case 1: case 3: case 4:switch$1 = 1;break; default:switch$0 = 1;switch$1 = 1} else switch$1 = 1; if(! switch$1 && len < (prec$0 + 1 | 0)) {var res$0=make$0(prec$0 + 1 | 0,48); caml_bytes_set(res$0,0,c); blit$0(str,1,res$0,(prec$0 - len | 0) + 2 | 0,len - 1 | 0); return caml_string_of_bytes(res$0)}} if(switch$0 && len < prec$0) {var res=make$0(prec$0,48); blit$0(str,0,res,prec$0 - len | 0,len); return caml_string_of_bytes(res)} return str} function string_to_caml_string(str) {var str$0=escaped$1(str), l=caml_ml_string_length(str$0), res=make$0(l + 2 | 0,34); caml_blit_string(str$0,0,res,1,l); return caml_string_of_bytes(res)} function format_of_fconv(fconv,prec) {var prec$0=abs(prec), symb=char_of_fconv(_ax_,fconv), buf=buffer_create(16); buffer_add_char(buf,37); bprint_fconv_flag(buf,fconv); buffer_add_char(buf,46); buffer_add_string(buf,caml_string_of_jsbytes("" + prec$0)); buffer_add_char(buf,symb); return buffer_contents(buf)} function transform_int_alt(iconv,s) {if(13 <= iconv) {var n=[0,0],_tC_=caml_ml_string_length(s) - 1 | 0,_tB_=0; if(! (_tC_ < 0)) {var i$0=_tB_; for(;;) {var match=caml_string_unsafe_get(s,i$0); if(! (9 < match - 48 >>> 0))n[1]++; var _tG_=i$0 + 1 | 0; if(_tC_ !== i$0){var i$0=_tG_;continue} break}} var digits=n[1], buf= caml_create_bytes (caml_ml_string_length(s) + ((digits - 1 | 0) / 3 | 0) | 0), pos=[0,0], put=function(c){caml_bytes_set(buf,pos[1],c);pos[1]++;return 0}, left=[0,((digits - 1 | 0) % 3 | 0) + 1 | 0], _tE_=caml_ml_string_length(s) - 1 | 0, _tD_=0; if(! (_tE_ < 0)) {var i=_tD_; for(;;) {var c=caml_string_unsafe_get(s,i); if(9 < c - 48 >>> 0) put(c); else {if(0 === left[1]){put(95);left[1] = 3}left[1] += -1;put(c)} var _tF_=i + 1 | 0; if(_tE_ !== i){var i=_tF_;continue} break}} return caml_string_of_bytes(buf)} return s} function convert_int(iconv,n) {switch(iconv) {case 1:var _tA_=cst_d$3;break; case 2:var _tA_=cst_d$4;break; case 4:var _tA_=cst_i$1;break; case 5:var _tA_=cst_i$2;break; case 6:var _tA_=cst_x;break; case 7:var _tA_=cst_x$0;break; case 8:var _tA_=cst_X$0;break; case 9:var _tA_=cst_X$1;break; case 10:var _tA_=cst_o;break; case 11:var _tA_=cst_o$0;break; case 0: case 13:var _tA_=cst_d$2;break; case 3: case 14:var _tA_=cst_i$0;break; default:var _tA_=cst_u} return transform_int_alt(iconv,caml_format_int(_tA_,n))} function convert_int32(iconv,n) {switch(iconv) {case 1:var _tz_=cst_ld$0;break; case 2:var _tz_=cst_ld$1;break; case 4:var _tz_=cst_li$1;break; case 5:var _tz_=cst_li$2;break; case 6:var _tz_=cst_lx;break; case 7:var _tz_=cst_lx$0;break; case 8:var _tz_=cst_lX;break; case 9:var _tz_=cst_lX$0;break; case 10:var _tz_=cst_lo;break; case 11:var _tz_=cst_lo$0;break; case 0: case 13:var _tz_=cst_ld;break; case 3: case 14:var _tz_=cst_li$0;break; default:var _tz_=cst_lu} return transform_int_alt(iconv,caml_format_int(_tz_,n))} function convert_nativeint(iconv,n) {switch(iconv) {case 1:var _ty_=cst_nd$0;break; case 2:var _ty_=cst_nd$1;break; case 4:var _ty_=cst_ni$1;break; case 5:var _ty_=cst_ni$2;break; case 6:var _ty_=cst_nx;break; case 7:var _ty_=cst_nx$0;break; case 8:var _ty_=cst_nX;break; case 9:var _ty_=cst_nX$0;break; case 10:var _ty_=cst_no;break; case 11:var _ty_=cst_no$0;break; case 0: case 13:var _ty_=cst_nd;break; case 3: case 14:var _ty_=cst_ni$0;break; default:var _ty_=cst_nu} return transform_int_alt(iconv,caml_format_int(_ty_,n))} function convert_int64(iconv,n) {switch(iconv) {case 1:var _tx_=cst_Ld$0;break; case 2:var _tx_=cst_Ld$1;break; case 4:var _tx_=cst_Li$1;break; case 5:var _tx_=cst_Li$2;break; case 6:var _tx_=cst_Lx;break; case 7:var _tx_=cst_Lx$0;break; case 8:var _tx_=cst_LX;break; case 9:var _tx_=cst_LX$0;break; case 10:var _tx_=cst_Lo;break; case 11:var _tx_=cst_Lo$0;break; case 0: case 13:var _tx_=cst_Ld;break; case 3: case 14:var _tx_=cst_Li$0;break; default:var _tx_=cst_Lu} return transform_int_alt(iconv,caml_int64_format(_tx_,n))} function convert_float(fconv,prec,x) {function hex(param) {switch(fconv[1]) {case 0:var sign=45;break; case 1:var sign=43;break; default:var sign=32} return runtime.caml_hexstring_of_float(x,prec,sign)} function caml_special_val(str) {var match=runtime.caml_classify_float(x); return 3 === match ?x < 0.?cst_neg_infinity:cst_infinity :4 <= match?cst_nan:str} switch(fconv[2]) {case 5: var str=caml_format_float(format_of_fconv(fconv,prec),x), len=caml_ml_string_length(str), i=0; for(;;) {if(i === len) var _tv_=0; else {var match=caml_string_get(str,i),_tu_=match - 46 | 0,switch$0=0; if(23 < _tu_ >>> 0) {if(55 === _tu_)switch$0 = 1} else if(21 < _tu_ - 1 >>> 0)switch$0 = 1; if(! switch$0){var i$0=i + 1 | 0,i=i$0;continue} var _tv_=1} var _tw_=_tv_?str:cat(str,cst$29); return caml_special_val(_tw_)} case 6:return hex(0); case 7:return uppercase_ascii$1(hex(0)); case 8:return caml_special_val(hex(0)); default:return caml_format_float(format_of_fconv(fconv,prec),x)}} function string_of_fmtty(fmtty) {var buf=buffer_create(16); bprint_fmtty(buf,fmtty); return buffer_contents(buf)} function make_printf$0(counter,k,acc,fmt) {var k$0=k,acc$0=acc,fmt$0=fmt; for(;;) if(typeof fmt$0 === "number") return caml_call1(k$0,acc$0); else switch(fmt$0[0]) {case 0: var rest=fmt$0[1]; return function(c) {var new_acc=[5,acc$0,c];return make_printf(k$0,new_acc,rest)}; case 1: var rest$0=fmt$0[1]; return function(c) {var str=escaped(c), l=caml_ml_string_length(str), res=make$0(l + 2 | 0,39); caml_blit_string(str,0,res,1,l); var new_acc=[4,acc$0,caml_string_of_bytes(res)]; return make_printf(k$0,new_acc,rest$0)}; case 2: var rest$1=fmt$0[2],pad=fmt$0[1]; return make_padding(k$0,acc$0,rest$1,pad,function(str){return str}); case 3: var rest$2=fmt$0[2],pad$0=fmt$0[1]; return make_padding(k$0,acc$0,rest$2,pad$0,string_to_caml_string); case 4: var rest$3=fmt$0[4],prec=fmt$0[3],pad$1=fmt$0[2],iconv=fmt$0[1]; return make_int_padding_precision (k$0,acc$0,rest$3,pad$1,prec,convert_int,iconv); case 5: var rest$4=fmt$0[4], prec$0=fmt$0[3], pad$2=fmt$0[2], iconv$0=fmt$0[1]; return make_int_padding_precision (k$0,acc$0,rest$4,pad$2,prec$0,convert_int32,iconv$0); case 6: var rest$5=fmt$0[4], prec$1=fmt$0[3], pad$3=fmt$0[2], iconv$1=fmt$0[1]; return make_int_padding_precision (k$0,acc$0,rest$5,pad$3,prec$1,convert_nativeint,iconv$1); case 7: var rest$6=fmt$0[4], prec$2=fmt$0[3], pad$4=fmt$0[2], iconv$2=fmt$0[1]; return make_int_padding_precision (k$0,acc$0,rest$6,pad$4,prec$2,convert_int64,iconv$2); case 8: var rest$7=fmt$0[4],prec$3=fmt$0[3],pad$5=fmt$0[2],fconv=fmt$0[1]; if(typeof pad$5 === "number") {if(typeof prec$3 === "number") return prec$3 ?function(p,x) {var str=convert_float(fconv,p,x); return make_printf(k$0,[4,acc$0,str],rest$7)} :function(x) {var str= convert_float(fconv,default_float_precision(fconv),x); return make_printf(k$0,[4,acc$0,str],rest$7)}; var p=prec$3[1]; return function(x) {var str=convert_float(fconv,p,x); return make_printf(k$0,[4,acc$0,str],rest$7)}} else {if(0 === pad$5[0]) {var _tr_=pad$5[2],_ts_=pad$5[1]; if(typeof prec$3 === "number") return prec$3 ?function(p,x) {var str=fix_padding(_ts_,_tr_,convert_float(fconv,p,x)); return make_printf(k$0,[4,acc$0,str],rest$7)} :function(x) {var str=convert_float(fconv,default_float_precision(fconv),x), str$0=fix_padding(_ts_,_tr_,str); return make_printf(k$0,[4,acc$0,str$0],rest$7)}; var p$0=prec$3[1]; return function(x) {var str=fix_padding(_ts_,_tr_,convert_float(fconv,p$0,x)); return make_printf(k$0,[4,acc$0,str],rest$7)}} var _tt_=pad$5[1]; if(typeof prec$3 === "number") return prec$3 ?function(w,p,x) {var str=fix_padding(_tt_,w,convert_float(fconv,p,x)); return make_printf(k$0,[4,acc$0,str],rest$7)} :function(w,x) {var str=convert_float(fconv,default_float_precision(fconv),x), str$0=fix_padding(_tt_,w,str); return make_printf(k$0,[4,acc$0,str$0],rest$7)}; var p$1=prec$3[1]; return function(w,x) {var str=fix_padding(_tt_,w,convert_float(fconv,p$1,x)); return make_printf(k$0,[4,acc$0,str],rest$7)}} case 9: var rest$8=fmt$0[2],pad$6=fmt$0[1]; return make_padding(k$0,acc$0,rest$8,pad$6,string_of_bool); case 10: var fmt$1=fmt$0[1],acc$1=[7,acc$0],acc$0=acc$1,fmt$0=fmt$1; continue; case 11: var fmt$2=fmt$0[2], str=fmt$0[1], acc$2=[2,acc$0,str], acc$0=acc$2, fmt$0=fmt$2; continue; case 12: var fmt$3=fmt$0[2], chr=fmt$0[1], acc$3=[3,acc$0,chr], acc$0=acc$3, fmt$0=fmt$3; continue; case 13: var rest$9=fmt$0[3], sub_fmtty=fmt$0[2], ty=string_of_fmtty(sub_fmtty); return function(str){return make_printf(k$0,[4,acc$0,ty],rest$9)}; case 14: var rest$10=fmt$0[3],fmtty=fmt$0[2]; return function(param) {var fmt=param[1]; return make_printf (k$0,acc$0,concat_fmt(recast(fmt,fmtty),rest$10))}; case 15: var rest$11=fmt$0[1]; return function(f,x) {return make_printf (k$0, [6,acc$0,function(o){return caml_call2(f,o,x)}], rest$11)}; case 16: var rest$12=fmt$0[1]; return function(f){return make_printf(k$0,[6,acc$0,f],rest$12)}; case 17: var fmt$4=fmt$0[2], fmting_lit=fmt$0[1], acc$4=[0,acc$0,fmting_lit], acc$0=acc$4, fmt$0=fmt$4; continue; case 18: var _tp_=fmt$0[1]; if(0 === _tp_[0]) {var rest$13=fmt$0[2], match=_tp_[1], fmt$5=match[1], k$3= function(acc,k,rest) {function k$0(kacc) {return make_printf(k,[1,acc,[0,kacc]],rest)} return k$0}, k$1=k$3(acc$0,k$0,rest$13), k$0=k$1, acc$0=0, fmt$0=fmt$5; continue} var rest$14=fmt$0[2], match$0=_tp_[1], fmt$6=match$0[1], k$4= function(acc,k,rest) {function k$0(kacc){return make_printf(k,[1,acc,[1,kacc]],rest)} return k$0}, k$2=k$4(acc$0,k$0,rest$14), k$0=k$2, acc$0=0, fmt$0=fmt$6; continue; case 19:throw [0,Assert_failure,_ay_]; case 20: var rest$15=fmt$0[3],new_acc=[8,acc$0,cst_Printf_bad_conversion]; return function(param){return make_printf(k$0,new_acc,rest$15)}; case 21: var rest$16=fmt$0[2]; return function(n) {var new_acc=[4,acc$0,caml_format_int(cst_u$0,n)]; return make_printf(k$0,new_acc,rest$16)}; case 22: var rest$17=fmt$0[1]; return function(c) {var new_acc=[5,acc$0,c];return make_printf(k$0,new_acc,rest$17)}; case 23: var rest$18=fmt$0[2],ign=fmt$0[1]; if(counter < 50) {var counter$1=counter + 1 | 0; return make_ignored_param$0(counter$1,k$0,acc$0,ign,rest$18)} return caml_trampoline_return (make_ignored_param$0,[0,k$0,acc$0,ign,rest$18]); default: var rest$19=fmt$0[3], f=fmt$0[2], arity=fmt$0[1], _tq_=caml_call1(f,0); if(counter < 50) {var counter$0=counter + 1 | 0; return make_custom$0(counter$0,k$0,acc$0,rest$19,arity,_tq_)} return caml_trampoline_return (make_custom$0,[0,k$0,acc$0,rest$19,arity,_tq_])}} function make_ignored_param$0(counter,k,acc,ign,fmt) {if(typeof ign === "number") switch(ign) {case 0: if(counter < 50) {var counter$0=counter + 1 | 0; return make_invalid_arg(counter$0,k,acc,fmt)} return caml_trampoline_return(make_invalid_arg,[0,k,acc,fmt]); case 1: if(counter < 50) {var counter$1=counter + 1 | 0; return make_invalid_arg(counter$1,k,acc,fmt)} return caml_trampoline_return(make_invalid_arg,[0,k,acc,fmt]); case 2:throw [0,Assert_failure,_az_]; default: if(counter < 50) {var counter$2=counter + 1 | 0; return make_invalid_arg(counter$2,k,acc,fmt)} return caml_trampoline_return(make_invalid_arg,[0,k,acc,fmt])} else switch(ign[0]) {case 0: if(counter < 50) {var counter$3=counter + 1 | 0; return make_invalid_arg(counter$3,k,acc,fmt)} return caml_trampoline_return(make_invalid_arg,[0,k,acc,fmt]); case 1: if(counter < 50) {var counter$4=counter + 1 | 0; return make_invalid_arg(counter$4,k,acc,fmt)} return caml_trampoline_return(make_invalid_arg,[0,k,acc,fmt]); case 2: if(counter < 50) {var counter$5=counter + 1 | 0; return make_invalid_arg(counter$5,k,acc,fmt)} return caml_trampoline_return(make_invalid_arg,[0,k,acc,fmt]); case 3: if(counter < 50) {var counter$6=counter + 1 | 0; return make_invalid_arg(counter$6,k,acc,fmt)} return caml_trampoline_return(make_invalid_arg,[0,k,acc,fmt]); case 4: if(counter < 50) {var counter$7=counter + 1 | 0; return make_invalid_arg(counter$7,k,acc,fmt)} return caml_trampoline_return(make_invalid_arg,[0,k,acc,fmt]); case 5: if(counter < 50) {var counter$8=counter + 1 | 0; return make_invalid_arg(counter$8,k,acc,fmt)} return caml_trampoline_return(make_invalid_arg,[0,k,acc,fmt]); case 6: if(counter < 50) {var counter$9=counter + 1 | 0; return make_invalid_arg(counter$9,k,acc,fmt)} return caml_trampoline_return(make_invalid_arg,[0,k,acc,fmt]); case 7: if(counter < 50) {var counter$10=counter + 1 | 0; return make_invalid_arg(counter$10,k,acc,fmt)} return caml_trampoline_return(make_invalid_arg,[0,k,acc,fmt]); case 8: if(counter < 50) {var counter$11=counter + 1 | 0; return make_invalid_arg(counter$11,k,acc,fmt)} return caml_trampoline_return(make_invalid_arg,[0,k,acc,fmt]); case 9: var fmtty=ign[2]; if(counter < 50) {var counter$14=counter + 1 | 0; return make_from_fmtty$0(counter$14,k,acc,fmtty,fmt)} return caml_trampoline_return(make_from_fmtty$0,[0,k,acc,fmtty,fmt]); case 10: if(counter < 50) {var counter$12=counter + 1 | 0; return make_invalid_arg(counter$12,k,acc,fmt)} return caml_trampoline_return(make_invalid_arg,[0,k,acc,fmt]); default: if(counter < 50) {var counter$13=counter + 1 | 0; return make_invalid_arg(counter$13,k,acc,fmt)} return caml_trampoline_return(make_invalid_arg,[0,k,acc,fmt])}} function make_from_fmtty$0(counter,k,acc,fmtty,fmt) {if(typeof fmtty === "number") {if(counter < 50) {var counter$0=counter + 1 | 0; return make_invalid_arg(counter$0,k,acc,fmt)} return caml_trampoline_return(make_invalid_arg,[0,k,acc,fmt])} else switch(fmtty[0]) {case 0: var rest=fmtty[1]; return function(param){return make_from_fmtty(k,acc,rest,fmt)}; case 1: var rest$0=fmtty[1]; return function(param){return make_from_fmtty(k,acc,rest$0,fmt)}; case 2: var rest$1=fmtty[1]; return function(param){return make_from_fmtty(k,acc,rest$1,fmt)}; case 3: var rest$2=fmtty[1]; return function(param){return make_from_fmtty(k,acc,rest$2,fmt)}; case 4: var rest$3=fmtty[1]; return function(param){return make_from_fmtty(k,acc,rest$3,fmt)}; case 5: var rest$4=fmtty[1]; return function(param){return make_from_fmtty(k,acc,rest$4,fmt)}; case 6: var rest$5=fmtty[1]; return function(param){return make_from_fmtty(k,acc,rest$5,fmt)}; case 7: var rest$6=fmtty[1]; return function(param){return make_from_fmtty(k,acc,rest$6,fmt)}; case 8: var rest$7=fmtty[2]; return function(param){return make_from_fmtty(k,acc,rest$7,fmt)}; case 9: var rest$8=fmtty[3], ty2=fmtty[2], ty1=fmtty[1], ty=trans(symm(ty1),ty2); return function(param) {return make_from_fmtty(k,acc,concat_fmtty(ty,rest$8),fmt)}; case 10: var rest$9=fmtty[1]; return function(param,_to_) {return make_from_fmtty(k,acc,rest$9,fmt)}; case 11: var rest$10=fmtty[1]; return function(param){return make_from_fmtty(k,acc,rest$10,fmt)}; case 12: var rest$11=fmtty[1]; return function(param){return make_from_fmtty(k,acc,rest$11,fmt)}; case 13:throw [0,Assert_failure,_aA_]; default:throw [0,Assert_failure,_aB_]}} function make_invalid_arg(counter,k,acc,fmt) {var _tn_=[8,acc,cst_Printf_bad_conversion$0]; if(counter < 50) {var counter$0=counter + 1 | 0; return make_printf$0(counter$0,k,_tn_,fmt)} return caml_trampoline_return(make_printf$0,[0,k,_tn_,fmt])} function make_custom$0(counter,k,acc,rest,arity,f) {if(arity) {var arity$0=arity[1]; return function(x) {return make_custom(k,acc,rest,arity$0,caml_call1(f,x))}} var _tm_=[4,acc,f]; if(counter < 50) {var counter$0=counter + 1 | 0; return make_printf$0(counter$0,k,_tm_,rest)} return caml_trampoline_return(make_printf$0,[0,k,_tm_,rest])} function make_printf(k,acc,fmt) {return caml_trampoline(make_printf$0(0,k,acc,fmt))} function make_ignored_param(k,acc,ign,fmt) {return caml_trampoline(make_ignored_param$0(0,k,acc,ign,fmt))} function make_from_fmtty(k,acc,fmtty,fmt) {return caml_trampoline(make_from_fmtty$0(0,k,acc,fmtty,fmt))} function make_custom(k,acc,rest,arity,f) {return caml_trampoline(make_custom$0(0,k,acc,rest,arity,f))} function make_padding(k,acc,fmt,pad,trans) {if(typeof pad === "number") return function(x) {var new_acc=[4,acc,caml_call1(trans,x)]; return make_printf(k,new_acc,fmt)}; else {if(0 === pad[0]) {var width=pad[2],padty=pad[1]; return function(x) {var new_acc=[4,acc,fix_padding(padty,width,caml_call1(trans,x))]; return make_printf(k,new_acc,fmt)}} var padty$0=pad[1]; return function(w,x) {var new_acc=[4,acc,fix_padding(padty$0,w,caml_call1(trans,x))]; return make_printf(k,new_acc,fmt)}}} function make_int_padding_precision(k,acc,fmt,pad,prec,trans,iconv) {if(typeof pad === "number") {if(typeof prec === "number") return prec ?function(p,x) {var str=fix_int_precision(p,caml_call2(trans,iconv,x)); return make_printf(k,[4,acc,str],fmt)} :function(x) {var str=caml_call2(trans,iconv,x); return make_printf(k,[4,acc,str],fmt)}; var p=prec[1]; return function(x) {var str=fix_int_precision(p,caml_call2(trans,iconv,x)); return make_printf(k,[4,acc,str],fmt)}} else {if(0 === pad[0]) {var _tj_=pad[2],_tk_=pad[1]; if(typeof prec === "number") return prec ?function(p,x) {var str= fix_padding (_tk_,_tj_,fix_int_precision(p,caml_call2(trans,iconv,x))); return make_printf(k,[4,acc,str],fmt)} :function(x) {var str=fix_padding(_tk_,_tj_,caml_call2(trans,iconv,x)); return make_printf(k,[4,acc,str],fmt)}; var p$0=prec[1]; return function(x) {var str= fix_padding (_tk_,_tj_,fix_int_precision(p$0,caml_call2(trans,iconv,x))); return make_printf(k,[4,acc,str],fmt)}} var _tl_=pad[1]; if(typeof prec === "number") return prec ?function(w,p,x) {var str= fix_padding (_tl_,w,fix_int_precision(p,caml_call2(trans,iconv,x))); return make_printf(k,[4,acc,str],fmt)} :function(w,x) {var str=fix_padding(_tl_,w,caml_call2(trans,iconv,x)); return make_printf(k,[4,acc,str],fmt)}; var p$1=prec[1]; return function(w,x) {var str= fix_padding (_tl_,w,fix_int_precision(p$1,caml_call2(trans,iconv,x))); return make_printf(k,[4,acc,str],fmt)}}} function make_iprintf$0(counter,k,o,fmt) {var k$0=k,fmt$0=fmt; for(;;) if(typeof fmt$0 === "number") return caml_call1(k$0,o); else switch(fmt$0[0]) {case 0: var rest=fmt$0[1],_sA_=make_iprintf(k$0,o,rest); return function(_ti_){return _sA_}; case 1: var rest$0=fmt$0[1],_sB_=make_iprintf(k$0,o,rest$0); return function(_th_){return _sB_}; case 2: var _sC_=fmt$0[1]; if(typeof _sC_ === "number") {var rest$1=fmt$0[2],_sD_=make_iprintf(k$0,o,rest$1); return function(_td_){return _sD_}} else {if(0 === _sC_[0]) {var rest$2=fmt$0[2],_sE_=make_iprintf(k$0,o,rest$2); return function(_tg_){return _sE_}} var rest$3=fmt$0[2], _sF_=make_iprintf(k$0,o,rest$3), _sG_=function(_tf_){return _sF_}; return function(_te_){return _sG_}} case 3: var _sH_=fmt$0[1]; if(typeof _sH_ === "number") {var rest$4=fmt$0[2],_sI_=make_iprintf(k$0,o,rest$4); return function(_s$_){return _sI_}} else {if(0 === _sH_[0]) {var rest$5=fmt$0[2],_sJ_=make_iprintf(k$0,o,rest$5); return function(_tc_){return _sJ_}} var rest$6=fmt$0[2], _sK_=make_iprintf(k$0,o,rest$6), _sL_=function(_tb_){return _sK_}; return function(_ta_){return _sL_}} case 4: var rest$7=fmt$0[4],prec=fmt$0[3],pad=fmt$0[2]; return fn_of_padding_precision(k$0,o,rest$7,pad,prec); case 5: var rest$8=fmt$0[4],prec$0=fmt$0[3],pad$0=fmt$0[2]; return fn_of_padding_precision(k$0,o,rest$8,pad$0,prec$0); case 6: var rest$9=fmt$0[4],prec$1=fmt$0[3],pad$1=fmt$0[2]; return fn_of_padding_precision(k$0,o,rest$9,pad$1,prec$1); case 7: var rest$10=fmt$0[4],prec$2=fmt$0[3],pad$2=fmt$0[2]; return fn_of_padding_precision(k$0,o,rest$10,pad$2,prec$2); case 8: var rest$11=fmt$0[4],prec$3=fmt$0[3],pad$3=fmt$0[2]; return fn_of_padding_precision(k$0,o,rest$11,pad$3,prec$3); case 9: var _sM_=fmt$0[1]; if(typeof _sM_ === "number") {var rest$12=fmt$0[2],_sN_=make_iprintf(k$0,o,rest$12); return function(_s7_){return _sN_}} else {if(0 === _sM_[0]) {var rest$13=fmt$0[2],_sO_=make_iprintf(k$0,o,rest$13); return function(_s__){return _sO_}} var rest$14=fmt$0[2], _sP_=make_iprintf(k$0,o,rest$14), _sQ_=function(_s9_){return _sP_}; return function(_s8_){return _sQ_}} case 10:var fmt$1=fmt$0[1],fmt$0=fmt$1;continue; case 11:var fmt$2=fmt$0[2],fmt$0=fmt$2;continue; case 12:var fmt$3=fmt$0[2],fmt$0=fmt$3;continue; case 13: var rest$15=fmt$0[3],_sR_=make_iprintf(k$0,o,rest$15); return function(_s6_){return _sR_}; case 14: var rest$16=fmt$0[3],fmtty=fmt$0[2]; return function(param) {var fmt=param[1]; return make_iprintf(k$0,o,concat_fmt(recast(fmt,fmtty),rest$16))}; case 15: var rest$17=fmt$0[1], _sS_=make_iprintf(k$0,o,rest$17), _sT_=function(_s5_){return _sS_}; return function(_s4_){return _sT_}; case 16: var rest$18=fmt$0[1],_sU_=make_iprintf(k$0,o,rest$18); return function(_s3_){return _sU_}; case 17:var fmt$4=fmt$0[2],fmt$0=fmt$4;continue; case 18: var _sV_=fmt$0[1]; if(0 === _sV_[0]) {var rest$19=fmt$0[2], match=_sV_[1], fmt$5=match[1], k$3= function(k,rest) {function k$0(koc){return make_iprintf(k,koc,rest)}return k$0}, k$1=k$3(k$0,rest$19), k$0=k$1, fmt$0=fmt$5; continue} var rest$20=fmt$0[2], match$0=_sV_[1], fmt$6=match$0[1], k$4= function(k,rest) {function k$0(koc){return make_iprintf(k,koc,rest)}return k$0}, k$2=k$4(k$0,rest$20), k$0=k$2, fmt$0=fmt$6; continue; case 19:throw [0,Assert_failure,_aC_]; case 20: var rest$21=fmt$0[3],_sW_=make_iprintf(k$0,o,rest$21); return function(_s2_){return _sW_}; case 21: var rest$22=fmt$0[2],_sX_=make_iprintf(k$0,o,rest$22); return function(_s1_){return _sX_}; case 22: var rest$23=fmt$0[1],_sY_=make_iprintf(k$0,o,rest$23); return function(_s0_){return _sY_}; case 23: var rest$24=fmt$0[2],ign=fmt$0[1],_sZ_=0; return make_ignored_param (function(param){return caml_call1(k$0,o)},_sZ_,ign,rest$24); default: var rest$25=fmt$0[3],arity=fmt$0[1]; if(counter < 50) {var counter$0=counter + 1 | 0; return fn_of_custom_arity$0(counter$0,k$0,o,rest$25,arity)} return caml_trampoline_return (fn_of_custom_arity$0,[0,k$0,o,rest$25,arity])}} function fn_of_custom_arity$0(counter,k,o,fmt,param) {if(param) {var arity=param[1],_sy_=fn_of_custom_arity(k,o,fmt,arity); return function(_sz_){return _sy_}} if(counter < 50) {var counter$0=counter + 1 | 0; return make_iprintf$0(counter$0,k,o,fmt)} return caml_trampoline_return(make_iprintf$0,[0,k,o,fmt])} function make_iprintf(k,o,fmt) {return caml_trampoline(make_iprintf$0(0,k,o,fmt))} function fn_of_custom_arity(k,o,fmt,param) {return caml_trampoline(fn_of_custom_arity$0(0,k,o,fmt,param))} function fn_of_padding_precision(k,o,fmt,pad,prec) {if(typeof pad === "number") {if(typeof prec === "number") {if(prec) {var _r6_=make_iprintf(k,o,fmt),_r7_=function(_sm_){return _r6_}; return function(_sl_){return _r7_}} var _r8_=make_iprintf(k,o,fmt); return function(_sk_){return _r8_}} var _r9_=make_iprintf(k,o,fmt); return function(_sj_){return _r9_}} else {if(0 === pad[0]) {if(typeof prec === "number") {if(prec) {var _r__=make_iprintf(k,o,fmt),_r$_=function(_sx_){return _r__}; return function(_sw_){return _r$_}} var _sa_=make_iprintf(k,o,fmt); return function(_sv_){return _sa_}} var _sb_=make_iprintf(k,o,fmt); return function(_su_){return _sb_}} if(typeof prec === "number") {if(prec) {var _sc_=make_iprintf(k,o,fmt), _sd_=function(_st_){return _sc_}, _se_=function(_ss_){return _sd_}; return function(_sr_){return _se_}} var _sf_=make_iprintf(k,o,fmt),_sg_=function(_sq_){return _sf_}; return function(_sp_){return _sg_}} var _sh_=make_iprintf(k,o,fmt),_si_=function(_so_){return _sh_}; return function(_sn_){return _si_}}} function output_acc(o,acc) {var acc$0=acc; for(;;) if(typeof acc$0 === "number") return 0; else switch(acc$0[0]) {case 0: var fmting_lit=acc$0[2], p=acc$0[1], s=string_of_formatting_lit(fmting_lit); output_acc(o,p); return output_string(o,s); case 1: var _r4_=acc$0[2],_r5_=acc$0[1]; if(0 === _r4_[0]) {var acc$1=_r4_[1]; output_acc(o,_r5_); output_string(o,cst$30); var acc$0=acc$1; continue} var acc$2=_r4_[1]; output_acc(o,_r5_); output_string(o,cst$31); var acc$0=acc$2; continue; case 6: var f=acc$0[2],p$2=acc$0[1]; output_acc(o,p$2); return caml_call1(f,o); case 7:var p$3=acc$0[1];output_acc(o,p$3);return caml_ml_flush(o); case 8: var msg=acc$0[2],p$4=acc$0[1]; output_acc(o,p$4); return invalid_arg(msg); case 2: case 4: var s$0=acc$0[2],p$0=acc$0[1]; output_acc(o,p$0); return output_string(o,s$0); default: var c=acc$0[2],p$1=acc$0[1]; output_acc(o,p$1); return caml_ml_output_char(o,c)}} function bufput_acc(b,acc) {var acc$0=acc; for(;;) if(typeof acc$0 === "number") return 0; else switch(acc$0[0]) {case 0: var fmting_lit=acc$0[2], p=acc$0[1], s=string_of_formatting_lit(fmting_lit); bufput_acc(b,p); return add_string(b,s); case 1: var _r2_=acc$0[2],_r3_=acc$0[1]; if(0 === _r2_[0]) {var acc$1=_r2_[1]; bufput_acc(b,_r3_); add_string(b,cst$32); var acc$0=acc$1; continue} var acc$2=_r2_[1]; bufput_acc(b,_r3_); add_string(b,cst$33); var acc$0=acc$2; continue; case 6: var f=acc$0[2],p$2=acc$0[1]; bufput_acc(b,p$2); return caml_call1(f,b); case 7:var acc$3=acc$0[1],acc$0=acc$3;continue; case 8: var msg=acc$0[2],p$3=acc$0[1]; bufput_acc(b,p$3); return invalid_arg(msg); case 2: case 4: var s$0=acc$0[2],p$0=acc$0[1]; bufput_acc(b,p$0); return add_string(b,s$0); default: var c=acc$0[2],p$1=acc$0[1];bufput_acc(b,p$1);return add_char(b,c)}} function strput_acc(b,acc) {var acc$0=acc; for(;;) if(typeof acc$0 === "number") return 0; else switch(acc$0[0]) {case 0: var fmting_lit=acc$0[2], p=acc$0[1], s=string_of_formatting_lit(fmting_lit); strput_acc(b,p); return add_string(b,s); case 1: var _r0_=acc$0[2],_r1_=acc$0[1]; if(0 === _r0_[0]) {var acc$1=_r0_[1]; strput_acc(b,_r1_); add_string(b,cst$34); var acc$0=acc$1; continue} var acc$2=_r0_[1]; strput_acc(b,_r1_); add_string(b,cst$35); var acc$0=acc$2; continue; case 6: var f=acc$0[2],p$2=acc$0[1]; strput_acc(b,p$2); return add_string(b,caml_call1(f,0)); case 7:var acc$3=acc$0[1],acc$0=acc$3;continue; case 8: var msg=acc$0[2],p$3=acc$0[1]; strput_acc(b,p$3); return invalid_arg(msg); case 2: case 4: var s$0=acc$0[2],p$0=acc$0[1]; strput_acc(b,p$0); return add_string(b,s$0); default: var c=acc$0[2],p$1=acc$0[1];strput_acc(b,p$1);return add_char(b,c)}} function failwith_message(param) {var fmt=param[1],buf=create$2(256); function k(acc){strput_acc(buf,acc);return failwith(contents(buf))} return make_printf(k,0,fmt)} function open_box_of_string(str) {if(caml_string_equal(str,cst$36))return _aD_; var len=caml_ml_string_length(str); function invalid_box(param) {return caml_call1(failwith_message(_aE_),str)} function parse_spaces(i) {var i$0=i; for(;;) {if(i$0 === len)return i$0; var match=caml_string_get(str,i$0); if(9 !== match && 32 !== match)return i$0; var i$1=i$0 + 1 | 0,i$0=i$1; continue}} function parse_lword(i,j) {var j$0=j; for(;;) {if(j$0 === len)return j$0; var match=caml_string_get(str,j$0); if(25 < match - 97 >>> 0)return j$0; var j$1=j$0 + 1 | 0,j$0=j$1; continue}} function parse_int(i,j) {var j$0=j; for(;;) {if(j$0 === len)return j$0; var match=caml_string_get(str,j$0),switch$0=0; if(48 <= match) {if(! (58 <= match))switch$0 = 1} else if(45 === match)switch$0 = 1; if(switch$0){var j$1=j$0 + 1 | 0,j$0=j$1;continue} return j$0}} var wstart=parse_spaces(0), wend=parse_lword(wstart,wstart), box_name=sub$0(str,wstart,wend - wstart | 0), nstart=parse_spaces(wend), nend=parse_int(nstart,nstart); if(nstart === nend) var indent=0; else try {var _rY_=caml_int_of_string(sub$0(str,nstart,nend - nstart | 0)), indent=_rY_} catch(_rZ_) {_rZ_ = caml_wrap_exception(_rZ_); if(_rZ_[1] !== Failure)throw _rZ_; var indent=invalid_box(0)} var exp_end=parse_spaces(nend); if(exp_end !== len)invalid_box(0); var switch$0=0; if (caml_string_notequal(box_name,cst$37) && caml_string_notequal(box_name,cst_b$0)) var box_type= caml_string_notequal(box_name,cst_h) ?caml_string_notequal(box_name,cst_hov) ?caml_string_notequal(box_name,cst_hv) ?caml_string_notequal(box_name,cst_v)?invalid_box(0):1 :2 :3 :0; else switch$0 = 1; if(switch$0)var box_type=4; return [0,indent,box_type]} function make_padding_fmt_ebb(pad,fmt) {if(typeof pad === "number") return [0,0,fmt]; else {if(0 === pad[0]){var w=pad[2],s=pad[1];return [0,[0,s,w],fmt]} var s$0=pad[1]; return [0,[1,s$0],fmt]}} function make_padprec_fmt_ebb(pad,prec,fmt) {if(typeof prec === "number") var match=prec?[0,1,fmt]:[0,0,fmt]; else var p=prec[1],match=[0,[0,p],fmt]; var prec$0=match[1]; if(typeof pad === "number") return [0,0,prec$0,fmt]; else {if(0 === pad[0]){var w=pad[2],s=pad[1];return [0,[0,s,w],prec$0,fmt]} var s$0=pad[1]; return [0,[1,s$0],prec$0,fmt]}} function fmt_ebb_of_string(legacy_behavior,str) {if(legacy_behavior) var flag=legacy_behavior[1],legacy_behavior$0=flag; else var legacy_behavior$0=1; function invalid_format_message(str_ind,msg) {return caml_call3(failwith_message(_aF_),str,str_ind,msg)} function unexpected_end_of_format(end_ind) {return invalid_format_message(end_ind,cst_unexpected_end_of_format)} function invalid_format_without(str_ind,c,s) {return caml_call4(failwith_message(_aG_),str,str_ind,c,s)} function expected_character(str_ind,expected,read) {return caml_call4(failwith_message(_aH_),str,str_ind,expected,read)} function add_literal(lit_start,str_ind,fmt) {var size=str_ind - lit_start | 0; return 0 === size ?[0,fmt] :1 === size ?[0,[12,caml_string_get(str,lit_start),fmt]] :[0,[11,sub$0(str,lit_start,size),fmt]]} function parse_positive(str_ind,end_ind,acc) {var str_ind$0=str_ind,acc$0=acc; for(;;) {if(str_ind$0 === end_ind)unexpected_end_of_format(end_ind); var c=caml_string_get(str,str_ind$0); if(9 < c - 48 >>> 0)return [0,str_ind$0,acc$0]; var acc$1=(acc$0 * 10 | 0) + (c - 48 | 0) | 0; if(max_string_length < acc$1) return caml_call3 (failwith_message(_aY_),str,acc$1,max_string_length); var str_ind$1=str_ind$0 + 1 | 0,str_ind$0=str_ind$1,acc$0=acc$1; continue}} function parse_integer(str_ind,end_ind) {if(str_ind === end_ind)unexpected_end_of_format(end_ind); var match=caml_string_get(str,str_ind); if(48 <= match) {if(! (58 <= match))return parse_positive(str_ind,end_ind,0)} else if(45 === match) {if((str_ind + 1 | 0) === end_ind)unexpected_end_of_format(end_ind); var c=caml_string_get(str,str_ind + 1 | 0); if(9 < c - 48 >>> 0) return expected_character(str_ind + 1 | 0,cst_digit,c); var match$0=parse_positive(str_ind + 1 | 0,end_ind,0), n=match$0[2], next_ind=match$0[1]; return [0,next_ind,- n | 0]} throw [0,Assert_failure,_aZ_]} function parse_spaces(str_ind,end_ind) {var str_ind$0=str_ind; for(;;) {if(str_ind$0 === end_ind)unexpected_end_of_format(end_ind); if(32 === caml_string_get(str,str_ind$0)) {var str_ind$1=str_ind$0 + 1 | 0,str_ind$0=str_ind$1;continue} return str_ind$0}} function incompatible_flag(pct_ind,str_ind,symb,option) {var subfmt=sub$0(str,pct_ind,str_ind - pct_ind | 0); return caml_call5 (failwith_message(_a4_),str,pct_ind,option,symb,subfmt)} function compute_int_conv(pct_ind,str_ind,plus,hash,space,symb) {var plus$0=plus,hash$0=hash,space$0=space; for(;;) {var switch$0=0; if(plus$0) {if(hash$0) switch$0 = 1; else if(! space$0){if(100 === symb)return 1;if(105 === symb)return 4}} else if(hash$0) if(space$0) switch$0 = 1; else {var switcher$0=symb - 88 | 0; if(32 < switcher$0 >>> 0) switch$0 = 1; else switch(switcher$0) {case 0:return 9; case 12:return 13; case 17:return 14; case 23:return 11; case 29:return 15; case 32:return 7; default:switch$0 = 1}} else if(space$0) {if(100 === symb)return 2;if(105 === symb)return 5} else {var switcher$1=symb - 88 | 0; if(! (32 < switcher$1 >>> 0)) switch(switcher$1) {case 0:return 8; case 12:return 0; case 17:return 3; case 23:return 10; case 29:return 12; case 32:return 6 }} if(switch$0) {var switcher=symb - 88 | 0; if(! (32 < switcher >>> 0)) switch(switcher) {case 0:if(legacy_behavior$0)return 9;break; case 23:if(legacy_behavior$0)return 11;break; case 32:if(legacy_behavior$0)return 7;break; case 12: case 17: case 29: if(legacy_behavior$0){var hash$0=0;continue} return incompatible_flag(pct_ind,str_ind,symb,cst$49) }} if(plus$0) {if(space$0) {if(legacy_behavior$0){var space$0=0;continue} return incompatible_flag(pct_ind,str_ind,32,cst$46)} if(legacy_behavior$0){var plus$0=0;continue} return incompatible_flag(pct_ind,str_ind,symb,cst$47)} if(space$0) {if(legacy_behavior$0){var space$0=0;continue} return incompatible_flag(pct_ind,str_ind,symb,cst$48)} throw [0,Assert_failure,_a2_]}} function search_subformat_end(str_ind,end_ind,c) {var str_ind$0=str_ind; for(;;) {if(str_ind$0 === end_ind) caml_call3(failwith_message(_a0_),str,c,end_ind); var match=caml_string_get(str,str_ind$0); if(37 === match) {if((str_ind$0 + 1 | 0) === end_ind) unexpected_end_of_format(end_ind); if(caml_string_get(str,str_ind$0 + 1 | 0) === c)return str_ind$0; var match$0=caml_string_get(str,str_ind$0 + 1 | 0); if(95 <= match$0) {if(123 <= match$0) {if(! (126 <= match$0)) switch(match$0 - 123 | 0) {case 0: var sub_end=search_subformat_end(str_ind$0 + 2 | 0,end_ind,125), str_ind$2=sub_end + 2 | 0, str_ind$0=str_ind$2; continue; case 1:break; default: return expected_character (str_ind$0 + 1 | 0,cst_character,125)}} else if(! (96 <= match$0)) {if((str_ind$0 + 2 | 0) === end_ind) unexpected_end_of_format(end_ind); var match$1=caml_string_get(str,str_ind$0 + 2 | 0); if(40 === match$1) {var sub_end$0=search_subformat_end(str_ind$0 + 3 | 0,end_ind,41), str_ind$3=sub_end$0 + 2 | 0, str_ind$0=str_ind$3; continue} if(123 === match$1) {var sub_end$1= search_subformat_end(str_ind$0 + 3 | 0,end_ind,125), str_ind$4=sub_end$1 + 2 | 0, str_ind$0=str_ind$4; continue} var str_ind$5=str_ind$0 + 3 | 0,str_ind$0=str_ind$5; continue}} else {if(40 === match$0) {var sub_end$2=search_subformat_end(str_ind$0 + 2 | 0,end_ind,41), str_ind$6=sub_end$2 + 2 | 0, str_ind$0=str_ind$6; continue} if(41 === match$0) return expected_character(str_ind$0 + 1 | 0,cst_character$0,41)} var str_ind$1=str_ind$0 + 2 | 0,str_ind$0=str_ind$1; continue} var str_ind$7=str_ind$0 + 1 | 0,str_ind$0=str_ind$7; continue}} function parse_magic_size(str_ind,end_ind) {try {var str_ind_1=parse_spaces(str_ind,end_ind), match$2=caml_string_get(str,str_ind_1), switch$0=0; if(48 <= match$2) {if(! (58 <= match$2))switch$0 = 1} else if(45 === match$2)switch$0 = 1; if(switch$0) {var match$3=parse_integer(str_ind_1,end_ind), size=match$3[2], str_ind_2=match$3[1], str_ind_3=parse_spaces(str_ind_2,end_ind); if(62 !== caml_string_get(str,str_ind_3))throw Not_found; var s=sub$0(str,str_ind - 2 | 0,(str_ind_3 - str_ind | 0) + 3 | 0), _rW_=[0,[0,str_ind_3 + 1 | 0,[1,s,size]]]} else var _rW_=0; var _rV_=_rW_} catch(_rX_) {_rX_ = caml_wrap_exception(_rX_); if(_rX_ !== Not_found && _rX_[1] !== Failure)throw _rX_; var _rV_=0} if(_rV_) {var match=_rV_[1], formatting_lit=match[2], next_ind=match[1], match$0=parse(next_ind,end_ind), fmt_rest=match$0[1]; return [0,[17,formatting_lit,fmt_rest]]} var match$1=parse(str_ind,end_ind),fmt_rest$0=match$1[1]; return [0,[17,_aW_,fmt_rest$0]]} function parse_good_break(str_ind,end_ind) {try {var _rO_=str_ind === end_ind?1:0, _rP_=_rO_ || (60 !== caml_string_get(str,str_ind)?1:0); if(_rP_)throw Not_found; var str_ind_1=parse_spaces(str_ind + 1 | 0,end_ind), match$0=caml_string_get(str,str_ind_1), switch$0=0; if(48 <= match$0) {if(! (58 <= match$0))switch$0 = 1} else if(45 === match$0)switch$0 = 1; if(! switch$0)throw Not_found; var match$1=parse_integer(str_ind_1,end_ind), width=match$1[2], str_ind_2=match$1[1], str_ind_3=parse_spaces(str_ind_2,end_ind), match$2=caml_string_get(str,str_ind_3), switcher=match$2 - 45 | 0, switch$1=0; if(12 < switcher >>> 0) if(17 === switcher) var s=sub$0(str,str_ind - 2 | 0,(str_ind_3 - str_ind | 0) + 3 | 0), _rQ_=[0,s,width,0], _rR_=str_ind_3 + 1 | 0, formatting_lit$0=_rQ_, next_ind=_rR_; else switch$1 = 1; else if(1 < switcher - 1 >>> 0) {var match$3=parse_integer(str_ind_3,end_ind), offset=match$3[2], str_ind_4=match$3[1], str_ind_5=parse_spaces(str_ind_4,end_ind); if(62 !== caml_string_get(str,str_ind_5))throw Not_found; var s$0=sub$0(str,str_ind - 2 | 0,(str_ind_5 - str_ind | 0) + 3 | 0), _rS_=[0,s$0,width,offset], _rT_=str_ind_5 + 1 | 0, formatting_lit$0=_rS_, next_ind=_rT_} else switch$1 = 1; if(switch$1)throw Not_found} catch(_rU_) {_rU_ = caml_wrap_exception(_rU_); if(_rU_ !== Not_found && _rU_[1] !== Failure)throw _rU_; var formatting_lit$0=formatting_lit,next_ind=str_ind} var match=parse(next_ind,end_ind),fmt_rest=match[1]; return [0,[17,formatting_lit$0,fmt_rest]]} function parse_tag(is_open_tag,str_ind,end_ind) {try {if(str_ind === end_ind)throw Not_found; var match$0=caml_string_get(str,str_ind); if(60 === match$0) {var ind=index_from$0(str,str_ind + 1 | 0,62); if(end_ind <= ind)throw Not_found; var sub_str=sub$0(str,str_ind,(ind - str_ind | 0) + 1 | 0), match$1=parse(ind + 1 | 0,end_ind), fmt_rest$0=match$1[1], match$2=parse(str_ind,ind + 1 | 0), sub_fmt=match$2[1], sub_format$0=[0,sub_fmt,sub_str], formatting$0=is_open_tag?[0,sub_format$0]:[1,sub_format$0], _rM_=[0,[18,formatting$0,fmt_rest$0]]; return _rM_} throw Not_found} catch(_rN_) {_rN_ = caml_wrap_exception(_rN_); if(_rN_ === Not_found) {var match=parse(str_ind,end_ind), fmt_rest=match[1], formatting=is_open_tag?[0,sub_format]:[1,sub_format]; return [0,[18,formatting,fmt_rest]]} throw _rN_}} function parse_flags(pct_ind,str_ind,end_ind,ign) {var zero=[0,0],minus=[0,0],plus=[0,0],space=[0,0],hash=[0,0]; function set_flag(str_ind,flag) {var _rJ_=flag[1],_rK_=_rJ_?1 - legacy_behavior$0:_rJ_; if(_rK_) {var _rL_=caml_string_get(str,str_ind); caml_call3(failwith_message(_aI_),str,str_ind,_rL_)} flag[1] = 1; return 0} var str_ind$0=str_ind; for(;;) {if(str_ind$0 === end_ind)unexpected_end_of_format(end_ind); var match=caml_string_get(str,str_ind$0),switcher=match - 32 | 0; if(! (16 < switcher >>> 0)) switch(switcher) {case 0: set_flag(str_ind$0,space); var str_ind$1=str_ind$0 + 1 | 0,str_ind$0=str_ind$1; continue; case 3: set_flag(str_ind$0,hash); var str_ind$2=str_ind$0 + 1 | 0,str_ind$0=str_ind$2; continue; case 11: set_flag(str_ind$0,plus); var str_ind$3=str_ind$0 + 1 | 0,str_ind$0=str_ind$3; continue; case 13: set_flag(str_ind$0,minus); var str_ind$4=str_ind$0 + 1 | 0,str_ind$0=str_ind$4; continue; case 16: set_flag(str_ind$0,zero); var str_ind$5=str_ind$0 + 1 | 0,str_ind$0=str_ind$5; continue } var _rE_=space[1], _rF_=hash[1], _rG_=plus[1], _rH_=minus[1], _rI_=zero[1]; if(str_ind$0 === end_ind)unexpected_end_of_format(end_ind); var padty= _rI_ ?_rH_ ?legacy_behavior$0 ?0 :incompatible_flag(pct_ind,str_ind$0,45,cst_0) :2 :_rH_?0:1, match$0=caml_string_get(str,str_ind$0); if(48 <= match$0) {if(! (58 <= match$0)) {var match$1=parse_positive(str_ind$0,end_ind,0), width=match$1[2], new_ind=match$1[1]; return parse_after_padding (pct_ind, new_ind, end_ind, _rH_, _rG_, _rF_, _rE_, ign, [0,padty,width])}} else if(42 === match$0) return parse_after_padding (pct_ind, str_ind$0 + 1 | 0, end_ind, _rH_, _rG_, _rF_, _rE_, ign, [1,padty]); switch(padty) {case 0: if(1 - legacy_behavior$0) invalid_format_without(str_ind$0 - 1 | 0,45,cst_padding); return parse_after_padding (pct_ind,str_ind$0,end_ind,_rH_,_rG_,_rF_,_rE_,ign,0); case 1: return parse_after_padding (pct_ind,str_ind$0,end_ind,_rH_,_rG_,_rF_,_rE_,ign,0); default: return parse_after_padding (pct_ind,str_ind$0,end_ind,_rH_,_rG_,_rF_,_rE_,ign,_aJ_)}}} function parse_after_padding (pct_ind,str_ind,end_ind,minus,plus,hash,space,ign,pad) {if(str_ind === end_ind)unexpected_end_of_format(end_ind); var symb=caml_string_get(str,str_ind); if(46 === symb) {var str_ind$0=str_ind + 1 | 0; if(str_ind$0 === end_ind)unexpected_end_of_format(end_ind); var parse_literal= function(minus,str_ind) {var match=parse_positive(str_ind,end_ind,0), prec=match[2], new_ind=match[1]; return parse_after_precision (pct_ind, new_ind, end_ind, minus, plus, hash, space, ign, pad, [0,prec])}, symb$0=caml_string_get(str,str_ind$0); if(48 <= symb$0) {if(! (58 <= symb$0))return parse_literal(minus,str_ind$0)} else if(42 <= symb$0) switch(symb$0 - 42 | 0) {case 0: return parse_after_precision (pct_ind, str_ind$0 + 1 | 0, end_ind, minus, plus, hash, space, ign, pad, 1); case 1: case 3: if(legacy_behavior$0) {var _rD_=str_ind$0 + 1 | 0, minus$0=minus || (45 === symb$0?1:0); return parse_literal(minus$0,_rD_)} break } return legacy_behavior$0 ?parse_after_precision (pct_ind, str_ind$0, end_ind, minus, plus, hash, space, ign, pad, _aK_) :invalid_format_without(str_ind$0 - 1 | 0,46,cst_precision)} return parse_conversion (pct_ind, str_ind + 1 | 0, end_ind, plus, hash, space, ign, pad, 0, pad, symb)} function parse_after_precision (pct_ind,str_ind,end_ind,minus,plus,hash,space,ign,pad,prec) {if(str_ind === end_ind)unexpected_end_of_format(end_ind); function parse_conv(padprec) {return parse_conversion (pct_ind, str_ind + 1 | 0, end_ind, plus, hash, space, ign, pad, prec, padprec, caml_string_get(str,str_ind))} if(typeof pad === "number") {if(typeof prec === "number" && ! prec)return parse_conv(0); if(minus) {if(typeof prec === "number")return parse_conv(_aL_); var n=prec[1]; return parse_conv([0,0,n])} if(typeof prec === "number")return parse_conv(_aM_); var n$0=prec[1]; return parse_conv([0,1,n$0])} return parse_conv(pad)} function parse_conversion (pct_ind,str_ind,end_ind,plus,hash,space,ign,pad,prec,padprec,symb) {var plus_used=[0,0], hash_used=[0,0], space_used=[0,0], ign_used=[0,0], pad_used=[0,0], prec_used=[0,0]; function get_plus(param){plus_used[1] = 1;return plus} function get_hash(param){hash_used[1] = 1;return hash} function get_space(param){space_used[1] = 1;return space} function get_ign(param){ign_used[1] = 1;return ign} function get_pad(param){pad_used[1] = 1;return pad} function get_prec(param){prec_used[1] = 1;return prec} function get_padprec(param){pad_used[1] = 1;return padprec} function get_int_pad(param) {var pad=get_pad(0),match=get_prec(0); if(typeof match === "number" && ! match)return pad; if(typeof pad === "number") return 0; else {if(0 === pad[0]) {if(2 <= pad[1]) {var n=pad[2]; return legacy_behavior$0 ?[0,1,n] :incompatible_flag(pct_ind,str_ind,48,cst_precision$0)} return pad} return 2 <= pad[1] ?legacy_behavior$0 ?_aN_ :incompatible_flag(pct_ind,str_ind,48,cst_precision$1) :pad}} function check_no_0(symb,pad) {if(typeof pad === "number") return pad; else {if(0 === pad[0]) {if(2 <= pad[1]) {var width=pad[2]; return legacy_behavior$0 ?[0,1,width] :incompatible_flag(pct_ind,str_ind,symb,cst_0$0)} return pad} return 2 <= pad[1] ?legacy_behavior$0 ?_aO_ :incompatible_flag(pct_ind,str_ind,symb,cst_0$1) :pad}} function opt_of_pad(c,pad) {if(typeof pad === "number") return 0; else {if(0 === pad[0]) switch(pad[1]) {case 0: var width=pad[2]; return legacy_behavior$0 ?[0,width] :incompatible_flag(pct_ind,str_ind,c,cst$38); case 1:var width$0=pad[2];return [0,width$0]; default: var width$1=pad[2]; return legacy_behavior$0 ?[0,width$1] :incompatible_flag(pct_ind,str_ind,c,cst_0$2)} return incompatible_flag(pct_ind,str_ind,c,cst$39)}} function get_pad_opt(c){return opt_of_pad(c,get_pad(0))} function get_padprec_opt(c){return opt_of_pad(c,get_padprec(0))} var switch$0=0; if(124 <= symb) switch$0 = 1; else switch(symb) {case 33: var match$6=parse(str_ind,end_ind), fmt_rest$5=match$6[1], fmt_result=[0,[10,fmt_rest$5]]; break; case 40: var sub_end=search_subformat_end(str_ind,end_ind,41), match$8=parse(sub_end + 2 | 0,end_ind), fmt_rest$7=match$8[1], match$9=parse(str_ind,sub_end), sub_fmt=match$9[1], sub_fmtty=fmtty_of_fmt(sub_fmt); if(get_ign(0)) var ignored$2=[9,get_pad_opt(95),sub_fmtty], _ra_=[0,[23,ignored$2,fmt_rest$7]]; else var _ra_=[0,[14,get_pad_opt(40),sub_fmtty,fmt_rest$7]]; var fmt_result=_ra_; break; case 44:var fmt_result=parse(str_ind,end_ind);break; case 67: var match$12=parse(str_ind,end_ind), fmt_rest$10=match$12[1], _rc_=get_ign(0)?[0,[23,1,fmt_rest$10]]:[0,[1,fmt_rest$10]], fmt_result=_rc_; break; case 78: var match$16=parse(str_ind,end_ind), fmt_rest$14=match$16[1], counter$0=2; if(get_ign(0)) var ignored$6=[11,counter$0],_ri_=[0,[23,ignored$6,fmt_rest$14]]; else var _ri_=[0,[21,counter$0,fmt_rest$14]]; var fmt_result=_ri_; break; case 83: var pad$6=check_no_0(symb,get_padprec(0)), match$17=parse(str_ind,end_ind), fmt_rest$15=match$17[1]; if(get_ign(0)) var ignored$7=[1,get_padprec_opt(95)], _rj_=[0,[23,ignored$7,fmt_rest$15]]; else var match$18=make_padding_fmt_ebb(pad$6,fmt_rest$15), fmt_rest$16=match$18[2], pad$7=match$18[1], _rj_=[0,[3,pad$7,fmt_rest$16]]; var fmt_result=_rj_; break; case 91: if(str_ind === end_ind)unexpected_end_of_format(end_ind); var char_set=create_char_set(0), add_char=function(c){return add_in_char_set(char_set,c)}, add_range= function(c$0,c) {if(! (c < c$0)) {var i=c$0; for(;;) {add_in_char_set(char_set,char_of_int(i)); var _rC_=i + 1 | 0; if(c !== i){var i=_rC_;continue} break}} return 0}, fail_single_percent= function(str_ind) {return caml_call2(failwith_message(_aX_),str,str_ind)}, parse_char_set_content= function(counter,str_ind,end_ind) {var str_ind$0=str_ind; for(;;) {if(str_ind$0 === end_ind)unexpected_end_of_format(end_ind); var c=caml_string_get(str,str_ind$0); if(45 === c) {add_char(45); var str_ind$1=str_ind$0 + 1 | 0,str_ind$0=str_ind$1; continue} if(93 === c)return str_ind$0 + 1 | 0; var _rB_=str_ind$0 + 1 | 0; if(counter < 50) {var counter$0=counter + 1 | 0; return parse_char_set_after_char$0(counter$0,_rB_,end_ind,c)} return caml_trampoline_return (parse_char_set_after_char$0,[0,_rB_,end_ind,c])}}, parse_char_set_after_char$0= function(counter,str_ind,end_ind,c) {var str_ind$0=str_ind,c$0=c; for(;;) {if(str_ind$0 === end_ind)unexpected_end_of_format(end_ind); var c$1=caml_string_get(str,str_ind$0),switch$0=0; if(46 <= c$1) {if(64 === c$1) switch$0 = 1; else if(93 === c$1){add_char(c$0);return str_ind$0 + 1 | 0}} else if(37 === c$1) switch$0 = 1; else if(45 <= c$1) {var str_ind$2=str_ind$0 + 1 | 0; if(str_ind$2 === end_ind)unexpected_end_of_format(end_ind); var c$2=caml_string_get(str,str_ind$2); if(37 === c$2) {if((str_ind$2 + 1 | 0) === end_ind) unexpected_end_of_format(end_ind); var c$3=caml_string_get(str,str_ind$2 + 1 | 0); if(37 !== c$3 && 64 !== c$3) return fail_single_percent(str_ind$2); add_range(c$0,c$3); var _rz_=str_ind$2 + 2 | 0; if(counter < 50) {var counter$2=counter + 1 | 0; return parse_char_set_content(counter$2,_rz_,end_ind)} return caml_trampoline_return (parse_char_set_content,[0,_rz_,end_ind])} if(93 === c$2) {add_char(c$0);add_char(45);return str_ind$2 + 1 | 0} add_range(c$0,c$2); var _rA_=str_ind$2 + 1 | 0; if(counter < 50) {var counter$1=counter + 1 | 0; return parse_char_set_content(counter$1,_rA_,end_ind)} return caml_trampoline_return (parse_char_set_content,[0,_rA_,end_ind])} if(switch$0 && 37 === c$0) {add_char(c$1); var _ry_=str_ind$0 + 1 | 0; if(counter < 50) {var counter$0=counter + 1 | 0; return parse_char_set_content(counter$0,_ry_,end_ind)} return caml_trampoline_return (parse_char_set_content,[0,_ry_,end_ind])} if(37 === c$0)fail_single_percent(str_ind$0); add_char(c$0); var str_ind$1=str_ind$0 + 1 | 0,str_ind$0=str_ind$1,c$0=c$1; continue}}, parse_char_set_after_char= function(str_ind,end_ind,c) {return caml_trampoline (parse_char_set_after_char$0(0,str_ind,end_ind,c))}; if(str_ind === end_ind)unexpected_end_of_format(end_ind); var match$31=caml_string_get(str,str_ind); if(94 === match$31) var str_ind$0=str_ind + 1 | 0,reverse=1,str_ind$1=str_ind$0; else var reverse=0,str_ind$1=str_ind; if(str_ind$1 === end_ind)unexpected_end_of_format(end_ind); var c=caml_string_get(str,str_ind$1), next_ind=parse_char_set_after_char(str_ind$1 + 1 | 0,end_ind,c), char_set$0=freeze_char_set(char_set), char_set$1=reverse?rev_char_set(char_set$0):char_set$0, match$21=parse(next_ind,end_ind), fmt_rest$19=match$21[1]; if(get_ign(0)) var ignored$9=[10,get_pad_opt(95),char_set$1], _ro_=[0,[23,ignored$9,fmt_rest$19]]; else var _ro_=[0,[20,get_pad_opt(91),char_set$1,fmt_rest$19]]; var fmt_result=_ro_; break; case 97: var match$22=parse(str_ind,end_ind), fmt_rest$20=match$22[1], fmt_result=[0,[15,fmt_rest$20]]; break; case 99: var char_format= function(fmt_rest) {return get_ign(0)?[0,[23,0,fmt_rest]]:[0,[0,fmt_rest]]}, match$23=parse(str_ind,end_ind), fmt_rest$21=match$23[1], match$24=get_pad_opt(99); if(match$24) {if(0 === match$24[1]) var _rp_=get_ign(0)?[0,[23,3,fmt_rest$21]]:[0,[22,fmt_rest$21]], _rq_=_rp_; else var _rq_= legacy_behavior$0 ?char_format(fmt_rest$21) :invalid_format_message (str_ind,cst_non_zero_widths_are_unsupp); var _rr_=_rq_} else var _rr_=char_format(fmt_rest$21); var fmt_result=_rr_; break; case 114: var match$25=parse(str_ind,end_ind), fmt_rest$22=match$25[1], _rs_=get_ign(0)?[0,[23,2,fmt_rest$22]]:[0,[19,fmt_rest$22]], fmt_result=_rs_; break; case 115: var pad$9=check_no_0(symb,get_padprec(0)), match$26=parse(str_ind,end_ind), fmt_rest$23=match$26[1]; if(get_ign(0)) var ignored$10=[0,get_padprec_opt(95)], _rt_=[0,[23,ignored$10,fmt_rest$23]]; else var match$27=make_padding_fmt_ebb(pad$9,fmt_rest$23), fmt_rest$24=match$27[2], pad$10=match$27[1], _rt_=[0,[2,pad$10,fmt_rest$24]]; var fmt_result=_rt_; break; case 116: var match$28=parse(str_ind,end_ind), fmt_rest$25=match$28[1], fmt_result=[0,[16,fmt_rest$25]]; break; case 123: var sub_end$0=search_subformat_end(str_ind,end_ind,125), match$29=parse(str_ind,sub_end$0), sub_fmt$0=match$29[1], match$30=parse(sub_end$0 + 2 | 0,end_ind), fmt_rest$26=match$30[1], sub_fmtty$0=fmtty_of_fmt(sub_fmt$0); if(get_ign(0)) var ignored$11=[8,get_pad_opt(95),sub_fmtty$0], _ru_=[0,[23,ignored$11,fmt_rest$26]]; else var _ru_=[0,[13,get_pad_opt(123),sub_fmtty$0,fmt_rest$26]]; var fmt_result=_ru_; break; case 66: case 98: var pad$3=check_no_0(symb,get_padprec(0)), match$10=parse(str_ind,end_ind), fmt_rest$8=match$10[1]; if(get_ign(0)) var ignored$3=[7,get_padprec_opt(95)], _rb_=[0,[23,ignored$3,fmt_rest$8]]; else var match$11=make_padding_fmt_ebb(pad$3,fmt_rest$8), fmt_rest$9=match$11[2], pad$4=match$11[1], _rb_=[0,[9,pad$4,fmt_rest$9]]; var fmt_result=_rb_; break; case 37: case 64: var match$7=parse(str_ind,end_ind), fmt_rest$6=match$7[1], fmt_result=[0,[12,symb,fmt_rest$6]]; break; case 76: case 108: case 110: var switch$1=0; if(str_ind !== end_ind) {var symb$0=caml_string_get(str,str_ind), _rv_=symb$0 - 88 | 0, switch$2=0; if(! (32 < _rv_ >>> 0)) switch(_rv_) {case 0: case 12: case 17: case 23: case 29: case 32:var _rh_=1;switch$2 = 1;break } if(! switch$2)var _rh_=0; if(_rh_){switch$0 = 1;switch$1 = 1}} if(! switch$1) {var match$15=parse(str_ind,end_ind), fmt_rest$13=match$15[1], switch$3=0; if(108 <= symb) {if(! (111 <= symb)) switch(symb - 108 | 0) {case 0:var counter=0;switch$3 = 1;break; case 1:break; default:var counter=1;switch$3 = 1}} else if(76 === symb){var counter=2;switch$3 = 1} if(! switch$3)throw [0,Assert_failure,_a1_]; if(get_ign(0)) var ignored$5=[11,counter],_rg_=[0,[23,ignored$5,fmt_rest$13]]; else var _rg_=[0,[21,counter,fmt_rest$13]]; var fmt_result=_rg_} break; case 32: case 35: case 43: case 45: case 95: var fmt_result= caml_call3(failwith_message(_aS_),str,pct_ind,symb); break; case 88: case 100: case 105: case 111: case 117: case 120: var _rk_=get_space(0), _rl_=get_hash(0), iconv$2= compute_int_conv(pct_ind,str_ind,get_plus(0),_rl_,_rk_,symb), match$19=parse(str_ind,end_ind), fmt_rest$17=match$19[1]; if(get_ign(0)) var ignored$8=[2,iconv$2,get_pad_opt(95)], _rm_=[0,[23,ignored$8,fmt_rest$17]]; else var _rn_=get_prec(0), match$20=make_padprec_fmt_ebb(get_int_pad(0),_rn_,fmt_rest$17), fmt_rest$18=match$20[3], prec$4=match$20[2], pad$8=match$20[1], _rm_=[0,[4,iconv$2,pad$8,prec$4,fmt_rest$18]]; var fmt_result=_rm_; break; case 69: case 70: case 71: case 72: case 101: case 102: case 103: case 104: var space$1=get_space(0), hash$1=get_hash(0), plus$2=get_plus(0), flag= plus$2 ?space$1 ?legacy_behavior$0 ?1 :incompatible_flag(pct_ind,str_ind,32,cst$50) :1 :space$1?2:0, switch$4=0; if(73 <= symb) {var switcher=symb - 101 | 0; if(3 < switcher >>> 0) switch$4 = 1; else {switch(switcher) {case 0:var _rw_=1;break; case 1:var _rw_=0;break; case 2:var _rw_=3;break; default:var _rw_=6} var kind=_rw_}} else if(69 <= symb) {var switch$5=0; switch(symb - 69 | 0) {case 0:var _rx_=2;break; case 1:switch$4 = 1;switch$5 = 1;break; case 2:var _rx_=4;break; default:var _rx_=7} if(! switch$5)var kind=_rx_} else switch$4 = 1; if(switch$4) {var switch$6=0; if(hash$1) if(70 === symb)var kind=8;else switch$6 = 1; else if(70 === symb)var kind=5;else switch$6 = 1; if(switch$6)throw [0,Assert_failure,_a3_]} var fconv=[0,flag,kind], match$13=parse(str_ind,end_ind), fmt_rest$11=match$13[1]; if(get_ign(0)) {var match=get_prec(0); if(typeof match === "number") var _rd_=match?incompatible_flag(pct_ind,str_ind,95,cst$40):0; else var ndec=match[1],_rd_=[0,ndec]; var ignored$4=[6,get_pad_opt(95),_rd_], _re_=[0,[23,ignored$4,fmt_rest$11]]} else var _rf_=get_prec(0), match$14=make_padprec_fmt_ebb(get_pad(0),_rf_,fmt_rest$11), fmt_rest$12=match$14[3], prec$3=match$14[2], pad$5=match$14[1], _re_=[0,[8,fconv,pad$5,prec$3,fmt_rest$12]]; var fmt_result=_re_; break; default:switch$0 = 1} if(switch$0) {var switch$7=0; if(108 <= symb) if(111 <= symb) switch$7 = 1; else {var switch$8=0; switch(symb - 108 | 0) {case 0: var _qW_=caml_string_get(str,str_ind), _qX_=get_space(0), _qY_=get_hash(0), iconv= compute_int_conv (pct_ind,str_ind + 1 | 0,get_plus(0),_qY_,_qX_,_qW_), match$0=parse(str_ind + 1 | 0,end_ind), fmt_rest=match$0[1]; if(get_ign(0)) var ignored=[3,iconv,get_pad_opt(95)], _qZ_=[0,[23,ignored,fmt_rest]]; else var _q1_=get_prec(0), match$1=make_padprec_fmt_ebb(get_int_pad(0),_q1_,fmt_rest), fmt_rest$0=match$1[3], prec$0=match$1[2], pad$0=match$1[1], _qZ_=[0,[5,iconv,pad$0,prec$0,fmt_rest$0]]; var _q0_=_qZ_; break; case 1:switch$7 = 1;switch$8 = 1;break; default: var _q2_=caml_string_get(str,str_ind), _q3_=get_space(0), _q4_=get_hash(0), iconv$0= compute_int_conv (pct_ind,str_ind + 1 | 0,get_plus(0),_q4_,_q3_,_q2_), match$2=parse(str_ind + 1 | 0,end_ind), fmt_rest$1=match$2[1]; if(get_ign(0)) var ignored$0=[4,iconv$0,get_pad_opt(95)], _q5_=[0,[23,ignored$0,fmt_rest$1]]; else var _q6_=get_prec(0), match$3=make_padprec_fmt_ebb(get_int_pad(0),_q6_,fmt_rest$1), fmt_rest$2=match$3[3], prec$1=match$3[2], pad$1=match$3[1], _q5_=[0,[6,iconv$0,pad$1,prec$1,fmt_rest$2]]; var _q0_=_q5_} if(! switch$8)var fmt_result=_q0_} else if(76 === symb) {var _q7_=caml_string_get(str,str_ind), _q8_=get_space(0), _q9_=get_hash(0), iconv$1= compute_int_conv (pct_ind,str_ind + 1 | 0,get_plus(0),_q9_,_q8_,_q7_), match$4=parse(str_ind + 1 | 0,end_ind), fmt_rest$3=match$4[1]; if(get_ign(0)) var ignored$1=[5,iconv$1,get_pad_opt(95)], _q__=[0,[23,ignored$1,fmt_rest$3]]; else var _q$_=get_prec(0), match$5=make_padprec_fmt_ebb(get_int_pad(0),_q$_,fmt_rest$3), fmt_rest$4=match$5[3], prec$2=match$5[2], pad$2=match$5[1], _q__=[0,[7,iconv$1,pad$2,prec$2,fmt_rest$4]]; var fmt_result=_q__} else switch$7 = 1; if(switch$7) var fmt_result= caml_call3(failwith_message(_aP_),str,str_ind - 1 | 0,symb)} if(1 - legacy_behavior$0) {var _qN_=1 - plus_used[1],plus$0=_qN_?plus:_qN_; if(plus$0)incompatible_flag(pct_ind,str_ind,symb,cst$41); var _qO_=1 - hash_used[1],hash$0=_qO_?hash:_qO_; if(hash$0)incompatible_flag(pct_ind,str_ind,symb,cst$42); var _qP_=1 - space_used[1],space$0=_qP_?space:_qP_; if(space$0)incompatible_flag(pct_ind,str_ind,symb,cst$43); var _qQ_=1 - pad_used[1],_qR_=_qQ_?caml_notequal([0,pad],_aQ_):_qQ_; if(_qR_)incompatible_flag(pct_ind,str_ind,symb,cst_padding$0); var _qS_=1 - prec_used[1], _qT_=_qS_?caml_notequal([0,prec],_aR_):_qS_; if(_qT_) {var _qU_=ign?95:symb; incompatible_flag(pct_ind,str_ind,_qU_,cst_precision$2)} var plus$1=ign?plus:ign; if(plus$1)incompatible_flag(pct_ind,str_ind,95,cst$44)} var _qV_=1 - ign_used[1],ign$0=_qV_?ign:_qV_; if(ign$0) {var switch$9=0; if(38 <= symb) {if(44 !== symb && 64 !== symb)switch$9 = 1} else if(33 !== symb && ! (37 <= symb))switch$9 = 1; var switch$10=0; if(switch$9 || ! legacy_behavior$0)switch$10 = 1; if(switch$10)incompatible_flag(pct_ind,str_ind,symb,cst$45)} return fmt_result} function parse(lit_start,end_ind) {var str_ind=lit_start; for(;;) {if(str_ind === end_ind)return add_literal(lit_start,str_ind,0); var match=caml_string_get(str,str_ind); if(37 === match) {var str_ind$2=str_ind + 1 | 0; if(str_ind$2 === end_ind)unexpected_end_of_format(end_ind); var match$1=caml_string_get(str,str_ind$2), _qM_= 95 === match$1 ?parse_flags(str_ind,str_ind$2 + 1 | 0,end_ind,1) :parse_flags(str_ind,str_ind$2,end_ind,0), fmt_rest=_qM_[1]; return add_literal(lit_start,str_ind,fmt_rest)} if(64 === match) {var str_ind$0=str_ind + 1 | 0; if(str_ind$0 === end_ind) var match$0=_aT_; else {var c=caml_string_get(str,str_ind$0),switch$0=0; if(65 <= c) if(94 <= c) {var switcher=c - 123 | 0; if(2 < switcher >>> 0) switch$0 = 1; else switch(switcher) {case 0: var match$0=parse_tag(1,str_ind$0 + 1 | 0,end_ind);break; case 1:switch$0 = 1;break; default: var match$3=parse(str_ind$0 + 1 | 0,end_ind), fmt_rest$2=match$3[1], match$0=[0,[17,1,fmt_rest$2]]}} else if(91 <= c) switch(c - 91 | 0) {case 0: var match$0=parse_tag(0,str_ind$0 + 1 | 0,end_ind);break; case 1:switch$0 = 1;break; default: var match$4=parse(str_ind$0 + 1 | 0,end_ind), fmt_rest$3=match$4[1], match$0=[0,[17,0,fmt_rest$3]]} else switch$0 = 1; else if(10 === c) var match$5=parse(str_ind$0 + 1 | 0,end_ind), fmt_rest$4=match$5[1], match$0=[0,[17,3,fmt_rest$4]]; else if(32 <= c) switch(c - 32 | 0) {case 0: var match$6=parse(str_ind$0 + 1 | 0,end_ind), fmt_rest$5=match$6[1], match$0=[0,[17,_aU_,fmt_rest$5]]; break; case 5: var switch$1=0; if ((str_ind$0 + 1 | 0) < end_ind && 37 === caml_string_get(str,str_ind$0 + 1 | 0)) {var match$7=parse(str_ind$0 + 2 | 0,end_ind), fmt_rest$6=match$7[1], match$0=[0,[17,6,fmt_rest$6]]; switch$1 = 1} if(! switch$1) var match$8=parse(str_ind$0,end_ind), fmt_rest$7=match$8[1], match$0=[0,[12,64,fmt_rest$7]]; break; case 12: var match$9=parse(str_ind$0 + 1 | 0,end_ind), fmt_rest$8=match$9[1], match$0=[0,[17,_aV_,fmt_rest$8]]; break; case 14: var match$10=parse(str_ind$0 + 1 | 0,end_ind), fmt_rest$9=match$10[1], match$0=[0,[17,4,fmt_rest$9]]; break; case 27: var match$0=parse_good_break(str_ind$0 + 1 | 0,end_ind); break; case 28: var match$0=parse_magic_size(str_ind$0 + 1 | 0,end_ind); break; case 31: var match$11=parse(str_ind$0 + 1 | 0,end_ind), fmt_rest$10=match$11[1], match$0=[0,[17,2,fmt_rest$10]]; break; case 32: var match$12=parse(str_ind$0 + 1 | 0,end_ind), fmt_rest$11=match$12[1], match$0=[0,[17,5,fmt_rest$11]]; break; default:switch$0 = 1} else switch$0 = 1; if(switch$0) var match$2=parse(str_ind$0 + 1 | 0,end_ind), fmt_rest$1=match$2[1], match$0=[0,[17,[2,c],fmt_rest$1]]} var fmt_rest$0=match$0[1]; return add_literal(lit_start,str_ind,fmt_rest$0)} var str_ind$1=str_ind + 1 | 0,str_ind=str_ind$1; continue}} return parse(0,caml_ml_string_length(str))} function format_of_string_fmtty(str,fmtty) {var match=fmt_ebb_of_string(0,str),fmt=match[1]; try {var _qK_=[0,type_format(fmt,fmtty),str];return _qK_} catch(_qL_) {_qL_ = caml_wrap_exception(_qL_); if(_qL_ === Type_mismatch) {var _qJ_=string_of_fmtty(fmtty); return caml_call2(failwith_message(_a5_),str,_qJ_)} throw _qL_}} function format_of_string_format(str,param) {var str$0=param[2], fmt=param[1], match=fmt_ebb_of_string(0,str), fmt$0=match[1]; try {var _qH_=[0,type_format(fmt$0,fmtty_of_fmt(fmt)),str];return _qH_} catch(_qI_) {_qI_ = caml_wrap_exception(_qI_); if(_qI_ === Type_mismatch) return caml_call2(failwith_message(_a6_),str,str$0); throw _qI_}} var CamlinternalFormat= [0, is_in_char_set, rev_char_set, create_char_set, add_in_char_set, freeze_char_set, param_format_of_ignored_format, make_printf, make_iprintf, output_acc, bufput_acc, strput_acc, type_format, fmt_ebb_of_string, format_of_string_fmtty, format_of_string_format, char_of_iconv, string_of_formatting_lit, string_of_fmtty, string_of_fmt, open_box_of_string, symm, trans, recast]; caml_register_global(807,CamlinternalFormat,"CamlinternalFormat"); function kfprintf(k,o,param) {var fmt=param[1],_qG_=0; return make_printf (function(acc){output_acc(o,acc);return caml_call1(k,o)}, _qG_, fmt)} function kbprintf(k,b,param) {var fmt=param[1],_qF_=0; return make_printf (function(acc){bufput_acc(b,acc);return caml_call1(k,b)}, _qF_, fmt)} function ikfprintf(k,oc,param) {var fmt=param[1];return make_iprintf(k,oc,fmt)} function fprintf(oc,fmt){return kfprintf(function(_qE_){return 0},oc,fmt)} function bprintf(b,fmt){return kbprintf(function(_qD_){return 0},b,fmt)} function ifprintf(oc,fmt) {return ikfprintf(function(_qC_){return 0},oc,fmt)} function ibprintf(b,fmt){return ikfprintf(function(_qB_){return 0},b,fmt)} function printf(fmt){return fprintf(stdout,fmt)} function eprintf(fmt){return fprintf(stderr,fmt)} function ksprintf(k,param) {var fmt=param[1]; function k$0(acc) {var buf=create$2(64); strput_acc(buf,acc); return caml_call1(k,contents(buf))} return make_printf(k$0,0,fmt)} function sprintf(fmt){return ksprintf(function(s){return s},fmt)} var Stdlib_Printf= [0, fprintf, printf, eprintf, sprintf, bprintf, ifprintf, ibprintf, kfprintf, ikfprintf, ksprintf, kbprintf, ikfprintf, ksprintf]; caml_register_global(808,Stdlib_Printf,"Stdlib__Printf"); var Bad=[248,cst_Stdlib_Arg_Bad,caml_fresh_oo_id(0)], Help=[248,cst_Stdlib_Arg_Help,caml_fresh_oo_id(0)], Stop=[248,cst_Stdlib_Arg_Stop,caml_fresh_oo_id(0)]; function assoc3(x,l) {var l$0=l; for(;;) {if(l$0) {var match=l$0[1],y2=match[2],y1=match[1]; if(caml_equal(y1,x))return y2; var l$1=l$0[2],l$0=l$1; continue} throw Not_found}} function split$1(s) {var i=index$0(s,61), len=caml_ml_string_length(s), _qA_=sub$0(s,i + 1 | 0,len - (i + 1 | 0) | 0); return [0,sub$0(s,0,i),_qA_]} function make_symlist(prefix,sep,suffix,l) {if(l) {var t=l[2],h=l[1],_qz_=cat(prefix,h); return cat (fold_left$0(function(x,y){return cat(x,cat(sep,y))},_qz_,t), suffix)} return cst_none} function help_action(param){throw [0,Stop,_a9_]} function add_help(speclist) {try {assoc3(cst_help$2,speclist);var _qw_=0,_qu_=_qw_} catch(_qy_) {_qy_ = caml_wrap_exception(_qy_); if(_qy_ !== Not_found)throw _qy_; var _qu_= [0,[0,cst_help,[0,help_action],cst_Display_this_list_of_optio],0]} try {assoc3(cst_help$1,speclist);var _qv_=0,add2=_qv_} catch(_qx_) {_qx_ = caml_wrap_exception(_qx_); if(_qx_ !== Not_found)throw _qx_; var add2= [0, [0,cst_help$0,[0,help_action],cst_Display_this_list_of_optio$0], 0]} return append(speclist,append(_qu_,add2))} function usage_b(buf,speclist,errmsg) {caml_call1(bprintf(buf,_a__),errmsg); var _qr_=add_help(speclist); return iter$2 (function(param) {var doc=param[3], spec=param[2], key=param[1], _qs_=0 < caml_ml_string_length(doc)?1:0; if(_qs_) {if(11 === spec[0]) {var l=spec[1],_qt_=make_symlist(cst$53,cst$52,cst$51,l); return caml_call3(bprintf(buf,_a8_),key,_qt_,doc)} return caml_call2(bprintf(buf,_a7_),key,doc)} return _qs_}, _qr_)} function usage_string(speclist,errmsg) {var b=create$2(200);usage_b(b,speclist,errmsg);return contents(b)} function usage(speclist,errmsg) {var _qq_=usage_string(speclist,errmsg); return caml_call1(eprintf(_a$_),_qq_)} var current=[0,0]; function bool_of_string_opt$0(x) {try {var _qo_=[0,bool_of_string(x)];return _qo_} catch(_qp_) {_qp_ = caml_wrap_exception(_qp_); if(_qp_[1] === Invalid_argument)return 0; throw _qp_}} function int_of_string_opt$0(x) {try {var _qm_=[0,caml_int_of_string(x)];return _qm_} catch(_qn_) {_qn_ = caml_wrap_exception(_qn_); if(_qn_[1] === Failure)return 0; throw _qn_}} function float_of_string_opt(x) {try {var _qk_=[0,caml_float_of_string(x)];return _qk_} catch(_ql_) {_ql_ = caml_wrap_exception(_ql_); if(_ql_[1] === Failure)return 0; throw _ql_}} function parse_and_expand_argv_dynamic_ (allow_expand,current,argv,speclist,anonfun,errmsg) {var initpos=current[1]; function convert_error(error) {var b=create$2(200), progname= initpos < argv[1].length - 1 ?caml_check_bound(argv[1],initpos)[1 + initpos] :cst$54; switch(error[0]) {case 0: var _qj_=error[1]; if (caml_string_notequal(_qj_,cst_help$3) && caml_string_notequal(_qj_,cst_help$4)) caml_call2(bprintf(b,_ba_),progname,_qj_); break; case 1: var expected=error[3],arg=error[2],opt=error[1]; caml_call4(bprintf(b,_bd_),progname,arg,opt,expected); break; case 2:var s=error[1];caml_call2(bprintf(b,_be_),progname,s);break; default:var s$0=error[1];caml_call2(bprintf(b,_bf_),progname,s$0)} usage_b(b,speclist[1],errmsg); if(! caml_equal(error,_bb_) && ! caml_equal(error,_bc_)) return [0,Bad,contents(b)]; return [0,Help,contents(b)]} current[1]++; for(;;) {if(current[1] < argv[1].length - 1) {try {var _p__=current[1], s=caml_check_bound(argv[1],_p__)[1 + _p__], switch$0=0; if(1 <= caml_ml_string_length(s) && 45 === caml_string_get(s,0)) {try {var follow$1=0, _qa_=assoc3(s,speclist[1]), follow$0=follow$1, action=_qa_} catch(_qh_) {_qh_ = caml_wrap_exception(_qh_); if(_qh_ !== Not_found)throw _qh_; try {var match=split$1(s), arg=match[2], keyword=match[1], follow=[0,arg], _p$_=assoc3(keyword,speclist[1])} catch(_qi_) {_qi_ = caml_wrap_exception(_qi_); if(_qi_ === Not_found)throw [0,Stop,[0,s]]; throw _qi_; var _qb_=_qi_} var follow$0=follow,action=_p$_,_qc_=_qh_} var no_arg$0= function(s,follow) {function no_arg(param) {if(follow) {var arg=follow[1];throw [0,Stop,[1,s,arg,cst_no_argument]]} return 0} return no_arg}, no_arg=no_arg$0(s,follow$0), get_arg$0= function(s,follow) {function get_arg(param) {if(follow){var arg=follow[1];return arg} if((current[1] + 1 | 0) < argv[1].length - 1) {var _qg_=current[1] + 1 | 0; return caml_check_bound(argv[1],_qg_)[1 + _qg_]} throw [0,Stop,[2,s]]} return get_arg}, get_arg=get_arg$0(s,follow$0), consume_arg$0= function(follow) {function consume_arg(param) {return follow?0:(current[1]++,0)} return consume_arg}, consume_arg=consume_arg$0(follow$0), treat_action$0= function(s,no_arg,get_arg,consume_arg) {function treat_action(param) {switch(param[0]) {case 0:var f=param[1];no_arg(0);return caml_call1(f,0); case 1: var f$0=param[1], arg=get_arg(0), match=bool_of_string_opt$0(arg); if(match) {var s$0=match[1];caml_call1(f$0,s$0);return consume_arg(0)} throw [0,Stop,[1,s,arg,cst_a_boolean]]; case 2:var r=param[1];no_arg(0);r[1] = 1;return 0; case 3:var r$0=param[1];no_arg(0);r$0[1] = 0;return 0; case 4: var f$1=param[1],arg$0=get_arg(0); caml_call1(f$1,arg$0); return consume_arg(0); case 5: var r$1=param[1];r$1[1] = get_arg(0);return consume_arg(0); case 6: var f$2=param[1], arg$1=get_arg(0), match$0=int_of_string_opt$0(arg$1); if(match$0) {var x=match$0[1];caml_call1(f$2,x);return consume_arg(0)} throw [0,Stop,[1,s,arg$1,cst_an_integer]]; case 7: var r$2=param[1], arg$2=get_arg(0), match$1=int_of_string_opt$0(arg$2); if(match$1) {var x$0=match$1[1];r$2[1] = x$0;return consume_arg(0)} throw [0,Stop,[1,s,arg$2,cst_an_integer$0]]; case 8: var f$3=param[1], arg$3=get_arg(0), match$2=float_of_string_opt(arg$3); if(match$2) {var x$1=match$2[1]; caml_call1(f$3,x$1); return consume_arg(0)} throw [0,Stop,[1,s,arg$3,cst_a_float]]; case 9: var r$3=param[1], arg$4=get_arg(0), match$3=float_of_string_opt(arg$4); if(match$3) {var x$2=match$3[1];r$3[1] = x$2;return consume_arg(0)} throw [0,Stop,[1,s,arg$4,cst_a_float$0]]; case 10: var specs=param[1]; no_arg(0); return iter$2(treat_action,specs); case 11: var f$4=param[2],symb=param[1],arg$5=get_arg(0); if(mem(arg$5,symb)) {caml_call1(f$4,arg$5);return consume_arg(0)} throw [0, Stop, [1, s, arg$5, cat(cst_one_of,make_symlist(cst$57,cst$56,cst$55,symb))]]; case 12: var f$5=param[1]; no_arg(0); for(;;) {if(current[1] < (argv[1].length - 1 - 1 | 0)) {var _qd_=current[1] + 1 | 0; caml_call1(f$5,caml_check_bound(argv[1],_qd_)[1 + _qd_]); consume_arg(0); continue} return 0} case 13: var f$6=param[1]; no_arg(0); var acc=[0,0]; for(;;) {if(current[1] < (argv[1].length - 1 - 1 | 0)) {var _qf_=current[1] + 1 | 0,_qe_=acc[1]; acc[1] = [0,caml_check_bound(argv[1],_qf_)[1 + _qf_],_qe_]; consume_arg(0); continue} return caml_call1(f$6,rev(acc[1]))} default: var f$7=param[1]; if(1 - allow_expand) throw [0,Invalid_argument,cst_Arg_Expand_is_is_only_allo]; var arg$6=get_arg(0),newarg=caml_call1(f$7,arg$6); consume_arg(0); var before=sub$1(argv[1],0,current[1] + 1 | 0), after= sub$1 (argv[1], current[1] + 1 | 0, (argv[1].length - 1 - current[1] | 0) - 1 | 0); argv[1] = caml_array_concat([0,before,[0,newarg,[0,after,0]]]); return 0}} return treat_action}, treat_action=treat_action$0(s,no_arg,get_arg,consume_arg); treat_action(action); switch$0 = 1} if(! switch$0)caml_call1(anonfun,s)} catch(exn$0) {exn$0 = caml_wrap_exception(exn$0); if(exn$0[1] === Bad){var m=exn$0[2];throw convert_error([3,m])} if(exn$0[1] === Stop){var e=exn$0[2];throw convert_error(e)} throw exn$0; var exn=exn$0} current[1]++; continue} return 0}} function parse_and_expand_argv_dynamic (current,argv,speclist,anonfun,errmsg) {return parse_and_expand_argv_dynamic_ (1,current,argv,speclist,anonfun,errmsg)} function parse_argv_dynamic(opt,argv,speclist,anonfun,errmsg) {if(opt)var sth=opt[1],current$0=sth;else var current$0=current; return parse_and_expand_argv_dynamic_ (0,current$0,[0,argv],speclist,anonfun,errmsg)} function parse_argv(opt,argv,speclist,anonfun,errmsg) {if(opt)var sth=opt[1],current$0=sth;else var current$0=current; return parse_argv_dynamic ([0,current$0],argv,[0,speclist],anonfun,errmsg)} function parse(l,f,msg) {try {var _p9_=parse_argv(0,caml_sys_argv(0),l,f,msg);return _p9_} catch(exn) {exn = caml_wrap_exception(exn); if(exn[1] === Bad) {var msg$0=exn[2];caml_call1(eprintf(_bg_),msg$0);return exit(2)} if(exn[1] === Help) {var msg$1=exn[2];caml_call1(printf(_bh_),msg$1);return exit(0)} throw exn}} function parse_dynamic(l,f,msg) {try {var _p8_=parse_argv_dynamic(0,caml_sys_argv(0),l,f,msg);return _p8_} catch(exn) {exn = caml_wrap_exception(exn); if(exn[1] === Bad) {var msg$0=exn[2];caml_call1(eprintf(_bi_),msg$0);return exit(2)} if(exn[1] === Help) {var msg$1=exn[2];caml_call1(printf(_bj_),msg$1);return exit(0)} throw exn}} function parse_expand(l,f,msg) {try {var argv=[0,caml_sys_argv(0)], spec=[0,l], current$0=[0,current[1]], _p7_=parse_and_expand_argv_dynamic(current$0,argv,spec,f,msg); return _p7_} catch(exn) {exn = caml_wrap_exception(exn); if(exn[1] === Bad) {var msg$0=exn[2];caml_call1(eprintf(_bk_),msg$0);return exit(2)} if(exn[1] === Help) {var msg$1=exn[2];caml_call1(printf(_bl_),msg$1);return exit(0)} throw exn}} function second_word(s) {var len=caml_ml_string_length(s); function loop(n) {var n$0=n; for(;;) {if(len <= n$0)return len; if(32 === caml_string_get(s,n$0)) {var n$1=n$0 + 1 | 0,n$0=n$1;continue} return n$0}} try {var n$0=index$0(s,9)} catch(_p5_) {_p5_ = caml_wrap_exception(_p5_); if(_p5_ === Not_found) {try {var n=index$0(s,32)} catch(_p6_) {_p6_ = caml_wrap_exception(_p6_); if(_p6_ === Not_found)return len; throw _p6_} return loop(n + 1 | 0)} throw _p5_} return loop(n$0 + 1 | 0)} function max_arg_len(cur,param) {var doc=param[3],spec=param[2],kwd=param[1]; return 11 === spec[0] ?max$1(cur,caml_ml_string_length(kwd)) :max$1(cur,caml_ml_string_length(kwd) + second_word(doc) | 0)} function replace_leading_tab(s) {var seen=[0,0]; return map$6 (function(c) {if(9 === c && ! seen[1]){seen[1] = 1;return 32}return c}, s)} function align(opt,speclist) {if(opt)var sth=opt[1],limit=sth;else var limit=max_int; var completed=add_help(speclist), len=fold_left$0(max_arg_len,0,completed), len$0=min$1(len,limit); return map$4 (function(ksd) {var _p3_=ksd[1],_p4_=ksd[2]; if(caml_string_notequal(ksd[3],cst$58)) {if(11 === _p4_[0]) {var msg$0=ksd[3], cutcol$0=second_word(msg$0), spaces$0=make$1(max$1(0,len$0 - cutcol$0 | 0) + 3 | 0,32); return [0, _p3_, _p4_, cat(cst$59,cat(spaces$0,replace_leading_tab(msg$0)))]} var msg=ksd[3], spec=ksd[2], cutcol=second_word(msg), kwd_len=caml_ml_string_length(_p3_), diff=(len$0 - kwd_len | 0) - cutcol | 0; if(0 < diff) {var spaces=make$1(diff,32), prefix=sub$0(replace_leading_tab(msg),0,cutcol), suffix= sub$0(msg,cutcol,caml_ml_string_length(msg) - cutcol | 0); return [0,_p3_,spec,cat(prefix,cat(spaces,suffix))]} return [0,_p3_,spec,replace_leading_tab(msg)]} return ksd}, completed)} function read_aux(trim,sep,file) {var ic=open_bin$0(file),buf=create$2(200),words=[0,0]; function stash(param) {var s=contents(buf); if(trim) {var len=caml_ml_string_length(s),switch$0=0; if(0 < len && 13 === caml_string_get(s,len - 1 | 0)) {var _p2_=sub$0(s,0,len - 1 | 0);switch$0 = 1} if(! switch$0)var _p2_=s; var word=_p2_} else var word=s; words[1] = [0,word,words[1]]; return clear$1(buf)} try {for(;;) {var c=caml_ml_input_char(ic); if(c === sep)stash(0);else add_char(buf,c); continue}} catch(_p1_) {_p1_ = caml_wrap_exception(_p1_); if(_p1_ === End_of_file) {if(0 < buf[2])stash(0); caml_ml_close_channel(ic); return of_list(rev(words[1]))} throw _p1_}} var _bm_=10,_bn_=1; function read_arg(_p0_){return read_aux(_bn_,_bm_,_p0_)} var _bo_=0,_bp_=0; function read_arg0(_pZ_){return read_aux(_bp_,_bo_,_pZ_)} function write_aux(sep,file,args) {var oc=open_bin(file); iter$5(function(s){return caml_call2(fprintf(oc,_bq_),s,sep)},args); return close(oc)} var _br_=10; function write_arg(_pX_,_pY_){return write_aux(_br_,_pX_,_pY_)} var _bs_=0; function write_arg0(_pV_,_pW_){return write_aux(_bs_,_pV_,_pW_)} var Stdlib_Arg= [0, parse, parse_dynamic, parse_argv, parse_argv_dynamic, parse_and_expand_argv_dynamic, parse_expand, Help, Bad, usage, usage_string, align, current, read_arg, read_arg0, write_arg, write_arg0]; caml_register_global(809,Stdlib_Arg,"Stdlib__Arg"); var Stdlib_Atomic= [0,make,get,set,exchange,compare_and_set,fetch_and_add,incr,decr]; caml_register_global(810,Stdlib_Atomic,"Stdlib__Atomic"); var printers=[0,0]; function field(x,i) {var f=x[1 + i]; return is_block(f) ?caml_obj_tag(f) === 252 ?caml_call1(sprintf(_bt_),f) :caml_obj_tag(f) === 253?to_string(f):cst$60 :caml_call1(sprintf(_bu_),f)} function other_fields(x,i) {if(x.length - 1 <= i)return cst$61; var _pT_=other_fields(x,i + 1 | 0),_pU_=field(x,i); return caml_call2(sprintf(_bv_),_pU_,_pT_)} function use_printers(x) {function conv(param) {var param$0=param; for(;;) {if(param$0) {var tl=param$0[2],hd=param$0[1]; try {var switch$0=0,val=caml_call1(hd,x);switch$0 = 1} catch(_pS_){} if(switch$0 && val){var s=val[1];return [0,s]} var param$0=tl; continue} return 0}} return conv(printers[1])} function to_string_default(x) {if(x === Out_of_memory)return cst_Out_of_memory; if(x === Stack_overflow)return cst_Stack_overflow; if(x[1] === Match_failure) {var match$0=x[2],char$0=match$0[3],line=match$0[2],file=match$0[1]; return caml_call5 (sprintf(locfmt), file, line, char$0, char$0 + 5 | 0, cst_Pattern_matching_failed)} if(x[1] === Assert_failure) {var match$1=x[2], char$1=match$1[3], line$0=match$1[2], file$0=match$1[1]; return caml_call5 (sprintf(locfmt), file$0, line$0, char$1, char$1 + 6 | 0, cst_Assertion_failed)} if(x[1] === Undefined_recursive_module) {var match$2=x[2], char$2=match$2[3], line$1=match$2[2], file$1=match$2[1]; return caml_call5 (sprintf(locfmt), file$1, line$1, char$2, char$2 + 6 | 0, cst_Undefined_recursive_module)} if(0 === caml_obj_tag(x)) {var constructor=x[1][1],match=x.length - 1; if(2 < match >>> 0) var _pO_=other_fields(x,2), _pP_=field(x,1), _pR_=caml_call2(sprintf(_bw_),_pP_,_pO_); else switch(match) {case 0:var _pR_=cst$62;break; case 1:var _pR_=cst$63;break; default:var _pQ_=field(x,1),_pR_=caml_call1(sprintf(_bx_),_pQ_)} return cat(constructor,_pR_)} return x[1]} function to_string$6(e) {var match=use_printers(e); if(match){var s=match[1];return s} return to_string_default(e)} function print(fct,arg) {try {var _pN_=caml_call1(fct,arg);return _pN_} catch(x) {x = caml_wrap_exception(x); var _pM_=to_string$6(x); caml_call1(eprintf(_by_),_pM_); caml_ml_flush(stderr); throw x}} function catch$0(fct,arg) {try {var _pL_=caml_call1(fct,arg);return _pL_} catch(x) {x = caml_wrap_exception(x); caml_ml_flush(stdout); var _pK_=to_string$6(x); caml_call1(eprintf(_bz_),_pK_); return exit(2)}} function raw_backtrace_entries(bt){return bt} function convert_raw_backtrace(bt) {return [0,runtime.caml_convert_raw_backtrace(bt)]} function format_backtrace_slot(pos,slot) {function info(is_raise) {return is_raise ?0 === pos?cst_Raised_at:cst_Re_raised_at :0 === pos?cst_Raised_by_primitive_operat:cst_Called_from} if(0 === slot[0]) {var _pC_=slot[5], _pD_=slot[4], _pE_=slot[3], _pF_=slot[6]?cst_inlined:cst$64, _pG_=slot[2], _pH_=slot[7], _pI_=info(slot[1]); return [0, caml_call7(sprintf(_bA_),_pI_,_pH_,_pG_,_pF_,_pE_,_pD_,_pC_)]} if(slot[1])return 0; var _pJ_=info(0); return [0,caml_call1(sprintf(_bB_),_pJ_)]} function print_raw_backtrace(outchan,raw_backtrace) {var backtrace=convert_raw_backtrace(raw_backtrace); if(backtrace) {var a=backtrace[1],_pA_=a.length - 1 - 1 | 0,_pz_=0; if(! (_pA_ < 0)) {var i=_pz_; for(;;) {var match=format_backtrace_slot(i,caml_check_bound(a,i)[1 + i]); if(match){var str=match[1];caml_call1(fprintf(outchan,_bC_),str)} var _pB_=i + 1 | 0; if(_pA_ !== i){var i=_pB_;continue} break}} return 0} return fprintf(outchan,_bD_)} function print_backtrace(outchan) {return print_raw_backtrace(outchan,caml_get_exception_raw_backtra(0))} function raw_backtrace_to_string(raw_backtrace) {var backtrace=convert_raw_backtrace(raw_backtrace); if(backtrace) {var a=backtrace[1],b=create$2(1024),_px_=a.length - 1 - 1 | 0,_pw_=0; if(! (_px_ < 0)) {var i=_pw_; for(;;) {var match=format_backtrace_slot(i,caml_check_bound(a,i)[1 + i]); if(match){var str=match[1];caml_call1(bprintf(b,_bE_),str)} var _py_=i + 1 | 0; if(_px_ !== i){var i=_py_;continue} break}} return contents(b)} return cst_Program_not_linked_with_g_} function backtrace_slot_is_raise(param) {return 0 === param[0]?param[1]:param[1]} function backtrace_slot_is_inline(param){return 0 === param[0]?param[6]:0} function backtrace_slot_location(param) {return 0 === param[0]?[0,[0,param[2],param[3],param[4],param[5]]]:0} function backtrace_slot_defname(param) {if(0 === param[0] && caml_string_notequal(param[7],cst$65)) return [0,param[7]]; return 0} function backtrace_slots(raw_backtrace) {var match=convert_raw_backtrace(raw_backtrace); if(match) {var backtrace=match[1],i$1=backtrace.length - 1 - 1 | 0,i=i$1; for(;;) {if(-1 === i) var _pv_=0; else {var param=caml_check_bound(backtrace,i)[1 + i], _pu_=0 === param[0]?1:0; if(! _pu_){var i$0=i - 1 | 0,i=i$0;continue} var _pv_=_pu_} return _pv_?[0,backtrace]:0}} return 0} function backtrace_slots_of_raw_entry(entry) {return backtrace_slots([0,entry])} function raw_backtrace_length(bt){return bt.length - 1} function get_backtrace(param) {return raw_backtrace_to_string(caml_get_exception_raw_backtra(0))} function register_printer(fn) {for(;;) {var old_printers=printers[1], new_printers=[0,fn,old_printers], success=compare_and_set(printers,old_printers,new_printers), _pt_=1 - success; if(_pt_)continue; return _pt_}} function exn_slot(x){return 0 === caml_obj_tag(x)?x[1]:x} function exn_slot_id(x){var slot=exn_slot(x);return slot[2]} function exn_slot_name(x){var slot=exn_slot(x);return slot[1]} var errors=_bF_.slice(); function default_uncaught_exception_han(exn,raw_backtrace) {var _pr_=to_string$6(exn); caml_call1(eprintf(_bG_),_pr_); print_raw_backtrace(stderr,raw_backtrace); var status=runtime.caml_ml_debug_info_status(0); if(status < 0) {var _ps_=abs(status); prerr_endline(caml_check_bound(errors,_ps_)[1 + _ps_])} return caml_ml_flush(stderr)} var uncaught_exception_handler=[0,default_uncaught_exception_han]; function set_uncaught_exception_handler(fn) {uncaught_exception_handler[1] = fn;return 0} var empty_backtrace=[0]; function handle_uncaught_exception(exn,debugger_in_use) {try {try {var raw_backtrace= debugger_in_use?empty_backtrace:caml_get_exception_raw_backtra(0); try {do_at_exit(0)}catch(_pq_){} try {var _pm_=caml_call2(uncaught_exception_handler[1],exn,raw_backtrace), _pl_=_pm_} catch(exn$0) {exn$0 = caml_wrap_exception(exn$0); var raw_backtrace$0=caml_get_exception_raw_backtra(0), _pj_=to_string$6(exn); caml_call1(eprintf(_bH_),_pj_); print_raw_backtrace(stderr,raw_backtrace); var _pk_=to_string$6(exn$0); caml_call1(eprintf(_bI_),_pk_); print_raw_backtrace(stderr,raw_backtrace$0); var _pl_=caml_ml_flush(stderr)} var _pn_=_pl_} catch(_pp_) {_pp_ = caml_wrap_exception(_pp_); if(_pp_ !== Out_of_memory)throw _pp_; var _pn_=prerr_endline(cst_Fatal_error_out_of_memory_)} return _pn_} catch(_po_){return 0}} caml_register_named_value (caml_string_of_jsbytes("Printexc.handle_uncaught_exception"), handle_uncaught_exception); function _bJ_(_pi_){return runtime.caml_raw_backtrace_next_slot(_pi_)} function _bK_(_ph_){return runtime.caml_convert_raw_backtrace_slot(_ph_)} function _bL_(_pg_,_pf_) {return runtime.caml_raw_backtrace_slot(_pg_,_pf_)} var _bM_= [0, backtrace_slot_is_raise, backtrace_slot_is_inline, backtrace_slot_location, backtrace_slot_defname, format_backtrace_slot]; function _bN_(_pe_){return caml_get_exception_raw_backtra(_pe_)} function _bO_(_pd_){return runtime.caml_backtrace_status(_pd_)} var Stdlib_Printexc= [0, to_string$6, to_string_default, print, catch$0, print_backtrace, get_backtrace, function(_pc_){return runtime.caml_record_backtrace(_pc_)}, _bO_, register_printer, use_printers, raw_backtrace_entries, _bN_, print_raw_backtrace, raw_backtrace_to_string, default_uncaught_exception_han, set_uncaught_exception_handler, backtrace_slots, backtrace_slots_of_raw_entry, _bM_, raw_backtrace_length, _bL_, _bK_, _bJ_, exn_slot_id, exn_slot_name]; caml_register_global(811,Stdlib_Printexc,"Stdlib__Printexc"); function const$0(c,param){return c} function flip(f,x,y){return caml_call2(f,y,x)} function negate(p,v){return 1 - caml_call1(p,v)} var Finally_raised= [248,cst_Stdlib_Fun_Finally_raised,caml_fresh_oo_id(0)]; register_printer (function(param) {if(param[1] === Finally_raised) {var exn=param[2]; return [0,cat(cst_Fun_Finally_raised,to_string$6(exn))]} return 0}); function protect(finally$0,work) {function finally_no_exn(param) {try {var _pb_=caml_call1(finally$0,0);return _pb_} catch(e) {e = caml_wrap_exception(e); var bt=caml_get_exception_raw_backtra(0),exn=[0,Finally_raised,e]; caml_restore_raw_backtrace(exn,bt); throw exn}} try {var result=caml_call1(work,0)} catch(work_exn) {work_exn = caml_wrap_exception(work_exn); var work_bt=caml_get_exception_raw_backtra(0); finally_no_exn(0); caml_restore_raw_backtrace(work_exn,work_bt); throw work_exn} finally_no_exn(0); return result} var Stdlib_Fun=[0,const$0,flip,negate,protect,Finally_raised]; caml_register_global(812,Stdlib_Fun,"Stdlib__Fun"); function print_stat(c) {var st=runtime.caml_gc_stat(0),_oV_=st[4]; caml_call1(fprintf(c,_bP_),_oV_); var _oW_=st[5]; caml_call1(fprintf(c,_bQ_),_oW_); var _oX_=st[14]; caml_call1(fprintf(c,_bR_),_oX_); var _oY_=st[17]; caml_call1(fprintf(c,_bS_),_oY_); fprintf(c,_bT_); var _oZ_=st[1], l1=caml_ml_string_length(caml_call1(sprintf(_bU_),_oZ_)), _o0_=st[1]; caml_call2(fprintf(c,_bV_),l1,_o0_); var _o1_=st[2]; caml_call2(fprintf(c,_bW_),l1,_o1_); var _o2_=st[3]; caml_call2(fprintf(c,_bX_),l1,_o2_); fprintf(c,_bY_); var _o3_=st[15], l2=caml_ml_string_length(caml_call1(sprintf(_bZ_),_o3_)), _o4_=st[15]; caml_call2(fprintf(c,_b0_),l2,_o4_); var _o5_=st[6]; caml_call2(fprintf(c,_b1_),l2,_o5_); var _o6_=st[8]; caml_call2(fprintf(c,_b2_),l2,_o6_); var _o7_=st[10]; caml_call2(fprintf(c,_b3_),l2,_o7_); var _o8_=st[12]; caml_call2(fprintf(c,_b4_),l2,_o8_); var _o9_=st[13]; caml_call2(fprintf(c,_b5_),l2,_o9_); fprintf(c,_b6_); var _o__=st[9]; caml_call1(fprintf(c,_b7_),_o__); var _o$_=st[11]; caml_call1(fprintf(c,_b8_),_o$_); var _pa_=st[7]; return caml_call1(fprintf(c,_b9_),_pa_)} function allocated_bytes(param) {var match=runtime.caml_gc_counters(0), ma=match[3], pro=match[2], mi=match[1]; return (mi + ma - pro) * 4} function create_alarm(f){return [0,1]} function delete_alarm(a){a[1] = 0;return 0} function _b__(param){return 0} function _b$_(param){return 0} function _ca_(param){return 0} function _cb_(param){return 0} var null_tracker=[0,function(param){return 0},_cb_,_ca_,_b$_,_b__]; function start(sampling_rate,opt,tracker) {if(opt) var sth=opt[1],callstack_size=sth; else var callstack_size=max_int; return runtime.caml_memprof_start(sampling_rate,callstack_size,tracker)} var _cc_=[0,null_tracker,start,runtime.caml_memprof_stop]; function _cd_(_oU_){return runtime.caml_final_release(_oU_)} function _ce_(_oT_,_oS_) {return runtime.caml_final_register_called_without_value(_oT_,_oS_)} var Stdlib_Gc= [0, print_stat, allocated_bytes, function(_oR_,_oQ_){return runtime.caml_final_register(_oR_,_oQ_)}, _ce_, _cd_, create_alarm, delete_alarm, _cc_]; caml_register_global(813,Stdlib_Gc,"Stdlib__Gc"); function string(str) {return caml_md5_string(str,0,caml_ml_string_length(str))} function bytes(b){return string(caml_string_of_bytes(b))} function substring(str,ofs,len) {if (0 <= ofs && 0 <= len && ! ((caml_ml_string_length(str) - len | 0) < ofs)) return caml_md5_string(str,ofs,len); return invalid_arg(cst_Digest_substring)} function subbytes(b,ofs,len) {return substring(caml_string_of_bytes(b),ofs,len)} function file(filename) {var ic=open_bin$0(filename); try {var d=runtime.caml_md5_chan(ic,-1)} catch(e){e = caml_wrap_exception(e);caml_ml_close_channel(ic);throw e} caml_ml_close_channel(ic); return d} function output$0(chan,digest){return output_string(chan,digest)} function input$0(chan){return really_input_string(chan,16)} function char_hex(n){var _oP_=10 <= n?87:48;return n + _oP_ | 0} function to_hex(d) {if(16 !== caml_ml_string_length(d))invalid_arg(cst_Digest_to_hex); var result=caml_create_bytes(32),i=0; for(;;) {var x=caml_string_get(d,i); caml_bytes_unsafe_set(result,i * 2 | 0,char_hex(x >>> 4 | 0)); caml_bytes_unsafe_set(result,(i * 2 | 0) + 1 | 0,char_hex(x & 15)); var _oO_=i + 1 | 0; if(15 !== i){var i=_oO_;continue} return caml_string_of_bytes(result)}} function from_hex(s) {if(32 !== caml_ml_string_length(s))invalid_arg(cst_Digest_from_hex); function digit(c) {if(65 <= c) {if(97 <= c) {if(! (103 <= c))return (c - 97 | 0) + 10 | 0} else if(! (71 <= c))return (c - 65 | 0) + 10 | 0} else if(! (9 < c - 48 >>> 0))return c - 48 | 0; throw [0,Invalid_argument,cst_Digest_from_hex$0]} var result=caml_create_bytes(16),i=0; for(;;) {var i$0=2 * i | 0,_oM_=digit(caml_string_get(s,i$0 + 1 | 0)); caml_bytes_set (result,i,chr((digit(caml_string_get(s,i$0)) << 4) + _oM_ | 0)); var _oN_=i + 1 | 0; if(15 !== i){var i=_oN_;continue} return caml_string_of_bytes(result)}} var Stdlib_Digest= [0, compare$9, equal$9, string, bytes, substring, subbytes, file, output$0, input$0, to_hex, from_hex]; caml_register_global(814,Stdlib_Digest,"Stdlib__Digest"); function new_state(param){return [0,caml_make_vect(55,0),0]} function assign(st1,st2) {blit$1(st2[1],0,st1[1],0,55);st1[2] = st2[2];return 0} function full_init(s,seed) {var seed$0=0 === seed.length - 1?[0,0]:seed,l=seed$0.length - 1,i$0=0; for(;;) {caml_check_bound(s[1],i$0)[1 + i$0] = i$0; var _oL_=i$0 + 1 | 0; if(54 !== i$0){var i$0=_oL_;continue} var accu=[0,cst_x$1],_oH_=54 + max$1(55,l) | 0,_oG_=0; if(! (_oH_ < 0)) {var i=_oG_; for(;;) {var j=i % 55 | 0, k=caml_mod(i,l), x=caml_check_bound(seed$0,k)[1 + k]; accu[1] = string(cat(accu[1],caml_string_of_jsbytes("" + x))); var _oI_=accu[1], _oC_=caml_string_get(_oI_,3) << 24, _oD_=caml_string_get(_oI_,2) << 16, _oE_=caml_string_get(_oI_,1) << 8, _oF_=((caml_string_get(_oI_,0) + _oE_ | 0) + _oD_ | 0) + _oC_ | 0, _oJ_=(caml_check_bound(s[1],j)[1 + j] ^ _oF_) & 1073741823; caml_check_bound(s[1],j)[1 + j] = _oJ_; var _oK_=i + 1 | 0; if(_oH_ !== i){var i=_oK_;continue} break}} s[2] = 0; return 0}} function make$3(seed) {var result=new_state(0);full_init(result,seed);return result} function make_self_init(param){return make$3(caml_sys_random_seed(0))} function copy$5(s){var result=new_state(0);assign(result,s);return result} function bits(s) {s[2] = (s[2] + 1 | 0) % 55 | 0; var _oz_=s[2], curval=caml_check_bound(s[1],_oz_)[1 + _oz_], _oA_=(s[2] + 24 | 0) % 55 | 0, newval= caml_check_bound(s[1],_oA_)[1 + _oA_] + (curval ^ (curval >>> 25 | 0) & 31) | 0, newval30=newval & 1073741823, _oB_=s[2]; caml_check_bound(s[1],_oB_)[1 + _oB_] = newval30; return newval30} function intaux(s,n) {for(;;) {var r=bits(s),v=caml_mod(r,n); if(((1073741823 - n | 0) + 1 | 0) < (r - v | 0))continue; return v}} function int$0(s,bound) {if(! (1073741823 < bound) && 0 < bound)return intaux(s,bound); return invalid_arg(cst_Random_int)} function full_int(s,bound) {if(0 < bound) {if(1073741823 < bound) for(;;) {var b1=bits(s),b2=bits(s); if(bound <= 2147483647) var bpos=(b2 & 1073725440) << 1 | b1 >>> 15 | 0,r=bpos; else var b3=bits(s), bpos$0= ((b3 & 1073741312) << 12 | b2 >>> 9 | 0) << 20 | b1 >>> 10 | 0, r=bpos$0; var v=caml_mod(r,bound); if(((2147483647 - bound | 0) + 1 | 0) < (r - v | 0))continue; return v} return intaux(s,bound)} return invalid_arg(cst_Random_full_int)} function int32(s,bound) {if(caml_lessequal(bound,0))return invalid_arg(cst_Random_int32); for(;;) {var b1=bits(s),b2=(bits(s) & 1) << 30,r=b1 | b2,v=caml_mod(r,bound); if(caml_greaterthan(r - v | 0,(2147483647 - bound | 0) + 1 | 0)) continue; return v}} function int64(s,bound) {if(caml_lessequal(bound,_cg_))return invalid_arg(cst_Random_int64); for(;;) {var b1=caml_int64_of_int32(bits(s)), b2=caml_int64_shift_left(caml_int64_of_int32(bits(s)),30), b3=caml_int64_shift_left(caml_int64_of_int32(bits(s) & 7),60), r=caml_int64_or(b1,caml_int64_or(b2,b3)), v=runtime.caml_int64_mod(r,bound); if (caml_greaterthan (caml_int64_sub(r,v), caml_int64_add(caml_int64_sub(max_int$2,bound),_cf_))) continue; return v}} function nativeint(s,bound){return int32(s,bound)} function float$0(s,bound) {var r1=bits(s),r2=bits(s); return (r1 / 1073741824. + r2) / 1073741824. * bound} function bool(s){return 0 === (bits(s) & 1)?1:0} function bits32(s) {var b1=bits(s) >>> 14 | 0,b2=bits(s) >>> 14 | 0;return b1 | b2 << 16} function bits64(s) {var b1=caml_int64_shift_right_unsigne(caml_int64_of_int32(bits(s)),9), b2=caml_int64_shift_right_unsigne(caml_int64_of_int32(bits(s)),9), b3=caml_int64_shift_right_unsigne(caml_int64_of_int32(bits(s)),8); return caml_int64_or (b1, caml_int64_or (caml_int64_shift_left(b2,21),caml_int64_shift_left(b3,42)))} function nativebits(s){return bits32(s)} var default$0=[0,_ch_.slice(),0]; function bits$0(param){return bits(default$0)} function int$1(bound){return int$0(default$0,bound)} function full_int$0(bound){return full_int(default$0,bound)} function int32$0(bound){return int32(default$0,bound)} function nativeint$0(bound){return nativeint(default$0,bound)} function int64$0(bound){return int64(default$0,bound)} function float$1(scale){return float$0(default$0,scale)} function bool$0(param){return bool(default$0)} function bits32$0(param){return bits32(default$0)} function bits64$0(param){return bits64(default$0)} function nativebits$0(param){return nativebits(default$0)} function full_init$0(seed){return full_init(default$0,seed)} function init$5(seed){return full_init(default$0,[0,seed])} function self_init(param){return full_init$0(caml_sys_random_seed(0))} function get_state(param){return copy$5(default$0)} function set_state(s){return assign(default$0,s)} var _ci_= [0, make$3, make_self_init, copy$5, bits, int$0, full_int, int32, nativeint, int64, float$0, bool, bits32, bits64, nativebits], Stdlib_Random= [0, init$5, full_init$0, self_init, bits$0, int$1, full_int$0, int32$0, nativeint$0, int64$0, float$1, bool$0, bits32$0, bits64$0, nativebits$0, _ci_, get_state, set_state]; caml_register_global(815,Stdlib_Random,"Stdlib__Random"); function ongoing_traversal(h) {var _ox_=h.length - 1 < 4?1:0,_oy_=_ox_ || (h[4] < 0?1:0);return _oy_} function flip_ongoing_traversal(h){h[4] = - h[4] | 0;return 0} try {var _c5_=caml_sys_getenv(cst_OCAMLRUNPARAM),params=_c5_} catch(_ov_) {_ov_ = caml_wrap_exception(_ov_); if(_ov_ !== Not_found)throw _ov_; try {var _c4_=caml_sys_getenv(cst_CAMLRUNPARAM),_cj_=_c4_} catch(_ow_) {_ow_ = caml_wrap_exception(_ow_); if(_ow_ !== Not_found)throw _ow_; var _cj_=cst$66} var params=_cj_} var randomized_default=contains$0(params,82), randomized=[0,randomized_default]; function randomize(param){randomized[1] = 1;return 0} function is_randomized(param){return randomized[1]} var prng=[246,function(_ou_){return caml_call1(_ci_[2],0)}]; function power_2_above(x,n) {var x$0=x; for(;;) {if(n <= x$0)return x$0; if(max_array_length < (x$0 * 2 | 0))return x$0; var x$1=x$0 * 2 | 0,x$0=x$1; continue}} function create$3(opt,initial_size) {if(opt)var sth=opt[1],random=sth;else var random=randomized[1]; var s=power_2_above(16,initial_size); if(random) var _os_=caml_obj_tag(prng), _ot_=250 === _os_?prng[1]:246 === _os_?force_lazy_block(prng):prng, seed=caml_call1(_ci_[4],_ot_); else var seed=0; return [0,0,caml_make_vect(s,0),seed,s]} function clear$2(h) {var _or_=0 < h[1]?1:0; return _or_?(h[1] = 0,fill$0(h[2],0,h[2].length - 1,0)):_or_} function reset$0(h) {var len=h[2].length - 1; if(4 <= h.length - 1 && len !== abs(h[4])) {h[1] = 0;h[2] = caml_make_vect(abs(h[4]),0);return 0} return clear$2(h)} function copy_bucketlist(param) {if(param) {var key=param[1], data=param[2], next=param[3], prec$0=[0,key,data,next], prec=prec$0, param$0=next; for(;;) {if(param$0) {var key$0=param$0[1], data$0=param$0[2], next$0=param$0[3], r=[0,key$0,data$0,next$0]; prec[3] = r; var prec=r,param$0=next$0; continue} return prec$0}} return 0} function copy$6(init) {var _oo_=init[4],_op_=init[3],_oq_=map$7(copy_bucketlist,init[2]); return [0,init[1],_oq_,_op_,_oo_]} function length$5(h){return h[1]} function insert_all_buckets(indexfun,inplace,odata,ndata) {var nsize=ndata.length - 1, ndata_tail=caml_make_vect(nsize,0), _oi_=odata.length - 1 - 1 | 0, _oh_=0; if(! (_oi_ < 0)) {var i$0=_oh_; a: for(;;) {var cell$1=caml_check_bound(odata,i$0)[1 + i$0],cell=cell$1; for(;;) {if(cell) {var key=cell[1], data=cell[2], next=cell[3], cell$0=inplace?cell:[0,key,data,0], nidx=caml_call1(indexfun,key), match=caml_check_bound(ndata_tail,nidx)[1 + nidx]; if(match) match[3] = cell$0; else caml_check_bound(ndata,nidx)[1 + nidx] = cell$0; caml_check_bound(ndata_tail,nidx)[1 + nidx] = cell$0; var cell=next; continue} var _on_=i$0 + 1 | 0; if(_oi_ !== i$0){var i$0=_on_;continue a} break} break}} if(inplace) {var _ok_=nsize - 1 | 0,_oj_=0; if(! (_ok_ < 0)) {var i=_oj_; for(;;) {var match$0=caml_check_bound(ndata_tail,i)[1 + i]; if(match$0)match$0[3] = 0; var _om_=i + 1 | 0; if(_ok_ !== i){var i=_om_;continue} break}} var _ol_=0} else var _ol_=inplace; return _ol_} function resize$0(indexfun,h) {var odata=h[2], osize=odata.length - 1, nsize=osize * 2 | 0, _og_=nsize < max_array_length?1:0; if(_og_) {var ndata=caml_make_vect(nsize,0),inplace=1 - ongoing_traversal(h); h[2] = ndata; return insert_all_buckets(caml_call1(indexfun,h),inplace,odata,ndata)} return _og_} function iter$10(f,h) {function do_bucket(param) {var param$0=param; for(;;) {if(param$0) {var key=param$0[1],data=param$0[2],next=param$0[3]; caml_call2(f,key,data); var param$0=next; continue} return 0}} var old_trav=ongoing_traversal(h); if(1 - old_trav)flip_ongoing_traversal(h); try {var d=h[2],_oc_=d.length - 1 - 1 | 0,_ob_=0; if(! (_oc_ < 0)) {var i=_ob_; for(;;) {do_bucket(caml_check_bound(d,i)[1 + i]); var _of_=i + 1 | 0; if(_oc_ !== i){var i=_of_;continue} break}} var _od_=1 - old_trav,_oe_=_od_?flip_ongoing_traversal(h):_od_; return _oe_} catch(exn) {exn = caml_wrap_exception(exn); if(old_trav)throw exn; flip_ongoing_traversal(h); throw exn}} function filter_map_inplace_bucket(f,h,i,prec,slot) {var prec$0=prec,slot$0=slot; for(;;) {if(slot$0) {var key=slot$0[1], data=slot$0[2], next=slot$0[3], match=caml_call2(f,key,data); if(match) {var data$0=match[1]; if(prec$0) prec$0[3] = slot$0; else caml_check_bound(h[2],i)[1 + i] = slot$0; slot$0[2] = data$0; var prec$0=slot$0,slot$0=next; continue} h[1] = h[1] - 1 | 0; var slot$0=next; continue} return prec$0 ?(prec$0[3] = 0,0) :(caml_check_bound(h[2],i)[1 + i] = 0,0)}} function filter_map_inplace(f,h) {var d=h[2],old_trav=ongoing_traversal(h); if(1 - old_trav)flip_ongoing_traversal(h); try {var _n9_=d.length - 1 - 1 | 0,_n8_=0; if(! (_n9_ < 0)) {var i=_n8_; for(;;) {filter_map_inplace_bucket(f,h,i,0,caml_check_bound(h[2],i)[1 + i]); var _oa_=i + 1 | 0; if(_n9_ !== i){var i=_oa_;continue} break}} var _n__=1 - old_trav,_n$_=_n__?flip_ongoing_traversal(h):_n__; return _n$_} catch(exn) {exn = caml_wrap_exception(exn); if(old_trav)throw exn; flip_ongoing_traversal(h); throw exn}} function fold$4(f,h,init) {function do_bucket(b,accu) {var b$0=b,accu$0=accu; for(;;) {if(b$0) {var key=b$0[1], data=b$0[2], next=b$0[3], accu$1=caml_call3(f,key,data,accu$0), b$0=next, accu$0=accu$1; continue} return accu$0}} var old_trav=ongoing_traversal(h); if(1 - old_trav)flip_ongoing_traversal(h); try {var d=h[2],accu=[0,init],_n4_=d.length - 1 - 1 | 0,_n3_=0; if(! (_n4_ < 0)) {var i=_n3_; for(;;) {var _n6_=accu[1]; accu[1] = do_bucket(caml_check_bound(d,i)[1 + i],_n6_); var _n7_=i + 1 | 0; if(_n4_ !== i){var i=_n7_;continue} break}} if(1 - old_trav)flip_ongoing_traversal(h); var _n5_=accu[1]; return _n5_} catch(exn) {exn = caml_wrap_exception(exn); if(old_trav)throw exn; flip_ongoing_traversal(h); throw exn}} function bucket_length(accu,param) {var accu$0=accu,param$0=param; for(;;) {if(param$0) {var param$1=param$0[3], accu$1=accu$0 + 1 | 0, accu$0=accu$1, param$0=param$1; continue} return accu$0}} function stats(h) {var _nZ_=h[2], _n0_=0, mbl= fold_left$3 (function(m,b){return max$1(m,bucket_length(0,b))},_n0_,_nZ_), histo=caml_make_vect(mbl + 1 | 0,0), _n1_=h[2]; iter$5 (function(b) {var l=bucket_length(0,b), _n2_=caml_check_bound(histo,l)[1 + l] + 1 | 0; caml_check_bound(histo,l)[1 + l] = _n2_; return 0}, _n1_); return [0,h[1],h[2].length - 1,mbl,histo]} function to_seq$9(tbl) {var tbl_data=tbl[2]; function aux(i,buck,param) {var i$0=i,buck$0=buck; for(;;) {if(buck$0) {var key=buck$0[1],data=buck$0[2],next=buck$0[3]; return [0,[0,key,data],function(_nY_){return aux(i$0,next,_nY_)}]} if(i$0 === tbl_data.length - 1)return 0; var buck$1=caml_check_bound(tbl_data,i$0)[1 + i$0], i$1=i$0 + 1 | 0, i$0=i$1, buck$0=buck$1; continue}} var _nV_=0,_nW_=0; return function(_nX_){return aux(_nW_,_nV_,_nX_)}} function to_seq_keys(m) {var _nR_=to_seq$9(m); function _nS_(_nU_){return _nU_[1]} return function(_nT_){return map$1(_nS_,_nR_,_nT_)}} function to_seq_values(m) {var _nN_=to_seq$9(m); function _nO_(_nQ_){return _nQ_[2]} return function(_nP_){return map$1(_nO_,_nN_,_nP_)}} function MakeSeeded(H) {function key_index(h,key) {var _nM_=h[2].length - 1 - 1 | 0; return caml_call2(H[2],h[3],key) & _nM_} function add(h,key,data) {var i=key_index(h,key), bucket=[0,key,data,caml_check_bound(h[2],i)[1 + i]]; caml_check_bound(h[2],i)[1 + i] = bucket; h[1] = h[1] + 1 | 0; var _nL_=h[2].length - 1 << 1 < h[1]?1:0; return _nL_?resize$0(key_index,h):_nL_} function remove(h,key) {var i=key_index(h,key), c$0=caml_check_bound(h[2],i)[1 + i], prec=0, c=c$0; for(;;) {if(c) {var k=c[1],next=c[3]; if(caml_call2(H[1],k,key)) {h[1] = h[1] - 1 | 0; return prec ?(prec[3] = next,0) :(caml_check_bound(h[2],i)[1 + i] = next,0)} var prec=c,c=next; continue} return 0}} function find(h,key) {var _nK_=key_index(h,key),match=caml_check_bound(h[2],_nK_)[1 + _nK_]; if(match) {var k1=match[1],d1=match[2],next1=match[3]; if(caml_call2(H[1],key,k1))return d1; if(next1) {var k2=next1[1],d2=next1[2],next2=next1[3]; if(caml_call2(H[1],key,k2))return d2; if(next2) {var k3=next2[1],d3=next2[2],next3=next2[3]; if(caml_call2(H[1],key,k3))return d3; var param=next3; for(;;) {if(param) {var k=param[1],data=param[2],next=param[3]; if(caml_call2(H[1],key,k))return data; var param=next; continue} throw Not_found}} throw Not_found} throw Not_found} throw Not_found} function find_opt(h,key) {var _nJ_=key_index(h,key),match=caml_check_bound(h[2],_nJ_)[1 + _nJ_]; if(match) {var k1=match[1],d1=match[2],next1=match[3]; if(caml_call2(H[1],key,k1))return [0,d1]; if(next1) {var k2=next1[1],d2=next1[2],next2=next1[3]; if(caml_call2(H[1],key,k2))return [0,d2]; if(next2) {var k3=next2[1],d3=next2[2],next3=next2[3]; if(caml_call2(H[1],key,k3))return [0,d3]; var param=next3; for(;;) {if(param) {var k=param[1],data=param[2],next=param[3]; if(caml_call2(H[1],key,k))return [0,data]; var param=next; continue} return 0}} return 0} return 0} return 0} function find_all(h,key) {function find_in_bucket(param) {var param$0=param; for(;;) {if(param$0) {var k=param$0[1],d=param$0[2],next=param$0[3]; if(caml_call2(H[1],k,key))return [0,d,find_in_bucket(next)]; var param$0=next; continue} return 0}} var _nI_=key_index(h,key); return find_in_bucket(caml_check_bound(h[2],_nI_)[1 + _nI_])} function replace(h,key,data) {var i=key_index(h,key), param$0=caml_check_bound(h[2],i)[1 + i], param=param$0; for(;;) {if(param) {var k=param[1],next=param[3]; if(! caml_call2(H[1],k,key)){var param=next;continue} param[1] = key; param[2] = data; var _nF_=0} else var _nF_=1; if(_nF_) {caml_check_bound(h[2],i)[1 + i] = [0,key,data,param$0]; h[1] = h[1] + 1 | 0; var _nG_=h[2].length - 1 << 1 < h[1]?1:0; if(_nG_)return resize$0(key_index,h); var _nH_=_nG_} else var _nH_=_nF_; return _nH_}} function mem(h,key) {var _nE_=key_index(h,key), param$0=caml_check_bound(h[2],_nE_)[1 + _nE_], param=param$0; for(;;) {if(param) {var k=param[1],next=param[3],_nD_=caml_call2(H[1],k,key); if(_nD_)return _nD_; var param=next; continue} return 0}} function add_seq(tbl,i) {return iter (function(param) {var v=param[2],k=param[1];return add(tbl,k,v)}, i)} function replace_seq(tbl,i) {return iter (function(param) {var v=param[2],k=param[1];return replace(tbl,k,v)}, i)} function of_seq(i){var tbl=create$3(0,16);replace_seq(tbl,i);return tbl} return [0, create$3, clear$2, reset$0, copy$6, add, remove, find, find_opt, find_all, replace, mem, iter$10, filter_map_inplace, fold$4, length$5, stats, to_seq$9, to_seq_keys, to_seq_values, add_seq, replace_seq, of_seq]} function Make$0(H) {var equal=H[1]; function hash(seed,x){return caml_call1(H[2],x)} var include=MakeSeeded([0,equal,hash]), clear=include[2], reset=include[3], copy=include[4], add=include[5], remove=include[6], find=include[7], find_opt=include[8], find_all=include[9], replace=include[10], mem=include[11], iter=include[12], filter_map_inplace=include[13], fold=include[14], length=include[15], stats=include[16], to_seq=include[17], to_seq_keys=include[18], to_seq_values=include[19], add_seq=include[20], replace_seq=include[21], _nC_=include[1]; function create(sz){return caml_call2(_nC_,_ck_,sz)} function of_seq(i) {var tbl=create(16);caml_call2(replace_seq,tbl,i);return tbl} return [0, create, clear, reset, copy, add, remove, find, find_opt, find_all, replace, mem, iter, filter_map_inplace, fold, length, stats, to_seq, to_seq_keys, to_seq_values, add_seq, replace_seq, of_seq]} function hash$1(x){return caml_hash(10,100,0,x)} function hash_param(n1,n2,x){return caml_hash(n1,n2,0,x)} function seeded_hash(seed,x){return caml_hash(10,100,seed,x)} function key_index(h,key) {return 4 <= h.length - 1 ?caml_hash(10,100,h[3],key) & (h[2].length - 1 - 1 | 0) :invalid_arg(cst_Hashtbl_unsupported_hash_t)} function add$0(h,key,data) {var i=key_index(h,key), bucket=[0,key,data,caml_check_bound(h[2],i)[1 + i]]; caml_check_bound(h[2],i)[1 + i] = bucket; h[1] = h[1] + 1 | 0; var _nB_=h[2].length - 1 << 1 < h[1]?1:0; return _nB_?resize$0(key_index,h):_nB_} function remove(h,key) {var i=key_index(h,key),c$0=caml_check_bound(h[2],i)[1 + i],prec=0,c=c$0; for(;;) {if(c) {var k=c[1],next=c[3]; if(0 === caml_compare(k,key)) {h[1] = h[1] - 1 | 0; return prec ?(prec[3] = next,0) :(caml_check_bound(h[2],i)[1 + i] = next,0)} var prec=c,c=next; continue} return 0}} function find$1(h,key) {var _nA_=key_index(h,key),match=caml_check_bound(h[2],_nA_)[1 + _nA_]; if(match) {var k1=match[1],d1=match[2],next1=match[3]; if(0 === caml_compare(key,k1))return d1; if(next1) {var k2=next1[1],d2=next1[2],next2=next1[3]; if(0 === caml_compare(key,k2))return d2; if(next2) {var k3=next2[1],d3=next2[2],next3=next2[3]; if(0 === caml_compare(key,k3))return d3; var param=next3; for(;;) {if(param) {var k=param[1],data=param[2],next=param[3]; if(0 === caml_compare(key,k))return data; var param=next; continue} throw Not_found}} throw Not_found} throw Not_found} throw Not_found} function find_opt$1(h,key) {var _nz_=key_index(h,key),match=caml_check_bound(h[2],_nz_)[1 + _nz_]; if(match) {var k1=match[1],d1=match[2],next1=match[3]; if(0 === caml_compare(key,k1))return [0,d1]; if(next1) {var k2=next1[1],d2=next1[2],next2=next1[3]; if(0 === caml_compare(key,k2))return [0,d2]; if(next2) {var k3=next2[1],d3=next2[2],next3=next2[3]; if(0 === caml_compare(key,k3))return [0,d3]; var param=next3; for(;;) {if(param) {var k=param[1],data=param[2],next=param[3]; if(0 === caml_compare(key,k))return [0,data]; var param=next; continue} return 0}} return 0} return 0} return 0} function find_all$0(h,key) {function find_in_bucket(param) {var param$0=param; for(;;) {if(param$0) {var k=param$0[1],data=param$0[2],next=param$0[3]; if(0 === caml_compare(k,key))return [0,data,find_in_bucket(next)]; var param$0=next; continue} return 0}} var _ny_=key_index(h,key); return find_in_bucket(caml_check_bound(h[2],_ny_)[1 + _ny_])} function replace(h,key,data) {var i=key_index(h,key), param$0=caml_check_bound(h[2],i)[1 + i], param=param$0; for(;;) {if(param) {var k=param[1],next=param[3]; if(0 !== caml_compare(k,key)){var param=next;continue} param[1] = key; param[2] = data; var _nv_=0} else var _nv_=1; if(_nv_) {caml_check_bound(h[2],i)[1 + i] = [0,key,data,param$0]; h[1] = h[1] + 1 | 0; var _nw_=h[2].length - 1 << 1 < h[1]?1:0; if(_nw_)return resize$0(key_index,h); var _nx_=_nw_} else var _nx_=_nv_; return _nx_}} function mem$2(h,key) {var _nu_=key_index(h,key), param$0=caml_check_bound(h[2],_nu_)[1 + _nu_], param=param$0; for(;;) {if(param) {var k=param[1],next=param[3],_nt_=0 === caml_compare(k,key)?1:0; if(_nt_)return _nt_; var param=next; continue} return 0}} function add_seq$2(tbl,i) {return iter (function(param) {var v=param[2],k=param[1];return add$0(tbl,k,v)}, i)} function replace_seq(tbl,i) {return iter (function(param) {var v=param[2],k=param[1];return replace(tbl,k,v)}, i)} function of_seq$7(i){var tbl=create$3(0,16);replace_seq(tbl,i);return tbl} function rebuild(opt,h) {if(opt)var sth=opt[1],random=sth;else var random=randomized[1]; var s=power_2_above(16,h[2].length - 1); if(random) var _nm_=caml_obj_tag(prng), _nn_=250 === _nm_?prng[1]:246 === _nm_?force_lazy_block(prng):prng, seed=caml_call1(_ci_[4],_nn_); else var seed=4 <= h.length - 1?h[3]:0; var _no_=4 <= h.length - 1?h[4]:s, h$0=[0,h[1],caml_make_vect(s,0),seed,_no_], _np_=h$0[2], _nq_=h[2], _nr_=0; insert_all_buckets (function(_ns_){return key_index(h$0,_ns_)},_nr_,_nq_,_np_); return h$0} var Stdlib_Hashtbl= [0, create$3, clear$2, reset$0, copy$6, add$0, find$1, find_opt$1, find_all$0, mem$2, remove, replace, iter$10, filter_map_inplace, fold$4, length$5, randomize, is_randomized, rebuild, stats, to_seq$9, to_seq_keys, to_seq_values, add_seq$2, replace_seq, of_seq$7, Make$0, MakeSeeded, hash$1, seeded_hash, hash_param, caml_hash]; caml_register_global(816,Stdlib_Hashtbl,"Stdlib__Hashtbl"); function weak_create(l) {var _nk_=0 <= l?1:0,_nl_=_nk_?l <= _q_[15]?1:0:_nk_; if(1 - _nl_)invalid_arg(cst_Weak_create); return runtime.caml_weak_create(l)} function length$6(x){return x.length - 1 - 2 | 0} function raise_if_invalid_offset$0(e,o,msg) {var _nh_=0 <= o?1:0,_ni_=_nh_?o < length$6(e)?1:0:_nh_,_nj_=1 - _ni_; return _nj_?invalid_arg(msg):_nj_} function set$1(e,o,x) {raise_if_invalid_offset$0(e,o,cst_Weak_set); if(x){var x$0=x[1];return caml_ephe_set_key(e,o,x$0)} return caml_ephe_unset_key(e,o)} function get$2(e,o) {raise_if_invalid_offset$0(e,o,cst_Weak_get); return runtime.caml_weak_get(e,o)} function get_copy(e,o) {raise_if_invalid_offset$0(e,o,cst_Weak_get_copy); return runtime.caml_weak_get_copy(e,o)} function check$0(e,o) {raise_if_invalid_offset$0(e,o,cst_Weak_check); return runtime.caml_weak_check(e,o)} function blit$4(e1,o1,e2,o2,l) {if (0 <= l && 0 <= o1 && ! ((length$6(e1) - l | 0) < o1) && 0 <= o2 && ! ((length$6(e2) - l | 0) < o2)) {var _nf_=0 !== l?1:0, _ng_=_nf_?runtime.caml_weak_blit(e1,o1,e2,o2,l):_nf_; return _ng_} return invalid_arg(cst_Weak_blit)} function fill$2(ar,ofs,len,x) {if(0 <= ofs && 0 <= len && ! ((length$6(ar) - len | 0) < ofs)) {var _nd_=(ofs + len | 0) - 1 | 0; if(! (_nd_ < ofs)) {var i=ofs; for(;;) {set$1(ar,i,x); var _ne_=i + 1 | 0; if(_nd_ !== i){var i=_ne_;continue} break}} return 0} throw [0,Invalid_argument,cst_Weak_fill]} function Make$1(H) {var emptybucket=weak_create(0); function get_index(t,h){return caml_mod(h & 2147483647,t[1].length - 1)} var limit=7; function create(sz) {var sz$0=7 <= sz?sz:7, sz$1=max_array_length < sz$0?max_array_length:sz$0; return [0, caml_make_vect(sz$1,emptybucket), caml_make_vect(sz$1,[0]), limit, 0, 0]} function clear(t) {var _nb_=t[1].length - 1 - 1 | 0,_na_=0; if(! (_nb_ < 0)) {var i=_na_; for(;;) {caml_check_bound(t[1],i)[1 + i] = emptybucket; caml_check_bound(t[2],i)[1 + i] = [0]; var _nc_=i + 1 | 0; if(_nb_ !== i){var i=_nc_;continue} break}} t[3] = limit; t[4] = 0; return 0} function fold(f,t,init) {var _m$_=t[1],i=0; return fold_right$2 (function(b,accu$1) {var i$0=i,accu=accu$1; for(;;) {if(length$6(b) <= i$0)return accu; var match=get$2(b,i$0); if(match) {var v=match[1], accu$0=caml_call2(f,v,accu), i$1=i$0 + 1 | 0, i$0=i$1, accu=accu$0; continue} var i$2=i$0 + 1 | 0,i$0=i$2; continue}}, _m$_, init)} function iter(f,t) {var _m__=t[1],i=0; return iter$5 (function(b) {var i$0=i; for(;;) {if(length$6(b) <= i$0)return 0; var match=get$2(b,i$0); if(match) {var v=match[1]; caml_call1(f,v); var i$1=i$0 + 1 | 0,i$0=i$1; continue} var i$2=i$0 + 1 | 0,i$0=i$2; continue}}, _m__)} function count_bucket(i,b,accu) {var i$0=i,accu$0=accu; for(;;) {if(length$6(b) <= i$0)return accu$0; var _m9_=check$0(b,i$0)?1:0, accu$1=accu$0 + _m9_ | 0, i$1=i$0 + 1 | 0, i$0=i$1, accu$0=accu$1; continue}} function count(t) {var _m4_=0,_m5_=t[1],_m6_=0; return fold_right$2 (function(_m7_,_m8_){return count_bucket(_m6_,_m7_,_m8_)}, _m5_, _m4_)} function add_aux(t,setter,d,h,index) {var bucket$0=caml_check_bound(t[1],index)[1 + index], hashes=caml_check_bound(t[2],index)[1 + index], sz=length$6(bucket$0), i$3=0; for(;;) {if(sz <= i$3) {var newsz= min$1(((3 * sz | 0) / 2 | 0) + 3 | 0,max_array_length - 2 | 0); if(newsz <= sz)failwith(cst_Weak_Make_hash_bucket_cann); var newbucket$0=weak_create(newsz), newhashes=caml_make_vect(newsz,0); blit$4(bucket$0,0,newbucket$0,0,sz); blit$1(hashes,0,newhashes,0,sz); caml_call3(setter,newbucket$0,sz,d); caml_check_bound(newhashes,sz)[1 + sz] = h; caml_check_bound(t[1],index)[1 + index] = newbucket$0; caml_check_bound(t[2],index)[1 + index] = newhashes; var _m0_=sz <= t[3]?1:0,_m1_=_m0_?t[3] < newsz?1:0:_m0_; if(_m1_) {t[4] = t[4] + 1 | 0; var i$4=0; for(;;) {var _mQ_=t[5], bucket=caml_check_bound(t[1],_mQ_)[1 + _mQ_], _mR_=t[5], hbucket=caml_check_bound(t[2],_mR_)[1 + _mR_], n=length$6(bucket), prev_len=(((n - 3 | 0) * 2 | 0) + 2 | 0) / 3 | 0, live=count_bucket(0,bucket,0); if(live <= prev_len) {var j$2=length$6(bucket) - 1 | 0,i$0=0,j=j$2; for(;;) {if(prev_len <= j) {if(check$0(bucket,i$0)) {var i$1=i$0 + 1 | 0,i$0=i$1;continue} if(check$0(bucket,j)) {blit$4(bucket,j,bucket,i$0,1); var _mS_=caml_check_bound(hbucket,j)[1 + j]; caml_check_bound(hbucket,i$0)[1 + i$0] = _mS_; var j$0=j - 1 | 0,i$2=i$0 + 1 | 0,i$0=i$2,j=j$0; continue} var j$1=j - 1 | 0,j=j$1; continue} if(0 === prev_len) {var _mT_=t[5]; caml_check_bound(t[1],_mT_)[1 + _mT_] = emptybucket; var _mU_=t[5]; caml_check_bound(t[2],_mU_)[1 + _mU_] = [0]} else {var newbucket=weak_create(prev_len); blit$4(bucket,0,newbucket,0,prev_len); var _mX_=t[5]; caml_check_bound(t[1],_mX_)[1 + _mX_] = newbucket; var _mY_=sub$1(hbucket,0,prev_len),_mZ_=t[5]; caml_check_bound(t[2],_mZ_)[1 + _mZ_] = _mY_} var _mV_=t[3] < n?1:0,_mW_=_mV_?prev_len <= t[3]?1:0:_mV_; if(_mW_)t[4] = t[4] - 1 | 0; break}} t[5] = caml_mod(t[5] + 1 | 0,t[1].length - 1); var _m3_=i$4 + 1 | 0; if(2 !== i$4){var i$4=_m3_;continue} break}} var _m2_=((t[1].length - 1) / 2 | 0) < t[4]?1:0; if(_m2_) {var n$0=t[1].length - 1, newlen=min$1(((3 * n$0 | 0) / 2 | 0) + 3 | 0,max_array_length); if(n$0 < newlen) {var newt=create(newlen),_mP_=t[1],i=0; iteri$3 (function(j,ob) {var i$0=i; for(;;) {if(length$6(ob) <= i$0)return 0; var match=check$0(ob,i$0); if(match) {var oh=caml_check_bound(t[2],j)[1 + j], setter$0= function(i) {function setter(nb,ni,param){return blit$4(ob,i,nb,ni,1)} return setter}, setter=setter$0(i$0), h=caml_check_bound(oh,i$0)[1 + i$0]; add_aux(newt,setter,0,h,get_index(newt,h)); var i$1=i$0 + 1 | 0,i$0=i$1; continue} var i$2=i$0 + 1 | 0,i$0=i$2; continue}}, _mP_); t[1] = newt[1]; t[2] = newt[2]; t[3] = newt[3]; t[4] = newt[4]; t[5] = caml_mod(t[5],newt[1].length - 1); return 0} t[3] = max_int; t[4] = 0; return 0} return _m2_} if(check$0(bucket$0,i$3)){var i$5=i$3 + 1 | 0,i$3=i$5;continue} caml_call3(setter,bucket$0,i$3,d); caml_check_bound(hashes,i$3)[1 + i$3] = h; return 0}} function add(t,d) {var h=caml_call1(H[2],d); return add_aux(t,set$1,[0,d],h,get_index(t,h))} function find_or(t,d,ifnotfound) {var h=caml_call1(H[2],d), index=get_index(t,h), bucket=caml_check_bound(t[1],index)[1 + index], hashes=caml_check_bound(t[2],index)[1 + index], sz=length$6(bucket), i=0; for(;;) {if(sz <= i)return caml_call2(ifnotfound,h,index); if(h === caml_check_bound(hashes,i)[1 + i]) {var match=get_copy(bucket,i); if(match) {var v=match[1]; if(caml_call2(H[1],v,d)) {var match$0=get$2(bucket,i); if(match$0){var v$0=match$0[1];return v$0} var i$0=i + 1 | 0,i=i$0; continue}} var i$1=i + 1 | 0,i=i$1; continue} var i$2=i + 1 | 0,i=i$2; continue}} function merge(t,d) {return find_or (t, d, function(h,index){add_aux(t,set$1,[0,d],h,index);return d})} function find(t,d) {return find_or(t,d,function(h,index){throw Not_found})} function find_opt(t,d) {var h=caml_call1(H[2],d), index=get_index(t,h), bucket=caml_check_bound(t[1],index)[1 + index], hashes=caml_check_bound(t[2],index)[1 + index], sz=length$6(bucket), i=0; for(;;) {if(sz <= i)return 0; if(h === caml_check_bound(hashes,i)[1 + i]) {var match=get_copy(bucket,i); if(match) {var v=match[1]; if(caml_call2(H[1],v,d)) {var v$0=get$2(bucket,i); if(v$0)return v$0; var i$0=i + 1 | 0,i=i$0; continue}} var i$1=i + 1 | 0,i=i$1; continue} var i$2=i + 1 | 0,i=i$2; continue}} function find_shadow(t,d,iffound,ifnotfound) {var h=caml_call1(H[2],d), index=get_index(t,h), bucket=caml_check_bound(t[1],index)[1 + index], hashes=caml_check_bound(t[2],index)[1 + index], sz=length$6(bucket), i=0; for(;;) {if(sz <= i)return ifnotfound; if(h === caml_check_bound(hashes,i)[1 + i]) {var match=get_copy(bucket,i); if(match) {var v=match[1]; if(caml_call2(H[1],v,d))return caml_call2(iffound,bucket,i)} var i$0=i + 1 | 0,i=i$0; continue} var i$1=i + 1 | 0,i=i$1; continue}} function remove(t,d) {var _mO_=0; return find_shadow(t,d,function(w,i){return set$1(w,i,0)},_mO_)} function mem(t,d) {var _mN_=0;return find_shadow(t,d,function(w,i){return 1},_mN_)} function find_all(t,d) {var h=caml_call1(H[2],d), index=get_index(t,h), bucket=caml_check_bound(t[1],index)[1 + index], hashes=caml_check_bound(t[2],index)[1 + index], sz=length$6(bucket), i=0, accu=0; for(;;) {if(sz <= i)return accu; if(h === caml_check_bound(hashes,i)[1 + i]) {var match=get_copy(bucket,i); if(match) {var v=match[1]; if(caml_call2(H[1],v,d)) {var match$0=get$2(bucket,i); if(match$0) {var v$0=match$0[1], accu$0=[0,v$0,accu], i$0=i + 1 | 0, i=i$0, accu=accu$0; continue} var i$1=i + 1 | 0,i=i$1; continue}} var i$2=i + 1 | 0,i=i$2; continue} var i$3=i + 1 | 0,i=i$3; continue}} function stats(t) {var len=t[1].length - 1,lens=map$7(length$6,t[1]); sort(caml_int_compare,lens); var _mF_=0, totlen= fold_left$3(function(_mM_,_mL_){return _mM_ + _mL_ | 0},_mF_,lens), _mG_=len - 1 | 0, _mI_=len / 2 | 0, _mH_=caml_check_bound(lens,_mG_)[1 + _mG_], _mJ_=caml_check_bound(lens,_mI_)[1 + _mI_], _mK_=caml_check_bound(lens,0)[1]; return [0,len,count(t),totlen,_mK_,_mJ_,_mH_]} return [0, create, clear, merge, add, remove, find, find_opt, find_all, mem, iter, fold, count, stats]} var Stdlib_Weak= [0, weak_create, length$6, set$1, get$2, get_copy, check$0, fill$2, blit$4, Make$1]; caml_register_global(817,Stdlib_Weak,"Stdlib__Weak"); function id$0(x){return x} var String_tag=[248,cst_Stdlib_Format_String_tag,caml_fresh_oo_id(0)], size=0, unknown=-1; function pp_enqueue(state,token) {state[13] = state[13] + token[3] | 0;return add(token,state[28])} var pp_infinity=1000000010; function pp_output_string(state,s) {return caml_call3(state[17],s,0,caml_ml_string_length(s))} function pp_output_newline(state){return caml_call1(state[19],0)} function format_pp_text(state,size,text) {state[9] = state[9] - size | 0; pp_output_string(state,text); state[11] = 0; return 0} function format_string(state,s) {var _mE_=caml_string_notequal(s,cst$67); return _mE_?format_pp_text(state,caml_ml_string_length(s),s):_mE_} function break_new_line(state,param,width) {var after=param[3],offset=param[2],before=param[1]; format_string(state,before); pp_output_newline(state); state[11] = 1; var indent=(state[6] - width | 0) + offset | 0, real_indent=min$1(state[8],indent); state[10] = real_indent; state[9] = state[6] - state[10] | 0; caml_call1(state[21],state[10]); return format_string(state,after)} function break_line(state,width){return break_new_line(state,_cl_,width)} function break_same_line(state,param) {var after=param[3],width=param[2],before=param[1]; format_string(state,before); state[9] = state[9] - width | 0; caml_call1(state[20],width); return format_string(state,after)} function format_pp_token(state,size$0,param) {if(typeof param === "number") switch(param) {case 0: var match$3=top_opt(state[3]); if(match$3) {var match$4=match$3[1], tabs=match$4[1], add_tab= function(n,ls) {if(ls) {var l=ls[2],x=ls[1]; return caml_lessthan(n,x)?[0,n,ls]:[0,x,add_tab(n,l)]} return [0,n,0]}; tabs[1] = add_tab(state[6] - state[9] | 0,tabs[1]); return 0} return 0; case 1:pop_opt(state[2]);return 0; case 2:pop_opt(state[3]);return 0; case 3: var match$5=top_opt(state[2]); if(match$5) {var match$6=match$5[1],width$0=match$6[2]; return break_line(state,width$0)} return pp_output_newline(state); case 4: var _mB_=state[10] !== (state[6] - state[9] | 0)?1:0; if(_mB_) {var match$1=take_opt(state[28]); if(match$1) {var match$2=match$1[1],size=match$2[1],length=match$2[3]; state[12] = state[12] - length | 0; state[9] = state[9] + size | 0; return 0} return 0} return _mB_; default: var match$7=pop_opt(state[5]); if(match$7) {var tag_name=match$7[1],marker=caml_call1(state[25],tag_name); return pp_output_string(state,marker)} return 0} else switch(param[0]) {case 0:var s=param[1];return format_pp_text(state,size$0,s); case 1: var breaks=param[2], fits=param[1], off=breaks[2], before=breaks[1], match$8=top_opt(state[2]); if(match$8) {var match$9=match$8[1],width$1=match$9[2],box_type$0=match$9[1]; switch(box_type$0) {case 0:return break_same_line(state,fits); case 1:return break_new_line(state,breaks,width$1); case 2:return break_new_line(state,breaks,width$1); case 3: return state[9] < (size$0 + caml_ml_string_length(before) | 0) ?break_new_line(state,breaks,width$1) :break_same_line(state,fits); case 4: return state[11] ?break_same_line(state,fits) :state[9] < (size$0 + caml_ml_string_length(before) | 0) ?break_new_line(state,breaks,width$1) :((state[6] - width$1 | 0) + off | 0) < state[10] ?break_new_line(state,breaks,width$1) :break_same_line(state,fits); default:return break_same_line(state,fits)}} return 0; case 2: var off$0=param[2], n=param[1], insertion_point=state[6] - state[9] | 0, match$10=top_opt(state[3]); if(match$10) {var match$11=match$10[1],tabs$0=match$11[1],_mC_=tabs$0[1]; if(_mC_) {var first=_mC_[1],param$0=tabs$0[1]; for(;;) {if(param$0) {var tail=param$0[2],head=param$0[1]; if(! (insertion_point <= head)){var param$0=tail;continue} var _mD_=head} else var _mD_=first; var tab=_mD_; break}} else var tab=insertion_point; var offset=tab - insertion_point | 0; return 0 <= offset ?break_same_line(state,[0,cst$69,offset + n | 0,cst$68]) :break_new_line (state,[0,cst$71,tab + off$0 | 0,cst$70],state[6])} return 0; case 3: var ty=param[2], off$1=param[1], insertion_point$0=state[6] - state[9] | 0; if(state[8] < insertion_point$0) {var match=top_opt(state[2]); if(match) {var match$0=match[1],width=match$0[2],box_type=match$0[1]; if(state[9] < width && ! (3 < box_type - 1 >>> 0)) break_line(state,width)} else pp_output_newline(state)} var width$2=state[9] - off$1 | 0, box_type$1=1 === ty?1:state[9] < size$0?ty:5; return push([0,box_type$1,width$2],state[2]); case 4:var tbox=param[1];return push(tbox,state[3]); default: var tag_name$0=param[1],marker$0=caml_call1(state[24],tag_name$0); pp_output_string(state,marker$0); return push(tag_name$0,state[5])}} function advance_left(state) {for(;;) {var match=peek_opt(state[28]); if(match) {var match$0=match[1], size=match$0[1], length=match$0[3], token=match$0[2], pending_count=state[13] - state[12] | 0, _mz_=0 <= size?1:0, _mA_=_mz_ || (state[9] <= pending_count?1:0); if(_mA_) {take$0(state[28]); var size$0=0 <= size?size:pp_infinity; format_pp_token(state,size$0,token); state[12] = length + state[12] | 0; continue} return _mA_} return 0}} function enqueue_advance(state,tok) {pp_enqueue(state,tok);return advance_left(state)} function enqueue_string_as(state,size,s) {return enqueue_advance(state,[0,size,[0,s],size])} function initialize_scan_stack(stack) {clear(stack); var queue_elem=[0,unknown,_cm_,0]; return push([0,-1,queue_elem],stack)} function set_size(state,ty) {var match=top_opt(state[1]); if(match) {var match$0=match[1], queue_elem=match$0[2], left_total=match$0[1], _mu_=queue_elem[1]; if(left_total < state[12])return initialize_scan_stack(state[1]); var _mv_=queue_elem[2]; if(typeof _mv_ !== "number") switch(_mv_[0]) {case 3: var _mx_=1 - ty, _my_= _mx_ ?(queue_elem[1] = state[13] + _mu_ | 0,pop_opt(state[1]),0) :_mx_; return _my_; case 1: case 2: var _mw_= ty?(queue_elem[1] = state[13] + _mu_ | 0,pop_opt(state[1]),0):ty; return _mw_ } return 0} return 0} function scan_push(state,b,token) {pp_enqueue(state,token); if(b)set_size(state,1); var elem=[0,state[13],token]; return push(elem,state[1])} function pp_open_box_gen(state,indent,br_ty) {state[14] = state[14] + 1 | 0; if(state[14] < state[15]) {var size=- state[13] | 0,elem=[0,size,[3,indent,br_ty],0]; return scan_push(state,0,elem)} var _ms_=state[14] === state[15]?1:0; if(_ms_) {var _mt_=state[16]; return enqueue_string_as(state,caml_ml_string_length(_mt_),_mt_)} return _ms_} function pp_close_box(state,param) {var _mq_=1 < state[14]?1:0; if(_mq_) {if(state[14] < state[15]) {pp_enqueue(state,[0,size,1,0]);set_size(state,1);set_size(state,0)} state[14] = state[14] - 1 | 0; var _mr_=0} else var _mr_=_mq_; return _mr_} function pp_open_stag(state,tag_name) {if(state[22]){push(tag_name,state[4]);caml_call1(state[26],tag_name)} var _mp_=state[23]; if(_mp_) {var token=[5,tag_name];return pp_enqueue(state,[0,size,token,0])} return _mp_} function pp_close_stag(state,param) {if(state[23])pp_enqueue(state,[0,size,5,0]); var _mn_=state[22]; if(_mn_) {var match=pop_opt(state[4]); if(match){var tag_name=match[1];return caml_call1(state[27],tag_name)} var _mo_=0} else var _mo_=_mn_; return _mo_} function pp_open_tag(state,s){return pp_open_stag(state,[0,String_tag,s])} function pp_close_tag(state,param){return pp_close_stag(state,0)} function pp_set_print_tags(state,b){state[22] = b;return 0} function pp_set_mark_tags(state,b){state[23] = b;return 0} function pp_get_print_tags(state,param){return state[22]} function pp_get_mark_tags(state,param){return state[23]} function pp_set_tags(state,b) {pp_set_print_tags(state,b);return pp_set_mark_tags(state,b)} function pp_get_formatter_stag_function(state,param) {return [0,state[24],state[25],state[26],state[27]]} function pp_set_formatter_stag_function(state,param) {var pct=param[4],pot=param[3],mct=param[2],mot=param[1]; state[24] = mot; state[25] = mct; state[26] = pot; state[27] = pct; return 0} function pp_rinit(state) {state[12] = 1; state[13] = 1; clear$0(state[28]); initialize_scan_stack(state[1]); clear(state[2]); clear(state[3]); clear(state[4]); clear(state[5]); state[10] = 0; state[14] = 0; state[9] = state[6]; return pp_open_box_gen(state,0,3)} function pp_flush_queue(state,b) {var _mm_=state[4]; iter$7(function(param){return pp_close_tag(state,0)},_mm_); for(;;) {if(1 < state[14]){pp_close_box(state,0);continue} state[13] = pp_infinity; advance_left(state); if(b)pp_output_newline(state); return pp_rinit(state)}} function pp_print_as_size(state,size,s) {var _ml_=state[14] < state[15]?1:0; return _ml_?enqueue_string_as(state,size,s):_ml_} function pp_print_as(state,isize,s) {return pp_print_as_size(state,isize,s)} function pp_print_string(state,s) {return pp_print_as(state,caml_ml_string_length(s),s)} function pp_print_bytes(state,s) {return pp_print_as(state,caml_ml_bytes_length(s),of_bytes(s))} function pp_print_int(state,i) {return pp_print_string(state,caml_string_of_jsbytes("" + i))} function pp_print_float(state,f) {return pp_print_string(state,to_string(f))} function pp_print_bool(state,b) {return pp_print_string(state,string_of_bool(b))} function pp_print_char(state,c){return pp_print_as(state,1,make$1(1,c))} function pp_open_hbox(state,param){return pp_open_box_gen(state,0,0)} function pp_open_vbox(state,indent) {return pp_open_box_gen(state,indent,1)} function pp_open_hvbox(state,indent) {return pp_open_box_gen(state,indent,2)} function pp_open_hovbox(state,indent) {return pp_open_box_gen(state,indent,3)} function pp_open_box(state,indent){return pp_open_box_gen(state,indent,4)} function pp_print_newline(state,param) {pp_flush_queue(state,1);return caml_call1(state[18],0)} function pp_print_flush(state,param) {pp_flush_queue(state,0);return caml_call1(state[18],0)} function pp_force_newline(state,param) {var _mk_=state[14] < state[15]?1:0; return _mk_?enqueue_advance(state,[0,size,3,0]):_mk_} function pp_print_if_newline(state,param) {var _mj_=state[14] < state[15]?1:0; return _mj_?enqueue_advance(state,[0,size,4,0]):_mj_} function pp_print_custom_break(state,fits,breaks) {var after=fits[3], width=fits[2], before=fits[1], _mi_=state[14] < state[15]?1:0; if(_mi_) {var size=- state[13] | 0, token=[1,fits,breaks], length= (caml_ml_string_length(before) + width | 0) + caml_ml_string_length(after) | 0, elem=[0,size,token,length]; return scan_push(state,1,elem)} return _mi_} function pp_print_break(state,width,offset) {return pp_print_custom_break (state,[0,cst$75,width,cst$74],[0,cst$73,offset,cst$72])} function pp_print_space(state,param){return pp_print_break(state,1,0)} function pp_print_cut(state,param){return pp_print_break(state,0,0)} function pp_open_tbox(state,param) {state[14] = state[14] + 1 | 0; var _mh_=state[14] < state[15]?1:0; if(_mh_) {var elem=[0,size,[4,[0,[0,0]]],0];return enqueue_advance(state,elem)} return _mh_} function pp_close_tbox(state,param) {var _me_=1 < state[14]?1:0; if(_me_) {var _mf_=state[14] < state[15]?1:0; if(_mf_) {var elem=[0,size,2,0]; enqueue_advance(state,elem); state[14] = state[14] - 1 | 0; var _mg_=0} else var _mg_=_mf_} else var _mg_=_me_; return _mg_} function pp_print_tbreak(state,width,offset) {var _md_=state[14] < state[15]?1:0; if(_md_) {var size=- state[13] | 0,elem=[0,size,[2,width,offset],width]; return scan_push(state,1,elem)} return _md_} function pp_print_tab(state,param){return pp_print_tbreak(state,0,0)} function pp_set_tab(state,param) {var _mc_=state[14] < state[15]?1:0; if(_mc_){var elem=[0,size,0,0];return enqueue_advance(state,elem)} return _mc_} function pp_set_max_boxes(state,n) {var _ma_=1 < n?1:0,_mb_=_ma_?(state[15] = n,0):_ma_;return _mb_} function pp_get_max_boxes(state,param){return state[15]} function pp_over_max_boxes(state,param) {return state[14] === state[15]?1:0} function pp_set_ellipsis_text(state,s){state[16] = s;return 0} function pp_get_ellipsis_text(state,param){return state[16]} function pp_limit(n){return n < 1000000010?n:1000000009} function pp_set_max_indent(state,n$0) {var _l$_=1 < n$0?1:0; if(_l$_) {var n$1=state[6] - n$0 | 0,_l__=1 <= n$1?1:0; if(_l__) {var n=pp_limit(n$1); state[7] = n; state[8] = state[6] - state[7] | 0; return pp_rinit(state)} return _l__} return _l$_} function pp_get_max_indent(state,param){return state[8]} function pp_set_margin(state,n) {var _l9_=1 <= n?1:0; if(_l9_) {var n$0=pp_limit(n); state[6] = n$0; var new_max_indent= state[8] <= state[6] ?state[8] :max$1(max$1(state[6] - state[7] | 0,state[6] / 2 | 0),1); return pp_set_max_indent(state,new_max_indent)} return _l9_} function validate_geometry(param) {var margin=param[2],max_indent=param[1]; return 2 <= max_indent?margin <= max_indent?_cn_:_co_:_cp_} function check_geometry(geometry) {var match=validate_geometry(geometry);return 0 === match[0]?1:0} function pp_get_margin(state,param){return state[6]} function pp_set_full_geometry(state,param) {var margin=param[2],max_indent=param[1]; pp_set_margin(state,margin); pp_set_max_indent(state,max_indent); return 0} function pp_set_geometry(state,max_indent,margin) {var geometry=[0,max_indent,margin],match=validate_geometry(geometry); if(0 === match[0])return pp_set_full_geometry(state,geometry); var msg=match[1]; throw [0,Invalid_argument,cat(cst_Format_pp_set_geometry,msg)]} function pp_safe_set_geometry(state,max_indent,margin) {var geometry=[0,max_indent,margin],match=validate_geometry(geometry); return 0 === match[0]?pp_set_full_geometry(state,geometry):0} function pp_get_geometry(state,param){return [0,state[8],state[6]]} function pp_update_geometry(state,update) {var geometry=pp_get_geometry(state,0); return pp_set_full_geometry(state,caml_call1(update,geometry))} function pp_set_formatter_out_functions(state,param) {var j=param[5],i=param[4],h=param[3],g=param[2],f=param[1]; state[17] = f; state[18] = g; state[19] = h; state[20] = i; state[21] = j; return 0} function pp_get_formatter_out_functions(state,param) {return [0,state[17],state[18],state[19],state[20],state[21]]} function pp_set_formatter_output_functi(state,f,g) {state[17] = f;state[18] = g;return 0} function pp_get_formatter_output_functi(state,param) {return [0,state[17],state[18]]} function display_newline(state,param) {return caml_call3(state[17],cst$76,0,1)} var blank_line=make$1(80,32); function display_indent(state,n) {var n$0=n; for(;;) {var _l8_=0 < n$0?1:0; if(_l8_) {if(80 < n$0) {caml_call3(state[17],blank_line,0,80); var n$1=n$0 - 80 | 0,n$0=n$1; continue} return caml_call3(state[17],blank_line,0,n$0)} return _l8_}} function pp_set_formatter_out_channel(state,oc) {state[17] = function(_l5_,_l6_,_l7_){return output_substring(oc,_l5_,_l6_,_l7_)}; state[18] = function(param){return caml_ml_flush(oc)}; state[19] = function(_l4_){return display_newline(state,_l4_)}; state[20] = function(_l3_){return display_indent(state,_l3_)}; state[21] = function(_l2_){return display_indent(state,_l2_)}; return 0} function default_pp_mark_open_tag(param) {if(param[1] === String_tag) {var s=param[2];return cat(cst$78,cat(s,cst$77))} return cst$79} function default_pp_mark_close_tag(param) {if(param[1] === String_tag) {var s=param[2];return cat(cst$81,cat(s,cst$80))} return cst$82} function default_pp_print_open_tag(_l1_){return 0} function default_pp_print_close_tag(_l0_){return 0} function pp_make_formatter(f,g,h,i,j) {var pp_queue=create$1(0),sys_tok=[0,unknown,_cq_,0]; add(sys_tok,pp_queue); var scan_stack=create$0(0); initialize_scan_stack(scan_stack); push([0,1,sys_tok],scan_stack); var _lX_=create$0(0),_lY_=create$0(0),_lZ_=create$0(0); return [0, scan_stack, create$0(0), _lZ_, _lY_, _lX_, 78, 10, 68, 78, 0, 1, 1, 1, 1, max_int, cst$83, f, g, h, i, j, 0, 0, default_pp_mark_open_tag, default_pp_mark_close_tag, default_pp_print_open_tag, default_pp_print_close_tag, pp_queue]} function formatter_of_out_functions(out_funs) {return pp_make_formatter (out_funs[1],out_funs[2],out_funs[3],out_funs[4],out_funs[5])} function make_formatter(output,flush) {function _lP_(_lW_){return 0} function _lQ_(_lV_){return 0} var ppf= pp_make_formatter(output,flush,function(_lU_){return 0},_lQ_,_lP_); ppf[19] = function(_lT_){return display_newline(ppf,_lT_)}; ppf[20] = function(_lS_){return display_indent(ppf,_lS_)}; ppf[21] = function(_lR_){return display_indent(ppf,_lR_)}; return ppf} function formatter_of_out_channel(oc) {function _lL_(param){return caml_ml_flush(oc)} return make_formatter (function(_lM_,_lN_,_lO_) {return output_substring(oc,_lM_,_lN_,_lO_)}, _lL_)} function formatter_of_buffer(b) {function _lG_(_lK_){return 0} return make_formatter (function(_lH_,_lI_,_lJ_) {return add_substring(b,_lH_,_lI_,_lJ_)}, _lG_)} var pp_buffer_size=512; function pp_make_buffer(param){return create$2(pp_buffer_size)} var stdbuf=pp_make_buffer(0), std_formatter=formatter_of_out_channel(stdout), err_formatter=formatter_of_out_channel(stderr), str_formatter=formatter_of_buffer(stdbuf); function flush_buffer_formatter(buf,ppf) {pp_flush_queue(ppf,0);var s=contents(buf);reset(buf);return s} function flush_str_formatter(param) {return flush_buffer_formatter(stdbuf,str_formatter)} function make_symbolic_output_buffer(param){return [0,0]} function clear_symbolic_output_buffer(sob){sob[1] = 0;return 0} function get_symbolic_output_buffer(sob){return rev(sob[1])} function flush_symbolic_output_buffer(sob) {var items=get_symbolic_output_buffer(sob); clear_symbolic_output_buffer(sob); return items} function add_symbolic_output_item(sob,item) {sob[1] = [0,item,sob[1]];return 0} function formatter_of_symbolic_output_b(sob) {function f(s,i,n){return add_symbolic_output_item(sob,[0,sub$0(s,i,n)])} function g(_lF_){return add_symbolic_output_item(sob,0)} function h(_lE_){return add_symbolic_output_item(sob,1)} function i(n){return add_symbolic_output_item(sob,[1,n])} function j(n){return add_symbolic_output_item(sob,[2,n])} return pp_make_formatter(f,g,h,i,j)} function open_hbox(_lD_){return pp_open_hbox(std_formatter,_lD_)} function open_vbox(_lC_){return pp_open_vbox(std_formatter,_lC_)} function open_hvbox(_lB_){return pp_open_hvbox(std_formatter,_lB_)} function open_hovbox(_lA_){return pp_open_hovbox(std_formatter,_lA_)} function open_box(_lz_){return pp_open_box(std_formatter,_lz_)} function close_box(_ly_){return pp_close_box(std_formatter,_ly_)} function open_tag(_lx_){return pp_open_tag(std_formatter,_lx_)} function close_tag(_lw_){return pp_close_tag(std_formatter,_lw_)} function open_stag(_lv_){return pp_open_stag(std_formatter,_lv_)} function close_stag(_lu_){return pp_close_stag(std_formatter,_lu_)} function print_as(_ls_,_lt_){return pp_print_as(std_formatter,_ls_,_lt_)} function print_string$0(_lr_){return pp_print_string(std_formatter,_lr_)} function print_bytes$0(_lq_){return pp_print_bytes(std_formatter,_lq_)} function print_int$0(_lp_){return pp_print_int(std_formatter,_lp_)} function print_float$0(_lo_){return pp_print_float(std_formatter,_lo_)} function print_char$0(_ln_){return pp_print_char(std_formatter,_ln_)} function print_bool(_lm_){return pp_print_bool(std_formatter,_lm_)} function print_break(_lk_,_ll_) {return pp_print_break(std_formatter,_lk_,_ll_)} function print_cut(_lj_){return pp_print_cut(std_formatter,_lj_)} function print_space(_li_){return pp_print_space(std_formatter,_li_)} function force_newline(_lh_){return pp_force_newline(std_formatter,_lh_)} function print_flush(_lg_){return pp_print_flush(std_formatter,_lg_)} function print_newline$0(_lf_) {return pp_print_newline(std_formatter,_lf_)} function print_if_newline(_le_) {return pp_print_if_newline(std_formatter,_le_)} function open_tbox(_ld_){return pp_open_tbox(std_formatter,_ld_)} function close_tbox(_lc_){return pp_close_tbox(std_formatter,_lc_)} function print_tbreak(_la_,_lb_) {return pp_print_tbreak(std_formatter,_la_,_lb_)} function set_tab(_k$_){return pp_set_tab(std_formatter,_k$_)} function print_tab(_k__){return pp_print_tab(std_formatter,_k__)} function set_margin(_k9_){return pp_set_margin(std_formatter,_k9_)} function get_margin(_k8_){return std_formatter[6]} function set_max_indent(_k7_) {return pp_set_max_indent(std_formatter,_k7_)} function get_max_indent(_k6_){return std_formatter[8]} function set_geometry(_k4_,_k5_) {return pp_set_geometry(std_formatter,_k4_,_k5_)} function safe_set_geometry(_k2_,_k3_) {return pp_safe_set_geometry(std_formatter,_k2_,_k3_)} function get_geometry(_k1_){return pp_get_geometry(std_formatter,_k1_)} function update_geometry(_k0_) {return pp_update_geometry(std_formatter,_k0_)} function set_max_boxes(_kZ_){return pp_set_max_boxes(std_formatter,_kZ_)} function get_max_boxes(_kY_){return std_formatter[15]} function over_max_boxes(_kX_) {return pp_over_max_boxes(std_formatter,_kX_)} function set_ellipsis_text(_kW_) {return pp_set_ellipsis_text(std_formatter,_kW_)} function get_ellipsis_text(_kV_){return std_formatter[16]} function set_formatter_out_channel(_kU_) {return pp_set_formatter_out_channel(std_formatter,_kU_)} function set_formatter_out_functions(_kT_) {return pp_set_formatter_out_functions(std_formatter,_kT_)} function get_formatter_out_functions(_kS_) {return pp_get_formatter_out_functions(std_formatter,_kS_)} function set_formatter_output_functions(_kQ_,_kR_) {return pp_set_formatter_output_functi(std_formatter,_kQ_,_kR_)} function get_formatter_output_functions(_kP_) {return pp_get_formatter_output_functi(std_formatter,_kP_)} function set_formatter_stag_functions(_kO_) {return pp_set_formatter_stag_function(std_formatter,_kO_)} function get_formatter_stag_functions(_kN_) {return pp_get_formatter_stag_function(std_formatter,_kN_)} function set_print_tags(_kM_) {return pp_set_print_tags(std_formatter,_kM_)} function get_print_tags(_kL_){return std_formatter[22]} function set_mark_tags(_kK_){return pp_set_mark_tags(std_formatter,_kK_)} function get_mark_tags(_kJ_){return std_formatter[23]} function set_tags(_kI_){return pp_set_tags(std_formatter,_kI_)} function pp_print_list(opt,pp_v,ppf,param) {var opt$0=opt,param$0=param; for(;;) {if(opt$0)var sth=opt$0[1],pp_sep=sth;else var pp_sep=pp_print_cut; if(param$0) {var _kH_=param$0[1]; if(param$0[2]) {var vs=param$0[2]; caml_call2(pp_v,ppf,_kH_); caml_call2(pp_sep,ppf,0); var opt$1=[0,pp_sep],opt$0=opt$1,param$0=vs; continue} return caml_call2(pp_v,ppf,_kH_)} return 0}} function pp_print_seq(opt,pp_v,ppf,seq$1) {if(opt)var sth=opt[1],pp_sep=sth;else var pp_sep=pp_print_cut; var match$0=caml_call1(seq$1,0); if(match$0) {var seq$2=match$0[2],v$0=match$0[1]; caml_call2(pp_v,ppf,v$0); var seq=seq$2; for(;;) {var match=caml_call1(seq,0); if(match) {var seq$0=match[2],v=match[1]; caml_call2(pp_sep,ppf,0); caml_call2(pp_v,ppf,v); var seq=seq$0; continue} return 0}} return 0} function pp_print_text(ppf,s) {var len=caml_ml_string_length(s),left=[0,0],right=[0,0]; function flush(param) {pp_print_string(ppf,sub$0(s,left[1],right[1] - left[1] | 0)); right[1]++; left[1] = right[1]; return 0} for(;;) {if(right[1] !== len) {var match=caml_string_get(s,right[1]); if(10 === match) {flush(0);pp_force_newline(ppf,0)} else if(32 === match){flush(0);pp_print_space(ppf,0)}else right[1]++; continue} var _kG_=left[1] !== len?1:0; return _kG_?flush(0):_kG_}} function pp_print_option(opt,pp_v,ppf,param) {if(opt) var sth=opt[1],none=sth; else var none=function(param,_kF_){return 0}; if(param){var v=param[1];return caml_call2(pp_v,ppf,v)} return caml_call2(none,ppf,0)} function pp_print_result(ok,error,ppf,param) {if(0 === param[0]){var v=param[1];return caml_call2(ok,ppf,v)} var e=param[1]; return caml_call2(error,ppf,e)} function pp_print_either(left,right,ppf,param) {if(0 === param[0]){var l=param[1];return caml_call2(left,ppf,l)} var r=param[1]; return caml_call2(right,ppf,r)} function compute_tag(output,tag_acc) {var buf=create$2(16),ppf=formatter_of_buffer(buf); caml_call2(output,ppf,tag_acc); pp_print_flush(ppf,0); var len=buf[2]; return 2 <= len?sub$3(buf,1,len - 2 | 0):contents(buf)} function output_formatting_lit(ppf,fmting_lit) {if(typeof fmting_lit === "number") switch(fmting_lit) {case 0:return pp_close_box(ppf,0); case 1:return pp_close_tag(ppf,0); case 2:return pp_print_flush(ppf,0); case 3:return pp_force_newline(ppf,0); case 4:return pp_print_newline(ppf,0); case 5:return pp_print_char(ppf,64); default:return pp_print_char(ppf,37)} else switch(fmting_lit[0]) {case 0: var offset=fmting_lit[3],width=fmting_lit[2]; return pp_print_break(ppf,width,offset); case 1:return 0; default: var c=fmting_lit[1]; pp_print_char(ppf,64); return pp_print_char(ppf,c)}} function output_acc$0(ppf,acc) {var switch$0=0; if(typeof acc === "number") return 0; else switch(acc[0]) {case 0: var f=acc[2],p=acc[1]; output_acc$0(ppf,p); return output_formatting_lit(ppf,f); case 1: var _kv_=acc[2],_kw_=acc[1]; if(0 === _kv_[0]) {var acc$0=_kv_[1]; output_acc$0(ppf,_kw_); return pp_open_stag (ppf,[0,String_tag,compute_tag(output_acc$0,acc$0)])} var acc$1=_kv_[1]; output_acc$0(ppf,_kw_); var match=open_box_of_string(compute_tag(output_acc$0,acc$1)), bty=match[2], indent=match[1]; return pp_open_box_gen(ppf,indent,bty); case 2: var _kx_=acc[1],switch$1=0; if(typeof _kx_ !== "number" && 0 === _kx_[0]) {var _ky_=_kx_[2],switch$2=0; if(typeof _ky_ !== "number" && 1 === _ky_[0]) {var s$0=acc[2],size=_ky_[2],p$1=_kx_[1]; switch$1 = 1; switch$2 = 1}} if(! switch$1){var s=acc[2],p$0=_kx_;switch$0 = 2} break; case 3: var _kz_=acc[1],switch$3=0; if(typeof _kz_ !== "number" && 0 === _kz_[0]) {var _kA_=_kz_[2],switch$4=0; if(typeof _kA_ !== "number" && 1 === _kA_[0]) {var c$0=acc[2],size$0=_kA_[2],p$3=_kz_[1]; switch$0 = 1; switch$3 = 1; switch$4 = 1}} if(! switch$3){var c=acc[2],p$2=_kz_;switch$0 = 3} break; case 4: var _kB_=acc[1],switch$5=0; if(typeof _kB_ !== "number" && 0 === _kB_[0]) {var _kC_=_kB_[2],switch$6=0; if(typeof _kC_ !== "number" && 1 === _kC_[0]) {var s$0=acc[2],size=_kC_[2],p$1=_kB_[1]; switch$5 = 1; switch$6 = 1}} if(! switch$5){var s=acc[2],p$0=_kB_;switch$0 = 2} break; case 5: var _kD_=acc[1],switch$7=0; if(typeof _kD_ === "number" || ! (0 === _kD_[0])) switch$7 = 1; else {var _kE_=_kD_[2],switch$8=0; if(typeof _kE_ !== "number" && 1 === _kE_[0]) {var c$0=acc[2],size$0=_kE_[2],p$3=_kD_[1]; switch$0 = 1; switch$8 = 1} if(! switch$8)switch$7 = 1} if(switch$7){var c=acc[2],p$2=_kD_;switch$0 = 3} break; case 6: var f$0=acc[2],p$4=acc[1]; output_acc$0(ppf,p$4); return caml_call1(f$0,ppf); case 7: var p$5=acc[1];output_acc$0(ppf,p$5);return pp_print_flush(ppf,0); default: var msg=acc[2],p$6=acc[1]; output_acc$0(ppf,p$6); return invalid_arg(msg)} switch(switch$0) {case 0:output_acc$0(ppf,p$1);return pp_print_as_size(ppf,size,s$0); case 1: output_acc$0(ppf,p$3); return pp_print_as_size(ppf,size$0,make$1(1,c$0)); case 2:output_acc$0(ppf,p$0);return pp_print_string(ppf,s); default:output_acc$0(ppf,p$2);return pp_print_char(ppf,c)}} function strput_acc$0(ppf,acc) {var switch$0=0; if(typeof acc === "number") return 0; else switch(acc[0]) {case 0: var f=acc[2],p=acc[1]; strput_acc$0(ppf,p); return output_formatting_lit(ppf,f); case 1: var _kj_=acc[2],_kk_=acc[1]; if(0 === _kj_[0]) {var acc$0=_kj_[1]; strput_acc$0(ppf,_kk_); return pp_open_stag (ppf,[0,String_tag,compute_tag(strput_acc$0,acc$0)])} var acc$1=_kj_[1]; strput_acc$0(ppf,_kk_); var match=open_box_of_string(compute_tag(strput_acc$0,acc$1)), bty=match[2], indent=match[1]; return pp_open_box_gen(ppf,indent,bty); case 2: var _kl_=acc[1],switch$1=0; if(typeof _kl_ !== "number" && 0 === _kl_[0]) {var _km_=_kl_[2],switch$2=0; if(typeof _km_ !== "number" && 1 === _km_[0]) {var s$0=acc[2],size=_km_[2],p$1=_kl_[1]; switch$1 = 1; switch$2 = 1}} if(! switch$1){var s=acc[2],p$0=_kl_;switch$0 = 2} break; case 3: var _kn_=acc[1],switch$3=0; if(typeof _kn_ !== "number" && 0 === _kn_[0]) {var _ko_=_kn_[2],switch$4=0; if(typeof _ko_ !== "number" && 1 === _ko_[0]) {var c$0=acc[2],size$0=_ko_[2],p$3=_kn_[1]; switch$0 = 1; switch$3 = 1; switch$4 = 1}} if(! switch$3){var c=acc[2],p$2=_kn_;switch$0 = 3} break; case 4: var _kp_=acc[1],switch$5=0; if(typeof _kp_ !== "number" && 0 === _kp_[0]) {var _kq_=_kp_[2],switch$6=0; if(typeof _kq_ !== "number" && 1 === _kq_[0]) {var s$0=acc[2],size=_kq_[2],p$1=_kp_[1]; switch$5 = 1; switch$6 = 1}} if(! switch$5){var s=acc[2],p$0=_kp_;switch$0 = 2} break; case 5: var _kr_=acc[1],switch$7=0; if(typeof _kr_ === "number" || ! (0 === _kr_[0])) switch$7 = 1; else {var _ks_=_kr_[2],switch$8=0; if(typeof _ks_ !== "number" && 1 === _ks_[0]) {var c$0=acc[2],size$0=_ks_[2],p$3=_kr_[1]; switch$0 = 1; switch$8 = 1} if(! switch$8)switch$7 = 1} if(switch$7){var c=acc[2],p$2=_kr_;switch$0 = 3} break; case 6: var _kt_=acc[1]; if(typeof _kt_ !== "number" && 0 === _kt_[0]) {var _ku_=_kt_[2]; if(typeof _ku_ !== "number" && 1 === _ku_[0]) {var f$1=acc[2],size$1=_ku_[2],p$4=_kt_[1]; strput_acc$0(ppf,p$4); return pp_print_as_size(ppf,size$1,caml_call1(f$1,0))}} var f$0=acc[2]; strput_acc$0(ppf,_kt_); return pp_print_string(ppf,caml_call1(f$0,0)); case 7: var p$5=acc[1];strput_acc$0(ppf,p$5);return pp_print_flush(ppf,0); default: var msg=acc[2],p$6=acc[1]; strput_acc$0(ppf,p$6); return invalid_arg(msg)} switch(switch$0) {case 0:strput_acc$0(ppf,p$1);return pp_print_as_size(ppf,size,s$0); case 1: strput_acc$0(ppf,p$3); return pp_print_as_size(ppf,size$0,make$1(1,c$0)); case 2:strput_acc$0(ppf,p$0);return pp_print_string(ppf,s); default:strput_acc$0(ppf,p$2);return pp_print_char(ppf,c)}} function kfprintf$0(k,ppf,param) {var fmt=param[1],_ki_=0; return make_printf (function(acc){output_acc$0(ppf,acc);return caml_call1(k,ppf)}, _ki_, fmt)} function ikfprintf$0(k,ppf,param) {var fmt=param[1];return make_iprintf(k,ppf,fmt)} function ifprintf$0(ppf,param) {var fmt=param[1],_kg_=0; return make_iprintf(function(_kh_){return 0},_kg_,fmt)} function fprintf$0(ppf) {function _kd_(_kf_){return 0} return function(_ke_){return kfprintf$0(_kd_,ppf,_ke_)}} function printf$0(fmt){return caml_call1(fprintf$0(std_formatter),fmt)} function eprintf$0(fmt){return caml_call1(fprintf$0(err_formatter),fmt)} function kdprintf(k,param) {var fmt=param[1],_kc_=0; return make_printf (function(acc) {return caml_call1 (k,function(ppf){return output_acc$0(ppf,acc)})}, _kc_, fmt)} function dprintf(fmt){return kdprintf(function(i){return i},fmt)} function kprintf(k,param) {var fmt=param[1],b=pp_make_buffer(0),ppf=formatter_of_buffer(b); function k$0(acc) {strput_acc$0(ppf,acc); return caml_call1(k,flush_buffer_formatter(b,ppf))} return make_printf(k$0,0,fmt)} function sprintf$0(fmt){return kprintf(id$0,fmt)} function kasprintf(k,param) {var fmt=param[1],b=pp_make_buffer(0),ppf=formatter_of_buffer(b); function k$0(acc) {output_acc$0(ppf,acc); return caml_call1(k,flush_buffer_formatter(b,ppf))} return make_printf(k$0,0,fmt)} function asprintf(fmt){return kasprintf(id$0,fmt)} function flush_standard_formatters(param) {pp_print_flush(std_formatter,0);return pp_print_flush(err_formatter,0)} at_exit(flush_standard_formatters); function pp_set_all_formatter_output_fu(state,f,g,h,i) {pp_set_formatter_output_functi(state,f,g); state[19] = h; state[20] = i; return 0} function pp_get_all_formatter_output_fu(state,param) {return [0,state[17],state[18],state[19],state[20]]} function set_all_formatter_output_funct(_j__,_j$_,_ka_,_kb_) {return pp_set_all_formatter_output_fu(std_formatter,_j__,_j$_,_ka_,_kb_)} function get_all_formatter_output_funct(_j9_) {return pp_get_all_formatter_output_fu(std_formatter,_j9_)} function bprintf$0(b,param) {var fmt=param[1],ppf=formatter_of_buffer(b); function k(acc){output_acc$0(ppf,acc);return pp_flush_queue(ppf,0)} return make_printf(k,0,fmt)} function pp_set_formatter_tag_functions(state,param) {var pct=param[4],pot=param[3],mct=param[2],mot=param[1]; function stringify(f,e,param) {if(param[1] === String_tag){var s=param[2];return caml_call1(f,s)} return e} state[24] = function(_j8_){return stringify(mot,cst$84,_j8_)}; state[25] = function(_j7_){return stringify(mct,cst$85,_j7_)}; var _j3_=0; state[26] = function(_j6_){return stringify(pot,_j3_,_j6_)}; var _j4_=0; state[27] = function(_j5_){return stringify(pct,_j4_,_j5_)}; return 0} function pp_get_formatter_tag_functions(fmt,param) {var funs=pp_get_formatter_stag_function(fmt,0); function mark_open_tag(s){return caml_call1(funs[1],[0,String_tag,s])} function mark_close_tag(s){return caml_call1(funs[2],[0,String_tag,s])} function print_open_tag(s){return caml_call1(funs[3],[0,String_tag,s])} function print_close_tag(s){return caml_call1(funs[4],[0,String_tag,s])} return [0,mark_open_tag,mark_close_tag,print_open_tag,print_close_tag]} function set_formatter_tag_functions(_j2_) {return pp_set_formatter_tag_functions(std_formatter,_j2_)} function get_formatter_tag_functions(_j1_) {return pp_get_formatter_tag_functions(std_formatter,_j1_)} var Stdlib_Format= [0, pp_open_box, open_box, pp_close_box, close_box, pp_open_hbox, open_hbox, pp_open_vbox, open_vbox, pp_open_hvbox, open_hvbox, pp_open_hovbox, open_hovbox, pp_print_string, print_string$0, pp_print_bytes, print_bytes$0, pp_print_as, print_as, pp_print_int, print_int$0, pp_print_float, print_float$0, pp_print_char, print_char$0, pp_print_bool, print_bool, pp_print_space, print_space, pp_print_cut, print_cut, pp_print_break, print_break, pp_print_custom_break, pp_force_newline, force_newline, pp_print_if_newline, print_if_newline, pp_print_flush, print_flush, pp_print_newline, print_newline$0, pp_set_margin, set_margin, pp_get_margin, get_margin, pp_set_max_indent, set_max_indent, pp_get_max_indent, get_max_indent, check_geometry, pp_set_geometry, set_geometry, pp_safe_set_geometry, safe_set_geometry, pp_update_geometry, update_geometry, pp_get_geometry, get_geometry, pp_set_max_boxes, set_max_boxes, pp_get_max_boxes, get_max_boxes, pp_over_max_boxes, over_max_boxes, pp_open_tbox, open_tbox, pp_close_tbox, close_tbox, pp_set_tab, set_tab, pp_print_tab, print_tab, pp_print_tbreak, print_tbreak, pp_set_ellipsis_text, set_ellipsis_text, pp_get_ellipsis_text, get_ellipsis_text, String_tag, pp_open_stag, open_stag, pp_close_stag, close_stag, pp_set_tags, set_tags, pp_set_print_tags, set_print_tags, pp_set_mark_tags, set_mark_tags, pp_get_print_tags, get_print_tags, pp_get_mark_tags, get_mark_tags, pp_set_formatter_out_channel, set_formatter_out_channel, pp_set_formatter_output_functi, set_formatter_output_functions, pp_get_formatter_output_functi, get_formatter_output_functions, pp_set_formatter_out_functions, set_formatter_out_functions, pp_get_formatter_out_functions, get_formatter_out_functions, pp_set_formatter_stag_function, set_formatter_stag_functions, pp_get_formatter_stag_function, get_formatter_stag_functions, formatter_of_out_channel, std_formatter, err_formatter, formatter_of_buffer, stdbuf, str_formatter, flush_str_formatter, make_formatter, formatter_of_out_functions, make_symbolic_output_buffer, clear_symbolic_output_buffer, get_symbolic_output_buffer, flush_symbolic_output_buffer, add_symbolic_output_item, formatter_of_symbolic_output_b, pp_print_list, pp_print_seq, pp_print_text, pp_print_option, pp_print_result, pp_print_either, fprintf$0, printf$0, eprintf$0, sprintf$0, asprintf, dprintf, ifprintf$0, kfprintf$0, kdprintf, ikfprintf$0, kprintf, kasprintf, bprintf$0, kprintf, set_all_formatter_output_funct, get_all_formatter_output_funct, pp_set_all_formatter_output_fu, pp_get_all_formatter_output_fu, pp_open_tag, open_tag, pp_close_tag, close_tag, pp_set_formatter_tag_functions, set_formatter_tag_functions, pp_get_formatter_tag_functions, get_formatter_tag_functions]; caml_register_global(818,Stdlib_Format,"Stdlib__Format"); var null_char=0; function next_char(ib) {try {var c=caml_call1(ib[7],0); ib[2] = c; ib[3] = 1; ib[4] = ib[4] + 1 | 0; if(10 === c)ib[5] = ib[5] + 1 | 0; return c} catch(_j0_) {_j0_ = caml_wrap_exception(_j0_); if(_j0_ === End_of_file) {ib[2] = null_char;ib[3] = 0;ib[1] = 1;return null_char} throw _j0_}} function peek_char(ib){return ib[3]?ib[2]:next_char(ib)} function checked_peek_char(ib) {var c=peek_char(ib);if(ib[1])throw End_of_file;return c} function end_of_input(ib){peek_char(ib);return ib[1]} function beginning_of_input(ib){return 0 === ib[4]?1:0} function name_of_input(ib) {var _jZ_=ib[9]; if(typeof _jZ_ === "number") return 0 === _jZ_?cst_unnamed_function:cst_unnamed_character_string; else {if(0 === _jZ_[0])return cst_unnamed_Stdlib_input_chann; var fname=_jZ_[1]; return fname}} function char_count(ib){return ib[3]?ib[4] - 1 | 0:ib[4]} function reset_token(ib){return reset(ib[8])} function invalidate_current_char(ib){ib[3] = 0;return 0} function token_string(ib) {var token_buffer=ib[8],tok=contents(token_buffer); clear$1(token_buffer); ib[6] = ib[6] + 1 | 0; return tok} function skip_char(width,ib){invalidate_current_char(ib);return width} function ignore_char(width,ib){return skip_char(width - 1 | 0,ib)} function store_char(width,ib,c) {add_char(ib[8],c);return ignore_char(width,ib)} var default_token_buffer_size=1024; function create$4(iname,next) {return [0, 0, null_char, 0, 0, 0, 0, next, create$2(default_token_buffer_size), iname]} function from_string$1(s) {var i=[0,0],len=caml_ml_string_length(s); function next(param) {if(len <= i[1])throw End_of_file; var c=caml_string_get(s,i[1]); i[1]++; return c} return create$4(1,next)} var _cr_=0; function from_function$0(_jY_){return create$4(_cr_,_jY_)} var len=1024; function scan_close_at_end(ic) {caml_ml_close_channel(ic);throw End_of_file} function scan_raise_at_end(ic){throw End_of_file} function from_ic(scan_close_ic,iname,ic) {var buf=caml_create_bytes(1024),i=[0,0],lim=[0,0],eof=[0,0]; function next(param) {if(i[1] < lim[1]){var c=caml_bytes_get(buf,i[1]);i[1]++;return c} if(eof[1])throw End_of_file; lim[1] = input(ic,buf,0,len); return 0 === lim[1] ?(eof[1] = 1,caml_call1(scan_close_ic,ic)) :(i[1] = 1,caml_bytes_get(buf,0))} return create$4(iname,next)} var stdib=from_ic(scan_raise_at_end,[1,cst$86,stdin],stdin); function open_in_file(open_in,fname) {if(caml_string_notequal(fname,cst$87)) {var ic=caml_call1(open_in,fname); return from_ic(scan_close_at_end,[1,fname,ic],ic)} return stdib} function from_file(_jX_){return open_in_file(open_text$0,_jX_)} function from_file_bin(_jW_){return open_in_file(open_bin$0,_jW_)} function from_channel$0(ic){return from_ic(scan_raise_at_end,[0,ic],ic)} function close_in(ib) {var _jV_=ib[9]; if(typeof _jV_ === "number") return 0; else {if(0 === _jV_[0]){var ic=_jV_[1];return caml_ml_close_channel(ic)} var ic$0=_jV_[2]; return caml_ml_close_channel(ic$0)}} var memo=[0,0]; function memo_from_ic(scan_close_ic,ic) {try {var _jT_=assq(ic,memo[1]);return _jT_} catch(_jU_) {_jU_ = caml_wrap_exception(_jU_); if(_jU_ === Not_found) {var ib=from_ic(scan_close_ic,[0,ic],ic); memo[1] = [0,[0,ic,ib],memo[1]]; return ib} throw _jU_}} function memo_from_channel(_jS_) {return memo_from_ic(scan_raise_at_end,_jS_)} var Scan_failure=[248,cst_Stdlib_Scanf_Scan_failure,caml_fresh_oo_id(0)]; function bad_input(s){throw [0,Scan_failure,s]} function bad_input_escape(c) {return bad_input(caml_call1(sprintf(_cs_),c))} function bad_token_length(message) {return bad_input(caml_call1(sprintf(_ct_),message))} function bad_float(param) {return bad_input(cst_no_dot_or_exponent_part_fo)} function bad_hex_float(param) {return bad_input(cst_not_a_valid_float_in_hexad)} function character_mismatch(c,ci) {return bad_input(caml_call2(sprintf(_cv_),c,ci))} function check_this_char(ib,c) {var ci=checked_peek_char(ib); return ci === c?invalidate_current_char(ib):character_mismatch(c,ci)} function check_char(ib,c$0) {if(10 === c$0) {var ci=checked_peek_char(ib); return 10 === ci ?invalidate_current_char(ib) :13 === ci ?(invalidate_current_char(ib),check_this_char(ib,10)) :character_mismatch(10,ci)} if(32 === c$0) for(;;) {var c=peek_char(ib),_jQ_=1 - ib[1]; if(_jQ_) {var _jR_=c - 9 | 0,switch$0=0; if(4 < _jR_ >>> 0) {if(23 === _jR_)switch$0 = 1} else if(1 < _jR_ - 2 >>> 0)switch$0 = 1; if(switch$0){invalidate_current_char(ib);continue} return 0} return _jQ_} return check_this_char(ib,c$0)} function token_char(ib){return caml_string_get(token_string(ib),0)} function token_bool(ib) {var s=token_string(ib); return caml_string_notequal(s,cst_false$3) ?caml_string_notequal(s,cst_true$3) ?bad_input(caml_call1(sprintf(_cw_),s)) :1 :0} function integer_conversion_of_char(param) {var switcher=param - 88 | 0; if(! (32 < switcher >>> 0)) switch(switcher) {case 10:return 0; case 12:return 1; case 17:return 2; case 23:return 3; case 29:return 4; case 0: case 32:return 5 } throw [0,Assert_failure,_cx_]} function token_int_literal(conv,ib) {switch(conv) {case 0:var tok=cat(cst_0b,token_string(ib));break; case 3:var tok=cat(cst_0o,token_string(ib));break; case 4:var tok=cat(cst_0u,token_string(ib));break; case 5:var tok=cat(cst_0x,token_string(ib));break; default:var tok=token_string(ib)} var l=caml_ml_string_length(tok); if(0 !== l && 43 === caml_string_get(tok,0)) return sub$0(tok,1,l - 1 | 0); return tok} function token_float(ib){return caml_float_of_string(token_string(ib))} function scan_decimal_digit_star(width,ib) {var width$0=width; for(;;) {if(0 === width$0)return width$0; var c=peek_char(ib); if(ib[1])return width$0; if(58 <= c) {if(95 === c) {var width$1=ignore_char(width$0,ib),width$0=width$1;continue}} else if(48 <= c) {var width$2=store_char(width$0,ib,c),width$0=width$2;continue} return width$0}} function scan_unsigned_decimal_int(width,ib) {if(0 === width)return bad_token_length(cst_decimal_digits); var c=checked_peek_char(ib); if(9 < c - 48 >>> 0)return bad_input(caml_call1(sprintf(_cy_),c)); var width$0=store_char(width,ib,c); return scan_decimal_digit_star(width$0,ib)} function scan_digit_plus(basis,digitp,width$2,ib) {if(0 === width$2)return bad_token_length(cst_digits); var c$0=checked_peek_char(ib); if(caml_call1(digitp,c$0)) {var width$3=store_char(width$2,ib,c$0),width=width$3; for(;;) {if(0 === width)return width; var c=peek_char(ib); if(ib[1])return width; if(caml_call1(digitp,c)) {var width$0=store_char(width,ib,c),width=width$0;continue} if(95 === c) {var width$1=ignore_char(width,ib),width=width$1;continue} return width}} return bad_input(caml_call2(sprintf(_cz_),c$0,basis))} function is_binary_digit(param){return 1 < param - 48 >>> 0?0:1} function scan_binary_int(_jO_,_jP_) {return scan_digit_plus(cst_binary,is_binary_digit,_jO_,_jP_)} function is_octal_digit(param){return 7 < param - 48 >>> 0?0:1} function scan_octal_int(_jM_,_jN_) {return scan_digit_plus(cst_octal,is_octal_digit,_jM_,_jN_)} function is_hexa_digit(param) {var _jL_=param - 48 | 0,switch$0=0; if(22 < _jL_ >>> 0) {if(! (5 < _jL_ - 49 >>> 0))switch$0 = 1} else if(6 < _jL_ - 10 >>> 0)switch$0 = 1; return switch$0?1:0} function scan_hexadecimal_int(_jJ_,_jK_) {return scan_digit_plus(cst_hexadecimal,is_hexa_digit,_jJ_,_jK_)} function scan_sign(width,ib) {var c=checked_peek_char(ib),switcher=c - 43 | 0; if(! (2 < switcher >>> 0)) switch(switcher) {case 0:return store_char(width,ib,c); case 1:break; default:return store_char(width,ib,c)} return width} function scan_optionally_signed_decimal(width,ib) {var width$0=scan_sign(width,ib); return scan_unsigned_decimal_int(width$0,ib)} function scan_int_conversion(conv,width$1,ib) {switch(conv) {case 0:return scan_binary_int(width$1,ib); case 1:return scan_optionally_signed_decimal(width$1,ib); case 2: var width$0=scan_sign(width$1,ib),c=checked_peek_char(ib); if(48 === c) {var width=store_char(width$0,ib,c); if(0 === width)return width; var c$0=peek_char(ib); if(ib[1])return width; var switch$0=0; if(99 <= c$0) {if(111 === c$0) return scan_octal_int(store_char(width,ib,c$0),ib); if(120 === c$0)switch$0 = 1} else if(88 === c$0) switch$0 = 1; else if(98 <= c$0)return scan_binary_int(store_char(width,ib,c$0),ib); return switch$0 ?scan_hexadecimal_int(store_char(width,ib,c$0),ib) :scan_decimal_digit_star(width,ib)} return scan_unsigned_decimal_int(width$0,ib); case 3:return scan_octal_int(width$1,ib); case 4:return scan_unsigned_decimal_int(width$1,ib); default:return scan_hexadecimal_int(width$1,ib)}} function scan_fractional_part(width,ib) {if(0 === width)return width; var c=peek_char(ib); return ib[1] ?width :9 < c - 48 >>> 0 ?width :scan_decimal_digit_star(store_char(width,ib,c),ib)} function scan_exponent_part(width,ib) {if(0 === width)return width; var c=peek_char(ib); if(ib[1])return width; if(69 !== c && 101 !== c)return width; return scan_optionally_signed_decimal(store_char(width,ib,c),ib)} function scan_float(width$1,precision,ib) {var width=scan_sign(width$1,ib), width$0=scan_decimal_digit_star(width,ib); if(0 === width$0)return [0,width$0,precision]; var c=peek_char(ib); if(ib[1])return [0,width$0,precision]; if(46 === c) {var width$2=store_char(width$0,ib,c), precision$0=min$1(width$2,precision), width$3= width$2 - (precision$0 - scan_fractional_part(precision$0,ib) | 0) | 0; return [0,scan_exponent_part(width$3,ib),precision$0]} return [0,scan_exponent_part(width$0,ib),precision]} function check_case_insensitive_string(width,ib,error,str) {function lowercase(c) {return 25 < c - 65 >>> 0?c:char_of_int((c - 65 | 0) + 97 | 0)} var len=caml_ml_string_length(str), width$0=[0,width], _jG_=len - 1 | 0, _jF_=0; if(! (_jG_ < 0)) {var i=_jF_; for(;;) {var c=peek_char(ib),_jH_=lowercase(caml_string_get(str,i)); if(lowercase(c) !== _jH_)caml_call1(error,0); if(0 === width$0[1])caml_call1(error,0); width$0[1] = store_char(width$0[1],ib,c); var _jI_=i + 1 | 0; if(_jG_ !== i){var i=_jI_;continue} break}} return width$0[1]} function scan_hex_float(width,precision,ib) {var _js_=0 === width?1:0,_jt_=_js_ || end_of_input(ib); if(_jt_)bad_hex_float(0); var width$0=scan_sign(width,ib), _ju_=0 === width$0?1:0, _jv_=_ju_ || end_of_input(ib); if(_jv_)bad_hex_float(0); var c=peek_char(ib),switch$0=0; if(78 <= c) {var switcher=c - 79 | 0; if(30 < switcher >>> 0) {if(! (32 <= switcher)) {var width$1=store_char(width$0,ib,c), _jw_=0 === width$1?1:0, _jx_=_jw_ || end_of_input(ib); if(_jx_)bad_hex_float(0); return check_case_insensitive_string (width$1,ib,bad_hex_float,cst_an)}} else if(26 === switcher)switch$0 = 1} else {if(48 === c) {var width$3=store_char(width$0,ib,c), _jA_=0 === width$3?1:0, _jB_=_jA_ || end_of_input(ib); if(_jB_)bad_hex_float(0); var width$4= check_case_insensitive_string(width$3,ib,bad_hex_float,cst_x$2); if(0 !== width$4 && ! end_of_input(ib)) {var match=peek_char(ib),_jC_=match - 46 | 0,switch$1=0; if(34 < _jC_ >>> 0) {if(66 === _jC_)switch$1 = 1} else if(32 < _jC_ - 1 >>> 0)switch$1 = 1; var width$5=switch$1?width$4:scan_hexadecimal_int(width$4,ib); if(0 !== width$5 && ! end_of_input(ib)) {var c$0=peek_char(ib); if(46 === c$0) {var width$6=store_char(width$5,ib,c$0),switch$2=0; if(0 !== width$6 && ! end_of_input(ib)) {var match$0=peek_char(ib),switch$3=0; if(80 !== match$0 && 112 !== match$0) {var precision$0=min$1(width$6,precision), width$10= width$6 - (precision$0 - scan_hexadecimal_int(precision$0,ib) | 0) | 0; switch$3 = 1} if(! switch$3)var width$10=width$6; var width$7=width$10; switch$2 = 1} if(! switch$2)var width$7=width$6; var width$8=width$7} else var width$8=width$5; if(0 !== width$8 && ! end_of_input(ib)) {var c$1=peek_char(ib); if(80 !== c$1 && 112 !== c$1)return width$8; var width$9=store_char(width$8,ib,c$1), _jD_=0 === width$9?1:0, _jE_=_jD_ || end_of_input(ib); if(_jE_)bad_hex_float(0); return scan_optionally_signed_decimal(width$9,ib)} return width$8} return width$5} return width$4} if(73 === c)switch$0 = 1} if(switch$0) {var width$2=store_char(width$0,ib,c), _jy_=0 === width$2?1:0, _jz_=_jy_ || end_of_input(ib); if(_jz_)bad_hex_float(0); return check_case_insensitive_string (width$2,ib,bad_hex_float,cst_nfinity)} return bad_hex_float(0)} function scan_caml_float_rest(width,precision,ib) {var _jo_=0 === width?1:0,_jp_=_jo_ || end_of_input(ib); if(_jp_)bad_float(0); var width$0=scan_decimal_digit_star(width,ib), _jq_=0 === width$0?1:0, _jr_=_jq_ || end_of_input(ib); if(_jr_)bad_float(0); var c=peek_char(ib),switcher=c - 69 | 0; if(32 < switcher >>> 0) {if(-23 === switcher) {var width$1=store_char(width$0,ib,c), precision$0=min$1(width$1,precision), width_precision=scan_fractional_part(precision$0,ib), frac_width=precision$0 - width_precision | 0, width$2=width$1 - frac_width | 0; return scan_exponent_part(width$2,ib)}} else if(30 < switcher - 1 >>> 0)return scan_exponent_part(width$0,ib); return bad_float(0)} function scan_caml_float(width,precision,ib) {var _ja_=0 === width?1:0,_jb_=_ja_ || end_of_input(ib); if(_jb_)bad_float(0); var width$0=scan_sign(width,ib), _jc_=0 === width$0?1:0, _jd_=_jc_ || end_of_input(ib); if(_jd_)bad_float(0); var c=peek_char(ib); if(49 <= c) {if(! (58 <= c)) {var width$1=store_char(width$0,ib,c), _je_=0 === width$1?1:0, _jf_=_je_ || end_of_input(ib); if(_jf_)bad_float(0); return scan_caml_float_rest(width$1,precision,ib)}} else if(48 <= c) {var width$2=store_char(width$0,ib,c), _jg_=0 === width$2?1:0, _jh_=_jg_ || end_of_input(ib); if(_jh_)bad_float(0); var c$0=peek_char(ib); if(88 !== c$0 && 120 !== c$0) return scan_caml_float_rest(width$2,precision,ib); var width$3=store_char(width$2,ib,c$0), _ji_=0 === width$3?1:0, _jj_=_ji_ || end_of_input(ib); if(_jj_)bad_float(0); var width$4=scan_hexadecimal_int(width$3,ib), _jk_=0 === width$4?1:0, _jl_=_jk_ || end_of_input(ib); if(_jl_)bad_float(0); var c$1=peek_char(ib),switcher=c$1 - 80 | 0,switch$0=0; if(32 < switcher >>> 0) if(-34 === switcher) {var width$5=store_char(width$4,ib,c$1),switch$1=0; if(0 !== width$5 && ! end_of_input(ib)) {var match=peek_char(ib),switch$2=0; if(80 !== match && 112 !== match) {var precision$0=min$1(width$5,precision), width$10= width$5 - (precision$0 - scan_hexadecimal_int(precision$0,ib) | 0) | 0; switch$2 = 1} if(! switch$2)var width$10=width$5; var width$6=width$10; switch$1 = 1} if(! switch$1)var width$6=width$5; var width$7=width$6} else switch$0 = 1; else if(30 < switcher - 1 >>> 0)var width$7=width$4;else switch$0 = 1; var width$8=switch$0?bad_float(0):width$7; if(0 !== width$8 && ! end_of_input(ib)) {var c$2=peek_char(ib); if(80 !== c$2 && 112 !== c$2)return width$8; var width$9=store_char(width$8,ib,c$2), _jm_=0 === width$9?1:0, _jn_=_jm_ || end_of_input(ib); if(_jn_)bad_hex_float(0); return scan_optionally_signed_decimal(width$9,ib)} return width$8} return bad_float(0)} function scan_string(stp,width,ib) {var width$0=width; for(;;) {if(0 === width$0)return width$0; var c=peek_char(ib); if(ib[1])return width$0; if(stp) {var c$0=stp[1]; if(c === c$0)return skip_char(width$0,ib); var width$1=store_char(width$0,ib,c),width$0=width$1; continue} var _i$_=c - 9 | 0,switch$0=0; if(4 < _i$_ >>> 0) {if(23 === _i$_)switch$0 = 1} else if(1 < _i$_ - 2 >>> 0)switch$0 = 1; if(switch$0)return width$0; var width$2=store_char(width$0,ib,c),width$0=width$2; continue}} function scan_char(width,ib) {return store_char(width,ib,checked_peek_char(ib))} function hexadecimal_value_of_char(d) {return 97 <= d?d - 87 | 0:65 <= d?d - 55 | 0:d - 48 | 0} function check_next_char(message,width,ib) {if(0 === width)return bad_token_length(message); var c=peek_char(ib); return ib[1]?bad_input(caml_call1(sprintf(_cu_),message)):c} function check_next_char_for_char(_i9_,_i__) {return check_next_char(cst_a_Char,_i9_,_i__)} function check_next_char_for_string(_i7_,_i8_) {return check_next_char(cst_a_String,_i7_,_i8_)} function scan_backslash_char(width,ib) {var c0=check_next_char_for_char(width,ib),switch$0=0; if(40 <= c0) {if(58 <= c0) {var switcher=c0 - 92 | 0; if(! (28 < switcher >>> 0)) switch(switcher) {case 28: var get_digit= function(param) {var c=next_char(ib),_i6_=c - 48 | 0,switch$0=0; if(22 < _i6_ >>> 0) {if(! (5 < _i6_ - 49 >>> 0))switch$0 = 1} else if(6 < _i6_ - 10 >>> 0)switch$0 = 1; return switch$0?c:bad_input_escape(c)}, c1=get_digit(0), c2=get_digit(0), _i2_=hexadecimal_value_of_char(c2), c$0=(16 * hexadecimal_value_of_char(c1) | 0) + _i2_ | 0, switch$1=0; if(0 <= c$0 && ! (255 < c$0)) {var _i4_=char_of_int(c$0);switch$1 = 1} if(! switch$1) var _i4_=bad_input(caml_call2(sprintf(_cB_),c1,c2)); return store_char(width - 2 | 0,ib,_i4_); case 0: case 6: case 18: case 22: case 24:switch$0 = 1;break }} else if(48 <= c0) {var get_digit$0= function(param) {var c=next_char(ib); return 9 < c - 48 >>> 0?bad_input_escape(c):c}, c1$0=get_digit$0(0), c2$0=get_digit$0(0), c= ((100 * (c0 - 48 | 0) | 0) + (10 * (c1$0 - 48 | 0) | 0) | 0) + (c2$0 - 48 | 0) | 0, switch$2=0; if(0 <= c && ! (255 < c)){var _i5_=char_of_int(c);switch$2 = 1} if(! switch$2) var _i5_=bad_input(caml_call3(sprintf(_cA_),c0,c1$0,c2$0)); return store_char(width - 2 | 0,ib,_i5_)}} else if(34 === c0 || 39 <= c0)switch$0 = 1; if(switch$0) {var switch$3=0; if(110 <= c0) if(117 <= c0) switch$3 = 1; else switch(c0 - 110 | 0) {case 0:var _i3_=10;break; case 4:var _i3_=13;break; case 6:var _i3_=9;break; default:switch$3 = 1} else if(98 === c0)var _i3_=8;else switch$3 = 1; if(switch$3)var _i3_=c0; return store_char(width,ib,_i3_)} return bad_input_escape(c0)} function scan_caml_char(width,ib) {function find_stop(width) {var c=check_next_char_for_char(width,ib); return 39 === c?ignore_char(width,ib):character_mismatch(39,c)} var c=checked_peek_char(ib); if(39 === c) {var width$0=ignore_char(width,ib), c$0=check_next_char_for_char(width$0,ib); return 92 === c$0 ?find_stop(scan_backslash_char(ignore_char(width$0,ib),ib)) :find_stop(store_char(width$0,ib,c$0))} return character_mismatch(39,c)} function scan_caml_string(width,ib) {function find_stop$0(counter,width) {var width$0=width; for(;;) {var c=check_next_char_for_string(width$0,ib); if(34 === c)return ignore_char(width$0,ib); if(92 === c) {var width$1=ignore_char(width$0,ib), match=check_next_char_for_string(width$1,ib); if(10 === match) {var _i0_=ignore_char(width$1,ib); if(counter < 50) {var counter$0=counter + 1 | 0; return skip_spaces(counter$0,_i0_)} return caml_trampoline_return(skip_spaces,[0,_i0_])} if(13 === match) {var width$3=ignore_char(width$1,ib), match$0=check_next_char_for_string(width$3,ib); if(10 === match$0) {var _i1_=ignore_char(width$3,ib); if(counter < 50) {var counter$1=counter + 1 | 0; return skip_spaces(counter$1,_i1_)} return caml_trampoline_return(skip_spaces,[0,_i1_])} var width$5=store_char(width$3,ib,13),width$0=width$5; continue} var width$4=scan_backslash_char(width$1,ib),width$0=width$4; continue} var width$2=store_char(width$0,ib,c),width$0=width$2; continue}} function skip_spaces(counter,width) {var width$0=width; for(;;) {var match=check_next_char_for_string(width$0,ib); if(32 === match) {var width$1=ignore_char(width$0,ib),width$0=width$1;continue} if(counter < 50) {var counter$0=counter + 1 | 0; return find_stop$0(counter$0,width$0)} return caml_trampoline_return(find_stop$0,[0,width$0])}} function find_stop(width){return caml_trampoline(find_stop$0(0,width))} var c=checked_peek_char(ib); return 34 === c ?find_stop(ignore_char(width,ib)) :character_mismatch(34,c)} function scan_chars_in_char_set(char_set,scan_indic,width,ib) {function scan_chars(i,stp) {var i$0=i; for(;;) {var c=peek_char(ib),_iW_=0 < i$0?1:0; if(_iW_) {var _iX_=1 - ib[1]; if(_iX_) var _iY_=is_in_char_set(char_set,c),_iZ_=_iY_?c !== stp?1:0:_iY_; else var _iZ_=_iX_} else var _iZ_=_iW_; if(_iZ_) {store_char(max_int,ib,c);var i$1=i$0 - 1 | 0,i$0=i$1;continue} return _iZ_}} if(scan_indic) {var c=scan_indic[1]; scan_chars(width,c); var _iV_=1 - ib[1]; if(_iV_) {var ci=peek_char(ib); return c === ci?invalidate_current_char(ib):character_mismatch(c,ci)} return _iV_} return scan_chars(width,-1)} function scanf_bad_input(ib,x) {if(x[1] === Scan_failure) var s=x[2]; else {if(x[1] !== Failure)throw x;var s=x[2]} var i=char_count(ib); return bad_input(caml_call2(sprintf(_cD_),i,s))} function get_counter(ib,counter) {switch(counter) {case 0:return ib[5];case 1:return char_count(ib);default:return ib[6]}} function width_of_pad_opt(pad_opt) {if(pad_opt){var width=pad_opt[1];return width}return max_int} function stopper_of_formatting_lit(fmting) {if(6 === fmting)return _cE_; var str=string_of_formatting_lit(fmting), stp=caml_string_get(str,1), sub_str=sub$0(str,2,caml_ml_string_length(str) - 2 | 0); return [0,stp,sub_str]} function take_format_readers$0(counter,k,fmt) {var fmt$0=fmt; for(;;) if(typeof fmt$0 === "number") return caml_call1(k,0); else switch(fmt$0[0]) {case 0:var fmt$1=fmt$0[1],fmt$0=fmt$1;continue; case 1:var fmt$2=fmt$0[1],fmt$0=fmt$2;continue; case 2:var fmt$3=fmt$0[2],fmt$0=fmt$3;continue; case 3:var fmt$4=fmt$0[2],fmt$0=fmt$4;continue; case 4:var fmt$5=fmt$0[4],fmt$0=fmt$5;continue; case 5:var fmt$6=fmt$0[4],fmt$0=fmt$6;continue; case 6:var fmt$7=fmt$0[4],fmt$0=fmt$7;continue; case 7:var fmt$8=fmt$0[4],fmt$0=fmt$8;continue; case 8:var fmt$9=fmt$0[4],fmt$0=fmt$9;continue; case 9:var fmt$10=fmt$0[2],fmt$0=fmt$10;continue; case 10:var fmt$11=fmt$0[1],fmt$0=fmt$11;continue; case 11:var fmt$12=fmt$0[2],fmt$0=fmt$12;continue; case 12:var fmt$13=fmt$0[2],fmt$0=fmt$13;continue; case 13:var fmt$14=fmt$0[3],fmt$0=fmt$14;continue; case 14: var rest=fmt$0[3],fmtty=fmt$0[2],_iT_=erase_rel(symm(fmtty)); if(counter < 50) {var counter$0=counter + 1 | 0; return take_fmtty_format_readers$0(counter$0,k,_iT_,rest)} return caml_trampoline_return (take_fmtty_format_readers$0,[0,k,_iT_,rest]); case 15:var fmt$15=fmt$0[1],fmt$0=fmt$15;continue; case 16:var fmt$16=fmt$0[1],fmt$0=fmt$16;continue; case 17:var fmt$17=fmt$0[2],fmt$0=fmt$17;continue; case 18: var _iU_=fmt$0[1]; if(0 === _iU_[0]) {var rest$0=fmt$0[2], match=_iU_[1], fmt$18=match[1], fmt$19=concat_fmt(fmt$18,rest$0), fmt$0=fmt$19; continue} var rest$1=fmt$0[2], match$0=_iU_[1], fmt$20=match$0[1], fmt$21=concat_fmt(fmt$20,rest$1), fmt$0=fmt$21; continue; case 19: var fmt_rest=fmt$0[1]; return function(reader) {function new_k(readers_rest) {return caml_call1(k,[0,reader,readers_rest])} return take_format_readers(new_k,fmt_rest)}; case 20:var fmt$22=fmt$0[3],fmt$0=fmt$22;continue; case 21:var fmt$23=fmt$0[2],fmt$0=fmt$23;continue; case 22:var fmt$24=fmt$0[1],fmt$0=fmt$24;continue; case 23: var rest$2=fmt$0[2],ign=fmt$0[1]; if(typeof ign === "number") switch(ign) {case 0:var fmt$0=rest$2;continue; case 1:var fmt$0=rest$2;continue; case 2: return function(reader) {function new_k(readers_rest) {return caml_call1(k,[0,reader,readers_rest])} return take_format_readers(new_k,rest$2)}; default:var fmt$0=rest$2;continue} else switch(ign[0]) {case 0:var fmt$0=rest$2;continue; case 1:var fmt$0=rest$2;continue; case 2:var fmt$0=rest$2;continue; case 3:var fmt$0=rest$2;continue; case 4:var fmt$0=rest$2;continue; case 5:var fmt$0=rest$2;continue; case 6:var fmt$0=rest$2;continue; case 7:var fmt$0=rest$2;continue; case 8:var fmt$0=rest$2;continue; case 9: var fmtty$0=ign[2]; if(counter < 50) {var counter$1=counter + 1 | 0; return take_fmtty_format_readers$0 (counter$1,k,fmtty$0,rest$2)} return caml_trampoline_return (take_fmtty_format_readers$0,[0,k,fmtty$0,rest$2]); case 10:var fmt$0=rest$2;continue; default:var fmt$0=rest$2;continue} default:var fmt$25=fmt$0[3],fmt$0=fmt$25;continue}} function take_fmtty_format_readers$0(counter,k,fmtty,fmt) {var fmtty$0=fmtty; for(;;) if(typeof fmtty$0 === "number") {if(counter < 50) {var counter$0=counter + 1 | 0; return take_format_readers$0(counter$0,k,fmt)} return caml_trampoline_return(take_format_readers$0,[0,k,fmt])} else switch(fmtty$0[0]) {case 0:var fmtty$1=fmtty$0[1],fmtty$0=fmtty$1;continue; case 1:var fmtty$2=fmtty$0[1],fmtty$0=fmtty$2;continue; case 2:var fmtty$3=fmtty$0[1],fmtty$0=fmtty$3;continue; case 3:var fmtty$4=fmtty$0[1],fmtty$0=fmtty$4;continue; case 4:var fmtty$5=fmtty$0[1],fmtty$0=fmtty$5;continue; case 5:var fmtty$6=fmtty$0[1],fmtty$0=fmtty$6;continue; case 6:var fmtty$7=fmtty$0[1],fmtty$0=fmtty$7;continue; case 7:var fmtty$8=fmtty$0[1],fmtty$0=fmtty$8;continue; case 8:var fmtty$9=fmtty$0[2],fmtty$0=fmtty$9;continue; case 9: var rest=fmtty$0[3], ty2=fmtty$0[2], ty1=fmtty$0[1], ty=trans(symm(ty1),ty2), fmtty$10=concat_fmtty(ty,rest), fmtty$0=fmtty$10; continue; case 10:var fmtty$11=fmtty$0[1],fmtty$0=fmtty$11;continue; case 11:var fmtty$12=fmtty$0[1],fmtty$0=fmtty$12;continue; case 12:var fmtty$13=fmtty$0[1],fmtty$0=fmtty$13;continue; case 13: var fmt_rest=fmtty$0[1]; return function(reader) {function new_k(readers_rest) {return caml_call1(k,[0,reader,readers_rest])} return take_fmtty_format_readers(new_k,fmt_rest,fmt)}; default: var fmt_rest$0=fmtty$0[1]; return function(reader) {function new_k(readers_rest) {return caml_call1(k,[0,reader,readers_rest])} return take_fmtty_format_readers(new_k,fmt_rest$0,fmt)}}} function take_format_readers(k,fmt) {return caml_trampoline(take_format_readers$0(0,k,fmt))} function take_fmtty_format_readers(k,fmtty,fmt) {return caml_trampoline(take_fmtty_format_readers$0(0,k,fmtty,fmt))} function make_scanf(ib,fmt,readers) {var fmt$0=fmt; for(;;) if(typeof fmt$0 === "number") return 0; else switch(fmt$0[0]) {case 0: var rest=fmt$0[1]; scan_char(0,ib); var c=token_char(ib); return [0,c,make_scanf(ib,rest,readers)]; case 1: var rest$0=fmt$0[1]; scan_caml_char(0,ib); var c$0=token_char(ib); return [0,c$0,make_scanf(ib,rest$0,readers)]; case 2: var _iG_=fmt$0[1],_iH_=fmt$0[2]; if(typeof _iH_ !== "number") switch(_iH_[0]) {case 17: var rest$2=_iH_[2], fmting_lit=_iH_[1], match=stopper_of_formatting_lit(fmting_lit), str=match[2], stp=match[1], scan$0= function(width,param,ib) {return scan_string([0,stp],width,ib)}, str_rest=[11,str,rest$2]; return pad_prec_scanf (ib,str_rest,readers,_iG_,0,scan$0,token_string); case 18: var _iI_=_iH_[1]; if(0 === _iI_[0]) {var rest$3=_iH_[2], match$0=_iI_[1], fmt$1=match$0[1], scan$1= function(width,param,ib){return scan_string(_cF_,width,ib)}; return pad_prec_scanf (ib, concat_fmt(fmt$1,rest$3), readers, _iG_, 0, scan$1, token_string)} var rest$4=_iH_[2], match$1=_iI_[1], fmt$2=match$1[1], scan$2= function(width,param,ib){return scan_string(_cG_,width,ib)}; return pad_prec_scanf (ib, concat_fmt(fmt$2,rest$4), readers, _iG_, 0, scan$2, token_string) } var rest$1=fmt$0[2], scan=function(width,param,ib){return scan_string(0,width,ib)}; return pad_prec_scanf(ib,rest$1,readers,_iG_,0,scan,token_string); case 3: var rest$5=fmt$0[2], pad=fmt$0[1], scan$3=function(width,param,ib){return scan_caml_string(width,ib)}; return pad_prec_scanf(ib,rest$5,readers,pad,0,scan$3,token_string); case 4: var rest$6=fmt$0[4], prec=fmt$0[3], pad$0=fmt$0[2], iconv=fmt$0[1], conv=integer_conversion_of_char(char_of_iconv(iconv)), scan$4= function(width,param,ib) {return scan_int_conversion(conv,width,ib)}; return pad_prec_scanf (ib, rest$6, readers, pad$0, prec, scan$4, function(ib) {return caml_int_of_string(token_int_literal(conv,ib))}); case 5: var rest$7=fmt$0[4], prec$0=fmt$0[3], pad$1=fmt$0[2], iconv$0=fmt$0[1], conv$0=integer_conversion_of_char(char_of_iconv(iconv$0)), scan$5= function(width,param,ib) {return scan_int_conversion(conv$0,width,ib)}; return pad_prec_scanf (ib, rest$7, readers, pad$1, prec$0, scan$5, function(ib) {return caml_int_of_string(token_int_literal(conv$0,ib))}); case 6: var rest$8=fmt$0[4], prec$1=fmt$0[3], pad$2=fmt$0[2], iconv$1=fmt$0[1], conv$1=integer_conversion_of_char(char_of_iconv(iconv$1)), scan$6= function(width,param,ib) {return scan_int_conversion(conv$1,width,ib)}; return pad_prec_scanf (ib, rest$8, readers, pad$2, prec$1, scan$6, function(ib) {return caml_int_of_string(token_int_literal(conv$1,ib))}); case 7: var rest$9=fmt$0[4], prec$2=fmt$0[3], pad$3=fmt$0[2], iconv$2=fmt$0[1], conv$2=integer_conversion_of_char(char_of_iconv(iconv$2)), scan$7= function(width,param,ib) {return scan_int_conversion(conv$2,width,ib)}; return pad_prec_scanf (ib, rest$9, readers, pad$3, prec$2, scan$7, function(ib) {return caml_int64_of_string(token_int_literal(conv$2,ib))}); case 8: switch(fmt$0[1][2]) {case 5: case 8: var rest$11=fmt$0[4],prec$4=fmt$0[3],pad$5=fmt$0[2]; return pad_prec_scanf (ib, rest$11, readers, pad$5, prec$4, scan_caml_float, token_float); case 6: case 7: var rest$12=fmt$0[4],prec$5=fmt$0[3],pad$6=fmt$0[2]; return pad_prec_scanf (ib,rest$12,readers,pad$6,prec$5,scan_hex_float,token_float); default: var rest$10=fmt$0[4],prec$3=fmt$0[3],pad$4=fmt$0[2]; return pad_prec_scanf (ib,rest$10,readers,pad$4,prec$3,scan_float,token_float)} case 9: var rest$13=fmt$0[2], pad$7=fmt$0[1], scan$8= function(param,_iS_,ib) {var c=checked_peek_char(ib), m= 102 === c ?5 :116 === c?4:bad_input(caml_call1(sprintf(_cC_),c)); return scan_string(0,m,ib)}; return pad_prec_scanf(ib,rest$13,readers,pad$7,0,scan$8,token_bool); case 10: var rest$14=fmt$0[1]; if(end_of_input(ib)){var fmt$0=rest$14;continue} return bad_input(cst_end_of_input_not_found); case 11: var rest$15=fmt$0[2],str$0=fmt$0[1]; iter$4(function(_iR_){return check_char(ib,_iR_)},str$0); var fmt$0=rest$15; continue; case 12: var rest$16=fmt$0[2],chr=fmt$0[1]; check_char(ib,chr); var fmt$0=rest$16; continue; case 13: var rest$17=fmt$0[3],fmtty=fmt$0[2],pad_opt=fmt$0[1]; scan_caml_string(width_of_pad_opt(pad_opt),ib); var s=token_string(ib); try {var _iJ_=format_of_string_fmtty(s,fmtty),fmt$3=_iJ_} catch(exn) {exn = caml_wrap_exception(exn); if(exn[1] !== Failure)throw exn; var msg=exn[2],fmt$3=bad_input(msg)} return [0,fmt$3,make_scanf(ib,rest$17,readers)]; case 14: var rest$18=fmt$0[3],fmtty$0=fmt$0[2],pad_opt$0=fmt$0[1]; scan_caml_string(width_of_pad_opt(pad_opt$0),ib); var s$0=token_string(ib); try {var match$2=fmt_ebb_of_string(0,s$0), fmt$6=match$2[1], match$3=fmt_ebb_of_string(0,s$0), fmt$7=match$3[1], fmt$8=type_format(fmt$7,erase_rel(symm(fmtty$0))), _iL_=type_format(fmt$6,erase_rel(fmtty$0)), fmt$5=fmt$8, fmt$4=_iL_} catch(exn) {exn = caml_wrap_exception(exn); if(exn[1] !== Failure)throw exn; var msg$0=exn[2], _iK_=bad_input(msg$0), fmt$5=_iK_[2], fmt$4=_iK_[1]} return [0, [0,fmt$4,s$0], make_scanf(ib,concat_fmt(fmt$5,rest$18),readers)]; case 15:return invalid_arg(cst_scanf_bad_conversion_a); case 16:return invalid_arg(cst_scanf_bad_conversion_t); case 17: var rest$19=fmt$0[2], formatting_lit=fmt$0[1], _iM_=string_of_formatting_lit(formatting_lit); iter$4(function(_iQ_){return check_char(ib,_iQ_)},_iM_); var fmt$0=rest$19; continue; case 18: var _iN_=fmt$0[1]; if(0 === _iN_[0]) {var rest$20=fmt$0[2],match$4=_iN_[1],fmt$9=match$4[1]; check_char(ib,64); check_char(ib,123); var fmt$10=concat_fmt(fmt$9,rest$20),fmt$0=fmt$10; continue} var rest$21=fmt$0[2],match$5=_iN_[1],fmt$11=match$5[1]; check_char(ib,64); check_char(ib,91); var fmt$12=concat_fmt(fmt$11,rest$21),fmt$0=fmt$12; continue; case 19: var fmt_rest=fmt$0[1]; if(readers) {var readers_rest=readers[2], reader=readers[1], x=caml_call1(reader,ib); return [0,x,make_scanf(ib,fmt_rest,readers_rest)]} return invalid_arg(cst_scanf_missing_reader); case 20: var _iO_=fmt$0[1],_iP_=fmt$0[3]; if(typeof _iP_ !== "number" && 17 === _iP_[0]) {var rest$23=_iP_[2], fmting_lit$0=_iP_[1], char_set$0=fmt$0[2], match$6=stopper_of_formatting_lit(fmting_lit$0), str$1=match$6[2], stp$0=match$6[1], width$0=width_of_pad_opt(_iO_); scan_chars_in_char_set(char_set$0,[0,stp$0],width$0,ib); var s$2=token_string(ib),str_rest$0=[11,str$1,rest$23]; return [0,s$2,make_scanf(ib,str_rest$0,readers)]} var rest$22=fmt$0[3], char_set=fmt$0[2], width=width_of_pad_opt(_iO_); scan_chars_in_char_set(char_set,0,width,ib); var s$1=token_string(ib); return [0,s$1,make_scanf(ib,rest$22,readers)]; case 21: var rest$24=fmt$0[2], counter=fmt$0[1], count=get_counter(ib,counter); return [0,count,make_scanf(ib,rest$24,readers)]; case 22: var rest$25=fmt$0[1],c$1=checked_peek_char(ib); return [0,c$1,make_scanf(ib,rest$25,readers)]; case 23: var rest$26=fmt$0[2], ign=fmt$0[1], match$7=param_format_of_ignored_format(ign,rest$26), fmt$13=match$7[1], match$8=make_scanf(ib,fmt$13,readers); if(match$8){var arg_rest=match$8[2];return arg_rest} throw [0,Assert_failure,_cH_]; default:return invalid_arg(cst_scanf_bad_conversion_custo)}} function pad_prec_scanf(ib,fmt,readers,pad,prec,scan,token) {if(typeof pad === "number") {if(typeof prec === "number") {if(prec)return invalid_arg(cst_scanf_bad_conversion); caml_call3(scan,max_int,max_int,ib); var x=caml_call1(token,ib); return [0,x,make_scanf(ib,fmt,readers)]} var p=prec[1]; caml_call3(scan,max_int,p,ib); var x$0=caml_call1(token,ib); return [0,x$0,make_scanf(ib,fmt,readers)]} else {if(0 === pad[0]) {if(pad[1]) {var _iF_=pad[2]; if(typeof prec === "number") {if(prec)return invalid_arg(cst_scanf_bad_conversion$0); caml_call3(scan,_iF_,max_int,ib); var x$1=caml_call1(token,ib); return [0,x$1,make_scanf(ib,fmt,readers)]} var p$0=prec[1]; caml_call3(scan,_iF_,p$0,ib); var x$2=caml_call1(token,ib); return [0,x$2,make_scanf(ib,fmt,readers)]} return invalid_arg(cst_scanf_bad_conversion$1)} return invalid_arg(cst_scanf_bad_conversion$2)}} function kscanf(ib,ef,param) {var str=param[2],fmt=param[1]; function apply(f,args) {var f$0=f,args$0=args; for(;;) {if(args$0) {var r=args$0[2], x=args$0[1], f$1=caml_call1(f$0,x), f$0=f$1, args$0=r; continue} return f$0}} function k(readers,f) {reset_token(ib); try {var _iE_=[0,make_scanf(ib,fmt,readers)],_iD_=_iE_} catch(exc) {exc = caml_wrap_exception(exc); var switch$0=0; if (exc[1] !== Scan_failure && exc[1] !== Failure && exc !== End_of_file) {if(exc[1] !== Invalid_argument)throw exc; var msg=exc[2], _iC_= invalid_arg (cat(msg,cat(cst_in_format,cat(escaped$1(str),cst$88)))); switch$0 = 1} if(! switch$0)var _iC_=[1,exc]; var _iD_=_iC_} if(0 === _iD_[0]){var args=_iD_[1];return apply(f,args)} var exc=_iD_[1]; return caml_call2(ef,ib,exc)} return take_format_readers(k,fmt)} function bscanf(ib,fmt){return kscanf(ib,scanf_bad_input,fmt)} function ksscanf(s,ef,fmt){return kscanf(from_string$1(s),ef,fmt)} function sscanf(s,fmt) {return kscanf(from_string$1(s),scanf_bad_input,fmt)} function scanf(fmt){return kscanf(stdib,scanf_bad_input,fmt)} function bscanf_format(ib,format,f) {scan_caml_string(max_int,ib); var str=token_string(ib); try {var _iB_=format_of_string_format(str,format),fmt=_iB_} catch(exn) {exn = caml_wrap_exception(exn); if(exn[1] !== Failure)throw exn; var msg=exn[2],fmt=bad_input(msg)} return caml_call1(f,fmt)} function sscanf_format(s,format,f) {return bscanf_format(from_string$1(s),format,f)} function format_from_string(s,fmt) {function _iA_(x){return x} return sscanf_format(cat(cst$90,cat(escaped$1(s),cst$89)),fmt,_iA_)} function unescaped(s) {function _iz_(x){return x} return caml_call1(sscanf(cat(cst$92,cat(s,cst$91)),_cI_),_iz_)} function kfscanf(ic,ef,fmt){return kscanf(memo_from_channel(ic),ef,fmt)} function fscanf(ic,fmt) {return kscanf(memo_from_channel(ic),scanf_bad_input,fmt)} var Stdlib_Scanf= [0, [0, stdib, from_file, from_file_bin, close_in, from_file, from_file_bin, from_string$1, from_function$0, from_channel$0, end_of_input, beginning_of_input, name_of_input, stdib], Scan_failure, bscanf, sscanf, scanf, kscanf, ksscanf, bscanf_format, sscanf_format, format_from_string, unescaped, fscanf, kfscanf]; caml_register_global(819,Stdlib_Scanf,"Stdlib__Scanf"); function register(name,v){return caml_register_named_value(name,v)} function register_exception(name,exn) {var slot=caml_obj_tag(exn) === 248?exn:exn[1]; return caml_register_named_value(name,slot)} var Stdlib_Callback=[0,register,register_exception]; caml_register_global(820,Stdlib_Callback,"Stdlib__Callback"); function copy$7(o){var o$0=o.slice();return caml_set_oo_id(o$0)} var params$0=[0,1,1,1,3,16],initial_object_size=2,dummy_item=0; function public_method_label(s) {var accu=[0,0],_iw_=caml_ml_string_length(s) - 1 | 0,_iv_=0; if(! (_iw_ < 0)) {var i=_iv_; for(;;) {var _ix_=caml_string_get(s,i); accu[1] = (223 * accu[1] | 0) + _ix_ | 0; var _iy_=i + 1 | 0; if(_iw_ !== i){var i=_iy_;continue} break}} accu[1] = accu[1] & 2147483647; var tag=1073741823 < accu[1]?accu[1] + 2147483648 | 0:accu[1]; return tag} function compare$14(x,y){return caml_string_compare(x,y)} var Vars=caml_call1(Stdlib_Map[1],[0,compare$14]); function compare$15(x,y){return caml_string_compare(x,y)} var Meths=caml_call1(Stdlib_Map[1],[0,compare$15]), compare$16=caml_int_compare, Labs=caml_call1(Stdlib_Map[1],[0,compare$16]), dummy_table=[0,0,[0,dummy_item],Meths[1],Labs[1],0,0,Vars[1],0], table_count=[0,0], dummy_met=caml_obj_block(0,0); function fit_size(n){return 2 < n?fit_size((n + 1 | 0) / 2 | 0) * 2 | 0:n} function new_table(pub_labels) {table_count[1]++; var len=pub_labels.length - 1, methods=caml_make_vect((len * 2 | 0) + 2 | 0,dummy_met); caml_check_bound(methods,0)[1] = len; var _ip_=((fit_size(len) * 32 | 0) / 8 | 0) - 1 | 0; caml_check_bound(methods,1)[2] = _ip_; var _ir_=len - 1 | 0,_iq_=0; if(! (_ir_ < 0)) {var i=_iq_; for(;;) {var _it_=(i * 2 | 0) + 3 | 0, _is_=caml_check_bound(pub_labels,i)[1 + i]; caml_check_bound(methods,_it_)[1 + _it_] = _is_; var _iu_=i + 1 | 0; if(_ir_ !== i){var i=_iu_;continue} break}} return [0,initial_object_size,methods,Meths[1],Labs[1],0,0,Vars[1],0]} function resize$1(array,new_size) {var old_size=array[2].length - 1,_in_=old_size < new_size?1:0; if(_in_) {var new_buck=caml_make_vect(new_size,dummy_met); blit$1(array[2],0,new_buck,0,old_size); array[2] = new_buck; var _io_=0} else var _io_=_in_; return _io_} var method_count=[0,0],inst_var_count=[0,0]; function new_method(table) {var index=table[2].length - 1; resize$1(table,index + 1 | 0); return index} function get_method_label(table,name) {try {var _il_=caml_call2(Meths[28],name,table[3]);return _il_} catch(_im_) {_im_ = caml_wrap_exception(_im_); if(_im_ === Not_found) {var label=new_method(table); table[3] = caml_call3(Meths[4],name,label,table[3]); table[4] = caml_call3(Labs[4],label,1,table[4]); return label} throw _im_}} function get_method_labels(table,names) {return map$7(function(_ik_){return get_method_label(table,_ik_)},names)} function set_method(table,label,element) {method_count[1]++; return caml_call2(Labs[28],label,table[4]) ?(resize$1(table,label + 1 | 0), caml_check_bound(table[2],label)[1 + label] = element, 0) :(table[6] = [0,[0,label,element],table[6]],0)} function get_method(table,label) {try {var _ii_=assoc(label,table[6]);return _ii_} catch(_ij_) {_ij_ = caml_wrap_exception(_ij_); if(_ij_ === Not_found) return caml_check_bound(table[2],label)[1 + label]; throw _ij_}} function to_list$3(arr){return 0 === arr?0:to_list$1(arr)} function narrow(table,vars,virt_meths,concr_meths) {var vars$0=to_list$3(vars), virt_meths$0=to_list$3(virt_meths), concr_meths$0=to_list$3(concr_meths), virt_meth_labs= map$4 (function(_ih_){return get_method_label(table,_ih_)},virt_meths$0), concr_meth_labs= map$4 (function(_ig_){return get_method_label(table,_ig_)},concr_meths$0); table[5] = [0, [0,table[3],table[4],table[6],table[7],virt_meth_labs,vars$0], table[5]]; var _h9_=Vars[1],_h__=table[7]; function _h$_(lab,info,tvars) {return mem(lab,vars$0)?caml_call3(Vars[4],lab,info,tvars):tvars} table[7] = caml_call3(Vars[13],_h$_,_h__,_h9_); var by_name=[0,Meths[1]],by_label=[0,Labs[1]]; iter2$0 (function(met,label) {by_name[1] = caml_call3(Meths[4],met,label,by_name[1]); var _ic_=by_label[1]; try {var _ie_=caml_call2(Labs[28],label,table[4]),_id_=_ie_} catch(_if_) {_if_ = caml_wrap_exception(_if_); if(_if_ !== Not_found)throw _if_; var _id_=1} by_label[1] = caml_call3(Labs[4],label,_id_,_ic_); return 0}, concr_meths$0, concr_meth_labs); iter2$0 (function(met,label) {by_name[1] = caml_call3(Meths[4],met,label,by_name[1]); by_label[1] = caml_call3(Labs[4],label,0,by_label[1]); return 0}, virt_meths$0, virt_meth_labs); table[3] = by_name[1]; table[4] = by_label[1]; var _ia_=0,_ib_=table[6]; table[6] = fold_right (function(met,hm) {var lab=met[1];return mem(lab,virt_meth_labs)?hm:[0,met,hm]}, _ib_, _ia_); return 0} function widen(table) {var match=hd(table[5]), vars=match[6], virt_meths=match[5], saved_vars=match[4], saved_hidden_meths=match[3], by_label=match[2], by_name=match[1]; table[5] = tl(table[5]); table[7] = fold_left$0 (function(s,v) {var _h8_=caml_call2(Vars[28],v,table[7]); return caml_call3(Vars[4],v,_h8_,s)}, saved_vars, vars); table[3] = by_name; table[4] = by_label; var _h7_=table[6]; table[6] = fold_right (function(met,hm) {var lab=met[1];return mem(lab,virt_meths)?hm:[0,met,hm]}, _h7_, saved_hidden_meths); return 0} function new_slot(table) {var index=table[1];table[1] = index + 1 | 0;return index} function new_variable(table,name) {try {var _h5_=caml_call2(Vars[28],name,table[7]);return _h5_} catch(_h6_) {_h6_ = caml_wrap_exception(_h6_); if(_h6_ === Not_found) {var index=new_slot(table); if(caml_string_notequal(name,cst$93)) table[7] = caml_call3(Vars[4],name,index,table[7]); return index} throw _h6_}} function to_array(arr){return caml_equal(arr,0)?[0]:arr} function new_methods_variables(table,meths,vals) {var meths$0=to_array(meths), nmeths=meths$0.length - 1, nvals=vals.length - 1, res=caml_make_vect(nmeths + nvals | 0,0), _hX_=nmeths - 1 | 0, _hW_=0; if(! (_hX_ < 0)) {var i$0=_hW_; for(;;) {var _h3_= get_method_label(table,caml_check_bound(meths$0,i$0)[1 + i$0]); caml_check_bound(res,i$0)[1 + i$0] = _h3_; var _h4_=i$0 + 1 | 0; if(_hX_ !== i$0){var i$0=_h4_;continue} break}} var _hZ_=nvals - 1 | 0,_hY_=0; if(! (_hZ_ < 0)) {var i=_hY_; for(;;) {var _h1_=i + nmeths | 0, _h0_=new_variable(table,caml_check_bound(vals,i)[1 + i]); caml_check_bound(res,_h1_)[1 + _h1_] = _h0_; var _h2_=i + 1 | 0; if(_hZ_ !== i){var i=_h2_;continue} break}} return res} function get_variable(table,name) {try {var _hU_=caml_call2(Vars[28],name,table[7]);return _hU_} catch(_hV_) {_hV_ = caml_wrap_exception(_hV_); if(_hV_ === Not_found)throw [0,Assert_failure,_cJ_]; throw _hV_}} function get_variables(table,names) {return map$7(function(_hT_){return get_variable(table,_hT_)},names)} function add_initializer(table,f){table[8] = [0,f,table[8]];return 0} function create_table(public_methods) {if(0 === public_methods)return new_table([0]); var tags=map$7(public_method_label,public_methods), table=new_table(tags); iteri$3 (function(i,met) {var lab=(i * 2 | 0) + 2 | 0; table[3] = caml_call3(Meths[4],met,lab,table[3]); table[4] = caml_call3(Labs[4],lab,1,table[4]); return 0}, public_methods); return table} function init_class(table) {inst_var_count[1] = (inst_var_count[1] + table[1] | 0) - 1 | 0; table[8] = rev(table[8]); return resize$1 (table, 3 + ((caml_check_bound(table[2],1)[2] * 16 | 0) / 32 | 0) | 0)} function inherits(cla,vals,virt_meths,concr_meths,param,top) {var env=param[4],super$0=param[2]; narrow(cla,vals,virt_meths,concr_meths); var init=top?caml_call2(super$0,cla,env):caml_call1(super$0,cla); widen(cla); var _hO_=0, _hP_=to_array(concr_meths), _hQ_= [0, map$7 (function(nm){return get_method(cla,get_method_label(cla,nm))},_hP_), _hO_], _hR_=to_array(vals); return caml_array_concat ([0, [0,init], [0, map$7(function(_hS_){return get_variable(cla,_hS_)},_hR_), _hQ_]])} function make_class(pub_meths,class_init) {var table=create_table(pub_meths),env_init=caml_call1(class_init,table); init_class(table); return [0,caml_call1(env_init,0),class_init,env_init,0]} function make_class_store(pub_meths,class_init,init_table) {var table=create_table(pub_meths),env_init=caml_call1(class_init,table); init_class(table); init_table[2] = class_init; init_table[1] = env_init; return 0} function dummy_class(loc) {function undef(param){throw [0,Undefined_recursive_module,loc]} return [0,undef,undef,undef,0]} function create_object(table) {var obj=caml_obj_block(248,table[1]); obj[1] = table[2]; return caml_set_oo_id(obj)} function create_object_opt(obj_0,table) {if(obj_0)return obj_0; var obj=caml_obj_block(248,table[1]); obj[1] = table[2]; return caml_set_oo_id(obj)} function iter_f(obj,param) {var param$0=param; for(;;) {if(param$0) {var l=param$0[2],f=param$0[1]; caml_call1(f,obj); var param$0=l; continue} return 0}} function run_initializers(obj,table) {var inits=table[8],_hN_=0 !== inits?1:0; return _hN_?iter_f(obj,inits):_hN_} function run_initializers_opt(obj_0,obj,table) {if(obj_0)return obj; var inits=table[8]; if(0 !== inits)iter_f(obj,inits); return obj} function create_object_and_run_initiali(obj_0,table) {if(obj_0)return obj_0; var obj=create_object(table); run_initializers(obj,table); return obj} function get_data$0(param) {if(param)return param[2];throw [0,Assert_failure,_cN_]} function build_path(n,keys,tables) {var res=[0,0,0,0],r=[0,res],_hJ_=0; if(! (n < 0)) {var i=_hJ_; for(;;) {var _hL_=r[1]; r[1] = [0,caml_check_bound(keys,i)[1 + i],_hL_,0]; var _hM_=i + 1 | 0; if(n !== i){var i=_hM_;continue} break}} var _hK_=r[1]; if(tables){tables[2] = _hK_;return res} throw [0,Assert_failure,_cK_]} function lookup_tables(root,keys) {var tables$2=get_data$0(root); if(tables$2) {var i$1=keys.length - 1 - 1 | 0,i=i$1,tables=tables$2; a: for(;;) {if(0 <= i) {var key=caml_check_bound(keys,i)[1 + i],tables$0=tables; for(;;) {if(tables$0) {if(tables$0[1] === key) {var tables$1=get_data$0(tables$0); if(tables$1) {var i$0=i - 1 | 0,i=i$0,tables=tables$1;continue a} throw [0,Assert_failure,_cP_]} if(tables$0) {var _hI_=tables$0[3]; if(_hI_){var tables$0=_hI_;continue} var v=[0,key,0,0]; if(tables$0) {tables$0[3] = v;return build_path(i - 1 | 0,keys,v)} throw [0,Assert_failure,_cL_]} throw [0,Assert_failure,_cO_]} throw [0,Assert_failure,_cM_]}} return tables}} return build_path(keys.length - 1 - 1 | 0,keys,root)} function new_cache(table) {var n=new_method(table),switch$0=0; if (0 !== (n % 2 | 0) && ! ((2 + ((caml_check_bound(table[2],1)[2] * 16 | 0) / 32 | 0) | 0) < n)) {var n$0=new_method(table);switch$0 = 1} if(! switch$0)var n$0=n; caml_check_bound(table[2],n$0)[1 + n$0] = 0; return n$0} function set_methods(table,methods) {var len=methods.length - 1,i=[0,0]; for(;;) {if(i[1] < len) {var _hC_=i[1], label=caml_check_bound(methods,_hC_)[1 + _hC_], next= function(param) {i[1]++; var _hH_=i[1]; return caml_check_bound(methods,_hH_)[1 + _hH_]}, clo=next(0); if(typeof clo === "number") switch(clo) {case 0: var x=next(0), clo$0=function(x){return function(obj){return x}}(x); break; case 1: var n=next(0), clo$0=function(n){return function(obj){return obj[1 + n]}}(n); break; case 2: var e=next(0), n$0=next(0), clo$0= function(e,n){return function(obj){return obj[1 + e][1 + n]}} (e,n$0); break; case 3: var n$1=next(0), clo$0= function(n) {return function(obj){return caml_call1(obj[1][1 + n],obj)}} (n$1); break; case 4: var n$2=next(0), clo$0= function(n){return function(obj,x){obj[1 + n] = x;return 0}} (n$2); break; case 5: var f=next(0), x$0=next(0), clo$0= function(f,x){return function(obj){return caml_call1(f,x)}} (f,x$0); break; case 6: var f$0=next(0), n$3=next(0), clo$0= function(f,n) {return function(obj){return caml_call1(f,obj[1 + n])}} (f$0,n$3); break; case 7: var f$1=next(0), e$0=next(0), n$4=next(0), clo$0= function(f,e,n) {return function(obj) {return caml_call1(f,obj[1 + e][1 + n])}} (f$1,e$0,n$4); break; case 8: var f$2=next(0), n$5=next(0), clo$0= function(f,n) {return function(obj) {return caml_call1(f,caml_call1(obj[1][1 + n],obj))}} (f$2,n$5); break; case 9: var f$3=next(0), x$1=next(0), y=next(0), clo$0= function(f,x,y) {return function(obj){return caml_call2(f,x,y)}} (f$3,x$1,y); break; case 10: var f$4=next(0), x$2=next(0), n$6=next(0), clo$0= function(f,x,n) {return function(obj){return caml_call2(f,x,obj[1 + n])}} (f$4,x$2,n$6); break; case 11: var f$5=next(0), x$3=next(0), e$1=next(0), n$7=next(0), clo$0= function(f,x,e,n) {return function(obj) {return caml_call2(f,x,obj[1 + e][1 + n])}} (f$5,x$3,e$1,n$7); break; case 12: var f$6=next(0), x$4=next(0), n$8=next(0), clo$0= function(f,x,n) {return function(obj) {return caml_call2(f,x,caml_call1(obj[1][1 + n],obj))}} (f$6,x$4,n$8); break; case 13: var f$7=next(0), n$9=next(0), x$5=next(0), clo$0= function(f,n,x) {return function(obj){return caml_call2(f,obj[1 + n],x)}} (f$7,n$9,x$5); break; case 14: var f$8=next(0), e$2=next(0), n$10=next(0), x$6=next(0), clo$0= function(f,e,n,x) {return function(obj) {return caml_call2(f,obj[1 + e][1 + n],x)}} (f$8,e$2,n$10,x$6); break; case 15: var f$9=next(0), n$11=next(0), x$7=next(0), clo$0= function(f,n,x) {return function(obj) {return caml_call2(f,caml_call1(obj[1][1 + n],obj),x)}} (f$9,n$11,x$7); break; case 16: var n$12=next(0), x$8=next(0), clo$0= function(n,x) {return function(obj) {return caml_call2(obj[1][1 + n],obj,x)}} (n$12,x$8); break; case 17: var n$13=next(0), m=next(0), clo$0= function(n,m) {return function(obj) {return caml_call2(obj[1][1 + n],obj,obj[1 + m])}} (n$13,m); break; case 18: var n$14=next(0), e$3=next(0), m$0=next(0), clo$0= function(n,e,m) {return function(obj) {return caml_call2(obj[1][1 + n],obj,obj[1 + e][1 + m])}} (n$14,e$3,m$0); break; case 19: var n$15=next(0), m$1=next(0), clo$0= function(n,m) {return function(obj) {var _hF_=caml_call1(obj[1][1 + m],obj); return caml_call2(obj[1][1 + n],obj,_hF_)}} (n$15,m$1); break; case 20: var m$2=next(0),x$9=next(0); new_cache(table); var clo$0= function(m,x) {return function(obj) {return caml_call1(caml_get_public_method(x,m,0),x)}} (m$2,x$9); break; case 21: var m$3=next(0),n$16=next(0); new_cache(table); var clo$0= function(m,n) {return function(obj) {var _hE_=obj[1 + n]; return caml_call1(caml_get_public_method(_hE_,m,0),_hE_)}} (m$3,n$16); break; case 22: var m$4=next(0),e$4=next(0),n$17=next(0); new_cache(table); var clo$0= function(m,e,n) {return function(obj) {var _hD_=obj[1 + e][1 + n]; return caml_call1(caml_get_public_method(_hD_,m,0),_hD_)}} (m$4,e$4,n$17); break; default: var m$5=next(0),n$18=next(0); new_cache(table); var clo$0= function(m,n) {return function(obj) {var _hG_=caml_call1(obj[1][1 + n],obj); return caml_call1(caml_get_public_method(_hG_,m,0),_hG_)}} (m$5,n$18)} else var clo$0=clo; set_method(table,label,clo$0); i[1]++; continue} return 0}} function stats$0(param) {return [0,table_count[1],method_count[1],inst_var_count[1]]} var CamlinternalOO= [0, public_method_label, new_method, new_variable, new_methods_variables, get_variable, get_variables, get_method_label, get_method_labels, get_method, set_method, set_methods, narrow, widen, add_initializer, dummy_table, create_table, init_class, inherits, make_class, make_class_store, dummy_class, copy$7, create_object, create_object_opt, run_initializers, run_initializers_opt, create_object_and_run_initiali, lookup_tables, params$0, stats$0]; caml_register_global(821,CamlinternalOO,"CamlinternalOO"); var Stdlib_Oo=[0,copy$7,public_method_label,public_method_label]; caml_register_global(822,Stdlib_Oo,"Stdlib__Oo"); function init_mod_block(loc,comps$0) {var length=comps$0.length - 1, modu=caml_obj_block(0,length), _hy_=length - 1 | 0, _hx_=0; if(! (_hy_ < 0)) {var i=_hx_; for(;;) {var shape=caml_check_bound(comps$0,i)[1 + i]; if(typeof shape === "number") switch(shape) {case 0: var fn$0= function(i) {function fn(x) {var fn$0=modu[1 + i]; if(fn === fn$0)throw [0,Undefined_recursive_module,loc]; return caml_call1(fn$0,x)} return fn}, fn=fn$0(i), init=fn; break; case 1: var l=[]; runtime.caml_update_dummy (l, [246, function(l,i) {return function(_hA_) {var l$0=modu[1 + i]; if(l === l$0)throw [0,Undefined_recursive_module,loc]; var _hB_=caml_obj_tag(l$0); return 250 === _hB_ ?l$0[1] :246 === _hB_?force_lazy_block(l$0):l$0}} (l,i)]); var init=l; break; default:var init=dummy_class(loc)} else if(0 === shape[0]) var comps=shape[1],init=init_mod_block(loc,comps); else var v=shape[1],init=v; modu[1 + i] = init; var _hz_=i + 1 | 0; if(_hy_ !== i){var i=_hz_;continue} break}} return modu} function init_mod(loc,shape) {if(typeof shape !== "number" && 0 === shape[0]) {var comps=shape[1];return init_mod_block(loc,comps)} return failwith(cst_CamlinternalMod_init_mod_n)} function update_mod_block(comps$0,o,n) {if(0 === caml_obj_tag(n) && comps$0.length - 1 <= n.length - 1) {var _hv_=comps$0.length - 1 - 1 | 0,_hu_=0; if(! (_hv_ < 0)) {var i=_hu_; for(;;) {var n$0=n[1 + i],shape=caml_check_bound(comps$0,i)[1 + i]; if(typeof shape === "number") if(2 === shape) {var switch$0=0; if(0 === caml_obj_tag(n$0) && 4 === n$0.length - 1) {var cl=o[1 + i],j=0; for(;;) {cl[1 + j] = n$0[1 + j]; var _ht_=j + 1 | 0; if(3 !== j){var j=_ht_;continue} break}} else switch$0 = 1; if(switch$0)throw [0,Assert_failure,_cQ_]} else o[1 + i] = n$0; else if(0 === shape[0]) {var comps=shape[1];update_mod_block(comps,o[1 + i],n$0)} var _hw_=i + 1 | 0; if(_hv_ !== i){var i=_hw_;continue} break}} return 0} throw [0,Assert_failure,_cR_]} function update_mod(shape,o,n) {if(typeof shape !== "number" && 0 === shape[0]) {var comps=shape[1];return update_mod_block(comps,o,n)} return failwith(cst_CamlinternalMod_update_mod)} var CamlinternalMod=[0,init_mod,update_mod]; caml_register_global(823,CamlinternalMod,"CamlinternalMod"); var initial_buffer=caml_create_bytes(32), buffer=[0,initial_buffer], bufpos=[0,0]; function reset_buffer(param) {buffer[1] = initial_buffer;bufpos[1] = 0;return 0} function store(c) {if(caml_ml_bytes_length(buffer[1]) <= bufpos[1]) {var newbuffer=caml_create_bytes(2 * bufpos[1] | 0); blit(buffer[1],0,newbuffer,0,bufpos[1]); buffer[1] = newbuffer} caml_bytes_set(buffer[1],bufpos[1],c); bufpos[1]++; return 0} function get_string(param) {var s=sub_string(buffer[1],0,bufpos[1]); buffer[1] = initial_buffer; return s} function make_lexer(keywords) {var kwd_table=caml_call2(Stdlib_Hashtbl[1],0,17); iter$2 (function(s){return caml_call3(Stdlib_Hashtbl[5],kwd_table,s,[0,s])}, keywords); function ident_or_keyword(id) {try {var _hr_=caml_call2(Stdlib_Hashtbl[6],kwd_table,id);return _hr_} catch(_hs_) {_hs_ = caml_wrap_exception(_hs_); if(_hs_ === Not_found)return [1,id]; throw _hs_}} function keyword_or_error(c) {var s=make$1(1,c); try {var _hp_=caml_call2(Stdlib_Hashtbl[6],kwd_table,s);return _hp_} catch(_hq_) {_hq_ = caml_wrap_exception(_hq_); if(_hq_ === Not_found)throw [0,Error,cat(cst_Illegal_character,s)]; throw _hq_}} function comment(strm) {a: for(;;) {var match=peek$0(strm); if(match) {var switcher=match[1] - 40 | 0; if(! (2 < switcher >>> 0)) switch(switcher) {case 0: junk(strm); var match$0=peek$0(strm); if(match$0) {if(42 === match$0[1]){junk(strm);comment(strm);continue} junk(strm); continue} throw Failure$0; case 1:break; default: junk(strm); for(;;) {var match$1=peek$0(strm); if(match$1) {var _ho_=match$1[1]; if(41 === _ho_){junk(strm);return 0} if(42 === _ho_){junk(strm);continue} junk(strm); continue a} throw Failure$0}} junk(strm); continue} throw Failure$0}} function escape(strm) {var match=peek$0(strm); if(match) {var _hl_=match[1]; if(58 <= _hl_) {var switcher=_hl_ - 110 | 0; if(! (6 < switcher >>> 0)) switch(switcher) {case 0:junk(strm);return 10; case 4:junk(strm);return 13; case 6:junk(strm);return 9 }} else if(48 <= _hl_) {junk(strm); var match$0=peek$0(strm); if(match$0) {var _hm_=match$0[1]; if(! (9 < _hm_ - 48 >>> 0)) {junk(strm); var match$1=peek$0(strm); if(match$1) {var _hn_=match$1[1]; if(! (9 < _hn_ - 48 >>> 0)) {junk(strm); return chr ((((_hl_ - 48 | 0) * 100 | 0) + ((_hm_ - 48 | 0) * 10 | 0) | 0) + (_hn_ - 48 | 0) | 0)}} throw [0,Error,cst$99]}} throw [0,Error,cst$98]} junk(strm); return _hl_} throw Failure$0} function end_exponent_part(strm) {for(;;) {var match=peek$0(strm); if(match) {var _hk_=match[1]; if(! (9 < _hk_ - 48 >>> 0)){junk(strm);store(_hk_);continue}} return [0,[3,caml_float_of_string(get_string(0))]]}} function exponent_part(strm) {var match=peek$0(strm); if(match) {var _hj_=match[1],switch$0=0; if(43 !== _hj_ && 45 !== _hj_)switch$0 = 1; if(! switch$0) {junk(strm);store(_hj_);return end_exponent_part(strm)}} return end_exponent_part(strm)} function number(s) {for(;;) {var match=peek$0(s); if(match) {var _hg_=match[1]; if(58 <= _hg_) {var switch$0=0; if(69 === _hg_ || 101 === _hg_)switch$0 = 1; if(switch$0){junk(s);store(69);return exponent_part(s)}} else {if(46 === _hg_) {junk(s); store(46); for(;;) {var match$0=peek$0(s); if(match$0) {var _hh_=match$0[1],_hi_=_hh_ - 69 | 0; if(32 < _hi_ >>> 0) {if(! (9 < _hi_ + 21 >>> 0)){junk(s);store(_hh_);continue}} else if(30 < _hi_ - 1 >>> 0) {junk(s);store(69);return exponent_part(s)}} return [0,[3,caml_float_of_string(get_string(0))]]}} if(48 <= _hg_){junk(s);store(_hg_);continue}}} return [0,[2,caml_int_of_string(get_string(0))]]}} function ident2(strm) {for(;;) {var match=peek$0(strm); if(match) {var _he_=match[1],switch$0=0; if(94 <= _he_) {var _hf_=_he_ - 95 | 0; if(30 < _hf_ >>> 0) {if(! (32 <= _hf_))switch$0 = 1} else if(29 === _hf_)switch$0 = 1} else if(65 <= _he_) {if(92 === _he_)switch$0 = 1} else if(33 <= _he_) switch(_he_ - 33 | 0) {case 0: case 2: case 3: case 4: case 5: case 9: case 10: case 12: case 14: case 25: case 27: case 28: case 29: case 30: case 31:switch$0 = 1;break } if(switch$0){junk(strm);store(_he_);continue}} return [0,ident_or_keyword(get_string(0))]}} function neg_number(s) {var match=peek$0(s); if(match) {var _hd_=match[1]; if(! (9 < _hd_ - 48 >>> 0)) {junk(s);reset_buffer(0);store(45);store(_hd_);return number(s)}} reset_buffer(0); store(45); return ident2(s)} function ident(strm) {for(;;) {var match=peek$0(strm); if(match) {var _hb_=match[1],switch$0=0; if(91 <= _hb_) {var _hc_=_hb_ - 95 | 0; if(27 < _hc_ >>> 0) {if(97 <= _hc_)switch$0 = 1} else if(1 !== _hc_)switch$0 = 1} else if(48 <= _hb_) {if(6 < _hb_ - 58 >>> 0)switch$0 = 1} else if(39 === _hb_)switch$0 = 1; if(switch$0){junk(strm);store(_hb_);continue}} return [0,ident_or_keyword(get_string(0))]}} function next_token$0(counter,strm) {for(;;) {var match=peek$0(strm); if(match) {var _g3_=match[1],switch$0=0; if(124 <= _g3_) {if(127 <= _g3_) {if(192 <= _g3_)switch$0 = 1} else if(125 !== _g3_)switch$0 = 2} else {var _g4_=_g3_ - 65 | 0; if(57 < _g4_ >>> 0) {if(! (58 <= _g4_)) switch(_g4_ + 65 | 0) {case 34: junk(strm); reset_buffer(0); for(;;) {var match$1=peek$0(strm); if(match$1) {var _g6_=match$1[1]; if(34 === _g6_){junk(strm);return [0,[4,get_string(0)]]} if(92 === _g6_) {junk(strm); try {var c$0=escape(strm)} catch(_ha_) {_ha_ = caml_wrap_exception(_ha_); if(_ha_ === Failure$0)throw [0,Error,cst$96]; throw _ha_; var _g9_=_ha_} store(c$0); continue} junk(strm); store(_g6_); continue} throw Failure$0} case 39: junk(strm); try {var match$2=peek$0(strm); if(! match$2)throw Failure$0; var _g7_=match$2[1]; if(92 === _g7_) {junk(strm); try {var _g8_=escape(strm)} catch(_g$_) {_g$_ = caml_wrap_exception(_g$_); if(_g$_ === Failure$0)throw [0,Error,cst$97]; throw _g$_} var c=_g8_} else {junk(strm);var c=_g7_}} catch(_g__) {_g__ = caml_wrap_exception(_g__); if(_g__ === Failure$0)throw [0,Error,cst$94]; throw _g__} var match$0=peek$0(strm); if(match$0 && 39 === match$0[1]) {junk(strm);return [0,[5,c]]} throw [0,Error,cst$95]; case 40: junk(strm); if(counter < 50) {var counter$0=counter + 1 | 0; return maybe_comment(counter$0,strm)} return caml_trampoline_return(maybe_comment,[0,strm]); case 45:junk(strm);return neg_number(strm); case 9: case 10: case 12: case 13: case 26: case 32:junk(strm);continue; case 48: case 49: case 50: case 51: case 52: case 53: case 54: case 55: case 56: case 57: junk(strm);reset_buffer(0);store(_g3_);return number(strm); case 33: case 35: case 36: case 37: case 38: case 42: case 43: case 47: case 58: case 60: case 61: case 62: case 63: case 64:switch$0 = 2;break }} else {var _g5_=_g4_ - 26 | 0; if(5 < _g5_ >>> 0) switch$0 = 1; else switch(_g5_) {case 4:switch$0 = 1;break;case 1:case 3:switch$0 = 2;break}}} switch(switch$0) {case 0:junk(strm);return [0,keyword_or_error(_g3_)]; case 1: junk(strm);reset_buffer(0);store(_g3_);return ident(strm); default: junk(strm);reset_buffer(0);store(_g3_);return ident2(strm)}} return 0}} function maybe_comment(counter,strm) {var match=peek$0(strm); if(match && 42 === match[1]) {junk(strm); comment(strm); if(counter < 50) {var counter$0=counter + 1 | 0;return next_token$0(counter$0,strm)} return caml_trampoline_return(next_token$0,[0,strm])} return [0,keyword_or_error(40)]} function next_token(strm){return caml_trampoline(next_token$0(0,strm))} return function(input) {return from(function(count){return next_token(input)})}} var Stdlib_Genlex=[0,make_lexer]; caml_register_global(824,Stdlib_Genlex,"Stdlib__Genlex"); function MakeSeeded$0(H) {var prng=[246,function(_g2_){return caml_call1(_ci_[2],0)}]; function create(opt,initial_size) {if(opt) var sth=opt[1],random=sth; else var random=caml_call1(Stdlib_Hashtbl[17],0); var x=16; for(;;) {if(! (initial_size <= x) && ! (max_array_length < (x * 2 | 0))) {var x$0=x * 2 | 0,x=x$0;continue} if(random) var _g0_=caml_obj_tag(prng), _g1_=250 === _g0_?prng[1]:246 === _g0_?force_lazy_block(prng):prng, seed=caml_call1(_ci_[4],_g1_); else var seed=0; return [0,0,caml_make_vect(x,0),seed,x]}} function clear(h) {h[1] = 0; var len=h[2].length - 1,_gY_=len - 1 | 0,_gX_=0; if(! (_gY_ < 0)) {var i=_gX_; for(;;) {caml_check_bound(h[2],i)[1 + i] = 0; var _gZ_=i + 1 | 0; if(_gY_ !== i){var i=_gZ_;continue} break}} return 0} function reset(h) {var len=h[2].length - 1; return len === h[4] ?clear(h) :(h[1] = 0,h[2] = caml_make_vect(h[4],0),0)} function copy(init) {var _gU_=init[4],_gV_=init[3],_gW_=copy$1(init[2]); return [0,init[1],_gW_,_gV_,_gU_]} function key_index(h,hkey){return hkey & (h[2].length - 1 - 1 | 0)} function clean(h) {function do_bucket(param) {var param$0=param; for(;;) {if(param$0) {var hkey=param$0[1],rest=param$0[3],c=param$0[2]; if(caml_call1(H[7],c)) {var rest$0=param$0[3],c$0=param$0[2]; return [0,hkey,c$0,do_bucket(rest$0)]} h[1] = h[1] - 1 | 0; var param$0=rest; continue} return 0}} var d=h[2],_gR_=d.length - 1 - 1 | 0,_gQ_=0; if(! (_gR_ < 0)) {var i=_gQ_; for(;;) {var _gS_=do_bucket(caml_check_bound(d,i)[1 + i]); caml_check_bound(d,i)[1 + i] = _gS_; var _gT_=i + 1 | 0; if(_gR_ !== i){var i=_gT_;continue} break}} return 0} function resize(h) {var odata=h[2],osize=odata.length - 1,nsize=osize * 2 | 0; clean(h); var _gJ_=nsize < max_array_length?1:0, _gK_=_gJ_?(osize >>> 1 | 0) <= h[1]?1:0:_gJ_; if(_gK_) {var ndata=caml_make_vect(nsize,0); h[2] = ndata; var insert_bucket= function(param) {if(param) {var rest=param[3],data=param[2],hkey=param[1]; insert_bucket(rest); var nidx=key_index(h,hkey), _gP_=[0,hkey,data,caml_check_bound(ndata,nidx)[1 + nidx]]; caml_check_bound(ndata,nidx)[1 + nidx] = _gP_; return 0} return 0}, _gM_=osize - 1 | 0, _gL_=0; if(! (_gM_ < 0)) {var i=_gL_; for(;;) {insert_bucket(caml_check_bound(odata,i)[1 + i]); var _gO_=i + 1 | 0; if(_gM_ !== i){var i=_gO_;continue} break}} var _gN_=0} else var _gN_=_gK_; return _gN_} function add(h,key,info) {var hkey=caml_call2(H[2],h[3],key), i=key_index(h,hkey), container=caml_call2(H[1],key,info), bucket=[0,hkey,container,caml_check_bound(h[2],i)[1 + i]]; caml_check_bound(h[2],i)[1 + i] = bucket; h[1] = h[1] + 1 | 0; var _gI_=h[2].length - 1 << 1 < h[1]?1:0; return _gI_?resize(h):_gI_} function remove(h,key) {var hkey=caml_call2(H[2],h[3],key); function remove_bucket(param) {var param$0=param; for(;;) {if(param$0) {var hk=param$0[1],next=param$0[3],c=param$0[2]; if(hkey === hk) {var match=caml_call2(H[3],c,key); switch(match) {case 0:h[1] = h[1] - 1 | 0;return next; case 1:return [0,hk,c,remove_bucket(next)]; default:h[1] = h[1] - 1 | 0;var param$0=next;continue}} var next$0=param$0[3],c$0=param$0[2]; return [0,hk,c$0,remove_bucket(next$0)]} return 0}} var i=key_index(h,hkey), _gH_=remove_bucket(caml_check_bound(h[2],i)[1 + i]); caml_check_bound(h[2],i)[1 + i] = _gH_; return 0} function find(h,key) {var hkey=caml_call2(H[2],h[3],key), _gG_=key_index(h,hkey), param$1=caml_check_bound(h[2],_gG_)[1 + _gG_], param=param$1; for(;;) {if(param) {var hk=param[1],rest=param[3],c=param[2]; if(hkey === hk) {var match=caml_call2(H[3],c,key); switch(match) {case 0: var match$0=caml_call1(H[4],c); if(match$0){var d=match$0[1];return d} var param=rest; continue; case 1:var param=rest;continue; default:var param=rest;continue}} var param$0=param[3],param=param$0; continue} throw Not_found}} function find_opt(h,key) {var hkey=caml_call2(H[2],h[3],key), _gF_=key_index(h,hkey), param$1=caml_check_bound(h[2],_gF_)[1 + _gF_], param=param$1; for(;;) {if(param) {var hk=param[1],rest=param[3],c=param[2]; if(hkey === hk) {var match=caml_call2(H[3],c,key); switch(match) {case 0: var d=caml_call1(H[4],c); if(d)return d; var param=rest; continue; case 1:var param=rest;continue; default:var param=rest;continue}} var param$0=param[3],param=param$0; continue} return 0}} function find_all(h,key) {var hkey=caml_call2(H[2],h[3],key); function find_in_bucket(param) {var param$0=param; for(;;) {if(param$0) {var hk=param$0[1],rest=param$0[3],c=param$0[2]; if(hkey === hk) {var match=caml_call2(H[3],c,key); switch(match) {case 0: var match$0=caml_call1(H[4],c); if(match$0) {var d=match$0[1];return [0,d,find_in_bucket(rest)]} var param$0=rest; continue; case 1:var param$0=rest;continue; default:var param$0=rest;continue}} var param$1=param$0[3],param$0=param$1; continue} return 0}} var _gE_=key_index(h,hkey); return find_in_bucket(caml_check_bound(h[2],_gE_)[1 + _gE_])} function replace(h,key,info) {var hkey=caml_call2(H[2],h[3],key); function replace_bucket(param) {var param$0=param; for(;;) {if(param$0) {var hk=param$0[1],next=param$0[3],c=param$0[2]; if(hkey === hk) {var match=caml_call2(H[3],c,key); if(match){var param$0=next;continue} return caml_call3(H[6],c,key,info)} var param$1=param$0[3],param$0=param$1; continue} throw Not_found}} var i=key_index(h,hkey),l=caml_check_bound(h[2],i)[1 + i]; try {var _gC_=replace_bucket(l);return _gC_} catch(_gD_) {_gD_ = caml_wrap_exception(_gD_); if(_gD_ === Not_found) {var container=caml_call2(H[1],key,info); caml_check_bound(h[2],i)[1 + i] = [0,hkey,container,l]; h[1] = h[1] + 1 | 0; var _gB_=h[2].length - 1 << 1 < h[1]?1:0; return _gB_?resize(h):_gB_} throw _gD_}} function mem(h,key) {var hkey=caml_call2(H[2],h[3],key), _gA_=key_index(h,hkey), param$1=caml_check_bound(h[2],_gA_)[1 + _gA_], param=param$1; for(;;) {if(param) {var hk=param[1],rest=param[3],c=param[2]; if(hk === hkey) {var match=caml_call2(H[3],c,key); if(match){var param=rest;continue} return 1} var param$0=param[3],param=param$0; continue} return 0}} function iter$0(f,h) {var d$0=h[2],_gy_=d$0.length - 1 - 1 | 0,_gx_=0; if(! (_gy_ < 0)) {var i=_gx_; a: for(;;) {var param$0=caml_check_bound(d$0,i)[1 + i],param=param$0; for(;;) {if(param) {var rest=param[3], c=param[2], match=caml_call1(H[5],c), match$0=caml_call1(H[4],c), switch$0=0; if(match && match$0) {var d=match$0[1],k=match[1];caml_call2(f,k,d);switch$0 = 1} var param=rest; continue} var _gz_=i + 1 | 0; if(_gy_ !== i){var i=_gz_;continue a} break} break}} return 0} function fold(f,h,init) {var d$0=h[2],accu$1=[0,init],_gu_=d$0.length - 1 - 1 | 0,_gt_=0; if(! (_gu_ < 0)) {var i=_gt_; a: for(;;) {var _gv_=accu$1[1], b$0=caml_check_bound(d$0,i)[1 + i], b=b$0, accu=_gv_; for(;;) {if(b) {var rest=b[3], c=b[2], match=caml_call1(H[5],c), match$0=caml_call1(H[4],c), switch$0=0; if(match && match$0) {var d=match$0[1],k=match[1],accu$0=caml_call3(f,k,d,accu); switch$0 = 1} if(! switch$0)var accu$0=accu; var b=rest,accu=accu$0; continue} accu$1[1] = accu; var _gw_=i + 1 | 0; if(_gu_ !== i){var i=_gw_;continue a} break} break}} return accu$1[1]} function filter_map_inplace(f,h) {function do_bucket(param) {var param$0=param; for(;;) {if(param$0) {var rest=param$0[3], c=param$0[2], hk=param$0[1], match=caml_call1(H[5],c), match$0=caml_call1(H[4],c); if(match && match$0) {var d=match$0[1],k=match[1],match$1=caml_call2(f,k,d); if(match$1) {var new_d=match$1[1]; caml_call3(H[6],c,k,new_d); return [0,hk,c,do_bucket(rest)]} var param$0=rest; continue} var param$0=rest; continue} return 0}} var d=h[2],_gq_=d.length - 1 - 1 | 0,_gp_=0; if(! (_gq_ < 0)) {var i=_gp_; for(;;) {var _gr_=do_bucket(caml_check_bound(d,i)[1 + i]); caml_check_bound(d,i)[1 + i] = _gr_; var _gs_=i + 1 | 0; if(_gq_ !== i){var i=_gs_;continue} break}} return 0} function length(h){return h[1]} function bucket_length(accu,param) {var accu$0=accu,param$0=param; for(;;) {if(param$0) {var param$1=param$0[3], accu$1=accu$0 + 1 | 0, accu$0=accu$1, param$0=param$1; continue} return accu$0}} function stats(h) {var _gl_=h[2], _gm_=0, mbl= fold_left$3 (function(m,b){return max$1(m,bucket_length(0,b))},_gm_,_gl_), histo=caml_make_vect(mbl + 1 | 0,0), _gn_=h[2]; iter$5 (function(b) {var l=bucket_length(0,b), _go_=caml_check_bound(histo,l)[1 + l] + 1 | 0; caml_check_bound(histo,l)[1 + l] = _go_; return 0}, _gn_); return [0,h[1],h[2].length - 1,mbl,histo]} function bucket_length_alive(accu,param) {var accu$0=accu,param$0=param; for(;;) {if(param$0) {var rest=param$0[3],c=param$0[2]; if(caml_call1(H[7],c)) {var accu$1=accu$0 + 1 | 0,accu$0=accu$1,param$0=rest;continue} var param$1=param$0[3],param$0=param$1; continue} return accu$0}} function stats_alive(h) {var size=[0,0], _gh_=h[2], _gi_=0, mbl= fold_left$3 (function(m,b){return max$1(m,bucket_length_alive(0,b))},_gi_,_gh_), histo=caml_make_vect(mbl + 1 | 0,0), _gj_=h[2]; iter$5 (function(b) {var l=bucket_length_alive(0,b); size[1] = size[1] + l | 0; var _gk_=caml_check_bound(histo,l)[1 + l] + 1 | 0; caml_check_bound(histo,l)[1 + l] = _gk_; return 0}, _gj_); return [0,size[1],h[2].length - 1,mbl,histo]} function to_seq(tbl) {var tbl_data=tbl[2]; function aux(i,buck,param) {var i$0=i,buck$0=buck; for(;;) {if(buck$0) {var next=buck$0[3], c=buck$0[2], match=caml_call1(H[5],c), match$0=caml_call1(H[4],c); if(match && match$0) {var data=match$0[1],key=match[1]; return [0, [0,key,data], function(_gg_){return aux(i$0,next,_gg_)}]} var buck$0=next; continue} if(i$0 === tbl_data.length - 1)return 0; var buck$1=caml_check_bound(tbl_data,i$0)[1 + i$0], i$1=i$0 + 1 | 0, i$0=i$1, buck$0=buck$1; continue}} var _gd_=0,_ge_=0; return function(_gf_){return aux(_ge_,_gd_,_gf_)}} function to_seq_keys(m) {var _f$_=to_seq(m); function _ga_(_gc_){return _gc_[1]} return function(_gb_){return map$1(_ga_,_f$_,_gb_)}} function to_seq_values(m) {var _f7_=to_seq(m); function _f8_(_f__){return _f__[2]} return function(_f9_){return map$1(_f8_,_f7_,_f9_)}} function add_seq(tbl,i) {return iter (function(param) {var v=param[2],k=param[1];return add(tbl,k,v)}, i)} function replace_seq(tbl,i) {return iter (function(param) {var v=param[2],k=param[1];return replace(tbl,k,v)}, i)} function of_seq(i){var tbl=create(0,16);replace_seq(tbl,i);return tbl} return [0, create, clear, reset, copy, add, remove, find, find_opt, find_all, replace, mem, iter$0, filter_map_inplace, fold, length, stats, to_seq, to_seq_keys, to_seq_values, add_seq, replace_seq, of_seq, clean, stats_alive]} function create$5(param){return caml_call1(_q_[1],1)} function get_key$0(t){return caml_call2(_q_[3],t,0)} function get_key_copy$0(t){return caml_call2(_q_[4],t,0)} function set_key$0(t,k){return caml_call3(_q_[5],t,0,k)} function unset_key$0(t){return caml_call2(_q_[6],t,0)} function check_key$0(t){return caml_call2(_q_[7],t,0)} function blit_key$0(t1,t2){return caml_call5(_q_[8],t1,0,t2,0,1)} function get_data$1(t){return caml_call1(_q_[9],t)} function get_data_copy(t){return caml_call1(_q_[10],t)} function set_data(t,d){return caml_call2(_q_[11],t,d)} function unset_data(t){return caml_call1(_q_[12],t)} function check_data(t){return caml_call1(_q_[13],t)} function blit_data(t1,t2){return caml_call2(_q_[14],t1,t2)} function make$4(key,data) {var eph=create$5(0);set_data(eph,data);set_key$0(eph,key);return eph} function query(eph,key) {var match=get_key$0(eph); if(match){var k=match[1];return k === key?get_data$1(eph):0} return 0} function MakeSeeded$1(H) {function create(k,d) {var c=create$5(0);set_data(c,d);set_key$0(c,k);return c} var hash=H[2]; function equal(c,k) {var match=get_key$0(c); if(match){var k$0=match[1];return caml_call2(H[1],k,k$0)?0:1} return 2} function set_key_data(c,k,d) {unset_data(c);set_key$0(c,k);return set_data(c,d)} return MakeSeeded$0 ([0, create, hash, equal, get_data$1, get_key$0, set_key_data, check_key$0])} function Make$2(H) {var equal=H[1]; function hash(seed,x){return caml_call1(H[2],x)} var include=MakeSeeded$1([0,equal,hash]), clear=include[2], reset=include[3], copy=include[4], add=include[5], remove=include[6], find=include[7], find_opt=include[8], find_all=include[9], replace=include[10], mem=include[11], iter=include[12], filter_map_inplace=include[13], fold=include[14], length=include[15], stats=include[16], to_seq=include[17], to_seq_keys=include[18], to_seq_values=include[19], add_seq=include[20], replace_seq=include[21], clean=include[23], stats_alive=include[24], _f6_=include[1]; function create(sz){return caml_call2(_f6_,_cS_,sz)} function of_seq(i) {var tbl=create(16);caml_call2(replace_seq,tbl,i);return tbl} return [0, create, clear, reset, copy, add, remove, find, find_opt, find_all, replace, mem, iter, filter_map_inplace, fold, length, stats, to_seq, to_seq_keys, to_seq_values, add_seq, replace_seq, of_seq, clean, stats_alive]} function make$5(param){return [0,0]} function add$1(b,k,d){var _f5_=b[1];b[1] = [0,make$4(k,d),_f5_];return 0} function test_key(k,e) {var match=get_key$0(e); if(match){var x=match[1];if(x === k)return 1} return 0} function remove$0(b,k) {var l=b[1],acc=0; for(;;) {if(l) {var h=l[1],t=l[2]; if(test_key(k,h)){b[1] = rev_append(acc,t);return 0} var l$0=l[2],acc$0=[0,h,acc],l=l$0,acc=acc$0; continue} return 0}} function find$2(b,k) {var _f3_=b[1], match=find_opt(function(_f4_){return test_key(k,_f4_)},_f3_); if(match){var e=match[1];return get_data$1(e)} return 0} function length$7(b){return length$1(b[1])} function clear$3(b){b[1] = 0;return 0} function create$6(param){return caml_call1(_q_[1],2)} function get_key1(t){return caml_call2(_q_[3],t,0)} function get_key1_copy(t){return caml_call2(_q_[4],t,0)} function set_key1(t,k){return caml_call3(_q_[5],t,0,k)} function unset_key1(t){return caml_call2(_q_[6],t,0)} function check_key1(t){return caml_call2(_q_[7],t,0)} function get_key2(t){return caml_call2(_q_[3],t,1)} function get_key2_copy(t){return caml_call2(_q_[4],t,1)} function set_key2(t,k){return caml_call3(_q_[5],t,1,k)} function unset_key2(t){return caml_call2(_q_[6],t,1)} function check_key2(t){return caml_call2(_q_[7],t,1)} function blit_key1(t1,t2){return caml_call5(_q_[8],t1,0,t2,0,1)} function blit_key2(t1,t2){return caml_call5(_q_[8],t1,1,t2,1,1)} function blit_key12(t1,t2){return caml_call5(_q_[8],t1,0,t2,0,2)} function get_data$2(t){return caml_call1(_q_[9],t)} function get_data_copy$0(t){return caml_call1(_q_[10],t)} function set_data$0(t,d){return caml_call2(_q_[11],t,d)} function unset_data$0(t){return caml_call1(_q_[12],t)} function check_data$0(t){return caml_call1(_q_[13],t)} function blit_data$0(t1,t2){return caml_call2(_q_[14],t1,t2)} function make$6(key1,key2,data) {var eph=create$6(0); set_data$0(eph,data); set_key1(eph,key1); set_key2(eph,key2); return eph} function query$0(eph,key1,key2) {var match=get_key1(eph); if(match) {var k=match[1]; if(k === key1) {var match$0=get_key2(eph); if(match$0) {var k$0=match$0[1];return k$0 === key2?get_data$2(eph):0} return 0} return 0} return 0} function MakeSeeded$2(H1,H2) {function create(param,d) {var k2=param[2],k1=param[1],c=create$6(0); set_data$0(c,d); set_key1(c,k1); set_key2(c,k2); return c} function hash(seed,param) {var k2=param[2], k1=param[1], _f2_=caml_call2(H2[2],seed,k2) * 65599 | 0; return caml_call2(H1[2],seed,k1) + _f2_ | 0} function equal(c,param) {var k2=param[2],k1=param[1],match=get_key1(c),match$0=get_key2(c); if(match && match$0) {var k2$0=match$0[1],k1$0=match[1]; if(caml_call2(H1[1],k1,k1$0) && caml_call2(H2[1],k2,k2$0))return 0; return 1} return 2} function get_key(c) {var match=get_key1(c),match$0=get_key2(c); if(match && match$0) {var k2=match$0[1],k1=match[1];return [0,[0,k1,k2]]} return 0} function set_key_data(c,param,d) {var k2=param[2],k1=param[1]; unset_data$0(c); set_key1(c,k1); set_key2(c,k2); return set_data$0(c,d)} function check_key(c) {var _f1_=check_key1(c);return _f1_?check_key2(c):_f1_} return MakeSeeded$0 ([0,create,hash,equal,get_data$2,get_key,set_key_data,check_key])} function Make$3(H1,H2) {var equal=H2[1]; function hash(seed,x){return caml_call1(H2[2],x)} var equal$0=H1[1],_fZ_=[0,equal,hash]; function hash$0(seed,x){return caml_call1(H1[2],x)} var include=MakeSeeded$2([0,equal$0,hash$0],_fZ_), clear=include[2], reset=include[3], copy=include[4], add=include[5], remove=include[6], find=include[7], find_opt=include[8], find_all=include[9], replace=include[10], mem=include[11], iter=include[12], filter_map_inplace=include[13], fold=include[14], length=include[15], stats=include[16], to_seq=include[17], to_seq_keys=include[18], to_seq_values=include[19], add_seq=include[20], replace_seq=include[21], clean=include[23], stats_alive=include[24], _f0_=include[1]; function create(sz){return caml_call2(_f0_,_cT_,sz)} function of_seq(i) {var tbl=create(16);caml_call2(replace_seq,tbl,i);return tbl} return [0, create, clear, reset, copy, add, remove, find, find_opt, find_all, replace, mem, iter, filter_map_inplace, fold, length, stats, to_seq, to_seq_keys, to_seq_values, add_seq, replace_seq, of_seq, clean, stats_alive]} function make$7(param){return [0,0]} function add$2(b,k1,k2,d) {var _fY_=b[1];b[1] = [0,make$6(k1,k2,d),_fY_];return 0} function test_keys(k1,k2,e) {var match=get_key1(e),match$0=get_key2(e); if(match && match$0) {var x2=match$0[1],x1=match[1];if(x1 === k1 && x2 === k2)return 1} return 0} function remove$1(b,k1,k2) {var l=b[1],acc=0; for(;;) {if(l) {var h=l[1],t=l[2]; if(test_keys(k1,k2,h)){b[1] = rev_append(acc,t);return 0} var l$0=l[2],acc$0=[0,h,acc],l=l$0,acc=acc$0; continue} return 0}} function find$3(b,k1,k2) {var _fW_=b[1], match=find_opt(function(_fX_){return test_keys(k1,k2,_fX_)},_fW_); if(match){var e=match[1];return get_data$2(e)} return 0} function length$8(b){return length$1(b[1])} function clear$4(b){b[1] = 0;return 0} function create$7(n){return caml_call1(_q_[1],n)} function length$9(k){return caml_call1(_q_[2],k)} function get_key$1(t,n){return caml_call2(_q_[3],t,n)} function get_key_copy$1(t,n){return caml_call2(_q_[4],t,n)} function set_key$1(t,n,k){return caml_call3(_q_[5],t,n,k)} function unset_key$1(t,n){return caml_call2(_q_[6],t,n)} function check_key$1(t,n){return caml_call2(_q_[7],t,n)} function blit_key$1(t1,o1,t2,o2,l) {return caml_call5(_q_[8],t1,o1,t2,o2,l)} function get_data$3(t){return caml_call1(_q_[9],t)} function get_data_copy$1(t){return caml_call1(_q_[10],t)} function set_data$1(t,d){return caml_call2(_q_[11],t,d)} function unset_data$1(t){return caml_call1(_q_[12],t)} function check_data$1(t){return caml_call1(_q_[13],t)} function blit_data$1(t1,t2){return caml_call2(_q_[14],t1,t2)} function make$8(keys,data) {var l=keys.length - 1,eph=create$7(l); set_data$1(eph,data); var _fU_=l - 1 | 0,_fT_=0; if(! (_fU_ < 0)) {var i=_fT_; for(;;) {set_key$1(eph,i,caml_check_bound(keys,i)[1 + i]); var _fV_=i + 1 | 0; if(_fU_ !== i){var i=_fV_;continue} break}} return eph} function query$1(eph,keys) {var l=length$9(eph); try {if(l !== keys.length - 1)throw Exit; var _fP_=l - 1 | 0,_fO_=0; if(! (_fP_ < 0)) {var i=_fO_; for(;;) {var match=get_key$1(eph,i); if(! match)throw Exit; var k=match[1]; if(k !== caml_check_bound(keys,i)[1 + i])throw Exit; var _fR_=i + 1 | 0; if(_fP_ !== i){var i=_fR_;continue} break}} var _fQ_=get_data$3(eph); return _fQ_} catch(_fS_) {_fS_ = caml_wrap_exception(_fS_);if(_fS_ === Exit)return 0;throw _fS_}} function MakeSeeded$3(H) {function create(k,d) {var c=create$7(k.length - 1); set_data$1(c,d); var _fM_=k.length - 1 - 1 | 0,_fL_=0; if(! (_fM_ < 0)) {var i=_fL_; for(;;) {set_key$1(c,i,caml_check_bound(k,i)[1 + i]); var _fN_=i + 1 | 0; if(_fM_ !== i){var i=_fN_;continue} break}} return c} function hash(seed,k) {var h=[0,0],_fH_=k.length - 1 - 1 | 0,_fG_=0; if(! (_fH_ < 0)) {var i=_fG_; for(;;) {var _fI_=h[1],_fJ_=caml_check_bound(k,i)[1 + i]; h[1] = (caml_call2(H[2],seed,_fJ_) * 65599 | 0) + _fI_ | 0; var _fK_=i + 1 | 0; if(_fH_ !== i){var i=_fK_;continue} break}} return h[1]} function equal(c,k) {var len=k.length - 1,len$0=length$9(c); if(len !== len$0)return 1; var i$1=len - 1 | 0,i=i$1; for(;;) {if(0 <= i) {var match=get_key$1(c,i); if(match) {var ki=match[1],_fF_=caml_check_bound(k,i)[1 + i]; if(caml_call2(H[1],_fF_,ki)){var i$0=i - 1 | 0,i=i$0;continue} return 1} return 2} return 0}} function get_key(c) {var len=length$9(c); if(0 === len)return [0,[0]]; var match=get_key$1(c,0); if(match) {var k0=match[1],a=caml_make_vect(len,k0),i$1=len - 1 | 0,i=i$1; for(;;) {if(1 <= i) {var match$0=get_key$1(c,i); if(match$0) {var ki=match$0[1]; caml_check_bound(a,i)[1 + i] = ki; var i$0=i - 1 | 0,i=i$0; continue} return 0} return [0,a]}} return 0} function set_key_data(c,k,d) {unset_data$1(c); var _fD_=k.length - 1 - 1 | 0,_fC_=0; if(! (_fD_ < 0)) {var i=_fC_; for(;;) {set_key$1(c,i,caml_check_bound(k,i)[1 + i]); var _fE_=i + 1 | 0; if(_fD_ !== i){var i=_fE_;continue} break}} return set_data$1(c,d)} function check_key(c) {var i$1=length$9(c) - 1 | 0,i=i$1; for(;;) {var _fz_=i < 0?1:0; if(_fz_) var _fA_=_fz_; else {var _fB_=check_key$1(c,i); if(_fB_){var i$0=i - 1 | 0,i=i$0;continue} var _fA_=_fB_} return _fA_}} return MakeSeeded$0 ([0,create,hash,equal,get_data$3,get_key,set_key_data,check_key])} function Make$4(H) {var equal=H[1]; function hash(seed,x){return caml_call1(H[2],x)} var include=MakeSeeded$3([0,equal,hash]), clear=include[2], reset=include[3], copy=include[4], add=include[5], remove=include[6], find=include[7], find_opt=include[8], find_all=include[9], replace=include[10], mem=include[11], iter=include[12], filter_map_inplace=include[13], fold=include[14], length=include[15], stats=include[16], to_seq=include[17], to_seq_keys=include[18], to_seq_values=include[19], add_seq=include[20], replace_seq=include[21], clean=include[23], stats_alive=include[24], _fy_=include[1]; function create(sz){return caml_call2(_fy_,_cU_,sz)} function of_seq(i) {var tbl=create(16);caml_call2(replace_seq,tbl,i);return tbl} return [0, create, clear, reset, copy, add, remove, find, find_opt, find_all, replace, mem, iter, filter_map_inplace, fold, length, stats, to_seq, to_seq_keys, to_seq_values, add_seq, replace_seq, of_seq, clean, stats_alive]} function make$9(param){return [0,0]} function add$3(b,k,d){var _fx_=b[1];b[1] = [0,make$8(k,d),_fx_];return 0} function test_keys$0(k,e) {try {if(length$9(e) !== k.length - 1)throw Exit; var _ft_=k.length - 1 - 1 | 0,_fs_=0; if(! (_ft_ < 0)) {var i=_fs_; for(;;) {var match=get_key$1(e,i),switch$0=0; if(match) {var x=match[1]; if(x === caml_check_bound(k,i)[1 + i]) {var _fv_=i + 1 | 0; if(_ft_ !== i){var i=_fv_;continue} switch$0 = 1}} if(! switch$0)throw Exit; break}} var _fu_=1; return _fu_} catch(_fw_) {_fw_ = caml_wrap_exception(_fw_);if(_fw_ === Exit)return 0;throw _fw_}} function remove$2(b,k) {var l=b[1],acc=0; for(;;) {if(l) {var h=l[1],t=l[2]; if(test_keys$0(k,h)){b[1] = rev_append(acc,t);return 0} var l$0=l[2],acc$0=[0,h,acc],l=l$0,acc=acc$0; continue} return 0}} function find$4(b,k) {var _fq_=b[1], match=find_opt(function(_fr_){return test_keys$0(k,_fr_)},_fq_); if(match){var e=match[1];return get_data$3(e)} return 0} function length$10(b){return length$1(b[1])} function clear$5(b){b[1] = 0;return 0} var Stdlib_Ephemeron= [0, [0, create$5, get_key$0, get_key_copy$0, set_key$0, unset_key$0, check_key$0, blit_key$0, get_data$1, get_data_copy, set_data, unset_data, check_data, blit_data, make$4, query, Make$2, MakeSeeded$1, [0,make$5,add$1,remove$0,find$2,length$7,clear$3]], [0, create$6, get_key1, get_key1_copy, set_key1, unset_key1, check_key1, get_key2, get_key2_copy, set_key2, unset_key2, check_key2, blit_key1, blit_key2, blit_key12, get_data$2, get_data_copy$0, set_data$0, unset_data$0, check_data$0, blit_data$0, make$6, query$0, Make$3, MakeSeeded$2, [0,make$7,add$2,remove$1,find$3,length$8,clear$4]], [0, create$7, get_key$1, get_key_copy$1, set_key$1, unset_key$1, check_key$1, blit_key$1, get_data$3, get_data_copy$1, set_data$1, unset_data$1, check_data$1, blit_data$1, make$8, query$1, Make$4, MakeSeeded$3, [0,make$9,add$3,remove$2,find$4,length$10,clear$5]], [0, function(_fp_) {return MakeSeeded$0 ([0,_fp_[3],_fp_[1],_fp_[2],_fp_[5],_fp_[4],_fp_[6],_fp_[7]])}]]; caml_register_global(825,Stdlib_Ephemeron,"Stdlib__Ephemeron"); function generic_basename(is_dir_sep,current_dir_name,name) {if(caml_string_equal(name,cst$100))return current_dir_name; var n$3=caml_ml_string_length(name) - 1 | 0,n=n$3; for(;;) {if(0 <= n) {if(caml_call2(is_dir_sep,name,n)){var n$0=n - 1 | 0,n=n$0;continue} var p=n + 1 | 0,n$1=n; for(;;) {if(0 <= n$1) {if(caml_call2(is_dir_sep,name,n$1)) return sub$0(name,n$1 + 1 | 0,(p - n$1 | 0) - 1 | 0); var n$2=n$1 - 1 | 0,n$1=n$2; continue} return sub$0(name,0,p)}} return sub$0(name,0,1)}} function generic_dirname(is_dir_sep,current_dir_name,name) {if(caml_string_equal(name,cst$101))return current_dir_name; var n$5=caml_ml_string_length(name) - 1 | 0,n=n$5; for(;;) {if(0 <= n) {if(caml_call2(is_dir_sep,name,n)){var n$0=n - 1 | 0,n=n$0;continue} var n$1=n; for(;;) {if(0 <= n$1) {if(caml_call2(is_dir_sep,name,n$1)) {var n$3=n$1; for(;;) {if(0 <= n$3) {if(caml_call2(is_dir_sep,name,n$3)) {var n$4=n$3 - 1 | 0,n$3=n$4;continue} return sub$0(name,0,n$3 + 1 | 0)} return sub$0(name,0,1)}} var n$2=n$1 - 1 | 0,n$1=n$2; continue} return current_dir_name}} return sub$0(name,0,1)}} function is_dir_sep(s,i){return 47 === caml_string_get(s,i)?1:0} function is_relative(n) {var _fn_=caml_ml_string_length(n) < 1?1:0, _fo_=_fn_ || (47 !== caml_string_get(n,0)?1:0); return _fo_} function is_implicit(n) {var _fi_=is_relative(n); if(_fi_) {var _fj_=caml_ml_string_length(n) < 2?1:0, _fk_=_fj_ || caml_string_notequal(sub$0(n,0,2),cst$103); if(_fk_) var _fl_=caml_ml_string_length(n) < 3?1:0, _fm_=_fl_ || caml_string_notequal(sub$0(n,0,3),cst$102); else var _fm_=_fk_} else var _fm_=_fi_; return _fm_} function check_suffix(name,suff){return ends_with$0(suff,name)} function chop_suffix_opt(suffix,filename) {var len_s=caml_ml_string_length(suffix), len_f=caml_ml_string_length(filename); if(len_s <= len_f) {var r=sub$0(filename,len_f - len_s | 0,len_s); return caml_string_equal(r,suffix) ?[0,sub$0(filename,0,len_f - len_s | 0)] :0} return 0} try {var _c3_=caml_sys_getenv(cst_TMPDIR),_cV_=_c3_} catch(_fh_) {_fh_ = caml_wrap_exception(_fh_); if(_fh_ !== Not_found)throw _fh_; var _cV_=cst_tmp} function quote(s) {var l=caml_ml_string_length(s),b=create$2(l + 20 | 0); add_char(b,39); var _ff_=l - 1 | 0,_fe_=0; if(! (_ff_ < 0)) {var i=_fe_; for(;;) {if(39 === caml_string_get(s,i)) add_string(b,quotequote); else add_char(b,caml_string_get(s,i)); var _fg_=i + 1 | 0; if(_ff_ !== i){var i=_fg_;continue} break}} add_char(b,39); return contents(b)} function quote_command(cmd,stdin,stdout,stderr,args) {if(stderr) var f=stderr[1], _e__=caml_equal(stderr,stdout)?cst_2_1:cat(cst_2,quote(f)), _e$_=_e__; else var _e$_=cst$109; if(stdout) var f$0=stdout[1],_fa_=cat(cst$104,quote(f$0)); else var _fa_=cst$108; var _fb_=cat(_fa_,_e$_); if(stdin) var f$1=stdin[1],_fc_=cat(cst$105,quote(f$1)); else var _fc_=cst$107; var _fd_=cat(_fc_,_fb_); return cat(concat$1(cst$106,map$4(quote,[0,cmd,args])),_fd_)} function basename(_e9_) {return generic_basename(is_dir_sep,current_dir_name,_e9_)} function dirname(_e8_) {return generic_dirname(is_dir_sep,current_dir_name,_e8_)} var Unix= [0, null$0, current_dir_name, parent_dir_name, dir_sep, is_dir_sep, is_relative, is_implicit, check_suffix, chop_suffix_opt, _cV_, quote, quote_command, basename, dirname]; function is_dir_sep$0(s,i) {var c=caml_string_get(s,i),_e5_=47 === c?1:0; if(_e5_) var _e6_=_e5_; else var _e7_=92 === c?1:0,_e6_=_e7_ || (58 === c?1:0); return _e6_} function is_relative$0(n) {var _eZ_=caml_ml_string_length(n) < 1?1:0, _e0_=_eZ_ || (47 !== caml_string_get(n,0)?1:0); if(_e0_) {var _e1_=caml_ml_string_length(n) < 1?1:0, _e2_=_e1_ || (92 !== caml_string_get(n,0)?1:0); if(_e2_) var _e3_=caml_ml_string_length(n) < 2?1:0, _e4_=_e3_ || (58 !== caml_string_get(n,1)?1:0); else var _e4_=_e2_} else var _e4_=_e0_; return _e4_} function is_implicit$0(n) {var _eQ_=is_relative$0(n); if(_eQ_) {var _eR_=caml_ml_string_length(n) < 2?1:0, _eS_=_eR_ || caml_string_notequal(sub$0(n,0,2),cst$113); if(_eS_) {var _eT_=caml_ml_string_length(n) < 2?1:0, _eU_=_eT_ || caml_string_notequal(sub$0(n,0,2),cst$112); if(_eU_) {var _eV_=caml_ml_string_length(n) < 3?1:0, _eW_=_eV_ || caml_string_notequal(sub$0(n,0,3),cst$111); if(_eW_) var _eX_=caml_ml_string_length(n) < 3?1:0, _eY_=_eX_ || caml_string_notequal(sub$0(n,0,3),cst$110); else var _eY_=_eW_} else var _eY_=_eU_} else var _eY_=_eS_} else var _eY_=_eQ_; return _eY_} function check_suffix$0(name,suff) {var _eN_=caml_ml_string_length(suff) <= caml_ml_string_length(name)?1:0; if(_eN_) var s= sub$0 (name, caml_ml_string_length(name) - caml_ml_string_length(suff) | 0, caml_ml_string_length(suff)), _eO_=lowercase_ascii$1(suff), _eP_=caml_string_equal(lowercase_ascii$1(s),_eO_); else var _eP_=_eN_; return _eP_} function chop_suffix_opt$0(suffix,filename) {var len_s=caml_ml_string_length(suffix), len_f=caml_ml_string_length(filename); if(len_s <= len_f) {var r=sub$0(filename,len_f - len_s | 0,len_s), _eM_=lowercase_ascii$1(suffix); return caml_string_equal(lowercase_ascii$1(r),_eM_) ?[0,sub$0(filename,0,len_f - len_s | 0)] :0} return 0} try {var _c2_=caml_sys_getenv(cst_TEMP),temp_dir_name=_c2_} catch(_eL_) {_eL_ = caml_wrap_exception(_eL_); if(_eL_ !== Not_found)throw _eL_; var temp_dir_name=cst$114} function quote$0(s) {var l=caml_ml_string_length(s),b=create$2(l + 20 | 0); add_char(b,34); function add_bs(n) {var _eJ_=1; if(! (n < 1)) {var j=_eJ_; for(;;) {add_char(b,92); var _eK_=j + 1 | 0; if(n !== j){var j=_eK_;continue} break}} return 0} function loop$0(counter,i) {var i$0=i; for(;;) {if(i$0 === l)return add_char(b,34); var c=caml_string_get(s,i$0); if(34 === c) {var _eH_=0; if(counter < 50) {var counter$1=counter + 1 | 0; return loop_bs(counter$1,_eH_,i$0)} return caml_trampoline_return(loop_bs,[0,_eH_,i$0])} if(92 === c) {var _eI_=0; if(counter < 50) {var counter$0=counter + 1 | 0; return loop_bs(counter$0,_eI_,i$0)} return caml_trampoline_return(loop_bs,[0,_eI_,i$0])} add_char(b,c); var i$1=i$0 + 1 | 0,i$0=i$1; continue}} function loop_bs(counter,n,i) {var n$0=n,i$0=i; for(;;) {if(i$0 === l){add_char(b,34);return add_bs(n$0)} var match=caml_string_get(s,i$0); if(34 === match) {add_bs((2 * n$0 | 0) + 1 | 0); add_char(b,34); var _eG_=i$0 + 1 | 0; if(counter < 50) {var counter$1=counter + 1 | 0;return loop$0(counter$1,_eG_)} return caml_trampoline_return(loop$0,[0,_eG_])} if(92 === match) {var i$1=i$0 + 1 | 0,n$1=n$0 + 1 | 0,n$0=n$1,i$0=i$1;continue} add_bs(n$0); if(counter < 50) {var counter$0=counter + 1 | 0;return loop$0(counter$0,i$0)} return caml_trampoline_return(loop$0,[0,i$0])}} function loop(i){return caml_trampoline(loop$0(0,i))} loop(0); return contents(b)} function quote_cmd_filename(f) {if(! contains$0(f,34) && ! contains$0(f,37)) return contains$0(f,32)?cat(cst$116,cat(f,cst$115)):f; return failwith(cat(cst_Filename_quote_command_bad,f))} function quote_command$0(cmd,stdin,stdout,stderr,args) {if(stderr) var f=stderr[1], _ex_= caml_equal(stderr,stdout) ?cst_2_1$0 :cat(cst_2$0,quote_cmd_filename(f)), _ey_=_ex_; else var _ey_=cst$125; var _ez_=[0,_ey_,_cW_]; if(stdout) var f$0=stdout[1],_eA_=cat(cst$117,quote_cmd_filename(f$0)); else var _eA_=cst$124; var _eB_=[0,_eA_,_ez_]; if(stdin) var f$1=stdin[1],_eC_=cat(cst$118,quote_cmd_filename(f$1)); else var _eC_=cst$123; var s=concat$1(cst$119,map$4(quote$0,args)), b=create$2(caml_ml_string_length(s) + 20 | 0), _eD_=[0,_eC_,_eB_]; iter$4 (function(c) {var switch$0=0; if(62 <= c) {var _eF_=c - 63 | 0; if(60 < _eF_ >>> 0) {if(! (62 <= _eF_))switch$0 = 1} else if(31 === _eF_)switch$0 = 1} else if(42 <= c) {if(60 === c)switch$0 = 1} else if(33 <= c) switch(c - 33 | 0) {case 2:case 3:case 6:break;default:switch$0 = 1} return switch$0?(add_char(b,94),add_char(b,c)):add_char(b,c)}, s); var _eE_=[0,cst$120,[0,contents(b),_eD_]]; return concat$1(cst$122,[0,cst$121,[0,quote_cmd_filename(cmd),_eE_]])} function drive_and_path(s) {var _et_=2 <= caml_ml_string_length(s)?1:0; if(_et_) {var param=caml_string_get(s,0),switch$0=0; if(91 <= param) {if(! (25 < param - 97 >>> 0))switch$0 = 1} else if(65 <= param)switch$0 = 1; var _eu_=switch$0?1:0,_ev_=_eu_?58 === caml_string_get(s,1)?1:0:_eu_} else var _ev_=_et_; if(_ev_) {var _ew_=sub$0(s,2,caml_ml_string_length(s) - 2 | 0); return [0,sub$0(s,0,2),_ew_]} return [0,cst$126,s]} function dirname$0(s) {var match=drive_and_path(s), path=match[2], drive=match[1], dir=generic_dirname(is_dir_sep$0,current_dir_name$0,path); return cat(drive,dir)} function basename$0(s) {var match=drive_and_path(s),path=match[2]; return generic_basename(is_dir_sep$0,current_dir_name$0,path)} var Win32= [0, null$1, current_dir_name$0, parent_dir_name$0, dir_sep$0, is_dir_sep$0, is_relative$0, is_implicit$0, check_suffix$0, chop_suffix_opt$0, temp_dir_name, quote$0, quote_command$0, basename$0, dirname$0]; function basename$1(_es_) {return generic_basename(is_dir_sep$0,current_dir_name$1,_es_)} function dirname$1(_er_) {return generic_dirname(is_dir_sep$0,current_dir_name$1,_er_)} var Cygwin= [0, null$2, current_dir_name$1, parent_dir_name$1, dir_sep$1, is_dir_sep$0, is_relative$0, is_implicit$0, check_suffix$0, chop_suffix_opt$0, _cV_, quote, quote_command, basename$1, dirname$1], Sysdeps= caml_string_notequal(os_type,cst_Cygwin) ?caml_string_notequal(os_type,cst_Win32)?Unix:Win32 :Cygwin, null$3=Sysdeps[1], current_dir_name$2=Sysdeps[2], parent_dir_name$2=Sysdeps[3], dir_sep$2=Sysdeps[4], is_dir_sep$1=Sysdeps[5], is_relative$1=Sysdeps[6], is_implicit$1=Sysdeps[7], check_suffix$1=Sysdeps[8], chop_suffix_opt$1=Sysdeps[9], temp_dir_name$0=Sysdeps[10], quote$1=Sysdeps[11], quote_command$1=Sysdeps[12], basename$2=Sysdeps[13], dirname$2=Sysdeps[14]; function concat$4(dirname,filename) {var l=caml_ml_string_length(dirname); if(0 !== l && ! is_dir_sep$1(dirname,l - 1 | 0)) return cat(dirname,cat(dir_sep$2,filename)); return cat(dirname,filename)} function chop_suffix(name,suff) {return check_suffix$1(name,suff) ?sub$0 (name, 0, caml_ml_string_length(name) - caml_ml_string_length(suff) | 0) :invalid_arg(cst_Filename_chop_suffix)} function extension_len(name) {var i$4=caml_ml_string_length(name) - 1 | 0,i$1=i$4; for(;;) {if(0 <= i$1 && ! is_dir_sep$1(name,i$1)) {if(46 === caml_string_get(name,i$1)) {var i$2=i$1 - 1 | 0,i=i$2; for(;;) {if(0 <= i && ! is_dir_sep$1(name,i)) {if(46 === caml_string_get(name,i)) {var i$0=i - 1 | 0,i=i$0;continue} return caml_ml_string_length(name) - i$1 | 0} return 0}} var i$3=i$1 - 1 | 0,i$1=i$3; continue} return 0}} function extension(name) {var l=extension_len(name); return 0 === l?cst$127:sub$0(name,caml_ml_string_length(name) - l | 0,l)} function chop_extension(name) {var l=extension_len(name); return 0 === l ?invalid_arg(cst_Filename_chop_extension) :sub$0(name,0,caml_ml_string_length(name) - l | 0)} function remove_extension(name) {var l=extension_len(name); return 0 === l?name:sub$0(name,0,caml_ml_string_length(name) - l | 0)} var prng$0=[246,function(_eq_){return caml_call1(_ci_[2],0)}]; function temp_file_name(temp_dir,prefix,suffix) {var _eo_=caml_obj_tag(prng$0), _ep_= 250 === _eo_?prng$0[1]:246 === _eo_?force_lazy_block(prng$0):prng$0, rnd=caml_call1(_ci_[4],_ep_) & 16777215; return concat$4(temp_dir,caml_call3(sprintf(_cX_),prefix,rnd,suffix))} var current_temp_dir_name=[0,temp_dir_name$0]; function set_temp_dir_name(s){current_temp_dir_name[1] = s;return 0} function get_temp_dir_name(param){return current_temp_dir_name[1]} function temp_file(opt,prefix,suffix) {if(opt) var sth=opt[1],temp_dir=sth; else var temp_dir=current_temp_dir_name[1]; function try_name(counter) {var counter$0=counter; for(;;) {var name=temp_file_name(temp_dir,prefix,suffix); try {runtime.caml_sys_close(caml_sys_open(name,_cY_,384));return name} catch(e) {e = caml_wrap_exception(e); if(e[1] === Sys_error) {if(1000 <= counter$0)throw e; var counter$1=counter$0 + 1 | 0,counter$0=counter$1; continue} throw e}}} return try_name(0)} function open_temp_file(opt,_em_,_el_,prefix,suffix) {if(opt)var sth=opt[1],mode=sth;else var mode=_cZ_; if(_em_)var sth$0=_em_[1],perms=sth$0;else var perms=384; if(_el_) var sth$1=_el_[1],temp_dir=sth$1; else var temp_dir=current_temp_dir_name[1]; function try_name(counter) {var counter$0=counter; for(;;) {var name=temp_file_name(temp_dir,prefix,suffix); try {var _en_=[0,name,open_gen([0,1,[0,3,[0,5,mode]]],perms,name)]; return _en_} catch(e) {e = caml_wrap_exception(e); if(e[1] === Sys_error) {if(1000 <= counter$0)throw e; var counter$1=counter$0 + 1 | 0,counter$0=counter$1; continue} throw e}}} return try_name(0)} var Stdlib_Filename= [0, current_dir_name$2, parent_dir_name$2, dir_sep$2, concat$4, is_relative$1, is_implicit$1, check_suffix$1, chop_suffix, chop_suffix_opt$1, extension, remove_extension, chop_extension, basename$2, dirname$2, null$3, temp_file, open_temp_file, get_temp_dir_name, set_temp_dir_name, temp_dir_name$0, quote$1, quote_command$1]; caml_register_global(826,Stdlib_Filename,"Stdlib__Filename"); function add$4(x,y){return [254,x[1] + y[1],x[2] + y[2]]} function sub$4(x,y){return [254,x[1] - y[1],x[2] - y[2]]} function neg(x){return [254,- x[1],- x[2]]} function conj(x){return [254,x[1],- x[2]]} function mul(x,y) {return [254,x[1] * y[1] - x[2] * y[2],x[1] * y[2] + x[2] * y[1]]} function div(x,y) {if(Math.abs(y[2]) <= Math.abs(y[1])) {var r=y[2] / y[1],d=y[1] + r * y[2]; return [254,(x[1] + r * x[2]) / d,(x[2] - r * x[1]) / d]} var r$0=y[1] / y[2],d$0=y[2] + r$0 * y[1]; return [254,(r$0 * x[1] + x[2]) / d$0,(r$0 * x[2] - x[1]) / d$0]} function inv(x){return div(one$4,x)} function norm2(x){return x[1] * x[1] + x[2] * x[2]} function norm(x) {var r=Math.abs(x[1]),i=Math.abs(x[2]); if(r == 0.)return i; if(i == 0.)return r; if(i <= r){var q=i / r;return r * Math.sqrt(1. + q * q)} var q$0=r / i; return i * Math.sqrt(1. + q$0 * q$0)} function arg(x){return Math.atan2(x[2],x[1])} function polar(n,a){return [254,Math.cos(a) * n,Math.sin(a) * n]} function sqrt(x) {if(x[1] == 0. && x[2] == 0.)return _c0_; var r=Math.abs(x[1]),i=Math.abs(x[2]); if(i <= r) var q=i / r, w=Math.sqrt(r) * Math.sqrt(0.5 * (1. + Math.sqrt(1. + q * q))); else var q$0=r / i, w=Math.sqrt(i) * Math.sqrt(0.5 * (q$0 + Math.sqrt(1. + q$0 * q$0))); if(0. <= x[1])return [254,w,0.5 * x[2] / w]; var w$0=0. <= x[2]?w:- w; return [254,0.5 * i / w,w$0]} function exp(x) {var e=Math.exp(x[1]);return [254,e * Math.cos(x[2]),e * Math.sin(x[2])]} function log(x) {var _ek_=Math.atan2(x[2],x[1]);return [254,Math.log(norm(x)),_ek_]} function pow(x,y){return exp(mul(y,log(x)))} var Stdlib_Complex= [0, zero$4, one$4, i, neg, conj, add$4, sub$4, mul, inv, div, sqrt, norm2, norm, arg, polar, exp, log, pow]; caml_register_global(827,Stdlib_Complex,"Stdlib__Complex"); var Stdlib_ArrayLabels= [0, make_float, init$3, create_matrix, create_matrix, append$1, concat$2, sub$1, copy$1, fill$0, blit$1, to_list$1, of_list, iter$5, iteri$3, map$7, mapi$3, fold_left$3, fold_left_map$0, fold_right$2, iter2$1, map2$1, for_all$3, exists$3, for_all2$1, exists2$1, mem$0, memq$0, find_opt$0, find_map$1, split$0, combine$0, sort, fast_sort$0, fast_sort$0, to_seq$4, to_seqi$1, of_seq$2, Floatarray]; caml_register_global(828,Stdlib_ArrayLabels,"Stdlib__ArrayLabels"); var Stdlib_ListLabels= [0, length$1, compare_lengths, compare_length_with, cons$0, hd, tl, nth, nth_opt, rev, init$0, append, rev_append, flatten, flatten, equal$6, compare$6, iter$2, iteri$0, map$4, mapi$0, rev_map, filter_map$0, concat_map, fold_left_map, fold_left$0, fold_right, iter2$0, map2$0, rev_map2, fold_left2$0, fold_right2, for_all$0, exists$0, for_all2$0, exists2$0, mem, memq, find$0, find_opt, find_map$0, find_all, find_all, filteri, partition$0, partition_map$0, assoc, assoc_opt, assq, assq_opt, mem_assoc, mem_assq, remove_assoc, remove_assq, split, combine, fast_sort, fast_sort, fast_sort, sort_uniq, merge, to_seq$1, of_seq]; caml_register_global(829,Stdlib_ListLabels,"Stdlib__ListLabels"); var Stdlib_BytesLabels= [0, make$0, init$1, empty$0, copy, to_bytes, of_bytes, sub, sub_string, extend, fill, blit, blit$0, concat$0, cat$0, iter$3, iteri$1, map$5, mapi$1, fold_left$1, fold_right$0, for_all$1, exists$1, trim, escaped$0, index, index_opt, rindex, rindex_opt, index_from, index_from_opt, rindex_from, rindex_from_opt, contains, contains_from, rcontains_from, uppercase$0, lowercase$0, capitalize, uncapitalize, uppercase_ascii$0, lowercase_ascii$0, capitalize_ascii, uncapitalize_ascii, compare$8, equal$8, starts_with, ends_with, unsafe_to_string, unsafe_of_string, split_on_char, to_seq$2, to_seqi, of_seq$0, get_utf_8_uchar, set_utf_8_uchar, is_valid_utf_8, get_utf_16be_uchar, set_utf_16be_uchar, is_valid_utf_16be, get_utf_16le_uchar, set_utf_16le_uchar, is_valid_utf_16le, get_uint8, get_int8, get_uint16_ne, get_uint16_be, get_uint16_le, get_int16_ne, get_int16_be, get_int16_le, get_int32_ne, get_int32_be, get_int32_le, get_int64_ne, get_int64_be, get_int64_le, set_uint8, set_int8, set_uint16_ne, set_int16_be, set_int16_le, set_int16_ne, set_int16_be, set_int16_le, set_int32_ne, set_int32_be, set_int32_le, set_int64_ne, set_int64_be, set_int64_le]; caml_register_global(830,Stdlib_BytesLabels,"Stdlib__BytesLabels"); var Stdlib_StringLabels= [0, make$1, init$2, empty$1, of_bytes, to_bytes, concat$1, cat, equal$9, compare$9, starts_with$0, ends_with$0, contains_from$0, rcontains_from$0, contains$0, sub$0, split_on_char$0, map$6, mapi$2, fold_left$2, fold_right$1, for_all$2, exists$2, trim$0, escaped$1, uppercase_ascii$1, lowercase_ascii$1, capitalize_ascii$0, uncapitalize_ascii$0, iter$4, iteri$2, index_from$0, index_from_opt$0, rindex_from$0, rindex_from_opt$0, index$0, index_opt$0, rindex$0, rindex_opt$0, to_seq$3, to_seqi$0, of_seq$1, get_utf_8_uchar$0, is_valid_utf_8$0, get_utf_16be_uchar$0, is_valid_utf_16be$0, get_utf_16le_uchar$0, is_valid_utf_16le$0, blit$0, copy$0, fill, uppercase$1, lowercase$1, capitalize$0, uncapitalize$0, get_uint8$0, get_int8$0, get_uint16_ne$0, get_uint16_be$0, get_uint16_le$0, get_int16_ne$0, get_int16_be$0, get_int16_le$0, get_int32_ne$0, get_int32_be$0, get_int32_le$0, get_int64_ne$0, get_int64_be$0, get_int64_le$0]; caml_register_global(831,Stdlib_StringLabels,"Stdlib__StringLabels"); var Stdlib_MoreLabels=[0,Stdlib_Hashtbl,Stdlib_Map,Stdlib_Set]; caml_register_global(832,Stdlib_MoreLabels,"Stdlib__MoreLabels"); var Stdlib_StdLabels=[0]; caml_register_global(833,Stdlib_StdLabels,"Stdlib__StdLabels"); var float32=0, float64=1, int8_signed=2, int8_unsigned=3, int16_signed=4, int16_unsigned=5, int32$1=6, int64$1=7, int$2=8, nativeint$1=9, complex32=10, complex64=11, char$0=12; function kind_size_in_bytes(param) {switch(param) {case 0:return 4; case 1:return 8; case 2:return 1; case 3:return 1; case 4:return 2; case 5:return 2; case 6:return 4; case 7:return 8; case 8:return 4; case 9:return 4; case 10:return 8; case 11:return 16; default:return 1}} var c_layout=0,fortran_layout=1; function cloop(arr,idx,f,col,max) {if(col === idx.length - 1) return caml_ba_set_generic(arr,idx,caml_call1(f,idx)); var _ei_=caml_check_bound(max,col)[1 + col] - 1 | 0,_eh_=0; if(! (_ei_ < 0)) {var j=_eh_; for(;;) {caml_check_bound(idx,col)[1 + col] = j; cloop(arr,idx,f,col + 1 | 0,max); var _ej_=j + 1 | 0; if(_ei_ !== j){var j=_ej_;continue} break}} return 0} function floop(arr,idx,f,col,max) {if(0 <= col) {var _ef_=caml_check_bound(max,col)[1 + col],_ee_=1; if(! (_ef_ < 1)) {var j=_ee_; for(;;) {caml_check_bound(idx,col)[1 + col] = j; floop(arr,idx,f,col - 1 | 0,max); var _eg_=j + 1 | 0; if(_ef_ !== j){var j=_eg_;continue} break}} return 0} return caml_ba_set_generic(arr,idx,caml_call1(f,idx))} function init$6(kind,layout,dims,f) {var arr=caml_ba_create(kind,layout,dims),dlen=dims.length - 1; return 0 === dlen ?arr :layout ?(floop(arr,caml_make_vect(dlen,1),f,dlen - 1 | 0,dims),arr) :(cloop(arr,caml_make_vect(dlen,0),f,0,dims),arr)} function dims(a) {var n=caml_ba_num_dims(a),d=caml_make_vect(n,0),_eb_=n - 1 | 0,_ea_=0; if(! (_eb_ < 0)) {var i=_ea_; for(;;) {var _ec_=runtime.caml_ba_dim(a,i); caml_check_bound(d,i)[1 + i] = _ec_; var _ed_=i + 1 | 0; if(_eb_ !== i){var i=_ed_;continue} break}} return d} function size_in_bytes(arr) {var _d$_=fold_left$3(caml_mul,1,dims(arr)); return caml_mul(kind_size_in_bytes(caml_ba_kind(arr)),_d$_)} function create$8(kind,layout){return caml_ba_create(kind,layout,[0])} function get$3(arr){return runtime.caml_ba_get_generic(arr,[0])} function set$2(arr) {var _d9_=[0]; return function(_d__){return caml_ba_set_generic(arr,_d9_,_d__)}} function size_in_bytes$0(arr) {return kind_size_in_bytes(caml_ba_kind(arr))} function of_value(kind,layout,v) {var a=create$8(kind,layout);caml_call1(set$2(a),v);return a} function create$9(kind,layout,dim) {return caml_ba_create(kind,layout,[0,dim])} function size_in_bytes$1(arr) {var _d8_=caml_ba_dim_1(arr); return caml_mul(kind_size_in_bytes(caml_ba_kind(arr)),_d8_)} function slice(a,n) {var match=runtime.caml_ba_layout(a); return match?caml_ba_slice(a,[0,n]):caml_ba_slice(a,[0,n])} function init$7(kind,layout,dim,f) {var arr=create$9(kind,layout,dim); if(layout) {var _d6_=1; if(! (dim < 1)) {var i$0=_d6_; for(;;) {caml_ba_set_1(arr,i$0,caml_call1(f,i$0)); var _d7_=i$0 + 1 | 0; if(dim !== i$0){var i$0=_d7_;continue} break}} return arr} var _d4_=dim - 1 | 0,_d3_=0; if(! (_d4_ < 0)) {var i=_d3_; for(;;) {caml_ba_set_1(arr,i,caml_call1(f,i)); var _d5_=i + 1 | 0; if(_d4_ !== i){var i=_d5_;continue} break}} return arr} function of_array(kind,layout,data) {var ba=create$9(kind,layout,data.length - 1), ofs=layout?1:0, _d1_=data.length - 1 - 1 | 0, _d0_=0; if(! (_d1_ < 0)) {var i=_d0_; for(;;) {caml_ba_set_1(ba,i + ofs | 0,caml_check_bound(data,i)[1 + i]); var _d2_=i + 1 | 0; if(_d1_ !== i){var i=_d2_;continue} break}} return ba} function create$10(kind,layout,dim1,dim2) {return caml_ba_create(kind,layout,[0,dim1,dim2])} function size_in_bytes$2(arr) {var _dY_=caml_ba_dim_2(arr),_dZ_=caml_ba_dim_1(arr); return caml_mul (caml_mul(kind_size_in_bytes(caml_ba_kind(arr)),_dZ_),_dY_)} function slice_left(a,n){return caml_ba_slice(a,[0,n])} function slice_right(a,n){return caml_ba_slice(a,[0,n])} function init$8(kind,layout,dim1,dim2,f) {var arr=create$10(kind,layout,dim1,dim2); if(layout) {var _dU_=1; if(! (dim2 < 1)) {var j$0=_dU_; for(;;) {var _dV_=1; if(! (dim1 < 1)) {var i$0=_dV_; for(;;) {caml_ba_set_2(arr,i$0,j$0,caml_call2(f,i$0,j$0)); var _dX_=i$0 + 1 | 0; if(dim1 !== i$0){var i$0=_dX_;continue} break}} var _dW_=j$0 + 1 | 0; if(dim2 !== j$0){var j$0=_dW_;continue} break}} return arr} var _dP_=dim1 - 1 | 0,_dO_=0; if(! (_dP_ < 0)) {var i=_dO_; for(;;) {var _dR_=dim2 - 1 | 0,_dQ_=0; if(! (_dR_ < 0)) {var j=_dQ_; for(;;) {caml_ba_set_2(arr,i,j,caml_call2(f,i,j)); var _dT_=j + 1 | 0; if(_dR_ !== j){var j=_dT_;continue} break}} var _dS_=i + 1 | 0; if(_dP_ !== i){var i=_dS_;continue} break}} return arr} function of_array$0(kind,layout,data) {var dim1=data.length - 1, dim2=0 === dim1?0:caml_check_bound(data,0)[1].length - 1, ba=create$10(kind,layout,dim1,dim2), ofs=layout?1:0, _dJ_=dim1 - 1 | 0, _dI_=0; if(! (_dJ_ < 0)) {var i=_dI_; for(;;) {var row=caml_check_bound(data,i)[1 + i]; if(row.length - 1 !== dim2) invalid_arg(cst_Bigarray_Array2_of_array_n); var _dL_=dim2 - 1 | 0,_dK_=0; if(! (_dL_ < 0)) {var j=_dK_; for(;;) {caml_ba_set_2 (ba,i + ofs | 0,j + ofs | 0,caml_check_bound(row,j)[1 + j]); var _dN_=j + 1 | 0; if(_dL_ !== j){var j=_dN_;continue} break}} var _dM_=i + 1 | 0; if(_dJ_ !== i){var i=_dM_;continue} break}} return ba} function create$11(kind,layout,dim1,dim2,dim3) {return caml_ba_create(kind,layout,[0,dim1,dim2,dim3])} function size_in_bytes$3(arr) {var _dF_=runtime.caml_ba_dim_3(arr), _dG_=caml_ba_dim_2(arr), _dH_=caml_ba_dim_1(arr); return caml_mul (caml_mul (caml_mul(kind_size_in_bytes(caml_ba_kind(arr)),_dH_),_dG_), _dF_)} function slice_left_1(a,n,m){return caml_ba_slice(a,[0,n,m])} function slice_right_1(a,n,m){return caml_ba_slice(a,[0,n,m])} function slice_left_2(a,n){return caml_ba_slice(a,[0,n])} function slice_right_2(a,n){return caml_ba_slice(a,[0,n])} function init$9(kind,layout,dim1,dim2,dim3,f) {var arr=create$11(kind,layout,dim1,dim2,dim3); if(layout) {var _dz_=1; if(! (dim3 < 1)) {var k$0=_dz_; for(;;) {var _dA_=1; if(! (dim2 < 1)) {var j$0=_dA_; for(;;) {var _dC_=1; if(! (dim1 < 1)) {var i$0=_dC_; for(;;) {caml_ba_set_3(arr,i$0,j$0,k$0,caml_call3(f,i$0,j$0,k$0)); var _dE_=i$0 + 1 | 0; if(dim1 !== i$0){var i$0=_dE_;continue} break}} var _dD_=j$0 + 1 | 0; if(dim2 !== j$0){var j$0=_dD_;continue} break}} var _dB_=k$0 + 1 | 0; if(dim3 !== k$0){var k$0=_dB_;continue} break}} return arr} var _dr_=dim1 - 1 | 0,_dq_=0; if(! (_dr_ < 0)) {var i=_dq_; for(;;) {var _dt_=dim2 - 1 | 0,_ds_=0; if(! (_dt_ < 0)) {var j=_ds_; for(;;) {var _dw_=dim3 - 1 | 0,_dv_=0; if(! (_dw_ < 0)) {var k=_dv_; for(;;) {caml_ba_set_3(arr,i,j,k,caml_call3(f,i,j,k)); var _dy_=k + 1 | 0; if(_dw_ !== k){var k=_dy_;continue} break}} var _dx_=j + 1 | 0; if(_dt_ !== j){var j=_dx_;continue} break}} var _du_=i + 1 | 0; if(_dr_ !== i){var i=_du_;continue} break}} return arr} function of_array$1(kind,layout,data) {var dim1=data.length - 1, dim2=0 === dim1?0:caml_check_bound(data,0)[1].length - 1, dim3= 0 === dim2 ?0 :caml_check_bound(caml_check_bound(data,0)[1],0)[1].length - 1, ba=create$11(kind,layout,dim1,dim2,dim3), ofs=layout?1:0, _di_=dim1 - 1 | 0, _dh_=0; if(! (_di_ < 0)) {var i=_dh_; for(;;) {var row=caml_check_bound(data,i)[1 + i]; if(row.length - 1 !== dim2) invalid_arg(cst_Bigarray_Array3_of_array_n); var _dk_=dim2 - 1 | 0,_dj_=0; if(! (_dk_ < 0)) {var j=_dj_; for(;;) {var col=caml_check_bound(row,j)[1 + j]; if(col.length - 1 !== dim3) invalid_arg(cst_Bigarray_Array3_of_array_n$0); var _dn_=dim3 - 1 | 0,_dm_=0; if(! (_dn_ < 0)) {var k=_dm_; for(;;) {caml_ba_set_3 (ba, i + ofs | 0, j + ofs | 0, k + ofs | 0, caml_check_bound(col,k)[1 + k]); var _dp_=k + 1 | 0; if(_dn_ !== k){var k=_dp_;continue} break}} var _do_=j + 1 | 0; if(_dk_ !== j){var j=_do_;continue} break}} var _dl_=i + 1 | 0; if(_di_ !== i){var i=_dl_;continue} break}} return ba} function array0_of_genarray(a) {return 0 === caml_ba_num_dims(a) ?a :invalid_arg(cst_Bigarray_array0_of_genarra)} function array1_of_genarray(a) {return 1 === caml_ba_num_dims(a) ?a :invalid_arg(cst_Bigarray_array1_of_genarra)} function array2_of_genarray(a) {return 2 === caml_ba_num_dims(a) ?a :invalid_arg(cst_Bigarray_array2_of_genarra)} function array3_of_genarray(a) {return 3 === caml_ba_num_dims(a) ?a :invalid_arg(cst_Bigarray_array3_of_genarra)} function reshape_0(a){return caml_ba_reshape(a,[0])} function reshape_1(a,dim1){return caml_ba_reshape(a,[0,dim1])} function reshape_2(a,dim1,dim2){return caml_ba_reshape(a,[0,dim1,dim2])} function reshape_3(a,dim1,dim2,dim3) {return caml_ba_reshape(a,[0,dim1,dim2,dim3])} var Stdlib_Bigarray= [0, float32, float64, complex32, complex64, int8_signed, int8_unsigned, int16_signed, int16_unsigned, int$2, int32$1, int64$1, nativeint$1, char$0, kind_size_in_bytes, c_layout, fortran_layout, [0,init$6,dims,size_in_bytes], [0, create$8, of_value, caml_ba_change_layout, size_in_bytes$0, get$3, set$2, of_value], [0, create$9, init$7, caml_ba_change_layout, size_in_bytes$1, slice, of_array], [0, create$10, init$8, caml_ba_change_layout, size_in_bytes$2, slice_left, slice_right, of_array$0], [0, create$11, init$9, caml_ba_change_layout, size_in_bytes$3, slice_left_1, slice_right_1, slice_left_2, slice_right_2, of_array$1], array0_of_genarray, array1_of_genarray, array2_of_genarray, array3_of_genarray, caml_ba_reshape, reshape_0, reshape_1, reshape_2, reshape_3]; caml_register_global(834,Stdlib_Bigarray,"Stdlib__Bigarray"); function with_open(openfun,s,f) {var ic=caml_call1(openfun,s); function _dg_(param){return caml_call1(f,ic)} return protect(function(param){return close_noerr$0(ic)},_dg_)} function with_open_bin(s,f){return with_open(open_bin$0,s,f)} function with_open_text(s,f){return with_open(open_text$0,s,f)} function with_open_gen(flags,perm,s,f) {return with_open(function(_df_){return open_gen$0(flags,perm,_df_)},s,f)} var seek=_m_[4],pos=_m_[5],length$11=_m_[6]; function input_char$0(ic) {try {var c=caml_ml_input_char(ic)} catch(_de_) {_de_ = caml_wrap_exception(_de_); if(_de_ === End_of_file)return 0; throw _de_} return [0,c]} function input_byte$0(ic) {try {var n=caml_ml_input_char(ic)} catch(_dd_) {_dd_ = caml_wrap_exception(_dd_); if(_dd_ === End_of_file)return 0; throw _dd_} return [0,n]} function input_line$0(ic) {try {var s=input_line(ic)} catch(_dc_) {_dc_ = caml_wrap_exception(_dc_); if(_dc_ === End_of_file)return 0; throw _dc_} return [0,s]} function really_input$0(ic,buf,pos,len) {try {really_input(ic,buf,pos,len);return _c1_} catch(_db_) {_db_ = caml_wrap_exception(_db_); if(_db_ === End_of_file)return 0; throw _db_}} function really_input_string$0(ic,len) {try {var s=really_input_string(ic,len)} catch(_da_) {_da_ = caml_wrap_exception(_da_); if(_da_ === End_of_file)return 0; throw _da_} return [0,s]} function read_upto(ic,buf,ofs,len) {var ofs$0=ofs,len$0=len; for(;;) {if(0 !== len$0) {var r=input(ic,buf,ofs$0,len$0); if(0 !== r) {var len$1=len$0 - r | 0, ofs$1=ofs$0 + r | 0, ofs$0=ofs$1, len$0=len$1; continue}} return ofs$0 - ofs | 0}} function ensure(buf,ofs,n) {var len=caml_ml_bytes_length(buf); if((ofs + n | 0) <= len)return buf; var new_len=[0,len]; for(;;) {if(new_len[1] < (ofs + n | 0)) {new_len[1] = (2 * new_len[1] | 0) + 1 | 0;continue} var new_len$0=new_len[1], new_len$1= new_len$0 <= max_string_length ?new_len$0 :ofs < max_string_length ?max_string_length :failwith(cst_In_channel_input_all_chann), new_buf=caml_create_bytes(new_len$1); blit(buf,0,new_buf,0,ofs); return new_buf}} function input_all(ic) {var chunk_size=65536; try {var _c8_=caml_ml_pos_in(ic), _c9_=caml_ml_channel_size(ic) - _c8_ | 0, initial_size=_c9_} catch(_c$_) {_c$_ = caml_wrap_exception(_c$_); if(_c$_[1] !== Sys_error)throw _c$_; var initial_size=-1} var initial_size$0=0 <= initial_size?initial_size:chunk_size, initial_size$1= initial_size$0 <= max_string_length?initial_size$0:max_string_length, buf=caml_create_bytes(initial_size$1), nread=read_upto(ic,buf,0,initial_size$1); if(nread < initial_size$1)return sub_string(buf,0,nread); try {var c=caml_ml_input_char(ic)} catch(_c__) {_c__ = caml_wrap_exception(_c__); if(_c__ === End_of_file)return caml_string_of_bytes(buf); throw _c__} function loop(buf,ofs) {var buf$0=buf,ofs$0=ofs; for(;;) {var buf$1=ensure(buf$0,ofs$0,chunk_size), rem=caml_ml_bytes_length(buf$1) - ofs$0 | 0, r=read_upto(ic,buf$1,ofs$0,rem); if(r < rem)return sub_string(buf$1,0,ofs$0 + r | 0); var ofs$1=ofs$0 + rem | 0,buf$0=buf$1,ofs$0=ofs$1; continue}} var buf$0=ensure(buf,nread,65537); caml_bytes_set(buf$0,nread,c); return loop(buf$0,nread + 1 | 0)} var Stdlib_In_channel= [0, stdin, open_bin$0, open_text$0, open_gen$0, with_open_bin, with_open_text, with_open_gen, seek, pos, length$11, close$0, close_noerr$0, input_char$0, input_byte$0, input_line$0, input, really_input$0, really_input_string$0, input_all, set_binary_mode]; caml_register_global(835,Stdlib_In_channel,"Stdlib__In_channel"); function with_open$0(openfun,s,f) {var oc=caml_call1(openfun,s); function _c7_(param){return caml_call1(f,oc)} return protect(function(param){return close_noerr(oc)},_c7_)} function with_open_bin$0(s,f){return with_open$0(open_bin,s,f)} function with_open_text$0(s,f){return with_open$0(open_text,s,f)} function with_open_gen$0(flags,perm,s,f) {return with_open$0(function(_c6_){return open_gen(flags,perm,_c6_)},s,f)} var seek$0=_m_[1], pos$0=_m_[2], length$12=_m_[3], Stdlib_Out_channel= [0, stdout, stderr, open_bin, open_text, open_gen, with_open_bin$0, with_open_text$0, with_open_gen$0, seek$0, pos$0, length$12, close, close_noerr, flush, flush_all, output_char, output_byte, output_string, output_bytes, output, output_substring, set_binary_mode$0, runtime.caml_ml_set_buffered, runtime.caml_ml_is_buffered]; caml_register_global(836,Stdlib_Out_channel,"Stdlib__Out_channel"); return} (globalThis)); //# 1 "../inventaire_linge/.inventaire_linge.objs/inventaire_linge.cma.js" (function(globalThis) {"use strict"; var runtime=globalThis.jsoo_runtime, caml_list_of_js_array=runtime.caml_list_of_js_array, caml_string_of_jsbytes=runtime.caml_string_of_jsbytes, cst_Chambre_1=caml_string_of_jsbytes("Chambre 1"), cst_Chambre_2=caml_string_of_jsbytes("Chambre 2"), cst_Chambre_3=caml_string_of_jsbytes("Chambre 3"), cst_S_jour=caml_string_of_jsbytes("S\xc3\xa9jour"), cst_Salle_de_bains_1=caml_string_of_jsbytes("Salle de bains 1"), cst_Salle_de_bains_2=caml_string_of_jsbytes("Salle de bains 2"), cst_ch1=caml_string_of_jsbytes("ch1"), cst_ch2=caml_string_of_jsbytes("ch2"), cst_ch3=caml_string_of_jsbytes("ch3"), cst_sj=caml_string_of_jsbytes("sj"), cst_sdb1=caml_string_of_jsbytes("sdb1"), cst_sdb2=caml_string_of_jsbytes("sdb2"), tarif=caml_string_of_jsbytes("2022-2023"), destinataires= caml_string_of_jsbytes("dubuval@gmail.com,grange.guy@outlook.fr"), pieces=[0,0,[0,1,[0,2,[0,3,[0,4,[0,5,0]]]]]], fournitures= caml_list_of_js_array ([[0, caml_string_of_jsbytes("dh80"), caml_string_of_jsbytes("Drap housse 80 cm"), 4, [0,[0,0,2],0]], [0, caml_string_of_jsbytes("dh90"), caml_string_of_jsbytes("Drap housse 90 cm"), 4, [0,[0,2,4],0]], [0, caml_string_of_jsbytes("dh140"), caml_string_of_jsbytes("Drap housse 140 cm"), 7, [0,[0,1,1],[0,[0,3,1],0]]], [0, caml_string_of_jsbytes("dhbb"), caml_string_of_jsbytes("Drap housse b\xc3\xa9b\xc3\xa9"), 2, [0,[0,0,1],0]], [0, caml_string_of_jsbytes("hc1p"), caml_string_of_jsbytes("Housse de couette 1 place"), 7, [0,[0,0,2],[0,[0,2,4],0]]], [0, caml_string_of_jsbytes("hc2p"), caml_string_of_jsbytes("Housse de couette 2 places"), 10, [0,[0,1,1],[0,[0,3,1],0]]], [0, caml_string_of_jsbytes("hcbb"), caml_string_of_jsbytes("Housse de couette b\xc3\xa9b\xc3\xa9"), 3, [0,[0,0,1],0]], [0, caml_string_of_jsbytes("litbb"), caml_string_of_jsbytes("Lit b\xc3\xa9b\xc3\xa9"), 8, [0,[0,0,1],0]], [0, caml_string_of_jsbytes("pm80"), caml_string_of_jsbytes("Prot\xc3\xa8ge matelas 80 cm"), 0, [0,[0,0,2],0]], [0, caml_string_of_jsbytes("pm90"), caml_string_of_jsbytes("Prot\xc3\xa8ge matelas 90 cm"), 0, [0,[0,2,4],0]], [0, caml_string_of_jsbytes("pm140"), caml_string_of_jsbytes("Prot\xc3\xa8ge matelas 140 cm"), 0, [0,[0,1,1],[0,[0,3,1],0]]], [0, caml_string_of_jsbytes("pmbb"), caml_string_of_jsbytes("Prot\xc3\xa8ge matelas b\xc3\xa9b\xc3\xa9"), 0, [0,[0,0,1],0]], [0, caml_string_of_jsbytes("taie"), caml_string_of_jsbytes("Taie d\xe2\x80\x99oreiller"), 1, [0,[0,0,4],[0,[0,1,4],[0,[0,2,8],[0,[0,3,4],0]]]]], [0, caml_string_of_jsbytes("douche"), caml_string_of_jsbytes("Drap de douche"), 2, [0,[0,4,3],[0,[0,5,3],0]]], [0, caml_string_of_jsbytes("gant"), caml_string_of_jsbytes("Gant de toilette"), 1, [0,[0,4,4],[0,[0,5,6],0]]], [0, caml_string_of_jsbytes("serv"), caml_string_of_jsbytes("Serviette de toilette"), 1, [0,[0,4,4],[0,[0,5,6],0]]], [0, caml_string_of_jsbytes("inv"), caml_string_of_jsbytes("Serviette invit\xc3\xa9s"), 1, [0,[0,4,1],[0,[0,5,1],0]]], [0, caml_string_of_jsbytes("tapis"), caml_string_of_jsbytes("Tapis de douche"), 2, [0,[0,4,2],[0,[0,5,2],0]]], [0, caml_string_of_jsbytes("mains"), caml_string_of_jsbytes("Essuie-mains"), 1, [0,[0,3,2],0]], [0, caml_string_of_jsbytes("table"), caml_string_of_jsbytes("Serviettes de table"), 1, [0,[0,3,10],0]], [0, caml_string_of_jsbytes("torchon"), caml_string_of_jsbytes("Torchons \xc3\xa0 vaisselle"), 1, [0,[0,3,2],0]], [0, caml_string_of_jsbytes("microfibre"), caml_string_of_jsbytes("Torchons microfibre"), 0, [0,[0,4,2],[0,[0,5,2],[0,[0,3,2],0]]]]]); function short_string_of_piece(param) {switch(param) {case 0:return cst_ch1; case 1:return cst_ch2; case 2:return cst_ch3; case 3:return cst_sj; case 4:return cst_sdb1; default:return cst_sdb2}} function long_string_of_piece(param) {switch(param) {case 0:return cst_Chambre_1; case 1:return cst_Chambre_2; case 2:return cst_Chambre_3; case 3:return cst_S_jour; case 4:return cst_Salle_de_bains_1; default:return cst_Salle_de_bains_2}} var Inventaire_linge= [0, tarif, destinataires, pieces, short_string_of_piece, long_string_of_piece, fournitures]; runtime.caml_register_global(16,Inventaire_linge,"Inventaire_linge"); return} (globalThis)); //# 1 "../.js/js_of_ocaml-compiler.runtime/jsoo_runtime.cma.js" (function(globalThis) {"use strict"; var runtime=globalThis.jsoo_runtime, caml_exn_with_js_backtrace=runtime.caml_exn_with_js_backtrace, caml_string_of_jsbytes=runtime.caml_string_of_jsbytes; function caml_call2(f,a0,a1) {return f.length == 2?f(a0,a1):runtime.caml_call_gen(f,[a0,a1])} var global_data=runtime.caml_get_global_data(), cst_Jsoo_runtime_Error_Exn= caml_string_of_jsbytes("Jsoo_runtime.Error.Exn"), cst_jsError=caml_string_of_jsbytes("jsError"), Stdlib_Callback=global_data.Stdlib__Callback, Js=[0], Sys=[0], Exn=[248,cst_Jsoo_runtime_Error_Exn,runtime.caml_fresh_oo_id(0)]; caml_call2(Stdlib_Callback[2],cst_jsError,[0,Exn,[0]]); function raise(exn){throw exn} var Error= [0, raise, caml_exn_with_js_backtrace, runtime.caml_js_error_option_of_exception, Exn], For_compatibility_only=[0], Bigstring=[0], Typed_array=[0,Bigstring], Int64=[0], Jsoo_runtime=[0,Js,Sys,Error,For_compatibility_only,Typed_array,Int64]; runtime.caml_register_global(4,Jsoo_runtime,"Jsoo_runtime"); return} (globalThis)); //# 1 "../.js/js_of_ocaml/js_of_ocaml.cma.js" (function(globalThis) {"use strict"; var jsoo_exports=typeof module === "object" && module.exports || globalThis, runtime=globalThis.jsoo_runtime, caml_float_of_string=runtime.caml_float_of_string, caml_fresh_oo_id=runtime.caml_fresh_oo_id, caml_int_of_string=runtime.caml_int_of_string, caml_js_from_array=runtime.caml_js_from_array, caml_js_get=runtime.caml_js_get, caml_js_html_escape=runtime.caml_js_html_escape, caml_js_set=runtime.caml_js_set, caml_js_wrap_callback=runtime.caml_js_wrap_callback, caml_js_wrap_meth_callback=runtime.caml_js_wrap_meth_callback, caml_jsbytes_of_string=runtime.caml_jsbytes_of_string, caml_jsstring_of_string=runtime.caml_jsstring_of_string, caml_list_of_js_array=runtime.caml_list_of_js_array, caml_ml_string_length=runtime.caml_ml_string_length, caml_register_global=runtime.caml_register_global, caml_string_compare=runtime.caml_string_compare, caml_string_notequal=runtime.caml_string_notequal, caml_string_of_array=runtime.caml_string_of_array, caml_string_of_jsbytes=runtime.caml_string_of_jsbytes, caml_string_of_jsstring=runtime.caml_string_of_jsstring, caml_wrap_exception=runtime.caml_wrap_exception; function caml_call1(f,a0) {return f.length == 1?f(a0):runtime.caml_call_gen(f,[a0])} function caml_call2(f,a0,a1) {return f.length == 2?f(a0,a1):runtime.caml_call_gen(f,[a0,a1])} function caml_call3(f,a0,a1,a2) {return f.length == 3?f(a0,a1,a2):runtime.caml_call_gen(f,[a0,a1,a2])} function caml_call4(f,a0,a1,a2,a3) {return f.length == 4 ?f(a0,a1,a2,a3) :runtime.caml_call_gen(f,[a0,a1,a2,a3])} function caml_call5(f,a0,a1,a2,a3,a4) {return f.length == 5 ?f(a0,a1,a2,a3,a4) :runtime.caml_call_gen(f,[a0,a1,a2,a3,a4])} var global_data=runtime.caml_get_global_data(), cst_parseFloat=caml_string_of_jsbytes("parseFloat"), cst_parseInt=caml_string_of_jsbytes("parseInt"), cst_can_t_retrieve_file_name_n= caml_string_of_jsbytes("can't retrieve file name: not implemented"), cst_endings=caml_string_of_jsbytes("endings"), cst_type=caml_string_of_jsbytes("type"), cst_loadstart=caml_string_of_jsbytes("loadstart"), cst_progress=caml_string_of_jsbytes("progress"), cst_abort=caml_string_of_jsbytes("abort"), cst_error=caml_string_of_jsbytes("error"), cst_load=caml_string_of_jsbytes("load"), cst_loadend=caml_string_of_jsbytes("loadend"), cst_a$1=caml_string_of_jsbytes("a"), cst_area$1=caml_string_of_jsbytes("area"), cst_audio$1=caml_string_of_jsbytes("audio"), cst_base$1=caml_string_of_jsbytes("base"), cst_blockquote$1=caml_string_of_jsbytes("blockquote"), cst_body$1=caml_string_of_jsbytes("body"), cst_br$1=caml_string_of_jsbytes("br"), cst_button$1=caml_string_of_jsbytes("button"), cst_canvas$1=caml_string_of_jsbytes("canvas"), cst_caption$1=caml_string_of_jsbytes("caption"), cst_col$1=caml_string_of_jsbytes("col"), cst_colgroup$1=caml_string_of_jsbytes("colgroup"), cst_del$1=caml_string_of_jsbytes("del"), cst_div$1=caml_string_of_jsbytes("div"), cst_dl$1=caml_string_of_jsbytes("dl"), cst_embed$1=caml_string_of_jsbytes("embed"), cst_fieldset$1=caml_string_of_jsbytes("fieldset"), cst_form$1=caml_string_of_jsbytes("form"), cst_frame$1=caml_string_of_jsbytes("frame"), cst_frameset$1=caml_string_of_jsbytes("frameset"), cst_h1$1=caml_string_of_jsbytes("h1"), cst_h2$1=caml_string_of_jsbytes("h2"), cst_h3$1=caml_string_of_jsbytes("h3"), cst_h4$1=caml_string_of_jsbytes("h4"), cst_h5$1=caml_string_of_jsbytes("h5"), cst_h6$1=caml_string_of_jsbytes("h6"), cst_head$1=caml_string_of_jsbytes("head"), cst_hr$1=caml_string_of_jsbytes("hr"), cst_html$1=caml_string_of_jsbytes("html"), cst_iframe$1=caml_string_of_jsbytes("iframe"), cst_img$1=caml_string_of_jsbytes("img"), cst_input$2=caml_string_of_jsbytes("input"), cst_ins$1=caml_string_of_jsbytes("ins"), cst_label$1=caml_string_of_jsbytes("label"), cst_legend$1=caml_string_of_jsbytes("legend"), cst_li$1=caml_string_of_jsbytes("li"), cst_link$1=caml_string_of_jsbytes("link"), cst_map$1=caml_string_of_jsbytes("map"), cst_meta$1=caml_string_of_jsbytes("meta"), cst_object$1=caml_string_of_jsbytes("object"), cst_ol$1=caml_string_of_jsbytes("ol"), cst_optgroup$1=caml_string_of_jsbytes("optgroup"), cst_option$1=caml_string_of_jsbytes("option"), cst_p$1=caml_string_of_jsbytes("p"), cst_param$1=caml_string_of_jsbytes("param"), cst_pre$1=caml_string_of_jsbytes("pre"), cst_q$1=caml_string_of_jsbytes("q"), cst_script$1=caml_string_of_jsbytes("script"), cst_select$2=caml_string_of_jsbytes("select"), cst_style$1=caml_string_of_jsbytes("style"), cst_table$1=caml_string_of_jsbytes("table"), cst_tbody$1=caml_string_of_jsbytes("tbody"), cst_td$1=caml_string_of_jsbytes("td"), cst_textarea$1=caml_string_of_jsbytes("textarea"), cst_tfoot$1=caml_string_of_jsbytes("tfoot"), cst_th$1=caml_string_of_jsbytes("th"), cst_thead$1=caml_string_of_jsbytes("thead"), cst_title$1=caml_string_of_jsbytes("title"), cst_tr$1=caml_string_of_jsbytes("tr"), cst_ul$1=caml_string_of_jsbytes("ul"), cst_video$1=caml_string_of_jsbytes("video"), cst_KeyH=caml_string_of_jsbytes("KeyH"), cst_Digit6=caml_string_of_jsbytes("Digit6"), cst_BrowserRefresh=caml_string_of_jsbytes("BrowserRefresh"), cst_Backslash=caml_string_of_jsbytes("Backslash"), cst_AltLeft=caml_string_of_jsbytes("AltLeft"), cst_AltRight=caml_string_of_jsbytes("AltRight"), cst_ArrowDown=caml_string_of_jsbytes("ArrowDown"), cst_ArrowLeft=caml_string_of_jsbytes("ArrowLeft"), cst_ArrowRight=caml_string_of_jsbytes("ArrowRight"), cst_ArrowUp=caml_string_of_jsbytes("ArrowUp"), cst_Backquote=caml_string_of_jsbytes("Backquote"), cst_Backspace=caml_string_of_jsbytes("Backspace"), cst_BracketLeft=caml_string_of_jsbytes("BracketLeft"), cst_BracketRight=caml_string_of_jsbytes("BracketRight"), cst_BrowserBack=caml_string_of_jsbytes("BrowserBack"), cst_BrowserFavorites=caml_string_of_jsbytes("BrowserFavorites"), cst_BrowserForward=caml_string_of_jsbytes("BrowserForward"), cst_BrowserHome=caml_string_of_jsbytes("BrowserHome"), cst_Delete=caml_string_of_jsbytes("Delete"), cst_BrowserSearch=caml_string_of_jsbytes("BrowserSearch"), cst_BrowserStop=caml_string_of_jsbytes("BrowserStop"), cst_CapsLock=caml_string_of_jsbytes("CapsLock"), cst_Comma=caml_string_of_jsbytes("Comma"), cst_ContextMenu=caml_string_of_jsbytes("ContextMenu"), cst_ControlLeft=caml_string_of_jsbytes("ControlLeft"), cst_ControlRight=caml_string_of_jsbytes("ControlRight"), cst_Digit0=caml_string_of_jsbytes("Digit0"), cst_Digit1=caml_string_of_jsbytes("Digit1"), cst_Digit2=caml_string_of_jsbytes("Digit2"), cst_Digit3=caml_string_of_jsbytes("Digit3"), cst_Digit4=caml_string_of_jsbytes("Digit4"), cst_Digit5=caml_string_of_jsbytes("Digit5"), cst_F6=caml_string_of_jsbytes("F6"), cst_F1=caml_string_of_jsbytes("F1"), cst_Digit7=caml_string_of_jsbytes("Digit7"), cst_Digit8=caml_string_of_jsbytes("Digit8"), cst_Digit9=caml_string_of_jsbytes("Digit9"), cst_End=caml_string_of_jsbytes("End"), cst_Enter=caml_string_of_jsbytes("Enter"), cst_Equal=caml_string_of_jsbytes("Equal"), cst_Escape=caml_string_of_jsbytes("Escape"), cst_F10=caml_string_of_jsbytes("F10"), cst_F11=caml_string_of_jsbytes("F11"), cst_F12=caml_string_of_jsbytes("F12"), cst_F2=caml_string_of_jsbytes("F2"), cst_F3=caml_string_of_jsbytes("F3"), cst_F4=caml_string_of_jsbytes("F4"), cst_F5=caml_string_of_jsbytes("F5"), cst_KeyA=caml_string_of_jsbytes("KeyA"), cst_F7=caml_string_of_jsbytes("F7"), cst_F8=caml_string_of_jsbytes("F8"), cst_F9=caml_string_of_jsbytes("F9"), cst_Home=caml_string_of_jsbytes("Home"), cst_Insert=caml_string_of_jsbytes("Insert"), cst_IntlBackslash=caml_string_of_jsbytes("IntlBackslash"), cst_IntlYen=caml_string_of_jsbytes("IntlYen"), cst_KeyB=caml_string_of_jsbytes("KeyB"), cst_KeyC=caml_string_of_jsbytes("KeyC"), cst_KeyD=caml_string_of_jsbytes("KeyD"), cst_KeyE=caml_string_of_jsbytes("KeyE"), cst_KeyF=caml_string_of_jsbytes("KeyF"), cst_KeyG=caml_string_of_jsbytes("KeyG"), cst_Numpad4=caml_string_of_jsbytes("Numpad4"), cst_KeyX=caml_string_of_jsbytes("KeyX"), cst_KeyP=caml_string_of_jsbytes("KeyP"), cst_KeyI=caml_string_of_jsbytes("KeyI"), cst_KeyJ=caml_string_of_jsbytes("KeyJ"), cst_KeyK=caml_string_of_jsbytes("KeyK"), cst_KeyL=caml_string_of_jsbytes("KeyL"), cst_KeyM=caml_string_of_jsbytes("KeyM"), cst_KeyN=caml_string_of_jsbytes("KeyN"), cst_KeyO=caml_string_of_jsbytes("KeyO"), cst_KeyQ=caml_string_of_jsbytes("KeyQ"), cst_KeyR=caml_string_of_jsbytes("KeyR"), cst_KeyS=caml_string_of_jsbytes("KeyS"), cst_KeyT=caml_string_of_jsbytes("KeyT"), cst_KeyU=caml_string_of_jsbytes("KeyU"), cst_KeyV=caml_string_of_jsbytes("KeyV"), cst_KeyW=caml_string_of_jsbytes("KeyW"), cst_MetaRight=caml_string_of_jsbytes("MetaRight"), cst_KeyY=caml_string_of_jsbytes("KeyY"), cst_KeyZ=caml_string_of_jsbytes("KeyZ"), cst_MediaPlayPause=caml_string_of_jsbytes("MediaPlayPause"), cst_MediaStop=caml_string_of_jsbytes("MediaStop"), cst_MediaTrackNext=caml_string_of_jsbytes("MediaTrackNext"), cst_MediaTrackPrevious=caml_string_of_jsbytes("MediaTrackPrevious"), cst_MetaLeft=caml_string_of_jsbytes("MetaLeft"), cst_Minus=caml_string_of_jsbytes("Minus"), cst_NumLock=caml_string_of_jsbytes("NumLock"), cst_Numpad0=caml_string_of_jsbytes("Numpad0"), cst_Numpad1=caml_string_of_jsbytes("Numpad1"), cst_Numpad2=caml_string_of_jsbytes("Numpad2"), cst_Numpad3=caml_string_of_jsbytes("Numpad3"), cst_PageUp=caml_string_of_jsbytes("PageUp"), cst_NumpadDivide=caml_string_of_jsbytes("NumpadDivide"), cst_Numpad5=caml_string_of_jsbytes("Numpad5"), cst_Numpad6=caml_string_of_jsbytes("Numpad6"), cst_Numpad7=caml_string_of_jsbytes("Numpad7"), cst_Numpad8=caml_string_of_jsbytes("Numpad8"), cst_Numpad9=caml_string_of_jsbytes("Numpad9"), cst_NumpadAdd=caml_string_of_jsbytes("NumpadAdd"), cst_NumpadDecimal=caml_string_of_jsbytes("NumpadDecimal"), cst_NumpadEnter=caml_string_of_jsbytes("NumpadEnter"), cst_NumpadEqual=caml_string_of_jsbytes("NumpadEqual"), cst_NumpadMultiply=caml_string_of_jsbytes("NumpadMultiply"), cst_NumpadSubtract=caml_string_of_jsbytes("NumpadSubtract"), cst_OSLeft=caml_string_of_jsbytes("OSLeft"), cst_OSRight=caml_string_of_jsbytes("OSRight"), cst_PageDown=caml_string_of_jsbytes("PageDown"), cst_ShiftRight=caml_string_of_jsbytes("ShiftRight"), cst_Pause=caml_string_of_jsbytes("Pause"), cst_Period=caml_string_of_jsbytes("Period"), cst_PrintScreen=caml_string_of_jsbytes("PrintScreen"), cst_Quote=caml_string_of_jsbytes("Quote"), cst_ScrollLock=caml_string_of_jsbytes("ScrollLock"), cst_Semicolon=caml_string_of_jsbytes("Semicolon"), cst_ShiftLeft=caml_string_of_jsbytes("ShiftLeft"), cst_Slash=caml_string_of_jsbytes("Slash"), cst_Space=caml_string_of_jsbytes("Space"), cst_Tab=caml_string_of_jsbytes("Tab"), cst_VolumeDown=caml_string_of_jsbytes("VolumeDown"), cst_VolumeMute=caml_string_of_jsbytes("VolumeMute"), cst_VolumeUp=caml_string_of_jsbytes("VolumeUp"), cst_mouseout$0=caml_string_of_jsbytes("mouseout"), cst_mouseover$0=caml_string_of_jsbytes("mouseover"), cst_video$0=caml_string_of_jsbytes("video"), cst_audio$0=caml_string_of_jsbytes("audio"), cst_ul$0=caml_string_of_jsbytes("ul"), cst_tr$0=caml_string_of_jsbytes("tr"), cst_title$0=caml_string_of_jsbytes("title"), cst_thead$0=caml_string_of_jsbytes("thead"), cst_th$0=caml_string_of_jsbytes("th"), cst_tfoot$0=caml_string_of_jsbytes("tfoot"), cst_textarea$0=caml_string_of_jsbytes("textarea"), cst_td$0=caml_string_of_jsbytes("td"), cst_tbody$0=caml_string_of_jsbytes("tbody"), cst_table$0=caml_string_of_jsbytes("table"), cst_style$0=caml_string_of_jsbytes("style"), cst_select$1=caml_string_of_jsbytes("select"), cst_script$0=caml_string_of_jsbytes("script"), cst_q$0=caml_string_of_jsbytes("q"), cst_pre$0=caml_string_of_jsbytes("pre"), cst_param$0=caml_string_of_jsbytes("param"), cst_p$0=caml_string_of_jsbytes("p"), cst_option$0=caml_string_of_jsbytes("option"), cst_optgroup$0=caml_string_of_jsbytes("optgroup"), cst_ol$0=caml_string_of_jsbytes("ol"), cst_object$0=caml_string_of_jsbytes("object"), cst_meta$0=caml_string_of_jsbytes("meta"), cst_map$0=caml_string_of_jsbytes("map"), cst_link$0=caml_string_of_jsbytes("link"), cst_li$0=caml_string_of_jsbytes("li"), cst_legend$0=caml_string_of_jsbytes("legend"), cst_label$0=caml_string_of_jsbytes("label"), cst_ins$0=caml_string_of_jsbytes("ins"), cst_input$1=caml_string_of_jsbytes("input"), cst_img$0=caml_string_of_jsbytes("img"), cst_iframe$0=caml_string_of_jsbytes("iframe"), cst_html$0=caml_string_of_jsbytes("html"), cst_hr$0=caml_string_of_jsbytes("hr"), cst_head$0=caml_string_of_jsbytes("head"), cst_h6$0=caml_string_of_jsbytes("h6"), cst_h5$0=caml_string_of_jsbytes("h5"), cst_h4$0=caml_string_of_jsbytes("h4"), cst_h3$0=caml_string_of_jsbytes("h3"), cst_h2$0=caml_string_of_jsbytes("h2"), cst_h1$0=caml_string_of_jsbytes("h1"), cst_frame$0=caml_string_of_jsbytes("frame"), cst_frameset$0=caml_string_of_jsbytes("frameset"), cst_form$0=caml_string_of_jsbytes("form"), cst_embed$0=caml_string_of_jsbytes("embed"), cst_fieldset$0=caml_string_of_jsbytes("fieldset"), cst_dl$0=caml_string_of_jsbytes("dl"), cst_div$0=caml_string_of_jsbytes("div"), cst_del$0=caml_string_of_jsbytes("del"), cst_colgroup$0=caml_string_of_jsbytes("colgroup"), cst_col$0=caml_string_of_jsbytes("col"), cst_caption$0=caml_string_of_jsbytes("caption"), cst_canvas$0=caml_string_of_jsbytes("canvas"), cst_button$0=caml_string_of_jsbytes("button"), cst_br$0=caml_string_of_jsbytes("br"), cst_body$0=caml_string_of_jsbytes("body"), cst_blockquote$0=caml_string_of_jsbytes("blockquote"), cst_base$0=caml_string_of_jsbytes("base"), cst_area$0=caml_string_of_jsbytes("area"), cst_a$0=caml_string_of_jsbytes("a"), cst_canvas=caml_string_of_jsbytes("canvas"), cst_video=caml_string_of_jsbytes("video"), cst_audio=caml_string_of_jsbytes("audio"), cst_iframe=caml_string_of_jsbytes("iframe"), cst_frame=caml_string_of_jsbytes("frame"), cst_frameset=caml_string_of_jsbytes("frameset"), cst_address=caml_string_of_jsbytes("address"), cst_noscript=caml_string_of_jsbytes("noscript"), cst_dt=caml_string_of_jsbytes("dt"), cst_dd=caml_string_of_jsbytes("dd"), cst_abbr=caml_string_of_jsbytes("abbr"), cst_var=caml_string_of_jsbytes("var"), cst_kbd=caml_string_of_jsbytes("kbd"), cst_samp=caml_string_of_jsbytes("samp"), cst_code=caml_string_of_jsbytes("code"), cst_dfn=caml_string_of_jsbytes("dfn"), cst_cite=caml_string_of_jsbytes("cite"), cst_strong=caml_string_of_jsbytes("strong"), cst_em=caml_string_of_jsbytes("em"), cst_small=caml_string_of_jsbytes("small"), cst_big=caml_string_of_jsbytes("big"), cst_b=caml_string_of_jsbytes("b"), cst_i=caml_string_of_jsbytes("i"), cst_tt=caml_string_of_jsbytes("tt"), cst_span=caml_string_of_jsbytes("span"), cst_sup=caml_string_of_jsbytes("sup"), cst_sub=caml_string_of_jsbytes("sub"), cst_td=caml_string_of_jsbytes("td"), cst_th=caml_string_of_jsbytes("th"), cst_tr=caml_string_of_jsbytes("tr"), cst_tbody=caml_string_of_jsbytes("tbody"), cst_tfoot=caml_string_of_jsbytes("tfoot"), cst_thead=caml_string_of_jsbytes("thead"), cst_colgroup=caml_string_of_jsbytes("colgroup"), cst_col=caml_string_of_jsbytes("col"), cst_caption=caml_string_of_jsbytes("caption"), cst_table=caml_string_of_jsbytes("table"), cst_script=caml_string_of_jsbytes("script"), cst_area=caml_string_of_jsbytes("area"), cst_map=caml_string_of_jsbytes("map"), cst_param=caml_string_of_jsbytes("param"), cst_object=caml_string_of_jsbytes("object"), cst_img=caml_string_of_jsbytes("img"), cst_a=caml_string_of_jsbytes("a"), cst_del=caml_string_of_jsbytes("del"), cst_ins=caml_string_of_jsbytes("ins"), cst_hr=caml_string_of_jsbytes("hr"), cst_br=caml_string_of_jsbytes("br"), cst_pre=caml_string_of_jsbytes("pre"), cst_blockquote=caml_string_of_jsbytes("blockquote"), cst_q=caml_string_of_jsbytes("q"), cst_h6=caml_string_of_jsbytes("h6"), cst_h5=caml_string_of_jsbytes("h5"), cst_h4=caml_string_of_jsbytes("h4"), cst_h3=caml_string_of_jsbytes("h3"), cst_h2=caml_string_of_jsbytes("h2"), cst_h1=caml_string_of_jsbytes("h1"), cst_p=caml_string_of_jsbytes("p"), cst_embed=caml_string_of_jsbytes("embed"), cst_div=caml_string_of_jsbytes("div"), cst_li=caml_string_of_jsbytes("li"), cst_dl=caml_string_of_jsbytes("dl"), cst_ol=caml_string_of_jsbytes("ol"), cst_ul=caml_string_of_jsbytes("ul"), cst_legend=caml_string_of_jsbytes("legend"), cst_fieldset=caml_string_of_jsbytes("fieldset"), cst_label=caml_string_of_jsbytes("label"), cst_button=caml_string_of_jsbytes("button"), cst_textarea=caml_string_of_jsbytes("textarea"), cst_input$0=caml_string_of_jsbytes("input"), cst_select$0=caml_string_of_jsbytes("select"), cst_option=caml_string_of_jsbytes("option"), cst_optgroup=caml_string_of_jsbytes("optgroup"), cst_form=caml_string_of_jsbytes("form"), cst_body=caml_string_of_jsbytes("body"), cst_style=caml_string_of_jsbytes("style"), cst_base=caml_string_of_jsbytes("base"), cst_meta=caml_string_of_jsbytes("meta"), cst_title=caml_string_of_jsbytes("title"), cst_link=caml_string_of_jsbytes("link"), cst_head=caml_string_of_jsbytes("head"), cst_html=caml_string_of_jsbytes("html"), cst_click=caml_string_of_jsbytes("click"), cst_copy=caml_string_of_jsbytes("copy"), cst_cut=caml_string_of_jsbytes("cut"), cst_paste=caml_string_of_jsbytes("paste"), cst_dblclick=caml_string_of_jsbytes("dblclick"), cst_mousedown=caml_string_of_jsbytes("mousedown"), cst_mouseup=caml_string_of_jsbytes("mouseup"), cst_mouseover=caml_string_of_jsbytes("mouseover"), cst_mousemove=caml_string_of_jsbytes("mousemove"), cst_mouseout=caml_string_of_jsbytes("mouseout"), cst_keypress=caml_string_of_jsbytes("keypress"), cst_keydown=caml_string_of_jsbytes("keydown"), cst_keyup=caml_string_of_jsbytes("keyup"), cst_mousewheel=caml_string_of_jsbytes("mousewheel"), cst_DOMMouseScroll=caml_string_of_jsbytes("DOMMouseScroll"), cst_touchstart=caml_string_of_jsbytes("touchstart"), cst_touchmove=caml_string_of_jsbytes("touchmove"), cst_touchend=caml_string_of_jsbytes("touchend"), cst_touchcancel=caml_string_of_jsbytes("touchcancel"), cst_dragstart=caml_string_of_jsbytes("dragstart"), cst_dragend=caml_string_of_jsbytes("dragend"), cst_dragenter=caml_string_of_jsbytes("dragenter"), cst_dragover=caml_string_of_jsbytes("dragover"), cst_dragleave=caml_string_of_jsbytes("dragleave"), cst_drag=caml_string_of_jsbytes("drag"), cst_drop=caml_string_of_jsbytes("drop"), cst_hashchange=caml_string_of_jsbytes("hashchange"), cst_change=caml_string_of_jsbytes("change"), cst_input=caml_string_of_jsbytes("input"), cst_timeupdate=caml_string_of_jsbytes("timeupdate"), cst_submit=caml_string_of_jsbytes("submit"), cst_scroll=caml_string_of_jsbytes("scroll"), cst_focus=caml_string_of_jsbytes("focus"), cst_blur=caml_string_of_jsbytes("blur"), cst_load$0=caml_string_of_jsbytes("load"), cst_unload=caml_string_of_jsbytes("unload"), cst_beforeunload=caml_string_of_jsbytes("beforeunload"), cst_resize=caml_string_of_jsbytes("resize"), cst_orientationchange=caml_string_of_jsbytes("orientationchange"), cst_popstate=caml_string_of_jsbytes("popstate"), cst_error$0=caml_string_of_jsbytes("error"), cst_abort$0=caml_string_of_jsbytes("abort"), cst_select=caml_string_of_jsbytes("select"), cst_online=caml_string_of_jsbytes("online"), cst_offline=caml_string_of_jsbytes("offline"), cst_checking=caml_string_of_jsbytes("checking"), cst_noupdate=caml_string_of_jsbytes("noupdate"), cst_downloading=caml_string_of_jsbytes("downloading"), cst_progress$0=caml_string_of_jsbytes("progress"), cst_updateready=caml_string_of_jsbytes("updateready"), cst_cached=caml_string_of_jsbytes("cached"), cst_obsolete=caml_string_of_jsbytes("obsolete"), cst_DOMContentLoaded=caml_string_of_jsbytes("DOMContentLoaded"), cst_animationstart=caml_string_of_jsbytes("animationstart"), cst_animationend=caml_string_of_jsbytes("animationend"), cst_animationiteration=caml_string_of_jsbytes("animationiteration"), cst_animationcancel=caml_string_of_jsbytes("animationcancel"), cst_canplay=caml_string_of_jsbytes("canplay"), cst_canplaythrough=caml_string_of_jsbytes("canplaythrough"), cst_durationchange=caml_string_of_jsbytes("durationchange"), cst_emptied=caml_string_of_jsbytes("emptied"), cst_ended=caml_string_of_jsbytes("ended"), cst_gotpointercapture=caml_string_of_jsbytes("gotpointercapture"), cst_loadeddata=caml_string_of_jsbytes("loadeddata"), cst_loadedmetadata=caml_string_of_jsbytes("loadedmetadata"), cst_loadstart$0=caml_string_of_jsbytes("loadstart"), cst_lostpointercapture=caml_string_of_jsbytes("lostpointercapture"), cst_message=caml_string_of_jsbytes("message"), cst_pause=caml_string_of_jsbytes("pause"), cst_play=caml_string_of_jsbytes("play"), cst_playing=caml_string_of_jsbytes("playing"), cst_pointerenter=caml_string_of_jsbytes("pointerenter"), cst_pointercancel=caml_string_of_jsbytes("pointercancel"), cst_pointerdown=caml_string_of_jsbytes("pointerdown"), cst_pointerleave=caml_string_of_jsbytes("pointerleave"), cst_pointermove=caml_string_of_jsbytes("pointermove"), cst_pointerout=caml_string_of_jsbytes("pointerout"), cst_pointerover=caml_string_of_jsbytes("pointerover"), cst_pointerup=caml_string_of_jsbytes("pointerup"), cst_ratechange=caml_string_of_jsbytes("ratechange"), cst_seeked=caml_string_of_jsbytes("seeked"), cst_seeking=caml_string_of_jsbytes("seeking"), cst_stalled=caml_string_of_jsbytes("stalled"), cst_suspend=caml_string_of_jsbytes("suspend"), cst_volumechange=caml_string_of_jsbytes("volumechange"), cst_waiting=caml_string_of_jsbytes("waiting"), cst_Js_of_ocaml_Dom_html_Canva= caml_string_of_jsbytes("Js_of_ocaml__Dom_html.Canvas_not_available"), cst_checkbox=caml_string_of_jsbytes("checkbox"), cst_file=caml_string_of_jsbytes("file"), cst_password=caml_string_of_jsbytes("password"), cst_radio=caml_string_of_jsbytes("radio"), cst_reset=caml_string_of_jsbytes("reset"), cst_submit$0=caml_string_of_jsbytes("submit"), cst_text=caml_string_of_jsbytes("text"), cst_readystatechange=caml_string_of_jsbytes("readystatechange"), cst_loadstart$1=caml_string_of_jsbytes("loadstart"), cst_progress$1=caml_string_of_jsbytes("progress"), cst_abort$1=caml_string_of_jsbytes("abort"), cst_error$1=caml_string_of_jsbytes("error"), cst_load$1=caml_string_of_jsbytes("load"), cst_timeout=caml_string_of_jsbytes("timeout"), cst_loadend$0=caml_string_of_jsbytes("loadend"), cst_Worker_onmessage_is_undefi$0= caml_string_of_jsbytes("Worker.onmessage is undefined"), cst_Worker_onmessage_is_undefi= caml_string_of_jsbytes("Worker.onmessage is undefined"), cst_Worker_import_scripts_is_u= caml_string_of_jsbytes("Worker.import_scripts is undefined"), cst_webglcontextlost=caml_string_of_jsbytes("webglcontextlost"), cst_webglcontextrestored=caml_string_of_jsbytes("webglcontextrestored"), cst_webglcontextcreationerror= caml_string_of_jsbytes("webglcontextcreationerror"), cst_g=caml_string_of_jsbytes("g"), cst=caml_string_of_jsbytes("[\\][()\\\\|+*.?{}^$]"), cst$37=caml_string_of_jsbytes(""), cst$13=caml_string_of_jsbytes(""), cst$21=caml_string_of_jsbytes(""), cst$14=caml_string_of_jsbytes("#"), cst$15=caml_string_of_jsbytes("?"), cst$20=caml_string_of_jsbytes(""), cst$16=caml_string_of_jsbytes("/"), cst$17=caml_string_of_jsbytes("/"), cst$19=caml_string_of_jsbytes(":"), cst$18=caml_string_of_jsbytes(""), cst_http$1=caml_string_of_jsbytes("http://"), cst$22=caml_string_of_jsbytes(""), cst$30=caml_string_of_jsbytes(""), cst$23=caml_string_of_jsbytes("#"), cst$24=caml_string_of_jsbytes("?"), cst$29=caml_string_of_jsbytes(""), cst$25=caml_string_of_jsbytes("/"), cst$26=caml_string_of_jsbytes("/"), cst$28=caml_string_of_jsbytes(":"), cst$27=caml_string_of_jsbytes(""), cst_https$1=caml_string_of_jsbytes("https://"), cst$31=caml_string_of_jsbytes(""), cst$36=caml_string_of_jsbytes(""), cst$32=caml_string_of_jsbytes("#"), cst$33=caml_string_of_jsbytes("?"), cst$35=caml_string_of_jsbytes(""), cst$34=caml_string_of_jsbytes("/"), cst_file$2=caml_string_of_jsbytes("file://"), cst$12=caml_string_of_jsbytes(""), cst$11=caml_string_of_jsbytes(""), cst$10=caml_string_of_jsbytes(""), cst$9=caml_string_of_jsbytes(""), cst$8=caml_string_of_jsbytes(""), cst$7=caml_string_of_jsbytes(""), cst$6=caml_string_of_jsbytes(""), cst$4=caml_string_of_jsbytes("="), cst$5=caml_string_of_jsbytes("&"), cst$2=caml_string_of_jsbytes(""), cst$3=caml_string_of_jsbytes(""), cst_file$0=caml_string_of_jsbytes("file"), cst_file$1=caml_string_of_jsbytes("file:"), cst_http=caml_string_of_jsbytes("http"), cst_http$0=caml_string_of_jsbytes("http:"), cst_https=caml_string_of_jsbytes("https"), cst_https$0=caml_string_of_jsbytes("https:"), cst$1=caml_string_of_jsbytes(" "), cst_2B=caml_string_of_jsbytes("%2B"), cst_Js_of_ocaml_Url_Local_exn= caml_string_of_jsbytes("Js_of_ocaml__Url.Local_exn"), cst$0=caml_string_of_jsbytes("+"), cst_Js_of_ocaml_Url_Not_an_htt= caml_string_of_jsbytes("Js_of_ocaml__Url.Not_an_http_protocol"), cst_Hh_Tt_Tt_Pp_Ss_0_9a_zA_Z_0= caml_string_of_jsbytes ("^([Hh][Tt][Tt][Pp][Ss]?)://([0-9a-zA-Z.-]+|\\[[0-9a-zA-Z.-]+\\]|\\[[0-9A-Fa-f:.]+\\])?(:([0-9]+))?(/([^\\?#]*)(\\?([^#]*))?(#(.*))?)?$"), cst_Ff_Ii_Ll_Ee= caml_string_of_jsbytes ("^([Ff][Ii][Ll][Ee])://([^\\?#]*)(\\?([^#]*))?(#(.*))?$"), s=caml_string_of_jsbytes("4.0.0"), git_version=caml_string_of_jsbytes(""), cst$38=caml_string_of_jsbytes(""), cst$41=caml_string_of_jsbytes("+"), cst_Jstable_keys=caml_string_of_jsbytes("Jstable.keys"), t5=runtime.caml_int64_create_lo_mi_hi(1,0,0), cst_is_not_a_valid_length$0= caml_string_of_jsbytes(" is not a valid length"), cst_d_d_deg_grad_rad_turns= caml_string_of_jsbytes("^(\\d*(?:\\.\\d*))(deg|grad|rad|turns)$"), cst_length_conversion_error$0= caml_string_of_jsbytes("length conversion error: "), cst_deg$0=caml_string_of_jsbytes("deg"), cst_grad$0=caml_string_of_jsbytes("grad"), cst_rad$0=caml_string_of_jsbytes("rad"), cst_turns$0=caml_string_of_jsbytes("turns"), cst_deg=caml_string_of_jsbytes("deg"), cst_grad=caml_string_of_jsbytes("grad"), cst_rad=caml_string_of_jsbytes("rad"), cst_turns=caml_string_of_jsbytes("turns"), cst_is_not_a_valid_length= caml_string_of_jsbytes(" is not a valid length"), cst_0$0=caml_string_of_jsbytes("0"), cst_d_d_s_S=caml_string_of_jsbytes("^(\\d*(?:\\.\\d*)?)\\s*(\\S*)$"), cst_length_conversion_error= caml_string_of_jsbytes("length conversion error: "), cst_pc$0=caml_string_of_jsbytes("pc"), cst_ch$0=caml_string_of_jsbytes("ch"), cst_cm$0=caml_string_of_jsbytes("cm"), cst_em$1=caml_string_of_jsbytes("em"), cst_ex$0=caml_string_of_jsbytes("ex"), cst_gd$0=caml_string_of_jsbytes("gd"), cst_in$0=caml_string_of_jsbytes("in"), cst_mm$0=caml_string_of_jsbytes("mm"), cst_pt$0=caml_string_of_jsbytes("pt"), cst_px$0=caml_string_of_jsbytes("px"), cst_rem$0=caml_string_of_jsbytes("rem"), cst_vh$0=caml_string_of_jsbytes("vh"), cst_vm$0=caml_string_of_jsbytes("vm"), cst_vw$0=caml_string_of_jsbytes("vw"), cst_0=caml_string_of_jsbytes("0"), cst_em$0=caml_string_of_jsbytes("em"), cst_ex=caml_string_of_jsbytes("ex"), cst_px=caml_string_of_jsbytes("px"), cst_gd=caml_string_of_jsbytes("gd"), cst_rem=caml_string_of_jsbytes("rem"), cst_vw=caml_string_of_jsbytes("vw"), cst_vh=caml_string_of_jsbytes("vh"), cst_vm=caml_string_of_jsbytes("vm"), cst_ch=caml_string_of_jsbytes("ch"), cst_mm=caml_string_of_jsbytes("mm"), cst_cm=caml_string_of_jsbytes("cm"), cst_in=caml_string_of_jsbytes("in"), cst_pt=caml_string_of_jsbytes("pt"), cst_pc=caml_string_of_jsbytes("pc"), cst$40=caml_string_of_jsbytes("): "), cst_color_conversion_error$0= caml_string_of_jsbytes("color conversion error ("), cst$39=caml_string_of_jsbytes("): "), cst_color_conversion_error= caml_string_of_jsbytes("color conversion error ("), cst_is_not_a_valid_color$0= caml_string_of_jsbytes(" is not a valid color"), cst_rgba_d_d_d_d_d= caml_string_of_jsbytes ("(rgba?)\\((?:(\\d*),(\\d*),(\\d*)(?:,(\\d*(?:\\.\\d*)?))?)\\)"), cst_rgba_d_d_d_d_d$0= caml_string_of_jsbytes ("(rgba?)\\((?:(\\d*)%,(\\d*)%,(\\d*)%(?:,(\\d*(?:\\.\\d*)?))?)\\)"), cst_hsla_d_d_d_d_d= caml_string_of_jsbytes ("(hsla?)\\((?:(\\d*),(\\d*)%,(\\d*)%(?:,(\\d*(?:\\.\\d*)?))?)\\)"), cst_rgb=caml_string_of_jsbytes("rgb"), cst_rgba=caml_string_of_jsbytes("rgba"), cst_rgb$0=caml_string_of_jsbytes("rgb"), cst_rgba$0=caml_string_of_jsbytes("rgba"), cst_hsl=caml_string_of_jsbytes("hsl"), cst_hsla=caml_string_of_jsbytes("hsla"), cst_rgb_s_d_s_d_s_d= caml_string_of_jsbytes("^rgb\\(\\s*\\d*,\\s*\\d*,\\s*\\d*\\)$"), cst_rgb_s_d_s_d_s_d$0= caml_string_of_jsbytes("^rgb\\(\\s*\\d*%,\\s*\\d*%,\\s*\\d*%\\)$"), cst_rgba_s_d_s_d_s_d_d_d= caml_string_of_jsbytes ("^rgba\\(\\s*\\d*,\\s*\\d*,\\s*\\d*,\\d*\\.?\\d*\\)$"), cst_rgba_s_d_s_d_s_d_d_d$0= caml_string_of_jsbytes ("^rgba\\(\\s*\\d*%,\\s*\\d*%,\\s*\\d*%,\\d*\\.?\\d*\\)$"), cst_hsl_s_d_s_d_s_d= caml_string_of_jsbytes("^hsl\\(\\s*\\d*,\\s*\\d*%,\\s*\\d*%\\)$"), cst_hsla_s_d_s_d_s_d_d_d= caml_string_of_jsbytes ("^hsla\\(\\s*\\d*,\\s*\\d*%,\\s*\\d*%,\\d*\\.?\\d*\\)$"), cst_is_not_a_valid_color=caml_string_of_jsbytes(" is not a valid color"), cst_is_out_of_valid_range= caml_string_of_jsbytes(" is out of valid range"), partial=[8,[0,0,0],0,0,[12,41,0]], partial$0=[12,41,0], partial$1=[0,0,0], cst_lightgrey$0=caml_string_of_jsbytes("lightgrey"), cst_darkslategray$0=caml_string_of_jsbytes("darkslategray"), cst_cornsilk$0=caml_string_of_jsbytes("cornsilk"), cst_blue$0=caml_string_of_jsbytes("blue"), cst_aliceblue$0=caml_string_of_jsbytes("aliceblue"), cst_antiquewhite$0=caml_string_of_jsbytes("antiquewhite"), cst_aqua$0=caml_string_of_jsbytes("aqua"), cst_aquamarine$0=caml_string_of_jsbytes("aquamarine"), cst_azure$0=caml_string_of_jsbytes("azure"), cst_beige$0=caml_string_of_jsbytes("beige"), cst_bisque$0=caml_string_of_jsbytes("bisque"), cst_black$0=caml_string_of_jsbytes("black"), cst_blanchedalmond$0=caml_string_of_jsbytes("blanchedalmond"), cst_blueviolet$0=caml_string_of_jsbytes("blueviolet"), cst_brown$0=caml_string_of_jsbytes("brown"), cst_burlywood$0=caml_string_of_jsbytes("burlywood"), cst_cadetblue$0=caml_string_of_jsbytes("cadetblue"), cst_chartreuse$0=caml_string_of_jsbytes("chartreuse"), cst_chocolate$0=caml_string_of_jsbytes("chocolate"), cst_coral$0=caml_string_of_jsbytes("coral"), cst_cornflowerblue$0=caml_string_of_jsbytes("cornflowerblue"), cst_darkkhaki$0=caml_string_of_jsbytes("darkkhaki"), cst_crimson$0=caml_string_of_jsbytes("crimson"), cst_cyan$0=caml_string_of_jsbytes("cyan"), cst_darkblue$0=caml_string_of_jsbytes("darkblue"), cst_darkcyan$0=caml_string_of_jsbytes("darkcyan"), cst_darkgoldenrod$0=caml_string_of_jsbytes("darkgoldenrod"), cst_darkgray$0=caml_string_of_jsbytes("darkgray"), cst_darkgreen$0=caml_string_of_jsbytes("darkgreen"), cst_darkgrey$0=caml_string_of_jsbytes("darkgrey"), cst_darkmagenta$0=caml_string_of_jsbytes("darkmagenta"), cst_darkolivegreen$0=caml_string_of_jsbytes("darkolivegreen"), cst_darkorange$0=caml_string_of_jsbytes("darkorange"), cst_darkorchid$0=caml_string_of_jsbytes("darkorchid"), cst_darkred$0=caml_string_of_jsbytes("darkred"), cst_darksalmon$0=caml_string_of_jsbytes("darksalmon"), cst_darkseagreen$0=caml_string_of_jsbytes("darkseagreen"), cst_darkslateblue$0=caml_string_of_jsbytes("darkslateblue"), cst_greenyellow$0=caml_string_of_jsbytes("greenyellow"), cst_floralwhite$0=caml_string_of_jsbytes("floralwhite"), cst_darkslategrey$0=caml_string_of_jsbytes("darkslategrey"), cst_darkturquoise$0=caml_string_of_jsbytes("darkturquoise"), cst_darkviolet$0=caml_string_of_jsbytes("darkviolet"), cst_deeppink$0=caml_string_of_jsbytes("deeppink"), cst_deepskyblue$0=caml_string_of_jsbytes("deepskyblue"), cst_dimgray$0=caml_string_of_jsbytes("dimgray"), cst_dimgrey$0=caml_string_of_jsbytes("dimgrey"), cst_dodgerblue$0=caml_string_of_jsbytes("dodgerblue"), cst_firebrick$0=caml_string_of_jsbytes("firebrick"), cst_forestgreen$0=caml_string_of_jsbytes("forestgreen"), cst_fuchsia$0=caml_string_of_jsbytes("fuchsia"), cst_gainsboro$0=caml_string_of_jsbytes("gainsboro"), cst_ghostwhite$0=caml_string_of_jsbytes("ghostwhite"), cst_gold$0=caml_string_of_jsbytes("gold"), cst_goldenrod$0=caml_string_of_jsbytes("goldenrod"), cst_gray$0=caml_string_of_jsbytes("gray"), cst_green$0=caml_string_of_jsbytes("green"), cst_lavenderblush$0=caml_string_of_jsbytes("lavenderblush"), cst_grey$0=caml_string_of_jsbytes("grey"), cst_honeydew$0=caml_string_of_jsbytes("honeydew"), cst_hotpink$0=caml_string_of_jsbytes("hotpink"), cst_indianred$0=caml_string_of_jsbytes("indianred"), cst_indigo$0=caml_string_of_jsbytes("indigo"), cst_ivory$0=caml_string_of_jsbytes("ivory"), cst_khaki$0=caml_string_of_jsbytes("khaki"), cst_lavender$0=caml_string_of_jsbytes("lavender"), cst_lawngreen$0=caml_string_of_jsbytes("lawngreen"), cst_lemonchiffon$0=caml_string_of_jsbytes("lemonchiffon"), cst_lightblue$0=caml_string_of_jsbytes("lightblue"), cst_lightcoral$0=caml_string_of_jsbytes("lightcoral"), cst_lightcyan$0=caml_string_of_jsbytes("lightcyan"), cst_lightgoldenrodyellow$0=caml_string_of_jsbytes("lightgoldenrodyellow"), cst_lightgray$0=caml_string_of_jsbytes("lightgray"), cst_lightgreen$0=caml_string_of_jsbytes("lightgreen"), cst_paleturquoise$0=caml_string_of_jsbytes("paleturquoise"), cst_mediumslateblue$0=caml_string_of_jsbytes("mediumslateblue"), cst_limegreen$0=caml_string_of_jsbytes("limegreen"), cst_lightpink$0=caml_string_of_jsbytes("lightpink"), cst_lightsalmon$0=caml_string_of_jsbytes("lightsalmon"), cst_lightseagreen$0=caml_string_of_jsbytes("lightseagreen"), cst_lightskyblue$0=caml_string_of_jsbytes("lightskyblue"), cst_lightslategray$0=caml_string_of_jsbytes("lightslategray"), cst_lightslategrey$0=caml_string_of_jsbytes("lightslategrey"), cst_lightsteelblue$0=caml_string_of_jsbytes("lightsteelblue"), cst_lightyellow$0=caml_string_of_jsbytes("lightyellow"), cst_lime$0=caml_string_of_jsbytes("lime"), cst_linen$0=caml_string_of_jsbytes("linen"), cst_magenta$0=caml_string_of_jsbytes("magenta"), cst_maroon$0=caml_string_of_jsbytes("maroon"), cst_mediumaquamarine$0=caml_string_of_jsbytes("mediumaquamarine"), cst_mediumblue$0=caml_string_of_jsbytes("mediumblue"), cst_mediumorchid$0=caml_string_of_jsbytes("mediumorchid"), cst_mediumpurple$0=caml_string_of_jsbytes("mediumpurple"), cst_mediumseagreen$0=caml_string_of_jsbytes("mediumseagreen"), cst_navy$0=caml_string_of_jsbytes("navy"), cst_mediumspringgreen$0=caml_string_of_jsbytes("mediumspringgreen"), cst_mediumturquoise$0=caml_string_of_jsbytes("mediumturquoise"), cst_mediumvioletred$0=caml_string_of_jsbytes("mediumvioletred"), cst_midnightblue$0=caml_string_of_jsbytes("midnightblue"), cst_mintcream$0=caml_string_of_jsbytes("mintcream"), cst_mistyrose$0=caml_string_of_jsbytes("mistyrose"), cst_moccasin$0=caml_string_of_jsbytes("moccasin"), cst_navajowhite$0=caml_string_of_jsbytes("navajowhite"), cst_oldlace$0=caml_string_of_jsbytes("oldlace"), cst_olive$0=caml_string_of_jsbytes("olive"), cst_olivedrab$0=caml_string_of_jsbytes("olivedrab"), cst_orange$0=caml_string_of_jsbytes("orange"), cst_orangered$0=caml_string_of_jsbytes("orangered"), cst_orchid$0=caml_string_of_jsbytes("orchid"), cst_palegoldenrod$0=caml_string_of_jsbytes("palegoldenrod"), cst_palegreen$0=caml_string_of_jsbytes("palegreen"), cst_skyblue$0=caml_string_of_jsbytes("skyblue"), cst_rosybrown$0=caml_string_of_jsbytes("rosybrown"), cst_palevioletred$0=caml_string_of_jsbytes("palevioletred"), cst_papayawhip$0=caml_string_of_jsbytes("papayawhip"), cst_peachpuff$0=caml_string_of_jsbytes("peachpuff"), cst_peru$0=caml_string_of_jsbytes("peru"), cst_pink$0=caml_string_of_jsbytes("pink"), cst_plum$0=caml_string_of_jsbytes("plum"), cst_powderblue$0=caml_string_of_jsbytes("powderblue"), cst_purple$0=caml_string_of_jsbytes("purple"), cst_red$0=caml_string_of_jsbytes("red"), cst_royalblue$0=caml_string_of_jsbytes("royalblue"), cst_saddlebrown$0=caml_string_of_jsbytes("saddlebrown"), cst_salmon$0=caml_string_of_jsbytes("salmon"), cst_sandybrown$0=caml_string_of_jsbytes("sandybrown"), cst_seagreen$0=caml_string_of_jsbytes("seagreen"), cst_seashell$0=caml_string_of_jsbytes("seashell"), cst_sienna$0=caml_string_of_jsbytes("sienna"), cst_silver$0=caml_string_of_jsbytes("silver"), cst_thistle$0=caml_string_of_jsbytes("thistle"), cst_slateblue$0=caml_string_of_jsbytes("slateblue"), cst_slategray$0=caml_string_of_jsbytes("slategray"), cst_slategrey$0=caml_string_of_jsbytes("slategrey"), cst_snow$0=caml_string_of_jsbytes("snow"), cst_springgreen$0=caml_string_of_jsbytes("springgreen"), cst_steelblue$0=caml_string_of_jsbytes("steelblue"), cst_tan$0=caml_string_of_jsbytes("tan"), cst_teal$0=caml_string_of_jsbytes("teal"), cst_tomato$0=caml_string_of_jsbytes("tomato"), cst_turquoise$0=caml_string_of_jsbytes("turquoise"), cst_violet$0=caml_string_of_jsbytes("violet"), cst_wheat$0=caml_string_of_jsbytes("wheat"), cst_white$0=caml_string_of_jsbytes("white"), cst_whitesmoke$0=caml_string_of_jsbytes("whitesmoke"), cst_yellow$0=caml_string_of_jsbytes("yellow"), cst_yellowgreen$0=caml_string_of_jsbytes("yellowgreen"), cst_is_not_a_valid_color_name= caml_string_of_jsbytes(" is not a valid color name"), cst_aliceblue=caml_string_of_jsbytes("aliceblue"), cst_antiquewhite=caml_string_of_jsbytes("antiquewhite"), cst_aqua=caml_string_of_jsbytes("aqua"), cst_aquamarine=caml_string_of_jsbytes("aquamarine"), cst_azure=caml_string_of_jsbytes("azure"), cst_beige=caml_string_of_jsbytes("beige"), cst_bisque=caml_string_of_jsbytes("bisque"), cst_black=caml_string_of_jsbytes("black"), cst_blanchedalmond=caml_string_of_jsbytes("blanchedalmond"), cst_blue=caml_string_of_jsbytes("blue"), cst_blueviolet=caml_string_of_jsbytes("blueviolet"), cst_brown=caml_string_of_jsbytes("brown"), cst_burlywood=caml_string_of_jsbytes("burlywood"), cst_cadetblue=caml_string_of_jsbytes("cadetblue"), cst_chartreuse=caml_string_of_jsbytes("chartreuse"), cst_chocolate=caml_string_of_jsbytes("chocolate"), cst_coral=caml_string_of_jsbytes("coral"), cst_cornflowerblue=caml_string_of_jsbytes("cornflowerblue"), cst_cornsilk=caml_string_of_jsbytes("cornsilk"), cst_crimson=caml_string_of_jsbytes("crimson"), cst_cyan=caml_string_of_jsbytes("cyan"), cst_darkblue=caml_string_of_jsbytes("darkblue"), cst_darkcyan=caml_string_of_jsbytes("darkcyan"), cst_darkgoldenrod=caml_string_of_jsbytes("darkgoldenrod"), cst_darkgray=caml_string_of_jsbytes("darkgray"), cst_darkgreen=caml_string_of_jsbytes("darkgreen"), cst_darkgrey=caml_string_of_jsbytes("darkgrey"), cst_darkkhaki=caml_string_of_jsbytes("darkkhaki"), cst_darkmagenta=caml_string_of_jsbytes("darkmagenta"), cst_darkolivegreen=caml_string_of_jsbytes("darkolivegreen"), cst_darkorange=caml_string_of_jsbytes("darkorange"), cst_darkorchid=caml_string_of_jsbytes("darkorchid"), cst_darkred=caml_string_of_jsbytes("darkred"), cst_darksalmon=caml_string_of_jsbytes("darksalmon"), cst_darkseagreen=caml_string_of_jsbytes("darkseagreen"), cst_darkslateblue=caml_string_of_jsbytes("darkslateblue"), cst_darkslategray=caml_string_of_jsbytes("darkslategray"), cst_darkslategrey=caml_string_of_jsbytes("darkslategrey"), cst_darkturquoise=caml_string_of_jsbytes("darkturquoise"), cst_darkviolet=caml_string_of_jsbytes("darkviolet"), cst_deeppink=caml_string_of_jsbytes("deeppink"), cst_deepskyblue=caml_string_of_jsbytes("deepskyblue"), cst_dimgray=caml_string_of_jsbytes("dimgray"), cst_dimgrey=caml_string_of_jsbytes("dimgrey"), cst_dodgerblue=caml_string_of_jsbytes("dodgerblue"), cst_firebrick=caml_string_of_jsbytes("firebrick"), cst_floralwhite=caml_string_of_jsbytes("floralwhite"), cst_forestgreen=caml_string_of_jsbytes("forestgreen"), cst_fuchsia=caml_string_of_jsbytes("fuchsia"), cst_gainsboro=caml_string_of_jsbytes("gainsboro"), cst_ghostwhite=caml_string_of_jsbytes("ghostwhite"), cst_gold=caml_string_of_jsbytes("gold"), cst_goldenrod=caml_string_of_jsbytes("goldenrod"), cst_gray=caml_string_of_jsbytes("gray"), cst_grey=caml_string_of_jsbytes("grey"), cst_green=caml_string_of_jsbytes("green"), cst_greenyellow=caml_string_of_jsbytes("greenyellow"), cst_honeydew=caml_string_of_jsbytes("honeydew"), cst_hotpink=caml_string_of_jsbytes("hotpink"), cst_indianred=caml_string_of_jsbytes("indianred"), cst_indigo=caml_string_of_jsbytes("indigo"), cst_ivory=caml_string_of_jsbytes("ivory"), cst_khaki=caml_string_of_jsbytes("khaki"), cst_lavender=caml_string_of_jsbytes("lavender"), cst_lavenderblush=caml_string_of_jsbytes("lavenderblush"), cst_lawngreen=caml_string_of_jsbytes("lawngreen"), cst_lemonchiffon=caml_string_of_jsbytes("lemonchiffon"), cst_lightblue=caml_string_of_jsbytes("lightblue"), cst_lightcoral=caml_string_of_jsbytes("lightcoral"), cst_lightcyan=caml_string_of_jsbytes("lightcyan"), cst_lightgoldenrodyellow=caml_string_of_jsbytes("lightgoldenrodyellow"), cst_lightgray=caml_string_of_jsbytes("lightgray"), cst_lightgreen=caml_string_of_jsbytes("lightgreen"), cst_lightgrey=caml_string_of_jsbytes("lightgrey"), cst_lightpink=caml_string_of_jsbytes("lightpink"), cst_lightsalmon=caml_string_of_jsbytes("lightsalmon"), cst_lightseagreen=caml_string_of_jsbytes("lightseagreen"), cst_lightskyblue=caml_string_of_jsbytes("lightskyblue"), cst_lightslategray=caml_string_of_jsbytes("lightslategray"), cst_lightslategrey=caml_string_of_jsbytes("lightslategrey"), cst_lightsteelblue=caml_string_of_jsbytes("lightsteelblue"), cst_lightyellow=caml_string_of_jsbytes("lightyellow"), cst_lime=caml_string_of_jsbytes("lime"), cst_limegreen=caml_string_of_jsbytes("limegreen"), cst_linen=caml_string_of_jsbytes("linen"), cst_magenta=caml_string_of_jsbytes("magenta"), cst_maroon=caml_string_of_jsbytes("maroon"), cst_mediumaquamarine=caml_string_of_jsbytes("mediumaquamarine"), cst_mediumblue=caml_string_of_jsbytes("mediumblue"), cst_mediumorchid=caml_string_of_jsbytes("mediumorchid"), cst_mediumpurple=caml_string_of_jsbytes("mediumpurple"), cst_mediumseagreen=caml_string_of_jsbytes("mediumseagreen"), cst_mediumslateblue=caml_string_of_jsbytes("mediumslateblue"), cst_mediumspringgreen=caml_string_of_jsbytes("mediumspringgreen"), cst_mediumturquoise=caml_string_of_jsbytes("mediumturquoise"), cst_mediumvioletred=caml_string_of_jsbytes("mediumvioletred"), cst_midnightblue=caml_string_of_jsbytes("midnightblue"), cst_mintcream=caml_string_of_jsbytes("mintcream"), cst_mistyrose=caml_string_of_jsbytes("mistyrose"), cst_moccasin=caml_string_of_jsbytes("moccasin"), cst_navajowhite=caml_string_of_jsbytes("navajowhite"), cst_navy=caml_string_of_jsbytes("navy"), cst_oldlace=caml_string_of_jsbytes("oldlace"), cst_olive=caml_string_of_jsbytes("olive"), cst_olivedrab=caml_string_of_jsbytes("olivedrab"), cst_orange=caml_string_of_jsbytes("orange"), cst_orangered=caml_string_of_jsbytes("orangered"), cst_orchid=caml_string_of_jsbytes("orchid"), cst_palegoldenrod=caml_string_of_jsbytes("palegoldenrod"), cst_palegreen=caml_string_of_jsbytes("palegreen"), cst_paleturquoise=caml_string_of_jsbytes("paleturquoise"), cst_palevioletred=caml_string_of_jsbytes("palevioletred"), cst_papayawhip=caml_string_of_jsbytes("papayawhip"), cst_peachpuff=caml_string_of_jsbytes("peachpuff"), cst_peru=caml_string_of_jsbytes("peru"), cst_pink=caml_string_of_jsbytes("pink"), cst_plum=caml_string_of_jsbytes("plum"), cst_powderblue=caml_string_of_jsbytes("powderblue"), cst_purple=caml_string_of_jsbytes("purple"), cst_red=caml_string_of_jsbytes("red"), cst_rosybrown=caml_string_of_jsbytes("rosybrown"), cst_royalblue=caml_string_of_jsbytes("royalblue"), cst_saddlebrown=caml_string_of_jsbytes("saddlebrown"), cst_salmon=caml_string_of_jsbytes("salmon"), cst_sandybrown=caml_string_of_jsbytes("sandybrown"), cst_seagreen=caml_string_of_jsbytes("seagreen"), cst_seashell=caml_string_of_jsbytes("seashell"), cst_sienna=caml_string_of_jsbytes("sienna"), cst_silver=caml_string_of_jsbytes("silver"), cst_skyblue=caml_string_of_jsbytes("skyblue"), cst_slateblue=caml_string_of_jsbytes("slateblue"), cst_slategray=caml_string_of_jsbytes("slategray"), cst_slategrey=caml_string_of_jsbytes("slategrey"), cst_snow=caml_string_of_jsbytes("snow"), cst_springgreen=caml_string_of_jsbytes("springgreen"), cst_steelblue=caml_string_of_jsbytes("steelblue"), cst_tan=caml_string_of_jsbytes("tan"), cst_teal=caml_string_of_jsbytes("teal"), cst_thistle=caml_string_of_jsbytes("thistle"), cst_tomato=caml_string_of_jsbytes("tomato"), cst_turquoise=caml_string_of_jsbytes("turquoise"), cst_violet=caml_string_of_jsbytes("violet"), cst_wheat=caml_string_of_jsbytes("wheat"), cst_white=caml_string_of_jsbytes("white"), cst_whitesmoke=caml_string_of_jsbytes("whitesmoke"), cst_yellow=caml_string_of_jsbytes("yellow"), cst_yellowgreen=caml_string_of_jsbytes("yellowgreen"), cst_vkern$0=caml_string_of_jsbytes("vkern"), cst_view$0=caml_string_of_jsbytes("view"), cst_use$0=caml_string_of_jsbytes("use"), cst_tspan$0=caml_string_of_jsbytes("tspan"), cst_tref$0=caml_string_of_jsbytes("tref"), cst_title$3=caml_string_of_jsbytes("title"), cst_textpath$0=caml_string_of_jsbytes("textpath"), cst_text$1=caml_string_of_jsbytes("text"), cst_symbol$0=caml_string_of_jsbytes("symbol"), cst_switch$0=caml_string_of_jsbytes("switch"), cst_svg$0=caml_string_of_jsbytes("svg"), cst_style$3=caml_string_of_jsbytes("style"), cst_stop$0=caml_string_of_jsbytes("stop"), cst_set$0=caml_string_of_jsbytes("set"), cst_script$3=caml_string_of_jsbytes("script"), cst_rect$0=caml_string_of_jsbytes("rect"), cst_radialgradient$0=caml_string_of_jsbytes("radialgradient"), cst_polyline$0=caml_string_of_jsbytes("polyline"), cst_polygon$0=caml_string_of_jsbytes("polygon"), cst_pattern$0=caml_string_of_jsbytes("pattern"), cst_path$0=caml_string_of_jsbytes("path"), cst_mpath$0=caml_string_of_jsbytes("mpath"), cst_missing_glyph$0=caml_string_of_jsbytes("missing-glyph"), cst_metadata$0=caml_string_of_jsbytes("metadata"), cst_mask$0=caml_string_of_jsbytes("mask"), cst_lineargradient$0=caml_string_of_jsbytes("lineargradient"), cst_line$0=caml_string_of_jsbytes("line"), cst_image$0=caml_string_of_jsbytes("image"), cst_hkern$0=caml_string_of_jsbytes("hkern"), cst_glyphref$0=caml_string_of_jsbytes("glyphref"), cst_glyph$0=caml_string_of_jsbytes("glyph"), cst_g$1=caml_string_of_jsbytes("g"), cst_foreignobject=caml_string_of_jsbytes("foreignobject"), cst_font_face_uri$0=caml_string_of_jsbytes("font-face-uri"), cst_font_face_src$0=caml_string_of_jsbytes("font-face-src"), cst_font_face_name$0=caml_string_of_jsbytes("font-face-name"), cst_font_face_format$0=caml_string_of_jsbytes("font-face-format"), cst_font_face$0=caml_string_of_jsbytes("font-face"), cst_font$0=caml_string_of_jsbytes("font"), cst_filter$0=caml_string_of_jsbytes("filter"), cst_ellipse$0=caml_string_of_jsbytes("ellipse"), cst_desc$0=caml_string_of_jsbytes("desc"), cst_defs$0=caml_string_of_jsbytes("defs"), cst_cursor$0=caml_string_of_jsbytes("cursor"), cst_clippath$0=caml_string_of_jsbytes("clippath"), cst_circle$0=caml_string_of_jsbytes("circle"), cst_animatetransform$0=caml_string_of_jsbytes("animatetransform"), cst_animatemotion$0=caml_string_of_jsbytes("animatemotion"), cst_animatecolor$0=caml_string_of_jsbytes("animatecolor"), cst_animate$0=caml_string_of_jsbytes("animate"), cst_altglyphitem$0=caml_string_of_jsbytes("altglyphitem"), cst_altglyphdef$0=caml_string_of_jsbytes("altglyphdef"), cst_altglyph$0=caml_string_of_jsbytes("altglyph"), cst_a$3=caml_string_of_jsbytes("a"), cst_vkern=caml_string_of_jsbytes("vkern"), cst_view=caml_string_of_jsbytes("view"), cst_use=caml_string_of_jsbytes("use"), cst_tspan=caml_string_of_jsbytes("tspan"), cst_tref=caml_string_of_jsbytes("tref"), cst_title$2=caml_string_of_jsbytes("title"), cst_textpath=caml_string_of_jsbytes("textpath"), cst_text$0=caml_string_of_jsbytes("text"), cst_symbol=caml_string_of_jsbytes("symbol"), cst_switch=caml_string_of_jsbytes("switch"), cst_svg=caml_string_of_jsbytes("svg"), cst_style$2=caml_string_of_jsbytes("style"), cst_stop=caml_string_of_jsbytes("stop"), cst_set=caml_string_of_jsbytes("set"), cst_script$2=caml_string_of_jsbytes("script"), cst_rect=caml_string_of_jsbytes("rect"), cst_radialgradient=caml_string_of_jsbytes("radialgradient"), cst_polyline=caml_string_of_jsbytes("polyline"), cst_polygon=caml_string_of_jsbytes("polygon"), cst_pattern=caml_string_of_jsbytes("pattern"), cst_path=caml_string_of_jsbytes("path"), cst_mpath=caml_string_of_jsbytes("mpath"), cst_missing_glyph=caml_string_of_jsbytes("missing-glyph"), cst_metadata=caml_string_of_jsbytes("metadata"), cst_mask=caml_string_of_jsbytes("mask"), cst_lineargradient=caml_string_of_jsbytes("lineargradient"), cst_line=caml_string_of_jsbytes("line"), cst_image=caml_string_of_jsbytes("image"), cst_hkern=caml_string_of_jsbytes("hkern"), cst_glyphref=caml_string_of_jsbytes("glyphref"), cst_glyph=caml_string_of_jsbytes("glyph"), cst_g$0=caml_string_of_jsbytes("g"), cst_foreignObject=caml_string_of_jsbytes("foreignObject"), cst_font_face_uri=caml_string_of_jsbytes("font-face-uri"), cst_font_face_src=caml_string_of_jsbytes("font-face-src"), cst_font_face_name=caml_string_of_jsbytes("font-face-name"), cst_font_face_format=caml_string_of_jsbytes("font-face-format"), cst_font_face=caml_string_of_jsbytes("font-face"), cst_font=caml_string_of_jsbytes("font"), cst_filter=caml_string_of_jsbytes("filter"), cst_ellipse=caml_string_of_jsbytes("ellipse"), cst_desc=caml_string_of_jsbytes("desc"), cst_defs=caml_string_of_jsbytes("defs"), cst_cursor=caml_string_of_jsbytes("cursor"), cst_clippath=caml_string_of_jsbytes("clippath"), cst_circle=caml_string_of_jsbytes("circle"), cst_animatetransform=caml_string_of_jsbytes("animatetransform"), cst_animatemotion=caml_string_of_jsbytes("animatemotion"), cst_animatecolor=caml_string_of_jsbytes("animatecolor"), cst_animate=caml_string_of_jsbytes("animate"), cst_altglyphitem=caml_string_of_jsbytes("altglyphitem"), cst_altglyphdef=caml_string_of_jsbytes("altglyphdef"), cst_altglyph=caml_string_of_jsbytes("altglyph"), cst_a$2=caml_string_of_jsbytes("a"), cst_Js_of_ocaml_Dom_svg_SVGErr= caml_string_of_jsbytes("Js_of_ocaml__Dom_svg.SVGError"), Stdlib_String=global_data.Stdlib__String, Stdlib_Char=global_data.Stdlib__Char, Stdlib=global_data.Stdlib, Jsoo_runtime=global_data.Jsoo_runtime, Stdlib_Printexc=global_data.Stdlib__Printexc, Assert_failure=global_data.Assert_failure, Stdlib_List=global_data.Stdlib__List, Stdlib_Array=global_data.Stdlib__Array, Stdlib_Uchar=global_data.Stdlib__Uchar, Stdlib_Printf=global_data.Stdlib__Printf, Stdlib_Obj=global_data.Stdlib__Obj, Js_of_ocaml=[0]; caml_register_global(1635,Js_of_ocaml,"Js_of_ocaml__"); var Poly=[0], _g_=[0,caml_string_of_jsbytes("lib/js_of_ocaml/dom.ml"),351,67], _h_=[0,caml_string_of_jsbytes("transparent")], _i_=[0,caml_string_of_jsbytes("native")], _m_=[0,caml_string_of_jsbytes("lib/js_of_ocaml/dom_html.ml"),2850,58], _l_=[0,caml_string_of_jsbytes("lib/js_of_ocaml/dom_html.ml"),2849,61], _k_= [0, [11, caml_string_of_jsbytes("getElementById_exn: "), [3,0,[11,caml_string_of_jsbytes(" not found"),0]]], caml_string_of_jsbytes("getElementById_exn: %S not found")], _o_=[0,caml_string_of_jsbytes("lib/js_of_ocaml/form.ml"),178,13], _n_=[0,1], _p_=[0,caml_string_of_jsbytes("lib/js_of_ocaml/regexp.ml"),34,64], _q_=[0,caml_string_of_jsbytes(""),0], _ck_=[0,[8,[0,0,0],0,0,[2,0,0]],caml_string_of_jsbytes("%f%s")], _cl_=[0,[8,[0,0,0],0,0,[2,0,0]],caml_string_of_jsbytes("%f%s")], _cm_=[0,[8,[0,0,0],0,0,[2,0,0]],caml_string_of_jsbytes("%f%s")], _cn_=[0,[8,[0,0,0],0,0,[2,0,0]],caml_string_of_jsbytes("%f%s")], _b8_=[0,[8,[0,0,0],0,0,[2,0,0]],caml_string_of_jsbytes("%f%s")], _b9_=[0,[8,[0,0,0],0,0,[2,0,0]],caml_string_of_jsbytes("%f%s")], _b__=[0,[8,[0,0,0],0,0,[2,0,0]],caml_string_of_jsbytes("%f%s")], _b$_=[0,[8,[0,0,0],0,0,[2,0,0]],caml_string_of_jsbytes("%f%s")], _ca_=[0,[8,[0,0,0],0,0,[2,0,0]],caml_string_of_jsbytes("%f%s")], _cb_=[0,[8,[0,0,0],0,0,[2,0,0]],caml_string_of_jsbytes("%f%s")], _cc_=[0,[8,[0,0,0],0,0,[2,0,0]],caml_string_of_jsbytes("%f%s")], _cd_=[0,[8,[0,0,0],0,0,[2,0,0]],caml_string_of_jsbytes("%f%s")], _ce_=[0,[8,[0,0,0],0,0,[2,0,0]],caml_string_of_jsbytes("%f%s")], _cf_=[0,[8,[0,0,0],0,0,[2,0,0]],caml_string_of_jsbytes("%f%s")], _cg_=[0,[8,[0,0,0],0,0,[2,0,0]],caml_string_of_jsbytes("%f%s")], _ch_=[0,[8,[0,0,0],0,0,[2,0,0]],caml_string_of_jsbytes("%f%s")], _ci_=[0,[8,[0,0,0],0,0,[2,0,0]],caml_string_of_jsbytes("%f%s")], _cj_=[0,[8,[0,0,0],0,0,[2,0,0]],caml_string_of_jsbytes("%f%s")], _b7_= caml_list_of_js_array ([caml_string_of_jsbytes("aliceblue"), caml_string_of_jsbytes("antiquewhite"), caml_string_of_jsbytes("aqua"), caml_string_of_jsbytes("aquamarine"), caml_string_of_jsbytes("azure"), caml_string_of_jsbytes("beige"), caml_string_of_jsbytes("bisque"), caml_string_of_jsbytes("black"), caml_string_of_jsbytes("blanchedalmond"), caml_string_of_jsbytes("blue"), caml_string_of_jsbytes("blueviolet"), caml_string_of_jsbytes("brown"), caml_string_of_jsbytes("burlywood"), caml_string_of_jsbytes("cadetblue"), caml_string_of_jsbytes("chartreuse"), caml_string_of_jsbytes("chocolate"), caml_string_of_jsbytes("coral"), caml_string_of_jsbytes("cornflowerblue"), caml_string_of_jsbytes("cornsilk"), caml_string_of_jsbytes("crimson"), caml_string_of_jsbytes("cyan"), caml_string_of_jsbytes("darkblue"), caml_string_of_jsbytes("darkcyan"), caml_string_of_jsbytes("darkgoldenrod"), caml_string_of_jsbytes("darkgray"), caml_string_of_jsbytes("darkgreen"), caml_string_of_jsbytes("darkgrey"), caml_string_of_jsbytes("darkkhaki"), caml_string_of_jsbytes("darkmagenta"), caml_string_of_jsbytes("darkolivegreen"), caml_string_of_jsbytes("darkorange"), caml_string_of_jsbytes("darkorchid"), caml_string_of_jsbytes("darkred"), caml_string_of_jsbytes("darksalmon"), caml_string_of_jsbytes("darkseagreen"), caml_string_of_jsbytes("darkslateblue"), caml_string_of_jsbytes("darkslategray"), caml_string_of_jsbytes("darkslategrey"), caml_string_of_jsbytes("darkturquoise"), caml_string_of_jsbytes("darkviolet"), caml_string_of_jsbytes("deeppink"), caml_string_of_jsbytes("deepskyblue"), caml_string_of_jsbytes("dimgray"), caml_string_of_jsbytes("dimgrey"), caml_string_of_jsbytes("dodgerblue"), caml_string_of_jsbytes("firebrick"), caml_string_of_jsbytes("floralwhite"), caml_string_of_jsbytes("forestgreen"), caml_string_of_jsbytes("fuchsia"), caml_string_of_jsbytes("gainsboro"), caml_string_of_jsbytes("ghostwhite"), caml_string_of_jsbytes("gold"), caml_string_of_jsbytes("goldenrod"), caml_string_of_jsbytes("gray"), caml_string_of_jsbytes("green"), caml_string_of_jsbytes("greenyellow"), caml_string_of_jsbytes("grey"), caml_string_of_jsbytes("honeydew"), caml_string_of_jsbytes("hotpink"), caml_string_of_jsbytes("indianred"), caml_string_of_jsbytes("indigo"), caml_string_of_jsbytes("ivory"), caml_string_of_jsbytes("khaki"), caml_string_of_jsbytes("lavender"), caml_string_of_jsbytes("lavenderblush"), caml_string_of_jsbytes("lawngreen"), caml_string_of_jsbytes("lemonchiffon"), caml_string_of_jsbytes("lightblue"), caml_string_of_jsbytes("lightcoral"), caml_string_of_jsbytes("lightcyan"), caml_string_of_jsbytes("lightgoldenrodyellow"), caml_string_of_jsbytes("lightgray"), caml_string_of_jsbytes("lightgreen"), caml_string_of_jsbytes("lightgrey"), caml_string_of_jsbytes("lightpink"), caml_string_of_jsbytes("lightsalmon"), caml_string_of_jsbytes("lightseagreen"), caml_string_of_jsbytes("lightskyblue"), caml_string_of_jsbytes("lightslategray"), caml_string_of_jsbytes("lightslategrey"), caml_string_of_jsbytes("lightsteelblue"), caml_string_of_jsbytes("lightyellow"), caml_string_of_jsbytes("lime"), caml_string_of_jsbytes("limegreen"), caml_string_of_jsbytes("linen"), caml_string_of_jsbytes("magenta"), caml_string_of_jsbytes("maroon"), caml_string_of_jsbytes("mediumaquamarine"), caml_string_of_jsbytes("mediumblue"), caml_string_of_jsbytes("mediumorchid"), caml_string_of_jsbytes("mediumpurple"), caml_string_of_jsbytes("mediumseagreen"), caml_string_of_jsbytes("mediumslateblue"), caml_string_of_jsbytes("mediumspringgreen"), caml_string_of_jsbytes("mediumturquoise"), caml_string_of_jsbytes("mediumvioletred"), caml_string_of_jsbytes("midnightblue"), caml_string_of_jsbytes("mintcream"), caml_string_of_jsbytes("mistyrose"), caml_string_of_jsbytes("moccasin"), caml_string_of_jsbytes("navajowhite"), caml_string_of_jsbytes("navy"), caml_string_of_jsbytes("oldlace"), caml_string_of_jsbytes("olive"), caml_string_of_jsbytes("olivedrab"), caml_string_of_jsbytes("orange"), caml_string_of_jsbytes("orangered"), caml_string_of_jsbytes("orchid"), caml_string_of_jsbytes("palegoldenrod"), caml_string_of_jsbytes("palegreen"), caml_string_of_jsbytes("paleturquoise"), caml_string_of_jsbytes("palevioletred"), caml_string_of_jsbytes("papayawhip"), caml_string_of_jsbytes("peachpuff"), caml_string_of_jsbytes("peru"), caml_string_of_jsbytes("pink"), caml_string_of_jsbytes("plum"), caml_string_of_jsbytes("powderblue"), caml_string_of_jsbytes("purple"), caml_string_of_jsbytes("red"), caml_string_of_jsbytes("rosybrown"), caml_string_of_jsbytes("royalblue"), caml_string_of_jsbytes("saddlebrown"), caml_string_of_jsbytes("salmon"), caml_string_of_jsbytes("sandybrown"), caml_string_of_jsbytes("seagreen"), caml_string_of_jsbytes("seashell"), caml_string_of_jsbytes("sienna"), caml_string_of_jsbytes("silver"), caml_string_of_jsbytes("skyblue"), caml_string_of_jsbytes("slateblue"), caml_string_of_jsbytes("slategray"), caml_string_of_jsbytes("slategrey"), caml_string_of_jsbytes("snow"), caml_string_of_jsbytes("springgreen"), caml_string_of_jsbytes("steelblue"), caml_string_of_jsbytes("tan"), caml_string_of_jsbytes("teal"), caml_string_of_jsbytes("thistle"), caml_string_of_jsbytes("tomato"), caml_string_of_jsbytes("turquoise"), caml_string_of_jsbytes("violet"), caml_string_of_jsbytes("wheat"), caml_string_of_jsbytes("white"), caml_string_of_jsbytes("whitesmoke"), caml_string_of_jsbytes("yellow"), caml_string_of_jsbytes("yellowgreen")]), _b6_= [0, [12,35,[4,8,[0,2,2],0,[4,8,[0,2,2],0,[4,8,[0,2,2],0,0]]]], caml_string_of_jsbytes("#%02X%02X%02X")], _b0_= [0, [11, caml_string_of_jsbytes("rgb("), [4,0,0,0,[12,44,[4,0,0,0,[12,44,[4,0,0,0,[12,41,0]]]]]]], caml_string_of_jsbytes("rgb(%d,%d,%d)")], _b1_= [0, [11, caml_string_of_jsbytes("rgb("), [4, 0, 0, 0, [12,37,[12,44,[4,0,0,0,[12,37,[12,44,[4,0,0,0,[12,37,[12,41,0]]]]]]]]]], caml_string_of_jsbytes("rgb(%d%%,%d%%,%d%%)")], _b2_= [0, [11, caml_string_of_jsbytes("rgba("), [4, 0, 0, 0, [12,44,[4,0,0,0,[12,44,[4,0,0,0,[12,44,[8,[0,0,0],0,0,[12,41,0]]]]]]]]], caml_string_of_jsbytes("rgba(%d,%d,%d,%f)")], _b3_= [0, [11, caml_string_of_jsbytes("rgba("), [4, 0, 0, 0, [12, 37, [12,44,[4,0,0,0,[12,37,[12,44,[4,0,0,0,[12,37,[12,44,partial]]]]]]]]]], caml_string_of_jsbytes("rgba(%d%%,%d%%,%d%%,%f)")], _b4_= [0, [11, caml_string_of_jsbytes("hsl("), [4, 0, 0, 0, [12,44,[4,0,0,0,[12,37,[12,44,[4,0,0,0,[12,37,[12,41,0]]]]]]]]], caml_string_of_jsbytes("hsl(%d,%d%%,%d%%)")], _b5_= [0, [11, caml_string_of_jsbytes("hsla("), [4, 0, 0, 0, [12, 44, [4, 0, 0, 0, [12, 37, [12,44,[4,0,0,0,[12,37,[12,44,[8,partial$1,0,0,partial$0]]]]]]]]]], caml_string_of_jsbytes("hsla(%d,%d%%,%d%%,%f)")], _x_=[0,240,248,255], _y_=[0,250,235,215], _z_=[0,0,255,255], _A_=[0,127,255,212], _B_=[0,240,255,255], _C_=[0,245,245,220], _D_=[0,255,228,196], _E_=[0,0,0,0], _F_=[0,255,235,205], _G_=[0,0,0,255], _H_=[0,138,43,226], _I_=[0,165,42,42], _J_=[0,222,184,135], _K_=[0,95,158,160], _L_=[0,127,255,0], _M_=[0,210,105,30], _N_=[0,255,127,80], _O_=[0,100,149,237], _P_=[0,255,248,220], _Q_=[0,220,20,60], _R_=[0,0,255,255], _S_=[0,0,0,139], _T_=[0,0,139,139], _U_=[0,184,134,11], _V_=[0,169,169,169], _W_=[0,0,100,0], _X_=[0,169,169,169], _Y_=[0,189,183,107], _Z_=[0,139,0,139], ___=[0,85,107,47], _$_=[0,255,140,0], _aa_=[0,153,50,204], _ab_=[0,139,0,0], _ac_=[0,233,150,122], _ad_=[0,143,188,143], _ae_=[0,72,61,139], _af_=[0,47,79,79], _ag_=[0,47,79,79], _ah_=[0,0,206,209], _ai_=[0,148,0,211], _aj_=[0,255,20,147], _ak_=[0,0,191,255], _al_=[0,105,105,105], _am_=[0,105,105,105], _an_=[0,30,144,255], _ao_=[0,178,34,34], _ap_=[0,255,250,240], _aq_=[0,34,139,34], _ar_=[0,255,0,255], _as_=[0,220,220,220], _at_=[0,248,248,255], _au_=[0,255,215,0], _av_=[0,218,165,32], _aw_=[0,128,128,128], _ax_=[0,128,128,128], _ay_=[0,0,128,0], _az_=[0,173,255,47], _aA_=[0,240,255,240], _aB_=[0,255,105,180], _aC_=[0,205,92,92], _aD_=[0,75,0,130], _aE_=[0,255,255,240], _aF_=[0,240,230,140], _aG_=[0,230,230,250], _aH_=[0,255,240,245], _aI_=[0,124,252,0], _aJ_=[0,255,250,205], _aK_=[0,173,216,230], _aL_=[0,240,128,128], _aM_=[0,224,255,255], _aN_=[0,250,250,210], _aO_=[0,211,211,211], _aP_=[0,144,238,144], _aQ_=[0,211,211,211], _aR_=[0,255,182,193], _aS_=[0,255,160,122], _aT_=[0,32,178,170], _aU_=[0,135,206,250], _aV_=[0,119,136,153], _aW_=[0,119,136,153], _aX_=[0,176,196,222], _aY_=[0,255,255,224], _aZ_=[0,0,255,0], _a0_=[0,50,205,50], _a1_=[0,250,240,230], _a2_=[0,255,0,255], _a3_=[0,128,0,0], _a4_=[0,102,205,170], _a5_=[0,0,0,205], _a6_=[0,186,85,211], _a7_=[0,147,112,219], _a8_=[0,60,179,113], _a9_=[0,123,104,238], _a__=[0,0,250,154], _a$_=[0,72,209,204], _ba_=[0,199,21,133], _bb_=[0,25,25,112], _bc_=[0,245,255,250], _bd_=[0,255,228,225], _be_=[0,255,228,181], _bf_=[0,255,222,173], _bg_=[0,0,0,128], _bh_=[0,253,245,230], _bi_=[0,128,128,0], _bj_=[0,107,142,35], _bk_=[0,255,165,0], _bl_=[0,255,69,0], _bm_=[0,218,112,214], _bn_=[0,238,232,170], _bo_=[0,152,251,152], _bp_=[0,175,238,238], _bq_=[0,219,112,147], _br_=[0,255,239,213], _bs_=[0,255,218,185], _bt_=[0,205,133,63], _bu_=[0,255,192,203], _bv_=[0,221,160,221], _bw_=[0,176,224,230], _bx_=[0,128,0,128], _by_=[0,255,0,0], _bz_=[0,188,143,143], _bA_=[0,65,105,225], _bB_=[0,139,69,19], _bC_=[0,250,128,114], _bD_=[0,244,164,96], _bE_=[0,46,139,87], _bF_=[0,255,245,238], _bG_=[0,160,82,45], _bH_=[0,192,192,192], _bI_=[0,135,206,235], _bJ_=[0,106,90,205], _bK_=[0,112,128,144], _bL_=[0,112,128,144], _bM_=[0,255,250,250], _bN_=[0,0,255,127], _bO_=[0,70,130,180], _bP_=[0,210,180,140], _bQ_=[0,0,128,128], _bR_=[0,216,191,216], _bS_=[0,255,99,71], _bT_=[0,64,224,208], _bU_=[0,238,130,238], _bV_=[0,245,222,179], _bW_=[0,255,255,255], _bX_=[0,245,245,245], _bY_=[0,255,255,0], _bZ_=[0,154,205,50]; function symbol(x,y){return x < y?1:0} function symbol$0(x,y){return x <= y?1:0} function symbol$1(x,y){return x !== y?1:0} function symbol$2(x,y){return x === y?1:0} function symbol$3(x,y){return y < x?1:0} function symbol$4(x,y){return y <= x?1:0} var compare=runtime.caml_int_compare; function equal(x,y){return x === y?1:0} function max(x,y){return y <= x?x:y} function min(x,y){return x <= y?x:y} var Int_replace_polymorphic_compar= [0, symbol, symbol$0, symbol$1, symbol$2, symbol$3, symbol$4, compare, equal, max, min], make=Stdlib_String[1], init=Stdlib_String[2], empty=Stdlib_String[3], of_bytes=Stdlib_String[4], to_bytes=Stdlib_String[5], concat=Stdlib_String[6], cat=Stdlib_String[7], compare$0=Stdlib_String[9], starts_with=Stdlib_String[10], ends_with=Stdlib_String[11], contains_from=Stdlib_String[12], rcontains_from=Stdlib_String[13], contains=Stdlib_String[14], sub=Stdlib_String[15], split_on_char=Stdlib_String[16], map=Stdlib_String[17], mapi=Stdlib_String[18], fold_left=Stdlib_String[19], fold_right=Stdlib_String[20], for_all=Stdlib_String[21], exists=Stdlib_String[22], trim=Stdlib_String[23], escaped=Stdlib_String[24], uppercase_ascii=Stdlib_String[25], lowercase_ascii=Stdlib_String[26], capitalize_ascii=Stdlib_String[27], uncapitalize_ascii=Stdlib_String[28], iter=Stdlib_String[29], iteri=Stdlib_String[30], index_from=Stdlib_String[31], index_from_opt=Stdlib_String[32], rindex_from=Stdlib_String[33], rindex_from_opt=Stdlib_String[34], index=Stdlib_String[35], index_opt=Stdlib_String[36], rindex=Stdlib_String[37], rindex_opt=Stdlib_String[38], to_seq=Stdlib_String[39], to_seqi=Stdlib_String[40], of_seq=Stdlib_String[41], get_utf_8_uchar=Stdlib_String[42], is_valid_utf_8=Stdlib_String[43], get_utf_16be_uchar=Stdlib_String[44], is_valid_utf_16be=Stdlib_String[45], get_utf_16le_uchar=Stdlib_String[46], is_valid_utf_16le=Stdlib_String[47], blit=Stdlib_String[48], copy=Stdlib_String[49], fill=Stdlib_String[50], uppercase=Stdlib_String[51], lowercase=Stdlib_String[52], capitalize=Stdlib_String[53], uncapitalize=Stdlib_String[54], get_uint8=Stdlib_String[55], get_int8=Stdlib_String[56], get_uint16_ne=Stdlib_String[57], get_uint16_be=Stdlib_String[58], get_uint16_le=Stdlib_String[59], get_int16_ne=Stdlib_String[60], get_int16_be=Stdlib_String[61], get_int16_le=Stdlib_String[62], get_int32_ne=Stdlib_String[63], get_int32_be=Stdlib_String[64], get_int32_le=Stdlib_String[65], get_int64_ne=Stdlib_String[66], get_int64_be=Stdlib_String[67], get_int64_le=Stdlib_String[68]; function equal$0(x,y){return runtime.caml_string_equal(x,y)} var String= [0, make, init, empty, of_bytes, to_bytes, concat, cat, compare$0, starts_with, ends_with, contains_from, rcontains_from, contains, sub, split_on_char, map, mapi, fold_left, fold_right, for_all, exists, trim, escaped, uppercase_ascii, lowercase_ascii, capitalize_ascii, uncapitalize_ascii, iter, iteri, index_from, index_from_opt, rindex_from, rindex_from_opt, index, index_opt, rindex, rindex_opt, to_seq, to_seqi, of_seq, get_utf_8_uchar, is_valid_utf_8, get_utf_16be_uchar, is_valid_utf_16be, get_utf_16le_uchar, is_valid_utf_16le, blit, copy, fill, uppercase, lowercase, capitalize, uncapitalize, get_uint8, get_int8, get_uint16_ne, get_uint16_be, get_uint16_le, get_int16_ne, get_int16_be, get_int16_le, get_int32_ne, get_int32_be, get_int32_le, get_int64_ne, get_int64_be, get_int64_le, equal$0], chr=Stdlib_Char[1], escaped$0=Stdlib_Char[2], lowercase$0=Stdlib_Char[3], uppercase$0=Stdlib_Char[4], lowercase_ascii$0=Stdlib_Char[5], uppercase_ascii$0=Stdlib_Char[6], compare$1=Stdlib_Char[7]; function equal$1(x,y){return x === y?1:0} var Char= [0, chr, escaped$0, lowercase$0, uppercase$0, lowercase_ascii$0, uppercase_ascii$0, compare$1, equal$1], symbol$5=Int_replace_polymorphic_compar[1], symbol$6=Int_replace_polymorphic_compar[2], symbol$7=Int_replace_polymorphic_compar[3], symbol$8=Int_replace_polymorphic_compar[4], symbol$9=Int_replace_polymorphic_compar[5], symbol$10=Int_replace_polymorphic_compar[6], compare$2=Int_replace_polymorphic_compar[7], equal$2=Int_replace_polymorphic_compar[8], max$0=Int_replace_polymorphic_compar[9], min$0=Int_replace_polymorphic_compar[10], Js_of_ocaml_Import= [0, Poly, Int_replace_polymorphic_compar, String, Char, symbol$5, symbol$6, symbol$7, symbol$8, symbol$9, symbol$10, compare$2, equal$2, max$0, min$0]; caml_register_global(1638,Js_of_ocaml_Import,"Js_of_ocaml__Import"); var global=globalThis,Unsafe=[0,global],no_handler=null,t39=undefined; function return$0(_gO_){return _gO_} function map$0(x,f){return x == no_handler?no_handler:caml_call1(f,x)} function bind(x,f){return x == no_handler?no_handler:caml_call1(f,x)} function test(x){return 1 - (x == no_handler?1:0)} function iter$0(x,f) {var _gN_=1 - (x == no_handler?1:0);return _gN_?caml_call1(f,x):_gN_} function case$0(x,f,g) {return x == no_handler?caml_call1(f,0):caml_call1(g,x)} function get(x,f){return x == no_handler?caml_call1(f,0):x} function option(x){if(x){var x$0=x[1];return x$0}return no_handler} function to_option(x) {function _gM_(x){return [0,x]} return case$0(x,function(param){return 0},_gM_)} var Opt= [0, no_handler, return$0, map$0, bind, test, iter$0, case$0, get, option, to_option]; function return$1(_gL_){return _gL_} function map$1(x,f){return x === t39?t39:caml_call1(f,x)} function bind$0(x,f){return x === t39?t39:caml_call1(f,x)} function test$0(x){return x !== t39?1:0} function iter$1(x,f) {var _gK_=x !== t39?1:0;return _gK_?caml_call1(f,x):_gK_} function case$1(x,f,g){return x === t39?caml_call1(f,0):caml_call1(g,x)} function get$0(x,f){return x === t39?caml_call1(f,0):x} function option$0(x){if(x){var x$0=x[1];return x$0}return t39} function to_option$0(x) {function _gJ_(x){return [0,x]} return case$1(x,function(param){return 0},_gJ_)} var Optdef= [0, t39, return$1, map$1, bind$0, test$0, iter$1, case$1, get$0, option$0, to_option$0]; function coerce(x,f,g) {function _gH_(param){return caml_call1(g,x)} var _gI_=caml_call1(f,x); return caml_call2(Opt[8],_gI_,_gH_)} function coerce_opt(x,f,g) {function _gF_(param){return caml_call1(g,x)} var _gG_=caml_call2(Opt[4],x,f); return caml_call2(Opt[8],_gG_,_gF_)} var t25=true, t4=false, string_constr=Unsafe[1].String, t11=Unsafe[1].RegExp, t4$0=Unsafe[1].Object; function object_keys(t3){return t4$0.keys(t3)} var array_length=Unsafe[1].Array, array_get=caml_js_get, array_set=caml_js_set; function array_map(f,a) {return a.map (caml_js_wrap_callback (function(x,idx,param){return caml_call1(f,x)}))} function array_mapi(f,a) {return a.map (caml_js_wrap_callback (function(x,idx,param){return caml_call2(f,idx,x)}))} function str_array(_gE_){return _gE_} function match_result(_gD_){return _gD_} var t122=Unsafe[1].Date, math=Unsafe[1].Math, error_constr=Unsafe[1].Error, include=Jsoo_runtime[3], raise=include[1], attach_js_backtrace=include[2], of_exn=include[3], Error=include[4]; function name(e){return caml_string_of_jsstring(e.name)} function message(e){return caml_string_of_jsstring(e.message)} function stack(e) {var _gC_=caml_call2(Opt[3],e.stack,caml_string_of_jsstring); return caml_call1(Opt[10],_gC_)} function to_string(e){return caml_string_of_jsstring(e.toString())} function raise_js_error(e){return caml_call1(raise,e)} function string_of_error(e){return to_string(e)} var JSON=Unsafe[1].JSON; function decodeURI(s){return Unsafe[1].decodeURI(s)} function decodeURIComponent(s){return Unsafe[1].decodeURIComponent(s)} function encodeURI(s){return Unsafe[1].encodeURI(s)} function encodeURIComponent(s){return Unsafe[1].encodeURIComponent(s)} function escape(s){return Unsafe[1].escape(s)} function unescape(s){return Unsafe[1].unescape(s)} function isNaN(i){return Unsafe[1].isNaN(i) | 0} function parseInt(s) {var s$0=Unsafe[1].parseInt(s); return isNaN(s$0)?caml_call1(Stdlib[2],cst_parseInt):s$0} function parseFloat(s) {var s$0=Unsafe[1].parseFloat(s); return isNaN(s$0)?caml_call1(Stdlib[2],cst_parseFloat):s$0} function _a_(param) {if(param[1] === Error){var e=param[2];return [0,to_string(e)]}return 0} caml_call1(Stdlib_Printexc[9],_a_); function _b_(e) {return e instanceof array_length ?0 :[0,caml_string_of_jsstring(e.toString())]} caml_call1(Stdlib_Printexc[9],_b_); function export_js(field,x){return jsoo_exports[field] = x} function export$0(field,x) {return export_js(caml_jsstring_of_string(field),x)} function export_all(obj) {var t27=object_keys(obj), t26= caml_js_wrap_callback (function(key,param,_gB_){return export_js(key,obj[key])}); return t27.forEach(t26)} var _c_=runtime.caml_js_error_of_exception; function _d_(_gA_){return _gA_} var _e_= [0, to_string, name, message, stack, raise, attach_js_backtrace, of_exn, Error, function(_gz_){return _gz_}, _d_]; function _f_(_gy_){return _gy_} var Js_of_ocaml_Js= [0, no_handler, function(_gx_){return _gx_}, t39, _f_, Opt, Optdef, t25, t4, string_constr, t11, t11, t11, object_keys, array_length, array_length, array_get, array_set, array_map, array_mapi, str_array, match_result, t122, t122, t122, t122, t122, t122, t122, t122, t122, math, error_constr, _e_, JSON, decodeURI, decodeURIComponent, encodeURI, encodeURIComponent, escape, unescape, isNaN, parseInt, parseFloat, coerce, coerce_opt, export$0, export_all, Unsafe, string_of_error, raise_js_error, attach_js_backtrace, _c_, Error]; caml_register_global(1642,Js_of_ocaml_Js,"Js_of_ocaml__Js"); function list_of_nodeList(nodeList) {var length=nodeList.length,acc=0,i=0; for(;;) {if(caml_call2(symbol$5,i,length)) {var _gw_=nodeList.item(i),match=caml_call1(Opt[10],_gw_); if(match) {var e=match[1],i$0=i + 1 | 0,acc$0=[0,e,acc],acc=acc$0,i=i$0; continue} var i$1=i + 1 | 0,i=i$1; continue} return caml_call1(Stdlib_List[9],acc)}} var disconnected=1, preceding=2, following=4, contains$0=8, contained_by=16, implementation_specific=32; function has(t,mask){return caml_call2(symbol$8,t & mask,mask)} function add(x,y){return x | y} var DocumentPosition= [0, disconnected, preceding, following, contains$0, contained_by, implementation_specific, has, add, add]; function appendChild(p,n){p.appendChild(n);return 0} function removeChild(p,n){p.removeChild(n);return 0} function replaceChild(p,n,o){p.replaceChild(n,o);return 0} function insertBefore(p,n,o){p.insertBefore(n,o);return 0} function nodeType(e) {var match=e.nodeType; if(match) switch(match - 1 | 0) {case 0:return [0,e];case 1:return [1,e];case 2:case 3:return [2,e]} return [3,e]} function cast(e,t){return e.nodeType === t?e:no_handler} function element(e){return cast(e,1)} function text(e) {if(3 !== e.nodeType && 4 !== e.nodeType)return no_handler;return e} function attr(e){return cast(e,2)} function handler(f) {return function(e) {if(caml_call1(Opt[5],e)) {var res=caml_call1(f,e); if(1 - (res | 0))e.preventDefault(); return res} var t18=event,t17=caml_call1(f,t18); if(1 - (t17 | 0))t18.returnValue = t17; return t17}} function full_handler(f) {return runtime.caml_js_wrap_meth_callback_unsafe (function(this$0,e) {if(caml_call1(Opt[5],e)) {var res=caml_call2(f,this$0,e); if(1 - (res | 0))e.preventDefault(); return res} var t21=event,t20=caml_call2(f,this$0,t21); if(1 - (t20 | 0))t21.returnValue = t20; return t20})} function invoke_handler(f,this$0,event){return f.call(this$0,event)} function eventTarget(e) {function _gt_(param) {function _gv_(param){throw Stdlib[8]} return caml_call2(Opt[8],e.srcElement,_gv_)} var t27=caml_call2(Opt[8],e.target,_gt_); if(t27 instanceof Unsafe[1].Node) {if(3 === t27.nodeType) {var _gu_=function(param){throw [0,Assert_failure,_g_]}; return caml_call2(Opt[8],t27.parentNode,_gu_)} return t27} return t27} function make$0(s){return caml_jsstring_of_string(s)} var Event=[0,make$0]; function addEventListenerWithOptions(t50,t47,capture,once,passive,t48) {if(t50.addEventListener === t39) {var t34="on".concat(t47), t35= function(e) {var _gq_=[0,t48,e,[0]]; return function(_gr_,_gs_) {return runtime.caml_js_call(_gq_,_gr_,_gs_)}}; t50.attachEvent(t34,t35); return function(param){return t50.detachEvent(t34,t35)}} var t49={}; function iter(t,f){if(t){var b=t[1];return caml_call1(f,b)}return 0} iter(capture,function(t37){return t49.capture = t37}); iter(once,function(t39){return t49.once = t39}); iter(passive,function(t41){return t49.passive = t41}); t50.addEventListener(t47,t48,t49); return function(param){return t50.removeEventListener(t47,t48,t49)}} function addEventListener(e,typ,h,capt) {return addEventListenerWithOptions(e,typ,[0,capt],0,0,h)} function removeEventListener(id){return caml_call1(id,0)} function preventDefault(t54) {if(caml_call1(Optdef[5],t54.preventDefault))return t54.preventDefault(); var t53=! ! 0; return t54.returnValue = t53} function createCustomEvent(bubbles,cancelable,detail,t62) {function opt_iter(f,param) {if(param){var x=param[1];return caml_call1(f,x)}return 0} var t63={}; opt_iter(function(x){var t55=! ! x;return t63.bubbles = t55},bubbles); opt_iter (function(x){var t57=! ! x;return t63.cancelable = t57},cancelable); opt_iter(function(t59){return t63.detail = t59},detail); var t64=Unsafe[1].CustomEvent; return new t64(t62,t63)} var Js_of_ocaml_Dom= [0, DocumentPosition, insertBefore, replaceChild, removeChild, appendChild, list_of_nodeList, nodeType, [0,element,text,attr], no_handler, handler, full_handler, invoke_handler, eventTarget, Event, addEventListenerWithOptions, addEventListener, removeEventListener, preventDefault, createCustomEvent]; caml_register_global(1645,Js_of_ocaml_Dom,"Js_of_ocaml__Dom"); var arrayBuffer=Unsafe[1].ArrayBuffer, int8Array_inBuffer=Unsafe[1].Int8Array, t11$0=Unsafe[1].Uint8Array, int16Array_inBuffer=Unsafe[1].Int16Array, uint16Array_inBuffer=Unsafe[1].Uint16Array, int32Array_inBuffer=Unsafe[1].Int32Array, uint32Array_inBuffer=Unsafe[1].Uint32Array, float32Array_inBuffer=Unsafe[1].Float32Array, float64Array_inBuffer=Unsafe[1].Float64Array, set=caml_js_set; function get$1(a,i){return a[i]} function unsafe_get(a,i){return a[i]} var dataView=Unsafe[1].DataView; function of_arrayBuffer(ab) {var uint8=new t11$0(ab);return caml_string_of_array(uint8)} var Js_of_ocaml_Typed_array= [0, arrayBuffer, runtime.caml_ba_kind_of_typed_array, runtime.caml_ba_to_typed_array, runtime.caml_ba_from_typed_array, int8Array_inBuffer, int8Array_inBuffer, int8Array_inBuffer, int8Array_inBuffer, int8Array_inBuffer, t11$0, t11$0, t11$0, t11$0, t11$0, int16Array_inBuffer, int16Array_inBuffer, int16Array_inBuffer, int16Array_inBuffer, int16Array_inBuffer, uint16Array_inBuffer, uint16Array_inBuffer, uint16Array_inBuffer, uint16Array_inBuffer, uint16Array_inBuffer, int32Array_inBuffer, int32Array_inBuffer, int32Array_inBuffer, int32Array_inBuffer, int32Array_inBuffer, uint32Array_inBuffer, uint32Array_inBuffer, uint32Array_inBuffer, uint32Array_inBuffer, uint32Array_inBuffer, float32Array_inBuffer, float32Array_inBuffer, float32Array_inBuffer, float32Array_inBuffer, float32Array_inBuffer, float64Array_inBuffer, float64Array_inBuffer, float64Array_inBuffer, float64Array_inBuffer, float64Array_inBuffer, set, get$1, unsafe_get, dataView, dataView, [0, runtime.bigstring_to_array_buffer, runtime.bigstring_to_typed_array, runtime.bigstring_of_array_buffer, runtime.bigstring_of_typed_array], [0,of_arrayBuffer,caml_string_of_array]]; caml_register_global (1646,Js_of_ocaml_Typed_array,"Js_of_ocaml__Typed_array"); var t3=Unsafe[1].Blob; function filter_map(f,param) {var param$0=param; for(;;) {if(param$0) {var q=param$0[2],v=param$0[1],match=caml_call1(f,v); if(match){var v$0=match[1];return [0,v$0,filter_map(f,q)]} var param$0=q; continue} return 0}} function blob_raw(contentType,endings,a) {var _gm_=0; if(endings) var _gn_=116179762 <= endings[1]?_h_:_i_,_go_=_gn_; else var _go_=0; var _gp_=[0,[0,cst_type,contentType],[0,[0,cst_endings,_go_],_gm_]], options= filter_map (function(param) {var v=param[2],name=param[1]; if(v) {var v$0=v[1];return [0,[0,name,caml_jsstring_of_string(v$0)]]} return 0}, _gp_), options$0= options ?runtime.caml_js_object(caml_call1(Stdlib_Array[12],options)) :t39, t1=caml_js_from_array(a); return new t3(t1,options$0)} function blob_from_string(contentType,endings,s) {return blob_raw(contentType,endings,[0,caml_jsstring_of_string(s)])} function blob_from_any(contentType,endings,l) {function _gk_(param) {var _gl_=param[1]; if(155580615 === _gl_){var s=param[2];return s} if(486041214 <= _gl_) {if(1037850489 <= _gl_){var a=param[2];return a} var a$0=param[2]; return a$0} if(288368849 <= _gl_) {var s$0=param[2];return caml_jsstring_of_string(s$0)} var b=param[2]; return b} var l$0=caml_call2(Stdlib_List[19],_gk_,l); return blob_raw(contentType,endings,caml_call1(Stdlib_Array[12],l$0))} function filename(file) {var match=caml_call1(Optdef[10],file.name); if(match){var name=match[1];return name} var match$0=caml_call1(Optdef[10],file.fileName); if(match$0){var name$0=match$0[1];return name$0} return caml_call1(Stdlib[2],cst_can_t_retrieve_file_name_n)} var doc_constr=Unsafe[1].Document; function document(e){return e instanceof doc_constr?e:no_handler} function blob(e){return e instanceof t3?e:no_handler} function string(e){return typeof e === "string"?e:no_handler} function arrayBuffer$0(e){return e instanceof arrayBuffer?e:no_handler} var loadstart=caml_call1(Event[1],cst_loadstart), progress=caml_call1(Event[1],cst_progress), abort=caml_call1(Event[1],cst_abort), error=caml_call1(Event[1],cst_error), load=caml_call1(Event[1],cst_load), loadend=caml_call1(Event[1],cst_loadend), ReaderEvent=[0,loadstart,progress,abort,error,load,loadend], fileReader=Unsafe[1].FileReader, Js_of_ocaml_File= [0, blob_from_string, blob_from_any, [0,document,blob,function(_gj_){return _gj_},string,arrayBuffer$0], ReaderEvent, filename, fileReader, addEventListener]; caml_register_global(1648,Js_of_ocaml_File,"Js_of_ocaml__File"); var onIE=runtime.caml_js_on_ie(0) | 0, click=caml_call1(Event[1],cst_click), copy$0=caml_call1(Event[1],cst_copy), cut=caml_call1(Event[1],cst_cut), paste=caml_call1(Event[1],cst_paste), dblclick=caml_call1(Event[1],cst_dblclick), mousedown=caml_call1(Event[1],cst_mousedown), mouseup=caml_call1(Event[1],cst_mouseup), mouseover=caml_call1(Event[1],cst_mouseover), mousemove=caml_call1(Event[1],cst_mousemove), mouseout=caml_call1(Event[1],cst_mouseout), keypress=caml_call1(Event[1],cst_keypress), keydown=caml_call1(Event[1],cst_keydown), keyup=caml_call1(Event[1],cst_keyup), mousewheel=caml_call1(Event[1],cst_mousewheel), DOMMouseScroll=caml_call1(Event[1],cst_DOMMouseScroll), touchstart=caml_call1(Event[1],cst_touchstart), touchmove=caml_call1(Event[1],cst_touchmove), touchend=caml_call1(Event[1],cst_touchend), touchcancel=caml_call1(Event[1],cst_touchcancel), dragstart=caml_call1(Event[1],cst_dragstart), dragend=caml_call1(Event[1],cst_dragend), dragenter=caml_call1(Event[1],cst_dragenter), dragover=caml_call1(Event[1],cst_dragover), dragleave=caml_call1(Event[1],cst_dragleave), drag=caml_call1(Event[1],cst_drag), drop=caml_call1(Event[1],cst_drop), hashchange=caml_call1(Event[1],cst_hashchange), change=caml_call1(Event[1],cst_change), input=caml_call1(Event[1],cst_input), timeupdate=caml_call1(Event[1],cst_timeupdate), submit=caml_call1(Event[1],cst_submit), scroll=caml_call1(Event[1],cst_scroll), focus=caml_call1(Event[1],cst_focus), blur=caml_call1(Event[1],cst_blur), load$0=caml_call1(Event[1],cst_load$0), unload=caml_call1(Event[1],cst_unload), beforeunload=caml_call1(Event[1],cst_beforeunload), resize=caml_call1(Event[1],cst_resize), orientationchange=caml_call1(Event[1],cst_orientationchange), popstate=caml_call1(Event[1],cst_popstate), error$0=caml_call1(Event[1],cst_error$0), abort$0=caml_call1(Event[1],cst_abort$0), select=caml_call1(Event[1],cst_select), online=caml_call1(Event[1],cst_online), offline=caml_call1(Event[1],cst_offline), checking=caml_call1(Event[1],cst_checking), noupdate=caml_call1(Event[1],cst_noupdate), downloading=caml_call1(Event[1],cst_downloading), progress$0=caml_call1(Event[1],cst_progress$0), updateready=caml_call1(Event[1],cst_updateready), cached=caml_call1(Event[1],cst_cached), obsolete=caml_call1(Event[1],cst_obsolete), domContentLoaded=caml_call1(Event[1],cst_DOMContentLoaded), animationstart=caml_call1(Event[1],cst_animationstart), animationend=caml_call1(Event[1],cst_animationend), animationiteration=caml_call1(Event[1],cst_animationiteration), animationcancel=caml_call1(Event[1],cst_animationcancel), canplay=caml_call1(Event[1],cst_canplay), canplaythrough=caml_call1(Event[1],cst_canplaythrough), durationchange=caml_call1(Event[1],cst_durationchange), emptied=caml_call1(Event[1],cst_emptied), ended=caml_call1(Event[1],cst_ended), gotpointercapture=caml_call1(Event[1],cst_gotpointercapture), loadeddata=caml_call1(Event[1],cst_loadeddata), loadedmetadata=caml_call1(Event[1],cst_loadedmetadata), loadstart$0=caml_call1(Event[1],cst_loadstart$0), lostpointercapture=caml_call1(Event[1],cst_lostpointercapture), message$0=caml_call1(Event[1],cst_message), pause=caml_call1(Event[1],cst_pause), play=caml_call1(Event[1],cst_play), playing=caml_call1(Event[1],cst_playing), pointerenter=caml_call1(Event[1],cst_pointerenter), pointercancel=caml_call1(Event[1],cst_pointercancel), pointerdown=caml_call1(Event[1],cst_pointerdown), pointerleave=caml_call1(Event[1],cst_pointerleave), pointermove=caml_call1(Event[1],cst_pointermove), pointerout=caml_call1(Event[1],cst_pointerout), pointerover=caml_call1(Event[1],cst_pointerover), pointerup=caml_call1(Event[1],cst_pointerup), ratechange=caml_call1(Event[1],cst_ratechange), seeked=caml_call1(Event[1],cst_seeked), seeking=caml_call1(Event[1],cst_seeking), stalled=caml_call1(Event[1],cst_stalled), suspend=caml_call1(Event[1],cst_suspend), volumechange=caml_call1(Event[1],cst_volumechange), waiting=caml_call1(Event[1],cst_waiting), make$1=Event[1], Event$0= [0, click, copy$0, cut, paste, dblclick, mousedown, mouseup, mouseover, mousemove, mouseout, keypress, keydown, keyup, mousewheel, DOMMouseScroll, touchstart, touchmove, touchend, touchcancel, dragstart, dragend, dragenter, dragover, dragleave, drag, drop, hashchange, change, input, timeupdate, submit, scroll, focus, blur, load$0, unload, beforeunload, resize, orientationchange, popstate, error$0, abort$0, select, online, offline, checking, noupdate, downloading, progress$0, updateready, cached, obsolete, domContentLoaded, animationstart, animationend, animationiteration, animationcancel, canplay, canplaythrough, durationchange, emptied, ended, gotpointercapture, loadeddata, loadedmetadata, loadstart$0, lostpointercapture, message$0, pause, play, playing, pointerenter, pointercancel, pointerdown, pointerleave, pointermove, pointerout, pointerover, pointerup, ratechange, seeked, seeking, stalled, suspend, volumechange, waiting, make$1], d="2d"; function location_origin(loc) {function _gh_(o){return o} function _gi_(param) {var t8=loc.protocol,t7=loc.hostname,t9=loc.port; if (caml_call2(symbol$8,t8.length,0) && caml_call2(symbol$8,t7.length,0)) return ""; var t13=t8.concat("//",t7); if(caml_call2(symbol$9,t9.length,0)) {var t12=loc.port;return t13.concat(":",t12)} return t13} return caml_call3(Optdef[7],loc.origin,_gi_,_gh_)} var _j_=Unsafe[1],t87=_j_.document; function getElementById(id) {function _ge_(pnode){return pnode} function _gf_(param){throw Stdlib[8]} var t15=caml_jsstring_of_string(id),_gg_=t87.getElementById(t15); return caml_call3(Opt[7],_gg_,_gf_,_ge_)} function getElementById_exn(id) {function _ga_(pnode){return pnode} function _gb_(param) {var _gd_=caml_call2(Stdlib_Printf[4],_k_,id); return caml_call1(Stdlib[2],_gd_)} var t17=caml_jsstring_of_string(id),_gc_=t87.getElementById(t17); return caml_call3(Opt[7],_gc_,_gb_,_ga_)} function getElementById_opt(id) {var t19=caml_jsstring_of_string(id),_f$_=t87.getElementById(t19); return caml_call1(Opt[10],_f$_)} function getElementById_coerce(id,coerce) {function _f7_(e) {var _f__=caml_call1(coerce,e);return caml_call1(Opt[10],_f__)} function _f8_(param){return 0} var t21=caml_jsstring_of_string(id),_f9_=t87.getElementById(t21); return caml_call3(Opt[7],_f9_,_f8_,_f7_)} function opt_iter(x,f){if(x){var v=x[1];return caml_call1(f,v)}return 0} function createElement(t24,name) {var t23=caml_jsstring_of_string(name);return t24.createElement(t23)} function unsafeCreateElement(doc,name){return createElement(doc,name)} var createElementSyntax=[0,785140586]; function unsafeCreateElementEx(type,name,doc,elt) {for(;;) {if(0 === type && 0 === name)return createElement(doc,elt); var _f1_=createElementSyntax[1]; if(785140586 === _f1_) {try {var el=t87.createElement('<input name="x">'), _f4_=el.tagName.toLowerCase() === "input"?1:0, _f5_=_f4_?el.name === "x"?1:0:_f4_, _f2_=_f5_} catch(_f6_){var _f2_=0} var _f3_=_f2_?982028505:-1003883683; createElementSyntax[1] = _f3_; continue} if(982028505 <= _f1_) {var t40=new array_length(); t40.push("<",caml_jsstring_of_string(elt)); opt_iter (type, function(t) {var t34=caml_js_html_escape(t); t40.push(' type="',t34,'"'); return 0}); opt_iter (name, function(n) {var t38=caml_js_html_escape(n); t40.push(' name="',t38,'"'); return 0}); t40.push(">"); return doc.createElement(t40.join(""))} var t28=createElement(doc,elt); opt_iter(type,function(t25){return t28.type = t25}); opt_iter(name,function(t27){return t28.name = t27}); return t28}} function createHtml(doc){return unsafeCreateElement(doc,cst_html)} function createHead(doc){return unsafeCreateElement(doc,cst_head)} function createLink(doc){return unsafeCreateElement(doc,cst_link)} function createTitle(doc){return unsafeCreateElement(doc,cst_title)} function createMeta(doc){return unsafeCreateElement(doc,cst_meta)} function createBase(doc){return unsafeCreateElement(doc,cst_base)} function createStyle(doc){return unsafeCreateElement(doc,cst_style)} function createBody(doc){return unsafeCreateElement(doc,cst_body)} function createForm(doc){return unsafeCreateElement(doc,cst_form)} function createOptgroup(doc){return unsafeCreateElement(doc,cst_optgroup)} function createOption(doc){return unsafeCreateElement(doc,cst_option)} function createSelect(type,name,doc) {return unsafeCreateElementEx(type,name,doc,cst_select$0)} function createInput(type,name,doc) {return unsafeCreateElementEx(type,name,doc,cst_input$0)} function createTextarea(type,name,doc) {return unsafeCreateElementEx(type,name,doc,cst_textarea)} function createButton(type,name,doc) {return unsafeCreateElementEx(type,name,doc,cst_button)} function createLabel(doc){return unsafeCreateElement(doc,cst_label)} function createFieldset(doc){return unsafeCreateElement(doc,cst_fieldset)} function createLegend(doc){return unsafeCreateElement(doc,cst_legend)} function createUl(doc){return unsafeCreateElement(doc,cst_ul)} function createOl(doc){return unsafeCreateElement(doc,cst_ol)} function createDl(doc){return unsafeCreateElement(doc,cst_dl)} function createLi(doc){return unsafeCreateElement(doc,cst_li)} function createDiv(doc){return unsafeCreateElement(doc,cst_div)} function createEmbed(doc){return unsafeCreateElement(doc,cst_embed)} function createP(doc){return unsafeCreateElement(doc,cst_p)} function createH1(doc){return unsafeCreateElement(doc,cst_h1)} function createH2(doc){return unsafeCreateElement(doc,cst_h2)} function createH3(doc){return unsafeCreateElement(doc,cst_h3)} function createH4(doc){return unsafeCreateElement(doc,cst_h4)} function createH5(doc){return unsafeCreateElement(doc,cst_h5)} function createH6(doc){return unsafeCreateElement(doc,cst_h6)} function createQ(doc){return unsafeCreateElement(doc,cst_q)} function createBlockquote(doc) {return unsafeCreateElement(doc,cst_blockquote)} function createPre(doc){return unsafeCreateElement(doc,cst_pre)} function createBr(doc){return unsafeCreateElement(doc,cst_br)} function createHr(doc){return unsafeCreateElement(doc,cst_hr)} function createIns(doc){return unsafeCreateElement(doc,cst_ins)} function createDel(doc){return unsafeCreateElement(doc,cst_del)} function createA(doc){return unsafeCreateElement(doc,cst_a)} function createImg(doc){return unsafeCreateElement(doc,cst_img)} function createObject(doc){return unsafeCreateElement(doc,cst_object)} function createParam(doc){return unsafeCreateElement(doc,cst_param)} function createMap(doc){return unsafeCreateElement(doc,cst_map)} function createArea(doc){return unsafeCreateElement(doc,cst_area)} function createScript(doc){return unsafeCreateElement(doc,cst_script)} function createTable(doc){return unsafeCreateElement(doc,cst_table)} function createCaption(doc){return unsafeCreateElement(doc,cst_caption)} function createCol(doc){return unsafeCreateElement(doc,cst_col)} function createColgroup(doc){return unsafeCreateElement(doc,cst_colgroup)} function createThead(doc){return unsafeCreateElement(doc,cst_thead)} function createTfoot(doc){return unsafeCreateElement(doc,cst_tfoot)} function createTbody(doc){return unsafeCreateElement(doc,cst_tbody)} function createTr(doc){return unsafeCreateElement(doc,cst_tr)} function createTh(doc){return unsafeCreateElement(doc,cst_th)} function createTd(doc){return unsafeCreateElement(doc,cst_td)} function createSub(doc){return createElement(doc,cst_sub)} function createSup(doc){return createElement(doc,cst_sup)} function createSpan(doc){return createElement(doc,cst_span)} function createTt(doc){return createElement(doc,cst_tt)} function createI(doc){return createElement(doc,cst_i)} function createB(doc){return createElement(doc,cst_b)} function createBig(doc){return createElement(doc,cst_big)} function createSmall(doc){return createElement(doc,cst_small)} function createEm(doc){return createElement(doc,cst_em)} function createStrong(doc){return createElement(doc,cst_strong)} function createCite(doc){return createElement(doc,cst_cite)} function createDfn(doc){return createElement(doc,cst_dfn)} function createCode(doc){return createElement(doc,cst_code)} function createSamp(doc){return createElement(doc,cst_samp)} function createKbd(doc){return createElement(doc,cst_kbd)} function createVar(doc){return createElement(doc,cst_var)} function createAbbr(doc){return createElement(doc,cst_abbr)} function createDd(doc){return createElement(doc,cst_dd)} function createDt(doc){return createElement(doc,cst_dt)} function createNoscript(doc){return createElement(doc,cst_noscript)} function createAddress(doc){return createElement(doc,cst_address)} function createFrameset(doc){return unsafeCreateElement(doc,cst_frameset)} function createFrame(doc){return unsafeCreateElement(doc,cst_frame)} function createIframe(doc){return unsafeCreateElement(doc,cst_iframe)} function createAudio(doc){return unsafeCreateElement(doc,cst_audio)} function createVideo(doc){return unsafeCreateElement(doc,cst_video)} var Canvas_not_available= [248,cst_Js_of_ocaml_Dom_html_Canva,caml_fresh_oo_id(0)]; function createCanvas(doc) {var t52=unsafeCreateElement(doc,cst_canvas); if(1 - caml_call1(Opt[5],t52.getContext))throw Canvas_not_available; return t52} var html_element=Unsafe[1].HTMLElement, element$0= html_element === t39 ?function(e){return e.innerHTML === t39?no_handler:e} :function(e){return e instanceof html_element?e:no_handler}; function unsafeCoerce(tag,e) {var t56=e.tagName,_f0_=caml_jsstring_of_string(tag); return t56.toLowerCase() === _f0_?e:no_handler} function a(e){return unsafeCoerce(cst_a$0,e)} function area(e){return unsafeCoerce(cst_area$0,e)} function base(e){return unsafeCoerce(cst_base$0,e)} function blockquote(e){return unsafeCoerce(cst_blockquote$0,e)} function body(e){return unsafeCoerce(cst_body$0,e)} function br(e){return unsafeCoerce(cst_br$0,e)} function button(e){return unsafeCoerce(cst_button$0,e)} function canvas(e){return unsafeCoerce(cst_canvas$0,e)} function caption(e){return unsafeCoerce(cst_caption$0,e)} function col(e){return unsafeCoerce(cst_col$0,e)} function colgroup(e){return unsafeCoerce(cst_colgroup$0,e)} function del(e){return unsafeCoerce(cst_del$0,e)} function div(e){return unsafeCoerce(cst_div$0,e)} function dl(e){return unsafeCoerce(cst_dl$0,e)} function fieldset(e){return unsafeCoerce(cst_fieldset$0,e)} function embed(e){return unsafeCoerce(cst_embed$0,e)} function form(e){return unsafeCoerce(cst_form$0,e)} function frameset(e){return unsafeCoerce(cst_frameset$0,e)} function frame(e){return unsafeCoerce(cst_frame$0,e)} function h1(e){return unsafeCoerce(cst_h1$0,e)} function h2(e){return unsafeCoerce(cst_h2$0,e)} function h3(e){return unsafeCoerce(cst_h3$0,e)} function h4(e){return unsafeCoerce(cst_h4$0,e)} function h5(e){return unsafeCoerce(cst_h5$0,e)} function h6(e){return unsafeCoerce(cst_h6$0,e)} function head(e){return unsafeCoerce(cst_head$0,e)} function hr(e){return unsafeCoerce(cst_hr$0,e)} function html(e){return unsafeCoerce(cst_html$0,e)} function iframe(e){return unsafeCoerce(cst_iframe$0,e)} function img(e){return unsafeCoerce(cst_img$0,e)} function input$0(e){return unsafeCoerce(cst_input$1,e)} function ins(e){return unsafeCoerce(cst_ins$0,e)} function label(e){return unsafeCoerce(cst_label$0,e)} function legend(e){return unsafeCoerce(cst_legend$0,e)} function li(e){return unsafeCoerce(cst_li$0,e)} function link(e){return unsafeCoerce(cst_link$0,e)} function map$2(e){return unsafeCoerce(cst_map$0,e)} function meta(e){return unsafeCoerce(cst_meta$0,e)} function object(e){return unsafeCoerce(cst_object$0,e)} function ol(e){return unsafeCoerce(cst_ol$0,e)} function optgroup(e){return unsafeCoerce(cst_optgroup$0,e)} function option$1(e){return unsafeCoerce(cst_option$0,e)} function p(e){return unsafeCoerce(cst_p$0,e)} function param(e){return unsafeCoerce(cst_param$0,e)} function pre(e){return unsafeCoerce(cst_pre$0,e)} function q(e){return unsafeCoerce(cst_q$0,e)} function script(e){return unsafeCoerce(cst_script$0,e)} function select$0(e){return unsafeCoerce(cst_select$1,e)} function style(e){return unsafeCoerce(cst_style$0,e)} function table(e){return unsafeCoerce(cst_table$0,e)} function tbody(e){return unsafeCoerce(cst_tbody$0,e)} function td(e){return unsafeCoerce(cst_td$0,e)} function textarea(e){return unsafeCoerce(cst_textarea$0,e)} function tfoot(e){return unsafeCoerce(cst_tfoot$0,e)} function th(e){return unsafeCoerce(cst_th$0,e)} function thead(e){return unsafeCoerce(cst_thead$0,e)} function title(e){return unsafeCoerce(cst_title$0,e)} function tr(e){return unsafeCoerce(cst_tr$0,e)} function ul(e){return unsafeCoerce(cst_ul$0,e)} function audio(e){return unsafeCoerce(cst_audio$0,e)} function video(e){return unsafeCoerce(cst_video$0,e)} function unsafeCoerceEvent(constr,ev) {if(constr !== t39 && ev instanceof constr)return ev;return no_handler} function mouseEvent(ev){return unsafeCoerceEvent(Unsafe[1].MouseEvent,ev)} function keyboardEvent(ev) {return unsafeCoerceEvent(Unsafe[1].KeyboardEvent,ev)} function wheelEvent(ev){return unsafeCoerceEvent(Unsafe[1].WheelEvent,ev)} function mouseScrollEvent(ev) {return unsafeCoerceEvent(Unsafe[1].MouseScrollEvent,ev)} function popStateEvent(ev) {return unsafeCoerceEvent(Unsafe[1].PopStateEvent,ev)} function messageEvent(ev) {return unsafeCoerceEvent(Unsafe[1].MessageEvent,ev)} function eventRelatedTarget(e) {function _fX_(param) {var match=caml_string_of_jsstring(e.type); if(caml_string_notequal(match,cst_mouseout$0)) {if(caml_string_notequal(match,cst_mouseover$0))return no_handler; var _fY_=function(param){throw [0,Assert_failure,_l_]}; return caml_call2(Optdef[8],e.fromElement,_fY_)} function _fZ_(param){throw [0,Assert_failure,_m_]} return caml_call2(Optdef[8],e.toElement,_fZ_)} return caml_call2(Optdef[8],e.relatedTarget,_fX_)} function eventAbsolutePosition(e) {var t70=t87.body,t71=t87.documentElement; return [0, (e.clientX + t70.scrollLeft | 0) + t71.scrollLeft | 0, (e.clientY + t70.scrollTop | 0) + t71.scrollTop | 0]} function eventAbsolutePosition$0(e) {function _fT_(x) {function _fV_(y){return [0,x,y]} function _fW_(param){return eventAbsolutePosition(e)} return caml_call3(Optdef[7],e.pageY,_fW_,_fV_)} function _fU_(param){return eventAbsolutePosition(e)} return caml_call3(Optdef[7],e.pageX,_fU_,_fT_)} function elementClientPosition(e) {var t80=e.getBoundingClientRect(),t81=t87.body,t82=t87.documentElement; return [0, ((t80.left | 0) - t81.clientLeft | 0) - t82.clientLeft | 0, ((t80.top | 0) - t81.clientTop | 0) - t82.clientTop | 0]} function getDocumentScroll(param) {var t88=t87.body,t89=t87.documentElement; return [0, t88.scrollLeft + t89.scrollLeft | 0, t88.scrollTop + t89.scrollTop | 0]} function buttonPressed(ev) {function _fR_(x){return x} function _fS_(param) {var match=ev.button,switcher=match - 1 | 0; if(! (3 < switcher >>> 0)) switch(switcher) {case 0:return 1;case 1:return 3;case 2:break;default:return 2} return 0} return caml_call3(Optdef[7],ev.which,_fS_,_fR_)} function addMousewheelEventListenerWith(e,capture,once,passive,h) {var t96=createDiv(t87); t96.setAttribute("onmousewheel","return;"); if(typeof t96.onmousewheel === "function") {var _fN_= handler (function(e) {function _fP_(param){return 0} var dx= (- caml_call2(Optdef[8],e.wheelDeltaX,_fP_) | 0) / 40 | 0; function _fQ_(param){return e.wheelDelta} var dy= (- caml_call2(Optdef[8],e.wheelDeltaY,_fQ_) | 0) / 40 | 0; return caml_call3(h,e,dx,dy)}); return addEventListenerWithOptions (e,Event$0[14],capture,once,passive,_fN_)} var _fO_= handler (function(e) {var d=e.detail; return e.axis === e.HORIZONTAL ?caml_call3(h,e,d,0) :caml_call3(h,e,0,d)}); return addEventListenerWithOptions (e,Event$0[15],capture,once,passive,_fO_)} function addMousewheelEventListener(e,h,capt) {return addMousewheelEventListenerWith(e,[0,capt],0,0,h)} function f(v) {var match=caml_string_of_jsstring(v), switch$0=caml_string_compare(match,cst_KeyH); if(0 <= switch$0) {if(! (0 < switch$0))return 8; var switch$1=caml_string_compare(match,cst_Numpad4); if(0 <= switch$1) {if(! (0 < switch$1))return 72; var switch$2=caml_string_compare(match,cst_PageUp); if(0 <= switch$2) {if(! (0 < switch$2))return 98; var switch$3=caml_string_compare(match,cst_ShiftRight); if(0 <= switch$3) {if(! (0 < switch$3))return 91; if(! caml_string_notequal(match,cst_Slash))return 55; if(! caml_string_notequal(match,cst_Space))return 41; if(! caml_string_notequal(match,cst_Tab))return 39; if(! caml_string_notequal(match,cst_VolumeDown))return 103; if(! caml_string_notequal(match,cst_VolumeMute))return 102; if(! caml_string_notequal(match,cst_VolumeUp))return 104} else {if(! caml_string_notequal(match,cst_Pause))return 123; if(! caml_string_notequal(match,cst_Period))return 54; if(! caml_string_notequal(match,cst_PrintScreen))return 120; if(! caml_string_notequal(match,cst_Quote))return 50; if(! caml_string_notequal(match,cst_ScrollLock))return 119; if(! caml_string_notequal(match,cst_Semicolon))return 49; if(! caml_string_notequal(match,cst_ShiftLeft))return 90}} else {var switch$4=caml_string_compare(match,cst_NumpadDivide); if(0 <= switch$4) {if(! (0 < switch$4))return 84; if(! caml_string_notequal(match,cst_NumpadEnter))return 83; if(! caml_string_notequal(match,cst_NumpadEqual))return 82; if(! caml_string_notequal(match,cst_NumpadMultiply))return 78; if(! caml_string_notequal(match,cst_NumpadSubtract))return 79; if(! caml_string_notequal(match,cst_OSLeft))return 117; if(! caml_string_notequal(match,cst_OSRight))return 118; if(! caml_string_notequal(match,cst_PageDown))return 99} else {if(! caml_string_notequal(match,cst_Numpad5))return 73; if(! caml_string_notequal(match,cst_Numpad6))return 74; if(! caml_string_notequal(match,cst_Numpad7))return 75; if(! caml_string_notequal(match,cst_Numpad8))return 76; if(! caml_string_notequal(match,cst_Numpad9))return 77; if(! caml_string_notequal(match,cst_NumpadAdd))return 80; if(! caml_string_notequal(match,cst_NumpadDecimal))return 81}}} else {var switch$5=caml_string_compare(match,cst_KeyX); if(0 <= switch$5) {if(! (0 < switch$5))return 24; var switch$6=caml_string_compare(match,cst_MetaRight); if(0 <= switch$6) {if(! (0 < switch$6))return 89; if(! caml_string_notequal(match,cst_Minus))return 37; if(! caml_string_notequal(match,cst_NumLock))return 85; if(! caml_string_notequal(match,cst_Numpad0))return 68; if(! caml_string_notequal(match,cst_Numpad1))return 69; if(! caml_string_notequal(match,cst_Numpad2))return 70; if(! caml_string_notequal(match,cst_Numpad3))return 71} else {if(! caml_string_notequal(match,cst_KeyY))return 25; if(! caml_string_notequal(match,cst_KeyZ))return 26; if(! caml_string_notequal(match,cst_MediaPlayPause))return 107; if(! caml_string_notequal(match,cst_MediaStop))return 108; if(! caml_string_notequal(match,cst_MediaTrackNext))return 106; if(! caml_string_notequal(match,cst_MediaTrackPrevious)) return 105; if(! caml_string_notequal(match,cst_MetaLeft))return 88}} else {var switch$7=caml_string_compare(match,cst_KeyP); if(0 <= switch$7) {if(! (0 < switch$7))return 16; if(! caml_string_notequal(match,cst_KeyQ))return 17; if(! caml_string_notequal(match,cst_KeyR))return 18; if(! caml_string_notequal(match,cst_KeyS))return 19; if(! caml_string_notequal(match,cst_KeyT))return 20; if(! caml_string_notequal(match,cst_KeyU))return 21; if(! caml_string_notequal(match,cst_KeyV))return 22; if(! caml_string_notequal(match,cst_KeyW))return 23} else {if(! caml_string_notequal(match,cst_KeyI))return 9; if(! caml_string_notequal(match,cst_KeyJ))return 10; if(! caml_string_notequal(match,cst_KeyK))return 11; if(! caml_string_notequal(match,cst_KeyL))return 12; if(! caml_string_notequal(match,cst_KeyM))return 13; if(! caml_string_notequal(match,cst_KeyN))return 14; if(! caml_string_notequal(match,cst_KeyO))return 15}}}} else {var switch$8=caml_string_compare(match,cst_Digit6); if(0 <= switch$8) {if(! (0 < switch$8))return 33; var switch$9=caml_string_compare(match,cst_F6); if(0 <= switch$9) {if(! (0 < switch$9))return 61; var switch$10=caml_string_compare(match,cst_KeyA); if(0 <= switch$10) {if(! (0 < switch$10))return 1; if(! caml_string_notequal(match,cst_KeyB))return 2; if(! caml_string_notequal(match,cst_KeyC))return 3; if(! caml_string_notequal(match,cst_KeyD))return 4; if(! caml_string_notequal(match,cst_KeyE))return 5; if(! caml_string_notequal(match,cst_KeyF))return 6; if(! caml_string_notequal(match,cst_KeyG))return 7} else {if(! caml_string_notequal(match,cst_F7))return 62; if(! caml_string_notequal(match,cst_F8))return 63; if(! caml_string_notequal(match,cst_F9))return 64; if(! caml_string_notequal(match,cst_Home))return 100; if(! caml_string_notequal(match,cst_Insert))return 44; if(! caml_string_notequal(match,cst_IntlBackslash))return 121; if(! caml_string_notequal(match,cst_IntlYen))return 122}} else {var switch$11=caml_string_compare(match,cst_F1); if(0 <= switch$11) {if(! (0 < switch$11))return 56; if(! caml_string_notequal(match,cst_F10))return 65; if(! caml_string_notequal(match,cst_F11))return 66; if(! caml_string_notequal(match,cst_F12))return 67; if(! caml_string_notequal(match,cst_F2))return 57; if(! caml_string_notequal(match,cst_F3))return 58; if(! caml_string_notequal(match,cst_F4))return 59; if(! caml_string_notequal(match,cst_F5))return 60} else {if(! caml_string_notequal(match,cst_Digit7))return 34; if(! caml_string_notequal(match,cst_Digit8))return 35; if(! caml_string_notequal(match,cst_Digit9))return 36; if(! caml_string_notequal(match,cst_End))return 101; if(! caml_string_notequal(match,cst_Enter))return 40; if(! caml_string_notequal(match,cst_Equal))return 38; if(! caml_string_notequal(match,cst_Escape))return 42}}} else {var switch$12=caml_string_compare(match,cst_BrowserRefresh); if(0 <= switch$12) {if(! (0 < switch$12))return 113; var switch$13=caml_string_compare(match,cst_Delete); if(0 <= switch$13) {if(! (0 < switch$13))return 45; if(! caml_string_notequal(match,cst_Digit0))return 27; if(! caml_string_notequal(match,cst_Digit1))return 28; if(! caml_string_notequal(match,cst_Digit2))return 29; if(! caml_string_notequal(match,cst_Digit3))return 30; if(! caml_string_notequal(match,cst_Digit4))return 31; if(! caml_string_notequal(match,cst_Digit5))return 32} else {if(! caml_string_notequal(match,cst_BrowserSearch))return 110; if(! caml_string_notequal(match,cst_BrowserStop))return 114; if(! caml_string_notequal(match,cst_CapsLock))return 46; if(! caml_string_notequal(match,cst_Comma))return 53; if(! caml_string_notequal(match,cst_ContextMenu))return 109; if(! caml_string_notequal(match,cst_ControlLeft))return 86; if(! caml_string_notequal(match,cst_ControlRight))return 87}} else {var switch$14=caml_string_compare(match,cst_Backslash); if(0 <= switch$14) {if(! (0 < switch$14))return 52; if(! caml_string_notequal(match,cst_Backspace))return 43; if(! caml_string_notequal(match,cst_BracketLeft))return 47; if(! caml_string_notequal(match,cst_BracketRight))return 48; if(! caml_string_notequal(match,cst_BrowserBack))return 116; if(! caml_string_notequal(match,cst_BrowserFavorites)) return 112; if(! caml_string_notequal(match,cst_BrowserForward))return 115; if(! caml_string_notequal(match,cst_BrowserHome))return 111} else {if(! caml_string_notequal(match,cst_AltLeft))return 92; if(! caml_string_notequal(match,cst_AltRight))return 93; if(! caml_string_notequal(match,cst_ArrowDown))return 97; if(! caml_string_notequal(match,cst_ArrowLeft))return 94; if(! caml_string_notequal(match,cst_ArrowRight))return 95; if(! caml_string_notequal(match,cst_ArrowUp))return 96; if(! caml_string_notequal(match,cst_Backquote))return 51}}}} return 0} function try_key_code_left(param) {if(19 <= param) {if(91 === param)return 88} else if(16 <= param) switch(param - 16 | 0) {case 0:return 90;case 1:return 86;default:return 92} return 0} function try_key_code_right(param) {if(19 <= param) {if(91 === param)return 89} else if(16 <= param) switch(param - 16 | 0) {case 0:return 91;case 1:return 87;default:return 93} return 0} function try_key_code_numpad(param) {if(47 <= param) {var switcher=param - 96 | 0; if(! (15 < switcher >>> 0)) switch(switcher) {case 0:return 68; case 1:return 69; case 2:return 70; case 3:return 71; case 4:return 72; case 5:return 73; case 6:return 74; case 7:return 75; case 8:return 76; case 9:return 77; case 10:return 78; case 11:return 80; case 12:break; case 13:return 79; case 14:return 81; default:return 84}} else if(12 <= param) switch(param - 12 | 0) {case 0:return 73; case 1:return 83; case 21:return 77; case 22:return 71; case 23:return 69; case 24:return 75; case 25:return 72; case 26:return 76; case 27:return 74; case 28:return 70; case 33:return 68; case 34:return 81 } return 0} function try_key_code_normal(param) {var switcher=param - 8 | 0; if(! (214 < switcher >>> 0)) {var _fM_=switcher; if(67 <= _fM_) switch(_fM_) {case 67:return 11; case 68:return 12; case 69:return 13; case 70:return 14; case 71:return 15; case 72:return 16; case 73:return 17; case 74:return 18; case 75:return 19; case 76:return 20; case 77:return 21; case 78:return 22; case 79:return 23; case 80:return 24; case 81:return 25; case 82:return 26; case 85:return 109; case 104:return 56; case 105:return 57; case 106:return 58; case 107:return 59; case 108:return 60; case 109:return 61; case 110:return 62; case 111:return 63; case 112:return 64; case 113:return 65; case 114:return 66; case 115:return 67; case 137:return 119; case 178:return 49; case 179:return 38; case 180:return 53; case 181:return 37; case 182:return 54; case 183:return 55; case 184:return 51; case 211:return 47; case 212:return 52; case 213:return 48; case 214:return 50 } else switch(_fM_) {case 0:return 43; case 1:return 39; case 5:return 40; case 11:return 123; case 12:return 46; case 19:return 42; case 24:return 41; case 25:return 98; case 26:return 99; case 27:return 101; case 28:return 100; case 29:return 94; case 30:return 96; case 31:return 95; case 32:return 97; case 34:return 120; case 37:return 44; case 38:return 45; case 40:return 27; case 41:return 28; case 42:return 29; case 43:return 30; case 44:return 31; case 45:return 32; case 46:return 33; case 47:return 34; case 48:return 35; case 49:return 36; case 57:return 1; case 58:return 2; case 59:return 3; case 60:return 4; case 61:return 5; case 62:return 6; case 63:return 7; case 64:return 8; case 65:return 9; case 66:return 10 }} return 0} function make_unidentified(param){return 0} function run_next(value,f,v){return v?v:caml_call1(f,value)} function symbol$11(x,f){return caml_call1(f,x)} function of_event(evt) {var _fF_=evt.keyCode; function _fG_(_fL_){return run_next(_fF_,try_key_code_normal,_fL_)} var match=evt.location,switcher=match - 1 | 0; if(2 < switcher >>> 0) var _fH_=make_unidentified; else switch(switcher) {case 0: var _fC_=evt.keyCode, _fH_=function(_fJ_){return run_next(_fC_,try_key_code_left,_fJ_)}; break; case 1: var _fD_=evt.keyCode, _fH_=function(_fI_){return run_next(_fD_,try_key_code_right,_fI_)}; break; default: var _fE_=evt.keyCode, _fH_=function(_fK_){return run_next(_fE_,try_key_code_numpad,_fK_)}} var value=evt.code; return symbol$11 (symbol$11 (symbol$11 (0, function(v) {return v?v:caml_call3(Optdef[7],value,make_unidentified,f)}), _fH_), _fG_)} function char_of_int(value) {if(caml_call2(symbol$5,0,value)) try {var _fA_=[0,caml_call1(Stdlib_Uchar[8],value)];return _fA_} catch(_fB_){return 0} return 0} function empty_string(param){return ""} function none(param){return 0} function of_event$0(evt) {var t110=caml_call2(Optdef[8],evt.key,empty_string),match=t110.length; return 0 === match ?caml_call3(Optdef[7],evt.charCode,none,char_of_int) :1 === match?char_of_int(t110.charCodeAt(0) | 0):0} function element$1(_fz_){return _fz_} function tagged(e) {var t112=e.tagName,tag=caml_string_of_jsbytes(t112.toLowerCase()); if(caml_call2(symbol$8,caml_ml_string_length(tag),0))return [61,e]; var match=runtime.caml_string_unsafe_get(tag,0),switcher=match - 97 | 0; if(! (21 < switcher >>> 0)) switch(switcher) {case 0: return caml_string_notequal(tag,cst_a$1) ?caml_string_notequal(tag,cst_area$1) ?caml_string_notequal(tag,cst_audio$1)?[61,e]:[2,e] :[1,e] :[0,e]; case 1: return caml_string_notequal(tag,cst_base$1) ?caml_string_notequal(tag,cst_blockquote$1) ?caml_string_notequal(tag,cst_body$1) ?caml_string_notequal(tag,cst_br$1) ?caml_string_notequal(tag,cst_button$1)?[61,e]:[7,e] :[6,e] :[5,e] :[4,e] :[3,e]; case 2: return caml_string_notequal(tag,cst_canvas$1) ?caml_string_notequal(tag,cst_caption$1) ?caml_string_notequal(tag,cst_col$1) ?caml_string_notequal(tag,cst_colgroup$1)?[61,e]:[11,e] :[10,e] :[9,e] :[8,e]; case 3: return caml_string_notequal(tag,cst_del$1) ?caml_string_notequal(tag,cst_div$1) ?caml_string_notequal(tag,cst_dl$1)?[61,e]:[14,e] :[13,e] :[12,e]; case 4:return caml_string_notequal(tag,cst_embed$1)?[61,e]:[15,e]; case 5: return caml_string_notequal(tag,cst_fieldset$1) ?caml_string_notequal(tag,cst_form$1) ?caml_string_notequal(tag,cst_frame$1) ?caml_string_notequal(tag,cst_frameset$1)?[61,e]:[18,e] :[19,e] :[17,e] :[16,e]; case 7: return caml_string_notequal(tag,cst_h1$1) ?caml_string_notequal(tag,cst_h2$1) ?caml_string_notequal(tag,cst_h3$1) ?caml_string_notequal(tag,cst_h4$1) ?caml_string_notequal(tag,cst_h5$1) ?caml_string_notequal(tag,cst_h6$1) ?caml_string_notequal(tag,cst_head$1) ?caml_string_notequal(tag,cst_hr$1) ?caml_string_notequal(tag,cst_html$1)?[61,e]:[28,e] :[27,e] :[26,e] :[25,e] :[24,e] :[23,e] :[22,e] :[21,e] :[20,e]; case 8: return caml_string_notequal(tag,cst_iframe$1) ?caml_string_notequal(tag,cst_img$1) ?caml_string_notequal(tag,cst_input$2) ?caml_string_notequal(tag,cst_ins$1)?[61,e]:[32,e] :[31,e] :[30,e] :[29,e]; case 11: return caml_string_notequal(tag,cst_label$1) ?caml_string_notequal(tag,cst_legend$1) ?caml_string_notequal(tag,cst_li$1) ?caml_string_notequal(tag,cst_link$1)?[61,e]:[36,e] :[35,e] :[34,e] :[33,e]; case 12: return caml_string_notequal(tag,cst_map$1) ?caml_string_notequal(tag,cst_meta$1)?[61,e]:[38,e] :[37,e]; case 14: return caml_string_notequal(tag,cst_object$1) ?caml_string_notequal(tag,cst_ol$1) ?caml_string_notequal(tag,cst_optgroup$1) ?caml_string_notequal(tag,cst_option$1)?[61,e]:[42,e] :[41,e] :[40,e] :[39,e]; case 15: return caml_string_notequal(tag,cst_p$1) ?caml_string_notequal(tag,cst_param$1) ?caml_string_notequal(tag,cst_pre$1)?[61,e]:[45,e] :[44,e] :[43,e]; case 16:return caml_string_notequal(tag,cst_q$1)?[61,e]:[46,e]; case 18: return caml_string_notequal(tag,cst_script$1) ?caml_string_notequal(tag,cst_select$2) ?caml_string_notequal(tag,cst_style$1)?[61,e]:[49,e] :[48,e] :[47,e]; case 19: return caml_string_notequal(tag,cst_table$1) ?caml_string_notequal(tag,cst_tbody$1) ?caml_string_notequal(tag,cst_td$1) ?caml_string_notequal(tag,cst_textarea$1) ?caml_string_notequal(tag,cst_tfoot$1) ?caml_string_notequal(tag,cst_th$1) ?caml_string_notequal(tag,cst_thead$1) ?caml_string_notequal(tag,cst_title$1) ?caml_string_notequal(tag,cst_tr$1)?[61,e]:[58,e] :[57,e] :[56,e] :[55,e] :[54,e] :[53,e] :[52,e] :[51,e] :[50,e]; case 20:return caml_string_notequal(tag,cst_ul$1)?[61,e]:[59,e]; case 21:return caml_string_notequal(tag,cst_video$1)?[61,e]:[60,e] } return [61,e]} function opt_tagged(e) {function _fx_(e){return [0,tagged(e)]} function _fy_(param){return 0} return caml_call3(Opt[7],e,_fy_,_fx_)} function taggedEvent(ev) {function _ff_(ev){return [0,ev]} function _fg_(param) {function _fi_(ev){return [1,ev]} function _fj_(param) {function _fl_(ev){return [3,ev]} function _fm_(param) {function _fo_(ev){return [4,ev]} function _fp_(param) {function _fr_(ev){return [5,ev]} function _fs_(param) {function _fu_(ev){return [2,ev]} function _fv_(param){return [6,ev]} var _fw_=messageEvent(ev); return caml_call3(Opt[7],_fw_,_fv_,_fu_)} var _ft_=popStateEvent(ev); return caml_call3(Opt[7],_ft_,_fs_,_fr_)} var _fq_=mouseScrollEvent(ev); return caml_call3(Opt[7],_fq_,_fp_,_fo_)} var _fn_=wheelEvent(ev); return caml_call3(Opt[7],_fn_,_fm_,_fl_)} var _fk_=keyboardEvent(ev); return caml_call3(Opt[7],_fk_,_fj_,_fi_)} var _fh_=mouseEvent(ev); return caml_call3(Opt[7],_fh_,_fg_,_ff_)} function opt_taggedEvent(ev) {function _fd_(ev){return [0,taggedEvent(ev)]} function _fe_(param){return 0} return caml_call3(Opt[7],ev,_fe_,_fd_)} function stopPropagation(ev) {function _fb_(param){return ev.stopPropagation()} function _fc_(param){return ev.cancelBubble = t25} return caml_call3(Optdef[7],ev.stopPropagation,_fc_,_fb_)} var requestAnimationFrame= runtime.caml_js_pure_expr (function(param) {var l= [0, _j_.requestAnimationFrame, [0, _j_.mozRequestAnimationFrame, [0, _j_.webkitRequestAnimationFrame, [0, _j_.oRequestAnimationFrame, [0,_j_.msRequestAnimationFrame,0]]]]]; try {var _e__=function(c){return caml_call1(Optdef[5],c)}, req=caml_call2(Stdlib_List[38],_e__,l), _e$_=function(callback){return req(callback)}; return _e$_} catch(_fa_) {_fa_ = caml_wrap_exception(_fa_); if(_fa_ === Stdlib[8]) {var now=function(param){var t123=new t122();return t123.getTime()}, last=[0,now(0)]; return function(callback) {var t=now(0), dt=last[1] + 16.6666666666666679 - t, dt$0=dt < 0.?0.:dt; last[1] = t; _j_.setTimeout(callback,dt$0); return 0}} throw _fa_}}); function hasPushState(param) {var t128=_j_.history;return caml_call1(Optdef[5],t128.pushState)} function hasPlaceholder(param) {var t129=createInput(0,0,t87); return caml_call1(Optdef[5],t129.placeholder)} function hasRequired(param) {var t130=createInput(0,0,t87); return caml_call1(Optdef[5],t130.required)} var overflow_limit=2147483000.; function setTimeout(callback,d) {var id=[0,0]; function loop(step,param) {if(2147483000. < step) var remain=step - 2147483000.,step$0=overflow_limit; else var remain=0.,step$0=step; var cb=remain == 0.?callback:function(_e9_){return loop(remain,_e9_)}, t131=caml_js_wrap_callback(cb); id[1] = [0,_j_.setTimeout(t131,step$0)]; return 0} loop(d,0); return id} function clearTimeout(id) {var _e8_=id[1]; if(_e8_){var x=_e8_[1];id[1] = 0;return _j_.clearTimeout(x)} return 0} function js_array_of_collection(c){return [].slice.call(c)} var Js_of_ocaml_Dom_html= [0, d, t87, getElementById_opt, getElementById_exn, getElementById_coerce, getElementById, location_origin, _j_, no_handler, handler, full_handler, invoke_handler, eventTarget, eventRelatedTarget, Event$0, addEventListenerWithOptions, addEventListener, removeEventListener, addMousewheelEventListenerWith, addMousewheelEventListener, createCustomEvent, buttonPressed, eventAbsolutePosition$0, elementClientPosition, getDocumentScroll, [0,of_event,try_key_code_normal], [0,of_event$0], createHtml, createHead, createLink, createTitle, createMeta, createBase, createStyle, createBody, createForm, createOptgroup, createOption, createSelect, createInput, createTextarea, createButton, createLabel, createFieldset, createLegend, createUl, createOl, createDl, createLi, createDiv, createEmbed, createP, createH1, createH2, createH3, createH4, createH5, createH6, createQ, createBlockquote, createPre, createBr, createHr, createIns, createDel, createA, createImg, createObject, createParam, createMap, createArea, createScript, createTable, createCaption, createCol, createColgroup, createThead, createTfoot, createTbody, createTr, createTh, createTd, createSub, createSup, createSpan, createTt, createI, createB, createBig, createSmall, createEm, createStrong, createCite, createDfn, createCode, createSamp, createKbd, createVar, createAbbr, createDd, createDt, createNoscript, createAddress, createFrameset, createFrame, createIframe, createAudio, createVideo, Canvas_not_available, createCanvas, element$1, tagged, opt_tagged, taggedEvent, opt_taggedEvent, stopPropagation, [0, element$0, a, area, audio, base, blockquote, body, br, button, canvas, caption, col, colgroup, del, div, embed, dl, fieldset, form, frameset, frame, h1, h2, h3, h4, h5, h6, head, hr, html, iframe, img, input$0, ins, label, legend, li, link, map$2, meta, object, ol, optgroup, option$1, p, param, pre, q, script, select$0, style, table, tbody, td, textarea, tfoot, th, thead, title, tr, ul, video, mouseEvent, keyboardEvent, wheelEvent, mouseScrollEvent, popStateEvent, messageEvent], setTimeout, clearTimeout, js_array_of_collection, requestAnimationFrame, runtime.caml_js_html_entities, onIE, hasPushState, hasPlaceholder, hasRequired]; caml_register_global(1651,Js_of_ocaml_Dom_html,"Js_of_ocaml__Dom_html"); var formData=Unsafe[1].FormData,formData_form=Unsafe[1].FormData; function filter_map$0(f,param) {var param$0=param; for(;;) {if(param$0) {var q=param$0[2],v=param$0[1],match=caml_call1(f,v); if(match){var v$0=match[1];return [0,v$0,filter_map$0(f,q)]} var param$0=q; continue} return 0}} function have_content(elt) {var t3=elt.name, _e6_=caml_call2(symbol$9,t3.length,0), _e7_=_e6_?1 - (elt.disabled | 0):_e6_; return _e7_} function form_elements(get,form) {var t34=form.elements,i$2=t34.length - 1 | 0,acc=0,i=i$2; for(;;) {if(caml_call2(symbol$5,i,0)) {var _eX_= function(v$2) {var match$3=tagged(v$2); switch(match$3[0]) {case 31: var v=match$3[1]; if(get)var sth=get[1],get$0=sth;else var get$0=0; if(have_content(v)) {var name$1=caml_string_of_jsstring(v.name), value=v.value, t20=v.type, match=caml_string_of_jsbytes(t20.toLowerCase()); if(caml_string_notequal(match,cst_checkbox)) {if(! caml_string_notequal(match,cst_file)) {if(get$0)return [0,[0,name$1,[0,-976970511,value]],0]; var match$0=caml_call1(Optdef[10],v.files); if(match$0) {var list=match$0[1]; if(caml_call2(symbol$8,list.length,0)) return [0,[0,name$1,[0,-976970511,""]],0]; var match$1=caml_call1(Optdef[10],v.multiple); if(match$1 && match$1[1]) {var _e1_=function(t28){return list.item(t28)}, _e2_=caml_call2(Stdlib_Array[2],list.length,_e1_), _e3_=caml_call1(Stdlib_Array[11],_e2_); return filter_map$0 (function(f) {var match=caml_call1(Opt[10],f); if(match) {var file=match[1];return [0,[0,name$1,[0,781515420,file]]]} return 0}, _e3_)} var _e4_=list.item(0),match$2=caml_call1(Opt[10],_e4_); if(match$2) {var file=match$2[1]; return [0,[0,name$1,[0,781515420,file]],0]} return 0} return 0} var switch$0=0; if(caml_string_notequal(match,cst_password)) {if(caml_string_notequal(match,cst_radio)) {var switch$1=0; if (caml_string_notequal(match,cst_reset) && caml_string_notequal(match,cst_submit$0)) {if(caml_string_notequal(match,cst_text)) return [0,[0,name$1,[0,-976970511,value]],0]; switch$0 = 1; switch$1 = 1} if(! switch$1)return 0}} else switch$0 = 1; if(switch$0)return [0,[0,name$1,[0,-976970511,value]],0]} return v.checked | 0?[0,[0,name$1,[0,-976970511,value]],0]:0} return 0; case 48: var v$0=match$3[1]; if(have_content(v$0)) {var name$0=caml_string_of_jsstring(v$0.name); if(v$0.multiple | 0) {var _eZ_= function(i) {var t13=v$0.options,_e5_=t13.item(i); return caml_call1(Opt[10],_e5_)}, t10=v$0.options, options=caml_call2(Stdlib_Array[2],t10.length,_eZ_), _e0_=caml_call1(Stdlib_Array[11],options); return filter_map$0 (function(param) {if(param) {var e=param[1]; return e.selected | 0 ?[0,[0,name$0,[0,-976970511,e.value]]] :0} return 0}, _e0_)} return [0,[0,name$0,[0,-976970511,v$0.value]],0]} return 0; case 53: var v$1=match$3[1]; if(have_content(v$1)) {var name=caml_string_of_jsstring(v$1.name); return [0,[0,name,[0,-976970511,v$1.value]],0]} return 0; default:return 0}}, _eY_=caml_call2(Stdlib_List[19],_eX_,acc); return caml_call1(Stdlib_List[14],_eY_)} var t32=form.elements,_eW_=t32.item(i),match=caml_call1(Opt[10],_eW_); if(match) {var x=match[1],i$0=i - 1 | 0,acc$0=[0,x,acc],acc=acc$0,i=i$0; continue} var i$1=i - i | 0,i=i$1; continue}} function append(form_contents,form_elt) {if(891486873 <= form_contents[1]) {var list=form_contents[2];list[1] = [0,form_elt,list[1]];return 0} var f=form_contents[2],_eU_=form_elt[2],_eV_=form_elt[1]; if(781515420 <= _eU_[1]) {var file=_eU_[2],t38=caml_jsstring_of_string(_eV_); return f.append(t38,file)} var s=_eU_[2],t35=caml_jsstring_of_string(_eV_); return f.append(t35,s)} function empty_form_contents(param) {var match=caml_call1(Optdef[10],formData); if(match){var constr=match[1];return [0,808620462,new constr()]} return [0,891486873,[0,0]]} function post_form_contents(form) {var contents=empty_form_contents(0),_eR_=form_elements(0,form); function _eS_(_eT_){return append(contents,_eT_)} caml_call2(Stdlib_List[17],_eS_,_eR_); return contents} function get_form_contents(form) {var _eO_=form_elements(_n_,form); function _eP_(param) {var _eQ_=param[2]; if(typeof _eQ_ !== "number" && -976970511 === _eQ_[1]) {var s=_eQ_[2],name=param[1]; return [0,name,caml_string_of_jsstring(s)]} throw [0,Assert_failure,_o_]} return caml_call2(Stdlib_List[19],_eP_,_eO_)} var Js_of_ocaml_Form= [0, formData, formData_form, append, post_form_contents, get_form_contents, empty_form_contents, form_elements]; caml_register_global(1652,Js_of_ocaml_Form,"Js_of_ocaml__Form"); var readystatechange=caml_call1(Event[1],cst_readystatechange), loadstart$1=caml_call1(Event[1],cst_loadstart$1), progress$1=caml_call1(Event[1],cst_progress$1), abort$1=caml_call1(Event[1],cst_abort$1), error$1=caml_call1(Event[1],cst_error$1), load$1=caml_call1(Event[1],cst_load$1), timeout=caml_call1(Event[1],cst_timeout), loadend$0=caml_call1(Event[1],cst_loadend$0), Event$1= [0, readystatechange, loadstart$1, progress$1, abort$1, error$1, load$1, timeout, loadend$0], Js_of_ocaml_XmlHttpRequest=[0,runtime.caml_xmlhttprequest_create,Event$1]; caml_register_global (1653,Js_of_ocaml_XmlHttpRequest,"Js_of_ocaml__XmlHttpRequest"); var t2=Unsafe[1].Worker; function create(script) {var t1=caml_jsstring_of_string(script);return new t2(t1)} function import_scripts(scripts) {if(Unsafe[1].importScripts === t39) caml_call1(Stdlib[1],cst_Worker_import_scripts_is_u); var _eL_=caml_call1(Stdlib_Array[12],scripts); function _eM_(s){return caml_jsstring_of_string(s)} var _eN_=caml_call2(Stdlib_Array[15],_eM_,_eL_); return runtime.caml_js_fun_call(Unsafe[1].importScripts,_eN_)} function set_onmessage(handler) {if(Unsafe[1].onmessage === t39) caml_call1(Stdlib[1],cst_Worker_onmessage_is_undefi); function js_handler(ev){return caml_call1(handler,ev.data)} var t7=caml_js_wrap_callback(js_handler); return Unsafe[1].onmessage = t7} function post_message(t10) {if(Unsafe[1].postMessage === t39) caml_call1(Stdlib[1],cst_Worker_onmessage_is_undefi$0); return Unsafe[1].postMessage(t10)} var Js_of_ocaml_Worker= [0,create,import_scripts,set_onmessage,post_message]; caml_register_global(1654,Js_of_ocaml_Worker,"Js_of_ocaml__Worker"); var webSocket=Unsafe[1].WebSocket; function is_supported(param){return caml_call1(Optdef[5],webSocket)} var Js_of_ocaml_WebSockets=[0,webSocket,webSocket,webSocket,is_supported]; caml_register_global (1655,Js_of_ocaml_WebSockets,"Js_of_ocaml__WebSockets"); var defaultContextAttributes= {"alpha":t25, "depth":t25, "stencil":t4, "antialias":t25, "premultipliedAlpha":t4, "preserveDrawingBuffer":t4, "preferLowPowerToHighPerformance":t4, "failIfMajorPerformanceCaveat":t4}, webglcontextlost=caml_call1(Event$0[87],cst_webglcontextlost), webglcontextrestored=caml_call1(Event$0[87],cst_webglcontextrestored), webglcontextcreationerror= caml_call1(Event$0[87],cst_webglcontextcreationerror), Event$2= [0,webglcontextlost,webglcontextrestored,webglcontextcreationerror]; function getContext(t3) {var ctx=t3.getContext("webgl"); return caml_call1(Opt[5],ctx)?ctx:t3.getContext("experimental-webgl")} function getContextWithAttributes(t9,t8) {var ctx=t9.getContext("webgl",t8); return caml_call1(Opt[5],ctx)?ctx:t9.getContext("experimental-webgl",t8)} var Js_of_ocaml_WebGL= [0,defaultContextAttributes,Event$2,getContext,getContextWithAttributes]; caml_register_global(1656,Js_of_ocaml_WebGL,"Js_of_ocaml__WebGL"); function regexp(s) {var t0=caml_jsbytes_of_string(s);return new t11(t0,"g")} function regexp_case_fold(s) {var t3=caml_jsbytes_of_string(s);return new t11(t3,"gi")} function regexp_with_flag(s,f) {var t7=caml_jsstring_of_string(caml_call2(Stdlib[28],cst_g,f)), t6=caml_jsbytes_of_string(s); return new t11(t6,t7)} function blunt_str_array_get(a,i) {function _eK_(param){throw [0,Assert_failure,_p_]} return caml_string_of_jsbytes(caml_call2(Optdef[8],a[i],_eK_))} function string_match(r,s,i) {r.lastIndex = i; var t11=caml_jsbytes_of_string(s), _eI_=r.exec(t11), _eJ_=caml_call2(Opt[3],_eI_,match_result); return caml_call1(Opt[10],_eJ_)} function search_forward(r,s,i) {r.lastIndex = i; var t15=caml_jsbytes_of_string(s); function _eF_(t17){return [0,t17.index,t17]} var _eG_=r.exec(t15),_eH_=caml_call2(Opt[3],_eG_,_eF_); return caml_call1(Opt[10],_eH_)} function matched_string(r){return blunt_str_array_get(r,0)} function matched_group(r,i) {var _eE_=caml_call2(Optdef[3],r[i],caml_string_of_jsbytes); return caml_call1(Optdef[10],_eE_)} var t21=new t11("[$]","g"); function quote_repl(s) {var t23=caml_jsbytes_of_string(s);return t23.replace(t21,"$$$$")} function global_replace(r,s,s_by) {r.lastIndex = 0; var t27=quote_repl(s_by),t28=caml_jsbytes_of_string(s); return caml_string_of_jsbytes(t28.replace(r,t27))} function replace_first(r,s,s_by) {var match=r.ignoreCase | 0, match$0=r.multiline | 0, flags=match?match$0?"mi":"i":match$0?"m":"", t32=r.source, t35=new t11(t32,flags), t36=quote_repl(s_by), t37=caml_jsbytes_of_string(s); return caml_string_of_jsbytes(t37.replace(t35,t36))} function list_of_js_array(a) {var idx$1=a.length - 1 | 0,accu=0,idx=idx$1; for(;;) {if(caml_call2(symbol$5,idx,0))return accu; var idx$0=idx - 1 | 0, accu$0=[0,blunt_str_array_get(a,idx),accu], accu=accu$0, idx=idx$0; continue}} function split(r,s) {r.lastIndex = 0; var t42=caml_jsbytes_of_string(s); return list_of_js_array(t42.split(r))} function bounded_split(r,s,i) {r.lastIndex = 0; var t47=caml_jsbytes_of_string(s); return list_of_js_array(t47.split(r,i))} var t48=regexp(cst); function quote(s) {var t50=caml_jsbytes_of_string(s); return caml_string_of_jsbytes(t50.replace(t48,"\\$&"))} function regexp_string(s){return regexp(quote(s))} function regexp_string_case_fold(s){return regexp_case_fold(quote(s))} var Js_of_ocaml_Regexp= [0, regexp, regexp_case_fold, regexp_with_flag, quote, regexp_string, regexp_string_case_fold, string_match, search_forward, search_forward, matched_string, matched_group, global_replace, replace_first, split, bounded_split]; caml_register_global(1657,Js_of_ocaml_Regexp,"Js_of_ocaml__Regexp"); var Local_exn=[248,cst_Js_of_ocaml_Url_Local_exn,caml_fresh_oo_id(0)]; function interrupt(param){throw Local_exn} var plus_re=regexp_string(cst$0),t14=new t11("\\+","g"); function urldecode_js_string_string(s) {t14.lastIndex = 0; return caml_string_of_jsbytes(unescape(s.replace(t14," ")))} function urldecode(s) {return caml_string_of_jsbytes (unescape (caml_jsbytes_of_string(global_replace(plus_re,s,cst$1))))} function urlencode(opt,s) {if(opt)var sth=opt[1],with_plus=sth;else var with_plus=1; if(with_plus) {var s$0=caml_string_of_jsbytes(escape(caml_jsbytes_of_string(s))); return global_replace(plus_re,s$0,cst_2B)} return caml_string_of_jsbytes(escape(caml_jsbytes_of_string(s)))} var Not_an_http_protocol= [248,cst_Js_of_ocaml_Url_Not_an_htt,caml_fresh_oo_id(0)], default_http_port=80, default_https_port=443; function path_of_path_string(s) {var l=caml_ml_string_length(s); function aux(i) {try {var _eC_=caml_call3(String[30],s,i,47),j=_eC_} catch(_eD_) {_eD_ = caml_wrap_exception(_eD_); if(_eD_ !== Stdlib[8])throw _eD_; var j=l} var word=caml_call3(String[14],s,i,j - i | 0); return caml_call2(symbol$10,j,l)?[0,word,0]:[0,word,aux(j + 1 | 0)]} var a=aux(0); if(a && ! caml_string_notequal(a[1],cst$2)) {var _eB_=a[2]; if(! _eB_)return 0; if(! caml_string_notequal(_eB_[1],cst$3) && ! _eB_[2])return _q_} return a} function encode_arguments(l) {function _ew_(param) {var v=param[2], n=param[1], _ey_=urlencode(0,v), _ez_=caml_call2(Stdlib[28],cst$4,_ey_), _eA_=urlencode(0,n); return caml_call2(Stdlib[28],_eA_,_ez_)} var _ex_=caml_call2(Stdlib_List[19],_ew_,l); return caml_call2(String[6],cst$5,_ex_)} function decode_arguments_js_string(s) {var t0=caml_jsstring_of_string(caml_call2(String[1],1,38)), t18=s.split(t0), len=t18.length; function aux(acc,idx) {var idx$0=idx; for(;;) {if(caml_call2(symbol$5,idx$0,0))return acc; try {var _eo_=idx$0 - 1 | 0, _ep_= function(s) {function _eu_(param) {var y=param[2], x=param[1], _ev_=urldecode_js_string_string(y); return [0,urldecode_js_string_string(x),_ev_]} var t2=caml_jsstring_of_string(caml_call2(String[1],1,61)), t5=s.indexOf(t2); if(caml_call2(symbol$5,t5,0)) var _et_=t39; else var t7=t5 + 1 | 0, _es_=s.slice(t7), _et_=[0,s.slice(0,t5),_es_]; return caml_call3(Optdef[7],_et_,interrupt,_eu_)}, _eq_= aux ([0,caml_call3(Optdef[7],t18[idx$0],interrupt,_ep_),acc],_eo_); return _eq_} catch(_er_) {_er_ = caml_wrap_exception(_er_); if(_er_ === Local_exn) {var idx$1=idx$0 - 1 | 0,idx$0=idx$1;continue} throw _er_}}} return aux(0,len - 1 | 0)} function decode_arguments(s) {return decode_arguments_js_string(caml_jsbytes_of_string(s))} var t19=caml_jsbytes_of_string(cst_Hh_Tt_Tt_Pp_Ss_0_9a_zA_Z_0), t24=new t11(t19), t21$0=caml_jsbytes_of_string(cst_Ff_Ii_Ll_Ee), t26=new t11(t21$0); function url_of_js_string(s) {function _d7_(res) {var prot_string=caml_call2(Optdef[8],res[1],interrupt), match=caml_string_of_jsbytes(prot_string.toLowerCase()); if (caml_string_notequal(match,cst_file$0) && caml_string_notequal(match,cst_file$1)) {var switch$0=0; if (caml_string_notequal(match,cst_http) && caml_string_notequal(match,cst_http$0)) {var switch$1=0; if (caml_string_notequal(match,cst_https) && caml_string_notequal(match,cst_https$0)) switch$1 = 1; if(! switch$1){var ssl=1;switch$0 = 2}} else switch$0 = 1; var switch$2=0; switch(switch$0) {case 1:var ssl=0;switch$2 = 1;break; case 0:break; default:switch$2 = 1} if(switch$2) {var _ef_=function(param){return caml_jsbytes_of_string(cst$7)}, path_str= urldecode_js_string_string(caml_call2(Optdef[8],res[6],_ef_)), _eg_=function(param){return caml_jsbytes_of_string(cst$8)}, _eh_= urldecode_js_string_string(caml_call2(Optdef[8],res[10],_eg_)), _ei_=function(param){return caml_jsbytes_of_string(cst$9)}, _ej_= decode_arguments_js_string(caml_call2(Optdef[8],res[8],_ei_)), _ek_=path_of_path_string(path_str), _el_=function(param){return caml_jsbytes_of_string(cst$10)}, s=caml_string_of_jsbytes(caml_call2(Optdef[8],res[4],_el_)), _em_= caml_string_notequal(s,cst$6)?caml_int_of_string(s):ssl?443:80, url= [0, urldecode_js_string_string (caml_call2(Optdef[8],res[2],interrupt)), _em_, _ek_, path_str, _ej_, _eh_], _en_=ssl?[1,url]:[0,url]; return [0,_en_]}} throw Not_an_http_protocol} function _d8_(param) {function _d__(res) {var path_str= urldecode_js_string_string(caml_call2(Optdef[8],res[2],interrupt)); function _eb_(param){return caml_jsbytes_of_string(cst$11)} var _ec_=caml_string_of_jsbytes(caml_call2(Optdef[8],res[6],_eb_)); function _ed_(param){return caml_jsbytes_of_string(cst$12)} var _ee_= decode_arguments_js_string(caml_call2(Optdef[8],res[4],_ed_)); return [0,[2,[0,path_of_path_string(path_str),path_str,_ee_,_ec_]]]} function _d$_(param){return 0} var _ea_=t26.exec(s); return caml_call3(Opt[7],_ea_,_d$_,_d__)} var _d9_=t24.exec(s); return caml_call3(Opt[7],_d9_,_d8_,_d7_)} function url_of_string(s) {return url_of_js_string(caml_jsbytes_of_string(s))} function string_of_url(param) {switch(param[0]) {case 0: var match=param[1], frag=match[6], args=match[5], path=match[3], port=match[2], host=match[1]; if(caml_string_notequal(frag,cst$13)) var _du_=urlencode(0,frag),_dv_=caml_call2(Stdlib[28],cst$14,_du_); else var _dv_=cst$21; if(args) var _dw_=encode_arguments(args), _dx_=caml_call2(Stdlib[28],cst$15,_dw_); else var _dx_=cst$20; var _dy_=caml_call2(Stdlib[28],_dx_,_dv_), _dz_=function(x){return urlencode(0,x)}, _dA_=caml_call2(Stdlib_List[19],_dz_,path), _dB_=caml_call2(String[6],cst$16,_dA_), _dC_=caml_call2(Stdlib[28],_dB_,_dy_), _dD_=caml_call2(Stdlib[28],cst$17,_dC_); if(80 === port) var _dE_=cst$18; else var _dI_=caml_call1(Stdlib[33],port), _dE_=caml_call2(Stdlib[28],cst$19,_dI_); var _dF_=caml_call2(Stdlib[28],_dE_,_dD_), _dG_=urlencode(0,host), _dH_=caml_call2(Stdlib[28],_dG_,_dF_); return caml_call2(Stdlib[28],cst_http$1,_dH_); case 1: var match$0=param[1], frag$0=match$0[6], args$0=match$0[5], path$0=match$0[3], port$0=match$0[2], host$0=match$0[1]; if(caml_string_notequal(frag$0,cst$22)) var _dJ_=urlencode(0,frag$0), _dK_=caml_call2(Stdlib[28],cst$23,_dJ_); else var _dK_=cst$30; if(args$0) var _dL_=encode_arguments(args$0), _dM_=caml_call2(Stdlib[28],cst$24,_dL_); else var _dM_=cst$29; var _dN_=caml_call2(Stdlib[28],_dM_,_dK_), _dO_=function(x){return urlencode(0,x)}, _dP_=caml_call2(Stdlib_List[19],_dO_,path$0), _dQ_=caml_call2(String[6],cst$25,_dP_), _dR_=caml_call2(Stdlib[28],_dQ_,_dN_), _dS_=caml_call2(Stdlib[28],cst$26,_dR_); if(443 === port$0) var _dT_=cst$27; else var _dX_=caml_call1(Stdlib[33],port$0), _dT_=caml_call2(Stdlib[28],cst$28,_dX_); var _dU_=caml_call2(Stdlib[28],_dT_,_dS_), _dV_=urlencode(0,host$0), _dW_=caml_call2(Stdlib[28],_dV_,_dU_); return caml_call2(Stdlib[28],cst_https$1,_dW_); default: var match$1=param[1], frag$1=match$1[4], args$1=match$1[3], path$1=match$1[1]; if(caml_string_notequal(frag$1,cst$31)) var _dY_=urlencode(0,frag$1), _dZ_=caml_call2(Stdlib[28],cst$32,_dY_); else var _dZ_=cst$36; if(args$1) var _d0_=encode_arguments(args$1), _d1_=caml_call2(Stdlib[28],cst$33,_d0_); else var _d1_=cst$35; var _d2_=caml_call2(Stdlib[28],_d1_,_dZ_), _d3_=function(x){return urlencode(0,x)}, _d4_=caml_call2(Stdlib_List[19],_d3_,path$1), _d5_=caml_call2(String[6],cst$34,_d4_), _d6_=caml_call2(Stdlib[28],_d5_,_d2_); return caml_call2(Stdlib[28],cst_file$2,_d6_)}} var _r_=caml_call1(Optdef[2],_j_.location); if(caml_call1(Optdef[5],_r_)) var _s_=_j_.location; else var t42=function(param,_dt_){return 0}, t41$0=function(param,_ds_){return 0}, t40=function(param){return 0}, _s_= {"href":"", "protocol":"", "host":"", "hostname":"", "port":"", "pathname":"", "search":"", "hash":"", "origin":t39, "reload":caml_js_wrap_meth_callback(t40), "replace":caml_js_wrap_meth_callback(t41$0), "assign":caml_js_wrap_meth_callback(t42)}; var host=urldecode_js_string_string(_s_.hostname), protocol=urldecode_js_string_string(_s_.protocol), _t_=0, port= function(param) {try {var _dq_=[0,caml_int_of_string(caml_string_of_jsbytes(_s_.port))]; return _dq_} catch(_dr_) {_dr_ = caml_wrap_exception(_dr_); if(_dr_[1] === Stdlib[7])return 0; throw _dr_}} (_t_), path_string=urldecode_js_string_string(_s_.pathname), path=path_of_path_string(path_string), t49=_s_.search; if(t49.charAt(0) === "?") var t52=_s_.search,_u_=t52.slice(1); else var _u_=_s_.search; var arguments$0=decode_arguments_js_string(_u_); function get_fragment(param) {function _dn_(res){return caml_string_of_jsstring(res[1])} function _do_(param){return cst$37} var t57=new t11("#(.*)"),t58=_s_.href,_dp_=t58.match(t57); return caml_call3(Opt[7],_dp_,_do_,_dn_)} function set_fragment(s) {var t59=caml_jsbytes_of_string(urlencode(0,s));return _s_.hash = t59} function get$2(param){return url_of_js_string(_s_.href)} function set$0(u) {var t62=caml_jsbytes_of_string(string_of_url(u));return _s_.href = t62} var as_string=urldecode_js_string_string(_s_.href), Js_of_ocaml_Url= [0, urldecode, urlencode, default_http_port, default_https_port, path_of_path_string, encode_arguments, decode_arguments, url_of_string, string_of_url, [0, host, port, protocol, path_string, path, arguments$0, get_fragment, set_fragment, get$2, set$0, as_string]]; caml_register_global(1659,Js_of_ocaml_Url,"Js_of_ocaml__Url"); var Js_of_ocaml_Lib_version=[0,s,git_version]; caml_register_global (1660,Js_of_ocaml_Lib_version,"Js_of_ocaml__Lib_version"); function update_file(name,content) {var oc=caml_call1(Stdlib[60],name); caml_call2(Stdlib[66],oc,content); return caml_call1(Stdlib[76],oc)} function set_channel_flusher(out_channel,f) {var f$0= caml_js_wrap_callback (function(s){return caml_call1(f,caml_string_of_jsbytes(s))}); return runtime.caml_ml_set_channel_output(out_channel,f$0)} function set_channel_filler(in_channel,f) {var f$0=caml_js_wrap_callback(f); return runtime.caml_ml_set_channel_refill(in_channel,f$0)} function mount(path,f) {return runtime.caml_mount_autoload (path, caml_js_wrap_callback (function(prefix,path){return caml_call2(f,prefix,path)}))} function unmount(path){return runtime.caml_unmount(path)} if(caml_call2(String[68],git_version,cst$38)) var js_of_ocaml_version=s; else var _co_=caml_call2(Stdlib[28],cst$41,git_version), js_of_ocaml_version=caml_call2(Stdlib[28],s,_co_); var _v_=runtime.caml_create_file, _w_=runtime.caml_read_file_content, Js_of_ocaml_Sys_js= [0, set_channel_flusher, set_channel_filler, function(_dm_){return runtime.caml_list_mount_point(_dm_)}, unmount, mount, _w_, _v_, update_file, js_of_ocaml_version]; caml_register_global(1661,Js_of_ocaml_Sys_js,"Js_of_ocaml__Sys_js"); function empty_resize_observer_options(param){return {}} var t2$0=Unsafe[1].ResizeObserver; function is_supported$0(param){return caml_call1(Optdef[5],t2$0)} function observe(node,f,box,param) {var t1=caml_js_wrap_callback(f),t4=new t2$0(t1); if(box) {var box$0=box[1],t8={};t8.box = box$0;t4.observe(node,t8)} else t4.observe(node); return t4} var Js_of_ocaml_ResizeObserver= [0,empty_resize_observer_options,t2$0,is_supported$0,observe]; caml_register_global (1662,Js_of_ocaml_ResizeObserver,"Js_of_ocaml__ResizeObserver"); var t4$1=Unsafe[1].PerformanceObserver; function is_supported$1(param){return caml_call1(Optdef[5],t4$1)} function observe$0(entry_types,f) {var _dl_= caml_call1 (caml_call1(Stdlib_List[19],caml_jsstring_of_string),entry_types), t1=caml_js_from_array(caml_call1(Stdlib_Array[12],_dl_)), t5={}; t5.entryTypes = t1; var t3=caml_js_wrap_callback(f),t6=new t4$1(t3); t6.observe(t5); return t6} var Js_of_ocaml_PerformanceObserve=[0,t4$1,is_supported$1,observe$0]; caml_register_global (1663,Js_of_ocaml_PerformanceObserve,"Js_of_ocaml__PerformanceObserver"); function empty_mutation_observer_init(param){return {}} var t2$1=Unsafe[1].MutationObserver; function is_supported$2(param){return caml_call1(Optdef[5],t2$1)} function observe$1 (node, f, child_list, attributes, character_data, subtree, attribute_old_value, character_data_old_value, attribute_filter, param) {function opt_iter(x,f) {if(x){var x$0=x[1];return caml_call1(f,x$0)}return 0} var t1=caml_js_wrap_callback(f),t19=new t2$1(t1),t18={}; opt_iter(child_list,function(t3){return t18.childList = t3}); opt_iter(attributes,function(t5){return t18.attributes = t5}); opt_iter(character_data,function(t7){return t18.characterData = t7}); opt_iter(subtree,function(t9){return t18.subtree = t9}); opt_iter (attribute_old_value,function(t11){return t18.attributeOldValue = t11}); opt_iter (character_data_old_value, function(t13){return t18.characterDataOldValue = t13}); opt_iter (attribute_filter, function(l) {var t15=caml_js_from_array(caml_call1(Stdlib_Array[12],l)); return t18.attributeFilter = t15}); t19.observe(node,t18); return t19} var Js_of_ocaml_MutationObserver= [0,empty_mutation_observer_init,t2$1,is_supported$2,observe$1]; caml_register_global (1664,Js_of_ocaml_MutationObserver,"Js_of_ocaml__MutationObserver"); var t1=Unsafe[1].Object; function create$0(param){return new t1()} function add$0(t,k,v){return t[k.concat("_")] = v} function remove(t,k){return delete t[k.concat("_")]} function find(t,k){return t[k.concat("_")]} function keys(t) {var t10=Unsafe[1].Object, t11=t10.keys(t), res=[0,0], _dh_=t11.length - 1 | 0, _dg_=0; if(! (_dh_ < 0)) {var i=_dg_; for(;;) {var _di_=function(param){return caml_call1(Stdlib[2],cst_Jstable_keys)}, t15=caml_call2(Optdef[8],t11[i],_di_), t14=t15.length - 1 | 0, _dj_=res[1]; res[1] = [0,t15.substring(0,t14),_dj_]; var _dk_=i + 1 | 0; if(_dh_ !== i){var i=_dk_;continue} break}} return caml_call1(Stdlib_List[9],res[1])} var Js_of_ocaml_Jstable=[0,create$0,add$0,remove,find,keys]; caml_register_global(1665,Js_of_ocaml_Jstable,"Js_of_ocaml__Jstable"); var t11$1=Unsafe[1].JSON; function reviver(this$0,key,value) {if(typeof value === "string")return caml_string_of_jsbytes(value); if (value instanceof array_length && 4 === value.length && 255 === value[0]) return runtime.caml_int64_create_lo_mi_hi(value[1],value[2],value[3]); return value} var t3$0=caml_js_wrap_meth_callback(reviver); function unsafe_input(t2){return t11$1.parse(t2,t3$0)} var mlInt64_constr=t5.constructor; function t10(key,value) {var _df_=Stdlib_Obj[13]; return caml_call2(symbol$8,runtime.caml_obj_tag(value),_df_) ?caml_jsbytes_of_string(value) :value instanceof mlInt64_constr ?caml_js_from_array([0,255,value.lo,value.mi,value.hi]) :value} function output(t9){return t11$1.stringify(t9,t10)} var Js_of_ocaml_Json=[0,output,unsafe_input]; caml_register_global(1667,Js_of_ocaml_Json,"Js_of_ocaml__Json"); function string_of_name(param) {var _de_=param; if(74 <= _de_) {if(111 <= _de_) switch(_de_) {case 111:return cst_palevioletred; case 112:return cst_papayawhip; case 113:return cst_peachpuff; case 114:return cst_peru; case 115:return cst_pink; case 116:return cst_plum; case 117:return cst_powderblue; case 118:return cst_purple; case 119:return cst_red; case 120:return cst_rosybrown; case 121:return cst_royalblue; case 122:return cst_saddlebrown; case 123:return cst_salmon; case 124:return cst_sandybrown; case 125:return cst_seagreen; case 126:return cst_seashell; case 127:return cst_sienna; case 128:return cst_silver; case 129:return cst_skyblue; case 130:return cst_slateblue; case 131:return cst_slategray; case 132:return cst_slategrey; case 133:return cst_snow; case 134:return cst_springgreen; case 135:return cst_steelblue; case 136:return cst_tan; case 137:return cst_teal; case 138:return cst_thistle; case 139:return cst_tomato; case 140:return cst_turquoise; case 141:return cst_violet; case 142:return cst_wheat; case 143:return cst_white; case 144:return cst_whitesmoke; case 145:return cst_yellow; default:return cst_yellowgreen} switch(_de_) {case 74:return cst_lightpink; case 75:return cst_lightsalmon; case 76:return cst_lightseagreen; case 77:return cst_lightskyblue; case 78:return cst_lightslategray; case 79:return cst_lightslategrey; case 80:return cst_lightsteelblue; case 81:return cst_lightyellow; case 82:return cst_lime; case 83:return cst_limegreen; case 84:return cst_linen; case 85:return cst_magenta; case 86:return cst_maroon; case 87:return cst_mediumaquamarine; case 88:return cst_mediumblue; case 89:return cst_mediumorchid; case 90:return cst_mediumpurple; case 91:return cst_mediumseagreen; case 92:return cst_mediumslateblue; case 93:return cst_mediumspringgreen; case 94:return cst_mediumturquoise; case 95:return cst_mediumvioletred; case 96:return cst_midnightblue; case 97:return cst_mintcream; case 98:return cst_mistyrose; case 99:return cst_moccasin; case 100:return cst_navajowhite; case 101:return cst_navy; case 102:return cst_oldlace; case 103:return cst_olive; case 104:return cst_olivedrab; case 105:return cst_orange; case 106:return cst_orangered; case 107:return cst_orchid; case 108:return cst_palegoldenrod; case 109:return cst_palegreen; default:return cst_paleturquoise}} if(37 <= _de_) switch(_de_) {case 37:return cst_darkslategrey; case 38:return cst_darkturquoise; case 39:return cst_darkviolet; case 40:return cst_deeppink; case 41:return cst_deepskyblue; case 42:return cst_dimgray; case 43:return cst_dimgrey; case 44:return cst_dodgerblue; case 45:return cst_firebrick; case 46:return cst_floralwhite; case 47:return cst_forestgreen; case 48:return cst_fuchsia; case 49:return cst_gainsboro; case 50:return cst_ghostwhite; case 51:return cst_gold; case 52:return cst_goldenrod; case 53:return cst_gray; case 54:return cst_grey; case 55:return cst_green; case 56:return cst_greenyellow; case 57:return cst_honeydew; case 58:return cst_hotpink; case 59:return cst_indianred; case 60:return cst_indigo; case 61:return cst_ivory; case 62:return cst_khaki; case 63:return cst_lavender; case 64:return cst_lavenderblush; case 65:return cst_lawngreen; case 66:return cst_lemonchiffon; case 67:return cst_lightblue; case 68:return cst_lightcoral; case 69:return cst_lightcyan; case 70:return cst_lightgoldenrodyellow; case 71:return cst_lightgray; case 72:return cst_lightgreen; default:return cst_lightgrey} switch(_de_) {case 0:return cst_aliceblue; case 1:return cst_antiquewhite; case 2:return cst_aqua; case 3:return cst_aquamarine; case 4:return cst_azure; case 5:return cst_beige; case 6:return cst_bisque; case 7:return cst_black; case 8:return cst_blanchedalmond; case 9:return cst_blue; case 10:return cst_blueviolet; case 11:return cst_brown; case 12:return cst_burlywood; case 13:return cst_cadetblue; case 14:return cst_chartreuse; case 15:return cst_chocolate; case 16:return cst_coral; case 17:return cst_cornflowerblue; case 18:return cst_cornsilk; case 19:return cst_crimson; case 20:return cst_cyan; case 21:return cst_darkblue; case 22:return cst_darkcyan; case 23:return cst_darkgoldenrod; case 24:return cst_darkgray; case 25:return cst_darkgreen; case 26:return cst_darkgrey; case 27:return cst_darkkhaki; case 28:return cst_darkmagenta; case 29:return cst_darkolivegreen; case 30:return cst_darkorange; case 31:return cst_darkorchid; case 32:return cst_darkred; case 33:return cst_darksalmon; case 34:return cst_darkseagreen; case 35:return cst_darkslateblue; default:return cst_darkslategray}} function name_of_string(s) {var switch$0=caml_string_compare(s,cst_lightgrey$0); if(0 <= switch$0) {if(! (0 < switch$0))return 73; var switch$1=caml_string_compare(s,cst_paleturquoise$0); if(0 <= switch$1) {if(! (0 < switch$1))return 110; var switch$2=caml_string_compare(s,cst_skyblue$0); if(0 <= switch$2) {if(! (0 < switch$2))return 129; var switch$3=caml_string_compare(s,cst_thistle$0); if(0 <= switch$3) {if(! (0 < switch$3))return 138; if(! caml_string_notequal(s,cst_tomato$0))return 139; if(! caml_string_notequal(s,cst_turquoise$0))return 140; if(! caml_string_notequal(s,cst_violet$0))return 141; if(! caml_string_notequal(s,cst_wheat$0))return 142; if(! caml_string_notequal(s,cst_white$0))return 143; if(! caml_string_notequal(s,cst_whitesmoke$0))return 144; if(! caml_string_notequal(s,cst_yellow$0))return 145; if(! caml_string_notequal(s,cst_yellowgreen$0))return 146} else {if(! caml_string_notequal(s,cst_slateblue$0))return 130; if(! caml_string_notequal(s,cst_slategray$0))return 131; if(! caml_string_notequal(s,cst_slategrey$0))return 132; if(! caml_string_notequal(s,cst_snow$0))return 133; if(! caml_string_notequal(s,cst_springgreen$0))return 134; if(! caml_string_notequal(s,cst_steelblue$0))return 135; if(! caml_string_notequal(s,cst_tan$0))return 136; if(! caml_string_notequal(s,cst_teal$0))return 137}} else {var switch$4=caml_string_compare(s,cst_rosybrown$0); if(0 <= switch$4) {if(! (0 < switch$4))return 120; if(! caml_string_notequal(s,cst_royalblue$0))return 121; if(! caml_string_notequal(s,cst_saddlebrown$0))return 122; if(! caml_string_notequal(s,cst_salmon$0))return 123; if(! caml_string_notequal(s,cst_sandybrown$0))return 124; if(! caml_string_notequal(s,cst_seagreen$0))return 125; if(! caml_string_notequal(s,cst_seashell$0))return 126; if(! caml_string_notequal(s,cst_sienna$0))return 127; if(! caml_string_notequal(s,cst_silver$0))return 128} else {if(! caml_string_notequal(s,cst_palevioletred$0))return 111; if(! caml_string_notequal(s,cst_papayawhip$0))return 112; if(! caml_string_notequal(s,cst_peachpuff$0))return 113; if(! caml_string_notequal(s,cst_peru$0))return 114; if(! caml_string_notequal(s,cst_pink$0))return 115; if(! caml_string_notequal(s,cst_plum$0))return 116; if(! caml_string_notequal(s,cst_powderblue$0))return 117; if(! caml_string_notequal(s,cst_purple$0))return 118; if(! caml_string_notequal(s,cst_red$0))return 119}}} else {var switch$5=caml_string_compare(s,cst_mediumslateblue$0); if(0 <= switch$5) {if(! (0 < switch$5))return 92; var switch$6=caml_string_compare(s,cst_navy$0); if(0 <= switch$6) {if(! (0 < switch$6))return 101; if(! caml_string_notequal(s,cst_oldlace$0))return 102; if(! caml_string_notequal(s,cst_olive$0))return 103; if(! caml_string_notequal(s,cst_olivedrab$0))return 104; if(! caml_string_notequal(s,cst_orange$0))return 105; if(! caml_string_notequal(s,cst_orangered$0))return 106; if(! caml_string_notequal(s,cst_orchid$0))return 107; if(! caml_string_notequal(s,cst_palegoldenrod$0))return 108; if(! caml_string_notequal(s,cst_palegreen$0))return 109} else {if(! caml_string_notequal(s,cst_mediumspringgreen$0))return 93; if(! caml_string_notequal(s,cst_mediumturquoise$0))return 94; if(! caml_string_notequal(s,cst_mediumvioletred$0))return 95; if(! caml_string_notequal(s,cst_midnightblue$0))return 96; if(! caml_string_notequal(s,cst_mintcream$0))return 97; if(! caml_string_notequal(s,cst_mistyrose$0))return 98; if(! caml_string_notequal(s,cst_moccasin$0))return 99; if(! caml_string_notequal(s,cst_navajowhite$0))return 100}} else {var switch$7=caml_string_compare(s,cst_limegreen$0); if(0 <= switch$7) {if(! (0 < switch$7))return 83; if(! caml_string_notequal(s,cst_linen$0))return 84; if(! caml_string_notequal(s,cst_magenta$0))return 85; if(! caml_string_notequal(s,cst_maroon$0))return 86; if(! caml_string_notequal(s,cst_mediumaquamarine$0))return 87; if(! caml_string_notequal(s,cst_mediumblue$0))return 88; if(! caml_string_notequal(s,cst_mediumorchid$0))return 89; if(! caml_string_notequal(s,cst_mediumpurple$0))return 90; if(! caml_string_notequal(s,cst_mediumseagreen$0))return 91} else {if(! caml_string_notequal(s,cst_lightpink$0))return 74; if(! caml_string_notequal(s,cst_lightsalmon$0))return 75; if(! caml_string_notequal(s,cst_lightseagreen$0))return 76; if(! caml_string_notequal(s,cst_lightskyblue$0))return 77; if(! caml_string_notequal(s,cst_lightslategray$0))return 78; if(! caml_string_notequal(s,cst_lightslategrey$0))return 79; if(! caml_string_notequal(s,cst_lightsteelblue$0))return 80; if(! caml_string_notequal(s,cst_lightyellow$0))return 81; if(! caml_string_notequal(s,cst_lime$0))return 82}}}} else {var switch$8=caml_string_compare(s,cst_darkslategray$0); if(0 <= switch$8) {if(! (0 < switch$8))return 36; var switch$9=caml_string_compare(s,cst_greenyellow$0); if(0 <= switch$9) {if(! (0 < switch$9))return 56; var switch$10=caml_string_compare(s,cst_lavenderblush$0); if(0 <= switch$10) {if(! (0 < switch$10))return 64; if(! caml_string_notequal(s,cst_lawngreen$0))return 65; if(! caml_string_notequal(s,cst_lemonchiffon$0))return 66; if(! caml_string_notequal(s,cst_lightblue$0))return 67; if(! caml_string_notequal(s,cst_lightcoral$0))return 68; if(! caml_string_notequal(s,cst_lightcyan$0))return 69; if(! caml_string_notequal(s,cst_lightgoldenrodyellow$0)) return 70; if(! caml_string_notequal(s,cst_lightgray$0))return 71; if(! caml_string_notequal(s,cst_lightgreen$0))return 72} else {if(! caml_string_notequal(s,cst_grey$0))return 54; if(! caml_string_notequal(s,cst_honeydew$0))return 57; if(! caml_string_notequal(s,cst_hotpink$0))return 58; if(! caml_string_notequal(s,cst_indianred$0))return 59; if(! caml_string_notequal(s,cst_indigo$0))return 60; if(! caml_string_notequal(s,cst_ivory$0))return 61; if(! caml_string_notequal(s,cst_khaki$0))return 62; if(! caml_string_notequal(s,cst_lavender$0))return 63}} else {var switch$11=caml_string_compare(s,cst_floralwhite$0); if(0 <= switch$11) {if(! (0 < switch$11))return 46; if(! caml_string_notequal(s,cst_forestgreen$0))return 47; if(! caml_string_notequal(s,cst_fuchsia$0))return 48; if(! caml_string_notequal(s,cst_gainsboro$0))return 49; if(! caml_string_notequal(s,cst_ghostwhite$0))return 50; if(! caml_string_notequal(s,cst_gold$0))return 51; if(! caml_string_notequal(s,cst_goldenrod$0))return 52; if(! caml_string_notequal(s,cst_gray$0))return 53; if(! caml_string_notequal(s,cst_green$0))return 55} else {if(! caml_string_notequal(s,cst_darkslategrey$0))return 37; if(! caml_string_notequal(s,cst_darkturquoise$0))return 38; if(! caml_string_notequal(s,cst_darkviolet$0))return 39; if(! caml_string_notequal(s,cst_deeppink$0))return 40; if(! caml_string_notequal(s,cst_deepskyblue$0))return 41; if(! caml_string_notequal(s,cst_dimgray$0))return 42; if(! caml_string_notequal(s,cst_dimgrey$0))return 43; if(! caml_string_notequal(s,cst_dodgerblue$0))return 44; if(! caml_string_notequal(s,cst_firebrick$0))return 45}}} else {var switch$12=caml_string_compare(s,cst_cornsilk$0); if(0 <= switch$12) {if(! (0 < switch$12))return 18; var switch$13=caml_string_compare(s,cst_darkkhaki$0); if(0 <= switch$13) {if(! (0 < switch$13))return 27; if(! caml_string_notequal(s,cst_darkmagenta$0))return 28; if(! caml_string_notequal(s,cst_darkolivegreen$0))return 29; if(! caml_string_notequal(s,cst_darkorange$0))return 30; if(! caml_string_notequal(s,cst_darkorchid$0))return 31; if(! caml_string_notequal(s,cst_darkred$0))return 32; if(! caml_string_notequal(s,cst_darksalmon$0))return 33; if(! caml_string_notequal(s,cst_darkseagreen$0))return 34; if(! caml_string_notequal(s,cst_darkslateblue$0))return 35} else {if(! caml_string_notequal(s,cst_crimson$0))return 19; if(! caml_string_notequal(s,cst_cyan$0))return 20; if(! caml_string_notequal(s,cst_darkblue$0))return 21; if(! caml_string_notequal(s,cst_darkcyan$0))return 22; if(! caml_string_notequal(s,cst_darkgoldenrod$0))return 23; if(! caml_string_notequal(s,cst_darkgray$0))return 24; if(! caml_string_notequal(s,cst_darkgreen$0))return 25; if(! caml_string_notequal(s,cst_darkgrey$0))return 26}} else {var switch$14=caml_string_compare(s,cst_blue$0); if(0 <= switch$14) {if(! (0 < switch$14))return 9; if(! caml_string_notequal(s,cst_blueviolet$0))return 10; if(! caml_string_notequal(s,cst_brown$0))return 11; if(! caml_string_notequal(s,cst_burlywood$0))return 12; if(! caml_string_notequal(s,cst_cadetblue$0))return 13; if(! caml_string_notequal(s,cst_chartreuse$0))return 14; if(! caml_string_notequal(s,cst_chocolate$0))return 15; if(! caml_string_notequal(s,cst_coral$0))return 16; if(! caml_string_notequal(s,cst_cornflowerblue$0))return 17} else {if(! caml_string_notequal(s,cst_aliceblue$0))return 0; if(! caml_string_notequal(s,cst_antiquewhite$0))return 1; if(! caml_string_notequal(s,cst_aqua$0))return 2; if(! caml_string_notequal(s,cst_aquamarine$0))return 3; if(! caml_string_notequal(s,cst_azure$0))return 4; if(! caml_string_notequal(s,cst_beige$0))return 5; if(! caml_string_notequal(s,cst_bisque$0))return 6; if(! caml_string_notequal(s,cst_black$0))return 7; if(! caml_string_notequal(s,cst_blanchedalmond$0))return 8}}}} var _dd_=caml_call2(Stdlib[28],s,cst_is_not_a_valid_color_name); throw [0,Stdlib[6],_dd_]} function rgb_of_name(param) {var _dc_=param; if(74 <= _dc_) {if(111 <= _dc_) switch(_dc_) {case 111:return _bq_; case 112:return _br_; case 113:return _bs_; case 114:return _bt_; case 115:return _bu_; case 116:return _bv_; case 117:return _bw_; case 118:return _bx_; case 119:return _by_; case 120:return _bz_; case 121:return _bA_; case 122:return _bB_; case 123:return _bC_; case 124:return _bD_; case 125:return _bE_; case 126:return _bF_; case 127:return _bG_; case 128:return _bH_; case 129:return _bI_; case 130:return _bJ_; case 131:return _bK_; case 132:return _bL_; case 133:return _bM_; case 134:return _bN_; case 135:return _bO_; case 136:return _bP_; case 137:return _bQ_; case 138:return _bR_; case 139:return _bS_; case 140:return _bT_; case 141:return _bU_; case 142:return _bV_; case 143:return _bW_; case 144:return _bX_; case 145:return _bY_; default:return _bZ_} switch(_dc_) {case 74:return _aR_; case 75:return _aS_; case 76:return _aT_; case 77:return _aU_; case 78:return _aV_; case 79:return _aW_; case 80:return _aX_; case 81:return _aY_; case 82:return _aZ_; case 83:return _a0_; case 84:return _a1_; case 85:return _a2_; case 86:return _a3_; case 87:return _a4_; case 88:return _a5_; case 89:return _a6_; case 90:return _a7_; case 91:return _a8_; case 92:return _a9_; case 93:return _a__; case 94:return _a$_; case 95:return _ba_; case 96:return _bb_; case 97:return _bc_; case 98:return _bd_; case 99:return _be_; case 100:return _bf_; case 101:return _bg_; case 102:return _bh_; case 103:return _bi_; case 104:return _bj_; case 105:return _bk_; case 106:return _bl_; case 107:return _bm_; case 108:return _bn_; case 109:return _bo_; default:return _bp_}} if(37 <= _dc_) switch(_dc_) {case 37:return _ag_; case 38:return _ah_; case 39:return _ai_; case 40:return _aj_; case 41:return _ak_; case 42:return _al_; case 43:return _am_; case 44:return _an_; case 45:return _ao_; case 46:return _ap_; case 47:return _aq_; case 48:return _ar_; case 49:return _as_; case 50:return _at_; case 51:return _au_; case 52:return _av_; case 53:return _aw_; case 54:return _ax_; case 55:return _ay_; case 56:return _az_; case 57:return _aA_; case 58:return _aB_; case 59:return _aC_; case 60:return _aD_; case 61:return _aE_; case 62:return _aF_; case 63:return _aG_; case 64:return _aH_; case 65:return _aI_; case 66:return _aJ_; case 67:return _aK_; case 68:return _aL_; case 69:return _aM_; case 70:return _aN_; case 71:return _aO_; case 72:return _aP_; default:return _aQ_} switch(_dc_) {case 0:return _x_; case 1:return _y_; case 2:return _z_; case 3:return _A_; case 4:return _B_; case 5:return _C_; case 6:return _D_; case 7:return _E_; case 8:return _F_; case 9:return _G_; case 10:return _H_; case 11:return _I_; case 12:return _J_; case 13:return _K_; case 14:return _L_; case 15:return _M_; case 16:return _N_; case 17:return _O_; case 18:return _P_; case 19:return _Q_; case 20:return _R_; case 21:return _S_; case 22:return _T_; case 23:return _U_; case 24:return _V_; case 25:return _W_; case 26:return _X_; case 27:return _Y_; case 28:return _Z_; case 29:return ___; case 30:return _$_; case 31:return _aa_; case 32:return _ab_; case 33:return _ac_; case 34:return _ad_; case 35:return _ae_; default:return _af_}} function rgb(a,r,g,b) {if(a){var a$0=a[1];return [3,[0,r,g,b,a$0]]}return [1,[0,r,g,b]]} function hsl(a,h,s,l) {if(a){var a$0=a[1];return [6,[0,h,s,l,a$0]]}return [5,[0,h,s,l]]} function string_of_t(param) {switch(param[0]) {case 0:var n=param[1];return string_of_name(n); case 1: var match=param[1],b=match[3],g=match[2],r=match[1]; return caml_call4(Stdlib_Printf[4],_b0_,r,g,b); case 2: var match$0=param[1],b$0=match$0[3],g$0=match$0[2],r$0=match$0[1]; return caml_call4(Stdlib_Printf[4],_b1_,r$0,g$0,b$0); case 3: var match$1=param[1], a=match$1[4], b$1=match$1[3], g$1=match$1[2], r$1=match$1[1]; return caml_call5(Stdlib_Printf[4],_b2_,r$1,g$1,b$1,a); case 4: var match$2=param[1], a$0=match$2[4], b$2=match$2[3], g$2=match$2[2], r$2=match$2[1]; return caml_call5(Stdlib_Printf[4],_b3_,r$2,g$2,b$2,a$0); case 5: var match$3=param[1],l=match$3[3],s=match$3[2],h=match$3[1]; return caml_call4(Stdlib_Printf[4],_b4_,h,s,l); default: var match$4=param[1], a$1=match$4[4], l$0=match$4[3], s$0=match$4[2], h$0=match$4[1]; return caml_call5(Stdlib_Printf[4],_b5_,h$0,s$0,l$0,a$1)}} function hex_of_rgb(param) {var blue=param[3],green=param[2],red=param[1]; function in_range(i) {var _c__=caml_call2(symbol$5,i,0), _c$_=_c__ || caml_call2(symbol$9,i,255); if(_c$_) {var _da_=caml_call1(Stdlib[33],i), _db_=caml_call2(Stdlib[28],_da_,cst_is_out_of_valid_range); throw [0,Stdlib[6],_db_]} return _c$_} in_range(red); in_range(green); in_range(blue); return caml_call4(Stdlib_Printf[4],_b6_,red,green,blue)} function js_t_of_js_string(s) {var t0=caml_jsbytes_of_string(cst_rgb_s_d_s_d_s_d), t13=new t11(t0), t2=caml_jsbytes_of_string(cst_rgb_s_d_s_d_s_d$0), t17=new t11(t2), t4=caml_jsbytes_of_string(cst_rgba_s_d_s_d_s_d_d_d), t15=new t11(t4), t6=caml_jsbytes_of_string(cst_rgba_s_d_s_d_s_d_d_d$0), t19=new t11(t6), t8=caml_jsbytes_of_string(cst_hsl_s_d_s_d_s_d), t21=new t11(t8), t10=caml_jsbytes_of_string(cst_hsla_s_d_s_d_s_d_d_d), t23=new t11(t10); if (! (t13.test(s) | 0) && ! (t15.test(s) | 0) && ! (t17.test(s) | 0) && ! (t19.test(s) | 0) && ! (t21.test(s) | 0) && ! (t23.test(s) | 0)) {var _c7_=caml_string_of_jsstring(s); if(caml_call2(Stdlib_List[36],_c7_,_b7_))return s; var _c8_=caml_string_of_jsstring(s), _c9_=caml_call2(Stdlib[28],_c8_,cst_is_not_a_valid_color); throw [0,Stdlib[6],_c9_]} return s} function js(c) {if(0 === c[0]) {var n=c[1];return caml_jsstring_of_string(string_of_name(n))} return caml_jsstring_of_string(string_of_t(c))} function ml(c) {var s=caml_string_of_jsstring(c); try {var _cU_=[0,name_of_string(s)];return _cU_} catch(_cV_) {_cV_ = caml_wrap_exception(_cV_); if(_cV_[1] === Stdlib[6]) {var fail= function(param) {var _c6_=caml_call2(Stdlib[28],s,cst_is_not_a_valid_color$0); throw [0,Stdlib[6],_c6_]}, re_rgb=regexp(cst_rgba_d_d_d_d_d), re_rgb_pct=regexp(cst_rgba_d_d_d_d_d$0), re_hsl=regexp(cst_hsla_d_d_d_d_d), i_of_s_o= function(param) {if(param) {var i=param[1]; try {var _c4_=caml_int_of_string(i);return _c4_} catch(_c5_) {_c5_ = caml_wrap_exception(_c5_); if(_c5_[1] === Stdlib[6]) var s=_c5_[2]; else {if(_c5_[1] !== Stdlib[7])throw _c5_;var s=_c5_[2]} var _c1_=caml_call2(Stdlib[28],cst$39,s), _c2_=caml_call2(Stdlib[28],i,_c1_), _c3_=caml_call2(Stdlib[28],cst_color_conversion_error,_c2_); throw [0,Stdlib[6],_c3_]}} return fail(0)}, f_of_s= function(f) {try {var _cZ_=caml_float_of_string(f);return _cZ_} catch(_c0_) {_c0_ = caml_wrap_exception(_c0_); if(_c0_[1] === Stdlib[6]) var s=_c0_[2]; else {if(_c0_[1] !== Stdlib[7])throw _c0_;var s=_c0_[2]} var _cW_=caml_call2(Stdlib[28],cst$40,s), _cX_=caml_call2(Stdlib[28],f,_cW_), _cY_=caml_call2(Stdlib[28],cst_color_conversion_error$0,_cX_); throw [0,Stdlib[6],_cY_]}}, match=string_match(re_rgb,s,0); if(match) {var r=match[1], red=matched_group(r,2), green=matched_group(r,3), blue=matched_group(r,4), alpha=matched_group(r,5), match$0=matched_group(r,1); if(match$0) {var _cC_=match$0[1]; if(! caml_string_notequal(_cC_,cst_rgb)) {if(alpha)return fail(0); var _cG_=i_of_s_o(blue),_cH_=i_of_s_o(green); return [1,[0,i_of_s_o(red),_cH_,_cG_]]} if(! caml_string_notequal(_cC_,cst_rgba)) {if(alpha) {var a=alpha[1], _cD_=f_of_s(a), _cE_=i_of_s_o(blue), _cF_=i_of_s_o(green); return [3,[0,i_of_s_o(red),_cF_,_cE_,_cD_]]} return fail(0)}} return fail(0)} var match$1=string_match(re_rgb_pct,s,0); if(match$1) {var r$0=match$1[1], red$0=matched_group(r$0,2), green$0=matched_group(r$0,3), blue$0=matched_group(r$0,4), alpha$0=matched_group(r$0,5), match$2=matched_group(r$0,1); if(match$2) {var _cI_=match$2[1]; if(! caml_string_notequal(_cI_,cst_rgb$0)) {if(alpha$0)return fail(0); var _cM_=i_of_s_o(blue$0),_cN_=i_of_s_o(green$0); return [2,[0,i_of_s_o(red$0),_cN_,_cM_]]} if(! caml_string_notequal(_cI_,cst_rgba$0)) {if(alpha$0) {var a$0=alpha$0[1], _cJ_=f_of_s(a$0), _cK_=i_of_s_o(blue$0), _cL_=i_of_s_o(green$0); return [4,[0,i_of_s_o(red$0),_cL_,_cK_,_cJ_]]} return fail(0)}} return fail(0)} var match$3=string_match(re_hsl,s,0); if(match$3) {var r$1=match$3[1], red$1=matched_group(r$1,2), green$1=matched_group(r$1,3), blue$1=matched_group(r$1,4), alpha$1=matched_group(r$1,5), match$4=matched_group(r$1,1); if(match$4) {var _cO_=match$4[1]; if(! caml_string_notequal(_cO_,cst_hsl)) {if(alpha$1)return fail(0); var _cS_=i_of_s_o(blue$1),_cT_=i_of_s_o(green$1); return [5,[0,i_of_s_o(red$1),_cT_,_cS_]]} if(! caml_string_notequal(_cO_,cst_hsla)) {if(alpha$1) {var a$1=alpha$1[1], _cP_=f_of_s(a$1), _cQ_=i_of_s_o(blue$1), _cR_=i_of_s_o(green$1); return [6,[0,i_of_s_o(red$1),_cR_,_cQ_,_cP_]]} return fail(0)}} return fail(0)} return fail(0)} throw _cV_}} function string_of_t$0(param) {if(typeof param === "number") return cst_0; else switch(param[0]) {case 0: var f=param[1];return caml_call3(Stdlib_Printf[4],_b8_,f,cst_em$0); case 1: var f$0=param[1]; return caml_call3(Stdlib_Printf[4],_b9_,f$0,cst_ex); case 2: var f$1=param[1]; return caml_call3(Stdlib_Printf[4],_b__,f$1,cst_px); case 3: var f$2=param[1]; return caml_call3(Stdlib_Printf[4],_b$_,f$2,cst_gd); case 4: var f$3=param[1]; return caml_call3(Stdlib_Printf[4],_ca_,f$3,cst_rem); case 5: var f$4=param[1]; return caml_call3(Stdlib_Printf[4],_cb_,f$4,cst_vw); case 6: var f$5=param[1]; return caml_call3(Stdlib_Printf[4],_cc_,f$5,cst_vh); case 7: var f$6=param[1]; return caml_call3(Stdlib_Printf[4],_cd_,f$6,cst_vm); case 8: var f$7=param[1]; return caml_call3(Stdlib_Printf[4],_ce_,f$7,cst_ch); case 9: var f$8=param[1]; return caml_call3(Stdlib_Printf[4],_cf_,f$8,cst_mm); case 10: var f$9=param[1]; return caml_call3(Stdlib_Printf[4],_cg_,f$9,cst_cm); case 11: var f$10=param[1]; return caml_call3(Stdlib_Printf[4],_ch_,f$10,cst_in); case 12: var f$11=param[1]; return caml_call3(Stdlib_Printf[4],_ci_,f$11,cst_pt); default: var f$12=param[1]; return caml_call3(Stdlib_Printf[4],_cj_,f$12,cst_pc)}} function js$0(t){return caml_jsstring_of_string(string_of_t$0(t))} function ml$0(t) {var s=caml_string_of_jsstring(t); if(caml_call2(String[68],s,cst_0$0))return 0; function fail(param) {var _cB_=caml_call2(Stdlib[28],s,cst_is_not_a_valid_length); throw [0,Stdlib[6],_cB_]} var re=regexp(cst_d_d_s_S),match=string_match(re,s,0); if(match) {var r=match[1],match$0=matched_group(r,1); if(match$0) {var f=match$0[1]; try {var _cz_=caml_float_of_string(f)} catch(exn) {exn = caml_wrap_exception(exn); if(exn[1] === Stdlib[6]) {var s$0=exn[2], _cy_=caml_call2(Stdlib[28],cst_length_conversion_error,s$0); throw [0,Stdlib[6],_cy_]} throw exn} var f$0=_cz_} else var f$0=fail(0); var match$1=matched_group(r,2); if(match$1) {var _cA_=match$1[1],switch$0=caml_string_compare(_cA_,cst_pc$0); if(0 <= switch$0) {if(! (0 < switch$0))return [13,f$0]; if(! caml_string_notequal(_cA_,cst_pt$0))return [12,f$0]; if(! caml_string_notequal(_cA_,cst_px$0))return [2,f$0]; if(! caml_string_notequal(_cA_,cst_rem$0))return [4,f$0]; if(! caml_string_notequal(_cA_,cst_vh$0))return [6,f$0]; if(! caml_string_notequal(_cA_,cst_vm$0))return [7,f$0]; if(! caml_string_notequal(_cA_,cst_vw$0))return [5,f$0]} else {if(! caml_string_notequal(_cA_,cst_ch$0))return [8,f$0]; if(! caml_string_notequal(_cA_,cst_cm$0))return [10,f$0]; if(! caml_string_notequal(_cA_,cst_em$1))return [0,f$0]; if(! caml_string_notequal(_cA_,cst_ex$0))return [1,f$0]; if(! caml_string_notequal(_cA_,cst_gd$0))return [3,f$0]; if(! caml_string_notequal(_cA_,cst_in$0))return [11,f$0]; if(! caml_string_notequal(_cA_,cst_mm$0))return [9,f$0]} return fail(0)} return fail(0)} return fail(0)} var Length=[0,string_of_t$0,js$0,ml$0]; function string_of_t$1(param) {switch(param[0]) {case 0: var f=param[1];return caml_call3(Stdlib_Printf[4],_ck_,f,cst_deg); case 1: var f$0=param[1]; return caml_call3(Stdlib_Printf[4],_cl_,f$0,cst_grad); case 2: var f$1=param[1]; return caml_call3(Stdlib_Printf[4],_cm_,f$1,cst_rad); default: var f$2=param[1]; return caml_call3(Stdlib_Printf[4],_cn_,f$2,cst_turns)}} function js$1(t){return caml_jsstring_of_string(string_of_t$1(t))} function ml$1(j) {var s=caml_string_of_jsstring(j),re=regexp(cst_d_d_deg_grad_rad_turns); function fail(param) {var _cx_=caml_call2(Stdlib[28],s,cst_is_not_a_valid_length$0); throw [0,Stdlib[6],_cx_]} var match=string_match(re,s,0); if(match) {var r=match[1],match$0=matched_group(r,1); if(match$0) {var f=match$0[1]; try {var _cv_=caml_float_of_string(f)} catch(exn) {exn = caml_wrap_exception(exn); if(exn[1] === Stdlib[6]) {var s$0=exn[2], _cu_=caml_call2(Stdlib[28],cst_length_conversion_error$0,s$0); throw [0,Stdlib[6],_cu_]} throw exn} var f$0=_cv_} else var f$0=fail(0); var match$1=matched_group(r,2); if(match$1) {var _cw_=match$1[1]; if(! caml_string_notequal(_cw_,cst_deg$0))return [0,f$0]; if(! caml_string_notequal(_cw_,cst_grad$0))return [1,f$0]; if(! caml_string_notequal(_cw_,cst_rad$0))return [2,f$0]; if(! caml_string_notequal(_cw_,cst_turns$0))return [3,f$0]} return fail(0)} return fail(0)} var Angle=[0,string_of_t$1,js$1,ml$1], Js_of_ocaml_CSS= [0, [0, string_of_name, rgb_of_name, hex_of_rgb, rgb, hsl, string_of_t, js, ml, js_t_of_js_string], Length, Angle]; caml_register_global(1668,Js_of_ocaml_CSS,"Js_of_ocaml__CSS"); function listen(opt,target,typ,cb) {if(opt)var sth=opt[1],capture=sth;else var capture=0; var _ct_=! ! capture; return addEventListener (target, typ, full_handler(function(n,e){return ! ! caml_call2(cb,n,e)}), _ct_)} var Js_of_ocaml_Dom_events=[0,Event$0,listen,removeEventListener]; caml_register_global (1669,Js_of_ocaml_Dom_events,"Js_of_ocaml__Dom_events"); var t0="http://www.w3.org/2000/svg", SVGError=[248,cst_Js_of_ocaml_Dom_svg_SVGErr,caml_fresh_oo_id(0)]; function createElement$0(t2,name) {var t1=caml_jsstring_of_string(name); return t2.createElementNS("http://www.w3.org/2000/svg",t1)} function unsafeCreateElement$0(doc,name){return createElement$0(doc,name)} function createA$0(doc){return unsafeCreateElement$0(doc,cst_a$2)} function createAltGlyph(doc) {return unsafeCreateElement$0(doc,cst_altglyph)} function createAltGlyphDef(doc) {return unsafeCreateElement$0(doc,cst_altglyphdef)} function createAltGlyphItem(doc) {return unsafeCreateElement$0(doc,cst_altglyphitem)} function createAnimate(doc){return unsafeCreateElement$0(doc,cst_animate)} function createAnimateColor(doc) {return unsafeCreateElement$0(doc,cst_animatecolor)} function createAnimateMotion(doc) {return unsafeCreateElement$0(doc,cst_animatemotion)} function createAnimateTransform(doc) {return unsafeCreateElement$0(doc,cst_animatetransform)} function createCircle(doc){return unsafeCreateElement$0(doc,cst_circle)} function createClipPath(doc) {return unsafeCreateElement$0(doc,cst_clippath)} function createCursor(doc){return unsafeCreateElement$0(doc,cst_cursor)} function createDefs(doc){return unsafeCreateElement$0(doc,cst_defs)} function createDesc(doc){return unsafeCreateElement$0(doc,cst_desc)} function createEllipse(doc){return unsafeCreateElement$0(doc,cst_ellipse)} function createFilter(doc){return unsafeCreateElement$0(doc,cst_filter)} function createFont(doc){return unsafeCreateElement$0(doc,cst_font)} function createFontFace(doc) {return unsafeCreateElement$0(doc,cst_font_face)} function createFontFaceFormat(doc) {return unsafeCreateElement$0(doc,cst_font_face_format)} function createFontFaceName(doc) {return unsafeCreateElement$0(doc,cst_font_face_name)} function createFontFaceSrc(doc) {return unsafeCreateElement$0(doc,cst_font_face_src)} function createFontFaceUri(doc) {return unsafeCreateElement$0(doc,cst_font_face_uri)} function createForeignObject(doc) {return unsafeCreateElement$0(doc,cst_foreignObject)} function createG(doc){return unsafeCreateElement$0(doc,cst_g$0)} function createGlyph(doc){return unsafeCreateElement$0(doc,cst_glyph)} function createGlyphRef(doc) {return unsafeCreateElement$0(doc,cst_glyphref)} function createhkern(doc){return unsafeCreateElement$0(doc,cst_hkern)} function createImage(doc){return unsafeCreateElement$0(doc,cst_image)} function createLineElement(doc) {return unsafeCreateElement$0(doc,cst_line)} function createLinearElement(doc) {return unsafeCreateElement$0(doc,cst_lineargradient)} function createMask(doc){return unsafeCreateElement$0(doc,cst_mask)} function createMetaData(doc) {return unsafeCreateElement$0(doc,cst_metadata)} function createMissingGlyph(doc) {return unsafeCreateElement$0(doc,cst_missing_glyph)} function createMPath(doc){return unsafeCreateElement$0(doc,cst_mpath)} function createPath(doc){return unsafeCreateElement$0(doc,cst_path)} function createPattern(doc){return unsafeCreateElement$0(doc,cst_pattern)} function createPolygon(doc){return unsafeCreateElement$0(doc,cst_polygon)} function createPolyline(doc) {return unsafeCreateElement$0(doc,cst_polyline)} function createRadialgradient(doc) {return unsafeCreateElement$0(doc,cst_radialgradient)} function createRect(doc){return unsafeCreateElement$0(doc,cst_rect)} function createScript$0(doc) {return unsafeCreateElement$0(doc,cst_script$2)} function createSet(doc){return unsafeCreateElement$0(doc,cst_set)} function createStop(doc){return unsafeCreateElement$0(doc,cst_stop)} function createStyle$0(doc){return unsafeCreateElement$0(doc,cst_style$2)} function createSvg(doc){return unsafeCreateElement$0(doc,cst_svg)} function createSwitch(doc){return unsafeCreateElement$0(doc,cst_switch)} function createSymbol(doc){return unsafeCreateElement$0(doc,cst_symbol)} function createTextElement(doc) {return unsafeCreateElement$0(doc,cst_text$0)} function createTextpath(doc) {return unsafeCreateElement$0(doc,cst_textpath)} function createTitle$0(doc){return unsafeCreateElement$0(doc,cst_title$2)} function createTref(doc){return unsafeCreateElement$0(doc,cst_tref)} function createTspan(doc){return unsafeCreateElement$0(doc,cst_tspan)} function createUse(doc){return unsafeCreateElement$0(doc,cst_use)} function createView(doc){return unsafeCreateElement$0(doc,cst_view)} function createvkern(doc){return unsafeCreateElement$0(doc,cst_vkern)} var svg_element=Unsafe[1].SVGElement,document$0=Unsafe[1].document; function getElementById$0(id) {function _cq_(e){if(e instanceof svg_element)return e;throw Stdlib[8]} function _cr_(param){throw Stdlib[8]} var t6=caml_jsstring_of_string(id), t7=Unsafe[1].document, _cs_=t7.getElementById(t6); return caml_call3(Opt[7],_cs_,_cr_,_cq_)} function element$2(e){return e instanceof svg_element?e:no_handler} function unsafeCoerce$0(e,tag) {var t9=e.tagName,_cp_=caml_jsstring_of_string(tag); return t9.toLowerCase() === _cp_?e:no_handler} function a$0(e){return unsafeCoerce$0(e,cst_a$3)} function altGlyph(e){return unsafeCoerce$0(e,cst_altglyph$0)} function altGlyphDef(e){return unsafeCoerce$0(e,cst_altglyphdef$0)} function altGlyphItem(e){return unsafeCoerce$0(e,cst_altglyphitem$0)} function animate(e){return unsafeCoerce$0(e,cst_animate$0)} function animateColor(e){return unsafeCoerce$0(e,cst_animatecolor$0)} function animateMotion(e){return unsafeCoerce$0(e,cst_animatemotion$0)} function animateTransform(e) {return unsafeCoerce$0(e,cst_animatetransform$0)} function circle(e){return unsafeCoerce$0(e,cst_circle$0)} function clipPath(e){return unsafeCoerce$0(e,cst_clippath$0)} function cursor(e){return unsafeCoerce$0(e,cst_cursor$0)} function defs(e){return unsafeCoerce$0(e,cst_defs$0)} function desc(e){return unsafeCoerce$0(e,cst_desc$0)} function ellipse(e){return unsafeCoerce$0(e,cst_ellipse$0)} function filter(e){return unsafeCoerce$0(e,cst_filter$0)} function font(e){return unsafeCoerce$0(e,cst_font$0)} function fontFace(e){return unsafeCoerce$0(e,cst_font_face$0)} function fontFaceFormat(e) {return unsafeCoerce$0(e,cst_font_face_format$0)} function fontFaceName(e){return unsafeCoerce$0(e,cst_font_face_name$0)} function fontFaceSrc(e){return unsafeCoerce$0(e,cst_font_face_src$0)} function fontFaceUri(e){return unsafeCoerce$0(e,cst_font_face_uri$0)} function foreignObject(e){return unsafeCoerce$0(e,cst_foreignobject)} function g(e){return unsafeCoerce$0(e,cst_g$1)} function glyph(e){return unsafeCoerce$0(e,cst_glyph$0)} function glyphRef(e){return unsafeCoerce$0(e,cst_glyphref$0)} function hkern(e){return unsafeCoerce$0(e,cst_hkern$0)} function image(e){return unsafeCoerce$0(e,cst_image$0)} function lineElement(e){return unsafeCoerce$0(e,cst_line$0)} function linearElement(e){return unsafeCoerce$0(e,cst_lineargradient$0)} function mask(e){return unsafeCoerce$0(e,cst_mask$0)} function metaData(e){return unsafeCoerce$0(e,cst_metadata$0)} function missingGlyph(e){return unsafeCoerce$0(e,cst_missing_glyph$0)} function mPath(e){return unsafeCoerce$0(e,cst_mpath$0)} function path$0(e){return unsafeCoerce$0(e,cst_path$0)} function pattern(e){return unsafeCoerce$0(e,cst_pattern$0)} function polygon(e){return unsafeCoerce$0(e,cst_polygon$0)} function polyline(e){return unsafeCoerce$0(e,cst_polyline$0)} function radialgradient(e){return unsafeCoerce$0(e,cst_radialgradient$0)} function rect(e){return unsafeCoerce$0(e,cst_rect$0)} function script$0(e){return unsafeCoerce$0(e,cst_script$3)} function set$1(e){return unsafeCoerce$0(e,cst_set$0)} function stop(e){return unsafeCoerce$0(e,cst_stop$0)} function style$0(e){return unsafeCoerce$0(e,cst_style$3)} function svg(e){return unsafeCoerce$0(e,cst_svg$0)} function switch$0(e){return unsafeCoerce$0(e,cst_switch$0)} function symbol$12(e){return unsafeCoerce$0(e,cst_symbol$0)} function textElement(e){return unsafeCoerce$0(e,cst_text$1)} function textpath(e){return unsafeCoerce$0(e,cst_textpath$0)} function title$0(e){return unsafeCoerce$0(e,cst_title$3)} function tref(e){return unsafeCoerce$0(e,cst_tref$0)} function tspan(e){return unsafeCoerce$0(e,cst_tspan$0)} function use(e){return unsafeCoerce$0(e,cst_use$0)} function view(e){return unsafeCoerce$0(e,cst_view$0)} function vkern(e){return unsafeCoerce$0(e,cst_vkern$0)} var Js_of_ocaml_Dom_svg= [0, t0, SVGError, createElement$0, createA$0, createAltGlyph, createAltGlyphDef, createAltGlyphItem, createAnimate, createAnimateColor, createAnimateMotion, createAnimateTransform, createCircle, createClipPath, createCursor, createDefs, createDesc, createEllipse, createFilter, createFont, createFontFace, createFontFaceFormat, createFontFaceName, createFontFaceSrc, createFontFaceUri, createForeignObject, createG, createGlyph, createGlyphRef, createhkern, createImage, createLineElement, createLinearElement, createMask, createMetaData, createMissingGlyph, createMPath, createPath, createPattern, createPolygon, createPolyline, createRadialgradient, createRect, createScript$0, createSet, createStop, createStyle$0, createSvg, createSwitch, createSymbol, createTextElement, createTextpath, createTitle$0, createTref, createTspan, createUse, createView, createvkern, svg_element, document$0, getElementById$0, [0, element$2, a$0, altGlyph, altGlyphDef, altGlyphItem, animate, animateColor, animateMotion, animateTransform, circle, clipPath, cursor, defs, desc, ellipse, filter, font, fontFace, fontFaceFormat, fontFaceName, fontFaceSrc, fontFaceUri, foreignObject, g, glyph, glyphRef, hkern, image, lineElement, linearElement, mask, metaData, missingGlyph, mPath, path$0, pattern, polygon, polyline, radialgradient, rect, script$0, set$1, stop, style$0, svg, switch$0, symbol$12, textElement, textpath, title$0, tref, tspan, use, view, vkern]]; caml_register_global(1670,Js_of_ocaml_Dom_svg,"Js_of_ocaml__Dom_svg"); function withCredentials(b) {var t1={},t0=! ! b;t1.withCredentials = t0;return t1} var eventSource=Unsafe[1].EventSource, eventSource_options=Unsafe[1].EventSource, Js_of_ocaml_EventSource= [0,withCredentials,eventSource,eventSource_options,addEventListener]; caml_register_global (1671,Js_of_ocaml_EventSource,"Js_of_ocaml__EventSource"); var console=runtime.caml_js_get_console(0), Js_of_ocaml_Firebug=[0,console]; caml_register_global(1672,Js_of_ocaml_Firebug,"Js_of_ocaml__Firebug"); function empty_position_options(param){return {}} var t1$0=Unsafe[1].navigator, geolocation=caml_call1(Optdef[5],t1$0)?t1$0.geolocation:t1$0; function is_supported$3(param){return caml_call1(Optdef[5],geolocation)} var Js_of_ocaml_Geolocation= [0,empty_position_options,geolocation,is_supported$3]; caml_register_global (1673,Js_of_ocaml_Geolocation,"Js_of_ocaml__Geolocation"); function empty_intersection_observer_op(param){return {}} var intersectionObserver_unsafe=Unsafe[1].IntersectionObserver; function is_supported$4(param) {return caml_call1(Optdef[5],intersectionObserver_unsafe)} var Js_of_ocaml_IntersectionObserv= [0, empty_intersection_observer_op, is_supported$4, intersectionObserver_unsafe]; caml_register_global (1674,Js_of_ocaml_IntersectionObserv,"Js_of_ocaml__IntersectionObserver"); function object_options(param){return {"localeMatcher":"best fit"}} function options(param) {return {"localeMatcher":"best fit", "usage":"sort", "sensitivity":"variant", "ignorePunctuation":t4, "numeric":t4, "caseFirst":"false"}} var Collator=[0,object_options,options]; function options$0(param) {return {"localeMatcher":"best fit", "timeZone":t39, "hour12":t39, "hourCycle":t39, "formatMatcher":"best fit", "weekday":t39, "era":t39, "year":t39, "month":t39, "day":t39, "hour":t39, "minute":t39, "second":t39, "timeZoneName":t39}} var DateTimeFormat=[0,object_options,options$0]; function options$1(param) {return {"localeMatcher":"best fit", "style":"decimal", "currency":t39, "currencyDisplay":t39, "useGrouping":t25, "minimumIntegerDigits":t39, "minimumFractionDigits":t39, "maximumFractionDigits":t39, "minimumSignificantDigits":t39, "maximumSignificantDigits":t39}} var NumberFormat=[0,object_options,options$1]; function options$2(param) {return {"localeMatcher":"best fit","type":"cardinal"}} var PluralRules=[0,object_options,options$2], intl=Unsafe[1].Intl, t35=Unsafe[1].Intl, collator_constr=t35.Collator, t37=Unsafe[1].Intl, dateTimeFormat_constr=t37.DateTimeFormat, t39$0=Unsafe[1].Intl, numberFormat_constr=t39$0.NumberFormat, t41=Unsafe[1].Intl, pluralRules_constr=t41.PluralRules; function is_supported$5(param){return caml_call1(Optdef[5],intl)} var Js_of_ocaml_Intl= [0, Collator, DateTimeFormat, NumberFormat, PluralRules, intl, collator_constr, dateTimeFormat_constr, numberFormat_constr, pluralRules_constr, is_supported$5]; caml_register_global(1675,Js_of_ocaml_Intl,"Js_of_ocaml__Intl"); var Js_of_ocaml$0=[0]; caml_register_global(1676,Js_of_ocaml$0,"Js_of_ocaml"); return} (globalThis)); //# 1 "../.js/uutf/uutf.cma.js" (function(globalThis) {"use strict"; var runtime=globalThis.jsoo_runtime, caml_blit_bytes=runtime.caml_blit_bytes, caml_bytes_unsafe_get=runtime.caml_bytes_unsafe_get, caml_check_bound=runtime.caml_check_bound, caml_create_bytes=runtime.caml_create_bytes, caml_ml_bytes_length=runtime.caml_ml_bytes_length, caml_ml_string_length=runtime.caml_ml_string_length, caml_string_compare=runtime.caml_string_compare, caml_string_get=runtime.caml_string_get, caml_string_notequal=runtime.caml_string_notequal, caml_string_of_jsbytes=runtime.caml_string_of_jsbytes; function caml_call1(f,a0) {return f.length == 1?f(a0):runtime.caml_call_gen(f,[a0])} function caml_call2(f,a0,a1) {return f.length == 2?f(a0,a1):runtime.caml_call_gen(f,[a0,a1])} function caml_call3(f,a0,a1,a2) {return f.length == 3?f(a0,a1,a2):runtime.caml_call_gen(f,[a0,a1,a2])} function caml_call4(f,a0,a1,a2,a3) {return f.length == 4 ?f(a0,a1,a2,a3) :runtime.caml_call_gen(f,[a0,a1,a2,a3])} var global_data=runtime.caml_get_global_data(), cst_UTF_8$0=caml_string_of_jsbytes("UTF-8"), cst_US_ASCII$0=caml_string_of_jsbytes("US-ASCII"), cst_ISO_8859_1$1=caml_string_of_jsbytes("ISO-8859-1"), cst_UTF_16$0=caml_string_of_jsbytes("UTF-16"), cst_UTF_16LE$0=caml_string_of_jsbytes("UTF-16LE"), cst_UTF_16BE$0=caml_string_of_jsbytes("UTF-16BE"), cst_ISO646_US=caml_string_of_jsbytes("ISO646-US"), cst_CSISOLATIN1=caml_string_of_jsbytes("CSISOLATIN1"), cst_ANSI_X3_4_1968=caml_string_of_jsbytes("ANSI_X3.4-1968"), cst_ANSI_X3_4_1986=caml_string_of_jsbytes("ANSI_X3.4-1986"), cst_ASCII=caml_string_of_jsbytes("ASCII"), cst_CP367=caml_string_of_jsbytes("CP367"), cst_CP819=caml_string_of_jsbytes("CP819"), cst_CSASCII=caml_string_of_jsbytes("CSASCII"), cst_IBM367=caml_string_of_jsbytes("IBM367"), cst_IBM819=caml_string_of_jsbytes("IBM819"), cst_ISO_8859_1$0=caml_string_of_jsbytes("ISO-8859-1"), cst_ISO_IR_100=caml_string_of_jsbytes("ISO-IR-100"), cst_ISO_IR_6=caml_string_of_jsbytes("ISO-IR-6"), cst_US=caml_string_of_jsbytes("US"), cst_ISO_646_IRV_1991=caml_string_of_jsbytes("ISO_646.IRV:1991"), cst_ISO_8859_1=caml_string_of_jsbytes("ISO_8859-1"), cst_ISO_8859_1_1987=caml_string_of_jsbytes("ISO_8859-1:1987"), cst_L1=caml_string_of_jsbytes("L1"), cst_LATIN1=caml_string_of_jsbytes("LATIN1"), cst_US_ASCII=caml_string_of_jsbytes("US-ASCII"), cst_UTF_16=caml_string_of_jsbytes("UTF-16"), cst_UTF_16BE=caml_string_of_jsbytes("UTF-16BE"), cst_UTF_16LE=caml_string_of_jsbytes("UTF-16LE"), cst_UTF_8=caml_string_of_jsbytes("UTF-8"), cst_expected_Await_encode= caml_string_of_jsbytes("expected `Await encode"), Stdlib_Uchar=global_data.Stdlib__Uchar, Stdlib_Buffer=global_data.Stdlib__Buffer, Stdlib_Bytes=global_data.Stdlib__Bytes, Stdlib=global_data.Stdlib, Assert_failure=global_data.Assert_failure, Stdlib_String=global_data.Stdlib__String, Stdlib_Printf=global_data.Stdlib__Printf, Stdlib_Format=global_data.Stdlib__Format, _a_=Stdlib_Format[129], _B_=[0,caml_string_of_jsbytes("src/uutf.ml"),363,9], _u_= [0, [11,caml_string_of_jsbytes("`Await"),0], caml_string_of_jsbytes("`Await")], _v_= [0,[11,caml_string_of_jsbytes("`End"),0],caml_string_of_jsbytes("`End")], _w_= [0, [18, [1,[0,0,caml_string_of_jsbytes("")]], [11,caml_string_of_jsbytes("`Uchar U+"),[4,8,[0,2,4],0,[17,0,0]]]], caml_string_of_jsbytes("@[`Uchar U+%04X@]")], _x_= [0, [18, [1,[0,0,caml_string_of_jsbytes("")]], [11,caml_string_of_jsbytes("`Malformed ("),0]], caml_string_of_jsbytes("@[`Malformed (")], _y_=[0,[4,8,[0,2,2],0,0],caml_string_of_jsbytes("%02X")], _A_=[0,[12,32,[4,8,[0,2,2],0,0]],caml_string_of_jsbytes(" %02X")], _z_=[0,[12,41,[17,0,0]],caml_string_of_jsbytes(")@]")], _p_=[0,-211555818,3299808], _k_=[0,-211558048,3299808], _q_=[0,684370880,3299808], _o_=[0,684370880,427938126], _l_=[0,-211558048,427938126], _m_=[0,caml_string_of_jsbytes("src/uutf.ml"),153,55], _n_=[0,684370880,427938126], _r_=[0,caml_string_of_jsbytes("src/uutf.ml"),152,55], _s_=[0,caml_string_of_jsbytes("src/uutf.ml"),154,55], _t_=[0,684370880,3455931], _j_=[0,caml_string_of_jsbytes("src/uutf.ml"),120,9], _c_=[0,684370880], _d_=[0,-211555818], _e_=[0,-211558048], _f_=[0,143365725], _g_=[0,423112016], _h_=[0,338302576], _b_= [0, [11, caml_string_of_jsbytes("invalid bounds (index "), [4,0,0,0,[11,caml_string_of_jsbytes(", length "),[4,0,0,0,[12,41,0]]]]], caml_string_of_jsbytes("invalid bounds (index %d, length %d)")], _i_= [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; function invalid_bounds(j,l) {var _aF_=caml_call3(Stdlib_Printf[4],_b_,j,l); return caml_call1(Stdlib[1],_aF_)} function unsafe_set_byte(s,j,byte$0) {runtime.caml_bytes_unsafe_set(s,j,byte$0);return 0} var u_bom=caml_call1(Stdlib_Uchar[9],65279), u_rep=caml_call1(Stdlib_Uchar[9],65533); function encoding_of_string(s) {var match=caml_call1(Stdlib_String[25],s), _aD_=caml_string_compare(match,cst_ISO646_US), switch$1=0; if(0 <= _aD_) {if(0 < _aD_) {var switch$0=caml_string_compare(match,cst_US); if(0 <= switch$0) {if(0 < switch$0 && caml_string_notequal(match,cst_US_ASCII)) {if(! caml_string_notequal(match,cst_UTF_16))return _f_; if(! caml_string_notequal(match,cst_UTF_16BE))return _e_; if(! caml_string_notequal(match,cst_UTF_16LE))return _d_; if(! caml_string_notequal(match,cst_UTF_8))return _c_; switch$1 = 2}} else if(caml_string_notequal(match,cst_ISO_646_IRV_1991)) if (caml_string_notequal(match,cst_ISO_8859_1) && caml_string_notequal(match,cst_ISO_8859_1_1987) && caml_string_notequal(match,cst_L1) && caml_string_notequal(match,cst_LATIN1)) switch$1 = 2; else switch$1 = 1}} else {var _aE_=caml_string_compare(match,cst_CSISOLATIN1); if(0 <= _aE_) if(0 < _aE_) {if(caml_string_notequal(match,cst_IBM367)) if (caml_string_notequal(match,cst_IBM819) && caml_string_notequal(match,cst_ISO_8859_1$0) && caml_string_notequal(match,cst_ISO_IR_100)) {if(caml_string_notequal(match,cst_ISO_IR_6))switch$1 = 2} else switch$1 = 1} else switch$1 = 1; else if (caml_string_notequal(match,cst_ANSI_X3_4_1968) && caml_string_notequal(match,cst_ANSI_X3_4_1986) && caml_string_notequal(match,cst_ASCII) && caml_string_notequal(match,cst_CP367)) if(caml_string_notequal(match,cst_CP819)) {if(caml_string_notequal(match,cst_CSASCII))switch$1 = 2} else switch$1 = 1} switch(switch$1){case 2:return 0;case 0:return _g_;default:return _h_}} function encoding_to_string(param) {return 143365725 <= param ?423112016 <= param ?684370880 <= param?cst_UTF_8$0:cst_US_ASCII$0 :338302576 <= param?cst_ISO_8859_1$1:cst_UTF_16$0 :-211555818 <= param?cst_UTF_16LE$0:cst_UTF_16BE$0} function malformed(s,j,l) {return [0,659980059,caml_call3(Stdlib_Bytes[8],s,j,l)]} function malformed_pair(be,hi,s,j,l) {var bs1=caml_call3(Stdlib_Bytes[7],s,j,l),bs0=caml_create_bytes(2); if(be)var j1=1,j0=0;else var j1=0,j0=1; unsafe_set_byte(bs0,j0,hi >>> 8 | 0); unsafe_set_byte(bs0,j1,hi & 255); var _aC_=caml_call2(Stdlib_Bytes[14],bs0,bs1); return [0,659980059,caml_call1(Stdlib_Bytes[48],_aC_)]} var utf_8_len=_i_.slice(); function r_utf_8(s,j,l) {function uchar(c){return [0,852405675,caml_call1(Stdlib_Uchar[9],c)]} var switcher=l - 1 | 0; if(3 < switcher >>> 0)throw [0,Assert_failure,_j_]; switch(switcher) {case 0:return uchar(caml_bytes_unsafe_get(s,j)); case 1: var b0=caml_bytes_unsafe_get(s,j), b1=caml_bytes_unsafe_get(s,j + 1 | 0); return 2 === (b1 >>> 6 | 0) ?uchar((b0 & 31) << 6 | b1 & 63) :malformed(s,j,l); case 2: var b0$0=caml_bytes_unsafe_get(s,j), b1$0=caml_bytes_unsafe_get(s,j + 1 | 0), b2=caml_bytes_unsafe_get(s,j + 2 | 0), c=(b0$0 & 15) << 12 | (b1$0 & 63) << 6 | b2 & 63; if(2 === (b2 >>> 6 | 0)) {if(224 === b0$0) {if(160 <= b1$0 && ! (191 < b1$0))return uchar(c); return malformed(s,j,l)} if(237 === b0$0) {if(128 <= b1$0 && ! (159 < b1$0))return uchar(c); return malformed(s,j,l)} return 2 === (b1$0 >>> 6 | 0)?uchar(c):malformed(s,j,l)} return malformed(s,j,l); default: var b0$1=caml_bytes_unsafe_get(s,j), b1$1=caml_bytes_unsafe_get(s,j + 1 | 0), b2$0=caml_bytes_unsafe_get(s,j + 2 | 0), b3=caml_bytes_unsafe_get(s,j + 3 | 0), c$0= (b0$1 & 7) << 18 | (b1$1 & 63) << 12 | (b2$0 & 63) << 6 | b3 & 63; if(2 === (b3 >>> 6 | 0) && 2 === (b2$0 >>> 6 | 0)) {if(240 === b0$1) {if(144 <= b1$1 && ! (191 < b1$1))return uchar(c$0); return malformed(s,j,l)} if(244 === b0$1) {if(128 <= b1$1 && ! (143 < b1$1))return uchar(c$0); return malformed(s,j,l)} return 2 === (b1$1 >>> 6 | 0)?uchar(c$0):malformed(s,j,l)} return malformed(s,j,l)}} function r_utf_16(s,j0,j1) {var b0=caml_bytes_unsafe_get(s,j0), b1=caml_bytes_unsafe_get(s,j1), u=b0 << 8 | b1; if(55296 <= u && ! (57343 < u)) return 56319 < u ?malformed(s,caml_call2(Stdlib[16],j0,j1),2) :[0,16161,u]; return [0,852405675,caml_call1(Stdlib_Uchar[9],u)]} function r_utf_16_lo(hi,s,j0,j1) {var b0=caml_bytes_unsafe_get(s,j0), b1=caml_bytes_unsafe_get(s,j1), lo=b0 << 8 | b1; if(56320 <= lo && ! (57343 < lo)) return [0, 852405675, caml_call1 (Stdlib_Uchar[9],((hi & 1023) << 10 | lo & 1023) + 65536 | 0)]; return malformed_pair(j0 < j1?1:0,hi,s,caml_call2(Stdlib[16],j0,j1),2)} function r_encoding(s,j,l) {function some(i){return i < l?[0,caml_bytes_unsafe_get(s,j + i | 0)]:0} var match=some(0),match$0=some(1),match$1=some(2); if(match) {var _aB_=match[1],switch$0=0; if(240 <= _aB_) if(254 === _aB_) {if(match$0){if(255 === match$0[1])return _k_;switch$0 = 1}} else if(255 === _aB_) {if(match$0){if(254 === match$0[1])return _p_;switch$0 = 1}} else switch$0 = 1; else if(0 === _aB_) {if(match$0) {var p=match$0[1]; if(0 < p)return [0,-211558048,[0,605782321,p]]; switch$0 = 1}} else if(239 <= _aB_) {if(match$0) if(187 === match$0[1]) {if(match$1 && 191 === match$1[1])return _q_} else switch$0 = 1} else switch$0 = 1; if(switch$0 && match$0 && 0 === match$0[1] && 0 < _aB_) return [0,-211555818,[0,605782321,_aB_]]; if(0 === caml_check_bound(utf_8_len,_aB_)[1 + _aB_]) {if(match$0)return _l_; if(match$1)throw [0,Assert_failure,_m_]; return _n_} return _o_} if(match$0)throw [0,Assert_failure,_r_]; if(match$1)throw [0,Assert_failure,_s_]; return _t_} function pp_decode(ppf,param) {if(typeof param === "number") return 1006505782 <= param ?caml_call2(_a_,ppf,_u_) :caml_call2(_a_,ppf,_v_); if(852405675 <= param[1]) {var u=param[2]; return caml_call3(_a_,ppf,_w_,caml_call1(Stdlib_Uchar[10],u))} var bs=param[2],l=caml_ml_string_length(bs); caml_call2(_a_,ppf,_x_); if(0 < l)caml_call3(_a_,ppf,_y_,caml_string_get(bs,0)); var _az_=l - 1 | 0,_ay_=1; if(! (_az_ < 1)) {var i=_ay_; for(;;) {caml_call3(_a_,ppf,_A_,caml_string_get(bs,i)); var _aA_=i + 1 | 0; if(_az_ !== i){var i=_aA_;continue} break}} return caml_call2(_a_,ppf,_z_)} function i_rem(d){return (d[7] - d[6] | 0) + 1 | 0} function eoi(d) {d[5] = Stdlib_Bytes[3];d[6] = 0;d[7] = Stdlib[20];return 0} function src(d,s,j,l) {if(0 <= j && 0 <= l && ! (caml_ml_bytes_length(s) < (j + l | 0))) return 0 === l?eoi(d):(d[5] = s,d[6] = j,d[7] = (j + l | 0) - 1 | 0,0); return invalid_bounds(j,l)} function refill(k,d) {var _ax_=d[1]; if(typeof _ax_ === "number"){d[18] = k;return 1006505782} if(438511779 <= _ax_[1]) {var ic=_ax_[2], rc=caml_call4(Stdlib[84],ic,d[5],0,caml_ml_bytes_length(d[5])); src(d,d[5],0,rc); return caml_call1(k,d)} eoi(d); return caml_call1(k,d)} function t_need(d,need){d[9] = 0;d[10] = need;return 0} function t_fill(k,d) {function blit(d,l) {caml_blit_bytes(d[5],d[6],d[8],d[9],l); d[6] = d[6] + l | 0; d[9] = d[9] + l | 0; return 0} var rem=i_rem(d); if(0 <= rem) {var need=d[10] - d[9] | 0; return rem < need ?(blit(d,rem),refill(function(_aw_){return t_fill(k,_aw_)},d)) :(blit(d,need),caml_call1(k,d))} return caml_call1(k,d)} function ret(k,v,byte_count,d) {d[18] = k;d[15] = d[15] + byte_count | 0;return caml_call2(d[17],d,v)} function decode_us_ascii(d) {var rem=i_rem(d); if(0 < rem) {var j=d[6]; d[6] = d[6] + 1 | 0; var _au_=d[5], b0=caml_bytes_unsafe_get(_au_,j), _at_=1, _av_= 127 < b0 ?malformed(_au_,j,1) :[0,852405675,caml_call1(Stdlib_Uchar[9],b0)]; return ret(decode_us_ascii,_av_,_at_,d)} return 0 <= rem?refill(decode_us_ascii,d):3455931} function decode_iso_8859_1(d) {var rem=i_rem(d); if(0 < rem) {var j=d[6]; d[6] = d[6] + 1 | 0; return ret (decode_iso_8859_1, [0, 852405675, caml_call1(Stdlib_Uchar[9],caml_bytes_unsafe_get(d[5],j))], 1, d)} return 0 <= rem?refill(decode_iso_8859_1,d):3455931} function t_decode_utf_8(d) {if(d[9] < d[10]) {var _ar_=d[9];return ret(decode_utf_8,malformed(d[8],0,d[9]),_ar_,d)} var _as_=d[9]; return ret(decode_utf_8,r_utf_8(d[8],0,d[9]),_as_,d)} function decode_utf_8(d) {var rem=i_rem(d); if(0 < rem) {var need=utf_8_len[1 + caml_bytes_unsafe_get(d[5],d[6])]; if(rem < need){t_need(d,need);return t_fill(t_decode_utf_8,d)} var j=d[6]; return 0 === need ?(d[6] = d[6] + 1 | 0, ret(decode_utf_8,malformed(d[5],j,1),1,d)) :(d[6] = d[6] + need | 0, ret(decode_utf_8,r_utf_8(d[5],j,need),need,d))} return 0 <= rem?refill(decode_utf_8,d):3455931} function t_decode_utf_16be_lo(hi,d) {var bcount=d[9] + 2 | 0; return d[9] < d[10] ?ret(decode_utf_16be,malformed_pair(1,hi,d[8],0,d[9]),bcount,d) :ret(decode_utf_16be,r_utf_16_lo(hi,d[8],0,1),bcount,d)} function decode_utf_16be_lo(v,d) {if(659980059 <= v[1])return ret(decode_utf_16be,v,2,d); var hi=v[2],rem=i_rem(d); if(2 <= rem) {var j=d[6]; d[6] = d[6] + 2 | 0; return ret(decode_utf_16be,r_utf_16_lo(hi,d[5],j,j + 1 | 0),4,d)} t_need(d,2); return t_fill(function(_aq_){return t_decode_utf_16be_lo(hi,_aq_)},d)} function t_decode_utf_16be(d) {if(d[9] < d[10]) {var _ap_=d[9]; return ret(decode_utf_16be,malformed(d[8],0,d[9]),_ap_,d)} return decode_utf_16be_lo(r_utf_16(d[8],0,1),d)} function decode_utf_16be(d) {var rem=i_rem(d); if(0 < rem) {if(2 <= rem) {var j=d[6]; d[6] = d[6] + 2 | 0; return decode_utf_16be_lo(r_utf_16(d[5],j,j + 1 | 0),d)} t_need(d,2); return t_fill(t_decode_utf_16be,d)} return 0 <= rem?refill(decode_utf_16be,d):3455931} function t_decode_utf_16_lo(hi,d) {var bcount=d[9] + 2 | 0; return d[9] < d[10] ?ret(decode_utf_16,malformed_pair(0,hi,d[8],0,d[9]),bcount,d) :ret(decode_utf_16,r_utf_16_lo(hi,d[8],1,0),bcount,d)} function decode_utf_16le_lo(v,d) {if(659980059 <= v[1])return ret(decode_utf_16,v,2,d); var hi=v[2],rem=i_rem(d); if(2 <= rem) {var j=d[6]; d[6] = d[6] + 2 | 0; return ret(decode_utf_16,r_utf_16_lo(hi,d[5],j + 1 | 0,j),4,d)} t_need(d,2); return t_fill(function(_ao_){return t_decode_utf_16_lo(hi,_ao_)},d)} function t_decode_utf_16(d) {if(d[9] < d[10]) {var _an_=d[9];return ret(decode_utf_16,malformed(d[8],0,d[9]),_an_,d)} return decode_utf_16le_lo(r_utf_16(d[8],1,0),d)} function decode_utf_16(d) {var rem=i_rem(d); if(0 < rem) {if(2 <= rem) {var j=d[6]; d[6] = d[6] + 2 | 0; return decode_utf_16le_lo(r_utf_16(d[5],j + 1 | 0,j),d)} t_need(d,2); return t_fill(t_decode_utf_16,d)} return 0 <= rem?refill(decode_utf_16,d):3455931} function guessed_utf_16(d,be,v) {if(be) var j1=1, j0=0, t_decode_utf_16_lo$0=t_decode_utf_16be_lo, t_decode_utf_16$0=t_decode_utf_16be, decode_utf_16$0=decode_utf_16be; else var j1=0, j0=1, t_decode_utf_16_lo$0=t_decode_utf_16_lo, t_decode_utf_16$0=t_decode_utf_16, decode_utf_16$0=decode_utf_16; function b3(k,d) {return 3 <= d[9] ?(d[10] = 2, d[9] = 1, unsafe_set_byte(d[8],0,caml_bytes_unsafe_get(d[8],2)), t_fill(k,d)) :decode_utf_16$0(d)} if(typeof v === "number") {if(427938126 <= v) {var v$0=r_utf_16(d[8],j0,j1); if(659980059 <= v$0[1]) {var _ad_=2; return ret (function(_am_){return b3(t_decode_utf_16$0,_am_)}, v$0, _ad_, d)} var hi=v$0[2]; if(3 <= d[9]) return b3(function(_al_){return t_decode_utf_16_lo$0(hi,_al_)},d); var _ae_=d[9]; return ret (decode_utf_16$0, malformed_pair(be,hi,Stdlib_Bytes[3],0,0), _ae_, d)} var _af_=2,_ag_=[0,852405675,u_bom]; return ret (function(_ak_){return b3(t_decode_utf_16$0,_ak_)}, _ag_, _af_, d)} var u=v[2],_ah_=2,_ai_=[0,852405675,caml_call1(Stdlib_Uchar[9],u)]; return ret (function(_aj_){return b3(t_decode_utf_16$0,_aj_)},_ai_,_ah_,d)} function k(d) {function setup(d) {var match=r_encoding(d[8],0,d[9]),_ac_=match[1]; if(-211555818 === _ac_) {var r=match[2]; d[2] = -211555818; d[18] = decode_utf_16; return guessed_utf_16(d,0,r)} if(684370880 <= _ac_) {var r$0=match[2]; d[2] = 684370880; d[18] = decode_utf_8; if(3455931 === r$0)return 3455931; if(427938126 <= r$0) {var b3= function(d) {var b3=caml_bytes_unsafe_get(d[8],2), n=caml_check_bound(utf_8_len,b3)[1 + b3]; return 0 === n ?ret(decode_utf_8,malformed(d[8],2,1),1,d) :(d[10] = n, d[9] = 1, unsafe_set_byte(d[8],0,b3), t_fill(t_decode_utf_8,d))}, b2= function(d) {var b2=caml_bytes_unsafe_get(d[8],1), b3$0=2 < d[9]?b3:decode_utf_8, n=caml_check_bound(utf_8_len,b2)[1 + b2]; if(0 === n)return ret(b3$0,malformed(d[8],1,1),1,d); if(1 === n)return ret(b3$0,r_utf_8(d[8],1,1),1,d); d[10] = n; unsafe_set_byte(d[8],0,b2); if(3 <= d[9]) {d[9] = 2; unsafe_set_byte(d[8],1,caml_bytes_unsafe_get(d[8],2))} else d[9] = 1; return t_fill(t_decode_utf_8,d)}, b1=caml_bytes_unsafe_get(d[8],0), b2$0=1 < d[9]?b2:decode_utf_8, n=caml_check_bound(utf_8_len,b1)[1 + b1]; if(4 < n >>> 0)throw [0,Assert_failure,_B_]; switch(n) {case 0:return ret(b2$0,malformed(d[8],0,1),1,d); case 1:return ret(b2$0,r_utf_8(d[8],0,1),1,d); case 2: return 2 <= d[9] ?3 <= d[9] ?ret(b3,r_utf_8(d[8],0,2),2,d) :ret(decode_utf_8,r_utf_8(d[8],0,2),2,d) :ret(decode_utf_8,malformed(d[8],0,1),1,d); case 3: if(3 <= d[9])return ret(decode_utf_8,r_utf_8(d[8],0,3),3,d); var _aa_=d[9]; return ret(decode_utf_8,malformed(d[8],0,d[9]),_aa_,d); default: if(3 <= d[9]){d[10] = 4;return t_fill(t_decode_utf_8,d)} var _ab_=d[9]; return ret(decode_utf_8,malformed(d[8],0,d[9]),_ab_,d)}} return ret(decode_utf_8,[0,852405675,u_bom],3,d)} var r$1=match[2]; d[2] = -211558048; d[18] = decode_utf_16be; return guessed_utf_16(d,1,r$1)} t_need(d,3); return t_fill(setup,d)} function nline(d){d[14] = 0;d[13] = d[13] + 1 | 0;return 0} function ncol(d){d[14] = d[14] + 1 | 0;return 0} function ncount(d){d[16] = d[16] + 1 | 0;return 0} function cr(d,b){d[12] = b;return 0} function pp(d,v) {if(852405675 <= v[1]) {var u=v[2], match=caml_call1(Stdlib_Uchar[10],u), _$_=match - 133 | 0, switch$0=0; if(8100 < _$_ >>> 0) {var switcher=_$_ + 123 | 0; if(! (3 < switcher >>> 0)) switch(switcher) {case 0: var last_cr=d[12]; cr(d,0); ncount(d); return last_cr?v:(nline(d),v); case 1:break; case 2:switch$0 = 1;break; default:cr(d,1);ncount(d);nline(d);return v}} else if(8097 < _$_ - 1 >>> 0)switch$0 = 1; return switch$0 ?(cr(d,0),ncount(d),nline(d),v) :(cr(d,0),ncount(d),ncol(d),v)} cr(d,0); ncount(d); ncol(d); return v} function pp_nln_readline(d,v) {if(852405675 <= v[1]) {var u=v[2], match=caml_call1(Stdlib_Uchar[10],u), ___=match - 133 | 0, switch$0=0; if(8100 < ___ >>> 0) {var switcher=___ + 123 | 0; if(! (3 < switcher >>> 0)) switch(switcher) {case 0: var last_cr=d[12]; cr(d,0); return last_cr ?caml_call1(d[18],d) :(ncount(d),nline(d),[0,852405675,d[4]]); case 1:break; case 2:switch$0 = 1;break; default:cr(d,1);ncount(d);nline(d);return [0,852405675,d[4]]}} else if(8097 < ___ - 1 >>> 0)switch$0 = 1; return switch$0 ?(cr(d,0),ncount(d),nline(d),[0,852405675,d[4]]) :(cr(d,0),ncount(d),ncol(d),v)} cr(d,0); ncount(d); ncol(d); return v} function pp_nln_nlf(d,v) {if(852405675 <= v[1]) {var u=v[2],match=caml_call1(Stdlib_Uchar[10],u),switch$0=0; if(14 <= match) {if(8232 <= match) {if(! (8234 <= match))switch$0 = 1} else if(133 === match) {cr(d,0);ncount(d);nline(d);return [0,852405675,d[4]]}} else if(10 <= match) switch(match - 10 | 0) {case 0: var last_cr=d[12]; cr(d,0); return last_cr ?caml_call1(d[18],d) :(ncount(d),nline(d),[0,852405675,d[4]]); case 1:break; case 2:switch$0 = 1;break; default:cr(d,1);ncount(d);nline(d);return [0,852405675,d[4]]} return switch$0 ?(cr(d,0),ncount(d),nline(d),v) :(cr(d,0),ncount(d),ncol(d),v)} cr(d,0); ncount(d); ncol(d); return v} function pp_nln_ascii(d,v) {if(852405675 <= v[1]) {var u=v[2], match=caml_call1(Stdlib_Uchar[10],u), _Z_=match - 133 | 0, switch$0=0; if(8100 < _Z_ >>> 0) {var switcher=_Z_ + 123 | 0; if(! (3 < switcher >>> 0)) switch(switcher) {case 0: var last_cr=d[12]; cr(d,0); return last_cr ?caml_call1(d[18],d) :(ncount(d),nline(d),[0,852405675,d[4]]); case 1:break; case 2:switch$0 = 1;break; default:cr(d,1);ncount(d);nline(d);return [0,852405675,d[4]]}} else if(8097 < _Z_ - 1 >>> 0)switch$0 = 1; return switch$0 ?(cr(d,0),ncount(d),nline(d),v) :(cr(d,0),ncount(d),ncol(d),v)} cr(d,0); ncount(d); ncol(d); return v} function decode_fun(param) {return 143365725 <= param ?423112016 <= param ?684370880 <= param?decode_utf_8:decode_us_ascii :338302576 <= param?decode_iso_8859_1:decode_utf_16be :-211555818 <= param?decode_utf_16:decode_utf_16be} function decoder(nln,encoding,src) {if(nln) {var _X_=nln[1],_Y_=_X_[1]; if(3895880 === _Y_) var nl=_X_[2],nl$0=nl,pp$0=pp_nln_nlf; else if(605782321 <= _Y_) var nl$1=_X_[2],nl$0=nl$1,pp$0=pp_nln_ascii; else var nl$2=_X_[2],nl$0=nl$2,pp$0=pp_nln_readline} else var nl$3=caml_call1(Stdlib_Uchar[9],10),nl$0=nl$3,pp$0=pp; if(encoding) var e=encoding[1],k$0=decode_fun(e),encoding$0=e; else var k$0=k,encoding$0=684370880; if(typeof src === "number") var i_max=0,i_pos=1,i=Stdlib_Bytes[3]; else if(438511779 <= src[1]) var i_max=0,i_pos=1,i=caml_create_bytes(65536); else var s=src[2], i_max$0=caml_ml_string_length(s) - 1 | 0, i$0=caml_call1(Stdlib_Bytes[49],s), i_max=i_max$0, i_pos=0, i=i$0; var utf16=143365725 === encoding$0?1:0; return [0, src, encoding$0, nln, nl$0, i, i_pos, i_max, caml_create_bytes(4), 0, 0, 0, 0, 1, 0, 0, 0, function(d,v) {if(852405675 <= v[1]) {var u=v[2],match=caml_call1(Stdlib_Uchar[10],u); if(65279 === match) {if(utf16){d[2] = -211558048;d[18] = decode_utf_16be} d[11] = 1; d[17] = pp$0; return caml_call1(d[18],d)} if(65534 === match && utf16) {d[2] = -211555818; d[18] = decode_utf_16; d[11] = 1; d[17] = pp$0; return caml_call1(d[18],d)} d[11] = 0; d[17] = pp$0; return caml_call2(d[17],d,v)} d[11] = 0; d[17] = pp$0; return caml_call2(d[17],d,v)}, k$0]} function decode(d){return caml_call1(d[18],d)} function decoder_line(d){return d[13]} function decoder_col(d){return d[14]} function decoder_byte_count(d){return d[15]} function decoder_count(d){return d[16]} function decoder_removed_bom(d){return d[11]} function decoder_src(d){return d[1]} function decoder_nln(d){return d[3]} function decoder_encoding(d){return d[2]} function set_decoder_encoding(d,e) {d[2] = e;d[18] = decode_fun(e);return 0} function o_rem(e){return (e[5] - e[4] | 0) + 1 | 0} function dst(e,s,j,l) {var _U_=j < 0?1:0; if(_U_) var _V_=_U_; else var _W_=l < 0?1:0, _V_=_W_ || (caml_ml_bytes_length(s) < (j + l | 0)?1:0); if(_V_)invalid_bounds(j,l); e[3] = s; e[4] = j; e[5] = (j + l | 0) - 1 | 0; return 0} function flush(k,e) {var _T_=e[1]; if(typeof _T_ === "number") {e[9] = function(e,param) {if(typeof param === "number" && 1006505782 <= param) return caml_call1(k,e); return caml_call1(Stdlib[1],cst_expected_Await_encode)}; return 939392865} if(438511779 <= _T_[1]) {var oc=_T_[2]; caml_call4(Stdlib[68],oc,e[3],0,e[4]); e[4] = 0; return caml_call1(k,e)} var b=_T_[2],o=caml_call1(Stdlib_Bytes[48],e[3]); caml_call4(Stdlib_Buffer[18],b,o,0,e[4]); e[4] = 0; return caml_call1(k,e)} function t_range(e,max){e[7] = 0;e[8] = max;return 0} function t_flush(k,e) {function blit(e,l) {caml_blit_bytes(e[6],e[7],e[3],e[4],l); e[4] = e[4] + l | 0; e[7] = e[7] + l | 0; return 0} var rem=o_rem(e),len=(e[8] - e[7] | 0) + 1 | 0; return rem < len ?(blit(e,rem),flush(function(_S_){return t_flush(k,_S_)},e)) :(blit(e,len),caml_call1(k,e))} function encode_utf_8(e,v) {function k(e){e[9] = encode_utf_8;return 17724} if(typeof v === "number")return 1006505782 <= v?k(e):flush(k,e); var u=v[2],u$0=caml_call1(Stdlib_Uchar[10],u),rem=o_rem(e); if(127 < u$0) {if(2047 < u$0) {if(65535 < u$0) {if(4 <= rem) {var j=e[4];e[4] = e[4] + 4 | 0;var k$0=k,j$0=j,s=e[3]} else {t_range(e,3); var _M_=function(_R_){return t_flush(k,_R_)}, k$0=_M_, j$0=0, s=e[6]} unsafe_set_byte(s,j$0,240 | u$0 >>> 18 | 0); unsafe_set_byte(s,j$0 + 1 | 0,128 | (u$0 >>> 12 | 0) & 63); unsafe_set_byte(s,j$0 + 2 | 0,128 | (u$0 >>> 6 | 0) & 63); unsafe_set_byte(s,j$0 + 3 | 0,128 | u$0 & 63); return k$0(e)} if(3 <= rem) {var j$1=e[4];e[4] = e[4] + 3 | 0;var k$1=k,j$2=j$1,s$0=e[3]} else {t_range(e,2); var _N_=function(_Q_){return t_flush(k,_Q_)}, k$1=_N_, j$2=0, s$0=e[6]} unsafe_set_byte(s$0,j$2,224 | u$0 >>> 12 | 0); unsafe_set_byte(s$0,j$2 + 1 | 0,128 | (u$0 >>> 6 | 0) & 63); unsafe_set_byte(s$0,j$2 + 2 | 0,128 | u$0 & 63); return k$1(e)} if(2 <= rem) {var j$3=e[4];e[4] = e[4] + 2 | 0;var k$2=k,j$4=j$3,s$1=e[3]} else {t_range(e,1); var _O_=function(_P_){return t_flush(k,_P_)},k$2=_O_,j$4=0,s$1=e[6]} unsafe_set_byte(s$1,j$4,192 | u$0 >>> 6 | 0); unsafe_set_byte(s$1,j$4 + 1 | 0,128 | u$0 & 63); return k$2(e)} return 1 <= rem ?(unsafe_set_byte(e[3],e[4],u$0),e[4] = e[4] + 1 | 0,k(e)) :flush(function(e){return encode_utf_8(e,v)},e)} function encode_utf_16be(e,v) {function k(e){e[9] = encode_utf_16be;return 17724} if(typeof v === "number")return 1006505782 <= v?k(e):flush(k,e); var u=v[2],u$0=caml_call1(Stdlib_Uchar[10],u),rem=o_rem(e); if(65536 <= u$0) {if(4 <= rem) {var j=e[4];e[4] = e[4] + 4 | 0;var k$0=k,j$0=j,s=e[3]} else {t_range(e,3); var _I_=function(_L_){return t_flush(k,_L_)},k$0=_I_,j$0=0,s=e[6]} var u$1=u$0 - 65536 | 0, hi=55296 | u$1 >>> 10 | 0, lo=56320 | u$1 & 1023; unsafe_set_byte(s,j$0,hi >>> 8 | 0); unsafe_set_byte(s,j$0 + 1 | 0,hi & 255); unsafe_set_byte(s,j$0 + 2 | 0,lo >>> 8 | 0); unsafe_set_byte(s,j$0 + 3 | 0,lo & 255); return k$0(e)} if(2 <= rem) {var j$1=e[4];e[4] = e[4] + 2 | 0;var k$1=k,j$2=j$1,s$0=e[3]} else {t_range(e,1); var _J_=function(_K_){return t_flush(k,_K_)},k$1=_J_,j$2=0,s$0=e[6]} unsafe_set_byte(s$0,j$2,u$0 >>> 8 | 0); unsafe_set_byte(s$0,j$2 + 1 | 0,u$0 & 255); return k$1(e)} function encode_utf_16le(e,v) {function k(e){e[9] = encode_utf_16le;return 17724} if(typeof v === "number")return 1006505782 <= v?k(e):flush(k,e); var u=v[2],u$0=caml_call1(Stdlib_Uchar[10],u),rem=o_rem(e); if(65536 <= u$0) {if(4 <= rem) {var j=e[4];e[4] = e[4] + 4 | 0;var k$0=k,j$0=j,s=e[3]} else {t_range(e,3); var _E_=function(_H_){return t_flush(k,_H_)},k$0=_E_,j$0=0,s=e[6]} var u$1=u$0 - 65536 | 0, hi=55296 | u$1 >>> 10 | 0, lo=56320 | u$1 & 1023; unsafe_set_byte(s,j$0,hi & 255); unsafe_set_byte(s,j$0 + 1 | 0,hi >>> 8 | 0); unsafe_set_byte(s,j$0 + 2 | 0,lo & 255); unsafe_set_byte(s,j$0 + 3 | 0,lo >>> 8 | 0); return k$0(e)} if(2 <= rem) {var j$1=e[4];e[4] = e[4] + 2 | 0;var k$1=k,j$2=j$1,s$0=e[3]} else {t_range(e,1); var _F_=function(_G_){return t_flush(k,_G_)},k$1=_F_,j$2=0,s$0=e[6]} unsafe_set_byte(s$0,j$2,u$0 & 255); unsafe_set_byte(s$0,j$2 + 1 | 0,u$0 >>> 8 | 0); return k$1(e)} function encoder(encoding,dst) {if(typeof dst === "number") var o_max=0,o_pos=1,o=Stdlib_Bytes[3]; else var o$0=caml_create_bytes(65536),o_max=65535,o_pos=0,o=o$0; var _D_= 143365725 <= encoding ?684370880 <= encoding?encode_utf_8:encode_utf_16be :-211555818 <= encoding?encode_utf_16le:encode_utf_16be; return [0,dst,encoding,o,o_pos,o_max,caml_create_bytes(4),1,0,_D_]} function encode(e,v){return caml_call2(e[9],e,v)} function encoder_encoding(e){return e[2]} function encoder_dst(e){return e[1]} var Manual=[0,src,dst,o_rem]; function encoding_guess(s) {var s$0=caml_call1(Stdlib_Bytes[49],s), match= r_encoding(s$0,0,caml_call2(Stdlib[17],caml_ml_bytes_length(s$0),3)), _C_=match[1]; if(-211555818 === _C_) {var d=match[2];return [0,-211555818,3299808 === d?1:0]} if(684370880 <= _C_) {var d$0=match[2];return [0,684370880,3299808 === d$0?1:0]} var d$1=match[2]; return [0,-211558048,3299808 === d$1?1:0]} function fold_utf_8(opt,len,f,acc,s) {if(opt)var sth=opt[1],pos=sth;else var pos=0; if(len) var l=len[1],len$0=l; else var len$0=caml_ml_string_length(s) - pos | 0; var last=(pos + len$0 | 0) - 1 | 0, s$0=caml_call1(Stdlib_Bytes[49],s), acc$0=acc, i=pos; for(;;) {if(last < i)return acc$0; var need=utf_8_len[1 + caml_bytes_unsafe_get(s$0,i)]; if(0 === need) {var i$0=i + 1 | 0, acc$1=caml_call3(f,acc$0,i,malformed(s$0,i,1)), acc$0=acc$1, i=i$0; continue} var rem=(last - i | 0) + 1 | 0; if(rem < need)return caml_call3(f,acc$0,i,malformed(s$0,i,rem)); var i$1=i + need | 0, acc$2=caml_call3(f,acc$0,i,r_utf_8(s$0,i,need)), acc$0=acc$2, i=i$1; continue}} function fold_utf_16be(opt,len,f,acc,s) {if(opt)var sth=opt[1],pos=sth;else var pos=0; if(len) var l=len[1],len$0=l; else var len$0=caml_ml_string_length(s) - pos | 0; var last=(pos + len$0 | 0) - 1 | 0, s$0=caml_call1(Stdlib_Bytes[49],s), acc$0=acc, i=pos; for(;;) {if(last < i)return acc$0; var rem=(last - i | 0) + 1 | 0; if(2 <= rem) {var v=r_utf_16(s$0,i,i + 1 | 0); if(659980059 <= v[1]) {var i$0=i + 2 | 0,acc$1=caml_call3(f,acc$0,i,v),acc$0=acc$1,i=i$0; continue} var hi=v[2]; if(4 <= rem) {var i$1=i + 4 | 0, acc$2= caml_call3(f,acc$0,i,r_utf_16_lo(hi,s$0,i + 2 | 0,i + 3 | 0)), acc$0=acc$2, i=i$1; continue} return caml_call3(f,acc$0,i,malformed(s$0,i,rem))} return caml_call3(f,acc$0,i,malformed(s$0,i,1))}} function fold_utf_16le(opt,len,f,acc,s) {if(opt)var sth=opt[1],pos=sth;else var pos=0; if(len) var l=len[1],len$0=l; else var len$0=caml_ml_string_length(s) - pos | 0; var last=(pos + len$0 | 0) - 1 | 0, s$0=caml_call1(Stdlib_Bytes[49],s), acc$0=acc, i=pos; for(;;) {if(last < i)return acc$0; var rem=(last - i | 0) + 1 | 0; if(2 <= rem) {var v=r_utf_16(s$0,i + 1 | 0,i); if(659980059 <= v[1]) {var i$0=i + 2 | 0,acc$1=caml_call3(f,acc$0,i,v),acc$0=acc$1,i=i$0; continue} var hi=v[2]; if(4 <= rem) {var i$1=i + 4 | 0, acc$2= caml_call3(f,acc$0,i,r_utf_16_lo(hi,s$0,i + 3 | 0,i + 2 | 0)), acc$0=acc$2, i=i$1; continue} return caml_call3(f,acc$0,i,malformed(s$0,i,rem))} return caml_call3(f,acc$0,i,malformed(s$0,i,1))}} var String=[0,encoding_guess,fold_utf_8,fold_utf_16be,fold_utf_16le]; function add_utf_8(b,u) {var u$0=caml_call1(Stdlib_Uchar[10],u); function w(byte$0){return caml_call2(Stdlib_Buffer[12],b,byte$0)} return 127 < u$0 ?2047 < u$0 ?65535 < u$0 ?(w(240 | u$0 >>> 18 | 0), w(128 | (u$0 >>> 12 | 0) & 63), w(128 | (u$0 >>> 6 | 0) & 63), w(128 | u$0 & 63)) :(w(224 | u$0 >>> 12 | 0), w(128 | (u$0 >>> 6 | 0) & 63), w(128 | u$0 & 63)) :(w(192 | u$0 >>> 6 | 0),w(128 | u$0 & 63)) :w(u$0)} function add_utf_16be(b,u) {var u$0=caml_call1(Stdlib_Uchar[10],u); function w(byte$0){return caml_call2(Stdlib_Buffer[12],b,byte$0)} if(65536 <= u$0) {var u$1=u$0 - 65536 | 0, hi=55296 | u$1 >>> 10 | 0, lo=56320 | u$1 & 1023; w(hi >>> 8 | 0); w(hi & 255); w(lo >>> 8 | 0); return w(lo & 255)} w(u$0 >>> 8 | 0); return w(u$0 & 255)} function add_utf_16le(b,u) {var u$0=caml_call1(Stdlib_Uchar[10],u); function w(byte$0){return caml_call2(Stdlib_Buffer[12],b,byte$0)} if(65536 <= u$0) {var u$1=u$0 - 65536 | 0, hi=55296 | u$1 >>> 10 | 0, lo=56320 | u$1 & 1023; w(hi & 255); w(hi >>> 8 | 0); w(lo & 255); return w(lo >>> 8 | 0)} w(u$0 & 255); return w(u$0 >>> 8 | 0)} var Buffer=[0,add_utf_8,add_utf_16be,add_utf_16le], Uutf= [0, u_bom, u_rep, encoding_of_string, encoding_to_string, decoder, decode, decoder_encoding, set_decoder_encoding, decoder_line, decoder_col, decoder_byte_count, decoder_count, decoder_removed_bom, decoder_src, decoder_nln, pp_decode, encoder, encode, encoder_encoding, encoder_dst, Manual, String, Buffer]; runtime.caml_register_global(66,Uutf,"Uutf"); return} (globalThis)); //# 1 "../.js/re/re.cma.js" (function(globalThis) {"use strict"; var runtime=globalThis.jsoo_runtime, caml_bytes_get=runtime.caml_bytes_get, caml_bytes_set=runtime.caml_bytes_set, caml_bytes_unsafe_set=runtime.caml_bytes_unsafe_set, caml_check_bound=runtime.caml_check_bound, caml_compare=runtime.caml_compare, caml_create_bytes=runtime.caml_create_bytes, caml_equal=runtime.caml_equal, caml_fresh_oo_id=runtime.caml_fresh_oo_id, caml_int_compare=runtime.caml_int_compare, caml_lessthan=runtime.caml_lessthan, caml_list_of_js_array=runtime.caml_list_of_js_array, caml_make_vect=runtime.caml_make_vect, caml_ml_string_length=runtime.caml_ml_string_length, caml_obj_tag=runtime.caml_obj_tag, caml_register_global=runtime.caml_register_global, caml_string_get=runtime.caml_string_get, caml_string_notequal=runtime.caml_string_notequal, caml_string_of_jsbytes=runtime.caml_string_of_jsbytes, caml_trampoline=runtime.caml_trampoline, caml_trampoline_return=runtime.caml_trampoline_return, caml_wrap_exception=runtime.caml_wrap_exception; function caml_call1(f,a0) {return f.length == 1?f(a0):runtime.caml_call_gen(f,[a0])} function caml_call2(f,a0,a1) {return f.length == 2?f(a0,a1):runtime.caml_call_gen(f,[a0,a1])} function caml_call3(f,a0,a1,a2) {return f.length == 3?f(a0,a1,a2):runtime.caml_call_gen(f,[a0,a1,a2])} function caml_call4(f,a0,a1,a2,a3) {return f.length == 4 ?f(a0,a1,a2,a3) :runtime.caml_call_gen(f,[a0,a1,a2,a3])} function caml_call5(f,a0,a1,a2,a3,a4) {return f.length == 5 ?f(a0,a1,a2,a3,a4) :runtime.caml_call_gen(f,[a0,a1,a2,a3,a4])} function caml_call7(f,a0,a1,a2,a3,a4,a5,a6) {return f.length == 7 ?f(a0,a1,a2,a3,a4,a5,a6) :runtime.caml_call_gen(f,[a0,a1,a2,a3,a4,a5,a6])} var global_data=runtime.caml_get_global_data(), cst_Re_cset_pick=caml_string_of_jsbytes("Re_cset.pick"), cany=[0,[0,0,255],0], cst_eps=caml_string_of_jsbytes("eps"), cst_cst=caml_string_of_jsbytes("cst"), cst_alt=caml_string_of_jsbytes("alt"), cst_seq=caml_string_of_jsbytes("seq"), cst_rep=caml_string_of_jsbytes("rep"), cst_mark=caml_string_of_jsbytes("mark"), cst_erase=caml_string_of_jsbytes("erase"), cst_before=caml_string_of_jsbytes("before"), cst_after=caml_string_of_jsbytes("after"), cst_pmark=caml_string_of_jsbytes("pmark"), partial=[17,0,0], partial$0=[12,41,[17,0,0]], cst_Non_greedy=caml_string_of_jsbytes("Non_greedy"), cst_Greedy=caml_string_of_jsbytes("Greedy"), cst_first=caml_string_of_jsbytes("first"), cst_short=caml_string_of_jsbytes("short"), cst_long=caml_string_of_jsbytes("long"), eps_expr=[0,0,0], cst_Group=caml_string_of_jsbytes("Group"), dummy_offset=[0,-1,-1], dummy_string=caml_string_of_jsbytes(""), cst_Beg_of_line=caml_string_of_jsbytes("Beg_of_line"), cst_End_of_line=caml_string_of_jsbytes("End_of_line"), cst_Beg_of_word=caml_string_of_jsbytes("Beg_of_word"), cst_End_of_word=caml_string_of_jsbytes("End_of_word"), cst_Not_bound=caml_string_of_jsbytes("Not_bound"), cst_Beg_of_str=caml_string_of_jsbytes("Beg_of_str"), cst_End_of_str=caml_string_of_jsbytes("End_of_str"), cst_Last_end_of_line=caml_string_of_jsbytes("Last_end_of_line"), cst_Start=caml_string_of_jsbytes("Start"), cst_Stop=caml_string_of_jsbytes("Stop"), cst_Set=caml_string_of_jsbytes("Set"), cst_Sequence=caml_string_of_jsbytes("Sequence"), cst_Alternative=caml_string_of_jsbytes("Alternative"), cst_Repeat=caml_string_of_jsbytes("Repeat"), cst_Sem=caml_string_of_jsbytes("Sem"), cst_Sem_greedy=caml_string_of_jsbytes("Sem_greedy"), cst_Group$0=caml_string_of_jsbytes("Group"), cst_No_group=caml_string_of_jsbytes("No_group"), cst_Nest=caml_string_of_jsbytes("Nest"), cst_Case=caml_string_of_jsbytes("Case"), cst_No_case=caml_string_of_jsbytes("No_case"), cst_Intersection=caml_string_of_jsbytes("Intersection"), cst_Complement=caml_string_of_jsbytes("Complement"), cst_Difference=caml_string_of_jsbytes("Difference"), cst_Pmark=caml_string_of_jsbytes("Pmark"), cst$1=caml_string_of_jsbytes(""), cst$2=caml_string_of_jsbytes(""), cst_Re_replace=caml_string_of_jsbytes("Re.replace"), cst_Re_replace$0=caml_string_of_jsbytes("Re.replace"), cst_Re_split=caml_string_of_jsbytes("Re.split"), cst_Re_split$0=caml_string_of_jsbytes("Re.split"), cst_Re_all=caml_string_of_jsbytes("Re.all"), cst_Re_all$0=caml_string_of_jsbytes("Re.all"), cst_Re_exec_partial=caml_string_of_jsbytes("Re.exec_partial"), cst_Re_execp=caml_string_of_jsbytes("Re.execp"), cst_Re_exec_opt=caml_string_of_jsbytes("Re.exec_opt"), cst_Re_exec=caml_string_of_jsbytes("Re.exec"), cst_Re_diff=caml_string_of_jsbytes("Re.diff"), cst_Re_compl=caml_string_of_jsbytes("Re.compl"), cst_Re_inter=caml_string_of_jsbytes("Re.inter"), cst_Re_repn=caml_string_of_jsbytes("Re.repn"), cst_Re_repn$0=caml_string_of_jsbytes("Re.repn"), cst$0=caml_string_of_jsbytes("\t "), cst_Re_Emacs_Parse_error=caml_string_of_jsbytes("Re__Emacs.Parse_error"), cst_Re_Emacs_Not_supported= caml_string_of_jsbytes("Re__Emacs.Not_supported"), cst_Str_replace_illegal_backsl= caml_string_of_jsbytes("Str.replace: illegal backslash sequence"), cst$5=caml_string_of_jsbytes(""), cst$4=caml_string_of_jsbytes(""), cst$3=caml_string_of_jsbytes(""), cst_Str_group_end=caml_string_of_jsbytes("Str.group_end"), cst_Str_group_beginning=caml_string_of_jsbytes("Str.group_beginning"), beg=[0,caml_string_of_jsbytes(""),0], cst$6=caml_string_of_jsbytes("/**"), cst_Re_Glob_Parse_error=caml_string_of_jsbytes("Re__Glob.Parse_error"), cst$7=caml_string_of_jsbytes(":]"), cst_lower=caml_string_of_jsbytes("lower"), cst_alnum=caml_string_of_jsbytes("alnum"), cst_alpha=caml_string_of_jsbytes("alpha"), cst_ascii=caml_string_of_jsbytes("ascii"), cst_blank=caml_string_of_jsbytes("blank"), cst_cntrl=caml_string_of_jsbytes("cntrl"), cst_digit=caml_string_of_jsbytes("digit"), cst_graph=caml_string_of_jsbytes("graph"), cst_print=caml_string_of_jsbytes("print"), cst_punct=caml_string_of_jsbytes("punct"), cst_space=caml_string_of_jsbytes("space"), cst_upper=caml_string_of_jsbytes("upper"), cst_word=caml_string_of_jsbytes("word"), cst_xdigit=caml_string_of_jsbytes("xdigit"), cst_Invalid_pcre_class=caml_string_of_jsbytes("Invalid pcre class: "), cst_Re_Perl_Parse_error=caml_string_of_jsbytes("Re__Perl.Parse_error"), cst_Re_Perl_Not_supported= caml_string_of_jsbytes("Re__Perl.Not_supported"), posix_class_strings= caml_list_of_js_array ([caml_string_of_jsbytes("alpha"), caml_string_of_jsbytes("alnum"), caml_string_of_jsbytes("ascii"), caml_string_of_jsbytes("blank"), caml_string_of_jsbytes("cntrl"), caml_string_of_jsbytes("digit"), caml_string_of_jsbytes("lower"), caml_string_of_jsbytes("print"), caml_string_of_jsbytes("space"), caml_string_of_jsbytes("upper"), caml_string_of_jsbytes("word"), caml_string_of_jsbytes("punct"), caml_string_of_jsbytes("graph"), caml_string_of_jsbytes("xdigit")]), cst_Re_Posix_Parse_error=caml_string_of_jsbytes("Re__Posix.Parse_error"), cst_Re_Posix_Not_supported= caml_string_of_jsbytes("Re__Posix.Not_supported"), include=global_data.Stdlib__Format, Stdlib_Buffer=global_data.Stdlib__Buffer, Stdlib=global_data.Stdlib, Assert_failure=global_data.Assert_failure, Stdlib_List=global_data.Stdlib__List, Stdlib_Map=global_data.Stdlib__Map, Stdlib_Set=global_data.Stdlib__Set, Stdlib_Array=global_data.Stdlib__Array, Stdlib_Hashtbl=global_data.Stdlib__Hashtbl, Stdlib_Char=global_data.Stdlib__Char, Stdlib_Bytes=global_data.Stdlib__Bytes, Stdlib_String=global_data.Stdlib__String, Stdlib_Seq=global_data.Stdlib__Seq, CamlinternalLazy=global_data.CamlinternalLazy, Re=[0]; caml_register_global(138,Re,"Re__"); var _bN_= [0, [12,59,[17,[0,caml_string_of_jsbytes("@ "),1,0],0]], caml_string_of_jsbytes(";@ ")], _bO_= [0, [18, [1, [0, [11,caml_string_of_jsbytes("<3>"),0], caml_string_of_jsbytes("<3>")]], [12, 91, [17, [0,caml_string_of_jsbytes("@ "),1,0], [15,[17,[0,caml_string_of_jsbytes("@ "),1,0],[12,93,[17,0,0]]]]]]], caml_string_of_jsbytes("@[<3>[@ %a@ ]@]")], _bM_=[0,[12,34,[2,0,[12,34,0]]],caml_string_of_jsbytes('"%s"')], _bL_= [0, [17,[0,caml_string_of_jsbytes("@ "),1,0],[4,0,0,0,0]], caml_string_of_jsbytes("@ %d")], _bK_= [0, [18, [1, [0, [11,caml_string_of_jsbytes("<3>"),0], caml_string_of_jsbytes("<3>")]], [12, 40, [2,0,[17,[0,caml_string_of_jsbytes("@ "),1,0],[15,[12,41,[17,0,0]]]]]]], caml_string_of_jsbytes("@[<3>(%s@ %a)@]")], _bR_=[0,caml_string_of_jsbytes("lib/cset.ml"),153,9], _bP_=[0,[4,0,0,0,0],caml_string_of_jsbytes("%d")], _bQ_=[0,[4,0,0,0,[12,45,[4,0,0,0,0]]],caml_string_of_jsbytes("%d-%d")], _b5_=[0,caml_string_of_jsbytes("lib/automata.ml"),360,21], _bW_= [0, [18, [1, [0, [11,caml_string_of_jsbytes("<2>"),0], caml_string_of_jsbytes("<2>")]], [11, caml_string_of_jsbytes("(Seq"), [17,[0,caml_string_of_jsbytes("@ "),1,0],0]]], caml_string_of_jsbytes("@[<2>(Seq@ ")], _bX_= [0, [17,[0,caml_string_of_jsbytes("@ "),1,0],[15,[12,41,[17,0,0]]]], caml_string_of_jsbytes("@ %a)@]")], _bY_= [0, [18, [1, [0, [11,caml_string_of_jsbytes("<2>"),0], caml_string_of_jsbytes("<2>")]], [11, caml_string_of_jsbytes("(Exp"), [17, [0,caml_string_of_jsbytes("@ "),1,0], [4, 0, 0, 0, [17, [0,caml_string_of_jsbytes("@ "),1,0], [12, 40, [15, [12, 41, [17, [0,caml_string_of_jsbytes("@ "),1,0], [11,caml_string_of_jsbytes("(eps))"),partial]]]]]]]]]], caml_string_of_jsbytes("@[<2>(Exp@ %d@ (%a)@ (eps))@]")], _bZ_= [0, [18, [1, [0, [11,caml_string_of_jsbytes("<2>"),0], caml_string_of_jsbytes("<2>")]], [11, caml_string_of_jsbytes("(Exp"), [17, [0,caml_string_of_jsbytes("@ "),1,0], [4, 0, 0, 0, [17, [0,caml_string_of_jsbytes("@ "),1,0], [12, 40, [15, [12,41,[17,[0,caml_string_of_jsbytes("@ "),1,0],[15,partial$0]]]]]]]]]], caml_string_of_jsbytes("@[<2>(Exp@ %d@ (%a)@ %a)@]")], _b0_= [0, [18, [1, [0, [11,caml_string_of_jsbytes("<2>"),0], caml_string_of_jsbytes("<2>")]], [11, caml_string_of_jsbytes("(Match"), [17,[0,caml_string_of_jsbytes("@ "),1,0],[15,[12,41,[17,0,0]]]]]], caml_string_of_jsbytes("@[<2>(Match@ %a)@]")], _b1_= [0, [17, [0,caml_string_of_jsbytes("@ "),1,0], [11,caml_string_of_jsbytes("| "),0]], caml_string_of_jsbytes("@ | ")], _b2_=[0,[11,caml_string_of_jsbytes("()"),0],caml_string_of_jsbytes("()")], _b3_=[0,0,0], _bV_=[1,0], _bU_= [0, [12,32,[4,0,0,0,[12,45,[4,0,0,0,0]]]], caml_string_of_jsbytes(" %d-%d")], _bT_=[0,[4,0,0,0,[12,45,[4,0,0,0,0]]],caml_string_of_jsbytes("%d-%d")], _b8_= [0, [18, [1,[0,0,caml_string_of_jsbytes("")]], [12, 40, [2, 0, [11, caml_string_of_jsbytes(" ("), [4, 0, 0, 0, [12,32,[4,0,0,0,[11,caml_string_of_jsbytes("))"),[17,0,0]]]]]]]]], caml_string_of_jsbytes("@[(%s (%d %d))@]")], _b__= [0, [15,[17,[0,caml_string_of_jsbytes("@ "),1,0],[4,0,0,0,[15,0]]]], caml_string_of_jsbytes("%a@ %d%a")], _ce_=[0,caml_string_of_jsbytes("lib/core.ml"),690,4], _cB_=[0,caml_string_of_jsbytes("lib/core.ml"),1149,24], _cC_=[0,caml_string_of_jsbytes("lib/core.ml"),1160,27], _cg_=[0,1], _cf_=[0,caml_string_of_jsbytes("lib/core.ml"),723,13], _cd_=[0,caml_string_of_jsbytes("lib/core.ml"),493,35], _b9_=[0,0,0,0,0,0,0,0,0,0,0], _cc_=[0,170,[0,181,[0,186,[0,223,[0,255,0]]]]], _cJ_=[0,1], _cI_=[0,1], _cG_=[0,47,[0,92,0]], _cH_=[0,47,0], _cE_=[0,caml_string_of_jsbytes(""),0], _cF_=[0,caml_string_of_jsbytes(""),0], _cD_=[0,45], _cK_=[0,748194550,8], _cL_=[0,748194550,10], _cM_=[0,748194550,13], _cN_=[0,748194550,9], _cO_=[0,-1,-1]; function equal(x,y){return x === y?1:0} var compare=caml_int_compare; function to_int(x){return x} var pp=include[19]; function intersect(x,y){return 0 !== (x & y)?1:0} function symbol(x,y){return x | y} var dummy=-1, inexistant=1, letter=2, not_letter=4, newline=8, lastnewline=16, search_boundary=32; function from_char(param) {var switch$0=0; if(170 <= param) if(187 <= param) {var _jf_=param - 192 | 0; if(54 < _jf_ >>> 0) {if(56 <= _jf_)switch$0 = 1} else if(23 !== _jf_)switch$0 = 1} else {var _jg_=param - 171 | 0; if(14 < _jg_ >>> 0 || 10 === _jg_)switch$0 = 1} else if(65 <= param) {var _jh_=param - 91 | 0; if(5 < _jh_ >>> 0) {if(! (32 <= _jh_))switch$0 = 1} else if(4 === _jh_)switch$0 = 1} else if(48 <= param) {if(! (58 <= param))switch$0 = 1} else if(10 === param)return 12; return switch$0?letter:not_letter} var Re_Category= [0, symbol, from_char, dummy, inexistant, letter, not_letter, newline, lastnewline, search_boundary, to_int, equal, compare, intersect, pp]; caml_register_global(140,Re_Category,"Re__Category"); var _m_=include[13], _s_=include[19], _A_=include[27], _be_=include[123], _bk_=include[129], _a_=include[1], _b_=include[2], _c_=include[3], _d_=include[4], _e_=include[5], _f_=include[6], _g_=include[7], _h_=include[8], _i_=include[9], _j_=include[10], _k_=include[11], _l_=include[12], _n_=include[14], _o_=include[15], _p_=include[16], _q_=include[17], _r_=include[18], _t_=include[20], _u_=include[21], _v_=include[22], _w_=include[23], _x_=include[24], _y_=include[25], _z_=include[26], _B_=include[28], _C_=include[29], _D_=include[30], _E_=include[31], _F_=include[32], _G_=include[33], _H_=include[34], _I_=include[35], _J_=include[36], _K_=include[37], _L_=include[38], _M_=include[39], _N_=include[40], _O_=include[41], _P_=include[42], _Q_=include[43], _R_=include[44], _S_=include[45], _T_=include[46], _U_=include[47], _V_=include[48], _W_=include[49], _X_=include[50], _Y_=include[51], _Z_=include[52], ___=include[53], _$_=include[54], _aa_=include[55], _ab_=include[56], _ac_=include[57], _ad_=include[58], _ae_=include[59], _af_=include[60], _ag_=include[61], _ah_=include[62], _ai_=include[63], _aj_=include[64], _ak_=include[65], _al_=include[66], _am_=include[67], _an_=include[68], _ao_=include[69], _ap_=include[70], _aq_=include[71], _ar_=include[72], _as_=include[73], _at_=include[74], _au_=include[75], _av_=include[76], _aw_=include[77], _ax_=include[78], _ay_=include[79], _az_=include[80], _aA_=include[81], _aB_=include[82], _aC_=include[83], _aD_=include[84], _aE_=include[85], _aF_=include[86], _aG_=include[87], _aH_=include[88], _aI_=include[89], _aJ_=include[90], _aK_=include[91], _aL_=include[92], _aM_=include[93], _aN_=include[94], _aO_=include[95], _aP_=include[96], _aQ_=include[97], _aR_=include[98], _aS_=include[99], _aT_=include[100], _aU_=include[101], _aV_=include[102], _aW_=include[103], _aX_=include[104], _aY_=include[105], _aZ_=include[106], _a0_=include[107], _a1_=include[108], _a2_=include[109], _a3_=include[110], _a4_=include[111], _a5_=include[112], _a6_=include[113], _a7_=include[114], _a8_=include[115], _a9_=include[116], _a__=include[117], _a$_=include[118], _ba_=include[119], _bb_=include[120], _bc_=include[121], _bd_=include[122], _bf_=include[124], _bg_=include[125], _bh_=include[126], _bi_=include[127], _bj_=include[128], _bl_=include[130], _bm_=include[131], _bn_=include[132], _bo_=include[133], _bp_=include[134], _bq_=include[135], _br_=include[136], _bs_=include[137], _bt_=include[138], _bu_=include[139], _bv_=include[140], _bw_=include[141], _bx_=include[142], _by_=include[143], _bz_=include[144], _bA_=include[145], _bB_=include[146], _bC_=include[147], _bD_=include[148], _bE_=include[149], _bF_=include[150], _bG_=include[151], _bH_=include[152], _bI_=include[153], _bJ_=include[154]; function sexp(fmt,s,pp,x){return caml_call5(_bk_,fmt,_bK_,s,pp,x)} function pair(pp1,pp2,fmt,param) {var v2=param[2],v1=param[1]; caml_call2(pp1,fmt,v1); caml_call2(_A_,fmt,0); return caml_call2(pp2,fmt,v2)} function triple(pp1,pp2,pp3,fmt,param) {var v3=param[3],v2=param[2],v1=param[1]; caml_call2(pp1,fmt,v1); caml_call2(_A_,fmt,0); caml_call2(pp2,fmt,v2); caml_call2(_A_,fmt,0); return caml_call2(pp3,fmt,v3)} function optint(fmt,param) {if(param){var i=param[1];return caml_call3(_bk_,fmt,_bL_,i)}return 0} function quote(fmt,s){return caml_call3(include[129],fmt,_bM_,s)} function pp_olist(pp_elem,fmt) {var _je_= caml_call2 (_be_, [0,function(fmt,param){return caml_call2(_bk_,fmt,_bN_)}], pp_elem); return caml_call3(include[129],fmt,_bO_,_je_)} function pp_str_list(_jd_){return pp_olist(quote,_jd_)} function to_to_string(pp,x) {var b=caml_call1(Stdlib_Buffer[1],16),fmt=caml_call1(include[111],b); caml_call2(pp,fmt,x); return caml_call1(Stdlib_Buffer[2],b)} var Re_Fmt= [0, _a_, _b_, _c_, _d_, _e_, _f_, _g_, _h_, _i_, _j_, _k_, _l_, _m_, _n_, _o_, _p_, _q_, _r_, _s_, _t_, _u_, _v_, _w_, _x_, _y_, _z_, _A_, _B_, _C_, _D_, _E_, _F_, _G_, _H_, _I_, _J_, _K_, _L_, _M_, _N_, _O_, _P_, _Q_, _R_, _S_, _T_, _U_, _V_, _W_, _X_, _Y_, _Z_, ___, _$_, _aa_, _ab_, _ac_, _ad_, _ae_, _af_, _ag_, _ah_, _ai_, _aj_, _ak_, _al_, _am_, _an_, _ao_, _ap_, _aq_, _ar_, _as_, _at_, _au_, _av_, _aw_, _ax_, _ay_, _az_, _aA_, _aB_, _aC_, _aD_, _aE_, _aF_, _aG_, _aH_, _aI_, _aJ_, _aK_, _aL_, _aM_, _aN_, _aO_, _aP_, _aQ_, _aR_, _aS_, _aT_, _aU_, _aV_, _aW_, _aX_, _aY_, _aZ_, _a0_, _a1_, _a2_, _a3_, _a4_, _a5_, _a6_, _a7_, _a8_, _a9_, _a__, _a$_, _ba_, _bb_, _bc_, _bd_, _be_, _bf_, _bg_, _bh_, _bi_, _bj_, _bk_, _bl_, _bm_, _bn_, _bo_, _bp_, _bq_, _br_, _bs_, _bt_, _bu_, _bv_, _bw_, _bx_, _by_, _bz_, _bA_, _bB_, _bC_, _bD_, _bE_, _bF_, _bG_, _bH_, _bI_, _bJ_, _be_, _m_, sexp, pair, triple, _s_, optint, quote, pp_olist, pp_str_list, to_to_string]; caml_register_global(142,Re_Fmt,"Re__Fmt"); function union(l$0,l) {var l$2=l$0,l$1=l; for(;;) {if(l$1) {if(l$2) {var r=l$1[2], _jc_=l$1[1], c2=_jc_[2], c1=_jc_[1], r$0=l$2[2], match=l$2[1], c2$0=match[2], c1$0=match[1]; if((c2$0 + 1 | 0) < c1)return [0,[0,c1$0,c2$0],union(r$0,l$1)]; if((c2 + 1 | 0) < c1$0)return [0,[0,c1,c2],union(l$2,r)]; if(c2$0 < c2) {var l$3=[0,[0,caml_call2(Stdlib[16],c1$0,c1),c2],r], l$2=r$0, l$1=l$3; continue} var l$4=[0,[0,caml_call2(Stdlib[16],c1$0,c1),c2$0],r$0], l$2=l$4, l$1=r; continue} return l$1} return l$2}} function inter(l$0,l) {var l$2=l$0,l$1=l; for(;;) {if(l$1) {if(l$2) {var r=l$1[2], _i$_=l$1[1], c2=_i$_[2], c1=_i$_[1], r$0=l$2[2], match=l$2[1], c2$0=match[2], c1$0=match[1]; if(caml_lessthan(c2$0,c1)){var l$2=r$0;continue} if(caml_lessthan(c2,c1$0)){var l$1=r;continue} if(caml_lessthan(c2$0,c2)) {var _ja_=inter(r$0,l$1); return [0,[0,caml_call2(Stdlib[17],c1$0,c1),c2$0],_ja_]} var _jb_=inter(l$2,r); return [0,[0,caml_call2(Stdlib[17],c1$0,c1),c2],_jb_]} return 0} return 0}} function diff(l$0,l) {var l$2=l$0,l$1=l; for(;;) {if(l$1) {if(l$2) {var r=l$1[2], _i__=l$1[1], c2=_i__[2], c1=_i__[1], r$0=l$2[2], match=l$2[1], c2$0=match[2], c1$0=match[1]; if(c2$0 < c1)return [0,[0,c1$0,c2$0],diff(r$0,l$1)]; if(c2 < c1$0){var l$1=r;continue} var r$1=c2 < c2$0?[0,[0,c2 + 1 | 0,c2$0],r$0]:r$0; if(c1$0 < c1)return [0,[0,c1$0,c1 - 1 | 0],diff(r$1,r)]; var l$2=r$1,l$1=r; continue} return 0} return l$2}} function single(c){return [0,[0,c,c],0]} function add(c,l){return union(single(c),l)} function seq(c$0,c) {return runtime.caml_lessequal(c$0,c)?[0,[0,c$0,c],0]:[0,[0,c,c$0],0]} function offset(o,l) {if(l) {var r=l[2],match=l[1],c2=match[2],c1=match[1]; return [0,[0,c1 + o | 0,c2 + o | 0],offset(o,r)]} return 0} var empty=0; function mem(c,s) {var s$0=s; for(;;) {if(s$0) {var rem=s$0[2],match=s$0[1],c2=match[2],c1=match[1]; if(c <= c2)return c1 <= c?1:0; var s$0=rem; continue} return 0}} function hash_rec(param) {if(param) {var r=param[2],match=param[1],j=match[2],i=match[1]; return (i + (13 * j | 0) | 0) + (257 * hash_rec(r) | 0) | 0} return 0} function hash(l){return hash_rec(l) & 1073741823} function print_one(ch,param) {var c2=param[2],c1=param[1]; return c1 === c2 ?caml_call3(include[129],ch,_bP_,c1) :caml_call4(include[129],ch,_bQ_,c1,c2)} var pp$0=caml_call2(_be_,0,print_one); function iter(t,f) {var t$0=t; for(;;) {if(t$0) {var xs=t$0[2],match=t$0[1],y=match[2],x=match[1]; caml_call2(f,x,y); var t$0=xs; continue} return 0}} function one_char(param) {if(param && ! param[2]) {var match=param[1],j=match[2],i=match[1]; if(caml_equal(i,j))return [0,i]} return 0} function compare$0(param,_i9_) {var v=_i9_[2],j=_i9_[1],u=param[2],i=param[1],c=caml_compare(i,j); return 0 === c?caml_compare(u,v):c} var CSetMap=caml_call1(Stdlib_Map[1],[0,compare$0]); function fold_right(t,init,f){return caml_call3(Stdlib_List[26],f,t,init)} function csingle(c){return single(c)} function is_empty(param){return param?0:1} function prepend(s,x,l) {var s$0=s; for(;;) {if(s$0) {if(l) {var _i4_=l[1],_i5_=_i4_[1]; if(_i5_ && ! _i5_[2]) {var x$0=_i4_[2], _i6_=_i5_[1], d=_i6_[2], d$0=_i6_[1], r=s$0[2], match=s$0[1], c=match[2], c$0=match[1]; if(c < d$0){var s$0=r;continue} var r$0=l[2]; if(c$0 <= d$0) {if(c < d) {var _i7_=prepend(r,x,[0,[0,[0,[0,c + 1 | 0,d],0],x$0],r$0]); return [0, [0,[0,[0,d$0,c],0],caml_call2(Stdlib[37],x,x$0)], _i7_]} var _i8_=prepend(s$0,x,r$0); return [0, [0,[0,[0,d$0,d],0],caml_call2(Stdlib[37],x,x$0)], _i8_]} return d < c$0 ?[0,[0,[0,[0,d$0,d],0],x$0],prepend(s$0,x,r$0)] :[0, [0,[0,[0,d$0,c$0 - 1 | 0],0],x$0], prepend(s$0,x,[0,[0,[0,[0,c$0,d],0],x$0],r$0])]} throw [0,Assert_failure,_bR_]} return 0} return l}} function pick(param) {if(param){var match=param[1],x=match[1];return x} return caml_call1(Stdlib[1],cst_Re_cset_pick)} var Re_Cset= [0, iter, union, inter, diff, offset, empty, single, seq, add, mem, hash, pp$0, one_char, fold_right, hash_rec, CSetMap, cany, csingle, is_empty, prepend, pick]; caml_register_global(147,Re_Cset,"Re__Cset"); function equal$0(x,y){return x === y?1:0} var compare$1=caml_int_compare,r=[0,0]; function gen(param){r[1]++;return r[1]} var pp$1=include[19], Set=caml_call1(Stdlib_Set[1],[0,compare$1]), Re_Pmark=[0,equal$0,compare$1,gen,pp$1,Set]; caml_register_global(149,Re_Pmark,"Re__Pmark"); function hash_combine(h,accu){return (accu * 65599 | 0) + h | 0} var empty$0=[0,0,Set[1]]; function merge_marks_offset(old,param) {if(param) {var rem=param[2], match=param[1], v=match[2], i=match[1], nw=merge_marks_offset(caml_call2(Stdlib_List[53],i,old),rem); return -2 === v?nw:[0,[0,i,v],nw]} return old} function merge(old,nw) {var _i3_=caml_call2(Set[7],old[2],nw[2]); return [0,merge_marks_offset(old[1],nw[1]),_i3_]} function hash$0(m,accu$1) {var accu$2=hash_combine(caml_call1(Stdlib_Hashtbl[28],m[2]),accu$1), l=m[1], accu=accu$2; for(;;) {if(l) {var r=l[2], match=l[1], i=match[2], a=match[1], accu$0=hash_combine(a,hash_combine(i,accu)), l=r, accu=accu$0; continue} return accu}} function _bS_(idx,marks) {if(marks) {var _i2_=marks[1]; if(-1 === _i2_[2]) {var rem=marks[2],a=_i2_[1];return [0,[0,a,idx],_bS_(idx,rem)]}} return marks} function marks_set_idx(marks,idx) {var _i1_=marks[2];return [0,_bS_(idx,marks[1]),_i1_]} function pp_marks(ch,t) {var _iZ_=t[1]; if(_iZ_) {var r=_iZ_[2],match=_iZ_[1],i=match[2],a=match[1]; caml_call4(include[129],ch,_bT_,a,i); var _i0_= function(param) {var i=param[2],a=param[1]; return caml_call4(include[129],ch,_bU_,a,i)}; return caml_call2(Stdlib_List[17],_i0_,r)} return 0} function pp_sem(ch,k) {var _iY_=-730718166 === k?cst_long:332064784 <= k?cst_first:cst_short; return caml_call2(include[13],ch,_iY_)} function pp_rep_kind(fmt,param) {return 620821490 <= param ?caml_call2(include[13],fmt,cst_Non_greedy) :caml_call2(include[13],fmt,cst_Greedy)} function pp$2(ch,e) {var _iO_=e[2]; if(typeof _iO_ === "number") return caml_call2(_m_,ch,cst_eps); else switch(_iO_[0]) {case 0:var l=_iO_[1];return sexp(ch,cst_cst,pp$0,l); case 1: var l$0=_iO_[1];return sexp(ch,cst_alt,caml_call2(_be_,0,pp$2),l$0); case 2: var e$0=_iO_[3],e$1=_iO_[2],k=_iO_[1],_iP_=[0,k,e$1,e$0]; return sexp (ch, cst_seq, function(_iW_,_iX_) {return triple(pp_sem,pp$2,pp$2,_iW_,_iX_)}, _iP_); case 3: var e$2=_iO_[3],k$0=_iO_[2],_iQ_=[0,k$0,e$2]; return sexp (ch, cst_rep, function(_iU_,_iV_){return pair(pp_sem,pp$2,_iU_,_iV_)}, _iQ_); case 4:var i=_iO_[1];return sexp(ch,cst_mark,_s_,i); case 5: var e$3=_iO_[2],b=_iO_[1],_iR_=[0,b,e$3]; return sexp (ch, cst_erase, function(_iS_,_iT_){return pair(_s_,_s_,_iS_,_iT_)}, _iR_); case 6:var c=_iO_[1];return sexp(ch,cst_before,pp,c); case 7:var c$0=_iO_[1];return sexp(ch,cst_after,pp,c$0); default:var i$0=_iO_[1];return sexp(ch,cst_pmark,_s_,i$0)}} function first(f,param) {var param$0=param; for(;;) {if(param$0) {var r=param$0[2],x=param$0[1],res=caml_call1(f,x); if(res)return res; var param$0=r; continue} return 0}} function create_ids(param){return [0,0]} function mk_expr(ids,def){ids[1]++;return [0,ids[1],def]} function empty$1(ids){return mk_expr(ids,_bV_)} function cst(ids,s){return is_empty(s)?empty$1(ids):mk_expr(ids,[0,s])} function alt(ids,l) {if(l){if(l[2])return mk_expr(ids,[1,l]);var c=l[1];return c} return empty$1(ids)} function seq$0(ids,kind,x,y) {var _iM_=x[2],_iN_=y[2]; if(typeof _iM_ !== "number" && 1 === _iM_[0] && ! _iM_[1])return x; if(typeof _iN_ !== "number" && 1 === _iN_[0] && ! _iN_[1])return y; if(typeof _iM_ === "number")return y; if(typeof _iN_ === "number" && 332064784 === kind)return x; return mk_expr(ids,[2,kind,x,y])} function is_eps(expr){return typeof expr[2] === "number"?1:0} function eps(ids){return mk_expr(ids,0)} function rep(ids,kind,sem,x){return mk_expr(ids,[3,kind,sem,x])} function mark(ids,m){return mk_expr(ids,[4,m])} function pmark(ids,i){return mk_expr(ids,[8,i])} function erase(ids,m$0,m){return mk_expr(ids,[5,m$0,m])} function before(ids,c){return mk_expr(ids,[6,c])} function after(ids,c){return mk_expr(ids,[7,c])} function rename(ids,x) {var _iI_=x[2]; if(typeof _iI_ !== "number") switch(_iI_[0]) {case 1: var l=_iI_[1],_iJ_=function(_iL_){return rename(ids,_iL_)}; return mk_expr(ids,[1,caml_call2(Stdlib_List[19],_iJ_,l)]); case 2: var z=_iI_[3],y=_iI_[2],k=_iI_[1],_iK_=rename(ids,z); return mk_expr(ids,[2,k,rename(ids,y),_iK_]); case 3: var y$0=_iI_[3],k$0=_iI_[2],g=_iI_[1]; return mk_expr(ids,[3,g,k$0,rename(ids,y$0)]) } return mk_expr(ids,x[2])} function equal$1(l1,l2) {var l1$0=l1,l2$0=l2; for(;;) {if(l1$0) {var _ip_=l1$0[1]; switch(_ip_[0]) {case 0: if(l2$0) {var _iq_=l2$0[1],_ir_=l1$0[2],_is_=_ip_[2],_it_=_ip_[1]; if(0 === _iq_[0]) {var r2=l2$0[2], e2=_iq_[2], l2$1=_iq_[1], _iu_=_is_[1] === e2[1]?1:0; if(_iu_) {var _iv_=equal$1(_it_,l2$1); if(_iv_){var l1$0=_ir_,l2$0=r2;continue} var _iw_=_iv_} else var _iw_=_iu_; return _iw_}} break; case 1: if(l2$0) {var _ix_=l2$0[1],_iy_=l1$0[2],_iz_=_ip_[2],_iA_=_ip_[1]; if(1 === _ix_[0]) {var r2$0=l2$0[2], e2$0=_ix_[2], marks2=_ix_[1], _iB_=_iz_[1] === e2$0[1]?1:0; if(_iB_) {var _iC_=caml_equal(_iA_,marks2); if(_iC_){var l1$0=_iy_,l2$0=r2$0;continue} var _iD_=_iC_} else var _iD_=_iB_; return _iD_}} break; default: if(l2$0) {var _iE_=l2$0[1],_iF_=l1$0[2],_iG_=_ip_[1]; if(2 === _iE_[0]) {var r2$1=l2$0[2], marks2$0=_iE_[1], _iH_=caml_equal(_iG_,marks2$0); if(_iH_){var l1$0=_iF_,l2$0=r2$1;continue} return _iH_}}}} else if(! l2$0)return 1; return 0}} function hash$1(l,accu) {var l$0=l,accu$0=accu; for(;;) {if(l$0) {var _im_=l$0[1]; switch(_im_[0]) {case 0: var r=l$0[2], e=_im_[2], l$1=_im_[1], _in_=hash$1(l$1,accu$0), accu$1=hash_combine(388635598,hash_combine(e[1],_in_)), l$0=r, accu$0=accu$1; continue; case 1: var r$0=l$0[2], e$0=_im_[2], marks=_im_[1], _io_=hash$0(marks,accu$0), accu$2=hash_combine(726404471,hash_combine(e$0[1],_io_)), l$0=r$0, accu$0=accu$2; continue; default: var r$1=l$0[2], marks$0=_im_[1], accu$3=hash_combine(471882453,hash$0(marks$0,accu$0)), l$0=r$1, accu$0=accu$3; continue}} return accu$0}} function tseq(kind,x,y,rem) {if(x) {var _il_=x[1]; if(1 === _il_[0] && typeof _il_[2][2] === "number" && ! x[2]) {var marks=_il_[1];return [0,[1,marks,y],rem]} return [0,[0,x,y,kind],rem]} return rem} function print_state_lst(ch,l,y) {if(l) {var rem=l[2],e=l[1]; print_state_rec(ch,e,y); var _ik_= function(e) {caml_call2(include[129],ch,_b1_);return print_state_rec(ch,e,y)}; return caml_call2(Stdlib_List[17],_ik_,rem)} return caml_call2(include[129],ch,_b2_)} function print_state_rec(ch,e,y) {switch(e[0]) {case 0: var x=e[2],l=e[1]; caml_call2(include[129],ch,_bW_); print_state_lst(ch,l,x); return caml_call4(include[129],ch,_bX_,pp$2,x); case 1: var _ij_=e[1]; if(typeof e[2][2] === "number") return caml_call5(include[129],ch,_bY_,y[1],pp_marks,_ij_); var x$0=e[2]; return caml_call7(include[129],ch,_bZ_,x$0[1],pp_marks,_ij_,pp$2,x$0); default: var marks=e[1];return caml_call4(include[129],ch,_b0_,pp_marks,marks)}} function pp$3(ch,t){return print_state_lst(ch,[0,t,0],_b3_)} var dummy$0=[0,-1,dummy,0,0,-1]; function mk(idx,cat,desc) {return [0, idx, cat, desc, 0, hash$1(desc,hash_combine(idx,hash_combine(cat,0))) & 1073741823]} function create(cat,e){return mk(0,cat,[0,[1,empty$0,e],0])} function equal$2(x,y) {var _if_=x[5] === y[5]?1:0; if(_if_) {var _ig_=x[1] === y[1]?1:0; if(_ig_) {var _ih_=x[2] === y[2]?1:0; if(_ih_)return equal$1(x[3],y[3]); var _ii_=_ih_} else var _ii_=_ig_} else var _ii_=_if_; return _ii_} function hash$2(t){return t[5]} var Table=caml_call1(Stdlib_Hashtbl[26],[0,equal$2,hash$2]); function create_working_area(param){return [0,[0,0]]} function index_count(w){return w[1].length - 1} function mark_used_indices(tbl) {function _ia_(param) {if(0 === param[0]) {var l=param[1];return caml_call1(mark_used_indices(tbl),l)} var marks=param[1],_ib_=marks[1]; function _ic_(param) {var i=param[2], _id_=0 <= i?1:0, _ie_=_id_?(caml_check_bound(tbl,i)[1 + i] = 1,0):_id_; return _ie_} return caml_call2(Stdlib_List[17],_ic_,_ib_)} return caml_call1(Stdlib_List[17],_ia_)} function free_index(tbl_ref,l) {var tbl=tbl_ref[1]; caml_call4(Stdlib_Array[9],tbl,0,tbl.length - 1,0); caml_call1(mark_used_indices(tbl),l); var len=tbl.length - 1,idx=0; for(;;) {if(idx !== len && caml_check_bound(tbl,idx)[1 + idx]) {var idx$0=idx + 1 | 0,idx=idx$0;continue} if(idx === len)tbl_ref[1] = caml_make_vect(2 * len | 0,0); return idx}} function _b4_(param){return 2 === param[0]?0:1} var remove_matches=caml_call1(Stdlib_List[41],_b4_); function split_at_match(l$1) {var l=0,param=l$1; for(;;) {if(param) {var _h__=param[1]; if(2 === _h__[0]) {var r=param[2],_h$_=caml_call1(remove_matches,r); return [0,caml_call1(Stdlib_List[9],l),_h$_]} var param$0=param[2],l$0=[0,_h__,l],l=l$0,param=param$0; continue} throw [0,Assert_failure,_b5_]}} function remove_duplicates(prev,l,y) {var l$0=l; for(;;) {if(l$0) {var _h9_=l$0[1]; switch(_h9_[0]) {case 0: var r=l$0[2], kind=_h9_[3], x=_h9_[2], l$1=_h9_[1], match=remove_duplicates(prev,l$1,x), prev$0=match[2], l$2=match[1], match$0=remove_duplicates(prev$0,r,y), prev$1=match$0[2], r$0=match$0[1]; return [0,tseq(kind,l$2,x,r$0),prev$1]; case 1: if(typeof _h9_[2][2] === "number") {var r$1=l$0[2]; if(caml_call2(Stdlib_List[37],y[1],prev)){var l$0=r$1;continue} var match$1=remove_duplicates([0,y[1],prev],r$1,y), prev$2=match$1[2], r$2=match$1[1]; return [0,[0,_h9_,r$2],prev$2]} var r$3=l$0[2],x$0=_h9_[2]; if(caml_call2(Stdlib_List[37],x$0[1],prev)){var l$0=r$3;continue} var match$2=remove_duplicates([0,x$0[1],prev],r$3,y), prev$3=match$2[2], r$4=match$2[1]; return [0,[0,_h9_,r$4],prev$3]; default:return [0,[0,_h9_,0],prev]}} return [0,0,prev]}} function set_idx(idx,param) {if(param) {var _h5_=param[1]; switch(_h5_[0]) {case 0: var r=param[2], kind=_h5_[3], x=_h5_[2], l=_h5_[1], _h6_=set_idx(idx,r); return [0,[0,set_idx(idx,l),x,kind],_h6_]; case 1: var r$0=param[2],x$0=_h5_[2],marks=_h5_[1],_h7_=set_idx(idx,r$0); return [0,[1,marks_set_idx(marks,idx),x$0],_h7_]; default: var r$1=param[2],marks$0=_h5_[1],_h8_=set_idx(idx,r$1); return [0,[2,marks_set_idx(marks$0,idx)],_h8_]}} return 0} function filter_marks(b,e,marks) {var _h0_=marks[2],_h1_=marks[1]; function _h2_(param) {var i=param[1],_h3_=i < b?1:0,_h4_=_h3_ || (e < i?1:0);return _h4_} return [0,caml_call2(Stdlib_List[41],_h2_,_h1_),_h0_]} function delta_1$0(counter,init,c,next_cat,prev_cat,x,rem) {var _hX_=x[2]; if(typeof _hX_ === "number") return [0,[2,init],rem]; else switch(_hX_[0]) {case 0:var s=_hX_[1];return mem(c,s)?[0,[1,init,eps_expr],rem]:rem; case 1: var l=_hX_[1]; if(counter < 50) {var counter$1=counter + 1 | 0; return delta_2$0(counter$1,init,c,next_cat,prev_cat,l,rem)} return caml_trampoline_return (delta_2$0,[0,init,c,next_cat,prev_cat,l,rem]); case 2: var z=_hX_[3], y=_hX_[2], kind=_hX_[1], y$0=delta_1(init,c,next_cat,prev_cat,y,0); if(counter < 50) {var counter$0=counter + 1 | 0; return delta_seq$0(counter$0,c,next_cat,prev_cat,kind,y$0,z,rem)} return caml_trampoline_return (delta_seq$0,[0,c,next_cat,prev_cat,kind,y$0,z,rem]); case 3: var y$1=_hX_[3], kind$0=_hX_[2], rep_kind=_hX_[1], y$2=delta_1(init,c,next_cat,prev_cat,y$1,0), match= first (function(param) {if(2 === param[0]){var marks=param[1];return [0,marks]} return 0}, y$2); if(match) var marks=match[1], marks$0=marks, y$3=caml_call1(remove_matches,y$2); else var marks$0=init,y$3=y$2; return 620821490 <= rep_kind ?[0,[2,init],tseq(kind$0,y$3,x,rem)] :tseq(kind$0,y$3,x,[0,[2,marks$0],rem]); case 4: var i=_hX_[1], _hY_=init[2], marks$1=[0,[0,[0,i,-1],caml_call2(Stdlib_List[53],i,init[1])],_hY_]; return [0,[2,marks$1],rem]; case 5: var e=_hX_[2],b=_hX_[1];return [0,[2,filter_marks(b,e,init)],rem]; case 6: var cat=_hX_[1];return intersect(next_cat,cat)?[0,[2,init],rem]:rem; case 7: var cat$0=_hX_[1]; return intersect(prev_cat,cat$0)?[0,[2,init],rem]:rem; default: var i$0=_hX_[1], _hZ_=caml_call2(Set[4],i$0,init[2]), marks$2=[0,init[1],_hZ_]; return [0,[2,marks$2],rem]}} function delta_2$0(counter,marks,c,next_cat,prev_cat,l,rem) {if(l) {var r=l[2],y=l[1],_hW_=delta_2(marks,c,next_cat,prev_cat,r,rem); if(counter < 50) {var counter$0=counter + 1 | 0; return delta_1$0(counter$0,marks,c,next_cat,prev_cat,y,_hW_)} return caml_trampoline_return (delta_1$0,[0,marks,c,next_cat,prev_cat,y,_hW_])} return rem} function delta_seq$0(counter,c,next_cat,prev_cat,kind,y,z,rem) {var match= first (function(param) {if(2 === param[0]){var marks=param[1];return [0,marks]}return 0}, y); if(match) {var marks=match[1]; if(-730718166 === kind) {var _hU_=delta_1(marks,c,next_cat,prev_cat,z,rem); return tseq(kind,caml_call1(remove_matches,y),z,_hU_)} if(332064784 <= kind) {var match$0=split_at_match(y),y$0=match$0[2],y$1=match$0[1]; return tseq (kind, y$1, z, delta_1(marks,c,next_cat,prev_cat,z,tseq(kind,y$0,z,rem)))} var _hV_=tseq(kind,caml_call1(remove_matches,y),z,rem); if(counter < 50) {var counter$0=counter + 1 | 0; return delta_1$0(counter$0,marks,c,next_cat,prev_cat,z,_hV_)} return caml_trampoline_return (delta_1$0,[0,marks,c,next_cat,prev_cat,z,_hV_])} return tseq(kind,y,z,rem)} function delta_1(init,c,next_cat,prev_cat,x,rem) {return caml_trampoline(delta_1$0(0,init,c,next_cat,prev_cat,x,rem))} function delta_2(marks,c,next_cat,prev_cat,l,rem) {return caml_trampoline(delta_2$0(0,marks,c,next_cat,prev_cat,l,rem))} function delta_seq(c,next_cat,prev_cat,kind,y,z,rem) {return caml_trampoline(delta_seq$0(0,c,next_cat,prev_cat,kind,y,z,rem))} function delta_4(c,next_cat,prev_cat,l,rem) {if(l) {var r=l[2],y$1=l[1],rem$0=delta_4(c,next_cat,prev_cat,r,rem); switch(y$1[0]) {case 0: var kind=y$1[3], z=y$1[2], y=y$1[1], y$0=delta_4(c,next_cat,prev_cat,y,0); return delta_seq(c,next_cat,prev_cat,kind,y$0,z,rem$0); case 1: var e=y$1[2],marks=y$1[1]; return delta_1(marks,c,next_cat,prev_cat,e,rem$0); default:return [0,y$1,rem$0]}} return rem} function delta(tbl_ref,next_cat,char$0,st) {var prev_cat=st[2], match= remove_duplicates (0,delta_4(char$0,next_cat,prev_cat,st[3],0),eps_expr), expr=match[1], idx=free_index(tbl_ref,expr), expr$0=set_idx(idx,expr); return mk(idx,next_cat,expr$0)} function red_tr(l) {var l$0=l; for(;;) {if(l$0) {var _hT_=l$0[2]; if(_hT_) {var rem=_hT_[2], tr2=_hT_[1], st2=tr2[2], s2=tr2[1], tr1=l$0[1], st1=tr1[2], s1=tr1[1]; if(equal$2(st1,st2)) {var l$1=[0,[0,union(s1,s2),st1],rem],l$0=l$1;continue} return [0,tr1,red_tr([0,tr2,rem])]}} return l$0}} function _b6_(param,l){var x=param[2],s=param[1];return prepend(s,x,l)} var prepend_deriv=caml_call1(Stdlib_List[26],_b6_); function restrict(s,param) {var param$0=param; for(;;) {if(param$0) {var rem=param$0[2], match=param$0[1], x=match[2], s$0=match[1], s$1=inter(s,s$0); if(is_empty(s$1)){var param$0=rem;continue} return [0,[0,s$1,x],restrict(s,rem)]} return 0}} function prepend_marks_expr_lst(m,l) {function _hS_(param) {switch(param[0]) {case 0: var s=param[3],e=param[2],l=param[1]; return [0,prepend_marks_expr_lst(m,l),e,s]; case 1:var e$0=param[2],m$0=param[1];return [1,merge(m,m$0),e$0]; default:var m$1=param[1];return [2,merge(m,m$1)]}} return caml_call2(Stdlib_List[19],_hS_,l)} function deriv_seq(all_chars,categories,cat,kind,y,z,rem) {function _hJ_(param) {var xl=param[2]; function _hR_(param){return 2 === param[0]?1:0} return caml_call2(Stdlib_List[33],_hR_,xl)} if(caml_call2(Stdlib_List[33],_hJ_,y)) {var z$0=deriv_1(all_chars,categories,empty$0,cat,z,[0,[0,all_chars,0],0]), _hK_= function(param,rem) {var y=param[2], s=param[1], match= first (function(param) {if(2 === param[0]){var marks=param[1];return [0,marks]} return 0}, y); if(match) {var marks=match[1], _hM_= function(param) {var x=param[2],s=param[1]; return [0,s,prepend_marks_expr_lst(marks,x)]}, z$1=caml_call1(caml_call1(Stdlib_List[19],_hM_),z$0); if(-730718166 === kind) {var _hN_=caml_call2(prepend_deriv,restrict(s,z$1),rem); return prepend (s,tseq(kind,caml_call1(remove_matches,y),z,0),_hN_)} if(332064784 <= kind) {var match$0=split_at_match(y), y$0=match$0[2], y$1=match$0[1], _hO_=prepend(s,tseq(kind,y$0,z,0),rem), _hP_=caml_call2(prepend_deriv,restrict(s,z$1),_hO_); return prepend(s,tseq(kind,y$1,z,0),_hP_)} var _hQ_= prepend(s,tseq(kind,caml_call1(remove_matches,y),z,0),rem); return caml_call2(prepend_deriv,restrict(s,z$1),_hQ_)} return prepend(s,tseq(kind,y,z,0),rem)}; return caml_call3(Stdlib_List[26],_hK_,y,rem)} function _hL_(param,rem) {var xl=param[2],s=param[1];return prepend(s,tseq(kind,xl,z,0),rem)} return caml_call3(Stdlib_List[26],_hL_,y,rem)} function deriv_1$0(counter,all_chars,categories,marks,cat,x,rem$1) {var _hD_=x[2]; if(typeof _hD_ === "number") return prepend(all_chars,[0,[2,marks],0],rem$1); else switch(_hD_[0]) {case 0: var s=_hD_[1];return prepend(s,[0,[1,marks,eps_expr],0],rem$1); case 1: var l=_hD_[1]; if(counter < 50) {var counter$0=counter + 1 | 0; return deriv_2$0(counter$0,all_chars,categories,marks,cat,l,rem$1)} return caml_trampoline_return (deriv_2$0,[0,all_chars,categories,marks,cat,l,rem$1]); case 2: var z=_hD_[3], y=_hD_[2], kind=_hD_[1], y$0=deriv_1(all_chars,categories,marks,cat,y,[0,[0,all_chars,0],0]); return deriv_seq(all_chars,categories,cat,kind,y$0,z,rem$1); case 3: var y$1=_hD_[3], kind$0=_hD_[2], rep_kind=_hD_[1], y$2= deriv_1(all_chars,categories,marks,cat,y$1,[0,[0,all_chars,0],0]), _hE_= function(param,rem) {var z=param[2], s=param[1], match= first (function(param) {if(2 === param[0]){var marks=param[1];return [0,marks]} return 0}, z); if(match) var marks$0=match[1], marks$1=marks$0, z$0=caml_call1(remove_matches,z); else var marks$1=marks,z$0=z; var _hI_= 620821490 <= rep_kind ?[0,[2,marks],tseq(kind$0,z$0,x,0)] :tseq(kind$0,z$0,x,[0,[2,marks$1],0]); return prepend(s,_hI_,rem)}; return caml_call3(Stdlib_List[26],_hE_,y$2,rem$1); case 4: var i=_hD_[1],_hF_=marks[2]; return prepend (all_chars, [0, [2, [0,[0,[0,i,-1],caml_call2(Stdlib_List[53],i,marks[1])],_hF_]], 0], rem$1); case 5: var e$1=_hD_[2], b=_hD_[1], _hH_=marks[2], e=e$1, rem=filter_marks(b,e$1,marks)[1], _hG_=0; for(;;) {if(e < b) return prepend(all_chars,[0,[2,[0,rem,_hH_]],_hG_],rem$1); var rem$0=[0,[0,e,-2],rem],e$0=e - 1 | 0,e=e$0,rem=rem$0; continue} case 6: var cat$0=_hD_[1]; return prepend (caml_call2(Stdlib_List[48],cat$0,categories), [0,[2,marks],0], rem$1); case 7: var cat$1=_hD_[1]; return intersect(cat,cat$1) ?prepend(all_chars,[0,[2,marks],0],rem$1) :rem$1; default:return prepend(all_chars,[0,[2,marks],0],rem$1)}} function deriv_2$0(counter,all_chars,categories,marks,cat,l,rem) {if(l) {var r=l[2],y=l[1],_hC_=deriv_2(all_chars,categories,marks,cat,r,rem); if(counter < 50) {var counter$0=counter + 1 | 0; return deriv_1$0(counter$0,all_chars,categories,marks,cat,y,_hC_)} return caml_trampoline_return (deriv_1$0,[0,all_chars,categories,marks,cat,y,_hC_])} return rem} function deriv_1(all_chars,categories,marks,cat,x,rem) {return caml_trampoline (deriv_1$0(0,all_chars,categories,marks,cat,x,rem))} function deriv_2(all_chars,categories,marks,cat,l,rem) {return caml_trampoline (deriv_2$0(0,all_chars,categories,marks,cat,l,rem))} function deriv_4(all_chars,categories,cat,l,rem) {if(l) {var r=l[2],y$1=l[1],rem$0=deriv_4(all_chars,categories,cat,r,rem); switch(y$1[0]) {case 0: var kind=y$1[3], z=y$1[2], y=y$1[1], y$0=deriv_4(all_chars,categories,cat,y,[0,[0,all_chars,0],0]); return deriv_seq(all_chars,categories,cat,kind,y$0,z,rem$0); case 1: var e=y$1[2],marks=y$1[1]; return deriv_1(all_chars,categories,marks,cat,e,rem$0); default:return prepend(all_chars,[0,y$1,0],rem$0)}} return rem} function deriv(tbl_ref,all_chars,categories,st) {var der=deriv_4(all_chars,categories,st[2],st[3],[0,[0,all_chars,0],0]), _hx_=0; function _hy_(param,rem) {var expr=param[2], s=param[1], match=remove_duplicates(0,expr,eps_expr), expr$0=match[1], idx=free_index(tbl_ref,expr$0), expr$1=set_idx(idx,expr$0); function _hB_(param,rem) {var s$0=param[2],cat=param[1],s$1=inter(s,s$0); return is_empty(s$1)?rem:[0,[0,s$1,mk(idx,cat,expr$1)],rem]} return caml_call3(Stdlib_List[26],_hB_,categories,rem)} var l=caml_call3(Stdlib_List[26],_hy_,der,_hx_); function _hu_(param,_hA_) {var st2=_hA_[2],st1=param[2],c=caml_int_compare(st1[5],st2[5]); if(0 === c) {var c$0=caml_int_compare(st1[2],st2[2]); return 0 === c$0?caml_compare(st1[3],st2[3]):c$0} return c} var _hv_=red_tr(caml_call2(Stdlib_List[56],_hu_,l)); function _hw_(param,_hz_) {var s2=_hz_[1],s1=param[1];return caml_compare(s1,s2)} return caml_call2(Stdlib_List[56],_hw_,_hv_)} function status(s) {var _hp_=s[4]; if(_hp_){var st=_hp_[1];return st} var _hq_=s[3]; if(_hq_) {var _hr_=_hq_[1]; if(2 === _hr_[0]) {var m=_hr_[1], _ht_=m[1], _hs_=m[2], _hm_=-1, _hn_= function(ma,param) {var i=param[1];return caml_call2(Stdlib[17],ma,i)}, ma=caml_call3(Stdlib_List[25],_hn_,_hm_,_ht_), res=caml_make_vect(ma + 1 | 0,-1), _ho_= function(param) {var v=param[2],i=param[1]; caml_check_bound(res,i)[1 + i] = v; return 0}; caml_call2(Stdlib_List[17],_ho_,_ht_); var st$0=[0,res,_hs_]} else var st$0=1} else var st$0=0; s[4] = [0,st$0]; return st$0} var _b7_=[0,dummy$0,create,Table], Re_Automata= [0, pp_sem, pp_rep_kind, is_eps, pp$2, create_ids, cst, empty$1, alt, seq$0, eps, rep, mark, pmark, erase, before, after, rename, [0], [0,pp$3], _b7_, create_working_area, index_count, delta, deriv, status]; caml_register_global(152,Re_Automata,"Re__Automata"); function make(param){return caml_call2(Stdlib_Bytes[1],257,0)} function flatten(cm) {var c=caml_create_bytes(256),color_repr=caml_create_bytes(256),v=[0,0]; caml_bytes_set(c,0,0); caml_bytes_set(color_repr,0,0); var i=1; for(;;) {if(0 !== caml_bytes_get(cm,i))v[1]++; caml_bytes_set(c,i,caml_call1(Stdlib_Char[1],v[1])); var _hk_=caml_call1(Stdlib_Char[1],i); caml_bytes_set(color_repr,v[1],_hk_); var _hl_=i + 1 | 0; if(255 !== i){var i=_hl_;continue} var _hj_=v[1] + 1 | 0; return [0, c, caml_call3(Stdlib_Bytes[7],color_repr,0,v[1] + 1 | 0), _hj_]}} function split(s,cm) {return iter (s, function(i,j) {caml_bytes_set(cm,i,1);return caml_bytes_set(cm,j + 1 | 0,1)})} var Re_Color_map=[0,make,flatten,split]; caml_register_global(155,Re_Color_map,"Re__Color_map"); function offset$0(t,i) {if(t[2].length - 1 <= ((2 * i | 0) + 1 | 0))throw Stdlib[8]; var _hg_=2 * i | 0,m1=caml_check_bound(t[2],_hg_)[1 + _hg_]; if(-1 === m1)throw Stdlib[8]; var p1=caml_check_bound(t[4],m1)[1 + m1] - 1 | 0, _hh_=(2 * i | 0) + 1 | 0, _hi_=caml_check_bound(t[2],_hh_)[1 + _hh_], p2=caml_check_bound(t[4],_hi_)[1 + _hi_] - 1 | 0; return [0,p1,p2]} function get(t,i) {var match=offset$0(t,i),p2=match[2],p1=match[1]; return caml_call3(Stdlib_String[15],t[1],p1,p2 - p1 | 0)} function start(subs,i){return offset$0(subs,i)[1]} function stop(subs,i){return offset$0(subs,i)[2]} function test(t,i) {if(t[2].length - 1 <= (2 * i | 0))return 0; var _hf_=2 * i | 0,idx=caml_check_bound(t[2],_hf_)[1 + _hf_]; return -1 !== idx?1:0} function get_opt(t,i){return test(t,i)?[0,get(t,i)]:0} function all_offset(t) {var res=caml_make_vect(t[5],dummy_offset), _ha_=((t[2].length - 1) / 2 | 0) - 1 | 0, _g$_=0; if(! (_ha_ < 0)) {var i=_g$_; for(;;) {var _hb_=2 * i | 0,m1=caml_check_bound(t[2],_hb_)[1 + _hb_]; if(-1 !== m1) {var p1=caml_check_bound(t[4],m1)[1 + m1], _hc_=(2 * i | 0) + 1 | 0, _hd_=caml_check_bound(t[2],_hc_)[1 + _hc_], p2=caml_check_bound(t[4],_hd_)[1 + _hd_]; caml_check_bound(res,i)[1 + i] = [0,p1 - 1 | 0,p2 - 1 | 0]} var _he_=i + 1 | 0; if(_ha_ !== i){var i=_he_;continue} break}} return res} function all(t) {var res=caml_make_vect(t[5],dummy_string), _g5_=((t[2].length - 1) / 2 | 0) - 1 | 0, _g4_=0; if(! (_g5_ < 0)) {var i=_g4_; for(;;) {var _g6_=2 * i | 0,m1=caml_check_bound(t[2],_g6_)[1 + _g6_]; if(-1 !== m1) {var p1=caml_check_bound(t[4],m1)[1 + m1], _g7_=(2 * i | 0) + 1 | 0, _g8_=caml_check_bound(t[2],_g7_)[1 + _g7_], p2=caml_check_bound(t[4],_g8_)[1 + _g8_], _g9_=caml_call3(Stdlib_String[15],t[1],p1 - 1 | 0,p2 - p1 | 0); caml_check_bound(res,i)[1 + i] = _g9_} var _g__=i + 1 | 0; if(_g5_ !== i){var i=_g__;continue} break}} return res} function pp$4(fmt,t) {var offsets=all_offset(t),strs=all(t); function _g1_(i) {var _g3_=caml_check_bound(offsets,i)[1 + i]; return [0,caml_check_bound(strs,i)[1 + i],_g3_]} var _g2_=caml_call2(Stdlib_Array[2],strs.length - 1,_g1_), matches=caml_call1(Stdlib_Array[11],_g2_); function pp_match(fmt,param) {var match=param[2],stop=match[2],start=match[1],str=param[1]; return caml_call5(_bk_,fmt,_b8_,str,start,stop)} return sexp(fmt,cst_Group,caml_call2(_be_,0,pp_match),matches)} function nb_groups(t){return t[5]} var Group= [0,get,get_opt,offset$0,start,stop,all,all_offset,test,nb_groups,pp$4]; caml_register_global(157,Group,"Re__Group"); function iter$0(n,f,v) {var n$0=n,v$0=v; for(;;) {if(0 === n$0)return v$0; var v$1=caml_call1(f,v$0),n$1=n$0 - 1 | 0,n$0=n$1,v$0=v$1; continue}} var unknown=-2,break$0=-3; function print_re(ch,re){return pp$2(ch,re[1])} function category(re,color) {return -1 === color ?inexistant :color === re[6]?28:from_char(caml_bytes_get(re[4],color))} var dummy_next=[0],unknown_state=[0,unknown,0,dummy_next,0,_b7_[1]]; function mk_state(ncol,desc) {var match=status(desc),switch$0=0; if(typeof match === "number" && match){var break_state=0;switch$0 = 1} if(! switch$0)var break_state=1; var _gX_=0, _gY_=break_state?dummy_next:caml_make_vect(ncol,unknown_state), _gZ_=desc[1], _g0_=break_state?break$0:desc[1]; return [0,_g0_,_gZ_,_gY_,_gX_,desc]} function find_state(re,desc) {try {var _gV_=caml_call2(_b7_[3][7],re[8],desc);return _gV_} catch(_gW_) {_gW_ = caml_wrap_exception(_gW_); if(_gW_ === Stdlib[8]) {var st=mk_state(re[5],desc); caml_call3(_b7_[3][5],re[8],desc,st); return st} throw _gW_}} function delta$0(info,cat,color,st) {var desc=delta(info[1][7],cat,color,st[5]), len=info[3].length - 1, _gT_=desc[1] === len?1:0, _gU_=_gT_?0 < len?1:0:_gT_; if(_gU_) {var pos=info[3]; info[3] = caml_make_vect(2 * len | 0,0); caml_call5(Stdlib_Array[10],pos,0,info[3],0,len)} return desc} function validate(info,s,pos,st) {var _gS_=caml_string_get(s,pos), color=caml_bytes_get(info[2],_gS_), cat=category(info[1],color), desc=delta$0(info,cat,color,st), st$0=find_state(info[1],desc); caml_check_bound(st[3],color)[1 + color] = st$0; return 0} function final$0(info,st,cat) {try {var _gQ_=caml_call2(Stdlib_List[48],cat,st[4]);return _gQ_} catch(_gR_) {_gR_ = caml_wrap_exception(_gR_); if(_gR_ === Stdlib[8]) {var st$0=delta$0(info,cat,-1,st), _gP_=status(st$0), res=[0,st$0[1],_gP_]; st[4] = [0,[0,cat,res],st[4]]; return res} throw _gR_}} function find_initial_state(re,cat) {try {var _gN_=caml_call2(Stdlib_List[48],cat,re[2]);return _gN_} catch(_gO_) {_gO_ = caml_wrap_exception(_gO_); if(_gO_ === Stdlib[8]) {var st=find_state(re,caml_call2(_b7_[2],cat,re[1])); re[2] = [0,[0,cat,st],re[2]]; return st} throw _gO_}} function get_color(re,s,pos) {if(0 <= pos) {var slen=caml_ml_string_length(s); if(slen <= pos)return -1; if (pos === (slen - 1 | 0) && -1 !== re[6] && 10 === caml_string_get(s,pos)) return re[6]; var _gM_=caml_string_get(s,pos); return caml_bytes_get(re[3],_gM_)} return -1} function scan_str(info,s,st$8,groups) {var pos$4=info[4],last=info[5]; if (last === caml_ml_string_length(s) && -1 !== info[1][6] && pos$4 < last && 10 === caml_string_get(s,last - 1 | 0)) {var info$0=[0,info[1],info[2],info[3],info[4],last - 1 | 0], st$9=scan_str(info$0,s,st$8,groups); if(st$9[1] === -3)return st$9; var pos$5=last - 1 | 0; for(;;) {var _gJ_=info$0[1][6],st$6=caml_check_bound(st$9[3],_gJ_)[1 + _gJ_]; if(0 <= st$6[1]) {if(groups) {var _gK_=st$6[1]; caml_check_bound(info$0[3],_gK_)[1 + _gK_] = pos$5 + 1 | 0} return st$6} if(st$6[1] === -3) {if(groups) {var _gL_=st$6[2]; caml_check_bound(info$0[3],_gL_)[1 + _gL_] = pos$5 + 1 | 0} return st$6} var color=info$0[1][6], real_c=caml_bytes_get(info$0[2],10), cat=category(info$0[1],color), desc=delta$0(info$0,cat,real_c,st$9), st$7=find_state(info$0[1],desc); caml_check_bound(st$9[3],color)[1 + color] = st$7; continue}} if(groups) {var pos=pos$4,st=st$8; a: for(;;) {if(pos < info[5]) {var _gA_=caml_string_get(s,pos), _gB_=caml_bytes_get(info[2],_gA_), st$0=caml_check_bound(st[3],_gB_)[1 + _gB_], pos$0=pos, st$2=st, st$1=st$0; for(;;) {if(0 <= st$1[1]) {var pos$1=pos$0 + 1 | 0; if(pos$1 < info[5]) {var _gC_=caml_string_get(s,pos$1), _gD_=caml_bytes_get(info[2],_gC_), st$3=caml_check_bound(st$1[3],_gD_)[1 + _gD_], _gE_=st$1[1]; caml_check_bound(info[3],_gE_)[1 + _gE_] = pos$1; var pos$0=pos$1,st$2=st$1,st$1=st$3; continue} var _gF_=st$1[1]; caml_check_bound(info[3],_gF_)[1 + _gF_] = pos$1; return st$1} if(st$1[1] === -3) {var _gG_=st$1[2]; caml_check_bound(info[3],_gG_)[1 + _gG_] = pos$0 + 1 | 0; return st$1} validate(info,s,pos$0,st$2); var pos=pos$0,st=st$2; continue a}} return st}} var pos$2=pos$4,st$4=st$8; for(;;) {if(pos$2 < last) {var _gH_=caml_string_get(s,pos$2), _gI_=caml_bytes_get(info[2],_gH_), st$5=caml_check_bound(st$4[3],_gI_)[1 + _gI_]; if(0 <= st$5[1]) {var pos$3=pos$2 + 1 | 0,pos$2=pos$3,st$4=st$5;continue} if(st$5[1] === -3)return st$5; validate(info,s,pos$2,st$4); continue} return st$4}} function match_str(groups,partial,re,s,pos,len) {var slen=caml_ml_string_length(s),last=-1 === len?slen:pos + len | 0; if(groups) var n=index_count(re[7]) + 1 | 0, _gy_=10 < n?caml_make_vect(n,0):_b9_.slice(), _gz_=_gy_; else var _gz_=[0]; var info=[0,re,re[3],_gz_,pos,last], initial_cat=0 === pos?33:32 | category(re,get_color(re,s,pos - 1 | 0)), initial_state=find_initial_state(re,initial_cat), st=scan_str(info,s,initial_state,groups), switch$0=0; if(st[1] !== -3 && ! partial) {var final_cat=last === slen?33:32 | category(re,get_color(re,s,last)), match=final$0(info,st,final_cat), res$0=match[2], idx=match[1]; if(groups)caml_check_bound(info[3],idx)[1 + idx] = last + 1 | 0; var res=res$0; switch$0 = 1} if(! switch$0)var res=status(st[5]); if(typeof res === "number")return res?1:0; var pmarks=res[2],marks=res[1]; return [0,[0,s,marks,pmarks,info[3],re[9]]]} function cseq(c$0,c){return seq(c$0,c)} function cadd(c,s){return add(c,s)} function trans_set(cache,cm,s) {var match=one_char(s); if(match){var i=match[1];return csingle(caml_bytes_get(cm,i))} var v=[0,hash_rec(s),s]; try {var _gv_=caml_call2(CSetMap[28],v,cache[1]);return _gv_} catch(_gw_) {_gw_ = caml_wrap_exception(_gw_); if(_gw_ === Stdlib[8]) {var l= fold_right (s, empty, function(param,l) {var j=param[2],i=param[1],_gx_=caml_bytes_get(cm,j); return union(cseq(caml_bytes_get(cm,i),_gx_),l)}); cache[1] = caml_call3(CSetMap[4],v,l,cache[1]); return l} throw _gw_}} function view(t){return t} var View=[0,view]; function pp$5(fmt,t) {function var$0(s,re){return sexp(fmt,s,pp$5,re)} function seq(s,rel){return sexp(fmt,s,caml_call2(_be_,0,pp$5),rel)} if(typeof t === "number") switch(t) {case 0:return caml_call2(_m_,fmt,cst_Beg_of_line); case 1:return caml_call2(_m_,fmt,cst_End_of_line); case 2:return caml_call2(_m_,fmt,cst_Beg_of_word); case 3:return caml_call2(_m_,fmt,cst_End_of_word); case 4:return caml_call2(_m_,fmt,cst_Not_bound); case 5:return caml_call2(_m_,fmt,cst_Beg_of_str); case 6:return caml_call2(_m_,fmt,cst_End_of_str); case 7:return caml_call2(_m_,fmt,cst_Last_end_of_line); case 8:return caml_call2(_m_,fmt,cst_Start); default:return caml_call2(_m_,fmt,cst_Stop)} else switch(t[0]) {case 0:var s=t[1];return sexp(fmt,cst_Set,pp$0,s); case 1:var sq=t[1];return seq(cst_Sequence,sq); case 2:var alt=t[1];return seq(cst_Alternative,alt); case 3: var stop=t[3], start=t[2], re=t[1], pp= function(fmt,param) {return caml_call7(_bk_,fmt,_b__,pp$5,re,start,optint,stop)}; return sexp(fmt,cst_Repeat,pp,0); case 4: var re$0=t[2],sem=t[1],_gj_=[0,sem,re$0]; return sexp (fmt, cst_Sem, function(_gr_,_gs_){return pair(pp_sem,pp$5,_gr_,_gs_)}, _gj_); case 5: var re$1=t[2],k=t[1],_gk_=[0,k,re$1]; return sexp (fmt, cst_Sem_greedy, function(_gp_,_gq_){return pair(pp_rep_kind,pp$5,_gp_,_gq_)}, _gk_); case 6:var c=t[1];return var$0(cst_Group$0,c); case 7:var c$0=t[1];return var$0(cst_No_group,c$0); case 8:var c$1=t[1];return var$0(cst_Nest,c$1); case 9:var c$2=t[1];return var$0(cst_Case,c$2); case 10:var c$3=t[1];return var$0(cst_No_case,c$3); case 11:var c$4=t[1];return seq(cst_Intersection,c$4); case 12:var c$5=t[1];return seq(cst_Complement,c$5); case 13: var b=t[2],a=t[1],_gl_=[0,a,b]; return sexp (fmt, cst_Difference, function(_gn_,_go_){return pair(pp$5,pp$5,_gn_,_go_)}, _gl_); default: var r=t[2],m=t[1],_gm_=[0,m,r]; return sexp (fmt, cst_Pmark, function(_gt_,_gu_){return pair(pp$1,pp$5,_gt_,_gu_)}, _gm_)}} function is_charset(param) {var param$0=param; for(;;) {var switch$0=0; if(typeof param$0 === "number") switch$0 = 1; else switch(param$0[0]) {case 0:return 1; case 13: var r=param$0[2],r$0=param$0[1],_gi_=is_charset(r$0); if(_gi_){var param$0=r;continue} return _gi_; case 4: case 5:var param$1=param$0[2];break; case 2: case 11: case 12: var l=param$0[1];return caml_call2(Stdlib_List[32],is_charset,l); case 7: case 9: case 10:var param$1=param$0[1];break; default:switch$0 = 1} if(switch$0)return 0; var param$0=param$1; continue}} var _b$_=cseq(216,222), _ca_=union(cseq(192,214),_b$_), cupper=union(cseq(65,90),_ca_), clower=offset(32,cupper), _cb_=union(clower,cupper), calpha=caml_call3(Stdlib_List[26],cadd,_cc_,_cb_), cdigit=cseq(48,57), calnum=union(calpha,cdigit), cword=cadd(95,calnum); function equal$3(x1,x2) {var x1$0=x1,x2$0=x2; for(;;) {var switch$0=0; if(typeof x1$0 === "number") switch(x1$0) {case 0:if(typeof x2$0 === "number" && ! x2$0)switch$0 = 1;break; case 1: if(typeof x2$0 === "number" && 1 === x2$0)switch$0 = 1;break; case 2: if(typeof x2$0 === "number" && 2 === x2$0)switch$0 = 1;break; case 3: if(typeof x2$0 === "number" && 3 === x2$0)switch$0 = 1;break; case 4: if(typeof x2$0 === "number" && 4 === x2$0)switch$0 = 1;break; case 5: if(typeof x2$0 === "number" && 5 === x2$0)switch$0 = 1;break; case 6: if(typeof x2$0 === "number" && 6 === x2$0)switch$0 = 1;break; case 7: if(typeof x2$0 === "number" && 7 === x2$0)switch$0 = 1;break; case 8: if(typeof x2$0 === "number" && 8 === x2$0)switch$0 = 1;break; default:if(typeof x2$0 === "number" && 9 <= x2$0)switch$0 = 1} else switch(x1$0[0]) {case 0: if(typeof x2$0 !== "number" && 0 === x2$0[0]) {var s2=x2$0[1],s1=x1$0[1];return caml_equal(s1,s2)} break; case 1: if(typeof x2$0 !== "number" && 1 === x2$0[0]) {var l2=x2$0[1],l1=x1$0[1];return eq_list(l1,l2)} break; case 2: if(typeof x2$0 !== "number" && 2 === x2$0[0]) {var l2$0=x2$0[1],l1$0=x1$0[1];return eq_list(l1$0,l2$0)} break; case 3: if(typeof x2$0 !== "number" && 3 === x2$0[0]) {var j2=x2$0[3], i2=x2$0[2], x2$1=x2$0[1], j1=x1$0[3], i1=x1$0[2], x1$1=x1$0[1], _gb_=i1 === i2?1:0; if(_gb_) {var _gc_=caml_equal(j1,j2); if(_gc_){var x1$0=x1$1,x2$0=x2$1;continue} var _gd_=_gc_} else var _gd_=_gb_; return _gd_} break; case 4: if(typeof x2$0 !== "number" && 4 === x2$0[0]) {var x2$2=x2$0[2], sem2=x2$0[1], x1$2=x1$0[2], sem1=x1$0[1], _ge_=sem1 === sem2?1:0; if(_ge_){var x1$0=x1$2,x2$0=x2$2;continue} return _ge_} break; case 5: if(typeof x2$0 !== "number" && 5 === x2$0[0]) {var x2$3=x2$0[2], k2=x2$0[1], x1$3=x1$0[2], k1=x1$0[1], _gf_=k1 === k2?1:0; if(_gf_){var x1$0=x1$3,x2$0=x2$3;continue} return _gf_} break; case 6:if(typeof x2$0 !== "number" && 6 === x2$0[0])return 0;break; case 7: if(typeof x2$0 !== "number" && 7 === x2$0[0]) {var x2$4=x2$0[1],x1$4=x1$0[1],x1$0=x1$4,x2$0=x2$4;continue} break; case 8: if(typeof x2$0 !== "number" && 8 === x2$0[0]) {var x2$5=x2$0[1],x1$5=x1$0[1],x1$0=x1$5,x2$0=x2$5;continue} break; case 9: if(typeof x2$0 !== "number" && 9 === x2$0[0]) {var x2$6=x2$0[1],x1$6=x1$0[1],x1$0=x1$6,x2$0=x2$6;continue} break; case 10: if(typeof x2$0 !== "number" && 10 === x2$0[0]) {var x2$7=x2$0[1],x1$7=x1$0[1],x1$0=x1$7,x2$0=x2$7;continue} break; case 11: if(typeof x2$0 !== "number" && 11 === x2$0[0]) {var l2$1=x2$0[1],l1$1=x1$0[1];return eq_list(l1$1,l2$1)} break; case 12: if(typeof x2$0 !== "number" && 12 === x2$0[0]) {var l2$2=x2$0[1],l1$2=x1$0[1];return eq_list(l1$2,l2$2)} break; case 13: if(typeof x2$0 !== "number" && 13 === x2$0[0]) {var x2$8=x2$0[2], x2$9=x2$0[1], x1$8=x1$0[2], x1$9=x1$0[1], _gg_=equal$3(x1$9,x2$9); if(_gg_){var x1$0=x1$8,x2$0=x2$8;continue} return _gg_} break; default: if(typeof x2$0 !== "number" && 14 === x2$0[0]) {var r2=x2$0[2], m2=x2$0[1], r1=x1$0[2], m1=x1$0[1], _gh_=m1 === m2?1:0; if(_gh_){var x1$0=r1,x2$0=r2;continue} return _gh_}} return switch$0?1:0}} function eq_list(l1,l2) {var l1$0=l1,l2$0=l2; for(;;) {if(l1$0) {if(l2$0) {var r2=l2$0[2], x2=l2$0[1], r1=l1$0[2], x1=l1$0[1], _ga_=equal$3(x1,x2); if(_ga_){var l1$0=r1,l2$0=r2;continue} return _ga_}} else if(! l2$0)return 1; return 0}} function sequence(l){if(l && ! l[2]){var x=l[1];return x}return [1,l]} function merge_sequences(param) {var param$0=param; for(;;) {if(param$0) {var _f7_=param$0[1]; if(typeof _f7_ !== "number") switch(_f7_[0]) {case 1: var _f8_=_f7_[1]; if(_f8_) {var r$0=param$0[2], y=_f8_[2], x=_f8_[1], r$1=merge_sequences(r$0); if(r$1) {var _f9_=r$1[1],switch$0=0; if(typeof _f9_ === "number" || ! (1 === _f9_[0])) switch$0 = 1; else {var _f__=_f9_[1]; if(_f__) {var r$2=r$1[2],y$0=_f__[2],x$0=_f__[1]; if(equal$3(x,x$0)) {var _f$_=[0,sequence(y$0),0]; return [0,[1,[0,x,[0,[2,[0,sequence(y),_f$_]],0]]],r$2]}}}} return [0,[1,[0,x,y]],r$1]} break; case 2: var r$3=param$0[2], l=_f7_[1], param$1=caml_call2(Stdlib[37],l,r$3), param$0=param$1; continue } var r=param$0[2]; return [0,_f7_,merge_sequences(r)]} return 0}} function enforce_kind(ids,kind,k,cr) {return 332064784 === kind?332064784 === k?cr:seq$0(ids,k,cr,eps(ids)):cr} function trans_seq(ids,kind,ign_group,ign_case,greedy,pos,cache,c,param) {if(param) {var _f6_=param[1]; if(param[2]) {var rem=param[2], match= translate(ids,kind,ign_group,ign_case,greedy,pos,cache,c,_f6_), kind$0=match[2], cr=match[1], cr$0=trans_seq(ids,kind,ign_group,ign_case,greedy,pos,cache,c,rem); return is_eps(cr$0)?cr:is_eps(cr)?cr$0:seq$0(ids,kind$0,cr,cr$0)} var match$0= translate(ids,kind,ign_group,ign_case,greedy,pos,cache,c,_f6_), kind$1=match$0[2], cr$1=match$0[1]; return enforce_kind(ids,kind,kind$1,cr$1)} return eps(ids)} function translate(ids,kind,ign_group,ign_case,greedy,pos,cache,c,param) {var ign_group$0=ign_group,greedy$0=greedy,param$0=param; for(;;) if(typeof param$0 === "number") switch(param$0) {case 0:return [0,after(ids,9),kind]; case 1:return [0,before(ids,9),kind]; case 2: var _fX_=before(ids,letter); return [0,seq$0(ids,332064784,after(ids,5),_fX_),kind]; case 3: var _fY_=before(ids,5); return [0,seq$0(ids,332064784,after(ids,letter),_fY_),kind]; case 4: var _fZ_=before(ids,5), _f0_=[0,seq$0(ids,332064784,after(ids,5),_fZ_),0], _f1_=before(ids,letter); return [0, alt (ids,[0,seq$0(ids,332064784,after(ids,letter),_f1_),_f0_]), kind]; case 5:return [0,after(ids,inexistant),kind]; case 6:return [0,before(ids,inexistant),kind]; case 7:return [0,before(ids,17),kind]; case 8:return [0,after(ids,search_boundary),kind]; default:return [0,before(ids,search_boundary),kind]} else switch(param$0[0]) {case 0: var s=param$0[1];return [0,cst(ids,trans_set(cache,c,s)),kind]; case 1: var l=param$0[1]; return [0, trans_seq (ids,kind,ign_group$0,ign_case,greedy$0,pos,cache,c,l), kind]; case 2: var l$0=param$0[1],merged_sequences=merge_sequences(l$0); if(merged_sequences && ! merged_sequences[2]) {var r=merged_sequences[1], match= translate(ids,kind,ign_group$0,ign_case,greedy$0,pos,cache,c,r), kind$0=match[2], cr=match[1]; return [0,enforce_kind(ids,kind,kind$0,cr),kind]} var _f2_= function(r) {var match= translate (ids,kind,ign_group$0,ign_case,greedy$0,pos,cache,c,r), kind$0=match[2], cr=match[1]; return enforce_kind(ids,kind,kind$0,cr)}; return [0, alt(ids,caml_call2(Stdlib_List[19],_f2_,merged_sequences)), kind]; case 3: var j=param$0[3], i=param$0[2], r$0=param$0[1], match$0= translate(ids,kind,ign_group$0,ign_case,greedy$0,pos,cache,c,r$0), kind$1=match$0[2], cr$0=match$0[1]; if(j) var j$0=j[1], f= 620821490 <= greedy$0 ?function(rem) {var _f4_=[0,seq$0(ids,kind$1,rename(ids,cr$0),rem),0]; return alt(ids,[0,eps(ids),_f4_])} :function(rem) {var _f5_=[0,eps(ids),0]; return alt (ids,[0,seq$0(ids,kind$1,rename(ids,cr$0),rem),_f5_])}, rem=iter$0(j$0 - i | 0,f,eps(ids)); else var rem=rep(ids,greedy$0,kind$1,cr$0); return [0, iter$0 (i, function(rem){return seq$0(ids,kind$1,rename(ids,cr$0),rem)}, rem), kind]; case 4: var r$1=param$0[2], kind$2=param$0[1], match$1= translate (ids,kind$2,ign_group$0,ign_case,greedy$0,pos,cache,c,r$1), kind$3=match$1[2], cr$1=match$1[1]; return [0,enforce_kind(ids,kind$2,kind$3,cr$1),kind$2]; case 5: var param$1=param$0[2], greedy$1=param$0[1], greedy$0=greedy$1, param$0=param$1; continue; case 6: var r$2=param$0[1]; if(ign_group$0){var param$0=r$2;continue} var p=pos[1]; pos[1] = pos[1] + 2 | 0; var match$2= translate(ids,kind,ign_group$0,ign_case,greedy$0,pos,cache,c,r$2), kind$4=match$2[2], cr$2=match$2[1], _f3_=seq$0(ids,332064784,cr$2,mark(ids,p + 1 | 0)); return [0,seq$0(ids,332064784,mark(ids,p),_f3_),kind$4]; case 7: var param$2=param$0[1],ign_group$0=1,param$0=param$2;continue; case 8: var r$3=param$0[1], b=pos[1], match$3= translate(ids,kind,ign_group$0,ign_case,greedy$0,pos,cache,c,r$3), kind$5=match$3[2], cr$3=match$3[1], e=pos[1] - 1 | 0; return e < b ?[0,cr$3,kind$5] :[0,seq$0(ids,332064784,erase(ids,b,e),cr$3),kind$5]; case 14: var r$4=param$0[2], i$0=param$0[1], match$4= translate(ids,kind,ign_group$0,ign_case,greedy$0,pos,cache,c,r$4), kind$6=match$4[2], cr$4=match$4[1]; return [0,seq$0(ids,332064784,pmark(ids,i$0),cr$4),kind$6]; default:throw [0,Assert_failure,_ce_]}} function as_set(param) {if(typeof param !== "number" && 0 === param[0]){var s=param[1];return s} throw [0,Assert_failure,_cf_]} function handle_case(ign_case,r) {var ign_case$0=ign_case,r$0=r; for(;;) if(typeof r$0 === "number") return r$0; else switch(r$0[0]) {case 0: var s=r$0[1]; if(ign_case$0) var _fL_=offset(-32,inter(s,clower)), _fM_=union(s,union(offset(32,inter(s,cupper)),_fL_)); else var _fM_=s; return [0,_fM_]; case 1: var l=r$0[1], _fN_=function(_fW_){return handle_case(ign_case$0,_fW_)}; return [1,caml_call2(Stdlib_List[19],_fN_,l)]; case 2: var l$0=r$0[1], _fO_=function(_fV_){return handle_case(ign_case$0,_fV_)}, l$1=caml_call2(Stdlib_List[19],_fO_,l$0); if(is_charset([2,l$1])) {var _fP_=function(s,r){return union(s,as_set(r))}; return [0,caml_call3(Stdlib_List[25],_fP_,empty,l$1)]} return [2,l$1]; case 3: var j=r$0[3],i=r$0[2],r$1=r$0[1]; return [3,handle_case(ign_case$0,r$1),i,j]; case 4: var r$2=r$0[2],k=r$0[1],r$3=handle_case(ign_case$0,r$2); return is_charset(r$3)?r$3:[4,k,r$3]; case 5: var r$4=r$0[2],k$0=r$0[1],r$5=handle_case(ign_case$0,r$4); return is_charset(r$5)?r$5:[5,k$0,r$5]; case 6:var r$6=r$0[1];return [6,handle_case(ign_case$0,r$6)]; case 7: var r$7=r$0[1],r$8=handle_case(ign_case$0,r$7); return is_charset(r$8)?r$8:[7,r$8]; case 8: var r$9=r$0[1],r$10=handle_case(ign_case$0,r$9); return is_charset(r$10)?r$10:[8,r$10]; case 9:var r$11=r$0[1],ign_case$0=0,r$0=r$11;continue; case 10:var r$12=r$0[1],ign_case$0=1,r$0=r$12;continue; case 11: var l$2=r$0[1], _fQ_=function(r){return handle_case(ign_case$0,r)}, l$3=caml_call2(Stdlib_List[19],_fQ_,l$2), _fR_=function(s,r){return inter(s,as_set(r))}; return [0,caml_call3(Stdlib_List[25],_fR_,cany,l$3)]; case 12: var l$4=r$0[1], _fS_=function(r){return handle_case(ign_case$0,r)}, l$5=caml_call2(Stdlib_List[19],_fS_,l$4), _fT_=function(s,r){return union(s,as_set(r))}; return [0,diff(cany,caml_call3(Stdlib_List[25],_fT_,empty,l$5))]; case 13: var r$13=r$0[2], r$14=r$0[1], _fU_=diff(cany,as_set(handle_case(ign_case$0,r$13))); return [0,inter(as_set(handle_case(ign_case$0,r$14)),_fU_)]; default: var r$15=r$0[2],i$0=r$0[1]; return [14,i$0,handle_case(ign_case$0,r$15)]}} function anchored(param) {var param$0=param; for(;;) {var switch$0=0; if(typeof param$0 === "number") switch(param$0){case 5:case 8:return 1} else switch(param$0[0]) {case 1: var l=param$0[1];return caml_call2(Stdlib_List[33],anchored,l); case 2: var l$0=param$0[1]; return caml_call2(Stdlib_List[32],anchored,l$0); case 3: var i=param$0[2],r=param$0[1],_fK_=0 < i?1:0; if(_fK_){var param$0=r;continue} return _fK_; case 4: case 5: case 14:var param$1=param$0[2];switch$0 = 1;break; case 0: case 11: case 12: case 13:break; default:var param$1=param$0[1];switch$0 = 1} if(switch$0){var param$0=param$1;continue} return 0}} function str(s) {var l=[0,0],_fH_=caml_ml_string_length(s) - 1 | 0; if(! (_fH_ < 0)) {var i=_fH_; for(;;) {var _fI_=l[1]; l[1] = [0,[0,csingle(caml_string_get(s,i))],_fI_]; var _fJ_=i - 1 | 0; if(0 !== i){var i=_fJ_;continue} break}} return [1,l[1]]} function char$0(c){return [0,csingle(c)]} function alt$0(l){if(l && ! l[2]){var r=l[1];return r}return [2,l]} function seq$1(l){if(l && ! l[2]){var r=l[1];return r}return [1,l]} var empty$2=alt$0(0),epsilon=seq$1(0); function repn(r,i,j) {if(i < 0)caml_call1(Stdlib[1],cst_Re_repn); var switch$0=0; if(j) {var j$0=j[1]; if(j$0 < i){caml_call1(Stdlib[1],cst_Re_repn$0);switch$0 = 1}} return [3,r,i,j]} function rep$0(r){return repn(r,0,0)} function rep1(r){return repn(r,1,0)} function opt(r){return repn(r,0,_cg_)} var bol=0,eol=1,bow=2,eow=3; function word(r){return seq$1([0,bow,[0,r,[0,eow,0]]])} var not_boundary=4,bos=5,eos=6; function whole_string(r){return seq$1([0,bos,[0,r,[0,eos,0]]])} var leol=7,start$0=8,stop$0=9; function longest(r){return [4,-730718166,r]} function shortest(r){return [4,-1034406550,r]} function first$0(r){return [4,332064784,r]} function greedy(r){return [5,-904640576,r]} function non_greedy(r){return [5,620821490,r]} function group(r){return [6,r]} function no_group(r){return [7,r]} function nest(r){return [8,r]} function mark$0(r){var i=gen(0);return [0,i,[14,i,r]]} function set(str) {var s=[0,empty],_fE_=caml_ml_string_length(str) - 1 | 0,_fD_=0; if(! (_fE_ < 0)) {var i=_fD_; for(;;) {var _fF_=s[1]; s[1] = union(csingle(caml_string_get(str,i)),_fF_); var _fG_=i + 1 | 0; if(_fE_ !== i){var i=_fG_;continue} break}} return [0,s[1]]} function rg(c$0,c){return [0,cseq(c$0,c)]} function inter$0(l) {var r=[11,l];return is_charset(r)?r:caml_call1(Stdlib[1],cst_Re_inter)} function compl(l) {var r=[12,l];return is_charset(r)?r:caml_call1(Stdlib[1],cst_Re_compl)} function diff$0(r$0,r) {var r$1=[13,r$0,r]; return is_charset(r$1)?r$1:caml_call1(Stdlib[1],cst_Re_diff)} var any=[0,cany], notnl=[0,diff(cany,csingle(10))], _ch_=[0,rg(248,255),0], _ci_=[0,rg(223,246),_ch_], _cj_=[0,char$0(181),_ci_], lower=alt$0([0,rg(97,122),_cj_]), _ck_=[0,rg(216,222),0], _cl_=[0,rg(192,214),_ck_], upper=alt$0([0,rg(65,90),_cl_]), _cm_=[0,char$0(186),0], alpha=alt$0([0,lower,[0,upper,[0,char$0(170),_cm_]]]), digit=rg(48,57), alnum=alt$0([0,alpha,[0,digit,0]]), wordc=alt$0([0,alnum,[0,char$0(95),0]]), ascii=rg(0,127), blank=set(cst$0), _cn_=[0,rg(127,159),0], cntrl=alt$0([0,rg(0,31),_cn_]), _co_=[0,rg(160,255),0], graph=alt$0([0,rg(33,126),_co_]), _cp_=[0,rg(160,255),0], print=alt$0([0,rg(32,126),_cp_]), _cq_=[0,char$0(247),0], _cr_=[0,char$0(215),_cq_], _cs_=[0,rg(187,191),_cr_], _ct_=[0,rg(182,185),_cs_], _cu_=[0,rg(171,180),_ct_], _cv_=[0,rg(160,169),_cu_], _cw_=[0,rg(123,126),_cv_], _cx_=[0,rg(91,96),_cw_], _cy_=[0,rg(58,64),_cx_], punct=alt$0([0,rg(33,47),_cy_]), _cz_=[0,rg(9,13),0], space=alt$0([0,char$0(32),_cz_]), _cA_=[0,rg(65,70),0], xdigit=alt$0([0,digit,[0,rg(97,102),_cA_]]); function case$0(r){return [9,r]} function no_case(r){return [10,r]} function compile(r$0) {var _fC_= anchored(r$0)?[6,r$0]:seq$1([0,shortest(rep$0(any)),[0,[6,r$0],0]]), regexp=handle_case(0,_fC_), c=make(0), lnl=[0,0]; function colorize(regexp) {var regexp$0=regexp; for(;;) {if(typeof regexp$0 === "number") switch(regexp$0) {case 7:lnl[1] = 1;return 0; case 0: case 1:return split(csingle(10),c); case 2: case 3: case 4:return split(cword,c); default:return 0} else switch(regexp$0[0]) {case 0:var s=regexp$0[1];return split(s,c); case 1: var l=regexp$0[1];return caml_call2(Stdlib_List[17],colorize,l); case 2: var l$0=regexp$0[1]; return caml_call2(Stdlib_List[17],colorize,l$0); case 3:var regexp$1=regexp$0[1],regexp$0=regexp$1;continue; case 4: case 5: case 14:var regexp$2=regexp$0[2];break; case 6: case 7: case 8:var regexp$2=regexp$0[1];break; default:throw [0,Assert_failure,_cd_]} var regexp$0=regexp$2; continue}} colorize(regexp); var _fB_=lnl[1], match=flatten(c), ncolor=match[3], color_repr=match[2], colors=match[1], lnl$0=_fB_?ncolor:-1, ncolor$0=_fB_?ncolor + 1 | 0:ncolor, ids=create_ids(0), pos=[0,0], match$0= translate (ids,332064784,0,0,-904640576,pos,[0,CSetMap[1]],colors,regexp), kind=match$0[2], r=match$0[1], initial=enforce_kind(ids,332064784,kind,r), group_count=pos[1] / 2 | 0, _fA_=caml_call1(_b7_[3][1],97); return [0, initial, 0, colors, color_repr, ncolor$0, lnl$0, create_working_area(0), _fA_, group_count]} function exec_internal(name,opt,_fw_,partial,groups,re,s) {if(opt)var sth=opt[1],pos=sth;else var pos=0; if(_fw_)var sth$0=_fw_[1],len=sth$0;else var len=-1; var _fx_=pos < 0?1:0; if(_fx_) var _fy_=_fx_; else var _fz_=len < -1?1:0, _fy_=_fz_ || (caml_ml_string_length(s) < (pos + len | 0)?1:0); if(_fy_)caml_call1(Stdlib[1],name); return match_str(groups,partial,re,s,pos,len)} function exec(pos,len,re,s) {var match=exec_internal(cst_Re_exec,pos,len,0,1,re,s); if(typeof match === "number")throw Stdlib[8]; var substr=match[1]; return substr} function exec_opt(pos,len,re,s) {var match=exec_internal(cst_Re_exec_opt,pos,len,0,1,re,s); if(typeof match === "number")return 0; var substr=match[1]; return [0,substr]} function execp(pos,len,re,s) {var match=exec_internal(cst_Re_execp,pos,len,0,0,re,s); return typeof match === "number"?0:1} function exec_partial(pos,len,re,s) {var match=exec_internal(cst_Re_exec_partial,pos,len,1,0,re,s); return typeof match === "number"?match?939392865:-1062743954:782112175} function marked(g,p){return caml_call2(Set[3],p,g[3])} function mark_set(g){return g[3]} function all_seq(opt,len,re,s) {if(opt)var sth=opt[1],pos=sth;else var pos=0; if(pos < 0)caml_call1(Stdlib[1],cst_Re_all); if(len) {var l=len[1], _fs_=l < 0?1:0, _ft_=_fs_ || (caml_ml_string_length(s) < (pos + l | 0)?1:0); if(_ft_)caml_call1(Stdlib[1],cst_Re_all$0); var limit=pos + l | 0} else var limit=caml_ml_string_length(s); function aux(pos,param) {if(limit <= pos)return 0; var match=match_str(1,0,re,s,pos,limit - pos | 0); if(typeof match === "number")return 0; var substr=match[1], match$0=caml_call2(Group[3],substr,0), p2=match$0[2], p1=match$0[1], pos$0=p1 === p2?p2 + 1 | 0:p2; return [0,substr,function(_fv_){return aux(pos$0,_fv_)}]} return function(_fu_){return aux(pos,_fu_)}} function matches_seq(pos,len,re,s) {var _fq_=all_seq(pos,len,re,s); function _fr_(sub){return caml_call2(Group[1],sub,0)} return caml_call1(caml_call1(Stdlib_Seq[27],_fr_),_fq_)} function split_full_seq(opt,len,re,s) {if(opt)var sth=opt[1],pos=sth;else var pos=0; if(pos < 0)caml_call1(Stdlib[1],cst_Re_split); if(len) {var l=len[1], _ff_=l < 0?1:0, _fg_=_ff_ || (caml_ml_string_length(s) < (pos + l | 0)?1:0); if(_fg_)caml_call1(Stdlib[1],cst_Re_split$0); var limit=pos + l | 0} else var limit=caml_ml_string_length(s); function aux(state,i,pos$0,param) {if(typeof state === "number") {if(limit <= pos$0) {if(i < limit) {var sub=caml_call3(Stdlib_String[15],s,i,limit - i | 0), _fj_=i + 1 | 0; return [0, [0,936573133,sub], function(_fp_){return aux(state,_fj_,pos$0,_fp_)}]} return 0} var match=match_str(1,0,re,s,pos$0,limit - pos$0 | 0); if(typeof match === "number") {if(match)return 0; if(i < limit) {var text=caml_call3(Stdlib_String[15],s,i,limit - i | 0); return [0, [0,936573133,text], function(_fo_){return aux(state,limit,pos$0,_fo_)}]} return 0} var substr=match[1], match$0=caml_call2(Group[3],substr,0), p2=match$0[2], p1=match$0[1], pos$1=p1 === p2?p2 + 1 | 0:p2; if(pos < p1) {var text$0=caml_call3(Stdlib_String[15],s,i,p1 - i | 0), state$0=[0,73271853,[0,-363573681,substr]]; return [0, [0,936573133,text$0], function(_fn_){return aux(state$0,p2,pos$1,_fn_)}]} return [0, [0,-363573681,substr], function(_fm_){return aux(state,p2,pos$1,_fm_)}]} var x=state[2],_fk_=814535476; return [0,x,function(_fl_){return aux(_fk_,i,pos$0,_fl_)}]} var _fh_=814535476; return function(_fi_){return aux(_fh_,pos,pos,_fi_)}} function split_seq(pos,len,re,s) {var seq=split_full_seq(pos,len,re,s); function filter(seq,param) {var seq$0=seq; for(;;) {var match=caml_call1(seq$0,0); if(match) {var _fd_=match[1]; if(936573133 <= _fd_[1]) {var tl=match[2],s=_fd_[2]; return [0,s,function(_fe_){return filter(tl,_fe_)}]} var seq$1=match[2],seq$0=seq$1; continue} return 0}} return function(_fc_){return filter(seq,_fc_)}} function list_of_seq(s) {var _e$_=0; function _fa_(l,x){return [0,x,l]} var _fb_=caml_call3(Stdlib_Seq[5],_fa_,_e$_,s); return caml_call1(Stdlib_List[9],_fb_)} function all$0(pos,len,re,s){return list_of_seq(all_seq(pos,len,re,s))} function matches(pos,len,re,s) {return list_of_seq(matches_seq(pos,len,re,s))} function split_full(pos,len,re,s) {return list_of_seq(split_full_seq(pos,len,re,s))} function split$0(pos,len,re,s) {return list_of_seq(split_seq(pos,len,re,s))} function gen_of_seq(s) {var r=[0,s]; return function(param) {var match=caml_call1(r[1],0); if(match){var tl=match[2],x=match[1];r[1] = tl;return [0,x]} return 0}} function split_gen(pos,len,re,s) {return gen_of_seq(split_seq(pos,len,re,s))} function split_full_gen(pos,len,re,s) {return gen_of_seq(split_full_seq(pos,len,re,s))} function all_gen(pos,len,re,s){return gen_of_seq(all_seq(pos,len,re,s))} function matches_gen(pos,len,re,s) {return gen_of_seq(matches_seq(pos,len,re,s))} function replace(opt,len,_e7_,re,f,s) {if(opt)var sth=opt[1],pos=sth;else var pos=0; if(_e7_)var sth$0=_e7_[1],all=sth$0;else var all=1; if(pos < 0)caml_call1(Stdlib[1],cst_Re_replace); if(len) {var l=len[1], _e8_=l < 0?1:0, _e9_=_e8_ || (caml_ml_string_length(s) < (pos + l | 0)?1:0); if(_e9_)caml_call1(Stdlib[1],cst_Re_replace$0); var limit=pos + l | 0} else var limit=caml_ml_string_length(s); var buf=caml_call1(Stdlib_Buffer[1],caml_ml_string_length(s)),pos$0=pos; for(;;) {if(pos$0 < limit) {var match=match_str(1,0,re,s,pos$0,limit - pos$0 | 0); if(typeof match === "number") {if(! match) caml_call4(Stdlib_Buffer[18],buf,s,pos$0,limit - pos$0 | 0)} else {var substr=match[1], match$0=caml_call2(Group[3],substr,0), p2=match$0[2], p1=match$0[1]; caml_call4(Stdlib_Buffer[18],buf,s,pos$0,p1 - pos$0 | 0); var replacing=caml_call1(f,substr); caml_call2(Stdlib_Buffer[16],buf,replacing); if(all) {if(p1 === p2) {if(p2 < limit) {var _e__=caml_string_get(s,p2); caml_call2(Stdlib_Buffer[12],buf,_e__)} var pos$1=p2 + 1 | 0} else var pos$1=p2; var pos$0=pos$1; continue} caml_call4(Stdlib_Buffer[18],buf,s,p2,limit - p2 | 0)}} return caml_call1(Stdlib_Buffer[2],buf)}} function replace_string(pos,len,all,re,by,s) {return replace(pos,len,all,re,function(param){return by},s)} function witness(t) {function witness(param) {var param$0=param; for(;;) {if(typeof param$0 === "number") return cst$1; else switch(param$0[0]) {case 0: var c=param$0[1], _e1_=pick(c), _e2_=caml_call1(Stdlib_Char[1],_e1_); return caml_call2(Stdlib_String[1],1,_e2_); case 1: var xs=param$0[1],_e3_=caml_call2(Stdlib_List[19],witness,xs); return caml_call2(Stdlib_String[6],cst$2,_e3_); case 2: var _e4_=param$0[1]; if(_e4_){var param$1=_e4_[1],param$0=param$1;continue} throw [0,Assert_failure,_cB_]; case 3: var from=param$0[2], r=param$0[1], w=witness(r), b= caml_call1 (Stdlib_Buffer[1], runtime.caml_mul(caml_ml_string_length(w),from)), _e5_=1; if(! (from < 1)) {var i=_e5_; for(;;) {caml_call2(Stdlib_Buffer[16],b,w); var _e6_=i + 1 | 0; if(from !== i){var i=_e6_;continue} break}} return caml_call1(Stdlib_Buffer[2],b); case 10:var param$3=param$0[1],param$0=param$3;continue; case 4: case 5: case 14:var param$2=param$0[2];break; case 11: case 12: case 13:throw [0,Assert_failure,_cC_]; default:var param$2=param$0[1]} var param$0=param$2; continue}} return witness(handle_case(0,t))} var get$0=Group[1], get_ofs=Group[3], get_all=Group[6], get_all_ofs=Group[7], test$0=Group[8], Seq=[0,all_seq,matches_seq,split_seq,split_full_seq], Mark=[0,marked,Set,mark_set,equal$0,compare$1], include$0= [0, Group, compile, exec, exec_opt, execp, exec_partial, Mark, all$0, all_gen, all_seq, matches, matches_gen, matches_seq, split$0, split_gen, split_seq, split_full, split_full_gen, split_full_seq, Seq, replace, replace_string, str, char$0, alt$0, seq$1, empty$2, epsilon, rep$0, rep1, repn, opt, bol, eol, bow, eow, bos, eos, leol, start$0, stop$0, word, not_boundary, whole_string, longest, shortest, first$0, greedy, non_greedy, group, no_group, nest, mark$0, set, rg, inter$0, diff$0, compl, any, notnl, alnum, wordc, alpha, ascii, blank, cntrl, digit, graph, lower, print, punct, space, upper, xdigit, case$0, no_case, pp$5, print_re, print_re, View, witness, get$0, get_ofs, get_all, get_all_ofs, test$0, marked, mark_set]; caml_register_global(159,include$0,"Re__Core"); var Parse_error=[248,cst_Re_Emacs_Parse_error,caml_fresh_oo_id(0)], Not_supported=[248,cst_Re_Emacs_Not_supported,caml_fresh_oo_id(0)]; function re(opt$0,s) {if(opt$0)var sth=opt$0[1],case$0=sth;else var case$0=1; var i=[0,0],l=caml_ml_string_length(s); function eos$0(param){return i[1] === l?1:0} function test2(c$0,c) {var _eY_=(i[1] + 1 | 0) < l?1:0; if(_eY_) var _eZ_=caml_string_get(s,i[1]) === c$0?1:0, _e0_=_eZ_?caml_string_get(s,i[1] + 1 | 0) === c?1:0:_eZ_; else var _e0_=_eY_; return _e0_} function accept(c) {var _eW_=1 - eos$0(0), _eX_=_eW_?caml_string_get(s,i[1]) === c?1:0:_eW_; if(_eX_)i[1]++; return _eX_} function accept2(c$0,c) {var r=test2(c$0,c);if(r)i[1] = i[1] + 2 | 0;return r} function get(param){var r=caml_string_get(s,i[1]);i[1]++;return r} function char$1(param){if(eos$0(0))throw Parse_error;return get(0)} function bracket(s) {var s$0=s; for(;;) {if(0 !== s$0 && accept(93))return s$0; var c=char$1(0); if(accept(45)) {if(accept(93)) {var _eV_=[0,char$0(45),s$0];return [0,char$0(c),_eV_]} var c$0=char$1(0),s$1=[0,rg(c,c$0),s$0],s$0=s$1; continue} var s$2=[0,char$0(c),s$0],s$0=s$2; continue}} function branch(param) {var left=0; for(;;) {if(! eos$0(0) && ! test2(92,124) && ! test2(92,41)) {if(accept(46)) var r=notnl; else if(accept(94)) var r=bol; else if(accept(36)) var r=eol; else if(accept(91)) var r=accept(94)?compl(bracket(0)):alt$0(bracket(0)); else if(accept(92)) if(accept(40)) {var r$0=regexp(0); if(1 - accept2(92,41))throw Parse_error; var r=[6,r$0]} else if(accept(96)) var r=bos; else if(accept(39)) var r=eos; else if(accept(61)) var r=start$0; else if(accept(98)) var r=alt$0([0,bow,[0,eow,0]]); else if(accept(66)) var r=not_boundary; else if(accept(60)) var r=bow; else if(accept(62)) var r=eow; else if(accept(119)) var r=alt$0([0,alnum,[0,char$0(95),0]]); else if(accept(87)) var r=compl([0,alnum,[0,char$0(95),0]]); else {if(eos$0(0))throw Parse_error; var c=get(0),switch$0=0; if(63 <= c) {if(91 <= c) {if(! (95 <= c))switch$0 = 1} else if(! (64 <= c))switch$0 = 1} else if(48 <= c) {if(! (58 <= c))throw Not_supported} else if(36 <= c) switch(c - 36 | 0) {case 0:case 6:case 7:case 10:switch$0 = 1;break} if(! switch$0)throw Parse_error; var r=char$0(c)} else {if(eos$0(0))throw Parse_error; var c$0=get(0),switch$1=0; if(44 <= c$0) {if(63 === c$0)switch$1 = 1} else if(42 <= c$0)switch$1 = 1; if(switch$1)throw Parse_error; var r=char$0(c$0)} var _eU_=accept(42)?rep$0(r):accept(43)?rep1(r):accept(63)?opt(r):r, left$0=[0,_eU_,left], left=left$0; continue} return seq$1(caml_call1(Stdlib_List[9],left))}} function regexp(param) {var left=branch(0),left$0=left; for(;;) {if(accept2(92,124)) {var left$1=alt$0([0,left$0,[0,branch(0),0]]),left$0=left$1; continue} return left$0}} var r=regexp(0); if(1 - eos$0(0))throw Parse_error; return case$0?r:[10,r]} function compile_pat(opt,s) {if(opt)var sth=opt[1],case$0=sth;else var case$0=1; return compile(re([0,case$0],s))} var Re_Emacs=[0,Parse_error,Not_supported,re,compile,compile_pat]; caml_register_global(160,Re_Emacs,"Re__Emacs"); function compile_regexp(s,c) {var re$0=re([0,1 - c],s), _eR_=[246,function(_eT_){return compile(re$0)}]; return [0, re$0, [246, function(_eS_){return compile(seq$1([0,start$0,[0,re$0,0]]))}], _eR_]} var state=[0,0]; function string_match(re,s,p) {try {var _eM_=re[2], _eN_=caml_obj_tag(_eM_), _eO_= 250 === _eN_ ?_eM_[1] :246 === _eN_?caml_call1(CamlinternalLazy[2],_eM_):_eM_; state[1] = [0,exec([0,p],0,_eO_,s)]; var _eP_=1; return _eP_} catch(_eQ_) {_eQ_ = caml_wrap_exception(_eQ_); if(_eQ_ === Stdlib[8]){state[1] = 0;return 0} throw _eQ_}} function string_partial_match(re,s,p) {var _eJ_=re[2], _eK_=caml_obj_tag(_eJ_), _eL_= 250 === _eK_ ?_eJ_[1] :246 === _eK_?caml_call1(CamlinternalLazy[2],_eJ_):_eJ_, match=exec_partial([0,p],0,_eL_,s); return 782112175 === match?string_match(re,s,p):939392865 <= match?1:0} function search_forward(re,s,p) {try {var _eE_=re[3], _eF_=caml_obj_tag(_eE_), _eG_= 250 === _eF_ ?_eE_[1] :246 === _eF_?caml_call1(CamlinternalLazy[2],_eE_):_eE_, res=exec([0,p],0,_eG_,s); state[1] = [0,res]; var _eH_=caml_call2(Group[3],res,0)[1]; return _eH_} catch(_eI_) {_eI_ = caml_wrap_exception(_eI_); if(_eI_ === Stdlib[8]){state[1] = 0;throw Stdlib[8]} throw _eI_}} function search_backward(re,s,p) {var p$0=p; for(;;) try {var _eA_=re[2], _eB_=caml_obj_tag(_eA_), _eC_= 250 === _eB_ ?_eA_[1] :246 === _eB_?caml_call1(CamlinternalLazy[2],_eA_):_eA_, res=exec([0,p$0],0,_eC_,s); state[1] = [0,res]; return p$0} catch(_eD_) {_eD_ = caml_wrap_exception(_eD_); if(_eD_ === Stdlib[8]) {state[1] = 0; if(0 === p$0)throw Stdlib[8]; var p$1=p$0 - 1 | 0,p$0=p$1; continue} throw _eD_}} function valid_group(n) {var _ew_=0 <= n?1:0; if(_ew_) {var _ex_=n < 10?1:0; if(_ex_) {var _ey_=state[1]; if(_ey_){var m=_ey_[1];return n < caml_call1(Group[9],m)?1:0} var _ez_=0} else var _ez_=_ex_} else var _ez_=_ew_; return _ez_} function offset_group(i) {var _ev_=state[1]; if(_ev_){var m=_ev_[1];return caml_call2(Group[3],m,i)} throw Stdlib[8]} function group_len(i) {try {var match=offset_group(i),e=match[2],b=match[1],_et_=e - b | 0; return _et_} catch(_eu_) {_eu_ = caml_wrap_exception(_eu_); if(_eu_ === Stdlib[8])return 0; throw _eu_}} function replace$0(orig,repl,p,res,q,len) {var p$0=p,q$0=q; for(;;) {var _eq_=p$0 < len?1:0; if(_eq_) {var c=caml_string_get(repl,p$0); if(92 === c) {var c$0=caml_string_get(repl,p$0 + 1 | 0); if(58 <= c$0) {if(92 === c$0) {caml_bytes_set(res,q$0,92); var q$1=q$0 + 1 | 0,p$1=p$0 + 2 | 0,p$0=p$1,q$0=q$1; continue}} else if(48 <= c$0) {try {var match=offset_group(c$0 - 48 | 0), e=match[2], b=match[1], d$0=e - b | 0; if(0 < d$0)caml_call5(Stdlib_String[48],orig,b,res,q$0,d$0); var d=d$0} catch(_es_) {_es_ = caml_wrap_exception(_es_); if(_es_ !== Stdlib[8])throw _es_; var d=0,_er_=_es_} var q$3=q$0 + d | 0,p$3=p$0 + 2 | 0,p$0=p$3,q$0=q$3; continue} caml_bytes_set(res,q$0,92); caml_bytes_set(res,q$0 + 1 | 0,c$0); var q$2=q$0 + 2 | 0,p$2=p$0 + 2 | 0,p$0=p$2,q$0=q$2; continue} caml_bytes_set(res,q$0,c); var q$4=q$0 + 1 | 0,p$4=p$0 + 1 | 0,p$0=p$4,q$0=q$4; continue} return _eq_}} function replacement_text(repl,orig) {var len=caml_ml_string_length(repl),p=0,q=0; for(;;) {if(p < len) {if(92 === caml_string_get(repl,p)) {var p$0=p + 1 | 0; if(p$0 === len) caml_call1(Stdlib[2],cst_Str_replace_illegal_backsl); var c=caml_string_get(repl,p$0),switch$0=0; if(58 <= c) if(92 === c)var q$0=q + 1 | 0;else switch$0 = 1; else if(48 <= c) var q$0=q + group_len(c - 48 | 0) | 0; else switch$0 = 1; if(switch$0)var q$0=q + 2 | 0; var p$1=p$0 + 1 | 0,p=p$1,q=q$0; continue} var q$1=q + 1 | 0,p$2=p + 1 | 0,p=p$2,q=q$1; continue} var res=caml_create_bytes(q); replace$0(orig,repl,0,res,0,caml_ml_string_length(repl)); return caml_call1(Stdlib_Bytes[48],res)}} function quote$0(s) {var len=caml_ml_string_length(s), buf=caml_call1(Stdlib_Buffer[1],2 * len | 0), _em_=len - 1 | 0, _el_=0; if(! (_em_ < 0)) {var i=_el_; for(;;) {var c=caml_string_get(s,i),_en_=c - 63 | 0,switch$0=0; if(31 < _en_ >>> 0) {var _eo_=_en_ + 27 | 0; if(! (10 < _eo_ >>> 0)) switch(_eo_){case 0:case 6:case 7:case 10:switch$0 = 1;break}} else if(26 < _en_ - 1 >>> 0)switch$0 = 1; if(switch$0) {caml_call2(Stdlib_Buffer[12],buf,92); caml_call2(Stdlib_Buffer[12],buf,c)} else caml_call2(Stdlib_Buffer[12],buf,c); var _ep_=i + 1 | 0; if(_em_ !== i){var i=_ep_;continue} break}} return caml_call1(Stdlib_Buffer[2],buf)} function string_before(s,n){return caml_call3(Stdlib_String[15],s,0,n)} function string_after(s,n) {return caml_call3 (Stdlib_String[15],s,n,caml_ml_string_length(s) - n | 0)} function first_chars(s,n){return caml_call3(Stdlib_String[15],s,0,n)} function last_chars(s,n) {return caml_call3 (Stdlib_String[15],s,caml_ml_string_length(s) - n | 0,n)} function regexp(e){return compile_regexp(e,0)} function regexp_case_fold(e){return compile_regexp(e,1)} function regexp_string(s){return compile_regexp(quote$0(s),0)} function regexp_string_case_fold(s){return compile_regexp(quote$0(s),1)} function group_beginning(n) {if(1 - valid_group(n))caml_call1(Stdlib[1],cst_Str_group_beginning); var pos=offset_group(n)[1]; if(-1 === pos)throw Stdlib[8]; return pos} function group_end(n) {if(1 - valid_group(n))caml_call1(Stdlib[1],cst_Str_group_end); var pos=offset_group(n)[2]; if(-1 === pos)throw Stdlib[8]; return pos} function matched_group(n,txt) {var match=offset_group(n),e=match[2],b=match[1]; return caml_call3(Stdlib_String[15],txt,b,e - b | 0)} function replace_matched(repl,matched) {return replacement_text(repl,matched)} function match_beginning(param){return group_beginning(0)} function match_end(param){return group_end(0)} function matched_string(txt){return matched_group(0,txt)} function substitute_first(expr,repl_fun,text) {try {var pos=search_forward(expr,text,0), _eg_=[0,string_after(text,match_end(0)),0], _eh_=[0,caml_call1(repl_fun,text),_eg_], _ei_=[0,string_before(text,pos),_eh_], _ej_=caml_call2(Stdlib_String[6],cst$3,_ei_); return _ej_} catch(_ek_) {_ek_ = caml_wrap_exception(_ek_); if(_ek_ === Stdlib[8])return text; throw _ek_}} function global_substitute(expr,repl_fun,text) {function replace(accu,start,last_was_empty) {var accu$0=accu,start$0=start,last_was_empty$0=last_was_empty; for(;;) {var startpos=last_was_empty$0?start$0 + 1 | 0:start$0; if(caml_ml_string_length(text) < startpos) return [0,string_after(text,start$0),accu$0]; try {var pos=search_forward(expr,text,startpos)} catch(_ef_) {_ef_ = caml_wrap_exception(_ef_); if(_ef_ === Stdlib[8]) return [0,string_after(text,start$0),accu$0]; throw _ef_; var _ee_=_ef_} var start$1=match_end(0), repl_text=caml_call1(repl_fun,text), last_was_empty$1=start$1 === pos?1:0, accu$1= [0, repl_text, [0, caml_call3(Stdlib_String[15],text,start$0,pos - start$0 | 0), accu$0]], accu$0=accu$1, start$0=start$1, last_was_empty$0=last_was_empty$1; continue}} var _ec_=replace(0,0,0),_ed_=caml_call1(Stdlib_List[9],_ec_); return caml_call2(Stdlib_String[6],cst$4,_ed_)} function global_replace(expr,repl,text) {return global_substitute (expr,function(_eb_){return replacement_text(repl,_eb_)},text)} function replace_first(expr,repl,text) {return substitute_first (expr,function(_ea_){return replacement_text(repl,_ea_)},text)} function search_forward_progress(re,s,p) {var pos=search_forward(re,s,p); if(p < match_end(0))return pos; if(p < caml_ml_string_length(s))return search_forward(re,s,p + 1 | 0); throw Stdlib[8]} function bounded_split(expr,text,num) {var start=string_match(expr,text,0)?match_end(0):0; function split(accu,start,n) {if(caml_ml_string_length(text) <= start)return accu; if(1 === n)return [0,string_after(text,start),accu]; try {var pos=search_forward_progress(expr,text,start), _d9_=match_end(0), _d__= split ([0, caml_call3(Stdlib_String[15],text,start,pos - start | 0), accu], _d9_, n - 1 | 0); return _d__} catch(_d$_) {_d$_ = caml_wrap_exception(_d$_); if(_d$_ === Stdlib[8])return [0,string_after(text,start),accu]; throw _d$_}} var _d8_=split(0,start,num); return caml_call1(Stdlib_List[9],_d8_)} function split$1(expr,text){return bounded_split(expr,text,0)} function bounded_split_delim(expr,text,num) {function split(accu,start,n) {if(caml_ml_string_length(text) < start)return accu; if(1 === n)return [0,string_after(text,start),accu]; try {var pos=search_forward_progress(expr,text,start), _d5_=match_end(0), _d6_= split ([0, caml_call3(Stdlib_String[15],text,start,pos - start | 0), accu], _d5_, n - 1 | 0); return _d6_} catch(_d7_) {_d7_ = caml_wrap_exception(_d7_); if(_d7_ === Stdlib[8])return [0,string_after(text,start),accu]; throw _d7_}} if(runtime.caml_string_equal(text,cst$5))return 0; var _d4_=split(0,0,num); return caml_call1(Stdlib_List[9],_d4_)} function split_delim(expr,text){return bounded_split_delim(expr,text,0)} function bounded_full_split(expr,text,num) {function split(accu,start,n) {if(caml_ml_string_length(text) <= start)return accu; if(1 === n)return [0,[0,string_after(text,start)],accu]; try {var pos=search_forward_progress(expr,text,start), s=matched_string(text); if(start < pos) var _d1_=match_end(0), _d2_= split ([0, [1,s], [0, [0,caml_call3(Stdlib_String[15],text,start,pos - start | 0)], accu]], _d1_, n - 1 | 0); else var _d2_=split([0,[1,s],accu],match_end(0),n - 1 | 0); return _d2_} catch(_d3_) {_d3_ = caml_wrap_exception(_d3_); if(_d3_ === Stdlib[8])return [0,[0,string_after(text,start)],accu]; throw _d3_}} var _d0_=split(0,0,num); return caml_call1(Stdlib_List[9],_d0_)} function full_split(expr,text){return bounded_full_split(expr,text,0)} var Re_Str= [0, regexp, regexp_case_fold, quote$0, regexp_string, regexp_string_case_fold, string_match, search_forward, search_backward, string_partial_match, matched_string, match_beginning, match_end, matched_group, group_beginning, group_end, global_replace, replace_first, global_substitute, substitute_first, replace_matched, split$1, bounded_split, split_delim, bounded_split_delim, full_split, bounded_full_split, string_before, string_after, first_chars, last_chars]; caml_register_global(162,Re_Str,"Re__Str"); var Parse_error$0=[248,cst_Re_Glob_Parse_error,caml_fresh_oo_id(0)]; function mul(l$0,l) {function _dX_(s) {function _dZ_(s$0){return caml_call2(Stdlib[28],s,s$0)} return caml_call2(Stdlib_List[19],_dZ_,l)} var _dY_=caml_call2(Stdlib_List[19],_dX_,l$0); return caml_call1(Stdlib_List[14],_dY_)} function explicit_period(t) {var _dT_=t[7]; if(_dT_) {var _dU_=t[3]; if(_dU_)var _dV_=_dU_;else var _dW_=t[4],_dV_=_dW_?t[5]:_dW_} else var _dV_=_dT_; return _dV_} function slashes(t){return t[6]?_cG_:_cH_} function append(opt,t,piece) {if(opt) var sth=opt[1],am_at_start_of_component=sth; else var am_at_start_of_component=0; return [0,[0,piece,t[1]],t[2],0,am_at_start_of_component,t[5],t[6],t[7]]} function next(t) {var _dS_=t[2]; if(_dS_) {var remaining=_dS_[2],piece=_dS_[1]; return [0,[0,piece,[0,t[1],remaining,t[3],t[4],t[5],t[6],t[7]]]]} return 0} function one(explicit_slash,slashes,explicit_period) {var _dO_=0, _dP_=explicit_period?[0,char$0(46),0]:0, _dQ_=[0,_dP_,_dO_], _dR_=explicit_slash?caml_call2(Stdlib_List[19],char$0,slashes):0; return compl(caml_call1(Stdlib_List[13],[0,_dR_,_dQ_]))} function enclosed(enclosed) {if(0 === enclosed[0]){var c=enclosed[1];return char$0(c)} var high=enclosed[2],low=enclosed[1]; return rg(low,high)} function enclosed_set(explicit_slash,slashes,explicit_period,kind,set) {var set$0=caml_call2(Stdlib_List[19],enclosed,set), enclosure=596216810 <= kind?alt$0(set$0):compl(set$0); return inter$0 ([0,enclosure,[0,one(explicit_slash,slashes,explicit_period),0]])} function exactly(state,c) {var slashes$0=slashes(state), am_at_start_of_component=caml_call2(Stdlib_List[36],c,slashes$0), chars=am_at_start_of_component?slashes$0:[0,c,0]; return append ([0,am_at_start_of_component], state, alt$0(caml_call2(Stdlib_List[19],char$0,chars)))} function many_many(state) {var _dK_=state[7], explicit_period$0=_dK_?state[5]:_dK_, first_explicit_period=explicit_period(state), slashes$0=slashes(state); function match_component(explicit_period) {var _dN_=[0,rep$0(one(1,slashes$0,0)),0]; return seq$1([0,one(1,slashes$0,explicit_period),_dN_])} var _dL_=[0,opt(match_component(explicit_period$0)),0], _dM_= [0, rep$0 (seq$1([0,alt$0(caml_call2(Stdlib_List[19],char$0,slashes$0)),_dL_])), 0]; return append (0, state, seq$1([0,opt(match_component(first_explicit_period)),_dM_]))} function glob(opt$0,_dr_,_dq_,_dp_,_do_,_dn_,s) {if(opt$0)var sth=opt$0[1],anchored=sth;else var anchored=0; if(_dr_)var sth$0=_dr_[1],pathname=sth$0;else var pathname=1; if(_dq_) var sth$1=_dq_[1],match_backslashes=sth$1; else var match_backslashes=0; if(_dp_)var sth$2=_dp_[1],period=sth$2;else var period=1; if(_do_)var sth$3=_do_[1],expand_braces=sth$3;else var expand_braces=0; if(_dn_) var sth$4=_dn_[1],double_asterisk=sth$4; else var double_asterisk=1; function to_re(s) {var i=[0,0],l=caml_ml_string_length(s); function eos(param){return i[1] === l?1:0} function read(c) {var _dJ_=1 - eos(0),r=_dJ_?caml_string_get(s,i[1]) === c?1:0:_dJ_; if(r)i[1]++; return r} function read_ahead(pattern) {var pattern_len=caml_ml_string_length(pattern); if(l <= (i[1] + pattern_len | 0))return 0; try {var _dD_=pattern_len - 1 | 0,_dC_=0; if(! (_dD_ < 0)) {var j=_dC_; for(;;) {var _dF_=1 - eos(0); if(_dF_) var _dG_=caml_string_get(pattern,j), found=caml_string_get(s,i[1] + j | 0) === _dG_?1:0; else var found=_dF_; if(1 - found)throw Stdlib[3]; var _dH_=j + 1 | 0; if(_dD_ !== j){var j=_dH_;continue} break}} i[1] = i[1] + pattern_len | 0; var _dE_=1; return _dE_} catch(_dI_) {_dI_ = caml_wrap_exception(_dI_); if(_dI_ === Stdlib[3])return 0; throw _dI_}} function char$0(param) {read(92); if(eos(0))throw Parse_error$0; var r=caml_string_get(s,i[1]); i[1]++; return r} function enclosed(param) {var s=0; for(;;) {if(0 !== s && read(93))return s; var c=char$0(0); if(read(45)) {if(read(93))return [0,[0,c],[0,_cD_,s]]; var c$0=char$0(0),s$0=[0,[1,c,c$0],s],s=s$0; continue} var s$1=[0,[0,c],s],s=s$1; continue}} var pieces=0; for(;;) {if(eos(0)) {var glob=caml_call1(Stdlib_List[9],pieces), state=[0,0,glob,1,1,pathname,match_backslashes,period], state$8=state; for(;;) {var match$0=next(state$8); if(match$0) {var match$1=match$0[1], state$9=match$1[2], p=match$1[1], explicit_slash$0=state$9[5], explicit_period$1=explicit_period(state$9), slashes$1=slashes(state$9); if(typeof p === "number") switch(p) {case 0: var state$10= append (0, state$9, one(explicit_slash$0,slashes$1,explicit_period$1)); break; case 1: var explicit_slash=state$9[5], explicit_period$0=explicit_period(state$9), slashes$0=slashes(state$9); if(explicit_period$0) if(explicit_slash) {var _dv_=[0,rep$0(one(1,slashes$0,0)),0], not_empty=seq$1([0,one(1,slashes$0,1),_dv_]), maybe_empty=opt(not_empty), enclosed_set$1= function(slashes,not_empty) {function enclosed_set$0(state,kind,set) {var _dB_= [0, seq$1 ([0,not_empty,[0,enclosed_set(1,slashes,0,kind,set),0]]), 0]; return append (0,state,alt$0([0,enclosed_set(1,slashes,1,kind,set),_dB_]))} return enclosed_set$0}, enclosed_set$0=enclosed_set$1(slashes$0,not_empty), state$0=state$9; for(;;) {var match=next(state$0); if(match) {var _dw_=match[1],_dx_=_dw_[1]; if(typeof _dx_ === "number") switch(_dx_) {case 0: var state$1=_dw_[2],_dy_=append(0,state$1,not_empty);break; case 1:var state$2=_dw_[2],state$0=state$2;continue; default:var state$3=_dw_[2],_dy_=many_many(state$3)} else switch(_dx_[0]) {case 0: var state$4=_dw_[2], c=_dx_[1], not_empty$0=46 === c?not_empty:maybe_empty, state$5=append(0,state$4,not_empty$0), _dy_=exactly(state$5,c); break; case 1: var state$6=_dw_[2], enclosed$0=_dx_[1], _dy_=enclosed_set$0(state$6,596216810,enclosed$0); break; default: var state$7=_dw_[2], enclosed$1=_dx_[1], _dy_=enclosed_set$0(state$7,-188280562,enclosed$1)}} else var _dy_=append(0,state$0,maybe_empty); var _dA_=_dy_; break}} else var _dz_=[0,rep$0(one(0,slashes$0,0)),0], _dA_= append (0, state$9, opt(seq$1([0,one(0,slashes$0,explicit_period$0),_dz_]))); else var _dA_= append (0, state$9, rep$0(one(explicit_slash,slashes$0,explicit_period$0))); var state$10=_dA_; break; default:var state$10=many_many(state$9)} else switch(p[0]) {case 0:var c$0=p[1],state$10=exactly(state$9,c$0);break; case 1: var enclosed$2=p[1], state$10= append (0, state$9, enclosed_set (explicit_slash$0, slashes$1, explicit_period$1, 596216810, enclosed$2)); break; default: var enclosed$3=p[1], state$10= append (0, state$9, enclosed_set (explicit_slash$0, slashes$1, explicit_period$1, -188280562, enclosed$3))} var state$8=state$10; continue} var re=seq$1(caml_call1(Stdlib_List[9],state$8[1])); return anchored?whole_string(re):re}} var switch$0=0; if(double_asterisk && read_ahead(cst$6) && ! eos(0)) var _du_=2; else switch$0 = 1; if(switch$0) if(read(42)) {var switch$1=0; if(double_asterisk && read(42))var _du_=2;else switch$1 = 1; if(switch$1)var _du_=1} else if(read(63)) var _du_=0; else if(read(91)) {var switch$2=0; if(read(94) || read(33)) switch$2 = 1; else var _du_=[1,enclosed(0)]; if(switch$2)var _du_=[2,enclosed(0)]} else var _du_=[0,char$0(0)]; var pieces$0=[0,_du_,pieces],pieces=pieces$0; continue}} if(expand_braces) {var l=caml_ml_string_length(s), expl= function(inner,s$0,i,acc,beg$0) {var s$1=s$0,i$0=i,acc$0=acc,beg$1=beg$0; for(;;) {if(l <= i$0) {if(inner)throw Parse_error$0; return [0, mul (beg$1, [0,caml_call3(Stdlib_String[15],s,s$1,i$0 - s$1 | 0),0]), i$0]} var match=caml_string_get(s,i$0); if(44 === match) {if(inner) {var _ds_= mul (beg$1, [0,caml_call3(Stdlib_String[15],s,s$1,i$0 - s$1 | 0),0]), acc$1=caml_call2(Stdlib[37],_ds_,acc$0), i$1=i$0 + 1 | 0, s$2=i$0 + 1 | 0, s$1=s$2, i$0=i$1, acc$0=acc$1, beg$1=beg; continue}} else if(123 <= match) {if(! (126 <= match)) switch(match - 123 | 0) {case 0: var match$0=expl(1,i$0 + 1 | 0,i$0 + 1 | 0,0,_cE_), i$3=match$0[2], t=match$0[1], beg$2= mul (beg$1, mul ([0,caml_call3(Stdlib_String[15],s,s$1,i$0 - s$1 | 0),0],t)), s$1=i$3, i$0=i$3, beg$1=beg$2; continue; case 1:break; default: if(inner) {var _dt_= mul (beg$1, [0,caml_call3(Stdlib_String[15],s,s$1,i$0 - s$1 | 0),0]); return [0,caml_call2(Stdlib[37],_dt_,acc$0),i$0 + 1 | 0]}}} else if(92 === match){var i$4=i$0 + 2 | 0,i$0=i$4;continue} var i$2=i$0 + 1 | 0,i$0=i$2; continue}}, _dl_=expl(0,0,0,0,_cF_)[1], _dm_=caml_call1(Stdlib_List[9],_dl_); return alt$0(caml_call2(Stdlib_List[19],to_re,_dm_))} return to_re(s)} function glob$0(anchored,period,s) {return glob(anchored,0,0,[0,period],0,0,s)} function globx(anchored,s){return glob(anchored,0,0,0,_cI_,0,s)} function globx$0(anchored,period,s) {return glob(anchored,0,0,[0,period],_cJ_,0,s)} var Re_Glob=[0,Parse_error$0,glob,glob$0,globx,globx$0]; caml_register_global(163,Re_Glob,"Re__Glob"); var Parse_error$1=[248,cst_Re_Perl_Parse_error,caml_fresh_oo_id(0)], Not_supported$0=[248,cst_Re_Perl_Not_supported,caml_fresh_oo_id(0)]; function posix_class_of_string(class$0) {var switch$0=runtime.caml_string_compare(class$0,cst_lower); if(0 <= switch$0) {if(! (0 < switch$0))return lower; if(! caml_string_notequal(class$0,cst_print))return print; if(! caml_string_notequal(class$0,cst_punct))return punct; if(! caml_string_notequal(class$0,cst_space))return space; if(! caml_string_notequal(class$0,cst_upper))return upper; if(! caml_string_notequal(class$0,cst_word))return wordc; if(! caml_string_notequal(class$0,cst_xdigit))return xdigit} else {if(! caml_string_notequal(class$0,cst_alnum))return alnum; if(! caml_string_notequal(class$0,cst_alpha))return alpha; if(! caml_string_notequal(class$0,cst_ascii))return ascii; if(! caml_string_notequal(class$0,cst_blank))return blank; if(! caml_string_notequal(class$0,cst_cntrl))return cntrl; if(! caml_string_notequal(class$0,cst_digit))return digit; if(! caml_string_notequal(class$0,cst_graph))return graph} var _dk_=caml_call2(Stdlib[28],cst_Invalid_pcre_class,class$0); return caml_call1(Stdlib[1],_dk_)} function re$0(opt$0,s) {if(opt$0)var sth=opt$0[1],opts=sth;else var opts=0; var ungreedy=caml_call2(Stdlib_List[37],-243745063,opts), dotall=caml_call2(Stdlib_List[37],-424303016,opts), dollar_endonly=caml_call2(Stdlib_List[37],-712595228,opts), multiline=caml_call2(Stdlib_List[37],1071952589,opts), i=[0,0], l=caml_ml_string_length(s); function eos$0(param){return i[1] === l?1:0} function test(c) {var _di_=1 - eos$0(0), _dj_=_di_?caml_string_get(s,i[1]) === c?1:0:_di_; return _dj_} function accept(c){var r=test(c);if(r)i[1]++;return r} function accept_s(s$0) {var len=caml_ml_string_length(s$0); try {var _dc_=len - 1 | 0,_db_=0; if(! (_dc_ < 0)) {var j=_db_; for(;;) {try {var _de_=caml_string_get(s,i[1] + j | 0); if(caml_string_get(s$0,j) !== _de_)throw Stdlib[3]} catch(_dh_){throw Stdlib[3]} var _df_=j + 1 | 0; if(_dc_ !== j){var j=_df_;continue} break}} i[1] = i[1] + len | 0; var _dd_=1; return _dd_} catch(_dg_) {_dg_ = caml_wrap_exception(_dg_); if(_dg_ === Stdlib[3])return 0; throw _dg_}} function get(param){var r=caml_string_get(s,i[1]);i[1]++;return r} function unget(param){i[1] += -1;return 0} function greedy_mod(r) {var gr=accept(63),gr$0=ungreedy?1 - gr:gr; return gr$0?non_greedy(r):greedy(r)} function integer(param) {if(eos$0(0))return 0; var d=get(0); if(9 < d - 48 >>> 0){unget(0);return 0} var i=d - 48 | 0,i$0=i; for(;;) {if(eos$0(0))return [0,i$0]; var d$0=get(0); if(9 < d$0 - 48 >>> 0){unget(0);return [0,i$0]} var i$1=(10 * i$0 | 0) + (d$0 - 48 | 0) | 0; if(i$1 < i$0)throw Parse_error$1; var i$0=i$1; continue}} function char$1(param) {if(eos$0(0))throw Parse_error$1; var c=get(0); if(91 === c) {if(accept(61))throw Not_supported$0; if(accept(58)) {var compl$0=accept(94); try {var cls=caml_call2(Stdlib_List[38],accept_s,posix_class_strings)} catch(_da_) {_da_ = caml_wrap_exception(_da_); if(_da_ === Stdlib[8])throw Parse_error$1; throw _da_} if(1 - accept_s(cst$7))throw Parse_error$1; var posix_class=posix_class_of_string(cls), re=compl$0?compl([0,posix_class,0]):posix_class; return [0,4150146,re]} if(accept(46)) {if(eos$0(0))throw Parse_error$1; var c$0=get(0); if(1 - accept(46))throw Not_supported$0; if(1 - accept(93))throw Parse_error$1; return [0,748194550,c$0]} return [0,748194550,c]} if(92 === c) {if(eos$0(0))throw Parse_error$1; var c$1=get(0); if(58 <= c$1) {if(! (123 <= c$1)) switch(c$1 - 58 | 0) {case 10:return [0,4150146,compl([0,digit,0])]; case 25:return [0,4150146,compl([0,space,0])]; case 29:return [0,4150146,compl([0,alnum,[0,char$0(95),0]])]; case 40:return _cK_; case 42:return [0,4150146,digit]; case 52:return _cL_; case 56:return _cM_; case 57:return [0,4150146,space]; case 58:return _cN_; case 61:return [0,4150146,alt$0([0,alnum,[0,char$0(95),0]])]; case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 33: case 34: case 35: case 36: case 37: case 38:break; default:throw Parse_error$1}} else if(48 <= c$1)throw Not_supported$0; return [0,748194550,c$1]} return [0,748194550,c]} function bracket(s) {var s$0=s; for(;;) {if(0 !== s$0 && accept(93))return s$0; var match=char$1(0); if(748194550 <= match[1]) {var c=match[2]; if(accept(45)) {if(accept(93)) {var _c__=[0,char$0(45),s$0];return [0,char$0(c),_c__]} var match$0=char$1(0); if(748194550 <= match$0[1]) {var c$0=match$0[2],s$1=[0,rg(c,c$0),s$0],s$0=s$1;continue} var st=match$0[2], _c$_=[0,char$0(45),[0,st,s$0]], s$2=[0,char$0(c),_c$_], s$0=s$2; continue} var s$3=[0,char$0(c),s$0],s$0=s$3; continue} var st$0=match[2],s$4=[0,st$0,s$0],s$0=s$4; continue}} function atom(param) {if(accept(46))return dotall?any:notnl; if(accept(40)) {if(accept(63)) {if(accept(58)) {var r=regexp(0);if(1 - accept(41))throw Parse_error$1;return r} if(accept(35)) for(;;) {if(eos$0(0))throw Parse_error$1; if(accept(41))return epsilon; i[1]++; continue} throw Parse_error$1} var r$0=regexp(0); if(1 - accept(41))throw Parse_error$1; return [6,r$0]} if(accept(94))return multiline?bol:bos; if(accept(36))return multiline?eol:dollar_endonly?leol:eos; if(accept(91))return accept(94)?compl(bracket(0)):alt$0(bracket(0)); if(accept(92)) {if(eos$0(0))throw Parse_error$1; var c=get(0),switcher=c - 48 | 0; if(! (74 < switcher >>> 0)) switch(switcher) {case 17:return bos; case 18:return not_boundary; case 20:return compl([0,digit,0]); case 23:return start$0; case 35:return compl([0,space,0]); case 39:return compl([0,alnum,[0,char$0(95),0]]); case 42:return leol; case 50:return alt$0([0,bow,[0,eow,0]]); case 52:return digit; case 67:return space; case 71:return alt$0([0,alnum,[0,char$0(95),0]]); case 74:return eos; case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9:throw Not_supported$0; case 10: case 11: case 12: case 13: case 14: case 15: case 16: case 43: case 44: case 45: case 46: case 47: case 48:break; default:throw Parse_error$1} return char$0(c)} if(eos$0(0))throw Parse_error$1; var c$0=get(0),switch$0=0; if(64 <= c$0) {if(92 !== c$0 && 123 !== c$0)switch$0 = 1} else if(44 <= c$0) {if(! (63 <= c$0))switch$0 = 1} else if(! (42 <= c$0))switch$0 = 1; if(switch$0)return char$0(c$0); throw Parse_error$1} function branch(param) {var left=0; for(;;) {if(! eos$0(0) && ! test(124) && ! test(41)) {var r=atom(0); if(accept(42)) var _c9_=greedy_mod(rep$0(r)); else if(accept(43)) var _c9_=greedy_mod(rep1(r)); else if(accept(63)) var _c9_=greedy_mod(opt(r)); else if(accept(123)) {var match=integer(0); if(match) {var i=match[1],j=accept(44)?integer(0):[0,i]; if(1 - accept(125))throw Parse_error$1; if(j){var j$0=j[1];if(j$0 < i)throw Parse_error$1} var _c9_=greedy_mod(repn(r,i,j))} else {unget(0);var _c9_=r}} else var _c9_=r; var left$0=[0,_c9_,left],left=left$0; continue} return seq$1(caml_call1(Stdlib_List[9],left))}} function regexp(param) {var left=branch(0),left$0=left; for(;;) {if(accept(124)) {var left$1=alt$0([0,left$0,[0,branch(0),0]]),left$0=left$1; continue} return left$0}} var r=regexp(0); if(1 - eos$0(0))throw Parse_error$1; var r$0= caml_call2(Stdlib_List[37],616470068,opts) ?seq$1([0,start$0,[0,r,0]]) :r, r$1=caml_call2(Stdlib_List[37],604571177,opts)?[10,r$0]:r$0; return r$1} function compile_pat$0(opt,s) {if(opt)var sth=opt[1],opts=sth;else var opts=0; return compile(re$0([0,opts],s))} var Re_Perl=[0,Parse_error$1,Not_supported$0,re$0,compile,compile_pat$0]; caml_register_global(164,Re_Perl,"Re__Perl"); function re$1(opt,pat) {if(opt)var sth=opt[1],flags=sth;else var flags=0; function _c8_(param) {return 601676297 === param ?604571177 :613575188 <= param?616470068:1071952589} var opts=caml_call2(Stdlib_List[19],_c8_,flags); return re$0([0,opts],pat)} function regexp$0(flags,pat){return compile(re$1(flags,pat))} function extract(rex,s) {var _c7_=exec(0,0,rex,s);return caml_call1(Group[6],_c7_)} function exec$0(rex,pos,s){return exec(pos,0,rex,s)} function get_substring(s,i){return caml_call2(Group[1],s,i)} function get_substring_ofs(s,i){return caml_call2(Group[3],s,i)} function pmatch(rex,s){return execp(0,0,rex,s)} function substitute(rex,subst,str) {var b=caml_call1(Stdlib_Buffer[1],1024),pos=0; for(;;) {if(caml_ml_string_length(str) <= pos) return caml_call1(Stdlib_Buffer[2],b); if(execp([0,pos],0,rex,str)) {var ss=exec([0,pos],0,rex,str), match=caml_call2(Group[3],ss,0), fin=match[2], start=match[1], pat=caml_call2(Group[1],ss,0); caml_call4(Stdlib_Buffer[18],b,str,pos,start - pos | 0); var _c6_=caml_call1(subst,pat); caml_call2(Stdlib_Buffer[16],b,_c6_); var pos=fin; continue} caml_call4 (Stdlib_Buffer[18],b,str,pos,caml_ml_string_length(str) - pos | 0); var pos$0=caml_ml_string_length(str),pos=pos$0; continue}} function split$2(rex,str) {var accu=0,pos=0; for(;;) {if(caml_ml_string_length(str) <= pos) return caml_call1(Stdlib_List[9],accu); if(execp([0,pos],0,rex,str)) {var ss=exec([0,pos],0,rex,str), match=caml_call2(Group[3],ss,0), fin=match[2], start=match[1], s=caml_call3(Stdlib_String[15],str,pos,start - pos | 0), accu$0=[0,s,accu], accu=accu$0, pos=fin; continue} var s$0= caml_call3 (Stdlib_String[15],str,pos,caml_ml_string_length(str) - pos | 0), pos$0=caml_ml_string_length(str), accu$1=[0,s$0,accu], accu=accu$1, pos=pos$0; continue}} function quote$1(s) {var len=caml_ml_string_length(s), s$0=caml_create_bytes(len << 1), pos=[0,0], _c2_=len - 1 | 0, _c1_=0; if(! (_c2_ < 0)) {var i=_c1_; for(;;) {var c=runtime.caml_string_unsafe_get(s,i),switch$0=0; if(91 <= c) {var _c4_=c - 93 | 0; if(29 < _c4_ >>> 0) {if(! (32 <= _c4_))switch$0 = 1} else if(1 === _c4_)switch$0 = 1} else if(47 <= c) {if(63 === c)switch$0 = 1} else if(36 <= c) switch(c - 36 | 0) {case 1:case 2:case 3:case 8:case 9:break;default:switch$0 = 1} if(switch$0) {caml_bytes_unsafe_set(s$0,pos[1],92); pos[1]++; caml_bytes_unsafe_set(s$0,pos[1],c); pos[1]++} else {caml_bytes_unsafe_set(s$0,pos[1],c);pos[1]++} var _c5_=i + 1 | 0; if(_c2_ !== i){var i=_c5_;continue} break}} var _c3_=pos[1],r=caml_create_bytes(_c3_); runtime.caml_blit_bytes(s$0,0,r,0,_c3_); return caml_call1(Stdlib_Bytes[48],r)} function full_split$0(opt,rex,s) {if(opt)var sth=opt[1],max=sth;else var max=0; if(0 === caml_ml_string_length(s))return 0; if(1 === max)return [0,[0,s],0]; var results=split_full(0,0,rex,s); function _cV_(param) {if(936573133 <= param[1]){var s=param[2];return [0,[0,s],0]} var d=param[2], matches=caml_call1(Group[7],d), delim=caml_call2(Group[1],d,0), l=[0,0], _cX_=matches.length - 1 - 1 | 0, _cW_=1; if(! (_cX_ < 1)) {var i=_cW_; for(;;) {var _cY_=l[1], _cZ_= caml_equal(caml_check_bound(matches,i)[1 + i],_cO_) ?0 :[2,i,caml_call2(Group[1],d,i)]; l[1] = [0,_cZ_,_cY_]; var _c0_=i + 1 | 0; if(_cX_ !== i){var i=_c0_;continue} break}} return [0,[1,delim],caml_call1(Stdlib_List[9],l[1])]} var matches=caml_call2(Stdlib_List[19],_cV_,results); return caml_call1(Stdlib_List[13],matches)} var Re_Pcre= [0, re$1, regexp$0, extract, exec$0, get_substring, get_substring_ofs, pmatch, substitute, full_split$0, split$2, quote$1]; caml_register_global(165,Re_Pcre,"Re__Pcre"); var Parse_error$2=[248,cst_Re_Posix_Parse_error,caml_fresh_oo_id(0)], Not_supported$1=[248,cst_Re_Posix_Not_supported,caml_fresh_oo_id(0)]; function re$2(opt$0,s) {if(opt$0)var sth=opt$0[1],opts=sth;else var opts=0; var newline=caml_call2(Stdlib_List[37],-638074828,opts), i=[0,0], l=caml_ml_string_length(s); function eos$0(param){return i[1] === l?1:0} function test(c) {var _cT_=1 - eos$0(0), _cU_=_cT_?caml_string_get(s,i[1]) === c?1:0:_cT_; return _cU_} function accept(c){var r=test(c);if(r)i[1]++;return r} function get(param){var r=caml_string_get(s,i[1]);i[1]++;return r} function unget(param){i[1] += -1;return 0} function char$1(param) {if(eos$0(0))throw Parse_error$2; var c=get(0); if(91 === c) {if(accept(61))throw Not_supported$1; if(accept(58))throw Not_supported$1; if(accept(46)) {if(eos$0(0))throw Parse_error$2; var c$0=get(0); if(1 - accept(46))throw Not_supported$1; if(1 - accept(93))throw Parse_error$2; return c$0} return c} return c} function bracket(s) {var s$0=s; for(;;) {if(0 !== s$0 && accept(93))return s$0; var c=char$1(0); if(accept(45)) {if(accept(93)) {var _cS_=[0,char$0(45),s$0];return [0,char$0(c),_cS_]} var c$0=char$1(0),s$1=[0,rg(c,c$0),s$0],s$0=s$1; continue} var s$2=[0,char$0(c),s$0],s$0=s$2; continue}} function integer(param) {if(eos$0(0))return 0; var d=get(0); if(9 < d - 48 >>> 0){unget(0);return 0} var i=d - 48 | 0,i$0=i; for(;;) {if(eos$0(0))return [0,i$0]; var d$0=get(0); if(9 < d$0 - 48 >>> 0){unget(0);return [0,i$0]} var i$1=(10 * i$0 | 0) + (d$0 - 48 | 0) | 0; if(i$1 < i$0)throw Parse_error$2; var i$0=i$1; continue}} function branch(param) {var left=0; for(;;) {if(! eos$0(0) && ! test(124) && ! test(41)) {if(accept(46)) var r=newline?notnl:any; else if(accept(40)) {var r$0=regexp(0); if(1 - accept(41))throw Parse_error$2; var r=[6,r$0]} else if(accept(94)) var r=newline?bol:bos; else if(accept(36)) var r=newline?eol:eos; else if(accept(91)) if(accept(94)) var _cQ_=char$0(10),r=diff$0(compl(bracket(0)),_cQ_); else var r=alt$0(bracket(0)); else if(accept(92)) {if(eos$0(0))throw Parse_error$2; var c=get(0),switch$0=0; if(91 <= c) {var _cR_=c - 93 | 0; if(29 < _cR_ >>> 0) {if(! (32 <= _cR_))switch$0 = 1} else if(1 === _cR_)switch$0 = 1} else if(47 <= c) {if(63 === c)switch$0 = 1} else if(36 <= c) switch(c - 36 | 0) {case 1: case 2: case 3: case 8: case 9:break; default:switch$0 = 1} if(! switch$0)throw Parse_error$2; var r=char$0(c)} else {if(eos$0(0))throw Parse_error$2; var c$0=get(0),switch$1=0; if(64 <= c$0) {if(92 !== c$0 && 123 !== c$0)switch$1 = 1} else if(44 <= c$0) {if(! (63 <= c$0))switch$1 = 1} else if(! (42 <= c$0))switch$1 = 1; if(! switch$1)throw Parse_error$2; var r=char$0(c$0)} if(accept(42)) var _cP_=rep$0([8,r]); else if(accept(43)) var _cP_=rep1([8,r]); else if(accept(63)) var _cP_=opt(r); else if(accept(123)) {var match=integer(0); if(match) {var i=match[1],j=accept(44)?integer(0):[0,i]; if(1 - accept(125))throw Parse_error$2; if(j){var j$0=j[1];if(j$0 < i)throw Parse_error$2} var _cP_=repn([8,r],i,j)} else {unget(0);var _cP_=r}} else var _cP_=r; var left$0=[0,_cP_,left],left=left$0; continue} return seq$1(caml_call1(Stdlib_List[9],left))}} function regexp(param) {var left=branch(0),left$0=left; for(;;) {if(accept(124)) {var left$1=alt$0([0,left$0,[0,branch(0),0]]),left$0=left$1; continue} return left$0}} var r=regexp(0); if(1 - eos$0(0))throw Parse_error$2; var r$0=caml_call2(Stdlib_List[37],886285209,opts)?[10,r]:r, r$1=caml_call2(Stdlib_List[37],853495711,opts)?[7,r$0]:r$0; return r$1} function compile$0(re){return compile(longest(re))} function compile_pat$1(opt,s) {if(opt)var sth=opt[1],opts=sth;else var opts=0; return compile$0(re$2([0,opts],s))} var Re_Posix= [0,Parse_error$2,Not_supported$1,re$2,compile$0,compile_pat$1]; caml_register_global(166,Re_Posix,"Re__Posix"); var Re$0= [0, Group, compile, exec, exec_opt, execp, exec_partial, Mark, all$0, all_gen, all_seq, matches, matches_gen, matches_seq, split$0, split_gen, split_seq, split_full, split_full_gen, split_full_seq, Seq, replace, replace_string, str, char$0, alt$0, seq$1, empty$2, epsilon, rep$0, rep1, repn, opt, bol, eol, bow, eow, bos, eos, leol, start$0, stop$0, word, not_boundary, whole_string, longest, shortest, first$0, greedy, non_greedy, group, no_group, nest, mark$0, set, rg, inter$0, diff$0, compl, any, notnl, alnum, wordc, alpha, ascii, blank, cntrl, digit, graph, lower, print, punct, space, upper, xdigit, case$0, no_case, pp$5, print_re, print_re, View, witness, get$0, get_ofs, get_all, get_all_ofs, test$0, marked, mark_set]; caml_register_global(167,Re$0,"Re"); return} (globalThis)); //# 1 "../.js/tyxml.functor/tyxml_f.cma.js" (function(globalThis) {"use strict"; var runtime=globalThis.jsoo_runtime, caml_float_of_string=runtime.caml_float_of_string, caml_list_of_js_array=runtime.caml_list_of_js_array, caml_ml_string_length=runtime.caml_ml_string_length, caml_register_global=runtime.caml_register_global, caml_string_equal=runtime.caml_string_equal, caml_string_notequal=runtime.caml_string_notequal, caml_string_of_jsbytes=runtime.caml_string_of_jsbytes; function caml_call1(f,a0) {return f.length == 1?f(a0):runtime.caml_call_gen(f,[a0])} function caml_call2(f,a0,a1) {return f.length == 2?f(a0,a1):runtime.caml_call_gen(f,[a0,a1])} function caml_call3(f,a0,a1,a2) {return f.length == 3?f(a0,a1,a2):runtime.caml_call_gen(f,[a0,a1,a2])} function caml_call4(f,a0,a1,a2,a3) {return f.length == 4 ?f(a0,a1,a2,a3) :runtime.caml_call_gen(f,[a0,a1,a2,a3])} function caml_call5(f,a0,a1,a2,a3,a4) {return f.length == 5 ?f(a0,a1,a2,a3,a4) :runtime.caml_call_gen(f,[a0,a1,a2,a3,a4])} function caml_call6(f,a0,a1,a2,a3,a4,a5) {return f.length == 6 ?f(a0,a1,a2,a3,a4,a5) :runtime.caml_call_gen(f,[a0,a1,a2,a3,a4,a5])} function caml_call7(f,a0,a1,a2,a3,a4,a5,a6) {return f.length == 7 ?f(a0,a1,a2,a3,a4,a5,a6) :runtime.caml_call_gen(f,[a0,a1,a2,a3,a4,a5,a6])} function caml_call11(f,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10) {return f.length == 11 ?f(a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10) :runtime.caml_call_gen(f,[a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10])} var global_data=runtime.caml_get_global_data(), cst_Xml_stream_Malformed_strea= caml_string_of_jsbytes("Xml_stream.Malformed_stream"), cst_xmlns$1=caml_string_of_jsbytes("xmlns"), cst$30=caml_string_of_jsbytes(""), cst_xmlns$2=caml_string_of_jsbytes("xmlns"), cst$26=caml_string_of_jsbytes(""), cst$27=caml_string_of_jsbytes(" -->\n"), cst$28=caml_string_of_jsbytes("<!-- "), cst$29=caml_string_of_jsbytes("\n"), cst$12=caml_string_of_jsbytes(" "), cst$13=caml_string_of_jsbytes(" />"), cst$14=caml_string_of_jsbytes("<"), cst$15=caml_string_of_jsbytes(">"), cst$16=caml_string_of_jsbytes("><\/"), cst$17=caml_string_of_jsbytes("<"), cst$18=caml_string_of_jsbytes(">"), cst$19=caml_string_of_jsbytes("<\/"), cst$20=caml_string_of_jsbytes(">"), cst$21=caml_string_of_jsbytes("<"), cst$22=caml_string_of_jsbytes("-->"), cst$23=caml_string_of_jsbytes("<!--"), cst$24=caml_string_of_jsbytes(";"), cst$25=caml_string_of_jsbytes("&"), cst$10=caml_string_of_jsbytes(", "), cst$11=caml_string_of_jsbytes(" "), cst_xmlns=caml_string_of_jsbytes("xmlns"), cst_xmlns$0=caml_string_of_jsbytes("xmlns"), partial=[12,62,0], cst$9=caml_string_of_jsbytes(" "), cst_lt$0=caml_string_of_jsbytes("<"), cst_gt$4=caml_string_of_jsbytes(">"), cst_amp$0=caml_string_of_jsbytes("&"), cst_quot$0=caml_string_of_jsbytes("""), cst_Infinity=caml_string_of_jsbytes("Infinity"), cst_Infinity$0=caml_string_of_jsbytes("-Infinity"), cst_NaN=caml_string_of_jsbytes("NaN"), cst$5=caml_string_of_jsbytes("--!>"), cst$6=caml_string_of_jsbytes("-->"), cst$7=caml_string_of_jsbytes("->"), cst$8=caml_string_of_jsbytes(">"), cst_gt$0=caml_string_of_jsbytes(">"), cst_gt$1=caml_string_of_jsbytes("->"), cst_gt$2=caml_string_of_jsbytes("-->"), cst_gt$3=caml_string_of_jsbytes("--!>"), cst_1_0=caml_string_of_jsbytes("1.0"), cst_UTF_8=caml_string_of_jsbytes("UTF-8"), cst_64=caml_string_of_jsbytes("@"), cst_lt=caml_string_of_jsbytes("<"), cst_gt=caml_string_of_jsbytes(">"), cst_amp=caml_string_of_jsbytes("&"), cst_quot=caml_string_of_jsbytes("""), cst=caml_string_of_jsbytes("&#"), cst$0=caml_string_of_jsbytes(";"), cst$1=caml_string_of_jsbytes("--!>"), cst$2=caml_string_of_jsbytes("-->"), cst$3=caml_string_of_jsbytes("->"), cst$4=caml_string_of_jsbytes(">"), cst$38=caml_string_of_jsbytes(" "), cst$37=caml_string_of_jsbytes(""), partial$0=[12,32,[8,[0,0,3],0,0,[12,41,0]]], partial$1=[0,0,3], cst_none$1=caml_string_of_jsbytes("none"), cst_auto$2=caml_string_of_jsbytes("auto"), cst$36=caml_string_of_jsbytes("%"), cst_strokePaint=caml_string_of_jsbytes("strokePaint"), cst_sourceAlpha=caml_string_of_jsbytes("sourceAlpha"), cst_fillPaint=caml_string_of_jsbytes("fillPaint"), cst_sourceGraphic=caml_string_of_jsbytes("sourceGraphic"), cst_backgroundImage=caml_string_of_jsbytes("backgroundImage"), cst_backgroundAlpha=caml_string_of_jsbytes("backgroundAlpha"), cst_nochange=caml_string_of_jsbytes("nochange"), cst_alphabetic$1=caml_string_of_jsbytes("alphabetic"), cst_auto$1=caml_string_of_jsbytes("auto"), cst_hanging$1=caml_string_of_jsbytes("hanging"), cst_mathematical$1=caml_string_of_jsbytes("mathematical"), cst_inherit$1=caml_string_of_jsbytes("inherit"), cst_middle$1=caml_string_of_jsbytes("middle"), cst_central$0=caml_string_of_jsbytes("central"), cst_usescript=caml_string_of_jsbytes("usescript"), cst_ideographic$1=caml_string_of_jsbytes("ideographic"), cst_textbeforeedge=caml_string_of_jsbytes("textbeforeedge"), cst_resetsize=caml_string_of_jsbytes("resetsize"), cst_textafteredge=caml_string_of_jsbytes("textafteredge"), cst_stitch=caml_string_of_jsbytes("stitch"), cst_onRequest=caml_string_of_jsbytes("onRequest"), cst_repeat=caml_string_of_jsbytes("repeat"), cst_wrap=caml_string_of_jsbytes("wrap"), cst_remove=caml_string_of_jsbytes("remove"), cst_reflect=caml_string_of_jsbytes("reflect"), cst_noStitch=caml_string_of_jsbytes("noStitch"), cst$35=caml_string_of_jsbytes(""), cst_over=caml_string_of_jsbytes("over"), cst_none$0=caml_string_of_jsbytes("none"), cst_medial=caml_string_of_jsbytes("medial"), cst_never=caml_string_of_jsbytes("never"), cst_butt=caml_string_of_jsbytes("butt"), cst_auto$0=caml_string_of_jsbytes("auto"), cst_atop=caml_string_of_jsbytes("atop"), cst_arithmetic=caml_string_of_jsbytes("arithmetic"), cst_underline=caml_string_of_jsbytes("underline"), cst_gamma=caml_string_of_jsbytes("gamma"), cst_linear=caml_string_of_jsbytes("linear"), cst_overline=caml_string_of_jsbytes("overline"), cst_onLoad=caml_string_of_jsbytes("onLoad"), cst_turbulence=caml_string_of_jsbytes("turbulence"), cst_table=caml_string_of_jsbytes("table"), cst_geometricPrecision=caml_string_of_jsbytes("geometricPrecision"), cst_optimizeSpeed=caml_string_of_jsbytes("optimizeSpeed"), cst_miter=caml_string_of_jsbytes("miter"), cst_initial=caml_string_of_jsbytes("initial"), cst_start=caml_string_of_jsbytes("start"), cst_whenNotActive=caml_string_of_jsbytes("whenNotActive"), cst_identity=caml_string_of_jsbytes("identity"), cst_skewY=caml_string_of_jsbytes("skewY"), cst_skewX=caml_string_of_jsbytes("skewX"), cst_square=caml_string_of_jsbytes("square"), cst_scale$0=caml_string_of_jsbytes("scale"), cst_exact=caml_string_of_jsbytes("exact"), cst_perceptual=caml_string_of_jsbytes("perceptual"), cst_discrete=caml_string_of_jsbytes("discrete"), cst_erode=caml_string_of_jsbytes("erode"), cst_middle$0=caml_string_of_jsbytes("middle"), cst_round=caml_string_of_jsbytes("round"), cst_xor=caml_string_of_jsbytes("xor"), cst_XML=caml_string_of_jsbytes("XML"), cst_sum=caml_string_of_jsbytes("sum"), cst_pad=caml_string_of_jsbytes("pad"), cst_out=caml_string_of_jsbytes("out"), cst_new=caml_string_of_jsbytes("new"), cst_end=caml_string_of_jsbytes("end"), cst_CSS=caml_string_of_jsbytes("CSS"), cst_in$1=caml_string_of_jsbytes("in"), cst_v=caml_string_of_jsbytes("v"), cst_r$0=caml_string_of_jsbytes("r"), cst_h=caml_string_of_jsbytes("h"), cst_g$0=caml_string_of_jsbytes("g"), cst_b=caml_string_of_jsbytes("b"), cst_a$0=caml_string_of_jsbytes("a"), cst_rotate$0=caml_string_of_jsbytes("rotate"), cst_disable=caml_string_of_jsbytes("disable"), cst_screen=caml_string_of_jsbytes("screen"), cst_absolute_colorimetric=caml_string_of_jsbytes("absolute_colorimetric"), cst_inherit$0=caml_string_of_jsbytes("inherit"), cst_always=caml_string_of_jsbytes("always"), cst_spacingAndGlyphs=caml_string_of_jsbytes("spacingAndGlyphs"), cst_replace=caml_string_of_jsbytes("replace"), cst_multiply=caml_string_of_jsbytes("multiply"), cst_spline=caml_string_of_jsbytes("spline"), cst_matrix=caml_string_of_jsbytes("matrix"), cst_saturation=caml_string_of_jsbytes("saturation"), cst_dilate=caml_string_of_jsbytes("dilate"), cst_translate=caml_string_of_jsbytes("translate"), cst_default=caml_string_of_jsbytes("default"), cst_lighten=caml_string_of_jsbytes("lighten"), cst_normal=caml_string_of_jsbytes("normal"), cst_freeze=caml_string_of_jsbytes("freeze"), cst_magnify=caml_string_of_jsbytes("magnify"), cst_hueRotate=caml_string_of_jsbytes("hueRotate"), cst_spacing$0=caml_string_of_jsbytes("spacing"), cst_fractalNoise=caml_string_of_jsbytes("fractalNoise"), cst_saturate=caml_string_of_jsbytes("saturate"), cst_userSpaceOnUse=caml_string_of_jsbytes("userSpaceOnUse"), cst_objectBoundingBox=caml_string_of_jsbytes("objectBoundingBox"), cst_darken=caml_string_of_jsbytes("darken"), cst_paced=caml_string_of_jsbytes("paced"), cst_isolated=caml_string_of_jsbytes("isolated"), cst_optimizeLegibility=caml_string_of_jsbytes("optimizeLegibility"), cst_luminanceToAlpha=caml_string_of_jsbytes("luminanceToAlpha"), cst_line_through=caml_string_of_jsbytes("line-through"), cst_other=caml_string_of_jsbytes("other"), cst_terminal=caml_string_of_jsbytes("terminal"), cst_blink=caml_string_of_jsbytes("blink"), cst_stroke_width$0=caml_string_of_jsbytes("stroke-width"), cst_stretch=caml_string_of_jsbytes("stretch"), cst_bevel=caml_string_of_jsbytes("bevel"), cst_duplicate=caml_string_of_jsbytes("duplicate"), cst_preserve=caml_string_of_jsbytes("preserve"), cst_relative_colorimetric=caml_string_of_jsbytes("relative_colorimetric"), cst_after_edge=caml_string_of_jsbytes("after-edge"), cst_alphabetic$0=caml_string_of_jsbytes("alphabetic"), cst_auto=caml_string_of_jsbytes("auto"), cst_hanging$0=caml_string_of_jsbytes("hanging"), cst_mathematical$0=caml_string_of_jsbytes("mathematical"), cst_inherit=caml_string_of_jsbytes("inherit"), cst_middle=caml_string_of_jsbytes("middle"), cst_baseline=caml_string_of_jsbytes("baseline"), cst_central=caml_string_of_jsbytes("central"), cst_ideographic$0=caml_string_of_jsbytes("ideographic"), cst_text_before_edge=caml_string_of_jsbytes("text-before-edge"), cst_before_edge=caml_string_of_jsbytes("before-edge"), cst_text_after_edge=caml_string_of_jsbytes("text-after-edge"), cst_http_www_w3_org_1999_xlink= caml_string_of_jsbytes("http://www.w3.org/1999/xlink"), cst_xmlns_xlink=caml_string_of_jsbytes("xmlns:xlink"), cst_http_www_w3_org_2000_svg= caml_string_of_jsbytes("http://www.w3.org/2000/svg"), cst_xmlns$3=caml_string_of_jsbytes("xmlns"), cst_svg$0=caml_string_of_jsbytes("svg"), cst_stroke_dasharray=caml_string_of_jsbytes("stroke-dasharray"), cst_stroke_linejoin=caml_string_of_jsbytes("stroke-linejoin"), cst_stroke_linecap=caml_string_of_jsbytes("stroke-linecap"), cst_dominant_baseline=caml_string_of_jsbytes("dominant-baseline"), cst_alignment_baseline=caml_string_of_jsbytes("alignment-baseline"), cst_arabic_form=caml_string_of_jsbytes("arabic-form"), cst_orientation=caml_string_of_jsbytes("orientation"), cst_accumulate=caml_string_of_jsbytes("accumulate"), cst_additive=caml_string_of_jsbytes("additive"), cst_calcMode=caml_string_of_jsbytes("calcMode"), cst_fill$0=caml_string_of_jsbytes("fill"), cst_restart=caml_string_of_jsbytes("restart"), cst_attributeType=caml_string_of_jsbytes("attributeType"), cst_xlink_actuate=caml_string_of_jsbytes("xlink:actuate"), cst_xlink_show=caml_string_of_jsbytes("xlink:show"), cst_type$2=caml_string_of_jsbytes("type"), cst_stitchTiles=caml_string_of_jsbytes("stitchTiles"), cst_operator$0=caml_string_of_jsbytes("operator"), cst_yChannelSelector=caml_string_of_jsbytes("yChannelSelector"), cst_xChannelSelector=caml_string_of_jsbytes("xChannelSelector"), cst_targetY$0=caml_string_of_jsbytes("targetY"), cst_operator=caml_string_of_jsbytes("operator"), cst_type$1=caml_string_of_jsbytes("type"), cst_type$0=caml_string_of_jsbytes("type"), cst_mode=caml_string_of_jsbytes("mode"), cst_in2=caml_string_of_jsbytes("in2"), cst_in$0=caml_string_of_jsbytes("in"), cst_primitiveUnits=caml_string_of_jsbytes("primitiveUnits"), cst_maskContentUnits=caml_string_of_jsbytes("maskContentUnits"), cst_maskUnits=caml_string_of_jsbytes("maskUnits"), cst_clipPathUnits=caml_string_of_jsbytes("clipPathUnits"), cst_patternTransform=caml_string_of_jsbytes("patternTransform"), cst_patternContentUnits=caml_string_of_jsbytes("patternContentUnits"), cst_patternUnits=caml_string_of_jsbytes("patternUnits"), cst_offset=caml_string_of_jsbytes("offset"), cst_spreadMethod=caml_string_of_jsbytes("spreadMethod"), cst_gradientUnits=caml_string_of_jsbytes("gradientUnits"), cst_rendering_intent=caml_string_of_jsbytes("rendering-intent"), cst_orient=caml_string_of_jsbytes("orient"), cst_markerUnits=caml_string_of_jsbytes("markerUnits"), cst_spacing=caml_string_of_jsbytes("spacing"), cst_method=caml_string_of_jsbytes("method"), cst_text_rendering=caml_string_of_jsbytes("text-rendering"), cst_text_decoration=caml_string_of_jsbytes("text-decoration"), cst_text_anchor=caml_string_of_jsbytes("text-anchor"), cst_lengthAdjust=caml_string_of_jsbytes("lengthAdjust"), cst_xml_space=caml_string_of_jsbytes("xml:space"), cst_data=caml_string_of_jsbytes("data-"), cst_zoomAndSpan=caml_string_of_jsbytes("zoomAndSpan"), cst_foreignObject=caml_string_of_jsbytes("foreignObject"), cst_metadata=caml_string_of_jsbytes("metadata"), content_type=caml_string_of_jsbytes("image/svg+xml"), version=caml_string_of_jsbytes("SVG 1.1"), standard=caml_string_of_jsbytes("http://www.w3.org/TR/svg11/"), namespace=caml_string_of_jsbytes("http://www.w3.org/2000/svg"), cst_svg=caml_string_of_jsbytes("svg"), cst_version=caml_string_of_jsbytes("version"), cst_baseProfile=caml_string_of_jsbytes("baseProfile"), cst_x=caml_string_of_jsbytes("x"), cst_y=caml_string_of_jsbytes("y"), cst_width=caml_string_of_jsbytes("width"), cst_height=caml_string_of_jsbytes("height"), cst_preserveAspectRatio=caml_string_of_jsbytes("preserveAspectRatio"), cst_contentScriptType=caml_string_of_jsbytes("contentScriptType"), cst_contentStyleType=caml_string_of_jsbytes("contentStyleType"), cst_href=caml_string_of_jsbytes("href"), cst_xlink_href=caml_string_of_jsbytes("xlink:href"), cst_requiredFeatures=caml_string_of_jsbytes("requiredFeatures"), cst_requiredExtension=caml_string_of_jsbytes("requiredExtension"), cst_systemLanguage=caml_string_of_jsbytes("systemLanguage"), cst_externalRessourcesRequired= caml_string_of_jsbytes("externalRessourcesRequired"), cst_id=caml_string_of_jsbytes("id"), cst_xml_base=caml_string_of_jsbytes("xml:base"), cst_xml_lang=caml_string_of_jsbytes("xml:lang"), cst_type=caml_string_of_jsbytes("type"), cst_media=caml_string_of_jsbytes("media"), cst_xlink_title=caml_string_of_jsbytes("xlink:title"), cst_class=caml_string_of_jsbytes("class"), cst_style=caml_string_of_jsbytes("style"), cst_transform=caml_string_of_jsbytes("transform"), cst_viewBox=caml_string_of_jsbytes("viewBox"), cst_d=caml_string_of_jsbytes("d"), cst_pathLength=caml_string_of_jsbytes("pathLength"), cst_rx=caml_string_of_jsbytes("rx"), cst_ry=caml_string_of_jsbytes("ry"), cst_cx=caml_string_of_jsbytes("cx"), cst_cy=caml_string_of_jsbytes("cy"), cst_r=caml_string_of_jsbytes("r"), cst_x1=caml_string_of_jsbytes("x1"), cst_y1=caml_string_of_jsbytes("y1"), cst_x2=caml_string_of_jsbytes("x2"), cst_y2=caml_string_of_jsbytes("y2"), cst_points=caml_string_of_jsbytes("points"), cst_x$0=caml_string_of_jsbytes("x"), cst_y$0=caml_string_of_jsbytes("y"), cst_dx=caml_string_of_jsbytes("dx"), cst_dy=caml_string_of_jsbytes("dy"), cst_dx$0=caml_string_of_jsbytes("dx"), cst_dy$0=caml_string_of_jsbytes("dy"), cst_textLength=caml_string_of_jsbytes("textLength"), cst_rotate=caml_string_of_jsbytes("rotate"), cst_startOffset=caml_string_of_jsbytes("startOffset"), cst_glyphRef=caml_string_of_jsbytes("glyphRef"), cst_format=caml_string_of_jsbytes("format"), cst_refX=caml_string_of_jsbytes("refX"), cst_refY=caml_string_of_jsbytes("refY"), cst_markerWidth=caml_string_of_jsbytes("markerWidth"), cst_markerHeight=caml_string_of_jsbytes("markerHeight"), cst_local=caml_string_of_jsbytes("local"), cst_gradientTransform=caml_string_of_jsbytes("gradientTransform"), cst_fx=caml_string_of_jsbytes("fx"), cst_fy=caml_string_of_jsbytes("fy"), cst_filterResUnits=caml_string_of_jsbytes("filterResUnits"), cst_result=caml_string_of_jsbytes("result"), cst_azimuth=caml_string_of_jsbytes("azimuth"), cst_elevation=caml_string_of_jsbytes("elevation"), cst_pointsAtX=caml_string_of_jsbytes("pointsAtX"), cst_pointsAtY=caml_string_of_jsbytes("pointsAtY"), cst_pointsAtZ=caml_string_of_jsbytes("pointsAtZ"), cst_specularExponent=caml_string_of_jsbytes("specularExponent"), cst_specularConstant=caml_string_of_jsbytes("specularConstant"), cst_limitingConeAngle=caml_string_of_jsbytes("limitingConeAngle"), cst_values=caml_string_of_jsbytes("values"), cst_tableValues=caml_string_of_jsbytes("tableValues"), cst_intercept=caml_string_of_jsbytes("intercept"), cst_amplitude=caml_string_of_jsbytes("amplitude"), cst_exponent=caml_string_of_jsbytes("exponent"), cst_offset$0=caml_string_of_jsbytes("offset"), cst_k1=caml_string_of_jsbytes("k1"), cst_k2=caml_string_of_jsbytes("k2"), cst_k3=caml_string_of_jsbytes("k3"), cst_k4=caml_string_of_jsbytes("k4"), cst_order=caml_string_of_jsbytes("order"), cst_kernelMatrix=caml_string_of_jsbytes("kernelMatrix"), cst_divisor=caml_string_of_jsbytes("divisor"), cst_bias=caml_string_of_jsbytes("bias"), cst_kernelUnitLength=caml_string_of_jsbytes("kernelUnitLength"), cst_targetX=caml_string_of_jsbytes("targetX"), cst_targetY=caml_string_of_jsbytes("targetY"), cst_preserveAlpha=caml_string_of_jsbytes("preserveAlpha"), cst_surfaceScale=caml_string_of_jsbytes("surfaceScale"), cst_diffuseConstant=caml_string_of_jsbytes("diffuseConstant"), cst_scale=caml_string_of_jsbytes("scale"), cst_stdDeviation=caml_string_of_jsbytes("stdDeviation"), cst_radius=caml_string_of_jsbytes("radius"), cst_baseFrequency=caml_string_of_jsbytes("baseFrequency"), cst_numOctaves=caml_string_of_jsbytes("numOctaves"), cst_seed=caml_string_of_jsbytes("seed"), cst_xlink_target=caml_string_of_jsbytes("xlink:target"), cst_viewTarget=caml_string_of_jsbytes("viewTarget"), cst_attributeName=caml_string_of_jsbytes("attributeName"), cst_begin=caml_string_of_jsbytes("begin"), cst_dur=caml_string_of_jsbytes("dur"), cst_min=caml_string_of_jsbytes("min"), cst_max=caml_string_of_jsbytes("max"), cst_repeatCount=caml_string_of_jsbytes("repeatCount"), cst_repeatDur=caml_string_of_jsbytes("repeatDur"), cst_fill=caml_string_of_jsbytes("fill"), cst_values$0=caml_string_of_jsbytes("values"), cst_keyTimes=caml_string_of_jsbytes("keyTimes"), cst_keySplines=caml_string_of_jsbytes("keySplines"), cst_from=caml_string_of_jsbytes("from"), cst_to=caml_string_of_jsbytes("to"), cst_by=caml_string_of_jsbytes("by"), cst_keyPoints=caml_string_of_jsbytes("keyPoints"), cst_path=caml_string_of_jsbytes("path"), cst_type$3=caml_string_of_jsbytes("type"), cst_horiz_origin_x=caml_string_of_jsbytes("horiz-origin-x"), cst_horiz_origin_y=caml_string_of_jsbytes("horiz-origin-y"), cst_horiz_adv_x=caml_string_of_jsbytes("horiz-adv-x"), cst_vert_origin_x=caml_string_of_jsbytes("vert-origin-x"), cst_vert_origin_y=caml_string_of_jsbytes("vert-origin-y"), cst_vert_adv_y=caml_string_of_jsbytes("vert-adv-y"), cst_unicode=caml_string_of_jsbytes("unicode"), cst_glyphname=caml_string_of_jsbytes("glyphname"), cst_lang=caml_string_of_jsbytes("lang"), cst_u1=caml_string_of_jsbytes("u1"), cst_u2=caml_string_of_jsbytes("u2"), cst_g1=caml_string_of_jsbytes("g1"), cst_g2=caml_string_of_jsbytes("g2"), cst_k=caml_string_of_jsbytes("k"), cst_font_family=caml_string_of_jsbytes("font-family"), cst_font_style=caml_string_of_jsbytes("font-style"), cst_font_variant=caml_string_of_jsbytes("font-variant"), cst_font_weight=caml_string_of_jsbytes("font-weight"), cst_font_stretch=caml_string_of_jsbytes("font-stretch"), cst_font_size=caml_string_of_jsbytes("font-size"), cst_unicode_range=caml_string_of_jsbytes("unicode-range"), cst_units_per_em=caml_string_of_jsbytes("units-per-em"), cst_stemv=caml_string_of_jsbytes("stemv"), cst_stemh=caml_string_of_jsbytes("stemh"), cst_slope=caml_string_of_jsbytes("slope"), cst_cap_height=caml_string_of_jsbytes("cap-height"), cst_x_height=caml_string_of_jsbytes("x-height"), cst_accent_height=caml_string_of_jsbytes("accent-height"), cst_ascent=caml_string_of_jsbytes("ascent"), cst_widths=caml_string_of_jsbytes("widths"), cst_bbox=caml_string_of_jsbytes("bbox"), cst_ideographic=caml_string_of_jsbytes("ideographic"), cst_alphabetic=caml_string_of_jsbytes("alphabetic"), cst_mathematical=caml_string_of_jsbytes("mathematical"), cst_hanging=caml_string_of_jsbytes("hanging"), cst_v_ideographic=caml_string_of_jsbytes("v-ideographic"), cst_v_alphabetic=caml_string_of_jsbytes("v-alphabetic"), cst_v_mathematical=caml_string_of_jsbytes("v-mathematical"), cst_v_hanging=caml_string_of_jsbytes("v-hanging"), cst_underline_position=caml_string_of_jsbytes("underline-position"), cst_underline_thickness=caml_string_of_jsbytes("underline-thickness"), cst_strikethrough_position= caml_string_of_jsbytes("strikethrough-position"), cst_strikethrough_thickness= caml_string_of_jsbytes("strikethrough-thickness"), cst_overline_position=caml_string_of_jsbytes("overline-position"), cst_overline_thickness=caml_string_of_jsbytes("overline-thickness"), cst_string=caml_string_of_jsbytes("string"), cst_name=caml_string_of_jsbytes("name"), cst_onabort=caml_string_of_jsbytes("onabort"), cst_onactivate=caml_string_of_jsbytes("onactivate"), cst_onbegin=caml_string_of_jsbytes("onbegin"), cst_onend=caml_string_of_jsbytes("onend"), cst_onerror=caml_string_of_jsbytes("onerror"), cst_onfocusin=caml_string_of_jsbytes("onfocusin"), cst_onfocusout=caml_string_of_jsbytes("onfocusout"), cst_onload=caml_string_of_jsbytes("onload"), cst_onrepeat=caml_string_of_jsbytes("onrepeat"), cst_onresize=caml_string_of_jsbytes("onresize"), cst_onscroll=caml_string_of_jsbytes("onscroll"), cst_onunload=caml_string_of_jsbytes("onunload"), cst_onzoom=caml_string_of_jsbytes("onzoom"), cst_onclick=caml_string_of_jsbytes("onclick"), cst_onmousedown=caml_string_of_jsbytes("onmousedown"), cst_onmouseup=caml_string_of_jsbytes("onmouseup"), cst_onmouseover=caml_string_of_jsbytes("onmouseover"), cst_onmouseout=caml_string_of_jsbytes("onmouseout"), cst_onmousemove=caml_string_of_jsbytes("onmousemove"), cst_ontouchstart=caml_string_of_jsbytes("ontouchstart"), cst_ontouchend=caml_string_of_jsbytes("ontouchend"), cst_ontouchmove=caml_string_of_jsbytes("ontouchmove"), cst_ontouchcancel=caml_string_of_jsbytes("ontouchcancel"), cst_stop_color=caml_string_of_jsbytes("stop-color"), cst_stop_opacity=caml_string_of_jsbytes("stop-opacity"), cst_stroke=caml_string_of_jsbytes("stroke"), cst_stroke_width=caml_string_of_jsbytes("stroke-width"), cst_stroke_miterlimit=caml_string_of_jsbytes("stroke-miterlimit"), cst_stroke_dashoffset=caml_string_of_jsbytes("stroke-dashoffset"), cst_stroke_opacity=caml_string_of_jsbytes("stroke-opacity"), cst_g=caml_string_of_jsbytes("g"), cst_defs=caml_string_of_jsbytes("defs"), cst_desc=caml_string_of_jsbytes("desc"), cst_title=caml_string_of_jsbytes("title"), cst_symbol=caml_string_of_jsbytes("symbol"), cst_use=caml_string_of_jsbytes("use"), cst_image=caml_string_of_jsbytes("image"), cst_switch=caml_string_of_jsbytes("switch"), cst_style$0=caml_string_of_jsbytes("style"), cst_path$0=caml_string_of_jsbytes("path"), cst_rect=caml_string_of_jsbytes("rect"), cst_circle=caml_string_of_jsbytes("circle"), cst_ellipse=caml_string_of_jsbytes("ellipse"), cst_line=caml_string_of_jsbytes("line"), cst_polyline=caml_string_of_jsbytes("polyline"), cst_polygon=caml_string_of_jsbytes("polygon"), cst_text=caml_string_of_jsbytes("text"), cst_tspan=caml_string_of_jsbytes("tspan"), cst_tref=caml_string_of_jsbytes("tref"), cst_textPath=caml_string_of_jsbytes("textPath"), cst_altGlyph=caml_string_of_jsbytes("altGlyph"), cst_altGlyphDef=caml_string_of_jsbytes("altGlyphDef"), cst_altGlyphItem=caml_string_of_jsbytes("altGlyphItem"), cst_glyphRef$0=caml_string_of_jsbytes("glyphRef"), cst_marker=caml_string_of_jsbytes("marker"), cst_color_profile=caml_string_of_jsbytes("color-profile"), cst_linearGradient=caml_string_of_jsbytes("linearGradient"), cst_radialGradient=caml_string_of_jsbytes("radialGradient"), cst_stop=caml_string_of_jsbytes("stop"), cst_pattern=caml_string_of_jsbytes("pattern"), cst_clipPath=caml_string_of_jsbytes("clipPath"), cst_filter=caml_string_of_jsbytes("filter"), cst_feDistantLight=caml_string_of_jsbytes("feDistantLight"), cst_fePointLight=caml_string_of_jsbytes("fePointLight"), cst_feSpotLight=caml_string_of_jsbytes("feSpotLight"), cst_feBlend=caml_string_of_jsbytes("feBlend"), cst_feColorMatrix=caml_string_of_jsbytes("feColorMatrix"), cst_feComponentTransfer=caml_string_of_jsbytes("feComponentTransfer"), cst_feFuncA=caml_string_of_jsbytes("feFuncA"), cst_feFuncG=caml_string_of_jsbytes("feFuncG"), cst_feFuncB=caml_string_of_jsbytes("feFuncB"), cst_feFuncR=caml_string_of_jsbytes("feFuncR"), cst_feComposite=caml_string_of_jsbytes("feComposite"), cst_feConvolveMatrix=caml_string_of_jsbytes("feConvolveMatrix"), cst_feDiffuseLighting=caml_string_of_jsbytes("feDiffuseLighting"), cst_feDisplacementMap=caml_string_of_jsbytes("feDisplacementMap"), cst_feFlood=caml_string_of_jsbytes("feFlood"), cst_feGaussianBlur=caml_string_of_jsbytes("feGaussianBlur"), cst_feImage=caml_string_of_jsbytes("feImage"), cst_feMerge=caml_string_of_jsbytes("feMerge"), cst_feMorphology=caml_string_of_jsbytes("feMorphology"), cst_feOffset=caml_string_of_jsbytes("feOffset"), cst_feSpecularLighting=caml_string_of_jsbytes("feSpecularLighting"), cst_feTile=caml_string_of_jsbytes("feTile"), cst_feTurbulence=caml_string_of_jsbytes("feTurbulence"), cst_cursor=caml_string_of_jsbytes("cursor"), cst_a=caml_string_of_jsbytes("a"), cst_view=caml_string_of_jsbytes("view"), cst_script=caml_string_of_jsbytes("script"), cst_animate=caml_string_of_jsbytes("animate"), cst_set=caml_string_of_jsbytes("set"), cst_animateMotion=caml_string_of_jsbytes("animateMotion"), cst_mpath=caml_string_of_jsbytes("mpath"), cst_animateColor=caml_string_of_jsbytes("animateColor"), cst_animateTransform=caml_string_of_jsbytes("animateTransform"), cst_font=caml_string_of_jsbytes("font"), cst_glyph=caml_string_of_jsbytes("glyph"), cst_missing_glyph=caml_string_of_jsbytes("missing-glyph"), cst_hkern=caml_string_of_jsbytes("hkern"), cst_vkern=caml_string_of_jsbytes("vkern"), cst_font_face=caml_string_of_jsbytes("font-face"), cst_font_face_src=caml_string_of_jsbytes("font-face-src"), cst_font_face_uri=caml_string_of_jsbytes("font-face-uri"), cst_font_face_uri$0=caml_string_of_jsbytes("font-face-uri"), cst_font_face_name=caml_string_of_jsbytes("font-face-name"), cst$34=caml_string_of_jsbytes(" "), cst_none=caml_string_of_jsbytes("none"), cst_currentColor=caml_string_of_jsbytes("currentColor"), cst$33=caml_string_of_jsbytes(" "), sep=caml_string_of_jsbytes(" "), cst_px=caml_string_of_jsbytes("px"), cst_pt=caml_string_of_jsbytes("pt"), cst_pc=caml_string_of_jsbytes("pc"), cst_in=caml_string_of_jsbytes("in"), cst_mm=caml_string_of_jsbytes("mm"), cst_ex=caml_string_of_jsbytes("ex"), cst_em=caml_string_of_jsbytes("em"), cst_cm=caml_string_of_jsbytes("cm"), cst$32=caml_string_of_jsbytes("%"), cst_grad=caml_string_of_jsbytes("grad"), cst_deg=caml_string_of_jsbytes("deg"), cst_rad=caml_string_of_jsbytes("rad"), cst$31=caml_string_of_jsbytes(""), cst$46=caml_string_of_jsbytes(", "), cst$45=caml_string_of_jsbytes(" "), cst$44=caml_string_of_jsbytes(", "), cst$43=caml_string_of_jsbytes(","), cst$42=caml_string_of_jsbytes(" "), cst$41=caml_string_of_jsbytes(" "), cst_any$1=caml_string_of_jsbytes("any"), cst_any$0=caml_string_of_jsbytes("any"), cst$40=caml_string_of_jsbytes(""), cst_on=caml_string_of_jsbytes("on"), cst_off=caml_string_of_jsbytes("off"), cst_week=caml_string_of_jsbytes("week"), cst_time$0=caml_string_of_jsbytes("time"), cst_text$1=caml_string_of_jsbytes("text"), cst_file=caml_string_of_jsbytes("file"), cst_date=caml_string_of_jsbytes("date"), cst_datetime_local=caml_string_of_jsbytes("datetime-local"), cst_password=caml_string_of_jsbytes("password"), cst_month=caml_string_of_jsbytes("month"), cst_search$1=caml_string_of_jsbytes("search"), cst_button$0=caml_string_of_jsbytes("button"), cst_checkbox$0=caml_string_of_jsbytes("checkbox"), cst_email$0=caml_string_of_jsbytes("email"), cst_hidden$1=caml_string_of_jsbytes("hidden"), cst_url$0=caml_string_of_jsbytes("url"), cst_tel$0=caml_string_of_jsbytes("tel"), cst_reset=caml_string_of_jsbytes("reset"), cst_range=caml_string_of_jsbytes("range"), cst_radio$0=caml_string_of_jsbytes("radio"), cst_readonly$1=caml_string_of_jsbytes("readonly"), cst_color=caml_string_of_jsbytes("color"), cst_number=caml_string_of_jsbytes("number"), cst_image$0=caml_string_of_jsbytes("image"), cst_submit=caml_string_of_jsbytes("submit"), cst_datetime$0=caml_string_of_jsbytes("datetime"), cst_external$0=caml_string_of_jsbytes("external"), cst_0=caml_string_of_jsbytes("0"), cst_formnovalidate$0=caml_string_of_jsbytes("formnovalidate"), cst_audio$0=caml_string_of_jsbytes("audio"), cst_async$0=caml_string_of_jsbytes("async"), cst_toolbar=caml_string_of_jsbytes("toolbar"), cst_text$0=caml_string_of_jsbytes("text"), cst_soft=caml_string_of_jsbytes("soft"), cst_rows$0=caml_string_of_jsbytes("rows"), cst_rect$0=caml_string_of_jsbytes("rect"), cst_prev$0=caml_string_of_jsbytes("prev"), cst_POST=caml_string_of_jsbytes("POST"), cst_poly=caml_string_of_jsbytes("poly"), cst_open$0=caml_string_of_jsbytes("open"), cst_decimal=caml_string_of_jsbytes("decimal"), cst_none$2=caml_string_of_jsbytes("none"), cst_next$0=caml_string_of_jsbytes("next"), cst_loop$0=caml_string_of_jsbytes("loop"), cst_left=caml_string_of_jsbytes("left"), cst_last$0=caml_string_of_jsbytes("last"), cst_kana=caml_string_of_jsbytes("kana"), cst_icon$1=caml_string_of_jsbytes("icon"), cst_help$0=caml_string_of_jsbytes("help"), cst_hard=caml_string_of_jsbytes("hard"), cst_cols$0=caml_string_of_jsbytes("cols"), cst_char$0=caml_string_of_jsbytes("char"), cst_auto$3=caml_string_of_jsbytes("auto"), cst_noreferrer$0=caml_string_of_jsbytes("noreferrer"), cst_author$0=caml_string_of_jsbytes("author"), cst_muted$0=caml_string_of_jsbytes("muted"), cst_autoplay$0=caml_string_of_jsbytes("autoplay"), cst_anonymous=caml_string_of_jsbytes("anonymous"), cst_metadata$0=caml_string_of_jsbytes("metadata"), cst_license$0=caml_string_of_jsbytes("license"), cst_search$0=caml_string_of_jsbytes("search"), cst_first$0=caml_string_of_jsbytes("first"), cst_novalidate$0=caml_string_of_jsbytes("novalidate"), cst_controls$0=caml_string_of_jsbytes("controls"), cst_bookmark$0=caml_string_of_jsbytes("bookmark"), cst_required$0=caml_string_of_jsbytes("required"), cst_selected$0=caml_string_of_jsbytes("selected"), cst_circle$0=caml_string_of_jsbytes("circle"), cst_rowgroup=caml_string_of_jsbytes("rowgroup"), cst_checkbox=caml_string_of_jsbytes("checkbox"), cst_katakana=caml_string_of_jsbytes("katakana"), cst_email=caml_string_of_jsbytes("email"), cst_latin=caml_string_of_jsbytes("latin"), cst_hidden$0=caml_string_of_jsbytes("hidden"), cst_yes=caml_string_of_jsbytes("yes"), cst_url=caml_string_of_jsbytes("url"), cst_tel=caml_string_of_jsbytes("tel"), cst_tag$0=caml_string_of_jsbytes("tag"), cst_rtl=caml_string_of_jsbytes("rtl"), cst_row=caml_string_of_jsbytes("row"), cst_1=caml_string_of_jsbytes("1"), cst_ltr=caml_string_of_jsbytes("ltr"), cst_GET=caml_string_of_jsbytes("GET"), cst_col$0=caml_string_of_jsbytes("col"), cst_any=caml_string_of_jsbytes("any"), cst_all$0=caml_string_of_jsbytes("all"), cst_up$0=caml_string_of_jsbytes("up"), cst_no=caml_string_of_jsbytes("no"), cst_right=caml_string_of_jsbytes("right"), cst_scoped$0=caml_string_of_jsbytes("scoped"), cst_numeric=caml_string_of_jsbytes("numeric"), cst_pingback$0=caml_string_of_jsbytes("pingback"), cst_radio=caml_string_of_jsbytes("radio"), cst_pubdate$0=caml_string_of_jsbytes("pubdate"), cst_multiple$0=caml_string_of_jsbytes("multiple"), cst_latin_name=caml_string_of_jsbytes("latin-name"), cst_autofocus$0=caml_string_of_jsbytes("autofocus"), cst_nofollow$0=caml_string_of_jsbytes("nofollow"), cst_defer$0=caml_string_of_jsbytes("defer"), cst_full_width_latin=caml_string_of_jsbytes("full-width-latin"), cst_default$0=caml_string_of_jsbytes("default"), cst_context=caml_string_of_jsbytes("context"), cst_verbatim=caml_string_of_jsbytes("verbatim"), cst_checked$0=caml_string_of_jsbytes("checked"), cst_stylesheet$0=caml_string_of_jsbytes("stylesheet"), cst_reserved$0=caml_string_of_jsbytes("reserved"), cst_alternate$0=caml_string_of_jsbytes("alternate"), cst_http_www_w3_org_1999_xhtml= caml_string_of_jsbytes("http://www.w3.org/1999/xhtml"), cst_disabled$0=caml_string_of_jsbytes("disabled"), cst_ismap$0=caml_string_of_jsbytes("ismap"), cst_use_credentials=caml_string_of_jsbytes("use-credentials"), cst_index$0=caml_string_of_jsbytes("index"), cst_justify=caml_string_of_jsbytes("justify"), cst_groups=caml_string_of_jsbytes("groups"), cst_command$0=caml_string_of_jsbytes("command"), cst_sidebar$0=caml_string_of_jsbytes("sidebar"), cst_latin_prose=caml_string_of_jsbytes("latin-prose"), cst_readonly$0=caml_string_of_jsbytes("readonly"), cst_colgroup$0=caml_string_of_jsbytes("colgroup"), cst_archives$0=caml_string_of_jsbytes("archives"), cst_seamless$0=caml_string_of_jsbytes("seamless"), cst_prefetch$0=caml_string_of_jsbytes("prefetch"), cst_preserve$0=caml_string_of_jsbytes("preserve"), cst_same_origin=caml_string_of_jsbytes("same-origin"), cst_origin_when_cross_origin= caml_string_of_jsbytes("origin-when-cross-origin"), cst_no_referrer_when_downgrade= caml_string_of_jsbytes("no-referrer-when-downgrade"), cst_no_referrer=caml_string_of_jsbytes("no-referrer"), cst_unsafe_url=caml_string_of_jsbytes("unsafe-url"), cst$39=caml_string_of_jsbytes(""), cst_origin=caml_string_of_jsbytes("origin"), cst_strict_origin=caml_string_of_jsbytes("strict-origin"), cst_strict_origin_when_cross_o= caml_string_of_jsbytes("strict-origin-when-cross-origin"), cst_projection=caml_string_of_jsbytes("projection"), cst_aural=caml_string_of_jsbytes("aural"), cst_handheld=caml_string_of_jsbytes("handheld"), cst_embossed=caml_string_of_jsbytes("embossed"), cst_tty=caml_string_of_jsbytes("tty"), cst_all=caml_string_of_jsbytes("all"), cst_tv=caml_string_of_jsbytes("tv"), cst_screen$0=caml_string_of_jsbytes("screen"), cst_speech=caml_string_of_jsbytes("speech"), cst_print=caml_string_of_jsbytes("print"), cst_braille=caml_string_of_jsbytes("braille"), cst_external=caml_string_of_jsbytes("external"), cst_canonical=caml_string_of_jsbytes("canonical"), cst_prev=caml_string_of_jsbytes("prev"), cst_next=caml_string_of_jsbytes("next"), cst_last=caml_string_of_jsbytes("last"), cst_icon$0=caml_string_of_jsbytes("icon"), cst_help=caml_string_of_jsbytes("help"), cst_noreferrer=caml_string_of_jsbytes("noreferrer"), cst_author=caml_string_of_jsbytes("author"), cst_license=caml_string_of_jsbytes("license"), cst_search=caml_string_of_jsbytes("search"), cst_noopener=caml_string_of_jsbytes("noopener"), cst_first=caml_string_of_jsbytes("first"), cst_bookmark=caml_string_of_jsbytes("bookmark"), cst_tag=caml_string_of_jsbytes("tag"), cst_up=caml_string_of_jsbytes("up"), cst_pingback=caml_string_of_jsbytes("pingback"), cst_nofollow=caml_string_of_jsbytes("nofollow"), cst_stylesheet=caml_string_of_jsbytes("stylesheet"), cst_alternate=caml_string_of_jsbytes("alternate"), cst_index=caml_string_of_jsbytes("index"), cst_sidebar=caml_string_of_jsbytes("sidebar"), cst_archives=caml_string_of_jsbytes("archives"), cst_prefetch=caml_string_of_jsbytes("prefetch"), cst_allow_same_origin=caml_string_of_jsbytes("allow-same-origin"), cst_allow_popups=caml_string_of_jsbytes("allow-popups"), cst_allow_forms=caml_string_of_jsbytes("allow-forms"), cst_allow_pointer_lock=caml_string_of_jsbytes("allow-pointer-lock"), cst_allow_script=caml_string_of_jsbytes("allow-script"), cst_allow_top_navigation=caml_string_of_jsbytes("allow-top-navigation"), cst_link=caml_string_of_jsbytes("link"), cst_style$2=caml_string_of_jsbytes("style"), cst_picture=caml_string_of_jsbytes("picture"), cst_img=caml_string_of_jsbytes("img"), cst_object=caml_string_of_jsbytes("object"), cst_table$0=caml_string_of_jsbytes("table"), cst_figure=caml_string_of_jsbytes("figure"), cst_optgroup=caml_string_of_jsbytes("optgroup"), cst_fieldset=caml_string_of_jsbytes("fieldset"), cst_details=caml_string_of_jsbytes("details"), cst_datalist=caml_string_of_jsbytes("datalist"), cst_menu=caml_string_of_jsbytes("menu"), cst_command=caml_string_of_jsbytes("command"), cst_area=caml_string_of_jsbytes("area"), cst_coords=caml_string_of_jsbytes("coords"), cst_shape=caml_string_of_jsbytes("shape"), cst_bdo=caml_string_of_jsbytes("bdo"), cst_nbsp=caml_string_of_jsbytes("nbsp"), cst_html$0=caml_string_of_jsbytes("html"), cst_aria=caml_string_of_jsbytes("aria-"), cst_scrolling=caml_string_of_jsbytes("scrolling"), cst_frameborder=caml_string_of_jsbytes("frameborder"), cst_char=caml_string_of_jsbytes("char"), cst_rules=caml_string_of_jsbytes("rules"), cst_scope=caml_string_of_jsbytes("scope"), cst_align=caml_string_of_jsbytes("align"), cst_type$8=caml_string_of_jsbytes("type"), cst_type$7=caml_string_of_jsbytes("type"), cst_type$6=caml_string_of_jsbytes("type"), cst_type$5=caml_string_of_jsbytes("type"), cst_wrap$0=caml_string_of_jsbytes("wrap"), cst_translate$0=caml_string_of_jsbytes("translate"), cst_step=caml_string_of_jsbytes("step"), cst_sizes=caml_string_of_jsbytes("sizes"), cst_spellcheck=caml_string_of_jsbytes("spellcheck"), cst_sandbox=caml_string_of_jsbytes("sandbox"), cst_preload=caml_string_of_jsbytes("preload"), cst_inputmode=caml_string_of_jsbytes("inputmode"), cst_draggable=caml_string_of_jsbytes("draggable"), cst_dir=caml_string_of_jsbytes("dir"), cst_contenteditable=caml_string_of_jsbytes("contenteditable"), cst_crossorigin=caml_string_of_jsbytes("crossorigin"), cst_autocomplete=caml_string_of_jsbytes("autocomplete"), cst_referrerpolicy=caml_string_of_jsbytes("referrerpolicy"), cst_method$0=caml_string_of_jsbytes("method"), cst_width$0=caml_string_of_jsbytes("width"), cst_height$0=caml_string_of_jsbytes("height"), cst_download=caml_string_of_jsbytes("download"), cst_accesskey=caml_string_of_jsbytes("accesskey"), cst_xml_space$0=caml_string_of_jsbytes("xml:space"), cst_xmlns$4=caml_string_of_jsbytes("xmlns"), cst_data$0=caml_string_of_jsbytes("data-"), content_type$0=caml_string_of_jsbytes("text/html"), alternative_content_types= [0, caml_string_of_jsbytes("application/xhtml+xml"), [0, caml_string_of_jsbytes("application/xml"), [0,caml_string_of_jsbytes("text/xml"),0]]], version$0=caml_string_of_jsbytes("HTML5-draft"), standard$0=caml_string_of_jsbytes("http://www.w3.org/TR/html5/"), namespace$0=caml_string_of_jsbytes("http://www.w3.org/1999/xhtml"), cst_html=caml_string_of_jsbytes("html"), emptytags= caml_list_of_js_array ([caml_string_of_jsbytes("area"), caml_string_of_jsbytes("base"), caml_string_of_jsbytes("br"), caml_string_of_jsbytes("col"), caml_string_of_jsbytes("command"), caml_string_of_jsbytes("embed"), caml_string_of_jsbytes("hr"), caml_string_of_jsbytes("img"), caml_string_of_jsbytes("input"), caml_string_of_jsbytes("keygen"), caml_string_of_jsbytes("link"), caml_string_of_jsbytes("meta"), caml_string_of_jsbytes("param"), caml_string_of_jsbytes("source"), caml_string_of_jsbytes("wbr")]), cst_class$0=caml_string_of_jsbytes("class"), cst_id$0=caml_string_of_jsbytes("id"), cst_title$0=caml_string_of_jsbytes("title"), cst_xml_lang$0=caml_string_of_jsbytes("xml:lang"), cst_lang$0=caml_string_of_jsbytes("lang"), cst_style$1=caml_string_of_jsbytes("style"), cst_property=caml_string_of_jsbytes("property"), cst_onabort$0=caml_string_of_jsbytes("onabort"), cst_onafterprint=caml_string_of_jsbytes("onafterprint"), cst_onbeforeprint=caml_string_of_jsbytes("onbeforeprint"), cst_onbeforeunload=caml_string_of_jsbytes("onbeforeunload"), cst_onblur=caml_string_of_jsbytes("onblur"), cst_oncanplay=caml_string_of_jsbytes("oncanplay"), cst_oncanplaythrough=caml_string_of_jsbytes("oncanplaythrough"), cst_onchange=caml_string_of_jsbytes("onchange"), cst_ondurationchange=caml_string_of_jsbytes("ondurationchange"), cst_onemptied=caml_string_of_jsbytes("onemptied"), cst_onended=caml_string_of_jsbytes("onended"), cst_onerror$0=caml_string_of_jsbytes("onerror"), cst_onfocus=caml_string_of_jsbytes("onfocus"), cst_onformchange=caml_string_of_jsbytes("onformchange"), cst_onforminput=caml_string_of_jsbytes("onforminput"), cst_onhashchange=caml_string_of_jsbytes("onhashchange"), cst_oninput=caml_string_of_jsbytes("oninput"), cst_oninvalid=caml_string_of_jsbytes("oninvalid"), cst_onoffline=caml_string_of_jsbytes("onoffline"), cst_ononline=caml_string_of_jsbytes("ononline"), cst_onpause=caml_string_of_jsbytes("onpause"), cst_onplay=caml_string_of_jsbytes("onplay"), cst_onplaying=caml_string_of_jsbytes("onplaying"), cst_onpagehide=caml_string_of_jsbytes("onpagehide"), cst_onpageshow=caml_string_of_jsbytes("onpageshow"), cst_onpopstate=caml_string_of_jsbytes("onpopstate"), cst_onprogress=caml_string_of_jsbytes("onprogress"), cst_onratechange=caml_string_of_jsbytes("onratechange"), cst_onreadystatechange=caml_string_of_jsbytes("onreadystatechange"), cst_onredo=caml_string_of_jsbytes("onredo"), cst_onresize$0=caml_string_of_jsbytes("onresize"), cst_onscroll$0=caml_string_of_jsbytes("onscroll"), cst_onseeked=caml_string_of_jsbytes("onseeked"), cst_onseeking=caml_string_of_jsbytes("onseeking"), cst_onselect=caml_string_of_jsbytes("onselect"), cst_onshow=caml_string_of_jsbytes("onshow"), cst_onstalled=caml_string_of_jsbytes("onstalled"), cst_onstorage=caml_string_of_jsbytes("onstorage"), cst_onsubmit=caml_string_of_jsbytes("onsubmit"), cst_onsuspend=caml_string_of_jsbytes("onsuspend"), cst_ontimeupdate=caml_string_of_jsbytes("ontimeupdate"), cst_onundo=caml_string_of_jsbytes("onundo"), cst_onunload$0=caml_string_of_jsbytes("onunload"), cst_onvolumechange=caml_string_of_jsbytes("onvolumechange"), cst_onwaiting=caml_string_of_jsbytes("onwaiting"), cst_onload$0=caml_string_of_jsbytes("onload"), cst_onloadeddata=caml_string_of_jsbytes("onloadeddata"), cst_onloadedmetadata=caml_string_of_jsbytes("onloadedmetadata"), cst_onloadstart=caml_string_of_jsbytes("onloadstart"), cst_onmessage=caml_string_of_jsbytes("onmessage"), cst_onmousewheel=caml_string_of_jsbytes("onmousewheel"), cst_onclick$0=caml_string_of_jsbytes("onclick"), cst_oncontextmenu=caml_string_of_jsbytes("oncontextmenu"), cst_ondblclick=caml_string_of_jsbytes("ondblclick"), cst_ondrag=caml_string_of_jsbytes("ondrag"), cst_ondragend=caml_string_of_jsbytes("ondragend"), cst_ondragenter=caml_string_of_jsbytes("ondragenter"), cst_ondragleave=caml_string_of_jsbytes("ondragleave"), cst_ondragover=caml_string_of_jsbytes("ondragover"), cst_ondragstart=caml_string_of_jsbytes("ondragstart"), cst_ondrop=caml_string_of_jsbytes("ondrop"), cst_onmousedown$0=caml_string_of_jsbytes("onmousedown"), cst_onmouseup$0=caml_string_of_jsbytes("onmouseup"), cst_onmouseover$0=caml_string_of_jsbytes("onmouseover"), cst_onmousemove$0=caml_string_of_jsbytes("onmousemove"), cst_onmouseout$0=caml_string_of_jsbytes("onmouseout"), cst_ontouchstart$0=caml_string_of_jsbytes("ontouchstart"), cst_ontouchend$0=caml_string_of_jsbytes("ontouchend"), cst_ontouchmove$0=caml_string_of_jsbytes("ontouchmove"), cst_ontouchcancel$0=caml_string_of_jsbytes("ontouchcancel"), cst_onkeypress=caml_string_of_jsbytes("onkeypress"), cst_onkeydown=caml_string_of_jsbytes("onkeydown"), cst_onkeyup=caml_string_of_jsbytes("onkeyup"), cst_version$0=caml_string_of_jsbytes("version"), cst_manifest=caml_string_of_jsbytes("manifest"), cst_cite=caml_string_of_jsbytes("cite"), cst_charset=caml_string_of_jsbytes("charset"), cst_accept_charset=caml_string_of_jsbytes("accept-charset"), cst_accept=caml_string_of_jsbytes("accept"), cst_href$0=caml_string_of_jsbytes("href"), cst_hreflang=caml_string_of_jsbytes("hreflang"), cst_rel=caml_string_of_jsbytes("rel"), cst_tabindex=caml_string_of_jsbytes("tabindex"), cst_type$4=caml_string_of_jsbytes("type"), cst_alt=caml_string_of_jsbytes("alt"), cst_src=caml_string_of_jsbytes("src"), cst_for=caml_string_of_jsbytes("for"), cst_for$0=caml_string_of_jsbytes("for"), cst_selected=caml_string_of_jsbytes("selected"), cst_value=caml_string_of_jsbytes("value"), cst_value$0=caml_string_of_jsbytes("value"), cst_value$1=caml_string_of_jsbytes("value"), cst_value$2=caml_string_of_jsbytes("value"), cst_action=caml_string_of_jsbytes("action"), cst_enctype=caml_string_of_jsbytes("enctype"), cst_checked=caml_string_of_jsbytes("checked"), cst_disabled=caml_string_of_jsbytes("disabled"), cst_readonly=caml_string_of_jsbytes("readonly"), cst_maxlength=caml_string_of_jsbytes("maxlength"), cst_minlength=caml_string_of_jsbytes("minlength"), cst_name$0=caml_string_of_jsbytes("name"), cst_allowfullscreen=caml_string_of_jsbytes("allowfullscreen"), cst_allowpaymentrequest=caml_string_of_jsbytes("allowpaymentrequest"), cst_async=caml_string_of_jsbytes("async"), cst_autofocus=caml_string_of_jsbytes("autofocus"), cst_autoplay=caml_string_of_jsbytes("autoplay"), cst_muted=caml_string_of_jsbytes("muted"), cst_integrity=caml_string_of_jsbytes("integrity"), cst_mediagroup=caml_string_of_jsbytes("mediagroup"), cst_challenge=caml_string_of_jsbytes("challenge"), cst_contextmenu=caml_string_of_jsbytes("contextmenu"), cst_controls=caml_string_of_jsbytes("controls"), cst_form=caml_string_of_jsbytes("form"), cst_formaction=caml_string_of_jsbytes("formaction"), cst_formenctype=caml_string_of_jsbytes("formenctype"), cst_formnovalidate=caml_string_of_jsbytes("formnovalidate"), cst_formtarget=caml_string_of_jsbytes("formtarget"), cst_hidden=caml_string_of_jsbytes("hidden"), cst_high=caml_string_of_jsbytes("high"), cst_icon=caml_string_of_jsbytes("icon"), cst_ismap=caml_string_of_jsbytes("ismap"), cst_keytype=caml_string_of_jsbytes("keytype"), cst_list=caml_string_of_jsbytes("list"), cst_loop=caml_string_of_jsbytes("loop"), cst_low=caml_string_of_jsbytes("low"), cst_max$0=caml_string_of_jsbytes("max"), cst_max$1=caml_string_of_jsbytes("max"), cst_min$0=caml_string_of_jsbytes("min"), cst_min$1=caml_string_of_jsbytes("min"), cst_novalidate=caml_string_of_jsbytes("novalidate"), cst_open=caml_string_of_jsbytes("open"), cst_optimum=caml_string_of_jsbytes("optimum"), cst_pattern$0=caml_string_of_jsbytes("pattern"), cst_placeholder=caml_string_of_jsbytes("placeholder"), cst_poster=caml_string_of_jsbytes("poster"), cst_pubdate=caml_string_of_jsbytes("pubdate"), cst_radiogroup=caml_string_of_jsbytes("radiogroup"), cst_required=caml_string_of_jsbytes("required"), cst_reserved=caml_string_of_jsbytes("reserved"), cst_scoped=caml_string_of_jsbytes("scoped"), cst_seamless=caml_string_of_jsbytes("seamless"), cst_span=caml_string_of_jsbytes("span"), cst_xml_lang$1=caml_string_of_jsbytes("xml:lang"), cst_srcset=caml_string_of_jsbytes("srcset"), cst_sizes$0=caml_string_of_jsbytes("sizes"), cst_start$0=caml_string_of_jsbytes("start"), cst_size=caml_string_of_jsbytes("size"), cst_multiple=caml_string_of_jsbytes("multiple"), cst_cols=caml_string_of_jsbytes("cols"), cst_rows=caml_string_of_jsbytes("rows"), cst_summary=caml_string_of_jsbytes("summary"), cst_axis=caml_string_of_jsbytes("axis"), cst_colspan=caml_string_of_jsbytes("colspan"), cst_headers=caml_string_of_jsbytes("headers"), cst_rowspan=caml_string_of_jsbytes("rowspan"), cst_border=caml_string_of_jsbytes("border"), cst_data$1=caml_string_of_jsbytes("data"), cst_codetype=caml_string_of_jsbytes("codetype"), cst_marginheight=caml_string_of_jsbytes("marginheight"), cst_marginwidth=caml_string_of_jsbytes("marginwidth"), cst_target=caml_string_of_jsbytes("target"), cst_content=caml_string_of_jsbytes("content"), cst_http_equiv=caml_string_of_jsbytes("http-equiv"), cst_media$0=caml_string_of_jsbytes("media"), cst_role=caml_string_of_jsbytes("role"), cst_body=caml_string_of_jsbytes("body"), cst_head=caml_string_of_jsbytes("head"), cst_title$1=caml_string_of_jsbytes("title"), cst_footer=caml_string_of_jsbytes("footer"), cst_header=caml_string_of_jsbytes("header"), cst_section=caml_string_of_jsbytes("section"), cst_nav=caml_string_of_jsbytes("nav"), cst_h1=caml_string_of_jsbytes("h1"), cst_h2=caml_string_of_jsbytes("h2"), cst_h3=caml_string_of_jsbytes("h3"), cst_h4=caml_string_of_jsbytes("h4"), cst_h5=caml_string_of_jsbytes("h5"), cst_h6=caml_string_of_jsbytes("h6"), cst_hgroup=caml_string_of_jsbytes("hgroup"), cst_address=caml_string_of_jsbytes("address"), cst_blockquote=caml_string_of_jsbytes("blockquote"), cst_div=caml_string_of_jsbytes("div"), cst_p=caml_string_of_jsbytes("p"), cst_pre=caml_string_of_jsbytes("pre"), cst_abbr=caml_string_of_jsbytes("abbr"), cst_br=caml_string_of_jsbytes("br"), cst_cite$0=caml_string_of_jsbytes("cite"), cst_code=caml_string_of_jsbytes("code"), cst_dfn=caml_string_of_jsbytes("dfn"), cst_em$0=caml_string_of_jsbytes("em"), cst_kbd=caml_string_of_jsbytes("kbd"), cst_q=caml_string_of_jsbytes("q"), cst_samp=caml_string_of_jsbytes("samp"), cst_span$0=caml_string_of_jsbytes("span"), cst_strong=caml_string_of_jsbytes("strong"), cst_time=caml_string_of_jsbytes("time"), cst_var=caml_string_of_jsbytes("var"), cst_a$1=caml_string_of_jsbytes("a"), cst_dl=caml_string_of_jsbytes("dl"), cst_ol=caml_string_of_jsbytes("ol"), cst_ul=caml_string_of_jsbytes("ul"), cst_dd=caml_string_of_jsbytes("dd"), cst_dt=caml_string_of_jsbytes("dt"), cst_li=caml_string_of_jsbytes("li"), cst_hr=caml_string_of_jsbytes("hr"), cst_b$0=caml_string_of_jsbytes("b"), cst_i=caml_string_of_jsbytes("i"), cst_u=caml_string_of_jsbytes("u"), cst_small=caml_string_of_jsbytes("small"), cst_sub=caml_string_of_jsbytes("sub"), cst_sup=caml_string_of_jsbytes("sup"), cst_mark=caml_string_of_jsbytes("mark"), cst_rp=caml_string_of_jsbytes("rp"), cst_rt=caml_string_of_jsbytes("rt"), cst_ruby=caml_string_of_jsbytes("ruby"), cst_wbr=caml_string_of_jsbytes("wbr"), cst_datetime=caml_string_of_jsbytes("datetime"), cst_usemap=caml_string_of_jsbytes("usemap"), cst_defer=caml_string_of_jsbytes("defer"), cst_label=caml_string_of_jsbytes("label"), cst_map=caml_string_of_jsbytes("map"), cst_del=caml_string_of_jsbytes("del"), cst_ins=caml_string_of_jsbytes("ins"), cst_script$0=caml_string_of_jsbytes("script"), cst_noscript=caml_string_of_jsbytes("noscript"), cst_template=caml_string_of_jsbytes("template"), cst_article=caml_string_of_jsbytes("article"), cst_aside=caml_string_of_jsbytes("aside"), cst_main=caml_string_of_jsbytes("main"), cst_audio=caml_string_of_jsbytes("audio"), cst_video=caml_string_of_jsbytes("video"), cst_canvas=caml_string_of_jsbytes("canvas"), cst_embed=caml_string_of_jsbytes("embed"), cst_source=caml_string_of_jsbytes("source"), cst_meter=caml_string_of_jsbytes("meter"), cst_output=caml_string_of_jsbytes("output"), cst_form$0=caml_string_of_jsbytes("form"), cst_input=caml_string_of_jsbytes("input"), cst_keygen=caml_string_of_jsbytes("keygen"), cst_label$0=caml_string_of_jsbytes("label"), cst_option=caml_string_of_jsbytes("option"), cst_select=caml_string_of_jsbytes("select"), cst_textarea=caml_string_of_jsbytes("textarea"), cst_button=caml_string_of_jsbytes("button"), cst_progress=caml_string_of_jsbytes("progress"), cst_legend=caml_string_of_jsbytes("legend"), cst_summary$0=caml_string_of_jsbytes("summary"), cst_figcaption=caml_string_of_jsbytes("figcaption"), cst_caption=caml_string_of_jsbytes("caption"), cst_td=caml_string_of_jsbytes("td"), cst_th=caml_string_of_jsbytes("th"), cst_tr=caml_string_of_jsbytes("tr"), cst_colgroup=caml_string_of_jsbytes("colgroup"), cst_col=caml_string_of_jsbytes("col"), cst_thead=caml_string_of_jsbytes("thead"), cst_tbody=caml_string_of_jsbytes("tbody"), cst_tfoot=caml_string_of_jsbytes("tfoot"), cst_iframe=caml_string_of_jsbytes("iframe"), cst_param=caml_string_of_jsbytes("param"), cst_meta=caml_string_of_jsbytes("meta"), cst_base=caml_string_of_jsbytes("base"), Stdlib=global_data.Stdlib, Stdlib_List=global_data.Stdlib__List, Stdlib_Seq=global_data.Stdlib__Seq, Stdlib_Printf=global_data.Stdlib__Printf, Stdlib_String=global_data.Stdlib__String, Stdlib_Format=global_data.Stdlib__Format, Stdlib_Set=global_data.Stdlib__Set, Stdlib_Uchar=global_data.Stdlib__Uchar, Stdlib_Buffer=global_data.Stdlib__Buffer, Uutf=global_data.Uutf, Re=global_data.Re, _L_=[0,[2,0,[12,61,[2,0,0]]],caml_string_of_jsbytes("%s=%s")], _H_=[0,[12,34,[2,0,[12,34,0]]],caml_string_of_jsbytes('"%s"')], _I_=[0,[12,34,[4,0,0,0,[12,34,0]]],caml_string_of_jsbytes('"%d"')], _J_=[0,[12,34,[2,0,[12,34,0]]],caml_string_of_jsbytes('"%s"')], _K_=[0,[12,34,[2,0,[12,34,0]]],caml_string_of_jsbytes('"%s"')], _F_= [0, [2,0,[17,[0,caml_string_of_jsbytes("@,"),0,0],0]], caml_string_of_jsbytes("%s@,")], _G_= [0, [11, caml_string_of_jsbytes("<!-- "), [2, 0, [11, caml_string_of_jsbytes(" -->"), [17,[0,caml_string_of_jsbytes("@,"),0,0],0]]]], caml_string_of_jsbytes("<!-- %s -->@,")], _C_= [0, [12, 60, [16, [15, [12, 62, [16, [15,[16,[16,[11,caml_string_of_jsbytes("<\/"),[2,0,partial]]]]]]]]]], caml_string_of_jsbytes("<%t%a>%t%a%t%t<\/%s>")], _D_= [0, [11, caml_string_of_jsbytes("<!--"), [2,0,[11,caml_string_of_jsbytes("-->"),0]]], caml_string_of_jsbytes("<!--%s-->")], _E_=[0,[12,38,[2,0,[12,59,0]]],caml_string_of_jsbytes("&%s;")], _A_= [0, [12,60,[15,[11,caml_string_of_jsbytes("/>"),0]]], caml_string_of_jsbytes("<%a/>")], _B_= [0, [12, 60, [15,[12,62,[16,[11,caml_string_of_jsbytes("<\/"),[2,0,[12,62,0]]]]]]], caml_string_of_jsbytes("<%a>%t<\/%s>")], _z_=[0,[2,0,[15,[16,0]]],caml_string_of_jsbytes("%s%a%t")], _y_=[0,[16,[2,0,[12,61,[15,0]]]],caml_string_of_jsbytes("%t%s=%a")], _u_=[0,[12,34,[15,[12,34,0]]],caml_string_of_jsbytes('"%a"')], _v_=[0,[12,34,[4,0,0,0,[12,34,0]]],caml_string_of_jsbytes('"%d"')], _w_=[0,[12,34,[2,0,[12,34,0]]],caml_string_of_jsbytes('"%s"')], _x_=[0,[12,34,[15,[12,34,0]]],caml_string_of_jsbytes('"%a"')], _t_=[0,[12,44,[16,0]],caml_string_of_jsbytes(",%t")], _s_= [0, [18,[1,[0,0,caml_string_of_jsbytes("")]],[15,[17,0,0]]], caml_string_of_jsbytes("@[%a@]")], _r_=[0,[15,0],caml_string_of_jsbytes("%a")], _n_=[0,[4,0,0,0,[12,101,[4,0,0,0,0]]],caml_string_of_jsbytes("%de%d")], _o_=[0,[8,[0,0,3],0,[0,12],0],caml_string_of_jsbytes("%.12g")], _p_=[0,[8,[0,0,3],0,[0,15],0],caml_string_of_jsbytes("%.15g")], _q_=[0,[8,[0,0,3],0,[0,18],0],caml_string_of_jsbytes("%.18g")], _m_=[0,1], _c_=[0,[12,34,[2,0,[12,34,0]]],caml_string_of_jsbytes('"%s"')], _d_= [0, [11,caml_string_of_jsbytes(" PUBLIC "),[15,0]], caml_string_of_jsbytes(" PUBLIC %a")], _e_= [0, [11,caml_string_of_jsbytes("<!DOCTYPE "),[2,0,[15,[12,62,0]]]], caml_string_of_jsbytes("<!DOCTYPE %s%a>")], _b_= [0, [11, caml_string_of_jsbytes('<?xml version="'), [2, 0, [11, caml_string_of_jsbytes('" encoding="'), [2,0,[11,caml_string_of_jsbytes('"?>\\n'),0]]]]], caml_string_of_jsbytes('<?xml version="%s" encoding="%s"?>\\n')], _X_= [0, [11,caml_string_of_jsbytes("skewY("),[2,0,[12,41,0]]], caml_string_of_jsbytes("skewY(%s)")], _Y_= [0, [11,caml_string_of_jsbytes("skewX("),[2,0,[12,41,0]]], caml_string_of_jsbytes("skewX(%s)")], _Z_= [0, [11,caml_string_of_jsbytes("scale("),[2,0,[12,41,0]]], caml_string_of_jsbytes("scale(%s)")], ___= [0, [8,[0,0,3],0,0,[12,32,[8,[0,0,3],0,0,0]]], caml_string_of_jsbytes("%g %g")], _$_= [0, [11,caml_string_of_jsbytes("rotate("),[2,0,[12,32,[2,0,[12,41,0]]]]], caml_string_of_jsbytes("rotate(%s %s)")], _aa_= [0, [11, caml_string_of_jsbytes("matrix("), [8, [0,0,3], 0, 0, [12, 32, [8, [0,0,3], 0, 0, [12, 32, [8, [0,0,3], 0, 0, [12,32,[8,[0,0,3],0,0,[12,32,[8,partial$1,0,0,partial$0]]]]]]]]]], caml_string_of_jsbytes("matrix(%g %g %g %g %g %g)")], _ab_= [0, [11,caml_string_of_jsbytes("translate("),[2,0,[12,41,0]]], caml_string_of_jsbytes("translate(%s)")], _U_= [0, [8,[0,0,3],0,0,[11,caml_string_of_jsbytes(", "),[8,[0,0,3],0,0,0]]], caml_string_of_jsbytes("%g, %g")], _V_=[0,[8,[0,0,3],0,0,0],caml_string_of_jsbytes("%g")], _T_= [0, [2,0,[12,32,[2,0,[12,32,[2,0,[12,32,[2,0,0]]]]]]], caml_string_of_jsbytes("%s %s %s %s")], _S_= [0, [8,[0,0,3],0,0,[11,caml_string_of_jsbytes(", "),[8,[0,0,3],0,0,0]]], caml_string_of_jsbytes("%g, %g")], _W_=[0,caml_string_of_jsbytes("; ")], _R_= [0, caml_string_of_jsbytes("-//W3C//DTD SVG 1.1//EN"), [0, caml_string_of_jsbytes ("http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"), 0]], _Q_=[0,[8,[0,0,3],0,0,[2,0,0]],caml_string_of_jsbytes("%g%s")], _P_= [0, [11,caml_string_of_jsbytes("url("),[2,0,[12,41,0]]], caml_string_of_jsbytes("url(%s)")], _ag_=[0,[2,0,[12,32,[2,0,[12,120,0]]]],caml_string_of_jsbytes("%s %sx")], _af_=[0,[2,0,[12,32,[2,0,[12,119,0]]]],caml_string_of_jsbytes("%s %sw")], _ae_=[0,[4,0,0,0,[12,120,[4,0,0,0,0]]],caml_string_of_jsbytes("%dx%d")]; function fmap(f){return f} function nil(param){return 0} function singleton(x){return [0,x,0]} function cons(x,xs){return [0,x,xs]} function append(x,y){return caml_call2(Stdlib[37],x,y)} var map=Stdlib_List[19], Xml_wrap= [0,[0,function(_nk_){return _nk_},fmap,nil,singleton,cons,append,map]]; caml_register_global(1088,Xml_wrap,"Xml_wrap"); var Malformed_stream= [248,cst_Xml_stream_Malformed_strea,runtime.caml_fresh_oo_id(0)]; function _a_(Xml) {function of_list(l) {var _nh_=caml_call1(Xml[1][3],0); function _ni_(a,b) {var _nj_=caml_call1(Xml[1][1],a); return caml_call2(Xml[1][5],_nj_,b)} return caml_call3(Stdlib_List[26],_ni_,l,_nh_)} function mk(children,seq) {var children$0=children,seq$0=seq; for(;;) {var match=caml_call1(seq$0,0); if(match) {var _m$_=match[1]; if(typeof _m$_ === "number") {var rest=match[2]; return [0,of_list(caml_call1(Stdlib_List[9],children$0)),rest]} var _na_=_m$_[1]; if(856096383 === _na_) {var q=match[2], _nb_=_m$_[2], attrs=_nb_[2], match$0=_nb_[1], name=match$0[2], f= function(param) {var v=param[2], match=param[1], name=match[2], _ng_=caml_call1(Xml[1][1],v); return caml_call2(Xml[6],name,_ng_)}, a=caml_call2(Stdlib_List[19],f,attrs), match$1=mk(0,q), rest$0=match$1[2], sub_children=match$1[1], children$1= [0,caml_call3(Xml[21],[0,a],name,sub_children),children$0], children$0=children$1, seq$0=rest$0; continue} if(936573133 <= _na_) {var q$0=match[2], s=_m$_[2], _nc_= function(x) {var _nf_=caml_call1(Xml[1][1],x); return caml_call1(Xml[17],_nf_)}, _nd_=caml_call2(Stdlib_List[19],_nc_,s), children$2=caml_call2(Stdlib[37],_nd_,children$0), children$0=children$2, seq$0=q$0; continue} var q$1=match[2], s$0=_m$_[2], children$3=[0,caml_call1(Xml[16],s$0),children$0], children$0=children$3, seq$0=q$1; continue} var _ne_=Stdlib_Seq[18]; return [0,of_list(caml_call1(Stdlib_List[9],children$0)),_ne_]}} function of_seq(seq) {var match=mk(0,seq), rest=match[2], l=match[1], match$0=caml_call1(rest,0); if(match$0)throw Malformed_stream; return l} return [0,of_seq]} var Xml_stream=[0,Malformed_stream,_a_]; caml_register_global(1090,Xml_stream,"Xml_stream"); function add_unsafe_char(b,c) {if(34 === c)return caml_call2(Stdlib_Buffer[16],b,cst_quot); if(60 <= c) {if(! (63 <= c)) switch(c - 60 | 0) {case 0:return caml_call2(Stdlib_Buffer[16],b,cst_lt); case 1:break; default:return caml_call2(Stdlib_Buffer[16],b,cst_gt)}} else if(38 === c)return caml_call2(Stdlib_Buffer[16],b,cst_amp); var _m4_=c <= 8?1:0; if(_m4_) var _m5_=_m4_; else {var _m6_=11 === c?1:0; if(_m6_) var _m5_=_m6_; else {var _m7_=12 === c?1:0; if(_m7_) var _m5_=_m7_; else var _m8_=14 <= c?1:0, _m9_=_m8_?c <= 31?1:0:_m8_, _m5_=_m9_ || (127 === c?1:0)}} if(_m5_) {caml_call2(Stdlib_Buffer[16],b,cst); var _m__=caml_call1(Stdlib[33],c); caml_call2(Stdlib_Buffer[16],b,_m__); return caml_call2(Stdlib_Buffer[16],b,cst$0)} return caml_call2(Stdlib_Buffer[12],b,c)} function encode_unsafe_char(s) {var b=caml_call1(Stdlib_Buffer[1],caml_ml_string_length(s)); function _m2_(_m3_){return add_unsafe_char(b,_m3_)} caml_call2(Stdlib_String[29],_m2_,s); return caml_call1(Stdlib_Buffer[2],b)} function encode_unsafe_char_and_at(s) {var b=caml_call1(Stdlib_Buffer[1],caml_ml_string_length(s)); function f(c) {return 64 === c ?caml_call2(Stdlib_Buffer[16],b,cst_64) :add_unsafe_char(b,c)} caml_call2(Stdlib_String[29],f,s); return caml_call1(Stdlib_Buffer[2],b)} function compose_decl(opt,_m1_,param) {if(opt)var sth=opt[1],version=sth;else var version=cst_1_0; if(_m1_)var sth$0=_m1_[1],encoding=sth$0;else var encoding=cst_UTF_8; return caml_call3(Stdlib_Format[132],_b_,version,encoding)} function compose_doctype(dt,args) {function pp_args(fmt,l) {if(l) {var _mZ_=function(fmt){return caml_call2(Stdlib_Format[129],fmt,_c_)}, _m0_=caml_call2(Stdlib_Format[123],[0,Stdlib_Format[27]],_mZ_); return caml_call4(Stdlib_Format[129],fmt,_d_,_m0_,l)} return 0} return caml_call4(Stdlib_Format[133],_e_,dt,pp_args,args)} var _f_=[0,caml_call1(Re[23],cst$1),0], _g_=[0,caml_call1(Re[23],cst$2),_f_], _h_=[0,caml_call1(Re[23],cst$3),0], _i_=[0,caml_call1(Re[26],[0,Re[37],_h_]),_g_], _j_=[0,caml_call1(Re[23],cst$4),0], _k_=[0,caml_call1(Re[26],[0,Re[37],_j_]),_i_], _l_=caml_call1(Re[25],_k_), re_end_comment=caml_call1(Re[2],_l_); function pp_number(fmt,v) {if(v == Stdlib[22]) return caml_call2(Stdlib_Format[13],fmt,cst_Infinity); if(v == Stdlib[23]) return caml_call2(Stdlib_Format[13],fmt,cst_Infinity$0); if(v != v)return caml_call2(Stdlib_Format[13],fmt,cst_NaN); var n=v | 0; if(n == v) {var n$0=n,i=0; for(;;) {if(0 !== n$0 && 0 === (n$0 % 10 | 0)) {var i$0=i + 1 | 0,n$1=n$0 / 10 | 0,n$0=n$1,i=i$0;continue} return 2 < i ?caml_call4(Stdlib_Format[129],fmt,_n_,n$0,i) :caml_call2(Stdlib_Format[19],fmt,n)}} var s1=caml_call2(Stdlib_Printf[4],_o_,v); if(v == caml_float_of_string(s1)) return caml_call2(Stdlib_Format[13],fmt,s1); var s2=caml_call2(Stdlib_Printf[4],_p_,v); return v == caml_float_of_string(s2) ?caml_call2(Stdlib_Format[13],fmt,s2) :caml_call3(Stdlib_Format[129],fmt,_q_,v)} function string_of_number(v) {return caml_call3(Stdlib_Format[133],_r_,pp_number,v)} function normalize(src) {var warn=[0,0], buffer=caml_call1(Stdlib_Buffer[1],caml_ml_string_length(src)), _mV_=0; function _mW_(param,_mY_,d) {if(852405675 <= d[1]) {var code=d[2];return caml_call2(Uutf[23][1],buffer,code)} caml_call2(Uutf[23][1],buffer,Uutf[2]); warn[1] = 1; return 0} caml_call5(Uutf[22][2],0,0,_mW_,_mV_,src); var _mX_=warn[1]; return [0,caml_call1(Stdlib_Buffer[2],buffer),_mX_]} function normalize_html(src) {var l=caml_ml_string_length(src),i=0; for(;;) {var _mP_=i < l?1:0; if(_mP_) {var match=runtime.caml_string_get(src,i),switch$0=0; if(35 <= match) {if(61 <= match) {if(62 === match)switch$0 = 1;else if(127 <= match)switch$0 = 2} else if(38 === match || 60 <= match)switch$0 = 1} else if(11 <= match) {if(32 <= match) {if(34 <= match)switch$0 = 1} else if(13 !== match)switch$0 = 2} else if(! (9 <= match))switch$0 = 2; switch(switch$0) {case 2:var _mQ_=1;break; case 1:var _mQ_=1;break; default:var i$0=i + 1 | 0,i=i$0;continue}} else var _mQ_=_mP_; if(_mQ_) {var warn=[0,0], buffer=caml_call1(Stdlib_Buffer[1],caml_ml_string_length(src)), _mR_=0, _mS_= function(param,_mU_,d) {if(852405675 <= d[1]) {var u=d[2],code=caml_call1(Stdlib_Uchar[10],u); if(34 === code) return caml_call2(Stdlib_Buffer[16],buffer,cst_quot$0); if(60 <= code) {if(! (63 <= code)) switch(code - 60 | 0) {case 0: return caml_call2(Stdlib_Buffer[16],buffer,cst_lt$0); case 1:break; default:return caml_call2(Stdlib_Buffer[16],buffer,cst_gt$4)}} else if(38 === code) return caml_call2(Stdlib_Buffer[16],buffer,cst_amp$0); var switch$0=0; if(! (31 < code) && 9 !== code && 10 !== code && 13 !== code) switch$0 = 1; var switch$1=0; if(! switch$0) {var switch$2=0; if(127 <= code && ! (159 < code))switch$2 = 1; if (! switch$2 && 65534 !== (code & 65535) && 65535 !== (code & 65535)) {var u$0=u;switch$1 = 1}} if(! switch$1){warn[1] = 1;var u$0=Uutf[2]} return caml_call2(Uutf[23][1],buffer,u$0)} caml_call2(Uutf[23][1],buffer,Uutf[2]); warn[1] = 1; return 0}; caml_call5(Uutf[22][2],0,0,_mS_,_mR_,src); var _mT_=warn[1]; return [0,caml_call1(Stdlib_Buffer[2],buffer),_mT_]} return [0,src,0]}} function pp_noop(fmt,param){return 0} function Make_fmt(Xml,_lY_) {function open_box(indent,fmt) {return indent?caml_call2(Stdlib_Format[1],fmt,0):0} function close_box(indent,fmt) {return indent?caml_call2(Stdlib_Format[3],fmt,0):0} function sp(indent,fmt) {return indent ?caml_call2(Stdlib_Format[27],fmt,0) :caml_call2(Stdlib_Format[13],fmt,cst$9)} function cut(indent,fmt) {return indent?caml_call2(Stdlib_Format[29],fmt,0):0} var S=caml_call1(Stdlib_Set[1],[0,Stdlib_String[9]]),_lZ_=_lY_[1]; if(_lZ_) var _l0_=S[1], _l1_=function(s,x){return caml_call2(S[4],x,s)}, set=caml_call3(Stdlib_List[25],_l1_,_l0_,_lZ_), is_emptytag=function(x){return caml_call2(S[3],x,set)}; else var is_emptytag=function(param){return 0}; function pp_encode(encode,indent,fmt,s) {var s$0=caml_call1(encode,s); return indent ?caml_call4(Stdlib_Format[129],fmt,_s_,Stdlib_Format[125],s$0) :caml_call2(Stdlib_Format[13],fmt,s$0)} function pp_sep(indent,param) {return param ?function(fmt,param) {function _mN_(_mO_){return sp(indent,_mO_)} return caml_call3(Stdlib_Format[129],fmt,_t_,_mN_)} :function(fmt,param){return sp(indent,fmt)}} function pp_attrib_value(encode,indent,fmt,a) {var match=caml_call1(Xml[26],a); switch(match[0]) {case 0: var f=match[1]; return caml_call4(Stdlib_Format[129],fmt,_u_,pp_number,f); case 1: var i=match[1];return caml_call3(Stdlib_Format[129],fmt,_v_,i); case 2: var s=match[1],_mH_=caml_call1(encode,s); return caml_call3(Stdlib_Format[129],fmt,_w_,_mH_); default: var slist=match[2], sep=match[1], _mI_= function(_mL_,_mM_){return pp_encode(encode,indent,_mL_,_mM_)}, _mJ_=[0,pp_sep(indent,sep)], _mK_=caml_call2(Stdlib_Format[123],_mJ_,_mI_); return caml_call4(Stdlib_Format[129],fmt,_x_,_mK_,slist)}} function pp_attrib(encode,indent,fmt,a) {function _mB_(_mF_,_mG_) {return pp_attrib_value(encode,indent,_mF_,_mG_)} var _mC_=caml_call1(Xml[25],a); function _mD_(_mE_){return sp(indent,_mE_)} return caml_call6(Stdlib_Format[129],fmt,_y_,_mD_,_mC_,_mB_,a)} function pp_attribs(encode,indent) {function _my_(_mz_,_mA_){return pp_attrib(encode,indent,_mz_,_mA_)} return caml_call2(Stdlib_Format[123],[0,pp_noop],_my_)} function pp_tag_and_attribs(encode,indent,fmt,param) {var attrs=param[2],tag=param[1]; open_box(indent,fmt); function _mv_(_mx_){return cut(indent,_mx_)} var _mw_=pp_attribs(encode,indent); caml_call6(Stdlib_Format[129],fmt,_z_,tag,_mw_,attrs,_mv_); return close_box(indent,fmt)} function pp_closedtag(encode,indent,fmt,tag,attrs) {if(is_emptytag(tag)) {var _ml_=[0,tag,attrs], _mm_= function(_mt_,_mu_) {return pp_tag_and_attribs(encode,indent,_mt_,_mu_)}; return caml_call4(Stdlib_Format[129],fmt,_A_,_mm_,_ml_)} open_box(indent,fmt); function _mn_(_ms_){return cut(indent,_ms_)} var _mo_=[0,tag,attrs]; function _mp_(_mq_,_mr_) {return pp_tag_and_attribs(encode,indent,_mq_,_mr_)} caml_call6(Stdlib_Format[129],fmt,_B_,_mp_,_mo_,_mn_,tag); return close_box(indent,fmt)} function pp_elts(encode,indent) {function _mh_(_mj_,_mk_){return pp_elt(encode,indent,_mj_,_mk_)} var _mi_=[0,function(fmt,param){return cut(indent,fmt)}]; return caml_call2(Stdlib_Format[123],_mi_,_mh_)} function pp_tag(encode,indent,fmt,tag,attrs,children) {if(children) {open_box(indent,fmt); var _l6_=function(_mg_){return cut(indent,_mg_)}, _l7_=function(_mf_){return close_box(indent,_mf_)}, _l8_=pp_elts(encode,indent), _l9_=function(_me_){return cut(indent,_me_)}, _l__=[0,tag,attrs], _l$_= function(_mc_,_md_) {return pp_tag_and_attribs(encode,indent,_mc_,_md_)}, _ma_=function(_mb_){return open_box(indent,_mb_)}; caml_call11 (Stdlib_Format[129], fmt, _C_, _ma_, _l$_, _l__, _l9_, _l8_, children, _l7_, _l6_, tag); return close_box(indent,fmt)} return pp_closedtag(encode,indent,fmt,tag,attrs)} function pp_elt(encode,indent,fmt,elt) {var match=caml_call1(Xml[27],elt); if(typeof match === "number") return 0; else switch(match[0]) {case 0: var texte=match[1], f= function(g) {var s=caml_call2(Re[1][1],g,0); return caml_string_notequal(s,cst$5) ?caml_string_notequal(s,cst$6) ?caml_string_notequal(s,cst$7) ?caml_string_notequal(s,cst$8)?s:cst_gt$0 :cst_gt$1 :cst_gt$2 :cst_gt$3}, _l5_=caml_call6(Re[21],0,0,_m_,re_end_comment,f,texte); return caml_call3(Stdlib_Format[129],fmt,_D_,_l5_); case 1: var texte$0=match[1]; return caml_call2(Stdlib_Format[13],fmt,texte$0); case 2: var texte$1=match[1];return pp_encode(encode,indent,fmt,texte$1); case 3: var e=match[1];return caml_call3(Stdlib_Format[129],fmt,_E_,e); case 4: var xh_attrs=match[2],name=match[1]; return pp_closedtag(encode,indent,fmt,name,xh_attrs); default: var xh_taglist=match[3],xh_attrs$0=match[2],name$0=match[1]; return pp_tag(encode,indent,fmt,name$0,xh_attrs$0,xh_taglist)}} function pp(opt,_l2_,param) {if(opt)var sth=opt[1],encode=sth;else var encode=encode_unsafe_char; if(_l2_)var sth$0=_l2_[1],indent=sth$0;else var indent=0; return function(_l3_,_l4_){return pp_elt(encode,indent,_l3_,_l4_)}} return [0, open_box, close_box, sp, cut, S, is_emptytag, pp_encode, pp_sep, pp_attrib_value, pp_attrib, pp_attribs, pp_tag_and_attribs, pp_closedtag, pp_tag, pp_elt, pp_elts, pp]} function Make(Xml,I,O) {var symbol=O[2]; function separator_to_string(param){return param?cst$10:cst$11} function attrib_value_to_string(encode,a) {var match=caml_call1(Xml[26],a); switch(match[0]) {case 0: var f=match[1],_lU_=string_of_number(f); return caml_call2(Stdlib_Printf[4],_H_,_lU_); case 1:var i=match[1];return caml_call2(Stdlib_Printf[4],_I_,i); case 2: var s=match[1],_lV_=caml_call1(encode,s); return caml_call2(Stdlib_Printf[4],_J_,_lV_); default: var slist=match[2], sep=match[1], _lW_=separator_to_string(sep), _lX_=caml_call1(encode,caml_call2(Stdlib_String[6],_lW_,slist)); return caml_call2(Stdlib_Printf[4],_K_,_lX_)}} function attrib_to_string(encode,a) {var _lS_=attrib_value_to_string(encode,a),_lT_=caml_call1(Xml[25],a); return caml_call3(Stdlib_Printf[4],_L_,_lT_,_lS_)} function xh_print_attrs(encode,attrs) {if(attrs) {var queue=attrs[2], attr=attrs[1], _lP_=xh_print_attrs(encode,queue), _lQ_=attrib_to_string(encode,attr), _lR_=caml_call2(Stdlib[28],cst$12,_lQ_); return caml_call2(symbol,caml_call1(O[3],_lR_),_lP_)} return O[1]} function xh_print_closedtag(encode,tag,attrs) {if(0 !== I[1] && ! caml_call2(Stdlib_List[36],tag,I[1])) {var _lK_=caml_call2(Stdlib[28],tag,cst$15), _lL_=caml_call2(Stdlib[28],cst$16,_lK_), _lM_=caml_call1(O[3],_lL_), _lN_=xh_print_attrs(encode,attrs), _lO_=caml_call2(Stdlib[28],cst$17,tag); return caml_call2 (symbol,caml_call2(symbol,caml_call1(O[3],_lO_),_lN_),_lM_)} var _lH_=caml_call1(O[3],cst$13), _lI_=xh_print_attrs(encode,attrs), _lJ_=caml_call2(Stdlib[28],cst$14,tag); return caml_call2 (symbol,caml_call2(symbol,caml_call1(O[3],_lJ_),_lI_),_lH_)} function xh_print_taglist(encode,taglist) {var taglist$0=taglist; for(;;) {if(taglist$0) {var queue=taglist$0[2], elt=taglist$0[1], match=caml_call1(Xml[27],elt); if(typeof match === "number") {var taglist$0=queue;continue} else switch(match[0]) {case 0: var texte=match[1], _lx_=xh_print_taglist(encode,queue), _ly_=caml_call1(encode,texte), _lz_=caml_call2(Stdlib[28],_ly_,cst$22), _lA_=caml_call2(Stdlib[28],cst$23,_lz_); return caml_call2(symbol,caml_call1(O[3],_lA_),_lx_); case 1: var texte$0=match[1],_lB_=xh_print_taglist(encode,queue); return caml_call2(symbol,caml_call1(O[3],texte$0),_lB_); case 2: var texte$1=match[1], _lC_=xh_print_taglist(encode,queue), _lD_=caml_call1(encode,texte$1); return caml_call2(symbol,caml_call1(O[3],_lD_),_lC_); case 3: var e=match[1], _lE_=xh_print_taglist(encode,queue), _lF_=caml_call2(Stdlib[28],e,cst$24), _lG_=caml_call2(Stdlib[28],cst$25,_lF_); return caml_call2(symbol,caml_call1(O[3],_lG_),_lE_); case 4: var xh_attrs=match[2],name=match[1]; return print_nodes(encode,name,xh_attrs,0,queue); default: var xh_taglist=match[3],xh_attrs$0=match[2],name$0=match[1]; return print_nodes(encode,name$0,xh_attrs$0,xh_taglist,queue)}} return O[1]}} function print_nodes(encode,name,xh_attrs,xh_taglist,queue) {var _lw_=xh_print_taglist(encode,queue); return caml_call2 (symbol,xh_print_tag(encode,name,xh_attrs,xh_taglist),_lw_)} function xh_print_tag(encode,tag,attrs,taglist) {if(0 === taglist)return xh_print_closedtag(encode,tag,attrs); var _lp_=caml_call2(Stdlib[28],tag,cst$18), _lq_=caml_call2(Stdlib[28],cst$19,_lp_), _lr_=caml_call1(O[3],_lq_), _ls_=xh_print_taglist(encode,taglist), _lt_=caml_call1(O[3],cst$20), _lu_=xh_print_attrs(encode,attrs), _lv_=caml_call2(Stdlib[28],cst$21,tag); return caml_call2 (symbol, caml_call2 (symbol, caml_call2 (symbol,caml_call2(symbol,caml_call1(O[3],_lv_),_lu_),_lt_), _ls_), _lr_)} function print_list(opt,foret) {if(opt)var sth=opt[1],encode=sth;else var encode=encode_unsafe_char; var _lo_=xh_print_taglist(encode,foret); return caml_call1(O[4],_lo_)} return [0, symbol, separator_to_string, attrib_value_to_string, attrib_to_string, xh_print_attrs, xh_print_closedtag, xh_print_tag, print_nodes, xh_print_taglist, print_list]} function Make_typed(Xml,Typed_xml,O) {var P=Make(Xml,[0,Typed_xml[1][7]],O),symbol=O[2]; function print_list(opt,foret) {if(opt)var sth=opt[1],encode=sth;else var encode=encode_unsafe_char; var _lm_=caml_call2(Stdlib_List[19],Typed_xml[2],foret), _ln_=caml_call2(P[9],encode,_lm_); return caml_call1(O[4],_ln_)} function print(opt,_lf_,doc) {if(opt)var sth=opt[1],encode=sth;else var encode=encode_unsafe_char; if(_lf_)var sth$0=_lf_[1],advert=sth$0;else var advert=cst$30; var doc$0=caml_call1(Typed_xml[3],doc), match=caml_call1(Xml[27],doc$0), switch$0=0; if(typeof match !== "number" && 5 === match[0]) {var c=match[3], a=match[2], n=match[1], _ll_= function(a) {return caml_string_equal(caml_call1(Xml[25],a),cst_xmlns$1)}, a$0= caml_call2(Stdlib_List[33],_ll_,a) ?a :[0,caml_call2(Xml[6],cst_xmlns$2,Typed_xml[1][5]),a], doc$1=caml_call3(Xml[21],[0,a$0],n,c); switch$0 = 1} if(! switch$0)var doc$1=doc$0; var _lg_=caml_call2(P[9],encode,[0,doc$1,0]); if(caml_string_notequal(advert,cst$26)) var _lh_=caml_call2(Stdlib[28],advert,cst$27), _li_=caml_call2(Stdlib[28],cst$28,_lh_); else var _li_=cst$29; var _lj_=caml_call1(O[3],_li_), _lk_= caml_call2 (symbol, caml_call2(symbol,caml_call1(O[3],Typed_xml[1][6]),_lj_), _lg_); return caml_call1(O[4],_lk_)} return [0,P,symbol,print_list,print]} function Simple_output(M) {function empty(param){return 0} function concat(f1,f2,param){caml_call1(f1,0);return caml_call1(f2,0)} function put(s,param){return caml_call1(M[1],s)} function make(f){return caml_call1(f,0)} return [0,empty,concat,put,make]} function Make_simple(Xml,I) {function print_list(output) {return Make(Xml,I,Simple_output([0,output]))[10]} return [0,print_list]} function Make_typed_simple(Xml,Typed_xml) {function print_list(output) {return Make_typed(Xml,Typed_xml,Simple_output([0,output]))[3]} function print(output) {return Make_typed(Xml,Typed_xml,Simple_output([0,output]))[4]} return [0,print_list,print]} function _M_(_ld_,_lc_,_lb_) {var _le_=Make_typed(_ld_,_lc_,_lb_);return [0,_le_[3],_le_[4]]} function _N_(_la_,_k$_,_k__){return [0,Make(_la_,_k$_,_k__)[10]]} function _O_(_k9_,_k8_){return [0,Make_fmt(_k9_,_k8_)[17]]} var Xml_print= [0, encode_unsafe_char, encode_unsafe_char_and_at, [0,normalize,normalize_html], compose_decl, compose_doctype, string_of_number, pp_number, function(Xml,Typed_xml) {var P=Make_fmt(Xml,[0,Typed_xml[1][7]]); function pp_elt(opt,_k6_,param,fmt,foret) {if(opt) var sth=opt[1],encode=sth; else var encode=encode_unsafe_char; if(_k6_)var sth$0=_k6_[1],indent=sth$0;else var indent=0; var _k7_=caml_call1(Typed_xml[2],foret); return caml_call4(P[15],encode,indent,fmt,_k7_)} function pp(opt,_k4_,advert,param,fmt,doc$0) {if(opt) var sth=opt[1],encode=sth; else var encode=encode_unsafe_char; if(_k4_)var sth$0=_k4_[1],indent=sth$0;else var indent=0; caml_call2(Stdlib_Format[7],fmt,0); caml_call3(Stdlib_Format[129],fmt,_F_,Typed_xml[1][6]); if(advert) {var s=advert[1];caml_call3(Stdlib_Format[129],fmt,_G_,s)} var doc=caml_call1(Typed_xml[3],doc$0), match=caml_call1(Xml[27],doc), switch$0=0; if(typeof match !== "number" && 5 === match[0]) {var c=match[3], a=match[2], n=match[1], _k3_= function(a) {return caml_string_equal(caml_call1(Xml[25],a),cst_xmlns)}, a$0= caml_call2(Stdlib_List[33],_k3_,a) ?a :[0,caml_call2(Xml[6],cst_xmlns$0,Typed_xml[1][5]),a], _k5_=caml_call3(Xml[21],[0,a$0],n,c); switch$0 = 1} if(! switch$0)var _k5_=doc; caml_call4(P[15],encode,indent,fmt,_k5_); return caml_call2(Stdlib_Format[3],fmt,0)} return [0,pp_elt,pp]}, _O_, _N_, _M_, Make_simple, Make_typed_simple]; caml_register_global(1099,Xml_print,"Xml_print"); var Xml_iter= [0, function(Xml) {function amap1(f,n) {var match=caml_call1(Xml[27],n); if(typeof match !== "number") switch(match[0]) {case 4: var attribs=match[2], name=match[1], _k1_=[0,caml_call2(f,name,attribs)]; return caml_call2(Xml[20],_k1_,name); case 5: var elts=match[3], attribs$0=match[2], name$0=match[1], _k2_=[0,caml_call2(f,name$0,attribs$0)]; return caml_call3(Xml[21],_k2_,name$0,elts) } return n} function amap(f,n) {var match=caml_call1(Xml[27],n); if(typeof match !== "number") switch(match[0]) {case 4: var attribs=match[2], name=match[1], _kW_=[0,caml_call2(f,name,attribs)]; return caml_call2(Xml[20],_kW_,name); case 5: var elts=match[3], attribs$0=match[2], name$0=match[1], _kX_=function(_k0_){return amap(f,_k0_)}, _kY_=caml_call2(Stdlib_List[19],_kX_,elts), _kZ_=[0,caml_call2(f,name$0,attribs$0)]; return caml_call3(Xml[21],_kZ_,name$0,_kY_) } return n} function add_float_attrib(name,value,param) {if(param) {var head=param[1],tail=param[2]; if(caml_string_equal(caml_call1(Xml[25],head),name)) return [0,caml_call2(Xml[4],name,value),tail]; var tail$0=param[2]; return [0,head,add_float_attrib(name,value,tail$0)]} return [0,caml_call2(Xml[4],name,value),0]} function map_float_attrib(is_attrib,f,l) {function aux(head) {var match=caml_call1(Xml[26],head); if(0 === match[0]) {var value=match[1]; if(caml_call1(is_attrib,caml_call1(Xml[25],head))) {var _kU_=caml_call1(f,value),_kV_=caml_call1(Xml[25],head); return caml_call2(Xml[4],_kV_,_kU_)}} return head} return caml_call2(Stdlib_List[19],aux,l)} function add_int_attrib(name,value,param) {if(param) {var head=param[1],tail=param[2]; if(caml_string_equal(caml_call1(Xml[25],head),name)) return [0,caml_call2(Xml[5],name,value),tail]; var tail$0=param[2]; return [0,head,add_int_attrib(name,value,tail$0)]} return [0,caml_call2(Xml[5],name,value),0]} function rm_attrib(is_attrib,param) {var param$0=param; for(;;) {if(param$0) {var head=param$0[1],tail=param$0[2]; if(caml_call1(is_attrib,caml_call1(Xml[25],head))) {var param$0=tail;continue} var tail$0=param$0[2]; return [0,head,rm_attrib(is_attrib,tail$0)]} return 0}} function map_int_attrib(is_attrib,f,l) {function aux(head) {var match=caml_call1(Xml[26],head); if(1 === match[0]) {var value=match[1]; if(caml_call1(is_attrib,caml_call1(Xml[25],head))) {var _kS_=caml_call1(f,value),_kT_=caml_call1(Xml[25],head); return caml_call2(Xml[5],_kT_,_kS_)}} return head} return caml_call2(Stdlib_List[19],aux,l)} function add_string_attrib(name,value,param) {if(param) {var head=param[1],tail=param[2]; if(caml_string_equal(caml_call1(Xml[25],head),name)) return [0,caml_call2(Xml[6],name,value),tail]; var tail$0=param[2]; return [0,head,add_string_attrib(name,value,tail$0)]} return [0,caml_call2(Xml[6],name,value),0]} function map_string_attrib(is_attrib,f,l) {function aux(head) {var match=caml_call1(Xml[26],head); if(2 === match[0]) {var value=match[1]; if(caml_call1(is_attrib,caml_call1(Xml[25],head))) {var _kQ_=caml_call1(f,value),_kR_=caml_call1(Xml[25],head); return caml_call2(Xml[6],_kR_,_kQ_)}} return head} return caml_call2(Stdlib_List[19],aux,l)} function add_space_sep_attrib(name,value,param) {if(param) {var tail=param[2],head=param[1],match=caml_call1(Xml[26],head); if(3 === match[0] && ! match[1]) {var values=match[2]; if(caml_string_equal(caml_call1(Xml[25],head),name)) return [0,caml_call2(Xml[7],name,[0,value,values]),tail]} return caml_string_equal(caml_call1(Xml[25],head),name) ?[0,caml_call2(Xml[7],name,[0,value,0]),tail] :[0,head,add_space_sep_attrib(name,value,tail)]} return [0,caml_call2(Xml[7],name,[0,value,0]),0]} function add_comma_sep_attrib(name,value,param) {if(param) {var tail=param[2],head=param[1],match=caml_call1(Xml[26],head); if(3 === match[0] && match[1]) {var values=match[2]; if(caml_string_equal(caml_call1(Xml[25],head),name)) return [0,caml_call2(Xml[8],name,[0,value,values]),tail]} return caml_string_equal(caml_call1(Xml[25],head),name) ?[0,caml_call2(Xml[8],name,[0,value,0]),tail] :[0,head,add_comma_sep_attrib(name,value,tail)]} return [0,caml_call2(Xml[8],name,[0,value,0]),0]} function rm_attrib_from_list(is_attrib,is_value,param) {if(param) {var tail=param[2],head=param[1],match=caml_call1(Xml[26],head); if(3 === match[0]) {var values=match[2],sep=match[1]; if(caml_call1(is_attrib,caml_call1(Xml[25],head))) {var _kN_=function(v){return 1 - caml_call1(is_value,v)}, values$0=caml_call2(Stdlib_List[41],_kN_,values); if(values$0) {if(sep) {var _kO_=caml_call1(Xml[25],head); return [0,caml_call2(Xml[8],_kO_,values$0),tail]} var _kP_=caml_call1(Xml[25],head); return [0,caml_call2(Xml[7],_kP_,values$0),tail]} return tail}} return [0,head,rm_attrib_from_list(is_attrib,is_value,tail)]} return 0} function map_string_attrib_in_list(is_attrib,f,l) {function aux(head) {var match=caml_call1(Xml[26],head); if(3 === match[0]) {var values=match[2],sep=match[1]; if(caml_call1(is_attrib,caml_call1(Xml[25],head))) {if(sep) {var _kJ_=caml_call2(Stdlib_List[19],f,values), _kK_=caml_call1(Xml[25],head); return caml_call2(Xml[8],_kK_,_kJ_)} var _kL_=caml_call2(Stdlib_List[19],f,values), _kM_=caml_call1(Xml[25],head); return caml_call2(Xml[7],_kM_,_kL_)}} return head} return caml_call2(Stdlib_List[19],aux,l)} function fold (of_empty, of_comment, of_txt, of_encodedpcdata, of_entity, of_leaf, of_node, n) {var match=caml_call1(Xml[27],n); if(typeof match === "number") return caml_call1(of_empty,0); else switch(match[0]) {case 0:var s=match[1];return caml_call1(of_comment,s); case 1:var s$0=match[1];return caml_call1(of_encodedpcdata,s$0); case 2:var s$1=match[1];return caml_call1(of_txt,s$1); case 3:var s$2=match[1];return caml_call1(of_entity,s$2); case 4: var attribs=match[2],name=match[1]; return caml_call2(of_leaf,name,attribs); default: var elts=match[3], attribs$0=match[2], name$0=match[1], _kH_= function(_kI_) {return fold (of_empty, of_comment, of_txt, of_encodedpcdata, of_entity, of_leaf, of_node, _kI_)}; return caml_call3 (of_node, name$0, attribs$0, caml_call2(Stdlib_List[19],_kH_,elts))}} function all_entities(elt) {function f(param){return 0} function _kG_(ename,attribs,elts) {return caml_call1(Stdlib_List[14],elts)} return fold(f,f,f,f,f,function(ename,attribs){return 0},_kG_,elt)} function flatmap(f,l) {var _kF_=caml_call2(Stdlib_List[19],f,l); return caml_call1(Stdlib_List[13],_kF_)} function translate (root_leaf,root_node,sub_leaf,sub_node,update_state,state,n) {function translate(state,n) {var match=caml_call1(Xml[27],n); if(typeof match !== "number") switch(match[0]) {case 4: var attribs=match[2],name=match[1]; return caml_call3(sub_leaf,state,name,attribs); case 5: var elts=match[3], attribs$0=match[2], name$0=match[1], _kD_=caml_call3(update_state,name$0,attribs$0,state); return caml_call4 (sub_node, state, name$0, attribs$0, flatmap(function(_kE_){return translate(_kD_,_kE_)},elts)) } return [0,n,0]} var match=caml_call1(Xml[27],n); if(typeof match !== "number") switch(match[0]) {case 4: var attribs=match[2],name=match[1]; return caml_call2(root_leaf,name,attribs); case 5: var elts=match[3],attribs$0=match[2],name$0=match[1]; return caml_call3 (root_node, name$0, attribs$0, flatmap(function(_kC_){return translate(state,_kC_)},elts)) } return n} return [0, amap, amap1, rm_attrib, rm_attrib_from_list, map_int_attrib, map_float_attrib, map_string_attrib, map_string_attrib_in_list, add_int_attrib, add_float_attrib, add_string_attrib, add_comma_sep_attrib, add_space_sep_attrib, fold, all_entities, translate]}]; caml_register_global(1100,Xml_iter,"Xml_iter"); function string_of_iri(x){return caml_call2(Stdlib_Printf[4],_P_,x)} function to_string(f,param) {var unit=param[2],n=param[1]; if(unit) var unit$0=unit[1],_kB_=caml_call1(f,unit$0); else var _kB_=cst$31; return caml_call3(Stdlib_Printf[4],_Q_,n,_kB_)} function angle_names(param) {return 4099509 === param?cst_rad:793050094 <= param?cst_grad:cst_deg} function string_of_angle(a){return to_string(angle_names,a)} function length_names(param) {return 16389 <= param ?17280 === param ?cst_mm :17956 <= param ?17960 <= param?cst_px:cst_pt :17939 <= param?cst_pc:cst_in :15496 <= param ?15507 <= param?cst_ex:cst_em :15050 <= param?cst_cm:cst$32} function string_of_length(a){return to_string(length_names,a)} function list(opt,f,l) {if(opt)var sth=opt[1],sep=sth;else var sep=cst$33; var _kA_=caml_call2(Stdlib_List[19],f,l); return caml_call2(Stdlib_String[6],sep,_kA_)} function string_of_paint_whitout_icc(param) {if(typeof param === "number") return 870530776 <= param?cst_none:cst_currentColor; var match=param[2],icc=match[2],c=match[1]; if(icc) {var x=icc[1],_kz_=caml_call2(Stdlib[28],sep,x); return caml_call2(Stdlib[28],c,_kz_)} return c} function string_of_paint(c) {if(typeof c !== "number" && 3652393 <= c[1]) {var _kt_=c[2],_ku_=_kt_[2],_kv_=_kt_[1]; if(_ku_) {var b=_ku_[1], _kw_=string_of_paint_whitout_icc(b), _kx_=caml_call2(Stdlib[28],cst$34,_kw_), _ky_=string_of_iri(_kv_); return caml_call2(Stdlib[28],_ky_,_kx_)} return string_of_iri(_kv_)} return string_of_paint_whitout_icc(c)} function Make_with_wrapped_functions(Xml,C) {var doctype=compose_doctype(cst_svg,_R_), Info=[0,content_type,0,0,version,standard,namespace,doctype], _fk_=Xml[2], _fl_=Xml[3]; function tot(x){return x} function totl(x){return x} function toelt(x){return x} function toeltl(x){return x} function to_attrib(x){return x} function nullary(tag,a,param) {var _ks_=caml_call1(Xml[1][3],0); return caml_call3(Xml[21],a,tag,_ks_)} function unary(tag,a,elt) {var _kr_=caml_call1(Xml[1][4],elt); return caml_call3(Xml[21],a,tag,_kr_)} function star(tag,a,elts){return caml_call3(Xml[21],a,tag,elts)} function to_xmlattribs(x){return x} var _fm_=Xml[4],_fn_=Xml[6],_fo_=C[10],_fp_=C[10],_fq_=C[11]; function user_attrib(f,name,v) {var _kq_=caml_call2(Xml[1][2],f,v); return caml_call2(Xml[6],name,_kq_)} var _fr_=Xml[6]; function metadata(a,children) {return caml_call3(Xml[21],a,cst_metadata,children)} function foreignObject(a,children) {return caml_call3(Xml[21],a,cst_foreignObject,children)} function pcdata(s){return caml_call1(Xml[17],s)} var a_version=caml_call1(_fn_,cst_version), a_baseProfile=caml_call1(_fn_,cst_baseProfile); function a_x(_kp_){return user_attrib(_fo_,cst_x,_kp_)} function a_y(_ko_){return user_attrib(_fo_,cst_y,_ko_)} function a_width(_kn_){return user_attrib(_fp_,cst_width,_kn_)} function a_height(_km_){return user_attrib(_fp_,cst_height,_km_)} var a_preserveAspectRatio=caml_call1(_fn_,cst_preserveAspectRatio), a_contentScriptType=caml_call1(_fn_,cst_contentScriptType), a_contentStyleType=caml_call1(_fn_,cst_contentStyleType); function a_zoomAndPan(x){return user_attrib(C[4],cst_zoomAndSpan,x)} var a_href=caml_call1(_fn_,cst_href), a_xlink_href=caml_call1(_fn_,cst_xlink_href), a_requiredFeatures=caml_call1(Xml[7],cst_requiredFeatures), a_requiredExtensions=caml_call1(Xml[7],cst_requiredExtension), a_systemLanguage=caml_call1(Xml[8],cst_systemLanguage), _fs_=C[3]; function a_externalRessourcesRequired(_kl_) {return user_attrib(_fs_,cst_externalRessourcesRequired,_kl_)} var a_id=caml_call1(_fn_,cst_id); function a_user_data(name) {return caml_call1(_fn_,caml_call2(Stdlib[28],cst_data,name))} var a_xml_base=caml_call1(_fn_,cst_xml_base), a_xml_lang=caml_call1(_fn_,cst_xml_lang); function a_xml_space(x){return user_attrib(C[4],cst_xml_space,x)} var a_type=caml_call1(_fn_,cst_type), a_media=caml_call1(Xml[8],cst_media), a_xlink_title=caml_call1(_fn_,cst_xlink_title), a_class=caml_call1(Xml[7],cst_class), a_style=caml_call1(_fn_,cst_style), _ft_=C[21]; function a_transform(_kk_){return user_attrib(_ft_,cst_transform,_kk_)} var _fu_=C[7]; function a_viewBox(_kj_){return user_attrib(_fu_,cst_viewBox,_kj_)} var a_d=caml_call1(_fn_,cst_d), a_pathLength=caml_call1(_fm_,cst_pathLength); function a_rx(_ki_){return user_attrib(_fp_,cst_rx,_ki_)} function a_ry(_kh_){return user_attrib(_fp_,cst_ry,_kh_)} function a_cx(_kg_){return user_attrib(_fp_,cst_cx,_kg_)} function a_cy(_kf_){return user_attrib(_fp_,cst_cy,_kf_)} function a_r(_ke_){return user_attrib(_fp_,cst_r,_ke_)} function a_x1(_kd_){return user_attrib(_fo_,cst_x1,_kd_)} function a_y1(_kc_){return user_attrib(_fo_,cst_y1,_kc_)} function a_x2(_kb_){return user_attrib(_fo_,cst_x2,_kb_)} function a_y2(_ka_){return user_attrib(_fo_,cst_y2,_ka_)} var _fv_=C[5]; function a_points(_j$_){return user_attrib(_fv_,cst_points,_j$_)} function a_x_list(_j__){return user_attrib(_fq_,cst_x$0,_j__)} function a_y_list(_j9_){return user_attrib(_fq_,cst_y$0,_j9_)} var _fw_=C[12]; function a_dx(_j8_){return user_attrib(_fw_,cst_dx,_j8_)} var _fx_=C[12]; function a_dy(_j7_){return user_attrib(_fx_,cst_dy,_j7_)} function a_dx_list(_j6_){return user_attrib(_fq_,cst_dx$0,_j6_)} function a_dy_list(_j5_){return user_attrib(_fq_,cst_dy$0,_j5_)} function a_lengthAdjust(x){return user_attrib(C[4],cst_lengthAdjust,x)} function a_textLength(_j4_) {return user_attrib(_fp_,cst_textLength,_j4_)} function a_text_anchor(x){return user_attrib(C[4],cst_text_anchor,x)} function a_text_decoration(x) {return user_attrib(C[4],cst_text_decoration,x)} function a_text_rendering(x) {return user_attrib(C[4],cst_text_rendering,x)} var _fy_=C[14]; function a_rotate(_j3_){return user_attrib(_fy_,cst_rotate,_j3_)} function a_startOffset(_j2_) {return user_attrib(_fp_,cst_startOffset,_j2_)} function a_method(x){return user_attrib(C[4],cst_method,x)} function a_spacing(x){return user_attrib(C[4],cst_spacing,x)} var a_glyphRef=caml_call1(_fn_,cst_glyphRef), a_format=caml_call1(_fn_,cst_format); function a_markerUnits(x){return user_attrib(C[4],cst_markerUnits,x)} function a_refX(_j1_){return user_attrib(_fo_,cst_refX,_j1_)} function a_refY(_j0_){return user_attrib(_fo_,cst_refY,_j0_)} function a_markerWidth(_jZ_) {return user_attrib(_fp_,cst_markerWidth,_jZ_)} function a_markerHeight(_jY_) {return user_attrib(_fp_,cst_markerHeight,_jY_)} function a_orient(x){return user_attrib(C[17],cst_orient,x)} var a_local=caml_call1(_fn_,cst_local); function a_rendering_intent(x) {return user_attrib(C[4],cst_rendering_intent,x)} function a_gradientUnits(x) {return user_attrib(C[4],cst_gradientUnits,x)} var _fz_=C[21]; function a_gradientTransform(_jX_) {return user_attrib(_fz_,cst_gradientTransform,_jX_)} function a_spreadMethod(x){return user_attrib(C[4],cst_spreadMethod,x)} function a_fx(_jW_){return user_attrib(_fo_,cst_fx,_jW_)} function a_fy(_jV_){return user_attrib(_fo_,cst_fy,_jV_)} function a_offset(x){return user_attrib(C[16],cst_offset,x)} function a_patternUnits(x){return user_attrib(C[4],cst_patternUnits,x)} function a_patternContentUnits(x) {return user_attrib(C[4],cst_patternContentUnits,x)} function a_patternTransform(x) {return user_attrib(C[21],cst_patternTransform,x)} function a_clipPathUnits(x) {return user_attrib(C[4],cst_clipPathUnits,x)} function a_maskUnits(x){return user_attrib(C[4],cst_maskUnits,x)} function a_maskContentUnits(x) {return user_attrib(C[4],cst_maskContentUnits,x)} function a_primitiveUnits(x) {return user_attrib(C[4],cst_primitiveUnits,x)} var _fA_=C[13]; function a_filterRes(_jU_) {return user_attrib(_fA_,cst_filterResUnits,_jU_)} var a_result=caml_call1(_fn_,cst_result); function a_in(x){return user_attrib(C[8],cst_in$0,x)} function a_in2(x){return user_attrib(C[8],cst_in2,x)} var a_azimuth=caml_call1(_fm_,cst_azimuth), a_elevation=caml_call1(_fm_,cst_elevation), a_pointsAtX=caml_call1(_fm_,cst_pointsAtX), a_pointsAtY=caml_call1(_fm_,cst_pointsAtY), a_pointsAtZ=caml_call1(_fm_,cst_pointsAtZ), a_specularExponent=caml_call1(_fm_,cst_specularExponent), a_specularConstant=caml_call1(_fm_,cst_specularConstant), a_limitingConeAngle=caml_call1(_fm_,cst_limitingConeAngle); function a_mode(x){return user_attrib(C[4],cst_mode,x)} function a_feColorMatrix_type(x){return user_attrib(C[4],cst_type$0,x)} var _fB_=C[14]; function a_values(_jT_){return user_attrib(_fB_,cst_values,_jT_)} function a_transfer_type(x){return user_attrib(C[4],cst_type$1,x)} var _fC_=C[14]; function a_tableValues(_jS_) {return user_attrib(_fC_,cst_tableValues,_jS_)} var _fD_=C[12]; function a_intercept(_jR_){return user_attrib(_fD_,cst_intercept,_jR_)} var _fE_=C[12]; function a_amplitude(_jQ_){return user_attrib(_fE_,cst_amplitude,_jQ_)} var _fF_=C[12]; function a_exponent(_jP_){return user_attrib(_fF_,cst_exponent,_jP_)} var _fG_=C[12]; function a_transfer_offset(_jO_) {return user_attrib(_fG_,cst_offset$0,_jO_)} function a_feComposite_operator(x) {return user_attrib(C[4],cst_operator,x)} var _fH_=C[12]; function a_k1(_jN_){return user_attrib(_fH_,cst_k1,_jN_)} var _fI_=C[12]; function a_k2(_jM_){return user_attrib(_fI_,cst_k2,_jM_)} var _fJ_=C[12]; function a_k3(_jL_){return user_attrib(_fJ_,cst_k3,_jL_)} var _fK_=C[12]; function a_k4(_jK_){return user_attrib(_fK_,cst_k4,_jK_)} var _fL_=C[13]; function a_order(_jJ_){return user_attrib(_fL_,cst_order,_jJ_)} var _fM_=C[14]; function a_kernelMatrix(_jI_) {return user_attrib(_fM_,cst_kernelMatrix,_jI_)} var _fN_=C[12]; function a_divisor(_jH_){return user_attrib(_fN_,cst_divisor,_jH_)} var _fO_=C[12]; function a_bias(_jG_){return user_attrib(_fO_,cst_bias,_jG_)} var _fP_=C[13]; function a_kernelUnitLength(_jF_) {return user_attrib(_fP_,cst_kernelUnitLength,_jF_)} var _fQ_=C[9]; function a_targetX(_jE_){return user_attrib(_fQ_,cst_targetX,_jE_)} var _fR_=C[9]; function a_targetY(_jD_){return user_attrib(_fR_,cst_targetY,_jD_)} function a_edgeMode(x){return user_attrib(C[4],cst_targetY$0,x)} var _fS_=C[3]; function a_preserveAlpha(_jC_) {return user_attrib(_fS_,cst_preserveAlpha,_jC_)} var _fT_=C[12]; function a_surfaceScale(_jB_) {return user_attrib(_fT_,cst_surfaceScale,_jB_)} var _fU_=C[12]; function a_diffuseConstant(_jA_) {return user_attrib(_fU_,cst_diffuseConstant,_jA_)} var _fV_=C[12]; function a_scale(_jz_){return user_attrib(_fV_,cst_scale,_jz_)} function a_xChannelSelector(x) {return user_attrib(C[4],cst_xChannelSelector,x)} function a_yChannelSelector(x) {return user_attrib(C[4],cst_yChannelSelector,x)} var _fW_=C[13]; function a_stdDeviation(_jy_) {return user_attrib(_fW_,cst_stdDeviation,_jy_)} function a_feMorphology_operator(x) {return user_attrib(C[4],cst_operator$0,x)} var _fX_=C[13]; function a_radius(_jx_){return user_attrib(_fX_,cst_radius,_jx_)} var _fY_=C[13]; function a_baseFrenquency(_jw_) {return user_attrib(_fY_,cst_baseFrequency,_jw_)} var _fZ_=C[9]; function a_numOctaves(_jv_) {return user_attrib(_fZ_,cst_numOctaves,_jv_)} var _f0_=C[12]; function a_seed(_ju_){return user_attrib(_f0_,cst_seed,_ju_)} function a_stitchTiles(x){return user_attrib(C[4],cst_stitchTiles,x)} function a_feTurbulence_type(x){return user_attrib(C[4],cst_type$2,x)} function a_xlink_show(x){return user_attrib(C[4],cst_xlink_show,x)} function a_xlink_actuate(x) {return user_attrib(C[4],cst_xlink_actuate,x)} var a_target=caml_call1(_fn_,cst_xlink_target), a_viewTarget=caml_call1(_fn_,cst_viewTarget), a_attributeName=caml_call1(_fn_,cst_attributeName); function a_attributeType(x) {return user_attrib(C[4],cst_attributeType,x)} var a_begin=caml_call1(_fn_,cst_begin), a_dur=caml_call1(_fn_,cst_dur), a_min=caml_call1(_fn_,cst_min), a_max=caml_call1(_fn_,cst_max); function a_restart(x){return user_attrib(C[4],cst_restart,x)} var a_repeatCount=caml_call1(_fn_,cst_repeatCount), a_repeatDur=caml_call1(_fn_,cst_repeatDur), _f1_=C[18]; function a_fill(_jt_){return user_attrib(_f1_,cst_fill,_jt_)} function a_animation_fill(x){return user_attrib(C[4],cst_fill$0,x)} function a_calcMode(x){return user_attrib(C[4],cst_calcMode,x)} var a_animation_values=caml_call1(Xml[8],cst_values$0), a_keyTimes=caml_call1(Xml[8],cst_keyTimes), a_keySplines=caml_call1(Xml[8],cst_keySplines), a_from=caml_call1(_fn_,cst_from), a_to=caml_call1(_fn_,cst_to), a_by=caml_call1(_fn_,cst_by); function a_additive(x){return user_attrib(C[4],cst_additive,x)} function a_accumulate(x){return user_attrib(C[4],cst_accumulate,x)} var _f2_=C[15]; function a_keyPoints(_js_){return user_attrib(_f2_,cst_keyPoints,_js_)} var a_path=caml_call1(_fn_,cst_path),_f3_=C[4]; function a_animateTransform_type(_jr_) {return user_attrib(_f3_,cst_type$3,_jr_)} var _f4_=C[12]; function a_horiz_origin_x(_jq_) {return user_attrib(_f4_,cst_horiz_origin_x,_jq_)} var _f5_=C[12]; function a_horiz_origin_y(_jp_) {return user_attrib(_f5_,cst_horiz_origin_y,_jp_)} var _f6_=C[12]; function a_horiz_adv_x(_jo_) {return user_attrib(_f6_,cst_horiz_adv_x,_jo_)} var _f7_=C[12]; function a_vert_origin_x(_jn_) {return user_attrib(_f7_,cst_vert_origin_x,_jn_)} var _f8_=C[12]; function a_vert_origin_y(_jm_) {return user_attrib(_f8_,cst_vert_origin_y,_jm_)} var _f9_=C[12]; function a_vert_adv_y(_jl_) {return user_attrib(_f9_,cst_vert_adv_y,_jl_)} var a_unicode=caml_call1(_fn_,cst_unicode), a_glyph_name=caml_call1(_fn_,cst_glyphname); function a_orientation(x){return user_attrib(C[4],cst_orientation,x)} function a_arabic_form(x){return user_attrib(C[4],cst_arabic_form,x)} var a_lang=caml_call1(_fn_,cst_lang), a_u1=caml_call1(_fn_,cst_u1), a_u2=caml_call1(_fn_,cst_u2), a_g1=caml_call1(_fn_,cst_g1), a_g2=caml_call1(_fn_,cst_g2), a_k=caml_call1(_fn_,cst_k), a_font_family=caml_call1(_fn_,cst_font_family), a_font_style=caml_call1(_fn_,cst_font_style), a_font_variant=caml_call1(_fn_,cst_font_variant), a_font_weight=caml_call1(_fn_,cst_font_weight), a_font_stretch=caml_call1(_fn_,cst_font_stretch), a_font_size=caml_call1(_fn_,cst_font_size), a_unicode_range=caml_call1(_fn_,cst_unicode_range), a_units_per_em=caml_call1(_fn_,cst_units_per_em), _f__=C[12]; function a_stemv(_jk_){return user_attrib(_f__,cst_stemv,_jk_)} var _f$_=C[12]; function a_stemh(_jj_){return user_attrib(_f$_,cst_stemh,_jj_)} var _ga_=C[12]; function a_slope(_ji_){return user_attrib(_ga_,cst_slope,_ji_)} var _gb_=C[12]; function a_cap_height(_jh_) {return user_attrib(_gb_,cst_cap_height,_jh_)} var _gc_=C[12]; function a_x_height(_jg_){return user_attrib(_gc_,cst_x_height,_jg_)} var _gd_=C[12]; function a_accent_height(_jf_) {return user_attrib(_gd_,cst_accent_height,_jf_)} var _ge_=C[12]; function a_ascent(_je_){return user_attrib(_ge_,cst_ascent,_je_)} var a_widths=caml_call1(_fn_,cst_widths), a_bbox=caml_call1(_fn_,cst_bbox), _gf_=C[12]; function a_ideographic(_jd_) {return user_attrib(_gf_,cst_ideographic,_jd_)} var _gg_=C[12]; function a_alphabetic(_jc_) {return user_attrib(_gg_,cst_alphabetic,_jc_)} var _gh_=C[12]; function a_mathematical(_jb_) {return user_attrib(_gh_,cst_mathematical,_jb_)} var _gi_=C[12]; function a_hanging(_ja_){return user_attrib(_gi_,cst_hanging,_ja_)} var _gj_=C[12]; function a_videographic(_i$_) {return user_attrib(_gj_,cst_v_ideographic,_i$_)} var _gk_=C[12]; function a_v_alphabetic(_i__) {return user_attrib(_gk_,cst_v_alphabetic,_i__)} var _gl_=C[12]; function a_v_mathematical(_i9_) {return user_attrib(_gl_,cst_v_mathematical,_i9_)} var _gm_=C[12]; function a_v_hanging(_i8_){return user_attrib(_gm_,cst_v_hanging,_i8_)} var _gn_=C[12]; function a_underline_position(_i7_) {return user_attrib(_gn_,cst_underline_position,_i7_)} var _go_=C[12]; function a_underline_thickness(_i6_) {return user_attrib(_go_,cst_underline_thickness,_i6_)} var _gp_=C[12]; function a_strikethrough_position(_i5_) {return user_attrib(_gp_,cst_strikethrough_position,_i5_)} var _gq_=C[12]; function a_strikethrough_thickness(_i4_) {return user_attrib(_gq_,cst_strikethrough_thickness,_i4_)} var _gr_=C[12]; function a_overline_position(_i3_) {return user_attrib(_gr_,cst_overline_position,_i3_)} var _gs_=C[12]; function a_overline_thickness(_i2_) {return user_attrib(_gs_,cst_overline_thickness,_i2_)} var a_string=caml_call1(_fn_,cst_string), a_name=caml_call1(_fn_,cst_name); function a_alignment_baseline(x) {return user_attrib(C[2],cst_alignment_baseline,x)} function a_dominant_baseline(x) {return user_attrib(C[6],cst_dominant_baseline,x)} var a_onabort=caml_call1(Xml[9],cst_onabort), a_onactivate=caml_call1(Xml[9],cst_onactivate), a_onbegin=caml_call1(Xml[9],cst_onbegin), a_onend=caml_call1(Xml[9],cst_onend), a_onerror=caml_call1(Xml[9],cst_onerror), a_onfocusin=caml_call1(Xml[9],cst_onfocusin), a_onfocusout=caml_call1(Xml[9],cst_onfocusout), a_onload=caml_call1(Xml[9],cst_onload), a_onrepeat=caml_call1(Xml[9],cst_onrepeat), a_onresize=caml_call1(Xml[9],cst_onresize), a_onscroll=caml_call1(Xml[9],cst_onscroll), a_onunload=caml_call1(Xml[9],cst_onunload), a_onzoom=caml_call1(Xml[9],cst_onzoom), a_onclick=caml_call1(Xml[10],cst_onclick), a_onmousedown=caml_call1(Xml[10],cst_onmousedown), a_onmouseup=caml_call1(Xml[10],cst_onmouseup), a_onmouseover=caml_call1(Xml[10],cst_onmouseover), a_onmouseout=caml_call1(Xml[10],cst_onmouseout), a_onmousemove=caml_call1(Xml[10],cst_onmousemove), a_ontouchstart=caml_call1(Xml[12],cst_ontouchstart), a_ontouchend=caml_call1(Xml[12],cst_ontouchend), a_ontouchmove=caml_call1(Xml[12],cst_ontouchmove), a_ontouchcancel=caml_call1(Xml[12],cst_ontouchcancel), a_stop_color=caml_call1(_fr_,cst_stop_color), _gt_=C[12]; function a_stop_opacity(_i1_) {return user_attrib(_gt_,cst_stop_opacity,_i1_)} var _gu_=C[18]; function a_stroke(_i0_){return user_attrib(_gu_,cst_stroke,_i0_)} var _gv_=C[10]; function a_stroke_width(_iZ_) {return user_attrib(_gv_,cst_stroke_width,_iZ_)} function a_stroke_linecap(x) {return user_attrib(C[4],cst_stroke_linecap,x)} function a_stroke_linejoin(x) {return user_attrib(C[4],cst_stroke_linejoin,x)} var _gw_=C[12]; function a_stroke_miterlimit(_iY_) {return user_attrib(_gw_,cst_stroke_miterlimit,_iY_)} function a_stroke_dasharray(x) {return user_attrib(C[19],cst_stroke_dasharray,x)} var _gx_=C[10]; function a_stroke_dashoffset(_iX_) {return user_attrib(_gx_,cst_stroke_dashoffset,_iX_)} var _gy_=C[12]; function a_stroke_opacity(_iW_) {return user_attrib(_gy_,cst_stroke_opacity,_iW_)} function svg(opt,children) {if(opt)var sth=opt[1],a=sth;else var a=0; var _iV_= [0, caml_call2 (_fn_, cst_xmlns_xlink, caml_call1(Xml[1][1],cst_http_www_w3_org_1999_xlink)), a], attribs= [0, caml_call2 (_fn_, cst_xmlns$3, caml_call1(Xml[1][1],cst_http_www_w3_org_2000_svg)), _iV_]; return star(cst_svg$0,[0,attribs],children)} function g(_iT_,_iU_){return star(cst_g,_iT_,_iU_)} function defs(_iR_,_iS_){return star(cst_defs,_iR_,_iS_)} function desc(_iP_,_iQ_){return unary(cst_desc,_iP_,_iQ_)} function title(_iN_,_iO_){return unary(cst_title,_iN_,_iO_)} function symbol(_iL_,_iM_){return star(cst_symbol,_iL_,_iM_)} function use(_iJ_,_iK_){return star(cst_use,_iJ_,_iK_)} function image(_iH_,_iI_){return star(cst_image,_iH_,_iI_)} function switch$0(_iF_,_iG_){return star(cst_switch,_iF_,_iG_)} function style(_iD_,_iE_){return unary(cst_style$0,_iD_,_iE_)} function path(_iB_,_iC_){return star(cst_path$0,_iB_,_iC_)} function rect(_iz_,_iA_){return star(cst_rect,_iz_,_iA_)} function circle(_ix_,_iy_){return star(cst_circle,_ix_,_iy_)} function ellipse(_iv_,_iw_){return star(cst_ellipse,_iv_,_iw_)} function line(_it_,_iu_){return star(cst_line,_it_,_iu_)} function polyline(_ir_,_is_){return star(cst_polyline,_ir_,_is_)} function polygon(_ip_,_iq_){return star(cst_polygon,_ip_,_iq_)} function text(_in_,_io_){return star(cst_text,_in_,_io_)} function tspan(_il_,_im_){return star(cst_tspan,_il_,_im_)} function tref(_ij_,_ik_){return star(cst_tref,_ij_,_ik_)} function textPath(_ih_,_ii_){return star(cst_textPath,_ih_,_ii_)} function altGlyph(_if_,_ig_){return unary(cst_altGlyph,_if_,_ig_)} function altGlyphDef(_id_,_ie_){return unary(cst_altGlyphDef,_id_,_ie_)} function altGlyphItem(_ib_,_ic_) {return star(cst_altGlyphItem,_ib_,_ic_)} function glyphRef(_h$_,_ia_){return nullary(cst_glyphRef$0,_h$_,_ia_)} function marker(_h9_,_h__){return star(cst_marker,_h9_,_h__)} function color_profile(_h7_,_h8_) {return star(cst_color_profile,_h7_,_h8_)} function linearGradient(_h5_,_h6_) {return star(cst_linearGradient,_h5_,_h6_)} function radialGradient(_h3_,_h4_) {return star(cst_radialGradient,_h3_,_h4_)} function stop(_h1_,_h2_){return star(cst_stop,_h1_,_h2_)} function pattern(_hZ_,_h0_){return star(cst_pattern,_hZ_,_h0_)} function clipPath(_hX_,_hY_){return star(cst_clipPath,_hX_,_hY_)} function filter(_hV_,_hW_){return star(cst_filter,_hV_,_hW_)} function feDistantLight(_hT_,_hU_) {return star(cst_feDistantLight,_hT_,_hU_)} function fePointLight(_hR_,_hS_) {return star(cst_fePointLight,_hR_,_hS_)} function feSpotLight(_hP_,_hQ_){return star(cst_feSpotLight,_hP_,_hQ_)} function feBlend(_hN_,_hO_){return star(cst_feBlend,_hN_,_hO_)} function feColorMatrix(_hL_,_hM_) {return star(cst_feColorMatrix,_hL_,_hM_)} function feComponentTransfer(_hJ_,_hK_) {return star(cst_feComponentTransfer,_hJ_,_hK_)} function feFuncA(_hH_,_hI_){return star(cst_feFuncA,_hH_,_hI_)} function feFuncG(_hF_,_hG_){return star(cst_feFuncG,_hF_,_hG_)} function feFuncB(_hD_,_hE_){return star(cst_feFuncB,_hD_,_hE_)} function feFuncR(_hB_,_hC_){return star(cst_feFuncR,_hB_,_hC_)} function feComposite(_hz_,_hA_){return star(cst_feComposite,_hz_,_hA_)} function feConvolveMatrix(_hx_,_hy_) {return star(cst_feConvolveMatrix,_hx_,_hy_)} function feDiffuseLighting(_hv_,_hw_) {return star(cst_feDiffuseLighting,_hv_,_hw_)} function feDisplacementMap(_ht_,_hu_) {return star(cst_feDisplacementMap,_ht_,_hu_)} function feFlood(_hr_,_hs_){return star(cst_feFlood,_hr_,_hs_)} function feGaussianBlur(_hp_,_hq_) {return star(cst_feGaussianBlur,_hp_,_hq_)} function feImage(_hn_,_ho_){return star(cst_feImage,_hn_,_ho_)} function feMerge(_hl_,_hm_){return star(cst_feMerge,_hl_,_hm_)} function feMorphology(_hj_,_hk_) {return star(cst_feMorphology,_hj_,_hk_)} function feOffset(_hh_,_hi_){return star(cst_feOffset,_hh_,_hi_)} function feSpecularLighting(_hf_,_hg_) {return star(cst_feSpecularLighting,_hf_,_hg_)} function feTile(_hd_,_he_){return star(cst_feTile,_hd_,_he_)} function feTurbulence(_hb_,_hc_) {return star(cst_feTurbulence,_hb_,_hc_)} function cursor(_g$_,_ha_){return star(cst_cursor,_g$_,_ha_)} function a(_g9_,_g__){return star(cst_a,_g9_,_g__)} function view(_g7_,_g8_){return star(cst_view,_g7_,_g8_)} function script(_g5_,_g6_){return unary(cst_script,_g5_,_g6_)} function animation(_g3_,_g4_){return star(cst_animate,_g3_,_g4_)} function set(_g1_,_g2_){return star(cst_set,_g1_,_g2_)} function animateMotion(_gZ_,_g0_) {return star(cst_animateMotion,_gZ_,_g0_)} function mpath(_gX_,_gY_){return star(cst_mpath,_gX_,_gY_)} function animateColor(_gV_,_gW_) {return star(cst_animateColor,_gV_,_gW_)} function animateTransform(_gT_,_gU_) {return star(cst_animateTransform,_gT_,_gU_)} function font(_gR_,_gS_){return star(cst_font,_gR_,_gS_)} function glyph(_gP_,_gQ_){return star(cst_glyph,_gP_,_gQ_)} function missing_glyph(_gN_,_gO_) {return star(cst_missing_glyph,_gN_,_gO_)} function hkern(_gL_,_gM_){return nullary(cst_hkern,_gL_,_gM_)} function vkern(_gJ_,_gK_){return nullary(cst_vkern,_gJ_,_gK_)} function font_face(_gH_,_gI_){return nullary(cst_font_face,_gH_,_gI_)} function font_face_src(_gF_,_gG_) {return star(cst_font_face_src,_gF_,_gG_)} function font_face_uri(_gD_,_gE_) {return star(cst_font_face_uri,_gD_,_gE_)} function font_face_format(_gB_,_gC_) {return nullary(cst_font_face_uri$0,_gB_,_gC_)} function font_face_name(_gz_,_gA_) {return nullary(cst_font_face_name,_gz_,_gA_)} function doc_toelt(x){return x} var I=_a_(Xml); function of_seq(s){return caml_call1(I[1],s)} function data(s){return caml_call1(Xml[18],s)} function leaf(tag,a,param){return caml_call2(Xml[20],a,tag)} function node(tag,a,elts){return caml_call3(Xml[21],a,tag,elts)} function coerce_elt(x){return x} var float_attrib=Xml[4],int_attrib=Xml[5],string_attrib=Xml[6]; function uri_attrib(a,s){return caml_call2(Xml[13],a,s)} var space_sep_attrib=Xml[7], comma_sep_attrib=Xml[8], Unsafe= [0, data, leaf, node, coerce_elt, float_attrib, int_attrib, string_attrib, uri_attrib, space_sep_attrib, comma_sep_attrib]; return [0, Xml, Info, _fk_, _fl_, tot, totl, toelt, toeltl, to_attrib, nullary, unary, star, to_xmlattribs, _fm_, _fn_, _fo_, _fp_, _fq_, user_attrib, _fm_, _fr_, metadata, foreignObject, pcdata, pcdata, a_version, a_baseProfile, a_x, a_y, a_width, a_height, a_preserveAspectRatio, a_contentScriptType, a_contentStyleType, a_zoomAndPan, a_href, a_xlink_href, a_requiredFeatures, a_requiredExtensions, a_systemLanguage, a_externalRessourcesRequired, a_id, a_user_data, a_xml_base, a_xml_lang, a_xml_space, a_type, a_media, a_xlink_title, a_class, a_style, a_transform, a_viewBox, a_d, a_pathLength, a_rx, a_ry, a_cx, a_cy, a_r, a_x1, a_y1, a_x2, a_y2, a_points, a_x_list, a_y_list, a_dx, a_dy, a_dx_list, a_dy_list, a_lengthAdjust, a_textLength, a_text_anchor, a_text_decoration, a_text_rendering, a_rotate, a_startOffset, a_method, a_spacing, a_glyphRef, a_format, a_markerUnits, a_refX, a_refY, a_markerWidth, a_markerHeight, a_orient, a_local, a_rendering_intent, a_gradientUnits, a_gradientTransform, a_spreadMethod, a_fx, a_fy, a_offset, a_patternUnits, a_patternContentUnits, a_patternTransform, a_clipPathUnits, a_maskUnits, a_maskContentUnits, a_primitiveUnits, a_filterRes, a_result, a_in, a_in2, a_azimuth, a_elevation, a_pointsAtX, a_pointsAtY, a_pointsAtZ, a_specularExponent, a_specularConstant, a_limitingConeAngle, a_mode, a_feColorMatrix_type, a_values, a_transfer_type, a_tableValues, a_intercept, a_amplitude, a_exponent, a_transfer_offset, a_feComposite_operator, a_k1, a_k2, a_k3, a_k4, a_order, a_kernelMatrix, a_divisor, a_bias, a_kernelUnitLength, a_targetX, a_targetY, a_edgeMode, a_preserveAlpha, a_surfaceScale, a_diffuseConstant, a_scale, a_xChannelSelector, a_yChannelSelector, a_stdDeviation, a_feMorphology_operator, a_radius, a_baseFrenquency, a_numOctaves, a_seed, a_stitchTiles, a_feTurbulence_type, a_xlink_show, a_xlink_actuate, a_target, a_viewTarget, a_attributeName, a_attributeType, a_begin, a_dur, a_min, a_max, a_restart, a_repeatCount, a_repeatDur, a_fill, a_animation_fill, a_calcMode, a_animation_values, a_keyTimes, a_keySplines, a_from, a_to, a_by, a_additive, a_accumulate, a_keyPoints, a_path, a_animateTransform_type, a_horiz_origin_x, a_horiz_origin_y, a_horiz_adv_x, a_vert_origin_x, a_vert_origin_y, a_vert_adv_y, a_unicode, a_glyph_name, a_orientation, a_arabic_form, a_lang, a_u1, a_u2, a_g1, a_g2, a_k, a_font_family, a_font_style, a_font_variant, a_font_weight, a_font_stretch, a_font_size, a_unicode_range, a_units_per_em, a_stemv, a_stemh, a_slope, a_cap_height, a_x_height, a_accent_height, a_ascent, a_widths, a_bbox, a_ideographic, a_alphabetic, a_mathematical, a_hanging, a_videographic, a_v_alphabetic, a_v_mathematical, a_v_hanging, a_underline_position, a_underline_thickness, a_strikethrough_position, a_strikethrough_thickness, a_overline_position, a_overline_thickness, a_string, a_name, a_alignment_baseline, a_dominant_baseline, a_onabort, a_onactivate, a_onbegin, a_onend, a_onerror, a_onfocusin, a_onfocusout, a_onload, a_onrepeat, a_onresize, a_onscroll, a_onunload, a_onzoom, a_onclick, a_onmousedown, a_onmouseup, a_onmouseover, a_onmouseout, a_onmousemove, a_ontouchstart, a_ontouchend, a_ontouchmove, a_ontouchcancel, a_stop_color, a_stop_opacity, a_stroke, a_stroke_width, a_stroke_linecap, a_stroke_linejoin, a_stroke_miterlimit, a_stroke_dasharray, a_stroke_dashoffset, a_stroke_opacity, svg, g, defs, desc, title, symbol, use, image, switch$0, style, path, rect, circle, ellipse, line, polyline, polygon, text, tspan, tref, textPath, altGlyph, altGlyphDef, altGlyphItem, glyphRef, marker, color_profile, linearGradient, radialGradient, stop, pattern, clipPath, filter, feDistantLight, fePointLight, feSpotLight, feBlend, feColorMatrix, feComponentTransfer, feFuncA, feFuncG, feFuncB, feFuncR, feComposite, feConvolveMatrix, feDiffuseLighting, feDisplacementMap, feFlood, feGaussianBlur, feImage, feMerge, feMorphology, feOffset, feSpecularLighting, feTile, feTurbulence, cursor, a, view, script, animation, set, animateMotion, mpath, animateColor, animateTransform, font, glyph, missing_glyph, hkern, vkern, font_face, font_face_src, font_face_uri, font_face_format, font_face_name, doc_toelt, I, of_seq, Unsafe]} function Wrapped_functions(Xml) {function string_of_alignment_baseline(param) {return -72987685 <= param ?354434192 <= param ?881373037 <= param ?1018879136 <= param?cst_after_edge:cst_alphabetic$0 :726666127 <= param?cst_auto:cst_hanging$0 :15943541 === param ?cst_middle :218255880 <= param?cst_mathematical$0:cst_inherit :-840627829 <= param ?-415175851 <= param ?-354838363 <= param?cst_baseline:cst_central :-693588957 <= param?cst_ideographic$0:cst_text_before_edge :-863864035 <= param?cst_before_edge:cst_text_after_edge} function string_of_big_variant(param) {return 3350435 <= param ?476616093 <= param ?744337004 <= param ?914009117 <= param ?970483178 <= param ?1040349136 <= param ?1071251601 <= param?cst_stitch:cst_onRequest :990972795 <= param?cst_repeat:cst_wrap :958206052 <= param?cst_remove:cst_reflect :870530776 <= param ?884917925 <= param ?889668530 <= param?cst_noStitch:cst$35 :881966452 <= param?cst_over:cst_none$0 :861714216 <= param?cst_medial:cst_never :568588039 <= param ?716799946 <= param ?726666127 <= param ?737755699 <= param?cst_butt:cst_auto$0 :726615284 <= param?cst_atop:cst_arithmetic :698610924 <= param?cst_underline:cst_gamma :512807795 <= param ?518168424 <= param ?557106693 <= param?cst_linear:cst_overline :517347077 <= param?cst_onLoad:cst_turbulence :504440814 <= param?cst_table:cst_geometricPrecision :163178525 <= param ?316735838 <= param ?389604418 <= param ?463106021 <= param ?466749770 <= param?cst_optimizeSpeed:cst_miter :418396260 <= param?cst_initial:cst_start :384893183 <= param?cst_whenNotActive:cst_identity :201080426 <= param ?289998318 <= param ?289998319 <= param?cst_skewY:cst_skewX :226915517 <= param?cst_square:cst_scale$0 :172069535 <= param?cst_exact:cst_perceptual :4393399 <= param ?9660462 <= param ?106228547 <= param ?118574553 <= param?cst_discrete:cst_erode :15943541 <= param?cst_middle$0:cst_round :4401019 <= param?cst_xor:cst_XML :3901504 <= param ?4000051 <= param ?4153707 <= param?cst_sum:cst_pad :3954798 <= param?cst_out:cst_new :3455931 <= param?cst_end:cst_CSS :-453122489 <= param ?-72987685 <= param ?66 <= param ?72 <= param ?86 <= param ?16389 <= param?cst_in$1:cst_v :82 <= param?cst_r$0:cst_h :71 <= param?cst_g$0:cst_b :-68046964 <= param ?-4932997 <= param ?65 <= param?cst_a$0:cst_rotate$0 :-22441528 <= param?cst_disable:cst_screen :-72678338 <= param?cst_absolute_colorimetric:cst_inherit$0 :-262362527 <= param ?-197222844 <= param ?-115006565 <= param ?-76840209 <= param?cst_always:cst_spacingAndGlyphs :-126259180 <= param?cst_replace:cst_multiply :-197983439 <= param?cst_spline:cst_matrix :-384499551 <= param ?-318472885 <= param ?-313337870 <= param?cst_saturation:cst_dilate :-346900690 <= param?cst_translate:cst_default :-415993185 <= param?cst_lighten:cst_normal :-839430911 <= param ?-672592881 <= param ?-552838301 <= param ?-505547199 <= param ?-474415497 <= param?cst_freeze:cst_magnify :-543144685 <= param?cst_hueRotate:cst_spacing$0 :-621842423 <= param?cst_fractalNoise:cst_saturate :-797470191 <= param ?-699926424 <= param ?-689066995 <= param ?cst_userSpaceOnUse :cst_objectBoundingBox :-707876225 <= param?cst_darken:cst_paced :-824137927 <= param?cst_isolated:cst_optimizeLegibility :-951087346 <= param ?-912466532 <= param ?-851306022 <= param ?-851300629 <= param?cst_luminanceToAlpha:cst_line_through :-912009552 <= param?cst_other:cst_terminal :-937074372 <= param?cst_blink:cst_stroke_width$0 :-1044642615 === param ?cst_relative_colorimetric :-1014056864 <= param ?-1012636187 <= param?cst_stretch:cst_bevel :-1024851605 <= param?cst_duplicate:cst_preserve} var _eX_=Stdlib[30]; function _eY_(param) {var b=param[2],a=param[1];return caml_call3(Stdlib_Printf[4],_S_,a,b)} var _eZ_=0; function string_of_coords(_fj_){return list(_eZ_,_eY_,_fj_)} function string_of_dominant_baseline(param) {return -72987685 <= param ?354434192 <= param ?881373037 <= param ?945233102 <= param?cst_nochange:cst_alphabetic$1 :726666127 <= param?cst_auto$1:cst_hanging$1 :15943541 === param ?cst_middle$1 :218255880 <= param?cst_mathematical$1:cst_inherit$1 :-840627829 <= param ?-504734109 <= param ?-415175851 <= param?cst_central$0:cst_usescript :-693588957 <= param?cst_ideographic$1:cst_textbeforeedge :-880506735 <= param?cst_resetsize:cst_textafteredge} function string_of_in_value(param) {if(typeof param === "number") return 198492909 <= param ?885982307 <= param ?976982182 <= param?cst_strokePaint:cst_sourceAlpha :768130555 <= param?cst_fillPaint:cst_sourceGraphic :-522189715 <= param?cst_backgroundImage:cst_backgroundAlpha; var svg=param[2]; return svg} var _e0_=Stdlib[33],_e1_=0; function string_of_lengths(_fi_) {return list(_e1_,string_of_length,_fi_)} function string_of_percentage(x) {var _fh_=string_of_number(x); return caml_call2(Stdlib[28],_fh_,cst$36)} function string_of_fourfloats(param) {var d=param[4], c=param[3], b=param[2], a=param[1], _fd_=string_of_number(d), _fe_=string_of_number(c), _ff_=string_of_number(b), _fg_=string_of_number(a); return caml_call5(Stdlib_Printf[4],_T_,_fg_,_ff_,_fe_,_fd_)} function string_of_number_optional_numb(param) {var _fb_=param[2],_fc_=param[1]; if(_fb_){var y=_fb_[1];return caml_call3(Stdlib_Printf[4],_U_,_fc_,y)} return caml_call2(Stdlib_Printf[4],_V_,_fc_)} var _e2_=0; function string_of_numbers(_fa_) {return list(_e2_,string_of_number,_fa_)} function string_of_numbers_semicolon(_e$_) {return list(_W_,string_of_number,_e$_)} function string_of_offset(param) {if(-488794310 <= param[1]) {var x=param[2];return string_of_percentage(x)} var x$0=param[2]; return string_of_number(x$0)} function string_of_orient(param) {if(param){var svg=param[1];return string_of_angle(svg)} return cst_auto$2} function string_of_strokedasharray(l) {return l?list(0,string_of_length,l):cst_none$1} function string_of_transform(param) {var _e4_=param[1]; if(-4932997 <= _e4_) {if(289998318 <= _e4_) {if(289998319 <= _e4_) {var angle=param[2],_e5_=string_of_angle(angle); return caml_call2(Stdlib_Printf[4],_X_,_e5_)} var angle$0=param[2],_e6_=string_of_angle(angle$0); return caml_call2(Stdlib_Printf[4],_Y_,_e6_)} if(201080426 <= _e4_) {var x=param[2],_e7_=string_of_number_optional_numb(x); return caml_call2(Stdlib_Printf[4],_Z_,_e7_)} var match=param[2],x$0=match[2],angle$1=match[1]; if(x$0) var match$0=x$0[1], y=match$0[2], x$1=match$0[1], _e8_=caml_call3(Stdlib_Printf[4],___,x$1,y); else var _e8_=cst$37; var _e9_=string_of_angle(angle$1); return caml_call3(Stdlib_Printf[4],_$_,_e9_,_e8_)} if(-262362527 <= _e4_) {var match$1=param[2], f=match$1[6], e=match$1[5], d=match$1[4], c=match$1[3], b=match$1[2], a=match$1[1]; return caml_call7(Stdlib_Printf[4],_aa_,a,b,c,d,e,f)} var x$2=param[2],_e__=string_of_number_optional_numb(x$2); return caml_call2(Stdlib_Printf[4],_ab_,_e__)} function string_of_transforms(l) {var _e3_=caml_call2(Stdlib_List[19],string_of_transform,l); return caml_call2(Stdlib_String[6],cst$38,_e3_)} return [0, Xml, string_of_alignment_baseline, string_of_big_variant, _eX_, string_of_coords, string_of_dominant_baseline, string_of_in_value, _e0_, string_of_length, string_of_lengths, string_of_number, string_of_percentage, string_of_fourfloats, string_of_number_optional_numb, string_of_numbers, string_of_numbers_semicolon, string_of_offset, string_of_orient, string_of_paint, string_of_strokedasharray, string_of_transform, string_of_transforms]} function _ac_(_eT_,_eS_) {var _eU_=Make_with_wrapped_functions(_eT_,_eS_), _eV_=_eU_[342], _eW_=_eU_[2]; return [0, _eU_[1], [0,_eW_[1],_eW_[2],_eW_[4],_eW_[5],_eW_[6],_eW_[7],_eW_[3]], _eU_[3], _eU_[4], _eU_[26], _eU_[27], _eU_[28], _eU_[29], _eU_[30], _eU_[31], _eU_[32], _eU_[33], _eU_[34], _eU_[35], _eU_[36], _eU_[37], _eU_[38], _eU_[39], _eU_[40], _eU_[41], _eU_[42], _eU_[43], _eU_[44], _eU_[45], _eU_[46], _eU_[47], _eU_[48], _eU_[49], _eU_[50], _eU_[51], _eU_[52], _eU_[53], _eU_[54], _eU_[55], _eU_[56], _eU_[57], _eU_[58], _eU_[59], _eU_[60], _eU_[61], _eU_[62], _eU_[63], _eU_[64], _eU_[65], _eU_[66], _eU_[67], _eU_[68], _eU_[69], _eU_[70], _eU_[71], _eU_[72], _eU_[73], _eU_[74], _eU_[75], _eU_[76], _eU_[77], _eU_[78], _eU_[79], _eU_[80], _eU_[81], _eU_[82], _eU_[83], _eU_[84], _eU_[85], _eU_[86], _eU_[87], _eU_[88], _eU_[89], _eU_[90], _eU_[91], _eU_[92], _eU_[93], _eU_[94], _eU_[95], _eU_[96], _eU_[97], _eU_[98], _eU_[99], _eU_[100], _eU_[101], _eU_[102], _eU_[103], _eU_[104], _eU_[105], _eU_[106], _eU_[107], _eU_[108], _eU_[109], _eU_[110], _eU_[111], _eU_[112], _eU_[113], _eU_[114], _eU_[115], _eU_[116], _eU_[117], _eU_[118], _eU_[119], _eU_[120], _eU_[121], _eU_[122], _eU_[123], _eU_[124], _eU_[125], _eU_[126], _eU_[127], _eU_[128], _eU_[129], _eU_[130], _eU_[131], _eU_[132], _eU_[133], _eU_[134], _eU_[135], _eU_[136], _eU_[137], _eU_[138], _eU_[139], _eU_[140], _eU_[141], _eU_[142], _eU_[143], _eU_[144], _eU_[145], _eU_[146], _eU_[147], _eU_[148], _eU_[149], _eU_[150], _eU_[151], _eU_[152], _eU_[153], _eU_[154], _eU_[155], _eU_[156], _eU_[157], _eU_[158], _eU_[159], _eU_[160], _eU_[161], _eU_[162], _eU_[163], _eU_[164], _eU_[165], _eU_[166], _eU_[167], _eU_[168], _eU_[169], _eU_[170], _eU_[171], _eU_[172], _eU_[173], _eU_[174], _eU_[175], _eU_[176], _eU_[177], _eU_[178], _eU_[179], _eU_[180], _eU_[181], _eU_[182], _eU_[183], _eU_[184], _eU_[185], _eU_[186], _eU_[187], _eU_[188], _eU_[189], _eU_[190], _eU_[191], _eU_[192], _eU_[193], _eU_[194], _eU_[195], _eU_[196], _eU_[197], _eU_[198], _eU_[199], _eU_[200], _eU_[201], _eU_[202], _eU_[203], _eU_[204], _eU_[205], _eU_[206], _eU_[207], _eU_[208], _eU_[209], _eU_[210], _eU_[211], _eU_[212], _eU_[213], _eU_[214], _eU_[215], _eU_[216], _eU_[217], _eU_[218], _eU_[219], _eU_[220], _eU_[221], _eU_[222], _eU_[223], _eU_[224], _eU_[225], _eU_[226], _eU_[227], _eU_[228], _eU_[229], _eU_[253], _eU_[254], _eU_[255], _eU_[256], _eU_[257], _eU_[258], _eU_[259], _eU_[260], _eU_[261], _eU_[262], _eU_[230], _eU_[231], _eU_[232], _eU_[233], _eU_[234], _eU_[235], _eU_[236], _eU_[237], _eU_[238], _eU_[239], _eU_[240], _eU_[241], _eU_[242], _eU_[243], _eU_[244], _eU_[245], _eU_[246], _eU_[247], _eU_[248], _eU_[249], _eU_[250], _eU_[251], _eU_[252], _eU_[24], _eU_[263], _eU_[264], _eU_[265], _eU_[266], _eU_[267], _eU_[268], _eU_[269], _eU_[270], _eU_[271], _eU_[272], _eU_[273], _eU_[274], _eU_[275], _eU_[276], _eU_[277], _eU_[278], _eU_[279], _eU_[280], _eU_[281], _eU_[282], _eU_[283], _eU_[284], _eU_[285], _eU_[286], _eU_[287], _eU_[288], _eU_[289], _eU_[290], _eU_[291], _eU_[292], _eU_[293], _eU_[294], _eU_[295], _eU_[296], _eU_[297], _eU_[298], _eU_[299], _eU_[300], _eU_[301], _eU_[302], _eU_[303], _eU_[304], _eU_[305], _eU_[306], _eU_[307], _eU_[308], _eU_[309], _eU_[310], _eU_[311], _eU_[312], _eU_[313], _eU_[314], _eU_[315], _eU_[316], _eU_[317], _eU_[318], _eU_[319], _eU_[320], _eU_[321], _eU_[322], _eU_[323], _eU_[324], _eU_[325], _eU_[326], _eU_[327], _eU_[328], _eU_[329], _eU_[330], _eU_[331], _eU_[332], _eU_[333], _eU_[334], _eU_[335], _eU_[336], _eU_[337], _eU_[338], _eU_[22], _eU_[23], _eU_[25], _eU_[341], _eU_[5], _eU_[6], _eU_[7], _eU_[8], _eU_[339], _eU_[13], _eU_[9], [0, _eV_[1], _eV_[3], _eV_[2], _eV_[4], _eV_[7], _eV_[5], _eV_[6], _eV_[8], _eV_[9], _eV_[10]]]} function _ad_(_eQ_) {var _eR_=Wrapped_functions(_eQ_); return [0, _eR_[1], _eR_[2], _eR_[4], _eR_[3], _eR_[5], _eR_[6], _eR_[13], _eR_[7], _eR_[8], _eR_[9], _eR_[10], _eR_[11], _eR_[14], _eR_[15], _eR_[16], _eR_[17], _eR_[18], _eR_[19], _eR_[20], _eR_[21], _eR_[22]]} var Svg_f= [0, function(_eM_) {var _eL_=Wrapped_functions(_eM_), _eP_= Make_with_wrapped_functions (_eM_, [0, _eL_[1], _eL_[2], _eL_[4], _eL_[3], _eL_[5], _eL_[6], _eL_[13], _eL_[7], _eL_[8], _eL_[9], _eL_[10], _eL_[11], _eL_[14], _eL_[15], _eL_[16], _eL_[17], _eL_[18], _eL_[19], _eL_[20], _eL_[21], _eL_[22]]), _eN_=_eP_[342], _eO_=_eP_[2]; return [0, _eP_[1], [0,_eO_[1],_eO_[2],_eO_[4],_eO_[5],_eO_[6],_eO_[7],_eO_[3]], _eP_[3], _eP_[4], _eP_[26], _eP_[27], _eP_[28], _eP_[29], _eP_[30], _eP_[31], _eP_[32], _eP_[33], _eP_[34], _eP_[35], _eP_[36], _eP_[37], _eP_[38], _eP_[39], _eP_[40], _eP_[41], _eP_[42], _eP_[43], _eP_[44], _eP_[45], _eP_[46], _eP_[47], _eP_[48], _eP_[49], _eP_[50], _eP_[51], _eP_[52], _eP_[53], _eP_[54], _eP_[55], _eP_[56], _eP_[57], _eP_[58], _eP_[59], _eP_[60], _eP_[61], _eP_[62], _eP_[63], _eP_[64], _eP_[65], _eP_[66], _eP_[67], _eP_[68], _eP_[69], _eP_[70], _eP_[71], _eP_[72], _eP_[73], _eP_[74], _eP_[75], _eP_[76], _eP_[77], _eP_[78], _eP_[79], _eP_[80], _eP_[81], _eP_[82], _eP_[83], _eP_[84], _eP_[85], _eP_[86], _eP_[87], _eP_[88], _eP_[89], _eP_[90], _eP_[91], _eP_[92], _eP_[93], _eP_[94], _eP_[95], _eP_[96], _eP_[97], _eP_[98], _eP_[99], _eP_[100], _eP_[101], _eP_[102], _eP_[103], _eP_[104], _eP_[105], _eP_[106], _eP_[107], _eP_[108], _eP_[109], _eP_[110], _eP_[111], _eP_[112], _eP_[113], _eP_[114], _eP_[115], _eP_[116], _eP_[117], _eP_[118], _eP_[119], _eP_[120], _eP_[121], _eP_[122], _eP_[123], _eP_[124], _eP_[125], _eP_[126], _eP_[127], _eP_[128], _eP_[129], _eP_[130], _eP_[131], _eP_[132], _eP_[133], _eP_[134], _eP_[135], _eP_[136], _eP_[137], _eP_[138], _eP_[139], _eP_[140], _eP_[141], _eP_[142], _eP_[143], _eP_[144], _eP_[145], _eP_[146], _eP_[147], _eP_[148], _eP_[149], _eP_[150], _eP_[151], _eP_[152], _eP_[153], _eP_[154], _eP_[155], _eP_[156], _eP_[157], _eP_[158], _eP_[159], _eP_[160], _eP_[161], _eP_[162], _eP_[163], _eP_[164], _eP_[165], _eP_[166], _eP_[167], _eP_[168], _eP_[169], _eP_[170], _eP_[171], _eP_[172], _eP_[173], _eP_[174], _eP_[175], _eP_[176], _eP_[177], _eP_[178], _eP_[179], _eP_[180], _eP_[181], _eP_[182], _eP_[183], _eP_[184], _eP_[185], _eP_[186], _eP_[187], _eP_[188], _eP_[189], _eP_[190], _eP_[191], _eP_[192], _eP_[193], _eP_[194], _eP_[195], _eP_[196], _eP_[197], _eP_[198], _eP_[199], _eP_[200], _eP_[201], _eP_[202], _eP_[203], _eP_[204], _eP_[205], _eP_[206], _eP_[207], _eP_[208], _eP_[209], _eP_[210], _eP_[211], _eP_[212], _eP_[213], _eP_[214], _eP_[215], _eP_[216], _eP_[217], _eP_[218], _eP_[219], _eP_[220], _eP_[221], _eP_[222], _eP_[223], _eP_[224], _eP_[225], _eP_[226], _eP_[227], _eP_[228], _eP_[229], _eP_[253], _eP_[254], _eP_[255], _eP_[256], _eP_[257], _eP_[258], _eP_[259], _eP_[260], _eP_[261], _eP_[262], _eP_[230], _eP_[231], _eP_[232], _eP_[233], _eP_[234], _eP_[235], _eP_[236], _eP_[237], _eP_[238], _eP_[239], _eP_[240], _eP_[241], _eP_[242], _eP_[243], _eP_[244], _eP_[245], _eP_[246], _eP_[247], _eP_[248], _eP_[249], _eP_[250], _eP_[251], _eP_[252], _eP_[24], _eP_[263], _eP_[264], _eP_[265], _eP_[266], _eP_[267], _eP_[268], _eP_[269], _eP_[270], _eP_[271], _eP_[272], _eP_[273], _eP_[274], _eP_[275], _eP_[276], _eP_[277], _eP_[278], _eP_[279], _eP_[280], _eP_[281], _eP_[282], _eP_[283], _eP_[284], _eP_[285], _eP_[286], _eP_[287], _eP_[288], _eP_[289], _eP_[290], _eP_[291], _eP_[292], _eP_[293], _eP_[294], _eP_[295], _eP_[296], _eP_[297], _eP_[298], _eP_[299], _eP_[300], _eP_[301], _eP_[302], _eP_[303], _eP_[304], _eP_[305], _eP_[306], _eP_[307], _eP_[308], _eP_[309], _eP_[310], _eP_[311], _eP_[312], _eP_[313], _eP_[314], _eP_[315], _eP_[316], _eP_[317], _eP_[318], _eP_[319], _eP_[320], _eP_[321], _eP_[322], _eP_[323], _eP_[324], _eP_[325], _eP_[326], _eP_[327], _eP_[328], _eP_[329], _eP_[330], _eP_[331], _eP_[332], _eP_[333], _eP_[334], _eP_[335], _eP_[336], _eP_[337], _eP_[338], _eP_[22], _eP_[23], _eP_[25], _eP_[341], _eP_[5], _eP_[6], _eP_[7], _eP_[8], _eP_[339], _eP_[13], _eP_[9], [0, _eN_[1], _eN_[3], _eN_[2], _eN_[4], _eN_[7], _eN_[5], _eN_[6], _eN_[8], _eN_[9], _eN_[10]]]}, _ad_, _ac_]; caml_register_global(1101,Svg_f,"Svg_f"); function Make_with_wrapped_functions$0(Xml,C,Svg) {var doctype=compose_doctype(cst_html,0), Info= [0, content_type$0, alternative_content_types, version$0, standard$0, namespace$0, doctype, emptytags], _aH_=Xml[2], _aI_=Xml[3]; function to_xmlattribs(x){return x} function to_attrib(x){return x} var _aJ_=Xml[4],_aK_=Xml[5],_aL_=Xml[6]; function uri_attrib(a,s){return caml_call2(Xml[13],a,s)} var _aM_=Xml[7],_aN_=Xml[8]; function user_attrib(f,name,v) {var _eK_=caml_call2(Xml[1][2],f,v); return caml_call2(Xml[6],name,_eK_)} var _aO_=C[3]; function bool_attrib(_eI_,_eJ_){return user_attrib(_aO_,_eI_,_eJ_)} function constant_attrib(a,param) {return caml_call2(_aL_,a,caml_call1(Xml[1][1],a))} function linktypes_attrib(name,x){return user_attrib(C[8],name,x)} function mediadesc_attrib(name,x){return user_attrib(C[9],name,x)} function srcset_attrib(name,x){return user_attrib(C[14],name,x)} var a_class=caml_call1(_aM_,cst_class$0),a_id=caml_call1(_aL_,cst_id$0); function a_user_data(name) {return caml_call1(_aL_,caml_call2(Stdlib[28],cst_data$0,name))} var a_title=caml_call1(_aL_,cst_title$0), a_xml_lang=caml_call1(_aL_,cst_xml_lang$0), a_lang=caml_call1(_aL_,cst_lang$0), a_style=caml_call1(_aL_,cst_style$1), a_property=caml_call1(_aL_,cst_property), a_onabort=caml_call1(Xml[9],cst_onabort$0), a_onafterprint=caml_call1(Xml[9],cst_onafterprint), a_onbeforeprint=caml_call1(Xml[9],cst_onbeforeprint), a_onbeforeunload=caml_call1(Xml[9],cst_onbeforeunload), a_onblur=caml_call1(Xml[9],cst_onblur), a_oncanplay=caml_call1(Xml[9],cst_oncanplay), a_oncanplaythrough=caml_call1(Xml[9],cst_oncanplaythrough), a_onchange=caml_call1(Xml[9],cst_onchange), a_ondurationchange=caml_call1(Xml[9],cst_ondurationchange), a_onemptied=caml_call1(Xml[9],cst_onemptied), a_onended=caml_call1(Xml[9],cst_onended), a_onerror=caml_call1(Xml[9],cst_onerror$0), a_onfocus=caml_call1(Xml[9],cst_onfocus), a_onformchange=caml_call1(Xml[9],cst_onformchange), a_onforminput=caml_call1(Xml[9],cst_onforminput), a_onhashchange=caml_call1(Xml[9],cst_onhashchange), a_oninput=caml_call1(Xml[9],cst_oninput), a_oninvalid=caml_call1(Xml[9],cst_oninvalid), a_onoffline=caml_call1(Xml[9],cst_onoffline), a_ononline=caml_call1(Xml[9],cst_ononline), a_onpause=caml_call1(Xml[9],cst_onpause), a_onplay=caml_call1(Xml[9],cst_onplay), a_onplaying=caml_call1(Xml[9],cst_onplaying), a_onpagehide=caml_call1(Xml[9],cst_onpagehide), a_onpageshow=caml_call1(Xml[9],cst_onpageshow), a_onpopstate=caml_call1(Xml[9],cst_onpopstate), a_onprogress=caml_call1(Xml[9],cst_onprogress), a_onratechange=caml_call1(Xml[9],cst_onratechange), a_onreadystatechange=caml_call1(Xml[9],cst_onreadystatechange), a_onredo=caml_call1(Xml[9],cst_onredo), a_onresize=caml_call1(Xml[9],cst_onresize$0), a_onscroll=caml_call1(Xml[9],cst_onscroll$0), a_onseeked=caml_call1(Xml[9],cst_onseeked), a_onseeking=caml_call1(Xml[9],cst_onseeking), a_onselect=caml_call1(Xml[9],cst_onselect), a_onshow=caml_call1(Xml[9],cst_onshow), a_onstalled=caml_call1(Xml[9],cst_onstalled), a_onstorage=caml_call1(Xml[9],cst_onstorage), a_onsubmit=caml_call1(Xml[9],cst_onsubmit), a_onsuspend=caml_call1(Xml[9],cst_onsuspend), a_ontimeupdate=caml_call1(Xml[9],cst_ontimeupdate), a_onundo=caml_call1(Xml[9],cst_onundo), a_onunload=caml_call1(Xml[9],cst_onunload$0), a_onvolumechange=caml_call1(Xml[9],cst_onvolumechange), a_onwaiting=caml_call1(Xml[9],cst_onwaiting), a_onload=caml_call1(Xml[9],cst_onload$0), a_onloadeddata=caml_call1(Xml[9],cst_onloadeddata), a_onloadedmetadata=caml_call1(Xml[9],cst_onloadedmetadata), a_onloadstart=caml_call1(Xml[9],cst_onloadstart), a_onmessage=caml_call1(Xml[9],cst_onmessage), a_onmousewheel=caml_call1(Xml[9],cst_onmousewheel), a_onclick=caml_call1(Xml[10],cst_onclick$0), a_oncontextmenu=caml_call1(Xml[10],cst_oncontextmenu), a_ondblclick=caml_call1(Xml[10],cst_ondblclick), a_ondrag=caml_call1(Xml[10],cst_ondrag), a_ondragend=caml_call1(Xml[10],cst_ondragend), a_ondragenter=caml_call1(Xml[10],cst_ondragenter), a_ondragleave=caml_call1(Xml[10],cst_ondragleave), a_ondragover=caml_call1(Xml[10],cst_ondragover), a_ondragstart=caml_call1(Xml[10],cst_ondragstart), a_ondrop=caml_call1(Xml[10],cst_ondrop), a_onmousedown=caml_call1(Xml[10],cst_onmousedown$0), a_onmouseup=caml_call1(Xml[10],cst_onmouseup$0), a_onmouseover=caml_call1(Xml[10],cst_onmouseover$0), a_onmousemove=caml_call1(Xml[10],cst_onmousemove$0), a_onmouseout=caml_call1(Xml[10],cst_onmouseout$0), a_ontouchstart=caml_call1(Xml[12],cst_ontouchstart$0), a_ontouchend=caml_call1(Xml[12],cst_ontouchend$0), a_ontouchmove=caml_call1(Xml[12],cst_ontouchmove$0), a_ontouchcancel=caml_call1(Xml[12],cst_ontouchcancel$0), a_onkeypress=caml_call1(Xml[11],cst_onkeypress), a_onkeydown=caml_call1(Xml[11],cst_onkeydown), a_onkeyup=caml_call1(Xml[11],cst_onkeyup), a_version=caml_call1(_aL_,cst_version$0); function a_xmlns(x){return user_attrib(C[2],cst_xmlns$4,x)} function a_manifest(_eH_){return uri_attrib(cst_manifest,_eH_)} function a_cite(_eG_){return uri_attrib(cst_cite,_eG_)} function a_xml_space(x){return user_attrib(C[2],cst_xml_space$0,x)} function a_accesskey(c){return user_attrib(C[5],cst_accesskey,c)} var a_charset=caml_call1(_aL_,cst_charset), a_accept_charset=caml_call1(_aM_,cst_accept_charset), a_accept=caml_call1(_aN_,cst_accept); function a_href(_eF_){return uri_attrib(cst_href$0,_eF_)} var a_hreflang=caml_call1(_aL_,cst_hreflang); function a_download(file){return user_attrib(C[16],cst_download,file)} function a_rel(_eE_){return linktypes_attrib(cst_rel,_eE_)} var a_tabindex=caml_call1(_aK_,cst_tabindex), a_mime_type=caml_call1(_aL_,cst_type$4), a_alt=caml_call1(_aL_,cst_alt); function a_height(p){return caml_call2(_aK_,cst_height$0,p)} function a_src(_eD_){return uri_attrib(cst_src,_eD_)} function a_width(p){return caml_call2(_aK_,cst_width$0,p)} var a_for=caml_call1(_aL_,cst_for), a_for_list=caml_call1(_aM_,cst_for$0); function a_selected(_eC_){return constant_attrib(cst_selected,_eC_)} var a_text_value=caml_call1(_aL_,cst_value), a_int_value=caml_call1(_aK_,cst_value$0), a_value=caml_call1(_aL_,cst_value$1), a_float_value=caml_call1(_aJ_,cst_value$2); function a_action(_eB_){return uri_attrib(cst_action,_eB_)} function a_formmethod(x){return user_attrib(C[2],cst_method$0,x)} var a_enctype=caml_call1(_aL_,cst_enctype); function a_checked(_eA_){return constant_attrib(cst_checked,_eA_)} function a_disabled(_ez_){return constant_attrib(cst_disabled,_ez_)} function a_readonly(_ey_){return constant_attrib(cst_readonly,_ey_)} var a_maxlength=caml_call1(_aK_,cst_maxlength), a_minlength=caml_call1(_aK_,cst_minlength), a_name=caml_call1(_aL_,cst_name$0); function a_allowfullscreen(_ex_) {return constant_attrib(cst_allowfullscreen,_ex_)} function a_allowpaymentrequest(_ew_) {return constant_attrib(cst_allowpaymentrequest,_ew_)} function a_referrerpolicy(x) {return user_attrib(C[10],cst_referrerpolicy,x)} function a_autocomplete(x){return user_attrib(C[4],cst_autocomplete,x)} function a_async(_ev_){return constant_attrib(cst_async,_ev_)} function a_autofocus(_eu_){return constant_attrib(cst_autofocus,_eu_)} function a_autoplay(_et_){return constant_attrib(cst_autoplay,_et_)} function a_muted(_es_){return constant_attrib(cst_muted,_es_)} function a_crossorigin(x){return user_attrib(C[2],cst_crossorigin,x)} var a_integrity=caml_call1(_aL_,cst_integrity), a_mediagroup=caml_call1(_aL_,cst_mediagroup), a_challenge=caml_call1(_aL_,cst_challenge); function a_contenteditable(ce) {return bool_attrib(cst_contenteditable,ce)} var a_contextmenu=caml_call1(_aL_,cst_contextmenu); function a_controls(_er_){return constant_attrib(cst_controls,_er_)} function a_dir(x){return user_attrib(C[2],cst_dir,x)} function a_draggable(d){return bool_attrib(cst_draggable,d)} var a_form=caml_call1(_aL_,cst_form); function a_formaction(_eq_){return uri_attrib(cst_formaction,_eq_)} var a_formenctype=caml_call1(_aL_,cst_formenctype); function a_formnovalidate(_ep_) {return constant_attrib(cst_formnovalidate,_ep_)} var a_formtarget=caml_call1(_aL_,cst_formtarget); function a_hidden(_eo_){return constant_attrib(cst_hidden,_eo_)} var a_high=caml_call1(_aJ_,cst_high); function a_icon(_en_){return uri_attrib(cst_icon,_en_)} function a_ismap(_em_){return constant_attrib(cst_ismap,_em_)} var a_keytype=caml_call1(_aL_,cst_keytype), a_list=caml_call1(_aL_,cst_list); function a_loop(_el_){return constant_attrib(cst_loop,_el_)} var a_low=caml_call1(_aJ_,cst_low), a_max=caml_call1(_aJ_,cst_max$0), _aP_=C[7]; function a_input_max(_ek_){return user_attrib(_aP_,cst_max$1,_ek_)} var a_min=caml_call1(_aJ_,cst_min$0),_aQ_=C[7]; function a_input_min(_ej_){return user_attrib(_aQ_,cst_min$1,_ej_)} function a_inputmode(x){return user_attrib(C[2],cst_inputmode,x)} function a_novalidate(_ei_){return constant_attrib(cst_novalidate,_ei_)} function a_open(_eh_){return constant_attrib(cst_open,_eh_)} var a_optimum=caml_call1(_aJ_,cst_optimum), a_pattern=caml_call1(_aL_,cst_pattern$0), a_placeholder=caml_call1(_aL_,cst_placeholder); function a_poster(_eg_){return uri_attrib(cst_poster,_eg_)} function a_preload(x){return user_attrib(C[2],cst_preload,x)} function a_pubdate(_ef_){return constant_attrib(cst_pubdate,_ef_)} var a_radiogroup=caml_call1(_aL_,cst_radiogroup); function a_required(_ee_){return constant_attrib(cst_required,_ee_)} function a_reversed(_ed_){return constant_attrib(cst_reserved,_ed_)} function a_sandbox(x){return user_attrib(C[12],cst_sandbox,x)} function a_spellcheck(sc){return bool_attrib(cst_spellcheck,sc)} function a_scoped(_ec_){return constant_attrib(cst_scoped,_ec_)} function a_seamless(_eb_){return constant_attrib(cst_seamless,_eb_)} function a_sizes(sizes){return user_attrib(C[13],cst_sizes,sizes)} var a_span=caml_call1(_aK_,cst_span), a_srclang=caml_call1(_aL_,cst_xml_lang$1); function a_srcset(_ea_){return srcset_attrib(cst_srcset,_ea_)} var a_img_sizes=caml_call1(_aN_,cst_sizes$0), a_start=caml_call1(_aK_,cst_start$0); function a_step(step){return user_attrib(C[15],cst_step,step)} function a_translate(x){return user_attrib(C[2],cst_translate$0,x)} function a_wrap(x){return user_attrib(C[2],cst_wrap$0,x)} var a_size=caml_call1(_aK_,cst_size); function a_input_type(it){return user_attrib(C[6],cst_type$5,it)} function a_menu_type(x){return user_attrib(C[2],cst_type$6,x)} function a_command_type(x){return user_attrib(C[2],cst_type$7,x)} function a_button_type(bt){return user_attrib(C[6],cst_type$8,bt)} function a_multiple(_d$_){return constant_attrib(cst_multiple,_d$_)} var a_cols=caml_call1(_aK_,cst_cols), a_rows=caml_call1(_aK_,cst_rows), a_summary=caml_call1(_aL_,cst_summary); function a_align(x){return user_attrib(C[2],cst_align,x)} var a_axis=caml_call1(_aL_,cst_axis), a_colspan=caml_call1(_aK_,cst_colspan), a_headers=caml_call1(_aM_,cst_headers), a_rowspan=caml_call1(_aK_,cst_rowspan); function a_scope(x){return user_attrib(C[2],cst_scope,x)} var a_border=caml_call1(_aK_,cst_border); function a_rules(x){return user_attrib(C[2],cst_rules,x)} function a_char(c){return user_attrib(C[5],cst_char,c)} function a_data(_d__){return uri_attrib(cst_data$1,_d__)} var a_codetype=caml_call1(_aL_,cst_codetype); function a_frameborder(x){return user_attrib(C[2],cst_frameborder,x)} var a_marginheight=caml_call1(_aK_,cst_marginheight), a_marginwidth=caml_call1(_aK_,cst_marginwidth); function a_scrolling(x){return user_attrib(C[2],cst_scrolling,x)} var a_target=caml_call1(_aL_,cst_target), a_content=caml_call1(_aL_,cst_content), a_http_equiv=caml_call1(_aL_,cst_http_equiv); function a_media(_d9_){return mediadesc_attrib(cst_media$0,_d9_)} var a_role=caml_call1(_aM_,cst_role); function a_aria(name) {return caml_call1(_aM_,caml_call2(Stdlib[28],cst_aria,name))} function terminal(tag,a,param){return caml_call2(Xml[20],a,tag)} function unary(tag,a,elt) {var _d8_=caml_call1(Xml[1][4],elt); return caml_call3(Xml[21],a,tag,_d8_)} function star(tag,a,elts){return caml_call3(Xml[21],a,tag,elts)} function plus(tag,a,elt,elts) {var _d7_=caml_call2(Xml[1][5],elt,elts); return caml_call3(Xml[21],a,tag,_d7_)} function option_cons(opt,elts) {if(opt){var x=opt[1];return caml_call2(Xml[1][5],x,elts)}return elts} function body(_d5_,_d6_){return star(cst_body,_d5_,_d6_)} function head(_d2_,_d3_,_d4_){return plus(cst_head,_d2_,_d3_,_d4_)} function title(_d0_,_d1_){return unary(cst_title$1,_d0_,_d1_)} function html(a,head,body) {var _dZ_=caml_call1(Xml[1][4],body), content=caml_call2(Xml[1][5],head,_dZ_); return caml_call3(Xml[21],a,cst_html$0,content)} function footer(_dX_,_dY_){return star(cst_footer,_dX_,_dY_)} function header(_dV_,_dW_){return star(cst_header,_dV_,_dW_)} function section(_dT_,_dU_){return star(cst_section,_dT_,_dU_)} function nav(_dR_,_dS_){return star(cst_nav,_dR_,_dS_)} function pcdata(s){return caml_call1(Xml[17],s)} var _aR_=Xml[19]; function space(param){return caml_call1(_aR_,cst_nbsp)} var _aS_=Xml[22],_aT_=Xml[23],_aU_=Xml[24]; function h1(_dP_,_dQ_){return star(cst_h1,_dP_,_dQ_)} function h2(_dN_,_dO_){return star(cst_h2,_dN_,_dO_)} function h3(_dL_,_dM_){return star(cst_h3,_dL_,_dM_)} function h4(_dJ_,_dK_){return star(cst_h4,_dJ_,_dK_)} function h5(_dH_,_dI_){return star(cst_h5,_dH_,_dI_)} function h6(_dF_,_dG_){return star(cst_h6,_dF_,_dG_)} function hgroup(_dD_,_dE_){return star(cst_hgroup,_dD_,_dE_)} function address(_dB_,_dC_){return star(cst_address,_dB_,_dC_)} function blockquote(_dz_,_dA_){return star(cst_blockquote,_dz_,_dA_)} function div(_dx_,_dy_){return star(cst_div,_dx_,_dy_)} function p(_dv_,_dw_){return star(cst_p,_dv_,_dw_)} function pre(_dt_,_du_){return star(cst_pre,_dt_,_du_)} function abbr(_dr_,_ds_){return star(cst_abbr,_dr_,_ds_)} function br(_dp_,_dq_){return terminal(cst_br,_dp_,_dq_)} function cite(_dn_,_do_){return star(cst_cite$0,_dn_,_do_)} function code(_dl_,_dm_){return star(cst_code,_dl_,_dm_)} function dfn(_dj_,_dk_){return star(cst_dfn,_dj_,_dk_)} function em(_dh_,_di_){return star(cst_em$0,_dh_,_di_)} function kbd(_df_,_dg_){return star(cst_kbd,_df_,_dg_)} function q(_dd_,_de_){return star(cst_q,_dd_,_de_)} function samp(_db_,_dc_){return star(cst_samp,_db_,_dc_)} function span(_c$_,_da_){return star(cst_span$0,_c$_,_da_)} function strong(_c9_,_c__){return star(cst_strong,_c9_,_c__)} function time(_c7_,_c8_){return star(cst_time,_c7_,_c8_)} function var$0(_c5_,_c6_){return star(cst_var,_c5_,_c6_)} function a(_c3_,_c4_){return star(cst_a$1,_c3_,_c4_)} function dl(_c1_,_c2_){return star(cst_dl,_c1_,_c2_)} function ol(_cZ_,_c0_){return star(cst_ol,_cZ_,_c0_)} function ul(_cX_,_cY_){return star(cst_ul,_cX_,_cY_)} function dd(_cV_,_cW_){return star(cst_dd,_cV_,_cW_)} function dt(_cT_,_cU_){return star(cst_dt,_cT_,_cU_)} function li(_cR_,_cS_){return star(cst_li,_cR_,_cS_)} function hr(_cP_,_cQ_){return terminal(cst_hr,_cP_,_cQ_)} function b(_cN_,_cO_){return star(cst_b$0,_cN_,_cO_)} function i(_cL_,_cM_){return star(cst_i,_cL_,_cM_)} function u(_cJ_,_cK_){return star(cst_u,_cJ_,_cK_)} function small(_cH_,_cI_){return star(cst_small,_cH_,_cI_)} function sub(_cF_,_cG_){return star(cst_sub,_cF_,_cG_)} function sup(_cD_,_cE_){return star(cst_sup,_cD_,_cE_)} function mark(_cB_,_cC_){return star(cst_mark,_cB_,_cC_)} function rp(_cz_,_cA_){return star(cst_rp,_cz_,_cA_)} function rt(_cx_,_cy_){return star(cst_rt,_cx_,_cy_)} function ruby(_cv_,_cw_){return star(cst_ruby,_cv_,_cw_)} function wbr(_ct_,_cu_){return terminal(cst_wbr,_ct_,_cu_)} function bdo(dir,opt,elts) {if(opt)var sth=opt[1],a=sth;else var a=0; var _cs_=[0,[0,a_dir(dir),a]]; return caml_call3(Xml[21],_cs_,cst_bdo,elts)} var a_datetime=caml_call1(_aL_,cst_datetime); function a_shape(x){return user_attrib(C[2],cst_shape,x)} function a_coords(coords){return user_attrib(C[11],cst_coords,coords)} var a_usemap=caml_call1(_aL_,cst_usemap); function a_defer(_cr_){return constant_attrib(cst_defer,_cr_)} var a_label=caml_call1(_aL_,cst_label); function area(alt,opt,param) {if(opt)var sth=opt[1],a=sth;else var a=0; var _cq_=[0,[0,caml_call1(a_alt,alt),a]]; return caml_call2(Xml[20],_cq_,cst_area)} function map(_co_,_cp_){return star(cst_map,_co_,_cp_)} function del(_cm_,_cn_){return star(cst_del,_cm_,_cn_)} function ins(_ck_,_cl_){return star(cst_ins,_ck_,_cl_)} function script(_ci_,_cj_){return unary(cst_script$0,_ci_,_cj_)} function noscript(_cg_,_ch_){return star(cst_noscript,_cg_,_ch_)} function template(_ce_,_cf_){return star(cst_template,_ce_,_cf_)} function article(_cc_,_cd_){return star(cst_article,_cc_,_cd_)} function aside(_ca_,_cb_){return star(cst_aside,_ca_,_cb_)} function main(_b__,_b$_){return star(cst_main,_b__,_b$_)} function video_audio(name,src,srcs,opt,elts) {if(opt)var sth=opt[1],a=sth;else var a=0; if(src)var uri=src[1],a$0=[0,a_src(uri),a];else var a$0=a; if(srcs) {var srcs$0=srcs[1],_b9_=caml_call2(Xml[1][6],srcs$0,elts); return caml_call3(Xml[21],[0,a$0],name,_b9_)} return caml_call3(Xml[21],[0,a$0],name,elts)} function audio(_b5_,_b6_,_b7_,_b8_) {return video_audio(cst_audio,_b5_,_b6_,_b7_,_b8_)} function video(_b1_,_b2_,_b3_,_b4_) {return video_audio(cst_video,_b1_,_b2_,_b3_,_b4_)} function canvas(_bZ_,_b0_){return star(cst_canvas,_bZ_,_b0_)} function command(label,opt,param) {if(opt)var sth=opt[1],a=sth;else var a=0; var _bY_=[0,[0,caml_call1(a_label,label),a]]; return caml_call2(Xml[20],_bY_,cst_command)} function menu(children,a,param) {if(children) var match=children[1],l=match[2],children$0=l; else var children$0=caml_call1(Xml[1][3],0); return caml_call3(Xml[21],a,cst_menu,children$0)} function embed(_bW_,_bX_){return terminal(cst_embed,_bW_,_bX_)} function source(_bU_,_bV_){return terminal(cst_source,_bU_,_bV_)} function meter(_bS_,_bT_){return star(cst_meter,_bS_,_bT_)} function output_elt(_bQ_,_bR_){return star(cst_output,_bQ_,_bR_)} function form(_bO_,_bP_){return star(cst_form$0,_bO_,_bP_)} function svg(opt,children) {if(opt)var sth=opt[1],a=sth;else var a=0; var _bN_=caml_call2(Svg[242],[0,a],children); return caml_call1(Svg[324],_bN_)} function input(_bL_,_bM_){return terminal(cst_input,_bL_,_bM_)} function keygen(_bJ_,_bK_){return terminal(cst_keygen,_bJ_,_bK_)} function label(_bH_,_bI_){return star(cst_label$0,_bH_,_bI_)} function option(_bF_,_bG_){return unary(cst_option,_bF_,_bG_)} function select(_bD_,_bE_){return star(cst_select,_bD_,_bE_)} function textarea(_bB_,_bC_){return unary(cst_textarea,_bB_,_bC_)} function button(_bz_,_bA_){return star(cst_button,_bz_,_bA_)} function datalist(children,a,param) {if(children) var match=children[1],x=match[2],children$0=x; else var children$0=caml_call1(Xml[1][3],0); return caml_call3(Xml[21],a,cst_datalist,children$0)} function progress(_bx_,_by_){return star(cst_progress,_bx_,_by_)} function legend(_bv_,_bw_){return star(cst_legend,_bv_,_bw_)} function details(summary,a,children) {return plus(cst_details,a,summary,children)} function summary(_bt_,_bu_){return star(cst_summary$0,_bt_,_bu_)} function fieldset(legend,a,elts) {var _bs_=option_cons(legend,elts); return caml_call3(Xml[21],a,cst_fieldset,_bs_)} function optgroup(label,opt,elts) {if(opt)var sth=opt[1],a=sth;else var a=0; var _br_=[0,[0,caml_call1(a_label,label),a]]; return caml_call3(Xml[21],_br_,cst_optgroup,elts)} function figcaption(_bp_,_bq_){return star(cst_figcaption,_bp_,_bq_)} function figure(figcaption,a,elts) {if(figcaption) {var _bm_=figcaption[1]; if(437082891 <= _bm_[1]) var c=_bm_[2], _bn_=caml_call1(Xml[1][4],c), _bo_=caml_call2(Xml[1][6],elts,_bn_); else var c$0=_bm_[2],_bo_=caml_call2(Xml[1][5],c$0,elts); var content=_bo_} else var content=elts; return caml_call3(Xml[21],a,cst_figure,content)} function caption(_bk_,_bl_){return star(cst_caption,_bk_,_bl_)} function table(caption,columns,thead,tfoot,a,elts) {var content=option_cons(thead,option_cons(tfoot,elts)); if(columns) var columns$0=columns[1], content$0=caml_call2(Xml[1][6],columns$0,content); else var content$0=content; var content$1=option_cons(caption,content$0); return caml_call3(Xml[21],a,cst_table$0,content$1)} function td(_bi_,_bj_){return star(cst_td,_bi_,_bj_)} function th(_bg_,_bh_){return star(cst_th,_bg_,_bh_)} function tr(_be_,_bf_){return star(cst_tr,_be_,_bf_)} function colgroup(_bc_,_bd_){return star(cst_colgroup,_bc_,_bd_)} function col(_ba_,_bb_){return terminal(cst_col,_ba_,_bb_)} function thead(_a__,_a$_){return star(cst_thead,_a__,_a$_)} function tbody(_a8_,_a9_){return star(cst_tbody,_a8_,_a9_)} function tfoot(_a6_,_a7_){return star(cst_tfoot,_a6_,_a7_)} function iframe(_a4_,_a5_){return star(cst_iframe,_a4_,_a5_)} function object(params,opt,elts) {if(opt)var sth=opt[1],a=sth;else var a=0; if(params) var e=params[1],elts$0=caml_call2(Xml[1][6],e,elts); else var elts$0=elts; return caml_call3(Xml[21],[0,a],cst_object,elts$0)} function param(_a2_,_a3_){return terminal(cst_param,_a2_,_a3_)} function img(src,alt,opt,param) {if(opt)var sth=opt[1],a=sth;else var a=0; var _a1_=[0,caml_call1(a_alt,alt),a],a$0=[0,a_src(src),_a1_]; return caml_call2(Xml[20],[0,a$0],cst_img)} function picture(img,a,elts) {var content=caml_call2(Xml[1][5],img,elts); return caml_call3(Xml[21],a,cst_picture,content)} function meta(_aZ_,_a0_){return terminal(cst_meta,_aZ_,_a0_)} function style(opt,elts) {if(opt)var sth=opt[1],a=sth;else var a=0; return caml_call3(Xml[21],[0,a],cst_style$2,elts)} function link(rel,href,opt,param) {if(opt)var sth=opt[1],a=sth;else var a=0; var _aX_=[0,a_href(href),a],_aY_=[0,[0,a_rel(rel),_aX_]]; return caml_call2(Xml[20],_aY_,cst_link)} function base(_aV_,_aW_){return terminal(cst_base,_aV_,_aW_)} function tot(x){return x} function totl(x){return x} function toelt(x){return x} function toeltl(x){return x} function doc_toelt(x){return x} var I=_a_(Xml); function of_seq(s){return caml_call1(I[1],s)} function data(s){return caml_call1(Xml[18],s)} function leaf(tag,a,param){return caml_call2(Xml[20],a,tag)} function node(tag,a,elts){return caml_call3(Xml[21],a,tag,elts)} function coerce_elt(x){return x} var float_attrib=Xml[4],int_attrib=Xml[5],string_attrib=Xml[6]; function uri_attrib$0(a,s){return caml_call2(Xml[13],a,s)} var space_sep_attrib=Xml[7], comma_sep_attrib=Xml[8], Unsafe= [0, data, leaf, node, coerce_elt, float_attrib, int_attrib, string_attrib, uri_attrib$0, space_sep_attrib, comma_sep_attrib]; return [0, Xml, Info, _aH_, _aI_, to_xmlattribs, to_attrib, _aJ_, _aK_, _aL_, uri_attrib, _aM_, _aN_, user_attrib, bool_attrib, constant_attrib, linktypes_attrib, mediadesc_attrib, srcset_attrib, a_class, a_id, a_user_data, a_title, a_xml_lang, a_lang, a_style, a_property, a_onabort, a_onafterprint, a_onbeforeprint, a_onbeforeunload, a_onblur, a_oncanplay, a_oncanplaythrough, a_onchange, a_ondurationchange, a_onemptied, a_onended, a_onerror, a_onfocus, a_onformchange, a_onforminput, a_onhashchange, a_oninput, a_oninvalid, a_onoffline, a_ononline, a_onpause, a_onplay, a_onplaying, a_onpagehide, a_onpageshow, a_onpopstate, a_onprogress, a_onratechange, a_onreadystatechange, a_onredo, a_onresize, a_onscroll, a_onseeked, a_onseeking, a_onselect, a_onshow, a_onstalled, a_onstorage, a_onsubmit, a_onsuspend, a_ontimeupdate, a_onundo, a_onunload, a_onvolumechange, a_onwaiting, a_onload, a_onloadeddata, a_onloadedmetadata, a_onloadstart, a_onmessage, a_onmousewheel, a_onclick, a_oncontextmenu, a_ondblclick, a_ondrag, a_ondragend, a_ondragenter, a_ondragleave, a_ondragover, a_ondragstart, a_ondrop, a_onmousedown, a_onmouseup, a_onmouseover, a_onmousemove, a_onmouseout, a_ontouchstart, a_ontouchend, a_ontouchmove, a_ontouchcancel, a_onkeypress, a_onkeydown, a_onkeyup, a_version, a_xmlns, a_manifest, a_cite, a_xml_space, a_accesskey, a_charset, a_accept_charset, a_accept, a_href, a_hreflang, a_download, a_rel, a_tabindex, a_mime_type, a_alt, a_height, a_src, a_width, a_for, a_for, a_for_list, a_for_list, a_selected, a_text_value, a_int_value, a_value, a_float_value, a_action, a_formmethod, a_formmethod, a_enctype, a_checked, a_disabled, a_readonly, a_maxlength, a_minlength, a_name, a_allowfullscreen, a_allowpaymentrequest, a_referrerpolicy, a_autocomplete, a_async, a_autofocus, a_autoplay, a_muted, a_crossorigin, a_integrity, a_mediagroup, a_challenge, a_contenteditable, a_contextmenu, a_controls, a_dir, a_draggable, a_form, a_formaction, a_formenctype, a_formnovalidate, a_formtarget, a_hidden, a_high, a_icon, a_ismap, a_keytype, a_list, a_loop, a_low, a_max, a_input_max, a_min, a_input_min, a_inputmode, a_novalidate, a_open, a_optimum, a_pattern, a_placeholder, a_poster, a_preload, a_pubdate, a_radiogroup, a_required, a_reversed, a_sandbox, a_spellcheck, a_scoped, a_seamless, a_sizes, a_span, a_srclang, a_srcset, a_img_sizes, a_start, a_step, a_translate, a_wrap, a_size, a_input_type, a_menu_type, a_command_type, a_button_type, a_multiple, a_cols, a_rows, a_summary, a_align, a_axis, a_colspan, a_headers, a_rowspan, a_scope, a_border, a_rules, a_char, a_data, a_codetype, a_frameborder, a_marginheight, a_marginwidth, a_scrolling, a_target, a_content, a_http_equiv, a_media, a_role, a_aria, terminal, unary, star, plus, option_cons, body, head, title, html, footer, header, section, nav, pcdata, pcdata, _aR_, space, _aS_, _aT_, _aU_, h1, h2, h3, h4, h5, h6, hgroup, address, blockquote, div, p, pre, abbr, br, cite, code, dfn, em, kbd, q, samp, span, strong, time, var$0, a, dl, ol, ul, dd, dt, li, hr, b, i, u, small, sub, sup, mark, rp, rt, ruby, wbr, bdo, a_datetime, a_shape, a_coords, a_usemap, a_defer, a_label, area, map, del, ins, script, noscript, template, article, aside, main, video_audio, audio, video, canvas, command, menu, embed, source, meter, output_elt, form, svg, input, keygen, label, option, select, textarea, button, datalist, progress, legend, details, summary, fieldset, optgroup, figcaption, figure, caption, table, table, td, th, tr, colgroup, col, thead, tbody, tfoot, iframe, object, param, img, picture, meta, style, link, base, tot, totl, toelt, toeltl, doc_toelt, I, of_seq, Unsafe]} function Wrapped_functions$0(Xml) {function string_of_sandbox_token(param) {return -177579325 <= param ?642066717 <= param ?961985737 <= param?cst_allow_same_origin:cst_allow_popups :-141440231 <= param?cst_allow_forms:cst_allow_pointer_lock :-237921695 <= param?cst_allow_script:cst_allow_top_navigation} function string_of_linktype(param) {if(typeof param === "number") return 381789656 <= param ?814486425 <= param ?870035731 <= param ?1021867988 <= param ?1026883179 <= param?cst_external:cst_canonical :892857107 <= param?cst_prev:cst_next :847656566 <= param?cst_last:cst_icon$0 :395967329 <= param ?693914176 <= param ?803495649 <= param?cst_help:cst_noreferrer :672161451 <= param?cst_author:cst_license :395056008 <= param?cst_search:cst_noopener :-289155950 <= param ?19067 <= param ?212027606 <= param ?332064784 <= param?cst_first:cst_bookmark :4198970 <= param?cst_tag:cst_up :-123098695 <= param?cst_pingback:cst_nofollow :-837966724 <= param ?-687429350 <= param ?-543567890 <= param?cst_stylesheet:cst_alternate :-784200974 <= param?cst_index:cst_sidebar :-954191215 <= param?cst_archives:cst_prefetch; var s=param[2]; return s} function string_of_mediadesc_token(param) {if(typeof param === "number") return 3256577 <= param ?67844052 <= param ?985170249 <= param ?993823919 <= param?cst_projection:cst_aural :741408196 <= param?cst_handheld:cst_embossed :4203225 <= param?cst_tty:cst_all :-321929715 === param ?cst_braille :-68046964 <= param ?18850 <= param?cst_tv:cst_screen$0 :-275811774 <= param?cst_speech:cst_print; var s=param[2]; return s} function string_of_referrerpolicy(param) {return 128179133 <= param ?516162486 === param ?cst_unsafe_url :880519217 <= param ?1065162943 <= param ?cst_same_origin :cst_origin_when_cross_origin :808133042 <= param ?cst_no_referrer_when_downgrade :cst_no_referrer :-6975994 <= param ?50834029 <= param?cst$39:cst_origin :-512964804 <= param ?cst_strict_origin :cst_strict_origin_when_cross_o} function string_of_big_variant(param) {if(typeof param === "number") return 4448519 <= param ?748545107 <= param ?892709484 <= param ?936387931 <= param ?984475830 <= param ?1003109192 <= param ?1026883179 <= param?cst_external$0:cst_0 :995986491 <= param?cst_formnovalidate$0:cst_audio$0 :936573133 === param ?cst_text$0 :963342108 <= param?cst_async$0:cst_toolbar :892857107 <= param ?914891065 <= param ?925976842 <= param?cst_soft:cst_rows$0 :914389316 <= param?cst_rect$0:cst_prev$0 :892711040 <= param?cst_POST:cst_poly :847852583 <= param ?870035731 <= param ?874830961 <= param ?881668074 <= param?cst_open$0:cst_decimal :870530776 <= param?cst_none$2:cst_next$0 :848351876 <= param?cst_loop$0:cst_left :803495649 <= param ?836565865 <= param ?847656566 <= param?cst_last$0:cst_kana :814486425 <= param?cst_icon$1:cst_help$0 :803298059 <= param?cst_hard:cst_cols$0 :306241015 <= param ?475573507 <= param ?672161451 <= param ?726666127 <= param ?748194550 <= param?cst_char$0:cst_auto$3 :693914176 <= param?cst_noreferrer$0:cst_author$0 :596180811 <= param?cst_muted$0:cst_autoplay$0 :395056008 <= param ?432776079 <= param ?434500685 <= param?cst_anonymous:cst_metadata$0 :395967329 <= param?cst_license$0:cst_search$0 :332064784 <= param?cst_first$0:cst_novalidate$0 :140750597 <= param ?186574459 <= param ?212027606 <= param ?292438678 <= param?cst_controls$0:cst_bookmark$0 :202657151 <= param?cst_required$0:cst_selected$0 :178382384 <= param?cst_circle$0:cst_rowgroup :48900580 <= param ?95509868 <= param ?111644259 <= param?cst_checkbox:cst_katakana :50085628 <= param?cst_email:cst_latin :19559306 <= param?cst_hidden$0:cst_yes :-363872942 <= param ?19067 <= param ?3953222 <= param ?4103754 <= param ?4199867 <= param ?4252495 <= param?cst_url:cst_tel :4198970 <= param?cst_tag$0:cst_rtl :4102650 <= param?cst_row:cst_1 :3257036 <= param ?3553398 <= param ?3805386 <= param?cst_ltr:cst_GET :3356704 <= param?cst_col$0:cst_any :3256577 <= param?cst_all$0:cst_up$0 :-146439973 <= param ?-116258131 <= param ?-57574468 <= param ?17505 <= param?cst_no:cst_right :-100768656 <= param?cst_scoped$0:cst_numeric :-123098695 <= param?cst_pingback$0:cst_radio :-247853591 <= param ?-197222864 <= param ?-165772469 <= param?cst_pubdate$0:cst_multiple$0 :-200275514 <= param?cst_latin_name:cst_autofocus$0 :-289155950 <= param?cst_nofollow$0:cst_defer$0 :-773209244 <= param ?-543567890 <= param ?-514572330 <= param ?-384499551 <= param ?-369291781 <= param?cst_full_width_latin:cst_default$0 :-423051825 <= param?cst_context:cst_verbatim :-529147129 <= param?cst_checked$0:cst_stylesheet$0 :-709493348 <= param ?-687429350 <= param ?-613973726 <= param?cst_reserved$0:cst_alternate$0 :-707104822 <= param ?cst_http_www_w3_org_1999_xhtml :cst_disabled$0 :-728306478 <= param?cst_ismap$0:cst_use_credentials :-872161756 <= param ?-826369749 <= param ?-788068560 <= param ?-784200974 <= param?cst_index$0:cst_justify :-792946572 <= param?cst_groups:cst_command$0 :-837966724 <= param?cst_sidebar$0:cst_latin_prose :-967956361 <= param ?-931002593 <= param ?-883155966 <= param?cst_readonly$0:cst_colgroup$0 :-954191215 <= param?cst_archives$0:cst_seamless$0 :-1000861353 <= param?cst_prefetch$0:cst_preserve$0; var s=param[2]; return s} function string_of_input_type(param) {return 50085628 <= param ?612668487 <= param ?781515420 <= param ?936769581 <= param ?969837588 <= param?cst_week:cst_time$0 :936573133 <= param?cst_text$1:cst_file :758940238 <= param?cst_date:cst_datetime_local :242538002 <= param ?529348384 <= param ?578936635 <= param?cst_password:cst_month :395056008 <= param?cst_search$1:cst_button$0 :111644259 <= param?cst_checkbox$0:cst_email$0 :-146439973 <= param ?-101336657 <= param ?4252495 <= param ?19559306 <= param?cst_hidden$1:cst_url$0 :4199867 <= param?cst_tel$0:cst_reset :-145943139 <= param?cst_range:cst_radio$0 :-795439301 <= param ?-578166461 <= param ?-528289822 <= param?cst_readonly$1:cst_color :-703661335 <= param?cst_number:cst_image$0 :-828715976 <= param?cst_submit:cst_datetime$0} function string_of_number_or_datetime(param) {if(-703661335 <= param[1]) {var n=param[2];return caml_call1(Stdlib[33],n)} var t=param[2]; return t} var string_of_character=caml_call1(Stdlib_String[1],1), string_of_number$0=Stdlib[33], string_of_bool=Stdlib[30]; function onoff_of_bool(param){return param?cst_on:cst_off} function unoption_string(param) {if(param){var x=param[1];return x}return cst$40} function string_of_step(param) {if(param){var x=param[1];return string_of_number(x)}return cst_any$0} function string_of_sizes(param) {if(param) {var l=param[1], _aF_= function(param) {var y=param[2],x=param[1]; return caml_call3(Stdlib_Printf[4],_ae_,x,y)}, _aG_=caml_call2(Stdlib_List[19],_aF_,l); return caml_call2(Stdlib_String[6],cst$41,_aG_)} return cst_any$1} function string_of_sandbox(l) {var _aE_=caml_call2(Stdlib_List[19],string_of_sandbox_token,l); return caml_call2(Stdlib_String[6],cst$42,_aE_)} function string_of_numbers(l) {var _aD_=caml_call2(Stdlib_List[19],string_of_number$0,l); return caml_call2(Stdlib_String[6],cst$43,_aD_)} function string_of_mediadesc(l) {var _aC_=caml_call2(Stdlib_List[19],string_of_mediadesc_token,l); return caml_call2(Stdlib_String[6],cst$44,_aC_)} function string_of_linktypes(l) {var _aB_=caml_call2(Stdlib_List[19],string_of_linktype,l); return caml_call2(Stdlib_String[6],cst$45,_aB_)} function string_of_srcset(l) {function f(param) {var _aw_=param[1]; if(-738802218 === _aw_) {var match=param[2], v=match[2], url=match[1], _ax_=caml_call1(string_of_number$0,v), _ay_=caml_call1(Xml[2],url); return caml_call3(Stdlib_Printf[4],_af_,_ay_,_ax_)} if(4252495 <= _aw_) {var url$0=param[2];return caml_call1(Xml[2],url$0)} var match$0=param[2], v$0=match$0[2], url$1=match$0[1], _az_=string_of_number(v$0), _aA_=caml_call1(Xml[2],url$1); return caml_call3(Stdlib_Printf[4],_ag_,_aA_,_az_)} var _av_=caml_call2(Stdlib_List[19],f,l); return caml_call2(Stdlib_String[6],cst$46,_av_)} return [0, Xml, string_of_sandbox_token, string_of_linktype, string_of_mediadesc_token, string_of_referrerpolicy, string_of_big_variant, string_of_input_type, string_of_number_or_datetime, string_of_character, string_of_number$0, string_of_bool, onoff_of_bool, unoption_string, string_of_step, string_of_sizes, string_of_sandbox, string_of_numbers, string_of_mediadesc, string_of_linktypes, string_of_srcset]} function _ah_(_as_,_ar_,_aq_) {var _at_=Make_with_wrapped_functions$0(_as_,_ar_,_aq_),_au_=_at_[363]; return [0, _at_[1], _at_[2], _at_[3], _at_[4], _at_[19], _at_[21], _at_[20], _at_[22], _at_[23], _at_[24], _at_[27], _at_[28], _at_[29], _at_[30], _at_[31], _at_[32], _at_[33], _at_[34], _at_[35], _at_[36], _at_[37], _at_[38], _at_[39], _at_[40], _at_[41], _at_[42], _at_[43], _at_[44], _at_[77], _at_[45], _at_[46], _at_[47], _at_[48], _at_[49], _at_[50], _at_[51], _at_[52], _at_[53], _at_[54], _at_[55], _at_[56], _at_[57], _at_[58], _at_[59], _at_[60], _at_[61], _at_[62], _at_[63], _at_[64], _at_[65], _at_[66], _at_[67], _at_[68], _at_[69], _at_[70], _at_[71], _at_[72], _at_[73], _at_[74], _at_[75], _at_[76], _at_[78], _at_[79], _at_[80], _at_[81], _at_[82], _at_[83], _at_[84], _at_[85], _at_[86], _at_[87], _at_[88], _at_[89], _at_[90], _at_[91], _at_[92], _at_[93], _at_[94], _at_[95], _at_[96], _at_[97], _at_[98], _at_[99], _at_[138], _at_[139], _at_[141], _at_[142], _at_[143], _at_[144], _at_[145], _at_[146], _at_[147], _at_[148], _at_[149], _at_[150], _at_[151], _at_[152], _at_[153], _at_[154], _at_[155], _at_[156], _at_[157], _at_[158], _at_[159], _at_[160], _at_[161], _at_[162], _at_[163], _at_[164], _at_[165], _at_[166], _at_[167], _at_[168], _at_[169], _at_[170], _at_[171], _at_[172], _at_[173], _at_[174], _at_[175], _at_[176], _at_[177], _at_[178], _at_[179], _at_[180], _at_[181], _at_[140], _at_[182], _at_[183], _at_[184], _at_[185], _at_[186], _at_[187], _at_[188], _at_[189], _at_[190], _at_[191], _at_[192], _at_[193], _at_[194], _at_[195], _at_[196], _at_[100], _at_[101], _at_[102], _at_[103], _at_[104], _at_[105], _at_[106], _at_[107], _at_[108], _at_[109], _at_[110], _at_[111], _at_[112], _at_[113], _at_[114], _at_[292], _at_[128], _at_[132], _at_[203], _at_[131], _at_[119], _at_[120], _at_[121], _at_[122], _at_[135], _at_[136], _at_[129], _at_[130], _at_[202], _at_[137], _at_[204], _at_[123], _at_[197], _at_[117], _at_[198], _at_[124], _at_[125], _at_[126], _at_[127], _at_[133], _at_[134], _at_[201], _at_[200], _at_[199], _at_[297], _at_[206], _at_[207], _at_[208], _at_[209], _at_[210], _at_[211], _at_[205], _at_[212], _at_[213], _at_[214], _at_[115], _at_[116], _at_[118], _at_[293], _at_[294], _at_[295], _at_[215], _at_[216], _at_[217], _at_[218], _at_[219], _at_[220], _at_[221], _at_[222], _at_[223], _at_[296], _at_[224], _at_[25], _at_[26], _at_[225], _at_[226], _at_[240], _at_[235], _at_[233], _at_[355], _at_[234], _at_[232], _at_[319], _at_[236], _at_[237], _at_[238], _at_[239], _at_[247], _at_[248], _at_[249], _at_[250], _at_[251], _at_[252], _at_[253], _at_[254], _at_[305], _at_[306], _at_[307], _at_[257], _at_[258], _at_[255], _at_[256], _at_[273], _at_[274], _at_[275], _at_[276], _at_[277], _at_[278], _at_[334], _at_[335], _at_[279], _at_[280], _at_[281], _at_[282], _at_[283], _at_[284], _at_[285], _at_[286], _at_[290], _at_[291], _at_[259], _at_[260], _at_[261], _at_[262], _at_[263], _at_[264], _at_[265], _at_[266], _at_[267], _at_[268], _at_[269], _at_[270], _at_[271], _at_[272], _at_[300], _at_[301], _at_[350], _at_[351], _at_[347], _at_[348], _at_[349], _at_[314], _at_[309], _at_[310], _at_[311], _at_[315], _at_[298], _at_[299], _at_[336], _at_[338], _at_[337], _at_[342], _at_[343], _at_[344], _at_[345], _at_[346], _at_[339], _at_[340], _at_[341], _at_[318], _at_[332], _at_[329], _at_[322], _at_[320], _at_[326], _at_[324], _at_[327], _at_[333], _at_[323], _at_[325], _at_[321], _at_[328], _at_[316], _at_[317], _at_[242], _at_[243], _at_[244], _at_[245], _at_[246], _at_[330], _at_[331], _at_[312], _at_[313], _at_[302], _at_[303], _at_[304], _at_[352], _at_[353], _at_[354], _at_[288], _at_[287], _at_[289], _at_[241], _at_[362], _at_[356], _at_[357], _at_[358], _at_[359], _at_[360], _at_[5], _at_[6], [0, _au_[1], _au_[3], _au_[2], _au_[4], _au_[7], _au_[5], _au_[6], _au_[8], _au_[9], _au_[10]]]} function _ai_(_ao_) {var _ap_=Wrapped_functions$0(_ao_); return [0, _ap_[1], _ap_[6], _ap_[11], _ap_[12], _ap_[9], _ap_[7], _ap_[8], _ap_[19], _ap_[18], _ap_[5], _ap_[17], _ap_[16], _ap_[15], _ap_[20], _ap_[14], _ap_[13]]} var Html_f= [0, function(_al_,_ak_) {var _aj_=Wrapped_functions$0(_al_), _an_= Make_with_wrapped_functions$0 (_al_, [0, _aj_[1], _aj_[6], _aj_[11], _aj_[12], _aj_[9], _aj_[7], _aj_[8], _aj_[19], _aj_[18], _aj_[5], _aj_[17], _aj_[16], _aj_[15], _aj_[20], _aj_[14], _aj_[13]], _ak_), _am_=_an_[363]; return [0, _an_[1], _an_[2], _an_[3], _an_[4], _an_[19], _an_[21], _an_[20], _an_[22], _an_[23], _an_[24], _an_[27], _an_[28], _an_[29], _an_[30], _an_[31], _an_[32], _an_[33], _an_[34], _an_[35], _an_[36], _an_[37], _an_[38], _an_[39], _an_[40], _an_[41], _an_[42], _an_[43], _an_[44], _an_[77], _an_[45], _an_[46], _an_[47], _an_[48], _an_[49], _an_[50], _an_[51], _an_[52], _an_[53], _an_[54], _an_[55], _an_[56], _an_[57], _an_[58], _an_[59], _an_[60], _an_[61], _an_[62], _an_[63], _an_[64], _an_[65], _an_[66], _an_[67], _an_[68], _an_[69], _an_[70], _an_[71], _an_[72], _an_[73], _an_[74], _an_[75], _an_[76], _an_[78], _an_[79], _an_[80], _an_[81], _an_[82], _an_[83], _an_[84], _an_[85], _an_[86], _an_[87], _an_[88], _an_[89], _an_[90], _an_[91], _an_[92], _an_[93], _an_[94], _an_[95], _an_[96], _an_[97], _an_[98], _an_[99], _an_[138], _an_[139], _an_[141], _an_[142], _an_[143], _an_[144], _an_[145], _an_[146], _an_[147], _an_[148], _an_[149], _an_[150], _an_[151], _an_[152], _an_[153], _an_[154], _an_[155], _an_[156], _an_[157], _an_[158], _an_[159], _an_[160], _an_[161], _an_[162], _an_[163], _an_[164], _an_[165], _an_[166], _an_[167], _an_[168], _an_[169], _an_[170], _an_[171], _an_[172], _an_[173], _an_[174], _an_[175], _an_[176], _an_[177], _an_[178], _an_[179], _an_[180], _an_[181], _an_[140], _an_[182], _an_[183], _an_[184], _an_[185], _an_[186], _an_[187], _an_[188], _an_[189], _an_[190], _an_[191], _an_[192], _an_[193], _an_[194], _an_[195], _an_[196], _an_[100], _an_[101], _an_[102], _an_[103], _an_[104], _an_[105], _an_[106], _an_[107], _an_[108], _an_[109], _an_[110], _an_[111], _an_[112], _an_[113], _an_[114], _an_[292], _an_[128], _an_[132], _an_[203], _an_[131], _an_[119], _an_[120], _an_[121], _an_[122], _an_[135], _an_[136], _an_[129], _an_[130], _an_[202], _an_[137], _an_[204], _an_[123], _an_[197], _an_[117], _an_[198], _an_[124], _an_[125], _an_[126], _an_[127], _an_[133], _an_[134], _an_[201], _an_[200], _an_[199], _an_[297], _an_[206], _an_[207], _an_[208], _an_[209], _an_[210], _an_[211], _an_[205], _an_[212], _an_[213], _an_[214], _an_[115], _an_[116], _an_[118], _an_[293], _an_[294], _an_[295], _an_[215], _an_[216], _an_[217], _an_[218], _an_[219], _an_[220], _an_[221], _an_[222], _an_[223], _an_[296], _an_[224], _an_[25], _an_[26], _an_[225], _an_[226], _an_[240], _an_[235], _an_[233], _an_[355], _an_[234], _an_[232], _an_[319], _an_[236], _an_[237], _an_[238], _an_[239], _an_[247], _an_[248], _an_[249], _an_[250], _an_[251], _an_[252], _an_[253], _an_[254], _an_[305], _an_[306], _an_[307], _an_[257], _an_[258], _an_[255], _an_[256], _an_[273], _an_[274], _an_[275], _an_[276], _an_[277], _an_[278], _an_[334], _an_[335], _an_[279], _an_[280], _an_[281], _an_[282], _an_[283], _an_[284], _an_[285], _an_[286], _an_[290], _an_[291], _an_[259], _an_[260], _an_[261], _an_[262], _an_[263], _an_[264], _an_[265], _an_[266], _an_[267], _an_[268], _an_[269], _an_[270], _an_[271], _an_[272], _an_[300], _an_[301], _an_[350], _an_[351], _an_[347], _an_[348], _an_[349], _an_[314], _an_[309], _an_[310], _an_[311], _an_[315], _an_[298], _an_[299], _an_[336], _an_[338], _an_[337], _an_[342], _an_[343], _an_[344], _an_[345], _an_[346], _an_[339], _an_[340], _an_[341], _an_[318], _an_[332], _an_[329], _an_[322], _an_[320], _an_[326], _an_[324], _an_[327], _an_[333], _an_[323], _an_[325], _an_[321], _an_[328], _an_[316], _an_[317], _an_[242], _an_[243], _an_[244], _an_[245], _an_[246], _an_[330], _an_[331], _an_[312], _an_[313], _an_[302], _an_[303], _an_[304], _an_[352], _an_[353], _an_[354], _an_[288], _an_[287], _an_[289], _an_[241], _an_[362], _an_[356], _an_[357], _an_[358], _an_[359], _an_[360], _an_[5], _an_[6], [0, _am_[1], _am_[3], _am_[2], _am_[4], _am_[7], _am_[5], _am_[6], _am_[8], _am_[9], _am_[10]]]}, _ai_, _ah_]; caml_register_global(1102,Html_f,"Html_f"); return} (globalThis)); //# 1 "../.js/tyxml/tyxml.cma.js" (function(globalThis) {"use strict"; var runtime=globalThis.jsoo_runtime, caml_register_global=runtime.caml_register_global, caml_string_of_jsbytes=runtime.caml_string_of_jsbytes; function caml_call1(f,a0) {return f.length == 1?f(a0):runtime.caml_call_gen(f,[a0])} function caml_call3(f,a0,a1,a2) {return f.length == 3?f(a0,a1,a2):runtime.caml_call_gen(f,[a0,a1,a2])} function caml_call4(f,a0,a1,a2,a3) {return f.length == 4 ?f(a0,a1,a2,a3) :runtime.caml_call_gen(f,[a0,a1,a2,a3])} function caml_call6(f,a0,a1,a2,a3,a4,a5) {return f.length == 6 ?f(a0,a1,a2,a3,a4,a5) :runtime.caml_call_gen(f,[a0,a1,a2,a3,a4,a5])} var global_data=runtime.caml_get_global_data(), cst$0=caml_string_of_jsbytes(""), cst=caml_string_of_jsbytes(""), cst$1=caml_string_of_jsbytes(""), cst_CDATA=caml_string_of_jsbytes("<![CDATA["), cst$2=caml_string_of_jsbytes("//"), cst_CDATA$0=caml_string_of_jsbytes("//<![CDATA["), cst$3=caml_string_of_jsbytes("/* */"), cst_CDATA$1=caml_string_of_jsbytes("/* <![CDATA[ */"), Stdlib_Format=global_data.Stdlib__Format, Re=global_data.Re, Stdlib_Printf=global_data.Stdlib__Printf, Xml_wrap=global_data.Xml_wrap, Xml_print=global_data.Xml_print, Xml_iter=global_data.Xml_iter, Xml_stream=global_data.Xml_stream, Svg_f=global_data.Svg_f, Html_f=global_data.Html_f, _b_=[0,1], _c_= [0, [12,10,[2,0,[12,10,[2,0,[12,10,[2,0,[12,10,0]]]]]]], caml_string_of_jsbytes("\n%s\n%s\n%s\n")]; function uri_of_string(s){return s} function string_of_uri(s){return s} function acontent(param){var a=param[2];return a} function aname(param){var name=param[1];return name} function float_attrib(name,value){return [0,name,[0,value]]} function int_attrib(name,value){return [0,name,[1,value]]} function string_attrib(name,value){return [0,name,[2,value]]} function space_sep_attrib(name,values){return [0,name,[3,0,values]]} function comma_sep_attrib(name,values){return [0,name,[3,1,values]]} function event_handler_attrib(name,value){return [0,name,[2,value]]} function mouse_event_handler_attrib(name,value){return [0,name,[2,value]]} function keyboard_event_handler_attrib(name,value) {return [0,name,[2,value]]} function touch_event_handler_attrib(name,value){return [0,name,[2,value]]} function uri_attrib(name,value){return [0,name,[2,value]]} function uris_attrib(name,values){return [0,name,[3,0,values]]} function content(elt){return elt} function empty(param){return 0} function comment(c){return [0,c]} function pcdata(d){return [2,d]} function encodedpcdata(d){return [1,d]} function entity(e){return [3,e]} var _a_=caml_call1(Re[23],cst),re_end_cdata=caml_call1(Re[2],_a_); function encoded_cdata(s1,s2,s) {var _j7_=caml_call6(Re[22],0,0,_b_,re_end_cdata,cst$0,s); return [1,caml_call4(Stdlib_Printf[4],_c_,s1,_j7_,s2)]} function cdata(_j6_){return encoded_cdata(cst_CDATA,cst$1,_j6_)} function cdata_script(_j5_){return encoded_cdata(cst_CDATA$0,cst$2,_j5_)} function cdata_style(_j4_){return encoded_cdata(cst_CDATA$1,cst$3,_j4_)} function leaf(opt,name) {if(opt)var sth=opt[1],a=sth;else var a=0;return [4,name,a]} function node(opt,name,children) {if(opt)var sth=opt[1],a=sth;else var a=0;return [5,name,a,children]} var print_list= caml_call1 (caml_call1 (Xml_print[12], [0, Xml_wrap[1], string_of_uri, uri_of_string, float_attrib, int_attrib, string_attrib, space_sep_attrib, comma_sep_attrib, event_handler_attrib, mouse_event_handler_attrib, keyboard_event_handler_attrib, touch_event_handler_attrib, uri_attrib, uris_attrib, empty, comment, pcdata, encodedpcdata, entity, leaf, node, cdata, cdata_script, cdata_style, aname, acontent, content]), [0,0]) [1], include= caml_call1 (Xml_iter[1], [0, Xml_wrap[1], string_of_uri, uri_of_string, float_attrib, int_attrib, string_attrib, space_sep_attrib, comma_sep_attrib, event_handler_attrib, mouse_event_handler_attrib, keyboard_event_handler_attrib, touch_event_handler_attrib, uri_attrib, uris_attrib, empty, comment, pcdata, encodedpcdata, entity, leaf, node, cdata, cdata_script, cdata_style, aname, acontent, content]), amap=include[1], amap1=include[2], rm_attrib=include[3], rm_attrib_from_list=include[4], map_int_attrib=include[5], map_string_attrib=include[7], map_string_attrib_in_list=include[8], add_int_attrib=include[9], add_string_attrib=include[11], add_comma_sep_attrib=include[12], add_space_sep_attrib=include[13], fold=include[14], all_entities=include[15], translate=include[16], pp= caml_call1 (caml_call1 (Xml_print[9], [0, Xml_wrap[1], string_of_uri, uri_of_string, float_attrib, int_attrib, string_attrib, space_sep_attrib, comma_sep_attrib, event_handler_attrib, mouse_event_handler_attrib, keyboard_event_handler_attrib, touch_event_handler_attrib, uri_attrib, uris_attrib, empty, comment, pcdata, encodedpcdata, entity, leaf, node, cdata, cdata_script, cdata_style, aname, acontent, content]), [0,0]) [1], include$0= caml_call1 (Xml_stream[2], [0, Xml_wrap[1], string_of_uri, uri_of_string, float_attrib, int_attrib, string_attrib, space_sep_attrib, comma_sep_attrib, event_handler_attrib, mouse_event_handler_attrib, keyboard_event_handler_attrib, touch_event_handler_attrib, uri_attrib, uris_attrib, empty, comment, pcdata, encodedpcdata, entity, leaf, node, cdata, cdata_script, cdata_style]), of_seq=include$0[1]; function print(fmt,x) {return caml_call3 (print_list,caml_call1(Stdlib_Format[13],fmt),0,[0,x,0])} var _d_=Xml_wrap[1], Tyxml_xml= [0, _d_, string_of_uri, uri_of_string, float_attrib, int_attrib, string_attrib, space_sep_attrib, comma_sep_attrib, event_handler_attrib, mouse_event_handler_attrib, keyboard_event_handler_attrib, touch_event_handler_attrib, uri_attrib, uris_attrib, empty, comment, pcdata, encodedpcdata, entity, leaf, node, cdata, cdata_script, cdata_style, aname, acontent, content, pp, of_seq, amap, amap1, rm_attrib, rm_attrib_from_list, map_int_attrib, map_string_attrib, map_string_attrib_in_list, add_int_attrib, add_string_attrib, add_comma_sep_attrib, add_space_sep_attrib, fold, all_entities, translate, print_list, print]; caml_register_global(17,Tyxml_xml,"Tyxml_xml"); var M= caml_call1 (Svg_f[1], [0, _d_, string_of_uri, uri_of_string, float_attrib, int_attrib, string_attrib, space_sep_attrib, comma_sep_attrib, event_handler_attrib, mouse_event_handler_attrib, keyboard_event_handler_attrib, touch_event_handler_attrib, uri_attrib, uris_attrib, empty, comment, pcdata, encodedpcdata, entity, leaf, node, cdata, cdata_script, cdata_style]), _e_=[0,M[2],M[325],M[327]], include$1= caml_call1 (caml_call1 (Xml_print[8], [0, _d_, string_of_uri, uri_of_string, float_attrib, int_attrib, string_attrib, space_sep_attrib, comma_sep_attrib, event_handler_attrib, mouse_event_handler_attrib, keyboard_event_handler_attrib, touch_event_handler_attrib, uri_attrib, uris_attrib, empty, comment, pcdata, encodedpcdata, entity, leaf, node, cdata, cdata_script, cdata_style, aname, acontent, content]), _e_), _f_=[0,M[2],M[325],M[327]], Make_printer= caml_call1 (caml_call1 (Xml_print[11], [0, _d_, string_of_uri, uri_of_string, float_attrib, int_attrib, string_attrib, space_sep_attrib, comma_sep_attrib, event_handler_attrib, mouse_event_handler_attrib, keyboard_event_handler_attrib, touch_event_handler_attrib, uri_attrib, uris_attrib, empty, comment, pcdata, encodedpcdata, entity, leaf, node, cdata, cdata_script, cdata_style, aname, acontent, content]), _f_), _h_=M[2], _i_=M[3], _j_=M[4], _k_=M[5], _l_=M[6], _m_=M[7], _n_=M[8], _o_=M[9], _p_=M[10], _q_=M[11], _r_=M[12], _s_=M[13], _t_=M[14], _u_=M[15], _v_=M[16], _w_=M[17], _x_=M[18], _y_=M[19], _z_=M[20], _A_=M[21], _B_=M[22], _C_=M[23], _D_=M[24], _E_=M[25], _F_=M[26], _G_=M[27], _H_=M[28], _I_=M[29], _J_=M[30], _K_=M[31], _L_=M[32], _M_=M[33], _N_=M[34], _O_=M[35], _P_=M[36], _Q_=M[37], _R_=M[38], _S_=M[39], _T_=M[40], _U_=M[41], _V_=M[42], _W_=M[43], _X_=M[44], _Y_=M[45], _Z_=M[46], ___=M[47], _$_=M[48], _aa_=M[49], _ab_=M[50], _ac_=M[51], _ad_=M[52], _ae_=M[53], _af_=M[54], _ag_=M[55], _ah_=M[56], _ai_=M[57], _aj_=M[58], _ak_=M[59], _al_=M[60], _am_=M[61], _an_=M[62], _ao_=M[63], _ap_=M[64], _aq_=M[65], _ar_=M[66], _as_=M[67], _at_=M[68], _au_=M[69], _av_=M[70], _aw_=M[71], _ax_=M[72], _ay_=M[73], _az_=M[74], _aA_=M[75], _aB_=M[76], _aC_=M[77], _aD_=M[78], _aE_=M[79], _aF_=M[80], _aG_=M[81], _aH_=M[82], _aI_=M[83], _aJ_=M[84], _aK_=M[85], _aL_=M[86], _aM_=M[87], _aN_=M[88], _aO_=M[89], _aP_=M[90], _aQ_=M[91], _aR_=M[92], _aS_=M[93], _aT_=M[94], _aU_=M[95], _aV_=M[96], _aW_=M[97], _aX_=M[98], _aY_=M[99], _aZ_=M[100], _a0_=M[101], _a1_=M[102], _a2_=M[103], _a3_=M[104], _a4_=M[105], _a5_=M[106], _a6_=M[107], _a7_=M[108], _a8_=M[109], _a9_=M[110], _a__=M[111], _a$_=M[112], _ba_=M[113], _bb_=M[114], _bc_=M[115], _bd_=M[116], _be_=M[117], _bf_=M[118], _bg_=M[119], _bh_=M[120], _bi_=M[121], _bj_=M[122], _bk_=M[123], _bl_=M[124], _bm_=M[125], _bn_=M[126], _bo_=M[127], _bp_=M[128], _bq_=M[129], _br_=M[130], _bs_=M[131], _bt_=M[132], _bu_=M[133], _bv_=M[134], _bw_=M[135], _bx_=M[136], _by_=M[137], _bz_=M[138], _bA_=M[139], _bB_=M[140], _bC_=M[141], _bD_=M[142], _bE_=M[143], _bF_=M[144], _bG_=M[145], _bH_=M[146], _bI_=M[147], _bJ_=M[148], _bK_=M[149], _bL_=M[150], _bM_=M[151], _bN_=M[152], _bO_=M[153], _bP_=M[154], _bQ_=M[155], _bR_=M[156], _bS_=M[157], _bT_=M[158], _bU_=M[159], _bV_=M[160], _bW_=M[161], _bX_=M[162], _bY_=M[163], _bZ_=M[164], _b0_=M[165], _b1_=M[166], _b2_=M[167], _b3_=M[168], _b4_=M[169], _b5_=M[170], _b6_=M[171], _b7_=M[172], _b8_=M[173], _b9_=M[174], _b__=M[175], _b$_=M[176], _ca_=M[177], _cb_=M[178], _cc_=M[179], _cd_=M[180], _ce_=M[181], _cf_=M[182], _cg_=M[183], _ch_=M[184], _ci_=M[185], _cj_=M[186], _ck_=M[187], _cl_=M[188], _cm_=M[189], _cn_=M[190], _co_=M[191], _cp_=M[192], _cq_=M[193], _cr_=M[194], _cs_=M[195], _ct_=M[196], _cu_=M[197], _cv_=M[198], _cw_=M[199], _cx_=M[200], _cy_=M[201], _cz_=M[202], _cA_=M[203], _cB_=M[204], _cC_=M[205], _cD_=M[206], _cE_=M[207], _cF_=M[208], _cG_=M[209], _cH_=M[210], _cI_=M[211], _cJ_=M[212], _cK_=M[213], _cL_=M[214], _cM_=M[215], _cN_=M[216], _cO_=M[217], _cP_=M[218], _cQ_=M[219], _cR_=M[220], _cS_=M[221], _cT_=M[222], _cU_=M[223], _cV_=M[224], _cW_=M[225], _cX_=M[226], _cY_=M[227], _cZ_=M[228], _c0_=M[229], _c1_=M[230], _c2_=M[231], _c3_=M[232], _c4_=M[233], _c5_=M[234], _c6_=M[235], _c7_=M[236], _c8_=M[237], _c9_=M[238], _c__=M[239], _c$_=M[240], _da_=M[241], _db_=M[242], _dc_=M[243], _dd_=M[244], _de_=M[245], _df_=M[246], _dg_=M[247], _dh_=M[248], _di_=M[249], _dj_=M[250], _dk_=M[251], _dl_=M[252], _dm_=M[253], _dn_=M[254], _do_=M[255], _dp_=M[256], _dq_=M[257], _dr_=M[258], _ds_=M[259], _dt_=M[260], _du_=M[261], _dv_=M[262], _dw_=M[263], _dx_=M[264], _dy_=M[265], _dz_=M[266], _dA_=M[267], _dB_=M[268], _dC_=M[269], _dD_=M[270], _dE_=M[271], _dF_=M[272], _dG_=M[273], _dH_=M[274], _dI_=M[275], _dJ_=M[276], _dK_=M[277], _dL_=M[278], _dM_=M[279], _dN_=M[280], _dO_=M[281], _dP_=M[282], _dQ_=M[283], _dR_=M[284], _dS_=M[285], _dT_=M[286], _dU_=M[287], _dV_=M[288], _dW_=M[289], _dX_=M[290], _dY_=M[291], _dZ_=M[292], _d0_=M[293], _d1_=M[294], _d2_=M[295], _d3_=M[296], _d4_=M[297], _d5_=M[298], _d6_=M[299], _d7_=M[300], _d8_=M[301], _d9_=M[302], _d__=M[303], _d$_=M[304], _ea_=M[305], _eb_=M[306], _ec_=M[307], _ed_=M[308], _ee_=M[309], _ef_=M[310], _eg_=M[311], _eh_=M[312], _ei_=M[313], _ej_=M[314], _ek_=M[315], _el_=M[316], _em_=M[317], _en_=M[318], _eo_=M[319], _ep_=M[320], _eq_=M[321], _er_=M[322], _es_=M[323], _et_=M[324], _eu_=M[325], _ev_=M[326], _ew_=M[327], _ex_=M[328], _ey_=M[329], _ez_=M[330], _eA_=include$1[1], _eB_=include$1[2], _g_=M[1], pp$0=caml_call4(_eB_,0,0,0,0), pp_elt=caml_call3(_eA_,0,0,0), Tyxml_svg= [0, _g_, _h_, _i_, _j_, _k_, _l_, _m_, _n_, _o_, _p_, _q_, _r_, _s_, _t_, _u_, _v_, _w_, _x_, _y_, _z_, _A_, _B_, _C_, _D_, _E_, _F_, _G_, _H_, _I_, _J_, _K_, _L_, _M_, _N_, _O_, _P_, _Q_, _R_, _S_, _T_, _U_, _V_, _W_, _X_, _Y_, _Z_, ___, _$_, _aa_, _ab_, _ac_, _ad_, _ae_, _af_, _ag_, _ah_, _ai_, _aj_, _ak_, _al_, _am_, _an_, _ao_, _ap_, _aq_, _ar_, _as_, _at_, _au_, _av_, _aw_, _ax_, _ay_, _az_, _aA_, _aB_, _aC_, _aD_, _aE_, _aF_, _aG_, _aH_, _aI_, _aJ_, _aK_, _aL_, _aM_, _aN_, _aO_, _aP_, _aQ_, _aR_, _aS_, _aT_, _aU_, _aV_, _aW_, _aX_, _aY_, _aZ_, _a0_, _a1_, _a2_, _a3_, _a4_, _a5_, _a6_, _a7_, _a8_, _a9_, _a__, _a$_, _ba_, _bb_, _bc_, _bd_, _be_, _bf_, _bg_, _bh_, _bi_, _bj_, _bk_, _bl_, _bm_, _bn_, _bo_, _bp_, _bq_, _br_, _bs_, _bt_, _bu_, _bv_, _bw_, _bx_, _by_, _bz_, _bA_, _bB_, _bC_, _bD_, _bE_, _bF_, _bG_, _bH_, _bI_, _bJ_, _bK_, _bL_, _bM_, _bN_, _bO_, _bP_, _bQ_, _bR_, _bS_, _bT_, _bU_, _bV_, _bW_, _bX_, _bY_, _bZ_, _b0_, _b1_, _b2_, _b3_, _b4_, _b5_, _b6_, _b7_, _b8_, _b9_, _b__, _b$_, _ca_, _cb_, _cc_, _cd_, _ce_, _cf_, _cg_, _ch_, _ci_, _cj_, _ck_, _cl_, _cm_, _cn_, _co_, _cp_, _cq_, _cr_, _cs_, _ct_, _cu_, _cv_, _cw_, _cx_, _cy_, _cz_, _cA_, _cB_, _cC_, _cD_, _cE_, _cF_, _cG_, _cH_, _cI_, _cJ_, _cK_, _cL_, _cM_, _cN_, _cO_, _cP_, _cQ_, _cR_, _cS_, _cT_, _cU_, _cV_, _cW_, _cX_, _cY_, _cZ_, _c0_, _c1_, _c2_, _c3_, _c4_, _c5_, _c6_, _c7_, _c8_, _c9_, _c__, _c$_, _da_, _db_, _dc_, _dd_, _de_, _df_, _dg_, _dh_, _di_, _dj_, _dk_, _dl_, _dm_, _dn_, _do_, _dp_, _dq_, _dr_, _ds_, _dt_, _du_, _dv_, _dw_, _dx_, _dy_, _dz_, _dA_, _dB_, _dC_, _dD_, _dE_, _dF_, _dG_, _dH_, _dI_, _dJ_, _dK_, _dL_, _dM_, _dN_, _dO_, _dP_, _dQ_, _dR_, _dS_, _dT_, _dU_, _dV_, _dW_, _dX_, _dY_, _dZ_, _d0_, _d1_, _d2_, _d3_, _d4_, _d5_, _d6_, _d7_, _d8_, _d9_, _d__, _d$_, _ea_, _eb_, _ec_, _ed_, _ee_, _ef_, _eg_, _eh_, _ei_, _ej_, _ek_, _el_, _em_, _en_, _eo_, _ep_, _eq_, _er_, _es_, _et_, _eu_, _ev_, _ew_, _ex_, _ey_, _ez_, _eB_, _eA_, Make_printer, pp$0, pp_elt]; caml_register_global(19,Tyxml_svg,"Tyxml_svg"); var M$0= caml_call1 (caml_call1 (Html_f[1], [0, _d_, string_of_uri, uri_of_string, float_attrib, int_attrib, string_attrib, space_sep_attrib, comma_sep_attrib, event_handler_attrib, mouse_event_handler_attrib, keyboard_event_handler_attrib, touch_event_handler_attrib, uri_attrib, uris_attrib, empty, comment, pcdata, encodedpcdata, entity, leaf, node, cdata, cdata_script, cdata_style]), [0, _h_, _i_, _j_, _k_, _l_, _m_, _n_, _o_, _p_, _q_, _r_, _s_, _t_, _u_, _v_, _w_, _x_, _y_, _z_, _A_, _B_, _C_, _D_, _E_, _F_, _G_, _H_, _I_, _J_, _K_, _L_, _M_, _N_, _O_, _P_, _Q_, _R_, _S_, _T_, _U_, _V_, _W_, _X_, _Y_, _Z_, ___, _$_, _aa_, _ab_, _ac_, _ad_, _ae_, _af_, _ag_, _ah_, _ai_, _aj_, _ak_, _al_, _am_, _an_, _ao_, _ap_, _aq_, _ar_, _as_, _at_, _au_, _av_, _aw_, _ax_, _ay_, _az_, _aA_, _aB_, _aC_, _aD_, _aE_, _aF_, _aG_, _aH_, _aI_, _aJ_, _aK_, _aL_, _aM_, _aN_, _aO_, _aP_, _aQ_, _aR_, _aS_, _aT_, _aU_, _aV_, _aW_, _aX_, _aY_, _aZ_, _a0_, _a1_, _a2_, _a3_, _a4_, _a5_, _a6_, _a7_, _a8_, _a9_, _a__, _a$_, _ba_, _bb_, _bc_, _bd_, _be_, _bf_, _bg_, _bh_, _bi_, _bj_, _bk_, _bl_, _bm_, _bn_, _bo_, _bp_, _bq_, _br_, _bs_, _bt_, _bu_, _bv_, _bw_, _bx_, _by_, _bz_, _bA_, _bB_, _bC_, _bD_, _bE_, _bF_, _bG_, _bH_, _bI_, _bJ_, _bK_, _bL_, _bM_, _bN_, _bO_, _bP_, _bQ_, _bR_, _bS_, _bT_, _bU_, _bV_, _bW_, _bX_, _bY_, _bZ_, _b0_, _b1_, _b2_, _b3_, _b4_, _b5_, _b6_, _b7_, _b8_, _b9_, _b__, _b$_, _ca_, _cb_, _cc_, _cd_, _ce_, _cf_, _cg_, _ch_, _ci_, _cj_, _ck_, _cl_, _cm_, _cn_, _co_, _cp_, _cq_, _cr_, _cs_, _ct_, _cu_, _cv_, _cw_, _cx_, _cy_, _cz_, _cA_, _cB_, _cC_, _cD_, _cE_, _cF_, _cG_, _cH_, _cI_, _cJ_, _cK_, _cL_, _cM_, _cN_, _cO_, _cP_, _cQ_, _cR_, _cS_, _cT_, _cU_, _cV_, _cW_, _cX_, _cY_, _cZ_, _c0_, _c1_, _c2_, _c3_, _c4_, _c5_, _c6_, _c7_, _c8_, _c9_, _c__, _c$_, _da_, _db_, _dc_, _dd_, _de_, _df_, _dg_, _dh_, _di_, _dj_, _dk_, _dl_, _dm_, _dn_, _do_, _dp_, _dq_, _dr_, _ds_, _dt_, _du_, _dv_, _dw_, _dx_, _dy_, _dz_, _dA_, _dB_, _dC_, _dD_, _dE_, _dF_, _dG_, _dH_, _dI_, _dJ_, _dK_, _dL_, _dM_, _dN_, _dO_, _dP_, _dQ_, _dR_, _dS_, _dT_, _dU_, _dV_, _dW_, _dX_, _dY_, _dZ_, _d0_, _d1_, _d2_, _d3_, _d4_, _d5_, _d6_, _d7_, _d8_, _d9_, _d__, _d$_, _ea_, _eb_, _ec_, _ed_, _ee_, _ef_, _eg_, _eh_, _ei_, _ej_, _ek_, _el_, _em_, _en_, _eo_, _ep_, _eq_, _er_, _es_, _et_, _eu_, _ev_, _ew_, _ex_, _ey_, _ez_]), _eC_=[0,M$0[2],M$0[339],M$0[341]], include$2= caml_call1 (caml_call1 (Xml_print[8], [0, _d_, string_of_uri, uri_of_string, float_attrib, int_attrib, string_attrib, space_sep_attrib, comma_sep_attrib, event_handler_attrib, mouse_event_handler_attrib, keyboard_event_handler_attrib, touch_event_handler_attrib, uri_attrib, uris_attrib, empty, comment, pcdata, encodedpcdata, entity, leaf, node, cdata, cdata_script, cdata_style, aname, acontent, content]), _eC_), _eD_=[0,M$0[2],M$0[339],M$0[341]], Make_printer$0= caml_call1 (caml_call1 (Xml_print[11], [0, _d_, string_of_uri, uri_of_string, float_attrib, int_attrib, string_attrib, space_sep_attrib, comma_sep_attrib, event_handler_attrib, mouse_event_handler_attrib, keyboard_event_handler_attrib, touch_event_handler_attrib, uri_attrib, uris_attrib, empty, comment, pcdata, encodedpcdata, entity, leaf, node, cdata, cdata_script, cdata_style, aname, acontent, content]), _eD_), _j2_=include$2[1], _j3_=include$2[2], _eE_=M$0[1], _eF_=M$0[2], _eG_=M$0[3], _eH_=M$0[4], _eI_=M$0[5], _eJ_=M$0[6], _eK_=M$0[7], _eL_=M$0[8], _eM_=M$0[9], _eN_=M$0[10], _eO_=M$0[11], _eP_=M$0[12], _eQ_=M$0[13], _eR_=M$0[14], _eS_=M$0[15], _eT_=M$0[16], _eU_=M$0[17], _eV_=M$0[18], _eW_=M$0[19], _eX_=M$0[20], _eY_=M$0[21], _eZ_=M$0[22], _e0_=M$0[23], _e1_=M$0[24], _e2_=M$0[25], _e3_=M$0[26], _e4_=M$0[27], _e5_=M$0[28], _e6_=M$0[29], _e7_=M$0[30], _e8_=M$0[31], _e9_=M$0[32], _e__=M$0[33], _e$_=M$0[34], _fa_=M$0[35], _fb_=M$0[36], _fc_=M$0[37], _fd_=M$0[38], _fe_=M$0[39], _ff_=M$0[40], _fg_=M$0[41], _fh_=M$0[42], _fi_=M$0[43], _fj_=M$0[44], _fk_=M$0[45], _fl_=M$0[46], _fm_=M$0[47], _fn_=M$0[48], _fo_=M$0[49], _fp_=M$0[50], _fq_=M$0[51], _fr_=M$0[52], _fs_=M$0[53], _ft_=M$0[54], _fu_=M$0[55], _fv_=M$0[56], _fw_=M$0[57], _fx_=M$0[58], _fy_=M$0[59], _fz_=M$0[60], _fA_=M$0[61], _fB_=M$0[62], _fC_=M$0[63], _fD_=M$0[64], _fE_=M$0[65], _fF_=M$0[66], _fG_=M$0[67], _fH_=M$0[68], _fI_=M$0[69], _fJ_=M$0[70], _fK_=M$0[71], _fL_=M$0[72], _fM_=M$0[73], _fN_=M$0[74], _fO_=M$0[75], _fP_=M$0[76], _fQ_=M$0[77], _fR_=M$0[78], _fS_=M$0[79], _fT_=M$0[80], _fU_=M$0[81], _fV_=M$0[82], _fW_=M$0[83], _fX_=M$0[84], _fY_=M$0[85], _fZ_=M$0[86], _f0_=M$0[87], _f1_=M$0[88], _f2_=M$0[89], _f3_=M$0[90], _f4_=M$0[91], _f5_=M$0[92], _f6_=M$0[93], _f7_=M$0[94], _f8_=M$0[95], _f9_=M$0[96], _f__=M$0[97], _f$_=M$0[98], _ga_=M$0[99], _gb_=M$0[100], _gc_=M$0[101], _gd_=M$0[102], _ge_=M$0[103], _gf_=M$0[104], _gg_=M$0[105], _gh_=M$0[106], _gi_=M$0[107], _gj_=M$0[108], _gk_=M$0[109], _gl_=M$0[110], _gm_=M$0[111], _gn_=M$0[112], _go_=M$0[113], _gp_=M$0[114], _gq_=M$0[115], _gr_=M$0[116], _gs_=M$0[117], _gt_=M$0[118], _gu_=M$0[119], _gv_=M$0[120], _gw_=M$0[121], _gx_=M$0[122], _gy_=M$0[123], _gz_=M$0[124], _gA_=M$0[125], _gB_=M$0[126], _gC_=M$0[127], _gD_=M$0[128], _gE_=M$0[129], _gF_=M$0[130], _gG_=M$0[131], _gH_=M$0[132], _gI_=M$0[133], _gJ_=M$0[134], _gK_=M$0[135], _gL_=M$0[136], _gM_=M$0[137], _gN_=M$0[138], _gO_=M$0[139], _gP_=M$0[140], _gQ_=M$0[141], _gR_=M$0[142], _gS_=M$0[143], _gT_=M$0[144], _gU_=M$0[145], _gV_=M$0[146], _gW_=M$0[147], _gX_=M$0[148], _gY_=M$0[149], _gZ_=M$0[150], _g0_=M$0[151], _g1_=M$0[152], _g2_=M$0[153], _g3_=M$0[154], _g4_=M$0[155], _g5_=M$0[156], _g6_=M$0[157], _g7_=M$0[158], _g8_=M$0[159], _g9_=M$0[160], _g__=M$0[161], _g$_=M$0[162], _ha_=M$0[163], _hb_=M$0[164], _hc_=M$0[165], _hd_=M$0[166], _he_=M$0[167], _hf_=M$0[168], _hg_=M$0[169], _hh_=M$0[170], _hi_=M$0[171], _hj_=M$0[172], _hk_=M$0[173], _hl_=M$0[174], _hm_=M$0[175], _hn_=M$0[176], _ho_=M$0[177], _hp_=M$0[178], _hq_=M$0[179], _hr_=M$0[180], _hs_=M$0[181], _ht_=M$0[182], _hu_=M$0[183], _hv_=M$0[184], _hw_=M$0[185], _hx_=M$0[186], _hy_=M$0[187], _hz_=M$0[188], _hA_=M$0[189], _hB_=M$0[190], _hC_=M$0[191], _hD_=M$0[192], _hE_=M$0[193], _hF_=M$0[194], _hG_=M$0[195], _hH_=M$0[196], _hI_=M$0[197], _hJ_=M$0[198], _hK_=M$0[199], _hL_=M$0[200], _hM_=M$0[201], _hN_=M$0[202], _hO_=M$0[203], _hP_=M$0[204], _hQ_=M$0[205], _hR_=M$0[206], _hS_=M$0[207], _hT_=M$0[208], _hU_=M$0[209], _hV_=M$0[210], _hW_=M$0[211], _hX_=M$0[212], _hY_=M$0[213], _hZ_=M$0[214], _h0_=M$0[215], _h1_=M$0[216], _h2_=M$0[217], _h3_=M$0[218], _h4_=M$0[219], _h5_=M$0[220], _h6_=M$0[221], _h7_=M$0[222], _h8_=M$0[223], _h9_=M$0[224], _h__=M$0[225], _h$_=M$0[226], _ia_=M$0[227], _ib_=M$0[228], _ic_=M$0[229], _id_=M$0[230], _ie_=M$0[231], _if_=M$0[232], _ig_=M$0[233], _ih_=M$0[234], _ii_=M$0[235], _ij_=M$0[236], _ik_=M$0[237], _il_=M$0[238], _im_=M$0[239], _in_=M$0[240], _io_=M$0[241], _ip_=M$0[242], _iq_=M$0[243], _ir_=M$0[244], _is_=M$0[245], _it_=M$0[246], _iu_=M$0[247], _iv_=M$0[248], _iw_=M$0[249], _ix_=M$0[250], _iy_=M$0[251], _iz_=M$0[252], _iA_=M$0[253], _iB_=M$0[254], _iC_=M$0[255], _iD_=M$0[256], _iE_=M$0[257], _iF_=M$0[258], _iG_=M$0[259], _iH_=M$0[260], _iI_=M$0[261], _iJ_=M$0[262], _iK_=M$0[263], _iL_=M$0[264], _iM_=M$0[265], _iN_=M$0[266], _iO_=M$0[267], _iP_=M$0[268], _iQ_=M$0[269], _iR_=M$0[270], _iS_=M$0[271], _iT_=M$0[272], _iU_=M$0[273], _iV_=M$0[274], _iW_=M$0[275], _iX_=M$0[276], _iY_=M$0[277], _iZ_=M$0[278], _i0_=M$0[279], _i1_=M$0[280], _i2_=M$0[281], _i3_=M$0[282], _i4_=M$0[283], _i5_=M$0[284], _i6_=M$0[285], _i7_=M$0[286], _i8_=M$0[287], _i9_=M$0[288], _i__=M$0[289], _i$_=M$0[290], _ja_=M$0[291], _jb_=M$0[292], _jc_=M$0[293], _jd_=M$0[294], _je_=M$0[295], _jf_=M$0[296], _jg_=M$0[297], _jh_=M$0[298], _ji_=M$0[299], _jj_=M$0[300], _jk_=M$0[301], _jl_=M$0[302], _jm_=M$0[303], _jn_=M$0[304], _jo_=M$0[305], _jp_=M$0[306], _jq_=M$0[307], _jr_=M$0[308], _js_=M$0[309], _jt_=M$0[310], _ju_=M$0[311], _jv_=M$0[312], _jw_=M$0[313], _jx_=M$0[314], _jy_=M$0[315], _jz_=M$0[316], _jA_=M$0[317], _jB_=M$0[318], _jC_=M$0[319], _jD_=M$0[320], _jE_=M$0[321], _jF_=M$0[322], _jG_=M$0[323], _jH_=M$0[324], _jI_=M$0[325], _jJ_=M$0[326], _jK_=M$0[327], _jL_=M$0[328], _jM_=M$0[329], _jN_=M$0[330], _jO_=M$0[331], _jP_=M$0[332], _jQ_=M$0[333], _jR_=M$0[334], _jS_=M$0[335], _jT_=M$0[336], _jU_=M$0[337], _jV_=M$0[338], _jW_=M$0[339], _jX_=M$0[340], _jY_=M$0[341], _jZ_=M$0[342], _j0_=M$0[343], _j1_=M$0[344], pp$1=caml_call4(_j3_,0,0,0,0), pp_elt$0=caml_call3(_j2_,0,0,0), Tyxml_html= [0, _eE_, _eF_, _eG_, _eH_, _eI_, _eJ_, _eK_, _eL_, _eM_, _eN_, _eO_, _eP_, _eQ_, _eR_, _eS_, _eT_, _eU_, _eV_, _eW_, _eX_, _eY_, _eZ_, _e0_, _e1_, _e2_, _e3_, _e4_, _e5_, _e6_, _e7_, _e8_, _e9_, _e__, _e$_, _fa_, _fb_, _fc_, _fd_, _fe_, _ff_, _fg_, _fh_, _fi_, _fj_, _fk_, _fl_, _fm_, _fn_, _fo_, _fp_, _fq_, _fr_, _fs_, _ft_, _fu_, _fv_, _fw_, _fx_, _fy_, _fz_, _fA_, _fB_, _fC_, _fD_, _fE_, _fF_, _fG_, _fH_, _fI_, _fJ_, _fK_, _fL_, _fM_, _fN_, _fO_, _fP_, _fQ_, _fR_, _fS_, _fT_, _fU_, _fV_, _fW_, _fX_, _fY_, _fZ_, _f0_, _f1_, _f2_, _f3_, _f4_, _f5_, _f6_, _f7_, _f8_, _f9_, _f__, _f$_, _ga_, _gb_, _gc_, _gd_, _ge_, _gf_, _gg_, _gh_, _gi_, _gj_, _gk_, _gl_, _gm_, _gn_, _go_, _gp_, _gq_, _gr_, _gs_, _gt_, _gu_, _gv_, _gw_, _gx_, _gy_, _gz_, _gA_, _gB_, _gC_, _gD_, _gE_, _gF_, _gG_, _gH_, _gI_, _gJ_, _gK_, _gL_, _gM_, _gN_, _gO_, _gP_, _gQ_, _gR_, _gS_, _gT_, _gU_, _gV_, _gW_, _gX_, _gY_, _gZ_, _g0_, _g1_, _g2_, _g3_, _g4_, _g5_, _g6_, _g7_, _g8_, _g9_, _g__, _g$_, _ha_, _hb_, _hc_, _hd_, _he_, _hf_, _hg_, _hh_, _hi_, _hj_, _hk_, _hl_, _hm_, _hn_, _ho_, _hp_, _hq_, _hr_, _hs_, _ht_, _hu_, _hv_, _hw_, _hx_, _hy_, _hz_, _hA_, _hB_, _hC_, _hD_, _hE_, _hF_, _hG_, _hH_, _hI_, _hJ_, _hK_, _hL_, _hM_, _hN_, _hO_, _hP_, _hQ_, _hR_, _hS_, _hT_, _hU_, _hV_, _hW_, _hX_, _hY_, _hZ_, _h0_, _h1_, _h2_, _h3_, _h4_, _h5_, _h6_, _h7_, _h8_, _h9_, _h__, _h$_, _ia_, _ib_, _ic_, _id_, _ie_, _if_, _ig_, _ih_, _ii_, _ij_, _ik_, _il_, _im_, _in_, _io_, _ip_, _iq_, _ir_, _is_, _it_, _iu_, _iv_, _iw_, _ix_, _iy_, _iz_, _iA_, _iB_, _iC_, _iD_, _iE_, _iF_, _iG_, _iH_, _iI_, _iJ_, _iK_, _iL_, _iM_, _iN_, _iO_, _iP_, _iQ_, _iR_, _iS_, _iT_, _iU_, _iV_, _iW_, _iX_, _iY_, _iZ_, _i0_, _i1_, _i2_, _i3_, _i4_, _i5_, _i6_, _i7_, _i8_, _i9_, _i__, _i$_, _ja_, _jb_, _jc_, _jd_, _je_, _jf_, _jg_, _jh_, _ji_, _jj_, _jk_, _jl_, _jm_, _jn_, _jo_, _jp_, _jq_, _jr_, _js_, _jt_, _ju_, _jv_, _jw_, _jx_, _jy_, _jz_, _jA_, _jB_, _jC_, _jD_, _jE_, _jF_, _jG_, _jH_, _jI_, _jJ_, _jK_, _jL_, _jM_, _jN_, _jO_, _jP_, _jQ_, _jR_, _jS_, _jT_, _jU_, _jV_, _jW_, _jX_, _jY_, _jZ_, _j0_, _j1_, _j3_, _j2_, Make_printer$0, pp$1, pp_elt$0]; caml_register_global(21,Tyxml_html,"Tyxml_html"); var Tyxml=[0]; caml_register_global(22,Tyxml,"Tyxml"); return} (globalThis)); //# 1 ".mechanic.eobjs/byte/dune__exe__Mechanic.cmo.js" (function(globalThis) {"use strict"; var runtime=globalThis.jsoo_runtime, caml_jsstring_of_string=runtime.caml_jsstring_of_string, caml_mul=runtime.caml_mul, caml_string_of_jsbytes=runtime.caml_string_of_jsbytes, caml_string_of_jsstring=runtime.caml_string_of_jsstring; function caml_call1(f,a0) {return f.length == 1?f(a0):runtime.caml_call_gen(f,[a0])} function caml_call2(f,a0,a1) {return f.length == 2?f(a0,a1):runtime.caml_call_gen(f,[a0,a1])} function caml_call3(f,a0,a1,a2) {return f.length == 3?f(a0,a1,a2):runtime.caml_call_gen(f,[a0,a1,a2])} function caml_call5(f,a0,a1,a2,a3,a4) {return f.length == 5 ?f(a0,a1,a2,a3,a4) :runtime.caml_call_gen(f,[a0,a1,a2,a3,a4])} var global_data=runtime.caml_get_global_data(), cst_R_initialiser_compl_tement= caml_string_of_jsbytes ("R\xc3\xa9initialiser compl\xc3\xa8tement le formulaire ?"), cst$12=caml_string_of_jsbytes(""), cst_nom_prenom$1=caml_string_of_jsbytes("nom_prenom"), cst$13=caml_string_of_jsbytes(""), cst_arrivee$1=caml_string_of_jsbytes("arrivee"), cst$14=caml_string_of_jsbytes(""), cst_depart$1=caml_string_of_jsbytes("depart"), cst$10=caml_string_of_jsbytes("\xc2\xa0\xe2\x82\xac"), cst_qte=caml_string_of_jsbytes("_qte"), cst$11=caml_string_of_jsbytes("\xc2\xa0\xe2\x82\xac"), cst_total=caml_string_of_jsbytes("total"), cst_benvoi=caml_string_of_jsbytes("benvoi"), cst_subject_R_servation_linge_= caml_string_of_jsbytes ("?subject=R\xc3\xa9servation linge Dubuval&body="), cst_mailto=caml_string_of_jsbytes("mailto:"), cst_resume=caml_string_of_jsbytes("resume"), cst$7=caml_string_of_jsbytes(", "), cst$9=caml_string_of_jsbytes(""), cst$8=caml_string_of_jsbytes(" "), cst$6=caml_string_of_jsbytes(" : "), cst$5=caml_string_of_jsbytes("\xc2\xa0\xe2\x82\xac"), cst_Total=caml_string_of_jsbytes("Total : "), cst_depart$0=caml_string_of_jsbytes("depart"), cst_Date_de_d_part=caml_string_of_jsbytes("Date de d\xc3\xa9part : "), cst_arrivee$0=caml_string_of_jsbytes("arrivee"), cst_Date_d_arriv_e= caml_string_of_jsbytes("Date d\xe2\x80\x99arriv\xc3\xa9e : "), cst_nom_prenom$0=caml_string_of_jsbytes("nom_prenom"), cst_Locataire=caml_string_of_jsbytes("Locataire : "), cst$3=caml_string_of_jsbytes(", "), cst$4=caml_string_of_jsbytes(""), cst$2=caml_string_of_jsbytes(" : "), cst_nom_prenom=caml_string_of_jsbytes("nom_prenom"), cst_arrivee=caml_string_of_jsbytes("arrivee"), cst_depart=caml_string_of_jsbytes("depart"), cst$1=caml_string_of_jsbytes("_"), cst$0=caml_string_of_jsbytes("_"), cst=caml_string_of_jsbytes(""), cst_compute=caml_string_of_jsbytes("compute"), cst_reset_form=caml_string_of_jsbytes("reset_form"), Js_of_ocaml_Dom_html=global_data.Js_of_ocaml__Dom_html, Stdlib_List=global_data.Stdlib__List, Stdlib=global_data.Stdlib, Inventaire_linge=global_data.Inventaire_linge, Stdlib_Fun=global_data.Stdlib__Fun, Stdlib_String=global_data.Stdlib__String, Stdlib_Printf=global_data.Stdlib__Printf, Tyxml_html=global_data.Tyxml_html, Stdlib_Format=global_data.Stdlib__Format, Stdlib_Buffer=global_data.Stdlib__Buffer, Js_of_ocaml_Js=global_data.Js_of_ocaml__Js, _l_= [0, [11,caml_string_of_jsbytes(" ("),[2,0,[12,41,0]]], caml_string_of_jsbytes(" (%s)")], _k_=[0,0,0], _m_=[0,[15,0],caml_string_of_jsbytes("%a")], _h_= [0, [11,caml_string_of_jsbytes(" ("),[2,0,[12,41,0]]], caml_string_of_jsbytes(" (%s)")], _i_= [0, [11, caml_string_of_jsbytes("\xe2\x80\x94 "), [4, 0, 0, 0, [12,32,[2,0,[2,0,[12,37,[11,caml_string_of_jsbytes("0A"),0]]]]]]], caml_string_of_jsbytes("\xe2\x80\x94 %d %s%s%%0A")], _g_=[0,0,0], _c_= [0, [11, caml_string_of_jsbytes ("----- R\xc3\xa9servation linge Dubuval, Les terrasses des Choseaux, Appartement B6 -----"), [12,37,[11,caml_string_of_jsbytes("0A"),0]]], caml_string_of_jsbytes ("----- R\xc3\xa9servation linge Dubuval, Les terrasses des Choseaux, Appartement B6 -----%%0A")], _d_= [0, [11, caml_string_of_jsbytes("Locataire : "), [2,0,[12,37,[11,caml_string_of_jsbytes("0A"),0]]]], caml_string_of_jsbytes("Locataire : %s%%0A")], _e_= [0, [11, caml_string_of_jsbytes("Date d\xe2\x80\x99arriv\xc3\xa9e : "), [2,0,[12,37,[11,caml_string_of_jsbytes("0A"),0]]]], caml_string_of_jsbytes("Date d\xe2\x80\x99arriv\xc3\xa9e : %s%%0A")], _f_= [0, [11, caml_string_of_jsbytes("Date de d\xc3\xa9part : "), [2,0,[12,37,[11,caml_string_of_jsbytes("0A"),0]]]], caml_string_of_jsbytes("Date de d\xc3\xa9part : %s%%0A")], _j_= [0, [12, 37, [11, caml_string_of_jsbytes("0ATotal : "), [4, 0, 0, 0, [11, caml_string_of_jsbytes(" \xe2\x82\xac"), [12,37,[11,caml_string_of_jsbytes("0A"),0]]]]]], caml_string_of_jsbytes("%%0ATotal : %d \xe2\x82\xac%%0A")]; function set_string_input_by_id(nm,v) {var match= caml_call2(Js_of_ocaml_Dom_html[5],nm,Js_of_ocaml_Dom_html[117][33]); if(match) {var inp=match[1],t0=caml_jsstring_of_string(v);return inp.value = t0} return 0} function read_string_input_by_id(nm) {var match= caml_call2(Js_of_ocaml_Dom_html[5],nm,Js_of_ocaml_Dom_html[117][33]); if(match){var inp=match[1];return caml_string_of_jsstring(inp.value)} return cst} function zero_int_input_by_id(nm) {var match= caml_call2(Js_of_ocaml_Dom_html[5],nm,Js_of_ocaml_Dom_html[117][50]); if(match) {var inp=match[1],t3=caml_jsstring_of_string(caml_call1(Stdlib[33],0)); return inp.value = t3} return 0} function read_int_input_by_id(nm) {var match= caml_call2(Js_of_ocaml_Dom_html[5],nm,Js_of_ocaml_Dom_html[117][50]); if(match) {var inp=match[1]; return runtime.caml_int_of_string(caml_string_of_jsstring(inp.value))} return 0} function set_td_by_id(nm,v) {var match= caml_call2(Js_of_ocaml_Dom_html[5],nm,Js_of_ocaml_Dom_html[117][54]); if(match) {var td=match[1],t6=caml_jsstring_of_string(v); return td.innerHTML = t6} return 0} function field_id_by_fourniture(f) {var _ba_=f[4]; function _bb_(param) {var p=param[1], _bc_=caml_call1(Inventaire_linge[4],p), _bd_=caml_call2(Stdlib[28],cst$0,_bc_); return caml_call2(Stdlib[28],f[1],_bd_)} return caml_call1(caml_call1(Stdlib_List[19],_bb_),_ba_)} function field_id_and_piece_by_fournitu(f) {var _a7_=f[4]; function _a8_(param) {var p=param[1], _a9_=caml_call1(Inventaire_linge[5],p), _a__=caml_call1(Inventaire_linge[4],p), _a$_=caml_call2(Stdlib[28],cst$1,_a__); return [0,caml_call2(Stdlib[28],f[1],_a$_),_a9_]} return caml_call1(caml_call1(Stdlib_List[19],_a8_),_a7_)} var _a_=Inventaire_linge[6], _b_=caml_call1(caml_call1(Stdlib_List[19],field_id_by_fourniture),_a_), all_names=caml_call1(Stdlib_List[13],_b_); function compute(param) {var _aj_=Inventaire_linge[6]; function _ak_(f) {var _a1_=field_id_by_fourniture(f),_a2_=0; function _a3_(s,field_id) {return s + read_int_input_by_id(field_id) | 0} var qte=caml_call1(caml_call2(Stdlib_List[25],_a3_,_a2_),_a1_), _a4_=caml_call1(Stdlib[33],caml_mul(qte,f[3])), _a5_=caml_call2(Stdlib[28],_a4_,cst$10); set_td_by_id(f[1],_a5_); var _a6_=caml_call1(Stdlib[33],qte); return set_td_by_id(caml_call2(Stdlib[28],f[1],cst_qte),_a6_)} caml_call2(Stdlib_List[17],_ak_,_aj_); var _al_=Inventaire_linge[6],_am_=0; function _an_(total,f) {var _aX_=field_id_by_fourniture(f),_aY_=0; function _aZ_(s,field_id) {return s + read_int_input_by_id(field_id) | 0} var _a0_=caml_call1(caml_call2(Stdlib_List[25],_aZ_,_aY_),_aX_); return total + caml_mul(f[3],_a0_) | 0} var _ao_=caml_call3(Stdlib_List[25],_an_,_am_,_al_), _ap_=caml_call1(Stdlib[33],_ao_); set_td_by_id (cst_total, caml_call1(caml_call2(Stdlib_Fun[2],Stdlib[28],cst$11),_ap_)); var match= caml_call2 (Js_of_ocaml_Dom_html[5],cst_benvoi,Js_of_ocaml_Dom_html[117][2]); if(match) {var a=match[1],b=caml_call1(Stdlib_Buffer[1],500); caml_call2(Stdlib_Printf[5],b,_c_); var _n_=read_string_input_by_id(cst_nom_prenom); caml_call3(Stdlib_Printf[5],b,_d_,_n_); var _o_=read_string_input_by_id(cst_arrivee); caml_call3(Stdlib_Printf[5],b,_e_,_o_); var _p_=read_string_input_by_id(cst_depart); caml_call3(Stdlib_Printf[5],b,_f_,_p_); var _q_=Inventaire_linge[6], _r_= function(f) {var _aQ_=field_id_and_piece_by_fournitu(f); function _aR_(param,_aT_) {var short$0=_aT_[2], field_id=_aT_[1], detail=param[2], s=param[1], q=read_int_input_by_id(field_id); if(0 < q) var _aU_=caml_call1(Stdlib[33],q), _aV_=caml_call2(Stdlib[28],cst$2,_aU_), _aW_=[0,caml_call2(Stdlib[28],short$0,_aV_),detail]; else var _aW_=detail; return [0,s + q | 0,_aW_]} var param=caml_call1(caml_call2(Stdlib_List[25],_aR_,_g_),_aQ_), _aS_=param[1]; if(0 === _aS_)return 0; var detail=param[2]; return [0,[0,f[2],_aS_,detail]]}, _s_=caml_call2(Stdlib_List[22],_r_,_q_), _t_= function(param) {var detail=param[3],q=param[2],descr=param[1]; if(detail) var _aO_=caml_call2(Stdlib_String[6],cst$3,detail), _aP_=caml_call2(Stdlib_Printf[4],_h_,_aO_); else var _aP_=cst$4; return caml_call5(Stdlib_Printf[5],b,_i_,q,descr,_aP_)}; caml_call1(caml_call1(Stdlib_List[17],_t_),_s_); var _u_=Inventaire_linge[6], _v_=0, _w_= function(total,f) {var _aK_=field_id_by_fourniture(f),_aL_=0; function _aM_(s,field_id) {return s + read_int_input_by_id(field_id) | 0} var _aN_=caml_call1(caml_call2(Stdlib_List[25],_aM_,_aL_),_aK_); return total + caml_mul(f[3],_aN_) | 0}, _x_=caml_call3(Stdlib_List[25],_w_,_v_,_u_); caml_call3(Stdlib_Printf[5],b,_j_,_x_); var _y_=caml_call1(Stdlib_Buffer[2],b), _ah_=caml_call2(Stdlib[28],cst_subject_R_servation_linge_,_y_), _ai_=caml_call2(Stdlib[28],Inventaire_linge[2],_ah_), t8=caml_jsstring_of_string(caml_call2(Stdlib[28],cst_mailto,_ai_)); a.href = t8} var match$0= caml_call2 (Js_of_ocaml_Dom_html[5],cst_resume,Js_of_ocaml_Dom_html[117][15]); if(match$0) {var resume=match$0[1], _A_=[0,caml_call1(Tyxml_html[219],cst$5),0], _z_=0, _B_=Inventaire_linge[6], _C_=0, _D_= function(total,f) {var _aG_=field_id_by_fourniture(f),_aH_=0; function _aI_(s,field_id) {return s + read_int_input_by_id(field_id) | 0} var _aJ_=caml_call1(caml_call2(Stdlib_List[25],_aI_,_aH_),_aG_); return total + caml_mul(f[3],_aJ_) | 0}, _E_=caml_call3(Stdlib_List[25],_D_,_C_,_B_), _F_=caml_call1(Stdlib[33],_E_), _G_=[0,caml_call1(Tyxml_html[219],_F_),_A_], _H_=[0,caml_call1(Tyxml_html[219],cst_Total),0], _I_=[0,caml_call2(Tyxml_html[254],0,_H_),_G_], _J_=[0,caml_call2(Tyxml_html[241],0,_I_),_z_], _K_=[0,caml_call2(Tyxml_html[264],0,0),_J_], _L_=Inventaire_linge[6], _M_= function(f) {var _ay_=field_id_and_piece_by_fournitu(f); function _az_(param,_aC_) {var short$0=_aC_[2], field_id=_aC_[1], detail=param[2], s=param[1], q=read_int_input_by_id(field_id); if(0 < q) var _aD_=caml_call1(Stdlib[33],q), _aE_=caml_call2(Stdlib[28],cst$6,_aD_), _aF_=[0,caml_call2(Stdlib[28],short$0,_aE_),detail]; else var _aF_=detail; return [0,s + q | 0,_aF_]} var param=caml_call1(caml_call2(Stdlib_List[25],_az_,_k_),_ay_), _aA_=param[1]; if(0 === _aA_)return 0; var detail=param[2],_aB_=caml_call1(Stdlib_List[9],detail); return [0,[0,f[2],_aA_,_aB_]]}, _N_=caml_call2(Stdlib_List[22],_M_,_L_), _O_= function(param) {var detail=param[3],q=param[2],descr=param[1],_aq_=0; if(detail) var _ar_=caml_call2(Stdlib_String[6],cst$7,detail), _as_=caml_call2(Stdlib_Printf[4],_l_,_ar_); else var _as_=cst$9; var _at_=[0,caml_call1(Tyxml_html[219],_as_),_aq_], _au_=[0,caml_call1(Tyxml_html[219],descr),_at_], _av_=[0,caml_call1(Tyxml_html[219],cst$8),_au_], _aw_=caml_call1(Stdlib[33],q), _ax_=[0,caml_call1(Tyxml_html[219],_aw_),_av_]; return caml_call2(Tyxml_html[250],0,_ax_)}, _P_=caml_call1(caml_call1(Stdlib_List[19],_O_),_N_), _Q_=[0,caml_call2(Tyxml_html[247],0,_P_),_K_], _R_=[0,caml_call2(Tyxml_html[264],0,0),_Q_], _S_=read_string_input_by_id(cst_depart$0), _T_=[0,caml_call1(Tyxml_html[219],_S_),0], _U_=[0,caml_call1(Tyxml_html[219],cst_Date_de_d_part),_T_], _V_=[0,caml_call2(Tyxml_html[254],0,_U_),0], _W_=[0,caml_call2(Tyxml_html[241],0,_V_),_R_], _X_=read_string_input_by_id(cst_arrivee$0), _Y_=[0,caml_call1(Tyxml_html[219],_X_),0], _Z_=[0,caml_call1(Tyxml_html[219],cst_Date_d_arriv_e),_Y_], ___=[0,caml_call2(Tyxml_html[254],0,_Z_),0], _$_=[0,caml_call2(Tyxml_html[241],0,___),_W_], _aa_=read_string_input_by_id(cst_nom_prenom$0), _ab_=[0,caml_call1(Tyxml_html[219],_aa_),0], _ac_=[0,caml_call1(Tyxml_html[219],cst_Locataire),_ab_], _ad_=[0,caml_call2(Tyxml_html[254],0,_ac_),0], _ae_=[0,caml_call2(Tyxml_html[241],0,_ad_),_$_], _af_=caml_call2(Tyxml_html[244],0,_ae_), _ag_=caml_call3(Tyxml_html[346],0,0,0), t10= caml_jsstring_of_string (caml_call1(caml_call2(Stdlib_Format[133],_m_,_ag_),_af_)); return resume.innerHTML = t10} return 0} function reset_form(param) {var t12=caml_jsstring_of_string(cst_R_initialiser_compl_tement), doit=Js_of_ocaml_Dom_html[8].confirm(t12) | 0; return doit ?(set_string_input_by_id(cst_nom_prenom$1,cst$12), set_string_input_by_id(cst_arrivee$1,cst$13), set_string_input_by_id(cst_depart$1,cst$14), caml_call1 (caml_call1(Stdlib_List[17],zero_int_input_by_id),all_names), compute(0)) :doit} caml_call2(Js_of_ocaml_Js[46],cst_compute,compute); caml_call2(Js_of_ocaml_Js[46],cst_reset_form,reset_form); var Dune_exe_Mechanic=[0]; runtime.caml_register_global(68,Dune_exe_Mechanic,"Dune__exe__Mechanic"); return} (globalThis)); //# 1 "../.js/stdlib/std_exit.cmo.js" (function(globalThis) {"use strict"; var runtime=globalThis.jsoo_runtime; function caml_call1(f,a0) {return f.length == 1?f(a0):runtime.caml_call_gen(f,[a0])} var global_data=runtime.caml_get_global_data(),Stdlib=global_data.Stdlib; caml_call1(Stdlib[103],0); var Std_exit=[0]; runtime.caml_register_global(1,Std_exit,"Std_exit"); return} (globalThis)); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLjAsImZpbGUiOiJtZWNoYW5pYy5iYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJuYW1lcyI6WyJPYmplY3QiLCJnbG9iYWxUaGlzIiwidGhpcyIsImdldCIsIl9UXyIsImdsb2JhbCIsInNlbGYiLCJjYW1sX2ludDY0X2lzX3plcm8iLCJ4IiwiY2FtbF9zdHJfcmVwZWF0IiwibiIsInMiLCJyIiwibCIsImNhbWxfaW50NjRfb2Zmc2V0IiwiTWF0aCIsImNhbWxfcmFpc2VfY29uc3RhbnQiLCJ0YWciLCJjYW1sX2dsb2JhbF9kYXRhIiwiY2FtbF9yYWlzZV96ZXJvX2RpdmlkZSIsIk1sSW50NjQiLCJsbyIsIm1pIiwiaGkiLCJ4aGkiLCJoIiwic2lnbiIsIm9mZnNldCIsIm1vZHVsdXMiLCJkaXZpc29yIiwicXVvdGllbnQiLCJ5IiwicSIsImNhbWxfaW50NjRfb2ZfaW50MzIiLCJjYW1sX2ludDY0X3RvX2ludDMyIiwiY2FtbF9pbnQ2NF9pc19uZWdhdGl2ZSIsImNhbWxfaW50NjRfbmVnIiwiY2FtbF9zdWJhcnJheV90b19qc2J5dGVzIiwiYSIsImkiLCJsZW4iLCJmIiwiU3RyaW5nIiwibnVsbCIsImNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMiLCJjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nIiwiY2FtbF9yYWlzZV93aXRoX2FyZyIsImFyZyIsImpzb29faXNfYXNjaWkiLCJjYW1sX3V0ZjE2X29mX3V0ZjgiLCJiIiwidCIsImMiLCJjMSIsImMyIiwidiIsImoiLCJNbEJ5dGVzIiwiY29udGVudHMiLCJsZW5ndGgiLCJjb250ZW50IiwiY2FtbF9ieXRlc19vZl9qc2J5dGVzIiwiY2FtbF9zdHJpbmdfb2ZfanNieXRlcyIsImNhbWxfcmFpc2Vfd2l0aF9zdHJpbmciLCJtc2ciLCJjYW1sX2ludmFsaWRfYXJndW1lbnQiLCJjYW1sX3BhcnNlX2Zvcm1hdCIsImZtdCIsImNhbWxfZmluaXNoX2Zvcm1hdHRpbmciLCJyYXdidWZmZXIiLCJidWZmZXIiLCJjYW1sX2ludDY0X2Zvcm1hdCIsIndiYXNlIiwiY3Z0YmwiLCJwIiwiY2FtbF9leHBtMV9mbG9hdCIsImNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nIiwiZnNfbm9kZV9zdXBwb3J0ZWQiLCJtYWtlX3BhdGhfaXNfYWJzb2x1dGUiLCJwb3NpeCIsInBhdGgiLCJ3aW4zMiIsInNwbGl0RGV2aWNlUmUiLCJyZXN1bHQiLCJkZXZpY2UiLCJpc1VuYyIsIkJvb2xlYW4iLCJyb290Iiwic2VwIiwicGF0aF9pc19hYnNvbHV0ZSIsImNhbWxfdHJhaWxpbmdfc2xhc2giLCJuYW1lIiwiY2FtbF9jdXJyZW50X2RpciIsImNhbWxfbWFrZV9wYXRoIiwiY29tcDAiLCJjb21wIiwibmNvbXAiLCJjYW1sX3V0Zjhfb2ZfdXRmMTYiLCJkIiwiY2FtbF9ieXRlc19vZl91dGYxNl9qc3N0cmluZyIsImNhbWxfc3RyaW5nX29mX2pzc3RyaW5nIiwidW5peF9lcnJvciIsIm1ha2VfdW5peF9lcnJfYXJncyIsImNvZGUiLCJzeXNjYWxsIiwiZXJybm8iLCJ2YXJpYW50IiwiYXJncyIsImNhbWxfbmFtZWRfdmFsdWVzIiwiY2FtbF9uYW1lZF92YWx1ZSIsIm5tIiwiY2FtbF9yYWlzZV93aXRoX2FyZ3MiLCJjYW1sX2lzX21sX2J5dGVzIiwiY2FtbF9pc19tbF9zdHJpbmciLCJjYW1sX2J5dGVzX29mX2FycmF5IiwiY2FtbF9ieXRlc19vZl9zdHJpbmciLCJjYW1sX3JhaXNlX3N5c19lcnJvciIsImNhbWxfcmFpc2Vfbm9fc3VjaF9maWxlIiwiY2FtbF9ieXRlc19ib3VuZF9lcnJvciIsImNhbWxfYnl0ZXNfdW5zYWZlX2dldCIsImNhbWxfYnl0ZXNfZ2V0IiwiY2FtbF9jcmVhdGVfYnl0ZXMiLCJjYW1sX21sX2J5dGVzX2xlbmd0aCIsImNhbWxfY29udmVydF9ieXRlc190b19hcnJheSIsIkFycmF5IiwiY2FtbF9ibGl0X2J5dGVzIiwiczEiLCJpMSIsInMyIiwiaTIiLCJjYW1sX2JsaXRfc3RyaW5nIiwiZSIsIk1sRmlsZSIsIk1sRmFrZUZpbGUiLCJvbGQiLCJidWYiLCJwb3MiLCJjbGVuIiwibmV3X3N0ciIsIm9sZF9kYXRhIiwiTWxGYWtlRGV2aWNlIiwicmVzIiwiU3ltYm9sIiwibmFtZV9zbGFzaCIsIm1vZGUiLCJyYWlzZV91bml4IiwicGFyZW50IiwiUmVnRXhwIiwic2VlbiIsIm0iLCJvayIsImZpbGUiLCJieXRlcyIsImNhbWxfbWxfc3RyaW5nX2xlbmd0aCIsImNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQiLCJjYW1sX2FycmF5X29mX3N0cmluZyIsImNhbWxfYXJyYXlfb2ZfYnl0ZXMiLCJjYW1sX2J5dGVzX3Vuc2FmZV9zZXQiLCJjYW1sX2J5dGVzX3NldCIsIk1sTm9kZUZpbGUiLCJmZCIsInJlcXVpcmUiLCJlcnIiLCJidWZfb2Zmc2V0IiwiTWxOb2RlRGV2aWNlIiwiY29uc3RzIiwia2V5IiwibyIsImpzX3N0YXRzIiwidG9fZGlyIiwidGFyZ2V0IiwibGluayIsImZpbGVfa2luZCIsImNhbWxfZ2V0X3Jvb3QiLCJjYW1sX2ZhaWx3aXRoIiwiY2FtbF9yb290IiwianNvb19tb3VudF9wb2ludCIsInJlc29sdmVfZnNfZGV2aWNlIiwiY2FtbF9zeXNfaXNfZGlyZWN0b3J5IiwiY2FtbF9yYWlzZV9ub3RfZm91bmQiLCJjYW1sX3N5c19nZXRlbnYiLCJnIiwidW5kZWZpbmVkIiwic2hpZnRfcmlnaHRfbmF0IiwibmF0MSIsIm9mczEiLCJsZW4xIiwibmF0MiIsIm9mczIiLCJuYml0cyIsIndyYXAiLCJjYW1sX2dyX3N0YXRlIiwiY2FtbF9ncl9zdGF0ZV9nZXQiLCJjYW1sX2dyX3BvaW50X2NvbG9yIiwiaW0iLCJNbE9iamVjdFRhYmxlIiwiTmFpdmVMb29rdXAiLCJvYmpzIiwiY2FtbF9zeXNfcmVuYW1lIiwib19yb290Iiwibl9yb290IiwiY2FtbF9sb2cxMF9mbG9hdCIsInVuaXhfdW5saW5rIiwiY2FtbF9ydW50aW1lX3dhcm5pbmdzIiwiY2FtbF9tbF9lbmFibGVfcnVudGltZV93YXJuaW5ncyIsImJvb2wiLCJjYW1sX2NsYXNzaWZ5X2Zsb2F0IiwiaXNGaW5pdGUiLCJpc05hTiIsInVuaXhfcm1kaXIiLCJjYW1sX21sX3JlZmlsbF9pbnB1dCIsImNoYW4iLCJzdHIiLCJzdHJfbGVuIiwiY2FtbF9tbF9jaGFubmVscyIsImNhbWxfbWxfbWF5X3JlZmlsbF9pbnB1dCIsImNoYW5pZCIsImNhbWxfYXJyYXlfYm91bmRfZXJyb3IiLCJjYW1sX21sX2lucHV0X3NjYW5fbGluZSIsImNhbWxfZ2NfbWlub3IiLCJjYW1sX2ludDY0X29mX2J5dGVzIiwiY2FtbF9iYV91aW50OF9nZXQ2NCIsImJhIiwiaTAiLCJvZnMiLCJiMSIsImIyIiwiYjMiLCJiNCIsImI1IiwiYjYiLCJiNyIsImI4IiwiY2FtbF9pbnQ2NF90b19ieXRlcyIsImNhbWxfaW50NjRfbWFyc2hhbCIsIndyaXRlciIsInNpemVzIiwiY2FtbF9iYV9udW1fZGltcyIsImNhbWxfcmV0dXJuX2V4bl9jb25zdGFudCIsImNhbWxfd3JhcF9leGNlcHRpb24iLCJjYW1sX2NyZWF0ZV9maWxlIiwianNvb19jcmVhdGVfZmlsZSIsImNhbWxfZnNfaW5pdCIsInRtcCIsImNhbWxfc2V0X3BhcnNlcl90cmFjZSIsImNhbWxfbGlzdF9vZl9qc19hcnJheSIsInVuaXhfZ2V0dGltZW9mZGF5IiwiRGF0ZSIsImNhbWxfbXVsIiwiY2FtbF9oYXNoX21peF9pbnQiLCJudW1fZGlnaXRzX25hdCIsIm5hdCIsImNhbWxfaGFzaF9uYXQiLCJjYW1sX2NhbGxfZ2VuIiwiYXJnc0xlbiIsImV4dHJhX2FyZ3MiLCJhcmd1bWVudHMiLCJuYXJncyIsImNhbWxfanNfd3JhcF9jYWxsYmFja19hcmd1bWVudHMiLCJjYW1sX3N5c19jaGRpciIsImRpciIsImNhbWxfZ2NfY291bnRlcnMiLCJjYW1sX2dyX3N5bmNocm9uaXplIiwidW5peF9oYXNfc3ltbGluayIsInVuaXQiLCJsb2cyX29rIiwianNvb19mbG9vcl9sb2cyIiwiSW5maW5pdHkiLCJjYW1sX2ludDMyX2JpdHNfb2ZfZmxvYXQiLCJmbG9hdDMyYSIsImludDMyYSIsImNhbWxfaW50NjRfY3JlYXRlX2xvX21pX2hpIiwiY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0IiwiZXhwIiwiayIsInIzIiwicjIiLCJyMSIsImNhbWxfYmFfc2VyaWFsaXplIiwic3oiLCJjb21wbGV4IiwiY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudCIsImtpbmQiLCJjYW1sX2JhX2NyZWF0ZV9idWZmZXIiLCJzaXplIiwidmlldyIsImRhdGEiLCJjYW1sX2ludDMyX2Zsb2F0X29mX2JpdHMiLCJjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMiLCJOYU4iLCJjYW1sX2JhX2dldF9zaXplIiwiZGltcyIsIm5fZGltcyIsImNhbWxfaW50NjRfY3JlYXRlX2xvX2hpIiwiY2FtbF9pbnQ2NF9oaTMyIiwiY2FtbF9pbnQ2NF9sbzMyIiwiY2FtbF9iYV9jdXN0b21fbmFtZSIsIk1sX0JpZ2FycmF5IiwibGF5b3V0IiwicmUiLCJ0b3RhbCIsImsxIiwiazIiLCJNbF9CaWdhcnJheV9jXzFfMSIsImNhbWxfYmFfY3JlYXRlX3Vuc2FmZSIsInNpemVfcGVyX2VsZW1lbnQiLCJjYW1sX2JhX2Rlc2VyaWFsaXplIiwicmVhZGVyIiwibnVtX2RpbXMiLCJzaXplX2RpbSIsInNpemVfZGltX2hpIiwic2l6ZV9kaW1fbG8iLCJzaXh0eSIsImludDY0IiwiY2FtbF9iYV9jb21wYXJlIiwiY2FtbF9oYXNoX21peF9pbnQ2NCIsImNhbWxfaGFzaF9taXhfZmxvYXQiLCJ2MCIsImNhbWxfYmFfaGFzaCIsIm51bV9lbHRzIiwidyIsImNhbWxfaW50MzJfdW5tYXJzaGFsIiwiY2FtbF9uYXRpdmVpbnRfdW5tYXJzaGFsIiwiY2FtbF9pbnQ2NF91bm1hcnNoYWwiLCJjYW1sX2ludDY0X2NvbXBhcmUiLCJjYW1sX2ludDY0X2hhc2giLCJjYW1sX2N1c3RvbV9vcHMiLCJjYW1sX2NvbXBhcmVfdmFsX2dldF9jdXN0b20iLCJjYW1sX2NvbXBhcmVfdmFsX251bWJlcl9jdXN0b20iLCJudW0iLCJjdXN0b20iLCJzd2FwIiwiY2FtbF9jb21wYXJlX3ZhbF90YWciLCJOdW1iZXIiLCJjYW1sX2ludF9jb21wYXJlIiwiY2FtbF9ieXRlc19jb21wYXJlIiwiY2FtbF9zdHJpbmdfY29tcGFyZSIsImNhbWxfY29tcGFyZV92YWwiLCJzdGFjayIsInRhZ19hIiwidGFnX2IiLCJjYW1sX2dyZWF0ZXJ0aGFuIiwiZGl2X2hlbHBlciIsInoiLCJkaXZfZGlnaXRfbmF0IiwibmF0cSIsIm9mc3EiLCJuYXRyIiwib2ZzciIsInJlbSIsIm51bV9sZWFkaW5nX3plcm9fYml0c19pbl9kaWdpdCIsInNoaWZ0X2xlZnRfbmF0IiwiTWxOYXQiLCJjcmVhdGVfbmF0IiwiYXJyIiwic2V0X3RvX3plcm9fbmF0IiwiaW5jcl9uYXQiLCJjYXJyeV9pbiIsImNhcnJ5IiwiYWRkX25hdCIsImxlbjIiLCJuYXRfb2ZfYXJyYXkiLCJtdWx0X2RpZ2l0X25hdCIsIm5hdDMiLCJvZnMzIiwieDEiLCJ4MiIsIngzIiwiZGVjcl9uYXQiLCJib3Jyb3ciLCJzdWJfbmF0IiwiY29tcGFyZV9uYXQiLCJkaXZfbmF0IiwicXVvIiwiY2FtbF9iYV9ibGl0Iiwic3JjIiwiZHN0IiwiaXNfZGlnaXRfaW50IiwiY2FtbF9pbnQ2NF9kaXYiLCJjYW1sX2pzX2h0bWxfZW50aXRpZXMiLCJlbnRpdHkiLCJ0ZW1wIiwiZG9jdW1lbnQiLCJjYW1sX3N0cmluZ191bnNhZmVfc2V0IiwiY2FtbF9pbnQ2NF9vZl9mbG9hdCIsImNhbWxfbWxfY2hhbm5lbF9zaXplXzY0IiwiY2FtbF9iYV9zZXRfMiIsImNhbWxfYXJndiIsIm1haW4iLCJhcmd2IiwiYXJnczIiLCJjYW1sX2V4ZWN1dGFibGVfbmFtZSIsImNhbWxfanNfZXZhbF9zdHJpbmciLCJldmFsIiwic2VyaWFsaXplX25hdCIsImNhbWxfbWVtcHJvZl9zZXQiLCJfY29udHJvbCIsImNhbWxfc3lzX2V4aXQiLCJjYW1sX2NoYW5uZWxfZGVzY3JpcHRvciIsImNhbWxfanNfZnJvbV9hcnJheSIsImNhbWxfYmFfcmVzaGFwZSIsInZpbmQiLCJuZXdfZGltIiwiY2FtbF9vb19sYXN0X2lkIiwiY2FtbF9zZXRfb29faWQiLCJjYW1sX2dyX2ZpbGxfcmVjdCIsImNhbWxfYmlnc3RyaW5nX2JsaXRfc3RyaW5nX3RvX2JhIiwic3RyMSIsInBvczEiLCJiYTIiLCJwb3MyIiwic2xpY2UiLCJjYW1sX2dyX3NldF93aW5kb3dfdGl0bGUiLCJqc25hbWUiLCJjYW1sX2dldF9nbG9iYWxfZGF0YSIsImNhbWxfaW50NjRfc2hpZnRfcmlnaHRfdW5zaWduZWQiLCJjYW1sX2JhX3VpbnQ4X2dldDE2IiwiY2FtbF9jb21wYXJlIiwiY2FtbF9mcmVzaF9vb19pZCIsImNhbWxfaW50NjRfdG9fZmxvYXQiLCJjYW1sX2JhX2dldF8xIiwiY2FtbF9iaWdzdHJpbmdfbWVtY21wIiwiY2FtbF9uZXdfc3RyaW5nIiwiY2FtbF9lcmZfZmxvYXQiLCJhMSIsImEyIiwiYTMiLCJhNCIsImE1IiwiY2FtbF9iYV91aW50OF9nZXQzMiIsImNhbWxfcmF3X2JhY2t0cmFjZV9sZW5ndGgiLCJjYW1sX29ial9ibG9jayIsImNhbWxfZ3JfY2xlYXJfZ3JhcGgiLCJiaWdzdHJpbmdfdG9fYXJyYXlfYnVmZmVyIiwiYnMiLCJjYW1sX3N5c19jb25zdF9uYWtlZF9wb2ludGVyc19jaGVja2VkIiwiX3VuaXQiLCJseG9yX2RpZ2l0X25hdCIsImNhbWxfb2JqX2FkZF9vZmZzZXQiLCJjYW1sX2ZpbmFsX3JlbGVhc2UiLCJjYW1sX2pzX3RvX2FycmF5IiwiY2FtbF9ncl9wbG90IiwiY29sb3IiLCJjYW1sX2J5dGVzX3NldDE2IiwiaTE2IiwiY2FtbF9zdHJpbmdfc2V0MTYiLCJjYW1sX2J5dGVzX3NldDY0IiwiaTY0IiwiY2FtbF9pbnQ2NF9ic3dhcCIsImNhbWxfZmlsbF9ieXRlcyIsImNhbWxfZmlsbF9zdHJpbmciLCJjYW1sX2djX21ham9yIiwiY2FtbF9sZXhfYXJyYXkiLCJjYW1sX2xleF9lbmdpbmUiLCJ0YmwiLCJzdGFydF9zdGF0ZSIsImxleGJ1ZiIsImxleF9idWZmZXIiLCJsZXhfYnVmZmVyX2xlbiIsImxleF9zdGFydF9wb3MiLCJsZXhfY3Vycl9wb3MiLCJsZXhfbGFzdF9wb3MiLCJsZXhfbGFzdF9hY3Rpb24iLCJsZXhfZW9mX3JlYWNoZWQiLCJsZXhfYmFzZSIsImxleF9iYWNrdHJrIiwibGV4X2RlZmF1bHQiLCJsZXhfdHJhbnMiLCJsZXhfY2hlY2siLCJzdGF0ZSIsImJhc2UiLCJiYWNrdHJrIiwidW5peF9nZXR1aWQiLCJjYW1sX3N5c19maWxlX2V4aXN0cyIsImNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlX3Nsb3QiLCJjYW1sX2FycmF5X3N1YiIsImNhbWxfYnl0ZXNfZXF1YWwiLCJjYW1sX2dyX3NpemVfeCIsImNhbWxfbWxfZGVidWdfaW5mb19zdGF0dXMiLCJvc190eXBlIiwiY2FtbF9zeXNfY29uc3Rfb3N0eXBlX2N5Z3dpbiIsImNhbWxfY29zaF9mbG9hdCIsImNhbWxfZXBoZV9rZXlfb2Zmc2V0IiwiY2FtbF93ZWFrX2NoZWNrIiwiY2FtbF9lcGhlX2NoZWNrX2tleSIsImNhbWxfaGFzaF9taXhfZmluYWwiLCJjYW1sX2dyX3RleHRfc2l6ZSIsInR4dCIsImNhbWxfbGV4X3J1bl9tZW0iLCJtZW0iLCJjdXJyX3BvcyIsImNhbWxfbGV4X3J1bl90YWciLCJjYW1sX25ld19sZXhfZW5naW5lIiwibGV4X21lbSIsImxleF9iYXNlX2NvZGUiLCJsZXhfYmFja3Rya19jb2RlIiwibGV4X2RlZmF1bHRfY29kZSIsImxleF90cmFuc19jb2RlIiwibGV4X2NoZWNrX2NvZGUiLCJsZXhfY29kZSIsInBjX29mZiIsInBzdGF0ZSIsImJhc2VfY29kZSIsImNhbWxfYmFfdWludDhfc2V0NjQiLCJjYW1sX3N5c19leGVjdXRhYmxlX25hbWUiLCJjYW1sX2xlc3NlcXVhbCIsImNhbWxfYWNvc2hfZmxvYXQiLCJjYW1sX21sX2ZsdXNoIiwib3V0cHV0IiwiY2FtbF9tbF9zZWVrX291dF82NCIsImNvbXBhcmVfbmF0X3JlYWwiLCJjYW1sX2djX3NldCIsImNhbWxfanNfZ2V0IiwiY2FtbF9tbF9zZXRfYnVmZmVyZWQiLCJjYW1sX2djX2NvbXBhY3Rpb24iLCJjYW1sX3dlYWtfZ2V0IiwiY2FtbF9lcGhlX2dldF9rZXkiLCJjYW1sX2JpZ3N0cmluZ19ibGl0X2J5dGVzX3RvX2JhIiwid2luX2NsZWFudXAiLCJjYW1sX3N5c19jbG9zZSIsImNhbWxfbWxfY2xvc2VfY2hhbm5lbCIsImNhbWxfZXhuX3dpdGhfanNfYmFja3RyYWNlIiwiZXhuIiwiZm9yY2UiLCJjYW1sX3N5c19pc2F0dHkiLCJfY2hhbiIsImlzX2RpZ2l0X3plcm8iLCJ1bml4X2luZXRfYWRkcl9vZl9zdHJpbmciLCJjYW1sX2pzX3NldCIsImNhbWxfYXJyYXlfZ2V0IiwiYXJyYXkiLCJpbmRleCIsImNhbWxfbG9nMl9mbG9hdCIsImNhbWxfZ2NfaHVnZV9mYWxsYmFja19jb3VudCIsImNhbWxfc3BhY2V0aW1lX29ubHlfd29ya3NfZm9yX25hdGl2ZV9jb2RlIiwiY2FtbF9pbnQ2NF9zdWIiLCJjYW1sX21sX3NlZWtfaW5fNjQiLCJjYW1sX2ludDY0X3NoaWZ0X2xlZnQiLCJjYW1sX25vdGVxdWFsIiwiY2FtbF9zeXNfY29uc3RfaW50X3NpemUiLCJjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFjayIsImNhbWxfaXNfanMiLCJjYW1sX2JhX2RpbSIsImNhbWxfYmFfZGltXzEiLCJ1bml4X2xvY2FsdGltZSIsImRfbnVtIiwiamFudWFyeWZpcnN0IiwiZG95IiwiamFuIiwianVsIiwic3RkVGltZXpvbmVPZmZzZXQiLCJjYW1sX2pzX21ldGhfY2FsbCIsImNhbWxfd2Vha19jcmVhdGUiLCJjYW1sX2VwaGVfY3JlYXRlIiwiY2FtbF9qc190b19ieXRlX3N0cmluZyIsInVuaXhfbWt0aW1lIiwidG0iLCJ0bTIiLCJjYW1sX3RyYW1wb2xpbmUiLCJjYW1sX2J5dGVzX2dldDY0IiwiY2FtbF93ZWFrX3NldCIsImNhbWxfc3lzX3JlbW92ZSIsImNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yIiwiY2FtbF9zdHJpbmdfZ2V0MzIiLCJjYW1sX2h5cG90X2Zsb2F0IiwiY2FtbF9qc19jYWxsIiwiY2FtbF9zeXNfY29uc3RfbWF4X3dvc2l6ZSIsImNhbWxfZXBoZV91bnNldF9rZXkiLCJjYW1sX2hhc2hfbWl4X2J5dGVzX2FyciIsImNhbWxfaGFzaF9taXhfanNieXRlcyIsImNhbWxfbWxfYnl0ZXNfY29udGVudCIsImNhbWxfaGFzaF9taXhfYnl0ZXMiLCJjYW1sX2J5dGVzX2xlc3N0aGFuIiwiY2FtbF9lcmZjX2Zsb2F0IiwiY2FtbF9ncl9maWxsX3BvbHkiLCJhciIsImNhbWxfZ2NfcXVpY2tfc3RhdCIsImNhbWxfcmFpc2VfZW5kX29mX2ZpbGUiLCJjYW1sX21sX2lucHV0X2ludCIsImNhbWxfZ3JfZGlzcGxheV9tb2RlIiwiY2FtbF9vYmpfcmVhY2hhYmxlX3dvcmRzIiwibnRoX2RpZ2l0X25hdCIsImNhbWxfYXJyYXlfYmxpdCIsImNhbWxfZmxvYXRfb2Zfc3RyaW5nIiwibTMiLCJtYW50aXNzYSIsInBhcnNlSW50IiwiZXhwb25lbnQiLCJjYW1sX3N5c19nZXRjd2QiLCJjYW1sX3N5c19jb25zdF9iaWdfZW5kaWFuIiwiY2FtbF9saXN0X3RvX2pzX2FycmF5IiwiY2FtbF9sZWdhY3lfY3VzdG9tX2NvZGUiLCJjYW1sX291dHB1dF92YWwiLCJXcml0ZXIiLCJ2YWx1ZSIsImZsYWdzIiwibm9fc2hhcmluZyIsImNsb3N1cmVzIiwiaW50ZXJuX29ial90YWJsZSIsIm1lbW8iLCJleGlzdGluZ19vZmZzZXQiLCJleHRlcm5fcmVjIiwib3BzIiwic3pfMzJfNjQiLCJoZWFkZXJfcG9zIiwib2xkX3BvcyIsInR5cGVfb2ZfdiIsImNhbWxfc3RyaW5nX29mX2FycmF5IiwiY2FtbF9vdXRwdXRfdmFsdWVfdG9fc3RyaW5nIiwiY2FtbF9yYWlzZV9ub3RfYV9kaXIiLCJjYW1sX3N5c19zeXN0ZW1fY29tbWFuZCIsImNtZCIsInVuaXhfaXNhdHR5IiwiZmlsZURlc2NyaXB0b3IiLCJ0dHkiLCJjYW1sX2pzX2Vycm9yX29mX2V4Y2VwdGlvbiIsImRlc2VyaWFsaXplX25hdCIsImluaXRpYWxpemVfbmF0IiwiY2FtbF9ncl9vcGVuX3N1YndpbmRvdyIsInVuaXhfbHN0YXQiLCJ1bml4X2xzdGF0XzY0IiwianNfcHJpbnRfc3Rkb3V0IiwiY2FtbF9jb3B5c2lnbl9mbG9hdCIsImNhbWxfZ3Jfc2V0X3RleHRfc2l6ZSIsImNhbWxfbWQ1X2J5dGVzIiwiYWRkIiwieHgiLCJmZiIsImdnIiwiaGgiLCJpaSIsIm1kNSIsImNhbWxfYmFfc2V0X2dlbmVyaWMiLCJjYW1sX2VwaGVfc2V0X2tleSIsImNhbWxfYnl0ZXNfbGVzc2VxdWFsIiwiY2FtbF9zdHJpbmdfbGVzc2VxdWFsIiwiY2FtbF9zdHJpbmdfZ3JlYXRlcmVxdWFsIiwiY2FtbF9pbnQ2NF9hZGQiLCJjYW1sX25leHRhZnRlcl9mbG9hdCIsImJpdHMiLCJvbmUiLCJjYW1sX2dyX3NpemVfeSIsImNhbWxfbWxfcG9zX2luIiwiY2FtbF9pbnQ2NF9hbmQiLCJjYW1sX3N5c19jb25zdF93b3JkX3NpemUiLCJjYW1sX3N0ZF9vdXRwdXQiLCJzbGVuIiwianNfcHJpbnRfc3RkZXJyIiwiY2FtbF9zeXNfb3Blbl9pbnRlcm5hbCIsImlkeCIsImluZm8iLCJjYW1sX3N5c19vcGVuIiwiX3Blcm1zIiwiTWxTdHJpbmdSZWFkZXIiLCJjYW1sX2Zsb2F0X29mX2J5dGVzIiwiY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3JlYWRlciIsIl9tYWdpYyIsIl9ibG9ja19sZW4iLCJudW1fb2JqZWN0cyIsIl9zaXplXzMyIiwiX3NpemVfNjQiLCJvYmpfY291bnRlciIsImludGVybl9yZWMiLCJoZWFkZXIiLCJleHBlY3RlZF9zaXplIiwiY2FtbF9zdHJpbmdfb2ZfYnl0ZXMiLCJjYW1sX2lucHV0X3ZhbHVlX2Zyb21fYnl0ZXMiLCJjYW1sX3N0cmluZ19nZXQiLCJyZV9tYXRjaCIsInJlX3dvcmRfbGV0dGVycyIsIm9wY29kZXMiLCJpc193b3JkX2xldHRlciIsImluX2JpdHNldCIsInJlX21hdGNoX2ltcGwiLCJwYXJ0aWFsIiwicHJvZyIsImNwb29sIiwibm9ybXRhYmxlIiwibnVtZ3JvdXBzIiwibnVtcmVnaXN0ZXJzIiwic3RhcnRjaGFycyIsInBjIiwicXVpdCIsImdyb3VwcyIsInJlX3JlZ2lzdGVyIiwiYmFja3RyYWNrIiwiaXRlbSIsInB1c2giLCJhY2NlcHQiLCJwcmVmaXhfbWF0Y2giLCJvcCIsInNhcmciLCJ1YXJnIiwiZ3JvdXAiLCJFcnJvciIsInJlX3NlYXJjaF9iYWNrd2FyZCIsImNhbWxfanNfZnJvbV9zdHJpbmciLCJjYW1sX2JhX3N1YiIsImNoYW5nZWRfZGltIiwibXVsIiwibmV3X2RpbXMiLCJuZXdfZGF0YSIsImNhbWxfZ2NfZnVsbF9tYWpvciIsImNhbWxfYnl0ZXNfc2V0MzIiLCJpMzIiLCJjYW1sX2dyX3NpZ2lvX3NpZ25hbCIsImNhbWxfYmFfdWludDhfc2V0MzIiLCJjYW1sX3N5c19jb25zdF9vc3R5cGVfdW5peCIsImNhbWxfc2lnbmJpdF9mbG9hdCIsImNhbWxfZ3Jfc2V0X2xpbmVfd2lkdGgiLCJjYW1sX2dyX3NldF9mb250IiwiY2FtbF9ncl9zZXRfY29sb3IiLCJjb252ZXJ0IiwibnVtYmVyIiwiY19zdHIiLCJjYW1sX2dyX21vdmV0byIsImNhbWxfZ3JfcmVzaXplX3dpbmRvdyIsImNhbWxfZ3Jfc3RhdGVfaW5pdCIsImNhbWxfZ3JfY3VycmVudF94IiwiY2FtbF9iYV9raW5kX29mX3R5cGVkX2FycmF5IiwidGEiLCJjYW1sX2JhX2Zyb21fdHlwZWRfYXJyYXkiLCJjYW1sX21sX3NlZWtfb3V0IiwiY2FtbF9qc190eXBlb2YiLCJjYW1sX3Jlc3RvcmVfcmF3X2JhY2t0cmFjZSIsImJ0IiwiY2FtbF9ncl9saW5ldG8iLCJjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja191bnNhZmUiLCJjYW1sX2JhX2RpbV8zIiwiY2FtbF9pc19zcGVjaWFsX2V4Y2VwdGlvbiIsImNhbWxfZm9ybWF0X2V4Y2VwdGlvbiIsImJ1Y2tldCIsInN0YXJ0IiwiY2FtbF9mYXRhbF91bmNhdWdodF9leGNlcHRpb24iLCJoYW5kbGVyIiwiYXRfZXhpdCIsImNhbWxfZXBoZV9kYXRhX29mZnNldCIsImNhbWxfZXBoZV9jaGVja19kYXRhIiwiY2FtbF9ieXRlc19nZXQxNiIsImNhbWxfb2JqX21ha2VfZm9yd2FyZCIsImNhbWxfanNfZnJvbV9ib29sIiwiY2FtbF9tbF9zZXRfY2hhbm5lbF9uYW1lIiwiY2FtbF9leHAyX2Zsb2F0IiwiY2FtbF9ncl9jbG9zZV9ncmFwaCIsImNhbWxfY3JlYXRlX3N0cmluZyIsImNhbWxfbWQ1X3N0cmluZyIsImNhbWxfbWQ1X2NoYW4iLCJjaGFuX2xlbiIsImNhbWxfb2JqX2R1cCIsImNhbWxfd2Vha19nZXRfY29weSIsImNhbWxfYXRhbmhfZmxvYXQiLCJjYW1sX21sX291dHB1dF9ieXRlcyIsInN0cmluZyIsImpzc3RyaW5nIiwiaWQiLCJjYW1sX21sX291dHB1dCIsImNhbWxfZXBoZV9nZXRfZGF0YSIsImNhbWxfeG1saHR0cHJlcXVlc3RfY3JlYXRlIiwiY2FtbF90cmFtcG9saW5lX3JldHVybiIsImNhbWxfbWxfaXNfYnVmZmVyZWQiLCJjYW1sX2FycmF5X2FwcGVuZCIsImwxIiwibDIiLCJjYW1sX21sX3NldF9jaGFubmVsX3JlZmlsbCIsImNhbWxfanNfZXhwciIsImNhbWxfaW50NjRfbXVsIiwiY2FtbF9tbF9ydW50aW1lX3dhcm5pbmdzX2VuYWJsZWQiLCJjYW1sX291dHB1dF92YWx1ZV90b19ieXRlcyIsImNhbWxfZXZlbnRsb2dfcmVzdW1lIiwiY2FtbF9oYXNoX3VuaXZfcGFyYW0iLCJjb3VudCIsImxpbWl0Iiwib2JqIiwiaGFzaF9hY2N1IiwiaGFzaF9hdXgiLCJqc2J5dGVzIiwiY2FtbF9zdHJpbmdfZXF1YWwiLCJjYW1sX291dHB1dF92YWx1ZV90b19idWZmZXIiLCJyZV9yZXBsYWNlbWVudF90ZXh0IiwicmVwbCIsIm9yaWciLCJjdXIiLCJlbmQiLCJjYW1sX3B1cmVfanNfZXhwciIsImJsaXRfbmF0IiwiY2FtbF9pbnQ2NF91bHQiLCJjYW1sX2ludDY0X3hvciIsImNhbWxfYmlnc3RyaW5nX2JsaXRfYmFfdG9fYnl0ZXMiLCJiYTEiLCJieXRlczIiLCJjYW1sX3JlZ2lzdGVyX25hbWVkX3ZhbHVlIiwianNvb19jcmVhdGVfZmlsZV9leHRlcm4iLCJjYW1sX3RvX2pzX3N0cmluZyIsImNhbWxfcGFyc2Vfc2lnbl9hbmRfYmFzZSIsImNhbWxfcGFyc2VfZGlnaXQiLCJjYW1sX2ludDY0X29mX3N0cmluZyIsImJhc2U2NCIsInRocmVzaG9sZCIsInJlX3NlYXJjaF9mb3J3YXJkIiwiY2FtbF9ibGl0X3N0cmluZ190b19iaWdzdHJpbmciLCJjYW1sX21ha2VfdmVjdCIsImluaXQiLCJjYW1sX21sX3NlZWtfaW4iLCJjYW1sX3N5c19yZWFkX2RpcmVjdG9yeSIsImNhbWxfbWxfb3V0cHV0X2NoYXIiLCJjYW1sX3N5c19jb25zdF9vc3R5cGVfd2luMzIiLCJjYW1sX29ial9pc19ibG9jayIsImNhbWxfbWxfaW5wdXRfY2hhciIsImNhbWxfb2JqX3NldF9yYXdfZmllbGQiLCJjYW1sX2pzX3ZhciIsImNhbWxfdHJ1bmNfZmxvYXQiLCJjYW1sX2VwaGVfYmxpdF9kYXRhIiwiY2FtbF9pc19wcmludGFibGUiLCJjYW1sX2VxdWFsIiwicmVfcGFydGlhbF9tYXRjaCIsImNhbWxfc3lzX3JhbmRvbV9zZWVkIiwiYnVmZiIsIm5vdyIsImNhbWxfZmluYWxfcmVnaXN0ZXJfY2FsbGVkX3dpdGhvdXRfdmFsdWUiLCJjYW1sX2JhX2dldF8yIiwid2luX2hhbmRsZV9mZCIsImNhbWxfYmFfdWludDhfc2V0MTYiLCJ3aW5fZmlsZWRlc2NyX29mX2NoYW5uZWwiLCJjYW1sX2pzX2RlbGV0ZSIsImNhbWxfaW50X29mX3N0cmluZyIsImNhbWxfbGlzdF9tb3VudF9wb2ludCIsInByZXYiLCJjYW1sX21hcnNoYWxfY29uc3RhbnRzIiwiY2FtbF9vYmpfcmF3X2ZpZWxkIiwiY2FtbF9qc19lcXVhbHMiLCJiaWdzdHJpbmdfdG9fdHlwZWRfYXJyYXkiLCJjYW1sX2dyX2FyY19hdXgiLCJjdHgiLCJjeCIsImN5IiwicnkiLCJyeCIsInJvdCIsInhQb3MiLCJ5UG9zIiwieFBvc19wcmV2IiwieVBvc19wcmV2Iiwic3BhY2UiLCJkZWx0YSIsImNhbWxfZ3JfZmlsbF9hcmMiLCJjYW1sX2JhX3NsaWNlIiwibnVtX2luZHMiLCJzdWJfZGltcyIsImNhbWxfbWFyc2hhbF9kYXRhX3NpemUiLCJnZXQzMiIsImNhbWxfaW5wdXRfdmFsdWUiLCJjYW1sX2JhX2tpbmQiLCJjYW1sX2pzX2Z1bl9jYWxsIiwiY2FtbF9nY19tYWpvcl9zbGljZSIsIndvcmsiLCJjYW1sX2pzX3B1cmVfZXhwciIsImNvbXBhcmVfZGlnaXRzX25hdCIsImNhbWxfbWxfaW5wdXQiLCJjYW1sX2dyX3dhaXRfZXZlbnQiLCJfZXZsIiwiY2FtbF9ncl9zaWdpb19oYW5kbGVyIiwiY2FtbF9oYXNoX21peF9iaWdzdHJpbmciLCJjYW1sX3JlY29yZF9iYWNrdHJhY2UiLCJ1bml4X2dtdGltZSIsImNhbWxfc3lzX2NvbnN0X2JhY2tlbmRfdHlwZSIsImNhbWxfc3lzX2dldF9jb25maWciLCJ1bml4X3RpbWUiLCJjYW1sX21sX291dF9jaGFubmVsc19saXN0IiwiY2FtbF9hc2luaF9mbG9hdCIsImJpZ3N0cmluZ19vZl9hcnJheV9idWZmZXIiLCJhYiIsImNhbWxfbW9kIiwiY2FtbF9iYV9pbml0IiwicmVfc3RyaW5nX21hdGNoIiwiQmlnU3RyaW5nUmVhZGVyIiwiY2FtbF9ncl9kdW1wX2ltYWdlIiwiY2FtbF9iYV9nZXRfZ2VuZXJpYyIsImNhbWxfZ2V0X2V4Y2VwdGlvbl9iYWNrdHJhY2UiLCJjYW1sX2Zvcm1hdF9mbG9hdCIsInRvRml4ZWQiLCJkcCIsInByZWMiLCJjYW1sX21vdW50X2F1dG9sb2FkIiwiY2FtbF9iaWdzdHJpbmdfYmxpdF9iYV90b19iYSIsImNhbWxfYmxpdF9iaWdzdHJpbmdfdG9fYmlnc3RyaW5nIiwiY2FtbF9zdHJpbmdfbGVzc3RoYW4iLCJjYW1sX3N0cmluZ19ncmVhdGVydGhhbiIsImNhbWxfZGl2IiwiY2FtbF9lcGhlX2dldF9kYXRhX2NvcHkiLCJjYW1sX21lbXByb2Zfc3RhcnQiLCJyYXRlIiwic3RhY2tfc2l6ZSIsInRyYWNrZXIiLCJjYW1sX3N5c19nZXRfYXJndiIsImNhbWxfanNfdG9fYm9vbCIsImNhbWxfZ3JfY3JlYXRlX2ltYWdlIiwiY2FtbF9lcGhlX2dldF9rZXlfY29weSIsImNhbWxfbGVzc3RoYW4iLCJjYW1sX3Jhd19iYWNrdHJhY2VfbmV4dF9zbG90IiwiY2FtbF9yZWdpc3Rlcl9nbG9iYWwiLCJuYW1lX29wdCIsIm11bHRfbmF0IiwibGVuMyIsInNxdWFyZV9uYXQiLCJjYW1sX2pzX2Zyb21fZmxvYXQiLCJjYW1sX2Zsb2F0YXJyYXlfY3JlYXRlIiwiY2FtbF9nY19zdGF0IiwiY2FtbF9nZXRfbWFqb3JfY3JlZGl0IiwiY2FtbF9zeXNfbW9kaWZ5X2FyZ3YiLCJjYW1sX21ldGhvZF9jYWNoZSIsImNhbWxfZ2V0X3B1YmxpY19tZXRob2QiLCJjYWNoZWlkIiwibWV0aHMiLCJsaSIsImNhbWxfanNfZ2V0X2NvbnNvbGUiLCJjYW1sX3N5c191bnNhZmVfZ2V0ZW52IiwiY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3JfaW4iLCJyZWZpbGwiLCJmcyIsImNoYW5uZWwiLCJiaWdzdHJpbmdfb2ZfdHlwZWRfYXJyYXkiLCJjYW1sX3JvdW5kX2Zsb2F0IiwidW5peF9zdGF0IiwidW5peF9zdGF0XzY0IiwiY2FtbF9vanNfbmV3X2FyciIsIkYiLCJjb21wbGVtZW50X25hdCIsImNhbWxfanNfcmVnZXhwcyIsImNhbWxfanNfaHRtbF9lc2NhcGUiLCJjYW1sX2JhX2RpbV8yIiwiY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfYXJndW1lbnRzIiwiY2FtbF9zaW5oX2Zsb2F0IiwiY2FtbF9sZGV4cF9mbG9hdCIsImNhbWxfZ3Jfc3RhdGVfc2V0IiwiY2FtbF9qc193cmFwX2NhbGxiYWNrX3N0cmljdCIsImFyaXR5IiwiY2FtbF9nY19taW5vcl93b3JkcyIsImNhbWxfYmFfc2V0XzEiLCJjYW1sX2dldF9jdXJyZW50X2NhbGxzdGFjayIsImxhbmRfZGlnaXRfbmF0IiwiY2FtbF9pbnQ2NF9tb2QiLCJ1bml4X3JlYWRsaW5rIiwiY2FtbF9vYmpfc2V0X3RhZyIsImNhbWxfaW50MzJfYnN3YXAiLCJ3aW5fc3RhcnR1cCIsImNhbWxfYmFfc2V0XzMiLCJjYW1sX2pzX2luc3RhbmNlb2YiLCJjYW1sX2dldF9tYWpvcl9idWNrZXQiLCJjYW1sX2JsaXRfYmlnc3RyaW5nX3RvX3N0cmluZyIsInNldF9kaWdpdF9uYXRfbmF0aXZlIiwiZGlnaXQiLCJudGhfZGlnaXRfbmF0X25hdGl2ZSIsImNhbWxfc3RyaW5nX3NldDY0IiwiY2FtbF9ncl9zdGF0ZV9jcmVhdGUiLCJjYW52YXMiLCJjb250ZXh0IiwiY2FtbF9qc193cmFwX2NhbGxiYWNrIiwiY2FtbF9ncl9kcmF3X2FyYyIsImNhbWxfYmFfbWFwX2ZpbGUiLCJ2ZmQiLCJzaGFyZWQiLCJjYW1sX2JhX21hcF9maWxlX2J5dGVjb2RlIiwiYXJnbiIsInVuaXhfc3ltbGluayIsInNyY19yb290IiwiZHN0X3Jvb3QiLCJjYW1sX2JhX2NyZWF0ZV9mcm9tIiwiZGF0YTEiLCJkYXRhMiIsImpzdHlwIiwiY2FtbF90YW5oX2Zsb2F0IiwiY2FtbF9ncl9kcmF3X3N0ciIsImR4IiwiY2FtbF9ncl9kcmF3X3N0cmluZyIsImNhbWxfZ3JfZHJhd19jaGFyIiwiY2FtbF91bm1vdW50IiwiY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3N0cmluZyIsImNhbWxfbWxfcG9zX2luXzY0IiwiY2FtbF9ncl9kcmF3X2ltYWdlIiwiaW1hZ2UiLCJjYW1sX3JlZ2lzdGVyX2NoYW5uZWxfZm9yX3NwYWNldGltZSIsIl9jaGFubmVsIiwiY2FtbF9zdHJpbmdfc2V0IiwiY2FtbF9zeXNfcm1kaXIiLCJjYW1sX21sX3Bvc19vdXQiLCJjYW1sX3NwYWNldGltZV9lbmFibGVkIiwiY2FtbF9ieXRlc19ub3RlcXVhbCIsImNhbWxfcnVudGltZV9wYXJhbWV0ZXJzIiwiY2FtbF9qc19vYmplY3QiLCJjYW1sX2JhX2NyZWF0ZSIsImRpbXNfbWwiLCJjYW1sX3dlYWtfYmxpdCIsImNhbWxfZ3JfcmVtZW1iZXJfbW9kZSIsImNhbWxfZm1hX2Zsb2F0IiwiU1BMSVQiLCJNSU5fVkFMVUUiLCJFUFNJTE9OIiwiQyIsIkEiLCJCIiwibXVsdGlwbHkiLCJhdCIsImFoaSIsImFsbyIsImJoaSIsImJsbyIsImFkanVzdCIsInNjYWxlIiwieHMiLCJ5cyIsInpzIiwieHkiLCJ1IiwiY2FtbF9ic3dhcDE2IiwiY2FtbF9tbF9zZXRfYmluYXJ5X21vZGUiLCJjYW1sX2ZpbmFsX3JlZ2lzdGVyIiwiY2FtbF9ncl9kcmF3X3JlY3QiLCJjYW1sX3N0cmluZ19nZXQxNiIsImNhbWxfZXBoZV91bnNldF9kYXRhIiwiY2FtbF9vdXRwdXRfdmFsdWUiLCJjYW1sX2JhX2dldF8zIiwiY2FtbF9lcGhlX2JsaXRfa2V5IiwiY2FtbF9pbml0aWFsX3RpbWUiLCJjYW1sX3N5c190aW1lIiwiY2FtbF9zeXNfdGltZV9pbmNsdWRlX2NoaWxkcmVuIiwiY2FtbF9jaGVja19ib3VuZCIsInVuaXhfZ2V0cHd1aWQiLCJjYW1sX2hhc2hfbWl4X3N0cmluZyIsImNhbWxfaGFzaCIsInNlZWQiLCJxdWV1ZSIsInJkIiwid3IiLCJjYW1sX29ial90YWciLCJGdW5jdGlvbiIsImNhbWxfYmFfdG9fdHlwZWRfYXJyYXkiLCJjYW1sX2J5dGVzX2dldDMyIiwiY2FtbF9mcmV4cF9mbG9hdCIsIm5lZyIsImNhbWxfc3RyaW5nX2dldDY0IiwiY2FtbF9qc19lcnJvcl9vcHRpb25fb2ZfZXhjZXB0aW9uIiwiY2FtbF9tbF9wb3Nfb3V0XzY0IiwiY2FtbF9ncl9jbG9zZV9zdWJ3aW5kb3ciLCJjYW1sX2Zsb2F0YXJyYXlfYmxpdCIsImNhbWxfZ2V0X21pbm9yX2ZyZWUiLCJjYW1sX3NldF9zdGF0aWNfZW52IiwiY2FtbF9iYV9jaGFuZ2VfbGF5b3V0IiwiY2FtbF9qc19uZXciLCJ1bml4X21rZGlyIiwicGVybSIsImNhbWxfZ3JfY3VycmVudF95IiwiY2FtbF9mb3JtYXRfaW50IiwiY2FtbF9vYmpfdHJ1bmNhdGUiLCJjYW1sX2pzX3RvX3N0cmluZyIsImlzX2RpZ2l0X29kZCIsImNhbWxfcnVudGltZV92YXJpYW50IiwiY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3Jfb3V0IiwiY2FtbF9hcnJheV9jb25jYXQiLCJjYW1sX2dyX29wZW5fZ3JhcGgiLCJzcGVjcyIsInN0YXR1cyIsIndpbiIsImRvYyIsInRpdGxlIiwiYm9keSIsImNhbWxfZXBoZV9zZXRfZGF0YSIsImNhbWxfbWFrZV9mbG9hdF92ZWN0IiwiY2FtbF9jYnJ0X2Zsb2F0IiwiY2FtbF9tZW1wcm9mX3N0b3AiLCJjYW1sX2V2ZW50bG9nX3BhdXNlIiwiY2FtbF9ncmVhdGVyZXF1YWwiLCJjYW1sX2dldF9leGNlcHRpb25fcmF3X2JhY2t0cmFjZSIsImNhbWxfbG9nMXBfZmxvYXQiLCJjYW1sX2ludDY0X29yIiwiY2FtbF9sYXp5X21ha2VfZm9yd2FyZCIsImxvcl9kaWdpdF9uYXQiLCJjYW1sX2dyX2JsaXRfaW1hZ2UiLCJpbTIiLCJjYW1sX2dyX3dpbmRvd19pZCIsImNhbWxfanNfb25faWUiLCJ1YSIsImNhbWxfaW50NjRfc2hpZnRfcmlnaHQiLCJjYW1sX2JhX2xheW91dCIsImNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlIiwiY2FtbF9hcnJheV9zZXQiLCJuZXd2YWwiLCJjYW1sX2J5dGVzX2dyZWF0ZXJlcXVhbCIsInNldF9kaWdpdF9uYXQiLCJjYW1sX2dyX2RvY19vZl9zdGF0ZSIsImNhbWxfbWxfb3V0cHV0X2ludCIsImNhbWxfb2JqX3dpdGhfdGFnIiwiY2FtbF9tbF9jaGFubmVsX3NpemUiLCJjYW1sX3Jhd19iYWNrdHJhY2Vfc2xvdCIsImNhbWxfaGV4c3RyaW5nX29mX2Zsb2F0Iiwic3R5bGUiLCJleHBfc2lnbiIsInNpZ25fc3RyIiwiY3N0IiwieF9zdHIiLCJjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja19zdHJpY3QiLCJjYW1sX2JhY2t0cmFjZV9zdGF0dXMiLCJjYW1sX3N5c19hcmd2IiwiY2FtbF9pbnN0YWxsX3NpZ25hbF9oYW5kbGVyIiwiY2FtbF9iYV9maWxsIiwiY2FtbF9tb2RmX2Zsb2F0IiwiY2FtbF9nY19nZXQiLCJjYW1sX2Zsb2F0X2NvbXBhcmUiLCJjYW1sX3N0cmluZ19zZXQzMiIsImNhbWxfcGFyc2VfZW5naW5lIiwidGFibGVzIiwiZW52IiwiRVJSQ09ERSIsImxvb3AiLCJ0ZXN0c2hpZnQiLCJzaGlmdCIsInNoaWZ0X3JlY292ZXIiLCJyZWR1Y2UiLCJSRUFEX1RPS0VOIiwiUkFJU0VfUEFSU0VfRVJST1IiLCJHUk9XX1NUQUNLU18xIiwiR1JPV19TVEFDS1NfMiIsIkNPTVBVVEVfU0VNQU5USUNfQUNUSU9OIiwiQ0FMTF9FUlJPUl9GVU5DVElPTiIsImVudl9zX3N0YWNrIiwiZW52X3Zfc3RhY2siLCJlbnZfc3ltYl9zdGFydF9zdGFjayIsImVudl9zeW1iX2VuZF9zdGFjayIsImVudl9zdGFja3NpemUiLCJlbnZfc3RhY2tiYXNlIiwiZW52X2N1cnJfY2hhciIsImVudl9sdmFsIiwiZW52X3N5bWJfc3RhcnQiLCJlbnZfc3ltYl9lbmQiLCJlbnZfYXNwIiwiZW52X3J1bGVfbGVuIiwiZW52X3J1bGVfbnVtYmVyIiwiZW52X3NwIiwiZW52X3N0YXRlIiwiZW52X2VycmZsYWciLCJ0YmxfdHJhbnNsX2NvbnN0IiwidGJsX3RyYW5zbF9ibG9jayIsInRibF9saHMiLCJ0YmxfbGVuIiwidGJsX2RlZnJlZCIsInRibF9kZ290byIsInRibF9zaW5kZXgiLCJ0YmxfcmluZGV4IiwidGJsX2dpbmRleCIsInRibF90YWJsZXNpemUiLCJ0YmxfdGFibGUiLCJ0YmxfY2hlY2siLCJuMSIsIm4yIiwic3RhdGUxIiwic3AiLCJlcnJmbGFnIiwiYXNwIiwiY2FtbF91cGRhdGVfZHVtbXkiLCJjYW1sX2FycmF5X2ZpbGwiLCJjYW1sX3N5c19ta2RpciIsImNhbWxfc3RyaW5nX25vdGVxdWFsIiwiY2FtbF9ieXRlc19ncmVhdGVydGhhbiIsImNhbWxfZ3JfbWFrZV9pbWFnZSIsImNhbWxfbWxfc2V0X2NoYW5uZWxfb3V0cHV0IiwiY2FtbF9yZWFkX2ZpbGVfY29udGVudCIsImNhbWxfanNfdG9fZmxvYXQiLCJjYW1sX3NldHVwX3VuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyIiwib3JpZ2luIiwiZXZlbnQiLCJlcnJfbm9fcHJlZCIsImVycl9ub19zdWNjIiwiemVybyQyIiwib25lJDIiLCJtaW51c19vbmUkMiIsIm1pbl9pbnQkMiIsIm1heF9pbnQkMiIsImR1bW15X3BvcyIsInplcm9fcG9zIiwic3ViX2Zvcm1hdCIsImZvcm1hdHRpbmdfbGl0IiwibG9jZm10IiwibnVsbCQwIiwiY3VycmVudF9kaXJfbmFtZSIsInBhcmVudF9kaXJfbmFtZSIsImRpcl9zZXAiLCJxdW90ZXF1b3RlIiwibnVsbCQxIiwiY3VycmVudF9kaXJfbmFtZSQwIiwicGFyZW50X2Rpcl9uYW1lJDAiLCJkaXJfc2VwJDAiLCJudWxsJDIiLCJjdXJyZW50X2Rpcl9uYW1lJDEiLCJwYXJlbnRfZGlyX25hbWUkMSIsImRpcl9zZXAkMSIsInplcm8kNCIsIm9uZSQ0IiwiaSIsImVyYXNlX3JlbCIsInJlc3QiLCJyZXN0JDAiLCJyZXN0JDEiLCJyZXN0JDIiLCJyZXN0JDMiLCJyZXN0JDQiLCJyZXN0JDUiLCJyZXN0JDYiLCJyZXN0JDciLCJ0eSIsInJlc3QkOCIsInR5MSIsInJlc3QkOSIsInJlc3QkMTAiLCJyZXN0JDExIiwicmVzdCQxMiIsInJlc3QkMTMiLCJjb25jYXRfZm10dHkiLCJmbXR0eTEiLCJmbXR0eTIiLCJ0eTIiLCJjb25jYXRfZm10IiwiZm10MSIsImZtdDIiLCJwYWQiLCJwYWQkMCIsInByZWMiLCJwYWQkMSIsImljb252IiwicHJlYyQwIiwicGFkJDIiLCJpY29udiQwIiwicHJlYyQxIiwicGFkJDMiLCJpY29udiQxIiwicHJlYyQyIiwicGFkJDQiLCJpY29udiQyIiwicHJlYyQzIiwicGFkJDUiLCJmY29udiIsInBhZCQ2Iiwic3RyIiwiY2hyIiwiZm10dHkiLCJwYWQkNyIsImZtdHR5JDAiLCJwYWQkOCIsInJlc3QkMTQiLCJyZXN0JDE1IiwicmVzdCQxNiIsImZtdGluZ19saXQiLCJyZXN0JDE3IiwiZm10aW5nX2dlbiIsInJlc3QkMTgiLCJyZXN0JDE5IiwiY2hhcl9zZXQiLCJ3aWR0aF9vcHQiLCJyZXN0JDIwIiwiY291bnRlciIsInJlc3QkMjEiLCJyZXN0JDIyIiwiaWduIiwicmVzdCQyMyIsImYiLCJhcml0eSIsInYiLCJyIiwiY3VyIiwic2VlbiIsIm4iLCJmYWlsd2l0aCIsInMiLCJpbnZhbGlkX2FyZyIsIm1pbiIsIngiLCJ5IiwibWF4IiwiYWJzIiwibG5vdCIsImluZmluaXR5IiwibmVnX2luZmluaXR5IiwibmFuIiwibWF4X2Zsb2F0IiwibWluX2Zsb2F0IiwiZXBzaWxvbiIsIm1heF9pbnQiLCJtaW5faW50IiwiczEiLCJzMiIsImwxIiwibDIiLCJjaGFyX29mX2ludCIsInN0cmluZ19vZl9ib29sIiwiYiIsImJvb2xfb2Zfc3RyaW5nIiwiYm9vbF9vZl9zdHJpbmdfb3B0Iiwic3RyaW5nX29mX2ludCIsImludF9vZl9zdHJpbmdfb3B0IiwidmFsaWRfZmxvYXRfbGV4ZW0iLCJsIiwiaSQwIiwidG9fc3RyaW5nIiwib2Zfc3RyaW5nX29wdCIsImFwcGVuZCIsInRsIiwiaGQiLCJzdGRpbiIsInN0ZG91dCIsInN0ZGVyciIsIm9wZW5fZ2VuIiwibW9kZSIsInBlcm0iLCJuYW1lIiwiYyIsIm9wZW5fdGV4dCIsIm9wZW5fYmluIiwiZmx1c2hfYWxsIiwiaXRlciIsImEiLCJvdXRwdXRfYnl0ZXMiLCJvYyIsIm91dHB1dF9zdHJpbmciLCJvdXRwdXQiLCJvZnMiLCJsZW4iLCJvdXRwdXRfc3Vic3RyaW5nIiwib3V0cHV0X3ZhbHVlIiwiY2hhbiIsImNsb3NlIiwiY2xvc2Vfbm9lcnIiLCJvcGVuX2dlbiQwIiwib3Blbl90ZXh0JDAiLCJvcGVuX2JpbiQwIiwiaW5wdXQiLCJpYyIsInVuc2FmZV9yZWFsbHlfaW5wdXQiLCJvZnMkMCIsImxlbiQwIiwibGVuJDEiLCJvZnMkMSIsInJlYWxseV9pbnB1dCIsInJlYWxseV9pbnB1dF9zdHJpbmciLCJpbnB1dF9saW5lIiwiYnVpbGRfcmVzdWx0IiwiYnVmIiwiYWNjdSIsImJlZyIsImFjY3UkMCIsInJlcyIsImNsb3NlX25vZXJyJDAiLCJwcmludF9jaGFyIiwicHJpbnRfc3RyaW5nIiwicHJpbnRfYnl0ZXMiLCJwcmludF9pbnQiLCJwcmludF9mbG9hdCIsInByaW50X2VuZGxpbmUiLCJwcmludF9uZXdsaW5lIiwicHJlcnJfY2hhciIsInByZXJyX3N0cmluZyIsInByZXJyX2J5dGVzIiwicHJlcnJfaW50IiwicHJlcnJfZmxvYXQiLCJwcmVycl9lbmRsaW5lIiwicHJlcnJfbmV3bGluZSIsInJlYWRfbGluZSIsInJlYWRfaW50IiwicmVhZF9pbnRfb3B0IiwicmVhZF9mbG9hdCIsInJlYWRfZmxvYXRfb3B0Iiwic3RyaW5nX29mX2Zvcm1hdCIsInN5bWJvbCIsInN0cjIiLCJzdHIxIiwiZXhpdF9mdW5jdGlvbiIsImF0X2V4aXQiLCJmX3lldF90b19ydW4iLCJvbGRfZXhpdCIsIm5ld19leGl0JDAiLCJuZXdfZXhpdCIsInN1Y2Nlc3MiLCJkb19hdF9leGl0IiwiZXhpdCIsInJldGNvZGUiLCJzZXRfYmluYXJ5X21vZGUiLCJjbG9zZSQwIiwiaW5fY2hhbm5lbF9sZW5ndGgiLCJwb3NfaW4iLCJzZWVrX2luIiwiaW5wdXRfdmFsdWUiLCJpbnB1dF9iaW5hcnlfaW50IiwiaW5wdXRfYnl0ZSIsImlucHV0X2NoYXIiLCJzZXRfYmluYXJ5X21vZGUkMCIsIm91dF9jaGFubmVsX2xlbmd0aCIsInBvc19vdXQiLCJzZWVrX291dCIsIm91dHB1dF9iaW5hcnlfaW50Iiwib3V0cHV0X2J5dGUiLCJvdXRwdXRfY2hhciIsImZsdXNoIiwibGVmdCIsInJpZ2h0IiwiaXNfbGVmdCIsImlzX3JpZ2h0IiwiZmluZF9sZWZ0IiwiZmluZF9yaWdodCIsIm1hcF9sZWZ0IiwiZSIsIm1hcF9yaWdodCIsIm1hcCIsInYkMCIsImZvbGQiLCJlcXVhbCIsImUxIiwiZTIiLCJ2MiIsInYyJDAiLCJjb21wYXJlIiwibWF0Y2gkMSIsImlzX2Jsb2NrIiwiZG91YmxlX2ZpZWxkIiwic2V0X2RvdWJsZV9maWVsZCIsImZpcnN0X25vbl9jb25zdGFudF9jb25zdHJ1Y3RvciIsImxhc3Rfbm9uX2NvbnN0YW50X2NvbnN0cnVjdG9yXyIsImxhenlfdGFnIiwiY2xvc3VyZV90YWciLCJvYmplY3RfdGFnIiwiaW5maXhfdGFnIiwiZm9yd2FyZF90YWciLCJub19zY2FuX3RhZyIsImFic3RyYWN0X3RhZyIsInN0cmluZ190YWciLCJkb3VibGVfdGFnIiwiZG91YmxlX2FycmF5X3RhZyIsImN1c3RvbV90YWciLCJpbnRfdGFnIiwib3V0X29mX2hlYXBfdGFnIiwidW5hbGlnbmVkX3RhZyIsImluZm8iLCJvYmoiLCJzdGFydF9lbnYiLCJvZl92YWwiLCJzbG90IiwiaWQiLCJleHRlbnNpb25fY29uc3RydWN0b3IiLCJleHRlbnNpb25fbmFtZSIsImV4dGVuc2lvbl9pZCIsIm1heF9lcGhlX2xlbmd0aCIsImNyZWF0ZSIsImxlbmd0aCIsInJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0IiwibyIsIm1zZyIsImdldF9rZXkiLCJnZXRfa2V5X2NvcHkiLCJzZXRfa2V5IiwidW5zZXRfa2V5IiwiY2hlY2tfa2V5IiwiYmxpdF9rZXkiLCJvMSIsIm8yIiwicmFpc2VfdW5kZWZpbmVkIiwiZm9yY2VfbGF6eV9ibG9jayIsImJsayIsImNsb3N1cmUiLCJyZXN1bHQiLCJmb3JjZV92YWxfbGF6eV9ibG9jayIsImZvcmNlIiwibHp2IiwidCIsImZvcmNlX3ZhbCIsInRvX2xhenkiLCJmcm9tX3ZhbCIsImlzX3ZhbCIsIm1hcCQwIiwibWFwX3ZhbCIsImVtcHR5IiwicmV0dXJuJDAiLCJjb25zIiwibmV4dCIsImFwcGVuZCQwIiwic2VxMSIsInNlcTIiLCJtYXAkMSIsInNlcSIsImZpbHRlcl9tYXAiLCJzZXEkMCIsImZpbHRlciIsImNvbmNhdCIsImZsYXRfbWFwIiwiZm9sZF9sZWZ0IiwiYWNjIiwiYWNjJDAiLCJhY2MkMSIsInVuZm9sZCIsInUiLCJ1JDAiLCJpc19lbXB0eSIsInhzIiwidW5jb25zIiwieHMkMCIsImxlbmd0aCQwIiwieHMkMSIsIml0ZXJpIiwiZm9sZF9sZWZ0aSIsImFjY3UkMSIsImZvcl9hbGwiLCJwIiwiZXhpc3RzIiwiZmluZCIsImZpbmRfbWFwIiwiaXRlcjIiLCJ5cyIsInlzJDAiLCJ5cyQxIiwiZm9sZF9sZWZ0MiIsImZvcl9hbGwyIiwiZXhpc3RzMiIsImVxdWFsJDAiLCJlcSIsImNvbXBhcmUkMCIsImNtcCIsImluaXRfYXV4IiwiaiIsImluaXQiLCJyZXBlYXQiLCJmb3JldmVyIiwiY3ljbGVfbm9uZW1wdHkiLCJjeWNsZSIsIml0ZXJhdGUxIiwiaXRlcmF0ZSIsIm1hcGlfYXV4IiwibWFwaSIsInRhaWxfc2NhbiIsInMkMCIsInNjYW4iLCJ0YWtlX2F1eCIsInRha2UiLCJkcm9wIiwibiQwIiwibiQxIiwidGFrZV93aGlsZSIsImRyb3Bfd2hpbGUiLCJub2RlIiwiZ3JvdXAiLCJmYWlsdXJlIiwibWVtb2l6ZSIsIm9uY2UiLCJhY3Rpb24iLCJ6aXAiLCJtYXAyIiwiaW50ZXJsZWF2ZSIsInNvcnRlZF9tZXJnZTEiLCJzb3J0ZWRfbWVyZ2UiLCJtYXBfZnN0IiwieHlzIiwieHlzJDAiLCJtYXBfc25kIiwidW56aXAiLCJmaWx0ZXJfbWFwX2ZpbmRfbGVmdF9tYXAiLCJmaWx0ZXJfbWFwX2ZpbmRfcmlnaHRfbWFwIiwieiIsInBhcnRpdGlvbl9tYXAiLCJwYXJ0aXRpb24iLCJwZWVsIiwieHNzIiwidHJhbnNwb3NlIiwidGFpbHMiLCJoZWFkcyIsInJlbWFpbmRlcnMiLCJ4c3MkMCIsInRhaWxzJDAiLCJoZWFkcyQwIiwibWFwX3Byb2R1Y3QiLCJwcm9kdWN0Iiwib2ZfZGlzcGVuc2VyIiwiaXQiLCJ0b19kaXNwZW5zZXIiLCJpbnRzIiwibm9uZSIsInNvbWUiLCJ2YWx1ZSIsImRlZmF1bHQkMCIsImdldCQwIiwiYmluZCIsImpvaW4iLCJtYXAkMiIsImZvbGQkMCIsIml0ZXIkMCIsImlzX25vbmUiLCJpc19zb21lIiwiZXF1YWwkMSIsIm8wIiwidjEiLCJ2MCIsImNvbXBhcmUkMSIsInRvX3Jlc3VsdCIsInRvX2xpc3QiLCJ0b19zZXEiLCJvayIsImVycm9yIiwidmFsdWUkMCIsImdldF9vayIsImdldF9lcnJvciIsImJpbmQkMCIsImpvaW4kMCIsIm1hcCQzIiwibWFwX2Vycm9yIiwiZm9sZCQxIiwiaXRlciQxIiwiaXRlcl9lcnJvciIsImlzX29rIiwiaXNfZXJyb3IiLCJlcXVhbCQyIiwicjAiLCJyMSIsImNvbXBhcmUkMiIsInRvX29wdGlvbiIsInRvX2xpc3QkMCIsInRvX3NlcSQwIiwiZXF1YWwkMyIsImNvbXBhcmUkMyIsInRvX2Zsb2F0IiwidG9fc3RyaW5nJDAiLCJlc2NhcGVkIiwibG93ZXJjYXNlIiwidXBwZXJjYXNlIiwibG93ZXJjYXNlX2FzY2lpIiwidXBwZXJjYXNlX2FzY2lpIiwiY29tcGFyZSQ0IiwiYzEiLCJjMiIsImVxdWFsJDQiLCJtaW4kMCIsIm1heCQwIiwibG9fYm91bmQiLCJoaV9ib3VuZCIsImJvbSIsInJlcCIsInN1Y2MiLCJwcmVkIiwiaXNfdmFsaWQiLCJvZl9pbnQiLCJpc19jaGFyIiwib2ZfY2hhciIsInRvX2NoYXIiLCJ1bnNhZmVfdG9fY2hhciIsImVxdWFsJDUiLCJjb21wYXJlJDUiLCJoYXNoIiwidXRmX2RlY29kZV9pc192YWxpZCIsImQiLCJ1dGZfZGVjb2RlX2xlbmd0aCIsInV0Zl9kZWNvZGVfdWNoYXIiLCJ1dGZfZGVjb2RlIiwiZGVjX2ludmFsaWQiLCJ1dGZfOF9ieXRlX2xlbmd0aCIsInV0Zl8xNl9ieXRlX2xlbmd0aCIsImxlbmd0aCQxIiwicGFyYW0kMCIsImNvbnMkMCIsIm50aCIsImwkMCIsImwkMSIsIm50aF9vcHQiLCJyZXZfYXBwZW5kIiwibDEkMCIsImwyJDAiLCJsMSQxIiwibDIkMSIsInJldiIsImluaXRfYXV4JDAiLCJwYXJhbSIsImEyIiwiYTEiLCJwYWlyIiwieCQwIiwicnkiLCJyeCIsInQyIiwiaDIiLCJ0MSIsImgxIiwicmV2X3NvcnQiLCJ4MiIsIngxIiwidGwkMSIsIngzIiwieDIkMCIsIngxJDAiLCJuMSIsIm4yIiwic29ydCIsInRsJDAiLCJjJDAiLCJjJDEiLCJjJDIiLCJjJDMiLCJjJDQiLCJjJDUiLCJjJDYiLCJhY2N1JDIiLCJhdXgiLCJ0YWlsIiwiZGlyZWN0IiwiZGVwdGgiLCJ6ZXJvIiwib25lIiwibWludXNfb25lIiwiYWJzJDAiLCJtYXhfaW50JDAiLCJtaW5faW50JDAiLCJsb2dub3QiLCJlcXVhbCQ3IiwiY29tcGFyZSQ3IiwibWluJDEiLCJtYXgkMSIsInRvX3N0cmluZyQxIiwic3ltYm9sJDAiLCJkc3RvZmYiLCJzcmNvZmYiLCJjcHlsZW4iLCJvZnMxIiwib2ZzMiIsInNlcCIsInNlcGxlbiIsImRzdCIsImlzX3NwYWNlIiwiYXBwbHkxIiwicHJlZml4IiwibGVuX3MiLCJsZW5fcHJlIiwic3VmZml4IiwibGVuX3N1ZiIsImRpZmYiLCJpbmRleF9yZWMiLCJsaW0iLCJpJDEiLCJpbmRleF9yZWNfb3B0IiwicmluZGV4X3JlYyIsInJpbmRleF9yZWNfb3B0IiwibmV3X2xlbiIsIm5ld19idWYiLCJnZXQkMSIsInNldCQwIiwiZGVjX3JldCIsIm5vdF9pbl94ODBfdG9feEJGIiwibm90X2luX3hBMF90b194QkYiLCJub3RfaW5feDgwX3RvX3g5RiIsIm5vdF9pbl94OTBfdG9feEJGIiwibm90X2luX3g4MF90b194OEYiLCJ1dGZfOF91Y2hhcl8zIiwiYjAiLCJiMSIsImIyIiwidXRmXzhfdWNoYXJfNCIsImIzIiwiaSQ0IiwiYjEkMSIsImkkNSIsImIyJDEiLCJpJDYiLCJpJDEwIiwiYjEkMyIsImkkMTEiLCJiMiQzIiwiaSQxMiIsImIzJDEiLCJpJDciLCJiMSQyIiwiaSQ4IiwiYjIkMiIsImkkOSIsImIzJDAiLCJpJDEzIiwiYjEkNCIsImkkMTQiLCJiMiQ0IiwiaSQyIiwiYjEkMCIsImkkMyIsImIyJDAiLCJpJDE1IiwiYjEkNSIsInNldCIsImxhc3QiLCJsYXN0JDAiLCJsYXN0JDEiLCJsYXN0JDMiLCJsYXN0JDIiLCJsYXN0JDQiLCJsYXN0JDUiLCJoaSIsImxvIiwiaXNfc3BhY2UkMCIsImluZGV4X3JlYyQwIiwiaW5kZXhfcmVjX29wdCQwIiwicmluZGV4X3JlYyQwIiwicmluZGV4X3JlY19vcHQkMCIsImciLCJlcXVhbCQxMCIsImNvbXBhcmUkMTAiLCJ0b19zdHJpbmckMiIsInRvX2J1ZmZlciIsImJ1ZmYiLCJmbGFncyIsImhlYWRlcl9zaXplIiwiZGF0YV9zaXplIiwidG90YWxfc2l6ZSIsImZyb21fYnl0ZXMiLCJmcm9tX3N0cmluZyIsInN4Iiwic3kiLCJsYSIsImxiIiwicmVzJDAiLCJsaXN0X2xlbmd0aCIsInBhcmFtJDEiLCJoZCQwIiwiaW5wdXRfYXJyYXkiLCJlbHQiLCJvdXRwdXRfYXJyYXkiLCJlbHQkMCIsImFjYyQyIiwiYTAiLCJiaSIsImFpIiwibmEiLCJuYiIsIm1heHNvbiIsImkzMSIsInRyaWNrbGVkb3duIiwidHJpY2tsZSIsImJ1YmJsZWRvd24iLCJidWJibGUiLCJlJDAiLCJmYXRoZXIiLCJtZXJnZSIsInNyYzFvZnMiLCJzcmMxbGVuIiwic3JjMiIsInNyYzJvZnMiLCJzcmMybGVuIiwiZHN0b2ZzIiwic3JjMXIiLCJzcmMyciIsInMyJDEiLCJzMSQxIiwiaTEiLCJpMiIsImkyJDAiLCJkJDAiLCJzMiQwIiwiaTEkMCIsImQkMSIsInMxJDAiLCJpc29ydHRvIiwic3Jjb2ZzIiwic29ydHRvIiwiemVybyQwIiwib25lJDAiLCJtaW51c19vbmUkMCIsImlzX2Zpbml0ZSIsImlzX2luZmluaXRlIiwiaXNfbmFuIiwicGkiLCJpc19pbnRlZ2VyIiwic3VjYyQwIiwicHJlZCQwIiwiZXF1YWwkMTEiLCJtaW4kMiIsIm1heCQyIiwibWluX21heCIsIm1pbl9udW0iLCJtYXhfbnVtIiwibWluX21heF9udW0iLCJoYXNoJDAiLCJ1bnNhZmVfZmlsbCIsImNoZWNrIiwibWFrZSQyIiwiaW5pdCQ0IiwiYXBwZW5kJDIiLCJjb25jYXQkMyIsImhsZW4iLCJzdWIkMiIsImNvcHkkMiIsImZpbGwkMSIsImJsaXQkMiIsInNyYyIsInNvZnMiLCJkb2ZzIiwidG9fbGlzdCQyIiwib2ZfbGlzdCQwIiwiaCIsIml0ZXIkNiIsIml0ZXIyJDIiLCJtYXAkOCIsIm1hcDIkMiIsIml0ZXJpJDQiLCJtYXBpJDQiLCJmb2xkX2xlZnQkNCIsImZvbGRfcmlnaHQkMyIsImV4aXN0cyQ0IiwiZm9yX2FsbCQ0IiwibWVtJDEiLCJtZW1faWVlZSIsInNvcnQkMCIsInN0YWJsZV9zb3J0IiwidG9fc2VxJDUiLCJ0b19zZXFpJDIiLCJvZl9zZXEkMyIsIm1hcF90b19hcnJheSIsIm1hcF9mcm9tX2FycmF5IiwiemVybyQxIiwib25lJDEiLCJtaW51c19vbmUkMSIsInN1Y2MkMSIsInByZWQkMSIsImFicyQxIiwibWluX2ludCQxIiwibWF4X2ludCQxIiwibG9nbm90JDAiLCJ1bnNpZ25lZF90b19pbnQiLCJ0b19zdHJpbmckMyIsIm9mX3N0cmluZ19vcHQkMCIsImNvbXBhcmUkMTEiLCJlcXVhbCQxMiIsInVuc2lnbmVkX2NvbXBhcmUiLCJtIiwibWluJDMiLCJtYXgkMyIsInVuc2lnbmVkX2RpdiIsInEiLCJ1bnNpZ25lZF9yZW0iLCJzdWNjJDIiLCJwcmVkJDIiLCJhYnMkMiIsImxvZ25vdCQxIiwibWF4X2ludCQzIiwidW5zaWduZWRfdG9faW50JDAiLCJ0b19zdHJpbmckNCIsIm9mX3N0cmluZ19vcHQkMSIsImNvbXBhcmUkMTIiLCJlcXVhbCQxMyIsInVuc2lnbmVkX2NvbXBhcmUkMCIsIm1pbiQ0IiwibWF4JDQiLCJ1bnNpZ25lZF9kaXYkMCIsInVuc2lnbmVkX3JlbSQwIiwiemVybyQzIiwib25lJDMiLCJtaW51c19vbmUkMyIsInN1Y2MkMyIsInByZWQkMyIsImFicyQzIiwibWluX2ludCQzIiwibWF4X2ludCQ0IiwibG9nbm90JDIiLCJ1bnNpZ25lZF90b19pbnQkMSIsInRvX3N0cmluZyQ1Iiwib2Zfc3RyaW5nX29wdCQyIiwiY29tcGFyZSQxMyIsImVxdWFsJDE0IiwidW5zaWduZWRfY29tcGFyZSQxIiwibWluJDUiLCJtYXgkNSIsInVuc2lnbmVkX2RpdiQxIiwidW5zaWduZWRfcmVtJDEiLCJlbmdpbmUiLCJ0YmwiLCJzdGF0ZSIsIm5ld19lbmdpbmUiLCJmcm9tX2Z1bmN0aW9uIiwib3B0Iiwic3RoIiwid2l0aF9wb3NpdGlvbnMiLCJhdXhfYnVmZmVyIiwibGV4YnVmIiwicmVhZCIsIm5ld2xlbiIsIm5ld2J1ZiIsImZyb21fY2hhbm5lbCIsImZyb21fc3RyaW5nJDAiLCJzZXRfcG9zaXRpb24iLCJwb3NpdGlvbiIsInNldF9maWxlbmFtZSIsImZuYW1lIiwibGV4ZW1lIiwic3ViX2xleGVtZSIsInN1Yl9sZXhlbWVfb3B0Iiwic3ViX2xleGVtZV9jaGFyIiwic3ViX2xleGVtZV9jaGFyX29wdCIsImxleGVtZV9jaGFyIiwibGV4ZW1lX3N0YXJ0IiwibGV4ZW1lX2VuZCIsImxleGVtZV9zdGFydF9wIiwibGV4ZW1lX2VuZF9wIiwibmV3X2xpbmUiLCJsY3AiLCJmbHVzaF9pbnB1dCIsImVudiIsImdyb3dfc3RhY2tzIiwib2xkc2l6ZSIsIm5ld3NpemUiLCJuZXdfcyIsIm5ld192IiwibmV3X3N0YXJ0IiwibmV3X2VuZCIsImNsZWFyX3BhcnNlciIsImN1cnJlbnRfbG9va2FoZWFkX2Z1biIsInl5cGFyc2UiLCJ0YWJsZXMiLCJzdGFydCIsImxleGVyIiwiaW5pdF9hc3AiLCJpbml0X3NwIiwiaW5pdF9zdGFja2Jhc2UiLCJpbml0X3N0YXRlIiwiaW5pdF9jdXJyX2NoYXIiLCJpbml0X2x2YWwiLCJpbml0X2VycmZsYWciLCJjbWQiLCJhcmciLCJhcmckMCIsImFyZyQxIiwiY21kJDAiLCJleG4iLCJjdXJyX2NoYXIiLCJ0b2siLCJwZWVrX3ZhbCIsInN5bWJvbF9zdGFydF9wb3MiLCJzdCIsImVuIiwic3ltYm9sX2VuZF9wb3MiLCJyaHNfc3RhcnRfcG9zIiwicmhzX2VuZF9wb3MiLCJzeW1ib2xfc3RhcnQiLCJzeW1ib2xfZW5kIiwicmhzX3N0YXJ0IiwicmhzX2VuZCIsImlzX2N1cnJlbnRfbG9va2FoZWFkIiwicGFyc2VfZXJyb3IiLCJoZWlnaHQiLCJobCIsImgkMCIsImhyIiwiYmFsIiwibHIiLCJsdiIsImxsIiwibHJyIiwibHJ2IiwibHJsIiwicnIiLCJydiIsInJsIiwicmxyIiwicmx2IiwicmxsIiwiYWRkIiwic2luZ2xldG9uIiwiYWRkX21pbl9lbGVtZW50IiwiYWRkX21heF9lbGVtZW50IiwicmgiLCJsaCIsIm1pbl9lbHQiLCJtaW5fZWx0X29wdCIsIm1heF9lbHQiLCJtYXhfZWx0X29wdCIsInJlbW92ZV9taW5fZWx0IiwiciQwIiwic3BsaXQiLCJwcmVzIiwicHJlcyQwIiwibWVtIiwicmVtb3ZlIiwidW5pb24iLCJyMiIsInIyJDAiLCJyMSQwIiwiaW50ZXIiLCJzcGxpdF9iaXMiLCJkaXNqb2ludCIsImNvbnNfZW51bSIsInMkMSIsImUkMSIsImUyJDIiLCJlMSQyIiwiZTIkMCIsImUxJDAiLCJlMiQxIiwiZTEkMSIsInN1YnNldCIsInB2IiwibGYiLCJsdCIsInJmIiwicnQiLCJjYXJkaW5hbCIsImVsZW1lbnRzX2F1eCIsImVsZW1lbnRzIiwiZmluZF9maXJzdCIsImZpbmRfZmlyc3Rfb3B0IiwiZmluZF9sYXN0IiwiZmluZF9sYXN0X29wdCIsImZpbmRfb3B0IiwidHJ5X2pvaW4iLCJ2JDEiLCJvZl9saXN0Iiwic3ViIiwibCQzIiwieDAiLCJsJDQiLCJ4MCQwIiwibCQ1IiwieDAkMSIsIm5sIiwibWlkIiwibCQyIiwieDQiLCJhZGRfc2VxIiwib2Zfc2VxIiwic2VxX29mX2VudW0iLCJzbm9jX2VudW0iLCJyZXZfc2VxX29mX2VudW0iLCJ0b19yZXZfc2VxIiwidG9fc2VxX2Zyb20iLCJsb3ciLCJsZCIsImxyZCIsInJkIiwicmxkIiwiZGF0YSIsIm1pbl9iaW5kaW5nIiwibWluX2JpbmRpbmdfb3B0IiwibWF4X2JpbmRpbmciLCJtYXhfYmluZGluZ19vcHQiLCJyZW1vdmVfbWluX2JpbmRpbmciLCJ1cGRhdGUiLCJkYXRhJDAiLCJtJDAiLCJhZGRfbWluX2JpbmRpbmciLCJrIiwiYWRkX21heF9iaW5kaW5nIiwiY29uY2F0X29yX2pvaW4iLCJkMSIsImQyIiwiZDIkMCIsImQxJDAiLCJkMiQxIiwiZDEkMSIsInB2ZCIsImZ2ZCIsIm0kMSIsIm0xIiwibTIiLCJiaW5kaW5nc19hdXgiLCJiaW5kaW5ncyIsImNyZWF0ZSQwIiwiY2xlYXIiLCJjb3B5JDMiLCJwdXNoIiwicG9wIiwicG9wX29wdCIsInRvcCIsInRvcF9vcHQiLCJpc19lbXB0eSQwIiwibGVuZ3RoJDIiLCJpdGVyJDciLCJmb2xkJDIiLCJ0b19zZXEkNiIsIm9mX3NlcSQ0IiwiY3JlYXRlJDEiLCJjbGVhciQwIiwiY2VsbCIsInBlZWsiLCJjb250ZW50IiwicGVla19vcHQiLCJ0YWtlJDAiLCJ0YWtlX29wdCIsImNvcHkkNCIsInFfcmVzIiwicHJldiIsImlzX2VtcHR5JDEiLCJsZW5ndGgkMyIsIml0ZXIkOCIsImZvbGQkMyIsInRyYW5zZmVyIiwicTEiLCJxMiIsInRvX3NlcSQ3IiwiYWRkX3NlcSQwIiwib2Zfc2VxJDUiLCJjb3VudCIsImZpbGxfYnVmZiIsImdldF9kYXRhIiwiZDExIiwiYSQwIiwiYSQxIiwicGVla19kYXRhIiwicGVlayQwIiwianVua19kYXRhIiwianVuayIsIm5nZXRfZGF0YSIsImFsIiwibnBlZWsiLCJlbXB0eSQyIiwiaXRlciQ5Iiwic3RybSIsImZyb20iLCJvZl9saXN0JDEiLCJvZl9zdHJpbmciLCJvZl9ieXRlcyQwIiwib2ZfY2hhbm5lbCIsImlhcHAiLCJpY29ucyIsImlzaW5nIiwibGFwcCIsImxjb25zIiwibHNpbmciLCJzZW1wdHkiLCJzbGF6eSIsImR1bXBfZGF0YSIsImR1bXAiLCJjcmVhdGUkMiIsImNvbnRlbnRzIiwidG9fYnl0ZXMkMCIsInN1YiQzIiwiYmxpdCQzIiwibnRoJDAiLCJsZW5ndGgkNCIsImNsZWFyJDEiLCJyZXNldCIsInJlc2l6ZSIsIm1vcmUiLCJvbGRfcG9zIiwib2xkX2xlbiIsIm5ld19idWZmZXIiLCJhZGRfY2hhciIsInBvcyIsInVjaGFyX3V0Zl84X2J5dGVfbGVuZ3RoX21heCIsInVjaGFyX3V0Zl8xNl9ieXRlX2xlbmd0aF9tYXgiLCJhZGRfdXRmXzhfdWNoYXIiLCJhZGRfdXRmXzE2YmVfdWNoYXIiLCJhZGRfdXRmXzE2bGVfdWNoYXIiLCJhZGRfc3Vic3RyaW5nIiwib2Zmc2V0IiwibmV3X3Bvc2l0aW9uIiwiYWRkX3N1YmJ5dGVzIiwiYWRkX3N0cmluZyIsImFkZF9ieXRlcyIsImFkZF9idWZmZXIiLCJicyIsImFkZF9jaGFubmVsIiwiYWxyZWFkeV9yZWFkIiwidG9fcmVhZCIsImFscmVhZHlfcmVhZCQwIiwidG9fcmVhZCQwIiwib3V0cHV0X2J1ZmZlciIsImFkZF9zdWJzdGl0dXRlIiwibGltJDEiLCJwcmV2aW91cyIsImN1cnJlbnQiLCJvcGVuaW5nIiwibGltJDAiLCJzdG9wIiwiayQyIiwiayQwIiwiayQxIiwibmV4dF9pIiwiaWRlbnQiLCJ0cnVuY2F0ZSIsInRvX3NlcSQ4IiwidG9fc2VxaSQzIiwiYWRkX3NlcSQxIiwib2Zfc2VxJDYiLCJhZGRfaW50OCIsImFkZF9pbnQxNl9uZSIsImFkZF9pbnQzMl9uZSIsImFkZF9pbnQ2NF9uZSIsImFkZF9pbnQxNl9sZSIsImFkZF9pbnQxNl9iZSIsImFkZF9pbnQzMl9sZSIsImFkZF9pbnQzMl9iZSIsImFkZF9pbnQ2NF9sZSIsImFkZF9pbnQ2NF9iZSIsImNyZWF0ZV9jaGFyX3NldCIsImFkZF9pbl9jaGFyX3NldCIsInN0cl9pbmQiLCJtYXNrIiwiZnJlZXplX2NoYXJfc2V0IiwicmV2X2NoYXJfc2V0IiwiY2hhcl9zZXQkMCIsImlzX2luX2NoYXJfc2V0IiwicGFkX29mX3BhZF9vcHQiLCJwYWRfb3B0Iiwid2lkdGgiLCJwYXJhbV9mb3JtYXRfb2ZfaWdub3JlZF9mb3JtYXQiLCJmbXQiLCJwYWRfb3B0JDAiLCJwYWRfb3B0JDEiLCJwYWRfb3B0JDIiLCJwYWRfb3B0JDMiLCJwYWRfb3B0JDQiLCJwcmVjX29wdCIsInBhZF9vcHQkNSIsIm5kZWMiLCJwYWRfb3B0JDYiLCJwYWRfb3B0JDciLCJwYWRfb3B0JDgiLCJkZWZhdWx0X2Zsb2F0X3ByZWNpc2lvbiIsImJ1ZmZlcl9jcmVhdGUiLCJpbml0X3NpemUiLCJidWZmZXJfY2hlY2tfc2l6ZSIsIm92ZXJoZWFkIiwibWluX2xlbiIsIm5ld19zdHIiLCJidWZmZXJfYWRkX2NoYXIiLCJidWZmZXJfYWRkX3N0cmluZyIsInN0cl9sZW4iLCJidWZmZXJfY29udGVudHMiLCJjaGFyX29mX2ljb252IiwiY2hhcl9vZl9mY29udiIsImNGIiwiYnByaW50X3BhZHR5IiwicGFkdHkiLCJicHJpbnRfaWdub3JlZF9mbGFnIiwiaWduX2ZsYWciLCJicHJpbnRfcGFkX29wdCIsImJwcmludF9wYWRkaW5nIiwicGFkdHkkMCIsImJwcmludF9wcmVjaXNpb24iLCJicHJpbnRfaWNvbnZfZmxhZyIsImJwcmludF9hbHRpbnRfZm10IiwiYnByaW50X2Zjb252X2ZsYWciLCJzdHJpbmdfb2ZfZm9ybWF0dGluZ19saXQiLCJzdHIkMCIsImJwcmludF9jaGFyX2xpdGVyYWwiLCJicHJpbnRfc3RyaW5nX2xpdGVyYWwiLCJicHJpbnRfZm10dHkiLCJzdWJfZm10dHkiLCJzdWJfZm10dHkkMCIsImludF9vZl9jdXN0b21fYXJpdHkiLCJzdHJpbmdfb2ZfZm10IiwiZm10aXRlciIsImZtdCQwIiwiaWduX2ZsYWckMCIsImNociQwIiwic3RyJDEiLCJpc19hbG9uZSQwIiwiaXNfYWxvbmUiLCJhZnRlciIsImJlZm9yZSIsImokMCIsImokMSIsImZtdCQxIiwic3ltbSIsInRyYW5zIiwicmVzdDIiLCJyZXN0MiQwIiwicmVzdDIkMSIsInJlc3QyJDIiLCJyZXN0MiQzIiwicmVzdDIkNCIsInJlc3QyJDUiLCJyZXN0MiQ2IiwicmVzdDIkNyIsInR5MiQwIiwicmVzdDIkOCIsInR5MjIiLCJ0eTIxIiwiZm10dHlfcmVsX2RldCIsImY0IiwiZjIiLCJyZXN0MiQ5IiwicmVzdDIkMTAiLCJyZXN0MiQxMSIsInJlc3QyJDEyIiwicmVzdDIkMTMiLCJkZSIsImVkIiwiYWYiLCJmYSIsImRlJDAiLCJlZCQwIiwiYWYkMCIsImZhJDAiLCJkZSQxIiwiZWQkMSIsImFmJDEiLCJmYSQxIiwiZGUkMiIsImVkJDIiLCJhZiQyIiwiZmEkMiIsImRlJDMiLCJlZCQzIiwiYWYkMyIsImZhJDMiLCJkZSQ0IiwiZWQkNCIsImFmJDQiLCJmYSQ0IiwiZGUkNSIsImVkJDUiLCJhZiQ1IiwiZmEkNSIsImRlJDYiLCJlZCQ2IiwiYWYkNiIsImZhJDYiLCJkZSQ3IiwiZWQkNyIsImFmJDciLCJmYSQ3IiwiZGUkOCIsImVkJDgiLCJhZiQ4IiwiZmEkOCIsImpkIiwiZGoiLCJnYSIsImFnIiwiZGUkOSIsImVkJDkiLCJhZiQ5IiwiZmEkOSIsImRlJDEwIiwiZWQkMTAiLCJhZiQxMCIsImZhJDEwIiwiZGUkMTEiLCJlZCQxMSIsImFmJDExIiwiZmEkMTEiLCJkZSQxMiIsImVkJDEyIiwiYWYkMTIiLCJmYSQxMiIsImRlJDEzIiwiZWQkMTMiLCJhZiQxMyIsImZhJDEzIiwiZm10dHlfb2ZfcHJlY2lzaW9uX2ZtdHR5IiwiZm10dHlfb2ZfcGFkZGluZ19mbXR0eSIsImZtdHR5X29mX2N1c3RvbSIsImFyaXR5JDAiLCJmbXR0eV9vZl9mbXQiLCJ0eV9yZXN0IiwicHJlY190eSIsInR5X3Jlc3QkMCIsInByZWNfdHkkMCIsInR5X3Jlc3QkMSIsInByZWNfdHkkMSIsInR5X3Jlc3QkMiIsInByZWNfdHkkMiIsInR5X3Jlc3QkMyIsInByZWNfdHkkMyIsImZtdHR5JDEiLCJmbXR0eSQyIiwiZm10dHkkMyIsInR5JDAiLCJmbXR0eSQ0IiwiZm10dHkkNSIsInR5cGVfcGFkZGluZyIsInciLCJ0eXBlX3BhZHByZWMiLCJ0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGkiLCJ0eXBlX2Zvcm1hdF9nZW4iLCJmbXR0eV9yZXN0Iiwic3ViX2ZtdHR5X3Jlc3QiLCJzdWJfZm10dHlfcmVzdCQwIiwiZm10dHlfcmVzdCQwIiwic3ViX2ZtdHR5X3Jlc3QkMSIsInN1Yl9mbXR0eV9yZXN0JDIiLCJmbXR0eV9yZXN0JDEiLCJzdWJfZm10dHlfcmVzdCQzIiwiZm10JDIiLCJzdWJfZm10dHlfcmVzdCQ0IiwiZm10dHlfcmVzdCQyIiwic3ViX2ZtdHR5X3Jlc3QkNSIsImZtdCQzIiwic3ViX2ZtdHR5X3Jlc3QkNiIsImZtdHR5X3Jlc3QkMyIsInN1Yl9mbXR0eV9yZXN0JDciLCJmbXQkNCIsInN1Yl9mbXR0eV9yZXN0JDgiLCJmbXR0eV9yZXN0JDQiLCJzdWJfZm10dHlfcmVzdCQ5IiwiZm10JDUiLCJzdWJfZm10dHlfcmVzdCQxMCIsImZtdHR5X3Jlc3QkNSIsInN1Yl9mbXR0eV9yZXN0JDExIiwiZm10JDYiLCJzdWJfZm10dHlfcmVzdCQxMiIsImZtdHR5X3Jlc3QkNiIsInN1Yl9mbXR0eV9yZXN0JDEzIiwiZm10JDciLCJzdWJfZm10dHlfcmVzdCQxNCIsImZtdHR5X3Jlc3QkNyIsInN1YjJfZm10dHkiLCJzdWJfZm10dHlfcmVzdCQxNSIsInN1YjJfZm10dHkkMCIsImZtdCQ4Iiwic3ViX2ZtdHR5X3Jlc3QkMTYiLCJmbXR0eV9yZXN0JDgiLCJzdWIyX2ZtdHR5JDEiLCJzdWIxX2ZtdHR5Iiwic3ViX2ZtdHR5X3Jlc3QkMTciLCJzdWIyX2ZtdHR5JDIiLCJzdWIxX2ZtdHR5JDAiLCJmbXQkOSIsInN1Yl9mbXR0eV9yZXN0JDE4IiwiZm10dHlfcmVzdCQ5Iiwic3ViX2ZtdHR5X3Jlc3QkMTkiLCJmbXQkMTAiLCJzdWJfZm10dHlfcmVzdCQyMCIsImZtdHR5X3Jlc3QkMTAiLCJzdWJfZm10dHlfcmVzdCQyMSIsImZtdCQxMSIsInN1Yl9mbXR0eV9yZXN0JDIyIiwiZm10dHlfcmVzdCQxMSIsInN1Yl9mbXR0eV9yZXN0JDIzIiwiZm10JDEyIiwic3ViX2ZtdHR5X3Jlc3QkMjQiLCJmbXR0eV9yZXN0JDEyIiwic3ViX2ZtdHR5X3Jlc3QkMjUiLCJmbXQkMTMiLCJzdWJfZm10dHlfcmVzdCQyNiIsImZtdF9yZXN0IiwiZm10X3Jlc3QkMCIsImZtdF9yZXN0JDEiLCJmbXRfcmVzdCQyIiwiZm10X3Jlc3QkMyIsImZtdF9yZXN0JDQiLCJmbXRfcmVzdCQ1IiwicHJlYyQ0IiwiZm10dHkkNiIsImZtdF9yZXN0JDYiLCJwcmVjJDUiLCJwcmVjJDYiLCJmbXR0eSQ3IiwiZm10X3Jlc3QkNyIsInByZWMkNyIsInByZWMkOCIsImZtdHR5JDgiLCJmbXRfcmVzdCQ4IiwiZm10dHkkOSIsImZtdF9yZXN0JDkiLCJmbXR0eSQxMCIsImZtdF9yZXN0JDEwIiwiZm10dHkkMTEiLCJmbXRfcmVzdCQxMSIsImZtdHR5JDEyIiwiZm10X3Jlc3QkMTIiLCJmbXR0eSQxMyIsInN1Yl9mbXR0eTEiLCJmbXRfcmVzdCQxMyIsInN1Yl9mbXR0eSQxIiwiZm10dHkkMTQiLCJmbXQkMTQiLCJmbXRfcmVzdCQxNCIsImZtdHR5JDE1IiwiZm10JDE1IiwiZm10X3Jlc3QkMTUiLCJmbXR0eSQxNiIsImZtdCQxNiIsImZtdF9yZXN0JDE2IiwiZm10dHkkMTciLCJmbXQkMTciLCJmbXRfcmVzdCQxNyIsImZvcm1hdHRpbmdfZ2VuIiwiZm10dHkzIiwiZm10MyIsImZtdDEkMCIsImZtdHR5MiQwIiwiZm10MiQwIiwiZm10dHkzJDAiLCJmbXQzJDAiLCJmbXR0eV9yZXN0JDEzIiwiZm10X3Jlc3QkMTgiLCJmbXR0eSQxOCIsImZtdCQxOCIsImZtdHR5X3Jlc3QkMTQiLCJmbXRfcmVzdCQxOSIsImZtdHR5JDE5IiwiZm10JDE5IiwiZm10dHlfcmVzdCQxNSIsImZtdF9yZXN0JDIwIiwiZm10dHkkMjAiLCJmbXQkMjAiLCJ0eXBlX2lnbm9yZWRfcGFyYW1fb25lIiwiZm10dHlfcmVzdCQxNiIsImZtdHR5JDIxIiwiZm10JDIxIiwic3ViX2ZtdHR5JDIiLCJzdWJfZm10dHkkMyIsImZtdHR5JDIyIiwiZm10JDIyIiwic3ViX2ZtdHR5JDQiLCJ0eXBlX2Zvcm1hdCIsInJlY2FzdCIsImZpeF9wYWRkaW5nIiwid2lkdGgkMCIsImZpeF9pbnRfcHJlY2lzaW9uIiwicmVzJDEiLCJzdHJpbmdfdG9fY2FtbF9zdHJpbmciLCJmb3JtYXRfb2ZfZmNvbnYiLCJzeW1iIiwidHJhbnNmb3JtX2ludF9hbHQiLCJkaWdpdHMiLCJwdXQiLCJjb252ZXJ0X2ludCIsImNvbnZlcnRfaW50MzIiLCJjb252ZXJ0X25hdGl2ZWludCIsImNvbnZlcnRfaW50NjQiLCJjb252ZXJ0X2Zsb2F0IiwiaGV4Iiwic2lnbiIsImNhbWxfc3BlY2lhbF92YWwiLCJzdHJpbmdfb2ZfZm10dHkiLCJtYWtlX3ByaW50ZiQwIiwibmV3X2FjYyIsIm1ha2VfcHJpbnRmIiwibWFrZV9wYWRkaW5nIiwibWFrZV9pbnRfcGFkZGluZ19wcmVjaXNpb24iLCJwJDAiLCJwJDEiLCJhY2MkMyIsImFjYyQ0IiwiayQzIiwia2FjYyIsImskNCIsIm1ha2VfaWdub3JlZF9wYXJhbSQwIiwibWFrZV9jdXN0b20kMCIsIm1ha2VfaW52YWxpZF9hcmciLCJtYWtlX2Zyb21fZm10dHkkMCIsIm1ha2VfZnJvbV9mbXR0eSIsIm1ha2VfY3VzdG9tIiwibWFrZV9pZ25vcmVkX3BhcmFtIiwibWFrZV9pcHJpbnRmJDAiLCJtYWtlX2lwcmludGYiLCJmbl9vZl9wYWRkaW5nX3ByZWNpc2lvbiIsImtvYyIsInJlc3QkMjQiLCJyZXN0JDI1IiwiZm5fb2ZfY3VzdG9tX2FyaXR5JDAiLCJmbl9vZl9jdXN0b21fYXJpdHkiLCJvdXRwdXRfYWNjIiwicCQyIiwicCQzIiwicCQ0IiwiYnVmcHV0X2FjYyIsInN0cnB1dF9hY2MiLCJmYWlsd2l0aF9tZXNzYWdlIiwib3Blbl9ib3hfb2Zfc3RyaW5nIiwiaW52YWxpZF9ib3giLCJwYXJzZV9zcGFjZXMiLCJwYXJzZV9sd29yZCIsInBhcnNlX2ludCIsIndzdGFydCIsIndlbmQiLCJib3hfbmFtZSIsIm5zdGFydCIsIm5lbmQiLCJpbmRlbnQiLCJleHBfZW5kIiwiYm94X3R5cGUiLCJtYWtlX3BhZGRpbmdfZm10X2ViYiIsIm1ha2VfcGFkcHJlY19mbXRfZWJiIiwiZm10X2ViYl9vZl9zdHJpbmciLCJsZWdhY3lfYmVoYXZpb3IiLCJmbGFnIiwibGVnYWN5X2JlaGF2aW9yJDAiLCJpbnZhbGlkX2Zvcm1hdF9tZXNzYWdlIiwidW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IiwiZW5kX2luZCIsImludmFsaWRfZm9ybWF0X3dpdGhvdXQiLCJleHBlY3RlZF9jaGFyYWN0ZXIiLCJleHBlY3RlZCIsImFkZF9saXRlcmFsIiwibGl0X3N0YXJ0Iiwic2l6ZSIsInBhcnNlX3Bvc2l0aXZlIiwic3RyX2luZCQwIiwic3RyX2luZCQxIiwicGFyc2VfaW50ZWdlciIsIm5leHRfaW5kIiwiaW5jb21wYXRpYmxlX2ZsYWciLCJwY3RfaW5kIiwib3B0aW9uIiwic3ViZm10IiwiY29tcHV0ZV9pbnRfY29udiIsInBsdXMiLCJzcGFjZSIsInBsdXMkMCIsInNwYWNlJDAiLCJzZWFyY2hfc3ViZm9ybWF0X2VuZCIsInN1Yl9lbmQiLCJzdHJfaW5kJDIiLCJzdWJfZW5kJDAiLCJzdHJfaW5kJDMiLCJzdWJfZW5kJDEiLCJzdHJfaW5kJDQiLCJzdHJfaW5kJDUiLCJzdWJfZW5kJDIiLCJzdHJfaW5kJDYiLCJzdHJfaW5kJDciLCJwYXJzZV9tYWdpY19zaXplIiwic3RyX2luZF8xIiwic3RyX2luZF8yIiwic3RyX2luZF8zIiwicGFyc2UiLCJwYXJzZV9nb29kX2JyZWFrIiwiZm9ybWF0dGluZ19saXQkMCIsInN0cl9pbmRfNCIsInN0cl9pbmRfNSIsInBhcnNlX3RhZyIsImlzX29wZW5fdGFnIiwiaW5kIiwic3ViX3N0ciIsInN1Yl9mbXQiLCJzdWJfZm9ybWF0JDAiLCJmb3JtYXR0aW5nJDAiLCJmb3JtYXR0aW5nIiwicGFyc2VfZmxhZ3MiLCJtaW51cyIsInNldF9mbGFnIiwibmV3X2luZCIsInBhcnNlX2FmdGVyX3BhZGRpbmciLCJwYXJzZV9saXRlcmFsIiwicGFyc2VfYWZ0ZXJfcHJlY2lzaW9uIiwic3ltYiQwIiwibWludXMkMCIsInBhcnNlX2NvbnZlcnNpb24iLCJwYXJzZV9jb252IiwicGFkcHJlYyIsInBsdXNfdXNlZCIsImhhc2hfdXNlZCIsInNwYWNlX3VzZWQiLCJpZ25fdXNlZCIsInBhZF91c2VkIiwicHJlY191c2VkIiwiZ2V0X3BsdXMiLCJnZXRfaGFzaCIsImdldF9zcGFjZSIsImdldF9pZ24iLCJnZXRfcGFkIiwiZ2V0X3ByZWMiLCJnZXRfcGFkcHJlYyIsImdldF9pbnRfcGFkIiwiY2hlY2tfbm9fMCIsIm9wdF9vZl9wYWQiLCJ3aWR0aCQxIiwiZ2V0X3BhZF9vcHQiLCJnZXRfcGFkcHJlY19vcHQiLCJmbXRfcmVzdWx0IiwiaWdub3JlZCQyIiwiY291bnRlciQwIiwiaWdub3JlZCQ2IiwiaWdub3JlZCQ3IiwiYWRkX3JhbmdlIiwiZmFpbF9zaW5nbGVfcGVyY2VudCIsInBhcnNlX2NoYXJfc2V0X2NvbnRlbnQiLCJwYXJzZV9jaGFyX3NldF9hZnRlcl9jaGFyJDAiLCJwYXJzZV9jaGFyX3NldF9hZnRlcl9jaGFyIiwicmV2ZXJzZSIsImNoYXJfc2V0JDEiLCJpZ25vcmVkJDkiLCJjaGFyX2Zvcm1hdCIsImZtdF9yZXN0JDIxIiwiZm10X3Jlc3QkMjIiLCJwYWQkOSIsImZtdF9yZXN0JDIzIiwiaWdub3JlZCQxMCIsImZtdF9yZXN0JDI0IiwicGFkJDEwIiwiZm10X3Jlc3QkMjUiLCJzdWJfZm10JDAiLCJmbXRfcmVzdCQyNiIsImlnbm9yZWQkMTEiLCJpZ25vcmVkJDMiLCJpZ25vcmVkJDUiLCJpZ25vcmVkJDgiLCJzcGFjZSQxIiwiaGFzaCQxIiwicGx1cyQyIiwia2luZCIsImlnbm9yZWQkNCIsImlnbm9yZWQiLCJpZ25vcmVkJDAiLCJpZ25vcmVkJDEiLCJwbHVzJDEiLCJpZ24kMCIsImZvcm1hdF9vZl9zdHJpbmdfZm10dHkiLCJmb3JtYXRfb2Zfc3RyaW5nX2Zvcm1hdCIsImtmcHJpbnRmIiwia2JwcmludGYiLCJpa2ZwcmludGYiLCJmcHJpbnRmIiwiYnByaW50ZiIsImlmcHJpbnRmIiwiaWJwcmludGYiLCJwcmludGYiLCJlcHJpbnRmIiwia3NwcmludGYiLCJzcHJpbnRmIiwiYXNzb2MzIiwieTIiLCJ5MSIsInNwbGl0JDEiLCJtYWtlX3N5bWxpc3QiLCJoZWxwX2FjdGlvbiIsImFkZF9oZWxwIiwic3BlY2xpc3QiLCJhZGQyIiwidXNhZ2VfYiIsImVycm1zZyIsImRvYyIsInNwZWMiLCJrZXkiLCJ1c2FnZV9zdHJpbmciLCJ1c2FnZSIsImJvb2xfb2Zfc3RyaW5nX29wdCQwIiwiaW50X29mX3N0cmluZ19vcHQkMCIsImZsb2F0X29mX3N0cmluZ19vcHQiLCJwYXJzZV9hbmRfZXhwYW5kX2FyZ3ZfZHluYW1pY18iLCJhbGxvd19leHBhbmQiLCJhcmd2IiwiYW5vbmZ1biIsImluaXRwb3MiLCJjb252ZXJ0X2Vycm9yIiwicHJvZ25hbWUiLCJmb2xsb3ckMCIsImtleXdvcmQiLCJub19hcmckMCIsImZvbGxvdyIsIm5vX2FyZyIsImdldF9hcmckMCIsImdldF9hcmciLCJjb25zdW1lX2FyZyQwIiwiY29uc3VtZV9hcmciLCJ0cmVhdF9hY3Rpb24kMCIsInRyZWF0X2FjdGlvbiIsImYkMCIsImYkMSIsInIkMSIsImYkMiIsInIkMiIsImFyZyQyIiwiZiQzIiwiYXJnJDMiLCJ4JDEiLCJyJDMiLCJhcmckNCIsIngkMiIsInNwZWNzIiwiZiQ0IiwiYXJnJDUiLCJmJDUiLCJmJDYiLCJmJDciLCJhcmckNiIsIm5ld2FyZyIsInBhcnNlX2FuZF9leHBhbmRfYXJndl9keW5hbWljIiwicGFyc2VfYXJndl9keW5hbWljIiwiY3VycmVudCQwIiwicGFyc2VfYXJndiIsIm1zZyQwIiwibXNnJDEiLCJwYXJzZV9keW5hbWljIiwicGFyc2VfZXhwYW5kIiwic2Vjb25kX3dvcmQiLCJsb29wIiwibWF4X2FyZ19sZW4iLCJrd2QiLCJyZXBsYWNlX2xlYWRpbmdfdGFiIiwiYWxpZ24iLCJsaW1pdCIsImNvbXBsZXRlZCIsImtzZCIsImN1dGNvbCQwIiwic3BhY2VzJDAiLCJjdXRjb2wiLCJrd2RfbGVuIiwic3BhY2VzIiwicmVhZF9hdXgiLCJ0cmltIiwiZmlsZSIsIndvcmRzIiwic3Rhc2giLCJ3b3JkIiwicmVhZF9hcmciLCJyZWFkX2FyZzAiLCJ3cml0ZV9hdXgiLCJhcmdzIiwid3JpdGVfYXJnIiwid3JpdGVfYXJnMCIsInByaW50ZXJzIiwiZmllbGQiLCJvdGhlcl9maWVsZHMiLCJ1c2VfcHJpbnRlcnMiLCJjb252IiwidG9fc3RyaW5nX2RlZmF1bHQiLCJjaGFyJDAiLCJsaW5lIiwiY2hhciQxIiwibGluZSQwIiwiZmlsZSQwIiwiY2hhciQyIiwibGluZSQxIiwiZmlsZSQxIiwiY29uc3RydWN0b3IiLCJ0b19zdHJpbmckNiIsInByaW50IiwiZmN0IiwiY2F0Y2gkMCIsInJhd19iYWNrdHJhY2VfZW50cmllcyIsImJ0IiwiY29udmVydF9yYXdfYmFja3RyYWNlIiwiZm9ybWF0X2JhY2t0cmFjZV9zbG90IiwiaXNfcmFpc2UiLCJwcmludF9yYXdfYmFja3RyYWNlIiwib3V0Y2hhbiIsInJhd19iYWNrdHJhY2UiLCJiYWNrdHJhY2UiLCJwcmludF9iYWNrdHJhY2UiLCJyYXdfYmFja3RyYWNlX3RvX3N0cmluZyIsImJhY2t0cmFjZV9zbG90X2lzX3JhaXNlIiwiYmFja3RyYWNlX3Nsb3RfaXNfaW5saW5lIiwiYmFja3RyYWNlX3Nsb3RfbG9jYXRpb24iLCJiYWNrdHJhY2Vfc2xvdF9kZWZuYW1lIiwiYmFja3RyYWNlX3Nsb3RzIiwiYmFja3RyYWNlX3Nsb3RzX29mX3Jhd19lbnRyeSIsImVudHJ5IiwicmF3X2JhY2t0cmFjZV9sZW5ndGgiLCJnZXRfYmFja3RyYWNlIiwicmVnaXN0ZXJfcHJpbnRlciIsImZuIiwib2xkX3ByaW50ZXJzIiwibmV3X3ByaW50ZXJzIiwiZXhuX3Nsb3QiLCJleG5fc2xvdF9pZCIsImV4bl9zbG90X25hbWUiLCJlcnJvcnMiLCJkZWZhdWx0X3VuY2F1Z2h0X2V4Y2VwdGlvbl9oYW4iLCJzdGF0dXMiLCJ1bmNhdWdodF9leGNlcHRpb25faGFuZGxlciIsInNldF91bmNhdWdodF9leGNlcHRpb25faGFuZGxlciIsImVtcHR5X2JhY2t0cmFjZSIsImhhbmRsZV91bmNhdWdodF9leGNlcHRpb24iLCJkZWJ1Z2dlcl9pbl91c2UiLCJleG4kMCIsInJhd19iYWNrdHJhY2UkMCIsImNvbnN0JDAiLCJmbGlwIiwibmVnYXRlIiwicHJvdGVjdCIsImZpbmFsbHkkMCIsIndvcmsiLCJmaW5hbGx5X25vX2V4biIsIndvcmtfZXhuIiwid29ya19idCIsInByaW50X3N0YXQiLCJhbGxvY2F0ZWRfYnl0ZXMiLCJtYSIsInBybyIsIm1pIiwiY3JlYXRlX2FsYXJtIiwiZGVsZXRlX2FsYXJtIiwibnVsbF90cmFja2VyIiwic2FtcGxpbmdfcmF0ZSIsInRyYWNrZXIiLCJjYWxsc3RhY2tfc2l6ZSIsInN0cmluZyIsImJ5dGVzIiwic3Vic3RyaW5nIiwic3ViYnl0ZXMiLCJmaWxlbmFtZSIsIm91dHB1dCQwIiwiZGlnZXN0IiwiaW5wdXQkMCIsImNoYXJfaGV4IiwidG9faGV4IiwiZnJvbV9oZXgiLCJkaWdpdCIsIm5ld19zdGF0ZSIsImFzc2lnbiIsInN0MSIsInN0MiIsImZ1bGxfaW5pdCIsInNlZWQiLCJzZWVkJDAiLCJtYWtlJDMiLCJtYWtlX3NlbGZfaW5pdCIsImNvcHkkNSIsImJpdHMiLCJjdXJ2YWwiLCJuZXd2YWwiLCJuZXd2YWwzMCIsImludGF1eCIsImludCQwIiwiYm91bmQiLCJmdWxsX2ludCIsImJwb3MiLCJicG9zJDAiLCJpbnQzMiIsImludDY0IiwibmF0aXZlaW50IiwiZmxvYXQkMCIsImJvb2wiLCJiaXRzMzIiLCJiaXRzNjQiLCJuYXRpdmViaXRzIiwiYml0cyQwIiwiaW50JDEiLCJmdWxsX2ludCQwIiwiaW50MzIkMCIsIm5hdGl2ZWludCQwIiwiaW50NjQkMCIsImZsb2F0JDEiLCJzY2FsZSIsImJvb2wkMCIsImJpdHMzMiQwIiwiYml0czY0JDAiLCJuYXRpdmViaXRzJDAiLCJmdWxsX2luaXQkMCIsImluaXQkNSIsInNlbGZfaW5pdCIsImdldF9zdGF0ZSIsInNldF9zdGF0ZSIsIm9uZ29pbmdfdHJhdmVyc2FsIiwiZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCIsInBhcmFtcyIsInJhbmRvbWl6ZWRfZGVmYXVsdCIsInJhbmRvbWl6ZWQiLCJyYW5kb21pemUiLCJpc19yYW5kb21pemVkIiwicHJuZyIsInBvd2VyXzJfYWJvdmUiLCJjcmVhdGUkMyIsImluaXRpYWxfc2l6ZSIsInJhbmRvbSIsImNsZWFyJDIiLCJyZXNldCQwIiwiY29weV9idWNrZXRsaXN0Iiwia2V5JDAiLCJuZXh0JDAiLCJjb3B5JDYiLCJsZW5ndGgkNSIsImluc2VydF9hbGxfYnVja2V0cyIsImluZGV4ZnVuIiwiaW5wbGFjZSIsIm9kYXRhIiwibmRhdGEiLCJuc2l6ZSIsIm5kYXRhX3RhaWwiLCJjZWxsJDAiLCJuaWR4IiwibWF0Y2giLCJtYXRjaCQwIiwicmVzaXplJDAiLCJvc2l6ZSIsIml0ZXIkMTAiLCJkb19idWNrZXQiLCJvbGRfdHJhdiIsImZpbHRlcl9tYXBfaW5wbGFjZV9idWNrZXQiLCJmaWx0ZXJfbWFwX2lucGxhY2UiLCJmb2xkJDQiLCJiJDAiLCJidWNrZXRfbGVuZ3RoIiwic3RhdHMiLCJtYmwiLCJoaXN0byIsInRvX3NlcSQ5IiwidGJsX2RhdGEiLCJidWNrIiwiYnVjayQwIiwiYnVjayQxIiwidG9fc2VxX2tleXMiLCJ0b19zZXFfdmFsdWVzIiwia2V5X2luZGV4IiwiYnVja2V0IiwiazEiLCJuZXh0MSIsImsyIiwibmV4dDIiLCJrMyIsImQzIiwibmV4dDMiLCJmaW5kX2FsbCIsImZpbmRfaW5fYnVja2V0IiwicmVwbGFjZSIsInJlcGxhY2Vfc2VxIiwiY29weSIsInN6IiwiaGFzaF9wYXJhbSIsInNlZWRlZF9oYXNoIiwiYWRkJDAiLCJmaW5kJDEiLCJmaW5kX29wdCQxIiwiZmluZF9hbGwkMCIsIm1lbSQyIiwiYWRkX3NlcSQyIiwib2Zfc2VxJDciLCJyZWJ1aWxkIiwid2Vha19jcmVhdGUiLCJsZW5ndGgkNiIsInJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0JDAiLCJzZXQkMSIsImdldCQyIiwiZ2V0X2NvcHkiLCJjaGVjayQwIiwiYmxpdCQ0IiwiZmlsbCQyIiwiYXIiLCJlbXB0eWJ1Y2tldCIsImdldF9pbmRleCIsInN6JDAiLCJzeiQxIiwiY291bnRfYnVja2V0IiwiYWRkX2F1eCIsInNldHRlciIsImluZGV4IiwiYnVja2V0JDAiLCJoYXNoZXMiLCJuZXdzeiIsIm5ld2J1Y2tldCQwIiwibmV3aGFzaGVzIiwiaGJ1Y2tldCIsInByZXZfbGVuIiwibGl2ZSIsImokMiIsIm5ld2J1Y2tldCIsIm5ld3QiLCJvYiIsIm9oIiwic2V0dGVyJDAiLCJuaSIsImZpbmRfb3IiLCJpZm5vdGZvdW5kIiwiZmluZF9zaGFkb3ciLCJpZmZvdW5kIiwibGVucyIsInRvdGxlbiIsImlkJDAiLCJ1bmtub3duIiwicHBfZW5xdWV1ZSIsInRva2VuIiwicHBfaW5maW5pdHkiLCJwcF9vdXRwdXRfc3RyaW5nIiwicHBfb3V0cHV0X25ld2xpbmUiLCJmb3JtYXRfcHBfdGV4dCIsInRleHQiLCJmb3JtYXRfc3RyaW5nIiwiYnJlYWtfbmV3X2xpbmUiLCJyZWFsX2luZGVudCIsImJyZWFrX2xpbmUiLCJicmVha19zYW1lX2xpbmUiLCJmb3JtYXRfcHBfdG9rZW4iLCJzaXplJDAiLCJ0YWJzIiwiYWRkX3RhYiIsImxzIiwidGFnX25hbWUiLCJtYXJrZXIiLCJicmVha3MiLCJmaXRzIiwib2ZmIiwiYm94X3R5cGUkMCIsIm9mZiQwIiwiaW5zZXJ0aW9uX3BvaW50IiwidGFicyQwIiwiZmlyc3QiLCJoZWFkIiwidGFiIiwib2ZmJDEiLCJpbnNlcnRpb25fcG9pbnQkMCIsIndpZHRoJDIiLCJib3hfdHlwZSQxIiwidGJveCIsInRhZ19uYW1lJDAiLCJtYXJrZXIkMCIsImFkdmFuY2VfbGVmdCIsInBlbmRpbmdfY291bnQiLCJlbnF1ZXVlX2FkdmFuY2UiLCJlbnF1ZXVlX3N0cmluZ19hcyIsImluaXRpYWxpemVfc2Nhbl9zdGFjayIsInN0YWNrIiwicXVldWVfZWxlbSIsInNldF9zaXplIiwibGVmdF90b3RhbCIsInNjYW5fcHVzaCIsImVsZW0iLCJwcF9vcGVuX2JveF9nZW4iLCJicl90eSIsInBwX2Nsb3NlX2JveCIsInBwX29wZW5fc3RhZyIsInBwX2Nsb3NlX3N0YWciLCJwcF9vcGVuX3RhZyIsInBwX2Nsb3NlX3RhZyIsInBwX3NldF9wcmludF90YWdzIiwicHBfc2V0X21hcmtfdGFncyIsInBwX2dldF9wcmludF90YWdzIiwicHBfZ2V0X21hcmtfdGFncyIsInBwX3NldF90YWdzIiwicHBfZ2V0X2Zvcm1hdHRlcl9zdGFnX2Z1bmN0aW9uIiwicHBfc2V0X2Zvcm1hdHRlcl9zdGFnX2Z1bmN0aW9uIiwicGN0IiwicG90IiwibWN0IiwibW90IiwicHBfcmluaXQiLCJwcF9mbHVzaF9xdWV1ZSIsInBwX3ByaW50X2FzX3NpemUiLCJwcF9wcmludF9hcyIsImlzaXplIiwicHBfcHJpbnRfc3RyaW5nIiwicHBfcHJpbnRfYnl0ZXMiLCJwcF9wcmludF9pbnQiLCJwcF9wcmludF9mbG9hdCIsInBwX3ByaW50X2Jvb2wiLCJwcF9wcmludF9jaGFyIiwicHBfb3Blbl9oYm94IiwicHBfb3Blbl92Ym94IiwicHBfb3Blbl9odmJveCIsInBwX29wZW5faG92Ym94IiwicHBfb3Blbl9ib3giLCJwcF9wcmludF9uZXdsaW5lIiwicHBfcHJpbnRfZmx1c2giLCJwcF9mb3JjZV9uZXdsaW5lIiwicHBfcHJpbnRfaWZfbmV3bGluZSIsInBwX3ByaW50X2N1c3RvbV9icmVhayIsInBwX3ByaW50X2JyZWFrIiwicHBfcHJpbnRfc3BhY2UiLCJwcF9wcmludF9jdXQiLCJwcF9vcGVuX3Rib3giLCJwcF9jbG9zZV90Ym94IiwicHBfcHJpbnRfdGJyZWFrIiwicHBfcHJpbnRfdGFiIiwicHBfc2V0X3RhYiIsInBwX3NldF9tYXhfYm94ZXMiLCJwcF9nZXRfbWF4X2JveGVzIiwicHBfb3Zlcl9tYXhfYm94ZXMiLCJwcF9zZXRfZWxsaXBzaXNfdGV4dCIsInBwX2dldF9lbGxpcHNpc190ZXh0IiwicHBfbGltaXQiLCJwcF9zZXRfbWF4X2luZGVudCIsInBwX2dldF9tYXhfaW5kZW50IiwicHBfc2V0X21hcmdpbiIsIm5ld19tYXhfaW5kZW50IiwidmFsaWRhdGVfZ2VvbWV0cnkiLCJtYXJnaW4iLCJtYXhfaW5kZW50IiwiY2hlY2tfZ2VvbWV0cnkiLCJnZW9tZXRyeSIsInBwX2dldF9tYXJnaW4iLCJwcF9zZXRfZnVsbF9nZW9tZXRyeSIsInBwX3NldF9nZW9tZXRyeSIsInBwX3NhZmVfc2V0X2dlb21ldHJ5IiwicHBfZ2V0X2dlb21ldHJ5IiwicHBfdXBkYXRlX2dlb21ldHJ5IiwicHBfc2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zIiwicHBfZ2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zIiwicHBfc2V0X2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3RpIiwicHBfZ2V0X2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3RpIiwiZGlzcGxheV9uZXdsaW5lIiwiYmxhbmtfbGluZSIsImRpc3BsYXlfaW5kZW50IiwicHBfc2V0X2Zvcm1hdHRlcl9vdXRfY2hhbm5lbCIsImRlZmF1bHRfcHBfbWFya19vcGVuX3RhZyIsImRlZmF1bHRfcHBfbWFya19jbG9zZV90YWciLCJkZWZhdWx0X3BwX3ByaW50X29wZW5fdGFnIiwiZGVmYXVsdF9wcF9wcmludF9jbG9zZV90YWciLCJwcF9tYWtlX2Zvcm1hdHRlciIsInBwX3F1ZXVlIiwic3lzX3RvayIsInNjYW5fc3RhY2siLCJmb3JtYXR0ZXJfb2Zfb3V0X2Z1bmN0aW9ucyIsIm91dF9mdW5zIiwibWFrZV9mb3JtYXR0ZXIiLCJwcGYiLCJmb3JtYXR0ZXJfb2Zfb3V0X2NoYW5uZWwiLCJmb3JtYXR0ZXJfb2ZfYnVmZmVyIiwicHBfYnVmZmVyX3NpemUiLCJwcF9tYWtlX2J1ZmZlciIsInN0ZGJ1ZiIsInN0ZF9mb3JtYXR0ZXIiLCJlcnJfZm9ybWF0dGVyIiwic3RyX2Zvcm1hdHRlciIsImZsdXNoX2J1ZmZlcl9mb3JtYXR0ZXIiLCJmbHVzaF9zdHJfZm9ybWF0dGVyIiwibWFrZV9zeW1ib2xpY19vdXRwdXRfYnVmZmVyIiwiY2xlYXJfc3ltYm9saWNfb3V0cHV0X2J1ZmZlciIsInNvYiIsImdldF9zeW1ib2xpY19vdXRwdXRfYnVmZmVyIiwiZmx1c2hfc3ltYm9saWNfb3V0cHV0X2J1ZmZlciIsIml0ZW1zIiwiYWRkX3N5bWJvbGljX291dHB1dF9pdGVtIiwiaXRlbSIsImZvcm1hdHRlcl9vZl9zeW1ib2xpY19vdXRwdXRfYiIsIm9wZW5faGJveCIsIm9wZW5fdmJveCIsIm9wZW5faHZib3giLCJvcGVuX2hvdmJveCIsIm9wZW5fYm94IiwiY2xvc2VfYm94Iiwib3Blbl90YWciLCJjbG9zZV90YWciLCJvcGVuX3N0YWciLCJjbG9zZV9zdGFnIiwicHJpbnRfYXMiLCJwcmludF9zdHJpbmckMCIsInByaW50X2J5dGVzJDAiLCJwcmludF9pbnQkMCIsInByaW50X2Zsb2F0JDAiLCJwcmludF9jaGFyJDAiLCJwcmludF9ib29sIiwicHJpbnRfYnJlYWsiLCJwcmludF9jdXQiLCJwcmludF9zcGFjZSIsImZvcmNlX25ld2xpbmUiLCJwcmludF9mbHVzaCIsInByaW50X25ld2xpbmUkMCIsInByaW50X2lmX25ld2xpbmUiLCJvcGVuX3Rib3giLCJjbG9zZV90Ym94IiwicHJpbnRfdGJyZWFrIiwic2V0X3RhYiIsInByaW50X3RhYiIsInNldF9tYXJnaW4iLCJnZXRfbWFyZ2luIiwic2V0X21heF9pbmRlbnQiLCJnZXRfbWF4X2luZGVudCIsInNldF9nZW9tZXRyeSIsInNhZmVfc2V0X2dlb21ldHJ5IiwiZ2V0X2dlb21ldHJ5IiwidXBkYXRlX2dlb21ldHJ5Iiwic2V0X21heF9ib3hlcyIsImdldF9tYXhfYm94ZXMiLCJvdmVyX21heF9ib3hlcyIsInNldF9lbGxpcHNpc190ZXh0IiwiZ2V0X2VsbGlwc2lzX3RleHQiLCJzZXRfZm9ybWF0dGVyX291dF9jaGFubmVsIiwic2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zIiwiZ2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zIiwic2V0X2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIiwiZ2V0X2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIiwic2V0X2Zvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyIsImdldF9mb3JtYXR0ZXJfc3RhZ19mdW5jdGlvbnMiLCJzZXRfcHJpbnRfdGFncyIsImdldF9wcmludF90YWdzIiwic2V0X21hcmtfdGFncyIsImdldF9tYXJrX3RhZ3MiLCJzZXRfdGFncyIsInBwX3ByaW50X2xpc3QiLCJwcF92Iiwib3B0JDAiLCJwcF9zZXAiLCJ2cyIsIm9wdCQxIiwicHBfcHJpbnRfc2VxIiwic2VxJDEiLCJzZXEkMiIsInBwX3ByaW50X3RleHQiLCJwcF9wcmludF9vcHRpb24iLCJwcF9wcmludF9yZXN1bHQiLCJwcF9wcmludF9laXRoZXIiLCJjb21wdXRlX3RhZyIsInRhZ19hY2MiLCJvdXRwdXRfZm9ybWF0dGluZ19saXQiLCJvdXRwdXRfYWNjJDAiLCJidHkiLCJwJDUiLCJwJDYiLCJzdHJwdXRfYWNjJDAiLCJzaXplJDEiLCJrZnByaW50ZiQwIiwiaWtmcHJpbnRmJDAiLCJpZnByaW50ZiQwIiwiZnByaW50ZiQwIiwicHJpbnRmJDAiLCJlcHJpbnRmJDAiLCJrZHByaW50ZiIsImRwcmludGYiLCJrcHJpbnRmIiwic3ByaW50ZiQwIiwia2FzcHJpbnRmIiwiYXNwcmludGYiLCJmbHVzaF9zdGFuZGFyZF9mb3JtYXR0ZXJzIiwicHBfc2V0X2FsbF9mb3JtYXR0ZXJfb3V0cHV0X2Z1IiwicHBfZ2V0X2FsbF9mb3JtYXR0ZXJfb3V0cHV0X2Z1Iiwic2V0X2FsbF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0IiwiZ2V0X2FsbF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0IiwiYnByaW50ZiQwIiwicHBfc2V0X2Zvcm1hdHRlcl90YWdfZnVuY3Rpb25zIiwic3RyaW5naWZ5IiwicHBfZ2V0X2Zvcm1hdHRlcl90YWdfZnVuY3Rpb25zIiwiZnVucyIsIm1hcmtfb3Blbl90YWciLCJtYXJrX2Nsb3NlX3RhZyIsInByaW50X29wZW5fdGFnIiwicHJpbnRfY2xvc2VfdGFnIiwic2V0X2Zvcm1hdHRlcl90YWdfZnVuY3Rpb25zIiwiZ2V0X2Zvcm1hdHRlcl90YWdfZnVuY3Rpb25zIiwibnVsbF9jaGFyIiwibmV4dF9jaGFyIiwiaWIiLCJwZWVrX2NoYXIiLCJjaGVja2VkX3BlZWtfY2hhciIsImVuZF9vZl9pbnB1dCIsImJlZ2lubmluZ19vZl9pbnB1dCIsIm5hbWVfb2ZfaW5wdXQiLCJjaGFyX2NvdW50IiwicmVzZXRfdG9rZW4iLCJpbnZhbGlkYXRlX2N1cnJlbnRfY2hhciIsInRva2VuX3N0cmluZyIsInRva2VuX2J1ZmZlciIsInNraXBfY2hhciIsImlnbm9yZV9jaGFyIiwic3RvcmVfY2hhciIsImRlZmF1bHRfdG9rZW5fYnVmZmVyX3NpemUiLCJjcmVhdGUkNCIsImluYW1lIiwiZnJvbV9zdHJpbmckMSIsImZyb21fZnVuY3Rpb24kMCIsInNjYW5fY2xvc2VfYXRfZW5kIiwic2Nhbl9yYWlzZV9hdF9lbmQiLCJmcm9tX2ljIiwic2Nhbl9jbG9zZV9pYyIsImVvZiIsInN0ZGliIiwib3Blbl9pbl9maWxlIiwib3Blbl9pbiIsImZyb21fZmlsZSIsImZyb21fZmlsZV9iaW4iLCJmcm9tX2NoYW5uZWwkMCIsImNsb3NlX2luIiwiaWMkMCIsIm1lbW8iLCJtZW1vX2Zyb21faWMiLCJtZW1vX2Zyb21fY2hhbm5lbCIsImJhZF9pbnB1dCIsImJhZF9pbnB1dF9lc2NhcGUiLCJiYWRfdG9rZW5fbGVuZ3RoIiwibWVzc2FnZSIsImJhZF9mbG9hdCIsImJhZF9oZXhfZmxvYXQiLCJjaGFyYWN0ZXJfbWlzbWF0Y2giLCJjaSIsImNoZWNrX3RoaXNfY2hhciIsImNoZWNrX2NoYXIiLCJ0b2tlbl9jaGFyIiwidG9rZW5fYm9vbCIsImludGVnZXJfY29udmVyc2lvbl9vZl9jaGFyIiwidG9rZW5faW50X2xpdGVyYWwiLCJ0b2tlbl9mbG9hdCIsInNjYW5fZGVjaW1hbF9kaWdpdF9zdGFyIiwic2Nhbl91bnNpZ25lZF9kZWNpbWFsX2ludCIsInNjYW5fZGlnaXRfcGx1cyIsImJhc2lzIiwiZGlnaXRwIiwid2lkdGgkMyIsImlzX2JpbmFyeV9kaWdpdCIsInNjYW5fYmluYXJ5X2ludCIsImlzX29jdGFsX2RpZ2l0Iiwic2Nhbl9vY3RhbF9pbnQiLCJpc19oZXhhX2RpZ2l0Iiwic2Nhbl9oZXhhZGVjaW1hbF9pbnQiLCJzY2FuX3NpZ24iLCJzY2FuX29wdGlvbmFsbHlfc2lnbmVkX2RlY2ltYWwiLCJzY2FuX2ludF9jb252ZXJzaW9uIiwic2Nhbl9mcmFjdGlvbmFsX3BhcnQiLCJzY2FuX2V4cG9uZW50X3BhcnQiLCJzY2FuX2Zsb2F0IiwicHJlY2lzaW9uIiwicHJlY2lzaW9uJDAiLCJjaGVja19jYXNlX2luc2Vuc2l0aXZlX3N0cmluZyIsInNjYW5faGV4X2Zsb2F0Iiwid2lkdGgkNCIsIndpZHRoJDUiLCJ3aWR0aCQ2Iiwid2lkdGgkMTAiLCJ3aWR0aCQ3Iiwid2lkdGgkOCIsIndpZHRoJDkiLCJzY2FuX2NhbWxfZmxvYXRfcmVzdCIsIndpZHRoX3ByZWNpc2lvbiIsImZyYWNfd2lkdGgiLCJzY2FuX2NhbWxfZmxvYXQiLCJzY2FuX3N0cmluZyIsInN0cCIsInNjYW5fY2hhciIsImhleGFkZWNpbWFsX3ZhbHVlX29mX2NoYXIiLCJjaGVja19uZXh0X2NoYXIiLCJjaGVja19uZXh0X2NoYXJfZm9yX2NoYXIiLCJjaGVja19uZXh0X2NoYXJfZm9yX3N0cmluZyIsInNjYW5fYmFja3NsYXNoX2NoYXIiLCJjMCIsImdldF9kaWdpdCIsImdldF9kaWdpdCQwIiwiYzEkMCIsImMyJDAiLCJzY2FuX2NhbWxfY2hhciIsImZpbmRfc3RvcCIsInNjYW5fY2FtbF9zdHJpbmciLCJmaW5kX3N0b3AkMCIsInNraXBfc3BhY2VzIiwic2Nhbl9jaGFyc19pbl9jaGFyX3NldCIsInNjYW5faW5kaWMiLCJzY2FuX2NoYXJzIiwic2NhbmZfYmFkX2lucHV0IiwiZ2V0X2NvdW50ZXIiLCJ3aWR0aF9vZl9wYWRfb3B0Iiwic3RvcHBlcl9vZl9mb3JtYXR0aW5nX2xpdCIsImZtdGluZyIsInRha2VfZm9ybWF0X3JlYWRlcnMkMCIsInRha2VfZm10dHlfZm9ybWF0X3JlYWRlcnMkMCIsInJlYWRlciIsIm5ld19rIiwicmVhZGVyc19yZXN0IiwidGFrZV9mb3JtYXRfcmVhZGVycyIsImZtdCQyMyIsImZtdCQyNCIsImZtdCQyNSIsInRha2VfZm10dHlfZm9ybWF0X3JlYWRlcnMiLCJtYWtlX3NjYW5mIiwicmVhZGVycyIsInNjYW4kMCIsInN0cl9yZXN0IiwicGFkX3ByZWNfc2NhbmYiLCJzY2FuJDEiLCJzY2FuJDIiLCJzY2FuJDMiLCJzY2FuJDQiLCJjb252JDAiLCJzY2FuJDUiLCJjb252JDEiLCJzY2FuJDYiLCJjb252JDIiLCJzY2FuJDciLCJzY2FuJDgiLCJmbXRpbmdfbGl0JDAiLCJzdHAkMCIsInMkMiIsInN0cl9yZXN0JDAiLCJyZXN0JDI2IiwiYXJnX3Jlc3QiLCJrc2NhbmYiLCJlZiIsImFwcGx5IiwiYXJncyQwIiwiZXhjIiwiYnNjYW5mIiwia3NzY2FuZiIsInNzY2FuZiIsInNjYW5mIiwiYnNjYW5mX2Zvcm1hdCIsImZvcm1hdCIsInNzY2FuZl9mb3JtYXQiLCJmb3JtYXRfZnJvbV9zdHJpbmciLCJ1bmVzY2FwZWQiLCJrZnNjYW5mIiwiZnNjYW5mIiwicmVnaXN0ZXIiLCJyZWdpc3Rlcl9leGNlcHRpb24iLCJvJDAiLCJwYXJhbXMkMCIsImluaXRpYWxfb2JqZWN0X3NpemUiLCJkdW1teV9pdGVtIiwidGFnIiwiY29tcGFyZSQxNCIsImNvbXBhcmUkMTUiLCJjb21wYXJlJDE2IiwiZHVtbXlfdGFibGUiLCJ0YWJsZV9jb3VudCIsImR1bW15X21ldCIsImZpdF9zaXplIiwibmV3X3RhYmxlIiwicHViX2xhYmVscyIsIm1ldGhvZHMiLCJyZXNpemUkMSIsImFycmF5IiwibmV3X3NpemUiLCJvbGRfc2l6ZSIsIm5ld19idWNrIiwibWV0aG9kX2NvdW50IiwiaW5zdF92YXJfY291bnQiLCJuZXdfbWV0aG9kIiwidGFibGUiLCJnZXRfbWV0aG9kX2xhYmVsIiwibGFiZWwiLCJnZXRfbWV0aG9kX2xhYmVscyIsIm5hbWVzIiwic2V0X21ldGhvZCIsImVsZW1lbnQiLCJnZXRfbWV0aG9kIiwidG9fbGlzdCQzIiwiYXJyIiwibmFycm93IiwidmFycyIsInZpcnRfbWV0aHMiLCJjb25jcl9tZXRocyIsInZhcnMkMCIsInZpcnRfbWV0aHMkMCIsImNvbmNyX21ldGhzJDAiLCJ2aXJ0X21ldGhfbGFicyIsImNvbmNyX21ldGhfbGFicyIsImxhYiIsInR2YXJzIiwiYnlfbmFtZSIsImJ5X2xhYmVsIiwibWV0IiwiaG0iLCJ3aWRlbiIsInNhdmVkX3ZhcnMiLCJzYXZlZF9oaWRkZW5fbWV0aHMiLCJuZXdfc2xvdCIsIm5ld192YXJpYWJsZSIsInRvX2FycmF5IiwibmV3X21ldGhvZHNfdmFyaWFibGVzIiwibWV0aHMiLCJ2YWxzIiwibWV0aHMkMCIsIm5tZXRocyIsIm52YWxzIiwiZ2V0X3ZhcmlhYmxlIiwiZ2V0X3ZhcmlhYmxlcyIsImFkZF9pbml0aWFsaXplciIsImNyZWF0ZV90YWJsZSIsInB1YmxpY19tZXRob2RzIiwidGFncyIsImluaXRfY2xhc3MiLCJpbmhlcml0cyIsImNsYSIsInN1cGVyJDAiLCJubSIsIm1ha2VfY2xhc3MiLCJwdWJfbWV0aHMiLCJjbGFzc19pbml0IiwiZW52X2luaXQiLCJtYWtlX2NsYXNzX3N0b3JlIiwiaW5pdF90YWJsZSIsImR1bW15X2NsYXNzIiwibG9jIiwidW5kZWYiLCJjcmVhdGVfb2JqZWN0IiwiY3JlYXRlX29iamVjdF9vcHQiLCJvYmpfMCIsIml0ZXJfZiIsInJ1bl9pbml0aWFsaXplcnMiLCJpbml0cyIsInJ1bl9pbml0aWFsaXplcnNfb3B0IiwiY3JlYXRlX29iamVjdF9hbmRfcnVuX2luaXRpYWxpIiwiZ2V0X2RhdGEkMCIsImJ1aWxkX3BhdGgiLCJrZXlzIiwibG9va3VwX3RhYmxlcyIsInJvb3QiLCJ0YWJsZXMkMiIsInRhYmxlcyQwIiwidGFibGVzJDEiLCJuZXdfY2FjaGUiLCJzZXRfbWV0aG9kcyIsImNsbyIsImNsbyQwIiwibiQyIiwibiQzIiwibiQ0IiwibiQ1IiwibiQ2IiwieCQzIiwibiQ3IiwieCQ0IiwibiQ4IiwibiQ5IiwieCQ1IiwiZiQ4IiwiZSQyIiwibiQxMCIsIngkNiIsImYkOSIsIm4kMTEiLCJ4JDciLCJuJDEyIiwieCQ4IiwibiQxMyIsIm4kMTQiLCJlJDMiLCJuJDE1IiwibSQyIiwieCQ5IiwibSQzIiwibiQxNiIsIm0kNCIsImUkNCIsIm4kMTciLCJtJDUiLCJuJDE4Iiwic3RhdHMkMCIsImluaXRfbW9kX2Jsb2NrIiwiY29tcHMkMCIsIm1vZHUiLCJzaGFwZSIsImZuJDAiLCJjb21wcyIsImluaXRfbW9kIiwidXBkYXRlX21vZF9ibG9jayIsImNsIiwidXBkYXRlX21vZCIsImluaXRpYWxfYnVmZmVyIiwiYnVmZmVyIiwiYnVmcG9zIiwicmVzZXRfYnVmZmVyIiwic3RvcmUiLCJuZXdidWZmZXIiLCJnZXRfc3RyaW5nIiwibWFrZV9sZXhlciIsImtleXdvcmRzIiwia3dkX3RhYmxlIiwiaWRlbnRfb3Jfa2V5d29yZCIsImtleXdvcmRfb3JfZXJyb3IiLCJjb21tZW50IiwiZXNjYXBlIiwiZW5kX2V4cG9uZW50X3BhcnQiLCJleHBvbmVudF9wYXJ0IiwibnVtYmVyIiwiaWRlbnQyIiwibmVnX251bWJlciIsIm5leHRfdG9rZW4kMCIsIm1heWJlX2NvbW1lbnQiLCJuZXh0X3Rva2VuIiwiaGtleSIsImNsZWFuIiwiaW5zZXJ0X2J1Y2tldCIsImNvbnRhaW5lciIsInJlbW92ZV9idWNrZXQiLCJoayIsInJlcGxhY2VfYnVja2V0IiwibmV3X2QiLCJidWNrZXRfbGVuZ3RoX2FsaXZlIiwic3RhdHNfYWxpdmUiLCJjcmVhdGUkNSIsImdldF9rZXkkMCIsImdldF9rZXlfY29weSQwIiwic2V0X2tleSQwIiwidW5zZXRfa2V5JDAiLCJjaGVja19rZXkkMCIsImJsaXRfa2V5JDAiLCJnZXRfZGF0YSQxIiwiZ2V0X2RhdGFfY29weSIsInNldF9kYXRhIiwidW5zZXRfZGF0YSIsImNoZWNrX2RhdGEiLCJibGl0X2RhdGEiLCJtYWtlJDQiLCJlcGgiLCJxdWVyeSIsInNldF9rZXlfZGF0YSIsIm1ha2UkNSIsImFkZCQxIiwidGVzdF9rZXkiLCJyZW1vdmUkMCIsImZpbmQkMiIsImxlbmd0aCQ3IiwiY2xlYXIkMyIsImNyZWF0ZSQ2IiwiZ2V0X2tleTEiLCJnZXRfa2V5MV9jb3B5Iiwic2V0X2tleTEiLCJ1bnNldF9rZXkxIiwiY2hlY2tfa2V5MSIsImdldF9rZXkyIiwiZ2V0X2tleTJfY29weSIsInNldF9rZXkyIiwidW5zZXRfa2V5MiIsImNoZWNrX2tleTIiLCJibGl0X2tleTEiLCJibGl0X2tleTIiLCJibGl0X2tleTEyIiwiZ2V0X2RhdGEkMiIsImdldF9kYXRhX2NvcHkkMCIsInNldF9kYXRhJDAiLCJ1bnNldF9kYXRhJDAiLCJjaGVja19kYXRhJDAiLCJibGl0X2RhdGEkMCIsIm1ha2UkNiIsImtleTEiLCJrZXkyIiwicXVlcnkkMCIsImsyJDAiLCJrMSQwIiwibWFrZSQ3IiwiYWRkJDIiLCJ0ZXN0X2tleXMiLCJyZW1vdmUkMSIsImZpbmQkMyIsImxlbmd0aCQ4IiwiY2xlYXIkNCIsImNyZWF0ZSQ3IiwibGVuZ3RoJDkiLCJnZXRfa2V5JDEiLCJnZXRfa2V5X2NvcHkkMSIsInNldF9rZXkkMSIsInVuc2V0X2tleSQxIiwiY2hlY2tfa2V5JDEiLCJibGl0X2tleSQxIiwiZ2V0X2RhdGEkMyIsImdldF9kYXRhX2NvcHkkMSIsInNldF9kYXRhJDEiLCJ1bnNldF9kYXRhJDEiLCJjaGVja19kYXRhJDEiLCJibGl0X2RhdGEkMSIsIm1ha2UkOCIsInF1ZXJ5JDEiLCJraSIsImswIiwibWFrZSQ5IiwiYWRkJDMiLCJ0ZXN0X2tleXMkMCIsInJlbW92ZSQyIiwiZmluZCQ0IiwibGVuZ3RoJDEwIiwiY2xlYXIkNSIsImdlbmVyaWNfYmFzZW5hbWUiLCJpc19kaXJfc2VwIiwiZ2VuZXJpY19kaXJuYW1lIiwiaXNfcmVsYXRpdmUiLCJpc19pbXBsaWNpdCIsImNoZWNrX3N1ZmZpeCIsInN1ZmYiLCJjaG9wX3N1ZmZpeF9vcHQiLCJsZW5fZiIsInF1b3RlIiwicXVvdGVfY29tbWFuZCIsImJhc2VuYW1lIiwiZGlybmFtZSIsImlzX2Rpcl9zZXAkMCIsImlzX3JlbGF0aXZlJDAiLCJpc19pbXBsaWNpdCQwIiwiY2hlY2tfc3VmZml4JDAiLCJjaG9wX3N1ZmZpeF9vcHQkMCIsInRlbXBfZGlyX25hbWUiLCJxdW90ZSQwIiwiYWRkX2JzIiwibG9vcCQwIiwibG9vcF9icyIsInF1b3RlX2NtZF9maWxlbmFtZSIsInF1b3RlX2NvbW1hbmQkMCIsImRyaXZlX2FuZF9wYXRoIiwiZGlybmFtZSQwIiwicGF0aCIsImRyaXZlIiwiZGlyIiwiYmFzZW5hbWUkMCIsImJhc2VuYW1lJDEiLCJkaXJuYW1lJDEiLCJudWxsJDMiLCJjdXJyZW50X2Rpcl9uYW1lJDIiLCJwYXJlbnRfZGlyX25hbWUkMiIsImRpcl9zZXAkMiIsImlzX2Rpcl9zZXAkMSIsImlzX3JlbGF0aXZlJDEiLCJpc19pbXBsaWNpdCQxIiwiY2hlY2tfc3VmZml4JDEiLCJjaG9wX3N1ZmZpeF9vcHQkMSIsInRlbXBfZGlyX25hbWUkMCIsInF1b3RlJDEiLCJxdW90ZV9jb21tYW5kJDEiLCJiYXNlbmFtZSQyIiwiZGlybmFtZSQyIiwiY29uY2F0JDQiLCJjaG9wX3N1ZmZpeCIsImV4dGVuc2lvbl9sZW4iLCJleHRlbnNpb24iLCJjaG9wX2V4dGVuc2lvbiIsInJlbW92ZV9leHRlbnNpb24iLCJwcm5nJDAiLCJ0ZW1wX2ZpbGVfbmFtZSIsInRlbXBfZGlyIiwicm5kIiwiY3VycmVudF90ZW1wX2Rpcl9uYW1lIiwic2V0X3RlbXBfZGlyX25hbWUiLCJnZXRfdGVtcF9kaXJfbmFtZSIsInRlbXBfZmlsZSIsInRyeV9uYW1lIiwiY291bnRlciQxIiwib3Blbl90ZW1wX2ZpbGUiLCJzdGgkMCIsInBlcm1zIiwic3RoJDEiLCJhZGQkNCIsInN1YiQ0IiwibmVnIiwiY29uaiIsIm11bCIsImRpdiIsImludiIsIm5vcm0yIiwibm9ybSIsInEkMCIsInBvbGFyIiwic3FydCIsInckMCIsImV4cCIsImxvZyIsInBvdyIsImZsb2F0MzIiLCJmbG9hdDY0IiwiaW50OF9zaWduZWQiLCJpbnQ4X3Vuc2lnbmVkIiwiaW50MTZfc2lnbmVkIiwiaW50MTZfdW5zaWduZWQiLCJpbnQzMiQxIiwiaW50NjQkMSIsImludCQyIiwibmF0aXZlaW50JDEiLCJjb21wbGV4MzIiLCJjb21wbGV4NjQiLCJraW5kX3NpemVfaW5fYnl0ZXMiLCJjX2xheW91dCIsImZvcnRyYW5fbGF5b3V0IiwiY2xvb3AiLCJpZHgiLCJjb2wiLCJmbG9vcCIsImluaXQkNiIsImxheW91dCIsImRpbXMiLCJkbGVuIiwic2l6ZV9pbl9ieXRlcyIsImNyZWF0ZSQ4IiwiZ2V0JDMiLCJzZXQkMiIsInNpemVfaW5fYnl0ZXMkMCIsIm9mX3ZhbHVlIiwiY3JlYXRlJDkiLCJkaW0iLCJzaXplX2luX2J5dGVzJDEiLCJzbGljZSIsImluaXQkNyIsIm9mX2FycmF5IiwiYmEiLCJjcmVhdGUkMTAiLCJkaW0xIiwiZGltMiIsInNpemVfaW5fYnl0ZXMkMiIsInNsaWNlX2xlZnQiLCJzbGljZV9yaWdodCIsImluaXQkOCIsIm9mX2FycmF5JDAiLCJyb3ciLCJjcmVhdGUkMTEiLCJkaW0zIiwic2l6ZV9pbl9ieXRlcyQzIiwic2xpY2VfbGVmdF8xIiwic2xpY2VfcmlnaHRfMSIsInNsaWNlX2xlZnRfMiIsInNsaWNlX3JpZ2h0XzIiLCJpbml0JDkiLCJvZl9hcnJheSQxIiwiYXJyYXkwX29mX2dlbmFycmF5IiwiYXJyYXkxX29mX2dlbmFycmF5IiwiYXJyYXkyX29mX2dlbmFycmF5IiwiYXJyYXkzX29mX2dlbmFycmF5IiwicmVzaGFwZV8wIiwicmVzaGFwZV8xIiwicmVzaGFwZV8yIiwicmVzaGFwZV8zIiwid2l0aF9vcGVuIiwib3BlbmZ1biIsIndpdGhfb3Blbl9iaW4iLCJ3aXRoX29wZW5fdGV4dCIsIndpdGhfb3Blbl9nZW4iLCJzZWVrIiwibGVuZ3RoJDExIiwiaW5wdXRfY2hhciQwIiwiaW5wdXRfYnl0ZSQwIiwiaW5wdXRfbGluZSQwIiwicmVhbGx5X2lucHV0JDAiLCJyZWFsbHlfaW5wdXRfc3RyaW5nJDAiLCJyZWFkX3VwdG8iLCJlbnN1cmUiLCJuZXdfbGVuJDAiLCJuZXdfbGVuJDEiLCJpbnB1dF9hbGwiLCJjaHVua19zaXplIiwiaW5pdGlhbF9zaXplJDAiLCJpbml0aWFsX3NpemUkMSIsIm5yZWFkIiwiYnVmJDAiLCJidWYkMSIsInJlbSIsIndpdGhfb3BlbiQwIiwid2l0aF9vcGVuX2JpbiQwIiwid2l0aF9vcGVuX3RleHQkMCIsIndpdGhfb3Blbl9nZW4kMCIsInNlZWskMCIsInBvcyQwIiwibGVuZ3RoJDEyIiwidGFyaWYiLCJkZXN0aW5hdGFpcmVzIiwicGllY2VzIiwiZm91cm5pdHVyZXMiLCJzaG9ydF9zdHJpbmdfb2ZfcGllY2UiLCJsb25nX3N0cmluZ19vZl9waWVjZSIsImV4biIsIm1vZHVsZSIsImdsb2JhbFRoaXMiLCJudWxsIiwidW5kZWZpbmVkIiwianNvb19leHBvcnRzIiwiZXZlbnQiLCJzZXRfc3RyaW5nX2lucHV0X2J5X2lkIiwibm0iLCJ2IiwiaW5wIiwicmVhZF9zdHJpbmdfaW5wdXRfYnlfaWQiLCJ6ZXJvX2ludF9pbnB1dF9ieV9pZCIsInJlYWRfaW50X2lucHV0X2J5X2lkIiwic2V0X3RkX2J5X2lkIiwidGQiLCJmaWVsZF9pZF9ieV9mb3Vybml0dXJlIiwiZiIsInAiLCJmaWVsZF9pZF9hbmRfcGllY2VfYnlfZm91cm5pdHUiLCJhbGxfbmFtZXMiLCJjb21wdXRlIiwicyIsImZpZWxkX2lkIiwicXRlIiwidG90YWwiLCJhIiwiYiIsInNob3J0JDAiLCJkZXRhaWwiLCJxIiwiZGVzY3IiLCJyZXN1bWUiLCJyZXNldF9mb3JtIiwiZG9pdCJdLCJzb3VyY2VzIjpbIiIsIi9idWlsdGluLytpbnQ2NC5qcyIsIi9idWlsdGluLyttbEJ5dGVzLmpzIiwiL2J1aWx0aW4vK2ZhaWwuanMiLCIvYnVpbHRpbi8rc3RkbGliLmpzIiwiL2J1aWx0aW4vK2Zvcm1hdC5qcyIsIi9idWlsdGluLytpZWVlXzc1NC5qcyIsIi9idWlsdGluLytmc19ub2RlLmpzIiwiL2J1aWx0aW4vK2ZzLmpzIiwiL2J1aWx0aW4vK3VuaXguanMiLCIvYnVpbHRpbi8rc3lzLmpzIiwiL2J1aWx0aW4vK2ZzX2Zha2UuanMiLCIvYnVpbHRpbi8rbmF0LmpzIiwiL2J1aWx0aW4vK2dyYXBoaWNzLmpzIiwiL2J1aWx0aW4vK21hcnNoYWwuanMiLCIvYnVpbHRpbi8raW8uanMiLCIvYnVpbHRpbi8rZ2MuanMiLCIvYnVpbHRpbi8rYmlnYXJyYXkuanMiLCIvYnVpbHRpbi8ranNsaWIuanMiLCIvYnVpbHRpbi8rcGFyc2luZy5qcyIsIi9idWlsdGluLytpbnRzLmpzIiwiL2J1aWx0aW4vK2hhc2guanMiLCIvYnVpbHRpbi8rY29tcGFyZS5qcyIsIi9idWlsdGluLytqc2xpYl9qc19vZl9vY2FtbC5qcyIsIi9idWlsdGluLytvYmouanMiLCIvYnVpbHRpbi8rYmlnc3RyaW5nLmpzIiwiL2J1aWx0aW4vK2JhY2t0cmFjZS5qcyIsIi9idWlsdGluLytsZXhpbmcuanMiLCIvYnVpbHRpbi8rYXJyYXkuanMiLCIvYnVpbHRpbi8rd2Vhay5qcyIsIi9idWlsdGluLyttZDUuanMiLCIvYnVpbHRpbi8rc3RyLmpzIiwiL2J1aWx0aW4vK2JpZ3N0cmluZy1jc3RydWN0LmpzIiwiL2hvbWUvbWF0dC8ub3BhbS9kZWZhdWx0L2xpYi9vY2FtbC91Y2hhci5tbCIsIi9ob21lL21hdHQvLm9wYW0vZGVmYXVsdC9saWIvb2NhbWwvaW50NjQubWwiLCIvaG9tZS9tYXR0Ly5vcGFtL2RlZmF1bHQvbGliL29jYW1sL2xleGluZy5tbCIsIi9ob21lL21hdHQvLm9wYW0vZGVmYXVsdC9saWIvb2NhbWwvY2FtbGludGVybmFsRm9ybWF0Lm1sIiwiL2hvbWUvbWF0dC8ub3BhbS9kZWZhdWx0L2xpYi9vY2FtbC9wcmludGV4Yy5tbCIsIi9ob21lL21hdHQvLm9wYW0vZGVmYXVsdC9saWIvb2NhbWwvZmlsZW5hbWUubWwiLCIvaG9tZS9tYXR0Ly5vcGFtL2RlZmF1bHQvbGliL29jYW1sL2NvbXBsZXgubWwiLCIvaG9tZS9tYXR0Ly5vcGFtL2RlZmF1bHQvbGliL29jYW1sL2NhbWxpbnRlcm5hbEZvcm1hdEJhc2ljcy5tbCIsIi9ob21lL21hdHQvLm9wYW0vZGVmYXVsdC9saWIvb2NhbWwvY2FtbGludGVybmFsQXRvbWljLm1sIiwiL2hvbWUvbWF0dC8ub3BhbS9kZWZhdWx0L2xpYi9vY2FtbC9zdGRsaWIubWwiLCIvaG9tZS9tYXR0Ly5vcGFtL2RlZmF1bHQvbGliL29jYW1sL3BlcnZhc2l2ZXMubWwiLCIvaG9tZS9tYXR0Ly5vcGFtL2RlZmF1bHQvbGliL29jYW1sL2Zsb2F0Lm1sIiwiL2hvbWUvbWF0dC8ub3BhbS9kZWZhdWx0L2xpYi9vY2FtbC9yYW5kb20ubWwiLCIvaG9tZS9tYXR0Ly5vcGFtL2RlZmF1bHQvbGliL29jYW1sL2xpc3QubWwiLCIvaG9tZS9tYXR0Ly5vcGFtL2RlZmF1bHQvbGliL29jYW1sL2luX2NoYW5uZWwubWwiLCIvaG9tZS9tYXR0Ly5vcGFtL2RlZmF1bHQvbGliL29jYW1sL291dF9jaGFubmVsLm1sIiwiL2hvbWUvbWF0dC8ub3BhbS9kZWZhdWx0L2xpYi9vY2FtbC9laXRoZXIubWwiLCIvaG9tZS9tYXR0Ly5vcGFtL2RlZmF1bHQvbGliL29jYW1sL25hdGl2ZWludC5tbCIsIi9ob21lL21hdHQvLm9wYW0vZGVmYXVsdC9saWIvb2NhbWwvb2JqLm1sIiwiL2hvbWUvbWF0dC8ub3BhbS9kZWZhdWx0L2xpYi9vY2FtbC9jYW1saW50ZXJuYWxMYXp5Lm1sIiwiL2hvbWUvbWF0dC8ub3BhbS9kZWZhdWx0L2xpYi9vY2FtbC9sYXp5Lm1sIiwiL2hvbWUvbWF0dC8ub3BhbS9kZWZhdWx0L2xpYi9vY2FtbC9zZXEubWwiLCIvaG9tZS9tYXR0Ly5vcGFtL2RlZmF1bHQvbGliL29jYW1sL29wdGlvbi5tbCIsIi9ob21lL21hdHQvLm9wYW0vZGVmYXVsdC9saWIvb2NhbWwvcmVzdWx0Lm1sIiwiL2hvbWUvbWF0dC8ub3BhbS9kZWZhdWx0L2xpYi9vY2FtbC9ib29sLm1sIiwiL2hvbWUvbWF0dC8ub3BhbS9kZWZhdWx0L2xpYi9vY2FtbC9jaGFyLm1sIiwiL2hvbWUvbWF0dC8ub3BhbS9kZWZhdWx0L2xpYi9vY2FtbC9ieXRlcy5tbCIsIi9ob21lL21hdHQvLm9wYW0vZGVmYXVsdC9saWIvb2NhbWwvaW50Lm1sIiwiL2hvbWUvbWF0dC8ub3BhbS9kZWZhdWx0L2xpYi9vY2FtbC9zdHJpbmcubWwiLCIvaG9tZS9tYXR0Ly5vcGFtL2RlZmF1bHQvbGliL29jYW1sL3VuaXQubWwiLCIvaG9tZS9tYXR0Ly5vcGFtL2RlZmF1bHQvbGliL29jYW1sL21hcnNoYWwubWwiLCIvaG9tZS9tYXR0Ly5vcGFtL2RlZmF1bHQvbGliL29jYW1sL2FycmF5Lm1sIiwiL2hvbWUvbWF0dC8ub3BhbS9kZWZhdWx0L2xpYi9vY2FtbC9pbnQzMi5tbCIsIi9ob21lL21hdHQvLm9wYW0vZGVmYXVsdC9saWIvb2NhbWwvcGFyc2luZy5tbCIsIi9ob21lL21hdHQvLm9wYW0vZGVmYXVsdC9saWIvb2NhbWwvc2V0Lm1sIiwiL2hvbWUvbWF0dC8ub3BhbS9kZWZhdWx0L2xpYi9vY2FtbC9tYXAubWwiLCIvaG9tZS9tYXR0Ly5vcGFtL2RlZmF1bHQvbGliL29jYW1sL3N0YWNrLm1sIiwiL2hvbWUvbWF0dC8ub3BhbS9kZWZhdWx0L2xpYi9vY2FtbC9xdWV1ZS5tbCIsIi9ob21lL21hdHQvLm9wYW0vZGVmYXVsdC9saWIvb2NhbWwvc3RyZWFtLm1sIiwiL2hvbWUvbWF0dC8ub3BhbS9kZWZhdWx0L2xpYi9vY2FtbC9idWZmZXIubWwiLCIvaG9tZS9tYXR0Ly5vcGFtL2RlZmF1bHQvbGliL29jYW1sL3ByaW50Zi5tbCIsIi9ob21lL21hdHQvLm9wYW0vZGVmYXVsdC9saWIvb2NhbWwvYXJnLm1sIiwiL2hvbWUvbWF0dC8ub3BhbS9kZWZhdWx0L2xpYi9vY2FtbC9mdW4ubWwiLCIvaG9tZS9tYXR0Ly5vcGFtL2RlZmF1bHQvbGliL29jYW1sL2djLm1sIiwiL2hvbWUvbWF0dC8ub3BhbS9kZWZhdWx0L2xpYi9vY2FtbC9kaWdlc3QubWwiLCIvaG9tZS9tYXR0Ly5vcGFtL2RlZmF1bHQvbGliL29jYW1sL2hhc2h0YmwubWwiLCIvaG9tZS9tYXR0Ly5vcGFtL2RlZmF1bHQvbGliL29jYW1sL3dlYWsubWwiLCIvaG9tZS9tYXR0Ly5vcGFtL2RlZmF1bHQvbGliL29jYW1sL2Zvcm1hdC5tbCIsIi9ob21lL21hdHQvLm9wYW0vZGVmYXVsdC9saWIvb2NhbWwvc2NhbmYubWwiLCIvaG9tZS9tYXR0Ly5vcGFtL2RlZmF1bHQvbGliL29jYW1sL2NhbGxiYWNrLm1sIiwiL2hvbWUvbWF0dC8ub3BhbS9kZWZhdWx0L2xpYi9vY2FtbC9jYW1saW50ZXJuYWxPTy5tbCIsIi9ob21lL21hdHQvLm9wYW0vZGVmYXVsdC9saWIvb2NhbWwvY2FtbGludGVybmFsTW9kLm1sIiwiL2hvbWUvbWF0dC8ub3BhbS9kZWZhdWx0L2xpYi9vY2FtbC9nZW5sZXgubWwiLCIvaG9tZS9tYXR0Ly5vcGFtL2RlZmF1bHQvbGliL29jYW1sL2VwaGVtZXJvbi5tbCIsIi9ob21lL21hdHQvLm9wYW0vZGVmYXVsdC9saWIvb2NhbWwvYmlnYXJyYXkubWwiLCIvd29ya3NwYWNlX3Jvb3QvaW52ZW50YWlyZV9saW5nZS9pbnZlbnRhaXJlX2xpbmdlLm1sIiwiIiwiIiwiL3dvcmtzcGFjZV9yb290L21lY2hhbmljL21lY2hhbmljLm1sIiwiL2hvbWUvbWF0dC8ub3BhbS9kZWZhdWx0L2xpYi9vY2FtbC9zdGRfZXhpdC5tbCJdLCJtYXBwaW5ncyI6Ijs7Q0FDQyxTQUFVQTtXQUNGQzs7OztLQUNMQztPQUNFO1FBQ0M7VUFBc0JGLDhDQUVoQkc7UUFDSEM7SUFFUixTQUFTRDtNQUNQLElBQUlFLE9BQVNILFFBQVFJO01BQ3JCRCxvQkFBb0JBO2FBQ2JMLG9CQUNULENBYkQ7R0FjQ0E7OztJQzJORixTQUFTTyxtQkFBbUJDLEdBQUssU0FBUSxVQUFZO0lDekxyRCxTQUFTQyxnQkFBZ0JDLEVBQUdDO01BQzFCLEdBQUdELE9BQVE7TUFDWCxHQUFJQyxTQUFVLE9BQVEsU0FBU0Q7TUFDL0IsSUFBTSxLQUFRO01BQ2Q7T0FBUSxDQUNOLEdBQUlBLE1BQU9F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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0tDa0JLQztLQUNBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztLQ3dCQUM7S0FDQUM7S0FDQUM7S0FJQUM7S0FDQUM7Ozs7S0N6QkFDO0tBbUhBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0tDbzlFTUM7S0FRUUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0tDbGxGZEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7S0NzRUVDO0tBQ0FDO0tBQ0FDO0tBQ0FDOzs7S0EvRVlDO0tBbUhaQztLQUNBQztLQUNBQztLQUNBQzs7O0tBbUlBQztLQUNBQztLQUNBQztLQUNBQzs7O0tDeFBGQztLQUNBQztLQUNBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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Q0FZNkI7SUEzSjFCLFNLeFFUQyxjTDRhZWY7TUFBSztRQUFLLCtCQUFWQSxJQUFnQzsyQkFBRztJQXBLekMsU0M3SlRnQixXRHVVV3JDLEdBQUksMkJNemNmTixPTnljV00sRUFBd0I7SUExSzFCLFNDNUpUc0MsYUR1VWFoRixHQUFJLHFCTTFjakJvQyxPTjBjYXBDLEVBQTBCO0lBM0s5QixTQzNKVGlGLFlEdVVZakYsR0FBSSxvQk0zY2hCb0MsT04yY1lwQyxFQUF5QjtJQTVLNUIsU0MxSlRrRixVRHVVVTVKO01BQXlCLHFCTTVjbkM4RyxPTjRjbUMsNEJBQXpCOUcsR0FBMEM7SUE3SzNDLFNDekpUNkosWUR1VVkzRixHQUF5QixxQk03Y3JDNEMsT042Y3FDLFVBQXpCNUMsR0FBNEM7SUE5Sy9DLFNDeEpUNEYsY0R1VWNwRjtNQUNoQixjTS9jRW9DLE9OOGNjcEM7TUFDUSxvQk0vY3RCb0M7TU4rYytDLHFCTS9jL0NBLE9OK2MyRDtJQWhMbEQsU0N2SlRpRDtNRHdVbUIsb0JNaGRuQmpELFdOZ2Q0QyxxQk1oZDVDQSxPTmdkd0Q7SUFqTC9DLFNDdEpUa0QsV0QyVVc1QyxHQUFJLDJCTW5kZkwsT05tZFdLLEVBQXdCO0lBckwxQixTQ3JKVDZDLGFEMlVhdkYsR0FBSSxxQk1wZGpCcUMsT05vZGFyQyxFQUEwQjtJQXRMOUIsU0NwSlR3RixZRDJVWXhGLEdBQUksb0JNcmRoQnFDLE9OcWRZckMsRUFBeUI7SUF2TDVCLFNDbkpUeUYsVUQyVVVuSztNQUF5QixxQk10ZG5DK0csT05zZG1DLDRCQUF6Qi9HLEdBQTBDO0lBeEwzQyxTQ2xKVG9LLFlEMlVZbEcsR0FBeUIscUJNdmRyQzZDLE9OdWRxQyxVQUF6QjdDLEdBQTRDO0lBekwvQyxTQ2pKVG1HLGNEMlVjM0Y7TUFDaEIsY016ZEVxQyxPTndkY3JDO01BQ1Esb0JNemR0QnFDO01OeWQrQyxxQk16ZC9DQSxPTnlkMkQ7SUEzTGxELFNDaEpUdUQ7TUQ0VW1CLG9CTTFkbkJ2RCxXTjBkNEMscUJNMWQ1Q0EsT04wZHdEO0lBNUwvQyxTQy9JVHdELGlCRCtVZSxjTS9kZnpELFFOK2RlLGtCSy9kZkQsTUwrZDZDO0lBaE1wQyxTQzlJVDJELGdCRCtVd0MsMEJBQWIsYUFBYTtJQWpNL0IsU0M3SVRDLG9CRCtVbUMsc0NBQWE7SUFsTXZDLFNDNUlUQyxrQkQrVTRDLDRCQUFiLGFBQWE7SUFuTW5DLFNDM0lUQyxzQkQrVXVDLGtDQUFhO0lBcE0zQyxTQ2hGVEMsd0JYNU9MLElVMGhCcUNoSTtJQTlOdkIsU0M1RVRpSTtNRGtUTTtPQUZzQ0M7T0FBTnJKO09BQWhCc0o7T0FBTnZKO09BRVYsU0FGZ0J1SixLQUVULFVBRitCRDtNQUN0QyxxQkFEVXRKLEtBQXNCQztJQVF0QixJQUFoQnVKLGlCTWpmQXpEO0lOaWZnQixTQ3RUaEIwRCxRRHdUWS9HO01BQ2Q7UUFFbUI7O1NBQ0osU0FOYjhHO1NBTWE7bUJBRFhFLGFBQ0FDO3FCQUNBRTtjQUNDLG1CQUhESCxrQkFHcUQsV0FOM0NoSDtjQU0rQyxrQkFGekRpSCxXQUdTO21CQUZURTtTQURXLG9CQURYSCxhQUNBQztTQUtVLHdCQVhaSCxjQU1FRyxTQUNBRTtTQUlVLFNBQVZDO1FBQVU7b0JBQ2U7SUFaWCxTQ3BUaEJDLGtCRGtVZ0Isa0JBZGhCUCxtQkFjeUQ7SUFkekMsU0N2VGhCUSxLRHVVS0M7TUFDUCxjQUNBLDZCQUZPQSxRQUVTO0lBRVY7c0RDeFVKRjtJRDZVb0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0M5aUJwRDVHO09BQ0FGOzs7Ozs7Ozs7Ozs7OztPQVNBRztPQUNBRztPQTZCQUM7T0V5Q1FRO09GdkNSQztPQUlBUjtPQ2xDQUM7T0FDQUM7T0FDQUM7T0FNQUM7T0FDQUM7T0FDQUM7O09EbUdBTztPQUVBQztPQUVBRztPQURBRDtPQUVBRTtPQUVBQztPQ3JHQUk7T0FEQUM7T0VRQUM7T0N4QkFHO09DQUFDO09BQ0FDO09MaUlBMEM7T0FDQUM7T0FDQUM7T0FDQUM7T0FDQUM7T0FDQUM7T0FDQUM7T0FDQUM7T0FDQUM7T0FDQUM7T0FDQUM7T0FDQUM7T0FDQUM7T0FDQUM7T0FDQUM7T0FFQUU7T0FEQUQ7T0FHQUc7T0FEQUQ7T0toSkFyRDtPQURBQztPQUVBTjtPQXFCQTBGO09BQ0FuRjtPQUNBa0Y7T0FFQTdFO09BQ0FGO09BQ0FHO09BQ0FHO09BSkF3RTtPTDhJQUQ7T0FDQXRFO09BQ0FxRTtPQUNBRDtPQUNBRDtPS3ZKQWpFO09BQ0FDO09BU0ErRDtPRC9CQTdEO09BREFDO09BRUFGO09Ka0xBNkQ7T0FDQWpEO09JOUlBVDtPSmdKQU87T0FDQUM7T0FDQWlEO09BQ0FEO09BQ0FEO09BQ0FEO09BQ0FEO09BQ0FEO09JektBRDtPQUNBbkM7T0F5SEFrQzs7T0orREFkO09BSUFDO09BQ0FXO09BQ0FQO09BQ0E1RTtPRHNMSXFDO09DckxKNkM7SUQ2VW9EOzs7OztPQzlpQnBENUc7T0FDQUY7O09BU0FHO09BQ0FHO09BNkJBQztPRXlDUVE7T0Z2Q1JDO09BSUFSO09DbENBQztPQUNBQztPQUNBQztPQU1BQztPQUNBQztPQUNBQzs7T0RtR0FPO09BRUFDO09BQ0FFO09BQ0FDO09BQ0FDO09BRUFDO09DckdBSTtPQURBQztPRVFBQztPQ3hCQUc7T0NBQUM7T0FDQUM7T0xpSUEwQztPQUNBQztPQUNBQztPQUNBQztPQUNBQztPQUNBQztPQUNBQztPQUNBQztPQUNBQztPQUNBQztPQUNBQztPQUNBQztPQUNBQztPQUNBQztPQUNBQztPQUNBQztPQUNBQztPQUNBQztPQUNBQztPS2pKQXREO09BREFDO09BRUFOO09BcUJBMEY7T0FDQW5GO09BQ0FrRjtPQUVBN0U7T0FDQUY7T0FDQUc7T0FDQUc7T0FKQXdFO09MOElBRDtPQUNBdEU7T0FDQXFFO09BQ0FEO09BQ0FEO09LdkpBakU7T0FDQUM7T0FTQStEO09EL0JBN0Q7T0FEQUM7T0FFQUY7T0prTEE2RDtPQUNBakQ7T0k5SUFUO09KZ0pBTztPQUNBQztPQUNBaUQ7T0FDQUQ7T0FDQUQ7T0FDQUQ7T0FDQUQ7T0FDQUQ7T0l6S0FEO09BQ0FuQztPQXlIQWtDO09KK0RBZDtPQUlBQztPQUNBVztPQUNBUDtPQUNBNUU7T0FDQWtGO0lENlVvRDthTy9pQnBEb0IsS0FBS3ZJLEdBQUksVUFBSkEsRUFBVTthQUNmd0ksTUFBTXhJLEdBQUksVUFBSkEsRUFBVzthQUVqQnlJLGVBQVUseUJBRUk7YUFFZEMsZ0JBQVcseUJBRUU7YUFFYkM7TUFBWSxtQkFDSixJQUFMM0ksV0FBSyxVQUFMQSxHQUNNLFFBQUk7YUFFYjRJO01BQWEsa0JBQ0wsU0FDQyxJQUFMNUksV0FBSyxVQUFMQSxFQUFXO2FBRWY2SSxTQUFTL0ksRUFFWGdKO01qQnZDSCxTaUJ1Q0dBLE1BRFUsSUFBTDlJLEVBQ0w4SSxLQURlLHFCQURKaEosRUFDTkUsSUFDVyxPQUFoQjhJO2FBRUVDLFVBQVVqSixFQUNaZ0o7TWpCMUNILFNpQjBDR0EsS0FBZSxPQUFmQSxFQUNXLElBQUw5SSxFQUROOEksS0FDaUIscUJBRkxoSixFQUVORTthQUVKZ0osSUFBS1QsS0FBTUM7TWpCN0NoQixtQmlCOENhLElBQUx4SSxXQUFVLHFCQURSdUksS0FDRnZJO01BQ00sSUFBTGlKO01BQVcscUJBRkpULE1BRVBTO2FBRUpDLEtBQU1YLEtBQU1DO01qQmpEakIsbUJpQmtEYSxJQUFMeEksV0FBSyxrQkFERnVJLEtBQ0h2STtNQUNNLElBQUxpSjtNQUFLLGtCQUZHVCxNQUVSUzthQU1KRSxNQUFPWixLQUFNQyxNQUFNWSxHQUFHQztNQUFLLFNBQVJEOztpQkFBR0MsT0FDSixJQUFOQyxHQURVRCxNQUNKLGtCQURYZCxVQUNLZTs7aUJBRE9GO2lCQUFHQyxPQUVGLElBQU5FLEtBRlFGLE1BRUYsa0JBRlBiLFdBRUNlO01BQ3FCLFFBQUs7YUFFeENDLFFBQVNqQixLQUFNQyxNQUFNWSxHQUFHQztNQUFLLFNBQVJEOztpQkFBR0MsT0FDTixJQUFOQyxHQURZRCxNQUNOLGtCQURUZCxVQUNHZTtRQUVLO2VBSElGO2VBQUdDLE1BSVA7TUFGRyxJQUFORSxLQUZVRjtNQUVKLGtCQUZMYixXQUVEZSxLQUVJOzs7O09BaERsQmhCO09BQ0FDO09BRUFDO09BSUFDO09BSUFDO09BSUFDO09BSUFDO09BSUFFO09BSUFDO09BSUFFOzs7T0FRQUM7T0FLQUs7O0lqQjlETDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T2tCK0NLQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJbEIvQ0w7YW1CMEJzQkMsU0FBU3JHLEdBQUksbUJBQUpBLG1CQUFrQjthQVUzQnNHLGFBQWFsSixFQUFFN0UsR0FBSSxzQkFBTjZFLEVBQUU3RSxFQUF5QzthQUN4RGdPLGlCQUFpQm5KLEVBQUU3RSxFQUFFb0UsR0FDeEMsc0JBRG9DUyxFQUFFN0UsRUFBRW9FLEVBQ0Q7O0tBV3JDNko7S0FDQUM7S0FFQUM7S0FDQUM7S0FDQUM7S0FDQUM7S0FDQUM7S0FFQUM7S0FFQUM7S0FDQUM7S0FDQUM7S0FDQUM7S0FDQUM7S0FJQUM7S0FDQUM7S0FDQUM7YUF3QkVDLEtBQU1DO01BQ0EsZ0JBREFBO1FBRUk7eUNBRkpBO1NBVEcsTUFQSUQ7U0FZa0MsVUFabENBO1FBWWtDLFVBVjdDOUssTUFPQWdMO2tDQVN5QjthQU0zQkMsT0FDRXZLO01uQnZHVDtTbUJ5R1UsU0FGREEsTUFFaUIsYUFGakJBO1lBQ0F3SyxLQURBeEs7TVh5YUEsa0JXeGFBd0ssS0FEQXhLOztNQU1vQixHQUFuQixTQUxEd0ssU0FLb0IsYUFMcEJBO1lBSUFsSSxLQUpBa0k7d0JBSUFsSSxLQUVHO01BRUYsb0JBSkRBO2VBSkFrSTtlQVNHLDBDQUF1QzthQUUzQmxJLEtBQU1rSSxNQUNwQixPQURvQkEsT0FDQzthQUVQQyxHQUFJRCxNQUNsQixPQURrQkEsT0FDRzs7OEJBakJ4QkQsT0FhaUJqSSxLQUdBbUk7S0FJbkJDO0tBQ0FDO0tBQ0FDO0tBU0VDO2FBR0FDLE9BQU9ySjtNQUNULGNBRFNBLE1BQ1QsVUFEU0EsS0FIUG9KO01BS0E7TUFDRixnQ0FIU3BKLEVBR0Q7YUFFTnNKLE9BQU8vSyxHQUFJLE9BQUpBLG9CQUFvQzthQUUzQ2dMLHdCQUF3QjNDLEVBQUU0QyxFQUFFQztNQUM5QixjQUQ0QkQsTUFDNUIsVUFENEJBLElBQ04sT0FESTVDLFlBRXhCOzhCQUY0QjZDLFNBRWI7YUFHZkMsUUFBUTlDLEVBQUU0QztNQUNaLHdCQURVNUMsRUFBRTRDO01BRVosaUNBRlU1QyxFQUFFNEMsRUFFRDthQUdURyxhQUFhL0MsRUFBRTRDO01BQ2pCLHdCQURlNUMsRUFBRTRDO01BRWpCLHNDQUZlNUMsRUFBRTRDLEVBRUQ7YUFHZEksUUFBUWhELEVBQUU0QyxFQUFFakw7TUFDZCx3QkFEVXFJLEVBQUU0QztNQUVaLHlCQUZVNUMsRUFBRTRDLEVBQUVqTCxFQUVEO2FBR1hzTCxVQUFVakQsRUFBRTRDO01BQ2Qsd0JBRFk1QyxFQUFFNEM7TUFFZCwyQkFGWTVDLEVBQUU0QyxFQUVEO2FBR1hNLFVBQVVsRCxFQUFFNEM7TUFDZCx3QkFEWTVDLEVBQUU0QztNQUVkLG1DQUZZNUMsRUFBRTRDLEVBRUQ7YUFLWE8sU0FBUzdDLEdBQUc4QyxHQUFHN0MsR0FBRzhDLEdBQUdqSztNQUVGOzs7UUFGRUE7Ozs7UUFBVGdLOzs7VUFDYSxPQURoQjlDLE1BQVlsSCxTQUFUZ0s7Ozs7UUFBTUM7OztVQUVDLE9BRko5QyxNQUFNbkgsU0FBSGlLO1FBSWY7b0JBSmtCaks7U0FJbEIsVUFBZSwyQkFKVGtILEdBQUc4QyxHQUFHN0MsR0FBRzhDLEdBQUdqSztRQUltQjtNQURyQyw4Q0FDcUM7Ozs7OztPQTNDeENxSjtPQUtBQztPQU9BSTtPQUtBQztPQUtBQztPQUtBQztPQUtBQztPQU9BQzs7OztzQm5CL0tQOzs7T21CcUlPWDs7O09BM0dlNUI7T0FVQUM7T0FDQUM7T0FZakJDO09BQ0FDO09BRUFDO09BQ0FDO09BQ0FDO09BQ0FDO09BQ0FDO09BRUFDO09BRUFDO09BQ0FDO09BQ0FDO09BQ0FDO09BQ0FDOztPQUlBQztPQUNBQztPQUNBQztVQXdCRUM7O09BNEJGTTtPQUNBQztPQUNBQzs7OzthQ3RHQWUsdUJBQXNDLGVBQWU7YUFLckRDLGlCQUFrQkM7TUFDRyxJQUFuQkMsUUFEZ0JEO01BRXBCLFNBUEVGO01BT0Y7UUFFZSxJQUFUSSxPQUFTLFdBSFhEO1FBSUYsc0JBTGtCRCxJQUlkRTtRQUlKLE9BSklBO1lBR0QxRDttQ0FDSCx5QkFBb0QsTUFEakRBLENBQ3dELEVBQTNELE1BREdBLEVBRUk7YUFJUDJELHFCQUFzQkg7TUFDRCxJQUFuQkMsUUFEb0JEO01BRXhCLFNBcEJFRjtNQW1CcUIsSUFFbkJJLE9BQVMsV0FGVEQ7TUFHSixzQkFKd0JELElBR3BCRTtNQUNKLE9BRElBLE1BRUU7YUFPSkUsTUFRRUM7TUFFSixJQUFJQyxFQUFKLGFBRklEO01BRUosT0FBSUMsVUFGQUQsT0FFQUMsVUFGQUQsSUFLQyxpQkFMREEsSUFLcUI7YUNOdkJFLFVEU1dGO01BRWIsSUFBSUMsRUFBSixhQUZhRDtNQUViLE9BQUlDLFVBRlNELE9BRVRDLFVBRlNELElBS1IscUJBTFFBLElBS2dCOzs7bUJBOUMzQk4saUJBYUFJLHFCQVlBQyxNQ09BRzs7YUN5VkVDLFFEdlZRaE4sR0FDSixJQUFKVyxFQUFJLHNCQUNSLE9BRllYLEVBRVosT0FESVcsQ0FFZ0I7YUFFbEJzTSxTQUFVL007TUFDSixJQUFKNE0sRUFBSSxhQURJNU07U0FDUjRNLG9DQUlELE9BTFM1TTtNQUUwRCxzQ0FGMURBLEVBTVQ7YUFHRGdOLE9BQVE5SyxHQUFjLG9CQUFkQSxjQUFrRDthQVMxRCtLLE1BQUluTixFQUFFVztNQUNSOzs7bUNBRFFBO3FERHpETjRMLGlCQ3lETTVMO2dCQUNBLGtCQURGWCxTQUNZO2FBRWhCb04sUUFBUXBOLEVBQUVXO01BQ1QsVUFEU0E7UUFFUDsyQkFGT0E7U0FFUCxrQkFGT0Esa0JENURWNEwsaUJDNERVNUw7UUFFTywyQkFGVFg7TUFHTDs7O21DQUhPVztxREQ1RFY0TCxpQkM0RFU1TDtnQkFHQyxrQkFISFgsU0FHYTs7Ozs7T0FOckJtTjtPQVRBRDtPQVRBRDtPQXFCQUc7T0M2VEVKO09EelZGRDtPQ3lWRUM7T0RsVkZDO09BU0FDOzthQ25EQUcsYUFBVyxRQUFHO2FBRWRDLFNBQU8zTSxTQUFPLFVBQVBBLEVBRlAwTSxNQUU2QjthQUU3QkUsS0FBSzVNLEVBQUU2TSxZQUFVLFVBQVo3TSxFQUFFNk0sS0FBd0I7YUFFM0JDLFNBQU9DLEtBQUtDO01BQ1oscUJBRE9EO01BQ1A7WUFFS0YsY0FBSDdNO1FBQXFCLFVBQXJCQSxpQnRCakNYLE9zQjhCUzhNLFNBR0tELEtBSE9HO01BRVQsa0JBRlNBLE9BRzRCO2FBRXhDQyxNQUFJNU4sRUFBRTZOO01BQWUscUJBQWZBO01BQWU7UUFFSTtTQUFwQkw7U0FBSDdNO1NBQXVCLG9CdEJyQ2xDLE9zQm1DU2lOLE1BQUk1TixFQUVDd047UUFBZSxxQkFGaEJ4TixFQUVGVztNQURDLFFBQ2lDO2FBRXBDbU4sV0FBVzlOLEVBQUU2TjtNdEJ2Q3RCLElzQnVDc0JFO01BQVM7UUFBTSxxQkFBZkE7UUFBZTtVQUd4QixJQURDUCxjQUFIN00sV0FDRSxtQkFIT1gsRUFFVFc7VUFDRTtZQUVRLElBQUxDO1lBQWMsVUFBZEEsaUJ0QjVDaEIsT3NCdUNTa04sV0FBVzlOLEVBRU53TjtVQUNELElBSFNPLE1BRVJQOztRQURGLFNBSW9DO2FBRXZDUSxPQUFPaE8sRUFBRTZOO010QjlDbEIsSXNCOENrQkU7TUFBUztRQUFNLHFCQUFmQTtRQUFlO2NBRW5CUCxjQUFIN007VUFDRCxjQUhNWCxFQUVMVztXQUVVLFVBRlZBLGlCdEJoRFgsT3NCOENTcU4sT0FBT2hPLEVBRUZ3TjtjQUZJTyxNQUVKUDs7UUFERixTQUlnQjthQUVuQlMsT0FBT0o7TUFBZSxxQkFBZkE7TUFBZTtZQUVqQkwsY0FBSDdNO1FBQ0ksZ0JBREpBLGlCdEJ2RFgsT3NCcURTc04sT0FFS1Q7TUFERixRQUVtQjthQUV0QlUsU0FBU2xPLEVBQUU2TjtNQUFlLHFCQUFmQTtNQUFlO1FBR2pCO1NBREpMO1NBQUg3TTs7U0FDTyxvQnRCN0RsQixPc0IwRFN1TixTQUFTbE8sRUFFSndOO1FBQ0YsMkJBSE14TixFQUVQVztNQURDLFFBRTBCO2FBSTdCd04sVUFBVW5PLEVBQUVvTyxJQUFJUDtVQUFKUSxVQUFJTjtNQUN0QjtRQUFNLHFCQURnQkE7UUFDaEI7VUFHVTtXQURIUDtXQUFIN007V0FDTSxpQkFKQVgsRUFBRXFPLE1BR1IxTjtXQUhRME47V0FBSU4sTUFHVFA7O1FBREYsT0FGT2EsTUFLUTthQUVwQi9LLEtBQUt0RCxFQUFFNk47TXRCeEVoQixJc0J3RWdCRTtNQUNiO1FBQU0scUJBRE9BO1FBQ1A7Y0FFT1AsY0FBSDdNO1VBQ0osV0FKS1gsRUFHRFc7Y0FIR29OLE1BR0FQOztRQURGLFNBR007YUFFWGUsT0FBT3ZPLEVBQUV3TztNQUNULHFCQURPeE8sRUFBRXdPO01BQ1Q7NkJBRUtDLGVBQUg5TjtRQUFtQixVQUFuQkEsaUJ0QmxGWCxPc0IrRVM0TixPQUFPdk8sRUFHRnlPO01BREQsUUFDNkI7YUFFckNDLFNBQVNDLElBQ0wscUJBREtBLE1BQ0wsZ0JBSUc7YUFFUEMsT0FBT0Q7TUFDSCxxQkFER0E7TUFDSCxjQUNLRSxjQUFIbE8sMEJBQUdrTztNQUdQLFFBQUk7YUFXR0MsU0FBT0M7VUFQRDdKLE9BQUt5SixHQU9KSTtNQU5sQjtRQUFNLHFCQURnQko7UUFDaEI7VUFJRix5QkFMYXpKLHlCQUFLeUo7UUFHbEIsT0FIYXpKLEtBUUY7YUFVSjhKLE1BQU1oUCxFQUFFK087VUFSRGpULElBQUU2UyxHQVFESTtNQVBuQjtRQUFNLHFCQURjSjtRQUNkO2NBR0tFLGNBQUhsTztVQUNKLFdBR2FYLEVBUkNsRSxFQUlWNkU7VUFDSixRQUxjN0UsZ0JBQUU2UyxHQUlURTs7UUFEUCxTQU1ZO2FBVUxJLFdBQVdqUCxFQUFFa1AsT0FBS0g7VUFSTjdKLEtBUUNnSyxPQVJJcFQsSUFBRTZTLEdBUURJO01BUDdCO1FBQU0scUJBRHdCSjtRQUN4QjtVQUlTO1dBREpFO1dBQUhsTztXQUNPLGtCQUdPWCxFQVJDa0YsS0FBS3BKLEVBSXBCNkU7V0FDTyxJQUxhN0U7V0FBTG9KO1dBQUtwSjtXQUFFNlMsR0FJbkJFOztRQURQLE9BSG1CM0osS0FTRzthQUVwQmlLLFFBQVFDLEVBQUVUO010QnBJbkIsSXNCb0ltQkU7TUFDaEI7UUFBTSxxQkFEVUE7UUFDVjtVQUlGLElBRE9FLGNBQUhwTyxXQUNKLGdCQUxVeU8sRUFJTnpPO1VBQ0osYUFMWWtPLEtBSUxFO1VBRFA7aUJBRW1CO2FBRWpCTSxPQUFPRCxFQUFFVDtNdEIzSWxCLElzQjJJa0JFO01BQ2Y7UUFBTSxxQkFEU0E7UUFDVDtVQUlGLElBRE9FLGNBQUhwTyxXQUNKLGdCQUxTeU8sRUFJTHpPO1VBQ0osUUFGQTtVQUVBLElBTFdrTyxLQUlKRTs7UUFEUCxTQUVrQjthQUVoQk8sS0FBS0YsRUFBRVQ7TXRCbEpoQixJc0JrSmdCRTtNQUNiO1FBQU0scUJBRE9BO1FBQ1A7Y0FHS0UsY0FBSHBPO1VBQ0QsY0FMSXlPLEVBSUh6TyxHQUNRLFVBRFJBO2NBSktrTyxLQUlGRTs7UUFEUCxTQUVpQzthQUUvQlEsU0FBU3ZQLEVBQUUyTztNdEJ6SnBCLElzQnlKb0JFO01BQ2pCO1FBQU0scUJBRFdBO1FBQ1g7VUFJSSxJQURDRSxjQUFIcE8sV0FDRSxrQkFMS1gsRUFJUFc7VUFDRSxHQUdKK0wsT0FDRSxPQURGQTtVQUhJLElBTE9tQyxLQUlORTs7UUFEUCxTQU1VO2FBU1JTLE1BQU14UCxFQUFFMk8sR0FBR2M7VUFBSFosUUFBR2E7TUFDakI7UUFBTSxxQkFEUWI7UUFDUjtVQUlJLElBRENFLGNBQUhwTyxXQUNFLG1CQUxPK087VUFLUDtnQkFHS0MsZ0JBQUgvTztZQUNKLFdBVElaLEVBSUpXLEVBSUlDO2dCQVJFaU8sS0FJSEUsS0FKTVcsS0FRRkM7O1VBRFA7UUFKSixTQU9pQjthQUVmQyxXQUFXNVAsRUFBRWtGLEtBQUt5SixHQUFHYztVQUFSckssWUFBS3lKLFFBQUdhO01BQzNCO1FBQU0scUJBRGtCYjtRQUNsQjtVQUlJLElBRENFLGNBQUhwTyxXQUNFLG1CQUxpQitPO1VBS2pCO1lBSVM7YUFESkM7YUFBSC9PO2FBQ08sa0JBVEZaLEVBQUVvRixPQUlYekUsRUFJSUM7YUFST3dFO2FBQUt5SixLQUliRTthQUpnQlcsS0FRWkM7O1VBRFAsT0FQV3ZLO1FBR2YsT0FIZUEsT0FVWTthQUV6QnlLLFNBQVM3UCxFQUFFMk8sR0FBR2M7VUFBSFosUUFBR2E7TUFDcEI7UUFBTSxxQkFEV2I7UUFDWDtVQUlJLElBRENFLGNBQUhwTyxXQUNFLG1CQUxVK087VUFLVjtZQUlGLElBRE9DLGdCQUFIL08sYUFDSixnQkFUT1osRUFJUFcsRUFJSUM7WUFDSixhQVRTaU8sS0FJTkUsS0FKU1csS0FRTEM7WUFEUDs7UUFKSixTQU02QjthQUUzQkcsUUFBUTlQLEVBQUUyTyxHQUFHYztVQUFIWixRQUFHYTtNQUNuQjtRQUFNLHFCQURVYjtRQUNWO1VBSUksSUFEQ0UsY0FBSHBPLFdBQ0UsbUJBTFMrTztVQUtUO1lBSUYsSUFET0MsZ0JBQUgvTyxhQUNKLGdCQVRNWixFQUlOVyxFQUlJQztZQUNKLFFBRkE7WUFFQSxJQVRRaU8sS0FJTEUsS0FKUVcsS0FRSkM7O1VBRFA7UUFKSixTQU00QjthQUUxQkksUUFBTUMsR0FBR3JCLEdBQUdjO1VBQUhaLFFBQUdhO01BQ2xCO1FBQU0scUJBRFNiLFFBQ0gsbUJBRE1hO1FBQ047O1lBSVI7YUFEcUJDO2FBQUgvTzthQUFYbU87YUFBSHBPO2FBQ0osZ0JBTFFxUCxHQUlKclAsRUFBY0M7WUFDbEIsYUFMV2lPLEtBSUpFLEtBSk9XLEtBSU9DOzs7U0FEckI7UUFLQSxTQUFLO2FBRUhNLFVBQVFDLElBQUl2QixHQUFHYztVQUFIWixRQUFHYTtNQUNyQjtRQUFNLHFCQURZYixRQUNOLG1CQURTYTtRQUNUOzs7WUFJQSxJQURhQyxnQkFBSC9PLGFBQ1YsYUFMRXNQLFNBSVF0UDtZQUNWLFNBQUpzQyxPQUxVMkwsVUFBR2EsS0FJSUM7WUFFTixPQURYek07VUFLSjtRQUZBLG9CQUVFO2FBTUFpTixTQUFTblEsRUFBRWxFLEVBQUVzVTtNQUNuQixHQURpQnRVLElBQUVzVTtRQUNMO2NBREd0VTtTQUVKLG9CdEJyUGhCLE9zQm1QU3FVLFNBQVNuUSxPQUFJb1E7UUFFWCxxQkFGT3BRLEVBQUVsRTtNQUtmLFFBQUc7YUFFSHVVLEtBQUsvUCxFQUFFTjtNQUNULFFBRE9NO1FBSUwsaUN0QjlQTCxPc0JtUFM2UCxTQU9HblEsT0FBRk07TUFFTCxnQ0FFYzthQUVWZ1EsT0FBTzNQO01BQ0osVUFESUEsaUJ0QmhRaEIsT3NCZ1FTMlAsT0FBTzNQLFNBQ0s7YUFFWjRQLFFBQVF2UTtNQUNILG9CdEJwUWQsT3NCbVFTdVEsUUFBUXZRO01BQ1IscUJBRFFBLFVBQ087YUFNZndRLGVBQWU3QjtNQUNyQjtNQUFVLGdCQURXQSxrQnRCMVF4QixPc0IwUVM2QixlQUFlN0IsZUFDVzthQU85QjhCLE1BQU05QjtNQUNGLHFCQURFQTtNQUNGO1FBSWtCO1NBRGJFO1NBQUhsTztTQUNnQixvQnRCdlIzQixPc0IwUVM2UCxlQVFFN0I7UUFLSyxVQURMaE8saUJ0QnRSWCxPc0I4QlM4TSxTQXdQS29CO01BRFAsUUFFd0M7YUFNdEM2QixTQUFTMVEsRUFBRVc7TUFDVCxJQUFKQyxFQUFJLFdBRE9aLEVBQUVXO01BRVIsVUFETEMsaUJ0QjlSUCxPc0I2UlM4UCxTQUFTMVEsRUFDWFksU0FDa0I7YUFXcEIrUCxRQUFRM1EsRUFBRVc7TUFDTCxvQnRCM1NWLE9zQjZSUytQLFNBYUkxUSxFQUFFVztNQUNMLHNCdEIzU1YsVXNCMFNlQSxRQUNTO2FBSWZpUSxTQUFTNVEsRUFBRWxFLEVBQUU2UztNQUNiLHFCQURhQTtNQUNiO1FBSVc7U0FETkU7U0FBSGxPO2NBSlM3RTtTQUtBLG9CdEJwVHBCLE9zQitTUzhVLFNBQVM1USxPQUlKNk87UUFDRCxxQkFMSzdPLEVBQUVsRSxFQUlUNkU7TUFESixRQUVpQzthQUUxQmtRLEtBQUs3USxFQUFFMk87TUFDbEIsaUN0QnZUSCxPc0IrU1NpQyxTQU9VNVEsT0FBRTJPLFNBQ0g7YUFRVG1DLFVBQVU5USxFQUFFUSxFQUFFbU87TUFDZCxxQkFEY0E7TUFDZDtRQUlNLElBRERFLGNBQUhsTyxXQUNJLGVBTElYLEVBQUVRLEVBSVZHO1FBRUssVUFETG9RLG1CdEJwVVgsT3NCK1RTRCxVQUFVOVEsRUFLUitRLElBREdsQztNQURQLFFBRzBCO2FBRTVCbUMsS0FBS2hSLEVBQUVRLEVBQUVtTztNQUNKLG9CdEJ4VVYsT3NCK1RTbUMsVUFRQzlRLEVBQUVRLEVBQUVtTztNQUNKLHNCdEJ4VVYsVXNCdVVZbk8sUUFDZ0I7YUFLbkJ5USxTQUFTM1EsRUFBRXFPO01BQ2pCLGFBRGVyTztlQXJUYitNOztpQkEwVFEscUJBTE9zQjtpQkFLUDt1QkFHS0UsY0FBSGxPO21CQUNLLFVBRExBLEVBQ0ssU0FURkwsVUFRQXVPO2lCQURQLFFBRTJCO2FBRWpDcUMsS0FBSzVRLEVBQUVxTztNQUNULEdBRE9yTyxNQUNPLDBCQUFzQixnQkFEN0JBLEVBQUVxTyxHQUVJO2FBb0JYd0MsS0FBSzdRLEVBQUVxTztNQUNULFlBRE9yTzs7aUJBQUVxTzs7dUJBZFF5QyxJQWNWOVEsRUFkWXVPLEtBY1ZGO21CQWJUO3FCQUFNLHFCQURhRTtxQkFDYjt1QkFJRixzQkFMYXVDO3VCQUtiLFNBQUlDLElBRUYsa0JBSEt0Qzt1QkFDUCxJQUxhcUMsSUFLVEMsSUFMV3hDLEtBSVJFOztxQkFEUCxTQWlCZTtlQUxMLHlCQUtLO2FBRWJ1QyxXQUFXbEMsRUFBRVQ7TUFDYixxQkFEYUE7TUFDYjtZQUdLRSxjQUFIbE87UUFDRCxrQkFMVXlPLEVBSVR6TztxQ3RCMVhYLE9zQnNYUzJRLFdBQVdsQyxFQUlOUDs7TUFEUCxRQUU4QzthQUU1QzBDLFdBQVduQyxFQUFFVDtNdEI3WHRCLElzQjZYc0JFO01BQ25CO1FBQU0sSUFHSjJDLEtBSEksV0FEYTNDO1FBQ2IsR0FHSjJDO2NBQVN6QyxLQUFUeUMsUUFBTTdRLEVBQU42UTtVQUNLLGNBTFVwQyxFQUlUek8sUUFKV2tPLEtBSVJFO1VBQzZCLE9BRHRDeUM7UUFERSxTQUV3QzthQUV0Q0MsTUFBTXpCLEdBQUdyQjtNQUNULHFCQURTQTtNQUNUO1FBSXdEO1NBRG5ERTtTQUFIbE87U0FDc0QsZ0JBTGxEcVAsR0FJSnJQO1NBQzBDLG9CdEJ6WXJELE9zQjZYUzRRLGdCQVdLMUM7U0FDOEIsb0J0QnpZNUMsT3NCb1lTNEMsTUFBTXpCO1NBS2lCLGdCQUxqQkEsR0FJSnJQO1NBQ1Msb0J0QnpZcEIsT3NCc1hTMlEsZ0JBa0JLekM7UUFDRCx5QnRCelliLFVzQndZV2xPO01BREosUUFFcUU7O2FBeUJyRStRLGVBR0Esa0JBQWtCO2FBaUJoQkMsUUFBUWhEO01BQ2QsU0ExQmFvQztRQTJCTCxxQkFGTXBDO1FBRU4sY0FHS0UsY0FBSGxPLFdBQ0ssVUFETEEsRUFDSyxRQURGa087UUFEUCxRQUVvQjtNQTlCZCxJQU5Hck8sRUFNSCxRQURDdVE7TUFDRDtRQUxBLHNCQURHdlE7UUFDSCxvQkFER0Esa0JGN1hiK0wsaUJFNlhhL0wsS0FxQ2Q7YUFFS29SLEtBQUtqRDtNQUNYLFNBckJVM087UUFzQkYscUJBRkcyTztRQUVILGNBR0tFLGNBQUhsTyxXQUNLLFVBRExBLEVBQ0ssS0FERmtPO1FBRFAsUUFFaUI7TUF6QlIsSUFBVGdELFVBREk3UjtNQUNLO1FBS0gsSUFBSkEsRUFBSSxTQUxONlIsT0FWRkgsU0FlUSxrQkFBSjFSLElBQ0QsQ0FvQk47YUFHSzhSLElBQUluRCxHQUFHYztNQUNQLHFCQURJZDtNQUNKO1FBSUksSUFEQ0UsY0FBSGxPLFdBQ0UsbUJBTEc4TztRQUtIO2NBR0tDLGdCQUFIOU87VUFDVSxhQUxkRCxFQUlJQyxrQnRCamRmLE9zQnljU2tSLElBSUtqRCxLQUlJYTtRQURQO01BSkosUUFNNEI7YUFFMUJxQyxLQUFLL1IsRUFBRTJPLEdBQUdjO01BQ1YscUJBRE9kO01BQ1A7UUFJSSxJQURDRSxjQUFIbE8sV0FDRSxtQkFMTThPO1FBS047VUFJVztXQUROQztXQUFIOU87V0FDUyxvQnRCN2R4QixPc0JvZFNtUixLQUFLL1IsRUFJQTZPLEtBSUlhO1VBQ0QscUJBVEgxUCxFQUlIVyxFQUlJQztRQURKO01BSkosUUFNOEI7YUFFNUJvUixXQUFXckQsR0FBR2M7TUFDZCxxQkFEV2Q7TUFDWDtZQUdLRSxjQUFIbE87UUFDSyxVQURMQSxpQnRCbmVYLE9zQitkU3FSLFdBQWN2QyxHQUlUWjtNQURQLGtCQUhnQlksS0FLVTthQTRCNUJ3QyxjQUFjL0IsSUFBSXZQLEVBQUVnTyxHQUFHL04sRUFBRTZPO01BQ3hCLHNCQURhUyxJQUFJdlAsRUFBS0M7Ozs7a0JBYm5CLHFCQWFxQjZPO2tCQWJyQjt3QkFHS0MsY0FBSDlPOzJCQVVOcVIsY0FBYy9CLElBQUl2UCxFQUFFZ08sR0FWZC9OLEVBQUc4TztrQkFEUCxVQVdnQi9PLEVBQUVnTzs7Z0JBQUZoTzs7a0JBTmQscUJBTWdCZ087a0JBTmhCO3dCQUdLRSxjQUFIbE87MkJBR05zUixjQUFjL0IsSUFIUnZQLEVBQUdrTyxLQUdjak8sRUFBRTZPO2tCQUp2QixVQUlxQjdPLEVBQUU2TyxLQUlXO2FBRXBDeUMsYUFBYWhDLElBQUl2QixHQUFHYztNQUNoQixxQkFEYWQsTUFDUCxtQkFEVWM7TUFDVjs7Y0FNZUMsZ0JBQUg5TyxhQUFYaU8sY0FBSGxPO2lCQWJSc1IsY0FNYS9CLElBT0x2UCxFQUFHa08sS0FBV2pPLEVBQUc4TztZQUhsQnhNOztxQkFESCxhQUNHQTtNQUVILE9BRkdBLENBSXdCO2FBRzNCaVAsUUFBUUM7TUFDUixxQkFEUUE7TUFDUjtZQUdVQyxnQ0FBUDFSO1FBQ0ksVUFESkEsaUJ0QnJoQlosT3NCaWhCU3dSLFFBSVVFO01BRFosUUFFcUI7YUFFbkJDLFFBQVFGO01BQ1IscUJBRFFBO01BQ1I7WUFHVUMsZ0NBQUp6UjtRQUNDLFVBRERBLGlCdEI1aEJmLE9zQndoQlMwUixRQUlVRDtNQURaLFFBRXFCO2FBRXZCRSxNQUFNSDtNQUNLLG9CdEJoaUJoQixPc0J3aEJTRSxRQU9FRjtNQUNSLHlCdEJoaUJILE9zQmloQlNELFFBY0VDLGdCQUNnQjthQVFsQkkseUJBQXlCeFMsRUFBRTJPO010QnhpQnBDLElzQndpQm9DRTtNQUNqQztRQUFNLHFCQUQyQkE7UUFDM0I7VUFJSSxJQURDRSxjQUFIcE8sV0FDRSxtQkFMcUJYLEVBSXZCVztVQUNFO1lBRUYsSUFEVUM7WUFDRDtvQkFEQ0E7bUN0QjlpQnJCLE9zQndpQlM0Uix5QkFBeUJ4UyxFQUlwQitPO1VBQ0QsSUFMdUJGLEtBSXRCRTs7UUFEUCxTQU1vQzthQUVsQzBELDBCQUEwQnpTLEVBQUUyTztNdEJuakJyQyxJc0JtakJxQ0U7TUFDbEM7UUFBTSxxQkFENEJBO1FBQzVCO1VBSUksSUFEQ0UsY0FBSHBPLFdBQ0UsbUJBTHNCWCxFQUl4Qlc7VUFDRSx5QkFMd0JrTyxLQUl2QkU7VUFDRCxJQUdTMkQ7VUFDRjtrQkFERUE7O29CdEIzakJ0QixPc0JtakJTRCwwQkFBMEJ6UyxFQUlyQitPO1FBRFAsU0FNNEM7YUFFOUM0RCxjQUFjM1MsRUFBRTJPO01BRWxCLG9CdEJoa0JILE9zQm1qQlM4RCwwQkFXVXpTLEVBQUUyTztNQUNsQjs2QnRCL2pCSCxPc0J3aUJTNkQseUJBc0JVeFMsRUFBRTJPO21CQUVZO2FBRTVCaUUsVUFBVXhELEVBQUVUO01BQ2QsY0FBeUJoTyxHQUFTLHNCQUR0QnlPLEVBQ2F6TyxFQUFjO01BQTFCLG9CdEJua0JoQixPc0I4Q1NxTixZQW9oQlFXO01BQ2QseUJ0Qm5rQkgsT3NCOENTWCxPQW9oQk1vQixFQUFFVCxlQUM2QjthQVd6Q2tFLEtBQUtDO01BQ0QsNEJ0Qi9rQlQsT3NCdUNTaEYsV0FvREpjLE9BbWZLa0UsV0FDc0I7YUFFdkJDLFVBQVVEO01BQ0csZUFESEEsS0FDRztNQUNoQixZQURDRztRQUVLLFlBRkVELE9BR1Q7TUFHYSxVQU5YQyxxQnRCbGxCUCxPc0JpbEJTRixVQUNLQyxhQU1vQjtpQkFNZkUsV0FBV0o7TUFDckIscUJBRHFCQTtNQUNyQjtRQUVVLElBREpLLGVBQUp4RSxZQUNRLG1CQURSQTtRQUNRO1VBUVc7V0FQWkU7V0FBSGxPO1dBT2UsYUFYWHVTO1dBV1c7O1dBQ1csb0J0QjFtQnpDLFVzQmttQmtCckUsS0FPSW1FO1dBQ1Msb0J0QjFtQi9CLGdCc0JnbUJlRztVQVVFLHlCdEIxbUJqQixVc0JrbUJleFMsRUFPQXNTO1FBUkksSUFjVyxhQWpCWEMsWUFpQlc7UUFDTixVQURURyx1QnRCL21CZixXc0IrbUJzQkQsUUFmUEQ7TUFxQlIsaUJBdkJZRCxhQXVCVzthQWtCekJJLFlBQVl0VCxFQUFFMk8sR0FBR2M7TUFDbkIsY0FDVzlPO1FBQ1AsY0FBU0MsR0FDUCxrQkFKUVosRUFFSFcsRUFDRUMsRUFDRjtRQURQLHNCdEIxb0JQLE9zQm1DU2dOLFdBb21CYTZCLFNBS1g7TUFKVSxTQUpOcUQsVXRCcG9CZixPc0JtQ1NsRixXQW9tQlVlO01BRmhCLG9CdEJyb0JILFdzQndCS3RCLE1BNG1CVXlGOzRCdEJwb0JmLE9zQnFEUzdFLGtCQXlsQko7YUFFQXNGLFFBQVE1RSxHQUFHYztNQUNiLDRCQUFpQjlPLEVBQUVDLEdBQUssVUFBUEQsRUFBRUMsRUFBVyxFQURwQitOLEdBQUdjLEdBQ3dCO2FBRW5DK0QsYUFBYUM7TUFDZixTQUFRdlE7UUFDQSxxQkFGT3VRO1FBRVAsVUFJRixJQURHOVMsV0FDSCxVQURHQSxFQUpEdUM7UUFHRixRQUVXO01BTGpCLE9BQVFBLENBT1A7YUFFQ3dRLGFBQWEvRTtNQUNmLElBQUluTyxLQURXbU87TUFDZjtRQUVRLHFCQUZKbk87UUFFSSxjQUdLbU8sWUFBSGhPLFdBTE5ILE9BS1NtTyxhQUFIaE87UUFESixRQUdNO2FBSU5nVCxLQUFLN1g7TUFDWCxTQURXQSxVQUNGLFVBREVBLGlCdEJ6cUJkLE9zQnlxQlM2WCxpQkFDZ0I7Ozs7T0F0bEJwQmpGO09BT0FFO09BZ0JTRTtPQW5DTHhMO09BUEE2SztPQXFES2E7T0FXQUM7T0FHTEU7T0FPQUU7T0FPQUM7T0FPQUM7T0FrQkFDO09BWUFJO09BWUFDO09BV0FDO09BV0FDO09BVUFFO09BM01KNUM7T0FFQUM7T0FFQUM7T0E4TkE4QztPQTNLSTlCO09BaUxBK0I7T0FHQUM7T0FlSkU7T0F3QkFFO09BdlFJL0M7T0FtUktpRDtPQXhRTDdDO09BUEFGO09BZ1NKa0Q7T0FpQkFFO09Bc0JBQztPQVFJRztPQU9BQztPQU9BRTtPQWtEQUU7O09BU0FDO09Ba0pBbUI7T0FuakJBdEY7T0F1QkFRO09BS0FDOztPQStZQTREO09BV0FDO09BV0FDO09BdUNKRTtPQTBJQXFCO09BVEFEO09BeEdBZjs7T0ErQkFJO09BSUFDO09BaUZBWTtPQVVBRTtPQVlJQzs7UUN2cEJKQzthQUNBQyxLQUFLM1QsR0FBSSxVQUFKQSxFQUFVO2FBQ2Y0VCxNQUFNbEksRUFBR21JLFdBQVUsR0FBYm5JLEdBQW9DLElBQUwxTCxFQUEvQjBMLEtBQW9DLE9BQUwxTCxFQUFpQixPQUE3QzZULFNBQW9EO2FBQzdEQztNQUFNLFVBQW1CLElBQUw5VCxXQUFLLE9BQUxBO01BQWlCLHNDQUE0QjthQUNqRStULEtBQUtySSxFQUFFNUwsR0FBSSxHQUFONEwsR0FBNEMsSUFBTDFMLEVBQXZDMEwsS0FBNEMsa0JBQTFDNUwsRUFBcUNFLEdBQVosUUFBb0I7YUFDcERnVSxZQUFPLFVBQW1CLElBQUx0SSxXQUFLLE9BQUxBLEVBQWlCLFFBQUk7YUFDMUN1SSxNQUFJblUsRUFBRTRMLEdBQUksR0FBSkEsR0FBMEMsSUFBTDFMLEVBQXJDMEwsS0FBK0MscUJBQWpENUwsRUFBdUNFLElBQVosUUFBMkI7YUFDMURrVSxPQUFNUixLQUFNQztNdkJ6QmpCLFV1QnlCMkMsSUFBTDNULFdBQUssa0JBQTFCMlQsS0FBcUIzVCxHQUFzQixPQUFqRDBUO2FBQ05TLE9BQUtyVTtNdkIxQlYsVXVCMEJpQyxJQUFMRSxXQUFLLGtCQUF2QkYsRUFBa0JFLEdBQW1CO2FBQzFDb1UsZUFBVSxnQkFBdUM7YUFDakRDLGVBQVUsZ0JBQXVDO2FBRWpEQyxRQUFNeEUsR0FBR3lFLEdBQUdySTtNQUFLLEdBQVJxSTtXQUFHckksUUFDQXNJLEdBREF0SSxNQUNUdUksR0FETUYsd0JBQUh6RSxHQUNIMkUsR0FBU0Q7O09BQ0EsS0FGQXRJLEdBRUE7TUFDVCxRQUFLO2FBRVJ3SSxVQUFRMUUsSUFBSXVFLEdBQUdySTtNQUFLLEdBQVJxSTs7V0FBR3JJLElBQ0csSUFBTnNJLEdBREd0SSxNQUNHLGtCQURWOEQsU0FDSXdFO1FBR0U7TUFEQSxPQUhDdEksT0FJQTthQUVmeUksVUFBV2pCO012QnpDaEIsVXVCeUMrRCxJQUFMMVQsV0FBSyxVQUFMQSxHQUFsQixVQUF4QjBUO2FBQ1hrQixlQUFVLFVBQWdDLElBQUw1VSxXQUFLLFVBQUxBLEtBQVYsUUFBa0I7YUFDN0M2VTtNQUFTLFVBQXVDLElBQUw3VSxXQUFLLHNCdkIzQ3JELE9zQjBCS29OLFNDaUIyQ3BOO01BQWpCLE9EbkIxQm1OLEtDbUI0RDs7OztPQXpCNUR1RztPQUNBQztPQUNBQztPQUNBRTtPQUNBQztPQUNBQztPQUNBQztPQUNBQztPQUNBQztPQUNBQztPQUNBQztPQUVBQztPQUtBSTtPQU1BQztPQUNBQztPQUNBQzs7YUN6QkFDLEdBQUc5VSxHQUFJLFVBQUpBLEVBQVE7YUFDWCtVLE1BQU1qTSxHQUFJLFVBQUpBLEVBQVc7YUFDakJrTSxRQUFNL1UsRUFBRzRUO01BQVUsU0FBYjVULE1BQWtDLElBQUxELEVBQTdCQyxLQUFrQyxPQUFMRCxFQUFvQixPQUE5QzZULFNBQXFEO2FBQzlEb0I7TUFBUyxtQkFBaUIsSUFBTGpWLFdBQUssT0FBTEE7TUFBb0IsdUNBQStCO2FBQ3hFa1Y7TUFBWSxrQkFBZ0M7TUFBWixJQUFMcE07TUFBSyxPQUFMQSxDQUE2QzthQUN4RXFNLE9BQUtsVixFQUFFSDtNQUFJLFNBQU5HLE1BQTJCLElBQUxELEVBQXRCQyxLQUEyQixrQkFBekJILEVBQW9CRSxHQUEyQixPQUFqREMsQ0FBa0Q7YUFDdkRtVixPQUE0QnRNLEdBQXJCLFNBQXFCQSxNQUFKLElBQUw3SSxFQUFTNkksS0FBSixPQUFMN0ksRUFBeUIsT0FBaEI2SSxDQUFpQjthQUM3Q3VNLE1BQUl2VixFQUFnQ2dKO014QnpCekMsU3dCeUJ5Q0EsTUFBWCxJQUFMOUksRUFBZ0I4SSxLQUFSLHFCQUF4QmhKLEVBQWdCRSxJQUFnQyxPQUFoQjhJO2FBQ3BDd00sVUFBVXhWLEVBQXNDRTtNeEIxQnJELFN3QjBCcURBLEtBQWEsT0FBYkEsRUFBZCxJQUFMOEksRUFBbUI5SSxLQUFSLHFCQUE5QkYsRUFBbUJnSjthQUM3QnlNLE9BQU1ULEdBQUlDO014QjNCZixtQndCMkJ3QyxJQUFML1UsV0FBSyxrQkFBN0I4VSxHQUF3QjlVO01BQXVCLElBQUw4STtNQUFLLGtCQUEzQ2lNLE1BQXNDak07YUFDaEQwTSxPQUFLMVY7TXhCNUJWLG1Cd0I0QitCLElBQUxFLFdBQUssa0JBQXJCRixFQUFnQkUsR0FBc0I7YUFDM0N5VixXQUFXM1Y7TXhCN0JoQixrQndCNkJzRCxTQUFkLElBQUxnSixXQUFLLGtCQUF4QmhKLEVBQW1CZ0o7YUFDOUI0TSxhQUFRLHlCQUF3QzthQUNoREMsZ0JBQVcseUJBQXdDO2FBRW5EQyxRQUFPZCxHQUFJQyxNQUFNYyxHQUFHQztNQUFLLFNBQVJEOztpQkFBR0MsT0FDTixJQUFOdEIsR0FEWXNCLE1BQ04sa0JBRFBoQixRQUNDTjs7aUJBRFNxQjtpQkFBR0MsT0FFQSxJQUFOMU0sR0FGTTBNLE1BRUEsa0JBRlRmLFdBRUczTDtNQUNSLFFBQUs7YUFFWDJNLFVBQVNqQixHQUFJQyxNQUFNYyxHQUFHQztNQUFLLFNBQVJEOztpQkFBR0MsT0FDUixJQUFOdEIsR0FEY3NCLE1BQ1Isa0JBRExoQixRQUNETjtRQUVPO2VBSElxQjtlQUFHQyxNQUlQO01BRkssSUFBTjFNLEdBRlEwTTtNQUVGLGtCQUZQZixXQUVDM0wsR0FFRTthQUVoQjRNO01BQVksbUJBQWlCLElBQUxoVyxXQUFLLFVBQUxBLEdBQXlCLFFBQUk7YUFDckRpVztNQUFVLG1CQUFpQixJQUFMalcsV0FBSyxVQUFMQSxLQUFzQixRQUFFO2FBQzlDa1c7TUFBUztRQUFpQixJQUFMbFcsV0FBSyxzQnhCOUMvQixPc0IwQktvTixTRW9CcUJwTjtNQUErQixPRnRCcERtTixLRXNCNkQ7Ozs7T0E1QjdEMkg7T0FDQUM7T0FDQUM7T0FDQUM7T0FDQUM7T0FDQUM7T0FDQUM7T0FDQUM7T0FDQUM7T0FDQUM7T0FDQUM7T0FDQUM7T0FDQUM7T0FDQUM7T0FFQUM7T0FLQUc7T0FNQUM7T0FDQUM7T0FDQUM7O0lDekIrQixTQUEvQkMsbUJ6QnJCTDtJeUJxQm9DLElBQy9CQztJQUQrQixTQUcvQkMsZ0JBQVcsa0JBQWlDO0lBSGIsU0FZL0JDLG1CQUFZLG1DQUEwQztJQVp2QixtQkFZbkIsV0FBMEM7SUFadkI7OztzQnpCckJwQztPeUJxQktIO09BQ0FDOztPQUVBQztPQVNBQztJQVorQjthQ0EvQjdYLElBQUkyQjtNMUJyQlQsUTBCcUJTQSxpQkFDK0MsT0FEL0NBLEVBQ21CLGdDQUF3QzthQU8vRG1XLFFBT0F2VDtNMUJwQ0w7TTBCNkJlLFNBT1ZBO29CQUxRLDBCQUtSQTs7O29CQU5ROztvQkFNUkE7O2tCQURRO2tCQUZBO21CQURBO21CQUVBOztNbEI4ZUo7UWtCM2VNLElBQUo2TixJQUFJOzhCQUFKQSxNQURON047UUFDVSw0QkFBSjZOO01BS0osSUFBSXZRLEVBQUo7NEJBQUlBO01BQUosc0JBQUlBLFVBTk4wQztNQU1FLHNCQUFJMUMsV0FOTjBDO01BTUUsc0JBQUkxQyxVQU5OMEM7TUFNRSw0QkFBSTFDLEVBS2M7YUFFcEJrVyxVQUNBeFQ7TUFEWSxTQUNaQTtNQURZOzs7O01sQitkUixnQmtCOWRKQSxZQUlNO2FBRU55VCxVQUNBelQ7TUFEWSxTQUNaQTtNQURZOzs7O01sQndkUixnQmtCdmRKQSxZQUlNO2FBRU4wVCxnQkFDQTFULEdBRGtCLFlBQ2xCQSx5QkFDTTthQUVOMlQsZ0JBQ0EzVCxHQURrQixZQUNsQkEseUJBQ007YUFJTjRULFVBQVFDLEdBQUdDLElBQUssT0FBUkQsS0FBR0MsTUFBc0I7YUFDakNDLFFBQU9GLEdBQVFDLElBQVMsY0FBakJELEtBQVFDLFdBQTBCOzs7O09BckR6Q3JZO09BUUE4WDtPQW9CQUM7T0FPQUM7T0FPQUM7T0FJQUM7T0FNQUM7T0FDQUc7OztLekJqREFDO0tBQ0FDO0tBQ0FDO0tBQ0FDO0tBRUFDO0tBQ0FDO2FBRUFDLEtBQUtoSjtNQUNQLE9BRE9BO2VBTEw2STtlQUtLN0ksY0FFUyxZQWhCZHBVLGFBY0tvVSxTQUdGO2FBRUhpSixLQUFLako7TUFDUCxPQURPQSxZQVhMNEksU0FXSzVJLFFBRVMsWUF0QmRyVSxhQW9CS3FVLFNBR0Y7YUFFSGtKLFNBQVM1YjtNQUFJLGNBQUpBLE1BQUksVUFBSkE7Ozs7O01BSlgsV0FJeUU7YUFDdkU2YixPQUFPN2I7TUFBTyxnQkFBUEE7O2VVekJQMkU7aUJWQ2UsMEJBd0JSM0UsbUNBQXdEO2FBSS9EOGIsUUFBUXBKLEdBQUksT0FBSkEsV0FBVzthQUNuQnFKLFFBQVEzVSxHQUFJLE9BQUpBLENBQWU7YUFDdkI0VSxRQUFRdEo7TUFDVixhQURVQTtlVS9CUi9OO2lCVkUwQjs7OzZDQTZCbEIrTjtnQkFFTzthQUVmdUoscUJBSEYsV0FDaUI7YUFJZkMsbUJEeERMO1FDeURLQzthQUNBQyxXRDFETDthQ3lFY0Msb0JBQW9CQyxHQUFJLGNBQUpBLGlCQUF5QjthQUM3Q0Msa0JBQWtCRCxHQUFJLFFBQUpBLGlCQUFrQzthQUNwREUsaUJBQWlCRixHQUFJLE9BQUpBLFlBQW1DO2FBQ3BERyxXQUFXalksRUFBRWtPLEdBQUksWUFBTmxPLFdBQUVrTyxDQUE4QzthMEJvZHBFZ0ssWTFCbmQ0QmxZLEdBQUksT0FBSkEsZUFBK0I7YUFFM0RtWSxrQkFLRmpLO01BTHdCLFFBS3hCQTtRQUhPLFNBR1BBO1VBRk8sVUFFUEE7WUFETyxXQUNQQTtjQUFPLGFBQVBBLEVBQ0ssNkJBRG1CO1lBREY7VUFEQTtRQURBO01BRE4sNEJBS0M7YUFFZmtLLG1CQUdGbEs7TUFIeUIsUUFHekJBO1FBRE8sV0FDUEEsR0FBTyxhQUFQQSxFQUNLLDZCQURtQjtRQURGO01BRE4sNEJBR0M7dUJBSlEsV0FJUjs7OztPQWxFZjBJO09BQ0FDO09BSUFHO09BQ0FDO09BRUFDO09BS0FDO09BS0FDO09BQ0FDO3NCRDVDTDs7T0NnREtDO09BQ0FDO09BQ0FDO09BSUFDO09BRUFDO09BQ0FDO09BQ0FDO09BZVNDO09BRUFHO09BREFEO09BRUFFO08wQm9kVEM7TzFCamRBQztPQVFBQzs7YWE5REFDLFNBQU92Vzs7OztVQUZDLHVEQUFMd1c7O1FBREcsV0FHbUI7YUFFekJDLE9BQUt0VixFQUFFbkIsR0FBSSxVQUFObUIsRUFBRW5CLEVBQVE7YUFFZk07TUFBSyxVQUVHLElBQVJhLFdBQVEsT0FBUkEsRUFETSx1QkFDRzthQUVUZDtNQUFLLFVBRUcsSUFBTEwsV0FBSyxPQUFMQSxFQURHLHVCQUNHO2FBRVQwVyxJQUVjMVcsRUFBRTlCO01BRGxCLFFBQ2tCQTtZQUFGeVksTUFBRTNIO1FBQ2hCO2FBRGMySDtnQkFHVEMsSUFIU0QsT0FHWnhWLEVBSFl3VjtxQkFBRTNILElBR1EsT0FBdEI3TjtZQUE2QixRQUhmNk4sWUFBRjJILElBR1RDLElBSFc1SDs7VUFFUjtNQUhJLGdDQUtBO2FBRVo2SCxRQUVjN1csRUFBRTlCO01BRGxCLFFBQ2tCQTtZQUFGeVksTUFBRTNIO1FBQ2hCO2FBRGMySDtnQkFHVEMsSUFIU0QsT0FHWnhWLEVBSFl3VjtxQkFBRTNILElBR1EsVUFBdEI3TjtZQUFrQyxRQUhwQjZOLFlBQUYySCxJQUdUQyxJQUhXNUg7O1VBRVI7TUFISSxrQ0FLQTthQUlSOEgsV0FBV3hYLEdBQUdDO1VBQUh3WCxRQUFHQztNQUNwQjtXQURpQkQ7MkJBR2Y1VixFQUhlNFYsUUFBR0csUUFHbEIvVixFQUhrQjZWLE1BQUhELFVBQUdDOztRQUVaLE9BRllBLEtBR2M7YUFFaENHLElBQUluWCxHQUFJLGtCQUFKQSxJQUFtQjthQU1uQm9YLFdBQVMxZCxFQUFFd0UsRUFBRU47TUFDbkIsR0FEaUJNLEtBQUZ4RSxFQUNBO01BRUwsSUFBSnFFLEVBQUksV0FIU0gsRUFBSmxFO01BSVIsVUFERHFFLEVBQ0MsV0FKUXJFLFVBQUV3RSxFQUFFTixHQUlNO29CQVNsQjZELElBQUk3RDtNQUNYLFFBRE82RDtRQUVQLFFBRk9BO2NBakJnQnVLLE1BQUl0UztVQUMzQjtlQWdCTytILE9BakJvQi9ILFNBRnpCeWQsSUFFcUJuTDtZQUVsQixRQUZzQnRTLFVBRUosb0JBZVprRSxFQWpCZ0JsRSxHQUFKc1MsZUFBSXRTOztRQW9CdEIsb0JBSEUrSCxJQUFJN0Q7TUFDSyxpQ0FFSzs7TUFFTCxjQUVYRyxXQUFIaUMsV0FBWSxjQUFaQSxFQUFZLFFBQVRqQztNQURHLFFBQ2U7bUJBSWJIO01kMUZiO1FjNEZxQixJQUFib0MsV0FBSG1CLFdBQWdCLGFBRlJ2RCxFQUVSdUQsR0FBNEIsVUFBaEJwRCxFQUFnQixNQUZwQkgsRUFFTG9DO01BREc7aUJBR0d0RyxFQUFFa0U7TWQ5RmhCO1FjZ0dxQixJQUFib0MsV0FBSG1CLFdBQWdCLGFBRkx2RCxFQUFGbEUsRUFFVHlIO1FBQThCLFVBQWxCcEQsRUFBa0IsSUFGckJyRSxVQUFFa0UsRUFFUm9DO01BREc7b0JBR0RwQyxFQUFFb0MsR0FBSSxhQUFOcEMsRUFBRW9DLEVBQWM7cUJBRWJwQyxFQUFFeVo7Ozs7VUFHUTtXQUFiclg7V0FBSG1CO1dBQWdCLHFCQUhWdkQsRUFHTnVEOzttQkFBR25COztRQURHLFlBR0M7b0JBR0FwQztNZDVHZDs7O2NjOEdRb0MsYUFBSG1CO1VBQVEsV0FGQ3ZELEVBRVR1RDtzQkFBR25COztRQURHO3FCQU9BcEMsRUFBRStZOzs7O2NBRkwzVyxXQUFIbUI7VUFBUSxXQUVGdkQsSUFGTnVEO1VBQVEsOEJBQUxuQjs7UUFERyxTQUdpQjt5QkFFVHBDLEVBQUVrRixLQUFLOUM7VUFBTGdELFlBQUsyVDtNQUN2QjtXQUR1QkE7VUFHRDtXQUFqQkMsSUFIa0JEO1dBR3JCeFYsRUFIcUJ3VjtXQUdELGtCQUhOL1ksRUFBRW9GLE9BR2hCN0I7V0FIZ0I2QjtXQUFLMlQsSUFHbEJDOztRQURHLE9BRlU1VCxPQUdnQjt3QkFFakJwRixFQUFFb0MsRUFBRThDO01BQ3JCLEdBRG1COUMsT0FHZDJXLElBSGMzVyxLQUdqQm1CLEVBSGlCbkIsS0FHTCxrQkFIR3BDLEVBR2Z1RCxFQUFZLFdBSEd2RCxFQUdaK1ksSUFIZ0I3VDtNQUViLE9BRmFBLElBR2M7b0JBRXhCbEYsRUFBRTBCLEdBQUdDO01BQ2hCLEdBRGFEO1dBQUdDO1VBR2MsSUFBZnlYLEtBSEN6WCxNQUdMK1gsR0FISy9YLE1BR1R3WCxLQUhNelgsTUFHVmlZLEdBSFVqWSxNQUdpQixhQUhuQjFCLEVBR1IyWixHQUFRRDtVQUFtQyxVQUFwQnZaLEVBQW9CLE9BSG5DSCxFQUdKbVosS0FBUUM7O09BREQsS0FGRXpYLEdBRUY7TUFFRixpQ0FBdUI7c0JBRXhCM0IsRUFDVTBCLEdBQUdDO1VBQVJ1RCxPQUFLaVUsUUFBR0M7TUFDdEI7V0FEbUJEO2FBQUdDO1lBR1M7YUFBaEJFLEtBSE9GO2FBR1hNLEdBSFdOO2FBR2ZDLEtBSFlGO2FBR2hCUSxHQUhnQlI7YUFHWSxxQkFKdEJuWixFQUlOMlosR0FBUUQsSUFIR3hVOzthQUFLaVUsS0FHWkU7YUFIZUQsS0FHUEU7OztTQURELEtBRlFGLEtBRVIsT0FGQWxVO1FBSUYsc0NBRUU7cUJBR0psRixFQUFFMEIsR0FBR0M7VUFBSHdYLFFBQUdDO01BQ2pCO1dBRGNEO2FBQUdDO2dCQUdGRSxLQUhFRixRQUdOTSxHQUhNTixRQUdWQyxLQUhPRixRQUdYUSxHQUhXUjtZQUdRLFdBSFZuWixFQUdUMlosR0FBUUQ7Z0JBSEdQLEtBR1BFLEtBSFVELEtBR0ZFOzs7U0FERCxLQUZHRixLQUVIO1FBRUYsbUNBQXdCOzBCQUVuQnBaLEVBQUVrRixLQUFLeEQsR0FBR0M7VUFBUnlELFlBQUsrVCxRQUFHQztNQUMzQjtXQUR3QkQ7YUFBR0M7WUFHUTthQUFwQkUsS0FIWUY7YUFHaEJNLEdBSGdCTjthQUdwQkMsS0FIaUJGO2FBR3JCUSxHQUhxQlI7YUFHVyxrQkFIbEJuWixFQUFFb0YsT0FHaEJ1VSxHQUFRRDthQUhRdFU7YUFBSytULEtBR2pCRTthQUhvQkQsS0FHWkU7OztTQURELEtBRmFGLEtBRWIsT0FGS2hVO1FBSVAsd0NBQTZCO3lCQUV2QnBGLEVBQUUwQixHQUFHQyxHQUFHdUQ7TUFDMUIsR0FEb0J4RDtXQUFHQztjQUdSeVgsS0FIUXpYLE1BR1orWCxHQUhZL1gsTUFHaEJ3WCxLQUhhelgsTUFHakJpWSxHQUhpQmpZO1VBR1Usa0JBSFoxQixFQUdmMlosR0FBUUQsR0FBbUIsWUFIWjFaLEVBR1htWixLQUFRQyxLQUhXbFU7O09BRVosS0FGU3ZELEdBRVQsT0FGWXVEO01BSWQsd0NBQThCO3VCQUU1QmtLO01kbEtqQjs7O1Vjb0thLElBQUxoTixhQUFIbUIsYUFBUSxnQkFGSTZMLEVBRVo3TDtVQUFRLHFCQUFMbkI7VUFERzs7c0JBR0tnTjtNZHRLaEI7OztVY3dLYSxJQUFMaE4sYUFBSG1CLGFBQVEsZ0JBRkc2TCxFQUVYN0w7VUFBUSxRQURGO1VBQ0UsWUFBTG5COztRQURHO3dCQUdPZ04sRUFBRTFOLEdBQUdDO1VBQUh3WCxRQUFHQztNQUNwQjtXQURpQkQ7YUFBR0M7WUFHRTthQUFQRSxLQUhLRjthQUdUTSxHQUhTTjthQUdiQyxLQUhVRjthQUdkUSxHQUhjUjthQUdLLGdCQUhQL0osRUFHWnVLLEdBQVFEO1lBQVcsYUFITFAsS0FHVkUsS0FIYUQsS0FHTEU7OztTQURELEtBRk1GLEtBRU47UUFFRixzQ0FBMkI7dUJBRXpCaEssRUFBRTFOLEdBQUdDO1VBQUh3WCxRQUFHQztNQUNuQjtXQURnQkQ7YUFBR0M7WUFHRzthQUFQRSxLQUhJRjthQUdSTSxHQUhRTjthQUdaQyxLQUhTRjthQUdiUSxHQUhhUjthQUdNLGdCQUhSL0osRUFHWHVLLEdBQVFEO1lBQVc7Z0JBSE5QLEtBR1RFLEtBSFlELEtBR0pFOzs7U0FERCxLQUZLRixLQUVMO1FBRUYscUNBQTBCO2lCQUU1QnpZO01kdExiOzs7VWN3TGEsSUFBTHlCLGFBQUhtQixhQUFRLHdCQUFSQSxFQUZRNUM7VUFFQSxRQURGO1VBQ0UsWUFBTHlCOztRQURHO2tCQUdHekI7TWQxTGQ7OztjYzRMUXlCLGFBQUhtQix3QkFGUzVDO2tCQUNIO3NCQUNIeUI7O1FBREc7bUJBR0l6QjtNZDlMZjs7O2NjZ01ZeUIsOEJBQUpOLFdBQUZ5QjtVQUFjLHNCQUFkQSxFQUZTNUMsR0FFMEIsT0FBakNtQjtzQkFBSU07O1FBREQ7dUJBR1F6QjtNZGxNbkI7OztjY29NWXlCLDhCQUFKTixXQUFGeUI7VUFBYyxzQkFBZEEsRUFGYTVDLEdBRXNCLFVBQWpDbUI7c0JBQUlNOztRQUREO2tCQUdHekI7TWR0TWQ7OztjY3dNWXlCLDhCQUFKTixXQUFGeUI7bUJBRlE1QyxFQUVrQixPQUF4Qm1CO3NCQUFJTTs7UUFERDtzQkFHT3pCO01kMU1sQjs7O2NjNE1ZeUIsOEJBQUpOLFdBQUZ5QjttQkFGWTVDLEVBRWMsVUFBeEJtQjtzQkFBSU07O1FBREQ7dUJBR1F6QjtNZDlNbkI7OztVY2dOb0I7V0FBTHlCOztXQUFUbUI7V0FBYyx3QkFBZEEsRUFGYTVDO1VBRUMsUUFEVDtVQUNTLFlBQUx5Qjs7UUFESjtzQkFHT3pCO01kbE5sQjs7O2Njb05leUIsOEJBQVRtQixzQkFGWTVDO2tCQUNQO3NCQUNJeUI7O1FBREo7MEJBR1d6QjtNZHROdEI7WWN3TnVCeUIsV0FBbEJ3WCxjQUFDclcsRUFBRHFXO1FBQ0ssMEJBREpyVyxFQUZnQjVDLEdBRUN5QixLQUFsQndYLEtBQ3lDLGFBSHhCalosRUFFQ3lCO01BRFo7eUJBSVV6QjtNZDNOckI7WWM2TnVCeUIsV0FBbEJ3WCxjQUFDclcsRUFBRHFXO2VBQUNyVyxNQUZlNUMsRUFFRXlCLEtBQWxCd1gsS0FBcUQsWUFGckNqWixFQUVFeUI7TUFEWjtvQkFHR2dOO01kL05kOzs7Y2NpT1VoTixhQUFMekI7VUFBYSxjQUZKeU8sRUFFVHpPLEdBQXNCLE9BQXRCQTtzQkFBS3lCOztRQURDO3NCQUdPZ047TWRuT2xCOzs7Y2NxT1VoTixhQUFMekI7VUFBYSxjQUZBeU8sRUFFYnpPLEdBQXNCLFVBQXRCQTtzQkFBS3lCOztRQURDO3dCQUdPcEM7TWR2T2xCOzs7VWMwT2tCLElBRFJvQyxhQUFMekIsYUFDYSxrQkFIQVgsRUFFYlc7VUFDYSxHQUNSK0wsT0FBb0IsT0FBcEJBO1VBRFEsWUFEUnRLOztRQURDO3NCQU9HZ047TUFDWDs7Ozs7Z0JBRU9oTixXQUFMekI7WUFBYSxjQUhKeU8sRUFHVHpPO2NBQXNCLGNBQXRCQSw4QkFBS3lCOzs7VUFEQyxvQkFFRDtxQkFJR2dOLEVBQUVxSzs7OztVQUdjO1dBQXJCclg7V0FBSHpCO1dBQXdCLGlCQUhoQnlPLElBR1J6Tzs7OzttQkFBR3lCOztRQURHLGdCQUdFOzBCQUVHcEM7TUFDYjs7Ozs7WUFHWSxJQURIb0MsV0FBTHpCLFdBQ1EsaUJBSkNYLEVBR1RXO1lBQ1E7Y0FFTSx5QkFBTFQsOEJBSEprQzs7WUFDRyxVQURIQTs7VUFEQyxvQkFNSjt3QkFHTXBDLEVBREd5Wjs7OztVQUlEO1dBRExyWDtXQUFMekI7V0FDVSxjQUhGWCxFQUVSVztXQUVPLGlCQURGZ087O21CQURBdk07O1FBREMsZ0JBSUc7MkJBRUdwQyxFQUFFa0YsS0FBS3VVO2lCQUFMdlUsc0JBQUt1VTs7O1VBSUg7V0FEWHJYO1dBQUx6QjtXQUNnQixpQkFKSlgsU0FHWlc7V0FDZ0I7O3VCQUFKa1o7a0JBQU4zSzs7bUJBREQ5TTs7UUFETyw4QkFJSDt5QkFFRGdOLEVBQUVxSzs7OztjQUdQclgsYUFBTHpCO1VBQWEsY0FISHlPLEVBR1Z6TztZQUFzQixhQUF0QkEseUJBQUt5QjtVQUEyQyxZQUFoRHpCLHNCQUFLeUI7O1FBRFc7UUFBVCx5QkFFRzs2QkFFSWdOLEVBQUVxSzs7OztVQUlILElBRFJyWCxhQUFMekIsYUFDYSxpQkFKQ3lPLEVBR2R6TztVQUNhO1lBQ1MseUJBQUxULDRCQUZaa0M7VUFDUSxJQUVVLHdCQUFMK0csaUNBSGIvRzs7UUFEWTtRQUFWLDBCQU9HOztNQUVFO1FBR0s7U0FEVkE7O1NBQUp4QjtTQUFGRDtTQUNnQixjQURWeUI7U0FDVTs7cUJBRGhCekIsRUFDTW9aLE9BREpuWixFQUNRa1o7TUFGTCxVQUVvQztxQkFFOUJwWSxHQUFHQztNQUNqQixHQURjRDtXQUFHQztjQUdGeVgsS0FIRXpYLE1BR04rWCxHQUhNL1gsTUFHVndYLEtBSE96WCxNQUdYaVksR0FIV2pZO1VBR29CLGFBQS9CaVksR0FBUUQsSUFBdUIsUUFBM0JQLEtBQVFDOztPQURELEtBRkd6WCxHQUVIO01BRUYsb0NBQTBCO21CQUkxQnVPLElBR1Z4TyxHQURJQztNQUROLEdBRUVEO1dBRElDO2NBRVlxWSxHQUZaclksTUFFTXNZLEdBRk50WSxNQUVFdVksR0FETnhZLE1BQ0F5WSxHQURBelk7VUFFSyxzQkFMS3dPLElBSVZpSyxHQUFVRjt5QkFHRyxNQVBIL0osSUFHVnhPLEdBQ2dCc1k7c0JBQWhCRyxHQUVhLE1BTkhqSyxJQUlKZ0ssR0FGRnZZO1FBQ00sT0FBVkQ7TUFEVSxPQUFOQyxFQUt3Qjt1QkFHaEJ1TyxJQUFJOU47TUFDbEIsU0F3Q0lnWSxTQUFTOVosRUFBRThCO1FBQ2IsU0FEVzlCO2FBQUU4Qjs7O2NBR0U7ZUFERUs7ZUFBTjRYO2VBQU5DLEdBRlFsWTtlQUdFLGlCQTVDSDhOLElBMkNQb0ssR0FBTUQsT0FBTkMsTUFBTUQsZ0JBQU5DO2NBQzJDLFVBQXhDOVosRUFEU2lDOztrQkFGTm5DLEtBQUU4Qjs7Ozs7ZUFPSjtnQkFGY21ZO2dCQUFOQztnQkFBTkM7Z0JBQU5DLEtBTFF0WTtnQkFPSjtnQ0FoREc4TixJQThDUHdLLEtBQU1EO3VCQUdBLFdBakRDdkssSUE4Q0R1SyxLQUFNRDt3QkFBWkUsUUFBTUQsUUFBTUQ7eUJBSUQsV0FsREp0SyxJQThDUHdLLEtBQVlGOzBCQUFaRSxRQUFZRixNQUFOQzswQkFBTUQsTUFBWkUsUUFBTUQ7dUJBTUcsV0FwREZ2SyxJQThDUHdLLEtBQVlGO3dCQUFOQyxRQUFOQyxRQUFZRjt5QkFPSCxXQXJERnRLLElBOENEdUssS0FBTUQ7MEJBQU5DLFFBQU1ELE1BQVpFOzBCQUFZRixNQUFOQyxRQUFOQztlQVFNLFVBUEgzSixJQURld0o7UUFZbkI7WUFqQk9qYTtTQWlCUCxHQWpCT0EsSUFpQkhxYTtTQUVTLFdBRlRBLEdBakJLdlk7U0FtQkk7O1NBQ0EsYUFGVHdZLEdBQ0l4QjtTQUNLOztTQTVERDFYLEdBMkRSRjtTQTNEV0csR0E0RFhGO1NBNURjeUQ7UUFDdEI7YUFEZ0J4RDtlQUFHQztrQkFJTHFZLEdBSktyWSxNQUlUc1ksR0FKU3RZLE1BSWJ1WSxHQUpVeFksTUFJZHlZLEdBSmN6WTtjQUtULGtCQU5Ld08sSUFLVmlLLEdBQVFGO2dCQUdELGNBSENBLEdBSlkvVSxNQUFIdkQsR0FJTHFZLEdBSlE5VTtjQU1iLGNBRlBpVixHQUpvQmpWLE1BQU54RCxHQUlWd1ksR0FKZ0JoVjs7cUJBR1YsV0FISXhELEdBQU13RDs7b0JBRVYsV0FGT3ZELEdBQUd1RDt5QkE0RFY0VixNQUNnQjtNQTdEOUIsU0FrQlFELEtBQUt2YSxFQUFFOEI7UUFDYixTQURXOUI7YUFBRThCOzs7Y0FHRTtlQURFSztlQUFONFg7ZUFBTkMsR0FGUWxZO2VBR0UsaUJBdEJIOE4sSUFxQlBvSyxHQUFNRCxhQUFOQyxnQkFBTUQ7Y0FDc0MsVUFBekM3WixFQURTaUM7O2tCQUZObkMsS0FBRThCOzs7OztlQU9KO2dCQUZjbVk7Z0JBQU5DO2dCQUFOQztnQkFBTkMsS0FMUXRZO2dCQU9KO2dDQTFCRzhOLElBd0JQd0ssS0FBTUQ7dUJBTUcsV0E5QkZ2SyxJQXdCUHdLLEtBQVlGO3lCQU9ILFdBL0JGdEssSUF3QkR1SyxLQUFNRDtnQ0FBTkMsUUFBTkM7MEJBQU1ELFFBQU1ELE1BQVpFO3dCQUFNRCxRQUFOQyxRQUFZRjt1QkFHTixXQTNCQ3RLLElBd0JEdUssS0FBTUQ7eUJBSUQsV0E1Qkp0SyxJQXdCUHdLLEtBQVlGO2dDQUFaRSxRQUFNRDswQkFBTkMsUUFBWUYsTUFBTkM7d0JBQU5DLFFBQU1ELFFBQU1EO2VBUU4sVUFQSHpKLElBRGV3SjtRQVluQjtZQWpCT2phO1NBaUJQLEdBakJPQSxJQWlCSHFhO1NBRVMsZUFGVEEsR0FqQkt2WTtTQW1CSTs7U0FDQSxpQkFGVHdZLEdBQ0l4QjtTQUNLOztTQTdCRzFYLEdBNEJaRjtTQTVCZUcsR0E2QmZGO1NBN0JrQnlEO1FBQzFCO2FBRG9CeEQ7ZUFBR0M7a0JBSVRxWSxHQUpTclksTUFJYnNZLEdBSmF0WSxNQUlqQnVZLEdBSmN4WSxNQUlsQnlZLEdBSmtCelk7Y0FLYixrQkFmS3dPLElBY1ZpSyxHQUFRRjtnQkFFRCxjQUZQRSxHQUp3QmpWLE1BQU54RCxHQUlkd1ksR0FKb0JoVjtjQU9qQixjQUhDK1UsR0FKZ0IvVSxNQUFIdkQsR0FJVHFZLEdBSlk5VTs7cUJBR2QsV0FIUXhELEdBQU13RDs7b0JBRWQsV0FGV3ZELEdBQUd1RDt5QkE2QmQ0VixNQUNvQjtNQXdCeEIsSUFBTmpYLElBQU0sU0FoRVF6QjtNQWdFUixZQUFOeUIsSUFDdUIsS0FEdkJBLElBaEVjekIsT0FpRXFCO3VCQXlDM0I4TixJQUFJOU47TUFDaEIsU0E4RElnWSxTQUFTOVosRUFBRThCO1FBQ2IsU0FEVzlCO2FBQUU4Qjs7O2NBSUM7ZUFGR0s7ZUFBTjRYO2VBQU5DLEdBRlFsWTtlQUlDLGVBbkVKOE4sSUFpRUxvSyxHQUFNRDtlQUVHLFFBQUpVLE9BRkxULFVBRUtTLE9BRkxULE1BQU1ELGdCQUFOQztjQUdxRCxVQUZsRDlaLEVBRFNpQzs7a0JBRk5uQyxLQUFFOEI7Ozs7O2VBVUM7Z0JBRlNtWTtnQkFBTkM7Z0JBQU5DO2dCQUFOQyxLQVJRdFk7Z0JBVUMsZUF6RUo4TixJQXVFTHdLLEtBQU1EO2VBRUcsU0FBSk87Z0JBRU07Z0NBM0VOOUssSUF1RUN1SyxLQUFNRDtpQkFJRDt3QkFBSlM7dUJBSkRSO3dCQUlDUSxPQUpEUixRQUFNRCxnQkFBTkM7aUJBQ0gxSjs7Z0JBS0csT0FKRGlLO2tCQUtNLElBQUpFLElBQUksV0E5RU5oTCxJQXVFQ3VLLEtBQU1EO2tCQU9ELFNBQUpVOytCQVBQUixRQUFNRDs7bUJBU0UsT0FGRFM7Z0NBUFBSLFFBQU1ELFFBQU1EOztvQkFXQztvQ0FsRlJ0SyxJQXVFTHdLLEtBQVlGO3FCQVdDOzRCQUFKVzsyQkFYVFQsUUFBTUQ7NEJBV0dVOzZCQVhUVCxRQUFZRixNQUFOQzs2QkFBTUQsTUFBWkUsUUFBTUQ7O2tCQU9LLElBTlIxSjs7a0JBZVEsSUFBSnFLLElBQUksV0F2Rk5sTCxJQXVFTHdLLEtBQVlGO2tCQWdCRCxTQUFKWTsrQkFoQkRYLFFBQU5DOzttQkFrQlEsT0FGRFU7Z0NBaEJEWCxRQUFOQyxRQUFZRjs7b0JBb0JDO29DQTNGUnRLLElBdUVDdUssS0FBTUQ7cUJBb0JDOzRCQUFKYTsyQkFwQkhaLFFBQU5DOzRCQW9CU1c7NkJBcEJIWixRQUFNRCxNQUFaRTs2QkFBWUYsTUFBTkMsUUFBTkM7O2tCQWdCVyxJQWZSM0o7ZUF3QkosVUF4QklBLElBRGV3SjtRQTJCbkI7WUFuQ09qYTtTQW1DUCxHQW5DT0EsSUFtQ0hxYTtTQUVTLFdBRlRBLEdBbkNLdlk7U0FxQ0k7O1NBQ0EsYUFGVHdZLEdBQ0l4QjtTQUNLOztTQXBHRDFYLEdBbUdSRjtTQW5HV0csR0FvR1hGO1NBcEdjeUQ7UUFDdEI7YUFEZ0J4RDtlQUFHQztjQUtQLElBREVxWSxHQUpLclksTUFJVHNZLEdBSlN0WSxNQUlidVksR0FKVXhZLE1BSWR5WSxHQUpjelksTUFLSixhQU5Gd08sSUFLUmlLLEdBQVFGO2NBQ0UsU0FBSi9XO2dCQUNVLGNBRmhCaVgsR0FKb0JqVixNQUFOeEQsR0FJVndZLEdBSmF2WSxHQUlMcVksR0FKUTlVO2NBT2IsUUFGRGhDLEdBSUMsY0FMQytXLEdBSlkvVSxNQUFIdkQsR0FJTHFZLEdBSlE5VTtjQUtWLElBR0gsVUFKUGlWLEdBSm9CalYsTUFBTnhELEdBSVZ3WSxHQUpnQmhWOztxQkFHVixXQUhJeEQsR0FBTXdEOztvQkFFVixXQUZPdkQsR0FBR3VEO3lCQW9HVjRWLE1BQ2dCO01Bckc5QixTQXNCUUQsS0FBS3ZhLEVBQUU4QjtRQUNiLFNBRFc5QjthQUFFOEI7OztjQUlDO2VBRkdLO2VBQU40WDtlQUFOQyxHQUZRbFk7ZUFJQyxlQTNCSjhOLElBeUJMb0ssR0FBTUQ7ZUFFRyxRQUFKVSxPQUZMVCxXQUVLUyxPQUZDVixNQUFOQyxnQkFBTUQ7Y0FHK0MsVUFGbEQ3WixFQURTaUM7O2tCQUZObkMsS0FBRThCOzs7OztlQVVDO2dCQUZTbVk7Z0JBQU5DO2dCQUFOQztnQkFBTkMsS0FSUXRZO2dCQVVDLGVBakNKOE4sSUErQkx3SyxLQUFNRDtlQUVHLFNBQUpPO2dCQUVNO2dDQW5DTjlLLElBK0JDdUssS0FBTUQ7aUJBSUQ7d0JBQUpTO3VCQUpEUjt5QkFJQ1EsT0FKS1QsTUFBTkMsb0JBQU1EO2lCQUNUeko7O2dCQUtHLFFBSkRpSztrQkFjTSxJQUFKRSxJQUFJLFdBL0NOaEwsSUErQkx3SyxLQUFZRjtrQkFnQkQsU0FBSlU7K0JBaEJEVCxRQUFOQzs7bUJBa0JRLFFBRkRRO29CQUlNO29DQW5EUmhMLElBK0JDdUssS0FBTUQ7cUJBb0JDOzRCQUFKVzsyQkFwQkhWLFFBQU5DOzZCQW9CU1M7NkJBcEJHWCxNQUFOQyxRQUFOQzs2QkFBTUQsUUFBTUQsTUFBWkU7OztnQ0FBTUQsUUFBTkMsUUFBWUY7a0JBZ0JELElBZlJ6Sjs7a0JBTVEsSUFBSnFLLElBQUksV0F0Q05sTCxJQStCQ3VLLEtBQU1EO2tCQU9ELFNBQUpZOytCQVBQVixRQUFNRDs7bUJBU0UsUUFGRFc7b0JBSU07b0NBMUNSbEwsSUErQkx3SyxLQUFZRjtxQkFXQzs0QkFBSmE7MkJBWFRYLFFBQU1EOzZCQVdHWTs2QkFYR2IsTUFBWkUsUUFBTUQ7NkJBQU5DLFFBQVlGLE1BQU5DOzs7Z0NBQU5DLFFBQU1ELFFBQU1EO2tCQU9ELElBTlJ6SjtlQXdCSixVQXhCSUEsSUFEZXdKO1FBMkJuQjtZQW5DT2phO1NBbUNQLEdBbkNPQSxJQW1DSHFhO1NBRVMsZUFGVEEsR0FuQ0t2WTtTQXFDSTs7U0FDQSxpQkFGVHdZLEdBQ0l4QjtTQUNLOztTQWpERzFYLEdBZ0RaRjtTQWhEZUcsR0FpRGZGO1NBakRrQnlEO1FBQzFCO2FBRG9CeEQ7ZUFBR0M7Y0FLWCxJQURFcVksR0FKU3JZLE1BSWJzWSxHQUphdFksTUFJakJ1WSxHQUpjeFksTUFJbEJ5WSxHQUprQnpZLE1BS1IsYUFqQkZ3TyxJQWdCUmlLLEdBQVFGO2NBQ0UsU0FBSi9XO2dCQUNVLGNBRmhCaVgsR0FKd0JqVixNQUFOeEQsR0FJZHdZLEdBSmlCdlksR0FJVHFZLEdBSlk5VTtjQU9qQixPQUZEaEMsR0FHQyxjQUpQaVgsR0FKd0JqVixNQUFOeEQsR0FJZHdZLEdBSm9CaFY7Y0FLZCxJQUlILFVBTEMrVSxHQUpnQi9VLE1BQUh2RCxHQUlUcVksR0FKWTlVOztxQkFHZCxXQUhReEQsR0FBTXdEOztvQkFFZCxXQUZXdkQsR0FBR3VEO3lCQWlEZDRWLE1BQ29CO01BMEN4QixJQUFOalgsSUFBTSxTQXhHTXpCO01Bd0dOLFlBQU55QixJQUN1QixLQUR2QkEsSUF4R1l6QixPQXlHdUI7NkJBR2pCVixHQUFHQztVQUFId1gsUUFBR0M7TUFDekI7V0FEc0JEO2FBQUdDLHVCQUFIQyx1QkFBR0Q7VUFJZDtRQURBLE9BSGNBLFVBS2tCO2lDQUdqQmhYLEVBQUU5QjtVQUFGeVksTUFBRTNIO01BQzVCO1dBRDBCMkg7VUFNeEIsSUFES0MsSUFMbUJEO1VBTXhCLE9BTjBCM0gsS0FPeEIsUUFQd0JBLFlBQUYySCxJQUtuQkMsSUFMcUI1SDtVQU1YO1FBSGYsYUFIMEJBLG1CQU9HO3FCQVVuQnBCLEdBQUd0TyxHQUFHQztVQUFId1gsUUFBR0M7TUFDbEI7V0FEZUQ7YUFBR0M7WUFJRTthQUFORSxLQUpJRjthQUlSTSxHQUpRTjthQUlaQyxLQUpTRjthQUliUSxHQUphUjthQUlLLGdCQUpSbkosR0FJVjJKLEdBQVFEO1lBQVUsYUFKTFAsS0FJVEUsS0FKWUQsS0FJSkU7OztTQUZGLEtBRk1GLEtBRU47UUFDYSxTQUNxQjt1QkFFaENsSixJQUFJeE8sR0FBR0M7VUFBSHdYLFFBQUdDO01BQ3JCO1dBRGtCRDs7YUFBR0M7WUFNWCxJQURJRSxLQUxPRixRQUtYTSxHQUxXTixRQU1YLGFBTklsSixTQUtKd0o7WUFDQSxTQUFKeFcsT0FOWWlXLFVBQUdDLEtBS1BFO1lBRUcsT0FEWHBXO1VBRlE7UUFEQSxPQUhPa1csVUFRRztzQkFJZmhYO01BQ1QsU0FBUW1aLElBQUluWjtRQUFPLEdBQVBBO2NBRUhvWixLQUZHcFosS0FFUnpCLEVBRlF5QjtVQUVrQixVQUExQnpCLGlCZHBrQlAsT2Nra0JXNGEsSUFFQ0M7UUFEQyxRQUM2QjtNQUZ2QyxzQmRsa0JILE9ja2tCV0QsSUFEQ25aLFFBS0o7b0JBRUl5TDtNQUNULFNBQVE0TixPQUFPQyxNQUFNN047UUFDbkIsU0FEYTZOO1VBR1g7d0NBQW1CdE4sSUFBSXpOLEdBQUssVUFBTEEsRUFBSnlOLElBQWUsT0FIakJQO1FBS1IscUJBTFFBO1FBS1I7Y0FFTUwsY0FBSDdNO1VBQWlCLFVBQWpCQSxFQUFpQixPQVBsQithLGNBT0lsTztRQURGLFFBQ3FDO01BUHRELGtCQURTSyxJQVVLOzs7O09BempCWjhLOzs7T0FFQUU7T0FFQW5XO09BSUFEO09BSUFxVztPQVFBRztPQWVBTTs7T0FQQS9XO09BRUkwVzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztRY3JDSnlDLE9BQ0FDLE1BQ0FDO2FBU0FDLE1BQUluYixHQUFJLFlBQUpBLFdBQTRCO1FBQ2hDb2IscUJBQ0FDO2FBSUFDLE9BQU90YixHQUFJLE9BQUpBLE1BQWlCO2FBSXhCdWIsbUI1QnZDTDtRNEJ3Q0tDO2FBQ0FDLE1BQUl6YixFQUFFQyxHQUFRLE9BQVZELEtBQUVDLEVBQUZELEVBQUVDLENBQStCO2FBQ3JDeWIsTUFBSTFiLEVBQUVDLEdBQVEsT0FBUkEsS0FBRkQsSUFBRUMsQ0FBK0I7YUFVckMwYixZQUFVM2IsR0FBSSxtQ0FBSkEsRUFBcUI7Ozs7T0FsQy9CZ2I7T0FDQUM7T0FDQUM7T0FTQUM7T0FDQUM7T0FDQUM7T0FJQUM7T0FJQUM7T0FDQUM7T0FDQUM7T0FDQUM7T0FVQUM7O29CRFhLaGMsRUFBRTRDO01BQ0QsSUFBSjFDLEVBQUksa0JBRERGLEdBRVAsZ0JBRElFLElBREdGLEVBQUU0QyxHQUVULE9BREkxQyxDQUVIO29CQUVNRixFQUFFTjtNQUNELHdCQURETSxHQUNDLEtBRERBLFVBQ0M7O1lBQ1J4RTtRQUNFO1VBQWUsc0JBRmIwRSxFQUNKMUUsRUFDaUIsV0FIUmtFLEVBRVRsRTtVQUNpQixTQURqQkE7OztNQUdBLE9BSkkwRSxDQUlIO0lBRVM7a0JBRUhBO01BQ1AsNkJBRE9BLEdBRVAsb0JBRElxRDtNQUVKLGdCQUhPckQsSUFFSEwsSUFEQTBEO01BRUosT0FESTFELENBRUg7SUFOUyxrQkFRRTJCLEdBQXFCLGlDQUFyQkEsR0FBNkI7SUFSL0Isa0JBU0V0QixHQUFJLGlDQUFKQSxHQUE2QjtJQVQvQixhQVdKQSxFQUFFb0QsSUFBSUM7TTNCaEVmO2EyQmdFV0QsWUFBSUMsZ0NBQU5yRCxLQUFNcUQsV0FBSkQ7UUFJRSxJQUFKekQsRUFBSSxrQkFKRTBELEtBS1YsZ0JBTElyRCxFQUFFb0QsSUFJRnpELElBSk0wRCxLQUtWLE9BREkxRDtNQUZELDRDQUtGO0lBbEJPLG9CQW9CRzJCLEVBQUU4QixJQUFJQztNQUF1QixnQ0FBN0IvQixFQUFFOEIsSUFBSUMsS0FBc0M7SUFwQi9DLFNBdUJSMFksU0FBS2haLEVBQUV6QjtNQUNULE1BRE95QixJQUFFekIsTUFDVCxLQURTQSxVQUNULE1BQUlvQjtNQUFKLEdBRE9LOzs7T0FLQTtNbkIrYkQsZ0JtQmhjbUIsOEJBSHJCTCxDQUlJO0lBNUJFLGdCQThCRDFDLEVBQUVpSSxLQUFLQztNQUNOOzZCQUFWLHFCQURTbEksR0FBRWlJLE1BQUtDO09BRWhCLG9CQURJN0U7TUFDSixRQUZXNEU7V0FHRStULE9BSEYvVCxLQUdOZ1U7O1dBQVFELFNBQVJDLFNBSE1oVTtNQUNELElBR05pVSxPQUFTLE1BQWIscUJBSlNsYyxLQUdKaWMsV0FGRDVZLE1BRVMyWTtNQUNBLE9BQVRFLE9BQ2UsZ0JBTFZsYyxFQUdKaWMsT0FERHRjLEVBQ1NxYyxPQUNURTtNQUNtRCxPQUhuRHZjLENBSUg7SUFwQ1MsY0FzQ0hLLEVBQUVvRCxJQUFJQyxJQUFJWDtNM0IzRnBCO2EyQjJGWVUsWUFBSUMsZ0NBQU5yRCxLQUFNcUQsV0FBSkQ7T0FHSix1QkFIRXBELEVBQUVvRCxJQUFJQyxJQUFJWDtNQUVaLDhDQUN1QjtJQXpDbEIsY0EyQ0gxQixHQUFHbWIsS0FBS2xiLEdBQUdtYixLQUFLL1k7TTNCaEcxQjs7O1EyQmdHMEJBOzs7O1FBQWI4WTs7OytCQUFIbmIsTUFBZ0JxQyxXQUFiOFk7Ozs7UUFBUUM7OzsrQkFBSG5iLE1BQVFvQyxXQUFMK1k7T0FJYix1QkFKRXBiLEdBQUdtYixLQUFLbGIsR0FBR21iLEtBQUsvWTtNQUdsQixrQ0FDK0I7SUEvQzFCLGdCQWlESXJDLEdBQUdtYixLQUFLbGIsR0FBR21iLEtBQUsvWTtNM0J0R2pDOzs7UTJCc0dpQ0E7Ozs7UUFBYjhZOzs7Z0NBQUhuYixNQUFnQnFDLFdBQWI4WTs7OztRQUFRQzs7OytCQUFIbmIsTUFBUW9DLFdBQUwrWTtPQUlwQix3QkFKU3BiLEdBQUdtYixLQUFLbGIsR0FBR21iLEtBQUsvWTtNQUd6QixrREFDc0M7SUFyRGpDLGdCQXdESDdELEVBQUV1RDtNQUNULDhCQURTQSxXQUNUOzs7UUFBNkI7cUJBRHRCdkQsRUFDc0Isc0JBRHBCdUQsRUFDVHpIO1VBQTZCLFNBQTdCQTs7O2NBQW1EO0lBekR6QyxpQkE0REZrRSxFQUFFdUQ7TUFDViw4QkFEVUEsV0FDVjs7O1FBQTZCO3FCQURyQnZELEVBQ1JsRSxFQUE2QixzQkFEbkJ5SCxFQUNWekg7VUFBNkIsU0FBN0JBOzs7Y0FBc0Q7SUE3RDVDLGtCQStFRCtnQixJQUVQemE7TTNCdElMLEcyQnNJS0E7UUFBSyxnQ0FGRXlhLGlCQUVQemEsRUFBSzs7Ozs7Y0FsQmlCO2VBS2hCSztlQUxLOUIsZ0NBT2tCbWM7ZUFQUCxhQUFYbmMsSUFBaUM7O3FCQUt0QzhCOztxQkFETTs7O1VBZ0I0QixrREFGeENMOzs7OztvQkFQTTBZO2dCQUNOLHVCQUxpQmlDO2dCQU1qQjtrQkFHT0YsTUFUVUUsVUFLakIsK0JBTDZCRDtnQkFNN0I7Z0VBTjZCQTs7eUJBSXZCaEM7O2NBRE4sdUJBSGlCaUMsUUFHakI7cUJBSGlCQTtZQUNYLE9BRFdBO01BVVg7SUFoRkUsZUFzRkp2YixHQUFHQztNQUNUOytCQURNRDtPQUNOLHdCQURTQztPQUdELG9CQUZKQyxLQUNBQztNQUVKLGdCQUpNSCxLQUdGckIsSUFGQXVCO01BSUosZ0JBTFNELEtBR0x0QixFQUZBdUIsR0FDQUM7TUFHSixPQUZJeEIsQ0FHSDtJQTVGUyxTQWtHUjZjO01BQVc7Ozs7O01uQnlYUCxtQm1CdlhNO0lBcEdGLGNBc0dIeGM7TUFDUCw2QkFET0EsR0FDUDs7UUFFa0IsR0FEZDFFLE9BREErSCxPQUVjLCtCQUhYckQsRUFFSDFFO1VBRUY7UUFFRixJQUFJc1UsS0FMQXZNOztVQU1jLEdBTGQvSCxRQUlBc1UsUUFDYywrQkFQWDVQLEVBTUg0UDtZQUVGO1VBRUYsT0FSSXRVLFFBSUFzVSxLQUtGLElBWEs1UCxFQUVIMUUsTUFJQXNVLE9BSkF0VSw0QkFXRztJQW5IRyxtQkFxSEEwRTtNQUNWLHNDQURVQSxXQUNWOztZQUNBNkI7UUFDRTswQ0FIUTdCLEVBRVY2QjtVQUNFOzs7Ozs7Ozs7Ozs7VW5CbVdJO1VtQnJXRi9CO1VBRUYsU0FERitCOzs7TUFPQSxHQVJJL0IsU0FRSixxQkFUVUUsR0FTWSxZQVRaQTtNQUNWLElBU011USxJQUFLLGtCQVRQelE7TUFTTztNQVRYLElBU1csMEJBVkRFLFdBVUM7O1lBRVQxRTtRQUNFO3NDQWJNMEUsRUFZUjFFO1VBQ0UsU0FXRW9IOzs7Ozs7Ozs7Ozs7OztnQkFERSxzQkFiRjZOLElBVEZ6UTtnQkFzQkk7c0NBYkZ5USxJQVRGelE7OztnQkFrQkksc0JBVEZ5USxJQVRGelE7Z0JBa0JJO3NDQVRGeVEsSUFURnpROzs7Z0JBZ0JJLHNCQVBGeVEsSUFURnpRO2dCQWdCSTtzQ0FQRnlRLElBVEZ6UTs7O2dCQW9CSSxzQkFYRnlRLElBVEZ6UTtnQkFvQkk7c0NBWEZ5USxJQVRGelE7Ozs7O2FBeUJJLHNCQWhCRnlRLElBVEZ6UTthQXlCSTttQ0FoQkZ5USxJQVRGelEsV0F1QkU0QzthQUVFO21DQWhCRjZOLElBVEZ6USxZQXVCRTRDO2FBRUU7bUNBaEJGNk4sSUFURnpRLFdBdUJFNEM7OzthQVRFLHNCQUxGNk4sSUFURnpRO2FBY0k7bUNBTEZ5USxJQVRGelEsS0F1QkU0Qzs7bUJBQXFCLHNCQWRyQjZOLElBVEZ6USxLQXVCRTRDOztVQVdGO1VBdEJBLFNBREZwSDs7O01BeUJBLE9BM0JJaVYsR0E0Qkg7SUEzSk8sZUE2SkovUSxFQUFFUTtNQUNSLElBQUk0QixFQUFKLHFCQURRNUI7TUFDUixTQUFJNEIsRUFDVSxPQUZONUI7TUFDUixJQUVVLG9CQUZONEIsR0FFTSxLQUZOQSxVQUVNOztZQUNSdEc7UUFBc0I7VUFBZSxzQkFEakNxRSxFQUNKckUsRUFBcUMsV0FKakNrRSxFQUlrQixzQkFKaEJRLEVBSU4xRTtVQUFxQyxTQUFyQ0E7OztNQUNBLE9BRklxRSxDQUdIO0lBbktPLGdCQXFLSEgsRUFBRVE7TUFDVCxJQUFJNEIsRUFBSixxQkFEUzVCO01BQ1QsU0FBSTRCLEVBQ1UsT0FGTDVCO01BQ1QsSUFFVSxvQkFGTjRCLEdBRU0sS0FGTkEsVUFFTTs7WUFDUnRHO1FBQXNCO1VBQWU7WUFEakNxRSxFQUNKckUsRUFBcUMsV0FKaENrRSxFQUlMbEUsRUFBc0Isc0JBSmYwRSxFQUlQMUU7VUFBcUMsU0FBckNBOzs7TUFDQSxPQUZJcUUsQ0FHSDtJQTNLTyxxQkE2S0VILEVBQUVXLEVBQUU0QztNQUNoQixTQURjNUMsR0FDZCwwQkFEZ0I0QyxXQUNoQjs7WUFDQXpIO1FBQ0U7VUFBSyxrQkFIS2tFLEVBQ1JHLEtBRUYsc0JBSGNvRCxFQUVoQnpIO1VBQ08sU0FEUEE7OztNQUdBLE9BSklxRSxJQUlGO0lBbExRLHNCQW9MR0gsRUFBRXVELEVBQUU1QztNQUNqQixTQURpQkEsR0FDakIsMEJBRGU0QztNQUNmO1lBQ0F6SDtRQUNFO1VBQUssa0JBSE1rRSxFQUdYLHNCQUhhdUQsRUFFZnpILEdBRElxRTtVQUVHLFNBRFByRTs7O01BR0EsT0FKSXFFLElBSUY7SUF6TFEsa0JBMkxEaVAsRUFBRTVPO01BQ1gsMkJBRFdBLEdBRUUxRTtNQUNYO1dBRFdBLE1BRFR3RSxFQUVZO1FBQ04sY0FKRDhPLEVBSUYsc0JBSkk1TyxFQUVFMUUsSUFFcUI7UUFDM0IsUUFITUE7aUJBSVA7SUFqTUksbUJBbU1Bc1QsRUFBRTVPO01BQ1osMkJBRFlBLEdBRUMxRTtNQUNYO1dBRFdBLE1BRFR3RSxFQUVZO1FBQ04sY0FKQThPLEVBSUgsc0JBSks1TyxFQUVDMUU7VUFFcUIsUUFGckJBO1FBR04sU0FDRDtJQXpNSSwyQkEyTVEwRSxHQUFJLGFEN0xwQnFXLGdCQzZMZ0JyVyxFQUE4QjtJQTNNdEMsMkJBNE1RQSxHQUFJLGFEbE1wQm9XLGdCQ2tNZ0JwVyxFQUE4QjtJQTVNdEMsU0E4TVJ5YyxPQUFPamQsRUFBRVE7TUFDWCw4QkFEV0EsR0FDVSxPQURWQTtNQUVELElBQUpMLEVBQUksS0FGQ0s7TUFHTSxzQkFEWEwsSUFDVyxXQUhSSCxFQUVDLHNCQUZDUTtNQUdNLE9BRFhMLENBR0g7SUFuTk8sMEJBcU5TSyxHQUFJLGNEdk1yQnFXLGdCQ3VNaUJyVyxFQUFpQztJQXJOMUMsNEJBc05XQSxHQUFJLGNENU12Qm9XLGdCQzRNbUJwVyxFQUFpQztJQXRONUMscUJBeU5LMGMsT0FBTzFjO01BQ3RCO2tDQURzQkE7T0FDdEIsNkJBRGUwYztPQUNmLEtBQ0lFLFdBREFEO01BQUo7WUFFWXJoQjtRQUNWO2FBRFVBLE1BRFJzaEIsUUFFa0I7VUFDZix5QkFMZTVjLEVBR1YxRSxPQUVMLHNCQUxRb2hCLE9BR0hwaEI7V0FFeUM7VUFDOUMsUUFIS0E7O01BTmEsV0FVRztJQWhPbEIsbUJBbU9HdWhCLE9BQU83YztNQUNwQjtrQ0FEb0JBO09BQ3BCLDZCQURhNmM7T0FDYixLQUFJRixRQUNBRztPQURKLFVBRUlDO01BRko7WUFHWXpoQjtRQUNWO2FBRFVBLE1BRlJ3aEIsUUFHa0I7VUFDZjtrQ0FOYTljLEVBR2hCK2MsT0FDUXpoQjs7WUFFTCxzQkFOTXVoQixPQUlEdmhCO1dBRWtEO1VBQ3ZELFFBSEtBOztNQVZWLFdBY21CO0lBM09YLFNBOE9KMGhCLFVBQVVoZCxFQUFFaWQsSUFBSTNoQixFQUFFb0g7TTNCblMzQixJMkJtU3lCYjtNQUN0QjtXQURrQm9iLE9BQUlwYixJQUNMO1FBQ2pCLHlCQUZnQjdCLEVBQU02QixTQUFFYSxFQUVHLE9BRkxiO1FBRVksUUFGWkE7aUJBRXFDO0lBaFBqRCxlQW1QRjdCLEVBQUUwQyxHQUFJLGlCQUFOMUMsRUFBTSxxQkFBTkEsS0FBRTBDLEVBQThCO0lBblA5QixTQXNQSnlhLGNBQWNuZCxFQUFFaWQsSUFBSTNoQixFQUFFb0g7TTNCM1MvQixJMkIyUzZCYjtNQUMxQjtXQURzQm9iLE9BQUlwYixJQUNUO1FBQ2pCLHlCQUZvQjdCLEVBQU02QixTQUFFYSxFQUVELFVBRkRiO1FBRWEsUUFGYkE7aUJBRTBDO0lBeFAxRCxtQkEyUEU3QixFQUFFMEM7TUFBSSxxQkFBTjFDLEVBQU0scUJBQU5BLEtBQUUwQyxFQUFrQztJQTNQdEMsb0JBOFBHMUMsRUFBRTFFLEVBQUVvSDtNQUNqQixJQUFJZCxFQUFKLHFCQURhNUI7Y0FBRTFFLFFBQ1hzRyxJQURXdEcsR0FHZixpQkFIYTBFLEVBQ1Q0QixFQURXdEcsRUFBRW9IO01BRU0sa0RBQ047SUFqUVAsd0JBb1FPMUMsRUFBRTFFLEVBQUVvSDtNQUNyQixJQUFJZCxFQUFKLHFCQURpQjVCO2NBQUUxRSxRQUNmc0csSUFEZXRHLEdBS2pCLHFCQUxlMEUsRUFDYjRCLEVBRGV0RyxFQUFFb0g7TUFHbkIsa0RBRXFCO0lBelFiLFNBNFFKMGEsV0FBV3BkLEVBQUUxRSxFQUFFb0g7TTNCalV4QixJMkJpVXNCYjtNQUNuQjtnQkFEbUJBO1VBRW5CLHlCQUZpQjdCLEVBQUU2QixTQUFFYSxFQUVNLE9BRlJiO1VBRWUsUUFGZkE7O1FBQ0wsZ0JBQzBDO0lBOVE5QyxnQkFpUkQ3QixFQUFFMEM7TUFBSSxrQkFBTjFDLEVBQU0scUJBQU5BLFdBQUUwQyxFQUFpQztJQWpSbEMscUJBb1JJMUMsRUFBRTFFLEVBQUVvSDtNM0J6VXJCLFMyQnlVbUJwSCw2QkFBRjBFLE1BQUUxRSxHQUlkLGtCQUpZMEUsRUFBRTFFLEVBQUVvSDtNQUVoQixrREFFZ0I7SUF4UlIsU0EyUkoyYSxlQUFlcmQsRUFBRTFFLEVBQUVvSDtNM0JoVjVCLEkyQmdWMEJiO01BQ3ZCO2dCQUR1QkE7VUFFdkIseUJBRnFCN0IsRUFBRTZCLFNBQUVhLEVBRUUsVUFGSmI7VUFFZ0IsUUFGaEJBOztRQUNULFNBQ21EO0lBN1J2RCxvQkFnU0c3QixFQUFFMEM7TUFBSSxzQkFBTjFDLEVBQU0scUJBQU5BLFdBQUUwQyxFQUFxQztJQWhTMUMseUJBbVNRMUMsRUFBRTFFLEVBQUVvSDtNM0J4VnpCLFMyQndWdUJwSCw2QkFBRjBFLE1BQUUxRTtPQUlsQixzQkFKZ0IwRSxFQUFFMUUsRUFBRW9IO01BRXBCLGtEQUVvQjtJQXZTWix1QkEyU00xQyxFQUFFMUUsRUFBRW9IO01BQ3BCLElBQUlkLEVBQUoscUJBRGdCNUI7Y0FBRTFFLFFBQ2RzRyxJQURjdEc7T0FLaEI7U0FBVyxVQUxHMEUsRUFDWjRCLEVBRGN0RyxFQUFFb0gsR0FLUDs7OytCQUE0Qzs7TUFGdkQsa0RBRTREO0lBaFRwRCxrQkFvVEMxQyxFQUFFMEMsR0FBSSxxQkFBTjFDLElBQUUwQyxFQUF1QjtJQXBUMUIsd0JBdVRPMUMsRUFBRTFFLEVBQUVvSDtNM0I1V3hCLFEyQjRXc0JwSCw2QkFBRjBFLE1BQUUxRTtPQUlqQjtTQUFXLFdBSkkwRSxFQUFFMUUsRUFBRW9ILEdBSVI7OzsrQkFBMkM7O01BRnRELGtEQUUyRDtJQTNUbkQsbUJBZ1VDdkMsRUFBT0MsR0FBUSxrQ0FBZkQsRUFBT0MsRUFBMEI7SUFoVWxDLHVCQW9VTWljLElBQUlyYztNQUNwQjs7aUNBRG9CQTtPQUNwQiwwQkFEb0JBO01BQ3BCO1lBRUExRTtRQUNFO21DQUprQjBFLEVBR3BCMUUsT0FIZ0IrZ0I7WUFJZSxTQUgzQjFjO1lBSUssY0FMV0ssRUFHcEIxRSxXQURJc1UsT0FDSnRVO1lBRVMsT0FGVEE7Ozs7TUFGQSxTQUFJcUU7TUFRSixjQVRvQkssSUFFaEI0UCxXQU9ZO0lBN1VOLHFCQWlWRTVQLEdBQUksYUQ5VWRtVyxVQzhVVW5XLEVBQXdCO0lBalYxQixxQkFrVkVBLEdBQUksYUR0VmRrVyxVQ3NWVWxXLEVBQXdCO0lBbFYxQixvQkFvVkdBLEdBQUksY0RqVmZtVyxVQ2lWV25XLEVBQTJCO0lBcFY5QixzQkFxVktBLEdBQUksY0R6VmpCa1csVUN5VmFsVyxFQUEyQjtJQXJWaEMsa0JBeVZEQTtNQUNULFNBQVErYSxJQUFJemY7UUFDVixHQURVQSxNQUNWLHFCQUZPMEUsR0FFYztRQUVYLHFCQUpIQSxFQUNHMUUsR0FHQSxLQUhBQTtRQUlLLFVBRFQ2RSxpQjNCbFpYLE8yQitZVzRhLGdCQUltQjtNQUozQjs0QjNCL1lILE8yQitZV0EsZUFNSDtJQWhXSyxpQkFrV0EvYTtNQUNWLFNBQVErYSxJQUFJemY7UUFDVixHQURVQSxNQUNWLHFCQUZRMEUsR0FFYTtRQUVYLHFCQUpGQSxFQUNFMUUsR0FHQSxLQUhBQTtRQUlTLGFBSlRBLEVBR0o2RSxrQjNCM1pYLE8yQndaVzRhLGdCQUl1QjtNQUovQjs0QjNCeFpILE8yQndaV0EsZUFNSDtJQXpXSyxrQkEyV0R6ZjtNQUNULFlBQ2M7TUFTZDtpQkFDT29IO1VBQ0YsR0FaRDVDLFNBWUMscUJBWEQyRTtZQUdZO2FBQVY2WTtjQUFVLFVBQWQscUJBSEU3WTtZQUdZLHdCQUhaQSxZQUdFNlk7YUFDMEI7WUFEaEIsSUFFVkMsUUFBVSxPQUZWRDtZQUdKLEtBTkU3WSxTQUtFOFksVUFORnpkO1lBT0YsU0FESXlkO1VBT0QsZUFaRDlZLE9BREEzRSxLQVdHNEM7VUFFRjtrQkFDTTtRQWZGcEg7TUFXVCxXQVRJbUosU0FEQTNFLEtBZ0JTO0lBNVhILFNBNHNCSjBkLE1BblRpQmxjLEVBQUVoRyxHQUdiLHFDQUhXZ0csRUFBRWhHLEdBR2E7SUE1WjVCLGtCQThaQ2dHLEVBQUVoRyxHQUNaLHNCQURVZ0csRUFBRWhHLGNBQ2tEO0lBL1pyRCx1QkFpYU1nRyxFQUFFaEcsR0FFYix3QkFGV2dHLEVBQUVoRyxFQUVJO0lBbmFaLHVCQXFhTWdHLEVBQUVoRyxHQUNnQixxQ0FEbEJnRyxFQUFFaEcsR0FFSTtJQXZhWixzQkF5YUtnRyxFQUFFaEcsR0FDaEIsd0JBRGNnRyxFQUFFaEcsY0FDb0Q7SUExYTNELHNCQTRhS2dHLEVBQUVoRyxHQUNoQix3QkFEY2dHLEVBQUVoRyxjQUNvRDtJQTdhM0Qsc0JBK2FLZ0csRUFBRWhHLEdBQ2hCLHFCQURjZ0csRUFBRWhHLGNBQ29EO0lBaGIzRCxzQkFrYktnRyxFQUFFaEcsR0FFWix3QkFGVWdHLEVBQUVoRyxFQUVJO0lBcGJYLHNCQXNiS2dHLEVBQUVoRyxHQUNtQyx3QkFBbEIsaUJBRG5CZ0csRUFBRWhHLEdBRUk7SUF4Ylgsc0JBMGJLZ0csRUFBRWhHLEdBRVosd0JBRlVnRyxFQUFFaEcsRUFFSTtJQTViWCxzQkE4YktnRyxFQUFFaEcsR0FDbUMsd0JBQWxCLGlCQURuQmdHLEVBQUVoRyxHQUVJO0lBaGNYLFNBeXJCTm1pQixNQWxQbUJuYyxFQUFFaEcsRUFBRTZFLEdBRzNCLHdCQUh1Qm1CLEVBQUVoRyxFQUd6QixhQUgyQjZFLEdBR1E7SUExY3pCLHNCQTRjS21CLEVBQUVoRyxFQUFFNkUsR0FFZCx3QkFGVW1CLEVBQUVoRyxFQUFFNkUsRUFFSTtJQTljYixzQkFnZEttQixFQUFFaEcsRUFBRTZFLEdBQ1Esd0JBRFptQixFQUFFaEcsRUFDVSxhQURSNkUsR0FFSTtJQWxkYixzQkFvZEttQixFQUFFaEcsRUFBRTZFLEdBRWQsd0JBRlVtQixFQUFFaEcsRUFBRTZFLEVBRUk7SUF0ZGIsc0JBd2RLbUIsRUFBRWhHLEVBQUU2RTtNQUNRLHdCQURabUIsRUFBRWhHLEVBQzJCLGlCQUR6QjZFLEdBRUk7SUExZGIsc0JBNGRLbUIsRUFBRWhHLEVBQUU2RSxHQUVkLHdCQUZVbUIsRUFBRWhHLEVBQUU2RSxFQUVJO0lBOWRiLHNCQWdlS21CLEVBQUVoRyxFQUFFNkU7TUFDUSx3QkFEWm1CLEVBQUVoRyxFQUMyQixpQkFEekI2RSxHQUVJO0lBbGViO2FBNGVDdWQsUUFBUTVkLEVBQUVrTyxHM0JqaUJ4QixPQzRFYytKLFcwQnFkUWpZLEVBQUVrTyxFQUE4QztJQTVlekQsU0E4ZkMyUCxrQkFBa0JyYyxHQUFJLGNBQUpBLGdCQUFtQjtJQTlmdEMsU0ErZkNzYyxrQkFBa0J0YyxHQUFJLGNBQUpBLGdCQUFvQjtJQS9mdkMsU0FnZ0JDdWMsa0JBQWtCdmMsR0FBSSxjQUFKQSxnQkFBb0I7SUFoZ0J2QyxTQWlnQkN3YyxrQkFBa0J4YztNQUFJLFNBQUpBLFlBQUksb0JBQUpBLE9BREksV0FDb0I7SUFqZ0IzQyxTQWtnQkN5YyxrQkFBa0J6YyxHQUFJLGNBQUpBLGdCQUFrQjtJQWxnQnJDLFNBd2dCQzBjLGNBQWNDLEdBQUdDLEdBQUdDO01BQy9CLFFBRHlCRixrQkFBR0MsZ0JBQUdDLE9BR2Y7SUEzZ0JOLFNBNmdCQ0MsY0FBY0gsR0FBR0MsR0FBR0MsR0FBR0U7TUFDbEMsUUFEeUJKLGlCQUFHQyxrQkFBR0MsZ0JBQUdFLE9BSWxCO0lBamhCTix5QkFtaEJRL2MsRUFBRWhHO01BQ1gsc0JBRFNnRyxFQUFFaEcsR0FDWCx5QkFEU2dHO01BQ1QsVUFoQmdCMmM7Ozs7OztjQXNDckIsSUFBSXBjLElBdkJZdkc7Y0F1QmhCLEdBcEJBK0UsTUFvQkl3QixJQUE2QjtjQUFqQyxJQUNJcWMsR0FBSyxzQkF4Qks1YyxFQXVCVk87Y0FDbUIscUJBQW5CcWMsSUFBNkM7Y0FEakQsSUFFSWhCLElBRkFyYjtjQUVKLEdBdEJBeEIsTUFzQkk2YyxJQUE2QjtjQUZqQyxJQUdJaUIsR0FBSyxzQkExQks3YyxFQXlCVjRiO2NBQ21CLHlCQUFuQmlCO3VCQUE2Qzt1QkFDdkMsd0JBMUNXRixHQXVDakJDLEdBRUFDOztjQUdKLElBQUlHLElBN0JZaGpCO2NBNkJoQixHQTFCQStFLE1BMEJJaWUsSUFBNkI7Y0FBakMsSUFDSUMsS0FBSyxzQkE5QktqZCxFQTZCVmdkO2NBQ21CLHFCQUFuQkMsTUFBNkM7Y0FEakQsSUFFSUMsSUFGQUY7Y0FFSixHQTVCQWplLE1BNEJJbWUsSUFBNkI7Y0FGakMsSUFHSUMsS0FBSyxzQkFoQ0tuZCxFQStCVmtkO2NBQ21CLHFCQUFuQkMsTUFBNkM7Y0FIakQsSUFJSUMsSUFGQUY7Y0FFSixHQTlCQW5lLE1BOEJJcWUsSUFBNkI7Y0FKakMsSUFLSUwsR0FBSyxzQkFsQ0svYyxFQWlDVm9kO2NBQ21CLHlCQUFuQkw7dUJBQTZDO3VCQUN2Qyx3QkFsRFdKLEdBNkNqQk0sS0FFQUUsS0FFQUo7O2NBV0osSUFBSU0sS0E3Q1lyakI7Y0E2Q2hCLEdBMUNBK0UsTUEwQ0lzZSxLQUE2QjtjQUFqQyxJQUNJQyxLQUFLLHNCQTlDS3RkLEVBNkNWcWQ7Y0FDbUIscUJBQW5CQyxNQUE2QztjQURqRCxJQUVJQyxLQUZBRjtjQUVKLEdBNUNBdGUsTUE0Q0l3ZSxLQUE2QjtjQUZqQyxJQUdJQyxLQUFLLHNCQWhES3hkLEVBK0NWdWQ7Y0FDbUIscUJBQW5CQyxNQUE2QztjQUhqRCxJQUlJQyxLQUZBRjtjQUVKLEdBOUNBeGUsTUE4Q0kwZSxLQUE2QjtjQUpqQyxJQUtJQyxLQUFLLHNCQWxESzFkLEVBaURWeWQ7Y0FDbUIseUJBQW5CQzt1QkFBNkM7dUJBQ3ZDLHdCQWxFV2YsR0E2RGpCVyxLQUVBRSxLQUVBRTs7OztjQWJKLElBQUlDLElBckNZM2pCO2NBcUNoQixHQWxDQStFLE1Ba0NJNGUsSUFBNkI7Y0FBakMsSUFDSUMsS0FBSyxzQkF0Q0s1ZCxFQXFDVjJkO2NBQ21CLHFCQUFuQkMsTUFBNkM7Y0FEakQsSUFFSUMsSUFGQUY7Y0FFSixHQXBDQTVlLE1Bb0NJOGUsSUFBNkI7Y0FGakMsSUFHSUMsS0FBSyxzQkF4Q0s5ZCxFQXVDVjZkO2NBQ21CLHFCQUFuQkMsTUFBNkM7Y0FIakQsSUFJSUMsSUFGQUY7Y0FFSixHQXRDQTllLE1Bc0NJZ2YsSUFBNkI7Y0FKakMsSUFLSUMsS0FBSyxzQkExQ0toZSxFQXlDVitkO2NBQ21CLHlCQUFuQkM7dUJBQTZDO3VCQUN2Qyx3QkExRFdyQixHQXFEakJpQixLQUVBRSxLQUVBRTs7dUJBekRpQnJCO1lBMEJyQixJQUFJc0IsS0FYWWprQjtZQVdoQixHQVJBK0UsTUFRSWtmLEtBQTZCO1lBQWpDLElBQ0lDLEtBQUssc0JBWktsZSxFQVdWaWU7WUFDbUIscUJBQW5CQyxNQUE2QztZQURqRCxJQUVJQyxLQUZBRjtZQUVKLEdBVkFsZixNQVVJb2YsS0FBNkI7WUFGakMsSUFHSUMsS0FBSyxzQkFkS3BlLEVBYVZtZTtZQUNtQix5QkFBbkJDO3FCQUE2QztxQkFDdkMsd0JBOUJXekIsR0EyQmpCdUIsS0FFQUU7O1FuQnRFRjtVbUJ5RUYsSUFBSUMsSUFqQllya0I7VUFpQmhCLEdBZEErRSxNQWNJc2YsSUFBNkI7VUFBakMsSUFDSUMsS0FBSyxzQkFsQkt0ZSxFQWlCVnFlO1VBQ21CLHFCQUFuQkMsTUFBNkM7VUFEakQsSUFFSUMsSUFGQUY7VUFFSixHQWhCQXRmLE1BZ0JJd2YsSUFBNkI7VUFGakMsSUFHSUMsS0FBSyxzQkFwQkt4ZSxFQW1CVnVlO1VBQ21CLHlCQUFuQkM7bUJBQTZDO21CQUN2Qyx3QkFwQ1c3QixHQWlDakIyQixLQUVBRTs7cUJBbkNpQjdCLElBb0JILGlCQXBCR0E7O1VBc0JyQixJQUFJOEIsS0FQWXprQjtVQU9oQixHQUpBK0UsTUFJSTBmLEtBQTZCO1VBQWpDLElBdEJ3QkMsS0F1QmYsc0JBUksxZSxFQU9WeWU7VUFDbUIseUJBdkJDQzttQkF1QnlCO21CQS9DMUN0QyxXQXdCY08sZ0JBQUcrQjtNQW1FckIscUJBQWE7SUF2a0JWLHlCQXlrQlExZSxFQUFFaEcsRUFJbEIwUztNQUhGLFNBQUlpUztRM0IvbkJQO00yQituQkcsSUFDSTVmLElBREoscUJBRGtCaUI7Y0FJaEIwTTtRQUNPLFNBRFBBO1VBSU8sVUFKUEE7WUFVTyxXQVZQQTtjQWlCTyxhQWpCUEEsRUF5Qks7Y0FQSCxJQUFJa1MsS0F0Qlk1a0I7Y0FzQmhCLE9BcEJBK0UsTUFvQkk2Zjs7d0JBRUgsZUF4QmE1ZSxFQUFFaEcsUUFJbEIwUzt3QkFxQkcsSUF6QmExTSxFQUFFaEcsaUJBSWxCMFM7d0JBc0JHLElBMUJhMU0sRUFBRWhHLGlCQUlsQjBTO3dCQXVCRyxJQTNCYTFNLEVBc0JWNGUsV0FsQk5sUzs7WUFXRSxJQUFJbVMsT0FmWTdrQjtZQWVoQixPQWJBK0UsTUFhSThmOztzQkFFSCxlQWpCYTdlLEVBQUVoRyxRQUlsQjBTO3NCQWNHLElBbEJhMU0sRUFBRWhHLGlCQUlsQjBTO3NCQWVHLElBbkJhMU0sRUFlVjZlLGFBWE5uUzs7VUFLRSxJQUFJb1MsT0FUWTlrQjtVQVNoQixPQVBBK0UsTUFPSStmOztvQkFFSCxlQVhhOWUsRUFBRWhHLFFBSWxCMFM7b0JBUUcsSUFaYTFNLEVBU1Y4ZSxhQUxOcFM7O1FBRUUsZUFOYzFNLEVBQUVoRyxFQUlsQjBTO1FBRUU7TUFGYyw0QkF5QkM7SUF0bUJULHdCQXltQk8xTTtNQUFqQiw2QkFBaUJBLFdBQUVoRztNQUNqQjtXQURXK0UsTUFBTS9FLEVBQ0Q7UUFFTSxnQ0FIUGdHLEVBQUVoRztRQUdLOzs7Ozs7Z0JBdUJsQixJQUFJNGtCLEtBMUJTNWtCO2dCQTZCVjs7bUJBN0JJK0UsTUEwQkg2Zjs7O2tCQUVELGtCQUFrQixzQkE1QlY1ZSxFQUFFaEc7OztrQkE2QlYsa0JBQWtCLHNCQTdCVmdHLEVBMEJQNGU7a0JBS0MsUUFMREEsYUExQlM1a0I7Z0JBOEJSOztnQkFHTCxJQUFJOGtCLE9BakNTOWtCO2dCQXFDVjs7bUJBckNJK0UsTUFpQ0grZjs7O2tCQUVELGtCQUFrQixzQkFuQ1Y5ZSxFQUFFaEc7OztrQkFvQ1Ysa0JBQWtCLHNCQXBDVmdHLEVBQUVoRzs7O2tCQXFDVixrQkFBa0Isc0JBckNWZ0csRUFpQ1A4ZTtrQkFNQyxRQU5EQSxlQWpDUzlrQjtnQkFzQ1I7O2dCQVdMLElBQUkra0IsT0FqRFMva0I7Z0JBcURWOzttQkFyREkrRSxNQWlESGdnQjs7O2tCQUVELGtCQUFrQixzQkFuRFYvZSxFQUFFaEc7OztrQkFvRFYsa0JBQWtCLHNCQXBEVmdHLEVBQUVoRzs7O2tCQXFEVixrQkFBa0Isc0JBckRWZ0csRUFpRFArZTtrQkFNQyxRQU5EQSxlQWpEUy9rQjtnQkFzRFI7Ozs7Z0JBYkwsSUFBSWdsQixPQXpDU2hsQjtnQkE2Q1Y7O21CQTdDSStFLE1BeUNIaWdCOzs7a0JBRUQsa0JBQWtCLHNCQTNDVmhmLEVBQUVoRzs7O2tCQTRDVixrQkFBa0Isc0JBNUNWZ0csRUFBRWhHOzs7a0JBNkNWLGtCQUFrQixzQkE3Q1ZnRyxFQXlDUGdmO2tCQU1DLFFBTkRBLGVBekNTaGxCO2dCQThDUjs7O2NBbENMLElBQUlpbEIsT0FaU2psQjtjQWVWOztpQkFmSStFLE1BWUhrZ0I7OztnQkFFRCxrQkFBa0Isc0JBZFZqZixFQUFFaEc7OztnQkFlVixrQkFBa0Isc0JBZlZnRyxFQVlQaWY7Z0JBS0MsUUFMREEsZUFaU2psQjtjQWdCUjs7VW5COUpMO1ltQmlLQSxJQUFJNmtCLE9BbkJTN2tCO1lBc0JWOztlQXRCSStFLE1BbUJIOGY7OztjQUVELGtCQUFrQixzQkFyQlY3ZSxFQUFFaEc7OztjQXNCVixrQkFBa0Isc0JBdEJWZ0csRUFtQlA2ZTtjQUtDLFFBTERBLGVBbkJTN2tCO1lBdUJSOzsrQkFuQmEsUUFKTEE7O1lBTWIsSUFBSWtsQixPQU5TbGxCO1lBUVY7O2VBUkkrRSxNQU1IbWdCOzs7Y0FFRCxrQkFBa0Isc0JBUlZsZixFQU1Qa2Y7Y0FJQyxRQUpEQSxlQU5TbGxCO1lBU1I7UUErQ0YsU0FFYztJQW5xQmIsNEJBdXFCV2dHLEVBQUVoRztNQUN2QixJQUNJK0UsSUFESixxQkFEcUJpQjtjQUFFaEcsUUFFbkIrRSxNQUZtQi9FO1FBSXZCLEdBSnVCQSxNQUVuQitFLElBRVk7UUFDVixJQUdKb2dCLEdBSEksTUFMZW5mLEVBQUVoRztvQkFRckJtbEI7VUFETyxXQUNQQSxHQURxQjtVQUVuQixJQUFJUCxLQVRlNWtCO1VBU25CLEdBUEErRSxNQU9JNmYsS0FDZSxvQkFSbkI3ZixNQUZtQi9FO1VBU25CLElBR0UwUyxFQURJLE1BWFcxTSxFQUFFaEc7c0JBWWpCMFM7WUFFRSxJQUFJQyxNQU5Wd1MsbUJBSUl6UztZQUVFLGlCQUFJQztVQUY2QjtRQU5KLGlCQUVuQ3dTO01BTHVCLDJDQVlOO0lBdHJCVCw0QkF3ckJXbmYsRUFBRWhHLEVBS3JCMFM7TUFKRixJQUNJM04sSUFESixxQkFEcUJpQjtjQUFFaEcsUUFFbkIrRSxNQUZtQi9FO2dCQUtyQjBTO1VBQ08sV0FEUEE7WUFJTyxhQUpQQSxFQVdLO1lBTkgsSUFBSWtTLEtBVmU1a0I7WUFVbkIsR0FSQStFLE1BUUk2ZixLQUNlO1lBRG5CO2FBRUEsSUFQRmxTO2FBT0UsV0FBSUM7YUFBSixXQUFJQTtZQUdKLE1BZmlCM00sRUFBRWhHLEVBYWZtbEI7WUFFUSxNQWZLbmYsRUFBRWhHLFVBY2ZvbEI7WUFDUTtVQVJaLElBQUlQLE9BUGU3a0I7VUFPbkIsT0FMQStFLE1BS0k4ZixVQUN1QixNQVJWN2UsRUFBRWhHLEVBS3JCMFM7UUFBZ0I7TUFGTyw2Q0FhTjtJQXhzQlQsMkJBMnNCTzFNO01BQWpCLDZCQUFpQkEsV0FBRWhHO01BQ2pCO1dBRFcrRSxNQUFNL0UsRUFFRDtRQUNoQixHQUhpQkEsTUFBTitFLElBR0s7UUFDVixJQUVKMk4sRUFGSSxNQUpTMU0sRUFBRWhHO29CQU1mMFM7VUFBTyxXQUFQQSxFQUFxQjtVQUVuQixJQUFJa1MsS0FSUzVrQjtVQVFiLEdBUk8rRSxNQVFINmYsS0FDZTtVQURuQixJQUdFalMsSUFESSxNQVZLM00sRUFBRWhHO3NCQVdYMlM7WUFDTyxRQVpJM1M7VUFXd0I7UUFQbkMsSUFDK0IsSUFMcEJBO2lCQWNJO0lBenRCYiw0QkE2dEJXZ0csRUFBRWhHO01BQ3ZCLElBQ0krRSxJQURKLHFCQURxQmlCO2NBQUVoRyxRQUVuQitFLE1BRm1CL0U7UUFJdkIsR0FKdUJBLE1BRW5CK0UsSUFFWTtRQUNWLElBR0pvZ0IsR0FISSxpQkFMZW5mLEVBQUVoRztvQkFRckJtbEI7VUFETyxXQUNQQSxHQURxQjtVQUVuQixJQUFJUCxLQVRlNWtCO1VBU25CLEdBUEErRSxNQU9JNmYsS0FDZSxvQkFSbkI3ZixNQUZtQi9FO1VBU25CLElBR0UwUyxFQURJLGlCQVhXMU0sRUFBRWhHO3NCQVlqQjBTO1lBRUUsSUFBSUMsTUFOVndTLG1CQUlJelM7WUFFRSxpQkFBSUM7VUFGNkI7UUFOSixpQkFFbkN3UztNQUx1Qiw2Q0FZTjtJQTV1QlQsNEJBOHVCV25mLEVBQUVoRyxFQUtyQjBTO01BSkYsSUFDSTNOLElBREoscUJBRHFCaUI7Y0FBRWhHLFFBRW5CK0UsTUFGbUIvRTtnQkFLckIwUztVQUNPLFdBRFBBO1lBSU8sYUFKUEEsRUFXSztZQU5ILElBQUlrUyxLQVZlNWtCO1lBVW5CLEdBUkErRSxNQVFJNmYsS0FDZTtZQURuQjthQUVBLElBUEZsUzthQU9FLFdBQUlDO2FBQUosV0FBSUE7WUFHSixpQkFmaUIzTSxFQUFFaEcsRUFhZm1sQjtZQUVRLGlCQWZLbmYsRUFBRWhHLFVBY2ZvbEI7WUFDUTtVQVJaLElBQUlQLE9BUGU3a0I7VUFPbkIsT0FMQStFLE1BS0k4ZixVQUN1QixpQkFSVjdlLEVBQUVoRyxFQUtyQjBTO1FBQWdCO01BRk8sNkNBYU47SUE5dkJULDJCQWl3Qk8xTTtNQUFqQiw2QkFBaUJBLFdBQUVoRztNQUNqQjtXQURXK0UsTUFBTS9FLEVBRUQ7UUFDaEIsR0FIaUJBLE1BQU4rRSxJQUdLO1FBQ1YsSUFFSjJOLEVBRkksaUJBSlMxTSxFQUFFaEc7b0JBTWYwUztVQUFPLFdBQVBBLEVBQXFCO1VBRW5CLElBQUlrUyxLQVJTNWtCO1VBUWIsR0FSTytFLE1BUUg2ZixLQUNlO1VBRG5CLElBR0VqUyxJQURJLGlCQVZLM00sRUFBRWhHO3NCQVdYMlM7WUFDTyxRQVpJM1M7VUFXd0I7UUFQbkMsSUFDK0IsSUFMcEJBO2lCQWNJO0lBL3dCYjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CRWJId0UsRUFBRTRDLEdBQ1QsbUNBRE81QyxFQUFFNEMsR0FDUTtvQkFDVjVDLEVBQUVOLEdBQ1QsbUNBRE9NLEVBQUVOLEdBQ1E7b0JBRVZRO01BQ1AsaUNBQU8scUJBREFBLElBQ2M7bUJBR2ZBLEVBQUVvRCxJQUFJQztNQUNaLGdDQUFNLHFCQURBckQsR0FBRW9ELElBQUlDLEtBQ2dCO3NCQXNCbkJnWixJQUVQemE7TTdCMUVMLEc2QjBFS0E7UUFBSyxpQ0FGRXlhLGlCQUVQemEsRUFBSzs7Ozs7Y0FsQmlCO2VBS2hCSztlQUxLOUIsaUNBT2tCbWM7ZUFQUCxhQUFYbmMsSUFBaUM7O3FCQUt0QzhCOztxQkFETTs7O1VBZ0I4QixrREFGMUNMOzs7OztvQkFQTTBZO2dCQUNOLHdCQUxpQmlDO2dCQU1qQjtrQkFHT0YsTUFUVUUsVUFLakIsZ0NBTDZCRDtnQkFNN0I7aUVBTjZCQTs7eUJBSXZCaEM7O2NBRE4sd0JBSGlCaUMsUUFHakI7d0NBSGlCQTtNQVVYO29CQVNEL2MsRUFBRVE7TUFDVCwrQkFEU0EsV0FDVDs7O1FBQTZCO3FCQUR0QlIsRUFDc0IsdUJBRHBCUSxFQUNUMUU7VUFBNkIsU0FBN0JBOzs7Y0FBb0Q7cUJBRzVDa0UsRUFBRVE7TUFDViwrQkFEVUEsV0FDVjs7O1FBQTZCO3FCQURyQlIsRUFDUmxFLEVBQTZCLHVCQURuQjBFLEVBQ1YxRTtVQUE2QixTQUE3QkE7OztjQUFzRDttQkFFaERrRSxFQUFFUTtNQUNSLGtDQURNUixFQUNFLHFCQURBUSxJQUNjO29CQUNmUixFQUFFUTtNQUNULG1DQURPUixFQUNFLHFCQURBUSxJQUNjOzBCQUNWUixFQUFFVyxFQUFFNEM7TUFDRixvQkFERnZELEVBQ0UscUJBREFXLEdBQUU0QyxFQUNPO3lCQUNadkQsRUFBRXVELEVBQUU1QztNQUNBLG1CQURKWCxFQUFFdUQsRUFDRSxxQkFEQTVDLEdBQ087c0JBQ2RYLEVBQUVRLEdBQ0EsZ0JBREZSLEVBQ0UscUJBREFRLEdBQ087dUJBQ1JSLEVBQUVRLEdBQ0EsaUJBREZSLEVBQ0UscUJBREFRLEdBQ087YUFNakIyZ0I7TUFBVzs7Ozs7TXJCc2FQLG1CcUJwYU07b0JBRUwzZ0I7TUFDSixxQkFESUEsU0FDUSxPQURSQTtNQUU4Qjs7UUFBN0IsV0FBSCx1QkFGRUE7OztRQUU4QixrQ0FGOUJBO09BSUYsT0FKRUE7TUFHSSxpQ0FBUSxxQkFIWkEsSUFJRDt1QkFHbUJBO01BQXpCLDRCQUF5QkEsR0FBSTFFO01BQzNCO1dBRHlCd0UsS0FBRXhFLEVBQ1osT0FEUTBFO1FBRXJCLGlDQUZxQkEsRUFBSTFFLEdBRXpCOzs7OztRckJ5WkU7U3FCdlpNLHNDQUFXLHFCQUpFMEU7UUFFckIsSUFHTyxJQUxrQjFFO2lCQU9FO2FBR3pCc2xCLFlBQVU1Z0IsRUFBRWlkLElBQUkzaEIsRUFBRW9IO003Qi9IM0IsSTZCK0h5QmI7TUFDdEI7V0FEa0JvYixPQUFJcGIsSUFDTDtRQUNqQiwwQkFGZ0I3QixFQUFNNkIsU0FBRWEsRUFFRyxPQUZMYjtRQUVZLFFBRlpBO2lCQUVxQztxQkFHbkQ3QixFQUFFMEMsR0FBSSxtQkFBTjFDLEVBQU0sc0JBQU5BLEtBQUUwQyxFQUE4QjthQUdsQ21lLGdCQUFjN2dCLEVBQUVpZCxJQUFJM2hCLEVBQUVvSDtNN0J2SS9CLEk2QnVJNkJiO01BQzFCO1dBRHNCb2IsT0FBSXBiLElBQ1Q7UUFDakIsMEJBRm9CN0IsRUFBTTZCLFNBQUVhLEVBRUQsVUFGRGI7UUFFYSxRQUZiQTtpQkFFMEM7eUJBR3hEN0IsRUFBRTBDO01BQUksdUJBQU4xQyxFQUFNLHNCQUFOQSxLQUFFMEMsRUFBa0M7MEJBR25DMUMsRUFBRTFFLEVBQUVvSDtNQUNqQixJQUFJZCxFQUFKLHNCQURhNUI7Y0FBRTFFLFFBQ1hzRyxJQURXdEcsR0FHYixtQkFIVzBFLEVBQ1Q0QixFQURXdEcsRUFBRW9IO01BRU0sb0RBQ0o7OEJBR0YxQyxFQUFFMUUsRUFBRW9IO01BQ3JCLElBQUlkLEVBQUosc0JBRGlCNUI7Y0FBRTFFLFFBQ2ZzRyxJQURldEcsR0FLakIsdUJBTGUwRSxFQUNiNEIsRUFEZXRHLEVBQUVvSDtNQUduQixvREFFcUI7YUFHakJvZSxhQUFXOWdCLEVBQUUxRSxFQUFFb0g7TTdCN0p4QixJNkI2SnNCYjtNQUNuQjtnQkFEbUJBO1VBRW5CLDBCQUZpQjdCLEVBQUU2QixTQUFFYSxFQUVNLE9BRlJiO1VBRWUsUUFGZkE7O1FBQ0wsZ0JBQzBDO3NCQUcvQzdCLEVBQUUwQztNQUFJLG9CQUFOMUMsRUFBTSxzQkFBTkEsV0FBRTBDLEVBQWlDOzJCQUc5QjFDLEVBQUUxRSxFQUFFb0g7TTdCcktyQixTNkJxS21CcEgsOEJBQUYwRSxNQUFFMUU7T0FJZCxvQkFKWTBFLEVBQUUxRSxFQUFFb0g7TUFFaEIsb0RBRWdCO2FBR1pxZSxpQkFBZS9nQixFQUFFMUUsRUFBRW9IO003QjVLNUIsSTZCNEswQmI7TUFDdkI7Z0JBRHVCQTtVQUV2QiwwQkFGcUI3QixFQUFFNkIsU0FBRWEsRUFFRSxVQUZKYjtVQUVnQixRQUZoQkE7O1FBQ1QsU0FDbUQ7MEJBR3BEN0IsRUFBRTBDO01BQUksd0JBQU4xQyxFQUFNLHNCQUFOQSxXQUFFMEMsRUFBcUM7K0JBR2xDMUMsRUFBRTFFLEVBQUVvSDtNN0JwTHpCLFM2Qm9MdUJwSCw4QkFBRjBFLE1BQUUxRTtPQUlsQix3QkFKZ0IwRSxFQUFFMUUsRUFBRW9IO01BRXBCLG9EQUVvQjs2QkFHTjFDLEVBQUUxRSxFQUFFb0g7TUFDcEIsSUFBSWQsRUFBSixzQkFEZ0I1QjtjQUFFMUUsUUFDZHNHLElBRGN0RztPQUtoQjtTQUFXLFlBTEcwRSxFQUNaNEIsRUFEY3RHLEVBQUVvSCxHQUtQOzs7K0JBQTRDOztNQUZ2RCxvREFFNEQ7d0JBR25EMUMsRUFBRTBDLEdBQUksdUJBQU4xQyxJQUFFMEMsRUFBdUI7OEJBR25CMUMsRUFBRTFFLEVBQUVvSDtNN0J0TXhCLFE2QnNNc0JwSCw4QkFBRjBFLE1BQUUxRTtPQUlqQjtTQUFXLGFBSkkwRSxFQUFFMUUsRUFBRW9ILEdBSVI7OzsrQkFBMkM7O01BRnRELG9EQUUyRDsrQkFFM0MxQztNQUNsQiw4Q0FBa0IscUJBREFBLElBQ2M7K0JBQ2RBO01BQ2xCLDhDQUFrQixxQkFEQUEsSUFDYztnQ0FDYkE7TUFDbkIsNkNBQW1CLHFCQURBQSxJQUNjO2tDQUNaQTtNQUNyQiwrQ0FBcUIscUJBREFBLElBQ2M7MkJBR3BCMGMsT0FBTzFjO01BQ3RCO21DQURzQkE7T0FDdEIsOEJBRGUwYztPQUNmLEtBQ0lFLFdBREFEO01BQUo7WUFFWXJoQjtRQUNWO2FBRFVBLE1BRFJzaEIsUUFFa0I7VUFDZiwwQkFMZTVjLEVBR1YxRSxPQUVMLHVCQUxRb2hCLE9BR0hwaEI7V0FFeUM7VUFDOUMsUUFIS0E7O01BTlosV0FVNEI7eUJBR2Z1aEIsT0FBTzdjO01BQ3BCO21DQURvQkE7T0FDcEIsOEJBRGE2YztPQUNiLEtBQUlGLFFBQ0FHO09BREosVUFFSUM7TUFGSjtZQUdZemhCO1FBQ1Y7YUFEVUEsTUFGUndoQixRQUdrQjtVQUNmO21DQU5hOWMsRUFHaEIrYyxPQUNRemhCOztZQUVMLHVCQU5NdWhCLE9BSUR2aEI7V0FFa0Q7VUFDdkQsUUFIS0E7O01BVlYsV0FjbUI7NkJBR0wrZ0IsSUFBSXJjO01BQ3BCOztrQ0FEb0JBO09BQ3BCLDJCQURvQkE7TUFDcEI7WUFFQTFFO1FBQ0U7b0NBSmtCMEUsRUFHcEIxRSxPQUhnQitnQjtZQUllLFNBSDNCMWM7WUFJSyxnQkFMV0ssRUFHcEIxRSxXQURJc1UsT0FDSnRVO1lBRVMsT0FGVEE7Ozs7TUFGQSxTQUFJcUU7TUFRSixnQkFUb0JLLElBRWhCNFAsV0FPWTt5QkFJSjVQO01BQ1osd0NBQVkscUJBREFBLElBQ2M7eUJBQ2RBO01BQ1osd0NBQVkscUJBREFBLElBQ2M7MEJBQ2JBO01BQ2IsdUNBQWEscUJBREFBLElBQ2M7NEJBQ1pBO01BQ2YseUNBQWUscUJBREFBLElBQ2M7dUJBSWxCRyxFQUFPQyxHQUFRLDJCQUFmRCxFQUFPQyxFQUEwQjtzQkFLbkNKLEdBQUkscUNBQUpBLEdBQXFCO3VCQUVwQkEsR0FBSSxvQ0FBSkEsR0FBc0I7c0JBRXZCZ2hCLEdBQUkscUNBQUpBLEdBQXFCOytCQUlaaGhCLEVBQUUxRTtNQUFzQiw0Q0FBeEIwRSxHQUFFMUUsRUFBK0I7OEJBQ2xDMEU7TUFBcUIsMkNBQXJCQSxHQUE0QjtrQ0FFeEJBLEVBQUUxRTtNQUF5QiwrQ0FBM0IwRSxHQUFFMUUsRUFBa0M7aUNBQ3JDMEU7TUFBd0IsOENBQXhCQSxHQUErQjtrQ0FFOUJBLEVBQUUxRTtNQUF5QiwrQ0FBM0IwRSxHQUFFMUUsRUFBa0M7aUNBQ3JDMEU7TUFBd0IsOENBQXhCQSxHQUErQjt3QkFTeENBLEVBQUUxRSxHQUFlLHFDQUFqQjBFLEdBQUUxRSxFQUF3Qjs2QkFDckIwRSxFQUFFMUU7TUFBb0IsNkNBQXRCMEUsR0FBRTFFLEVBQTZCOzZCQUMvQjBFLEVBQUUxRTtNQUFvQiwwQ0FBdEIwRSxHQUFFMUUsRUFBNkI7NEJBQ2hDMEUsRUFBRTFFO01BQW1CLHlDQUFyQjBFLEdBQUUxRSxFQUE0Qjs0QkFDOUIwRSxFQUFFMUU7TUFBbUIseUNBQXJCMEUsR0FBRTFFLEVBQTRCOzRCQUM5QjBFLEVBQUUxRTtNQUFtQix5Q0FBckIwRSxHQUFFMUUsRUFBNEI7NEJBQzlCMEUsRUFBRTFFO01BQW1CLDZDQUFyQjBFLEdBQUUxRSxFQUE0Qjs0QkFDOUIwRSxFQUFFMUU7TUFBbUIseUNBQXJCMEUsR0FBRTFFLEVBQTRCOzRCQUM5QjBFLEVBQUUxRTtNQUFtQiw2Q0FBckIwRSxHQUFFMUUsRUFBNEI7NEJBQzlCMEUsRUFBRTFFO01BQW1CLHlDQUFyQjBFLEdBQUUxRSxFQUE0Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2FDdlIzQzJsQixxQkFBYyxRQUFJO2FBQ2xCQyx1QkFBZ0IsUUFBQzthQUNqQkMsbUJBQWUsWUFBSTt1QkFGbkJGLFNBQ0FDLFdBQ0FDOzthQ1lBQyxVQUFVQyxLQUFLamUsSUFBSUMsSUFBSTNELEVBQUU0aEI7TS9CaEM5Qjs7O1ErQmdDb0JsZTs7OztRQUFJQzs7OytCQUFUZ2UsUUFBU2hlLFdBQUpEO09BR1osMkNBSE9pZSxLQUFLamUsSUFBSUMsSUFBSTNELEVBQUU0aEI7TUFFdEIsa0RBQ3FDO1FBWXhDQzthQUNBQyxVQUFVSCxLQUFLamU7TS9CaERwQixRK0JnRG9CQSxnQ0FBTGllLGtCQUFLamU7T0FHWiw4QkFIT2llLEtBQUtqZTtNQUVaLHlDQUN5QjthQUM1QnFlLFdBQVdKLEtBQUtqZSxLQUFvQixzQkFBekJpZSxLQUFLamUsUUFBc0M7YUFFdERzZSxXQUFXTCxLQUFLamU7TS9CdERyQixRK0JzRHFCQSxnQ0FBTGllLGtCQUFLamU7UUFJTixJQUFOQyxJQUFNLHVCQUpDZ2UsS0FBS2plO1FBSU4sNkJBSkNpZSxjQUlQaGUsZ0JBSllEO2lCQU1YO2lCQUNBLG9DQVBNaWUsS0FBS2plO01BRWIsMENBTUY7YUFFRHVlLFlBQVlOLEtBQUtqZTtNQUdSLHVDQUhHaWUsTUFBS2plLElBR3lCOzs7OztPQW5DMUNnZTs7T0FzQkFNO09BVUFDO09BakJBSjtPQUNBQztPQUlBQzs7SUNoQmE7b0JBWVI3ZixFQUFFcEM7TUFDVCxTQURPb0MsRUFDTztNQUNkLFFBRk9BO1FBTUksdUJBTkpBLEVBTWEsV0FOWHBDLE1BTUUsS0FOSm9DLFVBTUk7O2NBQ1Z0RztVQUNFO29CQURGQSxLQUNtQixXQVJYa0UsRUFPUmxFO1lBQ0UsU0FERkE7OztRQUdBLE9BSkl1SjtNQUpTLGtDQVFWO0lBdEJXLHVCQXdCRCtjLEdBQUdDLEdBQUdoUztNQUNWLHVCQURJK1IsUUFDSixLQURJQSxXQUNKOztZQUNWemhCO1FBQ0U7VUFBaUIsUUFEbkJBLEtBQ21CLGVBSEYwaEIsR0FBR2hTO1VBR0QsU0FEbkIxUDs7O01BR0EsT0FKSTBFLEdBSUQ7SUE3QlksZ0JBaUNSOUI7TUFDUCxJQUFJbkIsRUFER21CLGFBQ1AsYUFBSW5CLE1BQXdDLGVBRHJDbUIsSUFDSG5CLEVBQXdEO0lBbEM3QyxrQkFvQ051WCxHQUFHRDtNQUNaLElBQUloWSxHQURLaVk7TUFDVCxhQUFJalk7ZUFDVyxPQUZIZ1k7O2lCQUdlLGVBSGxCQyxLQUNMalk7aUJBR0MsMEJBSklpWSxHQUFHRCxHQUlVO0lBeENQLGVBMENUblcsRUFBRUssSUFBSUM7TWhDOUVmLFFnQzhFV0QsWUFBSUMsV0FBTk4sZUFBTU0sV0FBSkQ7T0FHSCxzQkFIQ0wsRUFBRUssSUFBSUM7TUFFUCxpQ0FDb0I7SUE3Q1YsZ0JBK0NSTixFQUFFSyxJQUFJQyxJQUFJM0Q7TWhDbkZwQixRZ0NtRlkwRCxZQUFJQyxXQUFOTixlQUFNTSxXQUFKRDtPQUdKLCtCQUhFTCxFQUFFSyxJQUFJQyxJQUFJM0Q7TUFFWixrQ0FDdUI7SUFsRGIsZ0JBb0RSeVosR0FBR2dELEtBQUtqRCxHQUFHa0QsS0FBSy9ZO01oQ3hGMUI7OztRZ0N3RjBCQTs7OztRQUFiOFk7OztVQUFIaEQsZ0JBQWdCOVYsV0FBYjhZOzs7O1FBQVFDOzs7VUFBSGxELGdCQUFRN1YsV0FBTCtZO09BSWIsK0JBSkVqRCxHQUFHZ0QsS0FBS2pELEdBQUdrRCxLQUFLL1k7TUFHbEIsa0NBQytCO0lBeERyQixnQkEwRFI3RCxFQUFFdUQ7TUFDVCxTQURTQSxxQkFDVDs7O1FBQTZCO3FCQUR0QnZELEVBQUV1RCxNQUNUekg7VUFBNkIsU0FBN0JBOzs7Y0FBbUQ7SUEzRHBDLGlCQTZEUGtFLEVBQUV1RCxFQUFFekI7TUFDWixHQURVeUIsaUJBQUV6QjtPQUVWO01BRUEsU0FKUXlCLHFCQUlSOzs7UUFBNkI7cUJBSnZCdkQsRUFBRXVELE1BSVJ6SCxHQUpVZ0csTUFJVmhHO1VBQTZCLFNBQTdCQTs7O2NBQXFFO0lBakV4RCxlQW1FVGtFLEVBQUV1RDtNQUNSLElBQUluQixFQURJbUI7TUFDUixTQUFJbkIsRUFDVTtNQURkLElBRVUsaUJBRk5BLEVBRWUsV0FIYnBDLEVBQUV1RCxPQUdFLEtBRk5uQixVQUVNOztZQUNSdEc7UUFDRTtnQkFERkEsS0FDaUIsV0FMYmtFLEVBQUV1RCxNQUlOekg7VUFDRSxTQURGQTs7O01BR0EsT0FKSXFFLENBS0g7SUEzRVksZ0JBNkVSSCxFQUFFdUQsRUFBRXpCO01BQ1gsT0FEU3lCLGFBQ1QsR0FEV3pCO01BQ1gsR0FBSXdnQixPQUNBQyxHQUVGO01BQ0csU0FKREQsR0FLYTtNQUxqQixJQU1ZLGlCQU5SQSxHQU1rQixXQVBmdGlCLEVBQUV1RCxLQUFFekIsT0FPQyxLQU5Sd2dCLFdBTVE7O1lBQ1J4bUI7UUFDRTtnQkFERkEsS0FDaUIsV0FUZGtFLEVBQUV1RCxNQVFMekgsR0FST2dHLE1BUVBoRztVQUNFLFNBREZBOzs7TUFHQSxPQUpJcUUsQ0FNTDtJQTFGWSxpQkE0RlBILEVBQUV1RDtNQUNWLFNBRFVBLHFCQUNWOzs7UUFBNkI7cUJBRHJCdkQsRUFDUmxFLEVBRFV5SCxNQUNWekg7VUFBNkIsU0FBN0JBOzs7Y0FBc0Q7SUE3RnZDLGdCQStGUmtFLEVBQUV1RDtNQUNULElBQUluQixFQURLbUI7TUFDVCxTQUFJbkIsRUFDVTtNQURkLElBRVUsaUJBRk5BLEVBRWUsV0FIWnBDLElBQUV1RCxPQUdDLEtBRk5uQixVQUVNOztZQUNSdEc7UUFDRTtnQkFERkEsS0FDaUIsV0FMWmtFLEVBSUxsRSxFQUpPeUgsTUFJUHpIO1VBQ0UsU0FERkE7OztNQUdBLE9BSklxRSxDQUtIO0lBdkdZLG1CQXlHTG9EO01BQ1YsUUFEVUEscUJBQ0t6SCxNQUFFdUo7TUFDZjtnQkFEYXZKO1VBQzBCLGFBRi9CeUgsTUFDS3pILEdBQUV1SixLQUN3QixJQUQxQnZKLGdCQUFFdUo7UUFDRCxPQURDQSxJQUVPO0lBNUdULFNBK0dUb2Q7Ozs7VUFFSTs7OzttQkFBTEM7O1FBREc7SUFoSE8saUJBcUhidGdCO01BRlUsR0FFVkE7UUFDa0M7U0FEOUJLLEdBQUpMOztTQUNrQyxpQkFBakIsY0FEakJBOztlQUFJSzs7O2dCQUlNcVksY0FBSjZIO1lBQVUsV0FBVkE7WUFBVSw4QkFBTjdIOztVQURFLE9BRk52WDtNQUZBLFVBTUs7SUExSEUscUJBNEhIdkQsRUFBRVcsRUFBRTRDO01BQ2hCLFNBRGM1QyxHQUNkLEtBRGdCNEMscUJBQ2hCOztZQUNBekg7UUFDRTtVQUFLLGtCQUhLa0UsRUFDUkcsS0FEWW9ELE1BRWhCekg7VUFDTyxTQURQQTs7O01BR0EsT0FKSXFFLElBSUY7SUFqSWEseUJBbUlDSCxFQUFFb08sSUFBSXdVO01BQ3RCLElBQUkvZSxJQURrQitlO01BQ3RCLFNBQUkvZSxJQUNZLFVBRkV1SztNQUNsQjtPQUVpQixpQkFIRHBPLEVBQUVvTyxJQUFJd1U7T0FHTDs7T0FDSSw0QkFIakIvZSxJQUVPZ2Y7T0FDVSxTQURmeFU7T0FDZSxLQUhqQnhLO09BR2lCOztZQUVuQi9IO1FBQ0U7VUFBZ0I7OEJBUEprRSxFQUtWc08sU0FMZ0JzVSxnQkFNcEI5bUI7V0FDa0I7O3FCQUFaa25CO1VBRUosaUJBSEZsbkIsS0FDWWluQjtVQUFNLFNBRGxCam5COzs7TUFLQSxVQU5Jd1MsU0FEQXdVLGFBUUg7SUEvSVksc0JBaUpGOWlCLEVBQUV1RCxFQUFFNUM7TUFDakIsU0FEaUJBLEdBQ2pCLEtBRGU0QztNQUNmO1lBQ0F6SDtRQUNFO1VBQUssa0JBSE1rRSxFQUFFdUQsTUFFZnpILEdBRElxRTtVQUVHLFNBRFByRTs7O01BR0EsT0FKSXFFLElBSUY7SUF0SmEsa0JBd0pOaVAsRUFBRTdMO01BQ1gsTUFEV0EsYUFFRXpIO01BQ1g7V0FEV0EsTUFEVHdFLEVBRVk7UUFDTixjQUpEOE8sRUFBRTdMLE1BRUV6SCxJQUVxQjtRQUMzQixRQUhNQTtpQkFJUDtJQTlKUyxtQkFnS0xzVCxFQUFFN0w7TUFDWixNQURZQSxhQUVDekg7TUFDWDtXQURXQSxNQURUd0UsRUFFWTtRQUNOLGNBSkE4TyxFQUFFN0wsTUFFQ3pILEtBRXFCLFFBRnJCQTtRQUdOLFNBQ0Q7SUF0S1Msb0JBd0tKc1QsRUFBRTFOLEdBQUdDO01BQ2hCLE9BRGFELGNBQ2IsR0FEZ0JDO01BQ2hCLEdBQUlnWixPQUNBQyxHQUNhO01BRmpCLElBR2tCOWU7TUFDaEI7V0FEZ0JBLE1BSGQ2ZSxHQUlhO1FBQ1AsY0FOQ3ZMLEVBQUUxTixPQUlLNUYsR0FKRjZGLE9BSUU3RjtVQUVtQyxRQUZuQ0E7UUFHWCxTQUNEO0lBaExTLG1CQWtMTHNULEVBQUUxTixHQUFHQztNQUNmLE9BRFlELGNBQ1osR0FEZUM7TUFDZixHQUFJZ1osT0FDQUMsR0FDYTtNQUZqQixJQUdrQjllO01BQ2hCO1dBRGdCQSxNQUhkNmUsR0FJYTtRQUNQLGNBTkF2TCxFQUFFMU4sT0FJTTVGLEdBSkg2RixPQUlHN0YsSUFFbUM7UUFDOUMsUUFIV0E7aUJBSVo7SUExTFMsZUE0TFQ2RSxFQUFFNEM7TUFDUixNQURRQSxhQUVLekg7TUFDWDtXQURXQSxNQURUd0UsRUFFWTtRQUNrQixzQkFKMUJpRCxNQUVLekgsR0FGUDZFLEdBSXdDO1FBQ3ZDLFFBSE03RTtpQkFJUDtJQWxNUyxnQkFvTVI2RSxFQUFFNEM7TUFDVCxNQURTQSxhQUVJekg7TUFDWDtXQURXQSxNQURUd0UsRUFFWTtRQUNELEdBSlJLLE1BQUU0QyxNQUVJekgsR0FFd0I7UUFDOUIsUUFITUE7aUJBSVA7SUExTVMsb0JBNE1Kc1QsRUFBRTdMO01BQ2IsTUFEYUEsYUFFQXpIO01BQ1g7V0FEV0EsTUFEVHdFLEVBRVk7UUFFSixJQUFKSyxFQUxLNEMsTUFFQXpIO1FBSU4sY0FOSXNULEVBS0h6TyxHQUNRLFVBRFJBO1FBQUksSUFFSCxJQUxJN0U7aUJBT1A7SUFyTlMsb0JBdU5Ka0UsRUFBRXVEO01BQ2IsTUFEYUEsYUFFQXpIO01BQ1g7V0FEV0EsTUFEVHdFLEVBRVk7UUFFTixJQUVKSCxFQUZJLFdBTENILEVBQUV1RCxNQUVBekg7UUFHSCxHQUVKcUUsRUFBZSxPQUFmQTtRQUZJLElBQ0ksSUFKRHJFO2lCQU9QO0lBaE9TLGlCQWtPUDZFO01BQ0wsY0FES0EsT0FDUztNQUNaO2FBRkdBO09BRUg7O1NBRkdBO09BS0UsaUJBREpMLEVBREEyaUI7T0FHSSxpQkFGSjNpQixFQURJbWU7T0FHQSxLQUZKbmU7T0FFSTs7WUFDUnhFO1FBQ0U7c0JBUkk2RSxNQU9ON0UsR0FDRTtVQUNBLE1BRkZBLEtBQ01xbkI7VUFFSixNQUhGcm5CLEtBQ1VvbkI7VUFBUixTQURGcG5COzs7TUFLQSxVQVBJeUgsRUFDQXpCLEVBT0g7SUEvT1ksbUJBaVBMeUIsRUFBRXpCO01BQ1osT0FEVXlCLGFBQ1YsR0FEWXpCO01BQ1osR0FBSXNoQixPQUNBQyxHQUNhO01BQTJCLFNBRnhDRCxHQUdXO01BSGYsSUFLVSxpQkFMTkEsTUFETTdmLEtBQUV6QixPQU1GLEtBTE5zaEIsV0FLTTs7WUFDUnRuQjtRQUNFO1VBQWdCLE1BRGxCQSxRQVBReUgsTUFPUnpILEdBUFVnRyxNQU9WaEc7VUFDa0IsU0FEbEJBOzs7TUFHQSxPQUpJNkUsQ0FLSDtJQTVQWTtrQkErUFJ1UCxJQUFJM007TUFDWCxTQUFJK2YsT0FBT2xoQixFQUFFdEc7UUFDWCxVQURXQSw0QkFDWCxLQUFJeW5CO1FBQUosSUFBSUEsZUFES25oQjtVQUdTLFNBRmRtaEIsWUFHaUIsc0JBTFpoZ0I7VUFLSixjQUxBMk0sSUFLSSxpQkFMQTNNLEVBRUxnZ0I7V0FHMEMsT0FIMUNBO1VBRWM7V0FFaEIsS0FKRUE7V0FJZ0Isc0JBTlhoZ0I7V0FNVyxLQUhoQjVDO1VBR0MsY0FOQXVQLElBTUksaUJBTkEzTTtXQU1vQyxPQUp6Q2dnQjtVQUtGLE9BSkU1aUI7UUFNRixJQVBFNGlCLGVBREtuaEI7VUFReUIsU0FQOUJtaEIsWUFPOEIsc0JBVHpCaGdCO1VBU1Msc0JBVGIyTSxJQVNpQixpQkFUYjNNLEVBRUxnZ0I7V0FRRyxPQVJIQTtRQVNHLEdBVEhBLE1BREtuaEIsRUFVYyxPQVRuQm1oQjtRQVM0QixnQkFWckJ6bkIsRUFVcUM7TUFWbEQsU0FZUTBuQixZQUFZcGhCLEVBQUV0RyxFQUFFa047UWhDaFQzQixJZ0NnVHlCM0c7UUFDcEI7VUFBUSxJQUFKK04sRUFBSSxPQURVaE8sRUFBRUM7VUFFakIsa0JBZkU2TixJQWVFLGlCQWZFM00sRUFjTDZNLFVBRGtCcEg7WUFHWiwwQkFoQkR6RixFQWNMNk07WUFFRixpQkFoQk83TSxFQWFXbEI7WUFHVixJQUhVQSxJQUNoQitOOztVQUlLLGlCQWxCQTdNLEVBYVdsQixnQkFBRTJHO1VBS2IsU0FFTDtNQW5CTixTQXFCSXlhLFFBQVFyaEIsRUFBRXRHLEVBQUVrTjtRQUFJO1VBQUkscUJBQVo1RyxFQUFFdEcsRUFBRWtOOzs7O1lBQTJDLElBQUwzRyxXQUFLLGlCQXRCaERrQixFQXNCMkNsQixnQkFBdEMyRyxFQUEyQztvQkFBUztNQXJCcEUsU0FzQlEwYSxXQUFXdGhCLEVBQUV0RztRaEMxVHhCLElnQzBUd0J1RztRQUNuQjtVQUFRLGVBRFNELEVBQUVDLEtBRVgsc0JBekJDa0IsRUF1QlVtYTtVQUVuQixpQkF6QlNuYSxFQXVCVWxCO1VBQ1gsSUFEV0E7bUJBR0w7TUF6QmhCLFNBMkJJc2hCLE9BQU92aEIsRUFBRXRHO1FBQUk7VUFBSSxvQkFBVnNHLEVBQUV0Rzs7O2dDQUF3QyxJQUFMdUcsV0FBSyxPQUFMQTtvQkFBTTtNQTNCdEQsTUFEV2tCLGFBQ1gsT0FzQ0luQjtNQXRDSjtZQXVDQStkO1FBQW9DO2tCQURoQy9kLEVBQ0orZCxJQUFnRCxpQkF4Q3JDNWMsRUF3Q1g0YztVQUFvQyxTQUFwQ0E7OztNQXZDQSxTQXNDSS9kO01BRUo7OztRQUNFO1VBQVE7Z0NBMUNDbUIsRUF5Q1hsQjtXQUVVLHNCQTNDQ2tCO1VBMkNULGlCQTNDU0EsRUF5Q1hsQjtVQUNVLElBRUUsV0FIWkEsT0Faa0J2RztVQUNoQjtnQkFBSStuQixRQURZL25CO1lBQ2hCLEdBRGdCQSxNQUNaK25CO1lBRUQ7OEJBaENFM1QsSUFnQ0UsaUJBaENFM00sRUE4QkxzZ0Isb0JBRGNEO2FBTVQsaUJBbkNBcmdCLEVBNkJPekgsWUFBRThuQjs7Y0FJUiwwQkFqQ0RyZ0IsRUE4QkxzZ0I7Y0FHRixpQkFqQ090Z0IsRUE2Qk96SDtjQUlkLE9BSEUrbkIsWUFEWS9uQixFQUNaK25CO2NBSXlDLGlCQWxDcEN0Z0IsVUE2QlNxZ0I7WUFDbEIsU0FXRnZoQjs7OztNQXhDQSxhQXNDSUQ7TUFPSjtRQUF1Qix1QkE5Q1ptQixRQThDaUMsc0JBOUNqQ0E7UUE4Q3lCLGlCQTlDekJBO1FBOEM0QyxpQkE5QzVDQSxVQThDUXlGO1FBQUk7OztpQkFBMEM7SUE3U2xELHFCQWlURGtILElBQUkzTTtNQUNsQixTQUFJdWdCLE1BQU1DLFFBQVFDLFFBQVFDLEtBQUtDLFFBQVFDLFFBQVFwSCxJQUFJcUg7UUFDakQ7ZUFEUUwsVUFBUUM7U0FDaEIsTUFENkJFLFVBQVFDO1NBa0JHLHNCQWxCaEJGLEtBQUtDO1NBa0JiLHNCQW5CQTNnQixFQUNSd2dCO1NBRUtVLEdBRkxWO1NBRVF2aUI7U0FBR2tqQixHQUZVUjtTQUVQemlCO1NBQUcyVyxFQUZ3QmdNO1FBRy9DO1VBQUcsa0JBSk9sVSxJQUdJMU8sR0FBTUM7WUFTbEIsaUJBWHlDc2IsSUFFcEIzRSxZQUFIM1c7WUFTbEIsSUFDSWtqQixLQVZXRDtZQVNmLEdBQ0lDLE9BWDBCTDtjQWE1QjttQkFabUJsTTtlQVlMLHNCQWRJNkwsS0FZaEJVO2VBVldELEdBVVhDO2VBVmNsakI7ZUFBRzJXOztZQWNuQixjQWpCVTdVLEVBR0hraEIsR0FGZ0MxSCxJQUVwQjNFLFVBRHJCaU0sUUFDU0k7VUFFVCxpQkFKeUMxSCxJQUVwQjNFLFlBQVQ1VztVQUVaLElBQ0lzakIsS0FIS0w7VUFFVCxHQUNJSyxPQUpKVDtZQU1FO2lCQUxtQmpNO2FBS1gsc0JBUkU3VSxFQU1SdWhCO2FBSEtMLEdBR0xLO2FBSFF0akI7YUFBUzRXOztVQU9uQixjQVRrQjZMLEtBRUxTLEdBRjBCM0gsSUFFcEIzRSxVQURTa00sUUFDZkksUUFnQitDO01BbEJwRSxTQW9CSU8sUUFBUUMsT0FBT25JLElBQUlxSCxPQUFPdmdCO1FBQzVCLFNBRDRCQSxZQUM1Qjs7OztVQUNFOztrQkFGUXFoQixTQUNWcHBCO2FBQ1UsbUJBdkJNeUg7YUF1Qk4sTUFGVzZnQixTQUNyQnRvQjs7aUJBRHFCc29CLFVBR2ZoVTs7Z0JBQ21CLGtCQXpCYkYsSUF5QmlCLGlCQUpaNk0sb0JBRVgvVDtrQkFHRjt3QkFGRW9IO21CQUVlLHNCQUxKMk07bUJBS0ksS0FGZjNNO2tCQUVGLGlCQUxhMk07a0JBS2I7O2NBR0YsU0FMSTNNO2NBS0osaUJBUmUyTSxzQkFFWC9UO2NBTUosU0FQRmxOOzs7O2dCQVFJO01BN0JOLFNBK0JRcXBCLE9BQU9ELE9BQU9uSSxJQUFJcUgsT0FBT3ZnQjtRQUMvQixHQUQrQkEsU0FDVCxlQURUcWhCLE9BQU9uSSxJQUFJcUgsT0FBT3ZnQjtRQUMwQixPQUQxQkEsWUFDMEIsR0FEMUJBLE1BRXpCbkM7UUFFSixPQUpXd2pCLFNBRVB4akIsT0FGY3FiLElBQUlxSCxTQUVsQjFpQixPQUNBQztRQUVKLE9BTFd1akIsT0FoQ0czaEIsRUFnQ0gyaEIsU0FHUHZqQixPQURBRDtRQUdKLGFBTFd3akIsU0FHUHZqQixPQURBRCxHQUZjcWIsSUFBSXFILFNBRWxCMWlCLE9BQ0FDLEdBSGNvYixJQUFJcUgsT0FPckI7TUF0Q0wsSUF3Q0loaUIsRUF6Q2NtQjtNQUNsQixHQXdDSW5CLE9BQ2dCLGlCQTFDRm1CLElBeUNkbkI7TUF4Q0o7T0F5Q3lDLEdBRHJDQTtPQUNxQyxHQURyQ0EsSUFFRVY7T0FFSSxpQkFESkMsR0FDWSxpQkE3Q0E0QjtNQThDaEIsT0FISTdCLEdBRUFvTCxJQURBbkw7TUFHSixTQS9DZ0I0QixFQTRDWjVCLEdBREFEO01BSUosYUFISUMsR0FEQUQsR0FFQW9MLElBREFuTCxHQTVDWTRCLElBaURmO0lBbFdZLGtCQXlXTkE7TUFDVCxTQUFRZ1ksSUFBSXpmO1FBQ1YsR0FEVUEsSUFESHlIO1VBSUcsTUFKSEEsTUFDR3pILEdBR0EsS0FIQUE7VUFJSyxVQURUNkUsaUJoQ2paWCxPZ0M4WVc0YTtRQUtELFFBQU87TUFMZDs0QmhDOVlILE9nQzhZV0EsZUFPSDtJQWpYVSxtQkFtWExoWTtNQUNWLFNBQVFnWSxJQUFJemY7UUFDVixHQURVQSxJQURGeUg7VUFJRSxNQUpGQSxNQUNFekgsR0FHQSxLQUhBQTtVQUlTLGFBSlRBLEVBR0o2RSxrQmhDM1pYLE9nQ3daVzRhO1FBS0QsUUFBTztNQUxkOzRCaEN4WkgsT2dDd1pXQSxlQU9IO0lBM1hVLGtCQXdZTjRFO01BQ1QsV0FBUSxxQkFBbUIvUixJQUFJek4sR0FBSyxVQUFMQSxFQUFKeU4sSUFBZSxPQURqQytSO01BWE8sR0FFZC9kO1FBQ1k7U0FEUkssR0FBSkw7O1NBQ1ksa0JBRFpBO1NBRVUsaUJBREp5QixJQURObkI7U0FFVSxJQURKbUI7O2VBREZwQjs7O2dCQUtNcVksY0FBSjZIO1lBQVUsV0FBVkE7WUFBVSw4QkFBTjdIOztVQURFLE9BRk52WDtNQUhBLFVBWUs7SUExWUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7UXBCUmI2aEIsVUFDQUMsU0FDQUM7YUFJQUMsVUFBVzVrQixHQUFZLE9BQVpBLGVBQXVCO2FBQ2xDNmtCLFlBQWE3a0IsR0FBWSxZQUFaQSxXQUF3QjthQUNyQzhrQixPQUFROWtCLEdBQVksT0FBWkEsVUFBa0I7UUFFMUIra0I7YUF5RUFDLFdBQVdobEI7TUFBUSxTQUFSQSxLQUFRLHlCQUFSQTtNQUFRLFlBN0VuQjRrQixVQTZFVzVrQixPQUE4QjthQUt6Q2lsQixPQUFLamxCLEdBQUksNEJBQUpBLEVBckZMSyxTQXFGOEI7YUFDOUI2a0IsT0FBS2xsQixHQUFJLDRCQUFKQSxFQXJGTE0sYUFxRmtDO2FBY2xDNmtCLFNBQU1ubEIsRUFBRUMsR0FBSSxnQ0FBTkQsRUFBRUMsTUFBbUI7YUFFbEJtbEIsTUFBS3BsQixFQUFXQztNQUMzQixNQURnQkQsSUFBV0M7O1FBQ0ssR0FBaEIsbUJBRFdBLFFBQ0ssbUJBRGhCRDtRSjJZVixZSXhZRSxPQUhRQSxTQUFXQztNQUV0QixPQUZzQkEsU0FBWEQsQ0FHYzthQUVuQnFsQixNQUFLcmxCLEVBQVdDO01BQzNCLE1BRGdCRCxJQUFXQzs7UUFDSyxHQUFoQixtQkFEV0EsUUFDSyxtQkFEaEJEO1FKc1lWLFlJbllFLE9BSG1CQyxTQUFYRDtNQUVYLE9BRldBLFNBQVdDLENBR0c7YUFFbkJxbEIsUUFBU3RsQixFQUFXQztNQUNoQixHQURLRCxVQUFXQztRQUUxQixNQUZlRCxJQUFXQzs7VUFFTSxHQUFoQixtQkFGVUEsUUFFTSxtQkFGakJEO1VKaVlkLFlJL1g0RCxVQUZuQ0MsRUFBWEQ7UUFFa0MsVUFGbENBLEVBQVdDO01BQ0YsVUEvRzNCTSxRQWdIc0U7YUFFN0RnbEIsUUFBU3ZsQixFQUFXQztNQUMvQixNQURvQkQsSUFBV0M7O1FBQ0MsR0FBaEIsbUJBRGVBLFFBQ0MsbUJBRFpEO1FKNlhkLFlJMVhFLE9BSHVCQyxPQUFYRCxFQUFXQztNQUUxQixPQUZlRCxPQUFXQyxFQUFYRCxDQUdVO2FBRW5Cd2xCLFFBQVN4bEIsRUFBV0M7TUFDL0IsTUFEb0JELElBQVdDOztRQUNDLEdBQWhCLG1CQURlQSxRQUNDLG1CQURaRDtRSndYZCxZSXJYRSxPQUhZQSxPQUFXQyxFQUFYRDtNQUVmLE9BRjBCQyxPQUFYRCxFQUFXQyxDQUdEO2FBRW5Cd2xCLFlBQWF6bEIsRUFBV0M7TUFDaEMsR0FEcUJELE9BQ1AsVUFEa0JDO01BRTNCLEdBRjJCQSxPQUViLFVBRkVEO01BR25CLE1BSG1CQSxJQUFXQzs7UUFHRSxHQUFoQixtQkFIY0EsUUFHRSxtQkFIYkQ7UUptWGxCLFlJaFgyRCxVQUg5QkMsRUFBWEQ7TUFHOEIsVUFIOUJBLEVBQVdDLEVBR21DO2FBSXBFeWxCLE9BQUsxbEIsR0FBSSwwQkFBSkEsRUFBZ0M7YUFhbkMybEIsWUFBWS9pQixFQUFFSyxJQUFJQyxJQUFJM0Q7TUFDeEIsVUFEZ0IwRCxNQUFJQztNQUNwQixhQURnQkQ7WUFDaEI5SCxFQURnQjhIO1FBQ2dCO2dCQUFoQzlILEtBRHdCb0U7VUFDUSxTQUFoQ3BFOzs7TUFkUyxRQWM0QzthQUtuRHlxQixNQUFNaGpCLEVBQUVLLElBQUlDLElBQUlnSTtNQUNsQixTQURVakk7TUFDVjs7O2lCQURjQzs7Ozs7Z0JBQUpELE1BQUlDO3dCQUFOTixnQkFBRUssTUFBSUM7TUFFWix3QkFGZ0JnSSxTQUVEO2FBRWYyYSxPQUFLbG1CLEVBQUVKO01BQ0ksSUFBVHdNLE9BQVMsdUJBRE5wTTtNQUVQLFlBRElvTSxTQURHcE0sRUFBRUo7TUFFVCxPQURJd00sTUFFRTthQUVKK1osT0FBS3JrQixFQUFFcEM7TUFDVCxRQURPb0M7UUFHSywrQkFITEEsR0FHSyxLQUhMQSxVQUdLOztjQUNWdEc7VUFDRTtvQkFERkEsS0FDbUIsV0FMWmtFLEVBSVBsRTtZQUNFLFNBREZBOzs7UUFHQSxPQUpJdUo7TUFGUSx3Q0FNVDthQUVIcWhCLFNBQU8vTSxHQUFHRDtNQUNaO1VBRFNDO09BQ1QsR0FEWUQ7T0FHQyw4QkFGVGhZLEtBQ0FDO01BRUoscUJBSlNnWSxLQUdMak4sU0FGQWhMO01BSUoscUJBTFlnWSxLQUdSaE4sT0FGQWhMLEdBQ0FDO01BR0osT0FGSStLLE1BR0U7YUFVSmlhLFNBQU92a0I7Ozs7VUFOVDtXQUlRSztXQUFOQztXQUxXL0IsRUFLWCtCO1dBSkYsYUFEYS9CLElBQ1M7O2lCQUlkOEI7O1FBSVIsdUNBQ2FzVyxJQUhKM1csRUFHTXRHO1FBQ2I7YUFEV2lkO2dCQUdIK0IsS0FIRy9CLE9BR1Q0SixLQUhTNUosT0FJTDZOLEtBREpqRTtZQUVBLHFCQUZBQSxPQUpBalcsT0FDVzVRLEVBSVA4cUI7WUFDSixRQUxXOXFCLElBSVA4cUIsU0FKSzdOLElBR0grQixLQUhLaGY7O1VBRUwsR0FGS0EsaUJBRFg0UTt3Q0FVRTthQUVKbWEsTUFBSXRqQixFQUFFSyxJQUFJQztNQUNaLE1BRE1OLEVBQUVLLElBQUlDO01BRUMsSUFBVDZJLE9BQVMsdUJBRkQ3STtNQUdaLHFCQUhNTixFQUFFSyxJQUVKOEksU0FGUTdJO01BR1osT0FESTZJLE1BRUU7YUFFSm9hLE9BQUt2akI7TUFDUCxNQURPQSxhQUVQLDhCQURJbkI7TUFFSixxQkFIT21CLElBRUhtSixTQURBdEs7TUFFSixPQURJc0ssTUFFRTthQUVKcWEsT0FBS3hqQixFQUFFSyxJQUFJQyxJQUFJM0Q7TUFDakIsTUFET3FELEVBQUVLLElBQUlDLDBCQUNiLG1CQURPTixFQUFFSyxJQUFJQyxJQUFJM0QsRUFFTTthQUVyQjhtQixPQUFLQyxJQUFJQyxLQUFLbkssSUFBSW9LLEtBQUt0akI7TUFDekIsTUFET29qQixJQUFJQyxLQUFjcmpCO01BRXpCLE1BRmdCa1osSUFBSW9LLEtBQUt0akI7TUFHekIsNEJBSE9vakIsSUFBSUMsS0FBS25LLElBQUlvSyxLQUFLdGpCLElBR1E7YUFFL0J1akIsVUFBUTdqQjtNQUNZLGNBRFpBLDRCWjVQZixPWTRQZUEsYUFDeUI7YUFFakM4akIsVUFFYWpsQjtNQURvQixrQ0FBZixTQUNMQSxJQUFGdEcsSUFBRWlkO01BQ2I7V0FEYUE7Y0FHTmpNLEVBSE1pTSxPQUdYdU8sRUFIV3ZPO1VBR0QsV0FIRGpkLEtBR1R3ckI7VUFBVSxRQUhEeHJCLGdCQUFFaWQsSUFHTmpNOztRQURDLE9BSE5KLE9BTUk7YUFHTjZhLE9BQUt2bkIsRUFBRXVEO01BQ1QsU0FEU0EscUJBQ1Q7OztRQUE2QjtxQkFEdEJ2RCxFQUFFdUQsTUFDVHpIO1VBQTZCLFNBQTdCQTs7O2NBQW9EO2FBR2xEMHJCLFFBQU14bkIsRUFBRXVELEVBQUV6QjtNQUNaLEdBRFV5QixpQkFBRXpCO09BRVY7TUFFQSxTQUpReUIscUJBSVI7OztRQUE2QjtxQkFKdkJ2RCxFQUFFdUQsTUFJUnpILEdBSlVnRyxNQUlWaEc7VUFBNkIsU0FBN0JBOzs7Y0FBcUU7YUFFckUyckIsTUFBSXpuQixFQUFFdUQ7TUFDUixNQURRQSxhQUVSLHlCQURJbkIsR0FDSixLQURJQSxVQUNKOztZQUNBdEc7UUFDRTtnQkFERkEsS0FDaUIsV0FKWGtFLEVBQUV1RCxNQUdSekg7VUFDRSxTQURGQTs7O01BR0EsT0FKSXFFLENBSUg7YUFFQ3VuQixPQUFLMW5CLEVBQUV1RCxFQUFFekI7TUFDWCxPQURTeUIsYUFDVCxHQURXekI7TUFDWCxHQUFJd2dCLE9BQ0FDLEdBRUY7TUFIRixJQUtVLHlCQUxORCxJQUtNLEtBTE5BLFdBS007O1lBQ1J4bUI7UUFDRTtnQkFERkEsS0FDaUIsV0FSWmtFLEVBQUV1RCxNQU9QekgsR0FQU2dHLE1BT1RoRztVQUNFLFNBREZBOzs7TUFHQSxPQUpJcUUsQ0FLSDthQUdEd25CLFFBQU0zbkIsRUFBRXVEO01BQ1YsU0FEVUEscUJBQ1Y7OztRQUE2QjtxQkFEckJ2RCxFQUNSbEUsRUFEVXlILE1BQ1Z6SDtVQUE2QixTQUE3QkE7OztjQUFzRDthQUVwRDhyQixPQUFLNW5CLEVBQUV1RDtNQUNULE1BRFNBLGFBRVQseUJBREluQixHQUNKLEtBRElBLFVBQ0o7O1lBQ0F0RztRQUNFO2dCQURGQSxLQUNpQixXQUpWa0UsRUFHUGxFLEVBSFN5SCxNQUdUekg7VUFDRSxTQURGQTs7O01BR0EsT0FKSXFFLENBSUg7YUFHQzBuQixZQUFVN25CLEVBQUVXLEVBQUU0QztNQUNoQixTQURjNUMsR0FDZCxLQURnQjRDLHFCQUNoQjs7WUFDQXpIO1FBQ0U7VUFBSyxrQkFIS2tFLEVBQ1JHLEtBRFlvRCxNQUVoQnpIO1VBQ08sU0FEUEE7OztNQUdBLE9BSklxRSxJQUlGO2FBR0EybkIsYUFBVzluQixFQUFFdUQsRUFBRTVDO01BQ2pCLFNBRGlCQSxHQUNqQixLQURlNEM7TUFDZjtZQUNBekg7UUFDRTtVQUFLLGtCQUhNa0UsRUFBRXVELE1BRWZ6SCxHQURJcUU7VUFFRyxTQURQckU7OztNQUdBLE9BSklxRSxJQUlGO2FBR0E0bkIsU0FBTzNZLEVBQUU3TDtNQUNYLE1BRFdBLGFBRUV6SDtNQUNYO1dBRFdBLE1BRFR3RSxFQUVZO1FBQ04sY0FKRDhPLEVBQUU3TCxNQUVFekgsSUFFcUI7UUFDM0IsUUFITUE7aUJBSVA7YUFHSmtzQixVQUFRNVksRUFBRTdMO01BQ1osTUFEWUEsYUFFQ3pIO01BQ1g7V0FEV0EsTUFEVHdFLEVBRVk7UUFDTixjQUpBOE8sRUFBRTdMLE1BRUN6SCxLQUVxQixRQUZyQkE7UUFHTixTQUNEO2FBR0ptc0IsTUFBSXRuQixFQUFFNEM7TUFDUixNQURRQSxhQUVLekg7TUFDWDtXQURXQSxNQURUd0UsRUFFWTtRQUNFLDRCQUpWaUQsTUFFS3pILEdBRlA2RSxHQUl3QztRQUN2QyxRQUhNN0U7aUJBS1A7YUFHSm9zQixTQUFTdm5CLEVBQUU0QztNQUNiLE1BRGFBLGFBRUF6SDtNQUNYO1dBRFdBLE1BRFR3RSxFQUVZO1FBQ0YsR0FKSEssS0FBRTRDLE1BRUF6SCxHQUV1QjtRQUM3QixRQUhNQTtpQkFLUDs7YUFJSnFzQixPQUFLalksSUFBSTNNO01BQ1gsU0FBSStmLE9BQU9saEIsRUFBRXRHO1FBQ1gsVUFEV0EsNEJBQ1gsS0FBSXluQjtRQUFKLElBQUlBLGVBREtuaEI7VUFJSjs7Y0FMQThOLElBS0ksZUFMQTNNLEVBRUxnZ0IsS0FHaUIsZUFMWmhnQixFQUVMZ2dCOzs7V0FHMEMsT0FIMUNBO1VBSUM7O2NBTkFyVCxJQU1JLGVBTkEzTSxFQUdMNUMsTUFHZ0IsZUFOWDRDLEVBRUxnZ0I7OztXQUl5QyxPQUp6Q0E7VUFLRixPQUpFNWlCO1FBTWM7V0FQZDRpQjs7VUFES25oQjs7Ozs7V0FRUyxXQVRiOE4sSUFTaUIsZUFUYjNNLEVBRUxnZ0IsS0FPOEIsZUFUekJoZ0IsRUFFTGdnQjtTQVFHLE9BUkhBO1FBU0csR0FUSEEsTUFES25oQixFQVVjLE9BVG5CbWhCO1FBUzRCLGtCQVZyQnpuQixFQVVxQztNQVZsRCxTQVlRMG5CLFlBQVlwaEIsRUFBRXRHLEVBQUVrTjtRWnpYN0IsSVl5WDJCM0c7UUFDcEI7VUFBUSxJQUFKK04sRUFBSSxPQURVaE8sRUFBRUM7VUFFakIsa0JBZkU2TixJQWVFLGVBZkUzTSxFQWNMNk0sR0FEa0JwSDtZQUdwQixlQWhCT3pGLEVBYVdsQixJQUdWLGVBaEJEa0IsRUFjTDZNLFFBRGdCL04sSUFDaEIrTjtVQUlLLHNCQWxCQTdNLEVBYVdsQixJQUFFMkcsR0FPbEI7TUFuQk4sU0FxQkl5YSxRQUFRcmhCLEVBQUV0RyxFQUFFa047UUFBSTtVQUFJLHFCQUFaNUcsRUFBRXRHLEVBQUVrTjs7OztZQUEyQyxJQUFMM0csV0FBSyxzQkF0QmhEa0IsRUFzQjJDbEIsSUFBdEMyRztvQkFBb0Q7TUFyQnBFLFNBc0JRMGEsV0FBV3RoQixFQUFFdEc7UVpuWTFCLElZbVkwQnVHO1FBQ25CO1VBQVEsSUFEV3FiLElBQ1gsT0FEU3RiLEVBQUVDO1VBRW5CLGVBekJTa0IsRUF1QlVsQixJQUVYLGVBekJDa0IsRUF1QlVtYTtVQUNYLElBRFdyYjttQkFHTDtNQXpCaEIsU0EyQklzaEIsT0FBT3ZoQixFQUFFdEc7UUFBSTtVQUFJLG9CQUFWc0csRUFBRXRHOzs7a0NBQXdDLElBQUx1RyxXQUFLLE9BQUxBO29CQUFNO01BM0J0RCxNQURXa0IsYUFDWCxPQXNDSW5CO01BdENKO1lBdUNBK2Q7UUFBb0M7a0JBRGhDL2QsRUFDSitkLElBQWdELGVBeENyQzVjLEVBd0NYNGM7VUFBb0MsU0FBcENBOzs7TUF2Q0EsU0FzQ0kvZDtNQUVKOzs7UUFDRTtVQUFRLElBYlV3aEIsSUFhVixlQTFDQ3JnQixFQXlDWGxCO1VBRUUsZUEzQ1NrQixFQXlDWGxCLElBRVUsZUEzQ0NrQjtVQTBDRCxJQUVFLFdBSFpsQixPQVprQnZHO1VBQ2hCO2dCQUFJK25CLFFBRFkvbkI7WUFDaEIsR0FEZ0JBLE1BQ1orbkI7WUFFRCxtQkFoQ0UzVCxJQWdDRSxlQWhDRTNNLEVBOEJMc2dCLFFBRGNEO2FBTVQsZUFuQ0FyZ0IsRUE2Qk96SCxFQUFFOG5COztjQUloQixlQWpDT3JnQixFQTZCT3pILEVBSU4sZUFqQ0R5SCxFQThCTHNnQjtjQUdGLE9BSEVBLFlBRFkvbkIsRUFDWituQjtjQUl5QyxlQWxDcEN0Z0IsSUE2QlNxZ0I7WUFDbEIsU0FXRnZoQjs7OztNQXhDQSxhQXNDSUQ7TUFPSjtRQUF1QixJQUFKNEcsRUFBSSxlQTlDWnpGO1FBOEN5QixlQTlDekJBLElBOENpQyxlQTlDakNBO1FBOENZLFNBQWdDLGVBOUM1Q0EsSUE4Q1F5Rjs7O01BdERqQixXQXNEK0Q7YUFJL0RvZixZQUFZbFksSUFBSTNNO01BQ2xCLFNBQUl1Z0IsTUFBTUMsUUFBUUMsUUFBUUMsS0FBS0MsUUFBUUMsUUFBUXBILElBQUlxSDtRQUNqRDtlQURRTCxVQUFRQztTQUNoQixNQUQ2QkUsVUFBUUM7U0FrQkcsb0JBbEJoQkYsS0FBS0M7U0FrQmIsb0JBbkJBM2dCLEVBQ1J3Z0I7U0FFS1UsR0FGTFY7U0FFUXZpQjtTQUFHa2pCLEdBRlVSO1NBRVB6aUI7U0FBRzJXLEVBRndCZ007UUFHL0M7VUFBRyxrQkFKT2xVLElBR0kxTyxHQUFNQztZQVNsQixlQVh5Q3NiLElBRXBCM0UsRUFBSDNXO1lBU2xCLElBQ0lrakIsS0FWV0Q7WUFTZixHQUNJQyxPQVgwQkw7Y0FhNUI7bUJBWm1CbE07ZUFZTCxvQkFkSTZMLEtBWWhCVTtlQVZXRCxHQVVYQztlQVZjbGpCO2VBQUcyVzs7WUFjbkIsY0FqQlU3VSxFQUdIa2hCLEdBRmdDMUgsSUFFcEIzRSxVQURyQmlNLFFBQ1NJO1VBRVQsZUFKeUMxSCxJQUVwQjNFLEVBQVQ1VztVQUVaLElBQ0lzakIsS0FIS0w7VUFFVCxHQUNJSyxPQUpKVDtZQU1FO2lCQUxtQmpNO2FBS1gsb0JBUkU3VSxFQU1SdWhCO2FBSEtMLEdBR0xLO2FBSFF0akI7YUFBUzRXOztVQU9uQixjQVRrQjZMLEtBRUxTLEdBRjBCM0gsSUFFcEIzRSxVQURTa00sUUFDZkksUUFnQitDO01BbEJwRSxTQW9CSU8sUUFBUUMsT0FBT25JLElBQUlxSCxPQUFPdmdCO1FBQzVCLFNBRDRCQSxZQUM1Qjs7OztVQUNFO1lBQVE7OEJBdkJNTixFQXFCTjJoQixTQUNWcHBCO2FBQ1UsTUFGV3NvQixTQUNyQnRvQjs7Y0FHeUI7Z0JBSkpzb0I7O2dCQUdmaFU7Ozs7Z0JBQ21CLFdBekJiRixJQXlCaUIsZUFKWjZNLElBR1gzTSxNQURBcEg7Z0JBR0YsZUFMYStULElBR1gzTSxhQUVlLGVBTEoyTSxJQUdYM007Z0JBRUY7O2NBR0YsZUFSZTJNLElBR1gzTSxhQURBcEg7Y0FNSixTQVBGbE47Ozs7Z0JBUUk7TUE3Qk4sU0ErQlFxcEIsT0FBT0QsT0FBT25JLElBQUlxSCxPQUFPdmdCO1FBQy9CLEdBRCtCQSxTQUNULGVBRFRxaEIsT0FBT25JLElBQUlxSCxPQUFPdmdCO1FBQzBCLE9BRDFCQSxZQUMwQixHQUQxQkEsTUFFekJuQztRQUVKLE9BSld3akIsU0FFUHhqQixPQUZjcWIsSUFBSXFILFNBRWxCMWlCLE9BQ0FDO1FBRUosT0FMV3VqQixPQWhDRzNoQixFQWdDSDJoQixTQUdQdmpCLE9BREFEO1FBR0osYUFMV3dqQixTQUdQdmpCLE9BREFELEdBRmNxYixJQUFJcUgsU0FFbEIxaUIsT0FDQUMsR0FIY29iLElBQUlxSCxPQU9yQjtNQXRDTCxJQXdDSWhpQixFQXpDY21CO01BQ2xCLEdBd0NJbkIsT0FDZ0IsaUJBMUNGbUIsSUF5Q2RuQjtNQXhDSixJQXlDeUMsR0FEckNBLFVBQ3FDLEdBRHJDQSxJQUVFVixPQUVKLHlCQURJQztNQUVKLE9BSElELEdBRUFvTCxJQURBbkw7TUFHSixTQS9DZ0I0QixFQTRDWjVCLEdBREFEO01BSUosYUFISUMsR0FEQUQsR0FFQW9MLElBREFuTCxHQTVDWTRCLElBaURmO2FBS0Q4a0IsU0FBTzlrQjtNQUNULFNBQVFnWSxJQUFJemY7UUFDVixHQURVQSxJQURIeUg7VUFJRyxNQUpIQSxNQUNHekgsR0FHQSxLQUhBQTtVQUlLLFVBRFQ2RSxpQlp4ZGIsT1lxZGE0YTtRQUtELFFBQU87TUFMZDs0QlpyZEwsT1lxZGFBLGVBT0g7YUFHSCtNLFVBQVEva0I7TUFDVixTQUFRZ1ksSUFBSXpmO1FBQ1YsR0FEVUEsSUFERnlIO1VBSUUsTUFKRkEsTUFDRXpILEdBR0EsS0FIQUE7VUFJUyxhQUpUQSxFQUdKNkUsa0JabmViLE9ZZ2VhNGE7UUFLRCxRQUFPO01BTGQ7NEJaaGVMLE9ZZ2VhQSxlQU9IO2FBYUhnTixTQUFPcEk7TUFDVDs7T0FBUSwyQkFBbUIvUixJQUFJek4sR0FBSyxVQUFMQSxFQUFKeU4sSUFBZSxPQURqQytSO09BVEMsYUFESXZIO09BRWQseUJBREkvVTtPQUNKLElBRElBOzthQURVK1U7OztjQUtOblcsWUFBSkM7VUFBVSxXQUFWQTtVQUFVLDhCQUFORDs7UUFERSxPQUZOYyxFQVVTO2FBR1hpbEIsYUFBYXhvQixFQUFFdUQ7TUFDakIsSUFBSW5CLEVBRGFtQjtNQUNqQixTQUFJbkIsRUFDVTtNQURkLElBRVUsaUJBRk5BLEVBRW1CLFdBSFJwQyxFQUFFdUQsT0FHUCxLQUZObkIsVUFFTTs7WUFDUnRHO1FBQ0U7Z0JBREZBLEtBQ3VCLFdBTFZrRSxFQUFFdUQsTUFJZnpIO1VBQ0UsU0FERkE7OztNQUdBLE9BSklxRSxDQUtIO2FBRURzb0IsZUFBZXpvQixFQUFFdUQ7TUFDbkIsTUFEbUJBLGFBRW5CLHlCQURJbkIsR0FDSixLQURJQSxVQUNKOztZQUNBdEc7UUFDRTtnQkFERkEsS0FDaUIsV0FKQWtFLEVBQUV1RCxNQUduQnpIO1VBQ0UsU0FERkE7OztNQUdBLE9BSklxRSxDQUlIOzs7Ozs7O3NCWnpnQk47OztPWTJMT3FtQjs7T0FLQUM7T0FTQUM7T0FnQkFDO09BY0FFO09BTUFDO09BTUFDO09BSUFDO09BS0FJO09BR0FDO09BVUFFO09BZ0NBSTtPQXRCQUY7T0F5QkFHO09BU0FDO09BUUFDO09BaERBTjtPQWNBRTtPQW1EQU07T0FUQUQ7T0FrQkFFO09BVUFDO09BV0FDO09Ba0RBQzs7T0FzREFDO09BV0FDO09BcUJBQztPQUtBQztPQVVBQzs7Ozs7O09BdmVGckQ7T0FDQUM7T0FDQUM7T0FzRkFNO09BQ0FDO09BdEZBN2tCO09BQ0FDO09BQ0FDO09BS0F3a0I7T0FDQXZrQjtPQUNBQztPQUNBQztPQVBBa2tCO09BQ0FDO09BQ0FDO09BMkVBRTtPQWxFQXBqQjtPQUNBRDs7T0FxRkF3akI7T0FFU0M7T0FLQUM7T0FLQUM7T0FJQUM7T0FLQUM7T0FLQUM7T0FPVEM7O3VCWnBLTDs7O1FZMkxPRzs7UUFLQUM7UUFTQUM7UUFnQkFDO1FBY0FFO1FBTUFDO1FBTUFDO1FBSUFDO1FBS0FJO1FBR0FDO1FBVUFFO1FBZ0NBSTtRQXRCQUY7UUF5QkFHO1FBU0FDO1FBUUFDO1FBaERBTjtRQWNBRTtRQW1EQU07UUFUQUQ7UUFrQkFFO1FBVUFDO1FBV0FDO1FBa0RBQzs7UUFzREFDO1FBV0FDO1FBcUJBQztRQUtBQztRQVVBQzs7O1FxQnRkRkMsU0FDQUMsUUFDQUM7YUFDQUMsT0FBS3ZvQixHQUFJLE9BQUpBLFNBQVk7YUFDakJ3b0IsT0FBS3hvQixHQUFJLE9BQUpBLFNBQVk7YUFDakJ5b0IsTUFBSXpvQixHQUFPLHlCQUFQQSxjQUFnQztRQUNwQzBvQixzQkFDQUM7YUFDQUMsU0FBTzVvQixHQUFJLE9BQUpBLE1BQWtCO0lBS1QsU0FIaEI2b0IsZ0JBSU03b0I7TUFDd0I7O2FBQXZCLG1CQUREQTs7O2FBQ3dCLGlCQUR4QkE7T0FFQSxVQUZBQTtNQUlBLFFBQUk7YUFTVjhvQixZQUFVOW9CLEdBQUksNkJBQUpBLEVBQWlCO2FBSTNCK29CLGdCQUFjN29CO01BRWhCO1FBQVMsK0JBRk9BOzs7K0JBR0U7UUFQRixXQU9NO2FBSXBCOG9CLFdBQVMzb0IsRUFBT0MsR0FBUSx3QkFBZkQsRUFBT0MsRUFBMEI7YUFDMUMyb0IsU0FBTzVvQixFQUFPQyxHQUFRLDhCQUFmRCxFQUFPQyxNQUF1QjthQUVyQzRvQixpQkFBaUJscEIsRUFBRW1wQjtNQUNiLHdCQURXbnBCLG1CQUFFbXBCLG1CQUNrQjthQUVyQ0MsTUFBSS9vQixFQUFFQyxHQUFXLHNCQUFiRCxFQUFFQyxHQUFGRCxFQUFFQyxDQUErQjthQUNyQytvQixNQUFJaHBCLEVBQUVDLEdBQVcseUJBQWJELEVBQUVDLEdBQUZELEVBQUVDLENBQStCO2FBS3JDZ3BCLGFBQWF0cEIsRUFBRThYO01BQ2QsaUJBRGNBLEtBRVosNkJBRlU5WCxFQUFFOFgsR0FqRGZ1USxNQURBRDtNQXNEb0QsTUFBSCxTQUpwQ3BvQixZQUFFOFgsUUFLUCxFQUxLOVgsSUFLQyxTQURWdXBCLEVBSld6UjtNQU1aLDZCQURDalksRUFMV2lZLEdBSVh5UixXQUUyQzthQUUvQ0MsYUFBYXhwQixFQUFFOFgsR0FDakIsT0FEZTlYLElBQ2MsU0FBbEIsYUFESUEsRUFBRThYLFNBQ2U7Ozs7T0EzRDlCc1E7T0FDQUM7T0FDQUM7T0FnREFnQjtPQVFBRTtPQXZEQWpCO09BQ0FDO09BQ0FDO09BRUFFO09BREFEO09BRUFFO09BRUFDO09BcUJBRTtPQUpBRDtPQVdBRTtPQUdBRTtPQUZBRDtPQUtBRztPQUNBQzs7YS9CNUNBSSxPQUFLenBCLEdBQUksc0JBQUpBLE1BQVk7YUFDakIwcEIsT0FBSzFwQixHQUFJLHNCQUFKQSxNQUFZO2FBQ2pCMnBCLE1BQUkzcEI7TUFBTyx5QkFBUEEsU0FBMkIsdUJBQTNCQSxFQUFnQzthQUdwQzRwQixTQUFPNXBCLEdBQUksOEJBQUpBLE1BQWtCO0lBR2IsSUFBVjZwQixVQUFVO2FBRFpDLGtCQUVFOXBCO01BQ3dCOzthQUF2QixtQkFiSGpHLE9BWUVpRzs7O2FBQ3dCLG1CQUR4QkEsRUFEQTZwQjtPQUdBLHNDQUZBN3BCO01BSUEsUUFBSTtJQUxNLFNBUVorcEIsWUFBVS9wQixHQUFJLGlDQUFKQSxFQUFpQjtJQVJmLFNBWVpncUIsZ0JBQWM5cEI7TUFFaEI7UUFBUyxpQ0FGT0E7OzsrQkFHRTtRQVBGLFdBT007SUFmUixTQTRCWitwQixXQUFTNXBCLEVBQU9DLEdBQVEsMEJBQWZELEVBQU9DLEVBQTBCO0lBNUI5QixTQTZCWjRwQixTQUFPN3BCLEVBQU9DLEdBQVEsZ0NBQWZELEVBQU9DLE1BQXVCO0lBN0J6QixTQStCWjZwQixtQkFBaUJucUIsRUFBRW1wQjtNQUNiOzhCQURXbnBCLEVBcENqQjlGLFdBcUNzQixlQURIaXZCLEVBcENuQmp2QixXQXFDcUM7SUFoQ3pCLFNBa0Naa3dCLE1BQUkvcEIsRUFBRUMsR0FBVyxzQkFBYkQsRUFBRUMsR0FBRkQsRUFBRUMsQ0FBK0I7SUFsQ3pCLFNBbUNaK3BCLE1BQUlocUIsRUFBRUMsR0FBVyx5QkFBYkQsRUFBRUMsR0FBRkQsRUFBRUMsQ0FBK0I7SUFuQ3pCLFNBd0NaZ3FCLGVBQWF0cUIsRUFBRThYO01BQ2QsaUJBRGNBLEVBbkRmL2Q7T0FxREcsK0JBRlVpRyxFQUFFOFgsR0FsRGY5ZCxNQURBRDtNQXVEb0Q7OztVQUFILHVCQUF6QiwrQkFKWGlHLEtBQUU4WDtPQUtQLGlCQUxLOVgsRUFLQyxlQURWdXBCLEVBSld6UjtNQU1aLCtCQURDalksRUFMV2lZLEdBTW1CLE9BRjlCeVIsSUFFMkM7SUE5Q25DLFNBZ0RaZ0IsZUFBYXZxQixFQUFFOFg7TUFDakIsc0JBRGU5WCxFQUNjLGVBQWxCLGVBRElBLEVBQUU4WCxNQUNlO0lBakRsQjs7O09BWFovZDtPQUNBQztPQUNBQztPQWlEQXF3QjtPQVFBQztPQXhEQWQ7T0FDQUM7T0FDQUM7T0FFQXh2QjtPQURBRDtPQUVBMHZCO09BRUFFO09BYUFFO09BSkFEO09Bb0JBRTtPQUdBRTtPQUZBRDtPQUtBRTtPQUNBQztJQW5DWTtRZ0JiWkcsU0FDQUMsUUFDQUM7YUFDQUMsT0FBSzNxQixHQUFJLE9BQUpBLFNBQVk7YUFDakI0cUIsT0FBSzVxQixHQUFJLE9BQUpBLFNBQVk7YUFDakI2cUIsTUFBSTdxQixHQUFPLHlCQUFQQSxjQUFnQztJQUUxQiwwQkFDQTthQUNWZ3JCLFNBQU9ockIsR0FBSSxPQUFKQSxNQUFrQjtJQUdiLFNBRFppckIsa0JBRUVqckI7TUFDd0I7O2FBQXZCLG1CQUREQTs7O2FBQ3dCLGlCQUR4QkE7T0FFQSxVQUZBQTtNQUlBLFFBQUk7SUFMTSxTQVFaa3JCLFlBQVVsckIsR0FBSSwrQkFBSkEsRUFBaUI7SUFSZixTQVlabXJCLGdCQUFjanJCO01BRWhCO1FBQVMsK0JBRk9BOzs7K0JBR0U7UUFQRixXQU9NO0lBZlIsU0FtQlprckIsV0FBUy9xQixFQUFPQyxHQUFRLHdCQUFmRCxFQUFPQyxFQUEwQjtJQW5COUIsU0FvQlorcUIsU0FBT2hyQixFQUFPQyxHQUFRLDhCQUFmRCxFQUFPQyxNQUF1QjtJQXBCekIsU0FzQlpnckIsbUJBQWlCdHJCLEVBQUVtcEI7TUFDYix3QkFEV25wQixtQkFBRW1wQixtQkFDa0I7SUF2QnpCLFNBeUJab0MsTUFBSWxyQixFQUFFQyxHQUFXLHNCQUFiRCxFQUFFQyxHQUFGRCxFQUFFQyxDQUErQjtJQXpCekIsU0EwQlprckIsTUFBSW5yQixFQUFFQyxHQUFXLHlCQUFiRCxFQUFFQyxHQUFGRCxFQUFFQyxDQUErQjtJQTFCekIsU0ErQlptckIsZUFBYXpyQixFQUFFOFg7TUFDZCxpQkFEY0EsS0FFWiwrQkFGVTlYLEVBQUU4WCxHQTFDZjJTLE1BREFEO01BK0NvRCxNQUFILFNBSnBDeHFCLFlBQUU4WCxRQUtQLEVBTEs5WCxJQUtDLFNBRFZ1cEIsRUFKV3pSO01BTVosK0JBRENqWSxFQUxXaVksR0FJWHlSLFdBRTJDO0lBckNuQyxTQXVDWm1DLGVBQWExckIsRUFBRThYO01BQ2pCLE9BRGU5WCxJQUNjLFNBQWxCLGVBRElBLEVBQUU4WCxTQUNlO0lBeENsQjs7O09BWlowUztPQUNBQztPQUNBQztPQXlDQWU7T0FRQUM7T0FoREFmO09BQ0FDO09BQ0FDO09BQ0F4aEI7T0FFQTBoQjtPQURBRDtPQUVBRTtPQUVBQztPQWFBRTtPQUpBRDtPQVdBRTtPQUdBRTtPQUZBRDtPQUtBRTtPQUNBQztJQTFCWTthZldaRyxPQUFPQyxJQUFJQyxNQUFNbG5CO01BQ047c0NBREppbkIsSUFBSUMsTUFBTWxuQjtPQUNOLFVBQVR5SDtPQUFTLFVBRE16SCxZQXZDakJ2SztNQXlDaUQ7a0JBRmhDdUs7UUFFZ0MsU0FGaENBO1FBRWdDLHFDQUZoQ0E7TUFPbkIsT0FOSXlILE1BTUU7YUFHSjBmLFdBQVdGLElBQUlDLE1BQU1sbkI7TUFDVjswQ0FEQWluQixJQUFJQyxNQUFNbG5CO09BQ1YsVUFBVHlIO09BQVMsVUFEVXpILFlBakRyQnZLO01BbURpRDtrQkFGNUJ1SztRQUU0QixTQUY1QkE7UUFFNEIscUNBRjVCQTtNQU92QixPQU5JeUgsTUFNRTthQWtFSjJmLGNBQWdCQyxJQUF1QnRzQjtNQUN6QyxHQURrQnNzQixJQUFpQixRQUFqQkEsc0JBQWlCQyxhQUFqQkM7TUFDbEI7WUFEa0JBLGVBUGhCN3hCLFNBbkhBRDtPQXFJcUMsS0FYckI4eEIsZUFQaEI3eEIsU0FuSEFEO09BMkgyQjtPQVFqQjs7Ozs7Ozs7T0FQRztNQURDO3VCQWpFaUJneUI7Z0JBRS9COzs2QkE4RHVDMXNCLEVBaEVuQnlzQixXQUN0QixxQkFEc0JBO2lCQUVwQixNQURFRSxXQUQ2QkQ7Z0JBYWpDLHdCQWJpQ0EsMEJBRzdCcHNCO2tCQVUrRDtzQkFibENvc0IsNkJBRzdCcHNCOztvQkFVK0QscUJBYmxDb3NCO21CQWlCMUI7cUJBakIwQkE7O29CQTRCM0I7cUJBREVFO3NCQUNGOzRCQUxLLHFCQXZCc0JGO29CQTRCM0IsR0FERUUsV0EzQnlCRiw2QkFHN0Jwc0I7cUJBMkJLO29CQUZILElBR0V1c0IsT0FBUyxrQkFKVEQ7b0JBTUosS0FqQzZCRixvQkErQnpCRyxTQS9CeUJIO29CQWlDN0IsWUFGSUc7a0JBU04sSUFBSXJzQixFQXhDMkJrc0I7a0JBd0MvQixZQXhDK0JBLFlBd0MzQmxzQjtrQkFBSixZQXhDK0Jrc0IsWUF3QzNCbHNCO2tCQUFKOzhCQXhDK0Jrc0IsWUF3QzNCbHNCO2tCQUFKLFlBeEMrQmtzQixZQXdDM0Jsc0I7a0JBQUosTUF4QytCa3NCLFdBd0MvQixLQU1JNWYscUJBTko7O3dCQU9BaFI7b0JBQ0U7c0JBQVEsSUFBSm9FLEVBQUksaUJBRk40TSxFQUNKaFI7c0JBQ1UsUUFBSm9FLEVBRUYsaUJBSkE0TSxFQUNKaFIsWUFDTW9FLElBUkZNO3NCQVFNLFNBRFYxRTs7O2dCQU9GLEtBdERzQjJ3QixhQUFXQyxvQkFHN0Jwc0I7Z0JBbURKLFlBdERpQ29zQixZQUc3QnBzQjtnQkFtREo7Ozs7Ozs7Ozs7O21CQXVCQzthQUVDd3NCLGFBQWNOLGVBQWVqb0I7TUFDL0I7ZUFEZ0Jpb0Isd0JBQ21Cdm5CLElBQUkzRSxHQUFLLGFBRGJpRSxHQUNJVSxNQUFJM0UsRUFBcUIsRUFBQzthQUUzRHlzQixjQUFjVCxJQUF1QjlyQjtNQUN2QyxHQURnQjhyQixJQUFpQixRQUFqQkEsc0JBQWlCQyxhQUFqQkM7TUFDaEI7WUFEZ0JBLGVBekJkN3hCLFNBbkhBRDtPQXdKcUMsS0FadkI4eEIsZUF6QmQ3eEIsU0FuSEFEO09Bc0pVOzs7Ozs7O2tDQVYyQjhGO09BRXhCLGNBRndCQTtNQUV4Qjt1QkFETWtzQixRQUFVLHNCQUE4Qjs7Ozs7Ozs7Ozs7bUJBYTVEO2FBRUNNLGFBQWFOLE9BQU9PO01BQ3RCLGdCQURlUCxjQUFPTztNQUN0QixZQURzQkE7TUFDdEIsUUFDdUM7YUFFckNDLGFBQWFSLE9BQU9TO01BQ3RCLFNBRGVUO01BQ2YsZ0JBRHNCUztNQUN0QixRQUErRDthQUU3RFgsZUFBZUUsUUFBUyxPQUFUQSxlQW5LZmh5QixhQW1Lc0Q7YUFFdEQweUIsT0FBT1Y7TUFDVCxJQUFJN29CLElBREs2b0I7TUFDVCxrQkFEU0Esb0JBQ0w3b0IsSUFDdUQ7YUFFekR3cEIsV0FBV1gsT0FBT2pJLEdBQUdDO01BQ3ZCLElBQUk3Z0IsSUFEbUI2Z0IsS0FBSEQsT0FDcEIsa0JBRGFpSSxVQUFPakksR0FDaEI1Z0IsSUFDcUM7YUFFdkN5cEIsZUFBZVosT0FBT2pJLEdBQUdDO01BQzNCLFFBRHdCRCxJQUNSLElBQ1Y1Z0IsSUFGcUI2Z0IsS0FBSEQsT0FHakIscUJBSFVpSSxVQUFPakksR0FFbEI1Z0I7TUFFRyxRQUVOO2FBRUQwcEIsZ0JBQWdCYixPQUFPNXdCLEdBQUksc0JBQVg0d0IsVUFBTzV3QixFQUFpQzthQUV4RDB4QixvQkFBb0JkLE9BQU81d0I7TUFDN0IsWUFENkJBLEtBRXRCLGVBRmU0d0IsVUFBTzV3QixLQUl2QjthQUdKMnhCLFlBQVlmLE9BQU81d0I7TUFDckIsc0JBRGM0d0Isc0JBQU81d0IsTUFDaUM7YUFFcEQ0eEIsYUFBYWhCLFFBQVMsT0FBVEEsYUFBb0M7YUFDakRpQixXQUFXakIsUUFBUyxPQUFUQSxhQUFtQzthQUU5Q2tCLGVBQWVsQixRQUFTLE9BQVRBLFVBQTJCO2FBQzFDbUIsYUFBYW5CLFFBQVMsT0FBVEEsVUFBMEI7YUFFdkNvQixTQUFTcEI7TUFDWDtXQURXQTtPQUNYLEtBQUlxQixRQXhNRnJ6QjtPQXdNRixXQURXZ3lCLGdCQUNQcUI7TUFIb0IsV0FTbkI7YUFNSEMsWUFBWXpMO01BQ2Q7O1VBRUl3TCxJQUhVeEw7TUFDZCxHQUVJd0wsUUF2TkZyekI7T0F5TkEsWUFGRXF6QixPQXBHRnB6QjtNQXVHRjtjQUF1Qjs7OztPQTFOckJEO09BeUlBb3lCO09BR0FDO09BbEJBVjtPQWtDQVc7T0FJQUU7T0FHQVY7T0FFQVk7T0F5QkFLO09BR0FDO09BQ0FDO09BRUFDO09BQ0FDO09BRUFDO09BYUFFO09BM0NBWDtPQUlBQztPQVFBQztPQUVBQztPQWhKQXZCO09BVUFHOztJK0JnQlU7Ozs7OztPQUNBO09BQ1MsbUIvQm5FbkIxeEI7TytCb0VpQixtQi9CcEVqQkE7Ozs7Ozs7Ozs7Ozs7SStCaUVVLFNBaUJWd3pCO01BQ0Y7ZUFuQkVEO09BbUJGLFFBQUlFO09BRVEscUJBRFJDO09BRVEscUJBRlJBO09BR1kseUJBSFpBLFEvQnBGRjF6QjtPK0J3RlksdUJBSlYwekIsUS9CcEZGMXpCO00rQnlGQSxPQXpCQXV6QixTQXFCRUksUUFGQUY7TUFNRixTQUpFRTtNQU1GLE9BM0JBSixTQXNCRUssUUFIQUg7TUFRRixTQUxFRztNQU9GLE9BN0JBTCxTQXVCRU0sWUFKQUo7TUFVRixTQU5FSTtNQVFGLE9BL0JBTixTQXdCRU8sVUFMQUw7TUFZRixTQVBFSztNQU9GLFNBWEVKO01BV0YsUUFFd0I7SUFoQ2QsU0FrQ1ZLO01BQ0YsT0FwQ0VSLG1CQW9DRixtQkFDdUI7SUFwQ1gsSUFzQ1ZTLHlDQUFnRCxRQUFLO0lBdEMzQyxTQXdDVkMsUUFBUUMsT0FBT0MsTUFBTUMsTUFBTXBDO01BQzdCO2dCQTFDRXVCO09BMENGLFFBMUNFQTtPQTBDRixlQTFDRUE7T0EwQ0YsV0ExQ0VBO09BMENGLGVBMUNFQTtPQTBDRixVQTFDRUE7T0EwQ0YsYUExQ0VBO01BMENGLFNBMUNFQTtNQTBDRixTQURpQlk7TUFDakIsVUFENkJuQztNQUM3QjtZQUFhNEMsTUFBSUM7UUFDZjtVQUFNLG9DQUZFWCxPQXpDUlgsSUEwQ1dxQixJQUFJQztVQUNUOzthQUVjLElBSExDLE1BR0ssV0FKQ1YsTUFBTXBDO2FBSVAsU0FKT0E7YUFJUCxVQUpPQTthQUlQLElBSFQ0QyxNQUFJQzs7bUJBUVg7bUJBU0EsbUJBakJPRCxNQUFJQzttQkFtQlgsbUJBbkJPRCxNQUFJQzs7YUFVWDtlQUUrRDtxQkF0RG5FdEI7Z0JBc0RtRTs0QkFBaEMsaUJBYjNCVywwQkF6Q1JYO2dCQXNEbUU7Z0JBWnBEd0I7Z0JBQUpDOzs7dUNBZVA7bUJBZldELFFBQUpDOzJCQUFJSDs7O2FBcUJYLFdBdEJJWCxpQ0FDR1UsTUFBSUM7WUFtQ1pJOztRQUNILElBQUlDLFVBOUVKM0I7UUE4RUEsVUFiRWM7UUFhRixVQVpFQztRQVlGLFNBWEVDO1FBV0YsVUFWRUM7UUFVRixTQVRFQztRQVNGLFNBUkVDO1FBUUYsVUFQRUM7UUFPRixHQURHTSxtQkFXQyxJQURLenZCLEVBVk55dkIsT0FXQyxPQURLenZCO1FBR0w7O2lCQUNPMnZCO1VBQ0EsWUFEQUE7WUFFdUIsc0JBRnZCQTtZQUVFLHdCQXBETGpCLDhCQXFDSmdCOzs7VUFnQlMsd0JBckRMaEIsVUFrREdpQixrQkFiUEQsYUFnQndEO1FBSnhELE1BYkRELElBa0JVO0lBOUZILFNBZ0dWRyxTQUFTN0IsSUFBSTN0QjtNQUNmLFNBRFcydEIsVUFBSTN0QixNQUNMLHdCQURDMnRCLHNCQUN3QjtJQWpHdkIsU0FtR1Y4QjtNbEM3TEwsSWtDOExnQmowQixFQXJHWG15QjtNQXNHQTtlQURXbnlCO1VBRU47aUJBdkdMbXlCLFVBcUdXbnlCO1dBR0Esb0JBeEdYbXlCO1dBd0dXLE1BeEdYQSxVQXFHV255QjtXQUlBLG9CQXpHWG15QjtVQTBHSyxpQkFGQytCLEdBQ0FDLElBQ2EsT0FGYkQ7VUFERCxJQUdzQixJQUxoQmwwQjs7UUFDSSxTQXRHZm15QjtRQXNHZSx3QkF0R2ZBLHVCQTZHZTtJQTVHTCxTQThHVmlDO01BQW9CLFNBL0dwQmpDLFFBK0dvQix3QkEvR3BCQSxzQkErR2dEO0lBOUd0QyxTQStHVmtDLGNBQWM3dkI7TUFBSSxTQWhIbEIydEIscUJBZ0hjM3RCO01BQUksd0JBaEhsQjJ0QixzQkFnSHFFO0lBL0czRCxTQWdIVm1DLFlBQVk5dkI7TUFBSSxTQWpIaEIydEIscUJBaUhZM3RCO01BQUksd0JBakhoQjJ0QixzQkFpSGlFO0lBaEh2RCxTQWtIVm9DLG9CQUFrQiw2QkFBOEI7SUFsSHRDLFNBbUhWQyxrQkFBZ0IsMkJBQTRCO0lBbkhsQyxTQW9IVkMsVUFBVWp3QixHQUFJLHFCQUFKQSxLQUE4QjtJQXBIOUIsU0FxSFZrd0IsUUFBUWx3QixHQUFJLG1CQUFKQSxLQUE0QjtJQXJIMUIsU0F1SFZtd0IscUJBQXFCWjtNQUN2QixrQkFsRkVuQix5QkFpRnFCbUIsSUFDZTtJQXhIMUIsU0EwSFZhLG1CQUEyQixRQUFFO0lBMUhuQjs7O09Ba0hWTDtPQUNBQztPQUNBQztPQUNBQztPQWxCQVQ7T0FXQUc7T0FDQUM7T0FDQUM7T0E5RUEzQjs7c0JsQzVITDs7T2tDa0lLRTtPQXdEQW1CO09BdUJBVztPQUdBQztJQTFIVTs7Ozs7a0JDVk5DLGNBQVMsVUFFRyxJQUFOckosV0FBTSxPQUFOQSxFQURHLFFBQ0k7a0JBT2I3YixPQUFPckosRUFBRWxDLEVBQUVDO1dBQ2IsR0FEU2lDLEVBQ3NDLE1BRHRDQSxLQUNMd3VCLEdBQXFDdEosV0FBckNzSjtXQUNKLEdBRmF6d0IsRUFFa0MsUUFGbENBLEtBRVQyd0IsR0FBcUNELGFBQXJDQztXQUNKLFNBRElBLE1BREFGLGNBQ0FFO3FCQUZLMXVCLEVBQUVsQyxFQUFFQyxPQUd5QztrQkFPcEQ0d0IsSUFBSTN1QixFQUFFbEMsRUFBRUM7V0FDVixHQURNaUMsRUFDeUMsTUFEekNBLEtBQ0Z3dUIsR0FBcUN0SixXQUFyQ3NKO1dBQ0osR0FGVXp3QixFQUVxQyxRQUZyQ0EsS0FFTjJ3QixHQUFxQ0QsYUFBckNDO1dBQ0osSUFESUEsY0FEQUY7YUFFZ0IsR0FIZHh1QjtlQU9nQixJQURDNHVCLEdBTmpCNXVCLEtBTVc2dUIsR0FOWDd1QixLQU1LOHVCLEdBTkw5dUIsS0FPZ0IsWUFEQzR1QjtlQUNkLGtCQURFRSxJQUVVLGNBRlZBLEdBQU1ELEdBRUksT0FGRUQsR0FOZjl3QixFQUFFQztlQVNDLEdBSFk2d0I7aUJBT21CLElBRFhHLElBTlJILE1BTUNJLElBTkRKLE1BTU5LLElBTk1MLE1BT21CLFlBRFhHLElBWnZCanhCLEVBQUVDO2lCQWFTLHFCQVBSK3dCLEdBQU1ELEdBTUFJLEtBQU9EO2VBREw7YUFOTjtXQVVKLElBZExSLGNBQ0FFO2FBYXlCLEdBZm5CM3dCO2VBbUJZLElBRENteEIsR0FsQmJueEIsS0FrQk9veEIsR0FsQlBweEIsS0FrQkNxeEIsR0FsQkRyeEIsS0FtQlksWUFEWHF4QjtlQUNGLGtCQURjRixJQUVSLHFCQXBCVGx2QixFQUFFbEMsRUFrQkdzeEIsSUFBTUQsR0FBTUQ7ZUFHWixHQUhBRTtpQkFPNkIsSUFEVEMsSUFOcEJELE1BTWFFLElBTmJGLE1BTU1HLElBTk5ILE1BTzZCLFlBRFRDLElBTmRGLEdBQU1EO2lCQU9KLHFCQXpCYmx2QixFQUFFbEMsRUF3QlN5eEIsS0FBT0Q7ZUFETDthQU5OO1dBV1gsU0ExQkVaLE1BREFGLGNBQ0FFO3FCQUZFMXVCLEVBQUVsQyxFQUFFQyxPQTRCOEM7a0JBSWxEeXhCLElBQUlqeEIsRUFFUm1NO1duQ3JJVCxHbUNxSVNBO2FBQ1UsSUFEQzNNLEVBQVgyTSxLQUFRNU0sRUFBUjRNLEtBQUsxSyxFQUFMMEssS0FDVSxvQkFIRm5NLEVBRUFUO2FBQ0UsU0FBSmdELEVBQ1UsT0FGaEI0SjthQUdFLFFBRkk1SixHQU1PLElBQUxvdUIsR0FBSyxJQVRMM3dCLEVBRUdSLEdBT0UsT0FQRkEsTUFPSG14QixHQVBSeGtCLEVBUTJCLElBUnRCMUssRUFBR2xDLEVBT0FveEI7YUFORSxJQUdGSixHQUFLLElBTkx2d0IsRUFFSHlCO2FBSVEsT0FKUkEsTUFJRzh1QixHQUpScGtCLEVBSzJCLElBRG5Cb2tCLEdBSkFoeEIsRUFBR0M7V0FERixZQUREUTtrQkFZUmt4QixVQUFVbHhCLEdBQUksWUFBSkEsTUFBb0M7a0JBUzFDbXhCLGdCQUFnQm54QjtXbkN4SjdCO2lCbUMwSnFCUixXQUFIRCxXQUFIa0M7YUFDRiwyQkFIZ0J6QixFQUVkeUIsR0FBR2xDLEVBQUdDO1dBREgsaUJBRFdRO2tCQUtoQm94QixnQkFBZ0JweEI7V25DN0o3QjtpQm1DK0pxQlIsV0FBSEQsV0FBSGtDO2FBQ0UsV0FERkEsRUFBR2xDLEVBQ0QsZ0JBSFlTLEVBRVJSO1dBREgsaUJBRFdRO2tCQVFoQnVULEtBQUs5UixFQUFFbEMsRUFBRUM7V0FDZixHQURXaUM7Z0JBQUlqQzs7Z0JBSTJDNnhCLEdBSjNDN3hCO2dCQUlxQ214QixHQUpyQ254QjtnQkFJK0JveEIsR0FKL0JweEI7Z0JBSXlCcXhCLEdBSnpCcnhCO2dCQUlhOHhCLEdBSmpCN3ZCO2dCQUlXNHVCLEdBSlg1dUI7Z0JBSUs2dUIsR0FKTDd1QjtnQkFJRDh1QixHQUpDOXVCO3VCQUkrQzR2QixjQUE5QkM7d0JBQ00sSUFEeEJmLEdBQU1ELEdBQ2tCLEtBRFpELEdBSlQ5d0IsRUFBRUM7eUJBSWE4eEIsY0FBOEJELEdBRTlCLFNBTmpCNXZCLEVBQUVsQyxFQUkyQnN4QixJQUFNRCxHQUFNRCxJQUdoRCxPQVBPbHZCLEVBQUVsQyxFQUFFQzthQUdDLHVCQUhIRCxFQUFGa0M7V0FFSyx1QkFGSGxDLEVBQUVDLEVBT0M7a0JBSVYreEI7V25DaExiO1dtQ2dMdUI7Ozs7ZUFFTSxJQUFOaHlCO2VBQU0sT0FBTkE7YUFETCxnQkFFVztrQkFFaEJpeUI7V25DckxiO1dtQ3FMMkI7Ozs7ZUFFRSxJQUFOanlCO2VBQU0sVUFBTkE7YUFETCxTQUVlO2tCQUVwQmt5QjtXbkMxTGI7V21DMEx1Qjs7OEJBR0gsK0JBQU4xUDtlQURlLElBQWZ4aUI7ZUFBZSxPQUFmQTthQURJLGdCQUVXO2tCQUVoQm15QjtXbkMvTGI7V21DK0wyQjs7OEJBR1AsK0JBQU4zUDtlQURlLElBQWZ4aUI7ZUFBZSxVQUFmQTthQURJLFNBRWU7a0JBSXBCb3lCO1dBQWlCOzs7bUJBR1ZueUIsV0FBSEQsV0FBYSxnQ0FBYkEsRUFBR0M7YUFEUyxJQUFOb3lCO2FBQU0sT0FBTkE7V0FETCwwQ0FFa0M7a0JBZ0IzQ3RrQixPQUFPaU0sR0FBR0Y7V0FDWixHQURTRTthQUlHLEdBSkFGO2VBSXFCLHdCQUpyQkEsSUFJUSxZQUpYRSxHQUlXLFFBSlJGO2FBR0ksT0FIUEU7V0FFTyxPQUZKRixFQUl3QztrQkFROUN3WSxNQUFNN3hCO1duQ3JPbkI7YW1DeU9tQixJQURDUixXQUFIRCxXQUFIa0MsV0FDSyxvQkFKQXpCLEVBR0ZUO2FBQ0UsU0FBSmdELEVBQ1UsVUFGWGQsSUFBTWpDO2FBR0osUUFGRCtDO2VBS21CLGdCQVRmdkMsRUFHQ1IsR0FNYztlQUFjLGVBTmxDaUMsRUFBR2xDLEVBTUM4d0IsSUFBSXlCLEtBQU1uQjthQUxUO2NBR2UsY0FQZjN3QixFQUdMeUI7Y0FJb0I7OzthQUF3QixVQUF4Qzh1QixHQUFJd0IsT0FBb0MsS0FBOUJsQixHQUpYdHhCLEVBQUdDO1dBRFQ7YUFXRmtOO2tCQUVBcUIsZ0JBQVcsZ0JBQW1DO2tCQUUxQ2lrQixJQUFJaHlCO1duQ3RQakI7OztlbUN5UG1CO2dCQURDUjtnQkFBSEQ7Z0JBQUhrQztnQkFDSyxvQkFIRnpCLEVBRUFUO2dCQUNFLFdBQUpnRDtlQUFJLFFBRkQ7ZUFFQyxJQURDd2YsYUFDTHhmLEVBREsvQyxFQUFOaUMsVUFBTXNnQjs7YUFERjtrQkFLTGtRLE9BQU9qeUIsRUFFWG1NO1duQzlQVCxHbUM4UFNBO2FBQ1UsSUFERTNNLEVBQVoyTSxLQUFTNU0sRUFBVDRNLEtBQU0xSyxFQUFOMEssS0FDVSxvQkFIQ25NLEVBRUZUO2FBQ0MsU0FBSmdEO2VBL0NSLEdBOENRZDtpQkEzQ0ksR0EyQ0VqQzttQkEzQ2tCLHdCQTJDbEJBLEdBM0NLLFdBMkNYaUMsRUEzQ1csUUEyQ0xqQztpQkE1Q0UsT0E0Q1JpQztlQTdDUSxPQTZDRmpDO2FBSVIsUUFIRStDLEdBUVMsSUFBTG91QixHQUFLLE9BWEozd0IsRUFFQ1IsR0FTRyxPQVRIQSxNQVNGbXhCLEdBVFZ4a0IsRUFXVyxJQVhMMUssRUFBR2xDLEVBU0NveEI7YUFSQSxJQUlBSixHQUFLLE9BUEp2d0IsRUFFTHlCO2FBS1MsT0FMVEEsTUFLSTh1QixHQUxWcGtCLEVBT1csSUFGRG9rQixHQUxEaHhCLEVBQUdDO1dBREg7a0JBY0wweUIsTUFBTXJ4QixHQUFHQztXQUNmLEdBRFlEO2dCQUFHQzs7Z0JBSTJDd1ksR0FKM0N4WTtnQkFJcUNxeEIsR0FKckNyeEI7Z0JBSStCK0gsR0FKL0IvSDtnQkFJeUJFLEdBSnpCRjtnQkFJYTBZLEdBSmhCM1k7Z0JBSVV3VSxHQUpWeFU7Z0JBSUlrVCxHQUpKbFQ7Z0JBSUZFLEdBSkVGO2tCQUk4Q3lZLE1BQTlCRTtpQkFFdEIsU0FGb0RGLEdBRXJDLFdBRnlCelEsR0FKbENoSTtpQkFPYzs4QkFIVmtULEdBSkRqVDtrQkFPVzs7a0JBQ0ksV0FKUnVVLEdBR0YrYztpQkFDUCxrQkFKSHJ4QixHQUdHMFgsTUFIRzFFO2VBT1YsU0FQc0J5RixHQU9QLFdBUEx6RixHQUpEalQ7ZUFZVzs4QkFSb0IrSCxHQUpsQ2hJO2dCQVljOztnQkFDSSxXQURWd3hCLEtBUmdDRjtlQVN2QyxrQkFEQTNaLEtBUjJCeFgsSUFBTTZIO2FBRDdCLE9BSExoSTtXQUVLLE9BRkZDLEVBY047a0JBRUh3eEIsTUFBTXp4QixHQUFHQztXQUNmLEdBRFlEO2dCQUFHQztlQUtMLElBRFl1VSxHQUpWeFUsTUFJSWtULEdBSkpsVCxNQUlGRSxHQUpFRixNQUtGLFdBRE1rVCxHQUpEalQsSUFLTDs7aUJBSW9CLElBRGJxeEIsV0FDYSxXQUxSOWMsR0FJTDhjO2lCQUNKLGtCQUxIcHhCLFNBQU1nVDtlQUNOLElBRUYsYUFBcUIsV0FIUHNCLEdBRUorYztlQUNILG9CQUhMcnhCO2FBRE07V0FEQSxRQU8yQjtrQkFVckN3eEIsVUFBVXZ5QjtXbkM5U3ZCO2FtQ2tUbUIsSUFEQ1IsV0FBSEQsV0FBSGtDLFdBQ0ssb0JBSkl6QixFQUdOVDthQUNFLFNBQUpnRCxFQUNVO2FBQ1QsUUFGREE7ZUFPSSxvQkFYSXZDLEVBR0hSO2VBUUQ7cUJBRVVteEIsWUFBSk4sWUFBcUIsZUFWaEM1dUIsRUFBR2xDLEVBVVE4d0IsSUFBSU07ZUFETDthQVJMLFlBR0EsVUFQSTN3QixFQUdUeUI7YUFJSzttQkFFVW92QixjQUFKTjs7O3VDQUF5Qyx1QkFBckNNLE1BTlp0eEIsRUFBR0MsRUFNeUQ7YUFEckQ7V0FOYiw0QkFBNEIsUUFBSztrQkFhL0JnekIsU0FBUzN4QixHQUFHQztlQUFIdWpCLFFBQUdIO1dBQ2xCO2dCQURlRyxRQUFHSDttQkFHSTdPLEdBSFBnUCxRQUdDdFEsR0FIRHNRLFFBR0x0akIsR0FIS3NqQjsyQkFBR0gsS0FJRztlQUNOLG9CQUZDblEsR0FIRW1RO2VBS0g7aUJBQ2EsSUFBUGlPLFlBQUpueEIsWUFBVyxjQUhsQkQsR0FHT0M7aUJBQVc7bUJBQThCLG9CQUFyQ214QixNQU5OOU4sS0FHT2hQLEdBSEo2TztpQkFPRDs7YUFMWSxTQUtQO2tCQUVoQnRILEtBQUsvYixHQUFHQztXQUNkLEdBRFdEO2dCQUFHQztlQUtKLElBRFl1VSxHQUpYeFUsTUFJS2tULEdBSkxsVCxNQUlERSxHQUpDRixNQUtELFdBRE1rVCxHQUpGalQsSUFLSjs7aUJBSWtCLElBRFhxeEIsV0FDVyxVQUxOOWMsR0FJTDhjO2lCQUNGLG1CQUxMcHhCO2VBQ0EsSUFFRixhQUFxQixVQUhQc1UsR0FFSitjO2VBQ0wsaUJBSEhyeEIsU0FBTWdUO2FBREMsT0FITmxUO1dBRUssUUFPd0I7a0JBSWxDNHhCLFVBQVU1eUIsRUFBRXdJO2VBQUYrSCxNQUFFNlM7V0FDbEI7Z0JBRGdCN1M7O2dCQUdINVEsRUFIRzRRO2dCQUdON1EsRUFITTZROztnQkFBRXVpQixPQUdScHpCLEVBQUdDLEVBSEt5akI7Z0JBQUY3UztnQkFBRTZTOzthQUVQLE9BRk9BLElBRzRCO2tCQWE1Q2xhLFFBQVFsSSxHQUFHQztXQUNrQixtQkFEbEJBLE1BQ0QsZUFERkQsTUFYUThILFFBQUdDO1dBQ25CO2dCQURnQkQ7a0JBQUdDO2lCQU1UO2tCQURzQmtxQixLQUxibHFCO2tCQUtTdXBCLEdBTFR2cEI7a0JBS0tDLEdBTExEO2tCQUtMbXFCLEtBTEVwcUI7a0JBS04wTSxHQUxNMU07a0JBS1ZvTCxHQUxVcEw7a0JBTU4sb0JBREpvTCxHQUFrQmxMO2lCQUNkLFNBQUp0RzttQkFHK0I7bUNBSlQ0dkIsR0FBSVc7b0JBSWIsZUFKVHpkLEdBQUkwZDtvQkFMRXBxQjtvQkFBR0M7O2lCQVFaLE9BRkRyRztlQUZNO2FBREMsT0FITXFHLFFBWTRCO2tCQUUvQ0YsTUFBTTdILEdBQUdDLElBQ1gscUJBRFFELEdBQUdDLE9BQ007a0JBRVhveUIsT0FBT3J5QixHQUFHQztlQUFIdWpCLFFBQUdIO1dBQ2hCO2dCQURhRztrQkFBR0g7aUJBT0o7a0JBRG9DaU8sR0FOaENqTztrQkFNMEJyYixHQU4xQnFiO2tCQU1vQmxqQixHQU5wQmtqQjtrQkFNTTdPLEdBTlRnUDtrQkFNR3RRLEdBTkhzUTtrQkFNSHRqQixHQU5Hc2pCO2tCQU9ELG9CQURJdFEsR0FBMEJsTDtpQkFDOUIsU0FBSnRHO21CQUVGLGdCQUhJeEIsR0FBMEJDO21CQUc5QixhQVRPcWpCLEtBTVNoUCxHQU5ONk8sS0FNZ0NpTzttQkFJdkM7eUJBSEQ1dkI7bUJBTUYscUJBUFV3UixHQUFNc0IsTUFBMEI4YzttQkFPMUMsYUFiTzlOLEtBTUh0akI7bUJBRE47aUJBRVEsU0FJTixVQUxJQSxHQUFNZ1QsUUFBb0IvUztpQkFLOUIsYUFYT3FqQixLQU1TaFA7aUJBT2hCO2VBUkY7YUFGQSxTQVU2RDtrQkFFM0QxUyxLQUFLdEQ7V25DeFhsQjs7O21CbUMwWG9CRyxhQUFIRCxhQUFIa0M7ZUFBWSxLQUZScEMsRUFFSm9DO2VBQXNCLFdBRmxCcEMsRUFFREU7MkJBQUdDOzthQURGO2tCQUdMaUosS0FBS3BKLEVBQUVRLEVBQUUwRTtlQUFGNkwsTUFBRTNMO1dBQ2Y7Z0JBRGEyTDtlQUdlO2dCQUFmNVEsRUFIQTRRO2dCQUdIN1EsRUFIRzZRO2dCQUdOM08sRUFITTJPO2dCQUdlLGtCQUhqQi9RLEVBR0RFLEVBQXVCLEtBSHRCRixFQUdKb0MsRUFIUWdEO2dCQUFGMkwsSUFHQTVRO2dCQUhFaUY7O2FBRUosT0FGSUEsT0FHa0M7a0JBRTNDK0osUUFBUUM7V25DallyQjs7O2VtQ21ZMEI7Z0JBQU5qUDtnQkFBSEQ7Z0JBQUhrQztnQkFBWSxnQkFGTGdOLEVBRUpsUDtlQUFTO2lCQUFPLGlCQUZaa1AsRUFFUGhOO2lCQUFtQixxQkFBYmpDO2lCQUFhOzs7ZUFEZjs7a0JBR0xrUCxPQUFPRDtXbkNyWXBCOzs7ZW1DdVkwQjtnQkFBTmpQO2dCQUFIRDtnQkFBSGtDO2dCQUFZLGdCQUZOZ04sRUFFSGxQO2VBQVM7OztpQkFBTyxnQkFGYmtQLEVBRU5oTjtpQkFBbUIsdUJBQWJqQztpQkFBYTtlQURmOztrQkFHTDZOLE9BQU9vQixFQUVYdEM7V25DM1lULEdtQzJZU0E7YUFFVztjQUZDM00sRUFBWjJNO2NBQVM1TSxFQUFUNE07Y0FBTTFLLEVBQU4wSztjQUVXLFdBSkFzQyxFQUVMaE47Y0FHSyxjQUxBZ04sRUFFRmxQO2NBSUUsV0FOQWtQLEVBRUNqUDthQUlELEdBREwyekIsT0FIQTF4QixNQUVBMlcsT0FGTTVZLE1BSU5veUIsSUFFcUIsT0FOM0J6bEIsRUFNa0MsWUFKNUJpTSxJQUZHN1ksRUFJSHF5QjthQUdDLGNBTER4WixJQUVBd1o7V0FMRztrQkFVTDNmLFVBQVV4RDtXbkNwWnZCO2FtQ3daMEI7Y0FGTmpQO2NBQUhEO2NBQUhrQztjQUVZLGdCQUpIZ04sRUFFVGhOO2NBRVk7O2NBQ04sY0FMR2dOLEVBRU5sUDtjQUlTLGtCQU5Ia1AsRUFFSGpQO2NBSU07O2dCQURYMnpCLElBR2dCLGdCQUpYQyxHQUVBRSxJQUVILGVBSkRELEdBRkM5ekIsRUFJRGcwQjthQUZVLFNBS0ssS0FMWEgsR0FGSDd6QixFQUlHK3pCO2FBR0gsaUJBTERELEdBRUFFO1dBTEU7a0JBVUxDO1dBQVc7YUFFZ0IsSUFBdkJoMEIsV0FBSGlDLFdBQTBCLGNBQXZCakM7YUFBTSxpQkFBVGlDO1dBREksUUFDZ0M7a0JBRXJDZ3lCOzs7O2VBRWdDO2dCQUF6QmowQjtnQkFBSEQ7Z0JBQUhrQztnQkFBK0IsVUFBNUJsQyxFQUE0QixvQkFBekJDOzt3QkFBTmlDOzthQURJO2tCQUdUaXlCLFNBQVM3ekIsR0FDWCxzQkFEV0EsRUFDTTtrQkFNWDhPLEtBQUszTztXbkM5YWxCOzs7ZW1DaWJtQjtnQkFEQ1I7Z0JBQUhEO2dCQUFIa0M7Z0JBQ0ssb0JBSER6QixFQUVEVDtlQUNFLFNBQUpnRCxFQUNVLE9BRlJoRDtlQUNFLElBRUgsYUFGRGdELEVBREsvQyxFQUFOaUMsVUFBTXNnQjs7YUFERjtrQkFlTDRSLFdBVGtCdDBCO1duQ3JiL0I7OzttQm1DaWNvQnV5QixlQUFIcHBCLGVBQUg0UDtlQUNBLGNBYmlCL1ksRUFZZG1KO2tDQUFINFA7Ozt5QkFUTTVZLFdBQUhELFdBQUhrQztxQkFDQSxjQUppQnBDLEVBR2RFLG1CQUFIa0M7K0JBQU1qQzs7bUJBRFQ7MkJBVVNveUI7O2FBRFQ7a0JBZ0JFZ0MsZUFUc0J2MEI7V25DdmNuQzs7O21CbUNtZG9CdXlCLGVBQUhwcEIsZUFBSDRQO2VBQ0EsY0FicUIvWSxFQVlsQm1KO2tDQUFINFA7Ozt5QkFUTTVZLFdBQUhELFdBQUhrQztxQkFDQSxjQUpxQnBDLEVBR2xCRSxtQkFBSGtDOytCQUFNakM7O21CQURUOzJCQVVTb3lCOzthQURUO2tCQWdCRWlDLFVBVGlCeDBCO1duQ3pkOUI7OzttQm1DcWVvQnV5QixlQUFIcHBCLGVBQUg0UDtlQUNBLGNBYmdCL1ksRUFZYm1KO2tDQUFHb3BCOzs7eUJBVEFweUIsV0FBSEQsV0FBSGtDO3FCQUNBLGNBSmdCcEMsRUFHYkUsbUJBQUdDOytCQUFOaUM7O21CQURIOzJCQVVHMlc7O2FBREg7a0JBZ0JFMGIsY0FUcUJ6MEI7V25DM2VsQzs7O21CbUN1Zm9CdXlCLGVBQUhwcEIsZUFBSDRQO2VBQ0EsY0Fib0IvWSxFQVlqQm1KO2tDQUFHb3BCOzs7eUJBVEFweUIsV0FBSEQsV0FBSGtDO3FCQUNBLGNBSm9CcEMsRUFHakJFLG1CQUFHQzsrQkFBTmlDOzttQkFESDsyQkFVRzJXOzthQURIO2tCQU9FMmIsU0FBUy96QjtXbkM3ZnRCOzs7ZW1DZ2dCbUI7Z0JBRENSO2dCQUFIRDtnQkFBSGtDO2dCQUNLLG9CQUhHekIsRUFFTFQ7ZUFDRSxTQUFKZ0QsRUFDVSxVQUZSaEQ7ZUFDRSxJQUVILGFBRkRnRCxFQURLL0MsRUFBTmlDLFVBQU1zZ0I7O2FBREY7a0JBTVRpUyxTQUFTdnlCLEVBQUVsQyxFQUFFQztXbkNwZ0J0QjtXbUN3Z0JPLFNBSldpQzthQUlrQixpQkFKbEJBO2FBSU0sK0JBSkpsQztXM0JZWDs7c0IyQlphQztlQUtnQixpQkFMaEJBO2VBS0UsMEJBTEpEOzJCQU1SLFlBTk1rQyxFQUFFbEMsRUFBRUM7V0FPRixhQVBGaUMsRUFPRSxJQVBBbEMsRUFBRUMsR0FPTztrQkFFaEIrSSxJQUFJbEosRUFFUjhNO1duQy9nQlQsR21DK2dCU0E7YUFFVTtjQUZDM00sRUFBWDJNO2NBQVE1TSxFQUFSNE07Y0FBSzFLLEVBQUwwSztjQUVVLFFBSkY5TSxFQUVIb0M7Y0FHSyxlQUxGcEMsRUFFQUU7Y0FJRSxRQU5GRixFQUVHRztnQkFBTmlDLE1BRUEyVyxPQUZHN1ksTUFHSGlKLE9BSE1oSixNQUlOb3lCLElBQ2tDLE9BTHZDemxCO2FBTU0sZ0JBSkRpTSxJQUNBNVAsSUFDQW9wQjtXQUxJO2tCQWVMemtCLFdBQVc5TixFQUVmOE07V25DL2hCVCxHbUMraEJTQTthQUVVO2NBRkMzTSxFQUFYMk07Y0FBUTVNLEVBQVI0TTtjQUFLMUssRUFBTDBLO2NBRVUsY0FKSzlNLEVBRVZvQztjQUdLLGVBTEtwQyxFQUVQRTtjQUlFLGNBTktGLEVBRUpHO2FBSUQsR0FETGdKO2VBSUMsSUFESXlyQixJQUhMenJCO2tCQUhBL0csTUFSTThYLE1BUUhoYSxNQU1FMDBCLE9BTkN6MEIsTUFSRzZaLEdBZThCLE9BUDVDbE47ZUFRVyxnQkFoQkFvTixHQWNEMGEsSUFkSTVhO2FBQ2hCLEdBRGFFO2VBSUQsR0FKSUY7aUJBSXFCLHdCQUpyQkE7aUJBSVEsZ0JBSlhFLEdBSVcsUUFKUkY7ZUFHQSxPQUhIRTthQUVHLE9BRkFGO1dBT0w7a0JBbUNUNmEsUUFBUXp5QjtXQUNWLEdBRFVBOzs7Ozs7Ozs7O3VCQVFZOzZDQVJaQTt3QkFwQlY7a0NBQVk5QixFQUFFOEI7MkJBQ1osVUFEVTlCOztxQ0FFQSxZQUZFOEI7O3lDQUdEMnlCLElBSEMzeUIsS0FHUDR5QixHQUhPNXlCLG9CQUdQNHlCLFFBQU1EOzs7a0NBSEMzeUI7Ozt1Q0FJSzZ5QixZQUFOM2EsV0FBTjRhLEtBSk85eUI7cURBSVA4eUIsVUFBTTVhLFFBQU0yYTs7O2tDQUpMN3lCOzs7Ozt5Q0FNVyt5QixZQUFOOWEsV0FBTkssYUFBTjBhLEtBTk9oekI7dURBTVBnekIsVUFBTTFhLFVBQU1MLFdBQU04YTsyQkFJckIsT0FWUTcwQixVQVdNLFVBRFYrMEIsR0FWTWp6QixHQVdJOzhCQUFKMlc7NkJBSU87OEJBRFJDLElBSENEOzhCQUdSdWMsSUFIUXZjOzhCQUlPLGFBZlR6WSxJQVVKKzBCLGdCQUlLcmM7OEJBQ1E7OzZCQUNmLGlCQUxFdlEsS0FHRjZzQixJQUNJNXNCLE9BQU82c0I7MkJBRkwsNEJBR2tCO3VCQUUxQixXQUFLLFNBbkJReGM7eUJBNEJFeWM7cUJBQWMsV0FBZEEsR0FBYyxTQUFRLFNBQVEsU0FBUTttQkFENUIseUJBQVEsU0FBUTtpQkFEcEIseUJBQVE7ZUFEWjthQURYO1dBREYsT0FqVk5ub0IsS0F1VmtEO2tCQUVsRG9vQixRQUFRMzVCLEVBQUUydEI7V0FDWiwwQkFBbUJqcEIsRUFBRUcsR0FBSyxXQUFMQSxFQUFGSCxFQUFjLEVBRHJCaXBCLEVBQUYzdEIsRUFDNEI7a0JBRXBDNDVCLE9BQU81NUIsR0FBSSxlQUFKQSxFQTVWUHVSLE1BNFYwQjtrQkFFdEJzb0IsWUFBYXp5QjtXQUFPLEdBQVBBO2FBRThCLElBQW5DbEgsS0FGS2tILEtBRVI0SixFQUZRNUosS0FFWHZDLEVBRld1QyxLQUU4QixlQUF0QzRKLEVBQUc5UTthQUFzQixVQUE1QjJFLGlCbkNsbEJmLE9tQ2dsQmFnMUI7V0FDRyxRQUMyRDtrQkFFbEU1Z0IsT0FBTzdSO1dBQWlCLG1CQUFqQkE7V0FBaUIsc0JuQ3BsQmpDLE9tQ2dsQmF5eUIsdUJBSXFDO2tCQUVyQ0MsVUFBVXAxQixFQUFFd0k7ZUFBRitILE1BQUU2UztXQUNsQjtnQkFEZ0I3Uzs7O2dCQUdON1EsRUFITTZRO2dCQUdUM08sRUFIUzJPO2dCQUFFdWlCLE9BR1JwekIsRUFBSGtDLEVBSFd3aEI7Z0JBQUY3UztnQkFBRTZTOzthQUVQLE9BRk9BLElBRzRCO2tCQUV4Q2lTLGdCQUFpQjN5QjtXQUFPLEdBQVBBO2FBRThCLElBQXZDbEgsS0FGU2tILEtBRVo0SixFQUZZNUosS0FFZnZDLEVBRmV1QyxLQUU4QixlQUExQzRKLEVBQUc5UTthQUFzQixVQUE1QjJFLGlCbkM3bEJmLE9tQzJsQmFrMUI7V0FDRyxRQUMrRDtrQkFFdEVDLFdBQVc1eUI7V0FBcUIsbUJBQXJCQTtXQUFxQixzQm5DL2xCekMsT21DMmxCYTJ5QiwyQkFJNkM7a0JBRWpERSxZQUFZQyxJQUFJeDFCO2VBQ0Z1USxJQURFdlEsRUFDQTBDO1dBQUk7Z0JBQU42TjtlQUdFLElBREw1USxFQUZHNFEsT0FFQTdRLEVBRkE2USxPQUVOM08sRUFGTTJPLE9BR0Usb0JBREY3USxFQUhGODFCO2VBSUksU0FFUjExQjtpQkFBTyxRQUFQQSxHQUNLLFdBSkNKLEVBQUhDLEVBRksrQyxHQUFGNk4sSUFFTjNPLEVBRlFjO3FCQUFGNk4sSUFFSDVROztlQUNLLFlBREZELEVBQUhDLEVBRksrQzs7O21DbkNsbUJ6QixPbUNnbEJheXlCLHdCQTJCc0I7O2lCQXpYMUJ0b0I7aUJBRUFxQjtpQkFFSWlrQjtpQkFuSEFmO2lCQVlKQztpQkE2R0llO2lCQWVBQztpQkFnQkFJO2lCQWtDQUU7aUJBU0E1VjtpQkE2Qko3VDtpQkFHQUw7aUJBR0l3cUI7aUJBZUF2d0I7aUJBcUpBNEY7aUJBakpBRTtpQkFLQStGO2lCQUlBRTtpQkFJQXJCO2lCQW9KQUY7aUJBeklBOEU7aUJBV0F1aEI7aUJBUUpFO2lCQXZQSW5DO2lCQUtBQztpQkFLQUM7aUJBS0FDO2lCQWZBSDtpQkFLQUM7aUJBZ0RBSztpQkF5TUFsakI7aUJBK0VBb2xCO2lCQS9EQUo7aUJBa0JBQztpQkFrQkFDO2lCQWtCQUM7aUJBNkVKSTtpQkFnQ0FrQjtpQkFiQWhoQjtpQkFXQStnQjtpQkFwQkFMO2lCQUdBQztJQXRnQkc7SURrQkc7Ozs7a0JFYk4vRSxjQUFTLGNBRUhySixvQkFERyxRQUNJO2tCQUViN2IsT0FBT3JKLEVBQUV6QixFQUFFeVgsRUFBRWpZO1dBQ04sY0FEQWlDLEdBQ2tCLFVBRFpqQyxHQUNZLEtBQUwyd0IsTUFBbEJGLGNBQWtCRTtxQkFEYjF1QixFQUFFekIsRUFBRXlYLEVBQUVqWSxPQUU0QztrQkFFekQweEIsVUFBVWx4QixFQUFFeVgsR0FBSSxZQUFOelgsRUFBRXlYLE1BQXVDO2tCQUVuRDJZLElBQUkzdUIsRUFBRXpCLEVBQUV5WCxFQUFFalk7V0FDWixHQURNaUMsTUFDbUNrbEIsRUFEbkNsbEIsS0FDRnd1QixHQUFxQ3RKLFdBQXJDc0o7V0FDSixHQUZZendCLE1BRTZCMHdCLElBRjdCMXdCLEtBRVIyd0IsR0FBcUNELGFBQXJDQztXQUNKLElBRElBLGNBREFGO2FBRWdCLEdBSGR4dUI7ZUFPZ0IsSUFETzR1QixHQU52QjV1QixLQU1pQjZ6QixHQU5qQjd6QixLQU1XNnVCLEdBTlg3dUIsS0FNSzh1QixHQU5MOXVCLEtBT2dCLFlBRE80dUI7ZUFDcEIsa0JBREVFLElBRWEsY0FGYkEsR0FBTUQsR0FBTWdGLEdBRUMsT0FGS2pGLEdBTnJCcndCLEVBQUV5WCxFQUFFalk7ZUFTRCxHQUhrQjZ3QjtpQkFPb0I7a0JBRFhHLElBTlRIO2tCQU1Fa0YsSUFORmxGO2tCQU1MSSxJQU5LSjtrQkFNWkssSUFOWUw7a0JBT29CLFlBRFhHLElBWjlCeHdCLEVBQUV5WCxFQUFFalk7aUJBYU8scUJBUFIrd0IsR0FBTUQsR0FBTWdGLEdBTU41RSxLQUFPRCxJQUFPOEU7ZUFEWjthQU5OO1dBVUosSUFkTHRGLGNBQ0FFO2FBYXlCLEdBZmpCM3dCO2VBbUJVLElBRE9teEIsR0FsQmpCbnhCLEtBa0JXZzJCLEdBbEJYaDJCLEtBa0JLb3hCLEdBbEJMcHhCLEtBa0JEcXhCLEdBbEJDcnhCLEtBbUJVLFlBRFhxeEI7ZUFDRixrQkFEb0JGLElBRWQscUJBcEJUbHZCLEVBQUV6QixFQUFFeVgsRUFrQkNvWixJQUFNRCxHQUFNNEUsR0FBTTdFO2VBR2xCLEdBSEFFO2lCQU9tQztrQkFEUkMsSUFOM0JEO2tCQU1vQjRFLElBTnBCNUU7a0JBTWFFLElBTmJGO2tCQU1NRyxJQU5OSDtrQkFPbUMsWUFEUkMsSUFOckJGLEdBQU00RSxHQUFNN0U7aUJBT1YscUJBekJibHZCLEVBQUV6QixFQUFFeVgsRUF3Qk91WixLQUFPRCxJQUFPMEU7ZUFEWjthQU5OO1dBV1gsU0ExQkV0RixNQURBRixjQUNBRTtxQkFGRTF1QixFQUFFekIsRUFBRXlYLEVBQUVqWSxPQTRCaUQ7YUFFM0RrTjtrQkFFQXFCLGdCQUFXLGdCQUFtQztrQkFFMUNrakIsSUFBSWp4QixFQUFFMDFCLEtBR1Y1TTtXcEM1SFQsR29DNEhTQTthQUNVLElBRFFuQyxFQUFsQm1DLEtBQWV0cEIsRUFBZnNwQixLQUFZclIsRUFBWnFSLEtBQVN2cEIsRUFBVHVwQixLQUFNcm5CLEVBQU5xbkIsS0FDVSxvQkFKRjlvQixFQUdDVDthQUNDLFNBQUpnRCxFQUVGLE9BSFFrVixNQUhGaWUsS0FHVjVNLEtBQU1ybkIsRUFIRXpCLEVBQUUwMUIsS0FHS2wyQixFQUFHbW5CO2FBSVgsUUFIRHBrQixHQU9PLElBQUxvdUIsR0FBSyxJQVhMM3dCLEVBQUUwMUIsS0FHS2wyQixHQVFGLE9BUkVBLE1BUVBteEIsR0FSUjdILEVBUzJCLElBVHJCcm5CLEVBQUdsQyxFQUFHa1ksRUFRSmtaO2FBUEUsSUFJRkosR0FBSyxJQVJMdndCLEVBQUUwMUIsS0FHSmowQjthQUtPLE9BTFBBLE1BS0U4dUIsR0FMUnpILEVBTTJCLElBRG5CeUgsR0FMQ2h4QixFQUFHa1ksRUFBR2pZO1dBRGIsWUFGTVEsRUFBRTAxQjtrQkFjTi9tQixLQUFLM087V3BDdklsQjs7O2VvQzJJbUI7Z0JBREtSO2dCQUFIaVk7Z0JBQUhsWTtnQkFBSGtDO2dCQUNJLG9CQUpEekIsRUFHQVQ7ZUFDQyxTQUFKZ0QsRUFDVSxPQUZKa1Y7ZUFDRixJQUVILGFBRkRsVixFQURTL0MsRUFBVGlDLFVBQVNzZ0I7O2FBRGI7a0JBZUU0UixXQVRxQnQwQjtXcEMvSWxDOzs7O2dCb0MySndCdXlCO2dCQUFIM047Z0JBQUh6YjtnQkFBSDRQO2VBQ0QsY0Fib0IvWSxFQVloQm1KOytCQUFHeWIsVUFBTjdMOzs7eUJBVFM1WSxXQUFIaVksV0FBSGxZLFdBQUhrQztxQkFDRCxjQUpvQnBDLEVBR2hCRSxnQkFBR2tZLFFBQU5oVzsrQkFBU2pDOzttQkFEYjsyQkFVYW95Qjs7YUFEYjtrQkFnQkVnQyxlQVR5QnYwQjtXcENqS3RDOzs7O2dCb0M2S3dCdXlCO2dCQUFIM047Z0JBQUh6YjtnQkFBSDRQO2VBQ0QsY0Fid0IvWSxFQVlwQm1KOytCQUFHeWIsVUFBTjdMOzs7eUJBVFM1WSxXQUFIaVksV0FBSGxZLFdBQUhrQztxQkFDRCxjQUp3QnBDLEVBR3BCRSxnQkFBR2tZLFFBQU5oVzsrQkFBU2pDOzttQkFEYjsyQkFVYW95Qjs7YUFEYjtrQkFnQkVpQyxVQVRvQngwQjtXcENuTGpDOzs7O2dCb0MrTHdCdXlCO2dCQUFIM047Z0JBQUh6YjtnQkFBSDRQO2VBQ0QsY0FibUIvWSxFQVlmbUo7K0JBQUd5YixVQUFHMk47Ozt5QkFUQXB5QixXQUFIaVksV0FBSGxZLFdBQUhrQztxQkFDRCxjQUptQnBDLEVBR2ZFLGdCQUFHa1ksUUFBR2pZOytCQUFUaUM7O21CQURKOzJCQVVJMlc7O2FBREo7a0JBZ0JFMGIsY0FUd0J6MEI7V3BDck1yQzs7OztnQm9DaU53QnV5QjtnQkFBSDNOO2dCQUFIemI7Z0JBQUg0UDtlQUNELGNBYnVCL1ksRUFZbkJtSjsrQkFBR3liLFVBQUcyTjs7O3lCQVRBcHlCLFdBQUhpWSxXQUFIbFksV0FBSGtDO3FCQUNELGNBSnVCcEMsRUFHbkJFLGdCQUFHa1ksUUFBR2pZOytCQUFUaUM7O21CQURKOzJCQVVJMlc7O2FBREo7a0JBT0UyYixTQUFTL3pCO1dwQ3ZOdEI7Oztlb0MyTm1CO2dCQURLUjtnQkFBSGlZO2dCQUFIbFk7Z0JBQUhrQztnQkFDSSxvQkFKR3pCLEVBR0pUO2VBQ0MsU0FBSmdELEVBQ1UsVUFGSmtWO2VBQ0YsSUFFSCxhQUZEbFYsRUFEUy9DLEVBQVRpQyxVQUFTc2dCOzthQURiO2tCQU1FaVEsSUFBSWh5QjtXcEMvTmpCOzs7ZW9DbU9tQjtnQkFERVI7Z0JBQUhEO2dCQUFIa0M7Z0JBQ0ksb0JBSkZ6QixFQUdDVDtnQkFDQyxXQUFKZ0Q7ZUFBSSxRQUZSO2VBRVEsSUFERXdmLGFBQ054ZixFQURNL0MsRUFBTmlDLFVBQU1zZ0I7O2FBRFY7a0JBS0U0VDtXcEN0T2I7V29Dc08yQjs7OzttQkFFQWxlLGFBQUhsWTsyQkFBR2tZO2FBRFQsZ0JBRWdCO2tCQUVyQm1lO1dwQzNPYjtXb0MyTytCOzs7O21CQUVKbmUsYUFBSGxZOzhCQUFHa1k7YUFEVCxTQUVtQjtrQkFFeEJvZTtXcENoUGI7V29DZ1AyQjs7OEJBR04sK0JBQU45VDttQkFER3RLLGFBQUhsWTsyQkFBR2tZO2FBREEsZ0JBRWdCO2tCQUVyQnFlO1dwQ3JQYjtXb0NxUCtCOzs4QkFHViwrQkFBTi9UO21CQURHdEssYUFBSGxZOzhCQUFHa1k7YUFEQSxTQUVvQjtrQkFFekJzZTtXQUFxQjs7O21CQUdWdjJCLFdBQUhpWSxXQUFIbFk7ZUFBZ0Isb0NBQWhCQSxFQUFHa1ksRUFBR2pZO2FBRE0sSUFBTm95QjthQUFNLE9BQU5BO1dBRE4sMENBRTRDO3VCQUUvQ3JZLEdBQUdGO1dBQ1gsR0FEUUU7YUFLSixHQUxPRjtlQUtNLHNCQUxOQSxJQUtNO2VBQ0YsV0FOUEUsR0FLQ3ZaLEVBQUd5WCxFQUNHLG1CQU5KNEI7YUFHSyxPQUhSRTtXQUVRLE9BRkxGLEVBTTJCO2tCQUVoQzRZLE9BQU9qeUIsRUFHWDhvQjtXcEMxUVQsR29DMFFTQTthQUNVLElBRE10cEIsRUFBaEJzcEIsS0FBYXJSLEVBQWJxUixLQUFVdnBCLEVBQVZ1cEIsS0FBT3JuQixFQUFQcW5CLEtBQ1Usb0JBSkM5b0IsRUFHRFQ7YUFDQSxTQUFKZ0QsRUFDVSxZQUZUZCxFQUFTakM7YUFHVCxRQUZEK0MsR0FLTyxJQUFMb3VCLEdBQUssT0FURjN3QixFQUdLUixHQU1ILE9BTkdBLE1BTVJteEIsR0FOUjdILEVBTWtELElBTjNDcm5CLEVBQUdsQyxFQUFHa1ksRUFNTGtaO2FBTEUsSUFHRkosR0FBSyxPQVBGdndCLEVBR0p5QjthQUlNLE9BSk5BLE1BSUM4dUIsR0FKUnpILEVBSWtELElBQTFDeUgsR0FKRWh4QixFQUFHa1ksRUFBR2pZO1dBRGQ7a0JBU0V3MkIsT0FBT2gyQixFQUFFWCxFQU1ieXBCO1dwQ3hSVCxHb0N3UlNBO2FBQ1UsSUFEUW5DLEVBQWxCbUMsS0FBZXRwQixFQUFmc3BCLEtBQVlyUixFQUFacVIsS0FBU3ZwQixFQUFUdXBCLEtBQU1ybkIsRUFBTnFuQixLQUNVLG9CQVBDOW9CLEVBTUZUO2FBQ0MsU0FBSmdEO2VBRUkscUJBVEdsRCxLQU1Eb1k7ZUFHRjtpQkFHRixJQURHaWUsY0FDSCxPQU5JamUsTUFLRGllLEtBTFg1TSxLQUFNcm5CLEVBTkt6QixFQVdBMDFCLEtBTElsMkIsRUFBR21uQjtlQUlKLFlBSlJsbEIsRUFBU2pDO2FBT0osUUFOTCtDLEdBVU8sSUFBTG91QixHQUFLLE9BakJGM3dCLEVBQUVYLEVBTUVHLEdBV0YsT0FYRUEsTUFXUG14QixHQVhSN0gsRUFZMkIsSUFackJybkIsRUFBR2xDLEVBQUdrWSxFQVdKa1o7YUFWRSxJQU9GSixHQUFLLE9BZEZ2d0IsRUFBRVgsRUFNUG9DO2FBUU8sT0FSUEEsTUFRRTh1QixHQVJSekgsRUFTMkIsSUFEbkJ5SCxHQVJDaHhCLEVBQUdrWSxFQUFHalk7V0FKRCx1QkFGREg7V0FFQyxZQUVHLElBQVI0MkIsa0JBQVEsWUFKTmoyQixFQUlGaTJCO1dBREc7a0JBaUJSdHpCLEtBQUt0RDtXcEN0U2xCOzs7bUJvQ3dTd0JHLGFBQUhpWSxhQUFIbFksYUFBSGtDO2VBQ0osS0FIT3BDLEVBRUhvQztlQUNNLFdBSEhwQyxFQUVBRSxFQUFHa1k7MkJBQUdqWTs7YUFETjtrQkFJTCtJLElBQUlsSjtXcEMzU2pCO2FvQytTb0I7Y0FET3NuQjtjQUFIbm5CO2NBQUhpWTtjQUFIbFk7Y0FBSGtDO2NBQ0ssUUFKSHBDLEVBR0ZvQztjQUVLLGVBTEhwQyxFQUdJb1k7Y0FHRCxRQU5IcFksRUFHT0c7YUFHSixVQUZMNFksSUFERzdZLEVBRUgwa0IsSUFDQTJOLElBSFlqTDtXQURoQjtrQkFPRXpXLEtBQUs3UTtXcENwVGxCO2FvQ3dUb0I7Y0FET3NuQjtjQUFIbm5CO2NBQUhpWTtjQUFIbFk7Y0FBSGtDO2NBQ0ssU0FKRnBDLEVBR0hvQztjQUVLLGVBTEZwQyxFQUdBRSxFQUFHa1k7Y0FHRCxTQU5GcFksRUFHTUc7YUFHSixVQUZMNFksSUFERzdZLEVBRUgwa0IsSUFDQTJOLElBSFlqTDtXQURoQjtrQkFPRWxlLEtBQUtwSixFQUFFeXBCLEVBQUV2a0I7ZUFBRjJ4QixNQUFFenhCO1dBQ2Y7Z0JBRGF5eEI7ZUFJQTtnQkFESTEyQixFQUhKMDJCO2dCQUdDemUsRUFIRHllO2dCQUdGMzJCLEVBSEUyMkI7Z0JBR0x6MEIsRUFIS3kwQjtnQkFJQSxrQkFKRjcyQixFQUdBRSxFQUFHa1ksRUFDTSxLQUpUcFksRUFHSG9DLEVBSE9nRDtnQkFBRnl4QixJQUdJMTJCO2dCQUhGaUY7O2FBRUosT0FGSUEsT0FJcUI7a0JBRTlCK0osUUFBUUM7V3BDblVyQjs7O2VvQ3FVOEI7Z0JBQU5qUDtnQkFBSGlZO2dCQUFIbFk7Z0JBQUhrQztnQkFBZSxnQkFGVGdOLEVBRUhsUCxFQUFHa1k7ZUFBUztpQkFBUyxpQkFGbEJoSixFQUVOaE47aUJBQXdCLHFCQUFmakM7aUJBQWU7OztlQURyQjs7a0JBR0xrUCxPQUFPRDtXcEN2VXBCOzs7ZW9DeVU4QjtnQkFBTmpQO2dCQUFIaVk7Z0JBQUhsWTtnQkFBSGtDO2dCQUFlLGdCQUZWZ04sRUFFRmxQLEVBQUdrWTtlQUFTOzs7aUJBQVMsZ0JBRm5CaEosRUFFTGhOO2lCQUF3Qix1QkFBZmpDO2lCQUFlO2VBRHJCOztrQkFXTDIyQixnQkFBZ0JDLEVBQUVwMkI7V3BDblYvQjtpQm9DcVZ3QlIsV0FBSGlZLFdBQUhsWSxXQUFIa0M7YUFDRiwyQkFIZ0IyMEIsRUFBRXAyQixFQUVoQnlCLEdBQUdsQyxFQUFHa1ksRUFBR2pZO1dBRE4saUJBRFc0MkIsRUFBRXAyQjtrQkFLbEJxMkIsZ0JBQWdCRCxFQUFFcDJCO1dwQ3hWL0I7aUJvQzBWd0JSLFdBQUhpWSxXQUFIbFksV0FBSGtDO2FBQ0ksV0FESkEsRUFBR2xDLEVBQUdrWSxFQUNGLGdCQUhVMmUsRUFBRXAyQixFQUVQUjtXQUROLGlCQURXNDJCLEVBQUVwMkI7a0JBUWxCdVQsS0FBSzlSLEVBQUVsQyxFQUFFa1ksRUFBRWpZO1dBQ2pCLEdBRFdpQztnQkFBTWpDOztnQkFLaUI2eEIsR0FMakI3eEI7Z0JBS1dteEIsR0FMWG54QjtnQkFLS2cyQixHQUxMaDJCO2dCQUtEb3hCLEdBTENweEI7Z0JBS1BxeEIsR0FMT3J4QjtnQkFJaUI4eEIsR0FKdkI3dkI7Z0JBSWlCNHVCLEdBSmpCNXVCO2dCQUlXNnpCLEdBSlg3ekI7Z0JBSUs2dUIsR0FKTDd1QjtnQkFJRDh1QixHQUpDOXVCO3VCQUt1QjR2QixjQURBQzt3QkFFRyxJQUYzQmYsR0FBTUQsR0FBTWdGLEdBRWUsS0FGVGpGLEdBSmY5d0IsRUFBRWtZLEVBQUVqWTt5QkFJaUI4eEIsY0FDQUQ7MEJBRU4sU0FQakI1dkIsRUFBRWxDLEVBQUVrWSxFQUtMb1osSUFBTUQsR0FBTTRFLEdBQU03RTswQkFHeEIsT0FST2x2QixFQUFFbEMsRUFBRWtZLEVBQUVqWTthQUdELHVCQUhIRCxFQUFFa1ksRUFBSmhXO1dBRUssdUJBRkhsQyxFQUFFa1ksRUFBRWpZLEVBUUM7a0JBTWhCOE4sT0FBT2lNLEdBQUdGO1dBQ1osR0FEU0U7YUFLTCxHQUxRRjtlQUtLLHNCQUxMQSxJQUtLO2VBQ0QsWUFOUEUsR0FLQXZaLEVBQUd5WCxFQUNJLG1CQU5KNEI7YUFHSSxPQUhQRTtXQUVPLE9BRkpGLEVBTTJCO2tCQUVyQ2lkLGVBQWUvYyxHQUFHaGEsRUFBRWtZLEVBQUU0QjtXQUN4QixHQURzQjVCLEdBRVYsSUFBTHdNLElBRmV4TSxLQUVWLFlBRks4QixHQUFHaGEsRUFFYjBrQixJQUZpQjVLLElBR2QsY0FIT0UsR0FBT0YsR0FHRjtrQkFFaEJ3WSxNQUFNN3hCO1dwQzNYbkI7YW9DK1htQjtjQURLUjtjQUFIaVk7Y0FBSGxZO2NBQUhrQztjQUNJLG9CQUpBekIsRUFHRFQ7YUFDQyxTQUFKZ0QsRUFDVSxVQUZWZCxLQUFNZ1csR0FBR2pZO2FBR1IsUUFGRCtDO2VBS21CLGdCQVRmdkMsRUFHS1IsR0FNVTtlQUFjLGVBTmpDaUMsRUFBR2xDLEVBQUdrWSxFQU1INFksSUFBSXlCLEtBQU1uQjthQUxUO2NBR2UsY0FQZjN3QixFQUdKeUI7Y0FJbUI7OzthQUF3QixVQUF4Qzh1QixHQUFJd0IsT0FBb0MsS0FBOUJsQixHQUpWdHhCLEVBQUdrWSxFQUFHalk7V0FEYjtrQkFTRTJqQixNQUFNOWpCLEVBQUV3QixHQUFHQztXQUNqQixHQURjRDtpQkFHcUIyWSxHQUhyQjNZLE1BR2V3VSxHQUhmeFUsTUFHUzAxQixHQUhUMTFCLE1BR0drVCxHQUhIbFQsTUFHSEUsR0FIR0Y7YUFHd0MsVUFIckNDLE9BR2tCMFk7ZUFDWjs0QkFETnpGLEdBSEFqVDtnQkFJTTs7O2dCQUNtQyxXQUw5Q3pCLEVBR2lCZ1csR0FDWjhjO2dCQUNxQixnQkFMMUI5eUIsRUFHSzBVLE1BQU13aUIsSUFDVkM7ZUFDTSw0QkFMUG4zQixFQUdEMEIsR0FDRkMsSUFEUStTOztZQURHLEtBRkhqVCxHQUVHO2NBRkhBO2FBT007Y0FEU3N4QixLQU5mdHhCO2NBTVMyMUIsS0FOVDMxQjtjQU1HK0gsR0FOSC9IO2NBTUgyWCxLQU5HM1g7Y0FPTSxjQURIK0gsR0FOTmhJO2NBT1M7OztjQUNtQyxXQVI5Q3hCLEVBT0tnekIsS0FEZUQ7Y0FFTSxnQkFSMUIveUIsRUFNUXdKLEdBQ1A2dEIsUUFEYUQ7YUFFUCw0QkFSUHAzQixFQU9IbVosS0FES0MsTUFBTTVQO1dBSWhCLDRCQUFZO2tCQUVWcXBCLE1BQU03eUIsRUFBRXdCLEdBQUdDO1dBQ2pCLEdBRGNEO2dCQUFHQzs7Z0JBSWtCd1ksR0FKbEJ4WTtnQkFJWXF4QixHQUpacnhCO2dCQUlNMDFCLEdBSk4xMUI7Z0JBSUErSCxHQUpBL0g7Z0JBSU5FLEdBSk1GO2dCQUdrQjBZLEdBSHJCM1k7Z0JBR2V3VSxHQUhmeFU7Z0JBR1MwMUIsR0FIVDExQjtnQkFHR2tULEdBSEhsVDtnQkFHSEUsR0FIR0Y7a0JBSXFCeVksTUFEQUU7aUJBR1Y7OEJBSFJ6RixHQUhBalQ7a0JBTVE7OztrQkFDWCxRQVBGekIsRUFHRDBCLEdBR0EwWDtrQkFDeUIsUUFQeEJwWixFQUdpQmdXLEdBR1YrYztpQkFDaUIsR0FEckJxRTttQkFJSSxJQUFORSxLQUpFRjttQkFJd0Isc0JBSDdCaDFCLEVBSk9zUyxHQU9zQixXQVYzQjFVLEVBR0swVSxHQUFNd2lCLEdBT1ZJLE1BSG1CbjNCO2lCQUVoQixZQUZOaUMsRUFKT3NTLEdBQU13aUIsR0FJUy8yQjtlQUtQOzhCQVJScUosR0FKSGhJO2dCQVlXOzs7Z0JBQ1gsVUFiRnhCLEVBWURtWixLQVJBeFg7Z0JBU3lCLFVBYnhCM0IsRUFZT2d6QixLQVJVRjtlQVNPLEdBRHJCdUU7aUJBSUksSUFBTkUsS0FKRUY7aUJBSXdCLHNCQUg3QnRlLElBVE92UCxHQVlzQixXQWhCM0J4SixFQUlLd0osR0FZSit0QixLQVpVSixJQVNTNUU7ZUFFaEIsWUFGTnhaLElBVE92UCxHQUFNMnRCLEdBU1M1RTtpQkFYdEIveEIsRUFGSWdCOztnQkFFSmhCLEVBRk9pQjtXQUVZLE9BQW5CakIsQ0FjMkM7a0JBRS9Dd04sT0FBT29CLEVBRVhxYTtXcEN0YVQsR29Dc2FTQTthQUVXO2NBRkl0cEIsRUFBZnNwQjtjQUFZclIsRUFBWnFSO2NBQVN2cEIsRUFBVHVwQjtjQUFNcm5CLEVBQU5xbkI7Y0FFVyxXQUpBcmEsRUFFTGhOO2NBR00sZUFMRGdOLEVBRUZsUCxFQUFHa1k7Y0FJRCxXQU5BaEosRUFFSWpQO2FBSUosR0FETHEzQjtrQkFIQXAxQixNQUVBMlcsT0FGUzVZLE1BSVRveUIsSUFDK0IsT0FMckM5SSxFQUs0QyxZQUh0QzFRLElBRkc3WSxFQUFHa1ksRUFJTm1hO2FBRUMsY0FKRHhaLElBRUF3WjtXQUxHO2tCQVNMemtCLFdBQVc5TjtXcEM5YXhCO2FvQ2tib0I7Y0FGSUc7Y0FBSGlZO2NBQUhsWTtjQUFIa0M7Y0FFSyxlQUpJcEMsRUFFVG9DO2NBR00sZUFMR3BDLEVBRU5FLEVBQUdrWTtjQUlELGVBTklwWSxFQUVBRzthQUlKLEdBRExzM0IsS0FHVyxJQUFON1MsSUFITDZTLE9BR1csWUFKWDFlLElBRkc3WSxFQU1FMGtCLElBRkwyTjthQUdRLGNBTFJ4WixJQUVBd1o7V0FMRztrQkFXTDNmLFVBQVV4RDtXcEMxYnZCO2FvQzhiMEI7Y0FGRmpQO2NBQUhpWTtjQUFIbFk7Y0FBSGtDO2NBRVcsZ0JBSkhnTixFQUVSaE47Y0FFVzs7Y0FDTCxlQUxFZ04sRUFFTGxQLEVBQUdrWTtjQUlLLGtCQU5IaEosRUFFQ2pQO2NBSUU7O2dCQURYcTNCLEtBR2tCLGdCQUpiekQsR0FFQUUsSUFFSCxlQUpERCxHQUZFOXpCLEVBQUdrWSxFQUlMOGI7YUFGVSxTQUtLLEtBTFhILEdBRkY3ekIsRUFBR2tZLEVBSUQ2YjthQUdILGlCQUxERCxHQUVBRTtXQUxFO2tCQVlMZCxVQUFVM0osRUFBRXpnQjtlQUFGNnRCLE1BQUVqVDtXQUNsQjtnQkFEZ0JpVDs7Z0JBR0MxMkIsRUFIRDAyQjtnQkFHRnplLEVBSEV5ZTtnQkFHTDMyQixFQUhLMjJCOztnQkFBRXZELE9BR1BwekIsRUFBR2tZLEVBQUdqWSxFQUhDeWpCO2dCQUFGaVQ7Z0JBQUVqVDs7YUFFUCxPQUZPQSxJQUdtQztrQkFFbkRsYSxRQUFRd0csSUFBSXluQixHQUFHQztXQVlpQixtQkFaakJBLE1BWUYsZUFaREQsTUFDTXJ1QixRQUFHQztXQUNuQjtnQkFEZ0JEO2tCQUFHQztpQkFNVDtrQkFEOEJrcUIsS0FMckJscUI7a0JBS2lCdXBCLEdBTGpCdnBCO2tCQUthNHRCLEdBTGI1dEI7a0JBS1NDLEdBTFREO2tCQUtEbXFCLEtBTEZwcUI7a0JBS0YwTSxHQUxFMU07a0JBS040dEIsR0FMTTV0QjtrQkFLVm9MLEdBTFVwTDtrQkFNTixvQkFESm9MLEdBQXNCbEw7aUJBQ2xCLFNBQUp0RzttQkFFSSxJQUFKNlgsSUFBSSxXQVRKN0ssSUFNSWduQixHQUFzQkM7bUJBR3RCLFNBQUpwYztxQkFFMEI7cUNBTEkrWCxHQUFJVztzQkFLMUIsZUFMQXpkLEdBQUkwZDtzQkFMRnBxQjtzQkFBR0M7O21CQVNGLE9BRFh3UjtpQkFEVyxPQURYN1g7ZUFGTTthQURDLE9BSE1xRyxRQVc2QjtrQkFFbERGLE1BQU02RyxJQUFJeW5CLEdBQUdDO1dBU2lCLG1CQVRqQkEsTUFTRixlQVRERCxNQUNNcnVCLFFBQUdDO1dBQ2pCO2dCQURjRDtrQkFBR0M7aUJBTWY7a0JBRHNDa3FCLEtBTHZCbHFCO2tCQUttQnVwQixHQUxuQnZwQjtrQkFLZTR0QixHQUxmNXRCO2tCQUtXQyxHQUxYRDtrQkFLQ21xQixLQUxKcHFCO2tCQUtBME0sR0FMQTFNO2tCQUtKNHRCLEdBTEk1dEI7a0JBS1JvTCxHQUxRcEw7a0JBTVosNkJBRElvTCxHQUFzQmxMO2lCQUMxQjttQkFBeUIsb0JBUHZCMEcsSUFNTWduQixHQUFzQkM7bUJBQ0w7cUJBQ0c7cUNBRk1yRSxHQUFJVztzQkFFNUIsZUFGRXpkLEdBQUkwZDtzQkFMSnBxQjtzQkFBR0M7O21CQU1VOzs7aUJBRmY7O2FBREMsT0FISUEsT0FRNkI7a0JBRTVDNHFCO1dBQVc7YUFFaUIsSUFBdkJoMEIsV0FBSGlDLFdBQTBCLGNBQXZCakM7YUFBTSxpQkFBVGlDO1dBREcsUUFDaUM7a0JBRXRDeTFCOzs7O2VBRXlDO2dCQUE5QjEzQjtnQkFBSGlZO2dCQUFIbFk7Z0JBQUhrQztnQkFBdUMsYUFBcENsQyxFQUFHa1ksR0FBaUMsb0JBQTlCalk7O3dCQUFUaUM7O2FBREc7a0JBR1QwMUIsU0FBU3QzQixHQUNYLHNCQURXQSxFQUNNO2tCQU1maTFCLFFBQVEzNUIsRUFBRTJ0QjtXQUNaOzZCQUFtQkE7c0JBQUwscUNBQVFzTixFQUFFNzJCLEVBQUx1cEIsRUFBcUI7b0JBRDVCQTtvQkFBRjN0QixFQUNrQztrQkFFMUM0NUIsT0FBTzU1QixHQUFJLGVBQUpBLEVBbFlQdVIsTUFrWTBCO2tCQUV0QnNvQixZQUFhenlCO1dBQU8sR0FBUEE7YUFFa0MsSUFBdkNsSCxLQUZLa0gsS0FFUDRKLEVBRk81SixLQUVUaEQsRUFGU2dELEtBRVg2ekIsRUFGVzd6QixLQUVrQyxlQUF6QzRKLEVBQUU5UTthQUEwQixhQUFoQys2QixFQUFFNzJCLGtCcEMzZmpCLE9vQ3lmYXkxQjtXQUNHLFFBQytEO2tCQUV0RTVnQixPQUFPMFU7V0FDSSxtQkFESkE7V0FDSSxzQnBDOWZwQixPb0N5ZmFrTSx1QkFLd0I7a0JBRXhCQyxVQUFVcDFCLEVBQUV3STtlQUFGK0gsTUFBRTZTO1dBQ2xCO2dCQURnQjdTOzs7Z0JBR0hxSCxFQUhHckg7Z0JBR043USxFQUhNNlE7Z0JBR1QzTyxFQUhTMk87Z0JBQUV1aUIsT0FHUnB6QixFQUFHa1ksRUFBTmhXLEVBSFd3aEI7Z0JBQUY3UztnQkFBRTZTOzthQUVQLE9BRk9BLElBR2tDO2tCQUU5Q2lTLGdCQUFpQjN5QjtXQUFPLEdBQVBBO2FBR2UsSUFEeEJsSCxLQUZTa0gsS0FFWDRKLEVBRlc1SixLQUViaEQsRUFGYWdELEtBRWY2ekIsRUFGZTd6QixLQUdlLGVBRDFCNEosRUFBRTlRO2FBQ087d0JBRGIrNkIsRUFBRTcyQjtvQ3BDdmdCakIsT29DcWdCYTIxQjtXQUNHLFFBRWdEO2tCQUV2REMsV0FBVzV5QjtXQUNJLG1CQURKQTtXQUNJLHNCcEMzZ0J4QixPb0NxZ0JhMnlCLDJCQU00QjtrQkFFaENFLFlBQVlDLElBQUl2TTtlQUNGb04sSUFERXBOLEVBQ0F2bUI7V0FBSTtnQkFBTjJ6QjtlQUdFO2dCQURDMTJCLEVBRkgwMkI7Z0JBRUF6ZSxFQUZBeWU7Z0JBRUgzMkIsRUFGRzIyQjtnQkFFTnowQixFQUZNeTBCO2dCQUdFLG9CQURMMzJCLEVBSEM4MUI7ZUFJSSxTQUVSMTFCO2lCQUFPLFFBQVBBLEdBQ0ssV0FKRkosRUFBR2tZLEVBQUdqWSxFQUZEK0MsR0FBRjJ6QixJQUVOejBCLEVBRlFjO3FCQUFGMnpCLElBRUcxMkI7O2VBQ0QsWUFETEQsRUFBR2tZLEVBQUdqWSxFQUZEK0M7OzttQ3BDOWdCekIsT29DeWZheXlCLHdCQThCc0I7O2lCQWxhMUJ0b0I7aUJBRUFxQjtpQkF3R0lpa0I7aUJBdEdBZjtpQkF5SkErRTtpQkE3TEo5RTtpQkFrTEllO2lCQStIQTlPO2lCQVlBK087aUJBMERKbnBCO2lCQWNBTDtpQkFwTEkvRjtpQkF1QkE4RjtpQkFNQStGO2lCQUlBRTtpQkE2RkFyQjtpQkFVQUY7aUJBWUE4RTtpQkEyQ0F1aEI7aUJBUUoyRDtpQkF2UUl4QjtpQkFLQUM7aUJBS0FDO2lCQUtBQztpQkFmQUg7aUJBS0FDO2lCQWdKQS9EO2lCQXBQQWxqQjtpQkFnRkFvbEI7aUJBL0RBSjtpQkFrQkFDO2lCQWtCQUM7aUJBa0JBQztpQkE2RkF2ckI7aUJBU0EySDtpQkF5TUprRTtpQkFhQStnQjtpQkFHQUM7aUJBekJBTjtpQkFHQUM7SUFsYkc7SUZxQkc7YUd0RVZxQyxnQkFBWSxjQUFvQjthQUVoQ0MsTUFBTXgzQixHQUFJLDBCQUFxQjthQUUvQnkzQixPQUFLejNCLEdBQUksVUFBSkEsVUFBNkI7YUFFbEMwM0IsS0FBS3YzQixFQUFFSCxHQUFJLFVBQU5HLEVBQUVILE1BQUksT0FBSkEsYUFBSSxRQUFtQzthQUU5QzIzQixJQUFJMzNCO01BQ04sU0FETUE7TUFDTjtZQUNNaUMsV0FBSkMsV0FGSWxDLE9BRUFpQyxHQUZBakMsMkJBRUprQztNQUNVLFdBQVc7YUFFckIwMUIsUUFBUTUzQjtNQUNWLFNBRFVBO01BQ1Y7WUFDTWlDLFdBQUpDLFdBRlFsQyxPQUVKaUMsR0FGSWpDLDhCQUVSa0M7TUFDVSxRQUFJO2FBRWQyMUIsSUFBSTczQjtNQUNOLFNBRE1BLEtBQ04sU0FDVyxJQUFUa0MsV0FBUyxPQUFUQSxHQUNTLFdBQVc7YUFFcEI0MUIsUUFBUTkzQjtNQUNWLFNBRFVBLEtBQ1YsU0FDVyxJQUFUa0MsV0FBUyxVQUFUQSxJQUNTLFFBQUk7YUFFYjYxQixXQUFTLzNCLEdBQUksYUFBSkEsUUFBYzthQUV2Qmc0QixTQUFPaDRCLEdBQUksT0FBSkEsSUFBUzthQUVoQmk0QixPQUFLejRCLEVBQUVRLEdBQUksY0FBTlIsRUFBRVEsS0FBbUI7YUFFMUJrNEIsT0FBSzE0QixFQUFFb08sSUFBSTVOLEdBQUksbUJBQVZSLEVBQUVvTyxJQUFJNU4sS0FBNEI7YUFJdkNtNEIsU0FBT240QixHQUFJLGdCQUFKQSxLQUFtQjthQUUxQmkxQixRQUFRNUwsRUFBRS90QixHQUFJLHFCQUFjNkUsR0FBSyxZQUFMQSxFQUFwQmtwQixFQUFpQyxFQUEvQi90QixFQUFrQzthQUU1Qzg4QixTQUFPcFgsR0FDRCxJQUFKaGhCLEVBQUksWUFDUixRQURJQSxFQURLZ2hCLEdBRVQsT0FESWhoQixDQUVIOzs7OztPQTdDQ3UzQjtPQU1BRztPQUVBQztPQUtBQztPQUtBQztPQUtBQztPQXJCQU47T0FFQUM7T0F3QkFNO09BRUFDO09BRUFDO09BRUFDO09BSUFDO09BRUFsRDtPQUVBbUQ7OzthQ2pDQUMsZ0JBQVksZ0JBSWY7YUFFR0MsUUFBTWpQLEdBQ1IsbUNBRWE7YUFFWCtILElBQUlqeEIsRUFBRWtwQjtNQUNSLFlBRE1scEIsS0FDTixLQURRa3BCO01BQ1I7Z0JBRFFBLDhCQUNKa1AsS0FESWxQLE9BQ0prUDtnQkFESWxQLGdCQUNKa1AsS0FESWxQLE9BQ0prUCxPQVlZO2FBS2RDLEtBQUtuUDtNQUNQLFNBRE9BLEtBQ1AsU0FFc0IsSUFBYm9QLGdCQUFhLE9BQWJBLFFBREEsYUFDb0I7YUFFM0JDLFNBQVNyUDtNQUNYLFNBRFdBLEtBQ1gsU0FFc0IsSUFBYm9QLGdCQUFhLFVBQWJBLFNBREEsUUFDeUI7YUFLaENFLE9BQUt0UDtNQUNQLFNBRE9BO01BQ1A7OztjQUtrQnJjLGFBTlhxYywyQkFNV3JjO1FBRmhCLFFBSktxYztRQUlMO01BRk8sYUFPQTthQUVQdVAsU0FBU3ZQO01BQ1gsU0FEV0E7TUFDWDs7O2NBS2tCcmMsYUFOUHFjLDJCQU1PcmM7UUFGaEIsUUFKU3FjO1FBSVQ7TUFGTyxRQU9LO2FBS1p3UCxPQVlFeFA7TUFBSyxhQUFMQSxVQVhlMFAsT0FBS1IsS0FXcEJsUDtNQVZGO1dBRHNCa1A7Y0FHYkUsUUFIYUYsUUFHSnZyQixLQUhJdXJCLFFBSWhCMXpCLE9BREc0ekI7YUFIUU0sS0FPSCxVQUhSbDBCLFNBRUssV0FGTEE7Y0FKV2swQixLQUlYbDBCLElBSmdCMHpCLEtBR0p2ckI7O1FBRFQsV0FGUStyQjtRQUVSLE9BRkVELE1BVzJEO2FBRXRFRSxXQUFTM1AsR0FDWCxhQURXQSxRQUNDO2FBRVY0UCxTQUFPNVAsR0FDVCxPQURTQSxJQUNEO2FBRU42UCxPQVFFMTVCLEVBQUU2cEI7TXRDNUhULElzQ3FIa0JrUCxLQU9UbFA7TUFOSjtXQURha1A7Y0FHSkUsUUFISUYsUUFHS3ZyQixLQUhMdXJCO1VBSVgsV0FHQS80QixFQUpPaTVCO2NBSElGLEtBR0t2ckI7O1FBRFQsU0FLYzthQUV2Qm1zQixPQVFFMzVCLEVBQUVrUCxPQUFLMmE7VUFQSTNrQixLQU9UZ0ssT0FQYzZwQixLQU9UbFA7TUFOVDtXQURrQmtQO1VBSUw7V0FESkUsUUFIU0Y7V0FHQXZyQixLQUhBdXJCO1dBSUwsa0JBR1gvNEIsRUFQV2tGLEtBR0orekI7V0FISS96QjtXQUFLNnpCLEtBR0F2ckI7O1FBRFQsT0FGSXRJLEtBT29CO2FBRWpDMDBCLFNBQVNDLEdBQUdDO01BQ2QsYUFEV0Q7TUFDWDtRQUNFLFNBRllDO1FBRVo7a0JBRllBOzs7O2tCQUFIRDs7Ozs7O2tCQUFHQzs7a0JBQUhEO2tCQVNQLFFBVE9BO2tCQUFHQyxRQUFIRCxNQUFHQyxRQUFIRCxNQUFHQyxRQUFIRCxNQUlQLFFBSk9BO2lCQVlDO2FBSVZFLFNBQU9sUTtNQUNULFNBQVF0TyxJQUFJclk7UUFBTyxHQUFQQTtjQUVPdkMsRUFGUHVDLEtBRVVzSyxLQUZWdEs7VUFFa0MsVUFBM0J2QyxpQnRDM0p0QixPc0N5Slc0YSxJQUVjL047UUFEWCxRQUM0QztNQUZ2RCxTQURTcWM7TUFDVCxzQnRDekpILE9zQ3lKV3RPLGVBSUc7YUFFVHllLFVBQVFuUSxFQUFFL3RCLEdBQUkscUJBQWM2RSxHQUFLLFdBQUxBLEVBQXBCa3BCLEVBQWlDLEVBQS9CL3RCLEVBQWtDO2FBRTVDbStCLFNBQU96WSxHQUNELElBQUpxSSxFQUFJLFlBQ1IsVUFESUEsRUFES3JJLEdBRVQsT0FESXFJLENBRUg7Ozs7O09BdklDZ1A7T0FXQWpIOztPQStCQXVIO09BV0FDO09BWEFEO09BYkFIO09BS0FFO09BTEFGO09BdkJBRjtPQTZEQU87T0FjQUc7T0FHQUM7T0FHQUM7T0FVQUM7T0FVQUM7T0FnQkFHO09BT0FDO09BRUFDOzs7OzthQ2pJQUM7TUFBUSw2QkFFREEsNEJBREMsUUFDZTthQUN2QjdEO01BQU8sNkJBRUFBLDBCQURDLFFBQ2E7YUFFckI4RCxVQUFVcjRCO01BQ0gsYUFER0EsWUFDWixxQkFEWUEsT0FDSCxpQkFBcUQ7YUFHeERzNEIsU0FBaURGLE1BQU05aEI7TXZDM0NoRSxJdUMyQ2dFd007TUFBSztrQkFBTEE7U0FBSyxPQUFMQTs7WUFPOUMsSUFESnVTLEdBTmtEdlMsT0FNdERzUyxHQU5zRHRTLE9BTzlDLGVBUHdDc1YsTUFNaERoRDtZQUNRO2tCQVA4Q3RTLElBTWxEdVM7O2NBQ0k7b0JBQ0FrRCxhQUFIOTJCLDBCQUFHODJCLElBRkpsRDtjQUlEOztZQWlCRTtlQTNCaUR2UzthQTJCakQsa0JBQUw1a0I7YUFBSyxpQkFBTEEsa0JuQjNDTHVNLGlCbUIyQ0t2TTthQTNCc0Q0a0I7Ozs7Ozt1QkFjMUQsSUFEc0IwVixZQUN0QixzQkFEc0JBLElBYm9DMVY7Y0FZakM7WUFJYiwrQkFoQndDc1Y7WUFnQnhDLFlBRUEsSUFBTEssZUFBSyxVQUFMQSxJQWxCbUQzVjtZQWlCaEQ7OztZQUtWLElBRE05aUIsRUFyQm9EOGlCO1lBc0IxRCxHQURNOWlCLGFBQ2lCLFVBRGpCQTtZQUM0QixTQUQ1QkEsS0FFYTtZQURuQixJQUVNM0IsRUFBSixzQkFISTJCO1lBR0osT0FISUE7WUFHSixVQUFJM0IsRUF4Qm9EeWtCOztRQUtuQyxPQUxtQ0EsSUEyQnBCO2FBR25DNFYsVUFBNkNoNkI7TUFFcEQ7aUJBRm9EQTtRQUVwRDtTQUNZOztTQURaO2tCQUVrQixJQUFUK0MsVUFBUyxVQUFUQTs7WUFFTyxJQUNWNlUsRUFEVSxTQU5vQzVYO1lBTXBDLFVBQ1Y0WDthQUNVOztjQUZBLFNBQ1ZBLE1BQW9CLElBQWRraUIsSUFBTmxpQixLQUFvQixPQUFwQkEsRUFBb0IsVUFBZGtpQjtjQUVEOztZQUVFOzsrQkFBTHQ2QjthQUFLLGtCQUFMQSxrQm5CekRMdU0saUJtQnlES3ZNO1lBQWU7Ozs7cUJBQ0csSUFBTnU2QixZQUFNLE9BQU5BO1lBQ0EsSUFBSjU1QixFQUFJLG1CQWJnQ0g7WUFhaEMsYUFBSkc7WUFBSSxPQUFKQTs7WUFFWixJQURNbUI7WUFDTixHQURNQSxhQUNpQixVQURqQkE7WUFDNEIsYUFENUJBO3NCQWQwQ3RCO3dCQWlCM0Msc0JBSENzQixhQUdtQzthQUcxQzI0QjtNQUFPLFVBRUcsSUFBTGo2QixXQUFLLGlCQUFMQSxHQURHLFFBQ2E7YUFHakJrNkIsVUFBeUNsNkI7TUFDL0M7aUJBRCtDQTtRQUMvQzs7a0JBQ2tCLElBQU40WCxVQUFNLE9BRjZCNVgsYUFFN0IsT0FBTjRYLEVBQU07Ozt3QkFDZSxPQUhjNVgsYUFHZDs7O1lBRTdCLElBRE1zQjtZQUNOLEdBRE1BLGFBQ2lCLFVBRGpCQTtZQUM0QixhQUQ1QkE7c0JBSnFDdEI7MENBSXJDc0I7O1FBSFYsVUFRVSxVQVRxQ3RCO1FBU3JDO1FBQ0ksU0FDYTthQUd6Qm02QjtNQUFPLFVBRU0sSUFBUnRFLGNBQVEsaUJBQVJBLE1BREcsUUFDbUI7YUFFdkJ1RSxVQUFVdDZCLEVBQUVFO01BQ2xCLE9BRGdCRjtRQUdSLG9CQUhVRTtRQUdWO1VBRUYsSUFERytDO1VBQ0gsVUFMWS9DO1VBS1o7V0FDaUIsa0JBTlBGLFVBQUVFO1dBTUs7Ozt1QkFGZCtDLEVBRUVzM0IsT0FGRnQzQixFQUVNNlUsR0FBRzJlO1FBQ04sWUFQTXYyQjtNQUNILFlBREdBLE9BT087YUFVdkJzNkIsTUFBTXg2QjtNdkNySVg7UXVDdUllOztTQVJPLGdCQU1YQSxFQUVEc2tCO1NBUlk7OztpQkFRWkEsU0FSSy9nQjtRQUFPLFNBQVZ1VTtRQUFVLE9BQWR5aUI7TUFPSzthQUdScnRCLEtBQUtoTjtNQUNELGlCQURDQTtNQUNELFVBQ00sSUFBTCtDLFdBQUssS0FGTC9DLEdBRUssT0FBTCtDO01BQ0csZUFBYTthQUdyQnczQixRQUFNdjZCLEdBQ0YsaUJBREVBLEdBQ0YsU0FDTSxnQkFDRixRQUFFO2FBR1Z3NkIsT0FBS2g3QixFQUFFaTdCO01BRVA7UUFBTSxpQkFGQ0E7UUFFRCxjQUNDMTNCLFdBQUssS0FITDAzQixNQUdzQixXQUh4Qmo3QixFQUdFdUQ7UUFDRyxTQUVIO2FBS1AyM0IsS0FBS2w3QixHQUFJLHVCQUFKQSxLQUF5RDthQUU5RG03QixVQUFRLzRCO01BQ1Y7TUFBd0IsbUNBQXFCekIsRUFBRXlCLEdBQUssVUFBUHpCLEVBQUV5QixFQUFpQixFQUR0REEsU0FDaUU7YUFHekVnNUIsVUFBVTU2QjtNQUNaLElBQUkwNUI7TUFBSjs7aUJBUUUsSUFBSWgzQixFQVJGZzNCO2lCQVFGLE9BQUloM0IsSUFBSixzQkFUVTFDOzJCQUNSMDVCLGNBVXFCLGdCQVhiMTVCLEVBU04wQzsyQkFHSyxFQUFDO2FBR1ZtNEIsV0FBUzc2QjtNQUNYLElBQUkwNUI7TUFBSjs7aUJBRUUsSUFBSWgzQixFQUZGZzNCO2lCQUVGLE9BQUloM0IsSUFBSixxQkFIUzFDOzJCQUNQMDVCLGNBSXFCLGVBTGQxNUIsRUFHTDBDOzJCQUdLLEVBQUM7YUFHVm80QixXQUFXLzJCO01BRXlCLHFCQUZ6QkEsR0FFeUIsK0JBQXFDO2FBS3pFZzNCLEtBQUt6L0IsRUFBRTBFLEdBQTBDLGNBQTFDQSxHQUFrQyx1QkFBcEMxRSxVQUFvRDthQUN6RDAvQixNQUFNMS9CLEVBQUUwRSxHQUFzQyxrQkFBeEMxRSxFQUF3QyxLQUF0QzBFLEtBQThDO2FBQ3REaTdCLE1BQU0zL0IsR0FBSSxrQkFBSkEsTUFBOEM7YUFFcEQ0L0IsS0FBSzE3QixFQUFFUTtNQUNUOzs7Ozs7bUJBQXVELGNBRDlDQSxHQUNpQyxlQUFLLFdBRHhDUixXQUNzRCxLQUFJO2FBRS9EMjdCLE1BQU0zN0IsRUFBRVE7TUFBSTs7Ozs7O21CQUFpRCxjQUFyREEsR0FBK0MscUJBQWpEUixVQUE2RCxLQUFJO2FBQ3ZFNDdCLE1BQU01N0I7TUFBSSxzQ0FBMkMscUJBQS9DQSxZQUErRDtRQUVyRTY3QjthQUNBQyxNQUFNOTdCO01BQUksc0NBQXlDLHVCQUE3Q0EsS0FBbUQsS0FBRzthQVc1RCs3QixVQUF3RC83QjtNQUF4RDtPQUVVOztPQUZWOztjQUdVb1ksV0FBSDdVO1VBQ0w7VUFDQSxXQUxzRHZELEVBR2pEdUQ7VUFHTDtVQUNBLFVBUHNEdkQsRUFHOUNvWTtVQUlSOztjQUVRK2UsWUFBSkQ7VUFDSjtVQUNBLFVBWHNEbDNCLEVBU2xEazNCO1VBR0o7VUFDQSxVQWJzRGwzQixFQVM5Q20zQjtVQUlSO2dCQUVTO2dCQUNEO2lCQUNHLGlDQUFzQjthQXhCL0I2RSxLQUFnRGg4QixFQUFFUTtNQUN4RDtNQUNBLFVBQVUsTUFGOENBO01BR3hEO01BQ0EsVUFKc0RSLEVBSTFDLEtBSjRDUTtNQUt4RDs2QkFDZ0I7Ozs7OztPQTFEZDA2QjtPQUVBQztPQUlBQztPQWVBQztPQVNBQztPQXpDQU47T0FaQXh0QjtPQU1BdXRCO09BbERBTjtPQW1CQUU7T0FoRkFUO09BcUdBWTtPQWdFQVM7T0FDQUM7T0FDQUM7T0FFQUM7T0FHQUM7T0FDQUM7T0FFQUM7T0FDQUM7T0FJSUU7O2FDckxKQyxTQUFPMzdCO01BQ1Y7Z0JBRFVBO09BRVYsd0JBREk4UTtPQUVKLG9CQURJQztNQUNKLFVBQUk3USxJQURBNlEsSUFDQTdRLEVBQ3NEO2FBRXZEMDdCLFNBQVNwNkIsR0FBSSxrQkFBSkEsWUFBMEM7YUFDbkRxNkIsV0FBU3I2QixHQUFJLFdBQUpBLFlBQW1DO2FBRTVDczZCLE1BQUl0NkIsRUFBRThCLElBQUlDO014Q3hDZixRd0N3Q1dELFlBQUlDLFdBQU4vQixPQUFNK0IsV0FBSkQ7T0FHSCxrQkFIQzlCLEtBQUU4QixJQUFJQztNQUVQLGtDQUNpQzthQUdwQ3c0QixPQUFLcFYsSUFBSXhLLE9BQU9NLElBQUlQLE9BQU8zWTtNeEM5Q2hDOzs7UXdDOENnQ0E7Ozs7UUFBbEI0WTs7O1VBQUp3SyxTQUFzQnBqQixXQUFsQjRZOzs7O1FBQVdEOzs7K0JBQUpPLE9BQVdsWixXQUFQMlk7T0FLcEIsdUJBTEt5SyxPQUFJeEssT0FBT00sSUFBSVAsT0FBTzNZO01BR3hCLG1DQUUrQzthQUdsRHk0QixNQUFJeDZCLEVBQUU4QjtNeEN0RFgsUXdDc0RXQSxVQUFGOUIsUUFBRThCLEtBR0gsNkJBSEM5QixLQUFFOEI7TUFFUCxrQ0FDaUM7YUFHaEMyNEIsU0FBT3o2QixHQUFJLE9BQUpBLElBQWM7YUFFckIwNkIsUUFBTTE2QixHQUFJLGlCQUFlO2FBRXpCMjZCLE1BQU0zNkI7TUFDUixnQkFEUUEsS0FDUiw0QkFEUUEsTUFDUixRQUVpQzthQVUvQjQ2QixPQUFPNTZCLEVBQUU2NkI7TUFDWCxZQURTNzZCLEtBQ1QsUUFEU0EsS0FDVCxXQUNJKzZCOztXQUNBL2UsY0FGQThlLFVBRE9EO1VBSXdCLGlCQUQvQjdlO1FBRUosdUJBRklBO1NBRXFDLElBSnJDOGUsVUFET0Q7VUFPSjs7VUFDQTtRQUVVLElBQWJHLFdBQWEsa0JBUGJoZjtRQVVKLEtBYlNoYyxPQVVMZzdCLGFBVktoN0I7UUFhVCxPQUhJZzdCO1FBR0osT0FWSWhmO1FBVUosSUFiU2hjLE9BQUU2NkIsYUFBRjc2QjtVQWlCVCxJQWhCSTg2QixVQURPRCxhQUFGNzZCLEtBa0JUOztzQ0FBRTthQW9DQWk3QixTQUFTajdCLEVBQUVvQjtNQUNiLElBQUk4NUIsSUFET2w3QjtNQUNYLEdBRFdBLFFBQ1BrN0IsSUFDb0IsT0FGYmw3QjtNQUV1QixzQkFGdkJBLEtBQ1BrN0IsSUFEUzk1QjtNQUVxQixPQUQ5Qjg1QjtNQUM4QixRQUViO1FBRW5CQyw4QkFDQUM7YUFFSUMsZ0JBQWdCcjdCLEVBQUUwTTtNQUN4QjtZQUFJd3VCLElBRGtCbDdCO1FBQ3RCLEdBRHNCQSxRQUNsQms3QixJQUNvQixPQUZGbDdCLEVBSHBCbTdCO1FBSUYsSUFFSTM4QixFQUFJLGdCQUhjd0IsS0FDbEJrN0IsSUFEb0J4dUI7UUFHaEIsU0FBSmxPLEdBRUUsT0FMZ0J3QixFQUhwQm03QjtRQVNHLE9BTERELE1BRUExOEI7UUFHQyxTQUF1QjthQUV0Qjg4QixtQkFBbUJ0N0IsRUFBRTBNO01BQzNCO1lBQUl3dUIsSUFEcUJsN0I7UUFDekIsR0FEeUJBLFFBQ3JCazdCLElBQ29CLE9BRkNsN0IsRUFWdkJvN0I7UUFXRixJQUVJNThCLEVBQUksbUJBSGlCd0IsS0FDckJrN0IsSUFEdUJ4dUI7UUFHbkIsU0FBSmxPLEdBRUUsT0FMbUJ3QixFQVZ2Qm83QjtRQWdCRyxPQUxERixNQUVBMThCO1FBR0MsU0FBdUI7YUFFdEIrOEIsbUJBQW1CdjdCLEVBQUUwTTtNQUMzQjtZQUFJd3VCLElBRHFCbDdCO1FBQ3pCLEdBRHlCQSxRQUNyQms3QixJQUNvQixPQUZDbDdCLEVBbEJ2Qm83QjtRQW1CRixJQUVJNThCLEVBQUksbUJBSGlCd0IsS0FDckJrN0IsSUFEdUJ4dUI7UUFHbkIsU0FBSmxPLEdBRUUsT0FMbUJ3QixFQWxCdkJvN0I7UUF3QkcsT0FMREYsTUFFQTE4QjtRQUdDLFNBQXVCO2FBRTFCZzlCLGNBQWN4N0IsRUFBRXRCLEVBQUUrOEIsT0FBTzE1QjtNQUMzQixTQURvQjA1QjtNQUNwQjs7OzthQUQyQjE1Qjs2Q0FBVHJELEtBQVNxRCxXQUFQMDVCO01BRWY7TUFETCxJQUVJQyxhQUhZMTdCLE9BQVcrQjtNQUV5QixHQUZwQy9CLE9BR1owN0IsYUFDNEIsT0FKaEIxN0IsRUFBVytCO01BSzNCLGlCQUxrQnJELEVBQUUrOEIsT0FBSno3QixVQUFXK0I7TUFLM0IsT0FGSTI1QjtNQUVKLFFBQzBCO2FBRXhCQyxhQUFhMzdCLEVBQUV0QixFQUFFKzhCLE9BQU8xNUI7TUFDVixxQkFERC9CLEVBQ0MscUJBREN0QixHQUFFKzhCLE9BQU8xNUIsSUFDMkI7YUFFbkQ2NUIsV0FBVzU3QixFQUFFdEI7TUFDZiw4QkFEZUEsR0FDZixhQURhc0IsT0FDVCtCO01BQUosR0FEYS9CLE9BRVQwN0IsYUFDNEIsT0FIbkIxN0IsRUFDVCtCO01BR0osaUJBSmVyRCxJQUFGc0IsVUFDVCtCO01BR0osT0FGSTI1QjtNQUVKLFFBQzBCO2FBRXhCRyxVQUFVNzdCLEVBQUV0QixHQUFpQixrQkFBbkJzQixFQUFtQixxQkFBakJ0QixHQUEyQzthQUV2RG85QixXQUFXOTdCLEVBQUUrN0IsSUFDZixvQkFEYS83QixFQUFFKzdCLGNBQ3VCO2FBK0JwQ0MsWUFBWWg4QixFQUFFeUMsR0FBR1Y7TUFDbkIsU0FEbUJBLFlBQ25CLGtDQURtQkE7TUFFakI7TUFiRixHQVdjL0IsZUFBSytCLFNBWGlCLE9BV3RCL0IsRUFBSytCO01BQ25CLElBNUJxQms2QixlQUFjbjZCLElBMkJyQjlCLEtBM0IwQms4QixRQTJCckJuNkIsSUFYNkIsS0FXbEMvQjtNQTFCWjtpQkFEc0NrOEI7VUFHNUIsSUFBSjc5QixFQUFJLE1Bd0JJb0UsUUEzQm1CWCxJQUFLbzZCO1VBRzVCLFNBQUo3OUI7WUFFQzs0QkFMWTQ5QixlQUdiNTlCO2FBRUMsTUFMMEJ5RCxNQUczQnpEO2FBRUMsVUFMK0I2OUIsVUFHaEM3OUI7YUFIYTQ5QjthQUFjbjZCO2FBQUtvNkI7O1lBMkIxQmw4QixPQTNCT2k4QixxQkEyQlBqOEI7VUFIZCxPQUdjQSxPQTNCT2k4Qjs0QkEyQkZsNkIsSUFNSDtVQUNoQjtzQ0FBRTthQUVBczZCLGNBQWMxNkIsR0FBRzNCLEdBQ25CLGNBRGdCMkIsR0FBRzNCLFlBQ1k7YUE0QzdCczhCLGVBQWV0OEIsRUFBRTlCLEVBQUVRO01BQ3JCLGdDQURxQkEsR0FFUDg5QixZQUFTN2U7TUFDckI7V0FEcUJBLE1BakJGNGU7VUFtQlgsSUFlSkUsUUFmSSxnQkFKVy85QixFQUVFaWY7VUFFYixVQWVKOGU7WUFkb0IsVUFIWkQ7Y0FJUCxTQU5VeDhCLEVBbUJYeThCO2NBYkMsUUFKZ0I5ZSxZQUFUNmUsWUFBUzdlOztZQU9oQixJQXhCUW9QLE1BaUJRcFA7WUFoQnZCLEdBRHFCNGUsU0FBTnhQLE1BQ007WUF1QmQsSUF0QkQsd0JBYWVydUIsRUFmTnF1QjtzQkFsQk0yUDtjQTRCbEIsUUFWWTNQLGNBUmYsNEJBdUJxQnJ1QixHQXZCTDZmO2NBQ2Q7bUJBRGdCb2UsU0FBRnBlO3FCQWtCVHFlLEtBbEJXRDs7a0JBRVYsMEJBcUJhaitCLEVBdkJMNmY7a0JBRVI7Ozs7Ozs7Ozs7K0JBQzBDLFFBSGxDQTtrQkFFUixJQWdCRHFlLEtBbEJTcmU7K0JBbUJiLE1BSWtCN2YsRUFmTnF1QixNQVVSNlAsT0FWUTdQLFdBVVI2UDs7O1loQ3VRRDtjZ0M1UUgsUUFMWTdQLGNBS1o7Y0FoQ1MsVUFTUzJQOzs7bUNBTmQ7Y0E2QkosSUF0QkgsMEJBZ0NxQmgrQixHQWhDTHUyQixNQUFFajdCO2NBQ2hCO21CQURrQjJoQixPQUFGM2hCLEVBQ0M7Z0JBQ2QsbUJBOEJnQjBFLEVBaENIMUUsT0FERzBpQztrQkFHSyxRQUZSMWlDLFVBRVEsSUFGVmk3QixnQkFBRWo3QjtnQkFHYixtQkE2QmdCMEUsRUFoQ0gxRTtrQkFLWCxRQUxXQTtnQkFJZCxTQUpZaTdCO2tCQUlTLFFBSlBqN0IsVUFJTyxJQUpUaTdCLGdCQUFFajdCOzs7cUJBd0JmLE1BUWtCMEUsRUFoQ0h3ZSxTQWlCSDZQLG9CQWpCRy95Qjs7WUF5Q1gsSUFDV2dqQyxrQkFBUEM7WUFDSixXQVhVajlCLEVBV0csV0FYRDlCLEVBVVIrK0I7WUFESixJQVBPVCxZQUFTN2UsSUFRTHFmOztVQUdDLFVBWExSO1lBWVAsU0FkVXg4QjtZQWVWLFNBZlVBLEVBbUJYeThCO1lBSkMsUUFiZ0I5ZSxZQUFUNmUsWUFBUzdlOztvQkFpQmpCOGU7WUFEQyxTQWhCZ0I5ZSxZQUFUNmUsU0FpQlJDLFFBakJpQjllO1VBa0JoQixTQXBCVTNkLEVBbUJYeThCO1VBZkksSUFnQkgsS0FsQmdCOWUsWUFBVDZlLFNBaUJSQyxRQWpCaUI5ZTs7UUFxQnJCLGdCQXJCWTZlO1FBcUJaLFlBQXdCLFNBdkJUeDhCLEVBRUh3OEIsZUFzQkg7YUFFVFUsU0FBU2w5QixFQUFFK0I7TUFDUyxRQURUQSxVQUFGL0IsT0FBRStCLE1BSVQsT0FKU0EsSUFJVDtNQUZBLHVDQUVpQjthQUluQm83QixTQUFPbjlCO01BQ1QsU0FBUXlaLElBQUl6ZjtRQUVWLEdBSE9nRyxRQUNHaEcsRUFFYztRQUV0Qiw0QkFMS2dHLEtBQ0doRyxHQUlSLEtBSlFBO1FBS0ssVUFEVDZFLGlCeENyVFgsT3dDaVRXNGEsZ0JBS21CO01BTDNCOzRCeENqVEgsT3dDaVRXQSxlQU9IO2FBRUgyakIsVUFBUXA5QjtNQUNWLFNBQVF5WixJQUFJemY7UUFFVixHQUhRZ0csUUFDRWhHLEVBRWM7UUFFdEIsNEJBTE1nRyxLQUNFaEcsR0FJUixLQUpRQTtRQUtTLGFBTFRBLEVBSUo2RSxrQnhDL1RYLE93QzJUVzRhLGdCQUt1QjtNQUwvQjs0QnhDM1RILE93QzJUV0EsZUFPSDthQUVINGpCLFVBQVFyOUIsRUFBRStMO01BQWUsMkJ4Q3BVOUIsT3dDbUlLa3ZCLFNBaU1RajdCLFNBQUUrTCxJQUErQjthQUV6Q3V4QixTQUFPdGpDLEdBQ0QsSUFBSmdHLEVBQUksYUFDUixVQURJQSxFQURLaEcsR0FFVCxPQURJZ0csQ0FFSDthQWFDdTlCLFNBQVN2OUIsRUFBRW5CO01BQ2IsSUFBSTY4QixhQURPMTdCO01BQ1gsR0FEV0EsT0FDUDA3QixhQUM0QixPQUZyQjE3QjtNQUUrQixzQkFGL0JBLFVBQUVuQjtNQUU2QixPQUR0QzY4QjtNQUNzQyxRQUVoQjthQUV4QjhCLGFBQWF4OUIsRUFBRW5CO01BQ2pCLElBQUk2OEIsYUFEVzE3QjtNQUNmLEdBRGVBLE9BQ1gwN0IsYUFDNEIsT0FGakIxN0I7TUFHZixpQkFIZUEsVUFBRW5CO01BR2pCLE9BRkk2OEI7TUFFSixRQUMwQjthQUV4QitCLGFBQWF6OUIsRUFBRW5CO01BQ2pCLElBQUk2OEIsYUFEVzE3QjtNQUNmLEdBRGVBLE9BQ1gwN0IsYUFDNEIsT0FGakIxN0I7TUFHZixpQkFIZUEsVUFBRW5CO01BR2pCLE9BRkk2OEI7TUFFSixRQUMwQjthQUV4QmdDLGFBQWExOUIsRUFBRW5CO01BQ2pCLElBQUk2OEIsYUFEVzE3QjtNQUNmLEdBRGVBLE9BQ1gwN0IsYUFDNEIsT0FGakIxN0I7TUFHZixpQkFIZUEsVUFBRW5CO01BR2pCLE9BRkk2OEI7TUFFSixRQUMwQjthQUV4QmlDLGFBQWEzOUIsRUFBRW5CLEd4QzlXcEIsT3dDNFZLMitCLGFBa0JheDlCLEVBQUVuQixFQUNzQzthQUVyRCsrQixhQUFhNTlCLEVBQUVuQjtNQUM2QixJQUQ3QmtaLElBQzZCLGFBRDdCbFosVUFyQmYyK0IsYUFxQmF4OUIsRUFBRStYLElBQ3NDO2FBRXJEOGxCLGFBQWE3OUIsRUFBRW5CLEd4Q3BYcEIsT3dDa1dLNCtCLGFBa0JhejlCLEVBQUVuQixFQUNzQzthQUVyRGkvQixhQUFhOTlCLEVBQUVuQjtNQUM2QixJQUQ3QmtaLElBQzZCLGlCQUQ3QmxaLEdBQ3FDLG9CQUR2Q21CLEVBQUUrWCxJQUNzQzthQUVyRGdtQixhQUFhLzlCLEVBQUVuQixHeEMxWHBCLE93Q3dXSzYrQixhQWtCYTE5QixFQUFFbkIsRUFDc0M7YUFFckRtL0IsYUFBYWgrQixFQUFFbkI7TUFDNkIsSUFEN0JrWixJQUM2QixpQkFEN0JsWixHQUNxQyxvQkFEdkNtQixFQUFFK1gsSUFDc0M7Ozs7T0EvVnJEb2lCO09BTUFDO09BQ0FDO09BRUFDO09BTUFDO09BUUFDO09BTUFDO09BRUFDO09BRUFDO09BaUtBMEI7T0F1RUFhO09BcktBakM7T0FTSUk7T0FnQkFFO09BUkFEO09BMkJKTTtPQU9BQztPQWxCQUw7T0FRQUc7T0FrR0FXO09BdEZBUjtPQWdDQUU7T0F3RkFtQjtPQVVBQztPQVVBQztPQUVBQztPQWdCQUM7O09BTUFDO09BcUJBSTtPQUhBRDtPQWxCQUg7T0FxQkFJO09BSEFEO09BWkFGO09BcUJBSztPQUhBRDtPQVpBSDtPQXFCQU07T0FIQUQ7O2FwQ2xXQUUsdUJBQXFCLG1CQUFvQjthQUd6Q0MsZ0JBQWdCeGdDLFNBQVMwRDtNQUMzQixZQUQyQkEsWUFDM0IsV0FEMkJBO01BRzNCO2VBSGtCMUQ7ZUFFZHlnQztlQUVGLFlBQTBCLGVBSlZ6Z0MsU0FFZHlnQyxXQUF3QkMsTUFFdUM7YUFFakVDLGdCQUFnQjNnQyxVQUNsQixnQkFEa0JBLFNBQ007YUFHdEI0Z0MsYUFBYTVnQztNQUNDLGtDQUNoQjFEO01BQ0U7O1VBRkV1a0MsV0FDSnZrQyxFQUVJLFlBQTBCLGdCQUpmMEQsU0FFZjFEO1FBQ0UsU0FERkE7O1FBSUEsNEJBTEl1a0MsWUFLNEI7YUFHOUJDLGVBQWU5Z0MsU0FBUzBEO01BQzFCLFlBRDBCQSxZQUMxQixXQUQwQkE7TUFHYiw4QkFISTFELFNBRWJ5Z0MsV0FBd0JDLFNBQzhCO2FBYXhESyxlQUFlQztNQUFVLEdBQVZBLFNBRUQsSUFBVEMsTUFGVUQsV0FFRCxZQUFUQyxPQURHLFFBQ2dDO2FBU3hDQywrQkFHQTVnQyxJQUFJNmdDO01BQU8sVUFBWDdnQztPQUFXLE9BQVhBO2dCQUVBLGFBRkk2Z0M7Z0JBSUosYUFKSUE7Z0JBZ0NKLGNBaENJQTtpQkFzQ0osY0F0Q0lBOztPQUFPLE9BQVg3Z0M7Z0JBTUEsSUFEZTBnQyxRQUxmMWdDLE9BTTBCLDRCQURYMGdDLFNBTFhHOztVQVFKLElBRG9CQyxVQVBwQjlnQyxPQVErQiw0QkFEWDhnQyxXQVBoQkQ7O2NBU2dCRSxVQVRwQi9nQyxPQVNhbEMsTUFUYmtDO1VBVThCLGFBRGpCbEMsTUFDaUIsZUFEVmlqQyxhQVRoQkY7O2NBV2tCRyxVQVh0QmhoQyxPQVdlL0IsUUFYZitCO1VBYWlCLGFBRkYvQixRQUVFLGVBRksraUMsYUFYbEJIOztjQWNzQkksVUFkMUJqaEMsT0FjbUI1QixRQWRuQjRCO1VBZ0JxQixhQUZGNUIsUUFFRSxlQUZLNmlDLGFBZHRCSjs7Y0FpQmtCSyxVQWpCdEJsaEMsT0FpQmV6QixRQWpCZnlCO1VBbUJpQixhQUZGekIsUUFFRSxlQUZLMmlDLGFBakJsQkw7O2NBb0JvQk0sU0FwQnhCbmhDLE9Bb0Jlb2hDLFVBcEJmcGhDO1VBVDRCLEdBNkJKbWhDLFNBM0JYLFNBMkJXQSxvQkEzQm5CRTtVQThCSyxpQ0FIS0QsZ0JBcEJYUDs7VUF5QkosSUFEYVMsVUF4QmJ0aEMsT0F5QndCLDRCQURYc2hDLFdBeEJUVDs7Y0EwQnlCL2hDLE1BMUI3QmtCLE9BMEJvQnVoQyxVQTFCcEJ2aEM7d0JBMEJvQnVoQyxVQUFTemlDLE1BMUJ6QitoQzs7Y0E0QjJCN2hDLFFBNUIvQmdCLE9BNEJzQndoQyxVQTVCdEJ4aEM7d0JBNEJzQndoQyxVQUFTeGlDLFFBNUIzQjZoQzs7Y0FpQzhCbmhDLFNBakNsQ00sT0FpQ3VCTCxVQWpDdkJLO3dCQWlDdUJMLFVBQVdELFNBakM5Qm1oQztpQkFvQ0osSUFEeUJoaEMsUUFuQ3pCRyxPQW9DQSxjQUR5QkgsUUFuQ3JCZ2hDLE1Bc0NpQzthQTBHckNZLHdCQUF3Qi9pQyxPQUMxQixhQUQwQkEsY0FPWDthQTZCYmdqQyxjQUFjQztNQUErQiw4QkFBL0JBLFdBQXVEO2FBR3JFQyxrQkFBa0J6OEIsSUFBSTA4QjtNQUN4QjtnQ0FEb0IxOEI7T0FDcEIsUUFEb0JBLFNBQUkwOEI7T0FDeEIsS0FBSTk5QixNQUNBKzlCO01BREo7UUFHZ0I7dUJBSFovOUIsWUFDQSs5QjtTQUdGLDBCQURJOWpCO1FBRUosS0FOa0I3WSxTQUtkNDhCLFVBSkZoK0I7UUFLRixTQURJZytCO1FBRFU7OztNQVBZLFdBVzNCO2FBR0NDLGdCQUFnQjc4QixJQUFJL0I7TUFDdEIsa0JBRGtCK0I7TUFFbEIsZUFGa0JBLGNBQUkvQjtNQUV0QixTQUZrQitCO01BRWxCLFFBQ3NCO2FBR3BCODhCLGtCQUFrQjk4QixJQUFJekU7TUFDeEIsSUFBSXdoQyxRQUFKLHNCQUR3QnhoQztNQUV4QixrQkFGb0J5RSxJQUNoQis4QjtNQUVKLE9BSHdCeGhDLElBQUp5RSxjQUNoQis4QjtNQUVKLFNBSG9CLzhCLFNBQ2hCKzhCO01BRUosUUFDNEI7YUFHMUJDLGdCQUFnQmg5QixLQUNsQixrQkFEa0JBLGdCQUNrQjthQUtsQ2k5QixjQUFjdGtDO01BQVEsT0FBUkE7O2VBRW9COztlQUF3Qjs7Z0JBQ2hEOztnQkFBd0I7Ozs7Z0JBRkU7Z0JBQzFCLFdBQzJCO2FBSXJDdWtDLGNBQWdCN1YsSUFBUTl0QjtNQUFRLEdBQWhCOHRCLElBQUcsUUFBSEEsVUFBR0MsYUFBSDZWO01BQWdCLE9BQVI1akM7ZUFDYjtlQUFpQjtlQUNqQjtlQUFpQjtlQUNqQjtlQUFpQixPQUhaNGpDO2VBSUw7ZUFBaUI7Z0JBQ2hCLFVBQUc7YUF5RWZDLGFBQWFwOUIsSUFBSXE5QjtNQUFRLE9BQVJBO2VBQ1IsdUJBRElyOUI7ZUFFSjtnQkFDQSx1QkFISUEsUUFHbUI7YUFHaENzOUIsb0JBQW9CdDlCLElBQUl1OUI7TUFDMUIsT0FEMEJBLFNBQ1QsZ0JBREt2OUIsUUFBSXU5QixRQUNjO2FBSXRDQyxlQUFleDlCLElBQUl1N0I7TUFBVSxHQUFWQTtRQUVMLElBQVRDLE1BRmNEO1FBRWlCLHlCQUZyQnY3QixJQUVxQiw0QkFBL0J3N0I7TUFERyxRQUNpRDthQUt6RGlDLGVBQ0F6OUIsSUFBSXpIO01BQU8sVUFBUEE7T0FDVTs7UUFESCxTQUFQQTtjQUVnQjhDLEVBRmhCOUMsT0FFUzhrQyxNQUZUOWtDO1VBR0osYUFIQXlILElBRWFxOUI7VUFFUyx5QkFKdEJyOUIsSUFJc0IsNEJBRkYzRTtRQUlwQixJQURZcWlDLFFBTFJubEM7UUFNSixhQU5BeUgsSUFLWTA5QjtRQUNaLHVCQU5BMTlCLFFBT3VCO2FBR3ZCMjlCLGlCQUNFMzlCLElBQUl2SDtNQUFRLFVBQVJBLGtCQU1OLE9BTk1BLEtBTU4sa0JBTkV1SDtVQUVZM0UsRUFGUjVDO01BR04sZ0JBSEV1SDtNQUlvQix5QkFKcEJBLElBSW9CLDRCQUZSM0UsR0FJWTthQUsxQnVpQyxrQkFBa0I1OUIsSUFBSXJIO01BQVEsT0FBUkE7O2VBQ0gsdUJBRERxSDs7ZUFFQyx1QkFGREE7Ozs7OztnQkFJaEIsdUJBSmdCQTtnQkFLK0IsU0FBRTthQVluRDY5QixrQkFBa0I3OUIsSUFBSXU5QixTQUFTNWtDLE1BQU1KLElBQUlFLEtBQUt3RjtNQUNoRCxnQkFEb0IrQjtNQUVwQixvQkFGb0JBLElBQUl1OUI7TUFHeEIsa0JBSG9CdjlCLElBQWFySDtNQUlqQyxlQUpvQnFILElBQW1Cekg7TUFLdkMsaUJBTG9CeUgsSUFBdUJ2SDtNQU0zQyxnQkFOb0J1SCxJQUE0Qi9CO01BTzVCLHVCQVBBK0IsSUFPQSxjQVBhckgsT0FPUTthQUt2Q21sQyxrQkFBa0I5OUIsSUFBSXpHO01BQ3hCLE9BRHdCQTs7ZUFFTixnQkFGRXlHO2dCQUdGLGdCQUhFQTtNQUtwQixZQUx3QnpHLFNBTVYsZ0JBTk15RyxTQVFlO2FBYWpDKzlCLHlCQUF5Qm5vQztNQUFpQixVQUFqQkE7T0FBaUIsT0FBakJBO2dCQUNEO2dCQUNBO2dCQUVBO2dCQUNBO2dCQUNBO2dCQUVBO2lCQUNBOztPQVRrQixPQUFqQkE7Z0JBR0QsSUFBakI2RCxJQUhrQjdELGtCQUdELE9BQWpCNkQ7Z0JBSWlCLElBQVp1a0MsTUFQYXBvQyxrQkFPRCxPQUFab29DO2lCQUdJLElBQUwvL0IsRUFWY3JJLGtCQVVILDJCQUFYcUksSUFBNEI7YUFLdkNnZ0Msb0JBQW9CaitCLElBQUl0RztNQUFNLGNBQU5BLElBQ2pCLGtCQURhc0csWUFFZixnQkFGZUEsSUFBSXRHLElBRUk7YUFHNUJ3a0Msc0JBQXNCbCtCLElBQUl2RztNQUM1QiwrQkFENEJBLGFBQzVCOzs7UUFDRTs4QkFGc0J1RyxJQUVFLGdCQUZFdkcsSUFDNUI1QztVQUNFLFNBREZBOzs7Y0FFSTthQU1Fc25DLGFBRUpuK0IsSUFBSXJHO01KaGZULElJZ2ZTRTtNQUFTO2lCQUFUQTtRQXlCWTs7UUF6QkgsT0FBVEE7O2VBQ0k5QyxLQURKOEM7V0FDaUIsa0JBRHJCbUc7ZUFBSW5HLFFBQ0k5Qzs7O2VBQ0VDLE9BRk42QztXQUVpQixrQkFGckJtRztlQUFJbkcsUUFFTTdDOzs7ZUFDSEMsT0FISDRDO1dBR2lCLGtCQUhyQm1HO2VBQUluRyxRQUdHNUM7OztlQUNFQyxPQUpMMkM7V0FJaUIsa0JBSnJCbUc7ZUFBSW5HLFFBSUszQzs7O2VBQ0lDLE9BTFQwQztXQUtpQixrQkFMckJtRztlQUFJbkcsUUFLUzFDOzs7ZUFDSkMsT0FOTHlDO1dBTWlCLGtCQU5yQm1HO2VBQUluRyxRQU1LekM7OztlQUNBQyxPQVBMd0M7V0FPaUIsa0JBUHJCbUc7ZUFBSW5HLFFBT0t4Qzs7O2VBQ0RDLE9BUkp1QztXQVFpQixrQkFSckJtRztlQUFJbkcsUUFRSXZDOzs7ZUFVa0JDLE9BbEJ0QnNDLFdBa0JXdWtDLFVBbEJYdmtDO1dBbUJKLGtCQW5CQW1HO1dBbUI0QixhQW5CNUJBLElBa0JlbytCO1dBRWYsa0JBcEJBcCtCO2VBQUluRyxRQWtCc0J0Qzs7O2VBR0tFLE9BckIzQm9DLFdBcUJhd2tDLFlBckJieGtDO1dBc0JKLGtCQXRCQW1HO1dBc0I0QixhQXRCNUJBLElBcUJpQnErQjtXQUVqQixrQkF2QkFyK0I7ZUFBSW5HLFFBcUIyQnBDOzs7ZUFadEJFLE9BVExrQztXQVNpQixrQkFUckJtRztlQUFJbkcsUUFTS2xDOzs7ZUFDQUMsUUFWTGlDO1dBVWlCLGtCQVZyQm1HO2VBQUluRyxRQVVLakM7OztlQUNGQyxRQVhIZ0M7V0FXaUIsa0JBWHJCbUc7ZUFBSW5HLFFBV0doQzs7O2VBQ0dDLFFBWk4rQjtXQVlpQixrQkFackJtRztlQUFJbkcsUUFZTS9COzs7ZUFFUUMsUUFkZDhCO1dBZUosa0JBZkFtRztlQUFJbkcsUUFjYzlCO29CQVdBO2FBSWR1bUM7Z0JBSWEsSUFBTDVpQyxXQUFTLCtCQUFUQSxPQURHLFFBQzJCO2FBa0gxQzZpQyxjQUFjN0M7TUFDTixJQWhIRzE3QixJQWdISDtNQS9HVixTQUFRdytCLFFBRUo5QyxJQUFJNkI7WUFBSmtCLFVBQUlDOztRQUFZO21CQUFoQkQ7VUFxR2lCOztVQXJHRCxPQUFoQkE7O2lCQTBCSzFuQyxLQTFCTDBuQzthQTJCQSxnQkE5QlN6K0I7YUE4QmdCLG9CQTlCaEJBLElBR0wwK0I7YUE0QkosZ0JBL0JTMStCO2lCQUdUeStCLE1BMEJLMW5DLEtBMUJEMm5DOzs7aUJBNkJNMW5DLE9BN0JWeW5DO2FBOEJBLGdCQWpDU3orQjthQWlDZ0Isb0JBakNoQkEsSUFHTDArQjthQStCSixnQkFsQ1MxK0I7aUJBR1R5K0IsTUE2QlV6bkMsT0E3Qk4wbkM7OztpQkFDU3puQyxPQURid25DLFNBQ1FsbUMsSUFEUmttQzthQUVBLGdCQUxTeitCO2FBS2dCLG9CQUxoQkEsSUFHTDArQjthQUdKLGVBTlMxK0IsSUFJRHpIO2FBRWdCLGdCQU5meUg7aUJBR1R5K0IsTUFDYXhuQyxPQURUeW5DOzs7aUJBS2N4bkMsT0FMbEJ1bkMsU0FLYWptQyxNQUxiaW1DO2FBTUEsZ0JBVFN6K0I7YUFTZ0Isb0JBVGhCQSxJQUdMMCtCO2FBT0osZUFWUzErQixJQVFJeEg7YUFFVyxnQkFWZndIO2lCQUdUeStCLE1BS2tCdm5DLE9BTGR3bkM7OztpQkFVbUJ2bkMsT0FWdkJzbkMsU0FVaUJobUMsS0FWakJnbUMsU0FVWS9sQyxNQVZaK2xDLFNBVUs5bEMsTUFWTDhsQzthQS9HSixnQkE0R2F6K0I7YUEzR2Isb0JBMkdhQSxJQUdMMCtCO2FBN0dSLGtCQTBHYTErQixJQWFKckg7YUF0SFQsZUF5R2FxSCxJQWFHdEg7YUFySGhCLGlCQXdHYXNILElBYVF2SDthQXBIRCxnQkF1R1B1SCxJQXZHTyxjQW9IWHJIO2lCQVZMOGxDLE1BVXVCdG5DLE9BVm5CdW5DOzs7O2NBYXFCdG5DLE9BYnpCcW5DO2NBYW1CN2xDLE9BYm5CNmxDO2NBYWM1bEMsTUFiZDRsQztjQWFPM2xDLFFBYlAybEM7YUFjQSxrQkFqQlN6K0IsSUFHTDArQixXQWFHNWxDLFFBQU9ELE1BQUtEO2lCQWJuQjZsQyxNQWF5QnJuQyxPQWJyQnNuQzs7OztjQWdCeUJybkMsT0FoQjdCb25DO2NBZ0J1QjFsQyxPQWhCdkIwbEM7Y0FnQmtCemxDLE1BaEJsQnlsQztjQWdCV3hsQyxRQWhCWHdsQzthQWlCQSxrQkFwQlN6K0IsSUFHTDArQixXQWdCT3psQyxRQUFPRCxNQUFLRDtpQkFoQnZCMGxDLE1BZ0I2QnBuQyxPQWhCekJxbkM7Ozs7Y0FtQnFCcG5DLE9BbkJ6Qm1uQztjQW1CbUJ2bEMsT0FuQm5CdWxDO2NBbUJjdGxDLE1BbkJkc2xDO2NBbUJPcmxDLFFBbkJQcWxDO2FBb0JBLGtCQXZCU3orQixJQUdMMCtCLFdBbUJHdGxDLFFBQU9ELE1BQUtEO2lCQW5CbkJ1bEMsTUFtQnlCbm5DLE9BbkJyQm9uQzs7OztjQXNCcUJubkMsT0F0QnpCa25DO2NBc0JtQnBsQyxPQXRCbkJvbEM7Y0FzQmNubEMsTUF0QmRtbEM7Y0FzQk9sbEMsTUF0QlBrbEM7YUEvRUosZ0JBNEVheitCO2FBM0ViLG9CQTJFYUEsSUFHTDArQjthQTdFUixrQkEwRWExK0IsSUF5QkZ6RzthQWxHWCxlQXlFYXlHLElBeUJLMUc7YUFqR2xCLGlCQXdFYTBHLElBeUJVM0c7YUFoR0gsZ0JBdUVQMkcsSUF2RU8sZ0JBZ0dUekc7aUJBdEJQa2xDLE1Bc0J5QmxuQyxPQXRCckJtbkM7OztpQkFnQ09qbkMsT0FoQ1hnbkMsU0FnQ01qbEMsTUFoQ05pbEM7YUFpQ0EsZ0JBcENTeitCO2FBb0NnQixvQkFwQ2hCQSxJQUdMMCtCO2FBa0NKLGVBckNTMStCLElBbUNIeEc7YUFFa0IsZ0JBckNmd0c7aUJBR1R5K0IsTUFnQ1dobkMsT0FoQ1BpbkM7OztpQkFtREUvbUMsT0FuRE44bUM7YUFvREEsa0JBdkRTeitCO2lCQUdUeStCLE1BbURNOW1DOzs7aUJBSWVDLFFBdkRyQjZtQyxTQXVEZ0JobEMsSUF2RGhCZ2xDO2FBd0RBLHNCQTNEU3orQixJQTBET3ZHO2lCQXZEaEJnbEMsTUF1RHFCN21DOzs7aUJBR0ZDLFFBMURuQjRtQyxTQTBEY0UsTUExRGRGO2FBMkRBLG9CQTlEU3orQixJQTZESzIrQjtpQkExRGRGLE1BMERtQjVtQzs7O2lCQUlTQyxRQTlENUIybUMsU0E4RHFCOWtDLE1BOURyQjhrQyxTQThEWWxELFFBOURaa0Q7YUErREEsZ0JBbEVTeitCO2FBa0VnQixvQkFsRWhCQSxJQUdMMCtCO2FBZ0VKLGVBbkVTMStCLElBaUVHdTdCO2FBRWdCLGdCQW5FbkJ2N0I7YUFvRVQsYUFwRVNBLElBaUVZckc7YUFHRyxnQkFwRWZxRzthQW9Fd0MsZ0JBcEV4Q0E7aUJBR1R5K0IsTUE4RDRCM21DLFFBOUR4QjRtQzs7O2lCQW1FMEIzbUMsUUFuRTlCMG1DLFNBbUV1QjVrQyxRQW5FdkI0a0MsU0FtRWM5QyxVQW5FZDhDO2FBb0VBLGdCQXZFU3orQjthQXVFZ0Isb0JBdkVoQkEsSUFHTDArQjthQXFFSixlQXhFUzErQixJQXNFSzI3QjthQUVjLGdCQXhFbkIzN0I7YUF5RVQsYUF6RVNBLElBc0Vjbkc7YUFHQyxnQkF6RWZtRzthQXlFd0MsZ0JBekV4Q0E7aUJBR1R5K0IsTUFtRThCMW1DLFFBbkUxQjJtQzs7O2lCQW9DRTNrQyxRQXBDTjBrQzthQXFDQSxnQkF4Q1N6K0I7YUF3Q2dCLG9CQXhDaEJBLElBR0wwK0I7YUFzQ0osZ0JBekNTMStCO2lCQUdUeStCLE1Bb0NNMWtDLFFBcENGMmtDOzs7aUJBdUNFMWtDLFFBdkNOeWtDO2FBd0NBLGdCQTNDU3orQjthQTJDZ0Isb0JBM0NoQkEsSUFHTDArQjthQXlDSixnQkE1Q1MxK0I7aUJBR1R5K0IsTUF1Q016a0MsUUF2Q0Ywa0M7OztpQkF5RndCemtDLFFBekY1QndrQyxTQXlGZ0J2a0MsV0F6RmhCdWtDO2FBMEZBLHNCQTdGU3orQixJQTZGaUIseUJBRFY5RjtpQkF6RmhCdWtDLE1BeUY0QnhrQzs7O2lCQUdBRSxRQTVGNUJza0MsU0E0RmdCcmtDLFdBNUZoQnFrQztzQkE0RmdCcmtDO3lDQUVPNGpDO2VBQ3JCLGtCQWxHT2grQjtlQWtHcUIsa0JBbEdyQkEsSUFpR2NnK0I7OzJCQUZQNWpDLGNBSU93a0M7ZUFDckIsa0JBcEdPNStCO2VBb0dxQixrQkFwR3JCQSxJQW1HYzQrQjtpQkFoR3ZCSCxNQTRGNEJ0a0M7OztpQkE1Q3JCRSxRQWhEUG9rQzthQWlEQSxnQkFwRFN6K0I7YUFvRGdCLG9CQXBEaEJBLElBR0wwK0I7YUFrREosZ0JBckRTMStCO2lCQUdUeStCLE1BZ0RPcGtDLFFBaERIcWtDOzs7aUJBeUVnQ3BrQyxRQXpFcENta0MsU0F5RTBCbGtDLFNBekUxQmtrQyxTQXlFZWprQyxVQXpFZmlrQzthQTBFQSxnQkE3RVN6K0I7YUE2RWdCLG9CQTdFaEJBLElBR0wwK0I7YUEyRUosZUE5RVMxK0IsSUE0RU14RjthQXRTbkI7Y0E0Q0k4Rjt3QkFBV04sSUFBSW5KO2lCQUFVLElBR3pCb0gsRUFIeUIsWUFBVnBIO2lCQUFVLGNBR3pCb0g7MkJBRk8sZ0JBREkrQixRQUNKLGdCQURJQTtpQ0FHWC9COzZCQURPLGdCQUZJK0IsUUFFSixnQkFGSUE7NEJBR0osZ0JBSElBLElBR1gvQixFQUE2QjthQUVqQyxnQkF5S2ErQjthQTFOYjtjQW1ESzs4QkFtUHlCekY7a0JBbFByQixnQkFzS0l5RixRQXRLcUIsYUFrUEp6Rjs7Y0FyUzVCOzswQkFBSXVrQyxTQUFTN2dDO21CQUNpQzs4QkFEakNBO29CQUNlLFdBRGZBO29CQUVYLHlCQUZXQTttQkFFWDtvQkFDUTs4Q0FGSitnQztxQkFFSSxVQUE2QixvQkFGekJEOzs7O21CQURkLFdBR2dFO3dCQUg1REQ7Y0FBSjthQUlHLGdCQUFrQixnQkFxTlY5K0I7YUExTmIsSUFRa0JuSjs7YUFDaEI7a0JBRGdCQTtpQkFFWCx5QkFBbUIsWUFGUkE7bUJBR1QsUUFIU0E7aUJBS1Ysc0JBTFVBLEdBS1Y7O3FDQUNNLFdBNE1EbUo7OztxQkEzTUksUUFQQ25KOztpQkk4TVo7bUJKdE1HLElBQ1k0aEIsSUFUSDVoQjttQkFVYix5QkFBbUIsWUFESDRoQjtxQkFnQmpCLFdBeUxTelksSUF6TVF5WTtxQkFnQmpCLFFBaEJpQkEsWUFUSDVoQjs7bUJBUVQ7b0JBR0Msb0JBRlc0aEI7b0JBRVg7Ozs7c0JBRUosV0FxTU96WSxTQXJNUCxXQXFNT0E7Ozs7O3NCQW5NWSx5QkFBb0IsWUFOeEJ5WTt3QkFPZixXQWtNT3pZLElBek1ReVk7d0JBT2YsUUFQZUEsWUFUSDVoQjs7Ozs7O3FCQWtCRCx5QkFBb0IsWUFUaEI0aEI7dUJBVWYsV0ErTE96WSxJQXpNUXlZO3VCQVdmLFdBOExPelksSUF6TVF5WTt1QkFXZixRQVhlQSxZQVRINWhCOztxQkF1QlosTUFkZTRoQixZQWNmLElBZGVBLFlBbUJGd21CO3FCQUNqQjt1QkFBa0IsV0FEREEsT0FDQyxvQkFBb0IsWUFEckJBO3lCQU9mLFFBUGVBO3VCQUVmLFdBb0xTai9CLElBdExJb2I7dUJBR2IsV0FtTFNwYjt1QkFsTFQsV0FrTFNBLElBdExNaS9CO3VCQUlmLEdBSmVBLFdBS0MsUUFMREEsWUE1QkRwb0M7O2VBRGIsZ0JBQWtCLGdCQW1OVm1KO2VBdFFYNjhCLGdCQXNRVzc4QjttQkFHVHkrQixNQXlFb0Nua0MsUUF6RWhDb2tDOzs7aUJBNkV1QmprQyxRQTdFM0Jna0MsU0E2RWtCL2pDLFFBN0VsQitqQzthQThFQSxnQkFqRlN6K0I7YUFpRmdCLG9CQWpGaEJBLElBR0wwK0I7YUF0T29CLE9BbVROaGtDOzs7O2FBRWxCLGdCQWxGU3NGO2lCQUdUeStCLE1BNkUyQmhrQyxRQTdFdkJpa0M7OztpQkFpRlcvakMsUUFqRmY4akM7YUFrRkEsZ0JBckZTeitCO2FBcUZnQixvQkFyRmhCQSxJQUdMMCtCO2FBbUZKLHNCQXRGUzErQjtpQkFHVHkrQixNQWlGZTlqQyxRQWpGWCtqQzs7O2FBc0Z3QjtjQURSOWpDLFFBckZwQjZqQztjQXFGZTVqQyxJQXJGZjRqQztjQXNGNEIsdUNBRGI1akMsSUFBS0Q7Y0FDUTtjQXRGNUI2akM7Y0FBSUM7OzthQTJDVTtjQURJNWpDLFFBMUNsQjJqQztjQTBDUXpqQyxNQTFDUnlqQztjQTJDYyx5QkFETnpqQzs7YUFDTTttQkFBZDBmO2VBQ0U7aUNBL0NPMWE7aUJBK0NrQixvQkEvQ2xCQSxJQUdMMCtCO2lCQTZDRixnQkFoRE8xK0I7aUJBZ0RQLFNBRkYwYTs7O2FBQWMsSUEzQ2QrakIsTUEwQ2tCM2pDLFFBMUNkNGpDO3NCQXFHZTtNQXZHdkIsUUE4R2dCaEQ7YUF4V2RzQixnQkF5UFdoOUIsSUFrSE07YUFXYm8vQjs7T0F1Qlk7O09BdkJaO2dCQU1ZLElBQVJyb0MsY0FBZ0IsZUFBaEJBO2dCQU9VLElBQVJDLGdCQUFrQixlQUFsQkE7Z0JBTkssSUFBUkMsZ0JBQWUsZUFBZkE7Z0JBQ1UsSUFBUkMsZ0JBQWlCLGVBQWpCQTtnQkFFWSxJQUFSQyxnQkFBcUIsZUFBckJBO2dCQURJLElBQVJDLGdCQUFpQixlQUFqQkE7Z0JBRVEsSUFBUkMsZ0JBQWlCLGVBQWpCQTtnQkFDTyxJQUFSQyxnQkFBZ0IsZUFBaEJBO29CQU9XQyxnQkFBSkMsWUFDSSxVQURKQSxHQUNJLEtBREFEOztjQUVRRSxnQkFBTFUsYUFBTFQ7VUFDVSxVQURMUyxJQUFMVCxJQUNVLEtBREFEO2lCQU5WLElBQVJFLGdCQUFpQixnQkFBakJBO2lCQURRLElBQVJDLGlCQUFpQixnQkFBakJBO2lCQUVNLElBQVJDLGlCQUFlLGdCQUFmQTtpQkFDVyxJQUFSQyxpQkFBa0IsZ0JBQWxCQTtpQkFDZ0IsSUFBUkMsaUJBQTBCLGdCQUExQkEsVUFLVTthQWdINUJzbkMsTUFXRTNuQyxJQUFJUztNSm55Qlg7TUlteUJrQixVQUFYVDtpQkFBSVM7UUE4Q3dCOztlQTlDeEJBOzs7Ozs7OztrQkErQ2E7O09BL0NOLE9BQVhUOzs7b0JBQUlTOztvQkFDMEIsSUFBVG1uQyxNQURqQm5uQyxPQUNrQyxxQkFBakJtbkM7Ozs7Ozs7Ozs7Ozs4QkFEckI1bkM7b0JBQUlTOztvQkFFOEIsSUFBVG9uQyxRQUZyQnBuQyxPQUV3QyxxQkFBbkJvbkM7Ozs7Ozs7Ozs7Ozs4QkFGekI3bkM7b0JBQUlTOzs7O29CQUl3QixJQUFUcW5DLFFBSmZybkMsT0FJK0IscUJBQWhCcW5DOzs7Ozs7Ozs7Ozs7OEJBSm5COW5DO29CQUFJUzs7OztvQkFLNEIsSUFBVHNuQyxRQUxuQnRuQyxPQUtxQyxxQkFBbEJzbkM7Ozs7Ozs7Ozs7Ozs4QkFMdkIvbkM7b0JBQUlTOzs7O29CQU9vQyxJQUFUdW5DLFFBUDNCdm5DLE9BT2lELHFCQUF0QnVuQzs7Ozs7Ozs7Ozs7OzhCQVAvQmhvQztvQkFBSVM7Ozs7b0JBTTRCLElBQVR3bkMsUUFObkJ4bkMsT0FNcUMscUJBQWxCd25DOzs7Ozs7Ozs7Ozs7OEJBTnZCam9DO29CQUFJUzs7OztvQkFRNEIsSUFBVHluQyxRQVJuQnpuQyxPQVFxQyxxQkFBbEJ5bkM7Ozs7Ozs7Ozs7Ozs4QkFSdkJsb0M7b0JBQUlTOzs7O29CQUcwQixJQUFUMG5DLFFBSGpCMW5DLE9BR2tDLHFCQUFqQjBuQzs7Ozs7Ozs7Ozs7OzhCQUhyQm5vQztvQkFBSVM7Ozs7O2NBZ0N3QixJQURrQjJuQyxRQS9CMUMzbkMsT0ErQnFDNG5DLE1BL0JyQzVuQyxPQWdDd0IsZ0JBRGtCMm5DO2NBQ2pDLHFCQUQ0QkM7Ozs7Ozs7c0JBRXJCOzs7K0JBakNwQnJvQztvQkFBSVM7Ozs7OztjQXNDRztlQURvQjZuQyxRQXJDdkI3bkM7ZUFxQ2lCOG5DLEtBckNqQjluQztlQXFDVytuQyxLQXJDWC9uQztlQXNDRyxTQUFNLFdBREUrbkM7ZUFFRSxvQkFEZjFvQztlQUNlOztjQUNSLFdBREo2b0M7Y0FFSSxXQUZHRDtjQUdlLGVBTE5ILEtBS00sV0FMQUQ7Ozs7Ozs7dUJBTUw7OzttQkEzQ3RCdG9DO29CQUFJUztZQVU0QixJQUFUbW9DLFFBVm5Cbm9DLE9BVXFDLHNCQUFsQm1vQztVQUNSOzsrQkFYZjVvQztvQkFBSVM7Ozs7O3FCQWM0QixJQUFUb29DLFNBZG5CcG9DLE9BY3FDLHNCQUFsQm9vQzs7dUJBQ1I7OzsrQkFmZjdvQztvQkFBSVM7Ozs7OztxQkFrQndCLElBQVRxb0MsU0FsQmZyb0MsT0FrQitCLHNCQUFoQnFvQzs7dUJBQ047OzsrQkFuQmI5b0M7b0JBQUlTOzs7Ozs7O3FCQXNCOEIsSUFBVHNvQyxTQXRCckJ0b0MsT0FzQndDLHNCQUFuQnNvQzs7dUJBQ1Q7OzsrQkF2QmhCL29DO29CQUFJUzs7Ozs7Ozs7cUJBMkJOLElBRDJDdW9DLFNBMUJyQ3ZvQyxPQTJCWSxzQkFEeUJ1b0M7O3VCQUVqQjtNSS9TdEI7ZUorUmE7ZUFJQTtlQUlGO2VBSUc7ZUFLUTtlQUtKO2VBVUU7Z0JBSUwsOEJBQVk7YUF6SzNCUDs7UUFTSjs4QkFHYSxRQUFJO1NBSGpCLHFCQUVhLFFBQUk7U0FGakIscUJBQ2EsUUFBSTtRQURqQiwwQkFBYSxRQUFJOztPQVRiOztVQWNKOztXQUFxQixvQkFEYnBwQztXQUNhOzs7O2dDQUVHLFdBRmhCOHBDLE1BRWdCLFFBQWU7VUFGbEIsMEJBQ0csV0FEcEJDLE1BQ29CLFFBQWUsT0FEM0JGLEdBQUlEOztVQUtoQjs7V0FBcUIsc0JBRFgzcEM7V0FDVzs7OztnQ0FFRyxXQUZoQmlxQyxRQUVnQixRQUFlO1VBRmxCO2tDQUNHLFdBRHBCQyxRQUNvQixRQUFlOztrQkFEM0JGO2tCQUFJRDs7VUFLaEI7O1dBQXFCLHNCQURkOXBDO1dBQ2M7Ozs7Z0NBRUcsV0FGaEJvcUMsUUFFZ0IsUUFBZTtVQUZsQjtrQ0FDRyxXQURwQkMsUUFDb0IsUUFBZTs7a0JBRDNCRjtrQkFBSUQ7O1VBS2hCOztXQUFxQixzQkFEWmpxQztXQUNZOzs7O2dDQUVHLFdBRmhCdXFDLFFBRWdCLFFBQWU7VUFGbEI7a0NBQ0csV0FEcEJDLFFBQ29CLFFBQWU7O2tCQUQzQkY7a0JBQUlEOztVQVVoQjs7V0FBcUIsc0JBRFJwcUM7V0FDUTs7OztnQ0FFRyxXQUZoQjBxQyxRQUVnQixRQUFlO1VBRmxCO2tDQUNHLFdBRHBCQyxRQUNvQixRQUFlOztrQkFEM0JGO2tCQUFJRDs7VUFMaEI7O1dBQXFCLHNCQURadnFDO1dBQ1k7Ozs7Z0NBRUcsV0FGaEI2cUMsUUFFZ0IsUUFBZTtVQUZsQjtrQ0FDRyxXQURwQkMsUUFDb0IsUUFBZTs7a0JBRDNCRjtrQkFBSUQ7O1VBVWhCOztXQUFxQixzQkFEWjFxQztXQUNZOzs7O2dDQUVHLFdBRmhCZ3JDLFFBRWdCLFFBQWU7VUFGbEI7a0NBQ0csV0FEcEJDLFFBQ29CLFFBQWU7O2tCQUQzQkY7a0JBQUlEOztVQUtoQjs7V0FBcUIsc0JBRGI3cUM7V0FDYTs7OztnQ0FFRyxXQUZoQm1yQyxRQUVnQixRQUFlO1VBRmxCO2tDQUNHLFdBRHBCQyxRQUNvQixRQUFlOztrQkFEM0JGO2tCQUFJRDs7VUFpQ2hCOztXQUFxQixzQkFERGhyQztXQUNDOzs7O2dDQUVHLFdBRmhCc3JDLFFBRWdCLFFBQWU7VUFGbEI7a0NBQ0csV0FEcEJDLFFBQ29CLFFBQWU7O2tCQUQzQkY7a0JBQUlEOztVQUtLO1dBRE1sckM7V0FBTFU7V0FBTFQ7V0FDSSxzQkFETUQ7V0FDTjs7OztXQUNaLFNBQU0sS0FGRUMsS0FBS1M7V0FHRCxzQkFEakJYO1dBQ2lCOzs7O2dDQUlHLFdBSlIyckMsTUFJOEIsV0FOOUJKLFFBTThCLFFBQWU7V0FKeEMscUJBR0csV0FMWkMsUUFLa0MsV0FIbENJLE1BR2tDLFFBQWU7V0FIeEMscUJBRUcsV0FGaEJDLE1BRXNDLFdBSnRDSixRQUlzQyxRQUFlO1VBRnhDOztvQkFDRyxXQUhwQkMsUUFHMEMsV0FEMUNJLE1BQzBDLFFBQWU7Ozs7O1VBOUI3RDs7V0FBcUIsdUJBRFozckM7V0FDWTs7OztnQ0FFRyxXQUZoQjhyQyxRQUVnQixRQUFlO1VBRmxCO2tDQUNHLFdBRHBCQyxRQUNvQixRQUFlOztrQkFEM0JGO2tCQUFJRDs7VUFMaEI7O1dBQXFCLHVCQURaM3JDO1dBQ1k7Ozs7Z0NBRUcsV0FGaEJpc0MsU0FFZ0IsUUFBZTtVQUZsQjtrQ0FDRyxXQURwQkMsU0FDb0IsUUFBZTs7a0JBRDNCRjtrQkFBSUQ7O1VBVWhCOztXQUFxQix1QkFEZDlyQztXQUNjOzs7O2dDQUVHLFdBRmhCb3NDLFNBRWdCLFFBQWU7VUFGbEI7a0NBQ0csV0FEcEJDLFNBQ29CLFFBQWU7O2tCQUQzQkY7a0JBQUlEOztVQUtoQjs7V0FBcUIsdUJBRFhqc0M7V0FDVzs7OztnQ0FJRyxXQUpScXNDLFNBSVEsUUFBZTtXQUpsQixxQkFHRyxXQUhaQyxTQUdZLFFBQWU7V0FIbEIscUJBRUcsV0FGaEJDLFNBRWdCLFFBQWU7VUFGbEI7a0NBQ0csV0FEcEJDLFNBQ29CLFFBQWU7Ozs7O1VBS3ZDOztXQUFxQix1QkFESHZzQztXQUNHOzs7O2dDQUlHLFdBSlJ3c0MsU0FJUSxRQUFlO1dBSmxCLHFCQUdHLFdBSFpDLFNBR1ksUUFBZTtXQUhsQixxQkFFRyxXQUZoQkMsU0FFZ0IsUUFBZTtVQUZsQjtrQ0FDRyxXQURwQkMsU0FDb0IsUUFBZTs7O3dCQWdCdUI7YUF1TDlEQyx5QkFFRWxzQyxLQUFLa0I7TUFBUyxjQUFkbEIsMEJBQUtrQixrQkFHMEI7YUFiakNpckMsdUJBRUVyc0MsSUFBSW9CO01BQVMsY0FBYnBCLGlCQUFJb0IsWUFBSnBCLE9BQUlvQixlQUd5QjthQXJDL0JrckMsZ0JBR0E3cEMsTUFBTXJCO01BQVMsR0FBZnFCO1FBRXFCLElBQVQ4cEMsUUFGWjlwQyxTQUU0QiwyQkFBaEI4cEMsUUFGTm5yQztNQUNTLE9BRFRBLEtBRW1EO2FBOUR6RG9yQyxhQUVBcHJDO01KLzFCTCxJSSsxQktFO01BQVM7aUJBQVRBO1FBcUQ4Qjs7UUFyRHJCLE9BQVRBO2lCQTJCOEIsSUFBekI5QyxLQTNCTDhDLFdBMkJzQyx1QkFBakM5QztpQkFDeUIsSUFBcEJDLE9BNUJWNkMsV0E0QnNDLHVCQUE1QjdDOztlQTNCR0MsT0FEYjRDLFdBQ1F0QixJQURSc0I7V0FFc0MsOEJBRDlCdEIsT0FDOEIsYUFEekJ0Qjs7ZUFFS0MsT0FIbEIyQyxXQUdhckIsTUFIYnFCO1dBSXNDLDhCQUR6QnJCLFNBQ3lCLGFBRHBCdEI7O1dBSUo7WUFES0MsT0FObkIwQztZQU1hcEIsS0FOYm9CO1lBTVFuQixNQU5SbUI7WUFPYyxxQkFESzFDO1lBRUwsaUNBRkRzQixRQUNUdXNDO1dBQ1UsOEJBRk50c0MsTUFFSnVzQzs7V0FHVTtZQURPN3RDLE9BVnJCeUM7WUFVZWpCLE9BVmZpQjtZQVVVaEIsTUFWVmdCO1lBV2MsdUJBRE96QztZQUVQLG1DQUZDd0IsVUFDWHNzQztXQUNVLDhCQUZKcnNDLE1BRU5zc0M7O1dBR1U7WUFEVzl0QyxPQWR6QndDO1lBY21CZCxPQWRuQmM7WUFjY2IsTUFkZGE7WUFlYyx1QkFEV3hDO1lBRVgsbUNBRkswQixVQUNmcXNDO1dBQ1UsOEJBRkFwc0MsTUFFVnFzQzs7V0FHVTtZQURPL3RDLE9BbEJyQnVDO1lBa0JlWCxPQWxCZlc7WUFrQlVWLE1BbEJWVTtZQW1CYyx1QkFET3ZDO1lBRVAsbUNBRkM0QixVQUNYb3NDO1dBQ1UsOEJBRkpuc0MsTUFFTm9zQzs7V0FHVTtZQURPaHVDLE9BdEJyQnNDO1lBc0JlUixPQXRCZlE7WUFzQlVQLE1BdEJWTztZQXVCYyx1QkFET3RDO1lBRVAsbUNBRkM4QixVQUNYbXNDO1dBQ1UsOEJBRkpsc0MsTUFFTm1zQzs7ZUFLT2h1QyxPQTdCWG9DLFdBNkJNTCxNQTdCTks7V0E4QnNDLDhCQURoQ0wsU0FDZ0MsYUFEM0IvQjtrQkFZbUIsWUF6QzlCb0M7a0JBMEM4QixZQTFDOUJBO2tCQTJDOEIsWUEzQzlCQTs7ZUFvQ21CbEMsT0FwQ25Ca0MsV0FvQ2VyQyxHQXBDZnFDO1dBcUNtQixVQURKckMsR0FDSSxhQURBRzs7ZUFFRUMsUUF0Q3JCaUMsV0FzQ2lCZ3NDLEtBdENqQmhzQztXQXVDeUIsVUFEUmdzQyxVQUNRLGFBREpqdUM7a0JBUFMsSUFBeEJDLFFBL0JOZ0MsV0ErQnVDLHdCQUFqQ2hDO2tCQUN3QixJQUF4QkMsUUFoQ04rQixXQWdDdUMsd0JBQWpDL0I7a0JBaUJ3QixZQWpEOUIrQjs7V0FtRGtEO1lBRHRCOUIsUUFsRDVCOEI7WUFrRGdCTyxXQWxEaEJQO1lBbURrRCxrQkFEdEI5QjtXQXpEVixTQXlERnFDO29DQXhERXNoQyxrQkFJbEJxSixhQUprQnJKOzs7cUJBd0RGdGhDO2FBdkRFcWtDO2tCQUdsQnNHLGFBSGtCdEc7a0JJdlJkem1DO2tCSjhUMEIsSUFBdkIrQixRQWxDUEYsV0FrQ3dDLHdCQUFqQ0U7a0JBV3VCLElBQVRDLFFBN0NyQkgsV0E2Q3dDLHVCQUFuQkc7a0JBQ1MsSUFBVEMsUUE5Q3JCSixXQThDcUMsdUJBQWhCSTtrQkFDUyxJQUFmRSxRQS9DZk4sV0ErQ3NDLHVCQUF2Qk07O2VBQ0tFLFFBaERwQlIsV0FnRGVnQixJQWhEZmhCO1dBb0VXLFVBcEJJZ0I7WUFvQkosT0FwQklBO3lCQWhEZmhCLFFBZ0RvQlE7eUJBaERwQlIsUUFnRG9CUTtxQkFpQ2lDLHdCQWpDakNBOzBCQWhEcEJSLFFBZ0RvQlE7O1lBb0JULE9BcEJJUTt5QkFoRGZoQixRQWdEb0JRO3lCQWhEcEJSLFFBZ0RvQlE7eUJBaERwQlIsUUFnRG9CUTt5QkFoRHBCUixRQWdEb0JRO3lCQWhEcEJSLFFBZ0RvQlE7eUJBaERwQlIsUUFnRG9CUTt5QkFoRHBCUixRQWdEb0JRO3lCQWhEcEJSLFFBZ0RvQlE7eUJBaERwQlIsUUFnRG9CUTs7ZUFnQ2UsSUFBVjByQyxRQWhDVmxyQztlQWdDdUMsb0JBQTdCa3JDLFFBQTZCLGFBaENsQzFyQzswQkFoRHBCUixRQWdEb0JROzBCQWhEcEJSLFFBZ0RvQlE7O2VBZkZDLFFBakNsQlQsV0FpQ1FtQixNQWpDUm5CO1dBaUNvRCx1QkFBNUNtQixNQUE0QyxhQUFsQ1YsVUFvQndCOzs7O2FBMEQxQzByQyxhQUdBenRDLElBQUlvQjtNQUFTLFVBQWJwQjtPQUNpQixZQURib0I7O1FBQVMsU0FBYnBCO2NBRW9CMHRDLEVBRnBCMXRDLE9BRWE4a0MsTUFGYjlrQyxvQkFFYThrQyxNQUFPNEksR0FGaEJ0c0M7O2NBR3NCNUMsS0FIdEI0QyxTQUdRK2pDLFFBSFpubEMsb0JBR1ltbEMsU0FBYzNtQztRQUNyQixvQkFBbUI7YUFLeEJtdkMsYUFHQTN0QyxJQUFJRSxLQUFLa0I7TUFBcUIsdUJBQTlCcEIsSUFBU29CO01BQXFCLFVBQTFCbEI7Ozs7Z0JBSzBDMUIsYUFBWnlCLGlDQUFZekI7VUFFZjtZQU5PQyxnQkFBTDBCOzBCQUFLMUI7TUFEUixJQUdXQyxnQkFBTDRCLGVBQXRCc1IsRUFIVjFSO2dCQUdnQ0ksU0FBdEJzUixHQUEyQmxULE9BSVM7YUEwTWxEa3ZDLCtCQUlBL0gsVUFBVTFDLElBQUkvaEM7TUFBUyxVQUF2QnlrQztPQTBFNkIsNEJBMUVuQjFDLElBQUkvaEM7O09BQVMsT0FBdkJ5a0M7O29CQUFjemtDO1lBR1o7YUFGOEIwc0MsV0FEbEIxc0M7YUFDTjJzQyxlQURSbEk7YUFHRTs2Q0FGTWtJLGVBREU1SyxJQUNzQjJLO2FBRTlCOzt5QkFEaUJFLGtCQUFpQjlIOzs7b0JBRnRCOWtDO1lBT1o7YUFGa0M2c0MsYUFMdEI3c0M7YUFLSjhzQyxpQkFMVnJJO2FBT0U7O2dCQUZRcUksaUJBTEEvSyxJQUswQjhLO2FBRWxDOzt5QkFEaUJFLGtCQUFpQnZIOzs7b0JBTnRCeGxDO1lBV1o7YUFGNEJndEMsYUFUaEJodEM7YUFTUGl0QyxpQkFUUHhJO2FBV0U7O2dCQUZLd0ksaUJBVEdsTCxJQVNvQmlMO2FBRTVCOzt5QkFEaUJHLGtCQUFpQkQ7OztvQkFWdEJsdEM7WUFlWjthQUZnQ290QyxhQWJwQnB0QzthQWFMcXRDLGlCQWJUNUk7YUFlRTs7Z0JBRk80SSxpQkFiQ3RMLElBYXdCcUw7YUFFaEM7O3lCQURpQkcsa0JBQWlCRDs7O29CQWR0QnR0QztZQW1CWjthQUZ3Q3d0QyxhQWpCNUJ4dEM7YUFpQkR5dEMsaUJBakJiaEo7YUFtQkU7O2dCQUZXZ0osaUJBakJIMUwsSUFpQmdDeUw7YUFFeEM7O3lCQURpQkcsa0JBQWlCRDs7O29CQWxCdEIxdEM7WUF1Qlo7YUFGZ0M0dEMsYUFyQnBCNXRDO2FBcUJMNnRDLGlCQXJCVHBKO2FBdUJFOztnQkFGT29KLGlCQXJCQzlMLElBcUJ3QjZMO2FBRWhDOzt5QkFEaUJHLG1CQUFpQkQ7OztvQkF0QnRCOXRDO1lBMkJaO2FBRmdDZ3VDLGFBekJwQmh1QzthQXlCTGl1QyxrQkF6QlR4SjthQTJCRTs7Z0JBRk93SixrQkF6QkNsTSxJQXlCd0JpTTthQUVoQzs7eUJBRGlCRyxtQkFBaUJEOzs7b0JBMUJ0Qmx1QztZQStCWjthQUY4Qm91QyxhQTdCbEJwdUM7YUE2Qk5xdUMsa0JBN0JSNUo7YUErQkU7O2dCQUZNNEosa0JBN0JFdE0sSUE2QnNCcU07YUFFOUI7O3lCQURpQkcsbUJBQWlCRDs7O29CQTlCdEJ0dUM7O2FBbURjd3VDLGFBbkRkeHVDO2FBbURDeXVDLFdBbkREenVDO2FBa0RhMHVDLGtCQWxEM0JqSzthQWtEZWtLLGFBbERmbEs7WUFvREcsb0JBRllrSyxpQkFDQUY7YUFDdUM7WUFFcEQ7OztnQkFKeUJDLGtCQWxEakIzTSxJQW1Ea0J5TTthQUcxQjs7eUJBSGFDLFdBRUlJLG1CQUFpQkQ7OztvQkFyRHRCNXVDO1lBMkRtQzthQUZOOHVDLGFBekQ3Qjl1QzthQXlEZ0IrdUMsYUF6RGhCL3VDO2FBeURHZ3ZDLFdBekRIaHZDO2FBd0Q2Qml2QyxrQkF4RDNDeEs7YUF3RDhCeUssYUF4RDlCeks7YUF3RGlCMEssYUF4RGpCMUs7YUEyRGlELGtCQUZoQ3VLO1lBRWQsb0JBQVUsVUFISUc7YUFJWjtZQUQ0QyxZQUVBLFVBSm5CSjtZQUkzQixvQkFBVSxVQUxpQkc7YUFNekI7WUFINEM7YUFJaEMsa0JBQU0sS0FOTkYsWUFBYUQ7YUFPWCxzQkFEZnJLO2FBQ2U7O1lBQ1IsV0FESmdDO1lBRUksV0FGR0Q7WUFMbUM7YUFTL0M7O2dCQUFpQyxVQVpRd0ksbUJBeERqQ2xOLElBeURpQytNO2FBV3pDOztZQUc4Qjt1QkFkZkUsV0FBYUQsYUFjRSxLQUpiTTtvQkFBaUJEOzs7b0JBbkV0QnB2QztZQW1DWjthQUZnQ3N2QyxhQWpDcEJ0dkM7YUFpQ0x1dkMsa0JBakNUOUs7YUFtQ0U7O2dCQUZPOEssa0JBakNDeE4sSUFpQ3dCdU47YUFFaEM7OzBCQURpQkcsbUJBQWlCRDs7O29CQWxDdEJ4dkM7WUF1Q1o7YUFGZ0MwdkMsY0FyQ3BCMXZDO2FBcUNMMnZDLGtCQXJDVGxMO2FBdUNFOztnQkFGT2tMLGtCQXJDQzVOLElBcUN3QjJOO2FBRWhDOzswQkFEaUJHLG1CQUFpQkQ7OztvQkF0Q3RCNXZDO1lBMkNaO2FBRmtDOHZDLGNBekN0Qjl2QzthQXlDSit2QyxrQkF6Q1Z0TDthQTJDRTs7Z0JBRlFzTCxrQkF6Q0FoTyxJQXlDMEIrTjthQUVsQzs7MEJBRGlCRyxtQkFBaUJEOzs7b0JBMUN0Qmh3QztZQStDWjthQUZrRGt3QyxjQTdDdENsd0M7YUE2Q0ltd0Msa0JBN0NsQjFMO2FBK0NFOztnQkFGZ0IwTCxrQkE3Q1JwTyxJQTZDMENtTzthQUVsRDs7MEJBRGlCRyxtQkFBaUJEOzs7TUE2Qi9CLG1CQUFtQjthQXpReEIzRCxnQkFNRTFLLElBNElNL2hDO01BNUlPLFVBQWIraEM7T0FtSDJCLFlBeUJyQi9oQzs7T0E1SU8sT0FBYitoQzs7b0JBNElNL2hDO1lBMUkyQjthQURaMHNDLFdBMklmMXNDO2FBM0lIc3dDLFNBREh2TzthQUVpQyxzQkFEOUJ1TyxTQUFrQjVEO2FBQ1k7O3lCQUFoQjVILE9BQU01a0M7OztvQkEwSWpCRjtZQXZJMkI7YUFEUDZzQyxhQXdJcEI3c0M7YUF4SUV1d0MsV0FKUnhPO2FBS2lDLHdCQUR6QndPLFdBQWtCMUQ7YUFDTzs7eUJBQWhCckgsT0FBTXVHOzs7VUFHbkI7V0FET3lFLFdBUFh6TztXQU9NbmpDLElBUE5takM7V0FRSSxxQkFERW5qQyxJQXFJQW9CO1dBcElGOzs7WUFFSjs7YUFBbUMsd0JBSHhCd3dDLFdBRXVCeEQ7YUFDQzs7OEJBQWhCRSxPQUFNbEI7VUFFRzs7VUFHeEI7V0FEWXlFLFdBZGhCMU87V0FjV2xqQyxNQWRYa2pDO1dBZUkscUJBRE9sakMsTUE4SExtQjtXQTdIRjs7O1lBRUo7O2FBQW1DLHdCQUhuQnl3QyxXQUVrQnJEO2FBQ0M7OzhCQUFoQkUsT0FBTXJCO1VBRUc7O1VBR3hCO1dBRGlCeUUsV0FyQnJCM087V0FxQmVqakMsS0FyQmZpakM7V0FxQlVoakMsTUFyQlZnakM7V0FxQkcvaUMsTUFyQkgraUM7V0FzQkkscUJBRE1oakMsTUFBS0QsS0F1SFRrQjtXQXRIRjs7O1lBRStCO2FBREV3dEM7YUFBYnZ1QzthQUNXLHdCQUhkeXhDLFdBRWdCbEQ7YUFDRjs7eUJBSGhDeHVDLFdBRXFCQyxPQUNMeXVDLE9BQU12QjtVQUVNOztVQUczQjtXQURtQndFLFdBNUJ2QjVPO1dBNEJpQjNpQyxPQTVCakIyaUM7V0E0Qlk3aUMsTUE1Qlo2aUM7V0E0Qks1aUMsUUE1Qkw0aUM7V0E2QkkscUJBRFE3aUMsTUFBS0UsT0FnSFhZO1dBL0dGOzs7WUFFK0I7YUFESTR0QzthQUFmcnVDO2FBQ1csd0JBSFpveEMsV0FFZ0IvQzthQUNKOzt5QkFIOUJ6dUMsYUFFbUJJLE9BQ0x1dUMsT0FBTTFCO1VBRU07O1VBRzNCO1dBRHVCd0UsV0FuQzNCN087V0FtQ3FCcmlDLE9BbkNyQnFpQztXQW1DZ0IxaUMsTUFuQ2hCMGlDO1dBbUNTemlDLFFBbkNUeWlDO1dBb0NJLHFCQURZMWlDLE1BQUtLLE9BeUdmTTtXQXhHRjs7O1lBRStCO2FBRFFndUM7YUFBbkI2QzthQUNXLHlCQUhSRCxXQUVnQjVDO2FBQ1I7O3lCQUgxQjF1QyxhQUVldXhDLE9BQ0wzQyxPQUFNNEM7VUFFTTs7VUFHM0I7V0FEbUJDLFdBMUN2QmhQO1dBMENpQmlQLE9BMUNqQmpQO1dBMENZdmlDLE1BMUNadWlDO1dBMENLdGlDLFFBMUNMc2lDO1dBMkNJLHNCQURRdmlDLE1BQUt3eEMsT0FrR1hoeEM7V0FqR0Y7OztZQUUrQjthQURJb3VDO2FBQWY2QzthQUNXLHlCQUhaRixXQUVnQjNDO2FBQ0o7O3lCQUg5QjN1QyxhQUVtQnd4QyxPQUNMM0MsT0FBTTRDO1VBRU07O1VBRzNCO1dBRG1CQyxXQWpEdkJwUDtXQWlEaUJxUCxPQWpEakJyUDtXQWlEWXBpQyxNQWpEWm9pQztXQWlES25pQyxNQWpETG1pQztXQWtESSxzQkFEUXBpQyxNQUFLeXhDLE9BMkZYcHhDO1dBMUZGOzs7WUFFK0I7YUFESXd1QzthQUFmNkM7YUFDVyx5QkFIWkYsV0FFZ0IzQzthQUNKOzt5QkFIOUI1dUMsV0FFbUJ5eEMsT0FDTHpDLE9BQU0wQztVQUVNOztVQUczQjtXQURLQyxXQXhEVHhQO1dBd0RJbGlDLE1BeERKa2lDO1dBeURJLHNCQURBbGlDLE1Bb0ZFRztXQW5GRjs7O1lBRUo7O2FBQW1DLHlCQUgxQnV4QyxXQUV1QnpDO2FBQ0c7OzhCQUFoQk0sT0FBTW9DO1VBRUc7O1VBR0s7V0FEN0JDLFdBL0RKMVA7V0FnRWlDLHlCQUQ3QjBQLFdBNkVFenhDO1dBNUUyQjs7d0JBQWhCd3ZDLFFBQU1rQzs7VUFJVTtXQURkQyxZQW5FbkI1UDtXQW1FY2ppQyxJQW5FZGlpQztXQW9FaUMseUJBRGQ0UCxZQXlFYjN4QztXQXhFMkI7O3dCQURuQkYsSUFDRzh2QyxRQUFNZ0M7O1VBR1U7V0FEaEJDLFlBdEVqQjlQO1dBc0VZaGlDLElBdEVaZ2lDO1dBdUVpQyx5QkFEaEI4UCxZQXNFWDd4QztXQXJFMkI7O3dCQURyQkQsSUFDS2l3QyxRQUFNOEI7O29CQXFFakI5eEM7O2FBakVtQnN2QyxhQWlFbkJ0dkM7YUFqRU95a0MsVUFpRVB6a0M7YUFsRXdCK3hDLFlBMUU5QmhRO2FBMEVtQjJDLFlBMUVuQjNDO2FBMEVVSCxRQTFFVkc7WUE0RUMsb0JBRmtCMkMsZ0JBQ05EO2FBQ3FDO1lBQ2pCO3NDQUhIc04sWUFDTHpDO2FBRVE7OzBCQUh2QjFOLFFBQ0c2QyxVQUVJMkwsUUFBTTRCOzs7b0JBK0RqQmh5QztZQTNEd0M7YUFETjB2QyxjQTREbEMxdkM7YUE1RFNpeUMsV0E0RFRqeUM7YUE3RDBCa3lDLFlBL0VoQ25RO2FBK0VxQm9RLFlBL0VyQnBRO2FBK0VZQyxVQS9FWkQ7YUFpRjhDLGtCQUQvQmtRO1lBQ2Qsb0JBQVUsVUFGVUU7YUFHckI7WUFEOEM7YUFHOUMseUJBTGdDRCxZQUtQLFVBSmV4QzthQUl4Qzs7MEJBTFkxTixVQUNHaVEsV0FHRUksUUFBTUQ7OztvQkF5RGpCcHlDO1lBbkQyQjthQURWOHZDLGNBb0RqQjl2QzthQXBERnN5QyxZQXhGSnZRO2FBeUZpQyx5QkFEN0J1USxZQUFtQnhDO2FBQ1U7OzBCQUFoQjBDLFFBQU1EOzs7b0JBbURqQnZ5QztZQWhEMkI7YUFEVmt3QyxjQWlEakJsd0M7YUFqREZ5eUMsWUEzRkoxUTthQTRGaUMseUJBRDdCMFEsWUFBbUJ2QzthQUNVOzswQkFBaEJ5QyxRQUFNRDs7O1VBS1U7V0FESEUsWUFoRzlCN1E7V0FnR2M5bEMsZUFoR2Q4bEM7V0FpR2lDLHlCQURINlEsWUE0Q3hCNXlDO1dBM0MyQjs7d0JBRG5CL0QsZUFDRzYyQyxRQUFNRDs7Y0FFT0UsWUFuRzlCaFIsT0FtR2NpUixlQW5HZGpSO1VBNEg0QixTQXpCZGlSO1lBMkJtQjtzQkEzQm5CQTthQTBCUTNPO2FBQU4zbEM7YUFDaUIseUJBRGpCQSxLQWVWc0I7YUFkMkI7O2FBQ0EseUJBNUJIK3lDLFlBMkJQeDBDO2FBQ1U7O2dDQURoQkksS0FESzBsQyxRQUVMNk8sTUFBTUQ7VUFHVTtvQkEvQm5CRDtXQThCUS9OO1dBQU5rTztXQUNpQix5QkFEakJBLE9BV1ZuekM7V0FWMkI7O1dBQ0EseUJBaENIK3lDLFlBK0JQSztXQUNVOzs4QkFEaEJDLE9BREtwTyxRQUVMc08sUUFBTUQ7O29CQVNqQnR6QztZQXBDMkI7YUFEUnd6QyxjQXFDbkJ4ekM7YUFyQ0R5ekMsWUF2R0wxUjthQXdHaUMseUJBRDVCMFIsWUFBb0JEO2FBQ1E7OzBCQUFoQkcsUUFBTUQ7OztvQkFvQ2pCMXpDO1lBakMyQjthQURzQjR6QyxjQWtDakQ1ekM7YUFsQzRCNnpDLFlBMUdsQzlSO2FBMEd3Qm5oQyxTQTFHeEJtaEM7YUEwR2FsaEMsVUExR2JraEM7YUEyR2lDLHlCQURDOFIsWUFBcUJEO2FBQ3RCOzswQkFEcEIveUMsVUFBV0QsU0FDUG16QyxRQUFNRDs7O29CQWlDakI5ekM7WUE5QjJCO2FBRFVnMEMsY0ErQnJDaDBDO2FBL0JtQmkwQyxZQTdHekJsUzthQTZHZ0JoaEMsUUE3R2hCZ2hDO2FBOEdpQyx5QkFEUmtTLFlBQWtCRDthQUNWOzswQkFEakJqekMsUUFDQ296QyxRQUFNRDs7O2NBRUw5MkMsS0FoSGxCMmtDLE9BZ0hhN2dDLElBaEhiNmdDO1VBNEllLFVBNUJGN2dDO1dBNEJFLE9BNUJGQTtvQkE2QnVCLDhCQTdCdkJBLElBQUs5RCxLQTRCWjRDO29CQUU4Qiw4QkE5QnZCa0IsSUFBSzlELEtBNEJaNEM7O2NBc0JVLFVBdEJWQTtnQkF5Qk47K0JBekJNQTtpQkF5QjZCLHlCQXJEakI1QyxLQW9EQWkzQztpQkFDaUI7O2dDQUFoQkUsUUFBTUQ7Y0FFcEI7cUJBZCtCLDhCQXpDdkJwekMsSUFBSzlELEtBNEJaNEM7O1dBQVMsT0E1QkZrQjtvQkErQnVCLDhCQS9CdkJBLElBQUs5RCxLQTRCWjRDO29CQUk4Qiw4QkFoQ3ZCa0IsSUFBSzlELEtBNEJaNEM7b0JBSzhCLDhCQWpDdkJrQixJQUFLOUQsS0E0Qlo0QztvQkFNOEIsOEJBbEN2QmtCLElBQUs5RCxLQTRCWjRDO29CQU84Qiw4QkFuQ3ZCa0IsSUFBSzlELEtBNEJaNEM7b0JBUThCLDhCQXBDdkJrQixJQUFLOUQsS0E0Qlo0QztvQkFTOEIsOEJBckN2QmtCLElBQUs5RCxLQTRCWjRDO29CQVU4Qiw4QkF0Q3ZCa0IsSUFBSzlELEtBNEJaNEM7O2tCQWNxQncwQyxZQTFDZHR6QyxPQTBDSytnQyxVQTFDTC9nQztxQkEwRGZrekM7MEJBaEJvQm5TLFVBQVN1UyxhQTFDVHAzQyxLQTRCWjRDOztjQWtCTjtlQUY2QnkwQyxZQTVDaEJ2ekM7ZUE0Q09naEMsVUE1Q1BoaEM7ZUE4Q2Isb0NBRjZCdXpDLFlBNUNYcjNDLEtBNEJaNEM7ZUFrQk47Ozs7K0JBRm9Ca2lDLFVBQ0gwUyxhQUEyQkQsUUFBTUQ7cUJBTmQsOEJBdkN2Qnh6QyxJQUFLOUQsS0E0Qlo0QztxQkFZOEIsOEJBeEN2QmtCLElBQUs5RCxLQTRCWjRDOztNQXZCSCxtQkFBbUI7YUFxRHhCbzBDLHVCQUtFbHpDLElBQUk2Z0MsSUFBSS9oQztNQUN1QiwwQkFEM0IraEMsSUFBSS9oQyxPQUN1QjtvQkFEL0JrQixJQUNlNGpDLE9BQU01a0MsUUFDd0I7YUFqTTNDMjBDLFlBTUY5UyxJQUFJL2hDO01BQWUseUJBQW5CK2hDLElBQUkvaEM7TUFBZSxnQ0FDaUIsSUFBdkI4a0MsY0FBdUIsT0FBdkJBO01BQ1YsbUJBQW1CO2FBcVN4QmdRLE9BUUUvUyxJQUFJL2hDLE9BQ1EsbUJBRForaEMsSUFDWSxVQUFXLEtBRG5CL2hDLFFBQ2dDO2FBTXRDKzBDLFlBQVlyUixNQUFNN0IsTUFBTS9oQztNQUMxQjtpQ0FEMEJBO09BQzFCLGFBRG9CK2hDLE1BQU42QjtPQUdaLFlBSGtCN0I7TUFHbEIsR0FERW1ULFdBREEvdkMsSUFhaUIsT0FkS25GO01BQzFCLElBY0UsV0FmWWlrQyxjQWVGLFdBYlJpUjtNQWFRLE9BZkVqUjtlQWlCRCxPQWpCYWprQyxNQWVwQjJHLE1BZEZ4QjtlQWlCUyxPQWxCYW5GLE1BZXBCMkcsSUFiRnV1QyxVQURBL3ZDOzs7U0FrQlcsT0FsQlhBOztXQWtCeUQ7OzthQUFsQyxnQkFuQkRuRjs7OzthQW1Ca0IsZ0JBbkJsQkE7Ozs7YUFtQm1DLGdCQW5CbkNBOzs7YUFvQnRCLGVBTEUyRyxNQUtjLGdCQXBCTTNHO2FBcUJ0QixPQXJCc0JBLE1BZXBCMkcsS0FiRnV1QyxVQURBL3ZDOzs7U0l2eEJFOztXSjR5Qm9CLE9BckJ0QkEsY0FxQnNCLGdCQXRCQW5GOzthQXNCbUM7OztlQUFqQixnQkF0QmxCQTs7OztlQXNCbUMsZ0JBdEJuQ0E7OztlQXVCdEIsZUFSRTJHLE1BUWMsZ0JBdkJNM0c7ZUF3QnRCLE9BeEJzQkEsTUFlcEIyRyxLQWJGdXVDLFVBREEvdkM7Ozt1QkF5QkEsT0ExQnNCbkYsTUFlcEIyRyxJQWJGdXVDLFVBREEvdkM7TUEyQkYsNEJBYkl3QixJQWFzQjthQUcxQnd1QyxrQkFBa0JuMkMsS0FBS2dCO01BQ2Q7a0JBRFNoQjtPQUNULDBCQURjZ0I7T0FHbkIsa0JBSG1CQTs7TUFHbkIsU0FDSndFOzs7Ozs7Ozs7OztnQkFGRVcsT0FEQWhHLHVCQUNBZ0c7O2VBT3NEOzs7aUJBQWpCLGdCQVRoQm5GOzs7O2lCQVNpQyxnQkFUakNBOzs7aUJBVWIsSUFBTm8xQyxNQUFNLE9BVFJqMkM7aUJBVUYsZUFESWkyQyxRQUNZLGdCQVhPcDFDO2lCQVl2QixPQVp1QkEsTUFVbkJvMUMsT0FURmoyQyxTQUNBZ0c7aUJBVUYsNEJBRklpd0M7Ozs7Ozs7Ozs7OztRQU53QixpQkFGMUJqd0MsT0FEQWhHO1VBSVEsSUFBTjJrQixNQUFNLE9BSlIza0I7VUFLRixlQURJMmtCLFFBREp0ZjtVQUdBLE9BUHVCeEUsTUFLbkI4akIsT0FKRjNrQixTQUNBZ0c7VUFLRiw0QkFGSTJlO01BU3NDLGVBWnhDM2UsTUFEQWhHO1FBY1EsSUFBTndILElBQU0sT0FkUnhIO1FBZUYsT0FoQnVCYSxNQWVuQjJHLElBZEZ4SCxTQUNBZ0c7UUFjRiw0QkFESXdCO01BSUosT0FuQnVCM0csR0FtQnBCO2FBR0hxMUMsc0JBQXNCcjFDO01BQ2Q7dUJBRGNBO09BQ2Qsd0JBQU51a0M7T0FFTSxXQURON2dDO01BRUosaUJBSEk2Z0MsUUFFQTU5QixNQURBakQ7TUFFSiw0QkFESWlELElBRXNCO2FBcUN4QjJ1QyxnQkFBZ0J4MUMsTUFBTWQ7TUFDWDtrQkFEV0E7T0FFWCx3QkFGS2M7T0FHTjtNQUNWLGdCQURJeUc7TUFFSixrQkFGSUEsSUFIWXpHO01BTWhCLGdCQUhJeUc7TUFJSixrQkFKSUEsSUFJa0IsNEJBTmxCcEg7TUFPSixnQkFMSW9ILElBREFndkM7TUFNSix1QkFMSWh2QyxJQU1lO2FBRW5CaXZDLGtCQUFrQnQyQyxNQUFNNEM7TUFDMUIsU0FEb0I1QztRQUdsQix1Q0FId0I0QyxXQUd4Qjs7Y0FFRTZCO1VBQ0U7NkNBTm9CN0IsRUFLdEI2QjtZQUNFLDRCQUNjO1lBRGQsU0FERkE7OztRQUZGO1NBT0UsT0FOSS9CO1NBUUk7O1lBRlIsc0JBVnNCRSxPQUdwQjJ6QztTQVNNO3NCQUVGanhDLEdBQUksZUFGUitCLElBQ0ErM0IsT0FDSTk1QixHQUFJLGlCQUE4QjtTQUZoQyxVQVROaXhDO1NBU00sMkJBWmMzekM7U0FZZDs7Y0FJVjFFO1VBQ0U7Z0JBQ0VvSCxFQURGLHVCQWpCc0IxQyxFQWdCeEIxRTtZQUNFLE9BQ0VvSDthQUVLLElBRkxBOztjQUNFLFNBSkZ1RixTQUlxQixvQkFBcUIsY0FBVyxJQURyRHZGO1lBREYsU0FERnBIOzs7UUFNQSw0QkFWSW1KO01BV0MsT0F2Qm1CekUsQ0F1QmxCO2FBR042ekMsWUFBWXoyQyxNQUFNMEM7TUF0RUEsT0FzRU4xQzs7Ozs7Ozs7Ozs7Ozs7OztNQUM2Qyx5QkFEN0NBLE1BQzZDLHFCQUR2QzBDLEdBQzBDO2FBQzVEZzBDLGNBQWMxMkMsTUFBTTBDO01BeERELE9Bd0RMMUM7Ozs7Ozs7Ozs7Ozs7Ozs7TUFDOEMseUJBRDlDQSxNQUM4QyxxQkFEeEMwQyxHQUMyQzthQUMvRGkwQyxrQkFBa0IzMkMsTUFBTTBDO01BbERMLE9Ba0REMUM7Ozs7Ozs7Ozs7Ozs7Ozs7TUFDOEMseUJBRDlDQSxNQUM4QyxxQkFEeEMwQyxHQUMyQzthQUNuRWswQyxjQUFjNTJDLE1BQU0wQztNQXBFRCxPQW9FTDFDOzs7Ozs7Ozs7Ozs7Ozs7O01BQzhDLHlCQUQ5Q0EsTUFDOEMsdUJBRHhDMEMsR0FDMkM7YUFJL0RtMEMsY0FBY2oyQyxNQUFNZCxLQUFLaUQ7TUFDM0IsU0FBSSt6QztRQUNGLE9BRmNsMkM7cUJBRVZtMkM7OztRQUtKLHVDQVB5QmgwQyxFQUFMakQsS0FFaEJpM0MsS0FLMEI7TUFOaEMsU0FlSUMsaUJBQWlCbDJDO1FBQVksc0NBaEJOaUM7UUFnQk07aUJBaEJOQTtvQ0FnQk5qQyxHQUdGO01BbEJuQixPQURnQkY7O1NBeUJxQztnQ0FBNUIsZ0JBekJUQSxNQUFNZCxNQUFLaUQ7VUFTekIsMEJBRG9CakM7VUFFSDVDO1NBQ2Y7Y0FEZUEsTUFEYitIOzs7YUFHTSwwQkFKVW5GLElBRUg1QyxHQUVQOzs7OzthSWo3Qk4sZUptN0JPLFFBSk1BO2FBRVA7eUJBSlU0QyxJQU9RLElBUFJBO2tCQVFsQmsyQztlQUtTO2VBQ3VCO2VBQ0w7Z0JBS1kseUJBQTVCLGdCQTVCQ3AyQyxNQUFNZCxNQUFLaUQsR0E0QmtCO2FBVzNDazBDLGdCQUFnQmoyQztNQUNSLElBQU5xRyxJQUFNO01BQ1YsYUFESUEsSUFEY3JHO01BRWxCLHVCQURJcUcsSUFFZTthQVliNnZDLHNCQUdKL2QsRUFBRTNvQixJQUFJdXlCO1VBQU4vQixNQUFFdndCLFVBQUlxMUI7TUFBTztpQkFBUEE7UUF1Rk4sa0JBdkZBOUUsSUFBRXZ3Qjs7UUFBVyxPQUFQcTFCOztXQUVOLElBREsxbkMsS0FEQzBuQztXQUVOLGdCQUFJeGdDO2FBQ0YsSUFBSTZ4QyxXQUhKMW1DLE1BRUVuTCxHQUNGLG1CQUhGMDdCLElBR01tVyxRQUZELzRDLEtBR3VCOztXQUU1QixJQURVQyxPQUxKeW5DO1dBTU4sZ0JBQUl4Z0M7YUEvQkk7MEJBK0JKQTtjQS9CSSx3QkFBTnhFO2NBRU0sV0FETjBEO2FBRUosaUJBSEkxRCxNQUVBMkcsTUFEQWpEO2FBRE0sSUFnQ0YyeUMsV0FQSjFtQyxNQXRCSixxQkFESWhKO29CQW9CRTJ2QyxZQUdKcFcsSUFPTW1XLFFBRkk5NEMsT0FHa0I7O2VBQ2ZDLE9BVFB3bkMsU0FTRWxtQyxJQVRGa21DO2tCQW9KTnVSLGFBcEpBclcsSUFBRXZ3QixNQVNXblMsT0FBTHNCLGFBQ3lCa0IsS0FBTyxPQUFQQSxHQUFVOztlQUN6QnZDLE9BWFp1bkMsU0FXT2ptQyxNQVhQaW1DO2tCQW9KTnVSLGFBcEpBclcsSUFBRXZ3QixNQVdnQmxTLE9BQUxzQixNQTlKYnMyQzs7ZUFnS3VCMzNDLE9BYmpCc25DLFNBYVdobUMsS0FiWGdtQyxTQWFNL2xDLE1BYk4rbEMsU0FhRDlsQyxNQWJDOGxDO2tCQXdLTndSO29CQXhLQXRXLElBQUV2d0IsTUFhcUJqUyxPQUFYdUIsTUFBS0QsS0FqRmpCMjJDLFlBaUZLejJDOzs7WUFFb0J2QixPQWZuQnFuQztZQWVhN2xDLE9BZmI2bEM7WUFlUTVsQyxNQWZSNGxDO1lBZUMzbEMsUUFmRDJsQztrQkF3S053UjtvQkF4S0F0VyxJQUFFdndCLE1BZXVCaFMsT0FBWHlCLE1BQUtELE9BakZuQnkyQyxjQWlGT3YyQzs7O1lBRXNCekIsT0FqQnZCb25DO1lBaUJpQjFsQyxPQWpCakIwbEM7WUFpQll6bEMsTUFqQlp5bEM7WUFpQkt4bEMsUUFqQkx3bEM7a0JBd0tOd1I7b0JBeEtBdFcsSUFBRXZ3QixNQWlCMkIvUixPQUFYMkIsTUFBS0QsT0FqRnZCdTJDLGtCQWlGV3IyQzs7O1lBRWMzQixPQW5CbkJtbkM7WUFtQmF2bEMsT0FuQmJ1bEM7WUFtQlF0bEMsTUFuQlJzbEM7WUFtQkNybEMsUUFuQkRxbEM7a0JBd0tOd1I7b0JBeEtBdFcsSUFBRXZ3QixNQW1CdUI5UixPQUFYNkIsTUFBS0QsT0FqRm5CcTJDLGNBaUZPbjJDOztlQUVrQjdCLE9BckJuQmtuQyxTQXFCYXBsQyxPQXJCYm9sQyxTQXFCUW5sQyxNQXJCUm1sQyxTQXFCQ2xsQyxNQXJCRGtsQztXQXlOd0IsVUFwTWhCbmxDO3VCQUFLRDtjQThNbkIsT0E5TW1CQTtnQ0E4TWY4USxFQUFFek87eUJBQ00sSUFBTmpDLElBQU0sY0EvTUxGLE1BOE1INFEsRUFBRXpPO3lCQUNNLG1CQXBPWmkrQixPQUFFdndCLE1Bb09JM1AsS0EvTW1CbEMsT0FnTnVCO2dDQVY1Q21FO3lCQUNROzBCQUFOakM7MkJBQU0sY0F2TUxGLE1BdU15Qix3QkF2TXpCQSxPQXNNSG1DO3lCQUNRLG1CQTVOWmkrQixPQUFFdndCLE1BNE5JM1AsS0F2TW1CbEMsT0F3TXVCO2FBRWhELElBRDBCNFMsRUF6TVA5UTthQTBNbkIsZ0JBQUlxQztlQUNRLElBQU5qQyxJQUFNLGNBM01MRixNQXlNbUI0USxFQUN0QnpPO2VBQ1EsbUJBaE9aaStCLE9BQUV2d0IsTUFnT0kzUCxLQTNNbUJsQyxPQTRNdUI7O2FBUmxCLFNBcE1oQitCOzt5QkFBS0Q7O2tDQTJOZjhRLEVBQUV6TzsyQkFDTSxJQUFOakMsSUFBTSxzQkFBb0IsY0E1TnpCRixNQTJOSDRRLEVBQUV6TzsyQkFDTSxtQkFqUFppK0IsT0FBRXZ3QixNQWlQSTNQLEtBNU5tQmxDLE9BNk51QjtrQ0FYNUNtRTsyQkFDUTs4Q0FuTkxuQyxNQW1OeUIsd0JBbk56QkEsT0FrTkhtQzs0QkFFUyw0QkFEUGpDOzJCQUNPLG1CQXpPYmtnQyxPQUFFdndCLE1BeU9JNDBCLE9BcE5tQnptQyxPQXFOd0I7bUJBQ1gyNEMsSUF0Tm5CNzJDOytCQXVOZnFDO2lCQUNRLElBQU5qQyxJQUFNLHNCQUFvQixjQXhOekJGLE1Bc04rQjIyQyxJQUNsQ3gwQztpQkFDUSxtQkE3T1ppK0IsT0FBRXZ3QixNQTZPSTNQLEtBeE5tQmxDLE9BeU51QjtzQkF6TmxDK0I7dUJBQUtEOztnQ0F3T2Y0c0MsRUFBRTk3QixFQUFFek87eUJBQ0ksSUFBTmpDLElBQU0saUJBRFJ3c0MsRUFDNEIsY0F6T3pCMXNDLE1Bd09ENFEsRUFBRXpPO3lCQUNJLG1CQTlQWmkrQixPQUFFdndCLE1BOFBJM1AsS0F6T21CbEMsT0EwT3VCO2dDQVg1QzB1QyxFQUFFdnFDO3lCQUNNOzRDQWhPTG5DLE1BZ095Qix3QkFoT3pCQSxPQStORG1DOzBCQUVPLHVCQUZUdXFDLEVBQ0V4c0M7eUJBQ08sbUJBdFBia2dDLE9BQUV2d0IsTUFzUEk0MEIsT0FqT21Cem1DLE9Ba093QjtpQkFDaEI0NEMsSUFuT2Q5MkM7NkJBb09mNHNDLEVBQUV2cUM7ZUFDTSxJQUFOakMsSUFBTSxpQkFEUndzQyxFQUM0QixjQXJPekIxc0MsTUFtTzBCNDJDLElBQzNCejBDO2VBQ00sbUJBMVBaaStCLE9BQUV2d0IsTUEwUEkzUCxLQXJPbUJsQyxPQXNPdUI7O2VBcE9yQ0UsT0F2QkxnbkMsU0F1QkFqbEMsTUF2QkFpbEM7a0JBb0pOdVIsYUFwSkFyVyxJQUFFdndCLE1BdUJTM1IsT0FBTCtCLE1PdjNDTm9EOztXUDA0Q0EsVUExQ002aEMsU0EwQ04sU0ExQ0VyMUIsbUJBQUlxMUI7Ozs7O1lBNENVaGxDLElBNUNWZ2xDO1lBQUoxZ0IsZUE0Q2N0a0I7WUE1Q2QyUDtZQUFJcTFCOzs7OztZQThDUS9rQyxJQTlDUitrQztZQUFKMlIsZUE4Q1kxMkM7WUE5Q1owUDtZQUFJcTFCOzs7V0FrREc7WUFEaUI5bUMsT0FqRHBCOG1DO1lBaURTTCxVQWpEVEs7WUFrREcsbUJBRE1MO1dBQ04sZ0JBQ0oza0MsS0FDSCxtQkFwREZrZ0MsT0FBRXZ3QixNQWtERTVSLElBRHNCRyxPQUlzQjs7ZUFDeEJDLFFBdERsQjZtQyxTQXNEVzlrQyxNQXREWDhrQzs7YUF1RE4sSUFBYS9DO2FBQ1g7c0JBeERGL0IsSUFBRXZ3QixNQXdEQSxXQUFZLE9BRERzeUIsSUFESS9oQyxPQUFPL0IsU0FFYzs7V0E5QnRDLElBRE1DLFFBekJBNG1DO1dBMEJOLGdCQUFJMWpDLEVBQUVXO2FBQUs7c0JBMUJYaStCO3lCQUFFdndCLGVBMEI0Q3pDLEdBQUssa0JBQS9DNUwsRUFBMEM0TCxFQUF4Q2pMLEVBQWtEO3NCQURsRDdELFFBQ3lEOztXQUUvRCxJQURNQyxRQTNCQTJtQztXQTRCTixnQkFBSTFqQyxHQUFLLG1CQTVCVDQrQixPQUFFdndCLE1BNEJFck8sR0FERWpELFFBQzBDOzs7WUE1QjFDdXZDO1lBMkVVbnRDLFdBM0VWdWtDO1lBQUo0UixlQTJFY24yQztZQTNFZGtQO1lBQUlxMUI7Ozs7OztjQTZFdUMxbUMsUUE3RXZDMG1DOzs7Y0FBTjZSO3dCQUFFbm5DLElBQUYyb0IsRUE2RTZDLzZCOzBCQTdFN0M0aUMsSUE4RU80VzttQkFDTCxtQkEvRUZ6ZSxLQUFFM29CLE9BOEVLb25DLE9BRHNDeDVDLEtBRXFCO3dCQS9FbEU0aUM7c0JBQUV2d0IsTUFBRnV3QixJQTZFNkM1aEM7Y0E3RTdDNGhDO2NBQUV2d0I7Y0FBSXExQjs7O1lBaUZ1QzFrQyxRQWpGdkMwa0M7OztZQUFOK1I7c0JBQUVybkMsSUFBRjJvQixFQWlGNkMvNkI7d0JBakY3QzRpQyxJQWtGTzRXLE1BQ0wsbUJBbkZGemUsS0FBRTNvQixPQWtGS29uQyxPQURzQ3g1QyxLQUVxQjtzQkFuRmxFNGlDO29CQUFFdndCLE1BQUZ1d0IsSUFpRjZDNS9CO1lBakY3QzQvQjtZQUFFdndCO1lBQUlxMUI7O2tCQXdDTjs7ZUFrQnFCemtDLFFBMURmeWtDLFNBMkRGcVIsV0EzREYxbUM7a0NBNERPLG1CQTVEVHV3QixJQTJESW1XLFFBRGlCOTFDLFFBRWM7O1dBS25DLElBSnFCQyxRQTdEZndrQztXQWlFTixnQkFBSXBqQzthQUNrQyxJQUFoQ3kwQyxXQWxFSjFtQyxNQWtFb0Msd0JBRGxDL047YUFDa0MsbUJBbEV0Q3MrQixJQWtFTW1XLFFBTGU3MUMsUUFNTzs7V0FFNUIsSUFEZUUsUUFwRVRza0M7V0FxRU4sZ0JBQUl4Z0M7YUFDRixJQUFJNnhDLFdBdEVKMW1DLE1BcUVFbkwsR0FDRixtQkF0RUYwN0IsSUFzRU1tVyxRQUZTMzFDLFFBR2E7O2VBQ1JFLFFBeEVkb2tDLFNBd0VTNWpDLElBeEVUNGpDOzs7b0JBMkZOZ1MsK0JBM0ZBOVcsSUFBRXZ3QixNQXdFYXZPLElBQUtSOztvQkFtQnBCbzJDLHdCQTNGQTlXLElBQUV2d0IsTUF3RWF2TyxJQUFLUjs7V0ExQ1M7WUFEWEMsUUE3Qlpta0M7WUE2QlMxakMsRUE3QlQwakM7WUE2QkV6akMsTUE3QkZ5akM7WUE4QnVCLGdCQURkMWpDO1dBQ2M7O29CQWtPN0IyMUMsd0JBaFFBL1csSUFBRXZ3QixNQTZCZ0I5TyxRQUFWVTs7b0JBbU9SMDFDLGlCQWhRQS9XLElBQUV2d0IsTUE2QmdCOU8sUUFBVlUsYUEwREg7YUFJTHkxQyw2QkFJQTNlLEVBQUUzb0IsSUFBSXRPLElBQUk2Z0M7TUFBTyxVQUFYN2dDO09BQVcsT0FBWEE7O1VBQzZCOzttQkE2Q25DODFDLDJCQTlDQTdlLEVBQUUzb0IsSUFBUXV5Qjt3Q0E4Q1ZpVixvQkE5Q0E3ZSxFQUFFM29CLElBQVF1eUI7O1VBRXlCOzttQkE0Q25DaVYsMkJBOUNBN2UsRUFBRTNvQixJQUFRdXlCO3dDQThDVmlWLG9CQTlDQTdlLEVBQUUzb0IsSUFBUXV5QjtnQkFheUI7O1VBR0E7O21CQThCbkNpViwyQkE5Q0E3ZSxFQUFFM29CLElBQVF1eUI7d0NBOENWaVYsb0JBOUNBN2UsRUFBRTNvQixJQUFRdXlCOztPQUFPLE9BQVg3Z0M7O1VBRzZCOzttQkEyQ25DODFDLDJCQTlDQTdlLEVBQUUzb0IsSUFBUXV5Qjt3Q0E4Q1ZpVixvQkE5Q0E3ZSxFQUFFM29CLElBQVF1eUI7O1VBSXlCOzttQkEwQ25DaVYsMkJBOUNBN2UsRUFBRTNvQixJQUFRdXlCO3dDQThDVmlWLG9CQTlDQTdlLEVBQUUzb0IsSUFBUXV5Qjs7VUFLeUI7O21CQXlDbkNpViwyQkE5Q0E3ZSxFQUFFM29CLElBQVF1eUI7d0NBOENWaVYsb0JBOUNBN2UsRUFBRTNvQixJQUFRdXlCOztVQU15Qjs7bUJBd0NuQ2lWLDJCQTlDQTdlLEVBQUUzb0IsSUFBUXV5Qjt3Q0E4Q1ZpVixvQkE5Q0E3ZSxFQUFFM29CLElBQVF1eUI7O1VBT3lCOzttQkF1Q25DaVYsMkJBOUNBN2UsRUFBRTNvQixJQUFRdXlCO3dDQThDVmlWLG9CQTlDQTdlLEVBQUUzb0IsSUFBUXV5Qjs7VUFReUI7O21CQXNDbkNpViwyQkE5Q0E3ZSxFQUFFM29CLElBQVF1eUI7d0NBOENWaVYsb0JBOUNBN2UsRUFBRTNvQixJQUFRdXlCOztVQVN5Qjs7bUJBcUNuQ2lWLDJCQTlDQTdlLEVBQUUzb0IsSUFBUXV5Qjt3Q0E4Q1ZpVixvQkE5Q0E3ZSxFQUFFM29CLElBQVF1eUI7O1VBVXlCOzttQkFvQ25DaVYsNEJBOUNBN2UsRUFBRTNvQixJQUFRdXlCO3dDQThDVmlWLG9CQTlDQTdlLEVBQUUzb0IsSUFBUXV5Qjs7VUFXeUI7O21CQW1DbkNpViw0QkE5Q0E3ZSxFQUFFM29CLElBQVF1eUI7d0NBOENWaVYsb0JBOUNBN2UsRUFBRTNvQixJQUFRdXlCOztVQVl5QixJQUFWL2hDLE1BWm5Ca0I7VUFZNkI7O21CQVFuQysxQyw2QkFwQkE5ZSxFQUFFM29CLElBWXVCeFAsTUFaZitoQzt3Q0FvQlZrVixxQkFwQkE5ZSxFQUFFM29CLElBWXVCeFAsTUFaZitoQzs7VUFjeUI7O21CQWdDbkNpViw0QkE5Q0E3ZSxFQUFFM29CLElBQVF1eUI7d0NBOENWaVYsb0JBOUNBN2UsRUFBRTNvQixJQUFRdXlCOztVQWV5Qjs7bUJBK0JuQ2lWLDRCQTlDQTdlLEVBQUUzb0IsSUFBUXV5Qjt3Q0E4Q1ZpVixvQkE5Q0E3ZSxFQUFFM29CLElBQVF1eUIsTUFnQm1EO2FBSTdEa1YsMEJBSUE5ZSxFQUFFM29CLElBQUl4UCxNQUFNK2hDO01BQU8sVUFBYi9oQztRQWVxQjs7aUJBTzNCZzNDLDJCQXRCQTdlLEVBQUUzb0IsSUFBVXV5QjtzQ0FzQlppVixvQkF0QkE3ZSxFQUFFM29CLElBQVV1eUI7O09BQU8sT0FBYi9oQzs7VUFDcUIsSUFBbkI1QyxLQURGNEM7VUFDcUIsdUJBQVMsdUJBRHBDbTRCLEVBQUUzb0IsSUFDTXBTLEtBREkya0MsSUFDc0Q7O1VBQ3ZDLElBQWpCMWtDLE9BRkoyQztVQUVxQix1QkFBUyx1QkFGcENtNEIsRUFBRTNvQixJQUVRblMsT0FGRTBrQyxJQUVzRDs7VUFDdkMsSUFBcEJ6a0MsT0FIRDBDO1VBR3FCLHVCQUFTLHVCQUhwQ200QixFQUFFM29CLElBR0tsUyxPQUhLeWtDLElBR3NEOztVQUN2QyxJQUFsQnhrQyxPQUpIeUM7VUFJcUIsdUJBQVMsdUJBSnBDbTRCLEVBQUUzb0IsSUFJT2pTLE9BSkd3a0MsSUFJc0Q7O1VBQ3ZDLElBQWR2a0MsT0FMUHdDO1VBS3FCLHVCQUFTLHVCQUxwQ200QixFQUFFM29CLElBS1doUyxPQUxEdWtDLElBS3NEOztVQUN2QyxJQUFsQnRrQyxPQU5IdUM7VUFNcUIsdUJBQVMsdUJBTnBDbTRCLEVBQUUzb0IsSUFNTy9SLE9BTkdza0MsSUFNc0Q7O1VBQ3ZDLElBQWxCcmtDLE9BUEhzQztVQU9xQix1QkFBUyx1QkFQcENtNEIsRUFBRTNvQixJQU9POVIsT0FQR3FrQyxJQU9zRDs7VUFDdkMsSUFBbkJwa0MsT0FSRnFDO1VBUXFCLHVCQUFTLHVCQVJwQ200QixFQUFFM29CLElBUU03UixPQVJJb2tDLElBUXNEOztVQU12QyxJQUFUbmtDLE9BZFpvQztVQWNxQix1QkFBUyx1QkFkcENtNEIsRUFBRTNvQixJQWNnQjVSLE9BZE5ta0MsSUFjc0Q7O1VBR3pEO1dBRGtCamtDLE9BaEJyQmtDO1dBZ0JnQnhCLElBaEJoQndCO1dBZ0JXakMsSUFoQlhpQztXQWlCRyxTQUFNLEtBREVqQyxLQUFLUztVQUNiO1lBQ3NCLHVCQWxCL0IyNUIsRUFBRTNvQixJQWtCNkIsYUFEM0IzUixHQUR1QkMsUUFoQmZpa0MsSUFrQjZDOztVQVQ5QixJQUFsQi9qQyxPQVRIZ0M7VUFTcUI7WUFBVyx1QkFUdENtNEIsRUFBRTNvQixJQVNPeFIsT0FURytqQyxJQVN3RDs7VUFDekMsSUFBbEI5akMsUUFWSCtCO1VBVXFCLHVCQUFTLHVCQVZwQ200QixFQUFFM29CLElBVU92UixRQVZHOGpDLElBVXNEOztVQUN2QyxJQUFwQjdqQyxRQVhEOEI7VUFXcUIsdUJBQVMsdUJBWHBDbTRCLEVBQUUzb0IsSUFXS3RSLFFBWEs2akMsSUFXc0Q7aUJBQ3ZDO2lCQUNBLDhCQUs4QjthQUl6RGlWLHlCQUdBN2UsRUFBRTNvQixJQUFJdXlCO01BQ1IsWUFESXZ5QjtNQUNKOztlQXBKTTBtQyx3QkFtSkovZCxPQUFNNEo7b0NBbkpGbVUsaUJBbUpKL2QsT0FBTTRKLEtBQzhEO2FBK0dwRWdWLHNCQUlFNWUsRUFBRTNvQixJQUFJcFMsS0FBS2lFLE1BQU1EO01BQUssR0FBWEM7UUFHYixJQURZOHBDLFFBRkM5cEM7UUFHYixnQkFBSVU7VUFDMkIsbUJBSjdCbzJCLEVBQUUzb0IsSUFBSXBTLEtBRUkrdEMsUUFFbUIsV0FKWi9wQyxFQUdmVyxHQUNnQztNQUhyQixZQURYeU4sSUFBZXBPO01BQ0o7O2VBeFFYODBDLHdCQXVRRi9kLE9BQU0vNkI7b0NBdlFKODRDLGlCQXVRRi9kLE9BQU0vNkIsTUFJNEI7YUEzUWhDZzVDLFlBR0pqZSxFQUFFM29CLElBQUl1eUI7TUo5K0NYLHVCSTIrQ1NtVSxnQkFHSi9kLEVBQUUzb0IsSUFBSXV5QjthQTJGTnFWLG1CQUlBamYsRUFBRTNvQixJQUFJdE8sSUFBSTZnQztNSjdrRGYsdUJJeWtESytVLHVCQUlBM2UsRUFBRTNvQixJQUFJdE8sSUFBSTZnQzthQW9CVm1WLGdCQUlBL2UsRUFBRTNvQixJQUFJeFAsTUFBTStoQztNSnJtRGpCLHVCSWltREtrVixvQkFJQTllLEVBQUUzb0IsSUFBSXhQLE1BQU0raEM7YUF5SVpvVixZQUlFaGYsRUFBRTNvQixJQUFJcFMsS0FBS2lFLE1BQU1EO01KbHZEeEIsdUJJOHVESzIxQyxnQkFJRTVlLEVBQUUzb0IsSUFBSXBTLEtBQUtpRSxNQUFNRDthQWhIbkJpMUMsYUFJRWxlLEVBQUUzb0IsSUFBSXV5QixJQUFJbmpDLElBQUk4bUM7TUFBUyxVQUFiOW1DO09BRVosZ0JBQUltRDtTQUNrQyxJQUFoQ28wQyxXQUhGM21DLElBR2tDLFdBSHRCazJCLE1BRVozakM7U0FDa0MsbUJBSHBDbzJCLEVBR0lnZSxRQUhFcFUsSUFJbUI7O1FBSkYsU0FBYm5qQztjQUtRaWpDLE1BTFJqakMsT0FLQzhrQyxNQUxEOWtDOzBCQU1SbUQ7WUFDa0MsSUFBaENvMEMsV0FQRjNtQyxJQU9rQyxZQUZ6QmswQixNQUFPN0IsTUFFMEMsV0FQOUM2RCxNQU1aM2pDO1lBQ2tDLG1CQVBwQ28yQixFQU9JZ2UsUUFQRXBVLElBUW1CO1FBRTNCLElBRFlnQyxRQVRBbmxDO1FBVVosZ0JBQUkwdEMsRUFBRXZxQztVQUNnQyxJQUFoQ28wQyxXQVhGM21DLElBV2tDLFlBRjFCdTBCLFFBQ1J1SSxFQUNzRCxXQVgxQzVHLE1BVVYzakM7VUFDZ0MsbUJBWHBDbzJCLEVBV0lnZSxRQVhFcFUsSUFZbUI7YUFJM0J1VSwyQkFLRW5lLEVBQUUzb0IsSUFBSXV5QixJQUFJbmpDLElBQUlFLEtBQUs0bUMsTUFBTTFtQztNQUFTLFVBQXhCSjtrQkFBSUU7U0FVaEIsT0FWZ0JBOzJCQVVaMFIsRUFBRXpPO29CQUNNLElBQU5qQyxJQUFNLGtCQURSMFEsRUFDNEIsV0FYWGsxQixNQUFNMW1DLE1BVXJCK0M7b0JBQ00sbUJBWFZvMkIsS0FBRTNvQixJQVdFMVAsS0FYRWlpQyxJQVl3QzsyQkFWNUNoZ0M7b0JBQ1EsSUFBTmpDLElBQU0sV0FIUzRsQyxNQUFNMW1DLE1BRXZCK0M7b0JBQ1EsbUJBSFZvMkIsS0FBRTNvQixJQUdFMVAsS0FIRWlpQyxJQUl3QztRQUVoRCxJQUQwQnZ4QixFQUxWMVI7UUFNaEIsZ0JBQUlpRDtVQUNRLElBQU5qQyxJQUFNLGtCQUZjMFEsRUFFTSxXQVBYazFCLE1BQU0xbUMsTUFNdkIrQztVQUNRLG1CQVBWbzJCLEtBQUUzb0IsSUFPRTFQLEtBUEVpaUMsSUFRd0M7O1FBUlosU0FBeEJuakM7O29CQUFJRTs7NkJBc0JaMFIsRUFBRXpPO3NCQUNNO3VCQUFOakM7d0JBQU07b0NBQW9CLGtCQUQ1QjBRLEVBQ2lELFdBdkJoQ2sxQixNQUFNMW1DLE1Bc0JyQitDO3NCQUNNLG1CQXZCVm8yQixLQUFFM29CLElBdUJFMVAsS0F2QkVpaUMsSUF3QndDOzZCQVY1Q2hnQztzQkFDUSxJQUFOakMsSUFBTSxzQkFBb0IsV0FmWDRsQyxNQUFNMW1DLE1BY3ZCK0M7c0JBQ1EsbUJBZlZvMkIsS0FBRTNvQixJQWVFMVAsS0FmRWlpQyxJQWdCd0M7Y0FDVndVLElBakJ0QnozQzswQkFrQlppRDtZQUNRO2FBQU5qQztjQUFNOzBCQUFvQixrQkFGTXkyQyxJQUVlLFdBbkJoQzdRLE1BQU0xbUMsTUFrQnZCK0M7WUFDUSxtQkFuQlZvMkIsS0FBRTNvQixJQW1CRTFQLEtBbkJFaWlDLElBb0J3QztpQkFwQnBDbmpDO2tCQUFJRTs7MkJBa0Nad3RDLEVBQUU5N0IsRUFBRXpPO29CQUNJO3FCQUFOakM7c0JBQU07NkJBRFJ3c0MsRUFDNEIsa0JBRDFCOTdCLEVBQytDLFdBbkNoQ2sxQixNQUFNMW1DLE1Ba0NuQitDO29CQUNJLG1CQW5DVm8yQixLQUFFM29CLElBbUNFMVAsS0FuQ0VpaUMsSUFvQ3dDOzJCQVY1Q3VLLEVBQUV2cUM7b0JBQ00sSUFBTmpDLElBQU0saUJBRFJ3c0MsRUFDNEIsV0EzQlg1RyxNQUFNMW1DLE1BMEJyQitDO29CQUNNLG1CQTNCVm8yQixLQUFFM29CLElBMkJFMVAsS0EzQkVpaUMsSUE0QndDO1lBQ2Z5VSxJQTdCakIxM0M7d0JBOEJad3RDLEVBQUV2cUM7VUFDTTtXQUFOakM7WUFBTTttQkFEUndzQyxFQUM0QixrQkFGQ2tLLElBRW9CLFdBL0JoQzlRLE1BQU0xbUMsTUE4QnJCK0M7VUFDTSxtQkEvQlZvMkIsS0FBRTNvQixJQStCRTFQLEtBL0JFaWlDLElBZ0N3QyxFQUlBO2FBMkQ1Q3NWLHVCQUVGbGYsRUFBRW5yQixFQUFFKzBCO1VBQUovQixNQUFJOEU7TUFBTztpQkFBUEE7UUFzRUYsa0JBdEVGOUUsSUFBRWh6Qjs7UUFBUyxPQUFQODNCOztXQUVGLFNBRkVBLFNBRUksa0JBRlI5RSxJQUFFaHpCLEVBQ0c1UDtXQUNHLHNCSjl2RGY7O1dJZ3dEUyxXQUpFMG5DLFNBSUksa0JBSlI5RSxJQUFFaHpCLEVBR1EzUDtXQUNGLHNCSmh3RGY7O29CSTR2RFd5bkM7O2FBTUYsV0FORUEsU0FNSSxrQkFOUjlFLElBQUVoekIsRUFLa0IxUDthQUNaLHNCSmx3RGY7OztlSW93RFMsV0FSRXduQyxTQVFJLGtCQVJSOUUsSUFBRWh6QixFQU9xQnpQO2VBQ2Ysc0JKcHdEZjthSXN3RFM7cUJBVkV1bkM7Y0FVVyxrQkFWZjlFLElBQUVoekIsRUFTcUJ4UDtjQUNmLG9CSnR3RGY7YUlzd0RlLHNCSnR3RGY7O29CSTR2RFdzbkM7O2FBWUYsV0FaRUEsU0FZSSxrQkFaUjlFLElBQUVoekIsRUFXdUJ2UDthQUNqQixzQkp4d0RmOzs7ZUkwd0RTLFdBZEVxbkMsU0FjSSxrQkFkUjlFLElBQUVoekIsRUFhMEJ0UDtlQUNwQixzQkoxd0RmO2FJNHdEUztxQkFoQkVvbkM7Y0FnQlcsa0JBaEJmOUUsSUFBRWh6QixFQWUwQnJQO2NBQ3BCLG9CSjV3RGY7YUk0d0RlLHNCSjV3RGY7O2VJNndEMEJDLE9BakJma25DLFNBaUJTaG1DLEtBakJUZ21DLFNBaUJJbG1DLElBakJKa21DO2tCQXVFTnlTLHdCQXZFRXZYLElBQUVoekIsRUFpQmlCcFAsT0FBWGdCLElBQUtFOztlQUVRaEIsT0FuQmpCZ25DLFNBbUJXN2xDLE9BbkJYNmxDLFNBbUJNam1DLE1BbkJOaW1DO2tCQXVFTnlTLHdCQXZFRXZYLElBQUVoekIsRUFtQm1CbFAsT0FBWGUsTUFBS0k7O2VBRVVqQixPQXJCckI4bUMsU0FxQmUxbEMsT0FyQmYwbEMsU0FxQlUvbEMsTUFyQlYrbEM7a0JBdUVOeVMsd0JBdkVFdlgsSUFBRWh6QixFQXFCdUJoUCxPQUFYZSxNQUFLSzs7ZUFFRW5CLFFBdkJqQjZtQyxTQXVCV3ZsQyxPQXZCWHVsQyxTQXVCTTVsQyxNQXZCTjRsQztrQkF1RU55Uyx3QkF2RUV2WCxJQUFFaHpCLEVBdUJtQi9PLFFBQVhpQixNQUFLSzs7ZUFFTXJCLFFBekJqQjRtQyxTQXlCV3BsQyxPQXpCWG9sQyxTQXlCTXpsQyxNQXpCTnlsQztrQkF1RU55Uyx3QkF2RUV2WCxJQUFFaHpCLEVBeUJtQjlPLFFBQVhtQixNQUFLSzs7b0JBekJYb2xDOzthQTRCRixZQTVCRUEsU0E0Qkksa0JBNUJSOUUsSUFBRWh6QixFQTJCZ0I3TzthQUNWLHNCSnh4RGY7OztlSTB4RFMsWUE5QkUybUMsU0E4Qkksa0JBOUJSOUUsSUFBRWh6QixFQTZCbUI1TztlQUNiLHNCSjF4RGY7YUk0eERTO3NCQWhDRTBtQztjQWdDVyxrQkFoQ2Y5RSxJQUFFaHpCLEVBK0JtQjVNO2NBQ2Isb0JKNXhEZjthSTR4RGUsc0JKNXhEZjtrQkl3eURTLFVBNUNFMGtDO2tCQThDRixVQTlDRUE7a0JBZ0RGLFVBaERFQTs7V0FrREYsWUFsREVBLFNBa0RJLGtCQWxEUjlFLElBQUVoekIsRUFpRGdCM007V0FDVixzQko5eURmOztlSSt5RCtCQyxRQW5EcEJ3a0MsU0FtRGE5a0MsTUFuRGI4a0M7O2FBb0RGLElBQWEvQzthQUVULG9CQXRETi9CLElBQUVoekIsRUFzREksV0FBWSxPQUZIKzBCLElBREUvaEMsT0FBT00sU0FHa0I7O1dBcEJ4QztvQkFsQ0V3a0M7WUFrQ1csa0JBbENmOUUsSUFBRWh6QixFQWlDSXhNO1lBQ0Usb0JKOXhEZjtXSTh4RGUsc0JKOXhEZjs7V0lneURTLFlBcENFc2tDLFNBb0NJLGtCQXBDUjlFLElBQUVoekIsRUFtQ0l0TTtXQUNFLHNCSmh5RGY7a0JJNHpEUyxVQWhFRW9rQzs7Ozs7Y0FpRXlDbmtDLFFBakV6Q21rQzs7O2NBQUo2UjswQkFpRTZDdjVDOzBCQWpFN0M0aUMsSUFrRW9Cd1gsS0FBTyxvQkFsRTNCcmYsRUFrRW9CcWYsSUFEeUJwNkMsS0FDSyxRQWxFbEQ0aUM7MEJBaUU2Q3IvQjtjQWpFN0NxL0I7Y0FBSThFOzs7WUFtRXlDaGtDLFFBbkV6Q2drQzs7O1lBQUorUjt3QkFtRTZDejVDO3dCQW5FN0M0aUMsSUFvRW9Cd1gsS0FBTyxvQkFwRTNCcmYsRUFvRW9CcWYsSUFEeUJwNkMsS0FDSyxRQXBFbEQ0aUM7d0JBbUU2Q2wvQjtZQW5FN0NrL0I7WUFBSThFOztrQkEwQ0Y7O1dBY0EsWUF4REVBLFNBd0RJLGtCQXhEUjlFLElBQUVoekIsRUF1RG1CaE07V0FDYixzQkpwekRmOztXSXN6RFMsWUExREU4akMsU0EwREksa0JBMURSOUUsSUFBRWh6QixFQXlEbUIvTDtXQUNiLHNCSnR6RGY7O1dJd3pEUyxZQTVERTZqQyxTQTRESSxrQkE1RFI5RSxJQUFFaHpCLEVBMkRhN0w7V0FDUCxzQkp4ekRmOztlSXl6RDJCczJDLFFBN0RoQjNTLFNBNkRXNWpDLElBN0RYNGpDO2tCQW5MTnNTO29DQWlQaUMsa0JBOUQvQnBYLElBQUVoekIsRUE4RGdDLE9BRG5COUwsSUFBS3UyQzs7ZUF4QkZDLFFBckNkNVMsU0FxQ0l6akMsTUFyQ0p5akM7OztvQkE4Rk42UywrQkE5RkUzWCxJQUFFaHpCLEVBcUNnQjBxQyxRQUFWcjJDOztvQkF5RFZzMkMsd0JBOUZFM1gsSUFBRWh6QixFQXFDZ0IwcUMsUUFBVnIyQyxRQWlDSDthQXdCUHMyQyw2QkFHRXhmLEVBQUVuckIsRUFBRSswQjtNQUhOO1FBT0ksbUJBQU0sd0JBSlI1SixFQUFFbnJCLEVBQUUrMEIsSUFHUTFnQztRQUNKLHNCSmoyRGY7TUkrMURTOztlQXJHQWcyQyx5QkFtR0ZsZixFQUFFbnJCLEVBQUUrMEI7b0NBbkdGc1Ysa0JBbUdGbGYsRUFBRW5yQixFQUFFKzBCLEtBSXNDO2FBdkd4Q3VWLGFBRUZuZixFQUFFbnJCLEVBQUUrMEI7TUo1dkRYLHVCSTB2RFNzVixpQkFFRmxmLEVBQUVuckIsRUFBRSswQjthQThGTjZWLG1CQUdFemYsRUFBRW5yQixFQUFFKzBCO01KNzFEWCx1QkkwMURLNFYsdUJBR0V4ZixFQUFFbnJCLEVBQUUrMEI7YUExQk53Vix3QkFJRXBmLEVBQUVuckIsRUFBRSswQixJQUFJbmpDLElBQUlFO01BQVEsVUFBWkY7a0JBQUlFO1VBTVYsR0FOVUE7WUFNRyxzQkFOZnE1QixFQUFFbnJCLEVBQUUrMEIsS0FNSSxvQko3MERmO1lJNjBEZSxzQko3MERmO1VJeTBEZSxzQkFGUjVKLEVBQUVuckIsRUFBRSswQjtVQUVJLHNCSnowRGY7UUkyMERlLHNCQUpSNUosRUFBRW5yQixFQUFFKzBCO1FBSUksc0JKMzBEZjs7UUl1MEQyQixTQUFabmpDO29CQUFJRTtZQVlWLEdBWlVBO2NBWUcsc0JBWmZxNUIsRUFBRW5yQixFQUFFKzBCLEtBWUksb0JKbjFEZjtjSW0xRGUsc0JKbjFEZjtZSSswRGUsc0JBUlI1SixFQUFFbnJCLEVBQUUrMEI7WUFRSSxzQkovMERmO1VJaTFEZSxzQkFWUjVKLEVBQUVuckIsRUFBRSswQjtVQVVJLHNCSmoxRGY7a0JJdTBEbUJqakM7VUFrQlYsR0FsQlVBO1lBa0JVOytCQWxCdEJxNUIsRUFBRW5yQixFQUFFKzBCO2FBa0JXLG9CSnoxRHRCO2FJeTFEZSxvQkp6MURmO1lJeTFEZSxzQkp6MURmO1VJcTFEc0Isc0JBZGY1SixFQUFFbnJCLEVBQUUrMEIsS0FjSSxvQkpyMURmO1VJcTFEZSxzQkpyMURmO1FJdTFEc0Isc0JBaEJmNUosRUFBRW5yQixFQUFFKzBCLEtBZ0JJLG9CSnYxRGY7UUl1MURlLHNCSnYxRGYsYUl5MURxRDthQWdCNUM4VixXQUFXN3FDLEVBQUV3QztNSnoyRHRCLElJeTJEc0JDO01BQU07aUJBQU5BO1FBZVc7O1FBZkwsT0FBTkE7O1dBRVQ7WUFEZWxQLFdBRE5rUDtZQUNHZSxFQURIZjtZQUVULDJCQURlbFA7V0FFdkIsV0FIZXlNLEVBQ0t3RDtXQUVwQixxQkFIZXhELEVBRVhwTDs7b0JBRmE2Tjs7YUFLakIsSUFEb0NDO2FBQ3BDLFdBTGUxQzthQUtDLGNBTERBO2FBS2YsSUFMaUJ5QyxNQUltQkM7O2VBRUEwVTtXQUNwQyxXQVBlcFg7V0FPQyxjQVBEQTtlQUFFeUMsTUFNbUIyVTs7O2VBTXRCaGpCLEVBWkdxTyxTQVlOcW9DLElBWk1yb0M7V0FZVyxXQVpiekMsRUFZSjhxQztXQUFpQixrQkFBZDEyQyxFQVpDNEw7aUJBYWEsSUFBbEIrcUMsSUFiT3RvQyxTQWFXLFdBYmJ6QyxFQWFMK3FDLEtBQWtCLHFCQWJiL3FDOztlQWNLQyxJQWRId0MsU0FjQXVvQyxJQWRBdm9DO1dBY1csV0FkYnpDLEVBY0VnckM7V0FBVyxtQkFBUi9xQzs7O2VBTkdrRixJQVJOMUMsU0FRRzhtQyxJQVJIOW1DO1dBU1csV0FUYnpDLEVBUUt1cEM7V0FDUSxxQkFUYnZwQyxFQVFRbUY7O2VBRUY3TixFQVZKbUwsU0FVQyttQyxJQVZEL21DO1dBV1csV0FYYnpDLEVBVUd3cEM7V0FDVSwyQkFYYnhwQyxFQVVNMUksR0FLUzthQUsxQjJ6QyxXQUFXLzBDLEVBQUVzTTtNSjczRHRCLElJNjNEc0JDO01BQU07aUJBQU5BO1FBZVc7O1FBZkwsT0FBTkE7O1dBRVQ7WUFEZWxQLFdBRE5rUDtZQUNHZSxFQURIZjtZQUVULDJCQURlbFA7V0FFdkIsV0FIZTJDLEVBQ0tzTjtXQUVwQixrQkFIZXROLEVBRVh0Qjs7b0JBRmE2Tjs7YUFLakIsSUFEb0NDO2FBQ3BDLFdBTGV4TTthQUtDLFdBTERBO2FBS2YsSUFMaUJ1TSxNQUltQkM7O2VBRUEwVTtXQUNwQyxXQVBlbGhCO1dBT0MsV0FQREE7ZUFBRXVNLE1BTW1CMlU7OztlQU10QmhqQixFQVpHcU8sU0FZTnFvQyxJQVpNcm9DO1dBWVcsV0FaYnZNLEVBWUo0MEM7V0FBaUIsa0JBQWQxMkMsRUFaQzhCO2lCQWFhLFVBYlh1TTs7ZUFjR3hDLElBZEh3QyxTQWNBc29DLElBZEF0b0M7V0FjVyxXQWRidk0sRUFjRTYwQztXQUFXLG1CQUFSOXFDOzs7ZUFOR2tGLElBUk4xQyxTQVFHOG1DLElBUkg5bUM7V0FTVyxXQVRidk0sRUFRS3F6QztXQUNRLGtCQVRicnpDLEVBUVFpUDs7ZUFFRjdOLEVBVkptTCxTQVVDK21DLElBVkQvbUMsU0FXVyxXQVhidk0sRUFVR3N6QyxLQUNVLGdCQVhidHpDLEVBVU1vQixHQUtTO2FBTTFCNHpDLFdBQVdoMUMsRUFBRXNNO01KbDVEdEIsSUlrNURzQkM7TUFBTTtpQkFBTkE7UUFlVzs7UUFmTCxPQUFOQTs7V0FFVDtZQURlbFAsV0FETmtQO1lBQ0dlLEVBREhmO1lBRVQsMkJBRGVsUDtXQUV2QixXQUhlMkMsRUFDS3NOO1dBRXBCLGtCQUhldE4sRUFFWHRCOztvQkFGYTZOOzthQUtqQixJQURvQ0M7YUFDcEMsV0FMZXhNO2FBS0MsV0FMREE7YUFLZixJQUxpQnVNLE1BSW1CQzs7ZUFFQTBVO1dBQ3BDLFdBUGVsaEI7V0FPQyxXQVBEQTtlQUFFdU0sTUFNbUIyVTs7O2VBTXRCaGpCLEVBWkdxTyxTQVlOcW9DLElBWk1yb0M7V0FZVyxXQVpidk0sRUFZSjQwQztXQUFxRCxrQkFaakQ1MEMsRUFZaUQsV0FBbEQ5QjtpQkFDYyxVQWJYcU87O2VBY0d4QyxJQWRId0MsU0FjQXNvQyxJQWRBdG9DO1dBY1csV0FkYnZNLEVBY0U2MEM7V0FBVyxtQkFBUjlxQzs7O2VBTkdrRixJQVJOMUMsU0FRRzhtQyxJQVJIOW1DO1dBU1csV0FUYnZNLEVBUUtxekM7V0FDUSxrQkFUYnJ6QyxFQVFRaVA7O2VBRUY3TixFQVZKbUwsU0FVQyttQyxJQVZEL21DLFNBV1csV0FYYnZNLEVBVUdzekMsS0FDVSxnQkFYYnR6QyxFQVVNb0IsR0FLUzthQU05QjZ6QztNQUNRLElBRGtCcFcsYUFDbEI7ZUFDTjVKLEVBQUUzb0IsS0FBTSxXQURSbkosSUFDRW1KLEtBQW1DLHlCQURyQ25KLEtBQzBEO01BRHBELG1CQUNOOHhCLElBRndCNEo7YUFTMUJxVyxtQkFBbUJ0NEM7TUFDbEIscUJBRGtCQSxZQUNKO01BQ2YsSUFBSW1GLElBQUosc0JBRm1CbkY7TUFFbkIsU0FDSXU0QztRQUFpQix5Q0FIRnY0QyxJQUdtRDtNQUR0RSxTQUVRdzRDLGFBQWFwN0M7UUpwN0QxQixJSW83RDBCdUc7UUFDbkI7YUFEbUJBLFFBRmpCd0IsSUFHYyxPQURHeEI7VUFFWCwwQkFOUzNELElBSUUyRDt5Q0FJVixPQUpVQTtVQUVYLElBQ1UsSUFIQ0E7bUJBSVQ7TUFOWixTQU9JODBDLFlBQVlyN0MsRUFBRXNVO1FKejdEdkIsSUl5N0R1Qjh6QjtRQUNoQjthQURnQkEsUUFQZHJnQyxJQVFjLE9BREFxZ0M7VUFFUiwwQkFYU3hsQyxJQVNEd2xDO1VBRVIseUJBRUMsT0FKT0E7VUFFUixJQUNVLElBSEZBO21CQUlOO01BWFosU0FZSWtULFVBQVV0N0MsRUFBRXNVO1FKOTdEckIsSUk4N0RxQjh6QjtRQUNkO2FBRGNBLFFBWlpyZ0MsSUFhYyxPQURGcWdDO1VBRU4sMEJBaEJTeGxDLElBY0h3bEM7VUFFTjs7OztVSWg3Q04sYUppN0NzQixRQUhWQTtVQUlMLE9BSktBLElBSUo7TUFDQzs7T0FDRixpQkFEUG1UO09BRVcsZUFyQkkzNEMsSUFtQmYyNEMsT0FDQUMsT0FEQUQ7T0FHUyxvQkFGVEM7T0FHTyxlQURQRTtNQUNPLEdBRFBBLFdBQ0FDO1dBQ0FDOztPQUVBO1NBQXlEO2tDQUF2QyxNQTFCSGg1QyxJQXNCZjg0QyxPQUNBQyxPQURBRDtVQUVBRTs7OztvQkFHa0I7TUFSVCxJQVNUQyxRQUFVLGFBTFZGO01BS1UsR0FBVkUsWUExQkE5ekMsSUEyQm1CO01BVlY7O1FBVXdCLHFCQVJqQzB6Qzs7OztRQVNBSzs4QkFUQUw7OztvREFlWTs7Ozs7O01JcDhDWixnQko4N0NBSztNQU9KLFVBYklGLE9BTUFFLFNBT2M7YUFPbEJDLHFCQUdBcjZDLElBQUltakM7TUFBTyxVQUFYbmpDO09BQ3NCLFlBRGxCbWpDOztRQUFPLFNBQVhuakMsWUFFZ0IwdEMsRUFGaEIxdEMsT0FFYWdELEVBRmJoRCxvQkFFYWdELEVBQUcwcUMsR0FGWnZLO1FBR2tCLElBQVY1dkIsSUFIWnZUO1FBR3NCLGFBQVZ1VCxLQUhSNHZCLEtBR3NEO2FBZTFEbVgscUJBSUF0NkMsSUFBSUUsS0FDdUJpakM7TUFiZixVQVlSampDO09BVGUsVUFTZkEsVUFDdUJpakM7O09BWFIsTUFVZmpqQyxvQkFWVTBSLEdBV2F1eEI7VUFBTjlpQztnQkFEckJMO09BR3NCLFlBRkRLLE9BQU04aUM7O2lCQUQzQm5qQyxZQUlnQjB0QyxFQUpoQjF0QyxPQUlhZ0QsRUFKYmhELG9CQUlhZ0QsRUFBRzBxQyxHQUhLcnRDLE9BQU04aUM7UUFJTCxJQUFWNXZCLElBTFp2VDtRQUtzQixhQUFWdVQsS0FKU2xULE9BQU04aUMsS0FJc0M7YUFPakVvWCxrQkFBbUJDLGdCQUFnQnQ1QztNQWlCckMsR0FqQnFCczVDO09Ba0JKLFNBbEJJQSxtQkFpQmpCRSxrQkFDS0Q7O1dBRExDO01BaUJKLFNBQUlDLHVCQUF1QmxZLFFBQVFwMEI7UUFDakMseUNBbkNtQ25OLElBa0NWdWhDLFFBQVFwMEIsSUFHaEI7TUFIbkIsU0FRSXVzQyx5QkFBeUJDO1FBQzNCLDhCQUQyQkEscUNBRUM7TUFWOUIsU0FvQklDLHVCQUF1QnJZLFFBQVEvOEIsRUFBRTFDO1FBQ25DLHlDQXZEbUM5QixJQXNEVnVoQyxRQUFRLzhCLEVBQUUxQyxFQUdsQjtNQXZCbkIsU0E0QkkrM0MsbUJBQW1CdFksUUFBUXVZLFNBQVM3ckI7UUFDdEMseUNBL0RtQ2p1QixJQThEZHVoQyxRQUFRdVksU0FBUzdyQixLQUdYO01BL0I3QixTQXF2Qkk4ckIsWUFHQUMsVUFBVXpZLFFBQVFVO1FBQU8sSUFHekJnWSxLQUhVMVksVUFBVnlZO1FBQXlCLGFBR3pCQztvQkFIa0JoWTt1QkFHbEJnWTswQkFEK0IsZ0JBNXhCRWo2QyxJQTB4QmpDZzZDLFdBQWtCL1g7MEJBR2UsTUE3eEJBamlDLElBMHhCakNnNkMsVUFHQUMsTUFIa0JoWSxLQUdtRDtNQTN2QnpFLFNBc3RCSWlZLGVBQWUzWSxRQUFRb1ksUUFBUWpxQztZQUFoQnlxQyxrQkFBZ0J4cUM7UUFDakM7YUFEaUJ3cUMsY0FBUVIsUUFDQyx5QkFEREE7VUFFbkIsSUFDSm4xQyxFQURJLGdCQTF2QjZCeEUsSUF3dkJsQm02QztVQUVYLE9BQ0ozMUMsYUFRSyxVQVhVMjFDLFVBQWdCeHFDO1VBRTNCLElBRjJCQywwQkFHL0JwTDtVQUNBLHVCQUorQm9MO1dBTTdCOzJDQTl2QitCNVAsSUF3dkJGNFA7VUFFM0IsSUFRRixVQVZhdXFDLHNDQUFnQnhxQzttQkFXZDtNQWp1QnJCLFNBcXVCSTBxQyxjQUFjOVksUUFBUW9ZO1FBQ3hCLEdBRGdCcFksWUFBUW9ZLFFBQ0UseUJBREZBO1FBRWxCLDBCQXp3QjZCMzVDLElBdXdCbkJ1aEM7UUFFVjs2QkFDVSxzQkFIQUEsUUFBUW9ZOzs7V0FJZixJQUpPcFkscUJBQVFvWSxRQUtRLHlCQUxSQTtXQU1oQixJQUlKbjFDLEVBSkksZ0JBN3dCMkJ4RSxJQXV3Qm5CdWhDO1dBTVIsT0FJSi84QjtZQUNBLDBCQVhZKzhCLDBCQVVaLzhCO1dBSkk7WUFFYyx1QkFSTis4QixnQkFBUW9ZO1lBUUY7O3FCQUFkVyxXQUFVMTRDO1FBS1gsNkJBQVk7TUFsdkJyQixTQWd0Qkk0MkMsYUFBYWpYLFFBQVFvWTtRSm52RjVCLElJbXZGb0JRO1FBQ2Y7YUFEZUEsY0FBUVIsUUFDRyx5QkFESEE7VUFFcEIsMEJBcHZCZ0MzNUMsSUFrdkJwQm02QztZQUVhLGNBRmJBO1VBRXFELE9BRnJEQSxVQUU0RDtNQWx0QjdFLFNBODJCSUksa0JBQ0VDLFFBQVFqWixRQUFRZ1UsS0FBS2tGO1FBQ1YsSUFBVEMsT0FBUyxNQWw1Qm9CMTZDLElBaTVCL0J3NkMsUUFBUWpaLFVBQVJpWjtRQUNXO3dDQWw1Qm9CeDZDLElBaTVCL0J3NkMsUUFBcUJDLE9BQUxsRixLQUNkbUYsT0FJNEI7TUFwM0JwQyxTQW16QklDLGlCQUFpQkgsUUFBUWpaLFFBQVFxWixLQUFLcGhDLEtBQUtxaEMsTUFBTXRGO1lBQWhCdUYsWUFBS256QixZQUFLb3pCO1FBQzdDOzthQURtQ0Q7ZUFBS256Qjs7O2tCQUFLb3pCLG9CQUFNeEYsS0FJckIsb0JBSnFCQSxLQUlnQjs7Y0FKM0I1dEI7ZUFBS296Qjs7OzZCQUFNeEY7Ozs7O3dCQU1nQjt5QkFJckM7eUJBQ0E7eUJBSEE7eUJBSUE7eUJBTkE7OztlQU5ld0Y7eUJBQU14RixLQUdyQixvQkFIcUJBLEtBR2dCOzs2QkFIaEJBOzs7d0JBS2dCO3lCQUhyQzt5QkFBcUM7eUJBS3JDO3lCQUVBO3lCQUpBOztVSTMwRTFCO3lCSnMwRStDQTs7O3NCQWM1QixHQWwxQnJCaUUsa0JBazFCd0M7dUJBQ25CLEdBbjFCckJBLGtCQW0xQndDO3VCQUZuQixHQWoxQnJCQSxrQkFpMUJ3Qzs7OztnQkFJeEMsR0FyMUJBQSx1QkFvMEJzQzd4QjtnQkFtQmpDLHlCQW5CWTZ5QixRQUFRalosUUFBd0JnVTs7YUFBaEJ1RjtZQXFCakMsR0FyQjJDQztjQXFCM0MsR0F6MUJBdkIsdUJBbzBCMkN1QjtjQXdCdEMseUJBeEJZUCxRQUFRalo7WUE4QnpCLEdBbDJCQWlZLHVCQW8wQmlDc0I7WUFnQzVCLHlCQWhDWU4sUUFBUWpaLFFBQXdCZ1U7VUEwQmpELEdBMUIyQ3dGO1lBMEIzQyxHQTkxQkF2Qix1QkFvMEIyQ3VCO1lBNEJ0Qyx5QkE1QllQLFFBQVFqWixRQUF3QmdVO1VBaUMzQiw4QkFBWTtNQXAxQnRDLFNBK3ZCSXlGLHFCQUFxQnpaLFFBQVFvWSxRQUFRbjFDO1FKbHlGNUMsSUlreUY0QjIxQztRQUN2QjthQUR1QkEsY0FBUVI7V0FFN0Isa0NBbnlCaUMzNUMsSUFpeUJJd0UsRUFBUm0xQztVQUt6QiwwQkF0eUI2QjM1QyxJQWl5QlptNkM7VUFLakI7WUFFSixJQVBxQkEsdUJBQVFSO2FBT0MseUJBUERBO1lBUTFCLG1CQXp5QjhCMzVDLElBaXlCWm02Qyx1QkFBZ0IzMUMsRUFRbUIsT0FSbkMyMUM7WUFTUCw0QkExeUJtQm42QyxJQWl5QlptNkM7WUFTUDs7Ozs7b0JBZUk7a0RBeEJHQSxrQkFBUVI7cUJBd0JYLFVBQVZzQjtxQkF4QmFkOzs7O29CQWdDakI7NkJBaENpQkE7OztpQkFZakIsSUFaaUJBLHVCQUFRUjtrQkFZSyx5QkFaTEE7aUJBYWIsNEJBOXlCaUIzNUMsSUFpeUJabTZDO2lCQWFMO21CQUtJO21EQWxCQ0Esa0JBQVFSO29CQWtCVCxVQUFWd0I7b0JBbEJXaEI7OzttQkFlRDs7MENBZkNBLGtCQUFRUjtvQkFlVCxVQUFWMEI7b0JBZldsQjs7aUJBYUwsSUFPTCxVQXBCVUE7Ozs7Z0JBNEJIO2dEQTVCR0Esa0JBQVFSO2lCQTRCWCxVQUFWNkI7aUJBNUJhckI7OztlQW1DakIsMEJBbkNpQkE7WUFTUCxJQTRCVixVQXJDaUJBOztVQUtqQixJQWtDQyxVQXZDZ0JBO21CQXVDNEI7TUF0eUJyRCxTQWltQkl3QixpQkFDQXBhLFFBQVFvWTtRQUNWO1VBRW9CO2tDQUhsQnBZLFFBQVFvWTtXQUlBLHdCQXhvQnlCMzVDLElBdW9CM0I0N0M7O1VBQ0U7Ozs7VUl6bkVOO1lKMm5Fd0I7bUNBSHBCQSxVQUhFakM7YUFNa0I7O2FBQ04sdUJBRFprQyxVQU5BbEM7WUFRRCwwQkE1b0IwQjM1QyxJQTJvQnpCODdDLFdBQzJCO1lBRlQ7YUFHZCxRQTdvQnFCOTdDLElBb29CakN1aEMsaUJBT1F1YSxZQVBSdmE7d0JBT1F1YSxxQkFFQWg2QyxFQUhXbTRDOzs7VUFIRDs7Ozs7O1VBYUs7O1dBRFA5OUM7V0FBVm0rQztXQUNpQixjQURqQkEsU0FmRVg7V0FnQmU7d0JBRFB4OUMsZUFDSnEwQztRQUdXLGtCQW5CdkJqUCxRQUFRb1ksU0FtQmU7MkJBQVhsSixZQUN1QztNQXRuQnZELFNBbWtCSXVMLGlCQUNBemEsUUFBUW9ZO1FBQ1Y7O2dCQURFcFksWUFBUW9ZO2dDQUdrQixnQkF6bUJPMzVDLElBc21CakN1aEM7VUFHb0Q7VUFDbEM7a0NBSmxCQSxnQkFBUW9ZO1dBS0Esd0JBM21CeUIzNUMsSUEwbUIzQjQ3Qzs7VUFDRTs7OztVSTVsRU4sY0o0bUVPO1VBakJTO1dBR1Msc0JBSHJCQSxVQUpFakM7V0FPbUI7O1dBQ0wsdUJBRGRrQyxVQVBBbEM7V0FTSSx3QkEvbUJxQjM1QyxJQThtQnZCODdDO1dBQ0U7Ozs7WUFFTTtxQkFqbkJlOTdDLElBc21CakN1aEMsaUJBUVV1YSxZQVJWdmE7YUFXa0IsUUFBSnovQixFQUpLaWdDO2FBSUQsS0FIUitaO2FBUEVHO2FBQVYzQjs7Ozs7YUFhZ0M7b0NBTnhCd0IsVUFSRm5DO2NBYzBCOztjQUNSLHVCQURadUMsVUFkTnZDO2FBZ0JLLDBCQXRuQm9CMzVDLElBcW5CbkJtOEMsV0FDMkI7YUFGUDtjQUdoQixVQXZuQmVuOEMsSUFzbUJqQ3VoQyxpQkFlYzRhLFlBZmQ1YTtjQWlCa0IsUUFBSmx2QixJQVZLMHZCLE1BT01sRDtjQUdQLEtBRkpzZDtjQWRGRjtjQUFWM0I7OztzQkFrQmE7Ozt1REFJYjtjQXRCVTJCLGdDQUFWM0IsU0FERi9ZO1FBeUJxQixnQkF4Qm5CK1ksU0FETVgsU0F5QmE7c0JBeEJUc0MsaUJBd0JGekwsVUFDdUM7TUE5bEJyRCxTQTBpQkk0TCxVQUNBQyxZQUFZOWEsUUFBUW9ZO1FBQ3RCO2FBRGNwWSxZQUFRb1ksUUFFTTtVQUNwQiw0QkFobEIyQjM1QyxJQTZrQnJCdWhDO1VBR047WUFFTSxJQUFOK2EsSUFBTSxhQWxsQnFCdDhDLElBNmtCckJ1aEM7WUFLQSxHQUxRb1ksV0FLZDJDLElBQ21CO1lBRGI7YUFFSSxjQXBsQmlCdDhDLElBNmtCckJ1aEMsU0FLTithLE1BTE0vYTthQVFhLGNBSG5CK2EsWUFMYzNDO2FBUUs7YUFDRCxjQVRacFksUUFLTithO2FBSWtCOzZCQUFWRSxRQUZSRDthQUVrQixhQVR4QkYsZUFVTUk7YUFFMkMsWUFEM0NDLGFBSFFqTTs7VUFPWjs7OztZQUVxQjt5QkFqQlhsUCxRQUFRb1k7YUFpQkc7d0JBakJ2QjBDLGVBa0JJbmdEO1lBRTJDLGNBRDNDeWdELFdBRlFuTTtxQkFJbUM7TUFoa0JuRCxTQStESW9NLFlBaUNBcEMsUUFuQmlCalosUUFtQkRvWSxRQUFtQ3Y0QztRQTlCckQ7aUJBR0kwN0MsU0FBU3ZiLFFBQVFnWTtVQUVuQixTQUZtQkEsUUFFbkIsY0F4RkFDO1VBeUZFO1lBRWMseUJBNUdpQng1QyxJQXVHdEJ1aEM7WUFHVCxrQ0ExRytCdmhDLElBdUd0QnVoQztVQUtrQjtrQkFDaEI7WUFFSTRZO1FBQ2pCO2FBRGlCQSxjQW1CRFIsUUFsQlUseUJBa0JWQTtVQWpCSiwwQkFqSHFCMzVDLElBK0doQm02QyxXQUVMOzs7O2NBS0gsU0FQUUEsVUFWTVU7Y0FpQmQsY0FQUVY7OztjQU1SLFNBTlFBLFVBVGYzZ0M7Y0FlTyxjQU5RMmdDOzs7Y0FLUixTQUxRQSxVQVZmUztjQWVPLGNBTFFUOzs7Y0FJUixTQUpRQSxVQVhNMEM7Y0FlZCxjQUpRMUM7OztjQUdSLFNBSFFBLFVBWGZsOUI7Y0FjTyxjQUhRazlCOzs7VUFFTDtXQU9WLEtBbkJxQlU7V0FtQnJCLEtBbEJBcmhDO1dBa0JBLEtBbkJBb2hDO1dBbUJBLEtBcEJxQmlDO1dBb0JyQixLQXBCQTUvQjtVQStCSixHQXBCbUJrOUIsY0FtQkRSLFFBQ1EseUJBRFJBO1VBakJKO1dBa0I0Qzs7O2dCQWxIeERIOztrQkF5SE8sa0JBUlBnQixRQW5CaUJMOzs7V0E0QmIsd0JBM0k2Qm42QyxJQStHaEJtNkM7VUE0QmI7O2NBRWlCO3NDQTlCSkEsVUFtQkRSO2VBV0s7Ozt1QkFYckJhO3VCQVdJdUM7dUJBWFlwRDs7Ozs7dUJBQW1DdjRDOzBCQUVqRHdpQyxNQVNXN0I7OztZQUliO3FCQWZBeVk7cUJBbkJpQkw7cUJBbUJEUjs7Ozs7cUJBQW1DdjRDO3dCQUVqRHdpQztVQWdCRixPQWhCRUE7O2FBa0JBLE9BcklGNFY7Y0FzSUksdUJBeENhVzthQXdDcUM7c0JBckJ0REssUUFuQmlCTCxVQW1CRFIsNEJBQW1DdjRDOzthQStCakQ7c0JBL0JGbzVDLFFBbkJpQkwsVUFtQkRSLDRCQUFtQ3Y0Qzs7YUE0QmpEO3NCQTVCRm81QyxRQW5CaUJMLFVBbUJEUiw0QkFBbUN2NEMsV0FObkM7TUExRnBCLFNBb0lJNDdDO1FBaUJBeEMsUUFkUWpaLFFBY1FvWSxRQUFRa0QsTUFBTWpDLEtBQUtwaEMsS0FBS3FoQyxNQUFNejVDLElBQUl0QztRQWJwRCxHQURVeWlDLFlBY1FvWSxRQWJRLHlCQWFSQTtRQVpaLElBSUpwRSxLQUpJLGdCQTNLNkJ2MUMsSUF5S3pCdWhDO1FBRUosVUFJSmdVO1VBRkEsSUFVUTRFLFVBZEE1WTtVQWVWLEdBRFU0WSxjQUFRUixRQUNRLHlCQURSQTtVQVZoQjtXQVd3RDtxQkFDeENrRCxNQUFNdGI7Y0FDRjtvQ0FERUEsUUFGTm9ZO2VBR0k7Ozt1QkFIcEJhO3VCQUdJdUM7dUJBSFlwRDt1QkFFQWtEO3VCQUZjakM7dUJBQUtwaEM7dUJBQUtxaEM7dUJBQU16NUM7dUJBQUl0QzswQkFHckNFLE1BRWE7V0FDdEIsdUJBN0w2QmdCLElBdUx6Qm02QztVQU1KLFNBRUpnRDtnQ0FEYyxxQkFQVU4sTUFBaEIxQzs7b0JBUVJnRDs7O2VBV0E7d0JBbkJBM0M7d0JBQVFMO3dCQUFRUjt3QkFBUWtEO3dCQUFNakM7d0JBQUtwaEM7d0JBQUtxaEM7d0JBQU16NUM7d0JBQUl0Qzs7OztlQVF6QixHQTlLekIwNkM7aUJBdUxBO3VCQWpCUVc7a0JBaUJSLFFBakJ3QjBDLGlCQVF4Qk07aUJBY0EscUJBdEJ3QkM7OztVQXNCeEIsT0E1TEE1RDttQkFnTUU7cUJBMUJGZ0I7cUJBQVFMO3FCQUFRUjtxQkFBUWtEO3FCQUFNakM7cUJBQUtwaEM7cUJBQUtxaEM7cUJBQU16NUM7cUJBQUl0Qzs7bUJBNkJoRCx1QkE3Qk1xN0M7UUFQUjtpQkFPQUs7aUJBZFFqWjtpQkFjUW9ZO2lCQUFjaUI7aUJBQUtwaEM7aUJBQUtxaEM7aUJBQU16NUM7aUJBQUl0Qzs7O2lCQVJsRHkyQyxLQUV1QjtNQS9JM0IsU0FxTEkySDtRQUdBMUMsUUFBUWpaLFFBQVFvWSxRQUFRa0QsTUFBTWpDLEtBQUtwaEMsS0FBS3FoQyxNQUFNejVDLElBb0I5Q3RDLElBcEJzREU7UUFDeEQsR0FEVXVpQyxZQUFRb1ksUUFDUSx5QkFEUkE7UUFDd0MsU0FDdEQyRCxXQUE4QkM7VUFFakI7bUJBSmYvQzttQkFBUWpaO21CQUFRb1k7bUJBQWNpQjttQkFBS3BoQzttQkFBS3FoQzttQkFBTXo1QzttQkFvQjlDdEM7bUJBcEJzREU7bUJBRXRCdStDO21CQUVqQixnQkE5TmtCdjlDLElBME56QnVoQyxTQUlvQjtRQUg0QixVQW1CeER6aUM7b0JBcEJzREUsNEJBYy9CO2FBZEM2OUM7c0JBQThCNzlDLGtCQWtCM0I7Z0JBRkg0QyxFQWhCOEI1QzttQkFFcERzK0MsZ0JBY3NCMTdDO29CQWhCOEI1QyxrQkFpQjFCO2NBRkgwVCxJQWY2QjFUO2lCQUVwRHMrQyxnQkFhdUI1cUM7UUFLbEIsa0JBQVA1VCxJQUFxQjtNQTVNekIsU0ErTUl1K0M7UUF3b0JtQjdDLFFBQVFqWixRQTlOSm9ZLFFBdmFDaUIsS0FBS3BoQyxLQUFLcWhDLE1BQU16NUMsSUFBSXRDLElBQUlFLEtBQUt1K0MsUUFxb0JGaEk7UUFub0JyRDs7Ozs7OztpQkFLSXVJLGdCQUFpQix3QkFQS2xELElBT21CO1FBTDdDLFNBTUltRCxnQkFBZ0Isd0JBUld2a0MsSUFRWTtRQU4zQyxTQU9Jd2tDLGlCQUFpQix5QkFUZW5ELEtBU1U7UUFQOUMsU0FRSW9ELGVBQWlCLHVCQVZxQjc4QyxHQVVFO1FBUjVDLFNBU0k4OEMsZUFBaUIsdUJBWHlCcC9DLEdBV0Y7UUFUNUMsU0FVSXEvQyxnQkFBaUIsd0JBWjZCbi9DLElBWUw7UUFWN0MsU0FXSW8vQyxtQkFBaUIsdUJBYmtDYixPQWFQO1FBWGhELFNBYUljO1VBWUssbUJBQVk7a0RBQ08sT0FBckJ2L0M7O1dBQ3FCOztxQkFEckJBOztnQkFHQSxJQURvQjhDLEVBRnBCOUM7Z0JBR0EsT0FsUUwwNkM7OEJBaVF5QjUzQzt5QkFFZixrQkFxbUJTNDRDLFFBQVFqWjtjQWptQkssT0FSM0J6aUM7O3FCQS9QTDA2Qzs7dUJBc1FVLGtCQWttQlNnQixRQUFRalo7cUJBem1CdEJ6aUMsSUFTOEI7UUFuQ3JDLFNBc0NJdy9DLFdBQVcvSSxLQUFpQnoyQztVQUM5QixVQUQ4QkE7V0FFZCxPQUZjQTs7WUFDOUIsU0FEOEJBOztnQkFNNUIsSUFEb0JpakMsTUFMUWpqQztnQkFNNUIsT0FqUkYwNkM7OEJBZ1JzQnpYO3lCQUVmLGtCQXNsQll5WSxRQUFRalosUUE3bEJkZ1U7Y0FHd0IsT0FIUHoyQzs7cUJBM1E5QjA2Qzs7dUJBcVJPLGtCQW1sQllnQixRQUFRalosUUE3bEJkZ1U7cUJBQWlCejJDLElBVW1CO1FBaERuRCxTQXNESXkvQyxXQUFXLzVDLEVBQXFCMUY7VUFBd0IsVUFBeEJBO1dBQ2xCOztZQUQwQyxTQUF4QkE7OztnQkFPaEMsSUFEbUJpakMsTUFOYWpqQztnQkFPaEMsT0FsU0YwNkM7NEJBaVNxQnpYO3lCQUVkLGtCQXFrQll5WSxRQUFRalosUUE3a0JkLzhCO3NCQUVtQixJQUFWMHdDLFFBRllwMkMsT0FFRixVQUFWbzJDOztnQkFFcEIsSUFEb0JzSixRQUhZMS9DO2dCQUloQyxPQS9SRjA2Qzs0QkE4UnNCZ0Y7eUJBRWYsa0JBd2tCWWhFLFFBQVFqWixRQTdrQmQvOEI7WUFTTSx5QkFva0JBZzJDLFFBQVFqWixRQTdrQmQvOEIsVUFTK0M7UUEvRDlELFNBaUVJaTZDLFlBQVlqNkMsR0FBaUIsa0JBQWpCQSxFQUFpQixXQUFZO1FBakU3QyxTQWtFSWs2QyxnQkFBZ0JsNkMsR0FBaUIsa0JBQWpCQSxFQUFpQixlQUFnQjs7UUFsRXJELFVBbW9CcUQrd0M7Ozs7O1lBdmE1QjsyQkF1YUloVSxRQTlOSm9ZO2FBek1BO2FBL0lyQmdGLGtCQStJVTdOOzs7WUFnQkU7MENBdVphdlAsUUE5TkpvWTthQXhMQSxjQURuQnNCLGdCQXlMbUJ0QjthQXhMQTthQUNELGNBcVpLcFksUUF2WnZCMFo7YUFFa0I7YUFDTix1QkFESnVCO1lBRVQ7YUFDbUM7MkNBRmxDN1g7MEJBRUVpYSxVQUpNdk47OzZCQU9hLGdCQUxyQjFNLFVBRlEwTTtZQURFLElBL0pac047O2tDQUVGLE1Bb2pCMkJwZCxRQTlOSm9ZOztZQWhVQTs0QkE4aEJJcFksUUE5TkpvWTthQWhVQTthQUNwQix5QkFEUzlIO2FBeEJWOE07OztZQTJEcUI7NEJBMmZJcGQsUUE5TkpvWTthQTdSQTs7WUFFcEI7YUFDRCxrQkFGRWtGLHVCQUVFQyxVQUhNdE07OzZCQUNScU0sVUFEUXJNO1lBQVcsSUEzRHJCbU07OztZQXNDUTs4QkFnaEJ5Q3BKLEtBaGhCekI7YUFDSCxlQStnQkloVSxRQTlOSm9ZO2FBalRBO1lBQ3BCO2FBQ2lDOzswQkFBOUJvRixVQUZNcE07O2FBTVI7NENBUEE1eUMsTUFDUTR5QztjQU1SOzt5QkFEbUJ4eUMsTUFBTTJ5QztZQU5uQixJQXRDUjZMOzs7WUF5VkosR0E2TjZCcGQsWUE5TkpvWSxRQUNDLHlCQUREQTtZQUdWOzsrQkFDRm4xQyxHQUNYLHVCQUZFMUQsU0FDUzBELEVBQ2U7YUFGYjt1QkFJRDZYLElBQUU3WDtnQkFDZCxNQURjQSxJQUFGNlg7c0JBQ1pqZixFQURZaWY7a0JBRVY7b0NBTkF2YixTQU15QixZQUQzQjFEO29CQUNFLFNBREZBO3VCQURjb0gsTUFDZHBIOztnQkFIQSxRQUtJO2FBUFM7dUJBVVNta0M7Z0JBQ3RCLHlDQXpxQmlDdmhDLElBd3FCWHVoQyxRQUcwQjthQWJuQzsrQkF1QllBLFFBQVFvWTtnQkp0ckZ4QyxJSXNyRmdDUTtnQkFDekI7cUJBRHlCQSxjQUFRUixRQUNQLHlCQURPQTtrQkFFM0IsSUFNSm4xQyxFQU5JLGdCQXZyQjJCeEUsSUFxckJSbTZDO2tCQUVuQixVQU1KMzFDO29CQUZBO2tDQU51QjIxQzs7NEJBUXZCMzFDLEVBSkEsT0FKdUIyMUM7a0JBRW5CLFNBRm1CQTtrQkFTdkI7OzJCQUdBZ0YsMkNBWitCeEYsUUFRL0JuMUM7OzJCQUlBMjZDLG9DQVorQnhGLFFBUS9CbjFDLElBQ2lEO2FBaEN0QzsrQkFtQ2UrOEIsUUFvQlNvWSxRQXBCT24xQztvQkFBaEIyMUMsa0JBQWdCOTlCO2dCQUM1QztxQkFENEI4OUIsY0FvQlNSLFFBbkJYLHlCQW1CV0E7a0JBbEIvQix3QkFuc0IyQjM1QyxJQWlzQkxtNkM7a0JBRXRCLFNBRnNDNzlCOzs7O29DQUkxQyxTQUowQ0QsS0FJMUMsT0FKMEI4OUI7OzZCQUFnQjc5Qjs7OztzQkFPMUMsSUFhMkI0K0IsVUFwQkRmO3NCQXFCNUIsR0FENkJlLGNBQVF2QixRQUNYLHlCQURXQTtzQkFibkMsSUE0QkFwOUIsSUFiSSxnQkF2dEIyQnZjLElBcXRCSms3QztzQkFFdkIsVUFhSjMrQjt3QkFQQSxJQVIyQjIrQix1QkFBUXZCO3lCQVFMLHlCQVJLQTt3QkFTdkIsSUFDUm45QixJQURRLGdCQTl0Qm1CeGMsSUFxdEJKazdDO2tDQVV2QjErQjt5QkFHSywyQkFia0IwK0I7d0JBV3ZCLFVBL0JzQzcrQixJQThCdENHO3dCQURRLFNBVGUwK0I7d0JBV3ZCOztpQ0EzQ0pnRSxzQ0FnQ21DdkY7O2lDQWhDbkN1RiwrQkFnQ21DdkY7Z0NBZW5DcDlCO3dCQVhBLFNBeEIwQ0YsS0F5QjFDLG9CQUwyQjYrQjtzQkFnQjNCLFVBcEMwQzcrQixJQW1DMUNFO3NCQTVCQSxTQWEyQjIrQjtzQkFnQjNCOzsrQkFoREFnRSxzQ0FnQ21DdkY7OytCQWhDbkN1RiwrQkFnQ21DdkY7a0JBWlosc0JBUm1CdDlCO29CQVMxQyxTQVQwQ0M7b0JBUzFDLFNBVDBCNjlCO29CQVMxQjs7NkJBckJBK0Usc0NBZ0NtQ3ZGOzs2QkFoQ25DdUYsK0JBZ0NtQ3ZGO2tCQVJuQyxVQVowQ3Q5QixJQVkxQixvQkFaVTg5QjtrQkFnQjFCLFNBaEIwQzk5QjtrQkFFdEMsSUFjSixVQWhCMEI4OUIsc0NBQWdCOTlCOzJCQWlCUTthQXBEdkM7dUJBbUNla2xCLFFBb0JTb1ksUUFwQk9uMUM7Z0JKbHNGbkQ7eUJJa3NGUzI2Qyw4QkFBMEI1ZCxRQW9CU29ZLFFBcEJPbjFDO1lBbkMvQixHQTJOYys4QixZQTlOSm9ZLFFBOEVHLHlCQTlFSEE7WUFHVixhQTRFUCxnQkExdUIyQjM1QyxJQXkzQk51aEM7WUEvSXJCO2FBQ0ssY0E4SWdCQSxnQkFqSmhCOGQsVUFBVGpGOztpQkFBU2lGLFVBQVRqRixVQWlKeUI3WTtZQXpNM0IsR0F3REU2WSxjQTdFcUJULFFBcUJHLHlCQXJCSEE7WUFHVjthQW1CTCxrQkFqckJ5QjM1QyxJQXd1Qi9CbzZDO2FBdkRNLG1DQXVETkEsa0JBN0VxQlQsUUFzQm5CbjFDO2FBNkRTLDJCQWhGWDFEO2FBZ0ZXLFdBTkZ1K0MsUUFPYyxhQUR2QjFkO2FBalFxQixlQWdRckIyWSxTQWxGcUJYO2FBOUtBO1lBQ3BCO2FBQ29DOzRDQUh6QjJGOzBCQUdSQyxVQUZNeEw7OzZCQUtjLGdCQU5adUwsV0FDRnZMO1lBaUxDLElBM1ZYNEs7OztZQXFJcUI7NEJBaWJJcGQsUUE5TkpvWTthQW5OQTthQXJJckJnRixrQkFxSVV4Szs7O1lBaklaOzt1QkFBZ0IzRDtnQkFDWCwyQkFEV0EsMkJBR2M7YUFPUCxlQXdpQklqUCxRQTlOSm9ZO2FBMVVBO2FBQ1g7OztlQUxQO3lDQUlPOEY7OztlQUtQOztpQkFyVUxqRzttQkF1VXlDLFlBUDdCaUc7bUJBaFNkO3FCQXcwQjZCbGU7OztzQkF0aUJmLFlBRkFrZTtZQVZaLElBSkVkOzs7WUEySXFCOzRCQTJhSXBkLFFBOU5Kb1k7YUE3TUE7YUFDcEIseUJBRFMrRjthQTNJVmY7OztZQTRCUTs4QkEwaEJ5Q3BKLEtBMWhCekI7YUFDSCxlQXloQkloVSxRQTlOSm9ZO2FBM1RBO1lBQ3BCO2FBQzRCOzswQkFBekJrRyxXQUZNRDs7YUFNUjs0Q0FQQUQsTUFDUUM7Y0FNUjs7eUJBRG1CRyxPQUFNRDtZQU5uQixJQTVCUm5COzs7WUF3SXFCOzRCQThhSXBkLFFBOU5Kb1k7YUFoTkE7YUF4SXJCZ0Ysa0JBd0lVcUI7OztZQWFFOzRDQWlhYXplLFFBOU5Kb1k7YUFsTUQsZUFnYUtwWSxRQWphdkI0WjthQUNrQjthQUNDLGVBRm5CQSxrQkFtTW1CeEI7YUFqTUE7YUFDUCx5QkFGSnNHO1lBR1Q7YUFDaUM7NENBRmhDcmI7MEJBRUV1YixXQUhNRDs7NkJBTVcsaUJBTG5CdGIsWUFEUXNiO1lBRkUsSUFySlp2Qjs7OztZQTJIUTs4QkEyYnlDcEosS0EzYnpCO2FBQ0gsZUEwYkloVSxRQTlOSm9ZO2FBNU5BO1lBQ3BCO2FBQzBCOzswQkFBdkJ5RyxVQUZNM087O2FBTVI7NENBUEFseUMsTUFDUWt5QztjQU1SOzt5QkFEbUIveEMsTUFBTWl5QztZQU5uQixJQTNIUmdOOzs7O1lBa0pxQjsyQkFvYUlwZCxRQTlOSm9ZO2FBdE1BO2FBbEpyQmdGLGtCQXNqQmlEcEosS0FwYXZDdEU7Ozs7OztZQWhGUyxHQW9mTTFQLFlBOU5Kb1k7Y0F0UmtDO3NDQXJZeEIzNUMsSUF5M0JOdWhDO2VBOUNSLEtBQVA0Yjs7Y0FBTzs7Ozs7Ozs7Ozs7O2NBcmNJOzhCQW1mSTViLFFBOU5Kb1k7ZUFyUkE7O2NBMGNBLFVBeUM0QnBFOzs7OEJBbGYvQ3QwQzs7Ozt5QkFrZitDczBDLFVBbGYvQ3QwQzs0QkEyY3dCO2NBMWN6QjtlQUNELGtCQUZFQSxxQkFFRW8vQyxVQUhNak87OytCQUNSbnhDLFFBRFFteEM7Y0FBVyxJQW5FckJ1TTs7Ozs7Ozs7O2NBaUxGLGtDQXBmaUMzK0MsSUF5M0JkdzZDLFFBQWdDakY7Ozs7Ozs7O1lBcmdCakQ7O2FBRHlEO2FBQS9DOytCQXNnQk9pRixRQUFRalosUUF0Z0JrQixzQkFzZ0JNZ1U7YUFwZ0I1QixlQW9nQkloVSxRQTlOSm9ZO2FBdFNBO1lBQ3BCO2FBQ2lDOzJCQUpoQ2g2QyxRQUlnQzswQkFBOUIyZ0QsVUFGTXJOOzthQU04Qjs7Y0FBdEMsOEJBQXFCLG9CQU5iQTtjQU1SOzs7eUJBUkF0ekMsUUFPbUJVLE1BQU0wd0MsT0FBTzRDO1lBTmxDLElBakRBZ0w7Ozs7Ozs7Ozs7WUFpSDhCOzthQUFkO2FBQWQ7YUFzY047Y0FEcUM4QjtnQkFBVUY7a0JBeDJCN0MvRzs7b0JBZzNCSyxrQkFSY2dCLFFBQVFqWjs7Z0JBQWtCZ2Y7O1lBUy9DLFNBVHFEaEw7Ozs7Ozs7Ozs7b0JBU2pEbUw7O3NCQVRpRG5MOzs7Ozs7O2lDQVNqRG1MOzs7OztpQkFUc0NGO3lCQUFXakwsU0FTakRtTDs7eUJBVGlEbkwsU0FTakRtTDswQkFVRztZQXhkMkI7YUF5ZGxDLFNBbkJJbkgsS0FRQW1IO2FBN2NxQixlQW9jSW5mLFFBOU5Kb1k7YUF0T0E7WUFDcEI7Y0F6SHVCOztlQUdGLGlDQXlqQkxhLFFBQVFqWjs7ZUExakJILDBCQUFSa0I7Y0FGVTtlQTBISzsyQkFBekJrZSxVQUZNNU87O2FBTTBCOztjQUFsQyw4QkFBcUIsZ0JBTmJBO2NBTVI7Ozt5QkFUQWp5QyxNQVFtQkQsTUFBTUQsT0FBT3F5QztZQU5KLElBakg5QjBNOzs7UUlwekRBOztvQkowMkVpRHBKOzs7Ozs7O2dCQXplaEM7c0NBaFpjdjFDLElBeTNCTnVoQztpQkF6ZXZCO2lCQURtRDtpQkFBckQ7O29CQTBlaUJpWixRQUFRalosZ0JBMWVjO2lCQUVsQixjQXdlSUEsZ0JBOU5Kb1k7aUJBMVFBO2dCQUNwQjtpQkFDbUM7NkJBTGxDejZDLE1BS2tDOzhCQUFoQzBoRCxRQUZNcFE7O2lCQU04Qjs7a0JBQXRDLDZCQUFxQixvQkFOYkE7a0JBTVI7Ozs2QkFUQXR4QyxNQVFtQkgsTUFBTUksT0FBT3N4QztnQkFOakI7Ozs7Z0JBWWM7c0NBNVpBendDLElBeTNCTnVoQztpQkE3ZFQ7aUJBQWQ7aUJBREY7O29CQThkaUJpWixRQUFRalosZ0JBOWRjO2lCQUVsQixjQTRkSUEsZ0JBOU5Kb1k7aUJBOVBBO2dCQUNwQjtpQkFDdUM7K0JBTHRDdDZDLFFBS3NDOzhCQUFwQ3doRCxVQUZNblE7O2lCQU04Qjs7a0JBQXRDLDZCQUFxQixvQkFOYkE7a0JBTVI7Ozs2QkFUQXJ4QyxRQVFtQkosTUFBTUssT0FBT3F4QztnQkFOSDsrQkF6Ri9CZ087O3FCQXNqQmlEcEo7YUFqZGhDO21DQXhhY3YxQyxJQXkzQk51aEM7Y0FqZHZCO2NBRG1EO2NBQXJEOztpQkFrZGlCaVosUUFBUWpaLGdCQWxkYztjQUVsQixjQWdkSUEsZ0JBOU5Kb1k7Y0FsUEE7YUFDcEI7Y0FDbUM7NEJBTGxDbjZDLFFBS2tDOzJCQUFoQ3NoRCxVQUZNbFE7O2NBTThCOztlQUF0Qyw2QkFBcUIsb0JBTmJBO2VBTVI7OzswQkFUQXB4QyxRQVFtQkosTUFBTUssT0FBT294QzthQU5qQixJQXJHakI4Tjs7Ozs7O2FBc0xGLGtDQXpmaUMzK0MsSUF5M0JOdWhDLGdCQUF3QmdVO1FBOVhHLE9BMWV0RGlFO1VBZ2YwQixhQTNReEJnRSxhQTJRd0IsWUE3UUY1QztVQStReEIsR0EvUXdCRSxPQStReEIsa0JBc1htQk4sUUFBUWpaLFFBQXdCZ1U7VUF4WHpCLElBRWtCLFNBN1Fma0ksYUE2UWUsWUEvUWZqa0M7VUFpUjdCLEdBalI2Qm1PLE9BaVI3QixrQkFvWG1CNnlCLFFBQVFqWixRQUF3QmdVO1VBeFh6QixJQUlrQixTQTlRMUNtSSxjQThRMEMsYUFqUlY3QztVQW1SbEMsR0FuUmtDRSxRQW1SbEMsa0JBa1htQlAsUUFBUWpaLFFBQXdCZ1U7VUF4WHpCLElBTWtCLFNBL1ExQ3FJLFlBK1EwQyxVQUN6QixpQkFwUnlCOStDO1VBb1JnQixRQUM1RCxrQkFnWG1CMDdDLFFBQVFqWixRQUF3QmdVO1VBeFh6QjtXQVF3QixTQWpSckJzSTtXQWlScUIsVUFDL0IsaUJBdFI2QjcrQztVQXNSbUI7WUFDbkUsU0F2UndDb0MsT0Fxb0JXbTBDO1lBOVduRCxrQkE4V21CaUYsUUFBUWpaO1VBeFhELElBN1FGd2YsT0FBZ0IzL0MsSUFBaEJ3NUMsS0FBZ0J4NUM7VUF5UnRCLEdBelJNMi9DLE9BeVJOLGtCQTRXQ3ZHLFFBQVFqWjtRQTVXa0MsYUF0UmhDb2MsWUFzUmdDLFdBelJyQnY4QztRQStSeEMsR0EvUndDNC9DOztVQStSeEMsU0FzV21Eekw7Ozs7O1VBcFdsQixpQkFwZ0JqQ2lFO3VCQXNnQkksa0JBa1dlZ0IsUUFBUWpaLFFBQXdCZ1U7UUFsV0gsT0FwTjlDb0osVUFzTk07TUF2ZlosU0FtQ1E1QyxNQUtKL0IsVUFtZFFMO1FKOWhGZixJSTJrRWlCcFksUUFBVnlZO1FBQ0Y7YUFEWXpZLFlBbWRGb1ksUUFsZGdCLG1CQUR4QkssVUFBVXpZO1VBRUosMEJBNUUyQnZoQyxJQTBFdkJ1aEM7VUFFSjtZQVlhLElBR1gyWixVQWpCRTNaO1lBa0JaLEdBRFUyWixjQWtjQXZCLFFBamNnQix5QkFpY2hCQTtZQXJjVzthQUtmLHdCQTdGNkIzNUMsSUEyRnpCazdDO2FBRUo7O2dCQUNLLFlBcEJDM1osUUFpQkYyWixrQkFrY0F2QjtnQkE5YkQsWUFyQkdwWSxRQWlCRjJaLFVBa2NBdkI7YUEvY01uSjttQkF5c0JkdUosWUE3c0JBQyxVQUFVelksUUFJSWlQOztZQUdaLElBNGNGMkosVUFuZFU1WTtZQW9kWixHQURFNFksY0FBUVI7OztjQUdGLHNCQWhpQjJCMzVDLElBNmhCakNtNkM7Y0FHTSxTQXVDSjMxQzs7Ozs7Ozs7aUNBaENBLFlBVkYyMUMsa0JBQVFSOzs7cUJBWWlCO29DQVp6QlEsa0JBQVFSO3NCQVlpQjt1Q0FBWGhKOzt5QkE4Qlpuc0M7OztnQ0FyQ0EsWUFMRjIxQyxrQkFBUVI7OztvQkFPaUI7bUNBUHpCUSxrQkFBUVI7cUJBT2lCO3NDQUFYL0k7Ozs7eUJBbUNacHNDO2dCQWhCdUI7K0JBMUJ6QjIxQyxrQkFBUVI7aUJBMEJpQjtrQ0FBWDlJOzt5QkFnQlpyc0M7OztvQkF4QnVCO21DQWxCekIyMUMsa0JBQVFSO3FCQWtCaUI7eUNBQVg3STs7OztvQkFrQnNCO3VCQXBDcENxSjs7c0JBQVFSOzs7O3NCQW9DNEIsZ0JBamtCSDM1QyxJQTZoQmpDbTZDO3NCQXFDeUI7cUNBckN6QkEsa0JBQVFSO3VCQXFDaUI7d0NBQVgxSTs7O3FCQUdXO29DQXhDekJrSixVQUFRUjtzQkF3Q2lCO3dDQUFYdEk7OztvQkF6Qlc7bUNBZnpCOEksa0JBQVFSO3FCQWVpQjt5Q0FBWGxJOzs7b0JBY1c7b0NBN0J6QjBJLGtCQUFRUjtxQkE2QmlCO3NDQUFYaEk7OztnQ0FSWixpQkFyQkZ3SSxrQkFBUVI7OztnQ0FnQ04saUJBaENGUSxrQkFBUVI7OztvQkF1QmlCO29DQXZCekJRLGtCQUFRUjtxQkF1QmlCO3NDQUFYOUg7OztvQkFXVztvQ0FsQ3pCc0ksa0JBQVFSO3FCQWtDaUI7c0NBQVg1SDs7Ozs7Y0loakVaO2VKeWpFdUI7OEJBM0N6Qm9JLGtCQUFRUjtnQkEyQ2lCO2tDQUR2Qm4xQyxHQUNZa3NDO1lBdmZaLElBQVlEO21CQXNzQmRzSixZQTdzQkFDLFVBQVV6WSxRQU9Ja1A7VUFMUixJQVFKLFVBVlFsUDttQkFKOEM7TUFwQzVELHFDQWxDcUN2aEMsS0F3NUJQO2FBTzVCaWhELHVCQUF1QmpoRCxJQUFJRTtNQUNYLDhCQURPRixLQUNQOztRQUNOLHdCQURBaWlDLElBRGlCL2hDLE9BQUpGOzs7O1VBTWpCLHlCQU5xQkU7VUFNckIseUNBTmlCRjttQkFNTTthQUk3QmtoRCx3QkFBd0JsaEQ7TUFDUjtPQUQyQnVrQztPQUFOdEM7T0FDckIsMEJBRFFqaUM7T0FDUjs7UUFDTix3QkFEQWdsQyxNQUNnQixhQUZXL0MsTUFBYmppQzs7OztTQUl4Qix5Q0FKd0JBLElBQW1CdWtDOzs7OztPQTUzRjNDM0M7T0FUQUY7T0FiQUw7T0FHQUM7T0FNQUc7T0F3Q0FPO09BazZDSXNVO09BK1FBa0I7T0ErR0FPO09Bb0JBSTtPQXFCQUM7T0F4NkJBckQ7T0F1aENKc0U7T0ErNUJBNEg7T0FVQUM7T0F6b0ZBMWQ7T0FnTEFjO09BMmdDQTZSO09BejFCQXJSO09BNnlDQXdUO09BL3hDSTNTO09BdUlKQztPQStmQW9QOzthcUNwd0NBbU0sU0FBUzlvQixFQUFFbnJCO1VBQVcrMEI7YXJDdzlDbEJxVTt3QnFDdjlDVzVtQyxLQUFPLFdBRFh4QyxFQUNJd0MsS0FBTyxrQkFEYjJvQixFQUFFbnJCLEVBQ2dDOztlQURyQiswQjthQUV0Qm1mLFNBQVMvb0IsRUFBRWoxQjtVQUFXNitCO2FyQ3M5Q2xCcVU7d0JxQ3I5Q1c1bUMsS0FBTyxXQURYdE0sRUFDSXNNLEtBQU8sa0JBRGIyb0IsRUFBRWoxQixFQUNnQzs7ZUFEckI2K0I7YUFFdEJvZixVQUFVaHBCLEVBQUV0ekI7TXpDdkJqQixJeUN1QjZCazlCLG9CckNtdURwQnVWLGFxQ251RE1uZixFQUFFdHpCLEdBQVlrOUI7YUFJeEJxZixRQUFRdjhDLEdBQUdrOUIsS0FBTSwrQnpDM0J0QixVeUMyQmFsOUIsR0FBR2s5QixJQUE0QjthQUN2Q3NmLFFBQVFuK0MsRUFBRTYrQixLQUFNLCtCekM1QnJCLFV5QzRCYTcrQixFQUFFNitCLElBQTJCO2FBQ3JDdWYsU0FBU3o4QyxHQUFHazlCO01BQU0sZ0N6QzdCdkIsVXlDNkJjbDlCLEdBQUdrOUIsSUFBNkI7YUFDekN3ZixTQUFTcitDLEVBQUU2K0IsS0FBTSxnQ3pDOUJ0QixVeUM4QmM3K0IsRUFBRTYrQixJQUE0QjthQUN2Q3lmLE9BQU96ZixLQUFNLGV6QkZiLzlCLE95QkVPKzlCLElBQXdCO2FBQy9CMGYsUUFBUTFmLEtBQU0sZXpCRmQ5OUIsT3lCRVE4OUIsSUFBd0I7YUFFaEMyZixTQUFTdnBCO016Q2xDZCxJeUNrQ3lCNEo7ZUFDbEIvQixJQUFHeHdCO1FBQ0ssSUFBTm5KLElBQU07UUFDVixXQURJQSxJQURDbUo7UUFHSCxrQkFKTzJvQixFQUlQLFNBRkU5eEIsS0FFbUI7YXJDcThDbkIrdkMsWXFDeDhDRnBXLE1BRGtCK0I7YUFPcEI0ZixRQUFRNWYsS0FBTSx5QkFBY25nQyxHQUFLLE9BQUxBLENBQU0sRUFBMUJtZ0MsSUFBK0I7Ozs7T0FkdkNxZjtPQUlBSTtPQUNBQztPQVNBRTtPQWJBTjtPQUNBQztPQUNBQztPQVhBTjtPQUlBRTtPQVdBTztPQWJBUjtPQUVBQztPQVdBTzs7Ozs7O2FDNkJJRSxPQUFPNy9DLEVBQUV5QjtNMUMvRGxCLEkwQytEa0IyVztNQUNmO1dBRGVBOzJCQUdSMG5DLFlBQUpDO1VBQXFCLGNBQXJCQSxHQUhVLy9DLEdBR3FCLE9BQTNCOC9DO1VBQ0ssUUFKRzFuQzs7UUFFUCxnQkFFYzthQUdwQjRuQyxRQUFNbmdEO01BQ0E7aUJBREFBO09BQ0EsMEJBREFBO09BR1UsV0FIVkEsRUFDSjFFLFVBQ0ErSCxPQURBL0g7TUFFSixnQkFIUTBFLElBQ0oxRSxRQUU0QzthQUc5QzhrRCxhQUFhMWpDLE9BQU9MLElBQUlRLE9BQU9qYjtNQUNqQyxHQURpQ0E7UUFHa0IsSUFBOUMwSyxFQUg0QjFLLEtBRy9Ca2xCLEVBSCtCbGxCLEtBR2tCLFNBSHBDOGEsT0FHYm9LO1FBQVE7c0NBQXFCM21CLEVBQUVDLEdBQVMsV0FBWEQsRUFBVyxJQUhwQmtjLElBR1dqYyxHQUFnQixPQUE1Q2tNO2lCQUhxQnVRO01BRWxCLGVBQ21FO2FBWXpFd2pDLG1CQUFpQixtQkFBOEI7YUFFL0NDLFNBQVNDO01BQ1g7UUFDYSxrQkFGRkEsVUFFRTs7Ozs7OzRCQUpYRjs7UUFRVyxrQkFORkUsVUFNRSxXQURUQzs7Ozs7Ozs0QkFQRkg7O01BWVMsY0FWQUUsU0FVQSxZQUxQQyxNQUtvQjthQUd0QkMsUUFBUWg4QyxJQUFJODdDLFNBQVNHO01BQ3ZCLG1CQURVajhDLFVBQWFpOEM7TUFFSSxrQkFGYkg7TUFFSjs7O2tCQTFCbUJJO2tCQUFOQztrQkFBTEM7aURBQVdGOzttQkFFM0IsVUFGcUJDO3FCQUlqQixNQUppQkEsUUFJYSx1Q0FEeEJoL0M7cUJBQ3dCLDBCQW9CMUI2QyxVQXhCUW84QyxTQUFXRjttQkFNdkIsMEJBa0JJbDhDLFVBeEJRbzhDLElBQVdGOztvQkEwQmlCO2FBRzVDRyxhQUFhUCxTQUFTRztNQUNoQixJQUFKcC9DLEVBQUksY0FDUixRQURJQSxFQURXaS9DLFNBQVNHLFFBRXhCLGdCQURJcC9DLEVBRWE7YUFHZnkvQyxNQUFNUixTQUFTRztNQUNKLHNCQURMSCxTQUFTRztNQUNKLHFDQUE4QjtRQUd6QzNpQjthQUVBaWpCLHFCQUFtQjdnRDtNQUNyQjtRQUFTLDJCQURZQTs7O3dDQUVNO21CQUFJO2FBRTdCOGdELG9CQUFrQjlnRDtNQUNwQjtRQUFTLCtCQURXQTs7OytCQUVGO1FBTGxCLFdBS3NCO2FBRXBCK2dELG9CQUFvQi9nRDtNQUN0QjtRQUFTLGlDQURhQTs7OytCQUVKO1FBTGxCLFdBS3NCO2FBRXBCZ2hEO01BQWtDQyxhQUFhcmpCLFFBQVFzakIsS0FBS2QsU0FBU2UsUUFDbkNaO01BQ3BDLElBQUlhLFFBRjZDeGpCO01BRWpELFNBQ0l5akIsY0FBYy9zQztRQUtSOzs7VUFOTjhzQyxVQUZxREY7WUFVZCxpQkFWY0EsUUFFckRFOztRQVNGLE9BUmdCOXNDOzs7Ozs7O1lBWVYsbUJBUEZuVCxRQUNBbWdEOzs7ZUFTaUJ6SixTQWZMdmpDLFNBZUFzYSxJQWZBdGEsU0FlTHFYLElBZktyWDtXQWdCVixtQkFYRm5ULFFBQ0FtZ0QsU0FTWTF5QixJQUFMakQsSUFBVWtzQjs7aUJBRGYsSUFETWg0QyxFQWJJeVUsU0FjVixtQkFURm5ULFFBQ0FtZ0QsU0FPUXpoRDtrQkFNTixJQURNdVEsSUFsQklrRSxTQW1CVixtQkFkRm5ULFFBQ0FtZ0QsU0FZUWx4QztRQUdaLFFBaEJJalAsRUFSd0RpL0MsWUFDMUJHO1FBd0JKLEtBQTNCLFdBdEJhanNDLGlCQXNCYyxXQXRCZEE7U0F3QlAsdUJBbkJMblQ7UUFrQk0sd0JBbEJOQSxHQW1Cd0I7TUF6QjlCOztXQUZpRHk4QixhQUFRc2pCO1VBK0J2RDtZQUNVO2tCQWhDcUN0akI7YUFnQ3JDLG1CQWhDNkNzakI7O1lBaUMxQixRQURuQixzQkFBSnJoRCxhQUN1QixnQkFEdkJBO2NBQ3dDO2dCQUVwQzs7NkJBSEpBLEVBaENzRHVnRDtpQkFrQzVDbUI7aUJBQVJyd0M7Ozs7Z0JBR0Y7a0JBQ3FCO2lDQU5yQnJSO21CQU1xQjs7NkJBQU4rdUI7bUJBQ2IsWUFESTR5QixRQXRDZ0RwQjs7O3dDQXdDcEMsaUJBUmxCdmdEOzs7b0JBRVUwaEQsZ0JBQVJyd0M7Y0FRSjs7eUJBVkVyUixFQUVVNmhEOzJCQVFSQztvQkFDRixHQVRVRDswQkFXSDl5QixJQVhHOHlCLDJCQUZWN2hELEVBYU8rdUI7b0JBREcsUUFDZ0Q7eUJBSHhEK3lCO2VBQUosZ0JBVkU5aEQsRUFFVTBoRDtlQVFaO3lCQVZFMWhELEVBRVU2aEQ7MkJBWVJHO29CQUNGLEdBYlVILFlBaUJIOXlCLElBakJHOHlCLGlCQWlCSDl5QjtvQkFGSCxJQWpEcUNnUCxzQkFBUXNqQjtzQkFpREQsU0FqRFB0akI7c0JBaURPLHdCQWpEQ3NqQjtvQkFrRHhDLGlCQWxCVHJoRCxHQW1CaUI7eUJBTGZnaUQ7ZUFKSixrQkFWRWhpRCxFQUVVMGhEO2VBUVo7eUJBUllHOzJCQW1CUks7b0JBQ0YsT0FwQlVMLFVBbEMrQjlqQixlQXdEM0I7eUJBSFpta0I7ZUFYSiwwQkFSWVI7ZUFRWjt5QkFWRTFoRCxFQVVFOGhELE9BSUFFLFFBT0FFOzJCQUtJRTtvQkFBZTs2QkFDWCxJQUFMNWlELFdBQUssNEJBQUxBOzt1QkFFSDs7d0JBQVU7d0JBQ0UsMkJBRFJ1dkI7dUJBQ1E7eUJBRUEsSUFBTHhlLGFBQUssV0FKVDh4QyxJQUlJOXhDLEtBRVA7dUJBSFUsaUJBL0JadlEsRUE2Qk0rdUI7NkJBTUcsSUFBTHB2QixXQUFLOzZCQUNFLElBQUxveUIsYUFBSzs7dUJBRVQsaUJBQVU7dUJBQ1YsV0FGS3V3QixJQUNEdHpCO3VCQUNKOzt1QkFZQSxJQURTdXpCLGFBQ0o7O3VCQUdMOzt3QkFBVTt3QkFDRSw0QkFEUnR6Qjt1QkFDUTt5QkFFQSxJQUFMOXVCLGFBQUssV0FKVnFpRCxJQUlLcmlELEdBRVA7dUJBSFUsaUJBeERaSCxFQXNETWl2Qjs7dUJBT0o7O3dCQUFVO3dCQUNFLDRCQURSeXpCO3VCQUNRO3lCQUVBLElBQUxycEMsZUFBSyxTQUFMQSxJQUVQO3VCQUhVLGlCQS9EWnJaLEVBNkRNMGlEOzt1QkFPSjs7d0JBQVU7d0JBQ0UsNEJBRFJFO3VCQUNRO3lCQUVBLElBQUxDO3lCQUFLLFdBSlJGLElBSUdFO3lCQUVQO3VCQUhVLGlCQXRFWjdpRCxFQW9FTTRpRDs7dUJBT0o7O3dCQUFVO3dCQUNFLDRCQURSRzt1QkFDUTt5QkFFQSxJQUFMQyxlQUFLLFNBQUxBLElBRVA7dUJBSFUsaUJBN0VaaGpELEVBMkVNK2lEOzt1QkFPSixJQURJRTt1QkFDSjtxQ0F4REliLGFBdURBYTs7dUJBdkNNLElBREVDLGFBQU56UCxjQUNJO3VCQUNQLE9BREMwUCxNQURFMVA7eUJBR0osV0FIVXlQLElBQ1JDLE9BRUY7dUJBRzRCOzs7K0JBL0NoQ25qRDsrQkEwQ01takQ7K0JBSzBCLGVBQ0Usa0NBUDFCMVA7O3VCQTRDTixJQURHMlA7dUJBQ0g7dUJBR2dCOzRCQXhIdUJybEIsY0FBUXNqQjsyQkF1SDdDLFNBdkhxQ3RqQjsyQkF1SHJDLFdBSENxbEIsSUFHQyxpQkF2SDJDL0I7MkJBd0g3Qzs7Ozt1QkFHRixJQURPZ0M7dUJBQ1A7MkJBQ0l6MUM7dUJBR1k7NEJBL0h1Qm13QixjQUFRc2pCOzJCQThIN0MsU0E5SHFDdGpCLG1CQThIckMsS0FGRW53QjsyQkFFSyw2QkE5SHNDeXpDOzJCQStIN0M7O3lCQUVBLGtCQVBLZ0MsSUFPTCxJQUxFejFDOzsyQkFNQzAxQzs4QkFsSXFCbEM7d0JBb0l4Qjt1QkFFUSxxQkFDRyxrQkFMUmtDLElBSURDO3VCQUVKO3VCQUZVO3dCQUdHLGFBeklrQ2xDLFVBQVJ0akI7d0JBMklyQzs7MkJBM0k2Q3NqQjsyQkFBUnRqQjs0QkFBUXNqQixxQkFBUnRqQjt1QkE2SWhDOzs0Q0FKSDBGLFVBRkErZixVQUdBaGdCO3VCQUdHLFNBQW1DO3lCQW5GdEM0ZTtlQWhCUiw0QkFWRXBpRCxFQVVFOGhELE9BSUFFLFFBT0FFO2NBMEZKLGFBN0dJN3dDOztZbEN1V0osY2tDelBHLFdBaEo4RGl3QyxRQWdDL0R0aEQ7OztpQ0FpSFUsSUFBTGlwQixXQUFXLHVCQUFYQTtrQ0FDTSxJQUFMemdCLFdBQVcsb0JBQVhBOzs7VUFFWjs7UUF2SkYsU0F3Skk7YUFFRmk3QztNQUE4QjFsQixRQUFRc2pCLEtBQUtkLFNBQVNlLFFBQVFaO01BQzlEO2lCQURnQzNpQixRQUFRc2pCLEtBQUtkLFNBQVNlLFFBQVFaLE9BQ2E7YUFFekVnRCxtQkFBcUI1M0IsSUFBaUJ1MUIsS0FBS2QsU0FBU2UsUUFBUVo7TUFDOUQsR0FEdUI1MEIsSUFBUSxRQUFSQSxpQkFBUUMsYUFBUjQzQixVQXhLckI1bEI7TUF5S0Y7aUJBRHVCNGxCLGFBQWlCdEMsTUFBS2QsU0FBU2UsUUFBUVosT0FFdEQ7YUFHTmtELFdBQWE5M0IsSUFBaUJ1MUIsS0FBS2QsU0FBU2UsUUFBUVo7TUFDdEQsR0FEZTUwQixJQUFRLFFBQVJBLGlCQUFRQyxhQUFSNDNCLFVBN0tiNWxCO01BOEtGO2tCQURlNGxCLFdBQWlCdEMsUUFBS2QsVUFBU2UsUUFBUVosT0FDZ0I7YUFHcEV6RyxNQUFNcjRDLEVBQUVwQyxFQUFFNkw7TUFDWjtRQUNFLHVDQUZNekosRUFBRXBDLEVBQUU2TDs7OztVQUlDLElBQVB3NEMsYUFBTyx5QkFBUEEsT0FBTzs7VUFDQyxJQUFQQyxhQUFPLHdCQUFQQSxPQUFPO2tCQUF1QjthQUduQ0MsY0FBY25pRCxFQUFFcEMsRUFBRTZMO01BQ3BCO1FBQ0UsK0NBRmN6SixFQUFFcEMsRUFBRTZMOzs7O1VBSVAsSUFBUHc0QyxhQUFPLHlCQUFQQSxPQUFPOztVQUNDLElBQVBDLGFBQU8sd0JBQVBBLE9BQU87a0JBQXVCO2FBRW5DRSxhQUFhcGlELEVBQUVwQyxFQUFFNkw7TUFDbkI7UUFJRTtTQUhJZzJDO1NBQ0FULFFBSFNoL0M7U0FJVCtoRCxhQXBNSjVsQjtTQXFNQSxtQ0FESTRsQixVQUZBdEMsS0FDQVQsS0FIV3BoRCxFQUFFNkw7Ozs7O1VBT04sSUFBUHc0QyxhQUFPLHlCQUFQQSxPQUFPOztVQUNDLElBQVBDLGFBQU8sd0JBQVBBLE9BQU87a0JBQXVCO2FBR25DRyxZQUFZamtEO01BQ2QsSUFBSXFELElBQUosc0JBRGNyRDtNQUNkLFNBQ1Fra0QsS0FBS3BrRDtRMUN0VWhCLEkwQ3NVZ0I4UTtRQUNYO2FBRkV2TixPQUNTdU4sSUFDTSxPQUZmdk47VUFHTSwwQkFKSXJELEVBRUQ0UTtZQUVjLFFBRmRBO1VBR04sT0FITUEsSUFHTDtNQUpSO1FBTU0sSUFDSkEsSUFESSxRQVBRNVE7Ozs7VUFVVjtZQUFZLElBQ1ZGLEVBRFUsUUFWRkU7OztrQ0FZZSxPQVh6QnFEO1lBVU87c0JBQUx2RDtRQUhDO2tCQUFMOFEsWUFLSzthQUdMdXpDLFlBQVl2a0Q7VUFBZ0IrZ0QsYUFBTkMsY0FBTHdEO29CQUFLeEQ7ZUFFVixNQUZBaGhELElBRUEsc0JBRkt3a0Q7ZUFHcUIsTUFIMUJ4a0QsSUFHMEIsc0JBSHJCd2tELE9BR3FCLFlBSFZ6RDthQU01QjBELG9CQUFvQnJrRDtNQUN0QixJQUFJSDtNQUFKO3dCQUNnRTZDO2lCQUFqQyxTQUFpQ0EsT0FENUQ3QyxTQUN3QyxzQkFBeUIsT0FBTDZDLENBQU87ZUFGakQxQyxFQUVtRDthQXlCdkVza0QsTUFBUXg0QixJQUFleTBCO01BQ3pCLEdBRFV6MEIsSUFBTSxRQUFOQSxhQUFNQyxhQUFOdzRCLE03QmpSQXpqRDtNNkJrUk07MEJBRFN5L0M7T0FFZixnQkFuQ1I0RCxjQWtDRUs7T0FFTSxZQURObmhELElBRk1raEQ7TUFJRDt3QkEzQlNFO2lCQUNsQixTQURrQkEsT0FDbEIsS0FEa0JBO2lCQUNsQix3QkFEa0JBOztxQkFPZDs0QkFQY0E7c0JBT0QscUJBRFdaO3NCQUVYLGdCQUFhLFFBUmhCMy9DLFFBT053Z0Q7cUJBRVE7Ozt3Q0FBTyxJQURmQyxTQUN3QixvQkFISmQ7bUJBS1g7b0JBREh4NEMsSUFWSW81QztvQkFVVjdELEtBVlU2RDtvQkFXRCxtQkFESHA1QztvQkFDRzswQkFYSG5ILFFBWU4yZ0QsZUFEQUQ7bUJBQVMsT0FFVDduQztxQkFJVztvQ0FKWEE7c0JBS1csYUFBVyxvQkFSaEIxUixPQUNOdTVDO3NCQVFXOzZCQVRMdjVDLElBQ051NUMsT0FPVyxzQkFSTHY1QyxPQUNOdTVDO3FCQVNVLGVBVlZoRSxLQVVVLElBRlJsa0MsT0FFaUIsSUFIakJvb0MsT0FFQWpvQzttQkFKUSxlQUxWK2pDLEtBS1Usb0JBTEp2MUM7aUJBTFYsT0FMY281QztlQXdCZEQsVUFHZ0M7YUFTbENPLFNBQVNDLEtBQUszb0MsSUFBSTRvQztNQUNYLGtCQURXQSxNQUVWO2VBRU5FO1FBQ1MsSUFaSG5sRCxFQVlHLFNBSFR5RTtRQUdTLEdBTEZ1Z0Q7VUFOWCw4QkFEVWhsRDtVQUVJLE9BRFZxRCxjQUNVLGdCQUZKckQsRUFDTnFEO3FCQUVGLE1BSFFyRCxJQUNOcUQ7VWxDb0pFLHVCa0NySklyRDtVQUNWLElBWU1vbEQ7O2tCQWJJcGxEO1FBY1IsY0FESW9sRCxLQUhGRjtRQUlGLGVBTEV6Z0QsSUFNYztNQU5SOztVQVVJLElBQUovQixFQUFJLG1CQVhWcUI7VUFXVSxHQUFKckIsTUFaTTJaLElBYU0sY0FBYyxTQVhoQzVYLElBVU0vQjs7Ozs7VUFLUCxPQWZDK0IsT0FlMEI7VUFDOUIsc0JBakJJVjtVQWtCVSxtQkFoQlZtaEQ7bUJBZ0IyQjs7SUFFbEIsU0FBWEcsZTFDdlpMLE8wQ2tZS047SUFxQlc7SUFFQyxTQUFaTyxnQjFDelpMLE8wQ2tZS1A7SUF1QlksU0FFWlEsVUFBVWxwQyxJQUFJNG9DLEtBQUtPO01BQ1osSUFBTHZpRCxHQUFLLFNBRE9naUQ7TUFFaEIsZ0JBQWdCamxELEdBQUssMEJBRGpCaUQsU0FDWWpELEVBRkpxYyxJQUVnQyxFQUZ2Qm1wQztNQUVyQixhQURJdmlELEdBRVE7SUFMRTtJQU9BLFNBQVp3aUQscUIxQ2hhTCxPMEMyWktGO0lBS1k7SUFFQyxTQUFiRyxzQjFDbGFMLE8wQzJaS0g7SUFPYTs7O09BeEhidEw7T0FRQThKO09BWkFIO09BTEFGO09BSEFEO09BMkJBTzs7O09BcE1BakQ7T0FOQUQ7T0FzUUF3RDtPQTVQQXZtQjtPQThSQXNuQjtPQUVBQztPQU9BRztPQUVBQztJQUFhOzs7OztRckM5WWJDO0lBQVcsU0FJWEMsTUFBTXpsRCxFQUFFN0U7TUFDRixJQUFKa0UsRUFESVcsTUFBRTdFO01BRUgsZ0JBREhrRTtlQUdJLGFBSEpBO2lCQUlGLHlCQUpFQTtpQkFLSSxhQUxKQSxXQU1GLFVBTkVBO2VBRUYseUJBRkVBLEVBUUM7SUFiUSxTQWVQcW1ELGFBQWExbEQsRUFBRTdFO01BQ3JCLEdBRG1CNkUsZ0JBQUU3RSxFQUNHO01BQ1Usc0JBRmY2RSxFQUFFN0UsV0FFQyxXQUZINkUsRUFBRTdFO01BRUMsMENBQWtDO0lBakIzQyxTQTBCWHdxRCxhQUFhM2xEO01BQ2YsU0FBUTRsRDtRTC9DWDtRSytDa0I7O2dCQUNMOWpELGNBQU5DOztjQUNTLDhCQURUQSxHQUZXL0I7O2dDQUtJLElBQUxILFNBQUssVUFBTEE7d0JBSEppQzs7VUFJQSxTQUFJO01BQ1QsWUFqQ0gwakQsWUFpQ3dCO0lBakNiLFNBbUNYSyxrQkFVTTdsRDtNQVZjLEdBVWRBLG9CQVRXO1NBU1hBLHFCQVJZO1NBUVpBO3lCQVBvQjhsRCxrQkFBTkMsZ0JBQU5qQjs7aUJvQ2pCZGxGLFFwQ25CQXpsRDtpQkFvQ2MycUQ7aUJBQU1pQjtpQkFBTUQ7OztTQU9wQjlsRDs7O1NBTHFCZ21EO1NBQU5DO1NBQU5DOztpQm9DbkJmdEcsUXBDbkJBemxEO2lCQXNDZStyRDtpQkFBTUQ7aUJBQU1EOzs7U0FLckJobUQ7OztTQUhpQ21tRDtTQUFOQztTQUFOQzs7aUJvQ3JCM0J6RyxRcENuQkF6bEQ7aUJBd0MyQmtzRDtpQkFBTUQ7aUJBQU1EOzs7TUFJckMsc0JBRElubUQ7UUFLcUMsZ0JBTHJDQSxRQXpCUixNQXlCUUE7UUF6QlI7U0FJb0M7NEJBcUI1QkE7VUFyQmdCLFdBcUJoQkE7ZUFyQmdCOzs7OzttQkFERixlQXNCZEEsVUF0QmM7bUJBMEJac21EO01BRk8sT0FGVHRtRCxJQU1zQjtJQW5EakIsU0FxRFh1bUQsWUFBVWwrQztNQUNOLHVCQURNQTtNQUNOLFVBQ00sSUFBTHhJLFdBQUssT0FBTEE7TUFDRyx5QkFIRXdJLEVBR2lCO0lBeERoQixTQTBEWG0rQyxNQUFNQyxJQUFJNzNCO01BQ1o7UUFDRSxvQkFGTTYzQixJQUFJNzNCLEtBSVY7WUFERzV1Qjs7UUFDZ0MscUJBRGhDQTtRQUNIO1FBQ0EsY1dyREFrQztRWHFEQSxNQUZHbEMsRUFHSTtJQWhFSSxTQWtFWDBtRCxRQUFNRCxJQUFJNzNCO01BQ1o7UUFDRSxvQkFGTTYzQixJQUFJNzNCO1lBR1A1dUI7O1FBQ0gsY1c3REFpQztRWDhEbUMscUJBRmhDakM7UUFFSDt1QkFDTTtJQXhFSyxTQThFWDJtRCxzQkFBc0JDLElBQUssT0FBTEEsRUFBTztJQTlFbEIsU0FnSFhDLHNCQUFzQkQ7TUxwSTNCLFVLcUlZLG1DQURlQSxJQUVGO0lBbEhULFNBb0hYRSxzQkFBc0J6cUIsSUFBSTd4QjtNQUM1QixTQUFJSixLQUFLMjhDO1FBQ1AsT0FET0E7dUJBRGUxcUI7eUVBS2lEO01BSnpFLFNBRDRCN3hCO1FBY3hCO2NBZHdCQTtTQWN4QixLQWR3QkE7U0FjeEIsS0Fkd0JBO1NBY3hCLEtBZHdCQTs7O1NBZWhCLFVBZmdCQTtRQWNuQjs7TUFMTCxHQVR3QkEsUUFVb0I7TUFFTjtNQUEvQix5Q0FLdUM7SUFySXJDLFNBbUpYdzhDLG9CQUFvQkMsUUFBUUM7TUFDSSxJQWJFQyxVQWFGLHNCQURKRDtNQVg5QixHQURvQ0M7UUFNaEMsTUFOZ0NBLGFBTWhDLEtBREd2a0QscUJBQ0g7OztVQUNFO1lBQU0sZ0NBRFJ6SCxFQUNnQyxpQkFGN0J5SCxFQUNIekg7WUFDUSxVQUVVLElBQVA0QyxhQUFPLG1CQUdBa3BELGNBSFBscEQ7WUFGSCxTQURSNUM7OztRQUhBO3FCQVNrQjhyRCxhQUNpRDtJQXBKMUQsU0F1SlhHLGdCQUFnQkg7TUFDVSwyQkFEVkEsUUFDVSxrQ0FBc0I7SUF4SnJDLFNBdUtYSSx3QkFBd0JIO01BQ04sSUFkRUMsVUFjRixzQkFETUQ7TUFaMUIsR0FEc0JDO1FBS1YsSUFETHZrRCxFQUpldWtELGFBS1Ysc0JBREx2a0QscUJBQ0s7O2NBQ1J6SDtVQUNFO1lBQU0sZ0NBRFJBLEVBQ2dDLGlCQUg3QnlILEVBRUh6SDtZQUNRLFVBRVUsSUFBUDRDLGFBQU8sbUJBSmRvRCxRQUlPcEQ7WUFGSCxTQURSNUM7OztRQUtBLGdCQU5JZ0c7TUFGTCxxQ0FXc0Q7SUF4SzVDLFNBMEtYbW1ELHdCQUVpQnh1QztNQUZTLGFBRVRBLDBCQUFlO0lBNUtyQixTQThLWHl1Qyx5QkFDZXp1QyxPQURZLGFBQ1pBLG1CQUNZO0lBaExoQixTQXlMWDB1Qyx3QkFFZTF1QztNQUZXLGFBRVhBLHNEQU1kO0lBak1VLFNBbU1YMnVDLHVCQUdlM3VDO01MMU5wQixTSzBOb0JBO09BQUssVUFBTEE7TUFEb0IsUUFDRDtJQXRNdkIsU0F3TVg0dUMsZ0JBQWdCUjtNQU9aLGdDQVBZQTtNQU9aO1FBR0YsMkJBREtDO1FBSW1COzs7O1lBRUg7b0NBTmhCQTthQUNhOztZQUtHO3lCQU5oQkE7TUFERyxRQVVDO0lBMU5BLFNBNE5YUSw2QkFBNkJDO01BQy9CLDBCQUQrQkEsT0FDSjtJQTdOZCxTQXdPWEMscUJBQXFCakIsSUFBSyxPQUFMQSxhQUFvQjtJQXhPOUIsU0FtUFhrQjtNQUEyQyxpRUFBc0I7SUFuUHRELFNBd1BQQyxpQkFBaUJDO01BQ3ZCO1FBQW1CO3NCQXpQakJ4QztTQXlQaUIsZ0JBREl3QyxHQUNuQkM7U0FFVSx3QkEzUFp6QyxTQXlQRXlDLGFBQ0FDO1NBQ1UsU0FBVnpoRDtRQUFVO29CQUN5QjtJQTVQMUIsU0FnUVgwaEQsU0FDRW5vRCxHQUNKLDBCQURJQSxTQUNzQztJQWxRN0IsU0FvUVhvb0QsWUFBWXBvRCxHQUNILElBQVB3SyxLQUFPLFNBREd4SyxHQUVMLE9BREx3SyxPQUM4QjtJQXRRckIsU0F3UVg2OUMsY0FBY3JvRCxHQUNMLElBQVB3SyxLQUFPLFNBREt4SyxHQUVQLE9BREx3SyxPQUNpQztJQTFReEIsSUErUVg4OUMsT0EvUVc7YUErUlhDLCtCQUFtQ3Y1QixJQUFJazRCO01BQ0gscUJBRERsNEI7TUFDckM7TUFDQSxvQld2UkU5c0IsT1hxUnVDZ2xEO01BQ0gsSUFFbENzQixPQUFTO1NBQVRBO1FBRW9CLGFBRnBCQTtRQUVGLGNBQWMsaUJBckJkRjtNQXFCaUMscUJXMVJqQ3BtRCxPWDJSVTtJQXJTQyxJQXVTWHVtRCw4QkFSQUY7SUEvUlcsU0F5U1hHLCtCQUErQlY7TUFBSyxnQ0FBTEEsR0FBSyxRQUFnQztJQXpTekQsSUEyU1hXO0lBM1NXLFNBK1VYQywwQkFBMEI1NUIsSUFBSTY1QjtNQUNoQztRQTVCQTtVQUtNO1dBRkEzQjtZQXdCMEIyQixnQkFwQzlCRixnQkFnQkk7VUFBd0IsS0FFdkI7VUFDTDtZQUNFOzZCQXhCRkYsOEJBd0MwQno1QixJQXhCdEJrNEI7O2dCQVNDNEI7O1lBQ2tCOzthQUNpQixpQkFhZDk1QjtZQWJ4QjtZQUNBLG9CV3pURjlzQixPWDZTSWdsRDtZQVVtQixTQUluQixZQUxDNEI7WUFJSDtZQUVBLG9CVzVURjVtRCxPWHVUTTZtRDtZQUFpQixTQU1yQixjVzdURjdtRDtVWCtTSTs7O29DQVhOO21CQTRCTTtRQVVKOzJCQUFFO0lBTUo7O01BWEUwbUQ7SUFXRixvQkw5V0g7SUs4V0csb0JMOVdIO0lLOFdHO01MOVdIO0lLOFdHOzs7T0FoTEV0QjtPQUlBQztPQVdBQztPQVVBQztPQS9FQVg7SUFzT0Ysb0JMOVdIO0lLOFdHLG9CTDlXSDtJSzhXRzs7O09BclNFUDtPQWxCQVY7T0F1QkFXO09BUUFFO09BcUZBVTtPQTRGQVU7c0JMdlFMOztPSzRRU0M7T0E5TkpwQztPQW9EQWdCOztPQXFFQUs7T0FvQkFLO09Bd0hBa0I7T0FVQUc7T0FqR0FoQjtPQW9CQUM7O09BWUFFOzs7O09BNEJBTztPQUlBQztJQWtGRjthc0M3VkVXLFFBQU16bUQsU0FBTSxPQUFOQSxDQUFPO2FBQ2IwbUQsS0FBSzVwRCxFQUFFVyxFQUFFQyxHQUFJLGtCQUFSWixFQUFJWSxFQUFGRCxFQUFXO2FBQ2xCa3BELE9BQU96NkMsRUFBRWxQLEdBQVEsc0JBQVZrUCxFQUFFbFAsRUFBYTs7OztJQUlqQjs7UUFBNkI7VUFDZCxJQUFQeXZCO1VBQVkscUNBQTBCLFlBQXRDQTtRQUNWLFFBQUk7SUFGRixTQUlMbTZCLFFBQVVDLFVBQXdCQztNQUNwQyxTQUFJQztRQUNGO1VBQUksb0JBRk1GLGFBR1I7Y0FEa0IvZ0Q7O1VBQ1QsK0RBRFNBO1VBQ1QsK0JBQUx1K0M7VUFBSyxVQUMwQztNQUh2RDtRQUtNLElBQ0o3NkMsT0FESSxXQU44QnM5QztZQVF4QkU7O1FBQ00sSUFBVkMsUUFBVTtRQUNkO21DQUZRRCxTQUNKQztRQUNKLE1BRlFEO01BREE7YUFBVng5QyxNQUlnRDtJQWYzQyxrQkFOTGk5QyxRQUNBQyxLQUNBQyxPQVFBQztJQUpLO2FDaURMTSxXQUFXbG5EO01BQ0osb0NBQUw4c0I7TUFDSixtQkFGYTlzQjtNQUNKLFNBQUw4c0I7TUFFSixtQkFIYTlzQjtNQUNKLFNBQUw4c0I7TUFHSixtQkFKYTlzQjtNQUNKLFNBQUw4c0I7TUFJSixtQkFMYTlzQjtNQU1iLFFBTmFBO01BQ0o7T0FLVCxLQUxJOHNCO09BTW1CO1lBTm5CQTtNQU9KLG1CQVJhOXNCLFFBT1R4QjtNQU5LLFNBQUxzdUI7TUFRSixtQkFUYTlzQixRQU9UeEI7TUFOSyxTQUFMc3VCO01BU0osbUJBVmE5c0IsUUFPVHhCO01BSUosUUFYYXdCO01BQ0o7T0FVVCxLQVZJOHNCO09BV21CO1lBWG5CQTtNQVlKLG1CQWJhOXNCLFFBWVR2QjtNQVhLLFNBQUxxdUI7TUFhSixtQkFkYTlzQixRQVlUdkI7TUFYSyxTQUFMcXVCO01BY0osbUJBZmE5c0IsUUFZVHZCO01BWEssU0FBTHF1QjtNQWVKLG1CQWhCYTlzQixRQVlUdkI7TUFYSyxTQUFMcXVCO01BZ0JKLG1CQWpCYTlzQixRQVlUdkI7TUFYSyxTQUFMcXVCO01BaUJKLG1CQWxCYTlzQixRQVlUdkI7TUFPSixRQW5CYXVCO01BQ0osU0FBTDhzQjtNQW1CSixtQkFwQmE5c0I7TUFDSixTQUFMOHNCO01Bb0JKLG1CQXJCYTlzQjtNQUNKLFNBQUw4c0I7TUFvQkosMEJBckJhOXNCLGFBc0IrQjthQUcxQ21uRDtNQUNrQjs7Ozs7TUFDSCxRQURaRyxLQUFTRixLQUFMQyxRQUM0QzthQW1CbkRFLGFBQWF6cUQsR0FFZixZQUNXO2FBR1QwcUQsYUFBYW5uRCxHQUFJLGlCQUFVO3lCQXdCQyxRQUFFO3lCQURGLFFBQUU7eUJBRFIsUUFBSTt5QkFEQSxRQUFJO1FBRjFCb25ELGdDQUNzQixRQUFJO2FBVzFCOTdCLE1BQ0QrN0IsY0FDQ3QrQixJQUNGdStCO01BQ0EsR0FGRXYrQjtPQUFpQixRQUFqQkEsc0JBQWlCQzs7V0FBakJ1K0IsZS9CekRJeHBEO00rQjJETixrQ0FIQ3NwRCxjQUNDRSxlQUNGRCxRQUM0QztnQkFoQjFDRixhQVlBOTdCO3dCNUMzSlQ7Ozs7OztPNEN3RUt1N0I7T0F5QkFDOzJCNUNqR0w7OztPNENzSEtJO09BTUFDOzs7YUNsR0FLLE9BQU9yc0Q7TUFDVCx1QkFEU0EsTUFDVCxzQkFEU0EsS0FDOEI7YUFFckNzc0QsTUFBTWxwRCxHQUFXLG1DQUFYQSxHQUFxQzthQUUzQ21wRCxVQUFVdnNELElBQUlrRixJQUFJQztNN0MvQnZCOzs7UTZDK0JtQkQ7Ozs7UUFBSUM7OztnQ0FBUm5GLE9BQVFtRixXQUFKRDtPQUdYLHVCQUhPbEYsSUFBSWtGLElBQUlDO01BRWYsd0NBQ3lCO2FBRTVCcW5ELFNBQVNwcEQsRUFBRThCLElBQUlDO01BQWdCLHNDQUF0Qi9CLEdBQUU4QixJQUFJQyxJQUFrRDthQUVqRTRoRCxLQUFLMEY7TUFDRSxJQUFMNW1ELEdBQUssV0FERjRtRDtNQUNFO1FBQ0gsSUFDRi95QyxFQURFLHNCQURGN1Q7WUFHVXlFLDhCQUFLLHNCQUhmekUsSUFHZSxNQUFMeUU7TUFETCxzQkFGTHpFO01BRUssT0FBTDZULENBQ21DO2FBRXJDZ3pDLFNBQU9wbkQsS0FBS3FuRCxRQUNkLHFCQURTcm5ELEtBQUtxbkQsT0FDVzthQUV2QkMsUUFBTXRuRCxNQUFPLDJCQUFQQSxRQUFrQzthQUV4Q3VuRCxTQUFTanJELEdBQ1gsZUFEV0EsMkJBQ2lFO2FBRTFFa3JELE9BQU9wekM7TUFDVCxnQ0FEU0EsR0FDcUI7TUFDakIsaUNBQ2J0YztNQUNFO1FBQWtCLElBQWQ2RSxFQUFjLGdCQUpYeVgsRUFHVHRjO1FBRWdDLHNCQUg1QjRRLE9BQ0o1USxVQUVnQyxTQUQxQjZFO1FBRTRCLHNCQUo5QitMLFFBQ0o1USxtQkFHa0MsU0FGNUI2RTtRQUFjLFNBRHBCN0U7O1FBS0EsNEJBTkk0USxRQU15QjthQUUzQisrQyxTQUFTanJEO01BQ1gsZ0NBRFdBLEdBQ21CO01BQTZCLFNBQ3ZEa3JELE1BQU14b0Q7UUFDUixTQURRQTs7NEJBSU0sUUFKTkE7OzBCQUdNLFFBSE5BOztpQ0FFTSxPQUZOQTtRQUtELGdEQUEwQztNQUduRCxpQ0FDQXBIO01BQ0U7b0JBREZBLE1BRmlDLFdBQU0sZ0JBVDVCMEUsRUFTRjZCO1FBR1A7VUFGRXFLLE9BQ0o1USxFQUNxQixLQUhSLE1BQU0sZ0JBVFIwRSxFQVNGNkI7UUFHUCxTQURGdkc7O1FBR0EsNEJBSkk0USxRQUl5Qjs7Ozs7O09BbEQzQnErQztPQUdBQztPQUVBQztPQUtBQztPQUVBekY7T0FNQTJGO09BR0FFO09BS0FFO09BVUFDOzthaEM1QkVFLGlCQUFzQixpQ0FBMEI7YUFDaERDLE9BQU9DLElBQUlDO01BQ2IsT0FEYUEsU0FBSkQsYUFDVCxTQURhQyxPQUNiLFFBQ2tCO2FBR2hCQyxVQUFVdnJELEVBQUV3ckQ7TUFDZCxpQkFEY0EsMkJBT2QsRUFESUMsa0JBRUo1cEQ7TUFDRTt5QkFUVTdCLEtBUVo2QjtRQUNFLFNBREZBOztRQUNFLElBRUYsaUJBQ2tCLG1CQUxkRCxPQUlKO1FBQ2tCO2NBQWxCdEc7VUFDRTs7ZUFERkE7YUFDRSxXQURGQSxFQUxJc0c7YUFRb0IsbUJBVHBCNnBELE9BUUVsMUI7WUFIRjd4QixVQVYrQixXQVUvQkEsUUFWdUMsNEJBQTFCdkU7WUFZZjtrQkFGRXVFO2FBUFc7YUFEMEM7YUFBMUI7YUFBbkI7YUFhRyx1QkFoQkgxRSxLQWFONFA7WUFHSixpQkFoQlU1UCxLQWFONFA7WUFBSixTQURGdFU7OztRQU1BO2lCQUFVO2FBR1Jvd0QsT0FBS0Y7TUFDTSxJQUFUdC9DLE9BQVMsYUFDYixVQURJQSxPQURHcy9DLE1BRVAsT0FESXQvQyxNQUVFO2FBR0p5L0Msc0JBQXlCLHNDQUFnQjthQUV6Q0MsT0FBSzVyRCxHQUNNLElBQVRrTSxPQUFTLGFBQ2IsT0FESUEsT0FER2xNLEdBRVAsT0FESWtNLE1BRUU7YUFJSjIvQyxLQUFLN3JEO01BQ1AsUUFET0E7TUFDUDtZQURPQTtPQUVNLHdCQUZOQTtPQUVNLE1BRk5BO09BR007eUJBSE5BOztTQUVIOHJEOzs7T0FDUyxTQUFUQztPQUFTLEtBSE4vckQ7TUFNUCxpQkFOT0EsdUJBS0hnc0Q7TUFDSixPQURJQSxRQUVJO2FBR0ZDLE9BQU9qc0QsRUFBRUY7TUFDZjtRQUFRLFdBREtFLEdBQ0wsV0FBSkwsRUFEV0c7UUFDUCxrQkFET0EsbUJBQ1hILElBQ0FEO1FBQytDLE9BRC9DQSxFQUNnRDthQUVsRHdzRCxNQUFJbHNELEVBQUVtc0Q7TWIzRmIsbUJhMkZhQSxvQkFHSCxjQUhDbnNELEVBQUVtc0Q7TUFFSCxrQ0FDYzthQTJCakJDLFNBQVNwc0QsRUFBRW1zRDtNQUNiLE9BRGFBO1FBR1IsZ0JBSFFBO1NBeEJiO1dBQ1MsWUF1QkVuc0QsR0F0QkYsUUFzQkVBO1dBdEJGLEdBc0JJbXNEO1lBakJULFVBTEFodUMsd0JBREFELGNBRUN2ZSxFQUlHMHNEOztZQUtLO3FCQVlGcnNEO2FBWkU7Z0JBQUxxZSx5QkFWSkY7Ozs7Y0FEQUQ7Ozs7O2FBRUN2ZSxFQVlHMnNEO1dBZEMsSUFvQkw1c0QsRUFBSixTQWxCS0MsRUFxQlF3c0Q7V0FIYixrQkFHYUEsdUJBckJSeHNELElBa0JERDtXQUM4QyxPQUQ5Q0E7UUFTRixjQU5TTSxFQUFFbXNEO01BRVgsdUNBSWM7YUFZZEksTUFBTXZzRCxFQUFFbXNEO01BQ1Asa0JBRE9BLFNBRUw7TUFWTDtRQUFzQixZQVFkbnNELEdBUGdELElBQWYsS0FPakNBLGNBTkEsRUFGSmtlLEtBQ0FDLEdBRUksV0FESnhlLEVBTU13c0Q7UUFKTSxvQkFGWnhzRCxJQUNBRCxvQkFLTXlzRDs7UUFGTCxPQUhEenNELEVBUWlCO2FBYW5COHNELE1BQU14c0QsRUFBRW1zRDtNQUNQLGtCQURPQSxZQUVMO01BWEw7UUFBOEI7Z0NBQVIsS0FTZG5zRDtTQVJ5Qyx5QkFBRCxvQkFBUixLQVFoQ0E7U0FQZ0QseUJBQTlCLG9CQUFlLEtBT2pDQTtTQU5BLGdCQUhKa2UsR0FHbUIsY0FGbkJDLEdBQ0FFO1NBRUkseUJBREoxZSxFQU1Nd3NEO1FBSk07O1lBQWIsZUFGQ3hzRCxFQUNBRDtZQUNvRCxlQUEzQixlWHJHN0J6RixVV3lHVWt5RDs7UUFGTCxPQUhEenNELEVBUWlCO0lBS2hCLFNBRkgrc0QsVUFFT3pzRCxFQUFFbXNELE9BQWdFLE9BQXBDLE1BQTlCbnNELEVBQUVtc0QsTUFBZ0U7SUFDdEUsU0FXSE8sUUFBTTFzRCxFQUFFbXNEO01BTFksWUFLZG5zRCxHQUpjLFFBSWRBO01BQW9CLFFBTHhCd1YsbUJBQ0E4YyxvQkFJTTY1QixLQUEyQjtJQVhoQyxTQWFIUSxLQUFLM3NELEdBQUssbUJBQUxBLFdBQXVCO0lBYnpCLFNBZUg0c0QsT0FBTzVzRDtNQUM0QyxPQUFULEtBRG5DQSxjQUU0QyxHQUFULEtBRm5DQSxjQUdGLE9BRkhrZSxLQUNBQyxRQUMrQjtJQWxCOUIsU0FvQkgwdUMsT0FBTzdzRDtNQUM0Qzt5Q0FBRCxvQkFBUixLQURuQ0E7T0FFNEMsa0NBQUQsb0JBQVIsS0FGbkNBO09BRzRDLGtDQUFELG9CQUFSLEtBSG5DQTtNQUlGO2VBSEhrZTtlQUdxQztpQkFBbEIsc0JBRm5CQyxPQUVzQyxzQkFEdENFLFFBQzBEO0lBSXpELFNBRkh5dUMsV0FFTzlzRCxHQUFrQyxPQUFWLE9BQXhCQSxFQUFrQztJQUN0QyxJQU1MdVQsYUFOSzthQXNCTHc1QyxjQUFVLFlBaEJWeDVDLFVBZ0I0QjtJQXRCdkIsU0F1Qkx5NUMsTUFBSWIsT0FBUSxhQWpCWjU0QyxVQWlCSTQ0QyxNQUErQjtJQXZCOUIsU0F3QkxjLFdBQVNkLE9BQVEsZ0JBbEJqQjU0QyxVQWtCUzQ0QyxNQUFvQztJQXhCeEMsU0F5QkxlLFFBQU1mLE9BQVEsYUFuQmQ1NEMsVUFtQk00NEMsTUFBaUM7SUF6QmxDLFNBMEJMZ0IsWUFBVWhCLE9BQVEsaUJBcEJsQjU0QyxVQW9CVTQ0QyxNQUFxQztJQTFCMUMsU0EyQkxpQixRQUFNakIsT0FBUSxhQXJCZDU0QyxVQXFCTTQ0QyxNQUFpQztJQTNCbEMsU0E0QkxrQixRQUFNQyxPQUFRLGVBdEJkLzVDLFVBc0JNKzVDLE1BQWlDO0lBNUJsQyxTQTZCTEMsY0FBVSxZQXZCVmg2QyxVQXVCNEI7SUE3QnZCLFNBOEJMaTZDLGdCQUFZLGNBeEJaajZDLFVBd0JnQztJQTlCM0IsU0ErQkxrNkMsZ0JBQVksY0F6QlpsNkMsVUF5QmdDO0lBL0IzQixTQWdDTG02QyxvQkFBZ0Isa0JBMUJoQm42QyxVQTBCd0M7SUFoQ25DLFNBa0NMbzZDLFlBQVVuQyxNQUFPLGlCQTVCakJqNEMsVUE0QlVpNEMsS0FBbUM7SUFsQ3hDLFNBbUNMb0MsT0FBS3BDLE1BQU8saUJBN0JaajRDLGFBNkJLaTRDLE1BQXlDO0lBbkN6QyxTQW9DTHFDLGlCQUF5QiwyQ0FBZTtJQXBDbkMsU0F3Q0xDLGlCQUFlLGNBbENmdjZDLFVBa0NpQztJQXhDNUIsU0F5Q0x3NkMsVUFBVS90RCxHQUFJLGNBbkNkdVQsVUFtQ1V2VCxFQUEwQjtJQXpDL0I7OztPQXBJSDByRDtPQU1BQztPQUVBQztPQU9BQztPQWVBSztPQThCQUU7T0FrQkFHO09Bc0JBRTtPQU5BRDtPQW9CQUU7T0FFQUM7T0FFQUM7T0FLQUM7T0FNQUM7S0FHRzs7T0FtQ0xjO09BREFEO09BRUFFO09BZEFkO09BQ0FDO09BQ0FDO09BQ0FDO09BQ0FDO09BQ0FDO09BQ0FDO09BQ0FFO09BQ0FDO09BQ0FDO09BQ0FDOztPQVFBSTtPQUNBQztJQXpDSzthaUN6SkxDLGtCQUFrQmxuQztNQUNwQixTQURvQkEscUJBQ3BCLGNBRG9CQSx5QkFFQzthQUVuQm1uQyx1QkFBdUJubkMsR0FDekIsU0FEeUJBLFNBQ3pCLFFBQWtDOztNQU01Qiw0Q0FERm9uQzs7OztNQUVGO1FBQUk7Ozs7O1VBRkZBO0lBR0o7bUNBSElBO0tBR0osY0FKRUM7SUFJRixTQUlFRSxpQkFBZSwwQkFBa0I7SUFKbkMsU0FLRUMscUJBQW1CLE9BSG5CRixhQUc4QjtJQUxoQyxJQU9FRyx5QjlDNURMO0k4Q3FERyxTQWVNQyxjQUFjcnVELEVBQUVMO005Q3BFekIsSThDb0V1QnVaO01BQ3BCO1dBRHNCdlosS0FBRnVaLElBQ0wsT0FES0E7UUFFZix1QkFGZUEsYUFFc0IsT0FGdEJBO1FBR2YsUUFIZUE7aUJBR1E7SUFsQjVCLFNBd1NNbzFDLFNBcFJLM2lDLElBQXNCNGlDO01BQ2pDLEdBRFc1aUMsSUFBUyxRQUFUQSxjQUFTQyxhQUFUNGlDLE9BbEJUUDtNQW1CTSxJQUFKcHVELEVBQUksaUJBRHlCMHVEO01BQ3pCLEdBREdDO09BRWU7MEJBZnhCSjtRQWV3QixrQkFmeEJBLHFCMUJqQ0F4aUQsaUIwQmlDQXdpRDtRQWVFL0MsS0FBc0I7O1dBQXRCQTtNQUM4QywyQkFGOUN4ckQsS0FDQXdyRCxLQURBeHJELEVBRWtFO0lBdkJ0RSxTQXlCRTR1RCxRQUFNOW5DO01BQ1IsYUFEUUE7TUFDUixhQURRQSxTQUNXLE9BRFhBLCtCQUlMO0lBN0JILFNBK0JFK25DLFFBQU0vbkM7TUFDUixJQUFJempCLElBREl5akI7TUFHRyxRQUhIQSxnQkFDSnpqQixRQUVPLElBSEh5akI7UUFLSCxTQUVzQyxzQkFBcEIsSUFQZkEsU0FPbUM7TUFIekMsZUFKTUEsRUFRTDtJQXZDSCxTQXlDRWdvQztNQUFrQjs7U0FFWmpPO1NBQUtockI7U0FBTTdvQjtTQVdYM1AsVUFYQXdqRCxJQUFLaHJCLEtBQU03b0I7Y0FXWDNQO2lCQVhXMlA7Ozs7YUFHTCtoRDthQUFLMzRCO2FBQU00NEI7YUFDWHJ2RCxLQURBb3ZELE1BQUszNEIsT0FBTTQ0QjtZQUlDLFVBSFpydkQ7K0JBRFdxdkQ7O2lCQVFqQjN4RDtNQVpHLFFBY047SUF4REwsU0EwREU0eEQsT0FBS3AvQztNQUFJLFNBQUpBLFFBQUksS0FBSkEsUUFBb0IsV0FqQnpCaS9DLGdCQWlCS2ovQztNQUFvQixVQUFwQkEsdUJBQXNEO0lBMUQ3RCxTQTRERXEvQyxTQUFPcG9DLEdBQUksT0FBSkEsSUFBVTtJQTVEbkIsU0E4REVxb0MsbUJBQW1CQyxTQUFTQyxRQUFRQyxNQUFNQztNQUM1QzthQUQ0Q0E7T0FFM0IsMEJBRGJDO09BQ2EsS0FGcUJGO09BRXJCOztZQWdCakJ6dEQ7O1FBQ0U7VUFBYyw0QkFuQnNCeXRELE1Ba0J0Q3p0RDtVQWZ3Qjs7Y0FPUDtlQUxQZy9DO2VBQUtockI7ZUFBTTdvQjtlQUNYMGlELE9BTm9CTCxnQkFLcEJ4TyxJQUFLaHJCO2VBS0UsZ0JBVkl1NUIsU0FLWHZPO2VBTVEsdUJBVGQ0TyxXQVFNRTtjQUNRLEdBRUxDO2VBQVEsV0FQWEY7O2VBTU8saUJBWjJCSCxNQVVsQ0ksa0JBSkFEO2NBU0osaUJBYkZELFdBUU1FLGtCQUpBRDtjQUlPLFNBTEkxaUQ7O3FCQWFyQm5MOzs7O01BR0EsR0FyQjhCd3REO1FBc0I1QixTQXJCRUcsY0FxQkY7OztVQUNFO1lBQU0sSUFFQ0ssUUFGRCxpQkFyQk5KLFdBb0JGbjBEO1lBQ1EsR0FFQ3UwRCxRQUFRO1lBRlQsU0FEUnYwRDs7Ozs7Z0JBdEI0Qit6RDtNQUZqQixXQTRCUDtJQXhGTixTQTBGRVMsU0FBT1YsU0FBU3RvQztNQUNsQjthQURrQkE7T0FDbEIsTUFBSXdvQztPQUFKLE1BQ0lTO09BREosS0FFSVA7TUFGSjtRQUljLHlCQUZWQSxTQUdnQiw4QkFORjFvQztRQU1FLE9BRGR5b0M7UUFHZSxxQ0FSWkgsU0FBU3RvQyxHQU1adW9DLFFBTEZDLE1BSUVDO01BOUJrQixXQWtDckI7SUFuR0gsU0FxR0VTLFFBQUt4d0QsRUFBRXNuQjtNQUNULFNBQVFtcEM7UTlDM0pYO1E4QzJKdUI7O2dCQUdYcFAsZUFBS2hyQixnQkFBTTdvQjtZQUNkLFdBTEN4TixFQUlFcWhELElBQUtockI7d0JBQU03b0I7O1VBRGQsU0FFMEI7TUFDakIsSUFBWGtqRCxTQUFXLGtCQU5OcHBDO01BTU0sT0FBWG9wQyxTQUNpQix1QkFQWnBwQztNQU9vQztRQUczQyxNQVZPQSxLQVVQLEtBRElsUCxxQkFDSjs7O1VBQ0U7c0JBQVUsaUJBRlJBLEVBQ0p0YztZQUNFLFNBREZBOzs7WUFHQSxTQVBFNDBELFNBT0YsVUFBcUIsdUJBYmRwcEM7UUFjSztZQUFUcUk7O1FBQVMsR0FSVitnQyxlQVFDL2dDO1FBQ0gsdUJBZk9ySTtRQWVQLE1BREdxSSxJQUVNO0lBckhYLFNBdUhNZ2hDLDBCQUEwQjN3RCxFQUFFc25CLEVBQUV4ckI7Ozs7VUFPcEI7V0FETnVsRDtXQUFLaHJCO1dBQU03b0I7V0FDTCxpQkFQZ0J4TixFQU10QnFoRCxJQUFLaHJCO1VBQ0M7Z0JBSUxPOzs7O2FBRVEsaUJBYmV0UCxLQUFFeHJCO1lBYUMsWUFGMUI4NkI7cUNBTFVwcEI7O1VBR2IsT0FUMEI4WjtVQU9sQixXQURLOVo7O1FBSmpCOztrQkFDVyxpQkFIbUI4WixLQUFFeHJCO0lBdkhwQyxTQTJJRTgwRCxtQkFBbUI1d0QsRUFBRXNuQjtNQUN2QixNQUR1QkEsS0FFUiwyQkFGUUE7TUFFUixPQUFYb3BDLFNBQ2lCLHVCQUhFcHBDO01BR3NCO2lCQUZ6Q2xQOztjQUlGdGM7VUFDRTtzQ0FOaUJrRSxFQUFFc25CLEVBS3JCeHJCLElBQ3dDLGlCQU5uQndyQixLQUtyQnhyQjtZQUNFLFNBREZBOzs7UUFHQSxhQU5FNDBELFNBTUYsVUFBcUIsdUJBUkFwcEM7UUFTVDtZQUFUcUk7O1FBQVMsR0FQVitnQyxTQXZDZ0IsTUE4Q2YvZ0M7UUFDSCx1QkFWcUJySTtRQVVyQixNQURHcUksSUFFTTtJQXRKWCxTQXdKRWtoQyxPQUFLN3dELEVBQUVzbkIsRUFBRWpYO01BQ1gsU0FBUW9nRCxVQUFVM3VELEVBQUVvRDtZQUFGNHJELE1BQUUxckQ7UUFDbEI7YUFEZ0IwckQ7WUFLRzthQURaelAsSUFKU3lQO2FBSUp6NkIsS0FKSXk2QjthQUlFdGpELEtBSkZzakQ7YUFLRyxrQkFOZDl3RCxFQUtFcWhELElBQUtockIsS0FKTWp4QjthQUFGMHJELElBSUV0akQ7YUFKQXBJOztVQUdkLE9BSGNBLE9BS2tCO01BQ3ZCLElBQVhzckQsU0FBVyxrQkFQTnBwQztNQU9NLE9BQVhvcEMsU0FDaUIsdUJBUlpwcEM7TUFRb0M7WUFFdkNsUCxFQVZHa1AsS0FXSHBpQixRQVhLbUwsV0FVTCtIOztjQUVKdGM7VUFDRTtxQkFGRW9KO1lBRU0sb0JBQVUsaUJBSGhCa1QsRUFFSnRjO1lBQ0UsU0FERkE7OztRQUdBLE9BUkU0MEQsU0FRbUIsdUJBZmRwcEM7UUFlc0MsU0FKekNwaUI7UUFNUTtZQUFUeXFCOztRQUFTLEdBVlYrZ0MsZUFVQy9nQztRQUNILHVCQWxCT3JJO1FBa0JQLE1BREdxSSxJQUVNO0lBM0tYLFNBb0xNb2hDOzs7O1VBRVU7Ozs7bUJBQVRydUM7O1FBREk7SUFyTFgsU0F3TEVzdUMsTUFBTTFwQztNQUNSO1lBRFFBO09BQ1I7T0FDRTs7bUJBQXFCbUMsRUFBRTNuQixHQUFlLGFBQWpCMm5CLEVBQWlCLGdCQUFmM25CLEdBQWtDO09BQy9DLHFCQUZSbXZEO09BRVEsS0FISjNwQztNQUlSO2lCQUNPeGxCO1VBQ0s7NkJBRExBO1dBRVUsc0JBSmJvdkQsTUFHSTl1RDtVQUNKLGlCQUpBOHVELE1BR0k5dUQ7VUFDSixRQUEwQjs7TUFIOUIsVUFKUWtsQixxQkFDSjJwQyxJQUVBQyxNQVN3QjtJQXBNNUIsU0F3TUVDLFNBQU9qbEM7TUFHVCxJQUFJa2xDLFNBSEtsbEM7TUFHVCxTQUVRM1EsSUFBSXpmLEVBQUV1MUQ7WUFBRmh2RCxNQUFFaXZEO1FBQVU7YUFBVkE7Z0JBS0pqUSxJQUxJaVEsVUFLQ2o3QixLQUxEaTdCLFVBS085akQsS0FMUDhqRDtZQU1lLGFBRG5CalEsSUFBS2hyQixxQjlDdlFsQixPOENrUVc5YSxJQUFJbFosSUFLU21MO1VBSGYsR0FGTW5MLFFBRlIrdUQsb0JBS087VUFDUzttQ0FOaEJBLFNBRVEvdUQ7V0FJUSxJQUpSQTs7V0FBRWl2RDttQkFNMEI7TUFSeEM7NEI5Q2hRSCxPOENrUVcvMUMsb0JBUUc7SUFyTlgsU0F1TkVpMkMsWUFBWS9uQztNQUFnQixrQkFBaEJBO01BQWdCLG9COUM1UWpDO004QzRRaUMsc0I5QzVRakMsT3NCbUNTN2Isc0J3QnlPa0M7SUF2TnhDLFNBeU5FNmpELGNBQWNob0M7TUFBZ0Isa0JBQWhCQTtNQUFnQixvQjlDOVFuQztNOEM4UW1DLHNCOUM5UW5DLE9zQm1DUzdiLHNCd0IyT29DO0lBek4xQztlQTZTTThqRCxVQUFVcHFDLEVBQUUrNUI7UUFDZCxTQURZLzVCO1FBQ1osdUJBRFlBLEtBQUUrNUIsV0FDb0M7ZUFFaER6dkIsSUFBSXRLLEVBQUUrNUIsSUFBSWhyQjtRQUNKO3FCQURGL08sRUFBRSs1QjtTQUUwQixVQUYxQkEsSUFBSWhyQixLQUVzQixpQkFGNUIvTyxLQUNGeHJCO1FBRUosaUJBSE13ckIsS0FDRnhyQixZQUNBNjFEO1FBQ0osT0FITXJxQztRQUNFLFNBREZBO1FBR04sWUFFMkMsU0FSekNvcUMsVUFHSXBxQyxPQUt1RDtlQWUzRHNMLE9BQU90TCxFQUFFKzVCO1FBQ0g7cUJBREMvNUIsRUFBRSs1QjtTQUVpQixxQkFGbkIvNUIsS0FiYXhyQjs7Ozs7Z0JBR1RpN0IsT0FBR3ZwQjtZQUNULG1CQURNdXBCLEVBVUZzcUI7Y0FSRixPQVFBLzVCO2NBUkE7a0NBRk85Wjt3QkFLQyxpQkFLUjhaLEtBYmF4ckIsWUFHTjBSOzs7VUFEWixTQWFrQztlQVFwQzhCLEtBQUtnWSxFQUFFKzVCO1FBQ0ssbUJBRFAvNUIsRUFBRSs1QixLQUNILHVCQURDLzVCO1FBQ0Q7Y0FFS3NxQyxZQUFTMTZCLFlBQVMyNkI7VUFDdEIsbUJBSkV4USxJQUdFdVEsSUFDZ0IsT0FEUDE2QjtVQUVoQixHQUZ5QjI2QjtnQkFJZEMsR0FKY0QsU0FJTDE2QixHQUpLMDZCLFNBSUlFLE1BSkpGO1lBS2xCLG1CQVJGeFEsSUFPTXlRLElBQ2dCLE9BRFAzNkI7WUFFaEIsR0FGeUI0NkI7a0JBSWRDLEdBSmNELFNBSUxFLEdBSktGLFNBSUlHLE1BSkpIO2NBS2xCLG1CQVpOMVEsSUFXVTJRLElBQ2dCLE9BRFBDO3dCQUFTQzs7O3NCQWQxQm43QixXQUFHVixjQUFNN29CO2tCQUNiLG1CQUVFNnpDLElBSEV0cUIsR0FDZSxPQURaVjs0QkFBTTdvQjs7Z0JBRGhCO1lBY2U7VUFKSjtRQUpKLGVBVWtEO2VBUTNEa25CLFNBQVNwTixFQUFFKzVCO1FBQ0MsbUJBREgvNUIsRUFBRSs1QixLQUNQLHVCQURLLzVCO1FBQ0w7Y0FFS3NxQyxZQUFTMTZCLFlBQVMyNkI7VUFDdEIsbUJBSk14USxJQUdGdVEsSUFDZ0IsVUFEUDE2QjtVQUVoQixHQUZ5QjI2QjtnQkFJZEMsR0FKY0QsU0FJTDE2QixHQUpLMDZCLFNBSUlFLE1BSkpGO1lBS2xCLG1CQVJFeFEsSUFPRXlRLElBQ2dCLFVBRFAzNkI7WUFFaEIsR0FGeUI0NkI7a0JBSWRDLEdBSmNELFNBSUxFLEdBSktGLFNBSUlHLE1BSkpIO2NBS2xCLG1CQVpGMVEsSUFXTTJRLElBQ2dCLFVBRFBDO3dCQUFTQzs7O3NCQWQxQm43QixXQUFHVixjQUFNN29CO2tCQUNiLG1CQUVNNnpDLElBSEZ0cUIsR0FDZSxVQURaVjs0QkFBTTdvQjs7Z0JBRGhCO1lBY2U7VUFKSjtRQUpKLFFBVTJEO2VBRXBFMmtELFNBQVM3cUMsRUFBRSs1QjtRQUNiLFNBQVErUTtVOUN0YWY7VThDc2FnQzs7a0JBR2RyN0IsYUFBUTNlLGFBQUc1SztjQUNmLG1CQURJdXBCLEVBSkVzcUIsS0FNQyxVQUZLanBDLEVBRUwsZUFGUTVLOzs7WUFEbEIsU0FJd0I7UUFDTCxtQkFSWjhaLEVBQUUrNUI7UUFRRSx1Q0FSSi81QixxQkFRNEI7ZUFVckMrcUMsUUFBUS9xQyxFQUFFKzVCLElBQUlockI7UUFDUjtxQkFERS9PLEVBQUUrNUI7U0FFSix5QkFGRS81QixLQUNOeHJCO2VBQ0E4Yzs7O2dCQVBTbWUsV0FBR3ZwQjtZQUNULHFCQURNdXBCLEVBS0RzcUIsZ0JBTEk3ekM7WUFFUCxXQUdHNnpDO1lBSEgsV0FHT2hyQjs7Ozs7WUFJZCxpQkFKUS9PLEtBQ054ckIsZUFEUXVsRCxJQUFJaHJCLEtBRVp6ZDtZQUVGLE9BSlEwTztZQUlSLFNBSlFBO1lBSVIsUUFFMkMsZ0JBM0YzQ29xQyxVQXFGUXBxQztZQUlSOzs7VUFyQnVCLFlBd0J0QjtlQUVEcUwsSUFBSXJMLEVBQUUrNUI7UUFNYzt3QkFOaEIvNUIsRUFBRSs1QjtTQU1NLHlCQU5SLzVCOztRQUNrQjs7WUFJcEIsSUFET3lQLFdBQUd2cEIsY0FDVixxQkFET3VwQixFQUpIc3FCO1lBS0osUUFGQTtZQUVBLFVBRFU3ekM7O1VBRFYsU0FHa0M7ZUFFcENpb0IsUUFBUXZKLElBQUlwd0I7UUFDZDs7bUJBQVMscUNBRENvd0IsSUFDSzZLLEVBQUU3MkIsRUFBa0I7aUJBRHJCcEUsRUFDdUI7ZUFFbkN3MkQsWUFBWXBtQyxJQUFJcHdCO1FBQ2xCOzttQkFBUyx5Q0FES293QixJQUNDNkssRUFBRTcyQixFQUFzQjtpQkFEckJwRSxFQUN1QjtlQUV2QzQ1QixPQUFPNTVCLEdBQ0MsSUFBTm93QixJQUFNLGVBQ1YsWUFESUEsSUFES3B3QixHQUVULE9BRElvd0IsR0FFRDs7Y0FwSEQraUM7Y0EvUUpHO2NBTUFDO2NBMkJBSTtjQXNQSTc5QjtjQW9CQWdCO2NBVUF0akI7Y0FvQkFvbEI7Y0FjQXk5QjtjQWtCQUU7Y0FTQTEvQjtjQXRTSjY5QjtjQXNDQUk7Y0FhQUM7Y0E1RkFuQjtjQTRIQXNCO2NBZ0JBRztjQWVBSztjQUVBQztjQTBMSWg4QjtjQUdBNjhCO2NBR0E1OEI7SUF6Wk47TTlDckRILEk4Q2llYXJzQjtlQUNBNk8sS0FBTTh6QyxLQUFZcnJELEdBQUksdUJBQUpBLEVBQVk7OzZCQUQ5QjBJLE1BQ0E2TztPQWpLUjhmO09BQ0F5RTtPQUNBODFCO09BQ0EzZ0M7T0FDQWdCO09BQ0F0akI7T0FDQW9sQjtPQUNBeTlCO09BQ0FFO09BQ0ExL0I7T0FDQXJ2QjtPQUNBc3REO09BQ0F4bkQ7T0FDQXNDO09BQ0FzbEQ7T0FDQWo4QztPQUNBeThDO09BQ0FDO09BQ0FoOEI7T0FDQTY4Qjs7ZUFnSkk3bUQsT0FBTyttRCxJQUFLLDRCQUFMQSxHQUE0QjtlQUNuQzk4QixPQUFPNTVCO1FBQ0MsSUFBTm93QixJQUFNLFdBQ1YsV0FuSkZvbUMsWUFrSk1wbUMsSUFES3B3QixHQUVULE9BRElvd0IsR0FFRDs7Y0FKRHpnQjtjQW5LSnVzQjtjQUNBeUU7Y0FDQTgxQjtjQUNBM2dDO2NBQ0FnQjtjQUNBdGpCO2NBQ0FvbEI7Y0FDQXk5QjtjQUNBRTtjQUNBMS9CO2NBQ0FydkI7Y0FDQXN0RDtjQUNBeG5EO2NBQ0FzQztjQUNBc2xEO2NBQ0FqOEM7Y0FDQXk4QztjQUNBQztjQUNBaDhCO2NBQ0E2OEI7Y0FpSkk1OEI7SUFoYk4sU0E2YkV3cEIsT0FBS3YrQyxHQUFJLDBCQUFKQSxFQUFnQztJQTdidkMsU0E4YkU4eEQsV0FBVzkzQyxHQUFHQyxHQUFHamEsR0FBSSxpQkFBVmdhLEdBQUdDLEtBQUdqYSxFQUErQjtJQTlibEQsU0ErYkUreEQsWUFBWTFHLEtBQUtyckQsR0FBSSx3QkFBVHFyRCxLQUFLcnJELEVBQW1DO0lBL2J0RCxTQWljRSt3RCxVQUFVcHFDLEVBQUUrNUI7TUFDZCxZQURZLzVCO2VBRVAsaUJBRk9BLEtBQUUrNUIsUUFBRi81QjtlQUdQLDJDQUFvRDtJQXBjekQsU0FzY0VxckMsTUFBSXJyQyxFQUFFKzVCLElBQUlockI7TUFDSjttQkFERi9PLEVBQUUrNUI7T0FFMEIsVUFGMUJBLElBQUlockIsS0FFc0IsaUJBRjVCL08sS0FDRnhyQjtNQUVKLGlCQUhNd3JCLEtBQ0Z4ckIsWUFDQTYxRDtNQUNKLE9BSE1ycUM7TUFDRSxTQURGQTtNQUdOLFlBRTJDLFNBVnpDb3FDLFVBS0lwcUMsT0FLdUQ7SUEzYzdELFNBMGRFc0wsT0FBT3RMLEVBQUUrNUI7TUFDSCxnQkFEQy81QixFQUFFKzVCLEtBRWlCLHFCQUZuQi81QixLQWJheHJCOzs7Y0FHVGk3QixPQUFHdnBCO1VBQ1Qsc0JBRE11cEIsRUFVRnNxQjtZQVJGLE9BUUEvNUI7WUFSQTtnQ0FGTzlaO3NCQUtDLGlCQUtSOFosS0FiYXhyQixZQUdOMFI7OztRQURaLFNBYWtDO0lBNWR0QyxTQW9lRW9sRCxPQUFLdHJDLEVBQUUrNUI7TUFDSyxtQkFEUC81QixFQUFFKzVCLEtBQ0gsdUJBREMvNUI7TUFDRDtZQUVLc3FDLFlBQVMxNkIsWUFBUzI2QjtRQUN0QixzQkFKRXhRLElBR0V1USxJQUNvQixPQURYMTZCO1FBRWhCLEdBRnlCMjZCO2NBSWRDLEdBSmNELFNBSUwxNkIsR0FKSzA2QixTQUlJRSxNQUpKRjtVQUtsQixzQkFSRnhRLElBT015USxJQUNvQixPQURYMzZCO1VBRWhCLEdBRnlCNDZCO2dCQUlkQyxHQUpjRCxTQUlMRSxHQUpLRixTQUlJRyxNQUpKSDtZQUtsQixzQkFaTjFRLElBV1UyUSxJQUNvQixPQURYQztzQkFBU0M7OztvQkFkMUJuN0IsV0FBR1YsY0FBTTdvQjtnQkFDYixzQkFFRTZ6QyxJQUhFdHFCLEdBQ21CLE9BRGhCVjswQkFBTTdvQjs7Y0FEaEI7VUFjZTtRQUpKO01BSkosZUFVc0Q7SUFoZmpFLFNBd2ZFcWxELFdBQVN2ckMsRUFBRSs1QjtNQUNDLG1CQURILzVCLEVBQUUrNUIsS0FDUCx1QkFESy81QjtNQUNMO1lBRUtzcUMsWUFBUzE2QixZQUFTMjZCO1FBQ3RCLHNCQUpNeFEsSUFHRnVRLElBQ29CLFVBRFgxNkI7UUFFaEIsR0FGeUIyNkI7Y0FJZEMsR0FKY0QsU0FJTDE2QixHQUpLMDZCLFNBSUlFLE1BSkpGO1VBS2xCLHNCQVJFeFEsSUFPRXlRLElBQ29CLFVBRFgzNkI7VUFFaEIsR0FGeUI0NkI7Z0JBSWRDLEdBSmNELFNBSUxFLEdBSktGLFNBSUlHLE1BSkpIO1lBS2xCLHNCQVpGMVEsSUFXTTJRLElBQ29CLFVBRFhDO3NCQUFTQzs7O29CQWQxQm43QixXQUFHVixjQUFNN29CO2dCQUNiLHNCQUVNNnpDLElBSEZ0cUIsR0FDbUIsVUFEaEJWOzBCQUFNN29COztjQURoQjtVQWNlO1FBSko7TUFKSixRQVUrRDtJQXBnQjFFLFNBc2dCRXNsRCxXQUFTeHJDLEVBQUUrNUI7TUFDYixTQUFRK1E7UTlDNWpCWDtROEM0akI0Qjs7Z0JBR2RyN0IsYUFBR1YsZ0JBQU03b0I7WUFDYixzQkFESXVwQixFQUpFc3FCLEtBTUksVUFGSGhyQixLQUVHLGVBRkc3b0I7OztVQURoQixTQUl3QjtNQUNMLG1CQVJaOFosRUFBRSs1QjtNQVFFLHVDQVJKLzVCLHFCQVE0QjtJQTlnQnZDLFNBd2hCRStxQyxRQUFRL3FDLEVBQUUrNUIsSUFBSWhyQjtNQUNSO21CQURFL08sRUFBRSs1QjtPQUVKLHlCQUZFLzVCLEtBQ054ckI7YUFDQThjOzs7Y0FQU21lLFdBQUd2cEI7VUFDVCxzQkFETXVwQixFQUtEc3FCLGdCQUxJN3pDO1VBRVAsV0FHRzZ6QztVQUhILFdBR09ockI7Ozs7O1VBSWQsaUJBSlEvTyxLQUNOeHJCLGVBRFF1bEQsSUFBSWhyQixLQUVaemQ7VUFFRixPQUpRME87VUFJUixTQUpRQTtVQUlSLFFBRTJDLGdCQTdGM0NvcUMsVUF1RlFwcUM7VUFJUjs7O1FBckJ1QixZQXdCdEI7SUEvaEJILFNBaWlCRXlyQyxNQUFJenJDLEVBQUUrNUI7TUFNYztzQkFOaEIvNUIsRUFBRSs1QjtPQU1NLHlCQU5SLzVCOztNQUNrQjs7VUFJcEIsSUFET3lQLFdBQUd2cEIsY0FDVix3QkFET3VwQixFQUpIc3FCO1VBS0osUUFGQTtVQUVBLFVBRFU3ekM7O1FBRFYsU0FHa0M7SUF2aUJ0QyxTQXlpQkV3bEQsVUFBUTltQyxJQUFJcHdCO01BQ2Q7O2lCQUFTLHVDQURDb3dCLElBQ0s2SyxFQUFFNzJCLEVBQWtCO2VBRHJCcEUsRUFDdUI7SUExaUJyQyxTQTRpQkV3MkQsWUFBWXBtQyxJQUFJcHdCO01BQ2xCOztpQkFBUyx5Q0FES293QixJQUNDNkssRUFBRTcyQixFQUFzQjtlQURyQnBFLEVBQ3VCO0lBN2lCekMsU0EraUJFbTNELFNBQU9uM0QsR0FDQyxJQUFOb3dCLElBQU0sZUFDVixZQURJQSxJQURLcHdCLEdBRVQsT0FESW93QixHQUVEO0lBbGpCSCxTQW9qQkVnbkMsUUFBVTVtQyxJQUFzQmhGO01BQ2xDLEdBRFlnRixJQUFTLFFBQVRBLGNBQVNDLGFBQVQ0aUMsT0FsakJWUDtNQW1qQk0sSUFBSnB1RCxFQUFJLGlCQUQwQjhtQjtNQUMxQixHQURJNm5DO09BR0s7MEJBaGpCZko7UUFnakJlLGtCQWhqQmZBLHFCMUJqQ0F4aUQsaUIwQmlDQXdpRDtRQStpQkUvQyxLQUNhOztPQUNWLElBRkhBLFVBRjhCMWtDO01BQzFCO09BS1IsVUFOa0NBLGtCQUM5QjltQjtPQU9LLE9BUnlCOG1CLEtBUXpCLGVBUEw5bUIsS0FDQXdyRDtPQU1LLEtBRkxuN0I7T0FFSyxLQVJ5QnZKO09BUXpCO01BSVQ7dUI5Q3JuQkgsTzhDc2ZLb3FDLFVBeUhFN2dDO01BTUosT0FOSUEsR0FPRjtJQWprQkY7OztPQXdTTW8rQjtPQS9RSkc7T0FNQUM7T0EyQkFJO09BNFlBa0Q7T0E4QkFDO09Bb0JBQztPQWNBQztPQTJCQUM7T0F2RUFuZ0M7T0E4REF5L0I7T0FuYkE3QjtPQXNDQUk7T0FhQUM7T0E1RkFuQjtPQXhEQWI7T0FDQUM7T0EraUJBb0U7T0E1WEFsQztPQWdCQUc7T0FlQUs7T0FFQUM7T0FnVkF1QjtPQUdBVjtPQUdBVzs7O09BbEhBL1Q7T0FFQXdUO09BREFEOztJQTliRjthQ2dESVUsWUEvRUsvd0Q7TUFDVCxjQURTQSxNQUNULFVBRFNBO01BRVA7TUFDRixnQ0FIU0EsRUFHRDthQUtOZ3hELFNBQU96eUQsR0FBSSxPQUFKQSxvQkFBNEM7YUFFbkQweUQsMEJBQXdCcnFELEVBQUU0QyxFQUFFQztNQUM5QixjQUQ0QkQsTUFDNUIsVUFENEJBLElBQ04sU0FESTVDLFlBRXhCOzhCQUY0QjZDLFNBRVo7YUFJaEJ5bkQsTUFBSXRxRCxFQUFFNEMsRUFBRWpMO01BQ1YsMEJBRE1xSSxFQUFFNEM7TUFDUixHQURVakwsR0FJRSxJQUFMa1osSUFKR2xaLEtBSUUseUJBSk5xSSxFQUFFNEMsRUFJRGlPO01BREcsMkJBSEo3USxFQUFFNEMsRUFJYzthQUdwQjJuRCxNQUFJdnFELEVBQUU0QztNQUNSLDBCQURNNUMsRUFBRTRDO01BRVIsNkJBRk01QyxFQUFFNEMsRUFFRDthQUdMNG5ELFNBQVN4cUQsRUFBRTRDO01BQ2IsMEJBRFc1QyxFQUFFNEM7TUFFYixrQ0FGVzVDLEVBQUU0QyxFQUVEO2FBR1Y2bkQsUUFBTXpxRCxFQUFFNEM7TUFDViwwQkFEUTVDLEVBQUU0QztNQUVWLCtCQUZRNUMsRUFBRTRDLEVBRUQ7YUFLUDhuRCxPQUFLcHFELEdBQUc4QyxHQUFHN0MsR0FBRzhDLEdBQUdqSztNQUVFOzs7UUFGRkE7Ozs7UUFBVGdLOzs7VUFDaUIsU0FEcEI5QyxNQUFZbEgsU0FBVGdLOzs7O1FBQU1DOzs7VUFFSyxTQUZSOUMsTUFBTW5ILFNBQUhpSztRQUlYO29CQUpjaks7U0FJZCxVQUFlLHVCQUpia0gsR0FBRzhDLEdBQUc3QyxHQUFHOEMsR0FBR2pLO1FBSW1CO01BRGpDLGlDQUNpQzthQUVwQ3V4RCxPQUFLQyxHQUFHaHdELElBQUlDLElBQUlsRDtNQUNhLFFBRHJCaUQsWUFBSUMsV0FDaUIsU0FEeEIrdkQsTUFBTy92RCxXQUFKRDtRQUdMLFVBSEtBLE1BQUlDO1FBR1QsYUFIS0Q7Y0FHTDlILEVBSEs4SDtVQUtOO2tCQUxHZ3dELEdBR0Y5M0QsRUFIYTZFO1lBS2QsU0FGQzdFOzs7O01BREEsd0NBS0Y7O01BMkJlLElBQWQrM0QsWUFBYztlQVlkQyxVQUFVaG5ELEVBQUV3YSxHQUFJLGdCQUFKQSxlQUFGeGEsZ0JBQWlEO01BWjdDLElBY2RpNEM7TUFkYyxTQWlCZHQ1QyxPQUFPK21EO1FBQ1Q7bUJBRFNBO1NBRVQsd0JBREl1QjtRQUdNOytCQUZOQyxLQW5CRkg7Z0JBc0JTLGVBSFBHO2dCQUxGalA7O2tCQVlEO01BMUJlLFNBNEJkL3NCLE1BQU1sckI7UUFDUixTQURRQSx3QkFDUjs7O1VBQ0U7NkJBRk1BLEtBQ1JoUixZQTdCRSszRDtZQStCQSxpQkFITS9tRCxLQUNSaFI7WUFFRSxTQUZGQTs7O1FBSUEsT0FuQkVpcEQ7UUFtQkY7Z0JBQ2U7TUFsQ0MsU0FxQ2QzN0MsS0FBS3BKLEVBQUU4TSxFQUFFdUQ7UUFDWCxTQURTdkQsS0FDVDtRQU1pQjswQkFOS2hMLEVBQUVvTjt1QkFBSjdNLE1BQUk2QzttQkFDdEI7cUJBQVEsWUFEWXBELE1BQUZPLElBQ0ksT0FEQTZDO3FCQUVoQixnQkFGY3BELEVBQUZPO3FCQUVaO3VCQUNNOzt3QkFBb0Isa0JBSjNCckMsRUFJRUUsRUFIZWdGO3dCQUdVLElBSGQ3Qzs7d0JBQUk2Qzs7cUJBRWhCLElBRUksSUFKUTdDOzs7aUJBRFRnTyxLQU9rQztNQTVDN0IsU0ErQ2QvTSxLQUFLdEQsRUFBRThNO1FBQ1QsU0FEU0EsS0FDVDtRQU1XOzBCQU5XaEw7bUIvQ3RKM0IsSStDc0p5Qk87bUJBQ2xCO3FCQUFRLFlBRFlQLE1BQUZPLElBQ0k7cUJBQ2hCLGdCQUZjUCxFQUFGTztxQkFFWjt1QkFDTSxJQUFMbkM7dUJBQUssV0FKUEYsRUFJRUU7dUJBQUssUUFITW1DOztxQkFFWixJQUVJLElBSlFBOztzQkFNYztNQXREbEIsU0FtRVY0eEQsYUFBYW40RCxFQUFFZ0csRUFBRW9EO1lBQUo3QyxNQUFJK0M7UUFDdkI7VUFBUSxZQURhdEQsTUFBRk8sSUFDRyxPQURDK0M7VUFFVTt3QkFGWnRELEVBQUZPO1dBQUk2TTtXQUFKd087O1dBQUl0WTttQkFFbUM7TUFyRTFDLFNBd0VkODBCLE1BQU1wdEI7UUFDUixnQkFEUUEsS0FDUjtRQUFpQjtxQy9DL0t0QixPK0N5S1dtbkQ7O3NCQU1xQztNQXpFM0IsU0FvSWRDLFFBQVFwbkQsRUFBRXFuRCxPQUFPLzdDLEVBQUVrUCxFQUFFOHNDO1FBQ1Y7bUNBREh0bkQsS0FBYXNuRDtTQUVWLHdCQUZIdG5ELEtBQWFzbkQ7U0FHZCxZQUZMQztTQUdTaDBDO1FBQ1g7YUFGRW15QyxNQUNTbnlDO1lBR1A7YUFERWswQztjQUNGLFlBSkYvQjtZQUlFLEdBREUrQixTQUhKL0IsR0FNb0I7WUFGbEI7YUFHYyx3QkFKWitCO2FBS1kseUJBTFpBO1lBTUosT0FYQUYsV0FTSUcsY0FQSmhDO1lBVUEsT0FYQThCLFNBU0lHLFlBUkpqQztZQVdBLFdBZFEyQixPQVVKSyxZQVBKaEMsR0FIZXA2QztZQWVmLGlCQUpJcThDLFVBUkpqQyxjQUhpQmxyQztZQWdCakIsaUJBaEJNeGEsS0FBYXNuRCxvQkFVZkk7WUFPSixpQkFqQk0xbkQsS0FBYXNuRCxvQkFXZks7WUFKRixJQVVGLEtBZEFqQyxNQUhNMWxELFNBaUJOLFVBakJNQSxPQU1GeW5EO1lBWXFDO3FCQWxCbkN6bkQ7a0JBb0JKZ1M7Y0FBNEI7Z0JBeEVsQztzQkFvRFVoUztpQkFwREcsd0JBb0RIQTtpQkFwREcsS0FvREhBO2lCQW5ESSx5QkFtREpBO2lCQWxEQSxXQUZONmtEO2lCQUhVLFlBQUpyeEQ7aUJBT0Msb0JBSlBxeEQ7Z0JBSU8sR0FBUGlELFFBREFEO2tCQWFNLGlCQWhCTmhELGdCQU1XdHZELE1BQUUrTjtrQkFDYjt1QkFKQXVrRCxZQUdhdmtEO3NCQUVSLFdBUkx1aEQsT0FNV3R2RDt3QkFFYyxRQUZkQTtzQkFHRCxXQVRWc3ZELE9BTWF2aEQ7d0JBSVQsT0FWSnVoRCxPQU1hdmhELEVBTmJ1aEQsT0FNV3R2RDt3QkFLUSwwQkFWbkJxeUQsUUFLYXRrRDt3QkFLVCxpQkFWSnNrRCxRQUtXcnlEO3dCQUtRLElBQWYsSUFMUytOLFVBS1QsSUFMTy9OLG9CQUFFK047O3NCQU9GLFFBUEVBOzs2QkFIYnVrRDtzQkFjbUIsU0FtQ2I3bkQ7c0JBbENOLGlCQWtDTUEsdUJBcElSK21EO3NCQWlHcUIsU0FtQ2IvbUQ7c0JBakNOLGlCQWlDTUE7O3NCQS9CVSxJQUFaZ29ELFVBQVksWUFsQmhCSDtzQkFtQkEsT0F0QkFoRCxTQXFCSW1ELFlBbEJKSDtzQkFrQmdCLFNBK0JWN25EO3NCQTdCTixpQkE2Qk1BLHVCQS9CRmdvRDtzQkFBWSxJQUdNLFdBdkJ0QkosVUFFQUMsVUFxQnNCLEtBNEJoQjduRDtzQkE1Qk4saUJBNEJNQTtvQkExQlIsU0EwQlFBLE9BdkRBeE0sTUE2QlIsVUF2QkVxMEQsWUFpRE03bkQ7b0JBMUJxQyxlQTBCckNBOztnQkF4QlYsZ0JBd0JVQTtnQkFwRFYsU0F3RU1nUzs7O1lBYkEsV0FQSWhTO1lBc0JOO2NBMUNKO21CQW9CVUE7ZUF4REksbUJBQUpzRTt1QkFxQ053YjtnQkFFUyxnQkFGVEEsUUF2REosS0EwRVU5ZixLQTFFVjtnQkFNWTsyQkFOVXNELEVBMERQNGtEO29CL0MxTnBCLEkrQ2dLeUIzeUQ7b0JBQ2xCO3NCQUFRLFlBeURLMnlELE9BMURLM3lELElBQ0k7c0JBQ2hCLGtCQXdETzJ5RCxHQTFESzN5RDtzQkFFWjt3QkFDUTs2Q0F1RU55SyxLQTFFWXNEO3lCQTJEbEI7bUNBM0RnQnRVO3FDQTJEWnE0RCxPQUFPOXdDLEdBQUc4eEMsVUFBTyxjQURWSCxHQTFES2w1RCxFQTJETHVuQixHQUFHOHhDLEtBQXlCO21DQUFuQ2hCO3lCQUFKLGdCQTNEZ0I5eEQ7eUJBNERSLG1CQUZNNHlELEdBMURFNXlEO3dCQTZEVyxRQUp6QjB5RCxLQUVFWixTQUNBN3NDLEVBQ3VCLFVBSnpCeXRDLEtBR0V6dEM7d0JBekRRLElBSEk1Sjs7c0JBRVosSUFFSyxJQUpPcmI7OztnQkEwRVZ5SyxPQWpCSmlvRDtnQkFpQklqb0QsT0FqQkppb0Q7Z0JBaUJJam9ELE9BakJKaW9EO2dCQWlCSWpvRCxPQWpCSmlvRDtnQkFpQklqb0QscUJBakJKaW9EOztjQVlHLE9sQ2pJRHp6RDtja0NpSUM7O1lBNEJFO1VBQUcsV0F0QlYreUQsU0FHU2gwQyxNQW1CcUIsUUFuQnJCQTtVQXNCVCxXQTFCUTh6QyxPQUNSRSxTQUdTaDBDLElBSk1qSTtVQTJCZixpQkF6QkFrOEMsT0FFU2owQyxnQkFKUWlIO1VBMkJqQixTQUdFO01BbEtVLFNBcUtkc0ssSUFBSTlrQixFQUFFc0w7UUFDQSxJQUFKa1AsRUFBSSxnQkFEQWxQO1FBRWlCLGVBRm5CdEwsRUFyT053bUQsU0FxT1FsN0MsR0FDSmtQLEVBQ3FCLFVBRm5CeGEsRUFDRndhLEdBQ29DO01Bdkt4QixTQTBLZDh0QyxRQUFRdG9ELEVBQUVzTCxFQUFFaTlDO1FBQ047MkJBRElqOUM7U0FFQSxnQkFGRnRMLEVBQ053YTtTQUVTLHdCQUhIeGEsS0FFTnNuRDtTQUVTLHdCQUpIdG5ELEtBRU5zbkQ7U0FHSyxZQUZMekM7U0FHUzcxRDtRQUNYO2FBRkUwMkQsTUFDUzEyRCxFQUNLLGtCQVBKdTVELFdBQ1YvdEMsRUFDQThzQztVQU1VLEdBUFY5c0MsTUFPVSxpQkFKVmd0QyxPQUVTeDREO1lBR0gsbUJBTk42MUQsT0FHUzcxRDtZQUdIO2tCQUNDb0U7Y0FBTyxtQkFBUEEsRUFWQ2tZO2dCQVdVLGtCQVJsQnU1QyxPQUdTNzFEO2dCQUtTLFlBQ0EsSUFBTHFOLGVBQUssT0FBTEE7Z0JBREssSUFFRixJQVBQck47O1lBR0gsSUFNQyxJQVRFQTs7VUFVRixRQVZFQTttQkFZUDtNQTVMVSxTQStMZGdvQixNQUFNaFgsRUFBRXNMO1FBQ1Y7aUJBRFF0TDtpQkFBRXNMOzBCQUNPa1AsRUFBRThzQyxPQUFTLFFBRHBCdG5ELEVBL1BSd21ELFNBK1BVbDdDLEdBQ09rUCxFQUFFOHNDLE9BQVMsT0FEbEJoOEMsQ0FDbUQsRUFBQztNQWhNOUMsU0FtTWQ5SSxLQUFLeEMsRUFBRXNMO1FBQUksZUFBTnRMLEVBQUVzTCxXQUFxQmtQLEVBQUc4c0MsT0FBVSxlQUFlLEVBQUM7TUFuTTNDLFNBcU1kMS9CLFNBQVM1bkIsRUFBRXNMO1FBQ0w7MkJBREtBO1NBRUQsZ0JBRkR0TCxFQUNQd2E7U0FFUyx3QkFIRnhhLEtBRVBzbkQ7U0FFUyx3QkFKRnRuRCxLQUVQc25EO1NBR0ssWUFGTHpDO1NBR1M3MUQ7UUFDWDthQUZFMDJELE1BQ1MxMkQsRUFDSztVQUNKLEdBUFZ3ckIsTUFPVSxpQkFKVmd0QyxPQUVTeDREO1lBR0gsbUJBTk42MUQsT0FHUzcxRDtZQUdIO2tCQUNDb0U7Y0FBTyxtQkFBUEEsRUFWRWtZO2dCQVdTLElBQ1ZqUCxJQURVLE1BUmxCd29ELE9BR1M3MUQ7Z0JBS1MsR0FDVnFOLElBQWUsT0FBZkE7Z0JBRFUsSUFFRixJQVBQck47O1lBR0gsSUFNQyxJQVRFQTs7VUFVRixRQVZFQTttQkFZUDtNQXZOVSxTQTBOZHc1RCxZQUFZeG9ELEVBQUVzTCxFQUFFbTlDLFFBQVFGO1FBQ2xCOzJCQURRajlDO1NBRUosZ0JBRkV0TCxFQUNWd2E7U0FFUyx3QkFIQ3hhLEtBRVZzbkQ7U0FFUyx3QkFKQ3RuRCxLQUVWc25EO1NBR0ssWUFGTHpDO1NBR1M3MUQ7UUFDWDthQUZFMDJELE1BQ1MxMkQsRUFDSyxPQVBRdTVEO1VBUVosR0FQVi90QyxNQU9VLGlCQUpWZ3RDLE9BRVN4NEQ7WUFHSCxtQkFOTjYxRCxPQUdTNzFEO1lBR0g7a0JBQ0NvRTtjQUFPLG1CQUFQQSxFQVZLa1ksR0FVaUIsa0JBVmZtOUMsUUFHZDVELE9BR1M3MUQ7WUFHSCxJQUVDLElBTEVBOztVQU1GLFFBTkVBO21CQVFQO01BeE9VLFNBMk9kODJCLE9BQU85bEIsRUFBRXNMO1FBQUk7MkJBQU50TCxFQUFFc0wsV0FBeUI4eUIsRUFBRXB2QyxHQUFLLGFBQVBvdkMsRUFBRXB2QyxJQUFpQixPQUFJO01BM08zQyxTQThPZDYyQixJQUFJN2xCLEVBQUVzTDtRQUFJLDhCQUFOdEwsRUFBRXNMLFdBQXlCOHlCLEVBQUdwdkMsR0FBTSxRQUFJLE9BQU87TUE5T3JDLFNBaVBkcTJELFNBQVNybEQsRUFBRXNMO1FBQ0w7MkJBREtBO1NBRUQsZ0JBRkR0TCxFQUNQd2E7U0FFUyx3QkFIRnhhLEtBRVBzbkQ7U0FFUyx3QkFKRnRuRCxLQUVQc25EO1NBR0ssWUFGTHpDO1NBR1M3MUQ7U0FBRW9KO1FBQ2I7YUFGRXN0RCxNQUNTMTJELEVBQ0ssT0FESG9KO1VBRUQsR0FQVm9pQixNQU9VLGlCQUpWZ3RDLE9BRVN4NEQ7WUFHSCxtQkFOTjYxRCxPQUdTNzFEO1lBR0g7a0JBQ0NvRTtjQUFPLG1CQUFQQSxFQVZFa1k7Z0JBV1Msa0JBUmxCdTVDLE9BR1M3MUQ7Z0JBS1M7a0JBQ0E7OzZCQUFMcU4sSUFORmpFO21CQU1PLElBTlRwSjs7bUJBQUVvSjs7Z0JBS08sSUFFRixJQVBQcEo7O1lBR0gsSUFNQyxJQVRFQTs7VUFVRixRQVZFQTttQkFZSjtNQW5RTyxTQXNRZGsxRCxNQUFNbGtEO1FBQ1IsUUFEUUEsZ0JBRUcsV0FoVlhzbUQsU0E4VVF0bUQ7UUFHUixzQkFESTBvRDtRQURKO1NBRUE7U0FDYTswQy9DaFhsQiw2QitDOFdTQTtTQUVTLEtBSFQzeEQ7U0FJMkMsS0FKM0NBO1NBSTJDLHNCQUgzQzJ4RDtTQUc2QixzQkFIN0JBO1NBR21CLHNCQUhuQkE7UUFHRSxVQUpGM3hELElBSUUsTUFMRWlKLEdBSUoyb0Qsc0JBQ3dEO01BM1E1QztjQWlCZGhxRDtjQVdBdXNCO2NBbUtBbFU7Y0ExQkE4TjtjQXNFQWdCO2NBeENBdGpCO2NBRUFvbEI7Y0E0Q0F5OUI7Y0FIQXgvQjtjQS9MQXJ2QjtjQVZBOEY7Y0FtQ0E4d0I7Y0E4TEE4MkI7Ozs7T0F2UUFtQztPQXZFRkM7T0FRQUU7T0FPQUM7T0FLQUM7T0FLQUM7T0FhQUU7T0FOQUQ7OzthQ3ZDQWdDLEtBQUcvMEQsR0FBSSxPQUFKQSxDQUFLOzs7S0E4ckJKZzRDO0tBNXFCRmdkO2FBaUxGQyxXQUFXenBDLE1BQU0wcEM7TUFDbkIsWUFEYTFwQyxZQUFNMHBDLGFBQ25CLFdBRG1CQSxNQUFOMXBDLFVBRWlCO1FBNEI1QjJwQzthQUdBQyxpQkFBaUI1cEMsTUFBTTNyQjtNQUFJLGtCQUFWMnJCLFVBQU0zckIsSUFBSSxzQkFBSkEsR0FBNkM7YUFDcEV3MUQsa0JBQWtCN3BDLE9BQVEsa0JBQVJBLFlBQStCO2FBS2pEOHBDLGVBQWU5cEMsTUFBTXdzQixLQUFLdWQ7TUFDNUIsV0FEaUIvcEMsV0FBTXdzQjtNQUV2QixpQkFGaUJ4c0IsTUFBVytwQztNQUU1QjtjQUM2QjthQUczQkMsY0FBY2hxQyxNQUFNM3JCO01BQ25CLDhCQURtQkE7TUFDbkIsWUFBYSxlQURBMnJCLE1BQ0Esc0JBRE0zckIsVUFDa0M7YUFHdEQ0MUQsZUFBZWpxQyxZQUE4QnNVO1VBQVB1RCxlQUFSekcsZ0JBQVIwRztNQUN4QixjQURpQjlYLE1BQU84WDtNQUV4QixrQkFGaUI5WDtNQUVqQjs7ZUFGaUJBLFdBQThCc1UsYUFBZmxEO09BTWQsa0JBTkRwUixTQUlidXJCO01BRWMsWUFBZDJlO01BQWMsV0FORGxxQztNQWJZLFdBYVpBO2FBSmZncUMsY0FJZWhxQyxNQUF1QjZYO2FBY3RDc3lCLFdBQVducUMsTUFBTXNVLE9BQVEsc0JBQWR0VSxXQUFNc1UsTUFBOEM7YUFHL0Q4MUIsZ0JBQWdCcHFDO1VBQXNCNlgsZUFBUHZELGVBQVJ3RDtNQUN6QixjQURrQjlYLE1BQU84WDtNQUN6QixXQURrQjlYLFdBQWVzVTtNQS9CSixXQStCWHRVLFVBQWVzVTthQXJCL0IwMUIsY0FxQmdCaHFDLE1BQXNCNlg7YUFvQ3RDd3lCLGdCQUFnQnJxQyxNQUFNc3FDO01oRGhVM0I7OztVZ0Q0VmlCLG9CQTVCSXRxQztVQTRCSjs7O2FBRUl1cUM7YUFDTkM7dUJBQVFyMkQsRUFFWnMyRDtnQmhEaldYLEdnRGlXV0E7c0JBQUt4MEQsRUFBTHcwRDtrQkFBbUIscUJBRlB0MkQsRUFFWkssTUFGWUwsRUFFWnMyRCxTQUFnRCxRQUZwQ3QyRCxFQUVQOEI7Z0JBREMsVUFETTlCO1lBR1Isa0JBbENNNnJCLHdCQThCQXVxQztZQUlOO1VBTEE7Z0JBVlYsUUFuQmdCdnFDLFVBbUJoQjtnQkFNQSxRQXpCZ0JBLFVBeUJoQjs7VUFpQ1ksb0JBMURJQTtVQTBESjttQ0FFSHluQjttQkFuR1QwaUIsV0F1Q2dCbnFDLE1BNERQeW5CO1VBREMseUJBM0RNem5COztVQWdFaEIsU0FoRWdCQTtVQWdFaEI7WUE5RUkscUJBY1lBO1lBZFo7cUNBRUd3c0IsZ0JBQU1qdEM7Y0FZR3lnQix3QkFaSHpnQjtjQVlHeWdCLHNCQVpUd3NCOztZQURDO1VBZ0hQOztVQUFZLG9CQW5HR3hzQjtVQW1HSDtZQUdWLHdCQUFhLGtCQXRHQUEsVUFxR1IwcUM7WUFDUSx3QkF0R0ExcUMsTUFzR1QycUM7VUFGSTs7O2dCQWpHWCxJQURRdDJELFdBQ1Isc0JBSGdCMnJCLE1BQU1zcUMsT0FFZGoyRDs7VUFtRUk7V0FGS3UyRDtXQUFOQztXQUNDQyxJQURLRjtXQUNiOXlCLE9BRGE4eUI7V0FFTCxnQkFyRUk1cUM7VUFxRUo7bUNBRU8rd0IsbUJBQVZnYTs7cUJBa0JNLHVCQXpGQy9xQyxNQW1FTDZxQztxQkFxQkksc0JBeEZDN3FDLE1BbUVDNHFDLE9BSUU3WjtxQkFlSCxzQkF0RkEvd0IsTUFtRUM0cUMsT0FJRTdaOztlQUdmLE9BMUVZL3dCLFlBQU1zcUMsU0EwRWxCLHNCQU5BeHlCO3dCQU9LLGVBM0VPOVgsTUFtRUM0cUMsT0FJRTdaO3dCQUtWLGdCQTVFTy93QixNQW1FTDZxQzs7ZUFZUCxPQS9FWTdxQzt3QkErRWlCLGdCQS9FakJBLE1BbUVMNnFDO3dCQW5FSzdxQyxZQUFNc3FDLFNBZ0ZsQixzQkFaQXh5QjswQkFhTyxlQWpGSzlYLE1BbUVDNHFDLE9BSUU3Wjs0QkF2RUgvd0IsV0F1RUcrd0IsZUFIUCtaLFdBcEVJOXFDOzRCQW9GUCxlQXBGT0EsTUFtRUM0cUMsT0FJRTdaOzRCQWNWLGdCQXJGTy93QixNQW1FTDZxQztzQkFvQkksdUJBdkZDN3FDLE1BbUVMNnFDO1VBR0Q7O1VBL0JFO1dBRkVHO1dBQUg3MkQ7V0FDUDgyRCxnQkF0Q1lqckM7V0F1Q0osaUJBdkNJQTtVQXVDSjtxQ0FFSWtyQzs7Y0FLViwwQkFMVUE7Y0FLSzs7c0JBQ0g3N0MsZ0JBQVIrN0M7d0JBVE5ILG1CQVNNRyxtQkFBUS83QzsyQkFBUis3Qzs7MEJBRkpEO29CQUhBRTs7O3FCQUpGSjtZQWFGLElBQUk3NUIsT0FUQWk2QixNQUpGSjtZQWFGLFlBQUk3NUI7cUJBRUMsZ0JBckRTcFIsZ0JBbURWb1IsU0FkS2o5QjtxQkFpQko7dUJBdERTNnJCLGdCQTBDVnFyQyxNQUxRTCxrQkFyQ0VockM7VUF3Q047OztXQW5DSzF2QjtXQUFMZzdEO1dBQ05DLGtCQU5ZdnJDO3dCQU1adXJDO1lBL0JBLGtCQXlCWXZyQztZQXpCWjttQ0FFYXNVLGlCQUFWbVg7Y0FFTCxHQXFCY3pyQixXQXZCQ3NVLGdCQUFWbVg7ZUFJd0MsV0FtQi9CenJCLE1BdkJDc1U7O2FBRFQsa0JBd0JRdFU7VUFTcUI7bUJBVHJCQSxXQUtOc3JDO1dBSTJCLGlCQUp0Qmg3RCxLQUxDMHZCLFdBQU1zcUMsT0FLUGg2RDtVQVdmLGVBTEltN0QsV0FEQUQsU0FWWXhyQztnQkFzQmhCLElBRFUwckMsY0FDVixZQURVQSxLQXJCTTFyQzs7VUE4RmYsd0JBQWEsb0JBOUZFQSxVQTZGSDJyQztVQUVaLGlCQS9GZTNyQyxNQThGWDRyQztVQUNKLFlBRllELFdBN0ZHM3JDO2FBOEdaNnJDLGFBQWE3ckM7TUFDbkI7UUFBTSxtQkFEYUE7UUFDYjtVQUlEOztXQUZJd3NCO1dBQWFqdEM7V0FBUG1xRDtXQUNUb0MsY0FKYTlyQztXQUtkLFVBRkl3c0I7V0FFSixjQUxjeHNCLFlBSWI4ckM7VUFDK0Q7WUFDakUsT0FOZTlyQztZQU9ELElBQVZzcUMsWUFKQzlkLFVBekxQbWQ7WUE4TEUsZ0JBUmUzcEMsTUFPWHNxQyxPQUpPWjtZQUtYLFlBTGtCbnFELFNBSEh5Z0I7O1VBRVQ7aUJBU0w7YUFJSCtyQyxnQkFBZ0IvckMsTUFBTTBEO01BQU0sV0FBWjFELE1BQU0wRCxLQUFNLG9CQUFaMUQsTUFBb0Q7YUFJcEVnc0Msa0JBQWtCaHNDLE1BQU13c0IsS0FBS240QztNaERqY2xDLE9nRDZiSzAzRCxnQkFJa0IvckMsU0FBTXdzQixRQUFLbjRDLEdBQUxtNEMsTUFDa0Q7YUFXMUV5ZixzQkFBc0JDO01BQ3hCLE1BRHdCQTtNQUN4QixJQUNJQyxjQXRhQTNDO01BcWFKLGtCQUNJMkMsWUFGb0JELE1BR3dCO2FBVzlDRSxTQUFTcHNDLE1BQU0xdkI7TUFDWCxrQkFESzB2QjtNQUNMOzs7U0FFZW1zQztTQUFaRTtjQUFZRjtXQUFaRSxhQUhFcnNDLFVBT1AsNkJBUE9BO1FBU1AsU0FOaUJtc0M7UUFNakI7OztZQU9FO3NCQWhCVzc3RDthQWdCWDs7aUJBYmU2N0QsZ0JBSFZuc0MscUJBa0JILFFBbEJHQTs7WUFXTDs7Ozs7Y0FYVzF2QixJQUdJNjdELGdCQUhWbnNDLHFCQWFILFFBYkdBLGFBQU0xdkI7WUFzQlg7OztNQXBCSSxRQW9CRjthQUtOZzhELFVBQVV0c0MsTUFBTXJxQixFQUFFK3pEO01BQ3BCLFdBRFkxcEMsTUFBUTBwQztNQUNwQixHQURrQi96RCxFQUVSLFNBRkVxcUI7TUFFaUIsSUFDekJ1c0MsUUFIUXZzQyxVQUFRMHBDO01BRVMsWUFDekI2QyxLQUhRdnNDLFNBSXVCO2FBTWpDd3NDLGdCQUFnQnhzQyxNQUFNdXJCLE9BQU9raEI7TUFDL0IsWUFEa0J6c0M7TUFDbEIsR0FEa0JBO1FBR2hCLFdBSGdCQSxjQUladXNDLFFBREEvZixRQUhrQmpCLE9BQU9raEI7ZUFWN0JILFVBVWdCdHNDLFFBSVp1c0M7TUFFTixTQU5rQnZzQztNQU1sQjtRQUNLLFNBUGFBO2VBL0RoQmdzQyxrQkErRGdCaHNDLE1BMURsQjtpQkFpRTJDO2FBT3pDMHNDLGFBQWExc0M7TUFDZixhQURlQTtNQUNmO1FBQ0EsR0FGZUE7VUFLWCxXQUxXQSxTQXVNVHdzQixXQWpNRixTQU5XeHNCLFNBTVUsU0FOVkE7UUFNOEIsWUFOOUJBOzs7O01BSFcsV0FZdkI7YUFJRDJzQyxhQUFhM3NDLE1BQU0wcUM7TUFDckIsR0FEZTFxQyxXQUdiLEtBSG1CMHFDLFNBQU4xcUMsVUFJYixXQUphQSxVQUFNMHFDO01BSWEsU0FKbkIxcUM7TUFJbUI7UUFHaEMsSUFBSTBwQyxTQVBlZ0IsVUFPbkIsa0JBUGExcUMsU0EwTFR3c0IsS0FuTEFrZDtpQkFDb0Q7YUFJeERrRCxjQUFjNXNDO01BQ2hCLEdBRGdCQSxVQUVkLFdBRmNBLFNBOEtWd3NCO01BNUttRSxTQUZ6RHhzQjtNQUV5RDtRQUVqRSxrQkFKUUE7UUFJUixVQUdKLElBREswcUMsa0JBQ0wsa0JBUFkxcUMsVUFNUDBxQztRQUZEOzs7aUJBRzZCO2FBRW5DbUMsWUFBWTdzQyxNQUFNM3JCLEdBQUksb0JBQVYyckIsb0JBQU0zckIsR0FBcUM7YUFDdkR5NEQsYUFBYTlzQyxhQUFXLHFCQUFYQSxRQUFpQzthQUU5QytzQyxrQkFBa0Ivc0MsTUFBTXJxQixHQUFJLFlBQUpBLEVBQUksUUFBd0I7YUFDcERxM0QsaUJBQWlCaHRDLE1BQU1ycUIsR0FBSSxZQUFKQSxFQUFJLFFBQXVCO2FBQ2xEczNELGtCQUFrQmp0QyxhQUFXLE9BQVhBLFNBQThCO2FBQ2hEa3RDLGlCQUFpQmx0QyxhQUFXLE9BQVhBLFNBQTZCO2FBQzlDbXRDLFlBQVludEMsTUFBTXJxQjtNQUNwQixrQkFEY3FxQixNQUFNcnFCLEdBQ3BCLHdCQURjcXFCLE1BQU1ycUIsRUFDK0I7YUFJakR5M0QsK0JBQWdDcHRDO01BQVcsVUFBWEEsd0NBS25DO2FBR0dxdEMsK0JBQWdDcnRDO1VBSVpzdEMsYUFEREMsYUFEQUMsYUFEREM7TUFEY3p0QyxZQUNkeXRDO01BRGN6dEMsWUFFYnd0QztNQUZheHRDLFlBR2J1dEM7TUFIYXZ0QyxZQUlac3RDOzthQVNwQkksU0FBUzF0QztNQWpYWDs7Y0FpWFdBO01BRVgsc0JBRldBO01BR1gsTUFIV0E7TUFJWCxNQUpXQTtNQUtYLE1BTFdBO01BTVgsTUFOV0E7TUFNWDs7aUJBTldBO01BdEVlLHVCQXNFZkEsVUFVVTthQU9uQjJ0QyxlQUFlM3RDLE1BQU1ycUI7TUFKdkIsU0FJaUJxcUI7TUFKakIsdUJBQXFCLG9CQUlKQSxRQUp5QjtNQU9uQjtlQUhOQSxXQUdmLGFBSGVBO1FBS2pCLFlBL1dFMnBDO1FBZ1hGLGFBTmlCM3BDO1FBTWpCLEdBTnVCcnFCLEVBT2Isa0JBUE9xcUI7UUFPZ0IsZ0JBUGhCQSxPQVFIO2FBU1o0dEMsaUJBQWlCNXRDLE1BQU13c0IsS0FBS240QztNQUM5QixTQURtQjJyQjtNQUNuQixZQUNLLGtCQUZjQSxNQUFNd3NCLEtBQUtuNEMsT0FFSzthQUdqQ3c1RCxZQUFZN3RDLE1BQU04dEMsTUFBTXo1RDtNaER4bkI3QixPZ0RtbkJLdTVELGlCQUtZNXRDLE1BQU04dEMsTUFBTXo1RCxFQUNrQjthQUcxQzA1RCxnQkFBZ0IvdEMsTUFBTTNyQjtNQUN4QixtQkFEa0IyckIsTUFDbEIsc0JBRHdCM3JCLEtBQ2E7YUFFbkMyNUQsZUFBZWh1QyxNQUFNM3JCO01BQ1ksbUJBRGxCMnJCLE1BQ2tCLHFCQURaM3JCLEdBQ1ksU0FEWkEsR0FDK0I7YUFHcEQ0NUQsYUFBYWp1QyxNQUFNcndCO01BQTBCLHVCQUFoQ3F3QixNQUFnQyw0QkFBMUJyd0IsR0FBMkM7YUFHOUR1K0QsZUFBZWx1QyxNQUFNbnNCO01BQTBCLHVCQUFoQ21zQixNQUFnQyxVQUExQm5zQixHQUE2QzthQUdsRXM2RCxjQUFjbnVDLE1BQU1ycUI7TUFBMEIsdUJBQWhDcXFCLE1BQWdDLGVBQTFCcnFCLEdBQTRDO2FBR2hFeTRELGNBQWNwdUMsTUFBTWpwQixHQUNGLG1CQURKaXBCLFFBQ0ksU0FERWpwQixHQUNlO2FBSW5DczNELGFBQWFydUMsYUFBVyx1QkFBWEEsVUFBMEM7YUFDdkRzdUMsYUFBYXR1QyxNQUFNdXJCO01BQVMsdUJBQWZ2ckIsTUFBTXVyQixTQUE2QzthQUVoRWdqQixjQUFjdnVDLE1BQU11ckI7TUFBUyx1QkFBZnZyQixNQUFNdXJCLFNBQThDO2FBQ2xFaWpCLGVBQWV4dUMsTUFBTXVyQjtNQUFTLHVCQUFmdnJCLE1BQU11ckIsU0FBK0M7YUFDcEVrakIsWUFBWXp1QyxNQUFNdXJCLFFBQVMsdUJBQWZ2ckIsTUFBTXVyQixTQUE0QzthQVc5RG1qQixpQkFBaUIxdUM7TUFDbkIsZUFEbUJBLFNBQ25CLGtCQURtQkEsWUFDNkI7YUFDOUMydUMsZUFBZTN1QztNQUNqQixlQURpQkEsU0FDakIsa0JBRGlCQSxZQUNnQzthQUkvQzR1QyxpQkFBaUI1dUM7TUFDbkIsU0FEbUJBO01BQ25CLFlBQ0UsZ0JBRmlCQSxTQTZDYndzQixlQTNDc0U7YUFJMUVxaUIsb0JBQW9CN3VDO01BQ3RCLFNBRHNCQTtNQUN0QixZQUNFLGdCQUZvQkEsU0F1Q2hCd3NCLGVBcENxRDthQUt6RHNpQixzQkFBc0I5dUMsTUFBTzZxQyxLQUFNRDtNQUNyQzthQUQrQkM7T0FDL0IsTUFEK0JBO09BQy9CLE9BRCtCQTtPQUMvQixLQUR3QjdxQztNQUN4QjtRQUVFO2dCQUhzQkE7U0FJbEIwcEMsU0FKeUJtQixLQUFNRDtTQUsvQnJyRDtpQ0FKRnU0QixVQUFReEQ7O2dDQUFPdUQ7OztTQUtiMDBCLFFBSEEvZixLQUNBa2QsTUFDQW5xRDtlQXJNSitzRCxVQWdNc0J0c0MsUUFNbEJ1c0M7aUJBQ3FCO2FBTXpCd0MsZUFBZS91QyxNQUFNc1UsTUFBTWxEO01BQzdCO2VBRGlCcFIsZ0JBQU1zVSx3QkFBTWxELGVBRW1CO2FBUTlDNDlCLGVBQWVodkMsYUFBVyxzQkFBWEEsVUFBbUM7YUFDbERpdkMsYUFBYWp2QyxhQUFXLHNCQUFYQSxVQUFtQzthQUloRGt2QyxhQUFhbHZDO01BQ2YsWUFEZUE7TUFDZixTQURlQTtNQUNmO1FBRUUsSUFDSXVzQyxRQURBL2Ysc0JBQUosdUJBSGF4c0IsTUFJVHVzQztpQkFDc0I7YUFJMUI0QyxjQUFjbnZDO01BQ2hCLGFBRGdCQTtNQUNoQjtRQUNBLFNBRmdCQTtRQUVoQjtVQUVHLElBQUl1c0MsUUFWRC9mO1VBV0gsZ0JBTGF4c0IsTUFJVHVzQztVQUNKLFlBTGF2c0M7VUFJYjs7Ozs7aUJBR0E7YUFJRG92QyxnQkFBZ0JwdkMsTUFBTXNVLE1BQU1sRDtNQUM5QixTQURrQnBSO01BQ2xCO1FBQ0UsV0FGZ0JBLGNBR1p1c0MsUUFEQS9mLFFBRmtCbFksTUFBTWxELFFBQU5rRDtlQWhQdEJnNEIsVUFnUGdCdHNDLFFBR1p1c0M7aUJBQ3FCO2FBR3pCOEMsYUFBYXJ2QyxhQUFXLHVCQUFYQSxVQUFvQzthQUVqRHN2QyxXQUFXdHZDO01BQ2IsU0FEYUE7TUFDYixTQUNFLElBQUl1c0MsUUE1QkEvZixVQTRCSix1QkFGV3hzQixNQUVQdXNDO2lCQUNzQjthQVUxQmdELGlCQUFpQnZ2QyxNQUFNN3JCO01BQUksYUFBSkEsTUFBSSxXQUFWNnJCLFlBQU03ckIscUJBQXlDO2FBR2hFcTdELGlCQUFpQnh2QyxhQUFXLE9BQVhBLFNBQTZCO2FBRTlDeXZDLGtCQUFrQnp2QztNQUFXLE9BQVhBLDJCQUFtRDthQUdyRTB2QyxxQkFBcUIxdkMsTUFBTTNyQixHQUFJLFlBQUpBLEVBQUksUUFBc0I7YUFDckRzN0QscUJBQXFCM3ZDLGFBQVcsT0FBWEEsU0FBNEI7YUFJakQ0dkMsU0FBU3o3RCxHQUNYLE9BRFdBLDJCQUNvQzthQWU3QzA3RCxrQkFBa0I3dkMsTUFBTS9hO01BQzFCLGFBRDBCQTtNQUMxQjtRQUNFLFFBRmtCK2EsV0FBTS9hLFFBVjFCLFVBRDhCQztRQUM5QjtVQUNVLElBQUovUSxFQUFJLFNBRm9CK1E7VUFFcEIsV0FBSi9RO1VBQUksV0FTVTZyQjtVQVRWLGdCQVNVQTtRQWZwQjtpQkFpQm1EO2FBR2pEOHZDLGtCQUFrQjl2QyxhQUFXLE9BQVhBLFFBQThCO2FBRWhEK3ZDLGNBQWMvdkMsTUFBTTdyQjtNQUN0QixjQURzQkE7TUFDdEI7UUFDVSxJQUFKOFEsSUFBSSxTQUZZOVE7UUFFWixXQUFKOFE7UUFBSTtTQUVKK3FEO1VBSlVod0M7O1lBV1gsTUFBUSxNQVhHQTtRQVlzQix5QkFadEJBLE1BSVZnd0M7aUJBVWtDO2FBTXRDQztVQUFtQkMsZ0JBQVFDOzZCQUFSRCxVQUFRQzthQU8zQkMsZUFBZUM7TUFDWCw0QkFEV0EsVUFDWCx5QkFFWTthQUVoQkMsY0FBY3R3QyxhQUFXLE9BQVhBLFFBQTBCO2FBRXhDdXdDLHFCQUFxQnZ3QztVQUFPa3dDLGdCQUFRQztNQUN0QyxjQUR1Qm53QyxNQUFPa3dDO01BRTlCLGtCQUZ1Qmx3QyxNQUFlbXdDO01BRXRDO2FBR0VLLGdCQUFnQnh3QyxNQUFPbXdDLFdBQVlEO01BQ3JDLGdCQUR5QkMsV0FBWUQsUUFFL0Isd0JBREZHO01BQ0Usa0JBSUosNEJBTmdCcndDLE1BQ2Rxd0M7TUFBSixJQUVRM3dEO01BQ2tCLHlEQURsQkEsS0FHNkI7YUFFbkMrd0QscUJBQXFCendDLE1BQU9td0MsV0FBWUQ7TUFDMUMsZ0JBRDhCQyxXQUFZRCxRQUVwQyx3QkFERkc7TUFDRSxzQkFJSixxQkFOcUJyd0MsTUFDbkJxd0MsV0FLaUM7YUFFbkNLLGdCQUFnQjF3QyxhQUM4QixVQUQ5QkEsa0JBQzBEO2FBRTFFMndDLG1CQUFtQjN3QyxNQUFNd0s7TUFDWixJQUFYNmxDLFNBQVcsZ0JBRE1yd0M7TUFFTSw0QkFGTkEsTUFFTSxXQUZBd0ssT0FDdkI2bEMsVUFDd0M7YUFHMUNPLCtCQUErQjV3QztVQUtoQi9iLFdBREF0VSxXQURDd3JCLFdBREY5RixXQURDeGhCO01BRGdCbXNCLFlBQ2hCbnNCO01BRGdCbXNCLFlBRWpCM0s7TUFGaUIySyxZQUdmN0U7TUFIZTZFLFlBSWhCcndCO01BSmdCcXdCLFlBS2hCL2I7O2FBUWY0c0QsK0JBQStCN3dDO01BQVcsVUFBWEEsa0RBTWxDO2FBSUc4d0MsK0JBQWtDOXdDLE1BQU1uc0IsRUFBRXdoQjtNQUM1QyxZQUQwQ3hoQixFQUMxQyxZQUQ0Q3doQixFQUM1QyxRQUFpRDthQUUvQzA3QywrQkFBa0Mvd0M7TUFDcEMsVUFEb0NBLG9CQUNLO2FBSXZDZ3hDLGdCQUFnQmh4QztNQUFXLGtCQUFYQSxxQkFBd0M7SUFHM0MsSUFBYml4QyxXQUFhO2FBV2JDLGVBVm1CbHhDLE1BQU03ckI7TWhEbDRCOUIsSWdEazRCOEI4UTtNQUMzQjtxQkFEMkJBO1FBQzNCO1VBQ0EsUUFGMkJBO1lBSXpCLFdBSm1CK2EsVUFEbkJpeEM7WUFLQSxRQUp5QmhzRDs7VUFFWCxrQkFGSythLFVBRG5CaXhDLGFBQ3lCaHNEO29CQU14QjtJQVBZLFNBZWJrc0QsNkJBQTZCbnhDLE1BQU0xb0I7TUFDZDs7K0JoRGo1QjFCLE9nQjZES0ssaUJnQ20xQm1DTDtNQUNkLDRCQUNVLHFCQUZJQSxHQUVJO01BQ2pCLDJCaERuNUIzQixPZ0Q4M0JLMDVELGdCQWtCNkJoeEM7TUFJUiwyQmhEcDVCMUIsT2dENDRCS2t4QyxlQUk2Qmx4QztNQUtSLDJCaERyNUIxQixPZ0Q0NEJLa3hDLGVBSTZCbHhDO01BS1IsUUFBb0I7SUFwQjVCLFNBNEJib3hDO01BQTJCO1lBQ2hCLzhELFdBQVcsc0JBQVhBO01BQ04sYUFBRTtJQTlCTSxTQStCYmc5RDtNQUE0QjtZQUNqQmg5RCxXQUFZLHNCQUFaQTtNQUNOLGFBQUU7SUFqQ00sU0FtQ2JpOUQsZ0NoRHA2Qkw7SWdEaTRCa0IsU0FvQ2JDLGlDaERyNkJMO0lnRGk0QmtCLFNBd0NiQyxrQkFBa0IzOUQsRUFBRXdoQixFQUFFOEYsRUFBRXhyQixFQUFFc1U7TUFFYixvQ0FsNEJYdWxEO01BcTRCSixJQUZJa0ksUUFEQUQ7TUFBVyxJQUlYRSxXQUFhO01BQ2pCLHNCQURJQTtNQUVKLFVBTElELFNBR0FDO01BSlcsSUFjRyxpQkFERCxpQkFEQztNQURFO2NBUGhCQTtjQU9nQjs7Ozs7Ozs7Ozs7OztjbkNsMUJWeDhEOztjbUNxMEJVdEI7Y0FBRXdoQjtjQUFFOEY7Y0FBRXhyQjtjQUFFc1U7OztjQVoxQm10RDtjQUdBQztjQUlBQztjQUNBQztjQU1FRSxTQXNDSDtJQWhGYyxTQW9GYkcsMkJBQTJCQztNQUM3QjtlQUQ2QkEsNERBTVI7SUExRk4sU0ErRmJDLGVBQWV0NkQsT0FBTzZFO01BQ3hCLG9CaERqK0JIO01nRGkrQkcsb0JoRGorQkg7TWdEaStCYTtPQUFOMDFEO1FBQU0sa0JBRE92NkQsT0FBTzZFLHFCaERoK0IzQjtNZ0RrK0J5Qix5QmhEbCtCekIsT2dEODNCSzIwRCxnQkFtR0VlO01BRWlCLHlCaERuK0J4QixPZ0Q0NEJLYixlQXFGRWE7TUFHaUIseUJoRHArQnhCLE9nRDQ0QktiLGVBcUZFYTtNQUdpQixPQUhqQkEsR0FJRDtJQXBHWSxTQXdHYkMseUJBQXlCMTZEO01BQzNCLHFCQUFnRCxxQkFEckJBLEdBQzZCO01BQXpDOztpQmhEMStCbEIsT2dCNkRLSyxpQmdDNDZCeUJMO29CQUM4QjtJQXpHMUMsU0E2R2IyNkQsb0JBQW9CdDhEO01BQ3RCLG9CaEQvK0JIO01nRCsrQmtCOztpQmhELytCbEIsT3dDb0tLdzdCLGNRMDBCb0J4N0I7b0JBQ3dCO0lBOUcvQixJQW9IYnU4RDtJQXBIYSxTQXFIYkMsc0JBQW9CLGdCQURwQkQsZUFDZ0Q7SUFHdkM7O0tBSU8sdUNoQ2grQmhCejdEO0tnQ2krQmdCLHVDaENoK0JoQkM7S2dDaStCZ0Isa0NBTmhCMDdEO0lBTWdCLFNBT2hCSSx1QkFBdUIxNUQsSUFBSWk1RDtNQUM3QixlQUQ2QkEsT0FFckIsSUFBSjE5RCxFQUFJLFNBRmlCeUUsS0FHekIsTUFIeUJBLEtBR3pCLE9BREl6RSxDQUVIO0lBWGlCLFNBZWhCbytEO01BQXlCLDhCQXJCekJMLE9BTUFHLGNBZW9FO0lBZnBELFNBeUNoQkcsbUNBQ0YsWUFBaUM7SUExQ2YsU0E0Q2hCQyw2QkFBNkJDLEtBQy9CLG1CQUFrQztJQTdDaEIsU0ErQ2hCQywyQkFBMkJELEtBQzdCLFdBRDZCQSxPQUNRO0lBaERuQixTQWtEaEJFLDZCQUE2QkY7TUFDbkIsSUFBUkcsTUFBUSwyQkFEbUJIO01BRS9CLDZCQUYrQkE7TUFFL0IsT0FESUcsS0FFQztJQXJEYSxTQXVEaEJDLHlCQUF5QkosSUFBSUs7TUFDL0IsWUFEK0JBLEtBQUpMLFFBQzNCLFFBQW9FO0lBeERsRCxTQTBEaEJNLCtCQUFvQ047TUFZOUIsU0FBSi8rRCxFQVBvQlEsRUFBRTFFLEVBQUV3RSxHQUNrQixnQ0FOUnkrRCxPQU1RLE1BRHRCditELEVBQUUxRSxFQUFFd0U7TUFRcEIsU0FBSmtoQixRQVhGLGdDQUZvQ3U5QztNQWM5QixTQUFKejNDLFFBVkYsZ0NBSm9DeTNDO01BZTlCLFNBQUpqakUsRUFSb0J3RSxHQUN0QixnQ0FSb0N5K0QsT0FPZHorRDtNQVNoQixTQUFKOFAsRUFQb0I5UCxHQUN0QixnQ0FWb0N5K0QsT0FTZHorRDtNQU9oQix5QkFKSk4sRUFDQXdoQixFQUNBOEYsRUFDQXhyQixFQUNBc1UsRUFDdUI7SUFTYixTQUFaa3ZELGdCaERubENMLE9nRGlwQks5RSxhQTRXQWdFO0lBdUZZLFNBQVplLGdCaERwbENMLE9nRGtwQks5RSxhQTJXQStEO0lBd0ZhLFNBQWJnQixpQmhEcmxDTCxPZ0RvcEJLOUUsY0F5V0E4RDtJQXlGYyxTQUFkaUIsa0JoRHRsQ0wsT2dEcXBCSzlFLGVBd1dBNkQ7SUEwRlcsU0FBWGtCLGVoRHZsQ0wsT2dEc3BCSzlFLFlBdVdBNEQ7SUEyRlksU0FBWm1CLGdCaER4bENMLE9nRDhnQks5RyxhQStlQTJGO0lBNEZXLFNBQVhvQixlaER6bENMLE9nRGdqQks1RyxZQTZjQXdGO0lBNkZZLFNBQVpxQixnQmhEMWxDTCxPZ0RpakJLNUcsYUE0Y0F1RjtJQThGWSxTQUFac0IsZ0JoRDNsQ0wsT2dEMmhCS2hILGFBa2VBMEY7SUErRmEsU0FBYnVCLGlCaEQ1bENMLE9nRHVpQktoSCxjQXNkQXlGO0lBZ0dXLFNBQVh3QixvQmhEN2xDTCxPZ0R3bkJLaEcsWUFxWUF3RTtJQWlHZSxTQUFmeUIscUJoRDlsQ0wsT2dENG5CSy9GLGdCQWlZQXNFO0lBa0djLFNBQWQwQixvQmhEL2xDTCxPZ0QrbkJLL0YsZUE4WEFxRTtJQW1HWSxTQUFaMkIsa0JoRGhtQ0wsT2dEbW9CSy9GLGFBMFhBb0U7SUFvR2MsU0FBZDRCLG9CaERqbUNMLE9nRHNvQksvRixlQXVYQW1FO0lBcUdhLFNBQWI2QixtQmhEbG1DTCxPZ0Q0b0JLOUYsY0FpWEFpRTtJQXNHYSxTQUFiOEIsaUJoRG5tQ0wsT2dEeW9CS2hHLGNBb1hBa0U7SUF1R2MsU0FBZCtCO01oRHBtQ0wsT2dEbXNCS3JGLGVBMFRBc0Q7SUF3R1ksU0FBWmdDLGdCaERybUNMLE9nRDhzQktwRixhQStTQW9EO0lBeUdjLFNBQWRpQyxrQmhEdG1DTCxPZ0Q2c0JLdEYsZUFnVEFxRDtJQTBHZ0IsU0FBaEJrQyxvQmhEdm1DTCxPZ0R3cUJLM0YsaUJBcVZBeUQ7SUEyR2MsU0FBZG1DLGtCaER4bUNMLE9nRG1xQks3RixlQTBWQTBEO0lBNEdnQixTQUFoQm9DO01oRHptQ0wsT2dEaXFCSy9GLGlCQTRWQTJEO0lBNkdtQixTQUFuQnFDO01oRDFtQ0wsT2dEOHFCSzdGLG9CQStVQXdEO0lBK0dZLFNBQVpzQyxnQmhENW1DTCxPZ0RrdEJLekYsYUEyU0FtRDtJQWdIYSxTQUFidUMsaUJoRDdtQ0wsT2dEMnRCS3pGLGNBa1NBa0Q7SUFpSGUsU0FBZndDO01oRDltQ0wsT2dEc3VCS3pGLGdCQXVSQWlEO0lBbUhVLFNBQVZ5QyxjaERobkNMLE9nRCt1Qkt4RixXQThRQStDO0lBb0hZLFNBQVowQyxnQmhEam5DTCxPZ0Q2dUJLMUYsYUFnUkFnRDtJQXNIYSxTQUFiMkMsaUJoRG5uQ0wsT2dEZ3lCS2pGLGNBNk5Bc0M7SUF1SGEsU0FBYjRDLGlCaERwbkNMLE9nRDYvQks1QztJQXlIaUIsU0FBakI2QztNaER0bkNMLE9nRHl4QktyRixrQkFvT0F3QztJQTBIaUIsU0FBakI4QyxxQmhEdm5DTCxPZ0Q2L0JLOUM7SUE0SGUsU0FBZitDO01oRHpuQ0wsT2dEdTBCSzVFLGdCQXNMQTZCO0lBNkhvQixTQUFwQmdEO01oRDFuQ0wsT2dEKzBCSzVFLHFCQThLQTRCO0lBOEhlLFNBQWZpRCxtQmhEM25DTCxPZ0R1MUJLNUUsZ0JBc0tBMkI7SUErSGtCLFNBQWxCa0Q7TWhENW5DTCxPZ0QwMUJLNUUsbUJBbUtBMEI7SUFpSWdCLFNBQWhCbUQsb0JoRDluQ0wsT2dENHZCS2pHLGlCQWlRQThDO0lBa0lnQixTQUFoQm9ELG9CaEQvbkNMLE9nRDYvQktwRDtJQW1JaUIsU0FBakJxRDtNaERob0NMLE9nRGl3QktqRyxrQkE0UEE0QztJQXFJb0IsU0FBcEJzRDtNaERsb0NMLE9nRG93QktqRyxxQkF5UEEyQztJQXNJb0IsU0FBcEJ1RCx3QmhEbm9DTCxPZ0Q2L0JLdkQ7SUF5SUYsU0FERXdEO01oRHJvQ0wsT2dEZzVCSzFFLDZCQTZHQWtCO0lBNElGLFNBREV5RDtNaER4b0NMLE9nRCsxQktsRiwrQkE4SkF5QjtJQThJRixTQURFMEQ7TWhEMW9DTCxPZ0Q0MkJLbEYsK0JBaUpBd0I7SUFpSkYsU0FERTJEO01oRDdvQ0wsT2dEczNCS2xGLCtCQXVJQXVCO0lBbUpGLFNBREU0RDtNaEQvb0NMLE9nRHkzQktsRiwrQkFvSUFzQjtJQXNKRixTQURFNkQ7TWhEbHBDTCxPZ0Rva0JLN0ksK0JBeWJBZ0Y7SUF3SkYsU0FERThEO01oRHBwQ0wsT2dENGpCSy9JLCtCQWljQWlGO0lBMEpGLFNBREUrRDtNaER0cENMLE9nRG1qQktySixrQkEwY0FzRjtJQTRKRixTQURFZ0UscUJoRHhwQ0wsT2dENi9CS2hFO0lBOEpGLFNBREVpRSxvQmhEMXBDTCxPZ0RvakJLdEosaUJBeWNBcUY7SUFnS0YsU0FERWtFLG9CaEQ1cENMLE9nRDYvQktsRTtJQWtLRixTQURFbUUsZWhEOXBDTCxPZ0R1akJLckosWUFzY0FrRjtJQWtLRixTQU1Nb0UsY0FBZ0J0MkMsSUFBdUJ1MkMsS0FBSzNFO1VBQTVCNEU7O2lCQUFTLFFBQVRBLGdCQUFTdjJDLGFBQVR3MkMsT0F2ZHBCM0g7UUF1ZHNEOzs7Z0JBR2pENEg7WUFDTCxXQUoyQ0gsS0FBSzNFO1lBS2hELFdBTG9CNkUsT0FBNEI3RTtZQUtoRCxhQUxvQjZFLDRCQUdmQzs7VUFERSxrQkFGb0NILEtBQUszRTtRQUMxQztJQVBSLFNBdUJFZ0YsYUFBZTUyQyxJQUF1QnUyQyxLQUFLM0UsSUFBSWlGO01BQ2pELEdBRGlCNzJDLElBQVMsUUFBVEEsY0FBU0MsYUFBVHcyQyxPQXhlZjNIO01BeWVJLHVCQUQyQytIO01BQzNDO1lBRVNDLGlCQUFIajZEO1FBQ1YsV0FKc0MwNUQsS0FBSzNFLElBR2pDLzBEO1lBWDJCMEUsSUFXeEJ1MUQ7UUFWZjtVQUFNLHFCQURpQ3YxRDtVQUNqQztnQkFFU0UsZUFBSDdOO1lBQ1YsV0FJZTZpRSxPQUE0QjdFO1lBSDNDLFdBR3NDMkUsS0FBSzNFLElBTGpDaCtEO2dCQUgyQjJOLElBR3hCRTs7VUFERjtNQVFBLFFBR3lCO0lBNUJ0QyxTQStCRXMxRCxjQUFjbkYsSUFBSTE5RDtNQUNwQiw4QkFEb0JBLEdBQ3BCO2VBR0lnSTtRQUNGLGdCQUxjMDFELElBS00sTUFMRjE5RCxFQUVoQmlJLFFBQ0FDLFdBREFEO1FBR0Y7a0JBRkVDO1FBRUYsUUFDMkI7O1dBSHpCQSxhQUZBN0U7VUFRSSwwQkFUWXJELEVBR2hCa0k7VUFNSTtZQUVGLFNBQ0EsaUJBWlV3MUQ7OzRCQWNWLFNBQVUsZUFkQUEsWUFpQkw7O1FBRVgsU0FqQkl6MUQsWUFEQTVFO1FBa0JKLFlBQXFCLGNBQVE7SUFsRDdCLFNBb0RFeS9ELGdCQUFrQmgzQyxJQUF1QnUyQyxLQUFLM0U7TWhEbnRDbkQsR2dEbXRDdUI1eEM7T0FBTyxRQUFQQSxZQUFPQzs7V0FBUDNZLDBCQUFtQixRQUFFO01BQWQsVUFFakIsSUFBTDFULFdBQUssa0JBRmlDMmlFLEtBQUszRSxJQUUzQ2grRDtNQURHLGtCQURZMFQsS0FBNEJzcUQ7SUFwRGhELFNBd0RFcUYsZ0JBQWlCdnVELEdBQUlDLE1BQU1pcEQ7TWhEdnRDaEMsbUJnRHd0Q1csSUFBTGgrRCxXQUFLLGtCQURXOFUsR0FBVWtwRCxJQUMxQmgrRDtNQUNRLElBQUw4STtNQUFLLGtCQUZZaU0sTUFBTWlwRCxJQUV2QmwxRDtJQTFETixTQTRERXc2RCxnQkFBaUIvNkQsS0FBTUMsTUFBTXcxRDtNaEQzdENsQyxtQmdENHRDb0IsSUFBTDk3RCxXQUFLLGtCQURFcUcsS0FBWXkxRCxJQUNuQjk3RDtNQUNNLElBQUxqQztNQUFLLGtCQUZPdUksTUFBTXcxRCxJQUVsQi85RDtJQTlEYixTQWtFRXNqRSxZQUFZOS9ELE9BQU8rL0Q7TUFDWCxxQkFDQSx3QkFETnorRDtNQUVKLFdBSGN0QixPQUVWdTZELElBRmlCd0Y7TUFJckIsZUFGSXhGO01BRE0sSUFJTnI2RCxJQUpBb0I7TUFJTSxZQUFOcEIsSUFFQyxNQU5Eb0IsTUFJQXBCLGFBQ1ksU0FMWm9CLElBTTJCO0lBekUvQixTQXNGRTArRCxzQkFBc0J6RixJQUFJLytEO01BQWEsVUFBYkE7T0FBYSxPQUFiQTtnQkFDRyxvQkFEUCsrRDtnQkFFTyxvQkFGUEE7Z0JBSU8sc0JBSlBBO2dCQUtPLHdCQUxQQTtnQkFNTyx3QkFOUEE7Z0JBUU8scUJBUlBBO2lCQVNPLHFCQVRQQTs7T0FBaUIsT0FBYi8rRDs7Y0FHVG8rQixPQUhTcCtCLGNBR2hCc2hDLE1BSGdCdGhDO2lCQWxqQjFCKzdELGVBa2pCc0JnRCxJQUdaejlCLE1BQU9sRDtnQkFJWTs7Y0FHbEJyNkIsRUFWZS9EO1VBVUcsY0FWUCsrRDtVQVVPLHFCQVZQQSxJQVVYaDdELEdBQTREO0lBaEd6RSxTQXNHTTBnRSxhQUFXMUYsSUFBSTl2RDtNaERyd0N4QjtNZ0Rxd0M4QixVQUFOQTtPQTBCUzs7T0ExQkgsT0FBTkE7O2NBU0lwTyxFQVRKb08sT0FTQ2dCLEVBVERoQjtVQVVuQixhQVZlOHZELElBU0s5dUQ7VUFDcEIsNkJBVmU4dUQsSUFTUWwrRDs7bUJBVEpvTzs7WUFhbkIsSUFEb0NDO1lBQ3BDLGFBYmU2dkQ7WUFjYztxQkFkZEEsa0JBY2MsWUFkekIwRixhQVlnQ3YxRDtjQUdBQztVQUNwQyxhQWhCZTR2RDtVQWlCSztvQ0FBbUIsWUFqQm5DMEYsYUFlZ0N0MUQ7V0FFaEI7O2lDQWpCTDR2RCxJQWlCVnhtQixPQUFRbXNCOzttQkFqQk16MUQ7Ozs7a0JBQytDMkMsSUFEL0MzQyxPQUN1Q3VxQyxhQUFsQnZEOzs7NkJBa0JqQjUwQyxFQW5CSjROLE9BbUJDK21DOzs7bUJBbkJEL21DOzs7O2tCQUs2QzJNLElBTDdDM00sT0FLcUNxb0QsZUFBbEI5Zjs7Ozs2QkFnQmpCenpDLEVBckJGa0wsT0FxQkRzb0M7OzttQkFyQkN0b0M7Ozs7a0JBQytDMkMsSUFEL0MzQyxPQUN1Q3VxQyxhQUFsQnZEOzs7NkJBa0JqQjUwQyxFQW5CSjROLE9BbUJDK21DOzs7bUJBbkJEL21DOzs7Ozs7a0JBSzZDMk0sSUFMN0MzTSxPQUtxQ3FvRCxlQUFsQjlmOzs7OzJCQWdCakJ6ekMsRUFyQkZrTCxPQXFCRHNvQzs7O2NBRUptTSxJQXZCS3owQyxPQXVCUndvQyxJQXZCUXhvQztVQXVCUyxhQXZCYjh2RCxJQXVCSnRuQjtVQUFpQixrQkFBZGlNLElBdkJDcWI7O2NBd0JMNEYsSUF4QlMxMUQsT0F3QlMsYUF4QmI4dkQsSUF3Qkw0RixLQUFrQixzQkF4QmI1Rjs7Y0F5QktyeUQsSUF6QkR1QyxPQXlCRjIxRCxJQXpCRTMxRDtVQXlCUyxhQXpCYjh2RCxJQXlCRTZGO1VBQVcsbUJBQVJsNEQ7TXhDOXdCaEI7ZXdDd3ZCSixhQUhlcXlELElBQ3lCOW9CLFlBbnBCeEMya0IsaUJBa3BCZW1FLElBQzJDdmxCLEtBQVE1bkM7O1NBTWxFLGFBUGVtdEQsSUFLdUJ2bkI7Z0JBdnBCdENvakIsaUJBa3BCZW1FLElBS3lDekgsT0FHaEIsU0FId0IxN0M7ZUFlcEMsYUFwQmJtakQsSUFtQksvb0IsS0FDUSx1QkFwQmIrb0IsSUFtQlExOUQ7Z0JBR0ssYUF0QmIwOUQsSUFxQkd4bkIsS0FDVSxxQkF0QmJ3bkIsSUFxQk1oN0QsR0FLUztJQWhJaEMsU0FzSU04Z0UsYUFBVzlGLElBQUk5dkQ7TWhEcnlDeEI7TWdEcXlDOEIsVUFBTkE7T0E2QlM7O09BN0JILE9BQU5BOztjQVlJcE8sRUFaSm9PLE9BWUNnQixFQVpEaEI7VUFhbkIsYUFiZTh2RCxJQVlLOXVEO1VBQ3BCLDZCQWJlOHVELElBWVFsK0Q7O21CQVpKb087O1lBZ0JuQixJQURvQ0M7WUFDcEMsYUFoQmU2dkQ7WUFpQmM7cUJBakJkQSxrQkFpQmMsWUFqQnpCOEYsYUFlZ0MzMUQ7Y0FHQUM7VUFDcEMsYUFuQmU0dkQ7VUFvQks7b0NBQW1CLFlBcEJuQzhGLGFBa0JnQzExRDtXQUVoQjs7aUNBcEJMNHZELElBb0JWeG1CLE9BQVFtc0I7O21CQXBCTXoxRDs7OztrQkFDK0MyQyxJQUQvQzNDLE9BQ3VDdXFDLGFBQWxCdkQ7Ozs2QkFxQmpCNTBDLEVBdEJKNE4sT0FzQkMrbUM7OzttQkF0QkQvbUM7Ozs7a0JBSzZDMk0sSUFMN0MzTSxPQUtxQ3FvRCxlQUFsQjlmOzs7OzZCQW1CakJ6ekMsRUF4QkZrTCxPQXdCRHNvQzs7O21CQXhCQ3RvQzs7OztrQkFDK0MyQyxJQUQvQzNDLE9BQ3VDdXFDLGFBQWxCdkQ7Ozs2QkFxQmpCNTBDLEVBdEJKNE4sT0FzQkMrbUM7OzttQkF0QkQvbUM7Ozs7OztrQkFLNkMyTSxJQUw3QzNNLE9BS3FDcW9ELGVBQWxCOWY7Ozs7MkJBbUJqQnp6QyxFQXhCRmtMLE9Bd0JEc29DOzs7bUJBeEJDdG9DOzs7O2tCQVNzQzAwQyxJQVR0QzEwQyxPQVM4QjYxRCxlQUFsQnJ0QjtjQUMvQixhQVZlc25CLElBU2dCdG5CO3FCQTNyQi9CbWpCLGlCQWtyQmVtRSxJQVNrQytGLE9BRVQsV0FGaUJuaEI7Y0FpQjNDRCxJQTFCS3owQztVQTBCUyxhQTFCYjh2RDtVQTBCbUQsdUJBMUJuREEsSUEwQm1ELFdBQXBEcmI7O2NBQ0ppaEIsSUEzQlMxMUQsT0EyQlMsYUEzQmI4dkQsSUEyQkw0RixLQUFrQixzQkEzQmI1Rjs7Y0E0QktyeUQsSUE1QkR1QyxPQTRCRjIxRCxJQTVCRTMxRDtVQTRCUyxhQTVCYjh2RCxJQTRCRTZGO1VBQVcsbUJBQVJsNEQ7TXhDanpCaEI7ZXdDd3hCSixhQUhlcXlELElBQ3lCOW9CLFlBbnJCeEMya0IsaUJBa3JCZW1FLElBQzJDdmxCLEtBQVE1bkM7O1NBTWxFLGFBUGVtdEQsSUFLdUJ2bkI7Z0JBdnJCdENvakIsaUJBa3JCZW1FLElBS3lDekgsT0FHaEIsU0FId0IxN0M7ZUFrQnBDLGFBdkJibWpELElBc0JLL29CLEtBQ1EsdUJBdkJiK29CLElBc0JRMTlEO2dCQUdLLGFBekJiMDlELElBd0JHeG5CLEtBQ1UscUJBekJid25CLElBd0JNaDdELEdBS1M7SUFuS2hDLFNBMktFZ2hFLFdBQVNudEMsRUFBRW1uQztVQUFhdjlCO2E1Q2lLcEJxVTt3QjRDL0pDNW1DLEtBQU8sYUFGRDh2RCxJQUVOOXZELEtBQU8sa0JBRkgyb0IsRUFBRW1uQyxJQUUwQjs7ZUFGYnY5QjtJQTNLMUIsU0FnTEV3akMsWUFBVXB0QyxFQUFFbW5DO01oRC8wQ2pCLElnRCswQzhCdjlCLG9CNUMyYXJCdVYsYTRDM2FNbmYsRUFBRW1uQyxJQUFhdjlCO0lBaEwzQixTQW1MRXlqQyxXQUFTbEc7VUFBY3Y5QjthNUN3YW5CdVYsNEJKMXZEVCxlZ0RrMUM0QnZWO0lBbkx6QixTQXNMRTBqQyxVQUFRbkc7TUFBTSxvQmhEcjFDbkI7TWdEcTFDbUIsc0JoRHIxQ25CLE9nRDAwQ0tnRyxnQkFXUWhHLFVBQXlCO0lBdExuQyxTQXVMRW9HLFNBQU8zakMsS0FBTSw0QkF6VmI2OUIsZUF5Vk83OUIsSUFBK0I7SUF2THhDLFNBd0xFNGpDLFVBQVE1akMsS0FBTSw0QkF6VmQ4OUIsZUF5VlE5OUIsSUFBK0I7SUF4THpDLFNBMExFNmpDLFNBQVN6dEM7VUFBVzRKO2E1Q2tKaEJxVTt3QjRDaEpDNW1DO2lCQUFPOzBCQUZIMm9CLFdBRVVtbkMsS0FBTyxvQkFBUEEsSUFBZDl2RCxJQUF1QyxFQUFDOztlQUZ6QnV5QjtJQTFMdEIsU0ErTEU4akMsUUFBUTlqQyxLQUFNLHlCQUFjN2tDLEdBQUssT0FBTEEsQ0FBTSxFQUExQjZrQyxJQUErQjtJQS9MekMsU0EwUUUrakMsUUF6RVMzdEM7TUFDSCxJQURjNEosYUFDZCxvQkFDRSx3QkFETjcrQjtNQUNNLFNBQ044OEIsSUFBRXh3QjtRQUNKLGFBRkU4dkQsSUFDRTl2RDtRQUVGLGtCQUxPMm9CLEVBS1AsdUJBSkFqMUIsRUFDQW84RCxLQUc4QjtNQUh4QixtQkFDTnQvQixNQUhrQitCO0lBak10QixTQTBNRWdrQyxVQUFRaGtDLEtBQU0sZUFsMUNkKzBCLEtBazFDUS8wQixJQUFxQjtJQTFNL0IsU0E0TUVpa0MsVUFBVTd0QztNQUNKLElBRGU0SixhQUNmLG9CQUNFLHdCQURONytCO01BQ00sU0FDTjg4QixJQUFFeHdCO1FBQ0osYUFGRTh2RCxJQUNFOXZEO1FBRUYsa0JBTFEyb0IsRUFLUix1QkFKQWoxQixFQUNBbzhELEtBRzhCO01BSHhCLG1CQUNOdC9CLE1BSG1CK0I7SUE1TXZCLFNBcU5Fa2tDLFNBQVNsa0MsS0FBTSxpQkE3MUNmKzBCLEtBNjFDUy8wQixJQUFzQjtJQXJOakMsU0F5TkVta0M7TUFDRixlQTVYRXRHLGlCQTRYRixzQkEzWEVDLGdCQTRYNkI7SUFFeEIsUUFKTHFHO0lBSUssU0FTTEMsK0JBQXNDNTRDLE1BQ2pDbnNCLEVBQVN3aEIsRUFBVzhGLEVBQVV4ckI7TUFDckMsK0JBRndDcXdCLE1BQ2pDbnNCLEVBQVN3aEI7TUFDaEIsWUFEMkI4RjtNQUMzQixZQURxQ3hyQjtNQUNyQyxRQUV3QjtJQWJqQixTQWdCTGtwRSwrQkFBc0M3NEM7TUFDeEMsVUFEd0NBLHdDQUVHO0lBSzNDLFNBREU4NEM7TWhEbDVDTCxPZ0RxNENLRiwrQkF4WUF2RztJQTJaRixTQURFMEc7TWhEdjVDTCxPZ0Q0NENLRiwrQkEvWUF4RztJQTJaRixTQVVFMkcsVUFBUXJqRTtNQUNBLElBRFc2K0IsYUFDWCx3QkFEQTcrQjtNQUNBLFNBQ05pMUIsRUFBRTNvQixLQUFNLGFBRFI4dkQsSUFDRTl2RCxLQUFNLHNCQURSOHZELE1BQ29EO01BRDlDLG1CQUNObm5DLElBRmlCNEo7SUFWckIsU0ErQkV5a0MsK0JBQStCajVDO1VBSVpzdEMsYUFEREMsYUFEQUMsYUFEREM7ZUFLZnlMLFVBQVVybEUsRUFBRWdKO1FoRDc3Q25CLDRCZ0Q2N0NnRCxJQUFMeEksV0FBSyxrQkFBL0JSLEVBQTBCUTtRQUFnQixPQUF4Q3dJO01BQ1UsMkJoRDk3QzdCLE9nRDY3Q09xOEQsVUFMZXpMO01BT1EsMkJoRC83QzlCLE9nRDY3Q095TCxVQUpnQjFMO01BTU87TUFDQSwyQmhEaDhDOUIsT2dENjdDTzBMLFVBSGdCM0w7TUFLTztNQUVDLDJCaERqOEMvQixPZ0Q2N0NPMkwsVUFGaUI1TDtNQU1PO0lBekM1QixTQTJDRTZMLCtCQUErQjNrQztNQUN0QixJQUFQNGtDLEtBQU8sK0JBRHNCNWtDO01BQ3RCLFNBQ1A2a0MsY0FBY2hsRSxHQUFJLGtCQURsQitrRSxzQkFDYy9rRSxHQUFzQztNQUQ3QyxTQUVQaWxFLGVBQWVqbEUsR0FBSSxrQkFGbkIra0Usc0JBRWUva0UsR0FBdUM7TUFGL0MsU0FHUGtsRSxlQUFlbGxFLEdBQUksa0JBSG5CK2tFLHNCQUdlL2tFLEdBQXVDO01BSC9DLFNBSVBtbEUsZ0JBQWdCbmxFLEdBQUksa0JBSnBCK2tFLHNCQUlnQi9rRSxHQUF3QztNQUpqRCxVQUNQZ2xFLGNBQ0FDLGVBQ0FDLGVBQ0FDLGdCQUM0RDtJQUdoRSxTQURFQztNaEQzOENMLE9nRHU3Q0tSLCtCQTFiQTVHO0lBaWRGLFNBREVxSDtNaEQ3OENMLE9nRG04Q0tQLCtCQXRjQTlHO0lBaWRGOzs7T0F4ekJFNUQ7T0FpY0E4RTtPQXprQkE3RztPQTBrQkE4RztPQXZjQW5GO09Ba2NBOEU7T0FqY0E3RTtPQWtjQThFO09BaGNBN0U7T0FpY0E4RTtPQWhjQTdFO09BaWNBOEU7T0ExZEF2RjtPQWtlQStGO09BL2RBOUY7T0FnZUErRjtPQXZlQWxHO09BcWVBZ0c7T0ExZEE1RjtPQTZkQStGO09BMWRBOUY7T0EyZEErRjtPQXJkQTdGO09Bc2RBOEY7T0F6ZEEvRjtPQTBkQWdHO09BdFpBbkY7T0F5WkFzRjtPQXhaQXJGO09BdVpBb0Y7T0FsYUF0RjtPQWlhQXFGO09BOWFBdEY7T0FkQUY7T0ErYkEyRjtPQXpiQTFGO09BNGJBNkY7T0F2Y0EvRjtPQXFjQTZGO09BdmNBOUY7T0F3Y0ErRjtPQXpVQTFFO09BbVZBaUY7T0FuVEExRTtPQW9UQTJFO09BM1ZBcEY7T0E2VkFxRjtPQXhWQXBGO09BeVZBcUY7T0E1VEEvRTtPQVlBSTtPQWtUQTRFO09BMVNBM0U7T0EyU0E0RTtPQWhTQTFFO09Ba1NBNEU7T0FyU0E3RTtPQW9TQTRFO09BL1hBL0Y7T0FrWUFpRztPQS9YQWhHO09BZ1lBaUc7T0E5WEFoRztPQStYQWlHO09BOWFBeEc7T0EwWkF5RjtPQWpaQXhGO09Ba1pBeUY7T0E5WEF0RjtPQWlZQXdGO09BbllBekY7T0FvWUEwRjtPQTNZQTNGO09Bd1lBeUY7T0ExV0FuRjtPQThYQWlHO09BN1hBaEc7T0E4WEFpRzs7T0F4bUJBako7T0Fna0JBZ0g7T0FwakJBL0c7T0FxakJBZ0g7T0FyaUJBekc7T0F1bUJBcUo7T0EzbUJBeko7T0FtbUJBcUo7T0FsbUJBcEo7T0FzbUJBc0o7T0FybUJBcko7T0FtbUJBb0o7T0FsbUJBbko7T0FzbUJBcUo7T0E1UUFwRjtPQXFQQTBFO09BL1FBL0U7T0F1UkFrRjtPQXBSQWpGO09Bc1JBa0Y7T0FoVEFyRjtPQXlTQWtGO09BNVJBakY7T0E4UkFrRjtPQXRrQkExSTtPQThrQkE2STtPQXRsQkE5STtPQXdsQkErSTtPQTNLQW5FO09Bb0JBSztPQUNBQztPQWhCQUw7T0FXQUc7T0FNQUc7T0FlQUU7T0E5Q0FYO09BWEFGO09BbUZBYztPQUdBQztPQUdBRTtPQUdBQztPQUtBRTtPQUdBRTtPQTRHSXVEO09BaUJKTTtPQVFBRztPQXFCQUM7T0FJQUM7T0FJQUM7T0EwSEFhO09BQ0FDO09BQ0FDO09Ba0JBSTtPQVdBRTtPQXRCQUo7T0FaQUw7T0FSQUY7T0FlQU07T0FWQUw7T0EwRkFPO09BOURBRTtPQXVEQU87T0FPQVQ7T0F2QkFPO09BS0FDO09BbEJBSDtPQU9BQztPQTUxQkFoTTtPQXlpQkE0RztPQXhpQkEzRztPQXlpQkE0RztPQTZWQXVGO09Bb0JBUTtPQVJBTjtPQVVBTztJQUNGO1FDdnlDSUM7YUFLQUMsVUFBVUM7TUFDWjtRQUNVLElBQUo5aUUsRUFBSSxXQUZFOGlFO1FBRUYsUUFBSjlpRTtRQUFJO2dCQUZFOGlFO1FBRUYsVUFBSjlpRSxFQUlhLFFBTlA4aUU7ZUFFTjlpRTs7OztVQU9KLFFBZEE0aUUsVUFjQSwyQkFkQUE7bUJBa0JDO2FBR0RHLFVBQVVELElBQ1osT0FEWUEsWUFHUCxVQUhPQSxHQUdLO2FBUWZFLGtCQUFrQkY7TUFDWixJQUFKOWlFLEVBQUksVUFEWThpRSxJQUNaLEdBRFlBLE1BRUYsa0JBQ2xCLE9BRkk5aUUsQ0FFSDthQUdDaWpFLGFBQWFILElBQ1IsVUFEUUEsSUFDUixPQURRQSxLQUVOO2FBS1BJLG1CQUFtQkosSUFBSyxhQUFMQSxTQUF5QjthQUU1Q0ssY0FBY0w7TUFDaEIsU0FEZ0JBO01BQ2hCOzs7eUJBQ3NCO1FBQ00sSUFBZjc0QztRQUFlLE9BQWZBLE1BRThCO2FBR3pDbTVDLFdBQVdOLElBQ2IsT0FEYUEseUJBR1E7YUFLbkJPLFlBQVlQLElBQUssYUFBTEEsTUFBb0M7YUFFaERRLHdCQUF3QlIsSUFBSyxrQkFBb0M7YUF5U25FUyxhQXZTUVQ7TUFDUixpQkFEUUEsTUFFRSxhQUROVTtNQUVKLFFBRklBO01BRUosUUFIUVY7TUFHUixPQURJbjJDLEdBR0Q7YUFLRDgyQyxVQUFVbG1DLE1BQU11bEMsSUFDbEIsd0JBRGtCQSxJQUNsQixPQURZdmxDLEtBRVA7YUFHSG1tQyxZQUFZbm1DLE1BQU11bEMsSUFBSyxpQkFBWHZsQyxjQUFNdWxDLEdBQTZCO2FBRS9DYSxXQUFXcG1DLE1BQU11bEMsR0FBRzlpRTtNQUN0QixTQURtQjhpRSxNQUFHOWlFLEdBQ3RCLG1CQURhdTlCLE1BQU11bEMsR0FFQztRQUdsQmM7YUFFQUMsU0FBT0MsTUFBTXg1RDtNQVFHOztjQW5HaEJzNEQ7Ozs7O2NBMkZhdDREO2NBUUcsU0FWaEJzNUQ7Y0FFT0UsTUFVVjthQUdHQyxjQUFZem1FO01BQ2Qsc0NBRGNBO01BQ2QsU0FFSWdOO1FBQ0YsR0FGRTNKLE9BREEvSCxLQUdnQjtRQUNWLElBQUpvSCxFQUFJLGdCQUxJMUMsRUFDVjFFO1FBSU07ZUFBSm9ILENBRUg7TUFOSCxrQkFFSXNLLEtBS21COztJQUdMLFNBQWhCMDVELHNCakQxUlAsT2lEa1FPSDtJQXdCZ0IsSUFxRGRsakU7SUFyRGMsU0E4Q2hCc2pFLGtCQUFrQjVpRTtNQUFLLHNCQUFMQSxJQUFLLGlCQUFxQztJQTlDNUMsU0FrRGhCNmlFLGtCQUFrQjdpRSxJQUFNLGlCQUFpQjtJQWxEekIsU0FvRGhCOGlFLFFBQVFDLGNBQWNOLE1BQU16aUU7TUFFOUI7ZUFJSWlKO1FBQ0YsR0FKRTFSLE9BQ0EyaEIsUUFHOEIsSUFBSnZhLEVBQUksZUFMOUIrQixJQUNBbkosTUFJOEIsY0FBSm9IO1FBQzVCLEdBSEVxa0UsT0FHVztRQUNKLGVBVG1CaGpFLEdBRTFCVSxNQURBcEI7UUFRTyxhQUxQNFo7a0JBQ0E4cEQsV0FLaUIsV0FWWEQsY0FBb0IvaUU7a0JBRzFCekksU0FTRSxlQVZGbUosT0FZQztNQVpMLGdCQUZ3QitoRSxNQU1wQng1RCxLQVNhO0lBc0JqQixJQUlFZzZELE1BSkYsUUF2Q0VKLDRCbEMvU0Z6a0U7SWtDc1ZBLFNBTUU4a0UsYUFBYUMsUUFHYnY2QztNQUZGLHdCQUVFQTtRQUNTLElBQUw1b0IsR0FBSyxXQUpJbWpFLFFBR2J2NkM7ZUE5Q0FrNkMsUUFOQUYscUJBb0RBaDZDLE1BQ0k1b0I7TUFGRyxPQUpQaWpFLEtBTytDO0lBR3JDLFNBR1ZHLGdCakRwWVAsT2lEeVhPRixhbEMxVkZyakU7SWtDbVdnQixTQUdkd2pFLG9CakRyWVAsT2lEeVhPSCxhbEMzVkZwakU7SWtDb1dnQixTQUtkd2pFLGVBQWF0akUsSWpEdllwQixPaUQ4VU84aUUsUUFGQUQscUJBMkRhN2lFLE9BQzBCO0lBTnpCLFNBU2R1akUsU0FBUzlCO01BQ1gsU0FEV0E7TUFDWDtPQUlpQzs7UUFKakMsa0JBRUUsSUFEYXpoRSxXQUNiLDZCQURhQTtRQUVhLElBQVB3akU7UUFBTyw2QkFBUEEsTUFDYztJQWRuQixJQWlDWkM7SUFqQ1ksU0FnQ2RDLGFBRUdYLGNBQWMvaUU7TUFDbEI7UUFBSSxjQURjQSxHQURmeWpFOzs7O1VBS0MsSUFERWhDLEdBQ0YsUUFKQXNCLGlCQUFjL2lFO1VBSWQsZ0JBSmNBLEdBR1p5aEUsSUFKSGdDO1VBS0MsT0FERWhDO1FBM0JQLFdBOEJLO0lBSWlCLFNBQXBCa0M7TWpEOWFQLE9pRGthT0QsYUF0RkFiO0lBa0dvQjthQWN0QmUsVUFBVTNuRSxHQUFJLHNCQUFKQSxFQUEwQjtJQWRkLFNBZ0J0QjRuRSxpQkFBaUJsbEU7TUFDVCwwQ0FEU0EsR0FDdUM7SUFqQmxDLFNBb0J0Qm1sRSxpQkFBaUJDO01BRWpCLDBDQUZpQkEsU0FLTjtJQXpCVyxTQW9DdEJDO01BQ0YsZ0RBQXdEO0lBckNoQyxTQXdDdEJDO01BQ0YsZ0RBQXFEO0lBekM3QixTQWdEdEJDLG1CQUFtQnZsRSxFQUFFd2xFO01qRDlkMUIsT2lENGJLUCxVQStCRix5QkFHcUJqbEUsRUFBRXdsRSxJQUNnQjtJQWpEZixTQWtGdEJDLGdCQUFnQjNDLEdBQUc5aUU7TUFDWixJQUFMd2xFLEdBQUssa0JBRFMxQztNQUNULE9BQUwwQyxPQURpQnhsRSxFQUVOLHdCQUZHOGlFLElBR2xCLG1CQUhxQjlpRSxFQUNqQndsRSxHQUVtQjtJQXJGQyxTQTRFbEJFLFdBV1U1QyxHQVBkanJEO01BSEYsVUFHRUE7UUFRTyxJQUFMMnRELEdBQUssa0JBRE8xQztRQUNQLGNBQUwwQztpQkFFTSx3QkFITTFDO3dCQUNaMEM7b0JBR00sd0JBSk0xQyxJQUlOLGdCQUpNQTttQkFLVCxzQkFKSDBDO2dCQVJGM3REO09BM0JGO1NBQVEsZ0JBa0NRaXJELElBakNULFNBaUNTQTtTQWpDVDtXQUF1QixTQUQxQjlpRTtXQUMwQjs7OztXekM0Q3hCLGF5Q3pDRix3QkE4Qlk4aUU7V0E3QlA7O01Bc0JGLHVCQU9TQSxHQVBkanJELElBQXlCO0lBaEZILFNBaUd0Qjh0RCxXQUFXN0MsSUFBd0IsdUJBQW5CLGFBQUxBLE1BQTRCO0lBakdqQixTQXFHdEI4QyxXQUFXOUM7TUFDUCxJQUdKeGxFLEVBSEksYUFET3dsRTtNQUNQLDRCQUdKeGxFOztpQkFBZSxtQ0FBZkE7O2dCQUF3RDtJQXpHbEMsU0FzSHRCdW9FO01BQTZCOzs7aUJBQ3RCO2lCQUNBO2lCQUNBO2lCQUNBO2lCQUNBOztpQkFDTTs7TUFDUiw2QkFBWTtJQTdISyxTQW1JdEJDLGtCQUFrQnppQixLQUFLeWY7TUFDekIsT0FEb0J6ZjttQkFDaEIxMkIsSUFNZ0IsV0FBTyxhQVBGbTJDO21CQUNyQm4yQyxJQUlnQixXQUFPLGFBTEZtMkM7bUJBQ3JCbjJDLElBR2dCLFdBQU8sYUFKRm0yQzttQkFDckJuMkMsSUFLZ0IsV0FBTyxhQU5GbTJDO29CQUNyQm4yQyxJQUUrQixhQUhWbTJDO01BRzJCLElBS2hENWpFLEVBTGdELHNCQUZoRHl0QjtNQVFRLFNBRFJ6dEIsWUFDUSxnQkFSUnl0QjtPQVFxQyxhQVJyQ0EsTUFPQXp0QjtNQUM0QixPQVI1Qnl0QixHQVE2RDtJQTVJekMsU0FvSnRCbzVDLFlBQVlqRCxJQUF3Qyw0QkFBbkIsYUFBckJBLElBQXdDO0lBcEo5QixTQXVMbEJrRCx3QkFBd0J6b0MsTUFBTXVsQztNakRybUJ2QyxJaURxbUJpQ3B5QjtNQUM5QjtpQkFEOEJBLFFBQ1osT0FEWUE7UUFFdEIsSUFHTjF3QyxFQUhNLFVBRjRCOGlFO1FBR2pDLEdBSGlDQSxNQUdaLE9BSE1weUI7UUFJOUIsU0FDRTF3Qzs7WUFJWSx3QkFUZ0Iwd0MsUUFBTW95QixJQUFOcHlCOztrQkFLNUIxd0M7V0FDWSx1QkFOZ0Iwd0MsUUFBTW95QixHQUtsQzlpRSxHQUw0QjB3QztRQVd2QixPQVh1QkEsUUFXbEI7SUFsTVksU0FvUXRCdTFCLDBCQS9Ed0Ixb0MsTUFBTXVsQztNQUNoQyxTQUQwQnZsQyxNQUNSO01BQ1YsSUFBSnY5QixFQUFJLGtCQUZ3QjhpRTtNQUV4QixPQUFKOWlFLGFBTVEsMENBTlJBO01BQUksSUFHRjB3QyxRQUFRLFdBTFluVCxNQUFNdWxDLEdBRTVCOWlFO01BR1UsK0JBQVIwd0MsUUFMMEJveUIsR0FRb0M7SUE3TTVDLFNBa090Qm9ELGdCQUFnQkMsTUFBTUMsT0FBTzNSLFFBQU1xTztNQUdyQyxTQUgrQnJPLFFBR2I7TUFDVixJQUFKNThDLElBQUksa0JBSjZCaXJEO01BS2xDLGNBTHFCc0QsT0FJcEJ2dUQ7UUFFVSx1QkFOaUI0OEMsUUFBTXFPLEdBSWpDanJELEtBbkJnQjBsQjtRQUNsQjttQkFEa0JBLE1BQ0EsT0FEQUE7VUFFVixJQUdOdjlCLEVBSE0sVUFhMkI4aUU7VUFaaEMsR0FZZ0NBLE1BWlgsT0FITnZsQztVQUtULGNBVWE2b0MsT0FWcEJwbUU7WUFDWSx1QkFOSXU5QixNQWVpQnVsQyxHQVZqQzlpRSxHQUxnQnU5QjtvQkFLaEJ2OUI7WUFJWSx3QkFUSXU5QixNQWVpQnVsQyxJQWZqQnZsQztVQVdYLE9BWFdBO01Bd0JSLDBDQUxSMWxCLElBSmNzdUQsT0FTeUQ7SUEzT25ELFNBOE90QkcsdUJBQWtCLCtCQUVSO0lBR1EsU0FBbEJDO01qRGpxQkwsT2lEZ3BCS0wsMkJBWUFJO0lBS2tCLFNBRWxCRSxzQkFBaUIsK0JBRVA7SUFHTyxTQUFqQkM7TWpEeHFCTCxPaURncEJLUCwwQkFtQkFNO0lBS2lCLFNBRWpCRTtNQUFnQjs7Ozs7TXpDMUpaLG1CeUM0Sk07SUFHYSxTQUF2QkM7TWpEL3FCTCxPaURncEJLVCxnQ0EwQkFRO0lBS3VCLFNBS3ZCRSxVQUFVcnBDLE1BQU11bEM7TUFDVix3QkFEVUEsSUFDVixTQUFKOWlFO01BQUk7O2dCQUVDLGtCQUhHdTlCLE1BQU11bEMsR0FDZDlpRTs7aUJBR0ssa0JBSkd1OUIsTUFBTXVsQyxHQUNkOWlFO01BSUcsT0FMS3U5QixLQUtBO0lBVmEsU0FhdkJzcEMsK0JBQW1DdHBDLE1BQU11bEM7TUFDL0IsSUFBUnB5QixRQUFRLFVBRHlCblQsTUFBTXVsQztNQUMvQixpQ0FBUnB5QixRQUR1Q295QixHQUVUO0lBZlQsU0EwQ3ZCZ0Usb0JBQW9CempCLEtBQUtySixRQUFNOG9CO01BQ2pDLE9BRHNCemY7ZUFFSix1QkFGU3JKLFFBQU04b0I7ZUFHZixzQ0FIUzlvQixRQUFNOG9COztTQUpyQixzQkFJZTlvQixRQUFNOG9CLElBbkIzQixvQkFtQjJCQTtTQW5CM0IsVUFDSjlpRTtXQUNZLElBQVJ1OUIsTUFBUSxXQUhNbVQsUUFvQmFveUIsR0FsQi9COWlFO1dBQ1ksU0FBUnU5QixNQUNjLE9BRGRBO1dBQVEsSUFFUjFsQixJQUFJLFVBZXVCaXJEO1dBZDVCLEdBYzRCQSxNQWRQLE9BSHBCdmxDO1dBQVE7V0FJWixTQUZJMWxCOztjQUlvQixpQ0FOcEIwbEIsTUFpQjJCdWxDLEdBZjNCanJELEtBZTJCaXJEO3dCQWYzQmpyRDs7Ozs7MEJBS3FCLGtDQVByQjBsQixNQWlCMkJ1bEMsR0FmM0JqckQsS0FlMkJpckQ7V3pDek0zQjtvQnlDNkxnQyxnQ0FMaEN2bEMsTUFpQjJCdWxDLEdBZjNCanJELEtBZTJCaXJEO29CQVR4Qix3QkFSSHZsQyxNQWlCMkJ1bEM7U0FSMUIsaUNBWmFweUIsUUFvQmFveUI7ZUFLZixzQkFMUzlvQixRQUFNOG9CO2VBTWYsaUNBTlM5b0IsUUFBTThvQjtnQkFPZiw0QkFQUzlvQixRQUFNOG9CLElBT2M7SUFqRHRCLFNBdUR2QmlFLHFCQUFxQnhwQyxNQUFNdWxDO01BQzdCLFNBRHVCdmxDLE1BQ0wsT0FES0E7TUFFZixJQUdOdjlCLEVBSE0sVUFGcUI4aUU7TUFHMUIsT0FIMEJBO2VBQU52bEM7bUJBS3JCdjlCO2lCQUxxQnU5QjtpQkFNRyxtQ0FOSEEsTUFBTXVsQyxHQUszQjlpRSxHQUwyQjhpRSxHQU9qQjtJQTlEYSxTQWtFdkJrRSxtQkFBbUJ6cEMsTUFBTXVsQztNQUMzQixTQURxQnZsQyxNQUNILE9BREdBO01BRWIsSUFBSnY5QixFQUFJLFVBRm1COGlFO01BR3hCLEdBSHdCQSxNQUdILE9BSEh2bEM7Z0JBRWpCdjlCLGVBS0csT0FQY3U5QjtNQU1nQixpREFOaEJBLE1BQU11bEMsR0FFdkI5aUUsR0FGdUI4aUUsR0FPZjtJQXpFYSxTQW9IdkJtRSxXQUFXanRCLFFBQU1rdEIsVUFBVXBFO01BbkNqQjt1QkFtQ0M5b0IsUUFBZ0I4b0I7T0FuQ2pCLGdDQUFSdmxDLE1BbUN5QnVsQztlQUN6QnB5QixRQUNjLFVBRGRBLFFBRGV3MkI7TUFuQ1AsSUFzQ1JsbkUsRUFBSSxVQUhxQjhpRTtNQUkxQixHQUowQkEsTUFJTCxVQUhwQnB5QixRQURldzJCO01BS25CLFVBRklsbkU7UUFJVTs0QkFOVjB3QyxRQUR5Qm95QixHQUd6QjlpRTtTQUtjLGtCQURaeTBELFFBUGF5UztTQVNnQjtVQUY3QnpTOztXQUNBMFMsY0FDNkIscUJBRDdCQSxZQVJ1QnJFOzs7UUFVM0IsNkJBREl1RCxRQVR1QnZELElBUXZCcUU7TUFJSiw2QkFYRXoyQixRQUR5Qm95QixJQUFWb0UsVUFZcUI7SUFoSWYsU0FtSXZCRSw4QkFBOEI3cEMsTUFBTXVsQyxHQUFHL3dELE1BQU12VztNQUMvQyxTQUFJZ1ksVUFBVXhUO1FBQ1osWUFEWUEsZUFHVixhQUhVQSxxQkFJSjtNQUpWO2lDQUQrQ3hFO09BQy9DLFdBRGdDK2hDO09BQ2hDLEtBS0k1OEI7T0FMSjs7WUFPQS9IO1FBQ0U7VUFBUSxnQkFUNEJrcUUsSUFVbEIsZUFBVSxnQkFWaUJ0bkUsSUFRL0M1QztVQUVLLGFBRENvSCxZQUNxQyxXQVZGK1I7VUFVVSxTQUgvQzIrQixXQUlpQixXQVhvQjMrQjtVQVk5Qix3QkFMUDIrQixXQVBrQ295QixHQVNoQzlpRTtVQUFJLFNBRFZwSDs7O01BTUEsT0FQSTgzQyxVQU9FO0lBakptQixTQW9KdkIyMkIsZUFBZTlwQyxNQUFNMnBDLFVBQVVwRTtNQUNqQyxlQURpQnZsQyxVQUNqQixhQUFnQixhQURpQnVsQztNQUNPLFFBQU07TUFBOUM7T0FDWSxrQkFGS3ZsQyxNQUFnQnVsQztPQUVyQixXQUFScHlCO09BQVEsYUFDSSxhQUhpQm95QjtNQUdPLFFBQU07TUFGOUMsSUFHTSxZQUoyQkE7TUFJM0IsU0FDSjlpRTs7OztZQTZCWTtnQ0FoQ1Ywd0MsUUFGNkJveUIsR0FLL0I5aUU7YUE2QlksV0FBUmc2QzthQUFRLGFBQ0ksYUFuQ2U4b0I7WUFtQ1MsUUFBTTtZQUFnQjtxQkFEMUQ5b0IsUUFsQzJCOG9CLEdBN1cvQndDOzs7O2tCQWtYQXRsRTtVQUNZOzhCQUpWMHdDLFFBRjZCb3lCLEdBSy9COWlFO1dBQ1ksV0FBUnFtRTtXQUFRLGFBQ0ksYUFQZXZEO1VBT1MsUUFBTTtVQURsQztXQUVSd0U7WUFBUSw4QkFGUmpCLFFBTjJCdkQsR0E3Vy9Cd0M7VUFzWGdCLFNBRFpnQyxhQUNZLGFBVGV4RTtZQVVYLG9CQVZXQSxJQVVYOzs7OztnQkFBZHlFLGlCQUZGRCxRQUlPLHFCQUpQQSxRQVIyQnhFO1lBYWIsU0FIWnlFLGFBR1ksYUFiYXpFO2NBY1QsSUFDZGpyRCxJQURjLFVBZFNpckQ7Y0FjVCxVQUNkanJEO2dCQUNZLHVCQU5kMHZELFFBVnlCekUsR0FldkJqckQ7Z0JBRWdCLFNBRFoydkQsYUFDWSxhQWpCTzFFO2tCQWtCZixzQkFsQmVBOztvQkFxQkg7dUNBTGhCMEUsUUFoQlNOO3FCQWdCVE87Ozt1QkFLSU4sY0FDaUIscUJBRGpCQSxZQXJCZXJFOzs7O29DQWdCbkIyRTtrQkFFSSxJQUZKQzs7O2dCQUFRLElBRlpDLFFBRUlEOzttQkFGSkMsUUFKRko7Y0FlYyxTQVhaSSxhQVdZLGFBekJXN0U7Z0JBMEJuQixJQUNKaHJELElBREksVUExQm1CZ3JEOzBCQTJCdkJockQsbUJBSUssT0FqQkw2dkQ7Z0JBWUk7aUJBRVEsbUJBZFpBLFFBZHVCN0UsR0EyQnZCaHJEO2lCQUNZLFdBQVI4dkQ7aUJBQVEsYUFDSSxhQTdCTzlFO2dCQTZCaUIsUUFBTTtnQkFBZ0Isc0NBRDFEOEUsUUE1Qm1COUU7Y0F5Qm1CLE9BWDFDNkU7WUFEd0MsT0FIMUNKO1VBRHdDLE9BRDFDRDtrQkFISnRuRTtNekN4VEk7UXlDeVZROzRCQXBDVjB3QyxRQUY2Qm95QixHQUsvQjlpRTtTQWlDWSxXQUFSeTBEO1NBQVEsYUFDSSxhQXZDZXFPO1FBdUNTLFFBQU07UUFBZ0I7aUJBRDFEck8sUUF0QzJCcU8sR0E3Vy9Cd0M7TUFzWkssdUJBQWdCO0lBN0xFLFNBZ012QnVDLHFCQUFxQnRxQyxNQUFNMnBDLFVBQVVwRTtNQUN2QyxlQUR1QnZsQyxVQUN2QixhQUFnQixhQUR1QnVsQztNQUNDLFFBQU07TUFBOUM7T0FDWSxnQ0FGV3ZsQyxNQUFnQnVsQztPQUUzQixXQUFScHlCO09BQVEsYUFDSSxhQUh1Qm95QjtNQUdDLFFBQU07TUFGOUMsSUFHUSxZQUorQkEsSUFJL0IsU0FBSjlpRTtNQUFJOztVQUdNOzhCQUxWMHdDLFFBRm1Db3lCLEdBSW5DOWlFO1dBTWMsa0JBSFpnNkMsUUFQdUJrdEI7V0FhTCxxQ0FIbEJDLFlBVmlDckU7V0FhZixXQUhsQnFFLGNBR0FXO1dBQWtCLFFBTmxCOXRCLFVBU0ErdEI7VUFIa0IsMEJBS2xCdFQsUUFsQmlDcU87O2tDQXFCckMsMEJBbkJFcHlCLFFBRm1Db3lCO01Bc0JoQyxtQkFBWTtJQXROTSxTQXlOdkJrRixnQkFBZ0J6cUMsTUFBTTJwQyxVQUFVcEU7TUFDbEMsZUFEa0J2bEMsVUFDbEIsYUFBZ0IsYUFEa0J1bEM7TUFDTSxRQUFNO01BQTlDO09BQ1ksa0JBRk12bEMsTUFBZ0J1bEM7T0FFdEIsV0FBUnB5QjtPQUFRLGFBQ0ksYUFIa0JveUI7TUFHTSxRQUFNO01BRjlDLElBSUU5aUUsRUFESSxVQUo0QjhpRTtNQUk1QixTQUNKOWlFOztVQWlDWTs4QkFwQ1Ywd0MsUUFGOEJveUIsR0FLaEM5aUU7V0FpQ1ksV0FBUmc2QztXQUFRLGFBQ0ksYUF2Q2dCOG9CO1VBdUNRLFFBQU07VUFBWSw0QkFEdEQ5b0IsUUF0Q2tCa3RCLFVBQVVwRTs7Z0JBS2hDOWlFO1NBQ1k7NkJBSlYwd0MsUUFGOEJveUIsR0FLaEM5aUU7VUFDWSxXQUFSeTBEO1VBQVEsYUFDSSxhQVBnQnFPO1NBT1EsUUFBTTtTQURsQyxJQUdWanJELElBREksVUFSMEJpckQ7bUJBUzlCanJEO1VBMEJBLDRCQTdCRTQ4QyxRQU5rQnlTLFVBQVVwRTtTQU1wQjtVQUlFLG1CQUpWck8sUUFONEJxTyxHQVM5QmpyRDtVQUNZLFdBQVJ3dUQ7VUFBUSxhQUNJLGFBWGN2RDtTQVdVLFFBQU07U0FMcEM7VUFNRSw2QkFGUnVELFFBVjBCdkQ7VUFZbEIsV0FBUndFO1VBQVEsYUFDSSxhQWJjeEU7U0FhVSxRQUFNO1NBUHBDLElBUVEsY0FkWUEsSUFjWixTQUNkaHJEO1NBRGM7O1lBRUYsdUJBSlp3dkQsUUFaMEJ4RSxHQWUxQmhyRDtZQUVnQixTQURaeXZELGFBQ1ksYUFqQlV6RTtjQWtCbEIsb0JBbEJrQkE7O2dCQXFCTjttQ0FMaEJ5RSxRQWhCWUw7aUJBZ0JaTzs7O21CQUtJTixjQUNpQixxQkFEakJBLFlBckJrQnJFOzs7O2dDQWdCdEIyRTtjQUVJLElBRkpEOzs7WUFBUSxJQUFSRTs7OztpREFKSko7U0FOTSxJQVFOSyxpQkFXSyxhQVRERDtTQVVRLFNBWlpDLGFBWVksYUExQmM3RTtXQTJCdEIsSUFDSi9xRCxJQURJLFVBM0JzQitxRDtxQkE0QjFCL3FELG1CQUlLLE9BbEJMNHZEO1dBYUk7WUFFUSxtQkFmWkEsUUFkMEI3RSxHQTRCMUIvcUQ7WUFDWSxXQUFSNnZEO1lBQVEsYUFDSSxhQTlCVTlFO1dBOEJjLFFBQU07V0FBZ0Isc0NBRDFEOEUsUUE3QnNCOUU7U0EwQmdCLE9BWjFDNkU7TUErQkQsbUJBQVk7SUF0UU0sU0ErUXZCTSxZQUFZQyxJQUNEM3FDLE1BRFd1bEM7TWpEOTdCM0IsSWlEKzdCZ0JweUI7TUFDWDtpQkFEV0EsUUFDTyxPQURQQTtRQUVILElBQUoxd0MsRUFBSSxVQUhjOGlFO1FBSW5CLEdBSm1CQSxNQUlFLE9BSGJweUI7UUFJVCxHQUxVdzNCO1VBTUssSUFBUnJ3RCxJQU5HcXdEO1VBTUssR0FIYmxvRSxNQUdLNlgsSUFBa0IsaUJBTGhCNjRCLFFBRFdveUI7VUFNTCxJQUNFLG1CQU5ScHlCLFFBRFdveUIsR0FHbEI5aUUsR0FGTzB3Qzs7UUFFSCxJQU1KLEtBTkExd0M7UUFNQTs7OztRekN2YkEsWXlDd2I4QixPQVR2QjB3QztRQUVILElBUVEsbUJBVkxBLFFBRFdveUIsR0FHbEI5aUUsR0FGTzB3QztpQkFXSDtJQTNSZSxTQStSdkJ5M0IsVUFBVTVxQyxNQUFNdWxDO01BSVcsa0JBSmpCdmxDLE1BQU11bEMsR0FJVyxrQkFKWEEsSUFJMEM7SUFuU25DLFNBZ1V2QnNGLDBCQUNFbHpEO01BQUosYUFBSUEsMENBVWlCO0lBM1VJLFNBMFZ2Qm16RCxnQkFBZ0JqRCxRQUFRN25DLE1BQU11bEM7TUFDaEMsU0FEMEJ2bEMsTUFDUix3QkFEQTZuQztNQUVWLElBQUpwbEUsRUFBSSxVQUZ3QjhpRTtNQUc3QixPQUg2QkEsTUE3akI5QixtQ0E2akJnQnNDLFVBRWRwbEUsQ0FFSDtJQUc0QixTQUEzQnNvRTtNakRoaENMLE9pRHlnQ0tEO0lBUTZCLFNBQTdCRTtNakRqaENMLE9pRHlnQ0tGO0lBUTZCLFNBRTdCRyxvQkFBb0JqckMsTUFBTXVsQztNQUN0QixnQ0FEZ0J2bEMsTUFBTXVsQztNQUN0QixTQW5Ea0IyRjs7Ozs7O2NBaUV0Qjs7O2tCQUNVLGdCQWhCZ0IzRixJQWdCaEIsS0FBSjlpRTtrQkFBSTs7OztrQnpDbmhCTixnQnlDbWhCRUEsRUFHRyxpQkFISEEsRUFHcUI7ZUFDbEI7ZUFDQTtlQXhDSiwrQkFId0I4VDtlQUV4QixvQ0FGcUJEOztzQkFDeEJnRTt5QkFNSixZQU5JQTs7d0JBS0EsbUNBTndCaEUsR0FBR0M7cUJBbHdCM0I2dkQsV0F3eEJrQnBtQyxjQUFNdWxDOzs7Ozs7OztrQkFsREoyRjtXQXVEdEI7OztlQUNVLElBRU56b0UsRUFGTSxVQU5nQjhpRTtlQU1oQixXQUVOOWlFLGFBQ0ssaUJBRExBLElBQ3VCO1lBRWxCO1lBQ0E7WUE1REg7c0JBRmdCeW9FLDJCQUFHRzs7Y0FBR0M7Ozs7bUJBQzFCN29FLDJCQVFKLFlBUklBOztxQkFNQSxtQ0FQb0J5b0UsR0FBR0csS0FBR0M7a0JBdHVCMUJsRixXQXd4QmtCcG1DLGNBQU11bEM7O2lCQWxESjJGO016Q2pkbEI7O1F5Q3FjaUIsVUFZQ0E7Ozs7Ozs7Ozs7OztlQXR1QnBCOUUsV0F3eEJrQnBtQyxNQUFNdWxDO01Bd0IxQix3QkExRXNCMkYsR0EwRUo7SUExQlcsU0E4QjdCSyxlQUVpQnZyQyxNQUZJdWxDO01BRXZCLFNBWUlpRyxVQUFVeHJDO1FBQ04sSUFFSnY5QixFQUZJLHlCQURNdTlCLE1BZFN1bEM7UUFlZixjQUVKOWlFLEVBRFEsWUFGRXU5QixNQWRTdWxDLElBaUJkLHNCQUFMOWlFLEVBQThCO01BZDFCLElBRUpBLEVBRkksa0JBSGU4aUU7TUFHZixVQUVKOWlFO1FBRGtCOzZCQUZIdTlCLE1BRkl1bEM7U0FRZiw2QkFETXB5QixRQVBTb3lCO1FBUWYsY0FHSmpyRDtpQkFEVSw4QkFBcUIsWUFIckI2NEIsUUFQU295QjtpQkFZVCxxQkFMQXB5QixRQVBTb3lCLEdBV25CanJEO01BTkssNkJBQUw3WCxFQWNZO0lBakRlLFNBcUQ3QmdwRSxpQkFFaUJ6ckMsTUFGTXVsQztNQUV6QixTQUtJbUcsb0JBQVUxckM7UWpEN2tDakIsSWlENmtDaUJtVDtRQUNaO1VBQU0sSUFHSjF3QyxFQUhJLDJCQURNMHdDLFFBUFdveUI7VUFRakIsVUFHSjlpRSxFQUZRLG1CQUZFMHdDLFFBUFdveUI7b0JBV3JCOWlFO1lBRHVCO2lDQUhiMHdDLFFBUFdveUI7YUFjakIsaUNBRFc5b0IsUUFiTThvQjtZQWNqQjtjQUVnQixxQkFITDlvQixRQWJNOG9CO2NBZ0JEOzt1QkFRcEJvRzs7O2NBVHFCO21DQUZObHZCLFFBYk04b0I7ZUFvQmpCLG1DQURTdUQsUUFuQlF2RDtjQW9CakI7Z0JBQ2dCLHFCQUZQdUQsUUFuQlF2RDtnQkFxQkQ7O3lCQUdwQm9HOztjQVRxQixJQU9OLG1CQUhGN0MsUUFuQlF2RCxPQU9YcHlCOztZQUdhLElBT1IsNEJBSkFzSixRQWJNOG9CLElBT1hweUI7O1VBQ04sSUFHVyxtQkFKTEEsUUFQV295QixHQVdyQjlpRSxHQUpVMHdDO21CQUlxQztNQVRuRCxTQXNCSXc0QixvQkFBWTNyQztRakQ5bENuQixJaUQ4bENtQm1UO1FBQ2Q7VUFBTSxxQ0FEUUEsUUF4QlNveUI7VUF5QmpCO1lBQ2Usd0JBRlBweUIsUUF4QlNveUIsSUF3QlRweUI7VUFHUDs7bUJBcEJMdTRCLHNCQWlCWXY0Qjt3Q0FqQlp1NEIsZUFpQll2NEIsVUFHUTtNQXpCeEIsU0FLSXE0QixVQUFVeHJDLE9qRDdrQ2pCLHVCaUQ2a0NPMHJDLGNBQVUxckM7TUFKTixJQUVKdjlCLEVBRkksa0JBSGlCOGlFO01BR2pCLGNBRUo5aUU7ZUFEa0Isc0JBRkh1OUIsTUFGTXVsQztlQUtoQixzQkFBTDlpRSxFQXdCWTtJQWxGZSxTQW9HN0JtcEUsdUJBQXVCN3NFLFNBQVM4c0UsV0FBVzdyQyxNQUFNdWxDO01BQ25ELFNBQVF1RyxXQUFXendFLEVBQUVzdkU7UWpEdG5DeEIsSWlEc25Dc0Ivb0U7UUFDakI7VUFBUSxnQkFGeUMyakUsSUFFekMsU0FEUzNqRTtVQUNUO1lBQ1EsYUFIaUMyakU7WUFHakM7YUFDYix3QkFKb0J4bUUsU0FFbkIwRCxHQUVELFVBRkNBLE1BRGVrb0U7Ozs7O1VBS2pCO1lBQVEsV3BDdmhDRjlwRSxRb0NpaEN5QzBrRSxHQUU3QzlpRSxHQUlNLFFBTE9iO3NCQU1PO01BTjFCLEdBRGtDaXFFO1FBV2hDLElBREtwcEUsRUFWMkJvcEU7UUFXaEMsV0FYMkM3ckMsTUFVdEN2OUI7UUFDTCxhQVhpRDhpRTtRQVkxQztVQUNJLElBQUwwQyxHQUFLLFVBYnNDMUM7VUFhdEMsT0FITjlpRSxNQUdDd2xFLEdBRUMsd0JBZjBDMUMsSUFnQjFDLG1CQU5GOWlFLEVBR0N3bEU7UUFKRTt3QkFUbUNqb0MsU0FnQmI7SUFwSEQsU0F3SDdCK3JDLGdCQUFnQnhHLEdBSWhCcmxFO01qRDdvQ0wsR2lENm9DS0E7V0FIYUgsRUFHYkc7OzRCQUFLLE1BQUxBLE1BSGFILEVBR2JHO01BRlEsSUFBSjdFLEVBQUksV0FGUWtxRTtNQUdOLDBDQURObHFFLEVBRFMwRTtJQXpIZ0IsU0FnSTdCaXNFLFlBQVl6RyxHQUFHcm1FO01BQ2pCLE9BRGlCQTtlQUVDLE9BRkpxbUUsYUFHSSxrQkFISkEsWUFJSyxPQUpMQSxNQUk0QjtJQXBJWCxTQXdJN0IwRyxpQkFBaUJsc0M7TUFBVSxHQUFWQSxTQUVILElBQVRDLE1BRllELFdBRUgsT0FBVEMsTUFERyxPcEN0akNBbi9CLE9vQ3VqQ1c7SUExSVUsU0E2STdCcXJFLDBCQUEwQkM7TUFDNUIsU0FENEJBLE9BQ0s7TUFDckI7b0NBRmdCQTtPQUdoQixvQkFETmx1RTtPQUVVLGNBRlZBLE1BQ00sc0JBRE5BO01BRVUsVUFEVjBzRSxJQUNBbndCLFFBQ1E7SUFsSmlCLFNBNEp6QjR4Qiw4QkFHSjkxQyxFQUFFNEo7TWpEaHJDUCxJaURnckNPK0M7TUFBTztpQkFBUEE7UUFxQ2tDLGtCQXJDcEMzTTs7UUFBUyxPQUFQMk07aUJBS2tDLFVBTGxDQTtpQkFNa0MsVUFObENBO2lCQU9rQyxVQVBsQ0E7aUJBUWtDLFVBUmxDQTtpQkFTa0MsVUFUbENBO2lCQVVrQyxVQVZsQ0E7aUJBV2tDLFVBWGxDQTtpQkFZa0MsVUFabENBO2lCQWFrQyxVQWJsQ0E7aUJBY2tDLFdBZGxDQTtrQkFpQmtDLFdBakJsQ0E7a0JBa0JrQyxXQWxCbENBO2tCQW1Ca0MsV0FuQmxDQTtrQkFnQ2tDLFdBaENsQ0E7O1dBa0MyQixJQURMMW5DLEtBakN0QjBuQyxTQWlDZTlrQyxNQWpDZjhrQyxTQWtDMkIsZUFBVyxLQUR2QjlrQztXQUNZOztvQkFNN0JrdUUsc0NBeENBLzFDLE9BaUN3Qi82Qjs7b0JBT3hCOHdFLCtCQXhDQS8xQyxPQWlDd0IvNkI7a0JBbEJZLFdBZmxDMG5DO2tCQWdCa0MsV0FoQmxDQTtrQkEwQmtDLFdBMUJsQ0E7Ozs7YUE0QnNCO2NBRG9Cem5DLE9BM0IxQ3luQzs7Y0EyQmdDNk87Y0FDVixrQkFEVUEsT0FBVXQyQztjQTNCMUN5bkM7O1dBOEJzQjtZQURvQnhuQyxPQTdCMUN3bkM7O1lBNkJnQ3FQO1lBQ1Ysa0JBRFVBLE9BQVU3MkM7WUE3QjFDd25DOzs7V0FFRixJQURPd0wsU0FETHhMO1dBRUYsZ0JBQUlxcEM7YUFDRixTQUFJQyxNQUFNQztlQUFlLGtCQUgzQmwyQyxLQUVJZzJDLE9BQ1FFLGNBQThDO2FBQXhELDJCQUFJRCxNQUZDOTlCLFNBRzZCO2tCQWtCQSxXQXRCbEN4TDtrQkF1QmtDLFdBdkJsQ0E7a0JBd0JrQyxXQXhCbENBOztlQW1Da0J2bkMsT0FuQ2xCdW5DLFNBbUNhNWpDLElBbkNiNGpDO1dBeUVXLFVBdENFNWpDO1lBc0NGLE9BdENFQTt5QkFuQ2I0akMsTUFtQ2tCdm5DO3lCQW5DbEJ1bkMsTUFtQ2tCdm5DOztlQXdDcEIsZ0JBQUk0d0U7aUJBQ0YsU0FBSUMsTUFBTUM7bUJBQWUsa0JBNUUzQmwyQyxLQTJFSWcyQyxPQUNRRSxjQUE4QztpQkFBeEQsMkJBQUlELE1BekNjN3dFLE9BMENXOzBCQTdFN0J1bkMsTUFtQ2tCdm5DOztZQXNDUCxPQXRDRTJEO3lCQW5DYjRqQyxNQW1Da0J2bkM7eUJBbkNsQnVuQyxNQW1Da0J2bkM7eUJBbkNsQnVuQyxNQW1Da0J2bkM7eUJBbkNsQnVuQyxNQW1Da0J2bkM7eUJBbkNsQnVuQyxNQW1Da0J2bkM7eUJBbkNsQnVuQyxNQW1Da0J2bkM7eUJBbkNsQnVuQyxNQW1Da0J2bkM7eUJBbkNsQnVuQyxNQW1Da0J2bkM7eUJBbkNsQnVuQyxNQW1Da0J2bkM7O2VBc0RlLElBQVYyQyxRQXREVmdCO2VBc0RvQjs7d0JBakRuQ2d0RTtvQ0F4Q0EvMUMsRUF5RnlCajRCLFFBdERMM0M7O3dCQUtwQjJ3RSwrQkF4Q0EvMUMsRUF5RnlCajRCLFFBdERMM0M7MEJBbkNsQnVuQyxNQW1Da0J2bkM7MEJBbkNsQnVuQyxNQW1Da0J2bkM7a0JBZmdCLFdBcEJsQ3VuQywrQkFxQ3VDO0lBcE1aLFNBdU03Qm9wQyxvQ0FHQS8xQyxFQUFFbjRCLE1BQU0raEM7TWpEM3RDYixJaUQydENPN2hDO01BQWE7aUJBQWJBO1NBcUI2Qjs7a0JBbkUzQit0RSxnQ0E4Q0o5MUMsRUFBUTRKO3VDQTlDSmtzQyx5QkE4Q0o5MUMsRUFBUTRKOztRQUFPLE9BQWI3aEM7aUJBUzZCLFlBVDdCQTtpQkFVNkIsWUFWN0JBO2lCQVc2QixZQVg3QkE7aUJBWTZCLFlBWjdCQTtpQkFhNkIsWUFiN0JBO2lCQWM2QixZQWQ3QkE7aUJBZTZCLFlBZjdCQTtpQkFnQjZCLFlBaEI3QkE7aUJBb0I2QixZQXBCN0JBOztXQXVCTztZQURrQjlDLEtBdEJ6QjhDO1lBc0JvQjFCLElBdEJwQjBCO1lBc0JlbkMsSUF0QmZtQztZQXVCTyxTQUFNLEtBREVuQyxLQUFLUztZQUVNLHNCQUR4QlgsR0FEdUJUO1lBdEJ6QjhDOztrQkFpQjZCLGFBakI3QkE7a0JBa0I2QixhQWxCN0JBO2tCQW1CNkIsYUFuQjdCQTs7V0FFRixJQURVb3dDLFNBRFJwd0M7V0FFRixnQkFBSWl1RTthQUNGLFNBQUlDLE1BQU1DO2VBQWUsa0JBSDNCbDJDLEtBRUlnMkMsT0FDUUUsY0FBOEM7YUFBeEQsaUNBQUlELE1BRkk5OUIsU0FERnZPLElBSXNDOztXQUU5QyxJQURrQndPLFdBTGhCcndDO1dBTUYsZ0JBQUlpdUU7YUFDRixTQUFJQyxNQUFNQztlQUFlLGtCQVAzQmwyQyxLQU1JZzJDLE9BQ1FFLGNBQThDO2FBQXhELGlDQUFJRCxNQUZZNzlCLFdBTFZ4TyxJQVFzQyxFQWdCUTtJQWxPekIsU0E0SnpCdXNDLG9CQUdKbjJDLEVBQUU0SjtNakRockNQLHVCaUQ2cUNTa3NDLHdCQUdKOTFDLEVBQUU0SjtJQS9KMkIsU0F1TTdCMnNDLDBCQUdBdjJDLEVBQUVuNEIsTUFBTStoQztNakQzdENiLHVCaUR3dENLbXNDLDhCQUdBLzFDLEVBQUVuNEIsTUFBTStoQztJQTFNcUIsU0FxUXpCNHNDLFdBR0p2SCxHQUFHcmxDLElBQUk2c0M7TWpEenhDWixJaUR5eENROXBDO01BQWU7aUJBQWZBO1FBd0pIOztRQXhKa0IsT0FBZkE7O1dBRUgsSUFESzFuQyxLQURGMG5DO1dBRUssWUFGUnNpQztXQUVBLElBQ0k5aUUsRUFBSSxXQUhSOGlFO1dBSVMsVUFETDlpRSxFQUNLLFdBSlQ4aUUsR0FDS2hxRSxLQURFd3hFOztXQU1QLElBRFV2eEUsT0FMUHluQztXQU1LLGlCQU5Sc2lDO1dBTUEsSUFDSWpyRCxJQUFJLFdBUFJpckQ7V0FRUyxVQURManJELElBQ0ssV0FSVGlyRCxHQUtVL3BFLE9BTEh1eEU7O29CQUFKOXBDOzs7O2VBV1k7Z0JBRDBCdm5DO2dCQUFaZ0Q7Z0JBQ2QsZ0NBRGNBO2dCQUNkOzs7MEJBQ05zaEMsWUFBUXVsQzttQkFBSyxzQkFEbEJvRixLQUNLM3FDLE1BQVF1bEMsR0FBb0M7Z0JBRHRDLGFBQU50bkUsSUFEZ0N2QztlQUMxQjt3QkFYZjZwRSxHQWFJMEgsU0FiR0YsZUFZSEMsT0FweEJKaEg7Ozs7O2tCQXV4QjBEcnFFOztrQkFBWGdvQztrQkFDM0N3cEM7NEJBQUtudEMsWUFBUXVsQyxJQUFLLHdCQUFidmxDLE1BQVF1bEMsR0FBb0M7aUJBQ25DOzBCQWpCbEJBOzBCQWlCa0IsV0FGNkI1aEMsTUFBV2hvQzswQkFmbkRveEU7OzswQkFnQkhJOzBCQXh4QkpuSDs7Z0JBMnhCMERwcUU7O2dCQUFYeXZDO2dCQUMzQytoQzswQkFBS3B0QyxZQUFRdWxDLElBQUssd0JBQWJ2bEMsTUFBUXVsQyxHQUFvQztlQUNuQzt3QkFyQmxCQTt3QkFxQmtCLFdBRjZCbDZCLE1BQVd6dkM7d0JBbkJuRG14RTs7O3dCQW9CSEs7d0JBNXhCSnBIOzs7WUEreEJhdnFFLE9BdkJWd25DO1lBd0JDMXlCLGNBQUt5dkIsWUFBUXVsQyxJQUFLLHFCQUFidmxDLE1BQVF1bEMsR0FBOEI7a0JBcUkvQzJILGVBN0pBM0gsR0F1QmE5cEUsT0F2Qk5zeEUsZUF3Qkh4OEQsS0FoeUJKeTFEOzs7WUFteUJrQm5xRSxPQTNCZm9uQztZQTJCVWxtQyxJQTNCVmttQztZQTRCQ29xQyxnQkFBS3J0QyxZQUFRdWxDLElBQUssd0JBQWJ2bEMsTUFBUXVsQyxHQUE4QjtrQkFpSS9DMkgsZUE3SkEzSCxHQTJCa0IxcEUsT0EzQlhreEUsUUEyQk1od0UsTUFDVHN3RSxPQXB5QkpySDs7V0F1eUJRO1lBRGVscUUsT0E5QnBCbW5DO1lBOEJjaG1DLEtBOUJkZ21DO1lBOEJTam1DLE1BOUJUaW1DO1lBOEJFOWxDLE1BOUJGOGxDO1lBK0JLLGdDQUEyQixjQUQ5QjlsQztZQUNHO3NCQUNDNmlDLFlBQVF1bEM7ZUFBSywyQkF6dkJaemYsS0F5dkJEOWxCLE1BQVF1bEMsR0FBbUM7V0FDUDtvQkFqQzdDQTtvQkE4QnVCenBFO29CQTlCaEJpeEU7b0JBOEJLL3ZFO29CQUFLQztvQkFFYnF3RTs2QkF6dkJXL0g7c0JBQThDLDBCQUEzQixrQkFBeEJ6ZixLQUFLeWY7O1dBNHZCUDtZQURpQnhwRSxPQWxDdEJrbkM7WUFrQ2dCN2xDLE9BbENoQjZsQztZQWtDVy9sQyxNQWxDWCtsQztZQWtDSTNsQyxRQWxDSjJsQztZQW1DSyxrQ0FBMkIsY0FENUIzbEM7WUFDQztzQkFDQzBpQyxZQUFRdWxDO2VBQUssMkJBeHVCVmdJLE9Bd3VCSHZ0QyxNQUFRdWxDLEdBQW1DO1dBQ1A7b0JBckM3Q0E7b0JBa0N5QnhwRTtvQkFsQ2xCZ3hFO29CQWtDTzd2RTtvQkFBS0U7b0JBRWZvd0U7NkJBeHVCYWpJO3NCQUFnRCwwQkFBM0Isa0JBQTFCZ0ksT0FBS2hJOztXQTJ1QlQ7WUFEcUJ0cEUsT0F0QzFCZ25DO1lBc0NvQjFsQyxPQXRDcEIwbEM7WUFzQ2U1bEMsTUF0Q2Y0bEM7WUFzQ1F4bEMsUUF0Q1J3bEM7WUF1Q0ssa0NBQTJCLGNBRHhCeGxDO1lBQ0g7c0JBQ0N1aUMsWUFBUXVsQztlQUFLLDJCQTd1Qk5rSSxPQTZ1QlB6dEMsTUFBUXVsQyxHQUFtQztXQUNQO29CQXpDN0NBO29CQXNDNkJ0cEU7b0JBdEN0Qjh3RTtvQkFzQ1cxdkU7b0JBQUtFO29CQUVuQm13RTs2QkE3dUJpQm5JO3NCQUFvRCwwQkFBM0Isa0JBQTlCa0ksT0FBS2xJOztXQWd2QmI7WUFEaUJwcEUsT0ExQ3RCOG1DO1lBMENnQnZsQyxPQTFDaEJ1bEM7WUEwQ1d6bEMsTUExQ1h5bEM7WUEwQ0lybEMsUUExQ0pxbEM7WUEyQ0ssa0NBQTJCLGNBRDVCcmxDO1lBQ0M7c0JBQ0NvaUMsWUFBUXVsQztlQUFLLDJCQS91QlZvSSxPQSt1QkgzdEMsTUFBUXVsQyxHQUFtQztXQUNQO29CQTdDN0NBO29CQTBDeUJwcEU7b0JBMUNsQjR3RTtvQkEwQ092dkU7b0JBQUtFO29CQUVma3dFOzZCQS91QmFySTtzQkFBZ0QsNEJBQTNCLGtCQUExQm9JLE9BQUtwSTs7a0JBbXNCZHRpQzs7O2tCQThDMEM1bUMsUUE5QzFDNG1DLFNBOENvQytMLE9BOUNwQy9MLFNBOEMrQm5sQyxNQTlDL0JtbEM7cUJBNkpIaXFDO3VCQTdKQTNIO3VCQThDNkNscEU7dUJBOUN0QzB3RTt1QkE4QzJCanZFO3VCQUFLa3hDO3VCQS9idkN5N0I7dUJBdFVBakM7OztrQkEwd0I0Q2xzRSxRQW5EekMybUMsU0FtRG1Da00sT0FuRG5DbE0sU0FtRDhCamxDLE1BbkQ5QmlsQztxQkE2SkhpcUM7dUJBN0pBM0gsR0FtRDRDanBFLFFBbkRyQ3l3RSxRQW1EMEIvdUUsTUFBS214QyxPQXpnQnRDMjZCLGVBalFBdEI7O2tCQXd3QmtCcHNFLFFBakRmNm1DLFNBaURTcGxDLE9BakRUb2xDLFNBaURJdGxDLE1BakRKc2xDO3FCQTZKSGlxQzt1QkE3SkEzSCxHQWlEa0JucEUsUUFqRFgyd0UsUUFpREFwdkUsTUFBS0UsT0F2aUJaNnJFLFdBak9BbEI7OztZQTR3Qldqc0UsUUFyRFIwbUM7WUFxREc3a0MsTUFyREg2a0M7WUFzREM0cUM7aUNBQVN0STtlQXZPUDtvQ0F1T09BO2dCQXZPUDt5QkFLSjlpRTs7K0JBQ0EsVUFDRSx5QkFGRkE7ZUFHSixxQkFQSXVtQixFQXNPV3U4QyxHQUFpQjtrQkF1RzlCMkgsZUE3SkEzSCxHQXFEV2hwRSxRQXJESnd3RSxRQXFERDN1RSxRQUNGeXZFLE9BNXpCSnhGOztXQTYwQkEsSUFETTlwRSxRQXRFSDBrQztXQXVFQSxnQkF2RUhzaUMsU0FBR3RpQyxNQXNFRzFrQztXQUVEOztlQUVnQkMsUUExRWxCeWtDLFNBMEVhVCxNQTFFYlM7V0EyRUgsc0JqRHAyQ0wsT2lEMGZTa2xDLFdBK3hCSjVDLFVBMEVnQi9pQztlQTFFYlMsTUEwRWtCemtDOzs7ZUFHRkMsUUE3RWhCd2tDLFNBNkVXL2tDLElBN0VYK2tDO1dBOEVILFdBOUVBc2lDLEdBNkVjcm5FO2VBN0VYK2tDLE1BNkVnQnhrQzs7O2VBSVNFLFFBakZ6QnNrQyxTQWlGa0I5a0MsTUFqRmxCOGtDLFNBaUZTbEQsUUFqRlRrRDtXQWtGSyxpQkFBaUIsaUJBRGJsRCxTQWpGWndsQztXQW1GUSxJQUFKeGxFLEVBQUksYUFuRlJ3bEU7V0FtRlE7YUFFRixnQ0FGRnhsRSxFQUZpQjVCLE9BR2pCc3RDOzs7O2FBRWtCLGVBRmxCQSxNQUVrQixVQUFQcmdDO1dBRUosVUFKUHFnQyxNQUlPLFdBeEZYODVCLEdBaUY0QjVtRSxRQWpGckJvdUU7O2VBeUZ1Qmx1RSxRQXpGM0Jva0MsU0F5Rm9CNWtDLFFBekZwQjRrQyxTQXlGVzlDLFVBekZYOEM7V0EwRkssaUJBQWlCLGlCQURYOUMsV0F6RmRvbEM7V0EyRlEsSUFBSmoxRCxJQUFJLGFBM0ZSaTFEO1dBMkZRO2FBR2M7MENBSGxCajFEO2NBR2tCO2NBQ0MsNEJBSm5CQTtjQUltQjtjQWNuQixrQkFkWW04QixNQWNLLFVBQVcsS0FwQlRwdUM7Y0FtQm5CLGlCQWRZZ3VDLE1BY0ksVUFuQkdodUM7Y0FHZDR0QztjQUFMSjs7O21DQW9CSjthQUZzQjs7NkJBQVArWDtjQWxCTjNYO2NBQUxKO1dBcUJFO3NCQXJCRkEsTUFEQXY3QjttQkFzQkUsV0FqSE5pMUQsR0FpSG9CLFdBckJYdDVCLE1BSHFCcHRDLFNBekZ2Qmt1RTtrQkF5RFA7a0JBRUE7O1dBNEU0QjtZQURJanVFLFFBdEk3Qm1rQztZQXNJYTdvQyxlQXRJYjZvQztZQXVJeUIsOEJBRFo3b0M7V0FDaEIsc0JqRGg2Q0wsT2lEMGZTK3RFLFdBK3hCSjVDO1dBdUk0QixJQXZJekJ0aUMsTUFzSTZCbmtDOzs7b0JBdEk3Qm1rQzs7aUJBeUkwQ2hrQyxRQXpJMUNna0MseUJBeUkrQnNLO2FBQ2xDLFdBMUlBZzRCO2FBMEltQixXQTFJbkJBO2FBMkljLHNCQUZvQmg0QixNQUFXdHVDLFNBekkxQ2drQzs7ZUE0STBDOWpDLFFBNUkxQzhqQyx5QkE0SStCOEs7V0FDbEMsV0E3SUF3M0I7V0E2SW1CLFdBN0luQkE7V0E4SWMsc0JBRm9CeDNCLE9BQVc1dUMsU0E1STFDOGpDOzs7V0ErREgsSUFET3dMLFNBOURKeEw7V0ErREgsR0EvRE84cEM7YUFpRUs7Y0FESVAsYUFoRVRPO2NBZ0VDVCxPQWhFRFM7Y0FpRUssYUFESlQsT0FoRVIvRzthQWtFYSxVQURMcmxFLEVBQ0ssV0FsRWJxbEUsR0E4RE85MkIsU0FFUys5QjtXQUlaOztvQkFwRUR2cEM7O2FBb0hZO2NBRGlEM2pDO2NBQVp3dUU7Y0FBMUJsdUMsV0FuSHZCcUQ7Y0FvSFksa0NBRHFDNnFDO2NBQ3JDOztjQUNIO2FBQ1osdUJBSDBCbHVDLGNBQ3RCbXVDLE9BQ0E1NkIsUUFySEpveUI7YUFvSGUsSUFHUCxpQkF2SFJBLElBdUhRLGVBSENuaUMsTUFEdUQ5akM7YUFNdkQsVUFGTDB1RSxJQUVLLFdBekhUekksR0F3SEkwSSxXQXhIR2xCO1dBMkhLO1lBRHdCM3RFLFFBMUhqQzZqQztZQTBIdUJsa0MsU0ExSHZCa2tDO1lBMkhTO1dBQ1osdUJBRjBCbGtDLFdBQ3RCaWhDLE1BM0hKdWxDO1dBMkhZLElBRVIzeUMsSUFBSSxhQTdIUjJ5QztXQThIUyxVQURMM3lDLElBQ0ssV0E5SFQyeUMsR0EwSG9Dbm1FLFFBMUg3QjJ0RTs7V0FnSUs7WUFEZW4zQixRQS9IeEIzUztZQStIZS9qQyxRQS9IZitqQztZQWdJUyxrQkFoSVpzaUMsR0ErSGtCcm1FO1dBRUwsVUFEVHU2QixNQUNTLFdBakliOHJDLEdBK0gyQjN2QixRQS9IcEJtM0I7O1dBbUlQLFlBbklHOXBDLFNBbUlLLHNCQW5JUnNpQztXQW9JUyxVQURMaHJELElBQ0ssV0FwSVRnckQsR0FrSWUxdkIsUUFsSVJrM0I7O1dBaUpxQjtZQURSbUIsUUFoSmpCanJDO1lBZ0pZNWpDLElBaEpaNGpDO1lBaUp5Qix1Q0FEYjVqQyxJQUFLNnVFO1lBQ1E7WUFDaEIsbUJBbEpaM0ksR0FpSnFCaDNCLE9BakpkdytCO1dBa0pLLFlBQ1ksSUFBYm9CLG9CQUFhLE9BQWJBO1dBQ0Y7a0JBdkZULG1EQTJGRztJQWhhMEIsU0FxYTdCakIsZUFNQTNILEdBQUdybEMsSUFBSTZzQyxRQUFRaHdFLElBQUlFLEtBQUtzVCxLQUFLNmtEO01BQVMsVUFBdkJyNEQ7a0JBQUlFO1VBd0JuQixHQXhCbUJBLEtBd0JuQjtVQXRCUSxXQUZnQnNULEtwQ3gxQ2hCMVAsZ0JvQ3cxQ1Iwa0U7VUFHUSxJQUFKcmxFLEVBQUksV0FIcUJrMUQsTUFBN0JtUTtVQUlTLFVBRExybEUsRUFDSyxXQUpUcWxFLEdBQUdybEMsSUFBSTZzQztRQU1QLElBRDBCcCtELEVBTFAxUjtRQU1YLFdBTmdCc1QsS3BDeDFDaEIxUCxRb0M2MUNrQjhOLEVBTDFCNDJEO1FBTUEsSUFDSW5zRCxJQUFJLFdBUHFCZzhDLE1BQTdCbVE7UUFRUyxVQURMbnNELElBQ0ssV0FSVG1zRCxHQUFHcmxDLElBQUk2c0M7O1FBQStCLFNBQXZCaHdFOzs7c0JBQUlFO2NBb0JuQixHQXBCbUJBLEtBb0JuQjtjQVZRLFdBVmdCc1QsVXBDeDFDaEIxUCxRb0N3MUNSMGtFO2NBV1EsSUFBSjNpQixJQUFJLFdBWHFCd1MsTUFBN0JtUTtjQVlTLFVBREwzaUIsSUFDSyxXQVpUMmlCLEdBQUdybEMsSUFBSTZzQztnQkFheUNyNEIsSUFiN0J6M0M7WUFjWCxXQWRnQnNULFVBYXdCbWtDLElBYmhENndCO1lBZVEsSUFBSnhpQixJQUFJLFdBZnFCcVMsTUFBN0JtUTtZQWdCUyxVQURMeGlCLElBQ0ssV0FoQlR3aUIsR0FBR3JsQyxJQUFJNnNDO1VBa0JQO1FBSUEsK0NBRTBDO0lBbmNiLFNBMGM3QnFCLE9BQU83SSxHQUFHOEk7VUFBaUJwd0UsYUFBTGlpQztlQUNoQm91QyxNQUNGL3VFLEVBQUVnbUQ7WUFBRm5ELE1BQUVtc0I7UUFBUTthQUFSQTtZQUNpQjthQUFaN3VFLEVBREw2dUU7YUFDRXJ1RSxFQURGcXVFO2FBQ2lCLGVBRG5CbnNCLElBQ0lsaUQ7YUFESmtpRDthQUFFbXNCLE9BQ0s3dUU7O1VBQ0YsT0FGTDBpRCxJQUVNO2VBRVI5ckIsRUFBRXkyQyxRQUFReHRFO1FBQ1osWUFQT2dtRTtRQU9QO1VBQ2UsdUJBUlJBLEdBQWVybEMsSUFNbEI2c0M7Y0FHQXlCOzs7Ozs7Ozs7Ozs7Ozs7OzthQUNpQnBqRSxJQURqQm9qRTs7Y0FFQTtnQkFBWSxJQURLcGpFLElBQ0Usa0JBQWtCLGNBWGRuTjs7VXpDMzhCdkIsMEJ5Q285QkF1d0U7OzBCQUlhLElBQVJqcEIsYUFBUSxhQVBMaG1ELEVBT0hnbUQ7UUFDTSxJQUFQaXBCO1FBQU8sa0JBZExILEdBQUg5SSxHQWNDaUosSUFBZ0I7YUE1VHBCL0Isb0JBb1RGbjJDLEVBTm9CNEo7SUExY08sU0ErZDdCdXVDLE9BQU9sSixHQUFHcmxDLEtBQU0sY0FBVHFsQyxHQXZXUHdHLGdCQXVXVTdyQyxJQUFvQztJQS9kakIsU0FpZTdCd3VDLFFBQVEzdUUsRUFBRXN1RSxHQUFHbnVDLEtBQWMsNEJBQW5CbmdDLEdBQUVzdUUsR0FBR251QyxJQUE2QztJQWplN0IsU0FrZTdCeXVDLE9BQU81dUUsRUFBRW1nQztNQUFjLDRCQUFoQm5nQyxHQTFXUGdzRSxnQkEwV1M3ckMsSUFBMEQ7SUFsZXRDLFNBb2U3QjB1QyxNQUFNMXVDLEtBQU0sY0E5bkNWNm1DLE1Ba3hCRmdGLGdCQTRXTTdyQyxJQUErQztJQXBleEIsU0F5ZTdCMnVDLGNBR0V0SixHQUFHdUosT0FBT3Z2RTtNQUNKLGlCcEMxNUNBc0IsUW9DeTVDTjBrRTtNQUVRLElBQU50bkUsSUFBTSxhQUZSc25FO01BRVE7UUFFSixpQ0FGRnRuRSxJQUZDNndFLFFBR0Q1dUM7Ozs7UUFFa0IsZUFGbEJBLElBRWtCLFVBQVA5MEI7TUFDZixrQkFOWTdMLEVBR1IyZ0MsSUFHRTtJQWxmdUIsU0FxZjdCNnVDLGNBR0VodkUsRUFBRSt1RSxPQUFPdnZFO01BQW1CLG1DQUE1QlEsR0FBRSt1RSxPQUFPdnZFLEVBQW9EO0lBeGZsQyxTQTJmN0J5dkUsbUJBQW1CanZFLEVBQUVtZ0M7TUFDdkIsY0FBd0RoZ0MsR0FBSyxPQUFMQSxDQUFNO01BQWhELGdDQUFRLGNBRERILFlBQUVtZ0MsU0FDd0M7SUE1ZmhDLFNBK2Y3Qit1QyxVQUFVbHZFO01BQ1osY0FBcUNHLEdBQUssT0FBTEEsQ0FBTTtNQUFwQyxvQ0FBUSxJQURISCxzQkFDZ0M7SUFoZ0JiLFNBb2dCN0JtdkUsUUFBUXByRSxHQUFHdXFFLEdBQUdudUMsS0FBYyxnQ0FBcEJwOEIsSUFBR3VxRSxHQUFHbnVDLElBQW9EO0lBcGdCckMsU0FxZ0I3Qml2QyxPQUFPcnJFLEdBQUdvOEI7TUFBYSxnQ0FBaEJwOEIsSUE3WVBpb0UsZ0JBNllVN3JDLElBQWdFO0lBcmdCN0M7Ozs7UUExcEIzQjZtQztRQWFBRztRQUNBQztRQU1BRTtRQVBBSDtRQUNBQztRQXRIQVg7UUFXQUM7UUE2R0FXO1FBMUxBMUI7UUFPQUM7UUFFQUM7UUFpS0FtQjs7T0F5bkNGMEg7T0FHQUU7T0FFQUM7T0ExQkFSO09BdUJBTTtPQVFBRztPQVlBRTtPQU1BQztPQUlBQztPQU1BRTtPQURBRDtJQXBnQjZCO2FDNS9CN0JFLFNBQVM1c0UsS0FBSy9DLEdBQ2hCLGlDQURXK0MsS0FBSy9DLEVBQ3NCO2FBRXBDNHZFLG1CQUFtQjdzRSxLQUNqQjBzQjtNQUNVLElBQVZ4a0IsS0FBVSxhQURWd2tCO01BRUosaUNBSHFCMXNCLEtBRWpCa0ksS0FDMEI7MkJBTjVCMGtFLFNBR0FDOztvQkNBS2xrRSxHQUNVLElBQWJta0UsSUFBYSxVQUNqQixzQkFESUEsSUFDSTtRQVlOQyx3QkFVQUMsc0JBT0FDO2lDQWVvQjF2RTtNQUN0QiwwQ0FEc0JBLFdBQ3RCOztZQUNBMUU7UUFDRTtVQUFnQyx5QkFIWjBFLEVBRXRCMUU7VUFDa0MsaUJBRjlCb0o7VUFFOEIsU0FEbENwSjs7O01BSUEsVUFMSW9KO01BQUosSUFPSWlyRSxpQkFQQWpyRTtNQVNKLE9BRklpckUsR0FFSzthQUsyQkMsV0FBU3p2RSxFQUFLQyxHQUFJLDJCQUFURCxFQUFLQyxFQUFlO3lDQUE3Qnd2RTthQUlBQyxXQUFTMXZFLEVBQUtDLEdBQUksMkJBQVRELEVBQUtDLEVBQWU7SUFnQ3hDO3VDQWhDV3l2RTtLQUdEQzs7S0FnQmpDQyxvQkFyREFMO0tBK0RBTTtLQUd1QjthQUluQkUsU0FBU3B3RSxHQUNmLFdBRGVBLEVBRWYsVUFGZUEsNkJBRU87SUFORyxTQVF2QnF3RSxVQUFVQztNQUNaOztXQURZQTtPQUdFLHdCQURWL3NFLHFCQVZGNHNFO01BWUYsaUJBRElJLGdCQURBaHRFO01BREosV0FJc0IsU0FIbEJBO01BR0osaUJBRklndEU7TUFGSixJQUlBLEtBSElodEUsWUFHSjs7WUFDQS9IO1FBQXdCO1VBQXlCO2lCQUFqREE7V0FBaUQsc0JBTnJDODBFLFdBTVo5MEU7VUFBd0IsaUJBSHBCKzBFO1VBRzZDLFNBQWpELzBFOzs7TUFDQSxVQXhGRW0wRSxvQkFvRkVZLHVDQVcwQjtJQXRCTCxTQXdCdkJDLFNBQU9DLE1BQU1DO01BQ2YsYUFEU0Qsb0JBQ1QsS0FBSUUsV0FEV0Q7TUFDZjtRQUVpQixJQUFYRSxTQUFXLGVBSEZGLFNBeEJiUDtRQTRCQSxPQUpPTSxXQUdIRyxXQUZGRDtRQUdGLFdBRElDO1FBQVc7OztNQWxCakIsV0FxQkU7SUE5QnVCO2FBNEN2QkcsV0FBV0M7TUFDYixJQUFJbGQsTUFEU2tkO01BRWIsU0FGYUEsTUFDVGxkO01BQ0osT0FESUEsS0FFQztJQS9Db0IsU0FpRHZCbWQsaUJBQWlCRCxNQUFNcnVFO01BQ3pCO1FBQ0UsOEJBRnVCQSxLQUFOcXVFOzs7O1VBSUwsSUFBUkUsTUFBUSxXQUpLRjtVQUtRLCtCQUxGcnVFLEtBSW5CdXVFLE1BSmFGO1VBTVMsOEJBRnRCRSxRQUphRjtVQU1TLE9BRnRCRTtRQVJOLFdBV087SUF4RGtCLFNBMER2QkMsa0JBQWtCSCxNQUFNSTtNQUNoQiw0Qm5EcExiLE9tRDBLS0gsaUJBU2tCRCxhQUFNSSxNQUNjO0lBM0RmLFNBNkR2QkMsV0FBV0wsTUFBTUUsTUFBTUk7TUFDekI7TUFDRywyQkFGZ0JKLE1BQU5GO2dCQTVCYixTQTRCYUEsTUFBTUU7Z0JBM0JuQixpQkEyQmFGLFNBQU1FOztnQkFBTUk7O2dCQUFaTixpQkFBTUUsTUFBTUksU0FBWk4sWUFLaUQ7SUFsRXJDLFNBb0V2Qk8sV0FBV1AsTUFBTUU7TUFDbkI7UUFBSSxlQURlQSxNQUFORjs7OztTQUVLLHdCQUZMQSxTQUFNRTttQkFFb0I7SUF0RWQsU0F3RXZCTSxVQUFRQyxLQUNWLGFBRFVBLE1BQ3FCLFVBRHJCQSxJQUNzQztJQXpFdkIsU0EyRXZCQyxPQUFPVixNQUFNVyxLQUFLQyxXQUFXQztNQUNwQjt3QkFESUY7T0FFRSx1QkFGR0M7T0FHRix3QkFIYUM7T0FJVjs7eUJuRHhNeEIsT21EMEtLWixpQkEwQk9ELGFBRUxlO09BR2tCOzt5Qm5Eek16QixPbUQwS0tkLGlCQTBCT0QsYUFHTGdCO01BRWtCOzs7VUFMYmhCLG9DQUlMaUIsZUFIQUg7T0FES2Q7TUFDRSxJQUlXLGtCQUxiQTtNQUthLGNBT2JtQixJQUFJMW5FLEtBQUsybkU7UUFDVCxXQURBRCxJQVhMTCxRQVk0QixtQkFEdkJLLElBQUkxbkUsS0FBSzJuRSxZQUNnRDtNQUZoRTs7TUFNRjtpQkFDT0csSUFBSXJCO1VBQ0ssaUNBRFRxQixJQUFJckIsTUFIUG1CO1VBSVksU0FIWkM7VUFHWTtZQUdELDZCQUpKcEIsTUFsQkZGOzs7OztVQXFCRCxpQ0FIR0U7VUFHSCxRQUVXO1FBcEJmYztRQUVBRTtNQW9CSjtpQkFDT0ssSUFBSXJCO1VBQ0ssaUNBRFRxQixJQUFJckIsTUFYUG1CO1VBYWEsaUNBRk5uQixRQVZQb0I7VUFZYSxRQUE4QjtRQTFCM0NQO1FBRUFFO01BcUJKLFdBVklJO01BVUosV0FUSUM7TUFMRixJQWNGLFlBekJTdEI7TUFpQ047OztpQkFDT3VCLElBQWtCQztVQUF2QixJQUFPTCxJQUFGSSxPQUNDLFdBRENKLElBOUJSRixnQkE4QndCTyxNQUFsQkQsSUFBa0JDLEdBQ2dDOzs7TUFGekQsUUFJSTtJQWhIa0IsU0FrSHZCQyxNQUFNekI7TUFFTjtnQkFGTUE7T0FFTjs7Ozs7O01BRXVCLGNBSmpCQTtNQU1MOzs7aUJBQ085d0UsRUFBRU47VUFBZ0IsNkJBQWhCQSxFQVBKb3hFO1VBT29CLDBCQUFoQnB4RSxPQUFGTSxFQUE0QztRQU5Wd3lFO1FBQXdCZjtNQUtqRSxXQUxFVTtNQUtGLFdBTFdDO01BQ1osU0FGTXRCO01BWUw7OztpQkFDT3VCLElBQWtCQztVQUF2QixJQUFPTCxJQUFGSSxPQUNDLFdBRENKLElBWjRDUCxZQVk1QlksTUFBbEJELElBQWtCQyxHQUM0Qjs7UUFiaENHO01BV3JCLFFBSW9CO0lBbElFLFNBb0l2QkMsU0FBUzVCO01BQ1gsSUFBSWxkLE1BRE9rZCxTQUNYLFdBQUlsZCxjQUFKLE9BQUlBLEtBRUM7SUF2SW9CLFNBeUl2QitlLGFBQWE3QixNQUFNcnVFO01BQ3JCO1FBQUksNkJBRGlCQSxLQUFOcXVFOzs7O1VBR0QsSUFBUmxkLE1BQVEsU0FIQ2tkO1VBSVYsd0JBSmdCcnVFO1dBSWMsOEJBSmRBLEtBR2ZteEQsTUFIU2tkO1VBS2IsT0FGSWxkO1FBUE4sV0FTTztJQTlJa0IsU0FnSnZCZ2YsU0FBU3JCLEtBQ1Isa0JBRFFBLGNBQzRCO0lBakpkLFNBbUp2QnNCLHNCQUFzQi9CLE1BQU1nQyxNQUFNQztNQUN4Qjt3QkFEa0JEO09BQ2xCLE9BQVJFO09BQVEsTUFEd0JEO09BRzFCLG1CQURORSxTQUFnQ0M7T0FDMUIsS0FETkQ7T0FDTTs7WUFDVnB4RTtRQUNFO1VBQVc7OzZCQUxXaXZFLE1BS1ksaUJBSmhDa0MsUUFHSm54RTtVQUNFLGlCQUZFZ0QsSUFDSmhEO1VBQ2EsU0FEYkE7OztNQUhZLElBTVosS0FMb0NxeEUsY0FLcEM7OztRQUNFO1VBQWtCO2dCQURwQjUzRSxJQUxJMjNFO1dBTWdCLGtCQVJJbkMsTUFRZSxpQkFSSGlDLEtBT3BDejNFO1VBQ0UsaUJBTEV1SjtVQUtnQixTQURwQnZKOzs7TUFHQSxPQVBJdUosR0FPRDtJQTdKc0IsU0ErSnZCc3VFLGFBQWFyQyxNQUFNcnVFO01BQ3JCO1FBQUksNkJBRGlCQSxLQUFOcXVFOzs7OEJBQ2lDO21CQUFZO0lBaEtuQyxTQWtLdkJzQyxjQUFjdEMsTUFBTUk7TUFDWiw0Qm5ENVJiLE9tRHdSS2lDLGFBR2NyQyxhQUFNSSxNQUNjO0lBbktYLFNBcUt2Qm1DLGdCQUFnQnZDLE1BQU10eEUsR0FDeEIsY0FEd0JBLEVBQU5zeEUsVUFDbEIsUUFBMkM7SUF0S2xCLFNBbUx2QndDLGFBQWFDO01BQ2YsU0FEZUEsZUFDbUI7TUFFdkI7c0NBSElBO09BSUgsZ0JBRFJDO01BRUo7aUJBQ09sNEUsRUFBRSsyRTtVQUNMLElBQUlKLEtBREQzMkU7VUFFdUIsK0JBRnJCKzJFLElBQ0RKLElBSEpuQjtVQUswQiw4QkFGdEJtQixNQUhKbkI7VUFLMEIsUUFBd0M7UUFUdkR5QztNQUtmLE9BREl6QyxLQU9DO0lBOUxvQixTQWdNdkIyQyxXQUFXM0M7TUFDYixxQkExSkVGLG9CQXlKV0U7TUFFUyxlQUZUQTtNQUdXO2VBSFhBO3FCQUdXLGlCQUhYQSx1Q0FHa0Q7SUFuTXRDLFNBcU12QjRDLFNBQVNDLElBQUlaLEtBQUtyQixXQUFXQyxrQkFBK0I5NUM7VUFBTHBLLGFBQVZtbUQ7TUFDL0MsT0FEV0QsSUFBSVosS0FBS3JCLFdBQVdDO01BQy9CLElBQ0k5aEUsS0FGMERnb0IsSUFHaEQsV0FIaUMrN0MsUUFBcENELElBQThDbG1ELEtBR2YsV0FIS21tRCxRQUFwQ0Q7TUFJWCxNQUpXQTtNQUNYO09BR0E7T0FNSyxjQVYwQmhDO09BUTVCOzs7b0JBQ09rQyxJQUEyQixrQkFUMUJGLElBUzBCLGlCQVQxQkEsSUFTREUsSUFBK0Q7O09BRmxDLGNBUHhCZDtNQU1aOzttQkFKQ2xqRTs7aUJBS00scUJuRHJVYixPbUR3UktzakUsYUFzQ1NROztJQXJNYyxTQWlOdkJHLFdBQVdDLFVBQVVDO01BQ1gsdUJBRENELFdBRUUsb0JBRlFDLFdBQ25CbEQ7TUFFSixXQUZJQTtNQUdILHFCQUZHbUQsWUFGbUJELFdBRW5CQyxXQUVxRDtJQXJOaEMsU0EwTnZCQyxpQkFBaUJILFVBQVVDLFdBQVdHO01BQzVCLHVCQURPSixXQUVKLG9CQUZjQyxXQUN6QmxEO01BRUosV0FGSUE7TUFFSixnQkFINkJrRDtNQUc3QixnQkFESUM7TUFDSixRQUUrQjtJQS9OTixTQWlPdkJHLFlBQVlDO01BQ2QsU0FBSUMsYUFBaUIsb0NBRFBELElBQzZDO01BQTNELFVBQUlDLG9CQUN1QztJQW5PbEIsU0F1T3ZCQyxjQUFjekQ7TUFFTixJQUFOdG1FLElBQU0sbUJBRk1zbUU7TUFJaEIsU0FKZ0JBO01BS1Isc0JBSEp0bUUsSUFHZ0I7SUE1T0ssU0E4T3ZCZ3FFLGtCQUFrQkMsTUFBTTNEO01BQzFCLEdBRG9CMkQsTUFDYSxPQURiQTtNQUdSLElBQU5qcUUsSUFBTSxtQkFIY3NtRTtNQUt4QixTQUx3QkE7TUFNaEIsc0JBSEp0bUUsSUFJSDtJQXJQc0IsU0F1UG5Ca3FFLE9BQU9scUU7TW5EaFhoQjs7O2NtRG1YUTVJLGFBQUhwQztVQUFRLFdBQVJBLEVBSFdnTDtzQkFHUjVJOztRQURLO0lBelBlLFNBNFB2Qit5RSxpQkFBaUJucUUsSUFBSXNtRTtNQUN2QixVQUR1QkEsU0FDdkIsV0FBSThEO01BQUosWUFFRSxPQUhpQnBxRSxJQUNmb3FFLFdBRWM7SUEvUE8sU0FpUXZCQyxxQkFBcUJKLE1BQU1qcUUsSUFBSXNtRTtNQUNqQyxHQUR1QjJELE1BQ1UsT0FESmpxRTtNQUNhLElBQ3BDb3FFLE1BRjJCOUQ7TUFDUyxTQUNwQzhELE1BQ2dCLE9BSE9wcUUsSUFFdkJvcUU7TUFDZ0MsT0FIVHBxRSxHQUsxQjtJQXRRc0IsU0F3UXZCc3FFLCtCQUFtQ0wsTUFBTTNEO01BQzNDLEdBRHFDMkQsTUFDSixPQURJQTtNQUV6QixJQUFOanFFLElBQU0sY0FGK0JzbUU7TUFHekMsaUJBREl0bUUsSUFGcUNzbUU7TUFHekMsT0FESXRtRSxHQUdIO0lBN1FzQixTQXdTdkJ1cUUsV0FFSzk3RDtNQUZNLEdBRU5BLE1BQVUsT0FBVkEsU0FESSw2QkFDaUI7SUExU0gsU0ErU3ZCKzdELFdBQVdsMUUsRUFBRW0xRSxLQUFLN21EO01BQ3BCLHVCQUFJdnBCLEtBQUo7WUFEYS9FO1lBR2J4RTtRQUNFO21CQUZFcUU7VUFFZSwyQkFKSnMxRSxLQUdmMzVFO1VBQ0UsU0FERkE7YUFIYXdFLE1BR2J4RTs7TUFGQSxTQUNJcUU7TUFsQmtCLEdBZ0JGeXVCLFFBZEgsd0JBZWJ2cEI7TUFoQk8sNkJBc0JSO0lBdFRzQixTQTJVdkJxd0UsY0FBY0MsS0FuQklGO01Bb0JkLElBcEJtQkcsU0FvQm5CLFdBRFVEO01BQ1YsR0FwQm1CQztRQXNCdkIsUUF0QmtCSCx3QkFBRjM1RSxNQUFPOHlCOztRQUN6QjtrQkFEa0I5eUI7WUFFUix5QkFGVTI1RSxLQUFGMzVFLFVBR0UrNUUsU0FIS2puRDtZQUl2QjtjQXZCVSxHQXNCUWluRDttQ0FEaEJ4MEI7a0JBR00sSUFMZXkwQixTQUtmLFdBRlVEO2tCQUVWLEdBTGVDO29CQVFqQixRQVJVaDZFLGdCQUFPOHlCO2tCQU1WO2dCQW5CRixHQWdCT2luRDtrQkFkSCxTQWNHQTs7a0JBZEgsSUFYQzMxRSxLQXdCZG1oRDtrQkF4QmtCLEdBeUJGdzBCO29CQXZCSCxjQUZDMzFFLFNBYWhCczFFLFdBU2dCMTVFLFVBQUUyNUUsS0F0QkZ2MUU7a0JBQ1A7Z0JBU0E7Y0FOQTtVQW1CRyxPQURXMHVCO01Bd0J2QixrQkF4QmtCNm1ELDZCQW1CSkUsS0FLOEI7SUFoVnJCLFNBbVl2QkksVUFBVXpFO01BQ0osaUJBRElBO01BR3NCOzs7U0FGOUJoeEU7OztnQkFFOEIsaUJBSHRCZ3hFLDBDQUNSaHhFO1lBQ0E4USxJQUVVLFdBSkZrZ0U7TTNDb0JOLGtCMkNsQkZsZ0UsSUFEQTlRO01BS0osaUJBTllneEUsU0FFUmxnRTtNQUlKLE9BSklBLEdBS0g7SUExWXdCLFNBOGR2QjRrRSxZQUFZMUUsTUFBTVQ7TUFDcEIsUUFEb0JBLG1CQUNwQjs7V0F4RG9CLzBFLE9Bd0RoQitIO1VBRUY7Z0JBMURrQi9IO1dBMEROLHVCQUhNKzBFO1dBdERwQjs7Y0FBYzt1QkFETS8wRTtjQUNRLHdCQXNEUiswRSx1QkF0RGdCO1dBQzlCO29CQW1ESm9GOzs7Y0FsRHdCOztlQXVEUUMsTUE3SWxCLFNBQUp2MUUsR25EN2NmLGdCbUQ2YzRCcUssS0FBUSxPQUFyQnJLLENBQXNCLEdBQXRCQTs7O2NBdUZVOztlQXNEWXUxRSxNQTVJbEIsU0FBTjUxRSxHbkQ5Y2IsZ0JtRDhjNEIwSyxLQUFPLE9BQVBBLFFBQWYxSyxFQUE0QyxHQUE1Q0E7OztjQXVGWTs7ZUFBa0I7ZUFxRE40MUU7Z0JBMUlsQyxTQURVbHRFLEVBQUUxSSxHbkQvY2YsZ0JtRGdkWTBLLEtBQ1AsT0FET0EsUUFEQ2hDLE9BQUUxSSxFQUVtRDtrQkFGckQwSSxFQUFFb0k7OztjQXVGVTs7ZUFvRFk4a0U7Z0JBeElsQixTQUFMNTFFO21CbkRsZGQsZ0JtRGtkNEIwSyxLQUFPLGtCQUFQQSxXQUFkMUssR0FBYzBLLElBQXFCO2tCQUFuQ3FHOzs7Y0FxRlc7O2VBbURZNmtFO2dCQXZJbEIsU0FBTjUxRSxHbkRuZGIsZ0JtRG1kNEIwSyxJQUFJckssR0FBSyxRQUF4QkwsS0FBbUJLLEVBQUssUUFBd0I7a0JBQWhEdzFFOzs7Y0FxRlk7O2VBQWtCO2VBa0RORDtnQkF0SWhCLFNBQU5sMkUsRUFBRVcsR25EcGRqQixnQm1Eb2Q4QnFLLEtBQVEsa0JBQXZCaEwsRUFBRVcsRUFBd0I7a0JBQTFCWCxFQUFFNlo7OztjQXFGUTs7ZUFBa0I7ZUFpRE5xOEQ7Z0JBckloQixTQUFSbDJFLEVBQUVNO21CbkRyZGYsZ0JtRHFkOEIwSyxLQUFPLGtCQUF4QmhMLEVBQWlCZ0wsUUFBZjFLLEdBQWdEO2tCQUFsRHVpRCxJQUFFdXpCOzs7Y0FzRkE7O2VBQW1CO2VBQWtCO2VBK0NmRjtnQkFuSWxDLFNBRFVsMkUsRUFBRWdKLEVBQUUxSTttQm5EdGRqQixnQm1EdWRZMEs7cUJBQ1Asa0JBRlFoTCxFQUNEZ0wsUUFER2hDLE9BQUUxSSxHQUVxRDtrQkFGekR3aUQsSUFBRWwvQixJQUFFeXlEOzs7Y0F1RlE7O2VBQWtCO2VBNkNOSDtnQkFqSWhCLFNBQVBsMkUsRUFBRU07bUJuRHpkaEIsZ0JtRHlkOEIwSztxQkFBUyxrQkFBekJoTCxFQUF5QixXQUFUZ0wsV0FBZDFLLEdBQWMwSyxLQUF5QjtrQkFBekNnNEMsSUFBRXN6Qjs7O2NBc0ZEOztlQUFrQjtlQUFrQjtlQTJDZEo7Z0JBaElSLFNBQVJsMkUsRUFBRVcsRUFBRUM7bUJuRDFkekIsZ0JtRDBkc0NvSyxLQUFRLGtCQUF6QmhMLEVBQUVXLEVBQUVDLEVBQTBCO2tCQUE5QnVpRCxJQUFFRSxJQUFFemlEOzs7Y0F3RlY7O2VBQWtCO2VBQWtCO2VBd0NkczFFO2dCQS9IUixTQUFWbDJFLEVBQUVXLEVBQUVMO21CbkQzZHZCLGdCbUQyZHNDMEssS0FBTyxrQkFBMUJoTCxFQUFFVyxFQUFpQnFLLFFBQWYxSyxHQUFrRDtrQkFBdERvakQsSUFBRUYsSUFBRSt5Qjs7O2NBMEZSOztlQUFrQjtlQUFrQjtlQUFtQjtlQXFDakNMO2dCQTFIbEMsU0FEZ0JsMkUsRUFBRVcsRUFBRXFJLEVBQUUxSTttQm5EL2R6QixnQm1EZ2VZMEs7cUJBQ1Asa0JBRmNoTCxFQUFFVyxFQUNUcUssUUFEV2hDLE9BQUUxSSxHQUUrQztrQkFGckRzakQsSUFBRTR5QixJQUFFbGpELElBQUVtakQ7OztjQXlGVjs7ZUFBa0I7ZUFBa0I7ZUFrQ2RQO2dCQTlIVCxTQUFSbDJFLEVBQUVXLEVBQUVMO21CbkQ1ZHhCLGdCbUQ0ZHFDMEs7cUJBQVcsa0JBQTVCaEwsRUFBRVcsRUFBMEIsV0FBWHFLLFdBQWIxSyxHQUFhMEssS0FBMkI7a0JBQTVDNjRDLElBQUU2eUIsSUFBRUM7OztjQStGVDs7ZUFBa0I7ZUFBa0I7ZUErQmRUO2dCQTdIVixTQUFSbDJFLEVBQUVNLEVBQUVLO21CbkQ3ZHZCLGdCbUQ2ZG9DcUssS0FBTyxrQkFBeEJoTCxFQUFpQmdMLFFBQWYxSyxHQUFFSyxFQUFnRDtrQkFBcERtakQsSUFBRTh5QixJQUFFQzs7O2NBaUdSOztlQUFrQjtlQUFtQjtlQUFrQjtlQTRCakNYO2dCQXZIbEMsU0FEZ0JsMkUsRUFBRWdKLEVBQUUxSSxFQUFFSzttQm5EbGV6QixnQm1EbWVZcUs7cUJBQ1Asa0JBRmNoTCxFQUNQZ0wsUUFEU2hDLE9BQUUxSSxHQUFFSyxFQUUrQztrQkFGckRtMkUsSUFBRUMsSUFBRUMsS0FBRUM7OztjQStGVjs7ZUFBa0I7ZUFBa0I7ZUF5QmRmO2dCQTVIVCxTQUFSbDJFLEVBQUVNLEVBQUVLO21CbkQ5ZHhCLGdCbUQ4ZHFDcUs7cUJBQVMsa0JBQTFCaEwsRUFBMEIsV0FBVGdMLFdBQWYxSyxHQUFlMEssS0FBYnJLLEVBQXdDO2tCQUE1Q3UyRSxJQUFFQyxLQUFFQzs7O2NBc0dUOztlQUFrQjtlQXNCSWxCO2dCQXJIWCxTQUFONTFFLEVBQUVLO21CbkRyZXRCLGdCbURxZW1DcUs7cUJBQU8sa0JBQVBBLFdBQWYxSyxHQUFlMEssSUFBYnJLLEVBQStDO2tCQUFqRDAyRSxLQUFFQzs7O2NBaUdQOztlQUFrQjtlQW9CSXBCO2dCQW5IbEMsU0FEZTUxRSxFQUFFbXBCO21CbkR0ZXBCLGdCbUR1ZVl6ZTtxQkFBTyxrQkFBUEEsV0FETTFLLEdBQ04wSyxZQURReWUsR0FDaUQ7a0JBRG5EOHRELEtBQUU5dEQ7OztjQWtHTDs7ZUFBa0I7ZUFBa0I7ZUFrQmR5c0Q7Z0JBakhsQyxTQURlNTFFLEVBQUUwSSxFQUFFeWdCO21CbkR4ZXRCLGdCbUR5ZVl6ZTtxQkFBTyxrQkFBUEEsV0FETTFLLEdBQ04wSyxZQURRaEMsT0FBRXlnQixHQUVnRDtrQkFGcEQrdEQsS0FBRUMsSUFBRTVnRDs7O2NBbUdQOztlQUFrQjtlQWVJcS9DO2dCQTlHbEMsU0FEZ0I1MUUsRUFBRW1wQjttQm5EM2VyQixnQm1ENGVZemU7cUJBQWlDLG9CQUFqQ0EsV0FEU3llLEdBQ1R6ZTtxQkFBaUMsa0JBQWpDQSxXQURPMUssR0FDUDBLLFNBQWlEO2tCQUQxQzBzRSxLQUFFaGdEOzs7Y0FrR04sZ0JBQWtCO2NBQXlCLFVBVXpDNDVDO2NBVkY7ZUFhc0I0RTtnQkE1R2xDLFNBRGF6c0QsRUFBRTlvQjttQm5EN2VsQixnQm1EOGVZcUs7cUJBQU8seUNBRERySyxFQUFGOG9CLEtBQUU5b0IsRUFDeUM7a0JBRDNDZzNFLElBQUVDOzs7Y0FrR0gsZ0JBQWtCO2NBQXdCLFVBUXhDdEc7Y0FSRjtlQVdzQjRFO2dCQTFHbEMsU0FEV3pzRCxFQUFFbnBCO21CbkQvZWhCLGdCbURnZlkwSztxQkFDUCxTQURPQSxRQURJMUs7cUJBRVgsOENBRlNtcEIsVUFHbUI7a0JBSG5Cb3VELElBQUVDOzs7Y0FrR0QsZ0JBQWtCLFlBQWtCO2NBQzdCLFVBS0x4RztjQU5GO2VBU3NCNEU7Z0JBdEdsQyxTQURXenNELEVBQUV6Z0IsRUFBRTFJO21CbkRuZmxCLGdCbURvZlkwSztxQkFDUCxTQURPQSxRQURJaEMsT0FBRTFJO3FCQUViLDhDQUZTbXBCLFVBS3FCO2tCQUxyQnN1RCxJQUFFQyxJQUFFQzs7O2NBaUdILGdCQUFrQjtjQUF5QixVQUd6QzNHO2NBSEY7ZUFNc0I0RTtnQkFoR2xDLFNBRFl6c0QsRUFBRW5wQjttQm5EemZqQixnQm1EMGZZMEs7cUJBQ0csb0JBREhBLFdBREsxSyxHQUNMMEs7cUJBQ0csOENBRkF5ZSxVQUU2QztrQkFGN0N5dUQsSUFBRUM7O2VBaUdvQmpDLE1BTGhDRDtVQU1BLFdBSlkzRSxNQUdSRSxNQUE0QjBFO1VBQ2hDOztRQTFEWSxTQTREVjtJQXBlcUIsU0EyZXZCa0M7TUFDRixVQS9lRTVILGVBeUNBVyxnQkFDQUMsa0JBc2N1RDtJQTdlaEM7Ozs7T0E0Q3ZCQztPQTZGQThCO09BVUFFO09BWUFNO09BR0FDO09BakhBckM7T0FTQUU7T0FVQUk7T0FQQUY7T0FpYUFxRTtPQW5aQWhFO09BdUNBZTtPQW1EQWM7T0FsTEF0RDtPQWdNQXVEO09BYUFHO09BS0FDO09BWUFJO09BU0FJO09BT0FFOztPQU1BRztPQU9BQztPQWNBRztPQUtBRTtPQU9BQztPQW1FQUk7T0E5WkExRjtPQThqQkFvSTtJQTNldUI7OzthQ3RFdkJDLGVBQWV4RCxJQUFJeUQ7TUFDckI7Y0FEcUJBO09BRVYsc0JBRFA1c0U7T0FDTyxLQURQQTtPQUNPOztZQUNYNVA7UUFDRTtVQUEwQixJQWhDSTA4RSxNQWdDSixpQkFKUEYsUUFHckJ4OEU7VUE5QkEsVUFEZ0MwOEU7V0FDaEMsT0FEZ0NBOztjQUkzQjs7eUJBMkJMMThFOzJCQTNCYTZzRCxHQUFJaG9EO29CQUNtQixJQUF6QjgzRSxLQUxVRixTQStCckJ6OEU7b0JBMUJvQyxHQUR2QjZzRCxPQUNGOHZCLEtBRUYsb0NBcUJRNUQ7b0JBbkJSLGtCQUpFNEQsS0FETTkzRSxFQUtIO3lCQUxEZ29EO2VBQVIsUUEyQkw3c0Q7ZUE5Qkl1VSxLQUdTczRDOzs7Y0FRUixJQUFRdm1EO2NBT1I7Z0JBUFFBOztpQkFBUixTQUFRQSxFQW1CYnRHO29CcER0REg7c0JvRHFDNkIsSUFBYmlkLElBZFF3L0QsU0ErQnJCejhFO3NCQWpCMEIsR0FGYnNHLE1BRUEyVyxJQUVGLG9DQVlNODdEO3NCQWRTLFNBSWYsYUFKRTk3RDtzQkFJRjsrQkFKRUE7NENoQ1ZYeE0saUJnQ1VXd007bUJBRkEzVyxFQW1CYnRHO2NBbkJLLElBWER1VSxLQVdTak87O3lCQVhUaU8sS0FvQlUsWUFPR3drRTs7V0EzQmpCLFNBRGdDMkQ7WUF1QjNCLFVBdkIyQkEsU0FDNUJub0UsS0FzQlUsZUFLR3drRSxJQU5ONkQ7O1lBRUksTUF4QmlCRixTQUM1Qm5vRSxLQXVCTW5RO1VBRVYsU0FLQXBFLEtBOUJJdVU7VUErQndCLFNBRDVCdlU7OztNQUdBLE9BbENxQnk4RSxJQWtDakI7YUFFRkksU0FBUzlELElBQUkyRDtNQUNmLFVBRGVBO1FBR1osSUFETUUsTUFGTUYsU0FHWixzQkFIUTNELElBRUY2RDtNQUVGLCtDQUFpRDthQWlCdERFLGlCQUFpQk4sUUFBTTFzRSxFQUFFdEw7TXBEaEY5QixTb0RpRlcsYUFEbUJBLE1BQVJnNEUsc0JBQVFoNEU7UUFFM0IsU0FGbUJnNEUsMkJBRW5COzs7VUFDRTtZQUErQixRQUhOaDRFLE1BRTNCeEUsR0FDdUIsdUJBSEp3OEUsUUFFbkJ4OEU7WUFoQkEsVUFEOEIwOEU7YUFDOUIsU0FEOEJBOzt3QkFPbkIsYUFQeUJwbkU7aUJBUXhCLE9BT2F4RixNQUV6QjlQLEdBUkdzVTtpQkFDRTswQkFERkEsS0FUaUNnQixRQVNqQ2hCO21CQUNFLFNBREZBOzs7OztlNUNzY0c7O2M0QzVjSCxNQWNIdFUsS0FqQm9Dc1Y7O2FBQ3BDLFNBRDhCb25FO2VBYTNCLElBRE1FLE1BWnFCRixTQWFKLGlCQURqQkUsTUFHZ0I5c0UsTUFFekI5UCxHQWpCb0NzVjtZQWtCSCxTQURqQ3RWOzs7O21DQUVJO2FBRUZnOUUsV0FBV04sTUFBTTVzRSxFQUFFdEw7TUFDckIsVUFEYWs0RTtRQUdWLElBRE1FLE1BRklGLFNBR1Ysd0JBRE1FLE1BRlU5c0UsRUFBRXRMO01BSWQsK0NBQW1EOzJCQS9CeERxNEUsU0EyQkFHOztJQzFEaUI7O2VBQWpCQztLQUFpQjthQUtqQkc7TUFBa0IsWUFMbEJILGVBS2tCLHNCQUFxQztJQUx0QyxTQU9qQkksTUFBTWoyRTtNQUNSLHdCQU5FODFFLGNBQ0FDO1FBTWdCLElBQVpHLFVBQVksc0JBTmhCSDtRQU9BLEtBUkFELFlBT0lJLFlBTkpIO1FBT0EsWUFESUc7TUFJTixlQVhFSixVQUNBQyxVQUlNLzFFO01BTVI7Y0FDVztJQWRRLFNBZ0JqQm0yRTtNQUNNLElBQUo3NEUsRUFBSSxXQWZOdzRFLFlBQ0FDO01BY00sWUFqQk5GO01BaUJNLE9BQUp2NEUsQ0FBcUU7SUFqQnRELFNBcUJqQjg0RSxXQUFXQztNQUNHLElBQVpDLFVBQVk7TUFDaEI7aUJBQWVoNUUsR0FBSyxvQ0FEaEJnNUUsVUFDV2g1RSxRQUFvQztRQUZ0Qys0RTtNQUViLFNBQ0lFLGlCQUFpQnJ1RTtRQUNuQjtVQUFJLHNDQUhGb3VFLFVBRWlCcHVFOzs7Z0NBRUosVUFGSUE7VUFERCxXQUdLO01BSHpCLFNBSUlzdUUsaUJBQWlCeDJFO1FBQ1gsSUFBSjFDLEVBQUksU0FEVzBDO1FBQ1g7VUFDSixzQ0FQRnMyRSxVQU1FaDVFOzs7Z0NBRStCLHlDQUYvQkE7VUFISixXQUs4RDtNQVBoRSxTQXNJSW01RSxRQVdtQjErQztRckRwTTFCO1FxRDBMSztVQUFNLGlCQVVlQTtVQVZmOzs7OztnQkFDUSxLQVNPQTtnQkFKZixtQkFJZUE7Z0JBSmY7d0NBQ1EsS0FHT0EsTUFIK0IsUUFHL0JBO2tCQUZULEtBRVNBOztnQkFEZDs7O2dCQVBPLEtBUU9BO2dCQUNyQjtrQkFBTSxtQkFEZUE7a0JBQ2Y7O29DQUNRLEtBRk9BLE1BRVA7b0NBQ0EsS0FIT0E7b0JBSVQsS0FKU0E7O2tCQUtkO1lBWkssS0FPU0E7O1VBTmQsZ0JBQW9CO01BM0k3QixTQTJHSTIrQyxPQUFRMytDO1FBQ0osaUJBRElBO1FBQ0o7Ozs7OztzQkFDUSxLQUZKQSxNQUVJO3NCQUNBLEtBSEpBLE1BR0k7c0JBQ0EsS0FKSkEsTUFJSTs7OzthQUVWLEtBTk1BO2FBT00sbUJBUE5BO2FBT007OztpQkFFUixLQVRFQTtpQkFVVSxtQkFWVkE7aUJBVVU7OztxQkFFUixLQVpGQTtxQkFZRTs7Ozs7Ozs7OztpQkFJRzthQUVKO1VBRUMsS0FwQkZBO1VBb0JFO1FBQ0wsZUFBb0I7TUFoSTdCLFNBaUZJNCtDLGtCQUFtQjUrQztRQUNyQjtVQUFNLGlCQURlQTtVQUNmOzt3Q0FFRixLQUhpQkEsTUFHcUI7VUFDUyxrQ0FBZixpQkFBaUI7TUFyRnZELFNBNEVJNitDLGNBQWU3K0M7UUFDWCxpQkFEV0E7UUFDWDs7O1U3Q2daRjtZNkM5WUEsS0FIYUEsTUFHeUIscUNBSHpCQTtRQUlWLHlCQUpVQSxLQUljO01BaEZqQyxTQTRESTgrQyxPQWMwQnY1RTtRQWI1QjtVQUFNLGlCQWFzQkE7VUFidEI7Ozs7O2M3Q2dhRixhNkMxWkEsS0FPd0JBLEdBUGMsK0JBT2RBOzs7Z0JBVHhCLEtBU3dCQTtnQkFUYztnQkFLMUM7a0JBQU0sbUJBSXNCQTtrQkFKdEI7OztrREFFRixLQUV3QkEsR0FGYzs7O3VCQUV0QyxLQUF3QkEsR0FBYywrQkFBZEE7a0JBQ3VCLGtDQUFmOzZCQVpoQyxLQVd3QkEsR0FYYztVQUtLLGdDQUFmLGlCQUFpQjtNQXBFbkQsU0ErQ0l3NUUsT0FBUS8rQztRQUNWO1VBQU0saUJBRElBO1VBQ0o7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztZN0M2YUYsYTZDemFBLEtBTE1BLE1BS2dDO1VBQzlCLDJCQUFrQixnQkFBZ0I7TUFyRGhELFNBc0RJZy9DLFdBSU16NUU7UUFIRixpQkFHRUE7UUFIRjs7O1lBRUYsS0FDSUEsR0FBYyxnQkFBaUIsVUFBVywwQkFBMUNBO1FBQ2lCO1FBQWlCO3NCQURsQ0EsRUFDcUQ7TUEzRC9ELFNBeUNJdStCLE1BQU85RDtRQUNUO1VBQU0saUJBREdBO1VBQ0g7Ozs7Ozs7Ozs7Ozs7WTdDbWJGLGE2Q2hiQSxLQUpLQSxNQUlpQztVQUM5QiwyQkFBa0IsZ0JBQWdCO01BOUNoRCxTQVNRaS9DLHFCQXlGRWovQztRQXhGUjtVQUFNLGlCQXdGRUE7VUF4RkY7Ozs7Ozs7Ozs7Ozs7b0JBeUJGLEtBK0RJQTtvQkE5RGM7b0JBbUR0QjtzQkFBTSxtQkFXRUE7c0JBWEY7O3dDQUNTLEtBVVBBLG1CQVZPOzswQkFFWCxLQVFJQTswQkFSSjs0QkFFTSxJQURGbGdCLElBQ0UsT0FNRmtnQjs7O2tEQUxrQjs7OzBCQUVKLE1BSmRsZ0I7O3dCQUtJLEtBRUprZ0I7d0JBRjBDOztzQkFDM0M7O29CQXhFSCxLQXlFSUE7b0JBekVKO3NCQTBFRSxtQkFERUE7c0JBQ0YsYUFPQztzQkFQRDs7d0JBRUYsS0FISUE7d0JBR0o7MEJBQ1UsZ0JBSk5BOzs7Z0RBS2dCOzBCQUdqQjs0QkFoRkMvM0I7O3dCQStFSSxLQVBKKzNCLFVBeEVBLzNCOzs7NENBRWtCOztvQkFFVixtQkFvRVIrM0I7O3NCQW5FVyxLQW1FWEEsTUFuRVcsYUFMWC8zQjtvQkFNRzs7b0JBTUcsS0E0RE4rM0I7b0JBNURNOzs2QkEyRlprL0Msd0JBL0JNbC9DO2tEQStCTmsvQyxpQkEvQk1sL0M7MkJBN0RNLEtBNkROQSxNQTdETSxrQkE2RE5BOzs7Ozs7MkJBdEZKLEtBc0ZJQTs7Ozs7Ozs7Ozs7b0JBNUVKLEtBNEVJQSxNQTNFYyxnQkFBaUIsMEJBMkUvQkE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1k3QzJYSjtxQjZDdGJRLEtBMkRKQSxNQTNENkI7O2VBekJqQyxLQW9GSUEsTUFuRmMsZ0JBQWlCLHlCQW1GL0JBOztlQS9FSixLQStFSUEsTUE5RWMsZ0JBQWlCLDBCQThFL0JBO1VBMURELFNBQUk7TUF4Q2IsU0FpSUlrL0Msc0JBQWVsL0M7UUFDWCxpQkFEV0E7O1VBR2IsS0FIYUE7VUFHeUIsUUFIekJBO1VBR3lCO2lEQTNIcENpL0MsdUJBd0hXai9DO3dDQXhIWGkvQyxnQkF3SFdqL0M7UUFJTCwrQkFBc0I7TUFySXBDLFNBU1FtL0MsV0F5RkVuL0MsTXJEckpiLHVCcUQ0RFdpL0MsZUF5RkVqL0M7TUFsR1YsZ0JBd0pJMzJCO1FBQVMscUJBQWlCNDFCLE9BQVUsa0JBQXBDNTFCLE1BQW9ELEVBQUM7SUEvS3RDLHFCQXFCakJnMUU7SUFyQmlCO0lDc0VGO010RGxHcEIsSXNEb0lTdnFCLHlCdERwSVQ7ZXNEc0lTdGpELE9BQVM2Z0IsSUFBcUM0aUM7UUFDaEQsR0FEVzVpQztTQUFTLFFBQVRBLGNBQVNDOzthQUFUNGlDLE9BQVM7WUFQQXh1RDtRQUNwQjtVQUNLLE1BSzJDdXVELGdCQVA1QnZ1RDtZQUdmLFFBSGVBO2FBT1R3dUQ7V0FFZTs4QkFKeEJKO1lBSXdCLGtCQUp4QkEscUJsQ3pHSnhpRCxpQmtDeUdJd2lEO1lBSUUvQyxLQUFzQjs7ZUFBdEJBO1VBQzhDLDJCQVY5QnJyRCxLQVNoQnFyRCxLQVRnQnJyRCxHQVVrRDtlQUVwRXEzQixNQUFNMVE7UUFDUjtnQkFEUUEsZ0JBQ1IsS0FDSXpqQixZQURKOztjQUVBL0g7VUFDRTs2QkFKTXdyQixLQUdSeHJCO1lBQ0UsU0FERkE7OztnQkFFSTtlQUVGMmdDLE1BQU1uVjtRQUNSLElBQUl6akIsSUFESXlqQjtRQUNSLE9BQUl6akIsUUFESXlqQjtpQkFHTixNQUhNQTtrQ0FNSSxlQU5KQSxVQU9MO2VBRURpckMsS0FBS2xpRDtRQUFJLFNBQUpBLFFBQUksS0FBSkEsUUFBb0IsWUFBcEJBO1FBQW9CLFVBQXBCQSx1QkFBdUM7ZUFFNUNxaEQsVUFBVXBxQyxFQUFFK3lELE1BQ2QsT0FEY0EsUUFBRi95RCx3QkFDdUI7ZUFFakNnekQsTUFBTWh6RDtRQUNSLFNBQVFtcEM7VXREaktmO1VzRGlLMkI7O2tDQUdMejBELGdCQUFIa0g7Y0FBa0IsbUJBQWxCQTtvQkFHTWpILGtCQUFIOGU7Z0JBQ0ssZUFETEEsSUFDSyxVQURGOWU7Y0FGWixPQUxFcXJCOzBCQUlPdHJCOztZQURULFNBSzZCO1FBUG5DLE1BRFFzckIsS0FDUixLQVNJbFAscUJBVEo7O2NBVUF0YztVQUNFO1lBQVMsbUJBQVUsaUJBRmpCc2MsRUFDSnRjO1lBQ0UsaUJBRkVzYyxFQUNKdGM7WUFDVyxTQURYQTs7O2dCQUVJO2VBc0JGNGdDLE9BQU9wVjtRQUNULFVBRFNBLEtBQ1QsTUFBSXdvQyxpQkFBSixNQUNJUztRQUVKLE1BSlNqcEM7UUFDVDtTQUdBLEtBREkwb0M7U0FDSixXQUZJTyxvQkFGS2pwQztRQUtxRDtVQUNoRCxJQUFSeW9DLE1BQVEsZUFIVkM7VUFHVSxPQUFSRDtVQUFROzs7Y0FFWTtvQkFFSC96RCxjQUFOcTZCLGNBQU5na0Q7Z0JBQ0gsY0FEZXIrRTtnQkFFSjtnQ0FaVnNyQixFQVVFK3lEO2lCQUc4QixRQUg5QkEsS0FBTWhrRCxLQUd3QixpQkFQbkMwNUIsTUFNTUk7Z0JBQ0osaUJBUEZKLE1BTU1JO2dCQUNKO2NBSk8sUUFJdUM7V0FQeEMsS0FKVkk7V0FJVTs7Z0JBUVp6MEQ7WUFDRTs0QkFBYyxpQkFkZGcwRCxNQWFGaDBEO2NBQ0UsU0FERkE7OztVQVJZOzs7UUF4Q00sV0FtRGpCO2VBRUQ4MUIsSUFBSXRLLEVBQUUrNUIsSUFBSXQyQztRQUNEOzhCQURMdWMsS0FBRSs1QjtTQUVBLFlBRkYvNUIsRUFDRit5RDtTQUVZLDBCQUhSaDVCLElBQUl0MkM7U0FJdUIsVUFIL0JzdkUsS0FFQUcsVUFDK0IsaUJBSjdCbHpELEtBRUZ4ckI7UUFHSixpQkFMTXdyQixLQUVGeHJCLFlBRUE2MUQ7UUFDSixPQUxNcnFDO1FBQ0ssU0FETEE7UUFLTixZQUUyQyxPQVByQ0EsT0FPNkM7ZUFFakRzTCxPQUFPdEwsRUFBRSs1QjtRQUNBLElBQVBnNUIsS0FBTyxnQkFERi95RCxLQUFFKzVCO1FBQ0EsU0FDSG81QjtVdERqT2Y7VXNEaU8rQjs7a0JBRWZDLGNBQU9sdEUsZ0JBQUh0SztpQkFIVG0zRSxTQUdLSztnQkFDUywwQkFETHgzRSxFQUpGbStDO2dCQUtPO3lCQUNELE9BTlIvNUIsYUFNUSxPQUZEOVo7eUJBR2MsVUFIckJrdEUsR0FBSXgzRSxFQUdpQixjQUhkc0s7MEJBT04sT0FYRDhaLHlCQUlPOVo7a0JBVUZnaUQsa0JBQUZ6MEM7Y0FBdUIsVUFWMUIyL0QsR0FVRzMvRCxJQUF1QixjQUFyQnkwQztZQVhELFNBV3lDO1FBQzlDO3FCQWZDbG9DLEVBQ0wreUQ7U0FlVSxtQkFBYyxpQkFoQm5CL3lELEtBZUx4ckI7UUFDSixpQkFoQlN3ckIsS0FlTHhyQjtRQUNKLFFBQXNDO2VBMEJwQ3dULEtBQUtnWSxFQUFFKzVCO1FBQ0U7OEJBREovNUIsS0FBRSs1QjtTQUdrQixlQUhwQi81QixFQXBCWSt5RDtTQXVCRCx5QkFIWC95RDs7OztnQkFqQkFvekQsWUFBTzErRSxjQUFIa0g7ZUFIUW0zRSxTQUdaSztjQUNTLDBCQURMeDNFLEVBaUJGbStDO2NBaEJPOztpQkFFSSw0QkFIVG4rQztpQkFHUyxZQUtBLElBQUxrVixhQUFLLE9BQUxBO2lCQUxLLFVBSE5wYzs7OztZQWVWLDJCQURTNGM7O1VBZlQsZ0JBcUJ5QztlQXNCM0M4YixTQUFTcE4sRUFBRSs1QjtRQUNGOzhCQURBLzVCLEtBQUUrNUI7U0FHa0IsZUFIcEIvNUIsRUFwQlkreUQ7U0F1QkQseUJBSFgveUQ7Ozs7Z0JBakJKb3pELFlBQU8xK0UsY0FBSGtIO2VBSFltM0UsU0FHaEJLO2NBQ1MsMEJBREx4M0UsRUFpQkVtK0M7Y0FoQkc7O2lCQUVJLElBS1ZqcEMsRUFMVSxnQkFIVGxWO2lCQUdTLEdBS1ZrVixFQUFlLE9BQWZBO2lCQUxVLFVBSE5wYzs7OztZQWVWLDJCQURTNGM7O1VBZlQsU0FxQjZDO2VBRS9DdTVDLFNBQVM3cUMsRUFBRSs1QjtRQUNGLElBQVBnNUIsS0FBTyxnQkFEQS95RCxLQUFFKzVCO1FBQ0YsU0FDSCtRO1V0RHpTZjtVc0R5U2dDOztrQkFFbEJzb0IsY0FBTzErRSxnQkFBSGtIO2lCQUhQbTNFLFNBR0dLO2dCQUNTLDBCQURMeDNFLEVBSkVtK0M7Z0JBS0c7O21CQUNXLDRCQUZoQm4rQzttQkFFZ0I7cUJBR1AsSUFBTGtWLGFBQVEsVUFBUkEsRUFBUSxlQUxUcGM7bUJBRWEsWUFGYkE7Ozs7Y0FZViwrQkFEUzBtQjs7WUFaRixTQWFZO1FBQ0EsbUJBakJaNEUsRUFDUCt5RDtRQWdCVyx1Q0FqQkoveUQscUJBaUI2QjtlQUd0QytxQyxRQUFRL3FDLEVBQUUrNUIsSUFBSXQyQztRQUNMLElBQVBzdkUsS0FBTyxnQkFERC95RCxLQUFFKzVCO1FBQ0QsU0FDSHM1QjtVdEQ3VGY7VXNENlRnQzs7a0JBRWhCRCxjQUFPbHRFLGdCQUFIdEs7aUJBSFRtM0UsU0FHS0s7Z0JBQ1MsMEJBREx4M0UsRUFKRG0rQztnQkFLTSxzQkFERjd6QztnQkFFQyx1QkFGSnRLLEVBSkRtK0MsSUFBSXQyQztjQVNNLCtCQUFUMlg7O1lBTkEsZ0JBTTRCO1FBRWpDLGdCQVhFNEUsRUFDTit5RCxNQVdJLG1CQVpFL3lELEtBV054ckI7UUFDSTtVQUVOLHdCQUZFc0c7Ozs7WUFJYyxJQUFabzRFLFVBQVksZ0JBaEJObjVCLElBQUl0MkM7WUFpQmQsaUJBakJRdWMsS0FXTnhyQixlQVZBdStFLEtBZUVHLFVBSkZwNEU7WUFLRixPQWpCUWtsQjtZQWdCUSxTQWhCUkE7WUFpQlIsWUFFMkMsT0FuQm5DQTtVQWxCZSxXQXFDNEI7ZUFFbkRxTCxJQUFJckwsRUFBRSs1QjtRQUNHOzhCQURMLzVCLEtBQUUrNUI7U0FXYyxlQVhoQi81QixFQUNGK3lEO1NBVVUseUJBWFIveUQ7O1FBRWtCOztnQkFHakJvekQsWUFBTzErRSxjQUFIa0g7ZUFBSnczRSxPQUpITDtjQUtZLDBCQURMbjNFLEVBTEhtK0M7Y0FNUSxvQkFERnJsRDtjQUVDO1lBR1UsMkJBQVQ0Yzs7VUFOWixTQU9tQztlQUVyQ3ZFLE9BQUtyVSxFQUFFc25CO1FBQ1QsUUFEU0EsS0FDVCxLQVFJMUMsdUJBUko7O2NBU0E5b0I7O1VBQ0U7WUFBVSw2QkFGUjhvQixJQUNKOW9CO1lBVG9COztnQkFJRjtpQkFESEU7aUJBQUhrSDtpQkFDTSxzQkFETkE7aUJBQ21CLHdCQURuQkE7OztzQkFHU2tWLGFBQVIyZSxXQUFhLFdBUG5CLzJCLEVBT00rMkIsRUFBUTNlO2dCQUZILFVBREhwYzs7dUJBTWZGOzs7O1FBckJ3QixRQXVCcEI7ZUFFRnNOLEtBQUtwSixFQUFFc25CLEVBQUVqWDtRQUNYLFFBRFNpWCxLQUNULFVBRFdqWCxNQUNYLEtBVUl1VSx1QkFWSjs7Y0FZQTlvQjs7VUFDRTs7a0JBRkVvVDthQUVnQixxQkFIaEIwVixJQUVKOW9CO2FBWmtCZ0c7YUFBRW9EO1lBQ2xCO2lCQURnQnBEO2dCQUtXO2lCQURkOUYsS0FKRzhGO2lCQUlOb0IsRUFKTXBCO2lCQUtXLHNCQURqQm9CO2lCQUM4Qix3QkFEOUJBOzs7c0JBR1drVixhQUFSMmUsV0FQSzN4QixPQU9RLFdBUnJCcEYsRUFRUSsyQixFQUFRM2UsRUFQSGxUOztnQjlDb0tsQixrQjhDcEtrQkU7Z0JBS1MsSUFMWHRELEVBSUg5RixLQUpLa0o7O2NBV2hCZ0ssWUFYZ0JoSzt1QkFZcEJwSjs7OztRQUdBLE9BSklvVCxTQUlDO2VBRUgwaEQsbUJBQW1CNXdELEVBQUVzbkI7UUFDdkIsU0FBUW1wQztVdEQ5WGY7VXNEOFgyQjs7Y0FJUjtlQURJejBEO2VBQUhrSDtlQUFKdzNFO2VBQ0csc0JBREN4M0U7ZUFDWSx3QkFEWkE7O2dCQUtHLElBREtrVixhQUFSMmUsV0FDRyxtQkFUSy8yQixFQVFSKzJCLEVBQVEzZTtnQkFDTDtrQkFJRixJQURHd2lFO2tCQUNILGdCQVREMTNFLEVBSUE2ekIsRUFJSTZqRDtrQkFFUyxVQVZqQkYsR0FBSXgzRSxFQVVhLFVBVlZsSDtnQkFLQSxZQUxBQTs7Y0FDSixZQURJQTs7WUFEVixTQVdtQztRQWJ6QyxNQUR1QnNyQixLQUN2QixLQWVJbFAscUJBZko7O2NBZ0JBdGM7VUFDRTtZQUFTLG1CQUFVLGlCQUZqQnNjLEVBQ0p0YztZQUNFLGlCQUZFc2MsRUFDSnRjO1lBQ1csU0FEWEE7OztnQkFFSTtlQUVGNFAsT0FBTzRiLEdBQUksT0FBSkEsSUFBVTtlQUVieXBDOzs7O1lBRWdCOzs7O3FCQUFUcnVDOztVQURGO2VBR1RzdUMsTUFBTTFwQztRQUNSO2NBRFFBO1NBQ1I7U0FDRTs7cUJBQXFCbUMsRUFBRTNuQixHQUFlLGFBQWpCMm5CLEVBQWlCLGdCQUFmM25CLEdBQWtDO1NBQy9DLHFCQUZSbXZEO1NBRVEsS0FISjNwQztRQUlSO21CQUNPeGxCO1lBQ007K0JBRE5BO2FBRVcsc0JBSmRvdkQsTUFHSzl1RDtZQUNKLGlCQUpEOHVELE1BR0s5dUQ7WUFDSixRQUEwQjs7UUFIL0IsVUFKUWtsQixxQkFDSjJwQyxJQUVBQyxNQVN3QjtlQUV0QjJwQjs7OztnQkFFTzcrRSxnQkFBSGtIO1lBQWMsbUJBQWRBO2NBQ04sZ0RBRFNsSDtZQUVTLCtCQUFUMG1COztVQUhGO2VBS1RvNEQsWUFBWXh6RDtRQUNkOztjQURjQTtTQUNkO1NBRUU7O3FCQUNPbUMsRUFBRTNuQixHQUFlLGFBQWpCMm5CLEVBQWlCLHNCQUFmM25CLEdBQXdDO1NBRXZDLHFCQUpSbXZEO1NBSVEsS0FORTNwQztRQU9kO21CQUNPeGxCO1lBQ00sSUFBSk0sRUFBSSxzQkFETk47WUFDTSxVQVJUNjJDLFVBUUt2MkM7WUFBSSxTQUVLLGlCQUxkOHVELE1BR0s5dUQ7WUFFSixpQkFMRDh1RCxNQUdLOXVEO1lBRUosUUFBMEI7O1FBSi9CLFVBTkl1MkMsUUFEVXJ4QixnQkFFVjJwQyxJQUlBQyxNQVV3QjtlQUUxQm44QyxPQUFPbVg7UUFHVCxJQUFJa2xDLFNBSEtsbEM7UUFHVCxTQUVRM1EsSUFBSXpmLEVBQUV1MUQ7Y0FBRmh2RCxNQUFFaXZEO1VBQVU7ZUFBVkE7Y0FNSTtlQURGOWpELEtBTEY4akQ7ZUFLRHB1RCxFQUxDb3VEO2VBTUksc0JBRExwdUQ7ZUFDa0Isd0JBRGxCQTs7b0JBR1ltekIsZ0JBQVZnckI7Z0JBQ29COzJCQURwQkEsSUFBVWhyQjt1Q3REM2NoQyxPc0RtY2U5YSxJQUFJbFosSUFLSW1MO2NBQ0UsSUFOSjhqRCxPQUtFOWpEOztZQUhWLEdBRk1uTCxRQUZSK3VELG9CQUtPO1lBQ1M7cUNBTmhCQSxTQUVRL3VEO2FBSVEsSUFKUkE7O2FBQUVpdkQ7cUJBVUw7UUFaVDs4QnREamNQLE9zRG1jZS8xQyxvQkFZRztlQUVUaTJDLFlBQVkvbkM7UUFBZ0IsZ0JBQWhCQTtRQUFnQixvQnREamRyQztRc0RpZHFDLHNCdERqZHJDLE9zQm1DUzdiLHNCZ0M4YXNDO2VBRXRDNmpELGNBQWNob0M7UUFBZ0IsZ0JBQWhCQTtRQUFnQixvQnREbmR2QztRc0RtZHVDLHNCdERuZHZDLE9zQm1DUzdiLHNCZ0NnYndDO2VBRXhDNm5CLFFBQVF2SixJQUFJcHdCO1FBQ2Q7O21CQUFTLHFDQURDb3dCLElBQ0s2SyxFQUFFNzJCLEVBQWtCO2lCQURyQnBFLEVBQ3VCO2VBRW5DdzJELFlBQVlwbUMsSUFBSXB3QjtRQUNsQjs7bUJBQVMseUNBREtvd0IsSUFDQzZLLEVBQUU3MkIsRUFBc0I7aUJBRHJCcEUsRUFDdUI7ZUFFdkM0NUIsT0FBTzU1QixHQUNDLElBQU5vd0IsSUFBTSxhQUNWLFlBRElBLElBREtwd0IsR0FFVCxPQURJb3dCLEdBRUQ7O2NBeFZEemdCO2NBS0F1c0I7Y0FPQXlFO2NBU0E4MUI7Y0EyREEzZ0M7Y0FTQWdCO2NBMENBdGpCO2NBeUJBb2xCO2NBS0F5OUI7Y0FvQkFFO2NBcUJBMS9CO2NBYUF0ZTtjQWdDQXU4QztjQWxCQXhuRDtjQXVDQXNDO2NBTUFzbEQ7Y0FzQ0FqOEM7Y0FtQkF5OEM7Y0FFQUM7Y0FFQWg4QjtjQUdBNjhCO2NBR0E1OEI7Y0EzVEE0a0Q7Y0E0UUFRO0lBMVVXLFNBK1liQyxnQkFBd0IsMkJBQWU7SUEvWTFCLFNBK2JUQyxVQTlDS2x1RSxHQUFtQyx5QkFBbkNBLElBQXVEO0lBalpuRCxTQWtaYm11RSxlQUFjbnVFLEdBQW1DLHlCQUFuQ0EsSUFBNEQ7SUFsWjdELFNBbVpib3VFLFVBQVNwdUUsRUFBY2lxQixHQUFlLHlCQUE3QmpxQixJQUFjaXFCLEVBQThDO0lBblp4RCxTQW9aYm9rRCxZQUFXcnVFLEdBQXNCLHlCQUF0QkEsSUFBMEM7SUFwWnhDLFNBcVpic3VFLFlBQVd0dUUsR0FBc0IseUJBQXRCQSxJQUEwQztJQXJaeEMsU0F1WmJ1dUUsV0FBVW5oRSxHQUFlRixJQUMzQix5QkFEWUUsS0FBZUYsT0FDQTtJQXhaWixTQTBaYnNoRSxXQUFVeHVFLEdBQW1DLHlCQUFuQ0EsRUFBc0Q7SUExWm5ELFNBMlpieXVFLGNBQWV6dUUsR0FBbUMsMEJBQW5DQSxFQUEyRDtJQTNaN0QsU0E0WmIwdUUsU0FBVTF1RSxFQUFjc0wsR0FBZSwwQkFBN0J0TCxFQUFjc0wsRUFBNkM7SUE1WnhELFNBNlpicWpFLFdBQVkzdUUsR0FBc0IsMEJBQXRCQSxFQUF5QztJQTdaeEMsU0E4WmI0dUUsV0FBWTV1RSxHQUFzQiwwQkFBdEJBLEVBQXlDO0lBOVp4QyxTQStaYjZ1RSxVQUFXemhFLEdBQWNGLElBQXNCLDBCQUFwQ0UsR0FBY0YsR0FBNEM7SUEvWnhELFNBaWFiNGhFLE9BQUt2NkIsSUFBSWhyQjtNQUNELElBQU53bEQsSUFBTSxZQUNWLFNBRElBLElBRE94bEQsTUFHWCxVQUZJd2xELElBREd4NkIsS0FHUCxPQUZJdzZCLEdBR0Q7SUFyYVksU0F1YWJDLE1BQU1ELElBQUl4NkI7TUFDTixvQkFERXc2QjtNQUNGLFVBRVEsSUFBUDlrRCxXQUFPLE9BQVBBLE1BSEtzcUIsSUFHYyxXQUhsQnc2QjtNQUVFLFFBRU07SUEzYUQ7ZUFpYlRwd0UsT0FBT3NyQixFQUFFM2U7UUFDSCxJQUFKbFYsRUFBSSxZQUNSLFNBRElBLEVBRE9rVixHQUdYLFVBRklsVixFQURLNnpCLEdBR1QsT0FGSTd6QixDQUdIO1VBQ0NnVjtlQUNBN08sTUFBTW5HLEVBQUU2ekI7UUFHSixvQkFIRTd6QjtRQUdGLFVBR0YsSUFERzA3QixhQUNBLHVCQU5HN0gsRUFLSDZIO1FBREcsUUFFMEQ7ZUFHbEVtOUMsYUFBYTc0RSxFQUFFNnpCLEVBQUUzZTtRQUNuQixXQURlbFYsR0FFZixVQUZlQSxFQUFFNnpCLEdBRWpCLGdCQUZlN3pCLEVBQUlrVixFQUdQOzs7Z0JBbEJWM007Z0JBS0F5TTtnQkFDQTdPO2dCQTdCSml5RTtnQkFxQ0lOO2dCQUNBZTtnQkEzQ0pYO0lBclphO010RGxHcEIsSXNENmlCYS94RTtlQUNBNk8sS0FBTTh6QyxLQUFZcnJELEdBQUksdUJBQUpBLEVBQVk7OytCQUQ5QjBJLE1BQ0E2TztPQXZoQlY4ZjtPQUNBeUU7T0FDQTgxQjtPQUNBM2dDO09BQ0FnQjtPQUNBdGpCO09BQ0FvbEI7T0FDQXk5QjtPQUNBRTtPQUNBMS9CO09BQ0FydkI7T0FFQXN0RDtPQUVBeG5EO09BRUFzQztPQUNBc2xEO09BQ0FqOEM7T0FFQXk4QztPQUVBQztPQUVBaDhCO09BQ0E2OEI7T0FFQWdvQjtPQUNBUTs7ZUE2Zk1ydkUsT0FBTyttRCxJQUFLLDRCQUFMQSxHQUE0QjtlQUNuQzk4QixPQUFPNTVCO1FBQ0MsSUFBTm93QixJQUFNLFdBQ1YsV0FuZ0JKb21DLFlBa2dCUXBtQyxJQURLcHdCLEdBRVQsT0FESW93QixHQUVEOztjQUpEemdCO2NBemhCTnVzQjtjQUNBeUU7Y0FDQTgxQjtjQUNBM2dDO2NBQ0FnQjtjQUNBdGpCO2NBQ0FvbEI7Y0FDQXk5QjtjQUNBRTtjQUNBMS9CO2NBQ0FydkI7Y0FFQXN0RDtjQUVBeG5EO2NBRUFzQztjQUNBc2xEO2NBQ0FqOEM7Y0FFQXk4QztjQUVBQztjQUVBaDhCO2NBQ0E2OEI7Y0FpZ0JNNThCO2NBL2ZONGtEO2NBQ0FRO0lBK0NpQixTQXlkWGtCLGNBQVUsWUFBTTtJQXpkTCxTQTBkWEMsTUFBSW42RSxFQUFFaTFCLEVBQUUzZSxHQUFJLFNBQVJ0VyxLQUFhLGlCQUFYaTFCLEVBQUUzZSxTQUFTLFFBQWlCO0lBMWR2QixTQTRkWDhqRSxTQUFTbmxELEVBQUUvdEI7TUFDUCxvQkFET0E7TUFDUCxVQUNRLElBQVBySSxXQUFPLEdBQVBBLE1BRklvMkIsRUFFYTtNQUNqQixRQUFLO0lBL2RDLFNBaWVYb2xELFNBQU9yNkUsRUFBRWkxQjtVQUNFMzBCLEVBREpOLEtBQ01zTTtNQUNiO1dBRFdoTTtjQUdUa2xCLEVBSFNsbEIsS0FHSjBLLEVBSEkxSztVQUdHLFlBSkwyMEIsRUFJUHpQLElBQWlDLGtCQUh0QmxaLElBR050QixHQUE0QjtjQUh4QmlNLFNBQUUxSyxTQUdYaVosRUFIV2xaLEtBQUZoTSxNQUFFZ007O1FBRUwsU0FJQTtJQXhlRyxTQTBlWGd1RSxPQUFLdDZFLEVBQUVpMUI7TUFDVDtZQURPajFCO09BQ0QsOEJ0RDdrQmIsT3NEOGpCU282RSxTQWNPbmxEO01BQ0gsVUFDTSxJQUFML3RCLFdBQUssa0JBQUxBO01BQ0csUUFBSTtJQTdlRCxTQStlWHF6RSxTQUFPdjZFLEdBQUksZ0JBQUpBLEtBQWtCO0lBL2VkLFNBZ2ZYdzZFLFFBQU14NkUsR0FBSSxpQkFBTztJQWhmTixTQXlmYnk2RSxnQkFBNkIsMkJBQWU7SUF6Zi9CLFNBMmZiQyxTQUFVMXZFLEdBQXlDLHlCQUF6Q0EsSUFBNkQ7SUEzZjFELFNBNGZiMnZFLGNBQWUzdkUsR0FDVCx5QkFEU0EsSUFDZ0I7SUE3ZmxCLFNBOGZiNHZFLFNBQVU1dkUsRUFBbUJpcUIsR0FDL0IseUJBRFlqcUIsSUFBbUJpcUIsRUFDQTtJQS9maEIsU0FnZ0JiNGxELFdBQVk3dkUsR0FBMkIseUJBQTNCQSxJQUErQztJQWhnQjlDLFNBaWdCYjh2RSxXQUFZOXZFLEdBQTJCLHlCQUEzQkEsSUFBK0M7SUFqZ0I5QyxTQW1nQmIrdkUsU0FBVS92RSxHQUF5Qyx5QkFBekNBLElBQTZEO0lBbmdCMUQsU0FvZ0JiZ3dFLGNBQWVod0UsR0FDVCx5QkFEU0EsSUFDZ0I7SUFyZ0JsQixTQXNnQmJpd0UsU0FBVWp3RSxFQUFtQmlxQixHQUMvQix5QkFEWWpxQixJQUFtQmlxQixFQUNBO0lBdmdCaEIsU0F3Z0JiaW1ELFdBQVlsd0UsR0FBMkIseUJBQTNCQSxJQUErQztJQXhnQjlDLFNBeWdCYm13RSxXQUFZbndFLEdBQTJCLHlCQUEzQkEsSUFBK0M7SUF6Z0I5QyxTQTRnQmJvd0UsVUFBV2hqRSxHQUFpQkYsSUFDOUIseUJBRGFFLEtBQWlCRixPQUNIO0lBN2dCWixTQThnQmJtakUsVUFBV2pqRSxHQUFpQkYsSUFDOUIseUJBRGFFLEtBQWlCRixPQUNIO0lBL2dCWixTQWdoQmJvakUsV0FBWWxqRSxHQUFtQkYsSUFDakMseUJBRGNFLEtBQW1CRixPQUNOO0lBamhCWixTQW1oQmJxakUsV0FBVXZ3RSxHQUF3Qyx5QkFBeENBLEVBQTJEO0lBbmhCeEQsU0FvaEJid3dFLGdCQUFleHdFLEdBQ1QsMEJBRFNBLEVBQ2U7SUFyaEJqQixTQXNoQmJ5d0UsV0FBVXp3RSxFQUFtQnNMLEdBQy9CLDBCQURZdEwsRUFBbUJzTCxFQUNEO0lBdmhCZixTQXdoQmJvbEUsYUFBWTF3RSxHQUEyQiwwQkFBM0JBLEVBQThDO0lBeGhCN0MsU0F5aEJiMndFLGFBQVkzd0UsR0FBMkIsMEJBQTNCQSxFQUE4QztJQXpoQjdDLFNBMGhCYjR3RSxZQUFXeGpFLEdBQWdCRixJQUF3QiwwQkFBeENFLEdBQWdCRixHQUE4QztJQTFoQjVELFNBNGhCYjJqRSxPQUFLQyxLQUFLQyxLQUFLeG5EO01BQ1AsSUFBTndsRCxJQUFNO01BQ1YsV0FESUEsSUFEYXhsRDtNQUdqQixTQUZJd2xELElBREcrQjtNQUlQLFNBSEkvQixJQURRZ0M7TUFJWixPQUhJaEMsR0FLRDtJQWxpQlksU0FvaUJiaUMsUUFBTWpDLElBQUkrQixLQUFLQztNQUNYLG1CQURFaEM7TUFDRjtRQUVRLElBQVA5a0Q7UUFBTyxHQUFQQSxNQUhLNm1EO1VBSUkscUJBSlIvQjtVQUlRO1lBRUUsSUFBUGo5QyxlQUFPLE9BQVBBLFFBTk1pL0MsS0FNYyxXQU52QmhDO1VBS007UUFJRjtNQVBGLFFBT007SUE3aUJEO2VBcWpCVHB3RSxhQUFlMk07UUFDVCxJQURLMDVDLFlBQUhGLFlBQ0Y7UUFDUixXQURJMXVELEVBRGFrVjtRQUdqQixTQUZJbFYsRUFETTB1RDtRQUdLLFNBRlgxdUQsRUFEUzR1RDtRQUdFLE9BRlg1dUQ7ZUFJRmdWLEtBQUs4ekM7UUFDVztTQURGOEY7U0FBSEY7U0FDSyxzQkFEWDVGLEtBQVM4RjtRQUNoQix3QkFETzlGLEtBQU00RjtlQUVYdm9ELE1BQU1uRztRQUNGLElBRFE0dUQsWUFBSEYsWUFDTCxlQURFMXVELEdBQ1UsaUJBRFZBOztjQUdTNjZFLGdCQUFWQztVQUNtQixHQUFuQixpQkFKSXBzQixHQUdKb3NCLFNBQ21CLGlCQUpabHNCLEdBR0dpc0IsTUFFUjtVQUF3QjtRQUhUO2VBS3RCanlFLFFBQVE1STtRQUNKLG1CQURJQSxHQUNRLGlCQURSQTs7Y0FHTzR1RCxjQUFWRiw0QkFBVUU7UUFETyxRQUNlO2VBQ3JDaXFCLGFBQWE3NEUsUUFBVWtWO1lBQUowNUMsWUFBSEY7UUFDbEIsYUFEZTF1RDtRQUVmLFNBRmVBLEVBQUcwdUQ7UUFFSCxTQUZBMXVELEVBQU00dUQ7UUFFTixrQkFGQTV1RCxFQUFVa1Y7ZUFJdkJsTSxVQUFVaEo7UUFBSSxvQkFBSkEsR0FBSSxZQWxFbEIrNUUsV0FrRWMvNUUsT0FBZ0M7O2tCQXRCMUN1SSxPQUtBeU0sS0FFQTdPLE1BekNKZzBFLFdBZ0RJdnhFLFFBSUFpd0UsYUFJQTd2RTtJQTNrQlM7TXREbEdwQixJc0QyckJlN0M7ZUFDQTZPLEtBQU04ekMsS0FBWXJyRCxHQUFJLHdCQUFKQSxFQUFhO1VBTi9Cb1Asc0JBS0ExRyxNQUNBNk87ZUFMQW1PLE9BQU0ybEMsS0FBWXJyRCxHQUFJLHdCQUFKQSxFQUFhOzsrQkFEL0JvUCxRQUNBc1c7T0FocUJaMlI7T0FDQXlFO09BQ0E4MUI7T0FDQTNnQztPQUNBZ0I7T0FDQXRqQjtPQUNBb2xCO09BQ0F5OUI7T0FDQUU7T0FDQTEvQjtPQUNBcnZCO09BRUFzdEQ7T0FFQXhuRDtPQUVBc0M7T0FDQXNsRDtPQUNBajhDO09BRUF5OEM7T0FFQUM7T0FFQWg4QjtPQUNBNjhCO09BRUFnb0I7T0FDQVE7O2VBMm9CTXJ2RSxPQUFPK21ELElBQUssNEJBQUxBLEdBQTRCO2VBQ25DOThCLE9BQU81NUI7UUFDQyxJQUFOb3dCLElBQU0sV0FDVixXQWpwQkpvbUMsWUFncEJRcG1DLElBREtwd0IsR0FFVCxPQURJb3dCLEdBRUQ7O2NBSkR6Z0I7Y0F2cUJOdXNCO2NBQ0F5RTtjQUNBODFCO2NBQ0EzZ0M7Y0FDQWdCO2NBQ0F0akI7Y0FDQW9sQjtjQUNBeTlCO2NBQ0FFO2NBQ0ExL0I7Y0FDQXJ2QjtjQUVBc3REO2NBRUF4bkQ7Y0FFQXNDO2NBQ0FzbEQ7Y0FDQWo4QztjQUVBeThDO2NBRUFDO2NBRUFoOEI7Y0FDQTY4QjtjQStvQk01OEI7Y0E3b0JONGtEO2NBQ0FRO0lBK0NpQixTQXVtQlhtRCxjQUFVLFlBQU07SUF2bUJMLFNBd21CWEMsTUFBSXA4RSxFQUFFOHZELEdBQUdFLEdBQUcxNUM7TUFBSSxTQUFadFcsS0FBaUIsaUJBQWY4dkQsR0FBR0UsR0FBRzE1QyxTQUFTLFFBQXFCO0lBeG1CL0IsU0EwbUJYK2xFLFVBQVV2c0IsR0FBR0UsR0FBRzlvRDtNQUNaLG1CQURZQSxHQUNBLGlCQURBQTs7WUFFRnFSLGNBQVRDLHNCQUZLczNDLE1BRUl2M0MsT0FGRHkzQyxHQUVpQztNQUN6QyxRQUFLO0lBN21CQyxTQSttQlhzc0IsU0FBT3Q4RSxFQUFFOHZELEdBQUdFO1VBQ0QxdkQsRUFESk4sS0FDTXNNO01BQ2I7V0FEV2hNO2NBR1RrbEIsRUFIU2xsQixLQUdKMEssRUFISTFLO1VBR0csYUFKTHd2RCxHQUFHRSxHQUlWeHFDLElBQXNDLGtCQUgzQmxaLElBR050QixHQUFpQztjQUg3QmlNLFNBQUUxSyxTQUdYaVosRUFIV2xaLEtBQUZoTSxNQUFFZ007O1FBRUwsU0FJQTtJQXRuQkcsU0F3bkJYaXdFLE9BQUt2OEUsRUFBRTh2RCxHQUFHRTtNQUNaO1lBRE9od0Q7T0FDRCw4QnREM3RCYixPc0Q0c0JTcThFLFVBY092c0IsR0FBR0U7TUFDTixVQUNNLElBQUw5b0QsV0FBSyxrQkFBTEE7TUFDRyxRQUFJO0lBM25CRCxTQTZuQlhzMUUsU0FBT3g4RSxHQUFJLGdCQUFKQSxLQUFrQjtJQTduQmQsU0E4bkJYeThFLFFBQU16OEUsR0FBSSxpQkFBTztJQTluQk4sU0F1b0JiMDhFLFNBQU9sK0UsR0FBZ0IseUJBQWhCQSxFQUErQjtJQXZvQnpCLFNBd29CYm0rRSxTQUFRMW5ELEdBQXFCLHlCQUFyQkEsRUFBb0M7SUF4b0IvQixTQTBvQmIybkQsVUFBUzV4RSxFQUFjeE0sR0FBNkIseUJBQTNDd00sRUFBY3hNLEVBQWlEO0lBMW9CM0QsU0Eyb0JicStFLGVBQWM3eEUsRUFBY3hNLEdBQ3RCLHlCQURRd00sRUFBY3hNLEVBQ0c7SUE1b0JsQixTQTZvQmJzK0UsVUFBUzl4RSxFQUFjeE0sRUFBUXkyQixHQUNqQyx5QkFEV2pxQixFQUFjeE0sRUFBUXkyQixFQUNGO0lBOW9CaEIsU0Erb0JiOG5ELFlBQVcveEUsRUFBY3hNLEdBQWdCLHlCQUE5QndNLEVBQWN4TSxFQUFvQztJQS9vQmhELFNBZ3BCYncrRSxZQUFXaHlFLEVBQWN4TSxHQUFnQix5QkFBOUJ3TSxFQUFjeE0sRUFBb0M7SUFocEJoRCxTQWtwQmJ5K0UsV0FBVTdrRSxHQUFlOU4sR0FBUzROLEdBQWUzTixHQUFTaks7TUFDNUQseUJBRFk4WCxHQUFlOU4sR0FBUzROLEdBQWUzTixHQUFTakssRUFDL0I7SUFucEJkLFNBcXBCYjQ4RSxXQUFVbHlFLEdBQW1DLHlCQUFuQ0EsRUFBc0Q7SUFycEJuRCxTQXNwQmJteUUsZ0JBQWVueUUsR0FBbUMsMEJBQW5DQSxFQUEyRDtJQXRwQjdELFNBdXBCYm95RSxXQUFVcHlFLEVBQWNzTCxHQUFlLDBCQUE3QnRMLEVBQWNzTCxFQUE2QztJQXZwQnhELFNBd3BCYittRSxhQUFZcnlFLEdBQXNCLDBCQUF0QkEsRUFBeUM7SUF4cEJ4QyxTQXlwQmJzeUUsYUFBWXR5RSxHQUFzQiwwQkFBdEJBLEVBQXlDO0lBenBCeEMsU0EwcEJidXlFLFlBQVdubEUsR0FBY0YsSUFBc0IsMEJBQXBDRSxHQUFjRixHQUE0QztJQTFwQnhELFNBNHBCYnNsRSxPQUFLN0osS0FBS3AvQztNQUNaLE1BRE9vL0MsZ0JBRUcsYUFETnJ6RTtNQUVKLFdBREl5NUUsSUFGUXhsRDtNQUNaLElBRUEsS0FGSWowQixVQUVKOztZQUNBdEc7UUFBc0I7b0JBRmxCKy9FLElBRUovL0UsRUFBb0MsaUJBSjdCMjVFLEtBSVAzNUU7VUFBc0IsU0FBdEJBOzs7TUFDQSxPQUhJKy9FLEdBR0Q7SUFqcUJZLFNBbXFCYjBELFFBQU0xRCxJQUFJcEc7TUFDSixJQUFKcnpFLEVBQUksU0FEQXk1RTtNQUNBO1dBQUp6NUUsTUFEUXF6RSxnQkFHcUI7UUFDL0IsU0FIRXJ6RSxVQUdGOzs7VUFDRTtZQUFNLG9CQUxGeTVFLElBSU4vL0U7WUFDUSxXQUNJO1lBREosSUFFQ2k3QjtZQUFZLEdBQVpBLE1BQVksaUJBUFgwK0MsS0FJVjM1RSxVQUljO1lBSE4sU0FEUkE7OztpQkFNQSxXQVZNKy9FOzs7MERBV0ssb0JBQUk7SUE5cUJGO2VBb3JCVHB3RSxPQUFPc3JCLEVBQUUzZTtRQUNILElBQUpsVixFQUFJLFNBREM2ekI7UUFFVCxXQURJN3pCLEVBRE9rVjtRQUNILElBQ1IsS0FGUzJlLHFCQUVUOztjQUNBajdCO1VBQ0U7c0JBSEVvSCxFQUVKcEgsRUFDYyxpQkFKTGk3QixFQUdUajdCO1lBQ0UsU0FERkE7OztRQUdBLE9BTElvSCxDQUtIO2VBQ0NnVixLQUFLOHpDLEtBQUtqMUI7UUFDWixpQkFEWUEscUJBQ1o7O2NBQ0FqN0I7VUFDRTtxQkFGRXdyQixLQUVlLHNCQUhQeVAsRUFFWmo3QjtZQUNPLHdCQUhBa3dEO1lBR0wsU0FERmx3RDs7O1FBR0EsT0FKSXdyQixJQUlGO2VBQ0FqZSxNQUtzQm5HLEVBQUY2ekI7UUFKdEIsUUFJc0JBLGFBSFgsZUFHYTd6QjtRQUhiLEdBRFBXLFFBQ0FhLE1BQ2dCO1FBRnBCLElBSUUsSUFKRWIsWUFJc0IvSDtRQUN0QjtrQkFEc0JBO1lBR2Qsb0JBSFlvSCxFQUFFcEg7WUFHZDtjQUdGLGdCQUFXLHNCQU5DaTdCLEVBQUlqN0I7Y0FNYix3QkFEQTBqRixLQUVFLFFBUFcxakY7Y0FRWDtZQUpDO1VBSEUsU0FTTztlQUV2QmdRLFFBQVE1STtRQUNBLElBQU5XLElBQU0sU0FEQVg7UUFDQSxTQUFOVyxJQUNZO1FBRE4sVUFHRixVQUpFWDtRQUlGO1VBR0YsZ0JBU1EsaUJBZlZXLElBS0s0N0UsSUFVSyxJQWZWNTdFLFlBTWlCL0g7VUFDYjtvQkFEYUE7Y0FHTCxzQkFWTm9ILEVBT1dwSDtjQUdMO2dCQUdGLElBREcwakY7Z0JBQ0gsaUJBTktqOEUsRUFBRXpILFlBS0owakY7Z0JBQ0gsUUFOTzFqRjs7Y0FJRDtZQUhFLFVBREh5SDtRQUZQLFFBWVE7ZUFDbEJ3NEUsYUFBYTc0RSxFQUFFNnpCLEVBQUUzZTtRQUNuQixhQURlbFY7UUFDZixTQURpQjZ6QixxQkFDakI7O2NBQ0FqN0I7VUFDRTtzQkFIYW9ILEVBRWZwSCxFQUNjLGlCQUhHaTdCLEVBRWpCajdCO1lBQ0UsU0FERkE7OztRQUdBLGtCQUxlb0gsRUFBSWtWLEVBS1A7ZUFDVmxNLFVBQVVoSjtRQUdILGlCQUhHQSxXQUNJcEg7UUFDZDttQkFEY0E7VUFDZDs7O1lBQVUscUJBRkFvSCxFQUNJcEg7WUFDSixhQURJdUc7WUFDSjtVQURaLFlBRXNCOztrQkF6RHBCb0osT0FPQXlNLEtBTUE3TyxNQTVDSjIxRSxXQTZESWx6RSxRQWtCQWl3RSxhQU1BN3ZFO0lBMXVCUztNdERsR3BCLElzRHMxQmE3QztlQUNBNk8sS0FBTTh6QyxLQUFZcnJELEdBQUksdUJBQUpBLEVBQVk7OytCQUQ5QjBJLE1BQ0E2TztPQWgwQlY4ZjtPQUNBeUU7T0FDQTgxQjtPQUNBM2dDO09BQ0FnQjtPQUNBdGpCO09BQ0FvbEI7T0FDQXk5QjtPQUNBRTtPQUNBMS9CO09BQ0FydkI7T0FFQXN0RDtPQUVBeG5EO09BRUFzQztPQUNBc2xEO09BQ0FqOEM7T0FFQXk4QztPQUVBQztPQUVBaDhCO09BQ0E2OEI7T0FFQWdvQjtPQUNBUTs7ZUFzeUJNcnZFLE9BQU8rbUQsSUFBSyw0QkFBTEEsR0FBNEI7ZUFDbkM5OEIsT0FBTzU1QjtRQUNDLElBQU5vd0IsSUFBTSxXQUNWLFdBNXlCSm9tQyxZQTJ5QlFwbUMsSUFES3B3QixHQUVULE9BRElvd0IsR0FFRDs7Y0FKRHpnQjtjQWwwQk51c0I7Y0FDQXlFO2NBQ0E4MUI7Y0FDQTNnQztjQUNBZ0I7Y0FDQXRqQjtjQUNBb2xCO2NBQ0F5OUI7Y0FDQUU7Y0FDQTEvQjtjQUNBcnZCO2NBRUFzdEQ7Y0FFQXhuRDtjQUVBc0M7Y0FDQXNsRDtjQUNBajhDO2NBRUF5OEM7Y0FFQUM7Y0FFQWg4QjtjQUNBNjhCO2NBMHlCTTU4QjtjQXh5Qk40a0Q7Y0FDQVE7SUErQ2lCLFNBa3dCWDRFLGNBQVUsWUFBTTtJQWx3QkwsU0Ftd0JYQyxNQUFJNzlFLEVBQUVpMUIsRUFBRTNlLEdBQUksU0FBUnRXLEtBQWEsaUJBQVhpMUIsRUFBRTNlLFNBQVMsUUFBaUI7SUFud0J2QixTQXF3Qlh3bkUsWUFBVTdvRCxFQUFFL3RCO01BQ2Q7UUFDSyxZQUZTQSxPQUFGK3RCLGFBRXlCO1FBQ25DLFNBSFVBLHFCQUdWOzs7VUFDRTtZQUFNLG9CQUpJL3RCLEVBR1psTjtZQUNRO2NBQ1EsSUFBUDZFO2NBQVksR0FBWkEsTUFBWSxpQkFMWG8yQixFQUdWajdCOzs7O1k5QzFWQSxjOEM2VlM7O1FBSFQ7OzswREFNVyxvQkFBSztJQTl3QkwsU0FneEJYK2pGLFNBQU8vOUUsRUFBRWkxQjtVQUNFMzBCLEVBREpOLEtBQ01zTTtNQUNiO1dBRFdoTTtjQUdUa2xCLEVBSFNsbEIsS0FHSjBLLEVBSEkxSztVQUdHLGVBSkwyMEIsRUFJUHpQLElBQWtDLGtCQUh2QmxaLElBR050QixHQUE2QjtjQUh6QmlNLFNBQUUxSyxTQUdYaVosRUFIV2xaLEtBQUZoTSxNQUFFZ007O1FBRUwsU0FJQTtJQXZ4QkcsU0F5eEJYMHhFLE9BQUtoK0UsRUFBRWkxQjtNQUNUO1lBRE9qMUI7T0FDRCw4QnRENTNCYixPc0R1MkJTODlFLFlBb0JPN29EO01BQ0gsVUFDTSxJQUFML3RCLFdBQUssa0JBQUxBO01BQ0csUUFBSTtJQTV4QkQsU0E4eEJYKzJFLFVBQU9qK0UsR0FBSSxnQkFBSkEsS0FBa0I7SUE5eEJkLFNBK3hCWGsrRSxRQUFNbCtFLEdBQUksaUJBQU87SUEveEJOOzs7O1FBK1liaTVFO1FBZ0RJQztRQTdDSkM7UUFDQUM7UUFDQUM7UUFDQUM7UUFFQUM7UUFHQUM7UUFDQUM7UUFDQUM7UUFDQUM7UUFDQUM7UUFDQUM7UUFFQUM7UUFNQUU7OztXQWtERUUsT0FDQUMsTUFPQUUsU0FTQUMsT0FLQUMsU0FDQUM7O1FBU0ZDO1FBRUFDO1FBQ0FDO1FBRUFDO1FBRUFDO1FBQ0FDO1FBRUFDO1FBQ0FDO1FBRUFDO1FBRUFDO1FBQ0FDO1FBR0FDO1FBRUFDO1FBRUFDO1FBR0FDO1FBQ0FDO1FBRUFDO1FBRUFDO1FBQ0FDO1FBQ0FDO1FBRUFDO1FBUUFHOzs7V0FtRUVHLE9BQ0FDLE1BT0FFLFNBU0FDLE9BS0FDLFNBQ0FDOztRQVNGQztRQUdBRTtRQUNBQztRQUVBQztRQUVBQztRQUNBQztRQUVBQztRQUdBQztRQUNBQztRQUNBQztRQUNBQztRQUNBQztRQUNBQztRQUVBQztRQU9BQzs7O1dBK0ZFRyxPQUNBQyxNQWFBRSxTQVNBQyxPQUtBQyxVQUNBQzs7O1V0RGo0QlQ7O0lzRGtHb0I7YWhEOURmQyxpQkFBaUJDLFdBQVdsbEYsaUJBQWlCaUk7TUFVNUMscUJBVjRDQSxjQVcxQyxPQVh5QmpJO01BWXpCLDhCQVowQ2lJLGNBQzlCM0M7TUFDZjtnQkFEZUE7VUFFUCxjQUhTNC9FLFdBQTRCajlFLEtBQzlCM0MsSUFFZ0IsUUFGaEJBO1VBR1YsTUFIVUEsVUFJSitRLElBSkkvUTtVQUtmO29CQURXK1E7Y0FFSCxjQVBTNnVFLFdBQTRCajlFLEtBS2xDb087ZUFFb0IsYUFQY3BPLEtBS2xDb08sYUFBRWpDLElBQUZpQztjQUdOLFFBSE1BOztZQUNHLGFBTitCcE8sT0FLaENtTTtRQUhDLGFBRitCbk0sVUFZVDthQU1wQ2s5RSxnQkFBZ0JELFdBQVdsbEYsaUJBQWlCaUk7TUFjM0MscUJBZDJDQSxjQWV6QyxPQWZ3QmpJO01BZ0J4Qiw4QkFoQnlDaUksY0FDekIzQztNQUNuQjtnQkFEbUJBO1VBRVgsY0FIUTQvRSxXQUE0Qmo5RSxLQUN6QjNDLElBRVksUUFGWkE7Y0FJWitRLElBSlkvUTtVQUtuQjtvQkFETytRO2NBRUMsY0FQUTZ1RSxXQUE0Qmo5RSxLQUtyQ29PO29CQUlZK2tFLElBSlova0U7Z0JBS1A7MEJBRG1CK2tFO29CQUVYLGNBWFE4SixXQUE0Qmo5RSxLQVN6Qm16RTtzQkFFWSxRQUZaQTtvQkFHZCxhQVp1Q256RSxPQVN6Qm16RTtrQkFDTCxhQVY4Qm56RTtjQVF2QyxRQUhFb087O1lBQ08sT0FOYXJXO1FBRWIsYUFGOEJpSSxVQWdCSjthQTBCdENpOUUsV0FBVzEvRSxFQUFFMUUsR0FBSSw4QkFBTjBFLEVBQUUxRSxNQUFlO2FBQzVCc2tGLFlBQVk5L0U7TUFBSTtrQ0FBSkE7T0FBSSxxQkFBdUIsZ0JBQTNCQTtpQkFBdUM7YUFDbkQrL0UsWUFBWS8vRTtNQUNkLHFCQURjQTtNQUNkOztvQ0FEY0E7c0JBRTZCLHFCQUFoQixNQUZiQTtRQUVxQzs7cUNBRnJDQTt1QkFHNkIscUJBQWhCLE1BSGJBOzs7OztNQUdzQyxXQUFDO2FBQ25EZ2dGLGFBQWFyOUUsS0FBS3M5RSxNQUNwQixtQkFEb0JBLEtBQUx0OUUsS0FDbUI7YUFFaEN1OUUsZ0JBQWlCbmpFLE9BQU84dEM7TUFDMUI7bUNBRG1COXRDO09BQ25CLDRCQUQwQjh0QztNQUMxQixHQUFJaHVDLFNBQWlDc2pFO1FBRTNCLElBQUp0Z0YsRUFBSSxNQUhnQmdyRCxTQUNXczFCLFFBQWpDdGpFO1FBR0MseUJBRENoZCxFQUhha2Q7b0JBS1YsTUFMaUI4dEMsV0FDV3MxQixRQUFqQ3RqRTs7TUFRRixRQUFJOztNQUdGOzs7OztJQUNNLFNBNkpSdWpFLE1BblF1QmxnRjtNQUMzQiw0QkFEMkJBLEdBRW5CLFdBREo0QjtNQUVKLFNBRElOO01BREosSUFFQSxLQUZJTSxVQUVKOztZQUNBdEc7UUFDRTtVQUFHLDBCQUxzQjBFLEVBSTNCMUU7V0FFTyxXQUpIZ0csRUFGWTNHOztXQU9ULFNBTEgyRyxFQUtzQixnQkFQQ3RCLEVBSTNCMUU7VUFHK0IsU0FIL0JBOzs7TUFLQSxTQVBJZ0c7TUFPSixnQkFQSUE7SUFvR1EsU0E4SlI2K0UsY0E3SmNyeEQsSUFBSzNzQixNQUFPQyxPQUFRQyxPQUFPbWpEO01BQzNDLEdBRG9DbmpEO09BSVE7VUFKUkE7UUFJVyxnQkFKWEEsT0FBUkQsZ0JBTXFCLFVBQVEsTUFGbEI1Qzs7OztTQUpYNEM7T0FHZ0IsUUFIaEJBLGVBR2dCLFlBQU8sTUFBWmlnRDs7O01BQXJDO1NBSG1CbGdEO09BRXVCLFFBRnZCQSxjQUV1QixZQUFPLE1BQVptZ0Q7OztNQUNyQyxTQURBO01BREYsNEJBQWtCLE1BMkpoQjQ5QixTQTVKY3B4RCxJQUEyQjAyQixhQU1zQjtJQUNwRCxTQUFYNDZCO01OOUhQLE9Nb0NLWCxpQkE0REVDLFdBSEFsbEY7SUFrQ1UsU0FBVjZsRjtNTi9IUCxPTXNES1YsZ0JBMENFRCxXQUhBbGxGO0lBa0NVOzs7T0FuQ1ZEO09BQ0FDO09BQ0FDO09BQ0FDO09BQ0FnbEY7T0FDQUU7T0FDQUM7T0FJQUM7T0FHQUU7O09BMEtBRTtPQUNBQztPQXRKQUM7T0FDQUM7SUFBVSxTQVFWQyxhQUFXdGdGLEVBQUUxRTtNQUFZLHNCQUFkMEUsRUFBRTFFLEdBQVksWUFBSm9IO01BQUk7Ozt1QkFBSkE7aUJBQTJDO0lBUnRELFNBU1Y2OUUsY0FBWXpnRjtNQUNkO2tDQURjQTtPQUNkLHFCQUF3QixnQkFEVkE7Ozs7OEJBRWEsZ0JBRmJBOzs7OytCQUdhLGdCQUhiQTs7Ozs7aUJBRzBCO0lBWjVCLFNBYVYwZ0YsY0FBWTFnRjtNQUNkLHVCQURjQTtNQUNkOztvQ0FEY0E7c0JBRTZCLHFCQUFoQixNQUZiQTtRQUVxQzs7c0NBRnJDQTt3QkFHNkIscUJBQWhCLE1BSGJBO1VBR3NDOzt3Q0FIdENBOzBCQUk2QixxQkFBaEIsTUFKYkE7WUFJc0M7O3lDQUp0Q0E7MkJBSzZCLHFCQUFoQixNQUxiQTs7Ozs7Ozs7O01BS3VDLFdBQUM7SUFsQjFDLFNBbUJWMmdGLGVBQWFoK0UsS0FBS3M5RTtNQUNyQiwrQkFEcUJBLFNBQ3JCLHNCQURnQnQ5RTtNQUNoQjtPQUNTOzs7V0FGT0E7K0RBQUtzOUU7O1FBSU8sdUJBSlBBO2FBSUksa0JBQXhCLGtCQUZJLy9FOzs7TUFQSixXQVN1RDtJQXZCM0MsU0F5QlYwZ0Ysa0JBQWlCN2pFLE9BQU84dEM7TUFDMUI7bUNBRG1COXRDO09BQ25CLDRCQUQwQjh0QztNQUMxQixHQUFJaHVDLFNBQWlDc2pFO1FBRTNCO2lCQUhnQnQxQixTQUNXczFCLFFBQWpDdGpFO1NBRzRCLHVCQUpiRTtRQUlVLHlCQUF4QixrQkFEQ2xkO29CQUVHLE1BTGlCZ3JELFdBQ1dzMUIsUUFBakN0akU7O01BUUYsUUFBSTtJQWxDTTtNQXNDUixtQ0FERmdrRTs7Ozs7YUFFQUMsUUFBTTVnRjtNQUNSLDRCQURRQSxHQUVBLFdBREo0QjtNQUVKLFNBRElOO01BQ0osU0FpQkl1L0UsT0FBTy9nRjtRQUFJO2NBQUpBO2NBQUk4UDtVQUFtQjtxQkFsQjlCdE87WUFrQjhCLFNBQW5Cc087ZUFBSjlQLE1BQUk4UDs7UUFuQmYsUUFtQjhEO01BakI5RCxTQUNRa3hFLGVBQUt4bEY7UU4xS2xCLElNMEtrQnVHO1FBQ1g7YUFEV0EsUUFIVEQsRUFJWSxnQkFIWk47VUFJSSxJQUdKb0IsRUFISSxnQkFOQTFDLEVBSUs2QjtVQUVMLFVBR0phO1lBRlE7OztxQkFHUnErRSx1QkFOU2wvRTswQ0FNVGsvRSxnQkFOU2wvRTtvQkFLVGE7WUFEUTs7O3FCQUVScStFLHVCQU5TbC9FOzBDQU1Uay9FLGdCQU5TbC9FO1VBS0QsU0FQUlAsRUFPQW9CO1VBSEksSUFHSSxJQUxDYjttQkFLK0I7TUFONUMsU0FPSWsvRSxnQkFBUWpoRixFQUFFeEU7WUFBRnNWLE1BQUUvTztRQUNaO2FBRFlBLFFBVFZELEdBV0EsU0FWQU4sTUFVQSxjQUZRc1A7VUFLRiwwQkFmRjVRLEVBVU02QjtVQUtKO1lBQ0ksWUFORitPO1lBTWtCLFNBZDFCdFA7WUFjMEIsU0FOaEJPO1lBTWdCO21EQVp0QmkvRTs7O1lBYU0sUUFQQWovRSxZQU9BLElBUEYrTyxvQkFBRS9PO1VBUUEsT0FSRitPO1VBUUU7aURBZE5rd0UsaUJBTU1qL0U7d0NBTk5pL0UsVUFNTWovRSxNQVNUO01BaEJMLFNBQ1FxaUQsS0FBSzVvRCxHTjFLbEIsdUJNMEthd2xGLFNBQUt4bEY7TUFrQmI7c0JBcEJJZ0csRUFxQmE7YUFnQ2YwL0UsbUJBQW1CeGhGO01BQ1EsS0FBMUIsV0FEa0JBLFdBQ1EsV0FEUkE7T0FHYixrQkFIYUEsTUFJWixnQkFKWUE7TUFFVixtREFGVUEsR0FNbEI7YUFJRHloRixnQkFBY255RCxJQUFLM3NCLE1BQU9DLE9BQVFDLE9BQU9takQ7TUFDM0MsR0FEb0NuakQ7T0FTQTtVQVRBQTtRQVNHO29CQVRIQSxPQUFSRDs7V0FXYSxZQUFRLG1CQUhWNUM7Ozs7O1NBUlg0QztPQU9nQixRQVBoQkEsZUFPZ0IsWUFBTyxtQkFBWmlnRDs7OztTQVBsQmxnRDtPQU11QixRQU52QkEsY0FNdUIsWUFBTyxtQkFBWm1nRDs7O01BRDNCOzBCQUFtQixNQXRFN0JzK0IsUUFpRXlDcDdCO09BcEJuQyxXQUFSLHNCQURZeGxEOztNQUVaO2lCQUNPMEM7VU5yTlo7VU1zTlMsU0FER0E7Ozs7Ozs7Ozs7Ozs7VUUyVEgsaUJGeFRJLFNBTEpwQixNQUtJLFNBTEpBLEVBRUdvQixJQUtDLFNBUEpwQixFQUVHb0IsRUFLb0I7UUFSZjFDO01BMEJBLHVCQXhCWixTQURJc0I7TUF1QkYseURBSGN3dEIsWUFhZjthQU9Db3lELGVBQWVsaEY7TUFMakIsb0NBS2lCQTtNQUxqQjtRQUlrQywwQkFDakJBO1FBTEQ7Ozs7UUFJa0IsSUVzUjlCLG1DRnRSdUMsZ0JBQzFCQTs7OztRQUVPLGVBRlBBLElBRVosc0JBRllBO1FBRVgsZ0JBRldBO01BR1osa0JBSFlBLEVBR0w7YUFDVm1oRixVQUFRbmhGO01BQ1U7NEJBRFZBO09BQ1U7O09BQ1Ysb0JBMUhSc2dGLGFBSEF6bEYsbUJBNEhVdW1GO01BQ0YsV0FETEMsTUFDREMsSUFDTzthQUNUQyxXQUFTdmhGO01BQ1UseUJBRFZBLEdBQ1U7OEJBN0huQnNnRixhQUhBemxGLG1CQWdJV3VtRixLQUNvQzs7OztPQWxJL0N4bUY7T0FDQUM7T0FDQUM7T0FDQUM7T0FDQXVsRjtPQUNBQztPQUlBQztPQU1BQztPQU1BQztPQVlBQztPQUVBQztPQWlFQUs7T0E0QkFNO09BSkFKO0lBc0JXLFNBQVhLO01OclJQLE9Nb0NLL0IsaUJBbUdFYSxhQW1JQXJsRjtJQVlVLFNBQVZ3bUY7TU50UlAsT01zREs5QixnQkFpRkVXLGFBbUlBcmxGO0lBWVU7OztPQWJWRDtPQUNBQztPQUNBQztPQUNBQztPQXJJQW1sRjtPQUNBQztPQUlBQztPQU1BQztPQU1BQzs7T0EySEFSO09BQ0FDO09BQ0FxQjtPQUNBQztLQUFVOzs7O0tBN01kQztLQUNBQztLQUNBQztLQUNBQztLQUNBQztLQUNBQztLQUNBQztLQUNBQztLQUNBQztLQUNBQztLQUNBQztLQUNBQztLQUdBQztLQUNBQzthQXlNRUMsU0FBT25DLFFBQVExMUI7TUFDakIsSUFBSS9vRCxFQUFKLHNCQURTeStFO01BRUcsU0FEUnorRSxPQUNRLGFBRkh5K0UsUUFDTHorRTtPQUdXLFdBSk55K0UsUUFJTSxJQXpOZndCLFVBcU5pQmwzQjtNQUdaLFdBSEkwMUIsUUFBUTExQixTQUlnQjthQUUvQjgzQixZQUFZaGdGLEtBQUtzOUU7TUFDaEIsc0JBRFd0OUUsS0FBS3M5RTtlQUVkO2lCQUZTdDlFOztpQkFFVCxzQkFGU0EsUUFFVCxzQkFGY3M5RTtlQUdkLHFDQUFrQzthQUVyQzJDLGNBQWNqZ0Y7TUFDaEIsOEJBRGdCQSxjQU1HeWE7TUFDakI7UUFBWSxRQURLQSxTQUNMLGFBUEV6YSxLQU1HeWE7VUFFVCwwQkFSTXphLEtBTUd5YTtZQUVXLFFBRlhBLFlBTEY1aEI7WUFDZjtjQUFZLFFBREdBLE9BQ0gsYUFGRW1ILEtBQ0NuSDtnQkFFUCwwQkFITW1ILEtBQ0NuSDtrQkFFYSxRQUZiQTtnQkFHViw2QkFKU21ILFFBTUd5YTtjQUprQjtVQU85QixRQUhZQTs7UUFDa0IsU0FJRjthQUVqQ3lsRSxVQUFVbGdGO01BQ0osSUFBSmIsRUFBSSxjQURJYTtNQUNKLGFBQUpiLFVBQ2tCLE1BRlZhLEtBRVUsc0JBRlZBLFFBQ1JiLFFBQzREO2FBRTlEZ2hGLGVBQWVuZ0Y7TUFDVCxJQUFKYixFQUFJLGNBRFNhO01BQ1QsYUFBSmI7ZUFDVTtlQUNULE1BSFlhLE9BR1osc0JBSFlBLFFBQ2JiLE1BRTJDO2FBRTdDaWhGLGlCQUFpQnBnRjtNQUNYLElBQUpiLEVBQUksY0FEV2E7TUFDWCxhQUFKYixFQURlYSxLQUVLLE1BRkxBLE9BRUssc0JBRkxBLFFBQ2ZiLE1BQzhEO1FBS2hFa2hGLDJCTnpVTDthTTJVS0MsZUFBZUMsU0FBU3RtRSxPQUFPRztNQUNqQzt5QkFIRWltRTtPQUdGO3FCQUhFQSx1QmM5U0EvMkUsaUJkOFNBKzJFO09BR1E7TUFDTSxnQkFGQ0UsU0FFRCx5QkFGVXRtRSxPQUN0QnVtRSxJQUQ2QnBtRSxRQUU0QjtRQUczRHFtRSx5QkE5UEZmO2FBZ1FFZ0Isa0JBQWtCbmpGLEdBQUksMkJBQUpBLEVBQUksUUFBMEI7YUFDaERvakYseUJBQXVCLE9BSHZCRix3QkFHNkM7YUFFN0NHLFVBQVl2M0QsSUFBbUNwUCxPQUFPRztNQUN4RCxHQURjaVA7T0FBVyxRQUFYQSxnQkFBV0M7O1dBQVhpM0QsU0FMWkU7TUFNRixTQUFRSSxTQUFTbmtGO1FOdFZwQixJTXNWb0I0OUM7UUFDZjtVQUFXLElBQVB0NkMsS0FBTyxlQUZDdWdGLFNBQW1DdG1FLE9BQU9HO1VBRTNDO1lBRTRELHVCQUEzRCxjQUZScGE7Z0JBSUMrRjs7O2NBQ0gsV0FOYXUwQyxVQU1XLE1BRHJCdjBDO2NBQ2tDLGNBTnhCdTBDOztrQkFLVnYwQyxHQUN3RDtNQU4vRCxrQkFPYTthQUVYZzdFLGVBQWlCMTNELGNBQ21DcFAsT0FBT0c7TUFDN0QsR0FGbUJpUCxJQUFPLFFBQVBBLFlBQU9DLGFBQVB4cEI7TUFFbkIsUUFGaUQsa0JBQVJtaEYsTUFBUUQsZUFBUkM7TUFFekM7T0FEOEIsa0JBQVhWLFNBQVdXOztXQUFYWCxTQWhCakJFO01BaUJGLFNBQVFJLFNBQVNua0Y7UU5qV3BCLElNaVdvQjQ5QztRQUNmO1VBQVcsSUFBUHQ2QyxLQUFPLGVBRk11Z0YsU0FBbUN0bUUsT0FBT0c7VUFFaEQ7WUFHUixZQUhDcGEsS0FHRCx3QkFOY0YsUUFBc0JtaEYsTUFHbkNqaEY7O2dCQUlDK0Y7OztjQUNILFdBTmF1MEMsVUFNVyxNQURyQnYwQztjQUNrQyxjQU54QnUwQzs7a0JBS1Z2MEMsR0FDd0Q7TUFOL0Qsa0JBT2E7Ozs7T0E5UmJtNUU7T0FDQUM7T0FDQUM7T0FxTkVXO09Bbk5GVDtPQUNBQztPQUNBQztPQXVORVE7T0F0TkZQO09Bd09FUztPQVNBRTtPQUxBRDtPQXRPRk47T0FDQUM7T0FmQWI7T0E0UUUyQjtPQVVBRztPQVpBSjtPQURBRDtPQWhRRmhCO09BQ0FDO09BQ0FDOzthQzVERXVCLE1BQUl6akYsRUFBRUMsR0FBVyxZQUFiRCxPQUFFQyxLQUFGRCxPQUFFQyxLQUE0QzthQUVsRHlqRixNQUFJMWpGLEVBQUVDLEdBQVcsWUFBYkQsT0FBRUMsS0FBRkQsT0FBRUMsS0FBNEM7YUFFbEQwakYsSUFBSTNqRixHQUFjLGNBQWRBLFlBQWtDO2FBRXRDNGpGLEtBQUs1akYsR0FBeUIsWUFBekJBLFlBQStCO2FBRXBDNmpGLElBQUk3akYsRUFBRUM7TUFBdUIsWUFBekJELE9BQUVDLE9BQUZELE9BQUVDLEtBQUZELE9BQUVDLE9BQUZELE9BQUVDLEtBQ3lDO2FBRS9DNmpGLElBQUk5akYsRUFBRUM7TUFDSyxHQUFrQixTQUR2QkEsU0FDSyxTQURMQTtRQUVFLE1BRkZBLFlBR0UsRUFIRkEsT0FFRlQsSUFGRVM7UUFJb0IsYUFKdEJELE9BRUFSLElBRkFRLFFBR0F5WCxHQUhBelgsT0FFQVIsSUFGQVEsUUFHQXlYO01BSUksUUFQRnhYLFlBUUUsSUFSRkEsT0FPRjJ4QixNQVBFM3hCO01BU29CLGFBRnRCMnhCLE1BUEE1eEIsZUFRQWlrQixLQURBMk4sTUFQQTV4QixlQVFBaWtCLElBRTZCO2FBRWpDOC9ELElBQUkvakYsR0FBSSxXQTFCUjlFLE1BMEJJOEUsRUFBYTthQUVqQmdrRixNQUFNaGtGLEdBQWdCLE9BQWhCQSx5QkFBZ0M7YUFFdENpa0YsS0FBS2prRjtNQUVXLGVBRlhBLE1BRWtDLFdBRmxDQTtNQUVrQyxHQUFyQ1IsUUFDWSxPQURXckU7TUFFdEIsR0FGc0JBLFFBRU4sT0FGakJxRTtNQUdDLEdBSHNCckUsS0FBdkJxRSxHQUlNLElBQUowcEIsRUFKcUIvdEIsSUFBdkJxRSxFQUlnQixPQUpoQkEsSUFJd0MsZUFBdEMwcEI7TUFKWSxJQU1aZzdELElBTkYxa0YsSUFBdUJyRTtNQU1QLE9BTk9BLElBTWlCLGVBQXRDK29GLFVBQXNDO2FBRTFDdDFELElBQUk1dUIsR0FBVSxrQkFBVkEsVUFBbUI7YUFFdkJta0YsTUFBTXhrRixFQUFFaUQsR0FBZ0IsWUFBTCxTQUFYQSxLQUFGakQsRUFBOEIsU0FBNUJpRCxLQUFGakQsRUFBMEM7YUFFaER5a0YsS0FBS3BrRjtNUGpFVixHT2lFVUEseUJBQzBCO01BRWIsZUFIYkEsTUFHb0MsV0FIcENBO01BR29DLEdBQWQ3RSxLQUF2QnFFO09BR1E7VUFIZXJFLElBQXZCcUU7UUFDQStxQyxFQUdBLFVBSkEvcUMsS0FJb0Qsc0JBQUYsZUFEOUMwcEI7O09BR0k7WUFOUjFwQixJQUF1QnJFO1FBQ3ZCb3ZDLEVBTUEsVUFQdUJwdkMsS0FPMkIsaUJBRDlDK29GLE1BQzRDLGVBRDVDQTtNQUdSLFNBWktsa0YsS0FhMkIsWUFUNUJ1cUMsUUFKQ3ZxQyxPQUlEdXFDO01BRGMsSUFDZDg1QyxVQUpDcmtGLEtBSUR1cUM7TUFVZ0Isa0JBWE9wdkMsSUFDdkJvdkMsTUFXSDthQUVEKzVDLElBQUl0a0Y7TUFDTSxJQUFScUksRUFBUSxTQUROckksTUFDcUIsWUFBdkJxSSxJQUFnQyxTQUQ5QnJJLE1BQ0ZxSSxJQUFvRCxTQURsRHJJLE1BQ3dEO2FBRTVEdWtGLElBQUl2a0Y7TUFBb0Msb0JBQXBDQSxXQUF1QixxQkFBUixLQUFmQSxTQUErQzthQUVuRHdrRixJQUFJeGtGLEVBQUVDLEdBQVEsZUFBUkEsRUFBZSxJQUFqQkQsSUFBeUI7Ozs7T0FuRTdCL0U7T0FDQUM7T0FDQUM7T0FNQXdvRjtPQUVBQztPQU5BSDtPQUVBQztPQU1BRztPQWVBRTtPQVpBRDtPQThCQU07T0FoQkFKO09BRUFDO09BVUFyMUQ7T0FFQXUxRDtPQW1CQUc7T0FHQUM7T0FFQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09POURBeHNFOzs7T0FFQUU7T0FFQW5XO09BSUFEO09BSUFxVztPQVFBRztPQWVBTTs7T0FQQS9XO09BRUkwVzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztLeUNJSmtzRTtLQUNBQztLQUNBQztLQUNBQztLQUNBQztLQUNBQztLQUNBQztLQUNBQztLQUNBQztLQUNBQztLQUNBQztLQUNBQztLQUNBdC9CO2FBRUF1L0I7O2VBQ1c7ZUFDQTtlQUNJO2VBQ0U7ZUFDRDtlQUNFO2VBQ1Q7ZUFDQTtlQUNGO2VBQ007Z0JBQ0E7Z0JBQ0E7Z0JBQ0wsU0FBQztRQUtUQyxXQUNBQzthQVdNQyxNQUFNcFUsSUFBSXFVLElBQUlwbUYsRUFBRXFtRixJQUFJeGxGO01BQzFCLEdBRHNCd2xGLFFBQU5EO09BQ2UsMkJBRG5CclUsSUFBSXFVLElBQzJCLFdBRHZCcG1GLEVBQUpvbUY7TUFFTywwQkFGR3ZsRixJQUFKd2xGLHNCQUVqQjtNQUFrQjtZQUFsQmoyRTtRQUNFOzJCQUhTZzJFLElBQU1DLGdCQUVqQmoyRTtVQUVFLE1BSksyaEUsSUFBSXFVLElBQUlwbUYsRUFBRXFtRixZQUFJeGxGO1VBSW5CLFNBRkZ1UDs7O2NBR0k7YUFDSGsyRSxNQUFNdlUsSUFBSXFVLElBQUlwbUYsRUFBRXFtRixJQUFJeGxGO01BQzFCLFFBRHNCd2xGO1FBRUosMEJBRlF4bEYsSUFBSndsRixjQUVqQjtRQUFhO2NBQWJqMkU7VUFDRTs2QkFIU2cyRSxJQUFNQyxnQkFFakJqMkU7WUFFRSxNQUpLMmhFLElBQUlxVSxJQUFJcG1GLEVBQUVxbUYsWUFBSXhsRjtZQUluQixTQUZGdVA7Ozs7TUFEVywyQkFESjJoRSxJQUFJcVUsSUFDWSxXQURScG1GLEVBQUpvbUYsS0FLUDthQUNQRyxPQUFjbm5DLEtBQU1vbkMsT0FBbUJDLEtBQUt6bUY7TUFDcEMsdUJBRE1vL0MsS0FBTW9uQyxPQUFtQkMsTUFDL0IsS0FEK0JBO01BQy9CLGFBR1JDO2VBSEUzVTtlQURrQnlVO2tCQUtJLE1BSnRCelUsSUFJZ0MsZUFEbEMyVSxRQUo0QzFtRixFQUk1QzBtRixhQUp1Q0QsTUFDckMxVTtrQkFHZ0IsTUFIaEJBLElBRzBCLGVBQTVCMlUsUUFKNEMxbUYsSUFBTHltRixNQUNyQzFVLElBS3lCO2FBSTNCMFUsS0FBS2xqRjtNQUNDLHVCQUREQSxHQUVDLGlCQURKakQsS0FDSSxLQURKQSxVQUNJOztZQUNSeEU7UUFBb0I7VUFBUyw2QkFIdEJ5SCxFQUdQekg7VUFBb0IsaUJBRGhCc2MsRUFDSnRjO1VBQTZCLFNBQTdCQTs7O01BQ0EsT0FGSXNjLENBRUg7YUFPQ3V1RSxjQUFjNVU7TUFDa0IsZ0NBQXlCLEtBRDNDQTtNQUNoQixtQ0FBb0IsYUFESkEsV0FDc0Q7YUFvQnBFNlUsU0FBT3huQyxLQUFLb25DLFFBQ2Qsc0JBRFNwbkMsS0FBS29uQyxXQUNrQjthQUM5QkssTUFBSTlVLEtBQU0sbUNBQU5BLFFBQTJCO2FBQy9CK1UsTUFBSS9VO01BQU07NEJ2RGhLakIsMkJ1RGdLV0EsZUFBMkI7YUFPL0JnVixnQkFBY2hWO01BQXlCLHVDQUF6QkEsS0FBbUM7YUFLakRpVixTQUFTNW5DLEtBQUtvbkMsT0FBT3RtRjtNQUNmLElBQUpxRCxFQUFJLFNBREc2N0MsS0FBS29uQyxRQUVoQixpQkFESWpqRixHQURtQnJELEdBRXZCLE9BRElxRCxDQUVIO2FBTUMwakYsU0FBTzduQyxLQUFLb25DLE9BQU9VO01BQ3JCLHNCQURTOW5DLEtBQUtvbkMsVUFBT1UsS0FDYzthQWFqQ0MsZ0JBQWNwVjtNQUNrQix1QkFEbEJBO01BQ2hCLG1DQUFvQixhQURKQSxXQUMyQjthQUd6Q3FWLE1BQWdCN2pGLEVBQTBCakQ7TUFDdEMsaUNBRFlpRDtNQUNaLGFBRWUsY0FISEEsS0FBMEJqRCxJQUU3QixjQUZHaUQsS0FBMEJqRCxHQUc0QjthQU90RSttRixPQUFjam9DLEtBQU1vbkMsT0FBbUJVLElBQUlsbkY7TUFDbkMsSUFISyt4RSxJQUdMLFNBRE0zeUIsS0FBTW9uQyxPQUFtQlU7TUFDL0IsR0FEWVY7UUFEdEI7Y0FDeUNVO2NBRHpDN2tGO1VBQW9COzBCQURMMHZFLElBQ2YxdkUsSUFBcUMsV0FDUXJDLEVBRDdDcUM7WUFBb0IsU0FBcEJBO2VBQ3lDNmtGLFFBRHpDN2tGOztlQURlMHZFO01BR0wsSUFKVixLQUd5Q21WLFlBSHpDOzs7UUFBeUI7d0JBQ1ZuVixJQURmajJFLEVBQTBDLFdBR0drRSxFQUg3Q2xFO1VBQXlCLFNBQXpCQTs7O2FBQ2VpMkUsR0FNZ0M7YUFDN0N1VixTQUFrQmxvQyxLQUFNb25DLE9BQWtCbndEO01BQ25DO21CQURXK29CLEtBQU1vbkMsT0FBa0Jud0Q7T0FDbkMsSUFEaUJtd0Q7T0FPMUIsS0FQNENud0Q7T0FPNUM7OztRQUFzQzt3QkFObENreEQsR0FNSnpyRixJQUxJOEgsUUFLMEQsaUJBUGxCeXlCLEtBTzVDdjZCO1VBQXNDLFNBQXRDQTs7O01BQ0EsT0FQSXlyRixFQU9GO2FBS0FDLFVBQU9wb0MsS0FBS29uQyxPQUFPaUIsS0FBS0M7TUFDMUIsc0JBRFN0b0MsS0FBS29uQyxVQUFPaUIsS0FBS0MsTUFDZ0I7YUFleENDLGdCQUFjNVY7TUFDK0IsdUJBRC9CQSxLQUNrQixtQkFEbEJBO01BQ2hCOzJDQUFvQixhQURKQSxpQkFDeUM7YUFPdkQ2VixXQUFXcmtGLEVBQUVqRCxHQUFJLHFCQUFOaUQsS0FBRWpELEdBQStCO2FBQzVDdW5GLFlBQVl0a0YsRUFBRWpELEdBQUkscUJBQU5pRCxLQUFFakQsR0FBZ0M7YUFlOUN3bkYsT0FBYzFvQyxLQUFNb25DLE9BQW1CaUIsS0FBS0MsS0FBSzFuRjtNQUN6QyxJQVBLK3hFLElBT0wsVUFETTN5QixLQUFNb25DLE9BQW1CaUIsS0FBS0M7TUFDcEMsR0FEWWxCO1FBTHRCO2NBSzhDa0I7Y0FMOUN4akQ7VUFDRTs7a0JBSXVDdWpEO2tCQUp2Q3BsRjtjQUNFOzhCQUhXMHZFLElBRWIxdkUsSUFERjZoQyxJQUV1QixXQUc0QmxrQyxFQUpqRHFDLElBREY2aEM7Z0JBRUksU0FERjdoQzttQkFJdUNvbEYsU0FKdkNwbEY7O3FCQURGNmhDO2VBSzhDd2pELFNBTDlDeGpEOztlQURlNnRDO01BT0wsSUFaVixLQVd5QzBWLGFBWHpDOzs7UUFDRTttQkFVNENDLGFBVjVDOzs7WUFDRTs0QkFHVzNWLElBTGZqMkUsRUFDRXNVLEVBQ3FCLFdBUzRCcFEsRUFYbkRsRSxFQUNFc1U7Y0FDRSxTQURGQTs7O21CQURGdFU7OzthQUtlaTJFLEdBVXNDO2FBQ25EZ1csV0FBa0Izb0MsS0FBTW9uQyxPQUFrQm53RDtNQUM1QztZQUQ0Q0E7T0FDNUMsV0FBSW94RCxPQUM0QyxpQkFGSnB4RDtPQUduQyxhQUhXK29CLEtBQU1vbkMsT0FDdEJpQixLQUNBQztPQUNLLElBSGlCbEI7T0FTMUIsS0FSSWlCO09BUUo7OztRQUNFO1VBQVUsSUFBTk8sSUFBTSxpQkFWZ0MzeEQsS0FTNUN2NkI7VUFDWSxHQUFOa3NGLG1CQVJGTjtXQVVBO1VBRlEsSUFFcUQsS0FWN0RBLGFBVTZEOztnQkFDL0R0M0U7WUFDRTs7Z0JBWEFtM0UsR0FNSnpyRixJQUxJOEgsUUFTRndNLElBVEV4TSxRQVVrQyxpQkFKaENva0YsSUFHSjUzRTtjQUNFLFNBREZBOzs7VUFIVSxTQURadFU7OztNQVFBLE9BZEl5ckYsRUFjRjthQUtBVSxVQUFPN29DLEtBQUtvbkMsT0FBT2lCLEtBQUtDLEtBQUtRO01BQy9CLHNCQURTOW9DLEtBQUtvbkMsVUFBT2lCLEtBQUtDLEtBQUtRLE1BQ2lCO2FBaUI5Q0MsZ0JBQWNwVztNQUM0QztrQ0FENUNBO09BQytCLG1CQUQvQkE7T0FDa0IsbUJBRGxCQTtNQUNoQjs7NkNBQW9CLGFBREpBO29CQUNzRDthQU9wRXFXLGFBQWE3a0YsRUFBRWpELEVBQUVtcEIsR0FBSSxxQkFBUmxtQixLQUFFakQsRUFBRW1wQixHQUFrQzthQUNuRDQrRCxjQUFjOWtGLEVBQUVqRCxFQUFFbXBCLEdBQUkscUJBQVJsbUIsS0FBRWpELEVBQUVtcEIsR0FBbUM7YUFDckQ2K0QsYUFBYS9rRixFQUFFakQsR0FBSSxxQkFBTmlELEtBQUVqRCxHQUErQjthQUM5Q2lvRixjQUFjaGxGLEVBQUVqRCxHQUFJLHFCQUFOaUQsS0FBRWpELEdBQWdDO2FBbUJoRGtvRixPQUFjcHBDLEtBQU1vbkMsT0FBbUJpQixLQUFLQyxLQUFLUSxLQUFLbG9GO01BQzlDLElBVEsreEUsSUFTTCxVQURNM3lCLEtBQU1vbkMsT0FBbUJpQixLQUFLQyxLQUFLUTtNQUN6QyxHQURZMUI7UUFQdEI7Y0FPbUQwQjtjQVBuRHRwRDtVQUNFOztrQkFNNEM4b0Q7a0JBTjVDeGpEO2NBQ0U7O3NCQUtxQ3VqRDtzQkFMckNwbEY7a0JBQ0U7a0NBSlMwdkUsSUFHWDF2RSxJQURGNmhDLElBREZ0RixJQUcyQixXQUk2QjUrQixFQUxwRHFDLElBREY2aEMsSUFERnRGO29CQUdNLFNBREZ2OEI7dUJBS3FDb2xGLFNBTHJDcGxGOzt5QkFERjZoQzttQkFNNEN3akQsU0FONUN4akQ7O3FCQURGdEY7ZUFPbURzcEQsU0FQbkR0cEQ7O2VBRGVtekM7TUFTTCxJQWhCVixLQWV5QzBWLGFBZnpDOzs7UUFDRTttQkFjNENDLGFBZDVDOzs7WUFDRTt1QkFhK0NRLGFBYi9DOzs7Z0JBQ0U7Z0NBSVNuVyxJQVBmajJFLEVBQ0VzVSxFQUNFMm1CLEVBQ3VCLFdBWTZCLzJCLEVBZnhEbEUsRUFDRXNVLEVBQ0UybUI7a0JBQ0UsU0FERkE7Ozt1QkFERjNtQjs7O21CQURGdFU7OzthQU9laTJFLEdBWTJDO2FBQ3hEMFcsV0FBa0JycEMsS0FBTW9uQyxPQUFrQm53RDtNQUM1QztZQUQ0Q0E7T0FDNUMsV0FBSW94RCxPQUM0QyxpQkFGSnB4RDtPQUc1QztjQURJcXhEOztVQUNvRCxpQkFBUixpQkFISnJ4RDtPQUluQyxhQUpXK29CLEtBQU1vbkMsT0FDdEJpQixLQUNBQyxLQUNBUTtPQUNLLElBSmlCMUI7T0FVMUIsS0FUSWlCO09BU0o7OztRQUNFO1VBQVUsSUFBTk8sSUFBTSxpQkFYZ0MzeEQsS0FVNUN2NkI7VUFDWSxHQUFOa3NGLG1CQVRGTjtXQVdBO1VBRlEsSUFFK0MsS0FYdkRBLGFBV3VEOztnQkFDekR0M0U7WUFDRTtjQUFVLElBQU5pMkUsSUFBTSxpQkFKUjJCLElBR0o1M0U7Y0FDWSxHQUFOaTJFLG1CQVpKNkI7ZUFjRTtjQUZRLElBRStDLEtBZHpEQSxhQWN5RDs7b0JBQ3pEbnhEO2dCQUNFOztvQkFmRnd3RDtvQkFNSnpyRixJQUxJOEg7b0JBU0Z3TSxJQVRFeE07b0JBYUFtekIsSUFiQW56QjtvQkFjOEMsaUJBSjFDeWlGLElBR0p0dkQ7a0JBQ0UsU0FERkE7OztjQUhVLFNBRFozbUI7OztVQUhVLFNBRFp0VTs7O01BYUEsT0FuQkl5ckYsRUFtQkY7YUFXRm1CLG1CQUFtQm5sRjtNQUNsQiw4QkFEa0JBOztlQUVoQiwyQ0FBeUM7YUFDNUNvbEYsbUJBQW1CcGxGO01BQ2xCLDhCQURrQkE7O2VBRWhCLDJDQUF5QzthQUM1Q3FsRixtQkFBbUJybEY7TUFDbEIsOEJBRGtCQTs7ZUFFaEIsMkNBQXlDO2FBQzVDc2xGLG1CQUFtQnRsRjtNQUNsQiw4QkFEa0JBOztlQUVoQiwyQ0FBeUM7YUFLNUN1bEYsVUFBVXZsRixHQUFJLHVCQUFKQSxNQUFrQjthQUM1QndsRixVQUFVeGxGLEVBQUVra0YsTUFBTyx1QkFBVGxrRixLQUFFa2tGLE1BQXlCO2FBQ3JDdUIsVUFBVXpsRixFQUFFa2tGLEtBQUtDLE1BQU8sdUJBQWRua0YsS0FBRWtrRixLQUFLQyxNQUE4QjthQUMvQ3VCLFVBQVUxbEYsRUFBRWtrRixLQUFLQyxLQUFLUTtNQUFPLHVCQUFuQjNrRixLQUFFa2tGLEtBQUtDLEtBQUtRLE1BQW1DOzs7O09BclZ6RDlDO09BQ0FDO09BU0FTO09BQ0FDO09BVEFUO09BQ0FDO09BQ0FDO09BQ0FDO09BR0FHO09BRkFGO09BQ0FDO09BRUFFO09BR0FwL0I7T0FFQXUvQjtPQWtCQUM7T0FDQUM7VUF1QkVLLE9BVUFFLEtBV0FFOztRQXFCQUM7UUFlQUk7O1FBTEFEO1FBUkFGO1FBQ0FDO1FBWUFFOztRQVNBQztRQTRCQUk7O1FBZEFGO1FBSUFDO1FBZUFFOztRQWFBRTtRQXdDQU07O1FBeEJBSDtRQVFBQztRQUNBQztRQW9CQUU7O1FBc0JBRTtRQWdEQU87O1FBOUJBTDtRQVFBQztRQUNBQztRQUNBQztRQUNBQztRQXdCQUU7T0FrQ0ZDO09BR0FDO09BR0FDO09BR0FDOztPQU9BQztPQUNBQztPQUNBQztPQUNBQzs7YXhDOVdBQyxVQUFVQyxRQUFRM29GLEVBQUVSO01BQ2IsSUFBTHVFLEdBQUssV0FERzRrRixRQUFRM29GO01BQ1gscUJBRUksa0JBSFNSLEVBQ2xCdUUsR0FFYTtNQUZSLCtCQUN1QixxQkFENUJBLEdBQ29ELE9BQ3RDO2FBRWhCNmtGLGNBQWM1b0YsRUFBRVIsR0FDbEIsaUJBVkVxRSxXQVNjN0QsRUFBRVIsRUFDYzthQUU5QnFwRixlQUFlN29GLEVBQUVSLEdBQ25CLGlCQVpFb0UsWUFXZTVELEVBQUVSLEVBQ1M7YUFFMUJzcEYsY0FBY3huRSxNQUFNOWUsS0FBS3hDLEVBQUVSO01BQ25CLGdDZjlDYixPZWdDS21FLFdBYWMyZCxNQUFNOWUsWUFBS3hDLEVBQUVSLEVBQ2dCO1FBRTNDdXBGLFlBQ0F2c0QsV0FDQXdzRDthQUlBQyxhQUFXbGxGO01BQ2I7UUFBTSxJQUNKckIsRUFESSxtQkFET3FCOzs7Z0NBR2M7UUFEcEI7Z0JBQUxyQixFQUM2QjthQUU3QndtRixhQUFXbmxGO01BQ2I7UUFBTSxJQUNKakUsRUFESSxtQkFET2lFOzs7Z0NBR2M7UUFEcEI7Z0JBQUxqRSxFQUM2QjthQUU3QnFwRixhQUFXcGxGO01BQ2I7UUFBTSxJQUNKL0QsRUFESSxXQURPK0Q7OztnQ0FHYztRQURwQjtnQkFBTC9ELEVBQzZCO2FBSTdCb3BGLGVBQWFybEYsR0FBR1UsSUFBSSszQixJQUFJbjVCO01BQzFCO1FBQU0sYUFEU1UsR0FBR1UsSUFBSSszQixJQUFJbjVCLEtBRWxCOzs7Z0NBQ21CO21CQUFJO2FBRTdCZ21GLHNCQUFvQnRsRixHQUFHVjtNQUN6QjtRQUFNLElBQ0pyRCxFQURJLG9CQURnQitELEdBQUdWOzs7Z0NBR0U7UUFEcEI7Z0JBQUxyRCxFQUM2QjthQUk3QnNwRixVQUFVdmxGLEdBQUdVLElBQUlyQixJQUFJQztVQUNWWSxNQURNYixJQUNGYyxNQURNYjtNQUVyQjtpQkFEZWE7VUFHTCxJQUFKdkUsRUFBSSxNQUpBb0UsR0FBR1UsSUFDRlIsTUFBSUM7VUFHTCxTQUFKdkU7WUFJRjttQkFQV3VFLFFBR1R2RTthQUlGLE1BUE9zRSxRQUdMdEU7YUFIS3NFO2FBQUlDOztlQUFKRCxRQURNYixRQVdEO2FBY2hCbW1GLE9BQU85a0YsSUFBSXJCLElBQUl0RDtNQUNqQixJQUFJdUQsSUFBSixxQkFEU29CO01BQ1QsSUFEYXJCLE1BQUl0RCxVQUNidUQsSUFDbUIsT0FGZG9CO01BQ1QsSUFHTTZZLFdBSEZqYTs7V0FHRWlhLGNBSk9sYSxNQUFJdEQ7VUFNYixrQkFGRXdkO1FBSUo7bUJBSklBO1NBSUo7VUFBSWtzRTs7WUFST3BtRjs7Y0FlUDtTQUdKLDBCQVRJcW1GO1FBVUosS0FuQk9obEYsTUFrQkg4WSxVQWxCT25hO1FBbUJYLE9BREltYSxRQUdIO2FBRURtc0UsVUFBVTNsRjtNQUNaLElBQUk0bEY7TUFBSjtRQUdrQzs2QkFKdEI1bEY7U0FJUiwwQkFKUUE7U0FFUjJxRDs7Ozs7TUFESjtPQU9BLG9CQU5JQSwwQkFEQWk3QjtPQVFKO1FBRElDO09BT0osc0JBTklDO09BT1EsZ0JBaEJBOWxGLEdBZVJVLE1BTkFvbEY7TUFPUSxHQUFSQyxRQVBBRCxlQVNGLGtCQUhFcGxGLE1BQ0FxbEY7TUFHQztRQUNHLElBSUpwbkYsRUFKSSxtQkFwQklxQjs7O2dDQXVCTiw0QkFSRlU7UUFXRTtlQUFReS9DLEtBQUt6L0MsSUFBSXJCO1lBQUoybUYsVUFBSTlsRjtRQUNmO1VBQVU7d0JBREM4bEYsTUFBSTlsRixNQXpCbkIwbEY7V0EwQmMseUJBRENLLFNBQUkvbEY7V0FLUCxZQS9CSkYsR0EwQk9pbUYsTUFBSS9sRixNQUVYZ21GO1VBR0ksR0FBSnRxRixJQUhBc3FGLElBS0Ysa0JBUFNELFFBQUkvbEYsUUFLWHRFO1VBSk0sSUFRUixNQVRhc0UsUUFFWGdtRixRQUZPRixZQUFJOWxGO21CQVNPO01BRWQsSUFBTjhsRixNQUFNLE9BdEJadGxGLElBQ0FxbEY7TUFzQkUsZUFESUMsTUFyQk5ELE1BUUFwbkY7TUFjRSxZQURJcW5GLE1BckJORCxjQXdCRDs7OztPQTlJRDNuRjtPQUNBMEI7T0FDQUQ7T0FDQUQ7T0FPQWlsRjtPQUdBQztPQUdBQztPQUdBQztPQUNBdnNEO09BQ0F3c0Q7T0FDQS9oRjtPQUNBbkM7T0FFQW1rRjtPQUtBQztPQUtBQztPQUtBcmxGO09BRUFzbEY7T0FLQUM7T0F1REFLO09BMENBMWlGOzthQzFJQWtqRixZQUFVdkIsUUFBUTNvRixFQUFFUjtNQUNiLElBQUx5RCxHQUFLLFdBREcwbEYsUUFBUTNvRjtNQUNYLHFCQUVJLGtCQUhTUixFQUNsQnlELEdBRWE7TUFGUiwrQkFDdUIsbUJBRDVCQSxHQUNxRCxPQUN2QzthQUVoQmtuRixnQkFBY25xRixFQUFFUixHQUNsQixtQkFWRW9ELFNBU2M1QyxFQUFFUixFQUNlO2FBRS9CNHFGLGlCQUFlcHFGLEVBQUVSLEdBQ25CLG1CQVpFbUQsVUFXZTNDLEVBQUVSLEVBQ1U7YUFFM0I2cUYsZ0JBQWMvb0UsTUFBTTllLEtBQUt4QyxFQUFFUjtNQUNuQixrQ2hCL0NiLE9nQmlDSzhDLFNBYWNnZixNQUFNOWUsWUFBS3hDLEVBQUVSLEVBQ2lCOztLQUU1QzhxRjtLQUNBQztLQUNBQzs7O09BdEJBcG9GO09BQ0FDO09BQ0FPO09BQ0FEO09BQ0FMO09BT0E2bkY7T0FHQUM7T0FHQUM7T0FHQUM7T0FDQUM7T0FDQUM7T0FDQS9tRjtPQUNBQztPQUNBc0U7T0FDQW5GO09BQ0FrRjtPQUNBRDtPQUNBNUU7T0FDQUY7T0FDQUc7T0FDQUc7T0FDQW1FOzs7O1VoQjlETDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7S3dEQ0tnakY7S0FFQUM7O0tBSUFDO0tBeUJBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzthQXZCQUM7TUFBd0I7ZUFDWjtlQUNBO2VBQ0E7ZUFDRjtlQUNGO2dCQUNBLGdCQUFNO2FBRWRDO01BQXVCO2VBQ1g7ZUFDQTtlQUNBO2VBQ0Y7ZUFDRjtnQkFDQSw0QkFBa0I7Ozs7T0F0QjFCTDtPQUVBQztPQUlBQztPQUVBRTtPQVFBQztPQWVBRjs7VURoQ0w7Ozs7Ozs7SUNBQTs7Ozs7Ozs7Ozs7Ozs7OzttQkNDWUcsS0FBTyxNQUFNQSxHQUF2QjtJRERGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQ0FBO3lCQ0NVQyx1QkFBdUJBLGtCQUFtQkM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUREcEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7ZUNDQ0EsV0RERCw2QkNDQ0MsS0RERCxJQ0NDQztJREREOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozt1Q0NDQ0MsdUJEREQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Z0JDQ0NDLE1EREQ7Ozs7Ozs7Ozs7eUJDQ0NBLE1EREQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUNBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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QUFoQkMsYUFBNkM7WUFDbkQsb0JBRkg7bUJBRkFFLGlCQUFNUixjQUt3QjtTQU5yQztTQUFGO1NBREY7U0FESTtTQUFKO1NBRko7U0FEQTs7O21CQTFCV0E7WUFDSCx3Q0FER0E7WUFDSDtjQUVLOzs7OztlQUNVLHVCQURRTTtjQUNSLE9BQUpPO2VBR2lCOzJDQUhqQkE7Z0JBR1M7d0JBQVQsc0JBSnNCRixjQUFuQkM7Ozt3QkFBSFAsSUFDQVEsV0FJWTtZQUNYOzhCQVBUO2FBUUE7MEJBQ087WUFGRSxJQUdHLGdCQUF3QiwrQkFBbENEO1lBQWtDLGFBWnBDWixnQkFZb0Q7U0FiM0Q7OztZQWVVO2VBQWdCWTthQVNlO3FEQVRmQTttQkFTUjs7O1lBVFI7YUFNRDthQURBLG1DQUxPRTthQUlQO2FBREksMkJBSFVEO2FBR2Q7cURBUUE7d0JBWFI7U0FoQkw7U0FEQTtTQUhzQztTQUFKO1NBQTFCO1NBRko7U0FGSjtTQUhZO1NBQUo7U0FEQTtTQUZKO1NBRko7U0FGZ0M7U0FBSjtTQUFwQjtTQUFKO1NBRko7U0FGSjtTQW1Fc0I7U0FBc0I7O3VCQUEzQztlQXdESUU7TUFERyxRQW9CRztJQTNMQyxTQTZMWkM7TUFHRTs7T0FBc0U7YUFGdEVDO2dCQU1GO2dCQUNBO2dCQUNBO2dCQUMyQztrQkFBOUIsMkJBMU9idEIsc0JBbUNBUTtnQkF1TTJDO2VBVHpDYyxJQVVVO0lBR2QsMENBaENFYjtJQWlDRiw2Q0FmRVk7SUFlRjs7VURsUUg7Ozs7Ozs7SUNBQTs7OztJQ2tCUzs7O1VEbEJUIiwic291cmNlc0NvbnRlbnQiOltudWxsLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTAgSsOpcsO0bWUgVm91aWxsb25cbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9vZmZzZXRcbnZhciBjYW1sX2ludDY0X29mZnNldCA9IE1hdGgucG93KDIsIC0yNCk7XG5cbi8vUHJvdmlkZXM6IE1sSW50NjRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2Zmc2V0LCBjYW1sX3JhaXNlX3plcm9fZGl2aWRlXG5mdW5jdGlvbiBNbEludDY0IChsbyxtaSxoaSkge1xuICB0aGlzLmxvID0gbG8gJiAweGZmZmZmZjtcbiAgdGhpcy5taSA9IG1pICYgMHhmZmZmZmY7XG4gIHRoaXMuaGkgPSBoaSAmIDB4ZmZmZjtcbn1cbk1sSW50NjQucHJvdG90eXBlLmNhbWxfY3VzdG9tID0gXCJfalwiXG5NbEludDY0LnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gbmV3IE1sSW50NjQodGhpcy5sbyx0aGlzLm1pLHRoaXMuaGkpO1xufVxuXG5NbEludDY0LnByb3RvdHlwZS51Y29tcGFyZSA9IGZ1bmN0aW9uICh4KSB7XG4gIGlmICh0aGlzLmhpID4geC5oaSkgcmV0dXJuIDE7XG4gIGlmICh0aGlzLmhpIDwgeC5oaSkgcmV0dXJuIC0xO1xuICBpZiAodGhpcy5taSA+IHgubWkpIHJldHVybiAxO1xuICBpZiAodGhpcy5taSA8IHgubWkpIHJldHVybiAtMTtcbiAgaWYgKHRoaXMubG8gPiB4LmxvKSByZXR1cm4gMTtcbiAgaWYgKHRoaXMubG8gPCB4LmxvKSByZXR1cm4gLTE7XG4gIHJldHVybiAwO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUuY29tcGFyZSA9IGZ1bmN0aW9uICh4KSB7XG4gIHZhciBoaSA9IHRoaXMuaGkgPDwgMTY7XG4gIHZhciB4aGkgPSB4LmhpIDw8IDE2O1xuICBpZiAoaGkgPiB4aGkpIHJldHVybiAxO1xuICBpZiAoaGkgPCB4aGkpIHJldHVybiAtMTtcbiAgaWYgKHRoaXMubWkgPiB4Lm1pKSByZXR1cm4gMTtcbiAgaWYgKHRoaXMubWkgPCB4Lm1pKSByZXR1cm4gLTE7XG4gIGlmICh0aGlzLmxvID4geC5sbykgcmV0dXJuIDE7XG4gIGlmICh0aGlzLmxvIDwgeC5sbykgcmV0dXJuIC0xO1xuICByZXR1cm4gMDtcbn1cbk1sSW50NjQucHJvdG90eXBlLm5lZyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGxvID0gLSB0aGlzLmxvO1xuICB2YXIgbWkgPSAtIHRoaXMubWkgKyAobG8gPj4gMjQpO1xuICB2YXIgaGkgPSAtIHRoaXMuaGkgKyAobWkgPj4gMjQpO1xuICByZXR1cm4gbmV3IE1sSW50NjQobG8sIG1pLCBoaSk7XG59XG5NbEludDY0LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAoeCkge1xuICB2YXIgbG8gPSB0aGlzLmxvICsgeC5sbztcbiAgdmFyIG1pID0gdGhpcy5taSArIHgubWkgKyAobG8gPj4gMjQpO1xuICB2YXIgaGkgPSB0aGlzLmhpICsgeC5oaSArIChtaSA+PiAyNCk7XG4gIHJldHVybiBuZXcgTWxJbnQ2NChsbywgbWksIGhpKTtcbn1cbk1sSW50NjQucHJvdG90eXBlLnN1YiA9IGZ1bmN0aW9uICh4KSB7XG4gIHZhciBsbyA9IHRoaXMubG8gLSB4LmxvO1xuICB2YXIgbWkgPSB0aGlzLm1pIC0geC5taSArIChsbyA+PiAyNCk7XG4gIHZhciBoaSA9IHRoaXMuaGkgLSB4LmhpICsgKG1pID4+IDI0KTtcbiAgcmV0dXJuIG5ldyBNbEludDY0KGxvLCBtaSwgaGkpO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUubXVsID0gZnVuY3Rpb24gKHgpIHtcbiAgdmFyIGxvID0gdGhpcy5sbyAqIHgubG87XG4gIHZhciBtaSA9ICgobG8gKiBjYW1sX2ludDY0X29mZnNldCkgfCAwKSArIHRoaXMubWkgKiB4LmxvICsgdGhpcy5sbyAqIHgubWk7XG4gIHZhciBoaSA9ICgobWkgKiBjYW1sX2ludDY0X29mZnNldCkgfCAwKSArIHRoaXMuaGkgKiB4LmxvICsgdGhpcy5taSAqIHgubWkgKyB0aGlzLmxvICogeC5oaTtcbiAgcmV0dXJuIG5ldyBNbEludDY0KGxvLCBtaSwgaGkpO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUuaXNaZXJvID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gKHRoaXMubG98dGhpcy5taXx0aGlzLmhpKSA9PSAwO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUuaXNOZWcgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAodGhpcy5oaSA8PCAxNikgPCAwO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUuYW5kID0gZnVuY3Rpb24gKHgpIHtcbiAgcmV0dXJuIG5ldyBNbEludDY0KHRoaXMubG8gJiB4LmxvLCB0aGlzLm1pICYgeC5taSwgdGhpcy5oaSAmIHguaGkpO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUub3IgPSBmdW5jdGlvbiAoeCkge1xuICByZXR1cm4gbmV3IE1sSW50NjQodGhpcy5sb3x4LmxvLCB0aGlzLm1pfHgubWksIHRoaXMuaGl8eC5oaSk7XG59XG5NbEludDY0LnByb3RvdHlwZS54b3IgPSBmdW5jdGlvbiAoeCkge1xuICByZXR1cm4gbmV3IE1sSW50NjQodGhpcy5sb154LmxvLCB0aGlzLm1pXngubWksIHRoaXMuaGleeC5oaSk7XG59XG5NbEludDY0LnByb3RvdHlwZS5zaGlmdF9sZWZ0ID0gZnVuY3Rpb24gKHMpIHtcbiAgcyA9IHMgJiA2MztcbiAgaWYgKHMgPT0gMCkgcmV0dXJuIHRoaXM7XG4gIGlmIChzIDwgMjQpIHtcbiAgICByZXR1cm4gbmV3IE1sSW50NjQgKHRoaXMubG8gPDwgcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLm1pIDw8IHMpIHwgKHRoaXMubG8gPj4gKDI0IC0gcykpLFxuICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMuaGkgPDwgcykgfCAodGhpcy5taSA+PiAoMjQgLSBzKSkpO1xuICB9XG4gIGlmIChzIDwgNDgpXG4gICAgcmV0dXJuIG5ldyBNbEludDY0ICgwLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sbyA8PCAocyAtIDI0KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLm1pIDw8IChzIC0gMjQpKSB8ICh0aGlzLmxvID4+ICg0OCAtIHMpKSk7XG4gIHJldHVybiBuZXcgTWxJbnQ2NCgwLCAwLCB0aGlzLmxvIDw8IChzIC0gNDgpKVxufVxuTWxJbnQ2NC5wcm90b3R5cGUuc2hpZnRfcmlnaHRfdW5zaWduZWQgPSBmdW5jdGlvbiAocykge1xuICBzID0gcyAmIDYzO1xuICBpZiAocyA9PSAwKSByZXR1cm4gdGhpcztcbiAgaWYgKHMgPCAyNClcbiAgICByZXR1cm4gbmV3IE1sSW50NjQgKFxuICAgICAgKHRoaXMubG8gPj4gcykgfCAodGhpcy5taSA8PCAoMjQgLSBzKSksXG4gICAgICAodGhpcy5taSA+PiBzKSB8ICh0aGlzLmhpIDw8ICgyNCAtIHMpKSxcbiAgICAgICh0aGlzLmhpID4+IHMpKTtcbiAgaWYgKHMgPCA0OClcbiAgICByZXR1cm4gbmV3IE1sSW50NjQgKFxuICAgICAgKHRoaXMubWkgPj4gKHMgLSAyNCkpIHwgKHRoaXMuaGkgPDwgKDQ4IC0gcykpLFxuICAgICAgKHRoaXMuaGkgPj4gKHMgLSAyNCkpLFxuICAgICAgMCk7XG4gIHJldHVybiBuZXcgTWxJbnQ2NCAodGhpcy5oaSA+PiAocyAtIDQ4KSwgMCwgMCk7XG59XG5NbEludDY0LnByb3RvdHlwZS5zaGlmdF9yaWdodCA9IGZ1bmN0aW9uIChzKSB7XG4gIHMgPSBzICYgNjM7XG4gIGlmIChzID09IDApIHJldHVybiB0aGlzO1xuICB2YXIgaCA9ICh0aGlzLmhpIDw8IDE2KSA+PiAxNjtcbiAgaWYgKHMgPCAyNClcbiAgICByZXR1cm4gbmV3IE1sSW50NjQgKFxuICAgICAgKHRoaXMubG8gPj4gcykgfCAodGhpcy5taSA8PCAoMjQgLSBzKSksXG4gICAgICAodGhpcy5taSA+PiBzKSB8IChoIDw8ICgyNCAtIHMpKSxcbiAgICAgICgodGhpcy5oaSA8PCAxNikgPj4gcykgPj4+IDE2KTtcbiAgdmFyIHNpZ24gPSAodGhpcy5oaSA8PCAxNikgPj4gMzE7XG4gIGlmIChzIDwgNDgpXG4gICAgcmV0dXJuIG5ldyBNbEludDY0IChcbiAgICAgICh0aGlzLm1pID4+IChzIC0gMjQpKSB8ICh0aGlzLmhpIDw8ICg0OCAtIHMpKSxcbiAgICAgICh0aGlzLmhpIDw8IDE2KSA+PiAocyAtIDI0KSA+PiAxNixcbiAgICAgIHNpZ24gJiAweGZmZmYpO1xuICByZXR1cm4gbmV3IE1sSW50NjQgKCh0aGlzLmhpIDw8IDE2KSA+PiAocyAtIDMyKSwgc2lnbiwgc2lnbik7XG59XG5NbEludDY0LnByb3RvdHlwZS5sc2wxID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmhpID0gKHRoaXMuaGkgPDwgMSkgfCAodGhpcy5taSA+PiAyMyk7XG4gIHRoaXMubWkgPSAoKHRoaXMubWkgPDwgMSkgfCAodGhpcy5sbyA+PiAyMykpICYgMHhmZmZmZmY7XG4gIHRoaXMubG8gPSAodGhpcy5sbyA8PCAxKSAmIDB4ZmZmZmZmO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUubHNyMSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5sbyA9ICgodGhpcy5sbyA+Pj4gMSkgfCAodGhpcy5taSA8PCAyMykpICYgMHhmZmZmZmY7XG4gIHRoaXMubWkgPSAoKHRoaXMubWkgPj4+IDEpIHwgKHRoaXMuaGkgPDwgMjMpKSAmIDB4ZmZmZmZmO1xuICB0aGlzLmhpID0gdGhpcy5oaSA+Pj4gMTtcbn1cbk1sSW50NjQucHJvdG90eXBlLnVkaXZtb2QgPSBmdW5jdGlvbiAoeCkge1xuICB2YXIgb2Zmc2V0ID0gMDtcbiAgdmFyIG1vZHVsdXMgPSB0aGlzLmNvcHkoKTtcbiAgdmFyIGRpdmlzb3IgPSB4LmNvcHkoKTtcbiAgdmFyIHF1b3RpZW50ID0gbmV3IE1sSW50NjQoMCwwLDApO1xuICB3aGlsZSAobW9kdWx1cy51Y29tcGFyZShkaXZpc29yKSA+IDApIHtcbiAgICBvZmZzZXQrKztcbiAgICBkaXZpc29yLmxzbDEoKTtcbiAgfVxuICB3aGlsZSAob2Zmc2V0ID49IDApIHtcbiAgICBvZmZzZXQgLS07XG4gICAgcXVvdGllbnQubHNsMSgpO1xuICAgIGlmIChtb2R1bHVzLnVjb21wYXJlKGRpdmlzb3IpID49IDApIHtcbiAgICAgIHF1b3RpZW50LmxvICsrO1xuICAgICAgbW9kdWx1cyA9IG1vZHVsdXMuc3ViKGRpdmlzb3IpO1xuICAgIH1cbiAgICBkaXZpc29yLmxzcjEoKTtcbiAgfVxuICByZXR1cm4geyBxdW90aWVudCA6IHF1b3RpZW50LCBtb2R1bHVzIDogbW9kdWx1cyB9O1xufVxuTWxJbnQ2NC5wcm90b3R5cGUuZGl2ID0gZnVuY3Rpb24gKHkpXG57XG4gIHZhciB4ID0gdGhpcztcbiAgaWYgKHkuaXNaZXJvKCkpIGNhbWxfcmFpc2VfemVyb19kaXZpZGUgKCk7XG4gIHZhciBzaWduID0geC5oaSBeIHkuaGk7XG4gIGlmICh4LmhpICYgMHg4MDAwKSB4ID0geC5uZWcoKTtcbiAgaWYgKHkuaGkgJiAweDgwMDApIHkgPSB5Lm5lZygpO1xuICB2YXIgcSA9IHgudWRpdm1vZCh5KS5xdW90aWVudDtcbiAgaWYgKHNpZ24gJiAweDgwMDApIHEgPSBxLm5lZygpO1xuICByZXR1cm4gcTtcbn1cbk1sSW50NjQucHJvdG90eXBlLm1vZCA9IGZ1bmN0aW9uICh5KVxue1xuICB2YXIgeCA9IHRoaXM7XG4gIGlmICh5LmlzWmVybygpKSBjYW1sX3JhaXNlX3plcm9fZGl2aWRlICgpO1xuICB2YXIgc2lnbiA9IHguaGk7XG4gIGlmICh4LmhpICYgMHg4MDAwKSB4ID0geC5uZWcoKTtcbiAgaWYgKHkuaGkgJiAweDgwMDApIHkgPSB5Lm5lZygpO1xuICB2YXIgciA9IHgudWRpdm1vZCh5KS5tb2R1bHVzO1xuICBpZiAoc2lnbiAmIDB4ODAwMCkgciA9IHIubmVnKCk7XG4gIHJldHVybiByO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUudG9JbnQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmxvIHwgKHRoaXMubWkgPDwgMjQpO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUudG9GbG9hdCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICgodGhpcy5oaSA8PCAxNikgKiBNYXRoLnBvdygyLCAzMikgKyB0aGlzLm1pICogTWF0aC5wb3coMiwgMjQpKSArIHRoaXMubG87XG59XG5NbEludDY0LnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gW3RoaXMuaGkgPj4gOCxcbiAgICAgICAgICB0aGlzLmhpICYgMHhmZixcbiAgICAgICAgICB0aGlzLm1pID4+IDE2LFxuICAgICAgICAgICh0aGlzLm1pID4+IDgpICYgMHhmZixcbiAgICAgICAgICB0aGlzLm1pICYgMHhmZixcbiAgICAgICAgICB0aGlzLmxvID4+IDE2LFxuICAgICAgICAgICh0aGlzLmxvID4+IDgpICYgMHhmZixcbiAgICAgICAgICB0aGlzLmxvICYgMHhmZl07XG59XG5NbEludDY0LnByb3RvdHlwZS5sbzMyID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5sbyB8ICgodGhpcy5taSAmIDB4ZmYpIDw8IDI0KTtcbn1cbk1sSW50NjQucHJvdG90eXBlLmhpMzIgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAoKHRoaXMubWkgPj4+IDgpICYgMHhmZmZmKSB8ICh0aGlzLmhpIDw8IDE2KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF91bHQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfdWx0KHgseSkgeyByZXR1cm4geC51Y29tcGFyZSh5KSA8IDA7IH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9jb21wYXJlIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2NvbXBhcmUoeCx5LCB0b3RhbCkgeyByZXR1cm4geC5jb21wYXJlKHkpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9uZWcgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfbmVnICh4KSB7IHJldHVybiB4Lm5lZygpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9hZGQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfYWRkICh4LCB5KSB7IHJldHVybiB4LmFkZCh5KSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfc3ViIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X3N1YiAoeCwgeSkgeyByZXR1cm4geC5zdWIoeSkgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X211bCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZmZzZXRcbmZ1bmN0aW9uIGNhbWxfaW50NjRfbXVsKHgseSkgeyByZXR1cm4geC5tdWwoeSkgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2lzX3plcm8gY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfaXNfemVybyh4KSB7IHJldHVybiAreC5pc1plcm8oKTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2lzX25lZ2F0aXZlIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2lzX25lZ2F0aXZlKHgpIHsgcmV0dXJuICt4LmlzTmVnKCk7IH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9hbmQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfYW5kICh4LCB5KSB7IHJldHVybiB4LmFuZCh5KTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X29yIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X29yICh4LCB5KSB7IHJldHVybiB4Lm9yKHkpOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfeG9yIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X3hvciAoeCwgeSkgeyByZXR1cm4geC54b3IoeSkgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X3NoaWZ0X2xlZnQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfc2hpZnRfbGVmdCAoeCwgcykgeyByZXR1cm4geC5zaGlmdF9sZWZ0KHMpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9zaGlmdF9yaWdodF91bnNpZ25lZCBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9zaGlmdF9yaWdodF91bnNpZ25lZCAoeCwgcykgeyByZXR1cm4geC5zaGlmdF9yaWdodF91bnNpZ25lZChzKSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfc2hpZnRfcmlnaHQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfc2hpZnRfcmlnaHQgKHgsIHMpIHsgcmV0dXJuIHguc2hpZnRfcmlnaHQocykgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2RpdiBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9kaXYgKHgsIHkpIHsgcmV0dXJuIHguZGl2KHkpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9tb2QgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfbW9kICh4LCB5KSB7IHJldHVybiB4Lm1vZCh5KSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfb2ZfaW50MzIgY29uc3Rcbi8vUmVxdWlyZXM6IE1sSW50NjRcbmZ1bmN0aW9uIGNhbWxfaW50NjRfb2ZfaW50MzIgKHgpIHtcbiAgcmV0dXJuIG5ldyBNbEludDY0KHggJiAweGZmZmZmZiwgKHggPj4gMjQpICYgMHhmZmZmZmYsICh4ID4+IDMxKSAmIDB4ZmZmZilcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF90b19pbnQzMiBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF90b19pbnQzMiAoeCkgeyByZXR1cm4geC50b0ludCgpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF90b19mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF90b19mbG9hdCAoeCkgeyByZXR1cm4geC50b0Zsb2F0ICgpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9vZl9mbG9hdCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZmZzZXQsIE1sSW50NjRcbmZ1bmN0aW9uIGNhbWxfaW50NjRfb2ZfZmxvYXQgKHgpIHtcbiAgaWYgKHggPCAwKSB4ID0gTWF0aC5jZWlsKHgpO1xuICByZXR1cm4gbmV3IE1sSW50NjQoXG4gICAgeCAmIDB4ZmZmZmZmLFxuICAgIE1hdGguZmxvb3IoeCAqIGNhbWxfaW50NjRfb2Zmc2V0KSAmIDB4ZmZmZmZmLFxuICAgIE1hdGguZmxvb3IoeCAqIGNhbWxfaW50NjRfb2Zmc2V0ICogY2FtbF9pbnQ2NF9vZmZzZXQpICYgMHhmZmZmKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9mb3JtYXQgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfcGFyc2VfZm9ybWF0LCBjYW1sX2ZpbmlzaF9mb3JtYXR0aW5nXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2lzX25lZ2F0aXZlLCBjYW1sX2ludDY0X25lZ1xuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZl9pbnQzMiwgY2FtbF9pbnQ2NF90b19pbnQzMlxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9pc196ZXJvLCBjYW1sX3N0cl9yZXBlYXRcbmZ1bmN0aW9uIGNhbWxfaW50NjRfZm9ybWF0IChmbXQsIHgpIHtcbiAgdmFyIGYgPSBjYW1sX3BhcnNlX2Zvcm1hdChmbXQpO1xuICBpZiAoZi5zaWduZWRjb252ICYmIGNhbWxfaW50NjRfaXNfbmVnYXRpdmUoeCkpIHtcbiAgICBmLnNpZ24gPSAtMTsgeCA9IGNhbWxfaW50NjRfbmVnKHgpO1xuICB9XG4gIHZhciBidWZmZXIgPSBcIlwiO1xuICB2YXIgd2Jhc2UgPSBjYW1sX2ludDY0X29mX2ludDMyKGYuYmFzZSk7XG4gIHZhciBjdnRibCA9IFwiMDEyMzQ1Njc4OWFiY2RlZlwiO1xuICBkbyB7XG4gICAgdmFyIHAgPSB4LnVkaXZtb2Qod2Jhc2UpO1xuICAgIHggPSBwLnF1b3RpZW50O1xuICAgIGJ1ZmZlciA9IGN2dGJsLmNoYXJBdChjYW1sX2ludDY0X3RvX2ludDMyKHAubW9kdWx1cykpICsgYnVmZmVyO1xuICB9IHdoaWxlICghIGNhbWxfaW50NjRfaXNfemVybyh4KSk7XG4gIGlmIChmLnByZWMgPj0gMCkge1xuICAgIGYuZmlsbGVyID0gJyAnO1xuICAgIHZhciBuID0gZi5wcmVjIC0gYnVmZmVyLmxlbmd0aDtcbiAgICBpZiAobiA+IDApIGJ1ZmZlciA9IGNhbWxfc3RyX3JlcGVhdCAobiwgJzAnKSArIGJ1ZmZlcjtcbiAgfVxuICByZXR1cm4gY2FtbF9maW5pc2hfZm9ybWF0dGluZyhmLCBidWZmZXIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X29mX3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9wYXJzZV9zaWduX2FuZF9iYXNlLCBjYW1sX2ZhaWx3aXRoLCBjYW1sX3BhcnNlX2RpZ2l0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mX2ludDMyLCBjYW1sX2ludDY0X3VsdFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9hZGQsIGNhbWxfaW50NjRfbXVsLCBjYW1sX2ludDY0X25lZ1xuLy9SZXF1aXJlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoLGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQsIE1sSW50NjRcbmZ1bmN0aW9uIGNhbWxfaW50NjRfb2Zfc3RyaW5nKHMpIHtcbiAgdmFyIHIgPSBjYW1sX3BhcnNlX3NpZ25fYW5kX2Jhc2UgKHMpO1xuICB2YXIgaSA9IHJbMF0sIHNpZ24gPSByWzFdLCBiYXNlID0gclsyXTtcbiAgdmFyIGJhc2U2NCA9IGNhbWxfaW50NjRfb2ZfaW50MzIoYmFzZSk7XG4gIHZhciB0aHJlc2hvbGQgPVxuICAgICAgbmV3IE1sSW50NjQoMHhmZmZmZmYsIDB4ZmZmZmZmZiwgMHhmZmZmKS51ZGl2bW9kKGJhc2U2NCkucXVvdGllbnQ7XG4gIHZhciBjID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldChzLCBpKTtcbiAgdmFyIGQgPSBjYW1sX3BhcnNlX2RpZ2l0KGMpO1xuICBpZiAoZCA8IDAgfHwgZCA+PSBiYXNlKSBjYW1sX2ZhaWx3aXRoKFwiaW50X29mX3N0cmluZ1wiKTtcbiAgdmFyIHJlcyA9IGNhbWxfaW50NjRfb2ZfaW50MzIoZCk7XG4gIGZvciAoOzspIHtcbiAgICBpKys7XG4gICAgYyA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSk7XG4gICAgaWYgKGMgPT0gOTUpIGNvbnRpbnVlO1xuICAgIGQgPSBjYW1sX3BhcnNlX2RpZ2l0KGMpO1xuICAgIGlmIChkIDwgMCB8fCBkID49IGJhc2UpIGJyZWFrO1xuICAgIC8qIERldGVjdCBvdmVyZmxvdyBpbiBtdWx0aXBsaWNhdGlvbiBiYXNlICogcmVzICovXG4gICAgaWYgKGNhbWxfaW50NjRfdWx0KHRocmVzaG9sZCwgcmVzKSkgY2FtbF9mYWlsd2l0aChcImludF9vZl9zdHJpbmdcIik7XG4gICAgZCA9IGNhbWxfaW50NjRfb2ZfaW50MzIoZCk7XG4gICAgcmVzID0gY2FtbF9pbnQ2NF9hZGQoY2FtbF9pbnQ2NF9tdWwoYmFzZTY0LCByZXMpLCBkKTtcbiAgICAvKiBEZXRlY3Qgb3ZlcmZsb3cgaW4gYWRkaXRpb24gKGJhc2UgKiByZXMpICsgZCAqL1xuICAgIGlmIChjYW1sX2ludDY0X3VsdChyZXMsIGQpKSBjYW1sX2ZhaWx3aXRoKFwiaW50X29mX3N0cmluZ1wiKTtcbiAgfVxuICBpZiAoaSAhPSBjYW1sX21sX3N0cmluZ19sZW5ndGgocykpIGNhbWxfZmFpbHdpdGgoXCJpbnRfb2Zfc3RyaW5nXCIpO1xuICBpZiAoYmFzZSA9PSAxMCAmJiBjYW1sX2ludDY0X3VsdChuZXcgTWxJbnQ2NCgwLCAwLCAweDgwMDApLCByZXMpKVxuICAgIGNhbWxfZmFpbHdpdGgoXCJpbnRfb2Zfc3RyaW5nXCIpO1xuICBpZiAoc2lnbiA8IDApIHJlcyA9IGNhbWxfaW50NjRfbmVnKHJlcyk7XG4gIHJldHVybiByZXM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfY3JlYXRlX2xvX21pX2hpIGNvbnN0XG4vL1JlcXVpcmVzOiBNbEludDY0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2NyZWF0ZV9sb19taV9oaShsbywgbWksIGhpKXtcbiAgcmV0dXJuIG5ldyBNbEludDY0KGxvLCBtaSwgaGkpXG59XG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2NyZWF0ZV9sb19oaSBjb25zdFxuLy9SZXF1aXJlczogTWxJbnQ2NFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9jcmVhdGVfbG9faGkobG8sIGhpKXtcbiAgcmV0dXJuIG5ldyBNbEludDY0IChcbiAgICBsbyAmIDB4ZmZmZmZmLFxuICAgICgobG8gPj4+IDI0KSAmIDB4ZmYpIHwgKChoaSAmIDB4ZmZmZikgPDwgOCksXG4gICAgKGhpID4+PiAxNikgJiAweGZmZmYpO1xufVxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9sbzMyIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2xvMzIodil7IHJldHVybiB2LmxvMzIoKSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfaGkzMiBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9oaTMyKHYpeyByZXR1cm4gdi5oaTMyKCkgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X29mX2J5dGVzIGNvbnN0XG4vL1JlcXVpcmVzOiBNbEludDY0XG5mdW5jdGlvbiBjYW1sX2ludDY0X29mX2J5dGVzKGEpIHtcbiAgcmV0dXJuIG5ldyBNbEludDY0KGFbN10gPDwgMCB8IChhWzZdIDw8IDgpIHwgKGFbNV0gPDwgMTYpLFxuICAgICAgICAgICAgICAgICAgICAgYVs0XSA8PCAwIHwgKGFbM10gPDwgOCkgfCAoYVsyXSA8PCAxNiksXG4gICAgICAgICAgICAgICAgICAgICBhWzFdIDw8IDAgfCAoYVswXSA8PCA4KSk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X3RvX2J5dGVzIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X3RvX2J5dGVzKHgpIHsgcmV0dXJuIHgudG9BcnJheSgpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9oYXNoIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2hhc2godil7XG4gIHJldHVybiAodi5sbzMyKCkpIF4gKHYuaGkzMigpKVxufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwLTIwMTQgSsOpcsO0bWUgVm91aWxsb25cbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8gQW4gT0NhbWwgc3RyaW5nIGlzIGFuIG9iamVjdCB3aXRoIHRocmVlIGZpZWxkczpcbi8vIC0gdGFnICd0J1xuLy8gLSBsZW5ndGggJ2wnXG4vLyAtIGNvbnRlbnRzICdjJ1xuLy9cbi8vIFRoZSBjb250ZW50cyBvZiB0aGUgc3RyaW5nIGNhbiBiZSBlaXRoZXIgYSBKYXZhU2NyaXB0IGFycmF5IG9yXG4vLyBhIEphdmFTY3JpcHQgc3RyaW5nLiBUaGUgbGVuZ3RoIG9mIHRoaXMgc3RyaW5nIGNhbiBiZSBsZXNzIHRoYW4gdGhlXG4vLyBsZW5ndGggb2YgdGhlIE9DYW1sIHN0cmluZy4gSW4gdGhpcyBjYXNlLCByZW1haW5pbmcgYnl0ZXMgYXJlXG4vLyBhc3N1bWVkIHRvIGJlIHplcm9lcy4gQXJyYXlzIGFyZSBtdXRhYmxlIGJ1dCBjb25zdW1lcyBtb3JlIG1lbW9yeVxuLy8gdGhhbiBzdHJpbmdzLiBBIGNvbW1vbiBwYXR0ZXJuIGlzIHRvIHN0YXJ0IGZyb20gYW4gZW1wdHkgc3RyaW5nIGFuZFxuLy8gcHJvZ3Jlc3NpdmVseSBmaWxsIGl0IGZyb20gdGhlIHN0YXJ0LiBQYXJ0aWFsIHN0cmluZ3MgbWFrZXMgaXRcbi8vIHBvc3NpYmxlIHRvIGltcGxlbWVudCB0aGlzIGVmZmljaWVudGx5LlxuLy9cbi8vIFdoZW4gY29udmVydGluZyB0byBhbmQgZnJvbSBVVEYtMTYsIHdlIGtlZXAgdHJhY2sgb2Ygd2hldGhlciB0aGVcbi8vIHN0cmluZyBpcyBjb21wb3NlZCBvbmx5IG9mIEFTQ0lJIGNoYXJhY3RlcnMgKGluIHdoaWNoIGNhc2UsIG5vXG4vLyBjb252ZXJzaW9uIG5lZWRzIHRvIGJlIHBlcmZvcm1lZCkgb3Igbm90LlxuLy9cbi8vIFRoZSBzdHJpbmcgdGFnIGNhbiB0aHVzIHRha2UgdGhlIGZvbGxvd2luZyB2YWx1ZXM6XG4vLyAgIGZ1bGwgc3RyaW5nICAgICBCWVRFIHwgVU5LTk9XTjogICAgICAwXG4vLyAgICAgICAgICAgICAgICAgICBCWVRFIHwgQVNDSUk6ICAgICAgICA5XG4vLyAgICAgICAgICAgICAgICAgICBCWVRFIHwgTk9UX0FTQ0lJOiAgICA4XG4vLyAgIHN0cmluZyBwcmVmaXggICBQQVJUSUFMOiAgICAgICAgICAgICAyXG4vLyAgIGFycmF5ICAgICAgICAgICBBUlJBWTogICAgICAgICAgICAgICA0XG4vL1xuLy8gT25lIGNhbiB1c2UgYml0IG1hc2tpbmcgdG8gZGlzY3JpbWluYXRlIHRoZXNlIGRpZmZlcmVudCBjYXNlczpcbi8vICAga25vd25fZW5jb2RpbmcoeCkgPSB4Jjhcbi8vICAgaXNfYXNjaWkoeCkgPSAgICAgICB4JjFcbi8vICAga2luZCh4KSA9ICAgICAgICAgICB4JjZcblxuLy9Qcm92aWRlczogY2FtbF9zdHJfcmVwZWF0XG5mdW5jdGlvbiBjYW1sX3N0cl9yZXBlYXQobiwgcykge1xuICBpZihuID09IDApIHJldHVybiBcIlwiO1xuICBpZiAocy5yZXBlYXQpIHtyZXR1cm4gcy5yZXBlYXQobik7fSAvLyBFQ01Bc2NyaXB0IDYgYW5kIEZpcmVmb3ggMjQrXG4gIHZhciByID0gXCJcIiwgbCA9IDA7XG4gIGZvcig7Oykge1xuICAgIGlmIChuICYgMSkgciArPSBzO1xuICAgIG4gPj49IDE7XG4gICAgaWYgKG4gPT0gMCkgcmV0dXJuIHI7XG4gICAgcyArPSBzO1xuICAgIGwrKztcbiAgICBpZiAobCA9PSA5KSB7XG4gICAgICBzLnNsaWNlKDAsMSk7IC8vIGZsYXR0ZW4gdGhlIHN0cmluZ1xuICAgICAgLy8gdGhlbiwgdGhlIGZsYXR0ZW5pbmcgb2YgdGhlIHdob2xlIHN0cmluZyB3aWxsIGJlIGZhc3RlcixcbiAgICAgIC8vIGFzIGl0IHdpbGwgYmUgY29tcG9zZWQgb2YgbGFyZ2VyIHBpZWNlc1xuICAgIH1cbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N1YmFycmF5X3RvX2pzYnl0ZXNcbi8vV2Vha2RlZlxuLy8gUHJlIEVDTUFTY3JpcHQgNSwgW2FwcGx5XSB3b3VsZCBub3Qgc3VwcG9ydCBhcnJheS1saWtlIG9iamVjdC5cbi8vIEluIHN1Y2ggc2V0dXAsIFR5cGVkX2FycmF5IHdvdWxkIGJlIGltcGxlbWVudGVkIGFzIHBvbHlmaWxsLCBhbmQgW2YuYXBwbHldIHdvdWxkXG4vLyBmYWlsIGhlcmUuIE1hcmsgdGhlIHByaW1pdGl2ZSBhcyBXZWFrZGVmLCBzbyB0aGF0IHBlb3BsZSBjYW4gb3ZlcnJpZGUgaXQgZWFzaWx5LlxuZnVuY3Rpb24gY2FtbF9zdWJhcnJheV90b19qc2J5dGVzIChhLCBpLCBsZW4pIHtcbiAgdmFyIGYgPSBTdHJpbmcuZnJvbUNoYXJDb2RlO1xuICBpZiAoaSA9PSAwICYmIGxlbiA8PSA0MDk2ICYmIGxlbiA9PSBhLmxlbmd0aCkgcmV0dXJuIGYuYXBwbHkgKG51bGwsIGEpO1xuICB2YXIgcyA9IFwiXCI7XG4gIGZvciAoOyAwIDwgbGVuOyBpICs9IDEwMjQsbGVuLT0xMDI0KVxuICAgIHMgKz0gZi5hcHBseSAobnVsbCwgYS5zbGljZShpLGkgKyBNYXRoLm1pbihsZW4sIDEwMjQpKSk7XG4gIHJldHVybiBzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3V0Zjhfb2ZfdXRmMTZcbmZ1bmN0aW9uIGNhbWxfdXRmOF9vZl91dGYxNihzKSB7XG4gIGZvciAodmFyIGIgPSBcIlwiLCB0ID0gYiwgYywgZCwgaSA9IDAsIGwgPSBzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGMgPSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgaWYgKGMgPCAweDgwKSB7XG4gICAgICBmb3IgKHZhciBqID0gaSArIDE7IChqIDwgbCkgJiYgKGMgPSBzLmNoYXJDb2RlQXQoaikpIDwgMHg4MDsgaisrKTtcbiAgICAgIGlmIChqIC0gaSA+IDUxMikgeyB0LnN1YnN0cigwLCAxKTsgYiArPSB0OyB0ID0gXCJcIjsgYiArPSBzLnNsaWNlKGksIGopIH1cbiAgICAgIGVsc2UgdCArPSBzLnNsaWNlKGksIGopO1xuICAgICAgaWYgKGogPT0gbCkgYnJlYWs7XG4gICAgICBpID0gajtcbiAgICB9XG4gICAgaWYgKGMgPCAweDgwMCkge1xuICAgICAgdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4YzAgfCAoYyA+PiA2KSk7XG4gICAgICB0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHg4MCB8IChjICYgMHgzZikpO1xuICAgIH0gZWxzZSBpZiAoYyA8IDB4ZDgwMCB8fCBjID49IDB4ZGZmZikge1xuICAgICAgdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4ZTAgfCAoYyA+PiAxMiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCB8ICgoYyA+PiA2KSAmIDB4M2YpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAgfCAoYyAmIDB4M2YpKTtcbiAgICB9IGVsc2UgaWYgKGMgPj0gMHhkYmZmIHx8IGkgKyAxID09IGwgfHxcbiAgICAgICAgICAgICAgIChkID0gcy5jaGFyQ29kZUF0KGkgKyAxKSkgPCAweGRjMDAgfHwgZCA+IDB4ZGZmZikge1xuICAgICAgLy8gVW5tYXRjaGVkIHN1cnJvZ2F0ZSBwYWlyLCByZXBsYWNlZCBieSBcXHVmZmZkIChyZXBsYWNlbWVudCBjaGFyYWN0ZXIpXG4gICAgICB0ICs9IFwiXFx4ZWZcXHhiZlxceGJkXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIGkrKztcbiAgICAgIGMgPSAoYyA8PCAxMCkgKyBkIC0gMHgzNWZkYzAwO1xuICAgICAgdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4ZjAgfCAoYyA+PiAxOCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCB8ICgoYyA+PiAxMikgJiAweDNmKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwIHwgKChjID4+IDYpICYgMHgzZiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCB8IChjICYgMHgzZikpO1xuICAgIH1cbiAgICBpZiAodC5sZW5ndGggPiAxMDI0KSB7dC5zdWJzdHIoMCwgMSk7IGIgKz0gdDsgdCA9IFwiXCI7fVxuICB9XG4gIHJldHVybiBiK3Q7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdXRmMTZfb2ZfdXRmOFxuZnVuY3Rpb24gY2FtbF91dGYxNl9vZl91dGY4KHMpIHtcbiAgZm9yICh2YXIgYiA9IFwiXCIsIHQgPSBcIlwiLCBjLCBjMSwgYzIsIHYsIGkgPSAwLCBsID0gcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBjMSA9IHMuY2hhckNvZGVBdChpKTtcbiAgICBpZiAoYzEgPCAweDgwKSB7XG4gICAgICBmb3IgKHZhciBqID0gaSArIDE7IChqIDwgbCkgJiYgKGMxID0gcy5jaGFyQ29kZUF0KGopKSA8IDB4ODA7IGorKyk7XG4gICAgICBpZiAoaiAtIGkgPiA1MTIpIHsgdC5zdWJzdHIoMCwgMSk7IGIgKz0gdDsgdCA9IFwiXCI7IGIgKz0gcy5zbGljZShpLCBqKSB9XG4gICAgICBlbHNlIHQgKz0gcy5zbGljZShpLCBqKTtcbiAgICAgIGlmIChqID09IGwpIGJyZWFrO1xuICAgICAgaSA9IGo7XG4gICAgfVxuICAgIHYgPSAxO1xuICAgIGlmICgoKytpIDwgbCkgJiYgKCgoYzIgPSBzLmNoYXJDb2RlQXQoaSkpICYgLTY0KSA9PSAxMjgpKSB7XG4gICAgICBjID0gYzIgKyAoYzEgPDwgNik7XG4gICAgICBpZiAoYzEgPCAweGUwKSB7XG4gICAgICAgIHYgPSBjIC0gMHgzMDgwO1xuICAgICAgICBpZiAodiA8IDB4ODApIHYgPSAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdiA9IDI7XG4gICAgICAgIGlmICgoKytpIDwgbCkgJiYgKCgoYzIgPSBzLmNoYXJDb2RlQXQoaSkpICYgLTY0KSA9PSAxMjgpKSB7XG4gICAgICAgICAgYyA9IGMyICsgKGMgPDwgNik7XG4gICAgICAgICAgaWYgKGMxIDwgMHhmMCkge1xuICAgICAgICAgICAgdiA9IGMgLSAweGUyMDgwO1xuICAgICAgICAgICAgaWYgKCh2IDwgMHg4MDApIHx8ICgodiA+PSAweGQ3ZmYpICYmICh2IDwgMHhlMDAwKSkpIHYgPSAyO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2ID0gMztcbiAgICAgICAgICAgIGlmICgoKytpIDwgbCkgJiYgKCgoYzIgPSBzLmNoYXJDb2RlQXQoaSkpICYgLTY0KSA9PSAxMjgpICYmXG4gICAgICAgICAgICAgICAgKGMxIDwgMHhmNSkpIHtcbiAgICAgICAgICAgICAgdiA9IGMyIC0gMHgzYzgyMDgwICsgKGMgPDwgNik7XG4gICAgICAgICAgICAgIGlmICh2IDwgMHgxMDAwMCB8fCB2ID4gMHgxMGZmZmYpIHYgPSAzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAodiA8IDQpIHsgLy8gSW52YWxpZCBzZXF1ZW5jZVxuICAgICAgaSAtPSB2O1xuICAgICAgdCArPSBcIlxcdWZmZmRcIjtcbiAgICB9IGVsc2UgaWYgKHYgPiAweGZmZmYpXG4gICAgICB0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoMHhkN2MwICsgKHYgPj4gMTApLCAweGRjMDAgKyAodiAmIDB4M0ZGKSlcbiAgICBlbHNlXG4gICAgICB0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUodik7XG4gICAgaWYgKHQubGVuZ3RoID4gMTAyNCkge3Quc3Vic3RyKDAsIDEpOyBiICs9IHQ7IHQgPSBcIlwiO31cbiAgfVxuICByZXR1cm4gYit0O1xufVxuXG4vL1Byb3ZpZGVzOiBqc29vX2lzX2FzY2lpXG5mdW5jdGlvbiBqc29vX2lzX2FzY2lpIChzKSB7XG4gIC8vIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gZ2V0cyBiZXR0ZXIgYXQgYXJvdW5kIHRoaXMgcG9pbnQgZm9yIGFsbCBicm93c2Vyc1xuICBpZiAocy5sZW5ndGggPCAyNCkge1xuICAgIC8vIFNwaWRlcm1vbmtleSBnZXRzIG11Y2ggc2xvd2VyIHdoZW4gcy5sZW5ndGggPj0gMjQgKG9uIDY0IGJpdCBhcmNocylcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHMubGVuZ3RoOyBpKyspIGlmIChzLmNoYXJDb2RlQXQoaSkgPiAxMjcpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlXG4gICAgcmV0dXJuICEvW15cXHgwMC1cXHg3Zl0vLnRlc3Qocyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCBtdXRhYmxlXG5mdW5jdGlvbiBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQgKHMsIGkpIHtcbiAgc3dpdGNoIChzLnQgJiA2KSB7XG4gIGRlZmF1bHQ6IC8qIFBBUlRJQUwgKi9cbiAgICBpZiAoaSA+PSBzLmMubGVuZ3RoKSByZXR1cm4gMDtcbiAgY2FzZSAwOiAvKiBCWVRFUyAqL1xuICAgIHJldHVybiBzLmMuY2hhckNvZGVBdChpKTtcbiAgY2FzZSA0OiAvKiBBUlJBWSAqL1xuICAgIHJldHVybiBzLmNbaV1cbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX3Vuc2FmZV9zZXRcbi8vUmVxdWlyZXM6IGNhbWxfY29udmVydF9ieXRlc190b19hcnJheVxuZnVuY3Rpb24gY2FtbF9ieXRlc191bnNhZmVfc2V0IChzLCBpLCBjKSB7XG4gIC8vIFRoZSBPQ2FtbCBjb21waWxlciB1c2VzIENoYXIudW5zYWZlX2NociBvbiBpbnRlZ2VycyBsYXJnZXIgdGhhbiAyNTUhXG4gIGMgJj0gMHhmZjtcbiAgaWYgKHMudCAhPSA0IC8qIEFSUkFZICovKSB7XG4gICAgaWYgKGkgPT0gcy5jLmxlbmd0aCkge1xuICAgICAgcy5jICs9IFN0cmluZy5mcm9tQ2hhckNvZGUgKGMpO1xuICAgICAgaWYgKGkgKyAxID09IHMubCkgcy50ID0gMDsgLypCWVRFUyB8IFVOS09XTiovXG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5IChzKTtcbiAgfVxuICBzLmNbaV0gPSBjO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfYm91bmRfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IgKCkge1xuICBjYW1sX2ludmFsaWRfYXJndW1lbnQgKFwiaW5kZXggb3V0IG9mIGJvdW5kc1wiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yICgpIHtcbiAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50IChcImluZGV4IG91dCBvZiBib3VuZHNcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2dldFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IsIGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9zdHJpbmdfZ2V0IChzLCBpKSB7XG4gIGlmIChpID4+PiAwID49IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSkgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IoKTtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgKHMsIGkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19nZXQxNlxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfdW5zYWZlX2dldCwgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9zdHJpbmdfZ2V0MTYocyxpKSB7XG4gIGlmIChpID4+PiAwID49IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSAtIDEpIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiMSA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgKHMsIGkpLFxuICAgICAgYjIgPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IChzLCBpICsgMSk7XG4gIHJldHVybiAoYjIgPDwgOCB8IGIxKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19nZXQxNlxuLy9SZXF1aXJlczogY2FtbF9ieXRlc191bnNhZmVfZ2V0LCBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX2J5dGVzX2dldDE2KHMsaSkge1xuICBpZiAoaSA+Pj4gMCA+PSBzLmwgLSAxKSBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiMSA9IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCAocywgaSksXG4gICAgICBiMiA9IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCAocywgaSArIDEpO1xuICByZXR1cm4gKGIyIDw8IDggfCBiMSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2dldDMyXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ191bnNhZmVfZ2V0LCBjYW1sX3N0cmluZ19ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19nZXQzMihzLGkpIHtcbiAgaWYgKGkgPj4+IDAgPj0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpIC0gMykgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGIxID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldCAocywgaSksXG4gICAgICBiMiA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgKHMsIGkgKyAxKSxcbiAgICAgIGIzID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldCAocywgaSArIDIpLFxuICAgICAgYjQgPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IChzLCBpICsgMyk7XG4gIHJldHVybiAoYjQgPDwgMjQgfCBiMyA8PCAxNiB8IGIyIDw8IDggfCBiMSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfZ2V0MzJcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCwgY2FtbF9ieXRlc19ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9ieXRlc19nZXQzMihzLGkpIHtcbiAgaWYgKGkgPj4+IDAgPj0gcy5sIC0gMykgY2FtbF9ieXRlc19ib3VuZF9lcnJvcigpO1xuICB2YXIgYjEgPSBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQgKHMsIGkpLFxuICAgICAgYjIgPSBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQgKHMsIGkgKyAxKSxcbiAgICAgIGIzID0gY2FtbF9ieXRlc191bnNhZmVfZ2V0IChzLCBpICsgMiksXG4gICAgICBiNCA9IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCAocywgaSArIDMpO1xuICByZXR1cm4gKGI0IDw8IDI0IHwgYjMgPDwgMTYgfCBiMiA8PCA4IHwgYjEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19nZXQ2NFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfdW5zYWZlX2dldCwgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2ZfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9zdHJpbmdfZ2V0NjQocyxpKSB7XG4gIGlmIChpID4+PiAwID49IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSAtIDcpIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yKCk7XG4gIHZhciBhID0gbmV3IEFycmF5KDgpO1xuICBmb3IodmFyIGogPSAwOyBqIDwgODsgaisrKXtcbiAgICBhWzcgLSBqXSA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgKHMsIGkgKyBqKTtcbiAgfVxuICByZXR1cm4gY2FtbF9pbnQ2NF9vZl9ieXRlcyhhKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19nZXQ2NFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc191bnNhZmVfZ2V0LCBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2J5dGVzX2dldDY0KHMsaSkge1xuICBpZiAoaSA+Pj4gMCA+PSBzLmwgLSA3KSBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yKCk7XG4gIHZhciBhID0gbmV3IEFycmF5KDgpO1xuICBmb3IodmFyIGogPSAwOyBqIDwgODsgaisrKXtcbiAgICBhWzcgLSBqXSA9IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCAocywgaSArIGopO1xuICB9XG4gIHJldHVybiBjYW1sX2ludDY0X29mX2J5dGVzKGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2dldFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19ib3VuZF9lcnJvciwgY2FtbF9ieXRlc191bnNhZmVfZ2V0XG5mdW5jdGlvbiBjYW1sX2J5dGVzX2dldCAocywgaSkge1xuICBpZiAoaSA+Pj4gMCA+PSBzLmwpIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IoKTtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfdW5zYWZlX2dldCAocywgaSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX3NldFxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19zZXQgKHMsIGksIGMpIHtcbiAgY2FtbF9mYWlsd2l0aChcImNhbWxfc3RyaW5nX3NldFwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfc2V0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ191bnNhZmVfc2V0LCBjYW1sX3N0cmluZ19ib3VuZF9lcnJvclxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfc2V0IChzLCBpLCBjKSB7XG4gIGlmIChpID4+PiAwID49IHMubCkgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3IoKTtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX3Vuc2FmZV9zZXQgKHMsIGksIGMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX3NldDE2XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yLCBjYW1sX2J5dGVzX3Vuc2FmZV9zZXRcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfc2V0MTYocyxpLGkxNil7XG4gIGlmIChpID4+PiAwID49IHMubCAtIDEpIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGIyID0gMHhGRiAmIGkxNiA+PiA4LFxuICAgICAgYjEgPSAweEZGICYgaTE2O1xuICBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQgKHMsIGkgKyAwLCBiMSk7XG4gIGNhbWxfYnl0ZXNfdW5zYWZlX3NldCAocywgaSArIDEsIGIyKTtcbiAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfc2V0MTZcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfc2V0MTYocyxpLGkxNil7XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3N0cmluZ19zZXQxNlwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfc2V0MTZcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfc2V0MTZcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3NldDE2KHMsaSxpMTYpe1xuICByZXR1cm4gY2FtbF9ieXRlc19zZXQxNihzLGksaTE2KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19zZXQzMlxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19ib3VuZF9lcnJvciwgY2FtbF9ieXRlc191bnNhZmVfc2V0XG5mdW5jdGlvbiBjYW1sX2J5dGVzX3NldDMyKHMsaSxpMzIpe1xuICBpZiAoaSA+Pj4gMCA+PSBzLmwgLSAzKSBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiNCA9IDB4RkYgJiBpMzIgPj4gMjQsXG4gICAgICBiMyA9IDB4RkYgJiBpMzIgPj4gMTYsXG4gICAgICBiMiA9IDB4RkYgJiBpMzIgPj4gOCxcbiAgICAgIGIxID0gMHhGRiAmIGkzMjtcbiAgY2FtbF9ieXRlc191bnNhZmVfc2V0IChzLCBpICsgMCwgYjEpO1xuICBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQgKHMsIGkgKyAxLCBiMik7XG4gIGNhbWxfYnl0ZXNfdW5zYWZlX3NldCAocywgaSArIDIsIGIzKTtcbiAgY2FtbF9ieXRlc191bnNhZmVfc2V0IChzLCBpICsgMywgYjQpO1xuICByZXR1cm4gMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19zZXQzMlxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19zZXQzMihzLGksaTMyKXtcbiAgY2FtbF9mYWlsd2l0aChcImNhbWxfc3RyaW5nX3NldDMyXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19zZXQzMlxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19zZXQzMlxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfc2V0MzIocyxpLGkzMil7XG4gIHJldHVybiBjYW1sX2J5dGVzX3NldDMyKHMsaSxpMzIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX3NldDY0XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yLCBjYW1sX2J5dGVzX3Vuc2FmZV9zZXRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfdG9fYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfc2V0NjQocyxpLGk2NCl7XG4gIGlmIChpID4+PiAwID49IHMubCAtIDcpIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGEgPSBjYW1sX2ludDY0X3RvX2J5dGVzKGk2NCk7XG4gIGZvcih2YXIgaiA9IDA7IGogPCA4OyBqKyspIHtcbiAgICBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQgKHMsIGkgKyA3IC0gaiwgYVtqXSk7XG4gIH1cbiAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfc2V0NjRcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfc2V0NjQocyxpLGk2NCl7XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3N0cmluZ19zZXQ2NFwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfc2V0NjRcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfc2V0NjRcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3NldDY0KHMsaSxpNjQpe1xuICByZXR1cm4gY2FtbF9ieXRlc19zZXQ2NChzLGksaTY0KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19zZXRcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IsIGNhbWxfYnl0ZXNfdW5zYWZlX3NldFxuZnVuY3Rpb24gY2FtbF9ieXRlc19zZXQgKHMsIGksIGMpIHtcbiAgaWYgKGkgPj4+IDAgPj0gcy5sKSBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yKCk7XG4gIHJldHVybiBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQgKHMsIGksIGMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX29mX3V0ZjE2X2pzc3RyaW5nXG4vL1JlcXVpcmVzOiBqc29vX2lzX2FzY2lpLCBjYW1sX3V0Zjhfb2ZfdXRmMTYsIE1sQnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfb2ZfdXRmMTZfanNzdHJpbmcgKHMpIHtcbiAgdmFyIHRhZyA9IDkgLyogQllURVMgfCBBU0NJSSAqLztcbiAgaWYgKCFqc29vX2lzX2FzY2lpKHMpKVxuICAgIHRhZyA9IDggLyogQllURVMgfCBOT1RfQVNDSUkgKi8sIHMgPSBjYW1sX3V0Zjhfb2ZfdXRmMTYocyk7XG4gIHJldHVybiBuZXcgTWxCeXRlcyh0YWcsIHMsIHMubGVuZ3RoKTtcbn1cblxuXG4vL1Byb3ZpZGVzOiBNbEJ5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzLCBqc29vX2lzX2FzY2lpLCBjYW1sX3V0ZjE2X29mX3V0ZjhcbmZ1bmN0aW9uIE1sQnl0ZXMgKHRhZywgY29udGVudHMsIGxlbmd0aCkge1xuICB0aGlzLnQ9dGFnOyB0aGlzLmM9Y29udGVudHM7IHRoaXMubD1sZW5ndGg7XG59XG5NbEJ5dGVzLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCl7XG4gIHN3aXRjaCAodGhpcy50KSB7XG4gIGNhc2UgOTogLypCWVRFUyB8IEFTQ0lJKi9cbiAgICByZXR1cm4gdGhpcy5jO1xuICBkZWZhdWx0OlxuICAgIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXModGhpcyk7XG4gIGNhc2UgMDogLypCWVRFUyB8IFVOS09XTiovXG4gICAgaWYgKGpzb29faXNfYXNjaWkodGhpcy5jKSkge1xuICAgICAgdGhpcy50ID0gOTsgLypCWVRFUyB8IEFTQ0lJKi9cbiAgICAgIHJldHVybiB0aGlzLmM7XG4gICAgfVxuICAgIHRoaXMudCA9IDg7IC8qQllURVMgfCBOT1RfQVNDSUkqL1xuICBjYXNlIDg6IC8qQllURVMgfCBOT1RfQVNDSUkqL1xuICAgIHJldHVybiB0aGlzLmM7XG4gIH1cbn07XG5NbEJ5dGVzLnByb3RvdHlwZS50b1V0ZjE2ID0gZnVuY3Rpb24gKCl7XG4gIHZhciByID0gdGhpcy50b1N0cmluZygpO1xuICBpZih0aGlzLnQgPT0gOSkgcmV0dXJuIHJcbiAgcmV0dXJuIGNhbWxfdXRmMTZfb2ZfdXRmOChyKTtcbn1cbk1sQnl0ZXMucHJvdG90eXBlLnNsaWNlID0gZnVuY3Rpb24gKCl7XG4gIHZhciBjb250ZW50ID0gdGhpcy50ID09IDQgPyB0aGlzLmMuc2xpY2UoKSA6IHRoaXMuYztcbiAgcmV0dXJuIG5ldyBNbEJ5dGVzKHRoaXMudCxjb250ZW50LHRoaXMubCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfc3RyX3JlcGVhdCwgY2FtbF9zdWJhcnJheV90b19qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzIChzKSB7XG4gIC8qIEFzc3VtZXMgbm90IEJZVEVTICovXG4gIGlmIChzLnQgPT0gMiAvKiBQQVJUSUFMICovKVxuICAgIHMuYyArPSBjYW1sX3N0cl9yZXBlYXQocy5sIC0gcy5jLmxlbmd0aCwgJ1xcMCcpXG4gIGVsc2VcbiAgICBzLmMgPSBjYW1sX3N1YmFycmF5X3RvX2pzYnl0ZXMgKHMuYywgMCwgcy5jLmxlbmd0aCk7XG4gIHMudCA9IDA7IC8qQllURVMgfCBVTktPV04qL1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfY29udmVydF9ieXRlc190b19hcnJheSAocykge1xuICAvKiBBc3N1bWVzIG5vdCBBUlJBWSAqL1xuICBpZihnbG9iYWxUaGlzLlVpbnQ4QXJyYXkpIHtcbiAgICB2YXIgYSA9IG5ldyBnbG9iYWxUaGlzLlVpbnQ4QXJyYXkocy5sKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgYSA9IG5ldyBBcnJheShzLmwpO1xuICB9XG4gIHZhciBiID0gcy5jLCBsID0gYi5sZW5ndGgsIGkgPSAwO1xuICBmb3IgKDsgaSA8IGw7IGkrKykgYVtpXSA9IGIuY2hhckNvZGVBdChpKTtcbiAgZm9yIChsID0gcy5sOyBpIDwgbDsgaSsrKSBhW2ldID0gMDtcbiAgcy5jID0gYTtcbiAgcy50ID0gNDsgLyogQVJSQVkgKi9cbiAgcmV0dXJuIGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfb2ZfYnl0ZXMgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5XG5mdW5jdGlvbiBjYW1sX2FycmF5X29mX2J5dGVzIChzKSB7XG4gIGlmIChzLnQgIT0gNCAvKiBBUlJBWSAqLykgY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5KHMpO1xuICByZXR1cm4gcy5jO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X29mX3N0cmluZyBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aCwgY2FtbF9zdHJpbmdfdW5zYWZlX2dldFxuZnVuY3Rpb24gY2FtbF9hcnJheV9vZl9zdHJpbmcgKHMpIHtcbiAgdmFyIGwgPSBjYW1sX21sX3N0cmluZ19sZW5ndGgocyk7XG4gIHZhciBhID0gbmV3IEFycmF5KGwpO1xuICB2YXIgaSA9IDA7XG4gIGZvciAoOyBpIDwgbDsgaSsrKSBhW2ldID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldChzLGkpO1xuICByZXR1cm4gYTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jcmVhdGVfc3RyaW5nIGNvbnN0XG4vL1JlcXVpcmVzOiBNbEJ5dGVzLCBjYW1sX2ludmFsaWRfYXJndW1lbnRcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfY3JlYXRlX3N0cmluZyhsZW4pIHtcbiAgaWYobGVuIDwgMCkgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiU3RyaW5nLmNyZWF0ZVwiKTtcbiAgcmV0dXJuIG5ldyBNbEJ5dGVzKGxlbj8yOjksXCJcIixsZW4pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NyZWF0ZV9zdHJpbmcgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2NyZWF0ZV9zdHJpbmcobGVuKSB7XG4gIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIlN0cmluZy5jcmVhdGVcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY3JlYXRlX2J5dGVzIGNvbnN0XG4vL1JlcXVpcmVzOiBNbEJ5dGVzLGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9jcmVhdGVfYnl0ZXMobGVuKSB7XG4gIGlmIChsZW4gPCAwKSBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCeXRlcy5jcmVhdGVcIik7XG4gIHJldHVybiBuZXcgTWxCeXRlcyhsZW4/Mjo5LFwiXCIsbGVuKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfb2ZfYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfc3ViYXJyYXlfdG9fanNieXRlcywgY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfb2ZfYXJyYXkgKGEpIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoY2FtbF9zdWJhcnJheV90b19qc2J5dGVzKGEsMCxhLmxlbmd0aCkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX29mX2FycmF5XG4vL1JlcXVpcmVzOiBNbEJ5dGVzXG5mdW5jdGlvbiBjYW1sX2J5dGVzX29mX2FycmF5IChhKSB7XG4gIHJldHVybiBuZXcgTWxCeXRlcyg0LGEsYS5sZW5ndGgpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2NvbXBhcmUgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlc1xuZnVuY3Rpb24gY2FtbF9ieXRlc19jb21wYXJlKHMxLCBzMikge1xuICAoczEudCAmIDYpICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczEpO1xuICAoczIudCAmIDYpICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczIpO1xuICByZXR1cm4gKHMxLmMgPCBzMi5jKT8tMTooczEuYyA+IHMyLmMpPzE6MDtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2VxdWFsIG11dGFibGUgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfZXF1YWwoczEsIHMyKSB7XG4gIGlmKHMxID09PSBzMikgcmV0dXJuIDE7XG4gIChzMS50ICYgNikgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzMSk7XG4gIChzMi50ICYgNikgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzMik7XG4gIHJldHVybiAoczEuYyA9PSBzMi5jKT8xOjA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX25vdGVxdWFsIG11dGFibGUgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX2VxdWFsXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19ub3RlcXVhbChzMSwgczIpIHsgcmV0dXJuIDEtY2FtbF9zdHJpbmdfZXF1YWwoczEsIHMyKTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX25vdGVxdWFsIG11dGFibGUgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfZXF1YWxcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfbm90ZXF1YWwoczEsIHMyKSB7IHJldHVybiAxLWNhbWxfYnl0ZXNfZXF1YWwoczEsIHMyKTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2xlc3NlcXVhbCBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2J5dGVzX2xlc3NlcXVhbChzMSwgczIpIHtcbiAgKHMxLnQgJiA2KSAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMxKTtcbiAgKHMyLnQgJiA2KSAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMyKTtcbiAgcmV0dXJuIChzMS5jIDw9IHMyLmMpPzE6MDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19sZXNzdGhhbiBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2J5dGVzX2xlc3N0aGFuKHMxLCBzMikge1xuICAoczEudCAmIDYpICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczEpO1xuICAoczIudCAmIDYpICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczIpO1xuICByZXR1cm4gKHMxLmMgPCBzMi5jKT8xOjA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2dyZWF0ZXJlcXVhbFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfbGVzc2VxdWFsXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19ncmVhdGVyZXF1YWwoczEsIHMyKSB7XG4gIHJldHVybiBjYW1sX3N0cmluZ19sZXNzZXF1YWwoczIsczEpO1xufVxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19ncmVhdGVyZXF1YWxcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfbGVzc2VxdWFsXG5mdW5jdGlvbiBjYW1sX2J5dGVzX2dyZWF0ZXJlcXVhbChzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfbGVzc2VxdWFsKHMyLHMxKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfZ3JlYXRlcnRoYW5cbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX2xlc3N0aGFuXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19ncmVhdGVydGhhbihzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX2xlc3N0aGFuKHMyLCBzMSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfZ3JlYXRlcnRoYW5cbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfbGVzc3RoYW5cbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfZ3JlYXRlcnRoYW4oczEsIHMyKSB7XG4gIHJldHVybiBjYW1sX2J5dGVzX2xlc3N0aGFuKHMyLCBzMSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZmlsbF9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9zdHJfcmVwZWF0LCBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfZmlsbF9ieXRlcyhzLCBpLCBsLCBjKSB7XG4gIGlmIChsID4gMCkge1xuICAgIGlmIChpID09IDAgJiYgKGwgPj0gcy5sIHx8IChzLnQgPT0gMiAvKiBQQVJUSUFMICovICYmIGwgPj0gcy5jLmxlbmd0aCkpKSB7XG4gICAgICBpZiAoYyA9PSAwKSB7XG4gICAgICAgIHMuYyA9IFwiXCI7XG4gICAgICAgIHMudCA9IDI7IC8qIFBBUlRJQUwgKi9cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMuYyA9IGNhbWxfc3RyX3JlcGVhdCAobCwgU3RyaW5nLmZyb21DaGFyQ29kZShjKSk7XG4gICAgICAgIHMudCA9IChsID09IHMubCk/MCAvKiBCWVRFUyB8IFVOS09XTiAqLyA6MjsgLyogUEFSVElBTCAqL1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocy50ICE9IDQgLyogQVJSQVkgKi8pIGNhbWxfY29udmVydF9ieXRlc190b19hcnJheShzKTtcbiAgICAgIGZvciAobCArPSBpOyBpIDwgbDsgaSsrKSBzLmNbaV0gPSBjO1xuICAgIH1cbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9maWxsX3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9maWxsX2J5dGVzXG52YXIgY2FtbF9maWxsX3N0cmluZyA9IGNhbWxfZmlsbF9ieXRlc1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2JsaXRfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfc3ViYXJyYXlfdG9fanNieXRlcywgY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5XG5mdW5jdGlvbiBjYW1sX2JsaXRfYnl0ZXMoczEsIGkxLCBzMiwgaTIsIGxlbikge1xuICBpZiAobGVuID09IDApIHJldHVybiAwO1xuICBpZiAoKGkyID09IDApICYmXG4gICAgICAobGVuID49IHMyLmwgfHwgKHMyLnQgPT0gMiAvKiBQQVJUSUFMICovICYmIGxlbiA+PSBzMi5jLmxlbmd0aCkpKSB7XG4gICAgczIuYyA9IChzMS50ID09IDQgLyogQVJSQVkgKi8pP1xuICAgICAgY2FtbF9zdWJhcnJheV90b19qc2J5dGVzKHMxLmMsIGkxLCBsZW4pOlxuICAgICAgKGkxID09IDAgJiYgczEuYy5sZW5ndGggPT0gbGVuKT9zMS5jOnMxLmMuc3Vic3RyKGkxLCBsZW4pO1xuICAgIHMyLnQgPSAoczIuYy5sZW5ndGggPT0gczIubCk/MCAvKiBCWVRFUyB8IFVOS09XTiAqLyA6MjsgLyogUEFSVElBTCAqL1xuICB9IGVsc2UgaWYgKHMyLnQgPT0gMiAvKiBQQVJUSUFMICovICYmIGkyID09IHMyLmMubGVuZ3RoKSB7XG4gICAgczIuYyArPSAoczEudCA9PSA0IC8qIEFSUkFZICovKT9cbiAgICAgIGNhbWxfc3ViYXJyYXlfdG9fanNieXRlcyhzMS5jLCBpMSwgbGVuKTpcbiAgICAgIChpMSA9PSAwICYmIHMxLmMubGVuZ3RoID09IGxlbik/czEuYzpzMS5jLnN1YnN0cihpMSwgbGVuKTtcbiAgICBzMi50ID0gKHMyLmMubGVuZ3RoID09IHMyLmwpPzAgLyogQllURVMgfCBVTktPV04gKi8gOjI7IC8qIFBBUlRJQUwgKi9cbiAgfSBlbHNlIHtcbiAgICBpZiAoczIudCAhPSA0IC8qIEFSUkFZICovKSBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXkoczIpO1xuICAgIHZhciBjMSA9IHMxLmMsIGMyID0gczIuYztcbiAgICBpZiAoczEudCA9PSA0IC8qIEFSUkFZICovKSB7XG4gICAgICBpZiAoaTIgPD0gaTEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgYzIgW2kyICsgaV0gPSBjMSBbaTEgKyBpXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAodmFyIGkgPSBsZW4gLSAxOyBpID49IDA7IGktLSkgYzIgW2kyICsgaV0gPSBjMSBbaTEgKyBpXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGwgPSBNYXRoLm1pbiAobGVuLCBjMS5sZW5ndGggLSBpMSk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkrKykgYzIgW2kyICsgaV0gPSBjMS5jaGFyQ29kZUF0KGkxICsgaSk7XG4gICAgICBmb3IgKDsgaSA8IGxlbjsgaSsrKSBjMiBbaTIgKyBpXSA9IDA7XG4gICAgfVxuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JsaXRfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2JsaXRfYnl0ZXMsIGNhbWxfYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2JsaXRfc3RyaW5nKGEsYixjLGQsZSkge1xuICBjYW1sX2JsaXRfYnl0ZXMoY2FtbF9ieXRlc19vZl9zdHJpbmcoYSksYixjLGQsZSk7XG4gIHJldHVybiAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfYnl0ZXNfbGVuZ3RoIGNvbnN0XG5mdW5jdGlvbiBjYW1sX21sX2J5dGVzX2xlbmd0aChzKSB7IHJldHVybiBzLmwgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IGNvbnN0XG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgKHMsIGkpIHtcbiAgcmV0dXJuIHMuY2hhckNvZGVBdChpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfdW5zYWZlX3NldFxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ191bnNhZmVfc2V0IChzLCBpLCBjKSB7XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3N0cmluZ191bnNhZmVfc2V0XCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGggY29uc3Rcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpIHtcbiAgcmV0dXJuIHMubGVuZ3RoXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2NvbXBhcmUgY29uc3Rcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfY29tcGFyZShzMSwgczIpIHtcbiAgcmV0dXJuIChzMSA8IHMyKT8tMTooczEgPiBzMik/MTowO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19lcXVhbCBjb25zdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19lcXVhbChzMSwgczIpIHtcbiAgaWYoczEgPT09IHMyKSByZXR1cm4gMTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2xlc3NlcXVhbCBjb25zdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19sZXNzZXF1YWwoczEsIHMyKSB7XG4gIHJldHVybiAoczEgPD0gczIpPzE6MDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfbGVzc3RoYW4gY29uc3Rcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfbGVzc3RoYW4oczEsIHMyKSB7XG4gIHJldHVybiAoczEgPCBzMik/MTowO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19vZl9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcywgY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19vZl9ieXRlcyhzKSB7XG4gIChzLnQgJiA2KSAmJiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMpO1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhzLmMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX29mX3N0cmluZyBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19vZl9qc2J5dGVzLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKHMpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfb2ZfanNieXRlcyhjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHMpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlcyBjb25zdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKHgpIHsgcmV0dXJuIHggfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nIGNvbnN0XG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNieXRlc19vZl9zdHJpbmcoeCkgeyByZXR1cm4geCB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nIGNvbnN0XG4vL1JlcXVpcmVzOiBqc29vX2lzX2FzY2lpLCBjYW1sX3V0ZjE2X29mX3V0Zjhcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcocykge1xuICBpZihqc29vX2lzX2FzY2lpKHMpKVxuICAgIHJldHVybiBzO1xuICByZXR1cm4gY2FtbF91dGYxNl9vZl91dGY4KHMpOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nIGNvbnN0XG4vL1JlcXVpcmVzOiBqc29vX2lzX2FzY2lpLCBjYW1sX3V0Zjhfb2ZfdXRmMTYsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcgKHMpIHtcbiAgaWYgKGpzb29faXNfYXNjaWkocykpXG4gICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMocylcbiAgZWxzZSByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhjYW1sX3V0Zjhfb2ZfdXRmMTYocykpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX29mX2pzYnl0ZXMgY29uc3Rcbi8vUmVxdWlyZXM6IE1sQnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfb2ZfanNieXRlcyhzKSB7IHJldHVybiBuZXcgTWxCeXRlcygwLHMscy5sZW5ndGgpOyB9XG5cblxuLy8gVGhlIHNlY3Rpb24gYmVsb3cgc2hvdWxkIGJlIHVzZWQgd2hlbiB1c2UtanMtc3RyaW5nPWZhbHNlXG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfdW5zYWZlX2dldFxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfdW5zYWZlX2dldCAocywgaSkge1xuICByZXR1cm4gY2FtbF9ieXRlc191bnNhZmVfZ2V0KHMsaSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX3Vuc2FmZV9zZXRcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfdW5zYWZlX3NldFxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfdW5zYWZlX3NldCAocywgaSwgYykge1xuICByZXR1cm4gY2FtbF9ieXRlc191bnNhZmVfc2V0KHMsaSxjKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX21sX2J5dGVzX2xlbmd0aFxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpIHtcbiAgcmV0dXJuIGNhbWxfbWxfYnl0ZXNfbGVuZ3RoKHMpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2NvbXBhcmVcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfY29tcGFyZVxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfY29tcGFyZShzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfY29tcGFyZShzMSxzMilcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfZXF1YWxcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfZXF1YWxcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2VxdWFsKHMxLCBzMikge1xuICByZXR1cm4gY2FtbF9ieXRlc19lcXVhbChzMSxzMilcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfbGVzc2VxdWFsXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2xlc3NlcXVhbFxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfbGVzc2VxdWFsKHMxLCBzMikge1xuICByZXR1cm4gY2FtbF9ieXRlc19sZXNzZXF1YWwoczEsczIpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2xlc3N0aGFuXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2xlc3N0aGFuXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19sZXNzdGhhbihzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfbGVzc3RoYW4oczEsczIpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX29mX2J5dGVzXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19vZl9ieXRlcyhzKSB7IHJldHVybiBzIH1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19vZl9zdHJpbmcgY29uc3Rcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKHMpIHsgcmV0dXJuIHMgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX29mX2pzYnl0ZXNcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMocykgeyByZXR1cm4gY2FtbF9ieXRlc19vZl9qc2J5dGVzKHMpOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNieXRlc19vZl9zdHJpbmcgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXNcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNieXRlc19vZl9zdHJpbmcocykge1xuICAocy50ICYgNikgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzKTtcbiAgcmV0dXJuIHMuYyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nIG11dGFibGUgKGNvbnN0KVxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcocyl7XG4gIHJldHVybiBzLnRvVXRmMTYoKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9ieXRlc19vZl91dGYxNl9qc3N0cmluZ1xuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcgKHMpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfb2ZfdXRmMTZfanNzdHJpbmcocyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaXNfbWxfYnl0ZXNcbi8vUmVxdWlyZXM6IE1sQnl0ZXNcbmZ1bmN0aW9uIGNhbWxfaXNfbWxfYnl0ZXMocykge1xuICByZXR1cm4gKHMgaW5zdGFuY2VvZiBNbEJ5dGVzKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9ieXRlc19jb250ZW50XG4vL1JlcXVpcmVzOiBNbEJ5dGVzLCBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzXG5mdW5jdGlvbiBjYW1sX21sX2J5dGVzX2NvbnRlbnQocykge1xuICBzd2l0Y2ggKHMudCAmIDYpIHtcbiAgZGVmYXVsdDogLyogUEFSVElBTCAqL1xuICAgIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMocyk7XG4gIGNhc2UgMDogLyogQllURVMgKi9cbiAgICByZXR1cm4gcy5jO1xuICBjYXNlIDQ6XG4gICAgcmV0dXJuIHMuY1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaXNfbWxfc3RyaW5nXG4vL1JlcXVpcmVzOiBqc29vX2lzX2FzY2lpXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfaXNfbWxfc3RyaW5nKHMpIHtcbiAgcmV0dXJuICh0eXBlb2YgcyA9PT0gXCJzdHJpbmdcIiAmJiAhL1teXFx4MDAtXFx4ZmZdLy50ZXN0KHMpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pc19tbF9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfaXNfbWxfYnl0ZXNcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfaXNfbWxfc3RyaW5nKHMpIHtcbiAgcmV0dXJuIGNhbWxfaXNfbWxfYnl0ZXMocyk7XG59XG5cbi8vIFRoZSBmdW5jdGlvbnMgYmVsb3cgYXJlIGRlcHJlY2F0ZWRcblxuLy9Qcm92aWRlczogY2FtbF9qc190b19ieXRlX3N0cmluZyBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9qc190b19ieXRlX3N0cmluZyhzKSB7IHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKHMpIH1cblxuLy9Qcm92aWRlczogY2FtbF9uZXdfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX25ld19zdHJpbmcgKHMpIHsgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMocykgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2Zyb21fc3RyaW5nIG11dGFibGUgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNfZnJvbV9zdHJpbmcocykge1xuICByZXR1cm4gY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcocylcbn1cblxuLy9Qcm92aWRlczogY2FtbF90b19qc19zdHJpbmcgbXV0YWJsZSAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF90b19qc19zdHJpbmcocykge1xuICByZXR1cm4gY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcocylcbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc190b19zdHJpbmcgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzX3RvX3N0cmluZyAocykge1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcocyk7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1JhaXNlIGV4Y2VwdGlvblxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX2NvbnN0YW50IChjb25zdClcbmZ1bmN0aW9uIGNhbWxfcmFpc2VfY29uc3RhbnQgKHRhZykgeyB0aHJvdyB0YWc7IH1cblxuLy9Qcm92aWRlczogY2FtbF9yZXR1cm5fZXhuX2NvbnN0YW50IChjb25zdClcbmZ1bmN0aW9uIGNhbWxfcmV0dXJuX2V4bl9jb25zdGFudCAodGFnKSB7IHJldHVybiB0YWc7IH1cblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV93aXRoX2FyZyAoY29uc3QsIGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9yYWlzZV93aXRoX2FyZyAodGFnLCBhcmcpIHsgdGhyb3cgWzAsIHRhZywgYXJnXTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX3dpdGhfYXJncyAoY29uc3QsIGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9yYWlzZV93aXRoX2FyZ3MgKHRhZywgYXJncykgeyB0aHJvdyBbMCwgdGFnXS5jb25jYXQoYXJncyk7IH1cblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV93aXRoX3N0cmluZyAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV93aXRoX2FyZywgY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9yYWlzZV93aXRoX3N0cmluZyAodGFnLCBtc2cpIHtcbiAgY2FtbF9yYWlzZV93aXRoX2FyZyAodGFnLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKG1zZykpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ZhaWx3aXRoIChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfd2l0aF9zdHJpbmcsIGNhbWxfZ2xvYmFsX2RhdGEsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfZmFpbHdpdGggKG1zZykge1xuICBpZighY2FtbF9nbG9iYWxfZGF0YS5GYWlsdXJlKVxuICAgIGNhbWxfZ2xvYmFsX2RhdGEuRmFpbHVyZT1bMjQ4LGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoXCJGYWlsdXJlXCIpLC0zXTtcbiAgY2FtbF9yYWlzZV93aXRoX3N0cmluZyhjYW1sX2dsb2JhbF9kYXRhLkZhaWx1cmUsIG1zZyk7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfd2l0aF9zdHJpbmcsIGNhbWxfZ2xvYmFsX2RhdGFcbmZ1bmN0aW9uIGNhbWxfaW52YWxpZF9hcmd1bWVudCAobXNnKSB7XG4gIGNhbWxfcmFpc2Vfd2l0aF9zdHJpbmcoY2FtbF9nbG9iYWxfZGF0YS5JbnZhbGlkX2FyZ3VtZW50LCBtc2cpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX2VuZF9vZl9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX2NvbnN0YW50LCBjYW1sX2dsb2JhbF9kYXRhXG5mdW5jdGlvbiBjYW1sX3JhaXNlX2VuZF9vZl9maWxlICgpIHtcbiAgY2FtbF9yYWlzZV9jb25zdGFudChjYW1sX2dsb2JhbF9kYXRhLkVuZF9vZl9maWxlKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV96ZXJvX2RpdmlkZVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9jb25zdGFudCwgY2FtbF9nbG9iYWxfZGF0YVxuZnVuY3Rpb24gY2FtbF9yYWlzZV96ZXJvX2RpdmlkZSAoKSB7XG4gIGNhbWxfcmFpc2VfY29uc3RhbnQoY2FtbF9nbG9iYWxfZGF0YS5EaXZpc2lvbl9ieV96ZXJvKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV9ub3RfZm91bmRcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2VfY29uc3RhbnQsIGNhbWxfZ2xvYmFsX2RhdGFcbmZ1bmN0aW9uIGNhbWxfcmFpc2Vfbm90X2ZvdW5kICgpIHtcbiAgY2FtbF9yYWlzZV9jb25zdGFudChjYW1sX2dsb2JhbF9kYXRhLk5vdF9mb3VuZCk7IH1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IgKCkge1xuICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJpbmRleCBvdXQgb2YgYm91bmRzXCIpO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwIErDqXLDtG1lIFZvdWlsbG9uXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGNhbWxfY2FsbF9nZW4gKGNvbnN0LCBzaGFsbG93KVxuLy9XZWFrZGVmXG5mdW5jdGlvbiBjYW1sX2NhbGxfZ2VuKGYsIGFyZ3MpIHtcbiAgaWYoZi5mdW4pXG4gICAgcmV0dXJuIGNhbWxfY2FsbF9nZW4oZi5mdW4sIGFyZ3MpO1xuICAvL0ZJWE1FLCBjYW4gaGFwcGVuIHdpdGggdG9vIG1hbnkgYXJndW1lbnRzXG4gIGlmKHR5cGVvZiBmICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiBmO1xuICB2YXIgbiA9IGYubGVuZ3RoIHwgMDtcbiAgaWYobiA9PT0gMCkgcmV0dXJuIGYuYXBwbHkobnVsbCxhcmdzKTtcbiAgdmFyIGFyZ3NMZW4gPSBhcmdzLmxlbmd0aCB8IDA7XG4gIHZhciBkID0gbiAtIGFyZ3NMZW4gfCAwO1xuICBpZiAoZCA9PSAwKVxuICAgIHJldHVybiBmLmFwcGx5KG51bGwsIGFyZ3MpO1xuICBlbHNlIGlmIChkIDwgMCkge1xuICAgIHJldHVybiBjYW1sX2NhbGxfZ2VuKGYuYXBwbHkobnVsbCxhcmdzLnNsaWNlKDAsbikpLGFyZ3Muc2xpY2UobikpO1xuICB9XG4gIGVsc2Uge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKXtcbiAgICAgIHZhciBleHRyYV9hcmdzID0gKGFyZ3VtZW50cy5sZW5ndGggPT0gMCk/MTphcmd1bWVudHMubGVuZ3RoO1xuICAgICAgdmFyIG5hcmdzID0gbmV3IEFycmF5KGFyZ3MubGVuZ3RoK2V4dHJhX2FyZ3MpO1xuICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKysgKSBuYXJnc1tpXSA9IGFyZ3NbaV07XG4gICAgICBmb3IodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrICkgbmFyZ3NbYXJncy5sZW5ndGgraV0gPSBhcmd1bWVudHNbaV07XG4gICAgICByZXR1cm4gY2FtbF9jYWxsX2dlbihmLCBuYXJncylcbiAgICB9XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9uYW1lZF92YWx1ZXNcbnZhciBjYW1sX25hbWVkX3ZhbHVlcyA9IHt9O1xuXG4vL1Byb3ZpZGVzOiBjYW1sX3JlZ2lzdGVyX25hbWVkX3ZhbHVlIChjb25zdCxjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfbmFtZWRfdmFsdWVzLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3JlZ2lzdGVyX25hbWVkX3ZhbHVlKG5tLHYpIHtcbiAgY2FtbF9uYW1lZF92YWx1ZXNbY2FtbF9qc2J5dGVzX29mX3N0cmluZyhubSldID0gdjtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbmFtZWRfdmFsdWVcbi8vUmVxdWlyZXM6IGNhbWxfbmFtZWRfdmFsdWVzXG5mdW5jdGlvbiBjYW1sX25hbWVkX3ZhbHVlKG5tKSB7XG4gIHJldHVybiBjYW1sX25hbWVkX3ZhbHVlc1tubV1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9nbG9iYWxfZGF0YVxudmFyIGNhbWxfZ2xvYmFsX2RhdGEgPSBbMF07XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmVnaXN0ZXJfZ2xvYmFsIChjb25zdCwgc2hhbGxvdywgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2dsb2JhbF9kYXRhXG5mdW5jdGlvbiBjYW1sX3JlZ2lzdGVyX2dsb2JhbCAobiwgdiwgbmFtZV9vcHQpIHtcbiAgaWYobmFtZV9vcHQgJiYgZ2xvYmFsVGhpcy50b3BsZXZlbFJlbG9jKVxuICAgIG4gPSBnbG9iYWxUaGlzLnRvcGxldmVsUmVsb2MobmFtZV9vcHQpO1xuICBjYW1sX2dsb2JhbF9kYXRhW24gKyAxXSA9IHY7XG4gIGlmKG5hbWVfb3B0KSBjYW1sX2dsb2JhbF9kYXRhW25hbWVfb3B0XSA9IHY7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ2V0X2dsb2JhbF9kYXRhIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfZ2xvYmFsX2RhdGFcbmZ1bmN0aW9uIGNhbWxfZ2V0X2dsb2JhbF9kYXRhICgpIHsgcmV0dXJuIGNhbWxfZ2xvYmFsX2RhdGE7IH1cblxuLy9Qcm92aWRlczogY2FtbF9pc19wcmludGFibGUgY29uc3QgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9pc19wcmludGFibGUoYykgeyByZXR1cm4gKyhjID4gMzEgJiYgYyA8IDEyNyk7IH1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vLy8vLy8vLy8vLy8gRm9ybWF0XG5cbi8vUHJvdmlkZXM6IGNhbWxfcGFyc2VfZm9ybWF0XG4vL1JlcXVpcmVzOiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nLCBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfcGFyc2VfZm9ybWF0IChmbXQpIHtcbiAgZm10ID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhmbXQpO1xuICB2YXIgbGVuID0gZm10Lmxlbmd0aDtcbiAgaWYgKGxlbiA+IDMxKSBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJmb3JtYXRfaW50OiBmb3JtYXQgdG9vIGxvbmdcIik7XG4gIHZhciBmID1cbiAgICAgIHsganVzdGlmeTonKycsIHNpZ25zdHlsZTonLScsIGZpbGxlcjonICcsIGFsdGVybmF0ZTpmYWxzZSxcbiAgICAgICAgYmFzZTowLCBzaWduZWRjb252OmZhbHNlLCB3aWR0aDowLCB1cHBlcmNhc2U6ZmFsc2UsXG4gICAgICAgIHNpZ246MSwgcHJlYzotMSwgY29udjonZicgfTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIHZhciBjID0gZm10LmNoYXJBdChpKTtcbiAgICBzd2l0Y2ggKGMpIHtcbiAgICBjYXNlICctJzpcbiAgICAgIGYuanVzdGlmeSA9ICctJzsgYnJlYWs7XG4gICAgY2FzZSAnKyc6IGNhc2UgJyAnOlxuICAgICAgZi5zaWduc3R5bGUgPSBjOyBicmVhaztcbiAgICBjYXNlICcwJzpcbiAgICAgIGYuZmlsbGVyID0gJzAnOyBicmVhaztcbiAgICBjYXNlICcjJzpcbiAgICAgIGYuYWx0ZXJuYXRlID0gdHJ1ZTsgYnJlYWs7XG4gICAgY2FzZSAnMSc6IGNhc2UgJzInOiBjYXNlICczJzogY2FzZSAnNCc6IGNhc2UgJzUnOlxuICAgIGNhc2UgJzYnOiBjYXNlICc3JzogY2FzZSAnOCc6IGNhc2UgJzknOlxuICAgICAgZi53aWR0aCA9IDA7XG4gICAgICB3aGlsZSAoYz1mbXQuY2hhckNvZGVBdChpKSAtIDQ4LCBjID49IDAgJiYgYyA8PSA5KSB7XG4gICAgICAgIGYud2lkdGggPSBmLndpZHRoICogMTAgKyBjOyBpKytcbiAgICAgIH1cbiAgICAgIGktLTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJy4nOlxuICAgICAgZi5wcmVjID0gMDtcbiAgICAgIGkrKztcbiAgICAgIHdoaWxlIChjPWZtdC5jaGFyQ29kZUF0KGkpIC0gNDgsIGMgPj0gMCAmJiBjIDw9IDkpIHtcbiAgICAgICAgZi5wcmVjID0gZi5wcmVjICogMTAgKyBjOyBpKytcbiAgICAgIH1cbiAgICAgIGktLTtcbiAgICBjYXNlICdkJzogY2FzZSAnaSc6XG4gICAgICBmLnNpZ25lZGNvbnYgPSB0cnVlOyAvKiBmYWxsdGhyb3VnaCAqL1xuICAgIGNhc2UgJ3UnOlxuICAgICAgZi5iYXNlID0gMTA7IGJyZWFrO1xuICAgIGNhc2UgJ3gnOlxuICAgICAgZi5iYXNlID0gMTY7IGJyZWFrO1xuICAgIGNhc2UgJ1gnOlxuICAgICAgZi5iYXNlID0gMTY7IGYudXBwZXJjYXNlID0gdHJ1ZTsgYnJlYWs7XG4gICAgY2FzZSAnbyc6XG4gICAgICBmLmJhc2UgPSA4OyBicmVhaztcbiAgICBjYXNlICdlJzogY2FzZSAnZic6IGNhc2UgJ2cnOlxuICAgICAgZi5zaWduZWRjb252ID0gdHJ1ZTsgZi5jb252ID0gYzsgYnJlYWs7XG4gICAgY2FzZSAnRSc6IGNhc2UgJ0YnOiBjYXNlICdHJzpcbiAgICAgIGYuc2lnbmVkY29udiA9IHRydWU7IGYudXBwZXJjYXNlID0gdHJ1ZTtcbiAgICAgIGYuY29udiA9IGMudG9Mb3dlckNhc2UgKCk7IGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9maW5pc2hfZm9ybWF0dGluZ1xuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9maW5pc2hfZm9ybWF0dGluZyhmLCByYXdidWZmZXIpIHtcbiAgaWYgKGYudXBwZXJjYXNlKSByYXdidWZmZXIgPSByYXdidWZmZXIudG9VcHBlckNhc2UoKTtcbiAgdmFyIGxlbiA9IHJhd2J1ZmZlci5sZW5ndGg7XG4gIC8qIEFkanVzdCBsZW4gdG8gcmVmbGVjdCBhZGRpdGlvbmFsIGNoYXJzIChzaWduLCBldGMpICovXG4gIGlmIChmLnNpZ25lZGNvbnYgJiYgKGYuc2lnbiA8IDAgfHwgZi5zaWduc3R5bGUgIT0gJy0nKSkgbGVuKys7XG4gIGlmIChmLmFsdGVybmF0ZSkge1xuICAgIGlmIChmLmJhc2UgPT0gOCkgbGVuICs9IDE7XG4gICAgaWYgKGYuYmFzZSA9PSAxNikgbGVuICs9IDI7XG4gIH1cbiAgLyogRG8gdGhlIGZvcm1hdHRpbmcgKi9cbiAgdmFyIGJ1ZmZlciA9IFwiXCI7XG4gIGlmIChmLmp1c3RpZnkgPT0gJysnICYmIGYuZmlsbGVyID09ICcgJylcbiAgICBmb3IgKHZhciBpID0gbGVuOyBpIDwgZi53aWR0aDsgaSsrKSBidWZmZXIgKz0gJyAnO1xuICBpZiAoZi5zaWduZWRjb252KSB7XG4gICAgaWYgKGYuc2lnbiA8IDApIGJ1ZmZlciArPSAnLSc7XG4gICAgZWxzZSBpZiAoZi5zaWduc3R5bGUgIT0gJy0nKSBidWZmZXIgKz0gZi5zaWduc3R5bGU7XG4gIH1cbiAgaWYgKGYuYWx0ZXJuYXRlICYmIGYuYmFzZSA9PSA4KSBidWZmZXIgKz0gJzAnO1xuICBpZiAoZi5hbHRlcm5hdGUgJiYgZi5iYXNlID09IDE2KSBidWZmZXIgKz0gXCIweFwiO1xuICBpZiAoZi5qdXN0aWZ5ID09ICcrJyAmJiBmLmZpbGxlciA9PSAnMCcpXG4gICAgZm9yICh2YXIgaSA9IGxlbjsgaSA8IGYud2lkdGg7IGkrKykgYnVmZmVyICs9ICcwJztcbiAgYnVmZmVyICs9IHJhd2J1ZmZlcjtcbiAgaWYgKGYuanVzdGlmeSA9PSAnLScpXG4gICAgZm9yICh2YXIgaSA9IGxlbjsgaSA8IGYud2lkdGg7IGkrKykgYnVmZmVyICs9ICcgJztcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoYnVmZmVyKTtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxMCBKw6lyw7RtZSBWb3VpbGxvblxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBqc29vX2Zsb29yX2xvZzJcbnZhciBsb2cyX29rID0gTWF0aC5sb2cyICYmIE1hdGgubG9nMigxLjEyMzU1ODIwOTI4ODk0NzRFKzMwNykgPT0gMTAyMFxuZnVuY3Rpb24ganNvb19mbG9vcl9sb2cyKHgpIHtcbiAgaWYobG9nMl9vaykgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5sb2cyKHgpKVxuICB2YXIgaSA9IDA7XG4gIGlmICh4ID09IDApIHJldHVybiAtSW5maW5pdHk7XG4gIGlmKHg+PTEpIHt3aGlsZSAoeD49Mikge3gvPTI7IGkrK30gfVxuICBlbHNlIHt3aGlsZSAoeCA8IDEpIHt4Kj0yOyBpLS19IH07XG4gIHJldHVybiBpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQgY29uc3Rcbi8vUmVxdWlyZXM6IGpzb29fZmxvb3JfbG9nMiwgY2FtbF9pbnQ2NF9jcmVhdGVfbG9fbWlfaGlcbmZ1bmN0aW9uIGNhbWxfaW50NjRfYml0c19vZl9mbG9hdCAoeCkge1xuICBpZiAoIWlzRmluaXRlKHgpKSB7XG4gICAgaWYgKGlzTmFOKHgpKVxuICAgICAgcmV0dXJuIGNhbWxfaW50NjRfY3JlYXRlX2xvX21pX2hpKDEsIDAsIDB4N2ZmMCk7XG4gICAgaWYgKHggPiAwKVxuICAgICAgcmV0dXJuIGNhbWxfaW50NjRfY3JlYXRlX2xvX21pX2hpKDAsIDAsIDB4N2ZmMClcbiAgICBlbHNlXG4gICAgICByZXR1cm4gY2FtbF9pbnQ2NF9jcmVhdGVfbG9fbWlfaGkoMCwgMCwgMHhmZmYwKVxuICB9XG4gIHZhciBzaWduID0gKHg9PTAgJiYgMS94ID09IC1JbmZpbml0eSk/MHg4MDAwOih4Pj0wKT8wOjB4ODAwMDtcbiAgaWYgKHNpZ24pIHggPSAteDtcbiAgLy8gSW50NjQuYml0c19vZl9mbG9hdCAxLjEyMzU1ODIwOTI4ODk0NzRFKzMwNyA9IDB4N2ZiMDAwMDAwMDAwMDAwMExcbiAgLy8gdXNpbmcgTWF0aC5MT0cyRSpNYXRoLmxvZyh4KSBpbiBwbGFjZSBvZiBNYXRoLmxvZzIgcmVzdWx0IGluIHByZWNpc2lvbiBsb3N0XG4gIHZhciBleHAgPSBqc29vX2Zsb29yX2xvZzIoeCkgKyAxMDIzO1xuICBpZiAoZXhwIDw9IDApIHtcbiAgICBleHAgPSAwO1xuICAgIHggLz0gTWF0aC5wb3coMiwtMTAyNik7XG4gIH0gZWxzZSB7XG4gICAgeCAvPSBNYXRoLnBvdygyLGV4cC0xMDI3KTtcbiAgICBpZiAoeCA8IDE2KSB7XG4gICAgICB4ICo9IDI7IGV4cCAtPTE7IH1cbiAgICBpZiAoZXhwID09IDApIHtcbiAgICAgIHggLz0gMjsgfVxuICB9XG4gIHZhciBrID0gTWF0aC5wb3coMiwyNCk7XG4gIHZhciByMyA9IHh8MDtcbiAgeCA9ICh4IC0gcjMpICogaztcbiAgdmFyIHIyID0geHwwO1xuICB4ID0gKHggLSByMikgKiBrO1xuICB2YXIgcjEgPSB4fDA7XG4gIHIzID0gKHIzICYweGYpIHwgc2lnbiB8IGV4cCA8PCA0O1xuICByZXR1cm4gY2FtbF9pbnQ2NF9jcmVhdGVfbG9fbWlfaGkocjEsIHIyLCByMyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50MzJfYml0c19vZl9mbG9hdCBjb25zdFxuLy9SZXF1aXJlczoganNvb19mbG9vcl9sb2cyXG5mdW5jdGlvbiBjYW1sX2ludDMyX2JpdHNfb2ZfZmxvYXQgKHgpIHtcbiAgdmFyIGZsb2F0MzJhID0gbmV3IGdsb2JhbFRoaXMuRmxvYXQzMkFycmF5KDEpO1xuICBmbG9hdDMyYVswXSA9IHg7XG4gIHZhciBpbnQzMmEgPSBuZXcgZ2xvYmFsVGhpcy5JbnQzMkFycmF5KGZsb2F0MzJhLmJ1ZmZlcik7XG4gIHJldHVybiBpbnQzMmFbMF0gfCAwO1xufVxuXG4vL0ZQIGxpdGVyYWxzIGNhbiBiZSB3cml0dGVuIHVzaW5nIHRoZSBoZXhhZGVjaW1hbFxuLy9ub3RhdGlvbiAweDxtYW50aXNzYSBpbiBoZXg+cDxleHBvbmVudD4gZnJvbSBJU08gQzk5LlxuLy9odHRwczovL2dpdGh1Yi5jb20vZGFua29nYWkvanMtaGV4ZmxvYXQvYmxvYi9tYXN0ZXIvaGV4ZmxvYXQuanNcbi8vUHJvdmlkZXM6IGNhbWxfaGV4c3RyaW5nX29mX2Zsb2F0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZywgY2FtbF9zdHJfcmVwZWF0XG5mdW5jdGlvbiBjYW1sX2hleHN0cmluZ19vZl9mbG9hdCAoeCwgcHJlYywgc3R5bGUpIHtcbiAgaWYgKCFpc0Zpbml0ZSh4KSkge1xuICAgIGlmIChpc05hTih4KSkgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKFwibmFuXCIpO1xuICAgIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyAoKHggPiAwKT9cImluZmluaXR5XCI6XCItaW5maW5pdHlcIik7XG4gIH1cbiAgdmFyIHNpZ24gPSAoeD09MCAmJiAxL3ggPT0gLUluZmluaXR5KT8xOih4Pj0wKT8wOjE7XG4gIGlmKHNpZ24pIHggPSAteDtcbiAgdmFyIGV4cCA9IDA7XG4gIGlmICh4ID09IDApIHsgfVxuICBlbHNlIGlmICh4IDwgMSkge1xuICAgIHdoaWxlICh4IDwgMSAmJiBleHAgPiAtMTAyMikgIHsgeCAqPSAyOyBleHAtLSB9XG4gIH0gZWxzZSB7XG4gICAgd2hpbGUgKHggPj0gMikgeyB4IC89IDI7IGV4cCsrIH1cbiAgfVxuICB2YXIgZXhwX3NpZ24gPSBleHAgPCAwID8gJycgOiAnKyc7XG4gIHZhciBzaWduX3N0ciA9ICcnO1xuICBpZiAoc2lnbikgc2lnbl9zdHIgPSAnLSdcbiAgZWxzZSB7XG4gICAgc3dpdGNoKHN0eWxlKXtcbiAgICBjYXNlIDQzIC8qICcrJyAqLzogc2lnbl9zdHIgPSAnKyc7IGJyZWFrO1xuICAgIGNhc2UgMzIgLyogJyAnICovOiBzaWduX3N0ciA9ICcgJzsgYnJlYWs7XG4gICAgZGVmYXVsdDogYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmIChwcmVjID49IDAgJiYgcHJlYyA8IDEzKSB7XG4gICAgLyogSWYgYSBwcmVjaXNpb24gaXMgZ2l2ZW4sIGFuZCBpcyBzbWFsbCwgcm91bmQgbWFudGlzc2EgYWNjb3JkaW5nbHkgKi9cbiAgICB2YXIgY3N0ID0gTWF0aC5wb3coMixwcmVjICogNCk7XG4gICAgeCA9IE1hdGgucm91bmQoeCAqIGNzdCkgLyBjc3Q7XG4gIH1cbiAgdmFyIHhfc3RyID0geC50b1N0cmluZygxNik7XG4gIGlmKHByZWMgPj0gMCl7XG4gICAgdmFyIGlkeCA9IHhfc3RyLmluZGV4T2YoJy4nKTtcbiAgICBpZihpZHg8MCkge1xuICAgICAgeF9zdHIgKz0gJy4nICsgY2FtbF9zdHJfcmVwZWF0KHByZWMsICcwJyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdmFyIHNpemUgPSBpZHgrMStwcmVjO1xuICAgICAgaWYoeF9zdHIubGVuZ3RoIDwgc2l6ZSlcbiAgICAgICAgeF9zdHIgKz0gY2FtbF9zdHJfcmVwZWF0KHNpemUgLSB4X3N0ci5sZW5ndGgsICcwJyk7XG4gICAgICBlbHNlXG4gICAgICAgIHhfc3RyID0geF9zdHIuc3Vic3RyKDAsc2l6ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyAoc2lnbl9zdHIgKyAnMHgnICsgeF9zdHIgKyAncCcgKyBleHBfc2lnbiArIGV4cC50b1N0cmluZygxMCkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0cyAoeCkge1xuICB2YXIgbG8gPSB4LmxvO1xuICB2YXIgbWkgPSB4Lm1pO1xuICB2YXIgaGkgPSB4LmhpO1xuICB2YXIgZXhwID0gKGhpICYgMHg3ZmZmKSA+PiA0O1xuICBpZiAoZXhwID09IDIwNDcpIHtcbiAgICBpZiAoKGxvfG1pfChoaSYweGYpKSA9PSAwKVxuICAgICAgcmV0dXJuIChoaSAmIDB4ODAwMCk/KC1JbmZpbml0eSk6SW5maW5pdHk7XG4gICAgZWxzZVxuICAgICAgcmV0dXJuIE5hTjtcbiAgfVxuICB2YXIgayA9IE1hdGgucG93KDIsLTI0KTtcbiAgdmFyIHJlcyA9IChsbyprK21pKSprKyhoaSYweGYpO1xuICBpZiAoZXhwID4gMCkge1xuICAgIHJlcyArPSAxNjtcbiAgICByZXMgKj0gTWF0aC5wb3coMixleHAtMTAyNyk7XG4gIH0gZWxzZVxuICAgIHJlcyAqPSBNYXRoLnBvdygyLC0xMDI2KTtcbiAgaWYgKGhpICYgMHg4MDAwKSByZXMgPSAtIHJlcztcbiAgcmV0dXJuIHJlcztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9uZXh0YWZ0ZXJfZmxvYXQgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0cywgY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0LCBjYW1sX2ludDY0X2FkZCwgY2FtbF9pbnQ2NF9zdWIsY2FtbF9pbnQ2NF9vZl9pbnQzMlxuZnVuY3Rpb24gY2FtbF9uZXh0YWZ0ZXJfZmxvYXQgKHgseSkge1xuICBpZihpc05hTih4KSB8fCBpc05hTih5KSkgcmV0dXJuIE5hTjtcbiAgaWYoeD09eSkgcmV0dXJuIHk7XG4gIGlmKHg9PTApe1xuICAgIGlmKHkgPCAwKVxuICAgICAgcmV0dXJuIC1NYXRoLnBvdygyLCAtMTA3NClcbiAgICBlbHNlXG4gICAgICByZXR1cm4gTWF0aC5wb3coMiwgLTEwNzQpXG4gIH1cbiAgdmFyIGJpdHMgPSBjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQoeCk7XG4gIHZhciBvbmUgPSBjYW1sX2ludDY0X29mX2ludDMyKDEpO1xuICBpZiAoKHg8eSkgPT0gKHg+MCkpXG4gICAgYml0cyA9IGNhbWxfaW50NjRfYWRkKGJpdHMsIG9uZSlcbiAgZWxzZVxuICAgIGJpdHMgPSBjYW1sX2ludDY0X3N1YihiaXRzLCBvbmUpXG4gIHJldHVybiBjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMoYml0cyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdHJ1bmNfZmxvYXRcbmZ1bmN0aW9uIGNhbWxfdHJ1bmNfZmxvYXQoeCl7XG4gIHJldHVybiBNYXRoLnRydW5jKHgpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDMyX2Zsb2F0X29mX2JpdHMgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50MzJfZmxvYXRfb2ZfYml0cyAoeCkge1xuICB2YXIgaW50MzJhID0gbmV3IGdsb2JhbFRoaXMuSW50MzJBcnJheSgxKTtcbiAgaW50MzJhWzBdID0geDtcbiAgdmFyIGZsb2F0MzJhID0gbmV3IGdsb2JhbFRoaXMuRmxvYXQzMkFycmF5KGludDMyYS5idWZmZXIpO1xuICByZXR1cm4gZmxvYXQzMmFbMF07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY2xhc3NpZnlfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfY2xhc3NpZnlfZmxvYXQgKHgpIHtcbiAgaWYgKGlzRmluaXRlICh4KSkge1xuICAgIGlmIChNYXRoLmFicyh4KSA+PSAyLjIyNTA3Mzg1ODUwNzIwMTRlLTMwOCkgcmV0dXJuIDA7XG4gICAgaWYgKHggIT0gMCkgcmV0dXJuIDE7XG4gICAgcmV0dXJuIDI7XG4gIH1cbiAgcmV0dXJuIGlzTmFOKHgpPzQ6Mztcbn1cbi8vUHJvdmlkZXM6IGNhbWxfbW9kZl9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9tb2RmX2Zsb2F0ICh4KSB7XG4gIGlmIChpc0Zpbml0ZSAoeCkpIHtcbiAgICB2YXIgbmVnID0gKDEveCkgPCAwO1xuICAgIHggPSBNYXRoLmFicyh4KTtcbiAgICB2YXIgaSA9IE1hdGguZmxvb3IgKHgpO1xuICAgIHZhciBmID0geCAtIGk7XG4gICAgaWYgKG5lZykgeyBpID0gLWk7IGYgPSAtZjsgfVxuICAgIHJldHVybiBbMCwgZiwgaV07XG4gIH1cbiAgaWYgKGlzTmFOICh4KSkgcmV0dXJuIFswLCBOYU4sIE5hTl07XG4gIHJldHVybiBbMCwgMS94LCB4XTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfbGRleHBfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfbGRleHBfZmxvYXQgKHgsZXhwKSB7XG4gIGV4cCB8PSAwO1xuICBpZiAoZXhwID4gMTAyMykge1xuICAgIGV4cCAtPSAxMDIzO1xuICAgIHggKj0gTWF0aC5wb3coMiwgMTAyMyk7XG4gICAgaWYgKGV4cCA+IDEwMjMpIHsgIC8vIGluIGNhc2UgeCBpcyBzdWJub3JtYWxcbiAgICAgIGV4cCAtPSAxMDIzO1xuICAgICAgeCAqPSBNYXRoLnBvdygyLCAxMDIzKTtcbiAgICB9XG4gIH1cbiAgaWYgKGV4cCA8IC0xMDIzKSB7XG4gICAgZXhwICs9IDEwMjM7XG4gICAgeCAqPSBNYXRoLnBvdygyLCAtMTAyMyk7XG4gIH1cbiAgeCAqPSBNYXRoLnBvdygyLCBleHApO1xuICByZXR1cm4geDtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZnJleHBfZmxvYXQgY29uc3Rcbi8vUmVxdWlyZXM6IGpzb29fZmxvb3JfbG9nMlxuZnVuY3Rpb24gY2FtbF9mcmV4cF9mbG9hdCAoeCkge1xuICBpZiAoKHggPT0gMCkgfHwgIWlzRmluaXRlKHgpKSByZXR1cm4gWzAsIHgsIDBdO1xuICB2YXIgbmVnID0geCA8IDA7XG4gIGlmIChuZWcpIHggPSAtIHg7XG4gIHZhciBleHAgPSBNYXRoLm1heCgtMTAyMywganNvb19mbG9vcl9sb2cyKHgpICsgMSk7XG4gIHggKj0gTWF0aC5wb3coMiwtZXhwKTtcbiAgd2hpbGUgKHggPCAwLjUpIHtcbiAgICB4ICo9IDI7XG4gICAgZXhwLS07XG4gIH1cbiAgd2hpbGUgKHggPj0gMSkge1xuICAgIHggKj0gMC41O1xuICAgIGV4cCsrO1xuICB9XG4gIGlmIChuZWcpIHggPSAtIHg7XG4gIHJldHVybiBbMCwgeCwgZXhwXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mbG9hdF9jb21wYXJlIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2Zsb2F0X2NvbXBhcmUgKHgsIHkpIHtcbiAgaWYgKHggPT09IHkpIHJldHVybiAwO1xuICBpZiAoeCA8IHkpIHJldHVybiAtMTtcbiAgaWYgKHggPiB5KSByZXR1cm4gMTtcbiAgaWYgKHggPT09IHgpIHJldHVybiAxO1xuICBpZiAoeSA9PT0geSkgcmV0dXJuIC0xO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jb3B5c2lnbl9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9jb3B5c2lnbl9mbG9hdCAoeCwgeSkge1xuICBpZiAoeSA9PSAwKSB5ID0gMSAvIHk7XG4gIHggPSBNYXRoLmFicyh4KTtcbiAgcmV0dXJuICh5IDwgMCk/KC14KTp4O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3NpZ25iaXRfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfc2lnbmJpdF9mbG9hdCh4KSB7XG4gIGlmICh4ID09IDApIHggPSAxIC8geDtcbiAgcmV0dXJuICh4IDwgMCk/MTowO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2V4cG0xX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2V4cG0xX2Zsb2F0ICh4KSB7IHJldHVybiBNYXRoLmV4cG0xKHgpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2V4cDJfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZXhwMl9mbG9hdCh4KSB7IHJldHVybiBNYXRoLnBvdygyLCB4KTsgfVxuLy9Qcm92aWRlczogY2FtbF9sb2cxcF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9sb2cxcF9mbG9hdCh4KSB7IHJldHVybiBNYXRoLmxvZzFwKHgpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2xvZzJfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfbG9nMl9mbG9hdCh4KSB7IHJldHVybiBNYXRoLmxvZzIoeCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfaHlwb3RfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaHlwb3RfZmxvYXQgKHgsIHkpIHsgcmV0dXJuIE1hdGguaHlwb3QoeCwgeSk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfbG9nMTBfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfbG9nMTBfZmxvYXQgKHgpIHsgcmV0dXJuIE1hdGgubG9nMTAoeCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfY29zaF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9jb3NoX2Zsb2F0ICh4KSB7IHJldHVybiBNYXRoLmNvc2goeCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfYWNvc2hfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfYWNvc2hfZmxvYXQgKHgpIHsgcmV0dXJuIE1hdGguYWNvc2goeCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfc2luaF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9zaW5oX2Zsb2F0ICh4KSB7IHJldHVybiBNYXRoLnNpbmgoeCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfYXNpbmhfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfYXNpbmhfZmxvYXQgKHgpIHsgcmV0dXJuIE1hdGguYXNpbmgoeCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfdGFuaF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF90YW5oX2Zsb2F0ICh4KSB7IHJldHVybiBNYXRoLnRhbmgoeCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfYXRhbmhfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfYXRhbmhfZmxvYXQgKHgpIHsgcmV0dXJuIE1hdGguYXRhbmgoeCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfcm91bmRfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfcm91bmRfZmxvYXQgKHgpIHsgcmV0dXJuIE1hdGgucm91bmQoeCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfY2JydF9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9jYnJ0X2Zsb2F0ICh4KSB7IHJldHVybiBNYXRoLmNicnQoeCk7IH1cblxuLy9Qcm92aWRlczogY2FtbF9lcmZfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZXJmX2Zsb2F0KHgpIHtcbiAgdmFyIGExID0gMC4yNTQ4Mjk1OTI7XG4gIHZhciBhMiA9IC0wLjI4NDQ5NjczNjtcbiAgdmFyIGEzID0gMS40MjE0MTM3NDE7XG4gIHZhciBhNCA9IC0xLjQ1MzE1MjAyNztcbiAgdmFyIGE1ID0gMS4wNjE0MDU0Mjk7XG4gIHZhciBwID0gMC4zMjc1OTExO1xuXG4gIHZhciBzaWduID0gMTtcbiAgaWYgKHggPCAwKSB7XG4gICAgc2lnbiA9IC0xO1xuICB9XG4gIHggPSBNYXRoLmFicyh4KTtcbiAgdmFyIHQgPSAxLjAgLyAoMS4wICsgcCAqIHgpO1xuICB2YXIgeSA9IDEuMCAtICgoKChhNSAqIHQgKyBhNCkgKiB0ICsgYTMpICogdCArIGEyKSAqIHQgKyBhMSkgKiB0ICogTWF0aC5leHAoLXggKiB4KTtcblxuICByZXR1cm4gc2lnbiAqIHk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZXJmY19mbG9hdCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9lcmZfZmxvYXRcbmZ1bmN0aW9uIGNhbWxfZXJmY19mbG9hdCh4KSB7XG4gIHJldHVybiAxIC0gY2FtbF9lcmZfZmxvYXQoeCk7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9mbWFfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZm1hX2Zsb2F0KHgsIHksIHopIHtcbiAgdmFyIFNQTElUID0gTWF0aC5wb3coMiwgMjcpICsgMTtcbiAgdmFyIE1JTl9WQUxVRSA9IE1hdGgucG93KDIsIC0xMDIyKTtcbiAgdmFyIEVQU0lMT04gPSBNYXRoLnBvdygyLCAtNTIpO1xuICB2YXIgQyA9IDQxNjtcbiAgdmFyIEEgPSBNYXRoLnBvdygyLCArQyk7XG4gIHZhciBCID0gTWF0aC5wb3coMiwgLUMpO1xuXG4gIGZ1bmN0aW9uIG11bHRpcGx5IChhLCBiKSB7XG4gICAgdmFyIGF0ID0gU1BMSVQgKiBhO1xuICAgIHZhciBhaGkgPSBhdCAtIChhdCAtIGEpO1xuICAgIHZhciBhbG8gPSBhIC0gYWhpO1xuICAgIHZhciBidCA9IFNQTElUICogYjtcbiAgICB2YXIgYmhpID0gYnQgLSAoYnQgLSBiKTtcbiAgICB2YXIgYmxvID0gYiAtIGJoaTtcbiAgICB2YXIgcCA9IGEgKiBiO1xuICAgIHZhciBlID0gKChhaGkgKiBiaGkgLSBwKSArIGFoaSAqIGJsbyArIGFsbyAqIGJoaSkgKyBhbG8gKiBibG87XG4gICAgcmV0dXJuIHtcbiAgICAgIHA6IHAsXG4gICAgICBlOiBlXG4gICAgfTtcbiAgfTtcblxuICBmdW5jdGlvbiBhZGQgKGEsIGIpIHtcbiAgICB2YXIgcyA9IGEgKyBiO1xuICAgIHZhciB2ID0gcyAtIGE7XG4gICAgdmFyIGUgPSAoYSAtIChzIC0gdikpICsgKGIgLSB2KTtcbiAgICByZXR1cm4ge1xuICAgICAgczogcyxcbiAgICAgIGU6IGVcbiAgICB9O1xuICB9O1xuXG4gIGZ1bmN0aW9uIGFkanVzdCAoeCwgeSkge1xuICAgIHJldHVybiB4ICE9PSAwICYmIHkgIT09IDAgJiYgU1BMSVQgKiB4IC0gKFNQTElUICogeCAtIHgpID09PSB4ID8geCAqICgxICsgKHggPCAwID8gLTEgOiArMSkgKiAoeSA8IDAgPyAtMSA6ICsxKSAqIEVQU0lMT04pIDogeDtcbiAgfTtcblxuICBpZiAoeCA9PT0gMCB8fCB4ICE9PSB4IHx8IHggPT09ICsxIC8gMCB8fCB4ID09PSAtMSAvIDAgfHxcbiAgICAgIHkgPT09IDAgfHwgeSAhPT0geSB8fCB5ID09PSArMSAvIDAgfHwgeSA9PT0gLTEgLyAwKSB7XG4gICAgcmV0dXJuIHggKiB5ICsgejtcbiAgfVxuICBpZiAoeiA9PT0gMCkge1xuICAgIHJldHVybiB4ICogeTtcbiAgfVxuICBpZiAoeiAhPT0geiB8fCB6ID09PSArMSAvIDAgfHwgeiA9PT0gLTEgLyAwKSB7XG4gICAgcmV0dXJuIHo7XG4gIH1cblxuICB2YXIgc2NhbGUgPSAxO1xuICB3aGlsZSAoTWF0aC5hYnMoeCkgPiBBKSB7XG4gICAgc2NhbGUgKj0gQTtcbiAgICB4ICo9IEI7XG4gIH1cbiAgd2hpbGUgKE1hdGguYWJzKHkpID4gQSkge1xuICAgIHNjYWxlICo9IEE7XG4gICAgeSAqPSBCO1xuICB9XG4gIGlmIChzY2FsZSA9PT0gMSAvIDApIHtcbiAgICByZXR1cm4geCAqIHkgKiBzY2FsZTtcbiAgfVxuICB3aGlsZSAoTWF0aC5hYnMoeCkgPCBCKSB7XG4gICAgc2NhbGUgKj0gQjtcbiAgICB4ICo9IEE7XG4gIH1cbiAgd2hpbGUgKE1hdGguYWJzKHkpIDwgQikge1xuICAgIHNjYWxlICo9IEI7XG4gICAgeSAqPSBBO1xuICB9XG4gIGlmIChzY2FsZSA9PT0gMCkge1xuICAgIHJldHVybiB6O1xuICB9XG5cbiAgdmFyIHhzID0geDtcbiAgdmFyIHlzID0geTtcbiAgdmFyIHpzID0geiAvIHNjYWxlO1xuXG4gIGlmIChNYXRoLmFicyh6cykgPiBNYXRoLmFicyh4cyAqIHlzKSAqIDQgLyBFUFNJTE9OKSB7XG4gICAgcmV0dXJuIHo7XG4gIH1cbiAgaWYgKE1hdGguYWJzKHpzKSA8IE1hdGguYWJzKHhzICogeXMpICogRVBTSUxPTiAvIDQgKiBFUFNJTE9OIC8gNCkge1xuICAgIHpzID0gKHogPCAwID8gLTEgOiArMSkgKiBNSU5fVkFMVUU7XG4gIH1cblxuICB2YXIgeHkgPSBtdWx0aXBseSh4cywgeXMpO1xuICB2YXIgcyA9IGFkZCh4eS5wLCB6cyk7XG4gIHZhciB1ID0gYWRkKHh5LmUsIHMuZSk7XG4gIHZhciBpID0gYWRkKHMucywgdS5zKTtcblxuICB2YXIgZiA9IGkucyArIGFkanVzdChpLmUsIHUuZSk7XG4gIGlmIChmID09PSAwKSB7XG4gICAgcmV0dXJuIGY7XG4gIH1cblxuICB2YXIgZnMgPSBmICogc2NhbGU7XG4gIGlmIChNYXRoLmFicyhmcykgPiBNSU5fVkFMVUUpIHtcbiAgICByZXR1cm4gZnM7XG4gIH1cblxuICAvLyBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZXJlIHdhcyBleHRyYSByb3VuZGluZyBmb3IgYSBkZW5vcm1hbGl6ZWQgdmFsdWUuXG4gIHJldHVybiBmcyArIGFkanVzdChmIC0gZnMgLyBzY2FsZSwgaS5lKSAqIHNjYWxlO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2Zvcm1hdF9mbG9hdCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9wYXJzZV9mb3JtYXQsIGNhbWxfZmluaXNoX2Zvcm1hdHRpbmdcbmZ1bmN0aW9uIGNhbWxfZm9ybWF0X2Zsb2F0IChmbXQsIHgpIHtcbiAgZnVuY3Rpb24gdG9GaXhlZCh4LGRwKSB7XG4gICAgaWYgKE1hdGguYWJzKHgpIDwgMS4wKSB7XG4gICAgICByZXR1cm4geC50b0ZpeGVkKGRwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGUgPSBwYXJzZUludCh4LnRvU3RyaW5nKCkuc3BsaXQoJysnKVsxXSk7XG4gICAgICBpZiAoZSA+IDIwKSB7XG4gICAgICAgIGUgLT0gMjA7XG4gICAgICAgIHggLz0gTWF0aC5wb3coMTAsZSk7XG4gICAgICAgIHggKz0gKG5ldyBBcnJheShlKzEpKS5qb2luKCcwJyk7XG4gICAgICAgIGlmKGRwID4gMCkge1xuICAgICAgICAgIHggPSB4ICsgJy4nICsgKG5ldyBBcnJheShkcCsxKSkuam9pbignMCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB4O1xuICAgICAgfVxuICAgICAgZWxzZSByZXR1cm4geC50b0ZpeGVkKGRwKVxuICAgIH1cbiAgfVxuICB2YXIgcywgZiA9IGNhbWxfcGFyc2VfZm9ybWF0KGZtdCk7XG4gIHZhciBwcmVjID0gKGYucHJlYyA8IDApPzY6Zi5wcmVjO1xuICBpZiAoeCA8IDAgfHwgKHggPT0gMCAmJiAxL3ggPT0gLUluZmluaXR5KSkgeyBmLnNpZ24gPSAtMTsgeCA9IC14OyB9XG4gIGlmIChpc05hTih4KSkgeyBzID0gXCJuYW5cIjsgZi5maWxsZXIgPSAnICc7IH1cbiAgZWxzZSBpZiAoIWlzRmluaXRlKHgpKSB7IHMgPSBcImluZlwiOyBmLmZpbGxlciA9ICcgJzsgfVxuICBlbHNlXG4gICAgc3dpdGNoIChmLmNvbnYpIHtcbiAgICBjYXNlICdlJzpcbiAgICAgIHZhciBzID0geC50b0V4cG9uZW50aWFsKHByZWMpO1xuICAgICAgLy8gZXhwb25lbnQgc2hvdWxkIGJlIGF0IGxlYXN0IHR3byBkaWdpdHNcbiAgICAgIHZhciBpID0gcy5sZW5ndGg7XG4gICAgICBpZiAocy5jaGFyQXQoaSAtIDMpID09ICdlJylcbiAgICAgICAgcyA9IHMuc2xpY2UgKDAsIGkgLSAxKSArICcwJyArIHMuc2xpY2UgKGkgLSAxKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2YnOlxuICAgICAgcyA9IHRvRml4ZWQoeCwgcHJlYyk7IGJyZWFrO1xuICAgIGNhc2UgJ2cnOlxuICAgICAgcHJlYyA9IHByZWM/cHJlYzoxO1xuICAgICAgcyA9IHgudG9FeHBvbmVudGlhbChwcmVjIC0gMSk7XG4gICAgICB2YXIgaiA9IHMuaW5kZXhPZignZScpO1xuICAgICAgdmFyIGV4cCA9ICtzLnNsaWNlKGogKyAxKTtcbiAgICAgIGlmIChleHAgPCAtNCB8fCB4ID49IDFlMjEgfHwgeC50b0ZpeGVkKDApLmxlbmd0aCA+IHByZWMpIHtcbiAgICAgICAgLy8gcmVtb3ZlIHRyYWlsaW5nIHplcm9lc1xuICAgICAgICB2YXIgaSA9IGogLSAxOyB3aGlsZSAocy5jaGFyQXQoaSkgPT0gJzAnKSBpLS07XG4gICAgICAgIGlmIChzLmNoYXJBdChpKSA9PSAnLicpIGktLTtcbiAgICAgICAgcyA9IHMuc2xpY2UoMCwgaSArIDEpICsgcy5zbGljZShqKTtcbiAgICAgICAgaSA9IHMubGVuZ3RoO1xuICAgICAgICBpZiAocy5jaGFyQXQoaSAtIDMpID09ICdlJylcbiAgICAgICAgICBzID0gcy5zbGljZSAoMCwgaSAtIDEpICsgJzAnICsgcy5zbGljZSAoaSAtIDEpO1xuICAgICAgICBicmVhaztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBwID0gcHJlYztcbiAgICAgICAgaWYgKGV4cCA8IDApIHsgcCAtPSBleHAgKyAxOyBzID0geC50b0ZpeGVkKHApOyB9XG4gICAgICAgIGVsc2Ugd2hpbGUgKHMgPSB4LnRvRml4ZWQocCksIHMubGVuZ3RoID4gcHJlYyArIDEpIHAtLTtcbiAgICAgICAgaWYgKHApIHtcbiAgICAgICAgICAvLyByZW1vdmUgdHJhaWxpbmcgemVyb2VzXG4gICAgICAgICAgdmFyIGkgPSBzLmxlbmd0aCAtIDE7IHdoaWxlIChzLmNoYXJBdChpKSA9PSAnMCcpIGktLTtcbiAgICAgICAgICBpZiAocy5jaGFyQXQoaSkgPT0gJy4nKSBpLS07XG4gICAgICAgICAgcyA9IHMuc2xpY2UoMCwgaSArIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gIHJldHVybiBjYW1sX2ZpbmlzaF9mb3JtYXR0aW5nKGYsIHMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2Zsb2F0X29mX3N0cmluZyAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2Zsb2F0X29mX3N0cmluZyhzKSB7XG4gIHZhciByZXM7XG4gIHMgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHMpXG4gIHJlcyA9ICtzO1xuICBpZiAoKHMubGVuZ3RoID4gMCkgJiYgKHJlcyA9PT0gcmVzKSkgcmV0dXJuIHJlcztcbiAgcyA9IHMucmVwbGFjZSgvXy9nLFwiXCIpO1xuICByZXMgPSArcztcbiAgaWYgKCgocy5sZW5ndGggPiAwKSAmJiAocmVzID09PSByZXMpKSB8fCAvXlsrLV0/bmFuJC9pLnRlc3QocykpIHJldHVybiByZXM7XG4gIHZhciBtID0gL14gKihbKy1dPykweChbMC05YS1mXSspXFwuPyhbMC05YS1mXSopKHAoWystXT9bMC05XSspKT8vaS5leGVjKHMpO1xuICAvLyAgICAgICAgICAxICAgICAgICAyICAgICAgICAgICAgIDMgICAgICAgICAgIDVcbiAgaWYobSl7XG4gICAgdmFyIG0zID0gbVszXS5yZXBsYWNlKC8wKyQvLCcnKTtcbiAgICB2YXIgbWFudGlzc2EgPSBwYXJzZUludChtWzFdICsgbVsyXSArIG0zLCAxNik7XG4gICAgdmFyIGV4cG9uZW50ID0gKG1bNV18MCkgLSA0Km0zLmxlbmd0aDtcbiAgICByZXMgPSBtYW50aXNzYSAqIE1hdGgucG93KDIsIGV4cG9uZW50KTtcbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIGlmKC9eXFwrP2luZihpbml0eSk/JC9pLnRlc3QocykpIHJldHVybiBJbmZpbml0eTtcbiAgaWYoL14taW5mKGluaXR5KT8kL2kudGVzdChzKSkgcmV0dXJuIC1JbmZpbml0eTtcbiAgY2FtbF9mYWlsd2l0aChcImZsb2F0X29mX3N0cmluZ1wiKTtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxNCBKw6lyw7RtZSBWb3VpbGxvbiwgSHVnbyBIZXV6YXJkXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGZzX25vZGVfc3VwcG9ydGVkXG5mdW5jdGlvbiBmc19ub2RlX3N1cHBvcnRlZCAoKSB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIGdsb2JhbFRoaXMucHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICYmIHR5cGVvZiBnbG9iYWxUaGlzLnByb2Nlc3MudmVyc2lvbnMgIT09ICd1bmRlZmluZWQnXG4gICAgICAmJiB0eXBlb2YgZ2xvYmFsVGhpcy5wcm9jZXNzLnZlcnNpb25zLm5vZGUgIT09ICd1bmRlZmluZWQnKVxufVxuLy9Qcm92aWRlczogZnNfbm9kZV9zdXBwb3J0ZWRcbi8vSWY6IGJyb3dzZXJcbmZ1bmN0aW9uIGZzX25vZGVfc3VwcG9ydGVkICgpIHtcbiAgcmV0dXJuIGZhbHNlXG59XG5cblxuLy9Qcm92aWRlczogTWxOb2RlRGV2aWNlXG4vL1JlcXVpcmVzOiBNbE5vZGVGaWxlLCBjYW1sX3JhaXNlX3N5c19lcnJvciwgY2FtbF9yYWlzZV93aXRoX2FyZ3Ncbi8vUmVxdWlyZXM6IG1ha2VfdW5peF9lcnJfYXJncywgY2FtbF9uYW1lZF92YWx1ZSwgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbmZ1bmN0aW9uIE1sTm9kZURldmljZShyb290KSB7XG4gIHRoaXMuZnMgPSByZXF1aXJlKCdmcycpO1xuICB0aGlzLnJvb3QgPSByb290O1xufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5ubSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgcmV0dXJuICh0aGlzLnJvb3QgKyBuYW1lKTtcbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUuZXhpc3RzID0gZnVuY3Rpb24obmFtZSkge1xuICB0cnkge1xuICAgIHJldHVybiB0aGlzLmZzLmV4aXN0c1N5bmModGhpcy5ubShuYW1lKSk/MTowO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5ta2RpciA9IGZ1bmN0aW9uKG5hbWUsIG1vZGUsIHJhaXNlX3VuaXgpIHtcbiAgdHJ5IHtcbiAgICB0aGlzLmZzLm1rZGlyU3luYyh0aGlzLm5tKG5hbWUpLHttb2RlOm1vZGV9KTtcbiAgICByZXR1cm4gMFxuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLnJhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICB9XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLnJtZGlyID0gZnVuY3Rpb24obmFtZSwgcmFpc2VfdW5peCkge1xuICB0cnkge1xuICAgIHRoaXMuZnMucm1kaXJTeW5jKHRoaXMubm0obmFtZSkpO1xuICAgIHJldHVybiAwXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRoaXMucmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gIH1cbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUucmVhZGRpciA9IGZ1bmN0aW9uKG5hbWUsIHJhaXNlX3VuaXgpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gdGhpcy5mcy5yZWFkZGlyU3luYyh0aGlzLm5tKG5hbWUpKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5pc19kaXIgPSBmdW5jdGlvbihuYW1lKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHRoaXMuZnMuc3RhdFN5bmModGhpcy5ubShuYW1lKSkuaXNEaXJlY3RvcnkoKT8xOjA7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGVyci50b1N0cmluZygpKTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS51bmxpbmsgPSBmdW5jdGlvbihuYW1lLCByYWlzZV91bml4KSB7XG4gIHRyeSB7XG4gICAgdmFyIGIgPSB0aGlzLmZzLmV4aXN0c1N5bmModGhpcy5ubShuYW1lKSk/MTowO1xuICAgIHRoaXMuZnMudW5saW5rU3luYyh0aGlzLm5tKG5hbWUpKTtcbiAgICByZXR1cm4gYjtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5vcGVuID0gZnVuY3Rpb24obmFtZSwgZiwgcmFpc2VfdW5peCkge1xuICB2YXIgY29uc3RzID0gcmVxdWlyZSgnY29uc3RhbnRzJyk7XG4gIHZhciByZXMgPSAwO1xuICBmb3IodmFyIGtleSBpbiBmKXtcbiAgICBzd2l0Y2goa2V5KXtcbiAgICBjYXNlIFwicmRvbmx5XCIgIDogcmVzIHw9IGNvbnN0cy5PX1JET05MWTsgYnJlYWs7XG4gICAgY2FzZSBcIndyb25seVwiICA6IHJlcyB8PSBjb25zdHMuT19XUk9OTFk7IGJyZWFrO1xuICAgIGNhc2UgXCJhcHBlbmRcIiAgOlxuICAgICAgcmVzIHw9IGNvbnN0cy5PX1dST05MWSB8IGNvbnN0cy5PX0FQUEVORDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJjcmVhdGVcIiAgIDogcmVzIHw9IGNvbnN0cy5PX0NSRUFUOyAgICBicmVhaztcbiAgICBjYXNlIFwidHJ1bmNhdGVcIiA6IHJlcyB8PSBjb25zdHMuT19UUlVOQzsgICAgYnJlYWs7XG4gICAgY2FzZSBcImV4Y2xcIiAgICAgOiByZXMgfD0gY29uc3RzLk9fRVhDTDsgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJiaW5hcnlcIiAgIDogcmVzIHw9IGNvbnN0cy5PX0JJTkFSWTsgICBicmVhaztcbiAgICBjYXNlIFwidGV4dFwiICAgICA6IHJlcyB8PSBjb25zdHMuT19URVhUOyAgICAgYnJlYWs7XG4gICAgY2FzZSBcIm5vbmJsb2NrXCIgOiByZXMgfD0gY29uc3RzLk9fTk9OQkxPQ0s7IGJyZWFrO1xuICAgIH1cbiAgfVxuICB0cnkge1xuICAgIHZhciBmZCA9IHRoaXMuZnMub3BlblN5bmModGhpcy5ubShuYW1lKSwgcmVzKTtcbiAgICByZXR1cm4gbmV3IE1sTm9kZUZpbGUoZmQpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLnJhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICB9XG59XG5cbk1sTm9kZURldmljZS5wcm90b3R5cGUucmVuYW1lID0gZnVuY3Rpb24obywgbiwgcmFpc2VfdW5peCkge1xuICB0cnkge1xuICAgIHRoaXMuZnMucmVuYW1lU3luYyh0aGlzLm5tKG8pLCB0aGlzLm5tKG4pKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5zdGF0ID0gZnVuY3Rpb24obmFtZSwgcmFpc2VfdW5peCkge1xuICB0cnkge1xuICAgIHZhciBqc19zdGF0cyA9IHRoaXMuZnMuc3RhdFN5bmModGhpcy5ubShuYW1lKSk7XG4gICAgcmV0dXJuIHRoaXMuc3RhdHNfZnJvbV9qcyhqc19zdGF0cyk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRoaXMucmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gIH1cbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUubHN0YXQgPSBmdW5jdGlvbihuYW1lLCByYWlzZV91bml4KSB7XG4gIHRyeSB7XG4gICAgdmFyIGpzX3N0YXRzID0gdGhpcy5mcy5sc3RhdFN5bmModGhpcy5ubShuYW1lKSk7XG4gICAgcmV0dXJuIHRoaXMuc3RhdHNfZnJvbV9qcyhqc19zdGF0cyk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRoaXMucmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gIH1cbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUuc3ltbGluayA9IGZ1bmN0aW9uKHRvX2RpciwgdGFyZ2V0LCBwYXRoLCByYWlzZV91bml4KSB7XG4gIHRyeSB7XG4gICAgdGhpcy5mcy5zeW1saW5rU3luYyh0aGlzLm5tKHRhcmdldCksIHRoaXMubm0ocGF0aCksIHRvX2RpciA/ICdkaXInIDogJ2ZpbGUnKTtcbiAgICByZXR1cm4gMDtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5yZWFkbGluayA9IGZ1bmN0aW9uKG5hbWUsIHJhaXNlX3VuaXgpIHtcbiAgdHJ5IHtcbiAgICB2YXIgbGluayA9IHRoaXMuZnMucmVhZGxpbmtTeW5jKHRoaXMubm0obmFtZSksICd1dGY4Jyk7XG4gICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKGxpbmspO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLnJhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICB9XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLnJhaXNlX25vZGVqc19lcnJvciA9IGZ1bmN0aW9uKGVyciwgcmFpc2VfdW5peCkge1xuICB2YXIgdW5peF9lcnJvciA9IGNhbWxfbmFtZWRfdmFsdWUoXCJVbml4LlVuaXhfZXJyb3JcIik7XG4gIGlmIChyYWlzZV91bml4ICYmIHVuaXhfZXJyb3IpIHtcbiAgICB2YXIgYXJncyA9IG1ha2VfdW5peF9lcnJfYXJncyhlcnIuY29kZSwgZXJyLnN5c2NhbGwsIGVyci5wYXRoLCBlcnIuZXJybm8pO1xuICAgIGNhbWxfcmFpc2Vfd2l0aF9hcmdzKHVuaXhfZXJyb3IsIGFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGVyci50b1N0cmluZygpKTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5zdGF0c19mcm9tX2pzID0gZnVuY3Rpb24oanNfc3RhdHMpIHtcbiAgLyogPT09VW5peC5maWxlX2tpbmQ9PT1cbiAgICogdHlwZSBmaWxlX2tpbmQgPVxuICAgKiAgICAgU19SRUcgICAgICAgICAgICAgICAgICAgICAgICgqKiBSZWd1bGFyIGZpbGUgKilcbiAgICogICB8IFNfRElSICAgICAgICAgICAgICAgICAgICAgICAoKiogRGlyZWN0b3J5ICopXG4gICAqICAgfCBTX0NIUiAgICAgICAgICAgICAgICAgICAgICAgKCoqIENoYXJhY3RlciBkZXZpY2UgKilcbiAgICogICB8IFNfQkxLICAgICAgICAgICAgICAgICAgICAgICAoKiogQmxvY2sgZGV2aWNlICopXG4gICAqICAgfCBTX0xOSyAgICAgICAgICAgICAgICAgICAgICAgKCoqIFN5bWJvbGljIGxpbmsgKilcbiAgICogICB8IFNfRklGTyAgICAgICAgICAgICAgICAgICAgICAoKiogTmFtZWQgcGlwZSAqKVxuICAgKiAgIHwgU19TT0NLICAgICAgICAgICAgICAgICAgICAgICgqKiBTb2NrZXQgKilcbiAgICovXG4gIHZhciBmaWxlX2tpbmQ7XG4gIGlmIChqc19zdGF0cy5pc0ZpbGUoKSkge1xuICAgIGZpbGVfa2luZCA9IDA7XG4gIH0gZWxzZSBpZiAoanNfc3RhdHMuaXNEaXJlY3RvcnkoKSkge1xuICAgIGZpbGVfa2luZCA9IDE7XG4gIH0gZWxzZSBpZiAoanNfc3RhdHMuaXNDaGFyYWN0ZXJEZXZpY2UoKSkge1xuICAgIGZpbGVfa2luZCA9IDI7XG4gIH0gZWxzZSBpZiAoanNfc3RhdHMuaXNCbG9ja0RldmljZSgpKSB7XG4gICAgZmlsZV9raW5kID0gMztcbiAgfSBlbHNlIGlmIChqc19zdGF0cy5pc1N5bWJvbGljTGluaygpKSB7XG4gICAgZmlsZV9raW5kID0gNDtcbiAgfSBlbHNlIGlmIChqc19zdGF0cy5pc0ZJRk8oKSkge1xuICAgIGZpbGVfa2luZCA9IDU7XG4gIH0gZWxzZSBpZiAoanNfc3RhdHMuaXNTb2NrZXQoKSkge1xuICAgIGZpbGVfa2luZCA9IDY7XG4gIH1cbiAgLyogPT09VW5peC5zdGF0cz09PVxuICAgKiB0eXBlIHN0YXRzID1cbiAgICogIHsgc3RfZGV2IDogaW50OyAgICAgICAgICAgICAgICgqKiBEZXZpY2UgbnVtYmVyICopXG4gICAqICAgIHN0X2lubyA6IGludDsgICAgICAgICAgICAgICAoKiogSW5vZGUgbnVtYmVyICopXG4gICAqICAgIHN0X2tpbmQgOiBmaWxlX2tpbmQ7ICAgICAgICAoKiogS2luZCBvZiB0aGUgZmlsZSAqKVxuICAgKiAgICBzdF9wZXJtIDogZmlsZV9wZXJtOyAgICAgICAgKCoqIEFjY2VzcyByaWdodHMgKilcbiAgICogICAgc3RfbmxpbmsgOiBpbnQ7ICAgICAgICAgICAgICgqKiBOdW1iZXIgb2YgbGlua3MgKilcbiAgICogICAgc3RfdWlkIDogaW50OyAgICAgICAgICAgICAgICgqKiBVc2VyIGlkIG9mIHRoZSBvd25lciAqKVxuICAgKiAgICBzdF9naWQgOiBpbnQ7ICAgICAgICAgICAgICAgKCoqIEdyb3VwIElEIG9mIHRoZSBmaWxlJ3MgZ3JvdXAgKilcbiAgICogICAgc3RfcmRldiA6IGludDsgICAgICAgICAgICAgICgqKiBEZXZpY2UgSUQgKGlmIHNwZWNpYWwgZmlsZSkgKilcbiAgICogICAgc3Rfc2l6ZSA6IGludDsgICAgICAgICAgICAgICgqKiBTaXplIGluIGJ5dGVzICopXG4gICAqICAgIHN0X2F0aW1lIDogZmxvYXQ7ICAgICAgICAgICAoKiogTGFzdCBhY2Nlc3MgdGltZSAqKVxuICAgKiAgICBzdF9tdGltZSA6IGZsb2F0OyAgICAgICAgICAgKCoqIExhc3QgbW9kaWZpY2F0aW9uIHRpbWUgKilcbiAgICogICAgc3RfY3RpbWUgOiBmbG9hdDsgICAgICAgICAgICgqKiBMYXN0IHN0YXR1cyBjaGFuZ2UgdGltZSAqKVxuICAgKiAgfVxuICAgKi9cbiAgcmV0dXJuIEJMT0NLKFxuICAgIDAsXG4gICAganNfc3RhdHMuZGV2LFxuICAgIGpzX3N0YXRzLmlubyxcbiAgICBmaWxlX2tpbmQsXG4gICAganNfc3RhdHMubW9kZSxcbiAgICBqc19zdGF0cy5ubGluayxcbiAgICBqc19zdGF0cy51aWQsXG4gICAganNfc3RhdHMuZ2lkLFxuICAgIGpzX3N0YXRzLnJkZXYsXG4gICAganNfc3RhdHMuc2l6ZSxcbiAgICBqc19zdGF0cy5hdGltZU1zLFxuICAgIGpzX3N0YXRzLm10aW1lTXMsXG4gICAganNfc3RhdHMuY3RpbWVNc1xuICApO1xufVxuXG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWxOb2RlRGV2aWNlXG5cbi8vUHJvdmlkZXM6IE1sTm9kZURldmljZVxuLy9JZjogYnJvd3NlclxuZnVuY3Rpb24gTWxOb2RlRGV2aWNlKCkge1xufVxuXG4vL1Byb3ZpZGVzOiBNbE5vZGVGaWxlXG4vL1JlcXVpcmVzOiBNbEZpbGUsIGNhbWxfYXJyYXlfb2Zfc3RyaW5nLCBjYW1sX2FycmF5X29mX2J5dGVzLCBjYW1sX2J5dGVzX3NldCwgY2FtbF9yYWlzZV9zeXNfZXJyb3JcbmZ1bmN0aW9uIE1sTm9kZUZpbGUoZmQpe1xuICB0aGlzLmZzID0gcmVxdWlyZSgnZnMnKTtcbiAgdGhpcy5mZCA9IGZkO1xufVxuTWxOb2RlRmlsZS5wcm90b3R5cGUgPSBuZXcgTWxGaWxlICgpO1xuXG5NbE5vZGVGaWxlLnByb3RvdHlwZS50cnVuY2F0ZSA9IGZ1bmN0aW9uKGxlbil7XG4gIHRyeSB7XG4gICAgdGhpcy5mcy5mdHJ1bmNhdGVTeW5jKHRoaXMuZmQsbGVufDApXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGVyci50b1N0cmluZygpKTtcbiAgfVxufVxuTWxOb2RlRmlsZS5wcm90b3R5cGUubGVuZ3RoID0gZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIHJldHVybiB0aGlzLmZzLmZzdGF0U3luYyh0aGlzLmZkKS5zaXplO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihlcnIudG9TdHJpbmcoKSk7XG4gIH1cbn1cbk1sTm9kZUZpbGUucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24ob2Zmc2V0LGJ1ZixidWZfb2Zmc2V0LGxlbil7XG4gIHZhciBhID0gY2FtbF9hcnJheV9vZl9zdHJpbmcoYnVmKTtcbiAgaWYoISAoYSBpbnN0YW5jZW9mIGdsb2JhbFRoaXMuVWludDhBcnJheSkpXG4gICAgYSA9IG5ldyBnbG9iYWxUaGlzLlVpbnQ4QXJyYXkoYSk7XG4gIHZhciBidWZmZXIgPSBnbG9iYWxUaGlzLkJ1ZmZlci5mcm9tKGEpO1xuICB0cnkge1xuICAgIHRoaXMuZnMud3JpdGVTeW5jKHRoaXMuZmQsIGJ1ZmZlciwgYnVmX29mZnNldCwgbGVuLCBvZmZzZXQpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihlcnIudG9TdHJpbmcoKSk7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5NbE5vZGVGaWxlLnByb3RvdHlwZS5yZWFkID0gZnVuY3Rpb24ob2Zmc2V0LGJ1ZixidWZfb2Zmc2V0LGxlbil7XG4gIHZhciBhID0gY2FtbF9hcnJheV9vZl9ieXRlcyhidWYpO1xuICBpZighIChhIGluc3RhbmNlb2YgZ2xvYmFsVGhpcy5VaW50OEFycmF5KSlcbiAgICBhID0gbmV3IGdsb2JhbFRoaXMuVWludDhBcnJheShhKTtcbiAgdmFyIGJ1ZmZlciA9IGdsb2JhbFRoaXMuQnVmZmVyLmZyb20oYSk7XG4gIHRyeSB7XG4gICAgdGhpcy5mcy5yZWFkU3luYyh0aGlzLmZkLCBidWZmZXIsIGJ1Zl9vZmZzZXQsIGxlbiwgb2Zmc2V0KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoZXJyLnRvU3RyaW5nKCkpO1xuICB9XG4gIGZvcih2YXIgaSA9IDA7IGkgPCBsZW47IGkrKyl7XG4gICAgY2FtbF9ieXRlc19zZXQoYnVmLGJ1Zl9vZmZzZXQgKyBpLGJ1ZmZlcltidWZfb2Zmc2V0K2ldKTtcbiAgfVxuICByZXR1cm4gMFxufVxuTWxOb2RlRmlsZS5wcm90b3R5cGUucmVhZF9vbmUgPSBmdW5jdGlvbihvZmZzZXQpe1xuICB2YXIgYSA9IG5ldyBnbG9iYWxUaGlzLlVpbnQ4QXJyYXkoMSk7XG4gIHZhciBidWZmZXIgPSBnbG9iYWxUaGlzLkJ1ZmZlci5mcm9tKGEpO1xuICB0cnkge1xuICAgIHRoaXMuZnMucmVhZFN5bmModGhpcy5mZCwgYnVmZmVyLCAwLCAxLCBvZmZzZXQpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihlcnIudG9TdHJpbmcoKSk7XG4gIH1cbiAgcmV0dXJuIGJ1ZmZlclswXTtcbn1cbk1sTm9kZUZpbGUucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKXtcbiAgdHJ5IHtcbiAgICB0aGlzLmZzLmNsb3NlU3luYyh0aGlzLmZkKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoZXJyLnRvU3RyaW5nKCkpO1xuICB9XG59XG5cbk1sTm9kZUZpbGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWxOb2RlRmlsZTtcblxuLy9Qcm92aWRlczogTWxOb2RlRmlsZVxuLy9JZjogYnJvd3NlclxuZnVuY3Rpb24gTWxOb2RlRmlsZSgpe1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDE0IErDqXLDtG1lIFZvdWlsbG9uLCBIdWdvIEhldXphcmRcbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8vLy8vLy8vLy8vLyBEdW1teSBmaWxlc3lzdGVtXG5cbi8vUHJvdmlkZXM6IGNhbWxfdHJhaWxpbmdfc2xhc2hcbmZ1bmN0aW9uIGNhbWxfdHJhaWxpbmdfc2xhc2gobmFtZSl7XG4gIHJldHVybiAobmFtZS5zbGljZSgtMSkgIT09IFwiL1wiKSA/IChuYW1lICsgXCIvXCIpIDogbmFtZTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jdXJyZW50X2RpclxuLy9SZXF1aXJlczogY2FtbF90cmFpbGluZ19zbGFzaCwgZnNfbm9kZV9zdXBwb3J0ZWRcbmlmKGZzX25vZGVfc3VwcG9ydGVkICgpICYmIGdsb2JhbFRoaXMucHJvY2VzcyAmJiBnbG9iYWxUaGlzLnByb2Nlc3MuY3dkKVxuICB2YXIgY2FtbF9jdXJyZW50X2RpciA9IGdsb2JhbFRoaXMucHJvY2Vzcy5jd2QoKS5yZXBsYWNlKC9cXFxcL2csJy8nKTtcbmVsc2VcbiAgdmFyIGNhbWxfY3VycmVudF9kaXIgPSAgXCIvc3RhdGljXCI7XG5jYW1sX2N1cnJlbnRfZGlyID0gY2FtbF90cmFpbGluZ19zbGFzaChjYW1sX2N1cnJlbnRfZGlyKTtcblxuLy9Qcm92aWRlczogY2FtbF9nZXRfcm9vdFxuLy9SZXF1aXJlczogcGF0aF9pc19hYnNvbHV0ZVxuZnVuY3Rpb24gY2FtbF9nZXRfcm9vdChwYXRoKXtcbiAgdmFyIHggPSBwYXRoX2lzX2Fic29sdXRlKHBhdGgpO1xuICBpZiAoIXgpIHJldHVybjtcbiAgcmV0dXJuIHhbMF0gKyBcIi9cIn1cblxuLy9Qcm92aWRlczogY2FtbF9yb290XG4vL1JlcXVpcmVzOiBjYW1sX2dldF9yb290LCBjYW1sX2N1cnJlbnRfZGlyLCBjYW1sX2ZhaWx3aXRoXG52YXIgY2FtbF9yb290ID0gY2FtbF9nZXRfcm9vdChjYW1sX2N1cnJlbnRfZGlyKSB8fCBjYW1sX2ZhaWx3aXRoKFwidW5hYmxlIHRvIGNvbXB1dGUgY2FtbF9yb290XCIpO1xuXG5cbi8vUHJvdmlkZXM6IE1sRmlsZVxuZnVuY3Rpb24gTWxGaWxlKCl7ICB9XG5cbi8vUHJvdmlkZXM6IHBhdGhfaXNfYWJzb2x1dGVcbi8vUmVxdWlyZXM6IGZzX25vZGVfc3VwcG9ydGVkXG5mdW5jdGlvbiBtYWtlX3BhdGhfaXNfYWJzb2x1dGUoKSB7XG4gIGZ1bmN0aW9uIHBvc2l4KHBhdGgpIHtcbiAgICBpZiAocGF0aC5jaGFyQXQoMCkgPT09ICcvJykgcmV0dXJuIFtcIlwiLCBwYXRoLnN1YnN0cmluZygxKV07XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZnVuY3Rpb24gd2luMzIocGF0aCkge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL2IzZmNjMjQ1ZmIyNTUzOTkwOWVmMWQ1ZWFhMDFkYmY5MmUxNjg2MzMvbGliL3BhdGguanMjTDU2XG4gICAgdmFyIHNwbGl0RGV2aWNlUmUgPSAvXihbYS16QS1aXTp8W1xcXFwvXXsyfVteXFxcXC9dK1tcXFxcL10rW15cXFxcL10rKT8oW1xcXFwvXSk/KFtcXHNcXFNdKj8pJC87XG4gICAgdmFyIHJlc3VsdCA9IHNwbGl0RGV2aWNlUmUuZXhlYyhwYXRoKTtcbiAgICB2YXIgZGV2aWNlID0gcmVzdWx0WzFdIHx8ICcnO1xuICAgIHZhciBpc1VuYyA9IEJvb2xlYW4oZGV2aWNlICYmIGRldmljZS5jaGFyQXQoMSkgIT09ICc6Jyk7XG5cbiAgICAvLyBVTkMgcGF0aHMgYXJlIGFsd2F5cyBhYnNvbHV0ZVxuICAgIGlmIChCb29sZWFuKHJlc3VsdFsyXSB8fCBpc1VuYykpIHtcbiAgICAgIHZhciByb290ID0gKHJlc3VsdFsxXSB8fCAnJyk7XG4gICAgICB2YXIgc2VwID0gKHJlc3VsdFsyXSB8fCAnJyk7XG4gICAgICByZXR1cm4gW3Jvb3QsIHBhdGguc3Vic3RyaW5nKHJvb3QubGVuZ3RoICsgc2VwLmxlbmd0aCldXG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuICBpZihmc19ub2RlX3N1cHBvcnRlZCAoKSAmJiBnbG9iYWxUaGlzLnByb2Nlc3MgJiYgZ2xvYmFsVGhpcy5wcm9jZXNzLnBsYXRmb3JtKSB7XG4gICAgcmV0dXJuIGdsb2JhbFRoaXMucHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJyA/IHdpbjMyIDogcG9zaXg7XG4gIH1cbiAgZWxzZSByZXR1cm4gcG9zaXhcbn1cbnZhciBwYXRoX2lzX2Fic29sdXRlID0gbWFrZV9wYXRoX2lzX2Fic29sdXRlKCk7XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWFrZV9wYXRoXG4vL1JlcXVpcmVzOiBjYW1sX2N1cnJlbnRfZGlyXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZywgcGF0aF9pc19hYnNvbHV0ZVxuZnVuY3Rpb24gY2FtbF9tYWtlX3BhdGggKG5hbWUpIHtcbiAgbmFtZT1jYW1sX2pzc3RyaW5nX29mX3N0cmluZyhuYW1lKTtcbiAgaWYoICFwYXRoX2lzX2Fic29sdXRlKG5hbWUpIClcbiAgICBuYW1lID0gY2FtbF9jdXJyZW50X2RpciArIG5hbWU7XG4gIHZhciBjb21wMCA9IHBhdGhfaXNfYWJzb2x1dGUobmFtZSk7XG4gIHZhciBjb21wID0gY29tcDBbMV0uc3BsaXQoXCIvXCIpO1xuICB2YXIgbmNvbXAgPSBbXVxuICBmb3IodmFyIGkgPSAwOyBpPGNvbXAubGVuZ3RoOyBpKyspe1xuICAgIHN3aXRjaChjb21wW2ldKXtcbiAgICBjYXNlIFwiLi5cIjogaWYobmNvbXAubGVuZ3RoPjEpIG5jb21wLnBvcCgpOyBicmVhaztcbiAgICBjYXNlIFwiLlwiOiBicmVhaztcbiAgICBkZWZhdWx0OiBuY29tcC5wdXNoKGNvbXBbaV0pO2JyZWFrXG4gICAgfVxuICB9XG4gIG5jb21wLnVuc2hpZnQoY29tcDBbMF0pO1xuICBuY29tcC5vcmlnID0gbmFtZTtcbiAgcmV0dXJuIG5jb21wO1xufVxuXG4vL1Byb3ZpZGVzOmpzb29fbW91bnRfcG9pbnRcbi8vUmVxdWlyZXM6IE1sRmFrZURldmljZSwgTWxOb2RlRGV2aWNlLCBjYW1sX3Jvb3QsIGZzX25vZGVfc3VwcG9ydGVkXG52YXIganNvb19tb3VudF9wb2ludCA9IFtdXG5pZiAoZnNfbm9kZV9zdXBwb3J0ZWQoKSkge1xuICBqc29vX21vdW50X3BvaW50LnB1c2goe3BhdGg6Y2FtbF9yb290LGRldmljZTpuZXcgTWxOb2RlRGV2aWNlKGNhbWxfcm9vdCl9KTtcbn0gZWxzZSB7XG4gIGpzb29fbW91bnRfcG9pbnQucHVzaCh7cGF0aDpjYW1sX3Jvb3QsZGV2aWNlOm5ldyBNbEZha2VEZXZpY2UoY2FtbF9yb290KX0pO1xufVxuanNvb19tb3VudF9wb2ludC5wdXNoKHtwYXRoOlwiL3N0YXRpYy9cIiwgZGV2aWNlOm5ldyBNbEZha2VEZXZpY2UoXCIvc3RhdGljL1wiKX0pO1xuXG4vL1Byb3ZpZGVzOmNhbWxfbGlzdF9tb3VudF9wb2ludFxuLy9SZXF1aXJlczoganNvb19tb3VudF9wb2ludCwgY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9saXN0X21vdW50X3BvaW50KCl7XG4gIHZhciBwcmV2ID0gMFxuICBmb3IodmFyIGkgPSAwOyBpIDwganNvb19tb3VudF9wb2ludC5sZW5ndGg7IGkrKyl7XG4gICAgdmFyIG9sZCA9IHByZXY7XG4gICAgcHJldiA9IFswLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKGpzb29fbW91bnRfcG9pbnRbaV0ucGF0aCksIG9sZF1cbiAgfVxuICByZXR1cm4gcHJldjtcbn1cblxuLy9Qcm92aWRlczogcmVzb2x2ZV9mc19kZXZpY2Vcbi8vUmVxdWlyZXM6IGNhbWxfbWFrZV9wYXRoLCBqc29vX21vdW50X3BvaW50LCBjYW1sX3JhaXNlX3N5c19lcnJvciwgY2FtbF9nZXRfcm9vdCwgTWxOb2RlRGV2aWNlLCBjYW1sX3RyYWlsaW5nX3NsYXNoLCBmc19ub2RlX3N1cHBvcnRlZFxuZnVuY3Rpb24gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSl7XG4gIHZhciBwYXRoID0gY2FtbF9tYWtlX3BhdGgobmFtZSk7XG4gIHZhciBuYW1lID0gcGF0aC5qb2luKFwiL1wiKTtcbiAgdmFyIG5hbWVfc2xhc2ggPSBjYW1sX3RyYWlsaW5nX3NsYXNoKG5hbWUpO1xuICB2YXIgcmVzO1xuICBmb3IodmFyIGkgPSAwOyBpIDwganNvb19tb3VudF9wb2ludC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBtID0ganNvb19tb3VudF9wb2ludFtpXTtcbiAgICBpZihuYW1lX3NsYXNoLnNlYXJjaChtLnBhdGgpID09IDBcbiAgICAgICAmJiAoIXJlcyB8fCByZXMucGF0aC5sZW5ndGggPCBtLnBhdGgubGVuZ3RoKSlcbiAgICAgIHJlcyA9IHtwYXRoOm0ucGF0aCxkZXZpY2U6bS5kZXZpY2UscmVzdDpuYW1lLnN1YnN0cmluZyhtLnBhdGgubGVuZ3RoLG5hbWUubGVuZ3RoKX07XG4gIH1cbiAgaWYoICFyZXMgJiYgZnNfbm9kZV9zdXBwb3J0ZWQoKSkge1xuICAgIHZhciByb290ID0gY2FtbF9nZXRfcm9vdChuYW1lKTtcbiAgICBpZiAocm9vdCAmJiByb290Lm1hdGNoKC9eW2EtekEtWl06XFwvJC8pKXtcbiAgICAgIHZhciBtID0ge3BhdGg6cm9vdCxkZXZpY2U6bmV3IE1sTm9kZURldmljZShyb290KX07XG4gICAgICBqc29vX21vdW50X3BvaW50LnB1c2gobSk7XG4gICAgICByZXMgPSB7cGF0aDptLnBhdGgsZGV2aWNlOm0uZGV2aWNlLHJlc3Q6bmFtZS5zdWJzdHJpbmcobS5wYXRoLmxlbmd0aCxuYW1lLmxlbmd0aCl9O1xuICAgIH1cbiAgfVxuICBpZiggcmVzICkgcmV0dXJuIHJlcztcbiAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoXCJubyBkZXZpY2UgZm91bmQgZm9yIFwiICsgbmFtZV9zbGFzaCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbW91bnRfYXV0b2xvYWRcbi8vUmVxdWlyZXM6IE1sRmFrZURldmljZSwgY2FtbF9tYWtlX3BhdGgsIGpzb29fbW91bnRfcG9pbnQsIGNhbWxfdHJhaWxpbmdfc2xhc2hcbmZ1bmN0aW9uIGNhbWxfbW91bnRfYXV0b2xvYWQobmFtZSxmKXtcbiAgdmFyIHBhdGggPSBjYW1sX21ha2VfcGF0aChuYW1lKTtcbiAgdmFyIG5hbWUgPSBjYW1sX3RyYWlsaW5nX3NsYXNoKHBhdGguam9pbihcIi9cIikpO1xuICBqc29vX21vdW50X3BvaW50LnB1c2goe3BhdGg6bmFtZSxkZXZpY2U6bmV3IE1sRmFrZURldmljZShuYW1lLGYpfSlcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5tb3VudFxuLy9SZXF1aXJlczoganNvb19tb3VudF9wb2ludCwgY2FtbF9tYWtlX3BhdGgsIGNhbWxfdHJhaWxpbmdfc2xhc2hcbmZ1bmN0aW9uIGNhbWxfdW5tb3VudChuYW1lKXtcbiAgdmFyIHBhdGggPSBjYW1sX21ha2VfcGF0aChuYW1lKTtcbiAgdmFyIG5hbWUgPSBjYW1sX3RyYWlsaW5nX3NsYXNoKHBhdGguam9pbihcIi9cIikpO1xuICB2YXIgaWR4ID0gLTE7XG4gIGZvcih2YXIgaSA9IDA7IGkgPCBqc29vX21vdW50X3BvaW50Lmxlbmd0aDsgaSsrKVxuICAgIGlmKGpzb29fbW91bnRfcG9pbnRbaV0ucGF0aCA9PSBuYW1lKSBpZHggPSBpO1xuICBpZihpZHggPiAtMSkganNvb19tb3VudF9wb2ludC5zcGxpY2UoaWR4LDEpO1xuICByZXR1cm4gMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19nZXRjd2Rcbi8vUmVxdWlyZXM6IGNhbWxfY3VycmVudF9kaXIsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfc3lzX2dldGN3ZCgpIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoY2FtbF9jdXJyZW50X2Rpcik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NoZGlyXG4vL1JlcXVpcmVzOiBjYW1sX2N1cnJlbnRfZGlyLCBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZSwgcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfdHJhaWxpbmdfc2xhc2gsIGNhbWxfanNieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3lzX2NoZGlyKGRpcikge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKGRpcik7XG4gIGlmKHJvb3QuZGV2aWNlLmV4aXN0cyhyb290LnJlc3QpKSB7XG4gICAgaWYocm9vdC5yZXN0KSBjYW1sX2N1cnJlbnRfZGlyID0gY2FtbF90cmFpbGluZ19zbGFzaChyb290LnBhdGggKyByb290LnJlc3QpO1xuICAgIGVsc2UgY2FtbF9jdXJyZW50X2RpciA9IHJvb3QucGF0aDtcbiAgICByZXR1cm4gMDtcbiAgfVxuICBlbHNlIHtcbiAgICBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZShjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKGRpcikpO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2Vfbm9fc3VjaF9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvclxuZnVuY3Rpb24gY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUobmFtZSl7XG4gIGNhbWxfcmFpc2Vfc3lzX2Vycm9yIChuYW1lICsgXCI6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnlcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2Vfbm90X2FfZGlyXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvclxuZnVuY3Rpb24gY2FtbF9yYWlzZV9ub3RfYV9kaXIobmFtZSl7XG4gIGNhbWxfcmFpc2Vfc3lzX2Vycm9yIChuYW1lICsgXCI6IE5vdCBhIGRpcmVjdG9yeVwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfZmlsZV9leGlzdHNcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlXG5mdW5jdGlvbiBjYW1sX3N5c19maWxlX2V4aXN0cyAobmFtZSkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICByZXR1cm4gcm9vdC5kZXZpY2UuZXhpc3RzKHJvb3QucmVzdCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX3JlYWRfZGlyZWN0b3J5XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX25vdF9hX2RpciwgcmVzb2x2ZV9mc19kZXZpY2VcbmZ1bmN0aW9uIGNhbWxfc3lzX3JlYWRfZGlyZWN0b3J5KG5hbWUpe1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICB2YXIgYSA9IHJvb3QuZGV2aWNlLnJlYWRkaXIocm9vdC5yZXN0KTtcbiAgdmFyIGwgPSBuZXcgQXJyYXkoYS5sZW5ndGggKyAxKTtcbiAgbFswXSA9IDA7XG4gIGZvcih2YXIgaT0wO2k8YS5sZW5ndGg7aSsrKVxuICAgIGxbaSsxXSA9IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoYVtpXSk7XG4gIHJldHVybiBsO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19yZW1vdmVcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfbm9fc3VjaF9maWxlLCByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9zeXNfcmVtb3ZlKG5hbWUpe1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICB2YXIgb2sgPSByb290LmRldmljZS51bmxpbmsocm9vdC5yZXN0KTtcbiAgaWYob2sgPT0gMCkgY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUoY2FtbF9qc2J5dGVzX29mX3N0cmluZyhuYW1lKSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19pc19kaXJlY3Rvcnlcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlXG5mdW5jdGlvbiBjYW1sX3N5c19pc19kaXJlY3RvcnkobmFtZSl7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIHZhciBhID0gcm9vdC5kZXZpY2UuaXNfZGlyKHJvb3QucmVzdCk7XG4gIHJldHVybiBhPzE6MDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfcmVuYW1lXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoLCByZXNvbHZlX2ZzX2RldmljZVxuZnVuY3Rpb24gY2FtbF9zeXNfcmVuYW1lKG8sbil7XG4gIHZhciBvX3Jvb3QgPSByZXNvbHZlX2ZzX2RldmljZShvKTtcbiAgdmFyIG5fcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG4pO1xuICBpZihvX3Jvb3QuZGV2aWNlICE9IG5fcm9vdC5kZXZpY2UpXG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfc3lzX3JlbmFtZTogY2Fubm90IG1vdmUgZmlsZSBiZXR3ZWVuIHR3byBmaWxlc3lzdGVtXCIpO1xuICBpZighb19yb290LmRldmljZS5yZW5hbWUpXG4gICAgY2FtbF9mYWlsd2l0aChcImNhbWxfc3lzX3JlbmFtZTogbm8gaW1wbGVtZW50ZWRcIik7XG4gIG9fcm9vdC5kZXZpY2UucmVuYW1lKG9fcm9vdC5yZXN0LCBuX3Jvb3QucmVzdCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX21rZGlyXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9yYWlzZV9zeXNfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfc3lzX21rZGlyKG5hbWUsIHBlcm0pe1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICByb290LmRldmljZS5ta2Rpcihyb290LnJlc3QscGVybSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19ybWRpclxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfcmFpc2Vfc3lzX2Vycm9yLCBjYW1sX3JhaXNlX25vdF9hX2RpclxuZnVuY3Rpb24gY2FtbF9zeXNfcm1kaXIobmFtZSl7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIHJvb3QuZGV2aWNlLnJtZGlyKHJvb3QucmVzdCk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX21hcF9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX2JhX21hcF9maWxlKHZmZCwga2luZCwgbGF5b3V0LCBzaGFyZWQsIGRpbXMsIHBvcykge1xuICAvLyB2YXIgZGF0YSA9IGNhbWxfZ2xvYmFsX2RhdGEuZmRzW3ZmZF07XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX2JhX21hcF9maWxlIG5vdCBpbXBsZW1lbnRlZFwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9tYXBfZmlsZV9ieXRlY29kZVxuLy9SZXF1aXJlczogY2FtbF9iYV9tYXBfZmlsZVxuZnVuY3Rpb24gY2FtbF9iYV9tYXBfZmlsZV9ieXRlY29kZShhcmd2LGFyZ24pe1xuICByZXR1cm4gY2FtbF9iYV9tYXBfZmlsZShhcmd2WzBdLGFyZ3ZbMV0sYXJndlsyXSxhcmd2WzNdLGFyZ3ZbNF0sYXJndls1XSk7XG59XG5cbi8vUHJvdmlkZXM6IGpzb29fY3JlYXRlX2ZpbGVfZXh0ZXJuXG5mdW5jdGlvbiBqc29vX2NyZWF0ZV9maWxlX2V4dGVybihuYW1lLGNvbnRlbnQpe1xuICBpZihnbG9iYWxUaGlzLmpzb29fY3JlYXRlX2ZpbGUpXG4gICAgZ2xvYmFsVGhpcy5qc29vX2NyZWF0ZV9maWxlKG5hbWUsY29udGVudCk7XG4gIGVsc2Uge1xuICAgIGlmKCFnbG9iYWxUaGlzLmNhbWxfZnNfdG1wKSBnbG9iYWxUaGlzLmNhbWxfZnNfdG1wID0gW107XG4gICAgZ2xvYmFsVGhpcy5jYW1sX2ZzX3RtcC5wdXNoKHtuYW1lOm5hbWUsY29udGVudDpjb250ZW50fSk7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZnNfaW5pdFxuLy9SZXF1aXJlczoganNvb19jcmVhdGVfZmlsZVxuZnVuY3Rpb24gY2FtbF9mc19pbml0ICgpe1xuICB2YXIgdG1wPWdsb2JhbFRoaXMuY2FtbF9mc190bXBcbiAgaWYodG1wKXtcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgdG1wLmxlbmd0aDsgaSsrKXtcbiAgICAgIGpzb29fY3JlYXRlX2ZpbGUodG1wW2ldLm5hbWUsdG1wW2ldLmNvbnRlbnQpO1xuICAgIH1cbiAgfVxuICBnbG9iYWxUaGlzLmpzb29fY3JlYXRlX2ZpbGUgPSBqc29vX2NyZWF0ZV9maWxlO1xuICBnbG9iYWxUaGlzLmNhbWxfZnNfdG1wID0gW107XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NyZWF0ZV9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoLCByZXNvbHZlX2ZzX2RldmljZVxuZnVuY3Rpb24gY2FtbF9jcmVhdGVfZmlsZShuYW1lLGNvbnRlbnQpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgaWYoISByb290LmRldmljZS5yZWdpc3RlcikgY2FtbF9mYWlsd2l0aChcImNhbm5vdCByZWdpc3RlciBmaWxlXCIpO1xuICByb290LmRldmljZS5yZWdpc3Rlcihyb290LnJlc3QsY29udGVudCk7XG4gIHJldHVybiAwO1xufVxuXG5cbi8vUHJvdmlkZXM6IGpzb29fY3JlYXRlX2ZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfY3JlYXRlX2ZpbGUsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGpzb29fY3JlYXRlX2ZpbGUobmFtZSxjb250ZW50KSB7XG4gIHZhciBuYW1lID0gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhuYW1lKTtcbiAgdmFyIGNvbnRlbnQgPSBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKGNvbnRlbnQpO1xuICByZXR1cm4gY2FtbF9jcmVhdGVfZmlsZShuYW1lLCBjb250ZW50KTtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JlYWRfZmlsZV9jb250ZW50XG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUsIGNhbWxfY3JlYXRlX2J5dGVzLCBjYW1sX3N0cmluZ19vZl9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlcywgY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9yZWFkX2ZpbGVfY29udGVudCAobmFtZSkge1xuICB2YXIgbmFtZSA9ICh0eXBlb2YgbmFtZSA9PSBcInN0cmluZ1wiKT9jYW1sX3N0cmluZ19vZl9qc2J5dGVzKG5hbWUpOm5hbWU7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmKHJvb3QuZGV2aWNlLmV4aXN0cyhyb290LnJlc3QpKSB7XG4gICAgdmFyIGZpbGUgPSByb290LmRldmljZS5vcGVuKHJvb3QucmVzdCx7cmRvbmx5OjF9KTtcbiAgICB2YXIgbGVuICA9IGZpbGUubGVuZ3RoKCk7XG4gICAgdmFyIGJ1ZiAgPSBjYW1sX2NyZWF0ZV9ieXRlcyhsZW4pO1xuICAgIGZpbGUucmVhZCgwLGJ1ZiwwLGxlbik7XG4gICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2J5dGVzKGJ1ZilcbiAgfVxuICBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZShjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKG5hbWUpKTtcbn1cbiIsIi8vUHJvdmlkZXM6IHVuaXhfZ2V0dGltZW9mZGF5XG5mdW5jdGlvbiB1bml4X2dldHRpbWVvZmRheSAoKSB7XG4gIHJldHVybiAobmV3IERhdGUoKSkuZ2V0VGltZSgpIC8gMTAwMDtcbn1cblxuLy9Qcm92aWRlczogdW5peF90aW1lXG4vL1JlcXVpcmVzOiB1bml4X2dldHRpbWVvZmRheVxuZnVuY3Rpb24gdW5peF90aW1lICgpIHtcbiAgcmV0dXJuIE1hdGguZmxvb3IodW5peF9nZXR0aW1lb2ZkYXkgKCkpO1xufVxuXG4vL1Byb3ZpZGVzOiB1bml4X2dtdGltZVxuZnVuY3Rpb24gdW5peF9nbXRpbWUgKHQpIHtcbiAgdmFyIGQgPSBuZXcgRGF0ZSAodCAqIDEwMDApO1xuICB2YXIgZF9udW0gPSBkLmdldFRpbWUoKTtcbiAgdmFyIGphbnVhcnlmaXJzdCA9IChuZXcgRGF0ZShEYXRlLlVUQyhkLmdldFVUQ0Z1bGxZZWFyKCksIDAsIDEpKSkuZ2V0VGltZSgpO1xuICB2YXIgZG95ID0gTWF0aC5mbG9vcigoZF9udW0gLSBqYW51YXJ5Zmlyc3QpIC8gODY0MDAwMDApO1xuICByZXR1cm4gQkxPQ0soMCwgZC5nZXRVVENTZWNvbmRzKCksIGQuZ2V0VVRDTWludXRlcygpLCBkLmdldFVUQ0hvdXJzKCksXG4gICAgICAgICAgICAgICBkLmdldFVUQ0RhdGUoKSwgZC5nZXRVVENNb250aCgpLCBkLmdldFVUQ0Z1bGxZZWFyKCkgLSAxOTAwLFxuICAgICAgICAgICAgICAgZC5nZXRVVENEYXkoKSwgZG95LFxuICAgICAgICAgICAgICAgZmFsc2UgfCAwIC8qIGZvciBVVEMgZGF5bGlnaHQgc2F2aW5ncyB0aW1lIGlzIGZhbHNlICovKVxufVxuXG4vL1Byb3ZpZGVzOiB1bml4X2xvY2FsdGltZVxuZnVuY3Rpb24gdW5peF9sb2NhbHRpbWUgKHQpIHtcbiAgdmFyIGQgPSBuZXcgRGF0ZSAodCAqIDEwMDApO1xuICB2YXIgZF9udW0gPSBkLmdldFRpbWUoKTtcbiAgdmFyIGphbnVhcnlmaXJzdCA9IChuZXcgRGF0ZShkLmdldEZ1bGxZZWFyKCksIDAsIDEpKS5nZXRUaW1lKCk7XG4gIHZhciBkb3kgPSBNYXRoLmZsb29yKChkX251bSAtIGphbnVhcnlmaXJzdCkgLyA4NjQwMDAwMCk7XG4gIHZhciBqYW4gPSBuZXcgRGF0ZShkLmdldEZ1bGxZZWFyKCksIDAsIDEpO1xuICB2YXIganVsID0gbmV3IERhdGUoZC5nZXRGdWxsWWVhcigpLCA2LCAxKTtcbiAgdmFyIHN0ZFRpbWV6b25lT2Zmc2V0ID0gTWF0aC5tYXgoamFuLmdldFRpbWV6b25lT2Zmc2V0KCksIGp1bC5nZXRUaW1lem9uZU9mZnNldCgpKTtcbiAgcmV0dXJuIEJMT0NLKDAsIGQuZ2V0U2Vjb25kcygpLCBkLmdldE1pbnV0ZXMoKSwgZC5nZXRIb3VycygpLFxuICAgICAgICAgICAgICAgZC5nZXREYXRlKCksIGQuZ2V0TW9udGgoKSwgZC5nZXRGdWxsWWVhcigpIC0gMTkwMCxcbiAgICAgICAgICAgICAgIGQuZ2V0RGF5KCksIGRveSxcbiAgICAgICAgICAgICAgIChkLmdldFRpbWV6b25lT2Zmc2V0KCkgPCBzdGRUaW1lem9uZU9mZnNldCkgfCAwIC8qIGRheWxpZ2h0IHNhdmluZ3MgdGltZSAgZmllbGQuICovKVxufVxuXG4vL1Byb3ZpZGVzOiB1bml4X21rdGltZVxuLy9SZXF1aXJlczogdW5peF9sb2NhbHRpbWVcbmZ1bmN0aW9uIHVuaXhfbWt0aW1lKHRtKXtcbiAgdmFyIGQgPSAobmV3IERhdGUodG1bNl0rMTkwMCx0bVs1XSx0bVs0XSx0bVszXSx0bVsyXSx0bVsxXSkpLmdldFRpbWUoKTtcbiAgdmFyIHQgPSBNYXRoLmZsb29yKGQgLyAxMDAwKTtcbiAgdmFyIHRtMiA9IHVuaXhfbG9jYWx0aW1lKHQpO1xuICByZXR1cm4gQkxPQ0soMCx0LHRtMik7XG59XG5cbi8vUHJvdmlkZXM6IHdpbl9zdGFydHVwIGNvbnN0XG5mdW5jdGlvbiB3aW5fc3RhcnR1cCgpIHt9XG5cbi8vUHJvdmlkZXM6IHdpbl9jbGVhbnVwIGNvbnN0XG5mdW5jdGlvbiB3aW5fY2xlYW51cCgpIHt9XG5cbi8vUHJvdmlkZXM6IHdpbl9oYW5kbGVfZmQgY29uc3RcbmZ1bmN0aW9uIHdpbl9oYW5kbGVfZmQoeCkge3JldHVybiB4O31cblxuLy9Qcm92aWRlczogdW5peF9pc2F0dHlcbi8vUmVxdWlyZXM6IGZzX25vZGVfc3VwcG9ydGVkXG5mdW5jdGlvbiB1bml4X2lzYXR0eShmaWxlRGVzY3JpcHRvcikge1xuICBpZihmc19ub2RlX3N1cHBvcnRlZCgpKSB7XG4gICAgdmFyIHR0eSA9IHJlcXVpcmUoJ3R0eScpO1xuICAgIHJldHVybiB0dHkuaXNhdHR5KGZpbGVEZXNjcmlwdG9yKT8xOjA7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogbWFrZV91bml4X2Vycl9hcmdzXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xudmFyIHVuaXhfZXJyb3IgPSBbXG4gIC8qID09PVVuaXguZXJyb3I9PT1cbiAgICpcbiAgICogVGhpcyBhcnJheSBpcyBpbiBvcmRlciBvZiB0aGUgdmFyaWFudCBpbiBPQ2FtbFxuICAgKi9cbiAgXCJFMkJJR1wiLCBcIkVBQ0NFU1wiLCBcIkVBR0FJTlwiLCBcIkVCQURGXCIsIFwiRUJVU1lcIiwgXCJFQ0hJTERcIiwgXCJFREVBRExLXCIsIFwiRURPTVwiLFxuICBcIkVFWElTVFwiLCBcIkVGQVVMVFwiLCBcIkVGQklHXCIsIFwiRUlOVFJcIiwgXCJFSU5WQUxcIiwgXCJFSU9cIiwgXCJFSVNESVJcIiwgXCJFTUZJTEVcIixcbiAgXCJFTUxJTktcIiwgXCJFTkFNRVRPT0xPTkdcIiwgXCJFTkZJTEVcIiwgXCJFTk9ERVZcIiwgXCJFTk9FTlRcIiwgXCJFTk9FWEVDXCIsIFwiRU5PTENLXCIsXG4gIFwiRU5PTUVNXCIsIFwiRU5PU1BDXCIsIFwiRU5PU1lTXCIsIFwiRU5PVERJUlwiLCBcIkVOT1RFTVBUWVwiLCBcIkVOT1RUWVwiLCBcIkVOWElPXCIsXG4gIFwiRVBFUk1cIiwgXCJFUElQRVwiLCBcIkVSQU5HRVwiLCBcIkVST0ZTXCIsIFwiRVNQSVBFXCIsIFwiRVNSQ0hcIiwgXCJFWERFVlwiLCBcIkVXT1VMREJMT0NLXCIsXG4gIFwiRUlOUFJPR1JFU1NcIiwgXCJFQUxSRUFEWVwiLCBcIkVOT1RTT0NLXCIsIFwiRURFU1RBRERSUkVRXCIsIFwiRU1TR1NJWkVcIixcbiAgXCJFUFJPVE9UWVBFXCIsIFwiRU5PUFJPVE9PUFRcIiwgXCJFUFJPVE9OT1NVUFBPUlRcIiwgXCJFU09DS1ROT1NVUFBPUlRcIixcbiAgXCJFT1BOT1RTVVBQXCIsIFwiRVBGTk9TVVBQT1JUXCIsIFwiRUFGTk9TVVBQT1JUXCIsIFwiRUFERFJJTlVTRVwiLCBcIkVBRERSTk9UQVZBSUxcIixcbiAgXCJFTkVURE9XTlwiLCBcIkVORVRVTlJFQUNIXCIsIFwiRU5FVFJFU0VUXCIsIFwiRUNPTk5BQk9SVEVEXCIsIFwiRUNPTk5SRVNFVFwiLCBcIkVOT0JVRlNcIixcbiAgXCJFSVNDT05OXCIsIFwiRU5PVENPTk5cIiwgXCJFU0hVVERPV05cIiwgXCJFVE9PTUFOWVJFRlNcIiwgXCJFVElNRURPVVRcIiwgXCJFQ09OTlJFRlVTRURcIixcbiAgXCJFSE9TVERPV05cIiwgXCJFSE9TVFVOUkVBQ0hcIiwgXCJFTE9PUFwiLCBcIkVPVkVSRkxPV1wiXG5dO1xuZnVuY3Rpb24gbWFrZV91bml4X2Vycl9hcmdzKGNvZGUsIHN5c2NhbGwsIHBhdGgsIGVycm5vKSB7XG4gIHZhciB2YXJpYW50ID0gdW5peF9lcnJvci5pbmRleE9mKGNvZGUpO1xuICBpZiAodmFyaWFudCA8IDApIHtcbiAgICAvLyBEZWZhdWx0IGlmIHVuZGVmaW5lZFxuICAgIGlmIChlcnJubyA9PSBudWxsKSB7XG4gICAgICBlcnJubyA9IC05OTk5XG4gICAgfVxuICAgIC8vIElmIG5vbmUgb2YgdGhlIGFib3ZlIHZhcmlhbnRzLCBmYWxsYmFjayB0byBFVU5LTk9XTkVSUihpbnQpXG4gICAgdmFyaWFudCA9IEJMT0NLKDAsIGVycm5vKTtcbiAgfVxuICB2YXIgYXJncyA9IFtcbiAgICB2YXJpYW50LFxuICAgIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKHN5c2NhbGwgfHwgXCJcIiksXG4gICAgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcocGF0aCB8fCBcIlwiKVxuICBdO1xuICByZXR1cm4gYXJncztcbn1cblxuLy9Qcm92aWRlczogdW5peF9zdGF0XG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gdW5peF9zdGF0KG5hbWUpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgaWYgKCFyb290LmRldmljZS5zdGF0KSB7XG4gICAgY2FtbF9mYWlsd2l0aChcInVuaXhfc3RhdDogbm90IGltcGxlbWVudGVkXCIpO1xuICB9XG4gIHJldHVybiByb290LmRldmljZS5zdGF0KHJvb3QucmVzdCwgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlKTtcbn1cblxuLy9Qcm92aWRlczogdW5peF9zdGF0XzY0XG4vL1JlcXVpcmVzOiB1bml4X3N0YXRcbnZhciB1bml4X3N0YXRfNjQgPSB1bml4X3N0YXQ7XG5cbi8vUHJvdmlkZXM6IHVuaXhfbHN0YXRcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiB1bml4X2xzdGF0KG5hbWUpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgaWYgKCFyb290LmRldmljZS5sc3RhdCkge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJ1bml4X2xzdGF0OiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIHJvb3QuZGV2aWNlLmxzdGF0KHJvb3QucmVzdCwgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlKTtcbn1cblxuLy9Qcm92aWRlczogdW5peF9sc3RhdF82NFxuLy9SZXF1aXJlczogdW5peF9sc3RhdFxudmFyIHVuaXhfbHN0YXRfNjQgPSB1bml4X2xzdGF0O1xuXG4vL1Byb3ZpZGVzOiB1bml4X21rZGlyXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gdW5peF9ta2RpcihuYW1lLCBwZXJtKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UubWtkaXIpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwidW5peF9ta2Rpcjogbm90IGltcGxlbWVudGVkXCIpO1xuICB9XG4gIHJldHVybiByb290LmRldmljZS5ta2Rpcihyb290LnJlc3QsIHBlcm0sIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gdHJ1ZSk7XG59XG5cbi8vUHJvdmlkZXM6IHVuaXhfcm1kaXJcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiB1bml4X3JtZGlyKG5hbWUpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgaWYgKCFyb290LmRldmljZS5ybWRpcikge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJ1bml4X3JtZGlyOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIHJvb3QuZGV2aWNlLnJtZGlyKHJvb3QucmVzdCwgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlKTtcbn1cblxuLy9Qcm92aWRlczogdW5peF9zeW1saW5rXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gdW5peF9zeW1saW5rKHRvX2Rpciwgc3JjLCBkc3QpIHtcbiAgdmFyIHNyY19yb290ID0gcmVzb2x2ZV9mc19kZXZpY2Uoc3JjKTtcbiAgdmFyIGRzdF9yb290ID0gcmVzb2x2ZV9mc19kZXZpY2UoZHN0KTtcbiAgaWYoc3JjX3Jvb3QuZGV2aWNlICE9IGRzdF9yb290LmRldmljZSlcbiAgICBjYW1sX2ZhaWx3aXRoKFwidW5peF9zeW1saW5rOiBjYW5ub3Qgc3ltbGluayBiZXR3ZWVuIHR3byBmaWxlc3lzdGVtc1wiKTtcbiAgaWYgKCFzcmNfcm9vdC5kZXZpY2Uuc3ltbGluaykge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJ1bml4X3N5bWxpbms6IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuICByZXR1cm4gc3JjX3Jvb3QuZGV2aWNlLnN5bWxpbmsodG9fZGlyLCBzcmNfcm9vdC5yZXN0LCBkc3Rfcm9vdC5yZXN0LCAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUpO1xufVxuXG4vL1Byb3ZpZGVzOiB1bml4X3JlYWRsaW5rXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gdW5peF9yZWFkbGluayhuYW1lKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UucmVhZGxpbmspIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwidW5peF9yZWFkbGluazogbm90IGltcGxlbWVudGVkXCIpO1xuICB9XG4gIHJldHVybiByb290LmRldmljZS5yZWFkbGluayhyb290LnJlc3QsIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gdHJ1ZSk7XG59XG5cbi8vUHJvdmlkZXM6IHVuaXhfdW5saW5rXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gdW5peF91bmxpbmsobmFtZSkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICBpZiAoIXJvb3QuZGV2aWNlLnVubGluaykge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJ1bml4X3VubGluazogbm90IGltcGxlbWVudGVkXCIpO1xuICB9XG4gIHJldHVybiByb290LmRldmljZS51bmxpbmsocm9vdC5yZXN0LCAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUpO1xufVxuXG4vL1Byb3ZpZGVzOiB1bml4X2dldHVpZFxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9ub3RfZm91bmRcbmZ1bmN0aW9uIHVuaXhfZ2V0dWlkKHVuaXQpIHtcbiAgaWYoZ2xvYmFsVGhpcy5wcm9jZXNzICYmIGdsb2JhbFRoaXMucHJvY2Vzcy5nZXR1aWQpe1xuICAgIHJldHVybiBnbG9iYWxUaGlzLnByb2Nlc3MuZ2V0dWlkKCk7XG4gIH1cbiAgY2FtbF9yYWlzZV9ub3RfZm91bmQoKTtcbn1cblxuLy9Qcm92aWRlczogdW5peF9nZXRwd3VpZFxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9ub3RfZm91bmRcbmZ1bmN0aW9uIHVuaXhfZ2V0cHd1aWQodW5pdCkge1xuICBjYW1sX3JhaXNlX25vdF9mb3VuZCgpXG59XG5cbi8vUHJvdmlkZXM6IHVuaXhfaGFzX3N5bWxpbmtcbi8vUmVxdWlyZXM6IGZzX25vZGVfc3VwcG9ydGVkXG5mdW5jdGlvbiB1bml4X2hhc19zeW1saW5rKHVuaXQpIHtcbiAgcmV0dXJuIGZzX25vZGVfc3VwcG9ydGVkKCk/MTowXG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vLy8vLy8vLy8vLy8vIFN5c1xuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX3N5c19lcnJvciAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3dpdGhfc3RyaW5nLCBjYW1sX2dsb2JhbF9kYXRhXG5mdW5jdGlvbiBjYW1sX3JhaXNlX3N5c19lcnJvciAobXNnKSB7XG4gIGNhbWxfcmFpc2Vfd2l0aF9zdHJpbmcoY2FtbF9nbG9iYWxfZGF0YS5TeXNfZXJyb3IsIG1zZyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2V4aXRcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9zeXNfZXhpdCAoY29kZSkge1xuICB2YXIgZyA9IGdsb2JhbFRoaXM7XG4gIGlmKGcucXVpdCkgZy5xdWl0KGNvZGUpO1xuICAvL25vZGVqc1xuICBpZihnLnByb2Nlc3MgJiYgZy5wcm9jZXNzLmV4aXQpXG4gICAgZy5wcm9jZXNzLmV4aXQoY29kZSk7XG4gIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkZ1bmN0aW9uICdleGl0JyBub3QgaW1wbGVtZW50ZWRcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaXNfc3BlY2lhbF9leGNlcHRpb25cbmZ1bmN0aW9uIGNhbWxfaXNfc3BlY2lhbF9leGNlcHRpb24oZXhuKXtcbiAgc3dpdGNoKGV4blsyXSkge1xuICBjYXNlIC04OiAvLyBNYXRjaF9mYWlsdXJlXG4gIGNhc2UgLTExOiAvLyBBc3NlcnRfZmFpbHVyZVxuICBjYXNlIC0xMjogLy8gVW5kZWZpbmVkX3JlY3Vyc2l2ZV9tb2R1bGVcbiAgICByZXR1cm4gMTtcbiAgZGVmYXVsdDpcbiAgICByZXR1cm4gMDtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2Zvcm1hdF9leGNlcHRpb25cbi8vUmVxdWlyZXM6IE1sQnl0ZXMsIGNhbWxfaXNfc3BlY2lhbF9leGNlcHRpb25cbmZ1bmN0aW9uIGNhbWxfZm9ybWF0X2V4Y2VwdGlvbihleG4pe1xuICB2YXIgciA9IFwiXCI7XG4gIGlmKGV4blswXSA9PSAwKSB7XG4gICAgciArPSBleG5bMV1bMV07XG4gICAgaWYoZXhuLmxlbmd0aCA9PSAzICYmIGV4blsyXVswXSA9PSAwICYmIGNhbWxfaXNfc3BlY2lhbF9leGNlcHRpb24oZXhuWzFdKSkge1xuXG4gICAgICB2YXIgYnVja2V0ID0gZXhuWzJdO1xuICAgICAgdmFyIHN0YXJ0ID0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHN0YXJ0ID0gMlxuICAgICAgdmFyIGJ1Y2tldCA9IGV4bjtcbiAgICB9XG4gICAgciArPSBcIihcIjtcbiAgICBmb3IodmFyIGkgPSBzdGFydDsgaSA8IGJ1Y2tldC5sZW5ndGg7IGkgKyspe1xuICAgICAgaWYoaSA+IHN0YXJ0KSByKz1cIiwgXCI7XG4gICAgICB2YXIgdiA9IGJ1Y2tldFtpXVxuICAgICAgaWYodHlwZW9mIHYgPT0gXCJudW1iZXJcIilcbiAgICAgICAgcis9IHYudG9TdHJpbmcoKTtcbiAgICAgIGVsc2UgaWYodiBpbnN0YW5jZW9mIE1sQnl0ZXMpe1xuICAgICAgICByKz0gJ1wiJyArIHYudG9TdHJpbmcoKSArICdcIic7XG4gICAgICB9XG4gICAgICBlbHNlIGlmKHR5cGVvZiB2ID09IFwic3RyaW5nXCIpe1xuICAgICAgICByKz0gJ1wiJyArIHYudG9TdHJpbmcoKSArICdcIic7XG4gICAgICB9XG4gICAgICBlbHNlIHIgKz0gXCJfXCI7XG4gICAgfVxuICAgIHIgKz0gXCIpXCJcbiAgfSBlbHNlIGlmIChleG5bMF0gPT0gMjQ4KXtcbiAgICByICs9IGV4blsxXVxuICB9XG4gIHJldHVybiByXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZmF0YWxfdW5jYXVnaHRfZXhjZXB0aW9uXG4vL1JlcXVpcmVzOiBjYW1sX25hbWVkX3ZhbHVlLCBjYW1sX2Zvcm1hdF9leGNlcHRpb25cbmZ1bmN0aW9uIGNhbWxfZmF0YWxfdW5jYXVnaHRfZXhjZXB0aW9uKGVycil7XG4gIGlmKGVyciBpbnN0YW5jZW9mIEFycmF5ICYmIChlcnJbMF0gPT0gMCB8fCBlcnJbMF0gPT0gMjQ4KSkge1xuICAgIHZhciBoYW5kbGVyID0gY2FtbF9uYW1lZF92YWx1ZShcIlByaW50ZXhjLmhhbmRsZV91bmNhdWdodF9leGNlcHRpb25cIik7XG4gICAgaWYoaGFuZGxlcikgaGFuZGxlcihlcnIsZmFsc2UpO1xuICAgIGVsc2Uge1xuICAgICAgdmFyIG1zZyA9IGNhbWxfZm9ybWF0X2V4Y2VwdGlvbihlcnIpO1xuICAgICAgdmFyIGF0X2V4aXQgPSBjYW1sX25hbWVkX3ZhbHVlKFwiUGVydmFzaXZlcy5kb19hdF9leGl0XCIpO1xuICAgICAgaWYoYXRfZXhpdCkgeyBhdF9leGl0KDApIH1cbiAgICAgIGdsb2JhbFRoaXMuY29uc29sZS5lcnJvcihcIkZhdGFsIGVycm9yOiBleGNlcHRpb24gXCIgKyBtc2cgKyBcIlxcblwiKTtcbiAgICB9XG4gIH1cbiAgZWxzZSB7XG4gICAgdGhyb3cgZXJyXG4gIH1cbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX3NldF9zdGF0aWNfZW52XG5mdW5jdGlvbiBjYW1sX3NldF9zdGF0aWNfZW52KGssdil7XG4gIGlmKCFnbG9iYWxUaGlzLmpzb29fc3RhdGljX2VudilcbiAgICBnbG9iYWxUaGlzLmpzb29fc3RhdGljX2VudiA9IHt9XG4gIGdsb2JhbFRoaXMuanNvb19zdGF0aWNfZW52W2tdID0gdjtcbiAgcmV0dXJuIDA7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19nZXRlbnYgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9ub3RfZm91bmRcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9zeXNfZ2V0ZW52IChuYW1lKSB7XG4gIHZhciBnID0gZ2xvYmFsVGhpcztcbiAgdmFyIG4gPSBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhuYW1lKTtcbiAgLy9ub2RlanMgZW52XG4gIGlmKGcucHJvY2Vzc1xuICAgICAmJiBnLnByb2Nlc3MuZW52XG4gICAgICYmIGcucHJvY2Vzcy5lbnZbbl0gIT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhnLnByb2Nlc3MuZW52W25dKTtcbiAgaWYoZ2xvYmFsVGhpcy5qc29vX3N0YXRpY19lbnZcbiAgICAgJiYgZ2xvYmFsVGhpcy5qc29vX3N0YXRpY19lbnZbbl0pXG4gICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKGdsb2JhbFRoaXMuanNvb19zdGF0aWNfZW52W25dKVxuICBjYW1sX3JhaXNlX25vdF9mb3VuZCAoKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfdW5zYWZlX2dldGVudlxuLy9SZXF1aXJlczogY2FtbF9zeXNfZ2V0ZW52XG5mdW5jdGlvbiBjYW1sX3N5c191bnNhZmVfZ2V0ZW52KG5hbWUpe1xuICByZXR1cm4gY2FtbF9zeXNfZ2V0ZW52IChuYW1lKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hcmd2XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xudmFyIGNhbWxfYXJndiA9ICgoZnVuY3Rpb24gKCkge1xuICB2YXIgZyA9IGdsb2JhbFRoaXM7XG4gIHZhciBtYWluID0gXCJhLm91dFwiO1xuICB2YXIgYXJncyA9IFtdXG5cbiAgaWYoZy5wcm9jZXNzXG4gICAgICYmIGcucHJvY2Vzcy5hcmd2XG4gICAgICYmIGcucHJvY2Vzcy5hcmd2Lmxlbmd0aCA+IDEpIHtcbiAgICB2YXIgYXJndiA9IGcucHJvY2Vzcy5hcmd2XG4gICAgLy9ub2RlanNcbiAgICBtYWluID0gYXJndlsxXTtcbiAgICBhcmdzID0gYXJndi5zbGljZSgyKTtcbiAgfVxuXG4gIHZhciBwID0gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcobWFpbik7XG4gIHZhciBhcmdzMiA9IFswLCBwXTtcbiAgZm9yKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspXG4gICAgYXJnczIucHVzaChjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhhcmdzW2ldKSk7XG4gIHJldHVybiBhcmdzMjtcbn0pKCkpXG5cbi8vUHJvdmlkZXM6IGNhbWxfZXhlY3V0YWJsZV9uYW1lXG4vL1JlcXVpcmVzOiBjYW1sX2FyZ3ZcbnZhciBjYW1sX2V4ZWN1dGFibGVfbmFtZSA9IGNhbWxfYXJndlsxXVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19nZXRfYXJndlxuLy9SZXF1aXJlczogY2FtbF9hcmd2XG5mdW5jdGlvbiBjYW1sX3N5c19nZXRfYXJndiAoYSkge1xuICByZXR1cm4gWzAsIGNhbWxfYXJndlsxXSwgY2FtbF9hcmd2XTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfYXJndlxuLy9SZXF1aXJlczogY2FtbF9hcmd2XG5mdW5jdGlvbiBjYW1sX3N5c19hcmd2IChhKSB7XG4gIHJldHVybiBjYW1sX2FyZ3Y7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX21vZGlmeV9hcmd2XG4vL1JlcXVpcmVzOiBjYW1sX2FyZ3ZcbmZ1bmN0aW9uIGNhbWxfc3lzX21vZGlmeV9hcmd2KGFyZyl7XG4gIGNhbWxfYXJndiA9IGFyZztcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2V4ZWN1dGFibGVfbmFtZSBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9leGVjdXRhYmxlX25hbWVcbmZ1bmN0aW9uIGNhbWxfc3lzX2V4ZWN1dGFibGVfbmFtZShhKXtcbiAgcmV0dXJuIGNhbWxfZXhlY3V0YWJsZV9uYW1lXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX3N5c3RlbV9jb21tYW5kXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9zeXNfc3lzdGVtX2NvbW1hbmQoY21kKXtcbiAgdmFyIGNtZCA9IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKGNtZCk7XG4gIGlmICh0eXBlb2YgcmVxdWlyZSAhPSBcInVuZGVmaW5lZFwiXG4gICAgICAmJiByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJylcbiAgICAgICYmIHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjU3luYykge1xuICAgIHRyeSB7cmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNTeW5jKGNtZCx7c3RkaW86ICdpbmhlcml0J30pOyByZXR1cm4gMH1cbiAgICBjYXRjaCAoZSkge3JldHVybiAxfVxuICB9XG4gIGVsc2UgcmV0dXJuIDEyNztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfdGltZSBtdXRhYmxlXG52YXIgY2FtbF9pbml0aWFsX3RpbWUgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpICogMC4wMDE7XG5mdW5jdGlvbiBjYW1sX3N5c190aW1lICgpIHtcbiAgdmFyIG5vdyA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7XG4gIHJldHVybiBub3cgKiAwLjAwMSAtIGNhbWxfaW5pdGlhbF90aW1lO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c190aW1lX2luY2x1ZGVfY2hpbGRyZW5cbi8vUmVxdWlyZXM6IGNhbWxfc3lzX3RpbWVcbmZ1bmN0aW9uIGNhbWxfc3lzX3RpbWVfaW5jbHVkZV9jaGlsZHJlbihiKSB7XG4gIHJldHVybiBjYW1sX3N5c190aW1lKCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX3JhbmRvbV9zZWVkIG11dGFibGVcbi8vVGhlIGZ1bmN0aW9uIG5lZWRzIHRvIHJldHVybiBhbiBhcnJheSBzaW5jZSBPQ2FtbCA0LjAuLi5cbmZ1bmN0aW9uIGNhbWxfc3lzX3JhbmRvbV9zZWVkICgpIHtcbiAgaWYoZ2xvYmFsVGhpcy5jcnlwdG8pIHtcbiAgICBpZih0eXBlb2YgZ2xvYmFsVGhpcy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzID09PSAnZnVuY3Rpb24nKXtcbiAgICAgIC8vIFdlYmJyb3dzZXJzXG4gICAgICB2YXIgYSA9IG5ldyBnbG9iYWxUaGlzLlVpbnQzMkFycmF5KDEpO1xuICAgICAgZ2xvYmFsVGhpcy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGEpO1xuICAgICAgcmV0dXJuIFswLGFbMF1dO1xuICAgIH0gZWxzZSBpZihnbG9iYWxUaGlzLmNyeXB0by5yYW5kb21CeXRlcyA9PT0gJ2Z1bmN0aW9uJyl7XG4gICAgICAvLyBOb2RlanNcbiAgICAgIHZhciBidWZmID0gZ2xvYmFsVGhpcy5jcnlwdG8ucmFuZG9tQnl0ZXMoNCk7XG4gICAgICB2YXIgYSA9IG5ldyBnbG9iYWxUaGlzLlVpbnQzMkFycmF5KGJ1ZmYpO1xuICAgICAgcmV0dXJuIFswLGFbMF1dO1xuICAgIH1cbiAgfVxuICB2YXIgbm93ID0gKG5ldyBEYXRlKCkpLmdldFRpbWUoKTtcbiAgdmFyIHggPSBub3deMHhmZmZmZmZmZipNYXRoLnJhbmRvbSgpO1xuICByZXR1cm4gWzAseF07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NvbnN0X2JpZ19lbmRpYW4gY29uc3RcbmZ1bmN0aW9uIGNhbWxfc3lzX2NvbnN0X2JpZ19lbmRpYW4gKCkgeyByZXR1cm4gMDsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jb25zdF93b3JkX3NpemUgY29uc3RcbmZ1bmN0aW9uIGNhbWxfc3lzX2NvbnN0X3dvcmRfc2l6ZSAoKSB7IHJldHVybiAzMjsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jb25zdF9pbnRfc2l6ZSBjb25zdFxuZnVuY3Rpb24gY2FtbF9zeXNfY29uc3RfaW50X3NpemUgKCkgeyByZXR1cm4gMzI7IH1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29uc3RfbWF4X3dvc2l6ZSBjb25zdFxuLy8gbWF4X2ludCAvIDQgc28gdGhhdCB0aGUgZm9sbG93aW5nIGRvZXMgbm90IG92ZXJmbG93XG4vL2xldCBtYXhfc3RyaW5nX2xlbmd0aCA9IHdvcmRfc2l6ZSAvIDggKiBtYXhfYXJyYXlfbGVuZ3RoIC0gMTs7XG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF9tYXhfd29zaXplICgpIHsgcmV0dXJuICgweDdGRkZGRkZGLzQpIHwgMDt9XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NvbnN0X29zdHlwZV91bml4IGNvbnN0XG4vL1JlcXVpcmVzOiBvc190eXBlXG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF9vc3R5cGVfdW5peCAoKSB7IHJldHVybiBvc190eXBlID09IFwiVW5peFwiID8gMSA6IDA7IH1cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NvbnN0X29zdHlwZV93aW4zMiBjb25zdFxuLy9SZXF1aXJlczogb3NfdHlwZVxuZnVuY3Rpb24gY2FtbF9zeXNfY29uc3Rfb3N0eXBlX3dpbjMyICgpIHsgcmV0dXJuIG9zX3R5cGUgPT0gXCJXaW4zMlwiID8gMSA6IDA7IH1cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NvbnN0X29zdHlwZV9jeWd3aW4gY29uc3Rcbi8vUmVxdWlyZXM6IG9zX3R5cGVcbmZ1bmN0aW9uIGNhbWxfc3lzX2NvbnN0X29zdHlwZV9jeWd3aW4gKCkgeyByZXR1cm4gb3NfdHlwZSA9PSBcIkN5Z3dpblwiID8gMSA6IDA7IH1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29uc3RfYmFja2VuZF90eXBlIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF9iYWNrZW5kX3R5cGUgKCkge1xuICByZXR1cm4gWzAsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoXCJqc19vZl9vY2FtbFwiKV07XG59XG5cbi8vUHJvdmlkZXM6IG9zX3R5cGVcbnZhciBvc190eXBlID0gKGdsb2JhbFRoaXMucHJvY2VzcyAmJlxuICAgICAgICAgICAgICAgZ2xvYmFsVGhpcy5wcm9jZXNzLnBsYXRmb3JtICYmXG4gICAgICAgICAgICAgICBnbG9iYWxUaGlzLnByb2Nlc3MucGxhdGZvcm0gPT0gXCJ3aW4zMlwiKSA/IFwiQ3lnd2luXCIgOiBcIlVuaXhcIjtcblxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19nZXRfY29uZmlnIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzLCBvc190eXBlXG5mdW5jdGlvbiBjYW1sX3N5c19nZXRfY29uZmlnICgpIHtcbiAgcmV0dXJuIFswLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKG9zX3R5cGUpLCAzMiwgMF07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2lzYXR0eVxuZnVuY3Rpb24gY2FtbF9zeXNfaXNhdHR5KF9jaGFuKSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3J1bnRpbWVfdmFyaWFudFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9ydW50aW1lX3ZhcmlhbnQoX3VuaXQpIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoXCJcIik7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX3J1bnRpbWVfcGFyYW1ldGVyc1xuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9ydW50aW1lX3BhcmFtZXRlcnMoX3VuaXQpIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoXCJcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW5zdGFsbF9zaWduYWxfaGFuZGxlciBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnN0YWxsX3NpZ25hbF9oYW5kbGVyKCl7cmV0dXJuIDB9XG5cbi8vUHJvdmlkZXM6IHVuaXhfaW5ldF9hZGRyX29mX3N0cmluZ1xuZnVuY3Rpb24gdW5peF9pbmV0X2FkZHJfb2Zfc3RyaW5nICgpIHtyZXR1cm4gMDt9XG5cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX3J1bnRpbWVfd2FybmluZ3NcbnZhciBjYW1sX3J1bnRpbWVfd2FybmluZ3MgPSAwO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2VuYWJsZV9ydW50aW1lX3dhcm5pbmdzXG4vL1JlcXVpcmVzOiBjYW1sX3J1bnRpbWVfd2FybmluZ3NcbmZ1bmN0aW9uIGNhbWxfbWxfZW5hYmxlX3J1bnRpbWVfd2FybmluZ3MgKGJvb2wpIHtcbiAgY2FtbF9ydW50aW1lX3dhcm5pbmdzID0gYm9vbDtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfcnVudGltZV93YXJuaW5nc19lbmFibGVkXG4vL1JlcXVpcmVzOiBjYW1sX3J1bnRpbWVfd2FybmluZ3NcbmZ1bmN0aW9uIGNhbWxfbWxfcnVudGltZV93YXJuaW5nc19lbmFibGVkIChfdW5pdCkge1xuICByZXR1cm4gY2FtbF9ydW50aW1lX3dhcm5pbmdzO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfc3BhY2V0aW1lX2VuYWJsZWQgY29uc3QgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9zcGFjZXRpbWVfZW5hYmxlZChfdW5pdCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29uc3RfbmFrZWRfcG9pbnRlcnNfY2hlY2tlZCBjb25zdCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF9uYWtlZF9wb2ludGVyc19jaGVja2VkKF91bml0KSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JlZ2lzdGVyX2NoYW5uZWxfZm9yX3NwYWNldGltZSBjb25zdCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX3JlZ2lzdGVyX2NoYW5uZWxfZm9yX3NwYWNldGltZShfY2hhbm5lbCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zcGFjZXRpbWVfb25seV93b3Jrc19mb3JfbmF0aXZlX2NvZGVcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfc3BhY2V0aW1lX29ubHlfd29ya3NfZm9yX25hdGl2ZV9jb2RlKCkge1xuICBjYW1sX2ZhaWx3aXRoKFwiU3BhY2V0aW1lIHByb2ZpbGluZyBvbmx5IHdvcmtzIGZvciBuYXRpdmUgY29kZVwiKTtcbn1cblxuLy9BbHdheXNcbi8vUmVxdWlyZXM6IGNhbWxfZmF0YWxfdW5jYXVnaHRfZXhjZXB0aW9uXG5mdW5jdGlvbiBjYW1sX3NldHVwX3VuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyKCkge1xuICB2YXIgZyA9IGdsb2JhbFRoaXM7XG4gIGlmKGcucHJvY2VzcyAmJiBnLnByb2Nlc3Mub24pIHtcbiAgICBnLnByb2Nlc3Mub24oJ3VuY2F1Z2h0RXhjZXB0aW9uJywgZnVuY3Rpb24gKGVyciwgb3JpZ2luKSB7XG4gICAgICBjYW1sX2ZhdGFsX3VuY2F1Z2h0X2V4Y2VwdGlvbihlcnIpO1xuICAgICAgZy5wcm9jZXNzLmV4aXQgKDIpO1xuICAgIH0pXG4gIH1cbiAgZWxzZSBpZihnLmFkZEV2ZW50TGlzdGVuZXIpe1xuICAgIGcuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBmdW5jdGlvbihldmVudCl7XG4gICAgICBpZihldmVudC5lcnJvcil7XG4gICAgICAgIGNhbWxfZmF0YWxfdW5jYXVnaHRfZXhjZXB0aW9uKGV2ZW50LmVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuY2FtbF9zZXR1cF91bmNhdWdodF9leGNlcHRpb25faGFuZGxlcigpO1xuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDE0IErDqXLDtG1lIFZvdWlsbG9uLCBIdWdvIEhldXphcmRcbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogTWxGYWtlRGV2aWNlXG4vL1JlcXVpcmVzOiBNbEZha2VGaWxlLCBjYW1sX2NyZWF0ZV9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9zeXNfZXJyb3IsIGNhbWxfcmFpc2Vfbm9fc3VjaF9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzLCBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9ieXRlc19vZl9hcnJheSwgY2FtbF9ieXRlc19vZl9zdHJpbmcsIGNhbWxfYnl0ZXNfb2ZfanNieXRlc1xuLy9SZXF1aXJlczogY2FtbF9pc19tbF9ieXRlcywgY2FtbF9pc19tbF9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfbmFtZWRfdmFsdWUsIGNhbWxfcmFpc2Vfd2l0aF9hcmdzLCBjYW1sX25hbWVkX3ZhbHVlc1xuLy9SZXF1aXJlczogbWFrZV91bml4X2Vycl9hcmdzXG5mdW5jdGlvbiBNbEZha2VEZXZpY2UgKHJvb3QsIGYpIHtcbiAgdGhpcy5jb250ZW50PXt9O1xuICB0aGlzLnJvb3QgPSByb290O1xuICB0aGlzLmxvb2t1cEZ1biA9IGY7XG59XG5NbEZha2VEZXZpY2UucHJvdG90eXBlLm5tID0gZnVuY3Rpb24obmFtZSkge1xuICByZXR1cm4gKHRoaXMucm9vdCArIG5hbWUpO1xufVxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5jcmVhdGVfZGlyX2lmX25lZWRlZCA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgdmFyIGNvbXAgPSBuYW1lLnNwbGl0KFwiL1wiKTtcbiAgdmFyIHJlcyA9IFwiXCI7XG4gIGZvcih2YXIgaSA9IDA7IGkgPCBjb21wLmxlbmd0aCAtIDE7IGkrKyl7XG4gICAgcmVzICs9IGNvbXBbaV0gKyBcIi9cIjtcbiAgICBpZih0aGlzLmNvbnRlbnRbcmVzXSkgY29udGludWU7XG4gICAgdGhpcy5jb250ZW50W3Jlc10gPSBTeW1ib2woXCJkaXJlY3RvcnlcIik7XG4gIH1cbn1cbk1sRmFrZURldmljZS5wcm90b3R5cGUuc2xhc2ggPSBmdW5jdGlvbihuYW1lKXtcbiAgcmV0dXJuIC9cXC8kLy50ZXN0KG5hbWUpP25hbWU6KG5hbWUgKyBcIi9cIik7XG59XG5NbEZha2VEZXZpY2UucHJvdG90eXBlLmxvb2t1cCA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgaWYoIXRoaXMuY29udGVudFtuYW1lXSAmJiB0aGlzLmxvb2t1cEZ1bikge1xuICAgIHZhciByZXMgPSB0aGlzLmxvb2t1cEZ1bihjYW1sX3N0cmluZ19vZl9qc2J5dGVzKHRoaXMucm9vdCksIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMobmFtZSkpO1xuICAgIGlmKHJlcyAhPT0gMCkge1xuICAgICAgdGhpcy5jcmVhdGVfZGlyX2lmX25lZWRlZChuYW1lKTtcbiAgICAgIHRoaXMuY29udGVudFtuYW1lXT1uZXcgTWxGYWtlRmlsZShjYW1sX2J5dGVzX29mX3N0cmluZyhyZXNbMV0pKTtcbiAgICB9XG4gIH1cbn1cbk1sRmFrZURldmljZS5wcm90b3R5cGUuZXhpc3RzID0gZnVuY3Rpb24obmFtZSkge1xuICAvLyBUaGUgcm9vdCBvZiB0aGUgZGV2aWNlIGV4aXN0c1xuICBpZihuYW1lID09IFwiXCIpIHJldHVybiAxO1xuICAvLyBDaGVjayBpZiBhIGRpcmVjdG9yeSBleGlzdHNcbiAgdmFyIG5hbWVfc2xhc2ggPSB0aGlzLnNsYXNoKG5hbWUpO1xuICBpZih0aGlzLmNvbnRlbnRbbmFtZV9zbGFzaF0pIHJldHVybiAxO1xuICAvLyBDaGVjayBpZiBhIGZpbGUgZXhpc3RzXG4gIHRoaXMubG9va3VwKG5hbWUpO1xuICByZXR1cm4gdGhpcy5jb250ZW50W25hbWVdPzE6MDtcbn1cbk1sRmFrZURldmljZS5wcm90b3R5cGUubWtkaXIgPSBmdW5jdGlvbihuYW1lLG1vZGUsIHJhaXNlX3VuaXgpIHtcbiAgdmFyIHVuaXhfZXJyb3IgPSByYWlzZV91bml4ICYmIGNhbWxfbmFtZWRfdmFsdWUoJ1VuaXguVW5peF9lcnJvcicpO1xuICBpZih0aGlzLmV4aXN0cyhuYW1lKSkge1xuICAgIGlmICh1bml4X2Vycm9yKSB7XG4gICAgICBjYW1sX3JhaXNlX3dpdGhfYXJncyh1bml4X2Vycm9yLCBtYWtlX3VuaXhfZXJyX2FyZ3MoXCJFRVhJU1RcIiwgXCJta2RpclwiLCB0aGlzLm5tKG5hbWUpKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IobmFtZSArIFwiOiBGaWxlIGV4aXN0c1wiKTtcbiAgICB9XG4gIH1cbiAgdmFyIHBhcmVudCA9IC9eKC4qKVxcL1teL10rLy5leGVjKG5hbWUpO1xuICBwYXJlbnQgPSAocGFyZW50ICYmIHBhcmVudFsxXSkgfHwgJyc7XG4gIGlmKCF0aGlzLmV4aXN0cyhwYXJlbnQpKXtcbiAgICBpZiAodW5peF9lcnJvcikge1xuICAgICAgY2FtbF9yYWlzZV93aXRoX2FyZ3ModW5peF9lcnJvciwgbWFrZV91bml4X2Vycl9hcmdzKFwiRU5PRU5UXCIsIFwibWtkaXJcIiwgdGhpcy5ubShwYXJlbnQpKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IocGFyZW50ICsgXCI6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnlcIik7XG4gICAgfVxuICB9XG4gIGlmKCF0aGlzLmlzX2RpcihwYXJlbnQpKXtcbiAgICBpZiAodW5peF9lcnJvcikge1xuICAgICAgY2FtbF9yYWlzZV93aXRoX2FyZ3ModW5peF9lcnJvciwgbWFrZV91bml4X2Vycl9hcmdzKFwiRU5PVERJUlwiLCBcIm1rZGlyXCIsIHRoaXMubm0ocGFyZW50KSkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHBhcmVudCArIFwiOiBOb3QgYSBkaXJlY3RvcnlcIik7XG4gICAgfVxuICB9XG4gIHRoaXMuY3JlYXRlX2Rpcl9pZl9uZWVkZWQodGhpcy5zbGFzaChuYW1lKSk7XG59XG5NbEZha2VEZXZpY2UucHJvdG90eXBlLnJtZGlyID0gZnVuY3Rpb24obmFtZSwgcmFpc2VfdW5peCkge1xuICB2YXIgdW5peF9lcnJvciA9IHJhaXNlX3VuaXggJiYgY2FtbF9uYW1lZF92YWx1ZSgnVW5peC5Vbml4X2Vycm9yJyk7XG4gIHZhciBuYW1lX3NsYXNoID0gKG5hbWUgPT0gXCJcIik/XCJcIjoodGhpcy5zbGFzaChuYW1lKSk7XG4gIHZhciByID0gbmV3IFJlZ0V4cChcIl5cIiArIG5hbWVfc2xhc2ggKyBcIihbXi9dKylcIik7XG4gIGlmKCF0aGlzLmV4aXN0cyhuYW1lKSkge1xuICAgIGlmICh1bml4X2Vycm9yKSB7XG4gICAgICBjYW1sX3JhaXNlX3dpdGhfYXJncyh1bml4X2Vycm9yLCBtYWtlX3VuaXhfZXJyX2FyZ3MoXCJFTk9FTlRcIiwgXCJybWRpclwiLCB0aGlzLm5tKG5hbWUpKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IobmFtZSArIFwiOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XCIpO1xuICAgIH1cbiAgfVxuICBpZighdGhpcy5pc19kaXIobmFtZSkpIHtcbiAgICBpZiAodW5peF9lcnJvcikge1xuICAgICAgY2FtbF9yYWlzZV93aXRoX2FyZ3ModW5peF9lcnJvciwgbWFrZV91bml4X2Vycl9hcmdzKFwiRU5PVERJUlwiLCBcInJtZGlyXCIsIHRoaXMubm0obmFtZSkpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihuYW1lICsgXCI6IE5vdCBhIGRpcmVjdG9yeVwiKTtcbiAgICB9XG4gIH1cbiAgZm9yKHZhciBuIGluIHRoaXMuY29udGVudCkge1xuICAgIGlmKG4ubWF0Y2gocikpIHtcbiAgICAgIGlmICh1bml4X2Vycm9yKSB7XG4gICAgICAgIGNhbWxfcmFpc2Vfd2l0aF9hcmdzKHVuaXhfZXJyb3IsIG1ha2VfdW5peF9lcnJfYXJncyhcIkVOT1RFTVBUWVwiLCBcInJtZGlyXCIsIHRoaXMubm0obmFtZSkpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHRoaXMubm0obmFtZSkgKyBcIjogRGlyZWN0b3J5IG5vdCBlbXB0eVwiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZGVsZXRlIHRoaXMuY29udGVudFtuYW1lX3NsYXNoXTtcbn1cbk1sRmFrZURldmljZS5wcm90b3R5cGUucmVhZGRpciA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgdmFyIG5hbWVfc2xhc2ggPSAobmFtZSA9PSBcIlwiKT9cIlwiOih0aGlzLnNsYXNoKG5hbWUpKTtcbiAgaWYoIXRoaXMuZXhpc3RzKG5hbWUpKSB7XG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IobmFtZSArIFwiOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XCIpO1xuICB9XG4gIGlmKCF0aGlzLmlzX2RpcihuYW1lKSkge1xuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKG5hbWUgKyBcIjogTm90IGEgZGlyZWN0b3J5XCIpO1xuICB9XG4gIHZhciByID0gbmV3IFJlZ0V4cChcIl5cIiArIG5hbWVfc2xhc2ggKyBcIihbXi9dKylcIik7XG4gIHZhciBzZWVuID0ge31cbiAgdmFyIGEgPSBbXTtcbiAgZm9yKHZhciBuIGluIHRoaXMuY29udGVudCkge1xuICAgIHZhciBtID0gbi5tYXRjaChyKTtcbiAgICBpZihtICYmICFzZWVuW21bMV1dKSB7c2VlblttWzFdXSA9IHRydWU7IGEucHVzaChtWzFdKX1cbiAgfVxuICByZXR1cm4gYTtcbn1cbk1sRmFrZURldmljZS5wcm90b3R5cGUuaXNfZGlyID0gZnVuY3Rpb24obmFtZSkge1xuICBpZihuYW1lID09IFwiXCIpICByZXR1cm4gdHJ1ZTtcbiAgdmFyIG5hbWVfc2xhc2ggPSB0aGlzLnNsYXNoKG5hbWUpO1xuICByZXR1cm4gdGhpcy5jb250ZW50W25hbWVfc2xhc2hdPzE6MDtcbn1cbk1sRmFrZURldmljZS5wcm90b3R5cGUudW5saW5rID0gZnVuY3Rpb24obmFtZSkge1xuICB2YXIgb2sgPSB0aGlzLmNvbnRlbnRbbmFtZV0/dHJ1ZTpmYWxzZTtcbiAgZGVsZXRlIHRoaXMuY29udGVudFtuYW1lXTtcbiAgcmV0dXJuIG9rO1xufVxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5vcGVuID0gZnVuY3Rpb24obmFtZSwgZikge1xuICBpZihmLnJkb25seSAmJiBmLndyb25seSlcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG5hbWUpICsgXCIgOiBmbGFncyBPcGVuX3Jkb25seSBhbmQgT3Blbl93cm9ubHkgYXJlIG5vdCBjb21wYXRpYmxlXCIpO1xuICBpZihmLnRleHQgJiYgZi5iaW5hcnkpXG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IodGhpcy5ubShuYW1lKSArIFwiIDogZmxhZ3MgT3Blbl90ZXh0IGFuZCBPcGVuX2JpbmFyeSBhcmUgbm90IGNvbXBhdGlibGVcIik7XG4gIHRoaXMubG9va3VwKG5hbWUpO1xuICBpZiAodGhpcy5jb250ZW50W25hbWVdKSB7XG4gICAgaWYgKHRoaXMuaXNfZGlyKG5hbWUpKSBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG5hbWUpICsgXCIgOiBpcyBhIGRpcmVjdG9yeVwiKTtcbiAgICBpZiAoZi5jcmVhdGUgJiYgZi5leGNsKSBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG5hbWUpICsgXCIgOiBmaWxlIGFscmVhZHkgZXhpc3RzXCIpO1xuICAgIHZhciBmaWxlID0gdGhpcy5jb250ZW50W25hbWVdO1xuICAgIGlmKGYudHJ1bmNhdGUpIGZpbGUudHJ1bmNhdGUoKTtcbiAgICByZXR1cm4gZmlsZTtcbiAgfSBlbHNlIGlmIChmLmNyZWF0ZSkge1xuICAgIHRoaXMuY3JlYXRlX2Rpcl9pZl9uZWVkZWQobmFtZSk7XG4gICAgdGhpcy5jb250ZW50W25hbWVdID0gbmV3IE1sRmFrZUZpbGUoY2FtbF9jcmVhdGVfYnl0ZXMoMCkpO1xuICAgIHJldHVybiB0aGlzLmNvbnRlbnRbbmFtZV07XG4gIH0gZWxzZSB7XG4gICAgY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUgKHRoaXMubm0obmFtZSkpO1xuICB9XG59XG5cbk1sRmFrZURldmljZS5wcm90b3R5cGUucmVnaXN0ZXI9IGZ1bmN0aW9uIChuYW1lLGNvbnRlbnQpe1xuICB2YXIgZmlsZTtcbiAgaWYodGhpcy5jb250ZW50W25hbWVdKSBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG5hbWUpICsgXCIgOiBmaWxlIGFscmVhZHkgZXhpc3RzXCIpO1xuICBpZihjYW1sX2lzX21sX2J5dGVzKGNvbnRlbnQpKVxuICAgIGZpbGUgPSBuZXcgTWxGYWtlRmlsZShjb250ZW50KTtcbiAgaWYoY2FtbF9pc19tbF9zdHJpbmcoY29udGVudCkpXG4gICAgZmlsZSA9IG5ldyBNbEZha2VGaWxlKGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKGNvbnRlbnQpKTtcbiAgZWxzZSBpZihjb250ZW50IGluc3RhbmNlb2YgQXJyYXkpXG4gICAgZmlsZSA9IG5ldyBNbEZha2VGaWxlKGNhbWxfYnl0ZXNfb2ZfYXJyYXkoY29udGVudCkpO1xuICBlbHNlIGlmKHR5cGVvZiBjb250ZW50ID09PSBcInN0cmluZ1wiKVxuICAgIGZpbGUgPSBuZXcgTWxGYWtlRmlsZShjYW1sX2J5dGVzX29mX2pzYnl0ZXMoY29udGVudCkpO1xuICBlbHNlIGlmKGNvbnRlbnQudG9TdHJpbmcpIHtcbiAgICB2YXIgYnl0ZXMgPSBjYW1sX2J5dGVzX29mX3N0cmluZyhjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhjb250ZW50LnRvU3RyaW5nKCkpKTtcbiAgICBmaWxlID0gbmV3IE1sRmFrZUZpbGUoYnl0ZXMpO1xuICB9XG4gIGlmKGZpbGUpe1xuICAgIHRoaXMuY3JlYXRlX2Rpcl9pZl9uZWVkZWQobmFtZSk7XG4gICAgdGhpcy5jb250ZW50W25hbWVdID0gZmlsZTtcbiAgfVxuICBlbHNlIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHRoaXMubm0obmFtZSkgKyBcIiA6IHJlZ2lzdGVyaW5nIGZpbGUgd2l0aCBpbnZhbGlkIGNvbnRlbnQgdHlwZVwiKTtcbn1cblxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1sRmFrZURldmljZVxuXG4vL1Byb3ZpZGVzOiBNbEZha2VGaWxlXG4vL1JlcXVpcmVzOiBNbEZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfY3JlYXRlX2J5dGVzLCBjYW1sX21sX2J5dGVzX2xlbmd0aCwgY2FtbF9ibGl0X2J5dGVzLCBjYW1sX2JsaXRfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2dldFxuZnVuY3Rpb24gTWxGYWtlRmlsZShjb250ZW50KXtcbiAgdGhpcy5kYXRhID0gY29udGVudDtcbn1cbk1sRmFrZUZpbGUucHJvdG90eXBlID0gbmV3IE1sRmlsZSAoKTtcbk1sRmFrZUZpbGUucHJvdG90eXBlLnRydW5jYXRlID0gZnVuY3Rpb24obGVuKXtcbiAgdmFyIG9sZCA9IHRoaXMuZGF0YTtcbiAgdGhpcy5kYXRhID0gY2FtbF9jcmVhdGVfYnl0ZXMobGVufDApO1xuICBjYW1sX2JsaXRfYnl0ZXMob2xkLCAwLCB0aGlzLmRhdGEsIDAsIGxlbik7XG59XG5NbEZha2VGaWxlLnByb3RvdHlwZS5sZW5ndGggPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBjYW1sX21sX2J5dGVzX2xlbmd0aCh0aGlzLmRhdGEpO1xufVxuTWxGYWtlRmlsZS5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihvZmZzZXQsYnVmLHBvcyxsZW4pe1xuICB2YXIgY2xlbiA9IHRoaXMubGVuZ3RoKCk7XG4gIGlmKG9mZnNldCArIGxlbiA+PSBjbGVuKSB7XG4gICAgdmFyIG5ld19zdHIgPSBjYW1sX2NyZWF0ZV9ieXRlcyhvZmZzZXQgKyBsZW4pO1xuICAgIHZhciBvbGRfZGF0YSA9IHRoaXMuZGF0YTtcbiAgICB0aGlzLmRhdGEgPSBuZXdfc3RyO1xuICAgIGNhbWxfYmxpdF9ieXRlcyhvbGRfZGF0YSwgMCwgdGhpcy5kYXRhLCAwLCBjbGVuKTtcbiAgfVxuICBjYW1sX2JsaXRfc3RyaW5nKGJ1ZiwgcG9zLCB0aGlzLmRhdGEsIG9mZnNldCwgbGVuKTtcbiAgcmV0dXJuIDBcbn1cbk1sRmFrZUZpbGUucHJvdG90eXBlLnJlYWQgPSBmdW5jdGlvbihvZmZzZXQsYnVmLHBvcyxsZW4pe1xuICB2YXIgY2xlbiA9IHRoaXMubGVuZ3RoKCk7XG4gIGNhbWxfYmxpdF9ieXRlcyh0aGlzLmRhdGEsIG9mZnNldCwgYnVmLCBwb3MsIGxlbik7XG4gIHJldHVybiAwXG59XG5NbEZha2VGaWxlLnByb3RvdHlwZS5yZWFkX29uZSA9IGZ1bmN0aW9uKG9mZnNldCl7XG4gIHJldHVybiBjYW1sX2J5dGVzX2dldCh0aGlzLmRhdGEsIG9mZnNldCk7XG59XG5NbEZha2VGaWxlLnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCl7XG5cbn1cbk1sRmFrZUZpbGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWxGYWtlRmlsZVxuIiwiLy9Qcm92aWRlczogaW5pdGlhbGl6ZV9uYXRcbi8vUmVxdWlyZXM6IGNhbWxfY3VzdG9tX29wc1xuLy9SZXF1aXJlczogc2VyaWFsaXplX25hdCwgZGVzZXJpYWxpemVfbmF0LCBjYW1sX2hhc2hfbmF0XG5mdW5jdGlvbiBpbml0aWFsaXplX25hdCgpIHtcbiAgY2FtbF9jdXN0b21fb3BzW1wiX25hdFwiXSA9XG4gICAgeyBkZXNlcmlhbGl6ZSA6IGRlc2VyaWFsaXplX25hdCxcbiAgICAgIHNlcmlhbGl6ZSA6IHNlcmlhbGl6ZV9uYXQsXG4gICAgICBoYXNoIDogY2FtbF9oYXNoX25hdFxuICAgIH1cbn1cblxuLy9Qcm92aWRlczogTWxOYXRcbmZ1bmN0aW9uIE1sTmF0KHgpe1xuICB0aGlzLmRhdGEgPSBuZXcgZ2xvYmFsVGhpcy5JbnQzMkFycmF5KHgpO1xuICAvLyBsZW5ndGhfbmF0IGlzbid0IGV4dGVybmFsLCBzbyB3ZSBoYXZlIHRvIG1ha2UgdGhlIE9iai5zaXplXG4gIC8vIHdvcmsgb3V0IHJpZ2h0LiBUaGUgKzIgdG8gYXJyYXkgbGVuZ3RoIHNlZW1zIHRvIHdvcmsuXG4gIHRoaXMubGVuZ3RoID0gdGhpcy5kYXRhLmxlbmd0aCArIDJcbn1cblxuTWxOYXQucHJvdG90eXBlLmNhbWxfY3VzdG9tID0gXCJfbmF0XCI7XG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9uYXRcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfaW50LCBudW1fZGlnaXRzX25hdFxuZnVuY3Rpb24gY2FtbF9oYXNoX25hdCh4KSB7XG4gIHZhciBsZW4gPSBudW1fZGlnaXRzX25hdCh4LCAwLCB4LmRhdGEubGVuZ3RoKTtcbiAgdmFyIGggPSAwO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIHguZGF0YVtpXSk7XG4gIH1cbiAgcmV0dXJuIGg7XG59XG5cblxuLy9Qcm92aWRlczogbmF0X29mX2FycmF5XG4vL1JlcXVpcmVzOiBNbE5hdFxuZnVuY3Rpb24gbmF0X29mX2FycmF5KGwpe1xuICByZXR1cm4gbmV3IE1sTmF0KGwpO1xufVxuXG4vL1Byb3ZpZGVzOiBjcmVhdGVfbmF0XG4vL1JlcXVpcmVzOiBNbE5hdFxuZnVuY3Rpb24gY3JlYXRlX25hdChzaXplKSB7XG4gIHZhciBhcnIgPSBuZXcgTWxOYXQoc2l6ZSk7XG4gIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICBhcnIuZGF0YVtpXSA9IC0xO1xuICB9XG4gIHJldHVybiBhcnI7XG59XG5cbi8vUHJvdmlkZXM6IHNldF90b196ZXJvX25hdFxuZnVuY3Rpb24gc2V0X3RvX3plcm9fbmF0KG5hdCwgb2ZzLCBsZW4pIHtcbiAgZm9yKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgbmF0LmRhdGFbb2ZzK2ldID0gMDtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogYmxpdF9uYXRcbmZ1bmN0aW9uIGJsaXRfbmF0KG5hdDEsIG9mczEsIG5hdDIsIG9mczIsIGxlbikge1xuICBmb3IodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICBuYXQxLmRhdGFbb2ZzMStpXSA9IG5hdDIuZGF0YVtvZnMyK2ldO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBzZXRfZGlnaXRfbmF0XG5mdW5jdGlvbiBzZXRfZGlnaXRfbmF0KG5hdCwgb2ZzLCBkaWdpdCkge1xuICBuYXQuZGF0YVtvZnNdID0gZGlnaXQ7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBudGhfZGlnaXRfbmF0XG5mdW5jdGlvbiBudGhfZGlnaXRfbmF0KG5hdCwgb2ZzKSB7XG4gIHJldHVybiBuYXQuZGF0YVtvZnNdO1xufVxuXG4vL1Byb3ZpZGVzOiBzZXRfZGlnaXRfbmF0X25hdGl2ZVxuZnVuY3Rpb24gc2V0X2RpZ2l0X25hdF9uYXRpdmUobmF0LCBvZnMsIGRpZ2l0KSB7XG4gIG5hdC5kYXRhW29mc10gPSBkaWdpdDtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IG50aF9kaWdpdF9uYXRfbmF0aXZlXG5mdW5jdGlvbiBudGhfZGlnaXRfbmF0X25hdGl2ZShuYXQsIG9mcykge1xuICByZXR1cm4gbmF0LmRhdGFbb2ZzXTtcbn1cblxuLy9Qcm92aWRlczogbnVtX2RpZ2l0c19uYXRcbmZ1bmN0aW9uIG51bV9kaWdpdHNfbmF0KG5hdCwgb2ZzLCBsZW4pIHtcbiAgZm9yKHZhciBpID0gbGVuIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBpZihuYXQuZGF0YVtvZnMraV0gIT0gMCkgcmV0dXJuIGkrMTtcbiAgfVxuICByZXR1cm4gMTsgLy8gMCBjb3VudHMgYXMgMSBkaWdpdFxufVxuXG4vL1Byb3ZpZGVzOiBudW1fbGVhZGluZ196ZXJvX2JpdHNfaW5fZGlnaXRcbmZ1bmN0aW9uIG51bV9sZWFkaW5nX3plcm9fYml0c19pbl9kaWdpdChuYXQsIG9mcykge1xuICB2YXIgYSA9IG5hdC5kYXRhW29mc107XG4gIHZhciBiID0gMDtcbiAgaWYoYSAmIDB4RkZGRjAwMDApIHsgYiArPTE2OyBhID4+Pj0xNjsgfVxuICBpZihhICYgMHhGRjAwKSAgICAgeyBiICs9IDg7IGEgPj4+PSA4OyB9XG4gIGlmKGEgJiAweEYwKSAgICAgICB7IGIgKz0gNDsgYSA+Pj49IDQ7IH1cbiAgaWYoYSAmIDEyKSAgICAgICAgIHsgYiArPSAyOyBhID4+Pj0gMjsgfVxuICBpZihhICYgMikgICAgICAgICAgeyBiICs9IDE7IGEgPj4+PSAxOyB9XG4gIGlmKGEgJiAxKSAgICAgICAgICB7IGIgKz0gMTsgfVxuICByZXR1cm4gMzIgLSBiO1xufVxuXG4vL1Byb3ZpZGVzOiBpc19kaWdpdF9pbnRcbmZ1bmN0aW9uIGlzX2RpZ2l0X2ludChuYXQsIG9mcykge1xuICBpZiAobmF0LmRhdGFbb2ZzXSA+PSAwKSByZXR1cm4gMVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogaXNfZGlnaXRfemVyb1xuZnVuY3Rpb24gaXNfZGlnaXRfemVybyhuYXQsIG9mcykge1xuICBpZihuYXQuZGF0YVtvZnNdID09IDApIHJldHVybiAxO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogaXNfZGlnaXRfb2RkXG5mdW5jdGlvbiBpc19kaWdpdF9vZGQobmF0LCBvZnMpIHtcbiAgaWYobmF0LmRhdGFbb2ZzXSAmIDEpIHJldHVybiAxO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogaW5jcl9uYXRcbmZ1bmN0aW9uIGluY3JfbmF0KG5hdCwgb2ZzLCBsZW4sIGNhcnJ5X2luKSB7XG4gIHZhciBjYXJyeSA9IGNhcnJ5X2luO1xuICBmb3IodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICB2YXIgeCA9IChuYXQuZGF0YVtvZnMraV0gPj4+IDApICsgY2Fycnk7XG4gICAgbmF0LmRhdGFbb2ZzK2ldID0gKHggfCAwKTtcbiAgICBpZih4ID09ICh4ID4+PiAwKSkge1xuICAgICAgY2FycnkgPSAwO1xuICAgICAgYnJlYWs7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhcnJ5ID0gMTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNhcnJ5O1xufVxuXG4vLyBsZW4xID49IGxlbjJcbi8vUHJvdmlkZXM6IGFkZF9uYXRcbi8vUmVxdWlyZXM6IGluY3JfbmF0XG5mdW5jdGlvbiBhZGRfbmF0KG5hdDEsIG9mczEsIGxlbjEsIG5hdDIsIG9mczIsIGxlbjIsIGNhcnJ5X2luKSB7XG4gIHZhciBjYXJyeSA9IGNhcnJ5X2luO1xuICBmb3IodmFyIGkgPSAwOyBpIDwgbGVuMjsgaSsrKSB7XG4gICAgdmFyIHggPSAobmF0MS5kYXRhW29mczEraV0gPj4+IDApICsgKG5hdDIuZGF0YVtvZnMyK2ldID4+PiAwKSArIGNhcnJ5O1xuICAgIG5hdDEuZGF0YVtvZnMxK2ldID0geFxuICAgIGlmKHggPT0gKHggPj4+IDApKSB7XG4gICAgICBjYXJyeSA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhcnJ5ID0gMTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGluY3JfbmF0KG5hdDEsIG9mczErbGVuMiwgbGVuMS1sZW4yLCBjYXJyeSk7XG59XG5cbi8vUHJvdmlkZXM6IGNvbXBsZW1lbnRfbmF0XG5mdW5jdGlvbiBjb21wbGVtZW50X25hdChuYXQsIG9mcywgbGVuKSB7XG4gIGZvcih2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIG5hdC5kYXRhW29mcytpXSA9ICgtMSA+Pj4gMCkgLSAobmF0LmRhdGFbb2ZzK2ldID4+PiAwKTtcbiAgfVxufVxuXG4vLyBvY2FtbCBmbGlwcyBjYXJyeV9pblxuLy9Qcm92aWRlczogZGVjcl9uYXRcbmZ1bmN0aW9uIGRlY3JfbmF0KG5hdCwgb2ZzLCBsZW4sIGNhcnJ5X2luKSB7XG4gIHZhciBib3Jyb3cgPSAoY2FycnlfaW4gPT0gMSkgPyAwIDogMTtcbiAgZm9yKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgdmFyIHggPSAobmF0LmRhdGFbb2ZzK2ldID4+PjApIC0gYm9ycm93O1xuICAgIG5hdC5kYXRhW29mcytpXSA9IHg7XG4gICAgaWYgKHggPj0gMCkge1xuICAgICAgYm9ycm93ID0gMDtcbiAgICAgIGJyZWFrO1xuICAgIH0gZWxzZSB7XG4gICAgICBib3Jyb3cgPSAxO1xuICAgIH1cbiAgfVxuICByZXR1cm4gKGJvcnJvdyA9PSAxKSA/IDAgOiAxO1xufVxuXG4vLyBvY2FtbCBmbGlwcyBjYXJyeV9pblxuLy8gbGVuMSA+PSBsZW4yXG4vL1Byb3ZpZGVzOiBzdWJfbmF0XG4vL1JlcXVpcmVzOiBkZWNyX25hdFxuZnVuY3Rpb24gc3ViX25hdChuYXQxLCBvZnMxLCBsZW4xLCBuYXQyLCBvZnMyLCBsZW4yLCBjYXJyeV9pbikge1xuICB2YXIgYm9ycm93ID0gKGNhcnJ5X2luID09IDEpID8gMCA6IDE7XG4gIGZvcih2YXIgaSA9IDA7IGkgPCBsZW4yOyBpKyspIHtcbiAgICB2YXIgeCA9IChuYXQxLmRhdGFbb2ZzMStpXSA+Pj4gMCkgLSAobmF0Mi5kYXRhW29mczIraV0gPj4+IDApIC0gYm9ycm93O1xuICAgIG5hdDEuZGF0YVtvZnMxK2ldID0geDtcbiAgICBpZiAoeCA+PSAwKSB7XG4gICAgICBib3Jyb3cgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICBib3Jyb3cgPSAxO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZGVjcl9uYXQobmF0MSwgb2ZzMStsZW4yLCBsZW4xLWxlbjIsIChib3Jyb3c9PTEpPzA6MSk7XG59XG5cbi8vIG5hdDEgKz0gbmF0MiAqIG5hdDNbb2ZzM11cbi8vIGxlbjEgPj0gbGVuMlxuLy9Qcm92aWRlczogbXVsdF9kaWdpdF9uYXRcbi8vUmVxdWlyZXM6IGFkZF9uYXQsIG5hdF9vZl9hcnJheVxuZnVuY3Rpb24gbXVsdF9kaWdpdF9uYXQobmF0MSwgb2ZzMSwgbGVuMSwgbmF0Miwgb2ZzMiwgbGVuMiwgbmF0Mywgb2ZzMykge1xuICB2YXIgY2FycnkgPSAwO1xuICB2YXIgYSA9IChuYXQzLmRhdGFbb2ZzM10gPj4+IDApO1xuICBmb3IodmFyIGkgPSAwOyBpIDwgbGVuMjsgaSsrKSB7XG4gICAgdmFyIHgxID0gKG5hdDEuZGF0YVtvZnMxK2ldID4+PiAwKSArIChuYXQyLmRhdGFbb2ZzMitpXSA+Pj4gMCkgKiAoYSAmIDB4MDAwMEZGRkYpICsgY2Fycnk7XG4gICAgdmFyIHgyID0gKG5hdDIuZGF0YVtvZnMyK2ldID4+PiAwKSAqIChhID4+PiAxNik7XG4gICAgY2FycnkgPSBNYXRoLmZsb29yKHgyLzY1NTM2KTtcbiAgICB2YXIgeDMgPSB4MSArICh4MiAlIDY1NTM2KSAqIDY1NTM2O1xuICAgIG5hdDEuZGF0YVtvZnMxK2ldID0geDM7XG4gICAgY2FycnkgKz0gTWF0aC5mbG9vcih4My80Mjk0OTY3Mjk2KTtcbiAgfVxuXG4gIGlmKGxlbjIgPCBsZW4xICYmIGNhcnJ5KSB7XG4gICAgcmV0dXJuIGFkZF9uYXQobmF0MSwgb2ZzMStsZW4yLCBsZW4xLWxlbjIsIG5hdF9vZl9hcnJheShbY2FycnldKSwgMCwgMSwgMCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGNhcnJ5O1xuICB9XG59XG5cbi8vIG5hdDEgKz0gbmF0MiAqIG5hdDNcbi8vIGxlbjEgPj0gbGVuMiArIGxlbjMuXG4vL1Byb3ZpZGVzOiBtdWx0X25hdFxuLy9SZXF1aXJlczogbXVsdF9kaWdpdF9uYXRcbmZ1bmN0aW9uIG11bHRfbmF0KG5hdDEsIG9mczEsIGxlbjEsIG5hdDIsIG9mczIsIGxlbjIsIG5hdDMsIG9mczMsIGxlbjMpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgZm9yKHZhciBpID0gMDsgaSA8IGxlbjM7IGkrKykge1xuICAgIGNhcnJ5ICs9IG11bHRfZGlnaXRfbmF0KG5hdDEsIG9mczEraSwgbGVuMS1pLCBuYXQyLCBvZnMyLCBsZW4yLCBuYXQzLCBvZnMzK2kpO1xuICB9XG4gIHJldHVybiBjYXJyeTtcbn1cblxuLy8gbmF0MSA9IDIgKiBuYXQxICsgbmF0MiAqIG5hdDJcbi8vIGxlbjEgPj0gMiAqIGxlbjJcbi8vUHJvdmlkZXM6IHNxdWFyZV9uYXRcbi8vUmVxdWlyZXM6IG11bHRfbmF0LCBhZGRfbmF0XG5mdW5jdGlvbiBzcXVhcmVfbmF0KG5hdDEsIG9mczEsIGxlbjEsIG5hdDIsIG9mczIsIGxlbjIpIHtcbiAgdmFyIGNhcnJ5ID0gMDtcbiAgY2FycnkgKz0gYWRkX25hdChuYXQxLCBvZnMxLCBsZW4xLCBuYXQxLCBvZnMxLCBsZW4xLCAwKTtcbiAgY2FycnkgKz0gbXVsdF9uYXQobmF0MSwgb2ZzMSwgbGVuMSwgbmF0Miwgb2ZzMiwgbGVuMiwgbmF0Miwgb2ZzMiwgbGVuMik7XG4gIHJldHVybiBjYXJyeTtcbn1cblxuXG4vLyAwIDw9IHNoaWZ0IDwgMzJcbi8vUHJvdmlkZXM6IHNoaWZ0X2xlZnRfbmF0XG5mdW5jdGlvbiBzaGlmdF9sZWZ0X25hdChuYXQxLCBvZnMxLCBsZW4xLCBuYXQyLCBvZnMyLCBuYml0cykge1xuICBpZihuYml0cyA9PSAwKSB7XG4gICAgbmF0Mi5kYXRhW29mczJdID0gMDtcbiAgICByZXR1cm4gMDtcbiAgfVxuICB2YXIgd3JhcCA9IDA7XG4gIGZvcih2YXIgaSA9IDA7IGkgPCBsZW4xOyBpKyspIHtcbiAgICB2YXIgYSA9IChuYXQxLmRhdGFbb2ZzMStpXSA+Pj4gMCk7XG4gICAgbmF0MS5kYXRhW29mczEraV0gPSAoYSA8PCBuYml0cykgfCB3cmFwO1xuICAgIHdyYXAgPSBhID4+PiAoMzIgLSBuYml0cyk7XG4gIH1cbiAgbmF0Mi5kYXRhW29mczJdID0gd3JhcDtcbiAgcmV0dXJuIDA7XG59XG5cbi8vIEFzc3VtaW5nIGMgPiBhLCByZXR1cm5zIFtxdW90aWVudCwgcmVtYWluZGVyXSBvZiAoYTw8MzIgKyBiKS9jXG4vL1Byb3ZpZGVzOiBkaXZfaGVscGVyXG5mdW5jdGlvbiBkaXZfaGVscGVyKGEsIGIsIGMpIHtcbiAgdmFyIHggPSBhICogNjU1MzYgKyAoYj4+PjE2KTtcbiAgdmFyIHkgPSBNYXRoLmZsb29yKHgvYykgKiA2NTUzNjtcbiAgdmFyIHogPSAoeCAlIGMpICogNjU1MzY7XG4gIHZhciB3ID0geiArIChiICYgMHgwMDAwRkZGRik7XG4gIHJldHVybiBbeSArIE1hdGguZmxvb3Iody9jKSwgdyAlIGNdO1xufVxuXG4vLyBuYXQxW29mczErbGVuXSA8IG5hdDJbb2ZzMl1cbi8vUHJvdmlkZXM6IGRpdl9kaWdpdF9uYXRcbi8vUmVxdWlyZXM6IGRpdl9oZWxwZXJcbmZ1bmN0aW9uIGRpdl9kaWdpdF9uYXQobmF0cSwgb2ZzcSwgbmF0ciwgb2ZzciwgbmF0MSwgb2ZzMSwgbGVuLCBuYXQyLCBvZnMyKSB7XG4gIHZhciByZW0gPSAobmF0MS5kYXRhW29mczErbGVuLTFdID4+PjApO1xuICAvLyBuYXRxW29mc3ErbGVuLTFdIGlzIGd1YXJhbnRlZWQgdG8gYmUgemVybyAoZHVlIHRvIHRoZSBNU0QgcmVxdWlyZW1lbnQpLFxuICAvLyBhbmQgc2hvdWxkIG5vdCBiZSB3cml0dGVuIHRvLlxuICBmb3IodmFyIGkgPSBsZW4tMjsgaSA+PSAwOyBpLS0pIHtcbiAgICB2YXIgeCA9IGRpdl9oZWxwZXIocmVtLCAobmF0MS5kYXRhW29mczEraV0gPj4+IDApLCAobmF0Mi5kYXRhW29mczJdID4+PiAwKSk7XG4gICAgbmF0cS5kYXRhW29mc3EraV0gPSB4WzBdO1xuICAgIHJlbSA9IHhbMV07XG4gIH1cbiAgbmF0ci5kYXRhW29mc3JdID0gcmVtO1xuICByZXR1cm4gMDtcbn1cblxuLy8gbmF0MVtuYXQyOl0gOj0gbmF0MSAvIG5hdDJcbi8vIG5hdDFbOm5hdDJdIDo9IG5hdDEgJSBuYXQyXG4vLyBsZW4xID4gbGVuMiwgbmF0MltvZnMyK2xlbjItMV0gPiBuYXQxW29mczErbGVuMS0xXVxuLy9Qcm92aWRlczogZGl2X25hdFxuLy9SZXF1aXJlczogZGl2X2RpZ2l0X25hdCwgZGl2X2hlbHBlciwgbnVtX2xlYWRpbmdfemVyb19iaXRzX2luX2RpZ2l0LCBzaGlmdF9sZWZ0X25hdCwgc2hpZnRfcmlnaHRfbmF0LCBjcmVhdGVfbmF0LCBzZXRfdG9femVyb19uYXQsIG11bHRfZGlnaXRfbmF0LCBzdWJfbmF0LCBjb21wYXJlX25hdCwgbmF0X29mX2FycmF5XG5mdW5jdGlvbiBkaXZfbmF0KG5hdDEsIG9mczEsIGxlbjEsIG5hdDIsIG9mczIsIGxlbjIpIHtcbiAgaWYobGVuMiA9PSAxKSB7XG4gICAgZGl2X2RpZ2l0X25hdChuYXQxLCBvZnMxKzEsIG5hdDEsIG9mczEsIG5hdDEsIG9mczEsIGxlbjEsIG5hdDIsIG9mczIpO1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgdmFyIHMgPSBudW1fbGVhZGluZ196ZXJvX2JpdHNfaW5fZGlnaXQobmF0Miwgb2ZzMitsZW4yLTEpO1xuICBzaGlmdF9sZWZ0X25hdChuYXQyLCBvZnMyLCBsZW4yLCBuYXRfb2ZfYXJyYXkoWzBdKSwgMCwgcyk7XG4gIHNoaWZ0X2xlZnRfbmF0KG5hdDEsIG9mczEsIGxlbjEsIG5hdF9vZl9hcnJheShbMF0pLCAwLCBzKTtcblxuICB2YXIgZCA9IChuYXQyLmRhdGFbb2ZzMitsZW4yLTFdID4+PiAwKSArIDE7XG4gIHZhciBhID0gY3JlYXRlX25hdChsZW4yKzEpO1xuICBmb3IgKHZhciBpID0gbGVuMSAtIDE7IGkgPj0gbGVuMjsgaS0tKSB7XG4gICAgLy8gRGVjZW50IGxvd2VyIGJvdW5kIG9uIHF1b1xuICAgIHZhciBxdW8gPSBkID09IDQyOTQ5NjcyOTYgPyAobmF0MS5kYXRhW29mczEraV0gPj4+IDApIDogZGl2X2hlbHBlcigobmF0MS5kYXRhW29mczEraV0gPj4+IDApLCAobmF0MS5kYXRhW29mczEraS0xXSA+Pj4wKSwgZClbMF07XG4gICAgc2V0X3RvX3plcm9fbmF0KGEsIDAsIGxlbjIrMSk7XG4gICAgbXVsdF9kaWdpdF9uYXQoYSwgMCwgbGVuMisxLCBuYXQyLCBvZnMyLCBsZW4yLCBuYXRfb2ZfYXJyYXkoW3F1b10pLCAwKTtcbiAgICBzdWJfbmF0KG5hdDEsIG9mczEraS1sZW4yLCBsZW4yKzEsIGEsIDAsIGxlbjIrMSwgMSk7XG5cbiAgICB3aGlsZSAobmF0MS5kYXRhW29mczEraV0gIT0gMCB8fCBjb21wYXJlX25hdChuYXQxLCBvZnMxK2ktbGVuMiwgbGVuMiwgbmF0Miwgb2ZzMiwgbGVuMikgPj0gMCkge1xuICAgICAgcXVvID0gcXVvICsgMTtcbiAgICAgIHN1Yl9uYXQobmF0MSwgb2ZzMStpLWxlbjIsIGxlbjIrMSwgbmF0Miwgb2ZzMiwgbGVuMiwgMSk7XG4gICAgfVxuXG4gICAgbmF0MS5kYXRhW29mczEraV0gPSBxdW87XG4gIH1cblxuICBzaGlmdF9yaWdodF9uYXQobmF0MSwgb2ZzMSwgbGVuMiwgbmF0X29mX2FycmF5KFswXSksIDAsIHMpOyAvLyBzaGlmdCByZW1haW5kZXJcbiAgc2hpZnRfcmlnaHRfbmF0KG5hdDIsIG9mczIsIGxlbjIsIG5hdF9vZl9hcnJheShbMF0pLCAwLCBzKTsgLy8gcmVzdG9yZVxuICByZXR1cm4gMDtcbn1cblxuXG4vLyAwIDw9IHNoaWZ0IDwgMzJcbi8vUHJvdmlkZXM6IHNoaWZ0X3JpZ2h0X25hdFxuZnVuY3Rpb24gc2hpZnRfcmlnaHRfbmF0KG5hdDEsIG9mczEsIGxlbjEsIG5hdDIsIG9mczIsIG5iaXRzKSB7XG4gIGlmKG5iaXRzID09IDApIHtcbiAgICBuYXQyLmRhdGFbb2ZzMl0gPSAwO1xuICAgIHJldHVybiAwO1xuICB9XG4gIHZhciB3cmFwID0gMDtcbiAgZm9yKHZhciBpID0gbGVuMS0xOyBpID49IDA7IGktLSkge1xuICAgIHZhciBhID0gbmF0MS5kYXRhW29mczEraV0gPj4+IDA7XG4gICAgbmF0MS5kYXRhW29mczEraV0gPSAoYSA+Pj4gbmJpdHMpIHwgd3JhcDtcbiAgICB3cmFwID0gYSA8PCAoMzIgLSBuYml0cyk7XG4gIH1cbiAgbmF0Mi5kYXRhW29mczJdID0gd3JhcDtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNvbXBhcmVfZGlnaXRzX25hdFxuZnVuY3Rpb24gY29tcGFyZV9kaWdpdHNfbmF0KG5hdDEsIG9mczEsIG5hdDIsIG9mczIpIHtcbiAgaWYobmF0MS5kYXRhW29mczFdID4gbmF0Mi5kYXRhW29mczJdKSByZXR1cm4gMTtcbiAgaWYobmF0MS5kYXRhW29mczFdIDwgbmF0Mi5kYXRhW29mczJdKSByZXR1cm4gLTE7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjb21wYXJlX25hdFxuLy9SZXF1aXJlczogbnVtX2RpZ2l0c19uYXRcbmZ1bmN0aW9uIGNvbXBhcmVfbmF0KG5hdDEsIG9mczEsIGxlbjEsIG5hdDIsIG9mczIsIGxlbjIpIHtcbiAgdmFyIGEgPSBudW1fZGlnaXRzX25hdChuYXQxLCBvZnMxLCBsZW4xKTtcbiAgdmFyIGIgPSBudW1fZGlnaXRzX25hdChuYXQyLCBvZnMyLCBsZW4yKTtcbiAgaWYoYSA+IGIpIHJldHVybiAxO1xuICBpZihhIDwgYikgcmV0dXJuIC0xO1xuICBmb3IodmFyIGkgPSBsZW4xIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBpZiAoKG5hdDEuZGF0YVtvZnMxK2ldID4+PiAwKSA+IChuYXQyLmRhdGFbb2ZzMitpXSA+Pj4gMCkpIHJldHVybiAxO1xuICAgIGlmICgobmF0MS5kYXRhW29mczEraV0gPj4+IDApIDwgKG5hdDIuZGF0YVtvZnMyK2ldID4+PiAwKSkgcmV0dXJuIC0xO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjb21wYXJlX25hdF9yZWFsXG4vL1JlcXVpcmVzOiBjb21wYXJlX25hdFxuZnVuY3Rpb24gY29tcGFyZV9uYXRfcmVhbChuYXQxLG5hdDIpe1xuICByZXR1cm4gY29tcGFyZV9uYXQobmF0MSwwLG5hdDEuZGF0YS5sZW5ndGgsbmF0MiwwLG5hdDIuZGF0YS5sZW5ndGgpO1xufVxuXG4vL1Byb3ZpZGVzOiBsYW5kX2RpZ2l0X25hdFxuZnVuY3Rpb24gbGFuZF9kaWdpdF9uYXQobmF0MSwgb2ZzMSwgbmF0Miwgb2ZzMikge1xuICBuYXQxLmRhdGFbb2ZzMV0gJj0gbmF0Mi5kYXRhW29mczJdO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogbG9yX2RpZ2l0X25hdFxuZnVuY3Rpb24gbG9yX2RpZ2l0X25hdChuYXQxLCBvZnMxLCBuYXQyLCBvZnMyKSB7XG4gIG5hdDEuZGF0YVtvZnMxXSB8PSBuYXQyLmRhdGFbb2ZzMl07XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBseG9yX2RpZ2l0X25hdFxuZnVuY3Rpb24gbHhvcl9kaWdpdF9uYXQobmF0MSwgb2ZzMSwgbmF0Miwgb2ZzMikge1xuICBuYXQxLmRhdGFbb2ZzMV0gXj0gbmF0Mi5kYXRhW29mczJdO1xuICByZXR1cm4gMDtcbn1cblxuXG4vL1Byb3ZpZGVzOiBzZXJpYWxpemVfbmF0XG5mdW5jdGlvbiBzZXJpYWxpemVfbmF0KHdyaXRlciwgbmF0LCBzeil7XG4gIHZhciBsZW4gPSBuYXQuZGF0YS5sZW5ndGg7XG4gIHdyaXRlci53cml0ZSgzMiwgbGVuKTtcbiAgZm9yKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKXtcbiAgICB3cml0ZXIud3JpdGUoMzIsIG5hdC5kYXRhW2ldKTtcbiAgfVxuICBzelswXSA9IGxlbiAqIDQ7XG4gIHN6WzFdID0gbGVuICogODtcbn1cblxuLy9Qcm92aWRlczogZGVzZXJpYWxpemVfbmF0XG4vL1JlcXVpcmVzOiBNbE5hdFxuZnVuY3Rpb24gZGVzZXJpYWxpemVfbmF0KHJlYWRlciwgc3ope1xuICB2YXIgbGVuID0gcmVhZGVyLnJlYWQzMnMoKTtcbiAgdmFyIG5hdCA9IG5ldyBNbE5hdChsZW4pO1xuICBmb3IodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspe1xuICAgIG5hdC5kYXRhW2ldID0gcmVhZGVyLnJlYWQzMnMoKTtcbiAgfVxuICBzelswXSA9IGxlbiAqIDQ7XG4gIHJldHVybiBuYXQ7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTQgSHVnbyBIZXV6YXJkXG5cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX3N0YXRlXG52YXIgY2FtbF9ncl9zdGF0ZTtcblxuLy9Qcm92aWRlczogY2FtbF9ncl9zdGF0ZV9nZXRcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVcbi8vUmVxdWlyZXM6IGNhbWxfbmFtZWRfdmFsdWUsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfZ3Jfc3RhdGVfZ2V0KCkge1xuICBpZihjYW1sX2dyX3N0YXRlKSB7XG4gICAgcmV0dXJuIGNhbWxfZ3Jfc3RhdGU7XG4gIH1cbiAgdGhyb3cgWzAsY2FtbF9uYW1lZF92YWx1ZShcIkdyYXBoaWNzLkdyYXBoaWNfZmFpbHVyZVwiKSwgY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcIk5vdCBpbml0aWFsaXplZFwiKV1cbn1cbi8vUHJvdmlkZXM6IGNhbWxfZ3Jfc3RhdGVfc2V0XG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlLGNhbWxfZ3Jfc3RhdGVfaW5pdFxuZnVuY3Rpb24gY2FtbF9ncl9zdGF0ZV9zZXQoY3R4KSB7XG4gIGNhbWxfZ3Jfc3RhdGU9Y3R4O1xuICBjYW1sX2dyX3N0YXRlX2luaXQoKVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9vcGVuX2dyYXBoXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2NyZWF0ZVxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9zZXRcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2dyX29wZW5fZ3JhcGgoaW5mbyl7XG4gIHZhciBnID0gZ2xvYmFsVGhpcztcbiAgdmFyIGluZm8gPSBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhpbmZvKTtcbiAgZnVuY3Rpb24gZ2V0KG5hbWUpe1xuICAgIHZhciByZXMgPSBpbmZvLm1hdGNoKFwiKF58LCkgKlwiK25hbWUrXCIgKj0gKihbYS16QS1aMC05X10rKSAqKCx8JClcIik7XG4gICAgaWYocmVzKSByZXR1cm4gcmVzWzJdO1xuICB9XG4gIHZhciBzcGVjcyA9IFtdO1xuICBpZighKGluZm89PVwiXCIpKSBzcGVjcy5wdXNoKGluZm8pO1xuICB2YXIgdGFyZ2V0ID0gZ2V0KFwidGFyZ2V0XCIpO1xuICBpZighdGFyZ2V0KSB0YXJnZXQ9XCJcIjtcbiAgdmFyIHN0YXR1cyA9IGdldChcInN0YXR1c1wiKTtcbiAgaWYoIXN0YXR1cykgc3BlY3MucHVzaChcInN0YXR1cz0xXCIpXG5cbiAgdmFyIHcgPSBnZXQoXCJ3aWR0aFwiKTtcbiAgdyA9IHc/cGFyc2VJbnQodyk6MjAwO1xuICBzcGVjcy5wdXNoKFwid2lkdGg9XCIrdyk7XG5cbiAgdmFyIGggPSBnZXQoXCJoZWlnaHRcIik7XG4gIGggPSBoP3BhcnNlSW50KGgpOjIwMDtcbiAgc3BlY3MucHVzaChcImhlaWdodD1cIitoKTtcblxuICB2YXIgd2luID0gZy5vcGVuKFwiYWJvdXQ6YmxhbmtcIix0YXJnZXQsc3BlY3Muam9pbihcIixcIikpO1xuICBpZighd2luKSB7Y2FtbF9mYWlsd2l0aChcIkdyYXBoaWNzLm9wZW5fZ3JhcGg6IGNhbm5vdCBvcGVuIHRoZSB3aW5kb3dcIil9XG4gIHZhciBkb2MgPSB3aW4uZG9jdW1lbnQ7XG4gIHZhciBjYW52YXMgPSBkb2MuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcbiAgY2FudmFzLndpZHRoID0gdztcbiAgY2FudmFzLmhlaWdodCA9IGg7XG4gIHZhciBjdHggPSBjYW1sX2dyX3N0YXRlX2NyZWF0ZShjYW52YXMsdyxoKTtcbiAgY3R4LnNldF90aXRsZSA9IGZ1bmN0aW9uICh0aXRsZSkge1xuICAgIGRvYy50aXRsZSA9IHRpdGxlO1xuICB9O1xuICBjYW1sX2dyX3N0YXRlX3NldChjdHgpO1xuICB2YXIgYm9keSA9IGRvYy5ib2R5O1xuICBib2R5LnN0eWxlLm1hcmdpbiA9IFwiMHB4XCI7XG4gIGJvZHkuYXBwZW5kQ2hpbGQoY2FudmFzKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3Jfc3RhdGVfaW5pdFxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZVxuLy9SZXF1aXJlczogY2FtbF9ncl9zZXRfY29sb3IsY2FtbF9ncl9tb3ZldG8sY2FtbF9ncl9yZXNpemVfd2luZG93XG4vL1JlcXVpcmVzOiBjYW1sX2dyX3NldF9saW5lX3dpZHRoLGNhbWxfZ3Jfc2V0X3RleHRfc2l6ZSxjYW1sX2dyX3NldF9mb250XG4vL1JlcXVpcmVzOiBjYW1sX2dyX3NldF93aW5kb3dfdGl0bGVcbmZ1bmN0aW9uIGNhbWxfZ3Jfc3RhdGVfaW5pdCgpe1xuICBjYW1sX2dyX21vdmV0byhjYW1sX2dyX3N0YXRlLngsY2FtbF9ncl9zdGF0ZS55KTtcbiAgY2FtbF9ncl9yZXNpemVfd2luZG93KGNhbWxfZ3Jfc3RhdGUud2lkdGgsY2FtbF9ncl9zdGF0ZS5oZWlnaHQpO1xuICBjYW1sX2dyX3NldF9saW5lX3dpZHRoKGNhbWxfZ3Jfc3RhdGUubGluZV93aWR0aCk7XG4gIGNhbWxfZ3Jfc2V0X3RleHRfc2l6ZShjYW1sX2dyX3N0YXRlLnRleHRfc2l6ZSk7XG4gIGNhbWxfZ3Jfc2V0X2ZvbnQoY2FtbF9ncl9zdGF0ZS5mb250KTtcbiAgY2FtbF9ncl9zZXRfY29sb3IoY2FtbF9ncl9zdGF0ZS5jb2xvcik7XG4gIGNhbWxfZ3Jfc2V0X3dpbmRvd190aXRsZShjYW1sX2dyX3N0YXRlLnRpdGxlKTtcbiAgLy9jYW1sX2dyX3Jlc2l6ZV93aW5kb3cgbWlnaHQgcmVzZXQgc29tZSBjYW52YXMnIHByb3BlcnRpZXNcbiAgY2FtbF9ncl9zdGF0ZS5jb250ZXh0LnRleHRCYXNlbGluZSA9ICdib3R0b20nO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX3N0YXRlX2NyZWF0ZVxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9ncl9zdGF0ZV9jcmVhdGUoY2FudmFzLHcsaCl7XG4gIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcbiAgcmV0dXJuIHtcbiAgICBjb250ZXh0OiBjb250ZXh0LFxuICAgIGNhbnZhcyA6IGNhbnZhcyxcbiAgICB4IDogMCxcbiAgICB5IDogMCxcbiAgICB3aWR0aCA6IHcsXG4gICAgaGVpZ2h0IDogaCxcbiAgICBsaW5lX3dpZHRoIDogMSxcbiAgICBmb250IDogY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcImZpeGVkXCIpLFxuICAgIHRleHRfc2l6ZSA6IDI2LFxuICAgIGNvbG9yIDogMHgwMDAwMDAsXG4gICAgdGl0bGUgOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKFwiXCIpXG4gIH07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfZG9jX29mX3N0YXRlXG5mdW5jdGlvbiBjYW1sX2dyX2RvY19vZl9zdGF0ZShzdGF0ZSkge1xuICBpZihzdGF0ZS5jYW52YXMub3duZXJEb2N1bWVudClcbiAgICByZXR1cm4gc3RhdGUuY2FudmFzLm93bmVyRG9jdW1lbnQ7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfY2xvc2VfZ3JhcGhcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG5mdW5jdGlvbiBjYW1sX2dyX2Nsb3NlX2dyYXBoKCl7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgcy5jYW52YXMud2lkdGggPSAwO1xuICBzLmNhbnZhcy5oZWlnaHQgPSAwO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9zZXRfd2luZG93X3RpdGxlXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfZ3Jfc2V0X3dpbmRvd190aXRsZShuYW1lKXtcbiAgdmFyIHMgPSBjYW1sX2dyX3N0YXRlX2dldCgpO1xuICBzLnRpdGxlID0gbmFtZTtcbiAgdmFyIGpzbmFtZSA9IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKG5hbWUpO1xuICBpZihzLnNldF90aXRsZSkgcy5zZXRfdGl0bGUoanNuYW1lKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfcmVzaXplX3dpbmRvd1xuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbmZ1bmN0aW9uIGNhbWxfZ3JfcmVzaXplX3dpbmRvdyh3LGgpe1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KClcbiAgcy53aWR0aCA9IHc7XG4gIHMuaGVpZ2h0ID0gaDtcbiAgcy5jYW52YXMud2lkdGggPSB3O1xuICBzLmNhbnZhcy5oZWlnaHQgPSBoO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9jbGVhcl9ncmFwaFxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbmZ1bmN0aW9uIGNhbWxfZ3JfY2xlYXJfZ3JhcGgoKXtcbiAgdmFyIHMgPSBjYW1sX2dyX3N0YXRlX2dldCgpO1xuICBzLmNhbnZhcy53aWR0aCA9IHMud2lkdGg7XG4gIHMuY2FudmFzLmhlaWdodCA9IHMuaGVpZ2h0O1xuICAvLyAgcy5jb250ZXh0LnN0cm9rZVJlY3QgKDAuLCAwLiwgcy53aWR0aCwgcy5oZWlnaHQpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9zaXplX3hcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG5mdW5jdGlvbiBjYW1sX2dyX3NpemVfeCgpe1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHJldHVybiBzLndpZHRoO1xufVxuLy9Qcm92aWRlczogY2FtbF9ncl9zaXplX3lcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG5mdW5jdGlvbiBjYW1sX2dyX3NpemVfeSgpe1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHJldHVybiBzLmhlaWdodDtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX3NldF9jb2xvclxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbmZ1bmN0aW9uIGNhbWxfZ3Jfc2V0X2NvbG9yKGNvbG9yKXtcbiAgdmFyIHMgPSBjYW1sX2dyX3N0YXRlX2dldCgpO1xuICBmdW5jdGlvbiBjb252ZXJ0KG51bWJlcikge1xuICAgIHZhciBzdHIgPSAnJyArIG51bWJlci50b1N0cmluZygxNik7XG4gICAgd2hpbGUgKHN0ci5sZW5ndGggPCAyKSBzdHIgPSAnMCcgKyBzdHI7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuICB2YXJcbiAgciA9IChjb2xvciA+PiAxNikgJiAweGZmLFxuICBnID0gKGNvbG9yID4+IDgpICAmIDB4ZmYsXG4gIGIgPSAoY29sb3IgPj4gMCkgICYgMHhmZjtcbiAgcy5jb2xvcj1jb2xvcjtcbiAgdmFyIGNfc3RyID0gJyMnICsgY29udmVydChyKSArIGNvbnZlcnQoZykgKyBjb252ZXJ0KGIpO1xuICBzLmNvbnRleHQuZmlsbFN0eWxlID0gICBjX3N0cjtcbiAgcy5jb250ZXh0LnN0cm9rZVN0eWxlID0gY19zdHI7XG4gIHJldHVybiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9ncl9wbG90XG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9wbG90KHgseSl7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgdmFyIGltPXMuY29udGV4dC5jcmVhdGVJbWFnZURhdGEoMSwxKTtcbiAgdmFyIGQgPSBpbS5kYXRhO1xuICB2YXIgY29sb3IgPSBzLmNvbG9yO1xuICBkWzBdID0gKGNvbG9yID4+IDE2KSAmIDB4ZmY7IC8vclxuICBkWzFdID0gKGNvbG9yID4+IDgpICAmIDB4ZmYsIC8vZ1xuICBkWzJdID0gKGNvbG9yID4+IDApICAmIDB4ZmY7IC8vYlxuICBkWzNdID0gMHhGRjsgLy9hXG4gIHMueD14O1xuICBzLnk9eTtcbiAgcy5jb250ZXh0LnB1dEltYWdlRGF0YShpbSx4LHMuaGVpZ2h0IC0geSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX3BvaW50X2NvbG9yXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9wb2ludF9jb2xvcih4LHkpe1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHZhciBpbT1zLmNvbnRleHQuZ2V0SW1hZ2VEYXRhKHgscy5oZWlnaHQgLSB5LDEsMSk7XG4gIHZhciBkID0gaW0uZGF0YTtcbiAgcmV0dXJuIChkWzBdIDw8IDE2KSArIChkWzFdIDw8IDgpICsgZFsyXTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfbW92ZXRvXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9tb3ZldG8oeCx5KXtcbiAgdmFyIHMgPSBjYW1sX2dyX3N0YXRlX2dldCgpO1xuICBzLng9eDtcbiAgcy55PXk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX2N1cnJlbnRfeFxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbmZ1bmN0aW9uIGNhbWxfZ3JfY3VycmVudF94KCl7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgcmV0dXJuIHMueFxufVxuLy9Qcm92aWRlczogY2FtbF9ncl9jdXJyZW50X3lcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG5mdW5jdGlvbiBjYW1sX2dyX2N1cnJlbnRfeSgpe1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHJldHVybiBzLnlcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfbGluZXRvXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9saW5ldG8oeCx5KXtcbiAgdmFyIHMgPSBjYW1sX2dyX3N0YXRlX2dldCgpO1xuICBzLmNvbnRleHQuYmVnaW5QYXRoKCk7XG4gIHMuY29udGV4dC5tb3ZlVG8ocy54LHMuaGVpZ2h0IC0gcy55KTtcbiAgcy5jb250ZXh0LmxpbmVUbyh4LHMuaGVpZ2h0IC0geSk7XG4gIHMuY29udGV4dC5zdHJva2UoKTtcbiAgcy54PXg7XG4gIHMueT15O1xuICByZXR1cm4gMDtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfZHJhd19yZWN0XG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9kcmF3X3JlY3QoeCx5LHcsaCl7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgcy5jb250ZXh0LnN0cm9rZVJlY3QoeCxzLmhlaWdodCAtIHksdywtaCk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX2FyY19hdXhcbmZ1bmN0aW9uIGNhbWxfZ3JfYXJjX2F1eChjdHgsY3gsY3kscnkscngsYTEsYTIpe1xuICB3aGlsZShhMT5hMikgYTIrPTM2MDtcbiAgYTEgLz0gMTgwO1xuICBhMiAvPSAxODA7XG4gIHZhciByb3QgPSAwLHhQb3MseVBvcyx4UG9zX3ByZXYseVBvc19wcmV2O1xuICB2YXIgc3BhY2UgPSAyO1xuICB2YXIgbnVtID0gKCgoYTIgLSBhMSkgKiBNYXRoLlBJICogKChyeCtyeSkvMikpIC8gc3BhY2UpIHwgMDtcbiAgdmFyIGRlbHRhID0gKGEyIC0gYTEpICogTWF0aC5QSSAvIG51bTtcbiAgdmFyIGkgPSBhMSAqIE1hdGguUEk7XG4gIGZvciAodmFyIGo9MDtqPD1udW07aisrKXtcbiAgICB4UG9zID0gY3ggLSAocnggKiBNYXRoLnNpbihpKSkgKiBNYXRoLnNpbihyb3QgKiBNYXRoLlBJKSArIChyeSAqIE1hdGguY29zKGkpKSAqIE1hdGguY29zKHJvdCAqIE1hdGguUEkpO1xuICAgIHhQb3MgPSB4UG9zLnRvRml4ZWQoMik7XG4gICAgeVBvcyA9IGN5ICsgKHJ5ICogTWF0aC5jb3MoaSkpICogTWF0aC5zaW4ocm90ICogTWF0aC5QSSkgKyAocnggKiBNYXRoLnNpbihpKSkgKiBNYXRoLmNvcyhyb3QgKiBNYXRoLlBJKTtcbiAgICB5UG9zID0geVBvcy50b0ZpeGVkKDIpO1xuICAgIGlmIChqPT0wKSB7XG4gICAgICBjdHgubW92ZVRvKHhQb3MsIHlQb3MpO1xuICAgIH0gZWxzZSBpZiAoeFBvc19wcmV2IT14UG9zIHx8IHlQb3NfcHJldiE9eVBvcyl7XG4gICAgICBjdHgubGluZVRvKHhQb3MsIHlQb3MpO1xuICAgIH1cbiAgICB4UG9zX3ByZXY9eFBvcztcbiAgICB5UG9zX3ByZXY9eVBvcztcbiAgICBpLT0gZGVsdGE7Ly9jY3dcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX2RyYXdfYXJjXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldCwgY2FtbF9ncl9hcmNfYXV4XG5mdW5jdGlvbiBjYW1sX2dyX2RyYXdfYXJjKHgseSxyeCxyeSxhMSxhMil7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgcy5jb250ZXh0LmJlZ2luUGF0aCgpO1xuICBjYW1sX2dyX2FyY19hdXgocy5jb250ZXh0LHgscy5oZWlnaHQgLSB5LHJ4LHJ5LGExLGEyKTtcbiAgcy5jb250ZXh0LnN0cm9rZSgpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9zZXRfbGluZV93aWR0aFxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbmZ1bmN0aW9uIGNhbWxfZ3Jfc2V0X2xpbmVfd2lkdGgodyl7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgcy5saW5lX3dpZHRoID0gdztcbiAgcy5jb250ZXh0LmxpbmVXaWR0aCA9IHdcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfZmlsbF9yZWN0XG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9maWxsX3JlY3QoeCx5LHcsaCl7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgcy5jb250ZXh0LmZpbGxSZWN0KHgscy5oZWlnaHQgLSB5LHcsLWgpO1xuICByZXR1cm4gMDtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfZmlsbF9wb2x5XG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9maWxsX3BvbHkoYXIpe1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHMuY29udGV4dC5iZWdpblBhdGgoKTtcbiAgcy5jb250ZXh0Lm1vdmVUbyhhclsxXVsxXSxzLmhlaWdodCAtIGFyWzFdWzJdKTtcbiAgZm9yKHZhciBpID0gMjsgaSA8IGFyLmxlbmd0aDsgaSsrKVxuICAgIHMuY29udGV4dC5saW5lVG8oYXJbaV1bMV0scy5oZWlnaHQgLSBhcltpXVsyXSk7XG4gIHMuY29udGV4dC5saW5lVG8oYXJbMV1bMV0scy5oZWlnaHQgLSBhclsxXVsyXSk7XG4gIHMuY29udGV4dC5maWxsKCk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX2ZpbGxfYXJjXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldCwgY2FtbF9ncl9hcmNfYXV4XG5mdW5jdGlvbiBjYW1sX2dyX2ZpbGxfYXJjKHgseSxyeCxyeSxhMSxhMil7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgcy5jb250ZXh0LmJlZ2luUGF0aCgpO1xuICBjYW1sX2dyX2FyY19hdXgocy5jb250ZXh0LHgscy5oZWlnaHQgLSB5LHJ4LHJ5LGExLGEyKTtcbiAgcy5jb250ZXh0LmZpbGwoKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfZHJhd19zdHJcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG5mdW5jdGlvbiBjYW1sX2dyX2RyYXdfc3RyKHN0cil7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgdmFyIG0gPSBzLmNvbnRleHQubWVhc3VyZVRleHQoc3RyKTtcbiAgdmFyIGR4ID0gbS53aWR0aDtcbiAgcy5jb250ZXh0LmZpbGxUZXh0KHN0cixzLngscy5oZWlnaHQgLSBzLnkpO1xuICBzLnggKz0gZHggfCAwO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9kcmF3X2NoYXJcbi8vUmVxdWlyZXM6IGNhbWxfZ3JfZHJhd19zdHJcbmZ1bmN0aW9uIGNhbWxfZ3JfZHJhd19jaGFyKGMpe1xuICBjYW1sX2dyX2RyYXdfc3RyKFN0cmluZy5mcm9tQ2hhckNvZGUoYykpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9kcmF3X3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9ncl9kcmF3X3N0clxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfZ3JfZHJhd19zdHJpbmcoc3RyKXtcbiAgY2FtbF9ncl9kcmF3X3N0cihjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhzdHIpKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3Jfc2V0X2ZvbnRcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9ncl9zZXRfZm9udChmKXtcbiAgdmFyIHMgPSBjYW1sX2dyX3N0YXRlX2dldCgpO1xuICBzLmZvbnQgPSBmO1xuICBzLmNvbnRleHQuZm9udCA9IHMudGV4dF9zaXplICsgXCJweCBcIiArIGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMuZm9udCk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX3NldF90ZXh0X3NpemVcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9ncl9zZXRfdGV4dF9zaXplKHNpemUpe1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHMudGV4dF9zaXplID0gc2l6ZTtcbiAgcy5jb250ZXh0LmZvbnQgPSBzLnRleHRfc2l6ZSArIFwicHggXCIgKyBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhzLmZvbnQpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl90ZXh0X3NpemVcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9ncl90ZXh0X3NpemUodHh0KXtcbiAgdmFyIHMgPSBjYW1sX2dyX3N0YXRlX2dldCgpO1xuICB2YXIgdyA9IHMuY29udGV4dC5tZWFzdXJlVGV4dChjYW1sX2pzc3RyaW5nX29mX3N0cmluZyh0eHQpKS53aWR0aDtcbiAgcmV0dXJuIFswLHcscy50ZXh0X3NpemVdO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfbWFrZV9pbWFnZVxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbmZ1bmN0aW9uIGNhbWxfZ3JfbWFrZV9pbWFnZShhcnIpe1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHZhciBoID0gYXJyLmxlbmd0aCAtIDEgO1xuICB2YXIgdyA9IGFyclsxXS5sZW5ndGggLSAxO1xuICB2YXIgaW0gPSBzLmNvbnRleHQuY3JlYXRlSW1hZ2VEYXRhKHcsaCk7XG4gIGZvcih2YXIgaT0wO2k8aDtpKyspe1xuICAgIGZvcih2YXIgaj0wO2o8dztqKyspe1xuICAgICAgdmFyIGMgPSBhcnJbaSsxXVtqKzFdO1xuICAgICAgdmFyIG8gPSBpKih3KjQpICsgKGogKiA0KTtcbiAgICAgIGlmKGMgPT0gLTEpIHtcbiAgICAgICAgaW0uZGF0YVtvICsgMF0gPSAwO1xuICAgICAgICBpbS5kYXRhW28gKyAxXSA9IDA7XG4gICAgICAgIGltLmRhdGFbbyArIDJdID0gMDtcbiAgICAgICAgaW0uZGF0YVtvICsgM10gPSAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW0uZGF0YVtvICsgMF0gPSBjID4+IDE2ICYgMHhmZjtcbiAgICAgICAgaW0uZGF0YVtvICsgMV0gPSBjID4+ICA4ICYgMHhmZjtcbiAgICAgICAgaW0uZGF0YVtvICsgMl0gPSBjID4+ICAwICYgMFhmZjtcbiAgICAgICAgaW0uZGF0YVtvICsgM10gPSAweGZmO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gaW1cbn1cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfZHVtcF9pbWFnZVxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbmZ1bmN0aW9uIGNhbWxfZ3JfZHVtcF9pbWFnZShpbSl7XG4gIHZhciBkYXRhID0gWzBdXG4gIGZvcih2YXIgaT0wOyBpPGltLmhlaWdodDtpKyspe1xuICAgIGRhdGFbaSsxXSA9IFswXVxuICAgIGZvcih2YXIgaj0wOyBqPGltLndpZHRoO2orKyl7XG4gICAgICB2YXIgbyA9IGkqKGltLndpZHRoKjQpICsgKGogKiA0KSxcbiAgICAgICAgICByID0gaW0uZGF0YVtvKzBdLFxuICAgICAgICAgIGcgPSBpbS5kYXRhW28rMV0sXG4gICAgICAgICAgYiA9IGltLmRhdGFbbysyXTtcbiAgICAgIGRhdGFbaSsxXVtqKzFdID0gKHIgPDwgMTYpICsgKGcgPDwgOCkgKyBiXG4gICAgfVxuICB9XG4gIHJldHVybiBkYXRhXG59XG4vL1Byb3ZpZGVzOiBjYW1sX2dyX2RyYXdfaW1hZ2Vcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG5mdW5jdGlvbiBjYW1sX2dyX2RyYXdfaW1hZ2UoaW0seCx5KXtcbiAgdmFyIHMgPSBjYW1sX2dyX3N0YXRlX2dldCgpO1xuICBpZighaW0uaW1hZ2UpIHtcbiAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcbiAgICBjYW52YXMud2lkdGggPSBzLndpZHRoO1xuICAgIGNhbnZhcy5oZWlnaHQgPSBzLmhlaWdodDtcbiAgICBjYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpLnB1dEltYWdlRGF0YShpbSwwLDApO1xuICAgIHZhciBpbWFnZSA9IG5ldyBnbG9iYWxUaGlzLkltYWdlKCk7XG4gICAgaW1hZ2Uub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgcy5jb250ZXh0LmRyYXdJbWFnZShpbWFnZSx4LHMuaGVpZ2h0IC0gaW0uaGVpZ2h0IC0geSk7XG4gICAgICBpbS5pbWFnZSA9IGltYWdlO1xuICAgIH1cbiAgICBpbWFnZS5zcmMgPSBjYW52YXMudG9EYXRhVVJMKFwiaW1hZ2UvcG5nXCIpO1xuICB9IGVsc2Uge1xuICAgIHMuY29udGV4dC5kcmF3SW1hZ2UoaW0uaW1hZ2UseCxzLmhlaWdodCAtIGltLmhlaWdodCAtIHkpO1xuICB9XG4gIHJldHVybiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9ncl9jcmVhdGVfaW1hZ2Vcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG5mdW5jdGlvbiBjYW1sX2dyX2NyZWF0ZV9pbWFnZSh4LHkpe1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHJldHVybiBzLmNvbnRleHQuY3JlYXRlSW1hZ2VEYXRhKHgseSk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2dyX2JsaXRfaW1hZ2Vcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG5mdW5jdGlvbiBjYW1sX2dyX2JsaXRfaW1hZ2UoaW0seCx5KXtcbiAgdmFyIHMgPSBjYW1sX2dyX3N0YXRlX2dldCgpO1xuICB2YXIgaW0yID0gcy5jb250ZXh0LmdldEltYWdlRGF0YSh4LHMuaGVpZ2h0IC0gaW0uaGVpZ2h0IC0geSxpbS53aWR0aCxpbS5oZWlnaHQpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGltMi5kYXRhLmxlbmd0aDsgaSs9NCl7XG4gICAgaW0uZGF0YVtpXSA9IGltMi5kYXRhW2ldO1xuICAgIGltLmRhdGFbaSsxXSA9IGltMi5kYXRhW2krMV07XG4gICAgaW0uZGF0YVtpKzJdID0gaW0yLmRhdGFbaSsyXTtcbiAgICBpbS5kYXRhW2krM10gPSBpbTIuZGF0YVtpKzNdO1xuICB9XG4gIHJldHVybiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9ncl9zaWdpb19oYW5kbGVyXG5mdW5jdGlvbiBjYW1sX2dyX3NpZ2lvX2hhbmRsZXIoKXtyZXR1cm4gMH1cbi8vUHJvdmlkZXM6IGNhbWxfZ3Jfc2lnaW9fc2lnbmFsXG5mdW5jdGlvbiBjYW1sX2dyX3NpZ2lvX3NpZ25hbCgpe3JldHVybiAwfVxuLy9Qcm92aWRlczogY2FtbF9ncl93YWl0X2V2ZW50XG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX2dyX3dhaXRfZXZlbnQoX2V2bCl7XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX2dyX3dhaXRfZXZlbnQgbm90IEltcGxlbWVudGVkOiB1c2UgR3JhcGhpY3NfanMgaW5zdGVhZFwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9zeW5jaHJvbml6ZVxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF9ncl9zeW5jaHJvbml6ZSAoKSB7XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX2dyX3N5bmNocm9uaXplIG5vdCBJbXBsZW1lbnRlZFwiKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfcmVtZW1iZXJfbW9kZVxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF9ncl9yZW1lbWJlcl9tb2RlICgpIHtcbiAgY2FtbF9mYWlsd2l0aChcImNhbWxfZ3JfcmVtZW1iZXJfbW9kZSBub3QgSW1wbGVtZW50ZWRcIik7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2dyX2Rpc3BsYXlfbW9kZVxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF9ncl9kaXNwbGF5X21vZGUoKSB7XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX2dyX2Rpc3BsYXlfbW9kZSBub3QgSW1wbGVtZW50ZWRcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3Jfd2luZG93X2lkXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX2dyX3dpbmRvd19pZChhKSB7XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX2dyX3dpbmRvd19pZCBub3QgSW1wbGVtZW50ZWRcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3Jfb3Blbl9zdWJ3aW5kb3dcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfZ3Jfb3Blbl9zdWJ3aW5kb3coYSxiLGMsZCkge1xuICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9ncl9vcGVuX3N1YndpbmRvdyBub3QgSW1wbGVtZW50ZWRcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfY2xvc2Vfc3Vid2luZG93XG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX2dyX2Nsb3NlX3N1YndpbmRvdyhhKSB7XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX2dyX2Nsb3NlX3N1YndpbmRvdyBub3QgSW1wbGVtZW50ZWRcIik7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTAgSsOpcsO0bWUgVm91aWxsb25cbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogY2FtbF9tYXJzaGFsX2NvbnN0YW50c1xudmFyIGNhbWxfbWFyc2hhbF9jb25zdGFudHMgPSB7XG4gIFBSRUZJWF9TTUFMTF9CTE9DSzogICAgICAgICAweDgwLFxuICBQUkVGSVhfU01BTExfSU5UOiAgICAgICAgICAgMHg0MCxcbiAgUFJFRklYX1NNQUxMX1NUUklORzogICAgICAgIDB4MjAsXG4gIENPREVfSU5UODogICAgICAgICAgICAgICAgICAweDAwLFxuICBDT0RFX0lOVDE2OiAgICAgICAgICAgICAgICAgMHgwMSxcbiAgQ09ERV9JTlQzMjogICAgICAgICAgICAgICAgIDB4MDIsXG4gIENPREVfSU5UNjQ6ICAgICAgICAgICAgICAgICAweDAzLFxuICBDT0RFX1NIQVJFRDg6ICAgICAgICAgICAgICAgMHgwNCxcbiAgQ09ERV9TSEFSRUQxNjogICAgICAgICAgICAgIDB4MDUsXG4gIENPREVfU0hBUkVEMzI6ICAgICAgICAgICAgICAweDA2LFxuICBDT0RFX0JMT0NLMzI6ICAgICAgICAgICAgICAgMHgwOCxcbiAgQ09ERV9CTE9DSzY0OiAgICAgICAgICAgICAgIDB4MTMsXG4gIENPREVfU1RSSU5HODogICAgICAgICAgICAgICAweDA5LFxuICBDT0RFX1NUUklORzMyOiAgICAgICAgICAgICAgMHgwQSxcbiAgQ09ERV9ET1VCTEVfQklHOiAgICAgICAgICAgIDB4MEIsXG4gIENPREVfRE9VQkxFX0xJVFRMRTogICAgICAgICAweDBDLFxuICBDT0RFX0RPVUJMRV9BUlJBWThfQklHOiAgICAgMHgwRCxcbiAgQ09ERV9ET1VCTEVfQVJSQVk4X0xJVFRMRTogIDB4MEUsXG4gIENPREVfRE9VQkxFX0FSUkFZMzJfQklHOiAgICAweDBGLFxuICBDT0RFX0RPVUJMRV9BUlJBWTMyX0xJVFRMRTogMHgwNyxcbiAgQ09ERV9DT0RFUE9JTlRFUjogICAgICAgICAgIDB4MTAsXG4gIENPREVfSU5GSVhQT0lOVEVSOiAgICAgICAgICAweDExLFxuICBDT0RFX0NVU1RPTTogICAgICAgICAgICAgICAgMHgxMixcbiAgQ09ERV9DVVNUT01fTEVOOiAgICAgICAgICAgIDB4MTgsXG4gIENPREVfQ1VTVE9NX0ZJWEVEOiAgICAgICAgICAweDE5XG59XG5cblxuLy9Qcm92aWRlczogTWxTdHJpbmdSZWFkZXJcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMsIGNhbWxfanNieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIE1sU3RyaW5nUmVhZGVyIChzLCBpKSB7IHRoaXMucyA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcocyk7IHRoaXMuaSA9IGk7IH1cbk1sU3RyaW5nUmVhZGVyLnByb3RvdHlwZSA9IHtcbiAgcmVhZDh1OmZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMucy5jaGFyQ29kZUF0KHRoaXMuaSsrKTsgfSxcbiAgcmVhZDhzOmZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMucy5jaGFyQ29kZUF0KHRoaXMuaSsrKSA8PCAyNCA+PiAyNDsgfSxcbiAgcmVhZDE2dTpmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDI7XG4gICAgcmV0dXJuIChzLmNoYXJDb2RlQXQoaSkgPDwgOCkgfCBzLmNoYXJDb2RlQXQoaSArIDEpXG4gIH0sXG4gIHJlYWQxNnM6ZnVuY3Rpb24gKCkge1xuICAgIHZhciBzID0gdGhpcy5zLCBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyAyO1xuICAgIHJldHVybiAocy5jaGFyQ29kZUF0KGkpIDw8IDI0ID4+IDE2KSB8IHMuY2hhckNvZGVBdChpICsgMSk7XG4gIH0sXG4gIHJlYWQzMnU6ZnVuY3Rpb24gKCkge1xuICAgIHZhciBzID0gdGhpcy5zLCBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyA0O1xuICAgIHJldHVybiAoKHMuY2hhckNvZGVBdChpKSA8PCAyNCkgfCAocy5jaGFyQ29kZUF0KGkrMSkgPDwgMTYpIHxcbiAgICAgICAgICAgIChzLmNoYXJDb2RlQXQoaSsyKSA8PCA4KSB8IHMuY2hhckNvZGVBdChpKzMpKSA+Pj4gMDtcbiAgfSxcbiAgcmVhZDMyczpmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDQ7XG4gICAgcmV0dXJuIChzLmNoYXJDb2RlQXQoaSkgPDwgMjQpIHwgKHMuY2hhckNvZGVBdChpKzEpIDw8IDE2KSB8XG4gICAgICAocy5jaGFyQ29kZUF0KGkrMikgPDwgOCkgfCBzLmNoYXJDb2RlQXQoaSszKTtcbiAgfSxcbiAgcmVhZHN0cjpmdW5jdGlvbiAobGVuKSB7XG4gICAgdmFyIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIGxlbjtcbiAgICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyh0aGlzLnMuc3Vic3RyaW5nKGksIGkgKyBsZW4pKTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBCaWdTdHJpbmdSZWFkZXJcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2FycmF5LCBjYW1sX2JhX2dldF8xXG5mdW5jdGlvbiBCaWdTdHJpbmdSZWFkZXIgKGJzLCBpKSB7IHRoaXMucyA9IGJzOyB0aGlzLmkgPSBpOyB9XG5CaWdTdHJpbmdSZWFkZXIucHJvdG90eXBlID0ge1xuICByZWFkOHU6ZnVuY3Rpb24gKCkgeyByZXR1cm4gY2FtbF9iYV9nZXRfMSh0aGlzLnMsdGhpcy5pKyspOyB9LFxuICByZWFkOHM6ZnVuY3Rpb24gKCkgeyByZXR1cm4gY2FtbF9iYV9nZXRfMSh0aGlzLnMsdGhpcy5pKyspIDw8IDI0ID4+IDI0OyB9LFxuICByZWFkMTZ1OmZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcyA9IHRoaXMucywgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgMjtcbiAgICByZXR1cm4gKGNhbWxfYmFfZ2V0XzEocyxpKSA8PCA4KSB8IGNhbWxfYmFfZ2V0XzEocyxpICsgMSlcbiAgfSxcbiAgcmVhZDE2czpmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDI7XG4gICAgcmV0dXJuIChjYW1sX2JhX2dldF8xKHMsaSkgPDwgMjQgPj4gMTYpIHwgY2FtbF9iYV9nZXRfMShzLGkgKyAxKTtcbiAgfSxcbiAgcmVhZDMydTpmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDQ7XG4gICAgcmV0dXJuICgoY2FtbF9iYV9nZXRfMShzLGkpICAgPDwgMjQpIHwgKGNhbWxfYmFfZ2V0XzEocyxpKzEpIDw8IDE2KSB8XG4gICAgICAgICAgICAoY2FtbF9iYV9nZXRfMShzLGkrMikgPDwgOCkgIHwgY2FtbF9iYV9nZXRfMShzLGkrMykgICAgICAgICApID4+PiAwO1xuICB9LFxuICByZWFkMzJzOmZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcyA9IHRoaXMucywgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgNDtcbiAgICByZXR1cm4gKGNhbWxfYmFfZ2V0XzEocyxpKSAgIDw8IDI0KSB8IChjYW1sX2JhX2dldF8xKHMsaSsxKSA8PCAxNikgfFxuICAgICAgKGNhbWxfYmFfZ2V0XzEocyxpKzIpIDw8IDgpICB8IGNhbWxfYmFfZ2V0XzEocyxpKzMpO1xuICB9LFxuICByZWFkc3RyOmZ1bmN0aW9uIChsZW4pIHtcbiAgICB2YXIgaSA9IHRoaXMuaTtcbiAgICB2YXIgYXJyID0gbmV3IEFycmF5KGxlbilcbiAgICBmb3IodmFyIGogPSAwOyBqIDwgbGVuOyBqKyspe1xuICAgICAgYXJyW2pdID0gY2FtbF9iYV9nZXRfMSh0aGlzLnMsIGkraik7XG4gICAgfVxuICAgIHRoaXMuaSA9IGkgKyBsZW47XG4gICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2FycmF5KGFycik7XG4gIH1cbn1cblxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfZmxvYXRfb2ZfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0cywgY2FtbF9pbnQ2NF9vZl9ieXRlc1xuZnVuY3Rpb24gY2FtbF9mbG9hdF9vZl9ieXRlcyAoYSkge1xuICByZXR1cm4gY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzIChjYW1sX2ludDY0X29mX2J5dGVzIChhKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9zdHJpbmcgbXV0YWJsZVxuLy9SZXF1aXJlczogTWxTdHJpbmdSZWFkZXIsIGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9yZWFkZXJcbmZ1bmN0aW9uIGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9zdHJpbmcocyxvZnMpIHtcbiAgdmFyIHJlYWRlciA9IG5ldyBNbFN0cmluZ1JlYWRlciAocywgdHlwZW9mIG9mcz09XCJudW1iZXJcIj9vZnM6b2ZzWzBdKTtcbiAgcmV0dXJuIGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9yZWFkZXIocmVhZGVyLCBvZnMpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9ieXRlcyBtdXRhYmxlXG4vL1JlcXVpcmVzOiBNbFN0cmluZ1JlYWRlciwgY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3JlYWRlciwgY2FtbF9zdHJpbmdfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9ieXRlcyhzLG9mcykge1xuICB2YXIgcmVhZGVyID0gbmV3IE1sU3RyaW5nUmVhZGVyIChjYW1sX3N0cmluZ19vZl9ieXRlcyhzKSwgdHlwZW9mIG9mcz09XCJudW1iZXJcIj9vZnM6b2ZzWzBdKTtcbiAgcmV0dXJuIGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9yZWFkZXIocmVhZGVyLCBvZnMpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfdW5tYXJzaGFsXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2ludDY0X3VubWFyc2hhbChyZWFkZXIsIHNpemUpe1xuICB2YXIgdCA9IG5ldyBBcnJheSg4KTs7XG4gIGZvciAodmFyIGogPSAwO2ogPCA4O2orKykgdFtqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgc2l6ZVswXSA9IDg7XG4gIHJldHVybiBjYW1sX2ludDY0X29mX2J5dGVzICh0KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9tYXJzaGFsXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X3RvX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2ludDY0X21hcnNoYWwod3JpdGVyLCB2LCBzaXplcykge1xuICB2YXIgYiA9IGNhbWxfaW50NjRfdG9fYnl0ZXMgKHYpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykgd3JpdGVyLndyaXRlICg4LCBiW2ldKTtcbiAgc2l6ZXNbMF0gPSA4OyBzaXplc1sxXSA9IDg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50MzJfdW5tYXJzaGFsXG5mdW5jdGlvbiBjYW1sX2ludDMyX3VubWFyc2hhbChyZWFkZXIsIHNpemUpe1xuICBzaXplWzBdID0gNDtcbiAgcmV0dXJuIHJlYWRlci5yZWFkMzJzICgpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX25hdGl2ZWludF91bm1hcnNoYWxcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfbmF0aXZlaW50X3VubWFyc2hhbChyZWFkZXIsIHNpemUpe1xuICBzd2l0Y2ggKHJlYWRlci5yZWFkOHUgKCkpIHtcbiAgY2FzZSAxOlxuICAgIHNpemVbMF0gPSA0O1xuICAgIHJldHVybiByZWFkZXIucmVhZDMycyAoKTtcbiAgY2FzZSAyOlxuICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogbmF0aXZlIGludGVnZXIgdmFsdWUgdG9vIGxhcmdlXCIpO1xuICBkZWZhdWx0OiBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IGlsbC1mb3JtZWQgbmF0aXZlIGludGVnZXJcIik7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9jdXN0b21fb3BzXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X3VubWFyc2hhbCwgY2FtbF9pbnQ2NF9tYXJzaGFsLCBjYW1sX2ludDY0X2NvbXBhcmUsIGNhbWxfaW50NjRfaGFzaFxuLy9SZXF1aXJlczogY2FtbF9pbnQzMl91bm1hcnNoYWwsIGNhbWxfbmF0aXZlaW50X3VubWFyc2hhbFxuLy9SZXF1aXJlczogY2FtbF9iYV9zZXJpYWxpemUsIGNhbWxfYmFfZGVzZXJpYWxpemUsIGNhbWxfYmFfY29tcGFyZSwgY2FtbF9iYV9oYXNoXG52YXIgY2FtbF9jdXN0b21fb3BzID1cbiAgICB7XCJfalwiOiB7XG4gICAgICBkZXNlcmlhbGl6ZSA6IGNhbWxfaW50NjRfdW5tYXJzaGFsLFxuICAgICAgc2VyaWFsaXplICA6IGNhbWxfaW50NjRfbWFyc2hhbCxcbiAgICAgIGZpeGVkX2xlbmd0aCA6IDgsXG4gICAgICBjb21wYXJlIDogY2FtbF9pbnQ2NF9jb21wYXJlLFxuICAgICAgaGFzaCA6IGNhbWxfaW50NjRfaGFzaFxuICAgIH0sXG4gICAgIFwiX2lcIjoge1xuICAgICAgIGRlc2VyaWFsaXplIDogY2FtbF9pbnQzMl91bm1hcnNoYWwsXG4gICAgICAgZml4ZWRfbGVuZ3RoIDogNCxcbiAgICAgfSxcbiAgICAgXCJfblwiOiB7XG4gICAgICAgZGVzZXJpYWxpemUgOiBjYW1sX25hdGl2ZWludF91bm1hcnNoYWwsXG4gICAgICAgZml4ZWRfbGVuZ3RoIDogNCxcbiAgICAgfSxcbiAgICAgXCJfYmlnYXJyYXlcIjp7XG4gICAgICAgZGVzZXJpYWxpemUgOiAoZnVuY3Rpb24gKHJlYWRlciwgc3opIHtyZXR1cm4gY2FtbF9iYV9kZXNlcmlhbGl6ZSAocmVhZGVyLHN6LFwiX2JpZ2FycmF5XCIpfSksXG4gICAgICAgc2VyaWFsaXplIDogY2FtbF9iYV9zZXJpYWxpemUsXG4gICAgICAgY29tcGFyZSA6IGNhbWxfYmFfY29tcGFyZSxcbiAgICAgICBoYXNoOiBjYW1sX2JhX2hhc2gsXG4gICAgIH0sXG4gICAgIFwiX2JpZ2FycjAyXCI6e1xuICAgICAgIGRlc2VyaWFsaXplIDogKGZ1bmN0aW9uIChyZWFkZXIsIHN6KSB7cmV0dXJuIGNhbWxfYmFfZGVzZXJpYWxpemUgKHJlYWRlcixzeixcIl9iaWdhcnIwMlwiKX0pLFxuICAgICAgIHNlcmlhbGl6ZSA6IGNhbWxfYmFfc2VyaWFsaXplLFxuICAgICAgIGNvbXBhcmUgOiBjYW1sX2JhX2NvbXBhcmUsXG4gICAgICAgaGFzaDogY2FtbF9iYV9oYXNoLFxuICAgICB9XG4gICAgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2lucHV0X3ZhbHVlX2Zyb21fcmVhZGVyIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbi8vUmVxdWlyZXM6IGNhbWxfZmxvYXRfb2ZfYnl0ZXMsIGNhbWxfY3VzdG9tX29wc1xuXG5mdW5jdGlvbiBjYW1sX2lucHV0X3ZhbHVlX2Zyb21fcmVhZGVyKHJlYWRlciwgb2ZzKSB7XG4gIHZhciBfbWFnaWMgPSByZWFkZXIucmVhZDMydSAoKVxuICB2YXIgX2Jsb2NrX2xlbiA9IHJlYWRlci5yZWFkMzJ1ICgpO1xuICB2YXIgbnVtX29iamVjdHMgPSByZWFkZXIucmVhZDMydSAoKTtcbiAgdmFyIF9zaXplXzMyID0gcmVhZGVyLnJlYWQzMnUgKCk7XG4gIHZhciBfc2l6ZV82NCA9IHJlYWRlci5yZWFkMzJ1ICgpO1xuICB2YXIgc3RhY2sgPSBbXTtcbiAgdmFyIGludGVybl9vYmpfdGFibGUgPSAobnVtX29iamVjdHMgPiAwKT9bXTpudWxsO1xuICB2YXIgb2JqX2NvdW50ZXIgPSAwO1xuICBmdW5jdGlvbiBpbnRlcm5fcmVjICgpIHtcbiAgICB2YXIgY29kZSA9IHJlYWRlci5yZWFkOHUgKCk7XG4gICAgaWYgKGNvZGUgPj0gMHg0MCAvKmNzdC5QUkVGSVhfU01BTExfSU5UKi8pIHtcbiAgICAgIGlmIChjb2RlID49IDB4ODAgLypjc3QuUFJFRklYX1NNQUxMX0JMT0NLKi8pIHtcbiAgICAgICAgdmFyIHRhZyA9IGNvZGUgJiAweEY7XG4gICAgICAgIHZhciBzaXplID0gKGNvZGUgPj4gNCkgJiAweDc7XG4gICAgICAgIHZhciB2ID0gW3RhZ107XG4gICAgICAgIGlmIChzaXplID09IDApIHJldHVybiB2O1xuICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgIHN0YWNrLnB1c2godiwgc2l6ZSk7XG4gICAgICAgIHJldHVybiB2O1xuICAgICAgfSBlbHNlXG4gICAgICAgIHJldHVybiAoY29kZSAmIDB4M0YpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY29kZSA+PSAweDIwLypjc3QuUFJFRklYX1NNQUxMX1NUUklORyAqLykge1xuICAgICAgICB2YXIgbGVuID0gY29kZSAmIDB4MUY7XG4gICAgICAgIHZhciB2ID0gcmVhZGVyLnJlYWRzdHIgKGxlbik7XG4gICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzd2l0Y2goY29kZSkge1xuICAgICAgICBjYXNlIDB4MDA6IC8vY3N0LkNPREVfSU5UODpcbiAgICAgICAgICByZXR1cm4gcmVhZGVyLnJlYWQ4cyAoKTtcbiAgICAgICAgY2FzZSAweDAxOiAvL2NzdC5DT0RFX0lOVDE2OlxuICAgICAgICAgIHJldHVybiByZWFkZXIucmVhZDE2cyAoKTtcbiAgICAgICAgY2FzZSAweDAyOiAvL2NzdC5DT0RFX0lOVDMyOlxuICAgICAgICAgIHJldHVybiByZWFkZXIucmVhZDMycyAoKTtcbiAgICAgICAgY2FzZSAweDAzOiAvL2NzdC5DT0RFX0lOVDY0OlxuICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogaW50ZWdlciB0b28gbGFyZ2VcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMHgwNDogLy9jc3QuQ09ERV9TSEFSRUQ4OlxuICAgICAgICAgIHZhciBvZmZzZXQgPSByZWFkZXIucmVhZDh1ICgpO1xuICAgICAgICAgIHJldHVybiBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyIC0gb2Zmc2V0XTtcbiAgICAgICAgY2FzZSAweDA1OiAvL2NzdC5DT0RFX1NIQVJFRDE2OlxuICAgICAgICAgIHZhciBvZmZzZXQgPSByZWFkZXIucmVhZDE2dSAoKTtcbiAgICAgICAgICByZXR1cm4gaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlciAtIG9mZnNldF07XG4gICAgICAgIGNhc2UgMHgwNjogLy9jc3QuQ09ERV9TSEFSRUQzMjpcbiAgICAgICAgICB2YXIgb2Zmc2V0ID0gcmVhZGVyLnJlYWQzMnUgKCk7XG4gICAgICAgICAgcmV0dXJuIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIgLSBvZmZzZXRdO1xuICAgICAgICBjYXNlIDB4MDg6IC8vY3N0LkNPREVfQkxPQ0szMjpcbiAgICAgICAgICB2YXIgaGVhZGVyID0gcmVhZGVyLnJlYWQzMnUgKCk7XG4gICAgICAgICAgdmFyIHRhZyA9IGhlYWRlciAmIDB4RkY7XG4gICAgICAgICAgdmFyIHNpemUgPSBoZWFkZXIgPj4gMTA7XG4gICAgICAgICAgdmFyIHYgPSBbdGFnXTtcbiAgICAgICAgICBpZiAoc2l6ZSA9PSAwKSByZXR1cm4gdjtcbiAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgc3RhY2sucHVzaCh2LCBzaXplKTtcbiAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgY2FzZSAweDEzOiAvL2NzdC5DT0RFX0JMT0NLNjQ6XG4gICAgICAgICAgY2FtbF9mYWlsd2l0aCAoXCJpbnB1dF92YWx1ZTogZGF0YSBibG9jayB0b28gbGFyZ2VcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMHgwOTogLy9jc3QuQ09ERV9TVFJJTkc4OlxuICAgICAgICAgIHZhciBsZW4gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgdmFyIHYgPSByZWFkZXIucmVhZHN0ciAobGVuKTtcbiAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIGNhc2UgMHgwQTogLy9jc3QuQ09ERV9TVFJJTkczMjpcbiAgICAgICAgICB2YXIgbGVuID0gcmVhZGVyLnJlYWQzMnUoKTtcbiAgICAgICAgICB2YXIgdiA9IHJlYWRlci5yZWFkc3RyIChsZW4pO1xuICAgICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgY2FzZSAweDBDOiAvL2NzdC5DT0RFX0RPVUJMRV9MSVRUTEU6XG4gICAgICAgICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7O1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwO2kgPCA4O2krKykgdFs3IC0gaV0gPSByZWFkZXIucmVhZDh1ICgpO1xuICAgICAgICAgIHZhciB2ID0gY2FtbF9mbG9hdF9vZl9ieXRlcyAodCk7XG4gICAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICBjYXNlIDB4MEI6IC8vY3N0LkNPREVfRE9VQkxFX0JJRzpcbiAgICAgICAgICB2YXIgdCA9IG5ldyBBcnJheSg4KTs7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7aSA8IDg7aSsrKSB0W2ldID0gcmVhZGVyLnJlYWQ4dSAoKTtcbiAgICAgICAgICB2YXIgdiA9IGNhbWxfZmxvYXRfb2ZfYnl0ZXMgKHQpO1xuICAgICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgY2FzZSAweDBFOiAvL2NzdC5DT0RFX0RPVUJMRV9BUlJBWThfTElUVExFOlxuICAgICAgICAgIHZhciBsZW4gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgdmFyIHYgPSBuZXcgQXJyYXkobGVuKzEpO1xuICAgICAgICAgIHZbMF0gPSAyNTQ7XG4gICAgICAgICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7O1xuICAgICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMTtpIDw9IGxlbjtpKyspIHtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwO2ogPCA4O2orKykgdFs3IC0gal0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgICB2W2ldID0gY2FtbF9mbG9hdF9vZl9ieXRlcyAodCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICBjYXNlIDB4MEQ6IC8vY3N0LkNPREVfRE9VQkxFX0FSUkFZOF9CSUc6XG4gICAgICAgICAgdmFyIGxlbiA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgICAgICB2YXIgdiA9IG5ldyBBcnJheShsZW4rMSk7XG4gICAgICAgICAgdlswXSA9IDI1NDtcbiAgICAgICAgICB2YXIgdCA9IG5ldyBBcnJheSg4KTs7XG4gICAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICAgIGZvciAodmFyIGkgPSAxO2kgPD0gbGVuO2krKykge1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7aiA8IDg7aisrKSB0W2pdID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgICAgICAgdiBbaV0gPSBjYW1sX2Zsb2F0X29mX2J5dGVzICh0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIGNhc2UgMHgwNzogLy9jc3QuQ09ERV9ET1VCTEVfQVJSQVkzMl9MSVRUTEU6XG4gICAgICAgICAgdmFyIGxlbiA9IHJlYWRlci5yZWFkMzJ1KCk7XG4gICAgICAgICAgdmFyIHYgPSBuZXcgQXJyYXkobGVuKzEpO1xuICAgICAgICAgIHZbMF0gPSAyNTQ7XG4gICAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICAgIHZhciB0ID0gbmV3IEFycmF5KDgpOztcbiAgICAgICAgICBmb3IgKHZhciBpID0gMTtpIDw9IGxlbjtpKyspIHtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwO2ogPCA4O2orKykgdFs3IC0gal0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgICB2W2ldID0gY2FtbF9mbG9hdF9vZl9ieXRlcyAodCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICBjYXNlIDB4MEY6IC8vY3N0LkNPREVfRE9VQkxFX0FSUkFZMzJfQklHOlxuICAgICAgICAgIHZhciBsZW4gPSByZWFkZXIucmVhZDMydSgpO1xuICAgICAgICAgIHZhciB2ID0gbmV3IEFycmF5KGxlbisxKTtcbiAgICAgICAgICB2WzBdID0gMjU0O1xuICAgICAgICAgIHZhciB0ID0gbmV3IEFycmF5KDgpOztcbiAgICAgICAgICBmb3IgKHZhciBpID0gMTtpIDw9IGxlbjtpKyspIHtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAwO2ogPCA4O2orKykgdFtqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgICAgICAgIHYgW2ldID0gY2FtbF9mbG9hdF9vZl9ieXRlcyAodCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICBjYXNlIDB4MTA6IC8vY3N0LkNPREVfQ09ERVBPSU5URVI6XG4gICAgICAgIGNhc2UgMHgxMTogLy9jc3QuQ09ERV9JTkZJWFBPSU5URVI6XG4gICAgICAgICAgY2FtbF9mYWlsd2l0aCAoXCJpbnB1dF92YWx1ZTogY29kZSBwb2ludGVyXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDB4MTI6IC8vY3N0LkNPREVfQ1VTVE9NOlxuICAgICAgICBjYXNlIDB4MTg6IC8vY3N0LkNPREVfQ1VTVE9NX0xFTjpcbiAgICAgICAgY2FzZSAweDE5OiAvL2NzdC5DT0RFX0NVU1RPTV9GSVhFRDpcbiAgICAgICAgICB2YXIgYywgcyA9IFwiXCI7XG4gICAgICAgICAgd2hpbGUgKChjID0gcmVhZGVyLnJlYWQ4dSAoKSkgIT0gMCkgcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlIChjKTtcbiAgICAgICAgICB2YXIgb3BzID0gY2FtbF9jdXN0b21fb3BzW3NdO1xuICAgICAgICAgIHZhciBleHBlY3RlZF9zaXplO1xuICAgICAgICAgIGlmKCFvcHMpXG4gICAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IHVua25vd24gY3VzdG9tIGJsb2NrIGlkZW50aWZpZXJcIik7XG4gICAgICAgICAgc3dpdGNoKGNvZGUpe1xuICAgICAgICAgIGNhc2UgMHgxMjogLy8gY3N0LkNPREVfQ1VTVE9NIChkZXByZWNhdGVkKVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAweDE5OiAvLyBjc3QuQ09ERV9DVVNUT01fRklYRURcbiAgICAgICAgICAgIGlmKCFvcHMuZml4ZWRfbGVuZ3RoKVxuICAgICAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IGV4cGVjdGVkIGEgZml4ZWQtc2l6ZSBjdXN0b20gYmxvY2tcIik7XG4gICAgICAgICAgICBleHBlY3RlZF9zaXplID0gb3BzLmZpeGVkX2xlbmd0aDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMHgxODogLy8gY3N0LkNPREVfQ1VTVE9NX0xFTlxuICAgICAgICAgICAgZXhwZWN0ZWRfc2l6ZSA9IHJlYWRlci5yZWFkMzJ1ICgpO1xuICAgICAgICAgICAgLy8gU2tpcCBzaXplNjRcbiAgICAgICAgICAgIHJlYWRlci5yZWFkMzJzKCk7IHJlYWRlci5yZWFkMzJzKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIG9sZF9wb3MgPSByZWFkZXIuaTtcbiAgICAgICAgICB2YXIgc2l6ZSA9IFswXTtcbiAgICAgICAgICB2YXIgdiA9IG9wcy5kZXNlcmlhbGl6ZShyZWFkZXIsIHNpemUpO1xuICAgICAgICAgIGlmKGV4cGVjdGVkX3NpemUgIT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICAgIGlmKGV4cGVjdGVkX3NpemUgIT0gc2l6ZVswXSlcbiAgICAgICAgICAgICAgY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiBpbmNvcnJlY3QgbGVuZ3RoIG9mIHNlcmlhbGl6ZWQgY3VzdG9tIGJsb2NrXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgY2FtbF9mYWlsd2l0aCAoXCJpbnB1dF92YWx1ZTogaWxsLWZvcm1lZCBtZXNzYWdlXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHZhciByZXMgPSBpbnRlcm5fcmVjICgpO1xuICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMCkge1xuICAgIHZhciBzaXplID0gc3RhY2sucG9wKCk7XG4gICAgdmFyIHYgPSBzdGFjay5wb3AoKTtcbiAgICB2YXIgZCA9IHYubGVuZ3RoO1xuICAgIGlmIChkIDwgc2l6ZSkgc3RhY2sucHVzaCh2LCBzaXplKTtcbiAgICB2W2RdID0gaW50ZXJuX3JlYyAoKTtcbiAgfVxuICBpZiAodHlwZW9mIG9mcyE9XCJudW1iZXJcIikgb2ZzWzBdID0gcmVhZGVyLmk7XG4gIHJldHVybiByZXM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWFyc2hhbF9kYXRhX3NpemUgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aCwgY2FtbF9ieXRlc191bnNhZmVfZ2V0XG5mdW5jdGlvbiBjYW1sX21hcnNoYWxfZGF0YV9zaXplIChzLCBvZnMpIHtcbiAgZnVuY3Rpb24gZ2V0MzIocyxpKSB7XG4gICAgcmV0dXJuIChjYW1sX2J5dGVzX3Vuc2FmZV9nZXQocywgaSkgPDwgMjQpIHxcbiAgICAgIChjYW1sX2J5dGVzX3Vuc2FmZV9nZXQocywgaSArIDEpIDw8IDE2KSB8XG4gICAgICAoY2FtbF9ieXRlc191bnNhZmVfZ2V0KHMsIGkgKyAyKSA8PCA4KSB8XG4gICAgICBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQocywgaSArIDMpO1xuICB9XG4gIGlmIChnZXQzMihzLCBvZnMpICE9ICgweDg0OTVBNkJFfDApKVxuICAgIGNhbWxfZmFpbHdpdGgoXCJNYXJzaGFsLmRhdGFfc2l6ZTogYmFkIG9iamVjdFwiKTtcbiAgcmV0dXJuIChnZXQzMihzLCBvZnMgKyA0KSk7XG59XG5cbi8vUHJvdmlkZXM6IE1sT2JqZWN0VGFibGVcbnZhciBNbE9iamVjdFRhYmxlO1xuaWYgKHR5cGVvZiBnbG9iYWxUaGlzLldlYWtNYXAgPT09ICd1bmRlZmluZWQnKSB7XG4gIE1sT2JqZWN0VGFibGUgPSBmdW5jdGlvbigpIHtcbiAgICAvKiBwb2x5ZmlsbCAodXNpbmcgbGluZWFyIHNlYXJjaCkgKi9cbiAgICBmdW5jdGlvbiBOYWl2ZUxvb2t1cChvYmpzKSB7IHRoaXMub2JqcyA9IG9ianM7IH1cbiAgICBOYWl2ZUxvb2t1cC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24odikge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm9ianMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHRoaXMub2Jqc1tpXSA9PT0gdikgcmV0dXJuIGk7XG4gICAgICB9XG4gICAgfTtcbiAgICBOYWl2ZUxvb2t1cC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAvLyBEbyBub3RoaW5nIGhlcmUuIFtNbE9iamVjdFRhYmxlLnN0b3JlXSB3aWxsIHB1c2ggdG8gW3RoaXMub2Jqc10gZGlyZWN0bHkuXG4gICAgfTtcblxuICAgIHJldHVybiBmdW5jdGlvbiBNbE9iamVjdFRhYmxlKCkge1xuICAgICAgdGhpcy5vYmpzID0gW107IHRoaXMubG9va3VwID0gbmV3IE5haXZlTG9va3VwKHRoaXMub2Jqcyk7XG4gICAgfTtcbiAgfSgpO1xufVxuZWxzZSB7XG4gIE1sT2JqZWN0VGFibGUgPSBmdW5jdGlvbiBNbE9iamVjdFRhYmxlKCkge1xuICAgIHRoaXMub2JqcyA9IFtdOyB0aGlzLmxvb2t1cCA9IG5ldyBnbG9iYWxUaGlzLldlYWtNYXAoKTtcbiAgfTtcbn1cblxuTWxPYmplY3RUYWJsZS5wcm90b3R5cGUuc3RvcmUgPSBmdW5jdGlvbih2KSB7XG4gIHRoaXMubG9va3VwLnNldCh2LCB0aGlzLm9ianMubGVuZ3RoKTtcbiAgdGhpcy5vYmpzLnB1c2godik7XG59XG5cbk1sT2JqZWN0VGFibGUucHJvdG90eXBlLnJlY2FsbCA9IGZ1bmN0aW9uKHYpIHtcbiAgdmFyIGkgPSB0aGlzLmxvb2t1cC5nZXQodik7XG4gIHJldHVybiAoaSA9PT0gdW5kZWZpbmVkKVxuICAgID8gdW5kZWZpbmVkIDogdGhpcy5vYmpzLmxlbmd0aCAtIGk7ICAgLyogaW5kZXggaXMgcmVsYXRpdmUgKi9cbn1cblxuLy9Qcm92aWRlczogY2FtbF9sZWdhY3lfY3VzdG9tX2NvZGVcbi8vVmVyc2lvbjogPj0gNC4wOFxudmFyIGNhbWxfbGVnYWN5X2N1c3RvbV9jb2RlID0gZmFsc2VcblxuLy9Qcm92aWRlczogY2FtbF9sZWdhY3lfY3VzdG9tX2NvZGVcbi8vVmVyc2lvbjogPCA0LjA4XG52YXIgY2FtbF9sZWdhY3lfY3VzdG9tX2NvZGUgPSB0cnVlXG5cbi8vUHJvdmlkZXM6IGNhbWxfb3V0cHV0X3ZhbFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF90b19ieXRlcywgY2FtbF9mYWlsd2l0aFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0XG4vL1JlcXVpcmVzOiBjYW1sX2lzX21sX2J5dGVzLCBjYW1sX21sX2J5dGVzX2xlbmd0aCwgY2FtbF9ieXRlc191bnNhZmVfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX2lzX21sX3N0cmluZywgY2FtbF9tbF9zdHJpbmdfbGVuZ3RoLCBjYW1sX3N0cmluZ191bnNhZmVfZ2V0XG4vL1JlcXVpcmVzOiBNbE9iamVjdFRhYmxlLCBjYW1sX2xpc3RfdG9fanNfYXJyYXksIGNhbWxfbGVnYWN5X2N1c3RvbV9jb2RlLCBjYW1sX2N1c3RvbV9vcHNcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudCxjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG52YXIgY2FtbF9vdXRwdXRfdmFsID0gZnVuY3Rpb24gKCl7XG4gIGZ1bmN0aW9uIFdyaXRlciAoKSB7IHRoaXMuY2h1bmsgPSBbXTsgfVxuICBXcml0ZXIucHJvdG90eXBlID0ge1xuICAgIGNodW5rX2lkeDoyMCwgYmxvY2tfbGVuOjAsIG9ial9jb3VudGVyOjAsIHNpemVfMzI6MCwgc2l6ZV82NDowLFxuICAgIHdyaXRlOmZ1bmN0aW9uIChzaXplLCB2YWx1ZSkge1xuICAgICAgZm9yICh2YXIgaSA9IHNpemUgLSA4O2kgPj0gMDtpIC09IDgpXG4gICAgICAgIHRoaXMuY2h1bmtbdGhpcy5jaHVua19pZHgrK10gPSAodmFsdWUgPj4gaSkgJiAweEZGO1xuICAgIH0sXG4gICAgd3JpdGVfYXQ6ZnVuY3Rpb24gKHBvcywgc2l6ZSwgdmFsdWUpIHtcbiAgICAgIHZhciBwb3MgPSBwb3M7XG4gICAgICBmb3IgKHZhciBpID0gc2l6ZSAtIDg7aSA+PSAwO2kgLT0gOClcbiAgICAgICAgdGhpcy5jaHVua1twb3MrK10gPSAodmFsdWUgPj4gaSkgJiAweEZGO1xuICAgIH0sXG4gICAgd3JpdGVfY29kZTpmdW5jdGlvbiAoc2l6ZSwgY29kZSwgdmFsdWUpIHtcbiAgICAgIHRoaXMuY2h1bmtbdGhpcy5jaHVua19pZHgrK10gPSBjb2RlO1xuICAgICAgZm9yICh2YXIgaSA9IHNpemUgLSA4O2kgPj0gMDtpIC09IDgpXG4gICAgICAgIHRoaXMuY2h1bmtbdGhpcy5jaHVua19pZHgrK10gPSAodmFsdWUgPj4gaSkgJiAweEZGO1xuICAgIH0sXG4gICAgd3JpdGVfc2hhcmVkOmZ1bmN0aW9uIChvZmZzZXQpIHtcbiAgICAgIGlmIChvZmZzZXQgPCAoMSA8PCA4KSkgdGhpcy53cml0ZV9jb2RlKDgsIDB4MDQgLypjc3QuQ09ERV9TSEFSRUQ4Ki8sIG9mZnNldCk7XG4gICAgICBlbHNlIGlmIChvZmZzZXQgPCAoMSA8PCAxNikpIHRoaXMud3JpdGVfY29kZSgxNiwgMHgwNSAvKmNzdC5DT0RFX1NIQVJFRDE2Ki8sIG9mZnNldCk7XG4gICAgICBlbHNlIHRoaXMud3JpdGVfY29kZSgzMiwgMHgwNiAvKmNzdC5DT0RFX1NIQVJFRDMyKi8sIG9mZnNldCk7XG4gICAgfSxcbiAgICBwb3M6ZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5jaHVua19pZHggfSxcbiAgICBmaW5hbGl6ZTpmdW5jdGlvbiAoKSB7XG4gICAgICB0aGlzLmJsb2NrX2xlbiA9IHRoaXMuY2h1bmtfaWR4IC0gMjA7XG4gICAgICB0aGlzLmNodW5rX2lkeCA9IDA7XG4gICAgICB0aGlzLndyaXRlICgzMiwgMHg4NDk1QTZCRSk7XG4gICAgICB0aGlzLndyaXRlICgzMiwgdGhpcy5ibG9ja19sZW4pO1xuICAgICAgdGhpcy53cml0ZSAoMzIsIHRoaXMub2JqX2NvdW50ZXIpO1xuICAgICAgdGhpcy53cml0ZSAoMzIsIHRoaXMuc2l6ZV8zMik7XG4gICAgICB0aGlzLndyaXRlICgzMiwgdGhpcy5zaXplXzY0KTtcbiAgICAgIHJldHVybiB0aGlzLmNodW5rO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZnVuY3Rpb24gKHYsIGZsYWdzKSB7XG4gICAgZmxhZ3MgPSBjYW1sX2xpc3RfdG9fanNfYXJyYXkoZmxhZ3MpO1xuXG4gICAgdmFyIG5vX3NoYXJpbmcgPSAoZmxhZ3MuaW5kZXhPZigwIC8qTWFyc2hhbC5Ob19zaGFyaW5nKi8pICE9PSAtMSksXG4gICAgICAgIGNsb3N1cmVzID0gIChmbGFncy5pbmRleE9mKDEgLypNYXJzaGFsLkNsb3N1cmVzKi8pICE9PSAtMSk7XG4gICAgLyogTWFyc2hhbC5Db21wYXRfMzIgaXMgcmVkdW5kYW50IHNpbmNlIGludGVnZXJzIGFyZSAzMi1iaXQgYW55d2F5ICovXG5cbiAgICBpZiAoY2xvc3VyZXMpXG4gICAgICBnbG9iYWxUaGlzLmNvbnNvbGUud2FybihcImluIGNhbWxfb3V0cHV0X3ZhbDogZmxhZyBNYXJzaGFsLkNsb3N1cmVzIGlzIG5vdCBzdXBwb3J0ZWQuXCIpO1xuXG4gICAgdmFyIHdyaXRlciA9IG5ldyBXcml0ZXIgKCk7XG4gICAgdmFyIHN0YWNrID0gW107XG4gICAgdmFyIGludGVybl9vYmpfdGFibGUgPSBub19zaGFyaW5nID8gbnVsbCA6IG5ldyBNbE9iamVjdFRhYmxlKCk7XG5cbiAgICBmdW5jdGlvbiBtZW1vKHYpIHtcbiAgICAgIGlmIChub19zaGFyaW5nKSByZXR1cm4gZmFsc2U7XG4gICAgICB2YXIgZXhpc3Rpbmdfb2Zmc2V0ID0gaW50ZXJuX29ial90YWJsZS5yZWNhbGwodik7XG4gICAgICBpZiAoZXhpc3Rpbmdfb2Zmc2V0KSB7IHdyaXRlci53cml0ZV9zaGFyZWQoZXhpc3Rpbmdfb2Zmc2V0KTsgcmV0dXJuIHRydWU7IH1cbiAgICAgIGVsc2UgeyBpbnRlcm5fb2JqX3RhYmxlLnN0b3JlKHYpOyByZXR1cm4gZmFsc2U7IH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBleHRlcm5fcmVjICh2KSB7XG4gICAgICBpZiAodi5jYW1sX2N1c3RvbSkge1xuICAgICAgICBpZiAobWVtbyh2KSkgcmV0dXJuO1xuICAgICAgICB2YXIgbmFtZSA9IHYuY2FtbF9jdXN0b207XG4gICAgICAgIHZhciBvcHMgPSBjYW1sX2N1c3RvbV9vcHNbbmFtZV07XG4gICAgICAgIHZhciBzel8zMl82NCA9IFswLDBdO1xuICAgICAgICBpZighb3BzLnNlcmlhbGl6ZSlcbiAgICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJvdXRwdXRfdmFsdWU6IGFic3RyYWN0IHZhbHVlIChDdXN0b20pXCIpO1xuICAgICAgICBpZihjYW1sX2xlZ2FjeV9jdXN0b21fY29kZSkge1xuICAgICAgICAgIHdyaXRlci53cml0ZSAoOCwgMHgxMiAvKmNzdC5DT0RFX0NVU1RPTSovKTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWUubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIG5hbWUuY2hhckNvZGVBdChpKSk7XG4gICAgICAgICAgd3JpdGVyLndyaXRlKDgsIDApO1xuICAgICAgICAgIG9wcy5zZXJpYWxpemUod3JpdGVyLCB2LCBzel8zMl82NCk7XG4gICAgICAgIH0gZWxzZSBpZihvcHMuZml4ZWRfbGVuZ3RoID09IHVuZGVmaW5lZCl7XG4gICAgICAgICAgd3JpdGVyLndyaXRlICg4LCAweDE4IC8qY3N0LkNPREVfQ1VTVE9NX0xFTiovKTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWUubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIG5hbWUuY2hhckNvZGVBdChpKSk7XG4gICAgICAgICAgd3JpdGVyLndyaXRlKDgsIDApO1xuICAgICAgICAgIHZhciBoZWFkZXJfcG9zID0gd3JpdGVyLnBvcyAoKTtcbiAgICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgd3JpdGVyLndyaXRlKDgsIDApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvcHMuc2VyaWFsaXplKHdyaXRlciwgdiwgc3pfMzJfNjQpO1xuICAgICAgICAgIHdyaXRlci53cml0ZV9hdChoZWFkZXJfcG9zLCAzMiwgc3pfMzJfNjRbMF0pO1xuICAgICAgICAgIHdyaXRlci53cml0ZV9hdChoZWFkZXJfcG9zICsgNCwgMzIsIDApOyAvLyB6ZXJvXG4gICAgICAgICAgd3JpdGVyLndyaXRlX2F0KGhlYWRlcl9wb3MgKyA4LCAzMiwgc3pfMzJfNjRbMV0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHdyaXRlci53cml0ZSAoOCwgMHgxOSAvKmNzdC5DT0RFX0NVU1RPTV9GSVhFRCovKTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWUubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIG5hbWUuY2hhckNvZGVBdChpKSk7XG4gICAgICAgICAgd3JpdGVyLndyaXRlKDgsIDApO1xuICAgICAgICAgIHZhciBvbGRfcG9zID0gd3JpdGVyLnBvcygpO1xuICAgICAgICAgIG9wcy5zZXJpYWxpemUod3JpdGVyLCB2LCBzel8zMl82NCk7XG4gICAgICAgICAgaWYgKG9wcy5maXhlZF9sZW5ndGggIT0gd3JpdGVyLnBvcygpIC0gb2xkX3BvcylcbiAgICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJvdXRwdXRfdmFsdWU6IGluY29ycmVjdCBmaXhlZCBzaXplcyBzcGVjaWZpZWQgYnkgXCIgKyBuYW1lKTtcbiAgICAgICAgfVxuICAgICAgICB3cml0ZXIuc2l6ZV8zMiArPSAyICsgKChzel8zMl82NFswXSArIDMpID4+IDIpO1xuICAgICAgICB3cml0ZXIuc2l6ZV82NCArPSAyICsgKChzel8zMl82NFsxXSArIDcpID4+IDMpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAodiBpbnN0YW5jZW9mIEFycmF5ICYmIHZbMF0gPT09ICh2WzBdfDApKSB7XG4gICAgICAgIGlmICh2WzBdID09IDI1MSkge1xuICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJvdXRwdXRfdmFsdWU6IGFic3RyYWN0IHZhbHVlIChBYnN0cmFjdClcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHYubGVuZ3RoID4gMSAmJiBtZW1vKHYpKSByZXR1cm47XG4gICAgICAgIGlmICh2WzBdIDwgMTYgJiYgdi5sZW5ndGggLSAxIDwgOClcbiAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIDB4ODAgLypjc3QuUFJFRklYX1NNQUxMX0JMT0NLKi8gKyB2WzBdICsgKCh2Lmxlbmd0aCAtIDEpPDw0KSk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICB3cml0ZXIud3JpdGVfY29kZSgzMiwgMHgwOCAvKmNzdC5DT0RFX0JMT0NLMzIqLywgKCh2Lmxlbmd0aC0xKSA8PCAxMCkgfCB2WzBdKTtcbiAgICAgICAgd3JpdGVyLnNpemVfMzIgKz0gdi5sZW5ndGg7XG4gICAgICAgIHdyaXRlci5zaXplXzY0ICs9IHYubGVuZ3RoO1xuICAgICAgICBpZiAodi5sZW5ndGggPiAxKSBzdGFjay5wdXNoICh2LCAxKTtcbiAgICAgIH0gZWxzZSBpZiAoY2FtbF9pc19tbF9ieXRlcyh2KSkge1xuICAgICAgICBpZighKGNhbWxfaXNfbWxfYnl0ZXMoY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcIlwiKSkpKSB7XG4gICAgICAgICAgY2FtbF9mYWlsd2l0aChcIm91dHB1dF92YWx1ZTogW0J5dGVzLnRdIGNhbm5vdCBzYWZlbHkgYmUgbWFyc2hhbGVkIHdpdGggWy0tZW5hYmxlIHVzZS1qcy1zdHJpbmddXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZW1vKHYpKSByZXR1cm47XG4gICAgICAgIHZhciBsZW4gPSBjYW1sX21sX2J5dGVzX2xlbmd0aCh2KTtcbiAgICAgICAgaWYgKGxlbiA8IDB4MjApXG4gICAgICAgICAgd3JpdGVyLndyaXRlICg4LCAweDIwIC8qY3N0LlBSRUZJWF9TTUFMTF9TVFJJTkcqLyArIGxlbik7XG4gICAgICAgIGVsc2UgaWYgKGxlbiA8IDB4MTAwKVxuICAgICAgICAgIHdyaXRlci53cml0ZV9jb2RlICg4LCAweDA5Lypjc3QuQ09ERV9TVFJJTkc4Ki8sIGxlbik7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICB3cml0ZXIud3JpdGVfY29kZSAoMzIsIDB4MEEgLypjc3QuQ09ERV9TVFJJTkczMiovLCBsZW4pO1xuICAgICAgICBmb3IgKHZhciBpID0gMDtpIDwgbGVuO2krKylcbiAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIGNhbWxfYnl0ZXNfdW5zYWZlX2dldCh2LGkpKTtcbiAgICAgICAgd3JpdGVyLnNpemVfMzIgKz0gMSArICgoKGxlbiArIDQpIC8gNCl8MCk7XG4gICAgICAgIHdyaXRlci5zaXplXzY0ICs9IDEgKyAoKChsZW4gKyA4KSAvIDgpfDApO1xuICAgICAgfSBlbHNlIGlmIChjYW1sX2lzX21sX3N0cmluZyh2KSkge1xuICAgICAgICB2YXIgbGVuID0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHYpO1xuICAgICAgICBpZiAobGVuIDwgMHgyMClcbiAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIDB4MjAgLypjc3QuUFJFRklYX1NNQUxMX1NUUklORyovICsgbGVuKTtcbiAgICAgICAgZWxzZSBpZiAobGVuIDwgMHgxMDApXG4gICAgICAgICAgd3JpdGVyLndyaXRlX2NvZGUgKDgsIDB4MDkvKmNzdC5DT0RFX1NUUklORzgqLywgbGVuKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHdyaXRlci53cml0ZV9jb2RlICgzMiwgMHgwQSAvKmNzdC5DT0RFX1NUUklORzMyKi8sIGxlbik7XG4gICAgICAgIGZvciAodmFyIGkgPSAwO2kgPCBsZW47aSsrKVxuICAgICAgICAgIHdyaXRlci53cml0ZSAoOCwgY2FtbF9zdHJpbmdfdW5zYWZlX2dldCh2LGkpKTtcbiAgICAgICAgd3JpdGVyLnNpemVfMzIgKz0gMSArICgoKGxlbiArIDQpIC8gNCl8MCk7XG4gICAgICAgIHdyaXRlci5zaXplXzY0ICs9IDEgKyAoKChsZW4gKyA4KSAvIDgpfDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHYgIT0gKHZ8MCkpe1xuICAgICAgICAgIHZhciB0eXBlX29mX3YgPSB0eXBlb2YgdjtcbiAgICAgICAgICAvL1xuICAgICAgICAgIC8vIElmIGEgZmxvYXQgaGFwcGVucyB0byBiZSBhbiBpbnRlZ2VyIGl0IGlzIHNlcmlhbGl6ZWQgYXMgYW4gaW50ZWdlclxuICAgICAgICAgIC8vIChKc19vZl9vY2FtbCBjYW5ub3QgdGVsbCB3aGV0aGVyIHRoZSB0eXBlIG9mIGFuIGludGVnZXIgbnVtYmVyIGlzXG4gICAgICAgICAgLy8gZmxvYXQgb3IgaW50ZWdlci4pIFRoaXMgY2FuIHJlc3VsdCBpbiB1bmV4cGVjdGVkIGNyYXNoZXMgd2hlblxuICAgICAgICAgIC8vIHVubWFyc2hhbGxpbmcgdXNpbmcgdGhlIHN0YW5kYXJkIHJ1bnRpbWUuIEl0IHNlZW1zIGJldHRlciB0b1xuICAgICAgICAgIC8vIHN5c3RlbWF0aWNhbGx5IGZhaWwgb24gbWFyc2hhbGxpbmcuXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyAgICAgICAgICBpZih0eXBlX29mX3YgIT0gXCJudW1iZXJcIilcbiAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFwib3V0cHV0X3ZhbHVlOiBhYnN0cmFjdCB2YWx1ZSAoXCIrdHlwZV9vZl92K1wiKVwiKTtcbiAgICAgICAgICAvLyAgICAgICAgICB2YXIgdCA9IGNhbWxfaW50NjRfdG9fYnl0ZXMoY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0KHYpKTtcbiAgICAgICAgICAvLyAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIDB4MEIgLypjc3QuQ09ERV9ET1VCTEVfQklHKi8pO1xuICAgICAgICAgIC8vICAgICAgICAgIGZvcih2YXIgaSA9IDA7IGk8ODsgaSsrKXt3cml0ZXIud3JpdGUoOCx0W2ldKX1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2ID49IDAgJiYgdiA8IDB4NDApIHtcbiAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIDBYNDAgLypjc3QuUFJFRklYX1NNQUxMX0lOVCovICsgdik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHYgPj0gLSgxIDw8IDcpICYmIHYgPCAoMSA8PCA3KSlcbiAgICAgICAgICAgIHdyaXRlci53cml0ZV9jb2RlKDgsIDB4MDAgLypjc3QuQ09ERV9JTlQ4Ki8sIHYpO1xuICAgICAgICAgIGVsc2UgaWYgKHYgPj0gLSgxIDw8IDE1KSAmJiB2IDwgKDEgPDwgMTUpKVxuICAgICAgICAgICAgd3JpdGVyLndyaXRlX2NvZGUoMTYsIDB4MDEgLypjc3QuQ09ERV9JTlQxNiovLCB2KTtcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB3cml0ZXIud3JpdGVfY29kZSgzMiwgMHgwMiAvKmNzdC5DT0RFX0lOVDMyKi8sIHYpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGV4dGVybl9yZWMgKHYpO1xuICAgIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICB2YXIgaSA9IHN0YWNrLnBvcCAoKTtcbiAgICAgIHZhciB2ID0gc3RhY2sucG9wICgpO1xuICAgICAgaWYgKGkgKyAxIDwgdi5sZW5ndGgpIHN0YWNrLnB1c2ggKHYsIGkgKyAxKTtcbiAgICAgIGV4dGVybl9yZWMgKHZbaV0pO1xuICAgIH1cbiAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgd3JpdGVyLm9ial9jb3VudGVyID0gaW50ZXJuX29ial90YWJsZS5vYmpzLmxlbmd0aDtcbiAgICB3cml0ZXIuZmluYWxpemUoKTtcbiAgICByZXR1cm4gd3JpdGVyLmNodW5rO1xuICB9XG59ICgpO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX291dHB1dF92YWx1ZV90b19zdHJpbmcgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9vdXRwdXRfdmFsLCBjYW1sX3N0cmluZ19vZl9hcnJheVxuZnVuY3Rpb24gY2FtbF9vdXRwdXRfdmFsdWVfdG9fc3RyaW5nICh2LCBmbGFncykge1xuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfYXJyYXkgKGNhbWxfb3V0cHV0X3ZhbCAodiwgZmxhZ3MpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vdXRwdXRfdmFsdWVfdG9fYnl0ZXMgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9vdXRwdXRfdmFsLCBjYW1sX2J5dGVzX29mX2FycmF5XG5mdW5jdGlvbiBjYW1sX291dHB1dF92YWx1ZV90b19ieXRlcyAodiwgZmxhZ3MpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfb2ZfYXJyYXkgKGNhbWxfb3V0cHV0X3ZhbCAodiwgZmxhZ3MpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vdXRwdXRfdmFsdWVfdG9fYnVmZmVyXG4vL1JlcXVpcmVzOiBjYW1sX291dHB1dF92YWwsIGNhbWxfZmFpbHdpdGgsIGNhbWxfYmxpdF9ieXRlc1xuZnVuY3Rpb24gY2FtbF9vdXRwdXRfdmFsdWVfdG9fYnVmZmVyIChzLCBvZnMsIGxlbiwgdiwgZmxhZ3MpIHtcbiAgdmFyIHQgPSBjYW1sX291dHB1dF92YWwgKHYsIGZsYWdzKTtcbiAgaWYgKHQubGVuZ3RoID4gbGVuKSBjYW1sX2ZhaWx3aXRoIChcIk1hcnNoYWwudG9fYnVmZmVyOiBidWZmZXIgb3ZlcmZsb3dcIik7XG4gIGNhbWxfYmxpdF9ieXRlcyh0LCAwLCBzLCBvZnMsIHQubGVuZ3RoKTtcbiAgcmV0dXJuIDA7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTQgSsOpcsO0bWUgVm91aWxsb24sIEh1Z28gSGV1emFyZFxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vLy8vLy8vLy8vLy8vIElvXG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2Nsb3NlXG4vL1JlcXVpcmVzOiBjYW1sX2dsb2JhbF9kYXRhXG5mdW5jdGlvbiBjYW1sX3N5c19jbG9zZShmZCkge1xuICBkZWxldGUgY2FtbF9nbG9iYWxfZGF0YS5mZHNbZmRdO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdGRfb3V0cHV0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzLCBjYW1sX21sX3N0cmluZ19sZW5ndGgsIGNhbWxfbWxfY2hhbm5lbHNcbmZ1bmN0aW9uIGNhbWxfc3RkX291dHB1dChjaGFuaWQscyl7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdO1xuICB2YXIgc3RyID0gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhzKTtcbiAgdmFyIHNsZW4gPSBjYW1sX21sX3N0cmluZ19sZW5ndGgoc3RyKTtcbiAgY2hhbi5maWxlLndyaXRlKGNoYW4ub2Zmc2V0LCBzdHIsIDAsIHNsZW4pO1xuICBjaGFuLm9mZnNldCArPSBzbGVuO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfb3BlblxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9zeXNfZXJyb3IsIGNhbWxfZ2xvYmFsX2RhdGFcbi8vUmVxdWlyZXM6IGNhbWxfY3JlYXRlX2J5dGVzLE1sRmFrZUZpbGVcbi8vUmVxdWlyZXM6IGpzX3ByaW50X3N0ZGVyciwganNfcHJpbnRfc3Rkb3V0XG4vL1JlcXVpcmVzOiBjYW1sX3N0ZF9vdXRwdXRcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlXG4vL1JlcXVpcmVzOiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N5c19vcGVuX2ludGVybmFsKGlkeCxvdXRwdXQsZmlsZSxmbGFncykge1xuICBpZihjYW1sX2dsb2JhbF9kYXRhLmZkcyA9PT0gdW5kZWZpbmVkKSBjYW1sX2dsb2JhbF9kYXRhLmZkcyA9IG5ldyBBcnJheSgpO1xuICBmbGFncz1mbGFncz9mbGFnczp7fTtcbiAgdmFyIGluZm8gPSB7fTtcbiAgaW5mby5maWxlID0gZmlsZTtcbiAgaW5mby5vZmZzZXQgPSBmbGFncy5hcHBlbmQ/ZmlsZS5sZW5ndGgoKTowO1xuICBpbmZvLmZsYWdzID0gZmxhZ3M7XG4gIGluZm8ub3V0cHV0ID0gb3V0cHV0O1xuICBjYW1sX2dsb2JhbF9kYXRhLmZkc1tpZHhdID0gaW5mbztcbiAgaWYoIWNhbWxfZ2xvYmFsX2RhdGEuZmRfbGFzdF9pZHggfHwgaWR4ID4gY2FtbF9nbG9iYWxfZGF0YS5mZF9sYXN0X2lkeClcbiAgICBjYW1sX2dsb2JhbF9kYXRhLmZkX2xhc3RfaWR4ID0gaWR4O1xuICByZXR1cm4gaWR4O1xufVxuZnVuY3Rpb24gY2FtbF9zeXNfb3BlbiAobmFtZSwgZmxhZ3MsIF9wZXJtcykge1xuICB2YXIgZiA9IHt9O1xuICB3aGlsZShmbGFncyl7XG4gICAgc3dpdGNoKGZsYWdzWzFdKXtcbiAgICBjYXNlIDA6IGYucmRvbmx5ID0gMTticmVhaztcbiAgICBjYXNlIDE6IGYud3Jvbmx5ID0gMTticmVhaztcbiAgICBjYXNlIDI6IGYuYXBwZW5kID0gMTticmVhaztcbiAgICBjYXNlIDM6IGYuY3JlYXRlID0gMTticmVhaztcbiAgICBjYXNlIDQ6IGYudHJ1bmNhdGUgPSAxO2JyZWFrO1xuICAgIGNhc2UgNTogZi5leGNsID0gMTsgYnJlYWs7XG4gICAgY2FzZSA2OiBmLmJpbmFyeSA9IDE7YnJlYWs7XG4gICAgY2FzZSA3OiBmLnRleHQgPSAxO2JyZWFrO1xuICAgIGNhc2UgODogZi5ub25ibG9jayA9IDE7YnJlYWs7XG4gICAgfVxuICAgIGZsYWdzPWZsYWdzWzJdO1xuICB9XG4gIGlmKGYucmRvbmx5ICYmIGYud3Jvbmx5KVxuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGNhbWxfanNieXRlc19vZl9zdHJpbmcobmFtZSkgKyBcIiA6IGZsYWdzIE9wZW5fcmRvbmx5IGFuZCBPcGVuX3dyb25seSBhcmUgbm90IGNvbXBhdGlibGVcIik7XG4gIGlmKGYudGV4dCAmJiBmLmJpbmFyeSlcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKG5hbWUpICsgXCIgOiBmbGFncyBPcGVuX3RleHQgYW5kIE9wZW5fYmluYXJ5IGFyZSBub3QgY29tcGF0aWJsZVwiKTtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgdmFyIGZpbGUgPSByb290LmRldmljZS5vcGVuKHJvb3QucmVzdCxmKTtcbiAgdmFyIGlkeCA9IGNhbWxfZ2xvYmFsX2RhdGEuZmRfbGFzdF9pZHg/Y2FtbF9nbG9iYWxfZGF0YS5mZF9sYXN0X2lkeDowO1xuICByZXR1cm4gY2FtbF9zeXNfb3Blbl9pbnRlcm5hbCAoaWR4KzEsY2FtbF9zdGRfb3V0cHV0LGZpbGUsZik7XG59XG5jYW1sX3N5c19vcGVuX2ludGVybmFsKDAsY2FtbF9zdGRfb3V0cHV0LCBuZXcgTWxGYWtlRmlsZShjYW1sX2NyZWF0ZV9ieXRlcygwKSkpOyAvL3N0ZGluXG5jYW1sX3N5c19vcGVuX2ludGVybmFsKDEsanNfcHJpbnRfc3Rkb3V0LCBuZXcgTWxGYWtlRmlsZShjYW1sX2NyZWF0ZV9ieXRlcygwKSkpOyAvL3N0ZG91dFxuY2FtbF9zeXNfb3Blbl9pbnRlcm5hbCgyLGpzX3ByaW50X3N0ZGVyciwgbmV3IE1sRmFrZUZpbGUoY2FtbF9jcmVhdGVfYnl0ZXMoMCkpKTsgLy9zdGRlcnJcblxuXG4vLyBvY2FtbCBDaGFubmVsc1xuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3NldF9jaGFubmVsX25hbWVcbmZ1bmN0aW9uIGNhbWxfbWxfc2V0X2NoYW5uZWxfbmFtZSgpIHtcbiAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9jaGFubmVsc1xudmFyIGNhbWxfbWxfY2hhbm5lbHMgPSBuZXcgQXJyYXkoKTtcblxuLy9Qcm92aWRlczogY2FtbF9tbF9vdXRfY2hhbm5lbHNfbGlzdFxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsc1xuZnVuY3Rpb24gY2FtbF9tbF9vdXRfY2hhbm5lbHNfbGlzdCAoKSB7XG4gIHZhciBsID0gMDtcbiAgZm9yKHZhciBjID0gMDsgYyA8IGNhbWxfbWxfY2hhbm5lbHMubGVuZ3RoOyBjKyspe1xuICAgIGlmKGNhbWxfbWxfY2hhbm5lbHNbY10gJiYgY2FtbF9tbF9jaGFubmVsc1tjXS5vcGVuZWQgJiYgY2FtbF9tbF9jaGFubmVsc1tjXS5vdXQpXG4gICAgICBsPVswLGNhbWxfbWxfY2hhbm5lbHNbY10uZmQsbF07XG4gIH1cbiAgcmV0dXJuIGw7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3Jfb3V0XG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxzLCBjYW1sX2dsb2JhbF9kYXRhXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvclxuZnVuY3Rpb24gY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3Jfb3V0IChmZCkge1xuICB2YXIgZGF0YSA9IGNhbWxfZ2xvYmFsX2RhdGEuZmRzW2ZkXTtcbiAgaWYoZGF0YS5mbGFncy5yZG9ubHkpIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKFwiZmQgXCIrIGZkICsgXCIgaXMgcmVhZG9ubHlcIik7XG4gIHZhciBjaGFubmVsID0ge1xuICAgIGZpbGU6ZGF0YS5maWxlLFxuICAgIG9mZnNldDpkYXRhLm9mZnNldCxcbiAgICBmZDpmZCxcbiAgICBvcGVuZWQ6dHJ1ZSxcbiAgICBvdXQ6dHJ1ZSxcbiAgICBidWZmZXI6XCJcIlxuICB9O1xuICBjYW1sX21sX2NoYW5uZWxzW2NoYW5uZWwuZmRdPWNoYW5uZWw7XG4gIHJldHVybiBjaGFubmVsLmZkO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pblxuLy9SZXF1aXJlczogY2FtbF9nbG9iYWxfZGF0YSxjYW1sX3N5c19vcGVuLGNhbWxfcmFpc2Vfc3lzX2Vycm9yLCBjYW1sX21sX2NoYW5uZWxzXG4vL1JlcXVpcmVzOiBmc19ub2RlX3N1cHBvcnRlZCwgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbmZ1bmN0aW9uIGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX2luIChmZCkgIHtcbiAgdmFyIGRhdGEgPSBjYW1sX2dsb2JhbF9kYXRhLmZkc1tmZF07XG4gIGlmKGRhdGEuZmxhZ3Mud3Jvbmx5KSBjYW1sX3JhaXNlX3N5c19lcnJvcihcImZkIFwiKyBmZCArIFwiIGlzIHdyaXRlb25seVwiKTtcbiAgdmFyIHJlZmlsbCA9IG51bGw7XG4gIGlmKGZkID09IDAgJiYgZnNfbm9kZV9zdXBwb3J0ZWQoKSl7XG4gICAgdmFyIGZzID0gcmVxdWlyZSgnZnMnKTtcbiAgICByZWZpbGwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcoZnMucmVhZEZpbGVTeW5jKDAsICd1dGY4JykpfTtcbiAgfVxuICB2YXIgY2hhbm5lbCA9IHtcbiAgICBmaWxlOmRhdGEuZmlsZSxcbiAgICBvZmZzZXQ6ZGF0YS5vZmZzZXQsXG4gICAgZmQ6ZmQsXG4gICAgb3BlbmVkOnRydWUsXG4gICAgb3V0OiBmYWxzZSxcbiAgICByZWZpbGw6cmVmaWxsXG4gIH07XG4gIGNhbWxfbWxfY2hhbm5lbHNbY2hhbm5lbC5mZF09Y2hhbm5lbDtcbiAgcmV0dXJuIGNoYW5uZWwuZmQ7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9jaGFubmVsX2Rlc2NyaXB0b3Jcbi8vUmVxdWlyZXM6IGNhbWxfZ2xvYmFsX2RhdGEsIGNhbWxfbWxfY2hhbm5lbHNcbmZ1bmN0aW9uIGNhbWxfY2hhbm5lbF9kZXNjcmlwdG9yKGNoYW5pZCl7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdO1xuICByZXR1cm4gY2hhbi5mZDtcbn1cblxuLy9Qcm92aWRlczogd2luX2ZpbGVkZXNjcl9vZl9jaGFubmVsXG4vL1JlcXVpcmVzOiBjYW1sX2NoYW5uZWxfZGVzY3JpcHRvclxudmFyIHdpbl9maWxlZGVzY3Jfb2ZfY2hhbm5lbCA9IGNhbWxfY2hhbm5lbF9kZXNjcmlwdG9yXG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc2V0X2JpbmFyeV9tb2RlXG4vL1JlcXVpcmVzOiBjYW1sX2dsb2JhbF9kYXRhLCBjYW1sX21sX2NoYW5uZWxzXG5mdW5jdGlvbiBjYW1sX21sX3NldF9iaW5hcnlfbW9kZShjaGFuaWQsbW9kZSl7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdO1xuICB2YXIgZGF0YSA9IGNhbWxfZ2xvYmFsX2RhdGEuZmRzW2NoYW4uZmRdO1xuICBkYXRhLmZsYWdzLnRleHQgPSAhbW9kZVxuICBkYXRhLmZsYWdzLmJpbmFyeSA9IG1vZGVcbiAgcmV0dXJuIDA7XG59XG5cbi8vSW5wdXQgZnJvbSBpbl9jaGFubmVsXG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfY2xvc2VfY2hhbm5lbFxuLy9SZXF1aXJlczogY2FtbF9tbF9mbHVzaCwgY2FtbF9tbF9jaGFubmVsc1xuLy9SZXF1aXJlczogY2FtbF9zeXNfY2xvc2VcbmZ1bmN0aW9uIGNhbWxfbWxfY2xvc2VfY2hhbm5lbCAoY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdO1xuICBjYW1sX21sX2ZsdXNoKGNoYW5pZCk7XG4gIGNoYW4ub3BlbmVkID0gZmFsc2U7XG4gIGNoYW4uZmlsZS5jbG9zZSgpO1xuICBjYW1sX3N5c19jbG9zZShjaGFuLmZkKVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9jaGFubmVsX3NpemVcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbHNcbmZ1bmN0aW9uIGNhbWxfbWxfY2hhbm5lbF9zaXplKGNoYW5pZCkge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbHNbY2hhbmlkXTtcbiAgcmV0dXJuIGNoYW4uZmlsZS5sZW5ndGgoKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9jaGFubmVsX3NpemVfNjRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2ZfZmxvYXQsY2FtbF9tbF9jaGFubmVsc1xuZnVuY3Rpb24gY2FtbF9tbF9jaGFubmVsX3NpemVfNjQoY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdO1xuICByZXR1cm4gY2FtbF9pbnQ2NF9vZl9mbG9hdChjaGFuLmZpbGUubGVuZ3RoICgpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9zZXRfY2hhbm5lbF9vdXRwdXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbHMsIGNhbWxfZ2xvYmFsX2RhdGFcbmZ1bmN0aW9uIGNhbWxfbWxfc2V0X2NoYW5uZWxfb3V0cHV0KGNoYW5pZCxmKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdO1xuICBjYW1sX2dsb2JhbF9kYXRhLmZkc1tjaGFuLmZkXS5vdXRwdXQgPSBmO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9zZXRfY2hhbm5lbF9yZWZpbGxcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbHMsIGNhbWxfZ2xvYmFsX2RhdGFcbmZ1bmN0aW9uIGNhbWxfbWxfc2V0X2NoYW5uZWxfcmVmaWxsKGNoYW5pZCxmKSB7XG4gIGNhbWxfbWxfY2hhbm5lbHNbY2hhbmlkXS5yZWZpbGwgPSBmO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9yZWZpbGxfaW5wdXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9tbF9yZWZpbGxfaW5wdXQgKGNoYW4pIHtcbiAgdmFyIHN0ciA9IGNoYW4ucmVmaWxsKCk7XG4gIHZhciBzdHJfbGVuID0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHN0cik7XG4gIGlmIChzdHJfbGVuID09IDApIGNoYW4ucmVmaWxsID0gbnVsbDtcbiAgY2hhbi5maWxlLndyaXRlKGNoYW4uZmlsZS5sZW5ndGgoKSwgc3RyLCAwLCBzdHJfbGVuKTtcbiAgcmV0dXJuIHN0cl9sZW47XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfbWF5X3JlZmlsbF9pbnB1dFxuLy9SZXF1aXJlczogY2FtbF9tbF9yZWZpbGxfaW5wdXQsIGNhbWxfbWxfY2hhbm5lbHNcbmZ1bmN0aW9uIGNhbWxfbWxfbWF5X3JlZmlsbF9pbnB1dCAoY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdO1xuICBpZiAoY2hhbi5yZWZpbGwgPT0gbnVsbCkgcmV0dXJuO1xuICBpZiAoY2hhbi5maWxlLmxlbmd0aCgpICE9IGNoYW4ub2Zmc2V0KSByZXR1cm47XG4gIGNhbWxfbWxfcmVmaWxsX2lucHV0IChjaGFuKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9pbnB1dFxuLy9SZXF1aXJlczogY2FtbF9tbF9yZWZpbGxfaW5wdXQsIGNhbWxfbWxfY2hhbm5lbHNcbmZ1bmN0aW9uIGNhbWxfbWxfaW5wdXQgKGNoYW5pZCwgcywgaSwgbCkge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbHNbY2hhbmlkXTtcbiAgdmFyIGwyID0gY2hhbi5maWxlLmxlbmd0aCgpIC0gY2hhbi5vZmZzZXQ7XG4gIGlmIChsMiA9PSAwICYmIGNoYW4ucmVmaWxsICE9IG51bGwpIGwyID0gY2FtbF9tbF9yZWZpbGxfaW5wdXQoY2hhbik7XG4gIGlmIChsMiA8IGwpIGwgPSBsMjtcbiAgY2hhbi5maWxlLnJlYWQoY2hhbi5vZmZzZXQsIHMsIGksIGwpO1xuICBjaGFuLm9mZnNldCArPSBsO1xuICByZXR1cm4gbDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnB1dF92YWx1ZVxuLy9SZXF1aXJlczogY2FtbF9tYXJzaGFsX2RhdGFfc2l6ZSwgY2FtbF9pbnB1dF92YWx1ZV9mcm9tX2J5dGVzLCBjYW1sX2NyZWF0ZV9ieXRlcywgY2FtbF9tbF9jaGFubmVsc1xuZnVuY3Rpb24gY2FtbF9pbnB1dF92YWx1ZSAoY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdO1xuXG4gIHZhciBidWYgPSBjYW1sX2NyZWF0ZV9ieXRlcyg4KTtcbiAgY2hhbi5maWxlLnJlYWQoY2hhbi5vZmZzZXQsYnVmLDAsOCk7XG5cbiAgLy8gSGVhZGVyIGlzIDIwIGJ5dGVzXG4gIHZhciBsZW4gPSBjYW1sX21hcnNoYWxfZGF0YV9zaXplIChidWYsIDApICsgMjA7XG5cbiAgdmFyIGJ1ZiA9IGNhbWxfY3JlYXRlX2J5dGVzKGxlbik7XG4gIGNoYW4uZmlsZS5yZWFkKGNoYW4ub2Zmc2V0LGJ1ZiwwLGxlbik7XG5cbiAgdmFyIG9mZnNldCA9IFswXTtcbiAgdmFyIHJlcyA9IGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9ieXRlcyhidWYsIG9mZnNldCk7XG4gIGNoYW4ub2Zmc2V0ID0gY2hhbi5vZmZzZXQgKyBvZmZzZXRbMF07XG4gIHJldHVybiByZXM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfaW5wdXRfY2hhclxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9lbmRfb2ZfZmlsZSwgY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9tbF9tYXlfcmVmaWxsX2lucHV0LCBjYW1sX21sX2NoYW5uZWxzXG5mdW5jdGlvbiBjYW1sX21sX2lucHV0X2NoYXIgKGNoYW5pZCkge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbHNbY2hhbmlkXTtcbiAgY2FtbF9tbF9tYXlfcmVmaWxsX2lucHV0KGNoYW5pZCk7XG4gIGlmIChjaGFuLm9mZnNldCA+PSBjaGFuLmZpbGUubGVuZ3RoKCkpXG4gICAgY2FtbF9yYWlzZV9lbmRfb2ZfZmlsZSgpO1xuICB2YXIgcmVzID0gY2hhbi5maWxlLnJlYWRfb25lKGNoYW4ub2Zmc2V0KTtcbiAgY2hhbi5vZmZzZXQrKztcbiAgcmV0dXJuIHJlcztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9pbnB1dF9pbnRcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2VfZW5kX29mX2ZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfbWxfcmVmaWxsX2lucHV0LCBjYW1sX21sX2NoYW5uZWxzXG5mdW5jdGlvbiBjYW1sX21sX2lucHV0X2ludCAoY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdO1xuICB2YXIgZmlsZSA9IGNoYW4uZmlsZTtcbiAgd2hpbGUgKChjaGFuLm9mZnNldCArIDMpID49IGZpbGUubGVuZ3RoKCkpIHtcbiAgICB2YXIgbCA9IGNhbWxfbWxfcmVmaWxsX2lucHV0KGNoYW4pO1xuICAgIGlmIChsID09IDApIGNhbWxfcmFpc2VfZW5kX29mX2ZpbGUoKTtcbiAgfVxuICB2YXIgbyA9IGNoYW4ub2Zmc2V0O1xuICB2YXIgciA9KGZpbGUucmVhZF9vbmUobyAgKSA8PCAyNClcbiAgICAgIHwgIChmaWxlLnJlYWRfb25lKG8rMSkgPDwgMTYpXG4gICAgICB8ICAoZmlsZS5yZWFkX29uZShvKzIpIDw8IDgpXG4gICAgICB8ICAoZmlsZS5yZWFkX29uZShvKzMpKTtcbiAgY2hhbi5vZmZzZXQrPTQ7XG4gIHJldHVybiByO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3NlZWtfaW5cbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yLCBjYW1sX21sX2NoYW5uZWxzXG5mdW5jdGlvbiBjYW1sX21sX3NlZWtfaW4oY2hhbmlkLHBvcyl7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdO1xuICBpZiAoY2hhbi5yZWZpbGwgIT0gbnVsbCkgY2FtbF9yYWlzZV9zeXNfZXJyb3IoXCJJbGxlZ2FsIHNlZWtcIik7XG4gIGNoYW4ub2Zmc2V0ID0gcG9zO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9zZWVrX2luXzY0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X3RvX2Zsb2F0LCBjYW1sX3JhaXNlX3N5c19lcnJvciwgY2FtbF9tbF9jaGFubmVsc1xuZnVuY3Rpb24gY2FtbF9tbF9zZWVrX2luXzY0KGNoYW5pZCxwb3Mpe1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbHNbY2hhbmlkXTtcbiAgaWYgKGNoYW4ucmVmaWxsICE9IG51bGwpIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKFwiSWxsZWdhbCBzZWVrXCIpO1xuICBjaGFuLm9mZnNldCA9IGNhbWxfaW50NjRfdG9fZmxvYXQocG9zKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfcG9zX2luXG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxzXG5mdW5jdGlvbiBjYW1sX21sX3Bvc19pbihjaGFuaWQpIHtyZXR1cm4gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdLm9mZnNldH1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9wb3NfaW5fNjRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2ZfZmxvYXQsIGNhbWxfbWxfY2hhbm5lbHNcbmZ1bmN0aW9uIGNhbWxfbWxfcG9zX2luXzY0KGNoYW5pZCkge3JldHVybiBjYW1sX2ludDY0X29mX2Zsb2F0KGNhbWxfbWxfY2hhbm5lbHNbY2hhbmlkXS5vZmZzZXQpfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2lucHV0X3NjYW5fbGluZVxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9tbF9tYXlfcmVmaWxsX2lucHV0LCBjYW1sX21sX2NoYW5uZWxzXG5mdW5jdGlvbiBjYW1sX21sX2lucHV0X3NjYW5fbGluZShjaGFuaWQpe1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbHNbY2hhbmlkXTtcbiAgY2FtbF9tbF9tYXlfcmVmaWxsX2lucHV0KGNoYW5pZCk7XG4gIHZhciBwID0gY2hhbi5vZmZzZXQ7XG4gIHZhciBsZW4gPSBjaGFuLmZpbGUubGVuZ3RoKCk7XG4gIGlmKHAgPj0gbGVuKSB7IHJldHVybiAwO31cbiAgd2hpbGUodHJ1ZSkge1xuICAgIGlmKHAgPj0gbGVuKSByZXR1cm4gLSAocCAtIGNoYW4ub2Zmc2V0KTtcbiAgICBpZihjaGFuLmZpbGUucmVhZF9vbmUocCkgPT0gMTApIHJldHVybiBwIC0gY2hhbi5vZmZzZXQgKyAxO1xuICAgIHArKztcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2ZsdXNoXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvciwgY2FtbF9nbG9iYWxfZGF0YSwgY2FtbF9tbF9jaGFubmVsc1xuZnVuY3Rpb24gY2FtbF9tbF9mbHVzaCAoY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdO1xuICBpZighIGNoYW4ub3BlbmVkKSBjYW1sX3JhaXNlX3N5c19lcnJvcihcIkNhbm5vdCBmbHVzaCBhIGNsb3NlZCBjaGFubmVsXCIpO1xuICBpZighY2hhbi5idWZmZXIgfHwgY2hhbi5idWZmZXIgPT0gXCJcIikgcmV0dXJuIDA7XG4gIGlmKGNoYW4uZmRcbiAgICAgJiYgY2FtbF9nbG9iYWxfZGF0YS5mZHNbY2hhbi5mZF1cbiAgICAgJiYgY2FtbF9nbG9iYWxfZGF0YS5mZHNbY2hhbi5mZF0ub3V0cHV0KSB7XG4gICAgdmFyIG91dHB1dCA9IGNhbWxfZ2xvYmFsX2RhdGEuZmRzW2NoYW4uZmRdLm91dHB1dDtcbiAgICBzd2l0Y2gob3V0cHV0Lmxlbmd0aCl7XG4gICAgY2FzZSAyOiBvdXRwdXQoY2hhbmlkLGNoYW4uYnVmZmVyKTticmVhaztcbiAgICBkZWZhdWx0OiBvdXRwdXQoY2hhbi5idWZmZXIpXG4gICAgfTtcbiAgfVxuICBjaGFuLmJ1ZmZlciA9IFwiXCI7XG4gIHJldHVybiAwO1xufVxuXG4vL291dHB1dCB0byBvdXRfY2hhbm5lbFxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX291dHB1dF9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9tbF9mbHVzaCxjYW1sX21sX2J5dGVzX2xlbmd0aFxuLy9SZXF1aXJlczogY2FtbF9jcmVhdGVfYnl0ZXMsIGNhbWxfYmxpdF9ieXRlcywgY2FtbF9yYWlzZV9zeXNfZXJyb3IsIGNhbWxfbWxfY2hhbm5lbHMsIGNhbWxfc3RyaW5nX29mX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX21sX291dHB1dF9ieXRlcyhjaGFuaWQsYnVmZmVyLG9mZnNldCxsZW4pIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxzW2NoYW5pZF07XG4gIGlmKCEgY2hhbi5vcGVuZWQpIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKFwiQ2Fubm90IG91dHB1dCB0byBhIGNsb3NlZCBjaGFubmVsXCIpO1xuICB2YXIgYnl0ZXM7XG4gIGlmKG9mZnNldCA9PSAwICYmIGNhbWxfbWxfYnl0ZXNfbGVuZ3RoKGJ1ZmZlcikgPT0gbGVuKVxuICAgIGJ5dGVzID0gYnVmZmVyO1xuICBlbHNlIHtcbiAgICBieXRlcyA9IGNhbWxfY3JlYXRlX2J5dGVzKGxlbik7XG4gICAgY2FtbF9ibGl0X2J5dGVzKGJ1ZmZlcixvZmZzZXQsYnl0ZXMsMCxsZW4pO1xuICB9XG4gIHZhciBzdHJpbmcgPSBjYW1sX3N0cmluZ19vZl9ieXRlcyhieXRlcyk7XG4gIHZhciBqc3N0cmluZyA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcoc3RyaW5nKTtcbiAgdmFyIGlkID0ganNzdHJpbmcubGFzdEluZGV4T2YoXCJcXG5cIik7XG4gIGlmKGlkIDwgMClcbiAgICBjaGFuLmJ1ZmZlcis9anNzdHJpbmc7XG4gIGVsc2Uge1xuICAgIGNoYW4uYnVmZmVyKz1qc3N0cmluZy5zdWJzdHIoMCxpZCsxKTtcbiAgICBjYW1sX21sX2ZsdXNoIChjaGFuaWQpO1xuICAgIGNoYW4uYnVmZmVyICs9IGpzc3RyaW5nLnN1YnN0cihpZCsxKTtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9vdXRwdXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfb3V0cHV0X2J5dGVzLCBjYW1sX2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9tbF9vdXRwdXQoY2hhbmlkLGJ1ZmZlcixvZmZzZXQsbGVuKXtcbiAgcmV0dXJuIGNhbWxfbWxfb3V0cHV0X2J5dGVzKGNoYW5pZCxjYW1sX2J5dGVzX29mX3N0cmluZyhidWZmZXIpLG9mZnNldCxsZW4pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX291dHB1dF9jaGFyXG4vL1JlcXVpcmVzOiBjYW1sX21sX291dHB1dFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9tbF9vdXRwdXRfY2hhciAoY2hhbmlkLGMpIHtcbiAgdmFyIHMgPSBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKFN0cmluZy5mcm9tQ2hhckNvZGUoYykpO1xuICBjYW1sX21sX291dHB1dChjaGFuaWQscywwLDEpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vdXRwdXRfdmFsdWVcbi8vUmVxdWlyZXM6IGNhbWxfb3V0cHV0X3ZhbHVlX3RvX3N0cmluZywgY2FtbF9tbF9vdXRwdXQsY2FtbF9tbF9zdHJpbmdfbGVuZ3RoXG5mdW5jdGlvbiBjYW1sX291dHB1dF92YWx1ZSAoY2hhbmlkLHYsZmxhZ3MpIHtcbiAgdmFyIHMgPSBjYW1sX291dHB1dF92YWx1ZV90b19zdHJpbmcodiwgZmxhZ3MpO1xuICBjYW1sX21sX291dHB1dChjaGFuaWQscywwLGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSk7XG4gIHJldHVybiAwO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc2Vla19vdXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbHMsIGNhbWxfbWxfZmx1c2hcbmZ1bmN0aW9uIGNhbWxfbWxfc2Vla19vdXQoY2hhbmlkLHBvcyl7XG4gIGNhbWxfbWxfZmx1c2goY2hhbmlkKTtcbiAgY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdLm9mZnNldCA9IHBvcztcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc2Vla19vdXRfNjRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfdG9fZmxvYXQsIGNhbWxfbWxfY2hhbm5lbHMsIGNhbWxfbWxfZmx1c2hcbmZ1bmN0aW9uIGNhbWxfbWxfc2Vla19vdXRfNjQoY2hhbmlkLHBvcyl7XG4gIGNhbWxfbWxfZmx1c2goY2hhbmlkKTtcbiAgY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdLm9mZnNldCA9IGNhbWxfaW50NjRfdG9fZmxvYXQocG9zKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfcG9zX291dFxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVscywgY2FtbF9tbF9mbHVzaFxuZnVuY3Rpb24gY2FtbF9tbF9wb3Nfb3V0KGNoYW5pZCkge1xuICBjYW1sX21sX2ZsdXNoKGNoYW5pZCk7XG4gIHJldHVybiBjYW1sX21sX2NoYW5uZWxzW2NoYW5pZF0ub2Zmc2V0XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfcG9zX291dF82NFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZl9mbG9hdCwgY2FtbF9tbF9jaGFubmVscywgY2FtbF9tbF9mbHVzaFxuZnVuY3Rpb24gY2FtbF9tbF9wb3Nfb3V0XzY0KGNoYW5pZCkge1xuICBjYW1sX21sX2ZsdXNoKGNoYW5pZCk7XG4gIHJldHVybiBjYW1sX2ludDY0X29mX2Zsb2F0IChjYW1sX21sX2NoYW5uZWxzW2NoYW5pZF0ub2Zmc2V0KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9vdXRwdXRfaW50XG4vL1JlcXVpcmVzOiBjYW1sX21sX291dHB1dFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfYXJyYXlcbmZ1bmN0aW9uIGNhbWxfbWxfb3V0cHV0X2ludCAoY2hhbmlkLGkpIHtcbiAgdmFyIGFyciA9IFsoaT4+MjQpICYgMHhGRiwoaT4+MTYpICYgMHhGRiwoaT4+OCkgJiAweEZGLGkgJiAweEZGIF07XG4gIHZhciBzID0gY2FtbF9zdHJpbmdfb2ZfYXJyYXkoYXJyKTtcbiAgY2FtbF9tbF9vdXRwdXQoY2hhbmlkLHMsMCw0KTtcbiAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9pc19idWZmZXJlZFxuZnVuY3Rpb24gY2FtbF9tbF9pc19idWZmZXJlZChjKSB7IHJldHVybiAxIH1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9zZXRfYnVmZmVyZWRcbmZ1bmN0aW9uIGNhbWxfbWxfc2V0X2J1ZmZlcmVkKGMsdikgeyByZXR1cm4gMCB9XG4iLCJcblxuLy9Qcm92aWRlczogY2FtbF9nY19taW5vclxuZnVuY3Rpb24gY2FtbF9nY19taW5vcigpeyByZXR1cm4gMH1cbi8vUHJvdmlkZXM6IGNhbWxfZ2NfbWFqb3JcbmZ1bmN0aW9uIGNhbWxfZ2NfbWFqb3IoKXsgcmV0dXJuIDB9XG4vL1Byb3ZpZGVzOiBjYW1sX2djX2Z1bGxfbWFqb3JcbmZ1bmN0aW9uIGNhbWxfZ2NfZnVsbF9tYWpvcigpeyByZXR1cm4gMH1cbi8vUHJvdmlkZXM6IGNhbWxfZ2NfY29tcGFjdGlvblxuZnVuY3Rpb24gY2FtbF9nY19jb21wYWN0aW9uKCl7IHJldHVybiAwfVxuLy9Qcm92aWRlczogY2FtbF9nY19jb3VudGVyc1xuZnVuY3Rpb24gY2FtbF9nY19jb3VudGVycygpIHsgcmV0dXJuIFsyNTQsMCwwLDBdIH1cbi8vUHJvdmlkZXM6IGNhbWxfZ2NfcXVpY2tfc3RhdFxuZnVuY3Rpb24gY2FtbF9nY19xdWlja19zdGF0KCl7XG4gIHJldHVybiBbMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwXVxufVxuLy9Qcm92aWRlczogY2FtbF9nY19zdGF0XG5mdW5jdGlvbiBjYW1sX2djX3N0YXQoKSB7XG4gIHJldHVybiBbMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwXVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2djX3NldFxuZnVuY3Rpb24gY2FtbF9nY19zZXQoX2NvbnRyb2wpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ2NfZ2V0XG5mdW5jdGlvbiBjYW1sX2djX2dldCgpe1xuICByZXR1cm4gWzAsMCwwLDAsMCwwLDAsMCwwXVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21lbXByb2Zfc2V0XG5mdW5jdGlvbiBjYW1sX21lbXByb2Zfc2V0KF9jb250cm9sKSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ZpbmFsX3JlZ2lzdGVyIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ZpbmFsX3JlZ2lzdGVyICgpIHsgcmV0dXJuIDA7IH1cbi8vUHJvdmlkZXM6IGNhbWxfZmluYWxfcmVnaXN0ZXJfY2FsbGVkX3dpdGhvdXRfdmFsdWUgY29uc3RcbmZ1bmN0aW9uIGNhbWxfZmluYWxfcmVnaXN0ZXJfY2FsbGVkX3dpdGhvdXRfdmFsdWUgKCkgeyByZXR1cm4gMDsgfVxuLy9Qcm92aWRlczogY2FtbF9maW5hbF9yZWxlYXNlIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ZpbmFsX3JlbGVhc2UgKCkgeyByZXR1cm4gMDsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21lbXByb2Zfc3RhcnRcbmZ1bmN0aW9uIGNhbWxfbWVtcHJvZl9zdGFydChyYXRlLHN0YWNrX3NpemUsdHJhY2tlcil7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21lbXByb2Zfc3RvcFxuZnVuY3Rpb24gY2FtbF9tZW1wcm9mX3N0b3AodW5pdCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ldmVudGxvZ19yZXN1bWVcbmZ1bmN0aW9uIGNhbWxfZXZlbnRsb2dfcmVzdW1lKHVuaXQpIHsgcmV0dXJuIDA7IH1cblxuLy9Qcm92aWRlczogY2FtbF9ldmVudGxvZ19wYXVzZVxuZnVuY3Rpb24gY2FtbF9ldmVudGxvZ19wYXVzZSh1bml0KSB7IHJldHVybiAwOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ2NfaHVnZV9mYWxsYmFja19jb3VudFxuZnVuY3Rpb24gY2FtbF9nY19odWdlX2ZhbGxiYWNrX2NvdW50KHVuaXQpIHsgcmV0dXJuIDA7IH1cblxuLy9Qcm92aWRlczogY2FtbF9nY19tYWpvcl9zbGljZVxuZnVuY3Rpb24gY2FtbF9nY19tYWpvcl9zbGljZSh3b3JrKSB7IHJldHVybiAwOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ2NfbWlub3Jfd29yZHNcbmZ1bmN0aW9uIGNhbWxfZ2NfbWlub3Jfd29yZHModW5pdCkgeyByZXR1cm4gMDsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dldF9taW5vcl9mcmVlXG5mdW5jdGlvbiBjYW1sX2dldF9taW5vcl9mcmVlKHVuaXQpIHsgcmV0dXJuIDA7IH1cblxuLy9Qcm92aWRlczogY2FtbF9nZXRfbWFqb3JfYnVja2V0XG5mdW5jdGlvbiBjYW1sX2dldF9tYWpvcl9idWNrZXQobikgeyByZXR1cm4gMDsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dldF9tYWpvcl9jcmVkaXRcbmZ1bmN0aW9uIGNhbWxfZ2V0X21ham9yX2NyZWRpdChuKSB7IHJldHVybiAwOyB9XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTQgSsOpcsO0bWUgVm91aWxsb24sIEh1Z28gSGV1emFyZCwgQW5keSBSYXlcbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cbi8vXG4vLyBCaWdhcnJheS5cbi8vXG4vLyAtIGFsbCBiaWdhcnJheSB0eXBlcyBpbmNsdWRpbmcgSW50NjQgYW5kIENvbXBsZXguXG4vLyAtIGZvcnRyYW4gKyBjIGxheW91dHNcbi8vIC0gc3ViL3NsaWNlL3Jlc2hhcGVcbi8vIC0gcmV0YWluIGZhc3QgcGF0aCBmb3IgMWQgYXJyYXkgYWNjZXNzXG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfaW5pdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9iYV9pbml0KCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9nZXRfc2l6ZVxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX2JhX2dldF9zaXplKGRpbXMpIHtcbiAgdmFyIG5fZGltcyA9IGRpbXMubGVuZ3RoO1xuICB2YXIgc2l6ZSA9IDE7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbl9kaW1zOyBpKyspIHtcbiAgICBpZiAoZGltc1tpXSA8IDApXG4gICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5jcmVhdGU6IG5lZ2F0aXZlIGRpbWVuc2lvblwiKTtcbiAgICBzaXplID0gc2l6ZSAqIGRpbXNbaV07XG4gIH1cbiAgcmV0dXJuIHNpemU7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnQoa2luZCl7XG4gIHN3aXRjaChraW5kKXtcbiAgY2FzZSA3OiBjYXNlIDEwOiBjYXNlIDExOiByZXR1cm4gMjtcbiAgZGVmYXVsdDogcmV0dXJuIDE7XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9jcmVhdGVfYnVmZmVyXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50XG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfY3JlYXRlX2J1ZmZlcihraW5kLCBzaXplKXtcbiAgdmFyIGcgPSBnbG9iYWxUaGlzO1xuICB2YXIgdmlldztcbiAgc3dpdGNoKGtpbmQpe1xuICBjYXNlIDA6ICB2aWV3ID0gZy5GbG9hdDMyQXJyYXk7IGJyZWFrO1xuICBjYXNlIDE6ICB2aWV3ID0gZy5GbG9hdDY0QXJyYXk7IGJyZWFrO1xuICBjYXNlIDI6ICB2aWV3ID0gZy5JbnQ4QXJyYXk7IGJyZWFrO1xuICBjYXNlIDM6ICB2aWV3ID0gZy5VaW50OEFycmF5OyBicmVhaztcbiAgY2FzZSA0OiAgdmlldyA9IGcuSW50MTZBcnJheTsgYnJlYWs7XG4gIGNhc2UgNTogIHZpZXcgPSBnLlVpbnQxNkFycmF5OyBicmVhaztcbiAgY2FzZSA2OiAgdmlldyA9IGcuSW50MzJBcnJheTsgYnJlYWs7XG4gIGNhc2UgNzogIHZpZXcgPSBnLkludDMyQXJyYXk7IGJyZWFrO1xuICBjYXNlIDg6ICB2aWV3ID0gZy5JbnQzMkFycmF5OyBicmVhaztcbiAgY2FzZSA5OiAgdmlldyA9IGcuSW50MzJBcnJheTsgYnJlYWs7XG4gIGNhc2UgMTA6IHZpZXcgPSBnLkZsb2F0MzJBcnJheTsgYnJlYWs7XG4gIGNhc2UgMTE6IHZpZXcgPSBnLkZsb2F0NjRBcnJheTsgYnJlYWs7XG4gIGNhc2UgMTI6IHZpZXcgPSBnLlVpbnQ4QXJyYXk7IGJyZWFrO1xuICB9XG4gIGlmICghdmlldykgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkuY3JlYXRlOiB1bnN1cHBvcnRlZCBraW5kXCIpO1xuICB2YXIgZGF0YSA9IG5ldyB2aWV3KHNpemUgKiBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50KGtpbmQpKTtcbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfY3VzdG9tX25hbWVcbi8vVmVyc2lvbjogPCA0LjExXG52YXIgY2FtbF9iYV9jdXN0b21fbmFtZSA9IFwiX2JpZ2FycmF5XCJcblxuLy9Qcm92aWRlczogY2FtbF9iYV9jdXN0b21fbmFtZVxuLy9WZXJzaW9uOiA+PSA0LjExXG52YXIgY2FtbF9iYV9jdXN0b21fbmFtZSA9IFwiX2JpZ2FycjAyXCJcblxuLy9Qcm92aWRlczogTWxfQmlnYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3IsIGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9iYV9jdXN0b21fbmFtZVxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9jcmVhdGVfbG9faGksIGNhbWxfaW50NjRfaGkzMiwgY2FtbF9pbnQ2NF9sbzMyXG5mdW5jdGlvbiBNbF9CaWdhcnJheSAoa2luZCwgbGF5b3V0LCBkaW1zLCBidWZmZXIpIHtcblxuICB0aGlzLmtpbmQgICA9IGtpbmQgO1xuICB0aGlzLmxheW91dCA9IGxheW91dDtcbiAgdGhpcy5kaW1zICAgPSBkaW1zO1xuICB0aGlzLmRhdGEgPSBidWZmZXI7XG59XG5cbk1sX0JpZ2FycmF5LnByb3RvdHlwZS5jYW1sX2N1c3RvbSA9IGNhbWxfYmFfY3VzdG9tX25hbWU7XG5cbk1sX0JpZ2FycmF5LnByb3RvdHlwZS5vZmZzZXQgPSBmdW5jdGlvbiAoYXJnKSB7XG4gIHZhciBvZnMgPSAwO1xuICBpZih0eXBlb2YgYXJnID09PSBcIm51bWJlclwiKSBhcmcgPSBbYXJnXTtcbiAgaWYgKCEgKGFyZyBpbnN0YW5jZW9mIEFycmF5KSkgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiYmlnYXJyYXkuanM6IGludmFsaWQgb2Zmc2V0XCIpO1xuICBpZiAodGhpcy5kaW1zLmxlbmd0aCAhPSBhcmcubGVuZ3RoKVxuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LmdldC9zZXQ6IGJhZCBudW1iZXIgb2YgZGltZW5zaW9uc1wiKTtcbiAgaWYodGhpcy5sYXlvdXQgPT0gMCAvKiBjX2xheW91dCAqLykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5kaW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoYXJnW2ldIDwgMCB8fCBhcmdbaV0gPj0gdGhpcy5kaW1zW2ldKVxuICAgICAgICBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gICAgICBvZnMgPSAob2ZzICogdGhpcy5kaW1zW2ldKSArIGFyZ1tpXTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgaSA9IHRoaXMuZGltcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgaWYgKGFyZ1tpXSA8IDEgfHwgYXJnW2ldID4gdGhpcy5kaW1zW2ldKXtcbiAgICAgICAgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICAgICAgfVxuICAgICAgb2ZzID0gKG9mcyAqIHRoaXMuZGltc1tpXSkgKyAoYXJnW2ldIC0gMSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvZnM7XG59XG5cbk1sX0JpZ2FycmF5LnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAob2ZzKSB7XG4gIHN3aXRjaCh0aGlzLmtpbmQpe1xuICBjYXNlIDc6XG4gICAgLy8gSW50NjRcbiAgICB2YXIgbCA9IHRoaXMuZGF0YVtvZnMgKiAyICsgMF07XG4gICAgdmFyIGggPSB0aGlzLmRhdGFbb2ZzICogMiArIDFdO1xuICAgIHJldHVybiBjYW1sX2ludDY0X2NyZWF0ZV9sb19oaShsLGgpO1xuICBjYXNlIDEwOiBjYXNlIDExOlxuICAgIC8vIENvbXBsZXgzMiwgQ29tcGxleDY0XG4gICAgdmFyIHIgPSB0aGlzLmRhdGFbb2ZzICogMiArIDBdO1xuICAgIHZhciBpID0gdGhpcy5kYXRhW29mcyAqIDIgKyAxXTtcbiAgICByZXR1cm4gWzI1NCwgciwgaV07XG4gIGRlZmF1bHQ6XG4gICAgcmV0dXJuIHRoaXMuZGF0YVtvZnNdXG4gIH1cbn1cblxuTWxfQmlnYXJyYXkucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChvZnMsdikge1xuICBzd2l0Y2godGhpcy5raW5kKXtcbiAgY2FzZSA3OlxuICAgIC8vIEludDY0XG4gICAgdGhpcy5kYXRhW29mcyAqIDIgKyAwXSA9IGNhbWxfaW50NjRfbG8zMih2KTtcbiAgICB0aGlzLmRhdGFbb2ZzICogMiArIDFdID0gY2FtbF9pbnQ2NF9oaTMyKHYpO1xuICAgIGJyZWFrO1xuICBjYXNlIDEwOiBjYXNlIDExOlxuICAgIC8vIENvbXBsZXgzMiwgQ29tcGxleDY0XG4gICAgdGhpcy5kYXRhW29mcyAqIDIgKyAwXSA9IHZbMV07XG4gICAgdGhpcy5kYXRhW29mcyAqIDIgKyAxXSA9IHZbMl07XG4gICAgYnJlYWs7XG4gIGRlZmF1bHQ6XG4gICAgdGhpcy5kYXRhW29mc10gPSB2O1xuICAgIGJyZWFrO1xuICB9XG4gIHJldHVybiAwXG59XG5cblxuTWxfQmlnYXJyYXkucHJvdG90eXBlLmZpbGwgPSBmdW5jdGlvbiAodikge1xuICBzd2l0Y2godGhpcy5raW5kKXtcbiAgY2FzZSA3OlxuICAgIC8vIEludDY0XG4gICAgdmFyIGEgPSBjYW1sX2ludDY0X2xvMzIodik7XG4gICAgdmFyIGIgPSBjYW1sX2ludDY0X2hpMzIodik7XG4gICAgaWYoYSA9PSBiKXtcbiAgICAgIHRoaXMuZGF0YS5maWxsKGEpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGZvcih2YXIgaSA9IDA7IGk8dGhpcy5kYXRhLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgdGhpcy5kYXRhW2ldID0gKGklMiA9PSAwKSA/IGEgOiBiO1xuICAgICAgfVxuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAxMDogY2FzZSAxMTpcbiAgICAvLyBDb21wbGV4MzIsIENvbXBsZXg2NFxuICAgIHZhciBpbSA9IHZbMV07XG4gICAgdmFyIHJlID0gdlsyXTtcbiAgICBpZihpbSA9PSByZSl7XG4gICAgICB0aGlzLmRhdGEuZmlsbChpbSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgZm9yKHZhciBpID0gMDsgaTx0aGlzLmRhdGEubGVuZ3RoOyBpKyspe1xuICAgICAgICB0aGlzLmRhdGFbaV0gPSAoaSUyID09IDApID8gaW0gOiByZTtcbiAgICAgIH1cbiAgICB9XG4gICAgYnJlYWs7XG4gIGRlZmF1bHQ6XG4gICAgdGhpcy5kYXRhLmZpbGwodik7XG4gICAgYnJlYWs7XG4gIH1cbn1cblxuXG5NbF9CaWdhcnJheS5wcm90b3R5cGUuY29tcGFyZSA9IGZ1bmN0aW9uIChiLCB0b3RhbCkge1xuICBpZiAodGhpcy5sYXlvdXQgIT0gYi5sYXlvdXQgfHwgdGhpcy5raW5kICE9IGIua2luZCkge1xuICAgIHZhciBrMSA9IHRoaXMua2luZCB8ICh0aGlzLmxheW91dCA8PCA4KTtcbiAgICB2YXIgazIgPSAgICBiLmtpbmQgfCAoYi5sYXlvdXQgPDwgOCk7XG4gICAgcmV0dXJuIGsyIC0gazE7XG4gIH1cbiAgaWYgKHRoaXMuZGltcy5sZW5ndGggIT0gYi5kaW1zLmxlbmd0aCkge1xuICAgIHJldHVybiBiLmRpbXMubGVuZ3RoIC0gdGhpcy5kaW1zLmxlbmd0aDtcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZGltcy5sZW5ndGg7IGkrKylcbiAgICBpZiAodGhpcy5kaW1zW2ldICE9IGIuZGltc1tpXSlcbiAgICAgIHJldHVybiAodGhpcy5kaW1zW2ldIDwgYi5kaW1zW2ldKSA/IC0xIDogMTtcbiAgc3dpdGNoICh0aGlzLmtpbmQpIHtcbiAgY2FzZSAwOlxuICBjYXNlIDE6XG4gIGNhc2UgMTA6XG4gIGNhc2UgMTE6XG4gICAgLy8gRmxvYXRzXG4gICAgdmFyIHgsIHk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIHggPSB0aGlzLmRhdGFbaV07XG4gICAgICB5ID0gYi5kYXRhW2ldO1xuICAgICAgaWYgKHggPCB5KVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgICBpZiAoeCA+IHkpXG4gICAgICAgIHJldHVybiAxO1xuICAgICAgaWYgKHggIT0geSkge1xuICAgICAgICBpZiAoIXRvdGFsKSByZXR1cm4gTmFOO1xuICAgICAgICBpZiAoeCA9PSB4KSByZXR1cm4gMTtcbiAgICAgICAgaWYgKHkgPT0geSkgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSA3OlxuICAgIC8vIEludDY0XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRhdGEubGVuZ3RoOyBpKz0yKSB7XG4gICAgICAvLyBDaGVjayBoaWdoZXN0IGJpdHMgZmlyc3RcbiAgICAgIGlmICh0aGlzLmRhdGFbaSsxXSA8IGIuZGF0YVtpKzFdKVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgICBpZiAodGhpcy5kYXRhW2krMV0gPiBiLmRhdGFbaSsxXSlcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICBpZiAoKHRoaXMuZGF0YVtpXSA+Pj4gMCkgPCAoYi5kYXRhW2ldID4+PiAwKSlcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgaWYgKCh0aGlzLmRhdGFbaV0gPj4+IDApID4gKGIuZGF0YVtpXSA+Pj4gMCkpXG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAyOlxuICBjYXNlIDM6XG4gIGNhc2UgNDpcbiAgY2FzZSA1OlxuICBjYXNlIDY6XG4gIGNhc2UgODpcbiAgY2FzZSA5OlxuICBjYXNlIDEyOlxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5kYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5kYXRhW2ldIDwgYi5kYXRhW2ldKVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgICBpZiAodGhpcy5kYXRhW2ldID4gYi5kYXRhW2ldKVxuICAgICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IE1sX0JpZ2FycmF5X2NfMV8xXG4vL1JlcXVpcmVzOiBNbF9CaWdhcnJheSwgY2FtbF9hcnJheV9ib3VuZF9lcnJvciwgY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBNbF9CaWdhcnJheV9jXzFfMShraW5kLCBsYXlvdXQsIGRpbXMsIGJ1ZmZlcikge1xuICB0aGlzLmtpbmQgICA9IGtpbmQgO1xuICB0aGlzLmxheW91dCA9IGxheW91dDtcbiAgdGhpcy5kaW1zICAgPSBkaW1zO1xuICB0aGlzLmRhdGEgICA9IGJ1ZmZlcjtcbn1cblxuTWxfQmlnYXJyYXlfY18xXzEucHJvdG90eXBlID0gbmV3IE1sX0JpZ2FycmF5KClcbk1sX0JpZ2FycmF5X2NfMV8xLnByb3RvdHlwZS5vZmZzZXQgPSBmdW5jdGlvbiAoYXJnKSB7XG4gIGlmKHR5cGVvZiBhcmcgIT09IFwibnVtYmVyXCIpe1xuICAgIGlmKChhcmcgaW5zdGFuY2VvZiBBcnJheSkgJiYgYXJnLmxlbmd0aCA9PSAxKVxuICAgICAgYXJnID0gYXJnWzBdO1xuICAgIGVsc2UgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiTWxfQmlnYXJyYXlfY18xXzEub2Zmc2V0XCIpO1xuICB9XG4gIGlmIChhcmcgPCAwIHx8IGFyZyA+PSB0aGlzLmRpbXNbMF0pXG4gICAgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICByZXR1cm4gYXJnO1xufVxuXG5NbF9CaWdhcnJheV9jXzFfMS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKG9mcykge1xuICByZXR1cm4gdGhpcy5kYXRhW29mc107XG59XG5cbk1sX0JpZ2FycmF5X2NfMV8xLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAob2ZzLHYpIHtcbiAgdGhpcy5kYXRhW29mc10gPSB2O1xuICByZXR1cm4gMFxufVxuXG5NbF9CaWdhcnJheV9jXzFfMS5wcm90b3R5cGUuZmlsbCA9IGZ1bmN0aW9uICh2KSB7XG4gIHRoaXMuZGF0YS5maWxsKHYpO1xuICByZXR1cm4gMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2NvbXBhcmVcbmZ1bmN0aW9uIGNhbWxfYmFfY29tcGFyZShhLGIsdG90YWwpe1xuICByZXR1cm4gYS5jb21wYXJlKGIsdG90YWwpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfY3JlYXRlX3Vuc2FmZVxuLy9SZXF1aXJlczogTWxfQmlnYXJyYXksIE1sX0JpZ2FycmF5X2NfMV8xLCBjYW1sX2JhX2dldF9zaXplLCBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50XG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShraW5kLCBsYXlvdXQsIGRpbXMsIGRhdGEpe1xuICB2YXIgc2l6ZV9wZXJfZWxlbWVudCA9IGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnQoa2luZCk7XG4gIGlmKGNhbWxfYmFfZ2V0X3NpemUoZGltcykgKiBzaXplX3Blcl9lbGVtZW50ICE9IGRhdGEubGVuZ3RoKSB7XG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwibGVuZ3RoIGRvZXNuJ3QgbWF0Y2ggZGltc1wiKTtcbiAgfVxuICBpZihsYXlvdXQgPT0gMCAmJiAvLyBjX2xheW91dFxuICAgICBkaW1zLmxlbmd0aCA9PSAxICYmIC8vIEFycmF5MVxuICAgICBzaXplX3Blcl9lbGVtZW50ID09IDEpIC8vIDEtdG8tMSBtYXBwaW5nXG4gICAgcmV0dXJuIG5ldyBNbF9CaWdhcnJheV9jXzFfMShraW5kLCBsYXlvdXQsIGRpbXMsIGRhdGEpO1xuICByZXR1cm4gbmV3IE1sX0JpZ2FycmF5KGtpbmQsIGxheW91dCwgZGltcywgZGF0YSk7XG5cbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2NyZWF0ZVxuLy9SZXF1aXJlczogY2FtbF9qc19mcm9tX2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX2JhX2dldF9zaXplLCBjYW1sX2JhX2NyZWF0ZV91bnNhZmVcbi8vUmVxdWlyZXM6IGNhbWxfYmFfY3JlYXRlX2J1ZmZlclxuZnVuY3Rpb24gY2FtbF9iYV9jcmVhdGUoa2luZCwgbGF5b3V0LCBkaW1zX21sKSB7XG4gIHZhciBkaW1zID0gY2FtbF9qc19mcm9tX2FycmF5KGRpbXNfbWwpO1xuICB2YXIgZGF0YSA9IGNhbWxfYmFfY3JlYXRlX2J1ZmZlcihraW5kLCBjYW1sX2JhX2dldF9zaXplKGRpbXMpKTtcbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShraW5kLCBsYXlvdXQsIGRpbXMsIGRhdGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2NoYW5nZV9sYXlvdXRcbi8vUmVxdWlyZXM6IGNhbWxfYmFfY3JlYXRlX3Vuc2FmZVxuZnVuY3Rpb24gY2FtbF9iYV9jaGFuZ2VfbGF5b3V0KGJhLCBsYXlvdXQpIHtcbiAgaWYoYmEubGF5b3V0ID09IGxheW91dCkgcmV0dXJuIGJhO1xuICB2YXIgbmV3X2RpbXMgPSBbXVxuICBmb3IodmFyIGkgPSAwOyBpIDwgYmEuZGltcy5sZW5ndGg7IGkrKykgbmV3X2RpbXNbaV0gPSBiYS5kaW1zW2JhLmRpbXMubGVuZ3RoIC0gaSAtIDFdO1xuICByZXR1cm4gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGJhLmtpbmQsIGxheW91dCwgbmV3X2RpbXMsIGJhLmRhdGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2tpbmRcbmZ1bmN0aW9uIGNhbWxfYmFfa2luZChiYSkge1xuICByZXR1cm4gYmEua2luZDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9sYXlvdXRcbmZ1bmN0aW9uIGNhbWxfYmFfbGF5b3V0KGJhKSB7XG4gIHJldHVybiBiYS5sYXlvdXQ7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfbnVtX2RpbXNcbmZ1bmN0aW9uIGNhbWxfYmFfbnVtX2RpbXMoYmEpIHtcbiAgcmV0dXJuIGJhLmRpbXMubGVuZ3RoO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2RpbVxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX2JhX2RpbShiYSwgaSkge1xuICBpZiAoaSA8IDAgfHwgaSA+PSBiYS5kaW1zLmxlbmd0aClcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5kaW1cIik7XG4gIHJldHVybiBiYS5kaW1zW2ldO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2RpbV8xXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2RpbVxuZnVuY3Rpb24gY2FtbF9iYV9kaW1fMShiYSkge1xuICByZXR1cm4gY2FtbF9iYV9kaW0oYmEsIDApO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2RpbV8yXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2RpbVxuZnVuY3Rpb24gY2FtbF9iYV9kaW1fMihiYSkge1xuICByZXR1cm4gY2FtbF9iYV9kaW0oYmEsIDEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2RpbV8zXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2RpbVxuZnVuY3Rpb24gY2FtbF9iYV9kaW1fMyhiYSkge1xuICByZXR1cm4gY2FtbF9iYV9kaW0oYmEsIDIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2dldF9nZW5lcmljXG4vL1JlcXVpcmVzOiBjYW1sX2pzX2Zyb21fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfYmFfZ2V0X2dlbmVyaWMoYmEsIGkpIHtcbiAgdmFyIG9mcyA9IGJhLm9mZnNldChjYW1sX2pzX2Zyb21fYXJyYXkoaSkpO1xuICByZXR1cm4gYmEuZ2V0KG9mcyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfdWludDhfZ2V0MTZcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfYmFfdWludDhfZ2V0MTYoYmEsIGkwKSB7XG4gIHZhciBvZnMgPSBiYS5vZmZzZXQoaTApO1xuICBpZihvZnMgKyAxID49IGJhLmRhdGEubGVuZ3RoKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiMSA9IGJhLmdldChvZnMpO1xuICB2YXIgYjIgPSBiYS5nZXQob2ZzICsgMSk7XG4gIHJldHVybiAoYjEgfCAoYjIgPDwgOCkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3VpbnQ4X2dldDMyXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX2JhX3VpbnQ4X2dldDMyKGJhLCBpMCkge1xuICB2YXIgb2ZzID0gYmEub2Zmc2V0KGkwKTtcbiAgaWYob2ZzICsgMyA+PSBiYS5kYXRhLmxlbmd0aCkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB2YXIgYjEgPSBiYS5nZXQob2ZzKzApO1xuICB2YXIgYjIgPSBiYS5nZXQob2ZzKzEpO1xuICB2YXIgYjMgPSBiYS5nZXQob2ZzKzIpO1xuICB2YXIgYjQgPSBiYS5nZXQob2ZzKzMpO1xuICByZXR1cm4gKCAoYjEgPDwgMCkgIHxcbiAgICAgICAgICAgKGIyIDw8IDgpICB8XG4gICAgICAgICAgIChiMyA8PCAxNikgfFxuICAgICAgICAgICAoYjQgPDwgMjQpICk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfdWludDhfZ2V0NjRcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3IsIGNhbWxfaW50NjRfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYmFfdWludDhfZ2V0NjQoYmEsIGkwKSB7XG4gIHZhciBvZnMgPSBiYS5vZmZzZXQoaTApO1xuICBpZihvZnMgKyA3ID49IGJhLmRhdGEubGVuZ3RoKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiMSA9IGJhLmdldChvZnMrMCk7XG4gIHZhciBiMiA9IGJhLmdldChvZnMrMSk7XG4gIHZhciBiMyA9IGJhLmdldChvZnMrMik7XG4gIHZhciBiNCA9IGJhLmdldChvZnMrMyk7XG4gIHZhciBiNSA9IGJhLmdldChvZnMrNCk7XG4gIHZhciBiNiA9IGJhLmdldChvZnMrNSk7XG4gIHZhciBiNyA9IGJhLmdldChvZnMrNik7XG4gIHZhciBiOCA9IGJhLmdldChvZnMrNyk7XG4gIHJldHVybiBjYW1sX2ludDY0X29mX2J5dGVzKFtiOCxiNyxiNixiNSxiNCxiMyxiMixiMV0pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2dldF8xXG5mdW5jdGlvbiBjYW1sX2JhX2dldF8xKGJhLCBpMCkge1xuICByZXR1cm4gYmEuZ2V0KGJhLm9mZnNldChpMCkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2dldF8yXG5mdW5jdGlvbiBjYW1sX2JhX2dldF8yKGJhLCBpMCwgaTEpIHtcbiAgcmV0dXJuIGJhLmdldChiYS5vZmZzZXQoW2kwLGkxXSkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2dldF8zXG5mdW5jdGlvbiBjYW1sX2JhX2dldF8zKGJhLCBpMCwgaTEsIGkyKSB7XG4gIHJldHVybiBiYS5nZXQoYmEub2Zmc2V0KFtpMCxpMSxpMl0pKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9zZXRfZ2VuZXJpY1xuLy9SZXF1aXJlczogY2FtbF9qc19mcm9tX2FycmF5XG5mdW5jdGlvbiBjYW1sX2JhX3NldF9nZW5lcmljKGJhLCBpLCB2KSB7XG4gIGJhLnNldChiYS5vZmZzZXQoY2FtbF9qc19mcm9tX2FycmF5KGkpKSwgdik7XG4gIHJldHVybiAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfdWludDhfc2V0MTZcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfYmFfdWludDhfc2V0MTYoYmEsIGkwLCB2KSB7XG4gIHZhciBvZnMgPSBiYS5vZmZzZXQoaTApO1xuICBpZihvZnMgKyAxID49IGJhLmRhdGEubGVuZ3RoKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIGJhLnNldChvZnMrMCwgIHYgICAgICAgICYgMHhmZik7XG4gIGJhLnNldChvZnMrMSwgKHYgPj4+IDgpICYgMHhmZik7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3VpbnQ4X3NldDMyXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX2JhX3VpbnQ4X3NldDMyKGJhLCBpMCwgdikge1xuICB2YXIgb2ZzID0gYmEub2Zmc2V0KGkwKTtcbiAgaWYob2ZzICsgMyA+PSBiYS5kYXRhLmxlbmd0aCkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICBiYS5zZXQob2ZzKzAsICB2ICAgICAgICAgJiAweGZmKTtcbiAgYmEuc2V0KG9mcysxLCAodiA+Pj4gOCkgICYgMHhmZik7XG4gIGJhLnNldChvZnMrMiwgKHYgPj4+IDE2KSAmIDB4ZmYpO1xuICBiYS5zZXQob2ZzKzMsICh2ID4+PiAyNCkgJiAweGZmKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfdWludDhfc2V0NjRcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3IsIGNhbWxfaW50NjRfdG9fYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYmFfdWludDhfc2V0NjQoYmEsIGkwLCB2KSB7XG4gIHZhciBvZnMgPSBiYS5vZmZzZXQoaTApO1xuICBpZihvZnMgKyA3ID49IGJhLmRhdGEubGVuZ3RoKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHZhciB2ID0gY2FtbF9pbnQ2NF90b19ieXRlcyh2KTtcbiAgZm9yKHZhciBpID0gMDsgaSA8IDg7IGkrKykgYmEuc2V0KG9mcytpLCB2WzctaV0pXG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3NldF8xXG5mdW5jdGlvbiBjYW1sX2JhX3NldF8xKGJhLCBpMCwgdikge1xuICBiYS5zZXQoYmEub2Zmc2V0KGkwKSwgdik7XG4gIHJldHVybiAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfc2V0XzJcbmZ1bmN0aW9uIGNhbWxfYmFfc2V0XzIoYmEsIGkwLCBpMSwgdikge1xuICBiYS5zZXQoYmEub2Zmc2V0KFtpMCxpMV0pLCB2KTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfc2V0XzNcbmZ1bmN0aW9uIGNhbWxfYmFfc2V0XzMoYmEsIGkwLCBpMSwgaTIsIHYpIHtcbiAgYmEuc2V0KGJhLm9mZnNldChbaTAsaTEsaTJdKSwgdik7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2ZpbGxcbmZ1bmN0aW9uIGNhbWxfYmFfZmlsbChiYSwgdikge1xuICBiYS5maWxsKHYpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9ibGl0XG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfYmxpdChzcmMsIGRzdCkge1xuICBpZiAoZHN0LmRpbXMubGVuZ3RoICE9IHNyYy5kaW1zLmxlbmd0aClcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5ibGl0OiBkaW1lbnNpb24gbWlzbWF0Y2hcIik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZHN0LmRpbXMubGVuZ3RoOyBpKyspXG4gICAgaWYgKGRzdC5kaW1zW2ldICE9IHNyYy5kaW1zW2ldKVxuICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkuYmxpdDogZGltZW5zaW9uIG1pc21hdGNoXCIpO1xuICBkc3QuZGF0YS5zZXQoc3JjLmRhdGEpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9zdWJcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9iYV9jcmVhdGVfdW5zYWZlLCBjYW1sX2JhX2dldF9zaXplXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50XG5mdW5jdGlvbiBjYW1sX2JhX3N1YihiYSwgb2ZzLCBsZW4pIHtcbiAgdmFyIGNoYW5nZWRfZGltO1xuICB2YXIgbXVsID0gMTtcbiAgaWYgKGJhLmxheW91dCA9PSAwKSB7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBiYS5kaW1zLmxlbmd0aDsgaSsrKVxuICAgICAgbXVsID0gbXVsICogYmEuZGltc1tpXTtcbiAgICBjaGFuZ2VkX2RpbSA9IDA7XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAoYmEuZGltcy5sZW5ndGggLSAxKTsgaSsrKVxuICAgICAgbXVsID0gbXVsICogYmEuZGltc1tpXTtcbiAgICBjaGFuZ2VkX2RpbSA9IGJhLmRpbXMubGVuZ3RoIC0gMTtcbiAgICBvZnMgPSBvZnMgLSAxO1xuICB9XG4gIGlmIChvZnMgPCAwIHx8IGxlbiA8IDAgfHwgKG9mcyArIGxlbikgPiBiYS5kaW1zW2NoYW5nZWRfZGltXSl7XG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkuc3ViOiBiYWQgc3ViLWFycmF5XCIpO1xuICB9XG4gIHZhciBuZXdfZGltcyA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGJhLmRpbXMubGVuZ3RoOyBpKyspXG4gICAgbmV3X2RpbXNbaV0gPSBiYS5kaW1zW2ldO1xuICBuZXdfZGltc1tjaGFuZ2VkX2RpbV0gPSBsZW47XG4gIG11bCAqPSBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50KGJhLmtpbmQpO1xuICB2YXIgbmV3X2RhdGEgPSBiYS5kYXRhLnN1YmFycmF5KG9mcyAqIG11bCwgKG9mcyArIGxlbikgKiBtdWwpO1xuICByZXR1cm4gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGJhLmtpbmQsIGJhLmxheW91dCwgbmV3X2RpbXMsIG5ld19kYXRhKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9zbGljZVxuLy9SZXF1aXJlczogY2FtbF9qc19mcm9tX2FycmF5LCBjYW1sX2JhX2NyZWF0ZV91bnNhZmUsIGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9iYV9nZXRfc2l6ZVxuLy9SZXF1aXJlczogY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudFxuZnVuY3Rpb24gY2FtbF9iYV9zbGljZShiYSwgdmluZCkge1xuICB2aW5kID0gY2FtbF9qc19mcm9tX2FycmF5KHZpbmQpO1xuICB2YXIgbnVtX2luZHMgPSB2aW5kLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gW107XG4gIHZhciBzdWJfZGltcyA9IFtdO1xuICB2YXIgb2ZzO1xuXG4gIGlmIChudW1faW5kcyA+IGJhLmRpbXMubGVuZ3RoKVxuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LnNsaWNlOiB0b28gbWFueSBpbmRpY2VzXCIpO1xuXG4gIC8vIENvbXB1dGUgb2Zmc2V0IGFuZCBjaGVjayBib3VuZHNcbiAgaWYgKGJhLmxheW91dCA9PSAwKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1faW5kczsgaSsrKVxuICAgICAgaW5kZXhbaV0gPSB2aW5kW2ldO1xuICAgIGZvciAoOyBpIDwgYmEuZGltcy5sZW5ndGg7IGkrKylcbiAgICAgIGluZGV4W2ldID0gMDtcbiAgICBzdWJfZGltcyA9IGJhLmRpbXMuc2xpY2UobnVtX2luZHMpO1xuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2luZHM7IGkrKylcbiAgICAgIGluZGV4W2JhLmRpbXMubGVuZ3RoIC0gbnVtX2luZHMgKyBpXSA9IHZpbmRbaV07XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiYS5kaW1zLmxlbmd0aCAtIG51bV9pbmRzOyBpKyspXG4gICAgICBpbmRleFtpXSA9IDE7XG4gICAgc3ViX2RpbXMgPSBiYS5kaW1zLnNsaWNlKDAsIGJhLmRpbXMubGVuZ3RoIC0gbnVtX2luZHMpO1xuICB9XG4gIG9mcyA9IGJhLm9mZnNldChpbmRleCk7XG4gIHZhciBzaXplID0gY2FtbF9iYV9nZXRfc2l6ZShzdWJfZGltcyk7XG4gIHZhciBzaXplX3Blcl9lbGVtZW50ID0gY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudChiYS5raW5kKTtcbiAgdmFyIG5ld19kYXRhID0gYmEuZGF0YS5zdWJhcnJheShvZnMgKiBzaXplX3Blcl9lbGVtZW50LCAob2ZzICsgc2l6ZSkgKiBzaXplX3Blcl9lbGVtZW50KTtcbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShiYS5raW5kLCBiYS5sYXlvdXQsIHN1Yl9kaW1zLCBuZXdfZGF0YSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfcmVzaGFwZVxuLy9SZXF1aXJlczogY2FtbF9qc19mcm9tX2FycmF5LCBjYW1sX2ludmFsaWRfYXJndW1lbnQsIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZSwgY2FtbF9iYV9nZXRfc2l6ZVxuZnVuY3Rpb24gY2FtbF9iYV9yZXNoYXBlKGJhLCB2aW5kKSB7XG4gIHZpbmQgPSBjYW1sX2pzX2Zyb21fYXJyYXkodmluZCk7XG4gIHZhciBuZXdfZGltID0gW107XG4gIHZhciBudW1fZGltcyA9IHZpbmQubGVuZ3RoO1xuXG4gIGlmIChudW1fZGltcyA8IDAgfHwgbnVtX2RpbXMgPiAxNil7XG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkucmVzaGFwZTogYmFkIG51bWJlciBvZiBkaW1lbnNpb25zXCIpO1xuICB9XG4gIHZhciBudW1fZWx0cyA9IDE7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2RpbXM7IGkrKykge1xuICAgIG5ld19kaW1baV0gPSB2aW5kW2ldO1xuICAgIGlmIChuZXdfZGltW2ldIDwgMClcbiAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LnJlc2hhcGU6IG5lZ2F0aXZlIGRpbWVuc2lvblwiKTtcbiAgICBudW1fZWx0cyA9IG51bV9lbHRzICogbmV3X2RpbVtpXTtcbiAgfVxuXG4gIHZhciBzaXplID0gY2FtbF9iYV9nZXRfc2l6ZShiYS5kaW1zKTtcbiAgLy8gQ2hlY2sgdGhhdCBzaXplcyBhZ3JlZVxuICBpZiAobnVtX2VsdHMgIT0gc2l6ZSlcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5yZXNoYXBlOiBzaXplIG1pc21hdGNoXCIpO1xuICByZXR1cm4gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGJhLmtpbmQsIGJhLmxheW91dCwgbmV3X2RpbSwgYmEuZGF0YSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfc2VyaWFsaXplXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQsIGNhbWxfaW50NjRfdG9fYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfaW50MzJfYml0c19vZl9mbG9hdFxuZnVuY3Rpb24gY2FtbF9iYV9zZXJpYWxpemUod3JpdGVyLCBiYSwgc3opIHtcbiAgd3JpdGVyLndyaXRlKDMyLCBiYS5kaW1zLmxlbmd0aCk7XG4gIHdyaXRlci53cml0ZSgzMiwgKGJhLmtpbmQgfCAoYmEubGF5b3V0IDw8IDgpKSk7XG4gIGlmKGJhLmNhbWxfY3VzdG9tID09IFwiX2JpZ2FycjAyXCIpXG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGJhLmRpbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmKGJhLmRpbXNbaV0gPCAweGZmZmYpXG4gICAgICAgIHdyaXRlci53cml0ZSgxNiwgYmEuZGltc1tpXSk7XG4gICAgICBlbHNlIHtcbiAgICAgICAgd3JpdGVyLndyaXRlKDE2LCAweGZmZmYpO1xuICAgICAgICB3cml0ZXIud3JpdGUoMzIsIDApO1xuICAgICAgICB3cml0ZXIud3JpdGUoMzIsIGJhLmRpbXNbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgZWxzZVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBiYS5kaW1zLmxlbmd0aDsgaSsrKSB3cml0ZXIud3JpdGUoMzIsYmEuZGltc1tpXSlcbiAgc3dpdGNoKGJhLmtpbmQpe1xuICBjYXNlIDI6ICAvL0ludDhBcnJheVxuICBjYXNlIDM6ICAvL1VpbnQ4QXJyYXlcbiAgY2FzZSAxMjogLy9VaW50OEFycmF5XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGJhLmRhdGEubGVuZ3RoOyBpKyspe1xuICAgICAgd3JpdGVyLndyaXRlKDgsIGJhLmRhdGFbaV0pO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSA0OiAgLy8gSW50MTZBcnJheVxuICBjYXNlIDU6ICAvLyBVaW50MTZBcnJheVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBiYS5kYXRhLmxlbmd0aDsgaSsrKXtcbiAgICAgIHdyaXRlci53cml0ZSgxNiwgYmEuZGF0YVtpXSk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDY6ICAvLyBJbnQzMkFycmF5IChpbnQzMilcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGg7IGkrKyl7XG4gICAgICB3cml0ZXIud3JpdGUoMzIsIGJhLmRhdGFbaV0pO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSA4OiAgLy8gSW50MzJBcnJheSAoaW50KVxuICBjYXNlIDk6ICAvLyBJbnQzMkFycmF5IChuYXRpdmVpbnQpXG4gICAgd3JpdGVyLndyaXRlKDgsMCk7XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGJhLmRhdGEubGVuZ3RoOyBpKyspe1xuICAgICAgd3JpdGVyLndyaXRlKDMyLCBiYS5kYXRhW2ldKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgNzogIC8vIEludDMyQXJyYXkgKGludDY0KVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBiYS5kYXRhLmxlbmd0aCAvIDI7IGkrKyl7XG4gICAgICB2YXIgYiA9IGNhbWxfaW50NjRfdG9fYnl0ZXMoYmEuZ2V0KGkpKTtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgODsgaisrKSB3cml0ZXIud3JpdGUgKDgsIGJbal0pO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAxOiAgLy8gRmxvYXQ2NEFycmF5XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGJhLmRhdGEubGVuZ3RoOyBpKyspe1xuICAgICAgdmFyIGIgPSBjYW1sX2ludDY0X3RvX2J5dGVzKGNhbWxfaW50NjRfYml0c19vZl9mbG9hdChiYS5nZXQoaSkpKTtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgODsgaisrKSB3cml0ZXIud3JpdGUgKDgsIGJbal0pO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAwOiAgLy8gRmxvYXQzMkFycmF5XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGJhLmRhdGEubGVuZ3RoOyBpKyspe1xuICAgICAgdmFyIGIgPSBjYW1sX2ludDMyX2JpdHNfb2ZfZmxvYXQoYmEuZ2V0KGkpKTtcbiAgICAgIHdyaXRlci53cml0ZSgzMiwgYik7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDEwOiAvLyBGbG9hdDMyQXJyYXkgKGNvbXBsZXgzMilcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGggLyAyOyBpKyspe1xuICAgICAgdmFyIGogPSBiYS5nZXQoaSk7XG4gICAgICB3cml0ZXIud3JpdGUoMzIsIGNhbWxfaW50MzJfYml0c19vZl9mbG9hdChqWzFdKSk7XG4gICAgICB3cml0ZXIud3JpdGUoMzIsIGNhbWxfaW50MzJfYml0c19vZl9mbG9hdChqWzJdKSk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDExOiAvLyBGbG9hdDY0QXJyYXkgKGNvbXBsZXg2NClcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGggLyAyOyBpKyspe1xuICAgICAgdmFyIGNvbXBsZXggPSBiYS5nZXQoaSk7XG4gICAgICB2YXIgYiA9IGNhbWxfaW50NjRfdG9fYnl0ZXMoY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0KGNvbXBsZXhbMV0pKTtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgODsgaisrKSB3cml0ZXIud3JpdGUgKDgsIGJbal0pO1xuICAgICAgdmFyIGIgPSBjYW1sX2ludDY0X3RvX2J5dGVzKGNhbWxfaW50NjRfYml0c19vZl9mbG9hdChjb21wbGV4WzJdKSk7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDg7IGorKykgd3JpdGVyLndyaXRlICg4LCBiW2pdKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIH1cbiAgc3pbMF0gPSAoNCArIGJhLmRpbXMubGVuZ3RoKSAqIDQ7XG4gIHN6WzFdID0gKDQgKyBiYS5kaW1zLmxlbmd0aCkgKiA4O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2Rlc2VyaWFsaXplXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUsIGNhbWxfZmFpbHdpdGhcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZ2V0X3NpemVcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2ZfYnl0ZXMsIGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0c1xuLy9SZXF1aXJlczogY2FtbF9pbnQzMl9mbG9hdF9vZl9iaXRzXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2NyZWF0ZV9idWZmZXJcbmZ1bmN0aW9uIGNhbWxfYmFfZGVzZXJpYWxpemUocmVhZGVyLCBzeiwgbmFtZSl7XG4gIHZhciBudW1fZGltcyA9IHJlYWRlci5yZWFkMzJzKCk7XG4gIGlmIChudW1fZGltcyA8IDAgfHwgbnVtX2RpbXMgPiAxNilcbiAgICBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IHdyb25nIG51bWJlciBvZiBiaWdhcnJheSBkaW1lbnNpb25zXCIpO1xuICB2YXIgdGFnID0gcmVhZGVyLnJlYWQzMnMoKTtcbiAgdmFyIGtpbmQgPSB0YWcgJiAweGZmXG4gIHZhciBsYXlvdXQgPSAodGFnID4+IDgpICYgMTtcbiAgdmFyIGRpbXMgPSBbXVxuICBpZihuYW1lID09IFwiX2JpZ2FycjAyXCIpXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1fZGltczsgaSsrKSB7XG4gICAgICB2YXIgc2l6ZV9kaW0gPSByZWFkZXIucmVhZDE2dSgpO1xuICAgICAgaWYoc2l6ZV9kaW0gPT0gMHhmZmZmKXtcbiAgICAgICAgdmFyIHNpemVfZGltX2hpID0gcmVhZGVyLnJlYWQzMnUoKTtcbiAgICAgICAgdmFyIHNpemVfZGltX2xvID0gcmVhZGVyLnJlYWQzMnUoKTtcbiAgICAgICAgaWYoc2l6ZV9kaW1faGkgIT0gMClcbiAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IGJpZ2FycmF5IGRpbWVuc2lvbiBvdmVyZmxvdyBpbiAzMmJpdFwiKTtcbiAgICAgICAgc2l6ZV9kaW0gPSBzaXplX2RpbV9sbztcbiAgICAgIH1cbiAgICAgIGRpbXMucHVzaChzaXplX2RpbSk7XG4gICAgfVxuICBlbHNlXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1fZGltczsgaSsrKSBkaW1zLnB1c2gocmVhZGVyLnJlYWQzMnUoKSk7XG4gIHZhciBzaXplID0gY2FtbF9iYV9nZXRfc2l6ZShkaW1zKTtcbiAgdmFyIGRhdGEgPSBjYW1sX2JhX2NyZWF0ZV9idWZmZXIoa2luZCwgc2l6ZSk7XG4gIHZhciBiYSA9IGNhbWxfYmFfY3JlYXRlX3Vuc2FmZShraW5kLCBsYXlvdXQsIGRpbXMsIGRhdGEpO1xuICBzd2l0Y2goa2luZCl7XG4gIGNhc2UgMjogIC8vSW50OEFycmF5XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKyl7XG4gICAgICBkYXRhW2ldID0gcmVhZGVyLnJlYWQ4cygpO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAzOiAgLy9VaW50OEFycmF5XG4gIGNhc2UgMTI6IC8vVWludDhBcnJheVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspe1xuICAgICAgZGF0YVtpXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgNDogIC8vIEludDE2QXJyYXlcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKXtcbiAgICAgIGRhdGFbaV0gPSByZWFkZXIucmVhZDE2cygpO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSA1OiAgLy8gVWludDE2QXJyYXlcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKXtcbiAgICAgIGRhdGFbaV0gPSByZWFkZXIucmVhZDE2dSgpO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSA2OiAgLy8gSW50MzJBcnJheSAoaW50MzIpXG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKyl7XG4gICAgICBkYXRhW2ldID0gcmVhZGVyLnJlYWQzMnMoKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgODogIC8vIEludDMyQXJyYXkgKGludClcbiAgY2FzZSA5OiAgLy8gSW50MzJBcnJheSAobmF0aXZlaW50KVxuICAgIHZhciBzaXh0eSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICBpZihzaXh0eSkgY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiBjYW5ub3QgcmVhZCBiaWdhcnJheSB3aXRoIDY0LWJpdCBPQ2FtbCBpbnRzXCIpO1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspe1xuICAgICAgZGF0YVtpXSA9IHJlYWRlci5yZWFkMzJzKCk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDc6IC8vIChpbnQ2NClcbiAgICB2YXIgdCA9IG5ldyBBcnJheSg4KTs7XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKyl7XG4gICAgICBmb3IgKHZhciBqID0gMDtqIDwgODtqKyspIHRbal0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICB2YXIgaW50NjQgPSBjYW1sX2ludDY0X29mX2J5dGVzKHQpO1xuICAgICAgYmEuc2V0KGksaW50NjQpO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAxOiAgLy8gRmxvYXQ2NEFycmF5XG4gICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7O1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspe1xuICAgICAgZm9yICh2YXIgaiA9IDA7aiA8IDg7aisrKSB0W2pdID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgdmFyIGYgPSBjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMoY2FtbF9pbnQ2NF9vZl9ieXRlcyh0KSk7XG4gICAgICBiYS5zZXQoaSxmKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgMDogIC8vIEZsb2F0MzJBcnJheVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspe1xuICAgICAgdmFyIGYgPSBjYW1sX2ludDMyX2Zsb2F0X29mX2JpdHMocmVhZGVyLnJlYWQzMnMoKSk7XG4gICAgICBiYS5zZXQoaSxmKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgMTA6IC8vIEZsb2F0MzJBcnJheSAoY29tcGxleDMyKVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspe1xuICAgICAgdmFyIHJlID0gY2FtbF9pbnQzMl9mbG9hdF9vZl9iaXRzKHJlYWRlci5yZWFkMzJzKCkpO1xuICAgICAgdmFyIGltID0gY2FtbF9pbnQzMl9mbG9hdF9vZl9iaXRzKHJlYWRlci5yZWFkMzJzKCkpO1xuICAgICAgYmEuc2V0KGksWzI1NCxyZSxpbV0pO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAxMTogLy8gRmxvYXQ2NEFycmF5IChjb21wbGV4NjQpXG4gICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7O1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspe1xuICAgICAgZm9yICh2YXIgaiA9IDA7aiA8IDg7aisrKSB0W2pdID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgdmFyIHJlID0gY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzKGNhbWxfaW50NjRfb2ZfYnl0ZXModCkpO1xuICAgICAgZm9yICh2YXIgaiA9IDA7aiA8IDg7aisrKSB0W2pdID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgdmFyIGltID0gY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzKGNhbWxfaW50NjRfb2ZfYnl0ZXModCkpO1xuICAgICAgYmEuc2V0KGksWzI1NCxyZSxpbV0pO1xuICAgIH1cbiAgICBicmVha1xuICB9XG4gIHN6WzBdID0gKDQgKyBudW1fZGltcykgKiA0O1xuICByZXR1cm4gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGtpbmQsIGxheW91dCwgZGltcywgZGF0YSk7XG59XG5cbi8vRGVwcmVjYXRlZFxuLy9Qcm92aWRlczogY2FtbF9iYV9jcmVhdGVfZnJvbVxuLy9SZXF1aXJlczogY2FtbF9iYV9jcmVhdGVfdW5zYWZlLCBjYW1sX2ludmFsaWRfYXJndW1lbnQsIGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfY3JlYXRlX2Zyb20oZGF0YTEsIGRhdGEyLCBqc3R5cCwga2luZCwgbGF5b3V0LCBkaW1zKXtcbiAgaWYoZGF0YTIgfHwgY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudChraW5kKSA9PSAyKXtcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJjYW1sX2JhX2NyZWF0ZV9mcm9tOiB1c2UgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZVwiKTtcbiAgfVxuICByZXR1cm4gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGtpbmQsIGxheW91dCwgZGltcywgZGF0YTEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2hhc2ggY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZ2V0X3NpemUsIGNhbWxfaGFzaF9taXhfaW50LCBjYW1sX2hhc2hfbWl4X2Zsb2F0XG5mdW5jdGlvbiBjYW1sX2JhX2hhc2goYmEpe1xuICB2YXIgbnVtX2VsdHMgPSBjYW1sX2JhX2dldF9zaXplKGJhLmRpbXMpO1xuICB2YXIgaCA9IDA7XG4gIHN3aXRjaChiYS5raW5kKXtcbiAgY2FzZSAyOiAgLy9JbnQ4QXJyYXlcbiAgY2FzZSAzOiAgLy9VaW50OEFycmF5XG4gIGNhc2UgMTI6IC8vVWludDhBcnJheVxuICAgIGlmKG51bV9lbHRzID4gMjU2KSBudW1fZWx0cyA9IDI1NjtcbiAgICB2YXIgdyA9IDAsIGkgPTA7XG4gICAgZm9yKGkgPSAwOyBpICsgNCA8PSBiYS5kYXRhLmxlbmd0aDsgaSs9NCl7XG4gICAgICB3ID0gYmEuZGF0YVtpKzBdIHwgKGJhLmRhdGFbaSsxXSA8PCA4KSB8IChiYS5kYXRhW2krMl0gPDwgMTYpIHwgKGJhLmRhdGFbaSszXSA8PCAyNCk7XG4gICAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCx3KTtcbiAgICB9XG4gICAgdyA9IDA7XG4gICAgc3dpdGNoIChudW1fZWx0cyAmIDMpIHtcbiAgICBjYXNlIDM6IHcgID0gYmEuZGF0YVtpKzJdIDw8IDE2OyAgICAvKiBmYWxsdGhyb3VnaCAqL1xuICAgIGNhc2UgMjogdyB8PSBiYS5kYXRhW2krMV0gPDwgODsgICAgIC8qIGZhbGx0aHJvdWdoICovXG4gICAgY2FzZSAxOiB3IHw9IGJhLmRhdGFbaSswXTtcbiAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCB3KTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgNDogIC8vIEludDE2QXJyYXlcbiAgY2FzZSA1OiAgLy8gVWludDE2QXJyYXlcbiAgICBpZihudW1fZWx0cyA+IDEyOCkgbnVtX2VsdHMgPSAxMjg7XG4gICAgdmFyIHcgPSAwLCBpID0wO1xuICAgIGZvcihpID0gMDsgaSArIDIgPD0gYmEuZGF0YS5sZW5ndGg7IGkrPTIpe1xuICAgICAgdyA9IGJhLmRhdGFbaSswXSB8IChiYS5kYXRhW2krMV0gPDwgMTYpO1xuICAgICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsdyk7XG4gICAgfVxuICAgIGlmICgobnVtX2VsdHMgJiAxKSAhPSAwKVxuICAgICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIGJhLmRhdGFbaV0pO1xuICAgIGJyZWFrO1xuICBjYXNlIDY6ICAvLyBJbnQzMkFycmF5IChpbnQzMilcbiAgICBpZiAobnVtX2VsdHMgPiA2NCkgbnVtX2VsdHMgPSA2NDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bV9lbHRzOyBpKyspIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCBiYS5kYXRhW2ldKTtcbiAgICBicmVhaztcbiAgY2FzZSA4OiAgLy8gSW50MzJBcnJheSAoaW50KVxuICBjYXNlIDk6ICAvLyBJbnQzMkFycmF5IChuYXRpdmVpbnQpXG4gICAgaWYgKG51bV9lbHRzID4gNjQpIG51bV9lbHRzID0gNjQ7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1fZWx0czsgaSsrKSBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgYmEuZGF0YVtpXSk7XG4gICAgYnJlYWs7XG4gIGNhc2UgNzogIC8vIEludDMyQXJyYXkgKGludDY0KVxuICAgIGlmIChudW1fZWx0cyA+IDMyKSBudW1fZWx0cyA9IDMyO1xuICAgIG51bV9lbHRzICo9IDJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bV9lbHRzOyBpKyspIHtcbiAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCBiYS5kYXRhW2ldKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgMTA6IC8vIEZsb2F0MzJBcnJheSAoY29tcGxleDMyKVxuICAgIG51bV9lbHRzICo9MjsgLyogZmFsbHRocm91Z2ggKi9cbiAgY2FzZSAwOiAgLy8gRmxvYXQzMkFycmF5XG4gICAgaWYgKG51bV9lbHRzID4gNjQpIG51bV9lbHRzID0gNjQ7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1fZWx0czsgaSsrKSBoID0gY2FtbF9oYXNoX21peF9mbG9hdChoLCBiYS5kYXRhW2ldKTtcbiAgICBicmVhaztcbiAgY2FzZSAxMTogLy8gRmxvYXQ2NEFycmF5IChjb21wbGV4NjQpXG4gICAgbnVtX2VsdHMgKj0yOyAvKiBmYWxsdGhyb3VnaCAqL1xuICBjYXNlIDE6ICAvLyBGbG9hdDY0QXJyYXlcbiAgICBpZiAobnVtX2VsdHMgPiAzMikgbnVtX2VsdHMgPSAzMjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bV9lbHRzOyBpKyspIGggPSBjYW1sX2hhc2hfbWl4X2Zsb2F0KGgsIGJhLmRhdGFbaV0pO1xuICAgIGJyZWFrO1xuICB9XG4gIHJldHVybiBoO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3RvX3R5cGVkX2FycmF5IG11dGFibGVcbmZ1bmN0aW9uIGNhbWxfYmFfdG9fdHlwZWRfYXJyYXkoYmEpe1xuICByZXR1cm4gYmEuZGF0YTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9raW5kX29mX3R5cGVkX2FycmF5IG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9iYV9raW5kX29mX3R5cGVkX2FycmF5KHRhKXtcbiAgdmFyIGcgPSBnbG9iYWxUaGlzO1xuICB2YXIga2luZDtcbiAgaWYgKHRhIGluc3RhbmNlb2YgZy5GbG9hdDMyQXJyYXkpIGtpbmQgPSAwO1xuICBlbHNlIGlmICh0YSBpbnN0YW5jZW9mIGcuRmxvYXQ2NEFycmF5KSBraW5kID0gMTtcbiAgZWxzZSBpZiAodGEgaW5zdGFuY2VvZiBnLkludDhBcnJheSkga2luZCA9IDI7XG4gIGVsc2UgaWYgKHRhIGluc3RhbmNlb2YgZy5VaW50OEFycmF5KSBraW5kID0gMztcbiAgZWxzZSBpZiAodGEgaW5zdGFuY2VvZiBnLkludDE2QXJyYXkpIGtpbmQgPSA0O1xuICBlbHNlIGlmICh0YSBpbnN0YW5jZW9mIGcuVWludDE2QXJyYXkpIGtpbmQgPSA1O1xuICBlbHNlIGlmICh0YSBpbnN0YW5jZW9mIGcuSW50MzJBcnJheSkga2luZCA9IDY7XG4gIGVsc2UgaWYgKHRhIGluc3RhbmNlb2YgZy5VaW50MzJBcnJheSkga2luZCA9IDY7XG4gIGVsc2UgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY2FtbF9iYV9raW5kX29mX3R5cGVkX2FycmF5OiB1bnN1cHBvcnRlZCBraW5kXCIpO1xuICByZXR1cm4ga2luZDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9mcm9tX3R5cGVkX2FycmF5IG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfYmFfa2luZF9vZl90eXBlZF9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9iYV9jcmVhdGVfdW5zYWZlXG5mdW5jdGlvbiBjYW1sX2JhX2Zyb21fdHlwZWRfYXJyYXkodGEpe1xuICB2YXIga2luZCA9IGNhbWxfYmFfa2luZF9vZl90eXBlZF9hcnJheSh0YSk7XG4gIHJldHVybiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoa2luZCwgMCwgW3RhLmxlbmd0aF0sIHRhKTtcbn1cbiIsIi8vIEpzX29mX29jYW1sIGxpYnJhcnlcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTAgSsOpcsO0bWUgVm91aWxsb25cbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8vLy8vLy8vLy8vLyBKc2xpYlxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3B1cmVfZXhwciBjb25zdFxuZnVuY3Rpb24gY2FtbF9qc19wdXJlX2V4cHIgKGYpIHsgcmV0dXJuIGYoKTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3NldCAobXV0YWJsZSwgY29uc3QsIGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc19zZXQobyxmLHYpIHsgb1tmXT12O3JldHVybiAwfVxuLy9Qcm92aWRlczogY2FtbF9qc19nZXQgbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc19nZXQobyxmKSB7IHJldHVybiBvW2ZdOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2RlbGV0ZSAobXV0YWJsZSwgY29uc3QpXG5mdW5jdGlvbiBjYW1sX2pzX2RlbGV0ZShvLGYpIHsgZGVsZXRlIG9bZl07IHJldHVybiAwfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2luc3RhbmNlb2YgKGNvbnN0LCBjb25zdClcbmZ1bmN0aW9uIGNhbWxfanNfaW5zdGFuY2VvZihvLGMpIHsgcmV0dXJuIChvIGluc3RhbmNlb2YgYykgPyAxIDogMDsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3R5cGVvZiAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX2pzX3R5cGVvZihvKSB7IHJldHVybiB0eXBlb2YgbzsgfVxuXG4vL1Byb3ZpZGVzOmNhbWxfdHJhbXBvbGluZVxuZnVuY3Rpb24gY2FtbF90cmFtcG9saW5lKHJlcykge1xuICB2YXIgYyA9IDE7XG4gIHdoaWxlKHJlcyAmJiByZXMuam9vX3RyYW1wKXtcbiAgICByZXMgPSByZXMuam9vX3RyYW1wLmFwcGx5KG51bGwsIHJlcy5qb29fYXJncyk7XG4gICAgYysrO1xuICB9XG4gIHJldHVybiByZXM7XG59XG5cbi8vUHJvdmlkZXM6Y2FtbF90cmFtcG9saW5lX3JldHVyblxuZnVuY3Rpb24gY2FtbF90cmFtcG9saW5lX3JldHVybihmLGFyZ3MpIHtcbiAgcmV0dXJuIHtqb29fdHJhbXA6Zixqb29fYXJnczphcmdzfTtcbn1cblxuLy9Qcm92aWRlczoganNfcHJpbnRfc3Rkb3V0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfdXRmMTZfb2ZfdXRmOFxuZnVuY3Rpb24ganNfcHJpbnRfc3Rkb3V0KHMpIHtcbiAgdmFyIHMgPSBjYW1sX3V0ZjE2X29mX3V0Zjgocyk7XG4gIHZhciBnID0gZ2xvYmFsVGhpcztcbiAgaWYgKGcucHJvY2VzcyAmJiBnLnByb2Nlc3Muc3Rkb3V0ICYmIGcucHJvY2Vzcy5zdGRvdXQud3JpdGUpIHtcbiAgICBnLnByb2Nlc3Muc3Rkb3V0LndyaXRlKHMpXG4gIH0gZWxzZSB7XG4gICAgLy8gRG8gbm90IG91dHB1dCB0aGUgbGFzdCBcXG4gaWYgcHJlc2VudFxuICAgIC8vIGFzIGNvbnNvbGUgbG9nZ2luZyBkaXNwbGF5IGEgbmV3bGluZSBhdCB0aGUgZW5kXG4gICAgaWYocy5jaGFyQ29kZUF0KHMubGVuZ3RoIC0gMSkgPT0gMTApXG4gICAgICBzID0gcy5zdWJzdHIoMCxzLmxlbmd0aCAtIDEgKTtcbiAgICB2YXIgdiA9IGcuY29uc29sZTtcbiAgICB2ICAmJiB2LmxvZyAmJiB2LmxvZyhzKTtcbiAgfVxufVxuLy9Qcm92aWRlczoganNfcHJpbnRfc3RkZXJyIChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfdXRmMTZfb2ZfdXRmOFxuZnVuY3Rpb24ganNfcHJpbnRfc3RkZXJyKHMpIHtcbiAgdmFyIHMgPSBjYW1sX3V0ZjE2X29mX3V0Zjgocyk7XG4gIHZhciBnID0gZ2xvYmFsVGhpcztcbiAgaWYgKGcucHJvY2VzcyAmJiBnLnByb2Nlc3Muc3Rkb3V0ICYmIGcucHJvY2Vzcy5zdGRvdXQud3JpdGUpIHtcbiAgICBnLnByb2Nlc3Muc3RkZXJyLndyaXRlKHMpXG4gIH0gZWxzZSB7XG4gICAgLy8gRG8gbm90IG91dHB1dCB0aGUgbGFzdCBcXG4gaWYgcHJlc2VudFxuICAgIC8vIGFzIGNvbnNvbGUgbG9nZ2luZyBkaXNwbGF5IGEgbmV3bGluZSBhdCB0aGUgZW5kXG4gICAgaWYocy5jaGFyQ29kZUF0KHMubGVuZ3RoIC0gMSkgPT0gMTApXG4gICAgICBzID0gcy5zdWJzdHIoMCxzLmxlbmd0aCAtIDEgKTtcbiAgICB2YXIgdiA9IGcuY29uc29sZTtcbiAgICB2ICYmIHYuZXJyb3IgJiYgdi5lcnJvcihzKTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2lzX2pzXG5mdW5jdGlvbiBjYW1sX2lzX2pzKCkge1xuICByZXR1cm4gMTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF93cmFwX2V4Y2VwdGlvbiBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2dsb2JhbF9kYXRhLGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nLGNhbWxfbmFtZWRfdmFsdWVcbi8vUmVxdWlyZXM6IGNhbWxfcmV0dXJuX2V4bl9jb25zdGFudFxuZnVuY3Rpb24gY2FtbF93cmFwX2V4Y2VwdGlvbihlKSB7XG4gIGlmKGUgaW5zdGFuY2VvZiBBcnJheSkgcmV0dXJuIGU7XG4gIC8vU3RhY2tfb3ZlcmZsb3c6IGNocm9tZSwgc2FmYXJpXG4gIGlmKGdsb2JhbFRoaXMuUmFuZ2VFcnJvclxuICAgICAmJiBlIGluc3RhbmNlb2YgZ2xvYmFsVGhpcy5SYW5nZUVycm9yXG4gICAgICYmIGUubWVzc2FnZVxuICAgICAmJiBlLm1lc3NhZ2UubWF0Y2goL21heGltdW0gY2FsbCBzdGFjay9pKSlcbiAgICByZXR1cm4gY2FtbF9yZXR1cm5fZXhuX2NvbnN0YW50KGNhbWxfZ2xvYmFsX2RhdGEuU3RhY2tfb3ZlcmZsb3cpO1xuICAvL1N0YWNrX292ZXJmbG93OiBmaXJlZm94XG4gIGlmKGdsb2JhbFRoaXMuSW50ZXJuYWxFcnJvclxuICAgICAmJiBlIGluc3RhbmNlb2YgZ2xvYmFsVGhpcy5JbnRlcm5hbEVycm9yXG4gICAgICYmIGUubWVzc2FnZVxuICAgICAmJiBlLm1lc3NhZ2UubWF0Y2goL3RvbyBtdWNoIHJlY3Vyc2lvbi9pKSlcbiAgICByZXR1cm4gY2FtbF9yZXR1cm5fZXhuX2NvbnN0YW50KGNhbWxfZ2xvYmFsX2RhdGEuU3RhY2tfb3ZlcmZsb3cpO1xuICAvL1dyYXAgRXJyb3IgaW4gSnMuRXJyb3IgZXhjZXB0aW9uXG4gIGlmKGUgaW5zdGFuY2VvZiBnbG9iYWxUaGlzLkVycm9yICYmIGNhbWxfbmFtZWRfdmFsdWUoXCJqc0Vycm9yXCIpKVxuICAgIHJldHVybiBbMCxjYW1sX25hbWVkX3ZhbHVlKFwianNFcnJvclwiKSxlXTtcbiAgLy9mYWxsYmFjazogd3JhcHBlZCBpbiBGYWlsdXJlXG4gIHJldHVybiBbMCxjYW1sX2dsb2JhbF9kYXRhLkZhaWx1cmUsY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcgKFN0cmluZyhlKSldO1xufVxuXG4vLyBFeHBlcmltZW50YWxcbi8vUHJvdmlkZXM6IGNhbWxfZXhuX3dpdGhfanNfYmFja3RyYWNlXG4vL1JlcXVpcmVzOiBjYW1sX2dsb2JhbF9kYXRhXG5mdW5jdGlvbiBjYW1sX2V4bl93aXRoX2pzX2JhY2t0cmFjZShleG4sIGZvcmNlKSB7XG4gIC8vbmV2ZXIgcmVyYWlzZSBmb3IgY29uc3RhbnQgZXhuXG4gIGlmKCFleG4uanNfZXJyb3IgfHwgZm9yY2UgfHwgZXhuWzBdID09IDI0OCkgZXhuLmpzX2Vycm9yID0gbmV3IGdsb2JhbFRoaXMuRXJyb3IoXCJKcyBleGNlcHRpb24gY29udGFpbmluZyBiYWNrdHJhY2VcIik7XG4gIHJldHVybiBleG47XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9qc19lcnJvcl9vcHRpb25fb2ZfZXhjZXB0aW9uXG5mdW5jdGlvbiBjYW1sX2pzX2Vycm9yX29wdGlvbl9vZl9leGNlcHRpb24oZXhuKSB7XG4gIGlmKGV4bi5qc19lcnJvcikgeyByZXR1cm4gWzAsIGV4bi5qc19lcnJvcl07IH1cbiAgcmV0dXJuIDA7XG59XG5cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2Zyb21fYm9vbCBjb25zdCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX2pzX2Zyb21fYm9vbCh4KSB7IHJldHVybiAhIXg7IH1cbi8vUHJvdmlkZXM6IGNhbWxfanNfdG9fYm9vbCBjb25zdCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX2pzX3RvX2Jvb2woeCkgeyByZXR1cm4gK3g7IH1cbi8vUHJvdmlkZXM6IGNhbWxfanNfZnJvbV9mbG9hdCBjb25zdCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX2pzX2Zyb21fZmxvYXQoeCkgeyByZXR1cm4geDsgfVxuLy9Qcm92aWRlczogY2FtbF9qc190b19mbG9hdCBjb25zdCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX2pzX3RvX2Zsb2F0KHgpIHsgcmV0dXJuIHg7IH1cblxuLy9Qcm92aWRlczogY2FtbF9qc19mcm9tX2FycmF5IG11dGFibGUgKHNoYWxsb3cpXG5mdW5jdGlvbiBjYW1sX2pzX2Zyb21fYXJyYXkoYSkge1xuICByZXR1cm4gYS5zbGljZSgxKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfdG9fYXJyYXkgbXV0YWJsZSAoc2hhbGxvdylcbmZ1bmN0aW9uIGNhbWxfanNfdG9fYXJyYXkoYSkge1xuICB2YXIgbGVuID0gYS5sZW5ndGg7XG4gIHZhciBiID0gbmV3IEFycmF5KGxlbisxKTtcbiAgYlswXSA9IDA7XG4gIGZvcih2YXIgaT0wO2k8bGVuO2krKykgYltpKzFdID0gYVtpXTtcbiAgcmV0dXJuIGI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbGlzdF9vZl9qc19hcnJheSBjb25zdCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX2xpc3Rfb2ZfanNfYXJyYXkoYSl7XG4gIHZhciBsID0gMDtcbiAgZm9yKHZhciBpPWEubGVuZ3RoIC0gMTsgaT49MDsgaS0tKXtcbiAgICB2YXIgZSA9IGFbaV07XG4gICAgbCA9IFswLGUsbF07XG4gIH1cbiAgcmV0dXJuIGxcbn1cblxuLy9Qcm92aWRlczogY2FtbF9saXN0X3RvX2pzX2FycmF5IGNvbnN0IChjb25zdClcbmZ1bmN0aW9uIGNhbWxfbGlzdF90b19qc19hcnJheShsKXtcbiAgdmFyIGEgPSBbXTtcbiAgZm9yKDsgbCAhPT0gMDsgbCA9IGxbMl0pIHtcbiAgICBhLnB1c2gobFsxXSk7XG4gIH1cbiAgcmV0dXJuIGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfdmFyIG11dGFibGUgKGNvbnN0KVxuLy9SZXF1aXJlczoganNfcHJpbnRfc3RkZXJyXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc192YXIoeCkge1xuICB2YXIgeCA9IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHgpO1xuICAvL0NoZWNrcyB0aGF0IHggaGFzIHRoZSBmb3JtIGlkZW50Wy5pZGVudF0qXG4gIGlmKCF4Lm1hdGNoKC9eW2EtekEtWl8kXVthLXpBLVpfJDAtOV0qKFxcLlthLXpBLVpfJF1bYS16QS1aXyQwLTldKikqJC8pKXtcbiAgICBqc19wcmludF9zdGRlcnIoXCJjYW1sX2pzX3ZhcjogXFxcIlwiICsgeCArIFwiXFxcIiBpcyBub3QgYSB2YWxpZCBKYXZhU2NyaXB0IHZhcmlhYmxlLiBjb250aW51aW5nIC4uXCIpO1xuICAgIC8vZ2xvYmFsVGhpcy5jb25zb2xlLmVycm9yKFwiSnMuVW5zYWZlLmV2YWxfc3RyaW5nXCIpXG4gIH1cbiAgcmV0dXJuIGV2YWwoeCk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2NhbGwgKGNvbnN0LCBtdXRhYmxlLCBzaGFsbG93KVxuLy9SZXF1aXJlczogY2FtbF9qc19mcm9tX2FycmF5XG5mdW5jdGlvbiBjYW1sX2pzX2NhbGwoZiwgbywgYXJncykgeyByZXR1cm4gZi5hcHBseShvLCBjYW1sX2pzX2Zyb21fYXJyYXkoYXJncykpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2Z1bl9jYWxsIChjb25zdCwgc2hhbGxvdylcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuZnVuY3Rpb24gY2FtbF9qc19mdW5fY2FsbChmLCBhKSB7XG4gIHN3aXRjaCAoYS5sZW5ndGgpIHtcbiAgY2FzZSAxOiByZXR1cm4gZigpO1xuICBjYXNlIDI6IHJldHVybiBmIChhWzFdKTtcbiAgY2FzZSAzOiByZXR1cm4gZiAoYVsxXSxhWzJdKTtcbiAgY2FzZSA0OiByZXR1cm4gZiAoYVsxXSxhWzJdLGFbM10pO1xuICBjYXNlIDU6IHJldHVybiBmIChhWzFdLGFbMl0sYVszXSxhWzRdKTtcbiAgY2FzZSA2OiByZXR1cm4gZiAoYVsxXSxhWzJdLGFbM10sYVs0XSxhWzVdKTtcbiAgY2FzZSA3OiByZXR1cm4gZiAoYVsxXSxhWzJdLGFbM10sYVs0XSxhWzVdLGFbNl0pO1xuICBjYXNlIDg6IHJldHVybiBmIChhWzFdLGFbMl0sYVszXSxhWzRdLGFbNV0sYVs2XSxhWzddKTtcbiAgfVxuICByZXR1cm4gZi5hcHBseShudWxsLCBjYW1sX2pzX2Zyb21fYXJyYXkoYSkpO1xufVxuLy9Qcm92aWRlczogY2FtbF9qc19tZXRoX2NhbGwgKG11dGFibGUsIGNvbnN0LCBzaGFsbG93KVxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuZnVuY3Rpb24gY2FtbF9qc19tZXRoX2NhbGwobywgZiwgYXJncykge1xuICByZXR1cm4gb1tjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhmKV0uYXBwbHkobywgY2FtbF9qc19mcm9tX2FycmF5KGFyZ3MpKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfbmV3IChjb25zdCwgc2hhbGxvdylcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuZnVuY3Rpb24gY2FtbF9qc19uZXcoYywgYSkge1xuICBzd2l0Y2ggKGEubGVuZ3RoKSB7XG4gIGNhc2UgMTogcmV0dXJuIG5ldyBjO1xuICBjYXNlIDI6IHJldHVybiBuZXcgYyAoYVsxXSk7XG4gIGNhc2UgMzogcmV0dXJuIG5ldyBjIChhWzFdLGFbMl0pO1xuICBjYXNlIDQ6IHJldHVybiBuZXcgYyAoYVsxXSxhWzJdLGFbM10pO1xuICBjYXNlIDU6IHJldHVybiBuZXcgYyAoYVsxXSxhWzJdLGFbM10sYVs0XSk7XG4gIGNhc2UgNjogcmV0dXJuIG5ldyBjIChhWzFdLGFbMl0sYVszXSxhWzRdLGFbNV0pO1xuICBjYXNlIDc6IHJldHVybiBuZXcgYyAoYVsxXSxhWzJdLGFbM10sYVs0XSxhWzVdLGFbNl0pO1xuICBjYXNlIDg6IHJldHVybiBuZXcgYyAoYVsxXSxhWzJdLGFbM10sYVs0XSxhWzVdLGFbNl0sYVs3XSk7XG4gIH1cbiAgZnVuY3Rpb24gRigpIHsgcmV0dXJuIGMuYXBwbHkodGhpcywgY2FtbF9qc19mcm9tX2FycmF5KGEpKTsgfVxuICBGLnByb3RvdHlwZSA9IGMucHJvdG90eXBlO1xuICByZXR1cm4gbmV3IEY7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX29qc19uZXdfYXJyIChjb25zdCwgc2hhbGxvdylcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuZnVuY3Rpb24gY2FtbF9vanNfbmV3X2FycihjLCBhKSB7XG4gIHN3aXRjaCAoYS5sZW5ndGgpIHtcbiAgY2FzZSAwOiByZXR1cm4gbmV3IGM7XG4gIGNhc2UgMTogcmV0dXJuIG5ldyBjIChhWzBdKTtcbiAgY2FzZSAyOiByZXR1cm4gbmV3IGMgKGFbMF0sYVsxXSk7XG4gIGNhc2UgMzogcmV0dXJuIG5ldyBjIChhWzBdLGFbMV0sYVsyXSk7XG4gIGNhc2UgNDogcmV0dXJuIG5ldyBjIChhWzBdLGFbMV0sYVsyXSxhWzNdKTtcbiAgY2FzZSA1OiByZXR1cm4gbmV3IGMgKGFbMF0sYVsxXSxhWzJdLGFbM10sYVs0XSk7XG4gIGNhc2UgNjogcmV0dXJuIG5ldyBjIChhWzBdLGFbMV0sYVsyXSxhWzNdLGFbNF0sYVs1XSk7XG4gIGNhc2UgNzogcmV0dXJuIG5ldyBjIChhWzBdLGFbMV0sYVsyXSxhWzNdLGFbNF0sYVs1XSxhWzZdKTtcbiAgfVxuICBmdW5jdGlvbiBGKCkgeyByZXR1cm4gYy5hcHBseSh0aGlzLCBhKTsgfVxuICBGLnByb3RvdHlwZSA9IGMucHJvdG90eXBlO1xuICByZXR1cm4gbmV3IEY7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3dyYXBfY2FsbGJhY2sgY29uc3QgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jYWxsX2dlblxuZnVuY3Rpb24gY2FtbF9qc193cmFwX2NhbGxiYWNrKGYpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBpZihsZW4gPiAwKXtcbiAgICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGxlbik7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSBhcmdzW2ldID0gYXJndW1lbnRzW2ldO1xuICAgICAgcmV0dXJuIGNhbWxfY2FsbF9nZW4oZiwgYXJncyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBjYW1sX2NhbGxfZ2VuKGYsIFt1bmRlZmluZWRdKTtcbiAgICB9XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc193cmFwX2NhbGxiYWNrX2FyZ3VtZW50c1xuLy9SZXF1aXJlczogY2FtbF9jYWxsX2dlblxuZnVuY3Rpb24gY2FtbF9qc193cmFwX2NhbGxiYWNrX2FyZ3VtZW50cyhmKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShsZW4pO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIGFyZ3NbaV0gPSBhcmd1bWVudHNbaV07XG4gICAgcmV0dXJuIGNhbWxfY2FsbF9nZW4oZiwgW2FyZ3NdKTtcbiAgfVxufVxuLy9Qcm92aWRlczogY2FtbF9qc193cmFwX2NhbGxiYWNrX3N0cmljdCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9jYWxsX2dlblxuZnVuY3Rpb24gY2FtbF9qc193cmFwX2NhbGxiYWNrX3N0cmljdChhcml0eSwgZikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBpZihuID09IGFyaXR5ICYmIGYubGVuZ3RoID09IGFyaXR5KSByZXR1cm4gZi5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyaXR5KTtcbiAgICB2YXIgbGVuID0gTWF0aC5taW4oYXJndW1lbnRzLmxlbmd0aCwgYXJpdHkpXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICByZXR1cm4gY2FtbF9jYWxsX2dlbihmLCBhcmdzKTtcbiAgfTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrIGNvbnN0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbF9nZW5cbmZ1bmN0aW9uIGNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrKGYpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShsZW4gKyAxKTtcbiAgICBhcmdzWzBdID0gdGhpcztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSBhcmdzW2krMV0gPSBhcmd1bWVudHNbaV07XG4gICAgcmV0dXJuIGNhbWxfY2FsbF9nZW4oZixhcmdzKTtcbiAgfVxufVxuLy9Qcm92aWRlczogY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfYXJndW1lbnRzIGNvbnN0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbF9nZW5cbmZ1bmN0aW9uIGNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrX2FyZ3VtZW50cyhmKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkobGVuKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSBhcmdzW2ldID0gYXJndW1lbnRzW2ldO1xuICAgIHJldHVybiBjYW1sX2NhbGxfZ2VuKGYsW3RoaXMsYXJnc10pO1xuICB9XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja19zdHJpY3QgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbF9nZW5cbmZ1bmN0aW9uIGNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrX3N0cmljdChhcml0eSwgZikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyaXR5ICsgMSk7XG4gICAgdmFyIGxlbiA9IE1hdGgubWluKGFyZ3VtZW50cy5sZW5ndGgsIGFyaXR5KVxuICAgIGFyZ3NbMF0gPSB0aGlzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIGFyZ3NbaSsxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICByZXR1cm4gY2FtbF9jYWxsX2dlbihmLCBhcmdzKTtcbiAgfTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrX3Vuc2FmZSBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NhbGxfZ2VuXG5mdW5jdGlvbiBjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja191bnNhZmUoZikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGxlbiArIDEpO1xuICAgIGFyZ3NbMF0gPSB0aGlzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIGFyZ3NbaSsxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICByZXR1cm4gZi5hcHBseShudWxsLCBhcmdzKTsgfVxufVxuLy9Qcm92aWRlczogY2FtbF9qc19lcXVhbHMgbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc19lcXVhbHMgKHgsIHkpIHsgcmV0dXJuICsoeCA9PSB5KTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2V2YWxfc3RyaW5nIChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzX2V2YWxfc3RyaW5nIChzKSB7cmV0dXJuIGV2YWwoY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcocykpO31cblxuLy9Qcm92aWRlczogY2FtbF9qc19leHByIChjb25zdClcbi8vUmVxdWlyZXM6IGpzX3ByaW50X3N0ZGVyclxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNfZXhwcihzKSB7XG4gIGpzX3ByaW50X3N0ZGVycihcImNhbWxfanNfZXhwcjogZmFsbGJhY2sgdG8gcnVudGltZSBldmFsdWF0aW9uXFxuXCIpO1xuICByZXR1cm4gZXZhbChjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhzKSk7fVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3B1cmVfanNfZXhwciBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBqc19wcmludF9zdGRlcnJcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3B1cmVfanNfZXhwciAocyl7XG4gIGpzX3ByaW50X3N0ZGVycihcImNhbWxfcHVyZV9qc19leHByOiBmYWxsYmFjayB0byBydW50aW1lIGV2YWx1YXRpb25cXG5cIik7XG4gIHJldHVybiBldmFsKGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMpKTt9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfb2JqZWN0IChvYmplY3RfbGl0ZXJhbClcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzX29iamVjdCAoYSkge1xuICB2YXIgbyA9IHt9O1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcCA9IGFbaV07XG4gICAgb1tjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhwWzFdKV0gPSBwWzJdO1xuICB9XG4gIHJldHVybiBvO1xufVxuIiwiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3RpdmUgQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAqL1xuLyogIGVuIEF1dG9tYXRpcXVlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCAgICAqL1xuLyogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB3aXRoICAgICAqL1xuLyogIHRoZSBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiBmaWxlIC4uL0xJQ0VOU0UuICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4vKiAkSWQ6IHBhcnNpbmcuYyA4OTgzIDIwMDgtMDgtMDYgMDk6Mzg6MjVaIHhsZXJveSAkICovXG5cbi8qIFRoZSBQREEgYXV0b21hdG9uIGZvciBwYXJzZXJzIGdlbmVyYXRlZCBieSBjYW1seWFjYyAqL1xuXG4vKiBUaGUgcHVzaGRvd24gYXV0b21hdGEgKi9cblxuLy9Qcm92aWRlczogY2FtbF9wYXJzZV9lbmdpbmVcbi8vUmVxdWlyZXM6IGNhbWxfbGV4X2FycmF5XG5mdW5jdGlvbiBjYW1sX3BhcnNlX2VuZ2luZSh0YWJsZXMsIGVudiwgY21kLCBhcmcpXG57XG4gIHZhciBFUlJDT0RFID0gMjU2O1xuXG4gIC8vdmFyIFNUQVJUID0gMDtcbiAgLy92YXIgVE9LRU5fUkVBRCA9IDE7XG4gIC8vdmFyIFNUQUNLU19HUk9XTl8xID0gMjtcbiAgLy92YXIgU1RBQ0tTX0dST1dOXzIgPSAzO1xuICAvL3ZhciBTRU1BTlRJQ19BQ1RJT05fQ09NUFVURUQgPSA0O1xuICAvL3ZhciBFUlJPUl9ERVRFQ1RFRCA9IDU7XG4gIHZhciBsb29wID0gNjtcbiAgdmFyIHRlc3RzaGlmdCA9IDc7XG4gIHZhciBzaGlmdCA9IDg7XG4gIHZhciBzaGlmdF9yZWNvdmVyID0gOTtcbiAgdmFyIHJlZHVjZSA9IDEwO1xuXG4gIHZhciBSRUFEX1RPS0VOID0gMDtcbiAgdmFyIFJBSVNFX1BBUlNFX0VSUk9SID0gMTtcbiAgdmFyIEdST1dfU1RBQ0tTXzEgPSAyO1xuICB2YXIgR1JPV19TVEFDS1NfMiA9IDM7XG4gIHZhciBDT01QVVRFX1NFTUFOVElDX0FDVElPTiA9IDQ7XG4gIHZhciBDQUxMX0VSUk9SX0ZVTkNUSU9OID0gNTtcblxuICB2YXIgZW52X3Nfc3RhY2sgPSAxO1xuICB2YXIgZW52X3Zfc3RhY2sgPSAyO1xuICB2YXIgZW52X3N5bWJfc3RhcnRfc3RhY2sgPSAzO1xuICB2YXIgZW52X3N5bWJfZW5kX3N0YWNrID0gNDtcbiAgdmFyIGVudl9zdGFja3NpemUgPSA1O1xuICB2YXIgZW52X3N0YWNrYmFzZSA9IDY7XG4gIHZhciBlbnZfY3Vycl9jaGFyID0gNztcbiAgdmFyIGVudl9sdmFsID0gODtcbiAgdmFyIGVudl9zeW1iX3N0YXJ0ID0gOTtcbiAgdmFyIGVudl9zeW1iX2VuZCA9IDEwO1xuICB2YXIgZW52X2FzcCA9IDExO1xuICB2YXIgZW52X3J1bGVfbGVuID0gMTI7XG4gIHZhciBlbnZfcnVsZV9udW1iZXIgPSAxMztcbiAgdmFyIGVudl9zcCA9IDE0O1xuICB2YXIgZW52X3N0YXRlID0gMTU7XG4gIHZhciBlbnZfZXJyZmxhZyA9IDE2O1xuXG4gIC8vIHZhciBfdGJsX2FjdGlvbnMgPSAxO1xuICB2YXIgdGJsX3RyYW5zbF9jb25zdCA9IDI7XG4gIHZhciB0YmxfdHJhbnNsX2Jsb2NrID0gMztcbiAgdmFyIHRibF9saHMgPSA0O1xuICB2YXIgdGJsX2xlbiA9IDU7XG4gIHZhciB0YmxfZGVmcmVkID0gNjtcbiAgdmFyIHRibF9kZ290byA9IDc7XG4gIHZhciB0Ymxfc2luZGV4ID0gODtcbiAgdmFyIHRibF9yaW5kZXggPSA5O1xuICB2YXIgdGJsX2dpbmRleCA9IDEwO1xuICB2YXIgdGJsX3RhYmxlc2l6ZSA9IDExO1xuICB2YXIgdGJsX3RhYmxlID0gMTI7XG4gIHZhciB0YmxfY2hlY2sgPSAxMztcbiAgLy8gdmFyIF90YmxfZXJyb3JfZnVuY3Rpb24gPSAxNDtcbiAgLy8gdmFyIF90YmxfbmFtZXNfY29uc3QgPSAxNTtcbiAgLy8gdmFyIF90YmxfbmFtZXNfYmxvY2sgPSAxNjtcblxuICBpZiAoIXRhYmxlcy5kZ290bykge1xuICAgIHRhYmxlcy5kZWZyZWQgPSBjYW1sX2xleF9hcnJheSAodGFibGVzW3RibF9kZWZyZWRdKTtcbiAgICB0YWJsZXMuc2luZGV4ID0gY2FtbF9sZXhfYXJyYXkgKHRhYmxlc1t0Ymxfc2luZGV4XSk7XG4gICAgdGFibGVzLmNoZWNrICA9IGNhbWxfbGV4X2FycmF5ICh0YWJsZXNbdGJsX2NoZWNrXSk7XG4gICAgdGFibGVzLnJpbmRleCA9IGNhbWxfbGV4X2FycmF5ICh0YWJsZXNbdGJsX3JpbmRleF0pO1xuICAgIHRhYmxlcy50YWJsZSAgPSBjYW1sX2xleF9hcnJheSAodGFibGVzW3RibF90YWJsZV0pO1xuICAgIHRhYmxlcy5sZW4gICAgPSBjYW1sX2xleF9hcnJheSAodGFibGVzW3RibF9sZW5dKTtcbiAgICB0YWJsZXMubGhzICAgID0gY2FtbF9sZXhfYXJyYXkgKHRhYmxlc1t0YmxfbGhzXSk7XG4gICAgdGFibGVzLmdpbmRleCA9IGNhbWxfbGV4X2FycmF5ICh0YWJsZXNbdGJsX2dpbmRleF0pO1xuICAgIHRhYmxlcy5kZ290byAgPSBjYW1sX2xleF9hcnJheSAodGFibGVzW3RibF9kZ290b10pO1xuICB9XG5cbiAgdmFyIHJlcyA9IDAsIG4sIG4xLCBuMiwgc3RhdGUxO1xuXG4gIC8vIFJFU1RPUkVcbiAgdmFyIHNwID0gZW52W2Vudl9zcF07XG4gIHZhciBzdGF0ZSA9IGVudltlbnZfc3RhdGVdO1xuICB2YXIgZXJyZmxhZyA9IGVudltlbnZfZXJyZmxhZ107XG5cbiAgZXhpdDpmb3IgKDs7KSB7XG4gICAgc3dpdGNoKGNtZCkge1xuICAgIGNhc2UgMDovL1NUQVJUOlxuICAgICAgc3RhdGUgPSAwO1xuICAgICAgZXJyZmxhZyA9IDA7XG4gICAgICAvLyBGYWxsIHRocm91Z2hcblxuICAgIGNhc2UgNjovL2xvb3A6XG4gICAgICBuID0gdGFibGVzLmRlZnJlZFtzdGF0ZV07XG4gICAgICBpZiAobiAhPSAwKSB7IGNtZCA9IHJlZHVjZTsgYnJlYWs7IH1cbiAgICAgIGlmIChlbnZbZW52X2N1cnJfY2hhcl0gPj0gMCkgeyBjbWQgPSB0ZXN0c2hpZnQ7IGJyZWFrOyB9XG4gICAgICByZXMgPSBSRUFEX1RPS0VOO1xuICAgICAgYnJlYWsgZXhpdDtcbiAgICAgIC8qIFRoZSBNTCBjb2RlIGNhbGxzIHRoZSBsZXhlciBhbmQgdXBkYXRlcyAqL1xuICAgICAgLyogc3ltYl9zdGFydCBhbmQgc3ltYl9lbmQgKi9cbiAgICBjYXNlIDE6Ly9UT0tFTl9SRUFEOlxuICAgICAgaWYgKGFyZyBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgIGVudltlbnZfY3Vycl9jaGFyXSA9IHRhYmxlc1t0YmxfdHJhbnNsX2Jsb2NrXVthcmdbMF0gKyAxXTtcbiAgICAgICAgZW52W2Vudl9sdmFsXSA9IGFyZ1sxXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVudltlbnZfY3Vycl9jaGFyXSA9IHRhYmxlc1t0YmxfdHJhbnNsX2NvbnN0XVthcmcgKyAxXTtcbiAgICAgICAgZW52W2Vudl9sdmFsXSA9IDA7XG4gICAgICB9XG4gICAgICAvLyBGYWxsIHRocm91Z2hcblxuICAgIGNhc2UgNzovL3Rlc3RzaGlmdDpcbiAgICAgIG4xID0gdGFibGVzLnNpbmRleFtzdGF0ZV07XG4gICAgICBuMiA9IG4xICsgZW52W2Vudl9jdXJyX2NoYXJdO1xuICAgICAgaWYgKG4xICE9IDAgJiYgbjIgPj0gMCAmJiBuMiA8PSB0YWJsZXNbdGJsX3RhYmxlc2l6ZV0gJiZcbiAgICAgICAgICB0YWJsZXMuY2hlY2tbbjJdID09IGVudltlbnZfY3Vycl9jaGFyXSkge1xuICAgICAgICBjbWQgPSBzaGlmdDsgYnJlYWs7XG4gICAgICB9XG4gICAgICBuMSA9IHRhYmxlcy5yaW5kZXhbc3RhdGVdO1xuICAgICAgbjIgPSBuMSArIGVudltlbnZfY3Vycl9jaGFyXTtcbiAgICAgIGlmIChuMSAhPSAwICYmIG4yID49IDAgJiYgbjIgPD0gdGFibGVzW3RibF90YWJsZXNpemVdICYmXG4gICAgICAgICAgdGFibGVzLmNoZWNrW24yXSA9PSBlbnZbZW52X2N1cnJfY2hhcl0pIHtcbiAgICAgICAgbiA9IHRhYmxlcy50YWJsZVtuMl07XG4gICAgICAgIGNtZCA9IHJlZHVjZTsgYnJlYWs7XG4gICAgICB9XG4gICAgICBpZiAoZXJyZmxhZyA8PSAwKSB7XG4gICAgICAgIHJlcyA9IENBTExfRVJST1JfRlVOQ1RJT047XG4gICAgICAgIGJyZWFrIGV4aXQ7XG4gICAgICB9XG4gICAgICAvLyBGYWxsIHRocm91Z2hcbiAgICAgIC8qIFRoZSBNTCBjb2RlIGNhbGxzIHRoZSBlcnJvciBmdW5jdGlvbiAqL1xuICAgIGNhc2UgNTovL0VSUk9SX0RFVEVDVEVEOlxuICAgICAgaWYgKGVycmZsYWcgPCAzKSB7XG4gICAgICAgIGVycmZsYWcgPSAzO1xuICAgICAgICBmb3IgKDs7KSB7XG4gICAgICAgICAgc3RhdGUxID0gZW52W2Vudl9zX3N0YWNrXVtzcCArIDFdO1xuICAgICAgICAgIG4xID0gdGFibGVzLnNpbmRleFtzdGF0ZTFdO1xuICAgICAgICAgIG4yID0gbjEgKyBFUlJDT0RFO1xuICAgICAgICAgIGlmIChuMSAhPSAwICYmIG4yID49IDAgJiYgbjIgPD0gdGFibGVzW3RibF90YWJsZXNpemVdICYmXG4gICAgICAgICAgICAgIHRhYmxlcy5jaGVja1tuMl0gPT0gRVJSQ09ERSkge1xuICAgICAgICAgICAgY21kID0gc2hpZnRfcmVjb3ZlcjsgYnJlYWs7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChzcCA8PSBlbnZbZW52X3N0YWNrYmFzZV0pIHJldHVybiBSQUlTRV9QQVJTRV9FUlJPUjtcbiAgICAgICAgICAgIC8qIFRoZSBNTCBjb2RlIHJhaXNlcyBQYXJzZV9lcnJvciAqL1xuICAgICAgICAgICAgc3AtLTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChlbnZbZW52X2N1cnJfY2hhcl0gPT0gMCkgcmV0dXJuIFJBSVNFX1BBUlNFX0VSUk9SO1xuICAgICAgICAvKiBUaGUgTUwgY29kZSByYWlzZXMgUGFyc2VfZXJyb3IgKi9cbiAgICAgICAgZW52W2Vudl9jdXJyX2NoYXJdID0gLTE7XG4gICAgICAgIGNtZCA9IGxvb3A7IGJyZWFrO1xuICAgICAgfVxuICAgICAgLy8gRmFsbCB0aHJvdWdoXG4gICAgY2FzZSA4Oi8vc2hpZnQ6XG4gICAgICBlbnZbZW52X2N1cnJfY2hhcl0gPSAtMTtcbiAgICAgIGlmIChlcnJmbGFnID4gMCkgZXJyZmxhZy0tO1xuICAgICAgLy8gRmFsbCB0aHJvdWdoXG4gICAgY2FzZSA5Oi8vc2hpZnRfcmVjb3ZlcjpcbiAgICAgIHN0YXRlID0gdGFibGVzLnRhYmxlW24yXTtcbiAgICAgIHNwKys7XG4gICAgICBpZiAoc3AgPj0gZW52W2Vudl9zdGFja3NpemVdKSB7XG4gICAgICAgIHJlcyA9IEdST1dfU1RBQ0tTXzE7XG4gICAgICAgIGJyZWFrIGV4aXQ7XG4gICAgICB9XG4gICAgICAvLyBGYWxsIHRocm91Z2hcbiAgICAgIC8qIFRoZSBNTCBjb2RlIHJlc2l6ZXMgdGhlIHN0YWNrcyAqL1xuICAgIGNhc2UgMjovL1NUQUNLU19HUk9XTl8xOlxuICAgICAgZW52W2Vudl9zX3N0YWNrXVtzcCArIDFdID0gc3RhdGU7XG4gICAgICBlbnZbZW52X3Zfc3RhY2tdW3NwICsgMV0gPSBlbnZbZW52X2x2YWxdO1xuICAgICAgZW52W2Vudl9zeW1iX3N0YXJ0X3N0YWNrXVtzcCArIDFdID0gZW52W2Vudl9zeW1iX3N0YXJ0XTtcbiAgICAgIGVudltlbnZfc3ltYl9lbmRfc3RhY2tdW3NwICsgMV0gPSBlbnZbZW52X3N5bWJfZW5kXTtcbiAgICAgIGNtZCA9IGxvb3A7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgMTA6Ly9yZWR1Y2U6XG4gICAgICB2YXIgbSA9IHRhYmxlcy5sZW5bbl07XG4gICAgICBlbnZbZW52X2FzcF0gPSBzcDtcbiAgICAgIGVudltlbnZfcnVsZV9udW1iZXJdID0gbjtcbiAgICAgIGVudltlbnZfcnVsZV9sZW5dID0gbTtcbiAgICAgIHNwID0gc3AgLSBtICsgMTtcbiAgICAgIG0gPSB0YWJsZXMubGhzW25dO1xuICAgICAgc3RhdGUxID0gZW52W2Vudl9zX3N0YWNrXVtzcF07XG4gICAgICBuMSA9IHRhYmxlcy5naW5kZXhbbV07XG4gICAgICBuMiA9IG4xICsgc3RhdGUxO1xuICAgICAgaWYgKG4xICE9IDAgJiYgbjIgPj0gMCAmJiBuMiA8PSB0YWJsZXNbdGJsX3RhYmxlc2l6ZV0gJiZcbiAgICAgICAgICB0YWJsZXMuY2hlY2tbbjJdID09IHN0YXRlMSlcbiAgICAgICAgc3RhdGUgPSB0YWJsZXMudGFibGVbbjJdO1xuICAgICAgZWxzZVxuICAgICAgICBzdGF0ZSA9IHRhYmxlcy5kZ290b1ttXTtcbiAgICAgIGlmIChzcCA+PSBlbnZbZW52X3N0YWNrc2l6ZV0pIHtcbiAgICAgICAgcmVzID0gR1JPV19TVEFDS1NfMjtcbiAgICAgICAgYnJlYWsgZXhpdDtcbiAgICAgIH1cbiAgICAgIC8vIEZhbGwgdGhyb3VnaFxuICAgICAgLyogVGhlIE1MIGNvZGUgcmVzaXplcyB0aGUgc3RhY2tzICovXG4gICAgY2FzZSAzOi8vU1RBQ0tTX0dST1dOXzI6XG4gICAgICByZXMgPSBDT01QVVRFX1NFTUFOVElDX0FDVElPTjtcbiAgICAgIGJyZWFrIGV4aXQ7XG4gICAgICAvKiBUaGUgTUwgY29kZSBjYWxscyB0aGUgc2VtYW50aWMgYWN0aW9uICovXG4gICAgY2FzZSA0Oi8vU0VNQU5USUNfQUNUSU9OX0NPTVBVVEVEOlxuICAgICAgZW52W2Vudl9zX3N0YWNrXVtzcCArIDFdID0gc3RhdGU7XG4gICAgICBlbnZbZW52X3Zfc3RhY2tdW3NwICsgMV0gPSBhcmc7XG4gICAgICB2YXIgYXNwID0gZW52W2Vudl9hc3BdO1xuICAgICAgZW52W2Vudl9zeW1iX2VuZF9zdGFja11bc3AgKyAxXSA9IGVudltlbnZfc3ltYl9lbmRfc3RhY2tdW2FzcCArIDFdO1xuICAgICAgaWYgKHNwID4gYXNwKSB7XG4gICAgICAgIC8qIFRoaXMgaXMgYW4gZXBzaWxvbiBwcm9kdWN0aW9uLiBUYWtlIHN5bWJfc3RhcnQgZXF1YWwgdG8gc3ltYl9lbmQuICovXG4gICAgICAgIGVudltlbnZfc3ltYl9zdGFydF9zdGFja11bc3AgKyAxXSA9IGVudltlbnZfc3ltYl9lbmRfc3RhY2tdW2FzcCArIDFdO1xuICAgICAgfVxuICAgICAgY21kID0gbG9vcDsgYnJlYWs7XG4gICAgICAvKiBTaG91bGQgbm90IGhhcHBlbiAqL1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gUkFJU0VfUEFSU0VfRVJST1I7XG4gICAgfVxuICB9XG4gIC8vIFNBVkVcbiAgZW52W2Vudl9zcF0gPSBzcDtcbiAgZW52W2Vudl9zdGF0ZV0gPSBzdGF0ZTtcbiAgZW52W2Vudl9lcnJmbGFnXSA9IGVycmZsYWc7XG4gIHJldHVybiByZXM7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc2V0X3BhcnNlcl90cmFjZSBjb25zdFxuLy9EdW1teSBmdW5jdGlvbiFcbmZ1bmN0aW9uIGNhbWxfc2V0X3BhcnNlcl90cmFjZSgpIHsgcmV0dXJuIDA7IH1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGNhbWxfZm9ybWF0X2ludCBjb25zdCAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9wYXJzZV9mb3JtYXQsIGNhbWxfZmluaXNoX2Zvcm1hdHRpbmcsIGNhbWxfc3RyX3JlcGVhdFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlcywgY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9mb3JtYXRfaW50KGZtdCwgaSkge1xuICBpZiAoY2FtbF9qc2J5dGVzX29mX3N0cmluZyhmbXQpID09IFwiJWRcIikgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoXCJcIitpKTtcbiAgdmFyIGYgPSBjYW1sX3BhcnNlX2Zvcm1hdChmbXQpO1xuICBpZiAoaSA8IDApIHsgaWYgKGYuc2lnbmVkY29udikgeyBmLnNpZ24gPSAtMTsgaSA9IC1pOyB9IGVsc2UgaSA+Pj49IDA7IH1cbiAgdmFyIHMgPSBpLnRvU3RyaW5nKGYuYmFzZSk7XG4gIGlmIChmLnByZWMgPj0gMCkge1xuICAgIGYuZmlsbGVyID0gJyAnO1xuICAgIHZhciBuID0gZi5wcmVjIC0gcy5sZW5ndGg7XG4gICAgaWYgKG4gPiAwKSBzID0gY2FtbF9zdHJfcmVwZWF0IChuLCAnMCcpICsgcztcbiAgfVxuICByZXR1cm4gY2FtbF9maW5pc2hfZm9ybWF0dGluZyhmLCBzKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9wYXJzZV9zaWduX2FuZF9iYXNlXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ191bnNhZmVfZ2V0LCBjYW1sX21sX3N0cmluZ19sZW5ndGhcbmZ1bmN0aW9uIGNhbWxfcGFyc2Vfc2lnbl9hbmRfYmFzZSAocykge1xuICB2YXIgaSA9IDAsIGxlbiA9IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSwgYmFzZSA9IDEwLCBzaWduID0gMTtcbiAgaWYgKGxlbiA+IDApIHtcbiAgICBzd2l0Y2ggKGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocyxpKSkge1xuICAgIGNhc2UgNDU6IGkrKzsgc2lnbiA9IC0xOyBicmVhaztcbiAgICBjYXNlIDQzOiBpKys7IHNpZ24gPSAxOyBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKGkgKyAxIDwgbGVuICYmIGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSkgPT0gNDgpXG4gICAgc3dpdGNoIChjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsIGkgKyAxKSkge1xuICAgIGNhc2UgMTIwOiBjYXNlIDg4OiBiYXNlID0gMTY7IGkgKz0gMjsgYnJlYWs7XG4gICAgY2FzZSAxMTE6IGNhc2UgNzk6IGJhc2UgPSAgODsgaSArPSAyOyBicmVhaztcbiAgICBjYXNlICA5ODogY2FzZSA2NjogYmFzZSA9ICAyOyBpICs9IDI7IGJyZWFrO1xuICAgIGNhc2UgMTE3OiBjYXNlIDg1OiBpICs9IDI7IGJyZWFrO1xuICAgIH1cbiAgcmV0dXJuIFtpLCBzaWduLCBiYXNlXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9wYXJzZV9kaWdpdFxuZnVuY3Rpb24gY2FtbF9wYXJzZV9kaWdpdChjKSB7XG4gIGlmIChjID49IDQ4ICYmIGMgPD0gNTcpICByZXR1cm4gYyAtIDQ4O1xuICBpZiAoYyA+PSA2NSAmJiBjIDw9IDkwKSAgcmV0dXJuIGMgLSA1NTtcbiAgaWYgKGMgPj0gOTcgJiYgYyA8PSAxMjIpIHJldHVybiBjIC0gODc7XG4gIHJldHVybiAtMTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnRfb2Zfc3RyaW5nIChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aCwgY2FtbF9zdHJpbmdfdW5zYWZlX2dldFxuLy9SZXF1aXJlczogY2FtbF9wYXJzZV9zaWduX2FuZF9iYXNlLCBjYW1sX3BhcnNlX2RpZ2l0LCBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX2ludF9vZl9zdHJpbmcgKHMpIHtcbiAgdmFyIHIgPSBjYW1sX3BhcnNlX3NpZ25fYW5kX2Jhc2UgKHMpO1xuICB2YXIgaSA9IHJbMF0sIHNpZ24gPSByWzFdLCBiYXNlID0gclsyXTtcbiAgdmFyIGxlbiA9IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKTtcbiAgdmFyIHRocmVzaG9sZCA9IC0xID4+PiAwO1xuICB2YXIgYyA9IChpIDwgbGVuKT9jYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsIGkpOjA7XG4gIHZhciBkID0gY2FtbF9wYXJzZV9kaWdpdChjKTtcbiAgaWYgKGQgPCAwIHx8IGQgPj0gYmFzZSkgY2FtbF9mYWlsd2l0aChcImludF9vZl9zdHJpbmdcIik7XG4gIHZhciByZXMgPSBkO1xuICBmb3IgKGkrKztpPGxlbjtpKyspIHtcbiAgICBjID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldChzLCBpKTtcbiAgICBpZiAoYyA9PSA5NSkgY29udGludWU7XG4gICAgZCA9IGNhbWxfcGFyc2VfZGlnaXQoYyk7XG4gICAgaWYgKGQgPCAwIHx8IGQgPj0gYmFzZSkgYnJlYWs7XG4gICAgcmVzID0gYmFzZSAqIHJlcyArIGQ7XG4gICAgaWYgKHJlcyA+IHRocmVzaG9sZCkgY2FtbF9mYWlsd2l0aChcImludF9vZl9zdHJpbmdcIik7XG4gIH1cbiAgaWYgKGkgIT0gbGVuKSBjYW1sX2ZhaWx3aXRoKFwiaW50X29mX3N0cmluZ1wiKTtcbiAgLy8gRm9yIGJhc2UgZGlmZmVyZW50IGZyb20gMTAsIHdlIGV4cGVjdCBhbiB1bnNpZ25lZCByZXByZXNlbnRhdGlvbixcbiAgLy8gaGVuY2UgYW55IHZhbHVlIG9mICdyZXMnIChsZXNzIHRoYW4gJ3RocmVzaG9sZCcpIGlzIGFjY2VwdGFibGUuXG4gIC8vIEJ1dCB3ZSBoYXZlIHRvIGNvbnZlcnQgdGhlIHJlc3VsdCBiYWNrIHRvIGEgc2lnbmVkIGludGVnZXIuXG4gIHJlcyA9IHNpZ24gKiByZXM7XG4gIGlmICgoYmFzZSA9PSAxMCkgJiYgKChyZXMgfCAwKSAhPSByZXMpKVxuICAgIC8qIFNpZ25lZCByZXByZXNlbnRhdGlvbiBleHBlY3RlZCwgYWxsb3cgLTJeKG5iaXRzLTEpIHRvIDJeKG5iaXRzLTEpIC0gMSAqL1xuICAgIGNhbWxfZmFpbHdpdGgoXCJpbnRfb2Zfc3RyaW5nXCIpO1xuICByZXR1cm4gcmVzIHwgMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tdWwgY29uc3RcbmZ1bmN0aW9uIGNhbWxfbXVsKGEsYil7XG4gIHJldHVybiBNYXRoLmltdWwoYSxiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9kaXZcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2VfemVyb19kaXZpZGVcbmZ1bmN0aW9uIGNhbWxfZGl2KHgseSkge1xuICBpZiAoeSA9PSAwKSBjYW1sX3JhaXNlX3plcm9fZGl2aWRlICgpO1xuICByZXR1cm4gKHgveSl8MDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tb2Rcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2VfemVyb19kaXZpZGVcbmZ1bmN0aW9uIGNhbWxfbW9kKHgseSkge1xuICBpZiAoeSA9PSAwKSBjYW1sX3JhaXNlX3plcm9fZGl2aWRlICgpO1xuICByZXR1cm4geCV5O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2Jzd2FwMTZcbmZ1bmN0aW9uIGNhbWxfYnN3YXAxNih4KSB7XG4gIHJldHVybiAoKCgoeCAmIDB4MDBGRikgPDwgOCkgfFxuICAgICAgICAgICAoKHggJiAweEZGMDApID4+IDgpKSk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2ludDMyX2Jzd2FwXG5mdW5jdGlvbiBjYW1sX2ludDMyX2Jzd2FwKHgpIHtcbiAgcmV0dXJuICgoKHggJiAweDAwMDAwMEZGKSA8PCAyNCkgfFxuICAgICAgICAgICgoeCAmIDB4MDAwMEZGMDApIDw8IDgpIHxcbiAgICAgICAgICAoKHggJiAweDAwRkYwMDAwKSA+Pj4gOCkgfFxuICAgICAgICAgICgoeCAmIDB4RkYwMDAwMDApID4+PiAyNCkpO1xufVxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9ic3dhcFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF90b19ieXRlcywgY2FtbF9pbnQ2NF9vZl9ieXRlc1xuZnVuY3Rpb24gY2FtbF9pbnQ2NF9ic3dhcCh4KSB7XG4gIHZhciB5ID0gY2FtbF9pbnQ2NF90b19ieXRlcyh4KTtcbiAgcmV0dXJuIGNhbWxfaW50NjRfb2ZfYnl0ZXMoW3lbN10sIHlbNl0sIHlbNV0sIHlbNF0sIHlbM10sIHlbMl0sIHlbMV0sIHlbMF1dKTtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vLy8vLy8vLy8vLy8gSGFzaHRibFxuXG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2hfdW5pdl9wYXJhbSBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2lzX21sX3N0cmluZywgY2FtbF9pc19tbF9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9tbF9ieXRlc19jb250ZW50XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X3RvX2J5dGVzLCBjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQsIGNhbWxfY3VzdG9tX29wc1xuLy9SZXF1aXJlczogY2FtbF9tbF9ieXRlc19sZW5ndGgsIGNhbWxfanNieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfaGFzaF91bml2X3BhcmFtIChjb3VudCwgbGltaXQsIG9iaikge1xuICB2YXIgaGFzaF9hY2N1ID0gMDtcbiAgZnVuY3Rpb24gaGFzaF9hdXggKG9iaikge1xuICAgIGxpbWl0IC0tO1xuICAgIGlmIChjb3VudCA8IDAgfHwgbGltaXQgPCAwKSByZXR1cm47XG4gICAgaWYgKG9iaiBpbnN0YW5jZW9mIEFycmF5ICYmIG9ialswXSA9PT0gKG9ialswXXwwKSkge1xuICAgICAgc3dpdGNoIChvYmpbMF0pIHtcbiAgICAgIGNhc2UgMjQ4OlxuICAgICAgICAvLyBPYmplY3RcbiAgICAgICAgY291bnQgLS07XG4gICAgICAgIGhhc2hfYWNjdSA9IChoYXNoX2FjY3UgKiA2NTU5OSArIG9ialsyXSkgfCAwO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjUwOlxuICAgICAgICAvLyBGb3J3YXJkXG4gICAgICAgIGxpbWl0Kys7IGhhc2hfYXV4KG9iaik7IGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY291bnQgLS07XG4gICAgICAgIGhhc2hfYWNjdSA9IChoYXNoX2FjY3UgKiAxOSArIG9ialswXSkgfCAwO1xuICAgICAgICBmb3IgKHZhciBpID0gb2JqLmxlbmd0aCAtIDE7IGkgPiAwOyBpLS0pIGhhc2hfYXV4IChvYmpbaV0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2FtbF9pc19tbF9ieXRlcyhvYmopKSB7XG4gICAgICBjb3VudCAtLTtcbiAgICAgIHZhciBjb250ZW50ID0gY2FtbF9tbF9ieXRlc19jb250ZW50KG9iaik7XG4gICAgICBpZih0eXBlb2YgY29udGVudCA9PT0gXCJzdHJpbmdcIikge1xuXHRmb3IgKHZhciBiID0gY29udGVudCwgbCA9IGIubGVuZ3RoLCBpID0gMDsgaSA8IGw7IGkrKylcbiAgICAgICAgICBoYXNoX2FjY3UgPSAoaGFzaF9hY2N1ICogMTkgKyBiLmNoYXJDb2RlQXQoaSkpIHwgMDtcbiAgICAgIH0gZWxzZSB7IC8qIEFSUkFZICovXG4gICAgICAgIGZvciAodmFyIGEgPSBjb250ZW50LCBsID0gYS5sZW5ndGgsIGkgPSAwOyBpIDwgbDsgaSsrKVxuICAgICAgICAgIGhhc2hfYWNjdSA9IChoYXNoX2FjY3UgKiAxOSArIGFbaV0pIHwgMDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNhbWxfaXNfbWxfc3RyaW5nKG9iaikpIHtcbiAgICAgIHZhciBqc2J5dGVzID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhvYmopO1xuICAgICAgZm9yICh2YXIgYiA9IGpzYnl0ZXMsIGwgPSBqc2J5dGVzLmxlbmd0aCwgaSA9IDA7IGkgPCBsOyBpKyspXG4gICAgICAgIGhhc2hfYWNjdSA9IChoYXNoX2FjY3UgKiAxOSArIGIuY2hhckNvZGVBdChpKSkgfCAwO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIG9iaiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgZm9yICh2YXIgYiA9IG9iaiwgbCA9IG9iai5sZW5ndGgsIGkgPSAwOyBpIDwgbDsgaSsrKVxuICAgICAgICBoYXNoX2FjY3UgPSAoaGFzaF9hY2N1ICogMTkgKyBiLmNoYXJDb2RlQXQoaSkpIHwgMDtcbiAgICB9IGVsc2UgaWYgKG9iaiA9PT0gKG9ianwwKSkge1xuICAgICAgLy8gSW50ZWdlclxuICAgICAgY291bnQgLS07XG4gICAgICBoYXNoX2FjY3UgPSAoaGFzaF9hY2N1ICogNjU1OTkgKyBvYmopIHwgMDtcbiAgICB9IGVsc2UgaWYgKG9iaiA9PT0gK29iaikge1xuICAgICAgLy8gRmxvYXRcbiAgICAgIGNvdW50LS07XG4gICAgICB2YXIgcCA9IGNhbWxfaW50NjRfdG9fYnl0ZXMgKGNhbWxfaW50NjRfYml0c19vZl9mbG9hdCAob2JqKSk7XG4gICAgICBmb3IgKHZhciBpID0gNzsgaSA+PSAwOyBpLS0pIGhhc2hfYWNjdSA9IChoYXNoX2FjY3UgKiAxOSArIHBbaV0pIHwgMDtcbiAgICB9IGVsc2UgaWYob2JqICYmIG9iai5jYW1sX2N1c3RvbSkge1xuICAgICAgaWYoY2FtbF9jdXN0b21fb3BzW29iai5jYW1sX2N1c3RvbV0gJiYgY2FtbF9jdXN0b21fb3BzW29iai5jYW1sX2N1c3RvbV0uaGFzaCkge1xuICAgICAgICB2YXIgaCA9IGNhbWxfY3VzdG9tX29wc1tvYmouY2FtbF9jdXN0b21dLmhhc2gob2JqKSB8IDA7XG4gICAgICAgIGhhc2hfYWNjdSA9IChoYXNoX2FjY3UgKiA2NTU5OSArIGgpIHwgMDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaGFzaF9hdXggKG9iaik7XG4gIHJldHVybiBoYXNoX2FjY3UgJiAweDNGRkZGRkZGO1xufVxuXG4vL2Z1bmN0aW9uIFJPVEwzMih4LG4pIHsgcmV0dXJuICgoeCA8PCBuKSB8ICh4ID4+PiAoMzItbikpKTsgfVxuLy9Qcm92aWRlczogY2FtbF9oYXNoX21peF9pbnRcbi8vUmVxdWlyZXM6IGNhbWxfbXVsXG5mdW5jdGlvbiBjYW1sX2hhc2hfbWl4X2ludChoLGQpIHtcbiAgZCA9IGNhbWxfbXVsKGQsIDB4Y2M5ZTJkNTF8MCk7XG4gIGQgPSAoKGQgPDwgMTUpIHwgKGQgPj4+ICgzMi0xNSkpKTsgLy8gUk9UTDMyKGQsIDE1KTtcbiAgZCA9IGNhbWxfbXVsKGQsIDB4MWI4NzM1OTMpO1xuICBoIF49IGQ7XG4gIGggPSAoKGggPDwgMTMpIHwgKGggPj4+ICgzMi0xMykpKTsgICAvL1JPVEwzMihoLCAxMyk7XG4gIHJldHVybiAoKChoICsgKGggPDwgMikpfDApICsgKDB4ZTY1NDZiNjR8MCkpfDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfZmluYWxcbi8vUmVxdWlyZXM6IGNhbWxfbXVsXG5mdW5jdGlvbiBjYW1sX2hhc2hfbWl4X2ZpbmFsKGgpIHtcbiAgaCBePSBoID4+PiAxNjtcbiAgaCA9IGNhbWxfbXVsIChoLCAweDg1ZWJjYTZifDApO1xuICBoIF49IGggPj4+IDEzO1xuICBoID0gY2FtbF9tdWwgKGgsIDB4YzJiMmFlMzV8MCk7XG4gIGggXj0gaCA+Pj4gMTY7XG4gIHJldHVybiBoO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2hfbWl4X2Zsb2F0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQsIGNhbWxfaGFzaF9taXhfaW50NjRcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfZmxvYXQgKGgsIHYwKSB7XG4gIHJldHVybiBjYW1sX2hhc2hfbWl4X2ludDY0KGgsIGNhbWxfaW50NjRfYml0c19vZl9mbG9hdCAodjApKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfaW50NjRcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfaW50XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2xvMzIsIGNhbWxfaW50NjRfaGkzMlxuZnVuY3Rpb24gY2FtbF9oYXNoX21peF9pbnQ2NCAoaCwgdikge1xuICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgY2FtbF9pbnQ2NF9sbzMyKHYpKTtcbiAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIGNhbWxfaW50NjRfaGkzMih2KSk7XG4gIHJldHVybiBoO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2hfbWl4X2pzYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfaW50XG5mdW5jdGlvbiBjYW1sX2hhc2hfbWl4X2pzYnl0ZXMoaCwgcykge1xuICB2YXIgbGVuID0gcy5sZW5ndGgsIGksIHc7XG4gIGZvciAoaSA9IDA7IGkgKyA0IDw9IGxlbjsgaSArPSA0KSB7XG4gICAgdyA9IHMuY2hhckNvZGVBdChpKVxuICAgICAgfCAocy5jaGFyQ29kZUF0KGkrMSkgPDwgOClcbiAgICAgIHwgKHMuY2hhckNvZGVBdChpKzIpIDw8IDE2KVxuICAgICAgfCAocy5jaGFyQ29kZUF0KGkrMykgPDwgMjQpO1xuICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCB3KTtcbiAgfVxuICB3ID0gMDtcbiAgc3dpdGNoIChsZW4gJiAzKSB7XG4gIGNhc2UgMzogdyAgPSBzLmNoYXJDb2RlQXQoaSsyKSA8PCAxNjtcbiAgY2FzZSAyOiB3IHw9IHMuY2hhckNvZGVBdChpKzEpIDw8IDg7XG4gIGNhc2UgMTpcbiAgICB3IHw9IHMuY2hhckNvZGVBdChpKTtcbiAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgdyk7XG4gIGRlZmF1bHQ6XG4gIH1cbiAgaCBePSBsZW47XG4gIHJldHVybiBoO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2hfbWl4X2J5dGVzX2FyclxuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9pbnRcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfYnl0ZXNfYXJyKGgsIHMpIHtcbiAgdmFyIGxlbiA9IHMubGVuZ3RoLCBpLCB3O1xuICBmb3IgKGkgPSAwOyBpICsgNCA8PSBsZW47IGkgKz0gNCkge1xuICAgIHcgPSBzW2ldXG4gICAgICB8IChzW2krMV0gPDwgOClcbiAgICAgIHwgKHNbaSsyXSA8PCAxNilcbiAgICAgIHwgKHNbaSszXSA8PCAyNCk7XG4gICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIHcpO1xuICB9XG4gIHcgPSAwO1xuICBzd2l0Y2ggKGxlbiAmIDMpIHtcbiAgY2FzZSAzOiB3ICA9IHNbaSsyXSA8PCAxNjtcbiAgY2FzZSAyOiB3IHw9IHNbaSsxXSA8PCA4O1xuICBjYXNlIDE6IHcgfD0gc1tpXTtcbiAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgdyk7XG4gIGRlZmF1bHQ6XG4gIH1cbiAgaCBePSBsZW47XG4gIHJldHVybiBoO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2hfbWl4X2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX21sX2J5dGVzX2NvbnRlbnRcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfanNieXRlc1xuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9ieXRlc19hcnJcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfYnl0ZXMoaCwgdikge1xuICB2YXIgY29udGVudCA9IGNhbWxfbWxfYnl0ZXNfY29udGVudCh2KTtcbiAgaWYodHlwZW9mIGNvbnRlbnQgPT09IFwic3RyaW5nXCIpXG4gICAgcmV0dXJuIGNhbWxfaGFzaF9taXhfanNieXRlcyhoLCBjb250ZW50KVxuICBlbHNlIC8qIEFSUkFZICovXG4gICAgcmV0dXJuIGNhbWxfaGFzaF9taXhfYnl0ZXNfYXJyKGgsIGNvbnRlbnQpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2hfbWl4X3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9qc2J5dGVzLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2hhc2hfbWl4X3N0cmluZyhoLCB2KSB7XG4gIHJldHVybiBjYW1sX2hhc2hfbWl4X2pzYnl0ZXMoaCwgY2FtbF9qc2J5dGVzX29mX3N0cmluZyh2KSk7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9oYXNoIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfaXNfbWxfc3RyaW5nLCBjYW1sX2lzX21sX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2ludCwgY2FtbF9oYXNoX21peF9maW5hbFxuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9mbG9hdCwgY2FtbF9oYXNoX21peF9zdHJpbmcsIGNhbWxfaGFzaF9taXhfYnl0ZXMsIGNhbWxfY3VzdG9tX29wc1xuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX2hhc2ggKGNvdW50LCBsaW1pdCwgc2VlZCwgb2JqKSB7XG4gIHZhciBxdWV1ZSwgcmQsIHdyLCBzeiwgbnVtLCBoLCB2LCBpLCBsZW47XG4gIHN6ID0gbGltaXQ7XG4gIGlmIChzeiA8IDAgfHwgc3ogPiAyNTYpIHN6ID0gMjU2O1xuICBudW0gPSBjb3VudDtcbiAgaCA9IHNlZWQ7XG4gIHF1ZXVlID0gW29ial07IHJkID0gMDsgd3IgPSAxO1xuICB3aGlsZSAocmQgPCB3ciAmJiBudW0gPiAwKSB7XG4gICAgdiA9IHF1ZXVlW3JkKytdO1xuICAgIGlmICh2ICYmIHYuY2FtbF9jdXN0b20pe1xuICAgICAgaWYoY2FtbF9jdXN0b21fb3BzW3YuY2FtbF9jdXN0b21dICYmIGNhbWxfY3VzdG9tX29wc1t2LmNhbWxfY3VzdG9tXS5oYXNoKSB7XG4gICAgICAgIHZhciBoaCA9IGNhbWxfY3VzdG9tX29wc1t2LmNhbWxfY3VzdG9tXS5oYXNoKHYpO1xuICAgICAgICBoID0gY2FtbF9oYXNoX21peF9pbnQgKGgsIGhoKTtcbiAgICAgICAgbnVtIC0tO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh2IGluc3RhbmNlb2YgQXJyYXkgJiYgdlswXSA9PT0gKHZbMF18MCkpIHtcbiAgICAgIHN3aXRjaCAodlswXSkge1xuICAgICAgY2FzZSAyNDg6XG4gICAgICAgIC8vIE9iamVjdFxuICAgICAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgdlsyXSk7XG4gICAgICAgIG51bS0tO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjUwOlxuICAgICAgICAvLyBGb3J3YXJkXG4gICAgICAgIHF1ZXVlWy0tcmRdID0gdlsxXTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB2YXIgdGFnID0gKCh2Lmxlbmd0aCAtIDEpIDw8IDEwKSB8IHZbMF07XG4gICAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCB0YWcpO1xuICAgICAgICBmb3IgKGkgPSAxLCBsZW4gPSB2Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgaWYgKHdyID49IHN6KSBicmVhaztcbiAgICAgICAgICBxdWV1ZVt3cisrXSA9IHZbaV07XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjYW1sX2lzX21sX2J5dGVzKHYpKSB7XG4gICAgICBoID0gY2FtbF9oYXNoX21peF9ieXRlcyhoLHYpXG4gICAgICBudW0tLTtcbiAgICB9IGVsc2UgaWYgKGNhbWxfaXNfbWxfc3RyaW5nKHYpKSB7XG4gICAgICBoID0gY2FtbF9oYXNoX21peF9zdHJpbmcoaCx2KVxuICAgICAgbnVtLS07XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgaCA9IGNhbWxfaGFzaF9taXhfanNieXRlcyhoLHYpXG4gICAgICBudW0tLTtcbiAgICB9IGVsc2UgaWYgKHYgPT09ICh2fDApKSB7XG4gICAgICAvLyBJbnRlZ2VyXG4gICAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgdit2KzEpO1xuICAgICAgbnVtLS07XG4gICAgfSBlbHNlIGlmICh2ID09PSArdikge1xuICAgICAgLy8gRmxvYXRcbiAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2Zsb2F0KGgsdik7XG4gICAgICBudW0tLTtcbiAgICB9XG4gIH1cbiAgaCA9IGNhbWxfaGFzaF9taXhfZmluYWwoaCk7XG4gIHJldHVybiBoICYgMHgzRkZGRkZGRjtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGNhbWxfY29tcGFyZV92YWxfdGFnXG4vL1JlcXVpcmVzOiBjYW1sX2lzX21sX3N0cmluZywgY2FtbF9pc19tbF9ieXRlc1xuZnVuY3Rpb24gY2FtbF9jb21wYXJlX3ZhbF90YWcoYSl7XG4gIGlmICh0eXBlb2YgYSA9PT0gXCJudW1iZXJcIikgcmV0dXJuIDEwMDA7IC8vIGludF90YWcgKHdlIHVzZSBpdCBmb3IgYWxsIG51bWJlcnMpXG4gIGVsc2UgaWYgKGNhbWxfaXNfbWxfYnl0ZXMoYSkpIHJldHVybiAyNTI7IC8vIHN0cmluZ190YWdcbiAgZWxzZSBpZiAoY2FtbF9pc19tbF9zdHJpbmcoYSkpIHJldHVybiAxMjUyOyAvLyBvY2FtbCBzdHJpbmcgKGlmIGRpZmZlcmVudCBmcm9tIGJ5dGVzKVxuICBlbHNlIGlmIChhIGluc3RhbmNlb2YgQXJyYXkgJiYgYVswXSA9PT0gKGFbMF0+Pj4wKSAmJiBhWzBdIDw9IDI1NSkge1xuICAgIC8vIExvb2sgbGlrZSBhbiBvY2FtbCBibG9ja1xuICAgIHZhciB0YWcgPSBhWzBdIHwgMDtcbiAgICAvLyBpZ25vcmUgZG91YmxlX2FycmF5X3RhZyBiZWNhdXNlIHdlIGNhbm5vdCBhY2N1cmF0ZWx5IHNldFxuICAgIC8vIHRoaXMgdGFnIHdoZW4gd2UgY3JlYXRlIGFuIGFycmF5IG9mIGZsb2F0LlxuICAgIHJldHVybiAodGFnID09IDI1NCk/MDp0YWdcbiAgfVxuICBlbHNlIGlmIChhIGluc3RhbmNlb2YgU3RyaW5nKSByZXR1cm4gMTI1MjA7IC8vIGphdmFzY3JpcHQgc3RyaW5nLCBsaWtlIHN0cmluZ190YWcgKDI1MilcbiAgZWxzZSBpZiAodHlwZW9mIGEgPT0gXCJzdHJpbmdcIikgcmV0dXJuIDEyNTIwOyAvLyBqYXZhc2NyaXB0IHN0cmluZywgbGlrZSBzdHJpbmdfdGFnICgyNTIpXG4gIGVsc2UgaWYgKGEgaW5zdGFuY2VvZiBOdW1iZXIpIHJldHVybiAxMDAwOyAvLyBpbnRfdGFnICh3ZSB1c2UgaXQgZm9yIGFsbCBudW1iZXJzKVxuICBlbHNlIGlmIChhICYmIGEuY2FtbF9jdXN0b20pIHJldHVybiAxMjU1OyAvLyBsaWtlIGN1c3RvbV90YWcgKDI1NSlcbiAgZWxzZSBpZiAoYSAmJiBhLmNvbXBhcmUpIHJldHVybiAxMjU2OyAvLyBsaWtlIGN1c3RvbV90YWcgKDI1NSlcbiAgZWxzZSBpZiAodHlwZW9mIGEgPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gMTI0NzsgLy8gbGlrZSBjbG9zdXJlX3RhZyAoMjQ3KVxuICBlbHNlIGlmICh0eXBlb2YgYSA9PSBcInN5bWJvbFwiKSByZXR1cm4gMTI1MTtcbiAgcmV0dXJuIDEwMDE7IC8vb3V0X29mX2hlYXBfdGFnXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY29tcGFyZV92YWxfZ2V0X2N1c3RvbVxuLy9SZXF1aXJlczogY2FtbF9jdXN0b21fb3BzXG5mdW5jdGlvbiBjYW1sX2NvbXBhcmVfdmFsX2dldF9jdXN0b20oYSl7XG4gIHJldHVybiBjYW1sX2N1c3RvbV9vcHNbYS5jYW1sX2N1c3RvbV0gJiYgY2FtbF9jdXN0b21fb3BzW2EuY2FtbF9jdXN0b21dLmNvbXBhcmU7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY29tcGFyZV92YWxfbnVtYmVyX2N1c3RvbVxuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbF9nZXRfY3VzdG9tXG5mdW5jdGlvbiBjYW1sX2NvbXBhcmVfdmFsX251bWJlcl9jdXN0b20obnVtLCBjdXN0b20sIHN3YXAsIHRvdGFsKSB7XG4gIHZhciBjb21wID0gY2FtbF9jb21wYXJlX3ZhbF9nZXRfY3VzdG9tKGN1c3RvbSk7XG4gIGlmKGNvbXApIHtcbiAgICB2YXIgeCA9IChzd2FwID4gMCk/Y29tcChjdXN0b20sbnVtLHRvdGFsKTpjb21wKG51bSxjdXN0b20sdG90YWwpO1xuICAgIGlmKHRvdGFsICYmIHggIT0geCkgcmV0dXJuIHN3YXA7IC8vIHRvdGFsICYmIG5hblxuICAgIGlmKCt4ICE9ICt4KSByZXR1cm4gK3g7IC8vIG5hblxuICAgIGlmKCh4IHwgMCkgIT0gMCkgcmV0dXJuICh4IHwgMCk7IC8vICFuYW5cbiAgfVxuICByZXR1cm4gc3dhcFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvbXBhcmVfdmFsIChjb25zdCwgY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9pbnRfY29tcGFyZSwgY2FtbF9zdHJpbmdfY29tcGFyZSwgY2FtbF9ieXRlc19jb21wYXJlXG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnQsIGNhbWxfY29tcGFyZV92YWxfZ2V0X2N1c3RvbSwgY2FtbF9jb21wYXJlX3ZhbF90YWdcbi8vUmVxdWlyZXM6IGNhbWxfY29tcGFyZV92YWxfbnVtYmVyX2N1c3RvbVxuLy9SZXF1aXJlczogY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9jb21wYXJlX3ZhbCAoYSwgYiwgdG90YWwpIHtcbiAgdmFyIHN0YWNrID0gW107XG4gIGZvcig7Oykge1xuICAgIGlmICghKHRvdGFsICYmIGEgPT09IGIpKSB7XG4gICAgICB2YXIgdGFnX2EgPSBjYW1sX2NvbXBhcmVfdmFsX3RhZyhhKTtcbiAgICAgIC8vIGZvcndhcmRfdGFnID9cbiAgICAgIGlmKHRhZ19hID09IDI1MCkgeyBhID0gYVsxXTsgY29udGludWUgfVxuXG4gICAgICB2YXIgdGFnX2IgPSBjYW1sX2NvbXBhcmVfdmFsX3RhZyhiKTtcbiAgICAgIC8vIGZvcndhcmRfdGFnID9cbiAgICAgIGlmKHRhZ19iID09IDI1MCkgeyBiID0gYlsxXTsgY29udGludWUgfVxuXG4gICAgICAvLyB0YWdzIGFyZSBkaWZmZXJlbnRcbiAgICAgIGlmKHRhZ19hICE9PSB0YWdfYikge1xuICAgICAgICBpZih0YWdfYSA9PSAxMDAwKSB7XG4gICAgICAgICAgaWYodGFnX2IgPT0gMTI1NSkgeyAvL2ltbWVkaWF0ZSBjYW4gY29tcGFyZSBhZ2FpbnN0IGN1c3RvbVxuICAgICAgICAgICAgcmV0dXJuIGNhbWxfY29tcGFyZV92YWxfbnVtYmVyX2N1c3RvbShhLCBiLCAtMSwgdG90YWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gLTFcbiAgICAgICAgfVxuICAgICAgICBpZih0YWdfYiA9PSAxMDAwKSB7XG4gICAgICAgICAgaWYodGFnX2EgPT0gMTI1NSkgeyAvL2ltbWVkaWF0ZSBjYW4gY29tcGFyZSBhZ2FpbnN0IGN1c3RvbVxuICAgICAgICAgICAgcmV0dXJuIGNhbWxfY29tcGFyZV92YWxfbnVtYmVyX2N1c3RvbShiLCBhLCAxLCB0b3RhbCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAxXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICh0YWdfYSA8IHRhZ19iKT8tMToxO1xuICAgICAgfVxuICAgICAgc3dpdGNoKHRhZ19hKXtcbiAgICAgICAgLy8gMjQ2OiBMYXp5X3RhZyBoYW5kbGVkIGJlbGxvd1xuICAgICAgY2FzZSAyNDc6IC8vIENsb3N1cmVfdGFnXG4gICAgICAgIC8vIENhbm5vdCBoYXBwZW5cbiAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY29tcGFyZTogZnVuY3Rpb25hbCB2YWx1ZVwiKTtcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgMjQ4OiAvLyBPYmplY3RcbiAgICAgICAgdmFyIHggPSBjYW1sX2ludF9jb21wYXJlKGFbMl0sIGJbMl0pO1xuICAgICAgICBpZiAoeCAhPSAwKSByZXR1cm4gKHggfCAwKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI0OTogLy8gSW5maXhcbiAgICAgICAgLy8gQ2Fubm90IGhhcHBlblxuICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJjb21wYXJlOiBmdW5jdGlvbmFsIHZhbHVlXCIpO1xuICAgICAgICBicmVha1xuICAgICAgY2FzZSAyNTA6IC8vIEZvcndhcmQgdGFnXG4gICAgICAgIC8vIENhbm5vdCBoYXBwZW4sIGhhbmRsZWQgYWJvdmVcbiAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiZXF1YWw6IGdvdCBGb3J3YXJkX3RhZywgc2hvdWxkIG5vdCBoYXBwZW5cIik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyNTE6IC8vQWJzdHJhY3RcbiAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiZXF1YWw6IGFic3RyYWN0IHZhbHVlXCIpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjUyOiAvLyBPQ2FtbCBieXRlc1xuICAgICAgICBpZiAoYSAhPT0gYikge1xuICAgICAgICAgIHZhciB4ID0gY2FtbF9ieXRlc19jb21wYXJlKGEsIGIpO1xuICAgICAgICAgIGlmICh4ICE9IDApIHJldHVybiAoeCB8IDApO1xuICAgICAgICB9O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjUzOiAvLyBEb3VibGVfdGFnXG4gICAgICAgIC8vIENhbm5vdCBoYXBwZW5cbiAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiZXF1YWw6IGdvdCBEb3VibGVfdGFnLCBzaG91bGQgbm90IGhhcHBlblwiKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI1NDogLy8gRG91YmxlX2FycmF5X3RhZ1xuICAgICAgICAvLyBDYW5ub3QgaGFwcGVuLCBoYW5kbGVkIGFib3ZlXG4gICAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImVxdWFsOiBnb3QgRG91YmxlX2FycmF5X3RhZywgc2hvdWxkIG5vdCBoYXBwZW5cIik7XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIDI1NTogLy8gQ3VzdG9tX3RhZ1xuICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJlcXVhbDogZ290IEN1c3RvbV90YWcsIHNob3VsZCBub3QgaGFwcGVuXCIpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTI0NzogLy8gRnVuY3Rpb25cbiAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY29tcGFyZTogZnVuY3Rpb25hbCB2YWx1ZVwiKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDEyNTU6IC8vIEN1c3RvbVxuICAgICAgICB2YXIgY29tcCA9IGNhbWxfY29tcGFyZV92YWxfZ2V0X2N1c3RvbShhKTtcbiAgICAgICAgaWYoY29tcCAhPSBjYW1sX2NvbXBhcmVfdmFsX2dldF9jdXN0b20oYikpe1xuICAgICAgICAgIHJldHVybiAoYS5jYW1sX2N1c3RvbTxiLmNhbWxfY3VzdG9tKT8tMToxO1xuICAgICAgICB9XG4gICAgICAgIGlmKCFjb21wKVxuICAgICAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImNvbXBhcmU6IGFic3RyYWN0IHZhbHVlXCIpO1xuICAgICAgICB2YXIgeCA9IGNvbXAoYSxiLHRvdGFsKTtcbiAgICAgICAgaWYoeCAhPSB4KXsgLy8gUHJvdGVjdCBhZ2FpbnN0IGludmFsaWQgVU5PUkRFUkVEXG4gICAgICAgICAgcmV0dXJuIHRvdGFsPy0xOng7XG4gICAgICAgIH1cbiAgICAgICAgaWYoeCAhPT0gKHh8MCkpeyAvLyBQcm90ZWN0IGFnYWluc3QgaW52YWxpZCByZXR1cm4gdmFsdWVcbiAgICAgICAgICByZXR1cm4gLTFcbiAgICAgICAgfVxuICAgICAgICBpZiAoeCAhPSAwKSByZXR1cm4gKHggfCAwKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDEyNTY6IC8vIGNvbXBhcmUgZnVuY3Rpb25cbiAgICAgICAgdmFyIHggPSBhLmNvbXBhcmUoYix0b3RhbCk7XG4gICAgICAgIGlmKHggIT0geCkgeyAvLyBQcm90ZWN0IGFnYWluc3QgaW52YWxpZCBVTk9SREVSRURcbiAgICAgICAgICByZXR1cm4gdG90YWw/LTE6eDtcbiAgICAgICAgfVxuICAgICAgICBpZih4ICE9PSAoeHwwKSl7IC8vIFByb3RlY3QgYWdhaW5zdCBpbnZhbGlkIHJldHVybiB2YWx1ZVxuICAgICAgICAgIHJldHVybiAtMVxuICAgICAgICB9XG4gICAgICAgIGlmICh4ICE9IDApIHJldHVybiAoeCB8IDApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTAwMDogLy8gTnVtYmVyXG4gICAgICAgIGEgPSArYTtcbiAgICAgICAgYiA9ICtiO1xuICAgICAgICBpZiAoYSA8IGIpIHJldHVybiAtMTtcbiAgICAgICAgaWYgKGEgPiBiKSByZXR1cm4gMTtcbiAgICAgICAgaWYgKGEgIT0gYikge1xuICAgICAgICAgIGlmICghdG90YWwpIHJldHVybiBOYU47XG4gICAgICAgICAgaWYgKGEgPT0gYSkgcmV0dXJuIDE7XG4gICAgICAgICAgaWYgKGIgPT0gYikgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxMDAxOiAvLyBUaGUgcmVzdFxuICAgICAgICAvLyBIZXJlIHdlIGNhbiBiZSBpbiB0aGUgZm9sbG93aW5nIGNhc2VzOlxuICAgICAgICAvLyAxLiBKYXZhU2NyaXB0IHByaW1pdGl2ZSB0eXBlc1xuICAgICAgICAvLyAyLiBKYXZhU2NyaXB0IG9iamVjdCB0aGF0IGNhbiBiZSBjb2VyY2VkIHRvIHByaW1pdGl2ZSB0eXBlc1xuICAgICAgICAvLyAzLiBKYXZhU2NyaXB0IG9iamVjdCB0aGFuIGNhbm5vdCBiZSBjb2VyY2VkIHRvIHByaW1pdGl2ZSB0eXBlc1xuICAgICAgICAvL1xuICAgICAgICAvLyAoMykgd2lsbCByYWlzZSBhIFtUeXBlRXJyb3JdXG4gICAgICAgIC8vICgyKSB3aWxsIGNvZXJjZSB0byBwcmltaXRpdmUgdHlwZXMgdXNpbmcgW3ZhbHVlT2ZdIG9yIFt0b1N0cmluZ11cbiAgICAgICAgLy8gKDIpIGFuZCAoMyksIGFmdGVyIGV2ZW50dWFsIGNvZXJjaW9uXG4gICAgICAgIC8vIC0gaWYgYSBhbmQgYiBhcmUgc3RyaW5ncywgYXBwbHkgbGV4aWNvZ3JhcGhpYyBjb21wYXJpc29uXG4gICAgICAgIC8vIC0gaWYgYSBvciBiIGFyZSBub3Qgc3RyaW5ncywgY29udmVydCBhIGFuZCBiIHRvIG51bWJlclxuICAgICAgICAvLyAgIGFuZCBhcHBseSBzdGFuZGFyZCBjb21wYXJpc29uXG4gICAgICAgIC8vXG4gICAgICAgIC8vIEV4Y2VwdGlvbjogYCE9YCB3aWxsIG5vdCBjb2VyY2UvY29udmVydCBpZiBib3RoIGEgYW5kIGIgYXJlIG9iamVjdHNcbiAgICAgICAgaWYgKGEgPCBiKSByZXR1cm4gLTE7XG4gICAgICAgIGlmIChhID4gYikgcmV0dXJuIDE7XG4gICAgICAgIGlmIChhICE9IGIpIHtcbiAgICAgICAgICBpZiAoIXRvdGFsKSByZXR1cm4gTmFOO1xuICAgICAgICAgIGlmIChhID09IGEpIHJldHVybiAxO1xuICAgICAgICAgIGlmIChiID09IGIpIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTI1MTogLy8gSmF2YVNjcmlwdCBTeW1ib2wsIG5vIG9yZGVyaW5nLlxuICAgICAgICBpZihhICE9PSBiKSB7XG4gICAgICAgICAgaWYgKCF0b3RhbCkgcmV0dXJuIE5hTjtcbiAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTI1MjogLy8gb2NhbWwgc3RyaW5nc1xuICAgICAgICB2YXIgYSA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcoYSk7XG4gICAgICAgIHZhciBiID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhiKTtcbiAgICAgICAgaWYoYSAhPT0gYikge1xuICAgICAgICAgIGlmKGEgPCBiKSByZXR1cm4gLTE7XG4gICAgICAgICAgaWYoYSA+IGIpIHJldHVybiAxO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxMjUyMDogLy8gamF2YXNjcmlwdCBzdHJpbmdzXG4gICAgICAgIHZhciBhID0gYS50b1N0cmluZygpO1xuICAgICAgICB2YXIgYiA9IGIudG9TdHJpbmcoKTtcbiAgICAgICAgaWYoYSAhPT0gYikge1xuICAgICAgICAgIGlmKGEgPCBiKSByZXR1cm4gLTE7XG4gICAgICAgICAgaWYoYSA+IGIpIHJldHVybiAxO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyNDY6IC8vIExhenlfdGFnXG4gICAgICBjYXNlIDI1NDogLy8gRG91YmxlX2FycmF5XG4gICAgICBkZWZhdWx0OiAvLyBCbG9jayB3aXRoIG90aGVyIHRhZ1xuICAgICAgICBpZiAoYS5sZW5ndGggIT0gYi5sZW5ndGgpIHJldHVybiAoYS5sZW5ndGggPCBiLmxlbmd0aCk/LTE6MTtcbiAgICAgICAgaWYgKGEubGVuZ3RoID4gMSkgc3RhY2sucHVzaChhLCBiLCAxKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzdGFjay5sZW5ndGggPT0gMCkgcmV0dXJuIDA7XG4gICAgdmFyIGkgPSBzdGFjay5wb3AoKTtcbiAgICBiID0gc3RhY2sucG9wKCk7XG4gICAgYSA9IHN0YWNrLnBvcCgpO1xuICAgIGlmIChpICsgMSA8IGEubGVuZ3RoKSBzdGFjay5wdXNoKGEsIGIsIGkgKyAxKTtcbiAgICBhID0gYVtpXTtcbiAgICBiID0gYltpXTtcbiAgfVxufVxuLy9Qcm92aWRlczogY2FtbF9jb21wYXJlIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NvbXBhcmVfdmFsXG5mdW5jdGlvbiBjYW1sX2NvbXBhcmUgKGEsIGIpIHsgcmV0dXJuIGNhbWxfY29tcGFyZV92YWwgKGEsIGIsIHRydWUpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2ludF9jb21wYXJlIG11dGFibGUgKGNvbnN0LCBjb25zdClcbmZ1bmN0aW9uIGNhbWxfaW50X2NvbXBhcmUgKGEsIGIpIHtcbiAgaWYgKGEgPCBiKSByZXR1cm4gKC0xKTsgaWYgKGEgPT0gYikgcmV0dXJuIDA7IHJldHVybiAxO1xufVxuLy9Qcm92aWRlczogY2FtbF9lcXVhbCBtdXRhYmxlIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NvbXBhcmVfdmFsXG5mdW5jdGlvbiBjYW1sX2VxdWFsICh4LCB5KSB7IHJldHVybiArKGNhbWxfY29tcGFyZV92YWwoeCx5LGZhbHNlKSA9PSAwKTsgfVxuLy9Qcm92aWRlczogY2FtbF9ub3RlcXVhbCBtdXRhYmxlIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NvbXBhcmVfdmFsXG5mdW5jdGlvbiBjYW1sX25vdGVxdWFsICh4LCB5KSB7IHJldHVybiArKGNhbWxfY29tcGFyZV92YWwoeCx5LGZhbHNlKSAhPSAwKTsgfVxuLy9Qcm92aWRlczogY2FtbF9ncmVhdGVyZXF1YWwgbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbFxuZnVuY3Rpb24gY2FtbF9ncmVhdGVyZXF1YWwgKHgsIHkpIHsgcmV0dXJuICsoY2FtbF9jb21wYXJlX3ZhbCh4LHksZmFsc2UpID49IDApOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2dyZWF0ZXJ0aGFuIG11dGFibGUgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY29tcGFyZV92YWxcbmZ1bmN0aW9uIGNhbWxfZ3JlYXRlcnRoYW4gKHgsIHkpIHsgcmV0dXJuICsoY2FtbF9jb21wYXJlX3ZhbCh4LHksZmFsc2UpID4gMCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfbGVzc2VxdWFsIG11dGFibGUgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY29tcGFyZV92YWxcbmZ1bmN0aW9uIGNhbWxfbGVzc2VxdWFsICh4LCB5KSB7IHJldHVybiArKGNhbWxfY29tcGFyZV92YWwoeCx5LGZhbHNlKSA8PSAwKTsgfVxuLy9Qcm92aWRlczogY2FtbF9sZXNzdGhhbiBtdXRhYmxlIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NvbXBhcmVfdmFsXG5mdW5jdGlvbiBjYW1sX2xlc3N0aGFuICh4LCB5KSB7IHJldHVybiArKGNhbWxfY29tcGFyZV92YWwoeCx5LGZhbHNlKSA8IDApOyB9XG4iLCIvLyBKc19vZl9vY2FtbCBsaWJyYXJ5XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwIErDqXLDtG1lIFZvdWlsbG9uXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vLy8vLy8vLy8vLy8gSnNsaWI6IGNvZGUgc3BlY2lmaWMgdG8gSnNfb2Zfb2NhbWxcblxuLy9Qcm92aWRlczogY2FtbF9qc19vbl9pZSBjb25zdFxuZnVuY3Rpb24gY2FtbF9qc19vbl9pZSAoKSB7XG4gIHZhciB1YSA9XG4gICAgICBnbG9iYWxUaGlzLm5hdmlnYXRvcj9nbG9iYWxUaGlzLm5hdmlnYXRvci51c2VyQWdlbnQ6XCJcIjtcbiAgcmV0dXJuIHVhLmluZGV4T2YoXCJNU0lFXCIpICE9IC0xICYmIHVhLmluZGV4T2YoXCJPcGVyYVwiKSAhPSAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2h0bWxfZXNjYXBlIGNvbnN0IChjb25zdClcbnZhciBjYW1sX2pzX3JlZ2V4cHMgPSB7IGFtcDovJi9nLCBsdDovPC9nLCBxdW90Oi9cXFwiL2csIGFsbDovWyY8XFxcIl0vIH07XG5mdW5jdGlvbiBjYW1sX2pzX2h0bWxfZXNjYXBlIChzKSB7XG4gIGlmICghY2FtbF9qc19yZWdleHBzLmFsbC50ZXN0KHMpKSByZXR1cm4gcztcbiAgcmV0dXJuIHMucmVwbGFjZShjYW1sX2pzX3JlZ2V4cHMuYW1wLCBcIiZhbXA7XCIpXG4gICAgLnJlcGxhY2UoY2FtbF9qc19yZWdleHBzLmx0LCBcIiZsdDtcIilcbiAgICAucmVwbGFjZShjYW1sX2pzX3JlZ2V4cHMucXVvdCwgXCImcXVvdDtcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfaHRtbF9lbnRpdGllc1xuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF9qc19odG1sX2VudGl0aWVzKHMpIHtcbiAgdmFyIGVudGl0eSA9IC9eJiM/WzAtOWEtekEtWl0rOyQvXG4gIGlmKHMubWF0Y2goZW50aXR5KSlcbiAge1xuICAgIHZhciBzdHIsIHRlbXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwJyk7XG4gICAgdGVtcC5pbm5lckhUTUw9IHM7XG4gICAgc3RyPSB0ZW1wLnRleHRDb250ZW50IHx8IHRlbXAuaW5uZXJUZXh0O1xuICAgIHRlbXA9bnVsbDtcbiAgICByZXR1cm4gc3RyO1xuICB9XG4gIGVsc2Uge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJJbnZhbGlkIGVudGl0eSBcIiArIHMpO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZ2V0X2NvbnNvbGUgY29uc3RcbmZ1bmN0aW9uIGNhbWxfanNfZ2V0X2NvbnNvbGUgKCkge1xuICB2YXIgYyA9IGdsb2JhbFRoaXMuY29uc29sZT9nbG9iYWxUaGlzLmNvbnNvbGU6e307XG4gIHZhciBtID0gW1wibG9nXCIsIFwiZGVidWdcIiwgXCJpbmZvXCIsIFwid2FyblwiLCBcImVycm9yXCIsIFwiYXNzZXJ0XCIsIFwiZGlyXCIsIFwiZGlyeG1sXCIsXG4gICAgICAgICAgIFwidHJhY2VcIiwgXCJncm91cFwiLCBcImdyb3VwQ29sbGFwc2VkXCIsIFwiZ3JvdXBFbmRcIiwgXCJ0aW1lXCIsIFwidGltZUVuZFwiXTtcbiAgZnVuY3Rpb24gZiAoKSB7fVxuICBmb3IgKHZhciBpID0gMDsgaSA8IG0ubGVuZ3RoOyBpKyspIGlmICghY1ttW2ldXSkgY1ttW2ldXT1mO1xuICByZXR1cm4gYztcbn1cblxuLy9Qcm92aWRlczogY2FtbF94bWxodHRwcmVxdWVzdF9jcmVhdGVcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbi8vV2Vha2RlZlxuZnVuY3Rpb24gY2FtbF94bWxodHRwcmVxdWVzdF9jcmVhdGUodW5pdCl7XG4gIHZhciBnID0gZ2xvYmFsVGhpcztcbiAgaWYodHlwZW9mIGcuWE1MSHR0cFJlcXVlc3QgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgdHJ5IHsgcmV0dXJuIG5ldyBnLlhNTEh0dHBSZXF1ZXN0IH0gY2F0Y2ggKGUpIHsgfTtcbiAgfVxuICBpZih0eXBlb2YgZy5hY3RpdmVYT2JqZWN0ICE9PSAndW5kZWZpbmVkJykge1xuICAgIHRyeSB7IHJldHVybiBuZXcgZy5hY3RpdmVYT2JqZWN0KFwiTXN4bWwyLlhNTEhUVFBcIikgfSBjYXRjaChlKXsgfTtcbiAgICB0cnkgeyByZXR1cm4gbmV3IGcuYWN0aXZlWE9iamVjdChcIk1zeG1sMy5YTUxIVFRQXCIpIH0gY2F0Y2goZSl7IH07XG4gICAgdHJ5IHsgcmV0dXJuIG5ldyBnLmFjdGl2ZVhPYmplY3QoXCJNaWNyb3NvZnQuWE1MSFRUUFwiKSB9IGNhdGNoKGUpeyB9O1xuICB9XG4gIGNhbWxfZmFpbHdpdGgoXCJDYW5ub3QgY3JlYXRlIGEgWE1MSHR0cFJlcXVlc3RcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZXJyb3Jfb2ZfZXhjZXB0aW9uXG5mdW5jdGlvbiBjYW1sX2pzX2Vycm9yX29mX2V4Y2VwdGlvbihleG4pIHtcbiAgaWYoZXhuLmpzX2Vycm9yKSB7IHJldHVybiBleG4uanNfZXJyb3I7IH1cbiAgcmV0dXJuIG51bGw7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBjYW1sX3VwZGF0ZV9kdW1teVxuZnVuY3Rpb24gY2FtbF91cGRhdGVfZHVtbXkgKHgsIHkpIHtcbiAgaWYoIHR5cGVvZiB5PT09XCJmdW5jdGlvblwiICkgeyB4LmZ1biA9IHk7IHJldHVybiAwOyB9XG4gIGlmKCB5LmZ1biApIHsgeC5mdW4gPSB5LmZ1bjsgcmV0dXJuIDA7IH1cbiAgdmFyIGkgPSB5Lmxlbmd0aDsgd2hpbGUgKGktLSkgeFtpXSA9IHlbaV07IHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial9pc19ibG9jayBjb25zdCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX29ial9pc19ibG9jayAoeCkgeyByZXR1cm4gKyh4IGluc3RhbmNlb2YgQXJyYXkpOyB9XG5cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfdGFnXG4vL1JlcXVpcmVzOiBjYW1sX2lzX21sX2J5dGVzLCBjYW1sX2lzX21sX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9vYmpfdGFnICh4KSB7XG4gIGlmICgoeCBpbnN0YW5jZW9mIEFycmF5KSAmJiB4WzBdID09ICh4WzBdID4+PiAwKSlcbiAgICByZXR1cm4geFswXVxuICBlbHNlIGlmIChjYW1sX2lzX21sX2J5dGVzKHgpKVxuICAgIHJldHVybiAyNTJcbiAgZWxzZSBpZiAoY2FtbF9pc19tbF9zdHJpbmcoeCkpXG4gICAgcmV0dXJuIDI1MlxuICBlbHNlIGlmICgoeCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB8fCB0eXBlb2YgeCA9PSBcImZ1bmN0aW9uXCIpXG4gICAgcmV0dXJuIDI0N1xuICBlbHNlIGlmICh4ICYmIHguY2FtbF9jdXN0b20pXG4gICAgcmV0dXJuIDI1NVxuICBlbHNlXG4gICAgcmV0dXJuIDEwMDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfc2V0X3RhZyAobXV0YWJsZSwgY29uc3QpXG5mdW5jdGlvbiBjYW1sX29ial9zZXRfdGFnICh4LCB0YWcpIHsgeFswXSA9IHRhZzsgcmV0dXJuIDA7IH1cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX2Jsb2NrIGNvbnN0IChjb25zdCxjb25zdClcbmZ1bmN0aW9uIGNhbWxfb2JqX2Jsb2NrICh0YWcsIHNpemUpIHtcbiAgdmFyIG8gPSBuZXcgQXJyYXkoc2l6ZSsxKTtcbiAgb1swXT10YWc7XG4gIGZvciAodmFyIGkgPSAxOyBpIDw9IHNpemU7IGkrKykgb1tpXSA9IDA7XG4gIHJldHVybiBvO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial93aXRoX3RhZ1xuZnVuY3Rpb24gY2FtbF9vYmpfd2l0aF90YWcodGFnLHgpIHtcbiAgdmFyIGwgPSB4Lmxlbmd0aDtcbiAgdmFyIGEgPSBuZXcgQXJyYXkobCk7XG4gIGFbMF0gPSB0YWc7XG4gIGZvcih2YXIgaSA9IDE7IGkgPCBsOyBpKysgKSBhW2ldID0geFtpXTtcbiAgcmV0dXJuIGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX2R1cCBtdXRhYmxlIChjb25zdClcbmZ1bmN0aW9uIGNhbWxfb2JqX2R1cCAoeCkge1xuICB2YXIgbCA9IHgubGVuZ3RoO1xuICB2YXIgYSA9IG5ldyBBcnJheShsKTtcbiAgZm9yKHZhciBpID0gMDsgaSA8IGw7IGkrKyApIGFbaV0gPSB4W2ldO1xuICByZXR1cm4gYTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfdHJ1bmNhdGUgKG11dGFibGUsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX29ial90cnVuY2F0ZSAoeCwgcykge1xuICBpZiAoczw9MCB8fCBzICsgMSA+IHgubGVuZ3RoKVxuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudCAoXCJPYmoudHJ1bmNhdGVcIik7XG4gIGlmICh4Lmxlbmd0aCAhPSBzICsgMSkgeC5sZW5ndGggPSBzICsgMTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX21ha2VfZm9yd2FyZFxuZnVuY3Rpb24gY2FtbF9vYmpfbWFrZV9mb3J3YXJkIChiLHYpIHtcbiAgYlswXT0yNTA7XG4gIGJbMV09djtcbiAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9sYXp5X21ha2VfZm9yd2FyZCBjb25zdCAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX2xhenlfbWFrZV9mb3J3YXJkICh2KSB7IHJldHVybiBbMjUwLCB2XTsgfVxuXG4vLy8vLy8vLy8vLy8vIENhbWxpbnRlcm5hbE9PXG4vL1Byb3ZpZGVzOiBjYW1sX2dldF9wdWJsaWNfbWV0aG9kIGNvbnN0XG52YXIgY2FtbF9tZXRob2RfY2FjaGUgPSBbXTtcbmZ1bmN0aW9uIGNhbWxfZ2V0X3B1YmxpY19tZXRob2QgKG9iaiwgdGFnLCBjYWNoZWlkKSB7XG4gIHZhciBtZXRocyA9IG9ialsxXTtcbiAgdmFyIG9mcyA9IGNhbWxfbWV0aG9kX2NhY2hlW2NhY2hlaWRdO1xuICBpZiAob2ZzID09PSB1bmRlZmluZWQpIHtcbiAgICAvLyBNYWtlIHN1cmUgdGhlIGFycmF5IGlzIG5vdCBzcGFyc2VcbiAgICBmb3IgKHZhciBpID0gY2FtbF9tZXRob2RfY2FjaGUubGVuZ3RoOyBpIDwgY2FjaGVpZDsgaSsrKVxuICAgICAgY2FtbF9tZXRob2RfY2FjaGVbaV0gPSAwO1xuICB9IGVsc2UgaWYgKG1ldGhzW29mc10gPT09IHRhZykge1xuICAgIHJldHVybiBtZXRoc1tvZnMgLSAxXTtcbiAgfVxuICB2YXIgbGkgPSAzLCBoaSA9IG1ldGhzWzFdICogMiArIDEsIG1pO1xuICB3aGlsZSAobGkgPCBoaSkge1xuICAgIG1pID0gKChsaStoaSkgPj4gMSkgfCAxO1xuICAgIGlmICh0YWcgPCBtZXRoc1ttaSsxXSkgaGkgPSBtaS0yO1xuICAgIGVsc2UgbGkgPSBtaTtcbiAgfVxuICBjYW1sX21ldGhvZF9jYWNoZVtjYWNoZWlkXSA9IGxpICsgMTtcbiAgLyogcmV0dXJuIDAgaWYgdGFnIGlzIG5vdCB0aGVyZSAqL1xuICByZXR1cm4gKHRhZyA9PSBtZXRoc1tsaSsxXSA/IG1ldGhzW2xpXSA6IDApO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29vX2xhc3RfaWRcbnZhciBjYW1sX29vX2xhc3RfaWQgPSAwO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX3NldF9vb19pZFxuLy9SZXF1aXJlczogY2FtbF9vb19sYXN0X2lkXG5mdW5jdGlvbiBjYW1sX3NldF9vb19pZCAoYikge1xuICBiWzJdPWNhbWxfb29fbGFzdF9pZCsrO1xuICByZXR1cm4gYjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mcmVzaF9vb19pZCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9vb19sYXN0X2lkXG5mdW5jdGlvbiBjYW1sX2ZyZXNoX29vX2lkKCkge1xuICByZXR1cm4gY2FtbF9vb19sYXN0X2lkKys7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX3Jhd19maWVsZFxuZnVuY3Rpb24gY2FtbF9vYmpfcmF3X2ZpZWxkKG8saSkgeyByZXR1cm4gb1tpKzFdIH1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfc2V0X3Jhd19maWVsZFxuZnVuY3Rpb24gY2FtbF9vYmpfc2V0X3Jhd19maWVsZChvLGksdikgeyByZXR1cm4gb1tpKzFdID0gdiB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX3JlYWNoYWJsZV93b3Jkc1xuZnVuY3Rpb24gY2FtbF9vYmpfcmVhY2hhYmxlX3dvcmRzKG8pIHsgcmV0dXJuIDA7IH1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfYWRkX29mZnNldFxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF9vYmpfYWRkX29mZnNldCh2LG9mZnNldCkge1xuICBjYW1sX2ZhaWx3aXRoKFwiT2JqLmFkZF9vZmZzZXQgaXMgbm90IHN1cHBvcnRlZFwiKTtcbn1cbiIsIi8vLy8vLy8vLyBCSUdTVFJJTkdcblxuLy9Qcm92aWRlczogY2FtbF9oYXNoX21peF9iaWdzdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfYnl0ZXNfYXJyXG5mdW5jdGlvbiBjYW1sX2hhc2hfbWl4X2JpZ3N0cmluZyhoLCBicykge1xuICByZXR1cm4gY2FtbF9oYXNoX21peF9ieXRlc19hcnIoaCxicy5kYXRhKTtcbn1cblxuLy9Qcm92aWRlczogYmlnc3RyaW5nX3RvX2FycmF5X2J1ZmZlciBtdXRhYmxlXG5mdW5jdGlvbiBiaWdzdHJpbmdfdG9fYXJyYXlfYnVmZmVyKGJzKSB7XG4gIHJldHVybiBicy5kYXRhLmJ1ZmZlclxufVxuXG4vL1Byb3ZpZGVzOiBiaWdzdHJpbmdfdG9fdHlwZWRfYXJyYXkgbXV0YWJsZVxuZnVuY3Rpb24gYmlnc3RyaW5nX3RvX3R5cGVkX2FycmF5KGJzKSB7XG4gIHJldHVybiBicy5kYXRhXG59XG5cbi8vUHJvdmlkZXM6IGJpZ3N0cmluZ19vZl9hcnJheV9idWZmZXIgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9iYV9jcmVhdGVfdW5zYWZlXG5mdW5jdGlvbiBiaWdzdHJpbmdfb2ZfYXJyYXlfYnVmZmVyKGFiKSB7XG4gIHZhciB0YSA9IG5ldyBnbG9iYWxUaGlzLlVpbnQ4QXJyYXkoYWIpO1xuICByZXR1cm4gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKDEyLCAwLCBbdGEubGVuZ3RoXSwgdGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBiaWdzdHJpbmdfb2ZfdHlwZWRfYXJyYXkgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9iYV9jcmVhdGVfdW5zYWZlXG5mdW5jdGlvbiBiaWdzdHJpbmdfb2ZfdHlwZWRfYXJyYXkoYmEpIHtcbiAgdmFyIHRhID0gbmV3IGdsb2JhbFRoaXMuVWludDhBcnJheShiYS5idWZmZXIsIGJhLmJ5dGVPZmZzZXQsIGJhLmxlbmd0aCAqIGJhLkJZVEVTX1BFUl9FTEVNRU5UKTtcbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZSgxMiwgMCwgW3RhLmxlbmd0aF0sIHRhKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iaWdzdHJpbmdfbWVtY21wXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2dldF8xXG5mdW5jdGlvbiBjYW1sX2JpZ3N0cmluZ19tZW1jbXAoczEsIHBvczEsIHMyLCBwb3MyLCBsZW4pe1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgdmFyIGEgPSBjYW1sX2JhX2dldF8xKHMxLHBvczEgKyBpKTtcbiAgICB2YXIgYiA9IGNhbWxfYmFfZ2V0XzEoczIscG9zMiArIGkpO1xuICAgIGlmIChhIDwgYikgcmV0dXJuIC0xO1xuICAgIGlmIChhID4gYikgcmV0dXJuIDE7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmlnc3RyaW5nX2JsaXRfYmFfdG9fYmFcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9iaWdzdHJpbmdfYmxpdF9iYV90b19iYShiYTEsIHBvczEsIGJhMiwgcG9zMiwgbGVuKXtcbiAgaWYoMTIgIT0gYmExLmtpbmQpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY2FtbF9iaWdzdHJpbmdfYmxpdF9iYV90b19iYToga2luZCBtaXNtYXRjaFwiKTtcbiAgaWYoMTIgIT0gYmEyLmtpbmQpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY2FtbF9iaWdzdHJpbmdfYmxpdF9iYV90b19iYToga2luZCBtaXNtYXRjaFwiKTtcbiAgaWYobGVuID09IDApIHJldHVybiAwO1xuICB2YXIgb2ZzMSA9IGJhMS5vZmZzZXQocG9zMSk7XG4gIHZhciBvZnMyID0gYmEyLm9mZnNldChwb3MyKTtcbiAgaWYob2ZzMSArIGxlbiA+IGJhMS5kYXRhLmxlbmd0aCl7XG4gICAgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB9XG4gIGlmKG9mczIgKyBsZW4gPiBiYTIuZGF0YS5sZW5ndGgpe1xuICAgIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgfVxuICB2YXIgc2xpY2UgPSBiYTEuZGF0YS5zdWJhcnJheShvZnMxLG9mczErbGVuKTtcbiAgYmEyLmRhdGEuc2V0KHNsaWNlLHBvczIpO1xuICByZXR1cm4gMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JpZ3N0cmluZ19ibGl0X3N0cmluZ190b19iYVxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50LCBjYW1sX2FycmF5X2JvdW5kX2Vycm9yLCBjYW1sX2FycmF5X29mX3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoXG5mdW5jdGlvbiBjYW1sX2JpZ3N0cmluZ19ibGl0X3N0cmluZ190b19iYShzdHIxLCBwb3MxLCBiYTIsIHBvczIsIGxlbil7XG4gIGlmKDEyICE9IGJhMi5raW5kKVxuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImNhbWxfYmlnc3RyaW5nX2JsaXRfc3RyaW5nX3RvX2JhOiBraW5kIG1pc21hdGNoXCIpO1xuICBpZihsZW4gPT0gMCkgcmV0dXJuIDA7XG4gIHZhciBvZnMyID0gYmEyLm9mZnNldChwb3MyKTtcbiAgaWYocG9zMSArIGxlbiA+IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzdHIxKSkge1xuICAgIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgfVxuICBpZihvZnMyICsgbGVuID4gYmEyLmRhdGEubGVuZ3RoKSB7XG4gICAgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB9XG4gIHZhciBzbGljZSA9IGNhbWxfYXJyYXlfb2Zfc3RyaW5nKHN0cjEpLnNsaWNlKHBvczEscG9zMSArIGxlbik7XG4gIGJhMi5kYXRhLnNldChzbGljZSxvZnMyKTtcbiAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iaWdzdHJpbmdfYmxpdF9ieXRlc190b19iYVxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50LCBjYW1sX2FycmF5X2JvdW5kX2Vycm9yLCBjYW1sX2FycmF5X29mX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX21sX2J5dGVzX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9iaWdzdHJpbmdfYmxpdF9ieXRlc190b19iYShzdHIxLCBwb3MxLCBiYTIsIHBvczIsIGxlbil7XG4gIGlmKDEyICE9IGJhMi5raW5kKVxuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImNhbWxfYmlnc3RyaW5nX2JsaXRfc3RyaW5nX3RvX2JhOiBraW5kIG1pc21hdGNoXCIpO1xuICBpZihsZW4gPT0gMCkgcmV0dXJuIDA7XG4gIHZhciBvZnMyID0gYmEyLm9mZnNldChwb3MyKTtcbiAgaWYocG9zMSArIGxlbiA+IGNhbWxfbWxfYnl0ZXNfbGVuZ3RoKHN0cjEpKSB7XG4gICAgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB9XG4gIGlmKG9mczIgKyBsZW4gPiBiYTIuZGF0YS5sZW5ndGgpIHtcbiAgICBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIH1cbiAgdmFyIHNsaWNlID0gY2FtbF9hcnJheV9vZl9ieXRlcyhzdHIxKS5zbGljZShwb3MxLHBvczEgKyBsZW4pO1xuICBiYTIuZGF0YS5zZXQoc2xpY2Usb2ZzMik7XG4gIHJldHVybiAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmlnc3RyaW5nX2JsaXRfYmFfdG9fYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9ibGl0X2J5dGVzLCBjYW1sX2J5dGVzX29mX2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX21sX2J5dGVzX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9iaWdzdHJpbmdfYmxpdF9iYV90b19ieXRlcyhiYTEsIHBvczEsIGJ5dGVzMiwgcG9zMiwgbGVuKXtcbiAgaWYoMTIgIT0gYmExLmtpbmQpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY2FtbF9iaWdzdHJpbmdfYmxpdF9zdHJpbmdfdG9fYmE6IGtpbmQgbWlzbWF0Y2hcIik7XG4gIGlmKGxlbiA9PSAwKSByZXR1cm4gMDtcbiAgdmFyIG9mczEgPSBiYTEub2Zmc2V0KHBvczEpO1xuICBpZihvZnMxICsgbGVuID4gYmExLmRhdGEubGVuZ3RoKXtcbiAgICBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIH1cbiAgaWYocG9zMiArIGxlbiA+IGNhbWxfbWxfYnl0ZXNfbGVuZ3RoKGJ5dGVzMikpe1xuICAgIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgfVxuICB2YXIgc2xpY2UgPSBiYTEuZGF0YS5zbGljZShvZnMxLCBvZnMxK2xlbik7XG4gIGNhbWxfYmxpdF9ieXRlcyhjYW1sX2J5dGVzX29mX2FycmF5KHNsaWNlKSwgMCwgYnl0ZXMyLCBwb3MyLCBsZW4pO1xuICByZXR1cm4gMFxufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogY2FtbF9tbF9kZWJ1Z19pbmZvX3N0YXR1cyBjb25zdFxuZnVuY3Rpb24gY2FtbF9tbF9kZWJ1Z19pbmZvX3N0YXR1cyAoKSB7IHJldHVybiAwOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2JhY2t0cmFjZV9zdGF0dXMgY29uc3RcbmZ1bmN0aW9uIGNhbWxfYmFja3RyYWNlX3N0YXR1cyAoKSB7IHJldHVybiAwOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2dldF9leGNlcHRpb25fYmFja3RyYWNlIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2dldF9leGNlcHRpb25fYmFja3RyYWNlICgpIHsgcmV0dXJuIDA7IH1cbi8vUHJvdmlkZXM6IGNhbWxfZ2V0X2V4Y2VwdGlvbl9yYXdfYmFja3RyYWNlIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2dldF9leGNlcHRpb25fcmF3X2JhY2t0cmFjZSAoKSB7IHJldHVybiBbMF07IH1cbi8vUHJvdmlkZXM6IGNhbWxfcmVjb3JkX2JhY2t0cmFjZVxuZnVuY3Rpb24gY2FtbF9yZWNvcmRfYmFja3RyYWNlICgpIHsgcmV0dXJuIDA7IH1cbi8vUHJvdmlkZXM6IGNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2NvbnZlcnRfcmF3X2JhY2t0cmFjZSAoKSB7IHJldHVybiBbMF07IH1cbi8vUHJvdmlkZXM6IGNhbWxfcmF3X2JhY2t0cmFjZV9sZW5ndGhcbmZ1bmN0aW9uIGNhbWxfcmF3X2JhY2t0cmFjZV9sZW5ndGgoKSB7IHJldHVybiAwOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX3Jhd19iYWNrdHJhY2VfbmV4dF9zbG90XG5mdW5jdGlvbiBjYW1sX3Jhd19iYWNrdHJhY2VfbmV4dF9zbG90KCkgeyByZXR1cm4gMCB9XG4vL1Byb3ZpZGVzOiBjYW1sX3Jhd19iYWNrdHJhY2Vfc2xvdFxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX3Jhd19iYWNrdHJhY2Vfc2xvdCAoKSB7XG4gIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIlByaW50ZXhjLmdldF9yYXdfYmFja3RyYWNlX3Nsb3Q6IGluZGV4IG91dCBvZiBib3VuZHNcIik7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX3Jlc3RvcmVfcmF3X2JhY2t0cmFjZVxuZnVuY3Rpb24gY2FtbF9yZXN0b3JlX3Jhd19iYWNrdHJhY2UoZXhuLCBidCkgeyByZXR1cm4gMCB9XG4vL1Byb3ZpZGVzOiBjYW1sX2dldF9jdXJyZW50X2NhbGxzdGFjayBjb25zdFxuZnVuY3Rpb24gY2FtbF9nZXRfY3VycmVudF9jYWxsc3RhY2sgKCkgeyByZXR1cm4gWzBdOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlX3Nsb3Rcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlX3Nsb3QoKXtcbiAgY2FtbF9mYWlsd2l0aChcImNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlX3Nsb3RcIik7XG59XG4iLCIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdGl2ZSBDYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICovXG4vKiAgZW4gQXV0b21hdGlxdWUuICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkICAgICovXG4vKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHdpdGggICAgICovXG4vKiAgdGhlIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIGZpbGUgLi4vTElDRU5TRS4gICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbi8qICRJZDogbGV4aW5nLmMgNjA0NSAyMDA0LTAxLTAxIDE2OjQyOjQzWiBkb2xpZ2V6ICQgKi9cblxuLyogVGhlIHRhYmxlLWRyaXZlbiBhdXRvbWF0b24gZm9yIGxleGVycyBnZW5lcmF0ZWQgYnkgY2FtbGxleC4gKi9cblxuLy9Qcm92aWRlczogY2FtbF9sZXhfYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfanNieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfbGV4X2FycmF5KHMpIHtcbiAgcyA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcocyk7XG4gIHZhciBsID0gcy5sZW5ndGggLyAyO1xuICB2YXIgYSA9IG5ldyBBcnJheShsKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpKyspXG4gICAgYVtpXSA9IChzLmNoYXJDb2RlQXQoMiAqIGkpIHwgKHMuY2hhckNvZGVBdCgyICogaSArIDEpIDw8IDgpKSA8PCAxNiA+PiAxNjtcbiAgcmV0dXJuIGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbGV4X2VuZ2luZVxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aCwgY2FtbF9sZXhfYXJyYXksIGNhbWxfYXJyYXlfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfbGV4X2VuZ2luZSh0YmwsIHN0YXJ0X3N0YXRlLCBsZXhidWYpIHtcbiAgdmFyIGxleF9idWZmZXIgPSAyO1xuICB2YXIgbGV4X2J1ZmZlcl9sZW4gPSAzO1xuICB2YXIgbGV4X3N0YXJ0X3BvcyA9IDU7XG4gIHZhciBsZXhfY3Vycl9wb3MgPSA2O1xuICB2YXIgbGV4X2xhc3RfcG9zID0gNztcbiAgdmFyIGxleF9sYXN0X2FjdGlvbiA9IDg7XG4gIHZhciBsZXhfZW9mX3JlYWNoZWQgPSA5O1xuICB2YXIgbGV4X2Jhc2UgPSAxO1xuICB2YXIgbGV4X2JhY2t0cmsgPSAyO1xuICB2YXIgbGV4X2RlZmF1bHQgPSAzO1xuICB2YXIgbGV4X3RyYW5zID0gNDtcbiAgdmFyIGxleF9jaGVjayA9IDU7XG5cbiAgaWYgKCF0YmwubGV4X2RlZmF1bHQpIHtcbiAgICB0YmwubGV4X2Jhc2UgPSAgICBjYW1sX2xleF9hcnJheSAodGJsW2xleF9iYXNlXSk7XG4gICAgdGJsLmxleF9iYWNrdHJrID0gY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfYmFja3Rya10pO1xuICAgIHRibC5sZXhfY2hlY2sgPSAgIGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X2NoZWNrXSk7XG4gICAgdGJsLmxleF90cmFucyA9ICAgY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfdHJhbnNdKTtcbiAgICB0YmwubGV4X2RlZmF1bHQgPSBjYW1sX2xleF9hcnJheSAodGJsW2xleF9kZWZhdWx0XSk7XG4gIH1cblxuICB2YXIgYywgc3RhdGUgPSBzdGFydF9zdGF0ZTtcblxuICB2YXIgYnVmZmVyID0gY2FtbF9hcnJheV9vZl9ieXRlcyhsZXhidWZbbGV4X2J1ZmZlcl0pO1xuXG4gIGlmIChzdGF0ZSA+PSAwKSB7XG4gICAgLyogRmlyc3QgZW50cnkgKi9cbiAgICBsZXhidWZbbGV4X2xhc3RfcG9zXSA9IGxleGJ1ZltsZXhfc3RhcnRfcG9zXSA9IGxleGJ1ZltsZXhfY3Vycl9wb3NdO1xuICAgIGxleGJ1ZltsZXhfbGFzdF9hY3Rpb25dID0gLTE7XG4gIH0gZWxzZSB7XG4gICAgLyogUmVlbnRyeSBhZnRlciByZWZpbGwgKi9cbiAgICBzdGF0ZSA9IC1zdGF0ZSAtIDE7XG4gIH1cbiAgZm9yKDs7KSB7XG4gICAgLyogTG9va3VwIGJhc2UgYWRkcmVzcyBvciBhY3Rpb24gbnVtYmVyIGZvciBjdXJyZW50IHN0YXRlICovXG4gICAgdmFyIGJhc2UgPSB0YmwubGV4X2Jhc2Vbc3RhdGVdO1xuICAgIGlmIChiYXNlIDwgMCkgcmV0dXJuIC1iYXNlLTE7XG4gICAgLyogU2VlIGlmIGl0J3MgYSBiYWNrdHJhY2sgcG9pbnQgKi9cbiAgICB2YXIgYmFja3RyayA9IHRibC5sZXhfYmFja3Rya1tzdGF0ZV07XG4gICAgaWYgKGJhY2t0cmsgPj0gMCkge1xuICAgICAgbGV4YnVmW2xleF9sYXN0X3Bvc10gPSBsZXhidWZbbGV4X2N1cnJfcG9zXTtcbiAgICAgIGxleGJ1ZltsZXhfbGFzdF9hY3Rpb25dID0gYmFja3RyaztcbiAgICB9XG4gICAgLyogU2VlIGlmIHdlIG5lZWQgYSByZWZpbGwgKi9cbiAgICBpZiAobGV4YnVmW2xleF9jdXJyX3Bvc10gPj0gbGV4YnVmW2xleF9idWZmZXJfbGVuXSl7XG4gICAgICBpZiAobGV4YnVmW2xleF9lb2ZfcmVhY2hlZF0gPT0gMClcbiAgICAgICAgcmV0dXJuIC1zdGF0ZSAtIDE7XG4gICAgICBlbHNlXG4gICAgICAgIGMgPSAyNTY7XG4gICAgfWVsc2V7XG4gICAgICAvKiBSZWFkIG5leHQgaW5wdXQgY2hhciAqL1xuICAgICAgYyA9IGJ1ZmZlcltsZXhidWZbbGV4X2N1cnJfcG9zXV07XG4gICAgICBsZXhidWZbbGV4X2N1cnJfcG9zXSArKztcbiAgICB9XG4gICAgLyogRGV0ZXJtaW5lIG5leHQgc3RhdGUgKi9cbiAgICBpZiAodGJsLmxleF9jaGVja1tiYXNlICsgY10gPT0gc3RhdGUpXG4gICAgICBzdGF0ZSA9IHRibC5sZXhfdHJhbnNbYmFzZSArIGNdO1xuICAgIGVsc2VcbiAgICAgIHN0YXRlID0gdGJsLmxleF9kZWZhdWx0W3N0YXRlXTtcbiAgICAvKiBJZiBubyB0cmFuc2l0aW9uIG9uIHRoaXMgY2hhciwgcmV0dXJuIHRvIGxhc3QgYmFja3RyYWNrIHBvaW50ICovXG4gICAgaWYgKHN0YXRlIDwgMCkge1xuICAgICAgbGV4YnVmW2xleF9jdXJyX3Bvc10gPSBsZXhidWZbbGV4X2xhc3RfcG9zXTtcbiAgICAgIGlmIChsZXhidWZbbGV4X2xhc3RfYWN0aW9uXSA9PSAtMSlcbiAgICAgICAgY2FtbF9mYWlsd2l0aChcImxleGluZzogZW1wdHkgdG9rZW5cIik7XG4gICAgICBlbHNlXG4gICAgICAgIHJldHVybiBsZXhidWZbbGV4X2xhc3RfYWN0aW9uXTtcbiAgICB9ZWxzZXtcbiAgICAgIC8qIEVyYXNlIHRoZSBFT0YgY29uZGl0aW9uIG9ubHkgaWYgdGhlIEVPRiBwc2V1ZG8tY2hhcmFjdGVyIHdhc1xuICAgICAgICAgY29uc3VtZWQgYnkgdGhlIGF1dG9tYXRvbiAoaS5lLiB0aGVyZSB3YXMgbm8gYmFja3RyYWNrIGFib3ZlKVxuICAgICAgKi9cbiAgICAgIGlmIChjID09IDI1NikgbGV4YnVmW2xleF9lb2ZfcmVhY2hlZF0gPSAwO1xuICAgIH1cbiAgfVxufVxuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiBOZXcgbGV4ZXIgZW5naW5lLCB3aXRoIG1lbW9yeSBvZiBwb3NpdGlvbnMgICovXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbi8vUHJvdmlkZXM6IGNhbWxfbmV3X2xleF9lbmdpbmVcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGgsIGNhbWxfbGV4X2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nLCBjYW1sX2FycmF5X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2xleF9ydW5fbWVtKHMsIGksIG1lbSwgY3Vycl9wb3MpIHtcbiAgZm9yICg7Oykge1xuICAgIHZhciBkc3QgPSBzLmNoYXJDb2RlQXQoaSk7IGkrKztcbiAgICBpZiAoZHN0ID09IDB4ZmYpIHJldHVybjtcbiAgICB2YXIgc3JjID0gcy5jaGFyQ29kZUF0KGkpOyBpKys7XG4gICAgaWYgKHNyYyA9PSAweGZmKVxuICAgICAgbWVtIFtkc3QgKyAxXSA9IGN1cnJfcG9zO1xuICAgIGVsc2VcbiAgICAgIG1lbSBbZHN0ICsgMV0gPSBtZW0gW3NyYyArIDFdO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNhbWxfbGV4X3J1bl90YWcocywgaSwgbWVtKSB7XG4gIGZvciAoOzspIHtcbiAgICB2YXIgZHN0ID0gcy5jaGFyQ29kZUF0KGkpOyBpKys7XG4gICAgaWYgKGRzdCA9PSAweGZmKSByZXR1cm4gO1xuICAgIHZhciBzcmMgPSBzLmNoYXJDb2RlQXQoaSk7IGkrKztcbiAgICBpZiAoc3JjID09IDB4ZmYpXG4gICAgICBtZW0gW2RzdCArIDFdID0gLTE7XG4gICAgZWxzZVxuICAgICAgbWVtIFtkc3QgKyAxXSA9IG1lbSBbc3JjICsgMV07XG4gIH1cbn1cblxuZnVuY3Rpb24gY2FtbF9uZXdfbGV4X2VuZ2luZSh0YmwsIHN0YXJ0X3N0YXRlLCBsZXhidWYpIHtcbiAgdmFyIGxleF9idWZmZXIgPSAyO1xuICB2YXIgbGV4X2J1ZmZlcl9sZW4gPSAzO1xuICB2YXIgbGV4X3N0YXJ0X3BvcyA9IDU7XG4gIHZhciBsZXhfY3Vycl9wb3MgPSA2O1xuICB2YXIgbGV4X2xhc3RfcG9zID0gNztcbiAgdmFyIGxleF9sYXN0X2FjdGlvbiA9IDg7XG4gIHZhciBsZXhfZW9mX3JlYWNoZWQgPSA5O1xuICB2YXIgbGV4X21lbSA9IDEwO1xuICB2YXIgbGV4X2Jhc2UgPSAxO1xuICB2YXIgbGV4X2JhY2t0cmsgPSAyO1xuICB2YXIgbGV4X2RlZmF1bHQgPSAzO1xuICB2YXIgbGV4X3RyYW5zID0gNDtcbiAgdmFyIGxleF9jaGVjayA9IDU7XG4gIHZhciBsZXhfYmFzZV9jb2RlID0gNjtcbiAgdmFyIGxleF9iYWNrdHJrX2NvZGUgPSA3O1xuICB2YXIgbGV4X2RlZmF1bHRfY29kZSA9IDg7XG4gIHZhciBsZXhfdHJhbnNfY29kZSA9IDk7XG4gIHZhciBsZXhfY2hlY2tfY29kZSA9IDEwO1xuICB2YXIgbGV4X2NvZGUgPSAxMTtcblxuICBpZiAoIXRibC5sZXhfZGVmYXVsdCkge1xuICAgIHRibC5sZXhfYmFzZSA9ICAgIGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X2Jhc2VdKTtcbiAgICB0YmwubGV4X2JhY2t0cmsgPSBjYW1sX2xleF9hcnJheSAodGJsW2xleF9iYWNrdHJrXSk7XG4gICAgdGJsLmxleF9jaGVjayA9ICAgY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfY2hlY2tdKTtcbiAgICB0YmwubGV4X3RyYW5zID0gICBjYW1sX2xleF9hcnJheSAodGJsW2xleF90cmFuc10pO1xuICAgIHRibC5sZXhfZGVmYXVsdCA9IGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X2RlZmF1bHRdKTtcbiAgfVxuICBpZiAoIXRibC5sZXhfZGVmYXVsdF9jb2RlKSB7XG4gICAgdGJsLmxleF9iYXNlX2NvZGUgPSAgICBjYW1sX2xleF9hcnJheSAodGJsW2xleF9iYXNlX2NvZGVdKTtcbiAgICB0YmwubGV4X2JhY2t0cmtfY29kZSA9IGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X2JhY2t0cmtfY29kZV0pO1xuICAgIHRibC5sZXhfY2hlY2tfY29kZSA9ICAgY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfY2hlY2tfY29kZV0pO1xuICAgIHRibC5sZXhfdHJhbnNfY29kZSA9ICAgY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfdHJhbnNfY29kZV0pO1xuICAgIHRibC5sZXhfZGVmYXVsdF9jb2RlID0gY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfZGVmYXVsdF9jb2RlXSk7XG4gIH1cbiAgaWYgKHRibC5sZXhfY29kZSA9PSBudWxsKSB0YmwubGV4X2NvZGUgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHRibFtsZXhfY29kZV0pO1xuXG4gIHZhciBjLCBzdGF0ZSA9IHN0YXJ0X3N0YXRlO1xuXG4gIHZhciBidWZmZXIgPSBjYW1sX2FycmF5X29mX2J5dGVzKGxleGJ1ZltsZXhfYnVmZmVyXSk7XG5cbiAgaWYgKHN0YXRlID49IDApIHtcbiAgICAvKiBGaXJzdCBlbnRyeSAqL1xuICAgIGxleGJ1ZltsZXhfbGFzdF9wb3NdID0gbGV4YnVmW2xleF9zdGFydF9wb3NdID0gbGV4YnVmW2xleF9jdXJyX3Bvc107XG4gICAgbGV4YnVmW2xleF9sYXN0X2FjdGlvbl0gPSAtMTtcbiAgfSBlbHNlIHtcbiAgICAvKiBSZWVudHJ5IGFmdGVyIHJlZmlsbCAqL1xuICAgIHN0YXRlID0gLXN0YXRlIC0gMTtcbiAgfVxuICBmb3IoOzspIHtcbiAgICAvKiBMb29rdXAgYmFzZSBhZGRyZXNzIG9yIGFjdGlvbiBudW1iZXIgZm9yIGN1cnJlbnQgc3RhdGUgKi9cbiAgICB2YXIgYmFzZSA9IHRibC5sZXhfYmFzZVtzdGF0ZV07XG4gICAgaWYgKGJhc2UgPCAwKSB7XG4gICAgICB2YXIgcGNfb2ZmID0gdGJsLmxleF9iYXNlX2NvZGVbc3RhdGVdO1xuICAgICAgY2FtbF9sZXhfcnVuX3RhZyh0YmwubGV4X2NvZGUsIHBjX29mZiwgbGV4YnVmW2xleF9tZW1dKTtcbiAgICAgIHJldHVybiAtYmFzZS0xO1xuICAgIH1cbiAgICAvKiBTZWUgaWYgaXQncyBhIGJhY2t0cmFjayBwb2ludCAqL1xuICAgIHZhciBiYWNrdHJrID0gdGJsLmxleF9iYWNrdHJrW3N0YXRlXTtcbiAgICBpZiAoYmFja3RyayA+PSAwKSB7XG4gICAgICB2YXIgcGNfb2ZmID0gdGJsLmxleF9iYWNrdHJrX2NvZGVbc3RhdGVdO1xuICAgICAgY2FtbF9sZXhfcnVuX3RhZyh0YmwubGV4X2NvZGUsIHBjX29mZiwgbGV4YnVmW2xleF9tZW1dKTtcbiAgICAgIGxleGJ1ZltsZXhfbGFzdF9wb3NdID0gbGV4YnVmW2xleF9jdXJyX3Bvc107XG4gICAgICBsZXhidWZbbGV4X2xhc3RfYWN0aW9uXSA9IGJhY2t0cms7XG4gICAgfVxuICAgIC8qIFNlZSBpZiB3ZSBuZWVkIGEgcmVmaWxsICovXG4gICAgaWYgKGxleGJ1ZltsZXhfY3Vycl9wb3NdID49IGxleGJ1ZltsZXhfYnVmZmVyX2xlbl0pe1xuICAgICAgaWYgKGxleGJ1ZltsZXhfZW9mX3JlYWNoZWRdID09IDApXG4gICAgICAgIHJldHVybiAtc3RhdGUgLSAxO1xuICAgICAgZWxzZVxuICAgICAgICBjID0gMjU2O1xuICAgIH1lbHNle1xuICAgICAgLyogUmVhZCBuZXh0IGlucHV0IGNoYXIgKi9cbiAgICAgIGMgPSBidWZmZXJbbGV4YnVmW2xleF9jdXJyX3Bvc11dO1xuICAgICAgbGV4YnVmW2xleF9jdXJyX3Bvc10gKys7XG4gICAgfVxuICAgIC8qIERldGVybWluZSBuZXh0IHN0YXRlICovXG4gICAgdmFyIHBzdGF0ZSA9IHN0YXRlIDtcbiAgICBpZiAodGJsLmxleF9jaGVja1tiYXNlICsgY10gPT0gc3RhdGUpXG4gICAgICBzdGF0ZSA9IHRibC5sZXhfdHJhbnNbYmFzZSArIGNdO1xuICAgIGVsc2VcbiAgICAgIHN0YXRlID0gdGJsLmxleF9kZWZhdWx0W3N0YXRlXTtcbiAgICAvKiBJZiBubyB0cmFuc2l0aW9uIG9uIHRoaXMgY2hhciwgcmV0dXJuIHRvIGxhc3QgYmFja3RyYWNrIHBvaW50ICovXG4gICAgaWYgKHN0YXRlIDwgMCkge1xuICAgICAgbGV4YnVmW2xleF9jdXJyX3Bvc10gPSBsZXhidWZbbGV4X2xhc3RfcG9zXTtcbiAgICAgIGlmIChsZXhidWZbbGV4X2xhc3RfYWN0aW9uXSA9PSAtMSlcbiAgICAgICAgY2FtbF9mYWlsd2l0aChcImxleGluZzogZW1wdHkgdG9rZW5cIik7XG4gICAgICBlbHNlXG4gICAgICAgIHJldHVybiBsZXhidWZbbGV4X2xhc3RfYWN0aW9uXTtcbiAgICB9ZWxzZXtcbiAgICAgIC8qIElmIHNvbWUgdHJhbnNpdGlvbiwgZ2V0IGFuZCBwZXJmb3JtIG1lbW9yeSBtb3ZlcyAqL1xuICAgICAgdmFyIGJhc2VfY29kZSA9IHRibC5sZXhfYmFzZV9jb2RlW3BzdGF0ZV0sIHBjX29mZjtcbiAgICAgIGlmICh0YmwubGV4X2NoZWNrX2NvZGVbYmFzZV9jb2RlICsgY10gPT0gcHN0YXRlKVxuICAgICAgICBwY19vZmYgPSB0YmwubGV4X3RyYW5zX2NvZGVbYmFzZV9jb2RlICsgY107XG4gICAgICBlbHNlXG4gICAgICAgIHBjX29mZiA9IHRibC5sZXhfZGVmYXVsdF9jb2RlW3BzdGF0ZV07XG4gICAgICBpZiAocGNfb2ZmID4gMClcbiAgICAgICAgY2FtbF9sZXhfcnVuX21lbVxuICAgICAgKHRibC5sZXhfY29kZSwgcGNfb2ZmLCBsZXhidWZbbGV4X21lbV0sIGxleGJ1ZltsZXhfY3Vycl9wb3NdKTtcbiAgICAgIC8qIEVyYXNlIHRoZSBFT0YgY29uZGl0aW9uIG9ubHkgaWYgdGhlIEVPRiBwc2V1ZG8tY2hhcmFjdGVyIHdhc1xuICAgICAgICAgY29uc3VtZWQgYnkgdGhlIGF1dG9tYXRvbiAoaS5lLiB0aGVyZSB3YXMgbm8gYmFja3RyYWNrIGFib3ZlKVxuICAgICAgKi9cbiAgICAgIGlmIChjID09IDI1NikgbGV4YnVmW2xleF9lb2ZfcmVhY2hlZF0gPSAwO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8vLy8vLy8vLy8vLyBBcnJheVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X3N1YiBtdXRhYmxlXG5mdW5jdGlvbiBjYW1sX2FycmF5X3N1YiAoYSwgaSwgbGVuKSB7XG4gIHZhciBhMiA9IG5ldyBBcnJheShsZW4rMSk7XG4gIGEyWzBdPTA7XG4gIGZvcih2YXIgaTIgPSAxLCBpMT0gaSsxOyBpMiA8PSBsZW47IGkyKyssaTErKyApe1xuICAgIGEyW2kyXT1hW2kxXTtcbiAgfVxuICByZXR1cm4gYTI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfYXBwZW5kIG11dGFibGVcbmZ1bmN0aW9uIGNhbWxfYXJyYXlfYXBwZW5kKGExLCBhMikge1xuICB2YXIgbDEgPSBhMS5sZW5ndGgsIGwyID0gYTIubGVuZ3RoO1xuICB2YXIgbCA9IGwxK2wyLTFcbiAgdmFyIGEgPSBuZXcgQXJyYXkobCk7XG4gIGFbMF0gPSAwO1xuICB2YXIgaSA9IDEsaiA9IDE7XG4gIGZvcig7aTxsMTtpKyspIGFbaV09YTFbaV07XG4gIGZvcig7aTxsO2krKyxqKyspIGFbaV09YTJbal07XG4gIHJldHVybiBhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X2NvbmNhdCBtdXRhYmxlXG5mdW5jdGlvbiBjYW1sX2FycmF5X2NvbmNhdChsKSB7XG4gIHZhciBhID0gWzBdO1xuICB3aGlsZSAobCAhPT0gMCkge1xuICAgIHZhciBiID0gbFsxXTtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGIubGVuZ3RoOyBpKyspIGEucHVzaChiW2ldKTtcbiAgICBsID0gbFsyXTtcbiAgfVxuICByZXR1cm4gYTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9ibGl0XG5mdW5jdGlvbiBjYW1sX2FycmF5X2JsaXQoYTEsIGkxLCBhMiwgaTIsIGxlbikge1xuICBpZiAoaTIgPD0gaTEpIHtcbiAgICBmb3IgKHZhciBqID0gMTsgaiA8PSBsZW47IGorKykgYTJbaTIgKyBqXSA9IGExW2kxICsgal07XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgaiA9IGxlbjsgaiA+PSAxOyBqLS0pIGEyW2kyICsgal0gPSBhMVtpMSArIGpdO1xuICB9O1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mbG9hdGFycmF5X2JsaXRcbmZ1bmN0aW9uIGNhbWxfZmxvYXRhcnJheV9ibGl0KGExLCBpMSwgYTIsIGkyLCBsZW4pIHtcbiAgaWYgKGkyIDw9IGkxKSB7XG4gICAgZm9yICh2YXIgaiA9IDE7IGogPD0gbGVuOyBqKyspIGEyW2kyICsgal0gPSBhMVtpMSArIGpdO1xuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIGogPSBsZW47IGogPj0gMTsgai0tKSBhMltpMiArIGpdID0gYTFbaTEgKyBqXTtcbiAgfTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vLy8vLy8vLy8vLy8gUGVydmFzaXZlXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X3NldCAobXV0YWJsZSwgY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9hcnJheV9zZXQgKGFycmF5LCBpbmRleCwgbmV3dmFsKSB7XG4gIGlmICgoaW5kZXggPCAwKSB8fCAoaW5kZXggPj0gYXJyYXkubGVuZ3RoIC0gMSkpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgYXJyYXlbaW5kZXgrMV09bmV3dmFsOyByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9nZXQgbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9hcnJheV9nZXQgKGFycmF5LCBpbmRleCkge1xuICBpZiAoKGluZGV4IDwgMCkgfHwgKGluZGV4ID49IGFycmF5Lmxlbmd0aCAtIDEpKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHJldHVybiBhcnJheVtpbmRleCsxXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9maWxsXG5mdW5jdGlvbiBjYW1sX2FycmF5X2ZpbGwoYXJyYXksIG9mcywgbGVuLCB2KXtcbiAgZm9yKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKXtcbiAgICBhcnJheVtvZnMraSsxXSA9IHY7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY2hlY2tfYm91bmQgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfY2hlY2tfYm91bmQgKGFycmF5LCBpbmRleCkge1xuICBpZiAoaW5kZXggPj4+IDAgPj0gYXJyYXkubGVuZ3RoIC0gMSkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICByZXR1cm4gYXJyYXk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWFrZV92ZWN0IGNvbnN0IChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX21ha2VfdmVjdCAobGVuLCBpbml0KSB7XG4gIGlmIChsZW4gPCAwKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHZhciBsZW4gPSBsZW4gKyAxIHwgMDtcbiAgdmFyIGIgPSBuZXcgQXJyYXkobGVuKTtcbiAgYlswXT0wO1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGxlbjsgaSsrKSBiW2ldID0gaW5pdDtcbiAgcmV0dXJuIGI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWFrZV9mbG9hdF92ZWN0IGNvbnN0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfbWFrZV9mbG9hdF92ZWN0KGxlbil7XG4gIGlmIChsZW4gPCAwKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHZhciBsZW4gPSBsZW4gKyAxIHwgMDtcbiAgdmFyIGIgPSBuZXcgQXJyYXkobGVuKTtcbiAgYlswXT0yNTQ7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgbGVuOyBpKyspIGJbaV0gPSAwO1xuICByZXR1cm4gYlxufVxuLy9Qcm92aWRlczogY2FtbF9mbG9hdGFycmF5X2NyZWF0ZSBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX2Zsb2F0YXJyYXlfY3JlYXRlKGxlbil7XG4gIGlmIChsZW4gPCAwKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHZhciBsZW4gPSBsZW4gKyAxIHwgMDtcbiAgdmFyIGIgPSBuZXcgQXJyYXkobGVuKTtcbiAgYlswXT0yNTQ7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgbGVuOyBpKyspIGJbaV0gPSAwO1xuICByZXR1cm4gYlxufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwIErDqXLDtG1lIFZvdWlsbG9uXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vIFdlYWsgQVBJLCBidXQgd2l0aG91dCB0aGUgd2VhayBzZW1hbnRpY3NcblxuLy9Qcm92aWRlczogY2FtbF9lcGhlX2tleV9vZmZzZXRcbnZhciBjYW1sX2VwaGVfa2V5X29mZnNldCA9IDNcblxuLy9Qcm92aWRlczogY2FtbF9lcGhlX2RhdGFfb2Zmc2V0XG52YXIgY2FtbF9lcGhlX2RhdGFfb2Zmc2V0ID0gMlxuXG4vL1Byb3ZpZGVzOiBjYW1sX3dlYWtfY3JlYXRlXG4vL1JlcXVpcmVzOiBjYW1sX2VwaGVfa2V5X29mZnNldCwgY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX3dlYWtfY3JlYXRlIChuKSB7XG4gIGlmIChuIDwgMCkgY2FtbF9pbnZhbGlkX2FyZ3VtZW50IChcIldlYWsuY3JlYXRlXCIpO1xuICB2YXIgeCA9IFsyNTEsXCJjYW1sX2VwaGVfbGlzdF9oZWFkXCJdO1xuICB4Lmxlbmd0aCA9IGNhbWxfZXBoZV9rZXlfb2Zmc2V0ICsgbjtcbiAgcmV0dXJuIHg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfd2Vha19zZXRcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9rZXlfb2Zmc2V0LCBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfd2Vha19zZXQoeCwgaSwgdikge1xuICBpZihpIDwgMCB8fCBjYW1sX2VwaGVfa2V5X29mZnNldCArIGkgPj0geC5sZW5ndGgpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50IChcIldlYWsuc2V0XCIpO1xuICB4W2NhbWxfZXBoZV9rZXlfb2Zmc2V0ICsgaV0gPSB2O1xuICByZXR1cm4gMDtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfd2Vha19nZXRcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9rZXlfb2Zmc2V0LCBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfd2Vha19nZXQoeCwgaSkge1xuICBpZihpIDwgMCB8fCBjYW1sX2VwaGVfa2V5X29mZnNldCArIGkgPj0geC5sZW5ndGgpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50IChcIldlYWsuZ2V0X2tleVwiKTtcbiAgcmV0dXJuICh4W2NhbWxfZXBoZV9rZXlfb2Zmc2V0ICsgaSBdPT09dW5kZWZpbmVkKT8wOnhbY2FtbF9lcGhlX2tleV9vZmZzZXQgKyBpXTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfd2Vha19nZXRfY29weVxuLy9SZXF1aXJlczogY2FtbF93ZWFrX2dldCxjYW1sX2VwaGVfa2V5X29mZnNldFxuLy9SZXF1aXJlczogY2FtbF9vYmpfZHVwLCBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfd2Vha19nZXRfY29weSh4LCBpKSB7XG4gIGlmKGkgPCAwIHx8IGNhbWxfZXBoZV9rZXlfb2Zmc2V0ICsgaSA+PSB4Lmxlbmd0aClcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQgKFwiV2Vhay5nZXRfY29weVwiKTtcbiAgdmFyIHkgPSBjYW1sX3dlYWtfZ2V0KHgsIGkpO1xuICBpZiAoeSA9PT0gMCkgcmV0dXJuIHk7XG4gIHZhciB6ID0geVsxXTtcbiAgaWYgKHogaW5zdGFuY2VvZiBBcnJheSkgcmV0dXJuIFswLCBjYW1sX29ial9kdXAoeildO1xuICByZXR1cm4geTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF93ZWFrX2NoZWNrIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9rZXlfb2Zmc2V0XG5mdW5jdGlvbiBjYW1sX3dlYWtfY2hlY2soeCwgaSkge1xuICBpZih4W2NhbWxfZXBoZV9rZXlfb2Zmc2V0ICsgaV0hPT11bmRlZmluZWQgJiYgeFtjYW1sX2VwaGVfa2V5X29mZnNldCArIGldICE9PTApXG4gICAgcmV0dXJuIDE7XG4gIGVsc2VcbiAgICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF93ZWFrX2JsaXRcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYmxpdFxuLy9SZXF1aXJlczogY2FtbF9lcGhlX2tleV9vZmZzZXRcbmZ1bmN0aW9uIGNhbWxfd2Vha19ibGl0KGExLCBpMSwgYTIsIGkyLCBsZW4pIHtcbiAgLy8gbWludXMgb25lIGJlY2F1c2UgY2FtbF9hcnJheV9ibGl0IHdvcmtzIG9uIG9jYW1sIGFycmF5XG4gIGNhbWxfYXJyYXlfYmxpdChhMSwgY2FtbF9lcGhlX2tleV9vZmZzZXQgKyBpMSAtIDEsXG4gICAgICAgICAgICAgICAgICBhMiwgY2FtbF9lcGhlX2tleV9vZmZzZXQgKyBpMiAtIDEsXG4gICAgICAgICAgICAgICAgICBsZW4pO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9lcGhlX2NyZWF0ZVxuLy9SZXF1aXJlczogY2FtbF93ZWFrX2NyZWF0ZVxudmFyIGNhbWxfZXBoZV9jcmVhdGUgPSBjYW1sX3dlYWtfY3JlYXRlXG5cbi8vUHJvdmlkZXM6IGNhbWxfZXBoZV9ibGl0X2tleVxuLy9SZXF1aXJlczogY2FtbF93ZWFrX2JsaXRcbnZhciBjYW1sX2VwaGVfYmxpdF9rZXkgPSBjYW1sX3dlYWtfYmxpdFxuXG4vL1Byb3ZpZGVzOiBjYW1sX2VwaGVfZ2V0X2tleVxuLy9SZXF1aXJlczogY2FtbF93ZWFrX2dldFxudmFyIGNhbWxfZXBoZV9nZXRfa2V5ID0gY2FtbF93ZWFrX2dldFxuXG4vL1Byb3ZpZGVzOiBjYW1sX2VwaGVfZ2V0X2tleV9jb3B5XG4vL1JlcXVpcmVzOiBjYW1sX3dlYWtfZ2V0X2NvcHlcbnZhciBjYW1sX2VwaGVfZ2V0X2tleV9jb3B5ID0gY2FtbF93ZWFrX2dldF9jb3B5XG5cbi8vUHJvdmlkZXM6IGNhbWxfZXBoZV9jaGVja19rZXlcbi8vUmVxdWlyZXM6IGNhbWxfd2Vha19jaGVja1xudmFyIGNhbWxfZXBoZV9jaGVja19rZXkgPSBjYW1sX3dlYWtfY2hlY2tcblxuLy9Qcm92aWRlczogY2FtbF9lcGhlX3NldF9rZXlcbi8vUmVxdWlyZXM6IGNhbWxfd2Vha19zZXRcbmZ1bmN0aW9uIGNhbWxfZXBoZV9zZXRfa2V5KHgsIGksIHYpIHtcbiAgcmV0dXJuIGNhbWxfd2Vha19zZXQoeCwgaSwgWzAsIHZdKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2VwaGVfdW5zZXRfa2V5XG4vL1JlcXVpcmVzOiBjYW1sX3dlYWtfc2V0XG5mdW5jdGlvbiBjYW1sX2VwaGVfdW5zZXRfa2V5KHgsIGkpIHtcbiAgcmV0dXJuIGNhbWxfd2Vha19zZXQoeCwgaSwgMClcbn1cblxuLy9Qcm92aWRlczogY2FtbF9lcGhlX2JsaXRfZGF0YVxuLy9SZXF1aXJlczogY2FtbF9lcGhlX2RhdGFfb2Zmc2V0XG5mdW5jdGlvbiBjYW1sX2VwaGVfYmxpdF9kYXRhKHNyYywgZHN0KXtcbiAgZHN0W2NhbWxfZXBoZV9kYXRhX29mZnNldF0gPSBzcmNbY2FtbF9lcGhlX2RhdGFfb2Zmc2V0XTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZXBoZV9nZXRfZGF0YVxuLy9SZXF1aXJlczogY2FtbF9lcGhlX2RhdGFfb2Zmc2V0XG5mdW5jdGlvbiBjYW1sX2VwaGVfZ2V0X2RhdGEoeCl7XG4gIGlmKHhbY2FtbF9lcGhlX2RhdGFfb2Zmc2V0XSA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiAwO1xuICBlbHNlXG4gICAgcmV0dXJuIFswLCB4W2NhbWxfZXBoZV9kYXRhX29mZnNldF1dO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2VwaGVfZ2V0X2RhdGFfY29weVxuLy9SZXF1aXJlczogY2FtbF9lcGhlX2RhdGFfb2Zmc2V0XG4vL1JlcXVpcmVzOiBjYW1sX29ial9kdXBcbmZ1bmN0aW9uIGNhbWxfZXBoZV9nZXRfZGF0YV9jb3B5KHgpe1xuICBpZih4W2NhbWxfZXBoZV9kYXRhX29mZnNldF0gPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gMDtcbiAgZWxzZVxuICAgIHJldHVybiBbMCwgY2FtbF9vYmpfZHVwKHhbY2FtbF9lcGhlX2RhdGFfb2Zmc2V0XSldO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2VwaGVfc2V0X2RhdGFcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9kYXRhX29mZnNldFxuZnVuY3Rpb24gY2FtbF9lcGhlX3NldF9kYXRhKHgsIGRhdGEpe1xuICB4W2NhbWxfZXBoZV9kYXRhX29mZnNldF0gPSBkYXRhO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9lcGhlX3Vuc2V0X2RhdGFcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9kYXRhX29mZnNldFxuZnVuY3Rpb24gY2FtbF9lcGhlX3Vuc2V0X2RhdGEoeCwgZGF0YSl7XG4gIHhbY2FtbF9lcGhlX2RhdGFfb2Zmc2V0XSA9IHVuZGVmaW5lZDtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZXBoZV9jaGVja19kYXRhXG4vL1JlcXVpcmVzOiBjYW1sX2VwaGVfZGF0YV9vZmZzZXRcbmZ1bmN0aW9uIGNhbWxfZXBoZV9jaGVja19kYXRhKHgpe1xuICBpZih4W2NhbWxfZXBoZV9kYXRhX29mZnNldF0gPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gMDtcbiAgZWxzZVxuICAgIHJldHVybiAxO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwIErDqXLDtG1lIFZvdWlsbG9uXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cblxuLy9Qcm92aWRlczogY2FtbF9tZDVfY2hhblxuLy9SZXF1aXJlczogY2FtbF9tZDVfc3RyaW5nLCBjYW1sX3N0cmluZ19vZl9hcnJheSxjYW1sX21sX2NoYW5uZWxzXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX2VuZF9vZl9maWxlLCBjYW1sX2NyZWF0ZV9ieXRlcywgY2FtbF9zdHJpbmdfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfbWQ1X2NoYW4oY2hhbmlkLGxlbil7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdO1xuICB2YXIgY2hhbl9sZW4gPSBjaGFuLmZpbGUubGVuZ3RoKCk7XG4gIGlmKGxlbjwwKSBsZW4gPSBjaGFuX2xlbiAtIGNoYW4ub2Zmc2V0O1xuICBpZihjaGFuLm9mZnNldCArIGxlbiA+IGNoYW5fbGVuKSBjYW1sX3JhaXNlX2VuZF9vZl9maWxlKCk7XG4gIHZhciBidWYgPSBjYW1sX2NyZWF0ZV9ieXRlcyhsZW4pO1xuICBjaGFuLmZpbGUucmVhZChjaGFuLm9mZnNldCxidWYsMCxsZW4pO1xuICByZXR1cm4gY2FtbF9tZDVfc3RyaW5nKGNhbWxfc3RyaW5nX29mX2J5dGVzKGJ1ZiksMCxsZW4pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21kNV9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfb2Zfc3RyaW5nLCBjYW1sX21kNV9ieXRlc1xuZnVuY3Rpb24gY2FtbF9tZDVfc3RyaW5nKHMsIG9mcywgbGVuKSB7XG4gIHJldHVybiBjYW1sX21kNV9ieXRlcyhjYW1sX2J5dGVzX29mX3N0cmluZyhzKSxvZnMsbGVuKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tZDVfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2FycmF5LCBjYW1sX21sX2J5dGVzX2NvbnRlbnRcbnZhciBjYW1sX21kNV9ieXRlcyA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gYWRkICh4LCB5KSB7IHJldHVybiAoeCArIHkpIHwgMDsgfVxuICBmdW5jdGlvbiB4eChxLGEsYix4LHMsdCkge1xuICAgIGEgPSBhZGQoYWRkKGEsIHEpLCBhZGQoeCwgdCkpO1xuICAgIHJldHVybiBhZGQoKGEgPDwgcykgfCAoYSA+Pj4gKDMyIC0gcykpLCBiKTtcbiAgfVxuICBmdW5jdGlvbiBmZihhLGIsYyxkLHgscyx0KSB7XG4gICAgcmV0dXJuIHh4KChiICYgYykgfCAoKH5iKSAmIGQpLCBhLCBiLCB4LCBzLCB0KTtcbiAgfVxuICBmdW5jdGlvbiBnZyhhLGIsYyxkLHgscyx0KSB7XG4gICAgcmV0dXJuIHh4KChiICYgZCkgfCAoYyAmICh+ZCkpLCBhLCBiLCB4LCBzLCB0KTtcbiAgfVxuICBmdW5jdGlvbiBoaChhLGIsYyxkLHgscyx0KSB7IHJldHVybiB4eChiIF4gYyBeIGQsIGEsIGIsIHgsIHMsIHQpOyB9XG4gIGZ1bmN0aW9uIGlpKGEsYixjLGQseCxzLHQpIHsgcmV0dXJuIHh4KGMgXiAoYiB8ICh+ZCkpLCBhLCBiLCB4LCBzLCB0KTsgfVxuXG4gIGZ1bmN0aW9uIG1kNShidWZmZXIsIGxlbmd0aCkge1xuICAgIHZhciBpID0gbGVuZ3RoO1xuICAgIGJ1ZmZlcltpID4+IDJdIHw9IDB4ODAgPDwgKDggKiAoaSAmIDMpKTtcbiAgICBmb3IgKGkgPSAoaSAmIH4weDMpICsgODsoaSAmIDB4M0YpIDwgNjAgO2kgKz0gNClcbiAgICAgIGJ1ZmZlclsoaSA+PiAyKSAtIDFdID0gMDtcbiAgICBidWZmZXJbKGkgPj4gMikgLTFdID0gbGVuZ3RoIDw8IDM7XG4gICAgYnVmZmVyW2kgPj4gMl0gPSAobGVuZ3RoID4+IDI5KSAmIDB4MUZGRkZGRkY7XG5cbiAgICB2YXIgdyA9IFsweDY3NDUyMzAxLCAweEVGQ0RBQjg5LCAweDk4QkFEQ0ZFLCAweDEwMzI1NDc2XTtcblxuICAgIGZvcihpID0gMDsgaSA8IGJ1ZmZlci5sZW5ndGg7IGkgKz0gMTYpIHtcbiAgICAgIHZhciBhID0gd1swXSwgYiA9IHdbMV0sIGMgPSB3WzJdLCBkID0gd1szXTtcblxuICAgICAgYSA9IGZmKGEsIGIsIGMsIGQsIGJ1ZmZlcltpKyAwXSwgNywgMHhENzZBQTQ3OCk7XG4gICAgICBkID0gZmYoZCwgYSwgYiwgYywgYnVmZmVyW2krIDFdLCAxMiwgMHhFOEM3Qjc1Nik7XG4gICAgICBjID0gZmYoYywgZCwgYSwgYiwgYnVmZmVyW2krIDJdLCAxNywgMHgyNDIwNzBEQik7XG4gICAgICBiID0gZmYoYiwgYywgZCwgYSwgYnVmZmVyW2krIDNdLCAyMiwgMHhDMUJEQ0VFRSk7XG4gICAgICBhID0gZmYoYSwgYiwgYywgZCwgYnVmZmVyW2krIDRdLCA3LCAweEY1N0MwRkFGKTtcbiAgICAgIGQgPSBmZihkLCBhLCBiLCBjLCBidWZmZXJbaSsgNV0sIDEyLCAweDQ3ODdDNjJBKTtcbiAgICAgIGMgPSBmZihjLCBkLCBhLCBiLCBidWZmZXJbaSsgNl0sIDE3LCAweEE4MzA0NjEzKTtcbiAgICAgIGIgPSBmZihiLCBjLCBkLCBhLCBidWZmZXJbaSsgN10sIDIyLCAweEZENDY5NTAxKTtcbiAgICAgIGEgPSBmZihhLCBiLCBjLCBkLCBidWZmZXJbaSsgOF0sIDcsIDB4Njk4MDk4RDgpO1xuICAgICAgZCA9IGZmKGQsIGEsIGIsIGMsIGJ1ZmZlcltpKyA5XSwgMTIsIDB4OEI0NEY3QUYpO1xuICAgICAgYyA9IGZmKGMsIGQsIGEsIGIsIGJ1ZmZlcltpKzEwXSwgMTcsIDB4RkZGRjVCQjEpO1xuICAgICAgYiA9IGZmKGIsIGMsIGQsIGEsIGJ1ZmZlcltpKzExXSwgMjIsIDB4ODk1Q0Q3QkUpO1xuICAgICAgYSA9IGZmKGEsIGIsIGMsIGQsIGJ1ZmZlcltpKzEyXSwgNywgMHg2QjkwMTEyMik7XG4gICAgICBkID0gZmYoZCwgYSwgYiwgYywgYnVmZmVyW2krMTNdLCAxMiwgMHhGRDk4NzE5Myk7XG4gICAgICBjID0gZmYoYywgZCwgYSwgYiwgYnVmZmVyW2krMTRdLCAxNywgMHhBNjc5NDM4RSk7XG4gICAgICBiID0gZmYoYiwgYywgZCwgYSwgYnVmZmVyW2krMTVdLCAyMiwgMHg0OUI0MDgyMSk7XG5cbiAgICAgIGEgPSBnZyhhLCBiLCBjLCBkLCBidWZmZXJbaSsgMV0sIDUsIDB4RjYxRTI1NjIpO1xuICAgICAgZCA9IGdnKGQsIGEsIGIsIGMsIGJ1ZmZlcltpKyA2XSwgOSwgMHhDMDQwQjM0MCk7XG4gICAgICBjID0gZ2coYywgZCwgYSwgYiwgYnVmZmVyW2krMTFdLCAxNCwgMHgyNjVFNUE1MSk7XG4gICAgICBiID0gZ2coYiwgYywgZCwgYSwgYnVmZmVyW2krIDBdLCAyMCwgMHhFOUI2QzdBQSk7XG4gICAgICBhID0gZ2coYSwgYiwgYywgZCwgYnVmZmVyW2krIDVdLCA1LCAweEQ2MkYxMDVEKTtcbiAgICAgIGQgPSBnZyhkLCBhLCBiLCBjLCBidWZmZXJbaSsxMF0sIDksIDB4MDI0NDE0NTMpO1xuICAgICAgYyA9IGdnKGMsIGQsIGEsIGIsIGJ1ZmZlcltpKzE1XSwgMTQsIDB4RDhBMUU2ODEpO1xuICAgICAgYiA9IGdnKGIsIGMsIGQsIGEsIGJ1ZmZlcltpKyA0XSwgMjAsIDB4RTdEM0ZCQzgpO1xuICAgICAgYSA9IGdnKGEsIGIsIGMsIGQsIGJ1ZmZlcltpKyA5XSwgNSwgMHgyMUUxQ0RFNik7XG4gICAgICBkID0gZ2coZCwgYSwgYiwgYywgYnVmZmVyW2krMTRdLCA5LCAweEMzMzcwN0Q2KTtcbiAgICAgIGMgPSBnZyhjLCBkLCBhLCBiLCBidWZmZXJbaSsgM10sIDE0LCAweEY0RDUwRDg3KTtcbiAgICAgIGIgPSBnZyhiLCBjLCBkLCBhLCBidWZmZXJbaSsgOF0sIDIwLCAweDQ1NUExNEVEKTtcbiAgICAgIGEgPSBnZyhhLCBiLCBjLCBkLCBidWZmZXJbaSsxM10sIDUsIDB4QTlFM0U5MDUpO1xuICAgICAgZCA9IGdnKGQsIGEsIGIsIGMsIGJ1ZmZlcltpKyAyXSwgOSwgMHhGQ0VGQTNGOCk7XG4gICAgICBjID0gZ2coYywgZCwgYSwgYiwgYnVmZmVyW2krIDddLCAxNCwgMHg2NzZGMDJEOSk7XG4gICAgICBiID0gZ2coYiwgYywgZCwgYSwgYnVmZmVyW2krMTJdLCAyMCwgMHg4RDJBNEM4QSk7XG5cbiAgICAgIGEgPSBoaChhLCBiLCBjLCBkLCBidWZmZXJbaSsgNV0sIDQsIDB4RkZGQTM5NDIpO1xuICAgICAgZCA9IGhoKGQsIGEsIGIsIGMsIGJ1ZmZlcltpKyA4XSwgMTEsIDB4ODc3MUY2ODEpO1xuICAgICAgYyA9IGhoKGMsIGQsIGEsIGIsIGJ1ZmZlcltpKzExXSwgMTYsIDB4NkQ5RDYxMjIpO1xuICAgICAgYiA9IGhoKGIsIGMsIGQsIGEsIGJ1ZmZlcltpKzE0XSwgMjMsIDB4RkRFNTM4MEMpO1xuICAgICAgYSA9IGhoKGEsIGIsIGMsIGQsIGJ1ZmZlcltpKyAxXSwgNCwgMHhBNEJFRUE0NCk7XG4gICAgICBkID0gaGgoZCwgYSwgYiwgYywgYnVmZmVyW2krIDRdLCAxMSwgMHg0QkRFQ0ZBOSk7XG4gICAgICBjID0gaGgoYywgZCwgYSwgYiwgYnVmZmVyW2krIDddLCAxNiwgMHhGNkJCNEI2MCk7XG4gICAgICBiID0gaGgoYiwgYywgZCwgYSwgYnVmZmVyW2krMTBdLCAyMywgMHhCRUJGQkM3MCk7XG4gICAgICBhID0gaGgoYSwgYiwgYywgZCwgYnVmZmVyW2krMTNdLCA0LCAweDI4OUI3RUM2KTtcbiAgICAgIGQgPSBoaChkLCBhLCBiLCBjLCBidWZmZXJbaSsgMF0sIDExLCAweEVBQTEyN0ZBKTtcbiAgICAgIGMgPSBoaChjLCBkLCBhLCBiLCBidWZmZXJbaSsgM10sIDE2LCAweEQ0RUYzMDg1KTtcbiAgICAgIGIgPSBoaChiLCBjLCBkLCBhLCBidWZmZXJbaSsgNl0sIDIzLCAweDA0ODgxRDA1KTtcbiAgICAgIGEgPSBoaChhLCBiLCBjLCBkLCBidWZmZXJbaSsgOV0sIDQsIDB4RDlENEQwMzkpO1xuICAgICAgZCA9IGhoKGQsIGEsIGIsIGMsIGJ1ZmZlcltpKzEyXSwgMTEsIDB4RTZEQjk5RTUpO1xuICAgICAgYyA9IGhoKGMsIGQsIGEsIGIsIGJ1ZmZlcltpKzE1XSwgMTYsIDB4MUZBMjdDRjgpO1xuICAgICAgYiA9IGhoKGIsIGMsIGQsIGEsIGJ1ZmZlcltpKyAyXSwgMjMsIDB4QzRBQzU2NjUpO1xuXG4gICAgICBhID0gaWkoYSwgYiwgYywgZCwgYnVmZmVyW2krIDBdLCA2LCAweEY0MjkyMjQ0KTtcbiAgICAgIGQgPSBpaShkLCBhLCBiLCBjLCBidWZmZXJbaSsgN10sIDEwLCAweDQzMkFGRjk3KTtcbiAgICAgIGMgPSBpaShjLCBkLCBhLCBiLCBidWZmZXJbaSsxNF0sIDE1LCAweEFCOTQyM0E3KTtcbiAgICAgIGIgPSBpaShiLCBjLCBkLCBhLCBidWZmZXJbaSsgNV0sIDIxLCAweEZDOTNBMDM5KTtcbiAgICAgIGEgPSBpaShhLCBiLCBjLCBkLCBidWZmZXJbaSsxMl0sIDYsIDB4NjU1QjU5QzMpO1xuICAgICAgZCA9IGlpKGQsIGEsIGIsIGMsIGJ1ZmZlcltpKyAzXSwgMTAsIDB4OEYwQ0NDOTIpO1xuICAgICAgYyA9IGlpKGMsIGQsIGEsIGIsIGJ1ZmZlcltpKzEwXSwgMTUsIDB4RkZFRkY0N0QpO1xuICAgICAgYiA9IGlpKGIsIGMsIGQsIGEsIGJ1ZmZlcltpKyAxXSwgMjEsIDB4ODU4NDVERDEpO1xuICAgICAgYSA9IGlpKGEsIGIsIGMsIGQsIGJ1ZmZlcltpKyA4XSwgNiwgMHg2RkE4N0U0Rik7XG4gICAgICBkID0gaWkoZCwgYSwgYiwgYywgYnVmZmVyW2krMTVdLCAxMCwgMHhGRTJDRTZFMCk7XG4gICAgICBjID0gaWkoYywgZCwgYSwgYiwgYnVmZmVyW2krIDZdLCAxNSwgMHhBMzAxNDMxNCk7XG4gICAgICBiID0gaWkoYiwgYywgZCwgYSwgYnVmZmVyW2krMTNdLCAyMSwgMHg0RTA4MTFBMSk7XG4gICAgICBhID0gaWkoYSwgYiwgYywgZCwgYnVmZmVyW2krIDRdLCA2LCAweEY3NTM3RTgyKTtcbiAgICAgIGQgPSBpaShkLCBhLCBiLCBjLCBidWZmZXJbaSsxMV0sIDEwLCAweEJEM0FGMjM1KTtcbiAgICAgIGMgPSBpaShjLCBkLCBhLCBiLCBidWZmZXJbaSsgMl0sIDE1LCAweDJBRDdEMkJCKTtcbiAgICAgIGIgPSBpaShiLCBjLCBkLCBhLCBidWZmZXJbaSsgOV0sIDIxLCAweEVCODZEMzkxKTtcblxuICAgICAgd1swXSA9IGFkZChhLCB3WzBdKTtcbiAgICAgIHdbMV0gPSBhZGQoYiwgd1sxXSk7XG4gICAgICB3WzJdID0gYWRkKGMsIHdbMl0pO1xuICAgICAgd1szXSA9IGFkZChkLCB3WzNdKTtcbiAgICB9XG5cbiAgICB2YXIgdCA9IG5ldyBBcnJheSgxNik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCA0OyBpKyspXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDQ7IGorKylcbiAgICAgICAgdFtpICogNCArIGpdID0gKHdbaV0gPj4gKDggKiBqKSkgJiAweEZGO1xuICAgIHJldHVybiB0O1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChzLCBvZnMsIGxlbikge1xuICAgIC8vIEZJWDogbWF5YmUgd2Ugc2hvdWxkIHBlcmZvcm0gdGhlIGNvbXB1dGF0aW9uIGJ5IGNodW5rIG9mIDY0IGJ5dGVzXG4gICAgLy8gYXMgaW4gaHR0cDovL3d3dy5teWVyc2RhaWx5Lm9yZy9qb3NlcGgvamF2YXNjcmlwdC9tZDUuanNcbiAgICB2YXIgYnVmID0gW107XG4gICAgdmFyIGNvbnRlbnQgPSBjYW1sX21sX2J5dGVzX2NvbnRlbnQocyk7XG4gICAgaWYodHlwZW9mIGNvbnRlbnQgPT09IFwic3RyaW5nXCIpe1xuICAgICAgdmFyIGIgPSBjb250ZW50O1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrPTQpIHtcbiAgICAgICAgdmFyIGogPSBpICsgb2ZzO1xuICAgICAgICBidWZbaT4+Ml0gPVxuICAgICAgICAgIGIuY2hhckNvZGVBdChqKSB8IChiLmNoYXJDb2RlQXQoaisxKSA8PCA4KSB8XG4gICAgICAgICAgKGIuY2hhckNvZGVBdChqKzIpIDw8IDE2KSB8IChiLmNoYXJDb2RlQXQoaiszKSA8PCAyNCk7XG4gICAgICB9XG4gICAgICBmb3IgKDsgaSA8IGxlbjsgaSsrKSBidWZbaT4+Ml0gfD0gYi5jaGFyQ29kZUF0KGkgKyBvZnMpIDw8ICg4ICogKGkgJiAzKSk7XG4gICAgfSBlbHNlIHsgLyogQVJSQVkgKi9cbiAgICAgIHZhciBhID0gY29udGVudDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKz00KSB7XG4gICAgICAgIHZhciBqID0gaSArIG9mcztcbiAgICAgICAgYnVmW2k+PjJdID0gYVtqXSB8IChhW2orMV0gPDwgOCkgfCAoYVtqKzJdIDw8IDE2KSB8IChhW2orM10gPDwgMjQpO1xuICAgICAgfVxuICAgICAgZm9yICg7IGkgPCBsZW47IGkrKykgYnVmW2k+PjJdIHw9IGFbaSArIG9mc10gPDwgKDggKiAoaSAmIDMpKTtcbiAgICB9XG4gICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2FycmF5KG1kNShidWYsIGxlbikpO1xuICB9XG59ICgpO1xuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDIwIC0gSHVnbyBIZXV6YXJkXG4vLyBDb3B5cmlnaHQgKEMpIDIwMjAgLSBTaGFjaGFyIEl0emhha3lcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vIEJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vY2FtbC9ibG9iLzQuMDcvb3RoZXJsaWJzL3N0ci9zdHJzdHVicy5jXG4vLyBDb3BpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vanNjb3EvanNjb3EvYmxvYi92OC4xMS9jb3EtanMvanNfc3R1Yi9zdHIuanNcblxuLy9Qcm92aWRlczogcmVfbWF0Y2hcbi8vUmVxdWlyZXM6IGNhbWxfanNieXRlc19vZl9zdHJpbmcsIGNhbWxfanNfZnJvbV9hcnJheSwgY2FtbF9hcnJheV9vZl9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX2dldFxuXG52YXIgcmVfbWF0Y2ggPSBmdW5jdGlvbigpe1xuICB2YXIgcmVfd29yZF9sZXR0ZXJzID0gW1xuICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsICAgICAgIC8qIDB4MDAtMHgxRjogbm9uZSAqL1xuICAgIDB4MDAsIDB4MDAsIDB4RkYsIDB4MDMsICAgICAgIC8qIDB4MjAtMHgzRjogZGlnaXRzIDAtOSAqL1xuICAgIDB4RkUsIDB4RkYsIDB4RkYsIDB4ODcsICAgICAgIC8qIDB4NDAtMHg1RjogQSB0byBaLCBfICovXG4gICAgMHhGRSwgMHhGRiwgMHhGRiwgMHgwNywgICAgICAgLyogMHg2MC0weDdGOiBhIHRvIHogKi9cbiAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAgICAgICAvKiAweDgwLTB4OUY6IG5vbmUgKi9cbiAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAgICAgICAvKiAweEEwLTB4QkY6IG5vbmUgKi9cbiAgICAweEZGLCAweEZGLCAweDdGLCAweEZGLCAgICAgICAvKiAweEMwLTB4REY6IExhdGluLTEgYWNjZW50ZWQgdXBwZXJjYXNlICovXG4gICAgMHhGRiwgMHhGRiwgMHg3RiwgMHhGRiAgICAgICAgLyogMHhFMC0weEZGOiBMYXRpbi0xIGFjY2VudGVkIGxvd2VyY2FzZSAqL1xuICBdO1xuXG4gIHZhciBvcGNvZGVzID0ge1xuICAgIENIQVI6IDAsIENIQVJOT1JNOiAxLCBTVFJJTkc6IDIsIFNUUklOR05PUk06IDMsIENIQVJDTEFTUzogNCxcbiAgICBCT0w6IDUsIEVPTDogNiwgV09SREJPVU5EQVJZOiA3LFxuICAgIEJFR0dST1VQOiA4LCBFTkRHUk9VUDogOSwgUkVGR1JPVVA6IDEwLFxuICAgIEFDQ0VQVDogMTEsXG4gICAgU0lNUExFT1BUOiAxMiwgU0lNUExFU1RBUjogMTMsIFNJTVBMRVBMVVM6IDE0LFxuICAgIEdPVE86IDE1LCBQVVNIQkFDSzogMTYsIFNFVE1BUks6IDE3LFxuICAgIENIRUNLUFJPR1JFU1M6IDE4XG4gIH07XG5cbiAgZnVuY3Rpb24gaXNfd29yZF9sZXR0ZXIoYykge1xuICAgIHJldHVybiAocmVfd29yZF9sZXR0ZXJzWyAgKGMgPj4gMyldID4+IChjICYgNykpICYgMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluX2JpdHNldChzLGkpIHtcbiAgICByZXR1cm4gKGNhbWxfc3RyaW5nX2dldChzLChpID4+IDMpKSA+PiAoaSAmIDcpKSAmIDE7XG4gIH1cblxuICBmdW5jdGlvbiByZV9tYXRjaF9pbXBsKHJlLCBzLCBwb3MsIHBhcnRpYWwpIHtcblxuICAgIHZhciBwcm9nICAgICAgICAgID0gY2FtbF9qc19mcm9tX2FycmF5KHJlWzFdKSxcbiAgICAgICAgY3Bvb2wgICAgICAgICA9IGNhbWxfanNfZnJvbV9hcnJheShyZVsyXSksXG4gICAgICAgIG5vcm10YWJsZSAgICAgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHJlWzNdKSxcbiAgICAgICAgbnVtZ3JvdXBzICAgICA9IHJlWzRdIHwgMCxcbiAgICAgICAgbnVtcmVnaXN0ZXJzICA9IHJlWzVdIHwgMCxcbiAgICAgICAgc3RhcnRjaGFycyAgICA9IHJlWzZdIHwgMDtcblxuICAgIHZhciBzID0gY2FtbF9hcnJheV9vZl9zdHJpbmcocyk7XG5cbiAgICB2YXIgcGMgPSAwLFxuICAgICAgICBxdWl0ID0gZmFsc2UsXG4gICAgICAgIHN0YWNrID0gW10sXG4gICAgICAgIGdyb3VwcyA9IG5ldyBBcnJheShudW1ncm91cHMpLFxuICAgICAgICByZV9yZWdpc3RlciA9IG5ldyBBcnJheShudW1yZWdpc3RlcnMpO1xuXG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGdyb3Vwcy5sZW5ndGg7IGkrKyl7XG4gICAgICBncm91cHNbaV0gPSB7c3RhcnQ6IC0xLCBlbmQ6LTF9XG4gICAgfVxuICAgIGdyb3Vwc1swXS5zdGFydCA9IHBvcztcblxuICAgIHZhciBiYWNrdHJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB3aGlsZSAoc3RhY2subGVuZ3RoKSB7XG4gICAgICAgIHZhciBpdGVtID0gc3RhY2sucG9wKCk7XG4gICAgICAgIGlmIChpdGVtLnVuZG8pIHtcbiAgICAgICAgICBpdGVtLnVuZG8ub2JqW2l0ZW0udW5kby5wcm9wXSA9IGl0ZW0udW5kby52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmKGl0ZW0ucG9zKSB7XG4gICAgICAgICAgcGMgPSBpdGVtLnBvcy5wYztcbiAgICAgICAgICBwb3MgPSBpdGVtLnBvcy50eHQ7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBxdWl0ID0gdHJ1ZTtcbiAgICB9O1xuXG4gICAgdmFyIHB1c2ggPSBmdW5jdGlvbihpdGVtKSB7IHN0YWNrLnB1c2goaXRlbSk7IH07XG5cbiAgICB2YXIgYWNjZXB0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgZ3JvdXBzWzBdLmVuZCA9IHBvcztcbiAgICAgIHZhciByZXN1bHQgPSBuZXcgQXJyYXkoMSArIGdyb3Vwcy5sZW5ndGgqMik7XG4gICAgICByZXN1bHRbMF0gPSAwOyAvLyB0YWdcbiAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBncm91cHMubGVuZ3RoOyBpKyspe1xuICAgICAgICB2YXIgZyA9IGdyb3Vwc1tpXTtcbiAgICAgICAgaWYoZy5zdGFydCA8IDAgfHwgZy5lbmQgPCAwKSB7XG4gICAgICAgICAgZy5zdGFydCA9IGcuZW5kID0gLTE7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0WzIqaSArIDEgXSA9IGcuc3RhcnQ7XG4gICAgICAgIHJlc3VsdFsyKmkgKyAxICsgMSBdID0gZy5lbmQ7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH07XG5cbiAgICB2YXIgcHJlZml4X21hdGNoID0gZnVuY3Rpb24gKCkge1xuICAgICAgaWYocGFydGlhbCkgcmV0dXJuIGFjY2VwdCAoKTtcbiAgICAgIGVsc2UgYmFja3RyYWNrICgpO1xuICAgIH1cblxuICAgIC8qIE1haW4gREZBIGludGVycHJldGVyIGxvb3AgKi9cbiAgICB3aGlsZSAoIXF1aXQpIHtcbiAgICAgIHZhciBvcCA9IHByb2dbcGNdICYgMHhmZixcbiAgICAgICAgICBzYXJnID0gcHJvZ1twY10gPj4gOCxcbiAgICAgICAgICB1YXJnID0gc2FyZyAmIDB4ZmYsXG4gICAgICAgICAgYyA9IHNbcG9zXSxcbiAgICAgICAgICBncm91cDtcblxuICAgICAgcGMrKztcblxuICAgICAgc3dpdGNoIChvcCkge1xuICAgICAgY2FzZSBvcGNvZGVzLkNIQVI6XG4gICAgICAgIGlmKHBvcyA9PT0gcy5sZW5ndGgpIHtwcmVmaXhfbWF0Y2ggKCk7IGJyZWFrfTtcbiAgICAgICAgaWYgKGMgPT09IHVhcmcpIHBvcysrO1xuICAgICAgICBlbHNlIGJhY2t0cmFjaygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2Ugb3Bjb2Rlcy5DSEFSTk9STTpcbiAgICAgICAgaWYocG9zID09PSBzLmxlbmd0aCkge3ByZWZpeF9tYXRjaCAoKTsgYnJlYWt9O1xuICAgICAgICBpZiAobm9ybXRhYmxlLmNoYXJDb2RlQXQoYykgPT09IHVhcmcpIHBvcysrO1xuICAgICAgICBlbHNlIGJhY2t0cmFjaygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2Ugb3Bjb2Rlcy5TVFJJTkc6XG4gICAgICAgIGZvciAodmFyIGFyZyA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcoY3Bvb2xbdWFyZ10pLCBpID0gMDsgaSA8IGFyZy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmKHBvcyA9PT0gcy5sZW5ndGgpIHtwcmVmaXhfbWF0Y2ggKCk7IGJyZWFrfTtcbiAgICAgICAgICBpZiAoYyA9PT0gYXJnLmNoYXJDb2RlQXQoaSkpXG4gICAgICAgICAgICBjID0gc1srK3Bvc107XG4gICAgICAgICAgZWxzZSB7IGJhY2t0cmFjaygpOyBicmVhazsgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBvcGNvZGVzLlNUUklOR05PUk06XG4gICAgICAgIGZvciAodmFyIGFyZyA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcoY3Bvb2xbdWFyZ10pLCBpID0gMDsgaSA8IGFyZy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmKHBvcyA9PT0gcy5sZW5ndGgpIHtwcmVmaXhfbWF0Y2ggKCk7IGJyZWFrfTtcbiAgICAgICAgICBpZiAobm9ybXRhYmxlLmNoYXJDb2RlQXQoYykgPT09IGFyZy5jaGFyQ29kZUF0KGkpKVxuICAgICAgICAgICAgYyA9IHNbKytwb3NdO1xuICAgICAgICAgIGVsc2UgeyBiYWNrdHJhY2soKTsgYnJlYWs7IH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2Ugb3Bjb2Rlcy5DSEFSQ0xBU1M6XG4gICAgICAgIGlmKHBvcyA9PT0gcy5sZW5ndGgpIHtwcmVmaXhfbWF0Y2ggKCk7IGJyZWFrfTtcbiAgICAgICAgaWYgKGluX2JpdHNldChjcG9vbFt1YXJnXSwgYykpIHBvcysrO1xuICAgICAgICBlbHNlIGJhY2t0cmFjaygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2Ugb3Bjb2Rlcy5CT0w6XG4gICAgICAgIGlmKHBvcyA+IDAgJiYgc1twb3MgLSAxXSAhPSAxMCAvKiBcXG4gKi8pIHtiYWNrdHJhY2soKX1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIG9wY29kZXMuRU9MOlxuICAgICAgICBpZihwb3MgPCBzLmxlbmd0aCAmJiBzW3Bvc10gIT0gMTAgLyogXFxuICovKSB7YmFja3RyYWNrKCl9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBvcGNvZGVzLldPUkRCT1VOREFSWTpcbiAgICAgICAgaWYocG9zID09IDApIHtcbiAgICAgICAgICBpZihwb3MgPT09IHMubGVuZ3RoKSB7cHJlZml4X21hdGNoICgpOyBicmVha307XG4gICAgICAgICAgaWYoaXNfd29yZF9sZXR0ZXIoc1swXSkpIGJyZWFrO1xuICAgICAgICAgIGJhY2t0cmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHBvcyA9PT0gcy5sZW5ndGgpIHtcbiAgICAgICAgICBpZihpc193b3JkX2xldHRlcihzW3BvcyAtIDFdKSkgYnJlYWs7XG4gICAgICAgICAgYmFja3RyYWNrICgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGlmKGlzX3dvcmRfbGV0dGVyKHNbcG9zIC0gMV0pICE9IGlzX3dvcmRfbGV0dGVyKHNbcG9zXSkpIGJyZWFrO1xuICAgICAgICAgIGJhY2t0cmFjayAoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2Ugb3Bjb2Rlcy5CRUdHUk9VUDpcbiAgICAgICAgZ3JvdXAgPSBncm91cHNbdWFyZ107XG4gICAgICAgIHB1c2goe3VuZG86IHtvYmo6Z3JvdXAsXG4gICAgICAgICAgICAgICAgICAgICBwcm9wOidzdGFydCcsXG4gICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZ3JvdXAuc3RhcnR9fSk7XG4gICAgICAgIGdyb3VwLnN0YXJ0ID0gcG9zO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2Ugb3Bjb2Rlcy5FTkRHUk9VUDpcbiAgICAgICAgZ3JvdXAgPSBncm91cHNbdWFyZ107XG4gICAgICAgIHB1c2goe3VuZG86IHtvYmo6IGdyb3VwLFxuICAgICAgICAgICAgICAgICAgICAgcHJvcDonZW5kJyxcbiAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBncm91cC5lbmR9fSk7XG4gICAgICAgIGdyb3VwLmVuZCA9IHBvcztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIG9wY29kZXMuUkVGR1JPVVA6XG4gICAgICAgIGdyb3VwID0gZ3JvdXBzW3VhcmddO1xuICAgICAgICBpZihncm91cC5zdGFydCA8IDAgfHwgZ3JvdXAuZW5kIDwgMCkge2JhY2t0cmFjayAoKTsgYnJlYWt9XG4gICAgICAgIGZvciAodmFyIGkgPSBncm91cC5zdGFydDsgaSA8IGdyb3VwLmVuZDsgaSsrKXtcbiAgICAgICAgICBpZihwb3MgPT09IHMubGVuZ3RoKSB7cHJlZml4X21hdGNoICgpOyBicmVha307XG4gICAgICAgICAgaWYoc1tpXSAhPSBzW3Bvc10pIHtiYWNrdHJhY2sgKCk7IGJyZWFrfVxuICAgICAgICAgIHBvcysrO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBvcGNvZGVzLlNJTVBMRU9QVDpcbiAgICAgICAgaWYgKGluX2JpdHNldChjcG9vbFt1YXJnXSwgYykpIHBvcysrO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2Ugb3Bjb2Rlcy5TSU1QTEVTVEFSOlxuICAgICAgICB3aGlsZSAoaW5fYml0c2V0KGNwb29sW3VhcmddLCBjKSlcbiAgICAgICAgICBjID0gc1srK3Bvc107XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBvcGNvZGVzLlNJTVBMRVBMVVM6XG4gICAgICAgIGlmKHBvcyA9PT0gcy5sZW5ndGgpIHtwcmVmaXhfbWF0Y2ggKCk7IGJyZWFrfTtcbiAgICAgICAgaWYgKGluX2JpdHNldChjcG9vbFt1YXJnXSwgYykpIHtcbiAgICAgICAgICBkbyB7XG4gICAgICAgICAgICBjID0gc1srK3Bvc107XG4gICAgICAgICAgfSB3aGlsZSAoaW5fYml0c2V0KGNwb29sW3VhcmddLCBjKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBiYWNrdHJhY2soKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIG9wY29kZXMuQUNDRVBUOlxuICAgICAgICByZXR1cm4gYWNjZXB0KCk7XG4gICAgICBjYXNlIG9wY29kZXMuR09UTzpcbiAgICAgICAgcGMgPSBwYyArIHNhcmc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBvcGNvZGVzLlBVU0hCQUNLOlxuICAgICAgICBwdXNoKHtwb3M6IHtwYzogcGMgKyBzYXJnLCB0eHQ6IHBvc319KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIG9wY29kZXMuU0VUTUFSSzpcbiAgICAgICAgcHVzaCh7dW5kbzoge29iajpyZV9yZWdpc3RlcixcbiAgICAgICAgICAgICAgICAgICAgIHByb3A6IHVhcmcsXG4gICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcmVfcmVnaXN0ZXJbdWFyZ119fSk7XG4gICAgICAgIHJlX3JlZ2lzdGVyW3VhcmddID0gcG9zO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2Ugb3Bjb2Rlcy5DSEVDS1BST0dSRVNTOlxuICAgICAgICBpZiAocmVfcmVnaXN0ZXJbdWFyZ10gPT09IHBvcykgYmFja3RyYWNrKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDogdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBieXRlY29kZVwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICByZXR1cm4gcmVfbWF0Y2hfaW1wbDtcbn0oKTtcblxuXG4vL1Byb3ZpZGVzOiByZV9zZWFyY2hfZm9yd2FyZFxuLy9SZXF1aXJlczogcmVfbWF0Y2gsIGNhbWxfbWxfc3RyaW5nX2xlbmd0aCwgY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiByZV9zZWFyY2hfZm9yd2FyZChyZSwgcywgcG9zKSB7XG4gIGlmKHBvcyA8IDAgfHwgcG9zID4gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpKVxuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIlN0ci5zZWFyY2hfZm9yd2FyZFwiKVxuICB3aGlsZSAocG9zIDw9IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSkge1xuICAgIHZhciByZXMgPSByZV9tYXRjaChyZSwgcywgcG9zLCAwKTtcbiAgICBpZiAocmVzKSByZXR1cm4gcmVzO1xuICAgIHBvcysrO1xuICB9XG5cbiAgcmV0dXJuIFswXTsgIC8qIFt8fF0gOiBpbnQgYXJyYXkgKi9cbn1cblxuLy9Qcm92aWRlczogcmVfc2VhcmNoX2JhY2t3YXJkXG4vL1JlcXVpcmVzOiByZV9tYXRjaCwgY2FtbF9tbF9zdHJpbmdfbGVuZ3RoLCBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIHJlX3NlYXJjaF9iYWNrd2FyZChyZSwgcywgcG9zKSB7XG4gIGlmKHBvcyA8IDAgfHwgcG9zID4gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpKVxuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIlN0ci5zZWFyY2hfYmFja3dhcmRcIilcbiAgd2hpbGUgKHBvcyA+PSAwKSB7XG4gICAgdmFyIHJlcyA9IHJlX21hdGNoKHJlLCBzLCBwb3MsIDApO1xuICAgIGlmIChyZXMpIHJldHVybiByZXM7XG4gICAgcG9zLS07XG4gIH1cblxuICByZXR1cm4gWzBdOyAgLyogW3x8XSA6IGludCBhcnJheSAqL1xufVxuXG5cbi8vUHJvdmlkZXM6IHJlX3N0cmluZ19tYXRjaFxuLy9SZXF1aXJlczogcmVfbWF0Y2gsIGNhbWxfbWxfc3RyaW5nX2xlbmd0aCwgY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiByZV9zdHJpbmdfbWF0Y2gocmUscyxwb3Mpe1xuICBpZihwb3MgPCAwIHx8IHBvcyA+IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSlcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJTdHIuc3RyaW5nX21hdGNoXCIpXG4gIHZhciByZXMgPSByZV9tYXRjaChyZSwgcywgcG9zLCAwKTtcbiAgaWYgKHJlcykgcmV0dXJuIHJlcztcbiAgZWxzZSByZXR1cm4gWzBdO1xufVxuXG4vL1Byb3ZpZGVzOiByZV9wYXJ0aWFsX21hdGNoXG4vL1JlcXVpcmVzOiByZV9tYXRjaCwgY2FtbF9tbF9zdHJpbmdfbGVuZ3RoLCBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIHJlX3BhcnRpYWxfbWF0Y2gocmUscyxwb3Mpe1xuICBpZihwb3MgPCAwIHx8IHBvcyA+IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSlcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJTdHIucGFydGlhbF9tYXRjaFwiKVxuICB2YXIgcmVzID0gcmVfbWF0Y2gocmUsIHMsIHBvcywgMSk7XG4gIGlmIChyZXMpIHJldHVybiByZXM7XG4gIGVsc2UgcmV0dXJuIFswXTtcbn1cblxuLy9Qcm92aWRlczogcmVfcmVwbGFjZW1lbnRfdGV4dFxuLy9SZXF1aXJlczogY2FtbF9qc2J5dGVzX29mX3N0cmluZywgY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuLy9SZXF1aXJlczogY2FtbF9hcnJheV9nZXRcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbi8vIGV4dGVybmFsIHJlX3JlcGxhY2VtZW50X3RleHQ6IHN0cmluZyAtPiBpbnQgYXJyYXkgLT4gc3RyaW5nIC0+IHN0cmluZ1xuZnVuY3Rpb24gcmVfcmVwbGFjZW1lbnRfdGV4dChyZXBsLGdyb3VwcyxvcmlnKSB7XG4gIHZhciByZXBsID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhyZXBsKTtcbiAgdmFyIGxlbiA9IHJlcGwubGVuZ3RoO1xuICB2YXIgb3JpZyA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcob3JpZyk7XG4gIHZhciByZXMgPSBcIlwiOyAvL3Jlc3VsdFxuICB2YXIgbiA9IDA7IC8vIGN1cnJlbnQgcG9zaXRpb25cbiAgdmFyIGN1cjsgLy9jdXJyZW50IGNoYXJcbiAgdmFyIHN0YXJ0LCBlbmQsIGM7XG4gIHdoaWxlKG4gPCBsZW4pe1xuICAgIGN1ciA9IHJlcGwuY2hhckF0KG4rKyk7XG4gICAgaWYoY3VyICE9ICdcXFxcJyl7XG4gICAgICByZXMgKz0gY3VyO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGlmKG4gPT0gbGVuKSBjYW1sX2ZhaWx3aXRoKFwiU3RyLnJlcGxhY2U6IGlsbGVnYWwgYmFja3NsYXNoIHNlcXVlbmNlXCIpO1xuICAgICAgY3VyID0gcmVwbC5jaGFyQXQobisrKTtcbiAgICAgIHN3aXRjaChjdXIpe1xuICAgICAgY2FzZSAnXFxcXCc6XG4gICAgICAgIHJlcyArPSBjdXI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnMCc6IGNhc2UgJzEnOiBjYXNlICcyJzogY2FzZSAnMyc6IGNhc2UgJzQnOlxuICAgICAgY2FzZSAnNSc6IGNhc2UgJzYnOiBjYXNlICc3JzogY2FzZSAnOCc6IGNhc2UgJzknOlxuICAgICAgICBjID0gK2N1cjtcbiAgICAgICAgaWYgKGMqMiA+PSBncm91cHMubGVuZ3RoIC0gMSApXG4gICAgICAgICAgY2FtbF9mYWlsd2l0aChcIlN0ci5yZXBsYWNlOiByZWZlcmVuY2UgdG8gdW5tYXRjaGVkIGdyb3VwXCIgKTtcbiAgICAgICAgc3RhcnQgPSBjYW1sX2FycmF5X2dldChncm91cHMsYyoyKTtcbiAgICAgICAgZW5kID0gY2FtbF9hcnJheV9nZXQoZ3JvdXBzLCBjKjIgKzEpO1xuICAgICAgICBpZiAoc3RhcnQgPT0gLTEpXG4gICAgICAgICAgY2FtbF9mYWlsd2l0aChcIlN0ci5yZXBsYWNlOiByZWZlcmVuY2UgdG8gdW5tYXRjaGVkIGdyb3VwXCIpO1xuICAgICAgICByZXMrPW9yaWcuc2xpY2Uoc3RhcnQsZW5kKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXMgKz0gKCdcXFxcJyAgKyBjdXIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhyZXMpOyB9XG4iLCIvL1RoZSBmb2xsb3dpbmcgYXJlIGRlZmluZWQgaW4gQ3N0cnVjdFxuLy9UaGVyZSBhcmUganVzdCBwcm92aWRlZCBoZXJlIGZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnNcblxuLy9Qcm92aWRlczogY2FtbF9ibGl0X2JpZ3N0cmluZ190b19iaWdzdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfYmlnc3RyaW5nX2JsaXRfYmFfdG9fYmFcbi8vV2Vha2RlZlxudmFyIGNhbWxfYmxpdF9iaWdzdHJpbmdfdG9fYmlnc3RyaW5nID0gY2FtbF9iaWdzdHJpbmdfYmxpdF9iYV90b19iYVxuLy9Qcm92aWRlczogY2FtbF9ibGl0X2JpZ3N0cmluZ190b19zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfYmlnc3RyaW5nX2JsaXRfYmFfdG9fYnl0ZXNcbi8vV2Vha2RlZlxudmFyIGNhbWxfYmxpdF9iaWdzdHJpbmdfdG9fc3RyaW5nID0gY2FtbF9iaWdzdHJpbmdfYmxpdF9iYV90b19ieXRlc1xuLy9Qcm92aWRlczogY2FtbF9ibGl0X3N0cmluZ190b19iaWdzdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfYmlnc3RyaW5nX2JsaXRfc3RyaW5nX3RvX2JhXG4vL1dlYWtkZWZcbnZhciBjYW1sX2JsaXRfc3RyaW5nX3RvX2JpZ3N0cmluZyA9IGNhbWxfYmlnc3RyaW5nX2JsaXRfc3RyaW5nX3RvX2JhXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgIERhbmllbCBDLiBCdWVuemxpICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE0IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbmV4dGVybmFsIGZvcm1hdF9pbnQgOiBzdHJpbmcgLT4gaW50IC0+IHN0cmluZyA9IFwiY2FtbF9mb3JtYXRfaW50XCJcblxubGV0IGVycl9ub19wcmVkID0gXCJVKzAwMDAgaGFzIG5vIHByZWRlY2Vzc29yXCJcbmxldCBlcnJfbm9fc3VjYyA9IFwiVSsxMEZGRkYgaGFzIG5vIHN1Y2Nlc3NvclwiXG5sZXQgZXJyX25vdF9zdiBpID0gZm9ybWF0X2ludCBcIiVYXCIgaSBeIFwiIGlzIG5vdCBhbiBVbmljb2RlIHNjYWxhciB2YWx1ZVwiXG5sZXQgZXJyX25vdF9sYXRpbjEgdSA9IFwiVStcIiBeIGZvcm1hdF9pbnQgXCIlMDRYXCIgdSBeIFwiIGlzIG5vdCBhIGxhdGluMSBjaGFyYWN0ZXJcIlxuXG50eXBlIHQgPSBpbnRcblxubGV0IG1pbiA9IDB4MDAwMFxubGV0IG1heCA9IDB4MTBGRkZGXG5sZXQgbG9fYm91bmQgPSAweEQ3RkZcbmxldCBoaV9ib3VuZCA9IDB4RTAwMFxuXG5sZXQgYm9tID0gMHhGRUZGXG5sZXQgcmVwID0gMHhGRkZEXG5cbmxldCBzdWNjIHUgPVxuICBpZiB1ID0gbG9fYm91bmQgdGhlbiBoaV9ib3VuZCBlbHNlXG4gIGlmIHUgPSBtYXggdGhlbiBpbnZhbGlkX2FyZyBlcnJfbm9fc3VjYyBlbHNlXG4gIHUgKyAxXG5cbmxldCBwcmVkIHUgPVxuICBpZiB1ID0gaGlfYm91bmQgdGhlbiBsb19ib3VuZCBlbHNlXG4gIGlmIHUgPSBtaW4gdGhlbiBpbnZhbGlkX2FyZyBlcnJfbm9fcHJlZCBlbHNlXG4gIHUgLSAxXG5cbmxldCBpc192YWxpZCBpID0gKG1pbiA8PSBpICYmIGkgPD0gbG9fYm91bmQpIHx8IChoaV9ib3VuZCA8PSBpICYmIGkgPD0gbWF4KVxubGV0IG9mX2ludCBpID0gaWYgaXNfdmFsaWQgaSB0aGVuIGkgZWxzZSBpbnZhbGlkX2FyZyAoZXJyX25vdF9zdiBpKVxuZXh0ZXJuYWwgdW5zYWZlX29mX2ludCA6IGludCAtPiB0ID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgdG9faW50IDogdCAtPiBpbnQgPSBcIiVpZGVudGl0eVwiXG5cbmxldCBpc19jaGFyIHUgPSB1IDwgMjU2XG5sZXQgb2ZfY2hhciBjID0gQ2hhci5jb2RlIGNcbmxldCB0b19jaGFyIHUgPVxuICBpZiB1ID4gMjU1IHRoZW4gaW52YWxpZF9hcmcgKGVycl9ub3RfbGF0aW4xIHUpIGVsc2VcbiAgQ2hhci51bnNhZmVfY2hyIHVcblxubGV0IHVuc2FmZV90b19jaGFyID0gQ2hhci51bnNhZmVfY2hyXG5cbmxldCBlcXVhbCA6IGludCAtPiBpbnQgLT4gYm9vbCA9ICggPSApXG5sZXQgY29tcGFyZSA6IGludCAtPiBpbnQgLT4gaW50ID0gU3RkbGliLmNvbXBhcmVcbmxldCBoYXNoID0gdG9faW50XG5cbigqIFVURiBjb2RlY3MgdG9vbHMgKilcblxudHlwZSB1dGZfZGVjb2RlID0gaW50XG4oKiBUaGlzIGlzIGFuIGludCBbMHhEVVVVVVVVXSBkZWNvbXBvc2VkIGFzIGZvbGxvd3M6XG4gICAtIFtEXSBpcyBmb3VyIGJpdHMgZm9yIGRlY29kZSBpbmZvcm1hdGlvbiwgdGhlIGhpZ2hlc3QgYml0IGlzIHNldCBpZiB0aGVcbiAgICAgZGVjb2RlIGlzIHZhbGlkLiBUaGUgdGhyZWUgbG93ZXIgYml0cyBpbmRpY2F0ZSB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzXG4gICAgIGZyb20gdGhlIHNvdXJjZSB0aGF0IHdlcmUgY29uc3VtZWQgYnkgdGhlIGRlY29kZS5cbiAgIC0gW1VVVVVVVV0gaXMgdGhlIGRlY29kZWQgVW5pY29kZSBjaGFyYWN0ZXIgb3IgdGhlIFVuaWNvZGUgcmVwbGFjZW1lbnRcbiAgICAgY2hhcmFjdGVyIFUrRkZGRCBpZiBmb3IgaW52YWxpZCBkZWNvZGVzLiAqKVxuXG5sZXQgdmFsaWRfYml0ID0gMjdcbmxldCBkZWNvZGVfYml0cyA9IDI0XG5cbmxldFtAaW5saW5lXSB1dGZfZGVjb2RlX2lzX3ZhbGlkIGQgPSAoZCBsc3IgdmFsaWRfYml0KSA9IDFcbmxldFtAaW5saW5lXSB1dGZfZGVjb2RlX2xlbmd0aCBkID0gKGQgbHNyIGRlY29kZV9iaXRzKSBsYW5kIDBiMTExXG5sZXRbQGlubGluZV0gdXRmX2RlY29kZV91Y2hhciBkID0gdW5zYWZlX29mX2ludCAoZCBsYW5kIDB4RkZGRkZGKVxubGV0W0BpbmxpbmVdIHV0Zl9kZWNvZGUgbiB1ID0gKCg4IGxvciBuKSBsc2wgZGVjb2RlX2JpdHMpIGxvciAodG9faW50IHUpXG5sZXRbQGlubGluZV0gdXRmX2RlY29kZV9pbnZhbGlkIG4gPSAobiBsc2wgZGVjb2RlX2JpdHMpIGxvciByZXBcblxubGV0IHV0Zl84X2J5dGVfbGVuZ3RoIHUgPSBtYXRjaCB0b19pbnQgdSB3aXRoXG58IHUgd2hlbiB1IDwgMCAtPiBhc3NlcnQgZmFsc2VcbnwgdSB3aGVuIHUgPD0gMHgwMDdGIC0+IDFcbnwgdSB3aGVuIHUgPD0gMHgwN0ZGIC0+IDJcbnwgdSB3aGVuIHUgPD0gMHhGRkZGIC0+IDNcbnwgdSB3aGVuIHUgPD0gMHgxMEZGRkYgLT4gNFxufCBfIC0+IGFzc2VydCBmYWxzZVxuXG5sZXQgdXRmXzE2X2J5dGVfbGVuZ3RoIHUgPSBtYXRjaCB0b19pbnQgdSB3aXRoXG58IHUgd2hlbiB1IDwgMCAtPiBhc3NlcnQgZmFsc2VcbnwgdSB3aGVuIHUgPD0gMHhGRkZGIC0+IDJcbnwgdSB3aGVuIHUgPD0gMHgxMEZGRkYgLT4gNFxufCBfIC0+IGFzc2VydCBmYWxzZVxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBNb2R1bGUgW0ludDY0XTogNjQtYml0IGludGVnZXJzICopXG5cbmV4dGVybmFsIG5lZyA6IGludDY0IC0+IGludDY0ID0gXCIlaW50NjRfbmVnXCJcbmV4dGVybmFsIGFkZCA6IGludDY0IC0+IGludDY0IC0+IGludDY0ID0gXCIlaW50NjRfYWRkXCJcbmV4dGVybmFsIHN1YiA6IGludDY0IC0+IGludDY0IC0+IGludDY0ID0gXCIlaW50NjRfc3ViXCJcbmV4dGVybmFsIG11bCA6IGludDY0IC0+IGludDY0IC0+IGludDY0ID0gXCIlaW50NjRfbXVsXCJcbmV4dGVybmFsIGRpdiA6IGludDY0IC0+IGludDY0IC0+IGludDY0ID0gXCIlaW50NjRfZGl2XCJcbmV4dGVybmFsIHJlbSA6IGludDY0IC0+IGludDY0IC0+IGludDY0ID0gXCIlaW50NjRfbW9kXCJcbmV4dGVybmFsIGxvZ2FuZCA6IGludDY0IC0+IGludDY0IC0+IGludDY0ID0gXCIlaW50NjRfYW5kXCJcbmV4dGVybmFsIGxvZ29yIDogaW50NjQgLT4gaW50NjQgLT4gaW50NjQgPSBcIiVpbnQ2NF9vclwiXG5leHRlcm5hbCBsb2d4b3IgOiBpbnQ2NCAtPiBpbnQ2NCAtPiBpbnQ2NCA9IFwiJWludDY0X3hvclwiXG5leHRlcm5hbCBzaGlmdF9sZWZ0IDogaW50NjQgLT4gaW50IC0+IGludDY0ID0gXCIlaW50NjRfbHNsXCJcbmV4dGVybmFsIHNoaWZ0X3JpZ2h0IDogaW50NjQgLT4gaW50IC0+IGludDY0ID0gXCIlaW50NjRfYXNyXCJcbmV4dGVybmFsIHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgOiBpbnQ2NCAtPiBpbnQgLT4gaW50NjQgPSBcIiVpbnQ2NF9sc3JcIlxuZXh0ZXJuYWwgb2ZfaW50IDogaW50IC0+IGludDY0ID0gXCIlaW50NjRfb2ZfaW50XCJcbmV4dGVybmFsIHRvX2ludCA6IGludDY0IC0+IGludCA9IFwiJWludDY0X3RvX2ludFwiXG5leHRlcm5hbCBvZl9mbG9hdCA6IGZsb2F0IC0+IGludDY0XG4gID0gXCJjYW1sX2ludDY0X29mX2Zsb2F0XCIgXCJjYW1sX2ludDY0X29mX2Zsb2F0X3VuYm94ZWRcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgdG9fZmxvYXQgOiBpbnQ2NCAtPiBmbG9hdFxuICA9IFwiY2FtbF9pbnQ2NF90b19mbG9hdFwiIFwiY2FtbF9pbnQ2NF90b19mbG9hdF91bmJveGVkXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIG9mX2ludDMyIDogaW50MzIgLT4gaW50NjQgPSBcIiVpbnQ2NF9vZl9pbnQzMlwiXG5leHRlcm5hbCB0b19pbnQzMiA6IGludDY0IC0+IGludDMyID0gXCIlaW50NjRfdG9faW50MzJcIlxuZXh0ZXJuYWwgb2ZfbmF0aXZlaW50IDogbmF0aXZlaW50IC0+IGludDY0ID0gXCIlaW50NjRfb2ZfbmF0aXZlaW50XCJcbmV4dGVybmFsIHRvX25hdGl2ZWludCA6IGludDY0IC0+IG5hdGl2ZWludCA9IFwiJWludDY0X3RvX25hdGl2ZWludFwiXG5cbmxldCB6ZXJvID0gMExcbmxldCBvbmUgPSAxTFxubGV0IG1pbnVzX29uZSA9IC0xTFxubGV0IHN1Y2MgbiA9IGFkZCBuIDFMXG5sZXQgcHJlZCBuID0gc3ViIG4gMUxcbmxldCBhYnMgbiA9IGlmIG4gPj0gMEwgdGhlbiBuIGVsc2UgbmVnIG5cbmxldCBtaW5faW50ID0gMHg4MDAwMDAwMDAwMDAwMDAwTFxubGV0IG1heF9pbnQgPSAweDdGRkZGRkZGRkZGRkZGRkZMXG5sZXQgbG9nbm90IG4gPSBsb2d4b3IgbiAoLTFMKVxuXG5sZXQgdW5zaWduZWRfdG9faW50ID1cbiAgbGV0IG1heF9pbnQgPSBvZl9pbnQgU3RkbGliLm1heF9pbnQgaW5cbiAgZnVuIG4gLT5cbiAgICBpZiBjb21wYXJlIHplcm8gbiA8PSAwICYmIGNvbXBhcmUgbiBtYXhfaW50IDw9IDAgdGhlblxuICAgICAgU29tZSAodG9faW50IG4pXG4gICAgZWxzZVxuICAgICAgTm9uZVxuXG5leHRlcm5hbCBmb3JtYXQgOiBzdHJpbmcgLT4gaW50NjQgLT4gc3RyaW5nID0gXCJjYW1sX2ludDY0X2Zvcm1hdFwiXG5sZXQgdG9fc3RyaW5nIG4gPSBmb3JtYXQgXCIlZFwiIG5cblxuZXh0ZXJuYWwgb2Zfc3RyaW5nIDogc3RyaW5nIC0+IGludDY0ID0gXCJjYW1sX2ludDY0X29mX3N0cmluZ1wiXG5cbmxldCBvZl9zdHJpbmdfb3B0IHMgPVxuICAoKiBUT0RPOiBleHBvc2UgYSBub24tcmFpc2luZyBwcmltaXRpdmUgZGlyZWN0bHkuICopXG4gIHRyeSBTb21lIChvZl9zdHJpbmcgcylcbiAgd2l0aCBGYWlsdXJlIF8gLT4gTm9uZVxuXG5cblxuZXh0ZXJuYWwgYml0c19vZl9mbG9hdCA6IGZsb2F0IC0+IGludDY0XG4gID0gXCJjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXRcIiBcImNhbWxfaW50NjRfYml0c19vZl9mbG9hdF91bmJveGVkXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGZsb2F0X29mX2JpdHMgOiBpbnQ2NCAtPiBmbG9hdFxuICA9IFwiY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzXCIgXCJjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHNfdW5ib3hlZFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5cbnR5cGUgdCA9IGludDY0XG5cbmxldCBjb21wYXJlICh4OiB0KSAoeTogdCkgPSBTdGRsaWIuY29tcGFyZSB4IHlcbmxldCBlcXVhbCAoeDogdCkgKHk6IHQpID0gY29tcGFyZSB4IHkgPSAwXG5cbmxldCB1bnNpZ25lZF9jb21wYXJlIG4gbSA9XG4gIGNvbXBhcmUgKHN1YiBuIG1pbl9pbnQpIChzdWIgbSBtaW5faW50KVxuXG5sZXQgbWluIHggeSA6IHQgPSBpZiB4IDw9IHkgdGhlbiB4IGVsc2UgeVxubGV0IG1heCB4IHkgOiB0ID0gaWYgeCA+PSB5IHRoZW4geCBlbHNlIHlcblxuKCogVW5zaWduZWQgZGl2aXNpb24gZnJvbSBzaWduZWQgZGl2aXNpb24gb2YgdGhlIHNhbWVcbiAgIGJpdG5lc3MuIFNlZSBXYXJyZW4gSnIuLCBIZW5yeSBTLiAoMjAxMykuIEhhY2tlcidzIERlbGlnaHQgKDIgZWQuKSwgU2VjIDktMy5cbiopXG5sZXQgdW5zaWduZWRfZGl2IG4gZCA9XG4gIGlmIGQgPCB6ZXJvIHRoZW5cbiAgICBpZiB1bnNpZ25lZF9jb21wYXJlIG4gZCA8IDAgdGhlbiB6ZXJvIGVsc2Ugb25lXG4gIGVsc2VcbiAgICBsZXQgcSA9IHNoaWZ0X2xlZnQgKGRpdiAoc2hpZnRfcmlnaHRfbG9naWNhbCBuIDEpIGQpIDEgaW5cbiAgICBsZXQgciA9IHN1YiBuIChtdWwgcSBkKSBpblxuICAgIGlmIHVuc2lnbmVkX2NvbXBhcmUgciBkID49IDAgdGhlbiBzdWNjIHEgZWxzZSBxXG5cbmxldCB1bnNpZ25lZF9yZW0gbiBkID1cbiAgc3ViIG4gKG11bCAodW5zaWduZWRfZGl2IG4gZCkgZClcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogVGhlIHJ1bi10aW1lIGxpYnJhcnkgZm9yIGxleGVycyBnZW5lcmF0ZWQgYnkgY2FtbGxleCAqKVxuXG50eXBlIHBvc2l0aW9uID0ge1xuICBwb3NfZm5hbWUgOiBzdHJpbmc7XG4gIHBvc19sbnVtIDogaW50O1xuICBwb3NfYm9sIDogaW50O1xuICBwb3NfY251bSA6IGludDtcbn1cblxubGV0IGR1bW15X3BvcyA9IHtcbiAgcG9zX2ZuYW1lID0gXCJcIjtcbiAgcG9zX2xudW0gPSAwO1xuICBwb3NfYm9sID0gMDtcbiAgcG9zX2NudW0gPSAtMTtcbn1cblxudHlwZSBsZXhidWYgPVxuICB7IHJlZmlsbF9idWZmIDogbGV4YnVmIC0+IHVuaXQ7XG4gICAgbXV0YWJsZSBsZXhfYnVmZmVyIDogYnl0ZXM7XG4gICAgbXV0YWJsZSBsZXhfYnVmZmVyX2xlbiA6IGludDtcbiAgICBtdXRhYmxlIGxleF9hYnNfcG9zIDogaW50O1xuICAgIG11dGFibGUgbGV4X3N0YXJ0X3BvcyA6IGludDtcbiAgICBtdXRhYmxlIGxleF9jdXJyX3BvcyA6IGludDtcbiAgICBtdXRhYmxlIGxleF9sYXN0X3BvcyA6IGludDtcbiAgICBtdXRhYmxlIGxleF9sYXN0X2FjdGlvbiA6IGludDtcbiAgICBtdXRhYmxlIGxleF9lb2ZfcmVhY2hlZCA6IGJvb2w7XG4gICAgbXV0YWJsZSBsZXhfbWVtIDogaW50IGFycmF5O1xuICAgIG11dGFibGUgbGV4X3N0YXJ0X3AgOiBwb3NpdGlvbjtcbiAgICBtdXRhYmxlIGxleF9jdXJyX3AgOiBwb3NpdGlvbjtcbiAgfVxuXG50eXBlIGxleF90YWJsZXMgPVxuICB7IGxleF9iYXNlOiBzdHJpbmc7XG4gICAgbGV4X2JhY2t0cms6IHN0cmluZztcbiAgICBsZXhfZGVmYXVsdDogc3RyaW5nO1xuICAgIGxleF90cmFuczogc3RyaW5nO1xuICAgIGxleF9jaGVjazogc3RyaW5nO1xuICAgIGxleF9iYXNlX2NvZGUgOiBzdHJpbmc7XG4gICAgbGV4X2JhY2t0cmtfY29kZSA6IHN0cmluZztcbiAgICBsZXhfZGVmYXVsdF9jb2RlIDogc3RyaW5nO1xuICAgIGxleF90cmFuc19jb2RlIDogc3RyaW5nO1xuICAgIGxleF9jaGVja19jb2RlIDogc3RyaW5nO1xuICAgIGxleF9jb2RlOiBzdHJpbmc7fVxuXG5leHRlcm5hbCBjX2VuZ2luZSA6IGxleF90YWJsZXMgLT4gaW50IC0+IGxleGJ1ZiAtPiBpbnQgPSBcImNhbWxfbGV4X2VuZ2luZVwiXG5leHRlcm5hbCBjX25ld19lbmdpbmUgOiBsZXhfdGFibGVzIC0+IGludCAtPiBsZXhidWYgLT4gaW50XG4gICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfbmV3X2xleF9lbmdpbmVcIlxuXG5sZXQgZW5naW5lIHRibCBzdGF0ZSBidWYgPVxuICBsZXQgcmVzdWx0ID0gY19lbmdpbmUgdGJsIHN0YXRlIGJ1ZiBpblxuICBpZiByZXN1bHQgPj0gMCAmJiBidWYubGV4X2N1cnJfcCAhPSBkdW1teV9wb3MgdGhlbiBiZWdpblxuICAgIGJ1Zi5sZXhfc3RhcnRfcCA8LSBidWYubGV4X2N1cnJfcDtcbiAgICBidWYubGV4X2N1cnJfcCA8LSB7YnVmLmxleF9jdXJyX3BcbiAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBwb3NfY251bSA9IGJ1Zi5sZXhfYWJzX3BvcyArIGJ1Zi5sZXhfY3Vycl9wb3N9O1xuICBlbmQ7XG4gIHJlc3VsdFxuXG5cbmxldCBuZXdfZW5naW5lIHRibCBzdGF0ZSBidWYgPVxuICBsZXQgcmVzdWx0ID0gY19uZXdfZW5naW5lIHRibCBzdGF0ZSBidWYgaW5cbiAgaWYgcmVzdWx0ID49IDAgJiYgYnVmLmxleF9jdXJyX3AgIT0gZHVtbXlfcG9zIHRoZW4gYmVnaW5cbiAgICBidWYubGV4X3N0YXJ0X3AgPC0gYnVmLmxleF9jdXJyX3A7XG4gICAgYnVmLmxleF9jdXJyX3AgPC0ge2J1Zi5sZXhfY3Vycl9wXG4gICAgICAgICAgICAgICAgICAgICAgIHdpdGggcG9zX2NudW0gPSBidWYubGV4X2Fic19wb3MgKyBidWYubGV4X2N1cnJfcG9zfTtcbiAgZW5kO1xuICByZXN1bHRcblxubGV0IGxleF9yZWZpbGwgcmVhZF9mdW4gYXV4X2J1ZmZlciBsZXhidWYgPVxuICBsZXQgcmVhZCA9XG4gICAgcmVhZF9mdW4gYXV4X2J1ZmZlciAoQnl0ZXMubGVuZ3RoIGF1eF9idWZmZXIpIGluXG4gIGxldCBuID1cbiAgICBpZiByZWFkID4gMFxuICAgIHRoZW4gcmVhZFxuICAgIGVsc2UgKGxleGJ1Zi5sZXhfZW9mX3JlYWNoZWQgPC0gdHJ1ZTsgMCkgaW5cbiAgKCogQ3VycmVudCBzdGF0ZSBvZiB0aGUgYnVmZmVyOlxuICAgICAgICA8LS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0+XG4gICAgICAgIHwgIGp1bmsgfCAgICAgIHZhbGlkIGRhdGEgICAgIHwgICBqdW5rICAgIHxcbiAgICAgICAgXiAgICAgICBeICAgICAgICAgICAgICAgICAgICAgXiAgICAgICAgICAgXlxuICAgICAgICAwICAgIHN0YXJ0X3BvcyAgICAgICAgICAgICBidWZmZXJfZW5kICAgIEJ5dGVzLmxlbmd0aCBidWZmZXJcbiAgKilcbiAgaWYgbGV4YnVmLmxleF9idWZmZXJfbGVuICsgbiA+IEJ5dGVzLmxlbmd0aCBsZXhidWYubGV4X2J1ZmZlciB0aGVuIGJlZ2luXG4gICAgKCogVGhlcmUgaXMgbm90IGVub3VnaCBzcGFjZSBhdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIgKilcbiAgICBpZiBsZXhidWYubGV4X2J1ZmZlcl9sZW4gLSBsZXhidWYubGV4X3N0YXJ0X3BvcyArIG5cbiAgICAgICA8PSBCeXRlcy5sZW5ndGggbGV4YnVmLmxleF9idWZmZXJcbiAgICB0aGVuIGJlZ2luXG4gICAgICAoKiBCdXQgdGhlcmUgaXMgZW5vdWdoIHNwYWNlIGlmIHdlIHJlY2xhaW0gdGhlIGp1bmsgYXQgdGhlIGJlZ2lubmluZ1xuICAgICAgICAgb2YgdGhlIGJ1ZmZlciAqKVxuICAgICAgQnl0ZXMuYmxpdCBsZXhidWYubGV4X2J1ZmZlciBsZXhidWYubGV4X3N0YXJ0X3Bvc1xuICAgICAgICAgICAgICAgICAgbGV4YnVmLmxleF9idWZmZXIgMFxuICAgICAgICAgICAgICAgICAgKGxleGJ1Zi5sZXhfYnVmZmVyX2xlbiAtIGxleGJ1Zi5sZXhfc3RhcnRfcG9zKVxuICAgIGVuZCBlbHNlIGJlZ2luXG4gICAgICAoKiBXZSBtdXN0IGdyb3cgdGhlIGJ1ZmZlci4gIERvdWJsaW5nIGl0cyBzaXplIHdpbGwgcHJvdmlkZSBlbm91Z2hcbiAgICAgICAgIHNwYWNlIHNpbmNlIG4gPD0gU3RyaW5nLmxlbmd0aCBhdXhfYnVmZmVyIDw9IFN0cmluZy5sZW5ndGggYnVmZmVyLlxuICAgICAgICAgV2F0Y2ggb3V0IGZvciBzdHJpbmcgbGVuZ3RoIG92ZXJmbG93LCB0aG91Z2guICopXG4gICAgICBsZXQgbmV3bGVuID1cbiAgICAgICAgSW50Lm1pbiAoMiAqIEJ5dGVzLmxlbmd0aCBsZXhidWYubGV4X2J1ZmZlcikgU3lzLm1heF9zdHJpbmdfbGVuZ3RoIGluXG4gICAgICBpZiBsZXhidWYubGV4X2J1ZmZlcl9sZW4gLSBsZXhidWYubGV4X3N0YXJ0X3BvcyArIG4gPiBuZXdsZW5cbiAgICAgIHRoZW4gZmFpbHdpdGggXCJMZXhpbmcubGV4X3JlZmlsbDogY2Fubm90IGdyb3cgYnVmZmVyXCI7XG4gICAgICBsZXQgbmV3YnVmID0gQnl0ZXMuY3JlYXRlIG5ld2xlbiBpblxuICAgICAgKCogQ29weSB0aGUgdmFsaWQgZGF0YSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXcgYnVmZmVyICopXG4gICAgICBCeXRlcy5ibGl0IGxleGJ1Zi5sZXhfYnVmZmVyIGxleGJ1Zi5sZXhfc3RhcnRfcG9zXG4gICAgICAgICAgICAgICAgICBuZXdidWYgMFxuICAgICAgICAgICAgICAgICAgKGxleGJ1Zi5sZXhfYnVmZmVyX2xlbiAtIGxleGJ1Zi5sZXhfc3RhcnRfcG9zKTtcbiAgICAgIGxleGJ1Zi5sZXhfYnVmZmVyIDwtIG5ld2J1ZlxuICAgIGVuZDtcbiAgICAoKiBSZWFsbG9jYXRpb24gb3Igbm90LCB3ZSBoYXZlIHNoaWZ0ZWQgdGhlIGRhdGEgbGVmdCBieVxuICAgICAgIHN0YXJ0X3BvcyBjaGFyYWN0ZXJzOyB1cGRhdGUgdGhlIHBvc2l0aW9ucyAqKVxuICAgIGxldCBzID0gbGV4YnVmLmxleF9zdGFydF9wb3MgaW5cbiAgICBsZXhidWYubGV4X2Fic19wb3MgPC0gbGV4YnVmLmxleF9hYnNfcG9zICsgcztcbiAgICBsZXhidWYubGV4X2N1cnJfcG9zIDwtIGxleGJ1Zi5sZXhfY3Vycl9wb3MgLSBzO1xuICAgIGxleGJ1Zi5sZXhfc3RhcnRfcG9zIDwtIDA7XG4gICAgbGV4YnVmLmxleF9sYXN0X3BvcyA8LSBsZXhidWYubGV4X2xhc3RfcG9zIC0gcztcbiAgICBsZXhidWYubGV4X2J1ZmZlcl9sZW4gPC0gbGV4YnVmLmxleF9idWZmZXJfbGVuIC0gcyA7XG4gICAgbGV0IHQgPSBsZXhidWYubGV4X21lbSBpblxuICAgIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggdC0xIGRvXG4gICAgICBsZXQgdiA9IHQuKGkpIGluXG4gICAgICBpZiB2ID49IDAgdGhlblxuICAgICAgICB0LihpKSA8LSB2LXNcbiAgICBkb25lXG4gIGVuZDtcbiAgKCogVGhlcmUgaXMgbm93IGVub3VnaCBzcGFjZSBhdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIgKilcbiAgQnl0ZXMuYmxpdCBhdXhfYnVmZmVyIDAgbGV4YnVmLmxleF9idWZmZXIgbGV4YnVmLmxleF9idWZmZXJfbGVuIG47XG4gIGxleGJ1Zi5sZXhfYnVmZmVyX2xlbiA8LSBsZXhidWYubGV4X2J1ZmZlcl9sZW4gKyBuXG5cbmxldCB6ZXJvX3BvcyA9IHtcbiAgcG9zX2ZuYW1lID0gXCJcIjtcbiAgcG9zX2xudW0gPSAxO1xuICBwb3NfYm9sID0gMDtcbiAgcG9zX2NudW0gPSAwO1xufVxuXG5sZXQgZnJvbV9mdW5jdGlvbiA/KHdpdGhfcG9zaXRpb25zID0gdHJ1ZSkgZiA9XG4gIHsgcmVmaWxsX2J1ZmYgPSBsZXhfcmVmaWxsIGYgKEJ5dGVzLmNyZWF0ZSA1MTIpO1xuICAgIGxleF9idWZmZXIgPSBCeXRlcy5jcmVhdGUgMTAyNDtcbiAgICBsZXhfYnVmZmVyX2xlbiA9IDA7XG4gICAgbGV4X2Fic19wb3MgPSAwO1xuICAgIGxleF9zdGFydF9wb3MgPSAwO1xuICAgIGxleF9jdXJyX3BvcyA9IDA7XG4gICAgbGV4X2xhc3RfcG9zID0gMDtcbiAgICBsZXhfbGFzdF9hY3Rpb24gPSAwO1xuICAgIGxleF9tZW0gPSBbfHxdO1xuICAgIGxleF9lb2ZfcmVhY2hlZCA9IGZhbHNlO1xuICAgIGxleF9zdGFydF9wID0gaWYgd2l0aF9wb3NpdGlvbnMgdGhlbiB6ZXJvX3BvcyBlbHNlIGR1bW15X3BvcztcbiAgICBsZXhfY3Vycl9wID0gaWYgd2l0aF9wb3NpdGlvbnMgdGhlbiB6ZXJvX3BvcyBlbHNlIGR1bW15X3BvcztcbiAgfVxuXG5sZXQgZnJvbV9jaGFubmVsID93aXRoX3Bvc2l0aW9ucyBpYyA9XG4gIGZyb21fZnVuY3Rpb24gP3dpdGhfcG9zaXRpb25zIChmdW4gYnVmIG4gLT4gaW5wdXQgaWMgYnVmIDAgbilcblxubGV0IGZyb21fc3RyaW5nID8od2l0aF9wb3NpdGlvbnMgPSB0cnVlKSBzID1cbiAgeyByZWZpbGxfYnVmZiA9IChmdW4gbGV4YnVmIC0+IGxleGJ1Zi5sZXhfZW9mX3JlYWNoZWQgPC0gdHJ1ZSk7XG4gICAgbGV4X2J1ZmZlciA9IEJ5dGVzLm9mX3N0cmluZyBzOyAoKiBoYXZlIHRvIG1ha2UgYSBjb3B5IGZvciBjb21wYXRpYmlsaXR5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHVuc2FmZS1zdHJpbmcgbW9kZSAqKVxuICAgIGxleF9idWZmZXJfbGVuID0gU3RyaW5nLmxlbmd0aCBzO1xuICAgIGxleF9hYnNfcG9zID0gMDtcbiAgICBsZXhfc3RhcnRfcG9zID0gMDtcbiAgICBsZXhfY3Vycl9wb3MgPSAwO1xuICAgIGxleF9sYXN0X3BvcyA9IDA7XG4gICAgbGV4X2xhc3RfYWN0aW9uID0gMDtcbiAgICBsZXhfbWVtID0gW3x8XTtcbiAgICBsZXhfZW9mX3JlYWNoZWQgPSB0cnVlO1xuICAgIGxleF9zdGFydF9wID0gaWYgd2l0aF9wb3NpdGlvbnMgdGhlbiB6ZXJvX3BvcyBlbHNlIGR1bW15X3BvcztcbiAgICBsZXhfY3Vycl9wID0gaWYgd2l0aF9wb3NpdGlvbnMgdGhlbiB6ZXJvX3BvcyBlbHNlIGR1bW15X3BvcztcbiAgfVxuXG5sZXQgc2V0X3Bvc2l0aW9uIGxleGJ1ZiBwb3NpdGlvbiA9XG4gIGxleGJ1Zi5sZXhfY3Vycl9wICA8LSB7cG9zaXRpb24gd2l0aCBwb3NfZm5hbWUgPSBsZXhidWYubGV4X2N1cnJfcC5wb3NfZm5hbWV9O1xuICBsZXhidWYubGV4X2Fic19wb3MgPC0gcG9zaXRpb24ucG9zX2NudW1cblxubGV0IHNldF9maWxlbmFtZSBsZXhidWYgZm5hbWUgPVxuICBsZXhidWYubGV4X2N1cnJfcCA8LSB7bGV4YnVmLmxleF9jdXJyX3Agd2l0aCBwb3NfZm5hbWUgPSBmbmFtZX1cblxubGV0IHdpdGhfcG9zaXRpb25zIGxleGJ1ZiA9IGxleGJ1Zi5sZXhfY3Vycl9wICE9IGR1bW15X3Bvc1xuXG5sZXQgbGV4ZW1lIGxleGJ1ZiA9XG4gIGxldCBsZW4gPSBsZXhidWYubGV4X2N1cnJfcG9zIC0gbGV4YnVmLmxleF9zdGFydF9wb3MgaW5cbiAgQnl0ZXMuc3ViX3N0cmluZyBsZXhidWYubGV4X2J1ZmZlciBsZXhidWYubGV4X3N0YXJ0X3BvcyBsZW5cblxubGV0IHN1Yl9sZXhlbWUgbGV4YnVmIGkxIGkyID1cbiAgbGV0IGxlbiA9IGkyLWkxIGluXG4gIEJ5dGVzLnN1Yl9zdHJpbmcgbGV4YnVmLmxleF9idWZmZXIgaTEgbGVuXG5cbmxldCBzdWJfbGV4ZW1lX29wdCBsZXhidWYgaTEgaTIgPVxuICBpZiBpMSA+PSAwIHRoZW4gYmVnaW5cbiAgICBsZXQgbGVuID0gaTItaTEgaW5cbiAgICBTb21lIChCeXRlcy5zdWJfc3RyaW5nIGxleGJ1Zi5sZXhfYnVmZmVyIGkxIGxlbilcbiAgZW5kIGVsc2UgYmVnaW5cbiAgICBOb25lXG4gIGVuZFxuXG5sZXQgc3ViX2xleGVtZV9jaGFyIGxleGJ1ZiBpID0gQnl0ZXMuZ2V0IGxleGJ1Zi5sZXhfYnVmZmVyIGlcblxubGV0IHN1Yl9sZXhlbWVfY2hhcl9vcHQgbGV4YnVmIGkgPVxuICBpZiBpID49IDAgdGhlblxuICAgIFNvbWUgKEJ5dGVzLmdldCBsZXhidWYubGV4X2J1ZmZlciBpKVxuICBlbHNlXG4gICAgTm9uZVxuXG5cbmxldCBsZXhlbWVfY2hhciBsZXhidWYgaSA9XG4gIEJ5dGVzLmdldCBsZXhidWYubGV4X2J1ZmZlciAobGV4YnVmLmxleF9zdGFydF9wb3MgKyBpKVxuXG5sZXQgbGV4ZW1lX3N0YXJ0IGxleGJ1ZiA9IGxleGJ1Zi5sZXhfc3RhcnRfcC5wb3NfY251bVxubGV0IGxleGVtZV9lbmQgbGV4YnVmID0gbGV4YnVmLmxleF9jdXJyX3AucG9zX2NudW1cblxubGV0IGxleGVtZV9zdGFydF9wIGxleGJ1ZiA9IGxleGJ1Zi5sZXhfc3RhcnRfcFxubGV0IGxleGVtZV9lbmRfcCBsZXhidWYgPSBsZXhidWYubGV4X2N1cnJfcFxuXG5sZXQgbmV3X2xpbmUgbGV4YnVmID1cbiAgbGV0IGxjcCA9IGxleGJ1Zi5sZXhfY3Vycl9wIGluXG4gIGlmIGxjcCAhPSBkdW1teV9wb3MgdGhlblxuICAgIGxleGJ1Zi5sZXhfY3Vycl9wIDwtXG4gICAgICB7IGxjcCB3aXRoXG4gICAgICAgIHBvc19sbnVtID0gbGNwLnBvc19sbnVtICsgMTtcbiAgICAgICAgcG9zX2JvbCA9IGxjcC5wb3NfY251bTtcbiAgICAgIH1cblxuXG5cbigqIERpc2NhcmQgZGF0YSBsZWZ0IGluIGxleGVyIGJ1ZmZlci4gKilcblxubGV0IGZsdXNoX2lucHV0IGxiID1cbiAgbGIubGV4X2N1cnJfcG9zIDwtIDA7XG4gIGxiLmxleF9hYnNfcG9zIDwtIDA7XG4gIGxldCBsY3AgPSBsYi5sZXhfY3Vycl9wIGluXG4gIGlmIGxjcCAhPSBkdW1teV9wb3MgdGhlblxuICAgIGxiLmxleF9jdXJyX3AgPC0ge3plcm9fcG9zIHdpdGggcG9zX2ZuYW1lID0gbGNwLnBvc19mbmFtZX07XG4gIGxiLmxleF9idWZmZXJfbGVuIDwtIDA7XG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgQmVub2l0IFZhdWdvbiwgRU5TVEEgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE0IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbm9wZW4gQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICgqIFRvb2xzIHRvIG1hbmlwdWxhdGUgc2Nhbm5pbmcgc2V0IG9mIGNoYXJzIChzZWUgJVsuLi5dKSAqKVxuXG50eXBlIG11dGFibGVfY2hhcl9zZXQgPSBieXRlc1xuXG4oKiBDcmVhdGUgYSBmcmVzaCwgZW1wdHksIG11dGFibGUgY2hhciBzZXQuICopXG5sZXQgY3JlYXRlX2NoYXJfc2V0ICgpID0gQnl0ZXMubWFrZSAzMiAnXFwwMDAnXG5cbigqIEFkZCBhIGNoYXIgaW4gYSBtdXRhYmxlIGNoYXIgc2V0LiAqKVxubGV0IGFkZF9pbl9jaGFyX3NldCBjaGFyX3NldCBjID1cbiAgbGV0IGluZCA9IGludF9vZl9jaGFyIGMgaW5cbiAgbGV0IHN0cl9pbmQgPSBpbmQgbHNyIDMgYW5kIG1hc2sgPSAxIGxzbCAoaW5kIGxhbmQgMGIxMTEpIGluXG4gIEJ5dGVzLnNldCBjaGFyX3NldCBzdHJfaW5kXG4gICAgKGNoYXJfb2ZfaW50IChpbnRfb2ZfY2hhciAoQnl0ZXMuZ2V0IGNoYXJfc2V0IHN0cl9pbmQpIGxvciBtYXNrKSlcblxubGV0IGZyZWV6ZV9jaGFyX3NldCBjaGFyX3NldCA9XG4gIEJ5dGVzLnRvX3N0cmluZyBjaGFyX3NldFxuXG4oKiBDb21wdXRlIHRoZSBjb21wbGVtZW50IG9mIGEgY2hhciBzZXQuICopXG5sZXQgcmV2X2NoYXJfc2V0IGNoYXJfc2V0ID1cbiAgbGV0IGNoYXJfc2V0JyA9IGNyZWF0ZV9jaGFyX3NldCAoKSBpblxuICBmb3IgaSA9IDAgdG8gMzEgZG9cbiAgICBCeXRlcy5zZXQgY2hhcl9zZXQnIGlcbiAgICAgIChjaGFyX29mX2ludCAoaW50X29mX2NoYXIgKFN0cmluZy5nZXQgY2hhcl9zZXQgaSkgbHhvciAweEZGKSk7XG4gIGRvbmU7XG4gIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgY2hhcl9zZXQnXG5cbigqIFJldHVybiB0cnVlIGlmIGEgYGMnIGlzIGluIGBjaGFyX3NldCcuICopXG5sZXQgaXNfaW5fY2hhcl9zZXQgY2hhcl9zZXQgYyA9XG4gIGxldCBpbmQgPSBpbnRfb2ZfY2hhciBjIGluXG4gIGxldCBzdHJfaW5kID0gaW5kIGxzciAzIGFuZCBtYXNrID0gMSBsc2wgKGluZCBsYW5kIDBiMTExKSBpblxuICAoaW50X29mX2NoYXIgKFN0cmluZy5nZXQgY2hhcl9zZXQgc3RyX2luZCkgbGFuZCBtYXNrKSA8PiAwXG5cblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAoKiBJZ25vcmVkIHBhcmFtIGNvbnZlcnNpb24gKilcblxuKCogR0FEVCB1c2VkIHRvIGFic3RyYWN0IGFuIGV4aXN0ZW50aWFsIHR5cGUgcGFyYW1ldGVyLiAqKVxuKCogU2VlIHBhcmFtX2Zvcm1hdF9vZl9pZ25vcmVkX2Zvcm1hdC4gKilcbnR5cGUgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIHBhcmFtX2Zvcm1hdF9lYmIgPSBQYXJhbV9mb3JtYXRfRUJCIDpcbiAgICAoJ3ggLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIHBhcmFtX2Zvcm1hdF9lYmJcblxuKCogQ29tcHV0ZSBhIHBhZGRpbmcgYXNzb2NpYXRlZCB0byBhIHBhZF9vcHRpb24gKHNlZSBcIiVfNDJkXCIpLiAqKVxubGV0IHBhZF9vZl9wYWRfb3B0IHBhZF9vcHQgPSBtYXRjaCBwYWRfb3B0IHdpdGhcbiAgfCBOb25lIC0+IE5vX3BhZGRpbmdcbiAgfCBTb21lIHdpZHRoIC0+IExpdF9wYWRkaW5nIChSaWdodCwgd2lkdGgpXG5cbigqIENvbXB1dGUgYSBwcmVjaXNpb24gYXNzb2NpYXRlZCB0byBhIHByZWNfb3B0aW9uIChzZWUgXCIlXy40MmZcIikuICopXG5sZXQgcHJlY19vZl9wcmVjX29wdCBwcmVjX29wdCA9IG1hdGNoIHByZWNfb3B0IHdpdGhcbiAgfCBOb25lIC0+IE5vX3ByZWNpc2lvblxuICB8IFNvbWUgbmRlYyAtPiBMaXRfcHJlY2lzaW9uIG5kZWNcblxuKCogVHVybiBhbiBpZ25vcmVkIHBhcmFtIGludG8gaXRzIGVxdWl2YWxlbnQgbm90LWlnbm9yZWQgZm9ybWF0IG5vZGUuICopXG4oKiBVc2VkIGZvciBmb3JtYXQgcHJldHR5LXByaW50aW5nIGFuZCBTY2FuZi4gKilcbmxldCBwYXJhbV9mb3JtYXRfb2ZfaWdub3JlZF9mb3JtYXQgOiB0eXBlIGEgYiBjIGQgZSBmIHggeSAuXG4gICAgKGEsIGIsIGMsIGQsIHksIHgpIGlnbm9yZWQgLT4gKHgsIGIsIGMsIHksIGUsIGYpIGZtdCAtPlxuICAgICAgKGEsIGIsIGMsIGQsIGUsIGYpIHBhcmFtX2Zvcm1hdF9lYmIgPVxuZnVuIGlnbiBmbXQgLT4gbWF0Y2ggaWduIHdpdGhcbiAgfCBJZ25vcmVkX2NoYXIgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChDaGFyIGZtdClcbiAgfCBJZ25vcmVkX2NhbWxfY2hhciAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKENhbWxfY2hhciBmbXQpXG4gIHwgSWdub3JlZF9zdHJpbmcgcGFkX29wdCAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKFN0cmluZyAocGFkX29mX3BhZF9vcHQgcGFkX29wdCwgZm10KSlcbiAgfCBJZ25vcmVkX2NhbWxfc3RyaW5nIHBhZF9vcHQgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChDYW1sX3N0cmluZyAocGFkX29mX3BhZF9vcHQgcGFkX29wdCwgZm10KSlcbiAgfCBJZ25vcmVkX2ludCAoaWNvbnYsIHBhZF9vcHQpIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQiAoSW50IChpY29udiwgcGFkX29mX3BhZF9vcHQgcGFkX29wdCwgTm9fcHJlY2lzaW9uLCBmbXQpKVxuICB8IElnbm9yZWRfaW50MzIgKGljb252LCBwYWRfb3B0KSAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkJcbiAgICAgIChJbnQzMiAoaWNvbnYsIHBhZF9vZl9wYWRfb3B0IHBhZF9vcHQsIE5vX3ByZWNpc2lvbiwgZm10KSlcbiAgfCBJZ25vcmVkX25hdGl2ZWludCAoaWNvbnYsIHBhZF9vcHQpIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQlxuICAgICAgKE5hdGl2ZWludCAoaWNvbnYsIHBhZF9vZl9wYWRfb3B0IHBhZF9vcHQsIE5vX3ByZWNpc2lvbiwgZm10KSlcbiAgfCBJZ25vcmVkX2ludDY0IChpY29udiwgcGFkX29wdCkgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCXG4gICAgICAoSW50NjQgKGljb252LCBwYWRfb2ZfcGFkX29wdCBwYWRfb3B0LCBOb19wcmVjaXNpb24sIGZtdCkpXG4gIHwgSWdub3JlZF9mbG9hdCAocGFkX29wdCwgcHJlY19vcHQpIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQlxuICAgICAgKEZsb2F0ICgoRmxvYXRfZmxhZ18sIEZsb2F0X2YpLFxuICAgICAgICAgICAgICBwYWRfb2ZfcGFkX29wdCBwYWRfb3B0LCBwcmVjX29mX3ByZWNfb3B0IHByZWNfb3B0LCBmbXQpKVxuICB8IElnbm9yZWRfYm9vbCBwYWRfb3B0IC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQiAoQm9vbCAocGFkX29mX3BhZF9vcHQgcGFkX29wdCwgZm10KSlcbiAgfCBJZ25vcmVkX2Zvcm1hdF9hcmcgKHBhZF9vcHQsIGZtdHR5KSAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKEZvcm1hdF9hcmcgKHBhZF9vcHQsIGZtdHR5LCBmbXQpKVxuICB8IElnbm9yZWRfZm9ybWF0X3N1YnN0IChwYWRfb3B0LCBmbXR0eSkgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCXG4gICAgICAoRm9ybWF0X3N1YnN0IChwYWRfb3B0LCBmbXR0eSwgZm10KSlcbiAgfCBJZ25vcmVkX3JlYWRlciAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKFJlYWRlciBmbXQpXG4gIHwgSWdub3JlZF9zY2FuX2NoYXJfc2V0ICh3aWR0aF9vcHQsIGNoYXJfc2V0KSAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKFNjYW5fY2hhcl9zZXQgKHdpZHRoX29wdCwgY2hhcl9zZXQsIGZtdCkpXG4gIHwgSWdub3JlZF9zY2FuX2dldF9jb3VudGVyIGNvdW50ZXIgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChTY2FuX2dldF9jb3VudGVyIChjb3VudGVyLCBmbXQpKVxuICB8IElnbm9yZWRfc2Nhbl9uZXh0X2NoYXIgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChTY2FuX25leHRfY2hhciBmbXQpXG5cblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIFR5cGVzICopXG5cbnR5cGUgKCdiLCAnYykgYWNjX2Zvcm1hdHRpbmdfZ2VuID1cbiAgfCBBY2Nfb3Blbl90YWcgb2YgKCdiLCAnYykgYWNjXG4gIHwgQWNjX29wZW5fYm94IG9mICgnYiwgJ2MpIGFjY1xuXG4oKiBSZXZlcnNlZCBsaXN0IG9mIHByaW50aW5nIGF0b21zLiAqKVxuKCogVXNlZCB0byBhY2N1bXVsYXRlIHByaW50ZiBhcmd1bWVudHMuICopXG5hbmQgKCdiLCAnYykgYWNjID1cbiAgfCBBY2NfZm9ybWF0dGluZ19saXQgb2YgKCdiLCAnYykgYWNjICogZm9ybWF0dGluZ19saXRcbiAgICAgICgqIFNwZWNpYWwgZm10dGluZyAoYm94KSAqKVxuICB8IEFjY19mb3JtYXR0aW5nX2dlbiBvZiAoJ2IsICdjKSBhY2MgKiAoJ2IsICdjKSBhY2NfZm9ybWF0dGluZ19nZW5cbiAgICAgICgqIFNwZWNpYWwgZm10dGluZyAoYm94KSAqKVxuICB8IEFjY19zdHJpbmdfbGl0ZXJhbCBvZiAoJ2IsICdjKSBhY2MgKiBzdHJpbmcgICAgICgqIExpdGVyYWwgc3RyaW5nICopXG4gIHwgQWNjX2NoYXJfbGl0ZXJhbCAgIG9mICgnYiwgJ2MpIGFjYyAqIGNoYXIgICAgICAgKCogTGl0ZXJhbCBjaGFyICopXG4gIHwgQWNjX2RhdGFfc3RyaW5nICAgIG9mICgnYiwgJ2MpIGFjYyAqIHN0cmluZyAgICAgKCogR2VuZXJhdGVkIHN0cmluZyAqKVxuICB8IEFjY19kYXRhX2NoYXIgICAgICBvZiAoJ2IsICdjKSBhY2MgKiBjaGFyICAgICAgICgqIEdlbmVyYXRlZCBjaGFyICopXG4gIHwgQWNjX2RlbGF5ICAgICAgICAgIG9mICgnYiwgJ2MpIGFjYyAqICgnYiAtPiAnYylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIERlbGF5ZWQgcHJpbnRpbmcgKCVhLCAldCkgKilcbiAgfCBBY2NfZmx1c2ggICAgICAgICAgb2YgKCdiLCAnYykgYWNjICAgICAgICAgICAgICAoKiBGbHVzaCAqKVxuICB8IEFjY19pbnZhbGlkX2FyZyAgICBvZiAoJ2IsICdjKSBhY2MgKiBzdHJpbmdcbiAgICAgICgqIFJhaXNlIEludmFsaWRfYXJndW1lbnQgbXNnICopXG4gIHwgRW5kX29mX2FjY1xuXG4oKiBMaXN0IG9mIGhldGVyb2dlbmVvdXMgdmFsdWVzLiAqKVxuKCogVXNlZCB0byBhY2N1bXVsYXRlIHNjYW5mIGNhbGxiYWNrIGFyZ3VtZW50cy4gKilcbnR5cGUgKCdhLCAnYikgaGV0ZXJfbGlzdCA9XG4gIHwgQ29ucyA6ICdjICogKCdhLCAnYikgaGV0ZXJfbGlzdCAtPiAoJ2MgLT4gJ2EsICdiKSBoZXRlcl9saXN0XG4gIHwgTmlsIDogKCdiLCAnYikgaGV0ZXJfbGlzdFxuXG4oKiBFeGlzdGVudGlhbCBCbGFjayBCb3hlcy4gKilcbigqIFVzZWQgdG8gYWJzdHJhY3Qgc29tZSBleGlzdGVudGlhbCB0eXBlIHBhcmFtZXRlcnMuICopXG5cbigqIEdBRFQgdHlwZSBhc3NvY2lhdGluZyBhIHBhZGRpbmcgYW5kIGFuIGZtdHR5LiAqKVxuKCogU2VlIHRoZSB0eXBlX3BhZGRpbmcgZnVuY3Rpb24uICopXG50eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBwYWRkaW5nX2ZtdHR5X2ViYiA9IFBhZGRpbmdfZm10dHlfRUJCIDpcbiAgICAgKCd4LCAneSkgcGFkZGluZyAqICgneSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eSAtPlxuICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgcGFkZGluZ19mbXR0eV9lYmJcblxuKCogR0FEVCB0eXBlIGFzc29jaWF0aW5nIGEgcGFkZGluZywgYSBwcmVjaXNpb24gYW5kIGFuIGZtdHR5LiAqKVxuKCogU2VlIHRoZSB0eXBlX3BhZHByZWMgZnVuY3Rpb24uICopXG50eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBwYWRwcmVjX2ZtdHR5X2ViYiA9IFBhZHByZWNfZm10dHlfRUJCIDpcbiAgICAgKCd4LCAneSkgcGFkZGluZyAqICgneSwgJ3opIHByZWNpc2lvbiAqICgneiwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eSAtPlxuICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgcGFkcHJlY19mbXR0eV9lYmJcblxuKCogR0FEVCB0eXBlIGFzc29jaWF0aW5nIGEgcGFkZGluZyBhbmQgYW4gZm10LiAqKVxuKCogU2VlIG1ha2VfcGFkZGluZ19mbXRfZWJiIGFuZCBwYXJzZV9mb3JtYXQgZnVuY3Rpb25zLiAqKVxudHlwZSAoJ2EsICdiLCAnYywgJ2UsICdmKSBwYWRkaW5nX2ZtdF9lYmIgPSBQYWRkaW5nX2ZtdF9FQkIgOlxuICAgICAoXywgJ3ggLT4gJ2EpIHBhZGRpbmcgKlxuICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICgneCwgJ2IsICdjLCAnZSwgJ2YpIHBhZGRpbmdfZm10X2ViYlxuXG4oKiBHQURUIHR5cGUgYXNzb2NpYXRpbmcgYSBwcmVjaXNpb24gYW5kIGFuIGZtdC4gKilcbigqIFNlZSBtYWtlX3ByZWNpc2lvbl9mbXRfZWJiIGFuZCBwYXJzZV9mb3JtYXQgZnVuY3Rpb25zLiAqKVxudHlwZSAoJ2EsICdiLCAnYywgJ2UsICdmKSBwcmVjaXNpb25fZm10X2ViYiA9IFByZWNpc2lvbl9mbXRfRUJCIDpcbiAgICAgKF8sICd4IC0+ICdhKSBwcmVjaXNpb24gKlxuICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICgneCwgJ2IsICdjLCAnZSwgJ2YpIHByZWNpc2lvbl9mbXRfZWJiXG5cbigqIEdBRFQgdHlwZSBhc3NvY2lhdGluZyBhIHBhZGRpbmcsIGEgcHJlY2lzaW9uIGFuZCBhbiBmbXQuICopXG4oKiBTZWUgbWFrZV9wYWRwcmVjX2ZtdF9lYmIgYW5kIHBhcnNlX2Zvcm1hdCBmdW5jdGlvbnMuICopXG50eXBlICgncCwgJ2IsICdjLCAnZSwgJ2YpIHBhZHByZWNfZm10X2ViYiA9IFBhZHByZWNfZm10X0VCQiA6XG4gICAgICgneCwgJ3kpIHBhZGRpbmcgKiAoJ3ksICdwIC0+ICdhKSBwcmVjaXNpb24gKlxuICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICgncCwgJ2IsICdjLCAnZSwgJ2YpIHBhZHByZWNfZm10X2ViYlxuXG4oKiBBYnN0cmFjdCB0aGUgJ2EgYW5kICdkIHBhcmFtZXRlcnMgb2YgYW4gZm10LiAqKVxuKCogT3V0cHV0IHR5cGUgb2YgdGhlIGZvcm1hdCBwYXJzaW5nIGZ1bmN0aW9uLiAqKVxudHlwZSAoJ2IsICdjLCAnZSwgJ2YpIGZtdF9lYmIgPSBGbXRfRUJCIDpcbiAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAoJ2IsICdjLCAnZSwgJ2YpIGZtdF9lYmJcblxuKCogR0FEVCB0eXBlIGFzc29jaWF0aW5nIGFuIGZtdHR5IGFuZCBhbiBmbXQuICopXG4oKiBTZWUgdGhlIHR5cGVfZm9ybWF0X2dlbiBmdW5jdGlvbi4gKilcbnR5cGUgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdF9mbXR0eV9lYmIgPSBGbXRfZm10dHlfRUJCIDpcbiAgICAgKCdhLCAnYiwgJ2MsICdkLCAneSwgJ3gpIGZtdCAqXG4gICAgICgneCwgJ2IsICdjLCAneSwgJ2UsICdmKSBmbXR0eSAtPlxuICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10X2ZtdHR5X2ViYlxuXG4oKiBHQURUIHR5cGUgYXNzb2NpYXRpbmcgYW4gZm10dHkgYW5kIGFuIGZtdC4gKilcbigqIFNlZSB0aGUgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gZnVuY3Rpb24uICopXG50eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eV9mbXRfZWJiID0gRm10dHlfZm10X0VCQiA6XG4gICAgICgnYSwgJ2IsICdjLCAnZCwgJ3ksICd4KSBmbXR0eSAqXG4gICAgICgneCwgJ2IsICdjLCAneSwgJ2UsICdmKSBmbXRfZm10dHlfZWJiIC0+XG4gICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eV9mbXRfZWJiXG5cbigqIEFic3RyYWN0IGFsbCBmbXR0eSB0eXBlIHBhcmFtZXRlcnMuICopXG4oKiBVc2VkIHRvIGNvbXBhcmUgZm9ybWF0IHR5cGVzLiAqKVxudHlwZSBmbXR0eV9lYmIgPSBGbXR0eV9FQkIgOiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHkgLT4gZm10dHlfZWJiXG5cbigqIEFic3RyYWN0IGFsbCBwYWRkaW5nIHR5cGUgcGFyYW1ldGVycy4gKilcbigqIFVzZWQgdG8gY29tcGFyZSBwYWRkaW5ncy4gKilcbnR5cGUgcGFkZGluZ19lYmIgPSBQYWRkaW5nX0VCQiA6ICgnYSwgJ2IpIHBhZGRpbmcgLT4gcGFkZGluZ19lYmJcblxuKCogQWJzdHJhY3QgYWxsIHByZWNpc2lvbiB0eXBlIHBhcmFtZXRlcnMuICopXG4oKiBVc2VkIHRvIGNvbXBhcmUgcHJlY2lzaW9ucy4gKilcbnR5cGUgcHJlY2lzaW9uX2ViYiA9IFByZWNpc2lvbl9FQkIgOiAoJ2EsICdiKSBwcmVjaXNpb24gLT4gcHJlY2lzaW9uX2ViYlxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIENvbnN0YW50cyAqKVxuXG4oKiBEZWZhdWx0IHByZWNpc2lvbiBmb3IgZmxvYXQgcHJpbnRpbmcuICopXG5sZXQgZGVmYXVsdF9mbG9hdF9wcmVjaXNpb24gZmNvbnYgPVxuICBtYXRjaCBzbmQgZmNvbnYgd2l0aFxuICB8IEZsb2F0X2YgfCBGbG9hdF9lIHwgRmxvYXRfRSB8IEZsb2F0X2cgfCBGbG9hdF9HIHwgRmxvYXRfaCB8IEZsb2F0X0hcbiAgfCBGbG9hdF9DRiAtPiAtNlxuICAoKiBGb3IgJWggJUggYW5kICUjRiBmb3JtYXRzLCBhIG5lZ2F0aXZlIHByZWNpc2lvbiBtZWFucyBcImFzIG1hbnkgZGlnaXRzIGFzXG4gICAgIG5lY2Vzc2FyeVwiLiAgRm9yIHRoZSBvdGhlciBGUCBmb3JtYXRzLCB3ZSB0YWtlIHRoZSBhYnNvbHV0ZSB2YWx1ZVxuICAgICBvZiB0aGUgcHJlY2lzaW9uLCBoZW5jZSA2IGRpZ2l0cyBieSBkZWZhdWx0LiAqKVxuICB8IEZsb2F0X0YgLT4gMTJcbiAgKCogRGVmYXVsdCBwcmVjaXNpb24gZm9yIE9DYW1sIGZsb2F0IHByaW50aW5nICglRikuICopXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogRXh0ZXJuYWxzICopXG5cbmV4dGVybmFsIGZvcm1hdF9mbG9hdDogc3RyaW5nIC0+IGZsb2F0IC0+IHN0cmluZ1xuICA9IFwiY2FtbF9mb3JtYXRfZmxvYXRcIlxuZXh0ZXJuYWwgZm9ybWF0X2ludDogc3RyaW5nIC0+IGludCAtPiBzdHJpbmdcbiAgPSBcImNhbWxfZm9ybWF0X2ludFwiXG5leHRlcm5hbCBmb3JtYXRfaW50MzI6IHN0cmluZyAtPiBpbnQzMiAtPiBzdHJpbmdcbiAgPSBcImNhbWxfaW50MzJfZm9ybWF0XCJcbmV4dGVybmFsIGZvcm1hdF9uYXRpdmVpbnQ6IHN0cmluZyAtPiBuYXRpdmVpbnQgLT4gc3RyaW5nXG4gID0gXCJjYW1sX25hdGl2ZWludF9mb3JtYXRcIlxuZXh0ZXJuYWwgZm9ybWF0X2ludDY0OiBzdHJpbmcgLT4gaW50NjQgLT4gc3RyaW5nXG4gID0gXCJjYW1sX2ludDY0X2Zvcm1hdFwiXG5leHRlcm5hbCBoZXhzdHJpbmdfb2ZfZmxvYXQ6IGZsb2F0IC0+IGludCAtPiBjaGFyIC0+IHN0cmluZ1xuICA9IFwiY2FtbF9oZXhzdHJpbmdfb2ZfZmxvYXRcIlxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgKCogVG9vbHMgdG8gcHJldHR5LXByaW50IGZvcm1hdHMgKilcblxuKCogVHlwZSBvZiBleHRlbnNpYmxlIGNoYXJhY3RlciBidWZmZXJzLiAqKVxudHlwZSBidWZmZXIgPSB7XG4gIG11dGFibGUgaW5kIDogaW50O1xuICBtdXRhYmxlIGJ5dGVzIDogYnl0ZXM7XG59XG5cbigqIENyZWF0ZSBhIGZyZXNoIGJ1ZmZlci4gKilcbmxldCBidWZmZXJfY3JlYXRlIGluaXRfc2l6ZSA9IHsgaW5kID0gMDsgYnl0ZXMgPSBCeXRlcy5jcmVhdGUgaW5pdF9zaXplIH1cblxuKCogQ2hlY2sgc2l6ZSBvZiB0aGUgYnVmZmVyIGFuZCBncm93IGl0IGlmIG5lZWRlZC4gKilcbmxldCBidWZmZXJfY2hlY2tfc2l6ZSBidWYgb3ZlcmhlYWQgPVxuICBsZXQgbGVuID0gQnl0ZXMubGVuZ3RoIGJ1Zi5ieXRlcyBpblxuICBsZXQgbWluX2xlbiA9IGJ1Zi5pbmQgKyBvdmVyaGVhZCBpblxuICBpZiBtaW5fbGVuID4gbGVuIHRoZW4gKFxuICAgIGxldCBuZXdfbGVuID0gSW50Lm1heCAobGVuICogMikgbWluX2xlbiBpblxuICAgIGxldCBuZXdfc3RyID0gQnl0ZXMuY3JlYXRlIG5ld19sZW4gaW5cbiAgICBCeXRlcy5ibGl0IGJ1Zi5ieXRlcyAwIG5ld19zdHIgMCBsZW47XG4gICAgYnVmLmJ5dGVzIDwtIG5ld19zdHI7XG4gIClcblxuKCogQWRkIHRoZSBjaGFyYWN0ZXIgYGMnIHRvIHRoZSBidWZmZXIgYGJ1ZicuICopXG5sZXQgYnVmZmVyX2FkZF9jaGFyIGJ1ZiBjID1cbiAgYnVmZmVyX2NoZWNrX3NpemUgYnVmIDE7XG4gIEJ5dGVzLnNldCBidWYuYnl0ZXMgYnVmLmluZCBjO1xuICBidWYuaW5kIDwtIGJ1Zi5pbmQgKyAxXG5cbigqIEFkZCB0aGUgc3RyaW5nIGBzJyB0byB0aGUgYnVmZmVyIGBidWYnLiAqKVxubGV0IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBzID1cbiAgbGV0IHN0cl9sZW4gPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgYnVmZmVyX2NoZWNrX3NpemUgYnVmIHN0cl9sZW47XG4gIFN0cmluZy5ibGl0IHMgMCBidWYuYnl0ZXMgYnVmLmluZCBzdHJfbGVuO1xuICBidWYuaW5kIDwtIGJ1Zi5pbmQgKyBzdHJfbGVuXG5cbigqIEdldCB0aGUgY29udGVudCBvZiB0aGUgYnVmZmVyLiAqKVxubGV0IGJ1ZmZlcl9jb250ZW50cyBidWYgPVxuICBCeXRlcy5zdWJfc3RyaW5nIGJ1Zi5ieXRlcyAwIGJ1Zi5pbmRcblxuKCoqKilcblxuKCogQ29udmVydCBhbiBpbnRlZ2VyIGNvbnZlcnNpb24gdG8gY2hhci4gKilcbmxldCBjaGFyX29mX2ljb252IGljb252ID0gbWF0Y2ggaWNvbnYgd2l0aFxuICB8IEludF9kIHwgSW50X3BkIHwgSW50X3NkIHwgSW50X0NkIC0+ICdkJyB8IEludF9pIHwgSW50X3BpIHwgSW50X3NpXG4gIHwgSW50X0NpIC0+ICdpJyB8IEludF94IHwgSW50X0N4IC0+ICd4JyB8IEludF9YIHwgSW50X0NYIC0+ICdYJyB8IEludF9vXG4gIHwgSW50X0NvIC0+ICdvJyB8IEludF91IHwgSW50X0N1IC0+ICd1J1xuXG4oKiBDb252ZXJ0IGEgZmxvYXQgY29udmVyc2lvbiB0byBjaGFyLiAqKVxuKCogYGNGJyB3aWxsIGJlICdGJyBmb3IgZGlzcGxheWluZyBmb3JtYXQgYW5kICdnJyB0byBjYWxsIGxpYmMgcHJpbnRmICopXG5sZXQgY2hhcl9vZl9mY29udiA/KGNGPSdGJykgZmNvbnYgPSBtYXRjaCBzbmQgZmNvbnYgd2l0aFxuICB8IEZsb2F0X2YgLT4gJ2YnIHwgRmxvYXRfZSAtPiAnZSdcbiAgfCBGbG9hdF9FIC0+ICdFJyB8IEZsb2F0X2cgLT4gJ2cnXG4gIHwgRmxvYXRfRyAtPiAnRycgfCBGbG9hdF9GIC0+IGNGXG4gIHwgRmxvYXRfaCAtPiAnaCcgfCBGbG9hdF9IIC0+ICdIJ1xuICB8IEZsb2F0X0NGIC0+ICdGJ1xuXG5cbigqIENvbnZlcnQgYSBzY2FubmluZyBjb3VudGVyIHRvIGNoYXIuICopXG5sZXQgY2hhcl9vZl9jb3VudGVyIGNvdW50ZXIgPSBtYXRjaCBjb3VudGVyIHdpdGhcbiAgfCBMaW5lX2NvdW50ZXIgIC0+ICdsJ1xuICB8IENoYXJfY291bnRlciAgLT4gJ24nXG4gIHwgVG9rZW5fY291bnRlciAtPiAnTidcblxuKCoqKilcblxuKCogUHJpbnQgYSBjaGFyX3NldCBpbiBhIGJ1ZmZlciB3aXRoIHRoZSBPQ2FtbCBmb3JtYXQgbGV4aWNhbCBjb252ZW50aW9uLiAqKVxubGV0IGJwcmludF9jaGFyX3NldCBidWYgY2hhcl9zZXQgPVxuICBsZXQgcmVjIHByaW50X3N0YXJ0IHNldCA9XG4gICAgbGV0IGlzX2Fsb25lIGMgPVxuICAgICAgbGV0IGJlZm9yZSwgYWZ0ZXIgPSBDaGFyLihjaHIgKGNvZGUgYyAtIDEpLCBjaHIgKGNvZGUgYyArIDEpKSBpblxuICAgICAgaXNfaW5fY2hhcl9zZXQgc2V0IGNcbiAgICAgICYmIG5vdCAoaXNfaW5fY2hhcl9zZXQgc2V0IGJlZm9yZSAmJiBpc19pbl9jaGFyX3NldCBzZXQgYWZ0ZXIpIGluXG4gICAgaWYgaXNfYWxvbmUgJ10nIHRoZW4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnXSc7XG4gICAgcHJpbnRfb3V0IHNldCAxO1xuICAgIGlmIGlzX2Fsb25lICctJyB0aGVuIGJ1ZmZlcl9hZGRfY2hhciBidWYgJy0nO1xuICBhbmQgcHJpbnRfb3V0IHNldCBpID1cbiAgICBpZiBpIDwgMjU2IHRoZW5cbiAgICAgIGlmIGlzX2luX2NoYXJfc2V0IHNldCAoY2hhcl9vZl9pbnQgaSkgdGhlbiBwcmludF9maXJzdCBzZXQgaVxuICAgICAgZWxzZSBwcmludF9vdXQgc2V0IChpICsgMSlcbiAgYW5kIHByaW50X2ZpcnN0IHNldCBpID1cbiAgICBtYXRjaCBjaGFyX29mX2ludCBpIHdpdGhcbiAgICB8ICdcXDI1NScgLT4gcHJpbnRfY2hhciBidWYgMjU1O1xuICAgIHwgJ10nIHwgJy0nIC0+IHByaW50X291dCBzZXQgKGkgKyAxKTtcbiAgICB8IF8gLT4gcHJpbnRfc2Vjb25kIHNldCAoaSArIDEpO1xuICBhbmQgcHJpbnRfc2Vjb25kIHNldCBpID1cbiAgICBpZiBpc19pbl9jaGFyX3NldCBzZXQgKGNoYXJfb2ZfaW50IGkpIHRoZW5cbiAgICAgIG1hdGNoIGNoYXJfb2ZfaW50IGkgd2l0aFxuICAgICAgfCAnXFwyNTUnIC0+XG4gICAgICAgIHByaW50X2NoYXIgYnVmIDI1NDtcbiAgICAgICAgcHJpbnRfY2hhciBidWYgMjU1O1xuICAgICAgfCAnXScgfCAnLScgd2hlbiBub3QgKGlzX2luX2NoYXJfc2V0IHNldCAoY2hhcl9vZl9pbnQgKGkgKyAxKSkpIC0+XG4gICAgICAgIHByaW50X2NoYXIgYnVmIChpIC0gMSk7XG4gICAgICAgIHByaW50X291dCBzZXQgKGkgKyAxKTtcbiAgICAgIHwgXyB3aGVuIG5vdCAoaXNfaW5fY2hhcl9zZXQgc2V0IChjaGFyX29mX2ludCAoaSArIDEpKSkgLT5cbiAgICAgICAgcHJpbnRfY2hhciBidWYgKGkgLSAxKTtcbiAgICAgICAgcHJpbnRfY2hhciBidWYgaTtcbiAgICAgICAgcHJpbnRfb3V0IHNldCAoaSArIDIpO1xuICAgICAgfCBfIC0+XG4gICAgICAgIHByaW50X2luIHNldCAoaSAtIDEpIChpICsgMik7XG4gICAgZWxzZSAoXG4gICAgICBwcmludF9jaGFyIGJ1ZiAoaSAtIDEpO1xuICAgICAgcHJpbnRfb3V0IHNldCAoaSArIDEpO1xuICAgIClcbiAgYW5kIHByaW50X2luIHNldCBpIGogPVxuICAgIGlmIGogPSAyNTYgfHwgbm90IChpc19pbl9jaGFyX3NldCBzZXQgKGNoYXJfb2ZfaW50IGopKSB0aGVuIChcbiAgICAgIHByaW50X2NoYXIgYnVmIGk7XG4gICAgICBwcmludF9jaGFyIGJ1ZiAoaW50X29mX2NoYXIgJy0nKTtcbiAgICAgIHByaW50X2NoYXIgYnVmIChqIC0gMSk7XG4gICAgICBpZiBqIDwgMjU2IHRoZW4gcHJpbnRfb3V0IHNldCAoaiArIDEpO1xuICAgICkgZWxzZVxuICAgICAgcHJpbnRfaW4gc2V0IGkgKGogKyAxKTtcbiAgYW5kIHByaW50X2NoYXIgYnVmIGkgPSBtYXRjaCBjaGFyX29mX2ludCBpIHdpdGhcbiAgICB8ICclJyAtPiBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7XG4gICAgfCAnQCcgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJ0AnO1xuICAgIHwgYyAgIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgYztcbiAgaW5cbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnWyc7XG4gIHByaW50X3N0YXJ0IChcbiAgICBpZiBpc19pbl9jaGFyX3NldCBjaGFyX3NldCAnXFwwMDAnXG4gICAgdGhlbiAoIGJ1ZmZlcl9hZGRfY2hhciBidWYgJ14nOyByZXZfY2hhcl9zZXQgY2hhcl9zZXQgKVxuICAgIGVsc2UgY2hhcl9zZXRcbiAgKTtcbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnXSdcblxuKCoqKilcblxuKCogUHJpbnQgYSBwYWR0eSBpbiBhIGJ1ZmZlciB3aXRoIHRoZSBmb3JtYXQtbGlrZSBzeW50YXguICopXG5sZXQgYnByaW50X3BhZHR5IGJ1ZiBwYWR0eSA9IG1hdGNoIHBhZHR5IHdpdGhcbiAgfCBMZWZ0ICAtPiBidWZmZXJfYWRkX2NoYXIgYnVmICctJ1xuICB8IFJpZ2h0IC0+ICgpXG4gIHwgWmVyb3MgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnMCdcblxuKCogUHJpbnQgdGhlICdfJyBvZiBhbiBpZ25vcmVkIGZsYWcgaWYgbmVlZGVkLiAqKVxubGV0IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnID1cbiAgaWYgaWduX2ZsYWcgdGhlbiBidWZmZXJfYWRkX2NoYXIgYnVmICdfJ1xuXG4oKioqKVxuXG5sZXQgYnByaW50X3BhZF9vcHQgYnVmIHBhZF9vcHQgPSBtYXRjaCBwYWRfb3B0IHdpdGhcbiAgfCBOb25lIC0+ICgpXG4gIHwgU29tZSB3aWR0aCAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgKEludC50b19zdHJpbmcgd2lkdGgpXG5cbigqKiopXG5cbigqIFByaW50IHBhZGRpbmcgaW4gYSBidWZmZXIgd2l0aCB0aGUgZm9ybWF0LWxpa2Ugc3ludGF4LiAqKVxubGV0IGJwcmludF9wYWRkaW5nIDogdHlwZSBhIGIgLiBidWZmZXIgLT4gKGEsIGIpIHBhZGRpbmcgLT4gdW5pdCA9XG5mdW4gYnVmIHBhZCAtPiBtYXRjaCBwYWQgd2l0aFxuICB8IE5vX3BhZGRpbmcgLT4gKClcbiAgfCBMaXRfcGFkZGluZyAocGFkdHksIG4pIC0+XG4gICAgYnByaW50X3BhZHR5IGJ1ZiBwYWR0eTtcbiAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgKEludC50b19zdHJpbmcgbik7XG4gIHwgQXJnX3BhZGRpbmcgcGFkdHkgLT5cbiAgICBicHJpbnRfcGFkdHkgYnVmIHBhZHR5O1xuICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyonXG5cbigqIFByaW50IHByZWNpc2lvbiBpbiBhIGJ1ZmZlciB3aXRoIHRoZSBmb3JtYXQtbGlrZSBzeW50YXguICopXG5sZXQgYnByaW50X3ByZWNpc2lvbiA6IHR5cGUgYSBiIC4gYnVmZmVyIC0+IChhLCBiKSBwcmVjaXNpb24gLT4gdW5pdCA9XG4gIGZ1biBidWYgcHJlYyAtPiBtYXRjaCBwcmVjIHdpdGhcbiAgfCBOb19wcmVjaXNpb24gLT4gKClcbiAgfCBMaXRfcHJlY2lzaW9uIG4gLT5cbiAgICBidWZmZXJfYWRkX2NoYXIgYnVmICcuJztcbiAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgKEludC50b19zdHJpbmcgbik7XG4gIHwgQXJnX3ByZWNpc2lvbiAtPlxuICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIi4qXCJcblxuKCoqKilcblxuKCogUHJpbnQgdGhlIG9wdGlvbmFsICcrJywgJyAnIG9yICcjJyBhc3NvY2lhdGVkIHRvIGFuIGludCBjb252ZXJzaW9uLiAqKVxubGV0IGJwcmludF9pY29udl9mbGFnIGJ1ZiBpY29udiA9IG1hdGNoIGljb252IHdpdGhcbiAgfCBJbnRfcGQgfCBJbnRfcGkgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnKydcbiAgfCBJbnRfc2QgfCBJbnRfc2kgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnICdcbiAgfCBJbnRfQ3ggfCBJbnRfQ1ggfCBJbnRfQ28gfCBJbnRfQ2QgfCBJbnRfQ2kgfCBJbnRfQ3UgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyMnXG4gIHwgSW50X2QgfCBJbnRfaSB8IEludF94IHwgSW50X1ggfCBJbnRfbyB8IEludF91IC0+ICgpXG5cbigqIFByaW50IGFuIGNvbXBsZXRlIGludCBmb3JtYXQgaW4gYSBidWZmZXIgKGV4OiBcIiUzLipkXCIpLiAqKVxubGV0IGJwcmludF9pbnRfZm10IGJ1ZiBpZ25fZmxhZyBpY29udiBwYWQgcHJlYyA9XG4gIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnO1xuICBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgYnByaW50X2ljb252X2ZsYWcgYnVmIGljb252O1xuICBicHJpbnRfcGFkZGluZyBidWYgcGFkO1xuICBicHJpbnRfcHJlY2lzaW9uIGJ1ZiBwcmVjO1xuICBidWZmZXJfYWRkX2NoYXIgYnVmIChjaGFyX29mX2ljb252IGljb252KVxuXG4oKiBQcmludCBhIGNvbXBsZXRlIGludDMyLCBuYXRpdmVpbnQgb3IgaW50NjQgZm9ybWF0IGluIGEgYnVmZmVyLiAqKVxubGV0IGJwcmludF9hbHRpbnRfZm10IGJ1ZiBpZ25fZmxhZyBpY29udiBwYWQgcHJlYyBjID1cbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7XG4gIGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICBicHJpbnRfaWNvbnZfZmxhZyBidWYgaWNvbnY7XG4gIGJwcmludF9wYWRkaW5nIGJ1ZiBwYWQ7XG4gIGJwcmludF9wcmVjaXNpb24gYnVmIHByZWM7XG4gIGJ1ZmZlcl9hZGRfY2hhciBidWYgYztcbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAoY2hhcl9vZl9pY29udiBpY29udilcblxuKCoqKilcblxuKCogUHJpbnQgdGhlIG9wdGlvbmFsICcrJywgJyAnIGFuZC9vciAnIycgYXNzb2NpYXRlZCB0byBhIGZsb2F0IGNvbnZlcnNpb24uICopXG5sZXQgYnByaW50X2Zjb252X2ZsYWcgYnVmIGZjb252ID1cbiAgYmVnaW4gbWF0Y2ggZnN0IGZjb252IHdpdGhcbiAgfCBGbG9hdF9mbGFnX3AgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnKydcbiAgfCBGbG9hdF9mbGFnX3MgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnICdcbiAgfCBGbG9hdF9mbGFnXyAtPiAoKSBlbmQ7XG4gIG1hdGNoIHNuZCBmY29udiB3aXRoXG4gIHwgRmxvYXRfQ0YgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnIydcbiAgfCBGbG9hdF9mIHwgRmxvYXRfZSB8IEZsb2F0X0UgfCBGbG9hdF9nIHwgRmxvYXRfR1xuICB8IEZsb2F0X0YgfCBGbG9hdF9oIHwgRmxvYXRfSCAtPiAoKVxuXG4oKiBQcmludCBhIGNvbXBsZXRlIGZsb2F0IGZvcm1hdCBpbiBhIGJ1ZmZlciAoZXg6IFwiJSsqLjNmXCIpLiAqKVxubGV0IGJwcmludF9mbG9hdF9mbXQgYnVmIGlnbl9mbGFnIGZjb252IHBhZCBwcmVjID1cbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7XG4gIGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICBicHJpbnRfZmNvbnZfZmxhZyBidWYgZmNvbnY7XG4gIGJwcmludF9wYWRkaW5nIGJ1ZiBwYWQ7XG4gIGJwcmludF9wcmVjaXNpb24gYnVmIHByZWM7XG4gIGJ1ZmZlcl9hZGRfY2hhciBidWYgKGNoYXJfb2ZfZmNvbnYgZmNvbnYpXG5cbigqIENvbXB1dGUgdGhlIGxpdGVyYWwgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgRm9ybWF0dGluZ19saXQuICopXG4oKiBVc2VkIGJ5IFByaW50ZiBhbmQgU2NhbmYgd2hlcmUgZm9ybWF0dGluZyBpcyBub3QgaW50ZXJwcmV0ZWQuICopXG5sZXQgc3RyaW5nX29mX2Zvcm1hdHRpbmdfbGl0IGZvcm1hdHRpbmdfbGl0ID0gbWF0Y2ggZm9ybWF0dGluZ19saXQgd2l0aFxuICB8IENsb3NlX2JveCAgICAgICAgICAgIC0+IFwiQF1cIlxuICB8IENsb3NlX3RhZyAgICAgICAgICAgIC0+IFwiQH1cIlxuICB8IEJyZWFrIChzdHIsIF8sIF8pICAgIC0+IHN0clxuICB8IEZGbHVzaCAgICAgICAgICAgICAgIC0+IFwiQD9cIlxuICB8IEZvcmNlX25ld2xpbmUgICAgICAgIC0+IFwiQFxcblwiXG4gIHwgRmx1c2hfbmV3bGluZSAgICAgICAgLT4gXCJALlwiXG4gIHwgTWFnaWNfc2l6ZSAoc3RyLCBfKSAgLT4gc3RyXG4gIHwgRXNjYXBlZF9hdCAgICAgICAgICAgLT4gXCJAQFwiXG4gIHwgRXNjYXBlZF9wZXJjZW50ICAgICAgLT4gXCJAJVwiXG4gIHwgU2Nhbl9pbmRpYyBjIC0+IFwiQFwiIF4gKFN0cmluZy5tYWtlIDEgYylcblxuKCoqKilcblxuKCogUHJpbnQgYSBsaXRlcmFsIGNoYXIgaW4gYSBidWZmZXIsIGVzY2FwZSAnJScgYnkgXCIlJVwiLiAqKVxubGV0IGJwcmludF9jaGFyX2xpdGVyYWwgYnVmIGNociA9IG1hdGNoIGNociB3aXRoXG4gIHwgJyUnIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiUlXCJcbiAgfCBfIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgY2hyXG5cbigqIFByaW50IGEgbGl0ZXJhbCBzdHJpbmcgaW4gYSBidWZmZXIsIGVzY2FwZSBhbGwgJyUnIGJ5IFwiJSVcIi4gKilcbmxldCBicHJpbnRfc3RyaW5nX2xpdGVyYWwgYnVmIHN0ciA9XG4gIGZvciBpID0gMCB0byBTdHJpbmcubGVuZ3RoIHN0ciAtIDEgZG9cbiAgICBicHJpbnRfY2hhcl9saXRlcmFsIGJ1ZiBzdHIuW2ldXG4gIGRvbmVcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKCogRm9ybWF0IHByZXR0eS1wcmludGluZyAqKVxuXG4oKiBQcmludCBhIGNvbXBsZXRlIGZvcm1hdCB0eXBlIChhbiBmbXR0eSkgaW4gYSBidWZmZXIuICopXG5sZXQgcmVjIGJwcmludF9mbXR0eSA6IHR5cGUgYSBiIGMgZCBlIGYgZyBoIGkgaiBrIGwgLlxuICAgIGJ1ZmZlciAtPiAoYSwgYiwgYywgZCwgZSwgZiwgZywgaCwgaSwgaiwgaywgbCkgZm10dHlfcmVsIC0+IHVuaXQgPVxuZnVuIGJ1ZiBmbXR0eSAtPiBtYXRjaCBmbXR0eSB3aXRoXG4gIHwgQ2hhcl90eSByZXN0ICAgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJWNcIjsgIGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBTdHJpbmdfdHkgcmVzdCAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlc1wiOyAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IEludF90eSByZXN0ICAgICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVpXCI7ICBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgSW50MzJfdHkgcmVzdCAgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJWxpXCI7IGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBOYXRpdmVpbnRfdHkgcmVzdCAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlbmlcIjsgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IEludDY0X3R5IHJlc3QgICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVMaVwiOyBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgRmxvYXRfdHkgcmVzdCAgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJWZcIjsgIGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBCb29sX3R5IHJlc3QgICAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlQlwiOyAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IEFscGhhX3R5IHJlc3QgICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVhXCI7ICBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgVGhldGFfdHkgcmVzdCAgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJXRcIjsgIGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBBbnlfdHkgcmVzdCAgICAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlP1wiOyAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IFJlYWRlcl90eSByZXN0ICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVyXCI7ICBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG5cbiAgfCBJZ25vcmVkX3JlYWRlcl90eSByZXN0IC0+XG4gICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJV9yXCI7XG4gICAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuXG4gIHwgRm9ybWF0X2FyZ190eSAoc3ViX2ZtdHR5LCByZXN0KSAtPlxuICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiV7XCI7IGJwcmludF9mbXR0eSBidWYgc3ViX2ZtdHR5O1xuICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiV9XCI7IGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBGb3JtYXRfc3Vic3RfdHkgKHN1Yl9mbXR0eSwgXywgcmVzdCkgLT5cbiAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlKFwiOyBicHJpbnRfZm10dHkgYnVmIHN1Yl9mbXR0eTtcbiAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlKVwiOyBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG5cbiAgfCBFbmRfb2ZfZm10dHkgLT4gKClcblxuKCoqKilcblxubGV0IHJlYyBpbnRfb2ZfY3VzdG9tX2FyaXR5IDogdHlwZSBhIGIgYyAuXG4gIChhLCBiLCBjKSBjdXN0b21fYXJpdHkgLT4gaW50ID1cbiAgZnVuY3Rpb25cbiAgfCBDdXN0b21femVybyAtPiAwXG4gIHwgQ3VzdG9tX3N1Y2MgeCAtPiAxICsgaW50X29mX2N1c3RvbV9hcml0eSB4XG5cbigqIFByaW50IGEgY29tcGxldGUgZm9ybWF0IGluIGEgYnVmZmVyLiAqKVxubGV0IGJwcmludF9mbXQgYnVmIGZtdCA9XG4gIGxldCByZWMgZm10aXRlciA6IHR5cGUgYSBiIGMgZCBlIGYgLlxuICAgICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPiBib29sIC0+IHVuaXQgPVxuICBmdW4gZm10IGlnbl9mbGFnIC0+IG1hdGNoIGZtdCB3aXRoXG4gICAgfCBTdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJwcmludF9wYWRkaW5nIGJ1ZiBwYWQ7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJ3MnO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgQ2FtbF9zdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJwcmludF9wYWRkaW5nIGJ1ZiBwYWQ7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJ1MnO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuXG4gICAgfCBJbnQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICBicHJpbnRfaW50X2ZtdCBidWYgaWduX2ZsYWcgaWNvbnYgcGFkIHByZWM7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBJbnQzMiAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICAgIGJwcmludF9hbHRpbnRfZm10IGJ1ZiBpZ25fZmxhZyBpY29udiBwYWQgcHJlYyAnbCc7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBOYXRpdmVpbnQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICBicHJpbnRfYWx0aW50X2ZtdCBidWYgaWduX2ZsYWcgaWNvbnYgcGFkIHByZWMgJ24nO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgSW50NjQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICBicHJpbnRfYWx0aW50X2ZtdCBidWYgaWduX2ZsYWcgaWNvbnYgcGFkIHByZWMgJ0wnO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgRmxvYXQgKGZjb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICBicHJpbnRfZmxvYXRfZm10IGJ1ZiBpZ25fZmxhZyBmY29udiBwYWQgcHJlYztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcblxuICAgIHwgQ2hhciByZXN0IC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICdjJzsgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgQ2FtbF9jaGFyIHJlc3QgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJ0MnOyBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBCb29sIChwYWQsIHJlc3QpIC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBicHJpbnRfcGFkZGluZyBidWYgcGFkOyBidWZmZXJfYWRkX2NoYXIgYnVmICdCJztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IEFscGhhIHJlc3QgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJ2EnOyBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBUaGV0YSByZXN0IC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICd0JzsgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgQ3VzdG9tIChhcml0eSwgXywgcmVzdCkgLT5cbiAgICAgIGZvciBfaSA9IDEgdG8gaW50X29mX2N1c3RvbV9hcml0eSBhcml0eSBkb1xuICAgICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJz8nO1xuICAgICAgZG9uZTtcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IFJlYWRlciByZXN0IC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICdyJzsgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgRmx1c2ggcmVzdCAtPlxuICAgICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJSFcIjtcbiAgICAgIGZtdGl0ZXIgcmVzdCBpZ25fZmxhZztcblxuICAgIHwgU3RyaW5nX2xpdGVyYWwgKHN0ciwgcmVzdCkgLT5cbiAgICAgIGJwcmludF9zdHJpbmdfbGl0ZXJhbCBidWYgc3RyO1xuICAgICAgZm10aXRlciByZXN0IGlnbl9mbGFnO1xuICAgIHwgQ2hhcl9saXRlcmFsIChjaHIsIHJlc3QpIC0+XG4gICAgICBicHJpbnRfY2hhcl9saXRlcmFsIGJ1ZiBjaHI7XG4gICAgICBmbXRpdGVyIHJlc3QgaWduX2ZsYWc7XG5cbiAgICB8IEZvcm1hdF9hcmcgKHBhZF9vcHQsIGZtdHR5LCByZXN0KSAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnByaW50X3BhZF9vcHQgYnVmIHBhZF9vcHQ7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJ3snO1xuICAgICAgYnByaW50X2ZtdHR5IGJ1ZiBmbXR0eTsgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJ30nO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgRm9ybWF0X3N1YnN0IChwYWRfb3B0LCBmbXR0eSwgcmVzdCkgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJwcmludF9wYWRfb3B0IGJ1ZiBwYWRfb3B0OyBidWZmZXJfYWRkX2NoYXIgYnVmICcoJztcbiAgICAgIGJwcmludF9mbXR0eSBidWYgZm10dHk7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBidWZmZXJfYWRkX2NoYXIgYnVmICcpJztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcblxuICAgIHwgU2Nhbl9jaGFyX3NldCAod2lkdGhfb3B0LCBjaGFyX3NldCwgcmVzdCkgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJwcmludF9wYWRfb3B0IGJ1ZiB3aWR0aF9vcHQ7IGJwcmludF9jaGFyX3NldCBidWYgY2hhcl9zZXQ7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBTY2FuX2dldF9jb3VudGVyIChjb3VudGVyLCByZXN0KSAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAoY2hhcl9vZl9jb3VudGVyIGNvdW50ZXIpO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgU2Nhbl9uZXh0X2NoYXIgcmVzdCAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnByaW50X3N0cmluZ19saXRlcmFsIGJ1ZiBcIjBjXCI7IGZtdGl0ZXIgcmVzdCBmYWxzZTtcblxuICAgIHwgSWdub3JlZF9wYXJhbSAoaWduLCByZXN0KSAtPlxuICAgICAgbGV0IFBhcmFtX2Zvcm1hdF9FQkIgZm10JyA9IHBhcmFtX2Zvcm1hdF9vZl9pZ25vcmVkX2Zvcm1hdCBpZ24gcmVzdCBpblxuICAgICAgZm10aXRlciBmbXQnIHRydWU7XG5cbiAgICB8IEZvcm1hdHRpbmdfbGl0IChmbXRpbmdfbGl0LCByZXN0KSAtPlxuICAgICAgYnByaW50X3N0cmluZ19saXRlcmFsIGJ1ZiAoc3RyaW5nX29mX2Zvcm1hdHRpbmdfbGl0IGZtdGluZ19saXQpO1xuICAgICAgZm10aXRlciByZXN0IGlnbl9mbGFnO1xuICAgIHwgRm9ybWF0dGluZ19nZW4gKGZtdGluZ19nZW4sIHJlc3QpIC0+XG4gICAgICBiZWdpbiBtYXRjaCBmbXRpbmdfZ2VuIHdpdGhcbiAgICAgIHwgT3Blbl90YWcgKEZvcm1hdCAoXywgc3RyKSkgLT5cbiAgICAgICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiQHtcIjsgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIHN0clxuICAgICAgfCBPcGVuX2JveCAoRm9ybWF0IChfLCBzdHIpKSAtPlxuICAgICAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgXCJAW1wiOyBidWZmZXJfYWRkX3N0cmluZyBidWYgc3RyXG4gICAgICBlbmQ7XG4gICAgICBmbXRpdGVyIHJlc3QgaWduX2ZsYWc7XG5cbiAgICB8IEVuZF9vZl9mb3JtYXQgLT4gKClcblxuICBpbiBmbXRpdGVyIGZtdCBmYWxzZVxuXG4oKioqKVxuXG4oKiBDb252ZXJ0IGEgZm9ybWF0IHRvIHN0cmluZy4gKilcbmxldCBzdHJpbmdfb2ZfZm10IGZtdCA9XG4gIGxldCBidWYgPSBidWZmZXJfY3JlYXRlIDE2IGluXG4gIGJwcmludF9mbXQgYnVmIGZtdDtcbiAgYnVmZmVyX2NvbnRlbnRzIGJ1ZlxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBUeXBlIGV4dHJhY3Rpb24gKilcblxudHlwZSAoXywgXykgZXEgPSBSZWZsIDogKCdhLCAnYSkgZXFcblxuKCogSW52YXJpYW50OiB0aGlzIGZ1bmN0aW9uIGlzIHRoZSBpZGVudGl0eSBvbiB2YWx1ZXMuXG5cbiAgIEluIHBhcnRpY3VsYXIsIGlmICh0eTEsIHR5MikgaGF2ZSBlcXVhbCB2YWx1ZXMsIHRoZW5cbiAgICh0cmFucyAoc3ltbSB0eTEpIHR5MikgcmVzcGVjdHMgdGhlICd0cmFucycgcHJlY29uZGl0aW9uLiAqKVxubGV0IHJlYyBzeW1tIDogdHlwZSBhMSBiMSBjMSBkMSBlMSBmMSBhMiBiMiBjMiBkMiBlMiBmMiAuXG4gICAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSxcbiAgICBhMiwgYjIsIGMyLCBkMiwgZTIsIGYyKSBmbXR0eV9yZWxcbi0+IChhMiwgYjIsIGMyLCBkMiwgZTIsIGYyLFxuICAgIGExLCBiMSwgYzEsIGQxLCBlMSwgZjEpIGZtdHR5X3JlbFxuPSBmdW5jdGlvblxuICB8IENoYXJfdHkgcmVzdCAtPiBDaGFyX3R5IChzeW1tIHJlc3QpXG4gIHwgSW50X3R5IHJlc3QgLT4gSW50X3R5IChzeW1tIHJlc3QpXG4gIHwgSW50MzJfdHkgcmVzdCAtPiBJbnQzMl90eSAoc3ltbSByZXN0KVxuICB8IEludDY0X3R5IHJlc3QgLT4gSW50NjRfdHkgKHN5bW0gcmVzdClcbiAgfCBOYXRpdmVpbnRfdHkgcmVzdCAtPiBOYXRpdmVpbnRfdHkgKHN5bW0gcmVzdClcbiAgfCBGbG9hdF90eSByZXN0IC0+IEZsb2F0X3R5IChzeW1tIHJlc3QpXG4gIHwgQm9vbF90eSByZXN0IC0+IEJvb2xfdHkgKHN5bW0gcmVzdClcbiAgfCBTdHJpbmdfdHkgcmVzdCAtPiBTdHJpbmdfdHkgKHN5bW0gcmVzdClcbiAgfCBUaGV0YV90eSByZXN0IC0+IFRoZXRhX3R5IChzeW1tIHJlc3QpXG4gIHwgQWxwaGFfdHkgcmVzdCAtPiBBbHBoYV90eSAoc3ltbSByZXN0KVxuICB8IEFueV90eSByZXN0IC0+IEFueV90eSAoc3ltbSByZXN0KVxuICB8IFJlYWRlcl90eSByZXN0IC0+IFJlYWRlcl90eSAoc3ltbSByZXN0KVxuICB8IElnbm9yZWRfcmVhZGVyX3R5IHJlc3QgLT4gSWdub3JlZF9yZWFkZXJfdHkgKHN5bW0gcmVzdClcbiAgfCBGb3JtYXRfYXJnX3R5ICh0eSwgcmVzdCkgLT5cbiAgICBGb3JtYXRfYXJnX3R5ICh0eSwgc3ltbSByZXN0KVxuICB8IEZvcm1hdF9zdWJzdF90eSAodHkxLCB0eTIsIHJlc3QpIC0+XG4gICAgRm9ybWF0X3N1YnN0X3R5ICh0eTIsIHR5MSwgc3ltbSByZXN0KVxuICB8IEVuZF9vZl9mbXR0eSAtPiBFbmRfb2ZfZm10dHlcblxubGV0IHJlYyBmbXR0eV9yZWxfZGV0IDogdHlwZSBhMSBiIGMgZDEgZTEgZjEgYTIgZDIgZTIgZjIgLlxuICAoYTEsIGIsIGMsIGQxLCBlMSwgZjEsXG4gICBhMiwgYiwgYywgZDIsIGUyLCBmMikgZm10dHlfcmVsIC0+XG4gICAgKChmMSwgZjIpIGVxIC0+IChhMSwgYTIpIGVxKVxuICAqICgoYTEsIGEyKSBlcSAtPiAoZjEsIGYyKSBlcSlcbiAgKiAoKGUxLCBlMikgZXEgLT4gKGQxLCBkMikgZXEpXG4gICogKChkMSwgZDIpIGVxIC0+IChlMSwgZTIpIGVxKVxuPSBmdW5jdGlvblxuICB8IEVuZF9vZl9mbXR0eSAtPlxuICAgIChmdW4gUmVmbCAtPiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBSZWZsKVxuICB8IENoYXJfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBTdHJpbmdfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBJbnRfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBJbnQzMl90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IEludDY0X3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgTmF0aXZlaW50X3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgRmxvYXRfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBCb29sX3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG5cbiAgfCBUaGV0YV90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IEFscGhhX3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgQW55X3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgUmVhZGVyX3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZWQgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBkZSBSZWZsIGluIFJlZmwpXG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBlZCBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGRlIFJlZmwgaW4gUmVmbClcbiAgfCBGb3JtYXRfYXJnX3R5IChfdHksIHJlc3QpIC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IEZvcm1hdF9zdWJzdF90eSAodHkxLCB0eTIsIHJlc3QpIC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgbGV0IHR5ID0gdHJhbnMgKHN5bW0gdHkxKSB0eTIgaW5cbiAgICBsZXQgYWcsIGdhLCBkaiwgamQgPSBmbXR0eV9yZWxfZGV0IHR5IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBsZXQgUmVmbCA9IGFnIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZ2EgUmVmbCBpbiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZWQgUmVmbCBpbiBsZXQgUmVmbCA9IGRqIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gamQgUmVmbCBpbiBsZXQgUmVmbCA9IGRlIFJlZmwgaW4gUmVmbClcblxuKCogUHJlY29uZGl0aW9uOiB3ZSBhc3N1bWUgdGhhdCB0aGUgdHdvIGZtdHR5X3JlbCBhcmd1bWVudHMgaGF2ZSBlcXVhbFxuICAgdmFsdWVzIChhdCBwb3NzaWJseSBkaXN0aW5jdCB0eXBlcyk7IHRoaXMgaW52YXJpYW50IGNvbWVzIGZyb20gdGhlIHdheVxuICAgZm10dHlfcmVsIHdpdG5lc3NlcyBhcmUgcHJvZHVjZWQgYnkgdGhlIHR5cGUtY2hlY2tlclxuXG4gICBUaGUgY29kZSBiZWxvdyB1c2VzIChhc3NlcnQgZmFsc2UpIHdoZW4gdGhpcyBhc3N1bXB0aW9uIGlzIGJyb2tlbi4gVGhlXG4gICBjb2RlIHBhdHRlcm4gaXMgdGhlIGZvbGxvd2luZzpcblxuICAgICB8IEZvbyB4LCBGb28geSAtPlxuICAgICAgICgqIGNhc2Ugd2hlcmUgaW5kZWVkIGJvdGggdmFsdWVzXG4gICAgICAgICAgc3RhcnQgd2l0aCBjb25zdHJ1Y3RvciBGb28gKilcbiAgICAgfCBGb28gXywgX1xuICAgICB8IF8sIEZvbyBfIC0+XG4gICAgICAgKCogZGlmZmVyZW50IGhlYWQgY29uc3RydWN0b3JzOiBicm9rZW4gcHJlY29uZGl0aW9uICopXG4gICAgICAgYXNzZXJ0IGZhbHNlXG4qKVxuYW5kIHRyYW5zIDogdHlwZVxuICBhMSBiMSBjMSBkMSBlMSBmMVxuICBhMiBiMiBjMiBkMiBlMiBmMlxuICBhMyBiMyBjMyBkMyBlMyBmM1xuLlxuICAgKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEsXG4gICAgYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10dHlfcmVsXG4tPiAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMixcbiAgICBhMywgYjMsIGMzLCBkMywgZTMsIGYzKSBmbXR0eV9yZWxcbi0+IChhMSwgYjEsIGMxLCBkMSwgZTEsIGYxLFxuICAgIGEzLCBiMywgYzMsIGQzLCBlMywgZjMpIGZtdHR5X3JlbFxuPSBmdW4gdHkxIHR5MiAtPiBtYXRjaCB0eTEsIHR5MiB3aXRoXG4gIHwgQ2hhcl90eSByZXN0MSwgQ2hhcl90eSByZXN0MiAtPiBDaGFyX3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBTdHJpbmdfdHkgcmVzdDEsIFN0cmluZ190eSByZXN0MiAtPiBTdHJpbmdfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IEJvb2xfdHkgcmVzdDEsIEJvb2xfdHkgcmVzdDIgLT4gQm9vbF90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgSW50X3R5IHJlc3QxLCBJbnRfdHkgcmVzdDIgLT4gSW50X3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBJbnQzMl90eSByZXN0MSwgSW50MzJfdHkgcmVzdDIgLT4gSW50MzJfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IEludDY0X3R5IHJlc3QxLCBJbnQ2NF90eSByZXN0MiAtPiBJbnQ2NF90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgTmF0aXZlaW50X3R5IHJlc3QxLCBOYXRpdmVpbnRfdHkgcmVzdDIgLT4gTmF0aXZlaW50X3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBGbG9hdF90eSByZXN0MSwgRmxvYXRfdHkgcmVzdDIgLT4gRmxvYXRfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuXG4gIHwgQWxwaGFfdHkgcmVzdDEsIEFscGhhX3R5IHJlc3QyIC0+IEFscGhhX3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBBbHBoYV90eSBfLCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IF8sIEFscGhhX3R5IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgfCBUaGV0YV90eSByZXN0MSwgVGhldGFfdHkgcmVzdDIgLT4gVGhldGFfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IFRoZXRhX3R5IF8sIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgXywgVGhldGFfdHkgXyAtPiBhc3NlcnQgZmFsc2VcblxuICB8IEFueV90eSByZXN0MSwgQW55X3R5IHJlc3QyIC0+IEFueV90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgQW55X3R5IF8sIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgXywgQW55X3R5IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgfCBSZWFkZXJfdHkgcmVzdDEsIFJlYWRlcl90eSByZXN0MiAtPiBSZWFkZXJfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IFJlYWRlcl90eSBfLCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IF8sIFJlYWRlcl90eSBfIC0+IGFzc2VydCBmYWxzZVxuXG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgcmVzdDEsIElnbm9yZWRfcmVhZGVyX3R5IHJlc3QyIC0+XG4gICAgSWdub3JlZF9yZWFkZXJfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IElnbm9yZWRfcmVhZGVyX3R5IF8sIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgXywgSWdub3JlZF9yZWFkZXJfdHkgXyAtPiBhc3NlcnQgZmFsc2VcblxuICB8IEZvcm1hdF9hcmdfdHkgKHR5MSwgcmVzdDEpLCBGb3JtYXRfYXJnX3R5ICh0eTIsIHJlc3QyKSAtPlxuICAgIEZvcm1hdF9hcmdfdHkgKHRyYW5zIHR5MSB0eTIsIHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IEZvcm1hdF9hcmdfdHkgXywgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBfLCBGb3JtYXRfYXJnX3R5IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgfCBGb3JtYXRfc3Vic3RfdHkgKHR5MTEsIHR5MTIsIHJlc3QxKSxcbiAgICBGb3JtYXRfc3Vic3RfdHkgKHR5MjEsIHR5MjIsIHJlc3QyKSAtPlxuICAgIGxldCB0eSA9IHRyYW5zIChzeW1tIHR5MTIpIHR5MjEgaW5cbiAgICBsZXQgXywgZjIsIF8sIGY0ID0gZm10dHlfcmVsX2RldCB0eSBpblxuICAgIGxldCBSZWZsID0gZjIgUmVmbCBpblxuICAgIGxldCBSZWZsID0gZjQgUmVmbCBpblxuICAgIEZvcm1hdF9zdWJzdF90eSAodHkxMSwgdHkyMiwgdHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgRm9ybWF0X3N1YnN0X3R5IF8sIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgXywgRm9ybWF0X3N1YnN0X3R5IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgfCBFbmRfb2ZfZm10dHksIEVuZF9vZl9mbXR0eSAtPiBFbmRfb2ZfZm10dHlcbiAgfCBFbmRfb2ZfZm10dHksIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgXywgRW5kX29mX2ZtdHR5IC0+IGFzc2VydCBmYWxzZVxuXG5sZXQgcmVjIGZtdHR5X29mX2Zvcm1hdHRpbmdfZ2VuIDogdHlwZSBhIGIgYyBkIGUgZiAuXG4gIChhLCBiLCBjLCBkLCBlLCBmKSBmb3JtYXR0aW5nX2dlbiAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSA9XG5mdW4gZm9ybWF0dGluZ19nZW4gLT4gbWF0Y2ggZm9ybWF0dGluZ19nZW4gd2l0aFxuICB8IE9wZW5fdGFnIChGb3JtYXQgKGZtdCwgXykpIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBPcGVuX2JveCAoRm9ybWF0IChmbXQsIF8pKSAtPiBmbXR0eV9vZl9mbXQgZm10XG5cbigqIEV4dHJhY3QgdGhlIHR5cGUgcmVwcmVzZW50YXRpb24gKGFuIGZtdHR5KSBvZiBhIGZvcm1hdC4gKilcbmFuZCBmbXR0eV9vZl9mbXQgOiB0eXBlIGEgYiBjIGQgZSBmIC5cbiAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgPVxuZnVuIGZtdHR5IC0+IG1hdGNoIGZtdHR5IHdpdGhcbiAgfCBTdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IHBhZCAoU3RyaW5nX3R5IChmbXR0eV9vZl9mbXQgcmVzdCkpXG4gIHwgQ2FtbF9zdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IHBhZCAoU3RyaW5nX3R5IChmbXR0eV9vZl9mbXQgcmVzdCkpXG5cbiAgfCBJbnQgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBsZXQgdHlfcmVzdCA9IGZtdHR5X29mX2ZtdCByZXN0IGluXG4gICAgbGV0IHByZWNfdHkgPSBmbXR0eV9vZl9wcmVjaXNpb25fZm10dHkgcHJlYyAoSW50X3R5IHR5X3Jlc3QpIGluXG4gICAgZm10dHlfb2ZfcGFkZGluZ19mbXR0eSBwYWQgcHJlY190eVxuICB8IEludDMyIChfLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbGV0IHR5X3Jlc3QgPSBmbXR0eV9vZl9mbXQgcmVzdCBpblxuICAgIGxldCBwcmVjX3R5ID0gZm10dHlfb2ZfcHJlY2lzaW9uX2ZtdHR5IHByZWMgKEludDMyX3R5IHR5X3Jlc3QpIGluXG4gICAgZm10dHlfb2ZfcGFkZGluZ19mbXR0eSBwYWQgcHJlY190eVxuICB8IE5hdGl2ZWludCAoXywgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIGxldCB0eV9yZXN0ID0gZm10dHlfb2ZfZm10IHJlc3QgaW5cbiAgICBsZXQgcHJlY190eSA9IGZtdHR5X29mX3ByZWNpc2lvbl9mbXR0eSBwcmVjIChOYXRpdmVpbnRfdHkgdHlfcmVzdCkgaW5cbiAgICBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IHBhZCBwcmVjX3R5XG4gIHwgSW50NjQgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBsZXQgdHlfcmVzdCA9IGZtdHR5X29mX2ZtdCByZXN0IGluXG4gICAgbGV0IHByZWNfdHkgPSBmbXR0eV9vZl9wcmVjaXNpb25fZm10dHkgcHJlYyAoSW50NjRfdHkgdHlfcmVzdCkgaW5cbiAgICBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IHBhZCBwcmVjX3R5XG4gIHwgRmxvYXQgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBsZXQgdHlfcmVzdCA9IGZtdHR5X29mX2ZtdCByZXN0IGluXG4gICAgbGV0IHByZWNfdHkgPSBmbXR0eV9vZl9wcmVjaXNpb25fZm10dHkgcHJlYyAoRmxvYXRfdHkgdHlfcmVzdCkgaW5cbiAgICBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IHBhZCBwcmVjX3R5XG5cbiAgfCBDaGFyIHJlc3QgICAgICAgICAgICAgICAgICAtPiBDaGFyX3R5IChmbXR0eV9vZl9mbXQgcmVzdClcbiAgfCBDYW1sX2NoYXIgcmVzdCAgICAgICAgICAgICAtPiBDaGFyX3R5IChmbXR0eV9vZl9mbXQgcmVzdClcbiAgfCBCb29sIChwYWQsIHJlc3QpICAgICAgICAgICAtPlxuICAgICAgZm10dHlfb2ZfcGFkZGluZ19mbXR0eSBwYWQgKEJvb2xfdHkgKGZtdHR5X29mX2ZtdCByZXN0KSlcbiAgfCBBbHBoYSByZXN0ICAgICAgICAgICAgICAgICAtPiBBbHBoYV90eSAoZm10dHlfb2ZfZm10IHJlc3QpXG4gIHwgVGhldGEgcmVzdCAgICAgICAgICAgICAgICAgLT4gVGhldGFfdHkgKGZtdHR5X29mX2ZtdCByZXN0KVxuICB8IEN1c3RvbSAoYXJpdHksIF8sIHJlc3QpICAgIC0+IGZtdHR5X29mX2N1c3RvbSBhcml0eSAoZm10dHlfb2ZfZm10IHJlc3QpXG4gIHwgUmVhZGVyIHJlc3QgICAgICAgICAgICAgICAgLT4gUmVhZGVyX3R5IChmbXR0eV9vZl9mbXQgcmVzdClcblxuICB8IEZvcm1hdF9hcmcgKF8sIHR5LCByZXN0KSAtPlxuICAgIEZvcm1hdF9hcmdfdHkgKHR5LCBmbXR0eV9vZl9mbXQgcmVzdClcbiAgfCBGb3JtYXRfc3Vic3QgKF8sIHR5LCByZXN0KSAtPlxuICAgIEZvcm1hdF9zdWJzdF90eSAodHksIHR5LCBmbXR0eV9vZl9mbXQgcmVzdClcblxuICB8IEZsdXNoIHJlc3QgICAgICAgICAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCByZXN0XG4gIHwgU3RyaW5nX2xpdGVyYWwgKF8sIHJlc3QpICAgLT4gZm10dHlfb2ZfZm10IHJlc3RcbiAgfCBDaGFyX2xpdGVyYWwgKF8sIHJlc3QpICAgICAtPiBmbXR0eV9vZl9mbXQgcmVzdFxuXG4gIHwgU2Nhbl9jaGFyX3NldCAoXywgXywgcmVzdCkgLT4gU3RyaW5nX3R5IChmbXR0eV9vZl9mbXQgcmVzdClcbiAgfCBTY2FuX2dldF9jb3VudGVyIChfLCByZXN0KSAtPiBJbnRfdHkgKGZtdHR5X29mX2ZtdCByZXN0KVxuICB8IFNjYW5fbmV4dF9jaGFyIHJlc3QgICAgICAgIC0+IENoYXJfdHkgKGZtdHR5X29mX2ZtdCByZXN0KVxuICB8IElnbm9yZWRfcGFyYW0gKGlnbiwgcmVzdCkgIC0+IGZtdHR5X29mX2lnbm9yZWRfZm9ybWF0IGlnbiByZXN0XG4gIHwgRm9ybWF0dGluZ19saXQgKF8sIHJlc3QpICAgLT4gZm10dHlfb2ZfZm10IHJlc3RcbiAgfCBGb3JtYXR0aW5nX2dlbiAoZm10aW5nX2dlbiwgcmVzdCkgIC0+XG4gICAgY29uY2F0X2ZtdHR5IChmbXR0eV9vZl9mb3JtYXR0aW5nX2dlbiBmbXRpbmdfZ2VuKSAoZm10dHlfb2ZfZm10IHJlc3QpXG5cbiAgfCBFbmRfb2ZfZm9ybWF0ICAgICAgICAgICAgICAtPiBFbmRfb2ZfZm10dHlcblxuYW5kIGZtdHR5X29mX2N1c3RvbSA6IHR5cGUgeCB5IGEgYiBjIGQgZSBmIC5cbiAgKGEsIHgsIHkpIGN1c3RvbV9hcml0eSAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgLT5cbiAgKHksIGIsIGMsIGQsIGUsIGYpIGZtdHR5ID1cbmZ1biBhcml0eSBmbXR0eSAtPiBtYXRjaCBhcml0eSB3aXRoXG4gIHwgQ3VzdG9tX3plcm8gLT4gZm10dHlcbiAgfCBDdXN0b21fc3VjYyBhcml0eSAtPiBBbnlfdHkgKGZtdHR5X29mX2N1c3RvbSBhcml0eSBmbXR0eSlcblxuKCogRXh0cmFjdCB0aGUgZm10dHkgb2YgYW4gaWdub3JlZCBwYXJhbWV0ZXIgZm9sbG93ZWQgYnkgdGhlIHJlc3Qgb2ZcbiAgIHRoZSBmb3JtYXQuICopXG5hbmQgZm10dHlfb2ZfaWdub3JlZF9mb3JtYXQgOiB0eXBlIHggeSBhIGIgYyBkIGUgZiAuXG4gICAgKGEsIGIsIGMsIGQsIHksIHgpIGlnbm9yZWQgLT5cbiAgICAoeCwgYiwgYywgeSwgZSwgZikgZm10IC0+XG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5ID1cbmZ1biBpZ24gZm10IC0+IG1hdGNoIGlnbiB3aXRoXG4gIHwgSWdub3JlZF9jaGFyICAgICAgICAgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9jYW1sX2NoYXIgICAgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9zdHJpbmcgXyAgICAgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9jYW1sX3N0cmluZyBfICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9pbnQgKF8sIF8pICAgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9pbnQzMiAoXywgXykgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9uYXRpdmVpbnQgKF8sIF8pICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9pbnQ2NCAoXywgXykgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9mbG9hdCAoXywgXykgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9ib29sIF8gICAgICAgICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9mb3JtYXRfYXJnIF8gICAgICAgICAgICAtPiBmbXR0eV9vZl9mbXQgZm10XG4gIHwgSWdub3JlZF9mb3JtYXRfc3Vic3QgKF8sIGZtdHR5KSAtPiBjb25jYXRfZm10dHkgZm10dHkgKGZtdHR5X29mX2ZtdCBmbXQpXG4gIHwgSWdub3JlZF9yZWFkZXIgICAgICAgICAgICAgICAgICAtPiBJZ25vcmVkX3JlYWRlcl90eSAoZm10dHlfb2ZfZm10IGZtdClcbiAgfCBJZ25vcmVkX3NjYW5fY2hhcl9zZXQgXyAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBJZ25vcmVkX3NjYW5fZ2V0X2NvdW50ZXIgXyAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBJZ25vcmVkX3NjYW5fbmV4dF9jaGFyICAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcblxuKCogQWRkIGFuIEludF90eSBub2RlIGlmIHBhZGRpbmcgaXMgdGFrZW4gYXMgYW4gZXh0cmEgYXJndW1lbnQgKGV4OiBcIiUqc1wiKS4gKilcbmFuZCBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IDogdHlwZSB4IGEgYiBjIGQgZSBmIC5cbiAgICAoeCwgYSkgcGFkZGluZyAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgLT4gKHgsIGIsIGMsIGQsIGUsIGYpIGZtdHR5ID1cbiAgZnVuIHBhZCBmbXR0eSAtPiBtYXRjaCBwYWQgd2l0aFxuICAgIHwgTm9fcGFkZGluZyAgICAtPiBmbXR0eVxuICAgIHwgTGl0X3BhZGRpbmcgXyAtPiBmbXR0eVxuICAgIHwgQXJnX3BhZGRpbmcgXyAtPiBJbnRfdHkgZm10dHlcblxuKCogQWRkIGFuIEludF90eSBub2RlIGlmIHByZWNpc2lvbiBpcyB0YWtlbiBhcyBhbiBleHRyYSBhcmd1bWVudCAoZXg6IFwiJS4qZlwiKS4qKVxuYW5kIGZtdHR5X29mX3ByZWNpc2lvbl9mbXR0eSA6IHR5cGUgeCBhIGIgYyBkIGUgZiAuXG4gICAgKHgsIGEpIHByZWNpc2lvbiAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgLT4gKHgsIGIsIGMsIGQsIGUsIGYpIGZtdHR5ID1cbiAgZnVuIHByZWMgZm10dHkgLT4gbWF0Y2ggcHJlYyB3aXRoXG4gICAgfCBOb19wcmVjaXNpb24gICAgLT4gZm10dHlcbiAgICB8IExpdF9wcmVjaXNpb24gXyAtPiBmbXR0eVxuICAgIHwgQXJnX3ByZWNpc2lvbiAgIC0+IEludF90eSBmbXR0eVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEZvcm1hdCB0eXBpbmcgKilcblxuKCogRXhjZXB0aW9uIHJhaXNlZCB3aGVuIGEgZm9ybWF0IGRvZXMgbm90IG1hdGNoIGEgZ2l2ZW4gZm9ybWF0IHR5cGUuICopXG5leGNlcHRpb24gVHlwZV9taXNtYXRjaFxuXG4oKiBUeXBlIGEgcGFkZGluZy4gKilcbigqIFRha2UgYW4gSW50X3R5IGZyb20gdGhlIGZtdHR5IGlmIHRoZSBpbnRlZ2VyIHNob3VsZCBiZSBrZXB0IGFzIGFyZ3VtZW50LiAqKVxuKCogUmFpc2UgVHlwZV9taXNtYXRjaCBpbiBjYXNlIG9mIHR5cGUgbWlzbWF0Y2guICopXG5sZXQgdHlwZV9wYWRkaW5nIDogdHlwZSBhIGIgYyBkIGUgZiB4IHkgLlxuICAgICh4LCB5KSBwYWRkaW5nIC0+IChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSAtPlxuICAgICAgKGEsIGIsIGMsIGQsIGUsIGYpIHBhZGRpbmdfZm10dHlfZWJiID1cbmZ1biBwYWQgZm10dHkgLT4gbWF0Y2ggcGFkLCBmbXR0eSB3aXRoXG4gIHwgTm9fcGFkZGluZywgXyAtPiBQYWRkaW5nX2ZtdHR5X0VCQiAoTm9fcGFkZGluZywgZm10dHkpXG4gIHwgTGl0X3BhZGRpbmcgKHBhZHR5LCB3KSwgXyAtPiBQYWRkaW5nX2ZtdHR5X0VCQiAoTGl0X3BhZGRpbmcgKHBhZHR5LHcpLGZtdHR5KVxuICB8IEFyZ19wYWRkaW5nIHBhZHR5LCBJbnRfdHkgcmVzdCAtPiBQYWRkaW5nX2ZtdHR5X0VCQiAoQXJnX3BhZGRpbmcgcGFkdHkscmVzdClcbiAgfCBfIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcblxuKCogQ29udmVydCBhICh1cGFkZGluZywgdXByZWNpc2lvbikgdG8gYSAocGFkZGluZywgcHJlY2lzaW9uKS4gKilcbigqIFRha2Ugb25lIG9yIHR3byBJbnRfdHkgZnJvbSB0aGUgZm10dHkgaWYgbmVlZGVkLiAqKVxuKCogUmFpc2UgVHlwZV9taXNtYXRjaCBpbiBjYXNlIG9mIHR5cGUgbWlzbWF0Y2guICopXG5sZXQgdHlwZV9wYWRwcmVjIDogdHlwZSBhIGIgYyBkIGUgZiB4IHkgeiAuXG4gICh4LCB5KSBwYWRkaW5nIC0+ICh5LCB6KSBwcmVjaXNpb24gLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5IC0+XG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIHBhZHByZWNfZm10dHlfZWJiID1cbmZ1biBwYWQgcHJlYyBmbXR0eSAtPiBtYXRjaCBwcmVjLCB0eXBlX3BhZGRpbmcgcGFkIGZtdHR5IHdpdGhcbiAgfCBOb19wcmVjaXNpb24sIFBhZGRpbmdfZm10dHlfRUJCIChwYWQsIHJlc3QpIC0+XG4gICAgUGFkcHJlY19mbXR0eV9FQkIgKHBhZCwgTm9fcHJlY2lzaW9uLCByZXN0KVxuICB8IExpdF9wcmVjaXNpb24gcCwgUGFkZGluZ19mbXR0eV9FQkIgKHBhZCwgcmVzdCkgLT5cbiAgICBQYWRwcmVjX2ZtdHR5X0VCQiAocGFkLCBMaXRfcHJlY2lzaW9uIHAsIHJlc3QpXG4gIHwgQXJnX3ByZWNpc2lvbiwgUGFkZGluZ19mbXR0eV9FQkIgKHBhZCwgSW50X3R5IHJlc3QpIC0+XG4gICAgUGFkcHJlY19mbXR0eV9FQkIgKHBhZCwgQXJnX3ByZWNpc2lvbiwgcmVzdClcbiAgfCBfLCBQYWRkaW5nX2ZtdHR5X0VCQiAoXywgXykgLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuXG4oKiBUeXBlIGEgZm9ybWF0IGFjY29yZGluZyB0byBhbiBmbXR0eS4gKilcbigqIElmIHR5cGluZyBzdWNjZWVkLCBnZW5lcmF0ZSBhIGNvcHkgb2YgdGhlIGZvcm1hdCB3aXRoIHRoZSBzYW1lXG4gICAgdHlwZSBwYXJhbWV0ZXJzIGFzIHRoZSBmbXR0eS4gKilcbigqIFJhaXNlIFtGYWlsdXJlXSB3aXRoIGFuIGVycm9yIG1lc3NhZ2UgaW4gY2FzZSBvZiB0eXBlIG1pc21hdGNoLiAqKVxubGV0IHJlYyB0eXBlX2Zvcm1hdCA6XG4gIHR5cGUgYTEgYjEgYzEgZDEgZTEgZjFcbiAgICAgICBhMiBiMiBjMiBkMiBlMiBmMiAgLlxuICAgICAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSkgZm10XG4gIC0+IChhMiwgYjIsIGMyLCBkMiwgZTIsIGYyKSBmbXR0eVxuICAtPiAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10XG49IGZ1biBmbXQgZm10dHkgLT4gbWF0Y2ggdHlwZV9mb3JtYXRfZ2VuIGZtdCBmbXR0eSB3aXRoXG4gIHwgRm10X2ZtdHR5X0VCQiAoZm10JywgRW5kX29mX2ZtdHR5KSAtPiBmbXQnXG4gIHwgXyAtPiByYWlzZSBUeXBlX21pc21hdGNoXG5cbmFuZCB0eXBlX2Zvcm1hdF9nZW4gOlxuICB0eXBlIGExIGIxIGMxIGQxIGUxIGYxXG4gICAgICAgYTIgYjIgYzIgZDIgZTIgZjIgIC5cbiAgICAgKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEpIGZtdFxuICAtPiAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10dHlcbiAgLT4gKGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdF9mbXR0eV9lYmJcbj0gZnVuIGZtdCBmbXR0eSAtPiBtYXRjaCBmbXQsIGZtdHR5IHdpdGhcbiAgfCBDaGFyIGZtdF9yZXN0LCBDaGFyX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoQ2hhciBmbXQnLCBmbXR0eScpXG4gIHwgQ2FtbF9jaGFyIGZtdF9yZXN0LCBDaGFyX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoQ2FtbF9jaGFyIGZtdCcsIGZtdHR5JylcbiAgfCBTdHJpbmcgKHBhZCwgZm10X3Jlc3QpLCBfIC0+IChcbiAgICBtYXRjaCB0eXBlX3BhZGRpbmcgcGFkIGZtdHR5IHdpdGhcbiAgICB8IFBhZGRpbmdfZm10dHlfRUJCIChwYWQsIFN0cmluZ190eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoU3RyaW5nIChwYWQsIGZtdCcpLCBmbXR0eScpXG4gICAgfCBQYWRkaW5nX2ZtdHR5X0VCQiAoXywgXykgLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuICApXG4gIHwgQ2FtbF9zdHJpbmcgKHBhZCwgZm10X3Jlc3QpLCBfIC0+IChcbiAgICBtYXRjaCB0eXBlX3BhZGRpbmcgcGFkIGZtdHR5IHdpdGhcbiAgICB8IFBhZGRpbmdfZm10dHlfRUJCIChwYWQsIFN0cmluZ190eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoQ2FtbF9zdHJpbmcgKHBhZCwgZm10JyksIGZtdHR5JylcbiAgICB8IFBhZGRpbmdfZm10dHlfRUJCIChfLCBfKSAtPiByYWlzZSBUeXBlX21pc21hdGNoXG4gIClcbiAgfCBJbnQgKGljb252LCBwYWQsIHByZWMsIGZtdF9yZXN0KSwgXyAtPiAoXG4gICAgbWF0Y2ggdHlwZV9wYWRwcmVjIHBhZCBwcmVjIGZtdHR5IHdpdGhcbiAgICB8IFBhZHByZWNfZm10dHlfRUJCIChwYWQsIHByZWMsIEludF90eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoSW50IChpY29udiwgcGFkLCBwcmVjLCBmbXQnKSwgZm10dHknKVxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKF8sIF8sIF8pIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcbiAgKVxuICB8IEludDMyIChpY29udiwgcGFkLCBwcmVjLCBmbXRfcmVzdCksIF8gLT4gKFxuICAgIG1hdGNoIHR5cGVfcGFkcHJlYyBwYWQgcHJlYyBmbXR0eSB3aXRoXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAocGFkLCBwcmVjLCBJbnQzMl90eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoSW50MzIgKGljb252LCBwYWQsIHByZWMsIGZtdCcpLCBmbXR0eScpXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAoXywgXywgXykgLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuICApXG4gIHwgTmF0aXZlaW50IChpY29udiwgcGFkLCBwcmVjLCBmbXRfcmVzdCksIF8gLT4gKFxuICAgIG1hdGNoIHR5cGVfcGFkcHJlYyBwYWQgcHJlYyBmbXR0eSB3aXRoXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAocGFkLCBwcmVjLCBOYXRpdmVpbnRfdHkgZm10dHlfcmVzdCkgLT5cbiAgICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICAgIEZtdF9mbXR0eV9FQkIgKE5hdGl2ZWludCAoaWNvbnYsIHBhZCwgcHJlYywgZm10JyksIGZtdHR5JylcbiAgICB8IFBhZHByZWNfZm10dHlfRUJCIChfLCBfLCBfKSAtPiByYWlzZSBUeXBlX21pc21hdGNoXG4gIClcbiAgfCBJbnQ2NCAoaWNvbnYsIHBhZCwgcHJlYywgZm10X3Jlc3QpLCBfIC0+IChcbiAgICBtYXRjaCB0eXBlX3BhZHByZWMgcGFkIHByZWMgZm10dHkgd2l0aFxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKHBhZCwgcHJlYywgSW50NjRfdHkgZm10dHlfcmVzdCkgLT5cbiAgICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICAgIEZtdF9mbXR0eV9FQkIgKEludDY0IChpY29udiwgcGFkLCBwcmVjLCBmbXQnKSwgZm10dHknKVxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKF8sIF8sIF8pIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcbiAgKVxuICB8IEZsb2F0IChmY29udiwgcGFkLCBwcmVjLCBmbXRfcmVzdCksIF8gLT4gKFxuICAgIG1hdGNoIHR5cGVfcGFkcHJlYyBwYWQgcHJlYyBmbXR0eSB3aXRoXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAocGFkLCBwcmVjLCBGbG9hdF90eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoRmxvYXQgKGZjb252LCBwYWQsIHByZWMsIGZtdCcpLCBmbXR0eScpXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAoXywgXywgXykgLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuICApXG4gIHwgQm9vbCAocGFkLCBmbXRfcmVzdCksIF8gLT4gKFxuICAgIG1hdGNoIHR5cGVfcGFkZGluZyBwYWQgZm10dHkgd2l0aFxuICAgIHwgUGFkZGluZ19mbXR0eV9FQkIgKHBhZCwgQm9vbF90eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoQm9vbCAocGFkLCBmbXQnKSwgZm10dHknKVxuICAgIHwgUGFkZGluZ19mbXR0eV9FQkIgKF8sIF8pIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcbiAgKVxuICB8IEZsdXNoIGZtdF9yZXN0LCBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKEZsdXNoIGZtdCcsIGZtdHR5JylcblxuICB8IFN0cmluZ19saXRlcmFsIChzdHIsIGZtdF9yZXN0KSwgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChTdHJpbmdfbGl0ZXJhbCAoc3RyLCBmbXQnKSwgZm10dHknKVxuICB8IENoYXJfbGl0ZXJhbCAoY2hyLCBmbXRfcmVzdCksIGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoQ2hhcl9saXRlcmFsIChjaHIsIGZtdCcpLCBmbXR0eScpXG5cbiAgfCBGb3JtYXRfYXJnIChwYWRfb3B0LCBzdWJfZm10dHksIGZtdF9yZXN0KSxcbiAgICBGb3JtYXRfYXJnX3R5IChzdWJfZm10dHknLCBmbXR0eV9yZXN0KSAtPlxuICAgIGlmIEZtdHR5X0VCQiBzdWJfZm10dHkgPD4gRm10dHlfRUJCIHN1Yl9mbXR0eScgdGhlbiByYWlzZSBUeXBlX21pc21hdGNoO1xuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChGb3JtYXRfYXJnIChwYWRfb3B0LCBzdWJfZm10dHknLCBmbXQnKSwgZm10dHknKVxuICB8IEZvcm1hdF9zdWJzdCAocGFkX29wdCwgc3ViX2ZtdHR5LCBmbXRfcmVzdCksXG4gICAgRm9ybWF0X3N1YnN0X3R5IChzdWJfZm10dHkxLCBfc3ViX2ZtdHR5MiwgZm10dHlfcmVzdCkgLT5cbiAgICBpZiBGbXR0eV9FQkIgKGVyYXNlX3JlbCBzdWJfZm10dHkpIDw+IEZtdHR5X0VCQiAoZXJhc2VfcmVsIHN1Yl9mbXR0eTEpIHRoZW5cbiAgICAgIHJhaXNlIFR5cGVfbWlzbWF0Y2g7XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPVxuICAgICAgdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IChlcmFzZV9yZWwgZm10dHlfcmVzdClcbiAgICBpblxuICAgIEZtdF9mbXR0eV9FQkIgKEZvcm1hdF9zdWJzdCAocGFkX29wdCwgc3ViX2ZtdHR5MSwgZm10JyksIGZtdHR5JylcbiAgKCogUHJpbnRmIGFuZCBGb3JtYXQgc3BlY2lmaWMgY29uc3RydWN0b3JzOiAqKVxuICB8IEFscGhhIGZtdF9yZXN0LCBBbHBoYV90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKEFscGhhIGZtdCcsIGZtdHR5JylcbiAgfCBUaGV0YSBmbXRfcmVzdCwgVGhldGFfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChUaGV0YSBmbXQnLCBmbXR0eScpXG5cbiAgKCogRm9ybWF0IHNwZWNpZmljIGNvbnN0cnVjdG9yczogKilcbiAgfCBGb3JtYXR0aW5nX2xpdCAoZm9ybWF0dGluZ19saXQsIGZtdF9yZXN0KSwgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChGb3JtYXR0aW5nX2xpdCAoZm9ybWF0dGluZ19saXQsIGZtdCcpLCBmbXR0eScpXG4gIHwgRm9ybWF0dGluZ19nZW4gKGZvcm1hdHRpbmdfZ2VuLCBmbXRfcmVzdCksIGZtdHR5X3Jlc3QgLT5cbiAgICB0eXBlX2Zvcm1hdHRpbmdfZ2VuIGZvcm1hdHRpbmdfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3RcblxuICAoKiBTY2FuZiBzcGVjaWZpYyBjb25zdHJ1Y3RvcnM6ICopXG4gIHwgUmVhZGVyIGZtdF9yZXN0LCBSZWFkZXJfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChSZWFkZXIgZm10JywgZm10dHknKVxuICB8IFNjYW5fY2hhcl9zZXQgKHdpZHRoX29wdCwgY2hhcl9zZXQsIGZtdF9yZXN0KSwgU3RyaW5nX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoU2Nhbl9jaGFyX3NldCAod2lkdGhfb3B0LCBjaGFyX3NldCwgZm10JyksIGZtdHR5JylcbiAgfCBTY2FuX2dldF9jb3VudGVyIChjb3VudGVyLCBmbXRfcmVzdCksIEludF90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKFNjYW5fZ2V0X2NvdW50ZXIgKGNvdW50ZXIsIGZtdCcpLCBmbXR0eScpXG4gIHwgSWdub3JlZF9wYXJhbSAoaWduLCByZXN0KSwgZm10dHlfcmVzdCAtPlxuICAgIHR5cGVfaWdub3JlZF9wYXJhbSBpZ24gcmVzdCBmbXR0eV9yZXN0XG5cbiAgfCBFbmRfb2ZfZm9ybWF0LCBmbXR0eV9yZXN0IC0+IEZtdF9mbXR0eV9FQkIgKEVuZF9vZl9mb3JtYXQsIGZtdHR5X3Jlc3QpXG5cbiAgfCBfIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcblxuYW5kIHR5cGVfZm9ybWF0dGluZ19nZW4gOiB0eXBlIGExIGEzIGIxIGIzIGMxIGMzIGQxIGQzIGUxIGUyIGUzIGYxIGYyIGYzIC5cbiAgICAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSkgZm9ybWF0dGluZ19nZW4gLT5cbiAgICAoZjEsIGIxLCBjMSwgZTEsIGUyLCBmMikgZm10IC0+XG4gICAgKGEzLCBiMywgYzMsIGQzLCBlMywgZjMpIGZtdHR5IC0+XG4gICAgKGEzLCBiMywgYzMsIGQzLCBlMywgZjMpIGZtdF9mbXR0eV9lYmIgPVxuZnVuIGZvcm1hdHRpbmdfZ2VuIGZtdDAgZm10dHkwIC0+IG1hdGNoIGZvcm1hdHRpbmdfZ2VuIHdpdGhcbiAgfCBPcGVuX3RhZyAoRm9ybWF0IChmbXQxLCBzdHIpKSAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQyLCBmbXR0eTIpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdDEgZm10dHkwIGluXG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdDMsIGZtdHR5MykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10MCBmbXR0eTIgaW5cbiAgICBGbXRfZm10dHlfRUJCIChGb3JtYXR0aW5nX2dlbiAoT3Blbl90YWcgKEZvcm1hdCAoZm10Miwgc3RyKSksIGZtdDMpLCBmbXR0eTMpXG4gIHwgT3Blbl9ib3ggKEZvcm1hdCAoZm10MSwgc3RyKSkgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10MiwgZm10dHkyKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXQxIGZtdHR5MCBpblxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQzLCBmbXR0eTMpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdDAgZm10dHkyIGluXG4gICAgRm10X2ZtdHR5X0VCQiAoRm9ybWF0dGluZ19nZW4gKE9wZW5fYm94IChGb3JtYXQgKGZtdDIsIHN0cikpLCBmbXQzKSwgZm10dHkzKVxuXG4oKiBUeXBlIGFuIElnbm9yZWRfcGFyYW0gbm9kZSBhY2NvcmRpbmcgdG8gYW4gZm10dHkuICopXG5hbmQgdHlwZV9pZ25vcmVkX3BhcmFtIDogdHlwZSBwIHEgeCB5IHogdCB1IHYgYSBiIGMgZCBlIGYgLlxuICAgICh4LCB5LCB6LCB0LCBxLCBwKSBpZ25vcmVkIC0+XG4gICAgKHAsIHksIHosIHEsIHUsIHYpIGZtdCAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXRfZm10dHlfZWJiID1cbmZ1biBpZ24gZm10IGZtdHR5IC0+IG1hdGNoIGlnbiB3aXRoXG4gIHwgSWdub3JlZF9jaGFyICAgICAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9jYW1sX2NoYXIgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9zdHJpbmcgXyAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9jYW1sX3N0cmluZyBfICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9pbnQgXyAgICAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9pbnQzMiBfICAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9uYXRpdmVpbnQgXyAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9pbnQ2NCBfICAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9mbG9hdCBfICAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9ib29sIF8gICAgICAgICAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9zY2FuX2NoYXJfc2V0IF8gICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9zY2FuX2dldF9jb3VudGVyIF8gYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9zY2FuX25leHRfY2hhciAgICAgYXMgaWduJyAtPiB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIGlnbicgZm10IGZtdHR5XG4gIHwgSWdub3JlZF9mb3JtYXRfYXJnIChwYWRfb3B0LCBzdWJfZm10dHkpIC0+XG4gICAgdHlwZV9pZ25vcmVkX3BhcmFtX29uZSAoSWdub3JlZF9mb3JtYXRfYXJnIChwYWRfb3B0LCBzdWJfZm10dHkpKSBmbXQgZm10dHlcbiAgfCBJZ25vcmVkX2Zvcm1hdF9zdWJzdCAocGFkX29wdCwgc3ViX2ZtdHR5KSAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHknLCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHkgZm10IGZtdHR5IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoSWdub3JlZF9wYXJhbSAoSWdub3JlZF9mb3JtYXRfc3Vic3QgKHBhZF9vcHQsIHN1Yl9mbXR0eScpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZtdCcpLFxuICAgICAgICAgICAgICAgICAgIGZtdHR5JylcbiAgfCBJZ25vcmVkX3JlYWRlciAtPiAoXG4gICAgbWF0Y2ggZm10dHkgd2l0aFxuICAgIHwgSWdub3JlZF9yZWFkZXJfdHkgZm10dHlfcmVzdCAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10IGZtdHR5X3Jlc3QgaW5cbiAgICAgIEZtdF9mbXR0eV9FQkIgKElnbm9yZWRfcGFyYW0gKElnbm9yZWRfcmVhZGVyLCBmbXQnKSwgZm10dHknKVxuICAgIHwgXyAtPiByYWlzZSBUeXBlX21pc21hdGNoXG4gIClcblxuYW5kIHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgOiB0eXBlIGExIGEyIGIxIGIyIGMxIGMyIGQxIGQyIGUxIGUyIGYxIGYyIC5cbiAgICAoYTIsIGIyLCBjMiwgZDIsIGQyLCBhMikgaWdub3JlZCAtPlxuICAgIChhMSwgYjEsIGMxLCBkMSwgZTEsIGYxKSBmbXQgLT5cbiAgICAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10dHkgLT5cbiAgICAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10X2ZtdHR5X2ViYlxuPSBmdW4gaWduIGZtdCBmbXR0eSAtPlxuICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXQgZm10dHkgaW5cbiAgRm10X2ZtdHR5X0VCQiAoSWdub3JlZF9wYXJhbSAoaWduLCBmbXQnKSwgZm10dHknKVxuXG4oKiBUeXBpbmcgb2YgdGhlIGNvbXBsZXggY2FzZTogXCIlXyguLi4lKVwiLiAqKVxuYW5kIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIDogdHlwZSB3IHggeSB6IHAgcyB0IHUgYSBiIGMgZCBlIGYgLlxuICAgICh3LCB4LCB5LCB6LCBzLCBwKSBmbXR0eSAtPlxuICAgIChwLCB4LCB5LCBzLCB0LCB1KSBmbXQgLT5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5X2ZtdF9lYmIgPVxuZnVuIHN1Yl9mbXR0eSBmbXQgZm10dHkgLT4gbWF0Y2ggc3ViX2ZtdHR5LCBmbXR0eSB3aXRoXG4gIHwgQ2hhcl90eSBzdWJfZm10dHlfcmVzdCwgQ2hhcl90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChDaGFyX3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBTdHJpbmdfdHkgc3ViX2ZtdHR5X3Jlc3QsIFN0cmluZ190eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChTdHJpbmdfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IEludF90eSBzdWJfZm10dHlfcmVzdCwgSW50X3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKEludF90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgSW50MzJfdHkgc3ViX2ZtdHR5X3Jlc3QsIEludDMyX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKEludDMyX3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBOYXRpdmVpbnRfdHkgc3ViX2ZtdHR5X3Jlc3QsIE5hdGl2ZWludF90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChOYXRpdmVpbnRfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IEludDY0X3R5IHN1Yl9mbXR0eV9yZXN0LCBJbnQ2NF90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChJbnQ2NF90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgRmxvYXRfdHkgc3ViX2ZtdHR5X3Jlc3QsIEZsb2F0X3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKEZsb2F0X3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBCb29sX3R5IHN1Yl9mbXR0eV9yZXN0LCBCb29sX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKEJvb2xfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IEFscGhhX3R5IHN1Yl9mbXR0eV9yZXN0LCBBbHBoYV90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChBbHBoYV90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgVGhldGFfdHkgc3ViX2ZtdHR5X3Jlc3QsIFRoZXRhX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKFRoZXRhX3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBSZWFkZXJfdHkgc3ViX2ZtdHR5X3Jlc3QsIFJlYWRlcl90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChSZWFkZXJfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IElnbm9yZWRfcmVhZGVyX3R5IHN1Yl9mbXR0eV9yZXN0LCBJZ25vcmVkX3JlYWRlcl90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eV9yZXN0JywgZm10JykgPVxuICAgICAgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gc3ViX2ZtdHR5X3Jlc3QgZm10IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChJZ25vcmVkX3JlYWRlcl90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG5cbiAgfCBGb3JtYXRfYXJnX3R5IChzdWIyX2ZtdHR5LCBzdWJfZm10dHlfcmVzdCksXG4gICAgRm9ybWF0X2FyZ190eSAoc3ViMl9mbXR0eScsIGZtdHR5X3Jlc3QpIC0+XG4gICAgaWYgRm10dHlfRUJCIHN1YjJfZm10dHkgPD4gRm10dHlfRUJCIHN1YjJfZm10dHknIHRoZW4gcmFpc2UgVHlwZV9taXNtYXRjaDtcbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKEZvcm1hdF9hcmdfdHkgKHN1YjJfZm10dHknLCBzdWJfZm10dHlfcmVzdCcpLCBmbXQnKVxuICB8IEZvcm1hdF9zdWJzdF90eSAoc3ViMV9mbXR0eSwgIHN1YjJfZm10dHksICBzdWJfZm10dHlfcmVzdCksXG4gICAgRm9ybWF0X3N1YnN0X3R5IChzdWIxX2ZtdHR5Jywgc3ViMl9mbXR0eScsIGZtdHR5X3Jlc3QpIC0+XG4gICAgKCogVE9ETyBkZWZpbmUgRm10dHlfcmVsX0VCQiB0byByZW1vdmUgdGhvc2UgZXJhc2VfcmVsICopXG4gICAgaWYgRm10dHlfRUJCIChlcmFzZV9yZWwgc3ViMV9mbXR0eSkgPD4gRm10dHlfRUJCIChlcmFzZV9yZWwgc3ViMV9mbXR0eScpXG4gICAgdGhlbiByYWlzZSBUeXBlX21pc21hdGNoO1xuICAgIGlmIEZtdHR5X0VCQiAoZXJhc2VfcmVsIHN1YjJfZm10dHkpIDw+IEZtdHR5X0VCQiAoZXJhc2VfcmVsIHN1YjJfZm10dHknKVxuICAgIHRoZW4gcmFpc2UgVHlwZV9taXNtYXRjaDtcbiAgICBsZXQgc3ViX2ZtdHR5JyA9IHRyYW5zIChzeW1tIHN1YjFfZm10dHknKSBzdWIyX2ZtdHR5JyBpblxuICAgIGxldCBfLCBmMiwgXywgZjQgPSBmbXR0eV9yZWxfZGV0IHN1Yl9mbXR0eScgaW5cbiAgICBsZXQgUmVmbCA9IGYyIFJlZmwgaW5cbiAgICBsZXQgUmVmbCA9IGY0IFJlZmwgaW5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiAoZXJhc2VfcmVsIHN1Yl9mbXR0eV9yZXN0KSBmbXQgZm10dHlfcmVzdFxuICAgIGluXG4gICAgRm10dHlfZm10X0VCQiAoRm9ybWF0X3N1YnN0X3R5IChzdWIxX2ZtdHR5Jywgc3ViMl9mbXR0eScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1tIHN1Yl9mbXR0eV9yZXN0JyksXG4gICAgICAgICAgICAgICAgICAgZm10JylcbiAgfCBFbmRfb2ZfZm10dHksIGZtdHR5IC0+XG4gICAgRm10dHlfZm10X0VCQiAoRW5kX29mX2ZtdHR5LCB0eXBlX2Zvcm1hdF9nZW4gZm10IGZtdHR5KVxuICB8IF8gLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuXG4oKiBUaGlzIGltcGxlbWVudGF0aW9uIG9mIGByZWNhc3RgIGlzIGEgYml0IGRpc2FwcG9pbnRpbmcuIFRoZVxuICAgaW52YXJpYW50IHByb3ZpZGVkIGJ5IHRoZSB0eXBlIGFyZSB2ZXJ5IHN0cm9uZzogdGhlIGlucHV0IGZvcm1hdCdzXG4gICB0eXBlIGlzIGluIHJlbGF0aW9uIHRvIHRoZSBvdXRwdXQgdHlwZSdzIGFzIHdpdG5lc3NlZCBieSB0aGVcbiAgIGZtdHR5X3JlbCBhcmd1bWVudC4gT25lIHdvdWxkIGF0IGZpcnN0IGV4cGVjdCB0aGlzIGZ1bmN0aW9uIHRvIGJlXG4gICB0b3RhbCwgYW5kIGltcGxlbWVudGFibGUgYnkgZXhoYXVzdGl2ZSBwYXR0ZXJuIG1hdGNoaW5nLiBJbnN0ZWFkLFxuICAgd2UgcmV1c2UgdGhlIGhpZ2hseSBwYXJ0aWFsIGFuZCBtdWNoIGxlc3Mgd2VsbC1kZWZpbmVkIGZ1bmN0aW9uXG4gICBgdHlwZV9mb3JtYXRgIHRoYXQgaGFzIGxvc3QgYWxsIGtub3dsZWRnZSBvZiB0aGUgY29ycmVzcG9uZGVuY2VcbiAgIGJldHdlZW4gdGhlIGFyZ3VtZW50J3MgdHlwZXMuXG5cbiAgIEJlc2lkZXMgdGhlIGZhY3QgdGhhdCB0aGlzIGZ1bmN0aW9uIHJldXNlcyBhIGxvdCBvZiB0aGVcbiAgIGB0eXBlX2Zvcm1hdGAgbG9naWMgKGVnLjogc2VlaW5nIEludF90eSBpbiB0aGUgZm10dHkgcGFyYW1ldGVyIGRvZXNcbiAgIG5vdCBsZXQgeW91IG1hdGNoIG9uIEludCBvbmx5LCBhcyB5b3UgbWF5IGluIGZhY3QgaGF2ZSBGbG9hdFxuICAgKEFyZ19wYWRkaW5nLCAuLi4pIChcIiUuKmRcIikgYmVnaW5uaW5nIHdpdGggYW4gSW50X3R5KSwgaXQgaXMgYWxzb1xuICAgYSBwYXJ0aWFsIGZ1bmN0aW9uLCBiZWNhdXNlIHRoZSB0eXBpbmcgaW5mb3JtYXRpb24gaW4gYSBmb3JtYXQgaXNcbiAgIG5vdCBxdWl0ZSBlbm91Z2ggdG8gcmVjb25zdHJ1Y3QgaXQgdW5hbWJpZ3VvdXNseS4gRm9yIGV4YW1wbGUsIHRoZVxuICAgZm9ybWF0IHR5cGVzIG9mIFwiJWQlX3JcIiBhbmQgXCIlX3IlZFwiIGhhdmUgdGhlIHNhbWUgZm9ybWF0NlxuICAgcGFyYW1ldGVycywgYnV0IHRoZXkgYXJlIG5vdCBhdCBhbGwgZXhjaGFuZ2VhYmxlLCBhbmQgcHV0dGluZyBvbmVcbiAgIGluIHBsYWNlIG9mIHRoZSBvdGhlciBtdXN0IHJlc3VsdCBpbiBhIGR5bmFtaWMgZmFpbHVyZS5cblxuICAgR2l2ZW4gdGhhdDpcbiAgIC0gd2UnZCBoYXZlIHRvIGR1cGxpY2F0ZSBhIGxvdCBvZiBub24tdHJpdmlhbCB0eXBpbmcgbG9naWMgZnJvbSB0eXBlX2Zvcm1hdFxuICAgLSB0aGlzIHdvdWxkbid0IGV2ZW4gZWxpbWluYXRlIChhbGwpIHRoZSBkeW5hbWljIGZhaWx1cmVzXG4gICB3ZSBkZWNpZGVkIHRvIGp1c3QgcmV1c2UgdHlwZV9mb3JtYXQgZGlyZWN0bHkgZm9yIG5vdy5cbiopXG5sZXQgcmVjYXN0IDpcbiAgdHlwZSBhMSBiMSBjMSBkMSBlMSBmMVxuICAgICAgIGEyIGIyIGMyIGQyIGUyIGYyXG4gIC5cbiAgICAgKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEpIGZtdFxuICAtPiAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSxcbiAgICAgIGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdHR5X3JlbFxuICAtPiAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10XG49IGZ1biBmbXQgZm10dHkgLT5cbiAgdHlwZV9mb3JtYXQgZm10IChlcmFzZV9yZWwgKHN5bW0gZm10dHkpKVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBQcmludGluZyB0b29scyAqKVxuXG4oKiBBZGQgcGFkZGluZyBzcGFjZXMgYXJvdW5kIGEgc3RyaW5nLiAqKVxubGV0IGZpeF9wYWRkaW5nIHBhZHR5IHdpZHRoIHN0ciA9XG4gIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHN0ciBpblxuICBsZXQgd2lkdGgsIHBhZHR5ID1cbiAgICBhYnMgd2lkdGgsXG4gICAgKCogd2hpbGUgbGl0ZXJhbCBwYWRkaW5nIHdpZHRocyBhcmUgYWx3YXlzIG5vbi1uZWdhdGl2ZSxcbiAgICAgICBkeW5hbWljYWxseS1zZXQgd2lkdGhzIChBcmdfcGFkZGluZywgZWcuICUqZCkgbWF5IGJlIG5lZ2F0aXZlO1xuICAgICAgIHdlIGludGVycHJldCB0aG9zZSBhcyBzcGVjaWZ5aW5nIGEgcGFkZGluZy10by10aGUtbGVmdDsgdGhpc1xuICAgICAgIG1lYW5zIHRoYXQgJzAnIG1heSBnZXQgZHJvcHBlZCBldmVuIGlmIGl0IHdhcyBleHBsaWNpdGx5IHNldCxcbiAgICAgICBidXQ6XG4gICAgICAgLSB0aGlzIGlzIHdoYXQgdGhlIGxlZ2FjeSBpbXBsZW1lbnRhdGlvbiBkb2VzLCBhbmRcbiAgICAgICAgIHdlIHByZXNlcnZlIGNvbXBhdGliaWxpdHkgaWYgcG9zc2libGVcbiAgICAgICAtIHdlIGNvdWxkIG9ubHkgc2lnbmFsIHRoaXMgaXNzdWUgYnkgZmFpbGluZyBhdCBydW50aW1lLFxuICAgICAgICAgd2hpY2ggaXMgbm90IHZlcnkgbmljZS4uLiAqKVxuICAgIGlmIHdpZHRoIDwgMCB0aGVuIExlZnQgZWxzZSBwYWR0eSBpblxuICBpZiB3aWR0aCA8PSBsZW4gdGhlbiBzdHIgZWxzZVxuICAgIGxldCByZXMgPSBCeXRlcy5tYWtlIHdpZHRoIChpZiBwYWR0eSA9IFplcm9zIHRoZW4gJzAnIGVsc2UgJyAnKSBpblxuICAgIGJlZ2luIG1hdGNoIHBhZHR5IHdpdGhcbiAgICB8IExlZnQgIC0+IFN0cmluZy5ibGl0IHN0ciAwIHJlcyAwIGxlblxuICAgIHwgUmlnaHQgLT4gU3RyaW5nLmJsaXQgc3RyIDAgcmVzICh3aWR0aCAtIGxlbikgbGVuXG4gICAgfCBaZXJvcyB3aGVuIGxlbiA+IDAgJiYgKHN0ci5bMF0gPSAnKycgfHwgc3RyLlswXSA9ICctJyB8fCBzdHIuWzBdID0gJyAnKSAtPlxuICAgICAgQnl0ZXMuc2V0IHJlcyAwIHN0ci5bMF07XG4gICAgICBTdHJpbmcuYmxpdCBzdHIgMSByZXMgKHdpZHRoIC0gbGVuICsgMSkgKGxlbiAtIDEpXG4gICAgfCBaZXJvcyB3aGVuIGxlbiA+IDEgJiYgc3RyLlswXSA9ICcwJyAmJiAoc3RyLlsxXSA9ICd4JyB8fCBzdHIuWzFdID0gJ1gnKSAtPlxuICAgICAgQnl0ZXMuc2V0IHJlcyAxIHN0ci5bMV07XG4gICAgICBTdHJpbmcuYmxpdCBzdHIgMiByZXMgKHdpZHRoIC0gbGVuICsgMikgKGxlbiAtIDIpXG4gICAgfCBaZXJvcyAtPlxuICAgICAgU3RyaW5nLmJsaXQgc3RyIDAgcmVzICh3aWR0aCAtIGxlbikgbGVuXG4gICAgZW5kO1xuICAgIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcmVzXG5cbigqIEFkZCAnMCcgcGFkZGluZyB0byBpbnQsIGludDMyLCBuYXRpdmVpbnQgb3IgaW50NjQgc3RyaW5nIHJlcHJlc2VudGF0aW9uLiAqKVxubGV0IGZpeF9pbnRfcHJlY2lzaW9uIHByZWMgc3RyID1cbiAgbGV0IHByZWMgPSBhYnMgcHJlYyBpblxuICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzdHIgaW5cbiAgbWF0Y2ggc3RyLlswXSB3aXRoXG4gIHwgKCcrJyB8ICctJyB8ICcgJykgYXMgYyB3aGVuIHByZWMgKyAxID4gbGVuIC0+XG4gICAgbGV0IHJlcyA9IEJ5dGVzLm1ha2UgKHByZWMgKyAxKSAnMCcgaW5cbiAgICBCeXRlcy5zZXQgcmVzIDAgYztcbiAgICBTdHJpbmcuYmxpdCBzdHIgMSByZXMgKHByZWMgLSBsZW4gKyAyKSAobGVuIC0gMSk7XG4gICAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyByZXNcbiAgfCAnMCcgd2hlbiBwcmVjICsgMiA+IGxlbiAmJiBsZW4gPiAxICYmIChzdHIuWzFdID0gJ3gnIHx8IHN0ci5bMV0gPSAnWCcpIC0+XG4gICAgbGV0IHJlcyA9IEJ5dGVzLm1ha2UgKHByZWMgKyAyKSAnMCcgaW5cbiAgICBCeXRlcy5zZXQgcmVzIDEgc3RyLlsxXTtcbiAgICBTdHJpbmcuYmxpdCBzdHIgMiByZXMgKHByZWMgLSBsZW4gKyA0KSAobGVuIC0gMik7XG4gICAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyByZXNcbiAgfCAnMCcgLi4gJzknIHwgJ2EnIC4uICdmJyB8ICdBJyAuLiAnRicgd2hlbiBwcmVjID4gbGVuIC0+XG4gICAgbGV0IHJlcyA9IEJ5dGVzLm1ha2UgcHJlYyAnMCcgaW5cbiAgICBTdHJpbmcuYmxpdCBzdHIgMCByZXMgKHByZWMgLSBsZW4pIGxlbjtcbiAgICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHJlc1xuICB8IF8gLT5cbiAgICBzdHJcblxuKCogRXNjYXBlIGEgc3RyaW5nIGFjY29yZGluZyB0byB0aGUgT0NhbWwgbGV4aW5nIGNvbnZlbnRpb24uICopXG5sZXQgc3RyaW5nX3RvX2NhbWxfc3RyaW5nIHN0ciA9XG4gIGxldCBzdHIgPSBTdHJpbmcuZXNjYXBlZCBzdHIgaW5cbiAgbGV0IGwgPSBTdHJpbmcubGVuZ3RoIHN0ciBpblxuICBsZXQgcmVzID0gQnl0ZXMubWFrZSAobCArIDIpICdcXFwiJyBpblxuICBTdHJpbmcudW5zYWZlX2JsaXQgc3RyIDAgcmVzIDEgbDtcbiAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyByZXNcblxuKCogR2VuZXJhdGUgdGhlIGZvcm1hdF9pbnQvaW50MzIvbmF0aXZlaW50L2ludDY0IGZpcnN0IGFyZ3VtZW50XG4gICBmcm9tIGFuIGludF9jb252LiAqKVxubGV0IGZvcm1hdF9vZl9pY29udiA9IGZ1bmN0aW9uXG4gIHwgSW50X2QgfCBJbnRfQ2QgLT4gXCIlZFwiIHwgSW50X3BkIC0+IFwiJStkXCIgfCBJbnRfc2QgLT4gXCIlIGRcIlxuICB8IEludF9pIHwgSW50X0NpIC0+IFwiJWlcIiB8IEludF9waSAtPiBcIiUraVwiIHwgSW50X3NpIC0+IFwiJSBpXCJcbiAgfCBJbnRfeCAtPiBcIiV4XCIgfCBJbnRfQ3ggLT4gXCIlI3hcIlxuICB8IEludF9YIC0+IFwiJVhcIiB8IEludF9DWCAtPiBcIiUjWFwiXG4gIHwgSW50X28gLT4gXCIlb1wiIHwgSW50X0NvIC0+IFwiJSNvXCJcbiAgfCBJbnRfdSB8IEludF9DdSAtPiBcIiV1XCJcblxubGV0IGZvcm1hdF9vZl9pY29udkwgPSBmdW5jdGlvblxuICB8IEludF9kIHwgSW50X0NkIC0+IFwiJUxkXCIgfCBJbnRfcGQgLT4gXCIlK0xkXCIgfCBJbnRfc2QgLT4gXCIlIExkXCJcbiAgfCBJbnRfaSB8IEludF9DaSAtPiBcIiVMaVwiIHwgSW50X3BpIC0+IFwiJStMaVwiIHwgSW50X3NpIC0+IFwiJSBMaVwiXG4gIHwgSW50X3ggLT4gXCIlTHhcIiB8IEludF9DeCAtPiBcIiUjTHhcIlxuICB8IEludF9YIC0+IFwiJUxYXCIgfCBJbnRfQ1ggLT4gXCIlI0xYXCJcbiAgfCBJbnRfbyAtPiBcIiVMb1wiIHwgSW50X0NvIC0+IFwiJSNMb1wiXG4gIHwgSW50X3UgfCBJbnRfQ3UgLT4gXCIlTHVcIlxuXG5sZXQgZm9ybWF0X29mX2ljb252bCA9IGZ1bmN0aW9uXG4gIHwgSW50X2QgfCBJbnRfQ2QgLT4gXCIlbGRcIiB8IEludF9wZCAtPiBcIiUrbGRcIiB8IEludF9zZCAtPiBcIiUgbGRcIlxuICB8IEludF9pIHwgSW50X0NpIC0+IFwiJWxpXCIgfCBJbnRfcGkgLT4gXCIlK2xpXCIgfCBJbnRfc2kgLT4gXCIlIGxpXCJcbiAgfCBJbnRfeCAtPiBcIiVseFwiIHwgSW50X0N4IC0+IFwiJSNseFwiXG4gIHwgSW50X1ggLT4gXCIlbFhcIiB8IEludF9DWCAtPiBcIiUjbFhcIlxuICB8IEludF9vIC0+IFwiJWxvXCIgfCBJbnRfQ28gLT4gXCIlI2xvXCJcbiAgfCBJbnRfdSB8IEludF9DdSAtPiBcIiVsdVwiXG5cbmxldCBmb3JtYXRfb2ZfaWNvbnZuID0gZnVuY3Rpb25cbiAgfCBJbnRfZCB8IEludF9DZCAtPiBcIiVuZFwiIHwgSW50X3BkIC0+IFwiJStuZFwiIHwgSW50X3NkIC0+IFwiJSBuZFwiXG4gIHwgSW50X2kgfCBJbnRfQ2kgLT4gXCIlbmlcIiB8IEludF9waSAtPiBcIiUrbmlcIiB8IEludF9zaSAtPiBcIiUgbmlcIlxuICB8IEludF94IC0+IFwiJW54XCIgfCBJbnRfQ3ggLT4gXCIlI254XCJcbiAgfCBJbnRfWCAtPiBcIiVuWFwiIHwgSW50X0NYIC0+IFwiJSNuWFwiXG4gIHwgSW50X28gLT4gXCIlbm9cIiB8IEludF9DbyAtPiBcIiUjbm9cIlxuICB8IEludF91IHwgSW50X0N1IC0+IFwiJW51XCJcblxuKCogR2VuZXJhdGUgdGhlIGZvcm1hdF9mbG9hdCBmaXJzdCBhcmd1bWVudCBmcm9tIGEgZmxvYXRfY29udi4gKilcbmxldCBmb3JtYXRfb2ZfZmNvbnYgZmNvbnYgcHJlYyA9XG4gICAgbGV0IHByZWMgPSBhYnMgcHJlYyBpblxuICAgIGxldCBzeW1iID0gY2hhcl9vZl9mY29udiB+Y0Y6J2cnIGZjb252IGluXG4gICAgbGV0IGJ1ZiA9IGJ1ZmZlcl9jcmVhdGUgMTYgaW5cbiAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJztcbiAgICBicHJpbnRfZmNvbnZfZmxhZyBidWYgZmNvbnY7XG4gICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnLic7XG4gICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIChJbnQudG9fc3RyaW5nIHByZWMpO1xuICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgc3ltYjtcbiAgICBidWZmZXJfY29udGVudHMgYnVmXG5cbmxldCB0cmFuc2Zvcm1faW50X2FsdCBpY29udiBzID1cbiAgbWF0Y2ggaWNvbnYgd2l0aFxuICB8IEludF9DZCB8IEludF9DaSB8IEludF9DdSAtPlxuICAgIGxldCBkaWdpdHMgPVxuICAgICAgbGV0IG4gPSByZWYgMCBpblxuICAgICAgZm9yIGkgPSAwIHRvIFN0cmluZy5sZW5ndGggcyAtIDEgZG9cbiAgICAgICAgbWF0Y2ggU3RyaW5nLnVuc2FmZV9nZXQgcyBpIHdpdGhcbiAgICAgICAgfCAnMCcuLic5JyAtPiBpbmNyIG5cbiAgICAgICAgfCBfIC0+ICgpXG4gICAgICBkb25lO1xuICAgICAgIW5cbiAgICBpblxuICAgIGxldCBidWYgPSBCeXRlcy5jcmVhdGUgKFN0cmluZy5sZW5ndGggcyArIChkaWdpdHMgLSAxKSAvIDMpIGluXG4gICAgbGV0IHBvcyA9IHJlZiAwIGluXG4gICAgbGV0IHB1dCBjID0gQnl0ZXMuc2V0IGJ1ZiAhcG9zIGM7IGluY3IgcG9zIGluXG4gICAgbGV0IGxlZnQgPSByZWYgKChkaWdpdHMgLSAxKSBtb2QgMyArIDEpIGluXG4gICAgZm9yIGkgPSAwIHRvIFN0cmluZy5sZW5ndGggcyAtIDEgZG9cbiAgICAgIG1hdGNoIFN0cmluZy51bnNhZmVfZ2V0IHMgaSB3aXRoXG4gICAgICB8ICcwJy4uJzknIGFzIGMgLT5cbiAgICAgICAgICBpZiAhbGVmdCA9IDAgdGhlbiAocHV0ICdfJzsgbGVmdCA6PSAzKTsgZGVjciBsZWZ0OyBwdXQgY1xuICAgICAgfCBjIC0+IHB1dCBjXG4gICAgZG9uZTtcbiAgICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIGJ1ZlxuICB8IF8gLT4gc1xuXG4oKiBDb252ZXJ0IGFuIGludGVnZXIgdG8gYSBzdHJpbmcgYWNjb3JkaW5nIHRvIGEgY29udmVyc2lvbi4gKilcbmxldCBjb252ZXJ0X2ludCBpY29udiBuID1cbiAgdHJhbnNmb3JtX2ludF9hbHQgaWNvbnYgKGZvcm1hdF9pbnQgKGZvcm1hdF9vZl9pY29udiBpY29udikgbilcbmxldCBjb252ZXJ0X2ludDMyIGljb252IG4gPVxuICB0cmFuc2Zvcm1faW50X2FsdCBpY29udiAoZm9ybWF0X2ludDMyIChmb3JtYXRfb2ZfaWNvbnZsIGljb252KSBuKVxubGV0IGNvbnZlcnRfbmF0aXZlaW50IGljb252IG4gPVxuICB0cmFuc2Zvcm1faW50X2FsdCBpY29udiAoZm9ybWF0X25hdGl2ZWludCAoZm9ybWF0X29mX2ljb252biBpY29udikgbilcbmxldCBjb252ZXJ0X2ludDY0IGljb252IG4gPVxuICB0cmFuc2Zvcm1faW50X2FsdCBpY29udiAoZm9ybWF0X2ludDY0IChmb3JtYXRfb2ZfaWNvbnZMIGljb252KSBuKVxuXG4oKiBDb252ZXJ0IGEgZmxvYXQgdG8gc3RyaW5nLiAqKVxuKCogRml4IHNwZWNpYWwgY2FzZSBvZiBcIk9DYW1sIGZsb2F0IGZvcm1hdFwiLiAqKVxubGV0IGNvbnZlcnRfZmxvYXQgZmNvbnYgcHJlYyB4ID1cbiAgbGV0IGhleCAoKSA9XG4gICAgbGV0IHNpZ24gPVxuICAgICAgbWF0Y2ggZnN0IGZjb252IHdpdGhcbiAgICAgIHwgRmxvYXRfZmxhZ19wIC0+ICcrJ1xuICAgICAgfCBGbG9hdF9mbGFnX3MgLT4gJyAnXG4gICAgICB8IF8gLT4gJy0nIGluXG4gICAgaGV4c3RyaW5nX29mX2Zsb2F0IHggcHJlYyBzaWduIGluXG4gIGxldCBhZGRfZG90X2lmX25lZWRlZCBzdHIgPVxuICAgIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHN0ciBpblxuICAgIGxldCByZWMgaXNfdmFsaWQgaSA9XG4gICAgICBpZiBpID0gbGVuIHRoZW4gZmFsc2UgZWxzZVxuICAgICAgICBtYXRjaCBzdHIuW2ldIHdpdGhcbiAgICAgICAgfCAnLicgfCAnZScgfCAnRScgLT4gdHJ1ZVxuICAgICAgICB8IF8gLT4gaXNfdmFsaWQgKGkgKyAxKSBpblxuICAgIGlmIGlzX3ZhbGlkIDAgdGhlbiBzdHIgZWxzZSBzdHIgXiBcIi5cIiBpblxuICBsZXQgY2FtbF9zcGVjaWFsX3ZhbCBzdHIgPSBtYXRjaCBjbGFzc2lmeV9mbG9hdCB4IHdpdGhcbiAgICB8IEZQX25vcm1hbCB8IEZQX3N1Ym5vcm1hbCB8IEZQX3plcm8gLT4gc3RyXG4gICAgfCBGUF9pbmZpbml0ZSAtPiBpZiB4IDwgMC4wIHRoZW4gXCJuZWdfaW5maW5pdHlcIiBlbHNlIFwiaW5maW5pdHlcIlxuICAgIHwgRlBfbmFuIC0+IFwibmFuXCIgaW5cbiAgbWF0Y2ggc25kIGZjb252IHdpdGhcbiAgfCBGbG9hdF9oIC0+IGhleCAoKVxuICB8IEZsb2F0X0ggLT4gU3RyaW5nLnVwcGVyY2FzZV9hc2NpaSAoaGV4ICgpKVxuICB8IEZsb2F0X0NGIC0+IGNhbWxfc3BlY2lhbF92YWwgKGhleCAoKSlcbiAgfCBGbG9hdF9GIC0+XG4gICAgbGV0IHN0ciA9IGZvcm1hdF9mbG9hdCAoZm9ybWF0X29mX2Zjb252IGZjb252IHByZWMpIHggaW5cbiAgICBjYW1sX3NwZWNpYWxfdmFsIChhZGRfZG90X2lmX25lZWRlZCBzdHIpXG4gIHwgRmxvYXRfZiB8IEZsb2F0X2UgfCBGbG9hdF9FIHwgRmxvYXRfZyB8IEZsb2F0X0cgLT5cbiAgICBmb3JtYXRfZmxvYXQgKGZvcm1hdF9vZl9mY29udiBmY29udiBwcmVjKSB4XG5cbigqIENvbnZlcnQgYSBjaGFyIHRvIGEgc3RyaW5nIGFjY29yZGluZyB0byB0aGUgT0NhbWwgbGV4aWNhbCBjb252ZW50aW9uLiAqKVxubGV0IGZvcm1hdF9jYW1sX2NoYXIgYyA9XG4gIGxldCBzdHIgPSBDaGFyLmVzY2FwZWQgYyBpblxuICBsZXQgbCA9IFN0cmluZy5sZW5ndGggc3RyIGluXG4gIGxldCByZXMgPSBCeXRlcy5tYWtlIChsICsgMikgJ1xcJycgaW5cbiAgU3RyaW5nLnVuc2FmZV9ibGl0IHN0ciAwIHJlcyAxIGw7XG4gIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcmVzXG5cbigqIENvbnZlcnQgYSBmb3JtYXQgdHlwZSB0byBzdHJpbmcgKilcbmxldCBzdHJpbmdfb2ZfZm10dHkgZm10dHkgPVxuICBsZXQgYnVmID0gYnVmZmVyX2NyZWF0ZSAxNiBpblxuICBicHJpbnRfZm10dHkgYnVmIGZtdHR5O1xuICBidWZmZXJfY29udGVudHMgYnVmXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAoKiBHZW5lcmljIHByaW50aW5nIGZ1bmN0aW9uICopXG5cbigqIE1ha2UgYSBnZW5lcmljIHByaW50aW5nIGZ1bmN0aW9uLiAqKVxuKCogVXNlZCB0byBnZW5lcmF0ZSBQcmludGYgYW5kIEZvcm1hdCBwcmludGluZyBmdW5jdGlvbnMuICopXG4oKiBQYXJhbWV0ZXJzOlxuICAgICBrOiBhIGNvbnRpbnVhdGlvbiBmaW5hbGx5IGFwcGxpZWQgdG8gdGhlIG91dHB1dCBzdHJlYW0gYW5kIHRoZSBhY2N1bXVsYXRvci5cbiAgICAgbzogdGhlIG91dHB1dCBzdHJlYW0gKHNlZSBrLCAlYSBhbmQgJXQpLlxuICAgICBhY2M6IHJldiBsaXN0IG9mIHByaW50aW5nIGVudGl0aWVzIChzdHJpbmcsIGNoYXIsIGZsdXNoLCBmb3JtYXR0aW5nLCAuLi4pLlxuICAgICBmbXQ6IHRoZSBmb3JtYXQuICopXG5sZXQgcmVjIG1ha2VfcHJpbnRmIDogdHlwZSBhIGIgYyBkIGUgZiAuXG4gICAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT4gYSA9XG5mdW4gayBhY2MgZm10IC0+IG1hdGNoIGZtdCB3aXRoXG4gIHwgQ2hhciByZXN0IC0+XG4gICAgZnVuIGMgLT5cbiAgICAgIGxldCBuZXdfYWNjID0gQWNjX2RhdGFfY2hhciAoYWNjLCBjKSBpblxuICAgICAgbWFrZV9wcmludGYgayBuZXdfYWNjIHJlc3RcbiAgfCBDYW1sX2NoYXIgcmVzdCAtPlxuICAgIGZ1biBjIC0+XG4gICAgICBsZXQgbmV3X2FjYyA9IEFjY19kYXRhX3N0cmluZyAoYWNjLCBmb3JtYXRfY2FtbF9jaGFyIGMpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIG5ld19hY2MgcmVzdFxuICB8IFN0cmluZyAocGFkLCByZXN0KSAtPlxuICAgIG1ha2VfcGFkZGluZyBrIGFjYyByZXN0IHBhZCAoZnVuIHN0ciAtPiBzdHIpXG4gIHwgQ2FtbF9zdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICBtYWtlX3BhZGRpbmcgayBhY2MgcmVzdCBwYWQgc3RyaW5nX3RvX2NhbWxfc3RyaW5nXG4gIHwgSW50IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIG1ha2VfaW50X3BhZGRpbmdfcHJlY2lzaW9uIGsgYWNjIHJlc3QgcGFkIHByZWMgY29udmVydF9pbnQgaWNvbnZcbiAgfCBJbnQzMiAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBtYWtlX2ludF9wYWRkaW5nX3ByZWNpc2lvbiBrIGFjYyByZXN0IHBhZCBwcmVjIGNvbnZlcnRfaW50MzIgaWNvbnZcbiAgfCBOYXRpdmVpbnQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbWFrZV9pbnRfcGFkZGluZ19wcmVjaXNpb24gayBhY2MgcmVzdCBwYWQgcHJlYyBjb252ZXJ0X25hdGl2ZWludCBpY29udlxuICB8IEludDY0IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIG1ha2VfaW50X3BhZGRpbmdfcHJlY2lzaW9uIGsgYWNjIHJlc3QgcGFkIHByZWMgY29udmVydF9pbnQ2NCBpY29udlxuICB8IEZsb2F0IChmY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIG1ha2VfZmxvYXRfcGFkZGluZ19wcmVjaXNpb24gayBhY2MgcmVzdCBwYWQgcHJlYyBmY29udlxuICB8IEJvb2wgKHBhZCwgcmVzdCkgLT5cbiAgICBtYWtlX3BhZGRpbmcgayBhY2MgcmVzdCBwYWQgc3RyaW5nX29mX2Jvb2xcbiAgfCBBbHBoYSByZXN0IC0+XG4gICAgZnVuIGYgeCAtPiBtYWtlX3ByaW50ZiBrIChBY2NfZGVsYXkgKGFjYywgZnVuIG8gLT4gZiBvIHgpKSByZXN0XG4gIHwgVGhldGEgcmVzdCAtPlxuICAgIGZ1biBmIC0+IG1ha2VfcHJpbnRmIGsgKEFjY19kZWxheSAoYWNjLCBmKSkgcmVzdFxuICB8IEN1c3RvbSAoYXJpdHksIGYsIHJlc3QpIC0+XG4gICAgbWFrZV9jdXN0b20gayBhY2MgcmVzdCBhcml0eSAoZiAoKSlcbiAgfCBSZWFkZXIgXyAtPlxuICAgICgqIFRoaXMgY2FzZSBpcyBpbXBvc3NpYmxlLCBieSB0eXBpbmcgb2YgZm9ybWF0cy4gKilcbiAgICAoKiBJbmRlZWQsIHNpbmNlIHByaW50ZiBhbmQgY28uIHRha2UgYSBmb3JtYXQ0IGFzIGFyZ3VtZW50LCB0aGUgJ2QgYW5kICdlXG4gICAgICAgdHlwZSBwYXJhbWV0ZXJzIG9mIGZtdCBhcmUgb2J2aW91c2x5IGVxdWFscy4gVGhlIFJlYWRlciBpcyB0aGVcbiAgICAgICBvbmx5IGNvbnN0cnVjdG9yIHdoaWNoIHRvdWNoICdkIGFuZCAnZSB0eXBlIHBhcmFtZXRlcnMgb2YgdGhlIGZvcm1hdFxuICAgICAgIHR5cGUsIGl0IGFkZHMgYW4gKC0+KSB0byB0aGUgJ2QgcGFyYW1ldGVycy4gQ29uc2VxdWVudGx5LCBhIGZvcm1hdDRcbiAgICAgICBjYW5ub3QgY29udGFpbiBhIFJlYWRlciBub2RlLCBleGNlcHQgaW4gdGhlIHN1Yi1mb3JtYXQgYXNzb2NpYXRlZCB0b1xuICAgICAgIGFuICV7Li4uJX0uIEl0J3Mgbm90IGEgcHJvYmxlbSBiZWNhdXNlIG1ha2VfcHJpbnRmIGRvIG5vdCBjYWxsXG4gICAgICAgaXRzZWxmIHJlY3Vyc2l2ZWx5IG9uIHRoZSBzdWItZm9ybWF0IGFzc29jaWF0ZWQgdG8gJXsuLi4lfS4gKilcbiAgICBhc3NlcnQgZmFsc2VcbiAgfCBGbHVzaCByZXN0IC0+XG4gICAgbWFrZV9wcmludGYgayAoQWNjX2ZsdXNoIGFjYykgcmVzdFxuXG4gIHwgU3RyaW5nX2xpdGVyYWwgKHN0ciwgcmVzdCkgLT5cbiAgICBtYWtlX3ByaW50ZiBrIChBY2Nfc3RyaW5nX2xpdGVyYWwgKGFjYywgc3RyKSkgcmVzdFxuICB8IENoYXJfbGl0ZXJhbCAoY2hyLCByZXN0KSAtPlxuICAgIG1ha2VfcHJpbnRmIGsgKEFjY19jaGFyX2xpdGVyYWwgKGFjYywgY2hyKSkgcmVzdFxuXG4gIHwgRm9ybWF0X2FyZyAoXywgc3ViX2ZtdHR5LCByZXN0KSAtPlxuICAgIGxldCB0eSA9IHN0cmluZ19vZl9mbXR0eSBzdWJfZm10dHkgaW5cbiAgICAoZnVuIHN0ciAtPlxuICAgICAgaWdub3JlIHN0cjtcbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCB0eSkpIHJlc3QpXG4gIHwgRm9ybWF0X3N1YnN0IChfLCBmbXR0eSwgcmVzdCkgLT5cbiAgICBmdW4gKEZvcm1hdCAoZm10LCBfKSkgLT4gbWFrZV9wcmludGYgayBhY2NcbiAgICAgIChjb25jYXRfZm10IChyZWNhc3QgZm10IGZtdHR5KSByZXN0KVxuXG4gIHwgU2Nhbl9jaGFyX3NldCAoXywgXywgcmVzdCkgLT5cbiAgICBsZXQgbmV3X2FjYyA9IEFjY19pbnZhbGlkX2FyZyAoYWNjLCBcIlByaW50ZjogYmFkIGNvbnZlcnNpb24gJVtcIikgaW5cbiAgICBmdW4gXyAtPiBtYWtlX3ByaW50ZiBrIG5ld19hY2MgcmVzdFxuICB8IFNjYW5fZ2V0X2NvdW50ZXIgKF8sIHJlc3QpIC0+XG4gICAgKCogVGhpcyBjYXNlIHNob3VsZCBiZSByZWZ1c2VkIGZvciBQcmludGYuICopXG4gICAgKCogQWNjZXB0ZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuICopXG4gICAgKCogSW50ZXJwcmV0ICVsLCAlbiBhbmQgJUwgYXMgJXUuICopXG4gICAgZnVuIG4gLT5cbiAgICAgIGxldCBuZXdfYWNjID0gQWNjX2RhdGFfc3RyaW5nIChhY2MsIGZvcm1hdF9pbnQgXCIldVwiIG4pIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIG5ld19hY2MgcmVzdFxuICB8IFNjYW5fbmV4dF9jaGFyIHJlc3QgLT5cbiAgICBmdW4gYyAtPlxuICAgICAgbGV0IG5ld19hY2MgPSBBY2NfZGF0YV9jaGFyIChhY2MsIGMpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIG5ld19hY2MgcmVzdFxuICB8IElnbm9yZWRfcGFyYW0gKGlnbiwgcmVzdCkgLT5cbiAgICBtYWtlX2lnbm9yZWRfcGFyYW0gayBhY2MgaWduIHJlc3RcblxuICB8IEZvcm1hdHRpbmdfbGl0IChmbXRpbmdfbGl0LCByZXN0KSAtPlxuICAgIG1ha2VfcHJpbnRmIGsgKEFjY19mb3JtYXR0aW5nX2xpdCAoYWNjLCBmbXRpbmdfbGl0KSkgcmVzdFxuICB8IEZvcm1hdHRpbmdfZ2VuIChPcGVuX3RhZyAoRm9ybWF0IChmbXQnLCBfKSksIHJlc3QpIC0+XG4gICAgbGV0IGsnIGthY2MgPVxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2Zvcm1hdHRpbmdfZ2VuIChhY2MsIEFjY19vcGVuX3RhZyBrYWNjKSkgcmVzdCBpblxuICAgIG1ha2VfcHJpbnRmIGsnIEVuZF9vZl9hY2MgZm10J1xuICB8IEZvcm1hdHRpbmdfZ2VuIChPcGVuX2JveCAoRm9ybWF0IChmbXQnLCBfKSksIHJlc3QpIC0+XG4gICAgbGV0IGsnIGthY2MgPVxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2Zvcm1hdHRpbmdfZ2VuIChhY2MsIEFjY19vcGVuX2JveCBrYWNjKSkgcmVzdCBpblxuICAgIG1ha2VfcHJpbnRmIGsnIEVuZF9vZl9hY2MgZm10J1xuXG4gIHwgRW5kX29mX2Zvcm1hdCAtPlxuICAgIGsgYWNjXG5cbigqIERlbGF5IHRoZSBlcnJvciAoSW52YWxpZF9hcmd1bWVudCBcIlByaW50ZjogYmFkIGNvbnZlcnNpb24gJV9cIikuICopXG4oKiBHZW5lcmF0ZSBmdW5jdGlvbnMgdG8gdGFrZSByZW1haW5pbmcgYXJndW1lbnRzIChhZnRlciB0aGUgXCIlX1wiKS4gKilcbmFuZCBtYWtlX2lnbm9yZWRfcGFyYW0gOiB0eXBlIHggeSBhIGIgYyBkIGUgZiAuXG4gICAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAgIChhLCBiLCBjLCBkLCB5LCB4KSBpZ25vcmVkIC0+XG4gICAgKHgsIGIsIGMsIHksIGUsIGYpIGZtdCAtPiBhID1cbmZ1biBrIGFjYyBpZ24gZm10IC0+IG1hdGNoIGlnbiB3aXRoXG4gIHwgSWdub3JlZF9jaGFyICAgICAgICAgICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfY2FtbF9jaGFyICAgICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX3N0cmluZyBfICAgICAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9jYW1sX3N0cmluZyBfICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfaW50IChfLCBfKSAgICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX2ludDMyIChfLCBfKSAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9uYXRpdmVpbnQgKF8sIF8pICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfaW50NjQgKF8sIF8pICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX2Zsb2F0IChfLCBfKSAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9ib29sIF8gICAgICAgICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfZm9ybWF0X2FyZyBfICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX2Zvcm1hdF9zdWJzdCAoXywgZm10dHkpIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyBmbXR0eSBmbXRcbiAgfCBJZ25vcmVkX3JlYWRlciAgICAgICAgICAgICAgICAgIC0+IGFzc2VydCBmYWxzZVxuICB8IElnbm9yZWRfc2Nhbl9jaGFyX3NldCBfICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX3NjYW5fZ2V0X2NvdW50ZXIgXyAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9zY2FuX25leHRfY2hhciAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuXG5cbigqIFNwZWNpYWwgY2FzZSBvZiBwcmludGYgXCIlXyhcIi4gKilcbmFuZCBtYWtlX2Zyb21fZm10dHkgOiB0eXBlIHggeSBhIGIgYyBkIGUgZiAuXG4gICAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAgIChhLCBiLCBjLCBkLCB5LCB4KSBmbXR0eSAtPlxuICAgICh4LCBiLCBjLCB5LCBlLCBmKSBmbXQgLT4gYSA9XG5mdW4gayBhY2MgZm10dHkgZm10IC0+IG1hdGNoIGZtdHR5IHdpdGhcbiAgfCBDaGFyX3R5IHJlc3QgICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBTdHJpbmdfdHkgcmVzdCAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBJbnRfdHkgcmVzdCAgICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBJbnQzMl90eSByZXN0ICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBOYXRpdmVpbnRfdHkgcmVzdCAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBJbnQ2NF90eSByZXN0ICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBGbG9hdF90eSByZXN0ICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBCb29sX3R5IHJlc3QgICAgICAgICAgICAtPiBmdW4gXyAtPiBtYWtlX2Zyb21fZm10dHkgayBhY2MgcmVzdCBmbXRcbiAgfCBBbHBoYV90eSByZXN0ICAgICAgICAgICAtPiBmdW4gXyBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IFRoZXRhX3R5IHJlc3QgICAgICAgICAgIC0+IGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IEFueV90eSByZXN0ICAgICAgICAgICAgIC0+IGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IFJlYWRlcl90eSBfICAgICAgICAgICAgIC0+IGFzc2VydCBmYWxzZVxuICB8IElnbm9yZWRfcmVhZGVyX3R5IF8gICAgIC0+IGFzc2VydCBmYWxzZVxuICB8IEZvcm1hdF9hcmdfdHkgKF8sIHJlc3QpIC0+IGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IEVuZF9vZl9mbXR0eSAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgRm9ybWF0X3N1YnN0X3R5ICh0eTEsIHR5MiwgcmVzdCkgLT5cbiAgICBsZXQgdHkgPSB0cmFucyAoc3ltbSB0eTEpIHR5MiBpblxuICAgIGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyAoY29uY2F0X2ZtdHR5IHR5IHJlc3QpIGZtdFxuXG4oKiBJbnNlcnQgYW4gQWNjX2ludmFsaWRfYXJnIGluIHRoZSBhY2N1bXVsYXRvciBhbmQgY29udGludWUgdG8gZ2VuZXJhdGVcbiAgIGNsb3N1cmVzIHRvIGdldCB0aGUgcmVtYWluaW5nIGFyZ3VtZW50cy4gKilcbmFuZCBtYWtlX2ludmFsaWRfYXJnIDogdHlwZSBhIGIgYyBkIGUgZiAuXG4gICAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT4gYSA9XG5mdW4gayBhY2MgZm10IC0+XG4gIG1ha2VfcHJpbnRmIGsgKEFjY19pbnZhbGlkX2FyZyAoYWNjLCBcIlByaW50ZjogYmFkIGNvbnZlcnNpb24gJV9cIikpIGZtdFxuXG4oKiBGaXggcGFkZGluZywgdGFrZSBpdCBhcyBhbiBleHRyYSBpbnRlZ2VyIGFyZ3VtZW50IGlmIG5lZWRlZC4gKilcbmFuZCBtYWtlX3BhZGRpbmcgOiB0eXBlIHggeiBhIGIgYyBkIGUgZiAuXG4gICAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT5cbiAgICAoeCwgeiAtPiBhKSBwYWRkaW5nIC0+ICh6IC0+IHN0cmluZykgLT4geCA9XG4gIGZ1biBrIGFjYyBmbXQgcGFkIHRyYW5zIC0+IG1hdGNoIHBhZCB3aXRoXG4gIHwgTm9fcGFkZGluZyAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgbmV3X2FjYyA9IEFjY19kYXRhX3N0cmluZyAoYWNjLCB0cmFucyB4KSBpblxuICAgICAgbWFrZV9wcmludGYgayBuZXdfYWNjIGZtdFxuICB8IExpdF9wYWRkaW5nIChwYWR0eSwgd2lkdGgpIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBuZXdfYWNjID0gQWNjX2RhdGFfc3RyaW5nIChhY2MsIGZpeF9wYWRkaW5nIHBhZHR5IHdpZHRoICh0cmFucyB4KSkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgbmV3X2FjYyBmbXRcbiAgfCBBcmdfcGFkZGluZyBwYWR0eSAtPlxuICAgIGZ1biB3IHggLT5cbiAgICAgIGxldCBuZXdfYWNjID0gQWNjX2RhdGFfc3RyaW5nIChhY2MsIGZpeF9wYWRkaW5nIHBhZHR5IHcgKHRyYW5zIHgpKSBpblxuICAgICAgbWFrZV9wcmludGYgayBuZXdfYWNjIGZtdFxuXG4oKiBGaXggcGFkZGluZyBhbmQgcHJlY2lzaW9uIGZvciBpbnQsIGludDMyLCBuYXRpdmVpbnQgb3IgaW50NjQuICopXG4oKiBUYWtlIG9uZSBvciB0d28gZXh0cmEgaW50ZWdlciBhcmd1bWVudHMgaWYgbmVlZGVkLiAqKVxuYW5kIG1ha2VfaW50X3BhZGRpbmdfcHJlY2lzaW9uIDogdHlwZSB4IHkgeiBhIGIgYyBkIGUgZiAuXG4gICAgKChiLCBjKSBhY2MgLT4gZikgLT4gKGIsIGMpIGFjYyAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT5cbiAgICAoeCwgeSkgcGFkZGluZyAtPiAoeSwgeiAtPiBhKSBwcmVjaXNpb24gLT4gKGludF9jb252IC0+IHogLT4gc3RyaW5nKSAtPlxuICAgIGludF9jb252IC0+IHggPVxuICBmdW4gayBhY2MgZm10IHBhZCBwcmVjIHRyYW5zIGljb252IC0+IG1hdGNoIHBhZCwgcHJlYyB3aXRoXG4gIHwgTm9fcGFkZGluZywgTm9fcHJlY2lzaW9uIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBzdHIgPSB0cmFucyBpY29udiB4IGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgTm9fcGFkZGluZywgTGl0X3ByZWNpc2lvbiBwIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfaW50X3ByZWNpc2lvbiBwICh0cmFucyBpY29udiB4KSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IE5vX3BhZGRpbmcsIEFyZ19wcmVjaXNpb24gLT5cbiAgICBmdW4gcCB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X2ludF9wcmVjaXNpb24gcCAodHJhbnMgaWNvbnYgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBMaXRfcGFkZGluZyAocGFkdHksIHcpLCBOb19wcmVjaXNpb24gLT5cbiAgICBmdW4geCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKHRyYW5zIGljb252IHgpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgTGl0X3BhZGRpbmcgKHBhZHR5LCB3KSwgTGl0X3ByZWNpc2lvbiBwIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3IChmaXhfaW50X3ByZWNpc2lvbiBwICh0cmFucyBpY29udiB4KSkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBMaXRfcGFkZGluZyAocGFkdHksIHcpLCBBcmdfcHJlY2lzaW9uIC0+XG4gICAgZnVuIHAgeCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKGZpeF9pbnRfcHJlY2lzaW9uIHAgKHRyYW5zIGljb252IHgpKSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IEFyZ19wYWRkaW5nIHBhZHR5LCBOb19wcmVjaXNpb24gLT5cbiAgICBmdW4gdyB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X3BhZGRpbmcgcGFkdHkgdyAodHJhbnMgaWNvbnYgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBBcmdfcGFkZGluZyBwYWR0eSwgTGl0X3ByZWNpc2lvbiBwIC0+XG4gICAgZnVuIHcgeCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKGZpeF9pbnRfcHJlY2lzaW9uIHAgKHRyYW5zIGljb252IHgpKSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IEFyZ19wYWRkaW5nIHBhZHR5LCBBcmdfcHJlY2lzaW9uIC0+XG4gICAgZnVuIHcgcCB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X3BhZGRpbmcgcGFkdHkgdyAoZml4X2ludF9wcmVjaXNpb24gcCAodHJhbnMgaWNvbnYgeCkpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG5cbigqIENvbnZlcnQgYSBmbG9hdCwgZml4IHBhZGRpbmcgYW5kIHByZWNpc2lvbiBpZiBuZWVkZWQuICopXG4oKiBUYWtlIHRoZSBmbG9hdCBhcmd1bWVudCBhbmQgb25lIG9yIHR3byBleHRyYSBpbnRlZ2VyIGFyZ3VtZW50cyBpZiBuZWVkZWQuICopXG5hbmQgbWFrZV9mbG9hdF9wYWRkaW5nX3ByZWNpc2lvbiA6IHR5cGUgeCB5IGEgYiBjIGQgZSBmIC5cbiAgICAoKGIsIGMpIGFjYyAtPiBmKSAtPiAoYiwgYykgYWNjIC0+XG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPlxuICAgICh4LCB5KSBwYWRkaW5nIC0+ICh5LCBmbG9hdCAtPiBhKSBwcmVjaXNpb24gLT4gZmxvYXRfY29udiAtPiB4ID1cbiAgZnVuIGsgYWNjIGZtdCBwYWQgcHJlYyBmY29udiAtPiBtYXRjaCBwYWQsIHByZWMgd2l0aFxuICB8IE5vX3BhZGRpbmcsIE5vX3ByZWNpc2lvbiAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgc3RyID0gY29udmVydF9mbG9hdCBmY29udiAoZGVmYXVsdF9mbG9hdF9wcmVjaXNpb24gZmNvbnYpIHggaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBOb19wYWRkaW5nLCBMaXRfcHJlY2lzaW9uIHAgLT5cbiAgICBmdW4geCAtPlxuICAgICAgbGV0IHN0ciA9IGNvbnZlcnRfZmxvYXQgZmNvbnYgcCB4IGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgTm9fcGFkZGluZywgQXJnX3ByZWNpc2lvbiAtPlxuICAgIGZ1biBwIHggLT5cbiAgICAgIGxldCBzdHIgPSBjb252ZXJ0X2Zsb2F0IGZjb252IHAgeCBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IExpdF9wYWRkaW5nIChwYWR0eSwgdyksIE5vX3ByZWNpc2lvbiAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgc3RyID0gY29udmVydF9mbG9hdCBmY29udiAoZGVmYXVsdF9mbG9hdF9wcmVjaXNpb24gZmNvbnYpIHggaW5cbiAgICAgIGxldCBzdHInID0gZml4X3BhZGRpbmcgcGFkdHkgdyBzdHIgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHInKSkgZm10XG4gIHwgTGl0X3BhZGRpbmcgKHBhZHR5LCB3KSwgTGl0X3ByZWNpc2lvbiBwIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3IChjb252ZXJ0X2Zsb2F0IGZjb252IHAgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBMaXRfcGFkZGluZyAocGFkdHksIHcpLCBBcmdfcHJlY2lzaW9uIC0+XG4gICAgZnVuIHAgeCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKGNvbnZlcnRfZmxvYXQgZmNvbnYgcCB4KSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IEFyZ19wYWRkaW5nIHBhZHR5LCBOb19wcmVjaXNpb24gLT5cbiAgICBmdW4gdyB4IC0+XG4gICAgICBsZXQgc3RyID0gY29udmVydF9mbG9hdCBmY29udiAoZGVmYXVsdF9mbG9hdF9wcmVjaXNpb24gZmNvbnYpIHggaW5cbiAgICAgIGxldCBzdHInID0gZml4X3BhZGRpbmcgcGFkdHkgdyBzdHIgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHInKSkgZm10XG4gIHwgQXJnX3BhZGRpbmcgcGFkdHksIExpdF9wcmVjaXNpb24gcCAtPlxuICAgIGZ1biB3IHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3IChjb252ZXJ0X2Zsb2F0IGZjb252IHAgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBBcmdfcGFkZGluZyBwYWR0eSwgQXJnX3ByZWNpc2lvbiAtPlxuICAgIGZ1biB3IHAgeCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKGNvbnZlcnRfZmxvYXQgZmNvbnYgcCB4KSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuYW5kIG1ha2VfY3VzdG9tIDogdHlwZSB4IHkgYSBiIGMgZCBlIGYgLlxuICAoKGIsIGMpIGFjYyAtPiBmKSAtPiAoYiwgYykgYWNjIC0+XG4gIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT5cbiAgKGEsIHgsIHkpIGN1c3RvbV9hcml0eSAtPiB4IC0+IHkgPVxuICBmdW4gayBhY2MgcmVzdCBhcml0eSBmIC0+IG1hdGNoIGFyaXR5IHdpdGhcbiAgfCBDdXN0b21femVybyAtPiBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgZikpIHJlc3RcbiAgfCBDdXN0b21fc3VjYyBhcml0eSAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBtYWtlX2N1c3RvbSBrIGFjYyByZXN0IGFyaXR5IChmIHgpXG5cbmxldCBjb25zdCB4IF8gPSB4XG5cbmxldCByZWMgbWFrZV9pcHJpbnRmIDogdHlwZSBhIGIgYyBkIGUgZiBzdGF0ZS5cbiAgKHN0YXRlIC0+IGYpIC0+IHN0YXRlIC0+IChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT4gYSA9XG4gIGZ1biBrIG8gZm10IC0+IG1hdGNoIGZtdCB3aXRoXG4gICAgfCBDaGFyIHJlc3QgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdClcbiAgICB8IENhbWxfY2hhciByZXN0IC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBTdHJpbmcgKE5vX3BhZGRpbmcsIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBTdHJpbmcgKExpdF9wYWRkaW5nIF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBTdHJpbmcgKEFyZ19wYWRkaW5nIF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KSlcbiAgICB8IENhbWxfc3RyaW5nIChOb19wYWRkaW5nLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgQ2FtbF9zdHJpbmcgKExpdF9wYWRkaW5nIF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBDYW1sX3N0cmluZyAoQXJnX3BhZGRpbmcgXywgcmVzdCkgLT5cbiAgICAgICAgY29uc3QgKGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpKVxuICAgIHwgSW50IChfLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICAgIGZuX29mX3BhZGRpbmdfcHJlY2lzaW9uIGsgbyByZXN0IHBhZCBwcmVjXG4gICAgfCBJbnQzMiAoXywgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgICAgICBmbl9vZl9wYWRkaW5nX3ByZWNpc2lvbiBrIG8gcmVzdCBwYWQgcHJlY1xuICAgIHwgTmF0aXZlaW50IChfLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICAgIGZuX29mX3BhZGRpbmdfcHJlY2lzaW9uIGsgbyByZXN0IHBhZCBwcmVjXG4gICAgfCBJbnQ2NCAoXywgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgICAgICBmbl9vZl9wYWRkaW5nX3ByZWNpc2lvbiBrIG8gcmVzdCBwYWQgcHJlY1xuICAgIHwgRmxvYXQgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICAgICAgZm5fb2ZfcGFkZGluZ19wcmVjaXNpb24gayBvIHJlc3QgcGFkIHByZWNcbiAgICB8IEJvb2wgKE5vX3BhZGRpbmcsIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBCb29sIChMaXRfcGFkZGluZyBfLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgQm9vbCAoQXJnX3BhZGRpbmcgXywgcmVzdCkgLT5cbiAgICAgICAgY29uc3QgKGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpKVxuICAgIHwgQWxwaGEgcmVzdCAtPlxuICAgICAgICBjb25zdCAoY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdCkpXG4gICAgfCBUaGV0YSByZXN0IC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBDdXN0b20gKGFyaXR5LCBfLCByZXN0KSAtPlxuICAgICAgICBmbl9vZl9jdXN0b21fYXJpdHkgayBvIHJlc3QgYXJpdHlcbiAgICB8IFJlYWRlciBfIC0+XG4gICAgICAgICgqIFRoaXMgY2FzZSBpcyBpbXBvc3NpYmxlLCBieSB0eXBpbmcgb2YgZm9ybWF0cy4gIFNlZSB0aGVcbiAgICAgICAgICAgbm90ZSBpbiB0aGUgY29ycmVzcG9uZGluZyBjYXNlIGZvciBtYWtlX3ByaW50Zi4gKilcbiAgICAgICAgYXNzZXJ0IGZhbHNlXG4gICAgfCBGbHVzaCByZXN0IC0+XG4gICAgICAgIG1ha2VfaXByaW50ZiBrIG8gcmVzdFxuICAgIHwgU3RyaW5nX2xpdGVyYWwgKF8sIHJlc3QpIC0+XG4gICAgICAgIG1ha2VfaXByaW50ZiBrIG8gcmVzdFxuICAgIHwgQ2hhcl9saXRlcmFsIChfLCByZXN0KSAtPlxuICAgICAgICBtYWtlX2lwcmludGYgayBvIHJlc3RcbiAgICB8IEZvcm1hdF9hcmcgKF8sIF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBGb3JtYXRfc3Vic3QgKF8sIGZtdHR5LCByZXN0KSAtPlxuICAgICAgICBmdW4gKEZvcm1hdCAoZm10LCBfKSkgLT5cbiAgICAgICAgICBtYWtlX2lwcmludGYgayBvXG4gICAgICAgICAgICAoY29uY2F0X2ZtdCAocmVjYXN0IGZtdCBmbXR0eSkgcmVzdClcbiAgICB8IFNjYW5fY2hhcl9zZXQgKF8sIF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBTY2FuX2dldF9jb3VudGVyIChfLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgU2Nhbl9uZXh0X2NoYXIgcmVzdCAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgSWdub3JlZF9wYXJhbSAoaWduLCByZXN0KSAtPlxuICAgICAgICBtYWtlX2lnbm9yZWRfcGFyYW0gKGZ1biBfIC0+IGsgbykgKEVuZF9vZl9hY2MpIGlnbiByZXN0XG4gICAgfCBGb3JtYXR0aW5nX2xpdCAoXywgcmVzdCkgLT5cbiAgICAgICAgbWFrZV9pcHJpbnRmIGsgbyByZXN0XG4gICAgfCBGb3JtYXR0aW5nX2dlbiAoT3Blbl90YWcgKEZvcm1hdCAoZm10JywgXykpLCByZXN0KSAtPlxuICAgICAgICBtYWtlX2lwcmludGYgKGZ1biBrb2MgLT4gbWFrZV9pcHJpbnRmIGsga29jIHJlc3QpIG8gZm10J1xuICAgIHwgRm9ybWF0dGluZ19nZW4gKE9wZW5fYm94IChGb3JtYXQgKGZtdCcsIF8pKSwgcmVzdCkgLT5cbiAgICAgICAgbWFrZV9pcHJpbnRmIChmdW4ga29jIC0+IG1ha2VfaXByaW50ZiBrIGtvYyByZXN0KSBvIGZtdCdcbiAgICB8IEVuZF9vZl9mb3JtYXQgLT5cbiAgICAgICAgayBvXG5hbmQgZm5fb2ZfcGFkZGluZ19wcmVjaXNpb24gOlxuICB0eXBlIHggeSB6IGEgYiBjIGQgZSBmIHN0YXRlLlxuICAoc3RhdGUgLT4gZikgLT4gc3RhdGUgLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPlxuICAoeCwgeSkgcGFkZGluZyAtPiAoeSwgeiAtPiBhKSBwcmVjaXNpb24gLT4geCA9XG4gIGZ1biBrIG8gZm10IHBhZCBwcmVjIC0+IG1hdGNoIHBhZCwgcHJlYyB3aXRoXG4gICAgfCBOb19wYWRkaW5nICAgLCBOb19wcmVjaXNpb24gICAgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KVxuICAgIHwgTm9fcGFkZGluZyAgICwgTGl0X3ByZWNpc2lvbiBfIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIGZtdClcbiAgICB8IE5vX3BhZGRpbmcgICAsIEFyZ19wcmVjaXNpb24gICAtPlxuICAgICAgICBjb25zdCAoY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KSlcbiAgICB8IExpdF9wYWRkaW5nIF8sIE5vX3ByZWNpc2lvbiAgICAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyBmbXQpXG4gICAgfCBMaXRfcGFkZGluZyBfLCBMaXRfcHJlY2lzaW9uIF8gLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KVxuICAgIHwgTGl0X3BhZGRpbmcgXywgQXJnX3ByZWNpc2lvbiAgIC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAobWFrZV9pcHJpbnRmIGsgbyBmbXQpKVxuICAgIHwgQXJnX3BhZGRpbmcgXywgTm9fcHJlY2lzaW9uICAgIC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAobWFrZV9pcHJpbnRmIGsgbyBmbXQpKVxuICAgIHwgQXJnX3BhZGRpbmcgXywgTGl0X3ByZWNpc2lvbiBfIC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAobWFrZV9pcHJpbnRmIGsgbyBmbXQpKVxuICAgIHwgQXJnX3BhZGRpbmcgXywgQXJnX3ByZWNpc2lvbiAgIC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAoY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KSkpXG5hbmQgZm5fb2ZfY3VzdG9tX2FyaXR5IDogdHlwZSB4IHkgYSBiIGMgZCBlIGYgc3RhdGUuXG4gIChzdGF0ZSAtPiBmKSAtPlxuICBzdGF0ZSAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+IChhLCB4LCB5KSBjdXN0b21fYXJpdHkgLT4geSA9XG4gIGZ1biBrIG8gZm10IC0+IGZ1bmN0aW9uXG4gICAgfCBDdXN0b21femVybyAtPlxuICAgICAgICBtYWtlX2lwcmludGYgayBvIGZtdFxuICAgIHwgQ3VzdG9tX3N1Y2MgYXJpdHkgLT5cbiAgICAgICAgY29uc3QgKGZuX29mX2N1c3RvbV9hcml0eSBrIG8gZm10IGFyaXR5KVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBDb250aW51YXRpb25zIGZvciBtYWtlX3ByaW50ZiAqKVxuXG4oKiBSZWN1cnNpdmVseSBvdXRwdXQgYW4gXCJhY2N1bXVsYXRvclwiIGNvbnRhaW5pbmcgYSByZXZlcnNlZCBsaXN0IG9mXG4gICBwcmludGluZyBlbnRpdGllcyAoc3RyaW5nLCBjaGFyLCBmbHVzLCAuLi4pIGluIGFuIG91dHB1dF9zdHJlYW0uICopXG4oKiBVc2VkIGFzIGEgY29udGludWF0aW9uIG9mIG1ha2VfcHJpbnRmLiAqKVxubGV0IHJlYyBvdXRwdXRfYWNjIG8gYWNjID0gbWF0Y2ggYWNjIHdpdGhcbiAgfCBBY2NfZm9ybWF0dGluZ19saXQgKHAsIGZtdGluZ19saXQpIC0+XG4gICAgbGV0IHMgPSBzdHJpbmdfb2ZfZm9ybWF0dGluZ19saXQgZm10aW5nX2xpdCBpblxuICAgIG91dHB1dF9hY2MgbyBwOyBvdXRwdXRfc3RyaW5nIG8gcztcbiAgfCBBY2NfZm9ybWF0dGluZ19nZW4gKHAsIEFjY19vcGVuX3RhZyBhY2MnKSAtPlxuICAgIG91dHB1dF9hY2MgbyBwOyBvdXRwdXRfc3RyaW5nIG8gXCJAe1wiOyBvdXRwdXRfYWNjIG8gYWNjJztcbiAgfCBBY2NfZm9ybWF0dGluZ19nZW4gKHAsIEFjY19vcGVuX2JveCBhY2MnKSAtPlxuICAgIG91dHB1dF9hY2MgbyBwOyBvdXRwdXRfc3RyaW5nIG8gXCJAW1wiOyBvdXRwdXRfYWNjIG8gYWNjJztcbiAgfCBBY2Nfc3RyaW5nX2xpdGVyYWwgKHAsIHMpXG4gIHwgQWNjX2RhdGFfc3RyaW5nIChwLCBzKSAgIC0+IG91dHB1dF9hY2MgbyBwOyBvdXRwdXRfc3RyaW5nIG8gc1xuICB8IEFjY19jaGFyX2xpdGVyYWwgKHAsIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAocCwgYykgICAgIC0+IG91dHB1dF9hY2MgbyBwOyBvdXRwdXRfY2hhciBvIGNcbiAgfCBBY2NfZGVsYXkgKHAsIGYpICAgICAgICAgLT4gb3V0cHV0X2FjYyBvIHA7IGYgb1xuICB8IEFjY19mbHVzaCBwICAgICAgICAgICAgICAtPiBvdXRwdXRfYWNjIG8gcDsgZmx1c2ggb1xuICB8IEFjY19pbnZhbGlkX2FyZyAocCwgbXNnKSAtPiBvdXRwdXRfYWNjIG8gcDsgaW52YWxpZF9hcmcgbXNnO1xuICB8IEVuZF9vZl9hY2MgICAgICAgICAgICAgICAtPiAoKVxuXG4oKiBSZWN1cnNpdmVseSBvdXRwdXQgYW4gXCJhY2N1bXVsYXRvclwiIGNvbnRhaW5pbmcgYSByZXZlcnNlZCBsaXN0IG9mXG4gICBwcmludGluZyBlbnRpdGllcyAoc3RyaW5nLCBjaGFyLCBmbHVzLCAuLi4pIGluIGEgYnVmZmVyLiAqKVxuKCogVXNlZCBhcyBhIGNvbnRpbnVhdGlvbiBvZiBtYWtlX3ByaW50Zi4gKilcbmxldCByZWMgYnVmcHV0X2FjYyBiIGFjYyA9IG1hdGNoIGFjYyB3aXRoXG4gIHwgQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBmbXRpbmdfbGl0KSAtPlxuICAgIGxldCBzID0gc3RyaW5nX29mX2Zvcm1hdHRpbmdfbGl0IGZtdGluZ19saXQgaW5cbiAgICBidWZwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9zdHJpbmcgYiBzO1xuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fdGFnIGFjYycpIC0+XG4gICAgYnVmcHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfc3RyaW5nIGIgXCJAe1wiOyBidWZwdXRfYWNjIGIgYWNjJztcbiAgfCBBY2NfZm9ybWF0dGluZ19nZW4gKHAsIEFjY19vcGVuX2JveCBhY2MnKSAtPlxuICAgIGJ1ZnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX3N0cmluZyBiIFwiQFtcIjsgYnVmcHV0X2FjYyBiIGFjYyc7XG4gIHwgQWNjX3N0cmluZ19saXRlcmFsIChwLCBzKVxuICB8IEFjY19kYXRhX3N0cmluZyAocCwgcykgICAtPiBidWZwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9zdHJpbmcgYiBzXG4gIHwgQWNjX2NoYXJfbGl0ZXJhbCAocCwgYylcbiAgfCBBY2NfZGF0YV9jaGFyIChwLCBjKSAgICAgLT4gYnVmcHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfY2hhciBiIGNcbiAgfCBBY2NfZGVsYXkgKHAsIGYpICAgICAgICAgLT4gYnVmcHV0X2FjYyBiIHA7IGYgYlxuICB8IEFjY19mbHVzaCBwICAgICAgICAgICAgICAtPiBidWZwdXRfYWNjIGIgcDtcbiAgfCBBY2NfaW52YWxpZF9hcmcgKHAsIG1zZykgLT4gYnVmcHV0X2FjYyBiIHA7IGludmFsaWRfYXJnIG1zZztcbiAgfCBFbmRfb2ZfYWNjICAgICAgICAgICAgICAgLT4gKClcblxuKCogUmVjdXJzaXZlbHkgb3V0cHV0IGFuIFwiYWNjdW11bGF0b3JcIiBjb250YWluaW5nIGEgcmV2ZXJzZWQgbGlzdCBvZlxuICAgcHJpbnRpbmcgZW50aXRpZXMgKHN0cmluZywgY2hhciwgZmx1cywgLi4uKSBpbiBhIGJ1ZmZlci4gKilcbigqIERpZmZlciBmcm9tIGJ1ZnB1dF9hY2MgYnkgdGhlIGludGVycHJldGF0aW9uIG9mICVhIGFuZCAldC4gKilcbigqIFVzZWQgYXMgYSBjb250aW51YXRpb24gb2YgbWFrZV9wcmludGYuICopXG5sZXQgcmVjIHN0cnB1dF9hY2MgYiBhY2MgPSBtYXRjaCBhY2Mgd2l0aFxuICB8IEFjY19mb3JtYXR0aW5nX2xpdCAocCwgZm10aW5nX2xpdCkgLT5cbiAgICBsZXQgcyA9IHN0cmluZ19vZl9mb3JtYXR0aW5nX2xpdCBmbXRpbmdfbGl0IGluXG4gICAgc3RycHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfc3RyaW5nIGIgcztcbiAgfCBBY2NfZm9ybWF0dGluZ19nZW4gKHAsIEFjY19vcGVuX3RhZyBhY2MnKSAtPlxuICAgIHN0cnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX3N0cmluZyBiIFwiQHtcIjsgc3RycHV0X2FjYyBiIGFjYyc7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfZ2VuIChwLCBBY2Nfb3Blbl9ib3ggYWNjJykgLT5cbiAgICBzdHJwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9zdHJpbmcgYiBcIkBbXCI7IHN0cnB1dF9hY2MgYiBhY2MnO1xuICB8IEFjY19zdHJpbmdfbGl0ZXJhbCAocCwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKHAsIHMpICAgLT4gc3RycHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfc3RyaW5nIGIgc1xuICB8IEFjY19jaGFyX2xpdGVyYWwgKHAsIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAocCwgYykgICAgIC0+IHN0cnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX2NoYXIgYiBjXG4gIHwgQWNjX2RlbGF5IChwLCBmKSAgICAgICAgIC0+IHN0cnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX3N0cmluZyBiIChmICgpKVxuICB8IEFjY19mbHVzaCBwICAgICAgICAgICAgICAtPiBzdHJwdXRfYWNjIGIgcDtcbiAgfCBBY2NfaW52YWxpZF9hcmcgKHAsIG1zZykgLT4gc3RycHV0X2FjYyBiIHA7IGludmFsaWRfYXJnIG1zZztcbiAgfCBFbmRfb2ZfYWNjICAgICAgICAgICAgICAgLT4gKClcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKCogRXJyb3IgbWFuYWdlbWVudCAqKVxuXG4oKiBSYWlzZSBbRmFpbHVyZV0gd2l0aCBhIHByZXR0eS1wcmludGVkIGVycm9yIG1lc3NhZ2UuICopXG5sZXQgZmFpbHdpdGhfbWVzc2FnZSAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDI1NiBpblxuICBsZXQgayBhY2MgPSBzdHJwdXRfYWNjIGJ1ZiBhY2M7IGZhaWx3aXRoIChCdWZmZXIuY29udGVudHMgYnVmKSBpblxuICBtYWtlX3ByaW50ZiBrIEVuZF9vZl9hY2MgZm10XG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogRm9ybWF0dGluZyB0b29scyAqKVxuXG4oKiBDb252ZXJ0IGEgc3RyaW5nIHRvIGFuIG9wZW4gYmxvY2sgZGVzY3JpcHRpb24gKGluZGVudCwgYmxvY2tfdHlwZSkgKilcbmxldCBvcGVuX2JveF9vZl9zdHJpbmcgc3RyID1cbiAgaWYgc3RyID0gXCJcIiB0aGVuICgwLCBQcF9ib3gpIGVsc2VcbiAgICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzdHIgaW5cbiAgICBsZXQgaW52YWxpZF9ib3ggKCkgPSBmYWlsd2l0aF9tZXNzYWdlIFwiaW52YWxpZCBib3ggZGVzY3JpcHRpb24gJVNcIiBzdHIgaW5cbiAgICBsZXQgcmVjIHBhcnNlX3NwYWNlcyBpID1cbiAgICAgIGlmIGkgPSBsZW4gdGhlbiBpIGVsc2VcbiAgICAgICAgbWF0Y2ggc3RyLltpXSB3aXRoXG4gICAgICAgIHwgJyAnIHwgJ1xcdCcgLT4gcGFyc2Vfc3BhY2VzIChpICsgMSlcbiAgICAgICAgfCBfIC0+IGlcbiAgICBhbmQgcGFyc2VfbHdvcmQgaSBqID1cbiAgICAgIGlmIGogPSBsZW4gdGhlbiBqIGVsc2VcbiAgICAgICAgbWF0Y2ggc3RyLltqXSB3aXRoXG4gICAgICAgIHwgJ2EnIC4uICd6JyAtPiBwYXJzZV9sd29yZCBpIChqICsgMSlcbiAgICAgICAgfCBfIC0+IGpcbiAgICBhbmQgcGFyc2VfaW50IGkgaiA9XG4gICAgICBpZiBqID0gbGVuIHRoZW4gaiBlbHNlXG4gICAgICAgIG1hdGNoIHN0ci5bal0gd2l0aFxuICAgICAgICB8ICcwJyAuLiAnOScgfCAnLScgLT4gcGFyc2VfaW50IGkgKGogKyAxKVxuICAgICAgICB8IF8gLT4gaiBpblxuICAgIGxldCB3c3RhcnQgPSBwYXJzZV9zcGFjZXMgMCBpblxuICAgIGxldCB3ZW5kID0gcGFyc2VfbHdvcmQgd3N0YXJ0IHdzdGFydCBpblxuICAgIGxldCBib3hfbmFtZSA9IFN0cmluZy5zdWIgc3RyIHdzdGFydCAod2VuZCAtIHdzdGFydCkgaW5cbiAgICBsZXQgbnN0YXJ0ID0gcGFyc2Vfc3BhY2VzIHdlbmQgaW5cbiAgICBsZXQgbmVuZCA9IHBhcnNlX2ludCBuc3RhcnQgbnN0YXJ0IGluXG4gICAgbGV0IGluZGVudCA9XG4gICAgICBpZiBuc3RhcnQgPSBuZW5kIHRoZW4gMCBlbHNlXG4gICAgICAgIHRyeSBpbnRfb2Zfc3RyaW5nIChTdHJpbmcuc3ViIHN0ciBuc3RhcnQgKG5lbmQgLSBuc3RhcnQpKVxuICAgICAgICB3aXRoIEZhaWx1cmUgXyAtPiBpbnZhbGlkX2JveCAoKSBpblxuICAgIGxldCBleHBfZW5kID0gcGFyc2Vfc3BhY2VzIG5lbmQgaW5cbiAgICBpZiBleHBfZW5kIDw+IGxlbiB0aGVuIGludmFsaWRfYm94ICgpO1xuICAgIGxldCBib3hfdHlwZSA9IG1hdGNoIGJveF9uYW1lIHdpdGhcbiAgICAgIHwgXCJcIiB8IFwiYlwiIC0+IFBwX2JveFxuICAgICAgfCBcImhcIiAgICAgIC0+IFBwX2hib3hcbiAgICAgIHwgXCJ2XCIgICAgICAtPiBQcF92Ym94XG4gICAgICB8IFwiaHZcIiAgICAgLT4gUHBfaHZib3hcbiAgICAgIHwgXCJob3ZcIiAgICAtPiBQcF9ob3Zib3hcbiAgICAgIHwgXyAgICAgICAgLT4gaW52YWxpZF9ib3ggKCkgaW5cbiAgICAoaW5kZW50LCBib3hfdHlwZSlcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBQYXJzaW5nIHRvb2xzICopXG5cbigqIENyZWF0ZSBhIHBhZGRpbmdfZm10X2ViYiBmcm9tIGEgcGFkZGluZyBhbmQgYSBmb3JtYXQuICopXG4oKiBDb3B5IHRoZSBwYWRkaW5nIHRvIGRpc2pvaW4gdGhlIHR5cGUgcGFyYW1ldGVycyBvZiBhcmd1bWVudCBhbmQgcmVzdWx0LiAqKVxubGV0IG1ha2VfcGFkZGluZ19mbXRfZWJiIDogdHlwZSB4IHkgLlxuICAgICh4LCB5KSBwYWRkaW5nIC0+IChfLCBfLCBfLCBfLCBfLCBfKSBmbXQgLT5cbiAgICAgIChfLCBfLCBfLCBfLCBfKSBwYWRkaW5nX2ZtdF9lYmIgPVxuZnVuIHBhZCBmbXQgLT4gbWF0Y2ggcGFkIHdpdGhcbiAgfCBOb19wYWRkaW5nICAgICAgICAgLT4gUGFkZGluZ19mbXRfRUJCIChOb19wYWRkaW5nLCBmbXQpXG4gIHwgTGl0X3BhZGRpbmcgKHMsIHcpIC0+IFBhZGRpbmdfZm10X0VCQiAoTGl0X3BhZGRpbmcgKHMsIHcpLCBmbXQpXG4gIHwgQXJnX3BhZGRpbmcgcyAgICAgIC0+IFBhZGRpbmdfZm10X0VCQiAoQXJnX3BhZGRpbmcgcywgZm10KVxuXG4oKiBDcmVhdGUgYSBwcmVjaXNpb25fZm10X2ViYiBmcm9tIGEgcHJlY2lzaW9uIGFuZCBhIGZvcm1hdC4gKilcbigqIENvcHkgdGhlIHByZWNpc2lvbiB0byBkaXNqb2luIHRoZSB0eXBlIHBhcmFtZXRlcnMgb2YgYXJndW1lbnQgYW5kIHJlc3VsdC4gKilcbmxldCBtYWtlX3ByZWNpc2lvbl9mbXRfZWJiIDogdHlwZSB4IHkgLlxuICAgICh4LCB5KSBwcmVjaXNpb24gLT4gKF8sIF8sIF8sIF8sIF8sIF8pIGZtdCAtPlxuICAgICAgKF8sIF8sIF8sIF8sIF8pIHByZWNpc2lvbl9mbXRfZWJiID1cbmZ1biBwcmVjIGZtdCAtPiBtYXRjaCBwcmVjIHdpdGhcbiAgfCBOb19wcmVjaXNpb24gICAgLT4gUHJlY2lzaW9uX2ZtdF9FQkIgKE5vX3ByZWNpc2lvbiwgZm10KVxuICB8IExpdF9wcmVjaXNpb24gcCAtPiBQcmVjaXNpb25fZm10X0VCQiAoTGl0X3ByZWNpc2lvbiBwLCBmbXQpXG4gIHwgQXJnX3ByZWNpc2lvbiAgIC0+IFByZWNpc2lvbl9mbXRfRUJCIChBcmdfcHJlY2lzaW9uLCBmbXQpXG5cbigqIENyZWF0ZSBhIHBhZHByZWNfZm10X2ViYiBmcm9tIGEgcGFkZGluZywgYSBwcmVjaXNpb24gYW5kIGEgZm9ybWF0LiAqKVxuKCogQ29weSB0aGUgcGFkZGluZyBhbmQgdGhlIHByZWNpc2lvbiB0byBkaXNqb2luIHR5cGUgcGFyYW1ldGVycyBvZiBhcmd1bWVudHNcbiAgIGFuZCByZXN1bHQuICopXG5sZXQgbWFrZV9wYWRwcmVjX2ZtdF9lYmIgOiB0eXBlIHggeSB6IHQgLlxuICAgICh4LCB5KSBwYWRkaW5nIC0+ICh6LCB0KSBwcmVjaXNpb24gLT5cbiAgICAoXywgXywgXywgXywgXywgXykgZm10IC0+XG4gICAgKF8sIF8sIF8sIF8sIF8pIHBhZHByZWNfZm10X2ViYiA9XG5mdW4gcGFkIHByZWMgZm10IC0+XG4gIGxldCBQcmVjaXNpb25fZm10X0VCQiAocHJlYywgZm10JykgPSBtYWtlX3ByZWNpc2lvbl9mbXRfZWJiIHByZWMgZm10IGluXG4gIG1hdGNoIHBhZCB3aXRoXG4gIHwgTm9fcGFkZGluZyAgICAgICAgIC0+IFBhZHByZWNfZm10X0VCQiAoTm9fcGFkZGluZywgcHJlYywgZm10JylcbiAgfCBMaXRfcGFkZGluZyAocywgdykgLT4gUGFkcHJlY19mbXRfRUJCIChMaXRfcGFkZGluZyAocywgdyksIHByZWMsIGZtdCcpXG4gIHwgQXJnX3BhZGRpbmcgcyAgICAgIC0+IFBhZHByZWNfZm10X0VCQiAoQXJnX3BhZGRpbmcgcywgcHJlYywgZm10JylcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogRm9ybWF0IHBhcnNpbmcgKilcblxuKCogUGFyc2UgYSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgZm9ybWF0IGFuZCBjcmVhdGUgYSBmbXRfZWJiLiAqKVxuKCogUmFpc2UgW0ZhaWx1cmVdIGluIGNhc2Ugb2YgaW52YWxpZCBmb3JtYXQuICopXG5sZXQgZm10X2ViYl9vZl9zdHJpbmcgP2xlZ2FjeV9iZWhhdmlvciBzdHIgPVxuICAoKiBQYXJhbWV0ZXJzIG5hbWluZyBjb252ZW50aW9uOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4gICgqICAgLSBsaXRfc3RhcnQ6IHN0YXJ0IG9mIHRoZSBsaXRlcmFsIHNlcXVlbmNlLiAgICAgICAgICAgICAgICAgICAgKilcbiAgKCogICAtIHN0cl9pbmQ6IGN1cnJlbnQgaW5kZXggaW4gdGhlIHN0cmluZy4gICAgICAgICAgICAgICAgICAgICAgICAqKVxuICAoKiAgIC0gZW5kX2luZDogZW5kIG9mIHRoZSBjdXJyZW50IChzdWItKWZvcm1hdC4gICAgICAgICAgICAgICAgICAgICopXG4gICgqICAgLSBwY3RfaW5kOiBpbmRleCBvZiB0aGUgJyUnIGluIHRoZSBjdXJyZW50IG1pY3JvLWZvcm1hdC4gICAgICAgKilcbiAgKCogICAtIHplcm86ICBpcyB0aGUgJzAnIGZsYWcgZGVmaW5lZCBpbiB0aGUgY3VycmVudCBtaWNyby1mb3JtYXQuICAqKVxuICAoKiAgIC0gbWludXM6IGlzIHRoZSAnLScgZmxhZyBkZWZpbmVkIGluIHRoZSBjdXJyZW50IG1pY3JvLWZvcm1hdC4gICopXG4gICgqICAgLSBwbHVzOiAgaXMgdGhlICcrJyBmbGFnIGRlZmluZWQgaW4gdGhlIGN1cnJlbnQgbWljcm8tZm9ybWF0LiAgKilcbiAgKCogICAtIGhhc2g6ICBpcyB0aGUgJyMnIGZsYWcgZGVmaW5lZCBpbiB0aGUgY3VycmVudCBtaWNyby1mb3JtYXQuICAqKVxuICAoKiAgIC0gc3BhY2U6IGlzIHRoZSAnICcgZmxhZyBkZWZpbmVkIGluIHRoZSBjdXJyZW50IG1pY3JvLWZvcm1hdC4gICopXG4gICgqICAgLSBpZ246ICAgaXMgdGhlICdfJyBmbGFnIGRlZmluZWQgaW4gdGhlIGN1cnJlbnQgbWljcm8tZm9ybWF0LiAgKilcbiAgKCogICAtIHBhZDogcGFkZGluZyBvZiB0aGUgY3VycmVudCBtaWNyby1mb3JtYXQuICAgICAgICAgICAgICAgICAgICAqKVxuICAoKiAgIC0gcHJlYzogcHJlY2lzaW9uIG9mIHRoZSBjdXJyZW50IG1pY3JvLWZvcm1hdC4gICAgICAgICAgICAgICAgICopXG4gICgqICAgLSBzeW1iOiBjaGFyIHJlcHJlc2VudGluZyB0aGUgY29udmVyc2lvbiAoJ2MnLCAncycsICdkJywgLi4uKS4gKilcbiAgKCogICAtIGNoYXJfc2V0OiBzZXQgb2YgY2hhcmFjdGVycyBhcyBiaXRtYXAgKHNlZSBzY2FuZiAlWy4uLl0pLiAgICAqKVxuXG4gIGxldCBsZWdhY3lfYmVoYXZpb3IgPSBtYXRjaCBsZWdhY3lfYmVoYXZpb3Igd2l0aFxuICAgIHwgU29tZSBmbGFnIC0+IGZsYWdcbiAgICB8IE5vbmUgLT4gdHJ1ZVxuICAoKiAgV2hlbiB0aGlzIGZsYWcgaXMgZW5hYmxlZCwgdGhlIGZvcm1hdCBwYXJzZXIgdHJpZXMgdG8gYmVoYXZlIGFzXG4gICAgICB0aGUgPDQuMDIgaW1wbGVtZW50YXRpb25zLCBpbiBwYXJ0aWN1bGFyIGl0IGlnbm9yZXMgbW9zdCBiZW5pbmVcbiAgICAgIG5vbnNlbnNpY2FsIGZvcm1hdC4gV2hlbiB0aGUgZmxhZyBpcyBkaXNhYmxlZCwgaXQgd2lsbCByZWplY3QgYW55XG4gICAgICBmb3JtYXQgdGhhdCBpcyBub3QgYWNjZXB0ZWQgYnkgdGhlIHNwZWNpZmljYXRpb24uXG5cbiAgICAgIEEgdHlwaWNhbCBleGFtcGxlIHdvdWxkIGJlIFwiJSsgZFwiOiBzcGVjaWZ5aW5nIGJvdGggJysnIChpZiB0aGVcbiAgICAgIG51bWJlciBpcyBwb3NpdGl2ZSwgcGFkIHdpdGggYSAnKycgdG8gZ2V0IHRoZSBzYW1lIHdpZHRoIGFzXG4gICAgICBuZWdhdGl2ZSBudW1iZXJzKSBhbmQgJyAnIChpZiB0aGUgbnVtYmVyIGlzIHBvc2l0aXZlLCBwYWQgd2l0aFxuICAgICAgYSBzcGFjZSkgZG9lcyBub3QgbWFrZSBzZW5zZSwgYnV0IHRoZSBsZWdhY3kgKDwgNC4wMilcbiAgICAgIGltcGxlbWVudGF0aW9uIHdhcyBoYXBweSB0byBqdXN0IGlnbm9yZSB0aGUgc3BhY2UuXG4gICopXG4gIGluXG5cbiAgKCogUmFpc2UgW0ZhaWx1cmVdIHdpdGggYSBmcmllbmRseSBlcnJvciBtZXNzYWdlLiAqKVxuICBsZXQgaW52YWxpZF9mb3JtYXRfbWVzc2FnZSBzdHJfaW5kIG1zZyA9XG4gICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogYXQgY2hhcmFjdGVyIG51bWJlciAlZCwgJXNcIlxuICAgICAgc3RyIHN0cl9pbmQgbXNnXG4gIGluXG5cbiAgKCogVXNlZCB3aGVuIHRoZSBlbmQgb2YgdGhlIGZvcm1hdCAob3IgdGhlIGN1cnJlbnQgc3ViLWZvcm1hdCkgd2FzIGVuY291bnRlcmVkXG4gICAgICB1bmV4cGVjdGVkbHkuICopXG4gIGxldCB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZCA9XG4gICAgaW52YWxpZF9mb3JtYXRfbWVzc2FnZSBlbmRfaW5kXG4gICAgICBcInVuZXhwZWN0ZWQgZW5kIG9mIGZvcm1hdFwiXG4gIGluXG5cbiAgKCogVXNlZCBmb3IgJTBjOiBubyBvdGhlciB3aWR0aHMgYXJlIGltcGxlbWVudGVkICopXG4gIGxldCBpbnZhbGlkX25vbm51bGxfY2hhcl93aWR0aCBzdHJfaW5kID1cbiAgICBpbnZhbGlkX2Zvcm1hdF9tZXNzYWdlIHN0cl9pbmRcbiAgICAgIFwibm9uLXplcm8gd2lkdGhzIGFyZSB1bnN1cHBvcnRlZCBmb3IgJWMgY29udmVyc2lvbnNcIlxuICBpblxuICAoKiBSYWlzZSBbRmFpbHVyZV0gd2l0aCBhIGZyaWVuZGx5IGVycm9yIG1lc3NhZ2UgYWJvdXQgYW4gb3B0aW9uIGRlcGVuZGVuY3lcbiAgICAgcHJvYmxlbS4gKilcbiAgbGV0IGludmFsaWRfZm9ybWF0X3dpdGhvdXQgc3RyX2luZCBjIHMgPVxuICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6IGF0IGNoYXJhY3RlciBudW1iZXIgJWQsICclYycgd2l0aG91dCAlc1wiXG4gICAgICBzdHIgc3RyX2luZCBjIHNcbiAgaW5cblxuICAoKiBSYWlzZSBbRmFpbHVyZV0gd2l0aCBhIGZyaWVuZGx5IGVycm9yIG1lc3NhZ2UgYWJvdXQgYW4gdW5leHBlY3RlZFxuICAgICBjaGFyYWN0ZXIuICopXG4gIGxldCBleHBlY3RlZF9jaGFyYWN0ZXIgc3RyX2luZCBleHBlY3RlZCByZWFkID1cbiAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6IGF0IGNoYXJhY3RlciBudW1iZXIgJWQsICVzIGV4cGVjdGVkLCByZWFkICVDXCJcbiAgICAgIHN0ciBzdHJfaW5kIGV4cGVjdGVkIHJlYWRcbiAgaW5cblxuICAoKiBQYXJzZSB0aGUgc3RyaW5nIGZyb20gYmVnX2luZCAoaW5jbHVkZWQpIHRvIGVuZF9pbmQgKGV4Y2x1ZGVkKS4gKilcbiAgbGV0IHJlYyBwYXJzZSA6IHR5cGUgZSBmIC4gaW50IC0+IGludCAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBiZWdfaW5kIGVuZF9pbmQgLT4gcGFyc2VfbGl0ZXJhbCBiZWdfaW5kIGJlZ19pbmQgZW5kX2luZFxuXG4gICgqIFJlYWQgbGl0ZXJhbCBjaGFyYWN0ZXJzIHVwIHRvICclJyBvciAnQCcgc3BlY2lhbCBjaGFyYWN0ZXJzLiAqKVxuICBhbmQgcGFyc2VfbGl0ZXJhbCA6IHR5cGUgZSBmIC4gaW50IC0+IGludCAtPiBpbnQgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gbGl0X3N0YXJ0IHN0cl9pbmQgZW5kX2luZCAtPlxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gYWRkX2xpdGVyYWwgbGl0X3N0YXJ0IHN0cl9pbmQgRW5kX29mX2Zvcm1hdCBlbHNlXG4gICAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICAgIHwgJyUnIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2VfZm9ybWF0IHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgICBhZGRfbGl0ZXJhbCBsaXRfc3RhcnQgc3RyX2luZCBmbXRfcmVzdFxuICAgICAgfCAnQCcgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZV9hZnRlcl9hdCAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgYWRkX2xpdGVyYWwgbGl0X3N0YXJ0IHN0cl9pbmQgZm10X3Jlc3RcbiAgICAgIHwgXyAtPlxuICAgICAgICBwYXJzZV9saXRlcmFsIGxpdF9zdGFydCAoc3RyX2luZCArIDEpIGVuZF9pbmRcblxuICAoKiBQYXJzZSBhIGZvcm1hdCBhZnRlciAnJScgKilcbiAgYW5kIHBhcnNlX2Zvcm1hdCA6IHR5cGUgZSBmIC4gaW50IC0+IGludCAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBwY3RfaW5kIGVuZF9pbmQgLT4gcGFyc2VfaWduIHBjdF9pbmQgKHBjdF9pbmQgKyAxKSBlbmRfaW5kXG5cbiAgYW5kIHBhcnNlX2lnbiA6IHR5cGUgZSBmIC4gaW50IC0+IGludCAtPiBpbnQgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgLT5cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgICAgfCAnXycgLT4gcGFyc2VfZmxhZ3MgcGN0X2luZCAoc3RyX2luZCsxKSBlbmRfaW5kIHRydWVcbiAgICAgIHwgXyAtPiBwYXJzZV9mbGFncyBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBmYWxzZVxuXG4gIGFuZCBwYXJzZV9mbGFncyA6IHR5cGUgZSBmIC4gaW50IC0+IGludCAtPiBpbnQgLT4gYm9vbCAtPiAoXywgXywgZSwgZikgZm10X2ViYlxuICA9XG4gIGZ1biBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBpZ24gLT5cbiAgICBsZXQgemVybyA9IHJlZiBmYWxzZSBhbmQgbWludXMgPSByZWYgZmFsc2VcbiAgICBhbmQgcGx1cyA9IHJlZiBmYWxzZSBhbmQgc3BhY2UgPSByZWYgZmFsc2VcbiAgICBhbmQgaGFzaCA9IHJlZiBmYWxzZSBpblxuICAgIGxldCBzZXRfZmxhZyBzdHJfaW5kIGZsYWcgPVxuICAgICAgKCogaW4gbGVnYWN5IG1vZGUsIGR1cGxpY2F0ZSBmbGFncyBhcmUgYWNjZXB0ZWQgKilcbiAgICAgIGlmICFmbGFnICYmIG5vdCBsZWdhY3lfYmVoYXZpb3IgdGhlblxuICAgICAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogYXQgY2hhcmFjdGVyIG51bWJlciAlZCwgZHVwbGljYXRlIGZsYWcgJUNcIlxuICAgICAgICAgIHN0ciBzdHJfaW5kIHN0ci5bc3RyX2luZF07XG4gICAgICBmbGFnIDo9IHRydWU7XG4gICAgaW5cbiAgICBsZXQgcmVjIHJlYWRfZmxhZ3Mgc3RyX2luZCA9XG4gICAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgYmVnaW4gbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgICB8ICcwJyAtPiBzZXRfZmxhZyBzdHJfaW5kIHplcm87ICByZWFkX2ZsYWdzIChzdHJfaW5kICsgMSlcbiAgICAgIHwgJy0nIC0+IHNldF9mbGFnIHN0cl9pbmQgbWludXM7IHJlYWRfZmxhZ3MgKHN0cl9pbmQgKyAxKVxuICAgICAgfCAnKycgLT4gc2V0X2ZsYWcgc3RyX2luZCBwbHVzOyAgcmVhZF9mbGFncyAoc3RyX2luZCArIDEpXG4gICAgICB8ICcjJyAtPiBzZXRfZmxhZyBzdHJfaW5kIGhhc2g7IHJlYWRfZmxhZ3MgKHN0cl9pbmQgKyAxKVxuICAgICAgfCAnICcgLT4gc2V0X2ZsYWcgc3RyX2luZCBzcGFjZTsgcmVhZF9mbGFncyAoc3RyX2luZCArIDEpXG4gICAgICB8IF8gLT5cbiAgICAgICAgcGFyc2VfcGFkZGluZyBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZFxuICAgICAgICAgICF6ZXJvICFtaW51cyAhcGx1cyAhaGFzaCAhc3BhY2UgaWduXG4gICAgICBlbmRcbiAgICBpblxuICAgIHJlYWRfZmxhZ3Mgc3RyX2luZFxuXG4gICgqIFRyeSB0byByZWFkIGEgZGlnaXRhbCBvciBhICcqJyBwYWRkaW5nLiAqKVxuICBhbmQgcGFyc2VfcGFkZGluZyA6IHR5cGUgZSBmIC5cbiAgICAgIGludCAtPiBpbnQgLT4gaW50IC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+XG4gICAgICAgIChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIHplcm8gbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnbiAtPlxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgbGV0IHBhZHR5ID0gbWF0Y2ggemVybywgbWludXMgd2l0aFxuICAgICAgfCBmYWxzZSwgZmFsc2UgLT4gUmlnaHRcbiAgICAgIHwgZmFsc2UsIHRydWUgIC0+IExlZnRcbiAgICAgIHwgIHRydWUsIGZhbHNlIC0+IFplcm9zXG4gICAgICB8ICB0cnVlLCB0cnVlICAtPlxuICAgICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiBMZWZ0XG4gICAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kICctJyBcIjBcIiBpblxuICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgIHwgJzAnIC4uICc5JyAtPlxuICAgICAgbGV0IG5ld19pbmQsIHdpZHRoID0gcGFyc2VfcG9zaXRpdmUgc3RyX2luZCBlbmRfaW5kIDAgaW5cbiAgICAgIHBhcnNlX2FmdGVyX3BhZGRpbmcgcGN0X2luZCBuZXdfaW5kIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnblxuICAgICAgICAoTGl0X3BhZGRpbmcgKHBhZHR5LCB3aWR0aCkpXG4gICAgfCAnKicgLT5cbiAgICAgIHBhcnNlX2FmdGVyX3BhZGRpbmcgcGN0X2luZCAoc3RyX2luZCArIDEpIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlXG4gICAgICAgIGlnbiAoQXJnX3BhZGRpbmcgcGFkdHkpXG4gICAgfCBfIC0+XG4gICAgICBiZWdpbiBtYXRjaCBwYWR0eSB3aXRoXG4gICAgICB8IExlZnQgIC0+XG4gICAgICAgIGlmIG5vdCBsZWdhY3lfYmVoYXZpb3IgdGhlblxuICAgICAgICAgIGludmFsaWRfZm9ybWF0X3dpdGhvdXQgKHN0cl9pbmQgLSAxKSAnLScgXCJwYWRkaW5nXCI7XG4gICAgICAgIHBhcnNlX2FmdGVyX3BhZGRpbmcgcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnblxuICAgICAgICAgIE5vX3BhZGRpbmdcbiAgICAgIHwgWmVyb3MgLT5cbiAgICAgICAgICgqIGEgJzAnIHBhZGRpbmcgaW5kaWNhdGlvbiBub3QgZm9sbG93ZWQgYnkgYW55dGhpbmcgc2hvdWxkXG4gICAgICAgICAgIGJlIGludGVycHJldGVkIGFzIGEgUmlnaHQgcGFkZGluZyBvZiB3aWR0aCAwLiBUaGlzIGlzIHVzZWRcbiAgICAgICAgICAgYnkgc2Nhbm5pbmcgY29udmVyc2lvbnMgJTBzIGFuZCAlMGMgKilcbiAgICAgICAgcGFyc2VfYWZ0ZXJfcGFkZGluZyBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduXG4gICAgICAgICAgKExpdF9wYWRkaW5nIChSaWdodCwgMCkpXG4gICAgICB8IFJpZ2h0IC0+XG4gICAgICAgIHBhcnNlX2FmdGVyX3BhZGRpbmcgcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnblxuICAgICAgICAgIE5vX3BhZGRpbmdcbiAgICAgIGVuZFxuXG4gICgqIElzIHByZWNpc2lvbiBkZWZpbmVkPyAqKVxuICBhbmQgcGFyc2VfYWZ0ZXJfcGFkZGluZyA6IHR5cGUgeCBlIGYgLlxuICAgICAgaW50IC0+IGludCAtPiBpbnQgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+XG4gICAgICAgICh4LCBfKSBwYWRkaW5nIC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ24gcGFkIC0+XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICB8ICcuJyAtPlxuICAgICAgcGFyc2VfcHJlY2lzaW9uIHBjdF9pbmQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ25cbiAgICAgICAgcGFkXG4gICAgfCBzeW1iIC0+XG4gICAgICBwYXJzZV9jb252ZXJzaW9uIHBjdF9pbmQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIHBsdXMgaGFzaCBzcGFjZSBpZ24gcGFkXG4gICAgICAgIE5vX3ByZWNpc2lvbiBwYWQgc3ltYlxuXG4gICgqIFJlYWQgdGhlIGRpZ2l0YWwgb3IgJyonIHByZWNpc2lvbi4gKilcbiAgYW5kIHBhcnNlX3ByZWNpc2lvbiA6IHR5cGUgeCBlIGYgLlxuICAgICAgaW50IC0+IGludCAtPiBpbnQgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+XG4gICAgICAgICh4LCBfKSBwYWRkaW5nIC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ24gcGFkIC0+XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICBsZXQgcGFyc2VfbGl0ZXJhbCBtaW51cyBzdHJfaW5kID1cbiAgICAgIGxldCBuZXdfaW5kLCBwcmVjID0gcGFyc2VfcG9zaXRpdmUgc3RyX2luZCBlbmRfaW5kIDAgaW5cbiAgICAgIHBhcnNlX2FmdGVyX3ByZWNpc2lvbiBwY3RfaW5kIG5ld19pbmQgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduXG4gICAgICAgIHBhZCAoTGl0X3ByZWNpc2lvbiBwcmVjKSBpblxuICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgIHwgJzAnIC4uICc5JyAtPiBwYXJzZV9saXRlcmFsIG1pbnVzIHN0cl9pbmRcbiAgICB8ICgnKycgfCAnLScpIGFzIHN5bWIgd2hlbiBsZWdhY3lfYmVoYXZpb3IgLT5cbiAgICAgICgqIExlZ2FjeSBtb2RlIHdvdWxkIGFjY2VwdCBhbmQgaWdub3JlICcrJyBvciAnLScgYmVmb3JlIHRoZVxuICAgICAgICAgaW50ZWdlciBkZXNjcmliaW5nIHRoZSBkZXNpcmVkIHByZWNpc2lvbjsgbm90ZSB0aGF0IHRoaXNcbiAgICAgICAgIGNhbm5vdCBoYXBwZW4gZm9yIHBhZGRpbmcgd2lkdGgsIGFzICcrJyBhbmQgJy0nIGFscmVhZHkgaGF2ZVxuICAgICAgICAgYSBzZW1hbnRpY3MgdGhlcmUuXG5cbiAgICAgICAgIFRoYXQgc2FpZCwgdGhlIGlkZWEgKHN1cHBvcnRlZCBieSB0aGlzIHR3ZWFrKSB0aGF0IHdpZHRoIGFuZFxuICAgICAgICAgcHJlY2lzaW9uIGxpdGVyYWxzIGFyZSBcImludGVnZXIgbGl0ZXJhbHNcIiBpbiB0aGUgT0NhbWwgc2Vuc2UgaXNcbiAgICAgICAgIHN0aWxsIGJsYXRhbnRseSB3cm9uZywgYXMgMTIzXzQ1NiBvciAweEZGIGFyZSByZWplY3RlZC4gKilcbiAgICAgIHBhcnNlX2xpdGVyYWwgKG1pbnVzIHx8IHN5bWIgPSAnLScpIChzdHJfaW5kICsgMSlcbiAgICB8ICcqJyAtPlxuICAgICAgcGFyc2VfYWZ0ZXJfcHJlY2lzaW9uIHBjdF9pbmQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZVxuICAgICAgICBpZ24gcGFkIEFyZ19wcmVjaXNpb25cbiAgICB8IF8gLT5cbiAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuXG4gICAgICAgICgqIG5vdGUgdGhhdCBsZWdhY3kgaW1wbGVtZW50YXRpb24gZGlkIG5vdCBpZ25vcmUgJy4nIHdpdGhvdXRcbiAgICAgICAgICAgYSBudW1iZXIgKGFzIGl0IGRvZXMgZm9yIHBhZGRpbmcgaW5kaWNhdGlvbnMpLCBidXRcbiAgICAgICAgICAgaW50ZXJwcmV0cyBpdCBhcyAnLjAnICopXG4gICAgICAgIHBhcnNlX2FmdGVyX3ByZWNpc2lvbiBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduXG4gICAgICAgICAgcGFkIChMaXRfcHJlY2lzaW9uIDApXG4gICAgICBlbHNlXG4gICAgICAgIGludmFsaWRfZm9ybWF0X3dpdGhvdXQgKHN0cl9pbmQgLSAxKSAnLicgXCJwcmVjaXNpb25cIlxuXG4gICgqIFRyeSB0byByZWFkIHRoZSBjb252ZXJzaW9uLiAqKVxuICBhbmQgcGFyc2VfYWZ0ZXJfcHJlY2lzaW9uIDogdHlwZSB4IHkgeiB0IGUgZiAuXG4gICAgICBpbnQgLT4gaW50IC0+IGludCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT5cbiAgICAgICAgKHgsIHkpIHBhZGRpbmcgLT4gKHosIHQpIHByZWNpc2lvbiAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduIHBhZCBwcmVjIC0+XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICBsZXQgcGFyc2VfY29udiAodHlwZSB1KSAodHlwZSB2KSAocGFkcHJlYyA6ICh1LCB2KSBwYWRkaW5nKSA9XG4gICAgICBwYXJzZV9jb252ZXJzaW9uIHBjdF9pbmQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIHBsdXMgaGFzaCBzcGFjZSBpZ24gcGFkXG4gICAgICAgIHByZWMgcGFkcHJlYyBzdHIuW3N0cl9pbmRdIGluXG4gICAgKCogaW4gbGVnYWN5IG1vZGUsIHNvbWUgZm9ybWF0cyAoJXMgYW5kICVTKSBhY2NlcHQgYSB3ZWlyZCBtaXggb2ZcbiAgICAgICBwYWRkaW5nIGFuZCBwcmVjaXNpb24sIHdoaWNoIGlzIG1lcmdlZCBhcyBhIHNpbmdsZSBwYWRkaW5nXG4gICAgICAgaW5mb3JtYXRpb24uIEZvciBleGFtcGxlLCBpbiAlLjEwcyB0aGUgcHJlY2lzaW9uIGlzIGltcGxpY2l0bHlcbiAgICAgICB1bmRlcnN0b29kIGFzIHBhZGRpbmcgJTEwcywgYnV0IHRoZSBsZWZ0LXBhZGRpbmcgY29tcG9uZW50IG1heVxuICAgICAgIGJlIHNwZWNpZmllZCBlaXRoZXIgYXMgYSBsZWZ0IHBhZGRpbmcgb3IgYSBuZWdhdGl2ZSBwcmVjaXNpb246XG4gICAgICAgJS0uM3MgYW5kICUuLTNzIGFyZSBlcXVpdmFsZW50IHRvICUtM3MgKilcbiAgICBtYXRjaCBwYWQgd2l0aFxuICAgIHwgTm9fcGFkZGluZyAtPiAoXG4gICAgICBtYXRjaCBtaW51cywgcHJlYyB3aXRoXG4gICAgICAgIHwgXywgTm9fcHJlY2lzaW9uIC0+IHBhcnNlX2NvbnYgTm9fcGFkZGluZ1xuICAgICAgICB8IGZhbHNlLCBMaXRfcHJlY2lzaW9uIG4gLT4gcGFyc2VfY29udiAoTGl0X3BhZGRpbmcgKFJpZ2h0LCBuKSlcbiAgICAgICAgfCB0cnVlLCBMaXRfcHJlY2lzaW9uIG4gLT4gcGFyc2VfY29udiAoTGl0X3BhZGRpbmcgKExlZnQsIG4pKVxuICAgICAgICB8IGZhbHNlLCBBcmdfcHJlY2lzaW9uIC0+IHBhcnNlX2NvbnYgKEFyZ19wYWRkaW5nIFJpZ2h0KVxuICAgICAgICB8IHRydWUsIEFyZ19wcmVjaXNpb24gLT4gcGFyc2VfY29udiAoQXJnX3BhZGRpbmcgTGVmdClcbiAgICApXG4gICAgfCBwYWQgLT4gcGFyc2VfY29udiBwYWRcblxuICAoKiBDYXNlIGFuYWx5c2lzIG9uIGNvbnZlcnNpb24uICopXG4gIGFuZCBwYXJzZV9jb252ZXJzaW9uIDogdHlwZSB4IHkgeiB0IHUgdiBlIGYgLlxuICAgICAgaW50IC0+IGludCAtPiBpbnQgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiAoeCwgeSkgcGFkZGluZyAtPlxuICAgICAgICAoeiwgdCkgcHJlY2lzaW9uIC0+ICh1LCB2KSBwYWRkaW5nIC0+IGNoYXIgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgcGx1cyBoYXNoIHNwYWNlIGlnbiBwYWQgcHJlYyBwYWRwcmVjIHN5bWIgLT5cbiAgICAoKiBGbGFncyB1c2VkIHRvIGNoZWNrIG9wdGlvbiB1c2FnZXMvY29tcGF0aWJpbGl0aWVzLiAqKVxuICAgIGxldCBwbHVzX3VzZWQgID0gcmVmIGZhbHNlIGFuZCBoYXNoX3VzZWQgPSByZWYgZmFsc2VcbiAgICBhbmQgc3BhY2VfdXNlZCA9IHJlZiBmYWxzZSBhbmQgaWduX3VzZWQgICA9IHJlZiBmYWxzZVxuICAgIGFuZCBwYWRfdXNlZCAgID0gcmVmIGZhbHNlIGFuZCBwcmVjX3VzZWQgID0gcmVmIGZhbHNlIGluXG5cbiAgICAoKiBBY2Nlc3MgdG8gb3B0aW9ucywgdXBkYXRlIGZsYWdzLiAqKVxuICAgIGxldCBnZXRfcGx1cyAgICAoKSA9IHBsdXNfdXNlZCAgOj0gdHJ1ZTsgcGx1c1xuICAgIGFuZCBnZXRfaGFzaCAgICgpID0gaGFzaF91c2VkIDo9IHRydWU7IGhhc2hcbiAgICBhbmQgZ2V0X3NwYWNlICAgKCkgPSBzcGFjZV91c2VkIDo9IHRydWU7IHNwYWNlXG4gICAgYW5kIGdldF9pZ24gICAgICgpID0gaWduX3VzZWQgICA6PSB0cnVlOyBpZ25cbiAgICBhbmQgZ2V0X3BhZCAgICAgKCkgPSBwYWRfdXNlZCAgIDo9IHRydWU7IHBhZFxuICAgIGFuZCBnZXRfcHJlYyAgICAoKSA9IHByZWNfdXNlZCAgOj0gdHJ1ZTsgcHJlY1xuICAgIGFuZCBnZXRfcGFkcHJlYyAoKSA9IHBhZF91c2VkICAgOj0gdHJ1ZTsgcGFkcHJlYyBpblxuXG4gICAgbGV0IGdldF9pbnRfcGFkICgpIDogKHgseSkgcGFkZGluZyA9XG4gICAgICAoKiAlNS4zZCBpcyBhY2NlcHRlZCBhbmQgbWVhbmluZ2Z1bDogcGFkIHRvIGxlbmd0aCA1IHdpdGhcbiAgICAgICAgIHNwYWNlcywgYnV0IGZpcnN0IHBhZCB3aXRoIHplcm9zIHVwdG8gbGVuZ3RoIDMgKDAtcGFkZGluZ1xuICAgICAgICAgaXMgdGhlIGludGVycHJldGF0aW9uIG9mIFwicHJlY2lzaW9uXCIgZm9yIGludGVnZXIgZm9ybWF0cykuXG5cbiAgICAgICAgICUwNS4zZCBpcyByZWR1bmRhbnQ6IHBhZCB0byBsZW5ndGggNSAqd2l0aCB6ZXJvcyosIGJ1dFxuICAgICAgICAgZmlyc3QgcGFkIHdpdGggemVyb3MuLi4gVG8gYWRkIGluc3VsdCB0byB0aGUgaW5qdXJ5LCB0aGVcbiAgICAgICAgIGxlZ2FjeSBpbXBsZW1lbnRhdGlvbiBpZ25vcmVzIHRoZSAwLXBhZGRpbmcgaW5kaWNhdGlvbiBhbmRcbiAgICAgICAgIGRvZXMgdGhlIDUgcGFkZGluZyB3aXRoIHNwYWNlcyBpbnN0ZWFkLiBXZSByZXVzZSB0aGlzXG4gICAgICAgICBpbnRlcnByZXRhdGlvbiBmb3IgY29tcGF0aWJpbGl0eSwgYnV0IHN0YXRpY2FsbHkgcmVqZWN0IHRoaXNcbiAgICAgICAgIGZvcm1hdCB3aGVuIHRoZSBsZWdhY3kgbW9kZSBpcyBkaXNhYmxlZCwgdG8gcHJvdGVjdCBzdHJpY3RcbiAgICAgICAgIHVzZXJzIGZyb20gdGhpcyBjb3JuZXIgY2FzZS4gKilcbiAgICAgICBtYXRjaCBnZXRfcGFkICgpLCBnZXRfcHJlYyAoKSB3aXRoXG4gICAgICAgICB8IHBhZCwgTm9fcHJlY2lzaW9uIC0+IHBhZFxuICAgICAgICAgfCBOb19wYWRkaW5nLCBfICAgICAtPiBOb19wYWRkaW5nXG4gICAgICAgICB8IExpdF9wYWRkaW5nIChaZXJvcywgbiksIF8gLT5cbiAgICAgICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gTGl0X3BhZGRpbmcgKFJpZ2h0LCBuKVxuICAgICAgICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCAnMCcgXCJwcmVjaXNpb25cIlxuICAgICAgICAgfCBBcmdfcGFkZGluZyBaZXJvcywgXyAtPlxuICAgICAgICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiBBcmdfcGFkZGluZyBSaWdodFxuICAgICAgICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCAnMCcgXCJwcmVjaXNpb25cIlxuICAgICAgICAgfCBMaXRfcGFkZGluZyBfIGFzIHBhZCwgXyAtPiBwYWRcbiAgICAgICAgIHwgQXJnX3BhZGRpbmcgXyBhcyBwYWQsIF8gLT4gcGFkIGluXG5cbiAgICAoKiBDaGVjayB0aGF0IHBhZHR5IDw+IFplcm9zLiAqKVxuICAgIGxldCBjaGVja19ub18wIHN5bWIgKHR5cGUgYSBiKSAocGFkIDogKGEsIGIpIHBhZGRpbmcpIDogKGEsYikgcGFkZGluZyA9XG4gICAgICBtYXRjaCBwYWQgd2l0aFxuICAgICAgfCBOb19wYWRkaW5nIC0+IHBhZFxuICAgICAgfCBMaXRfcGFkZGluZyAoKExlZnQgfCBSaWdodCksIF8pIC0+IHBhZFxuICAgICAgfCBBcmdfcGFkZGluZyAoTGVmdCB8IFJpZ2h0KSAtPiBwYWRcbiAgICAgIHwgTGl0X3BhZGRpbmcgKFplcm9zLCB3aWR0aCkgLT5cbiAgICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gTGl0X3BhZGRpbmcgKFJpZ2h0LCB3aWR0aClcbiAgICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcIjBcIlxuICAgICAgfCBBcmdfcGFkZGluZyBaZXJvcyAtPlxuICAgICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiBBcmdfcGFkZGluZyBSaWdodFxuICAgICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiMFwiXG4gICAgaW5cblxuICAgICgqIEdldCBwYWRkaW5nIGFzIGEgcGFkX29wdGlvbiAoc2VlIFwiJV9cIiwgXCIle1wiLCBcIiUoXCIgYW5kIFwiJVtcIikuXG4gICAgICAgKG5vIG5lZWQgZm9yIGxlZ2FjeSBtb2RlIHR3ZWFraW5nLCB0aG9zZSB3ZXJlIHJlamVjdGVkIGJ5IHRoZVxuICAgICAgIGxlZ2FjeSBwYXJzZXIgYXMgd2VsbCkgKilcbiAgICBsZXQgb3B0X29mX3BhZCBjICh0eXBlIGEpICh0eXBlIGIpIChwYWQgOiAoYSwgYikgcGFkZGluZykgPSBtYXRjaCBwYWQgd2l0aFxuICAgICAgfCBOb19wYWRkaW5nIC0+IE5vbmVcbiAgICAgIHwgTGl0X3BhZGRpbmcgKFJpZ2h0LCB3aWR0aCkgLT4gU29tZSB3aWR0aFxuICAgICAgfCBMaXRfcGFkZGluZyAoWmVyb3MsIHdpZHRoKSAtPlxuICAgICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiBTb21lIHdpZHRoXG4gICAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIGMgXCInMCdcIlxuICAgICAgfCBMaXRfcGFkZGluZyAoTGVmdCwgd2lkdGgpIC0+XG4gICAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuIFNvbWUgd2lkdGhcbiAgICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgYyBcIictJ1wiXG4gICAgICB8IEFyZ19wYWRkaW5nIF8gLT4gaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIGMgXCInKidcIlxuICAgIGluXG4gICAgbGV0IGdldF9wYWRfb3B0IGMgPSBvcHRfb2ZfcGFkIGMgKGdldF9wYWQgKCkpIGluXG4gICAgbGV0IGdldF9wYWRwcmVjX29wdCBjID0gb3B0X29mX3BhZCBjIChnZXRfcGFkcHJlYyAoKSkgaW5cblxuICAgICgqIEdldCBwcmVjaXNpb24gYXMgYSBwcmVjX29wdGlvbiAoc2VlIFwiJV9mXCIpLlxuICAgICAgIChubyBuZWVkIGZvciBsZWdhY3kgbW9kZSB0d2Vha2luZywgdGhvc2Ugd2VyZSByZWplY3RlZCBieSB0aGVcbiAgICAgICBsZWdhY3kgcGFyc2VyIGFzIHdlbGwpICopXG4gICAgbGV0IGdldF9wcmVjX29wdCAoKSA9IG1hdGNoIGdldF9wcmVjICgpIHdpdGhcbiAgICAgIHwgTm9fcHJlY2lzaW9uICAgICAgIC0+IE5vbmVcbiAgICAgIHwgTGl0X3ByZWNpc2lvbiBuZGVjIC0+IFNvbWUgbmRlY1xuICAgICAgfCBBcmdfcHJlY2lzaW9uICAgICAgLT4gaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kICdfJyBcIicqJ1wiXG4gICAgaW5cblxuICAgIGxldCBmbXRfcmVzdWx0ID0gbWF0Y2ggc3ltYiB3aXRoXG4gICAgfCAnLCcgLT5cbiAgICAgIHBhcnNlIHN0cl9pbmQgZW5kX2luZFxuICAgIHwgJ2MnIC0+XG4gICAgICBsZXQgY2hhcl9mb3JtYXQgZm10X3Jlc3QgPSAoKiAlYyAqKVxuICAgICAgICBpZiBnZXRfaWduICgpXG4gICAgICAgIHRoZW4gRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoSWdub3JlZF9jaGFyLCBmbXRfcmVzdCkpXG4gICAgICAgIGVsc2UgRm10X0VCQiAoQ2hhciBmbXRfcmVzdClcbiAgICAgIGluXG4gICAgICBsZXQgc2Nhbl9mb3JtYXQgZm10X3Jlc3QgPSAoKiAlMGMgKilcbiAgICAgICAgaWYgZ2V0X2lnbiAoKVxuICAgICAgICB0aGVuIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKElnbm9yZWRfc2Nhbl9uZXh0X2NoYXIsIGZtdF9yZXN0KSlcbiAgICAgICAgZWxzZSBGbXRfRUJCIChTY2FuX25leHRfY2hhciBmbXRfcmVzdClcbiAgICAgIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgYmVnaW4gbWF0Y2ggZ2V0X3BhZF9vcHQgJ2MnIHdpdGhcbiAgICAgICAgfCBOb25lIC0+IGNoYXJfZm9ybWF0IGZtdF9yZXN0XG4gICAgICAgIHwgU29tZSAwIC0+IHNjYW5fZm9ybWF0IGZtdF9yZXN0XG4gICAgICAgIHwgU29tZSBfbiAtPlxuICAgICAgICAgICBpZiBub3QgbGVnYWN5X2JlaGF2aW9yXG4gICAgICAgICAgIHRoZW4gaW52YWxpZF9ub25udWxsX2NoYXJfd2lkdGggc3RyX2luZFxuICAgICAgICAgICBlbHNlICgqIGxlZ2FjeSBpZ25vcmVzICVjIHdpZHRocyAqKSBjaGFyX2Zvcm1hdCBmbXRfcmVzdFxuICAgICAgZW5kXG4gICAgfCAnQycgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW4gRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoSWdub3JlZF9jYW1sX2NoYXIsZm10X3Jlc3QpKVxuICAgICAgZWxzZSBGbXRfRUJCIChDYW1sX2NoYXIgZm10X3Jlc3QpXG4gICAgfCAncycgLT5cbiAgICAgIGxldCBwYWQgPSBjaGVja19ub18wIHN5bWIgKGdldF9wYWRwcmVjICgpKSBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfc3RyaW5nIChnZXRfcGFkcHJlY19vcHQgJ18nKSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBQYWRkaW5nX2ZtdF9FQkIgKHBhZCcsIGZtdF9yZXN0JykgPVxuICAgICAgICAgIG1ha2VfcGFkZGluZ19mbXRfZWJiIHBhZCBmbXRfcmVzdCBpblxuICAgICAgICBGbXRfRUJCIChTdHJpbmcgKHBhZCcsIGZtdF9yZXN0JykpXG4gICAgfCAnUycgLT5cbiAgICAgIGxldCBwYWQgPSBjaGVja19ub18wIHN5bWIgKGdldF9wYWRwcmVjICgpKSBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfY2FtbF9zdHJpbmcgKGdldF9wYWRwcmVjX29wdCAnXycpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IFBhZGRpbmdfZm10X0VCQiAocGFkJywgZm10X3Jlc3QnKSA9XG4gICAgICAgICAgbWFrZV9wYWRkaW5nX2ZtdF9lYmIgcGFkIGZtdF9yZXN0IGluXG4gICAgICAgIEZtdF9FQkIgKENhbWxfc3RyaW5nIChwYWQnLCBmbXRfcmVzdCcpKVxuICAgIHwgJ2QnIHwgJ2knIHwgJ3gnIHwgJ1gnIHwgJ28nIHwgJ3UnIC0+XG4gICAgICBsZXQgaWNvbnYgPSBjb21wdXRlX2ludF9jb252IHBjdF9pbmQgc3RyX2luZCAoZ2V0X3BsdXMgKCkpIChnZXRfaGFzaCAoKSlcbiAgICAgICAgKGdldF9zcGFjZSAoKSkgc3ltYiBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfaW50IChpY29udiwgZ2V0X3BhZF9vcHQgJ18nKSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBQYWRwcmVjX2ZtdF9FQkIgKHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpID1cbiAgICAgICAgICBtYWtlX3BhZHByZWNfZm10X2ViYiAoZ2V0X2ludF9wYWQgKCkpIChnZXRfcHJlYyAoKSkgZm10X3Jlc3QgaW5cbiAgICAgICAgRm10X0VCQiAoSW50IChpY29udiwgcGFkJywgcHJlYycsIGZtdF9yZXN0JykpXG4gICAgfCAnTicgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBsZXQgY291bnRlciA9IFRva2VuX2NvdW50ZXIgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfc2Nhbl9nZXRfY291bnRlciBjb3VudGVyIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgRm10X0VCQiAoU2Nhbl9nZXRfY291bnRlciAoY291bnRlciwgZm10X3Jlc3QpKVxuICAgIHwgJ2wnIHwgJ24nIHwgJ0wnIHdoZW4gc3RyX2luZD1lbmRfaW5kIHx8IG5vdCAoaXNfaW50X2Jhc2Ugc3RyLltzdHJfaW5kXSkgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBsZXQgY291bnRlciA9IGNvdW50ZXJfb2ZfY2hhciBzeW1iIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX3NjYW5fZ2V0X2NvdW50ZXIgY291bnRlciBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIEZtdF9FQkIgKFNjYW5fZ2V0X2NvdW50ZXIgKGNvdW50ZXIsIGZtdF9yZXN0KSlcbiAgICB8ICdsJyAtPlxuICAgICAgbGV0IGljb252ID1cbiAgICAgICAgY29tcHV0ZV9pbnRfY29udiBwY3RfaW5kIChzdHJfaW5kICsgMSkgKGdldF9wbHVzICgpKSAoZ2V0X2hhc2ggKCkpXG4gICAgICAgICAgKGdldF9zcGFjZSAoKSkgc3RyLltzdHJfaW5kXSBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfaW50MzIgKGljb252LCBnZXRfcGFkX29wdCAnXycpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IFBhZHByZWNfZm10X0VCQiAocGFkJywgcHJlYycsIGZtdF9yZXN0JykgPVxuICAgICAgICAgIG1ha2VfcGFkcHJlY19mbXRfZWJiIChnZXRfaW50X3BhZCAoKSkgKGdldF9wcmVjICgpKSBmbXRfcmVzdCBpblxuICAgICAgICBGbXRfRUJCIChJbnQzMiAoaWNvbnYsIHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpKVxuICAgIHwgJ24nIC0+XG4gICAgICBsZXQgaWNvbnYgPVxuICAgICAgICBjb21wdXRlX2ludF9jb252IHBjdF9pbmQgKHN0cl9pbmQgKyAxKSAoZ2V0X3BsdXMgKCkpXG4gICAgICAgICAgKGdldF9oYXNoICgpKSAoZ2V0X3NwYWNlICgpKSBzdHIuW3N0cl9pbmRdIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9uYXRpdmVpbnQgKGljb252LCBnZXRfcGFkX29wdCAnXycpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IFBhZHByZWNfZm10X0VCQiAocGFkJywgcHJlYycsIGZtdF9yZXN0JykgPVxuICAgICAgICAgIG1ha2VfcGFkcHJlY19mbXRfZWJiIChnZXRfaW50X3BhZCAoKSkgKGdldF9wcmVjICgpKSBmbXRfcmVzdCBpblxuICAgICAgICBGbXRfRUJCIChOYXRpdmVpbnQgKGljb252LCBwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSlcbiAgICB8ICdMJyAtPlxuICAgICAgbGV0IGljb252ID1cbiAgICAgICAgY29tcHV0ZV9pbnRfY29udiBwY3RfaW5kIChzdHJfaW5kICsgMSkgKGdldF9wbHVzICgpKSAoZ2V0X2hhc2ggKCkpXG4gICAgICAgICAgKGdldF9zcGFjZSAoKSkgc3RyLltzdHJfaW5kXSBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfaW50NjQgKGljb252LCBnZXRfcGFkX29wdCAnXycpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IFBhZHByZWNfZm10X0VCQiAocGFkJywgcHJlYycsIGZtdF9yZXN0JykgPVxuICAgICAgICAgIG1ha2VfcGFkcHJlY19mbXRfZWJiIChnZXRfaW50X3BhZCAoKSkgKGdldF9wcmVjICgpKSBmbXRfcmVzdCBpblxuICAgICAgICBGbXRfRUJCIChJbnQ2NCAoaWNvbnYsIHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpKVxuICAgIHwgJ2YnIHwgJ2UnIHwgJ0UnIHwgJ2cnIHwgJ0cnIHwgJ0YnIHwgJ2gnIHwgJ0gnIC0+XG4gICAgICBsZXQgZmNvbnYgPVxuICAgICAgICBjb21wdXRlX2Zsb2F0X2NvbnYgcGN0X2luZCBzdHJfaW5kXG4gICAgICAgICAgKGdldF9wbHVzICgpKSAoZ2V0X2hhc2ggKCkpIChnZXRfc3BhY2UgKCkpIHN5bWIgaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX2Zsb2F0IChnZXRfcGFkX29wdCAnXycsIGdldF9wcmVjX29wdCAoKSkgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgUGFkcHJlY19mbXRfRUJCIChwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSA9XG4gICAgICAgICAgbWFrZV9wYWRwcmVjX2ZtdF9lYmIgKGdldF9wYWQgKCkpIChnZXRfcHJlYyAoKSkgZm10X3Jlc3QgaW5cbiAgICAgICAgRm10X0VCQiAoRmxvYXQgKGZjb252LCBwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSlcbiAgICB8ICdiJyB8ICdCJyAtPlxuICAgICAgbGV0IHBhZCA9IGNoZWNrX25vXzAgc3ltYiAoZ2V0X3BhZHByZWMgKCkpIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9ib29sIChnZXRfcGFkcHJlY19vcHQgJ18nKSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBQYWRkaW5nX2ZtdF9FQkIgKHBhZCcsIGZtdF9yZXN0JykgPVxuICAgICAgICAgIG1ha2VfcGFkZGluZ19mbXRfZWJiIHBhZCBmbXRfcmVzdCBpblxuICAgICAgICBGbXRfRUJCIChCb29sIChwYWQnLCBmbXRfcmVzdCcpKVxuICAgIHwgJ2EnIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgRm10X0VCQiAoQWxwaGEgZm10X3Jlc3QpXG4gICAgfCAndCcgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBGbXRfRUJCIChUaGV0YSBmbXRfcmVzdClcbiAgICB8ICdyJyAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlbiBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChJZ25vcmVkX3JlYWRlciwgZm10X3Jlc3QpKVxuICAgICAgZWxzZSBGbXRfRUJCIChSZWFkZXIgZm10X3Jlc3QpXG4gICAgfCAnIScgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBGbXRfRUJCIChGbHVzaCBmbXRfcmVzdClcbiAgICB8ICgnJScgfCAnQCcpIGFzIGMgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBGbXRfRUJCIChDaGFyX2xpdGVyYWwgKGMsIGZtdF9yZXN0KSlcbiAgICB8ICd7JyAtPlxuICAgICAgbGV0IHN1Yl9lbmQgPSBzZWFyY2hfc3ViZm9ybWF0X2VuZCBzdHJfaW5kIGVuZF9pbmQgJ30nIGluXG4gICAgICBsZXQgRm10X0VCQiBzdWJfZm10ID0gcGFyc2Ugc3RyX2luZCBzdWJfZW5kIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdWJfZW5kICsgMikgZW5kX2luZCBpblxuICAgICAgbGV0IHN1Yl9mbXR0eSA9IGZtdHR5X29mX2ZtdCBzdWJfZm10IGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX2Zvcm1hdF9hcmcgKGdldF9wYWRfb3B0ICdfJywgc3ViX2ZtdHR5KSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdF9hcmcgKGdldF9wYWRfb3B0ICd7Jywgc3ViX2ZtdHR5LCBmbXRfcmVzdCkpXG4gICAgfCAnKCcgLT5cbiAgICAgIGxldCBzdWJfZW5kID0gc2VhcmNoX3N1YmZvcm1hdF9lbmQgc3RyX2luZCBlbmRfaW5kICcpJyBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3ViX2VuZCArIDIpIGVuZF9pbmQgaW5cbiAgICAgIGxldCBGbXRfRUJCIHN1Yl9mbXQgPSBwYXJzZSBzdHJfaW5kIHN1Yl9lbmQgaW5cbiAgICAgIGxldCBzdWJfZm10dHkgPSBmbXR0eV9vZl9mbXQgc3ViX2ZtdCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9mb3JtYXRfc3Vic3QgKGdldF9wYWRfb3B0ICdfJywgc3ViX2ZtdHR5KSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdF9zdWJzdCAoZ2V0X3BhZF9vcHQgJygnLCBzdWJfZm10dHksIGZtdF9yZXN0KSlcbiAgICB8ICdbJyAtPlxuICAgICAgbGV0IG5leHRfaW5kLCBjaGFyX3NldCA9IHBhcnNlX2NoYXJfc2V0IHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBuZXh0X2luZCBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX3NjYW5fY2hhcl9zZXQgKGdldF9wYWRfb3B0ICdfJywgY2hhcl9zZXQpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgRm10X0VCQiAoU2Nhbl9jaGFyX3NldCAoZ2V0X3BhZF9vcHQgJ1snLCBjaGFyX3NldCwgZm10X3Jlc3QpKVxuICAgIHwgJy0nIHwgJysnIHwgJyMnIHwgJyAnIHwgJ18nIC0+XG4gICAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6IGF0IGNoYXJhY3RlciBudW1iZXIgJWQsIFxcXG4gICAgICAgICBmbGFnICVDIGlzIG9ubHkgYWxsb3dlZCBhZnRlciB0aGUgJyUlJywgYmVmb3JlIHBhZGRpbmcgYW5kIHByZWNpc2lvblwiXG4gICAgICAgIHN0ciBwY3RfaW5kIHN5bWJcbiAgICB8IF8gLT5cbiAgICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogYXQgY2hhcmFjdGVyIG51bWJlciAlZCwgXFxcbiAgICAgICAgIGludmFsaWQgY29udmVyc2lvbiBcXFwiJSUlY1xcXCJcIiBzdHIgKHN0cl9pbmQgLSAxKSBzeW1iXG4gICAgaW5cbiAgICAoKiBDaGVjayBmb3IgdW51c2VkIG9wdGlvbnMsIGFuZCByZWplY3QgdGhlbSBhcyBpbmNvbXBhdGlibGUuXG5cbiAgICAgICBTdWNoIGNoZWNrcyBuZWVkIHRvIGJlIGRpc2FibGVkIGluIGxlZ2FjeSBtb2RlLCBhcyB0aGUgbGVnYWN5XG4gICAgICAgcGFyc2VyIHNpbGVudGx5IGlnbm9yZWQgaW5jb21wYXRpYmxlIGZsYWdzLiAqKVxuICAgIGlmIG5vdCBsZWdhY3lfYmVoYXZpb3IgdGhlbiBiZWdpblxuICAgIGlmIG5vdCAhcGx1c191c2VkICYmIHBsdXMgdGhlblxuICAgICAgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIHN5bWIgXCInKydcIjtcbiAgICBpZiBub3QgIWhhc2hfdXNlZCAmJiBoYXNoIHRoZW5cbiAgICAgIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiJyMnXCI7XG4gICAgaWYgbm90ICFzcGFjZV91c2VkICYmIHNwYWNlIHRoZW5cbiAgICAgIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiJyAnXCI7XG4gICAgaWYgbm90ICFwYWRfdXNlZCAgJiYgUGFkZGluZ19FQkIgcGFkIDw+IFBhZGRpbmdfRUJCIE5vX3BhZGRpbmcgdGhlblxuICAgICAgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIHN5bWIgXCJgcGFkZGluZydcIjtcbiAgICBpZiBub3QgIXByZWNfdXNlZCAmJiBQcmVjaXNpb25fRUJCIHByZWMgPD4gUHJlY2lzaW9uX0VCQiBOb19wcmVjaXNpb24gdGhlblxuICAgICAgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIChpZiBpZ24gdGhlbiAnXycgZWxzZSBzeW1iKVxuICAgICAgICBcImBwcmVjaXNpb24nXCI7XG4gICAgaWYgaWduICYmIHBsdXMgdGhlbiBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgJ18nIFwiJysnXCI7XG4gICAgZW5kO1xuICAgICgqIHRoaXMgbGFzdCB0ZXN0IG11c3Qgbm90IGJlIGRpc2FibGVkIGluIGxlZ2FjeSBtb2RlLFxuICAgICAgIGFzIGlnbm9yaW5nIGl0IHdvdWxkIHR5cGljYWxseSByZXN1bHQgaW4gYSBkaWZmZXJlbnQgdHlwaW5nXG4gICAgICAgdGhhbiB3aGF0IHRoZSBsZWdhY3kgcGFyc2VyIHVzZWQgKilcbiAgICBpZiBub3QgIWlnbl91c2VkICYmIGlnbiB0aGVuXG4gICAgICBiZWdpbiBtYXRjaCBzeW1iIHdpdGhcbiAgICAgICAgKCogYXJndW1lbnQtbGVzcyBmb3JtYXRzIGNhbiBzYWZlbHkgYmUgaWdub3JlZCBpbiBsZWdhY3kgbW9kZSAqKVxuICAgICAgICB8ICgnQCcgfCAnJScgfCAnIScgfCAnLCcpIHdoZW4gbGVnYWN5X2JlaGF2aW9yIC0+ICgpXG4gICAgICAgIHwgXyAtPlxuICAgICAgICAgIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiJ18nXCJcbiAgICAgIGVuZDtcbiAgICBmbXRfcmVzdWx0XG5cbiAgKCogUGFyc2UgZm9ybWF0dGluZyBpbmZvcm1hdGlvbiAoYWZ0ZXIgJ0AnKS4gKilcbiAgYW5kIHBhcnNlX2FmdGVyX2F0IDogdHlwZSBlIGYgLiBpbnQgLT4gaW50IC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHN0cl9pbmQgZW5kX2luZCAtPlxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gRm10X0VCQiAoQ2hhcl9saXRlcmFsICgnQCcsIEVuZF9vZl9mb3JtYXQpKVxuICAgIGVsc2VcbiAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgICAgfCAnWycgLT5cbiAgICAgICAgcGFyc2VfdGFnIGZhbHNlIChzdHJfaW5kICsgMSkgZW5kX2luZFxuICAgICAgfCAnXScgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKENsb3NlX2JveCwgZm10X3Jlc3QpKVxuICAgICAgfCAneycgLT5cbiAgICAgICAgcGFyc2VfdGFnIHRydWUgKHN0cl9pbmQgKyAxKSBlbmRfaW5kXG4gICAgICB8ICd9JyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoQ2xvc2VfdGFnLCBmbXRfcmVzdCkpXG4gICAgICB8ICcsJyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoQnJlYWsgKFwiQCxcIiwgMCwgMCksIGZtdF9yZXN0KSlcbiAgICAgIHwgJyAnIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChCcmVhayAoXCJAIFwiLCAxLCAwKSwgZm10X3Jlc3QpKVxuICAgICAgfCAnOycgLT5cbiAgICAgICAgcGFyc2VfZ29vZF9icmVhayAoc3RyX2luZCArIDEpIGVuZF9pbmRcbiAgICAgIHwgJz8nIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChGRmx1c2gsIGZtdF9yZXN0KSlcbiAgICAgIHwgJ1xcbicgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKEZvcmNlX25ld2xpbmUsIGZtdF9yZXN0KSlcbiAgICAgIHwgJy4nIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChGbHVzaF9uZXdsaW5lLCBmbXRfcmVzdCkpXG4gICAgICB8ICc8JyAtPlxuICAgICAgICBwYXJzZV9tYWdpY19zaXplIChzdHJfaW5kICsgMSkgZW5kX2luZFxuICAgICAgfCAnQCcgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKEVzY2FwZWRfYXQsIGZtdF9yZXN0KSlcbiAgICAgIHwgJyUnIHdoZW4gc3RyX2luZCArIDEgPCBlbmRfaW5kICYmIHN0ci5bc3RyX2luZCArIDFdID0gJyUnIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAyKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChFc2NhcGVkX3BlcmNlbnQsIGZtdF9yZXN0KSlcbiAgICAgIHwgJyUnIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKENoYXJfbGl0ZXJhbCAoJ0AnLCBmbXRfcmVzdCkpXG4gICAgICB8IGMgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKFNjYW5faW5kaWMgYywgZm10X3Jlc3QpKVxuXG4gICgqIFRyeSB0byByZWFkIHRoZSBvcHRpb25hbCA8bmFtZT4gYWZ0ZXIgXCJAe1wiIG9yIFwiQFtcIi4gKilcbiAgYW5kIHBhcnNlX3RhZyA6IHR5cGUgZSBmIC4gYm9vbCAtPiBpbnQgLT4gaW50IC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIGlzX29wZW5fdGFnIHN0cl9pbmQgZW5kX2luZCAtPlxuICAgIHRyeVxuICAgICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiByYWlzZSBOb3RfZm91bmQ7XG4gICAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICAgIHwgJzwnIC0+XG4gICAgICAgIGxldCBpbmQgPSBTdHJpbmcuaW5kZXhfZnJvbSBzdHIgKHN0cl9pbmQgKyAxKSAnPicgaW5cbiAgICAgICAgaWYgaW5kID49IGVuZF9pbmQgdGhlbiByYWlzZSBOb3RfZm91bmQ7XG4gICAgICAgIGxldCBzdWJfc3RyID0gU3RyaW5nLnN1YiBzdHIgc3RyX2luZCAoaW5kIC0gc3RyX2luZCArIDEpIGluXG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKGluZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgbGV0IEZtdF9FQkIgc3ViX2ZtdCA9IHBhcnNlIHN0cl9pbmQgKGluZCArIDEpIGluXG4gICAgICAgIGxldCBzdWJfZm9ybWF0ID0gRm9ybWF0IChzdWJfZm10LCBzdWJfc3RyKSBpblxuICAgICAgICBsZXQgZm9ybWF0dGluZyA9XG4gICAgICAgICAgaWYgaXNfb3Blbl90YWcgdGhlbiBPcGVuX3RhZyBzdWJfZm9ybWF0IGVsc2UgT3Blbl9ib3ggc3ViX2Zvcm1hdCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2dlbiAoZm9ybWF0dGluZywgZm10X3Jlc3QpKVxuICAgICAgfCBfIC0+XG4gICAgICAgIHJhaXNlIE5vdF9mb3VuZFxuICAgIHdpdGggTm90X2ZvdW5kIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgbGV0IHN1Yl9mb3JtYXQgPSBGb3JtYXQgKEVuZF9vZl9mb3JtYXQsIFwiXCIpIGluXG4gICAgICBsZXQgZm9ybWF0dGluZyA9XG4gICAgICAgIGlmIGlzX29wZW5fdGFnIHRoZW4gT3Blbl90YWcgc3ViX2Zvcm1hdCBlbHNlIE9wZW5fYm94IHN1Yl9mb3JtYXQgaW5cbiAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfZ2VuIChmb3JtYXR0aW5nLCBmbXRfcmVzdCkpXG5cbiAgKCogVHJ5IHRvIHJlYWQgdGhlIG9wdGlvbmFsIDx3aWR0aCBvZmZzZXQ+IGFmdGVyIFwiQDtcIi4gKilcbiAgYW5kIHBhcnNlX2dvb2RfYnJlYWsgOiB0eXBlIGUgZiAuIGludCAtPiBpbnQgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gc3RyX2luZCBlbmRfaW5kIC0+XG4gICAgbGV0IG5leHRfaW5kLCBmb3JtYXR0aW5nX2xpdCA9XG4gICAgICB0cnlcbiAgICAgICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgfHwgc3RyLltzdHJfaW5kXSA8PiAnPCcgdGhlbiByYWlzZSBOb3RfZm91bmQ7XG4gICAgICAgIGxldCBzdHJfaW5kXzEgPSBwYXJzZV9zcGFjZXMgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF8xXSB3aXRoXG4gICAgICAgIHwgJzAnIC4uICc5JyB8ICctJyAtPiAoXG4gICAgICAgICAgbGV0IHN0cl9pbmRfMiwgd2lkdGggPSBwYXJzZV9pbnRlZ2VyIHN0cl9pbmRfMSBlbmRfaW5kIGluXG4gICAgICAgICAgICBsZXQgc3RyX2luZF8zID0gcGFyc2Vfc3BhY2VzIHN0cl9pbmRfMiBlbmRfaW5kIGluXG4gICAgICAgICAgICBtYXRjaCBzdHIuW3N0cl9pbmRfM10gd2l0aFxuICAgICAgICAgICAgICB8ICc+JyAtPlxuICAgICAgICAgICAgICAgIGxldCBzID0gU3RyaW5nLnN1YiBzdHIgKHN0cl9pbmQtMikgKHN0cl9pbmRfMy1zdHJfaW5kKzMpIGluXG4gICAgICAgICAgICAgICAgc3RyX2luZF8zICsgMSwgQnJlYWsgKHMsIHdpZHRoLCAwKVxuICAgICAgICAgICAgICB8ICcwJyAuLiAnOScgfCAnLScgLT5cbiAgICAgICAgICAgICAgICBsZXQgc3RyX2luZF80LCBvZmZzZXQgPSBwYXJzZV9pbnRlZ2VyIHN0cl9pbmRfMyBlbmRfaW5kIGluXG4gICAgICAgICAgICAgICAgbGV0IHN0cl9pbmRfNSA9IHBhcnNlX3NwYWNlcyBzdHJfaW5kXzQgZW5kX2luZCBpblxuICAgICAgICAgICAgICAgIGlmIHN0ci5bc3RyX2luZF81XSA8PiAnPicgdGhlbiByYWlzZSBOb3RfZm91bmQ7XG4gICAgICAgICAgICAgICAgbGV0IHMgPSBTdHJpbmcuc3ViIHN0ciAoc3RyX2luZC0yKSAoc3RyX2luZF81LXN0cl9pbmQrMykgaW5cbiAgICAgICAgICAgICAgICBzdHJfaW5kXzUgKyAxLCBCcmVhayAocywgd2lkdGgsIG9mZnNldClcbiAgICAgICAgICAgICAgfCBfIC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgICApXG4gICAgICAgIHwgXyAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgIHdpdGggTm90X2ZvdW5kIHwgRmFpbHVyZSBfIC0+XG4gICAgICAgIHN0cl9pbmQsIEJyZWFrIChcIkA7XCIsIDEsIDApXG4gICAgaW5cbiAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIG5leHRfaW5kIGVuZF9pbmQgaW5cbiAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoZm9ybWF0dGluZ19saXQsIGZtdF9yZXN0KSlcblxuICAoKiBQYXJzZSB0aGUgc2l6ZSBpbiBhIDxuPi4gKilcbiAgYW5kIHBhcnNlX21hZ2ljX3NpemUgOiB0eXBlIGUgZiAuIGludCAtPiBpbnQgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gc3RyX2luZCBlbmRfaW5kIC0+XG4gICAgbWF0Y2hcbiAgICAgIHRyeVxuICAgICAgICBsZXQgc3RyX2luZF8xID0gcGFyc2Vfc3BhY2VzIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgICBtYXRjaCBzdHIuW3N0cl9pbmRfMV0gd2l0aFxuICAgICAgICB8ICcwJyAuLiAnOScgfCAnLScgLT5cbiAgICAgICAgICBsZXQgc3RyX2luZF8yLCBzaXplID0gcGFyc2VfaW50ZWdlciBzdHJfaW5kXzEgZW5kX2luZCBpblxuICAgICAgICAgIGxldCBzdHJfaW5kXzMgPSBwYXJzZV9zcGFjZXMgc3RyX2luZF8yIGVuZF9pbmQgaW5cbiAgICAgICAgICBpZiBzdHIuW3N0cl9pbmRfM10gPD4gJz4nIHRoZW4gcmFpc2UgTm90X2ZvdW5kO1xuICAgICAgICAgIGxldCBzID0gU3RyaW5nLnN1YiBzdHIgKHN0cl9pbmQgLSAyKSAoc3RyX2luZF8zIC0gc3RyX2luZCArIDMpIGluXG4gICAgICAgICAgU29tZSAoc3RyX2luZF8zICsgMSwgTWFnaWNfc2l6ZSAocywgc2l6ZSkpXG4gICAgICAgIHwgXyAtPiBOb25lXG4gICAgICB3aXRoIE5vdF9mb3VuZCB8IEZhaWx1cmUgXyAtPlxuICAgICAgICBOb25lXG4gICAgd2l0aFxuICAgIHwgU29tZSAobmV4dF9pbmQsIGZvcm1hdHRpbmdfbGl0KSAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBuZXh0X2luZCBlbmRfaW5kIGluXG4gICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoZm9ybWF0dGluZ19saXQsIGZtdF9yZXN0KSlcbiAgICB8IE5vbmUgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoU2Nhbl9pbmRpYyAnPCcsIGZtdF9yZXN0KSlcblxuICAoKiBQYXJzZSBhbmQgY29uc3RydWN0IGEgY2hhciBzZXQuICopXG4gIGFuZCBwYXJzZV9jaGFyX3NldCBzdHJfaW5kIGVuZF9pbmQgPVxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG5cbiAgICBsZXQgY2hhcl9zZXQgPSBjcmVhdGVfY2hhcl9zZXQgKCkgaW5cbiAgICBsZXQgYWRkX2NoYXIgYyA9XG4gICAgICBhZGRfaW5fY2hhcl9zZXQgY2hhcl9zZXQgYztcbiAgICBpblxuICAgIGxldCBhZGRfcmFuZ2UgYyBjJyA9XG4gICAgICBmb3IgaSA9IGludF9vZl9jaGFyIGMgdG8gaW50X29mX2NoYXIgYycgZG9cbiAgICAgICAgYWRkX2luX2NoYXJfc2V0IGNoYXJfc2V0IChjaGFyX29mX2ludCBpKTtcbiAgICAgIGRvbmU7XG4gICAgaW5cblxuICAgIGxldCBmYWlsX3NpbmdsZV9wZXJjZW50IHN0cl9pbmQgPVxuICAgICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgICBcImludmFsaWQgZm9ybWF0ICVTOiAnJSUnIGFsb25lIGlzIG5vdCBhY2NlcHRlZCBpbiBjaGFyYWN0ZXIgc2V0cywgXFxcbiAgICAgICAgIHVzZSAlJSUlIGluc3RlYWQgYXQgcG9zaXRpb24gJWQuXCIgc3RyIHN0cl9pbmRcbiAgICBpblxuXG4gICAgKCogUGFyc2UgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBhIGNoYXIgc2V0LiAqKVxuICAgIGxldCByZWMgcGFyc2VfY2hhcl9zZXRfc3RhcnQgc3RyX2luZCBlbmRfaW5kID1cbiAgICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgICBsZXQgYyA9IHN0ci5bc3RyX2luZF0gaW5cbiAgICAgIHBhcnNlX2NoYXJfc2V0X2FmdGVyX2NoYXIgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGNcblxuICAgICgqIFBhcnNlIHRoZSBjb250ZW50IG9mIGEgY2hhciBzZXQgdW50aWwgdGhlIGZpcnN0ICddJy4gKilcbiAgICBhbmQgcGFyc2VfY2hhcl9zZXRfY29udGVudCBzdHJfaW5kIGVuZF9pbmQgPVxuICAgICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgICAgfCAnXScgLT5cbiAgICAgICAgc3RyX2luZCArIDFcbiAgICAgIHwgJy0nIC0+XG4gICAgICAgIGFkZF9jaGFyICctJztcbiAgICAgICAgcGFyc2VfY2hhcl9zZXRfY29udGVudCAoc3RyX2luZCArIDEpIGVuZF9pbmRcbiAgICAgIHwgYyAtPlxuICAgICAgICBwYXJzZV9jaGFyX3NldF9hZnRlcl9jaGFyIChzdHJfaW5kICsgMSkgZW5kX2luZCBjXG5cbiAgICAoKiBUZXN0IGZvciByYW5nZSBpbiBjaGFyIHNldC4gKilcbiAgICBhbmQgcGFyc2VfY2hhcl9zZXRfYWZ0ZXJfY2hhciBzdHJfaW5kIGVuZF9pbmQgYyA9XG4gICAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgICB8ICddJyAtPlxuICAgICAgICBhZGRfY2hhciBjO1xuICAgICAgICBzdHJfaW5kICsgMVxuICAgICAgfCAnLScgLT5cbiAgICAgICAgcGFyc2VfY2hhcl9zZXRfYWZ0ZXJfbWludXMgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGNcbiAgICAgIHwgKCclJyB8ICdAJykgYXMgYycgd2hlbiBjID0gJyUnIC0+XG4gICAgICAgIGFkZF9jaGFyIGMnO1xuICAgICAgICBwYXJzZV9jaGFyX3NldF9jb250ZW50IChzdHJfaW5kICsgMSkgZW5kX2luZFxuICAgICAgfCBjJyAtPlxuICAgICAgICBpZiBjID0gJyUnIHRoZW4gZmFpbF9zaW5nbGVfcGVyY2VudCBzdHJfaW5kO1xuICAgICAgICAoKiBub3RlIHRoYXQgJ0AnIGFsb25lIGlzIGFjY2VwdGVkLCBhcyBkb25lIGJ5IHRoZSBsZWdhY3lcbiAgICAgICAgICAgaW1wbGVtZW50YXRpb247IHRoZSBkb2N1bWVudGF0aW9uIHNwZWNpZmljYWxseSByZXF1aXJlcyAlQFxuICAgICAgICAgICBzbyB3ZSBjb3VsZCB3YXJuIG9uIHRoYXQgKilcbiAgICAgICAgYWRkX2NoYXIgYztcbiAgICAgICAgcGFyc2VfY2hhcl9zZXRfYWZ0ZXJfY2hhciAoc3RyX2luZCArIDEpIGVuZF9pbmQgYydcblxuICAgICgqIE1hbmFnZSByYW5nZSBpbiBjaGFyIHNldCAoZXhjZXB0IGlmIHRoZSAnLScgdGhlIGxhc3QgY2hhciBiZWZvcmUgJ10nKSAqKVxuICAgIGFuZCBwYXJzZV9jaGFyX3NldF9hZnRlcl9taW51cyBzdHJfaW5kIGVuZF9pbmQgYyA9XG4gICAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgICB8ICddJyAtPlxuICAgICAgICBhZGRfY2hhciBjO1xuICAgICAgICBhZGRfY2hhciAnLSc7XG4gICAgICAgIHN0cl9pbmQgKyAxXG4gICAgICB8ICclJyAtPlxuICAgICAgICBpZiBzdHJfaW5kICsgMSA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgICAgYmVnaW4gbWF0Y2ggc3RyLltzdHJfaW5kICsgMV0gd2l0aFxuICAgICAgICAgIHwgKCclJyB8ICdAJykgYXMgYycgLT5cbiAgICAgICAgICAgIGFkZF9yYW5nZSBjIGMnO1xuICAgICAgICAgICAgcGFyc2VfY2hhcl9zZXRfY29udGVudCAoc3RyX2luZCArIDIpIGVuZF9pbmRcbiAgICAgICAgICB8IF8gLT4gZmFpbF9zaW5nbGVfcGVyY2VudCBzdHJfaW5kXG4gICAgICAgIGVuZFxuICAgICAgfCBjJyAtPlxuICAgICAgICBhZGRfcmFuZ2UgYyBjJztcbiAgICAgICAgcGFyc2VfY2hhcl9zZXRfY29udGVudCAoc3RyX2luZCArIDEpIGVuZF9pbmRcbiAgICBpblxuICAgIGxldCBzdHJfaW5kLCByZXZlcnNlID1cbiAgICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICAgICAgfCAnXicgLT4gc3RyX2luZCArIDEsIHRydWVcbiAgICAgICAgfCBfIC0+IHN0cl9pbmQsIGZhbHNlIGluXG4gICAgbGV0IG5leHRfaW5kID0gcGFyc2VfY2hhcl9zZXRfc3RhcnQgc3RyX2luZCBlbmRfaW5kIGluXG4gICAgbGV0IGNoYXJfc2V0ID0gZnJlZXplX2NoYXJfc2V0IGNoYXJfc2V0IGluXG4gICAgbmV4dF9pbmQsIChpZiByZXZlcnNlIHRoZW4gcmV2X2NoYXJfc2V0IGNoYXJfc2V0IGVsc2UgY2hhcl9zZXQpXG5cbiAgKCogQ29uc3VtZSBhbGwgbmV4dCBzcGFjZXMsIHJhaXNlIGFuIEZhaWx1cmUgaWYgZW5kX2luZCBpcyByZWFjaGVkLiAqKVxuICBhbmQgcGFyc2Vfc3BhY2VzIHN0cl9pbmQgZW5kX2luZCA9XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICBpZiBzdHIuW3N0cl9pbmRdID0gJyAnIHRoZW4gcGFyc2Vfc3BhY2VzIChzdHJfaW5kICsgMSkgZW5kX2luZCBlbHNlIHN0cl9pbmRcblxuICAoKiBSZWFkIGEgcG9zaXRpdmUgaW50ZWdlciBmcm9tIHRoZSBzdHJpbmcsIHJhaXNlIGEgRmFpbHVyZSBpZiBlbmRfaW5kIGlzXG4gICAgIHJlYWNoZWQuICopXG4gIGFuZCBwYXJzZV9wb3NpdGl2ZSBzdHJfaW5kIGVuZF9pbmQgYWNjID1cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgIHwgJzAnIC4uICc5JyBhcyBjIC0+XG4gICAgICBsZXQgbmV3X2FjYyA9IGFjYyAqIDEwICsgKGludF9vZl9jaGFyIGMgLSBpbnRfb2ZfY2hhciAnMCcpIGluXG4gICAgICBpZiBuZXdfYWNjID4gU3lzLm1heF9zdHJpbmdfbGVuZ3RoIHRoZW5cbiAgICAgICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6IGludGVnZXIgJWQgaXMgZ3JlYXRlciB0aGFuIHRoZSBsaW1pdCAlZFwiXG4gICAgICAgICAgc3RyIG5ld19hY2MgU3lzLm1heF9zdHJpbmdfbGVuZ3RoXG4gICAgICBlbHNlXG4gICAgICAgIHBhcnNlX3Bvc2l0aXZlIChzdHJfaW5kICsgMSkgZW5kX2luZCBuZXdfYWNjXG4gICAgfCBfIC0+IHN0cl9pbmQsIGFjY1xuXG4gICgqIFJlYWQgYSBwb3NpdGl2ZSBvciBuZWdhdGl2ZSBpbnRlZ2VyIGZyb20gdGhlIHN0cmluZywgcmFpc2UgYSBGYWlsdXJlXG4gICAgIGlmIGVuZF9pbmQgaXMgcmVhY2hlZC4gKilcbiAgYW5kIHBhcnNlX2ludGVnZXIgc3RyX2luZCBlbmRfaW5kID1cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgIHwgJzAnIC4uICc5JyAtPiBwYXJzZV9wb3NpdGl2ZSBzdHJfaW5kIGVuZF9pbmQgMFxuICAgIHwgJy0nIC0+IChcbiAgICAgIGlmIHN0cl9pbmQgKyAxID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kICsgMV0gd2l0aFxuICAgICAgfCAnMCcgLi4gJzknIC0+XG4gICAgICAgIGxldCBuZXh0X2luZCwgbiA9IHBhcnNlX3Bvc2l0aXZlIChzdHJfaW5kICsgMSkgZW5kX2luZCAwIGluXG4gICAgICAgIG5leHRfaW5kLCAtblxuICAgICAgfCBjIC0+XG4gICAgICAgIGV4cGVjdGVkX2NoYXJhY3RlciAoc3RyX2luZCArIDEpIFwiZGlnaXRcIiBjXG4gICAgKVxuICAgIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxuICAoKiBBZGQgYSBsaXRlcmFsIHRvIGEgZm9ybWF0IGZyb20gYSBsaXRlcmFsIGNoYXJhY3RlciBzdWItc2VxdWVuY2UuICopXG4gIGFuZCBhZGRfbGl0ZXJhbCA6IHR5cGUgYSBkIGUgZiAuXG4gICAgICBpbnQgLT4gaW50IC0+IChhLCBfLCBfLCBkLCBlLCBmKSBmbXQgLT5cbiAgICAgIChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIGxpdF9zdGFydCBzdHJfaW5kIGZtdCAtPiBtYXRjaCBzdHJfaW5kIC0gbGl0X3N0YXJ0IHdpdGhcbiAgICB8IDAgICAgLT4gRm10X0VCQiBmbXRcbiAgICB8IDEgICAgLT4gRm10X0VCQiAoQ2hhcl9saXRlcmFsIChzdHIuW2xpdF9zdGFydF0sIGZtdCkpXG4gICAgfCBzaXplIC0+IEZtdF9FQkIgKFN0cmluZ19saXRlcmFsIChTdHJpbmcuc3ViIHN0ciBsaXRfc3RhcnQgc2l6ZSwgZm10KSlcblxuICAoKiBTZWFyY2ggdGhlIGVuZCBvZiB0aGUgY3VycmVudCBzdWItZm9ybWF0XG4gICAgIChpLmUuIHRoZSBjb3JyZXNwb25kaW5nIFwiJX1cIiBvciBcIiUpXCIpICopXG4gIGFuZCBzZWFyY2hfc3ViZm9ybWF0X2VuZCBzdHJfaW5kIGVuZF9pbmQgYyA9XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlblxuICAgICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgICBcImludmFsaWQgZm9ybWF0ICVTOiB1bmNsb3NlZCBzdWItZm9ybWF0LCBcXFxuICAgICAgICAgZXhwZWN0ZWQgXFxcIiUlJWNcXFwiIGF0IGNoYXJhY3RlciBudW1iZXIgJWRcIiBzdHIgYyBlbmRfaW5kO1xuICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgIHwgJyUnIC0+XG4gICAgICBpZiBzdHJfaW5kICsgMSA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgIGlmIHN0ci5bc3RyX2luZCArIDFdID0gYyB0aGVuICgqIEVuZCBvZiBmb3JtYXQgZm91bmQgKikgc3RyX2luZCBlbHNlXG4gICAgICAgIGJlZ2luIG1hdGNoIHN0ci5bc3RyX2luZCArIDFdIHdpdGhcbiAgICAgICAgfCAnXycgLT5cbiAgICAgICAgICAoKiBTZWFyY2ggZm9yIFwiJV8oXCIgb3IgXCIlX3tcIi4gKilcbiAgICAgICAgICBpZiBzdHJfaW5kICsgMiA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgICAgICBiZWdpbiBtYXRjaCBzdHIuW3N0cl9pbmQgKyAyXSB3aXRoXG4gICAgICAgICAgfCAneycgLT5cbiAgICAgICAgICAgIGxldCBzdWJfZW5kID0gc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN0cl9pbmQgKyAzKSBlbmRfaW5kICd9JyBpblxuICAgICAgICAgICAgc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN1Yl9lbmQgKyAyKSBlbmRfaW5kIGNcbiAgICAgICAgICB8ICcoJyAtPlxuICAgICAgICAgICAgbGV0IHN1Yl9lbmQgPSBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3RyX2luZCArIDMpIGVuZF9pbmQgJyknIGluXG4gICAgICAgICAgICBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3ViX2VuZCArIDIpIGVuZF9pbmQgY1xuICAgICAgICAgIHwgXyAtPiBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3RyX2luZCArIDMpIGVuZF9pbmQgY1xuICAgICAgICAgIGVuZFxuICAgICAgICB8ICd7JyAtPlxuICAgICAgICAgICgqICV7Li4uJX0gc3ViLWZvcm1hdCBmb3VuZC4gKilcbiAgICAgICAgICBsZXQgc3ViX2VuZCA9IHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdHJfaW5kICsgMikgZW5kX2luZCAnfScgaW5cbiAgICAgICAgICBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3ViX2VuZCArIDIpIGVuZF9pbmQgY1xuICAgICAgICB8ICcoJyAtPlxuICAgICAgICAgICgqICUoLi4uJSkgc3ViLWZvcm1hdCBmb3VuZC4gKilcbiAgICAgICAgICBsZXQgc3ViX2VuZCA9IHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdHJfaW5kICsgMikgZW5kX2luZCAnKScgaW5cbiAgICAgICAgICBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3ViX2VuZCArIDIpIGVuZF9pbmQgY1xuICAgICAgICB8ICd9JyAtPlxuICAgICAgICAgICgqIEVycm9yOiAlKC4uLiV9LiAqKVxuICAgICAgICAgIGV4cGVjdGVkX2NoYXJhY3RlciAoc3RyX2luZCArIDEpIFwiY2hhcmFjdGVyICcpJ1wiICd9J1xuICAgICAgICB8ICcpJyAtPlxuICAgICAgICAgICgqIEVycm9yOiAley4uLiUpLiAqKVxuICAgICAgICAgIGV4cGVjdGVkX2NoYXJhY3RlciAoc3RyX2luZCArIDEpIFwiY2hhcmFjdGVyICd9J1wiICcpJ1xuICAgICAgICB8IF8gLT5cbiAgICAgICAgICBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3RyX2luZCArIDIpIGVuZF9pbmQgY1xuICAgICAgICBlbmRcbiAgICB8IF8gLT4gc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGNcblxuICAoKiBDaGVjayBpZiBzeW1iIGlzIGEgdmFsaWQgaW50IGNvbnZlcnNpb24gYWZ0ZXIgXCIlbFwiLCBcIiVuXCIgb3IgXCIlTFwiICopXG4gIGFuZCBpc19pbnRfYmFzZSBzeW1iID0gbWF0Y2ggc3ltYiB3aXRoXG4gICAgfCAnZCcgfCAnaScgfCAneCcgfCAnWCcgfCAnbycgfCAndScgLT4gdHJ1ZVxuICAgIHwgXyAtPiBmYWxzZVxuXG4gICgqIENvbnZlcnQgYSBjaGFyIChsLCBuIG9yIEwpIHRvIGl0cyBhc3NvY2lhdGVkIGNvdW50ZXIuICopXG4gIGFuZCBjb3VudGVyX29mX2NoYXIgc3ltYiA9IG1hdGNoIHN5bWIgd2l0aFxuICAgIHwgJ2wnIC0+IExpbmVfY291bnRlciAgfCAnbicgLT4gQ2hhcl9jb3VudGVyXG4gICAgfCAnTCcgLT4gVG9rZW5fY291bnRlciB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgKCogQ29udmVydCAocGx1cywgc3ltYikgdG8gaXRzIGFzc29jaWF0ZWQgaW50X2NvbnYuICopXG4gIGFuZCBjb21wdXRlX2ludF9jb252IHBjdF9pbmQgc3RyX2luZCBwbHVzIGhhc2ggc3BhY2Ugc3ltYiA9XG4gICAgbWF0Y2ggcGx1cywgaGFzaCwgc3BhY2UsIHN5bWIgd2l0aFxuICAgIHwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgJ2QnIC0+IEludF9kICB8IGZhbHNlLCBmYWxzZSwgZmFsc2UsICdpJyAtPiBJbnRfaVxuICAgIHwgZmFsc2UsIGZhbHNlLCAgdHJ1ZSwgJ2QnIC0+IEludF9zZCB8IGZhbHNlLCBmYWxzZSwgIHRydWUsICdpJyAtPiBJbnRfc2lcbiAgICB8ICB0cnVlLCBmYWxzZSwgZmFsc2UsICdkJyAtPiBJbnRfcGQgfCAgdHJ1ZSwgZmFsc2UsIGZhbHNlLCAnaScgLT4gSW50X3BpXG4gICAgfCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAneCcgLT4gSW50X3ggIHwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgJ1gnIC0+IEludF9YXG4gICAgfCBmYWxzZSwgIHRydWUsIGZhbHNlLCAneCcgLT4gSW50X0N4IHwgZmFsc2UsICB0cnVlLCBmYWxzZSwgJ1gnIC0+IEludF9DWFxuICAgIHwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgJ28nIC0+IEludF9vXG4gICAgfCBmYWxzZSwgIHRydWUsIGZhbHNlLCAnbycgLT4gSW50X0NvXG4gICAgfCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAndScgLT4gSW50X3VcbiAgICB8IGZhbHNlLCAgdHJ1ZSwgZmFsc2UsICdkJyAtPiBJbnRfQ2RcbiAgICB8IGZhbHNlLCAgdHJ1ZSwgZmFsc2UsICdpJyAtPiBJbnRfQ2lcbiAgICB8IGZhbHNlLCAgdHJ1ZSwgZmFsc2UsICd1JyAtPiBJbnRfQ3VcbiAgICB8IF8sIHRydWUsIF8sICd4JyB3aGVuIGxlZ2FjeV9iZWhhdmlvciAtPiBJbnRfQ3hcbiAgICB8IF8sIHRydWUsIF8sICdYJyB3aGVuIGxlZ2FjeV9iZWhhdmlvciAtPiBJbnRfQ1hcbiAgICB8IF8sIHRydWUsIF8sICdvJyB3aGVuIGxlZ2FjeV9iZWhhdmlvciAtPiBJbnRfQ29cbiAgICB8IF8sIHRydWUsIF8sICgnZCcgfCAnaScgfCAndScpIC0+XG4gICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiAoKiBpZ25vcmUgKilcbiAgICAgICAgY29tcHV0ZV9pbnRfY29udiBwY3RfaW5kIHN0cl9pbmQgcGx1cyBmYWxzZSBzcGFjZSBzeW1iXG4gICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiJyMnXCJcbiAgICB8IHRydWUsIF8sIHRydWUsIF8gLT5cbiAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuXG4gICAgICAgICgqIHBsdXMgYW5kIHNwYWNlOiBsZWdhY3kgaW1wbGVtZW50YXRpb24gcHJlZmVycyBwbHVzICopXG4gICAgICAgIGNvbXB1dGVfaW50X2NvbnYgcGN0X2luZCBzdHJfaW5kIHBsdXMgaGFzaCBmYWxzZSBzeW1iXG4gICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCAnICcgXCInKydcIlxuICAgIHwgZmFsc2UsIF8sIHRydWUsIF8gICAgLT5cbiAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuICgqIGlnbm9yZSAqKVxuICAgICAgICBjb21wdXRlX2ludF9jb252IHBjdF9pbmQgc3RyX2luZCBwbHVzIGhhc2ggZmFsc2Ugc3ltYlxuICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcIicgJ1wiXG4gICAgfCB0cnVlLCBfLCBmYWxzZSwgXyAgICAtPlxuICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gKCogaWdub3JlICopXG4gICAgICAgIGNvbXB1dGVfaW50X2NvbnYgcGN0X2luZCBzdHJfaW5kIGZhbHNlIGhhc2ggc3BhY2Ugc3ltYlxuICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcIicrJ1wiXG4gICAgfCBmYWxzZSwgXywgZmFsc2UsIF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgKCogQ29udmVydCAocGx1cywgc3BhY2UsIHN5bWIpIHRvIGl0cyBhc3NvY2lhdGVkIGZsb2F0X2NvbnYuICopXG4gIGFuZCBjb21wdXRlX2Zsb2F0X2NvbnYgcGN0X2luZCBzdHJfaW5kIHBsdXMgaGFzaCBzcGFjZSBzeW1iID1cbiAgICBsZXQgZmxhZyA9IG1hdGNoIHBsdXMsIHNwYWNlIHdpdGhcbiAgICB8IGZhbHNlLCBmYWxzZSAtPiBGbG9hdF9mbGFnX1xuICAgIHwgZmFsc2UsICB0cnVlIC0+IEZsb2F0X2ZsYWdfc1xuICAgIHwgIHRydWUsIGZhbHNlIC0+IEZsb2F0X2ZsYWdfcFxuICAgIHwgIHRydWUsICB0cnVlIC0+XG4gICAgICAoKiBwbHVzIGFuZCBzcGFjZTogbGVnYWN5IGltcGxlbWVudGF0aW9uIHByZWZlcnMgcGx1cyAqKVxuICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gRmxvYXRfZmxhZ19wXG4gICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCAnICcgXCInKydcIiBpblxuICAgIGxldCBraW5kID0gbWF0Y2ggaGFzaCwgc3ltYiB3aXRoXG4gICAgfCBfLCAnZicgLT4gRmxvYXRfZlxuICAgIHwgXywgJ2UnIC0+IEZsb2F0X2VcbiAgICB8IF8sICdFJyAtPiBGbG9hdF9FXG4gICAgfCBfLCAnZycgLT4gRmxvYXRfZ1xuICAgIHwgXywgJ0cnIC0+IEZsb2F0X0dcbiAgICB8IF8sICdoJyAtPiBGbG9hdF9oXG4gICAgfCBfLCAnSCcgLT4gRmxvYXRfSFxuICAgIHwgZmFsc2UsICdGJyAtPiBGbG9hdF9GXG4gICAgfCB0cnVlLCAnRicgLT4gRmxvYXRfQ0ZcbiAgICB8IF8gLT4gYXNzZXJ0IGZhbHNlIGluXG4gICAgZmxhZywga2luZFxuXG4gICgqIFJhaXNlIFtGYWlsdXJlXSB3aXRoIGEgZnJpZW5kbHkgZXJyb3IgbWVzc2FnZSBhYm91dCBpbmNvbXBhdGlibGUgb3B0aW9ucy4qKVxuICBhbmQgaW5jb21wYXRpYmxlX2ZsYWcgOiB0eXBlIGEgLiBpbnQgLT4gaW50IC0+IGNoYXIgLT4gc3RyaW5nIC0+IGEgPVxuICAgIGZ1biBwY3RfaW5kIHN0cl9pbmQgc3ltYiBvcHRpb24gLT5cbiAgICAgIGxldCBzdWJmbXQgPSBTdHJpbmcuc3ViIHN0ciBwY3RfaW5kIChzdHJfaW5kIC0gcGN0X2luZCkgaW5cbiAgICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogYXQgY2hhcmFjdGVyIG51bWJlciAlZCwgXFxcbiAgICAgICAgICVzIGlzIGluY29tcGF0aWJsZSB3aXRoICclYycgaW4gc3ViLWZvcm1hdCAlU1wiXG4gICAgICAgIHN0ciBwY3RfaW5kIG9wdGlvbiBzeW1iIHN1YmZtdFxuXG4gIGluIHBhcnNlIDAgKFN0cmluZy5sZW5ndGggc3RyKVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgKCogR3VhcmRlZCBzdHJpbmcgdG8gZm9ybWF0IGNvbnZlcnNpb25zICopXG5cbigqIENvbnZlcnQgYSBzdHJpbmcgdG8gYSBmb3JtYXQgYWNjb3JkaW5nIHRvIGFuIGZtdHR5LiAqKVxuKCogUmFpc2UgW0ZhaWx1cmVdIHdpdGggYW4gZXJyb3IgbWVzc2FnZSBpbiBjYXNlIG9mIHR5cGUgbWlzbWF0Y2guICopXG5sZXQgZm9ybWF0X29mX3N0cmluZ19mbXR0eSBzdHIgZm10dHkgPVxuICBsZXQgRm10X0VCQiBmbXQgPSBmbXRfZWJiX29mX3N0cmluZyBzdHIgaW5cbiAgdHJ5IEZvcm1hdCAodHlwZV9mb3JtYXQgZm10IGZtdHR5LCBzdHIpXG4gIHdpdGggVHlwZV9taXNtYXRjaCAtPlxuICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgIFwiYmFkIGlucHV0OiBmb3JtYXQgdHlwZSBtaXNtYXRjaCBiZXR3ZWVuICVTIGFuZCAlU1wiXG4gICAgICBzdHIgKHN0cmluZ19vZl9mbXR0eSBmbXR0eSlcblxuKCogQ29udmVydCBhIHN0cmluZyB0byBhIGZvcm1hdCBjb21wYXRpYmxlIHdpdGggYW4gb3RoZXIgZm9ybWF0LiAqKVxuKCogUmFpc2UgW0ZhaWx1cmVdIHdpdGggYW4gZXJyb3IgbWVzc2FnZSBpbiBjYXNlIG9mIHR5cGUgbWlzbWF0Y2guICopXG5sZXQgZm9ybWF0X29mX3N0cmluZ19mb3JtYXQgc3RyIChGb3JtYXQgKGZtdCcsIHN0cicpKSA9XG4gIGxldCBGbXRfRUJCIGZtdCA9IGZtdF9lYmJfb2Zfc3RyaW5nIHN0ciBpblxuICB0cnkgRm9ybWF0ICh0eXBlX2Zvcm1hdCBmbXQgKGZtdHR5X29mX2ZtdCBmbXQnKSwgc3RyKVxuICB3aXRoIFR5cGVfbWlzbWF0Y2ggLT5cbiAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICBcImJhZCBpbnB1dDogZm9ybWF0IHR5cGUgbWlzbWF0Y2ggYmV0d2VlbiAlUyBhbmQgJVNcIiBzdHIgc3RyJ1xuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG5vcGVuIFByaW50ZlxuXG50eXBlIHQgPSBleG4gPSAuLlxuXG5sZXQgcHJpbnRlcnMgPSBBdG9taWMubWFrZSBbXVxuXG5sZXQgbG9jZm10ID0gZm9ybWF0X29mX3N0cmluZyBcIkZpbGUgXFxcIiVzXFxcIiwgbGluZSAlZCwgY2hhcmFjdGVycyAlZC0lZDogJXNcIlxuXG5sZXQgZmllbGQgeCBpID1cbiAgbGV0IGYgPSBPYmouZmllbGQgeCBpIGluXG4gIGlmIG5vdCAoT2JqLmlzX2Jsb2NrIGYpIHRoZW5cbiAgICBzcHJpbnRmIFwiJWRcIiAoT2JqLm1hZ2ljIGYgOiBpbnQpICAgICAgICAgICAoKiBjYW4gYWxzbyBiZSBhIGNoYXIgKilcbiAgZWxzZSBpZiBPYmoudGFnIGYgPSBPYmouc3RyaW5nX3RhZyB0aGVuXG4gICAgc3ByaW50ZiBcIiVTXCIgKE9iai5tYWdpYyBmIDogc3RyaW5nKVxuICBlbHNlIGlmIE9iai50YWcgZiA9IE9iai5kb3VibGVfdGFnIHRoZW5cbiAgICBzdHJpbmdfb2ZfZmxvYXQgKE9iai5tYWdpYyBmIDogZmxvYXQpXG4gIGVsc2VcbiAgICBcIl9cIlxuXG5sZXQgcmVjIG90aGVyX2ZpZWxkcyB4IGkgPVxuICBpZiBpID49IE9iai5zaXplIHggdGhlbiBcIlwiXG4gIGVsc2Ugc3ByaW50ZiBcIiwgJXMlc1wiIChmaWVsZCB4IGkpIChvdGhlcl9maWVsZHMgeCAoaSsxKSlcblxubGV0IGZpZWxkcyB4ID1cbiAgbWF0Y2ggT2JqLnNpemUgeCB3aXRoXG4gIHwgMCAtPiBcIlwiXG4gIHwgMSAtPiBcIlwiXG4gIHwgMiAtPiBzcHJpbnRmIFwiKCVzKVwiIChmaWVsZCB4IDEpXG4gIHwgXyAtPiBzcHJpbnRmIFwiKCVzJXMpXCIgKGZpZWxkIHggMSkgKG90aGVyX2ZpZWxkcyB4IDIpXG5cbmxldCB1c2VfcHJpbnRlcnMgeCA9XG4gIGxldCByZWMgY29udiA9IGZ1bmN0aW9uXG4gICAgfCBoZCA6OiB0bCAtPlxuICAgICAgICAobWF0Y2ggaGQgeCB3aXRoXG4gICAgICAgICB8IE5vbmUgfCBleGNlcHRpb24gXyAtPiBjb252IHRsXG4gICAgICAgICB8IFNvbWUgcyAtPiBTb21lIHMpXG4gICAgfCBbXSAtPiBOb25lIGluXG4gIGNvbnYgKEF0b21pYy5nZXQgcHJpbnRlcnMpXG5cbmxldCB0b19zdHJpbmdfZGVmYXVsdCA9IGZ1bmN0aW9uXG4gIHwgT3V0X29mX21lbW9yeSAtPiBcIk91dCBvZiBtZW1vcnlcIlxuICB8IFN0YWNrX292ZXJmbG93IC0+IFwiU3RhY2sgb3ZlcmZsb3dcIlxuICB8IE1hdGNoX2ZhaWx1cmUoZmlsZSwgbGluZSwgY2hhcikgLT5cbiAgICAgIHNwcmludGYgbG9jZm10IGZpbGUgbGluZSBjaGFyIChjaGFyKzUpIFwiUGF0dGVybiBtYXRjaGluZyBmYWlsZWRcIlxuICB8IEFzc2VydF9mYWlsdXJlKGZpbGUsIGxpbmUsIGNoYXIpIC0+XG4gICAgICBzcHJpbnRmIGxvY2ZtdCBmaWxlIGxpbmUgY2hhciAoY2hhcis2KSBcIkFzc2VydGlvbiBmYWlsZWRcIlxuICB8IFVuZGVmaW5lZF9yZWN1cnNpdmVfbW9kdWxlKGZpbGUsIGxpbmUsIGNoYXIpIC0+XG4gICAgICBzcHJpbnRmIGxvY2ZtdCBmaWxlIGxpbmUgY2hhciAoY2hhcis2KSBcIlVuZGVmaW5lZCByZWN1cnNpdmUgbW9kdWxlXCJcbiAgfCB4IC0+XG4gICAgICBsZXQgeCA9IE9iai5yZXByIHggaW5cbiAgICAgIGlmIE9iai50YWcgeCA8PiAwIHRoZW5cbiAgICAgICAgKE9iai5tYWdpYyAoT2JqLmZpZWxkIHggMCkgOiBzdHJpbmcpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBjb25zdHJ1Y3RvciA9XG4gICAgICAgICAgKE9iai5tYWdpYyAoT2JqLmZpZWxkIChPYmouZmllbGQgeCAwKSAwKSA6IHN0cmluZykgaW5cbiAgICAgICAgY29uc3RydWN0b3IgXiAoZmllbGRzIHgpXG5cbmxldCB0b19zdHJpbmcgZSA9XG4gIG1hdGNoIHVzZV9wcmludGVycyBlIHdpdGhcbiAgfCBTb21lIHMgLT4gc1xuICB8IE5vbmUgLT4gdG9fc3RyaW5nX2RlZmF1bHQgZVxuXG5sZXQgcHJpbnQgZmN0IGFyZyA9XG4gIHRyeVxuICAgIGZjdCBhcmdcbiAgd2l0aCB4IC0+XG4gICAgZXByaW50ZiBcIlVuY2F1Z2h0IGV4Y2VwdGlvbjogJXNcXG5cIiAodG9fc3RyaW5nIHgpO1xuICAgIGZsdXNoIHN0ZGVycjtcbiAgICByYWlzZSB4XG5cbmxldCBjYXRjaCBmY3QgYXJnID1cbiAgdHJ5XG4gICAgZmN0IGFyZ1xuICB3aXRoIHggLT5cbiAgICBmbHVzaCBzdGRvdXQ7XG4gICAgZXByaW50ZiBcIlVuY2F1Z2h0IGV4Y2VwdGlvbjogJXNcXG5cIiAodG9fc3RyaW5nIHgpO1xuICAgIGV4aXQgMlxuXG50eXBlIHJhd19iYWNrdHJhY2Vfc2xvdFxudHlwZSByYXdfYmFja3RyYWNlX2VudHJ5ID0gcHJpdmF0ZSBpbnRcbnR5cGUgcmF3X2JhY2t0cmFjZSA9IHJhd19iYWNrdHJhY2VfZW50cnkgYXJyYXlcblxubGV0IHJhd19iYWNrdHJhY2VfZW50cmllcyBidCA9IGJ0XG5cbmV4dGVybmFsIGdldF9yYXdfYmFja3RyYWNlOlxuICB1bml0IC0+IHJhd19iYWNrdHJhY2UgPSBcImNhbWxfZ2V0X2V4Y2VwdGlvbl9yYXdfYmFja3RyYWNlXCJcblxuZXh0ZXJuYWwgcmFpc2Vfd2l0aF9iYWNrdHJhY2U6IGV4biAtPiByYXdfYmFja3RyYWNlIC0+ICdhXG4gID0gXCIlcmFpc2Vfd2l0aF9iYWNrdHJhY2VcIlxuXG50eXBlIGJhY2t0cmFjZV9zbG90ID1cbiAgfCBLbm93bl9sb2NhdGlvbiBvZiB7XG4gICAgICBpc19yYWlzZSAgICA6IGJvb2w7XG4gICAgICBmaWxlbmFtZSAgICA6IHN0cmluZztcbiAgICAgIGxpbmVfbnVtYmVyIDogaW50O1xuICAgICAgc3RhcnRfY2hhciAgOiBpbnQ7XG4gICAgICBlbmRfY2hhciAgICA6IGludDtcbiAgICAgIGlzX2lubGluZSAgIDogYm9vbDtcbiAgICAgIGRlZm5hbWUgICAgIDogc3RyaW5nO1xuICAgIH1cbiAgfCBVbmtub3duX2xvY2F0aW9uIG9mIHtcbiAgICAgIGlzX3JhaXNlIDogYm9vbFxuICAgIH1cblxuKCogdG8gYXZvaWQgd2FybmluZyAqKVxubGV0IF8gPSBbS25vd25fbG9jYXRpb24geyBpc19yYWlzZSA9IGZhbHNlOyBmaWxlbmFtZSA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVfbnVtYmVyID0gMDsgc3RhcnRfY2hhciA9IDA7IGVuZF9jaGFyID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfaW5saW5lID0gZmFsc2U7IGRlZm5hbWUgPSBcIlwiIH07XG4gICAgICAgICBVbmtub3duX2xvY2F0aW9uIHsgaXNfcmFpc2UgPSBmYWxzZSB9XVxuXG5leHRlcm5hbCBjb252ZXJ0X3Jhd19iYWNrdHJhY2Vfc2xvdDpcbiAgcmF3X2JhY2t0cmFjZV9zbG90IC0+IGJhY2t0cmFjZV9zbG90ID0gXCJjYW1sX2NvbnZlcnRfcmF3X2JhY2t0cmFjZV9zbG90XCJcblxuZXh0ZXJuYWwgY29udmVydF9yYXdfYmFja3RyYWNlOlxuICByYXdfYmFja3RyYWNlIC0+IGJhY2t0cmFjZV9zbG90IGFycmF5ID0gXCJjYW1sX2NvbnZlcnRfcmF3X2JhY2t0cmFjZVwiXG5cbmxldCBjb252ZXJ0X3Jhd19iYWNrdHJhY2UgYnQgPVxuICB0cnkgU29tZSAoY29udmVydF9yYXdfYmFja3RyYWNlIGJ0KVxuICB3aXRoIEZhaWx1cmUgXyAtPiBOb25lXG5cbmxldCBmb3JtYXRfYmFja3RyYWNlX3Nsb3QgcG9zIHNsb3QgPVxuICBsZXQgaW5mbyBpc19yYWlzZSA9XG4gICAgaWYgaXNfcmFpc2UgdGhlblxuICAgICAgaWYgcG9zID0gMCB0aGVuIFwiUmFpc2VkIGF0XCIgZWxzZSBcIlJlLXJhaXNlZCBhdFwiXG4gICAgZWxzZVxuICAgICAgaWYgcG9zID0gMCB0aGVuIFwiUmFpc2VkIGJ5IHByaW1pdGl2ZSBvcGVyYXRpb24gYXRcIiBlbHNlIFwiQ2FsbGVkIGZyb21cIlxuICBpblxuICBtYXRjaCBzbG90IHdpdGhcbiAgfCBVbmtub3duX2xvY2F0aW9uIGwgLT5cbiAgICAgIGlmIGwuaXNfcmFpc2UgdGhlblxuICAgICAgICAoKiBjb21waWxlci1pbnNlcnRlZCByZS1yYWlzZSwgc2tpcHBlZCAqKSBOb25lXG4gICAgICBlbHNlXG4gICAgICAgIFNvbWUgKHNwcmludGYgXCIlcyB1bmtub3duIGxvY2F0aW9uXCIgKGluZm8gZmFsc2UpKVxuICB8IEtub3duX2xvY2F0aW9uIGwgLT5cbiAgICAgIFNvbWUgKHNwcmludGYgXCIlcyAlcyBpbiBmaWxlIFxcXCIlc1xcXCIlcywgbGluZSAlZCwgY2hhcmFjdGVycyAlZC0lZFwiXG4gICAgICAgICAgICAgIChpbmZvIGwuaXNfcmFpc2UpIGwuZGVmbmFtZSBsLmZpbGVuYW1lXG4gICAgICAgICAgICAgIChpZiBsLmlzX2lubGluZSB0aGVuIFwiIChpbmxpbmVkKVwiIGVsc2UgXCJcIilcbiAgICAgICAgICAgICAgbC5saW5lX251bWJlciBsLnN0YXJ0X2NoYXIgbC5lbmRfY2hhcilcblxubGV0IHByaW50X2V4Y2VwdGlvbl9iYWNrdHJhY2Ugb3V0Y2hhbiBiYWNrdHJhY2UgPVxuICBtYXRjaCBiYWNrdHJhY2Ugd2l0aFxuICB8IE5vbmUgLT5cbiAgICAgIGZwcmludGYgb3V0Y2hhblxuICAgICAgICBcIihQcm9ncmFtIG5vdCBsaW5rZWQgd2l0aCAtZywgY2Fubm90IHByaW50IHN0YWNrIGJhY2t0cmFjZSlcXG5cIlxuICB8IFNvbWUgYSAtPlxuICAgICAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCBhIC0gMSBkb1xuICAgICAgICBtYXRjaCBmb3JtYXRfYmFja3RyYWNlX3Nsb3QgaSBhLihpKSB3aXRoXG4gICAgICAgICAgfCBOb25lIC0+ICgpXG4gICAgICAgICAgfCBTb21lIHN0ciAtPiBmcHJpbnRmIG91dGNoYW4gXCIlc1xcblwiIHN0clxuICAgICAgZG9uZVxuXG5sZXQgcHJpbnRfcmF3X2JhY2t0cmFjZSBvdXRjaGFuIHJhd19iYWNrdHJhY2UgPVxuICBwcmludF9leGNlcHRpb25fYmFja3RyYWNlIG91dGNoYW4gKGNvbnZlcnRfcmF3X2JhY2t0cmFjZSByYXdfYmFja3RyYWNlKVxuXG4oKiBjb25mdXNpbmdseSBuYW1lZDogcHJpbnRzIHRoZSBnbG9iYWwgY3VycmVudCBiYWNrdHJhY2UgKilcbmxldCBwcmludF9iYWNrdHJhY2Ugb3V0Y2hhbiA9XG4gIHByaW50X3Jhd19iYWNrdHJhY2Ugb3V0Y2hhbiAoZ2V0X3Jhd19iYWNrdHJhY2UgKCkpXG5cbmxldCBiYWNrdHJhY2VfdG9fc3RyaW5nIGJhY2t0cmFjZSA9XG4gIG1hdGNoIGJhY2t0cmFjZSB3aXRoXG4gIHwgTm9uZSAtPlxuICAgICBcIihQcm9ncmFtIG5vdCBsaW5rZWQgd2l0aCAtZywgY2Fubm90IHByaW50IHN0YWNrIGJhY2t0cmFjZSlcXG5cIlxuICB8IFNvbWUgYSAtPlxuICAgICAgbGV0IGIgPSBCdWZmZXIuY3JlYXRlIDEwMjQgaW5cbiAgICAgIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggYSAtIDEgZG9cbiAgICAgICAgbWF0Y2ggZm9ybWF0X2JhY2t0cmFjZV9zbG90IGkgYS4oaSkgd2l0aFxuICAgICAgICAgIHwgTm9uZSAtPiAoKVxuICAgICAgICAgIHwgU29tZSBzdHIgLT4gYnByaW50ZiBiIFwiJXNcXG5cIiBzdHJcbiAgICAgIGRvbmU7XG4gICAgICBCdWZmZXIuY29udGVudHMgYlxuXG5sZXQgcmF3X2JhY2t0cmFjZV90b19zdHJpbmcgcmF3X2JhY2t0cmFjZSA9XG4gIGJhY2t0cmFjZV90b19zdHJpbmcgKGNvbnZlcnRfcmF3X2JhY2t0cmFjZSByYXdfYmFja3RyYWNlKVxuXG5sZXQgYmFja3RyYWNlX3Nsb3RfaXNfcmFpc2UgPSBmdW5jdGlvblxuICB8IEtub3duX2xvY2F0aW9uIGwgLT4gbC5pc19yYWlzZVxuICB8IFVua25vd25fbG9jYXRpb24gbCAtPiBsLmlzX3JhaXNlXG5cbmxldCBiYWNrdHJhY2Vfc2xvdF9pc19pbmxpbmUgPSBmdW5jdGlvblxuICB8IEtub3duX2xvY2F0aW9uIGwgLT4gbC5pc19pbmxpbmVcbiAgfCBVbmtub3duX2xvY2F0aW9uIF8gLT4gZmFsc2VcblxudHlwZSBsb2NhdGlvbiA9IHtcbiAgZmlsZW5hbWUgOiBzdHJpbmc7XG4gIGxpbmVfbnVtYmVyIDogaW50O1xuICBzdGFydF9jaGFyIDogaW50O1xuICBlbmRfY2hhciA6IGludDtcbn1cblxubGV0IGJhY2t0cmFjZV9zbG90X2xvY2F0aW9uID0gZnVuY3Rpb25cbiAgfCBVbmtub3duX2xvY2F0aW9uIF8gLT4gTm9uZVxuICB8IEtub3duX2xvY2F0aW9uIGwgLT5cbiAgICBTb21lIHtcbiAgICAgIGZpbGVuYW1lICAgID0gbC5maWxlbmFtZTtcbiAgICAgIGxpbmVfbnVtYmVyID0gbC5saW5lX251bWJlcjtcbiAgICAgIHN0YXJ0X2NoYXIgID0gbC5zdGFydF9jaGFyO1xuICAgICAgZW5kX2NoYXIgICAgPSBsLmVuZF9jaGFyO1xuICAgIH1cblxubGV0IGJhY2t0cmFjZV9zbG90X2RlZm5hbWUgPSBmdW5jdGlvblxuICB8IFVua25vd25fbG9jYXRpb24gX1xuICB8IEtub3duX2xvY2F0aW9uIHsgZGVmbmFtZSA9IFwiXCIgfSAtPiBOb25lXG4gIHwgS25vd25fbG9jYXRpb24gbCAtPiBTb21lIGwuZGVmbmFtZVxuXG5sZXQgYmFja3RyYWNlX3Nsb3RzIHJhd19iYWNrdHJhY2UgPVxuICAoKiBUaGUgZG9jdW1lbnRhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uIGd1YXJhbnRlZXMgdGhhdCBTb21lIGlzXG4gICAgIHJldHVybmVkIG9ubHkgaWYgYSBwYXJ0IG9mIHRoZSB0cmFjZSBpcyB1c2FibGUuIFRoaXMgZ2l2ZXMgdXNcbiAgICAgYSBiaXQgbW9yZSB3b3JrIHRoYW4ganVzdCBjb252ZXJ0X3Jhd19iYWNrdHJhY2UsIGJ1dCBpdCBtYWtlcyB0aGVcbiAgICAgQVBJIG1vcmUgdXNlci1mcmllbmRseSAtLSBvdGhlcndpc2UgbW9zdCB1c2VycyB3b3VsZCBoYXZlIHRvXG4gICAgIHJlaW1wbGVtZW50IHRoZSBcIlByb2dyYW0gbm90IGxpbmtlZCB3aXRoIC1nLCBzb3JyeVwiIGxvZ2ljXG4gICAgIHRoZW1zZWx2ZXMuICopXG4gIG1hdGNoIGNvbnZlcnRfcmF3X2JhY2t0cmFjZSByYXdfYmFja3RyYWNlIHdpdGhcbiAgICB8IE5vbmUgLT4gTm9uZVxuICAgIHwgU29tZSBiYWNrdHJhY2UgLT5cbiAgICAgIGxldCB1c2FibGVfc2xvdCA9IGZ1bmN0aW9uXG4gICAgICAgIHwgVW5rbm93bl9sb2NhdGlvbiBfIC0+IGZhbHNlXG4gICAgICAgIHwgS25vd25fbG9jYXRpb24gXyAtPiB0cnVlIGluXG4gICAgICBsZXQgcmVjIGV4aXN0c191c2FibGUgPSBmdW5jdGlvblxuICAgICAgICB8ICgtMSkgLT4gZmFsc2VcbiAgICAgICAgfCBpIC0+IHVzYWJsZV9zbG90IGJhY2t0cmFjZS4oaSkgfHwgZXhpc3RzX3VzYWJsZSAoaSAtIDEpIGluXG4gICAgICBpZiBleGlzdHNfdXNhYmxlIChBcnJheS5sZW5ndGggYmFja3RyYWNlIC0gMSlcbiAgICAgIHRoZW4gU29tZSBiYWNrdHJhY2VcbiAgICAgIGVsc2UgTm9uZVxuXG5sZXQgYmFja3RyYWNlX3Nsb3RzX29mX3Jhd19lbnRyeSBlbnRyeSA9XG4gIGJhY2t0cmFjZV9zbG90cyBbfCBlbnRyeSB8XVxuXG5tb2R1bGUgU2xvdCA9IHN0cnVjdFxuICB0eXBlIHQgPSBiYWNrdHJhY2Vfc2xvdFxuICBsZXQgZm9ybWF0ID0gZm9ybWF0X2JhY2t0cmFjZV9zbG90XG4gIGxldCBpc19yYWlzZSA9IGJhY2t0cmFjZV9zbG90X2lzX3JhaXNlXG4gIGxldCBpc19pbmxpbmUgPSBiYWNrdHJhY2Vfc2xvdF9pc19pbmxpbmVcbiAgbGV0IGxvY2F0aW9uID0gYmFja3RyYWNlX3Nsb3RfbG9jYXRpb25cbiAgbGV0IG5hbWUgPSBiYWNrdHJhY2Vfc2xvdF9kZWZuYW1lXG5lbmRcblxubGV0IHJhd19iYWNrdHJhY2VfbGVuZ3RoIGJ0ID0gQXJyYXkubGVuZ3RoIGJ0XG5cbmV4dGVybmFsIGdldF9yYXdfYmFja3RyYWNlX3Nsb3QgOlxuICByYXdfYmFja3RyYWNlIC0+IGludCAtPiByYXdfYmFja3RyYWNlX3Nsb3QgPSBcImNhbWxfcmF3X2JhY2t0cmFjZV9zbG90XCJcblxuZXh0ZXJuYWwgZ2V0X3Jhd19iYWNrdHJhY2VfbmV4dF9zbG90IDpcbiAgcmF3X2JhY2t0cmFjZV9zbG90IC0+IHJhd19iYWNrdHJhY2Vfc2xvdCBvcHRpb25cbiAgPSBcImNhbWxfcmF3X2JhY2t0cmFjZV9uZXh0X3Nsb3RcIlxuXG4oKiBjb25mdXNpbmdseSBuYW1lZDpcbiAgIHJldHVybnMgdGhlICpzdHJpbmcqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdsb2JhbCBjdXJyZW50IGJhY2t0cmFjZSAqKVxubGV0IGdldF9iYWNrdHJhY2UgKCkgPSByYXdfYmFja3RyYWNlX3RvX3N0cmluZyAoZ2V0X3Jhd19iYWNrdHJhY2UgKCkpXG5cbmV4dGVybmFsIHJlY29yZF9iYWNrdHJhY2U6IGJvb2wgLT4gdW5pdCA9IFwiY2FtbF9yZWNvcmRfYmFja3RyYWNlXCJcbmV4dGVybmFsIGJhY2t0cmFjZV9zdGF0dXM6IHVuaXQgLT4gYm9vbCA9IFwiY2FtbF9iYWNrdHJhY2Vfc3RhdHVzXCJcblxubGV0IHJlYyByZWdpc3Rlcl9wcmludGVyIGZuID1cbiAgbGV0IG9sZF9wcmludGVycyA9IEF0b21pYy5nZXQgcHJpbnRlcnMgaW5cbiAgbGV0IG5ld19wcmludGVycyA9IGZuIDo6IG9sZF9wcmludGVycyBpblxuICBsZXQgc3VjY2VzcyA9IEF0b21pYy5jb21wYXJlX2FuZF9zZXQgcHJpbnRlcnMgb2xkX3ByaW50ZXJzIG5ld19wcmludGVycyBpblxuICBpZiBub3Qgc3VjY2VzcyB0aGVuIHJlZ2lzdGVyX3ByaW50ZXIgZm5cblxuZXh0ZXJuYWwgZ2V0X2NhbGxzdGFjazogaW50IC0+IHJhd19iYWNrdHJhY2UgPSBcImNhbWxfZ2V0X2N1cnJlbnRfY2FsbHN0YWNrXCJcblxubGV0IGV4bl9zbG90IHggPVxuICBsZXQgeCA9IE9iai5yZXByIHggaW5cbiAgaWYgT2JqLnRhZyB4ID0gMCB0aGVuIE9iai5maWVsZCB4IDAgZWxzZSB4XG5cbmxldCBleG5fc2xvdF9pZCB4ID1cbiAgbGV0IHNsb3QgPSBleG5fc2xvdCB4IGluXG4gIChPYmoub2JqIChPYmouZmllbGQgc2xvdCAxKSA6IGludClcblxubGV0IGV4bl9zbG90X25hbWUgeCA9XG4gIGxldCBzbG90ID0gZXhuX3Nsb3QgeCBpblxuICAoT2JqLm9iaiAoT2JqLmZpZWxkIHNsb3QgMCkgOiBzdHJpbmcpXG5cbmV4dGVybmFsIGdldF9kZWJ1Z19pbmZvX3N0YXR1cyA6IHVuaXQgLT4gaW50ID0gXCJjYW1sX21sX2RlYnVnX2luZm9fc3RhdHVzXCJcblxuKCogRGVzY3JpcHRpb25zIGZvciBlcnJvcnMgaW4gc3RhcnR1cC5oLiBTZWUgYWxzbyBiYWNrdHJhY2UuYyAqKVxubGV0IGVycm9ycyA9IFt8IFwiXCI7XG4gICgqIEZJTEVfTk9UX0ZPVU5EICopXG4gIFwiKENhbm5vdCBwcmludCBsb2NhdGlvbnM6XFxuIFxcXG4gICAgICBieXRlY29kZSBleGVjdXRhYmxlIHByb2dyYW0gZmlsZSBub3QgZm91bmQpXCI7XG4gICgqIEJBRF9CWVRFQ09ERSAqKVxuICBcIihDYW5ub3QgcHJpbnQgbG9jYXRpb25zOlxcbiBcXFxuICAgICAgYnl0ZWNvZGUgZXhlY3V0YWJsZSBwcm9ncmFtIGZpbGUgYXBwZWFycyB0byBiZSBjb3JydXB0KVwiO1xuICAoKiBXUk9OR19NQUdJQyAqKVxuICBcIihDYW5ub3QgcHJpbnQgbG9jYXRpb25zOlxcbiBcXFxuICAgICAgYnl0ZWNvZGUgZXhlY3V0YWJsZSBwcm9ncmFtIGZpbGUgaGFzIHdyb25nIG1hZ2ljIG51bWJlcilcIjtcbiAgKCogTk9fRkRTICopXG4gIFwiKENhbm5vdCBwcmludCBsb2NhdGlvbnM6XFxuIFxcXG4gICAgICBieXRlY29kZSBleGVjdXRhYmxlIHByb2dyYW0gZmlsZSBjYW5ub3QgYmUgb3BlbmVkO1xcbiBcXFxuICAgICAgLS0gdG9vIG1hbnkgb3BlbiBmaWxlcy4gVHJ5IHJ1bm5pbmcgd2l0aCBPQ0FNTFJVTlBBUkFNPWI9MilcIlxufF1cblxubGV0IGRlZmF1bHRfdW5jYXVnaHRfZXhjZXB0aW9uX2hhbmRsZXIgZXhuIHJhd19iYWNrdHJhY2UgPVxuICBlcHJpbnRmIFwiRmF0YWwgZXJyb3I6IGV4Y2VwdGlvbiAlc1xcblwiICh0b19zdHJpbmcgZXhuKTtcbiAgcHJpbnRfcmF3X2JhY2t0cmFjZSBzdGRlcnIgcmF3X2JhY2t0cmFjZTtcbiAgbGV0IHN0YXR1cyA9IGdldF9kZWJ1Z19pbmZvX3N0YXR1cyAoKSBpblxuICBpZiBzdGF0dXMgPCAwIHRoZW5cbiAgICBwcmVycl9lbmRsaW5lIGVycm9ycy4oYWJzIHN0YXR1cyk7XG4gIGZsdXNoIHN0ZGVyclxuXG5sZXQgdW5jYXVnaHRfZXhjZXB0aW9uX2hhbmRsZXIgPSByZWYgZGVmYXVsdF91bmNhdWdodF9leGNlcHRpb25faGFuZGxlclxuXG5sZXQgc2V0X3VuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyIGZuID0gdW5jYXVnaHRfZXhjZXB0aW9uX2hhbmRsZXIgOj0gZm5cblxubGV0IGVtcHR5X2JhY2t0cmFjZSA6IHJhd19iYWNrdHJhY2UgPSBbfCB8XVxuXG5sZXQgdHJ5X2dldF9yYXdfYmFja3RyYWNlICgpID1cbiAgdHJ5XG4gICAgZ2V0X3Jhd19iYWNrdHJhY2UgKClcbiAgd2l0aCBfICgqIE91dF9vZl9tZW1vcnk/ICopIC0+XG4gICAgZW1wdHlfYmFja3RyYWNlXG5cbmxldCBoYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uJyBleG4gZGVidWdnZXJfaW5fdXNlID1cbiAgdHJ5XG4gICAgKCogR2V0IHRoZSBiYWNrdHJhY2Ugbm93LCBpbiBjYXNlIG9uZSBvZiB0aGUgW2F0X2V4aXRdIGZ1bmN0aW9uXG4gICAgICAgZGVzdHJveXMgaXQuICopXG4gICAgbGV0IHJhd19iYWNrdHJhY2UgPVxuICAgICAgaWYgZGVidWdnZXJfaW5fdXNlICgqIFNhbWUgdGVzdCBhcyBpbiBbcnVudGltZS9wcmludGV4Yy5jXSAqKSB0aGVuXG4gICAgICAgIGVtcHR5X2JhY2t0cmFjZVxuICAgICAgZWxzZVxuICAgICAgICB0cnlfZ2V0X3Jhd19iYWNrdHJhY2UgKClcbiAgICBpblxuICAgICh0cnkgU3RkbGliLmRvX2F0X2V4aXQgKCkgd2l0aCBfIC0+ICgpKTtcbiAgICB0cnlcbiAgICAgICF1bmNhdWdodF9leGNlcHRpb25faGFuZGxlciBleG4gcmF3X2JhY2t0cmFjZVxuICAgIHdpdGggZXhuJyAtPlxuICAgICAgbGV0IHJhd19iYWNrdHJhY2UnID0gdHJ5X2dldF9yYXdfYmFja3RyYWNlICgpIGluXG4gICAgICBlcHJpbnRmIFwiRmF0YWwgZXJyb3I6IGV4Y2VwdGlvbiAlc1xcblwiICh0b19zdHJpbmcgZXhuKTtcbiAgICAgIHByaW50X3Jhd19iYWNrdHJhY2Ugc3RkZXJyIHJhd19iYWNrdHJhY2U7XG4gICAgICBlcHJpbnRmIFwiRmF0YWwgZXJyb3IgaW4gdW5jYXVnaHQgZXhjZXB0aW9uIGhhbmRsZXI6IGV4Y2VwdGlvbiAlc1xcblwiXG4gICAgICAgICh0b19zdHJpbmcgZXhuJyk7XG4gICAgICBwcmludF9yYXdfYmFja3RyYWNlIHN0ZGVyciByYXdfYmFja3RyYWNlJztcbiAgICAgIGZsdXNoIHN0ZGVyclxuICB3aXRoXG4gICAgfCBPdXRfb2ZfbWVtb3J5IC0+XG4gICAgICAgIHByZXJyX2VuZGxpbmVcbiAgICAgICAgICBcIkZhdGFsIGVycm9yOiBvdXQgb2YgbWVtb3J5IGluIHVuY2F1Z2h0IGV4Y2VwdGlvbiBoYW5kbGVyXCJcblxuKCogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgW2NhbWxfZmF0YWxfdW5jYXVnaHRfZXhjZXB0aW9uXSBpblxuICAgW3J1bnRpbWUvcHJpbnRleGMuY10gd2hpY2ggZXhwZWN0cyBubyBleGNlcHRpb24gaXMgcmFpc2VkLiAqKVxubGV0IGhhbmRsZV91bmNhdWdodF9leGNlcHRpb24gZXhuIGRlYnVnZ2VyX2luX3VzZSA9XG4gIHRyeVxuICAgIGhhbmRsZV91bmNhdWdodF9leGNlcHRpb24nIGV4biBkZWJ1Z2dlcl9pbl91c2VcbiAgd2l0aCBfIC0+XG4gICAgKCogVGhlcmUgaXMgbm90IG11Y2ggd2UgY2FuIGRvIGF0IHRoaXMgcG9pbnQgKilcbiAgICAoKVxuXG5leHRlcm5hbCByZWdpc3Rlcl9uYW1lZF92YWx1ZSA6IHN0cmluZyAtPiAnYSAtPiB1bml0XG4gID0gXCJjYW1sX3JlZ2lzdGVyX25hbWVkX3ZhbHVlXCJcblxubGV0ICgpID1cbiAgcmVnaXN0ZXJfbmFtZWRfdmFsdWUgXCJQcmludGV4Yy5oYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uXCJcbiAgICBoYW5kbGVfdW5jYXVnaHRfZXhjZXB0aW9uXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgWGF2aWVyIExlcm95IGFuZCBEYW1pZW4gRG9saWdleiwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbmxldCBnZW5lcmljX3F1b3RlIHF1b3RlcXVvdGUgcyA9XG4gIGxldCBsID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIGxldCBiID0gQnVmZmVyLmNyZWF0ZSAobCArIDIwKSBpblxuICBCdWZmZXIuYWRkX2NoYXIgYiAnXFwnJztcbiAgZm9yIGkgPSAwIHRvIGwgLSAxIGRvXG4gICAgaWYgcy5baV0gPSAnXFwnJ1xuICAgIHRoZW4gQnVmZmVyLmFkZF9zdHJpbmcgYiBxdW90ZXF1b3RlXG4gICAgZWxzZSBCdWZmZXIuYWRkX2NoYXIgYiAgcy5baV1cbiAgZG9uZTtcbiAgQnVmZmVyLmFkZF9jaGFyIGIgJ1xcJyc7XG4gIEJ1ZmZlci5jb250ZW50cyBiXG5cbigqIFRoaXMgZnVuY3Rpb24gaW1wbGVtZW50cyB0aGUgT3BlbiBHcm91cCBzcGVjaWZpY2F0aW9uIGZvdW5kIGhlcmU6XG4gIFtbMV1dIGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy85Njk5OTE5Nzk5L3V0aWxpdGllcy9iYXNlbmFtZS5odG1sXG4gIEluIHN0ZXAgMSBvZiBbWzFdXSwgd2UgY2hvb3NlIHRvIHJldHVybiBcIi5cIiBmb3IgZW1wdHkgaW5wdXQuXG4gICAgKGZvciBjb21wYXRpYmlsaXR5IHdpdGggcHJldmlvdXMgdmVyc2lvbnMgb2YgT0NhbWwpXG4gIEluIHN0ZXAgMiwgd2UgY2hvb3NlIHRvIHByb2Nlc3MgXCIvL1wiIG5vcm1hbGx5LlxuICBTdGVwIDYgaXMgbm90IGltcGxlbWVudGVkOiB3ZSBjb25zaWRlciB0aGF0IHRoZSBbc3VmZml4XSBvcGVyYW5kIGlzXG4gICAgYWx3YXlzIGFic2VudC4gIFN1ZmZpeGVzIGFyZSBoYW5kbGVkIGJ5IFtjaG9wX3N1ZmZpeF0gYW5kIFtjaG9wX2V4dGVuc2lvbl0uXG4qKVxubGV0IGdlbmVyaWNfYmFzZW5hbWUgaXNfZGlyX3NlcCBjdXJyZW50X2Rpcl9uYW1lIG5hbWUgPVxuICBsZXQgcmVjIGZpbmRfZW5kIG4gPVxuICAgIGlmIG4gPCAwIHRoZW4gU3RyaW5nLnN1YiBuYW1lIDAgMVxuICAgIGVsc2UgaWYgaXNfZGlyX3NlcCBuYW1lIG4gdGhlbiBmaW5kX2VuZCAobiAtIDEpXG4gICAgZWxzZSBmaW5kX2JlZyBuIChuICsgMSlcbiAgYW5kIGZpbmRfYmVnIG4gcCA9XG4gICAgaWYgbiA8IDAgdGhlbiBTdHJpbmcuc3ViIG5hbWUgMCBwXG4gICAgZWxzZSBpZiBpc19kaXJfc2VwIG5hbWUgbiB0aGVuIFN0cmluZy5zdWIgbmFtZSAobiArIDEpIChwIC0gbiAtIDEpXG4gICAgZWxzZSBmaW5kX2JlZyAobiAtIDEpIHBcbiAgaW5cbiAgaWYgbmFtZSA9IFwiXCJcbiAgdGhlbiBjdXJyZW50X2Rpcl9uYW1lXG4gIGVsc2UgZmluZF9lbmQgKFN0cmluZy5sZW5ndGggbmFtZSAtIDEpXG5cbigqIFRoaXMgZnVuY3Rpb24gaW1wbGVtZW50cyB0aGUgT3BlbiBHcm91cCBzcGVjaWZpY2F0aW9uIGZvdW5kIGhlcmU6XG4gIFtbMl1dIGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy85Njk5OTE5Nzk5L3V0aWxpdGllcy9kaXJuYW1lLmh0bWxcbiAgSW4gc3RlcCA2IG9mIFtbMl1dLCB3ZSBjaG9vc2UgdG8gcHJvY2VzcyBcIi8vXCIgbm9ybWFsbHkuXG4qKVxubGV0IGdlbmVyaWNfZGlybmFtZSBpc19kaXJfc2VwIGN1cnJlbnRfZGlyX25hbWUgbmFtZSA9XG4gIGxldCByZWMgdHJhaWxpbmdfc2VwIG4gPVxuICAgIGlmIG4gPCAwIHRoZW4gU3RyaW5nLnN1YiBuYW1lIDAgMVxuICAgIGVsc2UgaWYgaXNfZGlyX3NlcCBuYW1lIG4gdGhlbiB0cmFpbGluZ19zZXAgKG4gLSAxKVxuICAgIGVsc2UgYmFzZSBuXG4gIGFuZCBiYXNlIG4gPVxuICAgIGlmIG4gPCAwIHRoZW4gY3VycmVudF9kaXJfbmFtZVxuICAgIGVsc2UgaWYgaXNfZGlyX3NlcCBuYW1lIG4gdGhlbiBpbnRlcm1lZGlhdGVfc2VwIG5cbiAgICBlbHNlIGJhc2UgKG4gLSAxKVxuICBhbmQgaW50ZXJtZWRpYXRlX3NlcCBuID1cbiAgICBpZiBuIDwgMCB0aGVuIFN0cmluZy5zdWIgbmFtZSAwIDFcbiAgICBlbHNlIGlmIGlzX2Rpcl9zZXAgbmFtZSBuIHRoZW4gaW50ZXJtZWRpYXRlX3NlcCAobiAtIDEpXG4gICAgZWxzZSBTdHJpbmcuc3ViIG5hbWUgMCAobiArIDEpXG4gIGluXG4gIGlmIG5hbWUgPSBcIlwiXG4gIHRoZW4gY3VycmVudF9kaXJfbmFtZVxuICBlbHNlIHRyYWlsaW5nX3NlcCAoU3RyaW5nLmxlbmd0aCBuYW1lIC0gMSlcblxubW9kdWxlIHR5cGUgU1lTREVQUyA9IHNpZ1xuICB2YWwgbnVsbCA6IHN0cmluZ1xuICB2YWwgY3VycmVudF9kaXJfbmFtZSA6IHN0cmluZ1xuICB2YWwgcGFyZW50X2Rpcl9uYW1lIDogc3RyaW5nXG4gIHZhbCBkaXJfc2VwIDogc3RyaW5nXG4gIHZhbCBpc19kaXJfc2VwIDogc3RyaW5nIC0+IGludCAtPiBib29sXG4gIHZhbCBpc19yZWxhdGl2ZSA6IHN0cmluZyAtPiBib29sXG4gIHZhbCBpc19pbXBsaWNpdCA6IHN0cmluZyAtPiBib29sXG4gIHZhbCBjaGVja19zdWZmaXggOiBzdHJpbmcgLT4gc3RyaW5nIC0+IGJvb2xcbiAgdmFsIGNob3Bfc3VmZml4X29wdCA6IHN1ZmZpeDpzdHJpbmcgLT4gc3RyaW5nIC0+IHN0cmluZyBvcHRpb25cbiAgdmFsIHRlbXBfZGlyX25hbWUgOiBzdHJpbmdcbiAgdmFsIHF1b3RlIDogc3RyaW5nIC0+IHN0cmluZ1xuICB2YWwgcXVvdGVfY29tbWFuZCA6XG4gICAgc3RyaW5nIC0+ID9zdGRpbjogc3RyaW5nIC0+ID9zdGRvdXQ6IHN0cmluZyAtPiA/c3RkZXJyOiBzdHJpbmdcbiAgICAgICAgICAgLT4gc3RyaW5nIGxpc3QgLT4gc3RyaW5nXG4gIHZhbCBiYXNlbmFtZSA6IHN0cmluZyAtPiBzdHJpbmdcbiAgdmFsIGRpcm5hbWUgOiBzdHJpbmcgLT4gc3RyaW5nXG5lbmRcblxubW9kdWxlIFVuaXggOiBTWVNERVBTID0gc3RydWN0XG4gIGxldCBudWxsID0gXCIvZGV2L251bGxcIlxuICBsZXQgY3VycmVudF9kaXJfbmFtZSA9IFwiLlwiXG4gIGxldCBwYXJlbnRfZGlyX25hbWUgPSBcIi4uXCJcbiAgbGV0IGRpcl9zZXAgPSBcIi9cIlxuICBsZXQgaXNfZGlyX3NlcCBzIGkgPSBzLltpXSA9ICcvJ1xuICBsZXQgaXNfcmVsYXRpdmUgbiA9IFN0cmluZy5sZW5ndGggbiA8IDEgfHwgbi5bMF0gPD4gJy8nXG4gIGxldCBpc19pbXBsaWNpdCBuID1cbiAgICBpc19yZWxhdGl2ZSBuXG4gICAgJiYgKFN0cmluZy5sZW5ndGggbiA8IDIgfHwgU3RyaW5nLnN1YiBuIDAgMiA8PiBcIi4vXCIpXG4gICAgJiYgKFN0cmluZy5sZW5ndGggbiA8IDMgfHwgU3RyaW5nLnN1YiBuIDAgMyA8PiBcIi4uL1wiKVxuICBsZXQgY2hlY2tfc3VmZml4IG5hbWUgc3VmZiA9XG4gICAgU3RyaW5nLmVuZHNfd2l0aCB+c3VmZml4OnN1ZmYgbmFtZVxuXG4gIGxldCBjaG9wX3N1ZmZpeF9vcHQgfnN1ZmZpeCBmaWxlbmFtZSA9XG4gICAgbGV0IGxlbl9zID0gU3RyaW5nLmxlbmd0aCBzdWZmaXggYW5kIGxlbl9mID0gU3RyaW5nLmxlbmd0aCBmaWxlbmFtZSBpblxuICAgIGlmIGxlbl9mID49IGxlbl9zIHRoZW5cbiAgICAgIGxldCByID0gU3RyaW5nLnN1YiBmaWxlbmFtZSAobGVuX2YgLSBsZW5fcykgbGVuX3MgaW5cbiAgICAgIGlmIHIgPSBzdWZmaXggdGhlblxuICAgICAgICBTb21lIChTdHJpbmcuc3ViIGZpbGVuYW1lIDAgKGxlbl9mIC0gbGVuX3MpKVxuICAgICAgZWxzZVxuICAgICAgICBOb25lXG4gICAgZWxzZVxuICAgICAgTm9uZVxuXG4gIGxldCB0ZW1wX2Rpcl9uYW1lID1cbiAgICB0cnkgU3lzLmdldGVudiBcIlRNUERJUlwiIHdpdGggTm90X2ZvdW5kIC0+IFwiL3RtcFwiXG4gIGxldCBxdW90ZSA9IGdlbmVyaWNfcXVvdGUgXCInXFxcXCcnXCJcbiAgbGV0IHF1b3RlX2NvbW1hbmQgY21kID9zdGRpbiA/c3Rkb3V0ID9zdGRlcnIgYXJncyA9XG4gICAgU3RyaW5nLmNvbmNhdCBcIiBcIiAoTGlzdC5tYXAgcXVvdGUgKGNtZCA6OiBhcmdzKSlcbiAgICBeIChtYXRjaCBzdGRpbiAgd2l0aCBOb25lIC0+IFwiXCIgfCBTb21lIGYgLT4gXCIgPFwiIF4gcXVvdGUgZilcbiAgICBeIChtYXRjaCBzdGRvdXQgd2l0aCBOb25lIC0+IFwiXCIgfCBTb21lIGYgLT4gXCIgPlwiIF4gcXVvdGUgZilcbiAgICBeIChtYXRjaCBzdGRlcnIgd2l0aCBOb25lIC0+IFwiXCIgfCBTb21lIGYgLT4gaWYgc3RkZXJyID0gc3Rkb3V0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVuIFwiIDI+JjFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBcIiAyPlwiIF4gcXVvdGUgZilcbiAgbGV0IGJhc2VuYW1lID0gZ2VuZXJpY19iYXNlbmFtZSBpc19kaXJfc2VwIGN1cnJlbnRfZGlyX25hbWVcbiAgbGV0IGRpcm5hbWUgPSBnZW5lcmljX2Rpcm5hbWUgaXNfZGlyX3NlcCBjdXJyZW50X2Rpcl9uYW1lXG5lbmRcblxubW9kdWxlIFdpbjMyIDogU1lTREVQUyA9IHN0cnVjdFxuICBsZXQgbnVsbCA9IFwiTlVMXCJcbiAgbGV0IGN1cnJlbnRfZGlyX25hbWUgPSBcIi5cIlxuICBsZXQgcGFyZW50X2Rpcl9uYW1lID0gXCIuLlwiXG4gIGxldCBkaXJfc2VwID0gXCJcXFxcXCJcbiAgbGV0IGlzX2Rpcl9zZXAgcyBpID0gbGV0IGMgPSBzLltpXSBpbiBjID0gJy8nIHx8IGMgPSAnXFxcXCcgfHwgYyA9ICc6J1xuICBsZXQgaXNfcmVsYXRpdmUgbiA9XG4gICAgKFN0cmluZy5sZW5ndGggbiA8IDEgfHwgbi5bMF0gPD4gJy8nKVxuICAgICYmIChTdHJpbmcubGVuZ3RoIG4gPCAxIHx8IG4uWzBdIDw+ICdcXFxcJylcbiAgICAmJiAoU3RyaW5nLmxlbmd0aCBuIDwgMiB8fCBuLlsxXSA8PiAnOicpXG4gIGxldCBpc19pbXBsaWNpdCBuID1cbiAgICBpc19yZWxhdGl2ZSBuXG4gICAgJiYgKFN0cmluZy5sZW5ndGggbiA8IDIgfHwgU3RyaW5nLnN1YiBuIDAgMiA8PiBcIi4vXCIpXG4gICAgJiYgKFN0cmluZy5sZW5ndGggbiA8IDIgfHwgU3RyaW5nLnN1YiBuIDAgMiA8PiBcIi5cXFxcXCIpXG4gICAgJiYgKFN0cmluZy5sZW5ndGggbiA8IDMgfHwgU3RyaW5nLnN1YiBuIDAgMyA8PiBcIi4uL1wiKVxuICAgICYmIChTdHJpbmcubGVuZ3RoIG4gPCAzIHx8IFN0cmluZy5zdWIgbiAwIDMgPD4gXCIuLlxcXFxcIilcbiAgbGV0IGNoZWNrX3N1ZmZpeCBuYW1lIHN1ZmYgPVxuICAgU3RyaW5nLmxlbmd0aCBuYW1lID49IFN0cmluZy5sZW5ndGggc3VmZiAmJlxuICAgKGxldCBzID0gU3RyaW5nLnN1YiBuYW1lIChTdHJpbmcubGVuZ3RoIG5hbWUgLSBTdHJpbmcubGVuZ3RoIHN1ZmYpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKFN0cmluZy5sZW5ndGggc3VmZikgaW5cbiAgICBTdHJpbmcubG93ZXJjYXNlX2FzY2lpIHMgPSBTdHJpbmcubG93ZXJjYXNlX2FzY2lpIHN1ZmYpXG5cbiAgbGV0IGNob3Bfc3VmZml4X29wdCB+c3VmZml4IGZpbGVuYW1lID1cbiAgICBsZXQgbGVuX3MgPSBTdHJpbmcubGVuZ3RoIHN1ZmZpeCBhbmQgbGVuX2YgPSBTdHJpbmcubGVuZ3RoIGZpbGVuYW1lIGluXG4gICAgaWYgbGVuX2YgPj0gbGVuX3MgdGhlblxuICAgICAgbGV0IHIgPSBTdHJpbmcuc3ViIGZpbGVuYW1lIChsZW5fZiAtIGxlbl9zKSBsZW5fcyBpblxuICAgICAgaWYgU3RyaW5nLmxvd2VyY2FzZV9hc2NpaSByID0gU3RyaW5nLmxvd2VyY2FzZV9hc2NpaSBzdWZmaXggdGhlblxuICAgICAgICBTb21lIChTdHJpbmcuc3ViIGZpbGVuYW1lIDAgKGxlbl9mIC0gbGVuX3MpKVxuICAgICAgZWxzZVxuICAgICAgICBOb25lXG4gICAgZWxzZVxuICAgICAgTm9uZVxuXG5cbiAgbGV0IHRlbXBfZGlyX25hbWUgPVxuICAgIHRyeSBTeXMuZ2V0ZW52IFwiVEVNUFwiIHdpdGggTm90X2ZvdW5kIC0+IFwiLlwiXG4gIGxldCBxdW90ZSBzID1cbiAgICBsZXQgbCA9IFN0cmluZy5sZW5ndGggcyBpblxuICAgIGxldCBiID0gQnVmZmVyLmNyZWF0ZSAobCArIDIwKSBpblxuICAgIEJ1ZmZlci5hZGRfY2hhciBiICdcXFwiJztcbiAgICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgICBpZiBpID0gbCB0aGVuIEJ1ZmZlci5hZGRfY2hhciBiICdcXFwiJyBlbHNlXG4gICAgICBtYXRjaCBzLltpXSB3aXRoXG4gICAgICB8ICdcXFwiJyAtPiBsb29wX2JzIDAgaTtcbiAgICAgIHwgJ1xcXFwnIC0+IGxvb3BfYnMgMCBpO1xuICAgICAgfCBjICAgIC0+IEJ1ZmZlci5hZGRfY2hhciBiIGM7IGxvb3AgKGkrMSk7XG4gICAgYW5kIGxvb3BfYnMgbiBpID1cbiAgICAgIGlmIGkgPSBsIHRoZW4gYmVnaW5cbiAgICAgICAgQnVmZmVyLmFkZF9jaGFyIGIgJ1xcXCInO1xuICAgICAgICBhZGRfYnMgbjtcbiAgICAgIGVuZCBlbHNlIGJlZ2luXG4gICAgICAgIG1hdGNoIHMuW2ldIHdpdGhcbiAgICAgICAgfCAnXFxcIicgLT4gYWRkX2JzICgyKm4rMSk7IEJ1ZmZlci5hZGRfY2hhciBiICdcXFwiJzsgbG9vcCAoaSsxKTtcbiAgICAgICAgfCAnXFxcXCcgLT4gbG9vcF9icyAobisxKSAoaSsxKTtcbiAgICAgICAgfCBfICAgIC0+IGFkZF9icyBuOyBsb29wIGlcbiAgICAgIGVuZFxuICAgIGFuZCBhZGRfYnMgbiA9IGZvciBfaiA9IDEgdG8gbiBkbyBCdWZmZXIuYWRkX2NoYXIgYiAnXFxcXCc7IGRvbmVcbiAgICBpblxuICAgIGxvb3AgMDtcbiAgICBCdWZmZXIuY29udGVudHMgYlxuKCpcblF1b3RpbmcgY29tbWFuZHMgZm9yIGV4ZWN1dGlvbiBieSBjbWQuZXhlIGlzIGRpZmZpY3VsdC5cbjEtIEVhY2ggYXJndW1lbnQgaXMgZmlyc3QgcXVvdGVkIHVzaW5nIHRoZSBcInF1b3RlXCIgZnVuY3Rpb24gYWJvdmUsIHRvXG4gICBwcm90ZWN0IGl0IGFnYWluc3QgdGhlIHByb2Nlc3NpbmcgcGVyZm9ybWVkIGJ5IHRoZSBDIHJ1bnRpbWUgc3lzdGVtLFxuICAgdGhlbiBjbWQuZXhlJ3Mgc3BlY2lhbCBjaGFyYWN0ZXJzIGFyZSBlc2NhcGVkIHdpdGggJ14nLCB1c2luZ1xuICAgdGhlIFwicXVvdGVfY21kXCIgZnVuY3Rpb24gYmVsb3cuICBGb3IgbW9yZSBkZXRhaWxzLCBzZWVcbiAgIGh0dHBzOi8vYmxvZ3MubXNkbi5taWNyb3NvZnQuY29tL3R3aXN0eWxpdHRsZXBhc3NhZ2VzYWxsYWxpa2UvMjAxMS8wNC8yM1xuMi0gVGhlIGNvbW1hbmQgYW5kIHRoZSByZWRpcmVjdGlvbiBmaWxlcywgaWYgYW55LCBtdXN0IGJlIGRvdWJsZS1xdW90ZWRcbiAgIGluIGNhc2UgdGhleSBjb250YWluIHNwYWNlcy4gIFRoaXMgcXVvdGluZyBpcyBpbnRlcnByZXRlZCBieSBjbWQuZXhlLFxuICAgbm90IGJ5IHRoZSBDIHJ1bnRpbWUgc3lzdGVtLCBoZW5jZSB0aGUgXCJxdW90ZVwiIGZ1bmN0aW9uIGFib3ZlXG4gICBjYW5ub3QgYmUgdXNlZC4gIFRoZSB0d28gY2hhcmFjdGVycyB3ZSBkb24ndCBrbm93IGhvdyB0byBxdW90ZVxuICAgaW5zaWRlIGEgZG91YmxlLXF1b3RlZCBjbWQuZXhlIHN0cmluZyBhcmUgZG91YmxlLXF1b3RlIGFuZCBwZXJjZW50LlxuICAgV2UganVzdCBmYWlsIGlmIHRoZSBjb21tYW5kIG5hbWUgb3IgdGhlIHJlZGlyZWN0aW9uIGZpbGUgbmFtZXNcbiAgIGNvbnRhaW4gYSBkb3VibGUgcXVvdGUgKG5vdCBhbGxvd2VkIGluIFdpbmRvd3MgZmlsZSBuYW1lcywgYW55d2F5KVxuICAgb3IgYSBwZXJjZW50LiAgU2VlIGZ1bmN0aW9uIFwicXVvdGVfY21kX2ZpbGVuYW1lXCIgYmVsb3cuXG4zLSBUaGUgd2hvbGUgc3RyaW5nIHBhc3NlZCB0byBTeXMuY29tbWFuZCBpcyB0aGVuIGVuY2xvc2VkIGluIGRvdWJsZVxuICAgcXVvdGVzLCB3aGljaCBhcmUgaW1tZWRpYXRlbHkgc3RyaXBwZWQgYnkgY21kLmV4ZS4gIE90aGVyd2lzZSxcbiAgIHNvbWUgb2YgdGhlIGRvdWJsZSBxdW90ZXMgZnJvbSBzdGVwIDIgYWJvdmUgY2FuIGJlIG1pc3BhcnNlZC5cbiAgIFNlZSBlLmcuIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS85OTY1MTQxXG4qKVxuICBsZXQgcXVvdGVfY21kIHMgPVxuICAgIGxldCBiID0gQnVmZmVyLmNyZWF0ZSAoU3RyaW5nLmxlbmd0aCBzICsgMjApIGluXG4gICAgU3RyaW5nLml0ZXJcbiAgICAgIChmdW4gYyAtPlxuICAgICAgICBtYXRjaCBjIHdpdGhcbiAgICAgICAgfCAnKCcgfCAnKScgfCAnIScgfCAnXicgfCAnJScgfCAnXFxcIicgfCAnPCcgfCAnPicgfCAnJicgfCAnfCcgLT5cbiAgICAgICAgICAgIEJ1ZmZlci5hZGRfY2hhciBiICdeJzsgQnVmZmVyLmFkZF9jaGFyIGIgY1xuICAgICAgICB8IF8gLT5cbiAgICAgICAgICAgIEJ1ZmZlci5hZGRfY2hhciBiIGMpXG4gICAgICBzO1xuICAgIEJ1ZmZlci5jb250ZW50cyBiXG4gIGxldCBxdW90ZV9jbWRfZmlsZW5hbWUgZiA9XG4gICAgaWYgU3RyaW5nLmNvbnRhaW5zIGYgJ1xcXCInIHx8IFN0cmluZy5jb250YWlucyBmICclJyB0aGVuXG4gICAgICBmYWlsd2l0aCAoXCJGaWxlbmFtZS5xdW90ZV9jb21tYW5kOiBiYWQgZmlsZSBuYW1lIFwiIF4gZilcbiAgICBlbHNlIGlmIFN0cmluZy5jb250YWlucyBmICcgJyB0aGVuXG4gICAgICBcIlxcXCJcIiBeIGYgXiBcIlxcXCJcIlxuICAgIGVsc2VcbiAgICAgIGZcbiAgKCogUmVkaXJlY3Rpb25zIGluIGNtZC5leGU6IHNlZSBodHRwczovL3NzNjQuY29tL250L3N5bnRheC1yZWRpcmVjdGlvbi5odG1sXG4gICAgIGFuZCBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9wcmV2aW91cy12ZXJzaW9ucy93aW5kb3dzL2l0LXByby93aW5kb3dzLXhwL2JiNDkwOTgyKHY9dGVjaG5ldC4xMClcbiAgKilcbiAgbGV0IHF1b3RlX2NvbW1hbmQgY21kID9zdGRpbiA/c3Rkb3V0ID9zdGRlcnIgYXJncyA9XG4gICAgU3RyaW5nLmNvbmNhdCBcIlwiIFtcbiAgICAgIFwiXFxcIlwiO1xuICAgICAgcXVvdGVfY21kX2ZpbGVuYW1lIGNtZDtcbiAgICAgIFwiIFwiO1xuICAgICAgcXVvdGVfY21kIChTdHJpbmcuY29uY2F0IFwiIFwiIChMaXN0Lm1hcCBxdW90ZSBhcmdzKSk7XG4gICAgICAobWF0Y2ggc3RkaW4gIHdpdGggTm9uZSAtPiBcIlwiIHwgU29tZSBmIC0+IFwiIDxcIiBeIHF1b3RlX2NtZF9maWxlbmFtZSBmKTtcbiAgICAgIChtYXRjaCBzdGRvdXQgd2l0aCBOb25lIC0+IFwiXCIgfCBTb21lIGYgLT4gXCIgPlwiIF4gcXVvdGVfY21kX2ZpbGVuYW1lIGYpO1xuICAgICAgKG1hdGNoIHN0ZGVyciB3aXRoIE5vbmUgLT4gXCJcIiB8IFNvbWUgZiAtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHN0ZGVyciA9IHN0ZG91dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW4gXCIgMj4mMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBcIiAyPlwiIF4gcXVvdGVfY21kX2ZpbGVuYW1lIGYpO1xuICAgICAgXCJcXFwiXCJcbiAgICBdXG4gIGxldCBoYXNfZHJpdmUgcyA9XG4gICAgbGV0IGlzX2xldHRlciA9IGZ1bmN0aW9uXG4gICAgICB8ICdBJyAuLiAnWicgfCAnYScgLi4gJ3onIC0+IHRydWVcbiAgICAgIHwgXyAtPiBmYWxzZVxuICAgIGluXG4gICAgU3RyaW5nLmxlbmd0aCBzID49IDIgJiYgaXNfbGV0dGVyIHMuWzBdICYmIHMuWzFdID0gJzonXG4gIGxldCBkcml2ZV9hbmRfcGF0aCBzID1cbiAgICBpZiBoYXNfZHJpdmUgc1xuICAgIHRoZW4gKFN0cmluZy5zdWIgcyAwIDIsIFN0cmluZy5zdWIgcyAyIChTdHJpbmcubGVuZ3RoIHMgLSAyKSlcbiAgICBlbHNlIChcIlwiLCBzKVxuICBsZXQgZGlybmFtZSBzID1cbiAgICBsZXQgKGRyaXZlLCBwYXRoKSA9IGRyaXZlX2FuZF9wYXRoIHMgaW5cbiAgICBsZXQgZGlyID0gZ2VuZXJpY19kaXJuYW1lIGlzX2Rpcl9zZXAgY3VycmVudF9kaXJfbmFtZSBwYXRoIGluXG4gICAgZHJpdmUgXiBkaXJcbiAgbGV0IGJhc2VuYW1lIHMgPVxuICAgIGxldCAoX2RyaXZlLCBwYXRoKSA9IGRyaXZlX2FuZF9wYXRoIHMgaW5cbiAgICBnZW5lcmljX2Jhc2VuYW1lIGlzX2Rpcl9zZXAgY3VycmVudF9kaXJfbmFtZSBwYXRoXG5lbmRcblxubW9kdWxlIEN5Z3dpbiA6IFNZU0RFUFMgPSBzdHJ1Y3RcbiAgbGV0IG51bGwgPSBcIi9kZXYvbnVsbFwiXG4gIGxldCBjdXJyZW50X2Rpcl9uYW1lID0gXCIuXCJcbiAgbGV0IHBhcmVudF9kaXJfbmFtZSA9IFwiLi5cIlxuICBsZXQgZGlyX3NlcCA9IFwiL1wiXG4gIGxldCBpc19kaXJfc2VwID0gV2luMzIuaXNfZGlyX3NlcFxuICBsZXQgaXNfcmVsYXRpdmUgPSBXaW4zMi5pc19yZWxhdGl2ZVxuICBsZXQgaXNfaW1wbGljaXQgPSBXaW4zMi5pc19pbXBsaWNpdFxuICBsZXQgY2hlY2tfc3VmZml4ID0gV2luMzIuY2hlY2tfc3VmZml4XG4gIGxldCBjaG9wX3N1ZmZpeF9vcHQgPSBXaW4zMi5jaG9wX3N1ZmZpeF9vcHRcbiAgbGV0IHRlbXBfZGlyX25hbWUgPSBVbml4LnRlbXBfZGlyX25hbWVcbiAgbGV0IHF1b3RlID0gVW5peC5xdW90ZVxuICBsZXQgcXVvdGVfY29tbWFuZCA9IFVuaXgucXVvdGVfY29tbWFuZFxuICBsZXQgYmFzZW5hbWUgPSBnZW5lcmljX2Jhc2VuYW1lIGlzX2Rpcl9zZXAgY3VycmVudF9kaXJfbmFtZVxuICBsZXQgZGlybmFtZSA9IGdlbmVyaWNfZGlybmFtZSBpc19kaXJfc2VwIGN1cnJlbnRfZGlyX25hbWVcbmVuZFxuXG5tb2R1bGUgU3lzZGVwcyA9XG4gICh2YWwgKG1hdGNoIFN5cy5vc190eXBlIHdpdGhcbiAgICAgICB8IFwiV2luMzJcIiAtPiAobW9kdWxlIFdpbjMyOiBTWVNERVBTKVxuICAgICAgIHwgXCJDeWd3aW5cIiAtPiAobW9kdWxlIEN5Z3dpbjogU1lTREVQUylcbiAgICAgICB8IF8gLT4gKG1vZHVsZSBVbml4OiBTWVNERVBTKSkpXG5cbmluY2x1ZGUgU3lzZGVwc1xuXG5sZXQgY29uY2F0IGRpcm5hbWUgZmlsZW5hbWUgPVxuICBsZXQgbCA9IFN0cmluZy5sZW5ndGggZGlybmFtZSBpblxuICBpZiBsID0gMCB8fCBpc19kaXJfc2VwIGRpcm5hbWUgKGwtMSlcbiAgdGhlbiBkaXJuYW1lIF4gZmlsZW5hbWVcbiAgZWxzZSBkaXJuYW1lIF4gZGlyX3NlcCBeIGZpbGVuYW1lXG5cbmxldCBjaG9wX3N1ZmZpeCBuYW1lIHN1ZmYgPVxuICBpZiBjaGVja19zdWZmaXggbmFtZSBzdWZmXG4gIHRoZW4gU3RyaW5nLnN1YiBuYW1lIDAgKFN0cmluZy5sZW5ndGggbmFtZSAtIFN0cmluZy5sZW5ndGggc3VmZilcbiAgZWxzZSBpbnZhbGlkX2FyZyBcIkZpbGVuYW1lLmNob3Bfc3VmZml4XCJcblxubGV0IGV4dGVuc2lvbl9sZW4gbmFtZSA9XG4gIGxldCByZWMgY2hlY2sgaTAgaSA9XG4gICAgaWYgaSA8IDAgfHwgaXNfZGlyX3NlcCBuYW1lIGkgdGhlbiAwXG4gICAgZWxzZSBpZiBuYW1lLltpXSA9ICcuJyB0aGVuIGNoZWNrIGkwIChpIC0gMSlcbiAgICBlbHNlIFN0cmluZy5sZW5ndGggbmFtZSAtIGkwXG4gIGluXG4gIGxldCByZWMgc2VhcmNoX2RvdCBpID1cbiAgICBpZiBpIDwgMCB8fCBpc19kaXJfc2VwIG5hbWUgaSB0aGVuIDBcbiAgICBlbHNlIGlmIG5hbWUuW2ldID0gJy4nIHRoZW4gY2hlY2sgaSAoaSAtIDEpXG4gICAgZWxzZSBzZWFyY2hfZG90IChpIC0gMSlcbiAgaW5cbiAgc2VhcmNoX2RvdCAoU3RyaW5nLmxlbmd0aCBuYW1lIC0gMSlcblxubGV0IGV4dGVuc2lvbiBuYW1lID1cbiAgbGV0IGwgPSBleHRlbnNpb25fbGVuIG5hbWUgaW5cbiAgaWYgbCA9IDAgdGhlbiBcIlwiIGVsc2UgU3RyaW5nLnN1YiBuYW1lIChTdHJpbmcubGVuZ3RoIG5hbWUgLSBsKSBsXG5cbmxldCBjaG9wX2V4dGVuc2lvbiBuYW1lID1cbiAgbGV0IGwgPSBleHRlbnNpb25fbGVuIG5hbWUgaW5cbiAgaWYgbCA9IDAgdGhlbiBpbnZhbGlkX2FyZyBcIkZpbGVuYW1lLmNob3BfZXh0ZW5zaW9uXCJcbiAgZWxzZSBTdHJpbmcuc3ViIG5hbWUgMCAoU3RyaW5nLmxlbmd0aCBuYW1lIC0gbClcblxubGV0IHJlbW92ZV9leHRlbnNpb24gbmFtZSA9XG4gIGxldCBsID0gZXh0ZW5zaW9uX2xlbiBuYW1lIGluXG4gIGlmIGwgPSAwIHRoZW4gbmFtZSBlbHNlIFN0cmluZy5zdWIgbmFtZSAwIChTdHJpbmcubGVuZ3RoIG5hbWUgLSBsKVxuXG5leHRlcm5hbCBvcGVuX2Rlc2M6IHN0cmluZyAtPiBvcGVuX2ZsYWcgbGlzdCAtPiBpbnQgLT4gaW50ID0gXCJjYW1sX3N5c19vcGVuXCJcbmV4dGVybmFsIGNsb3NlX2Rlc2M6IGludCAtPiB1bml0ID0gXCJjYW1sX3N5c19jbG9zZVwiXG5cbmxldCBwcm5nID0gbGF6eShSYW5kb20uU3RhdGUubWFrZV9zZWxmX2luaXQgKCkpXG5cbmxldCB0ZW1wX2ZpbGVfbmFtZSB0ZW1wX2RpciBwcmVmaXggc3VmZml4ID1cbiAgbGV0IHJuZCA9IChSYW5kb20uU3RhdGUuYml0cyAoTGF6eS5mb3JjZSBwcm5nKSkgbGFuZCAweEZGRkZGRiBpblxuICBjb25jYXQgdGVtcF9kaXIgKFByaW50Zi5zcHJpbnRmIFwiJXMlMDZ4JXNcIiBwcmVmaXggcm5kIHN1ZmZpeClcblxuXG5sZXQgY3VycmVudF90ZW1wX2Rpcl9uYW1lID0gcmVmIHRlbXBfZGlyX25hbWVcblxubGV0IHNldF90ZW1wX2Rpcl9uYW1lIHMgPSBjdXJyZW50X3RlbXBfZGlyX25hbWUgOj0gc1xubGV0IGdldF90ZW1wX2Rpcl9uYW1lICgpID0gIWN1cnJlbnRfdGVtcF9kaXJfbmFtZVxuXG5sZXQgdGVtcF9maWxlID8odGVtcF9kaXIgPSAhY3VycmVudF90ZW1wX2Rpcl9uYW1lKSBwcmVmaXggc3VmZml4ID1cbiAgbGV0IHJlYyB0cnlfbmFtZSBjb3VudGVyID1cbiAgICBsZXQgbmFtZSA9IHRlbXBfZmlsZV9uYW1lIHRlbXBfZGlyIHByZWZpeCBzdWZmaXggaW5cbiAgICB0cnlcbiAgICAgIGNsb3NlX2Rlc2Mob3Blbl9kZXNjIG5hbWUgW09wZW5fd3Jvbmx5OyBPcGVuX2NyZWF0OyBPcGVuX2V4Y2xdIDBvNjAwKTtcbiAgICAgIG5hbWVcbiAgICB3aXRoIFN5c19lcnJvciBfIGFzIGUgLT5cbiAgICAgIGlmIGNvdW50ZXIgPj0gMTAwMCB0aGVuIHJhaXNlIGUgZWxzZSB0cnlfbmFtZSAoY291bnRlciArIDEpXG4gIGluIHRyeV9uYW1lIDBcblxubGV0IG9wZW5fdGVtcF9maWxlID8obW9kZSA9IFtPcGVuX3RleHRdKSA/KHBlcm1zID0gMG82MDApXG4gICAgICAgICAgICAgICAgICAgPyh0ZW1wX2RpciA9ICFjdXJyZW50X3RlbXBfZGlyX25hbWUpIHByZWZpeCBzdWZmaXggPVxuICBsZXQgcmVjIHRyeV9uYW1lIGNvdW50ZXIgPVxuICAgIGxldCBuYW1lID0gdGVtcF9maWxlX25hbWUgdGVtcF9kaXIgcHJlZml4IHN1ZmZpeCBpblxuICAgIHRyeVxuICAgICAgKG5hbWUsXG4gICAgICAgb3Blbl9vdXRfZ2VuIChPcGVuX3dyb25seTo6T3Blbl9jcmVhdDo6T3Blbl9leGNsOjptb2RlKSBwZXJtcyBuYW1lKVxuICAgIHdpdGggU3lzX2Vycm9yIF8gYXMgZSAtPlxuICAgICAgaWYgY291bnRlciA+PSAxMDAwIHRoZW4gcmFpc2UgZSBlbHNlIHRyeV9uYW1lIChjb3VudGVyICsgMSlcbiAgaW4gdHJ5X25hbWUgMFxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAwMiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBDb21wbGV4IG51bWJlcnMgKilcblxudHlwZSB0ID0geyByZTogZmxvYXQ7IGltOiBmbG9hdCB9XG5cbmxldCB6ZXJvID0geyByZSA9IDAuMDsgaW0gPSAwLjAgfVxubGV0IG9uZSA9IHsgcmUgPSAxLjA7IGltID0gMC4wIH1cbmxldCBpID0geyByZSA9IDAuMDsgaW0gPSAxLjAgfVxuXG5sZXQgYWRkIHggeSA9IHsgcmUgPSB4LnJlICsuIHkucmU7IGltID0geC5pbSArLiB5LmltIH1cblxubGV0IHN1YiB4IHkgPSB7IHJlID0geC5yZSAtLiB5LnJlOyBpbSA9IHguaW0gLS4geS5pbSB9XG5cbmxldCBuZWcgeCA9IHsgcmUgPSAtLiB4LnJlOyBpbSA9IC0uIHguaW0gfVxuXG5sZXQgY29uaiB4ID0geyByZSA9IHgucmU7IGltID0gLS4geC5pbSB9XG5cbmxldCBtdWwgeCB5ID0geyByZSA9IHgucmUgKi4geS5yZSAtLiB4LmltICouIHkuaW07XG4gICAgICAgICAgICAgICAgaW0gPSB4LnJlICouIHkuaW0gKy4geC5pbSAqLiB5LnJlIH1cblxubGV0IGRpdiB4IHkgPVxuICBpZiBhYnNfZmxvYXQgeS5yZSA+PSBhYnNfZmxvYXQgeS5pbSB0aGVuXG4gICAgbGV0IHIgPSB5LmltIC8uIHkucmUgaW5cbiAgICBsZXQgZCA9IHkucmUgKy4gciAqLiB5LmltIGluXG4gICAgeyByZSA9ICh4LnJlICsuIHIgKi4geC5pbSkgLy4gZDtcbiAgICAgIGltID0gKHguaW0gLS4gciAqLiB4LnJlKSAvLiBkIH1cbiAgZWxzZVxuICAgIGxldCByID0geS5yZSAvLiB5LmltIGluXG4gICAgbGV0IGQgPSB5LmltICsuIHIgKi4geS5yZSBpblxuICAgIHsgcmUgPSAociAqLiB4LnJlICsuIHguaW0pIC8uIGQ7XG4gICAgICBpbSA9IChyICouIHguaW0gLS4geC5yZSkgLy4gZCB9XG5cbmxldCBpbnYgeCA9IGRpdiBvbmUgeFxuXG5sZXQgbm9ybTIgeCA9IHgucmUgKi4geC5yZSArLiB4LmltICouIHguaW1cblxubGV0IG5vcm0geCA9XG4gICgqIFdhdGNoIG91dCBmb3Igb3ZlcmZsb3cgaW4gY29tcHV0aW5nIHJlXjIgKyBpbV4yICopXG4gIGxldCByID0gYWJzX2Zsb2F0IHgucmUgYW5kIGkgPSBhYnNfZmxvYXQgeC5pbSBpblxuICBpZiByID0gMC4wIHRoZW4gaVxuICBlbHNlIGlmIGkgPSAwLjAgdGhlbiByXG4gIGVsc2UgaWYgciA+PSBpIHRoZW5cbiAgICBsZXQgcSA9IGkgLy4gciBpbiByICouIHNxcnQoMS4wICsuIHEgKi4gcSlcbiAgZWxzZVxuICAgIGxldCBxID0gciAvLiBpIGluIGkgKi4gc3FydCgxLjAgKy4gcSAqLiBxKVxuXG5sZXQgYXJnIHggPSBhdGFuMiB4LmltIHgucmVcblxubGV0IHBvbGFyIG4gYSA9IHsgcmUgPSBjb3MgYSAqLiBuOyBpbSA9IHNpbiBhICouIG4gfVxuXG5sZXQgc3FydCB4ID1cbiAgaWYgeC5yZSA9IDAuMCAmJiB4LmltID0gMC4wIHRoZW4geyByZSA9IDAuMDsgaW0gPSAwLjAgfVxuICBlbHNlIGJlZ2luXG4gICAgbGV0IHIgPSBhYnNfZmxvYXQgeC5yZSBhbmQgaSA9IGFic19mbG9hdCB4LmltIGluXG4gICAgbGV0IHcgPVxuICAgICAgaWYgciA+PSBpIHRoZW4gYmVnaW5cbiAgICAgICAgbGV0IHEgPSBpIC8uIHIgaW5cbiAgICAgICAgc3FydChyKSAqLiBzcXJ0KDAuNSAqLiAoMS4wICsuIHNxcnQoMS4wICsuIHEgKi4gcSkpKVxuICAgICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgICAgbGV0IHEgPSByIC8uIGkgaW5cbiAgICAgICAgc3FydChpKSAqLiBzcXJ0KDAuNSAqLiAocSArLiBzcXJ0KDEuMCArLiBxICouIHEpKSlcbiAgICAgIGVuZCBpblxuICAgIGlmIHgucmUgPj0gMC4wXG4gICAgdGhlbiB7IHJlID0gdzsgIGltID0gMC41ICouIHguaW0gLy4gdyB9XG4gICAgZWxzZSB7IHJlID0gMC41ICouIGkgLy4gdzsgIGltID0gaWYgeC5pbSA+PSAwLjAgdGhlbiB3IGVsc2UgLS4gdyB9XG4gIGVuZFxuXG5sZXQgZXhwIHggPVxuICBsZXQgZSA9IGV4cCB4LnJlIGluIHsgcmUgPSBlICouIGNvcyB4LmltOyBpbSA9IGUgKi4gc2luIHguaW0gfVxuXG5sZXQgbG9nIHggPSB7IHJlID0gbG9nIChub3JtIHgpOyBpbSA9IGF0YW4yIHguaW0geC5yZSB9XG5cbmxldCBwb3cgeCB5ID0gZXhwIChtdWwgeSAobG9nIHgpKVxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgIEJlbm9pdCBWYXVnb24sIEVOU1RBICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxNCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBQYWRkaW5nIHBvc2l0aW9uLiAqKVxudHlwZSBwYWR0eSA9XG4gIHwgTGVmdCAgICgqIFRleHQgaXMgbGVmdCBqdXN0aWZpZWQgKCctJyBvcHRpb24pLiAgICAgICAgICAgICAgICopXG4gIHwgUmlnaHQgICgqIFRleHQgaXMgcmlnaHQganVzdGlmaWVkIChubyAnLScgb3B0aW9uKS4gICAgICAgICAgICopXG4gIHwgWmVyb3MgICgqIFRleHQgaXMgcmlnaHQganVzdGlmaWVkIGJ5IHplcm9zIChzZWUgJzAnIG9wdGlvbikuICopXG5cbigqKiopXG5cbigqIEludGVnZXIgY29udmVyc2lvbi4gKilcbnR5cGUgaW50X2NvbnYgPVxuICB8IEludF9kIHwgSW50X3BkIHwgSW50X3NkICAgICAgICAoKiAgJWQgfCAlK2QgfCAlIGQgICopXG4gIHwgSW50X2kgfCBJbnRfcGkgfCBJbnRfc2kgICAgICAgICgqICAlaSB8ICUraSB8ICUgaSAgKilcbiAgfCBJbnRfeCB8IEludF9DeCAgICAgICAgICAgICAgICAgKCogICV4IHwgJSN4ICAgICAgICAqKVxuICB8IEludF9YIHwgSW50X0NYICAgICAgICAgICAgICAgICAoKiAgJVggfCAlI1ggICAgICAgICopXG4gIHwgSW50X28gfCBJbnRfQ28gICAgICAgICAgICAgICAgICgqICAlbyB8ICUjbyAgICAgICAgKilcbiAgfCBJbnRfdSAgICAgICAgICAgICAgICAgICAgICAgICAgKCogICV1ICAgICAgICAgICAgICAqKVxuICB8IEludF9DZCB8IEludF9DaSB8IEludF9DdSAgICAgICAoKiAgJSNkIHwgJSNpIHwgJSN1ICopXG5cbigqIEZsb2F0IGNvbnZlcnNpb24uICopXG50eXBlIGZsb2F0X2ZsYWdfY29udiA9XG4gIHwgRmxvYXRfZmxhZ18gICAgICAgICAgICAgICAgICAgICgqICVbZmVFZ0dGaEhdICopXG4gIHwgRmxvYXRfZmxhZ19wICAgICAgICAgICAgICAgICAgICgqICUrW2ZlRWdHRmhIXSAqKVxuICB8IEZsb2F0X2ZsYWdfcyAgICAgICAgICAgICAgICAgICAoKiAlIFtmZUVnR0ZoSF0gKilcbnR5cGUgZmxvYXRfa2luZF9jb252ID1cbiAgfCBGbG9hdF9mICAgICAgICAgICAgICAgICAgICAgICAgKCogICVmIHwgJStmIHwgJSBmICAqKVxuICB8IEZsb2F0X2UgICAgICAgICAgICAgICAgICAgICAgICAoKiAgJWUgfCAlK2UgfCAlIGUgICopXG4gIHwgRmxvYXRfRSAgICAgICAgICAgICAgICAgICAgICAgICgqICAlRSB8ICUrRSB8ICUgRSAgKilcbiAgfCBGbG9hdF9nICAgICAgICAgICAgICAgICAgICAgICAgKCogICVnIHwgJStnIHwgJSBnICAqKVxuICB8IEZsb2F0X0cgICAgICAgICAgICAgICAgICAgICAgICAoKiAgJUcgfCAlK0cgfCAlIEcgICopXG4gIHwgRmxvYXRfRiAgICAgICAgICAgICAgICAgICAgICAgICgqICAlRiB8ICUrRiB8ICUgRiAgKilcbiAgfCBGbG9hdF9oICAgICAgICAgICAgICAgICAgICAgICAgKCogICVoIHwgJStoIHwgJSBoICAqKVxuICB8IEZsb2F0X0ggICAgICAgICAgICAgICAgICAgICAgICAoKiAgJUggfCAlK0ggfCAlIEggICopXG4gIHwgRmxvYXRfQ0YgICAgICAgICAgICAgICAgICAgICAgICgqICAlI0Z8ICUrI0Z8ICUgI0YgKilcbnR5cGUgZmxvYXRfY29udiA9IGZsb2F0X2ZsYWdfY29udiAqIGZsb2F0X2tpbmRfY29udlxuXG4oKioqKVxuXG4oKiBDaGFyIHNldHMgKHNlZSAlWy4uLl0pIGFyZSBiaXRtYXBzIGltcGxlbWVudGVkIGFzIDMyLWNoYXIgc3RyaW5ncy4gKilcbnR5cGUgY2hhcl9zZXQgPSBzdHJpbmdcblxuKCoqKilcblxuKCogQ291bnRlciB1c2VkIGluIFNjYW5mLiAqKVxudHlwZSBjb3VudGVyID1cbiAgfCBMaW5lX2NvdW50ZXIgICAgICgqICAlbCAgICAgICopXG4gIHwgQ2hhcl9jb3VudGVyICAgICAoKiAgJW4gICAgICAqKVxuICB8IFRva2VuX2NvdW50ZXIgICAgKCogICVOLCAlTCAgKilcblxuKCoqKilcblxuKCogUGFkZGluZyBvZiBzdHJpbmdzIGFuZCBudW1iZXJzLiAqKVxudHlwZSAoJ2EsICdiKSBwYWRkaW5nID1cbiAgKCogTm8gcGFkZGluZyAoZXg6IFwiJWRcIikgKilcbiAgfCBOb19wYWRkaW5nICA6ICgnYSwgJ2EpIHBhZGRpbmdcbiAgKCogTGl0ZXJhbCBwYWRkaW5nIChleDogXCIlOGRcIikgKilcbiAgfCBMaXRfcGFkZGluZyA6IHBhZHR5ICogaW50IC0+ICgnYSwgJ2EpIHBhZGRpbmdcbiAgKCogUGFkZGluZyBhcyBleHRyYSBhcmd1bWVudCAoZXg6IFwiJSpkXCIpICopXG4gIHwgQXJnX3BhZGRpbmcgOiBwYWR0eSAtPiAoaW50IC0+ICdhLCAnYSkgcGFkZGluZ1xuXG4oKiBTb21lIGZvcm1hdHMsIHN1Y2ggYXMgJV9kLFxuICAgb25seSBhY2NlcHQgYW4gb3B0aW9uYWwgbnVtYmVyIGFzIHBhZGRpbmcgb3B0aW9uIChubyBleHRyYSBhcmd1bWVudCkgKilcbnR5cGUgcGFkX29wdGlvbiA9IGludCBvcHRpb25cblxuKCogUHJlY2lzaW9uIG9mIGZsb2F0cyBhbmQgJzAnLXBhZGRpbmcgb2YgaW50ZWdlcnMuICopXG50eXBlICgnYSwgJ2IpIHByZWNpc2lvbiA9XG4gICgqIE5vIHByZWNpc2lvbiAoZXg6IFwiJWZcIikgKilcbiAgfCBOb19wcmVjaXNpb24gOiAoJ2EsICdhKSBwcmVjaXNpb25cbiAgKCogTGl0ZXJhbCBwcmVjaXNpb24gKGV4OiBcIiUuM2ZcIikgKilcbiAgfCBMaXRfcHJlY2lzaW9uIDogaW50IC0+ICgnYSwgJ2EpIHByZWNpc2lvblxuICAoKiBQcmVjaXNpb24gYXMgZXh0cmEgYXJndW1lbnQgKGV4OiBcIiUuKmZcIikgKilcbiAgfCBBcmdfcHJlY2lzaW9uIDogKGludCAtPiAnYSwgJ2EpIHByZWNpc2lvblxuXG4oKiBTb21lIGZvcm1hdHMsIHN1Y2ggYXMgJV9mLFxuICAgb25seSBhY2NlcHQgYW4gb3B0aW9uYWwgbnVtYmVyIGFzIHByZWNpc2lvbiBvcHRpb24gKG5vIGV4dHJhIGFyZ3VtZW50KSAqKVxudHlwZSBwcmVjX29wdGlvbiA9IGludCBvcHRpb25cblxuKCogc2VlIHRoZSBDdXN0b20gZm9ybWF0IGNvbWJpbmF0b3IgKilcbnR5cGUgKCdhLCAnYiwgJ2MpIGN1c3RvbV9hcml0eSA9XG4gIHwgQ3VzdG9tX3plcm8gOiAoJ2EsIHN0cmluZywgJ2EpIGN1c3RvbV9hcml0eVxuICB8IEN1c3RvbV9zdWNjIDogKCdhLCAnYiwgJ2MpIGN1c3RvbV9hcml0eSAtPlxuICAgICgnYSwgJ3ggLT4gJ2IsICd4IC0+ICdjKSBjdXN0b21fYXJpdHlcblxuKCoqKilcblxuKCogICAgICAgIFJlbGF0aW9uYWwgZm9ybWF0IHR5cGVzXG5cbkluIHRoZSBmaXJzdCBmb3JtYXQrZ2FkdHMgaW1wbGVtZW50YXRpb24sIHRoZSB0eXBlIGZvciAlKC4uJSkgaW4gdGhlXG5mbXQgR0FEVCB3YXMgYXMgZm9sbG93czpcblxufCBGb3JtYXRfc3Vic3QgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlKC4uLiUpICopXG4gICAgcGFkX29wdGlvbiAqICgnZDEsICdxMSwgJ2QyLCAncTIpIHJlYWRlcl9uYl91bmlmaWVyICpcbiAgICAoJ3gsICdiLCAnYywgJ2QxLCAncTEsICd1KSBmbXR0eSAqXG4gICAgKCd1LCAnYiwgJ2MsICdxMSwgJ2UxLCAnZikgZm10IC0+XG4gICAgICAoKCd4LCAnYiwgJ2MsICdkMiwgJ3EyLCAndSkgZm9ybWF0NiAtPiAneCwgJ2IsICdjLCAnZDEsICdlMSwgJ2YpIGZtdFxuXG5Ob3RpY2UgdGhhdCB0aGUgJ3UgcGFyYW1ldGVyIGluICdmIHBvc2l0aW9uIGluIHRoZSBmb3JtYXQgYXJndW1lbnRcbigoJ3gsIC4uLCAndSkgZm9ybWF0NiAtPiAuLikgaXMgZXF1YWwgdG8gdGhlICd1IHBhcmFtZXRlciBpbiAnYVxucG9zaXRpb24gaW4gdGhlIGZvcm1hdCB0YWlsICgoJ3UsIC4uLCAnZikgZm10KS4gVGhpcyBtZWFucyB0aGF0IHRoZVxudHlwZSBvZiB0aGUgZXhwZWN0ZWQgZm9ybWF0IHBhcmFtZXRlciBkZXBlbmRzIG9mIHdoZXJlIHRoZSAlKC4uLiUpXG5hcmUgaW4gdGhlIGZvcm1hdCBzdHJpbmc6XG5cbiAgIyBQcmludGYucHJpbnRmIFwiJSglKVwiXG4gIC0gOiAodW5pdCwgb3V0X2NoYW5uZWwsIHVuaXQsICdfYSwgJ19hLCB1bml0KVxuICAgICAgQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzLmZvcm1hdDYgLT4gdW5pdFxuICA9IDxmdW4+XG4gICMgUHJpbnRmLnByaW50ZiBcIiUoJSklZFwiXG4gIC0gOiAoaW50IC0+IHVuaXQsIG91dF9jaGFubmVsLCB1bml0LCAnX2EsICdfYSwgaW50IC0+IHVuaXQpXG4gICAgICBDYW1saW50ZXJuYWxGb3JtYXRCYXNpY3MuZm9ybWF0NiAtPiBpbnQgLT4gdW5pdFxuICA9IDxmdW4+XG5cbk9uIHRoZSBjb250cmFyeSwgdGhlIGxlZ2FjeSB0eXBlciBnaXZlcyBhIGNsZXZlciB0eXBlIHRoYXQgZG9lcyBub3RcbmRlcGVuZCBvbiB0aGUgcG9zaXRpb24gb2YgJSguLiUpIGluIHRoZSBmb3JtYXQgc3RyaW5nLiBGb3IgZXhhbXBsZSxcbiUoJSkgd2lsbCBoYXZlIHRoZSBwb2x5bW9ycGhpYyB0eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKTogaXQgY2FuXG5iZSBjb25jYXRlbmF0ZWQgdG8gYW55IGZvcm1hdCB0eXBlLCBhbmQgb25seSBlbmZvcmNlcyB0aGUgY29uc3RyYWludFxudGhhdCBpdHMgJ2EgYW5kICdmIHBhcmFtZXRlcnMgYXJlIGVxdWFsIChubyBmb3JtYXQgYXJndW1lbnRzKSBhbmQgJ2RcbmFuZCAnZSBhcmUgZXF1YWwgKG5vIHJlYWRlciBhcmd1bWVudCkuXG5cblRoZSB3ZWFrZW5pbmcgb2YgdGhpcyBwYXJhbWV0ZXIgdHlwZSBpbiB0aGUgR0FEVCB2ZXJzaW9uIGJyb2tlIHVzZXJcbmNvZGUgKGluIGZhY3QgaXQgZXNzZW50aWFsbHkgbWFkZSAlKC4uLiUpIHVudXNhYmxlIGV4Y2VwdCBhdCB0aGUgbGFzdFxucG9zaXRpb24gb2YgYSBmb3JtYXQpLiBJbiBwYXJ0aWN1bGFyLCB0aGUgZm9sbG93aW5nIHdvdWxkIG5vdCB3b3JrXG5hbnltb3JlOlxuXG4gIGZ1biBzZXAgLT5cbiAgICBGb3JtYXQucHJpbnRmIFwiZm9vJSglKWJhciUoJSliYXpcIiBzZXAgc2VwXG5cbkFzIHRoZSB0eXBlLWNoZWNrZXIgd291bGQgcmVxdWlyZSB0d28gKmluY29tcGF0aWJsZSogdHlwZXMgZm9yIHRoZSAlKCUpXG5pbiBkaWZmZXJlbnQgcG9zaXRpb25zLlxuXG5UaGUgc29sdXRpb24gdG8gcmVnYWluIGEgZ2VuZXJhbCB0eXBlIGZvciAlKC4uJSkgaXMgdG8gZ2VuZXJhbGl6ZSB0aGlzXG50ZWNobmlxdWUsIG5vdCBvbmx5IG9uIHRoZSAnZCwgJ2UgcGFyYW1ldGVycywgYnV0IG9uIGFsbCBzaXhcbnBhcmFtZXRlcnMgb2YgYSBmb3JtYXQ6IHdlIGludHJvZHVjZSBhIFwicmVsYXRpb25hbFwiIHR5cGVcbiAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbndob3NlIHZhbHVlcyBhcmUgcHJvb2ZzIHRoYXQgKCdhMSwgLi4sICdmMSkgYW5kICgnYTIsIC4uLCAnZjIpIG1vcmFsbHlcbmNvcnJlc3BvbmQgdG8gdGhlIHNhbWUgZm9ybWF0IHR5cGU6ICdhMSBpcyBvYnRhaW5lZCBmcm9tICdmMSwnYjEsJ2MxXG5pbiB0aGUgZXhhY3Qgc2FtZSB3YXkgdGhhdCAnYTIgaXMgb2J0YWluZWQgZnJvbSAnZjIsJ2IyLCdjMiwgZXRjLlxuXG5Gb3IgZXhhbXBsZSwgdGhlIHJlbGF0aW9uIGJldHdlZW4gdHdvIGZvcm1hdCB0eXBlcyBiZWdpbm5pbmcgd2l0aCBhIENoYXJcbnBhcmFtZXRlciBpcyBhcyBmb2xsb3dzOlxuXG58IENoYXJfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlYyAgKilcbiAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgKGNoYXIgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgY2hhciAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcblxuSW4gdGhlIGdlbmVyYWwgY2FzZSwgdGhlIHRlcm0gc3RydWN0dXJlIG9mIGZtdHR5X3JlbCBpcyAoYWxtb3N0WzFdKVxuaXNvbW9ycGhpYyB0byB0aGUgZm10dHkgb2YgdGhlIHByZXZpb3VzIGltcGxlbWVudGF0aW9uOiBldmVyeVxuY29uc3RydWN0b3IgaXMgcmUtcmVhZCB3aXRoIGEgYmluYXJ5LCByZWxhdGlvbmFsIHR5cGUsIGluc3RlYWQgb2YgdGhlXG5wcmV2aW91cyB1bmFyeSB0eXBpbmcuIGZtdHR5IGNhbiB0aGVuIGJlIHJlLWRlZmluZWQgYXMgdGhlIGRpYWdvbmFsIG9mXG5mbXR0eV9yZWw6XG5cbiAgdHlwZSAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHkgPVxuICAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmLFxuICAgICAgICAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eV9yZWxcblxuT25jZSB3ZSBoYXZlIHRoaXMgZm10dHlfcmVsIHR5cGUgaW4gcGxhY2UsIHdlIGNhbiBnaXZlIHRoZSBtb3JlXG5nZW5lcmFsIHR5cGUgdG8gJSguLi4lKTpcblxufCBGb3JtYXRfc3Vic3QgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlKC4uLiUpICopXG4gICAgcGFkX29wdGlvbiAqXG4gICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wsXG4gICAgICdnMiwgJ2IsICdjLCAnajIsICdkLCAnYSkgZm10dHlfcmVsICpcbiAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgKCgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdnMiwgJ2IsICdjLCAnajIsICdlLCAnZikgZm10XG5cbldlIGFjY2VwdCBhbnkgZm9ybWF0ICgoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NikgKHRoaXMgaXNcbmNvbXBsZXRlbHkgdW5yZWxhdGVkIHRvIHRoZSB0eXBlIG9mIHRoZSBjdXJyZW50IGZvcm1hdCksIGJ1dCBhbHNvXG5yZXF1aXJlIGEgcHJvb2YgdGhhdCB0aGlzIGZvcm1hdCBpcyBpbiByZWxhdGlvbiB0byBhbm90aGVyIGZvcm1hdCB0aGF0XG5pcyBjb25jYXRlbmFibGUgdG8gdGhlIGZvcm1hdCB0YWlsLiBXaGVuIGV4ZWN1dGluZyBhICUoLi4uJSkgZm9ybWF0XG4oaW4gY2FtbGludGVybmFsRm9ybWF0Lm1sOm1ha2VfcHJpbnRmIG9yIHNjYW5mLm1sOm1ha2Vfc2NhbmYpLCB3ZVxudHJhbnN0eXBlIHRoZSBmb3JtYXQgYWxvbmcgdGhpcyByZWxhdGlvbiB1c2luZyB0aGUgJ3JlY2FzdCcgZnVuY3Rpb25cbnRvIHRyYW5zcG9zZSBiZXR3ZWVuIHJlbGF0ZWQgZm9ybWF0IHR5cGVzLlxuXG4gIHZhbCByZWNhc3QgOlxuICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSkgZm10XG4gIC0+ICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIC0+ICgnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXRcblxuTk9URSBbMV06IHRoZSB0eXBpbmcgb2YgRm9ybWF0X3N1YnN0X3R5IHJlcXVpcmVzIG5vdCBvbmUgZm9ybWF0IHR5cGUsIGJ1dFxudHdvLCBvbmUgdG8gZXN0YWJsaXNoIHRoZSBsaW5rIGJldHdlZW4gdGhlIGZvcm1hdCBhcmd1bWVudCBhbmQgdGhlXG5maXJzdCBzaXggcGFyYW1ldGVycywgYW5kIHRoZSBvdGhlciBmb3IgdGhlIGxpbmsgYmV0d2VlbiB0aGUgZm9ybWF0XG5hcmd1bWVudCBhbmQgdGhlIGxhc3Qgc2l4IHBhcmFtZXRlcnMuXG5cbnwgRm9ybWF0X3N1YnN0X3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICUoLi4uJSkgKilcbiAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCxcbiAgICAgJ2cxLCAnYjEsICdjMSwgJ2oxLCAnZDEsICdhMSkgZm10dHlfcmVsICpcbiAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCxcbiAgICAgJ2cyLCAnYjIsICdjMiwgJ2oyLCAnZDIsICdhMikgZm10dHlfcmVsICpcbiAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgKCgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdnMSwgJ2IxLCAnYzEsICdqMSwgJ2UxLCAnZjEsXG4gICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdnMiwgJ2IyLCAnYzIsICdqMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuXG5XaGVuIHdlIGdlbmVyYXRlIGEgZm9ybWF0IEFTVCwgd2UgZ2VuZXJhdGUgZXhhY3RseSB0aGUgc2FtZSB3aXRuZXNzXG5mb3IgYm90aCByZWxhdGlvbnMsIGFuZCB0aGUgd2l0bmVzcy1jb252ZXJzaW9uIGZ1bmN0aW9ucyBpblxuY2FtbGludGVybmFsRm9ybWF0IGRvIHJlbHkgb24gdGhpcyBpbnZhcmlhbnQuIEZvciBleGFtcGxlLCB0aGVcbmZ1bmN0aW9uIHRoYXQgcHJvdmVzIHRoYXQgdGhlIHJlbGF0aW9uIGlzIHRyYW5zaXRpdmVcblxuICB2YWwgdHJhbnMgOlxuICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICAtPiAoJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMixcbiAgICAgICdhMywgJ2IzLCAnYzMsICdkMywgJ2UzLCAnZjMpIGZtdHR5X3JlbFxuICAtPiAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICdhMywgJ2IzLCAnYzMsICdkMywgJ2UzLCAnZjMpIGZtdHR5X3JlbFxuXG5kb2VzIGFzc3VtZSB0aGF0IHRoZSB0d28gaW5wdXRzIGhhdmUgZXhhY3RseSB0aGUgc2FtZSB0ZXJtIHN0cnVjdHVyZVxuKGFuZCBpcyBvbmx5IGV2ZXJ5IHVzZWQgZm9yIGFyZ3VtZW50IHdpdG5lc3NlcyBvZiB0aGVcbkZvcm1hdF9zdWJzdF90eSBjb25zdHJ1Y3RvcikuXG4qKVxuXG4oKiBUeXBlIG9mIGEgYmxvY2sgdXNlZCBieSB0aGUgRm9ybWF0IHByZXR0eS1wcmludGVyLiAqKVxudHlwZSBibG9ja190eXBlID1cbiAgfCBQcF9oYm94ICAgKCogSG9yaXpvbnRhbCBibG9jayBubyBsaW5lIGJyZWFraW5nICopXG4gIHwgUHBfdmJveCAgICgqIFZlcnRpY2FsIGJsb2NrIGVhY2ggYnJlYWsgbGVhZHMgdG8gYSBuZXcgbGluZSAqKVxuICB8IFBwX2h2Ym94ICAoKiBIb3Jpem9udGFsLXZlcnRpY2FsIGJsb2NrOiBzYW1lIGFzIHZib3gsIGV4Y2VwdCBpZiB0aGlzIGJsb2NrXG4gICAgICAgICAgICAgICAgIGlzIHNtYWxsIGVub3VnaCB0byBmaXQgb24gYSBzaW5nbGUgbGluZSAqKVxuICB8IFBwX2hvdmJveCAoKiBIb3Jpem9udGFsIG9yIFZlcnRpY2FsIGJsb2NrOiBicmVha3MgbGVhZCB0byBuZXcgbGluZVxuICAgICAgICAgICAgICAgICBvbmx5IHdoZW4gbmVjZXNzYXJ5IHRvIHByaW50IHRoZSBjb250ZW50IG9mIHRoZSBibG9jayAqKVxuICB8IFBwX2JveCAgICAoKiBIb3Jpem9udGFsIG9yIEluZGVudCBibG9jazogYnJlYWtzIGxlYWQgdG8gbmV3IGxpbmVcbiAgICAgICAgICAgICAgICAgb25seSB3aGVuIG5lY2Vzc2FyeSB0byBwcmludCB0aGUgY29udGVudCBvZiB0aGUgYmxvY2ssIG9yXG4gICAgICAgICAgICAgICAgIHdoZW4gaXQgbGVhZHMgdG8gYSBuZXcgaW5kZW50YXRpb24gb2YgdGhlIGN1cnJlbnQgbGluZSAqKVxuICB8IFBwX2ZpdHMgICAoKiBJbnRlcm5hbCB1c2FnZTogd2hlbiBhIGJsb2NrIGZpdHMgb24gYSBzaW5nbGUgbGluZSAqKVxuXG4oKiBGb3JtYXR0aW5nIGVsZW1lbnQgdXNlZCBieSB0aGUgRm9ybWF0IHByZXR0eS1wcmludGVyLiAqKVxudHlwZSBmb3JtYXR0aW5nX2xpdCA9XG4gIHwgQ2xvc2VfYm94ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEBdICAgKilcbiAgfCBDbG9zZV90YWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQH0gICAqKVxuICB8IEJyZWFrIG9mIHN0cmluZyAqIGludCAqIGludCAgICAgICAgICAoKiBALCB8IEAgIHwgQDsgfCBAOzw+ICopXG4gIHwgRkZsdXNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEA/ICAgKilcbiAgfCBGb3JjZV9uZXdsaW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQFxcbiAgKilcbiAgfCBGbHVzaF9uZXdsaW5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQC4gICAqKVxuICB8IE1hZ2ljX3NpemUgb2Ygc3RyaW5nICogaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAPG4+ICopXG4gIHwgRXNjYXBlZF9hdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEBAICAgKilcbiAgfCBFc2NhcGVkX3BlcmNlbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQCUlICAqKVxuICB8IFNjYW5faW5kaWMgb2YgY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAWCAgICopXG5cbigqIEZvcm1hdHRpbmcgZWxlbWVudCB1c2VkIGJ5IHRoZSBGb3JtYXQgcHJldHR5LXByaW50ZXIuICopXG50eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXR0aW5nX2dlbiA9XG4gIHwgT3Blbl90YWcgOiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0NiAtPiAgICAgICgqIEB7ICAgKilcbiAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0dGluZ19nZW5cbiAgfCBPcGVuX2JveCA6ICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXQ2IC0+ICAgICAgKCogQFsgICAqKVxuICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXR0aW5nX2dlblxuXG4oKioqKVxuXG4oKiBMaXN0IG9mIGZvcm1hdCB0eXBlIGVsZW1lbnRzLiAqKVxuKCogSW4gcGFydGljdWxhciB1c2VkIHRvIHJlcHJlc2VudCAlKC4uLiUpIGFuZCAley4uLiV9IGNvbnRlbnRzLiAqKVxuYW5kICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eSA9XG4gICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmLFxuICAgICAgJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHlfcmVsXG5hbmQgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCA9XG4gIHwgQ2hhcl90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVjICAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoY2hhciAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgIGNoYXIgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgU3RyaW5nX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVzICAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoc3RyaW5nIC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgc3RyaW5nIC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IEludF90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlZCAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKGludCAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgIGludCAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBJbnQzMl90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWxkICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgIChpbnQzMiAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgIGludDMyIC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IE5hdGl2ZWludF90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlbmQgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKG5hdGl2ZWludCAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgIG5hdGl2ZWludCAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBJbnQ2NF90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJUxkICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgIChpbnQ2NCAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgIGludDY0IC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IEZsb2F0X3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlZiAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKGZsb2F0IC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgZmxvYXQgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgQm9vbF90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVCICAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoYm9vbCAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgIGJvb2wgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG5cbiAgfCBGb3JtYXRfYXJnX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJXsuLi4lfSAqKVxuICAgICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZtdHR5ICpcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKCgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMilcbiAgICAgICAgICAgZm10dHlfcmVsXG4gIHwgRm9ybWF0X3N1YnN0X3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICUoLi4uJSkgKilcbiAgICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsLFxuICAgICAgICdnMSwgJ2IxLCAnYzEsICdqMSwgJ2QxLCAnYTEpIGZtdHR5X3JlbCAqXG4gICAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCxcbiAgICAgICAnZzIsICdiMiwgJ2MyLCAnajIsICdkMiwgJ2EyKSBmbXR0eV9yZWwgKlxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYgLT4gJ2cxLCAnYjEsICdjMSwgJ2oxLCAnZTEsICdmMSxcbiAgICAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NiAtPiAnZzIsICdiMiwgJ2MyLCAnajIsICdlMiwgJ2YyKVxuICAgICAgICAgICBmbXR0eV9yZWxcblxuICAoKiBQcmludGYgYW5kIEZvcm1hdCBzcGVjaWZpYyBjb25zdHJ1Y3RvcnMuICopXG4gIHwgQWxwaGFfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVhICAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoKCdiMSAtPiAneCAtPiAnYzEpIC0+ICd4IC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgKCdiMiAtPiAneCAtPiAnYzIpIC0+ICd4IC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IFRoZXRhX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAldCAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKCgnYjEgLT4gJ2MxKSAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICgnYjIgLT4gJ2MyKSAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBBbnlfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIFVzZWQgZm9yIGN1c3RvbSBmb3JtYXRzICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgICgneCAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICd4IC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuXG4gICgqIFNjYW5mIHNwZWNpZmljIGNvbnN0cnVjdG9yLiAqKVxuICB8IFJlYWRlcl90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlciAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKCd4IC0+ICdhMSwgJ2IxLCAnYzEsICgnYjEgLT4gJ3gpIC0+ICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ3ggLT4gJ2EyLCAnYjIsICdjMiwgKCdiMiAtPiAneCkgLT4gJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfciAgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICgnYjEgLT4gJ3gpIC0+ICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgKCdiMiAtPiAneCkgLT4gJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG5cbiAgfCBFbmRfb2ZfZm10dHkgOlxuICAgICAgKCdmMSwgJ2IxLCAnYzEsICdkMSwgJ2QxLCAnZjEsXG4gICAgICAgJ2YyLCAnYjIsICdjMiwgJ2QyLCAnZDIsICdmMikgZm10dHlfcmVsXG5cbigqKiopXG5cbigqIExpc3Qgb2YgZm9ybWF0IGVsZW1lbnRzLiAqKVxuYW5kICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgPVxuICB8IENoYXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVjICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgIChjaGFyIC0+ICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IENhbWxfY2hhciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVDICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgIChjaGFyIC0+ICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IFN0cmluZyA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVzICopXG4gICAgICAoJ3gsIHN0cmluZyAtPiAnYSkgcGFkZGluZyAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCd4LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IENhbWxfc3RyaW5nIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVTICopXG4gICAgICAoJ3gsIHN0cmluZyAtPiAnYSkgcGFkZGluZyAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCd4LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IEludCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVbZGl4WHVvXSAqKVxuICAgICAgaW50X2NvbnYgKiAoJ3gsICd5KSBwYWRkaW5nICogKCd5LCBpbnQgLT4gJ2EpIHByZWNpc2lvbiAqXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBJbnQzMiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlbFtkaXhYdW9dICopXG4gICAgICBpbnRfY29udiAqICgneCwgJ3kpIHBhZGRpbmcgKiAoJ3ksIGludDMyIC0+ICdhKSBwcmVjaXNpb24gKlxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgTmF0aXZlaW50IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJW5bZGl4WHVvXSAqKVxuICAgICAgaW50X2NvbnYgKiAoJ3gsICd5KSBwYWRkaW5nICogKCd5LCBuYXRpdmVpbnQgLT4gJ2EpIHByZWNpc2lvbiAqXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBJbnQ2NCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlTFtkaXhYdW9dICopXG4gICAgICBpbnRfY29udiAqICgneCwgJ3kpIHBhZGRpbmcgKiAoJ3ksIGludDY0IC0+ICdhKSBwcmVjaXNpb24gKlxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgRmxvYXQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJVtmZUVnR0ZoSF0gKilcbiAgICAgIGZsb2F0X2NvbnYgKiAoJ3gsICd5KSBwYWRkaW5nICogKCd5LCBmbG9hdCAtPiAnYSkgcHJlY2lzaW9uICpcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCd4LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IEJvb2wgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVbYkJdICopXG4gICAgICAoJ3gsIGJvb2wgLT4gJ2EpIHBhZGRpbmcgKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBGbHVzaCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlISAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG5cbiAgfCBTdHJpbmdfbGl0ZXJhbCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBhYmMgKilcbiAgICAgIHN0cmluZyAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IENoYXJfbGl0ZXJhbCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIHggKilcbiAgICAgIGNoYXIgKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcblxuICB8IEZvcm1hdF9hcmcgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICV7Li4uJX0gKilcbiAgICAgIHBhZF9vcHRpb24gKiAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm10dHkgKlxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYgLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgRm9ybWF0X3N1YnN0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJSguLi4lKSAqKVxuICAgICAgcGFkX29wdGlvbiAqXG4gICAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCxcbiAgICAgICAnZzIsICdiLCAnYywgJ2oyLCAnZCwgJ2EpIGZtdHR5X3JlbCAqXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAoKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYgLT4gJ2cyLCAnYiwgJ2MsICdqMiwgJ2UsICdmKSBmbXRcblxuICAoKiBQcmludGYgYW5kIEZvcm1hdCBzcGVjaWZpYyBjb25zdHJ1Y3Rvci4gKilcbiAgfCBBbHBoYSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlYSAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoKCdiIC0+ICd4IC0+ICdjKSAtPiAneCAtPiAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBUaGV0YSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAldCAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoKCdiIC0+ICdjKSAtPiAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcblxuICAoKiBGb3JtYXQgc3BlY2lmaWMgY29uc3RydWN0b3I6ICopXG4gIHwgRm9ybWF0dGluZ19saXQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQF8gKilcbiAgICAgIGZvcm1hdHRpbmdfbGl0ICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgRm9ybWF0dGluZ19nZW4gOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEBfICopXG4gICAgICAoJ2ExLCAnYiwgJ2MsICdkMSwgJ2UxLCAnZjEpIGZvcm1hdHRpbmdfZ2VuICpcbiAgICAgICgnZjEsICdiLCAnYywgJ2UxLCAnZTIsICdmMikgZm10IC0+ICgnYTEsICdiLCAnYywgJ2QxLCAnZTIsICdmMikgZm10XG5cbiAgKCogU2NhbmYgc3BlY2lmaWMgY29uc3RydWN0b3JzOiAqKVxuICB8IFJlYWRlciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVyICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgneCAtPiAnYSwgJ2IsICdjLCAoJ2IgLT4gJ3gpIC0+ICdkLCAnZSwgJ2YpIGZtdFxuICB8IFNjYW5fY2hhcl9zZXQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVbLi4uXSAqKVxuICAgICAgcGFkX29wdGlvbiAqIGNoYXJfc2V0ICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoc3RyaW5nIC0+ICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IFNjYW5fZ2V0X2NvdW50ZXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVbbmxOTF0gKilcbiAgICAgIGNvdW50ZXIgKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgIChpbnQgLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgU2Nhbl9uZXh0X2NoYXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJTBjICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAoY2hhciAtPiAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBJZ25vcmVkX3BhcmFtIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlXyAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAneSwgJ3gpIGlnbm9yZWQgKiAoJ3gsICdiLCAnYywgJ3ksICdlLCAnZikgZm10IC0+XG4gICAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcblxuICAoKiBDdXN0b20gcHJpbnRpbmcgZm9ybWF0IChQUiM2NDUyLCBHUFIjMTQwKVxuXG4gICAgIFdlIGluY2x1ZGUgYSB0eXBlIEN1c3RvbSBvZiBcImN1c3RvbSBjb252ZXJ0ZXJzXCIsIHdoZXJlIGFuXG4gICAgIGFyYml0cmFyeSBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBjb252ZXJ0IG9uZSBvciBtb3JlXG4gICAgIGFyZ3VtZW50cy4gVGhlcmUgaXMgbm8gc3ludGF4IGZvciBjdXN0b20gY29udmVydGVycywgaXQgaXMgb25seVxuICAgICBpbnRlbmRlZCBmb3IgY3VzdG9tIHByb2Nlc3NvcnMgdGhhdCB3aXNoIHRvIHJlbHkgb24gdGhlXG4gICAgIHN0ZGxpYi1kZWZpbmVkIGZvcm1hdCBHQURUcy5cblxuICAgICBGb3IgaW5zdGFuY2UgYSBwcmUtcHJvY2Vzc29yIGNvdWxkIGNob29zZSB0byBpbnRlcnByZXQgc3RyaW5nc1xuICAgICBwcmVmaXhlZCB3aXRoIFtcIiFcIl0gYXMgZm9ybWF0IHN0cmluZ3Mgd2hlcmUgWyV7eyAuLi4gfX1dIGlzXG4gICAgIGEgc3BlY2lhbCBmb3JtIHRvIHBhc3MgYSB0b19zdHJpbmcgZnVuY3Rpb24sIHNvIHRoYXQgb25lIGNvdWxkXG4gICAgIHdyaXRlOlxuXG4gICAgIHtbXG4gICAgICAgdHlwZSB0ID0geyB4IDogaW50OyB5IDogaW50IH1cblxuICAgICAgIGxldCBzdHJpbmdfb2ZfdCB0ID0gUHJpbnRmLnNwcmludGYgXCJ7IHggPSAlZDsgeSA9ICVkIH1cIiB0LnggdC55XG5cbiAgICAgICBQcmludGYucHJpbnRmICFcInQgPSAle3tzdHJpbmdfb2ZfdH19XCIgeyB4ID0gNDI7IHkgPSA0MiB9XG4gICAgIF19XG4gICopXG4gIHwgQ3VzdG9tIDpcbiAgICAgICgnYSwgJ3gsICd5KSBjdXN0b21fYXJpdHkgKiAodW5pdCAtPiAneCkgKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAoJ3ksICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG5cbiAgKCogZW5kIG9mIGEgZm9ybWF0IHNwZWNpZmljYXRpb24gKilcbiAgfCBFbmRfb2ZfZm9ybWF0IDpcbiAgICAgICAgKCdmLCAnYiwgJ2MsICdlLCAnZSwgJ2YpIGZtdFxuXG4oKioqKVxuXG4oKiBUeXBlIGZvciBpZ25vcmVkIHBhcmFtZXRlcnMgKHNlZSBcIiVfXCIpLiAqKVxuYW5kICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBpZ25vcmVkID1cbiAgfCBJZ25vcmVkX2NoYXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX2MgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9jYW1sX2NoYXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9DICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfc3RyaW5nIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfcyAqKVxuICAgICAgcGFkX29wdGlvbiAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfY2FtbF9zdHJpbmcgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfUyAqKVxuICAgICAgcGFkX29wdGlvbiAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfaW50IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfZCAqKVxuICAgICAgaW50X2NvbnYgKiBwYWRfb3B0aW9uIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9pbnQzMiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9sZCAqKVxuICAgICAgaW50X2NvbnYgKiBwYWRfb3B0aW9uIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9uYXRpdmVpbnQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9uZCAqKVxuICAgICAgaW50X2NvbnYgKiBwYWRfb3B0aW9uIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9pbnQ2NCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9MZCAqKVxuICAgICAgaW50X2NvbnYgKiBwYWRfb3B0aW9uIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9mbG9hdCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9mICopXG4gICAgICBwYWRfb3B0aW9uICogcHJlY19vcHRpb24gLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX2Jvb2wgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX0IgKilcbiAgICAgIHBhZF9vcHRpb24gLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX2Zvcm1hdF9hcmcgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX3suLi4lfSAqKVxuICAgICAgcGFkX29wdGlvbiAqICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmbXR0eSAtPlxuICAgICAgICAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfZm9ybWF0X3N1YnN0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfKC4uLiUpICopXG4gICAgICBwYWRfb3B0aW9uICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdHR5IC0+XG4gICAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9yZWFkZXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9yICopXG4gICAgICAoJ2EsICdiLCAnYywgKCdiIC0+ICd4KSAtPiAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9zY2FuX2NoYXJfc2V0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9bLi4uXSAqKVxuICAgICAgcGFkX29wdGlvbiAqIGNoYXJfc2V0IC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9zY2FuX2dldF9jb3VudGVyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9bbmxOTF0gKilcbiAgICAgIGNvdW50ZXIgLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX3NjYW5fbmV4dF9jaGFyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlXzBjICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuXG5hbmQgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdDYgPVxuICBGb3JtYXQgb2YgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAqIHN0cmluZ1xuXG5sZXQgcmVjIGVyYXNlX3JlbCA6IHR5cGUgYSBiIGMgZCBlIGYgZyBoIGkgaiBrIGwgLlxuICAoYSwgYiwgYywgZCwgZSwgZixcbiAgIGcsIGgsIGksIGosIGssIGwpIGZtdHR5X3JlbCAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10dHlcbj0gZnVuY3Rpb25cbiAgfCBDaGFyX3R5IHJlc3QgLT5cbiAgICBDaGFyX3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBTdHJpbmdfdHkgcmVzdCAtPlxuICAgIFN0cmluZ190eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgSW50X3R5IHJlc3QgLT5cbiAgICBJbnRfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IEludDMyX3R5IHJlc3QgLT5cbiAgICBJbnQzMl90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgSW50NjRfdHkgcmVzdCAtPlxuICAgIEludDY0X3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBOYXRpdmVpbnRfdHkgcmVzdCAtPlxuICAgIE5hdGl2ZWludF90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgRmxvYXRfdHkgcmVzdCAtPlxuICAgIEZsb2F0X3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBCb29sX3R5IHJlc3QgLT5cbiAgICBCb29sX3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBGb3JtYXRfYXJnX3R5ICh0eSwgcmVzdCkgLT5cbiAgICBGb3JtYXRfYXJnX3R5ICh0eSwgZXJhc2VfcmVsIHJlc3QpXG4gIHwgRm9ybWF0X3N1YnN0X3R5ICh0eTEsIF90eTIsIHJlc3QpIC0+XG4gICAgRm9ybWF0X3N1YnN0X3R5ICh0eTEsIHR5MSwgZXJhc2VfcmVsIHJlc3QpXG4gIHwgQWxwaGFfdHkgcmVzdCAtPlxuICAgIEFscGhhX3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBUaGV0YV90eSByZXN0IC0+XG4gICAgVGhldGFfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IEFueV90eSByZXN0IC0+XG4gICAgQW55X3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBSZWFkZXJfdHkgcmVzdCAtPlxuICAgIFJlYWRlcl90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgcmVzdCAtPlxuICAgIElnbm9yZWRfcmVhZGVyX3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBFbmRfb2ZfZm10dHkgLT4gRW5kX29mX2ZtdHR5XG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgKCogRm9ybWF0IHR5cGUgY29uY2F0ZW5hdGlvbiAqKVxuXG4oKiBDb25jYXRlbmF0ZSB0d28gZm9ybWF0IHR5cGVzLiAqKVxuKCogVXNlZCBieTpcbiAgICogcmVhZGVyX25iX3VuaWZpZXJfb2ZfZm10dHkgdG8gY291bnQgcmVhZGVycyBpbiBhbiBmbXR0eSxcbiAgICogU2NhbmYudGFrZV9mbXR0eV9mb3JtYXRfcmVhZGVycyB0byBleHRyYWN0IHJlYWRlcnMgaW5zaWRlICUoLi4uJSksXG4gICAqIENhbWxpbnRlcm5hbEZvcm1hdC5mbXR0eV9vZl9pZ25vcmVkX2Zvcm1hdCB0byBleHRyYWN0IGZvcm1hdCB0eXBlLiAqKVxuXG4oKlxubGV0IHJlYyBjb25jYXRfZm10dHkgOiB0eXBlIGEgYiBjIGQgZSBmIGcgaCAuXG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5IC0+XG4gICAgKGYsIGIsIGMsIGUsIGcsIGgpIGZtdHR5IC0+XG4gICAgKGEsIGIsIGMsIGQsIGcsIGgpIGZtdHR5ID1cbiopXG5sZXQgcmVjIGNvbmNhdF9mbXR0eSA6XG4gIHR5cGUgYTEgYjEgYzEgZDEgZTEgZjFcbiAgICAgICBhMiBiMiBjMiBkMiBlMiBmMlxuICAgICAgIGcxIGoxIGcyIGoyXG4gIC5cbiAgICAoZzEsIGIxLCBjMSwgajEsIGQxLCBhMSxcbiAgICAgZzIsIGIyLCBjMiwgajIsIGQyLCBhMikgZm10dHlfcmVsIC0+XG4gICAgKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEsXG4gICAgIGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdHR5X3JlbCAtPlxuICAgIChnMSwgYjEsIGMxLCBqMSwgZTEsIGYxLFxuICAgICBnMiwgYjIsIGMyLCBqMiwgZTIsIGYyKSBmbXR0eV9yZWwgPVxuZnVuIGZtdHR5MSBmbXR0eTIgLT4gbWF0Y2ggZm10dHkxIHdpdGhcbiAgfCBDaGFyX3R5IHJlc3QgLT5cbiAgICBDaGFyX3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgU3RyaW5nX3R5IHJlc3QgLT5cbiAgICBTdHJpbmdfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBJbnRfdHkgcmVzdCAtPlxuICAgIEludF90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEludDMyX3R5IHJlc3QgLT5cbiAgICBJbnQzMl90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IE5hdGl2ZWludF90eSByZXN0IC0+XG4gICAgTmF0aXZlaW50X3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgSW50NjRfdHkgcmVzdCAtPlxuICAgIEludDY0X3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgRmxvYXRfdHkgcmVzdCAtPlxuICAgIEZsb2F0X3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgQm9vbF90eSByZXN0IC0+XG4gICAgQm9vbF90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEFscGhhX3R5IHJlc3QgLT5cbiAgICBBbHBoYV90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IFRoZXRhX3R5IHJlc3QgLT5cbiAgICBUaGV0YV90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEFueV90eSByZXN0IC0+XG4gICAgQW55X3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgUmVhZGVyX3R5IHJlc3QgLT5cbiAgICBSZWFkZXJfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBJZ25vcmVkX3JlYWRlcl90eSByZXN0IC0+XG4gICAgSWdub3JlZF9yZWFkZXJfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBGb3JtYXRfYXJnX3R5ICh0eSwgcmVzdCkgLT5cbiAgICBGb3JtYXRfYXJnX3R5ICh0eSwgY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEZvcm1hdF9zdWJzdF90eSAodHkxLCB0eTIsIHJlc3QpIC0+XG4gICAgRm9ybWF0X3N1YnN0X3R5ICh0eTEsIHR5MiwgY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEVuZF9vZl9mbXR0eSAtPiBmbXR0eTJcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEZvcm1hdCBjb25jYXRlbmF0aW9uICopXG5cbigqIENvbmNhdGVuYXRlIHR3byBmb3JtYXRzLiAqKVxubGV0IHJlYyBjb25jYXRfZm10IDogdHlwZSBhIGIgYyBkIGUgZiBnIGggLlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT5cbiAgICAoZiwgYiwgYywgZSwgZywgaCkgZm10IC0+XG4gICAgKGEsIGIsIGMsIGQsIGcsIGgpIGZtdCA9XG5mdW4gZm10MSBmbXQyIC0+IG1hdGNoIGZtdDEgd2l0aFxuICB8IFN0cmluZyAocGFkLCByZXN0KSAtPlxuICAgIFN0cmluZyAocGFkLCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBDYW1sX3N0cmluZyAocGFkLCByZXN0KSAtPlxuICAgIENhbWxfc3RyaW5nIChwYWQsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuXG4gIHwgSW50IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIEludCAoaWNvbnYsIHBhZCwgcHJlYywgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgSW50MzIgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgSW50MzIgKGljb252LCBwYWQsIHByZWMsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IE5hdGl2ZWludCAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBOYXRpdmVpbnQgKGljb252LCBwYWQsIHByZWMsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEludDY0IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIEludDY0IChpY29udiwgcGFkLCBwcmVjLCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBGbG9hdCAoZmNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBGbG9hdCAoZmNvbnYsIHBhZCwgcHJlYywgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG5cbiAgfCBDaGFyIChyZXN0KSAtPlxuICAgIENoYXIgKGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IENhbWxfY2hhciByZXN0IC0+XG4gICAgQ2FtbF9jaGFyIChjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBCb29sIChwYWQsIHJlc3QpIC0+XG4gICAgQm9vbCAocGFkLCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBBbHBoYSByZXN0IC0+XG4gICAgQWxwaGEgKGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IFRoZXRhIHJlc3QgLT5cbiAgICBUaGV0YSAoY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgQ3VzdG9tIChhcml0eSwgZiwgcmVzdCkgLT5cbiAgICBDdXN0b20gKGFyaXR5LCBmLCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBSZWFkZXIgcmVzdCAtPlxuICAgIFJlYWRlciAoY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgRmx1c2ggcmVzdCAtPlxuICAgIEZsdXNoIChjb25jYXRfZm10IHJlc3QgZm10MilcblxuICB8IFN0cmluZ19saXRlcmFsIChzdHIsIHJlc3QpIC0+XG4gICAgU3RyaW5nX2xpdGVyYWwgKHN0ciwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgQ2hhcl9saXRlcmFsIChjaHIsIHJlc3QpIC0+XG4gICAgQ2hhcl9saXRlcmFsICAgKGNociwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG5cbiAgfCBGb3JtYXRfYXJnIChwYWQsIGZtdHR5LCByZXN0KSAtPlxuICAgIEZvcm1hdF9hcmcgICAocGFkLCBmbXR0eSwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgRm9ybWF0X3N1YnN0IChwYWQsIGZtdHR5LCByZXN0KSAtPlxuICAgIEZvcm1hdF9zdWJzdCAocGFkLCBmbXR0eSwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG5cbiAgfCBTY2FuX2NoYXJfc2V0ICh3aWR0aF9vcHQsIGNoYXJfc2V0LCByZXN0KSAtPlxuICAgIFNjYW5fY2hhcl9zZXQgKHdpZHRoX29wdCwgY2hhcl9zZXQsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IFNjYW5fZ2V0X2NvdW50ZXIgKGNvdW50ZXIsIHJlc3QpIC0+XG4gICAgU2Nhbl9nZXRfY291bnRlciAoY291bnRlciwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgU2Nhbl9uZXh0X2NoYXIgKHJlc3QpIC0+XG4gICAgU2Nhbl9uZXh0X2NoYXIgKGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IElnbm9yZWRfcGFyYW0gKGlnbiwgcmVzdCkgLT5cbiAgICBJZ25vcmVkX3BhcmFtIChpZ24sIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuXG4gIHwgRm9ybWF0dGluZ19saXQgKGZtdGluZ19saXQsIHJlc3QpIC0+XG4gICAgRm9ybWF0dGluZ19saXQgKGZtdGluZ19saXQsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEZvcm1hdHRpbmdfZ2VuIChmbXRpbmdfZ2VuLCByZXN0KSAtPlxuICAgIEZvcm1hdHRpbmdfZ2VuIChmbXRpbmdfZ2VuLCBjb25jYXRfZm10IHJlc3QgZm10MilcblxuICB8IEVuZF9vZl9mb3JtYXQgLT5cbiAgICBmbXQyXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBHYWJyaWVsIFNjaGVyZXIsIHByb2pldCBQYXJ0b3V0LCBJTlJJQSBQYXJpcy1TYWNsYXkgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDIwIEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIENhbWxpbnRlcm5hbEF0b21pYyBpcyBhIGRlcGVuZGVuY3kgb2YgU3RkbGliLCBzbyBpdCBpcyBjb21waWxlZCB3aXRoXG4gICAtbm9wZXJ2YXNpdmVzLiAqKVxuZXh0ZXJuYWwgKCA9PSApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJWVxXCJcbmV4dGVybmFsICggKyApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVhZGRpbnRcIlxuZXh0ZXJuYWwgaWdub3JlIDogJ2EgLT4gdW5pdCA9IFwiJWlnbm9yZVwiXG5cbigqIFdlIGFyZSBub3QgcmV1c2luZyAoJ2EgcmVmKSBkaXJlY3RseSB0byBtYWtlIGl0IGVhc2llciB0byByZWFzb25cbiAgIGFib3V0IGF0b21pY2l0eSBpZiB3ZSB3aXNoIHRvOiBldmVuIGluIGEgc2VxdWVudGlhbCBpbXBsZW1lbnRhdGlvbixcbiAgIHNpZ25hbHMgYW5kIG90aGVyIGFzeW5jaHJvbm91cyBjYWxsYmFja3MgbWlnaHQgYnJlYWsgYXRvbWljaXR5LiAqKVxudHlwZSAnYSB0ID0ge211dGFibGUgdjogJ2F9XG5cbmxldCBtYWtlIHYgPSB7dn1cbmxldCBnZXQgciA9IHIudlxubGV0IHNldCByIHYgPSByLnYgPC0gdlxuXG4oKiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgc2V0IHRvIG5ldmVyIGJlIGlubGluZWQ6IEZsYW1iZGEgaXNcbiAgIGFsbG93ZWQgdG8gbW92ZSBzdXJyb3VuZGluZyBjb2RlIGluc2lkZSB0aGUgY3JpdGljYWwgc2VjdGlvbixcbiAgIGluY2x1ZGluZyBhbGxvY2F0aW9ucy4gKilcblxubGV0W0BpbmxpbmUgbmV2ZXJdIGV4Y2hhbmdlIHIgdiA9XG4gICgqIEJFR0lOIEFUT01JQyAqKVxuICBsZXQgY3VyID0gci52IGluXG4gIHIudiA8LSB2O1xuICAoKiBFTkQgQVRPTUlDICopXG4gIGN1clxuXG5sZXRbQGlubGluZSBuZXZlcl0gY29tcGFyZV9hbmRfc2V0IHIgc2VlbiB2ID1cbiAgKCogQkVHSU4gQVRPTUlDICopXG4gIGxldCBjdXIgPSByLnYgaW5cbiAgaWYgY3VyID09IHNlZW4gdGhlbiAoXG4gICAgci52IDwtIHY7XG4gICAgKCogRU5EIEFUT01JQyAqKVxuICAgIHRydWVcbiAgKSBlbHNlXG4gICAgZmFsc2VcblxubGV0W0BpbmxpbmUgbmV2ZXJdIGZldGNoX2FuZF9hZGQgciBuID1cbiAgKCogQkVHSU4gQVRPTUlDICopXG4gIGxldCBjdXIgPSByLnYgaW5cbiAgci52IDwtIChjdXIgKyBuKTtcbiAgKCogRU5EIEFUT01JQyAqKVxuICBjdXJcblxubGV0IGluY3IgciA9IGlnbm9yZSAoZmV0Y2hfYW5kX2FkZCByIDEpXG5sZXQgZGVjciByID0gaWdub3JlIChmZXRjaF9hbmRfYWRkIHIgKC0xKSlcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogRXhjZXB0aW9ucyAqKVxuXG5leHRlcm5hbCByZWdpc3Rlcl9uYW1lZF92YWx1ZSA6IHN0cmluZyAtPiAnYSAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9yZWdpc3Rlcl9uYW1lZF92YWx1ZVwiXG5cbmxldCAoKSA9XG4gICgqIGZvciBydW50aW1lL2ZhaWxfbmF0LmMgKilcbiAgcmVnaXN0ZXJfbmFtZWRfdmFsdWUgXCJQZXJ2YXNpdmVzLmFycmF5X2JvdW5kX2Vycm9yXCJcbiAgICAoSW52YWxpZF9hcmd1bWVudCBcImluZGV4IG91dCBvZiBib3VuZHNcIilcblxuZXh0ZXJuYWwgcmFpc2UgOiBleG4gLT4gJ2EgPSBcIiVyYWlzZVwiXG5leHRlcm5hbCByYWlzZV9ub3RyYWNlIDogZXhuIC0+ICdhID0gXCIlcmFpc2Vfbm90cmFjZVwiXG5cbmxldCBmYWlsd2l0aCBzID0gcmFpc2UoRmFpbHVyZSBzKVxubGV0IGludmFsaWRfYXJnIHMgPSByYWlzZShJbnZhbGlkX2FyZ3VtZW50IHMpXG5cbmV4Y2VwdGlvbiBFeGl0XG5leGNlcHRpb24gTWF0Y2hfZmFpbHVyZSA9IE1hdGNoX2ZhaWx1cmVcbmV4Y2VwdGlvbiBBc3NlcnRfZmFpbHVyZSA9IEFzc2VydF9mYWlsdXJlXG5leGNlcHRpb24gSW52YWxpZF9hcmd1bWVudCA9IEludmFsaWRfYXJndW1lbnRcbmV4Y2VwdGlvbiBGYWlsdXJlID0gRmFpbHVyZVxuZXhjZXB0aW9uIE5vdF9mb3VuZCA9IE5vdF9mb3VuZFxuZXhjZXB0aW9uIE91dF9vZl9tZW1vcnkgPSBPdXRfb2ZfbWVtb3J5XG5leGNlcHRpb24gU3RhY2tfb3ZlcmZsb3cgPSBTdGFja19vdmVyZmxvd1xuZXhjZXB0aW9uIFN5c19lcnJvciA9IFN5c19lcnJvclxuZXhjZXB0aW9uIEVuZF9vZl9maWxlID0gRW5kX29mX2ZpbGVcbmV4Y2VwdGlvbiBEaXZpc2lvbl9ieV96ZXJvID0gRGl2aXNpb25fYnlfemVyb1xuZXhjZXB0aW9uIFN5c19ibG9ja2VkX2lvID0gU3lzX2Jsb2NrZWRfaW9cbmV4Y2VwdGlvbiBVbmRlZmluZWRfcmVjdXJzaXZlX21vZHVsZSA9IFVuZGVmaW5lZF9yZWN1cnNpdmVfbW9kdWxlXG5cbigqIENvbXBvc2l0aW9uIG9wZXJhdG9ycyAqKVxuXG5leHRlcm5hbCAoIHw+ICkgOiAnYSAtPiAoJ2EgLT4gJ2IpIC0+ICdiID0gXCIlcmV2YXBwbHlcIlxuZXh0ZXJuYWwgKCBAQCApIDogKCdhIC0+ICdiKSAtPiAnYSAtPiAnYiA9IFwiJWFwcGx5XCJcblxuKCogRGVidWdnaW5nICopXG5cbmV4dGVybmFsIF9fTE9DX18gOiBzdHJpbmcgPSBcIiVsb2NfTE9DXCJcbmV4dGVybmFsIF9fRklMRV9fIDogc3RyaW5nID0gXCIlbG9jX0ZJTEVcIlxuZXh0ZXJuYWwgX19MSU5FX18gOiBpbnQgPSBcIiVsb2NfTElORVwiXG5leHRlcm5hbCBfX01PRFVMRV9fIDogc3RyaW5nID0gXCIlbG9jX01PRFVMRVwiXG5leHRlcm5hbCBfX1BPU19fIDogc3RyaW5nICogaW50ICogaW50ICogaW50ID0gXCIlbG9jX1BPU1wiXG5leHRlcm5hbCBfX0ZVTkNUSU9OX18gOiBzdHJpbmcgPSBcIiVsb2NfRlVOQ1RJT05cIlxuXG5leHRlcm5hbCBfX0xPQ19PRl9fIDogJ2EgLT4gc3RyaW5nICogJ2EgPSBcIiVsb2NfTE9DXCJcbmV4dGVybmFsIF9fTElORV9PRl9fIDogJ2EgLT4gaW50ICogJ2EgPSBcIiVsb2NfTElORVwiXG5leHRlcm5hbCBfX1BPU19PRl9fIDogJ2EgLT4gKHN0cmluZyAqIGludCAqIGludCAqIGludCkgKiAnYSA9IFwiJWxvY19QT1NcIlxuXG4oKiBDb21wYXJpc29ucyAqKVxuXG5leHRlcm5hbCAoID0gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVlcXVhbFwiXG5leHRlcm5hbCAoIDw+ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlbm90ZXF1YWxcIlxuZXh0ZXJuYWwgKCA8ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlbGVzc3RoYW5cIlxuZXh0ZXJuYWwgKCA+ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlZ3JlYXRlcnRoYW5cIlxuZXh0ZXJuYWwgKCA8PSApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJWxlc3NlcXVhbFwiXG5leHRlcm5hbCAoID49ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlZ3JlYXRlcmVxdWFsXCJcbmV4dGVybmFsIGNvbXBhcmUgOiAnYSAtPiAnYSAtPiBpbnQgPSBcIiVjb21wYXJlXCJcblxubGV0IG1pbiB4IHkgPSBpZiB4IDw9IHkgdGhlbiB4IGVsc2UgeVxubGV0IG1heCB4IHkgPSBpZiB4ID49IHkgdGhlbiB4IGVsc2UgeVxuXG5leHRlcm5hbCAoID09ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlZXFcIlxuZXh0ZXJuYWwgKCAhPSApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJW5vdGVxXCJcblxuKCogQm9vbGVhbiBvcGVyYXRpb25zICopXG5cbmV4dGVybmFsIG5vdCA6IGJvb2wgLT4gYm9vbCA9IFwiJWJvb2xub3RcIlxuZXh0ZXJuYWwgKCAmICkgOiBib29sIC0+IGJvb2wgLT4gYm9vbCA9IFwiJXNlcXVhbmRcIlxuZXh0ZXJuYWwgKCAmJiApIDogYm9vbCAtPiBib29sIC0+IGJvb2wgPSBcIiVzZXF1YW5kXCJcbmV4dGVybmFsICggb3IgKSA6IGJvb2wgLT4gYm9vbCAtPiBib29sID0gXCIlc2VxdW9yXCJcbmV4dGVybmFsICggfHwgKSA6IGJvb2wgLT4gYm9vbCAtPiBib29sID0gXCIlc2VxdW9yXCJcblxuKCogSW50ZWdlciBvcGVyYXRpb25zICopXG5cbmV4dGVybmFsICggfi0gKSA6IGludCAtPiBpbnQgPSBcIiVuZWdpbnRcIlxuZXh0ZXJuYWwgKCB+KyApIDogaW50IC0+IGludCA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIHN1Y2MgOiBpbnQgLT4gaW50ID0gXCIlc3VjY2ludFwiXG5leHRlcm5hbCBwcmVkIDogaW50IC0+IGludCA9IFwiJXByZWRpbnRcIlxuZXh0ZXJuYWwgKCArICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWFkZGludFwiXG5leHRlcm5hbCAoIC0gKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlc3ViaW50XCJcbmV4dGVybmFsICggKiApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVtdWxpbnRcIlxuZXh0ZXJuYWwgKCAvICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWRpdmludFwiXG5leHRlcm5hbCAoIG1vZCApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVtb2RpbnRcIlxuXG5sZXQgYWJzIHggPSBpZiB4ID49IDAgdGhlbiB4IGVsc2UgLXhcblxuZXh0ZXJuYWwgKCBsYW5kICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWFuZGludFwiXG5leHRlcm5hbCAoIGxvciApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVvcmludFwiXG5leHRlcm5hbCAoIGx4b3IgKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIleG9yaW50XCJcblxubGV0IGxub3QgeCA9IHggbHhvciAoLTEpXG5cbmV4dGVybmFsICggbHNsICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWxzbGludFwiXG5leHRlcm5hbCAoIGxzciApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVsc3JpbnRcIlxuZXh0ZXJuYWwgKCBhc3IgKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlYXNyaW50XCJcblxubGV0IG1heF9pbnQgPSAoLTEpIGxzciAxXG5sZXQgbWluX2ludCA9IG1heF9pbnQgKyAxXG5cbigqIEZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbnMgKilcblxuZXh0ZXJuYWwgKCB+LS4gKSA6IGZsb2F0IC0+IGZsb2F0ID0gXCIlbmVnZmxvYXRcIlxuZXh0ZXJuYWwgKCB+Ky4gKSA6IGZsb2F0IC0+IGZsb2F0ID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgKCArLiApIDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcIiVhZGRmbG9hdFwiXG5leHRlcm5hbCAoIC0uICkgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiJXN1YmZsb2F0XCJcbmV4dGVybmFsICggKi4gKSA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCIlbXVsZmxvYXRcIlxuZXh0ZXJuYWwgKCAvLiApIDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcIiVkaXZmbG9hdFwiXG5leHRlcm5hbCAoICoqICkgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9wb3dlcl9mbG9hdFwiIFwicG93XCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGV4cCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2V4cF9mbG9hdFwiIFwiZXhwXCIgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGV4cG0xIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfZXhwbTFfZmxvYXRcIiBcImNhbWxfZXhwbTFcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYWNvcyA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2Fjb3NfZmxvYXRcIiBcImFjb3NcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYXNpbiA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2FzaW5fZmxvYXRcIiBcImFzaW5cIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYXRhbiA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2F0YW5fZmxvYXRcIiBcImF0YW5cIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYXRhbjIgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9hdGFuMl9mbG9hdFwiIFwiYXRhbjJcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgaHlwb3QgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdFxuICAgICAgICAgICAgICAgPSBcImNhbWxfaHlwb3RfZmxvYXRcIiBcImNhbWxfaHlwb3RcIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgY29zIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfY29zX2Zsb2F0XCIgXCJjb3NcIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgY29zaCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2Nvc2hfZmxvYXRcIiBcImNvc2hcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYWNvc2ggOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9hY29zaF9mbG9hdFwiIFwiY2FtbF9hY29zaFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBsb2cgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9sb2dfZmxvYXRcIiBcImxvZ1wiIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBsb2cxMCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2xvZzEwX2Zsb2F0XCIgXCJsb2cxMFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBsb2cxcCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2xvZzFwX2Zsb2F0XCIgXCJjYW1sX2xvZzFwXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIHNpbiA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX3Npbl9mbG9hdFwiIFwic2luXCIgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIHNpbmggOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9zaW5oX2Zsb2F0XCIgXCJzaW5oXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGFzaW5oIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfYXNpbmhfZmxvYXRcIiBcImNhbWxfYXNpbmhcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgc3FydCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX3NxcnRfZmxvYXRcIiBcInNxcnRcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgdGFuIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfdGFuX2Zsb2F0XCIgXCJ0YW5cIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgdGFuaCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX3RhbmhfZmxvYXRcIiBcInRhbmhcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYXRhbmggOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9hdGFuaF9mbG9hdFwiIFwiY2FtbF9hdGFuaFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBjZWlsIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfY2VpbF9mbG9hdFwiIFwiY2VpbFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBmbG9vciA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2Zsb29yX2Zsb2F0XCIgXCJmbG9vclwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhYnNfZmxvYXQgOiBmbG9hdCAtPiBmbG9hdCA9IFwiJWFic2Zsb2F0XCJcbmV4dGVybmFsIGNvcHlzaWduIDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXRcbiAgICAgICAgICAgICAgICAgID0gXCJjYW1sX2NvcHlzaWduX2Zsb2F0XCIgXCJjYW1sX2NvcHlzaWduXCJcbiAgICAgICAgICAgICAgICAgIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBtb2RfZmxvYXQgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9mbW9kX2Zsb2F0XCIgXCJmbW9kXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGZyZXhwIDogZmxvYXQgLT4gZmxvYXQgKiBpbnQgPSBcImNhbWxfZnJleHBfZmxvYXRcIlxuZXh0ZXJuYWwgbGRleHAgOiAoZmxvYXQgW0B1bmJveGVkXSkgLT4gKGludCBbQHVudGFnZ2VkXSkgLT4gKGZsb2F0IFtAdW5ib3hlZF0pID1cbiAgXCJjYW1sX2xkZXhwX2Zsb2F0XCIgXCJjYW1sX2xkZXhwX2Zsb2F0X3VuYm94ZWRcIiBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgbW9kZiA6IGZsb2F0IC0+IGZsb2F0ICogZmxvYXQgPSBcImNhbWxfbW9kZl9mbG9hdFwiXG5leHRlcm5hbCBmbG9hdCA6IGludCAtPiBmbG9hdCA9IFwiJWZsb2F0b2ZpbnRcIlxuZXh0ZXJuYWwgZmxvYXRfb2ZfaW50IDogaW50IC0+IGZsb2F0ID0gXCIlZmxvYXRvZmludFwiXG5leHRlcm5hbCB0cnVuY2F0ZSA6IGZsb2F0IC0+IGludCA9IFwiJWludG9mZmxvYXRcIlxuZXh0ZXJuYWwgaW50X29mX2Zsb2F0IDogZmxvYXQgLT4gaW50ID0gXCIlaW50b2ZmbG9hdFwiXG5leHRlcm5hbCBmbG9hdF9vZl9iaXRzIDogaW50NjQgLT4gZmxvYXRcbiAgPSBcImNhbWxfaW50NjRfZmxvYXRfb2ZfYml0c1wiIFwiY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzX3VuYm94ZWRcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxubGV0IGluZmluaXR5ID1cbiAgZmxvYXRfb2ZfYml0cyAweDdGX0YwXzAwXzAwXzAwXzAwXzAwXzAwTFxubGV0IG5lZ19pbmZpbml0eSA9XG4gIGZsb2F0X29mX2JpdHMgMHhGRl9GMF8wMF8wMF8wMF8wMF8wMF8wMExcbmxldCBuYW4gPVxuICBmbG9hdF9vZl9iaXRzIDB4N0ZfRjBfMDBfMDBfMDBfMDBfMDBfMDFMXG5sZXQgbWF4X2Zsb2F0ID1cbiAgZmxvYXRfb2ZfYml0cyAweDdGX0VGX0ZGX0ZGX0ZGX0ZGX0ZGX0ZGTFxubGV0IG1pbl9mbG9hdCA9XG4gIGZsb2F0X29mX2JpdHMgMHgwMF8xMF8wMF8wMF8wMF8wMF8wMF8wMExcbmxldCBlcHNpbG9uX2Zsb2F0ID1cbiAgZmxvYXRfb2ZfYml0cyAweDNDX0IwXzAwXzAwXzAwXzAwXzAwXzAwTFxuXG50eXBlIGZwY2xhc3MgPVxuICAgIEZQX25vcm1hbFxuICB8IEZQX3N1Ym5vcm1hbFxuICB8IEZQX3plcm9cbiAgfCBGUF9pbmZpbml0ZVxuICB8IEZQX25hblxuZXh0ZXJuYWwgY2xhc3NpZnlfZmxvYXQgOiAoZmxvYXQgW0B1bmJveGVkXSkgLT4gZnBjbGFzcyA9XG4gIFwiY2FtbF9jbGFzc2lmeV9mbG9hdFwiIFwiY2FtbF9jbGFzc2lmeV9mbG9hdF91bmJveGVkXCIgW0BAbm9hbGxvY11cblxuKCogU3RyaW5nIGFuZCBieXRlIHNlcXVlbmNlIG9wZXJhdGlvbnMgLS0gbW9yZSBpbiBtb2R1bGVzIFN0cmluZyBhbmQgQnl0ZXMgKilcblxuZXh0ZXJuYWwgc3RyaW5nX2xlbmd0aCA6IHN0cmluZyAtPiBpbnQgPSBcIiVzdHJpbmdfbGVuZ3RoXCJcbmV4dGVybmFsIGJ5dGVzX2xlbmd0aCA6IGJ5dGVzIC0+IGludCA9IFwiJWJ5dGVzX2xlbmd0aFwiXG5leHRlcm5hbCBieXRlc19jcmVhdGUgOiBpbnQgLT4gYnl0ZXMgPSBcImNhbWxfY3JlYXRlX2J5dGVzXCJcbmV4dGVybmFsIHN0cmluZ19ibGl0IDogc3RyaW5nIC0+IGludCAtPiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX2JsaXRfc3RyaW5nXCIgW0BAbm9hbGxvY11cbmV4dGVybmFsIGJ5dGVzX2JsaXQgOiBieXRlcyAtPiBpbnQgLT4gYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9ibGl0X2J5dGVzXCIgW0BAbm9hbGxvY11cbmV4dGVybmFsIGJ5dGVzX3Vuc2FmZV90b19zdHJpbmcgOiBieXRlcyAtPiBzdHJpbmcgPSBcIiVieXRlc190b19zdHJpbmdcIlxuXG5sZXQgKCBeICkgczEgczIgPVxuICBsZXQgbDEgPSBzdHJpbmdfbGVuZ3RoIHMxIGFuZCBsMiA9IHN0cmluZ19sZW5ndGggczIgaW5cbiAgbGV0IHMgPSBieXRlc19jcmVhdGUgKGwxICsgbDIpIGluXG4gIHN0cmluZ19ibGl0IHMxIDAgcyAwIGwxO1xuICBzdHJpbmdfYmxpdCBzMiAwIHMgbDEgbDI7XG4gIGJ5dGVzX3Vuc2FmZV90b19zdHJpbmcgc1xuXG4oKiBDaGFyYWN0ZXIgb3BlcmF0aW9ucyAtLSBtb3JlIGluIG1vZHVsZSBDaGFyICopXG5cbmV4dGVybmFsIGludF9vZl9jaGFyIDogY2hhciAtPiBpbnQgPSBcIiVpZGVudGl0eVwiXG5leHRlcm5hbCB1bnNhZmVfY2hhcl9vZl9pbnQgOiBpbnQgLT4gY2hhciA9IFwiJWlkZW50aXR5XCJcbmxldCBjaGFyX29mX2ludCBuID1cbiAgaWYgbiA8IDAgfHwgbiA+IDI1NSB0aGVuIGludmFsaWRfYXJnIFwiY2hhcl9vZl9pbnRcIiBlbHNlIHVuc2FmZV9jaGFyX29mX2ludCBuXG5cbigqIFVuaXQgb3BlcmF0aW9ucyAqKVxuXG5leHRlcm5hbCBpZ25vcmUgOiAnYSAtPiB1bml0ID0gXCIlaWdub3JlXCJcblxuKCogUGFpciBvcGVyYXRpb25zICopXG5cbmV4dGVybmFsIGZzdCA6ICdhICogJ2IgLT4gJ2EgPSBcIiVmaWVsZDBcIlxuZXh0ZXJuYWwgc25kIDogJ2EgKiAnYiAtPiAnYiA9IFwiJWZpZWxkMVwiXG5cbigqIFJlZmVyZW5jZXMgKilcblxudHlwZSAnYSByZWYgPSB7IG11dGFibGUgY29udGVudHMgOiAnYSB9XG5leHRlcm5hbCByZWYgOiAnYSAtPiAnYSByZWYgPSBcIiVtYWtlbXV0YWJsZVwiXG5leHRlcm5hbCAoICEgKSA6ICdhIHJlZiAtPiAnYSA9IFwiJWZpZWxkMFwiXG5leHRlcm5hbCAoIDo9ICkgOiAnYSByZWYgLT4gJ2EgLT4gdW5pdCA9IFwiJXNldGZpZWxkMFwiXG5leHRlcm5hbCBpbmNyIDogaW50IHJlZiAtPiB1bml0ID0gXCIlaW5jclwiXG5leHRlcm5hbCBkZWNyIDogaW50IHJlZiAtPiB1bml0ID0gXCIlZGVjclwiXG5cbigqIFJlc3VsdCB0eXBlICopXG5cbnR5cGUgKCdhLCdiKSByZXN1bHQgPSBPayBvZiAnYSB8IEVycm9yIG9mICdiXG5cbigqIFN0cmluZyBjb252ZXJzaW9uIGZ1bmN0aW9ucyAqKVxuXG5leHRlcm5hbCBmb3JtYXRfaW50IDogc3RyaW5nIC0+IGludCAtPiBzdHJpbmcgPSBcImNhbWxfZm9ybWF0X2ludFwiXG5leHRlcm5hbCBmb3JtYXRfZmxvYXQgOiBzdHJpbmcgLT4gZmxvYXQgLT4gc3RyaW5nID0gXCJjYW1sX2Zvcm1hdF9mbG9hdFwiXG5cbmxldCBzdHJpbmdfb2ZfYm9vbCBiID1cbiAgaWYgYiB0aGVuIFwidHJ1ZVwiIGVsc2UgXCJmYWxzZVwiXG5sZXQgYm9vbF9vZl9zdHJpbmcgPSBmdW5jdGlvblxuICB8IFwidHJ1ZVwiIC0+IHRydWVcbiAgfCBcImZhbHNlXCIgLT4gZmFsc2VcbiAgfCBfIC0+IGludmFsaWRfYXJnIFwiYm9vbF9vZl9zdHJpbmdcIlxuXG5sZXQgYm9vbF9vZl9zdHJpbmdfb3B0ID0gZnVuY3Rpb25cbiAgfCBcInRydWVcIiAtPiBTb21lIHRydWVcbiAgfCBcImZhbHNlXCIgLT4gU29tZSBmYWxzZVxuICB8IF8gLT4gTm9uZVxuXG5sZXQgc3RyaW5nX29mX2ludCBuID1cbiAgZm9ybWF0X2ludCBcIiVkXCIgblxuXG5leHRlcm5hbCBpbnRfb2Zfc3RyaW5nIDogc3RyaW5nIC0+IGludCA9IFwiY2FtbF9pbnRfb2Zfc3RyaW5nXCJcblxubGV0IGludF9vZl9zdHJpbmdfb3B0IHMgPVxuICAoKiBUT0RPOiBwcm92aWRlIHRoaXMgZGlyZWN0bHkgYXMgYSBub24tcmFpc2luZyBwcmltaXRpdmUuICopXG4gIHRyeSBTb21lIChpbnRfb2Zfc3RyaW5nIHMpXG4gIHdpdGggRmFpbHVyZSBfIC0+IE5vbmVcblxuZXh0ZXJuYWwgc3RyaW5nX2dldCA6IHN0cmluZyAtPiBpbnQgLT4gY2hhciA9IFwiJXN0cmluZ19zYWZlX2dldFwiXG5cbmxldCB2YWxpZF9mbG9hdF9sZXhlbSBzID1cbiAgbGV0IGwgPSBzdHJpbmdfbGVuZ3RoIHMgaW5cbiAgbGV0IHJlYyBsb29wIGkgPVxuICAgIGlmIGkgPj0gbCB0aGVuIHMgXiBcIi5cIiBlbHNlXG4gICAgbWF0Y2ggc3RyaW5nX2dldCBzIGkgd2l0aFxuICAgIHwgJzAnIC4uICc5JyB8ICctJyAtPiBsb29wIChpICsgMSlcbiAgICB8IF8gLT4gc1xuICBpblxuICBsb29wIDBcblxubGV0IHN0cmluZ19vZl9mbG9hdCBmID0gdmFsaWRfZmxvYXRfbGV4ZW0gKGZvcm1hdF9mbG9hdCBcIiUuMTJnXCIgZilcblxuZXh0ZXJuYWwgZmxvYXRfb2Zfc3RyaW5nIDogc3RyaW5nIC0+IGZsb2F0ID0gXCJjYW1sX2Zsb2F0X29mX3N0cmluZ1wiXG5cbmxldCBmbG9hdF9vZl9zdHJpbmdfb3B0IHMgPVxuICAoKiBUT0RPOiBwcm92aWRlIHRoaXMgZGlyZWN0bHkgYXMgYSBub24tcmFpc2luZyBwcmltaXRpdmUuICopXG4gIHRyeSBTb21lIChmbG9hdF9vZl9zdHJpbmcgcylcbiAgd2l0aCBGYWlsdXJlIF8gLT4gTm9uZVxuXG4oKiBMaXN0IG9wZXJhdGlvbnMgLS0gbW9yZSBpbiBtb2R1bGUgTGlzdCAqKVxuXG5sZXQgcmVjICggQCApIGwxIGwyID1cbiAgbWF0Y2ggbDEgd2l0aFxuICAgIFtdIC0+IGwyXG4gIHwgaGQgOjogdGwgLT4gaGQgOjogKHRsIEAgbDIpXG5cbigqIEkvTyBvcGVyYXRpb25zICopXG5cbnR5cGUgaW5fY2hhbm5lbFxudHlwZSBvdXRfY2hhbm5lbFxuXG5leHRlcm5hbCBvcGVuX2Rlc2NyaXB0b3Jfb3V0IDogaW50IC0+IG91dF9jaGFubmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9vdXRcIlxuZXh0ZXJuYWwgb3Blbl9kZXNjcmlwdG9yX2luIDogaW50IC0+IGluX2NoYW5uZWwgPSBcImNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX2luXCJcblxubGV0IHN0ZGluID0gb3Blbl9kZXNjcmlwdG9yX2luIDBcbmxldCBzdGRvdXQgPSBvcGVuX2Rlc2NyaXB0b3Jfb3V0IDFcbmxldCBzdGRlcnIgPSBvcGVuX2Rlc2NyaXB0b3Jfb3V0IDJcblxuKCogR2VuZXJhbCBvdXRwdXQgZnVuY3Rpb25zICopXG5cbnR5cGUgb3Blbl9mbGFnID1cbiAgICBPcGVuX3Jkb25seSB8IE9wZW5fd3Jvbmx5IHwgT3Blbl9hcHBlbmRcbiAgfCBPcGVuX2NyZWF0IHwgT3Blbl90cnVuYyB8IE9wZW5fZXhjbFxuICB8IE9wZW5fYmluYXJ5IHwgT3Blbl90ZXh0IHwgT3Blbl9ub25ibG9ja1xuXG5leHRlcm5hbCBvcGVuX2Rlc2MgOiBzdHJpbmcgLT4gb3Blbl9mbGFnIGxpc3QgLT4gaW50IC0+IGludCA9IFwiY2FtbF9zeXNfb3BlblwiXG5cbmV4dGVybmFsIHNldF9vdXRfY2hhbm5lbF9uYW1lOiBvdXRfY2hhbm5lbCAtPiBzdHJpbmcgLT4gdW5pdCA9XG4gIFwiY2FtbF9tbF9zZXRfY2hhbm5lbF9uYW1lXCJcblxubGV0IG9wZW5fb3V0X2dlbiBtb2RlIHBlcm0gbmFtZSA9XG4gIGxldCBjID0gb3Blbl9kZXNjcmlwdG9yX291dChvcGVuX2Rlc2MgbmFtZSBtb2RlIHBlcm0pIGluXG4gIHNldF9vdXRfY2hhbm5lbF9uYW1lIGMgbmFtZTtcbiAgY1xuXG5sZXQgb3Blbl9vdXQgbmFtZSA9XG4gIG9wZW5fb3V0X2dlbiBbT3Blbl93cm9ubHk7IE9wZW5fY3JlYXQ7IE9wZW5fdHJ1bmM7IE9wZW5fdGV4dF0gMG82NjYgbmFtZVxuXG5sZXQgb3Blbl9vdXRfYmluIG5hbWUgPVxuICBvcGVuX291dF9nZW4gW09wZW5fd3Jvbmx5OyBPcGVuX2NyZWF0OyBPcGVuX3RydW5jOyBPcGVuX2JpbmFyeV0gMG82NjYgbmFtZVxuXG5leHRlcm5hbCBmbHVzaCA6IG91dF9jaGFubmVsIC0+IHVuaXQgPSBcImNhbWxfbWxfZmx1c2hcIlxuXG5leHRlcm5hbCBvdXRfY2hhbm5lbHNfbGlzdCA6IHVuaXQgLT4gb3V0X2NoYW5uZWwgbGlzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfbWxfb3V0X2NoYW5uZWxzX2xpc3RcIlxuXG5sZXQgZmx1c2hfYWxsICgpID1cbiAgbGV0IHJlYyBpdGVyID0gZnVuY3Rpb25cbiAgICAgIFtdIC0+ICgpXG4gICAgfCBhOjpsIC0+XG4gICAgICAgIGJlZ2luIHRyeVxuICAgICAgICAgICAgZmx1c2ggYVxuICAgICAgICB3aXRoIFN5c19lcnJvciBfIC0+XG4gICAgICAgICAgKCkgKCogaWdub3JlIGNoYW5uZWxzIGNsb3NlZCBkdXJpbmcgYSBwcmVjZWRpbmcgZmx1c2guICopXG4gICAgICAgIGVuZDtcbiAgICAgICAgaXRlciBsXG4gIGluIGl0ZXIgKG91dF9jaGFubmVsc19saXN0ICgpKVxuXG5leHRlcm5hbCB1bnNhZmVfb3V0cHV0IDogb3V0X2NoYW5uZWwgLT4gYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX21sX291dHB1dF9ieXRlc1wiXG5leHRlcm5hbCB1bnNhZmVfb3V0cHV0X3N0cmluZyA6IG91dF9jaGFubmVsIC0+IHN0cmluZyAtPiBpbnQgLT4gaW50IC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX21sX291dHB1dFwiXG5cbmV4dGVybmFsIG91dHB1dF9jaGFyIDogb3V0X2NoYW5uZWwgLT4gY2hhciAtPiB1bml0ID0gXCJjYW1sX21sX291dHB1dF9jaGFyXCJcblxubGV0IG91dHB1dF9ieXRlcyBvYyBzID1cbiAgdW5zYWZlX291dHB1dCBvYyBzIDAgKGJ5dGVzX2xlbmd0aCBzKVxuXG5sZXQgb3V0cHV0X3N0cmluZyBvYyBzID1cbiAgdW5zYWZlX291dHB1dF9zdHJpbmcgb2MgcyAwIChzdHJpbmdfbGVuZ3RoIHMpXG5cbmxldCBvdXRwdXQgb2MgcyBvZnMgbGVuID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IGJ5dGVzX2xlbmd0aCBzIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJvdXRwdXRcIlxuICBlbHNlIHVuc2FmZV9vdXRwdXQgb2MgcyBvZnMgbGVuXG5cbmxldCBvdXRwdXRfc3Vic3RyaW5nIG9jIHMgb2ZzIGxlbiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBzdHJpbmdfbGVuZ3RoIHMgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIm91dHB1dF9zdWJzdHJpbmdcIlxuICBlbHNlIHVuc2FmZV9vdXRwdXRfc3RyaW5nIG9jIHMgb2ZzIGxlblxuXG5leHRlcm5hbCBvdXRwdXRfYnl0ZSA6IG91dF9jaGFubmVsIC0+IGludCAtPiB1bml0ID0gXCJjYW1sX21sX291dHB1dF9jaGFyXCJcbmV4dGVybmFsIG91dHB1dF9iaW5hcnlfaW50IDogb3V0X2NoYW5uZWwgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfbWxfb3V0cHV0X2ludFwiXG5cbmV4dGVybmFsIG1hcnNoYWxfdG9fY2hhbm5lbCA6IG91dF9jaGFubmVsIC0+ICdhIC0+IHVuaXQgbGlzdCAtPiB1bml0XG4gICAgID0gXCJjYW1sX291dHB1dF92YWx1ZVwiXG5sZXQgb3V0cHV0X3ZhbHVlIGNoYW4gdiA9IG1hcnNoYWxfdG9fY2hhbm5lbCBjaGFuIHYgW11cblxuZXh0ZXJuYWwgc2Vla19vdXQgOiBvdXRfY2hhbm5lbCAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9tbF9zZWVrX291dFwiXG5leHRlcm5hbCBwb3Nfb3V0IDogb3V0X2NoYW5uZWwgLT4gaW50ID0gXCJjYW1sX21sX3Bvc19vdXRcIlxuZXh0ZXJuYWwgb3V0X2NoYW5uZWxfbGVuZ3RoIDogb3V0X2NoYW5uZWwgLT4gaW50ID0gXCJjYW1sX21sX2NoYW5uZWxfc2l6ZVwiXG5leHRlcm5hbCBjbG9zZV9vdXRfY2hhbm5lbCA6IG91dF9jaGFubmVsIC0+IHVuaXQgPSBcImNhbWxfbWxfY2xvc2VfY2hhbm5lbFwiXG5sZXQgY2xvc2Vfb3V0IG9jID0gZmx1c2ggb2M7IGNsb3NlX291dF9jaGFubmVsIG9jXG5sZXQgY2xvc2Vfb3V0X25vZXJyIG9jID1cbiAgKHRyeSBmbHVzaCBvYyB3aXRoIF8gLT4gKCkpO1xuICAodHJ5IGNsb3NlX291dF9jaGFubmVsIG9jIHdpdGggXyAtPiAoKSlcbmV4dGVybmFsIHNldF9iaW5hcnlfbW9kZV9vdXQgOiBvdXRfY2hhbm5lbCAtPiBib29sIC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfbWxfc2V0X2JpbmFyeV9tb2RlXCJcblxuKCogR2VuZXJhbCBpbnB1dCBmdW5jdGlvbnMgKilcblxuZXh0ZXJuYWwgc2V0X2luX2NoYW5uZWxfbmFtZTogaW5fY2hhbm5lbCAtPiBzdHJpbmcgLT4gdW5pdCA9XG4gIFwiY2FtbF9tbF9zZXRfY2hhbm5lbF9uYW1lXCJcblxubGV0IG9wZW5faW5fZ2VuIG1vZGUgcGVybSBuYW1lID1cbiAgbGV0IGMgPSBvcGVuX2Rlc2NyaXB0b3JfaW4ob3Blbl9kZXNjIG5hbWUgbW9kZSBwZXJtKSBpblxuICBzZXRfaW5fY2hhbm5lbF9uYW1lIGMgbmFtZTtcbiAgY1xuXG5sZXQgb3Blbl9pbiBuYW1lID1cbiAgb3Blbl9pbl9nZW4gW09wZW5fcmRvbmx5OyBPcGVuX3RleHRdIDAgbmFtZVxuXG5sZXQgb3Blbl9pbl9iaW4gbmFtZSA9XG4gIG9wZW5faW5fZ2VuIFtPcGVuX3Jkb25seTsgT3Blbl9iaW5hcnldIDAgbmFtZVxuXG5leHRlcm5hbCBpbnB1dF9jaGFyIDogaW5fY2hhbm5lbCAtPiBjaGFyID0gXCJjYW1sX21sX2lucHV0X2NoYXJcIlxuXG5leHRlcm5hbCB1bnNhZmVfaW5wdXQgOiBpbl9jaGFubmVsIC0+IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gaW50XG4gICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfbWxfaW5wdXRcIlxuXG5sZXQgaW5wdXQgaWMgcyBvZnMgbGVuID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IGJ5dGVzX2xlbmd0aCBzIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJpbnB1dFwiXG4gIGVsc2UgdW5zYWZlX2lucHV0IGljIHMgb2ZzIGxlblxuXG5sZXQgcmVjIHVuc2FmZV9yZWFsbHlfaW5wdXQgaWMgcyBvZnMgbGVuID1cbiAgaWYgbGVuIDw9IDAgdGhlbiAoKSBlbHNlIGJlZ2luXG4gICAgbGV0IHIgPSB1bnNhZmVfaW5wdXQgaWMgcyBvZnMgbGVuIGluXG4gICAgaWYgciA9IDBcbiAgICB0aGVuIHJhaXNlIEVuZF9vZl9maWxlXG4gICAgZWxzZSB1bnNhZmVfcmVhbGx5X2lucHV0IGljIHMgKG9mcyArIHIpIChsZW4gLSByKVxuICBlbmRcblxubGV0IHJlYWxseV9pbnB1dCBpYyBzIG9mcyBsZW4gPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gYnl0ZXNfbGVuZ3RoIHMgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcInJlYWxseV9pbnB1dFwiXG4gIGVsc2UgdW5zYWZlX3JlYWxseV9pbnB1dCBpYyBzIG9mcyBsZW5cblxubGV0IHJlYWxseV9pbnB1dF9zdHJpbmcgaWMgbGVuID1cbiAgbGV0IHMgPSBieXRlc19jcmVhdGUgbGVuIGluXG4gIHJlYWxseV9pbnB1dCBpYyBzIDAgbGVuO1xuICBieXRlc191bnNhZmVfdG9fc3RyaW5nIHNcblxuZXh0ZXJuYWwgaW5wdXRfc2Nhbl9saW5lIDogaW5fY2hhbm5lbCAtPiBpbnQgPSBcImNhbWxfbWxfaW5wdXRfc2Nhbl9saW5lXCJcblxubGV0IGlucHV0X2xpbmUgY2hhbiA9XG4gIGxldCByZWMgYnVpbGRfcmVzdWx0IGJ1ZiBwb3MgPSBmdW5jdGlvblxuICAgIFtdIC0+IGJ1ZlxuICB8IGhkIDo6IHRsIC0+XG4gICAgICBsZXQgbGVuID0gYnl0ZXNfbGVuZ3RoIGhkIGluXG4gICAgICBieXRlc19ibGl0IGhkIDAgYnVmIChwb3MgLSBsZW4pIGxlbjtcbiAgICAgIGJ1aWxkX3Jlc3VsdCBidWYgKHBvcyAtIGxlbikgdGwgaW5cbiAgbGV0IHJlYyBzY2FuIGFjY3UgbGVuID1cbiAgICBsZXQgbiA9IGlucHV0X3NjYW5fbGluZSBjaGFuIGluXG4gICAgaWYgbiA9IDAgdGhlbiBiZWdpbiAgICAgICAgICAgICAgICAgICAoKiBuID0gMDogd2UgYXJlIGF0IEVPRiAqKVxuICAgICAgbWF0Y2ggYWNjdSB3aXRoXG4gICAgICAgIFtdIC0+IHJhaXNlIEVuZF9vZl9maWxlXG4gICAgICB8IF8gIC0+IGJ1aWxkX3Jlc3VsdCAoYnl0ZXNfY3JlYXRlIGxlbikgbGVuIGFjY3VcbiAgICBlbmQgZWxzZSBpZiBuID4gMCB0aGVuIGJlZ2luICAgICAgICAgICgqIG4gPiAwOiBuZXdsaW5lIGZvdW5kIGluIGJ1ZmZlciAqKVxuICAgICAgbGV0IHJlcyA9IGJ5dGVzX2NyZWF0ZSAobiAtIDEpIGluXG4gICAgICBpZ25vcmUgKHVuc2FmZV9pbnB1dCBjaGFuIHJlcyAwIChuIC0gMSkpO1xuICAgICAgaWdub3JlIChpbnB1dF9jaGFyIGNoYW4pOyAgICAgICAgICAgKCogc2tpcCB0aGUgbmV3bGluZSAqKVxuICAgICAgbWF0Y2ggYWNjdSB3aXRoXG4gICAgICAgIFtdIC0+IHJlc1xuICAgICAgfCAgXyAtPiBsZXQgbGVuID0gbGVuICsgbiAtIDEgaW5cbiAgICAgICAgICAgICAgYnVpbGRfcmVzdWx0IChieXRlc19jcmVhdGUgbGVuKSBsZW4gKHJlcyA6OiBhY2N1KVxuICAgIGVuZCBlbHNlIGJlZ2luICAgICAgICAgICAgICAgICAgICAgICAgKCogbiA8IDA6IG5ld2xpbmUgbm90IGZvdW5kICopXG4gICAgICBsZXQgYmVnID0gYnl0ZXNfY3JlYXRlICgtbikgaW5cbiAgICAgIGlnbm9yZSh1bnNhZmVfaW5wdXQgY2hhbiBiZWcgMCAoLW4pKTtcbiAgICAgIHNjYW4gKGJlZyA6OiBhY2N1KSAobGVuIC0gbilcbiAgICBlbmRcbiAgaW4gYnl0ZXNfdW5zYWZlX3RvX3N0cmluZyAoc2NhbiBbXSAwKVxuXG5leHRlcm5hbCBpbnB1dF9ieXRlIDogaW5fY2hhbm5lbCAtPiBpbnQgPSBcImNhbWxfbWxfaW5wdXRfY2hhclwiXG5leHRlcm5hbCBpbnB1dF9iaW5hcnlfaW50IDogaW5fY2hhbm5lbCAtPiBpbnQgPSBcImNhbWxfbWxfaW5wdXRfaW50XCJcbmV4dGVybmFsIGlucHV0X3ZhbHVlIDogaW5fY2hhbm5lbCAtPiAnYSA9IFwiY2FtbF9pbnB1dF92YWx1ZVwiXG5leHRlcm5hbCBzZWVrX2luIDogaW5fY2hhbm5lbCAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9tbF9zZWVrX2luXCJcbmV4dGVybmFsIHBvc19pbiA6IGluX2NoYW5uZWwgLT4gaW50ID0gXCJjYW1sX21sX3Bvc19pblwiXG5leHRlcm5hbCBpbl9jaGFubmVsX2xlbmd0aCA6IGluX2NoYW5uZWwgLT4gaW50ID0gXCJjYW1sX21sX2NoYW5uZWxfc2l6ZVwiXG5leHRlcm5hbCBjbG9zZV9pbiA6IGluX2NoYW5uZWwgLT4gdW5pdCA9IFwiY2FtbF9tbF9jbG9zZV9jaGFubmVsXCJcbmxldCBjbG9zZV9pbl9ub2VyciBpYyA9ICh0cnkgY2xvc2VfaW4gaWMgd2l0aCBfIC0+ICgpKVxuZXh0ZXJuYWwgc2V0X2JpbmFyeV9tb2RlX2luIDogaW5fY2hhbm5lbCAtPiBib29sIC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9tbF9zZXRfYmluYXJ5X21vZGVcIlxuXG4oKiBPdXRwdXQgZnVuY3Rpb25zIG9uIHN0YW5kYXJkIG91dHB1dCAqKVxuXG5sZXQgcHJpbnRfY2hhciBjID0gb3V0cHV0X2NoYXIgc3Rkb3V0IGNcbmxldCBwcmludF9zdHJpbmcgcyA9IG91dHB1dF9zdHJpbmcgc3Rkb3V0IHNcbmxldCBwcmludF9ieXRlcyBzID0gb3V0cHV0X2J5dGVzIHN0ZG91dCBzXG5sZXQgcHJpbnRfaW50IGkgPSBvdXRwdXRfc3RyaW5nIHN0ZG91dCAoc3RyaW5nX29mX2ludCBpKVxubGV0IHByaW50X2Zsb2F0IGYgPSBvdXRwdXRfc3RyaW5nIHN0ZG91dCAoc3RyaW5nX29mX2Zsb2F0IGYpXG5sZXQgcHJpbnRfZW5kbGluZSBzID1cbiAgb3V0cHV0X3N0cmluZyBzdGRvdXQgczsgb3V0cHV0X2NoYXIgc3Rkb3V0ICdcXG4nOyBmbHVzaCBzdGRvdXRcbmxldCBwcmludF9uZXdsaW5lICgpID0gb3V0cHV0X2NoYXIgc3Rkb3V0ICdcXG4nOyBmbHVzaCBzdGRvdXRcblxuKCogT3V0cHV0IGZ1bmN0aW9ucyBvbiBzdGFuZGFyZCBlcnJvciAqKVxuXG5sZXQgcHJlcnJfY2hhciBjID0gb3V0cHV0X2NoYXIgc3RkZXJyIGNcbmxldCBwcmVycl9zdHJpbmcgcyA9IG91dHB1dF9zdHJpbmcgc3RkZXJyIHNcbmxldCBwcmVycl9ieXRlcyBzID0gb3V0cHV0X2J5dGVzIHN0ZGVyciBzXG5sZXQgcHJlcnJfaW50IGkgPSBvdXRwdXRfc3RyaW5nIHN0ZGVyciAoc3RyaW5nX29mX2ludCBpKVxubGV0IHByZXJyX2Zsb2F0IGYgPSBvdXRwdXRfc3RyaW5nIHN0ZGVyciAoc3RyaW5nX29mX2Zsb2F0IGYpXG5sZXQgcHJlcnJfZW5kbGluZSBzID1cbiAgb3V0cHV0X3N0cmluZyBzdGRlcnIgczsgb3V0cHV0X2NoYXIgc3RkZXJyICdcXG4nOyBmbHVzaCBzdGRlcnJcbmxldCBwcmVycl9uZXdsaW5lICgpID0gb3V0cHV0X2NoYXIgc3RkZXJyICdcXG4nOyBmbHVzaCBzdGRlcnJcblxuKCogSW5wdXQgZnVuY3Rpb25zIG9uIHN0YW5kYXJkIGlucHV0ICopXG5cbmxldCByZWFkX2xpbmUgKCkgPSBmbHVzaCBzdGRvdXQ7IGlucHV0X2xpbmUgc3RkaW5cbmxldCByZWFkX2ludCAoKSA9IGludF9vZl9zdHJpbmcocmVhZF9saW5lKCkpXG5sZXQgcmVhZF9pbnRfb3B0ICgpID0gaW50X29mX3N0cmluZ19vcHQocmVhZF9saW5lKCkpXG5sZXQgcmVhZF9mbG9hdCAoKSA9IGZsb2F0X29mX3N0cmluZyhyZWFkX2xpbmUoKSlcbmxldCByZWFkX2Zsb2F0X29wdCAoKSA9IGZsb2F0X29mX3N0cmluZ19vcHQocmVhZF9saW5lKCkpXG5cbigqIE9wZXJhdGlvbnMgb24gbGFyZ2UgZmlsZXMgKilcblxubW9kdWxlIExhcmdlRmlsZSA9XG4gIHN0cnVjdFxuICAgIGV4dGVybmFsIHNlZWtfb3V0IDogb3V0X2NoYW5uZWwgLT4gaW50NjQgLT4gdW5pdCA9IFwiY2FtbF9tbF9zZWVrX291dF82NFwiXG4gICAgZXh0ZXJuYWwgcG9zX291dCA6IG91dF9jaGFubmVsIC0+IGludDY0ID0gXCJjYW1sX21sX3Bvc19vdXRfNjRcIlxuICAgIGV4dGVybmFsIG91dF9jaGFubmVsX2xlbmd0aCA6IG91dF9jaGFubmVsIC0+IGludDY0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX21sX2NoYW5uZWxfc2l6ZV82NFwiXG4gICAgZXh0ZXJuYWwgc2Vla19pbiA6IGluX2NoYW5uZWwgLT4gaW50NjQgLT4gdW5pdCA9IFwiY2FtbF9tbF9zZWVrX2luXzY0XCJcbiAgICBleHRlcm5hbCBwb3NfaW4gOiBpbl9jaGFubmVsIC0+IGludDY0ID0gXCJjYW1sX21sX3Bvc19pbl82NFwiXG4gICAgZXh0ZXJuYWwgaW5fY2hhbm5lbF9sZW5ndGggOiBpbl9jaGFubmVsIC0+IGludDY0ID0gXCJjYW1sX21sX2NoYW5uZWxfc2l6ZV82NFwiXG4gIGVuZFxuXG4oKiBGb3JtYXRzICopXG5cbnR5cGUgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdDZcbiAgID0gKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljcy5mb3JtYXQ2XG4gICA9IEZvcm1hdCBvZiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzLmZtdFxuICAgICAgICAgICAgICAgKiBzdHJpbmdcblxudHlwZSAoJ2EsICdiLCAnYywgJ2QpIGZvcm1hdDQgPSAoJ2EsICdiLCAnYywgJ2MsICdjLCAnZCkgZm9ybWF0NlxuXG50eXBlICgnYSwgJ2IsICdjKSBmb3JtYXQgPSAoJ2EsICdiLCAnYywgJ2MpIGZvcm1hdDRcblxubGV0IHN0cmluZ19vZl9mb3JtYXQgKEZvcm1hdCAoX2ZtdCwgc3RyKSkgPSBzdHJcblxuZXh0ZXJuYWwgZm9ybWF0X29mX3N0cmluZyA6XG4gKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdDYgLT5cbiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0NiA9IFwiJWlkZW50aXR5XCJcblxubGV0ICggXl4gKSAoRm9ybWF0IChmbXQxLCBzdHIxKSkgKEZvcm1hdCAoZm10Miwgc3RyMikpID1cbiAgRm9ybWF0IChDYW1saW50ZXJuYWxGb3JtYXRCYXNpY3MuY29uY2F0X2ZtdCBmbXQxIGZtdDIsXG4gICAgICAgICAgc3RyMSBeIFwiJSxcIiBeIHN0cjIpXG5cbigqIE1pc2NlbGxhbmVvdXMgKilcblxuZXh0ZXJuYWwgc3lzX2V4aXQgOiBpbnQgLT4gJ2EgPSBcImNhbWxfc3lzX2V4aXRcIlxuXG5sZXQgZXhpdF9mdW5jdGlvbiA9IENhbWxpbnRlcm5hbEF0b21pYy5tYWtlIGZsdXNoX2FsbFxuXG5sZXQgcmVjIGF0X2V4aXQgZiA9XG4gIGxldCBtb2R1bGUgQXRvbWljID0gQ2FtbGludGVybmFsQXRvbWljIGluXG4gICgqIE1QUiM3MjUzLCBNUFIjNzc5NjogbWFrZSBzdXJlIFwiZlwiIGlzIGV4ZWN1dGVkIG9ubHkgb25jZSAqKVxuICBsZXQgZl95ZXRfdG9fcnVuID0gQXRvbWljLm1ha2UgdHJ1ZSBpblxuICBsZXQgb2xkX2V4aXQgPSBBdG9taWMuZ2V0IGV4aXRfZnVuY3Rpb24gaW5cbiAgbGV0IG5ld19leGl0ICgpID1cbiAgICBpZiBBdG9taWMuY29tcGFyZV9hbmRfc2V0IGZfeWV0X3RvX3J1biB0cnVlIGZhbHNlIHRoZW4gZiAoKSA7XG4gICAgb2xkX2V4aXQgKClcbiAgaW5cbiAgbGV0IHN1Y2Nlc3MgPSBBdG9taWMuY29tcGFyZV9hbmRfc2V0IGV4aXRfZnVuY3Rpb24gb2xkX2V4aXQgbmV3X2V4aXQgaW5cbiAgaWYgbm90IHN1Y2Nlc3MgdGhlbiBhdF9leGl0IGZcblxubGV0IGRvX2F0X2V4aXQgKCkgPSAoQ2FtbGludGVybmFsQXRvbWljLmdldCBleGl0X2Z1bmN0aW9uKSAoKVxuXG5sZXQgZXhpdCByZXRjb2RlID1cbiAgZG9fYXRfZXhpdCAoKTtcbiAgc3lzX2V4aXQgcmV0Y29kZVxuXG5sZXQgXyA9IHJlZ2lzdGVyX25hbWVkX3ZhbHVlIFwiUGVydmFzaXZlcy5kb19hdF9leGl0XCIgZG9fYXRfZXhpdFxuXG5leHRlcm5hbCBtYWpvciA6IHVuaXQgLT4gdW5pdCA9IFwiY2FtbF9nY19tYWpvclwiXG5leHRlcm5hbCBuYWtlZF9wb2ludGVyc19jaGVja2VkIDogdW5pdCAtPiBib29sXG4gID0gXCJjYW1sX3N5c19jb25zdF9uYWtlZF9wb2ludGVyc19jaGVja2VkXCJcbmxldCAoKSA9IGlmIG5ha2VkX3BvaW50ZXJzX2NoZWNrZWQgKCkgdGhlbiBhdF9leGl0IG1ham9yXG5cbigqTU9EVUxFX0FMSUFTRVMqKVxubW9kdWxlIEFyZyAgICAgICAgICA9IEFyZ1xubW9kdWxlIEFycmF5ICAgICAgICA9IEFycmF5XG5tb2R1bGUgQXJyYXlMYWJlbHMgID0gQXJyYXlMYWJlbHNcbm1vZHVsZSBBdG9taWMgICAgICAgPSBBdG9taWNcbm1vZHVsZSBCaWdhcnJheSAgICAgPSBCaWdhcnJheVxubW9kdWxlIEJvb2wgICAgICAgICA9IEJvb2xcbm1vZHVsZSBCdWZmZXIgICAgICAgPSBCdWZmZXJcbm1vZHVsZSBCeXRlcyAgICAgICAgPSBCeXRlc1xubW9kdWxlIEJ5dGVzTGFiZWxzICA9IEJ5dGVzTGFiZWxzXG5tb2R1bGUgQ2FsbGJhY2sgICAgID0gQ2FsbGJhY2tcbm1vZHVsZSBDaGFyICAgICAgICAgPSBDaGFyXG5tb2R1bGUgQ29tcGxleCAgICAgID0gQ29tcGxleFxubW9kdWxlIERpZ2VzdCAgICAgICA9IERpZ2VzdFxubW9kdWxlIEVpdGhlciAgICAgICA9IEVpdGhlclxubW9kdWxlIEVwaGVtZXJvbiAgICA9IEVwaGVtZXJvblxubW9kdWxlIEZpbGVuYW1lICAgICA9IEZpbGVuYW1lXG5tb2R1bGUgRmxvYXQgICAgICAgID0gRmxvYXRcbm1vZHVsZSBGb3JtYXQgICAgICAgPSBGb3JtYXRcbm1vZHVsZSBGdW4gICAgICAgICAgPSBGdW5cbm1vZHVsZSBHYyAgICAgICAgICAgPSBHY1xubW9kdWxlIEdlbmxleCAgICAgICA9IEdlbmxleFxubW9kdWxlIEhhc2h0YmwgICAgICA9IEhhc2h0Ymxcbm1vZHVsZSBJbl9jaGFubmVsICAgPSBJbl9jaGFubmVsXG5tb2R1bGUgSW50ICAgICAgICAgID0gSW50XG5tb2R1bGUgSW50MzIgICAgICAgID0gSW50MzJcbm1vZHVsZSBJbnQ2NCAgICAgICAgPSBJbnQ2NFxubW9kdWxlIExhenkgICAgICAgICA9IExhenlcbm1vZHVsZSBMZXhpbmcgICAgICAgPSBMZXhpbmdcbm1vZHVsZSBMaXN0ICAgICAgICAgPSBMaXN0XG5tb2R1bGUgTGlzdExhYmVscyAgID0gTGlzdExhYmVsc1xubW9kdWxlIE1hcCAgICAgICAgICA9IE1hcFxubW9kdWxlIE1hcnNoYWwgICAgICA9IE1hcnNoYWxcbm1vZHVsZSBNb3JlTGFiZWxzICAgPSBNb3JlTGFiZWxzXG5tb2R1bGUgTmF0aXZlaW50ICAgID0gTmF0aXZlaW50XG5tb2R1bGUgT2JqICAgICAgICAgID0gT2JqXG5tb2R1bGUgT28gICAgICAgICAgID0gT29cbm1vZHVsZSBPcHRpb24gICAgICAgPSBPcHRpb25cbm1vZHVsZSBPdXRfY2hhbm5lbCAgPSBPdXRfY2hhbm5lbFxubW9kdWxlIFBhcnNpbmcgICAgICA9IFBhcnNpbmdcbm1vZHVsZSBQZXJ2YXNpdmVzICAgPSBQZXJ2YXNpdmVzXG5tb2R1bGUgUHJpbnRleGMgICAgID0gUHJpbnRleGNcbm1vZHVsZSBQcmludGYgICAgICAgPSBQcmludGZcbm1vZHVsZSBRdWV1ZSAgICAgICAgPSBRdWV1ZVxubW9kdWxlIFJhbmRvbSAgICAgICA9IFJhbmRvbVxubW9kdWxlIFJlc3VsdCAgICAgICA9IFJlc3VsdFxubW9kdWxlIFNjYW5mICAgICAgICA9IFNjYW5mXG5tb2R1bGUgU2VxICAgICAgICAgID0gU2VxXG5tb2R1bGUgU2V0ICAgICAgICAgID0gU2V0XG5tb2R1bGUgU3RhY2sgICAgICAgID0gU3RhY2tcbm1vZHVsZSBTdGRMYWJlbHMgICAgPSBTdGRMYWJlbHNcbm1vZHVsZSBTdHJlYW0gICAgICAgPSBTdHJlYW1cbm1vZHVsZSBTdHJpbmcgICAgICAgPSBTdHJpbmdcbm1vZHVsZSBTdHJpbmdMYWJlbHMgPSBTdHJpbmdMYWJlbHNcbm1vZHVsZSBTeXMgICAgICAgICAgPSBTeXNcbm1vZHVsZSBVY2hhciAgICAgICAgPSBVY2hhclxubW9kdWxlIFVuaXQgICAgICAgICA9IFVuaXRcbm1vZHVsZSBXZWFrICAgICAgICAgPSBXZWFrXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICBKZXJlbWllIERpbWlubywgSmFuZSBTdHJlZXQgRXVyb3BlICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE3IEphbmUgU3RyZWV0IEdyb3VwIExMQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqKiBAZGVwcmVjYXRlZCBVc2UgeyFTdGRsaWJ9ICopXG5cbmV4dGVybmFsIHJhaXNlIDogZXhuIC0+ICdhID0gXCIlcmFpc2VcIlxuZXh0ZXJuYWwgcmFpc2Vfbm90cmFjZSA6IGV4biAtPiAnYSA9IFwiJXJhaXNlX25vdHJhY2VcIlxubGV0IGludmFsaWRfYXJnID0gaW52YWxpZF9hcmdcbmxldCBmYWlsd2l0aCA9IGZhaWx3aXRoXG5leGNlcHRpb24gRXhpdFxuZXh0ZXJuYWwgKCA9ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlZXF1YWxcIlxuZXh0ZXJuYWwgKCA8PiApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJW5vdGVxdWFsXCJcbmV4dGVybmFsICggPCApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJWxlc3N0aGFuXCJcbmV4dGVybmFsICggPiApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJWdyZWF0ZXJ0aGFuXCJcbmV4dGVybmFsICggPD0gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVsZXNzZXF1YWxcIlxuZXh0ZXJuYWwgKCA+PSApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJWdyZWF0ZXJlcXVhbFwiXG5leHRlcm5hbCBjb21wYXJlIDogJ2EgLT4gJ2EgLT4gaW50ID0gXCIlY29tcGFyZVwiXG5sZXQgbWluID0gbWluXG5sZXQgbWF4ID0gbWF4XG5leHRlcm5hbCAoID09ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlZXFcIlxuZXh0ZXJuYWwgKCAhPSApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJW5vdGVxXCJcbmV4dGVybmFsIG5vdCA6IGJvb2wgLT4gYm9vbCA9IFwiJWJvb2xub3RcIlxuZXh0ZXJuYWwgKCAmJiApIDogYm9vbCAtPiBib29sIC0+IGJvb2wgPSBcIiVzZXF1YW5kXCJcbmV4dGVybmFsICggJiApIDogYm9vbCAtPiBib29sIC0+IGJvb2wgPSBcIiVzZXF1YW5kXCJcbiAgW0BAb2NhbWwuZGVwcmVjYXRlZCBcIlVzZSAoJiYpIGluc3RlYWQuXCJdXG5leHRlcm5hbCAoIHx8ICkgOiBib29sIC0+IGJvb2wgLT4gYm9vbCA9IFwiJXNlcXVvclwiXG5leHRlcm5hbCAoIG9yICkgOiBib29sIC0+IGJvb2wgLT4gYm9vbCA9IFwiJXNlcXVvclwiXG4gIFtAQG9jYW1sLmRlcHJlY2F0ZWQgXCJVc2UgKHx8KSBpbnN0ZWFkLlwiXVxuZXh0ZXJuYWwgX19MT0NfXyA6IHN0cmluZyA9IFwiJWxvY19MT0NcIlxuZXh0ZXJuYWwgX19GSUxFX18gOiBzdHJpbmcgPSBcIiVsb2NfRklMRVwiXG5leHRlcm5hbCBfX0xJTkVfXyA6IGludCA9IFwiJWxvY19MSU5FXCJcbmV4dGVybmFsIF9fTU9EVUxFX18gOiBzdHJpbmcgPSBcIiVsb2NfTU9EVUxFXCJcbmV4dGVybmFsIF9fUE9TX18gOiBzdHJpbmcgKiBpbnQgKiBpbnQgKiBpbnQgPSBcIiVsb2NfUE9TXCJcbmV4dGVybmFsIF9fTE9DX09GX18gOiAnYSAtPiBzdHJpbmcgKiAnYSA9IFwiJWxvY19MT0NcIlxuZXh0ZXJuYWwgX19MSU5FX09GX18gOiAnYSAtPiBpbnQgKiAnYSA9IFwiJWxvY19MSU5FXCJcbmV4dGVybmFsIF9fUE9TX09GX18gOiAnYSAtPiAoc3RyaW5nICogaW50ICogaW50ICogaW50KSAqICdhID0gXCIlbG9jX1BPU1wiXG5leHRlcm5hbCAoIHw+ICkgOiAnYSAtPiAoJ2EgLT4gJ2IpIC0+ICdiID0gXCIlcmV2YXBwbHlcIlxuZXh0ZXJuYWwgKCBAQCApIDogKCdhIC0+ICdiKSAtPiAnYSAtPiAnYiA9IFwiJWFwcGx5XCJcbmV4dGVybmFsICggfi0gKSA6IGludCAtPiBpbnQgPSBcIiVuZWdpbnRcIlxuZXh0ZXJuYWwgKCB+KyApIDogaW50IC0+IGludCA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIHN1Y2MgOiBpbnQgLT4gaW50ID0gXCIlc3VjY2ludFwiXG5leHRlcm5hbCBwcmVkIDogaW50IC0+IGludCA9IFwiJXByZWRpbnRcIlxuZXh0ZXJuYWwgKCArICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWFkZGludFwiXG5leHRlcm5hbCAoIC0gKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlc3ViaW50XCJcbmV4dGVybmFsICggKiApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVtdWxpbnRcIlxuZXh0ZXJuYWwgKCAvICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWRpdmludFwiXG5leHRlcm5hbCAoIG1vZCApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVtb2RpbnRcIlxubGV0IGFicyA9IGFic1xubGV0IG1heF9pbnQgPSBtYXhfaW50XG5sZXQgbWluX2ludCA9IG1pbl9pbnRcbmV4dGVybmFsICggbGFuZCApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVhbmRpbnRcIlxuZXh0ZXJuYWwgKCBsb3IgKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlb3JpbnRcIlxuZXh0ZXJuYWwgKCBseG9yICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJXhvcmludFwiXG5sZXQgbG5vdCA9IGxub3RcbmV4dGVybmFsICggbHNsICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWxzbGludFwiXG5leHRlcm5hbCAoIGxzciApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVsc3JpbnRcIlxuZXh0ZXJuYWwgKCBhc3IgKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlYXNyaW50XCJcbmV4dGVybmFsICggfi0uICkgOiBmbG9hdCAtPiBmbG9hdCA9IFwiJW5lZ2Zsb2F0XCJcbmV4dGVybmFsICggfisuICkgOiBmbG9hdCAtPiBmbG9hdCA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsICggKy4gKSA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCIlYWRkZmxvYXRcIlxuZXh0ZXJuYWwgKCAtLiApIDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcIiVzdWJmbG9hdFwiXG5leHRlcm5hbCAoICouICkgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiJW11bGZsb2F0XCJcbmV4dGVybmFsICggLy4gKSA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCIlZGl2ZmxvYXRcIlxuZXh0ZXJuYWwgKCAqKiApIDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfcG93ZXJfZmxvYXRcIiBcInBvd1wiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBzcXJ0IDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfc3FydF9mbG9hdFwiIFwic3FydFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBleHAgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9leHBfZmxvYXRcIiBcImV4cFwiIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBsb2cgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9sb2dfZmxvYXRcIiBcImxvZ1wiIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBsb2cxMCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2xvZzEwX2Zsb2F0XCIgXCJsb2cxMFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBleHBtMSA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2V4cG0xX2Zsb2F0XCIgXCJjYW1sX2V4cG0xXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGxvZzFwIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfbG9nMXBfZmxvYXRcIiBcImNhbWxfbG9nMXBcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgY29zIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfY29zX2Zsb2F0XCIgXCJjb3NcIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgc2luIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfc2luX2Zsb2F0XCIgXCJzaW5cIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgdGFuIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfdGFuX2Zsb2F0XCIgXCJ0YW5cIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYWNvcyA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2Fjb3NfZmxvYXRcIiBcImFjb3NcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYXNpbiA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2FzaW5fZmxvYXRcIiBcImFzaW5cIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYXRhbiA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2F0YW5fZmxvYXRcIiBcImF0YW5cIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYXRhbjIgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9hdGFuMl9mbG9hdFwiIFwiYXRhbjJcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgaHlwb3QgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9oeXBvdF9mbG9hdFwiIFwiY2FtbF9oeXBvdFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBjb3NoIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfY29zaF9mbG9hdFwiIFwiY29zaFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBzaW5oIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfc2luaF9mbG9hdFwiIFwic2luaFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCB0YW5oIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfdGFuaF9mbG9hdFwiIFwidGFuaFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBjZWlsIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfY2VpbF9mbG9hdFwiIFwiY2VpbFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBmbG9vciA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2Zsb29yX2Zsb2F0XCIgXCJmbG9vclwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhYnNfZmxvYXQgOiBmbG9hdCAtPiBmbG9hdCA9IFwiJWFic2Zsb2F0XCJcbmV4dGVybmFsIGNvcHlzaWduIDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXRcbiAgICAgICAgICAgICAgICAgID0gXCJjYW1sX2NvcHlzaWduX2Zsb2F0XCIgXCJjYW1sX2NvcHlzaWduXCJcbiAgICAgICAgICAgICAgICAgIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBtb2RfZmxvYXQgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9mbW9kX2Zsb2F0XCIgXCJmbW9kXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGZyZXhwIDogZmxvYXQgLT4gZmxvYXQgKiBpbnQgPSBcImNhbWxfZnJleHBfZmxvYXRcIlxuZXh0ZXJuYWwgbGRleHAgOiAoZmxvYXQgW0B1bmJveGVkXSkgLT4gKGludCBbQHVudGFnZ2VkXSkgLT4gKGZsb2F0IFtAdW5ib3hlZF0pID1cbiAgXCJjYW1sX2xkZXhwX2Zsb2F0XCIgXCJjYW1sX2xkZXhwX2Zsb2F0X3VuYm94ZWRcIiBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgbW9kZiA6IGZsb2F0IC0+IGZsb2F0ICogZmxvYXQgPSBcImNhbWxfbW9kZl9mbG9hdFwiXG5leHRlcm5hbCBmbG9hdCA6IGludCAtPiBmbG9hdCA9IFwiJWZsb2F0b2ZpbnRcIlxuZXh0ZXJuYWwgZmxvYXRfb2ZfaW50IDogaW50IC0+IGZsb2F0ID0gXCIlZmxvYXRvZmludFwiXG5leHRlcm5hbCB0cnVuY2F0ZSA6IGZsb2F0IC0+IGludCA9IFwiJWludG9mZmxvYXRcIlxuZXh0ZXJuYWwgaW50X29mX2Zsb2F0IDogZmxvYXQgLT4gaW50ID0gXCIlaW50b2ZmbG9hdFwiXG5sZXQgaW5maW5pdHkgPSBpbmZpbml0eVxubGV0IG5lZ19pbmZpbml0eSA9IG5lZ19pbmZpbml0eVxubGV0IG5hbiA9IG5hblxubGV0IG1heF9mbG9hdCA9IG1heF9mbG9hdFxubGV0IG1pbl9mbG9hdCA9IG1pbl9mbG9hdFxubGV0IGVwc2lsb25fZmxvYXQgPSBlcHNpbG9uX2Zsb2F0XG50eXBlIG5vbnJlYyBmcGNsYXNzID0gZnBjbGFzcyA9XG4gICAgRlBfbm9ybWFsXG4gIHwgRlBfc3Vibm9ybWFsXG4gIHwgRlBfemVyb1xuICB8IEZQX2luZmluaXRlXG4gIHwgRlBfbmFuXG5leHRlcm5hbCBjbGFzc2lmeV9mbG9hdCA6IChmbG9hdCBbQHVuYm94ZWRdKSAtPiBmcGNsYXNzID1cbiAgXCJjYW1sX2NsYXNzaWZ5X2Zsb2F0XCIgXCJjYW1sX2NsYXNzaWZ5X2Zsb2F0X3VuYm94ZWRcIiBbQEBub2FsbG9jXVxubGV0ICggXiApID0gKCBeIClcbmV4dGVybmFsIGludF9vZl9jaGFyIDogY2hhciAtPiBpbnQgPSBcIiVpZGVudGl0eVwiXG5sZXQgY2hhcl9vZl9pbnQgPSBjaGFyX29mX2ludFxuZXh0ZXJuYWwgaWdub3JlIDogJ2EgLT4gdW5pdCA9IFwiJWlnbm9yZVwiXG5sZXQgc3RyaW5nX29mX2Jvb2wgPSBzdHJpbmdfb2ZfYm9vbFxubGV0IGJvb2xfb2Zfc3RyaW5nID0gYm9vbF9vZl9zdHJpbmdcbmxldCBib29sX29mX3N0cmluZ19vcHQgPSBib29sX29mX3N0cmluZ19vcHRcbmxldCBzdHJpbmdfb2ZfaW50ID0gc3RyaW5nX29mX2ludFxuZXh0ZXJuYWwgaW50X29mX3N0cmluZyA6IHN0cmluZyAtPiBpbnQgPSBcImNhbWxfaW50X29mX3N0cmluZ1wiXG5sZXQgaW50X29mX3N0cmluZ19vcHQgPSBpbnRfb2Zfc3RyaW5nX29wdFxubGV0IHN0cmluZ19vZl9mbG9hdCA9IHN0cmluZ19vZl9mbG9hdFxuZXh0ZXJuYWwgZmxvYXRfb2Zfc3RyaW5nIDogc3RyaW5nIC0+IGZsb2F0ID0gXCJjYW1sX2Zsb2F0X29mX3N0cmluZ1wiXG5sZXQgZmxvYXRfb2Zfc3RyaW5nX29wdCA9IGZsb2F0X29mX3N0cmluZ19vcHRcbmV4dGVybmFsIGZzdCA6ICdhICogJ2IgLT4gJ2EgPSBcIiVmaWVsZDBcIlxuZXh0ZXJuYWwgc25kIDogJ2EgKiAnYiAtPiAnYiA9IFwiJWZpZWxkMVwiXG5sZXQgKCBAICkgID0gKCBAIClcbnR5cGUgbm9ucmVjIGluX2NoYW5uZWwgPSBpbl9jaGFubmVsXG50eXBlIG5vbnJlYyBvdXRfY2hhbm5lbCA9IG91dF9jaGFubmVsXG5sZXQgc3RkaW4gPSBzdGRpblxubGV0IHN0ZG91dCA9IHN0ZG91dFxubGV0IHN0ZGVyciA9IHN0ZGVyclxubGV0IHByaW50X2NoYXIgPSBwcmludF9jaGFyXG5sZXQgcHJpbnRfc3RyaW5nID0gcHJpbnRfc3RyaW5nXG5sZXQgcHJpbnRfYnl0ZXMgPSBwcmludF9ieXRlc1xubGV0IHByaW50X2ludCA9IHByaW50X2ludFxubGV0IHByaW50X2Zsb2F0ID0gcHJpbnRfZmxvYXRcbmxldCBwcmludF9lbmRsaW5lID0gcHJpbnRfZW5kbGluZVxubGV0IHByaW50X25ld2xpbmUgPSBwcmludF9uZXdsaW5lXG5sZXQgcHJlcnJfY2hhciA9IHByZXJyX2NoYXJcbmxldCBwcmVycl9zdHJpbmcgPSBwcmVycl9zdHJpbmdcbmxldCBwcmVycl9ieXRlcyA9IHByZXJyX2J5dGVzXG5sZXQgcHJlcnJfaW50ID0gcHJlcnJfaW50XG5sZXQgcHJlcnJfZmxvYXQgPSBwcmVycl9mbG9hdFxubGV0IHByZXJyX2VuZGxpbmUgPSBwcmVycl9lbmRsaW5lXG5sZXQgcHJlcnJfbmV3bGluZSA9IHByZXJyX25ld2xpbmVcbmxldCByZWFkX2xpbmUgPSByZWFkX2xpbmVcbmxldCByZWFkX2ludCA9IHJlYWRfaW50XG5sZXQgcmVhZF9pbnRfb3B0ID0gcmVhZF9pbnRfb3B0XG5sZXQgcmVhZF9mbG9hdCA9IHJlYWRfZmxvYXRcbmxldCByZWFkX2Zsb2F0X29wdCA9IHJlYWRfZmxvYXRfb3B0XG50eXBlIG5vbnJlYyBvcGVuX2ZsYWcgPSBvcGVuX2ZsYWcgPVxuICAgIE9wZW5fcmRvbmx5XG4gIHwgT3Blbl93cm9ubHlcbiAgfCBPcGVuX2FwcGVuZFxuICB8IE9wZW5fY3JlYXRcbiAgfCBPcGVuX3RydW5jXG4gIHwgT3Blbl9leGNsXG4gIHwgT3Blbl9iaW5hcnlcbiAgfCBPcGVuX3RleHRcbiAgfCBPcGVuX25vbmJsb2NrXG5sZXQgb3Blbl9vdXQgPSBvcGVuX291dFxubGV0IG9wZW5fb3V0X2JpbiA9IG9wZW5fb3V0X2JpblxubGV0IG9wZW5fb3V0X2dlbiA9IG9wZW5fb3V0X2dlblxubGV0IGZsdXNoID0gZmx1c2hcbmxldCBmbHVzaF9hbGwgPSBmbHVzaF9hbGxcbmxldCBvdXRwdXRfY2hhciA9IG91dHB1dF9jaGFyXG5sZXQgb3V0cHV0X3N0cmluZyA9IG91dHB1dF9zdHJpbmdcbmxldCBvdXRwdXRfYnl0ZXMgPSBvdXRwdXRfYnl0ZXNcbmxldCBvdXRwdXQgPSBvdXRwdXRcbmxldCBvdXRwdXRfc3Vic3RyaW5nID0gb3V0cHV0X3N1YnN0cmluZ1xubGV0IG91dHB1dF9ieXRlID0gb3V0cHV0X2J5dGVcbmxldCBvdXRwdXRfYmluYXJ5X2ludCA9IG91dHB1dF9iaW5hcnlfaW50XG5sZXQgb3V0cHV0X3ZhbHVlID0gb3V0cHV0X3ZhbHVlXG5sZXQgc2Vla19vdXQgPSBzZWVrX291dFxubGV0IHBvc19vdXQgPSBwb3Nfb3V0XG5sZXQgb3V0X2NoYW5uZWxfbGVuZ3RoID0gb3V0X2NoYW5uZWxfbGVuZ3RoXG5sZXQgY2xvc2Vfb3V0ID0gY2xvc2Vfb3V0XG5sZXQgY2xvc2Vfb3V0X25vZXJyID0gY2xvc2Vfb3V0X25vZXJyXG5sZXQgc2V0X2JpbmFyeV9tb2RlX291dCA9IHNldF9iaW5hcnlfbW9kZV9vdXRcbmxldCBvcGVuX2luID0gb3Blbl9pblxubGV0IG9wZW5faW5fYmluID0gb3Blbl9pbl9iaW5cbmxldCBvcGVuX2luX2dlbiA9IG9wZW5faW5fZ2VuXG5sZXQgaW5wdXRfY2hhciA9IGlucHV0X2NoYXJcbmxldCBpbnB1dF9saW5lID0gaW5wdXRfbGluZVxubGV0IGlucHV0ID0gaW5wdXRcbmxldCByZWFsbHlfaW5wdXQgPSByZWFsbHlfaW5wdXRcbmxldCByZWFsbHlfaW5wdXRfc3RyaW5nID0gcmVhbGx5X2lucHV0X3N0cmluZ1xubGV0IGlucHV0X2J5dGUgPSBpbnB1dF9ieXRlXG5sZXQgaW5wdXRfYmluYXJ5X2ludCA9IGlucHV0X2JpbmFyeV9pbnRcbmxldCBpbnB1dF92YWx1ZSA9IGlucHV0X3ZhbHVlXG5sZXQgc2Vla19pbiA9IHNlZWtfaW5cbmxldCBwb3NfaW4gPSBwb3NfaW5cbmxldCBpbl9jaGFubmVsX2xlbmd0aCA9IGluX2NoYW5uZWxfbGVuZ3RoXG5sZXQgY2xvc2VfaW4gPSBjbG9zZV9pblxubGV0IGNsb3NlX2luX25vZXJyID0gY2xvc2VfaW5fbm9lcnJcbmxldCBzZXRfYmluYXJ5X21vZGVfaW4gPSBzZXRfYmluYXJ5X21vZGVfaW5cbm1vZHVsZSBMYXJnZUZpbGUgPSBMYXJnZUZpbGVcbnR5cGUgbm9ucmVjICdhIHJlZiA9ICdhIHJlZiA9IHsgbXV0YWJsZSBjb250ZW50cyA6ICdhIH1cbmV4dGVybmFsIHJlZiA6ICdhIC0+ICdhIHJlZiA9IFwiJW1ha2VtdXRhYmxlXCJcbmV4dGVybmFsICggISApIDogJ2EgcmVmIC0+ICdhID0gXCIlZmllbGQwXCJcbmV4dGVybmFsICggOj0gKSA6ICdhIHJlZiAtPiAnYSAtPiB1bml0ID0gXCIlc2V0ZmllbGQwXCJcbmV4dGVybmFsIGluY3IgOiBpbnQgcmVmIC0+IHVuaXQgPSBcIiVpbmNyXCJcbmV4dGVybmFsIGRlY3IgOiBpbnQgcmVmIC0+IHVuaXQgPSBcIiVkZWNyXCJcbnR5cGUgbm9ucmVjICgnYSwnYikgcmVzdWx0ID0gKCdhLCdiKSByZXN1bHQgPSBPayBvZiAnYSB8IEVycm9yIG9mICdiXG50eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXQ2ID1cbiAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljcy5mb3JtYXQ2XG50eXBlICgnYSwgJ2IsICdjLCAnZCkgZm9ybWF0NCA9ICgnYSwgJ2IsICdjLCAnYywgJ2MsICdkKSBmb3JtYXQ2XG50eXBlICgnYSwgJ2IsICdjKSBmb3JtYXQgPSAoJ2EsICdiLCAnYywgJ2MpIGZvcm1hdDRcbmxldCBzdHJpbmdfb2ZfZm9ybWF0ID0gc3RyaW5nX29mX2Zvcm1hdFxuZXh0ZXJuYWwgZm9ybWF0X29mX3N0cmluZyA6XG4gICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXQ2IC0+XG4gICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXQ2ID0gXCIlaWRlbnRpdHlcIlxubGV0ICggXl4gKSA9ICggXl4gKVxubGV0IGV4aXQgPSBleGl0XG5sZXQgYXRfZXhpdCA9IGF0X2V4aXRcbmxldCB2YWxpZF9mbG9hdF9sZXhlbSA9IHZhbGlkX2Zsb2F0X2xleGVtXG5sZXQgZG9fYXRfZXhpdCA9IGRvX2F0X2V4aXRcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgTmljb2xhcyBPamVkYSBCYXIsIExleGlGaSAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMTggSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuZXh0ZXJuYWwgbmVnIDogZmxvYXQgLT4gZmxvYXQgPSBcIiVuZWdmbG9hdFwiXG5leHRlcm5hbCBhZGQgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiJWFkZGZsb2F0XCJcbmV4dGVybmFsIHN1YiA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCIlc3ViZmxvYXRcIlxuZXh0ZXJuYWwgbXVsIDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcIiVtdWxmbG9hdFwiXG5leHRlcm5hbCBkaXYgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiJWRpdmZsb2F0XCJcbmV4dGVybmFsIHJlbSA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2Ztb2RfZmxvYXRcIiBcImZtb2RcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgZm1hIDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfZm1hX2Zsb2F0XCIgXCJjYW1sX2ZtYVwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhYnMgOiBmbG9hdCAtPiBmbG9hdCA9IFwiJWFic2Zsb2F0XCJcblxubGV0IHplcm8gPSAwLlxubGV0IG9uZSA9IDEuXG5sZXQgbWludXNfb25lID0gLTEuXG5sZXQgaW5maW5pdHkgPSBTdGRsaWIuaW5maW5pdHlcbmxldCBuZWdfaW5maW5pdHkgPSBTdGRsaWIubmVnX2luZmluaXR5XG5sZXQgbmFuID0gU3RkbGliLm5hblxubGV0IGlzX2Zpbml0ZSAoeDogZmxvYXQpID0geCAtLiB4ID0gMC5cbmxldCBpc19pbmZpbml0ZSAoeDogZmxvYXQpID0gMS4gLy4geCA9IDAuXG5sZXQgaXNfbmFuICh4OiBmbG9hdCkgPSB4IDw+IHhcblxubGV0IHBpID0gMHgxLjkyMWZiNTQ0NDJkMThwKzFcbmxldCBtYXhfZmxvYXQgPSBTdGRsaWIubWF4X2Zsb2F0XG5sZXQgbWluX2Zsb2F0ID0gU3RkbGliLm1pbl9mbG9hdFxubGV0IGVwc2lsb24gPSBTdGRsaWIuZXBzaWxvbl9mbG9hdFxuZXh0ZXJuYWwgb2ZfaW50IDogaW50IC0+IGZsb2F0ID0gXCIlZmxvYXRvZmludFwiXG5leHRlcm5hbCB0b19pbnQgOiBmbG9hdCAtPiBpbnQgPSBcIiVpbnRvZmZsb2F0XCJcbmV4dGVybmFsIG9mX3N0cmluZyA6IHN0cmluZyAtPiBmbG9hdCA9IFwiY2FtbF9mbG9hdF9vZl9zdHJpbmdcIlxubGV0IG9mX3N0cmluZ19vcHQgPSBTdGRsaWIuZmxvYXRfb2Zfc3RyaW5nX29wdFxubGV0IHRvX3N0cmluZyA9IFN0ZGxpYi5zdHJpbmdfb2ZfZmxvYXRcbnR5cGUgZnBjbGFzcyA9IFN0ZGxpYi5mcGNsYXNzID1cbiAgICBGUF9ub3JtYWxcbiAgfCBGUF9zdWJub3JtYWxcbiAgfCBGUF96ZXJvXG4gIHwgRlBfaW5maW5pdGVcbiAgfCBGUF9uYW5cbmV4dGVybmFsIGNsYXNzaWZ5X2Zsb2F0IDogKGZsb2F0IFtAdW5ib3hlZF0pIC0+IGZwY2xhc3MgPVxuICBcImNhbWxfY2xhc3NpZnlfZmxvYXRcIiBcImNhbWxfY2xhc3NpZnlfZmxvYXRfdW5ib3hlZFwiIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBwb3cgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9wb3dlcl9mbG9hdFwiIFwicG93XCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIHNxcnQgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9zcXJ0X2Zsb2F0XCIgXCJzcXJ0XCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGNicnQgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9jYnJ0X2Zsb2F0XCIgXCJjYW1sX2NicnRcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgZXhwIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfZXhwX2Zsb2F0XCIgXCJleHBcIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgZXhwMiA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2V4cDJfZmxvYXRcIiBcImNhbWxfZXhwMlwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBsb2cgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9sb2dfZmxvYXRcIiBcImxvZ1wiIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBsb2cxMCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2xvZzEwX2Zsb2F0XCIgXCJsb2cxMFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBsb2cyIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfbG9nMl9mbG9hdFwiIFwiY2FtbF9sb2cyXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGV4cG0xIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfZXhwbTFfZmxvYXRcIiBcImNhbWxfZXhwbTFcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgbG9nMXAgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9sb2cxcF9mbG9hdFwiIFwiY2FtbF9sb2cxcFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBjb3MgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9jb3NfZmxvYXRcIiBcImNvc1wiIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBzaW4gOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9zaW5fZmxvYXRcIiBcInNpblwiIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCB0YW4gOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF90YW5fZmxvYXRcIiBcInRhblwiIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhY29zIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfYWNvc19mbG9hdFwiIFwiYWNvc1wiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhc2luIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfYXNpbl9mbG9hdFwiIFwiYXNpblwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhdGFuIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfYXRhbl9mbG9hdFwiIFwiYXRhblwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhdGFuMiA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2F0YW4yX2Zsb2F0XCIgXCJhdGFuMlwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBoeXBvdCA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0XG4gICAgICAgICAgICAgICA9IFwiY2FtbF9oeXBvdF9mbG9hdFwiIFwiY2FtbF9oeXBvdFwiIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBjb3NoIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfY29zaF9mbG9hdFwiIFwiY29zaFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBzaW5oIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfc2luaF9mbG9hdFwiIFwic2luaFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCB0YW5oIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfdGFuaF9mbG9hdFwiIFwidGFuaFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhY29zaCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2Fjb3NoX2Zsb2F0XCIgXCJjYW1sX2Fjb3NoXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGFzaW5oIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfYXNpbmhfZmxvYXRcIiBcImNhbWxfYXNpbmhcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYXRhbmggOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9hdGFuaF9mbG9hdFwiIFwiY2FtbF9hdGFuaFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBlcmYgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9lcmZfZmxvYXRcIiBcImNhbWxfZXJmXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGVyZmMgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9lcmZjX2Zsb2F0XCIgXCJjYW1sX2VyZmNcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgdHJ1bmMgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF90cnVuY19mbG9hdFwiIFwiY2FtbF90cnVuY1wiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCByb3VuZCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX3JvdW5kX2Zsb2F0XCIgXCJjYW1sX3JvdW5kXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGNlaWwgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9jZWlsX2Zsb2F0XCIgXCJjZWlsXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGZsb29yIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfZmxvb3JfZmxvYXRcIiBcImZsb29yXCJcbltAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5cbmxldCBpc19pbnRlZ2VyIHggPSB4ID0gdHJ1bmMgeCAmJiBpc19maW5pdGUgeFxuXG5leHRlcm5hbCBuZXh0X2FmdGVyIDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXRcbiAgPSBcImNhbWxfbmV4dGFmdGVyX2Zsb2F0XCIgXCJjYW1sX25leHRhZnRlclwiIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5cbmxldCBzdWNjIHggPSBuZXh0X2FmdGVyIHggaW5maW5pdHlcbmxldCBwcmVkIHggPSBuZXh0X2FmdGVyIHggbmVnX2luZmluaXR5XG5cbmV4dGVybmFsIGNvcHlfc2lnbiA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0XG4gICAgICAgICAgICAgICAgICA9IFwiY2FtbF9jb3B5c2lnbl9mbG9hdFwiIFwiY2FtbF9jb3B5c2lnblwiXG4gICAgICAgICAgICAgICAgICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgc2lnbl9iaXQgOiAoZmxvYXQgW0B1bmJveGVkXSkgLT4gYm9vbFxuICA9IFwiY2FtbF9zaWduYml0X2Zsb2F0XCIgXCJjYW1sX3NpZ25iaXRcIiBbQEBub2FsbG9jXVxuXG5leHRlcm5hbCBmcmV4cCA6IGZsb2F0IC0+IGZsb2F0ICogaW50ID0gXCJjYW1sX2ZyZXhwX2Zsb2F0XCJcbmV4dGVybmFsIGxkZXhwIDogKGZsb2F0IFtAdW5ib3hlZF0pIC0+IChpbnQgW0B1bnRhZ2dlZF0pIC0+IChmbG9hdCBbQHVuYm94ZWRdKSA9XG4gIFwiY2FtbF9sZGV4cF9mbG9hdFwiIFwiY2FtbF9sZGV4cF9mbG9hdF91bmJveGVkXCIgW0BAbm9hbGxvY11cbmV4dGVybmFsIG1vZGYgOiBmbG9hdCAtPiBmbG9hdCAqIGZsb2F0ID0gXCJjYW1sX21vZGZfZmxvYXRcIlxudHlwZSB0ID0gZmxvYXRcbmV4dGVybmFsIGNvbXBhcmUgOiBmbG9hdCAtPiBmbG9hdCAtPiBpbnQgPSBcIiVjb21wYXJlXCJcbmxldCBlcXVhbCB4IHkgPSBjb21wYXJlIHggeSA9IDBcblxubGV0W0BpbmxpbmVdIG1pbiAoeDogZmxvYXQpICh5OiBmbG9hdCkgPVxuICBpZiB5ID4geCB8fCAobm90KHNpZ25fYml0IHkpICYmIHNpZ25fYml0IHgpIHRoZW5cbiAgICBpZiBpc19uYW4geSB0aGVuIHkgZWxzZSB4XG4gIGVsc2UgaWYgaXNfbmFuIHggdGhlbiB4IGVsc2UgeVxuXG5sZXRbQGlubGluZV0gbWF4ICh4OiBmbG9hdCkgKHk6IGZsb2F0KSA9XG4gIGlmIHkgPiB4IHx8IChub3Qoc2lnbl9iaXQgeSkgJiYgc2lnbl9iaXQgeCkgdGhlblxuICAgIGlmIGlzX25hbiB4IHRoZW4geCBlbHNlIHlcbiAgZWxzZSBpZiBpc19uYW4geSB0aGVuIHkgZWxzZSB4XG5cbmxldFtAaW5saW5lXSBtaW5fbWF4ICh4OiBmbG9hdCkgKHk6IGZsb2F0KSA9XG4gIGlmIGlzX25hbiB4IHx8IGlzX25hbiB5IHRoZW4gKG5hbiwgbmFuKVxuICBlbHNlIGlmIHkgPiB4IHx8IChub3Qoc2lnbl9iaXQgeSkgJiYgc2lnbl9iaXQgeCkgdGhlbiAoeCwgeSkgZWxzZSAoeSwgeClcblxubGV0W0BpbmxpbmVdIG1pbl9udW0gKHg6IGZsb2F0KSAoeTogZmxvYXQpID1cbiAgaWYgeSA+IHggfHwgKG5vdChzaWduX2JpdCB5KSAmJiBzaWduX2JpdCB4KSB0aGVuXG4gICAgaWYgaXNfbmFuIHggdGhlbiB5IGVsc2UgeFxuICBlbHNlIGlmIGlzX25hbiB5IHRoZW4geCBlbHNlIHlcblxubGV0W0BpbmxpbmVdIG1heF9udW0gKHg6IGZsb2F0KSAoeTogZmxvYXQpID1cbiAgaWYgeSA+IHggfHwgKG5vdChzaWduX2JpdCB5KSAmJiBzaWduX2JpdCB4KSB0aGVuXG4gICAgaWYgaXNfbmFuIHkgdGhlbiB4IGVsc2UgeVxuICBlbHNlIGlmIGlzX25hbiB4IHRoZW4geSBlbHNlIHhcblxubGV0W0BpbmxpbmVdIG1pbl9tYXhfbnVtICh4OiBmbG9hdCkgKHk6IGZsb2F0KSA9XG4gIGlmIGlzX25hbiB4IHRoZW4gKHkseSlcbiAgZWxzZSBpZiBpc19uYW4geSB0aGVuICh4LHgpXG4gIGVsc2UgaWYgeSA+IHggfHwgKG5vdChzaWduX2JpdCB5KSAmJiBzaWduX2JpdCB4KSB0aGVuICh4LHkpIGVsc2UgKHkseClcblxuZXh0ZXJuYWwgc2VlZGVkX2hhc2hfcGFyYW0gOiBpbnQgLT4gaW50IC0+IGludCAtPiBmbG9hdCAtPiBpbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX2hhc2hcIiBbQEBub2FsbG9jXVxubGV0IGhhc2ggeCA9IHNlZWRlZF9oYXNoX3BhcmFtIDEwIDEwMCAwIHhcblxubW9kdWxlIEFycmF5ID0gc3RydWN0XG5cbiAgdHlwZSB0ID0gZmxvYXRhcnJheVxuXG4gIGV4dGVybmFsIGxlbmd0aCA6IHQgLT4gaW50ID0gXCIlZmxvYXRhcnJheV9sZW5ndGhcIlxuICBleHRlcm5hbCBnZXQgOiB0IC0+IGludCAtPiBmbG9hdCA9IFwiJWZsb2F0YXJyYXlfc2FmZV9nZXRcIlxuICBleHRlcm5hbCBzZXQgOiB0IC0+IGludCAtPiBmbG9hdCAtPiB1bml0ID0gXCIlZmxvYXRhcnJheV9zYWZlX3NldFwiXG4gIGV4dGVybmFsIGNyZWF0ZSA6IGludCAtPiB0ID0gXCJjYW1sX2Zsb2F0YXJyYXlfY3JlYXRlXCJcbiAgZXh0ZXJuYWwgdW5zYWZlX2dldCA6IHQgLT4gaW50IC0+IGZsb2F0ID0gXCIlZmxvYXRhcnJheV91bnNhZmVfZ2V0XCJcbiAgZXh0ZXJuYWwgdW5zYWZlX3NldCA6IHQgLT4gaW50IC0+IGZsb2F0IC0+IHVuaXQgPSBcIiVmbG9hdGFycmF5X3Vuc2FmZV9zZXRcIlxuXG4gIGxldCB1bnNhZmVfZmlsbCBhIG9mcyBsZW4gdiA9XG4gICAgZm9yIGkgPSBvZnMgdG8gb2ZzICsgbGVuIC0gMSBkbyB1bnNhZmVfc2V0IGEgaSB2IGRvbmVcblxuICBleHRlcm5hbCB1bnNhZmVfYmxpdDogdCAtPiBpbnQgLT4gdCAtPiBpbnQgLT4gaW50IC0+IHVuaXQgPVxuICAgIFwiY2FtbF9mbG9hdGFycmF5X2JsaXRcIiBbQEBub2FsbG9jXVxuXG4gIGxldCBjaGVjayBhIG9mcyBsZW4gbXNnID1cbiAgICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzICsgbGVuIDwgMCB8fCBvZnMgKyBsZW4gPiBsZW5ndGggYSB0aGVuXG4gICAgICBpbnZhbGlkX2FyZyBtc2dcblxuICBsZXQgbWFrZSBuIHYgPVxuICAgIGxldCByZXN1bHQgPSBjcmVhdGUgbiBpblxuICAgIHVuc2FmZV9maWxsIHJlc3VsdCAwIG4gdjtcbiAgICByZXN1bHRcblxuICBsZXQgaW5pdCBsIGYgPVxuICAgIGlmIGwgPCAwIHRoZW4gaW52YWxpZF9hcmcgXCJGbG9hdC5BcnJheS5pbml0XCJcbiAgICBlbHNlXG4gICAgICBsZXQgcmVzID0gY3JlYXRlIGwgaW5cbiAgICAgIGZvciBpID0gMCB0byBsIC0gMSBkb1xuICAgICAgICB1bnNhZmVfc2V0IHJlcyBpIChmIGkpXG4gICAgICBkb25lO1xuICAgICAgcmVzXG5cbiAgbGV0IGFwcGVuZCBhMSBhMiA9XG4gICAgbGV0IGwxID0gbGVuZ3RoIGExIGluXG4gICAgbGV0IGwyID0gbGVuZ3RoIGEyIGluXG4gICAgbGV0IHJlc3VsdCA9IGNyZWF0ZSAobDEgKyBsMikgaW5cbiAgICB1bnNhZmVfYmxpdCBhMSAwIHJlc3VsdCAwIGwxO1xuICAgIHVuc2FmZV9ibGl0IGEyIDAgcmVzdWx0IGwxIGwyO1xuICAgIHJlc3VsdFxuXG4gICgqIG5leHQgMyBmdW5jdGlvbnM6IG1vZGlmaWVkIGNvcHkgb2YgY29kZSBmcm9tIHN0cmluZy5tbCAqKVxuICBsZXQgZW5zdXJlX2dlICh4OmludCkgeSA9XG4gICAgaWYgeCA+PSB5IHRoZW4geCBlbHNlIGludmFsaWRfYXJnIFwiRmxvYXQuQXJyYXkuY29uY2F0XCJcblxuICBsZXQgcmVjIHN1bV9sZW5ndGhzIGFjYyA9IGZ1bmN0aW9uXG4gICAgfCBbXSAtPiBhY2NcbiAgICB8IGhkIDo6IHRsIC0+IHN1bV9sZW5ndGhzIChlbnN1cmVfZ2UgKGxlbmd0aCBoZCArIGFjYykgYWNjKSB0bFxuXG4gIGxldCBjb25jYXQgbCA9XG4gICAgbGV0IGxlbiA9IHN1bV9sZW5ndGhzIDAgbCBpblxuICAgIGxldCByZXN1bHQgPSBjcmVhdGUgbGVuIGluXG4gICAgbGV0IHJlYyBsb29wIGwgaSA9XG4gICAgICBtYXRjaCBsIHdpdGhcbiAgICAgIHwgW10gLT4gYXNzZXJ0IChpID0gbGVuKVxuICAgICAgfCBoZCA6OiB0bCAtPlxuICAgICAgICBsZXQgaGxlbiA9IGxlbmd0aCBoZCBpblxuICAgICAgICB1bnNhZmVfYmxpdCBoZCAwIHJlc3VsdCBpIGhsZW47XG4gICAgICAgIGxvb3AgdGwgKGkgKyBobGVuKVxuICAgIGluXG4gICAgbG9vcCBsIDA7XG4gICAgcmVzdWx0XG5cbiAgbGV0IHN1YiBhIG9mcyBsZW4gPVxuICAgIGNoZWNrIGEgb2ZzIGxlbiBcIkZsb2F0LkFycmF5LnN1YlwiO1xuICAgIGxldCByZXN1bHQgPSBjcmVhdGUgbGVuIGluXG4gICAgdW5zYWZlX2JsaXQgYSBvZnMgcmVzdWx0IDAgbGVuO1xuICAgIHJlc3VsdFxuXG4gIGxldCBjb3B5IGEgPVxuICAgIGxldCBsID0gbGVuZ3RoIGEgaW5cbiAgICBsZXQgcmVzdWx0ID0gY3JlYXRlIGwgaW5cbiAgICB1bnNhZmVfYmxpdCBhIDAgcmVzdWx0IDAgbDtcbiAgICByZXN1bHRcblxuICBsZXQgZmlsbCBhIG9mcyBsZW4gdiA9XG4gICAgY2hlY2sgYSBvZnMgbGVuIFwiRmxvYXQuQXJyYXkuZmlsbFwiO1xuICAgIHVuc2FmZV9maWxsIGEgb2ZzIGxlbiB2XG5cbiAgbGV0IGJsaXQgc3JjIHNvZnMgZHN0IGRvZnMgbGVuID1cbiAgICBjaGVjayBzcmMgc29mcyBsZW4gXCJGbG9hdC5hcnJheS5ibGl0XCI7XG4gICAgY2hlY2sgZHN0IGRvZnMgbGVuIFwiRmxvYXQuYXJyYXkuYmxpdFwiO1xuICAgIHVuc2FmZV9ibGl0IHNyYyBzb2ZzIGRzdCBkb2ZzIGxlblxuXG4gIGxldCB0b19saXN0IGEgPVxuICAgIExpc3QuaW5pdCAobGVuZ3RoIGEpICh1bnNhZmVfZ2V0IGEpXG5cbiAgbGV0IG9mX2xpc3QgbCA9XG4gICAgbGV0IHJlc3VsdCA9IGNyZWF0ZSAoTGlzdC5sZW5ndGggbCkgaW5cbiAgICBsZXQgcmVjIGZpbGwgaSBsID1cbiAgICAgIG1hdGNoIGwgd2l0aFxuICAgICAgfCBbXSAtPiByZXN1bHRcbiAgICAgIHwgaCA6OiB0IC0+IHVuc2FmZV9zZXQgcmVzdWx0IGkgaDsgZmlsbCAoaSArIDEpIHRcbiAgICBpblxuICAgIGZpbGwgMCBsXG5cbiAgKCogZHVwbGljYXRlZCBmcm9tIGFycmF5Lm1sICopXG4gIGxldCBpdGVyIGYgYSA9XG4gICAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkbyBmICh1bnNhZmVfZ2V0IGEgaSkgZG9uZVxuXG4gICgqIGR1cGxpY2F0ZWQgZnJvbSBhcnJheS5tbCAqKVxuICBsZXQgaXRlcjIgZiBhIGIgPVxuICAgIGlmIGxlbmd0aCBhIDw+IGxlbmd0aCBiIHRoZW5cbiAgICAgIGludmFsaWRfYXJnIFwiRmxvYXQuQXJyYXkuaXRlcjI6IGFycmF5cyBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoXCJcbiAgICBlbHNlXG4gICAgICBmb3IgaSA9IDAgdG8gbGVuZ3RoIGEgLSAxIGRvIGYgKHVuc2FmZV9nZXQgYSBpKSAodW5zYWZlX2dldCBiIGkpIGRvbmVcblxuICBsZXQgbWFwIGYgYSA9XG4gICAgbGV0IGwgPSBsZW5ndGggYSBpblxuICAgIGxldCByID0gY3JlYXRlIGwgaW5cbiAgICBmb3IgaSA9IDAgdG8gbCAtIDEgZG9cbiAgICAgIHVuc2FmZV9zZXQgciBpIChmICh1bnNhZmVfZ2V0IGEgaSkpXG4gICAgZG9uZTtcbiAgICByXG5cbiAgbGV0IG1hcDIgZiBhIGIgPVxuICAgIGxldCBsYSA9IGxlbmd0aCBhIGluXG4gICAgbGV0IGxiID0gbGVuZ3RoIGIgaW5cbiAgICBpZiBsYSA8PiBsYiB0aGVuXG4gICAgICBpbnZhbGlkX2FyZyBcIkZsb2F0LkFycmF5Lm1hcDI6IGFycmF5cyBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoXCJcbiAgICBlbHNlIGJlZ2luXG4gICAgICBsZXQgciA9IGNyZWF0ZSBsYSBpblxuICAgICAgZm9yIGkgPSAwIHRvIGxhIC0gMSBkb1xuICAgICAgICB1bnNhZmVfc2V0IHIgaSAoZiAodW5zYWZlX2dldCBhIGkpICh1bnNhZmVfZ2V0IGIgaSkpXG4gICAgICBkb25lO1xuICAgICAgclxuICAgIGVuZFxuXG4gICgqIGR1cGxpY2F0ZWQgZnJvbSBhcnJheS5tbCAqKVxuICBsZXQgaXRlcmkgZiBhID1cbiAgICBmb3IgaSA9IDAgdG8gbGVuZ3RoIGEgLSAxIGRvIGYgaSAodW5zYWZlX2dldCBhIGkpIGRvbmVcblxuICBsZXQgbWFwaSBmIGEgPVxuICAgIGxldCBsID0gbGVuZ3RoIGEgaW5cbiAgICBsZXQgciA9IGNyZWF0ZSBsIGluXG4gICAgZm9yIGkgPSAwIHRvIGwgLSAxIGRvXG4gICAgICB1bnNhZmVfc2V0IHIgaSAoZiBpICh1bnNhZmVfZ2V0IGEgaSkpXG4gICAgZG9uZTtcbiAgICByXG5cbiAgKCogZHVwbGljYXRlZCBmcm9tIGFycmF5Lm1sICopXG4gIGxldCBmb2xkX2xlZnQgZiB4IGEgPVxuICAgIGxldCByID0gcmVmIHggaW5cbiAgICBmb3IgaSA9IDAgdG8gbGVuZ3RoIGEgLSAxIGRvXG4gICAgICByIDo9IGYgIXIgKHVuc2FmZV9nZXQgYSBpKVxuICAgIGRvbmU7XG4gICAgIXJcblxuICAoKiBkdXBsaWNhdGVkIGZyb20gYXJyYXkubWwgKilcbiAgbGV0IGZvbGRfcmlnaHQgZiBhIHggPVxuICAgIGxldCByID0gcmVmIHggaW5cbiAgICBmb3IgaSA9IGxlbmd0aCBhIC0gMSBkb3dudG8gMCBkb1xuICAgICAgciA6PSBmICh1bnNhZmVfZ2V0IGEgaSkgIXJcbiAgICBkb25lO1xuICAgICFyXG5cbiAgKCogZHVwbGljYXRlZCBmcm9tIGFycmF5Lm1sICopXG4gIGxldCBleGlzdHMgcCBhID1cbiAgICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gICAgbGV0IHJlYyBsb29wIGkgPVxuICAgICAgaWYgaSA9IG4gdGhlbiBmYWxzZVxuICAgICAgZWxzZSBpZiBwICh1bnNhZmVfZ2V0IGEgaSkgdGhlbiB0cnVlXG4gICAgICBlbHNlIGxvb3AgKGkgKyAxKSBpblxuICAgIGxvb3AgMFxuXG4gICgqIGR1cGxpY2F0ZWQgZnJvbSBhcnJheS5tbCAqKVxuICBsZXQgZm9yX2FsbCBwIGEgPVxuICAgIGxldCBuID0gbGVuZ3RoIGEgaW5cbiAgICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgICBpZiBpID0gbiB0aGVuIHRydWVcbiAgICAgIGVsc2UgaWYgcCAodW5zYWZlX2dldCBhIGkpIHRoZW4gbG9vcCAoaSArIDEpXG4gICAgICBlbHNlIGZhbHNlIGluXG4gICAgbG9vcCAwXG5cbiAgKCogZHVwbGljYXRlZCBmcm9tIGFycmF5Lm1sICopXG4gIGxldCBtZW0geCBhID1cbiAgICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gICAgbGV0IHJlYyBsb29wIGkgPVxuICAgICAgaWYgaSA9IG4gdGhlbiBmYWxzZVxuICAgICAgZWxzZSBpZiBjb21wYXJlICh1bnNhZmVfZ2V0IGEgaSkgeCA9IDAgdGhlbiB0cnVlXG4gICAgICBlbHNlIGxvb3AgKGkgKyAxKVxuICAgIGluXG4gICAgbG9vcCAwXG5cbiAgKCogbW9zdGx5IGR1cGxpY2F0ZWQgZnJvbSBhcnJheS5tbCwgYnV0IHNsaWdodGx5IGRpZmZlcmVudCAqKVxuICBsZXQgbWVtX2llZWUgeCBhID1cbiAgICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gICAgbGV0IHJlYyBsb29wIGkgPVxuICAgICAgaWYgaSA9IG4gdGhlbiBmYWxzZVxuICAgICAgZWxzZSBpZiB4ID0gKHVuc2FmZV9nZXQgYSBpKSB0aGVuIHRydWVcbiAgICAgIGVsc2UgbG9vcCAoaSArIDEpXG4gICAgaW5cbiAgICBsb29wIDBcblxuICAoKiBkdXBsaWNhdGVkIGZyb20gYXJyYXkubWwgKilcbiAgZXhjZXB0aW9uIEJvdHRvbSBvZiBpbnRcbiAgbGV0IHNvcnQgY21wIGEgPVxuICAgIGxldCBtYXhzb24gbCBpID1cbiAgICAgIGxldCBpMzEgPSBpK2kraSsxIGluXG4gICAgICBsZXQgeCA9IHJlZiBpMzEgaW5cbiAgICAgIGlmIGkzMSsyIDwgbCB0aGVuIGJlZ2luXG4gICAgICAgIGlmIGNtcCAoZ2V0IGEgaTMxKSAoZ2V0IGEgKGkzMSsxKSkgPCAwIHRoZW4geCA6PSBpMzErMTtcbiAgICAgICAgaWYgY21wIChnZXQgYSAheCkgKGdldCBhIChpMzErMikpIDwgMCB0aGVuIHggOj0gaTMxKzI7XG4gICAgICAgICF4XG4gICAgICBlbmQgZWxzZVxuICAgICAgICBpZiBpMzErMSA8IGwgJiYgY21wIChnZXQgYSBpMzEpIChnZXQgYSAoaTMxKzEpKSA8IDBcbiAgICAgICAgdGhlbiBpMzErMVxuICAgICAgICBlbHNlIGlmIGkzMSA8IGwgdGhlbiBpMzEgZWxzZSByYWlzZSAoQm90dG9tIGkpXG4gICAgaW5cbiAgICBsZXQgcmVjIHRyaWNrbGVkb3duIGwgaSBlID1cbiAgICAgIGxldCBqID0gbWF4c29uIGwgaSBpblxuICAgICAgaWYgY21wIChnZXQgYSBqKSBlID4gMCB0aGVuIGJlZ2luXG4gICAgICAgIHNldCBhIGkgKGdldCBhIGopO1xuICAgICAgICB0cmlja2xlZG93biBsIGogZTtcbiAgICAgIGVuZCBlbHNlIGJlZ2luXG4gICAgICAgIHNldCBhIGkgZTtcbiAgICAgIGVuZDtcbiAgICBpblxuICAgIGxldCB0cmlja2xlIGwgaSBlID0gdHJ5IHRyaWNrbGVkb3duIGwgaSBlIHdpdGggQm90dG9tIGkgLT4gc2V0IGEgaSBlIGluXG4gICAgbGV0IHJlYyBidWJibGVkb3duIGwgaSA9XG4gICAgICBsZXQgaiA9IG1heHNvbiBsIGkgaW5cbiAgICAgIHNldCBhIGkgKGdldCBhIGopO1xuICAgICAgYnViYmxlZG93biBsIGpcbiAgICBpblxuICAgIGxldCBidWJibGUgbCBpID0gdHJ5IGJ1YmJsZWRvd24gbCBpIHdpdGggQm90dG9tIGkgLT4gaSBpblxuICAgIGxldCByZWMgdHJpY2tsZXVwIGkgZSA9XG4gICAgICBsZXQgZmF0aGVyID0gKGkgLSAxKSAvIDMgaW5cbiAgICAgIGFzc2VydCAoaSA8PiBmYXRoZXIpO1xuICAgICAgaWYgY21wIChnZXQgYSBmYXRoZXIpIGUgPCAwIHRoZW4gYmVnaW5cbiAgICAgICAgc2V0IGEgaSAoZ2V0IGEgZmF0aGVyKTtcbiAgICAgICAgaWYgZmF0aGVyID4gMCB0aGVuIHRyaWNrbGV1cCBmYXRoZXIgZSBlbHNlIHNldCBhIDAgZTtcbiAgICAgIGVuZCBlbHNlIGJlZ2luXG4gICAgICAgIHNldCBhIGkgZTtcbiAgICAgIGVuZDtcbiAgICBpblxuICAgIGxldCBsID0gbGVuZ3RoIGEgaW5cbiAgICBmb3IgaSA9IChsICsgMSkgLyAzIC0gMSBkb3dudG8gMCBkbyB0cmlja2xlIGwgaSAoZ2V0IGEgaSk7IGRvbmU7XG4gICAgZm9yIGkgPSBsIC0gMSBkb3dudG8gMiBkb1xuICAgICAgbGV0IGUgPSAoZ2V0IGEgaSkgaW5cbiAgICAgIHNldCBhIGkgKGdldCBhIDApO1xuICAgICAgdHJpY2tsZXVwIChidWJibGUgaSAwKSBlO1xuICAgIGRvbmU7XG4gICAgaWYgbCA+IDEgdGhlbiAobGV0IGUgPSAoZ2V0IGEgMSkgaW4gc2V0IGEgMSAoZ2V0IGEgMCk7IHNldCBhIDAgZSlcblxuICAoKiBkdXBsaWNhdGVkIGZyb20gYXJyYXkubWwsIGV4Y2VwdCBmb3IgdGhlIGNhbGwgdG8gW2NyZWF0ZV0gKilcbiAgbGV0IGN1dG9mZiA9IDVcbiAgbGV0IHN0YWJsZV9zb3J0IGNtcCBhID1cbiAgICBsZXQgbWVyZ2Ugc3JjMW9mcyBzcmMxbGVuIHNyYzIgc3JjMm9mcyBzcmMybGVuIGRzdCBkc3RvZnMgPVxuICAgICAgbGV0IHNyYzFyID0gc3JjMW9mcyArIHNyYzFsZW4gYW5kIHNyYzJyID0gc3JjMm9mcyArIHNyYzJsZW4gaW5cbiAgICAgIGxldCByZWMgbG9vcCBpMSBzMSBpMiBzMiBkID1cbiAgICAgICAgaWYgY21wIHMxIHMyIDw9IDAgdGhlbiBiZWdpblxuICAgICAgICAgIHNldCBkc3QgZCBzMTtcbiAgICAgICAgICBsZXQgaTEgPSBpMSArIDEgaW5cbiAgICAgICAgICBpZiBpMSA8IHNyYzFyIHRoZW5cbiAgICAgICAgICAgIGxvb3AgaTEgKGdldCBhIGkxKSBpMiBzMiAoZCArIDEpXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgYmxpdCBzcmMyIGkyIGRzdCAoZCArIDEpIChzcmMyciAtIGkyKVxuICAgICAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgICAgIHNldCBkc3QgZCBzMjtcbiAgICAgICAgICBsZXQgaTIgPSBpMiArIDEgaW5cbiAgICAgICAgICBpZiBpMiA8IHNyYzJyIHRoZW5cbiAgICAgICAgICAgIGxvb3AgaTEgczEgaTIgKGdldCBzcmMyIGkyKSAoZCArIDEpXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgYmxpdCBhIGkxIGRzdCAoZCArIDEpIChzcmMxciAtIGkxKVxuICAgICAgICBlbmRcbiAgICAgIGluIGxvb3Agc3JjMW9mcyAoZ2V0IGEgc3JjMW9mcykgc3JjMm9mcyAoZ2V0IHNyYzIgc3JjMm9mcykgZHN0b2ZzO1xuICAgIGluXG4gICAgbGV0IGlzb3J0dG8gc3Jjb2ZzIGRzdCBkc3RvZnMgbGVuID1cbiAgICAgIGZvciBpID0gMCB0byBsZW4gLSAxIGRvXG4gICAgICAgIGxldCBlID0gKGdldCBhIChzcmNvZnMgKyBpKSkgaW5cbiAgICAgICAgbGV0IGogPSByZWYgKGRzdG9mcyArIGkgLSAxKSBpblxuICAgICAgICB3aGlsZSAoIWogPj0gZHN0b2ZzICYmIGNtcCAoZ2V0IGRzdCAhaikgZSA+IDApIGRvXG4gICAgICAgICAgc2V0IGRzdCAoIWogKyAxKSAoZ2V0IGRzdCAhaik7XG4gICAgICAgICAgZGVjciBqO1xuICAgICAgICBkb25lO1xuICAgICAgICBzZXQgZHN0ICghaiArIDEpIGU7XG4gICAgICBkb25lO1xuICAgIGluXG4gICAgbGV0IHJlYyBzb3J0dG8gc3Jjb2ZzIGRzdCBkc3RvZnMgbGVuID1cbiAgICAgIGlmIGxlbiA8PSBjdXRvZmYgdGhlbiBpc29ydHRvIHNyY29mcyBkc3QgZHN0b2ZzIGxlbiBlbHNlIGJlZ2luXG4gICAgICAgIGxldCBsMSA9IGxlbiAvIDIgaW5cbiAgICAgICAgbGV0IGwyID0gbGVuIC0gbDEgaW5cbiAgICAgICAgc29ydHRvIChzcmNvZnMgKyBsMSkgZHN0IChkc3RvZnMgKyBsMSkgbDI7XG4gICAgICAgIHNvcnR0byBzcmNvZnMgYSAoc3Jjb2ZzICsgbDIpIGwxO1xuICAgICAgICBtZXJnZSAoc3Jjb2ZzICsgbDIpIGwxIGRzdCAoZHN0b2ZzICsgbDEpIGwyIGRzdCBkc3RvZnM7XG4gICAgICBlbmQ7XG4gICAgaW5cbiAgICBsZXQgbCA9IGxlbmd0aCBhIGluXG4gICAgaWYgbCA8PSBjdXRvZmYgdGhlbiBpc29ydHRvIDAgYSAwIGwgZWxzZSBiZWdpblxuICAgICAgbGV0IGwxID0gbCAvIDIgaW5cbiAgICAgIGxldCBsMiA9IGwgLSBsMSBpblxuICAgICAgbGV0IHQgPSBjcmVhdGUgbDIgaW5cbiAgICAgIHNvcnR0byBsMSB0IDAgbDI7XG4gICAgICBzb3J0dG8gMCBhIGwyIGwxO1xuICAgICAgbWVyZ2UgbDIgbDEgdCAwIGwyIGEgMDtcbiAgICBlbmRcblxuICBsZXQgZmFzdF9zb3J0ID0gc3RhYmxlX3NvcnRcblxuICAoKiBkdXBsaWNhdGVkIGZyb20gYXJyYXkubWwgKilcbiAgbGV0IHRvX3NlcSBhID1cbiAgICBsZXQgcmVjIGF1eCBpICgpID1cbiAgICAgIGlmIGkgPCBsZW5ndGggYVxuICAgICAgdGhlblxuICAgICAgICBsZXQgeCA9IHVuc2FmZV9nZXQgYSBpIGluXG4gICAgICAgIFNlcS5Db25zICh4LCBhdXggKGkrMSkpXG4gICAgICBlbHNlIFNlcS5OaWxcbiAgICBpblxuICAgIGF1eCAwXG5cbiAgKCogZHVwbGljYXRlZCBmcm9tIGFycmF5Lm1sICopXG4gIGxldCB0b19zZXFpIGEgPVxuICAgIGxldCByZWMgYXV4IGkgKCkgPVxuICAgICAgaWYgaSA8IGxlbmd0aCBhXG4gICAgICB0aGVuXG4gICAgICAgIGxldCB4ID0gdW5zYWZlX2dldCBhIGkgaW5cbiAgICAgICAgU2VxLkNvbnMgKChpLHgpLCBhdXggKGkrMSkpXG4gICAgICBlbHNlIFNlcS5OaWxcbiAgICBpblxuICAgIGF1eCAwXG5cbiAgKCogbW9zdGx5IGR1cGxpY2F0ZWQgZnJvbSBhcnJheS5tbCAqKVxuICBsZXQgb2ZfcmV2X2xpc3QgbCA9XG4gICAgbGV0IGxlbiA9IExpc3QubGVuZ3RoIGwgaW5cbiAgICBsZXQgYSA9IGNyZWF0ZSBsZW4gaW5cbiAgICBsZXQgcmVjIGZpbGwgaSA9IGZ1bmN0aW9uXG4gICAgICAgIFtdIC0+IGFcbiAgICAgIHwgaGQ6OnRsIC0+IHVuc2FmZV9zZXQgYSBpIGhkOyBmaWxsIChpLTEpIHRsXG4gICAgaW5cbiAgICBmaWxsIChsZW4tMSkgbFxuXG4gICgqIGR1cGxpY2F0ZWQgZnJvbSBhcnJheS5tbCAqKVxuICBsZXQgb2Zfc2VxIGkgPVxuICAgIGxldCBsID0gU2VxLmZvbGRfbGVmdCAoZnVuIGFjYyB4IC0+IHg6OmFjYykgW10gaSBpblxuICAgIG9mX3Jldl9saXN0IGxcblxuXG4gIGxldCBtYXBfdG9fYXJyYXkgZiBhID1cbiAgICBsZXQgbCA9IGxlbmd0aCBhIGluXG4gICAgaWYgbCA9IDAgdGhlbiBbfCB8XSBlbHNlIGJlZ2luXG4gICAgICBsZXQgciA9IEFycmF5Lm1ha2UgbCAoZiAodW5zYWZlX2dldCBhIDApKSBpblxuICAgICAgZm9yIGkgPSAxIHRvIGwgLSAxIGRvXG4gICAgICAgIEFycmF5LnVuc2FmZV9zZXQgciBpIChmICh1bnNhZmVfZ2V0IGEgaSkpXG4gICAgICBkb25lO1xuICAgICAgclxuICAgIGVuZFxuXG4gIGxldCBtYXBfZnJvbV9hcnJheSBmIGEgPVxuICAgIGxldCBsID0gQXJyYXkubGVuZ3RoIGEgaW5cbiAgICBsZXQgciA9IGNyZWF0ZSBsIGluXG4gICAgZm9yIGkgPSAwIHRvIGwgLSAxIGRvXG4gICAgICB1bnNhZmVfc2V0IHIgaSAoZiAoQXJyYXkudW5zYWZlX2dldCBhIGkpKVxuICAgIGRvbmU7XG4gICAgclxuXG5lbmRcblxubW9kdWxlIEFycmF5TGFiZWxzID0gQXJyYXlcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgRGFtaWVuIERvbGlnZXosIHByb2pldCBQYXJhLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogUHNldWRvLXJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yXG4gICBUaGlzIGlzIGEgbGFnZ2VkLUZpYm9uYWNjaSBGKDU1LCAyNCwgKykgd2l0aCBhIG1vZGlmaWVkIGFkZGl0aW9uXG4gICBmdW5jdGlvbiB0byBlbmhhbmNlIHRoZSBtaXhpbmcgb2YgYml0cy5cbiAgIElmIHdlIHVzZSBub3JtYWwgYWRkaXRpb24sIHRoZSBsb3ctb3JkZXIgYml0IGZhaWxzIHRlc3RzIDEgYW5kIDdcbiAgIG9mIHRoZSBEaWVoYXJkIHRlc3Qgc3VpdGUsIGFuZCBiaXRzIDEgYW5kIDIgYWxzbyBmYWlsIHRlc3QgNy5cbiAgIElmIHdlIHVzZSBtdWx0aXBsaWNhdGlvbiBhcyBzdWdnZXN0ZWQgYnkgTWFyc2FnbGlhLCBpdCBkb2Vzbid0IGZhcmVcbiAgIG11Y2ggYmV0dGVyLlxuICAgQnkgbWl4aW5nIHRoZSBiaXRzIG9mIG9uZSBvZiB0aGUgbnVtYmVycyBiZWZvcmUgYWRkaXRpb24gKFhPUiB0aGVcbiAgIDUgaGlnaC1vcmRlciBiaXRzIGludG8gdGhlIGxvdy1vcmRlciBiaXRzKSwgd2UgZ2V0IGEgZ2VuZXJhdG9yIHRoYXRcbiAgIHBhc3NlcyBhbGwgdGhlIERpZWhhcmQgdGVzdHMuXG4qKVxuXG5leHRlcm5hbCByYW5kb21fc2VlZDogdW5pdCAtPiBpbnQgYXJyYXkgPSBcImNhbWxfc3lzX3JhbmRvbV9zZWVkXCJcblxubW9kdWxlIFN0YXRlID0gc3RydWN0XG5cbiAgdHlwZSB0ID0geyBzdCA6IGludCBhcnJheTsgbXV0YWJsZSBpZHggOiBpbnQgfVxuXG4gIGxldCBuZXdfc3RhdGUgKCkgPSB7IHN0ID0gQXJyYXkubWFrZSA1NSAwOyBpZHggPSAwIH1cbiAgbGV0IGFzc2lnbiBzdDEgc3QyID1cbiAgICBBcnJheS5ibGl0IHN0Mi5zdCAwIHN0MS5zdCAwIDU1O1xuICAgIHN0MS5pZHggPC0gc3QyLmlkeFxuXG5cbiAgbGV0IGZ1bGxfaW5pdCBzIHNlZWQgPVxuICAgIGxldCBjb21iaW5lIGFjY3UgeCA9IERpZ2VzdC5zdHJpbmcgKGFjY3UgXiBJbnQudG9fc3RyaW5nIHgpIGluXG4gICAgbGV0IGV4dHJhY3QgZCA9XG4gICAgICBDaGFyLmNvZGUgZC5bMF0gKyAoQ2hhci5jb2RlIGQuWzFdIGxzbCA4KSArIChDaGFyLmNvZGUgZC5bMl0gbHNsIDE2KVxuICAgICAgKyAoQ2hhci5jb2RlIGQuWzNdIGxzbCAyNClcbiAgICBpblxuICAgIGxldCBzZWVkID0gaWYgQXJyYXkubGVuZ3RoIHNlZWQgPSAwIHRoZW4gW3wgMCB8XSBlbHNlIHNlZWQgaW5cbiAgICBsZXQgbCA9IEFycmF5Lmxlbmd0aCBzZWVkIGluXG4gICAgZm9yIGkgPSAwIHRvIDU0IGRvXG4gICAgICBzLnN0LihpKSA8LSBpO1xuICAgIGRvbmU7XG4gICAgbGV0IGFjY3UgPSByZWYgXCJ4XCIgaW5cbiAgICBmb3IgaSA9IDAgdG8gNTQgKyBJbnQubWF4IDU1IGwgZG9cbiAgICAgIGxldCBqID0gaSBtb2QgNTUgaW5cbiAgICAgIGxldCBrID0gaSBtb2QgbCBpblxuICAgICAgYWNjdSA6PSBjb21iaW5lICFhY2N1IHNlZWQuKGspO1xuICAgICAgcy5zdC4oaikgPC0gKHMuc3QuKGopIGx4b3IgZXh0cmFjdCAhYWNjdSkgbGFuZCAweDNGRkZGRkZGOyAgKCogUFIjNTU3NSAqKVxuICAgIGRvbmU7XG4gICAgcy5pZHggPC0gMFxuXG5cbiAgbGV0IG1ha2Ugc2VlZCA9XG4gICAgbGV0IHJlc3VsdCA9IG5ld19zdGF0ZSAoKSBpblxuICAgIGZ1bGxfaW5pdCByZXN1bHQgc2VlZDtcbiAgICByZXN1bHRcblxuXG4gIGxldCBtYWtlX3NlbGZfaW5pdCAoKSA9IG1ha2UgKHJhbmRvbV9zZWVkICgpKVxuXG4gIGxldCBjb3B5IHMgPVxuICAgIGxldCByZXN1bHQgPSBuZXdfc3RhdGUgKCkgaW5cbiAgICBhc3NpZ24gcmVzdWx0IHM7XG4gICAgcmVzdWx0XG5cblxuICAoKiBSZXR1cm5zIDMwIHJhbmRvbSBiaXRzIGFzIGFuIGludGVnZXIgMCA8PSB4IDwgMTA3Mzc0MTgyNCAqKVxuICBsZXQgYml0cyBzID1cbiAgICBzLmlkeCA8LSAocy5pZHggKyAxKSBtb2QgNTU7XG4gICAgbGV0IGN1cnZhbCA9IHMuc3QuKHMuaWR4KSBpblxuICAgIGxldCBuZXd2YWwgPSBzLnN0Ligocy5pZHggKyAyNCkgbW9kIDU1KVxuICAgICAgICAgICAgICAgICArIChjdXJ2YWwgbHhvciAoKGN1cnZhbCBsc3IgMjUpIGxhbmQgMHgxRikpIGluXG4gICAgbGV0IG5ld3ZhbDMwID0gbmV3dmFsIGxhbmQgMHgzRkZGRkZGRiBpbiAgKCogUFIjNTU3NSAqKVxuICAgIHMuc3QuKHMuaWR4KSA8LSBuZXd2YWwzMDtcbiAgICBuZXd2YWwzMFxuXG5cbiAgbGV0IHJlYyBpbnRhdXggcyBuID1cbiAgICBsZXQgciA9IGJpdHMgcyBpblxuICAgIGxldCB2ID0gciBtb2QgbiBpblxuICAgIGlmIHIgLSB2ID4gMHgzRkZGRkZGRiAtIG4gKyAxIHRoZW4gaW50YXV4IHMgbiBlbHNlIHZcblxuICBsZXQgaW50IHMgYm91bmQgPVxuICAgIGlmIGJvdW5kID4gMHgzRkZGRkZGRiB8fCBib3VuZCA8PSAwXG4gICAgdGhlbiBpbnZhbGlkX2FyZyBcIlJhbmRvbS5pbnRcIlxuICAgIGVsc2UgaW50YXV4IHMgYm91bmRcblxuICBsZXQgcmVjIGludDYzYXV4IHMgbiA9XG4gICAgbGV0IG1heF9pbnRfMzIgPSAoMSBsc2wgMzApICsgMHgzRkZGRkZGRiBpbiAoKiAweDdGRkZGRkZGICopXG4gICAgbGV0IGIxID0gYml0cyBzIGluXG4gICAgbGV0IGIyID0gYml0cyBzIGluXG4gICAgbGV0IChyLCBtYXhfaW50KSA9XG4gICAgICBpZiBuIDw9IG1heF9pbnRfMzIgdGhlblxuICAgICAgICAoKiAzMSByYW5kb20gYml0cyBvbiBib3RoIDY0LWJpdCBPQ2FtbCBhbmQgSmF2YVNjcmlwdC5cbiAgICAgICAgICAgVXNlIHVwcGVyIDE1IGJpdHMgb2YgYjEgYW5kIDE2IGJpdHMgb2YgYjIuICopXG4gICAgICAgIGxldCBicG9zID1cbiAgICAgICAgICAoKChiMiBsYW5kIDB4M0ZGRkMwMDApIGxzbCAxKSBsb3IgKGIxIGxzciAxNSkpXG4gICAgICAgIGluXG4gICAgICAgICAgKGJwb3MsIG1heF9pbnRfMzIpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBiMyA9IGJpdHMgcyBpblxuICAgICAgICAoKiA2MiByYW5kb20gYml0cyBvbiA2NC1iaXQgT0NhbWw7IHVucmVhY2hhYmxlIG9uIEphdmFTY3JpcHQuXG4gICAgICAgICAgIFVzZSB1cHBlciAyMCBiaXRzIG9mIGIxIGFuZCAyMSBiaXRzIG9mIGIyIGFuZCBiMy4gKilcbiAgICAgICAgbGV0IGJwb3MgPVxuICAgICAgICAgICgoKChiMyBsYW5kIDB4M0ZGRkZFMDApIGxzbCAxMikgbG9yIChiMiBsc3IgOSkpIGxzbCAyMClcbiAgICAgICAgICAgIGxvciAoYjEgbHNyIDEwKVxuICAgICAgICBpblxuICAgICAgICAgIChicG9zLCBtYXhfaW50KVxuICAgIGluXG4gICAgbGV0IHYgPSByIG1vZCBuIGluXG4gICAgaWYgciAtIHYgPiBtYXhfaW50IC0gbiArIDEgdGhlbiBpbnQ2M2F1eCBzIG4gZWxzZSB2XG5cbiAgbGV0IGZ1bGxfaW50IHMgYm91bmQgPVxuICAgIGlmIGJvdW5kIDw9IDAgdGhlblxuICAgICAgaW52YWxpZF9hcmcgXCJSYW5kb20uZnVsbF9pbnRcIlxuICAgIGVsc2UgaWYgYm91bmQgPiAweDNGRkZGRkZGIHRoZW5cbiAgICAgIGludDYzYXV4IHMgYm91bmRcbiAgICBlbHNlXG4gICAgICBpbnRhdXggcyBib3VuZFxuXG5cbiAgbGV0IHJlYyBpbnQzMmF1eCBzIG4gPVxuICAgIGxldCBiMSA9IEludDMyLm9mX2ludCAoYml0cyBzKSBpblxuICAgIGxldCBiMiA9IEludDMyLnNoaWZ0X2xlZnQgKEludDMyLm9mX2ludCAoYml0cyBzIGxhbmQgMSkpIDMwIGluXG4gICAgbGV0IHIgPSBJbnQzMi5sb2dvciBiMSBiMiBpblxuICAgIGxldCB2ID0gSW50MzIucmVtIHIgbiBpblxuICAgIGlmIEludDMyLnN1YiByIHYgPiBJbnQzMi5hZGQgKEludDMyLnN1YiBJbnQzMi5tYXhfaW50IG4pIDFsXG4gICAgdGhlbiBpbnQzMmF1eCBzIG5cbiAgICBlbHNlIHZcblxuICBsZXQgaW50MzIgcyBib3VuZCA9XG4gICAgaWYgYm91bmQgPD0gMGxcbiAgICB0aGVuIGludmFsaWRfYXJnIFwiUmFuZG9tLmludDMyXCJcbiAgICBlbHNlIGludDMyYXV4IHMgYm91bmRcblxuXG4gIGxldCByZWMgaW50NjRhdXggcyBuID1cbiAgICBsZXQgYjEgPSBJbnQ2NC5vZl9pbnQgKGJpdHMgcykgaW5cbiAgICBsZXQgYjIgPSBJbnQ2NC5zaGlmdF9sZWZ0IChJbnQ2NC5vZl9pbnQgKGJpdHMgcykpIDMwIGluXG4gICAgbGV0IGIzID0gSW50NjQuc2hpZnRfbGVmdCAoSW50NjQub2ZfaW50IChiaXRzIHMgbGFuZCA3KSkgNjAgaW5cbiAgICBsZXQgciA9IEludDY0LmxvZ29yIGIxIChJbnQ2NC5sb2dvciBiMiBiMykgaW5cbiAgICBsZXQgdiA9IEludDY0LnJlbSByIG4gaW5cbiAgICBpZiBJbnQ2NC5zdWIgciB2ID4gSW50NjQuYWRkIChJbnQ2NC5zdWIgSW50NjQubWF4X2ludCBuKSAxTFxuICAgIHRoZW4gaW50NjRhdXggcyBuXG4gICAgZWxzZSB2XG5cbiAgbGV0IGludDY0IHMgYm91bmQgPVxuICAgIGlmIGJvdW5kIDw9IDBMXG4gICAgdGhlbiBpbnZhbGlkX2FyZyBcIlJhbmRvbS5pbnQ2NFwiXG4gICAgZWxzZSBpbnQ2NGF1eCBzIGJvdW5kXG5cblxuICBsZXQgbmF0aXZlaW50ID1cbiAgICBpZiBOYXRpdmVpbnQuc2l6ZSA9IDMyXG4gICAgdGhlbiBmdW4gcyBib3VuZCAtPiBOYXRpdmVpbnQub2ZfaW50MzIgKGludDMyIHMgKE5hdGl2ZWludC50b19pbnQzMiBib3VuZCkpXG4gICAgZWxzZSBmdW4gcyBib3VuZCAtPiBJbnQ2NC50b19uYXRpdmVpbnQgKGludDY0IHMgKEludDY0Lm9mX25hdGl2ZWludCBib3VuZCkpXG5cblxuICAoKiBSZXR1cm5zIGEgZmxvYXQgMCA8PSB4IDw9IDEgd2l0aCBhdCBtb3N0IDYwIGJpdHMgb2YgcHJlY2lzaW9uLiAqKVxuICBsZXQgcmF3ZmxvYXQgcyA9XG4gICAgbGV0IHNjYWxlID0gMTA3Mzc0MTgyNC4wICAoKiAyXjMwICopXG4gICAgYW5kIHIxID0gU3RkbGliLmZsb2F0IChiaXRzIHMpXG4gICAgYW5kIHIyID0gU3RkbGliLmZsb2F0IChiaXRzIHMpXG4gICAgaW4gKHIxIC8uIHNjYWxlICsuIHIyKSAvLiBzY2FsZVxuXG5cbiAgbGV0IGZsb2F0IHMgYm91bmQgPSByYXdmbG9hdCBzICouIGJvdW5kXG5cbiAgbGV0IGJvb2wgcyA9IChiaXRzIHMgbGFuZCAxID0gMClcblxuICBsZXQgYml0czMyIHMgPVxuICAgIGxldCBiMSA9IEludDMyLihzaGlmdF9yaWdodF9sb2dpY2FsIChvZl9pbnQgKGJpdHMgcykpIDE0KSBpbiAgKCogMTYgYml0cyAqKVxuICAgIGxldCBiMiA9IEludDMyLihzaGlmdF9yaWdodF9sb2dpY2FsIChvZl9pbnQgKGJpdHMgcykpIDE0KSBpbiAgKCogMTYgYml0cyAqKVxuICAgIEludDMyLihsb2dvciBiMSAoc2hpZnRfbGVmdCBiMiAxNikpXG5cbiAgbGV0IGJpdHM2NCBzID1cbiAgICBsZXQgYjEgPSBJbnQ2NC4oc2hpZnRfcmlnaHRfbG9naWNhbCAob2ZfaW50IChiaXRzIHMpKSA5KSBpbiAgKCogMjEgYml0cyAqKVxuICAgIGxldCBiMiA9IEludDY0LihzaGlmdF9yaWdodF9sb2dpY2FsIChvZl9pbnQgKGJpdHMgcykpIDkpIGluICAoKiAyMSBiaXRzICopXG4gICAgbGV0IGIzID0gSW50NjQuKHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgKG9mX2ludCAoYml0cyBzKSkgOCkgaW4gICgqIDIyIGJpdHMgKilcbiAgICBJbnQ2NC4obG9nb3IgYjEgKGxvZ29yIChzaGlmdF9sZWZ0IGIyIDIxKSAoc2hpZnRfbGVmdCBiMyA0MikpKVxuXG4gIGxldCBuYXRpdmViaXRzID1cbiAgICBpZiBOYXRpdmVpbnQuc2l6ZSA9IDMyXG4gICAgdGhlbiBmdW4gcyAtPiBOYXRpdmVpbnQub2ZfaW50MzIgKGJpdHMzMiBzKVxuICAgIGVsc2UgZnVuIHMgLT4gSW50NjQudG9fbmF0aXZlaW50IChiaXRzNjQgcylcblxuZW5kXG5cbigqIFRoaXMgaXMgdGhlIHN0YXRlIHlvdSBnZXQgd2l0aCBbaW5pdCAyNzE4MjgxOF0gYW5kIHRoZW4gYXBwbHlpbmdcbiAgIHRoZSBcImxhbmQgMHgzRkZGRkZGRlwiIGZpbHRlciB0byB0aGVtLiAgU2VlICM1NTc1LCAjNTc5MywgIzU5NzcuICopXG5sZXQgZGVmYXVsdCA9IHtcbiAgU3RhdGUuc3QgPSBbfFxuICAgICAgMHgzYWUyNTIyYjsgMHgxZDhkNDYzNDsgMHgxNWI0ZmFkMDsgMHgxOGIxNGFjZTsgMHgxMmY4YTNjNDsgMHgzYjA4NmM0NztcbiAgICAgIDB4MTZkNDY3ZDY7IDB4MTAxZDkxYzc7IDB4MzIxZGYxNzc7IDB4MDE3NmMxOTM7IDB4MWZmNzJiZjE7IDB4MWU4ODkxMDk7XG4gICAgICAweDBiNDY0YjE4OyAweDJiODZiOTdjOyAweDA4OTFkYTQ4OyAweDAzMTM3NDYzOyAweDA4NWFjNWExOyAweDE1ZDYxZjJmO1xuICAgICAgMHgzYmNlZDM1OTsgMHgyOWMxYzEzMjsgMHgzYTg2NzY2ZTsgMHgzNjZkOGM4NjsgMHgxZjViNjIyMjsgMHgzY2UxYjU5ZjtcbiAgICAgIDB4MmViZjc4ZTE7IDB4MjdjZDFiODY7IDB4MjU4ZjNkYzM7IDB4Mzg5YTgxOTQ7IDB4MDJlNGM0NGM7IDB4MThjNDNmN2Q7XG4gICAgICAweDBmNmU1MzRmOyAweDFlN2RmMzU5OyAweDA1NWQwYjdlOyAweDEwZTg0ZTdlOyAweDEyNjE5OGU0OyAweDBlNzcyMmNiO1xuICAgICAgMHgxY2JlZGUyODsgMHgzMzkxYjk2NDsgMHgzZDQwZTkyYTsgMHgwYzU5OTMzZDsgMHgwYjhjZDBiNzsgMHgyNGVmZmYxYztcbiAgICAgIDB4MjgwM2ZkYWE7IDB4MDhlYmM3MmU7IDB4MGY1MjJlMzI7IDB4MDUzOThlZGM7IDB4MjE0NGEwNGM7IDB4MGFlZjNjYmQ7XG4gICAgICAweDAxYWQ0NzE5OyAweDM1YjkzY2Q2OyAweDJhNTU5ZDRmOyAweDFlNmZkNzY4OyAweDI2ZTI3ZjM2OyAweDE4NmYxOGMzO1xuICAgICAgMHgyZmJmOTY3YTtcbiAgICB8XTtcbiAgU3RhdGUuaWR4ID0gMDtcbn1cblxubGV0IGJpdHMgKCkgPSBTdGF0ZS5iaXRzIGRlZmF1bHRcbmxldCBpbnQgYm91bmQgPSBTdGF0ZS5pbnQgZGVmYXVsdCBib3VuZFxubGV0IGZ1bGxfaW50IGJvdW5kID0gU3RhdGUuZnVsbF9pbnQgZGVmYXVsdCBib3VuZFxubGV0IGludDMyIGJvdW5kID0gU3RhdGUuaW50MzIgZGVmYXVsdCBib3VuZFxubGV0IG5hdGl2ZWludCBib3VuZCA9IFN0YXRlLm5hdGl2ZWludCBkZWZhdWx0IGJvdW5kXG5sZXQgaW50NjQgYm91bmQgPSBTdGF0ZS5pbnQ2NCBkZWZhdWx0IGJvdW5kXG5sZXQgZmxvYXQgc2NhbGUgPSBTdGF0ZS5mbG9hdCBkZWZhdWx0IHNjYWxlXG5sZXQgYm9vbCAoKSA9IFN0YXRlLmJvb2wgZGVmYXVsdFxubGV0IGJpdHMzMiAoKSA9IFN0YXRlLmJpdHMzMiBkZWZhdWx0XG5sZXQgYml0czY0ICgpID0gU3RhdGUuYml0czY0IGRlZmF1bHRcbmxldCBuYXRpdmViaXRzICgpID0gU3RhdGUubmF0aXZlYml0cyBkZWZhdWx0XG5cbmxldCBmdWxsX2luaXQgc2VlZCA9IFN0YXRlLmZ1bGxfaW5pdCBkZWZhdWx0IHNlZWRcbmxldCBpbml0IHNlZWQgPSBTdGF0ZS5mdWxsX2luaXQgZGVmYXVsdCBbfCBzZWVkIHxdXG5sZXQgc2VsZl9pbml0ICgpID0gZnVsbF9pbml0IChyYW5kb21fc2VlZCgpKVxuXG4oKiBNYW5pcHVsYXRpbmcgdGhlIGN1cnJlbnQgc3RhdGUuICopXG5cbmxldCBnZXRfc3RhdGUgKCkgPSBTdGF0ZS5jb3B5IGRlZmF1bHRcbmxldCBzZXRfc3RhdGUgcyA9IFN0YXRlLmFzc2lnbiBkZWZhdWx0IHNcblxuKCoqKioqKioqKioqKioqKioqKioqXG5cbigqIFRlc3QgZnVuY3Rpb25zLiAgTm90IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5LlxuICAgVGhlIFtjaGlzcXVhcmVdIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgd2l0aCBuID4gMTByLlxuICAgSXQgcmV0dXJucyBhIHRyaXBsZSAobG93LCBhY3R1YWwsIGhpZ2gpLlxuICAgSWYgbG93IDw9IGFjdHVhbCA8PSBoaWdoLCB0aGUgW2ddIGZ1bmN0aW9uIHBhc3NlZCB0aGUgdGVzdCxcbiAgIG90aGVyd2lzZSBpdCBmYWlsZWQuXG5cbiAgU29tZSByZXN1bHRzOlxuXG5pbml0IDI3MTgyODE4OyBjaGlzcXVhcmUgaW50IDEwMDAwMCAxMDAwXG5pbml0IDI3MTgyODE4OyBjaGlzcXVhcmUgaW50IDEwMDAwMCAxMDBcbmluaXQgMjcxODI4MTg7IGNoaXNxdWFyZSBpbnQgMTAwMDAwIDUwMDBcbmluaXQgMjcxODI4MTg7IGNoaXNxdWFyZSBpbnQgMTAwMDAwMCAxMDAwXG5pbml0IDI3MTgyODE4OyBjaGlzcXVhcmUgaW50IDEwMDAwMCAxMDI0XG5pbml0IDI5OTc5MjY0MzsgY2hpc3F1YXJlIGludCAxMDAwMDAgMTAyNFxuaW5pdCAxNDE0MjEzNjsgY2hpc3F1YXJlIGludCAxMDAwMDAgMTAyNFxuaW5pdCAyNzE4MjgxODsgaW5pdF9kaWZmIDEwMjQ7IGNoaXNxdWFyZSBkaWZmIDEwMDAwMCAxMDI0XG5pbml0IDI3MTgyODE4OyBpbml0X2RpZmYgMTAwOyBjaGlzcXVhcmUgZGlmZiAxMDAwMDAgMTAwXG5pbml0IDI3MTgyODE4OyBpbml0X2RpZmYyIDEwMjQ7IGNoaXNxdWFyZSBkaWZmMiAxMDAwMDAgMTAyNFxuaW5pdCAyNzE4MjgxODsgaW5pdF9kaWZmMiAxMDA7IGNoaXNxdWFyZSBkaWZmMiAxMDAwMDAgMTAwXG5pbml0IDE0MTQyMTM2OyBpbml0X2RpZmYyIDEwMDsgY2hpc3F1YXJlIGRpZmYyIDEwMDAwMCAxMDBcbmluaXQgMjk5NzkyNjQzOyBpbml0X2RpZmYyIDEwMDsgY2hpc3F1YXJlIGRpZmYyIDEwMDAwMCAxMDBcbi0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoOTM2Ljc1NDQ0Njc5NjYzMjQ2NSwgOTk3LjUsIDEwNjMuMjQ1NTUzMjAzMzY3NTQpXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoODAuLCA4OS43NDAwMDAwMDAwMDUyMzg3LCAxMjAuKVxuIyAtIDogZmxvYXQgKiBmbG9hdCAqIGZsb2F0ID0gKDQ4NTguNTc4NjQzNzYyNjksIDUwNDUuNSwgNTE0MS40MjEzNTYyMzczMSlcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9XG4oOTM2Ljc1NDQ0Njc5NjYzMjQ2NSwgOTQ0LjgwNTk5OTk5OTk4MjMwNSwgMTA2My4yNDU1NTMyMDMzNjc1NClcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg5NjAuLCAxMDE5LjE5NzQ0MDAwMDAwMzU1LCAxMDg4LilcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg5NjAuLCAxMDU5LjMxNzc2MDAwMDAwNTM2LCAxMDg4LilcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg5NjAuLCAxMDM5Ljk4NDYzOTk5OTk5NTEyLCAxMDg4LilcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg5NjAuLCAxMDU0LjM4MjA3OTk5OTk5NTc3LCAxMDg4LilcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg4MC4sIDkwLjA5NjAwMDAwMDAwNSwgMTIwLilcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg5NjAuLCAxMDc2Ljc4NzIwMDAwMDAwNjEyLCAxMDg4LilcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg4MC4sIDg1LjE3NjAwMDAwMDAwNjc1MjEsIDEyMC4pXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoODAuLCA4NS4yMTYwMDAwMDAwMDAzNDkyLCAxMjAuKVxuIyAtIDogZmxvYXQgKiBmbG9hdCAqIGZsb2F0ID0gKDgwLiwgODAuNjIyMDAwMDAwMDAzMDI2OCwgMTIwLilcblxuKilcblxuKCogUmV0dXJuIHRoZSBzdW0gb2YgdGhlIHNxdWFyZXMgb2YgdltpMCxpMVsgKilcbmxldCByZWMgc3Vtc3EgdiBpMCBpMSA9XG4gIGlmIGkwID49IGkxIHRoZW4gMC4wXG4gIGVsc2UgaWYgaTEgPSBpMCArIDEgdGhlbiBTdGRsaWIuZmxvYXQgdi4oaTApICouIFN0ZGxpYi5mbG9hdCB2LihpMClcbiAgZWxzZSBzdW1zcSB2IGkwICgoaTAraTEpLzIpICsuIHN1bXNxIHYgKChpMCtpMSkvMikgaTFcblxuXG5sZXQgY2hpc3F1YXJlIGcgbiByID1cbiAgaWYgbiA8PSAxMCAqIHIgdGhlbiBpbnZhbGlkX2FyZyBcImNoaXNxdWFyZVwiO1xuICBsZXQgZiA9IEFycmF5Lm1ha2UgciAwIGluXG4gIGZvciBpID0gMSB0byBuIGRvXG4gICAgbGV0IHQgPSBnIHIgaW5cbiAgICBmLih0KSA8LSBmLih0KSArIDFcbiAgZG9uZTtcbiAgbGV0IHQgPSBzdW1zcSBmIDAgclxuICBhbmQgciA9IFN0ZGxpYi5mbG9hdCByXG4gIGFuZCBuID0gU3RkbGliLmZsb2F0IG4gaW5cbiAgbGV0IHNyID0gMi4wICouIHNxcnQgciBpblxuICAociAtLiBzciwgICAociAqLiB0IC8uIG4pIC0uIG4sICAgciArLiBzcilcblxuXG4oKiBUaGlzIGlzIHRvIHRlc3QgZm9yIGxpbmVhciBkZXBlbmRlbmNpZXMgYmV0d2VlbiBzdWNjZXNzaXZlIHJhbmRvbSBudW1iZXJzLlxuKilcbmxldCBzdCA9IHJlZiAwXG5sZXQgaW5pdF9kaWZmIHIgPSBzdCA6PSBpbnQgclxubGV0IGRpZmYgciA9XG4gIGxldCB4MSA9ICFzdFxuICBhbmQgeDIgPSBpbnQgclxuICBpblxuICBzdCA6PSB4MjtcbiAgaWYgeDEgPj0geDIgdGhlblxuICAgIHgxIC0geDJcbiAgZWxzZVxuICAgIHIgKyB4MSAtIHgyXG5cblxubGV0IHN0MSA9IHJlZiAwXG5hbmQgc3QyID0gcmVmIDBcblxuXG4oKiBUaGlzIGlzIHRvIHRlc3QgZm9yIHF1YWRyYXRpYyBkZXBlbmRlbmNpZXMgYmV0d2VlbiBzdWNjZXNzaXZlIHJhbmRvbVxuICAgbnVtYmVycy5cbiopXG5sZXQgaW5pdF9kaWZmMiByID0gc3QxIDo9IGludCByOyBzdDIgOj0gaW50IHJcbmxldCBkaWZmMiByID1cbiAgbGV0IHgxID0gIXN0MVxuICBhbmQgeDIgPSAhc3QyXG4gIGFuZCB4MyA9IGludCByXG4gIGluXG4gIHN0MSA6PSB4MjtcbiAgc3QyIDo9IHgzO1xuICAoeDMgLSB4MiAtIHgyICsgeDEgKyAyKnIpIG1vZCByXG5cblxuKioqKioqKioqKioqKioqKioqKiopXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIEFuIGFsaWFzIGZvciB0aGUgdHlwZSBvZiBsaXN0cy4gKilcbnR5cGUgJ2EgdCA9ICdhIGxpc3QgPSBbXSB8ICg6Oikgb2YgJ2EgKiAnYSBsaXN0XG5cbigqIExpc3Qgb3BlcmF0aW9ucyAqKVxuXG5sZXQgcmVjIGxlbmd0aF9hdXggbGVuID0gZnVuY3Rpb25cbiAgICBbXSAtPiBsZW5cbiAgfCBfOjpsIC0+IGxlbmd0aF9hdXggKGxlbiArIDEpIGxcblxubGV0IGxlbmd0aCBsID0gbGVuZ3RoX2F1eCAwIGxcblxubGV0IGNvbnMgYSBsID0gYTo6bFxuXG5sZXQgaGQgPSBmdW5jdGlvblxuICAgIFtdIC0+IGZhaWx3aXRoIFwiaGRcIlxuICB8IGE6Ol8gLT4gYVxuXG5sZXQgdGwgPSBmdW5jdGlvblxuICAgIFtdIC0+IGZhaWx3aXRoIFwidGxcIlxuICB8IF86OmwgLT4gbFxuXG5sZXQgbnRoIGwgbiA9XG4gIGlmIG4gPCAwIHRoZW4gaW52YWxpZF9hcmcgXCJMaXN0Lm50aFwiIGVsc2VcbiAgbGV0IHJlYyBudGhfYXV4IGwgbiA9XG4gICAgbWF0Y2ggbCB3aXRoXG4gICAgfCBbXSAtPiBmYWlsd2l0aCBcIm50aFwiXG4gICAgfCBhOjpsIC0+IGlmIG4gPSAwIHRoZW4gYSBlbHNlIG50aF9hdXggbCAobi0xKVxuICBpbiBudGhfYXV4IGwgblxuXG5sZXQgbnRoX29wdCBsIG4gPVxuICBpZiBuIDwgMCB0aGVuIGludmFsaWRfYXJnIFwiTGlzdC5udGhcIiBlbHNlXG4gIGxldCByZWMgbnRoX2F1eCBsIG4gPVxuICAgIG1hdGNoIGwgd2l0aFxuICAgIHwgW10gLT4gTm9uZVxuICAgIHwgYTo6bCAtPiBpZiBuID0gMCB0aGVuIFNvbWUgYSBlbHNlIG50aF9hdXggbCAobi0xKVxuICBpbiBudGhfYXV4IGwgblxuXG5sZXQgYXBwZW5kID0gKEApXG5cbmxldCByZWMgcmV2X2FwcGVuZCBsMSBsMiA9XG4gIG1hdGNoIGwxIHdpdGhcbiAgICBbXSAtPiBsMlxuICB8IGEgOjogbCAtPiByZXZfYXBwZW5kIGwgKGEgOjogbDIpXG5cbmxldCByZXYgbCA9IHJldl9hcHBlbmQgbCBbXVxuXG5sZXQgcmVjIGluaXRfdGFpbHJlY19hdXggYWNjIGkgbiBmID1cbiAgaWYgaSA+PSBuIHRoZW4gYWNjXG4gIGVsc2UgaW5pdF90YWlscmVjX2F1eCAoZiBpIDo6IGFjYykgKGkrMSkgbiBmXG5cbmxldCByZWMgaW5pdF9hdXggaSBuIGYgPVxuICBpZiBpID49IG4gdGhlbiBbXVxuICBlbHNlXG4gICAgbGV0IHIgPSBmIGkgaW5cbiAgICByIDo6IGluaXRfYXV4IChpKzEpIG4gZlxuXG5sZXQgcmV2X2luaXRfdGhyZXNob2xkID1cbiAgbWF0Y2ggU3lzLmJhY2tlbmRfdHlwZSB3aXRoXG4gIHwgU3lzLk5hdGl2ZSB8IFN5cy5CeXRlY29kZSAtPiAxMF8wMDBcbiAgKCogV2UgZG9uJ3Qga25vdyB0aGUgc2l6ZSBvZiB0aGUgc3RhY2ssIGJldHRlciBiZSBzYWZlIGFuZCBhc3N1bWUgaXQnc1xuICAgICBzbWFsbC4gKilcbiAgfCBTeXMuT3RoZXIgXyAtPiA1MFxuXG5sZXQgaW5pdCBsZW4gZiA9XG4gIGlmIGxlbiA8IDAgdGhlbiBpbnZhbGlkX2FyZyBcIkxpc3QuaW5pdFwiIGVsc2VcbiAgaWYgbGVuID4gcmV2X2luaXRfdGhyZXNob2xkIHRoZW4gcmV2IChpbml0X3RhaWxyZWNfYXV4IFtdIDAgbGVuIGYpXG4gIGVsc2UgaW5pdF9hdXggMCBsZW4gZlxuXG5sZXQgcmVjIGZsYXR0ZW4gPSBmdW5jdGlvblxuICAgIFtdIC0+IFtdXG4gIHwgbDo6ciAtPiBsIEAgZmxhdHRlbiByXG5cbmxldCBjb25jYXQgPSBmbGF0dGVuXG5cbmxldCByZWMgbWFwIGYgPSBmdW5jdGlvblxuICAgIFtdIC0+IFtdXG4gIHwgYTo6bCAtPiBsZXQgciA9IGYgYSBpbiByIDo6IG1hcCBmIGxcblxubGV0IHJlYyBtYXBpIGkgZiA9IGZ1bmN0aW9uXG4gICAgW10gLT4gW11cbiAgfCBhOjpsIC0+IGxldCByID0gZiBpIGEgaW4gciA6OiBtYXBpIChpICsgMSkgZiBsXG5cbmxldCBtYXBpIGYgbCA9IG1hcGkgMCBmIGxcblxubGV0IHJldl9tYXAgZiBsID1cbiAgbGV0IHJlYyBybWFwX2YgYWNjdSA9IGZ1bmN0aW9uXG4gICAgfCBbXSAtPiBhY2N1XG4gICAgfCBhOjpsIC0+IHJtYXBfZiAoZiBhIDo6IGFjY3UpIGxcbiAgaW5cbiAgcm1hcF9mIFtdIGxcblxuXG5sZXQgcmVjIGl0ZXIgZiA9IGZ1bmN0aW9uXG4gICAgW10gLT4gKClcbiAgfCBhOjpsIC0+IGYgYTsgaXRlciBmIGxcblxubGV0IHJlYyBpdGVyaSBpIGYgPSBmdW5jdGlvblxuICAgIFtdIC0+ICgpXG4gIHwgYTo6bCAtPiBmIGkgYTsgaXRlcmkgKGkgKyAxKSBmIGxcblxubGV0IGl0ZXJpIGYgbCA9IGl0ZXJpIDAgZiBsXG5cbmxldCByZWMgZm9sZF9sZWZ0IGYgYWNjdSBsID1cbiAgbWF0Y2ggbCB3aXRoXG4gICAgW10gLT4gYWNjdVxuICB8IGE6OmwgLT4gZm9sZF9sZWZ0IGYgKGYgYWNjdSBhKSBsXG5cbmxldCByZWMgZm9sZF9yaWdodCBmIGwgYWNjdSA9XG4gIG1hdGNoIGwgd2l0aFxuICAgIFtdIC0+IGFjY3VcbiAgfCBhOjpsIC0+IGYgYSAoZm9sZF9yaWdodCBmIGwgYWNjdSlcblxubGV0IHJlYyBtYXAyIGYgbDEgbDIgPVxuICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgKFtdLCBbXSkgLT4gW11cbiAgfCAoYTE6OmwxLCBhMjo6bDIpIC0+IGxldCByID0gZiBhMSBhMiBpbiByIDo6IG1hcDIgZiBsMSBsMlxuICB8IChfLCBfKSAtPiBpbnZhbGlkX2FyZyBcIkxpc3QubWFwMlwiXG5cbmxldCByZXZfbWFwMiBmIGwxIGwyID1cbiAgbGV0IHJlYyBybWFwMl9mIGFjY3UgbDEgbDIgPVxuICAgIG1hdGNoIChsMSwgbDIpIHdpdGhcbiAgICB8IChbXSwgW10pIC0+IGFjY3VcbiAgICB8IChhMTo6bDEsIGEyOjpsMikgLT4gcm1hcDJfZiAoZiBhMSBhMiA6OiBhY2N1KSBsMSBsMlxuICAgIHwgKF8sIF8pIC0+IGludmFsaWRfYXJnIFwiTGlzdC5yZXZfbWFwMlwiXG4gIGluXG4gIHJtYXAyX2YgW10gbDEgbDJcblxuXG5sZXQgcmVjIGl0ZXIyIGYgbDEgbDIgPVxuICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgKFtdLCBbXSkgLT4gKClcbiAgfCAoYTE6OmwxLCBhMjo6bDIpIC0+IGYgYTEgYTI7IGl0ZXIyIGYgbDEgbDJcbiAgfCAoXywgXykgLT4gaW52YWxpZF9hcmcgXCJMaXN0Lml0ZXIyXCJcblxubGV0IHJlYyBmb2xkX2xlZnQyIGYgYWNjdSBsMSBsMiA9XG4gIG1hdGNoIChsMSwgbDIpIHdpdGhcbiAgICAoW10sIFtdKSAtPiBhY2N1XG4gIHwgKGExOjpsMSwgYTI6OmwyKSAtPiBmb2xkX2xlZnQyIGYgKGYgYWNjdSBhMSBhMikgbDEgbDJcbiAgfCAoXywgXykgLT4gaW52YWxpZF9hcmcgXCJMaXN0LmZvbGRfbGVmdDJcIlxuXG5sZXQgcmVjIGZvbGRfcmlnaHQyIGYgbDEgbDIgYWNjdSA9XG4gIG1hdGNoIChsMSwgbDIpIHdpdGhcbiAgICAoW10sIFtdKSAtPiBhY2N1XG4gIHwgKGExOjpsMSwgYTI6OmwyKSAtPiBmIGExIGEyIChmb2xkX3JpZ2h0MiBmIGwxIGwyIGFjY3UpXG4gIHwgKF8sIF8pIC0+IGludmFsaWRfYXJnIFwiTGlzdC5mb2xkX3JpZ2h0MlwiXG5cbmxldCByZWMgZm9yX2FsbCBwID0gZnVuY3Rpb25cbiAgICBbXSAtPiB0cnVlXG4gIHwgYTo6bCAtPiBwIGEgJiYgZm9yX2FsbCBwIGxcblxubGV0IHJlYyBleGlzdHMgcCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gZmFsc2VcbiAgfCBhOjpsIC0+IHAgYSB8fCBleGlzdHMgcCBsXG5cbmxldCByZWMgZm9yX2FsbDIgcCBsMSBsMiA9XG4gIG1hdGNoIChsMSwgbDIpIHdpdGhcbiAgICAoW10sIFtdKSAtPiB0cnVlXG4gIHwgKGExOjpsMSwgYTI6OmwyKSAtPiBwIGExIGEyICYmIGZvcl9hbGwyIHAgbDEgbDJcbiAgfCAoXywgXykgLT4gaW52YWxpZF9hcmcgXCJMaXN0LmZvcl9hbGwyXCJcblxubGV0IHJlYyBleGlzdHMyIHAgbDEgbDIgPVxuICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgKFtdLCBbXSkgLT4gZmFsc2VcbiAgfCAoYTE6OmwxLCBhMjo6bDIpIC0+IHAgYTEgYTIgfHwgZXhpc3RzMiBwIGwxIGwyXG4gIHwgKF8sIF8pIC0+IGludmFsaWRfYXJnIFwiTGlzdC5leGlzdHMyXCJcblxubGV0IHJlYyBtZW0geCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gZmFsc2VcbiAgfCBhOjpsIC0+IGNvbXBhcmUgYSB4ID0gMCB8fCBtZW0geCBsXG5cbmxldCByZWMgbWVtcSB4ID0gZnVuY3Rpb25cbiAgICBbXSAtPiBmYWxzZVxuICB8IGE6OmwgLT4gYSA9PSB4IHx8IG1lbXEgeCBsXG5cbmxldCByZWMgYXNzb2MgeCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gcmFpc2UgTm90X2ZvdW5kXG4gIHwgKGEsYik6OmwgLT4gaWYgY29tcGFyZSBhIHggPSAwIHRoZW4gYiBlbHNlIGFzc29jIHggbFxuXG5sZXQgcmVjIGFzc29jX29wdCB4ID0gZnVuY3Rpb25cbiAgICBbXSAtPiBOb25lXG4gIHwgKGEsYik6OmwgLT4gaWYgY29tcGFyZSBhIHggPSAwIHRoZW4gU29tZSBiIGVsc2UgYXNzb2Nfb3B0IHggbFxuXG5sZXQgcmVjIGFzc3EgeCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gcmFpc2UgTm90X2ZvdW5kXG4gIHwgKGEsYik6OmwgLT4gaWYgYSA9PSB4IHRoZW4gYiBlbHNlIGFzc3EgeCBsXG5cbmxldCByZWMgYXNzcV9vcHQgeCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gTm9uZVxuICB8IChhLGIpOjpsIC0+IGlmIGEgPT0geCB0aGVuIFNvbWUgYiBlbHNlIGFzc3Ffb3B0IHggbFxuXG5sZXQgcmVjIG1lbV9hc3NvYyB4ID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBmYWxzZVxuICB8IChhLCBfKSA6OiBsIC0+IGNvbXBhcmUgYSB4ID0gMCB8fCBtZW1fYXNzb2MgeCBsXG5cbmxldCByZWMgbWVtX2Fzc3EgeCA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gZmFsc2VcbiAgfCAoYSwgXykgOjogbCAtPiBhID09IHggfHwgbWVtX2Fzc3EgeCBsXG5cbmxldCByZWMgcmVtb3ZlX2Fzc29jIHggPSBmdW5jdGlvblxuICB8IFtdIC0+IFtdXG4gIHwgKGEsIF8gYXMgcGFpcikgOjogbCAtPlxuICAgICAgaWYgY29tcGFyZSBhIHggPSAwIHRoZW4gbCBlbHNlIHBhaXIgOjogcmVtb3ZlX2Fzc29jIHggbFxuXG5sZXQgcmVjIHJlbW92ZV9hc3NxIHggPSBmdW5jdGlvblxuICB8IFtdIC0+IFtdXG4gIHwgKGEsIF8gYXMgcGFpcikgOjogbCAtPiBpZiBhID09IHggdGhlbiBsIGVsc2UgcGFpciA6OiByZW1vdmVfYXNzcSB4IGxcblxubGV0IHJlYyBmaW5kIHAgPSBmdW5jdGlvblxuICB8IFtdIC0+IHJhaXNlIE5vdF9mb3VuZFxuICB8IHggOjogbCAtPiBpZiBwIHggdGhlbiB4IGVsc2UgZmluZCBwIGxcblxubGV0IHJlYyBmaW5kX29wdCBwID0gZnVuY3Rpb25cbiAgfCBbXSAtPiBOb25lXG4gIHwgeCA6OiBsIC0+IGlmIHAgeCB0aGVuIFNvbWUgeCBlbHNlIGZpbmRfb3B0IHAgbFxuXG5sZXQgcmVjIGZpbmRfbWFwIGYgPSBmdW5jdGlvblxuICB8IFtdIC0+IE5vbmVcbiAgfCB4IDo6IGwgLT5cbiAgICAgYmVnaW4gbWF0Y2ggZiB4IHdpdGhcbiAgICAgICB8IFNvbWUgXyBhcyByZXN1bHQgLT4gcmVzdWx0XG4gICAgICAgfCBOb25lIC0+IGZpbmRfbWFwIGYgbFxuICAgICBlbmRcblxubGV0IGZpbmRfYWxsIHAgPVxuICBsZXQgcmVjIGZpbmQgYWNjdSA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gcmV2IGFjY3VcbiAgfCB4IDo6IGwgLT4gaWYgcCB4IHRoZW4gZmluZCAoeCA6OiBhY2N1KSBsIGVsc2UgZmluZCBhY2N1IGwgaW5cbiAgZmluZCBbXVxuXG5sZXQgZmlsdGVyID0gZmluZF9hbGxcblxubGV0IGZpbHRlcmkgcCBsID1cbiAgbGV0IHJlYyBhdXggaSBhY2MgPSBmdW5jdGlvblxuICB8IFtdIC0+IHJldiBhY2NcbiAgfCB4OjpsIC0+IGF1eCAoaSArIDEpIChpZiBwIGkgeCB0aGVuIHg6OmFjYyBlbHNlIGFjYykgbFxuICBpblxuICBhdXggMCBbXSBsXG5cbmxldCBmaWx0ZXJfbWFwIGYgPVxuICBsZXQgcmVjIGF1eCBhY2N1ID0gZnVuY3Rpb25cbiAgICB8IFtdIC0+IHJldiBhY2N1XG4gICAgfCB4IDo6IGwgLT5cbiAgICAgICAgbWF0Y2ggZiB4IHdpdGhcbiAgICAgICAgfCBOb25lIC0+IGF1eCBhY2N1IGxcbiAgICAgICAgfCBTb21lIHYgLT4gYXV4ICh2IDo6IGFjY3UpIGxcbiAgaW5cbiAgYXV4IFtdXG5cbmxldCBjb25jYXRfbWFwIGYgbCA9XG4gIGxldCByZWMgYXV4IGYgYWNjID0gZnVuY3Rpb25cbiAgICB8IFtdIC0+IHJldiBhY2NcbiAgICB8IHggOjogbCAtPlxuICAgICAgIGxldCB4cyA9IGYgeCBpblxuICAgICAgIGF1eCBmIChyZXZfYXBwZW5kIHhzIGFjYykgbFxuICBpbiBhdXggZiBbXSBsXG5cbmxldCBmb2xkX2xlZnRfbWFwIGYgYWNjdSBsID1cbiAgbGV0IHJlYyBhdXggYWNjdSBsX2FjY3UgPSBmdW5jdGlvblxuICAgIHwgW10gLT4gYWNjdSwgcmV2IGxfYWNjdVxuICAgIHwgeCA6OiBsIC0+XG4gICAgICAgIGxldCBhY2N1LCB4ID0gZiBhY2N1IHggaW5cbiAgICAgICAgYXV4IGFjY3UgKHggOjogbF9hY2N1KSBsIGluXG4gIGF1eCBhY2N1IFtdIGxcblxubGV0IHBhcnRpdGlvbiBwIGwgPVxuICBsZXQgcmVjIHBhcnQgeWVzIG5vID0gZnVuY3Rpb25cbiAgfCBbXSAtPiAocmV2IHllcywgcmV2IG5vKVxuICB8IHggOjogbCAtPiBpZiBwIHggdGhlbiBwYXJ0ICh4IDo6IHllcykgbm8gbCBlbHNlIHBhcnQgeWVzICh4IDo6IG5vKSBsIGluXG4gIHBhcnQgW10gW10gbFxuXG5sZXQgcGFydGl0aW9uX21hcCBwIGwgPVxuICBsZXQgcmVjIHBhcnQgbGVmdCByaWdodCA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gKHJldiBsZWZ0LCByZXYgcmlnaHQpXG4gIHwgeCA6OiBsIC0+XG4gICAgIGJlZ2luIG1hdGNoIHAgeCB3aXRoXG4gICAgICAgfCBFaXRoZXIuTGVmdCB2IC0+IHBhcnQgKHYgOjogbGVmdCkgcmlnaHQgbFxuICAgICAgIHwgRWl0aGVyLlJpZ2h0IHYgLT4gcGFydCBsZWZ0ICh2IDo6IHJpZ2h0KSBsXG4gICAgIGVuZFxuICBpblxuICBwYXJ0IFtdIFtdIGxcblxubGV0IHJlYyBzcGxpdCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gKFtdLCBbXSlcbiAgfCAoeCx5KTo6bCAtPlxuICAgICAgbGV0IChyeCwgcnkpID0gc3BsaXQgbCBpbiAoeDo6cngsIHk6OnJ5KVxuXG5sZXQgcmVjIGNvbWJpbmUgbDEgbDIgPVxuICBtYXRjaCAobDEsIGwyKSB3aXRoXG4gICAgKFtdLCBbXSkgLT4gW11cbiAgfCAoYTE6OmwxLCBhMjo6bDIpIC0+IChhMSwgYTIpIDo6IGNvbWJpbmUgbDEgbDJcbiAgfCAoXywgXykgLT4gaW52YWxpZF9hcmcgXCJMaXN0LmNvbWJpbmVcIlxuXG4oKiogc29ydGluZyAqKVxuXG5sZXQgcmVjIG1lcmdlIGNtcCBsMSBsMiA9XG4gIG1hdGNoIGwxLCBsMiB3aXRoXG4gIHwgW10sIGwyIC0+IGwyXG4gIHwgbDEsIFtdIC0+IGwxXG4gIHwgaDEgOjogdDEsIGgyIDo6IHQyIC0+XG4gICAgICBpZiBjbXAgaDEgaDIgPD0gMFxuICAgICAgdGhlbiBoMSA6OiBtZXJnZSBjbXAgdDEgbDJcbiAgICAgIGVsc2UgaDIgOjogbWVyZ2UgY21wIGwxIHQyXG5cblxubGV0IHN0YWJsZV9zb3J0IGNtcCBsID1cbiAgbGV0IHJlYyByZXZfbWVyZ2UgbDEgbDIgYWNjdSA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBsMiAtPiByZXZfYXBwZW5kIGwyIGFjY3VcbiAgICB8IGwxLCBbXSAtPiByZXZfYXBwZW5kIGwxIGFjY3VcbiAgICB8IGgxOjp0MSwgaDI6OnQyIC0+XG4gICAgICAgIGlmIGNtcCBoMSBoMiA8PSAwXG4gICAgICAgIHRoZW4gcmV2X21lcmdlIHQxIGwyIChoMTo6YWNjdSlcbiAgICAgICAgZWxzZSByZXZfbWVyZ2UgbDEgdDIgKGgyOjphY2N1KVxuICBpblxuICBsZXQgcmVjIHJldl9tZXJnZV9yZXYgbDEgbDIgYWNjdSA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBsMiAtPiByZXZfYXBwZW5kIGwyIGFjY3VcbiAgICB8IGwxLCBbXSAtPiByZXZfYXBwZW5kIGwxIGFjY3VcbiAgICB8IGgxOjp0MSwgaDI6OnQyIC0+XG4gICAgICAgIGlmIGNtcCBoMSBoMiA+IDBcbiAgICAgICAgdGhlbiByZXZfbWVyZ2VfcmV2IHQxIGwyIChoMTo6YWNjdSlcbiAgICAgICAgZWxzZSByZXZfbWVyZ2VfcmV2IGwxIHQyIChoMjo6YWNjdSlcbiAgaW5cbiAgbGV0IHJlYyBzb3J0IG4gbCA9XG4gICAgbWF0Y2ggbiwgbCB3aXRoXG4gICAgfCAyLCB4MSA6OiB4MiA6OiB0bCAtPlxuICAgICAgICBsZXQgcyA9IGlmIGNtcCB4MSB4MiA8PSAwIHRoZW4gW3gxOyB4Ml0gZWxzZSBbeDI7IHgxXSBpblxuICAgICAgICAocywgdGwpXG4gICAgfCAzLCB4MSA6OiB4MiA6OiB4MyA6OiB0bCAtPlxuICAgICAgICBsZXQgcyA9XG4gICAgICAgICAgaWYgY21wIHgxIHgyIDw9IDAgdGhlblxuICAgICAgICAgICAgaWYgY21wIHgyIHgzIDw9IDAgdGhlbiBbeDE7IHgyOyB4M11cbiAgICAgICAgICAgIGVsc2UgaWYgY21wIHgxIHgzIDw9IDAgdGhlbiBbeDE7IHgzOyB4Ml1cbiAgICAgICAgICAgIGVsc2UgW3gzOyB4MTsgeDJdXG4gICAgICAgICAgZWxzZSBpZiBjbXAgeDEgeDMgPD0gMCB0aGVuIFt4MjsgeDE7IHgzXVxuICAgICAgICAgIGVsc2UgaWYgY21wIHgyIHgzIDw9IDAgdGhlbiBbeDI7IHgzOyB4MV1cbiAgICAgICAgICBlbHNlIFt4MzsgeDI7IHgxXVxuICAgICAgICBpblxuICAgICAgICAocywgdGwpXG4gICAgfCBuLCBsIC0+XG4gICAgICAgIGxldCBuMSA9IG4gYXNyIDEgaW5cbiAgICAgICAgbGV0IG4yID0gbiAtIG4xIGluXG4gICAgICAgIGxldCBzMSwgbDIgPSByZXZfc29ydCBuMSBsIGluXG4gICAgICAgIGxldCBzMiwgdGwgPSByZXZfc29ydCBuMiBsMiBpblxuICAgICAgICAocmV2X21lcmdlX3JldiBzMSBzMiBbXSwgdGwpXG4gIGFuZCByZXZfc29ydCBuIGwgPVxuICAgIG1hdGNoIG4sIGwgd2l0aFxuICAgIHwgMiwgeDEgOjogeDIgOjogdGwgLT5cbiAgICAgICAgbGV0IHMgPSBpZiBjbXAgeDEgeDIgPiAwIHRoZW4gW3gxOyB4Ml0gZWxzZSBbeDI7IHgxXSBpblxuICAgICAgICAocywgdGwpXG4gICAgfCAzLCB4MSA6OiB4MiA6OiB4MyA6OiB0bCAtPlxuICAgICAgICBsZXQgcyA9XG4gICAgICAgICAgaWYgY21wIHgxIHgyID4gMCB0aGVuXG4gICAgICAgICAgICBpZiBjbXAgeDIgeDMgPiAwIHRoZW4gW3gxOyB4MjsgeDNdXG4gICAgICAgICAgICBlbHNlIGlmIGNtcCB4MSB4MyA+IDAgdGhlbiBbeDE7IHgzOyB4Ml1cbiAgICAgICAgICAgIGVsc2UgW3gzOyB4MTsgeDJdXG4gICAgICAgICAgZWxzZSBpZiBjbXAgeDEgeDMgPiAwIHRoZW4gW3gyOyB4MTsgeDNdXG4gICAgICAgICAgZWxzZSBpZiBjbXAgeDIgeDMgPiAwIHRoZW4gW3gyOyB4MzsgeDFdXG4gICAgICAgICAgZWxzZSBbeDM7IHgyOyB4MV1cbiAgICAgICAgaW5cbiAgICAgICAgKHMsIHRsKVxuICAgIHwgbiwgbCAtPlxuICAgICAgICBsZXQgbjEgPSBuIGFzciAxIGluXG4gICAgICAgIGxldCBuMiA9IG4gLSBuMSBpblxuICAgICAgICBsZXQgczEsIGwyID0gc29ydCBuMSBsIGluXG4gICAgICAgIGxldCBzMiwgdGwgPSBzb3J0IG4yIGwyIGluXG4gICAgICAgIChyZXZfbWVyZ2UgczEgczIgW10sIHRsKVxuICBpblxuICBsZXQgbGVuID0gbGVuZ3RoIGwgaW5cbiAgaWYgbGVuIDwgMiB0aGVuIGwgZWxzZSBmc3QgKHNvcnQgbGVuIGwpXG5cblxubGV0IHNvcnQgPSBzdGFibGVfc29ydFxubGV0IGZhc3Rfc29ydCA9IHN0YWJsZV9zb3J0XG5cbigqIE5vdGU6IG9uIGEgbGlzdCBvZiBsZW5ndGggYmV0d2VlbiBhYm91dCAxMDAwMDAgKGRlcGVuZGluZyBvbiB0aGUgbWlub3JcbiAgIGhlYXAgc2l6ZSBhbmQgdGhlIHR5cGUgb2YgdGhlIGxpc3QpIGFuZCBTeXMubWF4X2FycmF5X3NpemUsIGl0IGlzXG4gICBhY3R1YWxseSBmYXN0ZXIgdG8gdXNlIHRoZSBmb2xsb3dpbmcsIGJ1dCBpdCBtaWdodCBhbHNvIHVzZSBtb3JlIG1lbW9yeVxuICAgYmVjYXVzZSB0aGUgYXJndW1lbnQgbGlzdCBjYW5ub3QgYmUgZGVhbGxvY2F0ZWQgaW5jcmVtZW50YWxseS5cblxuICAgQWxzbywgdGhlcmUgc2VlbXMgdG8gYmUgYSBidWcgaW4gdGhpcyBjb2RlIG9yIGluIHRoZVxuICAgaW1wbGVtZW50YXRpb24gb2Ygb2JqX3RydW5jYXRlLlxuXG5leHRlcm5hbCBvYmpfdHJ1bmNhdGUgOiAnYSBhcnJheSAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9vYmpfdHJ1bmNhdGVcIlxuXG5sZXQgYXJyYXlfdG9fbGlzdF9pbl9wbGFjZSBhID1cbiAgbGV0IGwgPSBBcnJheS5sZW5ndGggYSBpblxuICBsZXQgcmVjIGxvb3AgYWNjdSBuIHAgPVxuICAgIGlmIHAgPD0gMCB0aGVuIGFjY3UgZWxzZSBiZWdpblxuICAgICAgaWYgcCA9IG4gdGhlbiBiZWdpblxuICAgICAgICBvYmpfdHJ1bmNhdGUgYSBwO1xuICAgICAgICBsb29wIChhLihwLTEpIDo6IGFjY3UpIChuLTEwMDApIChwLTEpXG4gICAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgICBsb29wIChhLihwLTEpIDo6IGFjY3UpIG4gKHAtMSlcbiAgICAgIGVuZFxuICAgIGVuZFxuICBpblxuICBsb29wIFtdIChsLTEwMDApIGxcblxuXG5sZXQgc3RhYmxlX3NvcnQgY21wIGwgPVxuICBsZXQgYSA9IEFycmF5Lm9mX2xpc3QgbCBpblxuICBBcnJheS5zdGFibGVfc29ydCBjbXAgYTtcbiAgYXJyYXlfdG9fbGlzdF9pbl9wbGFjZSBhXG5cbiopXG5cblxuKCoqIHNvcnRpbmcgKyByZW1vdmluZyBkdXBsaWNhdGVzICopXG5cbmxldCBzb3J0X3VuaXEgY21wIGwgPVxuICBsZXQgcmVjIHJldl9tZXJnZSBsMSBsMiBhY2N1ID1cbiAgICBtYXRjaCBsMSwgbDIgd2l0aFxuICAgIHwgW10sIGwyIC0+IHJldl9hcHBlbmQgbDIgYWNjdVxuICAgIHwgbDEsIFtdIC0+IHJldl9hcHBlbmQgbDEgYWNjdVxuICAgIHwgaDE6OnQxLCBoMjo6dDIgLT5cbiAgICAgICAgbGV0IGMgPSBjbXAgaDEgaDIgaW5cbiAgICAgICAgaWYgYyA9IDAgdGhlbiByZXZfbWVyZ2UgdDEgdDIgKGgxOjphY2N1KVxuICAgICAgICBlbHNlIGlmIGMgPCAwXG4gICAgICAgIHRoZW4gcmV2X21lcmdlIHQxIGwyIChoMTo6YWNjdSlcbiAgICAgICAgZWxzZSByZXZfbWVyZ2UgbDEgdDIgKGgyOjphY2N1KVxuICBpblxuICBsZXQgcmVjIHJldl9tZXJnZV9yZXYgbDEgbDIgYWNjdSA9XG4gICAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgICB8IFtdLCBsMiAtPiByZXZfYXBwZW5kIGwyIGFjY3VcbiAgICB8IGwxLCBbXSAtPiByZXZfYXBwZW5kIGwxIGFjY3VcbiAgICB8IGgxOjp0MSwgaDI6OnQyIC0+XG4gICAgICAgIGxldCBjID0gY21wIGgxIGgyIGluXG4gICAgICAgIGlmIGMgPSAwIHRoZW4gcmV2X21lcmdlX3JldiB0MSB0MiAoaDE6OmFjY3UpXG4gICAgICAgIGVsc2UgaWYgYyA+IDBcbiAgICAgICAgdGhlbiByZXZfbWVyZ2VfcmV2IHQxIGwyIChoMTo6YWNjdSlcbiAgICAgICAgZWxzZSByZXZfbWVyZ2VfcmV2IGwxIHQyIChoMjo6YWNjdSlcbiAgaW5cbiAgbGV0IHJlYyBzb3J0IG4gbCA9XG4gICAgbWF0Y2ggbiwgbCB3aXRoXG4gICAgfCAyLCB4MSA6OiB4MiA6OiB0bCAtPlxuICAgICAgICBsZXQgcyA9XG4gICAgICAgICAgbGV0IGMgPSBjbXAgeDEgeDIgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MV0gZWxzZSBpZiBjIDwgMCB0aGVuIFt4MTsgeDJdIGVsc2UgW3gyOyB4MV1cbiAgICAgICAgaW5cbiAgICAgICAgKHMsIHRsKVxuICAgIHwgMywgeDEgOjogeDIgOjogeDMgOjogdGwgLT5cbiAgICAgICAgbGV0IHMgPVxuICAgICAgICAgIGxldCBjID0gY21wIHgxIHgyIGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlblxuICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDIgeDMgaW5cbiAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gyXSBlbHNlIGlmIGMgPCAwIHRoZW4gW3gyOyB4M10gZWxzZSBbeDM7IHgyXVxuICAgICAgICAgIGVsc2UgaWYgYyA8IDAgdGhlblxuICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDIgeDMgaW5cbiAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gxOyB4Ml1cbiAgICAgICAgICAgIGVsc2UgaWYgYyA8IDAgdGhlbiBbeDE7IHgyOyB4M11cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDEgeDMgaW5cbiAgICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDE7IHgyXVxuICAgICAgICAgICAgICBlbHNlIGlmIGMgPCAwIHRoZW4gW3gxOyB4MzsgeDJdXG4gICAgICAgICAgICAgIGVsc2UgW3gzOyB4MTsgeDJdXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDEgeDMgaW5cbiAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gyOyB4MV1cbiAgICAgICAgICAgIGVsc2UgaWYgYyA8IDAgdGhlbiBbeDI7IHgxOyB4M11cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDIgeDMgaW5cbiAgICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDI7IHgxXVxuICAgICAgICAgICAgICBlbHNlIGlmIGMgPCAwIHRoZW4gW3gyOyB4MzsgeDFdXG4gICAgICAgICAgICAgIGVsc2UgW3gzOyB4MjsgeDFdXG4gICAgICAgIGluXG4gICAgICAgIChzLCB0bClcbiAgICB8IG4sIGwgLT5cbiAgICAgICAgbGV0IG4xID0gbiBhc3IgMSBpblxuICAgICAgICBsZXQgbjIgPSBuIC0gbjEgaW5cbiAgICAgICAgbGV0IHMxLCBsMiA9IHJldl9zb3J0IG4xIGwgaW5cbiAgICAgICAgbGV0IHMyLCB0bCA9IHJldl9zb3J0IG4yIGwyIGluXG4gICAgICAgIChyZXZfbWVyZ2VfcmV2IHMxIHMyIFtdLCB0bClcbiAgYW5kIHJldl9zb3J0IG4gbCA9XG4gICAgbWF0Y2ggbiwgbCB3aXRoXG4gICAgfCAyLCB4MSA6OiB4MiA6OiB0bCAtPlxuICAgICAgICBsZXQgcyA9XG4gICAgICAgICAgbGV0IGMgPSBjbXAgeDEgeDIgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuIFt4MV0gZWxzZSBpZiBjID4gMCB0aGVuIFt4MTsgeDJdIGVsc2UgW3gyOyB4MV1cbiAgICAgICAgaW5cbiAgICAgICAgKHMsIHRsKVxuICAgIHwgMywgeDEgOjogeDIgOjogeDMgOjogdGwgLT5cbiAgICAgICAgbGV0IHMgPVxuICAgICAgICAgIGxldCBjID0gY21wIHgxIHgyIGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlblxuICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDIgeDMgaW5cbiAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gyXSBlbHNlIGlmIGMgPiAwIHRoZW4gW3gyOyB4M10gZWxzZSBbeDM7IHgyXVxuICAgICAgICAgIGVsc2UgaWYgYyA+IDAgdGhlblxuICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDIgeDMgaW5cbiAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gxOyB4Ml1cbiAgICAgICAgICAgIGVsc2UgaWYgYyA+IDAgdGhlbiBbeDE7IHgyOyB4M11cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDEgeDMgaW5cbiAgICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDE7IHgyXVxuICAgICAgICAgICAgICBlbHNlIGlmIGMgPiAwIHRoZW4gW3gxOyB4MzsgeDJdXG4gICAgICAgICAgICAgIGVsc2UgW3gzOyB4MTsgeDJdXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDEgeDMgaW5cbiAgICAgICAgICAgIGlmIGMgPSAwIHRoZW4gW3gyOyB4MV1cbiAgICAgICAgICAgIGVsc2UgaWYgYyA+IDAgdGhlbiBbeDI7IHgxOyB4M11cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgbGV0IGMgPSBjbXAgeDIgeDMgaW5cbiAgICAgICAgICAgICAgaWYgYyA9IDAgdGhlbiBbeDI7IHgxXVxuICAgICAgICAgICAgICBlbHNlIGlmIGMgPiAwIHRoZW4gW3gyOyB4MzsgeDFdXG4gICAgICAgICAgICAgIGVsc2UgW3gzOyB4MjsgeDFdXG4gICAgICAgIGluXG4gICAgICAgIChzLCB0bClcbiAgICB8IG4sIGwgLT5cbiAgICAgICAgbGV0IG4xID0gbiBhc3IgMSBpblxuICAgICAgICBsZXQgbjIgPSBuIC0gbjEgaW5cbiAgICAgICAgbGV0IHMxLCBsMiA9IHNvcnQgbjEgbCBpblxuICAgICAgICBsZXQgczIsIHRsID0gc29ydCBuMiBsMiBpblxuICAgICAgICAocmV2X21lcmdlIHMxIHMyIFtdLCB0bClcbiAgaW5cbiAgbGV0IGxlbiA9IGxlbmd0aCBsIGluXG4gIGlmIGxlbiA8IDIgdGhlbiBsIGVsc2UgZnN0IChzb3J0IGxlbiBsKVxuXG5cbmxldCByZWMgY29tcGFyZV9sZW5ndGhzIGwxIGwyID1cbiAgbWF0Y2ggbDEsIGwyIHdpdGhcbiAgfCBbXSwgW10gLT4gMFxuICB8IFtdLCBfIC0+IC0xXG4gIHwgXywgW10gLT4gMVxuICB8IF8gOjogbDEsIF8gOjogbDIgLT4gY29tcGFyZV9sZW5ndGhzIGwxIGwyXG47O1xuXG5sZXQgcmVjIGNvbXBhcmVfbGVuZ3RoX3dpdGggbCBuID1cbiAgbWF0Y2ggbCB3aXRoXG4gIHwgW10gLT5cbiAgICBpZiBuID0gMCB0aGVuIDAgZWxzZVxuICAgICAgaWYgbiA+IDAgdGhlbiAtMSBlbHNlIDFcbiAgfCBfIDo6IGwgLT5cbiAgICBpZiBuIDw9IDAgdGhlbiAxIGVsc2VcbiAgICAgIGNvbXBhcmVfbGVuZ3RoX3dpdGggbCAobi0xKVxuOztcblxuKCoqIHsxIENvbXBhcmlzb259ICopXG5cbigqIE5vdGU6IHdlIGFyZSAqbm90KiBzaG9ydGN1dHRpbmcgdGhlIGxpc3QgYnkgdXNpbmdcbiAgIFtMaXN0LmNvbXBhcmVfbGVuZ3Roc10gZmlyc3Q7IHRoaXMgbWF5IGJlIHNsb3dlciBvbiBsb25nIGxpc3RzXG4gICBpbW1lZGlhdGVseSBzdGFydCB3aXRoIGRpc3RpbmN0IGVsZW1lbnRzLiBJdCBpcyBhbHNvIGluY29ycmVjdCBmb3JcbiAgIFtjb21wYXJlXSBiZWxvdywgYW5kIGl0IGlzIGJldHRlciAocHJpbmNpcGxlIG9mIGxlYXN0IHN1cnByaXNlKSB0b1xuICAgdXNlIHRoZSBzYW1lIGFwcHJvYWNoIGZvciBib3RoIGZ1bmN0aW9ucy4gKilcbmxldCByZWMgZXF1YWwgZXEgbDEgbDIgPVxuICBtYXRjaCBsMSwgbDIgd2l0aFxuICB8IFtdLCBbXSAtPiB0cnVlXG4gIHwgW10sIF86Ol8gfCBfOjpfLCBbXSAtPiBmYWxzZVxuICB8IGExOjpsMSwgYTI6OmwyIC0+IGVxIGExIGEyICYmIGVxdWFsIGVxIGwxIGwyXG5cbmxldCByZWMgY29tcGFyZSBjbXAgbDEgbDIgPVxuICBtYXRjaCBsMSwgbDIgd2l0aFxuICB8IFtdLCBbXSAtPiAwXG4gIHwgW10sIF86Ol8gLT4gLTFcbiAgfCBfOjpfLCBbXSAtPiAxXG4gIHwgYTE6OmwxLCBhMjo6bDIgLT5cbiAgICBsZXQgYyA9IGNtcCBhMSBhMiBpblxuICAgIGlmIGMgPD4gMCB0aGVuIGNcbiAgICBlbHNlIGNvbXBhcmUgY21wIGwxIGwyXG5cbigqKiB7MSBJdGVyYXRvcnN9ICopXG5cbmxldCB0b19zZXEgbCA9XG4gIGxldCByZWMgYXV4IGwgKCkgPSBtYXRjaCBsIHdpdGhcbiAgICB8IFtdIC0+IFNlcS5OaWxcbiAgICB8IHggOjogdGFpbCAtPiBTZXEuQ29ucyAoeCwgYXV4IHRhaWwpXG4gIGluXG4gIGF1eCBsXG5cbmxldCBvZl9zZXEgc2VxID1cbiAgbGV0IHJlYyBkaXJlY3QgZGVwdGggc2VxIDogXyBsaXN0ID1cbiAgICBpZiBkZXB0aD0wXG4gICAgdGhlblxuICAgICAgU2VxLmZvbGRfbGVmdCAoZnVuIGFjYyB4IC0+IHg6OmFjYykgW10gc2VxXG4gICAgICB8PiByZXYgKCogdGFpbHJlYyAqKVxuICAgIGVsc2UgbWF0Y2ggc2VxKCkgd2l0aFxuICAgICAgfCBTZXEuTmlsIC0+IFtdXG4gICAgICB8IFNlcS5Db25zICh4LCBuZXh0KSAtPiB4IDo6IGRpcmVjdCAoZGVwdGgtMSkgbmV4dFxuICBpblxuICBkaXJlY3QgNTAwIHNlcVxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAyMSBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG50eXBlIHQgPSBpbl9jaGFubmVsXG5cbnR5cGUgb3Blbl9mbGFnID0gU3RkbGliLm9wZW5fZmxhZyA9XG4gIHwgT3Blbl9yZG9ubHlcbiAgfCBPcGVuX3dyb25seVxuICB8IE9wZW5fYXBwZW5kXG4gIHwgT3Blbl9jcmVhdFxuICB8IE9wZW5fdHJ1bmNcbiAgfCBPcGVuX2V4Y2xcbiAgfCBPcGVuX2JpbmFyeVxuICB8IE9wZW5fdGV4dFxuICB8IE9wZW5fbm9uYmxvY2tcblxubGV0IHN0ZGluID0gU3RkbGliLnN0ZGluXG5sZXQgb3Blbl9iaW4gPSBTdGRsaWIub3Blbl9pbl9iaW5cbmxldCBvcGVuX3RleHQgPSBTdGRsaWIub3Blbl9pblxubGV0IG9wZW5fZ2VuID0gU3RkbGliLm9wZW5faW5fZ2VuXG5cbmxldCB3aXRoX29wZW4gb3BlbmZ1biBzIGYgPVxuICBsZXQgaWMgPSBvcGVuZnVuIHMgaW5cbiAgRnVuLnByb3RlY3QgfmZpbmFsbHk6KGZ1biAoKSAtPiBTdGRsaWIuY2xvc2VfaW5fbm9lcnIgaWMpXG4gICAgKGZ1biAoKSAtPiBmIGljKVxuXG5sZXQgd2l0aF9vcGVuX2JpbiBzIGYgPVxuICB3aXRoX29wZW4gU3RkbGliLm9wZW5faW5fYmluIHMgZlxuXG5sZXQgd2l0aF9vcGVuX3RleHQgcyBmID1cbiAgd2l0aF9vcGVuIFN0ZGxpYi5vcGVuX2luIHMgZlxuXG5sZXQgd2l0aF9vcGVuX2dlbiBmbGFncyBwZXJtIHMgZiA9XG4gIHdpdGhfb3BlbiAoU3RkbGliLm9wZW5faW5fZ2VuIGZsYWdzIHBlcm0pIHMgZlxuXG5sZXQgc2VlayA9IFN0ZGxpYi5MYXJnZUZpbGUuc2Vla19pblxubGV0IHBvcyA9IFN0ZGxpYi5MYXJnZUZpbGUucG9zX2luXG5sZXQgbGVuZ3RoID0gU3RkbGliLkxhcmdlRmlsZS5pbl9jaGFubmVsX2xlbmd0aFxubGV0IGNsb3NlID0gU3RkbGliLmNsb3NlX2luXG5sZXQgY2xvc2Vfbm9lcnIgPSBTdGRsaWIuY2xvc2VfaW5fbm9lcnJcblxubGV0IGlucHV0X2NoYXIgaWMgPVxuICBtYXRjaCBTdGRsaWIuaW5wdXRfY2hhciBpYyB3aXRoXG4gIHwgYyAtPiBTb21lIGNcbiAgfCBleGNlcHRpb24gRW5kX29mX2ZpbGUgLT4gTm9uZVxuXG5sZXQgaW5wdXRfYnl0ZSBpYyA9XG4gIG1hdGNoIFN0ZGxpYi5pbnB1dF9ieXRlIGljIHdpdGhcbiAgfCBuIC0+IFNvbWUgblxuICB8IGV4Y2VwdGlvbiBFbmRfb2ZfZmlsZSAtPiBOb25lXG5cbmxldCBpbnB1dF9saW5lIGljID1cbiAgbWF0Y2ggU3RkbGliLmlucHV0X2xpbmUgaWMgd2l0aFxuICB8IHMgLT4gU29tZSBzXG4gIHwgZXhjZXB0aW9uIEVuZF9vZl9maWxlIC0+IE5vbmVcblxubGV0IGlucHV0ID0gU3RkbGliLmlucHV0XG5cbmxldCByZWFsbHlfaW5wdXQgaWMgYnVmIHBvcyBsZW4gPVxuICBtYXRjaCBTdGRsaWIucmVhbGx5X2lucHV0IGljIGJ1ZiBwb3MgbGVuIHdpdGhcbiAgfCAoKSAtPiBTb21lICgpXG4gIHwgZXhjZXB0aW9uIEVuZF9vZl9maWxlIC0+IE5vbmVcblxubGV0IHJlYWxseV9pbnB1dF9zdHJpbmcgaWMgbGVuID1cbiAgbWF0Y2ggU3RkbGliLnJlYWxseV9pbnB1dF9zdHJpbmcgaWMgbGVuIHdpdGhcbiAgfCBzIC0+IFNvbWUgc1xuICB8IGV4Y2VwdGlvbiBFbmRfb2ZfZmlsZSAtPiBOb25lXG5cbigqIFJlYWQgdXAgdG8gW2xlbl0gYnl0ZXMgaW50byBbYnVmXSwgc3RhcnRpbmcgYXQgW29mc10uIFJldHVybiB0b3RhbCBieXRlc1xuICAgcmVhZC4gKilcbmxldCByZWFkX3VwdG8gaWMgYnVmIG9mcyBsZW4gPVxuICBsZXQgcmVjIGxvb3Agb2ZzIGxlbiA9XG4gICAgaWYgbGVuID0gMCB0aGVuIG9mc1xuICAgIGVsc2UgYmVnaW5cbiAgICAgIGxldCByID0gU3RkbGliLmlucHV0IGljIGJ1ZiBvZnMgbGVuIGluXG4gICAgICBpZiByID0gMCB0aGVuXG4gICAgICAgIG9mc1xuICAgICAgZWxzZVxuICAgICAgICBsb29wIChvZnMgKyByKSAobGVuIC0gcilcbiAgICBlbmRcbiAgaW5cbiAgbG9vcCBvZnMgbGVuIC0gb2ZzXG5cbigqIEJlc3QgZWZmb3J0IGF0dGVtcHQgdG8gcmV0dXJuIGEgYnVmZmVyIHdpdGggPj0gKG9mcyArIG4pIGJ5dGVzIG9mIHN0b3JhZ2UsXG4gICBhbmQgc3VjaCB0aGF0IGl0IGNvaW5jaWRlcyB3aXRoIFtidWZdIGF0IGluZGljZXMgPCBbb2ZzXS5cblxuICAgVGhlIHJldHVybmVkIGJ1ZmZlciBpcyBlcXVhbCB0byBbYnVmXSBpdHNlbGYgaWYgaXQgYWxyZWFkeSBoYXMgc3VmZmljaWVudFxuICAgZnJlZSBzcGFjZS5cblxuICAgVGhlIHJldHVybmVkIGJ1ZmZlciBtYXkgaGF2ZSAqZmV3ZXIqIHRoYW4gW29mcyArIG5dIGJ5dGVzIG9mIHN0b3JhZ2UgaWYgdGhpc1xuICAgbnVtYmVyIGlzID4gW1N5cy5tYXhfc3RyaW5nX2xlbmd0aF0uIEhvd2V2ZXIgdGhlIHJldHVybmVkIGJ1ZmZlciB3aWxsXG4gICAqYWx3YXlzKiBoYXZlID4gW29mc10gYnl0ZXMgb2Ygc3RvcmFnZS4gSW4gdGhlIGxpbWl0aW5nIGNhc2Ugd2hlbiBbb2ZzID0gbGVuXG4gICA9IFN5cy5tYXhfc3RyaW5nX2xlbmd0aF0gKHNvIHRoYXQgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHJlc2l6ZSB0aGUgYnVmZmVyIGF0XG4gICBhbGwpLCBhbiBleGNlcHRpb24gaXMgcmFpc2VkLiAqKVxuXG5sZXQgZW5zdXJlIGJ1ZiBvZnMgbiA9XG4gIGxldCBsZW4gPSBCeXRlcy5sZW5ndGggYnVmIGluXG4gIGlmIGxlbiA+PSBvZnMgKyBuIHRoZW4gYnVmXG4gIGVsc2UgYmVnaW5cbiAgICBsZXQgbmV3X2xlbiA9IHJlZiBsZW4gaW5cbiAgICB3aGlsZSAhbmV3X2xlbiA8IG9mcyArIG4gZG9cbiAgICAgIG5ld19sZW4gOj0gMiAqICFuZXdfbGVuICsgMVxuICAgIGRvbmU7XG4gICAgbGV0IG5ld19sZW4gPSAhbmV3X2xlbiBpblxuICAgIGxldCBuZXdfbGVuID1cbiAgICAgIGlmIG5ld19sZW4gPD0gU3lzLm1heF9zdHJpbmdfbGVuZ3RoIHRoZW5cbiAgICAgICAgbmV3X2xlblxuICAgICAgZWxzZSBpZiBvZnMgPCBTeXMubWF4X3N0cmluZ19sZW5ndGggdGhlblxuICAgICAgICBTeXMubWF4X3N0cmluZ19sZW5ndGhcbiAgICAgIGVsc2VcbiAgICAgICAgZmFpbHdpdGggXCJJbl9jaGFubmVsLmlucHV0X2FsbDogY2hhbm5lbCBjb250ZW50IFxcXG4gICAgICAgICAgICAgICAgICBpcyBsYXJnZXIgdGhhbiBtYXhpbXVtIHN0cmluZyBsZW5ndGhcIlxuICAgIGluXG4gICAgbGV0IG5ld19idWYgPSBCeXRlcy5jcmVhdGUgbmV3X2xlbiBpblxuICAgIEJ5dGVzLmJsaXQgYnVmIDAgbmV3X2J1ZiAwIG9mcztcbiAgICBuZXdfYnVmXG4gIGVuZFxuXG5sZXQgaW5wdXRfYWxsIGljID1cbiAgbGV0IGNodW5rX3NpemUgPSA2NTUzNiBpbiAoKiBJT19CVUZGRVJfU0laRSAqKVxuICBsZXQgaW5pdGlhbF9zaXplID1cbiAgICB0cnlcbiAgICAgIFN0ZGxpYi5pbl9jaGFubmVsX2xlbmd0aCBpYyAtIFN0ZGxpYi5wb3NfaW4gaWNcbiAgICB3aXRoIFN5c19lcnJvciBfIC0+XG4gICAgICAtMVxuICBpblxuICBsZXQgaW5pdGlhbF9zaXplID0gaWYgaW5pdGlhbF9zaXplIDwgMCB0aGVuIGNodW5rX3NpemUgZWxzZSBpbml0aWFsX3NpemUgaW5cbiAgbGV0IGluaXRpYWxfc2l6ZSA9XG4gICAgaWYgaW5pdGlhbF9zaXplIDw9IFN5cy5tYXhfc3RyaW5nX2xlbmd0aCB0aGVuXG4gICAgICBpbml0aWFsX3NpemVcbiAgICBlbHNlXG4gICAgICBTeXMubWF4X3N0cmluZ19sZW5ndGhcbiAgaW5cbiAgbGV0IGJ1ZiA9IEJ5dGVzLmNyZWF0ZSBpbml0aWFsX3NpemUgaW5cbiAgbGV0IG5yZWFkID0gcmVhZF91cHRvIGljIGJ1ZiAwIGluaXRpYWxfc2l6ZSBpblxuICBpZiBucmVhZCA8IGluaXRpYWxfc2l6ZSB0aGVuICgqIEVPRiByZWFjaGVkLCBidWZmZXIgcGFydGlhbGx5IGZpbGxlZCAqKVxuICAgIEJ5dGVzLnN1Yl9zdHJpbmcgYnVmIDAgbnJlYWRcbiAgZWxzZSBiZWdpbiAoKiBucmVhZCA9IGluaXRpYWxfc2l6ZSwgbWF5YmUgRU9GIHJlYWNoZWQgKilcbiAgICBtYXRjaCBTdGRsaWIuaW5wdXRfY2hhciBpYyB3aXRoXG4gICAgfCBleGNlcHRpb24gRW5kX29mX2ZpbGUgLT5cbiAgICAgICAgKCogRU9GIHJlYWNoZWQsIGJ1ZmZlciBpcyBjb21wbGV0ZWx5IGZpbGxlZCAqKVxuICAgICAgICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIGJ1ZlxuICAgIHwgYyAtPlxuICAgICAgICAoKiBFT0Ygbm90IHJlYWNoZWQgKilcbiAgICAgICAgbGV0IHJlYyBsb29wIGJ1ZiBvZnMgPVxuICAgICAgICAgIGxldCBidWYgPSBlbnN1cmUgYnVmIG9mcyBjaHVua19zaXplIGluXG4gICAgICAgICAgbGV0IHJlbSA9IEJ5dGVzLmxlbmd0aCBidWYgLSBvZnMgaW5cbiAgICAgICAgICAoKiBbcmVtXSBjYW4gYmUgPCBbY2h1bmtfc2l6ZV0gaWYgYnVmZmVyIHNpemUgY2xvc2UgdG9cbiAgICAgICAgICAgICBbU3lzLm1heF9zdHJpbmdfbGVuZ3RoXSAqKVxuICAgICAgICAgIGxldCByID0gcmVhZF91cHRvIGljIGJ1ZiBvZnMgcmVtIGluXG4gICAgICAgICAgaWYgciA8IHJlbSB0aGVuICgqIEVPRiByZWFjaGVkICopXG4gICAgICAgICAgICBCeXRlcy5zdWJfc3RyaW5nIGJ1ZiAwIChvZnMgKyByKVxuICAgICAgICAgIGVsc2UgKCogciA9IHJlbSAqKVxuICAgICAgICAgICAgbG9vcCBidWYgKG9mcyArIHJlbSlcbiAgICAgICAgaW5cbiAgICAgICAgbGV0IGJ1ZiA9IGVuc3VyZSBidWYgbnJlYWQgKGNodW5rX3NpemUgKyAxKSBpblxuICAgICAgICBCeXRlcy5zZXQgYnVmIG5yZWFkIGM7XG4gICAgICAgIGxvb3AgYnVmIChucmVhZCArIDEpXG4gIGVuZFxuXG5sZXQgc2V0X2JpbmFyeV9tb2RlID0gU3RkbGliLnNldF9iaW5hcnlfbW9kZV9pblxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAyMSBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG50eXBlIHQgPSBvdXRfY2hhbm5lbFxuXG50eXBlIG9wZW5fZmxhZyA9IFN0ZGxpYi5vcGVuX2ZsYWcgPVxuICB8IE9wZW5fcmRvbmx5XG4gIHwgT3Blbl93cm9ubHlcbiAgfCBPcGVuX2FwcGVuZFxuICB8IE9wZW5fY3JlYXRcbiAgfCBPcGVuX3RydW5jXG4gIHwgT3Blbl9leGNsXG4gIHwgT3Blbl9iaW5hcnlcbiAgfCBPcGVuX3RleHRcbiAgfCBPcGVuX25vbmJsb2NrXG5cbmxldCBzdGRvdXQgPSBTdGRsaWIuc3Rkb3V0XG5sZXQgc3RkZXJyID0gU3RkbGliLnN0ZGVyclxubGV0IG9wZW5fYmluID0gU3RkbGliLm9wZW5fb3V0X2JpblxubGV0IG9wZW5fdGV4dCA9IFN0ZGxpYi5vcGVuX291dFxubGV0IG9wZW5fZ2VuID0gU3RkbGliLm9wZW5fb3V0X2dlblxuXG5sZXQgd2l0aF9vcGVuIG9wZW5mdW4gcyBmID1cbiAgbGV0IG9jID0gb3BlbmZ1biBzIGluXG4gIEZ1bi5wcm90ZWN0IH5maW5hbGx5OihmdW4gKCkgLT4gU3RkbGliLmNsb3NlX291dF9ub2VyciBvYylcbiAgICAoZnVuICgpIC0+IGYgb2MpXG5cbmxldCB3aXRoX29wZW5fYmluIHMgZiA9XG4gIHdpdGhfb3BlbiBTdGRsaWIub3Blbl9vdXRfYmluIHMgZlxuXG5sZXQgd2l0aF9vcGVuX3RleHQgcyBmID1cbiAgd2l0aF9vcGVuIFN0ZGxpYi5vcGVuX291dCBzIGZcblxubGV0IHdpdGhfb3Blbl9nZW4gZmxhZ3MgcGVybSBzIGYgPVxuICB3aXRoX29wZW4gKFN0ZGxpYi5vcGVuX291dF9nZW4gZmxhZ3MgcGVybSkgcyBmXG5cbmxldCBzZWVrID0gU3RkbGliLkxhcmdlRmlsZS5zZWVrX291dFxubGV0IHBvcyA9IFN0ZGxpYi5MYXJnZUZpbGUucG9zX291dFxubGV0IGxlbmd0aCA9IFN0ZGxpYi5MYXJnZUZpbGUub3V0X2NoYW5uZWxfbGVuZ3RoXG5sZXQgY2xvc2UgPSBTdGRsaWIuY2xvc2Vfb3V0XG5sZXQgY2xvc2Vfbm9lcnIgPSBTdGRsaWIuY2xvc2Vfb3V0X25vZXJyXG5sZXQgZmx1c2ggPSBTdGRsaWIuZmx1c2hcbmxldCBmbHVzaF9hbGwgPSBTdGRsaWIuZmx1c2hfYWxsXG5sZXQgb3V0cHV0X2NoYXIgPSBTdGRsaWIub3V0cHV0X2NoYXJcbmxldCBvdXRwdXRfYnl0ZSA9IFN0ZGxpYi5vdXRwdXRfYnl0ZVxubGV0IG91dHB1dF9zdHJpbmcgPSBTdGRsaWIub3V0cHV0X3N0cmluZ1xubGV0IG91dHB1dF9ieXRlcyA9IFN0ZGxpYi5vdXRwdXRfYnl0ZXNcbmxldCBvdXRwdXQgPSBTdGRsaWIub3V0cHV0XG5sZXQgb3V0cHV0X3N1YnN0cmluZyA9IFN0ZGxpYi5vdXRwdXRfc3Vic3RyaW5nXG5sZXQgc2V0X2JpbmFyeV9tb2RlID0gU3RkbGliLnNldF9iaW5hcnlfbW9kZV9vdXRcblxuZXh0ZXJuYWwgc2V0X2J1ZmZlcmVkIDogdCAtPiBib29sIC0+IHVuaXQgPSBcImNhbWxfbWxfc2V0X2J1ZmZlcmVkXCJcblxuZXh0ZXJuYWwgaXNfYnVmZmVyZWQgOiB0IC0+IGJvb2wgPSBcImNhbWxfbWxfaXNfYnVmZmVyZWRcIlxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICBHYWJyaWVsIFNjaGVyZXIsIHByb2pldCBQYXJzaWZhbCwgSU5SSUEgU2FjbGF5ICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxOSBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG50eXBlICgnYSwgJ2IpIHQgPSBMZWZ0IG9mICdhIHwgUmlnaHQgb2YgJ2JcblxubGV0IGxlZnQgdiA9IExlZnQgdlxubGV0IHJpZ2h0IHYgPSBSaWdodCB2XG5cbmxldCBpc19sZWZ0ID0gZnVuY3Rpb25cbnwgTGVmdCBfIC0+IHRydWVcbnwgUmlnaHQgXyAtPiBmYWxzZVxuXG5sZXQgaXNfcmlnaHQgPSBmdW5jdGlvblxufCBMZWZ0IF8gLT4gZmFsc2VcbnwgUmlnaHQgXyAtPiB0cnVlXG5cbmxldCBmaW5kX2xlZnQgPSBmdW5jdGlvblxufCBMZWZ0IHYgLT4gU29tZSB2XG58IFJpZ2h0IF8gLT4gTm9uZVxuXG5sZXQgZmluZF9yaWdodCA9IGZ1bmN0aW9uXG58IExlZnQgXyAtPiBOb25lXG58IFJpZ2h0IHYgLT4gU29tZSB2XG5cbmxldCBtYXBfbGVmdCBmID0gZnVuY3Rpb25cbnwgTGVmdCB2IC0+IExlZnQgKGYgdilcbnwgUmlnaHQgXyBhcyBlIC0+IGVcblxubGV0IG1hcF9yaWdodCBmID0gZnVuY3Rpb25cbnwgTGVmdCBfIGFzIGUgLT4gZVxufCBSaWdodCB2IC0+IFJpZ2h0IChmIHYpXG5cbmxldCBtYXAgfmxlZnQgfnJpZ2h0ID0gZnVuY3Rpb25cbnwgTGVmdCB2IC0+IExlZnQgKGxlZnQgdilcbnwgUmlnaHQgdiAtPiBSaWdodCAocmlnaHQgdilcblxubGV0IGZvbGQgfmxlZnQgfnJpZ2h0ID0gZnVuY3Rpb25cbnwgTGVmdCB2IC0+IGxlZnQgdlxufCBSaWdodCB2IC0+IHJpZ2h0IHZcblxubGV0IGl0ZXIgPSBmb2xkXG5cbmxldCBmb3JfYWxsID0gZm9sZFxuXG5sZXQgZXF1YWwgfmxlZnQgfnJpZ2h0IGUxIGUyID0gbWF0Y2ggZTEsIGUyIHdpdGhcbnwgTGVmdCB2MSwgTGVmdCB2MiAtPiBsZWZ0IHYxIHYyXG58IFJpZ2h0IHYxLCBSaWdodCB2MiAtPiByaWdodCB2MSB2MlxufCBMZWZ0IF8sIFJpZ2h0IF8gfCBSaWdodCBfLCBMZWZ0IF8gLT4gZmFsc2VcblxubGV0IGNvbXBhcmUgfmxlZnQgfnJpZ2h0IGUxIGUyID0gbWF0Y2ggZTEsIGUyIHdpdGhcbnwgTGVmdCB2MSwgTGVmdCB2MiAtPiBsZWZ0IHYxIHYyXG58IFJpZ2h0IHYxLCBSaWdodCB2MiAtPiByaWdodCB2MSB2MlxufCBMZWZ0IF8sIFJpZ2h0IF8gLT4gKC0xKVxufCBSaWdodCBfLCBMZWZ0IF8gLT4gMVxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBNb2R1bGUgW05hdGl2ZWludF06IHByb2Nlc3Nvci1uYXRpdmUgaW50ZWdlcnMgKilcblxuZXh0ZXJuYWwgbmVnOiBuYXRpdmVpbnQgLT4gbmF0aXZlaW50ID0gXCIlbmF0aXZlaW50X25lZ1wiXG5leHRlcm5hbCBhZGQ6IG5hdGl2ZWludCAtPiBuYXRpdmVpbnQgLT4gbmF0aXZlaW50ID0gXCIlbmF0aXZlaW50X2FkZFwiXG5leHRlcm5hbCBzdWI6IG5hdGl2ZWludCAtPiBuYXRpdmVpbnQgLT4gbmF0aXZlaW50ID0gXCIlbmF0aXZlaW50X3N1YlwiXG5leHRlcm5hbCBtdWw6IG5hdGl2ZWludCAtPiBuYXRpdmVpbnQgLT4gbmF0aXZlaW50ID0gXCIlbmF0aXZlaW50X211bFwiXG5leHRlcm5hbCBkaXY6IG5hdGl2ZWludCAtPiBuYXRpdmVpbnQgLT4gbmF0aXZlaW50ID0gXCIlbmF0aXZlaW50X2RpdlwiXG5leHRlcm5hbCByZW06IG5hdGl2ZWludCAtPiBuYXRpdmVpbnQgLT4gbmF0aXZlaW50ID0gXCIlbmF0aXZlaW50X21vZFwiXG5leHRlcm5hbCBsb2dhbmQ6IG5hdGl2ZWludCAtPiBuYXRpdmVpbnQgLT4gbmF0aXZlaW50ID0gXCIlbmF0aXZlaW50X2FuZFwiXG5leHRlcm5hbCBsb2dvcjogbmF0aXZlaW50IC0+IG5hdGl2ZWludCAtPiBuYXRpdmVpbnQgPSBcIiVuYXRpdmVpbnRfb3JcIlxuZXh0ZXJuYWwgbG9neG9yOiBuYXRpdmVpbnQgLT4gbmF0aXZlaW50IC0+IG5hdGl2ZWludCA9IFwiJW5hdGl2ZWludF94b3JcIlxuZXh0ZXJuYWwgc2hpZnRfbGVmdDogbmF0aXZlaW50IC0+IGludCAtPiBuYXRpdmVpbnQgPSBcIiVuYXRpdmVpbnRfbHNsXCJcbmV4dGVybmFsIHNoaWZ0X3JpZ2h0OiBuYXRpdmVpbnQgLT4gaW50IC0+IG5hdGl2ZWludCA9IFwiJW5hdGl2ZWludF9hc3JcIlxuZXh0ZXJuYWwgc2hpZnRfcmlnaHRfbG9naWNhbDogbmF0aXZlaW50IC0+IGludCAtPiBuYXRpdmVpbnQgPSBcIiVuYXRpdmVpbnRfbHNyXCJcbmV4dGVybmFsIG9mX2ludDogaW50IC0+IG5hdGl2ZWludCA9IFwiJW5hdGl2ZWludF9vZl9pbnRcIlxuZXh0ZXJuYWwgdG9faW50OiBuYXRpdmVpbnQgLT4gaW50ID0gXCIlbmF0aXZlaW50X3RvX2ludFwiXG5leHRlcm5hbCBvZl9mbG9hdCA6IGZsb2F0IC0+IG5hdGl2ZWludFxuICA9IFwiY2FtbF9uYXRpdmVpbnRfb2ZfZmxvYXRcIiBcImNhbWxfbmF0aXZlaW50X29mX2Zsb2F0X3VuYm94ZWRcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgdG9fZmxvYXQgOiBuYXRpdmVpbnQgLT4gZmxvYXRcbiAgPSBcImNhbWxfbmF0aXZlaW50X3RvX2Zsb2F0XCIgXCJjYW1sX25hdGl2ZWludF90b19mbG9hdF91bmJveGVkXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIG9mX2ludDMyOiBpbnQzMiAtPiBuYXRpdmVpbnQgPSBcIiVuYXRpdmVpbnRfb2ZfaW50MzJcIlxuZXh0ZXJuYWwgdG9faW50MzI6IG5hdGl2ZWludCAtPiBpbnQzMiA9IFwiJW5hdGl2ZWludF90b19pbnQzMlwiXG5cbmxldCB6ZXJvID0gMG5cbmxldCBvbmUgPSAxblxubGV0IG1pbnVzX29uZSA9IC0xblxubGV0IHN1Y2MgbiA9IGFkZCBuIDFuXG5sZXQgcHJlZCBuID0gc3ViIG4gMW5cbmxldCBhYnMgbiA9IGlmIG4gPj0gMG4gdGhlbiBuIGVsc2UgbmVnIG5cbmxldCBzaXplID0gU3lzLndvcmRfc2l6ZVxubGV0IG1pbl9pbnQgPSBzaGlmdF9sZWZ0IDFuIChzaXplIC0gMSlcbmxldCBtYXhfaW50ID0gc3ViIG1pbl9pbnQgMW5cbmxldCBsb2dub3QgbiA9IGxvZ3hvciBuICgtMW4pXG5cbmxldCB1bnNpZ25lZF90b19pbnQgPVxuICBsZXQgbWF4X2ludCA9IG9mX2ludCBTdGRsaWIubWF4X2ludCBpblxuICBmdW4gbiAtPlxuICAgIGlmIGNvbXBhcmUgemVybyBuIDw9IDAgJiYgY29tcGFyZSBuIG1heF9pbnQgPD0gMCB0aGVuXG4gICAgICBTb21lICh0b19pbnQgbilcbiAgICBlbHNlXG4gICAgICBOb25lXG5cbmV4dGVybmFsIGZvcm1hdCA6IHN0cmluZyAtPiBuYXRpdmVpbnQgLT4gc3RyaW5nID0gXCJjYW1sX25hdGl2ZWludF9mb3JtYXRcIlxubGV0IHRvX3N0cmluZyBuID0gZm9ybWF0IFwiJWRcIiBuXG5cbmV4dGVybmFsIG9mX3N0cmluZzogc3RyaW5nIC0+IG5hdGl2ZWludCA9IFwiY2FtbF9uYXRpdmVpbnRfb2Zfc3RyaW5nXCJcblxubGV0IG9mX3N0cmluZ19vcHQgcyA9XG4gICgqIFRPRE86IGV4cG9zZSBhIG5vbi1yYWlzaW5nIHByaW1pdGl2ZSBkaXJlY3RseS4gKilcbiAgdHJ5IFNvbWUgKG9mX3N0cmluZyBzKVxuICB3aXRoIEZhaWx1cmUgXyAtPiBOb25lXG5cbnR5cGUgdCA9IG5hdGl2ZWludFxuXG5sZXQgY29tcGFyZSAoeDogdCkgKHk6IHQpID0gU3RkbGliLmNvbXBhcmUgeCB5XG5sZXQgZXF1YWwgKHg6IHQpICh5OiB0KSA9IGNvbXBhcmUgeCB5ID0gMFxuXG5sZXQgdW5zaWduZWRfY29tcGFyZSBuIG0gPVxuICBjb21wYXJlIChzdWIgbiBtaW5faW50KSAoc3ViIG0gbWluX2ludClcblxubGV0IG1pbiB4IHkgOiB0ID0gaWYgeCA8PSB5IHRoZW4geCBlbHNlIHlcbmxldCBtYXggeCB5IDogdCA9IGlmIHggPj0geSB0aGVuIHggZWxzZSB5XG5cbigqIFVuc2lnbmVkIGRpdmlzaW9uIGZyb20gc2lnbmVkIGRpdmlzaW9uIG9mIHRoZSBzYW1lXG4gICBiaXRuZXNzLiBTZWUgV2FycmVuIEpyLiwgSGVucnkgUy4gKDIwMTMpLiBIYWNrZXIncyBEZWxpZ2h0ICgyIGVkLiksIFNlYyA5LTMuXG4qKVxubGV0IHVuc2lnbmVkX2RpdiBuIGQgPVxuICBpZiBkIDwgemVybyB0aGVuXG4gICAgaWYgdW5zaWduZWRfY29tcGFyZSBuIGQgPCAwIHRoZW4gemVybyBlbHNlIG9uZVxuICBlbHNlXG4gICAgbGV0IHEgPSBzaGlmdF9sZWZ0IChkaXYgKHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgbiAxKSBkKSAxIGluXG4gICAgbGV0IHIgPSBzdWIgbiAobXVsIHEgZCkgaW5cbiAgICBpZiB1bnNpZ25lZF9jb21wYXJlIHIgZCA+PSAwIHRoZW4gc3VjYyBxIGVsc2UgcVxuXG5sZXQgdW5zaWduZWRfcmVtIG4gZCA9XG4gIHN1YiBuIChtdWwgKHVuc2lnbmVkX2RpdiBuIGQpIGQpXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIE9wZXJhdGlvbnMgb24gaW50ZXJuYWwgcmVwcmVzZW50YXRpb25zIG9mIHZhbHVlcyAqKVxuXG50eXBlIHRcblxudHlwZSByYXdfZGF0YSA9IG5hdGl2ZWludFxuXG5leHRlcm5hbCByZXByIDogJ2EgLT4gdCA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIG9iaiA6IHQgLT4gJ2EgPSBcIiVpZGVudGl0eVwiXG5leHRlcm5hbCBtYWdpYyA6ICdhIC0+ICdiID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgaXNfaW50IDogdCAtPiBib29sID0gXCIlb2JqX2lzX2ludFwiXG5sZXQgW0BpbmxpbmUgYWx3YXlzXSBpc19ibG9jayBhID0gbm90IChpc19pbnQgYSlcbmV4dGVybmFsIHRhZyA6IHQgLT4gaW50ID0gXCJjYW1sX29ial90YWdcIiBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgc2V0X3RhZyA6IHQgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfb2JqX3NldF90YWdcIlxuZXh0ZXJuYWwgc2l6ZSA6IHQgLT4gaW50ID0gXCIlb2JqX3NpemVcIlxuZXh0ZXJuYWwgcmVhY2hhYmxlX3dvcmRzIDogdCAtPiBpbnQgPSBcImNhbWxfb2JqX3JlYWNoYWJsZV93b3Jkc1wiXG5leHRlcm5hbCBmaWVsZCA6IHQgLT4gaW50IC0+IHQgPSBcIiVvYmpfZmllbGRcIlxuZXh0ZXJuYWwgc2V0X2ZpZWxkIDogdCAtPiBpbnQgLT4gdCAtPiB1bml0ID0gXCIlb2JqX3NldF9maWVsZFwiXG5leHRlcm5hbCBmbG9hdGFycmF5X2dldCA6IGZsb2F0YXJyYXkgLT4gaW50IC0+IGZsb2F0ID0gXCJjYW1sX2Zsb2F0YXJyYXlfZ2V0XCJcbmV4dGVybmFsIGZsb2F0YXJyYXlfc2V0IDpcbiAgICBmbG9hdGFycmF5IC0+IGludCAtPiBmbG9hdCAtPiB1bml0ID0gXCJjYW1sX2Zsb2F0YXJyYXlfc2V0XCJcbmxldCBbQGlubGluZSBhbHdheXNdIGRvdWJsZV9maWVsZCB4IGkgPSBmbG9hdGFycmF5X2dldCAob2JqIHggOiBmbG9hdGFycmF5KSBpXG5sZXQgW0BpbmxpbmUgYWx3YXlzXSBzZXRfZG91YmxlX2ZpZWxkIHggaSB2ID1cbiAgZmxvYXRhcnJheV9zZXQgKG9iaiB4IDogZmxvYXRhcnJheSkgaSB2XG5leHRlcm5hbCByYXdfZmllbGQgOiB0IC0+IGludCAtPiByYXdfZGF0YSA9IFwiY2FtbF9vYmpfcmF3X2ZpZWxkXCJcbmV4dGVybmFsIHNldF9yYXdfZmllbGQgOiB0IC0+IGludCAtPiByYXdfZGF0YSAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9vYmpfc2V0X3Jhd19maWVsZFwiXG5cbmV4dGVybmFsIG5ld19ibG9jayA6IGludCAtPiBpbnQgLT4gdCA9IFwiY2FtbF9vYmpfYmxvY2tcIlxuZXh0ZXJuYWwgZHVwIDogdCAtPiB0ID0gXCJjYW1sX29ial9kdXBcIlxuZXh0ZXJuYWwgdHJ1bmNhdGUgOiB0IC0+IGludCAtPiB1bml0ID0gXCJjYW1sX29ial90cnVuY2F0ZVwiXG5leHRlcm5hbCBhZGRfb2Zmc2V0IDogdCAtPiBJbnQzMi50IC0+IHQgPSBcImNhbWxfb2JqX2FkZF9vZmZzZXRcIlxuZXh0ZXJuYWwgd2l0aF90YWcgOiBpbnQgLT4gdCAtPiB0ID0gXCJjYW1sX29ial93aXRoX3RhZ1wiXG5cbmxldCBmaXJzdF9ub25fY29uc3RhbnRfY29uc3RydWN0b3JfdGFnID0gMFxubGV0IGxhc3Rfbm9uX2NvbnN0YW50X2NvbnN0cnVjdG9yX3RhZyA9IDI0NVxuXG5sZXQgbGF6eV90YWcgPSAyNDZcbmxldCBjbG9zdXJlX3RhZyA9IDI0N1xubGV0IG9iamVjdF90YWcgPSAyNDhcbmxldCBpbmZpeF90YWcgPSAyNDlcbmxldCBmb3J3YXJkX3RhZyA9IDI1MFxuXG5sZXQgbm9fc2Nhbl90YWcgPSAyNTFcblxubGV0IGFic3RyYWN0X3RhZyA9IDI1MVxubGV0IHN0cmluZ190YWcgPSAyNTJcbmxldCBkb3VibGVfdGFnID0gMjUzXG5sZXQgZG91YmxlX2FycmF5X3RhZyA9IDI1NFxubGV0IGN1c3RvbV90YWcgPSAyNTVcbmxldCBmaW5hbF90YWcgPSBjdXN0b21fdGFnXG5cblxubGV0IGludF90YWcgPSAxMDAwXG5sZXQgb3V0X29mX2hlYXBfdGFnID0gMTAwMVxubGV0IHVuYWxpZ25lZF90YWcgPSAxMDAyXG5cbm1vZHVsZSBDbG9zdXJlID0gc3RydWN0XG4gIHR5cGUgaW5mbyA9IHtcbiAgICBhcml0eTogaW50O1xuICAgIHN0YXJ0X2VudjogaW50O1xuICB9XG5cbiAgbGV0IGluZm9fb2ZfcmF3IChpbmZvIDogbmF0aXZlaW50KSA9XG4gICAgbGV0IG9wZW4gTmF0aXZlaW50IGluXG4gICAgbGV0IGFyaXR5ID1cbiAgICAgICgqIHNpZ25lZDogbmVnYXRpdmUgZm9yIHR1cGxlZCBmdW5jdGlvbnMgKilcbiAgICAgIGlmIFN5cy53b3JkX3NpemUgPSA2NCB0aGVuXG4gICAgICAgIHRvX2ludCAoc2hpZnRfcmlnaHQgaW5mbyA1NilcbiAgICAgIGVsc2VcbiAgICAgICAgdG9faW50IChzaGlmdF9yaWdodCBpbmZvIDI0KVxuICAgIGluXG4gICAgbGV0IHN0YXJ0X2VudiA9XG4gICAgICAoKiBzdGFydF9lbnYgaXMgdW5zaWduZWQsIGJ1dCB3ZSBrbm93IGl0IGNhbiBhbHdheXMgZml0IGFuIE9DYW1sXG4gICAgICAgICBpbnRlZ2VyIHNvIHdlIHVzZSBbdG9faW50XSBpbnN0ZWFkIG9mIFt1bnNpZ25lZF90b19pbnRdLiAqKVxuICAgICAgdG9faW50IChzaGlmdF9yaWdodF9sb2dpY2FsIChzaGlmdF9sZWZ0IGluZm8gOCkgOSkgaW5cbiAgICB7IGFyaXR5OyBzdGFydF9lbnYgfVxuXG4gICgqIG5vdGU6IHdlIGV4cGVjdCBhIGNsb3N1cmUsIG5vdCBhbiBpbmZpeCBwb2ludGVyICopXG4gIGxldCBpbmZvIChvYmogOiB0KSA9XG4gICAgYXNzZXJ0ICh0YWcgb2JqID0gY2xvc3VyZV90YWcpO1xuICAgIGluZm9fb2ZfcmF3IChyYXdfZmllbGQgb2JqIDEpXG5lbmRcblxubW9kdWxlIEV4dGVuc2lvbl9jb25zdHJ1Y3RvciA9XG5zdHJ1Y3RcbiAgdHlwZSB0ID0gZXh0ZW5zaW9uX2NvbnN0cnVjdG9yXG4gIGxldCBvZl92YWwgeCA9XG4gICAgbGV0IHggPSByZXByIHggaW5cbiAgICBsZXQgc2xvdCA9XG4gICAgICBpZiAoaXNfYmxvY2sgeCkgJiYgKHRhZyB4KSA8PiBvYmplY3RfdGFnICYmIChzaXplIHgpID49IDEgdGhlbiBmaWVsZCB4IDBcbiAgICAgIGVsc2UgeFxuICAgIGluXG4gICAgbGV0IG5hbWUgPVxuICAgICAgaWYgKGlzX2Jsb2NrIHNsb3QpICYmICh0YWcgc2xvdCkgPSBvYmplY3RfdGFnIHRoZW4gZmllbGQgc2xvdCAwXG4gICAgICBlbHNlIGludmFsaWRfYXJnIFwiT2JqLmV4dGVuc2lvbl9jb25zdHJ1Y3RvclwiXG4gICAgaW5cbiAgICAgIGlmICh0YWcgbmFtZSkgPSBzdHJpbmdfdGFnIHRoZW4gKG9iaiBzbG90IDogdClcbiAgICAgIGVsc2UgaW52YWxpZF9hcmcgXCJPYmouZXh0ZW5zaW9uX2NvbnN0cnVjdG9yXCJcblxuICBsZXQgW0BpbmxpbmUgYWx3YXlzXSBuYW1lIChzbG90IDogdCkgPVxuICAgIChvYmogKGZpZWxkIChyZXByIHNsb3QpIDApIDogc3RyaW5nKVxuXG4gIGxldCBbQGlubGluZSBhbHdheXNdIGlkIChzbG90IDogdCkgPVxuICAgIChvYmogKGZpZWxkIChyZXByIHNsb3QpIDEpIDogaW50KVxuZW5kXG5cbmxldCBleHRlbnNpb25fY29uc3RydWN0b3IgPSBFeHRlbnNpb25fY29uc3RydWN0b3Iub2ZfdmFsXG5sZXQgZXh0ZW5zaW9uX25hbWUgPSBFeHRlbnNpb25fY29uc3RydWN0b3IubmFtZVxubGV0IGV4dGVuc2lvbl9pZCA9IEV4dGVuc2lvbl9jb25zdHJ1Y3Rvci5pZFxuXG5tb2R1bGUgRXBoZW1lcm9uID0gc3RydWN0XG4gIHR5cGUgb2JqX3QgPSB0XG5cbiAgdHlwZSB0ICgqKiBlcGhlbWVyb24gKilcblxuICAgKCoqIFRvIGNoYW5nZSBpbiBzeW5jIHdpdGggd2Vhay5oICopXG4gIGxldCBhZGRpdGlvbmFsX3ZhbHVlcyA9IDJcbiAgbGV0IG1heF9lcGhlX2xlbmd0aCA9IFN5cy5tYXhfYXJyYXlfbGVuZ3RoIC0gYWRkaXRpb25hbF92YWx1ZXNcblxuICBleHRlcm5hbCBjcmVhdGUgOiBpbnQgLT4gdCA9IFwiY2FtbF9lcGhlX2NyZWF0ZVwiOztcbiAgbGV0IGNyZWF0ZSBsID1cbiAgICBpZiBub3QgKDAgPD0gbCAmJiBsIDw9IG1heF9lcGhlX2xlbmd0aCkgdGhlblxuICAgICAgaW52YWxpZF9hcmcgXCJPYmouRXBoZW1lcm9uLmNyZWF0ZVwiO1xuICAgIGNyZWF0ZSBsXG5cbiAgbGV0IGxlbmd0aCB4ID0gc2l6ZShyZXByIHgpIC0gYWRkaXRpb25hbF92YWx1ZXNcblxuICBsZXQgcmFpc2VfaWZfaW52YWxpZF9vZmZzZXQgZSBvIG1zZyA9XG4gICAgaWYgbm90ICgwIDw9IG8gJiYgbyA8IGxlbmd0aCBlKSB0aGVuXG4gICAgICBpbnZhbGlkX2FyZyBtc2dcblxuICBleHRlcm5hbCBnZXRfa2V5OiB0IC0+IGludCAtPiBvYmpfdCBvcHRpb24gPSBcImNhbWxfZXBoZV9nZXRfa2V5XCJcbiAgbGV0IGdldF9rZXkgZSBvID1cbiAgICByYWlzZV9pZl9pbnZhbGlkX29mZnNldCBlIG8gXCJPYmouRXBoZW1lcm9uLmdldF9rZXlcIjtcbiAgICBnZXRfa2V5IGUgb1xuXG4gIGV4dGVybmFsIGdldF9rZXlfY29weTogdCAtPiBpbnQgLT4gb2JqX3Qgb3B0aW9uID0gXCJjYW1sX2VwaGVfZ2V0X2tleV9jb3B5XCJcbiAgbGV0IGdldF9rZXlfY29weSBlIG8gPVxuICAgIHJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0IGUgbyBcIk9iai5FcGhlbWVyb24uZ2V0X2tleV9jb3B5XCI7XG4gICAgZ2V0X2tleV9jb3B5IGUgb1xuXG4gIGV4dGVybmFsIHNldF9rZXk6IHQgLT4gaW50IC0+IG9ial90IC0+IHVuaXQgPSBcImNhbWxfZXBoZV9zZXRfa2V5XCJcbiAgbGV0IHNldF9rZXkgZSBvIHggPVxuICAgIHJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0IGUgbyBcIk9iai5FcGhlbWVyb24uc2V0X2tleVwiO1xuICAgIHNldF9rZXkgZSBvIHhcblxuICBleHRlcm5hbCB1bnNldF9rZXk6IHQgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfZXBoZV91bnNldF9rZXlcIlxuICBsZXQgdW5zZXRfa2V5IGUgbyA9XG4gICAgcmFpc2VfaWZfaW52YWxpZF9vZmZzZXQgZSBvIFwiT2JqLkVwaGVtZXJvbi51bnNldF9rZXlcIjtcbiAgICB1bnNldF9rZXkgZSBvXG5cbiAgZXh0ZXJuYWwgY2hlY2tfa2V5OiB0IC0+IGludCAtPiBib29sID0gXCJjYW1sX2VwaGVfY2hlY2tfa2V5XCJcbiAgbGV0IGNoZWNrX2tleSBlIG8gPVxuICAgIHJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0IGUgbyBcIk9iai5FcGhlbWVyb24uY2hlY2tfa2V5XCI7XG4gICAgY2hlY2tfa2V5IGUgb1xuXG4gIGV4dGVybmFsIGJsaXRfa2V5IDogdCAtPiBpbnQgLT4gdCAtPiBpbnQgLT4gaW50IC0+IHVuaXRcbiAgICA9IFwiY2FtbF9lcGhlX2JsaXRfa2V5XCJcblxuICBsZXQgYmxpdF9rZXkgZTEgbzEgZTIgbzIgbCA9XG4gICAgaWYgbCA8IDAgfHwgbzEgPCAwIHx8IG8xID4gbGVuZ3RoIGUxIC0gbFxuICAgICAgIHx8IG8yIDwgMCB8fCBvMiA+IGxlbmd0aCBlMiAtIGxcbiAgICB0aGVuIGludmFsaWRfYXJnIFwiT2JqLkVwaGVtZXJvbi5ibGl0X2tleVwiXG4gICAgZWxzZSBpZiBsIDw+IDAgdGhlbiBibGl0X2tleSBlMSBvMSBlMiBvMiBsXG5cbiAgZXh0ZXJuYWwgZ2V0X2RhdGE6IHQgLT4gb2JqX3Qgb3B0aW9uID0gXCJjYW1sX2VwaGVfZ2V0X2RhdGFcIlxuICBleHRlcm5hbCBnZXRfZGF0YV9jb3B5OiB0IC0+IG9ial90IG9wdGlvbiA9IFwiY2FtbF9lcGhlX2dldF9kYXRhX2NvcHlcIlxuICBleHRlcm5hbCBzZXRfZGF0YTogdCAtPiBvYmpfdCAtPiB1bml0ID0gXCJjYW1sX2VwaGVfc2V0X2RhdGFcIlxuICBleHRlcm5hbCB1bnNldF9kYXRhOiB0IC0+IHVuaXQgPSBcImNhbWxfZXBoZV91bnNldF9kYXRhXCJcbiAgZXh0ZXJuYWwgY2hlY2tfZGF0YTogdCAtPiBib29sID0gXCJjYW1sX2VwaGVfY2hlY2tfZGF0YVwiXG4gIGV4dGVybmFsIGJsaXRfZGF0YSA6IHQgLT4gdCAtPiB1bml0ID0gXCJjYW1sX2VwaGVfYmxpdF9kYXRhXCJcblxuZW5kXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBEYW1pZW4gRG9saWdleiwgcHJvamV0IFBhcmEsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk3IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIEludGVybmFscyBvZiBmb3JjaW5nIGxhenkgdmFsdWVzLiAqKVxuXG50eXBlICdhIHQgPSAnYSBsYXp5X3RcblxuZXhjZXB0aW9uIFVuZGVmaW5lZFxuXG5sZXQgcmFpc2VfdW5kZWZpbmVkID0gT2JqLnJlcHIgKGZ1biAoKSAtPiByYWlzZSBVbmRlZmluZWQpXG5cbmV4dGVybmFsIG1ha2VfZm9yd2FyZCA6IE9iai50IC0+IE9iai50IC0+IHVuaXQgPSBcImNhbWxfb2JqX21ha2VfZm9yd2FyZFwiXG5cbigqIEFzc3VtZSBbYmxrXSBpcyBhIGJsb2NrIHdpdGggdGFnIGxhenkgKilcbmxldCBmb3JjZV9sYXp5X2Jsb2NrIChibGsgOiAnYXJnIGxhenlfdCkgPVxuICBsZXQgY2xvc3VyZSA9IChPYmoub2JqIChPYmouZmllbGQgKE9iai5yZXByIGJsaykgMCkgOiB1bml0IC0+ICdhcmcpIGluXG4gIE9iai5zZXRfZmllbGQgKE9iai5yZXByIGJsaykgMCByYWlzZV91bmRlZmluZWQ7XG4gIHRyeVxuICAgIGxldCByZXN1bHQgPSBjbG9zdXJlICgpIGluXG4gICAgbWFrZV9mb3J3YXJkIChPYmoucmVwciBibGspIChPYmoucmVwciByZXN1bHQpO1xuICAgIHJlc3VsdFxuICB3aXRoIGUgLT5cbiAgICBPYmouc2V0X2ZpZWxkIChPYmoucmVwciBibGspIDAgKE9iai5yZXByIChmdW4gKCkgLT4gcmFpc2UgZSkpO1xuICAgIHJhaXNlIGVcblxuXG4oKiBBc3N1bWUgW2Jsa10gaXMgYSBibG9jayB3aXRoIHRhZyBsYXp5ICopXG5sZXQgZm9yY2VfdmFsX2xhenlfYmxvY2sgKGJsayA6ICdhcmcgbGF6eV90KSA9XG4gIGxldCBjbG9zdXJlID0gKE9iai5vYmogKE9iai5maWVsZCAoT2JqLnJlcHIgYmxrKSAwKSA6IHVuaXQgLT4gJ2FyZykgaW5cbiAgT2JqLnNldF9maWVsZCAoT2JqLnJlcHIgYmxrKSAwIHJhaXNlX3VuZGVmaW5lZDtcbiAgbGV0IHJlc3VsdCA9IGNsb3N1cmUgKCkgaW5cbiAgbWFrZV9mb3J3YXJkIChPYmoucmVwciBibGspIChPYmoucmVwciByZXN1bHQpO1xuICByZXN1bHRcblxuXG4oKiBbZm9yY2VdIGlzIG5vdCB1c2VkLCBzaW5jZSBbTGF6eS5mb3JjZV0gaXMgZGVjbGFyZWQgYXMgYSBwcmltaXRpdmVcbiAgIHdob3NlIGNvZGUgaW5saW5lcyB0aGUgdGFnIHRlc3RzIG9mIGl0cyBhcmd1bWVudCwgZXhjZXB0IHdoZW4gYWZsXG4gICBpbnN0cnVtZW50YXRpb24gaXMgdHVybmVkIG9uLiAqKVxuXG5sZXQgZm9yY2UgKGx6diA6ICdhcmcgbGF6eV90KSA9XG4gICgqIFVzaW5nIFtTeXMub3BhcXVlX2lkZW50aXR5XSBwcmV2ZW50cyB0d28gcG90ZW50aWFsIHByb2JsZW1zOlxuICAgICAtIElmIHRoZSB2YWx1ZSBpcyBrbm93biB0byBoYXZlIEZvcndhcmRfdGFnLCB0aGVuIGl0cyB0YWcgY291bGQgaGF2ZVxuICAgICAgIGNoYW5nZWQgZHVyaW5nIEdDLCBzbyB0aGF0IGluZm9ybWF0aW9uIG11c3QgYmUgZm9yZ290dGVuIChzZWUgR1BSIzcxM1xuICAgICAgIGFuZCBpc3N1ZSAjNzMwMSlcbiAgICAgLSBJZiB0aGUgdmFsdWUgaXMga25vd24gdG8gYmUgaW1tdXRhYmxlLCB0aGVuIGlmIHRoZSBjb21waWxlclxuICAgICAgIGNhbm5vdCBwcm92ZSB0aGF0IHRoZSBsYXN0IGJyYW5jaCBpcyBub3QgdGFrZW4gaXQgd2lsbCBpc3N1ZSBhXG4gICAgICAgd2FybmluZyA1OSAobW9kaWZpY2F0aW9uIG9mIGFuIGltbXV0YWJsZSB2YWx1ZSkgKilcbiAgbGV0IGx6diA9IFN5cy5vcGFxdWVfaWRlbnRpdHkgbHp2IGluXG4gIGxldCB4ID0gT2JqLnJlcHIgbHp2IGluXG4gIGxldCB0ID0gT2JqLnRhZyB4IGluXG4gIGlmIHQgPSBPYmouZm9yd2FyZF90YWcgdGhlbiAoT2JqLm9iaiAoT2JqLmZpZWxkIHggMCkgOiAnYXJnKSBlbHNlXG4gIGlmIHQgPD4gT2JqLmxhenlfdGFnIHRoZW4gKE9iai5vYmogeCA6ICdhcmcpXG4gIGVsc2UgZm9yY2VfbGF6eV9ibG9jayBsenZcblxuXG5sZXQgZm9yY2VfdmFsIChsenYgOiAnYXJnIGxhenlfdCkgPVxuICBsZXQgeCA9IE9iai5yZXByIGx6diBpblxuICBsZXQgdCA9IE9iai50YWcgeCBpblxuICBpZiB0ID0gT2JqLmZvcndhcmRfdGFnIHRoZW4gKE9iai5vYmogKE9iai5maWVsZCB4IDApIDogJ2FyZykgZWxzZVxuICBpZiB0IDw+IE9iai5sYXp5X3RhZyB0aGVuIChPYmoub2JqIHggOiAnYXJnKVxuICBlbHNlIGZvcmNlX3ZhbF9sYXp5X2Jsb2NrIGx6dlxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgRGFtaWVuIERvbGlnZXosIHByb2pldCBQYXJhLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NyBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBNb2R1bGUgW0xhenldOiBkZWZlcnJlZCBjb21wdXRhdGlvbnMgKilcblxuXG4oKlxuICAgV0FSTklORzogc29tZSBwdXJwbGUgbWFnaWMgaXMgZ29pbmcgb24gaGVyZS4gIERvIG5vdCB0YWtlIHRoaXMgZmlsZVxuICAgYXMgYW4gZXhhbXBsZSBvZiBob3cgdG8gcHJvZ3JhbSBpbiBPQ2FtbC5cbiopXG5cblxuKCogV2UgbWFrZSB1c2Ugb2YgdHdvIHNwZWNpYWwgdGFncyBwcm92aWRlZCBieSB0aGUgcnVudGltZTpcbiAgIFtsYXp5X3RhZ10gYW5kIFtmb3J3YXJkX3RhZ10uXG5cbiAgIEEgdmFsdWUgb2YgdHlwZSBbJ2EgTGF6eS50XSBjYW4gYmUgb25lIG9mIHRocmVlIHRoaW5nczpcbiAgIDEuIEEgYmxvY2sgb2Ygc2l6ZSAxIHdpdGggdGFnIFtsYXp5X3RhZ10uICBJdHMgZmllbGQgaXMgYSBjbG9zdXJlIG9mXG4gICAgICB0eXBlIFt1bml0IC0+ICdhXSB0aGF0IGNvbXB1dGVzIHRoZSB2YWx1ZS5cbiAgIDIuIEEgYmxvY2sgb2Ygc2l6ZSAxIHdpdGggdGFnIFtmb3J3YXJkX3RhZ10uICBJdHMgZmllbGQgaXMgdGhlIHZhbHVlXG4gICAgICBvZiB0eXBlIFsnYV0gdGhhdCB3YXMgY29tcHV0ZWQuXG4gICAzLiBBbnl0aGluZyBlbHNlIGV4Y2VwdCBhIGZsb2F0LiAgVGhpcyBoYXMgdHlwZSBbJ2FdIGFuZCBpcyB0aGUgdmFsdWVcbiAgICAgIHRoYXQgd2FzIGNvbXB1dGVkLlxuICAgRXhjZXB0aW9ucyBhcmUgc3RvcmVkIGluIGZvcm1hdCAoMSkuXG4gICBUaGUgR0Mgd2lsbCBtYWdpY2FsbHkgY2hhbmdlIHRoaW5ncyBmcm9tICgyKSB0byAoMykgYWNjb3JkaW5nIHRvIGl0c1xuICAgZmFuY3kuXG5cbiAgIElmIE9DYW1sIHdhcyBjb25maWd1cmVkIHdpdGggdGhlIC1mbGF0LWZsb2F0LWFycmF5IG9wdGlvbiAod2hpY2ggaXNcbiAgIGN1cnJlbnRseSB0aGUgZGVmYXVsdCksIHRoZSBmb2xsb3dpbmcgaXMgYWxzbyB0cnVlOlxuICAgV2UgY2Fubm90IHVzZSByZXByZXNlbnRhdGlvbiAoMykgZm9yIGEgW2Zsb2F0IExhenkudF0gYmVjYXVzZVxuICAgW2NhbWxfbWFrZV9hcnJheV0gYXNzdW1lcyB0aGF0IG9ubHkgYSBbZmxvYXRdIHZhbHVlIGNhbiBoYXZlIHRhZ1xuICAgW0RvdWJsZV90YWddLlxuXG4gICBXZSBoYXZlIHRvIHVzZSB0aGUgYnVpbHQtaW4gdHlwZSBjb25zdHJ1Y3RvciBbbGF6eV90XSB0b1xuICAgbGV0IHRoZSBjb21waWxlciBpbXBsZW1lbnQgdGhlIHNwZWNpYWwgdHlwaW5nIGFuZCBjb21waWxhdGlvblxuICAgcnVsZXMgZm9yIHRoZSBbbGF6eV0ga2V5d29yZC5cbiopXG5cbnR5cGUgJ2EgdCA9ICdhIENhbWxpbnRlcm5hbExhenkudFxuXG5leGNlcHRpb24gVW5kZWZpbmVkID0gQ2FtbGludGVybmFsTGF6eS5VbmRlZmluZWRcblxuZXh0ZXJuYWwgbWFrZV9mb3J3YXJkIDogJ2EgLT4gJ2EgbGF6eV90ID0gXCJjYW1sX2xhenlfbWFrZV9mb3J3YXJkXCJcblxuZXh0ZXJuYWwgZm9yY2UgOiAnYSB0IC0+ICdhID0gXCIlbGF6eV9mb3JjZVwiXG5cblxubGV0IGZvcmNlX3ZhbCA9IENhbWxpbnRlcm5hbExhenkuZm9yY2VfdmFsXG5cbmxldCBmcm9tX2Z1biAoZiA6IHVuaXQgLT4gJ2FyZykgPVxuICBsZXQgeCA9IE9iai5uZXdfYmxvY2sgT2JqLmxhenlfdGFnIDEgaW5cbiAgT2JqLnNldF9maWVsZCB4IDAgKE9iai5yZXByIGYpO1xuICAoT2JqLm9iaiB4IDogJ2FyZyB0KVxuXG5sZXQgZnJvbV92YWwgKHYgOiAnYXJnKSA9XG4gIGxldCB0ID0gT2JqLnRhZyAoT2JqLnJlcHIgdikgaW5cbiAgaWYgdCA9IE9iai5mb3J3YXJkX3RhZyB8fCB0ID0gT2JqLmxhenlfdGFnIHx8IHQgPSBPYmouZG91YmxlX3RhZyB0aGVuIGJlZ2luXG4gICAgbWFrZV9mb3J3YXJkIHZcbiAgZW5kIGVsc2UgYmVnaW5cbiAgICAoT2JqLm1hZ2ljIHYgOiAnYXJnIHQpXG4gIGVuZFxuXG5cbmxldCBpc192YWwgKGwgOiAnYXJnIHQpID0gT2JqLnRhZyAoT2JqLnJlcHIgbCkgPD4gT2JqLmxhenlfdGFnXG5cbmxldCBsYXp5X2Zyb21fZnVuID0gZnJvbV9mdW5cblxubGV0IGxhenlfZnJvbV92YWwgPSBmcm9tX3ZhbFxuXG5sZXQgbGF6eV9pc192YWwgPSBpc192YWxcblxuXG5sZXQgbWFwIGYgeCA9XG4gIGxhenkgKGYgKGZvcmNlIHgpKVxuXG5sZXQgbWFwX3ZhbCBmIHggPVxuICBpZiBpc192YWwgeFxuICB0aGVuIGxhenlfZnJvbV92YWwgKGYgKGZvcmNlIHgpKVxuICBlbHNlIGxhenkgKGYgKGZvcmNlIHgpKVxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgIFNpbW9uIENydWFuZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxNyBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBNb2R1bGUgW1NlcV06IGZ1bmN0aW9uYWwgaXRlcmF0b3JzICopXG5cbnR5cGUgKydhIG5vZGUgPVxuICB8IE5pbFxuICB8IENvbnMgb2YgJ2EgKiAnYSB0XG5cbmFuZCAnYSB0ID0gdW5pdCAtPiAnYSBub2RlXG5cbmxldCBlbXB0eSAoKSA9IE5pbFxuXG5sZXQgcmV0dXJuIHggKCkgPSBDb25zICh4LCBlbXB0eSlcblxubGV0IGNvbnMgeCBuZXh0ICgpID0gQ29ucyAoeCwgbmV4dClcblxubGV0IHJlYyBhcHBlbmQgc2VxMSBzZXEyICgpID1cbiAgbWF0Y2ggc2VxMSgpIHdpdGhcbiAgfCBOaWwgLT4gc2VxMigpXG4gIHwgQ29ucyAoeCwgbmV4dCkgLT4gQ29ucyAoeCwgYXBwZW5kIG5leHQgc2VxMilcblxubGV0IHJlYyBtYXAgZiBzZXEgKCkgPSBtYXRjaCBzZXEoKSB3aXRoXG4gIHwgTmlsIC0+IE5pbFxuICB8IENvbnMgKHgsIG5leHQpIC0+IENvbnMgKGYgeCwgbWFwIGYgbmV4dClcblxubGV0IHJlYyBmaWx0ZXJfbWFwIGYgc2VxICgpID0gbWF0Y2ggc2VxKCkgd2l0aFxuICB8IE5pbCAtPiBOaWxcbiAgfCBDb25zICh4LCBuZXh0KSAtPlxuICAgICAgbWF0Y2ggZiB4IHdpdGhcbiAgICAgICAgfCBOb25lIC0+IGZpbHRlcl9tYXAgZiBuZXh0ICgpXG4gICAgICAgIHwgU29tZSB5IC0+IENvbnMgKHksIGZpbHRlcl9tYXAgZiBuZXh0KVxuXG5sZXQgcmVjIGZpbHRlciBmIHNlcSAoKSA9IG1hdGNoIHNlcSgpIHdpdGhcbiAgfCBOaWwgLT4gTmlsXG4gIHwgQ29ucyAoeCwgbmV4dCkgLT5cbiAgICAgIGlmIGYgeFxuICAgICAgdGhlbiBDb25zICh4LCBmaWx0ZXIgZiBuZXh0KVxuICAgICAgZWxzZSBmaWx0ZXIgZiBuZXh0ICgpXG5cbmxldCByZWMgY29uY2F0IHNlcSAoKSA9IG1hdGNoIHNlcSAoKSB3aXRoXG4gIHwgTmlsIC0+IE5pbFxuICB8IENvbnMgKHgsIG5leHQpIC0+XG4gICAgIGFwcGVuZCB4IChjb25jYXQgbmV4dCkgKClcblxubGV0IHJlYyBmbGF0X21hcCBmIHNlcSAoKSA9IG1hdGNoIHNlcSAoKSB3aXRoXG4gIHwgTmlsIC0+IE5pbFxuICB8IENvbnMgKHgsIG5leHQpIC0+XG4gICAgYXBwZW5kIChmIHgpIChmbGF0X21hcCBmIG5leHQpICgpXG5cbmxldCBjb25jYXRfbWFwID0gZmxhdF9tYXBcblxubGV0IHJlYyBmb2xkX2xlZnQgZiBhY2Mgc2VxID1cbiAgbWF0Y2ggc2VxICgpIHdpdGhcbiAgICB8IE5pbCAtPiBhY2NcbiAgICB8IENvbnMgKHgsIG5leHQpIC0+XG4gICAgICAgIGxldCBhY2MgPSBmIGFjYyB4IGluXG4gICAgICAgIGZvbGRfbGVmdCBmIGFjYyBuZXh0XG5cbmxldCByZWMgaXRlciBmIHNlcSA9XG4gIG1hdGNoIHNlcSAoKSB3aXRoXG4gICAgfCBOaWwgLT4gKClcbiAgICB8IENvbnMgKHgsIG5leHQpIC0+XG4gICAgICAgIGYgeDtcbiAgICAgICAgaXRlciBmIG5leHRcblxubGV0IHJlYyB1bmZvbGQgZiB1ICgpID1cbiAgbWF0Y2ggZiB1IHdpdGhcbiAgfCBOb25lIC0+IE5pbFxuICB8IFNvbWUgKHgsIHUnKSAtPiBDb25zICh4LCB1bmZvbGQgZiB1JylcblxubGV0IGlzX2VtcHR5IHhzID1cbiAgbWF0Y2ggeHMoKSB3aXRoXG4gIHwgTmlsIC0+XG4gICAgICB0cnVlXG4gIHwgQ29ucyAoXywgXykgLT5cbiAgICAgIGZhbHNlXG5cbmxldCB1bmNvbnMgeHMgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgIFNvbWUgKHgsIHhzKVxuICB8IE5pbCAtPlxuICAgICAgTm9uZVxuXG5cblxubGV0IHJlYyBsZW5ndGhfYXV4IGFjY3UgeHMgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIGFjY3VcbiAgfCBDb25zIChfLCB4cykgLT5cbiAgICAgIGxlbmd0aF9hdXggKGFjY3UgKyAxKSB4c1xuXG5sZXRbQGlubGluZV0gbGVuZ3RoIHhzID1cbiAgbGVuZ3RoX2F1eCAwIHhzXG5cbmxldCByZWMgaXRlcmlfYXV4IGYgaSB4cyA9XG4gIG1hdGNoIHhzKCkgd2l0aFxuICB8IE5pbCAtPlxuICAgICAgKClcbiAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgIGYgaSB4O1xuICAgICAgaXRlcmlfYXV4IGYgKGkrMSkgeHNcblxubGV0W0BpbmxpbmVdIGl0ZXJpIGYgeHMgPVxuICBpdGVyaV9hdXggZiAwIHhzXG5cbmxldCByZWMgZm9sZF9sZWZ0aV9hdXggZiBhY2N1IGkgeHMgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIGFjY3VcbiAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgIGxldCBhY2N1ID0gZiBhY2N1IGkgeCBpblxuICAgICAgZm9sZF9sZWZ0aV9hdXggZiBhY2N1IChpKzEpIHhzXG5cbmxldFtAaW5saW5lXSBmb2xkX2xlZnRpIGYgYWNjdSB4cyA9XG4gIGZvbGRfbGVmdGlfYXV4IGYgYWNjdSAwIHhzXG5cbmxldCByZWMgZm9yX2FsbCBwIHhzID1cbiAgbWF0Y2ggeHMoKSB3aXRoXG4gIHwgTmlsIC0+XG4gICAgICB0cnVlXG4gIHwgQ29ucyAoeCwgeHMpIC0+XG4gICAgICBwIHggJiYgZm9yX2FsbCBwIHhzXG5cbmxldCByZWMgZXhpc3RzIHAgeHMgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIGZhbHNlXG4gIHwgQ29ucyAoeCwgeHMpIC0+XG4gICAgICBwIHggfHwgZXhpc3RzIHAgeHNcblxubGV0IHJlYyBmaW5kIHAgeHMgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIE5vbmVcbiAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgIGlmIHAgeCB0aGVuIFNvbWUgeCBlbHNlIGZpbmQgcCB4c1xuXG5sZXQgcmVjIGZpbmRfbWFwIGYgeHMgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIE5vbmVcbiAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgIG1hdGNoIGYgeCB3aXRoXG4gICAgICB8IE5vbmUgLT5cbiAgICAgICAgICBmaW5kX21hcCBmIHhzXG4gICAgICB8IFNvbWUgXyBhcyByZXN1bHQgLT5cbiAgICAgICAgICByZXN1bHRcblxuKCogW2l0ZXIyXSwgW2ZvbGRfbGVmdDJdLCBbZm9yX2FsbDJdLCBbZXhpc3RzMl0sIFttYXAyXSwgW3ppcF0gd29yayBhbHNvIGluXG4gICB0aGUgY2FzZSB3aGVyZSB0aGUgdHdvIHNlcXVlbmNlcyBoYXZlIGRpZmZlcmVudCBsZW5ndGhzLiBUaGV5IHN0b3AgYXMgc29vblxuICAgYXMgb25lIHNlcXVlbmNlIGlzIGV4aGF1c3RlZC4gVGhlaXIgYmVoYXZpb3IgaXMgc2xpZ2h0bHkgYXN5bW1ldHJpYzogd2hlblxuICAgW3hzXSBpcyBlbXB0eSwgdGhleSBkbyBub3QgZm9yY2UgW3lzXTsgaG93ZXZlciwgd2hlbiBbeXNdIGlzIGVtcHR5LCBbeHNdIGlzXG4gICBmb3JjZWQsIGV2ZW4gdGhvdWdoIHRoZSByZXN1bHQgb2YgdGhlIGZ1bmN0aW9uIGFwcGxpY2F0aW9uIFt4cygpXSB0dXJucyBvdXRcbiAgIHRvIGJlIHVzZWxlc3MuICopXG5cbmxldCByZWMgaXRlcjIgZiB4cyB5cyA9XG4gIG1hdGNoIHhzKCkgd2l0aFxuICB8IE5pbCAtPlxuICAgICAgKClcbiAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgIG1hdGNoIHlzKCkgd2l0aFxuICAgICAgfCBOaWwgLT5cbiAgICAgICAgICAoKVxuICAgICAgfCBDb25zICh5LCB5cykgLT5cbiAgICAgICAgICBmIHggeTtcbiAgICAgICAgICBpdGVyMiBmIHhzIHlzXG5cbmxldCByZWMgZm9sZF9sZWZ0MiBmIGFjY3UgeHMgeXMgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIGFjY3VcbiAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgIG1hdGNoIHlzKCkgd2l0aFxuICAgICAgfCBOaWwgLT5cbiAgICAgICAgICBhY2N1XG4gICAgICB8IENvbnMgKHksIHlzKSAtPlxuICAgICAgICAgIGxldCBhY2N1ID0gZiBhY2N1IHggeSBpblxuICAgICAgICAgIGZvbGRfbGVmdDIgZiBhY2N1IHhzIHlzXG5cbmxldCByZWMgZm9yX2FsbDIgZiB4cyB5cyA9XG4gIG1hdGNoIHhzKCkgd2l0aFxuICB8IE5pbCAtPlxuICAgICAgdHJ1ZVxuICB8IENvbnMgKHgsIHhzKSAtPlxuICAgICAgbWF0Y2ggeXMoKSB3aXRoXG4gICAgICB8IE5pbCAtPlxuICAgICAgICAgIHRydWVcbiAgICAgIHwgQ29ucyAoeSwgeXMpIC0+XG4gICAgICAgICAgZiB4IHkgJiYgZm9yX2FsbDIgZiB4cyB5c1xuXG5sZXQgcmVjIGV4aXN0czIgZiB4cyB5cyA9XG4gIG1hdGNoIHhzKCkgd2l0aFxuICB8IE5pbCAtPlxuICAgICAgZmFsc2VcbiAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgIG1hdGNoIHlzKCkgd2l0aFxuICAgICAgfCBOaWwgLT5cbiAgICAgICAgICBmYWxzZVxuICAgICAgfCBDb25zICh5LCB5cykgLT5cbiAgICAgICAgICBmIHggeSB8fCBleGlzdHMyIGYgeHMgeXNcblxubGV0IHJlYyBlcXVhbCBlcSB4cyB5cyA9XG4gIG1hdGNoIHhzKCksIHlzKCkgd2l0aFxuICB8IE5pbCwgTmlsIC0+XG4gICAgICB0cnVlXG4gIHwgQ29ucyAoeCwgeHMpLCBDb25zICh5LCB5cykgLT5cbiAgICAgIGVxIHggeSAmJiBlcXVhbCBlcSB4cyB5c1xuICB8IE5pbCwgQ29ucyAoXywgXylcbiAgfCBDb25zIChfLCBfKSwgTmlsIC0+XG4gICAgICBmYWxzZVxuXG5sZXQgcmVjIGNvbXBhcmUgY21wIHhzIHlzID1cbiAgbWF0Y2ggeHMoKSwgeXMoKSB3aXRoXG4gIHwgTmlsLCBOaWwgLT5cbiAgICAgIDBcbiAgfCBDb25zICh4LCB4cyksIENvbnMgKHksIHlzKSAtPlxuICAgICAgbGV0IGMgPSBjbXAgeCB5IGluXG4gICAgICBpZiBjIDw+IDAgdGhlbiBjIGVsc2UgY29tcGFyZSBjbXAgeHMgeXNcbiAgfCBOaWwsIENvbnMgKF8sIF8pIC0+XG4gICAgICAtMVxuICB8IENvbnMgKF8sIF8pLCBOaWwgLT5cbiAgICAgICsxXG5cblxuXG4oKiBbaW5pdF9hdXggZiBpIGpdIGlzIHRoZSBzZXF1ZW5jZSBbZiBpLCAuLi4sIGYgKGotMSldLiAqKVxuXG5sZXQgcmVjIGluaXRfYXV4IGYgaSBqICgpID1cbiAgaWYgaSA8IGogdGhlbiBiZWdpblxuICAgIENvbnMgKGYgaSwgaW5pdF9hdXggZiAoaSArIDEpIGopXG4gIGVuZFxuICBlbHNlXG4gICAgTmlsXG5cbmxldCBpbml0IG4gZiA9XG4gIGlmIG4gPCAwIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlNlcS5pbml0XCJcbiAgZWxzZVxuICAgIGluaXRfYXV4IGYgMCBuXG5cbmxldCByZWMgcmVwZWF0IHggKCkgPVxuICBDb25zICh4LCByZXBlYXQgeClcblxubGV0IHJlYyBmb3JldmVyIGYgKCkgPVxuICBDb25zIChmKCksIGZvcmV2ZXIgZilcblxuKCogVGhpcyBwcmVsaW1pbmFyeSBkZWZpbml0aW9uIG9mIFtjeWNsZV0gcmVxdWlyZXMgdGhlIHNlcXVlbmNlIFt4c11cbiAgIHRvIGJlIG5vbmVtcHR5LiBBcHBseWluZyBpdCB0byBhbiBlbXB0eSBzZXF1ZW5jZSB3b3VsZCBwcm9kdWNlIGFcbiAgIHNlcXVlbmNlIHRoYXQgZGl2ZXJnZXMgd2hlbiBpdCBpcyBmb3JjZWQuICopXG5cbmxldCByZWMgY3ljbGVfbm9uZW1wdHkgeHMgKCkgPVxuICBhcHBlbmQgeHMgKGN5Y2xlX25vbmVtcHR5IHhzKSAoKVxuXG4oKiBbY3ljbGUgeHNdIGNoZWNrcyB3aGV0aGVyIFt4c10gaXMgZW1wdHkgYW5kLCBpZiBzbywgcmV0dXJucyBhbiBlbXB0eVxuICAgc2VxdWVuY2UuIE90aGVyd2lzZSwgW2N5Y2xlIHhzXSBwcm9kdWNlcyBvbmUgY29weSBvZiBbeHNdIGZvbGxvd2VkXG4gICB3aXRoIHRoZSBpbmZpbml0ZSBzZXF1ZW5jZSBbY3ljbGVfbm9uZW1wdHkgeHNdLiBUaHVzLCB0aGUgbm9uZW1wdGluZXNzXG4gICBjaGVjayBpcyBwZXJmb3JtZWQganVzdCBvbmNlLiAqKVxuXG5sZXQgY3ljbGUgeHMgKCkgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIE5pbFxuICB8IENvbnMgKHgsIHhzJykgLT5cbiAgICAgIENvbnMgKHgsIGFwcGVuZCB4cycgKGN5Y2xlX25vbmVtcHR5IHhzKSlcblxuKCogW2l0ZXJhdGUxIGYgeF0gaXMgdGhlIHNlcXVlbmNlIFtmIHgsIGYgKGYgeCksIC4uLl0uXG4gICBJdCBpcyBlcXVpdmFsZW50IHRvIFt0YWlsIChpdGVyYXRlIGYgeCldLlxuICAgW2l0ZXJhdGUxXSBpcyB1c2VkIGFzIGEgYnVpbGRpbmcgYmxvY2sgaW4gdGhlIGRlZmluaXRpb24gb2YgW2l0ZXJhdGVdLiAqKVxuXG5sZXQgcmVjIGl0ZXJhdGUxIGYgeCAoKSA9XG4gIGxldCB5ID0gZiB4IGluXG4gIENvbnMgKHksIGl0ZXJhdGUxIGYgeSlcblxuKCogW2l0ZXJhdGUgZiB4XSBpcyB0aGUgc2VxdWVuY2UgW3gsIGYgeCwgLi4uXS4gKilcblxuKCogVGhlIHJlYXNvbiB3aHkgd2UgZ2l2ZSB0aGlzIHNsaWdodGx5IGluZGlyZWN0IGRlZmluaXRpb24gb2YgW2l0ZXJhdGVdLFxuICAgYXMgb3Bwb3NlZCB0byB0aGUgbW9yZSBuYWl2ZSBkZWZpbml0aW9uIHRoYXQgbWF5IGNvbWUgdG8gbWluZCwgaXMgdGhhdFxuICAgd2UgYXJlIGNhcmVmdWwgdG8gYXZvaWQgZXZhbHVhdGluZyBbZiB4XSB1bnRpbCB0aGlzIGZ1bmN0aW9uIGNhbGwgaXNcbiAgIGFjdHVhbGx5IG5lY2Vzc2FyeS4gVGhlIG5haXZlIGRlZmluaXRpb24gKG5vdCBzaG93biBoZXJlKSBjb21wdXRlcyB0aGVcbiAgIHNlY29uZCBhcmd1bWVudCBvZiB0aGUgc2VxdWVuY2UsIFtmIHhdLCB3aGVuIHRoZSBmaXJzdCBhcmd1bWVudCBpc1xuICAgcmVxdWVzdGVkIGJ5IHRoZSB1c2VyLiAqKVxuXG5sZXQgaXRlcmF0ZSBmIHggPVxuICBjb25zIHggKGl0ZXJhdGUxIGYgeClcblxuXG5cbmxldCByZWMgbWFwaV9hdXggZiBpIHhzICgpID1cbiAgbWF0Y2ggeHMoKSB3aXRoXG4gIHwgTmlsIC0+XG4gICAgICBOaWxcbiAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgIENvbnMgKGYgaSB4LCBtYXBpX2F1eCBmIChpKzEpIHhzKVxuXG5sZXRbQGlubGluZV0gbWFwaSBmIHhzID1cbiAgbWFwaV9hdXggZiAwIHhzXG5cbigqIFt0YWlsX3NjYW4gZiBzIHhzXSBpcyBlcXVpdmFsZW50IHRvIFt0YWlsIChzY2FuIGYgcyB4cyldLlxuICAgW3RhaWxfc2Nhbl0gaXMgdXNlZCBhcyBhIGJ1aWxkaW5nIGJsb2NrIGluIHRoZSBkZWZpbml0aW9uIG9mIFtzY2FuXS4gKilcblxuKCogVGhpcyBzbGlnaHRseSBpbmRpcmVjdCBkZWZpbml0aW9uIG9mIFtzY2FuXSBpcyBtZWFudCB0byBhdm9pZCBjb21wdXRpbmdcbiAgIGVsZW1lbnRzIHRvbyBlYXJseTsgc2VlIHRoZSBhYm92ZSBjb21tZW50IGFib3V0IFtpdGVyYXRlMV0gYW5kIFtpdGVyYXRlXS4gKilcblxubGV0IHJlYyB0YWlsX3NjYW4gZiBzIHhzICgpID1cbiAgbWF0Y2ggeHMoKSB3aXRoXG4gIHwgTmlsIC0+XG4gICAgICBOaWxcbiAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgIGxldCBzID0gZiBzIHggaW5cbiAgICAgIENvbnMgKHMsIHRhaWxfc2NhbiBmIHMgeHMpXG5cbmxldCBzY2FuIGYgcyB4cyA9XG4gIGNvbnMgcyAodGFpbF9zY2FuIGYgcyB4cylcblxuKCogW3Rha2VdIGlzIGRlZmluZWQgaW4gc3VjaCBhIHdheSB0aGF0IFt0YWtlIDAgeHNdIHJldHVybnMgW2VtcHR5XVxuICAgaW1tZWRpYXRlbHksIHdpdGhvdXQgYWxsb2NhdGluZyBhbnkgbWVtb3J5LiAqKVxuXG5sZXQgcmVjIHRha2VfYXV4IG4geHMgPVxuICBpZiBuID0gMCB0aGVuXG4gICAgZW1wdHlcbiAgZWxzZVxuICAgIGZ1biAoKSAtPlxuICAgICAgbWF0Y2ggeHMoKSB3aXRoXG4gICAgICB8IE5pbCAtPlxuICAgICAgICAgIE5pbFxuICAgICAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgICAgICBDb25zICh4LCB0YWtlX2F1eCAobi0xKSB4cylcblxubGV0IHRha2UgbiB4cyA9XG4gIGlmIG4gPCAwIHRoZW4gaW52YWxpZF9hcmcgXCJTZXEudGFrZVwiO1xuICB0YWtlX2F1eCBuIHhzXG5cbigqIFtmb3JjZV9kcm9wIG4geHNdIGlzIGVxdWl2YWxlbnQgdG8gW2Ryb3AgbiB4cyAoKV0uXG4gICBbZm9yY2VfZHJvcCBuIHhzXSByZXF1aXJlcyBbbiA+IDBdLlxuICAgW2ZvcmNlX2Ryb3BdIGlzIHVzZWQgYXMgYSBidWlsZGluZyBibG9jayBpbiB0aGUgZGVmaW5pdGlvbiBvZiBbZHJvcF0uICopXG5cbmxldCByZWMgZm9yY2VfZHJvcCBuIHhzID1cbiAgbWF0Y2ggeHMoKSB3aXRoXG4gIHwgTmlsIC0+XG4gICAgICBOaWxcbiAgfCBDb25zIChfLCB4cykgLT5cbiAgICAgIGxldCBuID0gbiAtIDEgaW5cbiAgICAgIGlmIG4gPSAwIHRoZW5cbiAgICAgICAgeHMoKVxuICAgICAgZWxzZVxuICAgICAgICBmb3JjZV9kcm9wIG4geHNcblxuKCogW2Ryb3BdIGlzIGRlZmluZWQgaW4gc3VjaCBhIHdheSB0aGF0IFtkcm9wIDAgeHNdIHJldHVybnMgW3hzXSBpbW1lZGlhdGVseSxcbiAgIHdpdGhvdXQgYWxsb2NhdGluZyBhbnkgbWVtb3J5LiAqKVxuXG5sZXQgZHJvcCBuIHhzID1cbiAgaWYgbiA8IDAgdGhlbiBpbnZhbGlkX2FyZyBcIlNlcS5kcm9wXCJcbiAgZWxzZSBpZiBuID0gMCB0aGVuXG4gICAgeHNcbiAgZWxzZVxuICAgIGZ1biAoKSAtPlxuICAgICAgZm9yY2VfZHJvcCBuIHhzXG5cbmxldCByZWMgdGFrZV93aGlsZSBwIHhzICgpID1cbiAgbWF0Y2ggeHMoKSB3aXRoXG4gIHwgTmlsIC0+XG4gICAgICBOaWxcbiAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgIGlmIHAgeCB0aGVuIENvbnMgKHgsIHRha2Vfd2hpbGUgcCB4cykgZWxzZSBOaWxcblxubGV0IHJlYyBkcm9wX3doaWxlIHAgeHMgKCkgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIE5pbFxuICB8IENvbnMgKHgsIHhzKSBhcyBub2RlIC0+XG4gICAgICBpZiBwIHggdGhlbiBkcm9wX3doaWxlIHAgeHMgKCkgZWxzZSBub2RlXG5cbmxldCByZWMgZ3JvdXAgZXEgeHMgKCkgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIE5pbFxuICB8IENvbnMgKHgsIHhzKSAtPlxuICAgICAgQ29ucyAoY29ucyB4ICh0YWtlX3doaWxlIChlcSB4KSB4cyksIGdyb3VwIGVxIChkcm9wX3doaWxlIChlcSB4KSB4cykpXG5cbmV4Y2VwdGlvbiBGb3JjZWRfdHdpY2VcblxubW9kdWxlIFN1c3BlbnNpb24gPSBzdHJ1Y3RcblxuICB0eXBlICdhIHN1c3BlbnNpb24gPVxuICAgIHVuaXQgLT4gJ2FcblxuICAoKiBDb252ZXJzaW9ucy4gKilcblxuICBsZXQgdG9fbGF6eSA6ICdhIHN1c3BlbnNpb24gLT4gJ2EgTGF6eS50ID1cbiAgICBMYXp5LmZyb21fZnVuXG4gICAgKCogZnVuIHMgLT4gbGF6eSAocygpKSAqKVxuXG4gIGxldCBmcm9tX2xhenkgKHMgOiAnYSBMYXp5LnQpIDogJ2Egc3VzcGVuc2lvbiA9XG4gICAgZnVuICgpIC0+IExhenkuZm9yY2Ugc1xuXG4gICgqIFttZW1vaXplXSB0dXJucyBhbiBhcmJpdHJhcnkgc3VzcGVuc2lvbiBpbnRvIGEgcGVyc2lzdGVudCBzdXNwZW5zaW9uLiAqKVxuXG4gIGxldCBtZW1vaXplIChzIDogJ2Egc3VzcGVuc2lvbikgOiAnYSBzdXNwZW5zaW9uID1cbiAgICBmcm9tX2xhenkgKHRvX2xhenkgcylcblxuICAoKiBbZmFpbHVyZV0gaXMgYSBzdXNwZW5zaW9uIHRoYXQgZmFpbHMgd2hlbiBmb3JjZWQuICopXG5cbiAgbGV0IGZhaWx1cmUgOiBfIHN1c3BlbnNpb24gPVxuICAgIGZ1biAoKSAtPlxuICAgICAgKCogQSBzdXNwZW5zaW9uIGNyZWF0ZWQgYnkgW29uY2VdIGhhcyBiZWVuIGZvcmNlZCB0d2ljZS4gKilcbiAgICAgIHJhaXNlIEZvcmNlZF90d2ljZVxuXG4gICgqIElmIFtmXSBpcyBhIHN1c3BlbnNpb24sIHRoZW4gW29uY2UgZl0gaXMgYSBzdXNwZW5zaW9uIHRoYXQgY2FuIGJlIGZvcmNlZFxuICAgICBhdCBtb3N0IG9uY2UuIElmIGl0IGlzIGZvcmNlZCBtb3JlIHRoYW4gb25jZSwgdGhlbiBbRm9yY2VkX3R3aWNlXSBpc1xuICAgICByYWlzZWQuICopXG5cbiAgbGV0IG9uY2UgKGYgOiAnYSBzdXNwZW5zaW9uKSA6ICdhIHN1c3BlbnNpb24gPVxuICAgIGxldCBhY3Rpb24gPSBDYW1saW50ZXJuYWxBdG9taWMubWFrZSBmIGluXG4gICAgZnVuICgpIC0+XG4gICAgICAoKiBHZXQgdGhlIGZ1bmN0aW9uIGN1cnJlbnRseSBzdG9yZWQgaW4gW2FjdGlvbl0sIGFuZCB3cml0ZSB0aGVcbiAgICAgICAgIGZ1bmN0aW9uIFtmYWlsdXJlXSBpbiBpdHMgcGxhY2UsIHNvIHRoZSBuZXh0IGFjY2VzcyB3aWxsIHJlc3VsdFxuICAgICAgICAgaW4gYSBjYWxsIHRvIFtmYWlsdXJlKCldLiAqKVxuICAgICAgbGV0IGYgPSBDYW1saW50ZXJuYWxBdG9taWMuZXhjaGFuZ2UgYWN0aW9uIGZhaWx1cmUgaW5cbiAgICAgIGYoKVxuXG5lbmQgKCogU3VzcGVuc2lvbiAqKVxuXG5sZXQgcmVjIG1lbW9pemUgeHMgPVxuICBTdXNwZW5zaW9uLm1lbW9pemUgKGZ1biAoKSAtPlxuICAgIG1hdGNoIHhzKCkgd2l0aFxuICAgIHwgTmlsIC0+XG4gICAgICAgIE5pbFxuICAgIHwgQ29ucyAoeCwgeHMpIC0+XG4gICAgICAgIENvbnMgKHgsIG1lbW9pemUgeHMpXG4gIClcblxubGV0IHJlYyBvbmNlIHhzID1cbiAgU3VzcGVuc2lvbi5vbmNlIChmdW4gKCkgLT5cbiAgICBtYXRjaCB4cygpIHdpdGhcbiAgICB8IE5pbCAtPlxuICAgICAgICBOaWxcbiAgICB8IENvbnMgKHgsIHhzKSAtPlxuICAgICAgICBDb25zICh4LCBvbmNlIHhzKVxuICApXG5cblxubGV0IHJlYyB6aXAgeHMgeXMgKCkgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIE5pbFxuICB8IENvbnMgKHgsIHhzKSAtPlxuICAgICAgbWF0Y2ggeXMoKSB3aXRoXG4gICAgICB8IE5pbCAtPlxuICAgICAgICAgIE5pbFxuICAgICAgfCBDb25zICh5LCB5cykgLT5cbiAgICAgICAgICBDb25zICgoeCwgeSksIHppcCB4cyB5cylcblxubGV0IHJlYyBtYXAyIGYgeHMgeXMgKCkgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIE5pbFxuICB8IENvbnMgKHgsIHhzKSAtPlxuICAgICAgbWF0Y2ggeXMoKSB3aXRoXG4gICAgICB8IE5pbCAtPlxuICAgICAgICAgIE5pbFxuICAgICAgfCBDb25zICh5LCB5cykgLT5cbiAgICAgICAgICBDb25zIChmIHggeSwgbWFwMiBmIHhzIHlzKVxuXG5sZXQgcmVjIGludGVybGVhdmUgeHMgeXMgKCkgPVxuICBtYXRjaCB4cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIHlzKClcbiAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgIENvbnMgKHgsIGludGVybGVhdmUgeXMgeHMpXG5cbigqIFtzb3J0ZWRfbWVyZ2UxbCBjbXAgeCB4cyB5c10gaXMgZXF1aXZhbGVudCB0b1xuICAgICBbc29ydGVkX21lcmdlIGNtcCAoY29ucyB4IHhzKSB5c10uXG5cbiAgIFtzb3J0ZWRfbWVyZ2UxciBjbXAgeHMgeSB5c10gaXMgZXF1aXZhbGVudCB0b1xuICAgICBbc29ydGVkX21lcmdlIGNtcCB4cyAoY29ucyB5IHlzKV0uXG5cbiAgIFtzb3J0ZWRfbWVyZ2UxIGNtcCB4IHhzIHkgeXNdIGlzIGVxdWl2YWxlbnQgdG9cbiAgICAgW3NvcnRlZF9tZXJnZSBjbXAgKGNvbnMgeCB4cykgKGNvbnMgeSB5cyldLlxuXG4gICBUaGVzZSB0aHJlZSBmdW5jdGlvbnMgYXJlIHVzZWQgYXMgYnVpbGRpbmcgYmxvY2tzIGluIHRoZSBkZWZpbml0aW9uXG4gICBvZiBbc29ydGVkX21lcmdlXS4gKilcblxubGV0IHJlYyBzb3J0ZWRfbWVyZ2UxbCBjbXAgeCB4cyB5cyAoKSA9XG4gIG1hdGNoIHlzKCkgd2l0aFxuICB8IE5pbCAtPlxuICAgICAgQ29ucyAoeCwgeHMpXG4gIHwgQ29ucyAoeSwgeXMpIC0+XG4gICAgICBzb3J0ZWRfbWVyZ2UxIGNtcCB4IHhzIHkgeXNcblxuYW5kIHNvcnRlZF9tZXJnZTFyIGNtcCB4cyB5IHlzICgpID1cbiAgbWF0Y2ggeHMoKSB3aXRoXG4gIHwgTmlsIC0+XG4gICAgICBDb25zICh5LCB5cylcbiAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgIHNvcnRlZF9tZXJnZTEgY21wIHggeHMgeSB5c1xuXG5hbmQgc29ydGVkX21lcmdlMSBjbXAgeCB4cyB5IHlzID1cbiAgaWYgY21wIHggeSA8PSAwIHRoZW5cbiAgICBDb25zICh4LCBzb3J0ZWRfbWVyZ2UxciBjbXAgeHMgeSB5cylcbiAgZWxzZVxuICAgIENvbnMgKHksIHNvcnRlZF9tZXJnZTFsIGNtcCB4IHhzIHlzKVxuXG5sZXQgc29ydGVkX21lcmdlIGNtcCB4cyB5cyAoKSA9XG4gIG1hdGNoIHhzKCksIHlzKCkgd2l0aFxuICAgIHwgTmlsLCBOaWwgLT5cbiAgICAgICAgTmlsXG4gICAgfCBOaWwsIGNcbiAgICB8IGMsIE5pbCAtPlxuICAgICAgICBjXG4gICAgfCBDb25zICh4LCB4cyksIENvbnMgKHksIHlzKSAtPlxuICAgICAgICBzb3J0ZWRfbWVyZ2UxIGNtcCB4IHhzIHkgeXNcblxuXG5sZXQgcmVjIG1hcF9mc3QgeHlzICgpID1cbiAgbWF0Y2ggeHlzKCkgd2l0aFxuICB8IE5pbCAtPlxuICAgICAgTmlsXG4gIHwgQ29ucyAoKHgsIF8pLCB4eXMpIC0+XG4gICAgICBDb25zICh4LCBtYXBfZnN0IHh5cylcblxubGV0IHJlYyBtYXBfc25kIHh5cyAoKSA9XG4gIG1hdGNoIHh5cygpIHdpdGhcbiAgfCBOaWwgLT5cbiAgICAgIE5pbFxuICB8IENvbnMgKChfLCB5KSwgeHlzKSAtPlxuICAgICAgQ29ucyAoeSwgbWFwX3NuZCB4eXMpXG5cbmxldCB1bnppcCB4eXMgPVxuICBtYXBfZnN0IHh5cywgbWFwX3NuZCB4eXNcblxubGV0IHNwbGl0ID1cbiAgdW56aXBcblxuKCogW2ZpbHRlcl9tYXBfZmluZF9sZWZ0X21hcCBmIHhzXSBpcyBlcXVpdmFsZW50IHRvXG4gICBbZmlsdGVyX21hcCBFaXRoZXIuZmluZF9sZWZ0IChtYXAgZiB4cyldLiAqKVxuXG5sZXQgcmVjIGZpbHRlcl9tYXBfZmluZF9sZWZ0X21hcCBmIHhzICgpID1cbiAgbWF0Y2ggeHMoKSB3aXRoXG4gIHwgTmlsIC0+XG4gICAgICBOaWxcbiAgfCBDb25zICh4LCB4cykgLT5cbiAgICAgIG1hdGNoIGYgeCB3aXRoXG4gICAgICB8IEVpdGhlci5MZWZ0IHkgLT5cbiAgICAgICAgICBDb25zICh5LCBmaWx0ZXJfbWFwX2ZpbmRfbGVmdF9tYXAgZiB4cylcbiAgICAgIHwgRWl0aGVyLlJpZ2h0IF8gLT5cbiAgICAgICAgICBmaWx0ZXJfbWFwX2ZpbmRfbGVmdF9tYXAgZiB4cyAoKVxuXG5sZXQgcmVjIGZpbHRlcl9tYXBfZmluZF9yaWdodF9tYXAgZiB4cyAoKSA9XG4gIG1hdGNoIHhzKCkgd2l0aFxuICB8IE5pbCAtPlxuICAgICAgTmlsXG4gIHwgQ29ucyAoeCwgeHMpIC0+XG4gICAgICBtYXRjaCBmIHggd2l0aFxuICAgICAgfCBFaXRoZXIuTGVmdCBfIC0+XG4gICAgICAgICAgZmlsdGVyX21hcF9maW5kX3JpZ2h0X21hcCBmIHhzICgpXG4gICAgICB8IEVpdGhlci5SaWdodCB6IC0+XG4gICAgICAgICAgQ29ucyAoeiwgZmlsdGVyX21hcF9maW5kX3JpZ2h0X21hcCBmIHhzKVxuXG5sZXQgcGFydGl0aW9uX21hcCBmIHhzID1cbiAgZmlsdGVyX21hcF9maW5kX2xlZnRfbWFwIGYgeHMsXG4gIGZpbHRlcl9tYXBfZmluZF9yaWdodF9tYXAgZiB4c1xuXG5sZXQgcGFydGl0aW9uIHAgeHMgPVxuICBmaWx0ZXIgcCB4cywgZmlsdGVyIChmdW4geCAtPiBub3QgKHAgeCkpIHhzXG5cbigqIElmIFt4c3NdIGlzIGEgbWF0cml4IChhIHNlcXVlbmNlIG9mIHJvd3MpLCB0aGVuIFtwZWVsIHhzc10gaXMgYSBwYWlyIG9mXG4gICB0aGUgZmlyc3QgY29sdW1uIChhIHNlcXVlbmNlIG9mIGVsZW1lbnRzKSBhbmQgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGVcbiAgIG1hdHJpeCAoYSBzZXF1ZW5jZSBvZiBzaG9ydGVyIHJvd3MpLiBUaGVzZSB0d28gc2VxdWVuY2VzIGhhdmUgdGhlIHNhbWVcbiAgIGxlbmd0aC4gVGhlIHJvd3Mgb2YgdGhlIG1hdHJpeCBbeHNzXSBhcmUgbm90IHJlcXVpcmVkIHRvIGhhdmUgdGhlIHNhbWVcbiAgIGxlbmd0aC4gQW4gZW1wdHkgcm93IGlzIGlnbm9yZWQuICopXG5cbigqIEJlY2F1c2UgW3BlZWxdIHVzZXMgW3VuemlwXSwgaXRzIGFyZ3VtZW50IG11c3QgYmUgcGVyc2lzdGVudC4gVGhlIHNhbWVcbiAgIHJlbWFyayBhcHBsaWVzIHRvIFt0cmFuc3Bvc2VdLCBbZGlhZ29uYWxzXSwgW3Byb2R1Y3RdLCBldGMuICopXG5cbmxldCBwZWVsIHhzcyA9XG4gIHVuemlwIChmaWx0ZXJfbWFwIHVuY29ucyB4c3MpXG5cbmxldCByZWMgdHJhbnNwb3NlIHhzcyAoKSA9XG4gIGxldCBoZWFkcywgdGFpbHMgPSBwZWVsIHhzcyBpblxuICBpZiBpc19lbXB0eSBoZWFkcyB0aGVuIGJlZ2luXG4gICAgYXNzZXJ0IChpc19lbXB0eSB0YWlscyk7XG4gICAgTmlsXG4gIGVuZFxuICBlbHNlXG4gICAgQ29ucyAoaGVhZHMsIHRyYW5zcG9zZSB0YWlscylcblxuKCogVGhlIGludGVybmFsIGZ1bmN0aW9uIFtkaWFnb25hbHNdIHRha2VzIGFuIGV4dHJhIGFyZ3VtZW50LCBbcmVtYWluZGVyc10sXG4gICB3aGljaCBjb250YWlucyB0aGUgcmVtYWluZGVycyBvZiB0aGUgcm93cyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuXG4gICBkaXNjb3ZlcmVkLiAqKVxuXG5sZXQgcmVjIGRpYWdvbmFscyByZW1haW5kZXJzIHhzcyAoKSA9XG4gIG1hdGNoIHhzcygpIHdpdGhcbiAgfCBDb25zICh4cywgeHNzKSAtPlxuICAgICAgYmVnaW4gbWF0Y2ggeHMoKSB3aXRoXG4gICAgICB8IENvbnMgKHgsIHhzKSAtPlxuICAgICAgICAgICgqIFdlIGRpc2NvdmVyIGEgbmV3IG5vbmVtcHR5IHJvdyBbeCA6OiB4c10uIFRodXMsIHRoZSBuZXh0IGRpYWdvbmFsXG4gICAgICAgICAgICAgaXMgW3ggOjogaGVhZHNdOiB0aGlzIGRpYWdvbmFsIGJlZ2lucyB3aXRoIFt4XSBhbmQgY29udGludWVzIHdpdGhcbiAgICAgICAgICAgICB0aGUgZmlyc3QgZWxlbWVudCBvZiBldmVyeSByb3cgaW4gW3JlbWFpbmRlcnNdLiBJbiB0aGUgcmVjdXJzaXZlXG4gICAgICAgICAgICAgY2FsbCwgdGhlIGFyZ3VtZW50IFtyZW1haW5kZXJzXSBpcyBpbnN0YW50aWF0ZWQgd2l0aCBbeHMgOjpcbiAgICAgICAgICAgICB0YWlsc10sIHdoaWNoIG1lYW5zIHRoYXQgd2UgaGF2ZSBvbmUgbW9yZSByZW1haW5pbmcgcm93LCBbeHNdLFxuICAgICAgICAgICAgIGFuZCB0aGF0IHdlIGtlZXAgdGhlIHRhaWxzIG9mIHRoZSBwcmUtZXhpc3RpbmcgcmVtYWluaW5nIHJvd3MuICopXG4gICAgICAgICAgbGV0IGhlYWRzLCB0YWlscyA9IHBlZWwgcmVtYWluZGVycyBpblxuICAgICAgICAgIENvbnMgKGNvbnMgeCBoZWFkcywgZGlhZ29uYWxzIChjb25zIHhzIHRhaWxzKSB4c3MpXG4gICAgICB8IE5pbCAtPlxuICAgICAgICAgICgqIFdlIGRpc2NvdmVyIGEgbmV3IGVtcHR5IHJvdy4gSW4gdGhpcyBjYXNlLCB0aGUgbmV3IGRpYWdvbmFsIGlzXG4gICAgICAgICAgICAganVzdCBbaGVhZHNdLCBhbmQgW3JlbWFpbmRlcnNdIGlzIGluc3RhbnRpYXRlZCB3aXRoIGp1c3QgW3RhaWxzXSxcbiAgICAgICAgICAgICBhcyB3ZSBkbyBub3QgaGF2ZSBvbmUgbW9yZSByZW1haW5pbmcgcm93LiAqKVxuICAgICAgICAgIGxldCBoZWFkcywgdGFpbHMgPSBwZWVsIHJlbWFpbmRlcnMgaW5cbiAgICAgICAgICBDb25zIChoZWFkcywgZGlhZ29uYWxzIHRhaWxzIHhzcylcbiAgICAgIGVuZFxuICB8IE5pbCAtPlxuICAgICAgKCogVGhlcmUgYXJlIG5vIG1vcmUgcm93cyB0byBiZSBkaXNjb3ZlcmVkLiBUaGVyZSByZW1haW5zIHRvIGV4aGF1c3RcbiAgICAgICAgIHRoZSByZW1haW5pbmcgcm93cy4gKilcbiAgICAgIHRyYW5zcG9zZSByZW1haW5kZXJzICgpXG5cbigqIElmIFt4c3NdIGlzIGEgbWF0cml4IChhIHNlcXVlbmNlIG9mIHJvd3MpLCB0aGVuIFtkaWFnb25hbHMgeHNzXSBpc1xuICAgdGhlIHNlcXVlbmNlIG9mIGl0cyBkaWFnb25hbHMuXG5cbiAgIFRoZSBmaXJzdCBkaWFnb25hbCBjb250YWlucyBqdXN0IHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZVxuICAgZmlyc3Qgcm93LiBUaGUgc2Vjb25kIGRpYWdvbmFsIGNvbnRhaW5zIHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZVxuICAgc2Vjb25kIHJvdyBhbmQgdGhlIHNlY29uZCBlbGVtZW50IG9mIHRoZSBmaXJzdCByb3c7IGFuZCBzbyBvbi5cbiAgIFRoaXMga2luZCBvZiBkaWFnb25hbCBpcyBpbiBmYWN0IHNvbWV0aW1lcyBrbm93biBhcyBhbiBhbnRpZGlhZ29uYWwuXG5cbiAgIC0gRXZlcnkgZGlhZ29uYWwgaXMgYSBmaW5pdGUgc2VxdWVuY2UuXG4gICAtIFRoZSByb3dzIG9mIHRoZSBtYXRyaXggW3hzc10gYXJlIG5vdCByZXF1aXJlZCB0byBoYXZlIHRoZSBzYW1lIGxlbmd0aC5cbiAgIC0gVGhlIG1hdHJpeCBbeHNzXSBpcyBub3QgcmVxdWlyZWQgdG8gYmUgZmluaXRlIChpbiBlaXRoZXIgZGlyZWN0aW9uKS5cbiAgIC0gVGhlIG1hdHJpeCBbeHNzXSBtdXN0IGJlIHBlcnNpc3RlbnQuICopXG5cbmxldCBkaWFnb25hbHMgeHNzID1cbiAgZGlhZ29uYWxzIGVtcHR5IHhzc1xuXG5sZXQgbWFwX3Byb2R1Y3QgZiB4cyB5cyA9XG4gIGNvbmNhdCAoZGlhZ29uYWxzIChcbiAgICBtYXAgKGZ1biB4IC0+XG4gICAgICBtYXAgKGZ1biB5IC0+XG4gICAgICAgIGYgeCB5XG4gICAgICApIHlzXG4gICAgKSB4c1xuICApKVxuXG5sZXQgcHJvZHVjdCB4cyB5cyA9XG4gIG1hcF9wcm9kdWN0IChmdW4geCB5IC0+ICh4LCB5KSkgeHMgeXNcblxubGV0IG9mX2Rpc3BlbnNlciBpdCA9XG4gIGxldCByZWMgYyAoKSA9XG4gICAgbWF0Y2ggaXQoKSB3aXRoXG4gICAgfCBOb25lIC0+XG4gICAgICAgIE5pbFxuICAgIHwgU29tZSB4IC0+XG4gICAgICAgIENvbnMgKHgsIGMpXG4gIGluXG4gIGNcblxubGV0IHRvX2Rpc3BlbnNlciB4cyA9XG4gIGxldCBzID0gcmVmIHhzIGluXG4gIGZ1biAoKSAtPlxuICAgIG1hdGNoICghcykoKSB3aXRoXG4gICAgfCBOaWwgLT5cbiAgICAgICAgTm9uZVxuICAgIHwgQ29ucyAoeCwgeHMpIC0+XG4gICAgICAgIHMgOj0geHM7XG4gICAgICAgIFNvbWUgeFxuXG5cblxubGV0IHJlYyBpbnRzIGkgKCkgPVxuICBDb25zIChpLCBpbnRzIChpICsgMSkpXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgT0NhbWwgcHJvZ3JhbW1lcnMgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE4IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbnR5cGUgJ2EgdCA9ICdhIG9wdGlvbiA9IE5vbmUgfCBTb21lIG9mICdhXG5cbmxldCBub25lID0gTm9uZVxubGV0IHNvbWUgdiA9IFNvbWUgdlxubGV0IHZhbHVlIG8gfmRlZmF1bHQgPSBtYXRjaCBvIHdpdGggU29tZSB2IC0+IHYgfCBOb25lIC0+IGRlZmF1bHRcbmxldCBnZXQgPSBmdW5jdGlvbiBTb21lIHYgLT4gdiB8IE5vbmUgLT4gaW52YWxpZF9hcmcgXCJvcHRpb24gaXMgTm9uZVwiXG5sZXQgYmluZCBvIGYgPSBtYXRjaCBvIHdpdGggTm9uZSAtPiBOb25lIHwgU29tZSB2IC0+IGYgdlxubGV0IGpvaW4gPSBmdW5jdGlvbiBTb21lIG8gLT4gbyB8IE5vbmUgLT4gTm9uZVxubGV0IG1hcCBmIG8gPSBtYXRjaCBvIHdpdGggTm9uZSAtPiBOb25lIHwgU29tZSB2IC0+IFNvbWUgKGYgdilcbmxldCBmb2xkIH5ub25lIH5zb21lID0gZnVuY3Rpb24gU29tZSB2IC0+IHNvbWUgdiB8IE5vbmUgLT4gbm9uZVxubGV0IGl0ZXIgZiA9IGZ1bmN0aW9uIFNvbWUgdiAtPiBmIHYgfCBOb25lIC0+ICgpXG5sZXQgaXNfbm9uZSA9IGZ1bmN0aW9uIE5vbmUgLT4gdHJ1ZSB8IFNvbWUgXyAtPiBmYWxzZVxubGV0IGlzX3NvbWUgPSBmdW5jdGlvbiBOb25lIC0+IGZhbHNlIHwgU29tZSBfIC0+IHRydWVcblxubGV0IGVxdWFsIGVxIG8wIG8xID0gbWF0Y2ggbzAsIG8xIHdpdGhcbnwgU29tZSB2MCwgU29tZSB2MSAtPiBlcSB2MCB2MVxufCBOb25lLCBOb25lIC0+IHRydWVcbnwgXyAtPiBmYWxzZVxuXG5sZXQgY29tcGFyZSBjbXAgbzAgbzEgPSBtYXRjaCBvMCwgbzEgd2l0aFxufCBTb21lIHYwLCBTb21lIHYxIC0+IGNtcCB2MCB2MVxufCBOb25lLCBOb25lIC0+IDBcbnwgTm9uZSwgU29tZSBfIC0+IC0xXG58IFNvbWUgXywgTm9uZSAtPiAxXG5cbmxldCB0b19yZXN1bHQgfm5vbmUgPSBmdW5jdGlvbiBOb25lIC0+IEVycm9yIG5vbmUgfCBTb21lIHYgLT4gT2sgdlxubGV0IHRvX2xpc3QgPSBmdW5jdGlvbiBOb25lIC0+IFtdIHwgU29tZSB2IC0+IFt2XVxubGV0IHRvX3NlcSA9IGZ1bmN0aW9uIE5vbmUgLT4gU2VxLmVtcHR5IHwgU29tZSB2IC0+IFNlcS5yZXR1cm4gdlxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgVGhlIE9DYW1sIHByb2dyYW1tZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxOCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG50eXBlICgnYSwgJ2UpIHQgPSAoJ2EsICdlKSByZXN1bHQgPSBPayBvZiAnYSB8IEVycm9yIG9mICdlXG5cbmxldCBvayB2ID0gT2sgdlxubGV0IGVycm9yIGUgPSBFcnJvciBlXG5sZXQgdmFsdWUgciB+ZGVmYXVsdCA9IG1hdGNoIHIgd2l0aCBPayB2IC0+IHYgfCBFcnJvciBfIC0+IGRlZmF1bHRcbmxldCBnZXRfb2sgPSBmdW5jdGlvbiBPayB2IC0+IHYgfCBFcnJvciBfIC0+IGludmFsaWRfYXJnIFwicmVzdWx0IGlzIEVycm9yIF9cIlxubGV0IGdldF9lcnJvciA9IGZ1bmN0aW9uIEVycm9yIGUgLT4gZSB8IE9rIF8gLT4gaW52YWxpZF9hcmcgXCJyZXN1bHQgaXMgT2sgX1wiXG5sZXQgYmluZCByIGYgPSBtYXRjaCByIHdpdGggT2sgdiAtPiBmIHYgfCBFcnJvciBfIGFzIGUgLT4gZVxubGV0IGpvaW4gPSBmdW5jdGlvbiBPayByIC0+IHIgfCBFcnJvciBfIGFzIGUgLT4gZVxubGV0IG1hcCBmID0gZnVuY3Rpb24gT2sgdiAtPiBPayAoZiB2KSB8IEVycm9yIF8gYXMgZSAtPiBlXG5sZXQgbWFwX2Vycm9yIGYgPSBmdW5jdGlvbiBFcnJvciBlIC0+IEVycm9yIChmIGUpIHwgT2sgXyBhcyB2IC0+IHZcbmxldCBmb2xkIH5vayB+ZXJyb3IgPSBmdW5jdGlvbiBPayB2IC0+IG9rIHYgfCBFcnJvciBlIC0+IGVycm9yIGVcbmxldCBpdGVyIGYgPSBmdW5jdGlvbiBPayB2IC0+IGYgdiB8IEVycm9yIF8gLT4gKClcbmxldCBpdGVyX2Vycm9yIGYgPSBmdW5jdGlvbiBFcnJvciBlIC0+IGYgZSB8IE9rIF8gLT4gKClcbmxldCBpc19vayA9IGZ1bmN0aW9uIE9rIF8gLT4gdHJ1ZSB8IEVycm9yIF8gLT4gZmFsc2VcbmxldCBpc19lcnJvciA9IGZ1bmN0aW9uIEVycm9yIF8gLT4gdHJ1ZSB8IE9rIF8gLT4gZmFsc2VcblxubGV0IGVxdWFsIH5vayB+ZXJyb3IgcjAgcjEgPSBtYXRjaCByMCwgcjEgd2l0aFxufCBPayB2MCwgT2sgdjEgLT4gb2sgdjAgdjFcbnwgRXJyb3IgZTAsIEVycm9yIGUxIC0+IGVycm9yIGUwIGUxXG58IF8sIF8gLT4gZmFsc2VcblxubGV0IGNvbXBhcmUgfm9rIH5lcnJvciByMCByMSA9IG1hdGNoIHIwLCByMSB3aXRoXG58IE9rIHYwLCBPayB2MSAtPiBvayB2MCB2MVxufCBFcnJvciBlMCwgRXJyb3IgZTEgLT4gZXJyb3IgZTAgZTFcbnwgT2sgXywgRXJyb3IgXyAtPiAtMVxufCBFcnJvciBfLCBPayBfIC0+IDFcblxubGV0IHRvX29wdGlvbiA9IGZ1bmN0aW9uIE9rIHYgLT4gU29tZSB2IHwgRXJyb3IgXyAtPiBOb25lXG5sZXQgdG9fbGlzdCA9IGZ1bmN0aW9uIE9rIHYgLT4gW3ZdIHwgRXJyb3IgXyAtPiBbXVxubGV0IHRvX3NlcSA9IGZ1bmN0aW9uIE9rIHYgLT4gU2VxLnJldHVybiB2IHwgRXJyb3IgXyAtPiBTZXEuZW1wdHlcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBPQ2FtbCBwcm9ncmFtbWVycyAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMTggSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxudHlwZSB0ID0gYm9vbCA9IGZhbHNlIHwgdHJ1ZVxuXG5leHRlcm5hbCBub3QgOiBib29sIC0+IGJvb2wgPSBcIiVib29sbm90XCJcbmV4dGVybmFsICggJiYgKSA6IGJvb2wgLT4gYm9vbCAtPiBib29sID0gXCIlc2VxdWFuZFwiXG5leHRlcm5hbCAoIHx8ICkgOiBib29sIC0+IGJvb2wgLT4gYm9vbCA9IFwiJXNlcXVvclwiXG5sZXQgZXF1YWwgOiBib29sIC0+IGJvb2wgLT4gYm9vbCA9ICggPSApXG5sZXQgY29tcGFyZSA6IGJvb2wgLT4gYm9vbCAtPiBpbnQgPSBTdGRsaWIuY29tcGFyZVxuZXh0ZXJuYWwgdG9faW50IDogYm9vbCAtPiBpbnQgPSBcIiVpZGVudGl0eVwiXG5sZXQgdG9fZmxvYXQgPSBmdW5jdGlvbiBmYWxzZSAtPiAwLiB8IHRydWUgLT4gMS5cblxuKCpcbmxldCBvZl9zdHJpbmcgPSBmdW5jdGlvblxufCBcImZhbHNlXCIgLT4gU29tZSBmYWxzZVxufCBcInRydWVcIiAtPiBTb21lIHRydWVcbnwgXyAtPiBOb25lXG4qKVxuXG5sZXQgdG9fc3RyaW5nID0gZnVuY3Rpb24gZmFsc2UgLT4gXCJmYWxzZVwiIHwgdHJ1ZSAtPiBcInRydWVcIlxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBDaGFyYWN0ZXIgb3BlcmF0aW9ucyAqKVxuXG5leHRlcm5hbCBjb2RlOiBjaGFyIC0+IGludCA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIHVuc2FmZV9jaHI6IGludCAtPiBjaGFyID0gXCIlaWRlbnRpdHlcIlxuXG5sZXQgY2hyIG4gPVxuICBpZiBuIDwgMCB8fCBuID4gMjU1IHRoZW4gaW52YWxpZF9hcmcgXCJDaGFyLmNoclwiIGVsc2UgdW5zYWZlX2NociBuXG5cbmV4dGVybmFsIGJ5dGVzX2NyZWF0ZTogaW50IC0+IGJ5dGVzID0gXCJjYW1sX2NyZWF0ZV9ieXRlc1wiXG5leHRlcm5hbCBieXRlc191bnNhZmVfc2V0IDogYnl0ZXMgLT4gaW50IC0+IGNoYXIgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcIiVieXRlc191bnNhZmVfc2V0XCJcbmV4dGVybmFsIHVuc2FmZV90b19zdHJpbmcgOiBieXRlcyAtPiBzdHJpbmcgPSBcIiVieXRlc190b19zdHJpbmdcIlxuXG5sZXQgZXNjYXBlZCA9IGZ1bmN0aW9uXG4gIHwgJ1xcJycgLT4gXCJcXFxcJ1wiXG4gIHwgJ1xcXFwnIC0+IFwiXFxcXFxcXFxcIlxuICB8ICdcXG4nIC0+IFwiXFxcXG5cIlxuICB8ICdcXHQnIC0+IFwiXFxcXHRcIlxuICB8ICdcXHInIC0+IFwiXFxcXHJcIlxuICB8ICdcXGInIC0+IFwiXFxcXGJcIlxuICB8ICcgJyAuLiAnficgYXMgYyAtPlxuICAgICAgbGV0IHMgPSBieXRlc19jcmVhdGUgMSBpblxuICAgICAgYnl0ZXNfdW5zYWZlX3NldCBzIDAgYztcbiAgICAgIHVuc2FmZV90b19zdHJpbmcgc1xuICB8IGMgLT5cbiAgICAgIGxldCBuID0gY29kZSBjIGluXG4gICAgICBsZXQgcyA9IGJ5dGVzX2NyZWF0ZSA0IGluXG4gICAgICBieXRlc191bnNhZmVfc2V0IHMgMCAnXFxcXCc7XG4gICAgICBieXRlc191bnNhZmVfc2V0IHMgMSAodW5zYWZlX2NociAoNDggKyBuIC8gMTAwKSk7XG4gICAgICBieXRlc191bnNhZmVfc2V0IHMgMiAodW5zYWZlX2NociAoNDggKyAobiAvIDEwKSBtb2QgMTApKTtcbiAgICAgIGJ5dGVzX3Vuc2FmZV9zZXQgcyAzICh1bnNhZmVfY2hyICg0OCArIG4gbW9kIDEwKSk7XG4gICAgICB1bnNhZmVfdG9fc3RyaW5nIHNcblxubGV0IGxvd2VyY2FzZSA9IGZ1bmN0aW9uXG4gIHwgJ0EnIC4uICdaJ1xuICB8ICdcXDE5MicgLi4gJ1xcMjE0J1xuICB8ICdcXDIxNicgLi4gJ1xcMjIyJyBhcyBjIC0+XG4gICAgdW5zYWZlX2Nocihjb2RlIGMgKyAzMilcbiAgfCBjIC0+IGNcblxubGV0IHVwcGVyY2FzZSA9IGZ1bmN0aW9uXG4gIHwgJ2EnIC4uICd6J1xuICB8ICdcXDIyNCcgLi4gJ1xcMjQ2J1xuICB8ICdcXDI0OCcgLi4gJ1xcMjU0JyBhcyBjIC0+XG4gICAgdW5zYWZlX2Nocihjb2RlIGMgLSAzMilcbiAgfCBjIC0+IGNcblxubGV0IGxvd2VyY2FzZV9hc2NpaSA9IGZ1bmN0aW9uXG4gIHwgJ0EnIC4uICdaJyBhcyBjIC0+IHVuc2FmZV9jaHIoY29kZSBjICsgMzIpXG4gIHwgYyAtPiBjXG5cbmxldCB1cHBlcmNhc2VfYXNjaWkgPSBmdW5jdGlvblxuICB8ICdhJyAuLiAneicgYXMgYyAtPiB1bnNhZmVfY2hyKGNvZGUgYyAtIDMyKVxuICB8IGMgLT4gY1xuXG50eXBlIHQgPSBjaGFyXG5cbmxldCBjb21wYXJlIGMxIGMyID0gY29kZSBjMSAtIGNvZGUgYzJcbmxldCBlcXVhbCAoYzE6IHQpIChjMjogdCkgPSBjb21wYXJlIGMxIGMyID0gMFxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBCeXRlIHNlcXVlbmNlIG9wZXJhdGlvbnMgKilcblxuKCogV0FSTklORzogU29tZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlIGFyZSBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCBmb3JcbiAgIGVmZmljaWVuY3kgcmVhc29ucy4gV2hlbiB5b3UgbW9kaWZ5IHRoZSBvbmUgaW4gdGhpcyBmaWxlIHlvdSBuZWVkIHRvXG4gICBtb2RpZnkgaXRzIGR1cGxpY2F0ZSBpbiBzdHJpbmcubWwuXG4gICBUaGVzZSBmdW5jdGlvbnMgaGF2ZSBhIFwiZHVwbGljYXRlZFwiIGNvbW1lbnQgYWJvdmUgdGhlaXIgZGVmaW5pdGlvbi5cbiopXG5cbmV4dGVybmFsIGxlbmd0aCA6IGJ5dGVzIC0+IGludCA9IFwiJWJ5dGVzX2xlbmd0aFwiXG5leHRlcm5hbCBzdHJpbmdfbGVuZ3RoIDogc3RyaW5nIC0+IGludCA9IFwiJXN0cmluZ19sZW5ndGhcIlxuZXh0ZXJuYWwgZ2V0IDogYnl0ZXMgLT4gaW50IC0+IGNoYXIgPSBcIiVieXRlc19zYWZlX2dldFwiXG5leHRlcm5hbCBzZXQgOiBieXRlcyAtPiBpbnQgLT4gY2hhciAtPiB1bml0ID0gXCIlYnl0ZXNfc2FmZV9zZXRcIlxuZXh0ZXJuYWwgY3JlYXRlIDogaW50IC0+IGJ5dGVzID0gXCJjYW1sX2NyZWF0ZV9ieXRlc1wiXG5leHRlcm5hbCB1bnNhZmVfZ2V0IDogYnl0ZXMgLT4gaW50IC0+IGNoYXIgPSBcIiVieXRlc191bnNhZmVfZ2V0XCJcbmV4dGVybmFsIHVuc2FmZV9zZXQgOiBieXRlcyAtPiBpbnQgLT4gY2hhciAtPiB1bml0ID0gXCIlYnl0ZXNfdW5zYWZlX3NldFwiXG5leHRlcm5hbCB1bnNhZmVfZmlsbCA6IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gY2hhciAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9maWxsX2J5dGVzXCIgW0BAbm9hbGxvY11cbmV4dGVybmFsIHVuc2FmZV90b19zdHJpbmcgOiBieXRlcyAtPiBzdHJpbmcgPSBcIiVieXRlc190b19zdHJpbmdcIlxuZXh0ZXJuYWwgdW5zYWZlX29mX3N0cmluZyA6IHN0cmluZyAtPiBieXRlcyA9IFwiJWJ5dGVzX29mX3N0cmluZ1wiXG5cbmV4dGVybmFsIHVuc2FmZV9ibGl0IDogYnl0ZXMgLT4gaW50IC0+IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfYmxpdF9ieXRlc1wiIFtAQG5vYWxsb2NdXG5leHRlcm5hbCB1bnNhZmVfYmxpdF9zdHJpbmcgOiBzdHJpbmcgLT4gaW50IC0+IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfYmxpdF9zdHJpbmdcIiBbQEBub2FsbG9jXVxuXG5sZXQgbWFrZSBuIGMgPVxuICBsZXQgcyA9IGNyZWF0ZSBuIGluXG4gIHVuc2FmZV9maWxsIHMgMCBuIGM7XG4gIHNcblxubGV0IGluaXQgbiBmID1cbiAgbGV0IHMgPSBjcmVhdGUgbiBpblxuICBmb3IgaSA9IDAgdG8gbiAtIDEgZG9cbiAgICB1bnNhZmVfc2V0IHMgaSAoZiBpKVxuICBkb25lO1xuICBzXG5cbmxldCBlbXB0eSA9IGNyZWF0ZSAwXG5cbmxldCBjb3B5IHMgPVxuICBsZXQgbGVuID0gbGVuZ3RoIHMgaW5cbiAgbGV0IHIgPSBjcmVhdGUgbGVuIGluXG4gIHVuc2FmZV9ibGl0IHMgMCByIDAgbGVuO1xuICByXG5cbmxldCB0b19zdHJpbmcgYiA9IHVuc2FmZV90b19zdHJpbmcgKGNvcHkgYilcbmxldCBvZl9zdHJpbmcgcyA9IGNvcHkgKHVuc2FmZV9vZl9zdHJpbmcgcylcblxubGV0IHN1YiBzIG9mcyBsZW4gPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gbGVuZ3RoIHMgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIlN0cmluZy5zdWIgLyBCeXRlcy5zdWJcIlxuICBlbHNlIGJlZ2luXG4gICAgbGV0IHIgPSBjcmVhdGUgbGVuIGluXG4gICAgdW5zYWZlX2JsaXQgcyBvZnMgciAwIGxlbjtcbiAgICByXG4gIGVuZFxuXG5sZXQgc3ViX3N0cmluZyBiIG9mcyBsZW4gPSB1bnNhZmVfdG9fc3RyaW5nIChzdWIgYiBvZnMgbGVuKVxuXG4oKiBhZGRpdGlvbiB3aXRoIGFuIG92ZXJmbG93IGNoZWNrICopXG5sZXQgKCsrKSBhIGIgPVxuICBsZXQgYyA9IGEgKyBiIGluXG4gIG1hdGNoIGEgPCAwLCBiIDwgMCwgYyA8IDAgd2l0aFxuICB8IHRydWUgLCB0cnVlICwgZmFsc2VcbiAgfCBmYWxzZSwgZmFsc2UsIHRydWUgIC0+IGludmFsaWRfYXJnIFwiQnl0ZXMuZXh0ZW5kXCIgKCogb3ZlcmZsb3cgKilcbiAgfCBfIC0+IGNcblxubGV0IGV4dGVuZCBzIGxlZnQgcmlnaHQgPVxuICBsZXQgbGVuID0gbGVuZ3RoIHMgKysgbGVmdCArKyByaWdodCBpblxuICBsZXQgciA9IGNyZWF0ZSBsZW4gaW5cbiAgbGV0IChzcmNvZmYsIGRzdG9mZikgPSBpZiBsZWZ0IDwgMCB0aGVuIC1sZWZ0LCAwIGVsc2UgMCwgbGVmdCBpblxuICBsZXQgY3B5bGVuID0gSW50Lm1pbiAobGVuZ3RoIHMgLSBzcmNvZmYpIChsZW4gLSBkc3RvZmYpIGluXG4gIGlmIGNweWxlbiA+IDAgdGhlbiB1bnNhZmVfYmxpdCBzIHNyY29mZiByIGRzdG9mZiBjcHlsZW47XG4gIHJcblxubGV0IGZpbGwgcyBvZnMgbGVuIGMgPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gbGVuZ3RoIHMgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIlN0cmluZy5maWxsIC8gQnl0ZXMuZmlsbFwiXG4gIGVsc2UgdW5zYWZlX2ZpbGwgcyBvZnMgbGVuIGNcblxubGV0IGJsaXQgczEgb2ZzMSBzMiBvZnMyIGxlbiA9XG4gIGlmIGxlbiA8IDAgfHwgb2ZzMSA8IDAgfHwgb2ZzMSA+IGxlbmd0aCBzMSAtIGxlblxuICAgICAgICAgICAgIHx8IG9mczIgPCAwIHx8IG9mczIgPiBsZW5ndGggczIgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIkJ5dGVzLmJsaXRcIlxuICBlbHNlIHVuc2FmZV9ibGl0IHMxIG9mczEgczIgb2ZzMiBsZW5cblxubGV0IGJsaXRfc3RyaW5nIHMxIG9mczEgczIgb2ZzMiBsZW4gPVxuICBpZiBsZW4gPCAwIHx8IG9mczEgPCAwIHx8IG9mczEgPiBzdHJpbmdfbGVuZ3RoIHMxIC0gbGVuXG4gICAgICAgICAgICAgfHwgb2ZzMiA8IDAgfHwgb2ZzMiA+IGxlbmd0aCBzMiAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiU3RyaW5nLmJsaXQgLyBCeXRlcy5ibGl0X3N0cmluZ1wiXG4gIGVsc2UgdW5zYWZlX2JsaXRfc3RyaW5nIHMxIG9mczEgczIgb2ZzMiBsZW5cblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBpdGVyIGYgYSA9XG4gIGZvciBpID0gMCB0byBsZW5ndGggYSAtIDEgZG8gZih1bnNhZmVfZ2V0IGEgaSkgZG9uZVxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGl0ZXJpIGYgYSA9XG4gIGZvciBpID0gMCB0byBsZW5ndGggYSAtIDEgZG8gZiBpICh1bnNhZmVfZ2V0IGEgaSkgZG9uZVxuXG5sZXQgZW5zdXJlX2dlICh4OmludCkgeSA9IGlmIHggPj0geSB0aGVuIHggZWxzZSBpbnZhbGlkX2FyZyBcIkJ5dGVzLmNvbmNhdFwiXG5cbmxldCByZWMgc3VtX2xlbmd0aHMgYWNjIHNlcGxlbiA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gYWNjXG4gIHwgaGQgOjogW10gLT4gbGVuZ3RoIGhkICsgYWNjXG4gIHwgaGQgOjogdGwgLT4gc3VtX2xlbmd0aHMgKGVuc3VyZV9nZSAobGVuZ3RoIGhkICsgc2VwbGVuICsgYWNjKSBhY2MpIHNlcGxlbiB0bFxuXG5sZXQgcmVjIHVuc2FmZV9ibGl0cyBkc3QgcG9zIHNlcCBzZXBsZW4gPSBmdW5jdGlvblxuICAgIFtdIC0+IGRzdFxuICB8IGhkIDo6IFtdIC0+XG4gICAgdW5zYWZlX2JsaXQgaGQgMCBkc3QgcG9zIChsZW5ndGggaGQpOyBkc3RcbiAgfCBoZCA6OiB0bCAtPlxuICAgIHVuc2FmZV9ibGl0IGhkIDAgZHN0IHBvcyAobGVuZ3RoIGhkKTtcbiAgICB1bnNhZmVfYmxpdCBzZXAgMCBkc3QgKHBvcyArIGxlbmd0aCBoZCkgc2VwbGVuO1xuICAgIHVuc2FmZV9ibGl0cyBkc3QgKHBvcyArIGxlbmd0aCBoZCArIHNlcGxlbikgc2VwIHNlcGxlbiB0bFxuXG5sZXQgY29uY2F0IHNlcCA9IGZ1bmN0aW9uXG4gICAgW10gLT4gZW1wdHlcbiAgfCBsIC0+IGxldCBzZXBsZW4gPSBsZW5ndGggc2VwIGluXG4gICAgICAgICAgdW5zYWZlX2JsaXRzXG4gICAgICAgICAgICAoY3JlYXRlIChzdW1fbGVuZ3RocyAwIHNlcGxlbiBsKSlcbiAgICAgICAgICAgIDAgc2VwIHNlcGxlbiBsXG5cbmxldCBjYXQgczEgczIgPVxuICBsZXQgbDEgPSBsZW5ndGggczEgaW5cbiAgbGV0IGwyID0gbGVuZ3RoIHMyIGluXG4gIGxldCByID0gY3JlYXRlIChsMSArIGwyKSBpblxuICB1bnNhZmVfYmxpdCBzMSAwIHIgMCBsMTtcbiAgdW5zYWZlX2JsaXQgczIgMCByIGwxIGwyO1xuICByXG5cblxuZXh0ZXJuYWwgY2hhcl9jb2RlOiBjaGFyIC0+IGludCA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIGNoYXJfY2hyOiBpbnQgLT4gY2hhciA9IFwiJWlkZW50aXR5XCJcblxubGV0IGlzX3NwYWNlID0gZnVuY3Rpb25cbiAgfCAnICcgfCAnXFwwMTInIHwgJ1xcbicgfCAnXFxyJyB8ICdcXHQnIC0+IHRydWVcbiAgfCBfIC0+IGZhbHNlXG5cbmxldCB0cmltIHMgPVxuICBsZXQgbGVuID0gbGVuZ3RoIHMgaW5cbiAgbGV0IGkgPSByZWYgMCBpblxuICB3aGlsZSAhaSA8IGxlbiAmJiBpc19zcGFjZSAodW5zYWZlX2dldCBzICFpKSBkb1xuICAgIGluY3IgaVxuICBkb25lO1xuICBsZXQgaiA9IHJlZiAobGVuIC0gMSkgaW5cbiAgd2hpbGUgIWogPj0gIWkgJiYgaXNfc3BhY2UgKHVuc2FmZV9nZXQgcyAhaikgZG9cbiAgICBkZWNyIGpcbiAgZG9uZTtcbiAgaWYgIWogPj0gIWkgdGhlblxuICAgIHN1YiBzICFpICghaiAtICFpICsgMSlcbiAgZWxzZVxuICAgIGVtcHR5XG5cbmxldCBlc2NhcGVkIHMgPVxuICBsZXQgbiA9IHJlZiAwIGluXG4gIGZvciBpID0gMCB0byBsZW5ndGggcyAtIDEgZG9cbiAgICBuIDo9ICFuICtcbiAgICAgIChtYXRjaCB1bnNhZmVfZ2V0IHMgaSB3aXRoXG4gICAgICAgfCAnXFxcIicgfCAnXFxcXCcgfCAnXFxuJyB8ICdcXHQnIHwgJ1xccicgfCAnXFxiJyAtPiAyXG4gICAgICAgfCAnICcgLi4gJ34nIC0+IDFcbiAgICAgICB8IF8gLT4gNClcbiAgZG9uZTtcbiAgaWYgIW4gPSBsZW5ndGggcyB0aGVuIGNvcHkgcyBlbHNlIGJlZ2luXG4gICAgbGV0IHMnID0gY3JlYXRlICFuIGluXG4gICAgbiA6PSAwO1xuICAgIGZvciBpID0gMCB0byBsZW5ndGggcyAtIDEgZG9cbiAgICAgIGJlZ2luIG1hdGNoIHVuc2FmZV9nZXQgcyBpIHdpdGhcbiAgICAgIHwgKCdcXFwiJyB8ICdcXFxcJykgYXMgYyAtPlxuICAgICAgICAgIHVuc2FmZV9zZXQgcycgIW4gJ1xcXFwnOyBpbmNyIG47IHVuc2FmZV9zZXQgcycgIW4gY1xuICAgICAgfCAnXFxuJyAtPlxuICAgICAgICAgIHVuc2FmZV9zZXQgcycgIW4gJ1xcXFwnOyBpbmNyIG47IHVuc2FmZV9zZXQgcycgIW4gJ24nXG4gICAgICB8ICdcXHQnIC0+XG4gICAgICAgICAgdW5zYWZlX3NldCBzJyAhbiAnXFxcXCc7IGluY3IgbjsgdW5zYWZlX3NldCBzJyAhbiAndCdcbiAgICAgIHwgJ1xccicgLT5cbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuICdcXFxcJzsgaW5jciBuOyB1bnNhZmVfc2V0IHMnICFuICdyJ1xuICAgICAgfCAnXFxiJyAtPlxuICAgICAgICAgIHVuc2FmZV9zZXQgcycgIW4gJ1xcXFwnOyBpbmNyIG47IHVuc2FmZV9zZXQgcycgIW4gJ2InXG4gICAgICB8ICgnICcgLi4gJ34nKSBhcyBjIC0+IHVuc2FmZV9zZXQgcycgIW4gY1xuICAgICAgfCBjIC0+XG4gICAgICAgICAgbGV0IGEgPSBjaGFyX2NvZGUgYyBpblxuICAgICAgICAgIHVuc2FmZV9zZXQgcycgIW4gJ1xcXFwnO1xuICAgICAgICAgIGluY3IgbjtcbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuIChjaGFyX2NociAoNDggKyBhIC8gMTAwKSk7XG4gICAgICAgICAgaW5jciBuO1xuICAgICAgICAgIHVuc2FmZV9zZXQgcycgIW4gKGNoYXJfY2hyICg0OCArIChhIC8gMTApIG1vZCAxMCkpO1xuICAgICAgICAgIGluY3IgbjtcbiAgICAgICAgICB1bnNhZmVfc2V0IHMnICFuIChjaGFyX2NociAoNDggKyBhIG1vZCAxMCkpO1xuICAgICAgZW5kO1xuICAgICAgaW5jciBuXG4gICAgZG9uZTtcbiAgICBzJ1xuICBlbmRcblxubGV0IG1hcCBmIHMgPVxuICBsZXQgbCA9IGxlbmd0aCBzIGluXG4gIGlmIGwgPSAwIHRoZW4gcyBlbHNlIGJlZ2luXG4gICAgbGV0IHIgPSBjcmVhdGUgbCBpblxuICAgIGZvciBpID0gMCB0byBsIC0gMSBkbyB1bnNhZmVfc2V0IHIgaSAoZiAodW5zYWZlX2dldCBzIGkpKSBkb25lO1xuICAgIHJcbiAgZW5kXG5cbmxldCBtYXBpIGYgcyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgbCA9IDAgdGhlbiBzIGVsc2UgYmVnaW5cbiAgICBsZXQgciA9IGNyZWF0ZSBsIGluXG4gICAgZm9yIGkgPSAwIHRvIGwgLSAxIGRvIHVuc2FmZV9zZXQgciBpIChmIGkgKHVuc2FmZV9nZXQgcyBpKSkgZG9uZTtcbiAgICByXG4gIGVuZFxuXG5sZXQgZm9sZF9sZWZ0IGYgeCBhID1cbiAgbGV0IHIgPSByZWYgeCBpblxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIGEgLSAxIGRvXG4gICAgciA6PSBmICFyICh1bnNhZmVfZ2V0IGEgaSlcbiAgZG9uZTtcbiAgIXJcblxubGV0IGZvbGRfcmlnaHQgZiBhIHggPVxuICBsZXQgciA9IHJlZiB4IGluXG4gIGZvciBpID0gbGVuZ3RoIGEgLSAxIGRvd250byAwIGRvXG4gICAgciA6PSBmICh1bnNhZmVfZ2V0IGEgaSkgIXJcbiAgZG9uZTtcbiAgIXJcblxubGV0IGV4aXN0cyBwIHMgPVxuICBsZXQgbiA9IGxlbmd0aCBzIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIGZhbHNlXG4gICAgZWxzZSBpZiBwICh1bnNhZmVfZ2V0IHMgaSkgdGhlbiB0cnVlXG4gICAgZWxzZSBsb29wIChzdWNjIGkpIGluXG4gIGxvb3AgMFxuXG5sZXQgZm9yX2FsbCBwIHMgPVxuICBsZXQgbiA9IGxlbmd0aCBzIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIHRydWVcbiAgICBlbHNlIGlmIHAgKHVuc2FmZV9nZXQgcyBpKSB0aGVuIGxvb3AgKHN1Y2MgaSlcbiAgICBlbHNlIGZhbHNlIGluXG4gIGxvb3AgMFxuXG5sZXQgdXBwZXJjYXNlX2FzY2lpIHMgPSBtYXAgQ2hhci51cHBlcmNhc2VfYXNjaWkgc1xubGV0IGxvd2VyY2FzZV9hc2NpaSBzID0gbWFwIENoYXIubG93ZXJjYXNlX2FzY2lpIHNcblxubGV0IGFwcGx5MSBmIHMgPVxuICBpZiBsZW5ndGggcyA9IDAgdGhlbiBzIGVsc2UgYmVnaW5cbiAgICBsZXQgciA9IGNvcHkgcyBpblxuICAgIHVuc2FmZV9zZXQgciAwIChmKHVuc2FmZV9nZXQgcyAwKSk7XG4gICAgclxuICBlbmRcblxubGV0IGNhcGl0YWxpemVfYXNjaWkgcyA9IGFwcGx5MSBDaGFyLnVwcGVyY2FzZV9hc2NpaSBzXG5sZXQgdW5jYXBpdGFsaXplX2FzY2lpIHMgPSBhcHBseTEgQ2hhci5sb3dlcmNhc2VfYXNjaWkgc1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHN0YXJ0c193aXRoIH5wcmVmaXggcyA9XG4gIGxldCBsZW5fcyA9IGxlbmd0aCBzXG4gIGFuZCBsZW5fcHJlID0gbGVuZ3RoIHByZWZpeCBpblxuICBsZXQgcmVjIGF1eCBpID1cbiAgICBpZiBpID0gbGVuX3ByZSB0aGVuIHRydWVcbiAgICBlbHNlIGlmIHVuc2FmZV9nZXQgcyBpIDw+IHVuc2FmZV9nZXQgcHJlZml4IGkgdGhlbiBmYWxzZVxuICAgIGVsc2UgYXV4IChpICsgMSlcbiAgaW4gbGVuX3MgPj0gbGVuX3ByZSAmJiBhdXggMFxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGVuZHNfd2l0aCB+c3VmZml4IHMgPVxuICBsZXQgbGVuX3MgPSBsZW5ndGggc1xuICBhbmQgbGVuX3N1ZiA9IGxlbmd0aCBzdWZmaXggaW5cbiAgbGV0IGRpZmYgPSBsZW5fcyAtIGxlbl9zdWYgaW5cbiAgbGV0IHJlYyBhdXggaSA9XG4gICAgaWYgaSA9IGxlbl9zdWYgdGhlbiB0cnVlXG4gICAgZWxzZSBpZiB1bnNhZmVfZ2V0IHMgKGRpZmYgKyBpKSA8PiB1bnNhZmVfZ2V0IHN1ZmZpeCBpIHRoZW4gZmFsc2VcbiAgICBlbHNlIGF1eCAoaSArIDEpXG4gIGluIGRpZmYgPj0gMCAmJiBhdXggMFxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHJlYyBpbmRleF9yZWMgcyBsaW0gaSBjID1cbiAgaWYgaSA+PSBsaW0gdGhlbiByYWlzZSBOb3RfZm91bmQgZWxzZVxuICBpZiB1bnNhZmVfZ2V0IHMgaSA9IGMgdGhlbiBpIGVsc2UgaW5kZXhfcmVjIHMgbGltIChpICsgMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGluZGV4IHMgYyA9IGluZGV4X3JlYyBzIChsZW5ndGggcykgMCBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmVjIGluZGV4X3JlY19vcHQgcyBsaW0gaSBjID1cbiAgaWYgaSA+PSBsaW0gdGhlbiBOb25lIGVsc2VcbiAgaWYgdW5zYWZlX2dldCBzIGkgPSBjIHRoZW4gU29tZSBpIGVsc2UgaW5kZXhfcmVjX29wdCBzIGxpbSAoaSArIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBpbmRleF9vcHQgcyBjID0gaW5kZXhfcmVjX29wdCBzIChsZW5ndGggcykgMCBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgaW5kZXhfZnJvbSBzIGkgYyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IGwgdGhlbiBpbnZhbGlkX2FyZyBcIlN0cmluZy5pbmRleF9mcm9tIC8gQnl0ZXMuaW5kZXhfZnJvbVwiIGVsc2VcbiAgaW5kZXhfcmVjIHMgbCBpIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBpbmRleF9mcm9tX29wdCBzIGkgYyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IGwgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLmluZGV4X2Zyb21fb3B0IC8gQnl0ZXMuaW5kZXhfZnJvbV9vcHRcIlxuICBlbHNlXG4gICAgaW5kZXhfcmVjX29wdCBzIGwgaSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmVjIHJpbmRleF9yZWMgcyBpIGMgPVxuICBpZiBpIDwgMCB0aGVuIHJhaXNlIE5vdF9mb3VuZCBlbHNlXG4gIGlmIHVuc2FmZV9nZXQgcyBpID0gYyB0aGVuIGkgZWxzZSByaW5kZXhfcmVjIHMgKGkgLSAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmluZGV4IHMgYyA9IHJpbmRleF9yZWMgcyAobGVuZ3RoIHMgLSAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmluZGV4X2Zyb20gcyBpIGMgPVxuICBpZiBpIDwgLTEgfHwgaSA+PSBsZW5ndGggcyB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcucmluZGV4X2Zyb20gLyBCeXRlcy5yaW5kZXhfZnJvbVwiXG4gIGVsc2VcbiAgICByaW5kZXhfcmVjIHMgaSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmVjIHJpbmRleF9yZWNfb3B0IHMgaSBjID1cbiAgaWYgaSA8IDAgdGhlbiBOb25lIGVsc2VcbiAgaWYgdW5zYWZlX2dldCBzIGkgPSBjIHRoZW4gU29tZSBpIGVsc2UgcmluZGV4X3JlY19vcHQgcyAoaSAtIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCByaW5kZXhfb3B0IHMgYyA9IHJpbmRleF9yZWNfb3B0IHMgKGxlbmd0aCBzIC0gMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHJpbmRleF9mcm9tX29wdCBzIGkgYyA9XG4gIGlmIGkgPCAtMSB8fCBpID49IGxlbmd0aCBzIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5yaW5kZXhfZnJvbV9vcHQgLyBCeXRlcy5yaW5kZXhfZnJvbV9vcHRcIlxuICBlbHNlXG4gICAgcmluZGV4X3JlY19vcHQgcyBpIGNcblxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGNvbnRhaW5zX2Zyb20gcyBpIGMgPVxuICBsZXQgbCA9IGxlbmd0aCBzIGluXG4gIGlmIGkgPCAwIHx8IGkgPiBsIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5jb250YWluc19mcm9tIC8gQnl0ZXMuY29udGFpbnNfZnJvbVwiXG4gIGVsc2VcbiAgICB0cnkgaWdub3JlIChpbmRleF9yZWMgcyBsIGkgYyk7IHRydWUgd2l0aCBOb3RfZm91bmQgLT4gZmFsc2VcblxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGNvbnRhaW5zIHMgYyA9IGNvbnRhaW5zX2Zyb20gcyAwIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCByY29udGFpbnNfZnJvbSBzIGkgYyA9XG4gIGlmIGkgPCAwIHx8IGkgPj0gbGVuZ3RoIHMgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLnJjb250YWluc19mcm9tIC8gQnl0ZXMucmNvbnRhaW5zX2Zyb21cIlxuICBlbHNlXG4gICAgdHJ5IGlnbm9yZSAocmluZGV4X3JlYyBzIGkgYyk7IHRydWUgd2l0aCBOb3RfZm91bmQgLT4gZmFsc2VcblxuXG50eXBlIHQgPSBieXRlc1xuXG5sZXQgY29tcGFyZSAoeDogdCkgKHk6IHQpID0gU3RkbGliLmNvbXBhcmUgeCB5XG5leHRlcm5hbCBlcXVhbCA6IHQgLT4gdCAtPiBib29sID0gXCJjYW1sX2J5dGVzX2VxdWFsXCIgW0BAbm9hbGxvY11cblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBzcGxpdF9vbl9jaGFyIHNlcCBzID1cbiAgbGV0IHIgPSByZWYgW10gaW5cbiAgbGV0IGogPSByZWYgKGxlbmd0aCBzKSBpblxuICBmb3IgaSA9IGxlbmd0aCBzIC0gMSBkb3dudG8gMCBkb1xuICAgIGlmIHVuc2FmZV9nZXQgcyBpID0gc2VwIHRoZW4gYmVnaW5cbiAgICAgIHIgOj0gc3ViIHMgKGkgKyAxKSAoIWogLSBpIC0gMSkgOjogIXI7XG4gICAgICBqIDo9IGlcbiAgICBlbmRcbiAgZG9uZTtcbiAgc3ViIHMgMCAhaiA6OiAhclxuXG4oKiBEZXByZWNhdGVkIGZ1bmN0aW9ucyBpbXBsZW1lbnRlZCB2aWEgb3RoZXIgZGVwcmVjYXRlZCBmdW5jdGlvbnMgKilcbltAQEBvY2FtbC53YXJuaW5nIFwiLTNcIl1cbmxldCB1cHBlcmNhc2UgcyA9IG1hcCBDaGFyLnVwcGVyY2FzZSBzXG5sZXQgbG93ZXJjYXNlIHMgPSBtYXAgQ2hhci5sb3dlcmNhc2Ugc1xuXG5sZXQgY2FwaXRhbGl6ZSBzID0gYXBwbHkxIENoYXIudXBwZXJjYXNlIHNcbmxldCB1bmNhcGl0YWxpemUgcyA9IGFwcGx5MSBDaGFyLmxvd2VyY2FzZSBzXG5cbigqKiB7MSBJdGVyYXRvcnN9ICopXG5cbmxldCB0b19zZXEgcyA9XG4gIGxldCByZWMgYXV4IGkgKCkgPVxuICAgIGlmIGkgPSBsZW5ndGggcyB0aGVuIFNlcS5OaWxcbiAgICBlbHNlXG4gICAgICBsZXQgeCA9IGdldCBzIGkgaW5cbiAgICAgIFNlcS5Db25zICh4LCBhdXggKGkrMSkpXG4gIGluXG4gIGF1eCAwXG5cbmxldCB0b19zZXFpIHMgPVxuICBsZXQgcmVjIGF1eCBpICgpID1cbiAgICBpZiBpID0gbGVuZ3RoIHMgdGhlbiBTZXEuTmlsXG4gICAgZWxzZVxuICAgICAgbGV0IHggPSBnZXQgcyBpIGluXG4gICAgICBTZXEuQ29ucyAoKGkseCksIGF1eCAoaSsxKSlcbiAgaW5cbiAgYXV4IDBcblxubGV0IG9mX3NlcSBpID1cbiAgbGV0IG4gPSByZWYgMCBpblxuICBsZXQgYnVmID0gcmVmIChtYWtlIDI1NiAnXFwwMDAnKSBpblxuICBsZXQgcmVzaXplICgpID1cbiAgICAoKiByZXNpemUgKilcbiAgICBsZXQgbmV3X2xlbiA9IEludC5taW4gKDIgKiBsZW5ndGggIWJ1ZikgU3lzLm1heF9zdHJpbmdfbGVuZ3RoIGluXG4gICAgaWYgbGVuZ3RoICFidWYgPSBuZXdfbGVuIHRoZW4gZmFpbHdpdGggXCJCeXRlcy5vZl9zZXE6IGNhbm5vdCBncm93IGJ5dGVzXCI7XG4gICAgbGV0IG5ld19idWYgPSBtYWtlIG5ld19sZW4gJ1xcMDAwJyBpblxuICAgIGJsaXQgIWJ1ZiAwIG5ld19idWYgMCAhbjtcbiAgICBidWYgOj0gbmV3X2J1ZlxuICBpblxuICBTZXEuaXRlclxuICAgIChmdW4gYyAtPlxuICAgICAgIGlmICFuID0gbGVuZ3RoICFidWYgdGhlbiByZXNpemUoKTtcbiAgICAgICBzZXQgIWJ1ZiAhbiBjO1xuICAgICAgIGluY3IgbilcbiAgICBpO1xuICBzdWIgIWJ1ZiAwICFuXG5cbigqKiB7NiBCaW5hcnkgZW5jb2RpbmcvZGVjb2Rpbmcgb2YgaW50ZWdlcnN9ICopXG5cbigqIFRoZSBnZXRfIGZ1bmN0aW9ucyBhcmUgYWxsIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5cbmV4dGVybmFsIHVuc2FmZV9nZXRfdWludDggOiBieXRlcyAtPiBpbnQgLT4gaW50ID0gXCIlYnl0ZXNfdW5zYWZlX2dldFwiXG5leHRlcm5hbCB1bnNhZmVfZ2V0X3VpbnQxNl9uZSA6IGJ5dGVzIC0+IGludCAtPiBpbnQgPSBcIiVjYW1sX2J5dGVzX2dldDE2dVwiXG5leHRlcm5hbCBnZXRfdWludDggOiBieXRlcyAtPiBpbnQgLT4gaW50ID0gXCIlYnl0ZXNfc2FmZV9nZXRcIlxuZXh0ZXJuYWwgZ2V0X3VpbnQxNl9uZSA6IGJ5dGVzIC0+IGludCAtPiBpbnQgPSBcIiVjYW1sX2J5dGVzX2dldDE2XCJcbmV4dGVybmFsIGdldF9pbnQzMl9uZSA6IGJ5dGVzIC0+IGludCAtPiBpbnQzMiA9IFwiJWNhbWxfYnl0ZXNfZ2V0MzJcIlxuZXh0ZXJuYWwgZ2V0X2ludDY0X25lIDogYnl0ZXMgLT4gaW50IC0+IGludDY0ID0gXCIlY2FtbF9ieXRlc19nZXQ2NFwiXG5cbmV4dGVybmFsIHVuc2FmZV9zZXRfdWludDggOiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXQgPSBcIiVieXRlc191bnNhZmVfc2V0XCJcbmV4dGVybmFsIHVuc2FmZV9zZXRfdWludDE2X25lIDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiJWNhbWxfYnl0ZXNfc2V0MTZ1XCJcbmV4dGVybmFsIHNldF9pbnQ4IDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0ID0gXCIlYnl0ZXNfc2FmZV9zZXRcIlxuZXh0ZXJuYWwgc2V0X2ludDE2X25lIDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0ID0gXCIlY2FtbF9ieXRlc19zZXQxNlwiXG5leHRlcm5hbCBzZXRfaW50MzJfbmUgOiBieXRlcyAtPiBpbnQgLT4gaW50MzIgLT4gdW5pdCA9IFwiJWNhbWxfYnl0ZXNfc2V0MzJcIlxuZXh0ZXJuYWwgc2V0X2ludDY0X25lIDogYnl0ZXMgLT4gaW50IC0+IGludDY0IC0+IHVuaXQgPSBcIiVjYW1sX2J5dGVzX3NldDY0XCJcbmV4dGVybmFsIHN3YXAxNiA6IGludCAtPiBpbnQgPSBcIiVic3dhcDE2XCJcbmV4dGVybmFsIHN3YXAzMiA6IGludDMyIC0+IGludDMyID0gXCIlYnN3YXBfaW50MzJcIlxuZXh0ZXJuYWwgc3dhcDY0IDogaW50NjQgLT4gaW50NjQgPSBcIiVic3dhcF9pbnQ2NFwiXG5cbmxldCB1bnNhZmVfZ2V0X3VpbnQxNl9sZSBiIGkgPVxuICBpZiBTeXMuYmlnX2VuZGlhblxuICB0aGVuIHN3YXAxNiAodW5zYWZlX2dldF91aW50MTZfbmUgYiBpKVxuICBlbHNlIHVuc2FmZV9nZXRfdWludDE2X25lIGIgaVxuXG5sZXQgdW5zYWZlX2dldF91aW50MTZfYmUgYiBpID1cbiAgaWYgU3lzLmJpZ19lbmRpYW5cbiAgdGhlbiB1bnNhZmVfZ2V0X3VpbnQxNl9uZSBiIGlcbiAgZWxzZSBzd2FwMTYgKHVuc2FmZV9nZXRfdWludDE2X25lIGIgaSlcblxubGV0IGdldF9pbnQ4IGIgaSA9XG4gICgoZ2V0X3VpbnQ4IGIgaSkgbHNsIChTeXMuaW50X3NpemUgLSA4KSkgYXNyIChTeXMuaW50X3NpemUgLSA4KVxuXG5sZXQgZ2V0X3VpbnQxNl9sZSBiIGkgPVxuICBpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXAxNiAoZ2V0X3VpbnQxNl9uZSBiIGkpXG4gIGVsc2UgZ2V0X3VpbnQxNl9uZSBiIGlcblxubGV0IGdldF91aW50MTZfYmUgYiBpID1cbiAgaWYgbm90IFN5cy5iaWdfZW5kaWFuIHRoZW4gc3dhcDE2IChnZXRfdWludDE2X25lIGIgaSlcbiAgZWxzZSBnZXRfdWludDE2X25lIGIgaVxuXG5sZXQgZ2V0X2ludDE2X25lIGIgaSA9XG4gICgoZ2V0X3VpbnQxNl9uZSBiIGkpIGxzbCAoU3lzLmludF9zaXplIC0gMTYpKSBhc3IgKFN5cy5pbnRfc2l6ZSAtIDE2KVxuXG5sZXQgZ2V0X2ludDE2X2xlIGIgaSA9XG4gICgoZ2V0X3VpbnQxNl9sZSBiIGkpIGxzbCAoU3lzLmludF9zaXplIC0gMTYpKSBhc3IgKFN5cy5pbnRfc2l6ZSAtIDE2KVxuXG5sZXQgZ2V0X2ludDE2X2JlIGIgaSA9XG4gICgoZ2V0X3VpbnQxNl9iZSBiIGkpIGxzbCAoU3lzLmludF9zaXplIC0gMTYpKSBhc3IgKFN5cy5pbnRfc2l6ZSAtIDE2KVxuXG5sZXQgZ2V0X2ludDMyX2xlIGIgaSA9XG4gIGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4gc3dhcDMyIChnZXRfaW50MzJfbmUgYiBpKVxuICBlbHNlIGdldF9pbnQzMl9uZSBiIGlcblxubGV0IGdldF9pbnQzMl9iZSBiIGkgPVxuICBpZiBub3QgU3lzLmJpZ19lbmRpYW4gdGhlbiBzd2FwMzIgKGdldF9pbnQzMl9uZSBiIGkpXG4gIGVsc2UgZ2V0X2ludDMyX25lIGIgaVxuXG5sZXQgZ2V0X2ludDY0X2xlIGIgaSA9XG4gIGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4gc3dhcDY0IChnZXRfaW50NjRfbmUgYiBpKVxuICBlbHNlIGdldF9pbnQ2NF9uZSBiIGlcblxubGV0IGdldF9pbnQ2NF9iZSBiIGkgPVxuICBpZiBub3QgU3lzLmJpZ19lbmRpYW4gdGhlbiBzd2FwNjQgKGdldF9pbnQ2NF9uZSBiIGkpXG4gIGVsc2UgZ2V0X2ludDY0X25lIGIgaVxuXG5sZXQgdW5zYWZlX3NldF91aW50MTZfbGUgYiBpIHggPVxuICBpZiBTeXMuYmlnX2VuZGlhblxuICB0aGVuIHVuc2FmZV9zZXRfdWludDE2X25lIGIgaSAoc3dhcDE2IHgpXG4gIGVsc2UgdW5zYWZlX3NldF91aW50MTZfbmUgYiBpIHhcblxubGV0IHVuc2FmZV9zZXRfdWludDE2X2JlIGIgaSB4ID1cbiAgaWYgU3lzLmJpZ19lbmRpYW5cbiAgdGhlbiB1bnNhZmVfc2V0X3VpbnQxNl9uZSBiIGkgeCBlbHNlXG4gIHVuc2FmZV9zZXRfdWludDE2X25lIGIgaSAoc3dhcDE2IHgpXG5cbmxldCBzZXRfaW50MTZfbGUgYiBpIHggPVxuICBpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHNldF9pbnQxNl9uZSBiIGkgKHN3YXAxNiB4KVxuICBlbHNlIHNldF9pbnQxNl9uZSBiIGkgeFxuXG5sZXQgc2V0X2ludDE2X2JlIGIgaSB4ID1cbiAgaWYgbm90IFN5cy5iaWdfZW5kaWFuIHRoZW4gc2V0X2ludDE2X25lIGIgaSAoc3dhcDE2IHgpXG4gIGVsc2Ugc2V0X2ludDE2X25lIGIgaSB4XG5cbmxldCBzZXRfaW50MzJfbGUgYiBpIHggPVxuICBpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHNldF9pbnQzMl9uZSBiIGkgKHN3YXAzMiB4KVxuICBlbHNlIHNldF9pbnQzMl9uZSBiIGkgeFxuXG5sZXQgc2V0X2ludDMyX2JlIGIgaSB4ID1cbiAgaWYgbm90IFN5cy5iaWdfZW5kaWFuIHRoZW4gc2V0X2ludDMyX25lIGIgaSAoc3dhcDMyIHgpXG4gIGVsc2Ugc2V0X2ludDMyX25lIGIgaSB4XG5cbmxldCBzZXRfaW50NjRfbGUgYiBpIHggPVxuICBpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHNldF9pbnQ2NF9uZSBiIGkgKHN3YXA2NCB4KVxuICBlbHNlIHNldF9pbnQ2NF9uZSBiIGkgeFxuXG5sZXQgc2V0X2ludDY0X2JlIGIgaSB4ID1cbiAgaWYgbm90IFN5cy5iaWdfZW5kaWFuIHRoZW4gc2V0X2ludDY0X25lIGIgaSAoc3dhcDY0IHgpXG4gIGVsc2Ugc2V0X2ludDY0X25lIGIgaSB4XG5cbmxldCBzZXRfdWludDggPSBzZXRfaW50OFxubGV0IHNldF91aW50MTZfbmUgPSBzZXRfaW50MTZfbmVcbmxldCBzZXRfdWludDE2X2JlID0gc2V0X2ludDE2X2JlXG5sZXQgc2V0X3VpbnQxNl9sZSA9IHNldF9pbnQxNl9sZVxuXG4oKiBVVEYgY29kZWNzIGFuZCB2YWxpZGF0aW9ucyAqKVxuXG5sZXQgZGVjX2ludmFsaWQgPSBVY2hhci51dGZfZGVjb2RlX2ludmFsaWRcbmxldFtAaW5saW5lXSBkZWNfcmV0IG4gdSA9IFVjaGFyLnV0Zl9kZWNvZGUgbiAoVWNoYXIudW5zYWZlX29mX2ludCB1KVxuXG4oKiBJbiBjYXNlIG9mIGRlY29kaW5nIGVycm9yLCBpZiB3ZSBlcnJvciBvbiB0aGUgZmlyc3QgYnl0ZSwgd2VcbiAgIGNvbnN1bWUgdGhlIGJ5dGUsIG90aGVyd2lzZSB3ZSBjb25zdW1lIHRoZSBbbl0gYnl0ZXMgcHJlY2VlZGluZ1xuICAgdGhlIGVycm9yaW5nIGJ5dGUuXG5cbiAgIFRoaXMgbWVhbnMgdGhhdCBpZiBhIGNsaWVudCB1c2VzIGRlY29kZXMgd2l0aG91dCBjYXJpbmcgYWJvdXRcbiAgIHZhbGlkaXR5IGl0IG5hdHVyYWxseSByZXBsYWNlIGJvZ3VzIGRhdGEgd2l0aCBVY2hhci5yZXAgYWNjb3JkaW5nXG4gICB0byB0aGUgV0hBVFdHIEVuY29kaW5nIHN0YW5kYXJkLiBPdGhlciBzY2hlbWVzIGFyZSBwb3NzaWJsZSBieVxuICAgY29uc3VsdGluZyB0aGUgbnVtYmVyIG9mIHVzZWQgYnl0ZXMgb24gaW52YWxpZCBkZWNvZGVzLiBGb3IgbW9yZVxuICAgZGV0YWlscyBzZWUgaHR0cHM6Ly9oc2l2b25lbi5maS9icm9rZW4tdXRmLTgvXG5cbiAgIEZvciB0aGlzIHJlYXNvbiBpbiBbZ2V0X3V0Zl84X3VjaGFyXSB3ZSBncmFkdWFsbHkgY2hlY2sgdGhlIG5leHRcbiAgIGJ5dGUgaXMgYXZhaWxhYmxlIHJhdGhlciB0aGFuIGRvaW5nIGl0IGltbWVkaWF0ZWx5IGFmdGVyIHRoZVxuICAgZmlyc3QgYnl0ZS4gQ29udHJhc3Qgd2l0aCBbaXNfdmFsaWRfdXRmXzhdLiAqKVxuXG4oKiBVVEYtOCAqKVxuXG5sZXRbQGlubGluZV0gbm90X2luX3g4MF90b194QkYgYiA9IGIgbHNyIDYgPD4gMGIxMFxubGV0W0BpbmxpbmVdIG5vdF9pbl94QTBfdG9feEJGIGIgPSBiIGxzciA1IDw+IDBiMTAxXG5sZXRbQGlubGluZV0gbm90X2luX3g4MF90b194OUYgYiA9IGIgbHNyIDUgPD4gMGIxMDBcbmxldFtAaW5saW5lXSBub3RfaW5feDkwX3RvX3hCRiBiID0gYiA8IDB4OTAgfHwgMHhCRiA8IGJcbmxldFtAaW5saW5lXSBub3RfaW5feDgwX3RvX3g4RiBiID0gYiBsc3IgNCA8PiAweDhcblxubGV0W0BpbmxpbmVdIHV0Zl84X3VjaGFyXzIgYjAgYjEgPVxuICAoKGIwIGxhbmQgMHgxRikgbHNsIDYpIGxvclxuICAoKGIxIGxhbmQgMHgzRikpXG5cbmxldFtAaW5saW5lXSB1dGZfOF91Y2hhcl8zIGIwIGIxIGIyID1cbiAgKChiMCBsYW5kIDB4MEYpIGxzbCAxMikgbG9yXG4gICgoYjEgbGFuZCAweDNGKSBsc2wgNikgbG9yXG4gICgoYjIgbGFuZCAweDNGKSlcblxubGV0W0BpbmxpbmVdIHV0Zl84X3VjaGFyXzQgYjAgYjEgYjIgYjMgPVxuICAoKGIwIGxhbmQgMHgwNykgbHNsIDE4KSBsb3JcbiAgKChiMSBsYW5kIDB4M0YpIGxzbCAxMikgbG9yXG4gICgoYjIgbGFuZCAweDNGKSBsc2wgNikgbG9yXG4gICgoYjMgbGFuZCAweDNGKSlcblxubGV0IGdldF91dGZfOF91Y2hhciBiIGkgPVxuICBsZXQgYjAgPSBnZXRfdWludDggYiBpIGluICgqIHJhaXNlcyBpZiBbaV0gaXMgbm90IGEgdmFsaWQgaW5kZXguICopXG4gIGxldCBnZXQgPSB1bnNhZmVfZ2V0X3VpbnQ4IGluXG4gIGxldCBtYXggPSBsZW5ndGggYiAtIDEgaW5cbiAgbWF0Y2ggQ2hhci51bnNhZmVfY2hyIGIwIHdpdGggKCogU2VlIFRoZSBVbmljb2RlIFN0YW5kYXJkLCBUYWJsZSAzLjcgKilcbiAgfCAnXFx4MDAnIC4uICdcXHg3RicgLT4gZGVjX3JldCAxIGIwXG4gIHwgJ1xceEMyJyAuLiAnXFx4REYnIC0+XG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBiMSA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjEgdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGRlY19yZXQgMiAodXRmXzhfdWNoYXJfMiBiMCBiMSlcbiAgfCAnXFx4RTAnIC0+XG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBiMSA9IGdldCBiIGkgaW4gaWYgbm90X2luX3hBMF90b194QkYgYjEgdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgbGV0IGIyID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMiB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgZGVjX3JldCAzICh1dGZfOF91Y2hhcl8zIGIwIGIxIGIyKVxuICB8ICdcXHhFMScgLi4gJ1xceEVDJyB8ICdcXHhFRScgLi4gJ1xceEVGJyAtPlxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gICAgICBsZXQgYjEgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIxIHRoZW4gZGVjX2ludmFsaWQgMSBlbHNlXG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAyIGVsc2VcbiAgICAgIGxldCBiMiA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjIgdGhlbiBkZWNfaW52YWxpZCAyIGVsc2VcbiAgICAgIGRlY19yZXQgMyAodXRmXzhfdWNoYXJfMyBiMCBiMSBiMilcbiAgfCAnXFx4RUQnIC0+XG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBiMSA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194OUYgYjEgdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgbGV0IGIyID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMiB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgZGVjX3JldCAzICh1dGZfOF91Y2hhcl8zIGIwIGIxIGIyKVxuICB8ICdcXHhGMCcgLT5cbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGIxID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDkwX3RvX3hCRiBiMSB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBsZXQgYjIgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIyIHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAzIGVsc2VcbiAgICAgIGxldCBiMyA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjMgdGhlbiBkZWNfaW52YWxpZCAzIGVsc2VcbiAgICAgIGRlY19yZXQgNCAodXRmXzhfdWNoYXJfNCBiMCBiMSBiMiBiMylcbiAgfCAnXFx4RjEnIC4uICdcXHhGMycgLT5cbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGIxID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMSB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBsZXQgYjIgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIyIHRoZW4gZGVjX2ludmFsaWQgMiBlbHNlXG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAzIGVsc2VcbiAgICAgIGxldCBiMyA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194QkYgYjMgdGhlbiBkZWNfaW52YWxpZCAzIGVsc2VcbiAgICAgIGRlY19yZXQgNCAodXRmXzhfdWNoYXJfNCBiMCBiMSBiMiBiMylcbiAgfCAnXFx4RjQnIC0+XG4gICAgICBsZXQgaSA9IGkgKyAxIGluIGlmIGkgPiBtYXggdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBiMSA9IGdldCBiIGkgaW4gaWYgbm90X2luX3g4MF90b194OEYgYjEgdGhlbiBkZWNfaW52YWxpZCAxIGVsc2VcbiAgICAgIGxldCBpID0gaSArIDEgaW4gaWYgaSA+IG1heCB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgbGV0IGIyID0gZ2V0IGIgaSBpbiBpZiBub3RfaW5feDgwX3RvX3hCRiBiMiB0aGVuIGRlY19pbnZhbGlkIDIgZWxzZVxuICAgICAgbGV0IGkgPSBpICsgMSBpbiBpZiBpID4gbWF4IHRoZW4gZGVjX2ludmFsaWQgMyBlbHNlXG4gICAgICBsZXQgYjMgPSBnZXQgYiBpIGluIGlmIG5vdF9pbl94ODBfdG9feEJGIGIzIHRoZW4gZGVjX2ludmFsaWQgMyBlbHNlXG4gICAgICBkZWNfcmV0IDQgKHV0Zl84X3VjaGFyXzQgYjAgYjEgYjIgYjMpXG4gIHwgXyAtPiBkZWNfaW52YWxpZCAxXG5cbmxldCBzZXRfdXRmXzhfdWNoYXIgYiBpIHUgPVxuICBsZXQgc2V0ID0gdW5zYWZlX3NldF91aW50OCBpblxuICBsZXQgbWF4ID0gbGVuZ3RoIGIgLSAxIGluXG4gIG1hdGNoIFVjaGFyLnRvX2ludCB1IHdpdGhcbiAgfCB1IHdoZW4gdSA8IDAgLT4gYXNzZXJ0IGZhbHNlXG4gIHwgdSB3aGVuIHUgPD0gMHgwMDdGIC0+XG4gICAgICBzZXRfdWludDggYiBpIHU7XG4gICAgICAxXG4gIHwgdSB3aGVuIHUgPD0gMHgwN0ZGIC0+XG4gICAgICBsZXQgbGFzdCA9IGkgKyAxIGluXG4gICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gMCBlbHNlXG4gICAgICAoc2V0X3VpbnQ4IGIgaSAoMHhDMCBsb3IgKHUgbHNyIDYpKTtcbiAgICAgICBzZXQgYiBsYXN0ICgweDgwIGxvciAodSBsYW5kIDB4M0YpKTtcbiAgICAgICAyKVxuICB8IHUgd2hlbiB1IDw9IDB4RkZGRiAtPlxuICAgICAgbGV0IGxhc3QgPSBpICsgMiBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIDAgZWxzZVxuICAgICAgKHNldF91aW50OCBiIGkgKDB4RTAgbG9yICh1IGxzciAxMikpO1xuICAgICAgIHNldCBiIChpICsgMSkgKDB4ODAgbG9yICgodSBsc3IgNikgbGFuZCAweDNGKSk7XG4gICAgICAgc2V0IGIgbGFzdCAoMHg4MCBsb3IgKHUgbGFuZCAweDNGKSk7XG4gICAgICAgMylcbiAgfCB1IHdoZW4gdSA8PSAweDEwRkZGRiAtPlxuICAgICAgbGV0IGxhc3QgPSBpICsgMyBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIDAgZWxzZVxuICAgICAgKHNldF91aW50OCBiIGkgKDB4RjAgbG9yICh1IGxzciAxOCkpO1xuICAgICAgIHNldCBiIChpICsgMSkgKDB4ODAgbG9yICgodSBsc3IgMTIpIGxhbmQgMHgzRikpO1xuICAgICAgIHNldCBiIChpICsgMikgKDB4ODAgbG9yICgodSBsc3IgNikgbGFuZCAweDNGKSk7XG4gICAgICAgc2V0IGIgbGFzdCAoMHg4MCBsb3IgKHUgbGFuZCAweDNGKSk7XG4gICAgICAgNClcbiAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG5sZXQgaXNfdmFsaWRfdXRmXzggYiA9XG4gIGxldCByZWMgbG9vcCBtYXggYiBpID1cbiAgICBpZiBpID4gbWF4IHRoZW4gdHJ1ZSBlbHNlXG4gICAgbGV0IGdldCA9IHVuc2FmZV9nZXRfdWludDggaW5cbiAgICBtYXRjaCBDaGFyLnVuc2FmZV9jaHIgKGdldCBiIGkpIHdpdGhcbiAgICB8ICdcXHgwMCcgLi4gJ1xceDdGJyAtPiBsb29wIG1heCBiIChpICsgMSlcbiAgICB8ICdcXHhDMicgLi4gJ1xceERGJyAtPlxuICAgICAgICBsZXQgbGFzdCA9IGkgKyAxIGluXG4gICAgICAgIGlmIGxhc3QgPiBtYXhcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIGxhc3QpXG4gICAgICAgIHRoZW4gZmFsc2VcbiAgICAgICAgZWxzZSBsb29wIG1heCBiIChsYXN0ICsgMSlcbiAgICB8ICdcXHhFMCcgLT5cbiAgICAgICAgbGV0IGxhc3QgPSBpICsgMiBpblxuICAgICAgICBpZiBsYXN0ID4gbWF4XG4gICAgICAgIHx8IG5vdF9pbl94QTBfdG9feEJGIChnZXQgYiAoaSArIDEpKVxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgbGFzdClcbiAgICAgICAgdGhlbiBmYWxzZVxuICAgICAgICBlbHNlIGxvb3AgbWF4IGIgKGxhc3QgKyAxKVxuICAgIHwgJ1xceEUxJyAuLiAnXFx4RUMnIHwgJ1xceEVFJyAuLiAnXFx4RUYnIC0+XG4gICAgICAgIGxldCBsYXN0ID0gaSArIDIgaW5cbiAgICAgICAgaWYgbGFzdCA+IG1heFxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgKGkgKyAxKSlcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIGxhc3QpXG4gICAgICAgIHRoZW4gZmFsc2VcbiAgICAgICAgZWxzZSBsb29wIG1heCBiIChsYXN0ICsgMSlcbiAgICB8ICdcXHhFRCcgLT5cbiAgICAgICAgbGV0IGxhc3QgPSBpICsgMiBpblxuICAgICAgICBpZiBsYXN0ID4gbWF4XG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feDlGIChnZXQgYiAoaSArIDEpKVxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgbGFzdClcbiAgICAgICAgdGhlbiBmYWxzZVxuICAgICAgICBlbHNlIGxvb3AgbWF4IGIgKGxhc3QgKyAxKVxuICAgIHwgJ1xceEYwJyAtPlxuICAgICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICAgIGlmIGxhc3QgPiBtYXhcbiAgICAgICAgfHwgbm90X2luX3g5MF90b194QkYgKGdldCBiIChpICsgMSkpXG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiAoaSArIDIpKVxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgbGFzdClcbiAgICAgICAgdGhlbiBmYWxzZVxuICAgICAgICBlbHNlIGxvb3AgbWF4IGIgKGxhc3QgKyAxKVxuICAgIHwgJ1xceEYxJyAuLiAnXFx4RjMnIC0+XG4gICAgICAgIGxldCBsYXN0ID0gaSArIDMgaW5cbiAgICAgICAgaWYgbGFzdCA+IG1heFxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3hCRiAoZ2V0IGIgKGkgKyAxKSlcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIChpICsgMikpXG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiBsYXN0KVxuICAgICAgICB0aGVuIGZhbHNlXG4gICAgICAgIGVsc2UgbG9vcCBtYXggYiAobGFzdCArIDEpXG4gICAgfCAnXFx4RjQnIC0+XG4gICAgICAgIGxldCBsYXN0ID0gaSArIDMgaW5cbiAgICAgICAgaWYgbGFzdCA+IG1heFxuICAgICAgICB8fCBub3RfaW5feDgwX3RvX3g4RiAoZ2V0IGIgKGkgKyAxKSlcbiAgICAgICAgfHwgbm90X2luX3g4MF90b194QkYgKGdldCBiIChpICsgMikpXG4gICAgICAgIHx8IG5vdF9pbl94ODBfdG9feEJGIChnZXQgYiBsYXN0KVxuICAgICAgICB0aGVuIGZhbHNlXG4gICAgICAgIGVsc2UgbG9vcCBtYXggYiAobGFzdCArIDEpXG4gICAgfCBfIC0+IGZhbHNlXG4gIGluXG4gIGxvb3AgKGxlbmd0aCBiIC0gMSkgYiAwXG5cbigqIFVURi0xNkJFICopXG5cbmxldCBnZXRfdXRmXzE2YmVfdWNoYXIgYiBpID1cbiAgbGV0IGdldCA9IHVuc2FmZV9nZXRfdWludDE2X2JlIGluXG4gIGxldCBtYXggPSBsZW5ndGggYiAtIDEgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IG1heCB0aGVuIGludmFsaWRfYXJnIFwiaW5kZXggb3V0IG9mIGJvdW5kc1wiIGVsc2VcbiAgaWYgaSA9IG1heCB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICBtYXRjaCBnZXQgYiBpIHdpdGhcbiAgfCB1IHdoZW4gdSA8IDB4RDgwMCB8fCB1ID4gMHhERkZGIC0+IGRlY19yZXQgMiB1XG4gIHwgdSB3aGVuIHUgPiAweERCRkYgLT4gZGVjX2ludmFsaWQgMlxuICB8IGhpIC0+ICgqIGNvbWJpbmUgW2hpXSB3aXRoIGEgbG93IHN1cnJvZ2F0ZSAqKVxuICAgICAgbGV0IGxhc3QgPSBpICsgMyBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIGRlY19pbnZhbGlkIChtYXggLSBpICsgMSkgZWxzZVxuICAgICAgbWF0Y2ggZ2V0IGIgKGkgKyAyKSB3aXRoXG4gICAgICB8IHUgd2hlbiB1IDwgMHhEQzAwIHx8IHUgPiAweERGRkYgLT4gZGVjX2ludmFsaWQgMiAoKiByZXRyeSBoZXJlICopXG4gICAgICB8IGxvIC0+XG4gICAgICAgICAgbGV0IHUgPSAoKChoaSBsYW5kIDB4M0ZGKSBsc2wgMTApIGxvciAobG8gbGFuZCAweDNGRikpICsgMHgxMDAwMCBpblxuICAgICAgICAgIGRlY19yZXQgNCB1XG5cbmxldCBzZXRfdXRmXzE2YmVfdWNoYXIgYiBpIHUgPVxuICBsZXQgc2V0ID0gdW5zYWZlX3NldF91aW50MTZfYmUgaW5cbiAgbGV0IG1heCA9IGxlbmd0aCBiIC0gMSBpblxuICBpZiBpIDwgMCB8fCBpID4gbWF4IHRoZW4gaW52YWxpZF9hcmcgXCJpbmRleCBvdXQgb2YgYm91bmRzXCIgZWxzZVxuICBtYXRjaCBVY2hhci50b19pbnQgdSB3aXRoXG4gIHwgdSB3aGVuIHUgPCAwIC0+IGFzc2VydCBmYWxzZVxuICB8IHUgd2hlbiB1IDw9IDB4RkZGRiAtPlxuICAgICAgbGV0IGxhc3QgPSBpICsgMSBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIDAgZWxzZSAoc2V0IGIgaSB1OyAyKVxuICB8IHUgd2hlbiB1IDw9IDB4MTBGRkZGIC0+XG4gICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gMCBlbHNlXG4gICAgICBsZXQgdScgPSB1IC0gMHgxMDAwMCBpblxuICAgICAgbGV0IGhpID0gKDB4RDgwMCBsb3IgKHUnIGxzciAxMCkpIGluXG4gICAgICBsZXQgbG8gPSAoMHhEQzAwIGxvciAodScgbGFuZCAweDNGRikpIGluXG4gICAgICBzZXQgYiBpIGhpOyBzZXQgYiAoaSArIDIpIGxvOyA0XG4gIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxubGV0IGlzX3ZhbGlkX3V0Zl8xNmJlIGIgPVxuICBsZXQgcmVjIGxvb3AgbWF4IGIgaSA9XG4gICAgbGV0IGdldCA9IHVuc2FmZV9nZXRfdWludDE2X2JlIGluXG4gICAgaWYgaSA+IG1heCB0aGVuIHRydWUgZWxzZVxuICAgIGlmIGkgPSBtYXggdGhlbiBmYWxzZSBlbHNlXG4gICAgbWF0Y2ggZ2V0IGIgaSB3aXRoXG4gICAgfCB1IHdoZW4gdSA8IDB4RDgwMCB8fCB1ID4gMHhERkZGIC0+IGxvb3AgbWF4IGIgKGkgKyAyKVxuICAgIHwgdSB3aGVuIHUgPiAweERCRkYgLT4gZmFsc2VcbiAgICB8IF9oaSAtPlxuICAgICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICAgIGlmIGxhc3QgPiBtYXggdGhlbiBmYWxzZSBlbHNlXG4gICAgICAgIG1hdGNoIGdldCBiIChpICsgMikgd2l0aFxuICAgICAgICB8IHUgd2hlbiB1IDwgMHhEQzAwIHx8IHUgPiAweERGRkYgLT4gZmFsc2VcbiAgICAgICAgfCBfbG8gLT4gbG9vcCBtYXggYiAoaSArIDQpXG4gIGluXG4gIGxvb3AgKGxlbmd0aCBiIC0gMSkgYiAwXG5cbigqIFVURi0xNkxFICopXG5cbmxldCBnZXRfdXRmXzE2bGVfdWNoYXIgYiBpID1cbiAgbGV0IGdldCA9IHVuc2FmZV9nZXRfdWludDE2X2xlIGluXG4gIGxldCBtYXggPSBsZW5ndGggYiAtIDEgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IG1heCB0aGVuIGludmFsaWRfYXJnIFwiaW5kZXggb3V0IG9mIGJvdW5kc1wiIGVsc2VcbiAgaWYgaSA9IG1heCB0aGVuIGRlY19pbnZhbGlkIDEgZWxzZVxuICBtYXRjaCBnZXQgYiBpIHdpdGhcbiAgfCB1IHdoZW4gdSA8IDB4RDgwMCB8fCB1ID4gMHhERkZGIC0+IGRlY19yZXQgMiB1XG4gIHwgdSB3aGVuIHUgPiAweERCRkYgLT4gZGVjX2ludmFsaWQgMlxuICB8IGhpIC0+ICgqIGNvbWJpbmUgW2hpXSB3aXRoIGEgbG93IHN1cnJvZ2F0ZSAqKVxuICAgICAgbGV0IGxhc3QgPSBpICsgMyBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIGRlY19pbnZhbGlkIChtYXggLSBpICsgMSkgZWxzZVxuICAgICAgbWF0Y2ggZ2V0IGIgKGkgKyAyKSB3aXRoXG4gICAgICB8IHUgd2hlbiB1IDwgMHhEQzAwIHx8IHUgPiAweERGRkYgLT4gZGVjX2ludmFsaWQgMiAoKiByZXRyeSBoZXJlICopXG4gICAgICB8IGxvIC0+XG4gICAgICAgICAgbGV0IHUgPSAoKChoaSBsYW5kIDB4M0ZGKSBsc2wgMTApIGxvciAobG8gbGFuZCAweDNGRikpICsgMHgxMDAwMCBpblxuICAgICAgICAgIGRlY19yZXQgNCB1XG5cbmxldCBzZXRfdXRmXzE2bGVfdWNoYXIgYiBpIHUgPVxuICBsZXQgc2V0ID0gdW5zYWZlX3NldF91aW50MTZfbGUgaW5cbiAgbGV0IG1heCA9IGxlbmd0aCBiIC0gMSBpblxuICBpZiBpIDwgMCB8fCBpID4gbWF4IHRoZW4gaW52YWxpZF9hcmcgXCJpbmRleCBvdXQgb2YgYm91bmRzXCIgZWxzZVxuICBtYXRjaCBVY2hhci50b19pbnQgdSB3aXRoXG4gIHwgdSB3aGVuIHUgPCAwIC0+IGFzc2VydCBmYWxzZVxuICB8IHUgd2hlbiB1IDw9IDB4RkZGRiAtPlxuICAgICAgbGV0IGxhc3QgPSBpICsgMSBpblxuICAgICAgaWYgbGFzdCA+IG1heCB0aGVuIDAgZWxzZSAoc2V0IGIgaSB1OyAyKVxuICB8IHUgd2hlbiB1IDw9IDB4MTBGRkZGIC0+XG4gICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICBpZiBsYXN0ID4gbWF4IHRoZW4gMCBlbHNlXG4gICAgICBsZXQgdScgPSB1IC0gMHgxMDAwMCBpblxuICAgICAgbGV0IGhpID0gKDB4RDgwMCBsb3IgKHUnIGxzciAxMCkpIGluXG4gICAgICBsZXQgbG8gPSAoMHhEQzAwIGxvciAodScgbGFuZCAweDNGRikpIGluXG4gICAgICBzZXQgYiBpIGhpOyBzZXQgYiAoaSArIDIpIGxvOyA0XG4gIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxubGV0IGlzX3ZhbGlkX3V0Zl8xNmxlIGIgPVxuICBsZXQgcmVjIGxvb3AgbWF4IGIgaSA9XG4gICAgbGV0IGdldCA9IHVuc2FmZV9nZXRfdWludDE2X2xlIGluXG4gICAgaWYgaSA+IG1heCB0aGVuIHRydWUgZWxzZVxuICAgIGlmIGkgPSBtYXggdGhlbiBmYWxzZSBlbHNlXG4gICAgbWF0Y2ggZ2V0IGIgaSB3aXRoXG4gICAgfCB1IHdoZW4gdSA8IDB4RDgwMCB8fCB1ID4gMHhERkZGIC0+IGxvb3AgbWF4IGIgKGkgKyAyKVxuICAgIHwgdSB3aGVuIHUgPiAweERCRkYgLT4gZmFsc2VcbiAgICB8IF9oaSAtPlxuICAgICAgICBsZXQgbGFzdCA9IGkgKyAzIGluXG4gICAgICAgIGlmIGxhc3QgPiBtYXggdGhlbiBmYWxzZSBlbHNlXG4gICAgICAgIG1hdGNoIGdldCBiIChpICsgMikgd2l0aFxuICAgICAgICB8IHUgd2hlbiB1IDwgMHhEQzAwIHx8IHUgPiAweERGRkYgLT4gZmFsc2VcbiAgICAgICAgfCBfbG8gLT4gbG9vcCBtYXggYiAoaSArIDQpXG4gIGluXG4gIGxvb3AgKGxlbmd0aCBiIC0gMSkgYiAwXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgT0NhbWwgcHJvZ3JhbW1lcnMgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE4IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbnR5cGUgdCA9IGludFxuXG5sZXQgemVybyA9IDBcbmxldCBvbmUgPSAxXG5sZXQgbWludXNfb25lID0gLTFcbmV4dGVybmFsIG5lZyA6IGludCAtPiBpbnQgPSBcIiVuZWdpbnRcIlxuZXh0ZXJuYWwgYWRkIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVhZGRpbnRcIlxuZXh0ZXJuYWwgc3ViIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVzdWJpbnRcIlxuZXh0ZXJuYWwgbXVsIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVtdWxpbnRcIlxuZXh0ZXJuYWwgZGl2IDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVkaXZpbnRcIlxuZXh0ZXJuYWwgcmVtIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVtb2RpbnRcIlxuZXh0ZXJuYWwgc3VjYyA6IGludCAtPiBpbnQgPSBcIiVzdWNjaW50XCJcbmV4dGVybmFsIHByZWQgOiBpbnQgLT4gaW50ID0gXCIlcHJlZGludFwiXG5sZXQgYWJzIHggPSBpZiB4ID49IDAgdGhlbiB4IGVsc2UgLXhcbmxldCBtYXhfaW50ID0gKC0xKSBsc3IgMVxubGV0IG1pbl9pbnQgPSBtYXhfaW50ICsgMVxuZXh0ZXJuYWwgbG9nYW5kIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVhbmRpbnRcIlxuZXh0ZXJuYWwgbG9nb3IgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJW9yaW50XCJcbmV4dGVybmFsIGxvZ3hvciA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIleG9yaW50XCJcbmxldCBsb2dub3QgeCA9IGxvZ3hvciB4ICgtMSlcbmV4dGVybmFsIHNoaWZ0X2xlZnQgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWxzbGludFwiXG5leHRlcm5hbCBzaGlmdF9yaWdodCA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlYXNyaW50XCJcbmV4dGVybmFsIHNoaWZ0X3JpZ2h0X2xvZ2ljYWwgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWxzcmludFwiXG5sZXQgZXF1YWwgOiBpbnQgLT4gaW50IC0+IGJvb2wgPSAoID0gKVxubGV0IGNvbXBhcmUgOiBpbnQgLT4gaW50IC0+IGludCA9IFN0ZGxpYi5jb21wYXJlXG5sZXQgbWluIHggeSA6IHQgPSBpZiB4IDw9IHkgdGhlbiB4IGVsc2UgeVxubGV0IG1heCB4IHkgOiB0ID0gaWYgeCA+PSB5IHRoZW4geCBlbHNlIHlcbmV4dGVybmFsIHRvX2Zsb2F0IDogaW50IC0+IGZsb2F0ID0gXCIlZmxvYXRvZmludFwiXG5leHRlcm5hbCBvZl9mbG9hdCA6IGZsb2F0IC0+IGludCA9IFwiJWludG9mZmxvYXRcIlxuXG4oKlxuZXh0ZXJuYWwgaW50X29mX3N0cmluZyA6IHN0cmluZyAtPiBpbnQgPSBcImNhbWxfaW50X29mX3N0cmluZ1wiXG5sZXQgb2Zfc3RyaW5nIHMgPSB0cnkgU29tZSAoaW50X29mX3N0cmluZyBzKSB3aXRoIEZhaWx1cmUgXyAtPiBOb25lXG4qKVxuXG5leHRlcm5hbCBmb3JtYXRfaW50IDogc3RyaW5nIC0+IGludCAtPiBzdHJpbmcgPSBcImNhbWxfZm9ybWF0X2ludFwiXG5sZXQgdG9fc3RyaW5nIHggPSBmb3JtYXRfaW50IFwiJWRcIiB4XG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgRGFtaWVuIERvbGlnZXosIHByb2pldCBHYWxsaXVtLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE0IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIFN0cmluZyBvcGVyYXRpb25zLCBiYXNlZCBvbiBieXRlIHNlcXVlbmNlIG9wZXJhdGlvbnMgKilcblxuKCogV0FSTklORzogU29tZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlIGFyZSBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sIGZvclxuICAgZWZmaWNpZW5jeSByZWFzb25zLiBXaGVuIHlvdSBtb2RpZnkgdGhlIG9uZSBpbiB0aGlzIGZpbGUgeW91IG5lZWQgdG9cbiAgIG1vZGlmeSBpdHMgZHVwbGljYXRlIGluIGJ5dGVzLm1sLlxuICAgVGhlc2UgZnVuY3Rpb25zIGhhdmUgYSBcImR1cGxpY2F0ZWRcIiBjb21tZW50IGFib3ZlIHRoZWlyIGRlZmluaXRpb24uXG4qKVxuXG5leHRlcm5hbCBsZW5ndGggOiBzdHJpbmcgLT4gaW50ID0gXCIlc3RyaW5nX2xlbmd0aFwiXG5leHRlcm5hbCBnZXQgOiBzdHJpbmcgLT4gaW50IC0+IGNoYXIgPSBcIiVzdHJpbmdfc2FmZV9nZXRcIlxuZXh0ZXJuYWwgc2V0IDogYnl0ZXMgLT4gaW50IC0+IGNoYXIgLT4gdW5pdCA9IFwiJXN0cmluZ19zYWZlX3NldFwiXG5leHRlcm5hbCBjcmVhdGUgOiBpbnQgLT4gYnl0ZXMgPSBcImNhbWxfY3JlYXRlX3N0cmluZ1wiXG5leHRlcm5hbCB1bnNhZmVfZ2V0IDogc3RyaW5nIC0+IGludCAtPiBjaGFyID0gXCIlc3RyaW5nX3Vuc2FmZV9nZXRcIlxuZXh0ZXJuYWwgdW5zYWZlX3NldCA6IGJ5dGVzIC0+IGludCAtPiBjaGFyIC0+IHVuaXQgPSBcIiVzdHJpbmdfdW5zYWZlX3NldFwiXG5leHRlcm5hbCB1bnNhZmVfYmxpdCA6IHN0cmluZyAtPiBpbnQgLT4gIGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfYmxpdF9zdHJpbmdcIiBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgdW5zYWZlX2ZpbGwgOiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IGNoYXIgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfZmlsbF9zdHJpbmdcIiBbQEBub2FsbG9jXVxuXG5tb2R1bGUgQiA9IEJ5dGVzXG5cbmxldCBidHMgPSBCLnVuc2FmZV90b19zdHJpbmdcbmxldCBib3MgPSBCLnVuc2FmZV9vZl9zdHJpbmdcblxubGV0IG1ha2UgbiBjID1cbiAgQi5tYWtlIG4gYyB8PiBidHNcbmxldCBpbml0IG4gZiA9XG4gIEIuaW5pdCBuIGYgfD4gYnRzXG5sZXQgZW1wdHkgPSBcIlwiXG5sZXQgY29weSBzID1cbiAgQi5jb3B5IChib3MgcykgfD4gYnRzXG5sZXQgb2ZfYnl0ZXMgPSBCLnRvX3N0cmluZ1xubGV0IHRvX2J5dGVzID0gQi5vZl9zdHJpbmdcbmxldCBzdWIgcyBvZnMgbGVuID1cbiAgQi5zdWIgKGJvcyBzKSBvZnMgbGVuIHw+IGJ0c1xubGV0IGZpbGwgPVxuICBCLmZpbGxcbmxldCBibGl0ID1cbiAgQi5ibGl0X3N0cmluZ1xuXG5sZXQgZW5zdXJlX2dlICh4OmludCkgeSA9IGlmIHggPj0geSB0aGVuIHggZWxzZSBpbnZhbGlkX2FyZyBcIlN0cmluZy5jb25jYXRcIlxuXG5sZXQgcmVjIHN1bV9sZW5ndGhzIGFjYyBzZXBsZW4gPSBmdW5jdGlvblxuICB8IFtdIC0+IGFjY1xuICB8IGhkIDo6IFtdIC0+IGxlbmd0aCBoZCArIGFjY1xuICB8IGhkIDo6IHRsIC0+IHN1bV9sZW5ndGhzIChlbnN1cmVfZ2UgKGxlbmd0aCBoZCArIHNlcGxlbiArIGFjYykgYWNjKSBzZXBsZW4gdGxcblxubGV0IHJlYyB1bnNhZmVfYmxpdHMgZHN0IHBvcyBzZXAgc2VwbGVuID0gZnVuY3Rpb25cbiAgICBbXSAtPiBkc3RcbiAgfCBoZCA6OiBbXSAtPlxuICAgIHVuc2FmZV9ibGl0IGhkIDAgZHN0IHBvcyAobGVuZ3RoIGhkKTsgZHN0XG4gIHwgaGQgOjogdGwgLT5cbiAgICB1bnNhZmVfYmxpdCBoZCAwIGRzdCBwb3MgKGxlbmd0aCBoZCk7XG4gICAgdW5zYWZlX2JsaXQgc2VwIDAgZHN0IChwb3MgKyBsZW5ndGggaGQpIHNlcGxlbjtcbiAgICB1bnNhZmVfYmxpdHMgZHN0IChwb3MgKyBsZW5ndGggaGQgKyBzZXBsZW4pIHNlcCBzZXBsZW4gdGxcblxubGV0IGNvbmNhdCBzZXAgPSBmdW5jdGlvblxuICAgIFtdIC0+IFwiXCJcbiAgfCBsIC0+IGxldCBzZXBsZW4gPSBsZW5ndGggc2VwIGluIGJ0cyBAQFxuICAgICAgICAgIHVuc2FmZV9ibGl0c1xuICAgICAgICAgICAgKEIuY3JlYXRlIChzdW1fbGVuZ3RocyAwIHNlcGxlbiBsKSlcbiAgICAgICAgICAgIDAgc2VwIHNlcGxlbiBsXG5cbmxldCBjYXQgPSAoIF4gKVxuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgaXRlciBmIHMgPVxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIHMgLSAxIGRvIGYgKHVuc2FmZV9nZXQgcyBpKSBkb25lXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBpdGVyaSBmIHMgPVxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIHMgLSAxIGRvIGYgaSAodW5zYWZlX2dldCBzIGkpIGRvbmVcblxubGV0IG1hcCBmIHMgPVxuICBCLm1hcCBmIChib3MgcykgfD4gYnRzXG5sZXQgbWFwaSBmIHMgPVxuICBCLm1hcGkgZiAoYm9zIHMpIHw+IGJ0c1xubGV0IGZvbGRfcmlnaHQgZiB4IGEgPVxuICBCLmZvbGRfcmlnaHQgZiAoYm9zIHgpIGFcbmxldCBmb2xkX2xlZnQgZiBhIHggPVxuICBCLmZvbGRfbGVmdCBmIGEgKGJvcyB4KVxubGV0IGV4aXN0cyBmIHMgPVxuICBCLmV4aXN0cyBmIChib3MgcylcbmxldCBmb3JfYWxsIGYgcyA9XG4gIEIuZm9yX2FsbCBmIChib3MgcylcblxuKCogQmV3YXJlOiB3ZSBjYW5ub3QgdXNlIEIudHJpbSBvciBCLmVzY2FwZSBiZWNhdXNlIHRoZXkgYWx3YXlzIG1ha2UgYVxuICAgY29weSwgYnV0IFN0cmluZy5tbGkgc3BlbGxzIG91dCBzb21lIGNhc2VzIHdoZXJlIHdlIGFyZSBub3QgYWxsb3dlZFxuICAgdG8gbWFrZSBhIGNvcHkuICopXG5cbmxldCBpc19zcGFjZSA9IGZ1bmN0aW9uXG4gIHwgJyAnIHwgJ1xcMDEyJyB8ICdcXG4nIHwgJ1xccicgfCAnXFx0JyAtPiB0cnVlXG4gIHwgXyAtPiBmYWxzZVxuXG5sZXQgdHJpbSBzID1cbiAgaWYgcyA9IFwiXCIgdGhlbiBzXG4gIGVsc2UgaWYgaXNfc3BhY2UgKHVuc2FmZV9nZXQgcyAwKSB8fCBpc19zcGFjZSAodW5zYWZlX2dldCBzIChsZW5ndGggcyAtIDEpKVxuICAgIHRoZW4gYnRzIChCLnRyaW0gKGJvcyBzKSlcbiAgZWxzZSBzXG5cbmxldCBlc2NhcGVkIHMgPVxuICBsZXQgcmVjIGVzY2FwZV9pZl9uZWVkZWQgcyBuIGkgPVxuICAgIGlmIGkgPj0gbiB0aGVuIHMgZWxzZVxuICAgICAgbWF0Y2ggdW5zYWZlX2dldCBzIGkgd2l0aFxuICAgICAgfCAnXFxcIicgfCAnXFxcXCcgfCAnXFwwMDAnLi4nXFwwMzEnIHwgJ1xcMTI3Jy4uICdcXDI1NScgLT5cbiAgICAgICAgICBidHMgKEIuZXNjYXBlZCAoYm9zIHMpKVxuICAgICAgfCBfIC0+IGVzY2FwZV9pZl9uZWVkZWQgcyBuIChpKzEpXG4gIGluXG4gIGVzY2FwZV9pZl9uZWVkZWQgcyAobGVuZ3RoIHMpIDBcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJlYyBpbmRleF9yZWMgcyBsaW0gaSBjID1cbiAgaWYgaSA+PSBsaW0gdGhlbiByYWlzZSBOb3RfZm91bmQgZWxzZVxuICBpZiB1bnNhZmVfZ2V0IHMgaSA9IGMgdGhlbiBpIGVsc2UgaW5kZXhfcmVjIHMgbGltIChpICsgMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgaW5kZXggcyBjID0gaW5kZXhfcmVjIHMgKGxlbmd0aCBzKSAwIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJlYyBpbmRleF9yZWNfb3B0IHMgbGltIGkgYyA9XG4gIGlmIGkgPj0gbGltIHRoZW4gTm9uZSBlbHNlXG4gIGlmIHVuc2FmZV9nZXQgcyBpID0gYyB0aGVuIFNvbWUgaSBlbHNlIGluZGV4X3JlY19vcHQgcyBsaW0gKGkgKyAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBpbmRleF9vcHQgcyBjID0gaW5kZXhfcmVjX29wdCBzIChsZW5ndGggcykgMCBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBpbmRleF9mcm9tIHMgaSBjID1cbiAgbGV0IGwgPSBsZW5ndGggcyBpblxuICBpZiBpIDwgMCB8fCBpID4gbCB0aGVuIGludmFsaWRfYXJnIFwiU3RyaW5nLmluZGV4X2Zyb20gLyBCeXRlcy5pbmRleF9mcm9tXCIgZWxzZVxuICAgIGluZGV4X3JlYyBzIGwgaSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBpbmRleF9mcm9tX29wdCBzIGkgYyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IGwgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLmluZGV4X2Zyb21fb3B0IC8gQnl0ZXMuaW5kZXhfZnJvbV9vcHRcIlxuICBlbHNlXG4gICAgaW5kZXhfcmVjX29wdCBzIGwgaSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByZWMgcmluZGV4X3JlYyBzIGkgYyA9XG4gIGlmIGkgPCAwIHRoZW4gcmFpc2UgTm90X2ZvdW5kIGVsc2VcbiAgaWYgdW5zYWZlX2dldCBzIGkgPSBjIHRoZW4gaSBlbHNlIHJpbmRleF9yZWMgcyAoaSAtIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJpbmRleCBzIGMgPSByaW5kZXhfcmVjIHMgKGxlbmd0aCBzIC0gMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgcmluZGV4X2Zyb20gcyBpIGMgPVxuICBpZiBpIDwgLTEgfHwgaSA+PSBsZW5ndGggcyB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcucmluZGV4X2Zyb20gLyBCeXRlcy5yaW5kZXhfZnJvbVwiXG4gIGVsc2VcbiAgICByaW5kZXhfcmVjIHMgaSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByZWMgcmluZGV4X3JlY19vcHQgcyBpIGMgPVxuICBpZiBpIDwgMCB0aGVuIE5vbmUgZWxzZVxuICBpZiB1bnNhZmVfZ2V0IHMgaSA9IGMgdGhlbiBTb21lIGkgZWxzZSByaW5kZXhfcmVjX29wdCBzIChpIC0gMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgcmluZGV4X29wdCBzIGMgPSByaW5kZXhfcmVjX29wdCBzIChsZW5ndGggcyAtIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJpbmRleF9mcm9tX29wdCBzIGkgYyA9XG4gIGlmIGkgPCAtMSB8fCBpID49IGxlbmd0aCBzIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5yaW5kZXhfZnJvbV9vcHQgLyBCeXRlcy5yaW5kZXhfZnJvbV9vcHRcIlxuICBlbHNlXG4gICAgcmluZGV4X3JlY19vcHQgcyBpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IGNvbnRhaW5zX2Zyb20gcyBpIGMgPVxuICBsZXQgbCA9IGxlbmd0aCBzIGluXG4gIGlmIGkgPCAwIHx8IGkgPiBsIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5jb250YWluc19mcm9tIC8gQnl0ZXMuY29udGFpbnNfZnJvbVwiXG4gIGVsc2VcbiAgICB0cnkgaWdub3JlIChpbmRleF9yZWMgcyBsIGkgYyk7IHRydWUgd2l0aCBOb3RfZm91bmQgLT4gZmFsc2VcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IGNvbnRhaW5zIHMgYyA9IGNvbnRhaW5zX2Zyb20gcyAwIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJjb250YWluc19mcm9tIHMgaSBjID1cbiAgaWYgaSA8IDAgfHwgaSA+PSBsZW5ndGggcyB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcucmNvbnRhaW5zX2Zyb20gLyBCeXRlcy5yY29udGFpbnNfZnJvbVwiXG4gIGVsc2VcbiAgICB0cnkgaWdub3JlIChyaW5kZXhfcmVjIHMgaSBjKTsgdHJ1ZSB3aXRoIE5vdF9mb3VuZCAtPiBmYWxzZVxuXG5sZXQgdXBwZXJjYXNlX2FzY2lpIHMgPVxuICBCLnVwcGVyY2FzZV9hc2NpaSAoYm9zIHMpIHw+IGJ0c1xubGV0IGxvd2VyY2FzZV9hc2NpaSBzID1cbiAgQi5sb3dlcmNhc2VfYXNjaWkgKGJvcyBzKSB8PiBidHNcbmxldCBjYXBpdGFsaXplX2FzY2lpIHMgPVxuICBCLmNhcGl0YWxpemVfYXNjaWkgKGJvcyBzKSB8PiBidHNcbmxldCB1bmNhcGl0YWxpemVfYXNjaWkgcyA9XG4gIEIudW5jYXBpdGFsaXplX2FzY2lpIChib3MgcykgfD4gYnRzXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBzdGFydHNfd2l0aCB+cHJlZml4IHMgPVxuICBsZXQgbGVuX3MgPSBsZW5ndGggc1xuICBhbmQgbGVuX3ByZSA9IGxlbmd0aCBwcmVmaXggaW5cbiAgbGV0IHJlYyBhdXggaSA9XG4gICAgaWYgaSA9IGxlbl9wcmUgdGhlbiB0cnVlXG4gICAgZWxzZSBpZiB1bnNhZmVfZ2V0IHMgaSA8PiB1bnNhZmVfZ2V0IHByZWZpeCBpIHRoZW4gZmFsc2VcbiAgICBlbHNlIGF1eCAoaSArIDEpXG4gIGluIGxlbl9zID49IGxlbl9wcmUgJiYgYXV4IDBcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IGVuZHNfd2l0aCB+c3VmZml4IHMgPVxuICBsZXQgbGVuX3MgPSBsZW5ndGggc1xuICBhbmQgbGVuX3N1ZiA9IGxlbmd0aCBzdWZmaXggaW5cbiAgbGV0IGRpZmYgPSBsZW5fcyAtIGxlbl9zdWYgaW5cbiAgbGV0IHJlYyBhdXggaSA9XG4gICAgaWYgaSA9IGxlbl9zdWYgdGhlbiB0cnVlXG4gICAgZWxzZSBpZiB1bnNhZmVfZ2V0IHMgKGRpZmYgKyBpKSA8PiB1bnNhZmVfZ2V0IHN1ZmZpeCBpIHRoZW4gZmFsc2VcbiAgICBlbHNlIGF1eCAoaSArIDEpXG4gIGluIGRpZmYgPj0gMCAmJiBhdXggMFxuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgc3BsaXRfb25fY2hhciBzZXAgcyA9XG4gIGxldCByID0gcmVmIFtdIGluXG4gIGxldCBqID0gcmVmIChsZW5ndGggcykgaW5cbiAgZm9yIGkgPSBsZW5ndGggcyAtIDEgZG93bnRvIDAgZG9cbiAgICBpZiB1bnNhZmVfZ2V0IHMgaSA9IHNlcCB0aGVuIGJlZ2luXG4gICAgICByIDo9IHN1YiBzIChpICsgMSkgKCFqIC0gaSAtIDEpIDo6ICFyO1xuICAgICAgaiA6PSBpXG4gICAgZW5kXG4gIGRvbmU7XG4gIHN1YiBzIDAgIWogOjogIXJcblxuKCogRGVwcmVjYXRlZCBmdW5jdGlvbnMgaW1wbGVtZW50ZWQgdmlhIG90aGVyIGRlcHJlY2F0ZWQgZnVuY3Rpb25zICopXG5bQEBAb2NhbWwud2FybmluZyBcIi0zXCJdXG5sZXQgdXBwZXJjYXNlIHMgPVxuICBCLnVwcGVyY2FzZSAoYm9zIHMpIHw+IGJ0c1xubGV0IGxvd2VyY2FzZSBzID1cbiAgQi5sb3dlcmNhc2UgKGJvcyBzKSB8PiBidHNcbmxldCBjYXBpdGFsaXplIHMgPVxuICBCLmNhcGl0YWxpemUgKGJvcyBzKSB8PiBidHNcbmxldCB1bmNhcGl0YWxpemUgcyA9XG4gIEIudW5jYXBpdGFsaXplIChib3MgcykgfD4gYnRzXG5cbnR5cGUgdCA9IHN0cmluZ1xuXG5sZXQgY29tcGFyZSAoeDogdCkgKHk6IHQpID0gU3RkbGliLmNvbXBhcmUgeCB5XG5leHRlcm5hbCBlcXVhbCA6IHN0cmluZyAtPiBzdHJpbmcgLT4gYm9vbCA9IFwiY2FtbF9zdHJpbmdfZXF1YWxcIiBbQEBub2FsbG9jXVxuXG4oKiogezEgSXRlcmF0b3JzfSAqKVxuXG5sZXQgdG9fc2VxIHMgPSBib3MgcyB8PiBCLnRvX3NlcVxuXG5sZXQgdG9fc2VxaSBzID0gYm9zIHMgfD4gQi50b19zZXFpXG5cbmxldCBvZl9zZXEgZyA9IEIub2Zfc2VxIGcgfD4gYnRzXG5cbigqIFVURiBkZWNvZGVycyBhbmQgdmFsaWRhdG9ycyAqKVxuXG5sZXQgZ2V0X3V0Zl84X3VjaGFyIHMgaSA9IEIuZ2V0X3V0Zl84X3VjaGFyIChib3MgcykgaVxubGV0IGlzX3ZhbGlkX3V0Zl84IHMgPSBCLmlzX3ZhbGlkX3V0Zl84IChib3MgcylcblxubGV0IGdldF91dGZfMTZiZV91Y2hhciBzIGkgPSBCLmdldF91dGZfMTZiZV91Y2hhciAoYm9zIHMpIGlcbmxldCBpc192YWxpZF91dGZfMTZiZSBzID0gQi5pc192YWxpZF91dGZfMTZiZSAoYm9zIHMpXG5cbmxldCBnZXRfdXRmXzE2bGVfdWNoYXIgcyBpID0gQi5nZXRfdXRmXzE2bGVfdWNoYXIgKGJvcyBzKSBpXG5sZXQgaXNfdmFsaWRfdXRmXzE2bGUgcyA9IEIuaXNfdmFsaWRfdXRmXzE2bGUgKGJvcyBzKVxuXG4oKiogezYgQmluYXJ5IGVuY29kaW5nL2RlY29kaW5nIG9mIGludGVnZXJzfSAqKVxuXG5leHRlcm5hbCBnZXRfdWludDggOiBzdHJpbmcgLT4gaW50IC0+IGludCA9IFwiJXN0cmluZ19zYWZlX2dldFwiXG5leHRlcm5hbCBnZXRfdWludDE2X25lIDogc3RyaW5nIC0+IGludCAtPiBpbnQgPSBcIiVjYW1sX3N0cmluZ19nZXQxNlwiXG5leHRlcm5hbCBnZXRfaW50MzJfbmUgOiBzdHJpbmcgLT4gaW50IC0+IGludDMyID0gXCIlY2FtbF9zdHJpbmdfZ2V0MzJcIlxuZXh0ZXJuYWwgZ2V0X2ludDY0X25lIDogc3RyaW5nIC0+IGludCAtPiBpbnQ2NCA9IFwiJWNhbWxfc3RyaW5nX2dldDY0XCJcblxubGV0IGdldF9pbnQ4IHMgaSA9IEIuZ2V0X2ludDggKGJvcyBzKSBpXG5sZXQgZ2V0X3VpbnQxNl9sZSBzIGkgPSBCLmdldF91aW50MTZfbGUgKGJvcyBzKSBpXG5sZXQgZ2V0X3VpbnQxNl9iZSBzIGkgPSBCLmdldF91aW50MTZfYmUgKGJvcyBzKSBpXG5sZXQgZ2V0X2ludDE2X25lIHMgaSA9IEIuZ2V0X2ludDE2X25lIChib3MgcykgaVxubGV0IGdldF9pbnQxNl9sZSBzIGkgPSBCLmdldF9pbnQxNl9sZSAoYm9zIHMpIGlcbmxldCBnZXRfaW50MTZfYmUgcyBpID0gQi5nZXRfaW50MTZfYmUgKGJvcyBzKSBpXG5sZXQgZ2V0X2ludDMyX2xlIHMgaSA9IEIuZ2V0X2ludDMyX2xlIChib3MgcykgaVxubGV0IGdldF9pbnQzMl9iZSBzIGkgPSBCLmdldF9pbnQzMl9iZSAoYm9zIHMpIGlcbmxldCBnZXRfaW50NjRfbGUgcyBpID0gQi5nZXRfaW50NjRfbGUgKGJvcyBzKSBpXG5sZXQgZ2V0X2ludDY0X2JlIHMgaSA9IEIuZ2V0X2ludDY0X2JlIChib3MgcykgaVxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgVGhlIE9DYW1sIHByb2dyYW1tZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxOCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG50eXBlIHQgPSB1bml0ID0gKClcblxubGV0IGVxdWFsICgpICgpID0gdHJ1ZVxubGV0IGNvbXBhcmUgKCkgKCkgPSAwXG5sZXQgdG9fc3RyaW5nICgpID0gXCIoKVwiXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk3IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbnR5cGUgZXh0ZXJuX2ZsYWdzID1cbiAgICBOb19zaGFyaW5nXG4gIHwgQ2xvc3VyZXNcbiAgfCBDb21wYXRfMzJcbigqIG5vdGU6IHRoaXMgdHlwZSBkZWZpbml0aW9uIGlzIHVzZWQgaW4gJ3J1bnRpbWUvZGVidWdnZXIuYycgKilcblxuZXh0ZXJuYWwgdG9fY2hhbm5lbDogb3V0X2NoYW5uZWwgLT4gJ2EgLT4gZXh0ZXJuX2ZsYWdzIGxpc3QgLT4gdW5pdFxuICAgID0gXCJjYW1sX291dHB1dF92YWx1ZVwiXG5leHRlcm5hbCB0b19ieXRlczogJ2EgLT4gZXh0ZXJuX2ZsYWdzIGxpc3QgLT4gYnl0ZXNcbiAgICA9IFwiY2FtbF9vdXRwdXRfdmFsdWVfdG9fYnl0ZXNcIlxuZXh0ZXJuYWwgdG9fc3RyaW5nOiAnYSAtPiBleHRlcm5fZmxhZ3MgbGlzdCAtPiBzdHJpbmdcbiAgICA9IFwiY2FtbF9vdXRwdXRfdmFsdWVfdG9fc3RyaW5nXCJcbmV4dGVybmFsIHRvX2J1ZmZlcl91bnNhZmU6XG4gICAgICBieXRlcyAtPiBpbnQgLT4gaW50IC0+ICdhIC0+IGV4dGVybl9mbGFncyBsaXN0IC0+IGludFxuICAgID0gXCJjYW1sX291dHB1dF92YWx1ZV90b19idWZmZXJcIlxuXG5sZXQgdG9fYnVmZmVyIGJ1ZmYgb2ZzIGxlbiB2IGZsYWdzID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IEJ5dGVzLmxlbmd0aCBidWZmIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJNYXJzaGFsLnRvX2J1ZmZlcjogc3Vic3RyaW5nIG91dCBvZiBib3VuZHNcIlxuICBlbHNlIHRvX2J1ZmZlcl91bnNhZmUgYnVmZiBvZnMgbGVuIHYgZmxhZ3NcblxuKCogVGhlIGZ1bmN0aW9ucyBiZWxvdyB1c2UgYnl0ZSBzZXF1ZW5jZXMgYXMgaW5wdXQsIG5ldmVyIHVzaW5nIGFueVxuICAgbXV0YXRpb24uIEl0IG1ha2VzIHNlbnNlIHRvIHVzZSBub24tbXV0YXRlZCBbYnl0ZXNdIHJhdGhlciB0aGFuXG4gICBbc3RyaW5nXSwgYmVjYXVzZSB3ZSByZWFsbHkgd29yayB3aXRoIHNlcXVlbmNlcyBvZiBieXRlcywgbm90XG4gICBhIHRleHQgcmVwcmVzZW50YXRpb24uXG4qKVxuXG5leHRlcm5hbCBmcm9tX2NoYW5uZWw6IGluX2NoYW5uZWwgLT4gJ2EgPSBcImNhbWxfaW5wdXRfdmFsdWVcIlxuZXh0ZXJuYWwgZnJvbV9ieXRlc191bnNhZmU6IGJ5dGVzIC0+IGludCAtPiAnYSA9IFwiY2FtbF9pbnB1dF92YWx1ZV9mcm9tX2J5dGVzXCJcbmV4dGVybmFsIGRhdGFfc2l6ZV91bnNhZmU6IGJ5dGVzIC0+IGludCAtPiBpbnQgPSBcImNhbWxfbWFyc2hhbF9kYXRhX3NpemVcIlxuXG5sZXQgaGVhZGVyX3NpemUgPSAyMFxubGV0IGRhdGFfc2l6ZSBidWZmIG9mcyA9XG4gIGlmIG9mcyA8IDAgfHwgb2ZzID4gQnl0ZXMubGVuZ3RoIGJ1ZmYgLSBoZWFkZXJfc2l6ZVxuICB0aGVuIGludmFsaWRfYXJnIFwiTWFyc2hhbC5kYXRhX3NpemVcIlxuICBlbHNlIGRhdGFfc2l6ZV91bnNhZmUgYnVmZiBvZnNcbmxldCB0b3RhbF9zaXplIGJ1ZmYgb2ZzID0gaGVhZGVyX3NpemUgKyBkYXRhX3NpemUgYnVmZiBvZnNcblxubGV0IGZyb21fYnl0ZXMgYnVmZiBvZnMgPVxuICBpZiBvZnMgPCAwIHx8IG9mcyA+IEJ5dGVzLmxlbmd0aCBidWZmIC0gaGVhZGVyX3NpemVcbiAgdGhlbiBpbnZhbGlkX2FyZyBcIk1hcnNoYWwuZnJvbV9ieXRlc1wiXG4gIGVsc2UgYmVnaW5cbiAgICBsZXQgbGVuID0gZGF0YV9zaXplX3Vuc2FmZSBidWZmIG9mcyBpblxuICAgIGlmIG9mcyA+IEJ5dGVzLmxlbmd0aCBidWZmIC0gKGhlYWRlcl9zaXplICsgbGVuKVxuICAgIHRoZW4gaW52YWxpZF9hcmcgXCJNYXJzaGFsLmZyb21fYnl0ZXNcIlxuICAgIGVsc2UgZnJvbV9ieXRlc191bnNhZmUgYnVmZiBvZnNcbiAgZW5kXG5cbmxldCBmcm9tX3N0cmluZyBidWZmIG9mcyA9XG4gICgqIEJ5dGVzLnVuc2FmZV9vZl9zdHJpbmcgaXMgc2FmZSBoZXJlLCBhcyB0aGUgcHJvZHVjZWQgYnl0ZVxuICAgICBzZXF1ZW5jZSBpcyBuZXZlciBtdXRhdGVkICopXG4gIGZyb21fYnl0ZXMgKEJ5dGVzLnVuc2FmZV9vZl9zdHJpbmcgYnVmZikgb2ZzXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIEFuIGFsaWFzIGZvciB0aGUgdHlwZSBvZiBhcnJheXMuICopXG50eXBlICdhIHQgPSAnYSBhcnJheVxuXG4oKiBBcnJheSBvcGVyYXRpb25zICopXG5cbmV4dGVybmFsIGxlbmd0aCA6ICdhIGFycmF5IC0+IGludCA9IFwiJWFycmF5X2xlbmd0aFwiXG5leHRlcm5hbCBnZXQ6ICdhIGFycmF5IC0+IGludCAtPiAnYSA9IFwiJWFycmF5X3NhZmVfZ2V0XCJcbmV4dGVybmFsIHNldDogJ2EgYXJyYXkgLT4gaW50IC0+ICdhIC0+IHVuaXQgPSBcIiVhcnJheV9zYWZlX3NldFwiXG5leHRlcm5hbCB1bnNhZmVfZ2V0OiAnYSBhcnJheSAtPiBpbnQgLT4gJ2EgPSBcIiVhcnJheV91bnNhZmVfZ2V0XCJcbmV4dGVybmFsIHVuc2FmZV9zZXQ6ICdhIGFycmF5IC0+IGludCAtPiAnYSAtPiB1bml0ID0gXCIlYXJyYXlfdW5zYWZlX3NldFwiXG5leHRlcm5hbCBtYWtlOiBpbnQgLT4gJ2EgLT4gJ2EgYXJyYXkgPSBcImNhbWxfbWFrZV92ZWN0XCJcbmV4dGVybmFsIGNyZWF0ZTogaW50IC0+ICdhIC0+ICdhIGFycmF5ID0gXCJjYW1sX21ha2VfdmVjdFwiXG5leHRlcm5hbCB1bnNhZmVfc3ViIDogJ2EgYXJyYXkgLT4gaW50IC0+IGludCAtPiAnYSBhcnJheSA9IFwiY2FtbF9hcnJheV9zdWJcIlxuZXh0ZXJuYWwgYXBwZW5kX3ByaW0gOiAnYSBhcnJheSAtPiAnYSBhcnJheSAtPiAnYSBhcnJheSA9IFwiY2FtbF9hcnJheV9hcHBlbmRcIlxuZXh0ZXJuYWwgY29uY2F0IDogJ2EgYXJyYXkgbGlzdCAtPiAnYSBhcnJheSA9IFwiY2FtbF9hcnJheV9jb25jYXRcIlxuZXh0ZXJuYWwgdW5zYWZlX2JsaXQgOlxuICAnYSBhcnJheSAtPiBpbnQgLT4gJ2EgYXJyYXkgLT4gaW50IC0+IGludCAtPiB1bml0ID0gXCJjYW1sX2FycmF5X2JsaXRcIlxuZXh0ZXJuYWwgdW5zYWZlX2ZpbGwgOlxuICAnYSBhcnJheSAtPiBpbnQgLT4gaW50IC0+ICdhIC0+IHVuaXQgPSBcImNhbWxfYXJyYXlfZmlsbFwiXG5leHRlcm5hbCBjcmVhdGVfZmxvYXQ6IGludCAtPiBmbG9hdCBhcnJheSA9IFwiY2FtbF9tYWtlX2Zsb2F0X3ZlY3RcIlxubGV0IG1ha2VfZmxvYXQgPSBjcmVhdGVfZmxvYXRcblxubW9kdWxlIEZsb2F0YXJyYXkgPSBzdHJ1Y3RcbiAgZXh0ZXJuYWwgY3JlYXRlIDogaW50IC0+IGZsb2F0YXJyYXkgPSBcImNhbWxfZmxvYXRhcnJheV9jcmVhdGVcIlxuICBleHRlcm5hbCBsZW5ndGggOiBmbG9hdGFycmF5IC0+IGludCA9IFwiJWZsb2F0YXJyYXlfbGVuZ3RoXCJcbiAgZXh0ZXJuYWwgZ2V0IDogZmxvYXRhcnJheSAtPiBpbnQgLT4gZmxvYXQgPSBcIiVmbG9hdGFycmF5X3NhZmVfZ2V0XCJcbiAgZXh0ZXJuYWwgc2V0IDogZmxvYXRhcnJheSAtPiBpbnQgLT4gZmxvYXQgLT4gdW5pdCA9IFwiJWZsb2F0YXJyYXlfc2FmZV9zZXRcIlxuICBleHRlcm5hbCB1bnNhZmVfZ2V0IDogZmxvYXRhcnJheSAtPiBpbnQgLT4gZmxvYXQgPSBcIiVmbG9hdGFycmF5X3Vuc2FmZV9nZXRcIlxuICBleHRlcm5hbCB1bnNhZmVfc2V0IDogZmxvYXRhcnJheSAtPiBpbnQgLT4gZmxvYXQgLT4gdW5pdFxuICAgICAgPSBcIiVmbG9hdGFycmF5X3Vuc2FmZV9zZXRcIlxuZW5kXG5cbmxldCBpbml0IGwgZiA9XG4gIGlmIGwgPSAwIHRoZW4gW3x8XSBlbHNlXG4gIGlmIGwgPCAwIHRoZW4gaW52YWxpZF9hcmcgXCJBcnJheS5pbml0XCJcbiAgKCogU2VlICM2NTc1LiBXZSBjb3VsZCBhbHNvIGNoZWNrIGZvciBtYXhpbXVtIGFycmF5IHNpemUsIGJ1dCB0aGlzIGRlcGVuZHNcbiAgICAgb24gd2hldGhlciB3ZSBjcmVhdGUgYSBmbG9hdCBhcnJheSBvciBhIHJlZ3VsYXIgb25lLi4uICopXG4gIGVsc2VcbiAgIGxldCByZXMgPSBjcmVhdGUgbCAoZiAwKSBpblxuICAgZm9yIGkgPSAxIHRvIHByZWQgbCBkb1xuICAgICB1bnNhZmVfc2V0IHJlcyBpIChmIGkpXG4gICBkb25lO1xuICAgcmVzXG5cbmxldCBtYWtlX21hdHJpeCBzeCBzeSBpbml0ID1cbiAgbGV0IHJlcyA9IGNyZWF0ZSBzeCBbfHxdIGluXG4gIGZvciB4ID0gMCB0byBwcmVkIHN4IGRvXG4gICAgdW5zYWZlX3NldCByZXMgeCAoY3JlYXRlIHN5IGluaXQpXG4gIGRvbmU7XG4gIHJlc1xuXG5sZXQgY3JlYXRlX21hdHJpeCA9IG1ha2VfbWF0cml4XG5cbmxldCBjb3B5IGEgPVxuICBsZXQgbCA9IGxlbmd0aCBhIGluIGlmIGwgPSAwIHRoZW4gW3x8XSBlbHNlIHVuc2FmZV9zdWIgYSAwIGxcblxubGV0IGFwcGVuZCBhMSBhMiA9XG4gIGxldCBsMSA9IGxlbmd0aCBhMSBpblxuICBpZiBsMSA9IDAgdGhlbiBjb3B5IGEyXG4gIGVsc2UgaWYgbGVuZ3RoIGEyID0gMCB0aGVuIHVuc2FmZV9zdWIgYTEgMCBsMVxuICBlbHNlIGFwcGVuZF9wcmltIGExIGEyXG5cbmxldCBzdWIgYSBvZnMgbGVuID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IGxlbmd0aCBhIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJBcnJheS5zdWJcIlxuICBlbHNlIHVuc2FmZV9zdWIgYSBvZnMgbGVuXG5cbmxldCBmaWxsIGEgb2ZzIGxlbiB2ID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IGxlbmd0aCBhIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJBcnJheS5maWxsXCJcbiAgZWxzZSB1bnNhZmVfZmlsbCBhIG9mcyBsZW4gdlxuXG5sZXQgYmxpdCBhMSBvZnMxIGEyIG9mczIgbGVuID1cbiAgaWYgbGVuIDwgMCB8fCBvZnMxIDwgMCB8fCBvZnMxID4gbGVuZ3RoIGExIC0gbGVuXG4gICAgICAgICAgICAgfHwgb2ZzMiA8IDAgfHwgb2ZzMiA+IGxlbmd0aCBhMiAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkuYmxpdFwiXG4gIGVsc2UgdW5zYWZlX2JsaXQgYTEgb2ZzMSBhMiBvZnMyIGxlblxuXG5sZXQgaXRlciBmIGEgPVxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIGEgLSAxIGRvIGYodW5zYWZlX2dldCBhIGkpIGRvbmVcblxubGV0IGl0ZXIyIGYgYSBiID1cbiAgaWYgbGVuZ3RoIGEgPD4gbGVuZ3RoIGIgdGhlblxuICAgIGludmFsaWRfYXJnIFwiQXJyYXkuaXRlcjI6IGFycmF5cyBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoXCJcbiAgZWxzZVxuICAgIGZvciBpID0gMCB0byBsZW5ndGggYSAtIDEgZG8gZiAodW5zYWZlX2dldCBhIGkpICh1bnNhZmVfZ2V0IGIgaSkgZG9uZVxuXG5sZXQgbWFwIGYgYSA9XG4gIGxldCBsID0gbGVuZ3RoIGEgaW5cbiAgaWYgbCA9IDAgdGhlbiBbfHxdIGVsc2UgYmVnaW5cbiAgICBsZXQgciA9IGNyZWF0ZSBsIChmKHVuc2FmZV9nZXQgYSAwKSkgaW5cbiAgICBmb3IgaSA9IDEgdG8gbCAtIDEgZG9cbiAgICAgIHVuc2FmZV9zZXQgciBpIChmKHVuc2FmZV9nZXQgYSBpKSlcbiAgICBkb25lO1xuICAgIHJcbiAgZW5kXG5cbmxldCBtYXAyIGYgYSBiID1cbiAgbGV0IGxhID0gbGVuZ3RoIGEgaW5cbiAgbGV0IGxiID0gbGVuZ3RoIGIgaW5cbiAgaWYgbGEgPD4gbGIgdGhlblxuICAgIGludmFsaWRfYXJnIFwiQXJyYXkubWFwMjogYXJyYXlzIG11c3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGhcIlxuICBlbHNlIGJlZ2luXG4gICAgaWYgbGEgPSAwIHRoZW4gW3x8XSBlbHNlIGJlZ2luXG4gICAgICBsZXQgciA9IGNyZWF0ZSBsYSAoZiAodW5zYWZlX2dldCBhIDApICh1bnNhZmVfZ2V0IGIgMCkpIGluXG4gICAgICBmb3IgaSA9IDEgdG8gbGEgLSAxIGRvXG4gICAgICAgIHVuc2FmZV9zZXQgciBpIChmICh1bnNhZmVfZ2V0IGEgaSkgKHVuc2FmZV9nZXQgYiBpKSlcbiAgICAgIGRvbmU7XG4gICAgICByXG4gICAgZW5kXG4gIGVuZFxuXG5sZXQgaXRlcmkgZiBhID1cbiAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkbyBmIGkgKHVuc2FmZV9nZXQgYSBpKSBkb25lXG5cbmxldCBtYXBpIGYgYSA9XG4gIGxldCBsID0gbGVuZ3RoIGEgaW5cbiAgaWYgbCA9IDAgdGhlbiBbfHxdIGVsc2UgYmVnaW5cbiAgICBsZXQgciA9IGNyZWF0ZSBsIChmIDAgKHVuc2FmZV9nZXQgYSAwKSkgaW5cbiAgICBmb3IgaSA9IDEgdG8gbCAtIDEgZG9cbiAgICAgIHVuc2FmZV9zZXQgciBpIChmIGkgKHVuc2FmZV9nZXQgYSBpKSlcbiAgICBkb25lO1xuICAgIHJcbiAgZW5kXG5cbmxldCB0b19saXN0IGEgPVxuICBsZXQgcmVjIHRvbGlzdCBpIHJlcyA9XG4gICAgaWYgaSA8IDAgdGhlbiByZXMgZWxzZSB0b2xpc3QgKGkgLSAxKSAodW5zYWZlX2dldCBhIGkgOjogcmVzKSBpblxuICB0b2xpc3QgKGxlbmd0aCBhIC0gMSkgW11cblxuKCogQ2Fubm90IHVzZSBMaXN0Lmxlbmd0aCBoZXJlIGJlY2F1c2UgdGhlIExpc3QgbW9kdWxlIGRlcGVuZHMgb24gQXJyYXkuICopXG5sZXQgcmVjIGxpc3RfbGVuZ3RoIGFjY3UgPSBmdW5jdGlvblxuICB8IFtdIC0+IGFjY3VcbiAgfCBfOjp0IC0+IGxpc3RfbGVuZ3RoIChzdWNjIGFjY3UpIHRcblxubGV0IG9mX2xpc3QgPSBmdW5jdGlvblxuICAgIFtdIC0+IFt8fF1cbiAgfCBoZDo6dGwgYXMgbCAtPlxuICAgICAgbGV0IGEgPSBjcmVhdGUgKGxpc3RfbGVuZ3RoIDAgbCkgaGQgaW5cbiAgICAgIGxldCByZWMgZmlsbCBpID0gZnVuY3Rpb25cbiAgICAgICAgICBbXSAtPiBhXG4gICAgICAgIHwgaGQ6OnRsIC0+IHVuc2FmZV9zZXQgYSBpIGhkOyBmaWxsIChpKzEpIHRsIGluXG4gICAgICBmaWxsIDEgdGxcblxubGV0IGZvbGRfbGVmdCBmIHggYSA9XG4gIGxldCByID0gcmVmIHggaW5cbiAgZm9yIGkgPSAwIHRvIGxlbmd0aCBhIC0gMSBkb1xuICAgIHIgOj0gZiAhciAodW5zYWZlX2dldCBhIGkpXG4gIGRvbmU7XG4gICFyXG5cbmxldCBmb2xkX2xlZnRfbWFwIGYgYWNjIGlucHV0X2FycmF5ID1cbiAgbGV0IGxlbiA9IGxlbmd0aCBpbnB1dF9hcnJheSBpblxuICBpZiBsZW4gPSAwIHRoZW4gKGFjYywgW3x8XSkgZWxzZSBiZWdpblxuICAgIGxldCBhY2MsIGVsdCA9IGYgYWNjICh1bnNhZmVfZ2V0IGlucHV0X2FycmF5IDApIGluXG4gICAgbGV0IG91dHB1dF9hcnJheSA9IGNyZWF0ZSBsZW4gZWx0IGluXG4gICAgbGV0IGFjYyA9IHJlZiBhY2MgaW5cbiAgICBmb3IgaSA9IDEgdG8gbGVuIC0gMSBkb1xuICAgICAgbGV0IGFjYycsIGVsdCA9IGYgIWFjYyAodW5zYWZlX2dldCBpbnB1dF9hcnJheSBpKSBpblxuICAgICAgYWNjIDo9IGFjYyc7XG4gICAgICB1bnNhZmVfc2V0IG91dHB1dF9hcnJheSBpIGVsdDtcbiAgICBkb25lO1xuICAgICFhY2MsIG91dHB1dF9hcnJheVxuICBlbmRcblxubGV0IGZvbGRfcmlnaHQgZiBhIHggPVxuICBsZXQgciA9IHJlZiB4IGluXG4gIGZvciBpID0gbGVuZ3RoIGEgLSAxIGRvd250byAwIGRvXG4gICAgciA6PSBmICh1bnNhZmVfZ2V0IGEgaSkgIXJcbiAgZG9uZTtcbiAgIXJcblxubGV0IGV4aXN0cyBwIGEgPVxuICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIGZhbHNlXG4gICAgZWxzZSBpZiBwICh1bnNhZmVfZ2V0IGEgaSkgdGhlbiB0cnVlXG4gICAgZWxzZSBsb29wIChzdWNjIGkpIGluXG4gIGxvb3AgMFxuXG5sZXQgZm9yX2FsbCBwIGEgPVxuICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIHRydWVcbiAgICBlbHNlIGlmIHAgKHVuc2FmZV9nZXQgYSBpKSB0aGVuIGxvb3AgKHN1Y2MgaSlcbiAgICBlbHNlIGZhbHNlIGluXG4gIGxvb3AgMFxuXG5sZXQgZm9yX2FsbDIgcCBsMSBsMiA9XG4gIGxldCBuMSA9IGxlbmd0aCBsMVxuICBhbmQgbjIgPSBsZW5ndGggbDIgaW5cbiAgaWYgbjEgPD4gbjIgdGhlbiBpbnZhbGlkX2FyZyBcIkFycmF5LmZvcl9hbGwyXCJcbiAgZWxzZSBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA9IG4xIHRoZW4gdHJ1ZVxuICAgIGVsc2UgaWYgcCAodW5zYWZlX2dldCBsMSBpKSAodW5zYWZlX2dldCBsMiBpKSB0aGVuIGxvb3AgKHN1Y2MgaSlcbiAgICBlbHNlIGZhbHNlIGluXG4gIGxvb3AgMFxuXG5sZXQgZXhpc3RzMiBwIGwxIGwyID1cbiAgbGV0IG4xID0gbGVuZ3RoIGwxXG4gIGFuZCBuMiA9IGxlbmd0aCBsMiBpblxuICBpZiBuMSA8PiBuMiB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkuZXhpc3RzMlwiXG4gIGVsc2UgbGV0IHJlYyBsb29wIGkgPVxuICAgIGlmIGkgPSBuMSB0aGVuIGZhbHNlXG4gICAgZWxzZSBpZiBwICh1bnNhZmVfZ2V0IGwxIGkpICh1bnNhZmVfZ2V0IGwyIGkpIHRoZW4gdHJ1ZVxuICAgIGVsc2UgbG9vcCAoc3VjYyBpKSBpblxuICBsb29wIDBcblxubGV0IG1lbSB4IGEgPVxuICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIGZhbHNlXG4gICAgZWxzZSBpZiBjb21wYXJlICh1bnNhZmVfZ2V0IGEgaSkgeCA9IDAgdGhlbiB0cnVlXG4gICAgZWxzZSBsb29wIChzdWNjIGkpIGluXG4gIGxvb3AgMFxuXG5sZXQgbWVtcSB4IGEgPVxuICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIGZhbHNlXG4gICAgZWxzZSBpZiB4ID09ICh1bnNhZmVfZ2V0IGEgaSkgdGhlbiB0cnVlXG4gICAgZWxzZSBsb29wIChzdWNjIGkpIGluXG4gIGxvb3AgMFxuXG5sZXQgZmluZF9vcHQgcCBhID1cbiAgbGV0IG4gPSBsZW5ndGggYSBpblxuICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA9IG4gdGhlbiBOb25lXG4gICAgZWxzZVxuICAgICAgbGV0IHggPSB1bnNhZmVfZ2V0IGEgaSBpblxuICAgICAgaWYgcCB4IHRoZW4gU29tZSB4XG4gICAgICBlbHNlIGxvb3AgKHN1Y2MgaSlcbiAgaW5cbiAgbG9vcCAwXG5cbmxldCBmaW5kX21hcCBmIGEgPVxuICBsZXQgbiA9IGxlbmd0aCBhIGluXG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpID0gbiB0aGVuIE5vbmVcbiAgICBlbHNlXG4gICAgICBtYXRjaCBmICh1bnNhZmVfZ2V0IGEgaSkgd2l0aFxuICAgICAgfCBOb25lIC0+IGxvb3AgKHN1Y2MgaSlcbiAgICAgIHwgU29tZSBfIGFzIHIgLT4gclxuICBpblxuICBsb29wIDBcblxubGV0IHNwbGl0IHggPVxuICBpZiB4ID0gW3x8XSB0aGVuIFt8fF0sIFt8fF1cbiAgZWxzZSBiZWdpblxuICAgIGxldCBhMCwgYjAgPSB1bnNhZmVfZ2V0IHggMCBpblxuICAgIGxldCBuID0gbGVuZ3RoIHggaW5cbiAgICBsZXQgYSA9IGNyZWF0ZSBuIGEwIGluXG4gICAgbGV0IGIgPSBjcmVhdGUgbiBiMCBpblxuICAgIGZvciBpID0gMSB0byBuIC0gMSBkb1xuICAgICAgbGV0IGFpLCBiaSA9IHVuc2FmZV9nZXQgeCBpIGluXG4gICAgICB1bnNhZmVfc2V0IGEgaSBhaTtcbiAgICAgIHVuc2FmZV9zZXQgYiBpIGJpXG4gICAgZG9uZTtcbiAgICBhLCBiXG4gIGVuZFxuXG5sZXQgY29tYmluZSBhIGIgPVxuICBsZXQgbmEgPSBsZW5ndGggYSBpblxuICBsZXQgbmIgPSBsZW5ndGggYiBpblxuICBpZiBuYSA8PiBuYiB0aGVuIGludmFsaWRfYXJnIFwiQXJyYXkuY29tYmluZVwiO1xuICBpZiBuYSA9IDAgdGhlbiBbfHxdXG4gIGVsc2UgYmVnaW5cbiAgICBsZXQgeCA9IGNyZWF0ZSBuYSAodW5zYWZlX2dldCBhIDAsIHVuc2FmZV9nZXQgYiAwKSBpblxuICAgIGZvciBpID0gMSB0byBuYSAtIDEgZG9cbiAgICAgIHVuc2FmZV9zZXQgeCBpICh1bnNhZmVfZ2V0IGEgaSwgdW5zYWZlX2dldCBiIGkpXG4gICAgZG9uZTtcbiAgICB4XG4gIGVuZFxuXG5leGNlcHRpb24gQm90dG9tIG9mIGludFxubGV0IHNvcnQgY21wIGEgPVxuICBsZXQgbWF4c29uIGwgaSA9XG4gICAgbGV0IGkzMSA9IGkraStpKzEgaW5cbiAgICBsZXQgeCA9IHJlZiBpMzEgaW5cbiAgICBpZiBpMzErMiA8IGwgdGhlbiBiZWdpblxuICAgICAgaWYgY21wIChnZXQgYSBpMzEpIChnZXQgYSAoaTMxKzEpKSA8IDAgdGhlbiB4IDo9IGkzMSsxO1xuICAgICAgaWYgY21wIChnZXQgYSAheCkgKGdldCBhIChpMzErMikpIDwgMCB0aGVuIHggOj0gaTMxKzI7XG4gICAgICAheFxuICAgIGVuZCBlbHNlXG4gICAgICBpZiBpMzErMSA8IGwgJiYgY21wIChnZXQgYSBpMzEpIChnZXQgYSAoaTMxKzEpKSA8IDBcbiAgICAgIHRoZW4gaTMxKzFcbiAgICAgIGVsc2UgaWYgaTMxIDwgbCB0aGVuIGkzMSBlbHNlIHJhaXNlIChCb3R0b20gaSlcbiAgaW5cbiAgbGV0IHJlYyB0cmlja2xlZG93biBsIGkgZSA9XG4gICAgbGV0IGogPSBtYXhzb24gbCBpIGluXG4gICAgaWYgY21wIChnZXQgYSBqKSBlID4gMCB0aGVuIGJlZ2luXG4gICAgICBzZXQgYSBpIChnZXQgYSBqKTtcbiAgICAgIHRyaWNrbGVkb3duIGwgaiBlO1xuICAgIGVuZCBlbHNlIGJlZ2luXG4gICAgICBzZXQgYSBpIGU7XG4gICAgZW5kO1xuICBpblxuICBsZXQgdHJpY2tsZSBsIGkgZSA9IHRyeSB0cmlja2xlZG93biBsIGkgZSB3aXRoIEJvdHRvbSBpIC0+IHNldCBhIGkgZSBpblxuICBsZXQgcmVjIGJ1YmJsZWRvd24gbCBpID1cbiAgICBsZXQgaiA9IG1heHNvbiBsIGkgaW5cbiAgICBzZXQgYSBpIChnZXQgYSBqKTtcbiAgICBidWJibGVkb3duIGwgalxuICBpblxuICBsZXQgYnViYmxlIGwgaSA9IHRyeSBidWJibGVkb3duIGwgaSB3aXRoIEJvdHRvbSBpIC0+IGkgaW5cbiAgbGV0IHJlYyB0cmlja2xldXAgaSBlID1cbiAgICBsZXQgZmF0aGVyID0gKGkgLSAxKSAvIDMgaW5cbiAgICBhc3NlcnQgKGkgPD4gZmF0aGVyKTtcbiAgICBpZiBjbXAgKGdldCBhIGZhdGhlcikgZSA8IDAgdGhlbiBiZWdpblxuICAgICAgc2V0IGEgaSAoZ2V0IGEgZmF0aGVyKTtcbiAgICAgIGlmIGZhdGhlciA+IDAgdGhlbiB0cmlja2xldXAgZmF0aGVyIGUgZWxzZSBzZXQgYSAwIGU7XG4gICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgIHNldCBhIGkgZTtcbiAgICBlbmQ7XG4gIGluXG4gIGxldCBsID0gbGVuZ3RoIGEgaW5cbiAgZm9yIGkgPSAobCArIDEpIC8gMyAtIDEgZG93bnRvIDAgZG8gdHJpY2tsZSBsIGkgKGdldCBhIGkpOyBkb25lO1xuICBmb3IgaSA9IGwgLSAxIGRvd250byAyIGRvXG4gICAgbGV0IGUgPSAoZ2V0IGEgaSkgaW5cbiAgICBzZXQgYSBpIChnZXQgYSAwKTtcbiAgICB0cmlja2xldXAgKGJ1YmJsZSBpIDApIGU7XG4gIGRvbmU7XG4gIGlmIGwgPiAxIHRoZW4gKGxldCBlID0gKGdldCBhIDEpIGluIHNldCBhIDEgKGdldCBhIDApOyBzZXQgYSAwIGUpXG5cblxubGV0IGN1dG9mZiA9IDVcbmxldCBzdGFibGVfc29ydCBjbXAgYSA9XG4gIGxldCBtZXJnZSBzcmMxb2ZzIHNyYzFsZW4gc3JjMiBzcmMyb2ZzIHNyYzJsZW4gZHN0IGRzdG9mcyA9XG4gICAgbGV0IHNyYzFyID0gc3JjMW9mcyArIHNyYzFsZW4gYW5kIHNyYzJyID0gc3JjMm9mcyArIHNyYzJsZW4gaW5cbiAgICBsZXQgcmVjIGxvb3AgaTEgczEgaTIgczIgZCA9XG4gICAgICBpZiBjbXAgczEgczIgPD0gMCB0aGVuIGJlZ2luXG4gICAgICAgIHNldCBkc3QgZCBzMTtcbiAgICAgICAgbGV0IGkxID0gaTEgKyAxIGluXG4gICAgICAgIGlmIGkxIDwgc3JjMXIgdGhlblxuICAgICAgICAgIGxvb3AgaTEgKGdldCBhIGkxKSBpMiBzMiAoZCArIDEpXG4gICAgICAgIGVsc2VcbiAgICAgICAgICBibGl0IHNyYzIgaTIgZHN0IChkICsgMSkgKHNyYzJyIC0gaTIpXG4gICAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgICBzZXQgZHN0IGQgczI7XG4gICAgICAgIGxldCBpMiA9IGkyICsgMSBpblxuICAgICAgICBpZiBpMiA8IHNyYzJyIHRoZW5cbiAgICAgICAgICBsb29wIGkxIHMxIGkyIChnZXQgc3JjMiBpMikgKGQgKyAxKVxuICAgICAgICBlbHNlXG4gICAgICAgICAgYmxpdCBhIGkxIGRzdCAoZCArIDEpIChzcmMxciAtIGkxKVxuICAgICAgZW5kXG4gICAgaW4gbG9vcCBzcmMxb2ZzIChnZXQgYSBzcmMxb2ZzKSBzcmMyb2ZzIChnZXQgc3JjMiBzcmMyb2ZzKSBkc3RvZnM7XG4gIGluXG4gIGxldCBpc29ydHRvIHNyY29mcyBkc3QgZHN0b2ZzIGxlbiA9XG4gICAgZm9yIGkgPSAwIHRvIGxlbiAtIDEgZG9cbiAgICAgIGxldCBlID0gKGdldCBhIChzcmNvZnMgKyBpKSkgaW5cbiAgICAgIGxldCBqID0gcmVmIChkc3RvZnMgKyBpIC0gMSkgaW5cbiAgICAgIHdoaWxlICghaiA+PSBkc3RvZnMgJiYgY21wIChnZXQgZHN0ICFqKSBlID4gMCkgZG9cbiAgICAgICAgc2V0IGRzdCAoIWogKyAxKSAoZ2V0IGRzdCAhaik7XG4gICAgICAgIGRlY3IgajtcbiAgICAgIGRvbmU7XG4gICAgICBzZXQgZHN0ICghaiArIDEpIGU7XG4gICAgZG9uZTtcbiAgaW5cbiAgbGV0IHJlYyBzb3J0dG8gc3Jjb2ZzIGRzdCBkc3RvZnMgbGVuID1cbiAgICBpZiBsZW4gPD0gY3V0b2ZmIHRoZW4gaXNvcnR0byBzcmNvZnMgZHN0IGRzdG9mcyBsZW4gZWxzZSBiZWdpblxuICAgICAgbGV0IGwxID0gbGVuIC8gMiBpblxuICAgICAgbGV0IGwyID0gbGVuIC0gbDEgaW5cbiAgICAgIHNvcnR0byAoc3Jjb2ZzICsgbDEpIGRzdCAoZHN0b2ZzICsgbDEpIGwyO1xuICAgICAgc29ydHRvIHNyY29mcyBhIChzcmNvZnMgKyBsMikgbDE7XG4gICAgICBtZXJnZSAoc3Jjb2ZzICsgbDIpIGwxIGRzdCAoZHN0b2ZzICsgbDEpIGwyIGRzdCBkc3RvZnM7XG4gICAgZW5kO1xuICBpblxuICBsZXQgbCA9IGxlbmd0aCBhIGluXG4gIGlmIGwgPD0gY3V0b2ZmIHRoZW4gaXNvcnR0byAwIGEgMCBsIGVsc2UgYmVnaW5cbiAgICBsZXQgbDEgPSBsIC8gMiBpblxuICAgIGxldCBsMiA9IGwgLSBsMSBpblxuICAgIGxldCB0ID0gbWFrZSBsMiAoZ2V0IGEgMCkgaW5cbiAgICBzb3J0dG8gbDEgdCAwIGwyO1xuICAgIHNvcnR0byAwIGEgbDIgbDE7XG4gICAgbWVyZ2UgbDIgbDEgdCAwIGwyIGEgMDtcbiAgZW5kXG5cblxubGV0IGZhc3Rfc29ydCA9IHN0YWJsZV9zb3J0XG5cbigqKiB7MSBJdGVyYXRvcnN9ICopXG5cbmxldCB0b19zZXEgYSA9XG4gIGxldCByZWMgYXV4IGkgKCkgPVxuICAgIGlmIGkgPCBsZW5ndGggYVxuICAgIHRoZW5cbiAgICAgIGxldCB4ID0gdW5zYWZlX2dldCBhIGkgaW5cbiAgICAgIFNlcS5Db25zICh4LCBhdXggKGkrMSkpXG4gICAgZWxzZSBTZXEuTmlsXG4gIGluXG4gIGF1eCAwXG5cbmxldCB0b19zZXFpIGEgPVxuICBsZXQgcmVjIGF1eCBpICgpID1cbiAgICBpZiBpIDwgbGVuZ3RoIGFcbiAgICB0aGVuXG4gICAgICBsZXQgeCA9IHVuc2FmZV9nZXQgYSBpIGluXG4gICAgICBTZXEuQ29ucyAoKGkseCksIGF1eCAoaSsxKSlcbiAgICBlbHNlIFNlcS5OaWxcbiAgaW5cbiAgYXV4IDBcblxubGV0IG9mX3Jldl9saXN0ID0gZnVuY3Rpb25cbiAgICBbXSAtPiBbfHxdXG4gIHwgaGQ6OnRsIGFzIGwgLT5cbiAgICAgIGxldCBsZW4gPSBsaXN0X2xlbmd0aCAwIGwgaW5cbiAgICAgIGxldCBhID0gY3JlYXRlIGxlbiBoZCBpblxuICAgICAgbGV0IHJlYyBmaWxsIGkgPSBmdW5jdGlvblxuICAgICAgICAgIFtdIC0+IGFcbiAgICAgICAgfCBoZDo6dGwgLT4gdW5zYWZlX3NldCBhIGkgaGQ7IGZpbGwgKGktMSkgdGxcbiAgICAgIGluXG4gICAgICBmaWxsIChsZW4tMikgdGxcblxubGV0IG9mX3NlcSBpID1cbiAgbGV0IGwgPSBTZXEuZm9sZF9sZWZ0IChmdW4gYWNjIHggLT4geDo6YWNjKSBbXSBpIGluXG4gIG9mX3Jldl9saXN0IGxcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogTW9kdWxlIFtJbnQzMl06IDMyLWJpdCBpbnRlZ2VycyAqKVxuXG5leHRlcm5hbCBuZWcgOiBpbnQzMiAtPiBpbnQzMiA9IFwiJWludDMyX25lZ1wiXG5leHRlcm5hbCBhZGQgOiBpbnQzMiAtPiBpbnQzMiAtPiBpbnQzMiA9IFwiJWludDMyX2FkZFwiXG5leHRlcm5hbCBzdWIgOiBpbnQzMiAtPiBpbnQzMiAtPiBpbnQzMiA9IFwiJWludDMyX3N1YlwiXG5leHRlcm5hbCBtdWwgOiBpbnQzMiAtPiBpbnQzMiAtPiBpbnQzMiA9IFwiJWludDMyX211bFwiXG5leHRlcm5hbCBkaXYgOiBpbnQzMiAtPiBpbnQzMiAtPiBpbnQzMiA9IFwiJWludDMyX2RpdlwiXG5leHRlcm5hbCByZW0gOiBpbnQzMiAtPiBpbnQzMiAtPiBpbnQzMiA9IFwiJWludDMyX21vZFwiXG5leHRlcm5hbCBsb2dhbmQgOiBpbnQzMiAtPiBpbnQzMiAtPiBpbnQzMiA9IFwiJWludDMyX2FuZFwiXG5leHRlcm5hbCBsb2dvciA6IGludDMyIC0+IGludDMyIC0+IGludDMyID0gXCIlaW50MzJfb3JcIlxuZXh0ZXJuYWwgbG9neG9yIDogaW50MzIgLT4gaW50MzIgLT4gaW50MzIgPSBcIiVpbnQzMl94b3JcIlxuZXh0ZXJuYWwgc2hpZnRfbGVmdCA6IGludDMyIC0+IGludCAtPiBpbnQzMiA9IFwiJWludDMyX2xzbFwiXG5leHRlcm5hbCBzaGlmdF9yaWdodCA6IGludDMyIC0+IGludCAtPiBpbnQzMiA9IFwiJWludDMyX2FzclwiXG5leHRlcm5hbCBzaGlmdF9yaWdodF9sb2dpY2FsIDogaW50MzIgLT4gaW50IC0+IGludDMyID0gXCIlaW50MzJfbHNyXCJcbmV4dGVybmFsIG9mX2ludCA6IGludCAtPiBpbnQzMiA9IFwiJWludDMyX29mX2ludFwiXG5leHRlcm5hbCB0b19pbnQgOiBpbnQzMiAtPiBpbnQgPSBcIiVpbnQzMl90b19pbnRcIlxuZXh0ZXJuYWwgb2ZfZmxvYXQgOiBmbG9hdCAtPiBpbnQzMlxuICA9IFwiY2FtbF9pbnQzMl9vZl9mbG9hdFwiIFwiY2FtbF9pbnQzMl9vZl9mbG9hdF91bmJveGVkXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIHRvX2Zsb2F0IDogaW50MzIgLT4gZmxvYXRcbiAgPSBcImNhbWxfaW50MzJfdG9fZmxvYXRcIiBcImNhbWxfaW50MzJfdG9fZmxvYXRfdW5ib3hlZFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBiaXRzX29mX2Zsb2F0IDogZmxvYXQgLT4gaW50MzJcbiAgPSBcImNhbWxfaW50MzJfYml0c19vZl9mbG9hdFwiIFwiY2FtbF9pbnQzMl9iaXRzX29mX2Zsb2F0X3VuYm94ZWRcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgZmxvYXRfb2ZfYml0cyA6IGludDMyIC0+IGZsb2F0XG4gID0gXCJjYW1sX2ludDMyX2Zsb2F0X29mX2JpdHNcIiBcImNhbWxfaW50MzJfZmxvYXRfb2ZfYml0c191bmJveGVkXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cblxubGV0IHplcm8gPSAwbFxubGV0IG9uZSA9IDFsXG5sZXQgbWludXNfb25lID0gLTFsXG5sZXQgc3VjYyBuID0gYWRkIG4gMWxcbmxldCBwcmVkIG4gPSBzdWIgbiAxbFxubGV0IGFicyBuID0gaWYgbiA+PSAwbCB0aGVuIG4gZWxzZSBuZWcgblxubGV0IG1pbl9pbnQgPSAweDgwMDAwMDAwbFxubGV0IG1heF9pbnQgPSAweDdGRkZGRkZGbFxubGV0IGxvZ25vdCBuID0gbG9neG9yIG4gKC0xbClcblxubGV0IHVuc2lnbmVkX3RvX2ludCA9XG4gIG1hdGNoIFN5cy53b3JkX3NpemUgd2l0aFxuICB8IDMyIC0+XG4gICAgICBsZXQgbWF4X2ludCA9IG9mX2ludCBTdGRsaWIubWF4X2ludCBpblxuICAgICAgZnVuIG4gLT5cbiAgICAgICAgaWYgY29tcGFyZSB6ZXJvIG4gPD0gMCAmJiBjb21wYXJlIG4gbWF4X2ludCA8PSAwIHRoZW5cbiAgICAgICAgICBTb21lICh0b19pbnQgbilcbiAgICAgICAgZWxzZVxuICAgICAgICAgIE5vbmVcbiAgfCA2NCAtPlxuICAgICAgKCogU28gdGhhdCBpdCBjb21waWxlcyBpbiAzMi1iaXQgKilcbiAgICAgIGxldCBtYXNrID0gMHhGRkZGIGxzbCAxNiBsb3IgMHhGRkZGIGluXG4gICAgICBmdW4gbiAtPiBTb21lICh0b19pbnQgbiBsYW5kIG1hc2spXG4gIHwgXyAtPlxuICAgICAgYXNzZXJ0IGZhbHNlXG5cbmV4dGVybmFsIGZvcm1hdCA6IHN0cmluZyAtPiBpbnQzMiAtPiBzdHJpbmcgPSBcImNhbWxfaW50MzJfZm9ybWF0XCJcbmxldCB0b19zdHJpbmcgbiA9IGZvcm1hdCBcIiVkXCIgblxuXG5leHRlcm5hbCBvZl9zdHJpbmcgOiBzdHJpbmcgLT4gaW50MzIgPSBcImNhbWxfaW50MzJfb2Zfc3RyaW5nXCJcblxubGV0IG9mX3N0cmluZ19vcHQgcyA9XG4gICgqIFRPRE86IGV4cG9zZSBhIG5vbi1yYWlzaW5nIHByaW1pdGl2ZSBkaXJlY3RseS4gKilcbiAgdHJ5IFNvbWUgKG9mX3N0cmluZyBzKVxuICB3aXRoIEZhaWx1cmUgXyAtPiBOb25lXG5cbnR5cGUgdCA9IGludDMyXG5cbmxldCBjb21wYXJlICh4OiB0KSAoeTogdCkgPSBTdGRsaWIuY29tcGFyZSB4IHlcbmxldCBlcXVhbCAoeDogdCkgKHk6IHQpID0gY29tcGFyZSB4IHkgPSAwXG5cbmxldCB1bnNpZ25lZF9jb21wYXJlIG4gbSA9XG4gIGNvbXBhcmUgKHN1YiBuIG1pbl9pbnQpIChzdWIgbSBtaW5faW50KVxuXG5sZXQgbWluIHggeSA6IHQgPSBpZiB4IDw9IHkgdGhlbiB4IGVsc2UgeVxubGV0IG1heCB4IHkgOiB0ID0gaWYgeCA+PSB5IHRoZW4geCBlbHNlIHlcblxuKCogVW5zaWduZWQgZGl2aXNpb24gZnJvbSBzaWduZWQgZGl2aXNpb24gb2YgdGhlIHNhbWVcbiAgIGJpdG5lc3MuIFNlZSBXYXJyZW4gSnIuLCBIZW5yeSBTLiAoMjAxMykuIEhhY2tlcidzIERlbGlnaHQgKDIgZWQuKSwgU2VjIDktMy5cbiopXG5sZXQgdW5zaWduZWRfZGl2IG4gZCA9XG4gIGlmIGQgPCB6ZXJvIHRoZW5cbiAgICBpZiB1bnNpZ25lZF9jb21wYXJlIG4gZCA8IDAgdGhlbiB6ZXJvIGVsc2Ugb25lXG4gIGVsc2VcbiAgICBsZXQgcSA9IHNoaWZ0X2xlZnQgKGRpdiAoc2hpZnRfcmlnaHRfbG9naWNhbCBuIDEpIGQpIDEgaW5cbiAgICBsZXQgciA9IHN1YiBuIChtdWwgcSBkKSBpblxuICAgIGlmIHVuc2lnbmVkX2NvbXBhcmUgciBkID49IDAgdGhlbiBzdWNjIHEgZWxzZSBxXG5cbmxldCB1bnNpZ25lZF9yZW0gbiBkID1cbiAgc3ViIG4gKG11bCAodW5zaWduZWRfZGl2IG4gZCkgZClcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogVGhlIHBhcnNpbmcgZW5naW5lICopXG5cbm9wZW4gTGV4aW5nXG5cbigqIEludGVybmFsIGludGVyZmFjZSB0byB0aGUgcGFyc2luZyBlbmdpbmUgKilcblxudHlwZSBwYXJzZXJfZW52ID1cbiAgeyBtdXRhYmxlIHNfc3RhY2sgOiBpbnQgYXJyYXk7ICAgICAgICAoKiBTdGF0ZXMgKilcbiAgICBtdXRhYmxlIHZfc3RhY2sgOiBPYmoudCBhcnJheTsgICAgICAoKiBTZW1hbnRpYyBhdHRyaWJ1dGVzICopXG4gICAgbXV0YWJsZSBzeW1iX3N0YXJ0X3N0YWNrIDogcG9zaXRpb24gYXJyYXk7ICgqIFN0YXJ0IHBvc2l0aW9ucyAqKVxuICAgIG11dGFibGUgc3ltYl9lbmRfc3RhY2sgOiBwb3NpdGlvbiBhcnJheTsgICAoKiBFbmQgcG9zaXRpb25zICopXG4gICAgbXV0YWJsZSBzdGFja3NpemUgOiBpbnQ7ICAgICAgICAgICAgKCogU2l6ZSBvZiB0aGUgc3RhY2tzICopXG4gICAgbXV0YWJsZSBzdGFja2Jhc2UgOiBpbnQ7ICAgICAgICAgICAgKCogQmFzZSBzcCBmb3IgY3VycmVudCBwYXJzZSAqKVxuICAgIG11dGFibGUgY3Vycl9jaGFyIDogaW50OyAgICAgICAgICAgICgqIExhc3QgdG9rZW4gcmVhZCAqKVxuICAgIG11dGFibGUgbHZhbCA6IE9iai50OyAgICAgICAgICAgICAgICgqIEl0cyBzZW1hbnRpYyBhdHRyaWJ1dGUgKilcbiAgICBtdXRhYmxlIHN5bWJfc3RhcnQgOiBwb3NpdGlvbjsgICAgICAoKiBTdGFydCBwb3MuIG9mIHRoZSBjdXJyZW50IHN5bWJvbCopXG4gICAgbXV0YWJsZSBzeW1iX2VuZCA6IHBvc2l0aW9uOyAgICAgICAgKCogRW5kIHBvcy4gb2YgdGhlIGN1cnJlbnQgc3ltYm9sICopXG4gICAgbXV0YWJsZSBhc3AgOiBpbnQ7ICAgICAgICAgICAgICAgICAgKCogVGhlIHN0YWNrIHBvaW50ZXIgZm9yIGF0dHJpYnV0ZXMgKilcbiAgICBtdXRhYmxlIHJ1bGVfbGVuIDogaW50OyAgICAgICAgICAgICAoKiBOdW1iZXIgb2YgcmhzIGl0ZW1zIGluIHRoZSBydWxlICopXG4gICAgbXV0YWJsZSBydWxlX251bWJlciA6IGludDsgICAgICAgICAgKCogUnVsZSBudW1iZXIgdG8gcmVkdWNlIGJ5ICopXG4gICAgbXV0YWJsZSBzcCA6IGludDsgICAgICAgICAgICAgICAgICAgKCogU2F2ZWQgc3AgZm9yIHBhcnNlX2VuZ2luZSAqKVxuICAgIG11dGFibGUgc3RhdGUgOiBpbnQ7ICAgICAgICAgICAgICAgICgqIFNhdmVkIHN0YXRlIGZvciBwYXJzZV9lbmdpbmUgKilcbiAgICBtdXRhYmxlIGVycmZsYWcgOiBpbnQgfSAgICAgICAgICAgICAoKiBTYXZlZCBlcnJvciBmbGFnIGZvciBwYXJzZV9lbmdpbmUgKilcbltAQHdhcm5pbmcgXCItdW51c2VkLWZpZWxkXCJdXG5cbnR5cGUgcGFyc2VfdGFibGVzID1cbiAgeyBhY3Rpb25zIDogKHBhcnNlcl9lbnYgLT4gT2JqLnQpIGFycmF5O1xuICAgIHRyYW5zbF9jb25zdCA6IGludCBhcnJheTtcbiAgICB0cmFuc2xfYmxvY2sgOiBpbnQgYXJyYXk7XG4gICAgbGhzIDogc3RyaW5nO1xuICAgIGxlbiA6IHN0cmluZztcbiAgICBkZWZyZWQgOiBzdHJpbmc7XG4gICAgZGdvdG8gOiBzdHJpbmc7XG4gICAgc2luZGV4IDogc3RyaW5nO1xuICAgIHJpbmRleCA6IHN0cmluZztcbiAgICBnaW5kZXggOiBzdHJpbmc7XG4gICAgdGFibGVzaXplIDogaW50O1xuICAgIHRhYmxlIDogc3RyaW5nO1xuICAgIGNoZWNrIDogc3RyaW5nO1xuICAgIGVycm9yX2Z1bmN0aW9uIDogc3RyaW5nIC0+IHVuaXQ7XG4gICAgbmFtZXNfY29uc3QgOiBzdHJpbmc7XG4gICAgbmFtZXNfYmxvY2sgOiBzdHJpbmcgfVxuXG5leGNlcHRpb24gWVlleGl0IG9mIE9iai50XG5leGNlcHRpb24gUGFyc2VfZXJyb3JcblxudHlwZSBwYXJzZXJfaW5wdXQgPVxuICAgIFN0YXJ0XG4gIHwgVG9rZW5fcmVhZFxuICB8IFN0YWNrc19ncm93bl8xXG4gIHwgU3RhY2tzX2dyb3duXzJcbiAgfCBTZW1hbnRpY19hY3Rpb25fY29tcHV0ZWRcbiAgfCBFcnJvcl9kZXRlY3RlZFxuXG50eXBlIHBhcnNlcl9vdXRwdXQgPVxuICAgIFJlYWRfdG9rZW5cbiAgfCBSYWlzZV9wYXJzZV9lcnJvclxuICB8IEdyb3dfc3RhY2tzXzFcbiAgfCBHcm93X3N0YWNrc18yXG4gIHwgQ29tcHV0ZV9zZW1hbnRpY19hY3Rpb25cbiAgfCBDYWxsX2Vycm9yX2Z1bmN0aW9uXG5cbigqIHRvIGF2b2lkIHdhcm5pbmdzICopXG5sZXQgXyA9IFtSZWFkX3Rva2VuOyBSYWlzZV9wYXJzZV9lcnJvcjsgR3Jvd19zdGFja3NfMTsgR3Jvd19zdGFja3NfMjtcbiAgICAgICAgIENvbXB1dGVfc2VtYW50aWNfYWN0aW9uOyBDYWxsX2Vycm9yX2Z1bmN0aW9uXVxuXG5leHRlcm5hbCBwYXJzZV9lbmdpbmUgOlxuICAgIHBhcnNlX3RhYmxlcyAtPiBwYXJzZXJfZW52IC0+IHBhcnNlcl9pbnB1dCAtPiBPYmoudCAtPiBwYXJzZXJfb3V0cHV0XG4gICAgPSBcImNhbWxfcGFyc2VfZW5naW5lXCJcblxuZXh0ZXJuYWwgc2V0X3RyYWNlOiBib29sIC0+IGJvb2xcbiAgICA9IFwiY2FtbF9zZXRfcGFyc2VyX3RyYWNlXCJcblxubGV0IGVudiA9XG4gIHsgc19zdGFjayA9IEFycmF5Lm1ha2UgMTAwIDA7XG4gICAgdl9zdGFjayA9IEFycmF5Lm1ha2UgMTAwIChPYmoucmVwciAoKSk7XG4gICAgc3ltYl9zdGFydF9zdGFjayA9IEFycmF5Lm1ha2UgMTAwIGR1bW15X3BvcztcbiAgICBzeW1iX2VuZF9zdGFjayA9IEFycmF5Lm1ha2UgMTAwIGR1bW15X3BvcztcbiAgICBzdGFja3NpemUgPSAxMDA7XG4gICAgc3RhY2tiYXNlID0gMDtcbiAgICBjdXJyX2NoYXIgPSAwO1xuICAgIGx2YWwgPSBPYmoucmVwciAoKTtcbiAgICBzeW1iX3N0YXJ0ID0gZHVtbXlfcG9zO1xuICAgIHN5bWJfZW5kID0gZHVtbXlfcG9zO1xuICAgIGFzcCA9IDA7XG4gICAgcnVsZV9sZW4gPSAwO1xuICAgIHJ1bGVfbnVtYmVyID0gMDtcbiAgICBzcCA9IDA7XG4gICAgc3RhdGUgPSAwO1xuICAgIGVycmZsYWcgPSAwIH1cblxubGV0IGdyb3dfc3RhY2tzKCkgPVxuICBsZXQgb2xkc2l6ZSA9IGVudi5zdGFja3NpemUgaW5cbiAgbGV0IG5ld3NpemUgPSBvbGRzaXplICogMiBpblxuICBsZXQgbmV3X3MgPSBBcnJheS5tYWtlIG5ld3NpemUgMFxuICBhbmQgbmV3X3YgPSBBcnJheS5tYWtlIG5ld3NpemUgKE9iai5yZXByICgpKVxuICBhbmQgbmV3X3N0YXJ0ID0gQXJyYXkubWFrZSBuZXdzaXplIGR1bW15X3Bvc1xuICBhbmQgbmV3X2VuZCA9IEFycmF5Lm1ha2UgbmV3c2l6ZSBkdW1teV9wb3MgaW5cbiAgICBBcnJheS5ibGl0IGVudi5zX3N0YWNrIDAgbmV3X3MgMCBvbGRzaXplO1xuICAgIGVudi5zX3N0YWNrIDwtIG5ld19zO1xuICAgIEFycmF5LmJsaXQgZW52LnZfc3RhY2sgMCBuZXdfdiAwIG9sZHNpemU7XG4gICAgZW52LnZfc3RhY2sgPC0gbmV3X3Y7XG4gICAgQXJyYXkuYmxpdCBlbnYuc3ltYl9zdGFydF9zdGFjayAwIG5ld19zdGFydCAwIG9sZHNpemU7XG4gICAgZW52LnN5bWJfc3RhcnRfc3RhY2sgPC0gbmV3X3N0YXJ0O1xuICAgIEFycmF5LmJsaXQgZW52LnN5bWJfZW5kX3N0YWNrIDAgbmV3X2VuZCAwIG9sZHNpemU7XG4gICAgZW52LnN5bWJfZW5kX3N0YWNrIDwtIG5ld19lbmQ7XG4gICAgZW52LnN0YWNrc2l6ZSA8LSBuZXdzaXplXG5cbmxldCBjbGVhcl9wYXJzZXIoKSA9XG4gIEFycmF5LmZpbGwgZW52LnZfc3RhY2sgMCBlbnYuc3RhY2tzaXplIChPYmoucmVwciAoKSk7XG4gIGVudi5sdmFsIDwtIE9iai5yZXByICgpXG5cbmxldCBjdXJyZW50X2xvb2thaGVhZF9mdW4gPSByZWYgKGZ1biAoXyA6IE9iai50KSAtPiBmYWxzZSlcblxubGV0IHl5cGFyc2UgdGFibGVzIHN0YXJ0IGxleGVyIGxleGJ1ZiA9XG4gIGxldCByZWMgbG9vcCBjbWQgYXJnID1cbiAgICBtYXRjaCBwYXJzZV9lbmdpbmUgdGFibGVzIGVudiBjbWQgYXJnIHdpdGhcbiAgICAgIFJlYWRfdG9rZW4gLT5cbiAgICAgICAgbGV0IHQgPSBPYmoucmVwcihsZXhlciBsZXhidWYpIGluXG4gICAgICAgIGVudi5zeW1iX3N0YXJ0IDwtIGxleGJ1Zi5sZXhfc3RhcnRfcDtcbiAgICAgICAgZW52LnN5bWJfZW5kIDwtIGxleGJ1Zi5sZXhfY3Vycl9wO1xuICAgICAgICBsb29wIFRva2VuX3JlYWQgdFxuICAgIHwgUmFpc2VfcGFyc2VfZXJyb3IgLT5cbiAgICAgICAgcmFpc2UgUGFyc2VfZXJyb3JcbiAgICB8IENvbXB1dGVfc2VtYW50aWNfYWN0aW9uIC0+XG4gICAgICAgIGxldCAoYWN0aW9uLCB2YWx1ZSkgPVxuICAgICAgICAgIHRyeVxuICAgICAgICAgICAgKFNlbWFudGljX2FjdGlvbl9jb21wdXRlZCwgdGFibGVzLmFjdGlvbnMuKGVudi5ydWxlX251bWJlcikgZW52KVxuICAgICAgICAgIHdpdGggUGFyc2VfZXJyb3IgLT5cbiAgICAgICAgICAgIChFcnJvcl9kZXRlY3RlZCwgT2JqLnJlcHIgKCkpIGluXG4gICAgICAgIGxvb3AgYWN0aW9uIHZhbHVlXG4gICAgfCBHcm93X3N0YWNrc18xIC0+XG4gICAgICAgIGdyb3dfc3RhY2tzKCk7IGxvb3AgU3RhY2tzX2dyb3duXzEgKE9iai5yZXByICgpKVxuICAgIHwgR3Jvd19zdGFja3NfMiAtPlxuICAgICAgICBncm93X3N0YWNrcygpOyBsb29wIFN0YWNrc19ncm93bl8yIChPYmoucmVwciAoKSlcbiAgICB8IENhbGxfZXJyb3JfZnVuY3Rpb24gLT5cbiAgICAgICAgdGFibGVzLmVycm9yX2Z1bmN0aW9uIFwic3ludGF4IGVycm9yXCI7XG4gICAgICAgIGxvb3AgRXJyb3JfZGV0ZWN0ZWQgKE9iai5yZXByICgpKSBpblxuICBsZXQgaW5pdF9hc3AgPSBlbnYuYXNwXG4gIGFuZCBpbml0X3NwID0gZW52LnNwXG4gIGFuZCBpbml0X3N0YWNrYmFzZSA9IGVudi5zdGFja2Jhc2VcbiAgYW5kIGluaXRfc3RhdGUgPSBlbnYuc3RhdGVcbiAgYW5kIGluaXRfY3Vycl9jaGFyID0gZW52LmN1cnJfY2hhclxuICBhbmQgaW5pdF9sdmFsID0gZW52Lmx2YWxcbiAgYW5kIGluaXRfZXJyZmxhZyA9IGVudi5lcnJmbGFnIGluXG4gIGVudi5zdGFja2Jhc2UgPC0gZW52LnNwICsgMTtcbiAgZW52LmN1cnJfY2hhciA8LSBzdGFydDtcbiAgZW52LnN5bWJfZW5kIDwtIGxleGJ1Zi5sZXhfY3Vycl9wO1xuICB0cnlcbiAgICBsb29wIFN0YXJ0IChPYmoucmVwciAoKSlcbiAgd2l0aCBleG4gLT5cbiAgICBsZXQgY3Vycl9jaGFyID0gZW52LmN1cnJfY2hhciBpblxuICAgIGVudi5hc3AgPC0gaW5pdF9hc3A7XG4gICAgZW52LnNwIDwtIGluaXRfc3A7XG4gICAgZW52LnN0YWNrYmFzZSA8LSBpbml0X3N0YWNrYmFzZTtcbiAgICBlbnYuc3RhdGUgPC0gaW5pdF9zdGF0ZTtcbiAgICBlbnYuY3Vycl9jaGFyIDwtIGluaXRfY3Vycl9jaGFyO1xuICAgIGVudi5sdmFsIDwtIGluaXRfbHZhbDtcbiAgICBlbnYuZXJyZmxhZyA8LSBpbml0X2VycmZsYWc7XG4gICAgbWF0Y2ggZXhuIHdpdGhcbiAgICAgIFlZZXhpdCB2IC0+XG4gICAgICAgIE9iai5tYWdpYyB2XG4gICAgfCBfIC0+XG4gICAgICAgIGN1cnJlbnRfbG9va2FoZWFkX2Z1biA6PVxuICAgICAgICAgIChmdW4gdG9rIC0+XG4gICAgICAgICAgICBpZiBPYmouaXNfYmxvY2sgdG9rXG4gICAgICAgICAgICB0aGVuIHRhYmxlcy50cmFuc2xfYmxvY2suKE9iai50YWcgdG9rKSA9IGN1cnJfY2hhclxuICAgICAgICAgICAgZWxzZSB0YWJsZXMudHJhbnNsX2NvbnN0LihPYmoubWFnaWMgdG9rKSA9IGN1cnJfY2hhcik7XG4gICAgICAgIHJhaXNlIGV4blxuXG5sZXQgcGVla192YWwgZW52IG4gPVxuICBPYmoubWFnaWMgZW52LnZfc3RhY2suKGVudi5hc3AgLSBuKVxuXG5sZXQgc3ltYm9sX3N0YXJ0X3BvcyAoKSA9XG4gIGxldCByZWMgbG9vcCBpID1cbiAgICBpZiBpIDw9IDAgdGhlbiBlbnYuc3ltYl9lbmRfc3RhY2suKGVudi5hc3ApXG4gICAgZWxzZSBiZWdpblxuICAgICAgbGV0IHN0ID0gZW52LnN5bWJfc3RhcnRfc3RhY2suKGVudi5hc3AgLSBpICsgMSkgaW5cbiAgICAgIGxldCBlbiA9IGVudi5zeW1iX2VuZF9zdGFjay4oZW52LmFzcCAtIGkgKyAxKSBpblxuICAgICAgaWYgc3QgPD4gZW4gdGhlbiBzdCBlbHNlIGxvb3AgKGkgLSAxKVxuICAgIGVuZFxuICBpblxuICBsb29wIGVudi5ydWxlX2xlblxuXG5sZXQgc3ltYm9sX2VuZF9wb3MgKCkgPSBlbnYuc3ltYl9lbmRfc3RhY2suKGVudi5hc3ApXG5sZXQgcmhzX3N0YXJ0X3BvcyBuID0gZW52LnN5bWJfc3RhcnRfc3RhY2suKGVudi5hc3AgLSAoZW52LnJ1bGVfbGVuIC0gbikpXG5sZXQgcmhzX2VuZF9wb3MgbiA9IGVudi5zeW1iX2VuZF9zdGFjay4oZW52LmFzcCAtIChlbnYucnVsZV9sZW4gLSBuKSlcblxubGV0IHN5bWJvbF9zdGFydCAoKSA9IChzeW1ib2xfc3RhcnRfcG9zICgpKS5wb3NfY251bVxubGV0IHN5bWJvbF9lbmQgKCkgPSAoc3ltYm9sX2VuZF9wb3MgKCkpLnBvc19jbnVtXG5sZXQgcmhzX3N0YXJ0IG4gPSAocmhzX3N0YXJ0X3BvcyBuKS5wb3NfY251bVxubGV0IHJoc19lbmQgbiA9IChyaHNfZW5kX3BvcyBuKS5wb3NfY251bVxuXG5sZXQgaXNfY3VycmVudF9sb29rYWhlYWQgdG9rID1cbiAgKCFjdXJyZW50X2xvb2thaGVhZF9mdW4pKE9iai5yZXByIHRvaylcblxubGV0IHBhcnNlX2Vycm9yIChfIDogc3RyaW5nKSA9ICgpXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIFNldHMgb3ZlciBvcmRlcmVkIHR5cGVzICopXG5cbm1vZHVsZSB0eXBlIE9yZGVyZWRUeXBlID1cbiAgc2lnXG4gICAgdHlwZSB0XG4gICAgdmFsIGNvbXBhcmU6IHQgLT4gdCAtPiBpbnRcbiAgZW5kXG5cbm1vZHVsZSB0eXBlIFMgPVxuICBzaWdcbiAgICB0eXBlIGVsdFxuICAgIHR5cGUgdFxuICAgIHZhbCBlbXB0eTogdFxuICAgIHZhbCBpc19lbXB0eTogdCAtPiBib29sXG4gICAgdmFsIG1lbTogZWx0IC0+IHQgLT4gYm9vbFxuICAgIHZhbCBhZGQ6IGVsdCAtPiB0IC0+IHRcbiAgICB2YWwgc2luZ2xldG9uOiBlbHQgLT4gdFxuICAgIHZhbCByZW1vdmU6IGVsdCAtPiB0IC0+IHRcbiAgICB2YWwgdW5pb246IHQgLT4gdCAtPiB0XG4gICAgdmFsIGludGVyOiB0IC0+IHQgLT4gdFxuICAgIHZhbCBkaXNqb2ludDogdCAtPiB0IC0+IGJvb2xcbiAgICB2YWwgZGlmZjogdCAtPiB0IC0+IHRcbiAgICB2YWwgY29tcGFyZTogdCAtPiB0IC0+IGludFxuICAgIHZhbCBlcXVhbDogdCAtPiB0IC0+IGJvb2xcbiAgICB2YWwgc3Vic2V0OiB0IC0+IHQgLT4gYm9vbFxuICAgIHZhbCBpdGVyOiAoZWx0IC0+IHVuaXQpIC0+IHQgLT4gdW5pdFxuICAgIHZhbCBtYXA6IChlbHQgLT4gZWx0KSAtPiB0IC0+IHRcbiAgICB2YWwgZm9sZDogKGVsdCAtPiAnYSAtPiAnYSkgLT4gdCAtPiAnYSAtPiAnYVxuICAgIHZhbCBmb3JfYWxsOiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gYm9vbFxuICAgIHZhbCBleGlzdHM6IChlbHQgLT4gYm9vbCkgLT4gdCAtPiBib29sXG4gICAgdmFsIGZpbHRlcjogKGVsdCAtPiBib29sKSAtPiB0IC0+IHRcbiAgICB2YWwgZmlsdGVyX21hcDogKGVsdCAtPiBlbHQgb3B0aW9uKSAtPiB0IC0+IHRcbiAgICB2YWwgcGFydGl0aW9uOiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gdCAqIHRcbiAgICB2YWwgY2FyZGluYWw6IHQgLT4gaW50XG4gICAgdmFsIGVsZW1lbnRzOiB0IC0+IGVsdCBsaXN0XG4gICAgdmFsIG1pbl9lbHQ6IHQgLT4gZWx0XG4gICAgdmFsIG1pbl9lbHRfb3B0OiB0IC0+IGVsdCBvcHRpb25cbiAgICB2YWwgbWF4X2VsdDogdCAtPiBlbHRcbiAgICB2YWwgbWF4X2VsdF9vcHQ6IHQgLT4gZWx0IG9wdGlvblxuICAgIHZhbCBjaG9vc2U6IHQgLT4gZWx0XG4gICAgdmFsIGNob29zZV9vcHQ6IHQgLT4gZWx0IG9wdGlvblxuICAgIHZhbCBzcGxpdDogZWx0IC0+IHQgLT4gdCAqIGJvb2wgKiB0XG4gICAgdmFsIGZpbmQ6IGVsdCAtPiB0IC0+IGVsdFxuICAgIHZhbCBmaW5kX29wdDogZWx0IC0+IHQgLT4gZWx0IG9wdGlvblxuICAgIHZhbCBmaW5kX2ZpcnN0OiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gZWx0XG4gICAgdmFsIGZpbmRfZmlyc3Rfb3B0OiAoZWx0IC0+IGJvb2wpIC0+IHQgLT4gZWx0IG9wdGlvblxuICAgIHZhbCBmaW5kX2xhc3Q6IChlbHQgLT4gYm9vbCkgLT4gdCAtPiBlbHRcbiAgICB2YWwgZmluZF9sYXN0X29wdDogKGVsdCAtPiBib29sKSAtPiB0IC0+IGVsdCBvcHRpb25cbiAgICB2YWwgb2ZfbGlzdDogZWx0IGxpc3QgLT4gdFxuICAgIHZhbCB0b19zZXFfZnJvbSA6IGVsdCAtPiB0IC0+IGVsdCBTZXEudFxuICAgIHZhbCB0b19zZXEgOiB0IC0+IGVsdCBTZXEudFxuICAgIHZhbCB0b19yZXZfc2VxIDogdCAtPiBlbHQgU2VxLnRcbiAgICB2YWwgYWRkX3NlcSA6IGVsdCBTZXEudCAtPiB0IC0+IHRcbiAgICB2YWwgb2Zfc2VxIDogZWx0IFNlcS50IC0+IHRcbiAgZW5kXG5cbm1vZHVsZSBNYWtlKE9yZDogT3JkZXJlZFR5cGUpID1cbiAgc3RydWN0XG4gICAgdHlwZSBlbHQgPSBPcmQudFxuICAgIHR5cGUgdCA9IEVtcHR5IHwgTm9kZSBvZiB7bDp0OyB2OmVsdDsgcjp0OyBoOmludH1cblxuICAgICgqIFNldHMgYXJlIHJlcHJlc2VudGVkIGJ5IGJhbGFuY2VkIGJpbmFyeSB0cmVlcyAodGhlIGhlaWdodHMgb2YgdGhlXG4gICAgICAgY2hpbGRyZW4gZGlmZmVyIGJ5IGF0IG1vc3QgMiAqKVxuXG4gICAgbGV0IGhlaWdodCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IDBcbiAgICAgIHwgTm9kZSB7aH0gLT4gaFxuXG4gICAgKCogQ3JlYXRlcyBhIG5ldyBub2RlIHdpdGggbGVmdCBzb24gbCwgdmFsdWUgdiBhbmQgcmlnaHQgc29uIHIuXG4gICAgICAgV2UgbXVzdCBoYXZlIGFsbCBlbGVtZW50cyBvZiBsIDwgdiA8IGFsbCBlbGVtZW50cyBvZiByLlxuICAgICAgIGwgYW5kIHIgbXVzdCBiZSBiYWxhbmNlZCBhbmQgfCBoZWlnaHQgbCAtIGhlaWdodCByIHwgPD0gMi5cbiAgICAgICBJbmxpbmUgZXhwYW5zaW9uIG9mIGhlaWdodCBmb3IgYmV0dGVyIHNwZWVkLiAqKVxuXG4gICAgbGV0IGNyZWF0ZSBsIHYgciA9XG4gICAgICBsZXQgaGwgPSBtYXRjaCBsIHdpdGggRW1wdHkgLT4gMCB8IE5vZGUge2h9IC0+IGggaW5cbiAgICAgIGxldCBociA9IG1hdGNoIHIgd2l0aCBFbXB0eSAtPiAwIHwgTm9kZSB7aH0gLT4gaCBpblxuICAgICAgTm9kZXtsOyB2OyByOyBoPShpZiBobCA+PSBociB0aGVuIGhsICsgMSBlbHNlIGhyICsgMSl9XG5cbiAgICAoKiBTYW1lIGFzIGNyZWF0ZSwgYnV0IHBlcmZvcm1zIG9uZSBzdGVwIG9mIHJlYmFsYW5jaW5nIGlmIG5lY2Vzc2FyeS5cbiAgICAgICBBc3N1bWVzIGwgYW5kIHIgYmFsYW5jZWQgYW5kIHwgaGVpZ2h0IGwgLSBoZWlnaHQgciB8IDw9IDMuXG4gICAgICAgSW5saW5lIGV4cGFuc2lvbiBvZiBjcmVhdGUgZm9yIGJldHRlciBzcGVlZCBpbiB0aGUgbW9zdCBmcmVxdWVudCBjYXNlXG4gICAgICAgd2hlcmUgbm8gcmViYWxhbmNpbmcgaXMgcmVxdWlyZWQuICopXG5cbiAgICBsZXQgYmFsIGwgdiByID1cbiAgICAgIGxldCBobCA9IG1hdGNoIGwgd2l0aCBFbXB0eSAtPiAwIHwgTm9kZSB7aH0gLT4gaCBpblxuICAgICAgbGV0IGhyID0gbWF0Y2ggciB3aXRoIEVtcHR5IC0+IDAgfCBOb2RlIHtofSAtPiBoIGluXG4gICAgICBpZiBobCA+IGhyICsgMiB0aGVuIGJlZ2luXG4gICAgICAgIG1hdGNoIGwgd2l0aFxuICAgICAgICAgIEVtcHR5IC0+IGludmFsaWRfYXJnIFwiU2V0LmJhbFwiXG4gICAgICAgIHwgTm9kZXtsPWxsOyB2PWx2OyByPWxyfSAtPlxuICAgICAgICAgICAgaWYgaGVpZ2h0IGxsID49IGhlaWdodCBsciB0aGVuXG4gICAgICAgICAgICAgIGNyZWF0ZSBsbCBsdiAoY3JlYXRlIGxyIHYgcilcbiAgICAgICAgICAgIGVsc2UgYmVnaW5cbiAgICAgICAgICAgICAgbWF0Y2ggbHIgd2l0aFxuICAgICAgICAgICAgICAgIEVtcHR5IC0+IGludmFsaWRfYXJnIFwiU2V0LmJhbFwiXG4gICAgICAgICAgICAgIHwgTm9kZXtsPWxybDsgdj1scnY7IHI9bHJyfS0+XG4gICAgICAgICAgICAgICAgICBjcmVhdGUgKGNyZWF0ZSBsbCBsdiBscmwpIGxydiAoY3JlYXRlIGxyciB2IHIpXG4gICAgICAgICAgICBlbmRcbiAgICAgIGVuZCBlbHNlIGlmIGhyID4gaGwgKyAyIHRoZW4gYmVnaW5cbiAgICAgICAgbWF0Y2ggciB3aXRoXG4gICAgICAgICAgRW1wdHkgLT4gaW52YWxpZF9hcmcgXCJTZXQuYmFsXCJcbiAgICAgICAgfCBOb2Rle2w9cmw7IHY9cnY7IHI9cnJ9IC0+XG4gICAgICAgICAgICBpZiBoZWlnaHQgcnIgPj0gaGVpZ2h0IHJsIHRoZW5cbiAgICAgICAgICAgICAgY3JlYXRlIChjcmVhdGUgbCB2IHJsKSBydiByclxuICAgICAgICAgICAgZWxzZSBiZWdpblxuICAgICAgICAgICAgICBtYXRjaCBybCB3aXRoXG4gICAgICAgICAgICAgICAgRW1wdHkgLT4gaW52YWxpZF9hcmcgXCJTZXQuYmFsXCJcbiAgICAgICAgICAgICAgfCBOb2Rle2w9cmxsOyB2PXJsdjsgcj1ybHJ9IC0+XG4gICAgICAgICAgICAgICAgICBjcmVhdGUgKGNyZWF0ZSBsIHYgcmxsKSBybHYgKGNyZWF0ZSBybHIgcnYgcnIpXG4gICAgICAgICAgICBlbmRcbiAgICAgIGVuZCBlbHNlXG4gICAgICAgIE5vZGV7bDsgdjsgcjsgaD0oaWYgaGwgPj0gaHIgdGhlbiBobCArIDEgZWxzZSBociArIDEpfVxuXG4gICAgKCogSW5zZXJ0aW9uIG9mIG9uZSBlbGVtZW50ICopXG5cbiAgICBsZXQgcmVjIGFkZCB4ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gTm9kZXtsPUVtcHR5OyB2PXg7IHI9RW1wdHk7IGg9MX1cbiAgICAgIHwgTm9kZXtsOyB2OyByfSBhcyB0IC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB4IHYgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuIHQgZWxzZVxuICAgICAgICAgIGlmIGMgPCAwIHRoZW5cbiAgICAgICAgICAgIGxldCBsbCA9IGFkZCB4IGwgaW5cbiAgICAgICAgICAgIGlmIGwgPT0gbGwgdGhlbiB0IGVsc2UgYmFsIGxsIHYgclxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGxldCByciA9IGFkZCB4IHIgaW5cbiAgICAgICAgICAgIGlmIHIgPT0gcnIgdGhlbiB0IGVsc2UgYmFsIGwgdiByclxuXG4gICAgbGV0IHNpbmdsZXRvbiB4ID0gTm9kZXtsPUVtcHR5OyB2PXg7IHI9RW1wdHk7IGg9MX1cblxuICAgICgqIEJld2FyZTogdGhvc2UgdHdvIGZ1bmN0aW9ucyBhc3N1bWUgdGhhdCB0aGUgYWRkZWQgdiBpcyAqc3RyaWN0bHkqXG4gICAgICAgc21hbGxlciAob3IgYmlnZ2VyKSB0aGFuIGFsbCB0aGUgcHJlc2VudCBlbGVtZW50cyBpbiB0aGUgdHJlZTsgaXRcbiAgICAgICBkb2VzIG5vdCB0ZXN0IGZvciBlcXVhbGl0eSB3aXRoIHRoZSBjdXJyZW50IG1pbiAob3IgbWF4KSBlbGVtZW50LlxuICAgICAgIEluZGVlZCwgdGhleSBhcmUgb25seSB1c2VkIGR1cmluZyB0aGUgXCJqb2luXCIgb3BlcmF0aW9uIHdoaWNoXG4gICAgICAgcmVzcGVjdHMgdGhpcyBwcmVjb25kaXRpb24uXG4gICAgKilcblxuICAgIGxldCByZWMgYWRkX21pbl9lbGVtZW50IHggPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPiBzaW5nbGV0b24geFxuICAgICAgfCBOb2RlIHtsOyB2OyByfSAtPlxuICAgICAgICBiYWwgKGFkZF9taW5fZWxlbWVudCB4IGwpIHYgclxuXG4gICAgbGV0IHJlYyBhZGRfbWF4X2VsZW1lbnQgeCA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+IHNpbmdsZXRvbiB4XG4gICAgICB8IE5vZGUge2w7IHY7IHJ9IC0+XG4gICAgICAgIGJhbCBsIHYgKGFkZF9tYXhfZWxlbWVudCB4IHIpXG5cbiAgICAoKiBTYW1lIGFzIGNyZWF0ZSBhbmQgYmFsLCBidXQgbm8gYXNzdW1wdGlvbnMgYXJlIG1hZGUgb24gdGhlXG4gICAgICAgcmVsYXRpdmUgaGVpZ2h0cyBvZiBsIGFuZCByLiAqKVxuXG4gICAgbGV0IHJlYyBqb2luIGwgdiByID1cbiAgICAgIG1hdGNoIChsLCByKSB3aXRoXG4gICAgICAgIChFbXB0eSwgXykgLT4gYWRkX21pbl9lbGVtZW50IHYgclxuICAgICAgfCAoXywgRW1wdHkpIC0+IGFkZF9tYXhfZWxlbWVudCB2IGxcbiAgICAgIHwgKE5vZGV7bD1sbDsgdj1sdjsgcj1scjsgaD1saH0sIE5vZGV7bD1ybDsgdj1ydjsgcj1ycjsgaD1yaH0pIC0+XG4gICAgICAgICAgaWYgbGggPiByaCArIDIgdGhlbiBiYWwgbGwgbHYgKGpvaW4gbHIgdiByKSBlbHNlXG4gICAgICAgICAgaWYgcmggPiBsaCArIDIgdGhlbiBiYWwgKGpvaW4gbCB2IHJsKSBydiByciBlbHNlXG4gICAgICAgICAgY3JlYXRlIGwgdiByXG5cbiAgICAoKiBTbWFsbGVzdCBhbmQgZ3JlYXRlc3QgZWxlbWVudCBvZiBhIHNldCAqKVxuXG4gICAgbGV0IHJlYyBtaW5fZWx0ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IE5vZGV7bD1FbXB0eTsgdn0gLT4gdlxuICAgICAgfCBOb2Rle2x9IC0+IG1pbl9lbHQgbFxuXG4gICAgbGV0IHJlYyBtaW5fZWx0X29wdCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IE5vbmVcbiAgICAgIHwgTm9kZXtsPUVtcHR5OyB2fSAtPiBTb21lIHZcbiAgICAgIHwgTm9kZXtsfSAtPiBtaW5fZWx0X29wdCBsXG5cbiAgICBsZXQgcmVjIG1heF9lbHQgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgIHwgTm9kZXt2OyByPUVtcHR5fSAtPiB2XG4gICAgICB8IE5vZGV7cn0gLT4gbWF4X2VsdCByXG5cbiAgICBsZXQgcmVjIG1heF9lbHRfb3B0ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gTm9uZVxuICAgICAgfCBOb2Rle3Y7IHI9RW1wdHl9IC0+IFNvbWUgdlxuICAgICAgfCBOb2Rle3J9IC0+IG1heF9lbHRfb3B0IHJcblxuICAgICgqIFJlbW92ZSB0aGUgc21hbGxlc3QgZWxlbWVudCBvZiB0aGUgZ2l2ZW4gc2V0ICopXG5cbiAgICBsZXQgcmVjIHJlbW92ZV9taW5fZWx0ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gaW52YWxpZF9hcmcgXCJTZXQucmVtb3ZlX21pbl9lbHRcIlxuICAgICAgfCBOb2Rle2w9RW1wdHk7IHJ9IC0+IHJcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPiBiYWwgKHJlbW92ZV9taW5fZWx0IGwpIHYgclxuXG4gICAgKCogTWVyZ2UgdHdvIHRyZWVzIGwgYW5kIHIgaW50byBvbmUuXG4gICAgICAgQWxsIGVsZW1lbnRzIG9mIGwgbXVzdCBwcmVjZWRlIHRoZSBlbGVtZW50cyBvZiByLlxuICAgICAgIEFzc3VtZSB8IGhlaWdodCBsIC0gaGVpZ2h0IHIgfCA8PSAyLiAqKVxuXG4gICAgbGV0IG1lcmdlIHQxIHQyID1cbiAgICAgIG1hdGNoICh0MSwgdDIpIHdpdGhcbiAgICAgICAgKEVtcHR5LCB0KSAtPiB0XG4gICAgICB8ICh0LCBFbXB0eSkgLT4gdFxuICAgICAgfCAoXywgXykgLT4gYmFsIHQxIChtaW5fZWx0IHQyKSAocmVtb3ZlX21pbl9lbHQgdDIpXG5cbiAgICAoKiBNZXJnZSB0d28gdHJlZXMgbCBhbmQgciBpbnRvIG9uZS5cbiAgICAgICBBbGwgZWxlbWVudHMgb2YgbCBtdXN0IHByZWNlZGUgdGhlIGVsZW1lbnRzIG9mIHIuXG4gICAgICAgTm8gYXNzdW1wdGlvbiBvbiB0aGUgaGVpZ2h0cyBvZiBsIGFuZCByLiAqKVxuXG4gICAgbGV0IGNvbmNhdCB0MSB0MiA9XG4gICAgICBtYXRjaCAodDEsIHQyKSB3aXRoXG4gICAgICAgIChFbXB0eSwgdCkgLT4gdFxuICAgICAgfCAodCwgRW1wdHkpIC0+IHRcbiAgICAgIHwgKF8sIF8pIC0+IGpvaW4gdDEgKG1pbl9lbHQgdDIpIChyZW1vdmVfbWluX2VsdCB0MilcblxuICAgICgqIFNwbGl0dGluZy4gIHNwbGl0IHggcyByZXR1cm5zIGEgdHJpcGxlIChsLCBwcmVzZW50LCByKSB3aGVyZVxuICAgICAgICAtIGwgaXMgdGhlIHNldCBvZiBlbGVtZW50cyBvZiBzIHRoYXQgYXJlIDwgeFxuICAgICAgICAtIHIgaXMgdGhlIHNldCBvZiBlbGVtZW50cyBvZiBzIHRoYXQgYXJlID4geFxuICAgICAgICAtIHByZXNlbnQgaXMgZmFsc2UgaWYgcyBjb250YWlucyBubyBlbGVtZW50IGVxdWFsIHRvIHgsXG4gICAgICAgICAgb3IgdHJ1ZSBpZiBzIGNvbnRhaW5zIGFuIGVsZW1lbnQgZXF1YWwgdG8geC4gKilcblxuICAgIGxldCByZWMgc3BsaXQgeCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgKEVtcHR5LCBmYWxzZSwgRW1wdHkpXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHggdiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gKGwsIHRydWUsIHIpXG4gICAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuXG4gICAgICAgICAgICBsZXQgKGxsLCBwcmVzLCBybCkgPSBzcGxpdCB4IGwgaW4gKGxsLCBwcmVzLCBqb2luIHJsIHYgcilcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBsZXQgKGxyLCBwcmVzLCBycikgPSBzcGxpdCB4IHIgaW4gKGpvaW4gbCB2IGxyLCBwcmVzLCBycilcblxuICAgICgqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBzZXQgb3BlcmF0aW9ucyAqKVxuXG4gICAgbGV0IGVtcHR5ID0gRW1wdHlcblxuICAgIGxldCBpc19lbXB0eSA9IGZ1bmN0aW9uIEVtcHR5IC0+IHRydWUgfCBfIC0+IGZhbHNlXG5cbiAgICBsZXQgcmVjIG1lbSB4ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gZmFsc2VcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgeCB2IGluXG4gICAgICAgICAgYyA9IDAgfHwgbWVtIHggKGlmIGMgPCAwIHRoZW4gbCBlbHNlIHIpXG5cbiAgICBsZXQgcmVjIHJlbW92ZSB4ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gRW1wdHlcbiAgICAgIHwgKE5vZGV7bDsgdjsgcn0gYXMgdCkgLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHggdiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gbWVyZ2UgbCByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgaWYgYyA8IDAgdGhlblxuICAgICAgICAgICAgICBsZXQgbGwgPSByZW1vdmUgeCBsIGluXG4gICAgICAgICAgICAgIGlmIGwgPT0gbGwgdGhlbiB0XG4gICAgICAgICAgICAgIGVsc2UgYmFsIGxsIHYgclxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICBsZXQgcnIgPSByZW1vdmUgeCByIGluXG4gICAgICAgICAgICAgIGlmIHIgPT0gcnIgdGhlbiB0XG4gICAgICAgICAgICAgIGVsc2UgYmFsIGwgdiByclxuXG4gICAgbGV0IHJlYyB1bmlvbiBzMSBzMiA9XG4gICAgICBtYXRjaCAoczEsIHMyKSB3aXRoXG4gICAgICAgIChFbXB0eSwgdDIpIC0+IHQyXG4gICAgICB8ICh0MSwgRW1wdHkpIC0+IHQxXG4gICAgICB8IChOb2Rle2w9bDE7IHY9djE7IHI9cjE7IGg9aDF9LCBOb2Rle2w9bDI7IHY9djI7IHI9cjI7IGg9aDJ9KSAtPlxuICAgICAgICAgIGlmIGgxID49IGgyIHRoZW5cbiAgICAgICAgICAgIGlmIGgyID0gMSB0aGVuIGFkZCB2MiBzMSBlbHNlIGJlZ2luXG4gICAgICAgICAgICAgIGxldCAobDIsIF8sIHIyKSA9IHNwbGl0IHYxIHMyIGluXG4gICAgICAgICAgICAgIGpvaW4gKHVuaW9uIGwxIGwyKSB2MSAodW5pb24gcjEgcjIpXG4gICAgICAgICAgICBlbmRcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBpZiBoMSA9IDEgdGhlbiBhZGQgdjEgczIgZWxzZSBiZWdpblxuICAgICAgICAgICAgICBsZXQgKGwxLCBfLCByMSkgPSBzcGxpdCB2MiBzMSBpblxuICAgICAgICAgICAgICBqb2luICh1bmlvbiBsMSBsMikgdjIgKHVuaW9uIHIxIHIyKVxuICAgICAgICAgICAgZW5kXG5cbiAgICBsZXQgcmVjIGludGVyIHMxIHMyID1cbiAgICAgIG1hdGNoIChzMSwgczIpIHdpdGhcbiAgICAgICAgKEVtcHR5LCBfKSAtPiBFbXB0eVxuICAgICAgfCAoXywgRW1wdHkpIC0+IEVtcHR5XG4gICAgICB8IChOb2Rle2w9bDE7IHY9djE7IHI9cjF9LCB0MikgLT5cbiAgICAgICAgICBtYXRjaCBzcGxpdCB2MSB0MiB3aXRoXG4gICAgICAgICAgICAobDIsIGZhbHNlLCByMikgLT5cbiAgICAgICAgICAgICAgY29uY2F0IChpbnRlciBsMSBsMikgKGludGVyIHIxIHIyKVxuICAgICAgICAgIHwgKGwyLCB0cnVlLCByMikgLT5cbiAgICAgICAgICAgICAgam9pbiAoaW50ZXIgbDEgbDIpIHYxIChpbnRlciByMSByMilcblxuICAgICgqIFNhbWUgYXMgc3BsaXQsIGJ1dCBjb21wdXRlIHRoZSBsZWZ0IGFuZCByaWdodCBzdWJ0cmVlc1xuICAgICAgIG9ubHkgaWYgdGhlIHBpdm90IGVsZW1lbnQgaXMgbm90IGluIHRoZSBzZXQuICBUaGUgcmlnaHQgc3VidHJlZVxuICAgICAgIGlzIGNvbXB1dGVkIG9uIGRlbWFuZC4gKilcblxuICAgIHR5cGUgc3BsaXRfYmlzID1cbiAgICAgIHwgRm91bmRcbiAgICAgIHwgTm90Rm91bmQgb2YgdCAqICh1bml0IC0+IHQpXG5cbiAgICBsZXQgcmVjIHNwbGl0X2JpcyB4ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICBOb3RGb3VuZCAoRW1wdHksIChmdW4gKCkgLT4gRW1wdHkpKVxuICAgICAgfCBOb2Rle2w7IHY7IHI7IF99IC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB4IHYgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuIEZvdW5kXG4gICAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuXG4gICAgICAgICAgICBtYXRjaCBzcGxpdF9iaXMgeCBsIHdpdGhcbiAgICAgICAgICAgIHwgRm91bmQgLT4gRm91bmRcbiAgICAgICAgICAgIHwgTm90Rm91bmQgKGxsLCBybCkgLT4gTm90Rm91bmQgKGxsLCAoZnVuICgpIC0+IGpvaW4gKHJsICgpKSB2IHIpKVxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIG1hdGNoIHNwbGl0X2JpcyB4IHIgd2l0aFxuICAgICAgICAgICAgfCBGb3VuZCAtPiBGb3VuZFxuICAgICAgICAgICAgfCBOb3RGb3VuZCAobHIsIHJyKSAtPiBOb3RGb3VuZCAoam9pbiBsIHYgbHIsIHJyKVxuXG4gICAgbGV0IHJlYyBkaXNqb2ludCBzMSBzMiA9XG4gICAgICBtYXRjaCAoczEsIHMyKSB3aXRoXG4gICAgICAgIChFbXB0eSwgXykgfCAoXywgRW1wdHkpIC0+IHRydWVcbiAgICAgIHwgKE5vZGV7bD1sMTsgdj12MTsgcj1yMX0sIHQyKSAtPlxuICAgICAgICAgIGlmIHMxID09IHMyIHRoZW4gZmFsc2VcbiAgICAgICAgICBlbHNlIG1hdGNoIHNwbGl0X2JpcyB2MSB0MiB3aXRoXG4gICAgICAgICAgICAgIE5vdEZvdW5kKGwyLCByMikgLT4gZGlzam9pbnQgbDEgbDIgJiYgZGlzam9pbnQgcjEgKHIyICgpKVxuICAgICAgICAgICAgfCBGb3VuZCAtPiBmYWxzZVxuXG4gICAgbGV0IHJlYyBkaWZmIHMxIHMyID1cbiAgICAgIG1hdGNoIChzMSwgczIpIHdpdGhcbiAgICAgICAgKEVtcHR5LCBfKSAtPiBFbXB0eVxuICAgICAgfCAodDEsIEVtcHR5KSAtPiB0MVxuICAgICAgfCAoTm9kZXtsPWwxOyB2PXYxOyByPXIxfSwgdDIpIC0+XG4gICAgICAgICAgbWF0Y2ggc3BsaXQgdjEgdDIgd2l0aFxuICAgICAgICAgICAgKGwyLCBmYWxzZSwgcjIpIC0+XG4gICAgICAgICAgICAgIGpvaW4gKGRpZmYgbDEgbDIpIHYxIChkaWZmIHIxIHIyKVxuICAgICAgICAgIHwgKGwyLCB0cnVlLCByMikgLT5cbiAgICAgICAgICAgICAgY29uY2F0IChkaWZmIGwxIGwyKSAoZGlmZiByMSByMilcblxuICAgIHR5cGUgZW51bWVyYXRpb24gPSBFbmQgfCBNb3JlIG9mIGVsdCAqIHQgKiBlbnVtZXJhdGlvblxuXG4gICAgbGV0IHJlYyBjb25zX2VudW0gcyBlID1cbiAgICAgIG1hdGNoIHMgd2l0aFxuICAgICAgICBFbXB0eSAtPiBlXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT4gY29uc19lbnVtIGwgKE1vcmUodiwgciwgZSkpXG5cbiAgICBsZXQgcmVjIGNvbXBhcmVfYXV4IGUxIGUyID1cbiAgICAgICAgbWF0Y2ggKGUxLCBlMikgd2l0aFxuICAgICAgICAoRW5kLCBFbmQpIC0+IDBcbiAgICAgIHwgKEVuZCwgXykgIC0+IC0xXG4gICAgICB8IChfLCBFbmQpIC0+IDFcbiAgICAgIHwgKE1vcmUodjEsIHIxLCBlMSksIE1vcmUodjIsIHIyLCBlMikpIC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB2MSB2MiBpblxuICAgICAgICAgIGlmIGMgPD4gMFxuICAgICAgICAgIHRoZW4gY1xuICAgICAgICAgIGVsc2UgY29tcGFyZV9hdXggKGNvbnNfZW51bSByMSBlMSkgKGNvbnNfZW51bSByMiBlMilcblxuICAgIGxldCBjb21wYXJlIHMxIHMyID1cbiAgICAgIGNvbXBhcmVfYXV4IChjb25zX2VudW0gczEgRW5kKSAoY29uc19lbnVtIHMyIEVuZClcblxuICAgIGxldCBlcXVhbCBzMSBzMiA9XG4gICAgICBjb21wYXJlIHMxIHMyID0gMFxuXG4gICAgbGV0IHJlYyBzdWJzZXQgczEgczIgPVxuICAgICAgbWF0Y2ggKHMxLCBzMikgd2l0aFxuICAgICAgICBFbXB0eSwgXyAtPlxuICAgICAgICAgIHRydWVcbiAgICAgIHwgXywgRW1wdHkgLT5cbiAgICAgICAgICBmYWxzZVxuICAgICAgfCBOb2RlIHtsPWwxOyB2PXYxOyByPXIxfSwgKE5vZGUge2w9bDI7IHY9djI7IHI9cjJ9IGFzIHQyKSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgdjEgdjIgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuXG4gICAgICAgICAgICBzdWJzZXQgbDEgbDIgJiYgc3Vic2V0IHIxIHIyXG4gICAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuXG4gICAgICAgICAgICBzdWJzZXQgKE5vZGUge2w9bDE7IHY9djE7IHI9RW1wdHk7IGg9MH0pIGwyICYmIHN1YnNldCByMSB0MlxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHN1YnNldCAoTm9kZSB7bD1FbXB0eTsgdj12MTsgcj1yMTsgaD0wfSkgcjIgJiYgc3Vic2V0IGwxIHQyXG5cbiAgICBsZXQgcmVjIGl0ZXIgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+ICgpXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT4gaXRlciBmIGw7IGYgdjsgaXRlciBmIHJcblxuICAgIGxldCByZWMgZm9sZCBmIHMgYWNjdSA9XG4gICAgICBtYXRjaCBzIHdpdGhcbiAgICAgICAgRW1wdHkgLT4gYWNjdVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+IGZvbGQgZiByIChmIHYgKGZvbGQgZiBsIGFjY3UpKVxuXG4gICAgbGV0IHJlYyBmb3JfYWxsIHAgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiB0cnVlXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT4gcCB2ICYmIGZvcl9hbGwgcCBsICYmIGZvcl9hbGwgcCByXG5cbiAgICBsZXQgcmVjIGV4aXN0cyBwID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gZmFsc2VcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPiBwIHYgfHwgZXhpc3RzIHAgbCB8fCBleGlzdHMgcCByXG5cbiAgICBsZXQgcmVjIGZpbHRlciBwID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gRW1wdHlcbiAgICAgIHwgKE5vZGV7bDsgdjsgcn0pIGFzIHQgLT5cbiAgICAgICAgICAoKiBjYWxsIFtwXSBpbiB0aGUgZXhwZWN0ZWQgbGVmdC10by1yaWdodCBvcmRlciAqKVxuICAgICAgICAgIGxldCBsJyA9IGZpbHRlciBwIGwgaW5cbiAgICAgICAgICBsZXQgcHYgPSBwIHYgaW5cbiAgICAgICAgICBsZXQgcicgPSBmaWx0ZXIgcCByIGluXG4gICAgICAgICAgaWYgcHYgdGhlblxuICAgICAgICAgICAgaWYgbD09bCcgJiYgcj09cicgdGhlbiB0IGVsc2Ugam9pbiBsJyB2IHInXG4gICAgICAgICAgZWxzZSBjb25jYXQgbCcgcidcblxuICAgIGxldCByZWMgcGFydGl0aW9uIHAgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiAoRW1wdHksIEVtcHR5KVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgKCogY2FsbCBbcF0gaW4gdGhlIGV4cGVjdGVkIGxlZnQtdG8tcmlnaHQgb3JkZXIgKilcbiAgICAgICAgICBsZXQgKGx0LCBsZikgPSBwYXJ0aXRpb24gcCBsIGluXG4gICAgICAgICAgbGV0IHB2ID0gcCB2IGluXG4gICAgICAgICAgbGV0IChydCwgcmYpID0gcGFydGl0aW9uIHAgciBpblxuICAgICAgICAgIGlmIHB2XG4gICAgICAgICAgdGhlbiAoam9pbiBsdCB2IHJ0LCBjb25jYXQgbGYgcmYpXG4gICAgICAgICAgZWxzZSAoY29uY2F0IGx0IHJ0LCBqb2luIGxmIHYgcmYpXG5cbiAgICBsZXQgcmVjIGNhcmRpbmFsID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gMFxuICAgICAgfCBOb2Rle2w7IHJ9IC0+IGNhcmRpbmFsIGwgKyAxICsgY2FyZGluYWwgclxuXG4gICAgbGV0IHJlYyBlbGVtZW50c19hdXggYWNjdSA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IGFjY3VcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPiBlbGVtZW50c19hdXggKHYgOjogZWxlbWVudHNfYXV4IGFjY3UgcikgbFxuXG4gICAgbGV0IGVsZW1lbnRzIHMgPVxuICAgICAgZWxlbWVudHNfYXV4IFtdIHNcblxuICAgIGxldCBjaG9vc2UgPSBtaW5fZWx0XG5cbiAgICBsZXQgY2hvb3NlX29wdCA9IG1pbl9lbHRfb3B0XG5cbiAgICBsZXQgcmVjIGZpbmQgeCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB4IHYgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuIHZcbiAgICAgICAgICBlbHNlIGZpbmQgeCAoaWYgYyA8IDAgdGhlbiBsIGVsc2UgcilcblxuICAgIGxldCByZWMgZmluZF9maXJzdF9hdXggdjAgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgdjBcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2ZpcnN0X2F1eCB2IGYgbFxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfZmlyc3RfYXV4IHYwIGYgclxuXG4gICAgbGV0IHJlYyBmaW5kX2ZpcnN0IGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfZmlyc3RfYXV4IHYgZiBsXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9maXJzdCBmIHJcblxuICAgIGxldCByZWMgZmluZF9maXJzdF9vcHRfYXV4IHYwIGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIFNvbWUgdjBcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2ZpcnN0X29wdF9hdXggdiBmIGxcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2ZpcnN0X29wdF9hdXggdjAgZiByXG5cbiAgICBsZXQgcmVjIGZpbmRfZmlyc3Rfb3B0IGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIE5vbmVcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2ZpcnN0X29wdF9hdXggdiBmIGxcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2ZpcnN0X29wdCBmIHJcblxuICAgIGxldCByZWMgZmluZF9sYXN0X2F1eCB2MCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICB2MFxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfbGFzdF9hdXggdiBmIHJcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2xhc3RfYXV4IHYwIGYgbFxuXG4gICAgbGV0IHJlYyBmaW5kX2xhc3QgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IE5vZGV7bDsgdjsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9sYXN0X2F1eCB2IGYgclxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfbGFzdCBmIGxcblxuICAgIGxldCByZWMgZmluZF9sYXN0X29wdF9hdXggdjAgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgU29tZSB2MFxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfbGFzdF9vcHRfYXV4IHYgZiByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9sYXN0X29wdF9hdXggdjAgZiBsXG5cbiAgICBsZXQgcmVjIGZpbmRfbGFzdF9vcHQgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgTm9uZVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfbGFzdF9vcHRfYXV4IHYgZiByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9sYXN0X29wdCBmIGxcblxuICAgIGxldCByZWMgZmluZF9vcHQgeCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IE5vbmVcbiAgICAgIHwgTm9kZXtsOyB2OyByfSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgeCB2IGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlbiBTb21lIHZcbiAgICAgICAgICBlbHNlIGZpbmRfb3B0IHggKGlmIGMgPCAwIHRoZW4gbCBlbHNlIHIpXG5cbiAgICBsZXQgdHJ5X2pvaW4gbCB2IHIgPVxuICAgICAgKCogW2pvaW4gbCB2IHJdIGNhbiBvbmx5IGJlIGNhbGxlZCB3aGVuIChlbGVtZW50cyBvZiBsIDwgdiA8XG4gICAgICAgICBlbGVtZW50cyBvZiByKTsgdXNlIFt0cnlfam9pbiBsIHYgcl0gd2hlbiB0aGlzIHByb3BlcnR5IG1heVxuICAgICAgICAgbm90IGhvbGQsIGJ1dCB5b3UgaG9wZSBpdCBkb2VzIGhvbGQgaW4gdGhlIGNvbW1vbiBjYXNlICopXG4gICAgICBpZiAobCA9IEVtcHR5IHx8IE9yZC5jb21wYXJlIChtYXhfZWx0IGwpIHYgPCAwKVxuICAgICAgJiYgKHIgPSBFbXB0eSB8fCBPcmQuY29tcGFyZSB2IChtaW5fZWx0IHIpIDwgMClcbiAgICAgIHRoZW4gam9pbiBsIHYgclxuICAgICAgZWxzZSB1bmlvbiBsIChhZGQgdiByKVxuXG4gICAgbGV0IHJlYyBtYXAgZiA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+IEVtcHR5XG4gICAgICB8IE5vZGV7bDsgdjsgcn0gYXMgdCAtPlxuICAgICAgICAgKCogZW5mb3JjZSBsZWZ0LXRvLXJpZ2h0IGV2YWx1YXRpb24gb3JkZXIgKilcbiAgICAgICAgIGxldCBsJyA9IG1hcCBmIGwgaW5cbiAgICAgICAgIGxldCB2JyA9IGYgdiBpblxuICAgICAgICAgbGV0IHInID0gbWFwIGYgciBpblxuICAgICAgICAgaWYgbCA9PSBsJyAmJiB2ID09IHYnICYmIHIgPT0gcicgdGhlbiB0XG4gICAgICAgICBlbHNlIHRyeV9qb2luIGwnIHYnIHInXG5cbiAgICBsZXQgdHJ5X2NvbmNhdCB0MSB0MiA9XG4gICAgICBtYXRjaCAodDEsIHQyKSB3aXRoXG4gICAgICAgIChFbXB0eSwgdCkgLT4gdFxuICAgICAgfCAodCwgRW1wdHkpIC0+IHRcbiAgICAgIHwgKF8sIF8pIC0+IHRyeV9qb2luIHQxIChtaW5fZWx0IHQyKSAocmVtb3ZlX21pbl9lbHQgdDIpXG5cbiAgICBsZXQgcmVjIGZpbHRlcl9tYXAgZiA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+IEVtcHR5XG4gICAgICB8IE5vZGV7bDsgdjsgcn0gYXMgdCAtPlxuICAgICAgICAgKCogZW5mb3JjZSBsZWZ0LXRvLXJpZ2h0IGV2YWx1YXRpb24gb3JkZXIgKilcbiAgICAgICAgIGxldCBsJyA9IGZpbHRlcl9tYXAgZiBsIGluXG4gICAgICAgICBsZXQgdicgPSBmIHYgaW5cbiAgICAgICAgIGxldCByJyA9IGZpbHRlcl9tYXAgZiByIGluXG4gICAgICAgICBiZWdpbiBtYXRjaCB2JyB3aXRoXG4gICAgICAgICAgIHwgU29tZSB2JyAtPlxuICAgICAgICAgICAgICBpZiBsID09IGwnICYmIHYgPT0gdicgJiYgciA9PSByJyB0aGVuIHRcbiAgICAgICAgICAgICAgZWxzZSB0cnlfam9pbiBsJyB2JyByJ1xuICAgICAgICAgICB8IE5vbmUgLT5cbiAgICAgICAgICAgICAgdHJ5X2NvbmNhdCBsJyByJ1xuICAgICAgICAgZW5kXG5cbiAgICBsZXQgb2Zfc29ydGVkX2xpc3QgbCA9XG4gICAgICBsZXQgcmVjIHN1YiBuIGwgPVxuICAgICAgICBtYXRjaCBuLCBsIHdpdGhcbiAgICAgICAgfCAwLCBsIC0+IEVtcHR5LCBsXG4gICAgICAgIHwgMSwgeDAgOjogbCAtPiBOb2RlIHtsPUVtcHR5OyB2PXgwOyByPUVtcHR5OyBoPTF9LCBsXG4gICAgICAgIHwgMiwgeDAgOjogeDEgOjogbCAtPlxuICAgICAgICAgICAgTm9kZXtsPU5vZGV7bD1FbXB0eTsgdj14MDsgcj1FbXB0eTsgaD0xfTsgdj14MTsgcj1FbXB0eTsgaD0yfSwgbFxuICAgICAgICB8IDMsIHgwIDo6IHgxIDo6IHgyIDo6IGwgLT5cbiAgICAgICAgICAgIE5vZGV7bD1Ob2Rle2w9RW1wdHk7IHY9eDA7IHI9RW1wdHk7IGg9MX07IHY9eDE7XG4gICAgICAgICAgICAgICAgIHI9Tm9kZXtsPUVtcHR5OyB2PXgyOyByPUVtcHR5OyBoPTF9OyBoPTJ9LCBsXG4gICAgICAgIHwgbiwgbCAtPlxuICAgICAgICAgIGxldCBubCA9IG4gLyAyIGluXG4gICAgICAgICAgbGV0IGxlZnQsIGwgPSBzdWIgbmwgbCBpblxuICAgICAgICAgIG1hdGNoIGwgd2l0aFxuICAgICAgICAgIHwgW10gLT4gYXNzZXJ0IGZhbHNlXG4gICAgICAgICAgfCBtaWQgOjogbCAtPlxuICAgICAgICAgICAgbGV0IHJpZ2h0LCBsID0gc3ViIChuIC0gbmwgLSAxKSBsIGluXG4gICAgICAgICAgICBjcmVhdGUgbGVmdCBtaWQgcmlnaHQsIGxcbiAgICAgIGluXG4gICAgICBmc3QgKHN1YiAoTGlzdC5sZW5ndGggbCkgbClcblxuICAgIGxldCBvZl9saXN0IGwgPVxuICAgICAgbWF0Y2ggbCB3aXRoXG4gICAgICB8IFtdIC0+IGVtcHR5XG4gICAgICB8IFt4MF0gLT4gc2luZ2xldG9uIHgwXG4gICAgICB8IFt4MDsgeDFdIC0+IGFkZCB4MSAoc2luZ2xldG9uIHgwKVxuICAgICAgfCBbeDA7IHgxOyB4Ml0gLT4gYWRkIHgyIChhZGQgeDEgKHNpbmdsZXRvbiB4MCkpXG4gICAgICB8IFt4MDsgeDE7IHgyOyB4M10gLT4gYWRkIHgzIChhZGQgeDIgKGFkZCB4MSAoc2luZ2xldG9uIHgwKSkpXG4gICAgICB8IFt4MDsgeDE7IHgyOyB4MzsgeDRdIC0+IGFkZCB4NCAoYWRkIHgzIChhZGQgeDIgKGFkZCB4MSAoc2luZ2xldG9uIHgwKSkpKVxuICAgICAgfCBfIC0+IG9mX3NvcnRlZF9saXN0IChMaXN0LnNvcnRfdW5pcSBPcmQuY29tcGFyZSBsKVxuXG4gICAgbGV0IGFkZF9zZXEgaSBtID1cbiAgICAgIFNlcS5mb2xkX2xlZnQgKGZ1biBzIHggLT4gYWRkIHggcykgbSBpXG5cbiAgICBsZXQgb2Zfc2VxIGkgPSBhZGRfc2VxIGkgZW1wdHlcblxuICAgIGxldCByZWMgc2VxX29mX2VudW1fIGMgKCkgPSBtYXRjaCBjIHdpdGhcbiAgICAgIHwgRW5kIC0+IFNlcS5OaWxcbiAgICAgIHwgTW9yZSAoeCwgdCwgcmVzdCkgLT4gU2VxLkNvbnMgKHgsIHNlcV9vZl9lbnVtXyAoY29uc19lbnVtIHQgcmVzdCkpXG5cbiAgICBsZXQgdG9fc2VxIGMgPSBzZXFfb2ZfZW51bV8gKGNvbnNfZW51bSBjIEVuZClcblxuICAgIGxldCByZWMgc25vY19lbnVtIHMgZSA9XG4gICAgICBtYXRjaCBzIHdpdGhcbiAgICAgICAgRW1wdHkgLT4gZVxuICAgICAgfCBOb2Rle2w7IHY7IHJ9IC0+IHNub2NfZW51bSByIChNb3JlKHYsIGwsIGUpKVxuXG4gICAgbGV0IHJlYyByZXZfc2VxX29mX2VudW1fIGMgKCkgPSBtYXRjaCBjIHdpdGhcbiAgICAgIHwgRW5kIC0+IFNlcS5OaWxcbiAgICAgIHwgTW9yZSAoeCwgdCwgcmVzdCkgLT4gU2VxLkNvbnMgKHgsIHJldl9zZXFfb2ZfZW51bV8gKHNub2NfZW51bSB0IHJlc3QpKVxuXG4gICAgbGV0IHRvX3Jldl9zZXEgYyA9IHJldl9zZXFfb2ZfZW51bV8gKHNub2NfZW51bSBjIEVuZClcblxuICAgIGxldCB0b19zZXFfZnJvbSBsb3cgcyA9XG4gICAgICBsZXQgcmVjIGF1eCBsb3cgcyBjID0gbWF0Y2ggcyB3aXRoXG4gICAgICAgIHwgRW1wdHkgLT4gY1xuICAgICAgICB8IE5vZGUge2w7IHI7IHY7IF99IC0+XG4gICAgICAgICAgICBiZWdpbiBtYXRjaCBPcmQuY29tcGFyZSB2IGxvdyB3aXRoXG4gICAgICAgICAgICAgIHwgMCAtPiBNb3JlICh2LCByLCBjKVxuICAgICAgICAgICAgICB8IG4gd2hlbiBuPDAgLT4gYXV4IGxvdyByIGNcbiAgICAgICAgICAgICAgfCBfIC0+IGF1eCBsb3cgbCAoTW9yZSAodiwgciwgYykpXG4gICAgICAgICAgICBlbmRcbiAgICAgIGluXG4gICAgICBzZXFfb2ZfZW51bV8gKGF1eCBsb3cgcyBFbmQpXG4gIGVuZFxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG5tb2R1bGUgdHlwZSBPcmRlcmVkVHlwZSA9XG4gIHNpZ1xuICAgIHR5cGUgdFxuICAgIHZhbCBjb21wYXJlOiB0IC0+IHQgLT4gaW50XG4gIGVuZFxuXG5tb2R1bGUgdHlwZSBTID1cbiAgc2lnXG4gICAgdHlwZSBrZXlcbiAgICB0eXBlICErJ2EgdFxuICAgIHZhbCBlbXB0eTogJ2EgdFxuICAgIHZhbCBpc19lbXB0eTogJ2EgdCAtPiBib29sXG4gICAgdmFsIG1lbTogIGtleSAtPiAnYSB0IC0+IGJvb2xcbiAgICB2YWwgYWRkOiBrZXkgLT4gJ2EgLT4gJ2EgdCAtPiAnYSB0XG4gICAgdmFsIHVwZGF0ZToga2V5IC0+ICgnYSBvcHRpb24gLT4gJ2Egb3B0aW9uKSAtPiAnYSB0IC0+ICdhIHRcbiAgICB2YWwgc2luZ2xldG9uOiBrZXkgLT4gJ2EgLT4gJ2EgdFxuICAgIHZhbCByZW1vdmU6IGtleSAtPiAnYSB0IC0+ICdhIHRcbiAgICB2YWwgbWVyZ2U6XG4gICAgICAgICAgKGtleSAtPiAnYSBvcHRpb24gLT4gJ2Igb3B0aW9uIC0+ICdjIG9wdGlvbikgLT4gJ2EgdCAtPiAnYiB0IC0+ICdjIHRcbiAgICB2YWwgdW5pb246IChrZXkgLT4gJ2EgLT4gJ2EgLT4gJ2Egb3B0aW9uKSAtPiAnYSB0IC0+ICdhIHQgLT4gJ2EgdFxuICAgIHZhbCBjb21wYXJlOiAoJ2EgLT4gJ2EgLT4gaW50KSAtPiAnYSB0IC0+ICdhIHQgLT4gaW50XG4gICAgdmFsIGVxdWFsOiAoJ2EgLT4gJ2EgLT4gYm9vbCkgLT4gJ2EgdCAtPiAnYSB0IC0+IGJvb2xcbiAgICB2YWwgaXRlcjogKGtleSAtPiAnYSAtPiB1bml0KSAtPiAnYSB0IC0+IHVuaXRcbiAgICB2YWwgZm9sZDogKGtleSAtPiAnYSAtPiAnYiAtPiAnYikgLT4gJ2EgdCAtPiAnYiAtPiAnYlxuICAgIHZhbCBmb3JfYWxsOiAoa2V5IC0+ICdhIC0+IGJvb2wpIC0+ICdhIHQgLT4gYm9vbFxuICAgIHZhbCBleGlzdHM6IChrZXkgLT4gJ2EgLT4gYm9vbCkgLT4gJ2EgdCAtPiBib29sXG4gICAgdmFsIGZpbHRlcjogKGtleSAtPiAnYSAtPiBib29sKSAtPiAnYSB0IC0+ICdhIHRcbiAgICB2YWwgZmlsdGVyX21hcDogKGtleSAtPiAnYSAtPiAnYiBvcHRpb24pIC0+ICdhIHQgLT4gJ2IgdFxuICAgIHZhbCBwYXJ0aXRpb246IChrZXkgLT4gJ2EgLT4gYm9vbCkgLT4gJ2EgdCAtPiAnYSB0ICogJ2EgdFxuICAgIHZhbCBjYXJkaW5hbDogJ2EgdCAtPiBpbnRcbiAgICB2YWwgYmluZGluZ3M6ICdhIHQgLT4gKGtleSAqICdhKSBsaXN0XG4gICAgdmFsIG1pbl9iaW5kaW5nOiAnYSB0IC0+IChrZXkgKiAnYSlcbiAgICB2YWwgbWluX2JpbmRpbmdfb3B0OiAnYSB0IC0+IChrZXkgKiAnYSkgb3B0aW9uXG4gICAgdmFsIG1heF9iaW5kaW5nOiAnYSB0IC0+IChrZXkgKiAnYSlcbiAgICB2YWwgbWF4X2JpbmRpbmdfb3B0OiAnYSB0IC0+IChrZXkgKiAnYSkgb3B0aW9uXG4gICAgdmFsIGNob29zZTogJ2EgdCAtPiAoa2V5ICogJ2EpXG4gICAgdmFsIGNob29zZV9vcHQ6ICdhIHQgLT4gKGtleSAqICdhKSBvcHRpb25cbiAgICB2YWwgc3BsaXQ6IGtleSAtPiAnYSB0IC0+ICdhIHQgKiAnYSBvcHRpb24gKiAnYSB0XG4gICAgdmFsIGZpbmQ6IGtleSAtPiAnYSB0IC0+ICdhXG4gICAgdmFsIGZpbmRfb3B0OiBrZXkgLT4gJ2EgdCAtPiAnYSBvcHRpb25cbiAgICB2YWwgZmluZF9maXJzdDogKGtleSAtPiBib29sKSAtPiAnYSB0IC0+IGtleSAqICdhXG4gICAgdmFsIGZpbmRfZmlyc3Rfb3B0OiAoa2V5IC0+IGJvb2wpIC0+ICdhIHQgLT4gKGtleSAqICdhKSBvcHRpb25cbiAgICB2YWwgZmluZF9sYXN0OiAoa2V5IC0+IGJvb2wpIC0+ICdhIHQgLT4ga2V5ICogJ2FcbiAgICB2YWwgZmluZF9sYXN0X29wdDogKGtleSAtPiBib29sKSAtPiAnYSB0IC0+IChrZXkgKiAnYSkgb3B0aW9uXG4gICAgdmFsIG1hcDogKCdhIC0+ICdiKSAtPiAnYSB0IC0+ICdiIHRcbiAgICB2YWwgbWFwaTogKGtleSAtPiAnYSAtPiAnYikgLT4gJ2EgdCAtPiAnYiB0XG4gICAgdmFsIHRvX3NlcSA6ICdhIHQgLT4gKGtleSAqICdhKSBTZXEudFxuICAgIHZhbCB0b19yZXZfc2VxIDogJ2EgdCAtPiAoa2V5ICogJ2EpIFNlcS50XG4gICAgdmFsIHRvX3NlcV9mcm9tIDoga2V5IC0+ICdhIHQgLT4gKGtleSAqICdhKSBTZXEudFxuICAgIHZhbCBhZGRfc2VxIDogKGtleSAqICdhKSBTZXEudCAtPiAnYSB0IC0+ICdhIHRcbiAgICB2YWwgb2Zfc2VxIDogKGtleSAqICdhKSBTZXEudCAtPiAnYSB0XG4gIGVuZFxuXG5tb2R1bGUgTWFrZShPcmQ6IE9yZGVyZWRUeXBlKSA9IHN0cnVjdFxuXG4gICAgdHlwZSBrZXkgPSBPcmQudFxuXG4gICAgdHlwZSAnYSB0ID1cbiAgICAgICAgRW1wdHlcbiAgICAgIHwgTm9kZSBvZiB7bDonYSB0OyB2OmtleTsgZDonYTsgcjonYSB0OyBoOmludH1cblxuICAgIGxldCBoZWlnaHQgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiAwXG4gICAgICB8IE5vZGUge2h9IC0+IGhcblxuICAgIGxldCBjcmVhdGUgbCB4IGQgciA9XG4gICAgICBsZXQgaGwgPSBoZWlnaHQgbCBhbmQgaHIgPSBoZWlnaHQgciBpblxuICAgICAgTm9kZXtsOyB2PXg7IGQ7IHI7IGg9KGlmIGhsID49IGhyIHRoZW4gaGwgKyAxIGVsc2UgaHIgKyAxKX1cblxuICAgIGxldCBzaW5nbGV0b24geCBkID0gTm9kZXtsPUVtcHR5OyB2PXg7IGQ7IHI9RW1wdHk7IGg9MX1cblxuICAgIGxldCBiYWwgbCB4IGQgciA9XG4gICAgICBsZXQgaGwgPSBtYXRjaCBsIHdpdGggRW1wdHkgLT4gMCB8IE5vZGUge2h9IC0+IGggaW5cbiAgICAgIGxldCBociA9IG1hdGNoIHIgd2l0aCBFbXB0eSAtPiAwIHwgTm9kZSB7aH0gLT4gaCBpblxuICAgICAgaWYgaGwgPiBociArIDIgdGhlbiBiZWdpblxuICAgICAgICBtYXRjaCBsIHdpdGhcbiAgICAgICAgICBFbXB0eSAtPiBpbnZhbGlkX2FyZyBcIk1hcC5iYWxcIlxuICAgICAgICB8IE5vZGV7bD1sbDsgdj1sdjsgZD1sZDsgcj1scn0gLT5cbiAgICAgICAgICAgIGlmIGhlaWdodCBsbCA+PSBoZWlnaHQgbHIgdGhlblxuICAgICAgICAgICAgICBjcmVhdGUgbGwgbHYgbGQgKGNyZWF0ZSBsciB4IGQgcilcbiAgICAgICAgICAgIGVsc2UgYmVnaW5cbiAgICAgICAgICAgICAgbWF0Y2ggbHIgd2l0aFxuICAgICAgICAgICAgICAgIEVtcHR5IC0+IGludmFsaWRfYXJnIFwiTWFwLmJhbFwiXG4gICAgICAgICAgICAgIHwgTm9kZXtsPWxybDsgdj1scnY7IGQ9bHJkOyByPWxycn0tPlxuICAgICAgICAgICAgICAgICAgY3JlYXRlIChjcmVhdGUgbGwgbHYgbGQgbHJsKSBscnYgbHJkIChjcmVhdGUgbHJyIHggZCByKVxuICAgICAgICAgICAgZW5kXG4gICAgICBlbmQgZWxzZSBpZiBociA+IGhsICsgMiB0aGVuIGJlZ2luXG4gICAgICAgIG1hdGNoIHIgd2l0aFxuICAgICAgICAgIEVtcHR5IC0+IGludmFsaWRfYXJnIFwiTWFwLmJhbFwiXG4gICAgICAgIHwgTm9kZXtsPXJsOyB2PXJ2OyBkPXJkOyByPXJyfSAtPlxuICAgICAgICAgICAgaWYgaGVpZ2h0IHJyID49IGhlaWdodCBybCB0aGVuXG4gICAgICAgICAgICAgIGNyZWF0ZSAoY3JlYXRlIGwgeCBkIHJsKSBydiByZCByclxuICAgICAgICAgICAgZWxzZSBiZWdpblxuICAgICAgICAgICAgICBtYXRjaCBybCB3aXRoXG4gICAgICAgICAgICAgICAgRW1wdHkgLT4gaW52YWxpZF9hcmcgXCJNYXAuYmFsXCJcbiAgICAgICAgICAgICAgfCBOb2Rle2w9cmxsOyB2PXJsdjsgZD1ybGQ7IHI9cmxyfSAtPlxuICAgICAgICAgICAgICAgICAgY3JlYXRlIChjcmVhdGUgbCB4IGQgcmxsKSBybHYgcmxkIChjcmVhdGUgcmxyIHJ2IHJkIHJyKVxuICAgICAgICAgICAgZW5kXG4gICAgICBlbmQgZWxzZVxuICAgICAgICBOb2Rle2w7IHY9eDsgZDsgcjsgaD0oaWYgaGwgPj0gaHIgdGhlbiBobCArIDEgZWxzZSBociArIDEpfVxuXG4gICAgbGV0IGVtcHR5ID0gRW1wdHlcblxuICAgIGxldCBpc19lbXB0eSA9IGZ1bmN0aW9uIEVtcHR5IC0+IHRydWUgfCBfIC0+IGZhbHNlXG5cbiAgICBsZXQgcmVjIGFkZCB4IGRhdGEgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIE5vZGV7bD1FbXB0eTsgdj14OyBkPWRhdGE7IHI9RW1wdHk7IGg9MX1cbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcjsgaH0gYXMgbSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgeCB2IGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlblxuICAgICAgICAgICAgaWYgZCA9PSBkYXRhIHRoZW4gbSBlbHNlIE5vZGV7bDsgdj14OyBkPWRhdGE7IHI7IGh9XG4gICAgICAgICAgZWxzZSBpZiBjIDwgMCB0aGVuXG4gICAgICAgICAgICBsZXQgbGwgPSBhZGQgeCBkYXRhIGwgaW5cbiAgICAgICAgICAgIGlmIGwgPT0gbGwgdGhlbiBtIGVsc2UgYmFsIGxsIHYgZCByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgbGV0IHJyID0gYWRkIHggZGF0YSByIGluXG4gICAgICAgICAgICBpZiByID09IHJyIHRoZW4gbSBlbHNlIGJhbCBsIHYgZCByclxuXG4gICAgbGV0IHJlYyBmaW5kIHggPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgeCB2IGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlbiBkXG4gICAgICAgICAgZWxzZSBmaW5kIHggKGlmIGMgPCAwIHRoZW4gbCBlbHNlIHIpXG5cbiAgICBsZXQgcmVjIGZpbmRfZmlyc3RfYXV4IHYwIGQwIGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgICh2MCwgZDApXG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfZmlyc3RfYXV4IHYgZCBmIGxcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2ZpcnN0X2F1eCB2MCBkMCBmIHJcblxuICAgIGxldCByZWMgZmluZF9maXJzdCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICByYWlzZSBOb3RfZm91bmRcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9maXJzdF9hdXggdiBkIGYgbFxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfZmlyc3QgZiByXG5cbiAgICBsZXQgcmVjIGZpbmRfZmlyc3Rfb3B0X2F1eCB2MCBkMCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICBTb21lICh2MCwgZDApXG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfZmlyc3Rfb3B0X2F1eCB2IGQgZiBsXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9maXJzdF9vcHRfYXV4IHYwIGQwIGYgclxuXG4gICAgbGV0IHJlYyBmaW5kX2ZpcnN0X29wdCBmID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICBOb25lXG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+XG4gICAgICAgICAgaWYgZiB2IHRoZW5cbiAgICAgICAgICAgIGZpbmRfZmlyc3Rfb3B0X2F1eCB2IGQgZiBsXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9maXJzdF9vcHQgZiByXG5cbiAgICBsZXQgcmVjIGZpbmRfbGFzdF9hdXggdjAgZDAgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgKHYwLCBkMClcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9sYXN0X2F1eCB2IGQgZiByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgZmluZF9sYXN0X2F1eCB2MCBkMCBmIGxcblxuICAgIGxldCByZWMgZmluZF9sYXN0IGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPlxuICAgICAgICAgIGlmIGYgdiB0aGVuXG4gICAgICAgICAgICBmaW5kX2xhc3RfYXV4IHYgZCBmIHJcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBmaW5kX2xhc3QgZiBsXG5cbiAgICBsZXQgcmVjIGZpbmRfbGFzdF9vcHRfYXV4IHYwIGQwIGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIFNvbWUgKHYwLCBkMClcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9sYXN0X29wdF9hdXggdiBkIGYgclxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfbGFzdF9vcHRfYXV4IHYwIGQwIGYgbFxuXG4gICAgbGV0IHJlYyBmaW5kX2xhc3Rfb3B0IGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIE5vbmVcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgICBpZiBmIHYgdGhlblxuICAgICAgICAgICAgZmluZF9sYXN0X29wdF9hdXggdiBkIGYgclxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZpbmRfbGFzdF9vcHQgZiBsXG5cbiAgICBsZXQgcmVjIGZpbmRfb3B0IHggPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIE5vbmVcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHggdiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gU29tZSBkXG4gICAgICAgICAgZWxzZSBmaW5kX29wdCB4IChpZiBjIDwgMCB0aGVuIGwgZWxzZSByKVxuXG4gICAgbGV0IHJlYyBtZW0geCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgZmFsc2VcbiAgICAgIHwgTm9kZSB7bDsgdjsgcn0gLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHggdiBpblxuICAgICAgICAgIGMgPSAwIHx8IG1lbSB4IChpZiBjIDwgMCB0aGVuIGwgZWxzZSByKVxuXG4gICAgbGV0IHJlYyBtaW5fYmluZGluZyA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBOb2RlIHtsPUVtcHR5OyB2OyBkfSAtPiAodiwgZClcbiAgICAgIHwgTm9kZSB7bH0gLT4gbWluX2JpbmRpbmcgbFxuXG4gICAgbGV0IHJlYyBtaW5fYmluZGluZ19vcHQgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBOb25lXG4gICAgICB8IE5vZGUge2w9RW1wdHk7IHY7IGR9IC0+IFNvbWUgKHYsIGQpXG4gICAgICB8IE5vZGUge2x9LT4gbWluX2JpbmRpbmdfb3B0IGxcblxuICAgIGxldCByZWMgbWF4X2JpbmRpbmcgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgIHwgTm9kZSB7djsgZDsgcj1FbXB0eX0gLT4gKHYsIGQpXG4gICAgICB8IE5vZGUge3J9IC0+IG1heF9iaW5kaW5nIHJcblxuICAgIGxldCByZWMgbWF4X2JpbmRpbmdfb3B0ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gTm9uZVxuICAgICAgfCBOb2RlIHt2OyBkOyByPUVtcHR5fSAtPiBTb21lICh2LCBkKVxuICAgICAgfCBOb2RlIHtyfSAtPiBtYXhfYmluZGluZ19vcHQgclxuXG4gICAgbGV0IHJlYyByZW1vdmVfbWluX2JpbmRpbmcgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBpbnZhbGlkX2FyZyBcIk1hcC5yZW1vdmVfbWluX2VsdFwiXG4gICAgICB8IE5vZGUge2w9RW1wdHk7IHJ9IC0+IHJcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT4gYmFsIChyZW1vdmVfbWluX2JpbmRpbmcgbCkgdiBkIHJcblxuICAgIGxldCBtZXJnZSB0MSB0MiA9XG4gICAgICBtYXRjaCAodDEsIHQyKSB3aXRoXG4gICAgICAgIChFbXB0eSwgdCkgLT4gdFxuICAgICAgfCAodCwgRW1wdHkpIC0+IHRcbiAgICAgIHwgKF8sIF8pIC0+XG4gICAgICAgICAgbGV0ICh4LCBkKSA9IG1pbl9iaW5kaW5nIHQyIGluXG4gICAgICAgICAgYmFsIHQxIHggZCAocmVtb3ZlX21pbl9iaW5kaW5nIHQyKVxuXG4gICAgbGV0IHJlYyByZW1vdmUgeCA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgRW1wdHlcbiAgICAgIHwgKE5vZGUge2w7IHY7IGQ7IHJ9IGFzIG0pIC0+XG4gICAgICAgICAgbGV0IGMgPSBPcmQuY29tcGFyZSB4IHYgaW5cbiAgICAgICAgICBpZiBjID0gMCB0aGVuIG1lcmdlIGwgclxuICAgICAgICAgIGVsc2UgaWYgYyA8IDAgdGhlblxuICAgICAgICAgICAgbGV0IGxsID0gcmVtb3ZlIHggbCBpbiBpZiBsID09IGxsIHRoZW4gbSBlbHNlIGJhbCBsbCB2IGQgclxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGxldCByciA9IHJlbW92ZSB4IHIgaW4gaWYgciA9PSByciB0aGVuIG0gZWxzZSBiYWwgbCB2IGQgcnJcblxuICAgIGxldCByZWMgdXBkYXRlIHggZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgYmVnaW4gbWF0Y2ggZiBOb25lIHdpdGhcbiAgICAgICAgICB8IE5vbmUgLT4gRW1wdHlcbiAgICAgICAgICB8IFNvbWUgZGF0YSAtPiBOb2Rle2w9RW1wdHk7IHY9eDsgZD1kYXRhOyByPUVtcHR5OyBoPTF9XG4gICAgICAgICAgZW5kXG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHI7IGh9IGFzIG0gLT5cbiAgICAgICAgICBsZXQgYyA9IE9yZC5jb21wYXJlIHggdiBpblxuICAgICAgICAgIGlmIGMgPSAwIHRoZW4gYmVnaW5cbiAgICAgICAgICAgIG1hdGNoIGYgKFNvbWUgZCkgd2l0aFxuICAgICAgICAgICAgfCBOb25lIC0+IG1lcmdlIGwgclxuICAgICAgICAgICAgfCBTb21lIGRhdGEgLT5cbiAgICAgICAgICAgICAgICBpZiBkID09IGRhdGEgdGhlbiBtIGVsc2UgTm9kZXtsOyB2PXg7IGQ9ZGF0YTsgcjsgaH1cbiAgICAgICAgICBlbmQgZWxzZSBpZiBjIDwgMCB0aGVuXG4gICAgICAgICAgICBsZXQgbGwgPSB1cGRhdGUgeCBmIGwgaW5cbiAgICAgICAgICAgIGlmIGwgPT0gbGwgdGhlbiBtIGVsc2UgYmFsIGxsIHYgZCByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgbGV0IHJyID0gdXBkYXRlIHggZiByIGluXG4gICAgICAgICAgICBpZiByID09IHJyIHRoZW4gbSBlbHNlIGJhbCBsIHYgZCByclxuXG4gICAgbGV0IHJlYyBpdGVyIGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiAoKVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPlxuICAgICAgICAgIGl0ZXIgZiBsOyBmIHYgZDsgaXRlciBmIHJcblxuICAgIGxldCByZWMgbWFwIGYgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgIEVtcHR5XG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHI7IGh9IC0+XG4gICAgICAgICAgbGV0IGwnID0gbWFwIGYgbCBpblxuICAgICAgICAgIGxldCBkJyA9IGYgZCBpblxuICAgICAgICAgIGxldCByJyA9IG1hcCBmIHIgaW5cbiAgICAgICAgICBOb2Rle2w9bCc7IHY7IGQ9ZCc7IHI9cic7IGh9XG5cbiAgICBsZXQgcmVjIG1hcGkgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+XG4gICAgICAgICAgRW1wdHlcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcjsgaH0gLT5cbiAgICAgICAgICBsZXQgbCcgPSBtYXBpIGYgbCBpblxuICAgICAgICAgIGxldCBkJyA9IGYgdiBkIGluXG4gICAgICAgICAgbGV0IHInID0gbWFwaSBmIHIgaW5cbiAgICAgICAgICBOb2Rle2w9bCc7IHY7IGQ9ZCc7IHI9cic7IGh9XG5cbiAgICBsZXQgcmVjIGZvbGQgZiBtIGFjY3UgPVxuICAgICAgbWF0Y2ggbSB3aXRoXG4gICAgICAgIEVtcHR5IC0+IGFjY3VcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT5cbiAgICAgICAgICBmb2xkIGYgciAoZiB2IGQgKGZvbGQgZiBsIGFjY3UpKVxuXG4gICAgbGV0IHJlYyBmb3JfYWxsIHAgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiB0cnVlXG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+IHAgdiBkICYmIGZvcl9hbGwgcCBsICYmIGZvcl9hbGwgcCByXG5cbiAgICBsZXQgcmVjIGV4aXN0cyBwID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gZmFsc2VcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gLT4gcCB2IGQgfHwgZXhpc3RzIHAgbCB8fCBleGlzdHMgcCByXG5cbiAgICAoKiBCZXdhcmU6IHRob3NlIHR3byBmdW5jdGlvbnMgYXNzdW1lIHRoYXQgdGhlIGFkZGVkIGsgaXMgKnN0cmljdGx5KlxuICAgICAgIHNtYWxsZXIgKG9yIGJpZ2dlcikgdGhhbiBhbGwgdGhlIHByZXNlbnQga2V5cyBpbiB0aGUgdHJlZTsgaXRcbiAgICAgICBkb2VzIG5vdCB0ZXN0IGZvciBlcXVhbGl0eSB3aXRoIHRoZSBjdXJyZW50IG1pbiAob3IgbWF4KSBrZXkuXG5cbiAgICAgICBJbmRlZWQsIHRoZXkgYXJlIG9ubHkgdXNlZCBkdXJpbmcgdGhlIFwiam9pblwiIG9wZXJhdGlvbiB3aGljaFxuICAgICAgIHJlc3BlY3RzIHRoaXMgcHJlY29uZGl0aW9uLlxuICAgICopXG5cbiAgICBsZXQgcmVjIGFkZF9taW5fYmluZGluZyBrIHggPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPiBzaW5nbGV0b24gayB4XG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+XG4gICAgICAgIGJhbCAoYWRkX21pbl9iaW5kaW5nIGsgeCBsKSB2IGQgclxuXG4gICAgbGV0IHJlYyBhZGRfbWF4X2JpbmRpbmcgayB4ID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT4gc2luZ2xldG9uIGsgeFxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPlxuICAgICAgICBiYWwgbCB2IGQgKGFkZF9tYXhfYmluZGluZyBrIHggcilcblxuICAgICgqIFNhbWUgYXMgY3JlYXRlIGFuZCBiYWwsIGJ1dCBubyBhc3N1bXB0aW9ucyBhcmUgbWFkZSBvbiB0aGVcbiAgICAgICByZWxhdGl2ZSBoZWlnaHRzIG9mIGwgYW5kIHIuICopXG5cbiAgICBsZXQgcmVjIGpvaW4gbCB2IGQgciA9XG4gICAgICBtYXRjaCAobCwgcikgd2l0aFxuICAgICAgICAoRW1wdHksIF8pIC0+IGFkZF9taW5fYmluZGluZyB2IGQgclxuICAgICAgfCAoXywgRW1wdHkpIC0+IGFkZF9tYXhfYmluZGluZyB2IGQgbFxuICAgICAgfCAoTm9kZXtsPWxsOyB2PWx2OyBkPWxkOyByPWxyOyBoPWxofSxcbiAgICAgICAgIE5vZGV7bD1ybDsgdj1ydjsgZD1yZDsgcj1ycjsgaD1yaH0pIC0+XG4gICAgICAgICAgaWYgbGggPiByaCArIDIgdGhlbiBiYWwgbGwgbHYgbGQgKGpvaW4gbHIgdiBkIHIpIGVsc2VcbiAgICAgICAgICBpZiByaCA+IGxoICsgMiB0aGVuIGJhbCAoam9pbiBsIHYgZCBybCkgcnYgcmQgcnIgZWxzZVxuICAgICAgICAgIGNyZWF0ZSBsIHYgZCByXG5cbiAgICAoKiBNZXJnZSB0d28gdHJlZXMgbCBhbmQgciBpbnRvIG9uZS5cbiAgICAgICBBbGwgZWxlbWVudHMgb2YgbCBtdXN0IHByZWNlZGUgdGhlIGVsZW1lbnRzIG9mIHIuXG4gICAgICAgTm8gYXNzdW1wdGlvbiBvbiB0aGUgaGVpZ2h0cyBvZiBsIGFuZCByLiAqKVxuXG4gICAgbGV0IGNvbmNhdCB0MSB0MiA9XG4gICAgICBtYXRjaCAodDEsIHQyKSB3aXRoXG4gICAgICAgIChFbXB0eSwgdCkgLT4gdFxuICAgICAgfCAodCwgRW1wdHkpIC0+IHRcbiAgICAgIHwgKF8sIF8pIC0+XG4gICAgICAgICAgbGV0ICh4LCBkKSA9IG1pbl9iaW5kaW5nIHQyIGluXG4gICAgICAgICAgam9pbiB0MSB4IGQgKHJlbW92ZV9taW5fYmluZGluZyB0MilcblxuICAgIGxldCBjb25jYXRfb3Jfam9pbiB0MSB2IGQgdDIgPVxuICAgICAgbWF0Y2ggZCB3aXRoXG4gICAgICB8IFNvbWUgZCAtPiBqb2luIHQxIHYgZCB0MlxuICAgICAgfCBOb25lIC0+IGNvbmNhdCB0MSB0MlxuXG4gICAgbGV0IHJlYyBzcGxpdCB4ID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICAoRW1wdHksIE5vbmUsIEVtcHR5KVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPlxuICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgeCB2IGluXG4gICAgICAgICAgaWYgYyA9IDAgdGhlbiAobCwgU29tZSBkLCByKVxuICAgICAgICAgIGVsc2UgaWYgYyA8IDAgdGhlblxuICAgICAgICAgICAgbGV0IChsbCwgcHJlcywgcmwpID0gc3BsaXQgeCBsIGluIChsbCwgcHJlcywgam9pbiBybCB2IGQgcilcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBsZXQgKGxyLCBwcmVzLCBycikgPSBzcGxpdCB4IHIgaW4gKGpvaW4gbCB2IGQgbHIsIHByZXMsIHJyKVxuXG4gICAgbGV0IHJlYyBtZXJnZSBmIHMxIHMyID1cbiAgICAgIG1hdGNoIChzMSwgczIpIHdpdGhcbiAgICAgICAgKEVtcHR5LCBFbXB0eSkgLT4gRW1wdHlcbiAgICAgIHwgKE5vZGUge2w9bDE7IHY9djE7IGQ9ZDE7IHI9cjE7IGg9aDF9LCBfKSB3aGVuIGgxID49IGhlaWdodCBzMiAtPlxuICAgICAgICAgIGxldCAobDIsIGQyLCByMikgPSBzcGxpdCB2MSBzMiBpblxuICAgICAgICAgIGNvbmNhdF9vcl9qb2luIChtZXJnZSBmIGwxIGwyKSB2MSAoZiB2MSAoU29tZSBkMSkgZDIpIChtZXJnZSBmIHIxIHIyKVxuICAgICAgfCAoXywgTm9kZSB7bD1sMjsgdj12MjsgZD1kMjsgcj1yMn0pIC0+XG4gICAgICAgICAgbGV0IChsMSwgZDEsIHIxKSA9IHNwbGl0IHYyIHMxIGluXG4gICAgICAgICAgY29uY2F0X29yX2pvaW4gKG1lcmdlIGYgbDEgbDIpIHYyIChmIHYyIGQxIChTb21lIGQyKSkgKG1lcmdlIGYgcjEgcjIpXG4gICAgICB8IF8gLT5cbiAgICAgICAgICBhc3NlcnQgZmFsc2VcblxuICAgIGxldCByZWMgdW5pb24gZiBzMSBzMiA9XG4gICAgICBtYXRjaCAoczEsIHMyKSB3aXRoXG4gICAgICB8IChFbXB0eSwgcykgfCAocywgRW1wdHkpIC0+IHNcbiAgICAgIHwgKE5vZGUge2w9bDE7IHY9djE7IGQ9ZDE7IHI9cjE7IGg9aDF9LFxuICAgICAgICAgTm9kZSB7bD1sMjsgdj12MjsgZD1kMjsgcj1yMjsgaD1oMn0pIC0+XG4gICAgICAgICAgaWYgaDEgPj0gaDIgdGhlblxuICAgICAgICAgICAgbGV0IChsMiwgZDIsIHIyKSA9IHNwbGl0IHYxIHMyIGluXG4gICAgICAgICAgICBsZXQgbCA9IHVuaW9uIGYgbDEgbDIgYW5kIHIgPSB1bmlvbiBmIHIxIHIyIGluXG4gICAgICAgICAgICBtYXRjaCBkMiB3aXRoXG4gICAgICAgICAgICB8IE5vbmUgLT4gam9pbiBsIHYxIGQxIHJcbiAgICAgICAgICAgIHwgU29tZSBkMiAtPiBjb25jYXRfb3Jfam9pbiBsIHYxIChmIHYxIGQxIGQyKSByXG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgbGV0IChsMSwgZDEsIHIxKSA9IHNwbGl0IHYyIHMxIGluXG4gICAgICAgICAgICBsZXQgbCA9IHVuaW9uIGYgbDEgbDIgYW5kIHIgPSB1bmlvbiBmIHIxIHIyIGluXG4gICAgICAgICAgICBtYXRjaCBkMSB3aXRoXG4gICAgICAgICAgICB8IE5vbmUgLT4gam9pbiBsIHYyIGQyIHJcbiAgICAgICAgICAgIHwgU29tZSBkMSAtPiBjb25jYXRfb3Jfam9pbiBsIHYyIChmIHYyIGQxIGQyKSByXG5cbiAgICBsZXQgcmVjIGZpbHRlciBwID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gRW1wdHlcbiAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcn0gYXMgbSAtPlxuICAgICAgICAgICgqIGNhbGwgW3BdIGluIHRoZSBleHBlY3RlZCBsZWZ0LXRvLXJpZ2h0IG9yZGVyICopXG4gICAgICAgICAgbGV0IGwnID0gZmlsdGVyIHAgbCBpblxuICAgICAgICAgIGxldCBwdmQgPSBwIHYgZCBpblxuICAgICAgICAgIGxldCByJyA9IGZpbHRlciBwIHIgaW5cbiAgICAgICAgICBpZiBwdmQgdGhlbiBpZiBsPT1sJyAmJiByPT1yJyB0aGVuIG0gZWxzZSBqb2luIGwnIHYgZCByJ1xuICAgICAgICAgIGVsc2UgY29uY2F0IGwnIHInXG5cbiAgICBsZXQgcmVjIGZpbHRlcl9tYXAgZiA9IGZ1bmN0aW9uXG4gICAgICAgIEVtcHR5IC0+IEVtcHR5XG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+XG4gICAgICAgICAgKCogY2FsbCBbZl0gaW4gdGhlIGV4cGVjdGVkIGxlZnQtdG8tcmlnaHQgb3JkZXIgKilcbiAgICAgICAgICBsZXQgbCcgPSBmaWx0ZXJfbWFwIGYgbCBpblxuICAgICAgICAgIGxldCBmdmQgPSBmIHYgZCBpblxuICAgICAgICAgIGxldCByJyA9IGZpbHRlcl9tYXAgZiByIGluXG4gICAgICAgICAgYmVnaW4gbWF0Y2ggZnZkIHdpdGhcbiAgICAgICAgICAgIHwgU29tZSBkJyAtPiBqb2luIGwnIHYgZCcgcidcbiAgICAgICAgICAgIHwgTm9uZSAtPiBjb25jYXQgbCcgcidcbiAgICAgICAgICBlbmRcblxuICAgIGxldCByZWMgcGFydGl0aW9uIHAgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiAoRW1wdHksIEVtcHR5KVxuICAgICAgfCBOb2RlIHtsOyB2OyBkOyByfSAtPlxuICAgICAgICAgICgqIGNhbGwgW3BdIGluIHRoZSBleHBlY3RlZCBsZWZ0LXRvLXJpZ2h0IG9yZGVyICopXG4gICAgICAgICAgbGV0IChsdCwgbGYpID0gcGFydGl0aW9uIHAgbCBpblxuICAgICAgICAgIGxldCBwdmQgPSBwIHYgZCBpblxuICAgICAgICAgIGxldCAocnQsIHJmKSA9IHBhcnRpdGlvbiBwIHIgaW5cbiAgICAgICAgICBpZiBwdmRcbiAgICAgICAgICB0aGVuIChqb2luIGx0IHYgZCBydCwgY29uY2F0IGxmIHJmKVxuICAgICAgICAgIGVsc2UgKGNvbmNhdCBsdCBydCwgam9pbiBsZiB2IGQgcmYpXG5cbiAgICB0eXBlICdhIGVudW1lcmF0aW9uID0gRW5kIHwgTW9yZSBvZiBrZXkgKiAnYSAqICdhIHQgKiAnYSBlbnVtZXJhdGlvblxuXG4gICAgbGV0IHJlYyBjb25zX2VudW0gbSBlID1cbiAgICAgIG1hdGNoIG0gd2l0aFxuICAgICAgICBFbXB0eSAtPiBlXG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+IGNvbnNfZW51bSBsIChNb3JlKHYsIGQsIHIsIGUpKVxuXG4gICAgbGV0IGNvbXBhcmUgY21wIG0xIG0yID1cbiAgICAgIGxldCByZWMgY29tcGFyZV9hdXggZTEgZTIgPVxuICAgICAgICAgIG1hdGNoIChlMSwgZTIpIHdpdGhcbiAgICAgICAgICAoRW5kLCBFbmQpIC0+IDBcbiAgICAgICAgfCAoRW5kLCBfKSAgLT4gLTFcbiAgICAgICAgfCAoXywgRW5kKSAtPiAxXG4gICAgICAgIHwgKE1vcmUodjEsIGQxLCByMSwgZTEpLCBNb3JlKHYyLCBkMiwgcjIsIGUyKSkgLT5cbiAgICAgICAgICAgIGxldCBjID0gT3JkLmNvbXBhcmUgdjEgdjIgaW5cbiAgICAgICAgICAgIGlmIGMgPD4gMCB0aGVuIGMgZWxzZVxuICAgICAgICAgICAgbGV0IGMgPSBjbXAgZDEgZDIgaW5cbiAgICAgICAgICAgIGlmIGMgPD4gMCB0aGVuIGMgZWxzZVxuICAgICAgICAgICAgY29tcGFyZV9hdXggKGNvbnNfZW51bSByMSBlMSkgKGNvbnNfZW51bSByMiBlMilcbiAgICAgIGluIGNvbXBhcmVfYXV4IChjb25zX2VudW0gbTEgRW5kKSAoY29uc19lbnVtIG0yIEVuZClcblxuICAgIGxldCBlcXVhbCBjbXAgbTEgbTIgPVxuICAgICAgbGV0IHJlYyBlcXVhbF9hdXggZTEgZTIgPVxuICAgICAgICAgIG1hdGNoIChlMSwgZTIpIHdpdGhcbiAgICAgICAgICAoRW5kLCBFbmQpIC0+IHRydWVcbiAgICAgICAgfCAoRW5kLCBfKSAgLT4gZmFsc2VcbiAgICAgICAgfCAoXywgRW5kKSAtPiBmYWxzZVxuICAgICAgICB8IChNb3JlKHYxLCBkMSwgcjEsIGUxKSwgTW9yZSh2MiwgZDIsIHIyLCBlMikpIC0+XG4gICAgICAgICAgICBPcmQuY29tcGFyZSB2MSB2MiA9IDAgJiYgY21wIGQxIGQyICYmXG4gICAgICAgICAgICBlcXVhbF9hdXggKGNvbnNfZW51bSByMSBlMSkgKGNvbnNfZW51bSByMiBlMilcbiAgICAgIGluIGVxdWFsX2F1eCAoY29uc19lbnVtIG0xIEVuZCkgKGNvbnNfZW51bSBtMiBFbmQpXG5cbiAgICBsZXQgcmVjIGNhcmRpbmFsID0gZnVuY3Rpb25cbiAgICAgICAgRW1wdHkgLT4gMFxuICAgICAgfCBOb2RlIHtsOyByfSAtPiBjYXJkaW5hbCBsICsgMSArIGNhcmRpbmFsIHJcblxuICAgIGxldCByZWMgYmluZGluZ3NfYXV4IGFjY3UgPSBmdW5jdGlvblxuICAgICAgICBFbXB0eSAtPiBhY2N1XG4gICAgICB8IE5vZGUge2w7IHY7IGQ7IHJ9IC0+IGJpbmRpbmdzX2F1eCAoKHYsIGQpIDo6IGJpbmRpbmdzX2F1eCBhY2N1IHIpIGxcblxuICAgIGxldCBiaW5kaW5ncyBzID1cbiAgICAgIGJpbmRpbmdzX2F1eCBbXSBzXG5cbiAgICBsZXQgY2hvb3NlID0gbWluX2JpbmRpbmdcblxuICAgIGxldCBjaG9vc2Vfb3B0ID0gbWluX2JpbmRpbmdfb3B0XG5cbiAgICBsZXQgYWRkX3NlcSBpIG0gPVxuICAgICAgU2VxLmZvbGRfbGVmdCAoZnVuIG0gKGssdikgLT4gYWRkIGsgdiBtKSBtIGlcblxuICAgIGxldCBvZl9zZXEgaSA9IGFkZF9zZXEgaSBlbXB0eVxuXG4gICAgbGV0IHJlYyBzZXFfb2ZfZW51bV8gYyAoKSA9IG1hdGNoIGMgd2l0aFxuICAgICAgfCBFbmQgLT4gU2VxLk5pbFxuICAgICAgfCBNb3JlIChrLHYsdCxyZXN0KSAtPiBTZXEuQ29ucyAoKGssdiksIHNlcV9vZl9lbnVtXyAoY29uc19lbnVtIHQgcmVzdCkpXG5cbiAgICBsZXQgdG9fc2VxIG0gPVxuICAgICAgc2VxX29mX2VudW1fIChjb25zX2VudW0gbSBFbmQpXG5cbiAgICBsZXQgcmVjIHNub2NfZW51bSBzIGUgPVxuICAgICAgbWF0Y2ggcyB3aXRoXG4gICAgICAgIEVtcHR5IC0+IGVcbiAgICAgIHwgTm9kZXtsOyB2OyBkOyByfSAtPiBzbm9jX2VudW0gciAoTW9yZSh2LCBkLCBsLCBlKSlcblxuICAgIGxldCByZWMgcmV2X3NlcV9vZl9lbnVtXyBjICgpID0gbWF0Y2ggYyB3aXRoXG4gICAgICB8IEVuZCAtPiBTZXEuTmlsXG4gICAgICB8IE1vcmUgKGssdix0LHJlc3QpIC0+XG4gICAgICAgICAgU2VxLkNvbnMgKChrLHYpLCByZXZfc2VxX29mX2VudW1fIChzbm9jX2VudW0gdCByZXN0KSlcblxuICAgIGxldCB0b19yZXZfc2VxIGMgPVxuICAgICAgcmV2X3NlcV9vZl9lbnVtXyAoc25vY19lbnVtIGMgRW5kKVxuXG4gICAgbGV0IHRvX3NlcV9mcm9tIGxvdyBtID1cbiAgICAgIGxldCByZWMgYXV4IGxvdyBtIGMgPSBtYXRjaCBtIHdpdGhcbiAgICAgICAgfCBFbXB0eSAtPiBjXG4gICAgICAgIHwgTm9kZSB7bDsgdjsgZDsgcjsgX30gLT5cbiAgICAgICAgICAgIGJlZ2luIG1hdGNoIE9yZC5jb21wYXJlIHYgbG93IHdpdGhcbiAgICAgICAgICAgICAgfCAwIC0+IE1vcmUgKHYsIGQsIHIsIGMpXG4gICAgICAgICAgICAgIHwgbiB3aGVuIG48MCAtPiBhdXggbG93IHIgY1xuICAgICAgICAgICAgICB8IF8gLT4gYXV4IGxvdyBsIChNb3JlICh2LCBkLCByLCBjKSlcbiAgICAgICAgICAgIGVuZFxuICAgICAgaW5cbiAgICAgIHNlcV9vZl9lbnVtXyAoYXV4IGxvdyBtIEVuZClcbmVuZFxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG50eXBlICdhIHQgPSB7IG11dGFibGUgYyA6ICdhIGxpc3Q7IG11dGFibGUgbGVuIDogaW50OyB9XG5cbmV4Y2VwdGlvbiBFbXB0eVxuXG5sZXQgY3JlYXRlICgpID0geyBjID0gW107IGxlbiA9IDA7IH1cblxubGV0IGNsZWFyIHMgPSBzLmMgPC0gW107IHMubGVuIDwtIDBcblxubGV0IGNvcHkgcyA9IHsgYyA9IHMuYzsgbGVuID0gcy5sZW47IH1cblxubGV0IHB1c2ggeCBzID0gcy5jIDwtIHggOjogcy5jOyBzLmxlbiA8LSBzLmxlbiArIDFcblxubGV0IHBvcCBzID1cbiAgbWF0Y2ggcy5jIHdpdGhcbiAgfCBoZDo6dGwgLT4gcy5jIDwtIHRsOyBzLmxlbiA8LSBzLmxlbiAtIDE7IGhkXG4gIHwgW10gICAgIC0+IHJhaXNlIEVtcHR5XG5cbmxldCBwb3Bfb3B0IHMgPVxuICBtYXRjaCBzLmMgd2l0aFxuICB8IGhkOjp0bCAtPiBzLmMgPC0gdGw7IHMubGVuIDwtIHMubGVuIC0gMTsgU29tZSBoZFxuICB8IFtdICAgICAtPiBOb25lXG5cbmxldCB0b3AgcyA9XG4gIG1hdGNoIHMuYyB3aXRoXG4gIHwgaGQ6Ol8gLT4gaGRcbiAgfCBbXSAgICAtPiByYWlzZSBFbXB0eVxuXG5sZXQgdG9wX29wdCBzID1cbiAgbWF0Y2ggcy5jIHdpdGhcbiAgfCBoZDo6XyAtPiBTb21lIGhkXG4gIHwgW10gICAgLT4gTm9uZVxuXG5sZXQgaXNfZW1wdHkgcyA9IChzLmMgPSBbXSlcblxubGV0IGxlbmd0aCBzID0gcy5sZW5cblxubGV0IGl0ZXIgZiBzID0gTGlzdC5pdGVyIGYgcy5jXG5cbmxldCBmb2xkIGYgYWNjIHMgPSBMaXN0LmZvbGRfbGVmdCBmIGFjYyBzLmNcblxuKCoqIHsxIEl0ZXJhdG9yc30gKilcblxubGV0IHRvX3NlcSBzID0gTGlzdC50b19zZXEgcy5jXG5cbmxldCBhZGRfc2VxIHEgaSA9IFNlcS5pdGVyIChmdW4geCAtPiBwdXNoIHggcSkgaVxuXG5sZXQgb2Zfc2VxIGcgPVxuICBsZXQgcyA9IGNyZWF0ZSgpIGluXG4gIGFkZF9zZXEgcyBnO1xuICBzXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgIEZyYW5jb2lzIFBvdHRpZXIsIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgIEplcmVtaWUgRGltaW5vLCBKYW5lIFN0cmVldCBFdXJvcGUgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDAyIEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbmV4Y2VwdGlvbiBFbXB0eVxuXG50eXBlICdhIGNlbGwgPVxuICB8IE5pbFxuICB8IENvbnMgb2YgeyBjb250ZW50OiAnYTsgbXV0YWJsZSBuZXh0OiAnYSBjZWxsIH1cblxudHlwZSAnYSB0ID0ge1xuICBtdXRhYmxlIGxlbmd0aDogaW50O1xuICBtdXRhYmxlIGZpcnN0OiAnYSBjZWxsO1xuICBtdXRhYmxlIGxhc3Q6ICdhIGNlbGxcbn1cblxubGV0IGNyZWF0ZSAoKSA9IHtcbiAgbGVuZ3RoID0gMDtcbiAgZmlyc3QgPSBOaWw7XG4gIGxhc3QgPSBOaWxcbn1cblxubGV0IGNsZWFyIHEgPVxuICBxLmxlbmd0aCA8LSAwO1xuICBxLmZpcnN0IDwtIE5pbDtcbiAgcS5sYXN0IDwtIE5pbFxuXG5sZXQgYWRkIHggcSA9XG4gIGxldCBjZWxsID0gQ29ucyB7XG4gICAgY29udGVudCA9IHg7XG4gICAgbmV4dCA9IE5pbFxuICB9IGluXG4gIG1hdGNoIHEubGFzdCB3aXRoXG4gIHwgTmlsIC0+XG4gICAgcS5sZW5ndGggPC0gMTtcbiAgICBxLmZpcnN0IDwtIGNlbGw7XG4gICAgcS5sYXN0IDwtIGNlbGxcbiAgfCBDb25zIGxhc3QgLT5cbiAgICBxLmxlbmd0aCA8LSBxLmxlbmd0aCArIDE7XG4gICAgbGFzdC5uZXh0IDwtIGNlbGw7XG4gICAgcS5sYXN0IDwtIGNlbGxcblxubGV0IHB1c2ggPVxuICBhZGRcblxubGV0IHBlZWsgcSA9XG4gIG1hdGNoIHEuZmlyc3Qgd2l0aFxuICB8IE5pbCAtPiByYWlzZSBFbXB0eVxuICB8IENvbnMgeyBjb250ZW50IH0gLT4gY29udGVudFxuXG5sZXQgcGVla19vcHQgcSA9XG4gIG1hdGNoIHEuZmlyc3Qgd2l0aFxuICB8IE5pbCAtPiBOb25lXG4gIHwgQ29ucyB7IGNvbnRlbnQgfSAtPiBTb21lIGNvbnRlbnRcblxubGV0IHRvcCA9XG4gIHBlZWtcblxubGV0IHRha2UgcSA9XG4gIG1hdGNoIHEuZmlyc3Qgd2l0aFxuICB8IE5pbCAtPiByYWlzZSBFbXB0eVxuICB8IENvbnMgeyBjb250ZW50OyBuZXh0ID0gTmlsIH0gLT5cbiAgICBjbGVhciBxO1xuICAgIGNvbnRlbnRcbiAgfCBDb25zIHsgY29udGVudDsgbmV4dCB9IC0+XG4gICAgcS5sZW5ndGggPC0gcS5sZW5ndGggLSAxO1xuICAgIHEuZmlyc3QgPC0gbmV4dDtcbiAgICBjb250ZW50XG5cbmxldCB0YWtlX29wdCBxID1cbiAgbWF0Y2ggcS5maXJzdCB3aXRoXG4gIHwgTmlsIC0+IE5vbmVcbiAgfCBDb25zIHsgY29udGVudDsgbmV4dCA9IE5pbCB9IC0+XG4gICAgY2xlYXIgcTtcbiAgICBTb21lIGNvbnRlbnRcbiAgfCBDb25zIHsgY29udGVudDsgbmV4dCB9IC0+XG4gICAgcS5sZW5ndGggPC0gcS5sZW5ndGggLSAxO1xuICAgIHEuZmlyc3QgPC0gbmV4dDtcbiAgICBTb21lIGNvbnRlbnRcblxubGV0IHBvcCA9XG4gIHRha2VcblxubGV0IGNvcHkgPVxuICBsZXQgcmVjIGNvcHkgcV9yZXMgcHJldiBjZWxsID1cbiAgICBtYXRjaCBjZWxsIHdpdGhcbiAgICB8IE5pbCAtPiBxX3Jlcy5sYXN0IDwtIHByZXY7IHFfcmVzXG4gICAgfCBDb25zIHsgY29udGVudDsgbmV4dCB9IC0+XG4gICAgICBsZXQgcmVzID0gQ29ucyB7IGNvbnRlbnQ7IG5leHQgPSBOaWwgfSBpblxuICAgICAgYmVnaW4gbWF0Y2ggcHJldiB3aXRoXG4gICAgICB8IE5pbCAtPiBxX3Jlcy5maXJzdCA8LSByZXNcbiAgICAgIHwgQ29ucyBwIC0+IHAubmV4dCA8LSByZXNcbiAgICAgIGVuZDtcbiAgICAgIGNvcHkgcV9yZXMgcmVzIG5leHRcbiAgaW5cbiAgZnVuIHEgLT4gY29weSB7IGxlbmd0aCA9IHEubGVuZ3RoOyBmaXJzdCA9IE5pbDsgbGFzdCA9IE5pbCB9IE5pbCBxLmZpcnN0XG5cbmxldCBpc19lbXB0eSBxID1cbiAgcS5sZW5ndGggPSAwXG5cbmxldCBsZW5ndGggcSA9XG4gIHEubGVuZ3RoXG5cbmxldCBpdGVyID1cbiAgbGV0IHJlYyBpdGVyIGYgY2VsbCA9XG4gICAgbWF0Y2ggY2VsbCB3aXRoXG4gICAgfCBOaWwgLT4gKClcbiAgICB8IENvbnMgeyBjb250ZW50OyBuZXh0IH0gLT5cbiAgICAgIGYgY29udGVudDtcbiAgICAgIGl0ZXIgZiBuZXh0XG4gIGluXG4gIGZ1biBmIHEgLT4gaXRlciBmIHEuZmlyc3RcblxubGV0IGZvbGQgPVxuICBsZXQgcmVjIGZvbGQgZiBhY2N1IGNlbGwgPVxuICAgIG1hdGNoIGNlbGwgd2l0aFxuICAgIHwgTmlsIC0+IGFjY3VcbiAgICB8IENvbnMgeyBjb250ZW50OyBuZXh0IH0gLT5cbiAgICAgIGxldCBhY2N1ID0gZiBhY2N1IGNvbnRlbnQgaW5cbiAgICAgIGZvbGQgZiBhY2N1IG5leHRcbiAgaW5cbiAgZnVuIGYgYWNjdSBxIC0+IGZvbGQgZiBhY2N1IHEuZmlyc3RcblxubGV0IHRyYW5zZmVyIHExIHEyID1cbiAgaWYgcTEubGVuZ3RoID4gMCB0aGVuXG4gICAgbWF0Y2ggcTIubGFzdCB3aXRoXG4gICAgfCBOaWwgLT5cbiAgICAgIHEyLmxlbmd0aCA8LSBxMS5sZW5ndGg7XG4gICAgICBxMi5maXJzdCA8LSBxMS5maXJzdDtcbiAgICAgIHEyLmxhc3QgPC0gcTEubGFzdDtcbiAgICAgIGNsZWFyIHExXG4gICAgfCBDb25zIGxhc3QgLT5cbiAgICAgIHEyLmxlbmd0aCA8LSBxMi5sZW5ndGggKyBxMS5sZW5ndGg7XG4gICAgICBsYXN0Lm5leHQgPC0gcTEuZmlyc3Q7XG4gICAgICBxMi5sYXN0IDwtIHExLmxhc3Q7XG4gICAgICBjbGVhciBxMVxuXG4oKiogezEgSXRlcmF0b3JzfSAqKVxuXG5sZXQgdG9fc2VxIHEgPVxuICBsZXQgcmVjIGF1eCBjICgpID0gbWF0Y2ggYyB3aXRoXG4gICAgfCBOaWwgLT4gU2VxLk5pbFxuICAgIHwgQ29ucyB7IGNvbnRlbnQ9eDsgbmV4dDsgfSAtPiBTZXEuQ29ucyAoeCwgYXV4IG5leHQpXG4gIGluXG4gIGF1eCBxLmZpcnN0XG5cbmxldCBhZGRfc2VxIHEgaSA9IFNlcS5pdGVyIChmdW4geCAtPiBwdXNoIHggcSkgaVxuXG5sZXQgb2Zfc2VxIGcgPVxuICBsZXQgcSA9IGNyZWF0ZSgpIGluXG4gIGFkZF9zZXEgcSBnO1xuICBxXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgIERhbmllbCBkZSBSYXVnbGF1ZHJlLCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk3IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbnR5cGUgJ2EgdCA9ICdhIGNlbGwgb3B0aW9uXG5hbmQgJ2EgY2VsbCA9IHsgbXV0YWJsZSBjb3VudCA6IGludDsgbXV0YWJsZSBkYXRhIDogJ2EgZGF0YSB9XG5hbmQgJ2EgZGF0YSA9XG4gICAgU2VtcHR5XG4gIHwgU2NvbnMgb2YgJ2EgKiAnYSBkYXRhXG4gIHwgU2FwcCBvZiAnYSBkYXRhICogJ2EgZGF0YVxuICB8IFNsYXp5IG9mICdhIGRhdGEgTGF6eS50XG4gIHwgU2dlbiBvZiAnYSBnZW5cbiAgfCBTYnVmZmlvIDogYnVmZmlvIC0+IGNoYXIgZGF0YVxuYW5kICdhIGdlbiA9IHsgbXV0YWJsZSBjdXJyIDogJ2Egb3B0aW9uIG9wdGlvbjsgZnVuYyA6IGludCAtPiAnYSBvcHRpb24gfVxuYW5kIGJ1ZmZpbyA9XG4gIHsgaWMgOiBpbl9jaGFubmVsOyBidWZmIDogYnl0ZXM7IG11dGFibGUgbGVuIDogaW50OyBtdXRhYmxlIGluZCA6IGludCB9XG5cbmV4Y2VwdGlvbiBGYWlsdXJlXG5leGNlcHRpb24gRXJyb3Igb2Ygc3RyaW5nXG5cbmxldCBjb3VudCA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiAwXG4gIHwgU29tZSB7IGNvdW50IH0gLT4gY291bnRcbmxldCBkYXRhID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IFNlbXB0eVxuICB8IFNvbWUgeyBkYXRhIH0gLT4gZGF0YVxuXG5sZXQgZmlsbF9idWZmIGIgPVxuICBiLmxlbiA8LSBpbnB1dCBiLmljIGIuYnVmZiAwIChCeXRlcy5sZW5ndGggYi5idWZmKTsgYi5pbmQgPC0gMFxuXG5cbmxldCByZWMgZ2V0X2RhdGEgOiB0eXBlIHYuIGludCAtPiB2IGRhdGEgLT4gdiBkYXRhID0gZnVuIGNvdW50IGQgLT4gbWF0Y2ggZCB3aXRoXG4gKCogUmV0dXJucyBlaXRoZXIgU2VtcHR5IG9yIFNjb25zKGEsIF8pIGV2ZW4gd2hlbiBkIGlzIGEgZ2VuZXJhdG9yXG4gICAgb3IgYSBidWZmZXIuIEluIHRob3NlIGNhc2VzLCB0aGUgaXRlbSBhIGlzIHNlZW4gYXMgZXh0cmFjdGVkIGZyb21cbiB0aGUgZ2VuZXJhdG9yL2J1ZmZlci5cbiBUaGUgY291bnQgcGFyYW1ldGVyIGlzIHVzZWQgZm9yIGNhbGxpbmcgYFNnZW4tZnVuY3Rpb25zJy4gICopXG4gICBTZW1wdHkgfCBTY29ucyAoXywgXykgLT4gZFxuIHwgU2FwcCAoZDEsIGQyKSAtPlxuICAgICBiZWdpbiBtYXRjaCBnZXRfZGF0YSBjb3VudCBkMSB3aXRoXG4gICAgICAgU2NvbnMgKGEsIGQxMSkgLT4gU2NvbnMgKGEsIFNhcHAgKGQxMSwgZDIpKVxuICAgICB8IFNlbXB0eSAtPiBnZXRfZGF0YSBjb3VudCBkMlxuICAgICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG4gICAgIGVuZFxuIHwgU2dlbiB7Y3VyciA9IFNvbWUgTm9uZX0gLT4gU2VtcHR5XG4gfCBTZ2VuICh7Y3VyciA9IFNvbWUoU29tZSBhKX0gYXMgZykgLT5cbiAgICAgZy5jdXJyIDwtIE5vbmU7IFNjb25zKGEsIGQpXG4gfCBTZ2VuIGcgLT5cbiAgICAgYmVnaW4gbWF0Y2ggZy5mdW5jIGNvdW50IHdpdGhcbiAgICAgICBOb25lIC0+IGcuY3VyciA8LSBTb21lKE5vbmUpOyBTZW1wdHlcbiAgICAgfCBTb21lIGEgLT4gU2NvbnMoYSwgZClcbiAgICAgICAgICgqIFdhcm5pbmc6IGFueW9uZSB1c2luZyBnIHRoaW5rcyB0aGF0IGFuIGl0ZW0gaGFzIGJlZW4gcmVhZCAqKVxuICAgICBlbmRcbiB8IFNidWZmaW8gYiAtPlxuICAgICBpZiBiLmluZCA+PSBiLmxlbiB0aGVuIGZpbGxfYnVmZiBiO1xuICAgICBpZiBiLmxlbiA9PSAwIHRoZW4gU2VtcHR5IGVsc2VcbiAgICAgICBsZXQgciA9IEJ5dGVzLnVuc2FmZV9nZXQgYi5idWZmIGIuaW5kIGluXG4gICAgICAgKCogV2FybmluZzogYW55b25lIHVzaW5nIGcgdGhpbmtzIHRoYXQgYW4gaXRlbSBoYXMgYmVlbiByZWFkICopXG4gICAgICAgYi5pbmQgPC0gc3VjYyBiLmluZDsgU2NvbnMociwgZClcbiB8IFNsYXp5IGYgLT4gZ2V0X2RhdGEgY291bnQgKExhenkuZm9yY2UgZilcblxuXG5sZXQgcmVjIHBlZWtfZGF0YSA6IHR5cGUgdi4gdiBjZWxsIC0+IHYgb3B0aW9uID0gZnVuIHMgLT5cbiAoKiBjb25zdWx0IHRoZSBmaXJzdCBpdGVtIG9mIHMgKilcbiBtYXRjaCBzLmRhdGEgd2l0aFxuICAgU2VtcHR5IC0+IE5vbmVcbiB8IFNjb25zIChhLCBfKSAtPiBTb21lIGFcbiB8IFNhcHAgKF8sIF8pIC0+XG4gICAgIGJlZ2luIG1hdGNoIGdldF9kYXRhIHMuY291bnQgcy5kYXRhIHdpdGhcbiAgICAgICBTY29ucyhhLCBfKSBhcyBkIC0+IHMuZGF0YSA8LSBkOyBTb21lIGFcbiAgICAgfCBTZW1wdHkgLT4gTm9uZVxuICAgICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG4gICAgIGVuZFxuIHwgU2xhenkgZiAtPiBzLmRhdGEgPC0gKExhenkuZm9yY2UgZik7IHBlZWtfZGF0YSBzXG4gfCBTZ2VuIHtjdXJyID0gU29tZSBhfSAtPiBhXG4gfCBTZ2VuIGcgLT4gbGV0IHggPSBnLmZ1bmMgcy5jb3VudCBpbiBnLmN1cnIgPC0gU29tZSB4OyB4XG4gfCBTYnVmZmlvIGIgLT5cbiAgICAgaWYgYi5pbmQgPj0gYi5sZW4gdGhlbiBmaWxsX2J1ZmYgYjtcbiAgICAgaWYgYi5sZW4gPT0gMCB0aGVuIGJlZ2luIHMuZGF0YSA8LSBTZW1wdHk7IE5vbmUgZW5kXG4gICAgIGVsc2UgU29tZSAoQnl0ZXMudW5zYWZlX2dldCBiLmJ1ZmYgYi5pbmQpXG5cblxubGV0IHBlZWsgPSBmdW5jdGlvblxuICB8IE5vbmUgLT4gTm9uZVxuICB8IFNvbWUgcyAtPiBwZWVrX2RhdGEgc1xuXG5cbmxldCByZWMganVua19kYXRhIDogdHlwZSB2LiB2IGNlbGwgLT4gdW5pdCA9IGZ1biBzIC0+XG4gIG1hdGNoIHMuZGF0YSB3aXRoXG4gICAgU2NvbnMgKF8sIGQpIC0+IHMuY291bnQgPC0gKHN1Y2Mgcy5jb3VudCk7IHMuZGF0YSA8LSBkXG4gIHwgU2dlbiAoe2N1cnIgPSBTb21lIF99IGFzIGcpIC0+IHMuY291bnQgPC0gKHN1Y2Mgcy5jb3VudCk7IGcuY3VyciA8LSBOb25lXG4gIHwgU2J1ZmZpbyBiIC0+XG4gICAgICBpZiBiLmluZCA+PSBiLmxlbiB0aGVuIGZpbGxfYnVmZiBiO1xuICAgICAgaWYgYi5sZW4gPT0gMCB0aGVuIHMuZGF0YSA8LSBTZW1wdHlcbiAgICAgIGVsc2UgKHMuY291bnQgPC0gKHN1Y2Mgcy5jb3VudCk7IGIuaW5kIDwtIHN1Y2MgYi5pbmQpXG4gIHwgXyAtPlxuICAgICAgbWF0Y2ggcGVla19kYXRhIHMgd2l0aFxuICAgICAgICBOb25lIC0+ICgpXG4gICAgICB8IFNvbWUgXyAtPiBqdW5rX2RhdGEgc1xuXG5cbmxldCBqdW5rID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+ICgpXG4gIHwgU29tZSBkYXRhIC0+IGp1bmtfZGF0YSBkYXRhXG5cbmxldCByZWMgbmdldF9kYXRhIG4gcyA9XG4gIGlmIG4gPD0gMCB0aGVuIFtdLCBzLmRhdGEsIDBcbiAgZWxzZVxuICAgIG1hdGNoIHBlZWtfZGF0YSBzIHdpdGhcbiAgICAgIFNvbWUgYSAtPlxuICAgICAgICBqdW5rX2RhdGEgcztcbiAgICAgICAgbGV0IChhbCwgZCwgaykgPSBuZ2V0X2RhdGEgKHByZWQgbikgcyBpbiBhIDo6IGFsLCBTY29ucyAoYSwgZCksIHN1Y2Mga1xuICAgIHwgTm9uZSAtPiBbXSwgcy5kYXRhLCAwXG5cblxubGV0IG5wZWVrX2RhdGEgbiBzID1cbiAgbGV0IChhbCwgZCwgbGVuKSA9IG5nZXRfZGF0YSBuIHMgaW5cbiAgcy5jb3VudCA8LSAocy5jb3VudCAtIGxlbik7XG4gIHMuZGF0YSA8LSBkO1xuICBhbFxuXG5cbmxldCBucGVlayBuID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IFtdXG4gIHwgU29tZSBkIC0+IG5wZWVrX2RhdGEgbiBkXG5cbmxldCBuZXh0IHMgPVxuICBtYXRjaCBwZWVrIHMgd2l0aFxuICAgIFNvbWUgYSAtPiBqdW5rIHM7IGFcbiAgfCBOb25lIC0+IHJhaXNlIEZhaWx1cmVcblxuXG5sZXQgZW1wdHkgcyA9XG4gIG1hdGNoIHBlZWsgcyB3aXRoXG4gICAgU29tZSBfIC0+IHJhaXNlIEZhaWx1cmVcbiAgfCBOb25lIC0+ICgpXG5cblxubGV0IGl0ZXIgZiBzdHJtID1cbiAgbGV0IHJlYyBkb19yZWMgKCkgPVxuICAgIG1hdGNoIHBlZWsgc3RybSB3aXRoXG4gICAgICBTb21lIGEgLT4ganVuayBzdHJtOyBpZ25vcmUoZiBhKTsgZG9fcmVjICgpXG4gICAgfCBOb25lIC0+ICgpXG4gIGluXG4gIGRvX3JlYyAoKVxuXG5cbigqIFN0cmVhbSBidWlsZGluZyBmdW5jdGlvbnMgKilcblxubGV0IGZyb20gZiA9IFNvbWUge2NvdW50ID0gMDsgZGF0YSA9IFNnZW4ge2N1cnIgPSBOb25lOyBmdW5jID0gZn19XG5cbmxldCBvZl9saXN0IGwgPVxuICBTb21lIHtjb3VudCA9IDA7IGRhdGEgPSBMaXN0LmZvbGRfcmlnaHQgKGZ1biB4IGwgLT4gU2NvbnMgKHgsIGwpKSBsIFNlbXB0eX1cblxuXG5sZXQgb2Zfc3RyaW5nIHMgPVxuICBsZXQgY291bnQgPSByZWYgMCBpblxuICBmcm9tIChmdW4gXyAtPlxuICAgICgqIFdlIGNhbm5vdCB1c2UgdGhlIGluZGV4IHBhc3NlZCBieSB0aGUgW2Zyb21dIGZ1bmN0aW9uIGRpcmVjdGx5XG4gICAgICAgYmVjYXVzZSBpdCByZXR1cm5zIHRoZSBjdXJyZW50IHN0cmVhbSBjb3VudCwgd2l0aCBhYnNvbHV0ZWx5IG5vXG4gICAgICAgZ3VhcmFudGVlIHRoYXQgaXQgd2lsbCBzdGFydCBmcm9tIDAuIEZvciBleGFtcGxlLCBpbiB0aGUgY2FzZVxuICAgICAgIG9mIFtTdHJlYW0uaWNvbnMgJ2MnIChTdHJlYW0uZnJvbV9zdHJpbmcgXCJhYlwiKV0sIHRoZSBmaXJzdFxuICAgICAgIGFjY2VzcyB0byB0aGUgc3RyaW5nIHdpbGwgYmUgbWFkZSB3aXRoIGNvdW50IFsxXSBhbHJlYWR5LlxuICAgICopXG4gICAgbGV0IGMgPSAhY291bnQgaW5cbiAgICBpZiBjIDwgU3RyaW5nLmxlbmd0aCBzXG4gICAgdGhlbiAoaW5jciBjb3VudDsgU29tZSBzLltjXSlcbiAgICBlbHNlIE5vbmUpXG5cblxubGV0IG9mX2J5dGVzIHMgPVxuICBsZXQgY291bnQgPSByZWYgMCBpblxuICBmcm9tIChmdW4gXyAtPlxuICAgIGxldCBjID0gIWNvdW50IGluXG4gICAgaWYgYyA8IEJ5dGVzLmxlbmd0aCBzXG4gICAgdGhlbiAoaW5jciBjb3VudDsgU29tZSAoQnl0ZXMuZ2V0IHMgYykpXG4gICAgZWxzZSBOb25lKVxuXG5cbmxldCBvZl9jaGFubmVsIGljID1cbiAgU29tZSB7Y291bnQgPSAwO1xuICAgICAgICBkYXRhID0gU2J1ZmZpbyB7aWMgPSBpYzsgYnVmZiA9IEJ5dGVzLmNyZWF0ZSA0MDk2OyBsZW4gPSAwOyBpbmQgPSAwfX1cblxuXG4oKiBTdHJlYW0gZXhwcmVzc2lvbnMgYnVpbGRlcnMgKilcblxubGV0IGlhcHAgaSBzID0gU29tZSB7Y291bnQgPSAwOyBkYXRhID0gU2FwcCAoZGF0YSBpLCBkYXRhIHMpfVxubGV0IGljb25zIGkgcyA9IFNvbWUge2NvdW50ID0gMDsgZGF0YSA9IFNjb25zIChpLCBkYXRhIHMpfVxubGV0IGlzaW5nIGkgPSBTb21lIHtjb3VudCA9IDA7IGRhdGEgPSBTY29ucyAoaSwgU2VtcHR5KX1cblxubGV0IGxhcHAgZiBzID1cbiAgU29tZSB7Y291bnQgPSAwOyBkYXRhID0gU2xhenkgKGxhenkoU2FwcCAoZGF0YSAoZiAoKSksIGRhdGEgcykpKX1cblxubGV0IGxjb25zIGYgcyA9IFNvbWUge2NvdW50ID0gMDsgZGF0YSA9IFNsYXp5IChsYXp5KFNjb25zIChmICgpLCBkYXRhIHMpKSl9XG5sZXQgbHNpbmcgZiA9IFNvbWUge2NvdW50ID0gMDsgZGF0YSA9IFNsYXp5IChsYXp5KFNjb25zIChmICgpLCBTZW1wdHkpKSl9XG5cbmxldCBzZW1wdHkgPSBOb25lXG5sZXQgc2xhenkgZiA9IFNvbWUge2NvdW50ID0gMDsgZGF0YSA9IFNsYXp5IChsYXp5KGRhdGEgKGYgKCkpKSl9XG5cbigqIEZvciBkZWJ1Z2dpbmcgdXNlICopXG5cbmxldCByZWMgZHVtcCA6IHR5cGUgdi4gKHYgLT4gdW5pdCkgLT4gdiB0IC0+IHVuaXQgPSBmdW4gZiBzIC0+XG4gIHByaW50X3N0cmluZyBcIntjb3VudCA9IFwiO1xuICBwcmludF9pbnQgKGNvdW50IHMpO1xuICBwcmludF9zdHJpbmcgXCI7IGRhdGEgPSBcIjtcbiAgZHVtcF9kYXRhIGYgKGRhdGEgcyk7XG4gIHByaW50X3N0cmluZyBcIn1cIjtcbiAgcHJpbnRfbmV3bGluZSAoKVxuYW5kIGR1bXBfZGF0YSA6IHR5cGUgdi4gKHYgLT4gdW5pdCkgLT4gdiBkYXRhIC0+IHVuaXQgPSBmdW4gZiAtPlxuICBmdW5jdGlvblxuICAgIFNlbXB0eSAtPiBwcmludF9zdHJpbmcgXCJTZW1wdHlcIlxuICB8IFNjb25zIChhLCBkKSAtPlxuICAgICAgcHJpbnRfc3RyaW5nIFwiU2NvbnMgKFwiO1xuICAgICAgZiBhO1xuICAgICAgcHJpbnRfc3RyaW5nIFwiLCBcIjtcbiAgICAgIGR1bXBfZGF0YSBmIGQ7XG4gICAgICBwcmludF9zdHJpbmcgXCIpXCJcbiAgfCBTYXBwIChkMSwgZDIpIC0+XG4gICAgICBwcmludF9zdHJpbmcgXCJTYXBwIChcIjtcbiAgICAgIGR1bXBfZGF0YSBmIGQxO1xuICAgICAgcHJpbnRfc3RyaW5nIFwiLCBcIjtcbiAgICAgIGR1bXBfZGF0YSBmIGQyO1xuICAgICAgcHJpbnRfc3RyaW5nIFwiKVwiXG4gIHwgU2xhenkgXyAtPiBwcmludF9zdHJpbmcgXCJTbGF6eVwiXG4gIHwgU2dlbiBfIC0+IHByaW50X3N0cmluZyBcIlNnZW5cIlxuICB8IFNidWZmaW8gXyAtPiBwcmludF9zdHJpbmcgXCJTYnVmZmlvXCJcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgIFBpZXJyZSBXZWlzIGFuZCBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTkgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogRXh0ZW5zaWJsZSBidWZmZXJzICopXG5cbnR5cGUgdCA9XG4ge211dGFibGUgYnVmZmVyIDogYnl0ZXM7XG4gIG11dGFibGUgcG9zaXRpb24gOiBpbnQ7XG4gIG11dGFibGUgbGVuZ3RoIDogaW50O1xuICBpbml0aWFsX2J1ZmZlciA6IGJ5dGVzfVxuKCogSW52YXJpYW50czogYWxsIHBhcnRzIG9mIHRoZSBjb2RlIHByZXNlcnZlIHRoZSBpbnZhcmlhbnRzIHRoYXQ6XG4gICAtIFswIDw9IGIucG9zaXRpb24gPD0gYi5sZW5ndGhdXG4gICAtIFtiLmxlbmd0aCA9IEJ5dGVzLmxlbmd0aCBiLmJ1ZmZlcl1cblxuICAgTm90ZSBpbiBwYXJ0aWN1bGFyIHRoYXQgW2IucG9zaXRpb24gPSBiLmxlbmd0aF0gaXMgbGVnYWwsXG4gICBpdCBtZWFucyB0aGF0IHRoZSBidWZmZXIgaXMgZnVsbCBhbmQgd2lsbCBoYXZlIHRvIGJlIGV4dGVuZGVkXG4gICBiZWZvcmUgYW55IGZ1cnRoZXIgYWRkaXRpb24uICopXG5cbmxldCBjcmVhdGUgbiA9XG4gbGV0IG4gPSBpZiBuIDwgMSB0aGVuIDEgZWxzZSBuIGluXG4gbGV0IG4gPSBpZiBuID4gU3lzLm1heF9zdHJpbmdfbGVuZ3RoIHRoZW4gU3lzLm1heF9zdHJpbmdfbGVuZ3RoIGVsc2UgbiBpblxuIGxldCBzID0gQnl0ZXMuY3JlYXRlIG4gaW5cbiB7YnVmZmVyID0gczsgcG9zaXRpb24gPSAwOyBsZW5ndGggPSBuOyBpbml0aWFsX2J1ZmZlciA9IHN9XG5cbmxldCBjb250ZW50cyBiID0gQnl0ZXMuc3ViX3N0cmluZyBiLmJ1ZmZlciAwIGIucG9zaXRpb25cbmxldCB0b19ieXRlcyBiID0gQnl0ZXMuc3ViIGIuYnVmZmVyIDAgYi5wb3NpdGlvblxuXG5sZXQgc3ViIGIgb2ZzIGxlbiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBiLnBvc2l0aW9uIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJCdWZmZXIuc3ViXCJcbiAgZWxzZSBCeXRlcy5zdWJfc3RyaW5nIGIuYnVmZmVyIG9mcyBsZW5cblxuXG5sZXQgYmxpdCBzcmMgc3Jjb2ZmIGRzdCBkc3RvZmYgbGVuID1cbiAgaWYgbGVuIDwgMCB8fCBzcmNvZmYgPCAwIHx8IHNyY29mZiA+IHNyYy5wb3NpdGlvbiAtIGxlblxuICAgICAgICAgICAgIHx8IGRzdG9mZiA8IDAgfHwgZHN0b2ZmID4gKEJ5dGVzLmxlbmd0aCBkc3QpIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJCdWZmZXIuYmxpdFwiXG4gIGVsc2VcbiAgICBCeXRlcy51bnNhZmVfYmxpdCBzcmMuYnVmZmVyIHNyY29mZiBkc3QgZHN0b2ZmIGxlblxuXG5cbmxldCBudGggYiBvZnMgPVxuICBpZiBvZnMgPCAwIHx8IG9mcyA+PSBiLnBvc2l0aW9uIHRoZW5cbiAgIGludmFsaWRfYXJnIFwiQnVmZmVyLm50aFwiXG4gIGVsc2UgQnl0ZXMudW5zYWZlX2dldCBiLmJ1ZmZlciBvZnNcblxuXG5sZXQgbGVuZ3RoIGIgPSBiLnBvc2l0aW9uXG5cbmxldCBjbGVhciBiID0gYi5wb3NpdGlvbiA8LSAwXG5cbmxldCByZXNldCBiID1cbiAgYi5wb3NpdGlvbiA8LSAwO1xuICBiLmJ1ZmZlciA8LSBiLmluaXRpYWxfYnVmZmVyO1xuICBiLmxlbmd0aCA8LSBCeXRlcy5sZW5ndGggYi5idWZmZXJcblxuKCogW3Jlc2l6ZSBiIG1vcmVdIGVuc3VyZXMgdGhhdCBbYi5wb3NpdGlvbiArIG1vcmUgPD0gYi5sZW5ndGhdIGhvbGRzXG4gICBieSBkeW5hbWljYWxseSBleHRlbmRpbmcgW2IuYnVmZmVyXSBpZiBuZWNlc3NhcnkgLS0gYW5kIHRodXNcbiAgIGluY3JlYXNpbmcgW2IubGVuZ3RoXS5cblxuICAgSW4gcGFydGljdWxhciwgYWZ0ZXIgW3Jlc2l6ZSBiIG1vcmVdIGlzIGNhbGxlZCwgYSBkaXJlY3QgYWNjZXNzIG9mXG4gICBzaXplIFttb3JlXSBhdCBbYi5wb3NpdGlvbl0gd2lsbCBhbHdheXMgYmUgaW4tYm91bmRzLCBzbyB0aGF0XG4gICAodW5zYWZlX3tnZXQsc2V0fSkgbWF5IGJlIHVzZWQgZm9yIHBlcmZvcm1hbmNlLlxuKilcbmxldCByZXNpemUgYiBtb3JlID1cbiAgbGV0IG9sZF9wb3MgPSBiLnBvc2l0aW9uIGluXG4gIGxldCBvbGRfbGVuID0gYi5sZW5ndGggaW5cbiAgbGV0IG5ld19sZW4gPSByZWYgb2xkX2xlbiBpblxuICB3aGlsZSBvbGRfcG9zICsgbW9yZSA+ICFuZXdfbGVuIGRvIG5ld19sZW4gOj0gMiAqICFuZXdfbGVuIGRvbmU7XG4gIGlmICFuZXdfbGVuID4gU3lzLm1heF9zdHJpbmdfbGVuZ3RoIHRoZW4gYmVnaW5cbiAgICBpZiBvbGRfcG9zICsgbW9yZSA8PSBTeXMubWF4X3N0cmluZ19sZW5ndGhcbiAgICB0aGVuIG5ld19sZW4gOj0gU3lzLm1heF9zdHJpbmdfbGVuZ3RoXG4gICAgZWxzZSBmYWlsd2l0aCBcIkJ1ZmZlci5hZGQ6IGNhbm5vdCBncm93IGJ1ZmZlclwiXG4gIGVuZDtcbiAgbGV0IG5ld19idWZmZXIgPSBCeXRlcy5jcmVhdGUgIW5ld19sZW4gaW5cbiAgKCogUFIjNjE0ODogbGV0J3Mga2VlcCB1c2luZyBbYmxpdF0gcmF0aGVyIHRoYW4gW3Vuc2FmZV9ibGl0XSBpblxuICAgICB0aGlzIHRyaWNreSBmdW5jdGlvbiB0aGF0IGlzIHNsb3cgYW55d2F5LiAqKVxuICBCeXRlcy5ibGl0IGIuYnVmZmVyIDAgbmV3X2J1ZmZlciAwIGIucG9zaXRpb247XG4gIGIuYnVmZmVyIDwtIG5ld19idWZmZXI7XG4gIGIubGVuZ3RoIDwtICFuZXdfbGVuO1xuICBhc3NlcnQgKGIucG9zaXRpb24gKyBtb3JlIDw9IGIubGVuZ3RoKTtcbiAgYXNzZXJ0IChvbGRfcG9zICsgbW9yZSA8PSBiLmxlbmd0aCk7XG4gICgpXG4gICgqIE5vdGU6IHRoZXJlIGFyZSB2YXJpb3VzIHNpdHVhdGlvbnMgKHByZWVtcHRpdmUgdGhyZWFkcywgc2lnbmFscyBhbmRcbiAgICAgZ2MgZmluYWxpemVycykgd2hlcmUgT0NhbWwgY29kZSBtYXkgYmUgcnVuIGFzeW5jaHJvbm91c2x5OyBpblxuICAgICBwYXJ0aWN1bGFyLCB0aGVyZSBtYXkgYmUgYSByYWNlIHdpdGggYW5vdGhlciB1c2VyIG9mIFtiXSwgY2hhbmdpbmdcbiAgICAgaXRzIG11dGFibGUgZmllbGRzIGluIHRoZSBtaWRkbGUgb2YgdGhlIFtyZXNpemVdIGNhbGwuIFRoZSBCdWZmZXJcbiAgICAgbW9kdWxlIGRvZXMgbm90IHByb3ZpZGUgYW55IGNvcnJlY3RuZXNzIGd1YXJhbnRlZSBpZiB0aGF0IGhhcHBlbnMsXG4gICAgIGJ1dCB3ZSBtdXN0IHN0aWxsIGVuc3VyZSB0aGF0IHRoZSBkYXRhc3RydWN0dXJlIGludmFyaWFudHMgaG9sZCBmb3JcbiAgICAgbWVtb3J5LXNhZmV0eSAtLSBhcyB3ZSBwbGFuIHRvIHVzZSBbdW5zYWZlX3tnZXQsc2V0fV0uXG5cbiAgICAgVGhlcmUgYXJlIHR3byBwb3RlbnRpYWwgYWxsb2NhdGlvbiBwb2ludHMgaW4gdGhpcyBmdW5jdGlvbixcbiAgICAgW3JlZl0gYW5kIFtCeXRlcy5jcmVhdGVdLCBidXQgYWxsIHJlYWRzIGFuZCB3cml0ZXMgdG8gdGhlIGZpZWxkc1xuICAgICBvZiBbYl0gaGFwcGVuIGJlZm9yZSBib3RoIG9mIHRoZW0gb3IgYWZ0ZXIgYm90aCBvZiB0aGVtLlxuXG4gICAgIFdlIHRoZXJlZm9yZSBhc3N1bWUgdGhhdCBbYi5wb3NpdGlvbl0gbWF5IGNoYW5nZSBhdCB0aGVzZSBhbGxvY2F0aW9ucyxcbiAgICAgYW5kIGNoZWNrIHRoYXQgdGhlIFtiLnBvc2l0aW9uICsgbW9yZSA8PSBiLmxlbmd0aF0gcG9zdGNvbmRpdGlvblxuICAgICBob2xkcyBmb3IgYm90aCB2YWx1ZXMgb2YgW2IucG9zaXRpb25dLCBiZWZvcmUgb3IgYWZ0ZXIgdGhlIGZ1bmN0aW9uXG4gICAgIGlzIGNhbGxlZC4gTW9yZSBwcmVjaXNlbHksIHRoZSBmb2xsb3dpbmcgaW52YXJpYW50cyBtdXN0IGhvbGQgaWYgdGhlXG4gICAgIGZ1bmN0aW9uIHJldHVybnMgY29ycmVjdGx5LCBpbiBhZGRpdGlvbiB0byB0aGUgdXN1YWwgYnVmZmVyIGludmFyaWFudHM6XG4gICAgIC0gW29sZChiLnBvc2l0aW9uKSArIG1vcmUgPD0gbmV3KGIubGVuZ3RoKV1cbiAgICAgLSBbbmV3KGIucG9zaXRpb24pICsgbW9yZSA8PSBuZXcoYi5sZW5ndGgpXVxuICAgICAtIFtvbGQoYi5sZW5ndGgpIDw9IG5ldyhiLmxlbmd0aCldXG5cbiAgICAgTm90ZTogW2IucG9zaXRpb24gKyBtb3JlIDw9IG9sZChiLmxlbmd0aCldIGRvZXMgKm5vdCpcbiAgICAgaG9sZCBpbiBnZW5lcmFsLCBhcyBpdCBpcyBwcmVjaXNlbHkgdGhlIGNhc2Ugd2hlcmUgeW91IG5lZWRcbiAgICAgdG8gY2FsbCBbcmVzaXplXSB0byBpbmNyZWFzZSBbYi5sZW5ndGhdLlxuXG4gICAgIE5vdGU6IFthc3NlcnRdIGFib3ZlIGRvZXMgbm90IG1lYW4gdGhhdCB3ZSBrbm93IHRoZSBjb25kaXRpb25zXG4gICAgIGFsd2F5cyBob2xkLCBidXQgdGhhdCB0aGUgZnVuY3Rpb24gbWF5IHJldHVybiBjb3JyZWN0bHlcbiAgICAgb25seSBpZiB0aGV5IGhvbGQuXG5cbiAgICAgTm90ZTogdGhlIG90aGVyIGZ1bmN0aW9ucyBpbiB0aGlzIG1vZHVsZSBkb2VzIG5vdCBuZWVkXG4gICAgIHRvIGJlIGNoZWNrZWQgd2l0aCB0aGlzIGxldmVsIG9mIHNjcnV0aW55LCBnaXZlbiB0aGF0IHRoZXlcbiAgICAgcmVhZC93cml0ZSB0aGUgYnVmZmVyIGltbWVkaWF0ZWx5IGFmdGVyIGNoZWNraW5nIHRoYXRcbiAgICAgW2IucG9zaXRpb24gKyBtb3JlIDw9IGIubGVuZ3RoXSBob2xkIG9yIGNhbGxpbmcgW3Jlc2l6ZV0uXG4gICopXG5cbmxldCBhZGRfY2hhciBiIGMgPVxuICBsZXQgcG9zID0gYi5wb3NpdGlvbiBpblxuICBpZiBwb3MgPj0gYi5sZW5ndGggdGhlbiByZXNpemUgYiAxO1xuICBCeXRlcy51bnNhZmVfc2V0IGIuYnVmZmVyIHBvcyBjO1xuICBiLnBvc2l0aW9uIDwtIHBvcyArIDFcblxubGV0IHVjaGFyX3V0Zl84X2J5dGVfbGVuZ3RoX21heCA9IDRcbmxldCB1Y2hhcl91dGZfMTZfYnl0ZV9sZW5ndGhfbWF4ID0gNFxuXG5sZXQgcmVjIGFkZF91dGZfOF91Y2hhciBiIHUgPVxuICBsZXQgcG9zID0gYi5wb3NpdGlvbiBpblxuICBpZiBwb3MgPj0gYi5sZW5ndGggdGhlbiByZXNpemUgYiB1Y2hhcl91dGZfOF9ieXRlX2xlbmd0aF9tYXg7XG4gIGxldCBuID0gQnl0ZXMuc2V0X3V0Zl84X3VjaGFyIGIuYnVmZmVyIHBvcyB1IGluXG4gIGlmIG4gPSAwXG4gIHRoZW4gKHJlc2l6ZSBiIHVjaGFyX3V0Zl84X2J5dGVfbGVuZ3RoX21heDsgYWRkX3V0Zl84X3VjaGFyIGIgdSlcbiAgZWxzZSAoYi5wb3NpdGlvbiA8LSBwb3MgKyBuKVxuXG5sZXQgcmVjIGFkZF91dGZfMTZiZV91Y2hhciBiIHUgPVxuICBsZXQgcG9zID0gYi5wb3NpdGlvbiBpblxuICBpZiBwb3MgPj0gYi5sZW5ndGggdGhlbiByZXNpemUgYiB1Y2hhcl91dGZfMTZfYnl0ZV9sZW5ndGhfbWF4O1xuICBsZXQgbiA9IEJ5dGVzLnNldF91dGZfMTZiZV91Y2hhciBiLmJ1ZmZlciBwb3MgdSBpblxuICBpZiBuID0gMFxuICB0aGVuIChyZXNpemUgYiB1Y2hhcl91dGZfMTZfYnl0ZV9sZW5ndGhfbWF4OyBhZGRfdXRmXzE2YmVfdWNoYXIgYiB1KVxuICBlbHNlIChiLnBvc2l0aW9uIDwtIHBvcyArIG4pXG5cbmxldCByZWMgYWRkX3V0Zl8xNmxlX3VjaGFyIGIgdSA9XG4gIGxldCBwb3MgPSBiLnBvc2l0aW9uIGluXG4gIGlmIHBvcyA+PSBiLmxlbmd0aCB0aGVuIHJlc2l6ZSBiIHVjaGFyX3V0Zl8xNl9ieXRlX2xlbmd0aF9tYXg7XG4gIGxldCBuID0gQnl0ZXMuc2V0X3V0Zl8xNmxlX3VjaGFyIGIuYnVmZmVyIHBvcyB1IGluXG4gIGlmIG4gPSAwXG4gIHRoZW4gKHJlc2l6ZSBiIHVjaGFyX3V0Zl8xNl9ieXRlX2xlbmd0aF9tYXg7IGFkZF91dGZfMTZsZV91Y2hhciBiIHUpXG4gIGVsc2UgKGIucG9zaXRpb24gPC0gcG9zICsgbilcblxubGV0IGFkZF9zdWJzdHJpbmcgYiBzIG9mZnNldCBsZW4gPVxuICBpZiBvZmZzZXQgPCAwIHx8IGxlbiA8IDAgfHwgb2Zmc2V0ID4gU3RyaW5nLmxlbmd0aCBzIC0gbGVuXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJCdWZmZXIuYWRkX3N1YnN0cmluZy9hZGRfc3ViYnl0ZXNcIjtcbiAgbGV0IG5ld19wb3NpdGlvbiA9IGIucG9zaXRpb24gKyBsZW4gaW5cbiAgaWYgbmV3X3Bvc2l0aW9uID4gYi5sZW5ndGggdGhlbiByZXNpemUgYiBsZW47XG4gIEJ5dGVzLnVuc2FmZV9ibGl0X3N0cmluZyBzIG9mZnNldCBiLmJ1ZmZlciBiLnBvc2l0aW9uIGxlbjtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9zdWJieXRlcyBiIHMgb2Zmc2V0IGxlbiA9XG4gIGFkZF9zdWJzdHJpbmcgYiAoQnl0ZXMudW5zYWZlX3RvX3N0cmluZyBzKSBvZmZzZXQgbGVuXG5cbmxldCBhZGRfc3RyaW5nIGIgcyA9XG4gIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgbGV0IG5ld19wb3NpdGlvbiA9IGIucG9zaXRpb24gKyBsZW4gaW5cbiAgaWYgbmV3X3Bvc2l0aW9uID4gYi5sZW5ndGggdGhlbiByZXNpemUgYiBsZW47XG4gIEJ5dGVzLnVuc2FmZV9ibGl0X3N0cmluZyBzIDAgYi5idWZmZXIgYi5wb3NpdGlvbiBsZW47XG4gIGIucG9zaXRpb24gPC0gbmV3X3Bvc2l0aW9uXG5cbmxldCBhZGRfYnl0ZXMgYiBzID0gYWRkX3N0cmluZyBiIChCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHMpXG5cbmxldCBhZGRfYnVmZmVyIGIgYnMgPVxuICBhZGRfc3ViYnl0ZXMgYiBicy5idWZmZXIgMCBicy5wb3NpdGlvblxuXG4oKiB0aGlzIChwcml2YXRlKSBmdW5jdGlvbiBjb3VsZCBtb3ZlIGludG8gdGhlIHN0YW5kYXJkIGxpYnJhcnkgKilcbmxldCByZWFsbHlfaW5wdXRfdXBfdG8gaWMgYnVmIG9mcyBsZW4gPVxuICBsZXQgcmVjIGxvb3AgaWMgYnVmIH5hbHJlYWR5X3JlYWQgfm9mcyB+dG9fcmVhZCA9XG4gICAgaWYgdG9fcmVhZCA9IDAgdGhlbiBhbHJlYWR5X3JlYWRcbiAgICBlbHNlIGJlZ2luXG4gICAgICBsZXQgciA9IGlucHV0IGljIGJ1ZiBvZnMgdG9fcmVhZCBpblxuICAgICAgaWYgciA9IDAgdGhlbiBhbHJlYWR5X3JlYWRcbiAgICAgIGVsc2UgYmVnaW5cbiAgICAgICAgbGV0IGFscmVhZHlfcmVhZCA9IGFscmVhZHlfcmVhZCArIHIgaW5cbiAgICAgICAgbGV0IG9mcyA9IG9mcyArIHIgaW5cbiAgICAgICAgbGV0IHRvX3JlYWQgPSB0b19yZWFkIC0gciBpblxuICAgICAgICBsb29wIGljIGJ1ZiB+YWxyZWFkeV9yZWFkIH5vZnMgfnRvX3JlYWRcbiAgICAgIGVuZFxuICAgIGVuZFxuICBpbiBsb29wIGljIGJ1ZiB+YWxyZWFkeV9yZWFkOjAgfm9mcyB+dG9fcmVhZDpsZW5cblxuXG5sZXQgdW5zYWZlX2FkZF9jaGFubmVsX3VwX3RvIGIgaWMgbGVuID1cbiAgaWYgYi5wb3NpdGlvbiArIGxlbiA+IGIubGVuZ3RoIHRoZW4gcmVzaXplIGIgbGVuO1xuICBsZXQgbiA9IHJlYWxseV9pbnB1dF91cF90byBpYyBiLmJ1ZmZlciBiLnBvc2l0aW9uIGxlbiBpblxuICAoKiBUaGUgYXNzZXJ0aW9uIGJlbG93IG1heSBmYWlsIGluIHdlaXJkIHNjZW5hcmlvIHdoZXJlXG4gICAgIHRocmVhZGVkL2ZpbmFsaXplciBjb2RlLCBydW4gYXN5bmNocm9ub3VzbHkgZHVyaW5nIHRoZVxuICAgICBbcmVhbGx5X2lucHV0X3VwX3RvXSBjYWxsLCByYWNlcyBvbiB0aGUgYnVmZmVyOyB3ZSBkb24ndCBlbnN1cmVcbiAgICAgY29ycmVjdG5lc3MgaW4gdGhpcyBjYXNlLCBidXQgbmVlZCB0byBwcmVzZXJ2ZSB0aGUgaW52YXJpYW50cyBmb3JcbiAgICAgbWVtb3J5LXNhZmV0eSAoc2VlIGRpc2N1c3Npb24gb2YgW3Jlc2l6ZV0pLiAqKVxuICBhc3NlcnQgKGIucG9zaXRpb24gKyBuIDw9IGIubGVuZ3RoKTtcbiAgYi5wb3NpdGlvbiA8LSBiLnBvc2l0aW9uICsgbjtcbiAgblxuXG5sZXQgYWRkX2NoYW5uZWwgYiBpYyBsZW4gPVxuICBpZiBsZW4gPCAwIHx8IGxlbiA+IFN5cy5tYXhfc3RyaW5nX2xlbmd0aCB0aGVuICAgKCogUFIjNTAwNCAqKVxuICAgIGludmFsaWRfYXJnIFwiQnVmZmVyLmFkZF9jaGFubmVsXCI7XG4gIGxldCBuID0gdW5zYWZlX2FkZF9jaGFubmVsX3VwX3RvIGIgaWMgbGVuIGluXG4gICgqIEl0IGlzIGludGVudGlvbmFsIHRoYXQgYSBjb25zdW1lciBjYXRjaGluZyBFbmRfb2ZfZmlsZVxuICAgICB3aWxsIHNlZSB0aGUgZGF0YSB3cml0dGVuIChzZWUgIzY3MTksICM3MTM2KS4gKilcbiAgaWYgbiA8IGxlbiB0aGVuIHJhaXNlIEVuZF9vZl9maWxlO1xuICAoKVxuXG5sZXQgb3V0cHV0X2J1ZmZlciBvYyBiID1cbiAgb3V0cHV0IG9jIGIuYnVmZmVyIDAgYi5wb3NpdGlvblxuXG5sZXQgY2xvc2luZyA9IGZ1bmN0aW9uXG4gIHwgJygnIC0+ICcpJ1xuICB8ICd7JyAtPiAnfSdcbiAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG4oKiBvcGVuaW5nIGFuZCBjbG9zaW5nOiBvcGVuIGFuZCBjbG9zZSBjaGFyYWN0ZXJzLCB0eXBpY2FsbHkgKCBhbmQgKVxuICAgazogYmFsYW5jZSBvZiBvcGVuaW5nIGFuZCBjbG9zaW5nIGNoYXJzXG4gICBzOiB0aGUgc3RyaW5nIHdoZXJlIHdlIGFyZSBzZWFyY2hpbmdcbiAgIHN0YXJ0OiB0aGUgaW5kZXggd2hlcmUgd2Ugc3RhcnQgdGhlIHNlYXJjaC4gKilcbmxldCBhZHZhbmNlX3RvX2Nsb3Npbmcgb3BlbmluZyBjbG9zaW5nIGsgcyBzdGFydCA9XG4gIGxldCByZWMgYWR2YW5jZSBrIGkgbGltID1cbiAgICBpZiBpID49IGxpbSB0aGVuIHJhaXNlIE5vdF9mb3VuZCBlbHNlXG4gICAgaWYgcy5baV0gPSBvcGVuaW5nIHRoZW4gYWR2YW5jZSAoayArIDEpIChpICsgMSkgbGltIGVsc2VcbiAgICBpZiBzLltpXSA9IGNsb3NpbmcgdGhlblxuICAgICAgaWYgayA9IDAgdGhlbiBpIGVsc2UgYWR2YW5jZSAoayAtIDEpIChpICsgMSkgbGltXG4gICAgZWxzZSBhZHZhbmNlIGsgKGkgKyAxKSBsaW0gaW5cbiAgYWR2YW5jZSBrIHN0YXJ0IChTdHJpbmcubGVuZ3RoIHMpXG5cbmxldCBhZHZhbmNlX3RvX25vbl9hbHBoYSBzIHN0YXJ0ID1cbiAgbGV0IHJlYyBhZHZhbmNlIGkgbGltID1cbiAgICBpZiBpID49IGxpbSB0aGVuIGxpbSBlbHNlXG4gICAgbWF0Y2ggcy5baV0gd2l0aFxuICAgIHwgJ2EnIC4uICd6JyB8ICdBJyAuLiAnWicgfCAnMCcgLi4gJzknIHwgJ18nIC0+IGFkdmFuY2UgKGkgKyAxKSBsaW1cbiAgICB8IF8gLT4gaSBpblxuICBhZHZhbmNlIHN0YXJ0IChTdHJpbmcubGVuZ3RoIHMpXG5cbigqIFdlIGFyZSBqdXN0IGF0IHRoZSBiZWdpbm5pbmcgb2YgYW4gaWRlbnQgaW4gcywgc3RhcnRpbmcgYXQgc3RhcnQuICopXG5sZXQgZmluZF9pZGVudCBzIHN0YXJ0IGxpbSA9XG4gIGlmIHN0YXJ0ID49IGxpbSB0aGVuIHJhaXNlIE5vdF9mb3VuZCBlbHNlXG4gIG1hdGNoIHMuW3N0YXJ0XSB3aXRoXG4gICgqIFBhcmVudGhlc2l6ZWQgaWRlbnQgPyAqKVxuICB8ICcoJyB8ICd7JyBhcyBjIC0+XG4gICAgIGxldCBuZXdfc3RhcnQgPSBzdGFydCArIDEgaW5cbiAgICAgbGV0IHN0b3AgPSBhZHZhbmNlX3RvX2Nsb3NpbmcgYyAoY2xvc2luZyBjKSAwIHMgbmV3X3N0YXJ0IGluXG4gICAgIFN0cmluZy5zdWIgcyBuZXdfc3RhcnQgKHN0b3AgLSBzdGFydCAtIDEpLCBzdG9wICsgMVxuICAoKiBSZWd1bGFyIGlkZW50ICopXG4gIHwgXyAtPlxuICAgICBsZXQgc3RvcCA9IGFkdmFuY2VfdG9fbm9uX2FscGhhIHMgKHN0YXJ0ICsgMSkgaW5cbiAgICAgU3RyaW5nLnN1YiBzIHN0YXJ0IChzdG9wIC0gc3RhcnQpLCBzdG9wXG5cbigqIFN1YnN0aXR1dGUgJGlkZW50LCAkKGlkZW50KSwgb3IgJHtpZGVudH0gaW4gcyxcbiAgICBhY2NvcmRpbmcgdG8gdGhlIGZ1bmN0aW9uIG1hcHBpbmcgZi4gKilcbmxldCBhZGRfc3Vic3RpdHV0ZSBiIGYgcyA9XG4gIGxldCBsaW0gPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgbGV0IHJlYyBzdWJzdCBwcmV2aW91cyBpID1cbiAgICBpZiBpIDwgbGltIHRoZW4gYmVnaW5cbiAgICAgIG1hdGNoIHMuW2ldIHdpdGhcbiAgICAgIHwgJyQnIGFzIGN1cnJlbnQgd2hlbiBwcmV2aW91cyA9ICdcXFxcJyAtPlxuICAgICAgICAgYWRkX2NoYXIgYiBjdXJyZW50O1xuICAgICAgICAgc3Vic3QgJyAnIChpICsgMSlcbiAgICAgIHwgJyQnIC0+XG4gICAgICAgICBsZXQgaiA9IGkgKyAxIGluXG4gICAgICAgICBsZXQgaWRlbnQsIG5leHRfaSA9IGZpbmRfaWRlbnQgcyBqIGxpbSBpblxuICAgICAgICAgYWRkX3N0cmluZyBiIChmIGlkZW50KTtcbiAgICAgICAgIHN1YnN0ICcgJyBuZXh0X2lcbiAgICAgIHwgY3VycmVudCB3aGVuIHByZXZpb3VzID09ICdcXFxcJyAtPlxuICAgICAgICAgYWRkX2NoYXIgYiAnXFxcXCc7XG4gICAgICAgICBhZGRfY2hhciBiIGN1cnJlbnQ7XG4gICAgICAgICBzdWJzdCAnICcgKGkgKyAxKVxuICAgICAgfCAnXFxcXCcgYXMgY3VycmVudCAtPlxuICAgICAgICAgc3Vic3QgY3VycmVudCAoaSArIDEpXG4gICAgICB8IGN1cnJlbnQgLT5cbiAgICAgICAgIGFkZF9jaGFyIGIgY3VycmVudDtcbiAgICAgICAgIHN1YnN0IGN1cnJlbnQgKGkgKyAxKVxuICAgIGVuZCBlbHNlXG4gICAgaWYgcHJldmlvdXMgPSAnXFxcXCcgdGhlbiBhZGRfY2hhciBiIHByZXZpb3VzIGluXG4gIHN1YnN0ICcgJyAwXG5cbmxldCB0cnVuY2F0ZSBiIGxlbiA9XG4gICAgaWYgbGVuIDwgMCB8fCBsZW4gPiBsZW5ndGggYiB0aGVuXG4gICAgICBpbnZhbGlkX2FyZyBcIkJ1ZmZlci50cnVuY2F0ZVwiXG4gICAgZWxzZVxuICAgICAgYi5wb3NpdGlvbiA8LSBsZW5cblxuKCoqIHsxIEl0ZXJhdG9yc30gKilcblxubGV0IHRvX3NlcSBiID1cbiAgbGV0IHJlYyBhdXggaSAoKSA9XG4gICAgKCogTm90ZSB0aGF0IGIucG9zaXRpb24gaXMgbm90IGEgY29uc3RhbnQgYW5kIGNhbm5vdCBiZSBsaWZ0ZWQgb3V0IG9mIGF1eCAqKVxuICAgIGlmIGkgPj0gYi5wb3NpdGlvbiB0aGVuIFNlcS5OaWxcbiAgICBlbHNlXG4gICAgICBsZXQgeCA9IEJ5dGVzLnVuc2FmZV9nZXQgYi5idWZmZXIgaSBpblxuICAgICAgU2VxLkNvbnMgKHgsIGF1eCAoaSsxKSlcbiAgaW5cbiAgYXV4IDBcblxubGV0IHRvX3NlcWkgYiA9XG4gIGxldCByZWMgYXV4IGkgKCkgPVxuICAgICgqIE5vdGUgdGhhdCBiLnBvc2l0aW9uIGlzIG5vdCBhIGNvbnN0YW50IGFuZCBjYW5ub3QgYmUgbGlmdGVkIG91dCBvZiBhdXggKilcbiAgICBpZiBpID49IGIucG9zaXRpb24gdGhlbiBTZXEuTmlsXG4gICAgZWxzZVxuICAgICAgbGV0IHggPSBCeXRlcy51bnNhZmVfZ2V0IGIuYnVmZmVyIGkgaW5cbiAgICAgIFNlcS5Db25zICgoaSx4KSwgYXV4IChpKzEpKVxuICBpblxuICBhdXggMFxuXG5sZXQgYWRkX3NlcSBiIHNlcSA9IFNlcS5pdGVyIChhZGRfY2hhciBiKSBzZXFcblxubGV0IG9mX3NlcSBpID1cbiAgbGV0IGIgPSBjcmVhdGUgMzIgaW5cbiAgYWRkX3NlcSBiIGk7XG4gIGJcblxuKCoqIHs2IEJpbmFyeSBlbmNvZGluZyBvZiBpbnRlZ2Vyc30gKilcblxuZXh0ZXJuYWwgdW5zYWZlX3NldF9pbnQ4IDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0ID0gXCIlYnl0ZXNfdW5zYWZlX3NldFwiXG5leHRlcm5hbCB1bnNhZmVfc2V0X2ludDE2IDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0ID0gXCIlY2FtbF9ieXRlc19zZXQxNnVcIlxuZXh0ZXJuYWwgdW5zYWZlX3NldF9pbnQzMiA6IGJ5dGVzIC0+IGludCAtPiBpbnQzMiAtPiB1bml0ID0gXCIlY2FtbF9ieXRlc19zZXQzMnVcIlxuZXh0ZXJuYWwgdW5zYWZlX3NldF9pbnQ2NCA6IGJ5dGVzIC0+IGludCAtPiBpbnQ2NCAtPiB1bml0ID0gXCIlY2FtbF9ieXRlc19zZXQ2NHVcIlxuZXh0ZXJuYWwgc3dhcDE2IDogaW50IC0+IGludCA9IFwiJWJzd2FwMTZcIlxuZXh0ZXJuYWwgc3dhcDMyIDogaW50MzIgLT4gaW50MzIgPSBcIiVic3dhcF9pbnQzMlwiXG5leHRlcm5hbCBzd2FwNjQgOiBpbnQ2NCAtPiBpbnQ2NCA9IFwiJWJzd2FwX2ludDY0XCJcblxuXG5sZXQgYWRkX2ludDggYiB4ID1cbiAgbGV0IG5ld19wb3NpdGlvbiA9IGIucG9zaXRpb24gKyAxIGluXG4gIGlmIG5ld19wb3NpdGlvbiA+IGIubGVuZ3RoIHRoZW4gcmVzaXplIGIgMTtcbiAgdW5zYWZlX3NldF9pbnQ4IGIuYnVmZmVyIGIucG9zaXRpb24geDtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9pbnQxNl9uZSBiIHggPVxuICBsZXQgbmV3X3Bvc2l0aW9uID0gYi5wb3NpdGlvbiArIDIgaW5cbiAgaWYgbmV3X3Bvc2l0aW9uID4gYi5sZW5ndGggdGhlbiByZXNpemUgYiAyO1xuICB1bnNhZmVfc2V0X2ludDE2IGIuYnVmZmVyIGIucG9zaXRpb24geDtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9pbnQzMl9uZSBiIHggPVxuICBsZXQgbmV3X3Bvc2l0aW9uID0gYi5wb3NpdGlvbiArIDQgaW5cbiAgaWYgbmV3X3Bvc2l0aW9uID4gYi5sZW5ndGggdGhlbiByZXNpemUgYiA0O1xuICB1bnNhZmVfc2V0X2ludDMyIGIuYnVmZmVyIGIucG9zaXRpb24geDtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9pbnQ2NF9uZSBiIHggPVxuICBsZXQgbmV3X3Bvc2l0aW9uID0gYi5wb3NpdGlvbiArIDggaW5cbiAgaWYgbmV3X3Bvc2l0aW9uID4gYi5sZW5ndGggdGhlbiByZXNpemUgYiA4O1xuICB1bnNhZmVfc2V0X2ludDY0IGIuYnVmZmVyIGIucG9zaXRpb24geDtcbiAgYi5wb3NpdGlvbiA8LSBuZXdfcG9zaXRpb25cblxubGV0IGFkZF9pbnQxNl9sZSBiIHggPVxuICBhZGRfaW50MTZfbmUgYiAoaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiBzd2FwMTYgeCBlbHNlIHgpXG5cbmxldCBhZGRfaW50MTZfYmUgYiB4ID1cbiAgYWRkX2ludDE2X25lIGIgKGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4geCBlbHNlIHN3YXAxNiB4KVxuXG5sZXQgYWRkX2ludDMyX2xlIGIgeCA9XG4gIGFkZF9pbnQzMl9uZSBiIChpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXAzMiB4IGVsc2UgeClcblxubGV0IGFkZF9pbnQzMl9iZSBiIHggPVxuICBhZGRfaW50MzJfbmUgYiAoaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiB4IGVsc2Ugc3dhcDMyIHgpXG5cbmxldCBhZGRfaW50NjRfbGUgYiB4ID1cbiAgYWRkX2ludDY0X25lIGIgKGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4gc3dhcDY0IHggZWxzZSB4KVxuXG5sZXQgYWRkX2ludDY0X2JlIGIgeCA9XG4gIGFkZF9pbnQ2NF9uZSBiIChpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHggZWxzZSBzd2FwNjQgeClcblxubGV0IGFkZF91aW50OCA9IGFkZF9pbnQ4XG5sZXQgYWRkX3VpbnQxNl9uZSA9IGFkZF9pbnQxNl9uZVxubGV0IGFkZF91aW50MTZfbGUgPSBhZGRfaW50MTZfbGVcbmxldCBhZGRfdWludDE2X2JlID0gYWRkX2ludDE2X2JlXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIFhhdmllciBMZXJveSBhbmQgUGllcnJlIFdlaXMsIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbm9wZW4gQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzXG5vcGVuIENhbWxpbnRlcm5hbEZvcm1hdFxuXG5sZXQga2ZwcmludGYgayBvIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbWFrZV9wcmludGYgKGZ1biBhY2MgLT4gb3V0cHV0X2FjYyBvIGFjYzsgayBvKSBFbmRfb2ZfYWNjIGZtdFxubGV0IGticHJpbnRmIGsgYiAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIG1ha2VfcHJpbnRmIChmdW4gYWNjIC0+IGJ1ZnB1dF9hY2MgYiBhY2M7IGsgYikgRW5kX29mX2FjYyBmbXRcbmxldCBpa2ZwcmludGYgayBvYyAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIG1ha2VfaXByaW50ZiBrIG9jIGZtdFxubGV0IGlrYnByaW50ZiA9IGlrZnByaW50ZlxuXG5sZXQgZnByaW50ZiBvYyBmbXQgPSBrZnByaW50ZiBpZ25vcmUgb2MgZm10XG5sZXQgYnByaW50ZiBiIGZtdCA9IGticHJpbnRmIGlnbm9yZSBiIGZtdFxubGV0IGlmcHJpbnRmIG9jIGZtdCA9IGlrZnByaW50ZiBpZ25vcmUgb2MgZm10XG5sZXQgaWJwcmludGYgYiBmbXQgPSBpa2JwcmludGYgaWdub3JlIGIgZm10XG5sZXQgcHJpbnRmIGZtdCA9IGZwcmludGYgc3Rkb3V0IGZtdFxubGV0IGVwcmludGYgZm10ID0gZnByaW50ZiBzdGRlcnIgZm10XG5cbmxldCBrc3ByaW50ZiBrIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbGV0IGsnIGFjYyA9XG4gICAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgNjQgaW5cbiAgICBzdHJwdXRfYWNjIGJ1ZiBhY2M7XG4gICAgayAoQnVmZmVyLmNvbnRlbnRzIGJ1ZikgaW5cbiAgbWFrZV9wcmludGYgaycgRW5kX29mX2FjYyBmbXRcblxubGV0IHNwcmludGYgZm10ID0ga3NwcmludGYgKGZ1biBzIC0+IHMpIGZtdFxuXG5sZXQga3ByaW50ZiA9IGtzcHJpbnRmXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgRGFtaWVuIERvbGlnZXosIHByb2pldCBQYXJhLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbnR5cGUga2V5ID0gc3RyaW5nXG50eXBlIGRvYyA9IHN0cmluZ1xudHlwZSB1c2FnZV9tc2cgPSBzdHJpbmdcbnR5cGUgYW5vbl9mdW4gPSAoc3RyaW5nIC0+IHVuaXQpXG5cbnR5cGUgc3BlYyA9XG4gIHwgVW5pdCBvZiAodW5pdCAtPiB1bml0KSAgICAgKCogQ2FsbCB0aGUgZnVuY3Rpb24gd2l0aCB1bml0IGFyZ3VtZW50ICopXG4gIHwgQm9vbCBvZiAoYm9vbCAtPiB1bml0KSAgICAgKCogQ2FsbCB0aGUgZnVuY3Rpb24gd2l0aCBhIGJvb2wgYXJndW1lbnQgKilcbiAgfCBTZXQgb2YgYm9vbCByZWYgICAgICAgICAgICAoKiBTZXQgdGhlIHJlZmVyZW5jZSB0byB0cnVlICopXG4gIHwgQ2xlYXIgb2YgYm9vbCByZWYgICAgICAgICAgKCogU2V0IHRoZSByZWZlcmVuY2UgdG8gZmFsc2UgKilcbiAgfCBTdHJpbmcgb2YgKHN0cmluZyAtPiB1bml0KSAoKiBDYWxsIHRoZSBmdW5jdGlvbiB3aXRoIGEgc3RyaW5nIGFyZ3VtZW50ICopXG4gIHwgU2V0X3N0cmluZyBvZiBzdHJpbmcgcmVmICAgKCogU2V0IHRoZSByZWZlcmVuY2UgdG8gdGhlIHN0cmluZyBhcmd1bWVudCAqKVxuICB8IEludCBvZiAoaW50IC0+IHVuaXQpICAgICAgICgqIENhbGwgdGhlIGZ1bmN0aW9uIHdpdGggYW4gaW50IGFyZ3VtZW50ICopXG4gIHwgU2V0X2ludCBvZiBpbnQgcmVmICAgICAgICAgKCogU2V0IHRoZSByZWZlcmVuY2UgdG8gdGhlIGludCBhcmd1bWVudCAqKVxuICB8IEZsb2F0IG9mIChmbG9hdCAtPiB1bml0KSAgICgqIENhbGwgdGhlIGZ1bmN0aW9uIHdpdGggYSBmbG9hdCBhcmd1bWVudCAqKVxuICB8IFNldF9mbG9hdCBvZiBmbG9hdCByZWYgICAgICgqIFNldCB0aGUgcmVmZXJlbmNlIHRvIHRoZSBmbG9hdCBhcmd1bWVudCAqKVxuICB8IFR1cGxlIG9mIHNwZWMgbGlzdCAgICAgICAgICgqIFRha2Ugc2V2ZXJhbCBhcmd1bWVudHMgYWNjb3JkaW5nIHRvIHRoZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWMgbGlzdCAqKVxuICB8IFN5bWJvbCBvZiBzdHJpbmcgbGlzdCAqIChzdHJpbmcgLT4gdW5pdClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBUYWtlIG9uZSBvZiB0aGUgc3ltYm9scyBhcyBhcmd1bWVudCBhbmRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBzeW1ib2wuICopXG4gIHwgUmVzdCBvZiAoc3RyaW5nIC0+IHVuaXQpICAgKCogU3RvcCBpbnRlcnByZXRpbmcga2V5d29yZHMgYW5kIGNhbGwgdGhlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gd2l0aCBlYWNoIHJlbWFpbmluZyBhcmd1bWVudCAqKVxuICB8IFJlc3RfYWxsIG9mIChzdHJpbmcgbGlzdCAtPiB1bml0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIFN0b3AgaW50ZXJwcmV0aW5nIGtleXdvcmRzIGFuZCBjYWxsIHRoZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHdpdGggYWxsIHJlbWFpbmluZyBhcmd1bWVudHMuICopXG4gIHwgRXhwYW5kIG9mIChzdHJpbmcgLT4gc3RyaW5nIGFycmF5KSAoKiBJZiB0aGUgcmVtYWluaW5nIGFyZ3VtZW50cyB0byBwcm9jZXNzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmUgb2YgdGhlIGZvcm1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtbXCItZm9vXCI7IFwiYXJnXCJdIEAgcmVzdF0gd2hlcmUgXCJmb29cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgcmVnaXN0ZXJlZCBhcyBbRXhwYW5kIGZdLCB0aGVuIHRoZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzIFtmIFwiYXJnXCIgQCByZXN0XSBhcmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NlZC4gT25seSBhbGxvd2VkIGluXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGFyc2VfYW5kX2V4cGFuZF9hcmd2X2R5bmFtaWNdLiAqKVxuXG5leGNlcHRpb24gQmFkIG9mIHN0cmluZ1xuZXhjZXB0aW9uIEhlbHAgb2Ygc3RyaW5nXG5cbnR5cGUgZXJyb3IgPVxuICB8IFVua25vd24gb2Ygc3RyaW5nXG4gIHwgV3Jvbmcgb2Ygc3RyaW5nICogc3RyaW5nICogc3RyaW5nICAoKiBvcHRpb24sIGFjdHVhbCwgZXhwZWN0ZWQgKilcbiAgfCBNaXNzaW5nIG9mIHN0cmluZ1xuICB8IE1lc3NhZ2Ugb2Ygc3RyaW5nXG5cbmV4Y2VwdGlvbiBTdG9wIG9mIGVycm9yICgqIHVzZWQgaW50ZXJuYWxseSAqKVxuXG5vcGVuIFByaW50ZlxuXG5sZXQgcmVjIGFzc29jMyB4IGwgPVxuICBtYXRjaCBsIHdpdGhcbiAgfCBbXSAtPiByYWlzZSBOb3RfZm91bmRcbiAgfCAoeTEsIHkyLCBfKSA6OiBfIHdoZW4geTEgPSB4IC0+IHkyXG4gIHwgXyA6OiB0IC0+IGFzc29jMyB4IHRcblxuXG5sZXQgc3BsaXQgcyA9XG4gIGxldCBpID0gU3RyaW5nLmluZGV4IHMgJz0nIGluXG4gIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgU3RyaW5nLnN1YiBzIDAgaSwgU3RyaW5nLnN1YiBzIChpKzEpIChsZW4tKGkrMSkpXG5cblxubGV0IG1ha2Vfc3ltbGlzdCBwcmVmaXggc2VwIHN1ZmZpeCBsID1cbiAgbWF0Y2ggbCB3aXRoXG4gIHwgW10gLT4gXCI8bm9uZT5cIlxuICB8IGg6OnQgLT4gKExpc3QuZm9sZF9sZWZ0IChmdW4geCB5IC0+IHggXiBzZXAgXiB5KSAocHJlZml4IF4gaCkgdCkgXiBzdWZmaXhcblxuXG5sZXQgcHJpbnRfc3BlYyBidWYgKGtleSwgc3BlYywgZG9jKSA9XG4gIGlmIFN0cmluZy5sZW5ndGggZG9jID4gMCB0aGVuXG4gICAgbWF0Y2ggc3BlYyB3aXRoXG4gICAgfCBTeW1ib2wgKGwsIF8pIC0+XG4gICAgICAgIGJwcmludGYgYnVmIFwiICAlcyAlcyVzXFxuXCIga2V5IChtYWtlX3N5bWxpc3QgXCJ7XCIgXCJ8XCIgXCJ9XCIgbCkgZG9jXG4gICAgfCBfIC0+XG4gICAgICAgIGJwcmludGYgYnVmIFwiICAlcyAlc1xcblwiIGtleSBkb2NcblxuXG5sZXQgaGVscF9hY3Rpb24gKCkgPSByYWlzZSAoU3RvcCAoVW5rbm93biBcIi1oZWxwXCIpKVxuXG5sZXQgYWRkX2hlbHAgc3BlY2xpc3QgPVxuICBsZXQgYWRkMSA9XG4gICAgdHJ5IGlnbm9yZSAoYXNzb2MzIFwiLWhlbHBcIiBzcGVjbGlzdCk7IFtdXG4gICAgd2l0aCBOb3RfZm91bmQgLT5cbiAgICAgICAgICAgIFtcIi1oZWxwXCIsIFVuaXQgaGVscF9hY3Rpb24sIFwiIERpc3BsYXkgdGhpcyBsaXN0IG9mIG9wdGlvbnNcIl1cbiAgYW5kIGFkZDIgPVxuICAgIHRyeSBpZ25vcmUgKGFzc29jMyBcIi0taGVscFwiIHNwZWNsaXN0KTsgW11cbiAgICB3aXRoIE5vdF9mb3VuZCAtPlxuICAgICAgICAgICAgW1wiLS1oZWxwXCIsIFVuaXQgaGVscF9hY3Rpb24sIFwiIERpc3BsYXkgdGhpcyBsaXN0IG9mIG9wdGlvbnNcIl1cbiAgaW5cbiAgc3BlY2xpc3QgQCAoYWRkMSBAIGFkZDIpXG5cblxubGV0IHVzYWdlX2IgYnVmIHNwZWNsaXN0IGVycm1zZyA9XG4gIGJwcmludGYgYnVmIFwiJXNcXG5cIiBlcnJtc2c7XG4gIExpc3QuaXRlciAocHJpbnRfc3BlYyBidWYpIChhZGRfaGVscCBzcGVjbGlzdClcblxuXG5sZXQgdXNhZ2Vfc3RyaW5nIHNwZWNsaXN0IGVycm1zZyA9XG4gIGxldCBiID0gQnVmZmVyLmNyZWF0ZSAyMDAgaW5cbiAgdXNhZ2VfYiBiIHNwZWNsaXN0IGVycm1zZztcbiAgQnVmZmVyLmNvbnRlbnRzIGJcblxuXG5sZXQgdXNhZ2Ugc3BlY2xpc3QgZXJybXNnID1cbiAgZXByaW50ZiBcIiVzXCIgKHVzYWdlX3N0cmluZyBzcGVjbGlzdCBlcnJtc2cpXG5cblxubGV0IGN1cnJlbnQgPSByZWYgMFxuXG5sZXQgYm9vbF9vZl9zdHJpbmdfb3B0IHggPVxuICB0cnkgU29tZSAoYm9vbF9vZl9zdHJpbmcgeClcbiAgd2l0aCBJbnZhbGlkX2FyZ3VtZW50IF8gLT4gTm9uZVxuXG5sZXQgaW50X29mX3N0cmluZ19vcHQgeCA9XG4gIHRyeSBTb21lIChpbnRfb2Zfc3RyaW5nIHgpXG4gIHdpdGggRmFpbHVyZSBfIC0+IE5vbmVcblxubGV0IGZsb2F0X29mX3N0cmluZ19vcHQgeCA9XG4gIHRyeSBTb21lIChmbG9hdF9vZl9zdHJpbmcgeClcbiAgd2l0aCBGYWlsdXJlIF8gLT4gTm9uZVxuXG5sZXQgcGFyc2VfYW5kX2V4cGFuZF9hcmd2X2R5bmFtaWNfYXV4IGFsbG93X2V4cGFuZCBjdXJyZW50IGFyZ3Ygc3BlY2xpc3QgYW5vbmZ1blxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJtc2cgPVxuICBsZXQgaW5pdHBvcyA9ICFjdXJyZW50IGluXG4gIGxldCBjb252ZXJ0X2Vycm9yIGVycm9yID1cbiAgICAoKiBjb252ZXJ0IGFuIGludGVybmFsIGVycm9yIHRvIGEgQmFkL0hlbHAgZXhjZXB0aW9uXG4gICAgICAgKm9yKiBhZGQgdGhlIHByb2dyYW0gbmFtZSBhcyBhIHByZWZpeCBhbmQgdGhlIHVzYWdlIG1lc3NhZ2UgYXMgYSBzdWZmaXhcbiAgICAgICB0byBhbiB1c2VyLXJhaXNlZCBCYWQgZXhjZXB0aW9uLlxuICAgICopXG4gICAgbGV0IGIgPSBCdWZmZXIuY3JlYXRlIDIwMCBpblxuICAgIGxldCBwcm9nbmFtZSA9XG4gICAgICBpZiBpbml0cG9zIDwgKEFycmF5Lmxlbmd0aCAhYXJndikgdGhlbiAhYXJndi4oaW5pdHBvcykgZWxzZSBcIig/KVwiIGluXG4gICAgYmVnaW4gbWF0Y2ggZXJyb3Igd2l0aFxuICAgICAgfCBVbmtub3duIFwiLWhlbHBcIiAtPiAoKVxuICAgICAgfCBVbmtub3duIFwiLS1oZWxwXCIgLT4gKClcbiAgICAgIHwgVW5rbm93biBzIC0+XG4gICAgICAgICAgYnByaW50ZiBiIFwiJXM6IHVua25vd24gb3B0aW9uICclcycuXFxuXCIgcHJvZ25hbWUgc1xuICAgICAgfCBNaXNzaW5nIHMgLT5cbiAgICAgICAgICBicHJpbnRmIGIgXCIlczogb3B0aW9uICclcycgbmVlZHMgYW4gYXJndW1lbnQuXFxuXCIgcHJvZ25hbWUgc1xuICAgICAgfCBXcm9uZyAob3B0LCBhcmcsIGV4cGVjdGVkKSAtPlxuICAgICAgICAgIGJwcmludGYgYiBcIiVzOiB3cm9uZyBhcmd1bWVudCAnJXMnOyBvcHRpb24gJyVzJyBleHBlY3RzICVzLlxcblwiXG4gICAgICAgICAgICAgICAgICBwcm9nbmFtZSBhcmcgb3B0IGV4cGVjdGVkXG4gICAgICB8IE1lc3NhZ2UgcyAtPiAoKiB1c2VyIGVycm9yIG1lc3NhZ2UgKilcbiAgICAgICAgICBicHJpbnRmIGIgXCIlczogJXMuXFxuXCIgcHJvZ25hbWUgc1xuICAgIGVuZDtcbiAgICB1c2FnZV9iIGIgIXNwZWNsaXN0IGVycm1zZztcbiAgICBpZiBlcnJvciA9IFVua25vd24gXCItaGVscFwiIHx8IGVycm9yID0gVW5rbm93biBcIi0taGVscFwiXG4gICAgdGhlbiBIZWxwIChCdWZmZXIuY29udGVudHMgYilcbiAgICBlbHNlIEJhZCAoQnVmZmVyLmNvbnRlbnRzIGIpXG4gIGluXG4gIGluY3IgY3VycmVudDtcbiAgd2hpbGUgIWN1cnJlbnQgPCAoQXJyYXkubGVuZ3RoICFhcmd2KSBkb1xuICAgIGJlZ2luIHRyeVxuICAgICAgbGV0IHMgPSAhYXJndi4oIWN1cnJlbnQpIGluXG4gICAgICBpZiBTdHJpbmcubGVuZ3RoIHMgPj0gMSAmJiBzLlswXSA9ICctJyB0aGVuIGJlZ2luXG4gICAgICAgIGxldCBhY3Rpb24sIGZvbGxvdyA9XG4gICAgICAgICAgdHJ5IGFzc29jMyBzICFzcGVjbGlzdCwgTm9uZVxuICAgICAgICAgIHdpdGggTm90X2ZvdW5kIC0+XG4gICAgICAgICAgdHJ5XG4gICAgICAgICAgICBsZXQga2V5d29yZCwgYXJnID0gc3BsaXQgcyBpblxuICAgICAgICAgICAgYXNzb2MzIGtleXdvcmQgIXNwZWNsaXN0LCBTb21lIGFyZ1xuICAgICAgICAgIHdpdGggTm90X2ZvdW5kIC0+IHJhaXNlIChTdG9wIChVbmtub3duIHMpKVxuICAgICAgICBpblxuICAgICAgICBsZXQgbm9fYXJnICgpID1cbiAgICAgICAgICBtYXRjaCBmb2xsb3cgd2l0aFxuICAgICAgICAgIHwgTm9uZSAtPiAoKVxuICAgICAgICAgIHwgU29tZSBhcmcgLT4gcmFpc2UgKFN0b3AgKFdyb25nIChzLCBhcmcsIFwibm8gYXJndW1lbnRcIikpKSBpblxuICAgICAgICBsZXQgZ2V0X2FyZyAoKSA9XG4gICAgICAgICAgbWF0Y2ggZm9sbG93IHdpdGhcbiAgICAgICAgICB8IE5vbmUgLT5cbiAgICAgICAgICAgICAgaWYgIWN1cnJlbnQgKyAxIDwgKEFycmF5Lmxlbmd0aCAhYXJndikgdGhlbiAhYXJndi4oIWN1cnJlbnQgKyAxKVxuICAgICAgICAgICAgICBlbHNlIHJhaXNlIChTdG9wIChNaXNzaW5nIHMpKVxuICAgICAgICAgIHwgU29tZSBhcmcgLT4gYXJnXG4gICAgICAgIGluXG4gICAgICAgIGxldCBjb25zdW1lX2FyZyAoKSA9XG4gICAgICAgICAgbWF0Y2ggZm9sbG93IHdpdGhcbiAgICAgICAgICB8IE5vbmUgLT4gaW5jciBjdXJyZW50XG4gICAgICAgICAgfCBTb21lIF8gLT4gKClcbiAgICAgICAgaW5cbiAgICAgICAgbGV0IHJlYyB0cmVhdF9hY3Rpb24gPSBmdW5jdGlvblxuICAgICAgICB8IFVuaXQgZiAtPiBub19hcmcgKCk7IGYgKCk7XG4gICAgICAgIHwgQm9vbCBmIC0+XG4gICAgICAgICAgICBsZXQgYXJnID0gZ2V0X2FyZyAoKSBpblxuICAgICAgICAgICAgYmVnaW4gbWF0Y2ggYm9vbF9vZl9zdHJpbmdfb3B0IGFyZyB3aXRoXG4gICAgICAgICAgICB8IE5vbmUgLT4gcmFpc2UgKFN0b3AgKFdyb25nIChzLCBhcmcsIFwiYSBib29sZWFuXCIpKSlcbiAgICAgICAgICAgIHwgU29tZSBzIC0+IGYgc1xuICAgICAgICAgICAgZW5kO1xuICAgICAgICAgICAgY29uc3VtZV9hcmcgKCk7XG4gICAgICAgIHwgU2V0IHIgLT4gbm9fYXJnICgpOyByIDo9IHRydWU7XG4gICAgICAgIHwgQ2xlYXIgciAtPiBub19hcmcgKCk7IHIgOj0gZmFsc2U7XG4gICAgICAgIHwgU3RyaW5nIGYgLT5cbiAgICAgICAgICAgIGxldCBhcmcgPSBnZXRfYXJnICgpIGluXG4gICAgICAgICAgICBmIGFyZztcbiAgICAgICAgICAgIGNvbnN1bWVfYXJnICgpO1xuICAgICAgICB8IFN5bWJvbCAoc3ltYiwgZikgLT5cbiAgICAgICAgICAgIGxldCBhcmcgPSBnZXRfYXJnICgpIGluXG4gICAgICAgICAgICBpZiBMaXN0Lm1lbSBhcmcgc3ltYiB0aGVuIGJlZ2luXG4gICAgICAgICAgICAgIGYgYXJnO1xuICAgICAgICAgICAgICBjb25zdW1lX2FyZyAoKTtcbiAgICAgICAgICAgIGVuZCBlbHNlIGJlZ2luXG4gICAgICAgICAgICAgIHJhaXNlIChTdG9wIChXcm9uZyAocywgYXJnLCBcIm9uZSBvZjogXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4gKG1ha2Vfc3ltbGlzdCBcIlwiIFwiIFwiIFwiXCIgc3ltYikpKSlcbiAgICAgICAgICAgIGVuZFxuICAgICAgICB8IFNldF9zdHJpbmcgciAtPlxuICAgICAgICAgICAgciA6PSBnZXRfYXJnICgpO1xuICAgICAgICAgICAgY29uc3VtZV9hcmcgKCk7XG4gICAgICAgIHwgSW50IGYgLT5cbiAgICAgICAgICAgIGxldCBhcmcgPSBnZXRfYXJnICgpIGluXG4gICAgICAgICAgICBiZWdpbiBtYXRjaCBpbnRfb2Zfc3RyaW5nX29wdCBhcmcgd2l0aFxuICAgICAgICAgICAgfCBOb25lIC0+IHJhaXNlIChTdG9wIChXcm9uZyAocywgYXJnLCBcImFuIGludGVnZXJcIikpKVxuICAgICAgICAgICAgfCBTb21lIHggLT4gZiB4XG4gICAgICAgICAgICBlbmQ7XG4gICAgICAgICAgICBjb25zdW1lX2FyZyAoKTtcbiAgICAgICAgfCBTZXRfaW50IHIgLT5cbiAgICAgICAgICAgIGxldCBhcmcgPSBnZXRfYXJnICgpIGluXG4gICAgICAgICAgICBiZWdpbiBtYXRjaCBpbnRfb2Zfc3RyaW5nX29wdCBhcmcgd2l0aFxuICAgICAgICAgICAgfCBOb25lIC0+IHJhaXNlIChTdG9wIChXcm9uZyAocywgYXJnLCBcImFuIGludGVnZXJcIikpKVxuICAgICAgICAgICAgfCBTb21lIHggLT4gciA6PSB4XG4gICAgICAgICAgICBlbmQ7XG4gICAgICAgICAgICBjb25zdW1lX2FyZyAoKTtcbiAgICAgICAgfCBGbG9hdCBmIC0+XG4gICAgICAgICAgICBsZXQgYXJnID0gZ2V0X2FyZyAoKSBpblxuICAgICAgICAgICAgYmVnaW4gbWF0Y2ggZmxvYXRfb2Zfc3RyaW5nX29wdCBhcmcgd2l0aFxuICAgICAgICAgICAgfCBOb25lIC0+IHJhaXNlIChTdG9wIChXcm9uZyAocywgYXJnLCBcImEgZmxvYXRcIikpKVxuICAgICAgICAgICAgfCBTb21lIHggLT4gZiB4XG4gICAgICAgICAgICBlbmQ7XG4gICAgICAgICAgICBjb25zdW1lX2FyZyAoKTtcbiAgICAgICAgfCBTZXRfZmxvYXQgciAtPlxuICAgICAgICAgICAgbGV0IGFyZyA9IGdldF9hcmcgKCkgaW5cbiAgICAgICAgICAgIGJlZ2luIG1hdGNoIGZsb2F0X29mX3N0cmluZ19vcHQgYXJnIHdpdGhcbiAgICAgICAgICAgIHwgTm9uZSAtPiByYWlzZSAoU3RvcCAoV3JvbmcgKHMsIGFyZywgXCJhIGZsb2F0XCIpKSlcbiAgICAgICAgICAgIHwgU29tZSB4IC0+IHIgOj0geFxuICAgICAgICAgICAgZW5kO1xuICAgICAgICAgICAgY29uc3VtZV9hcmcgKCk7XG4gICAgICAgIHwgVHVwbGUgc3BlY3MgLT5cbiAgICAgICAgICAgIG5vX2FyZyAoKTtcbiAgICAgICAgICAgIExpc3QuaXRlciB0cmVhdF9hY3Rpb24gc3BlY3M7XG4gICAgICAgIHwgUmVzdCBmIC0+XG4gICAgICAgICAgICBub19hcmcgKCk7XG4gICAgICAgICAgICB3aGlsZSAhY3VycmVudCA8IChBcnJheS5sZW5ndGggIWFyZ3YpIC0gMSBkb1xuICAgICAgICAgICAgICBmICFhcmd2LighY3VycmVudCArIDEpO1xuICAgICAgICAgICAgICBjb25zdW1lX2FyZyAoKTtcbiAgICAgICAgICAgIGRvbmU7XG4gICAgICAgIHwgUmVzdF9hbGwgZiAtPlxuICAgICAgICAgICAgbm9fYXJnICgpO1xuICAgICAgICAgICAgbGV0IGFjYyA9IHJlZiBbXSBpblxuICAgICAgICAgICAgd2hpbGUgIWN1cnJlbnQgPCBBcnJheS5sZW5ndGggIWFyZ3YgLSAxIGRvXG4gICAgICAgICAgICAgIGFjYyA6PSAhYXJndi4oIWN1cnJlbnQgKyAxKSA6OiAhYWNjO1xuICAgICAgICAgICAgICBjb25zdW1lX2FyZyAoKTtcbiAgICAgICAgICAgIGRvbmU7XG4gICAgICAgICAgICBmIChMaXN0LnJldiAhYWNjKVxuICAgICAgICB8IEV4cGFuZCBmIC0+XG4gICAgICAgICAgICBpZiBub3QgYWxsb3dfZXhwYW5kIHRoZW5cbiAgICAgICAgICAgICAgcmFpc2UgKEludmFsaWRfYXJndW1lbnQgXCJBcmcuRXhwYW5kIGlzIGlzIG9ubHkgYWxsb3dlZCB3aXRoIFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcucGFyc2VfYW5kX2V4cGFuZF9hcmd2X2R5bmFtaWNcIik7XG4gICAgICAgICAgICBsZXQgYXJnID0gZ2V0X2FyZyAoKSBpblxuICAgICAgICAgICAgbGV0IG5ld2FyZyA9IGYgYXJnIGluXG4gICAgICAgICAgICBjb25zdW1lX2FyZyAoKTtcbiAgICAgICAgICAgIGxldCBiZWZvcmUgPSBBcnJheS5zdWIgIWFyZ3YgMCAoIWN1cnJlbnQgKyAxKVxuICAgICAgICAgICAgYW5kIGFmdGVyID1cbiAgICAgICAgICAgICAgQXJyYXkuc3ViICFhcmd2ICghY3VycmVudCArIDEpXG4gICAgICAgICAgICAgICAgICAgICAgICAoKEFycmF5Lmxlbmd0aCAhYXJndikgLSAhY3VycmVudCAtIDEpIGluXG4gICAgICAgICAgICBhcmd2Oj0gQXJyYXkuY29uY2F0IFtiZWZvcmU7bmV3YXJnO2FmdGVyXTtcbiAgICAgICAgaW5cbiAgICAgICAgdHJlYXRfYWN0aW9uIGFjdGlvbiBlbmRcbiAgICAgIGVsc2UgYW5vbmZ1biBzXG4gICAgd2l0aCB8IEJhZCBtIC0+IHJhaXNlIChjb252ZXJ0X2Vycm9yIChNZXNzYWdlIG0pKTtcbiAgICAgICAgIHwgU3RvcCBlIC0+IHJhaXNlIChjb252ZXJ0X2Vycm9yIGUpO1xuICAgIGVuZDtcbiAgICBpbmNyIGN1cnJlbnRcbiAgZG9uZVxuXG5sZXQgcGFyc2VfYW5kX2V4cGFuZF9hcmd2X2R5bmFtaWMgY3VycmVudCBhcmd2IHNwZWNsaXN0IGFub25mdW4gZXJybXNnID1cbiAgcGFyc2VfYW5kX2V4cGFuZF9hcmd2X2R5bmFtaWNfYXV4IHRydWUgY3VycmVudCBhcmd2IHNwZWNsaXN0IGFub25mdW4gZXJybXNnXG5cbmxldCBwYXJzZV9hcmd2X2R5bmFtaWMgPyhjdXJyZW50PWN1cnJlbnQpIGFyZ3Ygc3BlY2xpc3QgYW5vbmZ1biBlcnJtc2cgPVxuICBwYXJzZV9hbmRfZXhwYW5kX2FyZ3ZfZHluYW1pY19hdXggZmFsc2UgY3VycmVudCAocmVmIGFyZ3YpIHNwZWNsaXN0IGFub25mdW5cbiAgICBlcnJtc2dcblxuXG5sZXQgcGFyc2VfYXJndiA/KGN1cnJlbnQ9Y3VycmVudCkgYXJndiBzcGVjbGlzdCBhbm9uZnVuIGVycm1zZyA9XG4gIHBhcnNlX2FyZ3ZfZHluYW1pYyB+Y3VycmVudDpjdXJyZW50IGFyZ3YgKHJlZiBzcGVjbGlzdCkgYW5vbmZ1biBlcnJtc2dcblxuXG5sZXQgcGFyc2UgbCBmIG1zZyA9XG4gIHRyeVxuICAgIHBhcnNlX2FyZ3YgU3lzLmFyZ3YgbCBmIG1zZ1xuICB3aXRoXG4gIHwgQmFkIG1zZyAtPiBlcHJpbnRmIFwiJXNcIiBtc2c7IGV4aXQgMlxuICB8IEhlbHAgbXNnIC0+IHByaW50ZiBcIiVzXCIgbXNnOyBleGl0IDBcblxuXG5sZXQgcGFyc2VfZHluYW1pYyBsIGYgbXNnID1cbiAgdHJ5XG4gICAgcGFyc2VfYXJndl9keW5hbWljIFN5cy5hcmd2IGwgZiBtc2dcbiAgd2l0aFxuICB8IEJhZCBtc2cgLT4gZXByaW50ZiBcIiVzXCIgbXNnOyBleGl0IDJcbiAgfCBIZWxwIG1zZyAtPiBwcmludGYgXCIlc1wiIG1zZzsgZXhpdCAwXG5cbmxldCBwYXJzZV9leHBhbmQgbCBmIG1zZyA9XG4gIHRyeVxuICAgIGxldCBhcmd2ID0gcmVmIFN5cy5hcmd2IGluXG4gICAgbGV0IHNwZWMgPSByZWYgbCBpblxuICAgIGxldCBjdXJyZW50ID0gcmVmICghY3VycmVudCkgaW5cbiAgICBwYXJzZV9hbmRfZXhwYW5kX2FyZ3ZfZHluYW1pYyBjdXJyZW50IGFyZ3Ygc3BlYyBmIG1zZ1xuICB3aXRoXG4gIHwgQmFkIG1zZyAtPiBlcHJpbnRmIFwiJXNcIiBtc2c7IGV4aXQgMlxuICB8IEhlbHAgbXNnIC0+IHByaW50ZiBcIiVzXCIgbXNnOyBleGl0IDBcblxuXG5sZXQgc2Vjb25kX3dvcmQgcyA9XG4gIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgbGV0IHJlYyBsb29wIG4gPVxuICAgIGlmIG4gPj0gbGVuIHRoZW4gbGVuXG4gICAgZWxzZSBpZiBzLltuXSA9ICcgJyB0aGVuIGxvb3AgKG4rMSlcbiAgICBlbHNlIG5cbiAgaW5cbiAgbWF0Y2ggU3RyaW5nLmluZGV4IHMgJ1xcdCcgd2l0aFxuICB8IG4gLT4gbG9vcCAobisxKVxuICB8IGV4Y2VwdGlvbiBOb3RfZm91bmQgLT5cbiAgICAgIGJlZ2luIG1hdGNoIFN0cmluZy5pbmRleCBzICcgJyB3aXRoXG4gICAgICB8IG4gLT4gbG9vcCAobisxKVxuICAgICAgfCBleGNlcHRpb24gTm90X2ZvdW5kIC0+IGxlblxuICAgICAgZW5kXG5cblxubGV0IG1heF9hcmdfbGVuIGN1ciAoa3dkLCBzcGVjLCBkb2MpID1cbiAgbWF0Y2ggc3BlYyB3aXRoXG4gIHwgU3ltYm9sIF8gLT4gSW50Lm1heCBjdXIgKFN0cmluZy5sZW5ndGgga3dkKVxuICB8IF8gLT4gSW50Lm1heCBjdXIgKFN0cmluZy5sZW5ndGgga3dkICsgc2Vjb25kX3dvcmQgZG9jKVxuXG5cbmxldCByZXBsYWNlX2xlYWRpbmdfdGFiIHMgPVxuICBsZXQgc2VlbiA9IHJlZiBmYWxzZSBpblxuICBTdHJpbmcubWFwIChmdW5jdGlvbiAnXFx0JyB3aGVuIG5vdCAhc2VlbiAtPiBzZWVuIDo9IHRydWU7ICcgJyB8IGMgLT4gYykgc1xuXG5sZXQgYWRkX3BhZGRpbmcgbGVuIGtzZCA9XG4gIG1hdGNoIGtzZCB3aXRoXG4gIHwgKF8sIF8sIFwiXCIpIC0+XG4gICAgICAoKiBEbyBub3QgcGFkIHVuZG9jdW1lbnRlZCBvcHRpb25zLCBzbyB0aGF0IHRoZXkgc3RpbGwgZG9uJ3Qgc2hvdyB1cCB3aGVuXG4gICAgICAgKiBydW4gdGhyb3VnaCBbdXNhZ2VdIG9yIFtwYXJzZV0uICopXG4gICAgICBrc2RcbiAgfCAoa3dkLCAoU3ltYm9sIF8gYXMgc3BlYyksIG1zZykgLT5cbiAgICAgIGxldCBjdXRjb2wgPSBzZWNvbmRfd29yZCBtc2cgaW5cbiAgICAgIGxldCBzcGFjZXMgPSBTdHJpbmcubWFrZSAoKEludC5tYXggMCAobGVuIC0gY3V0Y29sKSkgKyAzKSAnICcgaW5cbiAgICAgIChrd2QsIHNwZWMsIFwiXFxuXCIgXiBzcGFjZXMgXiByZXBsYWNlX2xlYWRpbmdfdGFiIG1zZylcbiAgfCAoa3dkLCBzcGVjLCBtc2cpIC0+XG4gICAgICBsZXQgY3V0Y29sID0gc2Vjb25kX3dvcmQgbXNnIGluXG4gICAgICBsZXQga3dkX2xlbiA9IFN0cmluZy5sZW5ndGgga3dkIGluXG4gICAgICBsZXQgZGlmZiA9IGxlbiAtIGt3ZF9sZW4gLSBjdXRjb2wgaW5cbiAgICAgIGlmIGRpZmYgPD0gMCB0aGVuXG4gICAgICAgIChrd2QsIHNwZWMsIHJlcGxhY2VfbGVhZGluZ190YWIgbXNnKVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgc3BhY2VzID0gU3RyaW5nLm1ha2UgZGlmZiAnICcgaW5cbiAgICAgICAgbGV0IHByZWZpeCA9IFN0cmluZy5zdWIgKHJlcGxhY2VfbGVhZGluZ190YWIgbXNnKSAwIGN1dGNvbCBpblxuICAgICAgICBsZXQgc3VmZml4ID0gU3RyaW5nLnN1YiBtc2cgY3V0Y29sIChTdHJpbmcubGVuZ3RoIG1zZyAtIGN1dGNvbCkgaW5cbiAgICAgICAgKGt3ZCwgc3BlYywgcHJlZml4IF4gc3BhY2VzIF4gc3VmZml4KVxuXG5cbmxldCBhbGlnbiA/KGxpbWl0PW1heF9pbnQpIHNwZWNsaXN0ID1cbiAgbGV0IGNvbXBsZXRlZCA9IGFkZF9oZWxwIHNwZWNsaXN0IGluXG4gIGxldCBsZW4gPSBMaXN0LmZvbGRfbGVmdCBtYXhfYXJnX2xlbiAwIGNvbXBsZXRlZCBpblxuICBsZXQgbGVuID0gSW50Lm1pbiBsZW4gbGltaXQgaW5cbiAgTGlzdC5tYXAgKGFkZF9wYWRkaW5nIGxlbikgY29tcGxldGVkXG5cbmxldCB0cmltX2NyIHMgPVxuICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIGlmIGxlbiA+IDAgJiYgU3RyaW5nLmdldCBzIChsZW4gLSAxKSA9ICdcXHInIHRoZW5cbiAgICBTdHJpbmcuc3ViIHMgMCAobGVuIC0gMSlcbiAgZWxzZVxuICAgIHNcblxubGV0IHJlYWRfYXV4IHRyaW0gc2VwIGZpbGUgPVxuICBsZXQgaWMgPSBvcGVuX2luX2JpbiBmaWxlIGluXG4gIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDIwMCBpblxuICBsZXQgd29yZHMgPSByZWYgW10gaW5cbiAgbGV0IHN0YXNoICgpID1cbiAgICBsZXQgd29yZCA9IEJ1ZmZlci5jb250ZW50cyBidWYgaW5cbiAgICBsZXQgd29yZCA9IGlmIHRyaW0gdGhlbiB0cmltX2NyIHdvcmQgZWxzZSB3b3JkIGluXG4gICAgd29yZHMgOj0gd29yZCA6OiAhd29yZHM7XG4gICAgQnVmZmVyLmNsZWFyIGJ1ZlxuICBpblxuICBiZWdpblxuICAgIHRyeSB3aGlsZSB0cnVlIGRvXG4gICAgICAgIGxldCBjID0gaW5wdXRfY2hhciBpYyBpblxuICAgICAgICBpZiBjID0gc2VwIHRoZW4gc3Rhc2ggKCkgZWxzZSBCdWZmZXIuYWRkX2NoYXIgYnVmIGNcbiAgICAgIGRvbmVcbiAgICB3aXRoIEVuZF9vZl9maWxlIC0+ICgpXG4gIGVuZDtcbiAgaWYgQnVmZmVyLmxlbmd0aCBidWYgPiAwIHRoZW4gc3Rhc2ggKCk7XG4gIGNsb3NlX2luIGljO1xuICBBcnJheS5vZl9saXN0IChMaXN0LnJldiAhd29yZHMpXG5cbmxldCByZWFkX2FyZyA9IHJlYWRfYXV4IHRydWUgJ1xcbidcblxubGV0IHJlYWRfYXJnMCA9IHJlYWRfYXV4IGZhbHNlICdcXHgwMCdcblxubGV0IHdyaXRlX2F1eCBzZXAgZmlsZSBhcmdzID1cbiAgbGV0IG9jID0gb3Blbl9vdXRfYmluIGZpbGUgaW5cbiAgQXJyYXkuaXRlciAoZnVuIHMgLT4gZnByaW50ZiBvYyBcIiVzJWNcIiBzIHNlcCkgYXJncztcbiAgY2xvc2Vfb3V0IG9jXG5cbmxldCB3cml0ZV9hcmcgPSB3cml0ZV9hdXggJ1xcbidcblxubGV0IHdyaXRlX2FyZzAgPSB3cml0ZV9hdXggJ1xceDAwJ1xuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgVGhlIE9DYW1sIHByb2dyYW1tZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxOCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG5leHRlcm5hbCBpZCA6ICdhIC0+ICdhID0gXCIlaWRlbnRpdHlcIlxubGV0IGNvbnN0IGMgXyA9IGNcbmxldCBmbGlwIGYgeCB5ID0gZiB5IHhcbmxldCBuZWdhdGUgcCB2ID0gbm90IChwIHYpXG5cbmV4Y2VwdGlvbiBGaW5hbGx5X3JhaXNlZCBvZiBleG5cblxubGV0ICgpID0gUHJpbnRleGMucmVnaXN0ZXJfcHJpbnRlciBAQCBmdW5jdGlvblxufCBGaW5hbGx5X3JhaXNlZCBleG4gLT4gU29tZSAoXCJGdW4uRmluYWxseV9yYWlzZWQ6IFwiIF4gUHJpbnRleGMudG9fc3RyaW5nIGV4bilcbnwgXyAtPiBOb25lXG5cbmxldCBwcm90ZWN0IH4oZmluYWxseSA6IHVuaXQgLT4gdW5pdCkgd29yayA9XG4gIGxldCBmaW5hbGx5X25vX2V4biAoKSA9XG4gICAgdHJ5IGZpbmFsbHkgKCkgd2l0aCBlIC0+XG4gICAgICBsZXQgYnQgPSBQcmludGV4Yy5nZXRfcmF3X2JhY2t0cmFjZSAoKSBpblxuICAgICAgUHJpbnRleGMucmFpc2Vfd2l0aF9iYWNrdHJhY2UgKEZpbmFsbHlfcmFpc2VkIGUpIGJ0XG4gIGluXG4gIG1hdGNoIHdvcmsgKCkgd2l0aFxuICB8IHJlc3VsdCAtPiBmaW5hbGx5X25vX2V4biAoKSA7IHJlc3VsdFxuICB8IGV4Y2VwdGlvbiB3b3JrX2V4biAtPlxuICAgICAgbGV0IHdvcmtfYnQgPSBQcmludGV4Yy5nZXRfcmF3X2JhY2t0cmFjZSAoKSBpblxuICAgICAgZmluYWxseV9ub19leG4gKCkgO1xuICAgICAgUHJpbnRleGMucmFpc2Vfd2l0aF9iYWNrdHJhY2Ugd29ya19leG4gd29ya19idFxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICBEYW1pZW4gRG9saWdleiwgcHJvamV0IFBhcmEsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICBKYWNxdWVzLUhlbnJpIEpvdXJkYW4sIHByb2pldCBHYWxsaXVtLCBJTlJJQSBQYXJpcyAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5Ni0yMDE2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgICAqKVxuKCogICAgIGV0IGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG50eXBlIHN0YXQgPSB7XG4gIG1pbm9yX3dvcmRzIDogZmxvYXQ7XG4gIHByb21vdGVkX3dvcmRzIDogZmxvYXQ7XG4gIG1ham9yX3dvcmRzIDogZmxvYXQ7XG4gIG1pbm9yX2NvbGxlY3Rpb25zIDogaW50O1xuICBtYWpvcl9jb2xsZWN0aW9ucyA6IGludDtcbiAgaGVhcF93b3JkcyA6IGludDtcbiAgaGVhcF9jaHVua3MgOiBpbnQ7XG4gIGxpdmVfd29yZHMgOiBpbnQ7XG4gIGxpdmVfYmxvY2tzIDogaW50O1xuICBmcmVlX3dvcmRzIDogaW50O1xuICBmcmVlX2Jsb2NrcyA6IGludDtcbiAgbGFyZ2VzdF9mcmVlIDogaW50O1xuICBmcmFnbWVudHMgOiBpbnQ7XG4gIGNvbXBhY3Rpb25zIDogaW50O1xuICB0b3BfaGVhcF93b3JkcyA6IGludDtcbiAgc3RhY2tfc2l6ZSA6IGludDtcbiAgZm9yY2VkX21ham9yX2NvbGxlY3Rpb25zOiBpbnQ7XG59XG5cbnR5cGUgY29udHJvbCA9IHtcbiAgbXV0YWJsZSBtaW5vcl9oZWFwX3NpemUgOiBpbnQ7XG4gIG11dGFibGUgbWFqb3JfaGVhcF9pbmNyZW1lbnQgOiBpbnQ7XG4gIG11dGFibGUgc3BhY2Vfb3ZlcmhlYWQgOiBpbnQ7XG4gIG11dGFibGUgdmVyYm9zZSA6IGludDtcbiAgbXV0YWJsZSBtYXhfb3ZlcmhlYWQgOiBpbnQ7XG4gIG11dGFibGUgc3RhY2tfbGltaXQgOiBpbnQ7XG4gIG11dGFibGUgYWxsb2NhdGlvbl9wb2xpY3kgOiBpbnQ7XG4gIHdpbmRvd19zaXplIDogaW50O1xuICBjdXN0b21fbWFqb3JfcmF0aW8gOiBpbnQ7XG4gIGN1c3RvbV9taW5vcl9yYXRpbyA6IGludDtcbiAgY3VzdG9tX21pbm9yX21heF9zaXplIDogaW50O1xufVxuXG5leHRlcm5hbCBzdGF0IDogdW5pdCAtPiBzdGF0ID0gXCJjYW1sX2djX3N0YXRcIlxuZXh0ZXJuYWwgcXVpY2tfc3RhdCA6IHVuaXQgLT4gc3RhdCA9IFwiY2FtbF9nY19xdWlja19zdGF0XCJcbmV4dGVybmFsIGNvdW50ZXJzIDogdW5pdCAtPiAoZmxvYXQgKiBmbG9hdCAqIGZsb2F0KSA9IFwiY2FtbF9nY19jb3VudGVyc1wiXG5leHRlcm5hbCBtaW5vcl93b3JkcyA6IHVuaXQgLT4gKGZsb2F0IFtAdW5ib3hlZF0pXG4gID0gXCJjYW1sX2djX21pbm9yX3dvcmRzXCIgXCJjYW1sX2djX21pbm9yX3dvcmRzX3VuYm94ZWRcIlxuZXh0ZXJuYWwgZ2V0IDogdW5pdCAtPiBjb250cm9sID0gXCJjYW1sX2djX2dldFwiXG5leHRlcm5hbCBzZXQgOiBjb250cm9sIC0+IHVuaXQgPSBcImNhbWxfZ2Nfc2V0XCJcbmV4dGVybmFsIG1pbm9yIDogdW5pdCAtPiB1bml0ID0gXCJjYW1sX2djX21pbm9yXCJcbmV4dGVybmFsIG1ham9yX3NsaWNlIDogaW50IC0+IGludCA9IFwiY2FtbF9nY19tYWpvcl9zbGljZVwiXG5leHRlcm5hbCBtYWpvciA6IHVuaXQgLT4gdW5pdCA9IFwiY2FtbF9nY19tYWpvclwiXG5leHRlcm5hbCBmdWxsX21ham9yIDogdW5pdCAtPiB1bml0ID0gXCJjYW1sX2djX2Z1bGxfbWFqb3JcIlxuZXh0ZXJuYWwgY29tcGFjdCA6IHVuaXQgLT4gdW5pdCA9IFwiY2FtbF9nY19jb21wYWN0aW9uXCJcbmV4dGVybmFsIGdldF9taW5vcl9mcmVlIDogdW5pdCAtPiBpbnQgPSBcImNhbWxfZ2V0X21pbm9yX2ZyZWVcIlxuZXh0ZXJuYWwgZ2V0X2J1Y2tldCA6IGludCAtPiBpbnQgPSBcImNhbWxfZ2V0X21ham9yX2J1Y2tldFwiIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBnZXRfY3JlZGl0IDogdW5pdCAtPiBpbnQgPSBcImNhbWxfZ2V0X21ham9yX2NyZWRpdFwiIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBodWdlX2ZhbGxiYWNrX2NvdW50IDogdW5pdCAtPiBpbnQgPSBcImNhbWxfZ2NfaHVnZV9mYWxsYmFja19jb3VudFwiXG5leHRlcm5hbCBldmVudGxvZ19wYXVzZSA6IHVuaXQgLT4gdW5pdCA9IFwiY2FtbF9ldmVudGxvZ19wYXVzZVwiXG5leHRlcm5hbCBldmVudGxvZ19yZXN1bWUgOiB1bml0IC0+IHVuaXQgPSBcImNhbWxfZXZlbnRsb2dfcmVzdW1lXCJcblxub3BlbiBQcmludGZcblxubGV0IHByaW50X3N0YXQgYyA9XG4gIGxldCBzdCA9IHN0YXQgKCkgaW5cbiAgZnByaW50ZiBjIFwibWlub3JfY29sbGVjdGlvbnM6ICAgICAgJWRcXG5cIiBzdC5taW5vcl9jb2xsZWN0aW9ucztcbiAgZnByaW50ZiBjIFwibWFqb3JfY29sbGVjdGlvbnM6ICAgICAgJWRcXG5cIiBzdC5tYWpvcl9jb2xsZWN0aW9ucztcbiAgZnByaW50ZiBjIFwiY29tcGFjdGlvbnM6ICAgICAgICAgICAgJWRcXG5cIiBzdC5jb21wYWN0aW9ucztcbiAgZnByaW50ZiBjIFwiZm9yY2VkX21ham9yX2NvbGxlY3Rpb25zOiAlZFxcblwiIHN0LmZvcmNlZF9tYWpvcl9jb2xsZWN0aW9ucztcbiAgZnByaW50ZiBjIFwiXFxuXCI7XG4gIGxldCBsMSA9IFN0cmluZy5sZW5ndGggKHNwcmludGYgXCIlLjBmXCIgc3QubWlub3Jfd29yZHMpIGluXG4gIGZwcmludGYgYyBcIm1pbm9yX3dvcmRzOiAgICAlKi4wZlxcblwiIGwxIHN0Lm1pbm9yX3dvcmRzO1xuICBmcHJpbnRmIGMgXCJwcm9tb3RlZF93b3JkczogJSouMGZcXG5cIiBsMSBzdC5wcm9tb3RlZF93b3JkcztcbiAgZnByaW50ZiBjIFwibWFqb3Jfd29yZHM6ICAgICUqLjBmXFxuXCIgbDEgc3QubWFqb3Jfd29yZHM7XG4gIGZwcmludGYgYyBcIlxcblwiO1xuICBsZXQgbDIgPSBTdHJpbmcubGVuZ3RoIChzcHJpbnRmIFwiJWRcIiBzdC50b3BfaGVhcF93b3JkcykgaW5cbiAgZnByaW50ZiBjIFwidG9wX2hlYXBfd29yZHM6ICUqZFxcblwiIGwyIHN0LnRvcF9oZWFwX3dvcmRzO1xuICBmcHJpbnRmIGMgXCJoZWFwX3dvcmRzOiAgICAgJSpkXFxuXCIgbDIgc3QuaGVhcF93b3JkcztcbiAgZnByaW50ZiBjIFwibGl2ZV93b3JkczogICAgICUqZFxcblwiIGwyIHN0LmxpdmVfd29yZHM7XG4gIGZwcmludGYgYyBcImZyZWVfd29yZHM6ICAgICAlKmRcXG5cIiBsMiBzdC5mcmVlX3dvcmRzO1xuICBmcHJpbnRmIGMgXCJsYXJnZXN0X2ZyZWU6ICAgJSpkXFxuXCIgbDIgc3QubGFyZ2VzdF9mcmVlO1xuICBmcHJpbnRmIGMgXCJmcmFnbWVudHM6ICAgICAgJSpkXFxuXCIgbDIgc3QuZnJhZ21lbnRzO1xuICBmcHJpbnRmIGMgXCJcXG5cIjtcbiAgZnByaW50ZiBjIFwibGl2ZV9ibG9ja3M6ICVkXFxuXCIgc3QubGl2ZV9ibG9ja3M7XG4gIGZwcmludGYgYyBcImZyZWVfYmxvY2tzOiAlZFxcblwiIHN0LmZyZWVfYmxvY2tzO1xuICBmcHJpbnRmIGMgXCJoZWFwX2NodW5rczogJWRcXG5cIiBzdC5oZWFwX2NodW5rc1xuXG5cbmxldCBhbGxvY2F0ZWRfYnl0ZXMgKCkgPVxuICBsZXQgKG1pLCBwcm8sIG1hKSA9IGNvdW50ZXJzICgpIGluXG4gIChtaSArLiBtYSAtLiBwcm8pICouIGZsb2F0X29mX2ludCAoU3lzLndvcmRfc2l6ZSAvIDgpXG5cblxuZXh0ZXJuYWwgZmluYWxpc2UgOiAoJ2EgLT4gdW5pdCkgLT4gJ2EgLT4gdW5pdCA9IFwiY2FtbF9maW5hbF9yZWdpc3RlclwiXG5leHRlcm5hbCBmaW5hbGlzZV9sYXN0IDogKHVuaXQgLT4gdW5pdCkgLT4gJ2EgLT4gdW5pdCA9XG4gIFwiY2FtbF9maW5hbF9yZWdpc3Rlcl9jYWxsZWRfd2l0aG91dF92YWx1ZVwiXG5leHRlcm5hbCBmaW5hbGlzZV9yZWxlYXNlIDogdW5pdCAtPiB1bml0ID0gXCJjYW1sX2ZpbmFsX3JlbGVhc2VcIlxuXG5cbnR5cGUgYWxhcm0gPSBib29sIHJlZlxudHlwZSBhbGFybV9yZWMgPSB7YWN0aXZlIDogYWxhcm07IGYgOiB1bml0IC0+IHVuaXR9XG5cbmxldCByZWMgY2FsbF9hbGFybSBhcmVjID1cbiAgaWYgIShhcmVjLmFjdGl2ZSkgdGhlbiBiZWdpblxuICAgIGZpbmFsaXNlIGNhbGxfYWxhcm0gYXJlYztcbiAgICBhcmVjLmYgKCk7XG4gIGVuZFxuXG5cbmxldCBjcmVhdGVfYWxhcm0gZiA9XG4gIGxldCBhcmVjID0geyBhY3RpdmUgPSByZWYgdHJ1ZTsgZiA9IGYgfSBpblxuICBmaW5hbGlzZSBjYWxsX2FsYXJtIGFyZWM7XG4gIGFyZWMuYWN0aXZlXG5cblxubGV0IGRlbGV0ZV9hbGFybSBhID0gYSA6PSBmYWxzZVxuXG5tb2R1bGUgTWVtcHJvZiA9XG4gIHN0cnVjdFxuICAgIHR5cGUgYWxsb2NhdGlvbl9zb3VyY2UgPSBOb3JtYWwgfCBNYXJzaGFsIHwgQ3VzdG9tXG4gICAgdHlwZSBhbGxvY2F0aW9uID1cbiAgICAgIHsgbl9zYW1wbGVzIDogaW50O1xuICAgICAgICBzaXplIDogaW50O1xuICAgICAgICBzb3VyY2UgOiBhbGxvY2F0aW9uX3NvdXJjZTtcbiAgICAgICAgY2FsbHN0YWNrIDogUHJpbnRleGMucmF3X2JhY2t0cmFjZSB9XG5cbiAgICB0eXBlICgnbWlub3IsICdtYWpvcikgdHJhY2tlciA9IHtcbiAgICAgIGFsbG9jX21pbm9yOiBhbGxvY2F0aW9uIC0+ICdtaW5vciBvcHRpb247XG4gICAgICBhbGxvY19tYWpvcjogYWxsb2NhdGlvbiAtPiAnbWFqb3Igb3B0aW9uO1xuICAgICAgcHJvbW90ZTogJ21pbm9yIC0+ICdtYWpvciBvcHRpb247XG4gICAgICBkZWFsbG9jX21pbm9yOiAnbWlub3IgLT4gdW5pdDtcbiAgICAgIGRlYWxsb2NfbWFqb3I6ICdtYWpvciAtPiB1bml0O1xuICAgIH1cblxuICAgIGxldCBudWxsX3RyYWNrZXIgPSB7XG4gICAgICBhbGxvY19taW5vciA9IChmdW4gXyAtPiBOb25lKTtcbiAgICAgIGFsbG9jX21ham9yID0gKGZ1biBfIC0+IE5vbmUpO1xuICAgICAgcHJvbW90ZSA9IChmdW4gXyAtPiBOb25lKTtcbiAgICAgIGRlYWxsb2NfbWlub3IgPSAoZnVuIF8gLT4gKCkpO1xuICAgICAgZGVhbGxvY19tYWpvciA9IChmdW4gXyAtPiAoKSk7XG4gICAgfVxuXG4gICAgZXh0ZXJuYWwgY19zdGFydCA6XG4gICAgICBmbG9hdCAtPiBpbnQgLT4gKCdtaW5vciwgJ21ham9yKSB0cmFja2VyIC0+IHVuaXRcbiAgICAgID0gXCJjYW1sX21lbXByb2Zfc3RhcnRcIlxuXG4gICAgbGV0IHN0YXJ0XG4gICAgICB+c2FtcGxpbmdfcmF0ZVxuICAgICAgPyhjYWxsc3RhY2tfc2l6ZSA9IG1heF9pbnQpXG4gICAgICB0cmFja2VyID1cbiAgICAgIGNfc3RhcnQgc2FtcGxpbmdfcmF0ZSBjYWxsc3RhY2tfc2l6ZSB0cmFja2VyXG5cbiAgICBleHRlcm5hbCBzdG9wIDogdW5pdCAtPiB1bml0ID0gXCJjYW1sX21lbXByb2Zfc3RvcFwiXG4gIGVuZFxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBNZXNzYWdlIGRpZ2VzdCAoTUQ1KSAqKVxuXG50eXBlIHQgPSBzdHJpbmdcblxubGV0IGNvbXBhcmUgPSBTdHJpbmcuY29tcGFyZVxubGV0IGVxdWFsID0gU3RyaW5nLmVxdWFsXG5cbmV4dGVybmFsIHVuc2FmZV9zdHJpbmc6IHN0cmluZyAtPiBpbnQgLT4gaW50IC0+IHQgPSBcImNhbWxfbWQ1X3N0cmluZ1wiXG5leHRlcm5hbCBjaGFubmVsOiBpbl9jaGFubmVsIC0+IGludCAtPiB0ID0gXCJjYW1sX21kNV9jaGFuXCJcblxubGV0IHN0cmluZyBzdHIgPVxuICB1bnNhZmVfc3RyaW5nIHN0ciAwIChTdHJpbmcubGVuZ3RoIHN0cilcblxubGV0IGJ5dGVzIGIgPSBzdHJpbmcgKEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgYilcblxubGV0IHN1YnN0cmluZyBzdHIgb2ZzIGxlbiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBTdHJpbmcubGVuZ3RoIHN0ciAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiRGlnZXN0LnN1YnN0cmluZ1wiXG4gIGVsc2UgdW5zYWZlX3N0cmluZyBzdHIgb2ZzIGxlblxuXG5sZXQgc3ViYnl0ZXMgYiBvZnMgbGVuID0gc3Vic3RyaW5nIChCeXRlcy51bnNhZmVfdG9fc3RyaW5nIGIpIG9mcyBsZW5cblxubGV0IGZpbGUgZmlsZW5hbWUgPVxuICBsZXQgaWMgPSBvcGVuX2luX2JpbiBmaWxlbmFtZSBpblxuICBtYXRjaCBjaGFubmVsIGljICgtMSkgd2l0aFxuICAgIHwgZCAtPiBjbG9zZV9pbiBpYzsgZFxuICAgIHwgZXhjZXB0aW9uIGUgLT4gY2xvc2VfaW4gaWM7IHJhaXNlIGVcblxubGV0IG91dHB1dCBjaGFuIGRpZ2VzdCA9XG4gIG91dHB1dF9zdHJpbmcgY2hhbiBkaWdlc3RcblxubGV0IGlucHV0IGNoYW4gPSByZWFsbHlfaW5wdXRfc3RyaW5nIGNoYW4gMTZcblxubGV0IGNoYXJfaGV4IG4gPVxuICBDaGFyLnVuc2FmZV9jaHIgKG4gKyBpZiBuIDwgMTAgdGhlbiBDaGFyLmNvZGUgJzAnIGVsc2UgKENoYXIuY29kZSAnYScgLSAxMCkpXG5cbmxldCB0b19oZXggZCA9XG4gIGlmIFN0cmluZy5sZW5ndGggZCA8PiAxNiB0aGVuIGludmFsaWRfYXJnIFwiRGlnZXN0LnRvX2hleFwiO1xuICBsZXQgcmVzdWx0ID0gQnl0ZXMuY3JlYXRlIDMyIGluXG4gIGZvciBpID0gMCB0byAxNSBkb1xuICAgIGxldCB4ID0gQ2hhci5jb2RlIGQuW2ldIGluXG4gICAgQnl0ZXMudW5zYWZlX3NldCByZXN1bHQgKGkqMikgKGNoYXJfaGV4ICh4IGxzciA0KSk7XG4gICAgQnl0ZXMudW5zYWZlX3NldCByZXN1bHQgKGkqMisxKSAoY2hhcl9oZXggKHggbGFuZCAweDBmKSk7XG4gIGRvbmU7XG4gIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcmVzdWx0XG5cbmxldCBmcm9tX2hleCBzID1cbiAgaWYgU3RyaW5nLmxlbmd0aCBzIDw+IDMyIHRoZW4gaW52YWxpZF9hcmcgXCJEaWdlc3QuZnJvbV9oZXhcIjtcbiAgbGV0IGRpZ2l0IGMgPVxuICAgIG1hdGNoIGMgd2l0aFxuICAgIHwgJzAnLi4nOScgLT4gQ2hhci5jb2RlIGMgLSBDaGFyLmNvZGUgJzAnXG4gICAgfCAnQScuLidGJyAtPiBDaGFyLmNvZGUgYyAtIENoYXIuY29kZSAnQScgKyAxMFxuICAgIHwgJ2EnLi4nZicgLT4gQ2hhci5jb2RlIGMgLSBDaGFyLmNvZGUgJ2EnICsgMTBcbiAgICB8IF8gLT4gcmFpc2UgKEludmFsaWRfYXJndW1lbnQgXCJEaWdlc3QuZnJvbV9oZXhcIilcbiAgaW5cbiAgbGV0IGJ5dGUgaSA9IGRpZ2l0IHMuW2ldIGxzbCA0ICsgZGlnaXQgcy5baSsxXSBpblxuICBsZXQgcmVzdWx0ID0gQnl0ZXMuY3JlYXRlIDE2IGluXG4gIGZvciBpID0gMCB0byAxNSBkb1xuICAgIEJ5dGVzLnNldCByZXN1bHQgaSAoQ2hhci5jaHIgKGJ5dGUgKDIgKiBpKSkpO1xuICBkb25lO1xuICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHJlc3VsdFxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBIYXNoIHRhYmxlcyAqKVxuXG4oKiBXZSBkbyBkeW5hbWljIGhhc2hpbmcsIGFuZCByZXNpemUgdGhlIHRhYmxlIGFuZCByZWhhc2ggdGhlIGVsZW1lbnRzXG4gICB3aGVuIGJ1Y2tldHMgYmVjb21lIHRvbyBsb25nLiAqKVxuXG50eXBlICgnYSwgJ2IpIHQgPVxuICB7IG11dGFibGUgc2l6ZTogaW50OyAgICAgICAgICAgICAgICAgICAgICAgICgqIG51bWJlciBvZiBlbnRyaWVzICopXG4gICAgbXV0YWJsZSBkYXRhOiAoJ2EsICdiKSBidWNrZXRsaXN0IGFycmF5OyAgKCogdGhlIGJ1Y2tldHMgKilcbiAgICBzZWVkOiBpbnQ7ICAgICAgICAgICAgICAgICAgICAgICAgKCogZm9yIHJhbmRvbWl6YXRpb24gKilcbiAgICBtdXRhYmxlIGluaXRpYWxfc2l6ZTogaW50OyAgICAgICAgICAgICAgICAoKiBpbml0aWFsIGFycmF5IHNpemUgKilcbiAgfVxuXG5hbmQgKCdhLCAnYikgYnVja2V0bGlzdCA9XG4gICAgRW1wdHlcbiAgfCBDb25zIG9mIHsgbXV0YWJsZSBrZXk6ICdhO1xuICAgICAgICAgICAgICBtdXRhYmxlIGRhdGE6ICdiO1xuICAgICAgICAgICAgICBtdXRhYmxlIG5leHQ6ICgnYSwgJ2IpIGJ1Y2tldGxpc3QgfVxuXG4oKiBUaGUgc2lnbiBvZiBpbml0aWFsX3NpemUgZW5jb2RlcyB0aGUgZmFjdCB0aGF0IGEgdHJhdmVyc2FsIGlzXG4gICBvbmdvaW5nIG9yIG5vdC5cblxuICAgVGhpcyBkaXNhYmxlcyB0aGUgZWZmaWNpZW50IGluIHBsYWNlIGltcGxlbWVudGF0aW9uIG9mIHJlc2l6aW5nLlxuKilcblxubGV0IG9uZ29pbmdfdHJhdmVyc2FsIGggPVxuICBPYmouc2l6ZSAoT2JqLnJlcHIgaCkgPCA0ICgqIGNvbXBhdGliaWxpdHkgd2l0aCBvbGQgaGFzaCB0YWJsZXMgKilcbiAgfHwgaC5pbml0aWFsX3NpemUgPCAwXG5cbmxldCBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGggPVxuICBoLmluaXRpYWxfc2l6ZSA8LSAtIGguaW5pdGlhbF9zaXplXG5cbigqIFRvIHBpY2sgcmFuZG9tIHNlZWRzIGlmIHJlcXVlc3RlZCAqKVxuXG5sZXQgcmFuZG9taXplZF9kZWZhdWx0ID1cbiAgbGV0IHBhcmFtcyA9XG4gICAgdHJ5IFN5cy5nZXRlbnYgXCJPQ0FNTFJVTlBBUkFNXCIgd2l0aCBOb3RfZm91bmQgLT5cbiAgICB0cnkgU3lzLmdldGVudiBcIkNBTUxSVU5QQVJBTVwiIHdpdGggTm90X2ZvdW5kIC0+IFwiXCIgaW5cbiAgU3RyaW5nLmNvbnRhaW5zIHBhcmFtcyAnUidcblxubGV0IHJhbmRvbWl6ZWQgPSByZWYgcmFuZG9taXplZF9kZWZhdWx0XG5cbmxldCByYW5kb21pemUgKCkgPSByYW5kb21pemVkIDo9IHRydWVcbmxldCBpc19yYW5kb21pemVkICgpID0gIXJhbmRvbWl6ZWRcblxubGV0IHBybmcgPSBsYXp5IChSYW5kb20uU3RhdGUubWFrZV9zZWxmX2luaXQoKSlcblxuKCogRnVuY3Rpb25zIHdoaWNoIGFwcGVhciBiZWZvcmUgdGhlIGZ1bmN0b3JpYWwgaW50ZXJmYWNlIG11c3QgZWl0aGVyIGJlXG4gICBpbmRlcGVuZGVudCBvZiB0aGUgaGFzaCBmdW5jdGlvbiBvciB0YWtlIGl0IGFzIGEgcGFyYW1ldGVyIChzZWUgIzIyMDIgYW5kXG4gICBjb2RlIGJlbG93IHRoZSBmdW5jdG9yIGRlZmluaXRpb25zLiAqKVxuXG4oKiBDcmVhdGluZyBhIGZyZXNoLCBlbXB0eSB0YWJsZSAqKVxuXG5sZXQgcmVjIHBvd2VyXzJfYWJvdmUgeCBuID1cbiAgaWYgeCA+PSBuIHRoZW4geFxuICBlbHNlIGlmIHggKiAyID4gU3lzLm1heF9hcnJheV9sZW5ndGggdGhlbiB4XG4gIGVsc2UgcG93ZXJfMl9hYm92ZSAoeCAqIDIpIG5cblxubGV0IGNyZWF0ZSA/KHJhbmRvbSA9ICFyYW5kb21pemVkKSBpbml0aWFsX3NpemUgPVxuICBsZXQgcyA9IHBvd2VyXzJfYWJvdmUgMTYgaW5pdGlhbF9zaXplIGluXG4gIGxldCBzZWVkID0gaWYgcmFuZG9tIHRoZW4gUmFuZG9tLlN0YXRlLmJpdHMgKExhenkuZm9yY2UgcHJuZykgZWxzZSAwIGluXG4gIHsgaW5pdGlhbF9zaXplID0gczsgc2l6ZSA9IDA7IHNlZWQgPSBzZWVkOyBkYXRhID0gQXJyYXkubWFrZSBzIEVtcHR5IH1cblxubGV0IGNsZWFyIGggPVxuICBpZiBoLnNpemUgPiAwIHRoZW4gYmVnaW5cbiAgICBoLnNpemUgPC0gMDtcbiAgICBBcnJheS5maWxsIGguZGF0YSAwIChBcnJheS5sZW5ndGggaC5kYXRhKSBFbXB0eVxuICBlbmRcblxubGV0IHJlc2V0IGggPVxuICBsZXQgbGVuID0gQXJyYXkubGVuZ3RoIGguZGF0YSBpblxuICBpZiBPYmouc2l6ZSAoT2JqLnJlcHIgaCkgPCA0ICgqIGNvbXBhdGliaWxpdHkgd2l0aCBvbGQgaGFzaCB0YWJsZXMgKilcbiAgICB8fCBsZW4gPSBhYnMgaC5pbml0aWFsX3NpemUgdGhlblxuICAgIGNsZWFyIGhcbiAgZWxzZSBiZWdpblxuICAgIGguc2l6ZSA8LSAwO1xuICAgIGguZGF0YSA8LSBBcnJheS5tYWtlIChhYnMgaC5pbml0aWFsX3NpemUpIEVtcHR5XG4gIGVuZFxuXG5sZXQgY29weV9idWNrZXRsaXN0ID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPiBFbXB0eVxuICB8IENvbnMge2tleTsgZGF0YTsgbmV4dH0gLT5cbiAgICAgIGxldCByZWMgbG9vcCBwcmVjID0gZnVuY3Rpb25cbiAgICAgICAgfCBFbXB0eSAtPiAoKVxuICAgICAgICB8IENvbnMge2tleTsgZGF0YTsgbmV4dH0gLT5cbiAgICAgICAgICAgIGxldCByID0gQ29ucyB7a2V5OyBkYXRhOyBuZXh0fSBpblxuICAgICAgICAgICAgYmVnaW4gbWF0Y2ggcHJlYyB3aXRoXG4gICAgICAgICAgICB8IEVtcHR5IC0+IGFzc2VydCBmYWxzZVxuICAgICAgICAgICAgfCBDb25zIHByZWMgLT4gIHByZWMubmV4dCA8LSByXG4gICAgICAgICAgICBlbmQ7XG4gICAgICAgICAgICBsb29wIHIgbmV4dFxuICAgICAgaW5cbiAgICAgIGxldCByID0gQ29ucyB7a2V5OyBkYXRhOyBuZXh0fSBpblxuICAgICAgbG9vcCByIG5leHQ7XG4gICAgICByXG5cbmxldCBjb3B5IGggPSB7IGggd2l0aCBkYXRhID0gQXJyYXkubWFwIGNvcHlfYnVja2V0bGlzdCBoLmRhdGEgfVxuXG5sZXQgbGVuZ3RoIGggPSBoLnNpemVcblxubGV0IGluc2VydF9hbGxfYnVja2V0cyBpbmRleGZ1biBpbnBsYWNlIG9kYXRhIG5kYXRhID1cbiAgbGV0IG5zaXplID0gQXJyYXkubGVuZ3RoIG5kYXRhIGluXG4gIGxldCBuZGF0YV90YWlsID0gQXJyYXkubWFrZSBuc2l6ZSBFbXB0eSBpblxuICBsZXQgcmVjIGluc2VydF9idWNrZXQgPSBmdW5jdGlvblxuICAgIHwgRW1wdHkgLT4gKClcbiAgICB8IENvbnMge2tleTsgZGF0YTsgbmV4dH0gYXMgY2VsbCAtPlxuICAgICAgICBsZXQgY2VsbCA9XG4gICAgICAgICAgaWYgaW5wbGFjZSB0aGVuIGNlbGxcbiAgICAgICAgICBlbHNlIENvbnMge2tleTsgZGF0YTsgbmV4dCA9IEVtcHR5fVxuICAgICAgICBpblxuICAgICAgICBsZXQgbmlkeCA9IGluZGV4ZnVuIGtleSBpblxuICAgICAgICBiZWdpbiBtYXRjaCBuZGF0YV90YWlsLihuaWR4KSB3aXRoXG4gICAgICAgIHwgRW1wdHkgLT4gbmRhdGEuKG5pZHgpIDwtIGNlbGw7XG4gICAgICAgIHwgQ29ucyB0YWlsIC0+IHRhaWwubmV4dCA8LSBjZWxsO1xuICAgICAgICBlbmQ7XG4gICAgICAgIG5kYXRhX3RhaWwuKG5pZHgpIDwtIGNlbGw7XG4gICAgICAgIGluc2VydF9idWNrZXQgbmV4dFxuICBpblxuICBmb3IgaSA9IDAgdG8gQXJyYXkubGVuZ3RoIG9kYXRhIC0gMSBkb1xuICAgIGluc2VydF9idWNrZXQgb2RhdGEuKGkpXG4gIGRvbmU7XG4gIGlmIGlucGxhY2UgdGhlblxuICAgIGZvciBpID0gMCB0byBuc2l6ZSAtIDEgZG9cbiAgICAgIG1hdGNoIG5kYXRhX3RhaWwuKGkpIHdpdGhcbiAgICAgIHwgRW1wdHkgLT4gKClcbiAgICAgIHwgQ29ucyB0YWlsIC0+IHRhaWwubmV4dCA8LSBFbXB0eVxuICAgIGRvbmVcblxubGV0IHJlc2l6ZSBpbmRleGZ1biBoID1cbiAgbGV0IG9kYXRhID0gaC5kYXRhIGluXG4gIGxldCBvc2l6ZSA9IEFycmF5Lmxlbmd0aCBvZGF0YSBpblxuICBsZXQgbnNpemUgPSBvc2l6ZSAqIDIgaW5cbiAgaWYgbnNpemUgPCBTeXMubWF4X2FycmF5X2xlbmd0aCB0aGVuIGJlZ2luXG4gICAgbGV0IG5kYXRhID0gQXJyYXkubWFrZSBuc2l6ZSBFbXB0eSBpblxuICAgIGxldCBpbnBsYWNlID0gbm90IChvbmdvaW5nX3RyYXZlcnNhbCBoKSBpblxuICAgIGguZGF0YSA8LSBuZGF0YTsgICAgICAgICAgKCogc28gdGhhdCBpbmRleGZ1biBzZWVzIHRoZSBuZXcgYnVja2V0IGNvdW50ICopXG4gICAgaW5zZXJ0X2FsbF9idWNrZXRzIChpbmRleGZ1biBoKSBpbnBsYWNlIG9kYXRhIG5kYXRhXG4gIGVuZFxuXG5sZXQgaXRlciBmIGggPVxuICBsZXQgcmVjIGRvX2J1Y2tldCA9IGZ1bmN0aW9uXG4gICAgfCBFbXB0eSAtPlxuICAgICAgICAoKVxuICAgIHwgQ29uc3trZXk7IGRhdGE7IG5leHR9IC0+XG4gICAgICAgIGYga2V5IGRhdGE7IGRvX2J1Y2tldCBuZXh0IGluXG4gIGxldCBvbGRfdHJhdiA9IG9uZ29pbmdfdHJhdmVyc2FsIGggaW5cbiAgaWYgbm90IG9sZF90cmF2IHRoZW4gZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoO1xuICB0cnlcbiAgICBsZXQgZCA9IGguZGF0YSBpblxuICAgIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggZCAtIDEgZG9cbiAgICAgIGRvX2J1Y2tldCBkLihpKVxuICAgIGRvbmU7XG4gICAgaWYgbm90IG9sZF90cmF2IHRoZW4gZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoO1xuICB3aXRoIGV4biB3aGVuIG5vdCBvbGRfdHJhdiAtPlxuICAgIGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaDtcbiAgICByYWlzZSBleG5cblxubGV0IHJlYyBmaWx0ZXJfbWFwX2lucGxhY2VfYnVja2V0IGYgaCBpIHByZWMgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+XG4gICAgICBiZWdpbiBtYXRjaCBwcmVjIHdpdGhcbiAgICAgIHwgRW1wdHkgLT4gaC5kYXRhLihpKSA8LSBFbXB0eVxuICAgICAgfCBDb25zIGMgLT4gYy5uZXh0IDwtIEVtcHR5XG4gICAgICBlbmRcbiAgfCAoQ29ucyAoe2tleTsgZGF0YTsgbmV4dH0gYXMgYykpIGFzIHNsb3QgLT5cbiAgICAgIGJlZ2luIG1hdGNoIGYga2V5IGRhdGEgd2l0aFxuICAgICAgfCBOb25lIC0+XG4gICAgICAgICAgaC5zaXplIDwtIGguc2l6ZSAtIDE7XG4gICAgICAgICAgZmlsdGVyX21hcF9pbnBsYWNlX2J1Y2tldCBmIGggaSBwcmVjIG5leHRcbiAgICAgIHwgU29tZSBkYXRhIC0+XG4gICAgICAgICAgYmVnaW4gbWF0Y2ggcHJlYyB3aXRoXG4gICAgICAgICAgfCBFbXB0eSAtPiBoLmRhdGEuKGkpIDwtIHNsb3RcbiAgICAgICAgICB8IENvbnMgYyAtPiBjLm5leHQgPC0gc2xvdFxuICAgICAgICAgIGVuZDtcbiAgICAgICAgICBjLmRhdGEgPC0gZGF0YTtcbiAgICAgICAgICBmaWx0ZXJfbWFwX2lucGxhY2VfYnVja2V0IGYgaCBpIHNsb3QgbmV4dFxuICAgICAgZW5kXG5cbmxldCBmaWx0ZXJfbWFwX2lucGxhY2UgZiBoID1cbiAgbGV0IGQgPSBoLmRhdGEgaW5cbiAgbGV0IG9sZF90cmF2ID0gb25nb2luZ190cmF2ZXJzYWwgaCBpblxuICBpZiBub3Qgb2xkX3RyYXYgdGhlbiBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGg7XG4gIHRyeVxuICAgIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggZCAtIDEgZG9cbiAgICAgIGZpbHRlcl9tYXBfaW5wbGFjZV9idWNrZXQgZiBoIGkgRW1wdHkgaC5kYXRhLihpKVxuICAgIGRvbmU7XG4gICAgaWYgbm90IG9sZF90cmF2IHRoZW4gZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoXG4gIHdpdGggZXhuIHdoZW4gbm90IG9sZF90cmF2IC0+XG4gICAgZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoO1xuICAgIHJhaXNlIGV4blxuXG5sZXQgZm9sZCBmIGggaW5pdCA9XG4gIGxldCByZWMgZG9fYnVja2V0IGIgYWNjdSA9XG4gICAgbWF0Y2ggYiB3aXRoXG4gICAgICBFbXB0eSAtPlxuICAgICAgICBhY2N1XG4gICAgfCBDb25ze2tleTsgZGF0YTsgbmV4dH0gLT5cbiAgICAgICAgZG9fYnVja2V0IG5leHQgKGYga2V5IGRhdGEgYWNjdSkgaW5cbiAgbGV0IG9sZF90cmF2ID0gb25nb2luZ190cmF2ZXJzYWwgaCBpblxuICBpZiBub3Qgb2xkX3RyYXYgdGhlbiBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGg7XG4gIHRyeVxuICAgIGxldCBkID0gaC5kYXRhIGluXG4gICAgbGV0IGFjY3UgPSByZWYgaW5pdCBpblxuICAgIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggZCAtIDEgZG9cbiAgICAgIGFjY3UgOj0gZG9fYnVja2V0IGQuKGkpICFhY2N1XG4gICAgZG9uZTtcbiAgICBpZiBub3Qgb2xkX3RyYXYgdGhlbiBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGg7XG4gICAgIWFjY3VcbiAgd2l0aCBleG4gd2hlbiBub3Qgb2xkX3RyYXYgLT5cbiAgICBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGg7XG4gICAgcmFpc2UgZXhuXG5cbnR5cGUgc3RhdGlzdGljcyA9IHtcbiAgbnVtX2JpbmRpbmdzOiBpbnQ7XG4gIG51bV9idWNrZXRzOiBpbnQ7XG4gIG1heF9idWNrZXRfbGVuZ3RoOiBpbnQ7XG4gIGJ1Y2tldF9oaXN0b2dyYW06IGludCBhcnJheVxufVxuXG5sZXQgcmVjIGJ1Y2tldF9sZW5ndGggYWNjdSA9IGZ1bmN0aW9uXG4gIHwgRW1wdHkgLT4gYWNjdVxuICB8IENvbnN7bmV4dH0gLT4gYnVja2V0X2xlbmd0aCAoYWNjdSArIDEpIG5leHRcblxubGV0IHN0YXRzIGggPVxuICBsZXQgbWJsID1cbiAgICBBcnJheS5mb2xkX2xlZnQgKGZ1biBtIGIgLT4gSW50Lm1heCBtIChidWNrZXRfbGVuZ3RoIDAgYikpIDAgaC5kYXRhIGluXG4gIGxldCBoaXN0byA9IEFycmF5Lm1ha2UgKG1ibCArIDEpIDAgaW5cbiAgQXJyYXkuaXRlclxuICAgIChmdW4gYiAtPlxuICAgICAgbGV0IGwgPSBidWNrZXRfbGVuZ3RoIDAgYiBpblxuICAgICAgaGlzdG8uKGwpIDwtIGhpc3RvLihsKSArIDEpXG4gICAgaC5kYXRhO1xuICB7IG51bV9iaW5kaW5ncyA9IGguc2l6ZTtcbiAgICBudW1fYnVja2V0cyA9IEFycmF5Lmxlbmd0aCBoLmRhdGE7XG4gICAgbWF4X2J1Y2tldF9sZW5ndGggPSBtYmw7XG4gICAgYnVja2V0X2hpc3RvZ3JhbSA9IGhpc3RvIH1cblxuKCoqIHsxIEl0ZXJhdG9yc30gKilcblxubGV0IHRvX3NlcSB0YmwgPVxuICAoKiBjYXB0dXJlIGN1cnJlbnQgYXJyYXksIHNvIHRoYXQgZXZlbiBpZiB0aGUgdGFibGUgaXMgcmVzaXplZCB3ZVxuICAgICBrZWVwIGl0ZXJhdGluZyBvbiB0aGUgc2FtZSBhcnJheSAqKVxuICBsZXQgdGJsX2RhdGEgPSB0YmwuZGF0YSBpblxuICAoKiBzdGF0ZTogaW5kZXggKiBuZXh0IGJ1Y2tldCB0byB0cmF2ZXJzZSAqKVxuICBsZXQgcmVjIGF1eCBpIGJ1Y2sgKCkgPSBtYXRjaCBidWNrIHdpdGhcbiAgICB8IEVtcHR5IC0+XG4gICAgICAgIGlmIGkgPSBBcnJheS5sZW5ndGggdGJsX2RhdGFcbiAgICAgICAgdGhlbiBTZXEuTmlsXG4gICAgICAgIGVsc2UgYXV4KGkrMSkgdGJsX2RhdGEuKGkpICgpXG4gICAgfCBDb25zIHtrZXk7IGRhdGE7IG5leHR9IC0+XG4gICAgICAgIFNlcS5Db25zICgoa2V5LCBkYXRhKSwgYXV4IGkgbmV4dClcbiAgaW5cbiAgYXV4IDAgRW1wdHlcblxubGV0IHRvX3NlcV9rZXlzIG0gPSBTZXEubWFwIGZzdCAodG9fc2VxIG0pXG5cbmxldCB0b19zZXFfdmFsdWVzIG0gPSBTZXEubWFwIHNuZCAodG9fc2VxIG0pXG5cbigqIEZ1bmN0b3JpYWwgaW50ZXJmYWNlICopXG5cbm1vZHVsZSB0eXBlIEhhc2hlZFR5cGUgPVxuICBzaWdcbiAgICB0eXBlIHRcbiAgICB2YWwgZXF1YWw6IHQgLT4gdCAtPiBib29sXG4gICAgdmFsIGhhc2g6IHQgLT4gaW50XG4gIGVuZFxuXG5tb2R1bGUgdHlwZSBTZWVkZWRIYXNoZWRUeXBlID1cbiAgc2lnXG4gICAgdHlwZSB0XG4gICAgdmFsIGVxdWFsOiB0IC0+IHQgLT4gYm9vbFxuICAgIHZhbCBoYXNoOiBpbnQgLT4gdCAtPiBpbnRcbiAgZW5kXG5cbm1vZHVsZSB0eXBlIFMgPVxuICBzaWdcbiAgICB0eXBlIGtleVxuICAgIHR5cGUgISdhIHRcbiAgICB2YWwgY3JlYXRlOiBpbnQgLT4gJ2EgdFxuICAgIHZhbCBjbGVhciA6ICdhIHQgLT4gdW5pdFxuICAgIHZhbCByZXNldCA6ICdhIHQgLT4gdW5pdFxuICAgIHZhbCBjb3B5OiAnYSB0IC0+ICdhIHRcbiAgICB2YWwgYWRkOiAnYSB0IC0+IGtleSAtPiAnYSAtPiB1bml0XG4gICAgdmFsIHJlbW92ZTogJ2EgdCAtPiBrZXkgLT4gdW5pdFxuICAgIHZhbCBmaW5kOiAnYSB0IC0+IGtleSAtPiAnYVxuICAgIHZhbCBmaW5kX29wdDogJ2EgdCAtPiBrZXkgLT4gJ2Egb3B0aW9uXG4gICAgdmFsIGZpbmRfYWxsOiAnYSB0IC0+IGtleSAtPiAnYSBsaXN0XG4gICAgdmFsIHJlcGxhY2UgOiAnYSB0IC0+IGtleSAtPiAnYSAtPiB1bml0XG4gICAgdmFsIG1lbSA6ICdhIHQgLT4ga2V5IC0+IGJvb2xcbiAgICB2YWwgaXRlcjogKGtleSAtPiAnYSAtPiB1bml0KSAtPiAnYSB0IC0+IHVuaXRcbiAgICB2YWwgZmlsdGVyX21hcF9pbnBsYWNlOiAoa2V5IC0+ICdhIC0+ICdhIG9wdGlvbikgLT4gJ2EgdCAtPiB1bml0XG4gICAgdmFsIGZvbGQ6IChrZXkgLT4gJ2EgLT4gJ2IgLT4gJ2IpIC0+ICdhIHQgLT4gJ2IgLT4gJ2JcbiAgICB2YWwgbGVuZ3RoOiAnYSB0IC0+IGludFxuICAgIHZhbCBzdGF0czogJ2EgdCAtPiBzdGF0aXN0aWNzXG4gICAgdmFsIHRvX3NlcSA6ICdhIHQgLT4gKGtleSAqICdhKSBTZXEudFxuICAgIHZhbCB0b19zZXFfa2V5cyA6IF8gdCAtPiBrZXkgU2VxLnRcbiAgICB2YWwgdG9fc2VxX3ZhbHVlcyA6ICdhIHQgLT4gJ2EgU2VxLnRcbiAgICB2YWwgYWRkX3NlcSA6ICdhIHQgLT4gKGtleSAqICdhKSBTZXEudCAtPiB1bml0XG4gICAgdmFsIHJlcGxhY2Vfc2VxIDogJ2EgdCAtPiAoa2V5ICogJ2EpIFNlcS50IC0+IHVuaXRcbiAgICB2YWwgb2Zfc2VxIDogKGtleSAqICdhKSBTZXEudCAtPiAnYSB0XG4gIGVuZFxuXG5tb2R1bGUgdHlwZSBTZWVkZWRTID1cbiAgc2lnXG4gICAgdHlwZSBrZXlcbiAgICB0eXBlICEnYSB0XG4gICAgdmFsIGNyZWF0ZSA6ID9yYW5kb206Ym9vbCAtPiBpbnQgLT4gJ2EgdFxuICAgIHZhbCBjbGVhciA6ICdhIHQgLT4gdW5pdFxuICAgIHZhbCByZXNldCA6ICdhIHQgLT4gdW5pdFxuICAgIHZhbCBjb3B5IDogJ2EgdCAtPiAnYSB0XG4gICAgdmFsIGFkZCA6ICdhIHQgLT4ga2V5IC0+ICdhIC0+IHVuaXRcbiAgICB2YWwgcmVtb3ZlIDogJ2EgdCAtPiBrZXkgLT4gdW5pdFxuICAgIHZhbCBmaW5kIDogJ2EgdCAtPiBrZXkgLT4gJ2FcbiAgICB2YWwgZmluZF9vcHQ6ICdhIHQgLT4ga2V5IC0+ICdhIG9wdGlvblxuICAgIHZhbCBmaW5kX2FsbCA6ICdhIHQgLT4ga2V5IC0+ICdhIGxpc3RcbiAgICB2YWwgcmVwbGFjZSA6ICdhIHQgLT4ga2V5IC0+ICdhIC0+IHVuaXRcbiAgICB2YWwgbWVtIDogJ2EgdCAtPiBrZXkgLT4gYm9vbFxuICAgIHZhbCBpdGVyIDogKGtleSAtPiAnYSAtPiB1bml0KSAtPiAnYSB0IC0+IHVuaXRcbiAgICB2YWwgZmlsdGVyX21hcF9pbnBsYWNlOiAoa2V5IC0+ICdhIC0+ICdhIG9wdGlvbikgLT4gJ2EgdCAtPiB1bml0XG4gICAgdmFsIGZvbGQgOiAoa2V5IC0+ICdhIC0+ICdiIC0+ICdiKSAtPiAnYSB0IC0+ICdiIC0+ICdiXG4gICAgdmFsIGxlbmd0aCA6ICdhIHQgLT4gaW50XG4gICAgdmFsIHN0YXRzOiAnYSB0IC0+IHN0YXRpc3RpY3NcbiAgICB2YWwgdG9fc2VxIDogJ2EgdCAtPiAoa2V5ICogJ2EpIFNlcS50XG4gICAgdmFsIHRvX3NlcV9rZXlzIDogXyB0IC0+IGtleSBTZXEudFxuICAgIHZhbCB0b19zZXFfdmFsdWVzIDogJ2EgdCAtPiAnYSBTZXEudFxuICAgIHZhbCBhZGRfc2VxIDogJ2EgdCAtPiAoa2V5ICogJ2EpIFNlcS50IC0+IHVuaXRcbiAgICB2YWwgcmVwbGFjZV9zZXEgOiAnYSB0IC0+IChrZXkgKiAnYSkgU2VxLnQgLT4gdW5pdFxuICAgIHZhbCBvZl9zZXEgOiAoa2V5ICogJ2EpIFNlcS50IC0+ICdhIHRcbiAgZW5kXG5cbm1vZHVsZSBNYWtlU2VlZGVkKEg6IFNlZWRlZEhhc2hlZFR5cGUpOiAoU2VlZGVkUyB3aXRoIHR5cGUga2V5ID0gSC50KSA9XG4gIHN0cnVjdFxuICAgIHR5cGUga2V5ID0gSC50XG4gICAgdHlwZSAnYSBoYXNodGJsID0gKGtleSwgJ2EpIHRcbiAgICB0eXBlICdhIHQgPSAnYSBoYXNodGJsXG4gICAgbGV0IGNyZWF0ZSA9IGNyZWF0ZVxuICAgIGxldCBjbGVhciA9IGNsZWFyXG4gICAgbGV0IHJlc2V0ID0gcmVzZXRcbiAgICBsZXQgY29weSA9IGNvcHlcblxuICAgIGxldCBrZXlfaW5kZXggaCBrZXkgPVxuICAgICAgKEguaGFzaCBoLnNlZWQga2V5KSBsYW5kIChBcnJheS5sZW5ndGggaC5kYXRhIC0gMSlcblxuICAgIGxldCBhZGQgaCBrZXkgZGF0YSA9XG4gICAgICBsZXQgaSA9IGtleV9pbmRleCBoIGtleSBpblxuICAgICAgbGV0IGJ1Y2tldCA9IENvbnN7a2V5OyBkYXRhOyBuZXh0PWguZGF0YS4oaSl9IGluXG4gICAgICBoLmRhdGEuKGkpIDwtIGJ1Y2tldDtcbiAgICAgIGguc2l6ZSA8LSBoLnNpemUgKyAxO1xuICAgICAgaWYgaC5zaXplID4gQXJyYXkubGVuZ3RoIGguZGF0YSBsc2wgMSB0aGVuIHJlc2l6ZSBrZXlfaW5kZXggaFxuXG4gICAgbGV0IHJlYyByZW1vdmVfYnVja2V0IGggaSBrZXkgcHJlYyA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+XG4gICAgICAgICAgKClcbiAgICAgIHwgKENvbnMge2tleT1rOyBuZXh0fSkgYXMgYyAtPlxuICAgICAgICAgIGlmIEguZXF1YWwgayBrZXlcbiAgICAgICAgICB0aGVuIGJlZ2luXG4gICAgICAgICAgICBoLnNpemUgPC0gaC5zaXplIC0gMTtcbiAgICAgICAgICAgIG1hdGNoIHByZWMgd2l0aFxuICAgICAgICAgICAgfCBFbXB0eSAtPiBoLmRhdGEuKGkpIDwtIG5leHRcbiAgICAgICAgICAgIHwgQ29ucyBjIC0+IGMubmV4dCA8LSBuZXh0XG4gICAgICAgICAgZW5kXG4gICAgICAgICAgZWxzZSByZW1vdmVfYnVja2V0IGggaSBrZXkgYyBuZXh0XG5cbiAgICBsZXQgcmVtb3ZlIGgga2V5ID1cbiAgICAgIGxldCBpID0ga2V5X2luZGV4IGgga2V5IGluXG4gICAgICByZW1vdmVfYnVja2V0IGggaSBrZXkgRW1wdHkgaC5kYXRhLihpKVxuXG4gICAgbGV0IHJlYyBmaW5kX3JlYyBrZXkgPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPlxuICAgICAgICAgIHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBDb25ze2tleT1rOyBkYXRhOyBuZXh0fSAtPlxuICAgICAgICAgIGlmIEguZXF1YWwga2V5IGsgdGhlbiBkYXRhIGVsc2UgZmluZF9yZWMga2V5IG5leHRcblxuICAgIGxldCBmaW5kIGgga2V5ID1cbiAgICAgIG1hdGNoIGguZGF0YS4oa2V5X2luZGV4IGgga2V5KSB3aXRoXG4gICAgICB8IEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBDb25ze2tleT1rMTsgZGF0YT1kMTsgbmV4dD1uZXh0MX0gLT5cbiAgICAgICAgICBpZiBILmVxdWFsIGtleSBrMSB0aGVuIGQxIGVsc2VcbiAgICAgICAgICBtYXRjaCBuZXh0MSB3aXRoXG4gICAgICAgICAgfCBFbXB0eSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgICAgICB8IENvbnN7a2V5PWsyOyBkYXRhPWQyOyBuZXh0PW5leHQyfSAtPlxuICAgICAgICAgICAgICBpZiBILmVxdWFsIGtleSBrMiB0aGVuIGQyIGVsc2VcbiAgICAgICAgICAgICAgbWF0Y2ggbmV4dDIgd2l0aFxuICAgICAgICAgICAgICB8IEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgICAgICAgICB8IENvbnN7a2V5PWszOyBkYXRhPWQzOyBuZXh0PW5leHQzfSAtPlxuICAgICAgICAgICAgICAgICAgaWYgSC5lcXVhbCBrZXkgazMgdGhlbiBkMyBlbHNlIGZpbmRfcmVjIGtleSBuZXh0M1xuXG4gICAgbGV0IHJlYyBmaW5kX3JlY19vcHQga2V5ID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT5cbiAgICAgICAgICBOb25lXG4gICAgICB8IENvbnN7a2V5PWs7IGRhdGE7IG5leHR9IC0+XG4gICAgICAgICAgaWYgSC5lcXVhbCBrZXkgayB0aGVuIFNvbWUgZGF0YSBlbHNlIGZpbmRfcmVjX29wdCBrZXkgbmV4dFxuXG4gICAgbGV0IGZpbmRfb3B0IGgga2V5ID1cbiAgICAgIG1hdGNoIGguZGF0YS4oa2V5X2luZGV4IGgga2V5KSB3aXRoXG4gICAgICB8IEVtcHR5IC0+IE5vbmVcbiAgICAgIHwgQ29uc3trZXk9azE7IGRhdGE9ZDE7IG5leHQ9bmV4dDF9IC0+XG4gICAgICAgICAgaWYgSC5lcXVhbCBrZXkgazEgdGhlbiBTb21lIGQxIGVsc2VcbiAgICAgICAgICBtYXRjaCBuZXh0MSB3aXRoXG4gICAgICAgICAgfCBFbXB0eSAtPiBOb25lXG4gICAgICAgICAgfCBDb25ze2tleT1rMjsgZGF0YT1kMjsgbmV4dD1uZXh0Mn0gLT5cbiAgICAgICAgICAgICAgaWYgSC5lcXVhbCBrZXkgazIgdGhlbiBTb21lIGQyIGVsc2VcbiAgICAgICAgICAgICAgbWF0Y2ggbmV4dDIgd2l0aFxuICAgICAgICAgICAgICB8IEVtcHR5IC0+IE5vbmVcbiAgICAgICAgICAgICAgfCBDb25ze2tleT1rMzsgZGF0YT1kMzsgbmV4dD1uZXh0M30gLT5cbiAgICAgICAgICAgICAgICAgIGlmIEguZXF1YWwga2V5IGszIHRoZW4gU29tZSBkMyBlbHNlIGZpbmRfcmVjX29wdCBrZXkgbmV4dDNcblxuICAgIGxldCBmaW5kX2FsbCBoIGtleSA9XG4gICAgICBsZXQgcmVjIGZpbmRfaW5fYnVja2V0ID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT5cbiAgICAgICAgICBbXVxuICAgICAgfCBDb25ze2tleT1rOyBkYXRhPWQ7IG5leHR9IC0+XG4gICAgICAgICAgaWYgSC5lcXVhbCBrIGtleVxuICAgICAgICAgIHRoZW4gZCA6OiBmaW5kX2luX2J1Y2tldCBuZXh0XG4gICAgICAgICAgZWxzZSBmaW5kX2luX2J1Y2tldCBuZXh0IGluXG4gICAgICBmaW5kX2luX2J1Y2tldCBoLmRhdGEuKGtleV9pbmRleCBoIGtleSlcblxuICAgIGxldCByZWMgcmVwbGFjZV9idWNrZXQga2V5IGRhdGEgPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPlxuICAgICAgICAgIHRydWVcbiAgICAgIHwgQ29ucyAoe2tleT1rOyBuZXh0fSBhcyBzbG90KSAtPlxuICAgICAgICAgIGlmIEguZXF1YWwgayBrZXlcbiAgICAgICAgICB0aGVuIChzbG90LmtleSA8LSBrZXk7IHNsb3QuZGF0YSA8LSBkYXRhOyBmYWxzZSlcbiAgICAgICAgICBlbHNlIHJlcGxhY2VfYnVja2V0IGtleSBkYXRhIG5leHRcblxuICAgIGxldCByZXBsYWNlIGgga2V5IGRhdGEgPVxuICAgICAgbGV0IGkgPSBrZXlfaW5kZXggaCBrZXkgaW5cbiAgICAgIGxldCBsID0gaC5kYXRhLihpKSBpblxuICAgICAgaWYgcmVwbGFjZV9idWNrZXQga2V5IGRhdGEgbCB0aGVuIGJlZ2luXG4gICAgICAgIGguZGF0YS4oaSkgPC0gQ29uc3trZXk7IGRhdGE7IG5leHQ9bH07XG4gICAgICAgIGguc2l6ZSA8LSBoLnNpemUgKyAxO1xuICAgICAgICBpZiBoLnNpemUgPiBBcnJheS5sZW5ndGggaC5kYXRhIGxzbCAxIHRoZW4gcmVzaXplIGtleV9pbmRleCBoXG4gICAgICBlbmRcblxuICAgIGxldCBtZW0gaCBrZXkgPVxuICAgICAgbGV0IHJlYyBtZW1faW5fYnVja2V0ID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT5cbiAgICAgICAgICBmYWxzZVxuICAgICAgfCBDb25ze2tleT1rOyBuZXh0fSAtPlxuICAgICAgICAgIEguZXF1YWwgayBrZXkgfHwgbWVtX2luX2J1Y2tldCBuZXh0IGluXG4gICAgICBtZW1faW5fYnVja2V0IGguZGF0YS4oa2V5X2luZGV4IGgga2V5KVxuXG4gICAgbGV0IGFkZF9zZXEgdGJsIGkgPVxuICAgICAgU2VxLml0ZXIgKGZ1biAoayx2KSAtPiBhZGQgdGJsIGsgdikgaVxuXG4gICAgbGV0IHJlcGxhY2Vfc2VxIHRibCBpID1cbiAgICAgIFNlcS5pdGVyIChmdW4gKGssdikgLT4gcmVwbGFjZSB0YmwgayB2KSBpXG5cbiAgICBsZXQgb2Zfc2VxIGkgPVxuICAgICAgbGV0IHRibCA9IGNyZWF0ZSAxNiBpblxuICAgICAgcmVwbGFjZV9zZXEgdGJsIGk7XG4gICAgICB0YmxcblxuICAgIGxldCBpdGVyID0gaXRlclxuICAgIGxldCBmaWx0ZXJfbWFwX2lucGxhY2UgPSBmaWx0ZXJfbWFwX2lucGxhY2VcbiAgICBsZXQgZm9sZCA9IGZvbGRcbiAgICBsZXQgbGVuZ3RoID0gbGVuZ3RoXG4gICAgbGV0IHN0YXRzID0gc3RhdHNcbiAgICBsZXQgdG9fc2VxID0gdG9fc2VxXG4gICAgbGV0IHRvX3NlcV9rZXlzID0gdG9fc2VxX2tleXNcbiAgICBsZXQgdG9fc2VxX3ZhbHVlcyA9IHRvX3NlcV92YWx1ZXNcbiAgZW5kXG5cbm1vZHVsZSBNYWtlKEg6IEhhc2hlZFR5cGUpOiAoUyB3aXRoIHR5cGUga2V5ID0gSC50KSA9XG4gIHN0cnVjdFxuICAgIGluY2x1ZGUgTWFrZVNlZWRlZChzdHJ1Y3RcbiAgICAgICAgdHlwZSB0ID0gSC50XG4gICAgICAgIGxldCBlcXVhbCA9IEguZXF1YWxcbiAgICAgICAgbGV0IGhhc2ggKF9zZWVkOiBpbnQpIHggPSBILmhhc2ggeFxuICAgICAgZW5kKVxuICAgIGxldCBjcmVhdGUgc3ogPSBjcmVhdGUgfnJhbmRvbTpmYWxzZSBzelxuICAgIGxldCBvZl9zZXEgaSA9XG4gICAgICBsZXQgdGJsID0gY3JlYXRlIDE2IGluXG4gICAgICByZXBsYWNlX3NlcSB0YmwgaTtcbiAgICAgIHRibFxuICBlbmRcblxuKCogUG9seW1vcnBoaWMgaGFzaCBmdW5jdGlvbi1iYXNlZCB0YWJsZXMgKilcbigqIENvZGUgaW5jbHVkZWQgYmVsb3cgdGhlIGZ1bmN0b3JpYWwgaW50ZXJmYWNlIHRvIGd1YXJkIGFnYWluc3QgYWNjaWRlbnRhbFxuICAgdXNlIC0gc2VlICMyMjAyICopXG5cbmV4dGVybmFsIHNlZWRlZF9oYXNoX3BhcmFtIDpcbiAgaW50IC0+IGludCAtPiBpbnQgLT4gJ2EgLT4gaW50ID0gXCJjYW1sX2hhc2hcIiBbQEBub2FsbG9jXVxuXG5sZXQgaGFzaCB4ID0gc2VlZGVkX2hhc2hfcGFyYW0gMTAgMTAwIDAgeFxubGV0IGhhc2hfcGFyYW0gbjEgbjIgeCA9IHNlZWRlZF9oYXNoX3BhcmFtIG4xIG4yIDAgeFxubGV0IHNlZWRlZF9oYXNoIHNlZWQgeCA9IHNlZWRlZF9oYXNoX3BhcmFtIDEwIDEwMCBzZWVkIHhcblxubGV0IGtleV9pbmRleCBoIGtleSA9XG4gIGlmIE9iai5zaXplIChPYmoucmVwciBoKSA+PSA0XG4gIHRoZW4gKHNlZWRlZF9oYXNoX3BhcmFtIDEwIDEwMCBoLnNlZWQga2V5KSBsYW5kIChBcnJheS5sZW5ndGggaC5kYXRhIC0gMSlcbiAgZWxzZSBpbnZhbGlkX2FyZyBcIkhhc2h0Ymw6IHVuc3VwcG9ydGVkIGhhc2ggdGFibGUgZm9ybWF0XCJcblxubGV0IGFkZCBoIGtleSBkYXRhID1cbiAgbGV0IGkgPSBrZXlfaW5kZXggaCBrZXkgaW5cbiAgbGV0IGJ1Y2tldCA9IENvbnN7a2V5OyBkYXRhOyBuZXh0PWguZGF0YS4oaSl9IGluXG4gIGguZGF0YS4oaSkgPC0gYnVja2V0O1xuICBoLnNpemUgPC0gaC5zaXplICsgMTtcbiAgaWYgaC5zaXplID4gQXJyYXkubGVuZ3RoIGguZGF0YSBsc2wgMSB0aGVuIHJlc2l6ZSBrZXlfaW5kZXggaFxuXG5sZXQgcmVjIHJlbW92ZV9idWNrZXQgaCBpIGtleSBwcmVjID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPlxuICAgICAgKClcbiAgfCAoQ29ucyB7a2V5PWs7IG5leHR9KSBhcyBjIC0+XG4gICAgICBpZiBjb21wYXJlIGsga2V5ID0gMFxuICAgICAgdGhlbiBiZWdpblxuICAgICAgICBoLnNpemUgPC0gaC5zaXplIC0gMTtcbiAgICAgICAgbWF0Y2ggcHJlYyB3aXRoXG4gICAgICAgIHwgRW1wdHkgLT4gaC5kYXRhLihpKSA8LSBuZXh0XG4gICAgICAgIHwgQ29ucyBjIC0+IGMubmV4dCA8LSBuZXh0XG4gICAgICBlbmRcbiAgICAgIGVsc2UgcmVtb3ZlX2J1Y2tldCBoIGkga2V5IGMgbmV4dFxuXG5sZXQgcmVtb3ZlIGgga2V5ID1cbiAgbGV0IGkgPSBrZXlfaW5kZXggaCBrZXkgaW5cbiAgcmVtb3ZlX2J1Y2tldCBoIGkga2V5IEVtcHR5IGguZGF0YS4oaSlcblxubGV0IHJlYyBmaW5kX3JlYyBrZXkgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+XG4gICAgICByYWlzZSBOb3RfZm91bmRcbiAgfCBDb25ze2tleT1rOyBkYXRhOyBuZXh0fSAtPlxuICAgICAgaWYgY29tcGFyZSBrZXkgayA9IDAgdGhlbiBkYXRhIGVsc2UgZmluZF9yZWMga2V5IG5leHRcblxubGV0IGZpbmQgaCBrZXkgPVxuICBtYXRjaCBoLmRhdGEuKGtleV9pbmRleCBoIGtleSkgd2l0aFxuICB8IEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICB8IENvbnN7a2V5PWsxOyBkYXRhPWQxOyBuZXh0PW5leHQxfSAtPlxuICAgICAgaWYgY29tcGFyZSBrZXkgazEgPSAwIHRoZW4gZDEgZWxzZVxuICAgICAgbWF0Y2ggbmV4dDEgd2l0aFxuICAgICAgfCBFbXB0eSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgIHwgQ29uc3trZXk9azI7IGRhdGE9ZDI7IG5leHQ9bmV4dDJ9IC0+XG4gICAgICAgICAgaWYgY29tcGFyZSBrZXkgazIgPSAwIHRoZW4gZDIgZWxzZVxuICAgICAgICAgIG1hdGNoIG5leHQyIHdpdGhcbiAgICAgICAgICB8IEVtcHR5IC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgICAgIHwgQ29uc3trZXk9azM7IGRhdGE9ZDM7IG5leHQ9bmV4dDN9IC0+XG4gICAgICAgICAgICAgIGlmIGNvbXBhcmUga2V5IGszID0gMCB0aGVuIGQzIGVsc2UgZmluZF9yZWMga2V5IG5leHQzXG5cbmxldCByZWMgZmluZF9yZWNfb3B0IGtleSA9IGZ1bmN0aW9uXG4gIHwgRW1wdHkgLT5cbiAgICAgIE5vbmVcbiAgfCBDb25ze2tleT1rOyBkYXRhOyBuZXh0fSAtPlxuICAgICAgaWYgY29tcGFyZSBrZXkgayA9IDAgdGhlbiBTb21lIGRhdGEgZWxzZSBmaW5kX3JlY19vcHQga2V5IG5leHRcblxubGV0IGZpbmRfb3B0IGgga2V5ID1cbiAgbWF0Y2ggaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpIHdpdGhcbiAgfCBFbXB0eSAtPiBOb25lXG4gIHwgQ29uc3trZXk9azE7IGRhdGE9ZDE7IG5leHQ9bmV4dDF9IC0+XG4gICAgICBpZiBjb21wYXJlIGtleSBrMSA9IDAgdGhlbiBTb21lIGQxIGVsc2VcbiAgICAgIG1hdGNoIG5leHQxIHdpdGhcbiAgICAgIHwgRW1wdHkgLT4gTm9uZVxuICAgICAgfCBDb25ze2tleT1rMjsgZGF0YT1kMjsgbmV4dD1uZXh0Mn0gLT5cbiAgICAgICAgICBpZiBjb21wYXJlIGtleSBrMiA9IDAgdGhlbiBTb21lIGQyIGVsc2VcbiAgICAgICAgICBtYXRjaCBuZXh0MiB3aXRoXG4gICAgICAgICAgfCBFbXB0eSAtPiBOb25lXG4gICAgICAgICAgfCBDb25ze2tleT1rMzsgZGF0YT1kMzsgbmV4dD1uZXh0M30gLT5cbiAgICAgICAgICAgICAgaWYgY29tcGFyZSBrZXkgazMgPSAwIHRoZW4gU29tZSBkMyBlbHNlIGZpbmRfcmVjX29wdCBrZXkgbmV4dDNcblxubGV0IGZpbmRfYWxsIGgga2V5ID1cbiAgbGV0IHJlYyBmaW5kX2luX2J1Y2tldCA9IGZ1bmN0aW9uXG4gIHwgRW1wdHkgLT5cbiAgICAgIFtdXG4gIHwgQ29uc3trZXk9azsgZGF0YTsgbmV4dH0gLT5cbiAgICAgIGlmIGNvbXBhcmUgayBrZXkgPSAwXG4gICAgICB0aGVuIGRhdGEgOjogZmluZF9pbl9idWNrZXQgbmV4dFxuICAgICAgZWxzZSBmaW5kX2luX2J1Y2tldCBuZXh0IGluXG4gIGZpbmRfaW5fYnVja2V0IGguZGF0YS4oa2V5X2luZGV4IGgga2V5KVxuXG5sZXQgcmVjIHJlcGxhY2VfYnVja2V0IGtleSBkYXRhID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPlxuICAgICAgdHJ1ZVxuICB8IENvbnMgKHtrZXk9azsgbmV4dH0gYXMgc2xvdCkgLT5cbiAgICAgIGlmIGNvbXBhcmUgayBrZXkgPSAwXG4gICAgICB0aGVuIChzbG90LmtleSA8LSBrZXk7IHNsb3QuZGF0YSA8LSBkYXRhOyBmYWxzZSlcbiAgICAgIGVsc2UgcmVwbGFjZV9idWNrZXQga2V5IGRhdGEgbmV4dFxuXG5sZXQgcmVwbGFjZSBoIGtleSBkYXRhID1cbiAgbGV0IGkgPSBrZXlfaW5kZXggaCBrZXkgaW5cbiAgbGV0IGwgPSBoLmRhdGEuKGkpIGluXG4gIGlmIHJlcGxhY2VfYnVja2V0IGtleSBkYXRhIGwgdGhlbiBiZWdpblxuICAgIGguZGF0YS4oaSkgPC0gQ29uc3trZXk7IGRhdGE7IG5leHQ9bH07XG4gICAgaC5zaXplIDwtIGguc2l6ZSArIDE7XG4gICAgaWYgaC5zaXplID4gQXJyYXkubGVuZ3RoIGguZGF0YSBsc2wgMSB0aGVuIHJlc2l6ZSBrZXlfaW5kZXggaFxuICBlbmRcblxubGV0IG1lbSBoIGtleSA9XG4gIGxldCByZWMgbWVtX2luX2J1Y2tldCA9IGZ1bmN0aW9uXG4gIHwgRW1wdHkgLT5cbiAgICAgIGZhbHNlXG4gIHwgQ29uc3trZXk9azsgbmV4dH0gLT5cbiAgICAgIGNvbXBhcmUgayBrZXkgPSAwIHx8IG1lbV9pbl9idWNrZXQgbmV4dCBpblxuICBtZW1faW5fYnVja2V0IGguZGF0YS4oa2V5X2luZGV4IGgga2V5KVxuXG5sZXQgYWRkX3NlcSB0YmwgaSA9XG4gIFNlcS5pdGVyIChmdW4gKGssdikgLT4gYWRkIHRibCBrIHYpIGlcblxubGV0IHJlcGxhY2Vfc2VxIHRibCBpID1cbiAgU2VxLml0ZXIgKGZ1biAoayx2KSAtPiByZXBsYWNlIHRibCBrIHYpIGlcblxubGV0IG9mX3NlcSBpID1cbiAgbGV0IHRibCA9IGNyZWF0ZSAxNiBpblxuICByZXBsYWNlX3NlcSB0YmwgaTtcbiAgdGJsXG5cbmxldCByZWJ1aWxkID8ocmFuZG9tID0gIXJhbmRvbWl6ZWQpIGggPVxuICBsZXQgcyA9IHBvd2VyXzJfYWJvdmUgMTYgKEFycmF5Lmxlbmd0aCBoLmRhdGEpIGluXG4gIGxldCBzZWVkID1cbiAgICBpZiByYW5kb20gdGhlbiBSYW5kb20uU3RhdGUuYml0cyAoTGF6eS5mb3JjZSBwcm5nKVxuICAgIGVsc2UgaWYgT2JqLnNpemUgKE9iai5yZXByIGgpID49IDQgdGhlbiBoLnNlZWRcbiAgICBlbHNlIDAgaW5cbiAgbGV0IGgnID0ge1xuICAgIHNpemUgPSBoLnNpemU7XG4gICAgZGF0YSA9IEFycmF5Lm1ha2UgcyBFbXB0eTtcbiAgICBzZWVkID0gc2VlZDtcbiAgICBpbml0aWFsX3NpemUgPSBpZiBPYmouc2l6ZSAoT2JqLnJlcHIgaCkgPj0gNCB0aGVuIGguaW5pdGlhbF9zaXplIGVsc2Ugc1xuICB9IGluXG4gIGluc2VydF9hbGxfYnVja2V0cyAoa2V5X2luZGV4IGgnKSBmYWxzZSBoLmRhdGEgaCcuZGF0YTtcbiAgaCdcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIERhbWllbiBEb2xpZ2V6LCBwcm9qZXQgUGFyYSwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTcgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCoqIFdlYWsgYXJyYXkgb3BlcmF0aW9ucyAqKVxuXG50eXBlICEnYSB0XG5cbmV4dGVybmFsIGNyZWF0ZSA6IGludCAtPiAnYSB0ID0gXCJjYW1sX3dlYWtfY3JlYXRlXCJcblxubGV0IGNyZWF0ZSBsID1cbiAgaWYgbm90ICgwIDw9IGwgJiYgbCA8PSBPYmouRXBoZW1lcm9uLm1heF9lcGhlX2xlbmd0aCkgdGhlblxuICAgIGludmFsaWRfYXJnKFwiV2Vhay5jcmVhdGVcIik7XG4gIGNyZWF0ZSBsXG5cbigqKiBudW1iZXIgb2YgYWRkaXRpb25hbCB2YWx1ZXMgaW4gYSB3ZWFrIHBvaW50ZXIgKilcbmxldCBhZGRpdGlvbmFsX3ZhbHVlcyA9IDJcblxubGV0IGxlbmd0aCB4ID0gT2JqLnNpemUoT2JqLnJlcHIgeCkgLSBhZGRpdGlvbmFsX3ZhbHVlc1xuXG5sZXQgcmFpc2VfaWZfaW52YWxpZF9vZmZzZXQgZSBvIG1zZyA9XG4gIGlmIG5vdCAoMCA8PSBvICYmIG8gPCBsZW5ndGggZSkgdGhlblxuICAgIGludmFsaWRfYXJnKG1zZylcblxuZXh0ZXJuYWwgc2V0JyA6ICdhIHQgLT4gaW50IC0+ICdhIC0+IHVuaXQgPSBcImNhbWxfZXBoZV9zZXRfa2V5XCJcbmV4dGVybmFsIHVuc2V0IDogJ2EgdCAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9lcGhlX3Vuc2V0X2tleVwiXG5sZXQgc2V0IGUgbyB4ID1cbiAgcmFpc2VfaWZfaW52YWxpZF9vZmZzZXQgZSBvIFwiV2Vhay5zZXRcIjtcbiAgbWF0Y2ggeCB3aXRoXG4gIHwgTm9uZSAtPiB1bnNldCBlIG9cbiAgfCBTb21lIHggLT4gc2V0JyBlIG8geFxuXG5leHRlcm5hbCBnZXQgOiAnYSB0IC0+IGludCAtPiAnYSBvcHRpb24gPSBcImNhbWxfd2Vha19nZXRcIlxubGV0IGdldCBlIG8gPVxuICByYWlzZV9pZl9pbnZhbGlkX29mZnNldCBlIG8gXCJXZWFrLmdldFwiO1xuICBnZXQgZSBvXG5cbmV4dGVybmFsIGdldF9jb3B5IDogJ2EgdCAtPiBpbnQgLT4gJ2Egb3B0aW9uID0gXCJjYW1sX3dlYWtfZ2V0X2NvcHlcIlxubGV0IGdldF9jb3B5IGUgbyA9XG4gIHJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0IGUgbyBcIldlYWsuZ2V0X2NvcHlcIjtcbiAgZ2V0X2NvcHkgZSBvXG5cbmV4dGVybmFsIGNoZWNrIDogJ2EgdCAtPiBpbnQgLT4gYm9vbCA9IFwiY2FtbF93ZWFrX2NoZWNrXCJcbmxldCBjaGVjayBlIG8gPVxuICByYWlzZV9pZl9pbnZhbGlkX29mZnNldCBlIG8gXCJXZWFrLmNoZWNrXCI7XG4gIGNoZWNrIGUgb1xuXG5leHRlcm5hbCBibGl0IDogJ2EgdCAtPiBpbnQgLT4gJ2EgdCAtPiBpbnQgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfd2Vha19ibGl0XCJcblxuKCogYmxpdDogc3JjIHNyY29mZiBkc3QgZHN0b2ZmIGxlbiAqKVxubGV0IGJsaXQgZTEgbzEgZTIgbzIgbCA9XG4gIGlmIGwgPCAwIHx8IG8xIDwgMCB8fCBvMSA+IGxlbmd0aCBlMSAtIGxcbiAgICAgfHwgbzIgPCAwIHx8IG8yID4gbGVuZ3RoIGUyIC0gbFxuICB0aGVuIGludmFsaWRfYXJnIFwiV2Vhay5ibGl0XCJcbiAgZWxzZSBpZiBsIDw+IDAgdGhlbiBibGl0IGUxIG8xIGUyIG8yIGxcblxubGV0IGZpbGwgYXIgb2ZzIGxlbiB4ID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IGxlbmd0aCBhciAtIGxlblxuICB0aGVuIHJhaXNlIChJbnZhbGlkX2FyZ3VtZW50IFwiV2Vhay5maWxsXCIpXG4gIGVsc2UgYmVnaW5cbiAgICBmb3IgaSA9IG9mcyB0byAob2ZzICsgbGVuIC0gMSkgZG9cbiAgICAgIHNldCBhciBpIHhcbiAgICBkb25lXG4gIGVuZFxuXG5cbigqKiBXZWFrIGhhc2ggdGFibGVzICopXG5cbm1vZHVsZSB0eXBlIFMgPSBzaWdcbiAgdHlwZSBkYXRhXG4gIHR5cGUgdFxuICB2YWwgY3JlYXRlIDogaW50IC0+IHRcbiAgdmFsIGNsZWFyIDogdCAtPiB1bml0XG4gIHZhbCBtZXJnZSA6IHQgLT4gZGF0YSAtPiBkYXRhXG4gIHZhbCBhZGQgOiB0IC0+IGRhdGEgLT4gdW5pdFxuICB2YWwgcmVtb3ZlIDogdCAtPiBkYXRhIC0+IHVuaXRcbiAgdmFsIGZpbmQgOiB0IC0+IGRhdGEgLT4gZGF0YVxuICB2YWwgZmluZF9vcHQgOiB0IC0+IGRhdGEgLT4gZGF0YSBvcHRpb25cbiAgdmFsIGZpbmRfYWxsIDogdCAtPiBkYXRhIC0+IGRhdGEgbGlzdFxuICB2YWwgbWVtIDogdCAtPiBkYXRhIC0+IGJvb2xcbiAgdmFsIGl0ZXIgOiAoZGF0YSAtPiB1bml0KSAtPiB0IC0+IHVuaXRcbiAgdmFsIGZvbGQgOiAoZGF0YSAtPiAnYSAtPiAnYSkgLT4gdCAtPiAnYSAtPiAnYVxuICB2YWwgY291bnQgOiB0IC0+IGludFxuICB2YWwgc3RhdHMgOiB0IC0+IGludCAqIGludCAqIGludCAqIGludCAqIGludCAqIGludFxuZW5kXG5cbm1vZHVsZSBNYWtlIChIIDogSGFzaHRibC5IYXNoZWRUeXBlKSA6IChTIHdpdGggdHlwZSBkYXRhID0gSC50KSA9IHN0cnVjdFxuXG4gIHR5cGUgJ2Egd2Vha190ID0gJ2EgdFxuICBsZXQgd2Vha19jcmVhdGUgPSBjcmVhdGVcbiAgbGV0IGVtcHR5YnVja2V0ID0gd2Vha19jcmVhdGUgMFxuXG4gIHR5cGUgZGF0YSA9IEgudFxuXG4gIHR5cGUgdCA9IHtcbiAgICBtdXRhYmxlIHRhYmxlIDogZGF0YSB3ZWFrX3QgYXJyYXk7XG4gICAgbXV0YWJsZSBoYXNoZXMgOiBpbnQgYXJyYXkgYXJyYXk7XG4gICAgbXV0YWJsZSBsaW1pdCA6IGludDsgICAgICAgICAgICAgICAoKiBidWNrZXQgc2l6ZSBsaW1pdCAqKVxuICAgIG11dGFibGUgb3ZlcnNpemUgOiBpbnQ7ICAgICAgICAgICAgKCogbnVtYmVyIG9mIG92ZXJzaXplIGJ1Y2tldHMgKilcbiAgICBtdXRhYmxlIHJvdmVyIDogaW50OyAgICAgICAgICAgICAgICgqIGZvciBpbnRlcm5hbCBib29ra2VlcGluZyAqKVxuICB9XG5cbiAgbGV0IGdldF9pbmRleCB0IGggPSAoaCBsYW5kIG1heF9pbnQpIG1vZCAoQXJyYXkubGVuZ3RoIHQudGFibGUpXG5cbiAgbGV0IGxpbWl0ID0gN1xuICBsZXQgb3Zlcl9saW1pdCA9IDJcblxuICBsZXQgY3JlYXRlIHN6ID1cbiAgICBsZXQgc3ogPSBpZiBzeiA8IDcgdGhlbiA3IGVsc2Ugc3ogaW5cbiAgICBsZXQgc3ogPSBpZiBzeiA+IFN5cy5tYXhfYXJyYXlfbGVuZ3RoIHRoZW4gU3lzLm1heF9hcnJheV9sZW5ndGggZWxzZSBzeiBpblxuICAgIHtcbiAgICAgIHRhYmxlID0gQXJyYXkubWFrZSBzeiBlbXB0eWJ1Y2tldDtcbiAgICAgIGhhc2hlcyA9IEFycmF5Lm1ha2Ugc3ogW3wgfF07XG4gICAgICBsaW1pdCA9IGxpbWl0O1xuICAgICAgb3ZlcnNpemUgPSAwO1xuICAgICAgcm92ZXIgPSAwO1xuICAgIH1cblxuICBsZXQgY2xlYXIgdCA9XG4gICAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCB0LnRhYmxlIC0gMSBkb1xuICAgICAgdC50YWJsZS4oaSkgPC0gZW1wdHlidWNrZXQ7XG4gICAgICB0Lmhhc2hlcy4oaSkgPC0gW3wgfF07XG4gICAgZG9uZTtcbiAgICB0LmxpbWl0IDwtIGxpbWl0O1xuICAgIHQub3ZlcnNpemUgPC0gMFxuXG5cbiAgbGV0IGZvbGQgZiB0IGluaXQgPVxuICAgIGxldCByZWMgZm9sZF9idWNrZXQgaSBiIGFjY3UgPVxuICAgICAgaWYgaSA+PSBsZW5ndGggYiB0aGVuIGFjY3UgZWxzZVxuICAgICAgbWF0Y2ggZ2V0IGIgaSB3aXRoXG4gICAgICB8IFNvbWUgdiAtPiBmb2xkX2J1Y2tldCAoaSsxKSBiIChmIHYgYWNjdSlcbiAgICAgIHwgTm9uZSAtPiBmb2xkX2J1Y2tldCAoaSsxKSBiIGFjY3VcbiAgICBpblxuICAgIEFycmF5LmZvbGRfcmlnaHQgKGZvbGRfYnVja2V0IDApIHQudGFibGUgaW5pdFxuXG5cbiAgbGV0IGl0ZXIgZiB0ID1cbiAgICBsZXQgcmVjIGl0ZXJfYnVja2V0IGkgYiA9XG4gICAgICBpZiBpID49IGxlbmd0aCBiIHRoZW4gKCkgZWxzZVxuICAgICAgbWF0Y2ggZ2V0IGIgaSB3aXRoXG4gICAgICB8IFNvbWUgdiAtPiBmIHY7IGl0ZXJfYnVja2V0IChpKzEpIGJcbiAgICAgIHwgTm9uZSAtPiBpdGVyX2J1Y2tldCAoaSsxKSBiXG4gICAgaW5cbiAgICBBcnJheS5pdGVyIChpdGVyX2J1Y2tldCAwKSB0LnRhYmxlXG5cblxuICBsZXQgaXRlcl93ZWFrIGYgdCA9XG4gICAgbGV0IHJlYyBpdGVyX2J1Y2tldCBpIGogYiA9XG4gICAgICBpZiBpID49IGxlbmd0aCBiIHRoZW4gKCkgZWxzZVxuICAgICAgbWF0Y2ggY2hlY2sgYiBpIHdpdGhcbiAgICAgIHwgdHJ1ZSAtPiBmIGIgdC5oYXNoZXMuKGopIGk7IGl0ZXJfYnVja2V0IChpKzEpIGogYlxuICAgICAgfCBmYWxzZSAtPiBpdGVyX2J1Y2tldCAoaSsxKSBqIGJcbiAgICBpblxuICAgIEFycmF5Lml0ZXJpIChpdGVyX2J1Y2tldCAwKSB0LnRhYmxlXG5cblxuICBsZXQgcmVjIGNvdW50X2J1Y2tldCBpIGIgYWNjdSA9XG4gICAgaWYgaSA+PSBsZW5ndGggYiB0aGVuIGFjY3UgZWxzZVxuICAgIGNvdW50X2J1Y2tldCAoaSsxKSBiIChhY2N1ICsgKGlmIGNoZWNrIGIgaSB0aGVuIDEgZWxzZSAwKSlcblxuXG4gIGxldCBjb3VudCB0ID1cbiAgICBBcnJheS5mb2xkX3JpZ2h0IChjb3VudF9idWNrZXQgMCkgdC50YWJsZSAwXG5cblxuICBsZXQgbmV4dF9zeiBuID0gSW50Lm1pbiAoMyAqIG4gLyAyICsgMykgU3lzLm1heF9hcnJheV9sZW5ndGhcbiAgbGV0IHByZXZfc3ogbiA9ICgobiAtIDMpICogMiArIDIpIC8gM1xuXG4gIGxldCB0ZXN0X3Nocmlua19idWNrZXQgdCA9XG4gICAgbGV0IGJ1Y2tldCA9IHQudGFibGUuKHQucm92ZXIpIGluXG4gICAgbGV0IGhidWNrZXQgPSB0Lmhhc2hlcy4odC5yb3ZlcikgaW5cbiAgICBsZXQgbGVuID0gbGVuZ3RoIGJ1Y2tldCBpblxuICAgIGxldCBwcmV2X2xlbiA9IHByZXZfc3ogbGVuIGluXG4gICAgbGV0IGxpdmUgPSBjb3VudF9idWNrZXQgMCBidWNrZXQgMCBpblxuICAgIGlmIGxpdmUgPD0gcHJldl9sZW4gdGhlbiBiZWdpblxuICAgICAgbGV0IHJlYyBsb29wIGkgaiA9XG4gICAgICAgIGlmIGogPj0gcHJldl9sZW4gdGhlbiBiZWdpblxuICAgICAgICAgIGlmIGNoZWNrIGJ1Y2tldCBpIHRoZW4gbG9vcCAoaSArIDEpIGpcbiAgICAgICAgICBlbHNlIGlmIGNoZWNrIGJ1Y2tldCBqIHRoZW4gYmVnaW5cbiAgICAgICAgICAgIGJsaXQgYnVja2V0IGogYnVja2V0IGkgMTtcbiAgICAgICAgICAgIGhidWNrZXQuKGkpIDwtIGhidWNrZXQuKGopO1xuICAgICAgICAgICAgbG9vcCAoaSArIDEpIChqIC0gMSk7XG4gICAgICAgICAgZW5kIGVsc2UgbG9vcCBpIChqIC0gMSk7XG4gICAgICAgIGVuZDtcbiAgICAgIGluXG4gICAgICBsb29wIDAgKGxlbmd0aCBidWNrZXQgLSAxKTtcbiAgICAgIGlmIHByZXZfbGVuID0gMCB0aGVuIGJlZ2luXG4gICAgICAgIHQudGFibGUuKHQucm92ZXIpIDwtIGVtcHR5YnVja2V0O1xuICAgICAgICB0Lmhhc2hlcy4odC5yb3ZlcikgPC0gW3wgfF07XG4gICAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgICBsZXQgbmV3YnVja2V0ID0gd2Vha19jcmVhdGUgcHJldl9sZW4gaW5cbiAgICAgICAgYmxpdCBidWNrZXQgMCBuZXdidWNrZXQgMCBwcmV2X2xlbjtcbiAgICAgICAgdC50YWJsZS4odC5yb3ZlcikgPC0gbmV3YnVja2V0O1xuICAgICAgICB0Lmhhc2hlcy4odC5yb3ZlcikgPC0gQXJyYXkuc3ViIGhidWNrZXQgMCBwcmV2X2xlblxuICAgICAgZW5kO1xuICAgICAgaWYgbGVuID4gdC5saW1pdCAmJiBwcmV2X2xlbiA8PSB0LmxpbWl0IHRoZW4gdC5vdmVyc2l6ZSA8LSB0Lm92ZXJzaXplIC0gMTtcbiAgICBlbmQ7XG4gICAgdC5yb3ZlciA8LSAodC5yb3ZlciArIDEpIG1vZCAoQXJyYXkubGVuZ3RoIHQudGFibGUpXG5cblxuICBsZXQgcmVjIHJlc2l6ZSB0ID1cbiAgICBsZXQgb2xkbGVuID0gQXJyYXkubGVuZ3RoIHQudGFibGUgaW5cbiAgICBsZXQgbmV3bGVuID0gbmV4dF9zeiBvbGRsZW4gaW5cbiAgICBpZiBuZXdsZW4gPiBvbGRsZW4gdGhlbiBiZWdpblxuICAgICAgbGV0IG5ld3QgPSBjcmVhdGUgbmV3bGVuIGluXG4gICAgICBsZXQgYWRkX3dlYWsgb2Igb2ggb2kgPVxuICAgICAgICBsZXQgc2V0dGVyIG5iIG5pIF8gPSBibGl0IG9iIG9pIG5iIG5pIDEgaW5cbiAgICAgICAgbGV0IGggPSBvaC4ob2kpIGluXG4gICAgICAgIGFkZF9hdXggbmV3dCBzZXR0ZXIgTm9uZSBoIChnZXRfaW5kZXggbmV3dCBoKTtcbiAgICAgIGluXG4gICAgICBpdGVyX3dlYWsgYWRkX3dlYWsgdDtcbiAgICAgIHQudGFibGUgPC0gbmV3dC50YWJsZTtcbiAgICAgIHQuaGFzaGVzIDwtIG5ld3QuaGFzaGVzO1xuICAgICAgdC5saW1pdCA8LSBuZXd0LmxpbWl0O1xuICAgICAgdC5vdmVyc2l6ZSA8LSBuZXd0Lm92ZXJzaXplO1xuICAgICAgdC5yb3ZlciA8LSB0LnJvdmVyIG1vZCBBcnJheS5sZW5ndGggbmV3dC50YWJsZTtcbiAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgdC5saW1pdCA8LSBtYXhfaW50OyAgICAgICAgICAgICAoKiBtYXhpbXVtIHNpemUgYWxyZWFkeSByZWFjaGVkICopXG4gICAgICB0Lm92ZXJzaXplIDwtIDA7XG4gICAgZW5kXG5cbiAgYW5kIGFkZF9hdXggdCBzZXR0ZXIgZCBoIGluZGV4ID1cbiAgICBsZXQgYnVja2V0ID0gdC50YWJsZS4oaW5kZXgpIGluXG4gICAgbGV0IGhhc2hlcyA9IHQuaGFzaGVzLihpbmRleCkgaW5cbiAgICBsZXQgc3ogPSBsZW5ndGggYnVja2V0IGluXG4gICAgbGV0IHJlYyBsb29wIGkgPVxuICAgICAgaWYgaSA+PSBzeiB0aGVuIGJlZ2luXG4gICAgICAgIGxldCBuZXdzeiA9XG4gICAgICAgICAgSW50Lm1pbiAoMyAqIHN6IC8gMiArIDMpIChTeXMubWF4X2FycmF5X2xlbmd0aCAtIGFkZGl0aW9uYWxfdmFsdWVzKVxuICAgICAgICBpblxuICAgICAgICBpZiBuZXdzeiA8PSBzeiB0aGVuIGZhaWx3aXRoIFwiV2Vhay5NYWtlOiBoYXNoIGJ1Y2tldCBjYW5ub3QgZ3JvdyBtb3JlXCI7XG4gICAgICAgIGxldCBuZXdidWNrZXQgPSB3ZWFrX2NyZWF0ZSBuZXdzeiBpblxuICAgICAgICBsZXQgbmV3aGFzaGVzID0gQXJyYXkubWFrZSBuZXdzeiAwIGluXG4gICAgICAgIGJsaXQgYnVja2V0IDAgbmV3YnVja2V0IDAgc3o7XG4gICAgICAgIEFycmF5LmJsaXQgaGFzaGVzIDAgbmV3aGFzaGVzIDAgc3o7XG4gICAgICAgIHNldHRlciBuZXdidWNrZXQgc3ogZDtcbiAgICAgICAgbmV3aGFzaGVzLihzeikgPC0gaDtcbiAgICAgICAgdC50YWJsZS4oaW5kZXgpIDwtIG5ld2J1Y2tldDtcbiAgICAgICAgdC5oYXNoZXMuKGluZGV4KSA8LSBuZXdoYXNoZXM7XG4gICAgICAgIGlmIHN6IDw9IHQubGltaXQgJiYgbmV3c3ogPiB0LmxpbWl0IHRoZW4gYmVnaW5cbiAgICAgICAgICB0Lm92ZXJzaXplIDwtIHQub3ZlcnNpemUgKyAxO1xuICAgICAgICAgIGZvciBfaSA9IDAgdG8gb3Zlcl9saW1pdCBkbyB0ZXN0X3Nocmlua19idWNrZXQgdCBkb25lO1xuICAgICAgICBlbmQ7XG4gICAgICAgIGlmIHQub3ZlcnNpemUgPiBBcnJheS5sZW5ndGggdC50YWJsZSAvIG92ZXJfbGltaXQgdGhlbiByZXNpemUgdDtcbiAgICAgIGVuZCBlbHNlIGlmIGNoZWNrIGJ1Y2tldCBpIHRoZW4gYmVnaW5cbiAgICAgICAgbG9vcCAoaSArIDEpXG4gICAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgICBzZXR0ZXIgYnVja2V0IGkgZDtcbiAgICAgICAgaGFzaGVzLihpKSA8LSBoO1xuICAgICAgZW5kO1xuICAgIGluXG4gICAgbG9vcCAwXG5cblxuICBsZXQgYWRkIHQgZCA9XG4gICAgbGV0IGggPSBILmhhc2ggZCBpblxuICAgIGFkZF9hdXggdCBzZXQgKFNvbWUgZCkgaCAoZ2V0X2luZGV4IHQgaClcblxuXG4gIGxldCBmaW5kX29yIHQgZCBpZm5vdGZvdW5kID1cbiAgICBsZXQgaCA9IEguaGFzaCBkIGluXG4gICAgbGV0IGluZGV4ID0gZ2V0X2luZGV4IHQgaCBpblxuICAgIGxldCBidWNrZXQgPSB0LnRhYmxlLihpbmRleCkgaW5cbiAgICBsZXQgaGFzaGVzID0gdC5oYXNoZXMuKGluZGV4KSBpblxuICAgIGxldCBzeiA9IGxlbmd0aCBidWNrZXQgaW5cbiAgICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgICBpZiBpID49IHN6IHRoZW4gaWZub3Rmb3VuZCBoIGluZGV4XG4gICAgICBlbHNlIGlmIGggPSBoYXNoZXMuKGkpIHRoZW4gYmVnaW5cbiAgICAgICAgbWF0Y2ggZ2V0X2NvcHkgYnVja2V0IGkgd2l0aFxuICAgICAgICB8IFNvbWUgdiB3aGVuIEguZXF1YWwgdiBkXG4gICAgICAgICAgIC0+IGJlZ2luIG1hdGNoIGdldCBidWNrZXQgaSB3aXRoXG4gICAgICAgICAgICAgIHwgU29tZSB2IC0+IHZcbiAgICAgICAgICAgICAgfCBOb25lIC0+IGxvb3AgKGkgKyAxKVxuICAgICAgICAgICAgICBlbmRcbiAgICAgICAgfCBfIC0+IGxvb3AgKGkgKyAxKVxuICAgICAgZW5kIGVsc2UgbG9vcCAoaSArIDEpXG4gICAgaW5cbiAgICBsb29wIDBcblxuXG4gIGxldCBtZXJnZSB0IGQgPVxuICAgIGZpbmRfb3IgdCBkIChmdW4gaCBpbmRleCAtPiBhZGRfYXV4IHQgc2V0IChTb21lIGQpIGggaW5kZXg7IGQpXG5cblxuICBsZXQgZmluZCB0IGQgPSBmaW5kX29yIHQgZCAoZnVuIF9oIF9pbmRleCAtPiByYWlzZSBOb3RfZm91bmQpXG5cbiAgbGV0IGZpbmRfb3B0IHQgZCA9XG4gICAgbGV0IGggPSBILmhhc2ggZCBpblxuICAgIGxldCBpbmRleCA9IGdldF9pbmRleCB0IGggaW5cbiAgICBsZXQgYnVja2V0ID0gdC50YWJsZS4oaW5kZXgpIGluXG4gICAgbGV0IGhhc2hlcyA9IHQuaGFzaGVzLihpbmRleCkgaW5cbiAgICBsZXQgc3ogPSBsZW5ndGggYnVja2V0IGluXG4gICAgbGV0IHJlYyBsb29wIGkgPVxuICAgICAgaWYgaSA+PSBzeiB0aGVuIE5vbmVcbiAgICAgIGVsc2UgaWYgaCA9IGhhc2hlcy4oaSkgdGhlbiBiZWdpblxuICAgICAgICBtYXRjaCBnZXRfY29weSBidWNrZXQgaSB3aXRoXG4gICAgICAgIHwgU29tZSB2IHdoZW4gSC5lcXVhbCB2IGRcbiAgICAgICAgICAgLT4gYmVnaW4gbWF0Y2ggZ2V0IGJ1Y2tldCBpIHdpdGhcbiAgICAgICAgICAgICAgfCBTb21lIF8gYXMgdiAtPiB2XG4gICAgICAgICAgICAgIHwgTm9uZSAtPiBsb29wIChpICsgMSlcbiAgICAgICAgICAgICAgZW5kXG4gICAgICAgIHwgXyAtPiBsb29wIChpICsgMSlcbiAgICAgIGVuZCBlbHNlIGxvb3AgKGkgKyAxKVxuICAgIGluXG4gICAgbG9vcCAwXG5cblxuICBsZXQgZmluZF9zaGFkb3cgdCBkIGlmZm91bmQgaWZub3Rmb3VuZCA9XG4gICAgbGV0IGggPSBILmhhc2ggZCBpblxuICAgIGxldCBpbmRleCA9IGdldF9pbmRleCB0IGggaW5cbiAgICBsZXQgYnVja2V0ID0gdC50YWJsZS4oaW5kZXgpIGluXG4gICAgbGV0IGhhc2hlcyA9IHQuaGFzaGVzLihpbmRleCkgaW5cbiAgICBsZXQgc3ogPSBsZW5ndGggYnVja2V0IGluXG4gICAgbGV0IHJlYyBsb29wIGkgPVxuICAgICAgaWYgaSA+PSBzeiB0aGVuIGlmbm90Zm91bmRcbiAgICAgIGVsc2UgaWYgaCA9IGhhc2hlcy4oaSkgdGhlbiBiZWdpblxuICAgICAgICBtYXRjaCBnZXRfY29weSBidWNrZXQgaSB3aXRoXG4gICAgICAgIHwgU29tZSB2IHdoZW4gSC5lcXVhbCB2IGQgLT4gaWZmb3VuZCBidWNrZXQgaVxuICAgICAgICB8IF8gLT4gbG9vcCAoaSArIDEpXG4gICAgICBlbmQgZWxzZSBsb29wIChpICsgMSlcbiAgICBpblxuICAgIGxvb3AgMFxuXG5cbiAgbGV0IHJlbW92ZSB0IGQgPSBmaW5kX3NoYWRvdyB0IGQgKGZ1biB3IGkgLT4gc2V0IHcgaSBOb25lKSAoKVxuXG5cbiAgbGV0IG1lbSB0IGQgPSBmaW5kX3NoYWRvdyB0IGQgKGZ1biBfdyBfaSAtPiB0cnVlKSBmYWxzZVxuXG5cbiAgbGV0IGZpbmRfYWxsIHQgZCA9XG4gICAgbGV0IGggPSBILmhhc2ggZCBpblxuICAgIGxldCBpbmRleCA9IGdldF9pbmRleCB0IGggaW5cbiAgICBsZXQgYnVja2V0ID0gdC50YWJsZS4oaW5kZXgpIGluXG4gICAgbGV0IGhhc2hlcyA9IHQuaGFzaGVzLihpbmRleCkgaW5cbiAgICBsZXQgc3ogPSBsZW5ndGggYnVja2V0IGluXG4gICAgbGV0IHJlYyBsb29wIGkgYWNjdSA9XG4gICAgICBpZiBpID49IHN6IHRoZW4gYWNjdVxuICAgICAgZWxzZSBpZiBoID0gaGFzaGVzLihpKSB0aGVuIGJlZ2luXG4gICAgICAgIG1hdGNoIGdldF9jb3B5IGJ1Y2tldCBpIHdpdGhcbiAgICAgICAgfCBTb21lIHYgd2hlbiBILmVxdWFsIHYgZFxuICAgICAgICAgICAtPiBiZWdpbiBtYXRjaCBnZXQgYnVja2V0IGkgd2l0aFxuICAgICAgICAgICAgICB8IFNvbWUgdiAtPiBsb29wIChpICsgMSkgKHYgOjogYWNjdSlcbiAgICAgICAgICAgICAgfCBOb25lIC0+IGxvb3AgKGkgKyAxKSBhY2N1XG4gICAgICAgICAgICAgIGVuZFxuICAgICAgICB8IF8gLT4gbG9vcCAoaSArIDEpIGFjY3VcbiAgICAgIGVuZCBlbHNlIGxvb3AgKGkgKyAxKSBhY2N1XG4gICAgaW5cbiAgICBsb29wIDAgW11cblxuXG4gIGxldCBzdGF0cyB0ID1cbiAgICBsZXQgbGVuID0gQXJyYXkubGVuZ3RoIHQudGFibGUgaW5cbiAgICBsZXQgbGVucyA9IEFycmF5Lm1hcCBsZW5ndGggdC50YWJsZSBpblxuICAgIEFycmF5LnNvcnQgY29tcGFyZSBsZW5zO1xuICAgIGxldCB0b3RsZW4gPSBBcnJheS5mb2xkX2xlZnQgKCArICkgMCBsZW5zIGluXG4gICAgKGxlbiwgY291bnQgdCwgdG90bGVuLCBsZW5zLigwKSwgbGVucy4obGVuLzIpLCBsZW5zLihsZW4tMSkpXG5cblxuZW5kXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBQaWVycmUgV2VpcywgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIEEgcHJldHR5LXByaW50aW5nIGZhY2lsaXR5IGFuZCBkZWZpbml0aW9uIG9mIGZvcm1hdHRlcnMgZm9yICdwYXJhbGxlbCdcbiAgIChpLmUuIHVucmVsYXRlZCBvciBpbmRlcGVuZGVudCkgcHJldHR5LXByaW50aW5nIG9uIG11bHRpcGxlIG91dCBjaGFubmVscy4gKilcblxuKCpcbiAgIFRoZSBwcmV0dHktcHJpbnRpbmcgZW5naW5lIGludGVybmFsIGRhdGEgc3RydWN0dXJlcy5cbiopXG5cbmxldCBpZCB4ID0geFxuXG4oKiBBIGRldm90ZWQgdHlwZSBmb3Igc2l6ZXMgdG8gYXZvaWQgY29uZnVzaW9uXG4gICBiZXR3ZWVuIHNpemVzIGFuZCBtZXJlIGludGVnZXJzLiAqKVxubW9kdWxlIFNpemUgOiBzaWdcbiAgdHlwZSB0XG5cbiAgdmFsIHRvX2ludCA6IHQgLT4gaW50XG4gIHZhbCBvZl9pbnQgOiBpbnQgLT4gdFxuICB2YWwgemVybyA6IHRcbiAgdmFsIHVua25vd24gOiB0XG4gIHZhbCBpc19rbm93biA6IHQgLT4gYm9vbFxuZW5kICA9IHN0cnVjdFxuICB0eXBlIHQgPSBpbnRcblxuICBsZXQgdG9faW50ID0gaWRcbiAgbGV0IG9mX2ludCA9IGlkXG4gIGxldCB6ZXJvID0gMFxuICBsZXQgdW5rbm93biA9IC0xXG4gIGxldCBpc19rbm93biBuID0gbiA+PSAwXG5lbmRcblxuXG5cbigqIFRoZSBwcmV0dHktcHJpbnRpbmcgYm94ZXMgZGVmaW5pdGlvbjpcbiAgIGEgcHJldHR5LXByaW50aW5nIGJveCBpcyBlaXRoZXJcbiAgIC0gaGJveDogaG9yaXpvbnRhbCBib3ggKG5vIGxpbmUgc3BsaXR0aW5nKVxuICAgLSB2Ym94OiB2ZXJ0aWNhbCBib3ggKGV2ZXJ5IGJyZWFrIGhpbnQgc3BsaXRzIHRoZSBsaW5lKVxuICAgLSBodmJveDogaG9yaXpvbnRhbC92ZXJ0aWNhbCBib3hcbiAgICAgKHRoZSBib3ggYmVoYXZlcyBhcyBhbiBob3Jpem9udGFsIGJveCBpZiBpdCBmaXRzIG9uXG4gICAgICB0aGUgY3VycmVudCBsaW5lLCBvdGhlcndpc2UgdGhlIGJveCBiZWhhdmVzIGFzIGEgdmVydGljYWwgYm94KVxuICAgLSBob3Zib3g6IGhvcml6b250YWwgb3IgdmVydGljYWwgY29tcGFjdGluZyBib3hcbiAgICAgKHRoZSBib3ggaXMgY29tcGFjdGluZyBtYXRlcmlhbCwgcHJpbnRpbmcgYXMgbXVjaCBtYXRlcmlhbCBhcyBwb3NzaWJsZVxuICAgICAgb24gZXZlcnkgbGluZXMpXG4gICAtIGJveDogaG9yaXpvbnRhbCBvciB2ZXJ0aWNhbCBjb21wYWN0aW5nIGJveCB3aXRoIGVuaGFuY2VkIGJveCBzdHJ1Y3R1cmVcbiAgICAgKHRoZSBib3ggYmVoYXZlcyBhcyBhbiBob3Jpem9udGFsIG9yIHZlcnRpY2FsIGJveCBidXQgYnJlYWsgaGludHMgc3BsaXRcbiAgICAgIHRoZSBsaW5lIGlmIHNwbGl0dGluZyB3b3VsZCBtb3ZlIHRvIHRoZSBsZWZ0KVxuKilcbnR5cGUgYm94X3R5cGUgPSBDYW1saW50ZXJuYWxGb3JtYXRCYXNpY3MuYmxvY2tfdHlwZSA9XG4gIHwgUHBfaGJveCB8IFBwX3Zib3ggfCBQcF9odmJveCB8IFBwX2hvdmJveCB8IFBwX2JveCB8IFBwX2ZpdHNcblxuXG4oKiBUaGUgcHJldHR5LXByaW50aW5nIHRva2VucyBkZWZpbml0aW9uOlxuICAgYXJlIGVpdGhlciB0ZXh0IHRvIHByaW50IG9yIHByZXR0eSBwcmludGluZ1xuICAgZWxlbWVudHMgdGhhdCBkcml2ZSBpbmRlbnRhdGlvbiBhbmQgbGluZSBzcGxpdHRpbmcuICopXG50eXBlIHBwX3Rva2VuID1cbiAgfCBQcF90ZXh0IG9mIHN0cmluZyAgICAgICAgICAoKiBub3JtYWwgdGV4dCAqKVxuICB8IFBwX2JyZWFrIG9mIHsgICAgICAgICAgICAgICgqIGNvbXBsZXRlIGJyZWFrICopXG4gICAgICBmaXRzOiBzdHJpbmcgKiBpbnQgKiBzdHJpbmc7ICAgKCogbGluZSBpcyBub3Qgc3BsaXQgKilcbiAgICAgIGJyZWFrczogc3RyaW5nICogaW50ICogc3RyaW5nOyAoKiBsaW5lIGlzIHNwbGl0ICopXG4gICAgfVxuICB8IFBwX3RicmVhayBvZiBpbnQgKiBpbnQgICAgICgqIGdvIHRvIG5leHQgdGFidWxhdGlvbiAqKVxuICB8IFBwX3N0YWIgICAgICAgICAgICAgICAgICAgICgqIHNldCBhIHRhYnVsYXRpb24gKilcbiAgfCBQcF9iZWdpbiBvZiBpbnQgKiBib3hfdHlwZSAoKiBiZWdpbm5pbmcgb2YgYSBib3ggKilcbiAgfCBQcF9lbmQgICAgICAgICAgICAgICAgICAgICAoKiBlbmQgb2YgYSBib3ggKilcbiAgfCBQcF90YmVnaW4gb2YgdGJveCAgICAgICAgICAoKiBiZWdpbm5pbmcgb2YgYSB0YWJ1bGF0aW9uIGJveCAqKVxuICB8IFBwX3RlbmQgICAgICAgICAgICAgICAgICAgICgqIGVuZCBvZiBhIHRhYnVsYXRpb24gYm94ICopXG4gIHwgUHBfbmV3bGluZSAgICAgICAgICAgICAgICAgKCogdG8gZm9yY2UgYSBuZXdsaW5lIGluc2lkZSBhIGJveCAqKVxuICB8IFBwX2lmX25ld2xpbmUgICAgICAgICAgICAgICgqIHRvIGRvIHNvbWV0aGluZyBvbmx5IGlmIHRoaXMgdmVyeVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgaGFzIGJlZW4gYnJva2VuICopXG4gIHwgUHBfb3Blbl90YWcgb2Ygc3RhZyAgICAgICAgICgqIG9wZW5pbmcgYSB0YWcgbmFtZSAqKVxuICB8IFBwX2Nsb3NlX3RhZyAgICAgICAgICAgICAgICgqIGNsb3NpbmcgdGhlIG1vc3QgcmVjZW50bHkgb3BlbiB0YWcgKilcblxuYW5kIHN0YWcgPSAuLlxuXG5hbmQgdGJveCA9IFBwX3Rib3ggb2YgaW50IGxpc3QgcmVmICAoKiBUYWJ1bGF0aW9uIGJveCAqKVxuXG50eXBlIHRhZyA9IHN0cmluZ1xudHlwZSBzdGFnICs9IFN0cmluZ190YWcgb2YgdGFnXG5cblxuKCogVGhlIHByZXR0eS1wcmludGVyIHF1ZXVlOlxuICAgcHJldHR5LXByaW50aW5nIG1hdGVyaWFsIGlzIG5vdCB3cml0dGVuIGluIHRoZSBvdXRwdXQgYXMgc29vbiBhcyBlbWl0dGVkO1xuICAgaW5zdGVhZCwgdGhlIG1hdGVyaWFsIGlzIHNpbXBseSByZWNvcmRlZCBpbiB0aGUgcHJldHR5LXByaW50ZXIgcXVldWUsXG4gICB1bnRpbCB0aGUgZW5jbG9zaW5nIGJveCBoYXMgYSBrbm93biBjb21wdXRlZCBzaXplIGFuZCBwcm9wZXIgc3BsaXR0aW5nXG4gICBkZWNpc2lvbnMgY2FuIGJlIG1hZGUuXG5cbiAgIFRoZSBwcmV0dHktcHJpbnRlciBxdWV1ZSBjb250YWlucyBmb3JtYXR0aW5nIGVsZW1lbnRzIHRvIGJlIHByaW50ZWQuXG4gICBFYWNoIGZvcm1hdHRpbmcgZWxlbWVudCBpcyBhIHR1cGxlIChzaXplLCB0b2tlbiwgbGVuZ3RoKSwgd2hlcmVcbiAgIC0gbGVuZ3RoIGlzIHRoZSBkZWNsYXJlZCBsZW5ndGggb2YgdGhlIHRva2VuLFxuICAgLSBzaXplIGlzIGVmZmVjdGl2ZSBzaXplIG9mIHRoZSB0b2tlbiB3aGVuIGl0IGlzIHByaW50ZWRcbiAgICAgKHNpemUgaXMgc2V0IHdoZW4gdGhlIHNpemUgb2YgdGhlIGJveCBpcyBrbm93biwgc28gdGhhdCBzaXplIG9mIGJyZWFrXG4gICAgICBoaW50cyBhcmUgZGVmaW5pdGl2ZSkuICopXG50eXBlIHBwX3F1ZXVlX2VsZW0gPSB7XG4gIG11dGFibGUgc2l6ZSA6IFNpemUudDtcbiAgdG9rZW4gOiBwcF90b2tlbjtcbiAgbGVuZ3RoIDogaW50O1xufVxuXG5cbigqIFRoZSBwcmV0dHktcHJpbnRlciBxdWV1ZSBkZWZpbml0aW9uLiAqKVxudHlwZSBwcF9xdWV1ZSA9IHBwX3F1ZXVlX2VsZW0gUXVldWUudFxuXG4oKiBUaGUgcHJldHR5LXByaW50ZXIgc2Nhbm5pbmcgc3RhY2suICopXG5cbigqIFRoZSBwcmV0dHktcHJpbnRlciBzY2FubmluZyBzdGFjazogc2Nhbm5pbmcgZWxlbWVudCBkZWZpbml0aW9uLiAqKVxudHlwZSBwcF9zY2FuX2VsZW0gPSB7XG4gIGxlZnRfdG90YWwgOiBpbnQ7ICgqIFZhbHVlIG9mIHBwX2xlZnRfdG90YWwgd2hlbiB0aGUgZWxlbWVudCB3YXMgZW5xdWV1ZWQuICopXG4gIHF1ZXVlX2VsZW0gOiBwcF9xdWV1ZV9lbGVtXG59XG5cbigqIFRoZSBwcmV0dHktcHJpbnRlciBmb3JtYXR0aW5nIHN0YWNrOlxuICAgdGhlIGZvcm1hdHRpbmcgc3RhY2sgY29udGFpbnMgdGhlIGRlc2NyaXB0aW9uIG9mIGFsbCB0aGUgY3VycmVudGx5IGFjdGl2ZVxuICAgYm94ZXM7IHRoZSBwcmV0dHktcHJpbnRlciBmb3JtYXR0aW5nIHN0YWNrIGlzIHVzZWQgdG8gc3BsaXQgdGhlIGxpbmVzXG4gICB3aGlsZSBwcmludGluZyB0b2tlbnMuICopXG5cbigqIFRoZSBwcmV0dHktcHJpbnRlciBmb3JtYXR0aW5nIHN0YWNrOiBmb3JtYXR0aW5nIHN0YWNrIGVsZW1lbnQgZGVmaW5pdGlvbi5cbiAgIEVhY2ggc3RhY2sgZWxlbWVudCBkZXNjcmliZXMgYSBwcmV0dHktcHJpbnRpbmcgYm94LiAqKVxudHlwZSBwcF9mb3JtYXRfZWxlbSA9IHsgYm94X3R5cGUgOiBib3hfdHlwZTsgd2lkdGggOiBpbnQgfVxuXG4oKiBUaGUgZm9ybWF0dGVyIGRlZmluaXRpb24uXG4gICBFYWNoIGZvcm1hdHRlciB2YWx1ZSBpcyBhIHByZXR0eS1wcmludGVyIGluc3RhbmNlIHdpdGggYWxsIGl0c1xuICAgbWFjaGluZXJ5LiAqKVxudHlwZSBmb3JtYXR0ZXIgPSB7XG4gICgqIFRoZSBwcmV0dHktcHJpbnRlciBzY2FubmluZyBzdGFjay4gKilcbiAgcHBfc2Nhbl9zdGFjayA6IHBwX3NjYW5fZWxlbSBTdGFjay50O1xuICAoKiBUaGUgcHJldHR5LXByaW50ZXIgZm9ybWF0dGluZyBzdGFjay4gKilcbiAgcHBfZm9ybWF0X3N0YWNrIDogcHBfZm9ybWF0X2VsZW0gU3RhY2sudDtcbiAgcHBfdGJveF9zdGFjayA6IHRib3ggU3RhY2sudDtcbiAgKCogVGhlIHByZXR0eS1wcmludGVyIHNlbWFudGljcyB0YWcgc3RhY2suICopXG4gIHBwX3RhZ19zdGFjayA6IHN0YWcgU3RhY2sudDtcbiAgcHBfbWFya19zdGFjayA6IHN0YWcgU3RhY2sudDtcbiAgKCogVmFsdWUgb2YgcmlnaHQgbWFyZ2luLiAqKVxuICBtdXRhYmxlIHBwX21hcmdpbiA6IGludDtcbiAgKCogTWluaW1hbCBzcGFjZSBsZWZ0IGJlZm9yZSBtYXJnaW4sIHdoZW4gb3BlbmluZyBhIGJveC4gKilcbiAgbXV0YWJsZSBwcF9taW5fc3BhY2VfbGVmdCA6IGludDtcbiAgKCogTWF4aW11bSB2YWx1ZSBvZiBpbmRlbnRhdGlvbjpcbiAgICAgbm8gYm94IGNhbiBiZSBvcGVuZWQgZnVydGhlci4gKilcbiAgbXV0YWJsZSBwcF9tYXhfaW5kZW50IDogaW50O1xuICAoKiBTcGFjZSByZW1haW5pbmcgb24gdGhlIGN1cnJlbnQgbGluZS4gKilcbiAgbXV0YWJsZSBwcF9zcGFjZV9sZWZ0IDogaW50O1xuICAoKiBDdXJyZW50IHZhbHVlIG9mIGluZGVudGF0aW9uLiAqKVxuICBtdXRhYmxlIHBwX2N1cnJlbnRfaW5kZW50IDogaW50O1xuICAoKiBUcnVlIHdoZW4gdGhlIGxpbmUgaGFzIGJlZW4gYnJva2VuIGJ5IHRoZSBwcmV0dHktcHJpbnRlci4gKilcbiAgbXV0YWJsZSBwcF9pc19uZXdfbGluZSA6IGJvb2w7XG4gICgqIFRvdGFsIHdpZHRoIG9mIHRva2VucyBhbHJlYWR5IHByaW50ZWQuICopXG4gIG11dGFibGUgcHBfbGVmdF90b3RhbCA6IGludDtcbiAgKCogVG90YWwgd2lkdGggb2YgdG9rZW5zIGV2ZXIgcHV0IGluIHF1ZXVlLiAqKVxuICBtdXRhYmxlIHBwX3JpZ2h0X3RvdGFsIDogaW50O1xuICAoKiBDdXJyZW50IG51bWJlciBvZiBvcGVuIGJveGVzLiAqKVxuICBtdXRhYmxlIHBwX2N1cnJfZGVwdGggOiBpbnQ7XG4gICgqIE1heGltdW0gbnVtYmVyIG9mIGJveGVzIHdoaWNoIGNhbiBiZSBzaW11bHRhbmVvdXNseSBvcGVuLiAqKVxuICBtdXRhYmxlIHBwX21heF9ib3hlcyA6IGludDtcbiAgKCogRWxsaXBzaXMgc3RyaW5nLiAqKVxuICBtdXRhYmxlIHBwX2VsbGlwc2lzIDogc3RyaW5nO1xuICAoKiBPdXRwdXQgZnVuY3Rpb24uICopXG4gIG11dGFibGUgcHBfb3V0X3N0cmluZyA6IHN0cmluZyAtPiBpbnQgLT4gaW50IC0+IHVuaXQ7XG4gICgqIEZsdXNoaW5nIGZ1bmN0aW9uLiAqKVxuICBtdXRhYmxlIHBwX291dF9mbHVzaCA6IHVuaXQgLT4gdW5pdDtcbiAgKCogT3V0cHV0IG9mIG5ldyBsaW5lcy4gKilcbiAgbXV0YWJsZSBwcF9vdXRfbmV3bGluZSA6IHVuaXQgLT4gdW5pdDtcbiAgKCogT3V0cHV0IG9mIGJyZWFrIGhpbnRzIHNwYWNlcy4gKilcbiAgbXV0YWJsZSBwcF9vdXRfc3BhY2VzIDogaW50IC0+IHVuaXQ7XG4gICgqIE91dHB1dCBvZiBpbmRlbnRhdGlvbiBvZiBuZXcgbGluZXMuICopXG4gIG11dGFibGUgcHBfb3V0X2luZGVudCA6IGludCAtPiB1bml0O1xuICAoKiBBcmUgdGFncyBwcmludGVkID8gKilcbiAgbXV0YWJsZSBwcF9wcmludF90YWdzIDogYm9vbDtcbiAgKCogQXJlIHRhZ3MgbWFya2VkID8gKilcbiAgbXV0YWJsZSBwcF9tYXJrX3RhZ3MgOiBib29sO1xuICAoKiBGaW5kIG9wZW5pbmcgYW5kIGNsb3NpbmcgbWFya2VycyBvZiB0YWdzLiAqKVxuICBtdXRhYmxlIHBwX21hcmtfb3Blbl90YWcgOiBzdGFnIC0+IHN0cmluZztcbiAgbXV0YWJsZSBwcF9tYXJrX2Nsb3NlX3RhZyA6IHN0YWcgLT4gc3RyaW5nO1xuICBtdXRhYmxlIHBwX3ByaW50X29wZW5fdGFnIDogc3RhZyAtPiB1bml0O1xuICBtdXRhYmxlIHBwX3ByaW50X2Nsb3NlX3RhZyA6IHN0YWcgLT4gdW5pdDtcbiAgKCogVGhlIHByZXR0eS1wcmludGVyIHF1ZXVlLiAqKVxuICBwcF9xdWV1ZSA6IHBwX3F1ZXVlO1xufVxuXG5cbigqIFRoZSBmb3JtYXR0ZXIgc3BlY2lmaWMgdGFnIGhhbmRsaW5nIGZ1bmN0aW9ucy4gKilcbnR5cGUgZm9ybWF0dGVyX3N0YWdfZnVuY3Rpb25zID0ge1xuICBtYXJrX29wZW5fc3RhZyA6IHN0YWcgLT4gc3RyaW5nO1xuICBtYXJrX2Nsb3NlX3N0YWcgOiBzdGFnIC0+IHN0cmluZztcbiAgcHJpbnRfb3Blbl9zdGFnIDogc3RhZyAtPiB1bml0O1xuICBwcmludF9jbG9zZV9zdGFnIDogc3RhZyAtPiB1bml0O1xufVxuXG5cbigqIFRoZSBmb3JtYXR0ZXIgZnVuY3Rpb25zIHRvIG91dHB1dCBtYXRlcmlhbC4gKilcbnR5cGUgZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgPSB7XG4gIG91dF9zdHJpbmcgOiBzdHJpbmcgLT4gaW50IC0+IGludCAtPiB1bml0O1xuICBvdXRfZmx1c2ggOiB1bml0IC0+IHVuaXQ7XG4gIG91dF9uZXdsaW5lIDogdW5pdCAtPiB1bml0O1xuICBvdXRfc3BhY2VzIDogaW50IC0+IHVuaXQ7XG4gIG91dF9pbmRlbnQgOiBpbnQgLT4gdW5pdDtcbn1cblxuXG4oKlxuXG4gIEF1eGlsaWFyaWVzIGFuZCBiYXNpYyBmdW5jdGlvbnMuXG5cbiopXG5cbigqIEVudGVyIGEgdG9rZW4gaW4gdGhlIHByZXR0eS1wcmludGVyIHF1ZXVlLiAqKVxubGV0IHBwX2VucXVldWUgc3RhdGUgdG9rZW4gPVxuICBzdGF0ZS5wcF9yaWdodF90b3RhbCA8LSBzdGF0ZS5wcF9yaWdodF90b3RhbCArIHRva2VuLmxlbmd0aDtcbiAgUXVldWUuYWRkIHRva2VuIHN0YXRlLnBwX3F1ZXVlXG5cblxubGV0IHBwX2NsZWFyX3F1ZXVlIHN0YXRlID1cbiAgc3RhdGUucHBfbGVmdF90b3RhbCA8LSAxOyBzdGF0ZS5wcF9yaWdodF90b3RhbCA8LSAxO1xuICBRdWV1ZS5jbGVhciBzdGF0ZS5wcF9xdWV1ZVxuXG5cbigqIFBwX2luZmluaXR5OiBsYXJnZSB2YWx1ZSBmb3IgZGVmYXVsdCB0b2tlbnMgc2l6ZS5cblxuICAgUHBfaW5maW5pdHkgaXMgZG9jdW1lbnRlZCBhcyBiZWluZyBncmVhdGVyIHRoYW4gMWUxMDsgdG8gYXZvaWRcbiAgIGNvbmZ1c2lvbiBhYm91dCB0aGUgd29yZCAnZ3JlYXRlcicsIHdlIGNob29zZSBwcF9pbmZpbml0eSBncmVhdGVyXG4gICB0aGFuIDFlMTAgKyAxOyBmb3IgY29ycmVjdCBoYW5kbGluZyBvZiB0ZXN0cyBpbiB0aGUgYWxnb3JpdGhtLFxuICAgcHBfaW5maW5pdHkgbXVzdCBiZSBldmVuIG9uZSBtb3JlIHRoYW4gMWUxMCArIDE7IGxldCdzIHN0YW5kIG9uIHRoZVxuICAgc2FmZSBzaWRlIGJ5IGNob29zaW5nIDEuZTEwKzEwLlxuXG4gICBQcF9pbmZpbml0eSBjb3VsZCBwcm9iYWJseSBiZSAxMDczNzQxODIzIHRoYXQgaXMgMl4zMCAtIDEsIHRoYXQgaXNcbiAgIHRoZSBtaW5pbWFsIHVwcGVyIGJvdW5kIGZvciBpbnRlZ2Vyczsgbm93IHRoYXQgbWF4X2ludCBpcyBkZWZpbmVkLFxuICAgdGhpcyBsaW1pdCBjb3VsZCBhbHNvIGJlIGRlZmluZWQgYXMgbWF4X2ludCAtIDEuXG5cbiAgIEhvd2V2ZXIsIGJlZm9yZSBzZXR0aW5nIHBwX2luZmluaXR5IHRvIHNvbWV0aGluZyBhcm91bmQgbWF4X2ludCwgd2VcbiAgIG11c3QgY2FyZWZ1bGx5IGRvdWJsZS1jaGVjayBhbGwgdGhlIGludGVnZXIgYXJpdGhtZXRpYyBvcGVyYXRpb25zXG4gICB0aGF0IGludm9sdmUgcHBfaW5maW5pdHksIHNpbmNlIGFueSBvdmVyZmxvdyB3b3VsZCB3cmVjayBoYXZvYyB0aGVcbiAgIHByZXR0eS1wcmludGluZyBhbGdvcml0aG0ncyBpbnZhcmlhbnRzLiBHaXZlbiB0aGF0IHRoaXMgYXJpdGhtZXRpY1xuICAgY29ycmVjdG5lc3MgY2hlY2sgaXMgZGlmZmljdWx0IGFuZCBlcnJvciBwcm9uZSBhbmQgZ2l2ZW4gdGhhdCAxZTEwXG4gICArIDEgaXMgaW4gcHJhY3RpY2UgbGFyZ2UgZW5vdWdoLCB0aGVyZSBpcyBubyBuZWVkIHRvIGF0dGVtcHQgdG8gc2V0XG4gICBwcF9pbmZpbml0eSB0byB0aGUgdGhlb3JldGljYWxseSBtYXhpbXVtIGxpbWl0LiBJdCBpcyBub3Qgd29ydGggdGhlXG4gICBidXJkZW4gISAqKVxubGV0IHBwX2luZmluaXR5ID0gMTAwMDAwMDAxMFxuXG4oKiBPdXRwdXQgZnVuY3Rpb25zIGZvciB0aGUgZm9ybWF0dGVyLiAqKVxubGV0IHBwX291dHB1dF9zdHJpbmcgc3RhdGUgcyA9IHN0YXRlLnBwX291dF9zdHJpbmcgcyAwIChTdHJpbmcubGVuZ3RoIHMpXG5hbmQgcHBfb3V0cHV0X25ld2xpbmUgc3RhdGUgPSBzdGF0ZS5wcF9vdXRfbmV3bGluZSAoKVxuYW5kIHBwX291dHB1dF9zcGFjZXMgc3RhdGUgbiA9IHN0YXRlLnBwX291dF9zcGFjZXMgblxuYW5kIHBwX291dHB1dF9pbmRlbnQgc3RhdGUgbiA9IHN0YXRlLnBwX291dF9pbmRlbnQgblxuXG4oKiBGb3JtYXQgYSB0ZXh0dWFsIHRva2VuICopXG5sZXQgZm9ybWF0X3BwX3RleHQgc3RhdGUgc2l6ZSB0ZXh0ID1cbiAgc3RhdGUucHBfc3BhY2VfbGVmdCA8LSBzdGF0ZS5wcF9zcGFjZV9sZWZ0IC0gc2l6ZTtcbiAgcHBfb3V0cHV0X3N0cmluZyBzdGF0ZSB0ZXh0O1xuICBzdGF0ZS5wcF9pc19uZXdfbGluZSA8LSBmYWxzZVxuXG4oKiBGb3JtYXQgYSBzdHJpbmcgYnkgaXRzIGxlbmd0aCwgaWYgbm90IGVtcHR5ICopXG5sZXQgZm9ybWF0X3N0cmluZyBzdGF0ZSBzID1cbiAgaWYgcyA8PiBcIlwiIHRoZW4gZm9ybWF0X3BwX3RleHQgc3RhdGUgKFN0cmluZy5sZW5ndGggcykgc1xuXG4oKiBUbyBmb3JtYXQgYSBicmVhaywgaW5kZW50aW5nIGEgbmV3IGxpbmUuICopXG5sZXQgYnJlYWtfbmV3X2xpbmUgc3RhdGUgKGJlZm9yZSwgb2Zmc2V0LCBhZnRlcikgd2lkdGggPVxuICBmb3JtYXRfc3RyaW5nIHN0YXRlIGJlZm9yZTtcbiAgcHBfb3V0cHV0X25ld2xpbmUgc3RhdGU7XG4gIHN0YXRlLnBwX2lzX25ld19saW5lIDwtIHRydWU7XG4gIGxldCBpbmRlbnQgPSBzdGF0ZS5wcF9tYXJnaW4gLSB3aWR0aCArIG9mZnNldCBpblxuICAoKiBEb24ndCBpbmRlbnQgbW9yZSB0aGFuIHBwX21heF9pbmRlbnQuICopXG4gIGxldCByZWFsX2luZGVudCA9IEludC5taW4gc3RhdGUucHBfbWF4X2luZGVudCBpbmRlbnQgaW5cbiAgc3RhdGUucHBfY3VycmVudF9pbmRlbnQgPC0gcmVhbF9pbmRlbnQ7XG4gIHN0YXRlLnBwX3NwYWNlX2xlZnQgPC0gc3RhdGUucHBfbWFyZ2luIC0gc3RhdGUucHBfY3VycmVudF9pbmRlbnQ7XG4gIHBwX291dHB1dF9pbmRlbnQgc3RhdGUgc3RhdGUucHBfY3VycmVudF9pbmRlbnQ7XG4gIGZvcm1hdF9zdHJpbmcgc3RhdGUgYWZ0ZXJcblxuXG4oKiBUbyBmb3JjZSBhIGxpbmUgYnJlYWsgaW5zaWRlIGEgYm94OiBubyBvZmZzZXQgaXMgYWRkZWQuICopXG5sZXQgYnJlYWtfbGluZSBzdGF0ZSB3aWR0aCA9IGJyZWFrX25ld19saW5lIHN0YXRlIChcIlwiLCAwLCBcIlwiKSB3aWR0aFxuXG4oKiBUbyBmb3JtYXQgYSBicmVhayB0aGF0IGZpdHMgb24gdGhlIGN1cnJlbnQgbGluZS4gKilcbmxldCBicmVha19zYW1lX2xpbmUgc3RhdGUgKGJlZm9yZSwgd2lkdGgsIGFmdGVyKSA9XG4gIGZvcm1hdF9zdHJpbmcgc3RhdGUgYmVmb3JlO1xuICBzdGF0ZS5wcF9zcGFjZV9sZWZ0IDwtIHN0YXRlLnBwX3NwYWNlX2xlZnQgLSB3aWR0aDtcbiAgcHBfb3V0cHV0X3NwYWNlcyBzdGF0ZSB3aWR0aDtcbiAgZm9ybWF0X3N0cmluZyBzdGF0ZSBhZnRlclxuXG5cbigqIFRvIGluZGVudCBubyBtb3JlIHRoYW4gcHBfbWF4X2luZGVudCwgaWYgb25lIHRyaWVzIHRvIG9wZW4gYSBib3hcbiAgIGJleW9uZCBwcF9tYXhfaW5kZW50LCB0aGVuIHRoZSBib3ggaXMgcmVqZWN0ZWQgb24gdGhlIGxlZnRcbiAgIGJ5IHNpbXVsYXRpbmcgYSBicmVhay4gKilcbmxldCBwcF9mb3JjZV9icmVha19saW5lIHN0YXRlID1cbiAgbWF0Y2ggU3RhY2sudG9wX29wdCBzdGF0ZS5wcF9mb3JtYXRfc3RhY2sgd2l0aFxuICB8IE5vbmUgLT4gcHBfb3V0cHV0X25ld2xpbmUgc3RhdGVcbiAgfCBTb21lIHsgYm94X3R5cGU7IHdpZHRoIH0gLT5cbiAgICBpZiB3aWR0aCA+IHN0YXRlLnBwX3NwYWNlX2xlZnQgdGhlblxuICAgICAgbWF0Y2ggYm94X3R5cGUgd2l0aFxuICAgICAgfCBQcF9maXRzIHwgUHBfaGJveCAtPiAoKVxuICAgICAgfCBQcF92Ym94IHwgUHBfaHZib3ggfCBQcF9ob3Zib3ggfCBQcF9ib3ggLT4gYnJlYWtfbGluZSBzdGF0ZSB3aWR0aFxuXG5cbigqIFRvIHNraXAgYSB0b2tlbiwgaWYgdGhlIHByZXZpb3VzIGxpbmUgaGFzIGJlZW4gYnJva2VuLiAqKVxubGV0IHBwX3NraXBfdG9rZW4gc3RhdGUgPVxuICBtYXRjaCBRdWV1ZS50YWtlX29wdCBzdGF0ZS5wcF9xdWV1ZSB3aXRoXG4gIHwgTm9uZSAtPiAoKSAoKiBwcmludF9pZl9uZXdsaW5lIG11c3QgaGF2ZSBiZWVuIHRoZSBsYXN0IHByaW50aW5nIGNvbW1hbmQgKilcbiAgfCBTb21lIHsgc2l6ZTsgbGVuZ3RoOyBfIH0gLT5cbiAgICBzdGF0ZS5wcF9sZWZ0X3RvdGFsIDwtIHN0YXRlLnBwX2xlZnRfdG90YWwgLSBsZW5ndGg7XG4gICAgc3RhdGUucHBfc3BhY2VfbGVmdCA8LSBzdGF0ZS5wcF9zcGFjZV9sZWZ0ICsgU2l6ZS50b19pbnQgc2l6ZVxuXG5cbigqXG5cbiAgVGhlIG1haW4gcHJldHR5IHByaW50aW5nIGZ1bmN0aW9ucy5cblxuKilcblxuKCogRm9ybWF0dGluZyBhIHRva2VuIHdpdGggYSBnaXZlbiBzaXplLiAqKVxubGV0IGZvcm1hdF9wcF90b2tlbiBzdGF0ZSBzaXplID0gZnVuY3Rpb25cblxuICB8IFBwX3RleHQgcyAtPlxuICAgIGZvcm1hdF9wcF90ZXh0IHN0YXRlIHNpemUgc1xuXG4gIHwgUHBfYmVnaW4gKG9mZiwgdHkpIC0+XG4gICAgbGV0IGluc2VydGlvbl9wb2ludCA9IHN0YXRlLnBwX21hcmdpbiAtIHN0YXRlLnBwX3NwYWNlX2xlZnQgaW5cbiAgICBpZiBpbnNlcnRpb25fcG9pbnQgPiBzdGF0ZS5wcF9tYXhfaW5kZW50IHRoZW5cbiAgICAgICgqIGNhbiBub3Qgb3BlbiBhIGJveCByaWdodCB0aGVyZS4gKilcbiAgICAgIGJlZ2luIHBwX2ZvcmNlX2JyZWFrX2xpbmUgc3RhdGUgZW5kO1xuICAgIGxldCB3aWR0aCA9IHN0YXRlLnBwX3NwYWNlX2xlZnQgLSBvZmYgaW5cbiAgICBsZXQgYm94X3R5cGUgPVxuICAgICAgbWF0Y2ggdHkgd2l0aFxuICAgICAgfCBQcF92Ym94IC0+IFBwX3Zib3hcbiAgICAgIHwgUHBfaGJveCB8IFBwX2h2Ym94IHwgUHBfaG92Ym94IHwgUHBfYm94IHwgUHBfZml0cyAtPlxuICAgICAgICBpZiBzaXplID4gc3RhdGUucHBfc3BhY2VfbGVmdCB0aGVuIHR5IGVsc2UgUHBfZml0cyBpblxuICAgIFN0YWNrLnB1c2ggeyBib3hfdHlwZTsgd2lkdGggfSBzdGF0ZS5wcF9mb3JtYXRfc3RhY2tcblxuICB8IFBwX2VuZCAtPlxuICAgIFN0YWNrLnBvcF9vcHQgc3RhdGUucHBfZm9ybWF0X3N0YWNrIHw+IGlnbm9yZVxuXG4gIHwgUHBfdGJlZ2luIChQcF90Ym94IF8gYXMgdGJveCkgLT5cbiAgICBTdGFjay5wdXNoIHRib3ggc3RhdGUucHBfdGJveF9zdGFja1xuXG4gIHwgUHBfdGVuZCAtPlxuICAgIFN0YWNrLnBvcF9vcHQgc3RhdGUucHBfdGJveF9zdGFjayB8PiBpZ25vcmVcblxuICB8IFBwX3N0YWIgLT5cbiAgICBiZWdpbiBtYXRjaCBTdGFjay50b3Bfb3B0IHN0YXRlLnBwX3Rib3hfc3RhY2sgd2l0aFxuICAgIHwgTm9uZSAtPiAoKSAoKiBObyBvcGVuIHRhYnVsYXRpb24gYm94LiAqKVxuICAgIHwgU29tZSAoUHBfdGJveCB0YWJzKSAtPlxuICAgICAgbGV0IHJlYyBhZGRfdGFiIG4gPSBmdW5jdGlvblxuICAgICAgICB8IFtdIC0+IFtuXVxuICAgICAgICB8IHggOjogbCBhcyBscyAtPiBpZiBuIDwgeCB0aGVuIG4gOjogbHMgZWxzZSB4IDo6IGFkZF90YWIgbiBsIGluXG4gICAgICB0YWJzIDo9IGFkZF90YWIgKHN0YXRlLnBwX21hcmdpbiAtIHN0YXRlLnBwX3NwYWNlX2xlZnQpICF0YWJzXG4gICAgZW5kXG5cbiAgfCBQcF90YnJlYWsgKG4sIG9mZikgLT5cbiAgICBsZXQgaW5zZXJ0aW9uX3BvaW50ID0gc3RhdGUucHBfbWFyZ2luIC0gc3RhdGUucHBfc3BhY2VfbGVmdCBpblxuICAgIGJlZ2luIG1hdGNoIFN0YWNrLnRvcF9vcHQgc3RhdGUucHBfdGJveF9zdGFjayB3aXRoXG4gICAgfCBOb25lIC0+ICgpICgqIE5vIG9wZW4gdGFidWxhdGlvbiBib3guICopXG4gICAgfCBTb21lIChQcF90Ym94IHRhYnMpIC0+XG4gICAgICBsZXQgdGFiID1cbiAgICAgICAgbWF0Y2ggIXRhYnMgd2l0aFxuICAgICAgICB8IFtdIC0+IGluc2VydGlvbl9wb2ludFxuICAgICAgICB8IGZpcnN0IDo6IF8gLT5cbiAgICAgICAgICBsZXQgcmVjIGZpbmQgPSBmdW5jdGlvblxuICAgICAgICAgICAgfCBoZWFkIDo6IHRhaWwgLT5cbiAgICAgICAgICAgICAgaWYgaGVhZCA+PSBpbnNlcnRpb25fcG9pbnQgdGhlbiBoZWFkIGVsc2UgZmluZCB0YWlsXG4gICAgICAgICAgICB8IFtdIC0+IGZpcnN0IGluXG4gICAgICAgICAgZmluZCAhdGFicyBpblxuICAgICAgbGV0IG9mZnNldCA9IHRhYiAtIGluc2VydGlvbl9wb2ludCBpblxuICAgICAgaWYgb2Zmc2V0ID49IDBcbiAgICAgIHRoZW4gYnJlYWtfc2FtZV9saW5lIHN0YXRlIChcIlwiLCBvZmZzZXQgKyBuLCBcIlwiKVxuICAgICAgZWxzZSBicmVha19uZXdfbGluZSBzdGF0ZSAoXCJcIiwgdGFiICsgb2ZmLCBcIlwiKSBzdGF0ZS5wcF9tYXJnaW5cbiAgICBlbmRcblxuICB8IFBwX25ld2xpbmUgLT5cbiAgICBiZWdpbiBtYXRjaCBTdGFjay50b3Bfb3B0IHN0YXRlLnBwX2Zvcm1hdF9zdGFjayB3aXRoXG4gICAgfCBOb25lIC0+IHBwX291dHB1dF9uZXdsaW5lIHN0YXRlICgqIE5vIG9wZW4gYm94LiAqKVxuICAgIHwgU29tZSB7IHdpZHRoOyBffSAtPiBicmVha19saW5lIHN0YXRlIHdpZHRoXG4gICAgZW5kXG5cbiAgfCBQcF9pZl9uZXdsaW5lIC0+XG4gICAgaWYgc3RhdGUucHBfY3VycmVudF9pbmRlbnQgIT0gc3RhdGUucHBfbWFyZ2luIC0gc3RhdGUucHBfc3BhY2VfbGVmdFxuICAgIHRoZW4gcHBfc2tpcF90b2tlbiBzdGF0ZVxuXG4gIHwgUHBfYnJlYWsgeyBmaXRzOyBicmVha3MgfSAtPlxuICAgIGxldCBiZWZvcmUsIG9mZiwgXyA9IGJyZWFrcyBpblxuICAgIGJlZ2luIG1hdGNoIFN0YWNrLnRvcF9vcHQgc3RhdGUucHBfZm9ybWF0X3N0YWNrIHdpdGhcbiAgICB8IE5vbmUgLT4gKCkgKCogTm8gb3BlbiBib3guICopXG4gICAgfCBTb21lIHsgYm94X3R5cGU7IHdpZHRoIH0gLT5cbiAgICAgIGJlZ2luIG1hdGNoIGJveF90eXBlIHdpdGhcbiAgICAgIHwgUHBfaG92Ym94IC0+XG4gICAgICAgIGlmIHNpemUgKyBTdHJpbmcubGVuZ3RoIGJlZm9yZSA+IHN0YXRlLnBwX3NwYWNlX2xlZnRcbiAgICAgICAgdGhlbiBicmVha19uZXdfbGluZSBzdGF0ZSBicmVha3Mgd2lkdGhcbiAgICAgICAgZWxzZSBicmVha19zYW1lX2xpbmUgc3RhdGUgZml0c1xuICAgICAgfCBQcF9ib3ggLT5cbiAgICAgICAgKCogSGF2ZSB0aGUgbGluZSBqdXN0IGJlZW4gYnJva2VuIGhlcmUgPyAqKVxuICAgICAgICBpZiBzdGF0ZS5wcF9pc19uZXdfbGluZSB0aGVuIGJyZWFrX3NhbWVfbGluZSBzdGF0ZSBmaXRzIGVsc2VcbiAgICAgICAgaWYgc2l6ZSArIFN0cmluZy5sZW5ndGggYmVmb3JlID4gc3RhdGUucHBfc3BhY2VfbGVmdFxuICAgICAgICAgIHRoZW4gYnJlYWtfbmV3X2xpbmUgc3RhdGUgYnJlYWtzIHdpZHRoIGVsc2VcbiAgICAgICAgKCogYnJlYWsgdGhlIGxpbmUgaGVyZSBsZWFkcyB0byBuZXcgaW5kZW50YXRpb24gPyAqKVxuICAgICAgICBpZiBzdGF0ZS5wcF9jdXJyZW50X2luZGVudCA+IHN0YXRlLnBwX21hcmdpbiAtIHdpZHRoICsgb2ZmXG4gICAgICAgIHRoZW4gYnJlYWtfbmV3X2xpbmUgc3RhdGUgYnJlYWtzIHdpZHRoXG4gICAgICAgIGVsc2UgYnJlYWtfc2FtZV9saW5lIHN0YXRlIGZpdHNcbiAgICAgIHwgUHBfaHZib3ggLT4gYnJlYWtfbmV3X2xpbmUgc3RhdGUgYnJlYWtzIHdpZHRoXG4gICAgICB8IFBwX2ZpdHMgLT4gYnJlYWtfc2FtZV9saW5lIHN0YXRlIGZpdHNcbiAgICAgIHwgUHBfdmJveCAtPiBicmVha19uZXdfbGluZSBzdGF0ZSBicmVha3Mgd2lkdGhcbiAgICAgIHwgUHBfaGJveCAtPiBicmVha19zYW1lX2xpbmUgc3RhdGUgZml0c1xuICAgICAgZW5kXG4gICAgZW5kXG5cbiAgIHwgUHBfb3Blbl90YWcgdGFnX25hbWUgLT5cbiAgICAgbGV0IG1hcmtlciA9IHN0YXRlLnBwX21hcmtfb3Blbl90YWcgdGFnX25hbWUgaW5cbiAgICAgcHBfb3V0cHV0X3N0cmluZyBzdGF0ZSBtYXJrZXI7XG4gICAgIFN0YWNrLnB1c2ggdGFnX25hbWUgc3RhdGUucHBfbWFya19zdGFja1xuXG4gICB8IFBwX2Nsb3NlX3RhZyAtPlxuICAgICBiZWdpbiBtYXRjaCBTdGFjay5wb3Bfb3B0IHN0YXRlLnBwX21hcmtfc3RhY2sgd2l0aFxuICAgICB8IE5vbmUgLT4gKCkgKCogTm8gbW9yZSB0YWcgdG8gY2xvc2UuICopXG4gICAgIHwgU29tZSB0YWdfbmFtZSAtPlxuICAgICAgIGxldCBtYXJrZXIgPSBzdGF0ZS5wcF9tYXJrX2Nsb3NlX3RhZyB0YWdfbmFtZSBpblxuICAgICAgIHBwX291dHB1dF9zdHJpbmcgc3RhdGUgbWFya2VyXG4gICAgIGVuZFxuXG5cbigqIFByaW50IGlmIHRva2VuIHNpemUgaXMga25vd24gZWxzZSBwcmludGluZyBpcyBkZWxheWVkLlxuICAgUHJpbnRpbmcgaXMgZGVsYXllZCB3aGVuIHRoZSB0ZXh0IHdhaXRpbmcgaW4gdGhlIHF1ZXVlIHJlcXVpcmVzXG4gICBtb3JlIHJvb20gdG8gZm9ybWF0IHRoYW4gZXhpc3RzIG9uIHRoZSBjdXJyZW50IGxpbmUuICopXG5sZXQgcmVjIGFkdmFuY2VfbGVmdCBzdGF0ZSA9XG4gIG1hdGNoIFF1ZXVlLnBlZWtfb3B0IHN0YXRlLnBwX3F1ZXVlIHdpdGhcbiAgfCBOb25lIC0+ICgpICgqIE5vIHRva2VucyB0byBwcmludCAqKVxuICB8IFNvbWUgeyBzaXplOyB0b2tlbjsgbGVuZ3RoIH0gLT5cbiAgICBsZXQgcGVuZGluZ19jb3VudCA9IHN0YXRlLnBwX3JpZ2h0X3RvdGFsIC0gc3RhdGUucHBfbGVmdF90b3RhbCBpblxuICAgIGlmIFNpemUuaXNfa25vd24gc2l6ZSB8fCBwZW5kaW5nX2NvdW50ID49IHN0YXRlLnBwX3NwYWNlX2xlZnQgdGhlbiBiZWdpblxuICAgICAgUXVldWUudGFrZSBzdGF0ZS5wcF9xdWV1ZSB8PiBpZ25vcmU7ICgqIE5vdCBlbXB0eTogd2UgcGVlayBpbnRvIGl0ICopXG4gICAgICBsZXQgc2l6ZSA9IGlmIFNpemUuaXNfa25vd24gc2l6ZSB0aGVuIFNpemUudG9faW50IHNpemUgZWxzZSBwcF9pbmZpbml0eSBpblxuICAgICAgZm9ybWF0X3BwX3Rva2VuIHN0YXRlIHNpemUgdG9rZW47XG4gICAgICBzdGF0ZS5wcF9sZWZ0X3RvdGFsIDwtIGxlbmd0aCArIHN0YXRlLnBwX2xlZnRfdG90YWw7XG4gICAgICAoYWR2YW5jZV9sZWZ0IFtAdGFpbGNhbGxdKSBzdGF0ZVxuICAgIGVuZFxuXG5cbigqIFRvIGVucXVldWUgYSB0b2tlbiA6IHRyeSB0byBhZHZhbmNlLiAqKVxubGV0IGVucXVldWVfYWR2YW5jZSBzdGF0ZSB0b2sgPSBwcF9lbnF1ZXVlIHN0YXRlIHRvazsgYWR2YW5jZV9sZWZ0IHN0YXRlXG5cblxuKCogVG8gZW5xdWV1ZSBzdHJpbmdzLiAqKVxubGV0IGVucXVldWVfc3RyaW5nX2FzIHN0YXRlIHNpemUgcyA9XG4gIGVucXVldWVfYWR2YW5jZSBzdGF0ZSB7IHNpemU7IHRva2VuID0gUHBfdGV4dCBzOyBsZW5ndGggPSBTaXplLnRvX2ludCBzaXplIH1cblxuXG5sZXQgZW5xdWV1ZV9zdHJpbmcgc3RhdGUgcyA9XG4gIGVucXVldWVfc3RyaW5nX2FzIHN0YXRlIChTaXplLm9mX2ludCAoU3RyaW5nLmxlbmd0aCBzKSkgc1xuXG5cbigqIFJvdXRpbmVzIGZvciBzY2FuIHN0YWNrXG4gICBkZXRlcm1pbmUgc2l6ZSBvZiBib3hlcy4gKilcblxuKCogVGhlIHNjYW5fc3RhY2sgaXMgbmV2ZXIgZW1wdHkuICopXG5sZXQgaW5pdGlhbGl6ZV9zY2FuX3N0YWNrIHN0YWNrID1cbiAgU3RhY2suY2xlYXIgc3RhY2s7XG4gIGxldCBxdWV1ZV9lbGVtID0geyBzaXplID0gU2l6ZS51bmtub3duOyB0b2tlbiA9IFBwX3RleHQgXCJcIjsgbGVuZ3RoID0gMCB9IGluXG4gIFN0YWNrLnB1c2ggeyBsZWZ0X3RvdGFsID0gLTE7IHF1ZXVlX2VsZW0gfSBzdGFja1xuXG4oKiBTZXR0aW5nIHRoZSBzaXplIG9mIGJveGVzIG9uIHNjYW4gc3RhY2s6XG4gICBpZiB0eSA9IHRydWUgdGhlbiBzaXplIG9mIGJyZWFrIGlzIHNldCBlbHNlIHNpemUgb2YgYm94IGlzIHNldDtcbiAgIGluIGVhY2ggY2FzZSBwcF9zY2FuX3N0YWNrIGlzIHBvcHBlZC5cblxuICAgTm90ZTpcbiAgIFBhdHRlcm4gbWF0Y2hpbmcgb24gc2NhbiBzdGFjayBpcyBleGhhdXN0aXZlLCBzaW5jZSBzY2FuX3N0YWNrIGlzIG5ldmVyXG4gICBlbXB0eS5cbiAgIFBhdHRlcm4gbWF0Y2hpbmcgb24gdG9rZW4gaW4gc2NhbiBzdGFjayBpcyBhbHNvIGV4aGF1c3RpdmUsXG4gICBzaW5jZSBzY2FuX3B1c2ggaXMgdXNlZCBvbiBicmVha3MgYW5kIG9wZW5pbmcgb2YgYm94ZXMuICopXG5sZXQgc2V0X3NpemUgc3RhdGUgdHkgPVxuICBtYXRjaCBTdGFjay50b3Bfb3B0IHN0YXRlLnBwX3NjYW5fc3RhY2sgd2l0aFxuICB8IE5vbmUgLT4gKCkgKCogc2Nhbl9zdGFjayBpcyBuZXZlciBlbXB0eS4gKilcbiAgfCBTb21lIHsgbGVmdF90b3RhbDsgcXVldWVfZWxlbSB9IC0+XG4gICAgbGV0IHNpemUgPSBTaXplLnRvX2ludCBxdWV1ZV9lbGVtLnNpemUgaW5cbiAgICAoKiB0ZXN0IGlmIHNjYW4gc3RhY2sgY29udGFpbnMgYW55IGRhdGEgdGhhdCBpcyBub3Qgb2Jzb2xldGUuICopXG4gICAgaWYgbGVmdF90b3RhbCA8IHN0YXRlLnBwX2xlZnRfdG90YWwgdGhlblxuICAgICAgaW5pdGlhbGl6ZV9zY2FuX3N0YWNrIHN0YXRlLnBwX3NjYW5fc3RhY2tcbiAgICBlbHNlXG4gICAgICBtYXRjaCBxdWV1ZV9lbGVtLnRva2VuIHdpdGhcbiAgICAgIHwgUHBfYnJlYWsgXyB8IFBwX3RicmVhayAoXywgXykgLT5cbiAgICAgICAgaWYgdHkgdGhlbiBiZWdpblxuICAgICAgICAgIHF1ZXVlX2VsZW0uc2l6ZSA8LSBTaXplLm9mX2ludCAoc3RhdGUucHBfcmlnaHRfdG90YWwgKyBzaXplKTtcbiAgICAgICAgICBTdGFjay5wb3Bfb3B0IHN0YXRlLnBwX3NjYW5fc3RhY2sgfD4gaWdub3JlXG4gICAgICAgIGVuZFxuICAgICAgfCBQcF9iZWdpbiAoXywgXykgLT5cbiAgICAgICAgaWYgbm90IHR5IHRoZW4gYmVnaW5cbiAgICAgICAgICBxdWV1ZV9lbGVtLnNpemUgPC0gU2l6ZS5vZl9pbnQgKHN0YXRlLnBwX3JpZ2h0X3RvdGFsICsgc2l6ZSk7XG4gICAgICAgICAgU3RhY2sucG9wX29wdCBzdGF0ZS5wcF9zY2FuX3N0YWNrIHw+IGlnbm9yZVxuICAgICAgICBlbmRcbiAgICAgIHwgUHBfdGV4dCBfIHwgUHBfc3RhYiB8IFBwX3RiZWdpbiBfIHwgUHBfdGVuZCB8IFBwX2VuZFxuICAgICAgfCBQcF9uZXdsaW5lIHwgUHBfaWZfbmV3bGluZSB8IFBwX29wZW5fdGFnIF8gfCBQcF9jbG9zZV90YWcgLT5cbiAgICAgICAgKCkgKCogc2Nhbl9wdXNoIGlzIG9ubHkgdXNlZCBmb3IgYnJlYWtzIGFuZCBib3hlcy4gKilcblxuXG4oKiBQdXNoIGEgdG9rZW4gb24gcHJldHR5LXByaW50ZXIgc2Nhbm5pbmcgc3RhY2suXG4gICBJZiBiIGlzIHRydWUgc2V0X3NpemUgaXMgY2FsbGVkLiAqKVxubGV0IHNjYW5fcHVzaCBzdGF0ZSBiIHRva2VuID1cbiAgcHBfZW5xdWV1ZSBzdGF0ZSB0b2tlbjtcbiAgaWYgYiB0aGVuIHNldF9zaXplIHN0YXRlIHRydWU7XG4gIGxldCBlbGVtID0geyBsZWZ0X3RvdGFsID0gc3RhdGUucHBfcmlnaHRfdG90YWw7IHF1ZXVlX2VsZW0gPSB0b2tlbiB9IGluXG4gIFN0YWNrLnB1c2ggZWxlbSBzdGF0ZS5wcF9zY2FuX3N0YWNrXG5cblxuKCogVG8gb3BlbiBhIG5ldyBib3ggOlxuICAgdGhlIHVzZXIgbWF5IHNldCB0aGUgZGVwdGggYm91bmQgcHBfbWF4X2JveGVzXG4gICBhbnkgdGV4dCBuZXN0ZWQgZGVlcGVyIGlzIHByaW50ZWQgYXMgdGhlIGVsbGlwc2lzIHN0cmluZy4gKilcbmxldCBwcF9vcGVuX2JveF9nZW4gc3RhdGUgaW5kZW50IGJyX3R5ID1cbiAgc3RhdGUucHBfY3Vycl9kZXB0aCA8LSBzdGF0ZS5wcF9jdXJyX2RlcHRoICsgMTtcbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA8IHN0YXRlLnBwX21heF9ib3hlcyB0aGVuXG4gICAgbGV0IHNpemUgPSBTaXplLm9mX2ludCAoLSBzdGF0ZS5wcF9yaWdodF90b3RhbCkgaW5cbiAgICBsZXQgZWxlbSA9IHsgc2l6ZTsgdG9rZW4gPSBQcF9iZWdpbiAoaW5kZW50LCBicl90eSk7IGxlbmd0aCA9IDAgfSBpblxuICAgIHNjYW5fcHVzaCBzdGF0ZSBmYWxzZSBlbGVtIGVsc2VcbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA9IHN0YXRlLnBwX21heF9ib3hlc1xuICB0aGVuIGVucXVldWVfc3RyaW5nIHN0YXRlIHN0YXRlLnBwX2VsbGlwc2lzXG5cblxuKCogVGhlIGJveCB3aGljaCBpcyBhbHdheXMgb3Blbi4gKilcbmxldCBwcF9vcGVuX3N5c19ib3ggc3RhdGUgPSBwcF9vcGVuX2JveF9nZW4gc3RhdGUgMCBQcF9ob3Zib3hcblxuKCogQ2xvc2UgYSBib3gsIHNldHRpbmcgc2l6ZXMgb2YgaXRzIHN1YiBib3hlcy4gKilcbmxldCBwcF9jbG9zZV9ib3ggc3RhdGUgKCkgPVxuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoID4gMSB0aGVuXG4gIGJlZ2luXG4gICAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA8IHN0YXRlLnBwX21heF9ib3hlcyB0aGVuXG4gICAgYmVnaW5cbiAgICAgIHBwX2VucXVldWUgc3RhdGUgeyBzaXplID0gU2l6ZS56ZXJvOyB0b2tlbiA9IFBwX2VuZDsgbGVuZ3RoID0gMCB9O1xuICAgICAgc2V0X3NpemUgc3RhdGUgdHJ1ZTsgc2V0X3NpemUgc3RhdGUgZmFsc2VcbiAgICBlbmQ7XG4gICAgc3RhdGUucHBfY3Vycl9kZXB0aCA8LSBzdGF0ZS5wcF9jdXJyX2RlcHRoIC0gMTtcbiAgZW5kXG5cblxuKCogT3BlbiBhIHRhZywgcHVzaGluZyBpdCBvbiB0aGUgdGFnIHN0YWNrLiAqKVxubGV0IHBwX29wZW5fc3RhZyBzdGF0ZSB0YWdfbmFtZSA9XG4gIGlmIHN0YXRlLnBwX3ByaW50X3RhZ3MgdGhlblxuICBiZWdpblxuICAgIFN0YWNrLnB1c2ggdGFnX25hbWUgc3RhdGUucHBfdGFnX3N0YWNrO1xuICAgIHN0YXRlLnBwX3ByaW50X29wZW5fdGFnIHRhZ19uYW1lXG4gIGVuZDtcbiAgaWYgc3RhdGUucHBfbWFya190YWdzIHRoZW5cbiAgICBsZXQgdG9rZW4gPSBQcF9vcGVuX3RhZyB0YWdfbmFtZSBpblxuICAgIHBwX2VucXVldWUgc3RhdGUgeyBzaXplID0gU2l6ZS56ZXJvOyB0b2tlbjsgbGVuZ3RoID0gMCB9XG5cblxuKCogQ2xvc2UgYSB0YWcsIHBvcHBpbmcgaXQgZnJvbSB0aGUgdGFnIHN0YWNrLiAqKVxubGV0IHBwX2Nsb3NlX3N0YWcgc3RhdGUgKCkgPVxuICBpZiBzdGF0ZS5wcF9tYXJrX3RhZ3MgdGhlblxuICAgIHBwX2VucXVldWUgc3RhdGUgeyBzaXplID0gU2l6ZS56ZXJvOyB0b2tlbiA9IFBwX2Nsb3NlX3RhZzsgbGVuZ3RoID0gMCB9O1xuICBpZiBzdGF0ZS5wcF9wcmludF90YWdzIHRoZW5cbiAgICBtYXRjaCBTdGFjay5wb3Bfb3B0IHN0YXRlLnBwX3RhZ19zdGFjayB3aXRoXG4gICAgfCBOb25lIC0+ICgpICgqIE5vIG1vcmUgdGFnIHRvIGNsb3NlLiAqKVxuICAgIHwgU29tZSB0YWdfbmFtZSAtPlxuICAgICAgc3RhdGUucHBfcHJpbnRfY2xvc2VfdGFnIHRhZ19uYW1lXG5cbmxldCBwcF9vcGVuX3RhZyBzdGF0ZSBzID0gcHBfb3Blbl9zdGFnIHN0YXRlIChTdHJpbmdfdGFnIHMpXG5sZXQgcHBfY2xvc2VfdGFnIHN0YXRlICgpID0gcHBfY2xvc2Vfc3RhZyBzdGF0ZSAoKVxuXG5sZXQgcHBfc2V0X3ByaW50X3RhZ3Mgc3RhdGUgYiA9IHN0YXRlLnBwX3ByaW50X3RhZ3MgPC0gYlxubGV0IHBwX3NldF9tYXJrX3RhZ3Mgc3RhdGUgYiA9IHN0YXRlLnBwX21hcmtfdGFncyA8LSBiXG5sZXQgcHBfZ2V0X3ByaW50X3RhZ3Mgc3RhdGUgKCkgPSBzdGF0ZS5wcF9wcmludF90YWdzXG5sZXQgcHBfZ2V0X21hcmtfdGFncyBzdGF0ZSAoKSA9IHN0YXRlLnBwX21hcmtfdGFnc1xubGV0IHBwX3NldF90YWdzIHN0YXRlIGIgPVxuICBwcF9zZXRfcHJpbnRfdGFncyBzdGF0ZSBiOyBwcF9zZXRfbWFya190YWdzIHN0YXRlIGJcblxuXG4oKiBIYW5kbGluZyB0YWcgaGFuZGxpbmcgZnVuY3Rpb25zOiBnZXQvc2V0IGZ1bmN0aW9ucy4gKilcbmxldCBwcF9nZXRfZm9ybWF0dGVyX3N0YWdfZnVuY3Rpb25zIHN0YXRlICgpID0ge1xuICBtYXJrX29wZW5fc3RhZyA9IHN0YXRlLnBwX21hcmtfb3Blbl90YWc7XG4gIG1hcmtfY2xvc2Vfc3RhZyA9IHN0YXRlLnBwX21hcmtfY2xvc2VfdGFnO1xuICBwcmludF9vcGVuX3N0YWcgPSBzdGF0ZS5wcF9wcmludF9vcGVuX3RhZztcbiAgcHJpbnRfY2xvc2Vfc3RhZyA9IHN0YXRlLnBwX3ByaW50X2Nsb3NlX3RhZztcbn1cblxuXG5sZXQgcHBfc2V0X2Zvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyBzdGF0ZSB7XG4gICAgIG1hcmtfb3Blbl9zdGFnID0gbW90O1xuICAgICBtYXJrX2Nsb3NlX3N0YWcgPSBtY3Q7XG4gICAgIHByaW50X29wZW5fc3RhZyA9IHBvdDtcbiAgICAgcHJpbnRfY2xvc2Vfc3RhZyA9IHBjdDtcbiAgfSA9XG4gIHN0YXRlLnBwX21hcmtfb3Blbl90YWcgPC0gbW90O1xuICBzdGF0ZS5wcF9tYXJrX2Nsb3NlX3RhZyA8LSBtY3Q7XG4gIHN0YXRlLnBwX3ByaW50X29wZW5fdGFnIDwtIHBvdDtcbiAgc3RhdGUucHBfcHJpbnRfY2xvc2VfdGFnIDwtIHBjdFxuXG5cbigqIEluaXRpYWxpemUgcHJldHR5LXByaW50ZXIuICopXG5sZXQgcHBfcmluaXQgc3RhdGUgPVxuICBwcF9jbGVhcl9xdWV1ZSBzdGF0ZTtcbiAgaW5pdGlhbGl6ZV9zY2FuX3N0YWNrIHN0YXRlLnBwX3NjYW5fc3RhY2s7XG4gIFN0YWNrLmNsZWFyIHN0YXRlLnBwX2Zvcm1hdF9zdGFjaztcbiAgU3RhY2suY2xlYXIgc3RhdGUucHBfdGJveF9zdGFjaztcbiAgU3RhY2suY2xlYXIgc3RhdGUucHBfdGFnX3N0YWNrO1xuICBTdGFjay5jbGVhciBzdGF0ZS5wcF9tYXJrX3N0YWNrO1xuICBzdGF0ZS5wcF9jdXJyZW50X2luZGVudCA8LSAwO1xuICBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwtIDA7XG4gIHN0YXRlLnBwX3NwYWNlX2xlZnQgPC0gc3RhdGUucHBfbWFyZ2luO1xuICBwcF9vcGVuX3N5c19ib3ggc3RhdGVcblxubGV0IGNsZWFyX3RhZ19zdGFjayBzdGF0ZSA9XG4gIFN0YWNrLml0ZXIgKGZ1biBfIC0+IHBwX2Nsb3NlX3RhZyBzdGF0ZSAoKSkgc3RhdGUucHBfdGFnX3N0YWNrXG5cblxuKCogRmx1c2hpbmcgcHJldHR5LXByaW50ZXIgcXVldWUuICopXG5sZXQgcHBfZmx1c2hfcXVldWUgc3RhdGUgYiA9XG4gIGNsZWFyX3RhZ19zdGFjayBzdGF0ZTtcbiAgd2hpbGUgc3RhdGUucHBfY3Vycl9kZXB0aCA+IDEgZG9cbiAgICBwcF9jbG9zZV9ib3ggc3RhdGUgKClcbiAgZG9uZTtcbiAgc3RhdGUucHBfcmlnaHRfdG90YWwgPC0gcHBfaW5maW5pdHk7XG4gIGFkdmFuY2VfbGVmdCBzdGF0ZTtcbiAgaWYgYiB0aGVuIHBwX291dHB1dF9uZXdsaW5lIHN0YXRlO1xuICBwcF9yaW5pdCBzdGF0ZVxuXG4oKlxuXG4gIFByb2NlZHVyZXMgdG8gZm9ybWF0IHZhbHVlcyBhbmQgdXNlIGJveGVzLlxuXG4qKVxuXG4oKiBUbyBmb3JtYXQgYSBzdHJpbmcuICopXG5sZXQgcHBfcHJpbnRfYXNfc2l6ZSBzdGF0ZSBzaXplIHMgPVxuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwgc3RhdGUucHBfbWF4X2JveGVzXG4gIHRoZW4gZW5xdWV1ZV9zdHJpbmdfYXMgc3RhdGUgc2l6ZSBzXG5cblxubGV0IHBwX3ByaW50X2FzIHN0YXRlIGlzaXplIHMgPVxuICBwcF9wcmludF9hc19zaXplIHN0YXRlIChTaXplLm9mX2ludCBpc2l6ZSkgc1xuXG5cbmxldCBwcF9wcmludF9zdHJpbmcgc3RhdGUgcyA9XG4gIHBwX3ByaW50X2FzIHN0YXRlIChTdHJpbmcubGVuZ3RoIHMpIHNcblxubGV0IHBwX3ByaW50X2J5dGVzIHN0YXRlIHMgPVxuICBwcF9wcmludF9hcyBzdGF0ZSAoQnl0ZXMubGVuZ3RoIHMpIChCeXRlcy50b19zdHJpbmcgcylcblxuKCogVG8gZm9ybWF0IGFuIGludGVnZXIuICopXG5sZXQgcHBfcHJpbnRfaW50IHN0YXRlIGkgPSBwcF9wcmludF9zdHJpbmcgc3RhdGUgKEludC50b19zdHJpbmcgaSlcblxuKCogVG8gZm9ybWF0IGEgZmxvYXQuICopXG5sZXQgcHBfcHJpbnRfZmxvYXQgc3RhdGUgZiA9IHBwX3ByaW50X3N0cmluZyBzdGF0ZSAoc3RyaW5nX29mX2Zsb2F0IGYpXG5cbigqIFRvIGZvcm1hdCBhIGJvb2xlYW4uICopXG5sZXQgcHBfcHJpbnRfYm9vbCBzdGF0ZSBiID0gcHBfcHJpbnRfc3RyaW5nIHN0YXRlIChzdHJpbmdfb2ZfYm9vbCBiKVxuXG4oKiBUbyBmb3JtYXQgYSBjaGFyLiAqKVxubGV0IHBwX3ByaW50X2NoYXIgc3RhdGUgYyA9XG4gIHBwX3ByaW50X2FzIHN0YXRlIDEgKFN0cmluZy5tYWtlIDEgYylcblxuXG4oKiBPcGVuaW5nIGJveGVzLiAqKVxubGV0IHBwX29wZW5faGJveCBzdGF0ZSAoKSA9IHBwX29wZW5fYm94X2dlbiBzdGF0ZSAwIFBwX2hib3hcbmFuZCBwcF9vcGVuX3Zib3ggc3RhdGUgaW5kZW50ID0gcHBfb3Blbl9ib3hfZ2VuIHN0YXRlIGluZGVudCBQcF92Ym94XG5cbmFuZCBwcF9vcGVuX2h2Ym94IHN0YXRlIGluZGVudCA9IHBwX29wZW5fYm94X2dlbiBzdGF0ZSBpbmRlbnQgUHBfaHZib3hcbmFuZCBwcF9vcGVuX2hvdmJveCBzdGF0ZSBpbmRlbnQgPSBwcF9vcGVuX2JveF9nZW4gc3RhdGUgaW5kZW50IFBwX2hvdmJveFxuYW5kIHBwX29wZW5fYm94IHN0YXRlIGluZGVudCA9IHBwX29wZW5fYm94X2dlbiBzdGF0ZSBpbmRlbnQgUHBfYm94XG5cblxuKCogUHJpbnRpbmcgcXVldWVkIHRleHQuXG5cbiAgIFtwcF9wcmludF9mbHVzaF0gcHJpbnRzIGFsbCBwZW5kaW5nIGl0ZW1zIGluIHRoZSBwcmV0dHktcHJpbnRlciBxdWV1ZSBhbmRcbiAgIHRoZW4gZmx1c2hlcyB0aGUgbG93IGxldmVsIG91dHB1dCBkZXZpY2Ugb2YgdGhlIGZvcm1hdHRlciB0byBhY3R1YWxseVxuICAgZGlzcGxheSBwcmludGluZyBtYXRlcmlhbC5cblxuICAgW3BwX3ByaW50X25ld2xpbmVdIGJlaGF2ZXMgYXMgW3BwX3ByaW50X2ZsdXNoXSBhZnRlciBwcmludGluZyBhbiBhZGRpdGlvbmFsXG4gICBuZXcgbGluZS4gKilcbmxldCBwcF9wcmludF9uZXdsaW5lIHN0YXRlICgpID1cbiAgcHBfZmx1c2hfcXVldWUgc3RhdGUgdHJ1ZTsgc3RhdGUucHBfb3V0X2ZsdXNoICgpXG5hbmQgcHBfcHJpbnRfZmx1c2ggc3RhdGUgKCkgPVxuICBwcF9mbHVzaF9xdWV1ZSBzdGF0ZSBmYWxzZTsgc3RhdGUucHBfb3V0X2ZsdXNoICgpXG5cblxuKCogVG8gZ2V0IGEgbmV3bGluZSB3aGVuIG9uZSBkb2VzIG5vdCB3YW50IHRvIGNsb3NlIHRoZSBjdXJyZW50IGJveC4gKilcbmxldCBwcF9mb3JjZV9uZXdsaW5lIHN0YXRlICgpID1cbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA8IHN0YXRlLnBwX21heF9ib3hlcyB0aGVuXG4gICAgZW5xdWV1ZV9hZHZhbmNlIHN0YXRlIHsgc2l6ZSA9IFNpemUuemVybzsgdG9rZW4gPSBQcF9uZXdsaW5lOyBsZW5ndGggPSAwIH1cblxuXG4oKiBUbyBmb3JtYXQgc29tZXRoaW5nLCBvbmx5IGluIGNhc2UgdGhlIGxpbmUgaGFzIGp1c3QgYmVlbiBicm9rZW4uICopXG5sZXQgcHBfcHJpbnRfaWZfbmV3bGluZSBzdGF0ZSAoKSA9XG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgIGVucXVldWVfYWR2YW5jZSBzdGF0ZVxuICAgICAgeyBzaXplID0gU2l6ZS56ZXJvOyB0b2tlbiA9IFBwX2lmX25ld2xpbmU7IGxlbmd0aCA9IDAgfVxuXG5cbigqIEdlbmVyYWxpemVkIGJyZWFrIGhpbnQgdGhhdCBhbGxvd3MgcHJpbnRpbmcgc3RyaW5ncyBiZWZvcmUvYWZ0ZXJcbiAgIHNhbWUtbGluZSBvZmZzZXQgKHdpZHRoKSBvciBuZXctbGluZSBvZmZzZXQgKilcbmxldCBwcF9wcmludF9jdXN0b21fYnJlYWsgc3RhdGUgfmZpdHMgfmJyZWFrcyA9XG4gIGxldCBiZWZvcmUsIHdpZHRoLCBhZnRlciA9IGZpdHMgaW5cbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA8IHN0YXRlLnBwX21heF9ib3hlcyB0aGVuXG4gICAgbGV0IHNpemUgPSBTaXplLm9mX2ludCAoLSBzdGF0ZS5wcF9yaWdodF90b3RhbCkgaW5cbiAgICBsZXQgdG9rZW4gPSBQcF9icmVhayB7IGZpdHM7IGJyZWFrcyB9IGluXG4gICAgbGV0IGxlbmd0aCA9IFN0cmluZy5sZW5ndGggYmVmb3JlICsgd2lkdGggKyBTdHJpbmcubGVuZ3RoIGFmdGVyIGluXG4gICAgbGV0IGVsZW0gPSB7IHNpemU7IHRva2VuOyBsZW5ndGggfSBpblxuICAgIHNjYW5fcHVzaCBzdGF0ZSB0cnVlIGVsZW1cblxuKCogUHJpbnRpbmcgYnJlYWsgaGludHM6XG4gICBBIGJyZWFrIGhpbnQgaW5kaWNhdGVzIHdoZXJlIGEgYm94IG1heSBiZSBicm9rZW4uXG4gICBJZiBsaW5lIGlzIGJyb2tlbiB0aGVuIG9mZnNldCBpcyBhZGRlZCB0byB0aGUgaW5kZW50YXRpb24gb2YgdGhlIGN1cnJlbnRcbiAgIGJveCBlbHNlICh0aGUgdmFsdWUgb2YpIHdpZHRoIGJsYW5rcyBhcmUgcHJpbnRlZC4gKilcbmxldCBwcF9wcmludF9icmVhayBzdGF0ZSB3aWR0aCBvZmZzZXQgPVxuICBwcF9wcmludF9jdXN0b21fYnJlYWsgc3RhdGVcbiAgICB+Zml0czooXCJcIiwgd2lkdGgsIFwiXCIpIH5icmVha3M6KFwiXCIsIG9mZnNldCwgXCJcIilcblxuXG4oKiBQcmludCBhIHNwYWNlIDpcbiAgIGEgc3BhY2UgaXMgYSBicmVhayBoaW50IHRoYXQgcHJpbnRzIGEgc2luZ2xlIHNwYWNlIGlmIHRoZSBicmVhayBkb2VzIG5vdFxuICAgc3BsaXQgdGhlIGxpbmU7XG4gICBhIGN1dCBpcyBhIGJyZWFrIGhpbnQgdGhhdCBwcmludHMgbm90aGluZyBpZiB0aGUgYnJlYWsgZG9lcyBub3Qgc3BsaXQgdGhlXG4gICBsaW5lLiAqKVxubGV0IHBwX3ByaW50X3NwYWNlIHN0YXRlICgpID0gcHBfcHJpbnRfYnJlYWsgc3RhdGUgMSAwXG5hbmQgcHBfcHJpbnRfY3V0IHN0YXRlICgpID0gcHBfcHJpbnRfYnJlYWsgc3RhdGUgMCAwXG5cblxuKCogVGFidWxhdGlvbiBib3hlcy4gKilcbmxldCBwcF9vcGVuX3Rib3ggc3RhdGUgKCkgPVxuICBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwtIHN0YXRlLnBwX2N1cnJfZGVwdGggKyAxO1xuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwgc3RhdGUucHBfbWF4X2JveGVzIHRoZW5cbiAgICBsZXQgc2l6ZSA9IFNpemUuemVybyBpblxuICAgIGxldCBlbGVtID0geyBzaXplOyB0b2tlbiA9IFBwX3RiZWdpbiAoUHBfdGJveCAocmVmIFtdKSk7IGxlbmd0aCA9IDAgfSBpblxuICAgIGVucXVldWVfYWR2YW5jZSBzdGF0ZSBlbGVtXG5cblxuKCogQ2xvc2UgYSB0YWJ1bGF0aW9uIGJveC4gKilcbmxldCBwcF9jbG9zZV90Ym94IHN0YXRlICgpID1cbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA+IDEgdGhlblxuICBiZWdpblxuICAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA8IHN0YXRlLnBwX21heF9ib3hlcyB0aGVuXG4gICAgIGxldCBlbGVtID0geyBzaXplID0gU2l6ZS56ZXJvOyB0b2tlbiA9IFBwX3RlbmQ7IGxlbmd0aCA9IDAgfSBpblxuICAgICBlbnF1ZXVlX2FkdmFuY2Ugc3RhdGUgZWxlbTtcbiAgICAgc3RhdGUucHBfY3Vycl9kZXB0aCA8LSBzdGF0ZS5wcF9jdXJyX2RlcHRoIC0gMVxuICBlbmRcblxuXG4oKiBQcmludCBhIHRhYnVsYXRpb24gYnJlYWsuICopXG5sZXQgcHBfcHJpbnRfdGJyZWFrIHN0YXRlIHdpZHRoIG9mZnNldCA9XG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgIGxldCBzaXplID0gU2l6ZS5vZl9pbnQgKC0gc3RhdGUucHBfcmlnaHRfdG90YWwpIGluXG4gICAgbGV0IGVsZW0gPSB7IHNpemU7IHRva2VuID0gUHBfdGJyZWFrICh3aWR0aCwgb2Zmc2V0KTsgbGVuZ3RoID0gd2lkdGggfSBpblxuICAgIHNjYW5fcHVzaCBzdGF0ZSB0cnVlIGVsZW1cblxuXG5sZXQgcHBfcHJpbnRfdGFiIHN0YXRlICgpID0gcHBfcHJpbnRfdGJyZWFrIHN0YXRlIDAgMFxuXG5sZXQgcHBfc2V0X3RhYiBzdGF0ZSAoKSA9XG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgIGxldCBlbGVtID0geyBzaXplID0gU2l6ZS56ZXJvOyB0b2tlbiA9IFBwX3N0YWI7IGxlbmd0aCA9IDAgfSBpblxuICAgIGVucXVldWVfYWR2YW5jZSBzdGF0ZSBlbGVtXG5cblxuKCpcblxuICBQcm9jZWR1cmVzIHRvIGNvbnRyb2wgdGhlIHByZXR0eS1wcmludGVyc1xuXG4qKVxuXG4oKiBTZXRfbWF4X2JveGVzLiAqKVxubGV0IHBwX3NldF9tYXhfYm94ZXMgc3RhdGUgbiA9IGlmIG4gPiAxIHRoZW4gc3RhdGUucHBfbWF4X2JveGVzIDwtIG5cblxuKCogVG8ga25vdyB0aGUgY3VycmVudCBtYXhpbXVtIG51bWJlciBvZiBib3hlcyBhbGxvd2VkLiAqKVxubGV0IHBwX2dldF9tYXhfYm94ZXMgc3RhdGUgKCkgPSBzdGF0ZS5wcF9tYXhfYm94ZXNcblxubGV0IHBwX292ZXJfbWF4X2JveGVzIHN0YXRlICgpID0gc3RhdGUucHBfY3Vycl9kZXB0aCA9IHN0YXRlLnBwX21heF9ib3hlc1xuXG4oKiBFbGxpcHNpcy4gKilcbmxldCBwcF9zZXRfZWxsaXBzaXNfdGV4dCBzdGF0ZSBzID0gc3RhdGUucHBfZWxsaXBzaXMgPC0gc1xuYW5kIHBwX2dldF9lbGxpcHNpc190ZXh0IHN0YXRlICgpID0gc3RhdGUucHBfZWxsaXBzaXNcblxuXG4oKiBUbyBzZXQgdGhlIG1hcmdpbiBvZiBwcmV0dHktcHJpbnRlci4gKilcbmxldCBwcF9saW1pdCBuID1cbiAgaWYgbiA8IHBwX2luZmluaXR5IHRoZW4gbiBlbHNlIHByZWQgcHBfaW5maW5pdHlcblxuXG4oKiBJbnRlcm5hbCBwcmV0dHktcHJpbnRlciBmdW5jdGlvbnMuICopXG5sZXQgcHBfc2V0X21pbl9zcGFjZV9sZWZ0IHN0YXRlIG4gPVxuICBpZiBuID49IDEgdGhlblxuICAgIGxldCBuID0gcHBfbGltaXQgbiBpblxuICAgIHN0YXRlLnBwX21pbl9zcGFjZV9sZWZ0IDwtIG47XG4gICAgc3RhdGUucHBfbWF4X2luZGVudCA8LSBzdGF0ZS5wcF9tYXJnaW4gLSBzdGF0ZS5wcF9taW5fc3BhY2VfbGVmdDtcbiAgICBwcF9yaW5pdCBzdGF0ZVxuXG5cbigqIEluaXRpYWxseSwgd2UgaGF2ZSA6XG4gICBwcF9tYXhfaW5kZW50ID0gcHBfbWFyZ2luIC0gcHBfbWluX3NwYWNlX2xlZnQsIGFuZFxuICAgcHBfc3BhY2VfbGVmdCA9IHBwX21hcmdpbi4gKilcbmxldCBwcF9zZXRfbWF4X2luZGVudCBzdGF0ZSBuID1cbiAgaWYgbiA+IDEgdGhlblxuICAgIHBwX3NldF9taW5fc3BhY2VfbGVmdCBzdGF0ZSAoc3RhdGUucHBfbWFyZ2luIC0gbilcblxuXG5sZXQgcHBfZ2V0X21heF9pbmRlbnQgc3RhdGUgKCkgPSBzdGF0ZS5wcF9tYXhfaW5kZW50XG5cbmxldCBwcF9zZXRfbWFyZ2luIHN0YXRlIG4gPVxuICBpZiBuID49IDEgdGhlblxuICAgIGxldCBuID0gcHBfbGltaXQgbiBpblxuICAgIHN0YXRlLnBwX21hcmdpbiA8LSBuO1xuICAgIGxldCBuZXdfbWF4X2luZGVudCA9XG4gICAgICAoKiBUcnkgdG8gbWFpbnRhaW4gbWF4X2luZGVudCB0byBpdHMgYWN0dWFsIHZhbHVlLiAqKVxuICAgICAgaWYgc3RhdGUucHBfbWF4X2luZGVudCA8PSBzdGF0ZS5wcF9tYXJnaW5cbiAgICAgIHRoZW4gc3RhdGUucHBfbWF4X2luZGVudCBlbHNlXG4gICAgICAoKiBJZiBwb3NzaWJsZSBtYWludGFpbiBwcF9taW5fc3BhY2VfbGVmdCB0byBpdHMgYWN0dWFsIHZhbHVlLFxuICAgICAgICAgaWYgdGhpcyBsZWFkcyB0byBhIHRvbyBzbWFsbCBtYXhfaW5kZW50LCB0YWtlIGhhbGYgb2YgdGhlXG4gICAgICAgICBuZXcgbWFyZ2luLCBpZiBpdCBpcyBncmVhdGVyIHRoYW4gMS4gKilcbiAgICAgICBJbnQubWF4IChJbnQubWF4IChzdGF0ZS5wcF9tYXJnaW4gLSBzdGF0ZS5wcF9taW5fc3BhY2VfbGVmdClcbiAgICAgICAgICAgICAgICAoc3RhdGUucHBfbWFyZ2luIC8gMikpIDEgaW5cbiAgICAoKiBSZWJ1aWxkIGludmFyaWFudHMuICopXG4gICAgcHBfc2V0X21heF9pbmRlbnQgc3RhdGUgbmV3X21heF9pbmRlbnRcblxuXG4oKiogR2VvbWV0cnkgZnVuY3Rpb25zIGFuZCB0eXBlcyAqKVxudHlwZSBnZW9tZXRyeSA9IHsgbWF4X2luZGVudDppbnQ7IG1hcmdpbjogaW50fVxuXG5sZXQgdmFsaWRhdGVfZ2VvbWV0cnkge21hcmdpbjsgbWF4X2luZGVudH0gPVxuICBpZiBtYXhfaW5kZW50IDwgMiB0aGVuXG4gICAgRXJyb3IgXCJtYXhfaW5kZW50IDwgMlwiXG4gIGVsc2UgaWYgbWFyZ2luIDw9IG1heF9pbmRlbnQgdGhlblxuICAgIEVycm9yIFwibWFyZ2luIDw9IG1heF9pbmRlbnRcIlxuICBlbHNlIE9rICgpXG5cbmxldCBjaGVja19nZW9tZXRyeSBnZW9tZXRyeSA9XG4gIG1hdGNoIHZhbGlkYXRlX2dlb21ldHJ5IGdlb21ldHJ5IHdpdGhcbiAgfCBPayAoKSAtPiB0cnVlXG4gIHwgRXJyb3IgXyAtPiBmYWxzZVxuXG5sZXQgcHBfZ2V0X21hcmdpbiBzdGF0ZSAoKSA9IHN0YXRlLnBwX21hcmdpblxuXG5sZXQgcHBfc2V0X2Z1bGxfZ2VvbWV0cnkgc3RhdGUge21hcmdpbjsgbWF4X2luZGVudH0gPVxuICBwcF9zZXRfbWFyZ2luIHN0YXRlIG1hcmdpbjtcbiAgcHBfc2V0X21heF9pbmRlbnQgc3RhdGUgbWF4X2luZGVudDtcbiAgKClcblxubGV0IHBwX3NldF9nZW9tZXRyeSBzdGF0ZSB+bWF4X2luZGVudCB+bWFyZ2luID1cbiAgbGV0IGdlb21ldHJ5ID0geyBtYXhfaW5kZW50OyBtYXJnaW4gfSBpblxuICBtYXRjaCB2YWxpZGF0ZV9nZW9tZXRyeSBnZW9tZXRyeSB3aXRoXG4gIHwgRXJyb3IgbXNnIC0+XG4gICAgcmFpc2UgKEludmFsaWRfYXJndW1lbnQgKFwiRm9ybWF0LnBwX3NldF9nZW9tZXRyeTogXCIgXiBtc2cpKVxuICB8IE9rICgpIC0+XG4gICAgcHBfc2V0X2Z1bGxfZ2VvbWV0cnkgc3RhdGUgZ2VvbWV0cnlcblxubGV0IHBwX3NhZmVfc2V0X2dlb21ldHJ5IHN0YXRlIH5tYXhfaW5kZW50IH5tYXJnaW4gPVxuICBsZXQgZ2VvbWV0cnkgPSB7IG1heF9pbmRlbnQ7IG1hcmdpbiB9IGluXG4gIG1hdGNoIHZhbGlkYXRlX2dlb21ldHJ5IGdlb21ldHJ5IHdpdGhcbiAgfCBFcnJvciBfbXNnIC0+XG4gICAgICgpXG4gIHwgT2sgKCkgLT5cbiAgICBwcF9zZXRfZnVsbF9nZW9tZXRyeSBzdGF0ZSBnZW9tZXRyeVxuXG5sZXQgcHBfZ2V0X2dlb21ldHJ5IHN0YXRlICgpID1cbiAgeyBtYXJnaW4gPSBwcF9nZXRfbWFyZ2luIHN0YXRlICgpOyBtYXhfaW5kZW50ID0gcHBfZ2V0X21heF9pbmRlbnQgc3RhdGUgKCkgfVxuXG5sZXQgcHBfdXBkYXRlX2dlb21ldHJ5IHN0YXRlIHVwZGF0ZSA9XG4gIGxldCBnZW9tZXRyeSA9IHBwX2dldF9nZW9tZXRyeSBzdGF0ZSAoKSBpblxuICBwcF9zZXRfZnVsbF9nZW9tZXRyeSBzdGF0ZSAodXBkYXRlIGdlb21ldHJ5KVxuXG4oKiBTZXR0aW5nIGEgZm9ybWF0dGVyIGJhc2ljIG91dHB1dCBmdW5jdGlvbnMuICopXG5sZXQgcHBfc2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zIHN0YXRlIHtcbiAgICAgIG91dF9zdHJpbmcgPSBmO1xuICAgICAgb3V0X2ZsdXNoID0gZztcbiAgICAgIG91dF9uZXdsaW5lID0gaDtcbiAgICAgIG91dF9zcGFjZXMgPSBpO1xuICAgICAgb3V0X2luZGVudCA9IGo7XG4gICAgfSA9XG4gIHN0YXRlLnBwX291dF9zdHJpbmcgPC0gZjtcbiAgc3RhdGUucHBfb3V0X2ZsdXNoIDwtIGc7XG4gIHN0YXRlLnBwX291dF9uZXdsaW5lIDwtIGg7XG4gIHN0YXRlLnBwX291dF9zcGFjZXMgPC0gaTtcbiAgc3RhdGUucHBfb3V0X2luZGVudCA8LSBqXG5cbmxldCBwcF9nZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgc3RhdGUgKCkgPSB7XG4gIG91dF9zdHJpbmcgPSBzdGF0ZS5wcF9vdXRfc3RyaW5nO1xuICBvdXRfZmx1c2ggPSBzdGF0ZS5wcF9vdXRfZmx1c2g7XG4gIG91dF9uZXdsaW5lID0gc3RhdGUucHBfb3V0X25ld2xpbmU7XG4gIG91dF9zcGFjZXMgPSBzdGF0ZS5wcF9vdXRfc3BhY2VzO1xuICBvdXRfaW5kZW50ID0gc3RhdGUucHBfb3V0X2luZGVudDtcbn1cblxuXG4oKiBTZXR0aW5nIGEgZm9ybWF0dGVyIGJhc2ljIHN0cmluZyBvdXRwdXQgYW5kIGZsdXNoIGZ1bmN0aW9ucy4gKilcbmxldCBwcF9zZXRfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgc3RhdGUgZiBnID1cbiAgc3RhdGUucHBfb3V0X3N0cmluZyA8LSBmOyBzdGF0ZS5wcF9vdXRfZmx1c2ggPC0gZ1xuXG5sZXQgcHBfZ2V0X2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIHN0YXRlICgpID1cbiAgKHN0YXRlLnBwX291dF9zdHJpbmcsIHN0YXRlLnBwX291dF9mbHVzaClcblxuXG4oKiBUaGUgZGVmYXVsdCBmdW5jdGlvbiB0byBvdXRwdXQgbmV3IGxpbmVzLiAqKVxubGV0IGRpc3BsYXlfbmV3bGluZSBzdGF0ZSAoKSA9IHN0YXRlLnBwX291dF9zdHJpbmcgXCJcXG5cIiAwICAxXG5cbigqIFRoZSBkZWZhdWx0IGZ1bmN0aW9uIHRvIG91dHB1dCBzcGFjZXMuICopXG5sZXQgYmxhbmtfbGluZSA9IFN0cmluZy5tYWtlIDgwICcgJ1xubGV0IHJlYyBkaXNwbGF5X2JsYW5rcyBzdGF0ZSBuID1cbiAgaWYgbiA+IDAgdGhlblxuICBpZiBuIDw9IDgwIHRoZW4gc3RhdGUucHBfb3V0X3N0cmluZyBibGFua19saW5lIDAgbiBlbHNlXG4gIGJlZ2luXG4gICAgc3RhdGUucHBfb3V0X3N0cmluZyBibGFua19saW5lIDAgODA7XG4gICAgZGlzcGxheV9ibGFua3Mgc3RhdGUgKG4gLSA4MClcbiAgZW5kXG5cblxuKCogVGhlIGRlZmF1bHQgZnVuY3Rpb24gdG8gb3V0cHV0IGluZGVudGF0aW9uIG9mIG5ldyBsaW5lcy4gKilcbmxldCBkaXNwbGF5X2luZGVudCA9IGRpc3BsYXlfYmxhbmtzXG5cbigqIFNldHRpbmcgYSBmb3JtYXR0ZXIgYmFzaWMgb3V0cHV0IGZ1bmN0aW9ucyBhcyBwcmludGluZyB0byBhIGdpdmVuXG4gICBbUGVydmFzaXZlLm91dF9jaGFubmVsXSB2YWx1ZS4gKilcbmxldCBwcF9zZXRfZm9ybWF0dGVyX291dF9jaGFubmVsIHN0YXRlIG9jID1cbiAgc3RhdGUucHBfb3V0X3N0cmluZyA8LSBvdXRwdXRfc3Vic3RyaW5nIG9jO1xuICBzdGF0ZS5wcF9vdXRfZmx1c2ggPC0gKGZ1biAoKSAtPiBmbHVzaCBvYyk7XG4gIHN0YXRlLnBwX291dF9uZXdsaW5lIDwtIGRpc3BsYXlfbmV3bGluZSBzdGF0ZTtcbiAgc3RhdGUucHBfb3V0X3NwYWNlcyA8LSBkaXNwbGF5X2JsYW5rcyBzdGF0ZTtcbiAgc3RhdGUucHBfb3V0X2luZGVudCA8LSBkaXNwbGF5X2luZGVudCBzdGF0ZVxuXG4oKlxuXG4gIERlZmluaW5nIHNwZWNpZmljIGZvcm1hdHRlcnNcblxuKilcblxubGV0IGRlZmF1bHRfcHBfbWFya19vcGVuX3RhZyA9IGZ1bmN0aW9uXG4gIHwgU3RyaW5nX3RhZyBzIC0+IFwiPFwiIF4gcyBeIFwiPlwiXG4gIHwgXyAtPiBcIlwiXG5sZXQgZGVmYXVsdF9wcF9tYXJrX2Nsb3NlX3RhZyA9IGZ1bmN0aW9uXG4gIHwgU3RyaW5nX3RhZyBzIC0+IFwiPC9cIiBeIHMgXiBcIj5cIlxuICB8IF8gLT4gXCJcIlxuXG5sZXQgZGVmYXVsdF9wcF9wcmludF9vcGVuX3RhZyA9IGlnbm9yZVxubGV0IGRlZmF1bHRfcHBfcHJpbnRfY2xvc2VfdGFnID0gaWdub3JlXG5cbigqIEJ1aWxkaW5nIGEgZm9ybWF0dGVyIGdpdmVuIGl0cyBiYXNpYyBvdXRwdXQgZnVuY3Rpb25zLlxuICAgT3RoZXIgZmllbGRzIGdldCByZWFzb25hYmxlIGRlZmF1bHQgdmFsdWVzLiAqKVxubGV0IHBwX21ha2VfZm9ybWF0dGVyIGYgZyBoIGkgaiA9XG4gICgqIFRoZSBpbml0aWFsIHN0YXRlIG9mIHRoZSBmb3JtYXR0ZXIgY29udGFpbnMgYSBkdW1teSBib3guICopXG4gIGxldCBwcF9xdWV1ZSA9IFF1ZXVlLmNyZWF0ZSAoKSBpblxuICBsZXQgc3lzX3RvayA9XG4gICAgeyBzaXplID0gU2l6ZS51bmtub3duOyB0b2tlbiA9IFBwX2JlZ2luICgwLCBQcF9ob3Zib3gpOyBsZW5ndGggPSAwIH0gaW5cbiAgUXVldWUuYWRkIHN5c190b2sgcHBfcXVldWU7XG4gIGxldCBzY2FuX3N0YWNrID0gU3RhY2suY3JlYXRlICgpIGluXG4gIGluaXRpYWxpemVfc2Nhbl9zdGFjayBzY2FuX3N0YWNrO1xuICBTdGFjay5wdXNoIHsgbGVmdF90b3RhbCA9IDE7IHF1ZXVlX2VsZW0gPSBzeXNfdG9rIH0gc2Nhbl9zdGFjaztcbiAgbGV0IHBwX21hcmdpbiA9IDc4XG4gIGFuZCBwcF9taW5fc3BhY2VfbGVmdCA9IDEwIGluXG4gIHtcbiAgICBwcF9zY2FuX3N0YWNrID0gc2Nhbl9zdGFjaztcbiAgICBwcF9mb3JtYXRfc3RhY2sgPSBTdGFjay5jcmVhdGUgKCk7XG4gICAgcHBfdGJveF9zdGFjayA9IFN0YWNrLmNyZWF0ZSAoKTtcbiAgICBwcF90YWdfc3RhY2sgPSBTdGFjay5jcmVhdGUgKCk7XG4gICAgcHBfbWFya19zdGFjayA9IFN0YWNrLmNyZWF0ZSAoKTtcbiAgICBwcF9tYXJnaW4gPSBwcF9tYXJnaW47XG4gICAgcHBfbWluX3NwYWNlX2xlZnQgPSBwcF9taW5fc3BhY2VfbGVmdDtcbiAgICBwcF9tYXhfaW5kZW50ID0gcHBfbWFyZ2luIC0gcHBfbWluX3NwYWNlX2xlZnQ7XG4gICAgcHBfc3BhY2VfbGVmdCA9IHBwX21hcmdpbjtcbiAgICBwcF9jdXJyZW50X2luZGVudCA9IDA7XG4gICAgcHBfaXNfbmV3X2xpbmUgPSB0cnVlO1xuICAgIHBwX2xlZnRfdG90YWwgPSAxO1xuICAgIHBwX3JpZ2h0X3RvdGFsID0gMTtcbiAgICBwcF9jdXJyX2RlcHRoID0gMTtcbiAgICBwcF9tYXhfYm94ZXMgPSBtYXhfaW50O1xuICAgIHBwX2VsbGlwc2lzID0gXCIuXCI7XG4gICAgcHBfb3V0X3N0cmluZyA9IGY7XG4gICAgcHBfb3V0X2ZsdXNoID0gZztcbiAgICBwcF9vdXRfbmV3bGluZSA9IGg7XG4gICAgcHBfb3V0X3NwYWNlcyA9IGk7XG4gICAgcHBfb3V0X2luZGVudCA9IGo7XG4gICAgcHBfcHJpbnRfdGFncyA9IGZhbHNlO1xuICAgIHBwX21hcmtfdGFncyA9IGZhbHNlO1xuICAgIHBwX21hcmtfb3Blbl90YWcgPSBkZWZhdWx0X3BwX21hcmtfb3Blbl90YWc7XG4gICAgcHBfbWFya19jbG9zZV90YWcgPSBkZWZhdWx0X3BwX21hcmtfY2xvc2VfdGFnO1xuICAgIHBwX3ByaW50X29wZW5fdGFnID0gZGVmYXVsdF9wcF9wcmludF9vcGVuX3RhZztcbiAgICBwcF9wcmludF9jbG9zZV90YWcgPSBkZWZhdWx0X3BwX3ByaW50X2Nsb3NlX3RhZztcbiAgICBwcF9xdWV1ZSA9IHBwX3F1ZXVlO1xuICB9XG5cblxuKCogQnVpbGQgYSBmb3JtYXR0ZXIgb3V0IG9mIGl0cyBvdXQgZnVuY3Rpb25zLiAqKVxubGV0IGZvcm1hdHRlcl9vZl9vdXRfZnVuY3Rpb25zIG91dF9mdW5zID1cbiAgcHBfbWFrZV9mb3JtYXR0ZXJcbiAgICBvdXRfZnVucy5vdXRfc3RyaW5nXG4gICAgb3V0X2Z1bnMub3V0X2ZsdXNoXG4gICAgb3V0X2Z1bnMub3V0X25ld2xpbmVcbiAgICBvdXRfZnVucy5vdXRfc3BhY2VzXG4gICAgb3V0X2Z1bnMub3V0X2luZGVudFxuXG5cbigqIE1ha2UgYSBmb3JtYXR0ZXIgd2l0aCBkZWZhdWx0IGZ1bmN0aW9ucyB0byBvdXRwdXQgc3BhY2VzLFxuICBpbmRlbnRhdGlvbiwgYW5kIG5ldyBsaW5lcy4gKilcbmxldCBtYWtlX2Zvcm1hdHRlciBvdXRwdXQgZmx1c2ggPVxuICBsZXQgcHBmID0gcHBfbWFrZV9mb3JtYXR0ZXIgb3V0cHV0IGZsdXNoIGlnbm9yZSBpZ25vcmUgaWdub3JlIGluXG4gIHBwZi5wcF9vdXRfbmV3bGluZSA8LSBkaXNwbGF5X25ld2xpbmUgcHBmO1xuICBwcGYucHBfb3V0X3NwYWNlcyA8LSBkaXNwbGF5X2JsYW5rcyBwcGY7XG4gIHBwZi5wcF9vdXRfaW5kZW50IDwtIGRpc3BsYXlfaW5kZW50IHBwZjtcbiAgcHBmXG5cblxuKCogTWFrZSBhIGZvcm1hdHRlciB3cml0aW5nIHRvIGEgZ2l2ZW4gW1BlcnZhc2l2ZS5vdXRfY2hhbm5lbF0gdmFsdWUuICopXG5sZXQgZm9ybWF0dGVyX29mX291dF9jaGFubmVsIG9jID1cbiAgbWFrZV9mb3JtYXR0ZXIgKG91dHB1dF9zdWJzdHJpbmcgb2MpIChmdW4gKCkgLT4gZmx1c2ggb2MpXG5cblxuKCogTWFrZSBhIGZvcm1hdHRlciB3cml0aW5nIHRvIGEgZ2l2ZW4gW0J1ZmZlci50XSB2YWx1ZS4gKilcbmxldCBmb3JtYXR0ZXJfb2ZfYnVmZmVyIGIgPVxuICBtYWtlX2Zvcm1hdHRlciAoQnVmZmVyLmFkZF9zdWJzdHJpbmcgYikgaWdub3JlXG5cblxuKCogQWxsb2NhdGluZyBidWZmZXIgZm9yIHByZXR0eS1wcmludGluZyBwdXJwb3Nlcy5cbiAgIERlZmF1bHQgYnVmZmVyIHNpemUgaXMgcHBfYnVmZmVyX3NpemUgb3IgNTEyLlxuKilcbmxldCBwcF9idWZmZXJfc2l6ZSA9IDUxMlxubGV0IHBwX21ha2VfYnVmZmVyICgpID0gQnVmZmVyLmNyZWF0ZSBwcF9idWZmZXJfc2l6ZVxuXG4oKiBUaGUgc3RhbmRhcmQgKHNoYXJlZCkgYnVmZmVyLiAqKVxubGV0IHN0ZGJ1ZiA9IHBwX21ha2VfYnVmZmVyICgpXG5cbigqIFByZWRlZmluZWQgZm9ybWF0dGVycyBzdGFuZGFyZCBmb3JtYXR0ZXIgdG8gcHJpbnRcbiAgIHRvIFtTdGRsaWIuc3Rkb3V0XSwgW1N0ZGxpYi5zdGRlcnJdLCBhbmQgeyFzdGRidWZ9LiAqKVxubGV0IHN0ZF9mb3JtYXR0ZXIgPSBmb3JtYXR0ZXJfb2Zfb3V0X2NoYW5uZWwgU3RkbGliLnN0ZG91dFxuYW5kIGVycl9mb3JtYXR0ZXIgPSBmb3JtYXR0ZXJfb2Zfb3V0X2NoYW5uZWwgU3RkbGliLnN0ZGVyclxuYW5kIHN0cl9mb3JtYXR0ZXIgPSBmb3JtYXR0ZXJfb2ZfYnVmZmVyIHN0ZGJ1ZlxuXG5cbigqIFtmbHVzaF9idWZmZXJfZm9ybWF0dGVyIGJ1ZiBwcGZdIGZsdXNoZXMgZm9ybWF0dGVyIFtwcGZdLFxuICAgdGhlbiByZXR1cm5zIHRoZSBjb250ZW50cyBvZiBidWZmZXIgW2J1Zl0gdGhhdCBpcyByZXNldC5cbiAgIEZvcm1hdHRlciBbcHBmXSBpcyBzdXBwb3NlZCB0byBwcmludCB0byBidWZmZXIgW2J1Zl0sIG90aGVyd2lzZSB0aGlzXG4gICBmdW5jdGlvbiBpcyBub3QgcmVhbGx5IHVzZWZ1bC4gKilcbmxldCBmbHVzaF9idWZmZXJfZm9ybWF0dGVyIGJ1ZiBwcGYgPVxuICBwcF9mbHVzaF9xdWV1ZSBwcGYgZmFsc2U7XG4gIGxldCBzID0gQnVmZmVyLmNvbnRlbnRzIGJ1ZiBpblxuICBCdWZmZXIucmVzZXQgYnVmO1xuICBzXG5cblxuKCogRmx1c2ggW3N0cl9mb3JtYXR0ZXJdIGFuZCBnZXQgdGhlIGNvbnRlbnRzIG9mIFtzdGRidWZdLiAqKVxubGV0IGZsdXNoX3N0cl9mb3JtYXR0ZXIgKCkgPSBmbHVzaF9idWZmZXJfZm9ybWF0dGVyIHN0ZGJ1ZiBzdHJfZm9ybWF0dGVyXG5cbigqXG4gIFN5bWJvbGljIHByZXR0eS1wcmludGluZ1xuKilcblxuKCpcbiAgU3ltYm9saWMgcHJldHR5LXByaW50aW5nIGlzIHByZXR0eS1wcmludGluZyB3aXRoIG5vIGxvdyBsZXZlbCBvdXRwdXQuXG5cbiAgV2hlbiB1c2luZyBhIHN5bWJvbGljIGZvcm1hdHRlciwgYWxsIHJlZ3VsYXIgcHJldHR5LXByaW50aW5nIGFjdGl2aXRpZXNcbiAgb2NjdXIgYnV0IG91dHB1dCBtYXRlcmlhbCBpcyBzeW1ib2xpYyBhbmQgc3RvcmVkIGluIGEgYnVmZmVyIG9mIG91dHB1dFxuICBpdGVtcy4gQXQgdGhlIGVuZCBvZiBwcmV0dHktcHJpbnRpbmcsIGZsdXNoaW5nIHRoZSBvdXRwdXQgYnVmZmVyIGFsbG93c1xuICBwb3N0LXByb2Nlc3Npbmcgb2Ygc3ltYm9saWMgb3V0cHV0IGJlZm9yZSBsb3cgbGV2ZWwgb3V0cHV0IG9wZXJhdGlvbnMuXG4qKVxuXG50eXBlIHN5bWJvbGljX291dHB1dF9pdGVtID1cbiAgfCBPdXRwdXRfZmx1c2hcbiAgfCBPdXRwdXRfbmV3bGluZVxuICB8IE91dHB1dF9zdHJpbmcgb2Ygc3RyaW5nXG4gIHwgT3V0cHV0X3NwYWNlcyBvZiBpbnRcbiAgfCBPdXRwdXRfaW5kZW50IG9mIGludFxuXG50eXBlIHN5bWJvbGljX291dHB1dF9idWZmZXIgPSB7XG4gIG11dGFibGUgc3ltYm9saWNfb3V0cHV0X2NvbnRlbnRzIDogc3ltYm9saWNfb3V0cHV0X2l0ZW0gbGlzdDtcbn1cblxubGV0IG1ha2Vfc3ltYm9saWNfb3V0cHV0X2J1ZmZlciAoKSA9XG4gIHsgc3ltYm9saWNfb3V0cHV0X2NvbnRlbnRzID0gW10gfVxuXG5sZXQgY2xlYXJfc3ltYm9saWNfb3V0cHV0X2J1ZmZlciBzb2IgPVxuICBzb2Iuc3ltYm9saWNfb3V0cHV0X2NvbnRlbnRzIDwtIFtdXG5cbmxldCBnZXRfc3ltYm9saWNfb3V0cHV0X2J1ZmZlciBzb2IgPVxuICBMaXN0LnJldiBzb2Iuc3ltYm9saWNfb3V0cHV0X2NvbnRlbnRzXG5cbmxldCBmbHVzaF9zeW1ib2xpY19vdXRwdXRfYnVmZmVyIHNvYiA9XG4gIGxldCBpdGVtcyA9IGdldF9zeW1ib2xpY19vdXRwdXRfYnVmZmVyIHNvYiBpblxuICBjbGVhcl9zeW1ib2xpY19vdXRwdXRfYnVmZmVyIHNvYjtcbiAgaXRlbXNcblxubGV0IGFkZF9zeW1ib2xpY19vdXRwdXRfaXRlbSBzb2IgaXRlbSA9XG4gIHNvYi5zeW1ib2xpY19vdXRwdXRfY29udGVudHMgPC0gaXRlbSA6OiBzb2Iuc3ltYm9saWNfb3V0cHV0X2NvbnRlbnRzXG5cbmxldCBmb3JtYXR0ZXJfb2Zfc3ltYm9saWNfb3V0cHV0X2J1ZmZlciBzb2IgPVxuICBsZXQgc3ltYm9saWNfZmx1c2ggc29iICgpID1cbiAgICBhZGRfc3ltYm9saWNfb3V0cHV0X2l0ZW0gc29iIE91dHB1dF9mbHVzaFxuICBhbmQgc3ltYm9saWNfbmV3bGluZSBzb2IgKCkgPVxuICAgIGFkZF9zeW1ib2xpY19vdXRwdXRfaXRlbSBzb2IgT3V0cHV0X25ld2xpbmVcbiAgYW5kIHN5bWJvbGljX3N0cmluZyBzb2IgcyBpIG4gPVxuICAgIGFkZF9zeW1ib2xpY19vdXRwdXRfaXRlbSBzb2IgKE91dHB1dF9zdHJpbmcgKFN0cmluZy5zdWIgcyBpIG4pKVxuICBhbmQgc3ltYm9saWNfc3BhY2VzIHNvYiBuID1cbiAgICBhZGRfc3ltYm9saWNfb3V0cHV0X2l0ZW0gc29iIChPdXRwdXRfc3BhY2VzIG4pXG4gIGFuZCBzeW1ib2xpY19pbmRlbnQgc29iIG4gPVxuICAgIGFkZF9zeW1ib2xpY19vdXRwdXRfaXRlbSBzb2IgKE91dHB1dF9pbmRlbnQgbikgaW5cblxuICBsZXQgZiA9IHN5bWJvbGljX3N0cmluZyBzb2JcbiAgYW5kIGcgPSBzeW1ib2xpY19mbHVzaCBzb2JcbiAgYW5kIGggPSBzeW1ib2xpY19uZXdsaW5lIHNvYlxuICBhbmQgaSA9IHN5bWJvbGljX3NwYWNlcyBzb2JcbiAgYW5kIGogPSBzeW1ib2xpY19pbmRlbnQgc29iIGluXG4gIHBwX21ha2VfZm9ybWF0dGVyIGYgZyBoIGkgalxuXG4oKlxuXG4gIEJhc2ljIGZ1bmN0aW9ucyBvbiB0aGUgJ3N0YW5kYXJkJyBmb3JtYXR0ZXJcbiAgKHRoZSBmb3JtYXR0ZXIgdGhhdCBwcmludHMgdG8gW1N0ZGxpYi5zdGRvdXRdKS5cblxuKilcblxubGV0IG9wZW5faGJveCA9IHBwX29wZW5faGJveCBzdGRfZm9ybWF0dGVyXG5hbmQgb3Blbl92Ym94ID0gcHBfb3Blbl92Ym94IHN0ZF9mb3JtYXR0ZXJcbmFuZCBvcGVuX2h2Ym94ID0gcHBfb3Blbl9odmJveCBzdGRfZm9ybWF0dGVyXG5hbmQgb3Blbl9ob3Zib3ggPSBwcF9vcGVuX2hvdmJveCBzdGRfZm9ybWF0dGVyXG5hbmQgb3Blbl9ib3ggPSBwcF9vcGVuX2JveCBzdGRfZm9ybWF0dGVyXG5hbmQgY2xvc2VfYm94ID0gcHBfY2xvc2VfYm94IHN0ZF9mb3JtYXR0ZXJcbmFuZCBvcGVuX3RhZyA9IHBwX29wZW5fdGFnIHN0ZF9mb3JtYXR0ZXJcbmFuZCBjbG9zZV90YWcgPSBwcF9jbG9zZV90YWcgc3RkX2Zvcm1hdHRlclxuYW5kIG9wZW5fc3RhZyA9IHBwX29wZW5fc3RhZyBzdGRfZm9ybWF0dGVyXG5hbmQgY2xvc2Vfc3RhZyA9IHBwX2Nsb3NlX3N0YWcgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X2FzID0gcHBfcHJpbnRfYXMgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X3N0cmluZyA9IHBwX3ByaW50X3N0cmluZyBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfYnl0ZXMgPSBwcF9wcmludF9ieXRlcyBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfaW50ID0gcHBfcHJpbnRfaW50IHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9mbG9hdCA9IHBwX3ByaW50X2Zsb2F0IHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9jaGFyID0gcHBfcHJpbnRfY2hhciBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfYm9vbCA9IHBwX3ByaW50X2Jvb2wgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X2JyZWFrID0gcHBfcHJpbnRfYnJlYWsgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X2N1dCA9IHBwX3ByaW50X2N1dCBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfc3BhY2UgPSBwcF9wcmludF9zcGFjZSBzdGRfZm9ybWF0dGVyXG5hbmQgZm9yY2VfbmV3bGluZSA9IHBwX2ZvcmNlX25ld2xpbmUgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X2ZsdXNoID0gcHBfcHJpbnRfZmx1c2ggc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X25ld2xpbmUgPSBwcF9wcmludF9uZXdsaW5lIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9pZl9uZXdsaW5lID0gcHBfcHJpbnRfaWZfbmV3bGluZSBzdGRfZm9ybWF0dGVyXG5cbmFuZCBvcGVuX3Rib3ggPSBwcF9vcGVuX3Rib3ggc3RkX2Zvcm1hdHRlclxuYW5kIGNsb3NlX3Rib3ggPSBwcF9jbG9zZV90Ym94IHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF90YnJlYWsgPSBwcF9wcmludF90YnJlYWsgc3RkX2Zvcm1hdHRlclxuXG5hbmQgc2V0X3RhYiA9IHBwX3NldF90YWIgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X3RhYiA9IHBwX3ByaW50X3RhYiBzdGRfZm9ybWF0dGVyXG5cbmFuZCBzZXRfbWFyZ2luID0gcHBfc2V0X21hcmdpbiBzdGRfZm9ybWF0dGVyXG5hbmQgZ2V0X21hcmdpbiA9IHBwX2dldF9tYXJnaW4gc3RkX2Zvcm1hdHRlclxuXG5hbmQgc2V0X21heF9pbmRlbnQgPSBwcF9zZXRfbWF4X2luZGVudCBzdGRfZm9ybWF0dGVyXG5hbmQgZ2V0X21heF9pbmRlbnQgPSBwcF9nZXRfbWF4X2luZGVudCBzdGRfZm9ybWF0dGVyXG5cbmFuZCBzZXRfZ2VvbWV0cnkgPSBwcF9zZXRfZ2VvbWV0cnkgc3RkX2Zvcm1hdHRlclxuYW5kIHNhZmVfc2V0X2dlb21ldHJ5ID0gcHBfc2FmZV9zZXRfZ2VvbWV0cnkgc3RkX2Zvcm1hdHRlclxuYW5kIGdldF9nZW9tZXRyeSA9IHBwX2dldF9nZW9tZXRyeSBzdGRfZm9ybWF0dGVyXG5hbmQgdXBkYXRlX2dlb21ldHJ5ID0gcHBfdXBkYXRlX2dlb21ldHJ5IHN0ZF9mb3JtYXR0ZXJcblxuYW5kIHNldF9tYXhfYm94ZXMgPSBwcF9zZXRfbWF4X2JveGVzIHN0ZF9mb3JtYXR0ZXJcbmFuZCBnZXRfbWF4X2JveGVzID0gcHBfZ2V0X21heF9ib3hlcyBzdGRfZm9ybWF0dGVyXG5hbmQgb3Zlcl9tYXhfYm94ZXMgPSBwcF9vdmVyX21heF9ib3hlcyBzdGRfZm9ybWF0dGVyXG5cbmFuZCBzZXRfZWxsaXBzaXNfdGV4dCA9IHBwX3NldF9lbGxpcHNpc190ZXh0IHN0ZF9mb3JtYXR0ZXJcbmFuZCBnZXRfZWxsaXBzaXNfdGV4dCA9IHBwX2dldF9lbGxpcHNpc190ZXh0IHN0ZF9mb3JtYXR0ZXJcblxuYW5kIHNldF9mb3JtYXR0ZXJfb3V0X2NoYW5uZWwgPVxuICBwcF9zZXRfZm9ybWF0dGVyX291dF9jaGFubmVsIHN0ZF9mb3JtYXR0ZXJcblxuYW5kIHNldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyA9XG4gIHBwX3NldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyBzdGRfZm9ybWF0dGVyXG5hbmQgZ2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zID1cbiAgcHBfZ2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zIHN0ZF9mb3JtYXR0ZXJcblxuYW5kIHNldF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyA9XG4gIHBwX3NldF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyBzdGRfZm9ybWF0dGVyXG5hbmQgZ2V0X2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zID1cbiAgcHBfZ2V0X2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIHN0ZF9mb3JtYXR0ZXJcblxuYW5kIHNldF9mb3JtYXR0ZXJfc3RhZ19mdW5jdGlvbnMgPVxuICBwcF9zZXRfZm9ybWF0dGVyX3N0YWdfZnVuY3Rpb25zIHN0ZF9mb3JtYXR0ZXJcbmFuZCBnZXRfZm9ybWF0dGVyX3N0YWdfZnVuY3Rpb25zID1cbiAgcHBfZ2V0X2Zvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyBzdGRfZm9ybWF0dGVyXG5hbmQgc2V0X3ByaW50X3RhZ3MgPVxuICBwcF9zZXRfcHJpbnRfdGFncyBzdGRfZm9ybWF0dGVyXG5hbmQgZ2V0X3ByaW50X3RhZ3MgPVxuICBwcF9nZXRfcHJpbnRfdGFncyBzdGRfZm9ybWF0dGVyXG5hbmQgc2V0X21hcmtfdGFncyA9XG4gIHBwX3NldF9tYXJrX3RhZ3Mgc3RkX2Zvcm1hdHRlclxuYW5kIGdldF9tYXJrX3RhZ3MgPVxuICBwcF9nZXRfbWFya190YWdzIHN0ZF9mb3JtYXR0ZXJcbmFuZCBzZXRfdGFncyA9XG4gIHBwX3NldF90YWdzIHN0ZF9mb3JtYXR0ZXJcblxuXG4oKiBDb252ZW5pZW5jZSBmdW5jdGlvbnMgKilcblxuKCogVG8gZm9ybWF0IGEgbGlzdCAqKVxubGV0IHJlYyBwcF9wcmludF9saXN0ID8ocHBfc2VwID0gcHBfcHJpbnRfY3V0KSBwcF92IHBwZiA9IGZ1bmN0aW9uXG4gIHwgW10gLT4gKClcbiAgfCBbdl0gLT4gcHBfdiBwcGYgdlxuICB8IHYgOjogdnMgLT5cbiAgICBwcF92IHBwZiB2O1xuICAgIHBwX3NlcCBwcGYgKCk7XG4gICAgcHBfcHJpbnRfbGlzdCB+cHBfc2VwIHBwX3YgcHBmIHZzXG5cbigqIFRvIGZvcm1hdCBhIHNlcXVlbmNlICopXG5sZXQgcmVjIHBwX3ByaW50X3NlcV9pbiB+cHBfc2VwIHBwX3YgcHBmIHNlcSA9XG4gIG1hdGNoIHNlcSAoKSB3aXRoXG4gIHwgU2VxLk5pbCAtPiAoKVxuICB8IFNlcS5Db25zICh2LCBzZXEpIC0+XG4gICAgcHBfc2VwIHBwZiAoKTtcbiAgICBwcF92IHBwZiB2O1xuICAgIHBwX3ByaW50X3NlcV9pbiB+cHBfc2VwIHBwX3YgcHBmIHNlcVxuXG5sZXQgcHBfcHJpbnRfc2VxID8ocHBfc2VwID0gcHBfcHJpbnRfY3V0KSBwcF92IHBwZiBzZXEgPVxuICBtYXRjaCBzZXEgKCkgd2l0aFxuICB8IFNlcS5OaWwgLT4gKClcbiAgfCBTZXEuQ29ucyAodiwgc2VxKSAtPlxuICAgIHBwX3YgcHBmIHY7XG4gICAgcHBfcHJpbnRfc2VxX2luIH5wcF9zZXAgcHBfdiBwcGYgc2VxXG5cbigqIFRvIGZvcm1hdCBmcmVlLWZsb3dpbmcgdGV4dCAqKVxubGV0IHBwX3ByaW50X3RleHQgcHBmIHMgPVxuICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIGxldCBsZWZ0ID0gcmVmIDAgaW5cbiAgbGV0IHJpZ2h0ID0gcmVmIDAgaW5cbiAgbGV0IGZsdXNoICgpID1cbiAgICBwcF9wcmludF9zdHJpbmcgcHBmIChTdHJpbmcuc3ViIHMgIWxlZnQgKCFyaWdodCAtICFsZWZ0KSk7XG4gICAgaW5jciByaWdodDsgbGVmdCA6PSAhcmlnaHQ7XG4gIGluXG4gIHdoaWxlICghcmlnaHQgPD4gbGVuKSBkb1xuICAgIG1hdGNoIHMuWyFyaWdodF0gd2l0aFxuICAgICAgfCAnXFxuJyAtPlxuICAgICAgICBmbHVzaCAoKTtcbiAgICAgICAgcHBfZm9yY2VfbmV3bGluZSBwcGYgKClcbiAgICAgIHwgJyAnIC0+XG4gICAgICAgIGZsdXNoICgpOyBwcF9wcmludF9zcGFjZSBwcGYgKClcbiAgICAgICgqIHRoZXJlIGlzIG5vIHNwZWNpZmljIHN1cHBvcnQgZm9yICdcXHQnXG4gICAgICAgICBhcyBpdCBpcyB1bmNsZWFyIHdoYXQgYSByaWdodCBzZW1hbnRpY3Mgd291bGQgYmUgKilcbiAgICAgIHwgXyAtPiBpbmNyIHJpZ2h0XG4gIGRvbmU7XG4gIGlmICFsZWZ0IDw+IGxlbiB0aGVuIGZsdXNoICgpXG5cbmxldCBwcF9wcmludF9vcHRpb24gPyhub25lID0gZnVuIF8gKCkgLT4gKCkpIHBwX3YgcHBmID0gZnVuY3Rpb25cbnwgTm9uZSAtPiBub25lIHBwZiAoKVxufCBTb21lIHYgLT4gcHBfdiBwcGYgdlxuXG5sZXQgcHBfcHJpbnRfcmVzdWx0IH5vayB+ZXJyb3IgcHBmID0gZnVuY3Rpb25cbnwgT2sgdiAtPiBvayBwcGYgdlxufCBFcnJvciBlIC0+IGVycm9yIHBwZiBlXG5cbmxldCBwcF9wcmludF9laXRoZXIgfmxlZnQgfnJpZ2h0IHBwZiA9IGZ1bmN0aW9uXG58IEVpdGhlci5MZWZ0IGwgLT4gbGVmdCBwcGYgbFxufCBFaXRoZXIuUmlnaHQgciAtPiByaWdodCBwcGYgclxuXG4gKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG5sZXQgY29tcHV0ZV90YWcgb3V0cHV0IHRhZ19hY2MgPVxuICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAxNiBpblxuICBsZXQgcHBmID0gZm9ybWF0dGVyX29mX2J1ZmZlciBidWYgaW5cbiAgb3V0cHV0IHBwZiB0YWdfYWNjO1xuICBwcF9wcmludF9mbHVzaCBwcGYgKCk7XG4gIGxldCBsZW4gPSBCdWZmZXIubGVuZ3RoIGJ1ZiBpblxuICBpZiBsZW4gPCAyIHRoZW4gQnVmZmVyLmNvbnRlbnRzIGJ1ZlxuICBlbHNlIEJ1ZmZlci5zdWIgYnVmIDEgKGxlbiAtIDIpXG5cbiAoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuICBEZWZpbmluZyBjb250aW51YXRpb25zIHRvIGJlIHBhc3NlZCBhcyBhcmd1bWVudHMgb2ZcbiAgQ2FtbGludGVybmFsRm9ybWF0Lm1ha2VfcHJpbnRmLlxuXG4gICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG5vcGVuIENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljc1xub3BlbiBDYW1saW50ZXJuYWxGb3JtYXRcblxuKCogSW50ZXJwcmV0IGEgZm9ybWF0dGluZyBlbnRpdHkgb24gYSBmb3JtYXR0ZXIuICopXG5sZXQgb3V0cHV0X2Zvcm1hdHRpbmdfbGl0IHBwZiBmbXRpbmdfbGl0ID0gbWF0Y2ggZm10aW5nX2xpdCB3aXRoXG4gIHwgQ2xvc2VfYm94ICAgICAgICAgICAgICAgICAtPiBwcF9jbG9zZV9ib3ggcHBmICgpXG4gIHwgQ2xvc2VfdGFnICAgICAgICAgICAgICAgICAtPiBwcF9jbG9zZV90YWcgcHBmICgpXG4gIHwgQnJlYWsgKF8sIHdpZHRoLCBvZmZzZXQpICAtPiBwcF9wcmludF9icmVhayBwcGYgd2lkdGggb2Zmc2V0XG4gIHwgRkZsdXNoICAgICAgICAgICAgICAgICAgICAtPiBwcF9wcmludF9mbHVzaCBwcGYgKClcbiAgfCBGb3JjZV9uZXdsaW5lICAgICAgICAgICAgIC0+IHBwX2ZvcmNlX25ld2xpbmUgcHBmICgpXG4gIHwgRmx1c2hfbmV3bGluZSAgICAgICAgICAgICAtPiBwcF9wcmludF9uZXdsaW5lIHBwZiAoKVxuICB8IE1hZ2ljX3NpemUgKF8sIF8pICAgICAgICAgLT4gKClcbiAgfCBFc2NhcGVkX2F0ICAgICAgICAgICAgICAgIC0+IHBwX3ByaW50X2NoYXIgcHBmICdAJ1xuICB8IEVzY2FwZWRfcGVyY2VudCAgICAgICAgICAgLT4gcHBfcHJpbnRfY2hhciBwcGYgJyUnXG4gIHwgU2Nhbl9pbmRpYyBjICAgICAgICAgICAgICAtPiBwcF9wcmludF9jaGFyIHBwZiAnQCc7IHBwX3ByaW50X2NoYXIgcHBmIGNcblxuKCogUmVjdXJzaXZlbHkgb3V0cHV0IGFuIFwiYWNjdW11bGF0b3JcIiBjb250YWluaW5nIGEgcmV2ZXJzZWQgbGlzdCBvZlxuICAgcHJpbnRpbmcgZW50aXRpZXMgKHN0cmluZywgY2hhciwgZmx1cywgLi4uKSBpbiBhbiBvdXRwdXRfc3RyZWFtLiAqKVxuKCogRGlmZmVyIGZyb20gUHJpbnRmLm91dHB1dF9hY2MgYnkgdGhlIGludGVycHJldGF0aW9uIG9mIGZvcm1hdHRpbmcuICopXG4oKiBVc2VkIGFzIGEgY29udGludWF0aW9uIG9mIENhbWxpbnRlcm5hbEZvcm1hdC5tYWtlX3ByaW50Zi4gKilcbmxldCByZWMgb3V0cHV0X2FjYyBwcGYgYWNjID0gbWF0Y2ggYWNjIHdpdGhcbiAgfCBBY2Nfc3RyaW5nX2xpdGVyYWwgKEFjY19mb3JtYXR0aW5nX2xpdCAocCwgTWFnaWNfc2l6ZSAoXywgc2l6ZSkpLCBzKVxuICB8IEFjY19kYXRhX3N0cmluZyAoQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBNYWdpY19zaXplIChfLCBzaXplKSksIHMpIC0+XG4gICAgb3V0cHV0X2FjYyBwcGYgcDtcbiAgICBwcF9wcmludF9hc19zaXplIHBwZiAoU2l6ZS5vZl9pbnQgc2l6ZSkgcztcbiAgfCBBY2NfY2hhcl9saXRlcmFsIChBY2NfZm9ybWF0dGluZ19saXQgKHAsIE1hZ2ljX3NpemUgKF8sIHNpemUpKSwgYylcbiAgfCBBY2NfZGF0YV9jaGFyIChBY2NfZm9ybWF0dGluZ19saXQgKHAsIE1hZ2ljX3NpemUgKF8sIHNpemUpKSwgYykgLT5cbiAgICBvdXRwdXRfYWNjIHBwZiBwO1xuICAgIHBwX3ByaW50X2FzX3NpemUgcHBmIChTaXplLm9mX2ludCBzaXplKSAoU3RyaW5nLm1ha2UgMSBjKTtcbiAgfCBBY2NfZm9ybWF0dGluZ19saXQgKHAsIGYpIC0+XG4gICAgb3V0cHV0X2FjYyBwcGYgcDtcbiAgICBvdXRwdXRfZm9ybWF0dGluZ19saXQgcHBmIGY7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfZ2VuIChwLCBBY2Nfb3Blbl90YWcgYWNjJykgLT5cbiAgICBvdXRwdXRfYWNjIHBwZiBwO1xuICAgIHBwX29wZW5fc3RhZyBwcGYgKFN0cmluZ190YWcgKGNvbXB1dGVfdGFnIG91dHB1dF9hY2MgYWNjJykpXG4gIHwgQWNjX2Zvcm1hdHRpbmdfZ2VuIChwLCBBY2Nfb3Blbl9ib3ggYWNjJykgLT5cbiAgICBvdXRwdXRfYWNjIHBwZiBwO1xuICAgIGxldCAoaW5kZW50LCBidHkpID0gb3Blbl9ib3hfb2Zfc3RyaW5nIChjb21wdXRlX3RhZyBvdXRwdXRfYWNjIGFjYycpIGluXG4gICAgcHBfb3Blbl9ib3hfZ2VuIHBwZiBpbmRlbnQgYnR5XG4gIHwgQWNjX3N0cmluZ19saXRlcmFsIChwLCBzKVxuICB8IEFjY19kYXRhX3N0cmluZyAocCwgcykgICAtPiBvdXRwdXRfYWNjIHBwZiBwOyBwcF9wcmludF9zdHJpbmcgcHBmIHM7XG4gIHwgQWNjX2NoYXJfbGl0ZXJhbCAocCwgYylcbiAgfCBBY2NfZGF0YV9jaGFyIChwLCBjKSAgICAgLT4gb3V0cHV0X2FjYyBwcGYgcDsgcHBfcHJpbnRfY2hhciBwcGYgYztcbiAgfCBBY2NfZGVsYXkgKHAsIGYpICAgICAgICAgLT4gb3V0cHV0X2FjYyBwcGYgcDsgZiBwcGY7XG4gIHwgQWNjX2ZsdXNoIHAgICAgICAgICAgICAgIC0+IG91dHB1dF9hY2MgcHBmIHA7IHBwX3ByaW50X2ZsdXNoIHBwZiAoKTtcbiAgfCBBY2NfaW52YWxpZF9hcmcgKHAsIG1zZykgLT4gb3V0cHV0X2FjYyBwcGYgcDsgaW52YWxpZF9hcmcgbXNnO1xuICB8IEVuZF9vZl9hY2MgICAgICAgICAgICAgICAtPiAoKVxuXG4oKiBSZWN1cnNpdmVseSBvdXRwdXQgYW4gXCJhY2N1bXVsYXRvclwiIGNvbnRhaW5pbmcgYSByZXZlcnNlZCBsaXN0IG9mXG4gICBwcmludGluZyBlbnRpdGllcyAoc3RyaW5nLCBjaGFyLCBmbHVzLCAuLi4pIGluIGEgYnVmZmVyLiAqKVxuKCogRGlmZmVyIGZyb20gUHJpbnRmLmJ1ZnB1dF9hY2MgYnkgdGhlIGludGVycHJldGF0aW9uIG9mIGZvcm1hdHRpbmcuICopXG4oKiBVc2VkIGFzIGEgY29udGludWF0aW9uIG9mIENhbWxpbnRlcm5hbEZvcm1hdC5tYWtlX3ByaW50Zi4gKilcbmxldCByZWMgc3RycHV0X2FjYyBwcGYgYWNjID0gbWF0Y2ggYWNjIHdpdGhcbiAgfCBBY2Nfc3RyaW5nX2xpdGVyYWwgKEFjY19mb3JtYXR0aW5nX2xpdCAocCwgTWFnaWNfc2l6ZSAoXywgc2l6ZSkpLCBzKVxuICB8IEFjY19kYXRhX3N0cmluZyAoQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBNYWdpY19zaXplIChfLCBzaXplKSksIHMpIC0+XG4gICAgc3RycHV0X2FjYyBwcGYgcDtcbiAgICBwcF9wcmludF9hc19zaXplIHBwZiAoU2l6ZS5vZl9pbnQgc2l6ZSkgcztcbiAgfCBBY2NfY2hhcl9saXRlcmFsIChBY2NfZm9ybWF0dGluZ19saXQgKHAsIE1hZ2ljX3NpemUgKF8sIHNpemUpKSwgYylcbiAgfCBBY2NfZGF0YV9jaGFyIChBY2NfZm9ybWF0dGluZ19saXQgKHAsIE1hZ2ljX3NpemUgKF8sIHNpemUpKSwgYykgLT5cbiAgICBzdHJwdXRfYWNjIHBwZiBwO1xuICAgIHBwX3ByaW50X2FzX3NpemUgcHBmIChTaXplLm9mX2ludCBzaXplKSAoU3RyaW5nLm1ha2UgMSBjKTtcbiAgfCBBY2NfZGVsYXkgKEFjY19mb3JtYXR0aW5nX2xpdCAocCwgTWFnaWNfc2l6ZSAoXywgc2l6ZSkpLCBmKSAtPlxuICAgIHN0cnB1dF9hY2MgcHBmIHA7XG4gICAgcHBfcHJpbnRfYXNfc2l6ZSBwcGYgKFNpemUub2ZfaW50IHNpemUpIChmICgpKTtcbiAgfCBBY2NfZm9ybWF0dGluZ19saXQgKHAsIGYpIC0+XG4gICAgc3RycHV0X2FjYyBwcGYgcDtcbiAgICBvdXRwdXRfZm9ybWF0dGluZ19saXQgcHBmIGY7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfZ2VuIChwLCBBY2Nfb3Blbl90YWcgYWNjJykgLT5cbiAgICBzdHJwdXRfYWNjIHBwZiBwO1xuICAgIHBwX29wZW5fc3RhZyBwcGYgKFN0cmluZ190YWcgKGNvbXB1dGVfdGFnIHN0cnB1dF9hY2MgYWNjJykpXG4gIHwgQWNjX2Zvcm1hdHRpbmdfZ2VuIChwLCBBY2Nfb3Blbl9ib3ggYWNjJykgLT5cbiAgICBzdHJwdXRfYWNjIHBwZiBwO1xuICAgIGxldCAoaW5kZW50LCBidHkpID0gb3Blbl9ib3hfb2Zfc3RyaW5nIChjb21wdXRlX3RhZyBzdHJwdXRfYWNjIGFjYycpIGluXG4gICAgcHBfb3Blbl9ib3hfZ2VuIHBwZiBpbmRlbnQgYnR5XG4gIHwgQWNjX3N0cmluZ19saXRlcmFsIChwLCBzKVxuICB8IEFjY19kYXRhX3N0cmluZyAocCwgcykgICAtPiBzdHJwdXRfYWNjIHBwZiBwOyBwcF9wcmludF9zdHJpbmcgcHBmIHM7XG4gIHwgQWNjX2NoYXJfbGl0ZXJhbCAocCwgYylcbiAgfCBBY2NfZGF0YV9jaGFyIChwLCBjKSAgICAgLT4gc3RycHV0X2FjYyBwcGYgcDsgcHBfcHJpbnRfY2hhciBwcGYgYztcbiAgfCBBY2NfZGVsYXkgKHAsIGYpICAgICAgICAgLT4gc3RycHV0X2FjYyBwcGYgcDsgcHBfcHJpbnRfc3RyaW5nIHBwZiAoZiAoKSk7XG4gIHwgQWNjX2ZsdXNoIHAgICAgICAgICAgICAgIC0+IHN0cnB1dF9hY2MgcHBmIHA7IHBwX3ByaW50X2ZsdXNoIHBwZiAoKTtcbiAgfCBBY2NfaW52YWxpZF9hcmcgKHAsIG1zZykgLT4gc3RycHV0X2FjYyBwcGYgcDsgaW52YWxpZF9hcmcgbXNnO1xuICB8IEVuZF9vZl9hY2MgICAgICAgICAgICAgICAtPiAoKVxuXG4oKlxuXG4gIERlZmluaW5nIFtmcHJpbnRmXSBhbmQgdmFyaW91cyBmbGF2b3JzIG9mIFtmcHJpbnRmXS5cblxuKilcblxubGV0IGtmcHJpbnRmIGsgcHBmIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbWFrZV9wcmludGZcbiAgICAoZnVuIGFjYyAtPiBvdXRwdXRfYWNjIHBwZiBhY2M7IGsgcHBmKVxuICAgIEVuZF9vZl9hY2MgZm10XG5cbmFuZCBpa2ZwcmludGYgayBwcGYgKEZvcm1hdCAoZm10LCBfKSkgPVxuICBtYWtlX2lwcmludGYgayBwcGYgZm10XG5cbmxldCBpZnByaW50ZiBfcHBmIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbWFrZV9pcHJpbnRmIGlnbm9yZSAoKSBmbXRcblxubGV0IGZwcmludGYgcHBmID0ga2ZwcmludGYgaWdub3JlIHBwZlxubGV0IHByaW50ZiBmbXQgPSBmcHJpbnRmIHN0ZF9mb3JtYXR0ZXIgZm10XG5sZXQgZXByaW50ZiBmbXQgPSBmcHJpbnRmIGVycl9mb3JtYXR0ZXIgZm10XG5cbmxldCBrZHByaW50ZiBrIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbWFrZV9wcmludGZcbiAgICAoZnVuIGFjYyAtPiBrIChmdW4gcHBmIC0+IG91dHB1dF9hY2MgcHBmIGFjYykpXG4gICAgRW5kX29mX2FjYyBmbXRcblxubGV0IGRwcmludGYgZm10ID0ga2RwcmludGYgKGZ1biBpIC0+IGkpIGZtdFxuXG5sZXQga3NwcmludGYgayAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIGxldCBiID0gcHBfbWFrZV9idWZmZXIgKCkgaW5cbiAgbGV0IHBwZiA9IGZvcm1hdHRlcl9vZl9idWZmZXIgYiBpblxuICBsZXQgayBhY2MgPVxuICAgIHN0cnB1dF9hY2MgcHBmIGFjYztcbiAgICBrIChmbHVzaF9idWZmZXJfZm9ybWF0dGVyIGIgcHBmKSBpblxuICBtYWtlX3ByaW50ZiBrIEVuZF9vZl9hY2MgZm10XG5cblxubGV0IHNwcmludGYgZm10ID0ga3NwcmludGYgaWQgZm10XG5cbmxldCBrYXNwcmludGYgayAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIGxldCBiID0gcHBfbWFrZV9idWZmZXIgKCkgaW5cbiAgbGV0IHBwZiA9IGZvcm1hdHRlcl9vZl9idWZmZXIgYiBpblxuICBsZXQgayBhY2MgPVxuICAgIG91dHB1dF9hY2MgcHBmIGFjYztcbiAgICBrIChmbHVzaF9idWZmZXJfZm9ybWF0dGVyIGIgcHBmKSBpblxuICBtYWtlX3ByaW50ZiBrIEVuZF9vZl9hY2MgZm10XG5cblxubGV0IGFzcHJpbnRmIGZtdCA9IGthc3ByaW50ZiBpZCBmbXRcblxuKCogRmx1c2hpbmcgc3RhbmRhcmQgZm9ybWF0dGVycyBhdCBlbmQgb2YgZXhlY3V0aW9uLiAqKVxuXG5sZXQgZmx1c2hfc3RhbmRhcmRfZm9ybWF0dGVycyAoKSA9XG4gIHBwX3ByaW50X2ZsdXNoIHN0ZF9mb3JtYXR0ZXIgKCk7XG4gIHBwX3ByaW50X2ZsdXNoIGVycl9mb3JtYXR0ZXIgKClcblxubGV0ICgpID0gYXRfZXhpdCBmbHVzaF9zdGFuZGFyZF9mb3JtYXR0ZXJzXG5cbigqXG5cbiAgRGVwcmVjYXRlZCBzdHVmZi5cblxuKilcblxuKCogRGVwcmVjYXRlZCA6IHN1YnN1bWVkIGJ5IHBwX3NldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyAqKVxubGV0IHBwX3NldF9hbGxfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgc3RhdGVcbiAgICB+b3V0OmYgfmZsdXNoOmcgfm5ld2xpbmU6aCB+c3BhY2VzOmkgPVxuICBwcF9zZXRfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgc3RhdGUgZiBnO1xuICBzdGF0ZS5wcF9vdXRfbmV3bGluZSA8LSBoO1xuICBzdGF0ZS5wcF9vdXRfc3BhY2VzIDwtIGlcblxuKCogRGVwcmVjYXRlZCA6IHN1YnN1bWVkIGJ5IHBwX2dldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyAqKVxubGV0IHBwX2dldF9hbGxfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgc3RhdGUgKCkgPVxuICAoc3RhdGUucHBfb3V0X3N0cmluZywgc3RhdGUucHBfb3V0X2ZsdXNoLFxuICAgc3RhdGUucHBfb3V0X25ld2xpbmUsIHN0YXRlLnBwX291dF9zcGFjZXMpXG5cblxuKCogRGVwcmVjYXRlZCA6IHN1YnN1bWVkIGJ5IHNldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyAqKVxubGV0IHNldF9hbGxfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgPVxuICBwcF9zZXRfYWxsX2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIHN0ZF9mb3JtYXR0ZXJcblxuXG4oKiBEZXByZWNhdGVkIDogc3Vic3VtZWQgYnkgZ2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zICopXG5sZXQgZ2V0X2FsbF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyA9XG4gIHBwX2dldF9hbGxfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgc3RkX2Zvcm1hdHRlclxuXG5cbigqIERlcHJlY2F0ZWQgOiBlcnJvciBwcm9uZSBmdW5jdGlvbiwgZG8gbm90IHVzZSBpdC5cbiAgIFRoaXMgZnVuY3Rpb24gaXMgbmVpdGhlciBjb21wb3NpdGlvbmFsIG5vciBpbmNyZW1lbnRhbCwgc2luY2UgaXQgZmx1c2hlc1xuICAgdGhlIHByZXR0eS1wcmludGVyIHF1ZXVlIGF0IGVhY2ggY2FsbC5cbiAgIFRvIGdldCB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5LCBkZWZpbmUgYSBmb3JtYXR0ZXIgb2YgeW91ciBvd24gd3JpdGluZyB0b1xuICAgdGhlIGJ1ZmZlciBhcmd1bWVudCwgYXMgaW5cbiAgIGxldCBwcGYgPSBmb3JtYXR0ZXJfb2ZfYnVmZmVyIGJcbiAgIHRoZW4gdXNlIHshZnByaW50ZiBwcGZ9IGFzIHVzdWFsLiAqKVxubGV0IGJwcmludGYgYiAoRm9ybWF0IChmbXQsIF8pIDogKCdhLCBmb3JtYXR0ZXIsIHVuaXQpIGZvcm1hdCkgPVxuICBsZXQgcHBmID0gZm9ybWF0dGVyX29mX2J1ZmZlciBiIGluXG4gIGxldCBrIGFjYyA9IG91dHB1dF9hY2MgcHBmIGFjYzsgcHBfZmx1c2hfcXVldWUgcHBmIGZhbHNlIGluXG4gIG1ha2VfcHJpbnRmIGsgRW5kX29mX2FjYyBmbXRcblxuXG4oKiBEZXByZWNhdGVkIDogYWxpYXMgZm9yIGtzcHJpbnRmLiAqKVxubGV0IGtwcmludGYgPSBrc3ByaW50ZlxuXG5cblxuKCogRGVwcmVjYXRlZCB0YWcgZnVuY3Rpb25zICopXG5cbnR5cGUgZm9ybWF0dGVyX3RhZ19mdW5jdGlvbnMgPSB7XG4gIG1hcmtfb3Blbl90YWcgOiB0YWcgLT4gc3RyaW5nO1xuICBtYXJrX2Nsb3NlX3RhZyA6IHRhZyAtPiBzdHJpbmc7XG4gIHByaW50X29wZW5fdGFnIDogdGFnIC0+IHVuaXQ7XG4gIHByaW50X2Nsb3NlX3RhZyA6IHRhZyAtPiB1bml0O1xufVxuXG5cbmxldCBwcF9zZXRfZm9ybWF0dGVyX3RhZ19mdW5jdGlvbnMgc3RhdGUge1xuICAgICBtYXJrX29wZW5fdGFnID0gbW90O1xuICAgICBtYXJrX2Nsb3NlX3RhZyA9IG1jdDtcbiAgICAgcHJpbnRfb3Blbl90YWcgPSBwb3Q7XG4gICAgIHByaW50X2Nsb3NlX3RhZyA9IHBjdDtcbiAgIH0gPVxuICBsZXQgc3RyaW5naWZ5IGYgZSA9IGZ1bmN0aW9uIFN0cmluZ190YWcgcyAtPiBmIHMgfCBfIC0+IGUgaW5cbiAgc3RhdGUucHBfbWFya19vcGVuX3RhZyA8LSBzdHJpbmdpZnkgbW90IFwiXCI7XG4gIHN0YXRlLnBwX21hcmtfY2xvc2VfdGFnIDwtIHN0cmluZ2lmeSBtY3QgXCJcIjtcbiAgc3RhdGUucHBfcHJpbnRfb3Blbl90YWcgPC0gc3RyaW5naWZ5IHBvdCAoKTtcbiAgc3RhdGUucHBfcHJpbnRfY2xvc2VfdGFnIDwtIHN0cmluZ2lmeSBwY3QgKClcblxubGV0IHBwX2dldF9mb3JtYXR0ZXJfdGFnX2Z1bmN0aW9ucyBmbXQgKCkgPVxuICBsZXQgZnVucyA9IHBwX2dldF9mb3JtYXR0ZXJfc3RhZ19mdW5jdGlvbnMgZm10ICgpIGluXG4gIGxldCBtYXJrX29wZW5fdGFnIHMgPSBmdW5zLm1hcmtfb3Blbl9zdGFnIChTdHJpbmdfdGFnIHMpIGluXG4gIGxldCBtYXJrX2Nsb3NlX3RhZyBzID0gZnVucy5tYXJrX2Nsb3NlX3N0YWcgKFN0cmluZ190YWcgcykgaW5cbiAgbGV0IHByaW50X29wZW5fdGFnIHMgPSBmdW5zLnByaW50X29wZW5fc3RhZyAoU3RyaW5nX3RhZyBzKSBpblxuICBsZXQgcHJpbnRfY2xvc2VfdGFnIHMgPSBmdW5zLnByaW50X2Nsb3NlX3N0YWcgKFN0cmluZ190YWcgcykgaW5cbiAge21hcmtfb3Blbl90YWc7IG1hcmtfY2xvc2VfdGFnOyBwcmludF9vcGVuX3RhZzsgcHJpbnRfY2xvc2VfdGFnfVxuXG5sZXQgc2V0X2Zvcm1hdHRlcl90YWdfZnVuY3Rpb25zID1cbiAgcHBfc2V0X2Zvcm1hdHRlcl90YWdfZnVuY3Rpb25zIHN0ZF9mb3JtYXR0ZXJcbmFuZCBnZXRfZm9ybWF0dGVyX3RhZ19mdW5jdGlvbnMgPVxuICBwcF9nZXRfZm9ybWF0dGVyX3RhZ19mdW5jdGlvbnMgc3RkX2Zvcm1hdHRlclxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgUGllcnJlIFdlaXMsIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAwMiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG5vcGVuIENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljc1xub3BlbiBDYW1saW50ZXJuYWxGb3JtYXRcblxuKCogYWxpYXMgdG8gYXZvaWQgd2FybmluZyBmb3IgYW1iaWd1aXR5IGJldHdlZW5cbiAgIFN0ZGxpYi5mb3JtYXQ2XG4gICBhbmQgQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzLmZvcm1hdDZcblxuICAgKHRoZSBmb3JtZXIgaXMgaW4gZmFjdCBhbiBhbGlhcyBmb3IgdGhlIGxhdHRlcixcbiAgICBidXQgdGhlIGFtYmlndWl0eSB3YXJuaW5nIGRvZXNuJ3QgY2FyZSlcbiopXG50eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXQ2ID1cbiAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIFN0ZGxpYi5mb3JtYXQ2XG5cblxuKCogVGhlIHJ1bi10aW1lIGxpYnJhcnkgZm9yIHNjYW5uZXJzLiAqKVxuXG4oKiBTY2FubmluZyBidWZmZXJzLiAqKVxubW9kdWxlIHR5cGUgU0NBTk5JTkcgPSBzaWdcblxuICB0eXBlIGluX2NoYW5uZWxcblxuICB0eXBlIHNjYW5idWYgPSBpbl9jaGFubmVsXG5cbiAgdHlwZSBmaWxlX25hbWUgPSBzdHJpbmdcblxuICB2YWwgc3RkaW4gOiBpbl9jaGFubmVsXG4gICgqIFRoZSBzY2FubmluZyBidWZmZXIgcmVhZGluZyBmcm9tIFtTdGRsaWIuc3RkaW5dLlxuICAgICBbc3RkaWJdIGlzIGVxdWl2YWxlbnQgdG8gW1NjYW5uaW5nLmZyb21fY2hhbm5lbCBTdGRsaWIuc3RkaW5dLiAqKVxuXG4gIHZhbCBzdGRpYiA6IGluX2NoYW5uZWxcbiAgKCogQW4gYWxpYXMgZm9yIFtTY2FuZi5zdGRpbl0sIHRoZSBzY2FubmluZyBidWZmZXIgcmVhZGluZyBmcm9tXG4gICAgIFtTdGRsaWIuc3RkaW5dLiAqKVxuXG4gIHZhbCBuZXh0X2NoYXIgOiBzY2FuYnVmIC0+IGNoYXJcbiAgKCogW1NjYW5uaW5nLm5leHRfY2hhciBpYl0gYWR2YW5jZSB0aGUgc2Nhbm5pbmcgYnVmZmVyIGZvclxuICAgICBvbmUgY2hhcmFjdGVyLlxuICAgICBJZiBubyBtb3JlIGNoYXJhY3RlciBjYW4gYmUgcmVhZCwgc2V0cyBhIGVuZCBvZiBmaWxlIGNvbmRpdGlvbiBhbmRcbiAgICAgcmV0dXJucyAnXFwwMDAnLiAqKVxuXG4gIHZhbCBpbnZhbGlkYXRlX2N1cnJlbnRfY2hhciA6IHNjYW5idWYgLT4gdW5pdFxuICAoKiBbU2Nhbm5pbmcuaW52YWxpZGF0ZV9jdXJyZW50X2NoYXIgaWJdIG1hcmsgdGhlIGN1cnJlbnRfY2hhciBhcyBhbHJlYWR5XG4gICAgIHNjYW5uZWQuICopXG5cbiAgdmFsIHBlZWtfY2hhciA6IHNjYW5idWYgLT4gY2hhclxuICAoKiBbU2Nhbm5pbmcucGVla19jaGFyIGliXSByZXR1cm5zIHRoZSBjdXJyZW50IGNoYXIgYXZhaWxhYmxlIGluXG4gICAgIHRoZSBidWZmZXIgb3IgcmVhZHMgb25lIGlmIG5lY2Vzc2FyeSAod2hlbiB0aGUgY3VycmVudCBjaGFyYWN0ZXIgaXNcbiAgICAgYWxyZWFkeSBzY2FubmVkKS5cbiAgICAgSWYgbm8gY2hhcmFjdGVyIGNhbiBiZSByZWFkLCBzZXRzIGFuIGVuZCBvZiBmaWxlIGNvbmRpdGlvbiBhbmRcbiAgICAgcmV0dXJucyAnXFwwMDAnLiAqKVxuXG4gIHZhbCBjaGVja2VkX3BlZWtfY2hhciA6IHNjYW5idWYgLT4gY2hhclxuICAoKiBTYW1lIGFzIFtTY2FubmluZy5wZWVrX2NoYXJdIGFib3ZlIGJ1dCBhbHdheXMgcmV0dXJucyBhIHZhbGlkIGNoYXIgb3JcbiAgICAgZmFpbHM6IGluc3RlYWQgb2YgcmV0dXJuaW5nIGEgbnVsbCBjaGFyIHdoZW4gdGhlIHJlYWRpbmcgbWV0aG9kIG9mIHRoZVxuICAgICBpbnB1dCBidWZmZXIgaGFzIHJlYWNoZWQgYW4gZW5kIG9mIGZpbGUsIHRoZSBmdW5jdGlvbiByYWlzZXMgZXhjZXB0aW9uXG4gICAgIFtFbmRfb2ZfZmlsZV0uICopXG5cbiAgdmFsIHN0b3JlX2NoYXIgOiBpbnQgLT4gc2NhbmJ1ZiAtPiBjaGFyIC0+IGludFxuICAoKiBbU2Nhbm5pbmcuc3RvcmVfY2hhciBsaW0gaWIgY10gYWRkcyBbY10gdG8gdGhlIHRva2VuIGJ1ZmZlclxuICAgICBvZiB0aGUgc2Nhbm5pbmcgYnVmZmVyIFtpYl0uIEl0IGFsc28gYWR2YW5jZXMgdGhlIHNjYW5uaW5nIGJ1ZmZlciBmb3JcbiAgICAgb25lIGNoYXJhY3RlciBhbmQgcmV0dXJucyBbbGltIC0gMV0sIGluZGljYXRpbmcgdGhlIG5ldyBsaW1pdCBmb3IgdGhlXG4gICAgIGxlbmd0aCBvZiB0aGUgY3VycmVudCB0b2tlbi4gKilcblxuICB2YWwgc2tpcF9jaGFyIDogaW50IC0+IHNjYW5idWYgLT4gaW50XG4gICgqIFtTY2FubmluZy5za2lwX2NoYXIgbGltIGliXSBpZ25vcmVzIHRoZSBjdXJyZW50IGNoYXJhY3Rlci4gKilcblxuICB2YWwgaWdub3JlX2NoYXIgOiBpbnQgLT4gc2NhbmJ1ZiAtPiBpbnRcbiAgKCogW1NjYW5uaW5nLmlnbm9yZV9jaGFyIGliIGxpbV0gaWdub3JlcyB0aGUgY3VycmVudCBjaGFyYWN0ZXIgYW5kXG4gICAgIGRlY3JlbWVudHMgdGhlIGxpbWl0LiAqKVxuXG4gIHZhbCB0b2tlbiA6IHNjYW5idWYgLT4gc3RyaW5nXG4gICgqIFtTY2FubmluZy50b2tlbiBpYl0gcmV0dXJucyB0aGUgc3RyaW5nIHN0b3JlZCBpbnRvIHRoZSB0b2tlblxuICAgICBidWZmZXIgb2YgdGhlIHNjYW5uaW5nIGJ1ZmZlcjogaXQgcmV0dXJucyB0aGUgdG9rZW4gbWF0Y2hlZCBieSB0aGVcbiAgICAgZm9ybWF0LiAqKVxuXG4gIHZhbCByZXNldF90b2tlbiA6IHNjYW5idWYgLT4gdW5pdFxuICAoKiBbU2Nhbm5pbmcucmVzZXRfdG9rZW4gaWJdIHJlc2V0cyB0aGUgdG9rZW4gYnVmZmVyIG9mXG4gICAgIHRoZSBnaXZlbiBzY2FubmluZyBidWZmZXIuICopXG5cbiAgdmFsIGNoYXJfY291bnQgOiBzY2FuYnVmIC0+IGludFxuICAoKiBbU2Nhbm5pbmcuY2hhcl9jb3VudCBpYl0gcmV0dXJucyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnNcbiAgICAgcmVhZCBzbyBmYXIgZnJvbSB0aGUgZ2l2ZW4gYnVmZmVyLiAqKVxuXG4gIHZhbCBsaW5lX2NvdW50IDogc2NhbmJ1ZiAtPiBpbnRcbiAgKCogW1NjYW5uaW5nLmxpbmVfY291bnQgaWJdIHJldHVybnMgdGhlIG51bWJlciBvZiBuZXcgbGluZVxuICAgICBjaGFyYWN0ZXJzIHJlYWQgc28gZmFyIGZyb20gdGhlIGdpdmVuIGJ1ZmZlci4gKilcblxuICB2YWwgdG9rZW5fY291bnQgOiBzY2FuYnVmIC0+IGludFxuICAoKiBbU2Nhbm5pbmcudG9rZW5fY291bnQgaWJdIHJldHVybnMgdGhlIG51bWJlciBvZiB0b2tlbnMgcmVhZFxuICAgICBzbyBmYXIgZnJvbSBbaWJdLiAqKVxuXG4gIHZhbCBlb2YgOiBzY2FuYnVmIC0+IGJvb2xcbiAgKCogW1NjYW5uaW5nLmVvZiBpYl0gcmV0dXJucyB0aGUgZW5kIG9mIGlucHV0IGNvbmRpdGlvblxuICAgICBvZiB0aGUgZ2l2ZW4gYnVmZmVyLiAqKVxuXG4gIHZhbCBlbmRfb2ZfaW5wdXQgOiBzY2FuYnVmIC0+IGJvb2xcbiAgKCogW1NjYW5uaW5nLmVuZF9vZl9pbnB1dCBpYl0gdGVzdHMgdGhlIGVuZCBvZiBpbnB1dCBjb25kaXRpb25cbiAgICAgb2YgdGhlIGdpdmVuIGJ1ZmZlciAoaWYgbm8gY2hhciBoYXMgZXZlciBiZWVuIHJlYWQsIGFuIGF0dGVtcHQgdG9cbiAgICAgcmVhZCBvbmUgaXMgcGVyZm9ybWVkKS4gKilcblxuICB2YWwgYmVnaW5uaW5nX29mX2lucHV0IDogc2NhbmJ1ZiAtPiBib29sXG4gICgqIFtTY2FubmluZy5iZWdpbm5pbmdfb2ZfaW5wdXQgaWJdIHRlc3RzIHRoZSBiZWdpbm5pbmcgb2YgaW5wdXRcbiAgICAgY29uZGl0aW9uIG9mIHRoZSBnaXZlbiBidWZmZXIuICopXG5cbiAgdmFsIG5hbWVfb2ZfaW5wdXQgOiBzY2FuYnVmIC0+IHN0cmluZ1xuICAoKiBbU2Nhbm5pbmcubmFtZV9vZl9pbnB1dCBpYl0gcmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgY2hhcmFjdGVyXG4gICAgIHNvdXJjZSBmb3IgaW5wdXQgYnVmZmVyIFtpYl0uICopXG5cbiAgdmFsIG9wZW5faW4gOiBmaWxlX25hbWUgLT4gaW5fY2hhbm5lbFxuICB2YWwgb3Blbl9pbl9iaW4gOiBmaWxlX25hbWUgLT4gaW5fY2hhbm5lbFxuICB2YWwgZnJvbV9maWxlIDogZmlsZV9uYW1lIC0+IGluX2NoYW5uZWxcbiAgdmFsIGZyb21fZmlsZV9iaW4gOiBmaWxlX25hbWUgLT4gaW5fY2hhbm5lbFxuICB2YWwgZnJvbV9zdHJpbmcgOiBzdHJpbmcgLT4gaW5fY2hhbm5lbFxuICB2YWwgZnJvbV9mdW5jdGlvbiA6ICh1bml0IC0+IGNoYXIpIC0+IGluX2NoYW5uZWxcbiAgdmFsIGZyb21fY2hhbm5lbCA6IFN0ZGxpYi5pbl9jaGFubmVsIC0+IGluX2NoYW5uZWxcblxuICB2YWwgY2xvc2VfaW4gOiBpbl9jaGFubmVsIC0+IHVuaXRcblxuICB2YWwgbWVtb19mcm9tX2NoYW5uZWwgOiBTdGRsaWIuaW5fY2hhbm5lbCAtPiBpbl9jaGFubmVsXG4gICgqIE9ic29sZXRlLiAqKVxuXG5lbmRcblxuXG5tb2R1bGUgU2Nhbm5pbmcgOiBTQ0FOTklORyA9IHN0cnVjdFxuXG4gICgqIFRoZSBydW4tdGltZSBsaWJyYXJ5IGZvciBzY2FuZi4gKilcblxuICB0eXBlIGZpbGVfbmFtZSA9IHN0cmluZ1xuXG4gIHR5cGUgaW5fY2hhbm5lbF9uYW1lID1cbiAgICB8IEZyb21fY2hhbm5lbCBvZiBTdGRsaWIuaW5fY2hhbm5lbFxuICAgIHwgRnJvbV9maWxlIG9mIGZpbGVfbmFtZSAqIFN0ZGxpYi5pbl9jaGFubmVsXG4gICAgfCBGcm9tX2Z1bmN0aW9uXG4gICAgfCBGcm9tX3N0cmluZ1xuXG5cbiAgdHlwZSBpbl9jaGFubmVsID0ge1xuICAgIG11dGFibGUgaWNfZW9mIDogYm9vbDtcbiAgICBtdXRhYmxlIGljX2N1cnJlbnRfY2hhciA6IGNoYXI7XG4gICAgbXV0YWJsZSBpY19jdXJyZW50X2NoYXJfaXNfdmFsaWQgOiBib29sO1xuICAgIG11dGFibGUgaWNfY2hhcl9jb3VudCA6IGludDtcbiAgICBtdXRhYmxlIGljX2xpbmVfY291bnQgOiBpbnQ7XG4gICAgbXV0YWJsZSBpY190b2tlbl9jb3VudCA6IGludDtcbiAgICBpY19nZXRfbmV4dF9jaGFyIDogdW5pdCAtPiBjaGFyO1xuICAgIGljX3Rva2VuX2J1ZmZlciA6IEJ1ZmZlci50O1xuICAgIGljX2lucHV0X25hbWUgOiBpbl9jaGFubmVsX25hbWU7XG4gIH1cblxuXG4gIHR5cGUgc2NhbmJ1ZiA9IGluX2NoYW5uZWxcblxuICBsZXQgbnVsbF9jaGFyID0gJ1xcMDAwJ1xuXG4gICgqIFJlYWRzIGEgbmV3IGNoYXJhY3RlciBmcm9tIGlucHV0IGJ1ZmZlci5cbiAgICAgTmV4dF9jaGFyIG5ldmVyIGZhaWxzLCBldmVuIGluIGNhc2Ugb2YgZW5kIG9mIGlucHV0OlxuICAgICBpdCB0aGVuIHNpbXBseSBzZXRzIHRoZSBlbmQgb2YgZmlsZSBjb25kaXRpb24uICopXG4gIGxldCBuZXh0X2NoYXIgaWIgPVxuICAgIHRyeVxuICAgICAgbGV0IGMgPSBpYi5pY19nZXRfbmV4dF9jaGFyICgpIGluXG4gICAgICBpYi5pY19jdXJyZW50X2NoYXIgPC0gYztcbiAgICAgIGliLmljX2N1cnJlbnRfY2hhcl9pc192YWxpZCA8LSB0cnVlO1xuICAgICAgaWIuaWNfY2hhcl9jb3VudCA8LSBzdWNjIGliLmljX2NoYXJfY291bnQ7XG4gICAgICBpZiBjID0gJ1xcbicgdGhlbiBpYi5pY19saW5lX2NvdW50IDwtIHN1Y2MgaWIuaWNfbGluZV9jb3VudDtcbiAgICAgIGMgd2l0aFxuICAgIHwgRW5kX29mX2ZpbGUgLT5cbiAgICAgIGxldCBjID0gbnVsbF9jaGFyIGluXG4gICAgICBpYi5pY19jdXJyZW50X2NoYXIgPC0gYztcbiAgICAgIGliLmljX2N1cnJlbnRfY2hhcl9pc192YWxpZCA8LSBmYWxzZTtcbiAgICAgIGliLmljX2VvZiA8LSB0cnVlO1xuICAgICAgY1xuXG5cbiAgbGV0IHBlZWtfY2hhciBpYiA9XG4gICAgaWYgaWIuaWNfY3VycmVudF9jaGFyX2lzX3ZhbGlkXG4gICAgdGhlbiBpYi5pY19jdXJyZW50X2NoYXJcbiAgICBlbHNlIG5leHRfY2hhciBpYlxuXG5cbiAgKCogUmV0dXJucyBhIHZhbGlkIGN1cnJlbnQgY2hhciBmb3IgdGhlIGlucHV0IGJ1ZmZlci4gSW4gcGFydGljdWxhclxuICAgICBubyBpcnJlbGV2YW50IG51bGwgY2hhcmFjdGVyIChhcyBzZXQgYnkgW25leHRfY2hhcl0gaW4gY2FzZSBvZiBlbmRcbiAgICAgb2YgaW5wdXQpIGlzIHJldHVybmVkLCBzaW5jZSBbRW5kX29mX2ZpbGVdIGlzIHJhaXNlZCB3aGVuXG4gICAgIFtuZXh0X2NoYXJdIHNldHMgdGhlIGVuZCBvZiBmaWxlIGNvbmRpdGlvbiB3aGlsZSB0cnlpbmcgdG8gcmVhZCBhXG4gICAgIG5ldyBjaGFyYWN0ZXIuICopXG4gIGxldCBjaGVja2VkX3BlZWtfY2hhciBpYiA9XG4gICAgbGV0IGMgPSBwZWVrX2NoYXIgaWIgaW5cbiAgICBpZiBpYi5pY19lb2YgdGhlbiByYWlzZSBFbmRfb2ZfZmlsZTtcbiAgICBjXG5cblxuICBsZXQgZW5kX29mX2lucHV0IGliID1cbiAgICBpZ25vcmUgKHBlZWtfY2hhciBpYik7XG4gICAgaWIuaWNfZW9mXG5cblxuICBsZXQgZW9mIGliID0gaWIuaWNfZW9mXG5cbiAgbGV0IGJlZ2lubmluZ19vZl9pbnB1dCBpYiA9IGliLmljX2NoYXJfY291bnQgPSAwXG5cbiAgbGV0IG5hbWVfb2ZfaW5wdXQgaWIgPVxuICAgIG1hdGNoIGliLmljX2lucHV0X25hbWUgd2l0aFxuICAgIHwgRnJvbV9jaGFubmVsIF9pYyAtPiBcInVubmFtZWQgU3RkbGliIGlucHV0IGNoYW5uZWxcIlxuICAgIHwgRnJvbV9maWxlIChmbmFtZSwgX2ljKSAtPiBmbmFtZVxuICAgIHwgRnJvbV9mdW5jdGlvbiAtPiBcInVubmFtZWQgZnVuY3Rpb25cIlxuICAgIHwgRnJvbV9zdHJpbmcgLT4gXCJ1bm5hbWVkIGNoYXJhY3RlciBzdHJpbmdcIlxuXG5cbiAgbGV0IGNoYXJfY291bnQgaWIgPVxuICAgIGlmIGliLmljX2N1cnJlbnRfY2hhcl9pc192YWxpZFxuICAgIHRoZW4gaWIuaWNfY2hhcl9jb3VudCAtIDFcbiAgICBlbHNlIGliLmljX2NoYXJfY291bnRcblxuXG4gIGxldCBsaW5lX2NvdW50IGliID0gaWIuaWNfbGluZV9jb3VudFxuXG4gIGxldCByZXNldF90b2tlbiBpYiA9IEJ1ZmZlci5yZXNldCBpYi5pY190b2tlbl9idWZmZXJcblxuICBsZXQgaW52YWxpZGF0ZV9jdXJyZW50X2NoYXIgaWIgPSBpYi5pY19jdXJyZW50X2NoYXJfaXNfdmFsaWQgPC0gZmFsc2VcblxuICBsZXQgdG9rZW4gaWIgPVxuICAgIGxldCB0b2tlbl9idWZmZXIgPSBpYi5pY190b2tlbl9idWZmZXIgaW5cbiAgICBsZXQgdG9rID0gQnVmZmVyLmNvbnRlbnRzIHRva2VuX2J1ZmZlciBpblxuICAgIEJ1ZmZlci5jbGVhciB0b2tlbl9idWZmZXI7XG4gICAgaWIuaWNfdG9rZW5fY291bnQgPC0gc3VjYyBpYi5pY190b2tlbl9jb3VudDtcbiAgICB0b2tcblxuXG4gIGxldCB0b2tlbl9jb3VudCBpYiA9IGliLmljX3Rva2VuX2NvdW50XG5cbiAgbGV0IHNraXBfY2hhciB3aWR0aCBpYiA9XG4gICAgaW52YWxpZGF0ZV9jdXJyZW50X2NoYXIgaWI7XG4gICAgd2lkdGhcblxuXG4gIGxldCBpZ25vcmVfY2hhciB3aWR0aCBpYiA9IHNraXBfY2hhciAod2lkdGggLSAxKSBpYlxuXG4gIGxldCBzdG9yZV9jaGFyIHdpZHRoIGliIGMgPVxuICAgIEJ1ZmZlci5hZGRfY2hhciBpYi5pY190b2tlbl9idWZmZXIgYztcbiAgICBpZ25vcmVfY2hhciB3aWR0aCBpYlxuXG5cbiAgbGV0IGRlZmF1bHRfdG9rZW5fYnVmZmVyX3NpemUgPSAxMDI0XG5cbiAgbGV0IGNyZWF0ZSBpbmFtZSBuZXh0ID0ge1xuICAgIGljX2VvZiA9IGZhbHNlO1xuICAgIGljX2N1cnJlbnRfY2hhciA9IG51bGxfY2hhcjtcbiAgICBpY19jdXJyZW50X2NoYXJfaXNfdmFsaWQgPSBmYWxzZTtcbiAgICBpY19jaGFyX2NvdW50ID0gMDtcbiAgICBpY19saW5lX2NvdW50ID0gMDtcbiAgICBpY190b2tlbl9jb3VudCA9IDA7XG4gICAgaWNfZ2V0X25leHRfY2hhciA9IG5leHQ7XG4gICAgaWNfdG9rZW5fYnVmZmVyID0gQnVmZmVyLmNyZWF0ZSBkZWZhdWx0X3Rva2VuX2J1ZmZlcl9zaXplO1xuICAgIGljX2lucHV0X25hbWUgPSBpbmFtZTtcbiAgfVxuXG5cbiAgbGV0IGZyb21fc3RyaW5nIHMgPVxuICAgIGxldCBpID0gcmVmIDAgaW5cbiAgICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gICAgbGV0IG5leHQgKCkgPVxuICAgICAgaWYgIWkgPj0gbGVuIHRoZW4gcmFpc2UgRW5kX29mX2ZpbGUgZWxzZVxuICAgICAgbGV0IGMgPSBzLlshaV0gaW5cbiAgICAgIGluY3IgaTtcbiAgICAgIGMgaW5cbiAgICBjcmVhdGUgRnJvbV9zdHJpbmcgbmV4dFxuXG5cbiAgbGV0IGZyb21fZnVuY3Rpb24gPSBjcmVhdGUgRnJvbV9mdW5jdGlvblxuXG4gICgqIFNjYW5uaW5nIGZyb20gYW4gaW5wdXQgY2hhbm5lbC4gKilcblxuICAoKiBQb3NpdGlvbiBvZiB0aGUgcHJvYmxlbTpcblxuICAgICBXZSBjYW5ub3QgcHJldmVudCB0aGUgc2Nhbm5pbmcgbWVjaGFuaXNtIHRvIHVzZSBvbmUgbG9va2FoZWFkIGNoYXJhY3RlcixcbiAgICAgaWYgbmVlZGVkIGJ5IHRoZSBzZW1hbnRpY3Mgb2YgdGhlIGZvcm1hdCBzdHJpbmcgc3BlY2lmaWNhdGlvbnMgKGUuZy4gYVxuICAgICB0cmFpbGluZyAnc2tpcCBzcGFjZScgc3BlY2lmaWNhdGlvbiBpbiB0aGUgZm9ybWF0IHN0cmluZyk7IGluIHRoaXMgY2FzZSxcbiAgICAgdGhlIG1hbmRhdG9yeSBsb29rYWhlYWQgY2hhcmFjdGVyIGlzIGluZGVlZCByZWFkIGZyb20gdGhlIGlucHV0IGFuZCBub3RcbiAgICAgdXNlZCB0byByZXR1cm4gdGhlIHRva2VuIHJlYWQuIEl0IGlzIHRodXMgbWFuZGF0b3J5IHRvIGJlIGFibGUgdG8gc3RvcmVcbiAgICAgYW4gdW51c2VkIGxvb2thaGVhZCBjaGFyYWN0ZXIgc29tZXdoZXJlIHRvIGdldCBpdCBhcyB0aGUgZmlyc3QgY2hhcmFjdGVyXG4gICAgIG9mIHRoZSBuZXh0IHNjYW4uXG5cbiAgICAgVG8gY2lyY3VtdmVudCB0aGlzIHByb2JsZW0sIGFsbCB0aGUgc2Nhbm5pbmcgZnVuY3Rpb25zIGdldCBhIGxvdyBsZXZlbFxuICAgICBpbnB1dCBidWZmZXIgYXJndW1lbnQgd2hlcmUgdGhleSBzdG9yZSB0aGUgbG9va2FoZWFkIGNoYXJhY3RlciB3aGVuXG4gICAgIG5lZWRlZDsgYWRkaXRpb25hbGx5LCB0aGUgaW5wdXQgYnVmZmVyIGlzIHRoZSBvbmx5IHNvdXJjZSBvZiBjaGFyYWN0ZXIgb2ZcbiAgICAgYSBzY2FubmVyLiBUaGUgW3NjYW5idWZdIGlucHV0IGJ1ZmZlcnMgYXJlIGRlZmluZWQgaW4gbW9kdWxlIHshU2Nhbm5pbmd9LlxuXG4gICAgIE5vdyB3ZSB1bmRlcnN0YW5kIHRoYXQgaXQgaXMgZXh0cmVtZWx5IGltcG9ydGFudCB0aGF0IHJlbGF0ZWQgYW5kXG4gICAgIHN1Y2Nlc3NpdmUgY2FsbHMgdG8gc2Nhbm5lcnMgaW5kZWVkIHJlYWQgZnJvbSB0aGUgc2FtZSBpbnB1dCBidWZmZXIuXG4gICAgIEluIGVmZmVjdCwgaWYgYSBzY2FubmVyIFtzY2FuMV0gaXMgcmVhZGluZyBmcm9tIFtpYjFdIGFuZCBzdG9yZXMgYW5cbiAgICAgdW51c2VkIGxvb2thaGVhZCBjaGFyYWN0ZXIgW2MxXSBpbnRvIGl0cyBpbnB1dCBidWZmZXIgW2liMV0sIHRoZW5cbiAgICAgYW5vdGhlciBzY2FubmVyIFtzY2FuMl0gbm90IHJlYWRpbmcgZnJvbSB0aGUgc2FtZSBidWZmZXIgW2liMV0gd2lsbCBtaXNzXG4gICAgIHRoZSBjaGFyYWN0ZXIgW2MxXSwgc2VlbWluZ2x5IHZhbmlzaGVkIGluIHRoZSBhaXIgZnJvbSB0aGUgcG9pbnQgb2Ygdmlld1xuICAgICBvZiBbc2NhbjJdLlxuXG4gICAgIFRoaXMgbWVjaGFuaXNtIHdvcmtzIHBlcmZlY3RseSB0byByZWFkIGZyb20gc3RyaW5ncywgZnJvbSBmaWxlcywgYW5kIGZyb21cbiAgICAgZnVuY3Rpb25zLCBzaW5jZSBpbiB0aG9zZSBjYXNlcywgYWxsb2NhdGluZyB0d28gYnVmZmVycyByZWFkaW5nIGZyb20gdGhlXG4gICAgIHNhbWUgc291cmNlIGlzIHVubmF0dXJhbC5cblxuICAgICBTdGlsbCwgdGhlcmUgaXMgYSBkaWZmaWN1bHR5IGluIHRoZSBjYXNlIG9mIHNjYW5uaW5nIGZyb20gYW4gaW5wdXRcbiAgICAgY2hhbm5lbC4gSW4gZWZmZWN0LCB3aGVuIHNjYW5uaW5nIGZyb20gYW4gaW5wdXQgY2hhbm5lbCBbaWNdLCB0aGlzIGNoYW5uZWxcbiAgICAgbWF5IG5vdCBoYXZlIGJlZW4gYWxsb2NhdGVkIGZyb20gd2l0aGluIHRoaXMgbGlicmFyeS4gSGVuY2UsIGl0IG1heSBiZVxuICAgICBzaGFyZWQgKHR3byBmdW5jdGlvbnMgb2YgdGhlIHVzZXIncyBwcm9ncmFtIG1heSBzdWNjZXNzaXZlbHkgcmVhZCBmcm9tXG4gICAgIFtpY10pLiBUaGlzIGlzIGhpZ2hseSBlcnJvciBwcm9uZSBzaW5jZSwgb25lIG9mIHRoZSBmdW5jdGlvbiBtYXkgc2VlayB0aGVcbiAgICAgaW5wdXQgY2hhbm5lbCwgd2hpbGUgdGhlIG90aGVyIGZ1bmN0aW9uIGhhcyBzdGlsbCBhbiB1bnVzZWQgbG9va2FoZWFkXG4gICAgIGNoYXJhY3RlciBpbiBpdHMgaW5wdXQgYnVmZmVyLiBJbiBjb25jbHVzaW9uLCB5b3Ugc2hvdWxkIG5ldmVyIG1peCBkaXJlY3RcbiAgICAgbG93IGxldmVsIHJlYWRpbmcgYW5kIGhpZ2ggbGV2ZWwgc2Nhbm5pbmcgZnJvbSB0aGUgc2FtZSBpbnB1dCBjaGFubmVsLlxuXG4gICopXG5cbiAgKCogUGVyZm9ybSBidWZmZXJpemVkIGlucHV0IHRvIGltcHJvdmUgZWZmaWNpZW5jeS4gKilcbiAgbGV0IGZpbGVfYnVmZmVyX3NpemUgPSByZWYgMTAyNFxuXG4gICgqIFRoZSBzY2FubmVyIGNsb3NlcyB0aGUgaW5wdXQgY2hhbm5lbCBhdCBlbmQgb2YgaW5wdXQuICopXG4gIGxldCBzY2FuX2Nsb3NlX2F0X2VuZCBpYyA9IFN0ZGxpYi5jbG9zZV9pbiBpYzsgcmFpc2UgRW5kX29mX2ZpbGVcblxuICAoKiBUaGUgc2Nhbm5lciBkb2VzIG5vdCBjbG9zZSB0aGUgaW5wdXQgY2hhbm5lbCBhdCBlbmQgb2YgaW5wdXQ6XG4gICAgIGl0IGp1c3QgcmFpc2VzIFtFbmRfb2ZfZmlsZV0uICopXG4gIGxldCBzY2FuX3JhaXNlX2F0X2VuZCBfaWMgPSByYWlzZSBFbmRfb2ZfZmlsZVxuXG4gIGxldCBmcm9tX2ljIHNjYW5fY2xvc2VfaWMgaW5hbWUgaWMgPVxuICAgIGxldCBsZW4gPSAhZmlsZV9idWZmZXJfc2l6ZSBpblxuICAgIGxldCBidWYgPSBCeXRlcy5jcmVhdGUgbGVuIGluXG4gICAgbGV0IGkgPSByZWYgMCBpblxuICAgIGxldCBsaW0gPSByZWYgMCBpblxuICAgIGxldCBlb2YgPSByZWYgZmFsc2UgaW5cbiAgICBsZXQgbmV4dCAoKSA9XG4gICAgICBpZiAhaSA8ICFsaW0gdGhlbiBiZWdpbiBsZXQgYyA9IEJ5dGVzLmdldCBidWYgIWkgaW4gaW5jciBpOyBjIGVuZCBlbHNlXG4gICAgICBpZiAhZW9mIHRoZW4gcmFpc2UgRW5kX29mX2ZpbGUgZWxzZSBiZWdpblxuICAgICAgICBsaW0gOj0gaW5wdXQgaWMgYnVmIDAgbGVuO1xuICAgICAgICBpZiAhbGltID0gMCB0aGVuIGJlZ2luIGVvZiA6PSB0cnVlOyBzY2FuX2Nsb3NlX2ljIGljIGVuZCBlbHNlIGJlZ2luXG4gICAgICAgICAgaSA6PSAxO1xuICAgICAgICAgIEJ5dGVzLmdldCBidWYgMFxuICAgICAgICBlbmRcbiAgICAgIGVuZCBpblxuICAgIGNyZWF0ZSBpbmFtZSBuZXh0XG5cblxuICBsZXQgZnJvbV9pY19jbG9zZV9hdF9lbmQgPSBmcm9tX2ljIHNjYW5fY2xvc2VfYXRfZW5kXG4gIGxldCBmcm9tX2ljX3JhaXNlX2F0X2VuZCA9IGZyb21faWMgc2Nhbl9yYWlzZV9hdF9lbmRcblxuICAoKiBUaGUgc2Nhbm5pbmcgYnVmZmVyIHJlYWRpbmcgZnJvbSBbU3RkbGliLnN0ZGluXS5cbiAgICAgT25lIGNvdWxkIHRyeSB0byBkZWZpbmUgW3N0ZGliXSBhcyBhIHNjYW5uaW5nIGJ1ZmZlciByZWFkaW5nIGEgY2hhcmFjdGVyXG4gICAgIGF0IGEgdGltZSAobm8gYnVmZmVyaXphdGlvbiBhdCBhbGwpLCBidXQgdW5mb3J0dW5hdGVseSB0aGUgdG9wLWxldmVsXG4gICAgIGludGVyYWN0aW9uIHdvdWxkIGJlIHdyb25nLiBUaGlzIGlzIGR1ZSB0byBzb21lIGtpbmQgb2ZcbiAgICAgJ3JhY2UgY29uZGl0aW9uJyB3aGVuIHJlYWRpbmcgZnJvbSBbU3RkbGliLnN0ZGluXSxcbiAgICAgc2luY2UgdGhlIGludGVyYWN0aXZlIGNvbXBpbGVyIGFuZCBbU2NhbmYuc2NhbmZdIHdpbGwgc2ltdWx0YW5lb3VzbHlcbiAgICAgcmVhZCB0aGUgbWF0ZXJpYWwgdGhleSBuZWVkIGZyb20gW1N0ZGxpYi5zdGRpbl07IHRoZW4sIGNvbmZ1c2lvblxuICAgICB3aWxsIHJlc3VsdCBmcm9tIHdoYXQgc2hvdWxkIGJlIHJlYWQgYnkgdGhlIHRvcC1sZXZlbCBhbmQgd2hhdCBzaG91bGQgYmVcbiAgICAgcmVhZCBieSBbU2NhbmYuc2NhbmZdLlxuICAgICBUaGlzIGlzIGV2ZW4gbW9yZSBjb21wbGljYXRlZCBieSB0aGUgb25lIGNoYXJhY3RlciBsb29rYWhlYWQgdGhhdFxuICAgICBbU2NhbmYuc2NhbmZdIGlzIHNvbWV0aW1lcyBvYmxpZ2VkIHRvIG1haW50YWluOiB0aGUgbG9va2FoZWFkIGNoYXJhY3RlclxuICAgICB3aWxsIGJlIGF2YWlsYWJsZSBmb3IgdGhlIG5leHQgW1NjYW5mLnNjYW5mXSBlbnRyeSwgc2VlbWluZ2x5IGNvbWluZyBmcm9tXG4gICAgIG5vd2hlcmUuXG4gICAgIEFsc28gbm8gW0VuZF9vZl9maWxlXSBpcyByYWlzZWQgd2hlbiByZWFkaW5nIGZyb20gc3RkaW46IGlmIG5vdCBlbm91Z2hcbiAgICAgY2hhcmFjdGVycyBoYXZlIGJlZW4gcmVhZCwgd2Ugc2ltcGx5IGFzayB0byByZWFkIG1vcmUuICopXG4gIGxldCBzdGRpbiA9XG4gICAgZnJvbV9pYyBzY2FuX3JhaXNlX2F0X2VuZFxuICAgICAgKEZyb21fZmlsZSAoXCItXCIsIFN0ZGxpYi5zdGRpbikpIFN0ZGxpYi5zdGRpblxuXG5cbiAgbGV0IHN0ZGliID0gc3RkaW5cblxuICBsZXQgb3Blbl9pbl9maWxlIG9wZW5faW4gZm5hbWUgPVxuICAgIG1hdGNoIGZuYW1lIHdpdGhcbiAgICB8IFwiLVwiIC0+IHN0ZGluXG4gICAgfCBmbmFtZSAtPlxuICAgICAgbGV0IGljID0gb3Blbl9pbiBmbmFtZSBpblxuICAgICAgZnJvbV9pY19jbG9zZV9hdF9lbmQgKEZyb21fZmlsZSAoZm5hbWUsIGljKSkgaWNcblxuXG4gIGxldCBvcGVuX2luID0gb3Blbl9pbl9maWxlIFN0ZGxpYi5vcGVuX2luXG4gIGxldCBvcGVuX2luX2JpbiA9IG9wZW5faW5fZmlsZSBTdGRsaWIub3Blbl9pbl9iaW5cblxuICBsZXQgZnJvbV9maWxlID0gb3Blbl9pblxuICBsZXQgZnJvbV9maWxlX2JpbiA9IG9wZW5faW5fYmluXG5cbiAgbGV0IGZyb21fY2hhbm5lbCBpYyA9XG4gICAgZnJvbV9pY19yYWlzZV9hdF9lbmQgKEZyb21fY2hhbm5lbCBpYykgaWNcblxuXG4gIGxldCBjbG9zZV9pbiBpYiA9XG4gICAgbWF0Y2ggaWIuaWNfaW5wdXRfbmFtZSB3aXRoXG4gICAgfCBGcm9tX2NoYW5uZWwgaWMgLT5cbiAgICAgIFN0ZGxpYi5jbG9zZV9pbiBpY1xuICAgIHwgRnJvbV9maWxlIChfZm5hbWUsIGljKSAtPiBTdGRsaWIuY2xvc2VfaW4gaWNcbiAgICB8IEZyb21fZnVuY3Rpb24gfCBGcm9tX3N0cmluZyAtPiAoKVxuXG5cbiAgKCpcbiAgICAgT2Jzb2xldGU6IGEgbWVtbyBbZnJvbV9jaGFubmVsXSB2ZXJzaW9uIHRvIGJ1aWxkIGEgW1NjYW5uaW5nLmluX2NoYW5uZWxdXG4gICAgIHNjYW5uaW5nIGJ1ZmZlciBvdXQgb2YgYSBbU3RkbGliLmluX2NoYW5uZWxdLlxuICAgICBUaGlzIGZ1bmN0aW9uIHdhcyB1c2VkIHRvIHRyeSB0byBwcmVzZXJ2ZSB0aGUgc2Nhbm5pbmdcbiAgICAgc2VtYW50aWNzIGZvciB0aGUgKG5vdyBvYnNvbGV0ZSkgZnVuY3Rpb24gW2ZzY2FuZl0uXG4gICAgIEdpdmVuIHRoYXQgYWxsIHNjYW5uZXIgbXVzdCByZWFkIGZyb20gYSBbU2Nhbm5pbmcuaW5fY2hhbm5lbF0gc2Nhbm5pbmdcbiAgICAgYnVmZmVyLCBbZnNjYW5mXSBtdXN0IHJlYWQgZnJvbSBvbmUhXG4gICAgIE1vcmUgcHJlY2lzZWx5LCBnaXZlbiBbaWNdLCBhbGwgc3VjY2Vzc2l2ZSBjYWxscyBbZnNjYW5mIGljXSBtdXN0IHJlYWRcbiAgICAgZnJvbSB0aGUgc2FtZSBzY2FubmluZyBidWZmZXIuXG4gICAgIFRoaXMgb2JsaWdlZCB0aGlzIGxpYnJhcnkgdG8gYWxsb2NhdGVkIHNjYW5uaW5nIGJ1ZmZlcnMgdGhhdCB3ZXJlXG4gICAgIG5vdCBwcm9wZXJseSBnYXJiYWdlIGNvbGxlY3RhYmxlLCBoZW5jZSBsZWFkaW5nIHRvIG1lbW9yeSBsZWFrcy5cbiAgICAgSWYgeW91IG5lZWQgdG8gcmVhZCBmcm9tIGEgW1N0ZGxpYi5pbl9jaGFubmVsXSBpbnB1dCBjaGFubmVsXG4gICAgIFtpY10sIHNpbXBseSBkZWZpbmUgYSBbU2Nhbm5pbmcuaW5fY2hhbm5lbF0gZm9ybWF0dGVkIGlucHV0IGNoYW5uZWwgYXMgaW5cbiAgICAgW2xldCBpYiA9IFNjYW5uaW5nLmZyb21fY2hhbm5lbCBpY10sIHRoZW4gdXNlIFtTY2FuZi5ic2NhbmYgaWJdIGFzIHVzdWFsLlxuICAqKVxuICBsZXQgbWVtb19mcm9tX2ljID1cbiAgICBsZXQgbWVtbyA9IHJlZiBbXSBpblxuICAgIChmdW4gc2Nhbl9jbG9zZV9pYyBpYyAtPlxuICAgICB0cnkgTGlzdC5hc3NxIGljICFtZW1vIHdpdGhcbiAgICAgfCBOb3RfZm91bmQgLT5cbiAgICAgICBsZXQgaWIgPVxuICAgICAgICAgZnJvbV9pYyBzY2FuX2Nsb3NlX2ljIChGcm9tX2NoYW5uZWwgaWMpIGljIGluXG4gICAgICAgbWVtbyA6PSAoaWMsIGliKSA6OiAhbWVtbztcbiAgICAgICBpYilcblxuXG4gICgqIE9ic29sZXRlOiBzZWUgeyFtZW1vX2Zyb21faWN9IGFib3ZlLiAqKVxuICBsZXQgbWVtb19mcm9tX2NoYW5uZWwgPSBtZW1vX2Zyb21faWMgc2Nhbl9yYWlzZV9hdF9lbmRcblxuZW5kXG5cblxuKCogRm9ybWF0dGVkIGlucHV0IGZ1bmN0aW9ucy4gKilcblxudHlwZSAoJ2EsICdiLCAnYywgJ2QpIHNjYW5uZXIgPVxuICAgICAoJ2EsIFNjYW5uaW5nLmluX2NoYW5uZWwsICdiLCAnYywgJ2EgLT4gJ2QsICdkKSBmb3JtYXQ2IC0+ICdjXG5cblxuKCogUmVwb3J0aW5nIGVycm9ycy4gKilcbmV4Y2VwdGlvbiBTY2FuX2ZhaWx1cmUgb2Ygc3RyaW5nXG5cbmxldCBiYWRfaW5wdXQgcyA9IHJhaXNlIChTY2FuX2ZhaWx1cmUgcylcblxubGV0IGJhZF9pbnB1dF9lc2NhcGUgYyA9XG4gIGJhZF9pbnB1dCAoUHJpbnRmLnNwcmludGYgXCJpbGxlZ2FsIGVzY2FwZSBjaGFyYWN0ZXIgJUNcIiBjKVxuXG5cbmxldCBiYWRfdG9rZW5fbGVuZ3RoIG1lc3NhZ2UgPVxuICBiYWRfaW5wdXRcbiAgICAoUHJpbnRmLnNwcmludGZcbiAgICAgICBcInNjYW5uaW5nIG9mICVzIGZhaWxlZDogXFxcbiAgICAgICAgdGhlIHNwZWNpZmllZCBsZW5ndGggd2FzIHRvbyBzaG9ydCBmb3IgdG9rZW5cIlxuICAgICAgIG1lc3NhZ2UpXG5cblxubGV0IGJhZF9lbmRfb2ZfaW5wdXQgbWVzc2FnZSA9XG4gIGJhZF9pbnB1dFxuICAgIChQcmludGYuc3ByaW50ZlxuICAgICAgIFwic2Nhbm5pbmcgb2YgJXMgZmFpbGVkOiBcXFxuICAgICAgICBwcmVtYXR1cmUgZW5kIG9mIGZpbGUgb2NjdXJyZWQgYmVmb3JlIGVuZCBvZiB0b2tlblwiXG4gICAgICAgbWVzc2FnZSlcblxuXG5sZXQgYmFkX2Zsb2F0ICgpID1cbiAgYmFkX2lucHV0IFwibm8gZG90IG9yIGV4cG9uZW50IHBhcnQgZm91bmQgaW4gZmxvYXQgdG9rZW5cIlxuXG5cbmxldCBiYWRfaGV4X2Zsb2F0ICgpID1cbiAgYmFkX2lucHV0IFwibm90IGEgdmFsaWQgZmxvYXQgaW4gaGV4YWRlY2ltYWwgbm90YXRpb25cIlxuXG5cbmxldCBjaGFyYWN0ZXJfbWlzbWF0Y2hfZXJyIGMgY2kgPVxuICBQcmludGYuc3ByaW50ZiBcImxvb2tpbmcgZm9yICVDLCBmb3VuZCAlQ1wiIGMgY2lcblxuXG5sZXQgY2hhcmFjdGVyX21pc21hdGNoIGMgY2kgPVxuICBiYWRfaW5wdXQgKGNoYXJhY3Rlcl9taXNtYXRjaF9lcnIgYyBjaSlcblxuXG5sZXQgcmVjIHNraXBfd2hpdGVzIGliID1cbiAgbGV0IGMgPSBTY2FubmluZy5wZWVrX2NoYXIgaWIgaW5cbiAgaWYgbm90IChTY2FubmluZy5lb2YgaWIpIHRoZW4gYmVnaW5cbiAgICBtYXRjaCBjIHdpdGhcbiAgICB8ICcgJyB8ICdcXHQnIHwgJ1xcbicgfCAnXFxyJyAtPlxuICAgICAgU2Nhbm5pbmcuaW52YWxpZGF0ZV9jdXJyZW50X2NoYXIgaWI7IHNraXBfd2hpdGVzIGliXG4gICAgfCBfIC0+ICgpXG4gIGVuZFxuXG5cbigqIENoZWNraW5nIHRoYXQgW2NdIGlzIGluZGVlZCBpbiB0aGUgaW5wdXQsIHRoZW4gc2tpcHMgaXQuXG4gICBJbiB0aGlzIGNhc2UsIHRoZSBjaGFyYWN0ZXIgW2NdIGhhcyBiZWVuIGV4cGxpY2l0bHkgc3BlY2lmaWVkIGluIHRoZVxuICAgZm9ybWF0IGFzIGJlaW5nIG1hbmRhdG9yeSBpbiB0aGUgaW5wdXQ7IGhlbmNlIHdlIHNob3VsZCBmYWlsIHdpdGhcbiAgIFtFbmRfb2ZfZmlsZV0gaW4gY2FzZSBvZiBlbmRfb2ZfaW5wdXQuXG4gICAoUmVtZW1iZXIgdGhhdCBbU2Nhbl9mYWlsdXJlXSBpcyByYWlzZWQgb25seSB3aGVuICh3ZSBjYW4gcHJvdmUgYnlcbiAgIGV2aWRlbmNlKSB0aGF0IHRoZSBpbnB1dCBkb2VzIG5vdCBtYXRjaCB0aGUgZm9ybWF0IHN0cmluZyBnaXZlbi4gV2UgbXVzdFxuICAgdGh1cyBkaWZmZXJlbnRpYXRlIFtFbmRfb2ZfZmlsZV0gYXMgYW4gZXJyb3IgZHVlIHRvIGxhY2sgb2YgaW5wdXQsIGFuZFxuICAgW1NjYW5fZmFpbHVyZV0gd2hpY2ggaXMgZHVlIHRvIHByb3ZhYmx5IHdyb25nIGlucHV0LiBJIGFtIG5vdCBzdXJlIHRoaXMgaXNcbiAgIHdvcnRoIHRoZSBidXJkZW46IGl0IGlzIGNvbXBsZXggYW5kIHNvbWVob3cgc3VibGltaW5hbDsgc2hvdWxkIGJlIGNsZWFyZXJcbiAgIHRvIGZhaWwgd2l0aCBTY2FuX2ZhaWx1cmUgXCJOb3QgZW5vdWdoIGlucHV0IHRvIGNvbXBsZXRlIHNjYW5uaW5nXCIhKVxuXG4gICBUaGF0J3Mgd2h5LCB3YWl0aW5nIGZvciBhIGJldHRlciBzb2x1dGlvbiwgd2UgdXNlIGNoZWNrZWRfcGVla19jaGFyIGhlcmUuXG4gICBXZSBhcmUgYWxzbyBjYXJlZnVsIHRvIHRyZWF0IFwiXFxyXFxuXCIgaW4gdGhlIGlucHV0IGFzIGFuIGVuZCBvZiBsaW5lIG1hcmtlcjpcbiAgIGl0IGFsd2F5cyBtYXRjaGVzIGEgJ1xcbicgc3BlY2lmaWNhdGlvbiBpbiB0aGUgaW5wdXQgZm9ybWF0IHN0cmluZy4gKilcbmxldCByZWMgY2hlY2tfY2hhciBpYiBjID1cbiAgbWF0Y2ggYyB3aXRoXG4gIHwgJyAnIC0+IHNraXBfd2hpdGVzIGliXG4gIHwgJ1xcbicgLT4gY2hlY2tfbmV3bGluZSBpYlxuICB8IGMgLT4gY2hlY2tfdGhpc19jaGFyIGliIGNcblxuYW5kIGNoZWNrX3RoaXNfY2hhciBpYiBjID1cbiAgbGV0IGNpID0gU2Nhbm5pbmcuY2hlY2tlZF9wZWVrX2NoYXIgaWIgaW5cbiAgaWYgY2kgPSBjIHRoZW4gU2Nhbm5pbmcuaW52YWxpZGF0ZV9jdXJyZW50X2NoYXIgaWIgZWxzZVxuICBjaGFyYWN0ZXJfbWlzbWF0Y2ggYyBjaVxuXG5hbmQgY2hlY2tfbmV3bGluZSBpYiA9XG4gIGxldCBjaSA9IFNjYW5uaW5nLmNoZWNrZWRfcGVla19jaGFyIGliIGluXG4gIG1hdGNoIGNpIHdpdGhcbiAgfCAnXFxuJyAtPiBTY2FubmluZy5pbnZhbGlkYXRlX2N1cnJlbnRfY2hhciBpYlxuICB8ICdcXHInIC0+IFNjYW5uaW5nLmludmFsaWRhdGVfY3VycmVudF9jaGFyIGliOyBjaGVja190aGlzX2NoYXIgaWIgJ1xcbidcbiAgfCBfIC0+IGNoYXJhY3Rlcl9taXNtYXRjaCAnXFxuJyBjaVxuXG5cbigqIEV4dHJhY3RpbmcgdG9rZW5zIGZyb20gdGhlIG91dHB1dCB0b2tlbiBidWZmZXIuICopXG5cbmxldCB0b2tlbl9jaGFyIGliID0gKFNjYW5uaW5nLnRva2VuIGliKS5bMF1cblxubGV0IHRva2VuX3N0cmluZyA9IFNjYW5uaW5nLnRva2VuXG5cbmxldCB0b2tlbl9ib29sIGliID1cbiAgbWF0Y2ggU2Nhbm5pbmcudG9rZW4gaWIgd2l0aFxuICB8IFwidHJ1ZVwiIC0+IHRydWVcbiAgfCBcImZhbHNlXCIgLT4gZmFsc2VcbiAgfCBzIC0+IGJhZF9pbnB1dCAoUHJpbnRmLnNwcmludGYgXCJpbnZhbGlkIGJvb2xlYW4gJyVzJ1wiIHMpXG5cblxuKCogVGhlIHR5cGUgb2YgaW50ZWdlciBjb252ZXJzaW9ucy4gKilcbnR5cGUgaW50ZWdlcl9jb252ZXJzaW9uID1cbiAgfCBCX2NvbnZlcnNpb24gKCogVW5zaWduZWQgYmluYXJ5IGNvbnZlcnNpb24gKilcbiAgfCBEX2NvbnZlcnNpb24gKCogU2lnbmVkIGRlY2ltYWwgY29udmVyc2lvbiAqKVxuICB8IElfY29udmVyc2lvbiAoKiBTaWduZWQgaW50ZWdlciBjb252ZXJzaW9uICopXG4gIHwgT19jb252ZXJzaW9uICgqIFVuc2lnbmVkIG9jdGFsIGNvbnZlcnNpb24gKilcbiAgfCBVX2NvbnZlcnNpb24gKCogVW5zaWduZWQgZGVjaW1hbCBjb252ZXJzaW9uICopXG4gIHwgWF9jb252ZXJzaW9uICgqIFVuc2lnbmVkIGhleGFkZWNpbWFsIGNvbnZlcnNpb24gKilcblxuXG5sZXQgaW50ZWdlcl9jb252ZXJzaW9uX29mX2NoYXIgPSBmdW5jdGlvblxuICB8ICdiJyAtPiBCX2NvbnZlcnNpb25cbiAgfCAnZCcgLT4gRF9jb252ZXJzaW9uXG4gIHwgJ2knIC0+IElfY29udmVyc2lvblxuICB8ICdvJyAtPiBPX2NvbnZlcnNpb25cbiAgfCAndScgLT4gVV9jb252ZXJzaW9uXG4gIHwgJ3gnIHwgJ1gnIC0+IFhfY29udmVyc2lvblxuICB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cblxuKCogRXh0cmFjdCBhbiBpbnRlZ2VyIGxpdGVyYWwgdG9rZW4uXG4gICBTaW5jZSB0aGUgZnVuY3Rpb25zIFN0ZGxpYi4qaW50Kl9vZl9zdHJpbmcgZG8gbm90IGFjY2VwdCBhIGxlYWRpbmcgKyxcbiAgIHdlIHNraXAgaXQgaWYgbmVjZXNzYXJ5LiAqKVxubGV0IHRva2VuX2ludF9saXRlcmFsIGNvbnYgaWIgPVxuICBsZXQgdG9rID1cbiAgICBtYXRjaCBjb252IHdpdGhcbiAgICB8IERfY29udmVyc2lvbiB8IElfY29udmVyc2lvbiAtPiBTY2FubmluZy50b2tlbiBpYlxuICAgIHwgVV9jb252ZXJzaW9uIC0+IFwiMHVcIiBeIFNjYW5uaW5nLnRva2VuIGliXG4gICAgfCBPX2NvbnZlcnNpb24gLT4gXCIwb1wiIF4gU2Nhbm5pbmcudG9rZW4gaWJcbiAgICB8IFhfY29udmVyc2lvbiAtPiBcIjB4XCIgXiBTY2FubmluZy50b2tlbiBpYlxuICAgIHwgQl9jb252ZXJzaW9uIC0+IFwiMGJcIiBeIFNjYW5uaW5nLnRva2VuIGliIGluXG4gIGxldCBsID0gU3RyaW5nLmxlbmd0aCB0b2sgaW5cbiAgaWYgbCA9IDAgfHwgdG9rLlswXSA8PiAnKycgdGhlbiB0b2sgZWxzZSBTdHJpbmcuc3ViIHRvayAxIChsIC0gMSlcblxuXG4oKiBBbGwgdGhlIGZ1bmN0aW9ucyB0aGF0IGNvbnZlcnQgYSBzdHJpbmcgdG8gYSBudW1iZXIgcmFpc2UgdGhlIGV4Y2VwdGlvblxuICAgRmFpbHVyZSB3aGVuIHRoZSBjb252ZXJzaW9uIGlzIG5vdCBwb3NzaWJsZS5cbiAgIFRoaXMgZXhjZXB0aW9uIGlzIHRoZW4gdHJhcHBlZCBpbiBba3NjYW5mXS4gKilcbmxldCB0b2tlbl9pbnQgY29udiBpYiA9IGludF9vZl9zdHJpbmcgKHRva2VuX2ludF9saXRlcmFsIGNvbnYgaWIpXG5cbmxldCB0b2tlbl9mbG9hdCBpYiA9IGZsb2F0X29mX3N0cmluZyAoU2Nhbm5pbmcudG9rZW4gaWIpXG5cbigqIFRvIHNjYW4gbmF0aXZlIGludHMsIGludDMyIGFuZCBpbnQ2NCBpbnRlZ2Vycy5cbiAgIFdlIGNhbm5vdCBhY2Nlc3MgdG8gY29udmVyc2lvbnMgdG8vZnJvbSBzdHJpbmdzIGZvciB0aG9zZSB0eXBlcyxcbiAgIE5hdGl2ZWludC5vZl9zdHJpbmcsIEludDMyLm9mX3N0cmluZywgYW5kIEludDY0Lm9mX3N0cmluZyxcbiAgIHNpbmNlIHRob3NlIG1vZHVsZXMgYXJlIG5vdCBhdmFpbGFibGUgdG8gW1NjYW5mXS5cbiAgIEhvd2V2ZXIsIHdlIGNhbiBiaW5kIGFuZCB1c2UgdGhlIGNvcnJlc3BvbmRpbmcgcHJpbWl0aXZlcyB0aGF0IGFyZVxuICAgYXZhaWxhYmxlIGluIHRoZSBydW50aW1lLiAqKVxuZXh0ZXJuYWwgbmF0aXZlaW50X29mX3N0cmluZyA6IHN0cmluZyAtPiBuYXRpdmVpbnRcbiAgPSBcImNhbWxfbmF0aXZlaW50X29mX3N0cmluZ1wiXG5cbmV4dGVybmFsIGludDMyX29mX3N0cmluZyA6IHN0cmluZyAtPiBpbnQzMlxuICA9IFwiY2FtbF9pbnQzMl9vZl9zdHJpbmdcIlxuXG5leHRlcm5hbCBpbnQ2NF9vZl9zdHJpbmcgOiBzdHJpbmcgLT4gaW50NjRcbiAgPSBcImNhbWxfaW50NjRfb2Zfc3RyaW5nXCJcblxuXG5sZXQgdG9rZW5fbmF0aXZlaW50IGNvbnYgaWIgPSBuYXRpdmVpbnRfb2Zfc3RyaW5nICh0b2tlbl9pbnRfbGl0ZXJhbCBjb252IGliKVxubGV0IHRva2VuX2ludDMyIGNvbnYgaWIgPSBpbnQzMl9vZl9zdHJpbmcgKHRva2VuX2ludF9saXRlcmFsIGNvbnYgaWIpXG5sZXQgdG9rZW5faW50NjQgY29udiBpYiA9IGludDY0X29mX3N0cmluZyAodG9rZW5faW50X2xpdGVyYWwgY29udiBpYilcblxuKCogU2Nhbm5pbmcgbnVtYmVycy4gKilcblxuKCogRGlnaXRzIHNjYW5uaW5nIGZ1bmN0aW9ucyBzdXBwb3NlIHRoYXQgb25lIGNoYXJhY3RlciBoYXMgYmVlbiBjaGVja2VkIGFuZFxuICAgaXMgYXZhaWxhYmxlLCBzaW5jZSB0aGV5IHJldHVybiBhdCBlbmQgb2YgZmlsZSB3aXRoIHRoZSBjdXJyZW50bHkgZm91bmRcbiAgIHRva2VuIHNlbGVjdGVkLlxuXG4gICBQdXQgaXQgaW4gYW5vdGhlciB3YXksIHRoZSBkaWdpdHMgc2Nhbm5pbmcgZnVuY3Rpb25zIHNjYW4gZm9yIGEgcG9zc2libHlcbiAgIGVtcHR5IHNlcXVlbmNlIG9mIGRpZ2l0cywgKGhlbmNlLCBhIHN1Y2Nlc3NmdWwgc2Nhbm5pbmcgZnJvbSBvbmUgb2YgdGhvc2VcbiAgIGZ1bmN0aW9ucyBkb2VzIG5vdCBpbXBseSB0aGF0IHRoZSB0b2tlbiBpcyBhIHdlbGwtZm9ybWVkIG51bWJlcjogdG8gZ2V0IGFcbiAgIHRydWUgbnVtYmVyLCBpdCBpcyBtYW5kYXRvcnkgdG8gY2hlY2sgdGhhdCBhdCBsZWFzdCBvbmUgdmFsaWQgZGlnaXQgaXNcbiAgIGF2YWlsYWJsZSBiZWZvcmUgY2FsbGluZyBvbmUgb2YgdGhlIGRpZ2l0IHNjYW5uaW5nIGZ1bmN0aW9ucykuICopXG5cbigqIFRoZSBkZWNpbWFsIGNhc2UgaXMgdHJlYXRlZCBlc3BlY2lhbGx5IGZvciBvcHRpbWl6YXRpb24gcHVycG9zZXMuICopXG5sZXQgcmVjIHNjYW5fZGVjaW1hbF9kaWdpdF9zdGFyIHdpZHRoIGliID1cbiAgaWYgd2lkdGggPSAwIHRoZW4gd2lkdGggZWxzZVxuICBsZXQgYyA9IFNjYW5uaW5nLnBlZWtfY2hhciBpYiBpblxuICBpZiBTY2FubmluZy5lb2YgaWIgdGhlbiB3aWR0aCBlbHNlXG4gIG1hdGNoIGMgd2l0aFxuICB8ICcwJyAuLiAnOScgYXMgYyAtPlxuICAgIGxldCB3aWR0aCA9IFNjYW5uaW5nLnN0b3JlX2NoYXIgd2lkdGggaWIgYyBpblxuICAgIHNjYW5fZGVjaW1hbF9kaWdpdF9zdGFyIHdpZHRoIGliXG4gIHwgJ18nIC0+XG4gICAgbGV0IHdpZHRoID0gU2Nhbm5pbmcuaWdub3JlX2NoYXIgd2lkdGggaWIgaW5cbiAgICBzY2FuX2RlY2ltYWxfZGlnaXRfc3RhciB3aWR0aCBpYlxuICB8IF8gLT4gd2lkdGhcblxuXG5sZXQgc2Nhbl9kZWNpbWFsX2RpZ2l0X3BsdXMgd2lkdGggaWIgPVxuICBpZiB3aWR0aCA9IDAgdGhlbiBiYWRfdG9rZW5fbGVuZ3RoIFwiZGVjaW1hbCBkaWdpdHNcIiBlbHNlXG4gIGxldCBjID0gU2Nhbm5pbmcuY2hlY2tlZF9wZWVrX2NoYXIgaWIgaW5cbiAgbWF0Y2ggYyB3aXRoXG4gIHwgJzAnIC4uICc5JyAtPlxuICAgIGxldCB3aWR0aCA9IFNjYW5uaW5nLnN0b3JlX2NoYXIgd2lkdGggaWIgYyBpblxuICAgIHNjYW5fZGVjaW1hbF9kaWdpdF9zdGFyIHdpZHRoIGliXG4gIHwgYyAtPlxuICAgIGJhZF9pbnB1dCAoUHJpbnRmLnNwcmludGYgXCJjaGFyYWN0ZXIgJUMgaXMgbm90IGEgZGVjaW1hbCBkaWdpdFwiIGMpXG5cblxuKCogVG8gc2NhbiBudW1iZXJzIGZyb20gb3RoZXIgYmFzZXMsIHdlIHVzZSBhIHByZWRpY2F0ZSBhcmd1bWVudCB0b1xuICAgc2NhbiBkaWdpdHMuICopXG5sZXQgc2Nhbl9kaWdpdF9zdGFyIGRpZ2l0cCB3aWR0aCBpYiA9XG4gIGxldCByZWMgc2Nhbl9kaWdpdHMgd2lkdGggaWIgPVxuICAgIGlmIHdpZHRoID0gMCB0aGVuIHdpZHRoIGVsc2VcbiAgICBsZXQgYyA9IFNjYW5uaW5nLnBlZWtfY2hhciBpYiBpblxuICAgIGlmIFNjYW5uaW5nLmVvZiBpYiB0aGVuIHdpZHRoIGVsc2VcbiAgICBtYXRjaCBjIHdpdGhcbiAgICB8IGMgd2hlbiBkaWdpdHAgYyAtPlxuICAgICAgbGV0IHdpZHRoID0gU2Nhbm5pbmcuc3RvcmVfY2hhciB3aWR0aCBpYiBjIGluXG4gICAgICBzY2FuX2RpZ2l0cyB3aWR0aCBpYlxuICAgIHwgJ18nIC0+XG4gICAgICBsZXQgd2lkdGggPSBTY2FubmluZy5pZ25vcmVfY2hhciB3aWR0aCBpYiBpblxuICAgICAgc2Nhbl9kaWdpdHMgd2lkdGggaWJcbiAgICB8IF8gLT4gd2lkdGggaW5cbiAgc2Nhbl9kaWdpdHMgd2lkdGggaWJcblxuXG5sZXQgc2Nhbl9kaWdpdF9wbHVzIGJhc2lzIGRpZ2l0cCB3aWR0aCBpYiA9XG4gICgqIEVuc3VyZSB3ZSBoYXZlIGdvdCBlbm91Z2ggd2lkdGggbGVmdCxcbiAgICAgYW5kIHJlYWQgYXQgbGVhc3Qgb25lIGRpZ2l0LiAqKVxuICBpZiB3aWR0aCA9IDAgdGhlbiBiYWRfdG9rZW5fbGVuZ3RoIFwiZGlnaXRzXCIgZWxzZVxuICBsZXQgYyA9IFNjYW5uaW5nLmNoZWNrZWRfcGVla19jaGFyIGliIGluXG4gIGlmIGRpZ2l0cCBjIHRoZW5cbiAgICBsZXQgd2lkdGggPSBTY2FubmluZy5zdG9yZV9jaGFyIHdpZHRoIGliIGMgaW5cbiAgICBzY2FuX2RpZ2l0X3N0YXIgZGlnaXRwIHdpZHRoIGliXG4gIGVsc2VcbiAgICBiYWRfaW5wdXQgKFByaW50Zi5zcHJpbnRmIFwiY2hhcmFjdGVyICVDIGlzIG5vdCBhIHZhbGlkICVzIGRpZ2l0XCIgYyBiYXNpcylcblxuXG5sZXQgaXNfYmluYXJ5X2RpZ2l0ID0gZnVuY3Rpb25cbiAgfCAnMCcgLi4gJzEnIC0+IHRydWVcbiAgfCBfIC0+IGZhbHNlXG5cblxubGV0IHNjYW5fYmluYXJ5X2ludCA9IHNjYW5fZGlnaXRfcGx1cyBcImJpbmFyeVwiIGlzX2JpbmFyeV9kaWdpdFxuXG5sZXQgaXNfb2N0YWxfZGlnaXQgPSBmdW5jdGlvblxuICB8ICcwJyAuLiAnNycgLT4gdHJ1ZVxuICB8IF8gLT4gZmFsc2VcblxuXG5sZXQgc2Nhbl9vY3RhbF9pbnQgPSBzY2FuX2RpZ2l0X3BsdXMgXCJvY3RhbFwiIGlzX29jdGFsX2RpZ2l0XG5cbmxldCBpc19oZXhhX2RpZ2l0ID0gZnVuY3Rpb25cbiAgfCAnMCcgLi4gJzknIHwgJ2EnIC4uICdmJyB8ICdBJyAuLiAnRicgLT4gdHJ1ZVxuICB8IF8gLT4gZmFsc2VcblxuXG5sZXQgc2Nhbl9oZXhhZGVjaW1hbF9pbnQgPSBzY2FuX2RpZ2l0X3BsdXMgXCJoZXhhZGVjaW1hbFwiIGlzX2hleGFfZGlnaXRcblxuKCogU2NhbiBhIGRlY2ltYWwgaW50ZWdlci4gKilcbmxldCBzY2FuX3Vuc2lnbmVkX2RlY2ltYWxfaW50ID0gc2Nhbl9kZWNpbWFsX2RpZ2l0X3BsdXNcblxubGV0IHNjYW5fc2lnbiB3aWR0aCBpYiA9XG4gIGxldCBjID0gU2Nhbm5pbmcuY2hlY2tlZF9wZWVrX2NoYXIgaWIgaW5cbiAgbWF0Y2ggYyB3aXRoXG4gIHwgJysnIC0+IFNjYW5uaW5nLnN0b3JlX2NoYXIgd2lkdGggaWIgY1xuICB8ICctJyAtPiBTY2FubmluZy5zdG9yZV9jaGFyIHdpZHRoIGliIGNcbiAgfCBfIC0+IHdpZHRoXG5cblxubGV0IHNjYW5fb3B0aW9uYWxseV9zaWduZWRfZGVjaW1hbF9pbnQgd2lkdGggaWIgPVxuICBsZXQgd2lkdGggPSBzY2FuX3NpZ24gd2lkdGggaWIgaW5cbiAgc2Nhbl91bnNpZ25lZF9kZWNpbWFsX2ludCB3aWR0aCBpYlxuXG5cbigqIFNjYW4gYW4gdW5zaWduZWQgaW50ZWdlciB0aGF0IGNvdWxkIGJlIGdpdmVuIGluIGFueSAoY29tbW9uKSBiYXNpcy5cbiAgIElmIGRpZ2l0cyBhcmUgcHJlZml4ZWQgYnkgb25lIG9mIDB4LCAwWCwgMG8sIG9yIDBiLCB0aGUgbnVtYmVyIGlzXG4gICBhc3N1bWVkIHRvIGJlIHdyaXR0ZW4gcmVzcGVjdGl2ZWx5IGluIGhleGFkZWNpbWFsLCBoZXhhZGVjaW1hbCxcbiAgIG9jdGFsLCBvciBiaW5hcnkuICopXG5sZXQgc2Nhbl91bnNpZ25lZF9pbnQgd2lkdGggaWIgPVxuICBtYXRjaCBTY2FubmluZy5jaGVja2VkX3BlZWtfY2hhciBpYiB3aXRoXG4gIHwgJzAnIGFzIGMgLT5cbiAgICBsZXQgd2lkdGggPSBTY2FubmluZy5zdG9yZV9jaGFyIHdpZHRoIGliIGMgaW5cbiAgICBpZiB3aWR0aCA9IDAgdGhlbiB3aWR0aCBlbHNlXG4gICAgbGV0IGMgPSBTY2FubmluZy5wZWVrX2NoYXIgaWIgaW5cbiAgICBpZiBTY2FubmluZy5lb2YgaWIgdGhlbiB3aWR0aCBlbHNlXG4gICAgYmVnaW4gbWF0Y2ggYyB3aXRoXG4gICAgfCAneCcgfCAnWCcgLT4gc2Nhbl9oZXhhZGVjaW1hbF9pbnQgKFNjYW5uaW5nLnN0b3JlX2NoYXIgd2lkdGggaWIgYykgaWJcbiAgICB8ICdvJyAtPiBzY2FuX29jdGFsX2ludCAoU2Nhbm5pbmcuc3RvcmVfY2hhciB3aWR0aCBpYiBjKSBpYlxuICAgIHwgJ2InIC0+IHNjYW5fYmluYXJ5X2ludCAoU2Nhbm5pbmcuc3RvcmVfY2hhciB3aWR0aCBpYiBjKSBpYlxuICAgIHwgXyAtPiBzY2FuX2RlY2ltYWxfZGlnaXRfc3RhciB3aWR0aCBpYiBlbmRcbiAgfCBfIC0+IHNjYW5fdW5zaWduZWRfZGVjaW1hbF9pbnQgd2lkdGggaWJcblxuXG5sZXQgc2Nhbl9vcHRpb25hbGx5X3NpZ25lZF9pbnQgd2lkdGggaWIgPVxuICBsZXQgd2lkdGggPSBzY2FuX3NpZ24gd2lkdGggaWIgaW5cbiAgc2Nhbl91bnNpZ25lZF9pbnQgd2lkdGggaWJcblxuXG5sZXQgc2Nhbl9pbnRfY29udmVyc2lvbiBjb252IHdpZHRoIGliID1cbiAgbWF0Y2ggY29udiB3aXRoXG4gIHwgQl9jb252ZXJzaW9uIC0+IHNjYW5fYmluYXJ5X2ludCB3aWR0aCBpYlxuICB8IERfY29udmVyc2lvbiAtPiBzY2FuX29wdGlvbmFsbHlfc2lnbmVkX2RlY2ltYWxfaW50IHdpZHRoIGliXG4gIHwgSV9jb252ZXJzaW9uIC0+IHNjYW5fb3B0aW9uYWxseV9zaWduZWRfaW50IHdpZHRoIGliXG4gIHwgT19jb252ZXJzaW9uIC0+IHNjYW5fb2N0YWxfaW50IHdpZHRoIGliXG4gIHwgVV9jb252ZXJzaW9uIC0+IHNjYW5fdW5zaWduZWRfZGVjaW1hbF9pbnQgd2lkdGggaWJcbiAgfCBYX2NvbnZlcnNpb24gLT4gc2Nhbl9oZXhhZGVjaW1hbF9pbnQgd2lkdGggaWJcblxuXG4oKiBTY2FubmluZyBmbG9hdGluZyBwb2ludCBudW1iZXJzLiAqKVxuXG4oKiBGcmFjdGlvbmFsIHBhcnQgaXMgb3B0aW9uYWwgYW5kIGNhbiBiZSByZWR1Y2VkIHRvIDAgZGlnaXRzLiAqKVxubGV0IHNjYW5fZnJhY3Rpb25hbF9wYXJ0IHdpZHRoIGliID1cbiAgaWYgd2lkdGggPSAwIHRoZW4gd2lkdGggZWxzZVxuICBsZXQgYyA9IFNjYW5uaW5nLnBlZWtfY2hhciBpYiBpblxuICBpZiBTY2FubmluZy5lb2YgaWIgdGhlbiB3aWR0aCBlbHNlXG4gIG1hdGNoIGMgd2l0aFxuICB8ICcwJyAuLiAnOScgYXMgYyAtPlxuICAgIHNjYW5fZGVjaW1hbF9kaWdpdF9zdGFyIChTY2FubmluZy5zdG9yZV9jaGFyIHdpZHRoIGliIGMpIGliXG4gIHwgXyAtPiB3aWR0aFxuXG5cbigqIEV4cCBwYXJ0IGlzIG9wdGlvbmFsIGFuZCBjYW4gYmUgcmVkdWNlZCB0byAwIGRpZ2l0cy4gKilcbmxldCBzY2FuX2V4cG9uZW50X3BhcnQgd2lkdGggaWIgPVxuICBpZiB3aWR0aCA9IDAgdGhlbiB3aWR0aCBlbHNlXG4gIGxldCBjID0gU2Nhbm5pbmcucGVla19jaGFyIGliIGluXG4gIGlmIFNjYW5uaW5nLmVvZiBpYiB0aGVuIHdpZHRoIGVsc2VcbiAgbWF0Y2ggYyB3aXRoXG4gIHwgJ2UnIHwgJ0UnIGFzIGMgLT5cbiAgICBzY2FuX29wdGlvbmFsbHlfc2lnbmVkX2RlY2ltYWxfaW50IChTY2FubmluZy5zdG9yZV9jaGFyIHdpZHRoIGliIGMpIGliXG4gIHwgXyAtPiB3aWR0aFxuXG5cbigqIFNjYW4gdGhlIGludGVnZXIgcGFydCBvZiBhIGZsb2F0aW5nIHBvaW50IG51bWJlciwgKG5vdCB1c2luZyB0aGVcbiAgIE9DYW1sIGxleGljYWwgY29udmVudGlvbiBzaW5jZSB0aGUgaW50ZWdlciBwYXJ0IGNhbiBiZSBlbXB0eSk6XG4gICBhbiBvcHRpb25hbCBzaWduLCBmb2xsb3dlZCBieSBhIHBvc3NpYmx5IGVtcHR5IHNlcXVlbmNlIG9mIGRlY2ltYWxcbiAgIGRpZ2l0cyAoZS5nLiAtLjEpLiAqKVxubGV0IHNjYW5faW50ZWdlcl9wYXJ0IHdpZHRoIGliID1cbiAgbGV0IHdpZHRoID0gc2Nhbl9zaWduIHdpZHRoIGliIGluXG4gIHNjYW5fZGVjaW1hbF9kaWdpdF9zdGFyIHdpZHRoIGliXG5cblxuKCpcbiAgIEZvciB0aGUgdGltZSBiZWluZyB3ZSBoYXZlIChhcyBmb3VuZCBpbiBzY2FuZi5tbGkpOlxuICAgdGhlIGZpZWxkIHdpZHRoIGlzIGNvbXBvc2VkIG9mIGFuIG9wdGlvbmFsIGludGVnZXIgbGl0ZXJhbFxuICAgaW5kaWNhdGluZyB0aGUgbWF4aW1hbCB3aWR0aCBvZiB0aGUgdG9rZW4gdG8gcmVhZC5cbiAgIFVuZm9ydHVuYXRlbHksIHRoZSB0eXBlLWNoZWNrZXIgbGV0IHRoZSB1c2VyIHdyaXRlIGFuIG9wdGlvbmFsIHByZWNpc2lvbixcbiAgIHNpbmNlIHRoaXMgaXMgdmFsaWQgZm9yIHByaW50ZiBmb3JtYXQgc3RyaW5ncy5cblxuICAgVGh1cywgdGhlIG5leHQgc3RlcCBmb3IgU2NhbmYgaXMgdG8gc3VwcG9ydCBhIGZ1bGwgd2lkdGggYW5kIHByZWNpc2lvblxuICAgaW5kaWNhdGlvbiwgbW9yZSBvciBsZXNzIHNpbWlsYXIgdG8gdGhlIG9uZSBmb3IgcHJpbnRmLCBwb3NzaWJseSBleHRlbmRlZFxuICAgdG8gdGhlIHNwZWNpZmljYXRpb24gb2YgYSBbbWF4LCBtaW5dIHJhbmdlIGZvciB0aGUgd2lkdGggb2YgdGhlIHRva2VuIHJlYWRcbiAgIGZvciBzdHJpbmdzLiBTb21ldGhpbmcgbGlrZSB0aGUgZm9sbG93aW5nIHNwZWMgZm9yIHNjYW5mLm1saTpcblxuICAgVGhlIG9wdGlvbmFsIFt3aWR0aF0gaXMgYW4gaW50ZWdlciBpbmRpY2F0aW5nIHRoZSBtYXhpbWFsXG4gICB3aWR0aCBvZiB0aGUgdG9rZW4gcmVhZC4gRm9yIGluc3RhbmNlLCBbJTZkXSByZWFkcyBhbiBpbnRlZ2VyLFxuICAgaGF2aW5nIGF0IG1vc3QgNiBjaGFyYWN0ZXJzLlxuXG4gICBUaGUgb3B0aW9uYWwgW3ByZWNpc2lvbl0gaXMgYSBkb3QgWy5dIGZvbGxvd2VkIGJ5IGFuIGludGVnZXI6XG5cbiAgIC0gaW4gdGhlIGZsb2F0aW5nIHBvaW50IG51bWJlciBjb252ZXJzaW9ucyAoWyVmXSwgWyVlXSwgWyVnXSwgWyVGXSwgWyVFXSxcbiAgIGFuZCBbJUZdIGNvbnZlcnNpb25zLCB0aGUgW3ByZWNpc2lvbl0gaW5kaWNhdGVzIHRoZSBtYXhpbXVtIG51bWJlciBvZlxuICAgZGlnaXRzIHRoYXQgbWF5IGZvbGxvdyB0aGUgZGVjaW1hbCBwb2ludC4gRm9yIGluc3RhbmNlLCBbJS40Zl0gcmVhZHMgYVxuICAgW2Zsb2F0XSB3aXRoIGF0IG1vc3QgNCBmcmFjdGlvbmFsIGRpZ2l0cyxcblxuICAgLSBpbiB0aGUgc3RyaW5nIGNvbnZlcnNpb25zIChbJXNdLCBbJVNdLCBbJVxcWyByYW5nZSBcXF1dKSwgYW5kIGluIHRoZVxuICAgaW50ZWdlciBudW1iZXIgY29udmVyc2lvbnMgKFslaV0sIFslZF0sIFsldV0sIFsleF0sIFslb10sIGFuZCB0aGVpclxuICAgW2ludDMyXSwgW2ludDY0XSwgYW5kIFtuYXRpdmVfaW50XSBjb3JyZXNwb25kZW50KSwgdGhlIFtwcmVjaXNpb25dXG4gICBpbmRpY2F0ZXMgdGhlIHJlcXVpcmVkIG1pbmltdW0gd2lkdGggb2YgdGhlIHRva2VuIHJlYWQsXG5cbiAgIC0gb24gYWxsIG90aGVyIGNvbnZlcnNpb25zLCB0aGUgd2lkdGggYW5kIHByZWNpc2lvbiBzcGVjaWZ5IHRoZSBbbWF4LCBtaW5dXG4gICByYW5nZSBmb3IgdGhlIHdpZHRoIG9mIHRoZSB0b2tlbiByZWFkLlxuKilcbmxldCBzY2FuX2Zsb2F0IHdpZHRoIHByZWNpc2lvbiBpYiA9XG4gIGxldCB3aWR0aCA9IHNjYW5faW50ZWdlcl9wYXJ0IHdpZHRoIGliIGluXG4gIGlmIHdpZHRoID0gMCB0aGVuIHdpZHRoLCBwcmVjaXNpb24gZWxzZVxuICBsZXQgYyA9IFNjYW5uaW5nLnBlZWtfY2hhciBpYiBpblxuICBpZiBTY2FubmluZy5lb2YgaWIgdGhlbiB3aWR0aCwgcHJlY2lzaW9uIGVsc2VcbiAgbWF0Y2ggYyB3aXRoXG4gIHwgJy4nIC0+XG4gICAgbGV0IHdpZHRoID0gU2Nhbm5pbmcuc3RvcmVfY2hhciB3aWR0aCBpYiBjIGluXG4gICAgbGV0IHByZWNpc2lvbiA9IEludC5taW4gd2lkdGggcHJlY2lzaW9uIGluXG4gICAgbGV0IHdpZHRoID0gd2lkdGggLSAocHJlY2lzaW9uIC0gc2Nhbl9mcmFjdGlvbmFsX3BhcnQgcHJlY2lzaW9uIGliKSBpblxuICAgIHNjYW5fZXhwb25lbnRfcGFydCB3aWR0aCBpYiwgcHJlY2lzaW9uXG4gIHwgXyAtPlxuICAgIHNjYW5fZXhwb25lbnRfcGFydCB3aWR0aCBpYiwgcHJlY2lzaW9uXG5cblxubGV0IGNoZWNrX2Nhc2VfaW5zZW5zaXRpdmVfc3RyaW5nIHdpZHRoIGliIGVycm9yIHN0ciA9XG4gIGxldCBsb3dlcmNhc2UgYyA9XG4gICAgbWF0Y2ggYyB3aXRoXG4gICAgfCAnQScgLi4gJ1onIC0+XG4gICAgICBjaGFyX29mX2ludCAoaW50X29mX2NoYXIgYyAtIGludF9vZl9jaGFyICdBJyArIGludF9vZl9jaGFyICdhJylcbiAgICB8IF8gLT4gYyBpblxuICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzdHIgaW5cbiAgbGV0IHdpZHRoID0gcmVmIHdpZHRoIGluXG4gIGZvciBpID0gMCB0byBsZW4gLSAxIGRvXG4gICAgbGV0IGMgPSBTY2FubmluZy5wZWVrX2NoYXIgaWIgaW5cbiAgICBpZiBsb3dlcmNhc2UgYyA8PiBsb3dlcmNhc2Ugc3RyLltpXSB0aGVuIGVycm9yICgpO1xuICAgIGlmICF3aWR0aCA9IDAgdGhlbiBlcnJvciAoKTtcbiAgICB3aWR0aCA6PSBTY2FubmluZy5zdG9yZV9jaGFyICF3aWR0aCBpYiBjO1xuICBkb25lO1xuICAhd2lkdGhcblxuXG5sZXQgc2Nhbl9oZXhfZmxvYXQgd2lkdGggcHJlY2lzaW9uIGliID1cbiAgaWYgd2lkdGggPSAwIHx8IFNjYW5uaW5nLmVuZF9vZl9pbnB1dCBpYiB0aGVuIGJhZF9oZXhfZmxvYXQgKCk7XG4gIGxldCB3aWR0aCA9IHNjYW5fc2lnbiB3aWR0aCBpYiBpblxuICBpZiB3aWR0aCA9IDAgfHwgU2Nhbm5pbmcuZW5kX29mX2lucHV0IGliIHRoZW4gYmFkX2hleF9mbG9hdCAoKTtcbiAgbWF0Y2ggU2Nhbm5pbmcucGVla19jaGFyIGliIHdpdGhcbiAgfCAnMCcgYXMgYyAtPiAoXG4gICAgbGV0IHdpZHRoID0gU2Nhbm5pbmcuc3RvcmVfY2hhciB3aWR0aCBpYiBjIGluXG4gICAgaWYgd2lkdGggPSAwIHx8IFNjYW5uaW5nLmVuZF9vZl9pbnB1dCBpYiB0aGVuIGJhZF9oZXhfZmxvYXQgKCk7XG4gICAgbGV0IHdpZHRoID0gY2hlY2tfY2FzZV9pbnNlbnNpdGl2ZV9zdHJpbmcgd2lkdGggaWIgYmFkX2hleF9mbG9hdCBcInhcIiBpblxuICAgIGlmIHdpZHRoID0gMCB8fCBTY2FubmluZy5lbmRfb2ZfaW5wdXQgaWIgdGhlbiB3aWR0aCBlbHNlXG4gICAgICBsZXQgd2lkdGggPSBtYXRjaCBTY2FubmluZy5wZWVrX2NoYXIgaWIgd2l0aFxuICAgICAgICB8ICcuJyB8ICdwJyB8ICdQJyAtPiB3aWR0aFxuICAgICAgICB8IF8gLT4gc2Nhbl9oZXhhZGVjaW1hbF9pbnQgd2lkdGggaWIgaW5cbiAgICAgIGlmIHdpZHRoID0gMCB8fCBTY2FubmluZy5lbmRfb2ZfaW5wdXQgaWIgdGhlbiB3aWR0aCBlbHNlXG4gICAgICAgIGxldCB3aWR0aCA9IG1hdGNoIFNjYW5uaW5nLnBlZWtfY2hhciBpYiB3aXRoXG4gICAgICAgICAgfCAnLicgYXMgYyAtPiAoXG4gICAgICAgICAgICBsZXQgd2lkdGggPSBTY2FubmluZy5zdG9yZV9jaGFyIHdpZHRoIGliIGMgaW5cbiAgICAgICAgICAgIGlmIHdpZHRoID0gMCB8fCBTY2FubmluZy5lbmRfb2ZfaW5wdXQgaWIgdGhlbiB3aWR0aCBlbHNlXG4gICAgICAgICAgICAgIG1hdGNoIFNjYW5uaW5nLnBlZWtfY2hhciBpYiB3aXRoXG4gICAgICAgICAgICAgIHwgJ3AnIHwgJ1AnIC0+IHdpZHRoXG4gICAgICAgICAgICAgIHwgXyAtPlxuICAgICAgICAgICAgICAgIGxldCBwcmVjaXNpb24gPSBJbnQubWluIHdpZHRoIHByZWNpc2lvbiBpblxuICAgICAgICAgICAgICAgIHdpZHRoIC0gKHByZWNpc2lvbiAtIHNjYW5faGV4YWRlY2ltYWxfaW50IHByZWNpc2lvbiBpYilcbiAgICAgICAgICApXG4gICAgICAgICAgfCBfIC0+IHdpZHRoIGluXG4gICAgICAgIGlmIHdpZHRoID0gMCB8fCBTY2FubmluZy5lbmRfb2ZfaW5wdXQgaWIgdGhlbiB3aWR0aCBlbHNlXG4gICAgICAgICAgbWF0Y2ggU2Nhbm5pbmcucGVla19jaGFyIGliIHdpdGhcbiAgICAgICAgICB8ICdwJyB8ICdQJyBhcyBjIC0+XG4gICAgICAgICAgICBsZXQgd2lkdGggPSBTY2FubmluZy5zdG9yZV9jaGFyIHdpZHRoIGliIGMgaW5cbiAgICAgICAgICAgIGlmIHdpZHRoID0gMCB8fCBTY2FubmluZy5lbmRfb2ZfaW5wdXQgaWIgdGhlbiBiYWRfaGV4X2Zsb2F0ICgpO1xuICAgICAgICAgICAgc2Nhbl9vcHRpb25hbGx5X3NpZ25lZF9kZWNpbWFsX2ludCB3aWR0aCBpYlxuICAgICAgICAgIHwgXyAtPiB3aWR0aFxuICApXG4gIHwgJ24nIHwgJ04nIGFzIGMgLT5cbiAgICBsZXQgd2lkdGggPSBTY2FubmluZy5zdG9yZV9jaGFyIHdpZHRoIGliIGMgaW5cbiAgICBpZiB3aWR0aCA9IDAgfHwgU2Nhbm5pbmcuZW5kX29mX2lucHV0IGliIHRoZW4gYmFkX2hleF9mbG9hdCAoKTtcbiAgICBjaGVja19jYXNlX2luc2Vuc2l0aXZlX3N0cmluZyB3aWR0aCBpYiBiYWRfaGV4X2Zsb2F0IFwiYW5cIlxuICB8ICdpJyB8ICdJJyBhcyBjIC0+XG4gICAgbGV0IHdpZHRoID0gU2Nhbm5pbmcuc3RvcmVfY2hhciB3aWR0aCBpYiBjIGluXG4gICAgaWYgd2lkdGggPSAwIHx8IFNjYW5uaW5nLmVuZF9vZl9pbnB1dCBpYiB0aGVuIGJhZF9oZXhfZmxvYXQgKCk7XG4gICAgY2hlY2tfY2FzZV9pbnNlbnNpdGl2ZV9zdHJpbmcgd2lkdGggaWIgYmFkX2hleF9mbG9hdCBcIm5maW5pdHlcIlxuICB8IF8gLT4gYmFkX2hleF9mbG9hdCAoKVxuXG5cbmxldCBzY2FuX2NhbWxfZmxvYXRfcmVzdCB3aWR0aCBwcmVjaXNpb24gaWIgPVxuICBpZiB3aWR0aCA9IDAgfHwgU2Nhbm5pbmcuZW5kX29mX2lucHV0IGliIHRoZW4gYmFkX2Zsb2F0ICgpO1xuICBsZXQgd2lkdGggPSBzY2FuX2RlY2ltYWxfZGlnaXRfc3RhciB3aWR0aCBpYiBpblxuICBpZiB3aWR0aCA9IDAgfHwgU2Nhbm5pbmcuZW5kX29mX2lucHV0IGliIHRoZW4gYmFkX2Zsb2F0ICgpO1xuICBsZXQgYyA9IFNjYW5uaW5nLnBlZWtfY2hhciBpYiBpblxuICBtYXRjaCBjIHdpdGhcbiAgfCAnLicgLT5cbiAgICBsZXQgd2lkdGggPSBTY2FubmluZy5zdG9yZV9jaGFyIHdpZHRoIGliIGMgaW5cbiAgICAoKiBUaGUgZWZmZWN0aXZlIHdpZHRoIGF2YWlsYWJsZSBmb3Igc2Nhbm5pbmcgdGhlIGZyYWN0aW9uYWwgcGFydCBpc1xuICAgICAgIHRoZSBtaW5pbXVtIG9mIGRlY2xhcmVkIHByZWNpc2lvbiBhbmQgd2lkdGggbGVmdC4gKilcbiAgICBsZXQgcHJlY2lzaW9uID0gSW50Lm1pbiB3aWR0aCBwcmVjaXNpb24gaW5cbiAgICAoKiBBZnRlciBzY2FubmluZyB0aGUgZnJhY3Rpb25hbCBwYXJ0IHdpdGggW3ByZWNpc2lvbl0gcHJvdmlzaW9uYWwgd2lkdGgsXG4gICAgICAgW3dpZHRoX3ByZWNpc2lvbl0gaXMgbGVmdC4gKilcbiAgICBsZXQgd2lkdGhfcHJlY2lzaW9uID0gc2Nhbl9mcmFjdGlvbmFsX3BhcnQgcHJlY2lzaW9uIGliIGluXG4gICAgKCogSGVuY2UsIHNjYW5uaW5nIHRoZSBmcmFjdGlvbmFsIHBhcnQgdG9vayBleGFjdGx5XG4gICAgICAgW3ByZWNpc2lvbiAtIHdpZHRoX3ByZWNpc2lvbl0gY2hhcnMuICopXG4gICAgbGV0IGZyYWNfd2lkdGggPSBwcmVjaXNpb24gLSB3aWR0aF9wcmVjaXNpb24gaW5cbiAgICAoKiBBbmQgbmV3IHByb3Zpc2lvbmFsIHdpZHRoIGlzIFt3aWR0aCAtIHdpZHRoX3ByZWNpc2lvbi4gKilcbiAgICBsZXQgd2lkdGggPSB3aWR0aCAtIGZyYWNfd2lkdGggaW5cbiAgICBzY2FuX2V4cG9uZW50X3BhcnQgd2lkdGggaWJcbiAgfCAnZScgfCAnRScgLT5cbiAgICBzY2FuX2V4cG9uZW50X3BhcnQgd2lkdGggaWJcbiAgfCBfIC0+IGJhZF9mbG9hdCAoKVxuXG5cbmxldCBzY2FuX2NhbWxfZmxvYXQgd2lkdGggcHJlY2lzaW9uIGliID1cbiAgaWYgd2lkdGggPSAwIHx8IFNjYW5uaW5nLmVuZF9vZl9pbnB1dCBpYiB0aGVuIGJhZF9mbG9hdCAoKTtcbiAgbGV0IHdpZHRoID0gc2Nhbl9zaWduIHdpZHRoIGliIGluXG4gIGlmIHdpZHRoID0gMCB8fCBTY2FubmluZy5lbmRfb2ZfaW5wdXQgaWIgdGhlbiBiYWRfZmxvYXQgKCk7XG4gIG1hdGNoIFNjYW5uaW5nLnBlZWtfY2hhciBpYiB3aXRoXG4gIHwgJzAnIGFzIGMgLT4gKFxuICAgIGxldCB3aWR0aCA9IFNjYW5uaW5nLnN0b3JlX2NoYXIgd2lkdGggaWIgYyBpblxuICAgIGlmIHdpZHRoID0gMCB8fCBTY2FubmluZy5lbmRfb2ZfaW5wdXQgaWIgdGhlbiBiYWRfZmxvYXQgKCk7XG4gICAgbWF0Y2ggU2Nhbm5pbmcucGVla19jaGFyIGliIHdpdGhcbiAgICB8ICd4JyB8ICdYJyBhcyBjIC0+IChcbiAgICAgIGxldCB3aWR0aCA9IFNjYW5uaW5nLnN0b3JlX2NoYXIgd2lkdGggaWIgYyBpblxuICAgICAgaWYgd2lkdGggPSAwIHx8IFNjYW5uaW5nLmVuZF9vZl9pbnB1dCBpYiB0aGVuIGJhZF9mbG9hdCAoKTtcbiAgICAgIGxldCB3aWR0aCA9IHNjYW5faGV4YWRlY2ltYWxfaW50IHdpZHRoIGliIGluXG4gICAgICBpZiB3aWR0aCA9IDAgfHwgU2Nhbm5pbmcuZW5kX29mX2lucHV0IGliIHRoZW4gYmFkX2Zsb2F0ICgpO1xuICAgICAgbGV0IHdpZHRoID0gbWF0Y2ggU2Nhbm5pbmcucGVla19jaGFyIGliIHdpdGhcbiAgICAgICAgfCAnLicgYXMgYyAtPiAoXG4gICAgICAgICAgbGV0IHdpZHRoID0gU2Nhbm5pbmcuc3RvcmVfY2hhciB3aWR0aCBpYiBjIGluXG4gICAgICAgICAgaWYgd2lkdGggPSAwIHx8IFNjYW5uaW5nLmVuZF9vZl9pbnB1dCBpYiB0aGVuIHdpZHRoIGVsc2VcbiAgICAgICAgICAgIG1hdGNoIFNjYW5uaW5nLnBlZWtfY2hhciBpYiB3aXRoXG4gICAgICAgICAgICB8ICdwJyB8ICdQJyAtPiB3aWR0aFxuICAgICAgICAgICAgfCBfIC0+XG4gICAgICAgICAgICAgIGxldCBwcmVjaXNpb24gPSBJbnQubWluIHdpZHRoIHByZWNpc2lvbiBpblxuICAgICAgICAgICAgICB3aWR0aCAtIChwcmVjaXNpb24gLSBzY2FuX2hleGFkZWNpbWFsX2ludCBwcmVjaXNpb24gaWIpXG4gICAgICAgIClcbiAgICAgICAgfCAncCcgfCAnUCcgLT4gd2lkdGhcbiAgICAgICAgfCBfIC0+IGJhZF9mbG9hdCAoKSBpblxuICAgICAgaWYgd2lkdGggPSAwIHx8IFNjYW5uaW5nLmVuZF9vZl9pbnB1dCBpYiB0aGVuIHdpZHRoIGVsc2VcbiAgICAgICAgbWF0Y2ggU2Nhbm5pbmcucGVla19jaGFyIGliIHdpdGhcbiAgICAgICAgfCAncCcgfCAnUCcgYXMgYyAtPlxuICAgICAgICAgIGxldCB3aWR0aCA9IFNjYW5uaW5nLnN0b3JlX2NoYXIgd2lkdGggaWIgYyBpblxuICAgICAgICAgIGlmIHdpZHRoID0gMCB8fCBTY2FubmluZy5lbmRfb2ZfaW5wdXQgaWIgdGhlbiBiYWRfaGV4X2Zsb2F0ICgpO1xuICAgICAgICAgIHNjYW5fb3B0aW9uYWxseV9zaWduZWRfZGVjaW1hbF9pbnQgd2lkdGggaWJcbiAgICAgICAgfCBfIC0+IHdpZHRoXG4gICAgKVxuICAgIHwgXyAtPlxuICAgICAgc2Nhbl9jYW1sX2Zsb2F0X3Jlc3Qgd2lkdGggcHJlY2lzaW9uIGliXG4gIClcbiAgfCAnMScgLi4gJzknIGFzIGMgLT5cbiAgICBsZXQgd2lkdGggPSBTY2FubmluZy5zdG9yZV9jaGFyIHdpZHRoIGliIGMgaW5cbiAgICBpZiB3aWR0aCA9IDAgfHwgU2Nhbm5pbmcuZW5kX29mX2lucHV0IGliIHRoZW4gYmFkX2Zsb2F0ICgpO1xuICAgIHNjYW5fY2FtbF9mbG9hdF9yZXN0IHdpZHRoIHByZWNpc2lvbiBpYlxuKCogU3BlY2lhbCBjYXNlIG9mIG5hbiBhbmQgaW5maW5pdHk6XG4gIHwgJ2knIC0+XG4gIHwgJ24nIC0+XG4qKVxuICB8IF8gLT4gYmFkX2Zsb2F0ICgpXG5cblxuKCogU2NhbiBhIHJlZ3VsYXIgc3RyaW5nOlxuICAgc3RvcHMgd2hlbiBlbmNvdW50ZXJpbmcgYSBzcGFjZSwgaWYgbm8gc2Nhbm5pbmcgaW5kaWNhdGlvbiBoYXMgYmVlbiBnaXZlbjtcbiAgIG90aGVyd2lzZSwgc3RvcHMgd2hlbiBlbmNvdW50ZXJpbmcgdGhlIGNoYXJhY3RlcnMgaW4gdGhlIHNjYW5uaW5nXG4gICBpbmRpY2F0aW9uIFtzdHBdLlxuICAgSXQgYWxzbyBzdG9wcyBhdCBlbmQgb2YgZmlsZSBvciB3aGVuIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIGhhc1xuICAgYmVlbiByZWFkLiAqKVxubGV0IHNjYW5fc3RyaW5nIHN0cCB3aWR0aCBpYiA9XG4gIGxldCByZWMgbG9vcCB3aWR0aCA9XG4gICAgaWYgd2lkdGggPSAwIHRoZW4gd2lkdGggZWxzZVxuICAgIGxldCBjID0gU2Nhbm5pbmcucGVla19jaGFyIGliIGluXG4gICAgaWYgU2Nhbm5pbmcuZW9mIGliIHRoZW4gd2lkdGggZWxzZVxuICAgICAgbWF0Y2ggc3RwIHdpdGhcbiAgICAgIHwgU29tZSBjJyB3aGVuIGMgPSBjJyAtPiBTY2FubmluZy5za2lwX2NoYXIgd2lkdGggaWJcbiAgICAgIHwgU29tZSBfIC0+IGxvb3AgKFNjYW5uaW5nLnN0b3JlX2NoYXIgd2lkdGggaWIgYylcbiAgICAgIHwgTm9uZSAtPlxuICAgICAgICBtYXRjaCBjIHdpdGhcbiAgICAgICAgfCAnICcgfCAnXFx0JyB8ICdcXG4nIHwgJ1xccicgLT4gd2lkdGhcbiAgICAgICAgfCBfIC0+IGxvb3AgKFNjYW5uaW5nLnN0b3JlX2NoYXIgd2lkdGggaWIgYykgaW5cbiAgbG9vcCB3aWR0aFxuXG5cbigqIFNjYW4gYSBjaGFyOiBwZWVrIHN0cmljdGx5IG9uZSBjaGFyYWN0ZXIgaW4gdGhlIGlucHV0LCB3aGF0c29ldmVyLiAqKVxubGV0IHNjYW5fY2hhciB3aWR0aCBpYiA9XG4gICgqIFRoZSBjYXNlIHdpZHRoID0gMCBjb3VsZCBub3QgaGFwcGVuIGhlcmUsIHNpbmNlIGl0IGlzIHRlc3RlZCBiZWZvcmVcbiAgICAgY2FsbGluZyBzY2FuX2NoYXIsIGluIHRoZSBtYWluIHNjYW5uaW5nIGZ1bmN0aW9uLlxuICAgIGlmIHdpZHRoID0gMCB0aGVuIGJhZF90b2tlbl9sZW5ndGggXCJhIGNoYXJhY3RlclwiIGVsc2UgKilcbiAgU2Nhbm5pbmcuc3RvcmVfY2hhciB3aWR0aCBpYiAoU2Nhbm5pbmcuY2hlY2tlZF9wZWVrX2NoYXIgaWIpXG5cblxubGV0IGNoYXJfZm9yX2JhY2tzbGFzaCA9IGZ1bmN0aW9uXG4gIHwgJ24nIC0+ICdcXDAxMCdcbiAgfCAncicgLT4gJ1xcMDEzJ1xuICB8ICdiJyAtPiAnXFwwMDgnXG4gIHwgJ3QnIC0+ICdcXDAwOSdcbiAgfCBjIC0+IGNcblxuXG4oKiBUaGUgaW50ZWdlciB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBmYWNpYWwgdmFsdWUgb2YgYSB2YWxpZFxuICAgZGVjaW1hbCBkaWdpdCBjaGFyYWN0ZXIuICopXG5sZXQgZGVjaW1hbF92YWx1ZV9vZl9jaGFyIGMgPSBpbnRfb2ZfY2hhciBjIC0gaW50X29mX2NoYXIgJzAnXG5cbmxldCBjaGFyX2Zvcl9kZWNpbWFsX2NvZGUgYzAgYzEgYzIgPVxuICBsZXQgYyA9XG4gICAgMTAwICogZGVjaW1hbF92YWx1ZV9vZl9jaGFyIGMwICtcbiAgICAgMTAgKiBkZWNpbWFsX3ZhbHVlX29mX2NoYXIgYzEgK1xuICAgICAgICAgIGRlY2ltYWxfdmFsdWVfb2ZfY2hhciBjMiBpblxuICBpZiBjIDwgMCB8fCBjID4gMjU1IHRoZW5cbiAgICBiYWRfaW5wdXRcbiAgICAgIChQcmludGYuc3ByaW50ZlxuICAgICAgICAgXCJiYWQgY2hhcmFjdGVyIGRlY2ltYWwgZW5jb2RpbmcgXFxcXCVjJWMlY1wiIGMwIGMxIGMyKSBlbHNlXG4gIGNoYXJfb2ZfaW50IGNcblxuXG4oKiBUaGUgaW50ZWdlciB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBmYWNpYWwgdmFsdWUgb2YgYSB2YWxpZFxuICAgaGV4YWRlY2ltYWwgZGlnaXQgY2hhcmFjdGVyLiAqKVxubGV0IGhleGFkZWNpbWFsX3ZhbHVlX29mX2NoYXIgYyA9XG4gIGxldCBkID0gaW50X29mX2NoYXIgYyBpblxuICAoKiBDb3VsZCBhbHNvIGJlOlxuICAgIGlmIGQgPD0gaW50X29mX2NoYXIgJzknIHRoZW4gZCAtIGludF9vZl9jaGFyICcwJyBlbHNlXG4gICAgaWYgZCA8PSBpbnRfb2ZfY2hhciAnRicgdGhlbiAxMCArIGQgLSBpbnRfb2ZfY2hhciAnQScgZWxzZVxuICAgIGlmIGQgPD0gaW50X29mX2NoYXIgJ2YnIHRoZW4gMTAgKyBkIC0gaW50X29mX2NoYXIgJ2EnIGVsc2UgYXNzZXJ0IGZhbHNlXG4gICopXG4gIGlmIGQgPj0gaW50X29mX2NoYXIgJ2EnIHRoZW5cbiAgICBkIC0gODcgKCogMTAgKyBpbnRfb2ZfY2hhciBjIC0gaW50X29mX2NoYXIgJ2EnICopIGVsc2VcbiAgaWYgZCA+PSBpbnRfb2ZfY2hhciAnQScgdGhlblxuICAgIGQgLSA1NSAgKCogMTAgKyBpbnRfb2ZfY2hhciBjIC0gaW50X29mX2NoYXIgJ0EnICopIGVsc2VcbiAgICBkIC0gaW50X29mX2NoYXIgJzAnXG5cblxubGV0IGNoYXJfZm9yX2hleGFkZWNpbWFsX2NvZGUgYzEgYzIgPVxuICBsZXQgYyA9XG4gICAgMTYgKiBoZXhhZGVjaW1hbF92YWx1ZV9vZl9jaGFyIGMxICtcbiAgICAgICAgIGhleGFkZWNpbWFsX3ZhbHVlX29mX2NoYXIgYzIgaW5cbiAgaWYgYyA8IDAgfHwgYyA+IDI1NSB0aGVuXG4gICAgYmFkX2lucHV0XG4gICAgICAoUHJpbnRmLnNwcmludGYgXCJiYWQgY2hhcmFjdGVyIGhleGFkZWNpbWFsIGVuY29kaW5nIFxcXFwlYyVjXCIgYzEgYzIpIGVsc2VcbiAgY2hhcl9vZl9pbnQgY1xuXG5cbigqIENhbGxlZCBpbiBwYXJ0aWN1bGFyIHdoZW4gZW5jb3VudGVyaW5nICdcXFxcJyBhcyBzdGFydGVyIG9mIGEgY2hhci5cbiAgIFN0b3BzIGJlZm9yZSB0aGUgY29ycmVzcG9uZGluZyAnXFwnJy4gKilcbmxldCBjaGVja19uZXh0X2NoYXIgbWVzc2FnZSB3aWR0aCBpYiA9XG4gIGlmIHdpZHRoID0gMCB0aGVuIGJhZF90b2tlbl9sZW5ndGggbWVzc2FnZSBlbHNlXG4gIGxldCBjID0gU2Nhbm5pbmcucGVla19jaGFyIGliIGluXG4gIGlmIFNjYW5uaW5nLmVvZiBpYiB0aGVuIGJhZF9lbmRfb2ZfaW5wdXQgbWVzc2FnZSBlbHNlXG4gIGNcblxuXG5sZXQgY2hlY2tfbmV4dF9jaGFyX2Zvcl9jaGFyID0gY2hlY2tfbmV4dF9jaGFyIFwiYSBDaGFyXCJcbmxldCBjaGVja19uZXh0X2NoYXJfZm9yX3N0cmluZyA9IGNoZWNrX25leHRfY2hhciBcImEgU3RyaW5nXCJcblxubGV0IHNjYW5fYmFja3NsYXNoX2NoYXIgd2lkdGggaWIgPVxuICBtYXRjaCBjaGVja19uZXh0X2NoYXJfZm9yX2NoYXIgd2lkdGggaWIgd2l0aFxuICB8ICdcXFxcJyB8ICdcXCcnIHwgJ1xcXCInIHwgJ24nIHwgJ3QnIHwgJ2InIHwgJ3InIGFzIGMgLT5cbiAgICBTY2FubmluZy5zdG9yZV9jaGFyIHdpZHRoIGliIChjaGFyX2Zvcl9iYWNrc2xhc2ggYylcbiAgfCAnMCcgLi4gJzknIGFzIGMgLT5cbiAgICBsZXQgZ2V0X2RpZ2l0ICgpID1cbiAgICAgIGxldCBjID0gU2Nhbm5pbmcubmV4dF9jaGFyIGliIGluXG4gICAgICBtYXRjaCBjIHdpdGhcbiAgICAgIHwgJzAnIC4uICc5JyBhcyBjIC0+IGNcbiAgICAgIHwgYyAtPiBiYWRfaW5wdXRfZXNjYXBlIGMgaW5cbiAgICBsZXQgYzAgPSBjIGluXG4gICAgbGV0IGMxID0gZ2V0X2RpZ2l0ICgpIGluXG4gICAgbGV0IGMyID0gZ2V0X2RpZ2l0ICgpIGluXG4gICAgU2Nhbm5pbmcuc3RvcmVfY2hhciAod2lkdGggLSAyKSBpYiAoY2hhcl9mb3JfZGVjaW1hbF9jb2RlIGMwIGMxIGMyKVxuICB8ICd4JyAtPlxuICAgIGxldCBnZXRfZGlnaXQgKCkgPVxuICAgICAgbGV0IGMgPSBTY2FubmluZy5uZXh0X2NoYXIgaWIgaW5cbiAgICAgIG1hdGNoIGMgd2l0aFxuICAgICAgfCAnMCcgLi4gJzknIHwgJ0EnIC4uICdGJyB8ICdhJyAuLiAnZicgYXMgYyAtPiBjXG4gICAgICB8IGMgLT4gYmFkX2lucHV0X2VzY2FwZSBjIGluXG4gICAgbGV0IGMxID0gZ2V0X2RpZ2l0ICgpIGluXG4gICAgbGV0IGMyID0gZ2V0X2RpZ2l0ICgpIGluXG4gICAgU2Nhbm5pbmcuc3RvcmVfY2hhciAod2lkdGggLSAyKSBpYiAoY2hhcl9mb3JfaGV4YWRlY2ltYWxfY29kZSBjMSBjMilcbiAgfCBjIC0+XG4gICAgYmFkX2lucHV0X2VzY2FwZSBjXG5cblxuKCogU2NhbiBhIGNoYXJhY3RlciAoYW4gT0NhbWwgdG9rZW4pLiAqKVxubGV0IHNjYW5fY2FtbF9jaGFyIHdpZHRoIGliID1cblxuICBsZXQgcmVjIGZpbmRfc3RhcnQgd2lkdGggPVxuICAgIG1hdGNoIFNjYW5uaW5nLmNoZWNrZWRfcGVla19jaGFyIGliIHdpdGhcbiAgICB8ICdcXCcnIC0+IGZpbmRfY2hhciAoU2Nhbm5pbmcuaWdub3JlX2NoYXIgd2lkdGggaWIpXG4gICAgfCBjIC0+IGNoYXJhY3Rlcl9taXNtYXRjaCAnXFwnJyBjXG5cbiAgYW5kIGZpbmRfY2hhciB3aWR0aCA9XG4gICAgbWF0Y2ggY2hlY2tfbmV4dF9jaGFyX2Zvcl9jaGFyIHdpZHRoIGliIHdpdGhcbiAgICB8ICdcXFxcJyAtPlxuICAgICAgZmluZF9zdG9wIChzY2FuX2JhY2tzbGFzaF9jaGFyIChTY2FubmluZy5pZ25vcmVfY2hhciB3aWR0aCBpYikgaWIpXG4gICAgfCBjIC0+XG4gICAgICBmaW5kX3N0b3AgKFNjYW5uaW5nLnN0b3JlX2NoYXIgd2lkdGggaWIgYylcblxuICBhbmQgZmluZF9zdG9wIHdpZHRoID1cbiAgICBtYXRjaCBjaGVja19uZXh0X2NoYXJfZm9yX2NoYXIgd2lkdGggaWIgd2l0aFxuICAgIHwgJ1xcJycgLT4gU2Nhbm5pbmcuaWdub3JlX2NoYXIgd2lkdGggaWJcbiAgICB8IGMgLT4gY2hhcmFjdGVyX21pc21hdGNoICdcXCcnIGMgaW5cblxuICBmaW5kX3N0YXJ0IHdpZHRoXG5cblxuKCogU2NhbiBhIGRlbGltaXRlZCBzdHJpbmcgKGFuIE9DYW1sIHRva2VuKS4gKilcbmxldCBzY2FuX2NhbWxfc3RyaW5nIHdpZHRoIGliID1cblxuICBsZXQgcmVjIGZpbmRfc3RhcnQgd2lkdGggPVxuICAgIG1hdGNoIFNjYW5uaW5nLmNoZWNrZWRfcGVla19jaGFyIGliIHdpdGhcbiAgICB8ICdcXFwiJyAtPiBmaW5kX3N0b3AgKFNjYW5uaW5nLmlnbm9yZV9jaGFyIHdpZHRoIGliKVxuICAgIHwgYyAtPiBjaGFyYWN0ZXJfbWlzbWF0Y2ggJ1xcXCInIGNcblxuICBhbmQgZmluZF9zdG9wIHdpZHRoID1cbiAgICBtYXRjaCBjaGVja19uZXh0X2NoYXJfZm9yX3N0cmluZyB3aWR0aCBpYiB3aXRoXG4gICAgfCAnXFxcIicgLT4gU2Nhbm5pbmcuaWdub3JlX2NoYXIgd2lkdGggaWJcbiAgICB8ICdcXFxcJyAtPiBzY2FuX2JhY2tzbGFzaCAoU2Nhbm5pbmcuaWdub3JlX2NoYXIgd2lkdGggaWIpXG4gICAgfCBjIC0+IGZpbmRfc3RvcCAoU2Nhbm5pbmcuc3RvcmVfY2hhciB3aWR0aCBpYiBjKVxuXG4gIGFuZCBzY2FuX2JhY2tzbGFzaCB3aWR0aCA9XG4gICAgbWF0Y2ggY2hlY2tfbmV4dF9jaGFyX2Zvcl9zdHJpbmcgd2lkdGggaWIgd2l0aFxuICAgIHwgJ1xccicgLT4gc2tpcF9uZXdsaW5lIChTY2FubmluZy5pZ25vcmVfY2hhciB3aWR0aCBpYilcbiAgICB8ICdcXG4nIC0+IHNraXBfc3BhY2VzIChTY2FubmluZy5pZ25vcmVfY2hhciB3aWR0aCBpYilcbiAgICB8IF8gLT4gZmluZF9zdG9wIChzY2FuX2JhY2tzbGFzaF9jaGFyIHdpZHRoIGliKVxuXG4gIGFuZCBza2lwX25ld2xpbmUgd2lkdGggPVxuICAgIG1hdGNoIGNoZWNrX25leHRfY2hhcl9mb3Jfc3RyaW5nIHdpZHRoIGliIHdpdGhcbiAgICB8ICdcXG4nIC0+IHNraXBfc3BhY2VzIChTY2FubmluZy5pZ25vcmVfY2hhciB3aWR0aCBpYilcbiAgICB8IF8gLT4gZmluZF9zdG9wIChTY2FubmluZy5zdG9yZV9jaGFyIHdpZHRoIGliICdcXHInKVxuXG4gIGFuZCBza2lwX3NwYWNlcyB3aWR0aCA9XG4gICAgbWF0Y2ggY2hlY2tfbmV4dF9jaGFyX2Zvcl9zdHJpbmcgd2lkdGggaWIgd2l0aFxuICAgIHwgJyAnIC0+IHNraXBfc3BhY2VzIChTY2FubmluZy5pZ25vcmVfY2hhciB3aWR0aCBpYilcbiAgICB8IF8gLT4gZmluZF9zdG9wIHdpZHRoIGluXG5cbiAgZmluZF9zdGFydCB3aWR0aFxuXG5cbigqIFNjYW4gYSBib29sZWFuIChhbiBPQ2FtbCB0b2tlbikuICopXG5sZXQgc2Nhbl9ib29sIGliID1cbiAgbGV0IGMgPSBTY2FubmluZy5jaGVja2VkX3BlZWtfY2hhciBpYiBpblxuICBsZXQgbSA9XG4gICAgbWF0Y2ggYyB3aXRoXG4gICAgfCAndCcgLT4gNFxuICAgIHwgJ2YnIC0+IDVcbiAgICB8IGMgLT5cbiAgICAgIGJhZF9pbnB1dFxuICAgICAgICAoUHJpbnRmLnNwcmludGYgXCJ0aGUgY2hhcmFjdGVyICVDIGNhbm5vdCBzdGFydCBhIGJvb2xlYW5cIiBjKSBpblxuICBzY2FuX3N0cmluZyBOb25lIG0gaWJcblxuXG4oKiBTY2FuIGEgc3RyaW5nIGNvbnRhaW5pbmcgZWxlbWVudHMgaW4gY2hhcl9zZXQgYW5kIHRlcm1pbmF0ZWQgYnkgc2Nhbl9pbmRpY1xuICAgaWYgcHJvdmlkZWQuICopXG5sZXQgc2Nhbl9jaGFyc19pbl9jaGFyX3NldCBjaGFyX3NldCBzY2FuX2luZGljIHdpZHRoIGliID1cbiAgbGV0IHJlYyBzY2FuX2NoYXJzIGkgc3RwID1cbiAgICBsZXQgYyA9IFNjYW5uaW5nLnBlZWtfY2hhciBpYiBpblxuICAgIGlmIGkgPiAwICYmIG5vdCAoU2Nhbm5pbmcuZW9mIGliKSAmJlxuICAgICAgIGlzX2luX2NoYXJfc2V0IGNoYXJfc2V0IGMgJiZcbiAgICAgICBpbnRfb2ZfY2hhciBjIDw+IHN0cCB0aGVuXG4gICAgICBsZXQgXyA9IFNjYW5uaW5nLnN0b3JlX2NoYXIgbWF4X2ludCBpYiBjIGluXG4gICAgICBzY2FuX2NoYXJzIChpIC0gMSkgc3RwIGluXG4gIG1hdGNoIHNjYW5faW5kaWMgd2l0aFxuICB8IE5vbmUgLT4gc2Nhbl9jaGFycyB3aWR0aCAoLTEpO1xuICB8IFNvbWUgYyAtPlxuICAgIHNjYW5fY2hhcnMgd2lkdGggKGludF9vZl9jaGFyIGMpO1xuICAgIGlmIG5vdCAoU2Nhbm5pbmcuZW9mIGliKSB0aGVuXG4gICAgICBsZXQgY2kgPSBTY2FubmluZy5wZWVrX2NoYXIgaWIgaW5cbiAgICAgIGlmIGMgPSBjaVxuICAgICAgdGhlbiBTY2FubmluZy5pbnZhbGlkYXRlX2N1cnJlbnRfY2hhciBpYlxuICAgICAgZWxzZSBjaGFyYWN0ZXJfbWlzbWF0Y2ggYyBjaVxuXG5cbigqIFRoZSBnbG9iYWwgZXJyb3IgcmVwb3J0IGZ1bmN0aW9uIGZvciBbU2NhbmZdLiAqKVxubGV0IHNjYW5mX2JhZF9pbnB1dCBpYiA9IGZ1bmN0aW9uXG4gIHwgU2Nhbl9mYWlsdXJlIHMgfCBGYWlsdXJlIHMgLT5cbiAgICBsZXQgaSA9IFNjYW5uaW5nLmNoYXJfY291bnQgaWIgaW5cbiAgICBiYWRfaW5wdXQgKFByaW50Zi5zcHJpbnRmIFwic2NhbmY6IGJhZCBpbnB1dCBhdCBjaGFyIG51bWJlciAlaTogJXNcIiBpIHMpXG4gIHwgeCAtPiByYWlzZSB4XG5cblxuKCogR2V0IHRoZSBjb250ZW50IG9mIGEgY291bnRlciBmcm9tIGFuIGlucHV0IGJ1ZmZlci4gKilcbmxldCBnZXRfY291bnRlciBpYiBjb3VudGVyID1cbiAgbWF0Y2ggY291bnRlciB3aXRoXG4gIHwgTGluZV9jb3VudGVyIC0+IFNjYW5uaW5nLmxpbmVfY291bnQgaWJcbiAgfCBDaGFyX2NvdW50ZXIgLT4gU2Nhbm5pbmcuY2hhcl9jb3VudCBpYlxuICB8IFRva2VuX2NvdW50ZXIgLT4gU2Nhbm5pbmcudG9rZW5fY291bnQgaWJcblxuXG4oKiBDb21wdXRlIHRoZSB3aWR0aCBvZiBhIHBhZGRpbmcgb3B0aW9uIChzZWUgXCIlNDJ7XCIgYW5kIFwiJTEyMyhcIikuICopXG5sZXQgd2lkdGhfb2ZfcGFkX29wdCBwYWRfb3B0ID0gbWF0Y2ggcGFkX29wdCB3aXRoXG4gIHwgTm9uZSAtPiBtYXhfaW50XG4gIHwgU29tZSB3aWR0aCAtPiB3aWR0aFxuXG5cbmxldCBzdG9wcGVyX29mX2Zvcm1hdHRpbmdfbGl0IGZtdGluZyA9XG4gIGlmIGZtdGluZyA9IEVzY2FwZWRfcGVyY2VudCB0aGVuICclJywgXCJcIiBlbHNlXG4gICAgbGV0IHN0ciA9IHN0cmluZ19vZl9mb3JtYXR0aW5nX2xpdCBmbXRpbmcgaW5cbiAgICBsZXQgc3RwID0gc3RyLlsxXSBpblxuICAgIGxldCBzdWJfc3RyID0gU3RyaW5nLnN1YiBzdHIgMiAoU3RyaW5nLmxlbmd0aCBzdHIgLSAyKSBpblxuICAgIHN0cCwgc3ViX3N0clxuXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBSZWFkZXIgbWFuYWdlbWVudCAqKVxuXG4oKiBBIGNhbGwgdG8gdGFrZV9mb3JtYXRfcmVhZGVycyBvbiBhIGZvcm1hdCBpcyBldmFsdWF0ZWQgaW50byBmdW5jdGlvbnNcbiAgIHRha2luZyByZWFkZXJzIGFzIGFyZ3VtZW50cyBhbmQgYWdncmVnYXRlIHRoZW0gaW50byBhbiBoZXRlcm9nZW5lb3VzIGxpc3QgKilcbigqIFdoZW4gYWxsIHJlYWRlcnMgYXJlIHRha2VuLCBmaW5hbGx5IHBhc3MgdGhlIGxpc3Qgb2YgdGhlIHJlYWRlcnMgdG8gdGhlXG4gICBjb250aW51YXRpb24gay4gKilcbmxldCByZWMgdGFrZV9mb3JtYXRfcmVhZGVycyA6IHR5cGUgYSBjIGQgZSBmIC5cbiAgICAoKGQsIGUpIGhldGVyX2xpc3QgLT4gZSkgLT4gKGEsIFNjYW5uaW5nLmluX2NoYW5uZWwsIGMsIGQsIGUsIGYpIGZtdCAtPlxuICAgIGQgPVxuZnVuIGsgZm10IC0+IG1hdGNoIGZtdCB3aXRoXG4gIHwgUmVhZGVyIGZtdF9yZXN0IC0+XG4gICAgZnVuIHJlYWRlciAtPlxuICAgICAgbGV0IG5ld19rIHJlYWRlcnNfcmVzdCA9IGsgKENvbnMgKHJlYWRlciwgcmVhZGVyc19yZXN0KSkgaW5cbiAgICAgIHRha2VfZm9ybWF0X3JlYWRlcnMgbmV3X2sgZm10X3Jlc3RcbiAgfCBDaGFyIHJlc3QgICAgICAgICAgICAgICAgICAgICAgICAtPiB0YWtlX2Zvcm1hdF9yZWFkZXJzIGsgcmVzdFxuICB8IENhbWxfY2hhciByZXN0ICAgICAgICAgICAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayByZXN0XG4gIHwgU3RyaW5nIChfLCByZXN0KSAgICAgICAgICAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIHJlc3RcbiAgfCBDYW1sX3N0cmluZyAoXywgcmVzdCkgICAgICAgICAgICAtPiB0YWtlX2Zvcm1hdF9yZWFkZXJzIGsgcmVzdFxuICB8IEludCAoXywgXywgXywgcmVzdCkgICAgICAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayByZXN0XG4gIHwgSW50MzIgKF8sIF8sIF8sIHJlc3QpICAgICAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIHJlc3RcbiAgfCBOYXRpdmVpbnQgKF8sIF8sIF8sIHJlc3QpICAgICAgICAtPiB0YWtlX2Zvcm1hdF9yZWFkZXJzIGsgcmVzdFxuICB8IEludDY0IChfLCBfLCBfLCByZXN0KSAgICAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayByZXN0XG4gIHwgRmxvYXQgKF8sIF8sIF8sIHJlc3QpICAgICAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIHJlc3RcbiAgfCBCb29sIChfLCByZXN0KSAgICAgICAgICAgICAgICAgICAtPiB0YWtlX2Zvcm1hdF9yZWFkZXJzIGsgcmVzdFxuICB8IEFscGhhIHJlc3QgICAgICAgICAgICAgICAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayByZXN0XG4gIHwgVGhldGEgcmVzdCAgICAgICAgICAgICAgICAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIHJlc3RcbiAgfCBGbHVzaCByZXN0ICAgICAgICAgICAgICAgICAgICAgICAtPiB0YWtlX2Zvcm1hdF9yZWFkZXJzIGsgcmVzdFxuICB8IFN0cmluZ19saXRlcmFsIChfLCByZXN0KSAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayByZXN0XG4gIHwgQ2hhcl9saXRlcmFsIChfLCByZXN0KSAgICAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIHJlc3RcbiAgfCBDdXN0b20gKF8sIF8sIHJlc3QpICAgICAgICAgICAgICAtPiB0YWtlX2Zvcm1hdF9yZWFkZXJzIGsgcmVzdFxuXG4gIHwgU2Nhbl9jaGFyX3NldCAoXywgXywgcmVzdCkgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIHJlc3RcbiAgfCBTY2FuX2dldF9jb3VudGVyIChfLCByZXN0KSAgICAgICAtPiB0YWtlX2Zvcm1hdF9yZWFkZXJzIGsgcmVzdFxuICB8IFNjYW5fbmV4dF9jaGFyIHJlc3QgICAgICAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayByZXN0XG5cbiAgfCBGb3JtYXR0aW5nX2xpdCAoXywgcmVzdCkgICAgICAgICAtPiB0YWtlX2Zvcm1hdF9yZWFkZXJzIGsgcmVzdFxuICB8IEZvcm1hdHRpbmdfZ2VuIChPcGVuX3RhZyAoRm9ybWF0IChmbXQsIF8pKSwgcmVzdCkgLT5cbiAgICAgIHRha2VfZm9ybWF0X3JlYWRlcnMgayAoY29uY2F0X2ZtdCBmbXQgcmVzdClcbiAgfCBGb3JtYXR0aW5nX2dlbiAoT3Blbl9ib3ggKEZvcm1hdCAoZm10LCBfKSksIHJlc3QpIC0+XG4gICAgICB0YWtlX2Zvcm1hdF9yZWFkZXJzIGsgKGNvbmNhdF9mbXQgZm10IHJlc3QpXG5cbiAgfCBGb3JtYXRfYXJnIChfLCBfLCByZXN0KSAgICAgICAgICAtPiB0YWtlX2Zvcm1hdF9yZWFkZXJzIGsgcmVzdFxuICB8IEZvcm1hdF9zdWJzdCAoXywgZm10dHksIHJlc3QpICAgIC0+XG4gICAgIHRha2VfZm10dHlfZm9ybWF0X3JlYWRlcnMgayAoZXJhc2VfcmVsIChzeW1tIGZtdHR5KSkgcmVzdFxuICB8IElnbm9yZWRfcGFyYW0gKGlnbiwgcmVzdCkgICAgICAgIC0+IHRha2VfaWdub3JlZF9mb3JtYXRfcmVhZGVycyBrIGlnbiByZXN0XG5cbiAgfCBFbmRfb2ZfZm9ybWF0ICAgICAgICAgICAgICAgICAgICAtPiBrIE5pbFxuXG4oKiBUYWtlIHJlYWRlcnMgYXNzb2NpYXRlZCB0byBhbiBmbXR0eSBjb21pbmcgZnJvbSBhIEZvcm1hdF9zdWJzdCBcIiUoLi4uJSlcIi4gKilcbmFuZCB0YWtlX2ZtdHR5X2Zvcm1hdF9yZWFkZXJzIDogdHlwZSB4IHkgYSBjIGQgZSBmIC5cbiAgICAoKGQsIGUpIGhldGVyX2xpc3QgLT4gZSkgLT4gKGEsIFNjYW5uaW5nLmluX2NoYW5uZWwsIGMsIGQsIHgsIHkpIGZtdHR5IC0+XG4gICAgICAoeSwgU2Nhbm5pbmcuaW5fY2hhbm5lbCwgYywgeCwgZSwgZikgZm10IC0+IGQgPVxuZnVuIGsgZm10dHkgZm10IC0+IG1hdGNoIGZtdHR5IHdpdGhcbiAgfCBSZWFkZXJfdHkgZm10X3Jlc3QgLT5cbiAgICBmdW4gcmVhZGVyIC0+XG4gICAgICBsZXQgbmV3X2sgcmVhZGVyc19yZXN0ID0gayAoQ29ucyAocmVhZGVyLCByZWFkZXJzX3Jlc3QpKSBpblxuICAgICAgdGFrZV9mbXR0eV9mb3JtYXRfcmVhZGVycyBuZXdfayBmbXRfcmVzdCBmbXRcbiAgfCBJZ25vcmVkX3JlYWRlcl90eSBmbXRfcmVzdCAtPlxuICAgIGZ1biByZWFkZXIgLT5cbiAgICAgIGxldCBuZXdfayByZWFkZXJzX3Jlc3QgPSBrIChDb25zIChyZWFkZXIsIHJlYWRlcnNfcmVzdCkpIGluXG4gICAgICB0YWtlX2ZtdHR5X2Zvcm1hdF9yZWFkZXJzIG5ld19rIGZtdF9yZXN0IGZtdFxuICB8IENoYXJfdHkgcmVzdCAgICAgICAgICAgICAgICAtPiB0YWtlX2ZtdHR5X2Zvcm1hdF9yZWFkZXJzIGsgcmVzdCBmbXRcbiAgfCBTdHJpbmdfdHkgcmVzdCAgICAgICAgICAgICAgLT4gdGFrZV9mbXR0eV9mb3JtYXRfcmVhZGVycyBrIHJlc3QgZm10XG4gIHwgSW50X3R5IHJlc3QgICAgICAgICAgICAgICAgIC0+IHRha2VfZm10dHlfZm9ybWF0X3JlYWRlcnMgayByZXN0IGZtdFxuICB8IEludDMyX3R5IHJlc3QgICAgICAgICAgICAgICAtPiB0YWtlX2ZtdHR5X2Zvcm1hdF9yZWFkZXJzIGsgcmVzdCBmbXRcbiAgfCBOYXRpdmVpbnRfdHkgcmVzdCAgICAgICAgICAgLT4gdGFrZV9mbXR0eV9mb3JtYXRfcmVhZGVycyBrIHJlc3QgZm10XG4gIHwgSW50NjRfdHkgcmVzdCAgICAgICAgICAgICAgIC0+IHRha2VfZm10dHlfZm9ybWF0X3JlYWRlcnMgayByZXN0IGZtdFxuICB8IEZsb2F0X3R5IHJlc3QgICAgICAgICAgICAgICAtPiB0YWtlX2ZtdHR5X2Zvcm1hdF9yZWFkZXJzIGsgcmVzdCBmbXRcbiAgfCBCb29sX3R5IHJlc3QgICAgICAgICAgICAgICAgLT4gdGFrZV9mbXR0eV9mb3JtYXRfcmVhZGVycyBrIHJlc3QgZm10XG4gIHwgQWxwaGFfdHkgcmVzdCAgICAgICAgICAgICAgIC0+IHRha2VfZm10dHlfZm9ybWF0X3JlYWRlcnMgayByZXN0IGZtdFxuICB8IFRoZXRhX3R5IHJlc3QgICAgICAgICAgICAgICAtPiB0YWtlX2ZtdHR5X2Zvcm1hdF9yZWFkZXJzIGsgcmVzdCBmbXRcbiAgfCBBbnlfdHkgcmVzdCAgICAgICAgICAgICAgICAgLT4gdGFrZV9mbXR0eV9mb3JtYXRfcmVhZGVycyBrIHJlc3QgZm10XG4gIHwgRm9ybWF0X2FyZ190eSAoXywgcmVzdCkgICAgIC0+IHRha2VfZm10dHlfZm9ybWF0X3JlYWRlcnMgayByZXN0IGZtdFxuICB8IEVuZF9vZl9mbXR0eSAgICAgICAgICAgICAgICAtPiB0YWtlX2Zvcm1hdF9yZWFkZXJzIGsgZm10XG4gIHwgRm9ybWF0X3N1YnN0X3R5ICh0eTEsIHR5MiwgcmVzdCkgLT5cbiAgICBsZXQgdHkgPSB0cmFucyAoc3ltbSB0eTEpIHR5MiBpblxuICAgIHRha2VfZm10dHlfZm9ybWF0X3JlYWRlcnMgayAoY29uY2F0X2ZtdHR5IHR5IHJlc3QpIGZtdFxuXG4oKiBUYWtlIHJlYWRlcnMgYXNzb2NpYXRlZCB0byBhbiBpZ25vcmVkIHBhcmFtZXRlci4gKilcbmFuZCB0YWtlX2lnbm9yZWRfZm9ybWF0X3JlYWRlcnMgOiB0eXBlIHggeSBhIGMgZCBlIGYgLlxuICAgICgoZCwgZSkgaGV0ZXJfbGlzdCAtPiBlKSAtPiAoYSwgU2Nhbm5pbmcuaW5fY2hhbm5lbCwgYywgZCwgeCwgeSkgaWdub3JlZCAtPlxuICAgICAgKHksIFNjYW5uaW5nLmluX2NoYW5uZWwsIGMsIHgsIGUsIGYpIGZtdCAtPiBkID1cbmZ1biBrIGlnbiBmbXQgLT4gbWF0Y2ggaWduIHdpdGhcbiAgfCBJZ25vcmVkX3JlYWRlciAtPlxuICAgIGZ1biByZWFkZXIgLT5cbiAgICAgIGxldCBuZXdfayByZWFkZXJzX3Jlc3QgPSBrIChDb25zIChyZWFkZXIsIHJlYWRlcnNfcmVzdCkpIGluXG4gICAgICB0YWtlX2Zvcm1hdF9yZWFkZXJzIG5ld19rIGZtdFxuICB8IElnbm9yZWRfY2hhciAgICAgICAgICAgICAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIGZtdFxuICB8IElnbm9yZWRfY2FtbF9jaGFyICAgICAgICAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIGZtdFxuICB8IElnbm9yZWRfc3RyaW5nIF8gICAgICAgICAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIGZtdFxuICB8IElnbm9yZWRfY2FtbF9zdHJpbmcgXyAgICAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIGZtdFxuICB8IElnbm9yZWRfaW50IChfLCBfKSAgICAgICAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIGZtdFxuICB8IElnbm9yZWRfaW50MzIgKF8sIF8pICAgICAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIGZtdFxuICB8IElnbm9yZWRfbmF0aXZlaW50IChfLCBfKSAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIGZtdFxuICB8IElnbm9yZWRfaW50NjQgKF8sIF8pICAgICAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIGZtdFxuICB8IElnbm9yZWRfZmxvYXQgKF8sIF8pICAgICAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIGZtdFxuICB8IElnbm9yZWRfYm9vbCBfICAgICAgICAgICAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIGZtdFxuICB8IElnbm9yZWRfZm9ybWF0X2FyZyBfICAgICAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIGZtdFxuICB8IElnbm9yZWRfZm9ybWF0X3N1YnN0IChfLCBmbXR0eSkgLT4gdGFrZV9mbXR0eV9mb3JtYXRfcmVhZGVycyBrIGZtdHR5IGZtdFxuICB8IElnbm9yZWRfc2Nhbl9jaGFyX3NldCBfICAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIGZtdFxuICB8IElnbm9yZWRfc2Nhbl9nZXRfY291bnRlciBfICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIGZtdFxuICB8IElnbm9yZWRfc2Nhbl9uZXh0X2NoYXIgICAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIGZtdFxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBHZW5lcmljIHNjYW5uaW5nICopXG5cbigqIE1ha2UgYSBnZW5lcmljIHNjYW5uaW5nIGZ1bmN0aW9uLiAqKVxuKCogU2NhbiBhIHN0cmVhbSBhY2NvcmRpbmcgdG8gYSBmb3JtYXQgYW5kIHJlYWRlcnMgb2J0YWluZWQgYnlcbiAgIHRha2VfZm9ybWF0X3JlYWRlcnMsIGFuZCBhZ2dyZWdhdGUgc2Nhbm5lZCB2YWx1ZXMgaW50byBhblxuICAgaGV0ZXJvZ2VuZW91cyBsaXN0LiAqKVxuKCogUmV0dXJuIHRoZSBoZXRlcm9nZW5lb3VzIGxpc3Qgb2Ygc2Nhbm5lZCB2YWx1ZXMuICopXG5sZXQgcmVjIG1ha2Vfc2NhbmYgOiB0eXBlIGEgYyBkIGUgZi5cbiAgICBTY2FubmluZy5pbl9jaGFubmVsIC0+IChhLCBTY2FubmluZy5pbl9jaGFubmVsLCBjLCBkLCBlLCBmKSBmbXQgLT5cbiAgICAgIChkLCBlKSBoZXRlcl9saXN0IC0+IChhLCBmKSBoZXRlcl9saXN0ID1cbmZ1biBpYiBmbXQgcmVhZGVycyAtPiBtYXRjaCBmbXQgd2l0aFxuICB8IENoYXIgcmVzdCAtPlxuICAgIGxldCBfID0gc2Nhbl9jaGFyIDAgaWIgaW5cbiAgICBsZXQgYyA9IHRva2VuX2NoYXIgaWIgaW5cbiAgICBDb25zIChjLCBtYWtlX3NjYW5mIGliIHJlc3QgcmVhZGVycylcbiAgfCBDYW1sX2NoYXIgcmVzdCAtPlxuICAgIGxldCBfID0gc2Nhbl9jYW1sX2NoYXIgMCBpYiBpblxuICAgIGxldCBjID0gdG9rZW5fY2hhciBpYiBpblxuICAgIENvbnMgKGMsIG1ha2Vfc2NhbmYgaWIgcmVzdCByZWFkZXJzKVxuXG4gIHwgU3RyaW5nIChwYWQsIEZvcm1hdHRpbmdfbGl0IChmbXRpbmdfbGl0LCByZXN0KSkgLT5cbiAgICBsZXQgc3RwLCBzdHIgPSBzdG9wcGVyX29mX2Zvcm1hdHRpbmdfbGl0IGZtdGluZ19saXQgaW5cbiAgICBsZXQgc2NhbiB3aWR0aCBfIGliID0gc2Nhbl9zdHJpbmcgKFNvbWUgc3RwKSB3aWR0aCBpYiBpblxuICAgIGxldCBzdHJfcmVzdCA9IFN0cmluZ19saXRlcmFsIChzdHIsIHJlc3QpIGluXG4gICAgcGFkX3ByZWNfc2NhbmYgaWIgc3RyX3Jlc3QgcmVhZGVycyBwYWQgTm9fcHJlY2lzaW9uIHNjYW4gdG9rZW5fc3RyaW5nXG4gIHwgU3RyaW5nIChwYWQsIEZvcm1hdHRpbmdfZ2VuIChPcGVuX3RhZyAoRm9ybWF0IChmbXQnLCBfKSksIHJlc3QpKSAtPlxuICAgIGxldCBzY2FuIHdpZHRoIF8gaWIgPSBzY2FuX3N0cmluZyAoU29tZSAneycpIHdpZHRoIGliIGluXG4gICAgcGFkX3ByZWNfc2NhbmYgaWIgKGNvbmNhdF9mbXQgZm10JyByZXN0KSByZWFkZXJzIHBhZCBOb19wcmVjaXNpb24gc2NhblxuICAgICAgICAgICAgICAgICAgIHRva2VuX3N0cmluZ1xuICB8IFN0cmluZyAocGFkLCBGb3JtYXR0aW5nX2dlbiAoT3Blbl9ib3ggKEZvcm1hdCAoZm10JywgXykpLCByZXN0KSkgLT5cbiAgICBsZXQgc2NhbiB3aWR0aCBfIGliID0gc2Nhbl9zdHJpbmcgKFNvbWUgJ1snKSB3aWR0aCBpYiBpblxuICAgIHBhZF9wcmVjX3NjYW5mIGliIChjb25jYXRfZm10IGZtdCcgcmVzdCkgcmVhZGVycyBwYWQgTm9fcHJlY2lzaW9uIHNjYW5cbiAgICAgICAgICAgICAgICAgICB0b2tlbl9zdHJpbmdcbiAgfCBTdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICBsZXQgc2NhbiB3aWR0aCBfIGliID0gc2Nhbl9zdHJpbmcgTm9uZSB3aWR0aCBpYiBpblxuICAgIHBhZF9wcmVjX3NjYW5mIGliIHJlc3QgcmVhZGVycyBwYWQgTm9fcHJlY2lzaW9uIHNjYW4gdG9rZW5fc3RyaW5nXG5cbiAgfCBDYW1sX3N0cmluZyAocGFkLCByZXN0KSAtPlxuICAgIGxldCBzY2FuIHdpZHRoIF8gaWIgPSBzY2FuX2NhbWxfc3RyaW5nIHdpZHRoIGliIGluXG4gICAgcGFkX3ByZWNfc2NhbmYgaWIgcmVzdCByZWFkZXJzIHBhZCBOb19wcmVjaXNpb24gc2NhbiB0b2tlbl9zdHJpbmdcbiAgfCBJbnQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbGV0IGMgPSBpbnRlZ2VyX2NvbnZlcnNpb25fb2ZfY2hhciAoY2hhcl9vZl9pY29udiBpY29udikgaW5cbiAgICBsZXQgc2NhbiB3aWR0aCBfIGliID0gc2Nhbl9pbnRfY29udmVyc2lvbiBjIHdpZHRoIGliIGluXG4gICAgcGFkX3ByZWNfc2NhbmYgaWIgcmVzdCByZWFkZXJzIHBhZCBwcmVjIHNjYW4gKHRva2VuX2ludCBjKVxuICB8IEludDMyIChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIGxldCBjID0gaW50ZWdlcl9jb252ZXJzaW9uX29mX2NoYXIgKGNoYXJfb2ZfaWNvbnYgaWNvbnYpIGluXG4gICAgbGV0IHNjYW4gd2lkdGggXyBpYiA9IHNjYW5faW50X2NvbnZlcnNpb24gYyB3aWR0aCBpYiBpblxuICAgIHBhZF9wcmVjX3NjYW5mIGliIHJlc3QgcmVhZGVycyBwYWQgcHJlYyBzY2FuICh0b2tlbl9pbnQzMiBjKVxuICB8IE5hdGl2ZWludCAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBsZXQgYyA9IGludGVnZXJfY29udmVyc2lvbl9vZl9jaGFyIChjaGFyX29mX2ljb252IGljb252KSBpblxuICAgIGxldCBzY2FuIHdpZHRoIF8gaWIgPSBzY2FuX2ludF9jb252ZXJzaW9uIGMgd2lkdGggaWIgaW5cbiAgICBwYWRfcHJlY19zY2FuZiBpYiByZXN0IHJlYWRlcnMgcGFkIHByZWMgc2NhbiAodG9rZW5fbmF0aXZlaW50IGMpXG4gIHwgSW50NjQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbGV0IGMgPSBpbnRlZ2VyX2NvbnZlcnNpb25fb2ZfY2hhciAoY2hhcl9vZl9pY29udiBpY29udikgaW5cbiAgICBsZXQgc2NhbiB3aWR0aCBfIGliID0gc2Nhbl9pbnRfY29udmVyc2lvbiBjIHdpZHRoIGliIGluXG4gICAgcGFkX3ByZWNfc2NhbmYgaWIgcmVzdCByZWFkZXJzIHBhZCBwcmVjIHNjYW4gKHRva2VuX2ludDY0IGMpXG4gIHwgRmxvYXQgKChfLCAoRmxvYXRfRiB8IEZsb2F0X0NGKSksIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBwYWRfcHJlY19zY2FuZiBpYiByZXN0IHJlYWRlcnMgcGFkIHByZWMgc2Nhbl9jYW1sX2Zsb2F0IHRva2VuX2Zsb2F0XG4gIHwgRmxvYXQgKChfLCAoRmxvYXRfZiB8IEZsb2F0X2UgfCBGbG9hdF9FIHwgRmxvYXRfZyB8IEZsb2F0X0cpKSxcbiAgICAgICAgICAgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIHBhZF9wcmVjX3NjYW5mIGliIHJlc3QgcmVhZGVycyBwYWQgcHJlYyBzY2FuX2Zsb2F0IHRva2VuX2Zsb2F0XG4gIHwgRmxvYXQgKChfLCAoRmxvYXRfaCB8IEZsb2F0X0gpKSwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIHBhZF9wcmVjX3NjYW5mIGliIHJlc3QgcmVhZGVycyBwYWQgcHJlYyBzY2FuX2hleF9mbG9hdCB0b2tlbl9mbG9hdFxuICB8IEJvb2wgKHBhZCwgcmVzdCkgLT5cbiAgICBsZXQgc2NhbiBfIF8gaWIgPSBzY2FuX2Jvb2wgaWIgaW5cbiAgICBwYWRfcHJlY19zY2FuZiBpYiByZXN0IHJlYWRlcnMgcGFkIE5vX3ByZWNpc2lvbiBzY2FuIHRva2VuX2Jvb2xcbiAgfCBBbHBoYSBfIC0+XG4gICAgaW52YWxpZF9hcmcgXCJzY2FuZjogYmFkIGNvbnZlcnNpb24gXFxcIiVhXFxcIlwiXG4gIHwgVGhldGEgXyAtPlxuICAgIGludmFsaWRfYXJnIFwic2NhbmY6IGJhZCBjb252ZXJzaW9uIFxcXCIldFxcXCJcIlxuICB8IEN1c3RvbSBfIC0+XG4gICAgaW52YWxpZF9hcmcgXCJzY2FuZjogYmFkIGNvbnZlcnNpb24gXFxcIiU/XFxcIiAoY3VzdG9tIGNvbnZlcnRlcilcIlxuICB8IFJlYWRlciBmbXRfcmVzdCAtPlxuICAgIGJlZ2luIG1hdGNoIHJlYWRlcnMgd2l0aFxuICAgIHwgQ29ucyAocmVhZGVyLCByZWFkZXJzX3Jlc3QpIC0+XG4gICAgICAgIGxldCB4ID0gcmVhZGVyIGliIGluXG4gICAgICAgIENvbnMgKHgsIG1ha2Vfc2NhbmYgaWIgZm10X3Jlc3QgcmVhZGVyc19yZXN0KVxuICAgIHwgTmlsIC0+XG4gICAgICAgIGludmFsaWRfYXJnIFwic2NhbmY6IG1pc3NpbmcgcmVhZGVyXCJcbiAgICBlbmRcbiAgfCBGbHVzaCByZXN0IC0+XG4gICAgaWYgU2Nhbm5pbmcuZW5kX29mX2lucHV0IGliIHRoZW4gbWFrZV9zY2FuZiBpYiByZXN0IHJlYWRlcnNcbiAgICBlbHNlIGJhZF9pbnB1dCBcImVuZCBvZiBpbnB1dCBub3QgZm91bmRcIlxuXG4gIHwgU3RyaW5nX2xpdGVyYWwgKHN0ciwgcmVzdCkgLT5cbiAgICBTdHJpbmcuaXRlciAoY2hlY2tfY2hhciBpYikgc3RyO1xuICAgIG1ha2Vfc2NhbmYgaWIgcmVzdCByZWFkZXJzXG4gIHwgQ2hhcl9saXRlcmFsIChjaHIsIHJlc3QpIC0+XG4gICAgY2hlY2tfY2hhciBpYiBjaHI7XG4gICAgbWFrZV9zY2FuZiBpYiByZXN0IHJlYWRlcnNcblxuICB8IEZvcm1hdF9hcmcgKHBhZF9vcHQsIGZtdHR5LCByZXN0KSAtPlxuICAgIGxldCBfID0gc2Nhbl9jYW1sX3N0cmluZyAod2lkdGhfb2ZfcGFkX29wdCBwYWRfb3B0KSBpYiBpblxuICAgIGxldCBzID0gdG9rZW5fc3RyaW5nIGliIGluXG4gICAgbGV0IGZtdCA9XG4gICAgICB0cnkgZm9ybWF0X29mX3N0cmluZ19mbXR0eSBzIGZtdHR5XG4gICAgICB3aXRoIEZhaWx1cmUgbXNnIC0+IGJhZF9pbnB1dCBtc2dcbiAgICBpblxuICAgIENvbnMgKGZtdCwgbWFrZV9zY2FuZiBpYiByZXN0IHJlYWRlcnMpXG4gIHwgRm9ybWF0X3N1YnN0IChwYWRfb3B0LCBmbXR0eSwgcmVzdCkgLT5cbiAgICBsZXQgXyA9IHNjYW5fY2FtbF9zdHJpbmcgKHdpZHRoX29mX3BhZF9vcHQgcGFkX29wdCkgaWIgaW5cbiAgICBsZXQgcyA9IHRva2VuX3N0cmluZyBpYiBpblxuICAgIGxldCBmbXQsIGZtdCcgPVxuICAgICAgdHJ5XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdCA9IGZtdF9lYmJfb2Zfc3RyaW5nIHMgaW5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10JyA9IGZtdF9lYmJfb2Zfc3RyaW5nIHMgaW5cbiAgICAgICAgKCogVE9ETzogZmluZCBhIHdheSB0byBhdm9pZCByZXBhcnNpbmcgdHdpY2UgKilcblxuICAgICAgICAoKiBUT0RPOiB0aGVzZSB0eXBlLWNoZWNrcyBiZWxvdyAqY2FuKiBmYWlsIGJlY2F1c2Ugb2YgdHlwZVxuICAgICAgICAgICBhbWJpZ3VpdHkgaW4gcHJlc2VuY2Ugb2YgaWdub3JlZC1yZWFkZXJzOiBcIiVfciVkXCIgYW5kIFwiJWQlX3JcIlxuICAgICAgICAgICBhcmUgdHlwZWQgaW4gdGhlIHNhbWUgd2F5LlxuXG4gICAgICAgICAgICMgU2NhbmYuc3NjYW5mIFwiXFxcIiVfciVkXFxcIjNcIiBcIiUoJWQlX3IlKVwiIGlnbm9yZVxuICAgICAgICAgICAgIChmdW4gZm10IG4gLT4gc3RyaW5nX29mX2Zvcm1hdCBmbXQsIG4pXG4gICAgICAgICAgIEV4Y2VwdGlvbjogQ2FtbGludGVybmFsRm9ybWF0LlR5cGVfbWlzbWF0Y2guXG5cbiAgICAgICAgICAgV2Ugc2hvdWxkIHByb3Blcmx5IGNhdGNoIHRoaXMgZXhjZXB0aW9uLlxuICAgICAgICAqKVxuICAgICAgICB0eXBlX2Zvcm1hdCBmbXQgKGVyYXNlX3JlbCBmbXR0eSksXG4gICAgICAgIHR5cGVfZm9ybWF0IGZtdCcgKGVyYXNlX3JlbCAoc3ltbSBmbXR0eSkpXG4gICAgICB3aXRoIEZhaWx1cmUgbXNnIC0+IGJhZF9pbnB1dCBtc2dcbiAgICBpblxuICAgIENvbnMgKEZvcm1hdCAoZm10LCBzKSxcbiAgICAgICAgICBtYWtlX3NjYW5mIGliIChjb25jYXRfZm10IGZtdCcgcmVzdCkgcmVhZGVycylcblxuICB8IFNjYW5fY2hhcl9zZXQgKHdpZHRoX29wdCwgY2hhcl9zZXQsIEZvcm1hdHRpbmdfbGl0IChmbXRpbmdfbGl0LCByZXN0KSkgLT5cbiAgICBsZXQgc3RwLCBzdHIgPSBzdG9wcGVyX29mX2Zvcm1hdHRpbmdfbGl0IGZtdGluZ19saXQgaW5cbiAgICBsZXQgd2lkdGggPSB3aWR0aF9vZl9wYWRfb3B0IHdpZHRoX29wdCBpblxuICAgIHNjYW5fY2hhcnNfaW5fY2hhcl9zZXQgY2hhcl9zZXQgKFNvbWUgc3RwKSB3aWR0aCBpYjtcbiAgICBsZXQgcyA9IHRva2VuX3N0cmluZyBpYiBpblxuICAgIGxldCBzdHJfcmVzdCA9IFN0cmluZ19saXRlcmFsIChzdHIsIHJlc3QpIGluXG4gICAgQ29ucyAocywgbWFrZV9zY2FuZiBpYiBzdHJfcmVzdCByZWFkZXJzKVxuICB8IFNjYW5fY2hhcl9zZXQgKHdpZHRoX29wdCwgY2hhcl9zZXQsIHJlc3QpIC0+XG4gICAgbGV0IHdpZHRoID0gd2lkdGhfb2ZfcGFkX29wdCB3aWR0aF9vcHQgaW5cbiAgICBzY2FuX2NoYXJzX2luX2NoYXJfc2V0IGNoYXJfc2V0IE5vbmUgd2lkdGggaWI7XG4gICAgbGV0IHMgPSB0b2tlbl9zdHJpbmcgaWIgaW5cbiAgICBDb25zIChzLCBtYWtlX3NjYW5mIGliIHJlc3QgcmVhZGVycylcbiAgfCBTY2FuX2dldF9jb3VudGVyIChjb3VudGVyLCByZXN0KSAtPlxuICAgIGxldCBjb3VudCA9IGdldF9jb3VudGVyIGliIGNvdW50ZXIgaW5cbiAgICBDb25zIChjb3VudCwgbWFrZV9zY2FuZiBpYiByZXN0IHJlYWRlcnMpXG4gIHwgU2Nhbl9uZXh0X2NoYXIgcmVzdCAtPlxuICAgIGxldCBjID0gU2Nhbm5pbmcuY2hlY2tlZF9wZWVrX2NoYXIgaWIgaW5cbiAgICBDb25zIChjLCBtYWtlX3NjYW5mIGliIHJlc3QgcmVhZGVycylcblxuICB8IEZvcm1hdHRpbmdfbGl0IChmb3JtYXR0aW5nX2xpdCwgcmVzdCkgLT5cbiAgICBTdHJpbmcuaXRlciAoY2hlY2tfY2hhciBpYikgKHN0cmluZ19vZl9mb3JtYXR0aW5nX2xpdCBmb3JtYXR0aW5nX2xpdCk7XG4gICAgbWFrZV9zY2FuZiBpYiByZXN0IHJlYWRlcnNcbiAgfCBGb3JtYXR0aW5nX2dlbiAoT3Blbl90YWcgKEZvcm1hdCAoZm10JywgXykpLCByZXN0KSAtPlxuICAgIGNoZWNrX2NoYXIgaWIgJ0AnOyBjaGVja19jaGFyIGliICd7JztcbiAgICBtYWtlX3NjYW5mIGliIChjb25jYXRfZm10IGZtdCcgcmVzdCkgcmVhZGVyc1xuICB8IEZvcm1hdHRpbmdfZ2VuIChPcGVuX2JveCAoRm9ybWF0IChmbXQnLCBfKSksIHJlc3QpIC0+XG4gICAgY2hlY2tfY2hhciBpYiAnQCc7IGNoZWNrX2NoYXIgaWIgJ1snO1xuICAgIG1ha2Vfc2NhbmYgaWIgKGNvbmNhdF9mbXQgZm10JyByZXN0KSByZWFkZXJzXG5cbiAgfCBJZ25vcmVkX3BhcmFtIChpZ24sIHJlc3QpIC0+XG4gICAgbGV0IFBhcmFtX2Zvcm1hdF9FQkIgZm10JyA9IHBhcmFtX2Zvcm1hdF9vZl9pZ25vcmVkX2Zvcm1hdCBpZ24gcmVzdCBpblxuICAgIGJlZ2luIG1hdGNoIG1ha2Vfc2NhbmYgaWIgZm10JyByZWFkZXJzIHdpdGhcbiAgICB8IENvbnMgKF8sIGFyZ19yZXN0KSAtPiBhcmdfcmVzdFxuICAgIHwgTmlsIC0+IGFzc2VydCBmYWxzZVxuICAgIGVuZFxuXG4gIHwgRW5kX29mX2Zvcm1hdCAtPlxuICAgIE5pbFxuXG4oKiBDYXNlIGFuYWx5c2lzIG9uIHBhZGRpbmcgYW5kIHByZWNpc2lvbi4gKilcbigqIFJlamVjdCBmb3JtYXRzIGNvbnRhaW5pbmcgXCIlKlwiIG9yIFwiJS4qXCIuICopXG4oKiBQYXNzIHBhZGRpbmcgYW5kIHByZWNpc2lvbiB0byB0aGUgZ2VuZXJpYyBzY2FubmVyIGBzY2FuJy4gKilcbmFuZCBwYWRfcHJlY19zY2FuZiA6IHR5cGUgYSBjIGQgZSBmIHggeSB6IHQgLlxuICAgIFNjYW5uaW5nLmluX2NoYW5uZWwgLT4gKGEsIFNjYW5uaW5nLmluX2NoYW5uZWwsIGMsIGQsIGUsIGYpIGZtdCAtPlxuICAgICAgKGQsIGUpIGhldGVyX2xpc3QgLT4gKHgsIHkpIHBhZGRpbmcgLT4gKHksIHogLT4gYSkgcHJlY2lzaW9uIC0+XG4gICAgICAoaW50IC0+IGludCAtPiBTY2FubmluZy5pbl9jaGFubmVsIC0+IHQpIC0+XG4gICAgICAoU2Nhbm5pbmcuaW5fY2hhbm5lbCAtPiB6KSAtPlxuICAgICAgKHgsIGYpIGhldGVyX2xpc3QgPVxuZnVuIGliIGZtdCByZWFkZXJzIHBhZCBwcmVjIHNjYW4gdG9rZW4gLT4gbWF0Y2ggcGFkLCBwcmVjIHdpdGhcbiAgfCBOb19wYWRkaW5nLCBOb19wcmVjaXNpb24gLT5cbiAgICBsZXQgXyA9IHNjYW4gbWF4X2ludCBtYXhfaW50IGliIGluXG4gICAgbGV0IHggPSB0b2tlbiBpYiBpblxuICAgIENvbnMgKHgsIG1ha2Vfc2NhbmYgaWIgZm10IHJlYWRlcnMpXG4gIHwgTm9fcGFkZGluZywgTGl0X3ByZWNpc2lvbiBwIC0+XG4gICAgbGV0IF8gPSBzY2FuIG1heF9pbnQgcCBpYiBpblxuICAgIGxldCB4ID0gdG9rZW4gaWIgaW5cbiAgICBDb25zICh4LCBtYWtlX3NjYW5mIGliIGZtdCByZWFkZXJzKVxuICB8IExpdF9wYWRkaW5nICgoUmlnaHQgfCBaZXJvcyksIHcpLCBOb19wcmVjaXNpb24gLT5cbiAgICBsZXQgXyA9IHNjYW4gdyBtYXhfaW50IGliIGluXG4gICAgbGV0IHggPSB0b2tlbiBpYiBpblxuICAgIENvbnMgKHgsIG1ha2Vfc2NhbmYgaWIgZm10IHJlYWRlcnMpXG4gIHwgTGl0X3BhZGRpbmcgKChSaWdodCB8IFplcm9zKSwgdyksIExpdF9wcmVjaXNpb24gcCAtPlxuICAgIGxldCBfID0gc2NhbiB3IHAgaWIgaW5cbiAgICBsZXQgeCA9IHRva2VuIGliIGluXG4gICAgQ29ucyAoeCwgbWFrZV9zY2FuZiBpYiBmbXQgcmVhZGVycylcbiAgfCBMaXRfcGFkZGluZyAoTGVmdCwgXyksIF8gLT5cbiAgICBpbnZhbGlkX2FyZyBcInNjYW5mOiBiYWQgY29udmVyc2lvbiBcXFwiJS1cXFwiXCJcbiAgfCBMaXRfcGFkZGluZyAoKFJpZ2h0IHwgWmVyb3MpLCBfKSwgQXJnX3ByZWNpc2lvbiAtPlxuICAgIGludmFsaWRfYXJnIFwic2NhbmY6IGJhZCBjb252ZXJzaW9uIFxcXCIlKlxcXCJcIlxuICB8IEFyZ19wYWRkaW5nIF8sIF8gLT5cbiAgICBpbnZhbGlkX2FyZyBcInNjYW5mOiBiYWQgY29udmVyc2lvbiBcXFwiJSpcXFwiXCJcbiAgfCBOb19wYWRkaW5nLCBBcmdfcHJlY2lzaW9uIC0+XG4gICAgaW52YWxpZF9hcmcgXCJzY2FuZjogYmFkIGNvbnZlcnNpb24gXFxcIiUqXFxcIlwiXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAoKiBEZWZpbmluZyBbc2NhbmZdIGFuZCB2YXJpb3VzIGZsYXZvcnMgb2YgW3NjYW5mXSAqKVxuXG50eXBlICdhIGtzY2FuZl9yZXN1bHQgPSBBcmdzIG9mICdhIHwgRXhjIG9mIGV4blxuXG5sZXQga3NjYW5mIGliIGVmIChGb3JtYXQgKGZtdCwgc3RyKSkgPVxuICBsZXQgcmVjIGFwcGx5IDogdHlwZSBhIGIgLiBhIC0+IChhLCBiKSBoZXRlcl9saXN0IC0+IGIgPVxuICAgIGZ1biBmIGFyZ3MgLT4gbWF0Y2ggYXJncyB3aXRoXG4gICAgfCBDb25zICh4LCByKSAtPiBhcHBseSAoZiB4KSByXG4gICAgfCBOaWwgLT4gZlxuICBpblxuICBsZXQgayByZWFkZXJzIGYgPVxuICAgIFNjYW5uaW5nLnJlc2V0X3Rva2VuIGliO1xuICAgIG1hdGNoIHRyeSBBcmdzIChtYWtlX3NjYW5mIGliIGZtdCByZWFkZXJzKSB3aXRoXG4gICAgICB8IChTY2FuX2ZhaWx1cmUgXyB8IEZhaWx1cmUgXyB8IEVuZF9vZl9maWxlKSBhcyBleGMgLT4gRXhjIGV4Y1xuICAgICAgfCBJbnZhbGlkX2FyZ3VtZW50IG1zZyAtPlxuICAgICAgICBpbnZhbGlkX2FyZyAobXNnIF4gXCIgaW4gZm9ybWF0IFxcXCJcIiBeIFN0cmluZy5lc2NhcGVkIHN0ciBeIFwiXFxcIlwiKVxuICAgIHdpdGhcbiAgICAgIHwgQXJncyBhcmdzIC0+IGFwcGx5IGYgYXJnc1xuICAgICAgfCBFeGMgZXhjIC0+IGVmIGliIGV4Y1xuICBpblxuICB0YWtlX2Zvcm1hdF9yZWFkZXJzIGsgZm10XG5cbigqKiopXG5cbmxldCBrYnNjYW5mID0ga3NjYW5mXG5sZXQgYnNjYW5mIGliIGZtdCA9IGtic2NhbmYgaWIgc2NhbmZfYmFkX2lucHV0IGZtdFxuXG5sZXQga3NzY2FuZiBzIGVmIGZtdCA9IGtic2NhbmYgKFNjYW5uaW5nLmZyb21fc3RyaW5nIHMpIGVmIGZtdFxubGV0IHNzY2FuZiBzIGZtdCA9IGtic2NhbmYgKFNjYW5uaW5nLmZyb21fc3RyaW5nIHMpIHNjYW5mX2JhZF9pbnB1dCBmbXRcblxubGV0IHNjYW5mIGZtdCA9IGtzY2FuZiBTY2FubmluZy5zdGRpYiBzY2FuZl9iYWRfaW5wdXQgZm10XG5cbigqKiopXG5cbigqIFNjYW5uaW5nIGZvcm1hdCBzdHJpbmdzLiAqKVxubGV0IGJzY2FuZl9mb3JtYXQgOlxuICBTY2FubmluZy5pbl9jaGFubmVsIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXQ2IC0+XG4gICgoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0NiAtPiAnZykgLT4gJ2cgPVxuICBmdW4gaWIgZm9ybWF0IGYgLT5cbiAgICBsZXQgXyA9IHNjYW5fY2FtbF9zdHJpbmcgbWF4X2ludCBpYiBpblxuICAgIGxldCBzdHIgPSB0b2tlbl9zdHJpbmcgaWIgaW5cbiAgICBsZXQgZm10JyA9XG4gICAgICB0cnkgZm9ybWF0X29mX3N0cmluZ19mb3JtYXQgc3RyIGZvcm1hdFxuICAgICAgd2l0aCBGYWlsdXJlIG1zZyAtPiBiYWRfaW5wdXQgbXNnIGluXG4gICAgZiBmbXQnXG5cblxubGV0IHNzY2FuZl9mb3JtYXQgOlxuICBzdHJpbmcgLT4gKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdDYgLT5cbiAgKCgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXQ2IC0+ICdnKSAtPiAnZyA9XG4gIGZ1biBzIGZvcm1hdCBmIC0+IGJzY2FuZl9mb3JtYXQgKFNjYW5uaW5nLmZyb21fc3RyaW5nIHMpIGZvcm1hdCBmXG5cblxubGV0IGZvcm1hdF9mcm9tX3N0cmluZyBzIGZtdCA9XG4gIHNzY2FuZl9mb3JtYXQgKFwiXFxcIlwiIF4gU3RyaW5nLmVzY2FwZWQgcyBeIFwiXFxcIlwiKSBmbXQgKGZ1biB4IC0+IHgpXG5cblxubGV0IHVuZXNjYXBlZCBzID1cbiAgc3NjYW5mIChcIlxcXCJcIiBeIHMgXiBcIlxcXCJcIikgXCIlUyUhXCIgKGZ1biB4IC0+IHgpXG5cblxuKCogRGVwcmVjYXRlZCAqKVxubGV0IGtmc2NhbmYgaWMgZWYgZm10ID0ga2JzY2FuZiAoU2Nhbm5pbmcubWVtb19mcm9tX2NoYW5uZWwgaWMpIGVmIGZtdFxubGV0IGZzY2FuZiBpYyBmbXQgPSBrc2NhbmYgKFNjYW5uaW5nLm1lbW9fZnJvbV9jaGFubmVsIGljKSBzY2FuZl9iYWRfaW5wdXQgZm10XG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIFJlZ2lzdGVyaW5nIE9DYW1sIHZhbHVlcyB3aXRoIHRoZSBDIHJ1bnRpbWUgZm9yIGxhdGVyIGNhbGxiYWNrcyAqKVxuXG5leHRlcm5hbCByZWdpc3Rlcl9uYW1lZF92YWx1ZSA6IHN0cmluZyAtPiBPYmoudCAtPiB1bml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9yZWdpc3Rlcl9uYW1lZF92YWx1ZVwiXG5cbmxldCByZWdpc3RlciBuYW1lIHYgPVxuICByZWdpc3Rlcl9uYW1lZF92YWx1ZSBuYW1lIChPYmoucmVwciB2KVxuXG5sZXQgcmVnaXN0ZXJfZXhjZXB0aW9uIG5hbWUgKGV4biA6IGV4bikgPVxuICBsZXQgZXhuID0gT2JqLnJlcHIgZXhuIGluXG4gIGxldCBzbG90ID0gaWYgT2JqLnRhZyBleG4gPSBPYmoub2JqZWN0X3RhZyB0aGVuIGV4biBlbHNlIE9iai5maWVsZCBleG4gMCBpblxuICByZWdpc3Rlcl9uYW1lZF92YWx1ZSBuYW1lIHNsb3RcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgIEplcm9tZSBWb3VpbGxvbiwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMDIgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxub3BlbiBPYmpcblxuKCoqKiogT2JqZWN0IHJlcHJlc2VudGF0aW9uICoqKiopXG5cbmV4dGVybmFsIHNldF9pZDogJ2EgLT4gJ2EgPSBcImNhbWxfc2V0X29vX2lkXCIgW0BAbm9hbGxvY11cblxuKCoqKiogT2JqZWN0IGNvcHkgKioqKilcblxubGV0IGNvcHkgbyA9XG4gIGxldCBvID0gKE9iai5vYmogKE9iai5kdXAgKE9iai5yZXByIG8pKSkgaW5cbiAgc2V0X2lkIG9cblxuKCoqKiogQ29tcHJlc3Npb24gb3B0aW9ucyAqKioqKVxuKCogUGFyYW1ldGVycyAqKVxudHlwZSBwYXJhbXMgPSB7XG4gICAgbXV0YWJsZSBjb21wYWN0X3RhYmxlIDogYm9vbDtcbiAgICBtdXRhYmxlIGNvcHlfcGFyZW50IDogYm9vbDtcbiAgICBtdXRhYmxlIGNsZWFuX3doZW5fY29weWluZyA6IGJvb2w7XG4gICAgbXV0YWJsZSByZXRyeV9jb3VudCA6IGludDtcbiAgICBtdXRhYmxlIGJ1Y2tldF9zbWFsbF9zaXplIDogaW50XG4gIH1cblxubGV0IHBhcmFtcyA9IHtcbiAgY29tcGFjdF90YWJsZSA9IHRydWU7XG4gIGNvcHlfcGFyZW50ID0gdHJ1ZTtcbiAgY2xlYW5fd2hlbl9jb3B5aW5nID0gdHJ1ZTtcbiAgcmV0cnlfY291bnQgPSAzO1xuICBidWNrZXRfc21hbGxfc2l6ZSA9IDE2XG59XG5cbigqKioqIFBhcmFtZXRlcnMgKioqKilcblxubGV0IGluaXRpYWxfb2JqZWN0X3NpemUgPSAyXG5cbigqKioqIEl0ZW1zICoqKiopXG5cbnR5cGUgaXRlbSA9IER1bW15QSB8IER1bW15QiB8IER1bW15QyBvZiBpbnRcbmxldCBfID0gW0R1bW15QTsgRHVtbXlCOyBEdW1teUMgMF0gKCogdG8gYXZvaWQgd2FybmluZ3MgKilcblxubGV0IGR1bW15X2l0ZW0gPSAobWFnaWMgKCkgOiBpdGVtKVxuXG4oKioqKiBUeXBlcyAqKioqKVxuXG50eXBlIHRhZ1xudHlwZSBsYWJlbCA9IGludFxudHlwZSBjbG9zdXJlID0gaXRlbVxudHlwZSB0ID0gRHVtbXlBIHwgRHVtbXlCIHwgRHVtbXlDIG9mIGludFxubGV0IF8gPSBbRHVtbXlBOyBEdW1teUI7IER1bW15QyAwXSAoKiB0byBhdm9pZCB3YXJuaW5ncyAqKVxuXG50eXBlIG9iaiA9IHQgYXJyYXlcbmV4dGVybmFsIHJldCA6IChvYmogLT4gJ2EpIC0+IGNsb3N1cmUgPSBcIiVpZGVudGl0eVwiXG5cbigqKioqIExhYmVscyAqKioqKVxuXG5sZXQgcHVibGljX21ldGhvZF9sYWJlbCBzIDogdGFnID1cbiAgbGV0IGFjY3UgPSByZWYgMCBpblxuICBmb3IgaSA9IDAgdG8gU3RyaW5nLmxlbmd0aCBzIC0gMSBkb1xuICAgIGFjY3UgOj0gMjIzICogIWFjY3UgKyBDaGFyLmNvZGUgcy5baV1cbiAgZG9uZTtcbiAgKCogcmVkdWNlIHRvIDMxIGJpdHMgKilcbiAgYWNjdSA6PSAhYWNjdSBsYW5kICgxIGxzbCAzMSAtIDEpO1xuICAoKiBtYWtlIGl0IHNpZ25lZCBmb3IgNjQgYml0cyBhcmNoaXRlY3R1cmVzICopXG4gIGxldCB0YWcgPSBpZiAhYWNjdSA+IDB4M0ZGRkZGRkYgdGhlbiAhYWNjdSAtICgxIGxzbCAzMSkgZWxzZSAhYWNjdSBpblxuICAoKiBQcmludGYuZXByaW50ZiBcIiVzID0gJWRcXG5cIiBzIHRhZzsgZmx1c2ggc3RkZXJyOyAqKVxuICBtYWdpYyB0YWdcblxuKCoqKiogU3BhcnNlIGFycmF5ICoqKiopXG5cbm1vZHVsZSBWYXJzID1cbiAgTWFwLk1ha2Uoc3RydWN0IHR5cGUgdCA9IHN0cmluZyBsZXQgY29tcGFyZSAoeDp0KSB5ID0gY29tcGFyZSB4IHkgZW5kKVxudHlwZSB2YXJzID0gaW50IFZhcnMudFxuXG5tb2R1bGUgTWV0aHMgPVxuICBNYXAuTWFrZShzdHJ1Y3QgdHlwZSB0ID0gc3RyaW5nIGxldCBjb21wYXJlICh4OnQpIHkgPSBjb21wYXJlIHggeSBlbmQpXG50eXBlIG1ldGhzID0gbGFiZWwgTWV0aHMudFxubW9kdWxlIExhYnMgPVxuICBNYXAuTWFrZShzdHJ1Y3QgdHlwZSB0ID0gbGFiZWwgbGV0IGNvbXBhcmUgKHg6dCkgeSA9IGNvbXBhcmUgeCB5IGVuZClcbnR5cGUgbGFicyA9IGJvb2wgTGFicy50XG5cbigqIFRoZSBjb21waWxlciBhc3N1bWVzIHRoYXQgdGhlIGZpcnN0IGZpZWxkIG9mIHRoaXMgc3RydWN0dXJlIGlzIFtzaXplXS4gKilcbnR5cGUgdGFibGUgPVxuIHsgbXV0YWJsZSBzaXplOiBpbnQ7XG4gICBtdXRhYmxlIG1ldGhvZHM6IGNsb3N1cmUgYXJyYXk7XG4gICBtdXRhYmxlIG1ldGhvZHNfYnlfbmFtZTogbWV0aHM7XG4gICBtdXRhYmxlIG1ldGhvZHNfYnlfbGFiZWw6IGxhYnM7XG4gICBtdXRhYmxlIHByZXZpb3VzX3N0YXRlczpcbiAgICAgKG1ldGhzICogbGFicyAqIChsYWJlbCAqIGl0ZW0pIGxpc3QgKiB2YXJzICpcbiAgICAgIGxhYmVsIGxpc3QgKiBzdHJpbmcgbGlzdCkgbGlzdDtcbiAgIG11dGFibGUgaGlkZGVuX21ldGhzOiAobGFiZWwgKiBpdGVtKSBsaXN0O1xuICAgbXV0YWJsZSB2YXJzOiB2YXJzO1xuICAgbXV0YWJsZSBpbml0aWFsaXplcnM6IChvYmogLT4gdW5pdCkgbGlzdCB9XG5cbmxldCBkdW1teV90YWJsZSA9XG4gIHsgbWV0aG9kcyA9IFt8IGR1bW15X2l0ZW0gfF07XG4gICAgbWV0aG9kc19ieV9uYW1lID0gTWV0aHMuZW1wdHk7XG4gICAgbWV0aG9kc19ieV9sYWJlbCA9IExhYnMuZW1wdHk7XG4gICAgcHJldmlvdXNfc3RhdGVzID0gW107XG4gICAgaGlkZGVuX21ldGhzID0gW107XG4gICAgdmFycyA9IFZhcnMuZW1wdHk7XG4gICAgaW5pdGlhbGl6ZXJzID0gW107XG4gICAgc2l6ZSA9IDAgfVxuXG5sZXQgdGFibGVfY291bnQgPSByZWYgMFxuXG4oKiBkdW1teV9tZXQgc2hvdWxkIGJlIGEgcG9pbnRlciwgc28gdXNlIGFuIGF0b20gKilcbmxldCBkdW1teV9tZXQgOiBpdGVtID0gb2JqIChPYmoubmV3X2Jsb2NrIDAgMClcbigqIGlmIGRlYnVnZ2luZyBpcyBuZWVkZWQsIHRoaXMgY291bGQgYmUgYSBnb29kIGlkZWE6ICopXG4oKiBsZXQgZHVtbXlfbWV0ICgpID0gZmFpbHdpdGggXCJVbmRlZmluZWQgbWV0aG9kXCIgKilcblxubGV0IHJlYyBmaXRfc2l6ZSBuID1cbiAgaWYgbiA8PSAyIHRoZW4gbiBlbHNlXG4gIGZpdF9zaXplICgobisxKS8yKSAqIDJcblxubGV0IG5ld190YWJsZSBwdWJfbGFiZWxzID1cbiAgaW5jciB0YWJsZV9jb3VudDtcbiAgbGV0IGxlbiA9IEFycmF5Lmxlbmd0aCBwdWJfbGFiZWxzIGluXG4gIGxldCBtZXRob2RzID0gQXJyYXkubWFrZSAobGVuKjIrMikgZHVtbXlfbWV0IGluXG4gIG1ldGhvZHMuKDApIDwtIG1hZ2ljIGxlbjtcbiAgbWV0aG9kcy4oMSkgPC0gbWFnaWMgKGZpdF9zaXplIGxlbiAqIFN5cy53b3JkX3NpemUgLyA4IC0gMSk7XG4gIGZvciBpID0gMCB0byBsZW4gLSAxIGRvIG1ldGhvZHMuKGkqMiszKSA8LSBtYWdpYyBwdWJfbGFiZWxzLihpKSBkb25lO1xuICB7IG1ldGhvZHMgPSBtZXRob2RzO1xuICAgIG1ldGhvZHNfYnlfbmFtZSA9IE1ldGhzLmVtcHR5O1xuICAgIG1ldGhvZHNfYnlfbGFiZWwgPSBMYWJzLmVtcHR5O1xuICAgIHByZXZpb3VzX3N0YXRlcyA9IFtdO1xuICAgIGhpZGRlbl9tZXRocyA9IFtdO1xuICAgIHZhcnMgPSBWYXJzLmVtcHR5O1xuICAgIGluaXRpYWxpemVycyA9IFtdO1xuICAgIHNpemUgPSBpbml0aWFsX29iamVjdF9zaXplIH1cblxubGV0IHJlc2l6ZSBhcnJheSBuZXdfc2l6ZSA9XG4gIGxldCBvbGRfc2l6ZSA9IEFycmF5Lmxlbmd0aCBhcnJheS5tZXRob2RzIGluXG4gIGlmIG5ld19zaXplID4gb2xkX3NpemUgdGhlbiBiZWdpblxuICAgIGxldCBuZXdfYnVjayA9IEFycmF5Lm1ha2UgbmV3X3NpemUgZHVtbXlfbWV0IGluXG4gICAgQXJyYXkuYmxpdCBhcnJheS5tZXRob2RzIDAgbmV3X2J1Y2sgMCBvbGRfc2l6ZTtcbiAgICBhcnJheS5tZXRob2RzIDwtIG5ld19idWNrXG4gZW5kXG5cbmxldCBwdXQgYXJyYXkgbGFiZWwgZWxlbWVudCA9XG4gIHJlc2l6ZSBhcnJheSAobGFiZWwgKyAxKTtcbiAgYXJyYXkubWV0aG9kcy4obGFiZWwpIDwtIGVsZW1lbnRcblxuKCoqKiogQ2xhc3NlcyAqKioqKVxuXG5sZXQgbWV0aG9kX2NvdW50ID0gcmVmIDBcbmxldCBpbnN0X3Zhcl9jb3VudCA9IHJlZiAwXG5cbigqIHR5cGUgdCAqKVxudHlwZSBtZXRoID0gaXRlbVxuXG5sZXQgbmV3X21ldGhvZCB0YWJsZSA9XG4gIGxldCBpbmRleCA9IEFycmF5Lmxlbmd0aCB0YWJsZS5tZXRob2RzIGluXG4gIHJlc2l6ZSB0YWJsZSAoaW5kZXggKyAxKTtcbiAgaW5kZXhcblxubGV0IGdldF9tZXRob2RfbGFiZWwgdGFibGUgbmFtZSA9XG4gIHRyeVxuICAgIE1ldGhzLmZpbmQgbmFtZSB0YWJsZS5tZXRob2RzX2J5X25hbWVcbiAgd2l0aCBOb3RfZm91bmQgLT5cbiAgICBsZXQgbGFiZWwgPSBuZXdfbWV0aG9kIHRhYmxlIGluXG4gICAgdGFibGUubWV0aG9kc19ieV9uYW1lIDwtIE1ldGhzLmFkZCBuYW1lIGxhYmVsIHRhYmxlLm1ldGhvZHNfYnlfbmFtZTtcbiAgICB0YWJsZS5tZXRob2RzX2J5X2xhYmVsIDwtIExhYnMuYWRkIGxhYmVsIHRydWUgdGFibGUubWV0aG9kc19ieV9sYWJlbDtcbiAgICBsYWJlbFxuXG5sZXQgZ2V0X21ldGhvZF9sYWJlbHMgdGFibGUgbmFtZXMgPVxuICBBcnJheS5tYXAgKGdldF9tZXRob2RfbGFiZWwgdGFibGUpIG5hbWVzXG5cbmxldCBzZXRfbWV0aG9kIHRhYmxlIGxhYmVsIGVsZW1lbnQgPVxuICBpbmNyIG1ldGhvZF9jb3VudDtcbiAgaWYgTGFicy5maW5kIGxhYmVsIHRhYmxlLm1ldGhvZHNfYnlfbGFiZWwgdGhlblxuICAgIHB1dCB0YWJsZSBsYWJlbCBlbGVtZW50XG4gIGVsc2VcbiAgICB0YWJsZS5oaWRkZW5fbWV0aHMgPC0gKGxhYmVsLCBlbGVtZW50KSA6OiB0YWJsZS5oaWRkZW5fbWV0aHNcblxubGV0IGdldF9tZXRob2QgdGFibGUgbGFiZWwgPVxuICB0cnkgTGlzdC5hc3NvYyBsYWJlbCB0YWJsZS5oaWRkZW5fbWV0aHNcbiAgd2l0aCBOb3RfZm91bmQgLT4gdGFibGUubWV0aG9kcy4obGFiZWwpXG5cbmxldCB0b19saXN0IGFyciA9XG4gIGlmIGFyciA9PSBtYWdpYyAwIHRoZW4gW10gZWxzZSBBcnJheS50b19saXN0IGFyclxuXG5sZXQgbmFycm93IHRhYmxlIHZhcnMgdmlydF9tZXRocyBjb25jcl9tZXRocyA9XG4gIGxldCB2YXJzID0gdG9fbGlzdCB2YXJzXG4gIGFuZCB2aXJ0X21ldGhzID0gdG9fbGlzdCB2aXJ0X21ldGhzXG4gIGFuZCBjb25jcl9tZXRocyA9IHRvX2xpc3QgY29uY3JfbWV0aHMgaW5cbiAgbGV0IHZpcnRfbWV0aF9sYWJzID0gTGlzdC5tYXAgKGdldF9tZXRob2RfbGFiZWwgdGFibGUpIHZpcnRfbWV0aHMgaW5cbiAgbGV0IGNvbmNyX21ldGhfbGFicyA9IExpc3QubWFwIChnZXRfbWV0aG9kX2xhYmVsIHRhYmxlKSBjb25jcl9tZXRocyBpblxuICB0YWJsZS5wcmV2aW91c19zdGF0ZXMgPC1cbiAgICAgKHRhYmxlLm1ldGhvZHNfYnlfbmFtZSwgdGFibGUubWV0aG9kc19ieV9sYWJlbCwgdGFibGUuaGlkZGVuX21ldGhzLFxuICAgICAgdGFibGUudmFycywgdmlydF9tZXRoX2xhYnMsIHZhcnMpXG4gICAgIDo6IHRhYmxlLnByZXZpb3VzX3N0YXRlcztcbiAgdGFibGUudmFycyA8LVxuICAgIFZhcnMuZm9sZFxuICAgICAgKGZ1biBsYWIgaW5mbyB0dmFycyAtPlxuICAgICAgICBpZiBMaXN0Lm1lbSBsYWIgdmFycyB0aGVuIFZhcnMuYWRkIGxhYiBpbmZvIHR2YXJzIGVsc2UgdHZhcnMpXG4gICAgICB0YWJsZS52YXJzIFZhcnMuZW1wdHk7XG4gIGxldCBieV9uYW1lID0gcmVmIE1ldGhzLmVtcHR5IGluXG4gIGxldCBieV9sYWJlbCA9IHJlZiBMYWJzLmVtcHR5IGluXG4gIExpc3QuaXRlcjJcbiAgICAoZnVuIG1ldCBsYWJlbCAtPlxuICAgICAgIGJ5X25hbWUgOj0gTWV0aHMuYWRkIG1ldCBsYWJlbCAhYnlfbmFtZTtcbiAgICAgICBieV9sYWJlbCA6PVxuICAgICAgICAgIExhYnMuYWRkIGxhYmVsXG4gICAgICAgICAgICAodHJ5IExhYnMuZmluZCBsYWJlbCB0YWJsZS5tZXRob2RzX2J5X2xhYmVsIHdpdGggTm90X2ZvdW5kIC0+IHRydWUpXG4gICAgICAgICAgICAhYnlfbGFiZWwpXG4gICAgY29uY3JfbWV0aHMgY29uY3JfbWV0aF9sYWJzO1xuICBMaXN0Lml0ZXIyXG4gICAgKGZ1biBtZXQgbGFiZWwgLT5cbiAgICAgICBieV9uYW1lIDo9IE1ldGhzLmFkZCBtZXQgbGFiZWwgIWJ5X25hbWU7XG4gICAgICAgYnlfbGFiZWwgOj0gTGFicy5hZGQgbGFiZWwgZmFsc2UgIWJ5X2xhYmVsKVxuICAgIHZpcnRfbWV0aHMgdmlydF9tZXRoX2xhYnM7XG4gIHRhYmxlLm1ldGhvZHNfYnlfbmFtZSA8LSAhYnlfbmFtZTtcbiAgdGFibGUubWV0aG9kc19ieV9sYWJlbCA8LSAhYnlfbGFiZWw7XG4gIHRhYmxlLmhpZGRlbl9tZXRocyA8LVxuICAgICBMaXN0LmZvbGRfcmlnaHRcbiAgICAgICAoZnVuICgobGFiLCBfKSBhcyBtZXQpIGhtIC0+XG4gICAgICAgICAgaWYgTGlzdC5tZW0gbGFiIHZpcnRfbWV0aF9sYWJzIHRoZW4gaG0gZWxzZSBtZXQ6OmhtKVxuICAgICAgIHRhYmxlLmhpZGRlbl9tZXRoc1xuICAgICAgIFtdXG5cbmxldCB3aWRlbiB0YWJsZSA9XG4gIGxldCAoYnlfbmFtZSwgYnlfbGFiZWwsIHNhdmVkX2hpZGRlbl9tZXRocywgc2F2ZWRfdmFycywgdmlydF9tZXRocywgdmFycykgPVxuICAgIExpc3QuaGQgdGFibGUucHJldmlvdXNfc3RhdGVzXG4gIGluXG4gIHRhYmxlLnByZXZpb3VzX3N0YXRlcyA8LSBMaXN0LnRsIHRhYmxlLnByZXZpb3VzX3N0YXRlcztcbiAgdGFibGUudmFycyA8LVxuICAgICBMaXN0LmZvbGRfbGVmdFxuICAgICAgIChmdW4gcyB2IC0+IFZhcnMuYWRkIHYgKFZhcnMuZmluZCB2IHRhYmxlLnZhcnMpIHMpXG4gICAgICAgc2F2ZWRfdmFycyB2YXJzO1xuICB0YWJsZS5tZXRob2RzX2J5X25hbWUgPC0gYnlfbmFtZTtcbiAgdGFibGUubWV0aG9kc19ieV9sYWJlbCA8LSBieV9sYWJlbDtcbiAgdGFibGUuaGlkZGVuX21ldGhzIDwtXG4gICAgIExpc3QuZm9sZF9yaWdodFxuICAgICAgIChmdW4gKChsYWIsIF8pIGFzIG1ldCkgaG0gLT5cbiAgICAgICAgICBpZiBMaXN0Lm1lbSBsYWIgdmlydF9tZXRocyB0aGVuIGhtIGVsc2UgbWV0OjpobSlcbiAgICAgICB0YWJsZS5oaWRkZW5fbWV0aHNcbiAgICAgICBzYXZlZF9oaWRkZW5fbWV0aHNcblxubGV0IG5ld19zbG90IHRhYmxlID1cbiAgbGV0IGluZGV4ID0gdGFibGUuc2l6ZSBpblxuICB0YWJsZS5zaXplIDwtIGluZGV4ICsgMTtcbiAgaW5kZXhcblxubGV0IG5ld192YXJpYWJsZSB0YWJsZSBuYW1lID1cbiAgdHJ5IFZhcnMuZmluZCBuYW1lIHRhYmxlLnZhcnNcbiAgd2l0aCBOb3RfZm91bmQgLT5cbiAgICBsZXQgaW5kZXggPSBuZXdfc2xvdCB0YWJsZSBpblxuICAgIGlmIG5hbWUgPD4gXCJcIiB0aGVuIHRhYmxlLnZhcnMgPC0gVmFycy5hZGQgbmFtZSBpbmRleCB0YWJsZS52YXJzO1xuICAgIGluZGV4XG5cbmxldCB0b19hcnJheSBhcnIgPVxuICBpZiBhcnIgPSBPYmoubWFnaWMgMCB0aGVuIFt8fF0gZWxzZSBhcnJcblxubGV0IG5ld19tZXRob2RzX3ZhcmlhYmxlcyB0YWJsZSBtZXRocyB2YWxzID1cbiAgbGV0IG1ldGhzID0gdG9fYXJyYXkgbWV0aHMgaW5cbiAgbGV0IG5tZXRocyA9IEFycmF5Lmxlbmd0aCBtZXRocyBhbmQgbnZhbHMgPSBBcnJheS5sZW5ndGggdmFscyBpblxuICBsZXQgcmVzID0gQXJyYXkubWFrZSAobm1ldGhzICsgbnZhbHMpIDAgaW5cbiAgZm9yIGkgPSAwIHRvIG5tZXRocyAtIDEgZG9cbiAgICByZXMuKGkpIDwtIGdldF9tZXRob2RfbGFiZWwgdGFibGUgbWV0aHMuKGkpXG4gIGRvbmU7XG4gIGZvciBpID0gMCB0byBudmFscyAtIDEgZG9cbiAgICByZXMuKGkrbm1ldGhzKSA8LSBuZXdfdmFyaWFibGUgdGFibGUgdmFscy4oaSlcbiAgZG9uZTtcbiAgcmVzXG5cbmxldCBnZXRfdmFyaWFibGUgdGFibGUgbmFtZSA9XG4gIHRyeSBWYXJzLmZpbmQgbmFtZSB0YWJsZS52YXJzIHdpdGggTm90X2ZvdW5kIC0+IGFzc2VydCBmYWxzZVxuXG5sZXQgZ2V0X3ZhcmlhYmxlcyB0YWJsZSBuYW1lcyA9XG4gIEFycmF5Lm1hcCAoZ2V0X3ZhcmlhYmxlIHRhYmxlKSBuYW1lc1xuXG5sZXQgYWRkX2luaXRpYWxpemVyIHRhYmxlIGYgPVxuICB0YWJsZS5pbml0aWFsaXplcnMgPC0gZjo6dGFibGUuaW5pdGlhbGl6ZXJzXG5cbigqXG5tb2R1bGUgS2V5cyA9XG4gIE1hcC5NYWtlKHN0cnVjdCB0eXBlIHQgPSB0YWcgYXJyYXkgbGV0IGNvbXBhcmUgKHg6dCkgeSA9IGNvbXBhcmUgeCB5IGVuZClcbmxldCBrZXlfbWFwID0gcmVmIEtleXMuZW1wdHlcbmxldCBnZXRfa2V5IHRhZ3MgOiBpdGVtID1cbiAgdHJ5IG1hZ2ljIChLZXlzLmZpbmQgdGFncyAha2V5X21hcCA6IHRhZyBhcnJheSlcbiAgd2l0aCBOb3RfZm91bmQgLT5cbiAgICBrZXlfbWFwIDo9IEtleXMuYWRkIHRhZ3MgdGFncyAha2V5X21hcDtcbiAgICBtYWdpYyB0YWdzXG4qKVxuXG5sZXQgY3JlYXRlX3RhYmxlIHB1YmxpY19tZXRob2RzID1cbiAgaWYgcHVibGljX21ldGhvZHMgPT0gbWFnaWMgMCB0aGVuIG5ld190YWJsZSBbfHxdIGVsc2VcbiAgKCogW3B1YmxpY19tZXRob2RzXSBtdXN0IGJlIGluIGFzY2VuZGluZyBvcmRlciBmb3IgYnl0ZWNvZGUgKilcbiAgbGV0IHRhZ3MgPSBBcnJheS5tYXAgcHVibGljX21ldGhvZF9sYWJlbCBwdWJsaWNfbWV0aG9kcyBpblxuICBsZXQgdGFibGUgPSBuZXdfdGFibGUgdGFncyBpblxuICBBcnJheS5pdGVyaVxuICAgIChmdW4gaSBtZXQgLT5cbiAgICAgIGxldCBsYWIgPSBpKjIrMiBpblxuICAgICAgdGFibGUubWV0aG9kc19ieV9uYW1lICA8LSBNZXRocy5hZGQgbWV0IGxhYiB0YWJsZS5tZXRob2RzX2J5X25hbWU7XG4gICAgICB0YWJsZS5tZXRob2RzX2J5X2xhYmVsIDwtIExhYnMuYWRkIGxhYiB0cnVlIHRhYmxlLm1ldGhvZHNfYnlfbGFiZWwpXG4gICAgcHVibGljX21ldGhvZHM7XG4gIHRhYmxlXG5cbmxldCBpbml0X2NsYXNzIHRhYmxlID1cbiAgaW5zdF92YXJfY291bnQgOj0gIWluc3RfdmFyX2NvdW50ICsgdGFibGUuc2l6ZSAtIDE7XG4gIHRhYmxlLmluaXRpYWxpemVycyA8LSBMaXN0LnJldiB0YWJsZS5pbml0aWFsaXplcnM7XG4gIHJlc2l6ZSB0YWJsZSAoMyArIG1hZ2ljIHRhYmxlLm1ldGhvZHMuKDEpICogMTYgLyBTeXMud29yZF9zaXplKVxuXG5sZXQgaW5oZXJpdHMgY2xhIHZhbHMgdmlydF9tZXRocyBjb25jcl9tZXRocyAoXywgc3VwZXIsIF8sIGVudikgdG9wID1cbiAgbmFycm93IGNsYSB2YWxzIHZpcnRfbWV0aHMgY29uY3JfbWV0aHM7XG4gIGxldCBpbml0ID1cbiAgICBpZiB0b3AgdGhlbiBzdXBlciBjbGEgZW52IGVsc2UgT2JqLnJlcHIgKHN1cGVyIGNsYSkgaW5cbiAgd2lkZW4gY2xhO1xuICBBcnJheS5jb25jYXRcbiAgICBbW3wgcmVwciBpbml0IHxdO1xuICAgICBtYWdpYyAoQXJyYXkubWFwIChnZXRfdmFyaWFibGUgY2xhKSAodG9fYXJyYXkgdmFscykgOiBpbnQgYXJyYXkpO1xuICAgICBBcnJheS5tYXBcbiAgICAgICAoZnVuIG5tIC0+IHJlcHIgKGdldF9tZXRob2QgY2xhIChnZXRfbWV0aG9kX2xhYmVsIGNsYSBubSkgOiBjbG9zdXJlKSlcbiAgICAgICAodG9fYXJyYXkgY29uY3JfbWV0aHMpIF1cblxubGV0IG1ha2VfY2xhc3MgcHViX21ldGhzIGNsYXNzX2luaXQgPVxuICBsZXQgdGFibGUgPSBjcmVhdGVfdGFibGUgcHViX21ldGhzIGluXG4gIGxldCBlbnZfaW5pdCA9IGNsYXNzX2luaXQgdGFibGUgaW5cbiAgaW5pdF9jbGFzcyB0YWJsZTtcbiAgKGVudl9pbml0IChPYmoucmVwciAwKSwgY2xhc3NfaW5pdCwgZW52X2luaXQsIE9iai5yZXByIDApXG5cbnR5cGUgaW5pdF90YWJsZSA9IHsgbXV0YWJsZSBlbnZfaW5pdDogdDsgbXV0YWJsZSBjbGFzc19pbml0OiB0YWJsZSAtPiB0IH1cbltAQHdhcm5pbmcgXCItdW51c2VkLWZpZWxkXCJdXG5cbmxldCBtYWtlX2NsYXNzX3N0b3JlIHB1Yl9tZXRocyBjbGFzc19pbml0IGluaXRfdGFibGUgPVxuICBsZXQgdGFibGUgPSBjcmVhdGVfdGFibGUgcHViX21ldGhzIGluXG4gIGxldCBlbnZfaW5pdCA9IGNsYXNzX2luaXQgdGFibGUgaW5cbiAgaW5pdF9jbGFzcyB0YWJsZTtcbiAgaW5pdF90YWJsZS5jbGFzc19pbml0IDwtIGNsYXNzX2luaXQ7XG4gIGluaXRfdGFibGUuZW52X2luaXQgPC0gZW52X2luaXRcblxubGV0IGR1bW15X2NsYXNzIGxvYyA9XG4gIGxldCB1bmRlZiA9IGZ1biBfIC0+IHJhaXNlIChVbmRlZmluZWRfcmVjdXJzaXZlX21vZHVsZSBsb2MpIGluXG4gIChPYmoubWFnaWMgdW5kZWYsIHVuZGVmLCB1bmRlZiwgT2JqLnJlcHIgMClcblxuKCoqKiogT2JqZWN0cyAqKioqKVxuXG5sZXQgY3JlYXRlX29iamVjdCB0YWJsZSA9XG4gICgqIFhYWCBBcHBlbCBkZSBbb2JqX2Jsb2NrXSB8IENhbGwgdG8gW29ial9ibG9ja10gICopXG4gIGxldCBvYmogPSBPYmoubmV3X2Jsb2NrIE9iai5vYmplY3RfdGFnIHRhYmxlLnNpemUgaW5cbiAgKCogWFhYIEFwcGVsIGRlIFtjYW1sX21vZGlmeV0gfCBDYWxsIHRvIFtjYW1sX21vZGlmeV0gKilcbiAgT2JqLnNldF9maWVsZCBvYmogMCAoT2JqLnJlcHIgdGFibGUubWV0aG9kcyk7XG4gIE9iai5vYmogKHNldF9pZCBvYmopXG5cbmxldCBjcmVhdGVfb2JqZWN0X29wdCBvYmpfMCB0YWJsZSA9XG4gIGlmIChPYmoubWFnaWMgb2JqXzAgOiBib29sKSB0aGVuIG9ial8wIGVsc2UgYmVnaW5cbiAgICAoKiBYWFggQXBwZWwgZGUgW29ial9ibG9ja10gfCBDYWxsIHRvIFtvYmpfYmxvY2tdICAqKVxuICAgIGxldCBvYmogPSBPYmoubmV3X2Jsb2NrIE9iai5vYmplY3RfdGFnIHRhYmxlLnNpemUgaW5cbiAgICAoKiBYWFggQXBwZWwgZGUgW2NhbWxfbW9kaWZ5XSB8IENhbGwgdG8gW2NhbWxfbW9kaWZ5XSAqKVxuICAgIE9iai5zZXRfZmllbGQgb2JqIDAgKE9iai5yZXByIHRhYmxlLm1ldGhvZHMpO1xuICAgIE9iai5vYmogKHNldF9pZCBvYmopXG4gIGVuZFxuXG5sZXQgcmVjIGl0ZXJfZiBvYmogPVxuICBmdW5jdGlvblxuICAgIFtdICAgLT4gKClcbiAgfCBmOjpsIC0+IGYgb2JqOyBpdGVyX2Ygb2JqIGxcblxubGV0IHJ1bl9pbml0aWFsaXplcnMgb2JqIHRhYmxlID1cbiAgbGV0IGluaXRzID0gdGFibGUuaW5pdGlhbGl6ZXJzIGluXG4gIGlmIGluaXRzIDw+IFtdIHRoZW5cbiAgICBpdGVyX2Ygb2JqIGluaXRzXG5cbmxldCBydW5faW5pdGlhbGl6ZXJzX29wdCBvYmpfMCBvYmogdGFibGUgPVxuICBpZiAoT2JqLm1hZ2ljIG9ial8wIDogYm9vbCkgdGhlbiBvYmogZWxzZSBiZWdpblxuICAgIGxldCBpbml0cyA9IHRhYmxlLmluaXRpYWxpemVycyBpblxuICAgIGlmIGluaXRzIDw+IFtdIHRoZW4gaXRlcl9mIG9iaiBpbml0cztcbiAgICBvYmpcbiAgZW5kXG5cbmxldCBjcmVhdGVfb2JqZWN0X2FuZF9ydW5faW5pdGlhbGl6ZXJzIG9ial8wIHRhYmxlID1cbiAgaWYgKE9iai5tYWdpYyBvYmpfMCA6IGJvb2wpIHRoZW4gb2JqXzAgZWxzZSBiZWdpblxuICAgIGxldCBvYmogPSBjcmVhdGVfb2JqZWN0IHRhYmxlIGluXG4gICAgcnVuX2luaXRpYWxpemVycyBvYmogdGFibGU7XG4gICAgb2JqXG4gIGVuZFxuXG4oKiBFcXVpdmFsZW50IHByaW1pdGl2ZSBiZWxvd1xubGV0IHNlbmRzZWxmIG9iaiBsYWIgPVxuICAobWFnaWMgb2JqIDogKG9iaiAtPiB0KSBhcnJheSBhcnJheSkuKDApLihsYWIpIG9ialxuKilcbmV4dGVybmFsIHNlbmQgOiBvYmogLT4gdGFnIC0+ICdhID0gXCIlc2VuZFwiXG5leHRlcm5hbCBzZW5kY2FjaGUgOiBvYmogLT4gdGFnIC0+IHQgLT4gaW50IC0+ICdhID0gXCIlc2VuZGNhY2hlXCJcbmV4dGVybmFsIHNlbmRzZWxmIDogb2JqIC0+IGxhYmVsIC0+ICdhID0gXCIlc2VuZHNlbGZcIlxuZXh0ZXJuYWwgZ2V0X3B1YmxpY19tZXRob2QgOiBvYmogLT4gdGFnIC0+IGNsb3N1cmVcbiAgICA9IFwiY2FtbF9nZXRfcHVibGljX21ldGhvZFwiIFtAQG5vYWxsb2NdXG5cbigqKioqIHRhYmxlIGNvbGxlY3Rpb24gYWNjZXNzICoqKiopXG5cbnR5cGUgdGFibGVzID1cbiAgfCBFbXB0eVxuICB8IENvbnMgb2Yge2tleSA6IGNsb3N1cmU7IG11dGFibGUgZGF0YTogdGFibGVzOyBtdXRhYmxlIG5leHQ6IHRhYmxlc31cblxubGV0IHNldF9kYXRhIHRhYmxlcyB2ID0gbWF0Y2ggdGFibGVzIHdpdGhcbiAgfCBFbXB0eSAtPiBhc3NlcnQgZmFsc2VcbiAgfCBDb25zIHRhYmxlcyAtPiB0YWJsZXMuZGF0YSA8LSB2XG5sZXQgc2V0X25leHQgdGFibGVzIHYgPSBtYXRjaCB0YWJsZXMgd2l0aFxuICB8IEVtcHR5IC0+IGFzc2VydCBmYWxzZVxuICB8IENvbnMgdGFibGVzIC0+IHRhYmxlcy5uZXh0IDwtIHZcbmxldCBnZXRfa2V5ID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPiBhc3NlcnQgZmFsc2VcbiAgfCBDb25zIHRhYmxlcyAtPiB0YWJsZXMua2V5XG5sZXQgZ2V0X2RhdGEgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+IGFzc2VydCBmYWxzZVxuICB8IENvbnMgdGFibGVzIC0+IHRhYmxlcy5kYXRhXG5sZXQgZ2V0X25leHQgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+IGFzc2VydCBmYWxzZVxuICB8IENvbnMgdGFibGVzIC0+IHRhYmxlcy5uZXh0XG5cbmxldCBidWlsZF9wYXRoIG4ga2V5cyB0YWJsZXMgPVxuICBsZXQgcmVzID0gQ29ucyB7a2V5ID0gT2JqLm1hZ2ljIDA7IGRhdGEgPSBFbXB0eTsgbmV4dCA9IEVtcHR5fSBpblxuICBsZXQgciA9IHJlZiByZXMgaW5cbiAgZm9yIGkgPSAwIHRvIG4gZG9cbiAgICByIDo9IENvbnMge2tleSA9IGtleXMuKGkpOyBkYXRhID0gIXI7IG5leHQgPSBFbXB0eX1cbiAgZG9uZTtcbiAgc2V0X2RhdGEgdGFibGVzICFyO1xuICByZXNcblxubGV0IHJlYyBsb29rdXBfa2V5cyBpIGtleXMgdGFibGVzID1cbiAgaWYgaSA8IDAgdGhlbiB0YWJsZXMgZWxzZVxuICBsZXQga2V5ID0ga2V5cy4oaSkgaW5cbiAgbGV0IHJlYyBsb29rdXBfa2V5ICh0YWJsZXM6dGFibGVzKSA9XG4gICAgaWYgZ2V0X2tleSB0YWJsZXMgPT0ga2V5IHRoZW5cbiAgICAgIG1hdGNoIGdldF9kYXRhIHRhYmxlcyB3aXRoXG4gICAgICB8IEVtcHR5IC0+IGFzc2VydCBmYWxzZVxuICAgICAgfCBDb25zIF8gYXMgdGFibGVzX2RhdGEgLT5cbiAgICAgICAgICBsb29rdXBfa2V5cyAoaS0xKSBrZXlzIHRhYmxlc19kYXRhXG4gICAgZWxzZVxuICAgICAgbWF0Y2ggZ2V0X25leHQgdGFibGVzIHdpdGhcbiAgICAgIHwgQ29ucyBfIGFzIG5leHQgLT4gbG9va3VwX2tleSBuZXh0XG4gICAgICB8IEVtcHR5IC0+XG4gICAgICAgICAgbGV0IG5leHQgOiB0YWJsZXMgPSBDb25zIHtrZXk7IGRhdGEgPSBFbXB0eTsgbmV4dCA9IEVtcHR5fSBpblxuICAgICAgICAgIHNldF9uZXh0IHRhYmxlcyBuZXh0O1xuICAgICAgICAgIGJ1aWxkX3BhdGggKGktMSkga2V5cyBuZXh0XG4gIGluXG4gIGxvb2t1cF9rZXkgdGFibGVzXG5cbmxldCBsb29rdXBfdGFibGVzIHJvb3Qga2V5cyA9XG4gIG1hdGNoIGdldF9kYXRhIHJvb3Qgd2l0aFxuICB8IENvbnMgXyBhcyByb290X2RhdGEgLT5cbiAgICBsb29rdXBfa2V5cyAoQXJyYXkubGVuZ3RoIGtleXMgLSAxKSBrZXlzIHJvb3RfZGF0YVxuICB8IEVtcHR5IC0+XG4gICAgYnVpbGRfcGF0aCAoQXJyYXkubGVuZ3RoIGtleXMgLSAxKSBrZXlzIHJvb3RcblxuKCoqKiogYnVpbHRpbiBtZXRob2RzICoqKiopXG5cbmxldCBnZXRfY29uc3QgeCA9IHJldCAoZnVuIF9vYmogLT4geClcbmxldCBnZXRfdmFyIG4gICA9IHJldCAoZnVuIG9iaiAtPiBBcnJheS51bnNhZmVfZ2V0IG9iaiBuKVxubGV0IGdldF9lbnYgZSBuID1cbiAgcmV0IChmdW4gb2JqIC0+XG4gICAgQXJyYXkudW5zYWZlX2dldCAoT2JqLm1hZ2ljIChBcnJheS51bnNhZmVfZ2V0IG9iaiBlKSA6IG9iaikgbilcbmxldCBnZXRfbWV0aCBuICA9IHJldCAoZnVuIG9iaiAtPiBzZW5kc2VsZiBvYmogbilcbmxldCBzZXRfdmFyIG4gICA9IHJldCAoZnVuIG9iaiB4IC0+IEFycmF5LnVuc2FmZV9zZXQgb2JqIG4geClcbmxldCBhcHBfY29uc3QgZiB4ID0gcmV0IChmdW4gX29iaiAtPiBmIHgpXG5sZXQgYXBwX3ZhciBmIG4gICA9IHJldCAoZnVuIG9iaiAtPiBmIChBcnJheS51bnNhZmVfZ2V0IG9iaiBuKSlcbmxldCBhcHBfZW52IGYgZSBuID1cbiAgcmV0IChmdW4gb2JqIC0+XG4gICAgZiAoQXJyYXkudW5zYWZlX2dldCAoT2JqLm1hZ2ljIChBcnJheS51bnNhZmVfZ2V0IG9iaiBlKSA6IG9iaikgbikpXG5sZXQgYXBwX21ldGggZiBuICA9IHJldCAoZnVuIG9iaiAtPiBmIChzZW5kc2VsZiBvYmogbikpXG5sZXQgYXBwX2NvbnN0X2NvbnN0IGYgeCB5ID0gcmV0IChmdW4gX29iaiAtPiBmIHggeSlcbmxldCBhcHBfY29uc3RfdmFyIGYgeCBuICAgPSByZXQgKGZ1biBvYmogLT4gZiB4IChBcnJheS51bnNhZmVfZ2V0IG9iaiBuKSlcbmxldCBhcHBfY29uc3RfbWV0aCBmIHggbiA9IHJldCAoZnVuIG9iaiAtPiBmIHggKHNlbmRzZWxmIG9iaiBuKSlcbmxldCBhcHBfdmFyX2NvbnN0IGYgbiB4ID0gcmV0IChmdW4gb2JqIC0+IGYgKEFycmF5LnVuc2FmZV9nZXQgb2JqIG4pIHgpXG5sZXQgYXBwX21ldGhfY29uc3QgZiBuIHggPSByZXQgKGZ1biBvYmogLT4gZiAoc2VuZHNlbGYgb2JqIG4pIHgpXG5sZXQgYXBwX2NvbnN0X2VudiBmIHggZSBuID1cbiAgcmV0IChmdW4gb2JqIC0+XG4gICAgZiB4IChBcnJheS51bnNhZmVfZ2V0IChPYmoubWFnaWMgKEFycmF5LnVuc2FmZV9nZXQgb2JqIGUpIDogb2JqKSBuKSlcbmxldCBhcHBfZW52X2NvbnN0IGYgZSBuIHggPVxuICByZXQgKGZ1biBvYmogLT5cbiAgICBmIChBcnJheS51bnNhZmVfZ2V0IChPYmoubWFnaWMgKEFycmF5LnVuc2FmZV9nZXQgb2JqIGUpIDogb2JqKSBuKSB4KVxubGV0IG1ldGhfYXBwX2NvbnN0IG4geCA9IHJldCAoZnVuIG9iaiAtPiAoc2VuZHNlbGYgb2JqIG4gOiBfIC0+IF8pIHgpXG5sZXQgbWV0aF9hcHBfdmFyIG4gbSA9XG4gIHJldCAoZnVuIG9iaiAtPiAoc2VuZHNlbGYgb2JqIG4gOiBfIC0+IF8pIChBcnJheS51bnNhZmVfZ2V0IG9iaiBtKSlcbmxldCBtZXRoX2FwcF9lbnYgbiBlIG0gPVxuICByZXQgKGZ1biBvYmogLT4gKHNlbmRzZWxmIG9iaiBuIDogXyAtPiBfKVxuICAgICAgKEFycmF5LnVuc2FmZV9nZXQgKE9iai5tYWdpYyAoQXJyYXkudW5zYWZlX2dldCBvYmogZSkgOiBvYmopIG0pKVxubGV0IG1ldGhfYXBwX21ldGggbiBtID1cbiAgcmV0IChmdW4gb2JqIC0+IChzZW5kc2VsZiBvYmogbiA6IF8gLT4gXykgKHNlbmRzZWxmIG9iaiBtKSlcbmxldCBzZW5kX2NvbnN0IG0geCBjID1cbiAgcmV0IChmdW4gb2JqIC0+IHNlbmRjYWNoZSB4IG0gKEFycmF5LnVuc2FmZV9nZXQgb2JqIDApIGMpXG5sZXQgc2VuZF92YXIgbSBuIGMgPVxuICByZXQgKGZ1biBvYmogLT5cbiAgICBzZW5kY2FjaGUgKE9iai5tYWdpYyAoQXJyYXkudW5zYWZlX2dldCBvYmogbikgOiBvYmopIG1cbiAgICAgIChBcnJheS51bnNhZmVfZ2V0IG9iaiAwKSBjKVxubGV0IHNlbmRfZW52IG0gZSBuIGMgPVxuICByZXQgKGZ1biBvYmogLT5cbiAgICBzZW5kY2FjaGVcbiAgICAgIChPYmoubWFnaWMgKEFycmF5LnVuc2FmZV9nZXRcbiAgICAgICAgICAgICAgICAgICAgKE9iai5tYWdpYyAoQXJyYXkudW5zYWZlX2dldCBvYmogZSkgOiBvYmopIG4pIDogb2JqKVxuICAgICAgbSAoQXJyYXkudW5zYWZlX2dldCBvYmogMCkgYylcbmxldCBzZW5kX21ldGggbSBuIGMgPVxuICByZXQgKGZ1biBvYmogLT5cbiAgICBzZW5kY2FjaGUgKHNlbmRzZWxmIG9iaiBuKSBtIChBcnJheS51bnNhZmVfZ2V0IG9iaiAwKSBjKVxubGV0IG5ld19jYWNoZSB0YWJsZSA9XG4gIGxldCBuID0gbmV3X21ldGhvZCB0YWJsZSBpblxuICBsZXQgbiA9XG4gICAgaWYgbiBtb2QgMiA9IDAgfHwgbiA+IDIgKyBtYWdpYyB0YWJsZS5tZXRob2RzLigxKSAqIDE2IC8gU3lzLndvcmRfc2l6ZVxuICAgIHRoZW4gbiBlbHNlIG5ld19tZXRob2QgdGFibGVcbiAgaW5cbiAgdGFibGUubWV0aG9kcy4obikgPC0gT2JqLm1hZ2ljIDA7XG4gIG5cblxudHlwZSBpbXBsID1cbiAgICBHZXRDb25zdFxuICB8IEdldFZhclxuICB8IEdldEVudlxuICB8IEdldE1ldGhcbiAgfCBTZXRWYXJcbiAgfCBBcHBDb25zdFxuICB8IEFwcFZhclxuICB8IEFwcEVudlxuICB8IEFwcE1ldGhcbiAgfCBBcHBDb25zdENvbnN0XG4gIHwgQXBwQ29uc3RWYXJcbiAgfCBBcHBDb25zdEVudlxuICB8IEFwcENvbnN0TWV0aFxuICB8IEFwcFZhckNvbnN0XG4gIHwgQXBwRW52Q29uc3RcbiAgfCBBcHBNZXRoQ29uc3RcbiAgfCBNZXRoQXBwQ29uc3RcbiAgfCBNZXRoQXBwVmFyXG4gIHwgTWV0aEFwcEVudlxuICB8IE1ldGhBcHBNZXRoXG4gIHwgU2VuZENvbnN0XG4gIHwgU2VuZFZhclxuICB8IFNlbmRFbnZcbiAgfCBTZW5kTWV0aFxuICB8IENsb3N1cmUgb2YgY2xvc3VyZVxuXG5sZXQgbWV0aG9kX2ltcGwgdGFibGUgaSBhcnIgPVxuICBsZXQgbmV4dCAoKSA9IGluY3IgaTsgbWFnaWMgYXJyLighaSkgaW5cbiAgbWF0Y2ggbmV4dCgpIHdpdGhcbiAgICBHZXRDb25zdCAtPiBsZXQgeCA6IHQgPSBuZXh0KCkgaW4gZ2V0X2NvbnN0IHhcbiAgfCBHZXRWYXIgICAtPiBsZXQgbiA9IG5leHQoKSBpbiBnZXRfdmFyIG5cbiAgfCBHZXRFbnYgICAtPiBsZXQgZSA9IG5leHQoKSBpbiBsZXQgbiA9IG5leHQoKSBpbiBnZXRfZW52IGUgblxuICB8IEdldE1ldGggIC0+IGxldCBuID0gbmV4dCgpIGluIGdldF9tZXRoIG5cbiAgfCBTZXRWYXIgICAtPiBsZXQgbiA9IG5leHQoKSBpbiBzZXRfdmFyIG5cbiAgfCBBcHBDb25zdCAtPiBsZXQgZiA9IG5leHQoKSBpbiBsZXQgeCA9IG5leHQoKSBpbiBhcHBfY29uc3QgZiB4XG4gIHwgQXBwVmFyICAgLT4gbGV0IGYgPSBuZXh0KCkgaW4gbGV0IG4gPSBuZXh0ICgpIGluIGFwcF92YXIgZiBuXG4gIHwgQXBwRW52ICAgLT5cbiAgICAgIGxldCBmID0gbmV4dCgpIGluICBsZXQgZSA9IG5leHQoKSBpbiBsZXQgbiA9IG5leHQoKSBpblxuICAgICAgYXBwX2VudiBmIGUgblxuICB8IEFwcE1ldGggIC0+IGxldCBmID0gbmV4dCgpIGluIGxldCBuID0gbmV4dCAoKSBpbiBhcHBfbWV0aCBmIG5cbiAgfCBBcHBDb25zdENvbnN0IC0+XG4gICAgICBsZXQgZiA9IG5leHQoKSBpbiBsZXQgeCA9IG5leHQoKSBpbiBsZXQgeSA9IG5leHQoKSBpblxuICAgICAgYXBwX2NvbnN0X2NvbnN0IGYgeCB5XG4gIHwgQXBwQ29uc3RWYXIgLT5cbiAgICAgIGxldCBmID0gbmV4dCgpIGluIGxldCB4ID0gbmV4dCgpIGluIGxldCBuID0gbmV4dCgpIGluXG4gICAgICBhcHBfY29uc3RfdmFyIGYgeCBuXG4gIHwgQXBwQ29uc3RFbnYgLT5cbiAgICAgIGxldCBmID0gbmV4dCgpIGluIGxldCB4ID0gbmV4dCgpIGluIGxldCBlID0gbmV4dCAoKSBpbiBsZXQgbiA9IG5leHQoKSBpblxuICAgICAgYXBwX2NvbnN0X2VudiBmIHggZSBuXG4gIHwgQXBwQ29uc3RNZXRoIC0+XG4gICAgICBsZXQgZiA9IG5leHQoKSBpbiBsZXQgeCA9IG5leHQoKSBpbiBsZXQgbiA9IG5leHQoKSBpblxuICAgICAgYXBwX2NvbnN0X21ldGggZiB4IG5cbiAgfCBBcHBWYXJDb25zdCAtPlxuICAgICAgbGV0IGYgPSBuZXh0KCkgaW4gbGV0IG4gPSBuZXh0KCkgaW4gbGV0IHggPSBuZXh0KCkgaW5cbiAgICAgIGFwcF92YXJfY29uc3QgZiBuIHhcbiAgfCBBcHBFbnZDb25zdCAtPlxuICAgICAgbGV0IGYgPSBuZXh0KCkgaW4gbGV0IGUgPSBuZXh0ICgpIGluIGxldCBuID0gbmV4dCgpIGluIGxldCB4ID0gbmV4dCgpIGluXG4gICAgICBhcHBfZW52X2NvbnN0IGYgZSBuIHhcbiAgfCBBcHBNZXRoQ29uc3QgLT5cbiAgICAgIGxldCBmID0gbmV4dCgpIGluIGxldCBuID0gbmV4dCgpIGluIGxldCB4ID0gbmV4dCgpIGluXG4gICAgICBhcHBfbWV0aF9jb25zdCBmIG4geFxuICB8IE1ldGhBcHBDb25zdCAtPlxuICAgICAgbGV0IG4gPSBuZXh0KCkgaW4gbGV0IHggPSBuZXh0KCkgaW4gbWV0aF9hcHBfY29uc3QgbiB4XG4gIHwgTWV0aEFwcFZhciAtPlxuICAgICAgbGV0IG4gPSBuZXh0KCkgaW4gbGV0IG0gPSBuZXh0KCkgaW4gbWV0aF9hcHBfdmFyIG4gbVxuICB8IE1ldGhBcHBFbnYgLT5cbiAgICAgIGxldCBuID0gbmV4dCgpIGluIGxldCBlID0gbmV4dCgpIGluIGxldCBtID0gbmV4dCgpIGluXG4gICAgICBtZXRoX2FwcF9lbnYgbiBlIG1cbiAgfCBNZXRoQXBwTWV0aCAtPlxuICAgICAgbGV0IG4gPSBuZXh0KCkgaW4gbGV0IG0gPSBuZXh0KCkgaW4gbWV0aF9hcHBfbWV0aCBuIG1cbiAgfCBTZW5kQ29uc3QgLT5cbiAgICAgIGxldCBtID0gbmV4dCgpIGluIGxldCB4ID0gbmV4dCgpIGluIHNlbmRfY29uc3QgbSB4IChuZXdfY2FjaGUgdGFibGUpXG4gIHwgU2VuZFZhciAtPlxuICAgICAgbGV0IG0gPSBuZXh0KCkgaW4gbGV0IG4gPSBuZXh0ICgpIGluIHNlbmRfdmFyIG0gbiAobmV3X2NhY2hlIHRhYmxlKVxuICB8IFNlbmRFbnYgLT5cbiAgICAgIGxldCBtID0gbmV4dCgpIGluIGxldCBlID0gbmV4dCgpIGluIGxldCBuID0gbmV4dCgpIGluXG4gICAgICBzZW5kX2VudiBtIGUgbiAobmV3X2NhY2hlIHRhYmxlKVxuICB8IFNlbmRNZXRoIC0+XG4gICAgICBsZXQgbSA9IG5leHQoKSBpbiBsZXQgbiA9IG5leHQgKCkgaW4gc2VuZF9tZXRoIG0gbiAobmV3X2NhY2hlIHRhYmxlKVxuICB8IENsb3N1cmUgXyBhcyBjbG8gLT4gbWFnaWMgY2xvXG5cbmxldCBzZXRfbWV0aG9kcyB0YWJsZSBtZXRob2RzID1cbiAgbGV0IGxlbiA9IEFycmF5Lmxlbmd0aCBtZXRob2RzIGluIGxldCBpID0gcmVmIDAgaW5cbiAgd2hpbGUgIWkgPCBsZW4gZG9cbiAgICBsZXQgbGFiZWwgPSBtZXRob2RzLighaSkgaW4gbGV0IGNsbyA9IG1ldGhvZF9pbXBsIHRhYmxlIGkgbWV0aG9kcyBpblxuICAgIHNldF9tZXRob2QgdGFibGUgbGFiZWwgY2xvO1xuICAgIGluY3IgaVxuICBkb25lXG5cbigqKioqIFN0YXRpc3RpY3MgKioqKilcblxudHlwZSBzdGF0cyA9XG4gIHsgY2xhc3NlczogaW50OyBtZXRob2RzOiBpbnQ7IGluc3RfdmFyczogaW50OyB9XG5cbmxldCBzdGF0cyAoKSA9XG4gIHsgY2xhc3NlcyA9ICF0YWJsZV9jb3VudDtcbiAgICBtZXRob2RzID0gIW1ldGhvZF9jb3VudDsgaW5zdF92YXJzID0gIWluc3RfdmFyX2NvdW50OyB9XG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDA0IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbnR5cGUgc2hhcGUgPVxuICB8IEZ1bmN0aW9uXG4gIHwgTGF6eVxuICB8IENsYXNzXG4gIHwgTW9kdWxlIG9mIHNoYXBlIGFycmF5XG4gIHwgVmFsdWUgb2YgT2JqLnRcblxubGV0IHJlYyBpbml0X21vZF9maWVsZCBtb2R1IGkgbG9jIHNoYXBlID1cbiAgbGV0IGluaXQgPVxuICAgIG1hdGNoIHNoYXBlIHdpdGhcbiAgICB8IEZ1bmN0aW9uIC0+XG4gICAgICAgbGV0IHJlYyBmbiAoeCA6ICdhKSA9XG4gICAgICAgICBsZXQgZm4nIDogJ2EgLT4gJ2IgPSBPYmoub2JqIChPYmouZmllbGQgbW9kdSBpKSBpblxuICAgICAgICAgaWYgZm4gPT0gZm4nIHRoZW5cbiAgICAgICAgICAgcmFpc2UgKFVuZGVmaW5lZF9yZWN1cnNpdmVfbW9kdWxlIGxvYylcbiAgICAgICAgIGVsc2VcbiAgICAgICAgICAgZm4nIHggaW5cbiAgICAgICBPYmoucmVwciBmblxuICAgIHwgTGF6eSAtPlxuICAgICAgIGxldCByZWMgbCA9XG4gICAgICAgICBsYXp5IChcbiAgICAgICAgICAgbGV0IGwnID0gT2JqLm9iaiAoT2JqLmZpZWxkIG1vZHUgaSkgaW5cbiAgICAgICAgICAgaWYgbCA9PSBsJyB0aGVuXG4gICAgICAgICAgICAgcmFpc2UgKFVuZGVmaW5lZF9yZWN1cnNpdmVfbW9kdWxlIGxvYylcbiAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgIExhenkuZm9yY2UgbCcpIGluXG4gICAgICAgT2JqLnJlcHIgbFxuICAgIHwgQ2xhc3MgLT5cbiAgICAgICBPYmoucmVwciAoQ2FtbGludGVybmFsT08uZHVtbXlfY2xhc3MgbG9jKVxuICAgIHwgTW9kdWxlIGNvbXBzIC0+XG4gICAgICAgT2JqLnJlcHIgKGluaXRfbW9kX2Jsb2NrIGxvYyBjb21wcylcbiAgICB8IFZhbHVlIHYgLT4gdlxuICBpblxuICBPYmouc2V0X2ZpZWxkIG1vZHUgaSBpbml0XG5cbmFuZCBpbml0X21vZF9ibG9jayBsb2MgY29tcHMgPVxuICBsZXQgbGVuZ3RoID0gQXJyYXkubGVuZ3RoIGNvbXBzIGluXG4gIGxldCBtb2R1ID0gT2JqLm5ld19ibG9jayAwIGxlbmd0aCBpblxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIC0gMSBkb1xuICAgIGluaXRfbW9kX2ZpZWxkIG1vZHUgaSBsb2MgY29tcHMuKGkpXG4gIGRvbmU7XG4gIG1vZHVcblxubGV0IGluaXRfbW9kIGxvYyBzaGFwZSA9XG4gIG1hdGNoIHNoYXBlIHdpdGhcbiAgfCBNb2R1bGUgY29tcHMgLT5cbiAgICAgT2JqLnJlcHIgKGluaXRfbW9kX2Jsb2NrIGxvYyBjb21wcylcbiAgfCBfIC0+IGZhaWx3aXRoIFwiQ2FtbGludGVybmFsTW9kLmluaXRfbW9kOiBub3QgYSBtb2R1bGVcIlxuXG5sZXQgcmVjIHVwZGF0ZV9tb2RfZmllbGQgbW9kdSBpIHNoYXBlIG4gPVxuICBtYXRjaCBzaGFwZSB3aXRoXG4gIHwgRnVuY3Rpb24gfCBMYXp5IC0+XG4gICAgIE9iai5zZXRfZmllbGQgbW9kdSBpIG5cbiAgfCBWYWx1ZSBfIC0+XG4gICAgICgpICgqIHRoZSB2YWx1ZSBpcyBhbHJlYWR5IHRoZXJlICopXG4gIHwgQ2xhc3MgLT5cbiAgICAgYXNzZXJ0IChPYmoudGFnIG4gPSAwICYmIE9iai5zaXplIG4gPSA0KTtcbiAgICAgbGV0IGNsID0gT2JqLmZpZWxkIG1vZHUgaSBpblxuICAgICBmb3IgaiA9IDAgdG8gMyBkb1xuICAgICAgIE9iai5zZXRfZmllbGQgY2wgaiAoT2JqLmZpZWxkIG4gailcbiAgICAgZG9uZVxuICB8IE1vZHVsZSBjb21wcyAtPlxuICAgICB1cGRhdGVfbW9kX2Jsb2NrIGNvbXBzIChPYmouZmllbGQgbW9kdSBpKSBuXG5cbmFuZCB1cGRhdGVfbW9kX2Jsb2NrIGNvbXBzIG8gbiA9XG4gIGFzc2VydCAoT2JqLnRhZyBuID0gMCAmJiBPYmouc2l6ZSBuID49IEFycmF5Lmxlbmd0aCBjb21wcyk7XG4gIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggY29tcHMgLSAxIGRvXG4gICAgdXBkYXRlX21vZF9maWVsZCBvIGkgY29tcHMuKGkpIChPYmouZmllbGQgbiBpKVxuICBkb25lXG5cbmxldCB1cGRhdGVfbW9kIHNoYXBlIG8gbiA9XG4gIG1hdGNoIHNoYXBlIHdpdGhcbiAgfCBNb2R1bGUgY29tcHMgLT5cbiAgICAgdXBkYXRlX21vZF9ibG9jayBjb21wcyBvIG5cbiAgfCBfIC0+IGZhaWx3aXRoIFwiQ2FtbGludGVybmFsTW9kLnVwZGF0ZV9tb2Q6IG5vdCBhIG1vZHVsZVwiXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbltAQEBvY2FtbC53YXJuaW5nIFwiLTNcIl0gKCogaWdub3JlIGRlcHJlY2F0aW9uIHdhcm5pbmcgYWJvdXQgbW9kdWxlIFN0cmVhbSAqKVxuXG50eXBlIHRva2VuID1cbiAgICBLd2Qgb2Ygc3RyaW5nXG4gIHwgSWRlbnQgb2Ygc3RyaW5nXG4gIHwgSW50IG9mIGludFxuICB8IEZsb2F0IG9mIGZsb2F0XG4gIHwgU3RyaW5nIG9mIHN0cmluZ1xuICB8IENoYXIgb2YgY2hhclxuXG4oKiBUaGUgc3RyaW5nIGJ1ZmZlcmluZyBtYWNoaW5lcnkgKilcblxubGV0IGluaXRpYWxfYnVmZmVyID0gQnl0ZXMuY3JlYXRlIDMyXG5cbmxldCBidWZmZXIgPSByZWYgaW5pdGlhbF9idWZmZXJcbmxldCBidWZwb3MgPSByZWYgMFxuXG5sZXQgcmVzZXRfYnVmZmVyICgpID0gYnVmZmVyIDo9IGluaXRpYWxfYnVmZmVyOyBidWZwb3MgOj0gMFxuXG5sZXQgc3RvcmUgYyA9XG4gIGlmICFidWZwb3MgPj0gQnl0ZXMubGVuZ3RoICFidWZmZXIgdGhlbiBiZWdpblxuICAgIGxldCBuZXdidWZmZXIgPSBCeXRlcy5jcmVhdGUgKDIgKiAhYnVmcG9zKSBpblxuICAgIEJ5dGVzLmJsaXQgIWJ1ZmZlciAwIG5ld2J1ZmZlciAwICFidWZwb3M7XG4gICAgYnVmZmVyIDo9IG5ld2J1ZmZlclxuICBlbmQ7XG4gIEJ5dGVzLnNldCAhYnVmZmVyICFidWZwb3MgYztcbiAgaW5jciBidWZwb3NcblxubGV0IGdldF9zdHJpbmcgKCkgPVxuICBsZXQgcyA9IEJ5dGVzLnN1Yl9zdHJpbmcgIWJ1ZmZlciAwICFidWZwb3MgaW4gYnVmZmVyIDo9IGluaXRpYWxfYnVmZmVyOyBzXG5cbigqIFRoZSBsZXhlciAqKVxuXG5sZXQgbWFrZV9sZXhlciBrZXl3b3JkcyA9XG4gIGxldCBrd2RfdGFibGUgPSBIYXNodGJsLmNyZWF0ZSAxNyBpblxuICBMaXN0Lml0ZXIgKGZ1biBzIC0+IEhhc2h0YmwuYWRkIGt3ZF90YWJsZSBzIChLd2QgcykpIGtleXdvcmRzO1xuICBsZXQgaWRlbnRfb3Jfa2V5d29yZCBpZCA9XG4gICAgdHJ5IEhhc2h0YmwuZmluZCBrd2RfdGFibGUgaWQgd2l0aFxuICAgICAgTm90X2ZvdW5kIC0+IElkZW50IGlkXG4gIGFuZCBrZXl3b3JkX29yX2Vycm9yIGMgPVxuICAgIGxldCBzID0gU3RyaW5nLm1ha2UgMSBjIGluXG4gICAgdHJ5IEhhc2h0YmwuZmluZCBrd2RfdGFibGUgcyB3aXRoXG4gICAgICBOb3RfZm91bmQgLT4gcmFpc2UgKFN0cmVhbS5FcnJvciAoXCJJbGxlZ2FsIGNoYXJhY3RlciBcIiBeIHMpKVxuICBpblxuICBsZXQgcmVjIG5leHRfdG9rZW4gKHN0cm1fXyA6IF8gU3RyZWFtLnQpID1cbiAgICBtYXRjaCBTdHJlYW0ucGVlayBzdHJtX18gd2l0aFxuICAgICAgU29tZSAoJyAnIHwgJ1xcMDEwJyB8ICdcXDAxMycgfCAnXFwwMDknIHwgJ1xcMDI2JyB8ICdcXDAxMicpIC0+XG4gICAgICAgIFN0cmVhbS5qdW5rIHN0cm1fXzsgbmV4dF90b2tlbiBzdHJtX19cbiAgICB8IFNvbWUgKCdBJy4uJ1onIHwgJ2EnLi4neicgfCAnXycgfCAnXFwxOTInLi4nXFwyNTUnIGFzIGMpIC0+XG4gICAgICAgIFN0cmVhbS5qdW5rIHN0cm1fXztcbiAgICAgICAgbGV0IHMgPSBzdHJtX18gaW4gcmVzZXRfYnVmZmVyICgpOyBzdG9yZSBjOyBpZGVudCBzXG4gICAgfCBTb21lXG4gICAgICAgICgnIScgfCAnJScgfCAnJicgfCAnJCcgfCAnIycgfCAnKycgfCAnLycgfCAnOicgfCAnPCcgfCAnPScgfCAnPicgfFxuICAgICAgICAgJz8nIHwgJ0AnIHwgJ1xcXFwnIHwgJ34nIHwgJ14nIHwgJ3wnIHwgJyonIGFzIGMpIC0+XG4gICAgICAgIFN0cmVhbS5qdW5rIHN0cm1fXztcbiAgICAgICAgbGV0IHMgPSBzdHJtX18gaW4gcmVzZXRfYnVmZmVyICgpOyBzdG9yZSBjOyBpZGVudDIgc1xuICAgIHwgU29tZSAoJzAnLi4nOScgYXMgYykgLT5cbiAgICAgICAgU3RyZWFtLmp1bmsgc3RybV9fO1xuICAgICAgICBsZXQgcyA9IHN0cm1fXyBpbiByZXNldF9idWZmZXIgKCk7IHN0b3JlIGM7IG51bWJlciBzXG4gICAgfCBTb21lICdcXCcnIC0+XG4gICAgICAgIFN0cmVhbS5qdW5rIHN0cm1fXztcbiAgICAgICAgbGV0IGMgPVxuICAgICAgICAgIHRyeSBjaGFyIHN0cm1fXyB3aXRoXG4gICAgICAgICAgICBTdHJlYW0uRmFpbHVyZSAtPiByYWlzZSAoU3RyZWFtLkVycm9yIFwiXCIpXG4gICAgICAgIGluXG4gICAgICAgIGJlZ2luIG1hdGNoIFN0cmVhbS5wZWVrIHN0cm1fXyB3aXRoXG4gICAgICAgICAgU29tZSAnXFwnJyAtPiBTdHJlYW0uanVuayBzdHJtX187IFNvbWUgKENoYXIgYylcbiAgICAgICAgfCBfIC0+IHJhaXNlIChTdHJlYW0uRXJyb3IgXCJcIilcbiAgICAgICAgZW5kXG4gICAgfCBTb21lICdcXFwiJyAtPlxuICAgICAgICBTdHJlYW0uanVuayBzdHJtX187XG4gICAgICAgIGxldCBzID0gc3RybV9fIGluIHJlc2V0X2J1ZmZlciAoKTsgU29tZSAoU3RyaW5nIChzdHJpbmcgcykpXG4gICAgfCBTb21lICctJyAtPiBTdHJlYW0uanVuayBzdHJtX187IG5lZ19udW1iZXIgc3RybV9fXG4gICAgfCBTb21lICcoJyAtPiBTdHJlYW0uanVuayBzdHJtX187IG1heWJlX2NvbW1lbnQgc3RybV9fXG4gICAgfCBTb21lIGMgLT4gU3RyZWFtLmp1bmsgc3RybV9fOyBTb21lIChrZXl3b3JkX29yX2Vycm9yIGMpXG4gICAgfCBfIC0+IE5vbmVcbiAgYW5kIGlkZW50IChzdHJtX18gOiBfIFN0cmVhbS50KSA9XG4gICAgbWF0Y2ggU3RyZWFtLnBlZWsgc3RybV9fIHdpdGhcbiAgICAgIFNvbWVcbiAgICAgICAgKCdBJy4uJ1onIHwgJ2EnLi4neicgfCAnXFwxOTInLi4nXFwyNTUnIHwgJzAnLi4nOScgfCAnXycgfCAnXFwnJyBhcyBjKSAtPlxuICAgICAgICBTdHJlYW0uanVuayBzdHJtX187IGxldCBzID0gc3RybV9fIGluIHN0b3JlIGM7IGlkZW50IHNcbiAgICB8IF8gLT4gU29tZSAoaWRlbnRfb3Jfa2V5d29yZCAoZ2V0X3N0cmluZyAoKSkpXG4gIGFuZCBpZGVudDIgKHN0cm1fXyA6IF8gU3RyZWFtLnQpID1cbiAgICBtYXRjaCBTdHJlYW0ucGVlayBzdHJtX18gd2l0aFxuICAgICAgU29tZVxuICAgICAgICAoJyEnIHwgJyUnIHwgJyYnIHwgJyQnIHwgJyMnIHwgJysnIHwgJy0nIHwgJy8nIHwgJzonIHwgJzwnIHwgJz0nIHxcbiAgICAgICAgICc+JyB8ICc/JyB8ICdAJyB8ICdcXFxcJyB8ICd+JyB8ICdeJyB8ICd8JyB8ICcqJyBhcyBjKSAtPlxuICAgICAgICBTdHJlYW0uanVuayBzdHJtX187IGxldCBzID0gc3RybV9fIGluIHN0b3JlIGM7IGlkZW50MiBzXG4gICAgfCBfIC0+IFNvbWUgKGlkZW50X29yX2tleXdvcmQgKGdldF9zdHJpbmcgKCkpKVxuICBhbmQgbmVnX251bWJlciAoc3RybV9fIDogXyBTdHJlYW0udCkgPVxuICAgIG1hdGNoIFN0cmVhbS5wZWVrIHN0cm1fXyB3aXRoXG4gICAgICBTb21lICgnMCcuLic5JyBhcyBjKSAtPlxuICAgICAgICBTdHJlYW0uanVuayBzdHJtX187XG4gICAgICAgIGxldCBzID0gc3RybV9fIGluIHJlc2V0X2J1ZmZlciAoKTsgc3RvcmUgJy0nOyBzdG9yZSBjOyBudW1iZXIgc1xuICAgIHwgXyAtPiBsZXQgcyA9IHN0cm1fXyBpbiByZXNldF9idWZmZXIgKCk7IHN0b3JlICctJzsgaWRlbnQyIHNcbiAgYW5kIG51bWJlciAoc3RybV9fIDogXyBTdHJlYW0udCkgPVxuICAgIG1hdGNoIFN0cmVhbS5wZWVrIHN0cm1fXyB3aXRoXG4gICAgICBTb21lICgnMCcuLic5JyBhcyBjKSAtPlxuICAgICAgICBTdHJlYW0uanVuayBzdHJtX187IGxldCBzID0gc3RybV9fIGluIHN0b3JlIGM7IG51bWJlciBzXG4gICAgfCBTb21lICcuJyAtPlxuICAgICAgICBTdHJlYW0uanVuayBzdHJtX187IGxldCBzID0gc3RybV9fIGluIHN0b3JlICcuJzsgZGVjaW1hbF9wYXJ0IHNcbiAgICB8IFNvbWUgKCdlJyB8ICdFJykgLT5cbiAgICAgICAgU3RyZWFtLmp1bmsgc3RybV9fOyBsZXQgcyA9IHN0cm1fXyBpbiBzdG9yZSAnRSc7IGV4cG9uZW50X3BhcnQgc1xuICAgIHwgXyAtPiBTb21lIChJbnQgKGludF9vZl9zdHJpbmcgKGdldF9zdHJpbmcgKCkpKSlcbiAgYW5kIGRlY2ltYWxfcGFydCAoc3RybV9fIDogXyBTdHJlYW0udCkgPVxuICAgIG1hdGNoIFN0cmVhbS5wZWVrIHN0cm1fXyB3aXRoXG4gICAgICBTb21lICgnMCcuLic5JyBhcyBjKSAtPlxuICAgICAgICBTdHJlYW0uanVuayBzdHJtX187IGxldCBzID0gc3RybV9fIGluIHN0b3JlIGM7IGRlY2ltYWxfcGFydCBzXG4gICAgfCBTb21lICgnZScgfCAnRScpIC0+XG4gICAgICAgIFN0cmVhbS5qdW5rIHN0cm1fXzsgbGV0IHMgPSBzdHJtX18gaW4gc3RvcmUgJ0UnOyBleHBvbmVudF9wYXJ0IHNcbiAgICB8IF8gLT4gU29tZSAoRmxvYXQgKGZsb2F0X29mX3N0cmluZyAoZ2V0X3N0cmluZyAoKSkpKVxuICBhbmQgZXhwb25lbnRfcGFydCAoc3RybV9fIDogXyBTdHJlYW0udCkgPVxuICAgIG1hdGNoIFN0cmVhbS5wZWVrIHN0cm1fXyB3aXRoXG4gICAgICBTb21lICgnKycgfCAnLScgYXMgYykgLT5cbiAgICAgICAgU3RyZWFtLmp1bmsgc3RybV9fOyBsZXQgcyA9IHN0cm1fXyBpbiBzdG9yZSBjOyBlbmRfZXhwb25lbnRfcGFydCBzXG4gICAgfCBfIC0+IGVuZF9leHBvbmVudF9wYXJ0IHN0cm1fX1xuICBhbmQgZW5kX2V4cG9uZW50X3BhcnQgKHN0cm1fXyA6IF8gU3RyZWFtLnQpID1cbiAgICBtYXRjaCBTdHJlYW0ucGVlayBzdHJtX18gd2l0aFxuICAgICAgU29tZSAoJzAnLi4nOScgYXMgYykgLT5cbiAgICAgICAgU3RyZWFtLmp1bmsgc3RybV9fOyBsZXQgcyA9IHN0cm1fXyBpbiBzdG9yZSBjOyBlbmRfZXhwb25lbnRfcGFydCBzXG4gICAgfCBfIC0+IFNvbWUgKEZsb2F0IChmbG9hdF9vZl9zdHJpbmcgKGdldF9zdHJpbmcgKCkpKSlcbiAgYW5kIHN0cmluZyAoc3RybV9fIDogXyBTdHJlYW0udCkgPVxuICAgIG1hdGNoIFN0cmVhbS5wZWVrIHN0cm1fXyB3aXRoXG4gICAgICBTb21lICdcXFwiJyAtPiBTdHJlYW0uanVuayBzdHJtX187IGdldF9zdHJpbmcgKClcbiAgICB8IFNvbWUgJ1xcXFwnIC0+XG4gICAgICAgIFN0cmVhbS5qdW5rIHN0cm1fXztcbiAgICAgICAgbGV0IGMgPVxuICAgICAgICAgIHRyeSBlc2NhcGUgc3RybV9fIHdpdGhcbiAgICAgICAgICAgIFN0cmVhbS5GYWlsdXJlIC0+IHJhaXNlIChTdHJlYW0uRXJyb3IgXCJcIilcbiAgICAgICAgaW5cbiAgICAgICAgbGV0IHMgPSBzdHJtX18gaW4gc3RvcmUgYzsgc3RyaW5nIHNcbiAgICB8IFNvbWUgYyAtPiBTdHJlYW0uanVuayBzdHJtX187IGxldCBzID0gc3RybV9fIGluIHN0b3JlIGM7IHN0cmluZyBzXG4gICAgfCBfIC0+IHJhaXNlIFN0cmVhbS5GYWlsdXJlXG4gIGFuZCBjaGFyIChzdHJtX18gOiBfIFN0cmVhbS50KSA9XG4gICAgbWF0Y2ggU3RyZWFtLnBlZWsgc3RybV9fIHdpdGhcbiAgICAgIFNvbWUgJ1xcXFwnIC0+XG4gICAgICAgIFN0cmVhbS5qdW5rIHN0cm1fXztcbiAgICAgICAgYmVnaW4gdHJ5IGVzY2FwZSBzdHJtX18gd2l0aFxuICAgICAgICAgIFN0cmVhbS5GYWlsdXJlIC0+IHJhaXNlIChTdHJlYW0uRXJyb3IgXCJcIilcbiAgICAgICAgZW5kXG4gICAgfCBTb21lIGMgLT4gU3RyZWFtLmp1bmsgc3RybV9fOyBjXG4gICAgfCBfIC0+IHJhaXNlIFN0cmVhbS5GYWlsdXJlXG4gIGFuZCBlc2NhcGUgKHN0cm1fXyA6IF8gU3RyZWFtLnQpID1cbiAgICBtYXRjaCBTdHJlYW0ucGVlayBzdHJtX18gd2l0aFxuICAgICAgU29tZSAnbicgLT4gU3RyZWFtLmp1bmsgc3RybV9fOyAnXFxuJ1xuICAgIHwgU29tZSAncicgLT4gU3RyZWFtLmp1bmsgc3RybV9fOyAnXFxyJ1xuICAgIHwgU29tZSAndCcgLT4gU3RyZWFtLmp1bmsgc3RybV9fOyAnXFx0J1xuICAgIHwgU29tZSAoJzAnLi4nOScgYXMgYzEpIC0+XG4gICAgICAgIFN0cmVhbS5qdW5rIHN0cm1fXztcbiAgICAgICAgYmVnaW4gbWF0Y2ggU3RyZWFtLnBlZWsgc3RybV9fIHdpdGhcbiAgICAgICAgICBTb21lICgnMCcuLic5JyBhcyBjMikgLT5cbiAgICAgICAgICAgIFN0cmVhbS5qdW5rIHN0cm1fXztcbiAgICAgICAgICAgIGJlZ2luIG1hdGNoIFN0cmVhbS5wZWVrIHN0cm1fXyB3aXRoXG4gICAgICAgICAgICAgIFNvbWUgKCcwJy4uJzknIGFzIGMzKSAtPlxuICAgICAgICAgICAgICAgIFN0cmVhbS5qdW5rIHN0cm1fXztcbiAgICAgICAgICAgICAgICBDaGFyLmNoclxuICAgICAgICAgICAgICAgICAgKChDaGFyLmNvZGUgYzEgLSA0OCkgKiAxMDAgKyAoQ2hhci5jb2RlIGMyIC0gNDgpICogMTAgK1xuICAgICAgICAgICAgICAgICAgICAgKENoYXIuY29kZSBjMyAtIDQ4KSlcbiAgICAgICAgICAgIHwgXyAtPiByYWlzZSAoU3RyZWFtLkVycm9yIFwiXCIpXG4gICAgICAgICAgICBlbmRcbiAgICAgICAgfCBfIC0+IHJhaXNlIChTdHJlYW0uRXJyb3IgXCJcIilcbiAgICAgICAgZW5kXG4gICAgfCBTb21lIGMgLT4gU3RyZWFtLmp1bmsgc3RybV9fOyBjXG4gICAgfCBfIC0+IHJhaXNlIFN0cmVhbS5GYWlsdXJlXG4gIGFuZCBtYXliZV9jb21tZW50IChzdHJtX18gOiBfIFN0cmVhbS50KSA9XG4gICAgbWF0Y2ggU3RyZWFtLnBlZWsgc3RybV9fIHdpdGhcbiAgICAgIFNvbWUgJyonIC0+XG4gICAgICAgIFN0cmVhbS5qdW5rIHN0cm1fXzsgbGV0IHMgPSBzdHJtX18gaW4gY29tbWVudCBzOyBuZXh0X3Rva2VuIHNcbiAgICB8IF8gLT4gU29tZSAoa2V5d29yZF9vcl9lcnJvciAnKCcpXG4gIGFuZCBjb21tZW50IChzdHJtX18gOiBfIFN0cmVhbS50KSA9XG4gICAgbWF0Y2ggU3RyZWFtLnBlZWsgc3RybV9fIHdpdGhcbiAgICAgIFNvbWUgJygnIC0+IFN0cmVhbS5qdW5rIHN0cm1fXzsgbWF5YmVfbmVzdGVkX2NvbW1lbnQgc3RybV9fXG4gICAgfCBTb21lICcqJyAtPiBTdHJlYW0uanVuayBzdHJtX187IG1heWJlX2VuZF9jb21tZW50IHN0cm1fX1xuICAgIHwgU29tZSBfIC0+IFN0cmVhbS5qdW5rIHN0cm1fXzsgY29tbWVudCBzdHJtX19cbiAgICB8IF8gLT4gcmFpc2UgU3RyZWFtLkZhaWx1cmVcbiAgYW5kIG1heWJlX25lc3RlZF9jb21tZW50IChzdHJtX18gOiBfIFN0cmVhbS50KSA9XG4gICAgbWF0Y2ggU3RyZWFtLnBlZWsgc3RybV9fIHdpdGhcbiAgICAgIFNvbWUgJyonIC0+IFN0cmVhbS5qdW5rIHN0cm1fXzsgbGV0IHMgPSBzdHJtX18gaW4gY29tbWVudCBzOyBjb21tZW50IHNcbiAgICB8IFNvbWUgXyAtPiBTdHJlYW0uanVuayBzdHJtX187IGNvbW1lbnQgc3RybV9fXG4gICAgfCBfIC0+IHJhaXNlIFN0cmVhbS5GYWlsdXJlXG4gIGFuZCBtYXliZV9lbmRfY29tbWVudCAoc3RybV9fIDogXyBTdHJlYW0udCkgPVxuICAgIG1hdGNoIFN0cmVhbS5wZWVrIHN0cm1fXyB3aXRoXG4gICAgICBTb21lICcpJyAtPiBTdHJlYW0uanVuayBzdHJtX187ICgpXG4gICAgfCBTb21lICcqJyAtPiBTdHJlYW0uanVuayBzdHJtX187IG1heWJlX2VuZF9jb21tZW50IHN0cm1fX1xuICAgIHwgU29tZSBfIC0+IFN0cmVhbS5qdW5rIHN0cm1fXzsgY29tbWVudCBzdHJtX19cbiAgICB8IF8gLT4gcmFpc2UgU3RyZWFtLkZhaWx1cmVcbiAgaW5cbiAgZnVuIGlucHV0IC0+IFN0cmVhbS5mcm9tIChmdW4gX2NvdW50IC0+IG5leHRfdG9rZW4gaW5wdXQpXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBEYW1pZW4gRG9saWdleiwgcHJvamV0IFBhcmEsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk3IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbltAQEBvY2FtbC53YXJuaW5nIFwiLTMyXCJdXG5cbm1vZHVsZSB0eXBlIFNlZWRlZFMgPSBzaWdcblxuICB0eXBlIGtleVxuICB0eXBlICEnYSB0XG4gIHZhbCBjcmVhdGUgOiA/cmFuZG9tICgqdGh3YXJ0IHRvb2xzL3N5bmNfc3RkbGliX2RvY3MqKSA6IGJvb2wgLT4gaW50IC0+ICdhIHRcbiAgdmFsIGNsZWFyIDogJ2EgdCAtPiB1bml0XG4gIHZhbCByZXNldCA6ICdhIHQgLT4gdW5pdFxuICB2YWwgY29weSA6ICdhIHQgLT4gJ2EgdFxuICB2YWwgYWRkIDogJ2EgdCAtPiBrZXkgLT4gJ2EgLT4gdW5pdFxuICB2YWwgcmVtb3ZlIDogJ2EgdCAtPiBrZXkgLT4gdW5pdFxuICB2YWwgZmluZCA6ICdhIHQgLT4ga2V5IC0+ICdhXG4gIHZhbCBmaW5kX29wdCA6ICdhIHQgLT4ga2V5IC0+ICdhIG9wdGlvblxuICB2YWwgZmluZF9hbGwgOiAnYSB0IC0+IGtleSAtPiAnYSBsaXN0XG4gIHZhbCByZXBsYWNlIDogJ2EgdCAtPiBrZXkgLT4gJ2EgLT4gdW5pdFxuICB2YWwgbWVtIDogJ2EgdCAtPiBrZXkgLT4gYm9vbFxuICB2YWwgaXRlciA6IChrZXkgLT4gJ2EgLT4gdW5pdCkgLT4gJ2EgdCAtPiB1bml0XG4gICAgW0BAYWxlcnQgb2xkX2VwaGVtZXJvbl9hcGkgXCJUaGlzIGZ1bmN0aW9uIHdvbid0IGJlIGF2YWlsYWJsZSBpbiA1LjBcIl1cbiAgdmFsIGZpbHRlcl9tYXBfaW5wbGFjZSA6IChrZXkgLT4gJ2EgLT4gJ2Egb3B0aW9uKSAtPiAnYSB0IC0+IHVuaXRcbiAgICBbQEBhbGVydCBvbGRfZXBoZW1lcm9uX2FwaSBcIlRoaXMgZnVuY3Rpb24gd29uJ3QgYmUgYXZhaWxhYmxlIGluIDUuMFwiXVxuICB2YWwgZm9sZCA6IChrZXkgLT4gJ2EgLT4gJ2IgLT4gJ2IpIC0+ICdhIHQgLT4gJ2IgLT4gJ2JcbiAgICBbQEBhbGVydCBvbGRfZXBoZW1lcm9uX2FwaSBcIlRoaXMgZnVuY3Rpb24gd29uJ3QgYmUgYXZhaWxhYmxlIGluIDUuMFwiXVxuICB2YWwgbGVuZ3RoIDogJ2EgdCAtPiBpbnRcbiAgdmFsIHN0YXRzIDogJ2EgdCAtPiBIYXNodGJsLnN0YXRpc3RpY3NcbiAgdmFsIHRvX3NlcSA6ICdhIHQgLT4gKGtleSAqICdhKSBTZXEudFxuICAgIFtAQGFsZXJ0IG9sZF9lcGhlbWVyb25fYXBpIFwiVGhpcyBmdW5jdGlvbiB3b24ndCBiZSBhdmFpbGFibGUgaW4gNS4wXCJdXG4gIHZhbCB0b19zZXFfa2V5cyA6IF8gdCAtPiBrZXkgU2VxLnRcbiAgICBbQEBhbGVydCBvbGRfZXBoZW1lcm9uX2FwaSBcIlRoaXMgZnVuY3Rpb24gd29uJ3QgYmUgYXZhaWxhYmxlIGluIDUuMFwiXVxuICB2YWwgdG9fc2VxX3ZhbHVlcyA6ICdhIHQgLT4gJ2EgU2VxLnRcbiAgICBbQEBhbGVydCBvbGRfZXBoZW1lcm9uX2FwaSBcIlRoaXMgZnVuY3Rpb24gd29uJ3QgYmUgYXZhaWxhYmxlIGluIDUuMFwiXVxuICB2YWwgYWRkX3NlcSA6ICdhIHQgLT4gKGtleSAqICdhKSBTZXEudCAtPiB1bml0XG4gIHZhbCByZXBsYWNlX3NlcSA6ICdhIHQgLT4gKGtleSAqICdhKSBTZXEudCAtPiB1bml0XG4gIHZhbCBvZl9zZXEgOiAoa2V5ICogJ2EpIFNlcS50IC0+ICdhIHRcbiAgdmFsIGNsZWFuOiAnYSB0IC0+IHVuaXRcbiAgdmFsIHN0YXRzX2FsaXZlOiAnYSB0IC0+IEhhc2h0Ymwuc3RhdGlzdGljc1xuICAgICgqKiBzYW1lIGFzIHshc3RhdHN9IGJ1dCBvbmx5IGNvdW50IHRoZSBhbGl2ZSBiaW5kaW5ncyAqKVxuZW5kXG5cbm1vZHVsZSB0eXBlIFMgPSBzaWdcblxuICB0eXBlIGtleVxuICB0eXBlICEnYSB0XG4gIHZhbCBjcmVhdGUgOiBpbnQgLT4gJ2EgdFxuICB2YWwgY2xlYXIgOiAnYSB0IC0+IHVuaXRcbiAgdmFsIHJlc2V0IDogJ2EgdCAtPiB1bml0XG4gIHZhbCBjb3B5IDogJ2EgdCAtPiAnYSB0XG4gIHZhbCBhZGQgOiAnYSB0IC0+IGtleSAtPiAnYSAtPiB1bml0XG4gIHZhbCByZW1vdmUgOiAnYSB0IC0+IGtleSAtPiB1bml0XG4gIHZhbCBmaW5kIDogJ2EgdCAtPiBrZXkgLT4gJ2FcbiAgdmFsIGZpbmRfb3B0IDogJ2EgdCAtPiBrZXkgLT4gJ2Egb3B0aW9uXG4gIHZhbCBmaW5kX2FsbCA6ICdhIHQgLT4ga2V5IC0+ICdhIGxpc3RcbiAgdmFsIHJlcGxhY2UgOiAnYSB0IC0+IGtleSAtPiAnYSAtPiB1bml0XG4gIHZhbCBtZW0gOiAnYSB0IC0+IGtleSAtPiBib29sXG4gIHZhbCBpdGVyIDogKGtleSAtPiAnYSAtPiB1bml0KSAtPiAnYSB0IC0+IHVuaXRcbiAgICBbQEBhbGVydCBvbGRfZXBoZW1lcm9uX2FwaSBcIlRoaXMgZnVuY3Rpb24gd29uJ3QgYmUgYXZhaWxhYmxlIGluIDUuMFwiXVxuICB2YWwgZmlsdGVyX21hcF9pbnBsYWNlIDogKGtleSAtPiAnYSAtPiAnYSBvcHRpb24pIC0+ICdhIHQgLT4gdW5pdFxuICAgIFtAQGFsZXJ0IG9sZF9lcGhlbWVyb25fYXBpIFwiVGhpcyBmdW5jdGlvbiB3b24ndCBiZSBhdmFpbGFibGUgaW4gNS4wXCJdXG4gIHZhbCBmb2xkIDogKGtleSAtPiAnYSAtPiAnYiAtPiAnYikgLT4gJ2EgdCAtPiAnYiAtPiAnYlxuICAgIFtAQGFsZXJ0IG9sZF9lcGhlbWVyb25fYXBpIFwiVGhpcyBmdW5jdGlvbiB3b24ndCBiZSBhdmFpbGFibGUgaW4gNS4wXCJdXG4gIHZhbCBsZW5ndGggOiAnYSB0IC0+IGludFxuICB2YWwgc3RhdHMgOiAnYSB0IC0+IEhhc2h0Ymwuc3RhdGlzdGljc1xuICB2YWwgdG9fc2VxIDogJ2EgdCAtPiAoa2V5ICogJ2EpIFNlcS50XG4gICAgW0BAYWxlcnQgb2xkX2VwaGVtZXJvbl9hcGkgXCJUaGlzIGZ1bmN0aW9uIHdvbid0IGJlIGF2YWlsYWJsZSBpbiA1LjBcIl1cbiAgdmFsIHRvX3NlcV9rZXlzIDogXyB0IC0+IGtleSBTZXEudFxuICAgIFtAQGFsZXJ0IG9sZF9lcGhlbWVyb25fYXBpIFwiVGhpcyBmdW5jdGlvbiB3b24ndCBiZSBhdmFpbGFibGUgaW4gNS4wXCJdXG4gIHZhbCB0b19zZXFfdmFsdWVzIDogJ2EgdCAtPiAnYSBTZXEudFxuICAgIFtAQGFsZXJ0IG9sZF9lcGhlbWVyb25fYXBpIFwiVGhpcyBmdW5jdGlvbiB3b24ndCBiZSBhdmFpbGFibGUgaW4gNS4wXCJdXG4gIHZhbCBhZGRfc2VxIDogJ2EgdCAtPiAoa2V5ICogJ2EpIFNlcS50IC0+IHVuaXRcbiAgdmFsIHJlcGxhY2Vfc2VxIDogJ2EgdCAtPiAoa2V5ICogJ2EpIFNlcS50IC0+IHVuaXRcbiAgdmFsIG9mX3NlcSA6IChrZXkgKiAnYSkgU2VxLnQgLT4gJ2EgdFxuICB2YWwgY2xlYW46ICdhIHQgLT4gdW5pdFxuICB2YWwgc3RhdHNfYWxpdmU6ICdhIHQgLT4gSGFzaHRibC5zdGF0aXN0aWNzXG4gICAgKCoqIHNhbWUgYXMgeyFzdGF0c30gYnV0IG9ubHkgY291bnQgdGhlIGFsaXZlIGJpbmRpbmdzICopXG5lbmRcblxubW9kdWxlIEdlbkhhc2hUYWJsZSA9IHN0cnVjdFxuXG4gIHR5cGUgZXF1YWwgPVxuICB8IEVUcnVlIHwgRUZhbHNlXG4gIHwgRURlYWQgKCoqIHRoZSBnYXJiYWdlIGNvbGxlY3RvciByZWNsYWltZWQgdGhlIGRhdGEgKilcblxuICBtb2R1bGUgTWFrZVNlZWRlZChIOiBzaWdcbiAgICB0eXBlIHRcbiAgICB0eXBlICdhIGNvbnRhaW5lclxuICAgIHZhbCBjcmVhdGU6IHQgLT4gJ2EgLT4gJ2EgY29udGFpbmVyXG4gICAgdmFsIGhhc2g6IGludCAtPiB0IC0+IGludFxuICAgIHZhbCBlcXVhbDogJ2EgY29udGFpbmVyIC0+IHQgLT4gZXF1YWxcbiAgICB2YWwgZ2V0X2RhdGE6ICdhIGNvbnRhaW5lciAtPiAnYSBvcHRpb25cbiAgICB2YWwgZ2V0X2tleTogJ2EgY29udGFpbmVyIC0+IHQgb3B0aW9uXG4gICAgdmFsIHNldF9rZXlfZGF0YTogJ2EgY29udGFpbmVyIC0+IHQgLT4gJ2EgLT4gdW5pdFxuICAgIHZhbCBjaGVja19rZXk6ICdhIGNvbnRhaW5lciAtPiBib29sXG4gIGVuZCkgOiBTZWVkZWRTIHdpdGggdHlwZSBrZXkgPSBILnRcbiAgPSBzdHJ1Y3RcblxuICAgIHR5cGUgJ2EgdCA9XG4gICAgICB7IG11dGFibGUgc2l6ZTogaW50OyAgICAgICAgICAgICAgICAgICgqIG51bWJlciBvZiBlbnRyaWVzICopXG4gICAgICAgIG11dGFibGUgZGF0YTogJ2EgYnVja2V0bGlzdCBhcnJheTsgICgqIHRoZSBidWNrZXRzICopXG4gICAgICAgIHNlZWQ6IGludDsgICAgICAgICAgICAgICAgICAgICAgICAgICgqIGZvciByYW5kb21pemF0aW9uICopXG4gICAgICAgIGluaXRpYWxfc2l6ZTogaW50OyAgICAgICAgICAgICAgICAgICgqIGluaXRpYWwgYXJyYXkgc2l6ZSAqKVxuICAgICAgfVxuXG4gICAgYW5kICdhIGJ1Y2tldGxpc3QgPVxuICAgIHwgRW1wdHlcbiAgICB8IENvbnMgb2YgaW50ICgqIGhhc2ggb2YgdGhlIGtleSAqKSAqICdhIEguY29udGFpbmVyICogJ2EgYnVja2V0bGlzdFxuXG4gICAgKCoqIHRoZSBoYXNoIG9mIHRoZSBrZXkgaXMga2VwdCBpbiBvcmRlciB0byB0ZXN0IHRoZSBlcXVhbGl0eSBvZiB0aGUgaGFzaFxuICAgICAgYmVmb3JlIHRoZSBrZXkuIFNhbWUgcmVhc29uIGFzIGZvciBXZWFrLk1ha2UgKilcblxuICAgIHR5cGUga2V5ID0gSC50XG5cbiAgICBsZXQgcmVjIHBvd2VyXzJfYWJvdmUgeCBuID1cbiAgICAgIGlmIHggPj0gbiB0aGVuIHhcbiAgICAgIGVsc2UgaWYgeCAqIDIgPiBTeXMubWF4X2FycmF5X2xlbmd0aCB0aGVuIHhcbiAgICAgIGVsc2UgcG93ZXJfMl9hYm92ZSAoeCAqIDIpIG5cblxuICAgIGxldCBwcm5nID0gbGF6eSAoUmFuZG9tLlN0YXRlLm1ha2Vfc2VsZl9pbml0KCkpXG5cbiAgICBsZXQgY3JlYXRlID8ocmFuZG9tID0gKEhhc2h0YmwuaXNfcmFuZG9taXplZCAoKSkpIGluaXRpYWxfc2l6ZSA9XG4gICAgICBsZXQgcyA9IHBvd2VyXzJfYWJvdmUgMTYgaW5pdGlhbF9zaXplIGluXG4gICAgICBsZXQgc2VlZCA9IGlmIHJhbmRvbSB0aGVuIFJhbmRvbS5TdGF0ZS5iaXRzIChMYXp5LmZvcmNlIHBybmcpIGVsc2UgMCBpblxuICAgICAgeyBpbml0aWFsX3NpemUgPSBzOyBzaXplID0gMDsgc2VlZCA9IHNlZWQ7IGRhdGEgPSBBcnJheS5tYWtlIHMgRW1wdHkgfVxuXG4gICAgbGV0IGNsZWFyIGggPVxuICAgICAgaC5zaXplIDwtIDA7XG4gICAgICBsZXQgbGVuID0gQXJyYXkubGVuZ3RoIGguZGF0YSBpblxuICAgICAgZm9yIGkgPSAwIHRvIGxlbiAtIDEgZG9cbiAgICAgICAgaC5kYXRhLihpKSA8LSBFbXB0eVxuICAgICAgZG9uZVxuXG4gICAgbGV0IHJlc2V0IGggPVxuICAgICAgbGV0IGxlbiA9IEFycmF5Lmxlbmd0aCBoLmRhdGEgaW5cbiAgICAgIGlmIGxlbiA9IGguaW5pdGlhbF9zaXplIHRoZW5cbiAgICAgICAgY2xlYXIgaFxuICAgICAgZWxzZSBiZWdpblxuICAgICAgICBoLnNpemUgPC0gMDtcbiAgICAgICAgaC5kYXRhIDwtIEFycmF5Lm1ha2UgaC5pbml0aWFsX3NpemUgRW1wdHlcbiAgICAgIGVuZFxuXG4gICAgbGV0IGNvcHkgaCA9IHsgaCB3aXRoIGRhdGEgPSBBcnJheS5jb3B5IGguZGF0YSB9XG5cbiAgICBsZXQga2V5X2luZGV4IGggaGtleSA9XG4gICAgICBoa2V5IGxhbmQgKEFycmF5Lmxlbmd0aCBoLmRhdGEgLSAxKVxuXG4gICAgbGV0IGNsZWFuIGggPVxuICAgICAgbGV0IHJlYyBkb19idWNrZXQgPSBmdW5jdGlvblxuICAgICAgICB8IEVtcHR5IC0+XG4gICAgICAgICAgICBFbXB0eVxuICAgICAgICB8IENvbnMoXywgYywgcmVzdCkgd2hlbiBub3QgKEguY2hlY2tfa2V5IGMpIC0+XG4gICAgICAgICAgICBoLnNpemUgPC0gaC5zaXplIC0gMTtcbiAgICAgICAgICAgIGRvX2J1Y2tldCByZXN0XG4gICAgICAgIHwgQ29ucyhoa2V5LCBjLCByZXN0KSAtPlxuICAgICAgICAgICAgQ29ucyhoa2V5LCBjLCBkb19idWNrZXQgcmVzdClcbiAgICAgIGluXG4gICAgICBsZXQgZCA9IGguZGF0YSBpblxuICAgICAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCBkIC0gMSBkb1xuICAgICAgICBkLihpKSA8LSBkb19idWNrZXQgZC4oaSlcbiAgICAgIGRvbmVcblxuICAgICgqKiByZXNpemUgaXMgdGhlIG9ubHkgZnVuY3Rpb24gdG8gZG8gdGhlIGFjdHVhbCBjbGVhbmluZyBvZiBkZWFkIGtleXNcbiAgICAgICAgKHJlbW92ZSBkb2VzIGl0IGp1c3QgYmVjYXVzZSBpdCBjb3VsZCkuXG5cbiAgICAgICAgVGhlIGdvYWwgaXMgdG86XG5cbiAgICAgICAgLSBub3QgcmVzaXplIGluZmluaXRlbHkgd2hlbiB0aGUgYWN0dWFsIG51bWJlciBvZiBhbGl2ZSBrZXlzIGlzXG4gICAgICAgIGJvdW5kZWQgYnV0IGtleXMgYXJlIGNvbnRpbnVvdXNseSBhZGRlZC4gVGhhdCB3b3VsZCBoYXBwZW4gaWZcbiAgICAgICAgdGhpcyBmdW5jdGlvbiBhbHdheXMgcmVzaXplLlxuICAgICAgICAtIG5vdCBjYWxsIHRoaXMgZnVuY3Rpb24gYWZ0ZXIgZWFjaCBhZGRpdGlvbiwgdGhhdCB3b3VsZCBoYXBwZW4gaWYgdGhpc1xuICAgICAgICBmdW5jdGlvbiBkb24ndCByZXNpemUgZXZlbiB3aGVuIG9ubHkgb25lIGtleSBpcyBkZWFkLlxuXG4gICAgICAgIFNvIHRoZSBhbGdvcml0aG06XG4gICAgICAgIC0gY2xlYW4gdGhlIGtleXMgYmVmb3JlIHJlc2l6aW5nXG4gICAgICAgIC0gaWYgdGhlIG51bWJlciBvZiByZW1haW5pbmcga2V5cyBpcyBsZXNzIHRoYW4gaGFsZiB0aGUgc2l6ZSBvZiB0aGVcbiAgICAgICAgYXJyYXksIGRvbid0IHJlc2l6ZS5cbiAgICAgICAgLSBpZiBpdCBpcyBtb3JlLCByZXNpemUuXG5cbiAgICAgICAgVGhlIHNlY29uZCBwcm9ibGVtIHJlbWFpbnMgaWYgdGhlIHRhYmxlIHJlYWNoZXMgeyFTeXMubWF4X2FycmF5X2xlbmd0aH0uXG5cbiAgICAqKVxuICAgIGxldCByZXNpemUgaCA9XG4gICAgICBsZXQgb2RhdGEgPSBoLmRhdGEgaW5cbiAgICAgIGxldCBvc2l6ZSA9IEFycmF5Lmxlbmd0aCBvZGF0YSBpblxuICAgICAgbGV0IG5zaXplID0gb3NpemUgKiAyIGluXG4gICAgICBjbGVhbiBoO1xuICAgICAgaWYgbnNpemUgPCBTeXMubWF4X2FycmF5X2xlbmd0aCAmJiBoLnNpemUgPj0gb3NpemUgbHNyIDEgdGhlbiBiZWdpblxuICAgICAgICBsZXQgbmRhdGEgPSBBcnJheS5tYWtlIG5zaXplIEVtcHR5IGluXG4gICAgICAgIGguZGF0YSA8LSBuZGF0YTsgICAgICAgKCogc28gdGhhdCBrZXlfaW5kZXggc2VlcyB0aGUgbmV3IGJ1Y2tldCBjb3VudCAqKVxuICAgICAgICBsZXQgcmVjIGluc2VydF9idWNrZXQgPSBmdW5jdGlvblxuICAgICAgICAgICAgRW1wdHkgLT4gKClcbiAgICAgICAgICB8IENvbnMoaGtleSwgZGF0YSwgcmVzdCkgLT5cbiAgICAgICAgICAgICAgaW5zZXJ0X2J1Y2tldCByZXN0OyAoKiBwcmVzZXJ2ZSBvcmlnaW5hbCBvcmRlciBvZiBlbGVtZW50cyAqKVxuICAgICAgICAgICAgICBsZXQgbmlkeCA9IGtleV9pbmRleCBoIGhrZXkgaW5cbiAgICAgICAgICAgICAgbmRhdGEuKG5pZHgpIDwtIENvbnMoaGtleSwgZGF0YSwgbmRhdGEuKG5pZHgpKSBpblxuICAgICAgICBmb3IgaSA9IDAgdG8gb3NpemUgLSAxIGRvXG4gICAgICAgICAgaW5zZXJ0X2J1Y2tldCBvZGF0YS4oaSlcbiAgICAgICAgZG9uZVxuICAgICAgZW5kXG5cbiAgICBsZXQgYWRkIGgga2V5IGluZm8gPVxuICAgICAgbGV0IGhrZXkgPSBILmhhc2ggaC5zZWVkIGtleSBpblxuICAgICAgbGV0IGkgPSBrZXlfaW5kZXggaCBoa2V5IGluXG4gICAgICBsZXQgY29udGFpbmVyID0gSC5jcmVhdGUga2V5IGluZm8gaW5cbiAgICAgIGxldCBidWNrZXQgPSBDb25zKGhrZXksIGNvbnRhaW5lciwgaC5kYXRhLihpKSkgaW5cbiAgICAgIGguZGF0YS4oaSkgPC0gYnVja2V0O1xuICAgICAgaC5zaXplIDwtIGguc2l6ZSArIDE7XG4gICAgICBpZiBoLnNpemUgPiBBcnJheS5sZW5ndGggaC5kYXRhIGxzbCAxIHRoZW4gcmVzaXplIGhcblxuICAgIGxldCByZW1vdmUgaCBrZXkgPVxuICAgICAgbGV0IGhrZXkgPSBILmhhc2ggaC5zZWVkIGtleSBpblxuICAgICAgbGV0IHJlYyByZW1vdmVfYnVja2V0ID0gZnVuY3Rpb25cbiAgICAgICAgfCBFbXB0eSAtPiBFbXB0eVxuICAgICAgICB8IENvbnMoaGssIGMsIG5leHQpIHdoZW4gaGtleSA9IGhrIC0+XG4gICAgICAgICAgICBiZWdpbiBtYXRjaCBILmVxdWFsIGMga2V5IHdpdGhcbiAgICAgICAgICAgIHwgRVRydWUgLT4gaC5zaXplIDwtIGguc2l6ZSAtIDE7IG5leHRcbiAgICAgICAgICAgIHwgRUZhbHNlIC0+IENvbnMoaGssIGMsIHJlbW92ZV9idWNrZXQgbmV4dClcbiAgICAgICAgICAgIHwgRURlYWQgLT5cbiAgICAgICAgICAgICAgICAoKiBUaGUgZGVhZCBrZXkgaXMgYXV0b21hdGljYWxseSByZW1vdmVkLiBJdCBpcyBhY2NlcHRhYmxlXG4gICAgICAgICAgICAgICAgICAgIGZvciB0aGlzIGZ1bmN0aW9uIHNpbmNlIGl0IGFscmVhZHkgcmVtb3ZlcyBhIGJpbmRpbmcgKilcbiAgICAgICAgICAgICAgICBoLnNpemUgPC0gaC5zaXplIC0gMTtcbiAgICAgICAgICAgICAgICByZW1vdmVfYnVja2V0IG5leHRcbiAgICAgICAgICAgIGVuZFxuICAgICAgICB8IENvbnMoaGssYyxuZXh0KSAtPiBDb25zKGhrLCBjLCByZW1vdmVfYnVja2V0IG5leHQpIGluXG4gICAgICBsZXQgaSA9IGtleV9pbmRleCBoIGhrZXkgaW5cbiAgICAgIGguZGF0YS4oaSkgPC0gcmVtb3ZlX2J1Y2tldCBoLmRhdGEuKGkpXG5cbiAgICAoKiogeyFmaW5kfSBkb24ndCByZW1vdmUgZGVhZCBrZXlzIGJlY2F1c2UgaXQgd291bGQgYmUgc3VycHJpc2luZyBmb3JcbiAgICAgICAgdGhlIHVzZXIgdGhhdCBhIHJlYWQtb25seSBmdW5jdGlvbiBtdXRhdGVzIHRoZSBzdGF0ZSAoZWcuIGNvbmN1cnJlbnRcbiAgICAgICAgYWNjZXNzKS4gU2FtZSBmb3IgeyFpdGVyfSwgeyFmb2xkfSwgeyFtZW19LlxuICAgICopXG4gICAgbGV0IHJlYyBmaW5kX3JlYyBrZXkgaGtleSA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+XG4gICAgICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IENvbnMoaGssIGMsIHJlc3QpIHdoZW4gaGtleSA9IGhrICAtPlxuICAgICAgICAgIGJlZ2luIG1hdGNoIEguZXF1YWwgYyBrZXkgd2l0aFxuICAgICAgICAgIHwgRVRydWUgLT5cbiAgICAgICAgICAgICAgYmVnaW4gbWF0Y2ggSC5nZXRfZGF0YSBjIHdpdGhcbiAgICAgICAgICAgICAgfCBOb25lIC0+XG4gICAgICAgICAgICAgICAgICAoKiBUaGlzIGNhc2UgaXMgbm90IGltcG9zc2libGUgYmVjYXVzZSB0aGUgZ2MgY2FuIHJ1biBiZXR3ZWVuXG4gICAgICAgICAgICAgICAgICAgICAgSC5lcXVhbCBhbmQgSC5nZXRfZGF0YSAqKVxuICAgICAgICAgICAgICAgICAgZmluZF9yZWMga2V5IGhrZXkgcmVzdFxuICAgICAgICAgICAgICB8IFNvbWUgZCAtPiBkXG4gICAgICAgICAgICAgIGVuZFxuICAgICAgICAgIHwgRUZhbHNlIC0+IGZpbmRfcmVjIGtleSBoa2V5IHJlc3RcbiAgICAgICAgICB8IEVEZWFkIC0+XG4gICAgICAgICAgICAgIGZpbmRfcmVjIGtleSBoa2V5IHJlc3RcbiAgICAgICAgICBlbmRcbiAgICAgIHwgQ29ucyhfLCBfLCByZXN0KSAtPlxuICAgICAgICAgIGZpbmRfcmVjIGtleSBoa2V5IHJlc3RcblxuICAgIGxldCBmaW5kIGgga2V5ID1cbiAgICAgIGxldCBoa2V5ID0gSC5oYXNoIGguc2VlZCBrZXkgaW5cbiAgICAgICgqIFRPRE8gaW5saW5lIDMgaXRlcmF0aW9ucyAqKVxuICAgICAgZmluZF9yZWMga2V5IGhrZXkgKGguZGF0YS4oa2V5X2luZGV4IGggaGtleSkpXG5cbiAgICBsZXQgcmVjIGZpbmRfcmVjX29wdCBrZXkgaGtleSA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+XG4gICAgICAgICAgTm9uZVxuICAgICAgfCBDb25zKGhrLCBjLCByZXN0KSB3aGVuIGhrZXkgPSBoayAgLT5cbiAgICAgICAgICBiZWdpbiBtYXRjaCBILmVxdWFsIGMga2V5IHdpdGhcbiAgICAgICAgICB8IEVUcnVlIC0+XG4gICAgICAgICAgICAgIGJlZ2luIG1hdGNoIEguZ2V0X2RhdGEgYyB3aXRoXG4gICAgICAgICAgICAgIHwgTm9uZSAtPlxuICAgICAgICAgICAgICAgICAgKCogVGhpcyBjYXNlIGlzIG5vdCBpbXBvc3NpYmxlIGJlY2F1c2UgdGhlIGdjIGNhbiBydW4gYmV0d2VlblxuICAgICAgICAgICAgICAgICAgICAgIEguZXF1YWwgYW5kIEguZ2V0X2RhdGEgKilcbiAgICAgICAgICAgICAgICAgIGZpbmRfcmVjX29wdCBrZXkgaGtleSByZXN0XG4gICAgICAgICAgICAgIHwgU29tZSBfIGFzIGQgLT4gZFxuICAgICAgICAgICAgICBlbmRcbiAgICAgICAgICB8IEVGYWxzZSAtPiBmaW5kX3JlY19vcHQga2V5IGhrZXkgcmVzdFxuICAgICAgICAgIHwgRURlYWQgLT5cbiAgICAgICAgICAgICAgZmluZF9yZWNfb3B0IGtleSBoa2V5IHJlc3RcbiAgICAgICAgICBlbmRcbiAgICAgIHwgQ29ucyhfLCBfLCByZXN0KSAtPlxuICAgICAgICAgIGZpbmRfcmVjX29wdCBrZXkgaGtleSByZXN0XG5cbiAgICBsZXQgZmluZF9vcHQgaCBrZXkgPVxuICAgICAgbGV0IGhrZXkgPSBILmhhc2ggaC5zZWVkIGtleSBpblxuICAgICAgKCogVE9ETyBpbmxpbmUgMyBpdGVyYXRpb25zICopXG4gICAgICBmaW5kX3JlY19vcHQga2V5IGhrZXkgKGguZGF0YS4oa2V5X2luZGV4IGggaGtleSkpXG5cbiAgICBsZXQgZmluZF9hbGwgaCBrZXkgPVxuICAgICAgbGV0IGhrZXkgPSBILmhhc2ggaC5zZWVkIGtleSBpblxuICAgICAgbGV0IHJlYyBmaW5kX2luX2J1Y2tldCA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+IFtdXG4gICAgICB8IENvbnMoaGssIGMsIHJlc3QpIHdoZW4gaGtleSA9IGhrICAtPlxuICAgICAgICAgIGJlZ2luIG1hdGNoIEguZXF1YWwgYyBrZXkgd2l0aFxuICAgICAgICAgIHwgRVRydWUgLT4gYmVnaW4gbWF0Y2ggSC5nZXRfZGF0YSBjIHdpdGhcbiAgICAgICAgICAgICAgfCBOb25lIC0+XG4gICAgICAgICAgICAgICAgICBmaW5kX2luX2J1Y2tldCByZXN0XG4gICAgICAgICAgICAgIHwgU29tZSBkIC0+IGQ6OmZpbmRfaW5fYnVja2V0IHJlc3RcbiAgICAgICAgICAgIGVuZFxuICAgICAgICAgIHwgRUZhbHNlIC0+IGZpbmRfaW5fYnVja2V0IHJlc3RcbiAgICAgICAgICB8IEVEZWFkIC0+XG4gICAgICAgICAgICAgIGZpbmRfaW5fYnVja2V0IHJlc3RcbiAgICAgICAgICBlbmRcbiAgICAgIHwgQ29ucyhfLCBfLCByZXN0KSAtPlxuICAgICAgICAgIGZpbmRfaW5fYnVja2V0IHJlc3QgaW5cbiAgICAgIGZpbmRfaW5fYnVja2V0IGguZGF0YS4oa2V5X2luZGV4IGggaGtleSlcblxuXG4gICAgbGV0IHJlcGxhY2UgaCBrZXkgaW5mbyA9XG4gICAgICBsZXQgaGtleSA9IEguaGFzaCBoLnNlZWQga2V5IGluXG4gICAgICBsZXQgcmVjIHJlcGxhY2VfYnVja2V0ID0gZnVuY3Rpb25cbiAgICAgICAgfCBFbXB0eSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgICAgfCBDb25zKGhrLCBjLCBuZXh0KSB3aGVuIGhrZXkgPSBoayAtPlxuICAgICAgICAgICAgYmVnaW4gbWF0Y2ggSC5lcXVhbCBjIGtleSB3aXRoXG4gICAgICAgICAgICB8IEVUcnVlIC0+IEguc2V0X2tleV9kYXRhIGMga2V5IGluZm9cbiAgICAgICAgICAgIHwgRUZhbHNlIHwgRURlYWQgLT4gcmVwbGFjZV9idWNrZXQgbmV4dFxuICAgICAgICAgICAgZW5kXG4gICAgICAgIHwgQ29ucyhfLF8sbmV4dCkgLT4gcmVwbGFjZV9idWNrZXQgbmV4dFxuICAgICAgaW5cbiAgICAgIGxldCBpID0ga2V5X2luZGV4IGggaGtleSBpblxuICAgICAgbGV0IGwgPSBoLmRhdGEuKGkpIGluXG4gICAgICB0cnlcbiAgICAgICAgcmVwbGFjZV9idWNrZXQgbFxuICAgICAgd2l0aCBOb3RfZm91bmQgLT5cbiAgICAgICAgbGV0IGNvbnRhaW5lciA9IEguY3JlYXRlIGtleSBpbmZvIGluXG4gICAgICAgIGguZGF0YS4oaSkgPC0gQ29ucyhoa2V5LCBjb250YWluZXIsIGwpO1xuICAgICAgICBoLnNpemUgPC0gaC5zaXplICsgMTtcbiAgICAgICAgaWYgaC5zaXplID4gQXJyYXkubGVuZ3RoIGguZGF0YSBsc2wgMSB0aGVuIHJlc2l6ZSBoXG5cbiAgICBsZXQgbWVtIGgga2V5ID1cbiAgICAgIGxldCBoa2V5ID0gSC5oYXNoIGguc2VlZCBrZXkgaW5cbiAgICAgIGxldCByZWMgbWVtX2luX2J1Y2tldCA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+XG4gICAgICAgICAgZmFsc2VcbiAgICAgIHwgQ29ucyhoaywgYywgcmVzdCkgd2hlbiBoayA9IGhrZXkgLT5cbiAgICAgICAgICBiZWdpbiBtYXRjaCBILmVxdWFsIGMga2V5IHdpdGhcbiAgICAgICAgICB8IEVUcnVlIC0+IHRydWVcbiAgICAgICAgICB8IEVGYWxzZSB8IEVEZWFkIC0+IG1lbV9pbl9idWNrZXQgcmVzdFxuICAgICAgICAgIGVuZFxuICAgICAgfCBDb25zKF9oaywgX2MsIHJlc3QpIC0+IG1lbV9pbl9idWNrZXQgcmVzdCBpblxuICAgICAgbWVtX2luX2J1Y2tldCBoLmRhdGEuKGtleV9pbmRleCBoIGhrZXkpXG5cbiAgICBsZXQgaXRlciBmIGggPVxuICAgICAgbGV0IHJlYyBkb19idWNrZXQgPSBmdW5jdGlvblxuICAgICAgICB8IEVtcHR5IC0+XG4gICAgICAgICAgICAoKVxuICAgICAgICB8IENvbnMoXywgYywgcmVzdCkgLT5cbiAgICAgICAgICAgIGJlZ2luIG1hdGNoIEguZ2V0X2tleSBjLCBILmdldF9kYXRhIGMgd2l0aFxuICAgICAgICAgICAgfCBOb25lLCBfIHwgXywgTm9uZSAtPiAoKVxuICAgICAgICAgICAgfCBTb21lIGssIFNvbWUgZCAtPiBmIGsgZFxuICAgICAgICAgICAgZW5kOyBkb19idWNrZXQgcmVzdCBpblxuICAgICAgbGV0IGQgPSBoLmRhdGEgaW5cbiAgICAgIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggZCAtIDEgZG9cbiAgICAgICAgZG9fYnVja2V0IGQuKGkpXG4gICAgICBkb25lXG5cbiAgICBsZXQgZm9sZCBmIGggaW5pdCA9XG4gICAgICBsZXQgcmVjIGRvX2J1Y2tldCBiIGFjY3UgPVxuICAgICAgICBtYXRjaCBiIHdpdGhcbiAgICAgICAgICBFbXB0eSAtPlxuICAgICAgICAgICAgYWNjdVxuICAgICAgICB8IENvbnMoXywgYywgcmVzdCkgLT5cbiAgICAgICAgICAgIGxldCBhY2N1ID0gYmVnaW4gbWF0Y2ggSC5nZXRfa2V5IGMsIEguZ2V0X2RhdGEgYyB3aXRoXG4gICAgICAgICAgICAgIHwgTm9uZSwgXyB8IF8sIE5vbmUgLT4gYWNjdVxuICAgICAgICAgICAgICB8IFNvbWUgaywgU29tZSBkIC0+IGYgayBkIGFjY3VcbiAgICAgICAgICAgIGVuZCBpblxuICAgICAgICAgICAgZG9fYnVja2V0IHJlc3QgYWNjdSAgaW5cbiAgICAgIGxldCBkID0gaC5kYXRhIGluXG4gICAgICBsZXQgYWNjdSA9IHJlZiBpbml0IGluXG4gICAgICBmb3IgaSA9IDAgdG8gQXJyYXkubGVuZ3RoIGQgLSAxIGRvXG4gICAgICAgIGFjY3UgOj0gZG9fYnVja2V0IGQuKGkpICFhY2N1XG4gICAgICBkb25lO1xuICAgICAgIWFjY3VcblxuICAgIGxldCBmaWx0ZXJfbWFwX2lucGxhY2UgZiBoID1cbiAgICAgIGxldCByZWMgZG9fYnVja2V0ID0gZnVuY3Rpb25cbiAgICAgICAgfCBFbXB0eSAtPlxuICAgICAgICAgICAgRW1wdHlcbiAgICAgICAgfCBDb25zKGhrLCBjLCByZXN0KSAtPlxuICAgICAgICAgICAgbWF0Y2ggSC5nZXRfa2V5IGMsIEguZ2V0X2RhdGEgYyB3aXRoXG4gICAgICAgICAgICB8IE5vbmUsIF8gfCBfLCBOb25lIC0+XG4gICAgICAgICAgICAgICAgZG9fYnVja2V0IHJlc3RcbiAgICAgICAgICAgIHwgU29tZSBrLCBTb21lIGQgLT5cbiAgICAgICAgICAgICAgICBtYXRjaCBmIGsgZCB3aXRoXG4gICAgICAgICAgICAgICAgfCBOb25lIC0+XG4gICAgICAgICAgICAgICAgICAgIGRvX2J1Y2tldCByZXN0XG4gICAgICAgICAgICAgICAgfCBTb21lIG5ld19kIC0+XG4gICAgICAgICAgICAgICAgICAgIEguc2V0X2tleV9kYXRhIGMgayBuZXdfZDtcbiAgICAgICAgICAgICAgICAgICAgQ29ucyhoaywgYywgZG9fYnVja2V0IHJlc3QpXG4gICAgICBpblxuICAgICAgbGV0IGQgPSBoLmRhdGEgaW5cbiAgICAgIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggZCAtIDEgZG9cbiAgICAgICAgZC4oaSkgPC0gZG9fYnVja2V0IGQuKGkpXG4gICAgICBkb25lXG5cbiAgICBsZXQgbGVuZ3RoIGggPSBoLnNpemVcblxuICAgIGxldCByZWMgYnVja2V0X2xlbmd0aCBhY2N1ID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT4gYWNjdVxuICAgICAgfCBDb25zKF8sIF8sIHJlc3QpIC0+IGJ1Y2tldF9sZW5ndGggKGFjY3UgKyAxKSByZXN0XG5cbiAgICBsZXQgc3RhdHMgaCA9XG4gICAgICBsZXQgbWJsID1cbiAgICAgICAgQXJyYXkuZm9sZF9sZWZ0IChmdW4gbSBiIC0+IEludC5tYXggbSAoYnVja2V0X2xlbmd0aCAwIGIpKSAwIGguZGF0YSBpblxuICAgICAgbGV0IGhpc3RvID0gQXJyYXkubWFrZSAobWJsICsgMSkgMCBpblxuICAgICAgQXJyYXkuaXRlclxuICAgICAgICAoZnVuIGIgLT5cbiAgICAgICAgICAgbGV0IGwgPSBidWNrZXRfbGVuZ3RoIDAgYiBpblxuICAgICAgICAgICBoaXN0by4obCkgPC0gaGlzdG8uKGwpICsgMSlcbiAgICAgICAgaC5kYXRhO1xuICAgICAgeyBIYXNodGJsLm51bV9iaW5kaW5ncyA9IGguc2l6ZTtcbiAgICAgICAgbnVtX2J1Y2tldHMgPSBBcnJheS5sZW5ndGggaC5kYXRhO1xuICAgICAgICBtYXhfYnVja2V0X2xlbmd0aCA9IG1ibDtcbiAgICAgICAgYnVja2V0X2hpc3RvZ3JhbSA9IGhpc3RvIH1cblxuICAgIGxldCByZWMgYnVja2V0X2xlbmd0aF9hbGl2ZSBhY2N1ID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT4gYWNjdVxuICAgICAgfCBDb25zKF8sIGMsIHJlc3QpIHdoZW4gSC5jaGVja19rZXkgYyAtPlxuICAgICAgICAgIGJ1Y2tldF9sZW5ndGhfYWxpdmUgKGFjY3UgKyAxKSByZXN0XG4gICAgICB8IENvbnMoXywgXywgcmVzdCkgLT4gYnVja2V0X2xlbmd0aF9hbGl2ZSBhY2N1IHJlc3RcblxuICAgIGxldCBzdGF0c19hbGl2ZSBoID1cbiAgICAgIGxldCBzaXplID0gcmVmIDAgaW5cbiAgICAgIGxldCBtYmwgPVxuICAgICAgICBBcnJheS5mb2xkX2xlZnRcbiAgICAgICAgICAoZnVuIG0gYiAtPiBJbnQubWF4IG0gKGJ1Y2tldF9sZW5ndGhfYWxpdmUgMCBiKSkgMCBoLmRhdGFcbiAgICAgIGluXG4gICAgICBsZXQgaGlzdG8gPSBBcnJheS5tYWtlIChtYmwgKyAxKSAwIGluXG4gICAgICBBcnJheS5pdGVyXG4gICAgICAgIChmdW4gYiAtPlxuICAgICAgICAgICBsZXQgbCA9IGJ1Y2tldF9sZW5ndGhfYWxpdmUgMCBiIGluXG4gICAgICAgICAgIHNpemUgOj0gIXNpemUgKyBsO1xuICAgICAgICAgICBoaXN0by4obCkgPC0gaGlzdG8uKGwpICsgMSlcbiAgICAgICAgaC5kYXRhO1xuICAgICAgeyBIYXNodGJsLm51bV9iaW5kaW5ncyA9ICFzaXplO1xuICAgICAgICBudW1fYnVja2V0cyA9IEFycmF5Lmxlbmd0aCBoLmRhdGE7XG4gICAgICAgIG1heF9idWNrZXRfbGVuZ3RoID0gbWJsO1xuICAgICAgICBidWNrZXRfaGlzdG9ncmFtID0gaGlzdG8gfVxuXG4gICAgbGV0IHRvX3NlcSB0YmwgPVxuICAgICAgKCogY2FwdHVyZSBjdXJyZW50IGFycmF5LCBzbyB0aGF0IGV2ZW4gaWYgdGhlIHRhYmxlIGlzIHJlc2l6ZWQgd2VcbiAgICAgICAgIGtlZXAgaXRlcmF0aW5nIG9uIHRoZSBzYW1lIGFycmF5ICopXG4gICAgICBsZXQgdGJsX2RhdGEgPSB0YmwuZGF0YSBpblxuICAgICAgKCogc3RhdGU6IGluZGV4ICogbmV4dCBidWNrZXQgdG8gdHJhdmVyc2UgKilcbiAgICAgIGxldCByZWMgYXV4IGkgYnVjayAoKSA9IG1hdGNoIGJ1Y2sgd2l0aFxuICAgICAgICB8IEVtcHR5IC0+XG4gICAgICAgICAgICBpZiBpID0gQXJyYXkubGVuZ3RoIHRibF9kYXRhXG4gICAgICAgICAgICB0aGVuIFNlcS5OaWxcbiAgICAgICAgICAgIGVsc2UgYXV4KGkrMSkgdGJsX2RhdGEuKGkpICgpXG4gICAgICAgIHwgQ29ucyAoXywgYywgbmV4dCkgLT5cbiAgICAgICAgICAgIGJlZ2luIG1hdGNoIEguZ2V0X2tleSBjLCBILmdldF9kYXRhIGMgd2l0aFxuICAgICAgICAgICAgICB8IE5vbmUsIF8gfCBfLCBOb25lIC0+IGF1eCBpIG5leHQgKClcbiAgICAgICAgICAgICAgfCBTb21lIGtleSwgU29tZSBkYXRhIC0+XG4gICAgICAgICAgICAgICAgICBTZXEuQ29ucyAoKGtleSwgZGF0YSksIGF1eCBpIG5leHQpXG4gICAgICAgICAgICBlbmRcbiAgICAgIGluXG4gICAgICBhdXggMCBFbXB0eVxuXG4gICAgbGV0IHRvX3NlcV9rZXlzIG0gPSBTZXEubWFwIGZzdCAodG9fc2VxIG0pXG5cbiAgICBsZXQgdG9fc2VxX3ZhbHVlcyBtID0gU2VxLm1hcCBzbmQgKHRvX3NlcSBtKVxuXG4gICAgbGV0IGFkZF9zZXEgdGJsIGkgPVxuICAgICAgU2VxLml0ZXIgKGZ1biAoayx2KSAtPiBhZGQgdGJsIGsgdikgaVxuXG4gICAgbGV0IHJlcGxhY2Vfc2VxIHRibCBpID1cbiAgICAgIFNlcS5pdGVyIChmdW4gKGssdikgLT4gcmVwbGFjZSB0YmwgayB2KSBpXG5cbiAgICBsZXQgb2Zfc2VxIGkgPVxuICAgICAgbGV0IHRibCA9IGNyZWF0ZSAxNiBpblxuICAgICAgcmVwbGFjZV9zZXEgdGJsIGk7XG4gICAgICB0YmxcblxuICBlbmRcbmVuZFxuXG5tb2R1bGUgT2JqRXBoID0gT2JqLkVwaGVtZXJvblxuXG5sZXQgX29ial9vcHQgOiBPYmoudCBvcHRpb24gLT4gJ2Egb3B0aW9uID0gZnVuIHggLT5cbiAgbWF0Y2ggeCB3aXRoXG4gIHwgTm9uZSAtPiB4XG4gIHwgU29tZSB2IC0+IFNvbWUgKE9iai5vYmogdilcblxuKCoqIFRoZSBwcmV2aW91cyBmdW5jdGlvbiBpcyB0eXBlZCBzbyB0aGlzIG9uZSBpcyBhbHNvIGNvcnJlY3QgKilcbmxldCBvYmpfb3B0IDogT2JqLnQgb3B0aW9uIC0+ICdhIG9wdGlvbiA9IGZ1biB4IC0+IE9iai5tYWdpYyB4XG5cblxubW9kdWxlIEsxID0gc3RydWN0XG4gIHR5cGUgKCdrLCdkKSB0ID0gT2JqRXBoLnRcblxuICBsZXQgY3JlYXRlICgpIDogKCdrLCdkKSB0ID0gT2JqRXBoLmNyZWF0ZSAxXG5cbiAgbGV0IGdldF9rZXkgKHQ6KCdrLCdkKSB0KSA6ICdrIG9wdGlvbiA9IG9ial9vcHQgKE9iakVwaC5nZXRfa2V5IHQgMClcbiAgbGV0IGdldF9rZXlfY29weSAodDooJ2ssJ2QpIHQpIDogJ2sgb3B0aW9uID0gb2JqX29wdCAoT2JqRXBoLmdldF9rZXlfY29weSB0IDApXG4gIGxldCBzZXRfa2V5ICh0OignaywnZCkgdCkgKGs6J2spIDogdW5pdCA9IE9iakVwaC5zZXRfa2V5IHQgMCAoT2JqLnJlcHIgaylcbiAgbGV0IHVuc2V0X2tleSAodDooJ2ssJ2QpIHQpIDogdW5pdCA9IE9iakVwaC51bnNldF9rZXkgdCAwXG4gIGxldCBjaGVja19rZXkgKHQ6KCdrLCdkKSB0KSA6IGJvb2wgPSBPYmpFcGguY2hlY2tfa2V5IHQgMFxuXG4gIGxldCBibGl0X2tleSAodDE6KCdrLCdkKSB0KSAodDI6KCdrLCdkKSB0KTogdW5pdCA9XG4gICAgT2JqRXBoLmJsaXRfa2V5IHQxIDAgdDIgMCAxXG5cbiAgbGV0IGdldF9kYXRhICh0OignaywnZCkgdCkgOiAnZCBvcHRpb24gPSBvYmpfb3B0IChPYmpFcGguZ2V0X2RhdGEgdClcbiAgbGV0IGdldF9kYXRhX2NvcHkgKHQ6KCdrLCdkKSB0KSA6ICdkIG9wdGlvbiA9IG9ial9vcHQgKE9iakVwaC5nZXRfZGF0YV9jb3B5IHQpXG4gIGxldCBzZXRfZGF0YSAodDooJ2ssJ2QpIHQpIChkOidkKSA6IHVuaXQgPSBPYmpFcGguc2V0X2RhdGEgdCAoT2JqLnJlcHIgZClcbiAgbGV0IHVuc2V0X2RhdGEgKHQ6KCdrLCdkKSB0KSA6IHVuaXQgPSBPYmpFcGgudW5zZXRfZGF0YSB0XG4gIGxldCBjaGVja19kYXRhICh0OignaywnZCkgdCkgOiBib29sID0gT2JqRXBoLmNoZWNrX2RhdGEgdFxuICBsZXQgYmxpdF9kYXRhICh0MTooXywnZCkgdCkgKHQyOihfLCdkKSB0KSA6IHVuaXQgPSBPYmpFcGguYmxpdF9kYXRhIHQxIHQyXG5cbiAgbGV0IG1ha2Uga2V5IGRhdGEgPVxuICAgIGxldCBlcGggPSBjcmVhdGUgKCkgaW5cbiAgICBzZXRfZGF0YSBlcGggZGF0YTtcbiAgICBzZXRfa2V5IGVwaCBrZXk7XG4gICAgZXBoXG5cbiAgbGV0IHF1ZXJ5IGVwaCBrZXkgPVxuICAgIG1hdGNoIGdldF9rZXkgZXBoIHdpdGhcbiAgICB8IE5vbmUgLT4gTm9uZVxuICAgIHwgU29tZSBrIHdoZW4gayA9PSBrZXkgLT4gZ2V0X2RhdGEgZXBoXG4gICAgfCBTb21lIF8gLT4gTm9uZVxuXG4gIG1vZHVsZSBNYWtlU2VlZGVkIChIOkhhc2h0YmwuU2VlZGVkSGFzaGVkVHlwZSkgPVxuICAgIEdlbkhhc2hUYWJsZS5NYWtlU2VlZGVkKHN0cnVjdFxuICAgICAgdHlwZSAnYSBjb250YWluZXIgPSAoSC50LCdhKSB0XG4gICAgICB0eXBlIHQgPSBILnRcbiAgICAgIGxldCBjcmVhdGUgayBkID1cbiAgICAgICAgbGV0IGMgPSBjcmVhdGUgKCkgaW5cbiAgICAgICAgc2V0X2RhdGEgYyBkO1xuICAgICAgICBzZXRfa2V5IGMgaztcbiAgICAgICAgY1xuICAgICAgbGV0IGhhc2ggPSBILmhhc2hcbiAgICAgIGxldCBlcXVhbCBjIGsgPVxuICAgICAgICAoKiB7IWdldF9rZXlfY29weX0gaXMgbm90IHVzZWQgYmVjYXVzZSB0aGUgZXF1YWxpdHkgb2YgdGhlIHVzZXIgY2FuIGJlXG4gICAgICAgICAgICB0aGUgcGh5c2ljYWwgZXF1YWxpdHkgKilcbiAgICAgICAgbWF0Y2ggZ2V0X2tleSBjIHdpdGhcbiAgICAgICAgfCBOb25lIC0+IEdlbkhhc2hUYWJsZS5FRGVhZFxuICAgICAgICB8IFNvbWUgaycgLT5cbiAgICAgICAgICAgIGlmIEguZXF1YWwgayBrJyB0aGVuIEdlbkhhc2hUYWJsZS5FVHJ1ZSBlbHNlIEdlbkhhc2hUYWJsZS5FRmFsc2VcbiAgICAgIGxldCBnZXRfZGF0YSA9IGdldF9kYXRhXG4gICAgICBsZXQgZ2V0X2tleSA9IGdldF9rZXlcbiAgICAgIGxldCBzZXRfa2V5X2RhdGEgYyBrIGQgPVxuICAgICAgICB1bnNldF9kYXRhIGM7XG4gICAgICAgIHNldF9rZXkgYyBrO1xuICAgICAgICBzZXRfZGF0YSBjIGRcbiAgICAgIGxldCBjaGVja19rZXkgPSBjaGVja19rZXlcbiAgICBlbmQpXG5cbiAgbW9kdWxlIE1ha2UoSDogSGFzaHRibC5IYXNoZWRUeXBlKTogKFMgd2l0aCB0eXBlIGtleSA9IEgudCkgPVxuICBzdHJ1Y3RcbiAgICBpbmNsdWRlIE1ha2VTZWVkZWQoc3RydWN0XG4gICAgICAgIHR5cGUgdCA9IEgudFxuICAgICAgICBsZXQgZXF1YWwgPSBILmVxdWFsXG4gICAgICAgIGxldCBoYXNoIChfc2VlZDogaW50KSB4ID0gSC5oYXNoIHhcbiAgICAgIGVuZClcbiAgICBsZXQgY3JlYXRlIHN6ID0gY3JlYXRlIH5yYW5kb206ZmFsc2Ugc3pcbiAgICBsZXQgb2Zfc2VxIGkgPVxuICAgICAgbGV0IHRibCA9IGNyZWF0ZSAxNiBpblxuICAgICAgcmVwbGFjZV9zZXEgdGJsIGk7XG4gICAgICB0YmxcbiAgZW5kXG5cbiAgbW9kdWxlIEJ1Y2tldCA9IHN0cnVjdFxuXG4gICAgdHlwZSBub25yZWMgKCdrLCAnZCkgdCA9ICgnaywgJ2QpIHQgbGlzdCByZWZcbiAgICBsZXQgazFfbWFrZSA9IG1ha2VcbiAgICBsZXQgbWFrZSAoKSA9IHJlZiBbXVxuICAgIGxldCBhZGQgYiBrIGQgPSBiIDo9IGsxX21ha2UgayBkIDo6ICFiXG5cbiAgICBsZXQgdGVzdF9rZXkgayBlID1cbiAgICAgIG1hdGNoIGdldF9rZXkgZSB3aXRoXG4gICAgICB8IFNvbWUgeCB3aGVuIHggPT0gayAtPiB0cnVlXG4gICAgICB8IF8gLT4gZmFsc2VcblxuICAgIGxldCByZW1vdmUgYiBrID1cbiAgICAgIGxldCByZWMgbG9vcCBsIGFjYyA9XG4gICAgICAgIG1hdGNoIGwgd2l0aFxuICAgICAgICB8IFtdIC0+ICgpXG4gICAgICAgIHwgaCA6OiB0IHdoZW4gdGVzdF9rZXkgayBoIC0+IGIgOj0gTGlzdC5yZXZfYXBwZW5kIGFjYyB0XG4gICAgICAgIHwgaCA6OiB0IC0+IGxvb3AgdCAoaCA6OiBhY2MpXG4gICAgICBpblxuICAgICAgbG9vcCAhYiBbXVxuXG4gICAgbGV0IGZpbmQgYiBrID1cbiAgICAgIG1hdGNoIExpc3QuZmluZF9vcHQgKHRlc3Rfa2V5IGspICFiIHdpdGhcbiAgICAgIHwgU29tZSBlIC0+IGdldF9kYXRhIGVcbiAgICAgIHwgTm9uZSAtPiBOb25lXG5cbiAgICBsZXQgbGVuZ3RoIGIgPSBMaXN0Lmxlbmd0aCAhYlxuICAgIGxldCBjbGVhciBiID0gYiA6PSBbXVxuXG4gIGVuZFxuXG5lbmRcblxubW9kdWxlIEsyID0gc3RydWN0XG4gIHR5cGUgKCdrMSwgJ2syLCAnZCkgdCA9IE9iakVwaC50XG5cbiAgbGV0IGNyZWF0ZSAoKSA6ICgnazEsJ2syLCdkKSB0ID0gT2JqRXBoLmNyZWF0ZSAyXG5cbiAgbGV0IGdldF9rZXkxICh0OignazEsJ2syLCdkKSB0KSA6ICdrMSBvcHRpb24gPSBvYmpfb3B0IChPYmpFcGguZ2V0X2tleSB0IDApXG4gIGxldCBnZXRfa2V5MV9jb3B5ICh0OignazEsJ2syLCdkKSB0KSA6ICdrMSBvcHRpb24gPVxuICAgIG9ial9vcHQgKE9iakVwaC5nZXRfa2V5X2NvcHkgdCAwKVxuICBsZXQgc2V0X2tleTEgKHQ6KCdrMSwnazIsJ2QpIHQpIChrOidrMSkgOiB1bml0ID1cbiAgICBPYmpFcGguc2V0X2tleSB0IDAgKE9iai5yZXByIGspXG4gIGxldCB1bnNldF9rZXkxICh0OignazEsJ2syLCdkKSB0KSA6IHVuaXQgPSBPYmpFcGgudW5zZXRfa2V5IHQgMFxuICBsZXQgY2hlY2tfa2V5MSAodDooJ2sxLCdrMiwnZCkgdCkgOiBib29sID0gT2JqRXBoLmNoZWNrX2tleSB0IDBcblxuICBsZXQgZ2V0X2tleTIgKHQ6KCdrMSwnazIsJ2QpIHQpIDogJ2syIG9wdGlvbiA9IG9ial9vcHQgKE9iakVwaC5nZXRfa2V5IHQgMSlcbiAgbGV0IGdldF9rZXkyX2NvcHkgKHQ6KCdrMSwnazIsJ2QpIHQpIDogJ2syIG9wdGlvbiA9XG4gICAgb2JqX29wdCAoT2JqRXBoLmdldF9rZXlfY29weSB0IDEpXG4gIGxldCBzZXRfa2V5MiAodDooJ2sxLCdrMiwnZCkgdCkgKGs6J2syKSA6IHVuaXQgPVxuICAgIE9iakVwaC5zZXRfa2V5IHQgMSAoT2JqLnJlcHIgaylcbiAgbGV0IHVuc2V0X2tleTIgKHQ6KCdrMSwnazIsJ2QpIHQpIDogdW5pdCA9IE9iakVwaC51bnNldF9rZXkgdCAxXG4gIGxldCBjaGVja19rZXkyICh0OignazEsJ2syLCdkKSB0KSA6IGJvb2wgPSBPYmpFcGguY2hlY2tfa2V5IHQgMVxuXG5cbiAgbGV0IGJsaXRfa2V5MSAodDE6KCdrMSxfLF8pIHQpICh0MjooJ2sxLF8sXykgdCkgOiB1bml0ID1cbiAgICBPYmpFcGguYmxpdF9rZXkgdDEgMCB0MiAwIDFcbiAgbGV0IGJsaXRfa2V5MiAodDE6KF8sJ2syLF8pIHQpICh0MjooXywnazIsXykgdCkgOiB1bml0ID1cbiAgICBPYmpFcGguYmxpdF9rZXkgdDEgMSB0MiAxIDFcbiAgbGV0IGJsaXRfa2V5MTIgKHQxOignazEsJ2syLF8pIHQpICh0MjooJ2sxLCdrMixfKSB0KSA6IHVuaXQgPVxuICAgIE9iakVwaC5ibGl0X2tleSB0MSAwIHQyIDAgMlxuXG4gIGxldCBnZXRfZGF0YSAodDooJ2sxLCdrMiwnZCkgdCkgOiAnZCBvcHRpb24gPSBvYmpfb3B0IChPYmpFcGguZ2V0X2RhdGEgdClcbiAgbGV0IGdldF9kYXRhX2NvcHkgKHQ6KCdrMSwnazIsJ2QpIHQpIDogJ2Qgb3B0aW9uID1cbiAgICBvYmpfb3B0IChPYmpFcGguZ2V0X2RhdGFfY29weSB0KVxuICBsZXQgc2V0X2RhdGEgKHQ6KCdrMSwnazIsJ2QpIHQpIChkOidkKSA6IHVuaXQgPVxuICAgIE9iakVwaC5zZXRfZGF0YSB0IChPYmoucmVwciBkKVxuICBsZXQgdW5zZXRfZGF0YSAodDooJ2sxLCdrMiwnZCkgdCkgOiB1bml0ID0gT2JqRXBoLnVuc2V0X2RhdGEgdFxuICBsZXQgY2hlY2tfZGF0YSAodDooJ2sxLCdrMiwnZCkgdCkgOiBib29sID0gT2JqRXBoLmNoZWNrX2RhdGEgdFxuICBsZXQgYmxpdF9kYXRhICh0MTooXyxfLCdkKSB0KSAodDI6KF8sXywnZCkgdCkgOiB1bml0ID0gT2JqRXBoLmJsaXRfZGF0YSB0MSB0MlxuXG4gIGxldCBtYWtlIGtleTEga2V5MiBkYXRhID1cbiAgICBsZXQgZXBoID0gY3JlYXRlICgpIGluXG4gICAgc2V0X2RhdGEgZXBoIGRhdGE7XG4gICAgc2V0X2tleTEgZXBoIGtleTE7XG4gICAgc2V0X2tleTIgZXBoIGtleTI7XG4gICAgaWdub3JlIChTeXMub3BhcXVlX2lkZW50aXR5IGtleTEpO1xuICAgIGVwaFxuXG4gIGxldCBxdWVyeSBlcGgga2V5MSBrZXkyID1cbiAgICBtYXRjaCBnZXRfa2V5MSBlcGggd2l0aFxuICAgIHwgTm9uZSAtPiBOb25lXG4gICAgfCBTb21lIGsgd2hlbiBrID09IGtleTEgLT5cbiAgICAgICAgYmVnaW4gbWF0Y2ggZ2V0X2tleTIgZXBoIHdpdGhcbiAgICAgICAgfCBOb25lIC0+IE5vbmVcbiAgICAgICAgfCBTb21lIGsgd2hlbiBrID09IGtleTIgLT4gZ2V0X2RhdGEgZXBoXG4gICAgICAgIHwgU29tZSBfIC0+IE5vbmVcbiAgICAgICAgZW5kXG4gICAgfCBTb21lIF8gLT4gTm9uZVxuXG4gIG1vZHVsZSBNYWtlU2VlZGVkXG4gICAgICAoSDE6SGFzaHRibC5TZWVkZWRIYXNoZWRUeXBlKVxuICAgICAgKEgyOkhhc2h0YmwuU2VlZGVkSGFzaGVkVHlwZSkgPVxuICAgIEdlbkhhc2hUYWJsZS5NYWtlU2VlZGVkKHN0cnVjdFxuICAgICAgdHlwZSAnYSBjb250YWluZXIgPSAoSDEudCxIMi50LCdhKSB0XG4gICAgICB0eXBlIHQgPSBIMS50ICogSDIudFxuICAgICAgbGV0IGNyZWF0ZSAoazEsazIpIGQgPVxuICAgICAgICBsZXQgYyA9IGNyZWF0ZSAoKSBpblxuICAgICAgICBzZXRfZGF0YSBjIGQ7XG4gICAgICAgIHNldF9rZXkxIGMgazE7IHNldF9rZXkyIGMgazI7XG4gICAgICAgIGNcbiAgICAgIGxldCBoYXNoIHNlZWQgKGsxLGsyKSA9XG4gICAgICAgIEgxLmhhc2ggc2VlZCBrMSArIEgyLmhhc2ggc2VlZCBrMiAqIDY1NTk5XG4gICAgICBsZXQgZXF1YWwgYyAoazEsazIpID1cbiAgICAgICAgbWF0Y2ggZ2V0X2tleTEgYywgZ2V0X2tleTIgYyB3aXRoXG4gICAgICAgIHwgTm9uZSwgXyB8IF8gLCBOb25lIC0+IEdlbkhhc2hUYWJsZS5FRGVhZFxuICAgICAgICB8IFNvbWUgazEnLCBTb21lIGsyJyAtPlxuICAgICAgICAgICAgaWYgSDEuZXF1YWwgazEgazEnICYmIEgyLmVxdWFsIGsyIGsyJ1xuICAgICAgICAgICAgdGhlbiBHZW5IYXNoVGFibGUuRVRydWUgZWxzZSBHZW5IYXNoVGFibGUuRUZhbHNlXG4gICAgICBsZXQgZ2V0X2RhdGEgPSBnZXRfZGF0YVxuICAgICAgbGV0IGdldF9rZXkgYyA9XG4gICAgICAgIG1hdGNoIGdldF9rZXkxIGMsIGdldF9rZXkyIGMgd2l0aFxuICAgICAgICB8IE5vbmUsIF8gfCBfICwgTm9uZSAtPiBOb25lXG4gICAgICAgIHwgU29tZSBrMScsIFNvbWUgazInIC0+IFNvbWUgKGsxJywgazInKVxuICAgICAgbGV0IHNldF9rZXlfZGF0YSBjIChrMSxrMikgZCA9XG4gICAgICAgIHVuc2V0X2RhdGEgYztcbiAgICAgICAgc2V0X2tleTEgYyBrMTsgc2V0X2tleTIgYyBrMjtcbiAgICAgICAgc2V0X2RhdGEgYyBkXG4gICAgICBsZXQgY2hlY2tfa2V5IGMgPSBjaGVja19rZXkxIGMgJiYgY2hlY2tfa2V5MiBjXG4gICAgZW5kKVxuXG4gIG1vZHVsZSBNYWtlKEgxOiBIYXNodGJsLkhhc2hlZFR5cGUpKEgyOiBIYXNodGJsLkhhc2hlZFR5cGUpOlxuICAgIChTIHdpdGggdHlwZSBrZXkgPSBIMS50ICogSDIudCkgPVxuICBzdHJ1Y3RcbiAgICBpbmNsdWRlIE1ha2VTZWVkZWRcbiAgICAgICAgKHN0cnVjdFxuICAgICAgICAgIHR5cGUgdCA9IEgxLnRcbiAgICAgICAgICBsZXQgZXF1YWwgPSBIMS5lcXVhbFxuICAgICAgICAgIGxldCBoYXNoIChfc2VlZDogaW50KSB4ID0gSDEuaGFzaCB4XG4gICAgICAgIGVuZClcbiAgICAgICAgKHN0cnVjdFxuICAgICAgICAgIHR5cGUgdCA9IEgyLnRcbiAgICAgICAgICBsZXQgZXF1YWwgPSBIMi5lcXVhbFxuICAgICAgICAgIGxldCBoYXNoIChfc2VlZDogaW50KSB4ID0gSDIuaGFzaCB4XG4gICAgICAgIGVuZClcbiAgICBsZXQgY3JlYXRlIHN6ID0gY3JlYXRlIH5yYW5kb206ZmFsc2Ugc3pcbiAgICBsZXQgb2Zfc2VxIGkgPVxuICAgICAgbGV0IHRibCA9IGNyZWF0ZSAxNiBpblxuICAgICAgcmVwbGFjZV9zZXEgdGJsIGk7XG4gICAgICB0YmxcbiAgZW5kXG5cbiAgbW9kdWxlIEJ1Y2tldCA9IHN0cnVjdFxuXG4gICAgdHlwZSBub25yZWMgKCdrMSwgJ2syLCAnZCkgdCA9ICgnazEsICdrMiwgJ2QpIHQgbGlzdCByZWZcbiAgICBsZXQgazJfbWFrZSA9IG1ha2VcbiAgICBsZXQgbWFrZSAoKSA9IHJlZiBbXVxuICAgIGxldCBhZGQgYiBrMSBrMiBkID0gYiA6PSBrMl9tYWtlIGsxIGsyIGQgOjogIWJcblxuICAgIGxldCB0ZXN0X2tleXMgazEgazIgZSA9XG4gICAgICBtYXRjaCBnZXRfa2V5MSBlLCBnZXRfa2V5MiBlIHdpdGhcbiAgICAgIHwgU29tZSB4MSwgU29tZSB4MiB3aGVuIHgxID09IGsxICYmIHgyID09IGsyIC0+IHRydWVcbiAgICAgIHwgXyAtPiBmYWxzZVxuXG4gICAgbGV0IHJlbW92ZSBiIGsxIGsyID1cbiAgICAgIGxldCByZWMgbG9vcCBsIGFjYyA9XG4gICAgICAgIG1hdGNoIGwgd2l0aFxuICAgICAgICB8IFtdIC0+ICgpXG4gICAgICAgIHwgaCA6OiB0IHdoZW4gdGVzdF9rZXlzIGsxIGsyIGggLT4gYiA6PSBMaXN0LnJldl9hcHBlbmQgYWNjIHRcbiAgICAgICAgfCBoIDo6IHQgLT4gbG9vcCB0IChoIDo6IGFjYylcbiAgICAgIGluXG4gICAgICBsb29wICFiIFtdXG5cbiAgICBsZXQgZmluZCBiIGsxIGsyID1cbiAgICAgIG1hdGNoIExpc3QuZmluZF9vcHQgKHRlc3Rfa2V5cyBrMSBrMikgIWIgd2l0aFxuICAgICAgfCBTb21lIGUgLT4gZ2V0X2RhdGEgZVxuICAgICAgfCBOb25lIC0+IE5vbmVcblxuICAgIGxldCBsZW5ndGggYiA9IExpc3QubGVuZ3RoICFiXG4gICAgbGV0IGNsZWFyIGIgPSBiIDo9IFtdXG5cbiAgZW5kXG5cbmVuZFxuXG5tb2R1bGUgS24gPSBzdHJ1Y3RcbiAgdHlwZSAoJ2ssJ2QpIHQgPSBPYmpFcGgudFxuXG4gIGxldCBjcmVhdGUgbiA6ICgnaywnZCkgdCA9IE9iakVwaC5jcmVhdGUgblxuICBsZXQgbGVuZ3RoIChrOignaywnZCkgdCkgOiBpbnQgPSBPYmpFcGgubGVuZ3RoIGtcblxuICBsZXQgZ2V0X2tleSAodDooJ2ssJ2QpIHQpIChuOmludCkgOiAnayBvcHRpb24gPSBvYmpfb3B0IChPYmpFcGguZ2V0X2tleSB0IG4pXG4gIGxldCBnZXRfa2V5X2NvcHkgKHQ6KCdrLCdkKSB0KSAobjppbnQpIDogJ2sgb3B0aW9uID1cbiAgICBvYmpfb3B0IChPYmpFcGguZ2V0X2tleV9jb3B5IHQgbilcbiAgbGV0IHNldF9rZXkgKHQ6KCdrLCdkKSB0KSAobjppbnQpIChrOidrKSA6IHVuaXQgPVxuICAgIE9iakVwaC5zZXRfa2V5IHQgbiAoT2JqLnJlcHIgaylcbiAgbGV0IHVuc2V0X2tleSAodDooJ2ssJ2QpIHQpIChuOmludCkgOiB1bml0ID0gT2JqRXBoLnVuc2V0X2tleSB0IG5cbiAgbGV0IGNoZWNrX2tleSAodDooJ2ssJ2QpIHQpIChuOmludCkgOiBib29sID0gT2JqRXBoLmNoZWNrX2tleSB0IG5cblxuICBsZXQgYmxpdF9rZXkgKHQxOignaywnZCkgdCkgKG8xOmludCkgKHQyOignaywnZCkgdCkgKG8yOmludCkgKGw6aW50KSA6IHVuaXQgPVxuICAgIE9iakVwaC5ibGl0X2tleSB0MSBvMSB0MiBvMiBsXG5cbiAgbGV0IGdldF9kYXRhICh0OignaywnZCkgdCkgOiAnZCBvcHRpb24gPSBvYmpfb3B0IChPYmpFcGguZ2V0X2RhdGEgdClcbiAgbGV0IGdldF9kYXRhX2NvcHkgKHQ6KCdrLCdkKSB0KSA6ICdkIG9wdGlvbiA9IG9ial9vcHQgKE9iakVwaC5nZXRfZGF0YV9jb3B5IHQpXG4gIGxldCBzZXRfZGF0YSAodDooJ2ssJ2QpIHQpIChkOidkKSA6IHVuaXQgPSBPYmpFcGguc2V0X2RhdGEgdCAoT2JqLnJlcHIgZClcbiAgbGV0IHVuc2V0X2RhdGEgKHQ6KCdrLCdkKSB0KSA6IHVuaXQgPSBPYmpFcGgudW5zZXRfZGF0YSB0XG4gIGxldCBjaGVja19kYXRhICh0OignaywnZCkgdCkgOiBib29sID0gT2JqRXBoLmNoZWNrX2RhdGEgdFxuICBsZXQgYmxpdF9kYXRhICh0MTooXywnZCkgdCkgKHQyOihfLCdkKSB0KSA6IHVuaXQgPSBPYmpFcGguYmxpdF9kYXRhIHQxIHQyXG5cbiAgbGV0IG1ha2Uga2V5cyBkYXRhID1cbiAgICBsZXQgbCA9IEFycmF5Lmxlbmd0aCBrZXlzIGluXG4gICAgbGV0IGVwaCA9IGNyZWF0ZSBsIGluXG4gICAgc2V0X2RhdGEgZXBoIGRhdGE7XG4gICAgZm9yIGkgPSAwIHRvIGwgLSAxIGRvIHNldF9rZXkgZXBoIGkga2V5cy4oaSkgZG9uZTtcbiAgICBlcGhcblxuICBsZXQgcXVlcnkgZXBoIGtleXMgPVxuICAgIGxldCBsID0gbGVuZ3RoIGVwaCBpblxuICAgIHRyeVxuICAgICAgaWYgbCA8PiBBcnJheS5sZW5ndGgga2V5cyB0aGVuIHJhaXNlIEV4aXQ7XG4gICAgICBmb3IgaSA9IDAgdG8gbCAtIDEgZG9cbiAgICAgICAgbWF0Y2ggZ2V0X2tleSBlcGggaSB3aXRoXG4gICAgICAgIHwgTm9uZSAtPiByYWlzZSBFeGl0XG4gICAgICAgIHwgU29tZSBrIHdoZW4gayA9PSBrZXlzLihpKSAtPiAoKVxuICAgICAgICB8IFNvbWUgXyAtPiByYWlzZSBFeGl0XG4gICAgICBkb25lO1xuICAgICAgZ2V0X2RhdGEgZXBoXG4gICAgd2l0aCBFeGl0IC0+IE5vbmVcblxuICBtb2R1bGUgTWFrZVNlZWRlZCAoSDpIYXNodGJsLlNlZWRlZEhhc2hlZFR5cGUpID1cbiAgICBHZW5IYXNoVGFibGUuTWFrZVNlZWRlZChzdHJ1Y3RcbiAgICAgIHR5cGUgJ2EgY29udGFpbmVyID0gKEgudCwnYSkgdFxuICAgICAgdHlwZSB0ID0gSC50IGFycmF5XG4gICAgICBsZXQgY3JlYXRlIGsgZCA9XG4gICAgICAgIGxldCBjID0gY3JlYXRlIChBcnJheS5sZW5ndGggaykgaW5cbiAgICAgICAgc2V0X2RhdGEgYyBkO1xuICAgICAgICBmb3IgaT0wIHRvIEFycmF5Lmxlbmd0aCBrIC0xIGRvXG4gICAgICAgICAgc2V0X2tleSBjIGkgay4oaSk7XG4gICAgICAgIGRvbmU7XG4gICAgICAgIGNcbiAgICAgIGxldCBoYXNoIHNlZWQgayA9XG4gICAgICAgIGxldCBoID0gcmVmIDAgaW5cbiAgICAgICAgZm9yIGk9MCB0byBBcnJheS5sZW5ndGggayAtMSBkb1xuICAgICAgICAgIGggOj0gSC5oYXNoIHNlZWQgay4oaSkgKiA2NTU5OSArICFoO1xuICAgICAgICBkb25lO1xuICAgICAgICAhaFxuICAgICAgbGV0IGVxdWFsIGMgayA9XG4gICAgICAgIGxldCBsZW4gID0gQXJyYXkubGVuZ3RoIGsgaW5cbiAgICAgICAgbGV0IGxlbicgPSBsZW5ndGggYyBpblxuICAgICAgICBpZiBsZW4gIT0gbGVuJyB0aGVuIEdlbkhhc2hUYWJsZS5FRmFsc2VcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGxldCByZWMgZXF1YWxfYXJyYXkgayBjIGkgPVxuICAgICAgICAgICAgaWYgaSA8IDAgdGhlbiBHZW5IYXNoVGFibGUuRVRydWVcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgbWF0Y2ggZ2V0X2tleSBjIGkgd2l0aFxuICAgICAgICAgICAgICB8IE5vbmUgLT4gR2VuSGFzaFRhYmxlLkVEZWFkXG4gICAgICAgICAgICAgIHwgU29tZSBraSAtPlxuICAgICAgICAgICAgICAgICAgaWYgSC5lcXVhbCBrLihpKSBraVxuICAgICAgICAgICAgICAgICAgdGhlbiBlcXVhbF9hcnJheSBrIGMgKGktMSlcbiAgICAgICAgICAgICAgICAgIGVsc2UgR2VuSGFzaFRhYmxlLkVGYWxzZVxuICAgICAgICAgIGluXG4gICAgICAgICAgZXF1YWxfYXJyYXkgayBjIChsZW4tMSlcbiAgICAgIGxldCBnZXRfZGF0YSA9IGdldF9kYXRhXG4gICAgICBsZXQgZ2V0X2tleSBjID1cbiAgICAgICAgbGV0IGxlbiA9IGxlbmd0aCBjIGluXG4gICAgICAgIGlmIGxlbiA9IDAgdGhlbiBTb21lIFt8fF1cbiAgICAgICAgZWxzZVxuICAgICAgICAgIG1hdGNoIGdldF9rZXkgYyAwIHdpdGhcbiAgICAgICAgICB8IE5vbmUgLT4gTm9uZVxuICAgICAgICAgIHwgU29tZSBrMCAtPlxuICAgICAgICAgICAgICBsZXQgcmVjIGZpbGwgYSBpID1cbiAgICAgICAgICAgICAgICBpZiBpIDwgMSB0aGVuIFNvbWUgYVxuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgIG1hdGNoIGdldF9rZXkgYyBpIHdpdGhcbiAgICAgICAgICAgICAgICAgIHwgTm9uZSAtPiBOb25lXG4gICAgICAgICAgICAgICAgICB8IFNvbWUga2kgLT5cbiAgICAgICAgICAgICAgICAgICAgICBhLihpKSA8LSBraTtcbiAgICAgICAgICAgICAgICAgICAgICBmaWxsIGEgKGktMSlcbiAgICAgICAgICAgICAgaW5cbiAgICAgICAgICAgICAgbGV0IGEgPSBBcnJheS5tYWtlIGxlbiBrMCBpblxuICAgICAgICAgICAgICBmaWxsIGEgKGxlbi0xKVxuICAgICAgbGV0IHNldF9rZXlfZGF0YSBjIGsgZCA9XG4gICAgICAgIHVuc2V0X2RhdGEgYztcbiAgICAgICAgZm9yIGk9MCB0byBBcnJheS5sZW5ndGggayAtMSBkb1xuICAgICAgICAgIHNldF9rZXkgYyBpIGsuKGkpO1xuICAgICAgICBkb25lO1xuICAgICAgICBzZXRfZGF0YSBjIGRcbiAgICAgIGxldCBjaGVja19rZXkgYyA9XG4gICAgICAgIGxldCByZWMgY2hlY2sgYyBpID1cbiAgICAgICAgICBpIDwgMCB8fCAoY2hlY2tfa2V5IGMgaSAmJiBjaGVjayBjIChpLTEpKSBpblxuICAgICAgICBjaGVjayBjIChsZW5ndGggYyAtIDEpXG4gICAgZW5kKVxuXG4gIG1vZHVsZSBNYWtlKEg6IEhhc2h0YmwuSGFzaGVkVHlwZSk6IChTIHdpdGggdHlwZSBrZXkgPSBILnQgYXJyYXkpID1cbiAgc3RydWN0XG4gICAgaW5jbHVkZSBNYWtlU2VlZGVkKHN0cnVjdFxuICAgICAgICB0eXBlIHQgPSBILnRcbiAgICAgICAgbGV0IGVxdWFsID0gSC5lcXVhbFxuICAgICAgICBsZXQgaGFzaCAoX3NlZWQ6IGludCkgeCA9IEguaGFzaCB4XG4gICAgICBlbmQpXG4gICAgbGV0IGNyZWF0ZSBzeiA9IGNyZWF0ZSB+cmFuZG9tOmZhbHNlIHN6XG4gICAgbGV0IG9mX3NlcSBpID1cbiAgICAgIGxldCB0YmwgPSBjcmVhdGUgMTYgaW5cbiAgICAgIHJlcGxhY2Vfc2VxIHRibCBpO1xuICAgICAgdGJsXG4gIGVuZFxuXG4gIG1vZHVsZSBCdWNrZXQgPSBzdHJ1Y3RcblxuICAgIHR5cGUgbm9ucmVjICgnaywgJ2QpIHQgPSAoJ2ssICdkKSB0IGxpc3QgcmVmXG4gICAgbGV0IGtuX21ha2UgPSBtYWtlXG4gICAgbGV0IG1ha2UgKCkgPSByZWYgW11cbiAgICBsZXQgYWRkIGIgayBkID0gYiA6PSBrbl9tYWtlIGsgZCA6OiAhYlxuXG4gICAgbGV0IHRlc3Rfa2V5cyBrIGUgPVxuICAgICAgdHJ5XG4gICAgICAgIGlmIGxlbmd0aCBlIDw+IEFycmF5Lmxlbmd0aCBrIHRoZW4gcmFpc2UgRXhpdDtcbiAgICAgICAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCBrIC0gMSBkb1xuICAgICAgICAgIG1hdGNoIGdldF9rZXkgZSBpIHdpdGhcbiAgICAgICAgICB8IFNvbWUgeCB3aGVuIHggPT0gay4oaSkgLT4gKClcbiAgICAgICAgICB8IF8gLT4gcmFpc2UgRXhpdFxuICAgICAgICBkb25lO1xuICAgICAgICB0cnVlXG4gICAgICB3aXRoIEV4aXQgLT4gZmFsc2VcblxuICAgIGxldCByZW1vdmUgYiBrID1cbiAgICAgIGxldCByZWMgbG9vcCBsIGFjYyA9XG4gICAgICAgIG1hdGNoIGwgd2l0aFxuICAgICAgICB8IFtdIC0+ICgpXG4gICAgICAgIHwgaCA6OiB0IHdoZW4gdGVzdF9rZXlzIGsgaCAtPiBiIDo9IExpc3QucmV2X2FwcGVuZCBhY2MgdFxuICAgICAgICB8IGggOjogdCAtPiBsb29wIHQgKGggOjogYWNjKVxuICAgICAgaW5cbiAgICAgIGxvb3AgIWIgW11cblxuICAgIGxldCBmaW5kIGIgayA9XG4gICAgICBtYXRjaCBMaXN0LmZpbmRfb3B0ICh0ZXN0X2tleXMgaykgIWIgd2l0aFxuICAgICAgfCBTb21lIGUgLT4gZ2V0X2RhdGEgZVxuICAgICAgfCBOb25lIC0+IE5vbmVcblxuICAgIGxldCBsZW5ndGggYiA9IExpc3QubGVuZ3RoICFiXG4gICAgbGV0IGNsZWFyIGIgPSBiIDo9IFtdXG5cbiAgZW5kXG5cbmVuZFxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgIE1hbnVlbCBTZXJyYW5vIGV0IFhhdmllciBMZXJveSwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAwMCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBNb2R1bGUgW0JpZ2FycmF5XTogbGFyZ2UsIG11bHRpLWRpbWVuc2lvbmFsLCBudW1lcmljYWwgYXJyYXlzICopXG5cbigqIFRoZXNlIHR5cGVzIGluIG11c3QgYmUga2VwdCBpbiBzeW5jIHdpdGggdGhlIHRhYmxlcyBpblxuICAgLi4vdHlwaW5nL3R5cGVvcHQubWwgKilcblxudHlwZSBmbG9hdDMyX2VsdCA9IEZsb2F0MzJfZWx0XG50eXBlIGZsb2F0NjRfZWx0ID0gRmxvYXQ2NF9lbHRcbnR5cGUgaW50OF9zaWduZWRfZWx0ID0gSW50OF9zaWduZWRfZWx0XG50eXBlIGludDhfdW5zaWduZWRfZWx0ID0gSW50OF91bnNpZ25lZF9lbHRcbnR5cGUgaW50MTZfc2lnbmVkX2VsdCA9IEludDE2X3NpZ25lZF9lbHRcbnR5cGUgaW50MTZfdW5zaWduZWRfZWx0ID0gSW50MTZfdW5zaWduZWRfZWx0XG50eXBlIGludDMyX2VsdCA9IEludDMyX2VsdFxudHlwZSBpbnQ2NF9lbHQgPSBJbnQ2NF9lbHRcbnR5cGUgaW50X2VsdCA9IEludF9lbHRcbnR5cGUgbmF0aXZlaW50X2VsdCA9IE5hdGl2ZWludF9lbHRcbnR5cGUgY29tcGxleDMyX2VsdCA9IENvbXBsZXgzMl9lbHRcbnR5cGUgY29tcGxleDY0X2VsdCA9IENvbXBsZXg2NF9lbHRcblxudHlwZSAoJ2EsICdiKSBraW5kID1cbiAgICBGbG9hdDMyIDogKGZsb2F0LCBmbG9hdDMyX2VsdCkga2luZFxuICB8IEZsb2F0NjQgOiAoZmxvYXQsIGZsb2F0NjRfZWx0KSBraW5kXG4gIHwgSW50OF9zaWduZWQgOiAoaW50LCBpbnQ4X3NpZ25lZF9lbHQpIGtpbmRcbiAgfCBJbnQ4X3Vuc2lnbmVkIDogKGludCwgaW50OF91bnNpZ25lZF9lbHQpIGtpbmRcbiAgfCBJbnQxNl9zaWduZWQgOiAoaW50LCBpbnQxNl9zaWduZWRfZWx0KSBraW5kXG4gIHwgSW50MTZfdW5zaWduZWQgOiAoaW50LCBpbnQxNl91bnNpZ25lZF9lbHQpIGtpbmRcbiAgfCBJbnQzMiA6IChpbnQzMiwgaW50MzJfZWx0KSBraW5kXG4gIHwgSW50NjQgOiAoaW50NjQsIGludDY0X2VsdCkga2luZFxuICB8IEludCA6IChpbnQsIGludF9lbHQpIGtpbmRcbiAgfCBOYXRpdmVpbnQgOiAobmF0aXZlaW50LCBuYXRpdmVpbnRfZWx0KSBraW5kXG4gIHwgQ29tcGxleDMyIDogKENvbXBsZXgudCwgY29tcGxleDMyX2VsdCkga2luZFxuICB8IENvbXBsZXg2NCA6IChDb21wbGV4LnQsIGNvbXBsZXg2NF9lbHQpIGtpbmRcbiAgfCBDaGFyIDogKGNoYXIsIGludDhfdW5zaWduZWRfZWx0KSBraW5kXG5cbnR5cGUgY19sYXlvdXQgPSBDX2xheW91dF90eXBcbnR5cGUgZm9ydHJhbl9sYXlvdXQgPSBGb3J0cmFuX2xheW91dF90eXAgKCoqKVxuXG50eXBlICdhIGxheW91dCA9XG4gICAgQ19sYXlvdXQ6IGNfbGF5b3V0IGxheW91dFxuICB8IEZvcnRyYW5fbGF5b3V0OiBmb3J0cmFuX2xheW91dCBsYXlvdXRcblxuKCogS2VlcCB0aG9zZSBjb25zdGFudHMgaW4gc3luYyB3aXRoIHRoZSBjYW1sX2JhX2tpbmQgZW51bWVyYXRpb25cbiAgIGluIGJpZ2FycmF5LmggKilcblxubGV0IGZsb2F0MzIgPSBGbG9hdDMyXG5sZXQgZmxvYXQ2NCA9IEZsb2F0NjRcbmxldCBpbnQ4X3NpZ25lZCA9IEludDhfc2lnbmVkXG5sZXQgaW50OF91bnNpZ25lZCA9IEludDhfdW5zaWduZWRcbmxldCBpbnQxNl9zaWduZWQgPSBJbnQxNl9zaWduZWRcbmxldCBpbnQxNl91bnNpZ25lZCA9IEludDE2X3Vuc2lnbmVkXG5sZXQgaW50MzIgPSBJbnQzMlxubGV0IGludDY0ID0gSW50NjRcbmxldCBpbnQgPSBJbnRcbmxldCBuYXRpdmVpbnQgPSBOYXRpdmVpbnRcbmxldCBjb21wbGV4MzIgPSBDb21wbGV4MzJcbmxldCBjb21wbGV4NjQgPSBDb21wbGV4NjRcbmxldCBjaGFyID0gQ2hhclxuXG5sZXQga2luZF9zaXplX2luX2J5dGVzIDogdHlwZSBhIGIuIChhLCBiKSBraW5kIC0+IGludCA9IGZ1bmN0aW9uXG4gIHwgRmxvYXQzMiAtPiA0XG4gIHwgRmxvYXQ2NCAtPiA4XG4gIHwgSW50OF9zaWduZWQgLT4gMVxuICB8IEludDhfdW5zaWduZWQgLT4gMVxuICB8IEludDE2X3NpZ25lZCAtPiAyXG4gIHwgSW50MTZfdW5zaWduZWQgLT4gMlxuICB8IEludDMyIC0+IDRcbiAgfCBJbnQ2NCAtPiA4XG4gIHwgSW50IC0+IFN5cy53b3JkX3NpemUgLyA4XG4gIHwgTmF0aXZlaW50IC0+IFN5cy53b3JkX3NpemUgLyA4XG4gIHwgQ29tcGxleDMyIC0+IDhcbiAgfCBDb21wbGV4NjQgLT4gMTZcbiAgfCBDaGFyIC0+IDFcblxuKCogS2VlcCB0aG9zZSBjb25zdGFudHMgaW4gc3luYyB3aXRoIHRoZSBjYW1sX2JhX2xheW91dCBlbnVtZXJhdGlvblxuICAgaW4gYmlnYXJyYXkuaCAqKVxuXG5sZXQgY19sYXlvdXQgPSBDX2xheW91dFxubGV0IGZvcnRyYW5fbGF5b3V0ID0gRm9ydHJhbl9sYXlvdXRcblxubW9kdWxlIEdlbmFycmF5ID0gc3RydWN0XG4gIHR5cGUgKCEnYSwgISdiLCAhJ2MpIHRcbiAgZXh0ZXJuYWwgY3JlYXRlOiAoJ2EsICdiKSBraW5kIC0+ICdjIGxheW91dCAtPiBpbnQgYXJyYXkgLT4gKCdhLCAnYiwgJ2MpIHRcbiAgICAgPSBcImNhbWxfYmFfY3JlYXRlXCJcbiAgZXh0ZXJuYWwgZ2V0OiAoJ2EsICdiLCAnYykgdCAtPiBpbnQgYXJyYXkgLT4gJ2FcbiAgICAgPSBcImNhbWxfYmFfZ2V0X2dlbmVyaWNcIlxuICBleHRlcm5hbCBzZXQ6ICgnYSwgJ2IsICdjKSB0IC0+IGludCBhcnJheSAtPiAnYSAtPiB1bml0XG4gICAgID0gXCJjYW1sX2JhX3NldF9nZW5lcmljXCJcblxuICBsZXQgcmVjIGNsb29wIGFyciBpZHggZiBjb2wgbWF4ID1cbiAgICBpZiBjb2wgPSBBcnJheS5sZW5ndGggaWR4IHRoZW4gc2V0IGFyciBpZHggKGYgaWR4KVxuICAgIGVsc2UgZm9yIGogPSAwIHRvIHByZWQgbWF4Lihjb2wpIGRvXG4gICAgICAgICAgIGlkeC4oY29sKSA8LSBqO1xuICAgICAgICAgICBjbG9vcCBhcnIgaWR4IGYgKHN1Y2MgY29sKSBtYXhcbiAgICAgICAgIGRvbmVcbiAgbGV0IHJlYyBmbG9vcCBhcnIgaWR4IGYgY29sIG1heCA9XG4gICAgaWYgY29sIDwgMCB0aGVuIHNldCBhcnIgaWR4IChmIGlkeClcbiAgICBlbHNlIGZvciBqID0gMSB0byBtYXguKGNvbCkgZG9cbiAgICAgICAgICAgaWR4Lihjb2wpIDwtIGo7XG4gICAgICAgICAgIGZsb29wIGFyciBpZHggZiAocHJlZCBjb2wpIG1heFxuICAgICAgICAgZG9uZVxuICBsZXQgaW5pdCAodHlwZSB0KSBraW5kIChsYXlvdXQgOiB0IGxheW91dCkgZGltcyBmID1cbiAgICBsZXQgYXJyID0gY3JlYXRlIGtpbmQgbGF5b3V0IGRpbXMgaW5cbiAgICBtYXRjaCBBcnJheS5sZW5ndGggZGltcywgbGF5b3V0IHdpdGhcbiAgICB8IDAsIF8gLT4gYXJyXG4gICAgfCBkbGVuLCBDX2xheW91dCAtPiBjbG9vcCBhcnIgKEFycmF5Lm1ha2UgZGxlbiAwKSBmIDAgZGltczsgYXJyXG4gICAgfCBkbGVuLCBGb3J0cmFuX2xheW91dCAtPiBmbG9vcCBhcnIgKEFycmF5Lm1ha2UgZGxlbiAxKSBmIChwcmVkIGRsZW4pIGRpbXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJcblxuICBleHRlcm5hbCBudW1fZGltczogKCdhLCAnYiwgJ2MpIHQgLT4gaW50ID0gXCJjYW1sX2JhX251bV9kaW1zXCJcbiAgZXh0ZXJuYWwgbnRoX2RpbTogKCdhLCAnYiwgJ2MpIHQgLT4gaW50IC0+IGludCA9IFwiY2FtbF9iYV9kaW1cIlxuICBsZXQgZGltcyBhID1cbiAgICBsZXQgbiA9IG51bV9kaW1zIGEgaW5cbiAgICBsZXQgZCA9IEFycmF5Lm1ha2UgbiAwIGluXG4gICAgZm9yIGkgPSAwIHRvIG4tMSBkbyBkLihpKSA8LSBudGhfZGltIGEgaSBkb25lO1xuICAgIGRcblxuICBleHRlcm5hbCBraW5kOiAoJ2EsICdiLCAnYykgdCAtPiAoJ2EsICdiKSBraW5kID0gXCJjYW1sX2JhX2tpbmRcIlxuICBleHRlcm5hbCBsYXlvdXQ6ICgnYSwgJ2IsICdjKSB0IC0+ICdjIGxheW91dCA9IFwiY2FtbF9iYV9sYXlvdXRcIlxuICBleHRlcm5hbCBjaGFuZ2VfbGF5b3V0OiAoJ2EsICdiLCAnYykgdCAtPiAnZCBsYXlvdXQgLT4gKCdhLCAnYiwgJ2QpIHRcbiAgICAgPSBcImNhbWxfYmFfY2hhbmdlX2xheW91dFwiXG5cbiAgbGV0IHNpemVfaW5fYnl0ZXMgYXJyID1cbiAgICAoa2luZF9zaXplX2luX2J5dGVzIChraW5kIGFycikpICogKEFycmF5LmZvbGRfbGVmdCAoICogKSAxIChkaW1zIGFycikpXG5cbiAgZXh0ZXJuYWwgc3ViX2xlZnQ6ICgnYSwgJ2IsIGNfbGF5b3V0KSB0IC0+IGludCAtPiBpbnQgLT4gKCdhLCAnYiwgY19sYXlvdXQpIHRcbiAgICAgPSBcImNhbWxfYmFfc3ViXCJcbiAgZXh0ZXJuYWwgc3ViX3JpZ2h0OiAoJ2EsICdiLCBmb3J0cmFuX2xheW91dCkgdCAtPiBpbnQgLT4gaW50IC0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICgnYSwgJ2IsIGZvcnRyYW5fbGF5b3V0KSB0XG4gICAgID0gXCJjYW1sX2JhX3N1YlwiXG4gIGV4dGVybmFsIHNsaWNlX2xlZnQ6ICgnYSwgJ2IsIGNfbGF5b3V0KSB0IC0+IGludCBhcnJheSAtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2EsICdiLCBjX2xheW91dCkgdFxuICAgICA9IFwiY2FtbF9iYV9zbGljZVwiXG4gIGV4dGVybmFsIHNsaWNlX3JpZ2h0OiAoJ2EsICdiLCBmb3J0cmFuX2xheW91dCkgdCAtPiBpbnQgYXJyYXkgLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKCdhLCAnYiwgZm9ydHJhbl9sYXlvdXQpIHRcbiAgICAgPSBcImNhbWxfYmFfc2xpY2VcIlxuICBleHRlcm5hbCBibGl0OiAoJ2EsICdiLCAnYykgdCAtPiAoJ2EsICdiLCAnYykgdCAtPiB1bml0XG4gICAgID0gXCJjYW1sX2JhX2JsaXRcIlxuICBleHRlcm5hbCBmaWxsOiAoJ2EsICdiLCAnYykgdCAtPiAnYSAtPiB1bml0ID0gXCJjYW1sX2JhX2ZpbGxcIlxuZW5kXG5cbm1vZHVsZSBBcnJheTAgPSBzdHJ1Y3RcbiAgdHlwZSAoISdhLCAhJ2IsICEnYykgdCA9ICgnYSwgJ2IsICdjKSBHZW5hcnJheS50XG4gIGxldCBjcmVhdGUga2luZCBsYXlvdXQgPVxuICAgIEdlbmFycmF5LmNyZWF0ZSBraW5kIGxheW91dCBbfHxdXG4gIGxldCBnZXQgYXJyID0gR2VuYXJyYXkuZ2V0IGFyciBbfHxdXG4gIGxldCBzZXQgYXJyID0gR2VuYXJyYXkuc2V0IGFyciBbfHxdXG4gIGV4dGVybmFsIGtpbmQ6ICgnYSwgJ2IsICdjKSB0IC0+ICgnYSwgJ2IpIGtpbmQgPSBcImNhbWxfYmFfa2luZFwiXG4gIGV4dGVybmFsIGxheW91dDogKCdhLCAnYiwgJ2MpIHQgLT4gJ2MgbGF5b3V0ID0gXCJjYW1sX2JhX2xheW91dFwiXG5cbiAgZXh0ZXJuYWwgY2hhbmdlX2xheW91dDogKCdhLCAnYiwgJ2MpIHQgLT4gJ2QgbGF5b3V0IC0+ICgnYSwgJ2IsICdkKSB0XG4gICAgPSBcImNhbWxfYmFfY2hhbmdlX2xheW91dFwiXG5cbiAgbGV0IHNpemVfaW5fYnl0ZXMgYXJyID0ga2luZF9zaXplX2luX2J5dGVzIChraW5kIGFycilcblxuICBleHRlcm5hbCBibGl0OiAoJ2EsICdiLCAnYykgdCAtPiAoJ2EsICdiLCAnYykgdCAtPiB1bml0ID0gXCJjYW1sX2JhX2JsaXRcIlxuICBleHRlcm5hbCBmaWxsOiAoJ2EsICdiLCAnYykgdCAtPiAnYSAtPiB1bml0ID0gXCJjYW1sX2JhX2ZpbGxcIlxuXG4gIGxldCBvZl92YWx1ZSBraW5kIGxheW91dCB2ID1cbiAgICBsZXQgYSA9IGNyZWF0ZSBraW5kIGxheW91dCBpblxuICAgIHNldCBhIHY7XG4gICAgYVxuICBsZXQgaW5pdCA9IG9mX3ZhbHVlXG5lbmRcblxubW9kdWxlIEFycmF5MSA9IHN0cnVjdFxuICB0eXBlICghJ2EsICEnYiwgISdjKSB0ID0gKCdhLCAnYiwgJ2MpIEdlbmFycmF5LnRcbiAgbGV0IGNyZWF0ZSBraW5kIGxheW91dCBkaW0gPVxuICAgIEdlbmFycmF5LmNyZWF0ZSBraW5kIGxheW91dCBbfGRpbXxdXG4gIGV4dGVybmFsIGdldDogKCdhLCAnYiwgJ2MpIHQgLT4gaW50IC0+ICdhID0gXCIlY2FtbF9iYV9yZWZfMVwiXG4gIGV4dGVybmFsIHNldDogKCdhLCAnYiwgJ2MpIHQgLT4gaW50IC0+ICdhIC0+IHVuaXQgPSBcIiVjYW1sX2JhX3NldF8xXCJcbiAgZXh0ZXJuYWwgdW5zYWZlX2dldDogKCdhLCAnYiwgJ2MpIHQgLT4gaW50IC0+ICdhID0gXCIlY2FtbF9iYV91bnNhZmVfcmVmXzFcIlxuICBleHRlcm5hbCB1bnNhZmVfc2V0OiAoJ2EsICdiLCAnYykgdCAtPiBpbnQgLT4gJ2EgLT4gdW5pdFxuICAgICA9IFwiJWNhbWxfYmFfdW5zYWZlX3NldF8xXCJcbiAgZXh0ZXJuYWwgZGltOiAoJ2EsICdiLCAnYykgdCAtPiBpbnQgPSBcIiVjYW1sX2JhX2RpbV8xXCJcbiAgZXh0ZXJuYWwga2luZDogKCdhLCAnYiwgJ2MpIHQgLT4gKCdhLCAnYikga2luZCA9IFwiY2FtbF9iYV9raW5kXCJcbiAgZXh0ZXJuYWwgbGF5b3V0OiAoJ2EsICdiLCAnYykgdCAtPiAnYyBsYXlvdXQgPSBcImNhbWxfYmFfbGF5b3V0XCJcblxuICBleHRlcm5hbCBjaGFuZ2VfbGF5b3V0OiAoJ2EsICdiLCAnYykgdCAtPiAnZCBsYXlvdXQgLT4gKCdhLCAnYiwgJ2QpIHRcbiAgICA9IFwiY2FtbF9iYV9jaGFuZ2VfbGF5b3V0XCJcblxuICBsZXQgc2l6ZV9pbl9ieXRlcyBhcnIgPVxuICAgIChraW5kX3NpemVfaW5fYnl0ZXMgKGtpbmQgYXJyKSkgKiAoZGltIGFycilcblxuICBleHRlcm5hbCBzdWI6ICgnYSwgJ2IsICdjKSB0IC0+IGludCAtPiBpbnQgLT4gKCdhLCAnYiwgJ2MpIHQgPSBcImNhbWxfYmFfc3ViXCJcbiAgbGV0IHNsaWNlICh0eXBlIHQpIChhIDogKF8sIF8sIHQpIEdlbmFycmF5LnQpIG4gPVxuICAgIG1hdGNoIGxheW91dCBhIHdpdGhcbiAgICB8IENfbGF5b3V0IC0+IChHZW5hcnJheS5zbGljZV9sZWZ0IGEgW3xufF0gOiAoXywgXywgdCkgR2VuYXJyYXkudClcbiAgICB8IEZvcnRyYW5fbGF5b3V0IC0+IChHZW5hcnJheS5zbGljZV9yaWdodCBhIFt8bnxdOiAoXywgXywgdCkgR2VuYXJyYXkudClcbiAgZXh0ZXJuYWwgYmxpdDogKCdhLCAnYiwgJ2MpIHQgLT4gKCdhLCAnYiwgJ2MpIHQgLT4gdW5pdCA9IFwiY2FtbF9iYV9ibGl0XCJcbiAgZXh0ZXJuYWwgZmlsbDogKCdhLCAnYiwgJ2MpIHQgLT4gJ2EgLT4gdW5pdCA9IFwiY2FtbF9iYV9maWxsXCJcbiAgbGV0IGNfaW5pdCBhcnIgZGltIGYgPVxuICAgIGZvciBpID0gMCB0byBwcmVkIGRpbSBkbyB1bnNhZmVfc2V0IGFyciBpIChmIGkpIGRvbmVcbiAgbGV0IGZvcnRyYW5faW5pdCBhcnIgZGltIGYgPVxuICAgIGZvciBpID0gMSB0byBkaW0gZG8gdW5zYWZlX3NldCBhcnIgaSAoZiBpKSBkb25lXG4gIGxldCBpbml0ICh0eXBlIHQpIGtpbmQgKGxheW91dCA6IHQgbGF5b3V0KSBkaW0gZiA9XG4gICAgbGV0IGFyciA9IGNyZWF0ZSBraW5kIGxheW91dCBkaW0gaW5cbiAgICBtYXRjaCBsYXlvdXQgd2l0aFxuICAgIHwgQ19sYXlvdXQgLT4gY19pbml0IGFyciBkaW0gZjsgYXJyXG4gICAgfCBGb3J0cmFuX2xheW91dCAtPiBmb3J0cmFuX2luaXQgYXJyIGRpbSBmOyBhcnJcbiAgbGV0IG9mX2FycmF5ICh0eXBlIHQpIGtpbmQgKGxheW91dDogdCBsYXlvdXQpIGRhdGEgPVxuICAgIGxldCBiYSA9IGNyZWF0ZSBraW5kIGxheW91dCAoQXJyYXkubGVuZ3RoIGRhdGEpIGluXG4gICAgbGV0IG9mcyA9XG4gICAgICBtYXRjaCBsYXlvdXQgd2l0aFxuICAgICAgICBDX2xheW91dCAtPiAwXG4gICAgICB8IEZvcnRyYW5fbGF5b3V0IC0+IDFcbiAgICBpblxuICAgIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggZGF0YSAtIDEgZG8gdW5zYWZlX3NldCBiYSAoaSArIG9mcykgZGF0YS4oaSkgZG9uZTtcbiAgICBiYVxuZW5kXG5cbm1vZHVsZSBBcnJheTIgPSBzdHJ1Y3RcbiAgdHlwZSAoISdhLCAhJ2IsICEnYykgdCA9ICgnYSwgJ2IsICdjKSBHZW5hcnJheS50XG4gIGxldCBjcmVhdGUga2luZCBsYXlvdXQgZGltMSBkaW0yID1cbiAgICBHZW5hcnJheS5jcmVhdGUga2luZCBsYXlvdXQgW3xkaW0xOyBkaW0yfF1cbiAgZXh0ZXJuYWwgZ2V0OiAoJ2EsICdiLCAnYykgdCAtPiBpbnQgLT4gaW50IC0+ICdhID0gXCIlY2FtbF9iYV9yZWZfMlwiXG4gIGV4dGVybmFsIHNldDogKCdhLCAnYiwgJ2MpIHQgLT4gaW50IC0+IGludCAtPiAnYSAtPiB1bml0ID0gXCIlY2FtbF9iYV9zZXRfMlwiXG4gIGV4dGVybmFsIHVuc2FmZV9nZXQ6ICgnYSwgJ2IsICdjKSB0IC0+IGludCAtPiBpbnQgLT4gJ2FcbiAgICAgPSBcIiVjYW1sX2JhX3Vuc2FmZV9yZWZfMlwiXG4gIGV4dGVybmFsIHVuc2FmZV9zZXQ6ICgnYSwgJ2IsICdjKSB0IC0+IGludCAtPiBpbnQgLT4gJ2EgLT4gdW5pdFxuICAgICA9IFwiJWNhbWxfYmFfdW5zYWZlX3NldF8yXCJcbiAgZXh0ZXJuYWwgZGltMTogKCdhLCAnYiwgJ2MpIHQgLT4gaW50ID0gXCIlY2FtbF9iYV9kaW1fMVwiXG4gIGV4dGVybmFsIGRpbTI6ICgnYSwgJ2IsICdjKSB0IC0+IGludCA9IFwiJWNhbWxfYmFfZGltXzJcIlxuICBleHRlcm5hbCBraW5kOiAoJ2EsICdiLCAnYykgdCAtPiAoJ2EsICdiKSBraW5kID0gXCJjYW1sX2JhX2tpbmRcIlxuICBleHRlcm5hbCBsYXlvdXQ6ICgnYSwgJ2IsICdjKSB0IC0+ICdjIGxheW91dCA9IFwiY2FtbF9iYV9sYXlvdXRcIlxuXG4gIGV4dGVybmFsIGNoYW5nZV9sYXlvdXQ6ICgnYSwgJ2IsICdjKSB0IC0+ICdkIGxheW91dCAtPiAoJ2EsICdiLCAnZCkgdFxuICAgID0gXCJjYW1sX2JhX2NoYW5nZV9sYXlvdXRcIlxuXG4gIGxldCBzaXplX2luX2J5dGVzIGFyciA9XG4gICAgKGtpbmRfc2l6ZV9pbl9ieXRlcyAoa2luZCBhcnIpKSAqIChkaW0xIGFycikgKiAoZGltMiBhcnIpXG5cbiAgZXh0ZXJuYWwgc3ViX2xlZnQ6ICgnYSwgJ2IsIGNfbGF5b3V0KSB0IC0+IGludCAtPiBpbnQgLT4gKCdhLCAnYiwgY19sYXlvdXQpIHRcbiAgICAgPSBcImNhbWxfYmFfc3ViXCJcbiAgZXh0ZXJuYWwgc3ViX3JpZ2h0OlxuICAgICgnYSwgJ2IsIGZvcnRyYW5fbGF5b3V0KSB0IC0+IGludCAtPiBpbnQgLT4gKCdhLCAnYiwgZm9ydHJhbl9sYXlvdXQpIHRcbiAgICAgPSBcImNhbWxfYmFfc3ViXCJcbiAgbGV0IHNsaWNlX2xlZnQgYSBuID0gR2VuYXJyYXkuc2xpY2VfbGVmdCBhIFt8bnxdXG4gIGxldCBzbGljZV9yaWdodCBhIG4gPSBHZW5hcnJheS5zbGljZV9yaWdodCBhIFt8bnxdXG4gIGV4dGVybmFsIGJsaXQ6ICgnYSwgJ2IsICdjKSB0IC0+ICgnYSwgJ2IsICdjKSB0IC0+IHVuaXQgPSBcImNhbWxfYmFfYmxpdFwiXG4gIGV4dGVybmFsIGZpbGw6ICgnYSwgJ2IsICdjKSB0IC0+ICdhIC0+IHVuaXQgPSBcImNhbWxfYmFfZmlsbFwiXG4gIGxldCBjX2luaXQgYXJyIGRpbTEgZGltMiBmID1cbiAgICBmb3IgaSA9IDAgdG8gcHJlZCBkaW0xIGRvXG4gICAgICBmb3IgaiA9IDAgdG8gcHJlZCBkaW0yIGRvXG4gICAgICAgIHVuc2FmZV9zZXQgYXJyIGkgaiAoZiBpIGopXG4gICAgICBkb25lXG4gICAgZG9uZVxuICBsZXQgZm9ydHJhbl9pbml0IGFyciBkaW0xIGRpbTIgZiA9XG4gICAgZm9yIGogPSAxIHRvIGRpbTIgZG9cbiAgICAgIGZvciBpID0gMSB0byBkaW0xIGRvXG4gICAgICAgIHVuc2FmZV9zZXQgYXJyIGkgaiAoZiBpIGopXG4gICAgICBkb25lXG4gICAgZG9uZVxuICBsZXQgaW5pdCAodHlwZSB0KSBraW5kIChsYXlvdXQgOiB0IGxheW91dCkgZGltMSBkaW0yIGYgPVxuICAgIGxldCBhcnIgPSBjcmVhdGUga2luZCBsYXlvdXQgZGltMSBkaW0yIGluXG4gICAgbWF0Y2ggbGF5b3V0IHdpdGhcbiAgICB8IENfbGF5b3V0IC0+IGNfaW5pdCBhcnIgZGltMSBkaW0yIGY7IGFyclxuICAgIHwgRm9ydHJhbl9sYXlvdXQgLT4gZm9ydHJhbl9pbml0IGFyciBkaW0xIGRpbTIgZjsgYXJyXG4gIGxldCBvZl9hcnJheSAodHlwZSB0KSBraW5kIChsYXlvdXQ6IHQgbGF5b3V0KSBkYXRhID1cbiAgICBsZXQgZGltMSA9IEFycmF5Lmxlbmd0aCBkYXRhIGluXG4gICAgbGV0IGRpbTIgPSBpZiBkaW0xID0gMCB0aGVuIDAgZWxzZSBBcnJheS5sZW5ndGggZGF0YS4oMCkgaW5cbiAgICBsZXQgYmEgPSBjcmVhdGUga2luZCBsYXlvdXQgZGltMSBkaW0yIGluXG4gICAgbGV0IG9mcyA9XG4gICAgICBtYXRjaCBsYXlvdXQgd2l0aFxuICAgICAgICBDX2xheW91dCAtPiAwXG4gICAgICB8IEZvcnRyYW5fbGF5b3V0IC0+IDFcbiAgICBpblxuICAgIGZvciBpID0gMCB0byBkaW0xIC0gMSBkb1xuICAgICAgbGV0IHJvdyA9IGRhdGEuKGkpIGluXG4gICAgICBpZiBBcnJheS5sZW5ndGggcm93IDw+IGRpbTIgdGhlblxuICAgICAgICBpbnZhbGlkX2FyZyhcIkJpZ2FycmF5LkFycmF5Mi5vZl9hcnJheTogbm9uLXJlY3Rhbmd1bGFyIGRhdGFcIik7XG4gICAgICBmb3IgaiA9IDAgdG8gZGltMiAtIDEgZG9cbiAgICAgICAgdW5zYWZlX3NldCBiYSAoaSArIG9mcykgKGogKyBvZnMpIHJvdy4oailcbiAgICAgIGRvbmVcbiAgICBkb25lO1xuICAgIGJhXG5lbmRcblxubW9kdWxlIEFycmF5MyA9IHN0cnVjdFxuICB0eXBlICghJ2EsICEnYiwgISdjKSB0ID0gKCdhLCAnYiwgJ2MpIEdlbmFycmF5LnRcbiAgbGV0IGNyZWF0ZSBraW5kIGxheW91dCBkaW0xIGRpbTIgZGltMyA9XG4gICAgR2VuYXJyYXkuY3JlYXRlIGtpbmQgbGF5b3V0IFt8ZGltMTsgZGltMjsgZGltM3xdXG4gIGV4dGVybmFsIGdldDogKCdhLCAnYiwgJ2MpIHQgLT4gaW50IC0+IGludCAtPiBpbnQgLT4gJ2EgPSBcIiVjYW1sX2JhX3JlZl8zXCJcbiAgZXh0ZXJuYWwgc2V0OiAoJ2EsICdiLCAnYykgdCAtPiBpbnQgLT4gaW50IC0+IGludCAtPiAnYSAtPiB1bml0XG4gICAgID0gXCIlY2FtbF9iYV9zZXRfM1wiXG4gIGV4dGVybmFsIHVuc2FmZV9nZXQ6ICgnYSwgJ2IsICdjKSB0IC0+IGludCAtPiBpbnQgLT4gaW50IC0+ICdhXG4gICAgID0gXCIlY2FtbF9iYV91bnNhZmVfcmVmXzNcIlxuICBleHRlcm5hbCB1bnNhZmVfc2V0OiAoJ2EsICdiLCAnYykgdCAtPiBpbnQgLT4gaW50IC0+IGludCAtPiAnYSAtPiB1bml0XG4gICAgID0gXCIlY2FtbF9iYV91bnNhZmVfc2V0XzNcIlxuICBleHRlcm5hbCBkaW0xOiAoJ2EsICdiLCAnYykgdCAtPiBpbnQgPSBcIiVjYW1sX2JhX2RpbV8xXCJcbiAgZXh0ZXJuYWwgZGltMjogKCdhLCAnYiwgJ2MpIHQgLT4gaW50ID0gXCIlY2FtbF9iYV9kaW1fMlwiXG4gIGV4dGVybmFsIGRpbTM6ICgnYSwgJ2IsICdjKSB0IC0+IGludCA9IFwiJWNhbWxfYmFfZGltXzNcIlxuICBleHRlcm5hbCBraW5kOiAoJ2EsICdiLCAnYykgdCAtPiAoJ2EsICdiKSBraW5kID0gXCJjYW1sX2JhX2tpbmRcIlxuICBleHRlcm5hbCBsYXlvdXQ6ICgnYSwgJ2IsICdjKSB0IC0+ICdjIGxheW91dCA9IFwiY2FtbF9iYV9sYXlvdXRcIlxuXG4gIGV4dGVybmFsIGNoYW5nZV9sYXlvdXQ6ICgnYSwgJ2IsICdjKSB0IC0+ICdkIGxheW91dCAtPiAoJ2EsICdiLCAnZCkgdFxuICAgID0gXCJjYW1sX2JhX2NoYW5nZV9sYXlvdXRcIlxuXG4gIGxldCBzaXplX2luX2J5dGVzIGFyciA9XG4gICAgKGtpbmRfc2l6ZV9pbl9ieXRlcyAoa2luZCBhcnIpKSAqIChkaW0xIGFycikgKiAoZGltMiBhcnIpICogKGRpbTMgYXJyKVxuXG4gIGV4dGVybmFsIHN1Yl9sZWZ0OiAoJ2EsICdiLCBjX2xheW91dCkgdCAtPiBpbnQgLT4gaW50IC0+ICgnYSwgJ2IsIGNfbGF5b3V0KSB0XG4gICAgID0gXCJjYW1sX2JhX3N1YlwiXG4gIGV4dGVybmFsIHN1Yl9yaWdodDpcbiAgICAgKCdhLCAnYiwgZm9ydHJhbl9sYXlvdXQpIHQgLT4gaW50IC0+IGludCAtPiAoJ2EsICdiLCBmb3J0cmFuX2xheW91dCkgdFxuICAgICA9IFwiY2FtbF9iYV9zdWJcIlxuICBsZXQgc2xpY2VfbGVmdF8xIGEgbiBtID0gR2VuYXJyYXkuc2xpY2VfbGVmdCBhIFt8bjsgbXxdXG4gIGxldCBzbGljZV9yaWdodF8xIGEgbiBtID0gR2VuYXJyYXkuc2xpY2VfcmlnaHQgYSBbfG47IG18XVxuICBsZXQgc2xpY2VfbGVmdF8yIGEgbiA9IEdlbmFycmF5LnNsaWNlX2xlZnQgYSBbfG58XVxuICBsZXQgc2xpY2VfcmlnaHRfMiBhIG4gPSBHZW5hcnJheS5zbGljZV9yaWdodCBhIFt8bnxdXG4gIGV4dGVybmFsIGJsaXQ6ICgnYSwgJ2IsICdjKSB0IC0+ICgnYSwgJ2IsICdjKSB0IC0+IHVuaXQgPSBcImNhbWxfYmFfYmxpdFwiXG4gIGV4dGVybmFsIGZpbGw6ICgnYSwgJ2IsICdjKSB0IC0+ICdhIC0+IHVuaXQgPSBcImNhbWxfYmFfZmlsbFwiXG4gIGxldCBjX2luaXQgYXJyIGRpbTEgZGltMiBkaW0zIGYgPVxuICAgIGZvciBpID0gMCB0byBwcmVkIGRpbTEgZG9cbiAgICAgIGZvciBqID0gMCB0byBwcmVkIGRpbTIgZG9cbiAgICAgICAgZm9yIGsgPSAwIHRvIHByZWQgZGltMyBkb1xuICAgICAgICAgIHVuc2FmZV9zZXQgYXJyIGkgaiBrIChmIGkgaiBrKVxuICAgICAgICBkb25lXG4gICAgICBkb25lXG4gICAgZG9uZVxuICBsZXQgZm9ydHJhbl9pbml0IGFyciBkaW0xIGRpbTIgZGltMyBmID1cbiAgICBmb3IgayA9IDEgdG8gZGltMyBkb1xuICAgICAgZm9yIGogPSAxIHRvIGRpbTIgZG9cbiAgICAgICAgZm9yIGkgPSAxIHRvIGRpbTEgZG9cbiAgICAgICAgICB1bnNhZmVfc2V0IGFyciBpIGogayAoZiBpIGogaylcbiAgICAgICAgZG9uZVxuICAgICAgZG9uZVxuICAgIGRvbmVcbiAgbGV0IGluaXQgKHR5cGUgdCkga2luZCAobGF5b3V0IDogdCBsYXlvdXQpIGRpbTEgZGltMiBkaW0zIGYgPVxuICAgIGxldCBhcnIgPSBjcmVhdGUga2luZCBsYXlvdXQgZGltMSBkaW0yIGRpbTMgaW5cbiAgICBtYXRjaCBsYXlvdXQgd2l0aFxuICAgIHwgQ19sYXlvdXQgLT4gY19pbml0IGFyciBkaW0xIGRpbTIgZGltMyBmOyBhcnJcbiAgICB8IEZvcnRyYW5fbGF5b3V0IC0+IGZvcnRyYW5faW5pdCBhcnIgZGltMSBkaW0yIGRpbTMgZjsgYXJyXG4gIGxldCBvZl9hcnJheSAodHlwZSB0KSBraW5kIChsYXlvdXQ6IHQgbGF5b3V0KSBkYXRhID1cbiAgICBsZXQgZGltMSA9IEFycmF5Lmxlbmd0aCBkYXRhIGluXG4gICAgbGV0IGRpbTIgPSBpZiBkaW0xID0gMCB0aGVuIDAgZWxzZSBBcnJheS5sZW5ndGggZGF0YS4oMCkgaW5cbiAgICBsZXQgZGltMyA9IGlmIGRpbTIgPSAwIHRoZW4gMCBlbHNlIEFycmF5Lmxlbmd0aCBkYXRhLigwKS4oMCkgaW5cbiAgICBsZXQgYmEgPSBjcmVhdGUga2luZCBsYXlvdXQgZGltMSBkaW0yIGRpbTMgaW5cbiAgICBsZXQgb2ZzID1cbiAgICAgIG1hdGNoIGxheW91dCB3aXRoXG4gICAgICAgIENfbGF5b3V0IC0+IDBcbiAgICAgIHwgRm9ydHJhbl9sYXlvdXQgLT4gMVxuICAgIGluXG4gICAgZm9yIGkgPSAwIHRvIGRpbTEgLSAxIGRvXG4gICAgICBsZXQgcm93ID0gZGF0YS4oaSkgaW5cbiAgICAgIGlmIEFycmF5Lmxlbmd0aCByb3cgPD4gZGltMiB0aGVuXG4gICAgICAgIGludmFsaWRfYXJnKFwiQmlnYXJyYXkuQXJyYXkzLm9mX2FycmF5OiBub24tY3ViaWMgZGF0YVwiKTtcbiAgICAgIGZvciBqID0gMCB0byBkaW0yIC0gMSBkb1xuICAgICAgICBsZXQgY29sID0gcm93LihqKSBpblxuICAgICAgICBpZiBBcnJheS5sZW5ndGggY29sIDw+IGRpbTMgdGhlblxuICAgICAgICAgIGludmFsaWRfYXJnKFwiQmlnYXJyYXkuQXJyYXkzLm9mX2FycmF5OiBub24tY3ViaWMgZGF0YVwiKTtcbiAgICAgICAgZm9yIGsgPSAwIHRvIGRpbTMgLSAxIGRvXG4gICAgICAgICAgdW5zYWZlX3NldCBiYSAoaSArIG9mcykgKGogKyBvZnMpIChrICsgb2ZzKSBjb2wuKGspXG4gICAgICAgIGRvbmVcbiAgICAgIGRvbmVcbiAgICBkb25lO1xuICAgIGJhXG5lbmRcblxuZXh0ZXJuYWwgZ2VuYXJyYXlfb2ZfYXJyYXkwOiAoJ2EsICdiLCAnYykgQXJyYXkwLnQgLT4gKCdhLCAnYiwgJ2MpIEdlbmFycmF5LnRcbiAgID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgZ2VuYXJyYXlfb2ZfYXJyYXkxOiAoJ2EsICdiLCAnYykgQXJyYXkxLnQgLT4gKCdhLCAnYiwgJ2MpIEdlbmFycmF5LnRcbiAgID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgZ2VuYXJyYXlfb2ZfYXJyYXkyOiAoJ2EsICdiLCAnYykgQXJyYXkyLnQgLT4gKCdhLCAnYiwgJ2MpIEdlbmFycmF5LnRcbiAgID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgZ2VuYXJyYXlfb2ZfYXJyYXkzOiAoJ2EsICdiLCAnYykgQXJyYXkzLnQgLT4gKCdhLCAnYiwgJ2MpIEdlbmFycmF5LnRcbiAgID0gXCIlaWRlbnRpdHlcIlxubGV0IGFycmF5MF9vZl9nZW5hcnJheSBhID1cbiAgaWYgR2VuYXJyYXkubnVtX2RpbXMgYSA9IDAgdGhlbiBhXG4gIGVsc2UgaW52YWxpZF9hcmcgXCJCaWdhcnJheS5hcnJheTBfb2ZfZ2VuYXJyYXlcIlxubGV0IGFycmF5MV9vZl9nZW5hcnJheSBhID1cbiAgaWYgR2VuYXJyYXkubnVtX2RpbXMgYSA9IDEgdGhlbiBhXG4gIGVsc2UgaW52YWxpZF9hcmcgXCJCaWdhcnJheS5hcnJheTFfb2ZfZ2VuYXJyYXlcIlxubGV0IGFycmF5Ml9vZl9nZW5hcnJheSBhID1cbiAgaWYgR2VuYXJyYXkubnVtX2RpbXMgYSA9IDIgdGhlbiBhXG4gIGVsc2UgaW52YWxpZF9hcmcgXCJCaWdhcnJheS5hcnJheTJfb2ZfZ2VuYXJyYXlcIlxubGV0IGFycmF5M19vZl9nZW5hcnJheSBhID1cbiAgaWYgR2VuYXJyYXkubnVtX2RpbXMgYSA9IDMgdGhlbiBhXG4gIGVsc2UgaW52YWxpZF9hcmcgXCJCaWdhcnJheS5hcnJheTNfb2ZfZ2VuYXJyYXlcIlxuXG5leHRlcm5hbCByZXNoYXBlOlxuICAgKCdhLCAnYiwgJ2MpIEdlbmFycmF5LnQgLT4gaW50IGFycmF5IC0+ICgnYSwgJ2IsICdjKSBHZW5hcnJheS50XG4gICA9IFwiY2FtbF9iYV9yZXNoYXBlXCJcbmxldCByZXNoYXBlXzAgYSA9IHJlc2hhcGUgYSBbfHxdXG5sZXQgcmVzaGFwZV8xIGEgZGltMSA9IHJlc2hhcGUgYSBbfGRpbTF8XVxubGV0IHJlc2hhcGVfMiBhIGRpbTEgZGltMiA9IHJlc2hhcGUgYSBbfGRpbTE7ZGltMnxdXG5sZXQgcmVzaGFwZV8zIGEgZGltMSBkaW0yIGRpbTMgPSByZXNoYXBlIGEgW3xkaW0xO2RpbTI7ZGltM3xdXG5cbigqIEZvcmNlIGNhbWxfYmFfZ2V0X3sxLDIsMyxOfSB0byBiZSBsaW5rZWQgaW4sIHNpbmNlIHdlIGRvbid0IHJlZmVyXG4gICB0byB0aG9zZSBwcmltaXRpdmVzIGRpcmVjdGx5IGluIHRoaXMgZmlsZSAqKVxuXG5sZXQgXyA9XG4gIGxldCBfID0gR2VuYXJyYXkuZ2V0IGluXG4gIGxldCBfID0gQXJyYXkxLmdldCBpblxuICBsZXQgXyA9IEFycmF5Mi5nZXQgaW5cbiAgbGV0IF8gPSBBcnJheTMuZ2V0IGluXG4gICgpXG5cbltAQEBvY2FtbC53YXJuaW5nIFwiLTMyXCJdXG5leHRlcm5hbCBnZXQxOiB1bml0IC0+IHVuaXQgPSBcImNhbWxfYmFfZ2V0XzFcIlxuZXh0ZXJuYWwgZ2V0MjogdW5pdCAtPiB1bml0ID0gXCJjYW1sX2JhX2dldF8yXCJcbmV4dGVybmFsIGdldDM6IHVuaXQgLT4gdW5pdCA9IFwiY2FtbF9iYV9nZXRfM1wiXG5leHRlcm5hbCBzZXQxOiB1bml0IC0+IHVuaXQgPSBcImNhbWxfYmFfc2V0XzFcIlxuZXh0ZXJuYWwgc2V0MjogdW5pdCAtPiB1bml0ID0gXCJjYW1sX2JhX3NldF8yXCJcbmV4dGVybmFsIHNldDM6IHVuaXQgLT4gdW5pdCA9IFwiY2FtbF9iYV9zZXRfM1wiXG4iLCJsZXQgdGFyaWYgPSBcIjIwMjItMjAyM1wiXG5cbmxldCBkZXN0aW5hdGFpcmVzID0gXCJkdWJ1dmFsQGdtYWlsLmNvbSxncmFuZ2UuZ3V5QG91dGxvb2suZnJcIlxuXG50eXBlIHBpZWNlID0gQ2hhbWJyZTEgfCBDaGFtYnJlMiB8IENoYW1icmUzIHwgU2Vqb3VyIHwgU2RiMSB8IFNkYjJcblxubGV0IHBpZWNlcyA9IFsgQ2hhbWJyZTE7IENoYW1icmUyOyBDaGFtYnJlMzsgU2Vqb3VyOyBTZGIxOyBTZGIyIF1cblxubGV0IHNob3J0X3N0cmluZ19vZl9waWVjZSA9IGZ1bmN0aW9uXG4gIHwgQ2hhbWJyZTEgLT4gXCJjaDFcIlxuICB8IENoYW1icmUyIC0+IFwiY2gyXCJcbiAgfCBDaGFtYnJlMyAtPiBcImNoM1wiXG4gIHwgU2Vqb3VyIC0+IFwic2pcIlxuICB8IFNkYjEgLT4gXCJzZGIxXCJcbiAgfCBTZGIyIC0+IFwic2RiMlwiXG5cbmxldCBsb25nX3N0cmluZ19vZl9waWVjZSA9IGZ1bmN0aW9uXG4gIHwgQ2hhbWJyZTEgLT4gXCJDaGFtYnJlIDFcIlxuICB8IENoYW1icmUyIC0+IFwiQ2hhbWJyZSAyXCJcbiAgfCBDaGFtYnJlMyAtPiBcIkNoYW1icmUgM1wiXG4gIHwgU2Vqb3VyIC0+IFwiU8Opam91clwiXG4gIHwgU2RiMSAtPiBcIlNhbGxlIGRlIGJhaW5zIDFcIlxuICB8IFNkYjIgLT4gXCJTYWxsZSBkZSBiYWlucyAyXCJcblxudHlwZSBmb3Vybml0dXJlID0ge1xuICBuYW1lIDogc3RyaW5nO1xuICBkZXNpZ25hdGlvbiA6IHN0cmluZztcbiAgcHJpeCA6IGludDtcbiAgZGlzcG9uaWJpbGl0ZSA6IChwaWVjZSAqIGludCkgbGlzdDtcbn1cblxubGV0IGZvdXJuaXR1cmVzID1cbiAgW1xuICAgIHtcbiAgICAgIG5hbWUgPSBcImRoODBcIjtcbiAgICAgIGRlc2lnbmF0aW9uID0gXCJEcmFwIGhvdXNzZSA4MCBjbVwiO1xuICAgICAgcHJpeCA9IDQ7XG4gICAgICBkaXNwb25pYmlsaXRlID0gWyAoQ2hhbWJyZTEsIDIpIF07XG4gICAgfTtcbiAgICB7XG4gICAgICBuYW1lID0gXCJkaDkwXCI7XG4gICAgICBkZXNpZ25hdGlvbiA9IFwiRHJhcCBob3Vzc2UgOTAgY21cIjtcbiAgICAgIHByaXggPSA0O1xuICAgICAgZGlzcG9uaWJpbGl0ZSA9IFsgKENoYW1icmUzLCA0KSBdO1xuICAgIH07XG4gICAge1xuICAgICAgbmFtZSA9IFwiZGgxNDBcIjtcbiAgICAgIGRlc2lnbmF0aW9uID0gXCJEcmFwIGhvdXNzZSAxNDAgY21cIjtcbiAgICAgIHByaXggPSA3O1xuICAgICAgZGlzcG9uaWJpbGl0ZSA9IFsgKENoYW1icmUyLCAxKTsgKFNlam91ciwgMSkgXTtcbiAgICB9O1xuICAgIHtcbiAgICAgIG5hbWUgPSBcImRoYmJcIjtcbiAgICAgIGRlc2lnbmF0aW9uID0gXCJEcmFwIGhvdXNzZSBiw6liw6lcIjtcbiAgICAgIHByaXggPSAyO1xuICAgICAgZGlzcG9uaWJpbGl0ZSA9IFsgKENoYW1icmUxLCAxKSBdO1xuICAgIH07XG4gICAge1xuICAgICAgbmFtZSA9IFwiaGMxcFwiO1xuICAgICAgZGVzaWduYXRpb24gPSBcIkhvdXNzZSBkZSBjb3VldHRlIDEgcGxhY2VcIjtcbiAgICAgIHByaXggPSA3O1xuICAgICAgZGlzcG9uaWJpbGl0ZSA9IFsgKENoYW1icmUxLCAyKTsgKENoYW1icmUzLCA0KSBdO1xuICAgIH07XG4gICAge1xuICAgICAgbmFtZSA9IFwiaGMycFwiO1xuICAgICAgZGVzaWduYXRpb24gPSBcIkhvdXNzZSBkZSBjb3VldHRlIDIgcGxhY2VzXCI7XG4gICAgICBwcml4ID0gMTA7XG4gICAgICBkaXNwb25pYmlsaXRlID0gWyAoQ2hhbWJyZTIsIDEpOyAoU2Vqb3VyLCAxKSBdO1xuICAgIH07XG4gICAge1xuICAgICAgbmFtZSA9IFwiaGNiYlwiO1xuICAgICAgZGVzaWduYXRpb24gPSBcIkhvdXNzZSBkZSBjb3VldHRlIGLDqWLDqVwiO1xuICAgICAgcHJpeCA9IDM7XG4gICAgICBkaXNwb25pYmlsaXRlID0gWyAoQ2hhbWJyZTEsIDEpIF07XG4gICAgfTtcbiAgICB7XG4gICAgICBuYW1lID0gXCJsaXRiYlwiO1xuICAgICAgZGVzaWduYXRpb24gPSBcIkxpdCBiw6liw6lcIjtcbiAgICAgIHByaXggPSA4O1xuICAgICAgZGlzcG9uaWJpbGl0ZSA9IFsgKENoYW1icmUxLCAxKSBdO1xuICAgIH07XG4gICAge1xuICAgICAgbmFtZSA9IFwicG04MFwiO1xuICAgICAgZGVzaWduYXRpb24gPSBcIlByb3TDqGdlIG1hdGVsYXMgODAgY21cIjtcbiAgICAgIHByaXggPSAwO1xuICAgICAgZGlzcG9uaWJpbGl0ZSA9IFsgKENoYW1icmUxLCAyKSBdO1xuICAgIH07XG4gICAge1xuICAgICAgbmFtZSA9IFwicG05MFwiO1xuICAgICAgZGVzaWduYXRpb24gPSBcIlByb3TDqGdlIG1hdGVsYXMgOTAgY21cIjtcbiAgICAgIHByaXggPSAwO1xuICAgICAgZGlzcG9uaWJpbGl0ZSA9IFsgKENoYW1icmUzLCA0KSBdO1xuICAgIH07XG4gICAge1xuICAgICAgbmFtZSA9IFwicG0xNDBcIjtcbiAgICAgIGRlc2lnbmF0aW9uID0gXCJQcm90w6hnZSBtYXRlbGFzIDE0MCBjbVwiO1xuICAgICAgcHJpeCA9IDA7XG4gICAgICBkaXNwb25pYmlsaXRlID0gWyAoQ2hhbWJyZTIsIDEpOyAoU2Vqb3VyLCAxKSBdO1xuICAgIH07XG4gICAge1xuICAgICAgbmFtZSA9IFwicG1iYlwiO1xuICAgICAgZGVzaWduYXRpb24gPSBcIlByb3TDqGdlIG1hdGVsYXMgYsOpYsOpXCI7XG4gICAgICBwcml4ID0gMDtcbiAgICAgIGRpc3BvbmliaWxpdGUgPSBbIChDaGFtYnJlMSwgMSkgXTtcbiAgICB9O1xuICAgIHtcbiAgICAgIG5hbWUgPSBcInRhaWVcIjtcbiAgICAgIGRlc2lnbmF0aW9uID0gXCJUYWllIGTigJlvcmVpbGxlclwiO1xuICAgICAgcHJpeCA9IDE7XG4gICAgICBkaXNwb25pYmlsaXRlID1cbiAgICAgICAgWyAoQ2hhbWJyZTEsIDQpOyAoQ2hhbWJyZTIsIDQpOyAoQ2hhbWJyZTMsIDgpOyAoU2Vqb3VyLCA0KSBdO1xuICAgIH07XG4gICAge1xuICAgICAgbmFtZSA9IFwiZG91Y2hlXCI7XG4gICAgICBkZXNpZ25hdGlvbiA9IFwiRHJhcCBkZSBkb3VjaGVcIjtcbiAgICAgIHByaXggPSAyO1xuICAgICAgZGlzcG9uaWJpbGl0ZSA9IFsgKFNkYjEsIDMpOyAoU2RiMiwgMykgXTtcbiAgICB9O1xuICAgIHtcbiAgICAgIG5hbWUgPSBcImdhbnRcIjtcbiAgICAgIGRlc2lnbmF0aW9uID0gXCJHYW50IGRlIHRvaWxldHRlXCI7XG4gICAgICBwcml4ID0gMTtcbiAgICAgIGRpc3BvbmliaWxpdGUgPSBbIChTZGIxLCA0KTsgKFNkYjIsIDYpIF07XG4gICAgfTtcbiAgICB7XG4gICAgICBuYW1lID0gXCJzZXJ2XCI7XG4gICAgICBkZXNpZ25hdGlvbiA9IFwiU2VydmlldHRlIGRlIHRvaWxldHRlXCI7XG4gICAgICBwcml4ID0gMTtcbiAgICAgIGRpc3BvbmliaWxpdGUgPSBbIChTZGIxLCA0KTsgKFNkYjIsIDYpIF07XG4gICAgfTtcbiAgICB7XG4gICAgICBuYW1lID0gXCJpbnZcIjtcbiAgICAgIGRlc2lnbmF0aW9uID0gXCJTZXJ2aWV0dGUgaW52aXTDqXNcIjtcbiAgICAgIHByaXggPSAxO1xuICAgICAgZGlzcG9uaWJpbGl0ZSA9IFsgKFNkYjEsIDEpOyAoU2RiMiwgMSkgXTtcbiAgICB9O1xuICAgIHtcbiAgICAgIG5hbWUgPSBcInRhcGlzXCI7XG4gICAgICBkZXNpZ25hdGlvbiA9IFwiVGFwaXMgZGUgZG91Y2hlXCI7XG4gICAgICBwcml4ID0gMjtcbiAgICAgIGRpc3BvbmliaWxpdGUgPSBbIChTZGIxLCAyKTsgKFNkYjIsIDIpIF07XG4gICAgfTtcbiAgICB7XG4gICAgICBuYW1lID0gXCJtYWluc1wiO1xuICAgICAgZGVzaWduYXRpb24gPSBcIkVzc3VpZS1tYWluc1wiO1xuICAgICAgcHJpeCA9IDE7XG4gICAgICBkaXNwb25pYmlsaXRlID0gWyAoU2Vqb3VyLCAyKSBdO1xuICAgIH07XG4gICAge1xuICAgICAgbmFtZSA9IFwidGFibGVcIjtcbiAgICAgIGRlc2lnbmF0aW9uID0gXCJTZXJ2aWV0dGVzIGRlIHRhYmxlXCI7XG4gICAgICBwcml4ID0gMTtcbiAgICAgIGRpc3BvbmliaWxpdGUgPSBbIChTZWpvdXIsIDEwKSBdO1xuICAgIH07XG4gICAge1xuICAgICAgbmFtZSA9IFwidG9yY2hvblwiO1xuICAgICAgZGVzaWduYXRpb24gPSBcIlRvcmNob25zIMOgIHZhaXNzZWxsZVwiO1xuICAgICAgcHJpeCA9IDE7XG4gICAgICBkaXNwb25pYmlsaXRlID0gWyAoU2Vqb3VyLCAyKSBdO1xuICAgIH07XG4gICAge1xuICAgICAgbmFtZSA9IFwibWljcm9maWJyZVwiO1xuICAgICAgZGVzaWduYXRpb24gPSBcIlRvcmNob25zIG1pY3JvZmlicmVcIjtcbiAgICAgIHByaXggPSAwO1xuICAgICAgZGlzcG9uaWJpbGl0ZSA9IFsgKFNkYjEsIDIpOyAoU2RiMiwgMik7IChTZWpvdXIsIDIpIF07XG4gICAgfTtcbiAgXVxuXG4iLG51bGwsbnVsbCwibW9kdWxlIElMID0gSW52ZW50YWlyZV9saW5nZVxuXG5sZXQgc2V0X3N0cmluZ19pbnB1dF9ieV9pZCBubSB2ID1cbiAgbWF0Y2hcbiAgICBKc19vZl9vY2FtbC5Eb21faHRtbC5nZXRFbGVtZW50QnlJZF9jb2VyY2Ugbm1cbiAgICAgIEpzX29mX29jYW1sLkRvbV9odG1sLkNvZXJjZVRvLmlucHV0XG4gIHdpdGhcbiAgfCBOb25lIC0+ICgpXG4gIHwgU29tZSBpbnAgLT4gaW5wIyMudmFsdWUgOj0gSnNfb2Zfb2NhbWwuSnMuc3RyaW5nIHZcblxubGV0IHJlYWRfc3RyaW5nX2lucHV0X2J5X2lkIG5tID1cbiAgbWF0Y2hcbiAgICBKc19vZl9vY2FtbC5Eb21faHRtbC5nZXRFbGVtZW50QnlJZF9jb2VyY2Ugbm1cbiAgICAgIEpzX29mX29jYW1sLkRvbV9odG1sLkNvZXJjZVRvLmlucHV0XG4gIHdpdGhcbiAgfCBOb25lIC0+IFwiXCJcbiAgfCBTb21lIGlucCAtPiBpbnAjIy52YWx1ZSB8PiBKc19vZl9vY2FtbC5Kcy50b19zdHJpbmdcblxubGV0IHplcm9faW50X2lucHV0X2J5X2lkIG5tID1cbiAgbWF0Y2hcbiAgICBKc19vZl9vY2FtbC5Eb21faHRtbC5nZXRFbGVtZW50QnlJZF9jb2VyY2Ugbm1cbiAgICAgIEpzX29mX29jYW1sLkRvbV9odG1sLkNvZXJjZVRvLnNlbGVjdFxuICB3aXRoXG4gIHwgTm9uZSAtPiAoKVxuICB8IFNvbWUgaW5wIC0+IGlucCMjLnZhbHVlIDo9IDAgfD4gc3RyaW5nX29mX2ludCB8PiBKc19vZl9vY2FtbC5Kcy5zdHJpbmdcblxubGV0IHJlYWRfaW50X2lucHV0X2J5X2lkIG5tID1cbiAgbWF0Y2hcbiAgICBKc19vZl9vY2FtbC5Eb21faHRtbC5nZXRFbGVtZW50QnlJZF9jb2VyY2Ugbm1cbiAgICAgIEpzX29mX29jYW1sLkRvbV9odG1sLkNvZXJjZVRvLnNlbGVjdFxuICB3aXRoXG4gIHwgTm9uZSAtPiAwXG4gIHwgU29tZSBpbnAgLT4gaW5wIyMudmFsdWUgfD4gSnNfb2Zfb2NhbWwuSnMudG9fc3RyaW5nIHw+IGludF9vZl9zdHJpbmdcblxubGV0IHNldF90ZF9ieV9pZCBubSB2ID1cbiAgbWF0Y2hcbiAgICBKc19vZl9vY2FtbC5Eb21faHRtbC5nZXRFbGVtZW50QnlJZF9jb2VyY2Ugbm1cbiAgICAgIEpzX29mX29jYW1sLkRvbV9odG1sLkNvZXJjZVRvLnRkXG4gIHdpdGhcbiAgfCBOb25lIC0+ICgpXG4gIHwgU29tZSB0ZCAtPiB0ZCMjLmlubmVySFRNTCA6PSBKc19vZl9vY2FtbC5Kcy5zdHJpbmcgdlxuXG5sZXQgZmllbGRfaWRfYnlfZm91cm5pdHVyZSBmID1cbiAgbGV0IG9wZW4gSUwgaW5cbiAgZi5kaXNwb25pYmlsaXRlXG4gIHw+IExpc3QubWFwIChmdW4gKHAsIF8pIC0+IGYubmFtZSBeIFwiX1wiIF4gc2hvcnRfc3RyaW5nX29mX3BpZWNlIHApXG5cbmxldCBmaWVsZF9pZF9hbmRfcGllY2VfYnlfZm91cm5pdHVyZSBmID1cbiAgbGV0IG9wZW4gSUwgaW5cbiAgZi5kaXNwb25pYmlsaXRlXG4gIHw+IExpc3QubWFwIChmdW4gKHAsIF8pIC0+XG4gICAgICAgICAoZi5uYW1lIF4gXCJfXCIgXiBzaG9ydF9zdHJpbmdfb2ZfcGllY2UgcCwgbG9uZ19zdHJpbmdfb2ZfcGllY2UgcCkpXG5cbmxldCBhbGxfbmFtZXMgPSBJTC5mb3Vybml0dXJlcyB8PiBMaXN0Lm1hcCBmaWVsZF9pZF9ieV9mb3Vybml0dXJlIHw+IExpc3QuY29uY2F0XG5cbigqIE1ldHMgw6Agam91ciBsZSBjb3JwcyBkdSBtYWlsICopXG5sZXQgZW1haWxfYm9keSAoKSA9XG4gIGxldCBiID0gQnVmZmVyLmNyZWF0ZSA1MDAgaW5cbiAgUHJpbnRmLmJwcmludGYgYlxuICAgIFwiLS0tLS0gUsOpc2VydmF0aW9uIGxpbmdlIER1YnV2YWwsIExlcyB0ZXJyYXNzZXMgZGVzIENob3NlYXV4LCBBcHBhcnRlbWVudCBcXFxuICAgICBCNiAtLS0tLSUlMEFcIjtcbiAgUHJpbnRmLmJwcmludGYgYiBcIkxvY2F0YWlyZSA6ICVzJSUwQVwiIChyZWFkX3N0cmluZ19pbnB1dF9ieV9pZCBcIm5vbV9wcmVub21cIik7XG4gIFByaW50Zi5icHJpbnRmIGIgXCJEYXRlIGTigJlhcnJpdsOpZSA6ICVzJSUwQVwiXG4gICAgKHJlYWRfc3RyaW5nX2lucHV0X2J5X2lkIFwiYXJyaXZlZVwiKTtcbiAgUHJpbnRmLmJwcmludGYgYiBcIkRhdGUgZGUgZMOpcGFydCA6ICVzJSUwQVwiIChyZWFkX3N0cmluZ19pbnB1dF9ieV9pZCBcImRlcGFydFwiKTtcbiAgTGlzdC5maWx0ZXJfbWFwXG4gICAgKGZ1biBmIC0+XG4gICAgICBmaWVsZF9pZF9hbmRfcGllY2VfYnlfZm91cm5pdHVyZSBmXG4gICAgICB8PiBMaXN0LmZvbGRfbGVmdFxuICAgICAgICAgICAoZnVuIChzLCBkZXRhaWwpIChmaWVsZF9pZCwgc2hvcnQpIC0+XG4gICAgICAgICAgICAgbGV0IHEgPSByZWFkX2ludF9pbnB1dF9ieV9pZCBmaWVsZF9pZCBpblxuICAgICAgICAgICAgICggcyArIHEsXG4gICAgICAgICAgICAgICBpZiBxID4gMCB0aGVuIChzaG9ydCBeIFwiIDogXCIgXiBzdHJpbmdfb2ZfaW50IHEpIDo6IGRldGFpbFxuICAgICAgICAgICAgICAgZWxzZSBkZXRhaWwgKSlcbiAgICAgICAgICAgKDAsIFtdKVxuICAgICAgfD4gZnVuY3Rpb25cbiAgICAgIHwgMCwgXyAtPiBOb25lXG4gICAgICB8IHEsIGRldGFpbCAtPiBTb21lIChmLmRlc2lnbmF0aW9uLCBxLCBkZXRhaWwpKVxuICAgIElMLmZvdXJuaXR1cmVzXG4gIHw+IExpc3QuaXRlciAoZnVuIChkZXNjciwgcSwgZGV0YWlsKSAtPlxuICAgICAgICAgUHJpbnRmLmJwcmludGYgYiBcIuKAlCAlZCAlcyVzJSUwQVwiIHEgZGVzY3JcbiAgICAgICAgICAgKCBtYXRjaCBkZXRhaWwgd2l0aFxuICAgICAgICAgICB8IFtdIC0+IFwiXCJcbiAgICAgICAgICAgfCBfIC0+IFByaW50Zi5zcHJpbnRmIFwiICglcylcIiAoU3RyaW5nLmNvbmNhdCBcIiwgXCIgZGV0YWlsKSApKTtcbiAgUHJpbnRmLmJwcmludGYgYiBcIiUlMEFUb3RhbCA6ICVkIOKCrCUlMEFcIlxuICAgIChMaXN0LmZvbGRfbGVmdFxuICAgICAgIChmdW4gdG90YWwgZiAtPlxuICAgICAgICAgZmllbGRfaWRfYnlfZm91cm5pdHVyZSBmXG4gICAgICAgICB8PiBMaXN0LmZvbGRfbGVmdFxuICAgICAgICAgICAgICAoZnVuIHMgZmllbGRfaWQgLT4gcyArIHJlYWRfaW50X2lucHV0X2J5X2lkIGZpZWxkX2lkKVxuICAgICAgICAgICAgICAwXG4gICAgICAgICB8PiAoICogKSBmLklMLnByaXggfD4gKCArICkgdG90YWwpXG4gICAgICAgMCBJTC5mb3Vybml0dXJlcyk7XG4gIEJ1ZmZlci5jb250ZW50cyBiXG5cbigqIE1ldHMgw6Agam91ciBsZSBjb3JwcyBkdSBtYWlsICopXG5sZXQgcmVzdW1lX2JvZHkgKCkgPVxuICBUeXhtbC5IdG1sLihcbiAgICBkaXZcbiAgICAgIFtcbiAgICAgICAgcFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIGIgWyB0eHQgXCJMb2NhdGFpcmUgOiBcIjsgdHh0IChyZWFkX3N0cmluZ19pbnB1dF9ieV9pZCBcIm5vbV9wcmVub21cIikgXTtcbiAgICAgICAgICBdO1xuICAgICAgICBwXG4gICAgICAgICAgW1xuICAgICAgICAgICAgYlxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgdHh0IFwiRGF0ZSBk4oCZYXJyaXbDqWUgOiBcIjtcbiAgICAgICAgICAgICAgICB0eHQgKHJlYWRfc3RyaW5nX2lucHV0X2J5X2lkIFwiYXJyaXZlZVwiKTtcbiAgICAgICAgICAgICAgXTtcbiAgICAgICAgICBdO1xuICAgICAgICBwXG4gICAgICAgICAgW1xuICAgICAgICAgICAgYlxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgdHh0IFwiRGF0ZSBkZSBkw6lwYXJ0IDogXCI7IHR4dCAocmVhZF9zdHJpbmdfaW5wdXRfYnlfaWQgXCJkZXBhcnRcIik7XG4gICAgICAgICAgICAgIF07XG4gICAgICAgICAgXTtcbiAgICAgICAgYnIgKCk7XG4gICAgICAgIHVsXG4gICAgICAgICAgKCBMaXN0LmZpbHRlcl9tYXBcbiAgICAgICAgICAgICAgKGZ1biBmIC0+XG4gICAgICAgICAgICAgICAgZmllbGRfaWRfYW5kX3BpZWNlX2J5X2ZvdXJuaXR1cmUgZlxuICAgICAgICAgICAgICAgIHw+IExpc3QuZm9sZF9sZWZ0XG4gICAgICAgICAgICAgICAgICAgICAoZnVuIChzLCBkZXRhaWwpIChmaWVsZF9pZCwgc2hvcnQpIC0+XG4gICAgICAgICAgICAgICAgICAgICAgIGxldCBxID0gcmVhZF9pbnRfaW5wdXRfYnlfaWQgZmllbGRfaWQgaW5cbiAgICAgICAgICAgICAgICAgICAgICAgKCBzICsgcSxcbiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBxID4gMCB0aGVuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAoc2hvcnQgXiBcIiA6IFwiIF4gc3RyaW5nX29mX2ludCBxKSA6OiBkZXRhaWxcbiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGRldGFpbCApKVxuICAgICAgICAgICAgICAgICAgICAgKDAsIFtdKVxuICAgICAgICAgICAgICAgIHw+IGZ1bmN0aW9uXG4gICAgICAgICAgICAgICAgfCAwLCBfIC0+IE5vbmVcbiAgICAgICAgICAgICAgICB8IHEsIGRldGFpbCAtPiBTb21lIChmLmRlc2lnbmF0aW9uLCBxLCBMaXN0LnJldiBkZXRhaWwpKVxuICAgICAgICAgICAgICBJTC5mb3Vybml0dXJlc1xuICAgICAgICAgIHw+IExpc3QubWFwIChmdW4gKGRlc2NyLCBxLCBkZXRhaWwpIC0+XG4gICAgICAgICAgICAgICAgIGxpXG4gICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgdHh0IChzdHJpbmdfb2ZfaW50IHEpO1xuICAgICAgICAgICAgICAgICAgICAgdHh0IFwiIFwiO1xuICAgICAgICAgICAgICAgICAgICAgdHh0IGRlc2NyO1xuICAgICAgICAgICAgICAgICAgICAgdHh0XG4gICAgICAgICAgICAgICAgICAgICAgICggbWF0Y2ggZGV0YWlsIHdpdGhcbiAgICAgICAgICAgICAgICAgICAgICAgfCBbXSAtPiBcIlwiXG4gICAgICAgICAgICAgICAgICAgICAgIHwgXyAtPiBQcmludGYuc3ByaW50ZiBcIiAoJXMpXCIgKFN0cmluZy5jb25jYXQgXCIsIFwiIGRldGFpbClcbiAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICBdKSApO1xuICAgICAgICBiciAoKTtcbiAgICAgICAgcFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIGIgWyB0eHQgXCJUb3RhbCA6IFwiIF07XG4gICAgICAgICAgICB0eHRcbiAgICAgICAgICAgICAgKCBMaXN0LmZvbGRfbGVmdFxuICAgICAgICAgICAgICAgICAgKGZ1biB0b3RhbCBmIC0+XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkX2lkX2J5X2ZvdXJuaXR1cmUgZlxuICAgICAgICAgICAgICAgICAgICB8PiBMaXN0LmZvbGRfbGVmdFxuICAgICAgICAgICAgICAgICAgICAgICAgIChmdW4gcyBmaWVsZF9pZCAtPiBzICsgcmVhZF9pbnRfaW5wdXRfYnlfaWQgZmllbGRfaWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICAgICB8PiAoICogKSBmLklMLnByaXggfD4gKCArICkgdG90YWwpXG4gICAgICAgICAgICAgICAgICAwIElMLmZvdXJuaXR1cmVzXG4gICAgICAgICAgICAgIHw+IHN0cmluZ19vZl9pbnQgKTtcbiAgICAgICAgICAgIHR4dCBcIsKg4oKsXCI7XG4gICAgICAgICAgXTtcbiAgICAgIF0pXG4gIHw+IEZvcm1hdC5hc3ByaW50ZiBcIiVhXCIgKFR5eG1sLkh0bWwucHBfZWx0ICgpKVxuICB8PiBKc19vZl9vY2FtbC5Kcy5zdHJpbmdcblxuKCogUHJpbnRmLmJwcmludGYgYiBcIkxvY2F0YWlyZSA6ICVzJSUwQVwiIChyZWFkX3N0cmluZ19pbnB1dF9ieV9pZCBcIm5vbV9wcmVub21cIik7XG4gKiBQcmludGYuYnByaW50ZiBiIFwiRGF0ZSBk4oCZYXJyaXbDqWUgOiAlcyUlMEFcIlxuICogICAocmVhZF9zdHJpbmdfaW5wdXRfYnlfaWQgXCJhcnJpdmVlXCIpO1xuICogUHJpbnRmLmJwcmludGYgYiBcIkRhdGUgZGUgZMOpcGFydCA6ICVzJSUwQVwiIChyZWFkX3N0cmluZ19pbnB1dF9ieV9pZCBcImRlcGFydFwiKTtcbiAqIExpc3QuZmlsdGVyX21hcFxuICogICAoZnVuIGYgLT5cbiAqICAgICBmaWVsZF9pZF9hbmRfcGllY2VfYnlfZm91cm5pdHVyZSBmXG4gKiAgICAgfD4gTGlzdC5mb2xkX2xlZnRcbiAqICAgICAgICAgIChmdW4gKHMsIGRldGFpbCkgKGZpZWxkX2lkLCBzaG9ydCkgLT5cbiAqICAgICAgICAgICAgbGV0IHEgPSByZWFkX2ludF9pbnB1dF9ieV9pZCBmaWVsZF9pZCBpblxuICogICAgICAgICAgICAoIHMgKyBxLFxuICogICAgICAgICAgICAgIGlmIHEgPiAwIHRoZW4gKHNob3J0IF4gXCIgOiBcIiBeIHN0cmluZ19vZl9pbnQgcSkgOjogZGV0YWlsXG4gKiAgICAgICAgICAgICAgZWxzZSBkZXRhaWwgKSlcbiAqICAgICAgICAgICgwLCBbXSlcbiAqICAgICB8PiBmdW5jdGlvblxuICogICAgIHwgMCwgXyAtPiBOb25lXG4gKiAgICAgfCBxLCBkZXRhaWwgLT4gU29tZSAoZi5kZXNpZ25hdGlvbiwgcSwgZGV0YWlsKSlcbiAqICAgSUwuZm91cm5pdHVyZXNcbiAqIHw+IExpc3QuaXRlciAoZnVuIChkZXNjciwgcSwgZGV0YWlsKSAtPlxuICogICAgICAgIFByaW50Zi5icHJpbnRmIGIgXCLigJQgJWQgJXMlcyUlMEFcIiBxIGRlc2NyXG4gKiAgICAgICAgICAoIG1hdGNoIGRldGFpbCB3aXRoXG4gKiAgICAgICAgICB8IFtdIC0+IFwiXCJcbiAqICAgICAgICAgIHwgXyAtPiBQcmludGYuc3ByaW50ZiBcIiAoJXMpXCIgKFN0cmluZy5jb25jYXQgXCIsIFwiIGRldGFpbCkgKSk7XG4gKiBQcmludGYuYnByaW50ZiBiIFwiJSUwQVRvdGFsIDogJWQg4oKsJSUwQVwiXG4gKiAgIChMaXN0LmZvbGRfbGVmdFxuICogICAgICAoZnVuIHRvdGFsIGYgLT5cbiAqICAgICAgICBmaWVsZF9pZF9ieV9mb3Vybml0dXJlIGZcbiAqICAgICAgICB8PiBMaXN0LmZvbGRfbGVmdFxuICogICAgICAgICAgICAgKGZ1biBzIGZpZWxkX2lkIC0+IHMgKyByZWFkX2ludF9pbnB1dF9ieV9pZCBmaWVsZF9pZClcbiAqICAgICAgICAgICAgIDBcbiAqICAgICAgICB8PiAoICogKSBmLnByaXggfD4gKCArICkgdG90YWwpXG4gKiAgICAgIDAgSUwuZm91cm5pdHVyZXMpO1xuICogQnVmZmVyLmNvbnRlbnRzIGIgKilcblxubGV0IHVwZGF0ZV9tc2cgKCkgPVxuICBsZXQgKCkgPVxuICAgIG1hdGNoXG4gICAgICBKc19vZl9vY2FtbC5Eb21faHRtbC5nZXRFbGVtZW50QnlJZF9jb2VyY2UgXCJiZW52b2lcIlxuICAgICAgICBKc19vZl9vY2FtbC5Eb21faHRtbC5Db2VyY2VUby5hXG4gICAgd2l0aFxuICAgIHwgTm9uZSAtPiAoKVxuICAgIHwgU29tZSBhIC0+XG4gICAgICAgIGEjIy5ocmVmIDo9XG4gICAgICAgICAgSnNfb2Zfb2NhbWwuSnMuc3RyaW5nXG4gICAgICAgICAgICAoIFwibWFpbHRvOlwiIF4gSUwuZGVzdGluYXRhaXJlc1xuICAgICAgICAgICAgXiBcIj9zdWJqZWN0PVLDqXNlcnZhdGlvbiBsaW5nZSBEdWJ1dmFsJmJvZHk9XCIgXiBlbWFpbF9ib2R5ICgpIClcbiAgaW5cblxuICBtYXRjaFxuICAgIEpzX29mX29jYW1sLkRvbV9odG1sLmdldEVsZW1lbnRCeUlkX2NvZXJjZSBcInJlc3VtZVwiXG4gICAgICBKc19vZl9vY2FtbC5Eb21faHRtbC5Db2VyY2VUby5kaXZcbiAgd2l0aFxuICB8IE5vbmUgLT4gKClcbiAgfCBTb21lIHJlc3VtZSAtPiByZXN1bWUjIy5pbm5lckhUTUwgOj0gcmVzdW1lX2JvZHkgKClcblxuKCogUmUtY2FsY3VsICopXG5sZXQgY29tcHV0ZSAoKSA9XG4gIExpc3QuaXRlclxuICAgIChmdW4gZiAtPlxuICAgICAgZmllbGRfaWRfYnlfZm91cm5pdHVyZSBmXG4gICAgICB8PiBMaXN0LmZvbGRfbGVmdCAoZnVuIHMgZmllbGRfaWQgLT4gcyArIHJlYWRfaW50X2lucHV0X2J5X2lkIGZpZWxkX2lkKSAwXG4gICAgICB8PiBmdW4gcXRlIC0+XG4gICAgICBzZXRfdGRfYnlfaWQgZi5JTC5uYW1lICgocXRlICogZi5wcml4IHw+IHN0cmluZ19vZl9pbnQpIF4gXCLCoOKCrFwiKTtcbiAgICAgIHN0cmluZ19vZl9pbnQgcXRlIHw+IHNldF90ZF9ieV9pZCAoZi5JTC5uYW1lIF4gXCJfcXRlXCIpKVxuICAgIElMLmZvdXJuaXR1cmVzO1xuICBMaXN0LmZvbGRfbGVmdFxuICAgIChmdW4gdG90YWwgZiAtPlxuICAgICAgZmllbGRfaWRfYnlfZm91cm5pdHVyZSBmXG4gICAgICB8PiBMaXN0LmZvbGRfbGVmdCAoZnVuIHMgZmllbGRfaWQgLT4gcyArIHJlYWRfaW50X2lucHV0X2J5X2lkIGZpZWxkX2lkKSAwXG4gICAgICB8PiAoICogKSBmLklMLnByaXggfD4gKCArICkgdG90YWwpXG4gICAgMCBJTC5mb3Vybml0dXJlc1xuICB8PiBzdHJpbmdfb2ZfaW50IHw+IEZ1bi5mbGlwICggXiApIFwiwqDigqxcIiB8PiBzZXRfdGRfYnlfaWQgXCJ0b3RhbFwiO1xuICB1cGRhdGVfbXNnICgpXG5cbmxldCByZXNldF9mb3JtICgpID1cbiAgbGV0IGRvaXQgPVxuICAgIEpzX29mX29jYW1sLkRvbV9odG1sLndpbmRvdyMjY29uZmlybVxuICAgICAgKEpzX29mX29jYW1sLkpzLnN0cmluZyBcIlLDqWluaXRpYWxpc2VyIGNvbXBsw6h0ZW1lbnQgbGUgZm9ybXVsYWlyZSA/XCIpXG4gICAgfD4gSnNfb2Zfb2NhbWwuSnMudG9fYm9vbFxuICBpblxuICBpZiBkb2l0IHRoZW4gKFxuICAgIHNldF9zdHJpbmdfaW5wdXRfYnlfaWQgXCJub21fcHJlbm9tXCIgXCJcIjtcbiAgICBzZXRfc3RyaW5nX2lucHV0X2J5X2lkIFwiYXJyaXZlZVwiIFwiXCI7XG4gICAgc2V0X3N0cmluZ19pbnB1dF9ieV9pZCBcImRlcGFydFwiIFwiXCI7XG4gICAgYWxsX25hbWVzIHw+IExpc3QuaXRlciB6ZXJvX2ludF9pbnB1dF9ieV9pZDtcbiAgICBjb21wdXRlICgpIClcblxubGV0IF8gPVxuICBKc19vZl9vY2FtbC5Kcy5leHBvcnQgXCJjb21wdXRlXCIgY29tcHV0ZTtcbiAgSnNfb2Zfb2NhbWwuSnMuZXhwb3J0IFwicmVzZXRfZm9ybVwiIHJlc2V0X2Zvcm1cbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogRW5zdXJlIHRoYXQgW2F0X2V4aXRdIGZ1bmN0aW9ucyBhcmUgY2FsbGVkIGF0IHRoZSBlbmQgb2YgZXZlcnkgcHJvZ3JhbSAqKVxuXG5sZXQgXyA9IGRvX2F0X2V4aXQoKVxuIl19 //]]> </script> <div> <p><b>Tarifs de location du linge — SCI Dubuval — 2022-2023</b></p> <br/> <p> <b> Si nécessaire, complétez ce formulaire dès la réservation, puis cliquez sur le bouton « Envoi par courriel » situé en bas de page pour nous l’envoyer par courriel. </b> </p> <p>Votre demande est modifiable jusqu’à 7 jours avant votre arrivée. </p> <p> <b> Le montant sera réglé directement à la Société Guy Grange le jour de votre arrivée. </b> </p><br/> <p> <button type="button" onclick="reset_form()">Réinitialiser le formulaire </button> </p><br/> <table> <tr><td><b>Nom et prénom du locataire : </b></td> <td><input id="nom_prenom" onchange="compute()"/></td> </tr> <tr><td><b>Date d’arrivée (aaaa-mm-jj) : </b></td> <td><input id="arrivee" onchange="compute()"/></td> </tr> <tr><td><b>Date de départ (aaaa-mm-jj) : </b></td> <td><input id="depart" onchange="compute()"/></td> </tr> </table> </div> <div><br/> <table class="montablo"> <tr class="gras"><td></td><td>Prix unitaire</td><td>Chambre 1</td> <td>Chambre 2</td><td>Chambre 3</td><td>Séjour</td> <td>Salle de bains 1</td><td>Salle de bains 2</td><td>Quantités</td> <td>Totaux</td> </tr> <tr><td class="gras">Drap housse 80 cm</td><td id="dh80_prix">4 €</td> <td> <select id="dh80_ch1" onchange="compute()"><option value="0">0</option> <option value="1">1</option><option value="2">2</option> </select> </td><td></td><td></td><td></td><td></td><td></td> <td id="dh80_qte"></td><td id="dh80"></td> </tr> <tr><td class="gras">Drap housse 90 cm</td><td id="dh90_prix">4 €</td> <td></td><td></td> <td> <select id="dh90_ch3" onchange="compute()"><option value="0">0</option> <option value="1">1</option><option value="2">2</option> <option value="3">3</option><option value="4">4</option> </select> </td><td></td><td></td><td></td><td id="dh90_qte"></td> <td id="dh90"></td> </tr> <tr><td class="gras">Drap housse 140 cm</td> <td id="dh140_prix">7 €</td><td></td> <td> <select id="dh140_ch2" onchange="compute()"> <option value="0">0</option><option value="1">1</option> </select> </td><td></td> <td> <select id="dh140_sj" onchange="compute()"><option value="0">0</option> <option value="1">1</option> </select> </td><td></td><td></td><td id="dh140_qte"></td><td id="dh140"></td> </tr> <tr><td class="gras">Drap housse bébé</td><td id="dhbb_prix">2 €</td> <td> <select id="dhbb_ch1" onchange="compute()"><option value="0">0</option> <option value="1">1</option> </select> </td><td></td><td></td><td></td><td></td><td></td> <td id="dhbb_qte"></td><td id="dhbb"></td> </tr> <tr><td class="gras">Housse de couette 1 place</td> <td id="hc1p_prix">7 €</td> <td> <select id="hc1p_ch1" onchange="compute()"><option value="0">0</option> <option value="1">1</option><option value="2">2</option> </select> </td><td></td> <td> <select id="hc1p_ch3" onchange="compute()"><option value="0">0</option> <option value="1">1</option><option value="2">2</option> <option value="3">3</option><option value="4">4</option> </select> </td><td></td><td></td><td></td><td id="hc1p_qte"></td> <td id="hc1p"></td> </tr> <tr><td class="gras">Housse de couette 2 places</td> <td id="hc2p_prix">10 €</td><td></td> <td> <select id="hc2p_ch2" onchange="compute()"><option value="0">0</option> <option value="1">1</option> </select> </td><td></td> <td> <select id="hc2p_sj" onchange="compute()"><option value="0">0</option> <option value="1">1</option> </select> </td><td></td><td></td><td id="hc2p_qte"></td><td id="hc2p"></td> </tr> <tr><td class="gras">Housse de couette bébé</td> <td id="hcbb_prix">3 €</td> <td> <select id="hcbb_ch1" onchange="compute()"><option value="0">0</option> <option value="1">1</option> </select> </td><td></td><td></td><td></td><td></td><td></td> <td id="hcbb_qte"></td><td id="hcbb"></td> </tr> <tr><td class="gras">Lit bébé</td><td id="litbb_prix">8 €</td> <td> <select id="litbb_ch1" onchange="compute()"> <option value="0">0</option><option value="1">1</option> </select> </td><td></td><td></td><td></td><td></td><td></td> <td id="litbb_qte"></td><td id="litbb"></td> </tr> <tr><td class="gras">Protège matelas 80 cm</td> <td id="pm80_prix">0 €</td> <td> <select id="pm80_ch1" onchange="compute()"><option value="0">0</option> <option value="1">1</option><option value="2">2</option> </select> </td><td></td><td></td><td></td><td></td><td></td> <td id="pm80_qte"></td><td id="pm80"></td> </tr> <tr><td class="gras">Protège matelas 90 cm</td> <td id="pm90_prix">0 €</td><td></td><td></td> <td> <select id="pm90_ch3" onchange="compute()"><option value="0">0</option> <option value="1">1</option><option value="2">2</option> <option value="3">3</option><option value="4">4</option> </select> </td><td></td><td></td><td></td><td id="pm90_qte"></td> <td id="pm90"></td> </tr> <tr><td class="gras">Protège matelas 140 cm</td> <td id="pm140_prix">0 €</td><td></td> <td> <select id="pm140_ch2" onchange="compute()"> <option value="0">0</option><option value="1">1</option> </select> </td><td></td> <td> <select id="pm140_sj" onchange="compute()"><option value="0">0</option> <option value="1">1</option> </select> </td><td></td><td></td><td id="pm140_qte"></td><td id="pm140"></td> </tr> <tr><td class="gras">Protège matelas bébé</td> <td id="pmbb_prix">0 €</td> <td> <select id="pmbb_ch1" onchange="compute()"><option value="0">0</option> <option value="1">1</option> </select> </td><td></td><td></td><td></td><td></td><td></td> <td id="pmbb_qte"></td><td id="pmbb"></td> </tr> <tr><td class="gras">Taie d’oreiller</td><td id="taie_prix">1 €</td> <td> <select id="taie_ch1" onchange="compute()"><option value="0">0</option> <option value="1">1</option><option value="2">2</option> <option value="3">3</option><option value="4">4</option> </select> </td> <td> <select id="taie_ch2" onchange="compute()"><option value="0">0</option> <option value="1">1</option><option value="2">2</option> <option value="3">3</option><option value="4">4</option> </select> </td> <td> <select id="taie_ch3" onchange="compute()"><option value="0">0</option> <option value="1">1</option><option value="2">2</option> <option value="3">3</option><option value="4">4</option> <option value="5">5</option><option value="6">6</option> <option value="7">7</option><option value="8">8</option> </select> </td> <td> <select id="taie_sj" onchange="compute()"><option value="0">0</option> <option value="1">1</option><option value="2">2</option> <option value="3">3</option><option value="4">4</option> </select> </td><td></td><td></td><td id="taie_qte"></td><td id="taie"></td> </tr> <tr><td class="gras">Drap de douche</td><td id="douche_prix">2 €</td> <td></td><td></td><td></td><td></td> <td> <select id="douche_sdb1" onchange="compute()"> <option value="0">0</option><option value="1">1</option> <option value="2">2</option><option value="3">3</option> </select> </td> <td> <select id="douche_sdb2" onchange="compute()"> <option value="0">0</option><option value="1">1</option> <option value="2">2</option><option value="3">3</option> </select> </td><td id="douche_qte"></td><td id="douche"></td> </tr> <tr><td class="gras">Gant de toilette</td><td id="gant_prix">1 €</td> <td></td><td></td><td></td><td></td> <td> <select id="gant_sdb1" onchange="compute()"> <option value="0">0</option><option value="1">1</option> <option value="2">2</option><option value="3">3</option> <option value="4">4</option> </select> </td> <td> <select id="gant_sdb2" onchange="compute()"> <option value="0">0</option><option value="1">1</option> <option value="2">2</option><option value="3">3</option> <option value="4">4</option><option value="5">5</option> <option value="6">6</option> </select> </td><td id="gant_qte"></td><td id="gant"></td> </tr> <tr><td class="gras">Serviette de toilette</td> <td id="serv_prix">1 €</td><td></td><td></td><td></td><td></td> <td> <select id="serv_sdb1" onchange="compute()"> <option value="0">0</option><option value="1">1</option> <option value="2">2</option><option value="3">3</option> <option value="4">4</option> </select> </td> <td> <select id="serv_sdb2" onchange="compute()"> <option value="0">0</option><option value="1">1</option> <option value="2">2</option><option value="3">3</option> <option value="4">4</option><option value="5">5</option> <option value="6">6</option> </select> </td><td id="serv_qte"></td><td id="serv"></td> </tr> <tr><td class="gras">Serviette invités</td><td id="inv_prix">1 €</td> <td></td><td></td><td></td><td></td> <td> <select id="inv_sdb1" onchange="compute()"><option value="0">0</option> <option value="1">1</option> </select> </td> <td> <select id="inv_sdb2" onchange="compute()"><option value="0">0</option> <option value="1">1</option> </select> </td><td id="inv_qte"></td><td id="inv"></td> </tr> <tr><td class="gras">Tapis de douche</td><td id="tapis_prix">2 €</td> <td></td><td></td><td></td><td></td> <td> <select id="tapis_sdb1" onchange="compute()"> <option value="0">0</option><option value="1">1</option> <option value="2">2</option> </select> </td> <td> <select id="tapis_sdb2" onchange="compute()"> <option value="0">0</option><option value="1">1</option> <option value="2">2</option> </select> </td><td id="tapis_qte"></td><td id="tapis"></td> </tr> <tr><td class="gras">Essuie-mains</td><td id="mains_prix">1 €</td> <td></td><td></td><td></td> <td> <select id="mains_sj" onchange="compute()"><option value="0">0</option> <option value="1">1</option><option value="2">2</option> </select> </td><td></td><td></td><td id="mains_qte"></td><td id="mains"></td> </tr> <tr><td class="gras">Serviettes de table</td> <td id="table_prix">1 €</td><td></td><td></td><td></td> <td> <select id="table_sj" onchange="compute()"><option value="0">0</option> <option value="1">1</option><option value="2">2</option> <option value="3">3</option><option value="4">4</option> <option value="5">5</option><option value="6">6</option> <option value="7">7</option><option value="8">8</option> <option value="9">9</option><option value="10">10</option> </select> </td><td></td><td></td><td id="table_qte"></td><td id="table"></td> </tr> <tr><td class="gras">Torchons à vaisselle</td> <td id="torchon_prix">1 €</td><td></td><td></td><td></td> <td> <select id="torchon_sj" onchange="compute()"> <option value="0">0</option><option value="1">1</option> <option value="2">2</option> </select> </td><td></td><td></td><td id="torchon_qte"></td><td id="torchon"></td> </tr> <tr><td class="gras">Torchons microfibre</td> <td id="microfibre_prix">0 €</td><td></td><td></td><td></td> <td> <select id="microfibre_sj" onchange="compute()"> <option value="0">0</option><option value="1">1</option> <option value="2">2</option> </select> </td> <td> <select id="microfibre_sdb1" onchange="compute()"> <option value="0">0</option><option value="1">1</option> <option value="2">2</option> </select> </td> <td> <select id="microfibre_sdb2" onchange="compute()"> <option value="0">0</option><option value="1">1</option> <option value="2">2</option> </select> </td><td id="microfibre_qte"></td><td id="microfibre"></td> </tr> <tr><td class="gras">Totaux</td><td></td><td></td><td></td><td></td> <td></td><td></td><td></td><td></td><td id="total"></td> </tr> <tr class="gras"><td></td><td>Prix unitaire</td><td>Chambre 1</td> <td>Chambre 2</td><td>Chambre 3</td><td>Séjour</td> <td>Salle de bains 1</td><td>Salle de bains 2</td><td>Quantités</td> <td>Totaux</td> </tr> </table><br/> <a id="benvoi"><button type="button">Envoi par courriel</button></a> <p> Si jamais le bouton d’envoi par courriel ne fonctionne pas, vous pouvez nous envoyer une copie du résumé ci-dessous : </p><div id="resume"></div> </div> </body>