<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Tarifs de location du linge — SCI Dubuval — 2021-2022</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 3.11.0 (function(joo_global_object) {"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) {if((s.t & 6) != 0)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 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 joo_global_object.process && joo_global_object.process.platform ?joo_global_object.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(joo_global_object.process && joo_global_object.process.cwd) var caml_current_dir=joo_global_object.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) {name = caml_jsbytes_of_string(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(joo_global_object.Uint8Array) var a=new (joo_global_object.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 joo_global_object.Uint8Array)) a = new (joo_global_object.Uint8Array)(a); var buffer=joo_global_object.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 joo_global_object.Uint8Array)) a = new (joo_global_object.Uint8Array)(a); var buffer=joo_global_object.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 (joo_global_object.Uint8Array)(1), buffer=joo_global_object.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) {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"); function fs_node_supported() {return typeof joo_global_object.process !== "undefined" && typeof joo_global_object.process.versions !== "undefined" && typeof joo_global_object.process.versions.node !== "undefined" && joo_global_object.process.platform !== "browser"} var 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) {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=joo_global_object,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 (joo_global_object.jsoo_static_env && joo_global_object.jsoo_static_env[n]) return caml_string_of_jsstring(joo_global_object.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 joo_global_object.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 (joo_global_object.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 (joo_global_object.RangeError && e instanceof joo_global_object.RangeError && e.message && e.message.match(/maximum call stack/i)) return caml_return_exn_constant(caml_global_data.Stack_overflow); if (joo_global_object.InternalError && e instanceof joo_global_object.InternalError && e.message && e.message.match(/too much recursion/i)) return caml_return_exn_constant(caml_global_data.Stack_overflow); if(e instanceof joo_global_object.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 name=typeof name == "string"?caml_string_of_jsbytes(name):name, content= typeof content == "string"?caml_string_of_jsbytes(content):content, root=resolve_fs_device(name); if(! root.device.register)caml_failwith("cannot register file"); root.device.register(root.rest,content); return 0} function caml_fs_init() {var tmp=joo_global_object.caml_fs_tmp; if(tmp) for(var i=0;i < tmp.length;i++) caml_create_file(tmp[i].name,tmp[i].content); joo_global_object.caml_create_file = caml_create_file; joo_global_object.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(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 (joo_global_object.Float32Array)(1); float32a[0] = x; var int32a=new (joo_global_object.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=joo_global_object,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 (joo_global_object.Int32Array)(1); int32a[0] = x; var float32a=new (joo_global_object.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 (joo_global_object.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=joo_global_object,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=joo_global_object; 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_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_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_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(joo_global_object.process && joo_global_object.process.getuid) return joo_global_object.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= joo_global_object.process && joo_global_object.process.platform && joo_global_object.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_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 (joo_global_object.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(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_hash_mix_bytes(h,v) {switch(v.t & 6) {default:caml_convert_string_to_bytes(v);case 0: h = caml_hash_mix_jsbytes(h,v.c);break; case 2:h = caml_hash_mix_bytes_arr(h,v.c) } return h} 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[4] | 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) joo_global_object.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) {name = caml_jsbytes_of_string(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=joo_global_object; 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=[]; switch(s.t & 6) {default:caml_convert_string_to_bytes(s);case 0: var b=s.c; 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); break; case 4: var a=s.c; 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=joo_global_object; 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_current_x(){var s=caml_gr_state_get();return s.x} 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_ba_kind_of_typed_array(ta) {var g=joo_global_object,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); joo_global_object.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=joo_global_object; 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_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--; switch(obj.t & 6) {default:caml_convert_string_to_bytes(obj);case 0: for(var b=obj.c,l=caml_ml_bytes_length(obj),i=0;i < l;i++) hash_accu = hash_accu * 19 + b.charCodeAt(i) | 0; break; case 2: for(var a=obj.c,l=caml_ml_bytes_length(obj),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 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() {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_get_config() {return [0,caml_string_of_jsbytes(os_type),32,0]} function caml_sys_const_backend_type() {return [0,caml_string_of_jsbytes("js_of_ocaml")]} 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 (joo_global_object.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 && joo_global_object.toplevelReloc) n = joo_global_object.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=joo_global_object.console?joo_global_object.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 (joo_global_object.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_create_file_extern(name,content) {if(joo_global_object.caml_create_file) joo_global_object.caml_create_file(name,content); else {if(! joo_global_object.caml_fs_tmp)joo_global_object.caml_fs_tmp = []; joo_global_object.caml_fs_tmp.push({name:name,content:content})} 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} function caml_get_major_bucket(n){return 0} var caml_blit_bigstring_to_string=caml_bigstring_blit_ba_to_bytes; function nth_digit_nat_native(nat,ofs){return nat.data[ofs]} function set_digit_nat_native(nat,ofs,digit) {nat.data[ofs] = digit;return 0} 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 (joo_global_object.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_string_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_js_export_var() {return typeof module !== "undefined" && module && module.exports ?module.exports :joo_global_object} 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_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(! joo_global_object.jsoo_static_env) joo_global_object.jsoo_static_env = {}; joo_global_object.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=joo_global_object,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_eventlog_pause(unit){return 0} function caml_memprof_stop(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= joo_global_object.navigator?joo_global_object.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_install_signal_handler(){return 0} function caml_sys_argv(a){return caml_argv} 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(name)} function caml_js_to_float(x){return x} function caml_setup_uncaught_exception_handler() {var g=joo_global_object; 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(); joo_global_object.jsoo_runtime = {caml_ephe_check_data:caml_ephe_check_data, caml_ephe_unset_data:caml_ephe_unset_data, caml_ephe_set_data:caml_ephe_set_data, caml_ephe_get_data_copy:caml_ephe_get_data_copy, caml_ephe_get_data:caml_ephe_get_data, caml_ephe_blit_data:caml_ephe_blit_data, caml_ephe_unset_key:caml_ephe_unset_key, caml_ephe_set_key:caml_ephe_set_key, caml_ephe_check_key:caml_ephe_check_key, caml_ephe_get_key_copy:caml_ephe_get_key_copy, caml_ephe_get_key:caml_ephe_get_key, caml_ephe_blit_key:caml_ephe_blit_key, caml_ephe_create:caml_ephe_create, caml_weak_blit:caml_weak_blit, caml_weak_check:caml_weak_check, caml_weak_get_copy:caml_weak_get_copy, caml_weak_get:caml_weak_get, caml_weak_set:caml_weak_set, caml_weak_create:caml_weak_create, caml_ephe_data_offset:caml_ephe_data_offset, caml_ephe_key_offset:caml_ephe_key_offset, unix_has_symlink:unix_has_symlink, unix_getpwuid:unix_getpwuid, unix_getuid:unix_getuid, unix_unlink:unix_unlink, unix_readlink:unix_readlink, unix_symlink:unix_symlink, unix_rmdir:unix_rmdir, unix_mkdir:unix_mkdir, unix_lstat_64:unix_lstat_64, unix_lstat:unix_lstat, unix_stat_64:unix_stat_64, unix_stat:unix_stat, make_unix_err_args:make_unix_err_args, unix_isatty:unix_isatty, win_handle_fd:win_handle_fd, win_cleanup:win_cleanup, win_startup:win_startup, unix_mktime:unix_mktime, unix_localtime:unix_localtime, unix_gmtime:unix_gmtime, unix_time:unix_time, unix_gettimeofday:unix_gettimeofday, re_replacement_text:re_replacement_text, re_partial_match:re_partial_match, re_string_match:re_string_match, re_search_backward:re_search_backward, re_search_forward:re_search_forward, re_match:re_match, caml_spacetime_only_works_for_native_code: caml_spacetime_only_works_for_native_code, caml_register_channel_for_spacetime:caml_register_channel_for_spacetime, caml_sys_const_naked_pointers_checked: caml_sys_const_naked_pointers_checked, caml_spacetime_enabled:caml_spacetime_enabled, caml_ml_runtime_warnings_enabled:caml_ml_runtime_warnings_enabled, caml_ml_enable_runtime_warnings:caml_ml_enable_runtime_warnings, caml_runtime_warnings:caml_runtime_warnings, unix_inet_addr_of_string:unix_inet_addr_of_string, caml_install_signal_handler:caml_install_signal_handler, caml_runtime_parameters:caml_runtime_parameters, caml_runtime_variant:caml_runtime_variant, caml_sys_isatty:caml_sys_isatty, caml_sys_get_config:caml_sys_get_config, os_type:os_type, caml_sys_const_backend_type:caml_sys_const_backend_type, caml_sys_const_ostype_cygwin:caml_sys_const_ostype_cygwin, caml_sys_const_ostype_win32:caml_sys_const_ostype_win32, caml_sys_const_ostype_unix:caml_sys_const_ostype_unix, caml_sys_const_max_wosize:caml_sys_const_max_wosize, caml_sys_const_int_size:caml_sys_const_int_size, caml_sys_const_word_size:caml_sys_const_word_size, caml_sys_const_big_endian:caml_sys_const_big_endian, caml_sys_random_seed:caml_sys_random_seed, caml_sys_time_include_children:caml_sys_time_include_children, caml_sys_time:caml_sys_time, caml_sys_system_command:caml_sys_system_command, caml_sys_executable_name:caml_sys_executable_name, caml_sys_modify_argv:caml_sys_modify_argv, caml_sys_argv:caml_sys_argv, caml_sys_get_argv:caml_sys_get_argv, caml_executable_name:caml_executable_name, caml_argv:caml_argv, caml_sys_unsafe_getenv:caml_sys_unsafe_getenv, caml_sys_getenv:caml_sys_getenv, caml_set_static_env:caml_set_static_env, caml_fatal_uncaught_exception:caml_fatal_uncaught_exception, caml_format_exception:caml_format_exception, caml_is_special_exception:caml_is_special_exception, caml_sys_exit:caml_sys_exit, caml_raise_sys_error:caml_raise_sys_error, caml_is_printable:caml_is_printable, caml_get_global_data:caml_get_global_data, caml_register_global:caml_register_global, caml_global_data:caml_global_data, caml_named_value:caml_named_value, caml_register_named_value:caml_register_named_value, caml_named_values:caml_named_values, caml_call_gen:caml_call_gen, caml_set_parser_trace:caml_set_parser_trace, caml_parse_engine:caml_parse_engine, caml_obj_add_offset:caml_obj_add_offset, caml_obj_reachable_words:caml_obj_reachable_words, caml_obj_set_raw_field:caml_obj_set_raw_field, caml_obj_raw_field:caml_obj_raw_field, caml_fresh_oo_id:caml_fresh_oo_id, caml_set_oo_id:caml_set_oo_id, caml_oo_last_id:caml_oo_last_id, caml_get_public_method:caml_get_public_method, caml_lazy_make_forward:caml_lazy_make_forward, caml_obj_make_forward:caml_obj_make_forward, caml_obj_truncate:caml_obj_truncate, caml_obj_dup:caml_obj_dup, caml_obj_with_tag:caml_obj_with_tag, caml_obj_block:caml_obj_block, caml_obj_set_tag:caml_obj_set_tag, caml_obj_tag:caml_obj_tag, caml_obj_is_block:caml_obj_is_block, caml_update_dummy:caml_update_dummy, deserialize_nat:deserialize_nat, serialize_nat:serialize_nat, lxor_digit_nat:lxor_digit_nat, lor_digit_nat:lor_digit_nat, land_digit_nat:land_digit_nat, compare_nat_real:compare_nat_real, compare_nat:compare_nat, compare_digits_nat:compare_digits_nat, shift_right_nat:shift_right_nat, div_nat:div_nat, div_digit_nat:div_digit_nat, div_helper:div_helper, shift_left_nat:shift_left_nat, square_nat:square_nat, mult_nat:mult_nat, mult_digit_nat:mult_digit_nat, sub_nat:sub_nat, decr_nat:decr_nat, complement_nat:complement_nat, add_nat:add_nat, incr_nat:incr_nat, is_digit_odd:is_digit_odd, is_digit_zero:is_digit_zero, is_digit_int:is_digit_int, num_leading_zero_bits_in_digit:num_leading_zero_bits_in_digit, num_digits_nat:num_digits_nat, nth_digit_nat_native:nth_digit_nat_native, set_digit_nat_native:set_digit_nat_native, nth_digit_nat:nth_digit_nat, set_digit_nat:set_digit_nat, blit_nat:blit_nat, set_to_zero_nat:set_to_zero_nat, create_nat:create_nat, nat_of_array:nat_of_array, caml_hash_nat:caml_hash_nat, MlNat:MlNat, initialize_nat:initialize_nat, caml_js_to_string:caml_js_to_string, caml_to_js_string:caml_to_js_string, caml_js_from_string:caml_js_from_string, caml_new_string:caml_new_string, caml_js_to_byte_string:caml_js_to_byte_string, caml_is_ml_string:caml_is_ml_string, caml_is_ml_bytes:caml_is_ml_bytes, caml_string_of_jsstring:caml_string_of_jsstring, caml_jsstring_of_string:caml_jsstring_of_string, caml_jsbytes_of_string:caml_jsbytes_of_string, caml_string_of_jsbytes:caml_string_of_jsbytes, caml_bytes_of_string:caml_bytes_of_string, caml_string_of_bytes:caml_string_of_bytes, caml_string_lessthan:caml_string_lessthan, caml_string_lessequal:caml_string_lessequal, caml_string_equal:caml_string_equal, caml_string_compare:caml_string_compare, caml_ml_string_length:caml_ml_string_length, caml_string_unsafe_set:caml_string_unsafe_set, caml_string_unsafe_get:caml_string_unsafe_get, caml_bytes_of_jsbytes:caml_bytes_of_jsbytes, caml_ml_bytes_length:caml_ml_bytes_length, caml_blit_string:caml_blit_string, caml_blit_bytes:caml_blit_bytes, caml_fill_string:caml_fill_string, caml_fill_bytes:caml_fill_bytes, caml_bytes_greaterthan:caml_bytes_greaterthan, caml_string_greaterthan:caml_string_greaterthan, caml_bytes_greaterequal:caml_bytes_greaterequal, caml_string_greaterequal:caml_string_greaterequal, caml_bytes_lessthan:caml_bytes_lessthan, caml_bytes_lessequal:caml_bytes_lessequal, caml_bytes_notequal:caml_bytes_notequal, caml_string_notequal:caml_string_notequal, caml_bytes_equal:caml_bytes_equal, caml_bytes_compare:caml_bytes_compare, caml_bytes_of_array:caml_bytes_of_array, caml_string_of_array:caml_string_of_array, caml_create_bytes:caml_create_bytes, caml_create_string:caml_create_string, caml_array_of_string:caml_array_of_string, caml_array_of_bytes:caml_array_of_bytes, caml_convert_bytes_to_array:caml_convert_bytes_to_array, caml_convert_string_to_bytes:caml_convert_string_to_bytes, MlBytes:MlBytes, caml_bytes_of_utf16_jsstring:caml_bytes_of_utf16_jsstring, caml_bytes_set:caml_bytes_set, caml_string_set64:caml_string_set64, caml_bytes_set64:caml_bytes_set64, caml_string_set32:caml_string_set32, caml_bytes_set32:caml_bytes_set32, caml_string_set16:caml_string_set16, caml_bytes_set16:caml_bytes_set16, caml_string_set:caml_string_set, caml_bytes_get:caml_bytes_get, caml_bytes_get64:caml_bytes_get64, caml_string_get64:caml_string_get64, caml_bytes_get32:caml_bytes_get32, caml_string_get32:caml_string_get32, caml_bytes_get16:caml_bytes_get16, caml_string_get16:caml_string_get16, caml_string_get:caml_string_get, caml_bytes_bound_error:caml_bytes_bound_error, caml_string_bound_error:caml_string_bound_error, caml_bytes_unsafe_set:caml_bytes_unsafe_set, caml_bytes_unsafe_get:caml_bytes_unsafe_get, jsoo_is_ascii:jsoo_is_ascii, caml_utf16_of_utf8:caml_utf16_of_utf8, caml_utf8_of_utf16:caml_utf8_of_utf16, caml_subarray_to_jsbytes:caml_subarray_to_jsbytes, caml_str_repeat:caml_str_repeat, caml_md5_bytes:caml_md5_bytes, caml_md5_string:caml_md5_string, caml_md5_chan:caml_md5_chan, caml_output_value_to_buffer:caml_output_value_to_buffer, caml_output_value_to_bytes:caml_output_value_to_bytes, caml_output_value_to_string:caml_output_value_to_string, caml_output_val:caml_output_val, caml_legacy_custom_code:caml_legacy_custom_code, MlObjectTable:MlObjectTable, caml_marshal_data_size:caml_marshal_data_size, caml_input_value_from_reader:caml_input_value_from_reader, caml_custom_ops:caml_custom_ops, caml_nativeint_unmarshal:caml_nativeint_unmarshal, caml_int32_unmarshal:caml_int32_unmarshal, caml_int64_marshal:caml_int64_marshal, caml_int64_unmarshal:caml_int64_unmarshal, caml_input_value_from_bytes:caml_input_value_from_bytes, caml_input_value_from_string:caml_input_value_from_string, caml_float_of_bytes:caml_float_of_bytes, BigStringReader:BigStringReader, MlStringReader:MlStringReader, caml_marshal_constants:caml_marshal_constants, caml_new_lex_engine:caml_new_lex_engine, caml_lex_engine:caml_lex_engine, caml_lex_array:caml_lex_array, caml_xmlhttprequest_create:caml_xmlhttprequest_create, caml_js_export_var:caml_js_export_var, caml_js_object:caml_js_object, caml_pure_js_expr:caml_pure_js_expr, caml_js_expr:caml_js_expr, caml_js_eval_string:caml_js_eval_string, caml_js_equals:caml_js_equals, caml_js_wrap_meth_callback_unsafe:caml_js_wrap_meth_callback_unsafe, caml_js_wrap_meth_callback_strict:caml_js_wrap_meth_callback_strict, caml_js_wrap_meth_callback_arguments:caml_js_wrap_meth_callback_arguments, caml_js_wrap_meth_callback:caml_js_wrap_meth_callback, caml_js_wrap_callback_strict:caml_js_wrap_callback_strict, caml_js_wrap_callback_arguments:caml_js_wrap_callback_arguments, caml_js_wrap_callback:caml_js_wrap_callback, caml_ojs_new_arr:caml_ojs_new_arr, caml_js_new:caml_js_new, caml_js_meth_call:caml_js_meth_call, caml_js_fun_call:caml_js_fun_call, caml_js_call:caml_js_call, caml_js_var:caml_js_var, caml_list_to_js_array:caml_list_to_js_array, caml_list_of_js_array:caml_list_of_js_array, caml_js_to_array:caml_js_to_array, caml_js_from_array:caml_js_from_array, caml_js_to_float:caml_js_to_float, caml_js_from_float:caml_js_from_float, caml_js_to_bool:caml_js_to_bool, caml_js_from_bool:caml_js_from_bool, caml_js_error_of_exception:caml_js_error_of_exception, caml_exn_with_js_backtrace:caml_exn_with_js_backtrace, caml_wrap_exception:caml_wrap_exception, caml_is_js:caml_is_js, js_print_stderr:js_print_stderr, js_print_stdout:js_print_stdout, caml_trampoline_return:caml_trampoline_return, caml_trampoline:caml_trampoline, caml_js_get_console:caml_js_get_console, caml_js_html_entities:caml_js_html_entities, caml_js_html_escape:caml_js_html_escape, caml_js_on_ie:caml_js_on_ie, caml_js_typeof:caml_js_typeof, caml_js_instanceof:caml_js_instanceof, caml_js_delete:caml_js_delete, caml_js_get:caml_js_get, caml_js_set:caml_js_set, caml_js_pure_expr:caml_js_pure_expr, caml_ml_output_int:caml_ml_output_int, caml_ml_pos_out_64:caml_ml_pos_out_64, caml_ml_pos_out:caml_ml_pos_out, caml_ml_seek_out_64:caml_ml_seek_out_64, caml_ml_seek_out:caml_ml_seek_out, caml_output_value:caml_output_value, caml_ml_output_char:caml_ml_output_char, caml_ml_output:caml_ml_output, caml_ml_output_bytes:caml_ml_output_bytes, caml_ml_flush:caml_ml_flush, caml_ml_input_scan_line:caml_ml_input_scan_line, caml_ml_pos_in_64:caml_ml_pos_in_64, caml_ml_pos_in:caml_ml_pos_in, caml_ml_seek_in_64:caml_ml_seek_in_64, caml_ml_seek_in:caml_ml_seek_in, caml_ml_input_int:caml_ml_input_int, caml_ml_input_char:caml_ml_input_char, caml_input_value:caml_input_value, caml_ml_input:caml_ml_input, caml_ml_may_refill_input:caml_ml_may_refill_input, caml_ml_refill_input:caml_ml_refill_input, caml_ml_set_channel_refill:caml_ml_set_channel_refill, caml_ml_set_channel_output:caml_ml_set_channel_output, caml_ml_channel_size_64:caml_ml_channel_size_64, caml_ml_channel_size:caml_ml_channel_size, caml_ml_close_channel:caml_ml_close_channel, caml_ml_set_binary_mode:caml_ml_set_binary_mode, win_filedescr_of_channel:win_filedescr_of_channel, caml_channel_descriptor:caml_channel_descriptor, caml_ml_open_descriptor_in:caml_ml_open_descriptor_in, caml_ml_open_descriptor_out:caml_ml_open_descriptor_out, caml_ml_out_channels_list:caml_ml_out_channels_list, caml_ml_channels:caml_ml_channels, caml_ml_set_channel_name:caml_ml_set_channel_name, caml_sys_open:caml_sys_open, caml_std_output:caml_std_output, caml_sys_close:caml_sys_close, caml_int64_bswap:caml_int64_bswap, caml_int32_bswap:caml_int32_bswap, caml_bswap16:caml_bswap16, caml_mod:caml_mod, caml_div:caml_div, caml_mul:caml_mul, caml_int_of_string:caml_int_of_string, caml_parse_digit:caml_parse_digit, caml_parse_sign_and_base:caml_parse_sign_and_base, caml_format_int:caml_format_int, caml_int64_hash:caml_int64_hash, caml_int64_to_bytes:caml_int64_to_bytes, caml_int64_of_bytes:caml_int64_of_bytes, caml_int64_hi32:caml_int64_hi32, caml_int64_lo32:caml_int64_lo32, caml_int64_create_lo_hi:caml_int64_create_lo_hi, caml_int64_create_lo_mi_hi:caml_int64_create_lo_mi_hi, caml_int64_of_string:caml_int64_of_string, caml_int64_format:caml_int64_format, caml_int64_of_float:caml_int64_of_float, caml_int64_to_float:caml_int64_to_float, caml_int64_to_int32:caml_int64_to_int32, caml_int64_of_int32:caml_int64_of_int32, caml_int64_mod:caml_int64_mod, caml_int64_div:caml_int64_div, caml_int64_shift_right:caml_int64_shift_right, caml_int64_shift_right_unsigned:caml_int64_shift_right_unsigned, caml_int64_shift_left:caml_int64_shift_left, caml_int64_xor:caml_int64_xor, caml_int64_or:caml_int64_or, caml_int64_and:caml_int64_and, caml_int64_is_negative:caml_int64_is_negative, caml_int64_is_zero:caml_int64_is_zero, caml_int64_mul:caml_int64_mul, caml_int64_sub:caml_int64_sub, caml_int64_add:caml_int64_add, caml_int64_neg:caml_int64_neg, caml_int64_compare:caml_int64_compare, caml_int64_ult:caml_int64_ult, MlInt64:MlInt64, caml_int64_offset:caml_int64_offset, caml_float_of_string:caml_float_of_string, caml_format_float:caml_format_float, caml_fma_float:caml_fma_float, caml_erfc_float:caml_erfc_float, caml_erf_float:caml_erf_float, caml_cbrt_float:caml_cbrt_float, caml_round_float:caml_round_float, caml_atanh_float:caml_atanh_float, caml_tanh_float:caml_tanh_float, caml_asinh_float:caml_asinh_float, caml_sinh_float:caml_sinh_float, caml_acosh_float:caml_acosh_float, caml_cosh_float:caml_cosh_float, caml_log10_float:caml_log10_float, caml_hypot_float:caml_hypot_float, caml_log2_float:caml_log2_float, caml_log1p_float:caml_log1p_float, caml_exp2_float:caml_exp2_float, caml_expm1_float:caml_expm1_float, caml_signbit_float:caml_signbit_float, caml_copysign_float:caml_copysign_float, caml_float_compare:caml_float_compare, caml_frexp_float:caml_frexp_float, caml_ldexp_float:caml_ldexp_float, caml_modf_float:caml_modf_float, caml_classify_float:caml_classify_float, caml_int32_float_of_bits:caml_int32_float_of_bits, caml_trunc_float:caml_trunc_float, caml_nextafter_float:caml_nextafter_float, caml_int64_float_of_bits:caml_int64_float_of_bits, caml_hexstring_of_float:caml_hexstring_of_float, caml_int32_bits_of_float:caml_int32_bits_of_float, caml_int64_bits_of_float:caml_int64_bits_of_float, jsoo_floor_log2:jsoo_floor_log2, caml_hash:caml_hash, caml_hash_mix_string:caml_hash_mix_string, caml_hash_mix_bytes:caml_hash_mix_bytes, caml_hash_mix_bytes_arr:caml_hash_mix_bytes_arr, caml_hash_mix_jsbytes:caml_hash_mix_jsbytes, caml_hash_mix_int64:caml_hash_mix_int64, caml_hash_mix_float:caml_hash_mix_float, caml_hash_mix_final:caml_hash_mix_final, caml_hash_mix_int:caml_hash_mix_int, caml_hash_univ_param:caml_hash_univ_param, caml_gr_close_subwindow:caml_gr_close_subwindow, caml_gr_open_subwindow:caml_gr_open_subwindow, caml_gr_window_id:caml_gr_window_id, caml_gr_display_mode:caml_gr_display_mode, caml_gr_remember_mode:caml_gr_remember_mode, caml_gr_synchronize:caml_gr_synchronize, caml_gr_wait_event:caml_gr_wait_event, caml_gr_sigio_signal:caml_gr_sigio_signal, caml_gr_sigio_handler:caml_gr_sigio_handler, caml_gr_blit_image:caml_gr_blit_image, caml_gr_create_image:caml_gr_create_image, caml_gr_draw_image:caml_gr_draw_image, caml_gr_dump_image:caml_gr_dump_image, caml_gr_make_image:caml_gr_make_image, caml_gr_text_size:caml_gr_text_size, caml_gr_set_text_size:caml_gr_set_text_size, caml_gr_set_font:caml_gr_set_font, caml_gr_draw_string:caml_gr_draw_string, caml_gr_draw_char:caml_gr_draw_char, caml_gr_draw_str:caml_gr_draw_str, caml_gr_fill_arc:caml_gr_fill_arc, caml_gr_fill_poly:caml_gr_fill_poly, caml_gr_fill_rect:caml_gr_fill_rect, caml_gr_set_line_width:caml_gr_set_line_width, caml_gr_draw_arc:caml_gr_draw_arc, caml_gr_arc_aux:caml_gr_arc_aux, caml_gr_draw_rect:caml_gr_draw_rect, caml_gr_lineto:caml_gr_lineto, caml_gr_current_y:caml_gr_current_y, caml_gr_current_x:caml_gr_current_x, caml_gr_moveto:caml_gr_moveto, caml_gr_point_color:caml_gr_point_color, caml_gr_plot:caml_gr_plot, caml_gr_set_color:caml_gr_set_color, caml_gr_size_y:caml_gr_size_y, caml_gr_size_x:caml_gr_size_x, caml_gr_clear_graph:caml_gr_clear_graph, caml_gr_resize_window:caml_gr_resize_window, caml_gr_set_window_title:caml_gr_set_window_title, caml_gr_close_graph:caml_gr_close_graph, caml_gr_doc_of_state:caml_gr_doc_of_state, caml_gr_state_create:caml_gr_state_create, caml_gr_state_init:caml_gr_state_init, caml_gr_open_graph:caml_gr_open_graph, caml_gr_state_set:caml_gr_state_set, caml_gr_state_get:caml_gr_state_get, caml_gr_state:caml_gr_state, caml_get_major_credit:caml_get_major_credit, caml_get_major_bucket:caml_get_major_bucket, caml_get_minor_free:caml_get_minor_free, caml_gc_minor_words:caml_gc_minor_words, caml_gc_major_slice:caml_gc_major_slice, caml_gc_huge_fallback_count:caml_gc_huge_fallback_count, caml_eventlog_pause:caml_eventlog_pause, caml_eventlog_resume:caml_eventlog_resume, caml_memprof_stop:caml_memprof_stop, caml_memprof_start:caml_memprof_start, caml_final_release:caml_final_release, caml_final_register_called_without_value: caml_final_register_called_without_value, caml_final_register:caml_final_register, caml_memprof_set:caml_memprof_set, caml_gc_get:caml_gc_get, caml_gc_set:caml_gc_set, caml_gc_stat:caml_gc_stat, caml_gc_quick_stat:caml_gc_quick_stat, caml_gc_counters:caml_gc_counters, caml_gc_compaction:caml_gc_compaction, caml_gc_full_major:caml_gc_full_major, caml_gc_major:caml_gc_major, caml_gc_minor:caml_gc_minor, MlNodeFile:MlNodeFile, MlNodeDevice:MlNodeDevice, fs_node_supported:fs_node_supported, MlFakeFile:MlFakeFile, MlFakeDevice:MlFakeDevice, caml_read_file_content:caml_read_file_content, caml_create_file:caml_create_file, caml_fs_init:caml_fs_init, caml_create_file_extern:caml_create_file_extern, caml_ba_map_file_bytecode:caml_ba_map_file_bytecode, caml_ba_map_file:caml_ba_map_file, caml_sys_rmdir:caml_sys_rmdir, caml_sys_mkdir:caml_sys_mkdir, caml_sys_rename:caml_sys_rename, caml_sys_is_directory:caml_sys_is_directory, caml_sys_remove:caml_sys_remove, caml_sys_read_directory:caml_sys_read_directory, caml_sys_file_exists:caml_sys_file_exists, caml_raise_not_a_dir:caml_raise_not_a_dir, caml_raise_no_such_file:caml_raise_no_such_file, caml_sys_chdir:caml_sys_chdir, caml_sys_getcwd:caml_sys_getcwd, caml_unmount:caml_unmount, caml_mount_autoload:caml_mount_autoload, resolve_fs_device:resolve_fs_device, caml_list_mount_point:caml_list_mount_point, jsoo_mount_point:jsoo_mount_point, caml_make_path:caml_make_path, path_is_absolute:path_is_absolute, MlFile:MlFile, caml_root:caml_root, caml_get_root:caml_get_root, caml_current_dir:caml_current_dir, caml_trailing_slash:caml_trailing_slash, caml_finish_formatting:caml_finish_formatting, caml_parse_format:caml_parse_format, caml_array_bound_error:caml_array_bound_error, caml_raise_not_found:caml_raise_not_found, caml_raise_zero_divide:caml_raise_zero_divide, caml_raise_end_of_file:caml_raise_end_of_file, caml_invalid_argument:caml_invalid_argument, caml_failwith:caml_failwith, caml_raise_with_string:caml_raise_with_string, caml_raise_with_args:caml_raise_with_args, caml_raise_with_arg:caml_raise_with_arg, caml_return_exn_constant:caml_return_exn_constant, caml_raise_constant:caml_raise_constant, caml_lessthan:caml_lessthan, caml_lessequal:caml_lessequal, caml_greaterthan:caml_greaterthan, caml_greaterequal:caml_greaterequal, caml_notequal:caml_notequal, caml_equal:caml_equal, caml_int_compare:caml_int_compare, caml_compare:caml_compare, caml_compare_val:caml_compare_val, caml_compare_val_number_custom:caml_compare_val_number_custom, caml_compare_val_get_custom:caml_compare_val_get_custom, caml_compare_val_tag:caml_compare_val_tag, caml_blit_string_to_bigstring:caml_blit_string_to_bigstring, caml_blit_bigstring_to_string:caml_blit_bigstring_to_string, caml_blit_bigstring_to_bigstring:caml_blit_bigstring_to_bigstring, caml_bigstring_blit_ba_to_bytes:caml_bigstring_blit_ba_to_bytes, caml_bigstring_blit_bytes_to_ba:caml_bigstring_blit_bytes_to_ba, caml_bigstring_blit_string_to_ba:caml_bigstring_blit_string_to_ba, caml_bigstring_blit_ba_to_ba:caml_bigstring_blit_ba_to_ba, caml_bigstring_memcmp:caml_bigstring_memcmp, bigstring_of_typed_array:bigstring_of_typed_array, bigstring_of_array_buffer:bigstring_of_array_buffer, bigstring_to_typed_array:bigstring_to_typed_array, bigstring_to_array_buffer:bigstring_to_array_buffer, caml_hash_mix_bigstring:caml_hash_mix_bigstring, caml_ba_from_typed_array:caml_ba_from_typed_array, caml_ba_kind_of_typed_array:caml_ba_kind_of_typed_array, caml_ba_to_typed_array:caml_ba_to_typed_array, caml_ba_hash:caml_ba_hash, caml_ba_create_from:caml_ba_create_from, caml_ba_deserialize:caml_ba_deserialize, caml_ba_serialize:caml_ba_serialize, caml_ba_reshape:caml_ba_reshape, caml_ba_slice:caml_ba_slice, caml_ba_sub:caml_ba_sub, caml_ba_blit:caml_ba_blit, caml_ba_fill:caml_ba_fill, caml_ba_set_3:caml_ba_set_3, caml_ba_set_2:caml_ba_set_2, caml_ba_set_1:caml_ba_set_1, caml_ba_uint8_set64:caml_ba_uint8_set64, caml_ba_uint8_set32:caml_ba_uint8_set32, caml_ba_uint8_set16:caml_ba_uint8_set16, caml_ba_set_generic:caml_ba_set_generic, caml_ba_get_3:caml_ba_get_3, caml_ba_get_2:caml_ba_get_2, caml_ba_get_1:caml_ba_get_1, caml_ba_uint8_get64:caml_ba_uint8_get64, caml_ba_uint8_get32:caml_ba_uint8_get32, caml_ba_uint8_get16:caml_ba_uint8_get16, caml_ba_get_generic:caml_ba_get_generic, caml_ba_dim_3:caml_ba_dim_3, caml_ba_dim_2:caml_ba_dim_2, caml_ba_dim_1:caml_ba_dim_1, caml_ba_dim:caml_ba_dim, caml_ba_num_dims:caml_ba_num_dims, caml_ba_layout:caml_ba_layout, caml_ba_kind:caml_ba_kind, caml_ba_change_layout:caml_ba_change_layout, caml_ba_create:caml_ba_create, caml_ba_create_unsafe:caml_ba_create_unsafe, caml_ba_compare:caml_ba_compare, Ml_Bigarray_c_1_1:Ml_Bigarray_c_1_1, Ml_Bigarray:Ml_Bigarray, caml_ba_custom_name:caml_ba_custom_name, caml_ba_create_buffer:caml_ba_create_buffer, caml_ba_get_size_per_element:caml_ba_get_size_per_element, caml_ba_get_size:caml_ba_get_size, caml_ba_init:caml_ba_init, caml_convert_raw_backtrace_slot:caml_convert_raw_backtrace_slot, caml_get_current_callstack:caml_get_current_callstack, caml_restore_raw_backtrace:caml_restore_raw_backtrace, caml_raw_backtrace_slot:caml_raw_backtrace_slot, caml_raw_backtrace_next_slot:caml_raw_backtrace_next_slot, caml_raw_backtrace_length:caml_raw_backtrace_length, caml_convert_raw_backtrace:caml_convert_raw_backtrace, caml_record_backtrace:caml_record_backtrace, caml_get_exception_raw_backtrace:caml_get_exception_raw_backtrace, caml_get_exception_backtrace:caml_get_exception_backtrace, caml_backtrace_status:caml_backtrace_status, caml_ml_debug_info_status:caml_ml_debug_info_status, caml_floatarray_create:caml_floatarray_create, caml_make_float_vect:caml_make_float_vect, caml_make_vect:caml_make_vect, caml_check_bound:caml_check_bound, caml_array_fill:caml_array_fill, caml_array_get:caml_array_get, caml_array_set:caml_array_set, caml_floatarray_blit:caml_floatarray_blit, caml_array_blit:caml_array_blit, caml_array_concat:caml_array_concat, caml_array_append:caml_array_append, caml_array_sub:caml_array_sub}; 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} (function(){return this}())); //# 1 "../.js/stdlib/stdlib.cma.js" (function(joo_global_object) {"use strict"; var runtime=joo_global_object.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_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_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_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_Stdlib_Sys_Break=caml_string_of_jsbytes("Stdlib.Sys.Break"), ocaml_version=caml_string_of_jsbytes("4.13.1"), 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_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_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_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_CamlinternalLazy_Undefined= caml_string_of_jsbytes("CamlinternalLazy.Undefined"), 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"), 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), _p_=[0,0,0], _q_=[0,caml_string_of_jsbytes("obj.ml"),100,4], _u_=[0,caml_string_of_jsbytes("array.ml"),322,4], _w_=[0,caml_string_of_jsbytes("float.ml"),395,6], _v_=[0,caml_string_of_jsbytes("float.ml"),222,14], _H_=runtime.caml_int64_create_lo_mi_hi(16777215,16777215,65535), _G_=runtime.caml_int64_create_lo_mi_hi(0,0,0), _F_=runtime.caml_int64_create_lo_mi_hi(1,0,0), _E_=runtime.caml_int64_create_lo_mi_hi(1,0,0), _I_=[0,0,0,0], _J_=[0,0,0], _K_=[0,caml_string_of_jsbytes("set.ml"),570,18], _L_=[0,0,0,0], _M_=[0,caml_string_of_jsbytes("map.ml"),400,10], _N_=[0,0,0], _O_=[0,caml_string_of_jsbytes("stream.ml"),53,12], _P_=[0,0], _Q_=[0,caml_string_of_jsbytes("stream.ml"),82,12], ___=[0,caml_string_of_jsbytes("buffer.ml"),282,9], _Z_=[0,caml_string_of_jsbytes("buffer.ml"),263,2], _Y_=[0,caml_string_of_jsbytes("buffer.ml"),195,19], _X_=[0,caml_string_of_jsbytes("buffer.ml"),213,8], _W_=[0,caml_string_of_jsbytes("buffer.ml"),174,19], _V_=[0,caml_string_of_jsbytes("buffer.ml"),192,8], _U_=[0,caml_string_of_jsbytes("buffer.ml"),138,19], _T_=[0,caml_string_of_jsbytes("buffer.ml"),171,8], _S_=[0,caml_string_of_jsbytes("buffer.ml"),93,2], _R_=[0,caml_string_of_jsbytes("buffer.ml"),94,2], _aa_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),850,23], _al_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),814,21], _ad_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),815,21], _am_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),818,21], _ae_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),819,21], _an_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),822,19], _af_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),823,19], _ao_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),826,22], _ag_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),827,22], _ap_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),831,30], _ah_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),832,30], _aj_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),836,26], _ab_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),837,26], _ak_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),846,28], _ac_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),847,28], _ai_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),851,23], _ar_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),1558,4], _as_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),1626,39], _at_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),1649,31], _au_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),1650,31], _av_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),1830,8], _aZ_= [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")], _aY_= [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")], _aB_= [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")], _aC_=[0,1,0], _aD_=[0,0], _aE_=[1,0], _aF_=[1,1], _aH_=[1,1], _aG_=[1,1], _aL_= [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")], _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(', invalid conversion "'), [12,37,[0,[12,34,0]]]]]]]], caml_string_of_jsbytes ('invalid format %S: at character number %d, invalid conversion "%%%c"')], _aJ_=[0,0], _aK_=[0,0], _aM_=[0,[12,64,0]], _aN_=[0,caml_string_of_jsbytes("@ "),1,0], _aO_=[0,caml_string_of_jsbytes("@,"),0,0], _aP_=[2,60], _aQ_= [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.")], _aR_= [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")], _aS_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),2837,11], _aT_= [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')], _aU_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),2899,34], _aV_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),2935,28], _aW_=[0,caml_string_of_jsbytes("camlinternalFormat.ml"),2957,11], _aX_= [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")], _aA_= [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")], _az_= [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")], _ay_= [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")], _ax_= [0, [11,caml_string_of_jsbytes("invalid box description "),[3,0,0]], caml_string_of_jsbytes("invalid box description %S")], _aw_=[0,0,4], _aq_=[0,103], _$_=[0,0,0], _bj_=[0,[2,0,[0,0]],caml_string_of_jsbytes("%s%c")], _bd_=[0,[2,0,0],caml_string_of_jsbytes("%s")], _be_=[0,[2,0,0],caml_string_of_jsbytes("%s")], _bb_=[0,[2,0,0],caml_string_of_jsbytes("%s")], _bc_=[0,[2,0,0],caml_string_of_jsbytes("%s")], _a$_=[0,[2,0,0],caml_string_of_jsbytes("%s")], _ba_=[0,[2,0,0],caml_string_of_jsbytes("%s")], _a5_= [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")], _a8_= [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")], _a9_= [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")], _a__= [0, [2, 0, [11, caml_string_of_jsbytes(": "), [2,0,[11,caml_string_of_jsbytes(".\n"),0]]]], caml_string_of_jsbytes("%s: %s.\n")], _a6_=[0,caml_string_of_jsbytes("-help")], _a7_=[0,caml_string_of_jsbytes("--help")], _a4_=[0,[2,0,0],caml_string_of_jsbytes("%s")], _a3_=[0,[2,0,[12,10,0]],caml_string_of_jsbytes("%s\n")], _a2_=[0,caml_string_of_jsbytes("-help")], _a0_= [0, [11,caml_string_of_jsbytes(" "),[2,0,[12,32,[2,0,[12,10,0]]]]], caml_string_of_jsbytes(" %s %s\n")], _a1_= [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")], _bo_= [0, [11,caml_string_of_jsbytes(", "),[2,0,[2,0,0]]], caml_string_of_jsbytes(", %s%s")], _bA_= [0, [11,caml_string_of_jsbytes("Fatal error: exception "),[2,0,[12,10,0]]], caml_string_of_jsbytes("Fatal error: exception %s\n")], _bB_= [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")], _bz_= [0, [11,caml_string_of_jsbytes("Fatal error: exception "),[2,0,[12,10,0]]], caml_string_of_jsbytes("Fatal error: exception %s\n")], _bx_=[0,[2,0,[12,10,0]],caml_string_of_jsbytes("%s\n")], _bv_=[0,[2,0,[12,10,0]],caml_string_of_jsbytes("%s\n")], _bw_= [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")], _bt_= [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')], _bu_= [0, [2,0,[11,caml_string_of_jsbytes(" unknown location"),0]], caml_string_of_jsbytes("%s unknown location")], _bs_= [0, [11,caml_string_of_jsbytes("Uncaught exception: "),[2,0,[12,10,0]]], caml_string_of_jsbytes("Uncaught exception: %s\n")], _br_= [0, [11,caml_string_of_jsbytes("Uncaught exception: "),[2,0,[12,10,0]]], caml_string_of_jsbytes("Uncaught exception: %s\n")], _bp_=[0,[12,40,[2,0,[2,0,[12,41,0]]]],caml_string_of_jsbytes("(%s%s)")], _bq_=[0,[12,40,[2,0,[12,41,0]]],caml_string_of_jsbytes("(%s)")], _bn_=[0,[4,0,0,0,0],caml_string_of_jsbytes("%d")], _bm_=[0,[3,0,0],caml_string_of_jsbytes("%S")], _by_= [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)")], _bI_= [0, [11, caml_string_of_jsbytes("minor_collections: "), [4,0,0,0,[12,10,0]]], caml_string_of_jsbytes("minor_collections: %d\n")], _bJ_= [0, [11, caml_string_of_jsbytes("major_collections: "), [4,0,0,0,[12,10,0]]], caml_string_of_jsbytes("major_collections: %d\n")], _bK_= [0, [11, caml_string_of_jsbytes("compactions: "), [4,0,0,0,[12,10,0]]], caml_string_of_jsbytes("compactions: %d\n")], _bL_= [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")], _bM_=[0,[12,10,0],caml_string_of_jsbytes("\n")], _bN_=[0,[8,[0,0,0],0,[0,0],0],caml_string_of_jsbytes("%.0f")], _bO_= [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")], _bP_= [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")], _bQ_= [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")], _bR_=[0,[12,10,0],caml_string_of_jsbytes("\n")], _bS_=[0,[4,0,0,0,0],caml_string_of_jsbytes("%d")], _bT_= [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")], _bU_= [0, [11,caml_string_of_jsbytes("heap_words: "),[4,0,[1,1],0,[12,10,0]]], caml_string_of_jsbytes("heap_words: %*d\n")], _bV_= [0, [11,caml_string_of_jsbytes("live_words: "),[4,0,[1,1],0,[12,10,0]]], caml_string_of_jsbytes("live_words: %*d\n")], _bW_= [0, [11,caml_string_of_jsbytes("free_words: "),[4,0,[1,1],0,[12,10,0]]], caml_string_of_jsbytes("free_words: %*d\n")], _bX_= [0, [11,caml_string_of_jsbytes("largest_free: "),[4,0,[1,1],0,[12,10,0]]], caml_string_of_jsbytes("largest_free: %*d\n")], _bY_= [0, [11,caml_string_of_jsbytes("fragments: "),[4,0,[1,1],0,[12,10,0]]], caml_string_of_jsbytes("fragments: %*d\n")], _bZ_=[0,[12,10,0],caml_string_of_jsbytes("\n")], _b0_= [0, [11,caml_string_of_jsbytes("live_blocks: "),[4,0,0,0,[12,10,0]]], caml_string_of_jsbytes("live_blocks: %d\n")], _b1_= [0, [11,caml_string_of_jsbytes("free_blocks: "),[4,0,0,0,[12,10,0]]], caml_string_of_jsbytes("free_blocks: %d\n")], _b2_= [0, [11,caml_string_of_jsbytes("heap_chunks: "),[4,0,0,0,[12,10,0]]], caml_string_of_jsbytes("heap_chunks: %d\n")], _b__=runtime.caml_int64_create_lo_mi_hi(1,0,0), _b$_=runtime.caml_int64_create_lo_mi_hi(0,0,0), _ca_= [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], _ce_=[0,0], _cd_=[0,caml_string_of_jsbytes("hashtbl.ml"),102,23], _ck_=[3,0,3], _cj_=[1,caml_string_of_jsbytes("max_indent < 2")], _ch_=[1,caml_string_of_jsbytes("margin <= max_indent")], _ci_=[0,0], _cg_=[0,caml_string_of_jsbytes("")], _cf_=[0,caml_string_of_jsbytes(""),0,caml_string_of_jsbytes("")], _cA_=[0,91], _cz_=[0,123], _cB_=[0,caml_string_of_jsbytes("scanf.ml"),1453,13], _cC_=[0,[3,0,[10,0]],caml_string_of_jsbytes("%S%!")], _cy_=[0,37,caml_string_of_jsbytes("")], _cx_= [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")], _cw_= [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")], _cv_= [0, [11, caml_string_of_jsbytes("bad character hexadecimal encoding \\"), [0,[0,0]]], caml_string_of_jsbytes("bad character hexadecimal encoding \\%c%c")], _cu_= [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")], _ct_= [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")], _cs_= [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")], _cr_=[0,caml_string_of_jsbytes("scanf.ml"),555,9], _cq_= [0, [11,caml_string_of_jsbytes("invalid boolean '"),[2,0,[12,39,0]]], caml_string_of_jsbytes("invalid boolean '%s'")], _cp_= [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")], _co_= [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")], _cn_= [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")], _cm_= [0, [11,caml_string_of_jsbytes("illegal escape character "),[1,0]], caml_string_of_jsbytes("illegal escape character %C")], _cJ_=[0,caml_string_of_jsbytes("camlinternalOO.ml"),439,17], _cI_=[0,caml_string_of_jsbytes("camlinternalOO.ml"),421,13], _cH_=[0,caml_string_of_jsbytes("camlinternalOO.ml"),418,13], _cG_=[0,caml_string_of_jsbytes("camlinternalOO.ml"),415,13], _cF_=[0,caml_string_of_jsbytes("camlinternalOO.ml"),412,13], _cE_=[0,caml_string_of_jsbytes("camlinternalOO.ml"),409,13], _cD_=[0,caml_string_of_jsbytes("camlinternalOO.ml"),281,50], _cK_=[0,caml_string_of_jsbytes("camlinternalMod.ml"),72,5], _cL_=[0,caml_string_of_jsbytes("camlinternalMod.ml"),81,2], _cO_=[0,0], _cN_=[0,0], _cM_=[0,0], _cT_=[0,7,0], _cS_=[0,1,[0,3,[0,5,0]]], _cR_=[0,[2,0,[4,6,[0,2,6],0,[2,0,0]]],caml_string_of_jsbytes("%s%06x%s")], _cQ_=[0,caml_string_of_jsbytes('"'),0], _cU_=[254,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 (745,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(746,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 _CE_=[0,caml_int_of_string(s)];return _CE_} catch(_CF_) {_CF_ = caml_wrap_exception(_CF_); if(_CF_[1] === Failure)return 0; throw _CF_}} 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 _CC_=[0,caml_float_of_string(s)];return _CC_} catch(_CD_) {_CD_ = caml_wrap_exception(_CD_); if(_CD_[1] === Failure)return 0; throw _CD_}} 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_out_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_out(name){return open_out_gen(_i_,438,name)} function open_out_bin(name){return open_out_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(_CB_) {_CB_ = caml_wrap_exception(_CB_); if(_CB_[1] !== Sys_error)throw _CB_; var _CA_=_CB_} 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_out(oc){caml_ml_flush(oc);return caml_ml_close_channel(oc)} function close_out_noerr(oc) {try {caml_ml_flush(oc)}catch(_Cz_){} try {var _Cx_=caml_ml_close_channel(oc);return _Cx_} catch(_Cy_){return 0}} function open_in_gen(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_in(name){return open_in_gen(_k_,0,name)} function open_in_bin(name){return open_in_gen(_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 _Cw_=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, _Cw_=build_result(caml_create_bytes(len$0),len$0,[0,res,accu]); else var _Cw_=res} return caml_string_of_bytes(_Cw_)}} function close_in_noerr(ic) {try {var _Cu_=caml_ml_close_channel(ic);return _Cu_} catch(_Cv_){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,_Cs_) {var str2=_Cs_[2], fmt2=_Cs_[1], str1=param[2], fmt1=param[1], _Ct_=cat(str1,cat(cst$0,str2)); return [0,concat_fmt(fmt1,fmt2),_Ct_]} 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), _Cr_=1 - success; if(_Cr_)continue; return _Cr_}} 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); if(runtime.caml_sys_const_naked_pointers_checked(0)) at_exit(function(_Cq_){return runtime.caml_gc_major(_Cq_)}); var set_binary_mode_in=caml_ml_set_binary_mode, close_in=caml_ml_close_channel, in_channel_length=caml_ml_channel_size, pos_in=runtime.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_out=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_out, open_out_bin, open_out_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_out, close_out_noerr, set_binary_mode_out, open_in, open_in_bin, open_in_gen, 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_in, close_in_noerr, set_binary_mode_in, [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], string_of_format, symbol, exit, at_exit, valid_float_lexem, unsafe_really_input, do_at_exit]; caml_register_global(759,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_out, open_out_bin, open_out_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_out, close_out_noerr, set_binary_mode_out, open_in, open_in_bin, open_in_gen, 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_in, close_in_noerr, set_binary_mode_in, string_of_format, symbol, exit, at_exit, valid_float_lexem, do_at_exit]; caml_register_global(760,Stdlib_Pervasives,"Stdlib__Pervasives"); 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(_Cp_){return append$0(next,seq2,_Cp_)}]} return caml_call1(seq2,0)} function map(f,seq,param) {var match=caml_call1(seq,0); if(match) {var next=match[2], x=match[1], _Cn_=function(_Co_){return map(f,next,_Co_)}; return [0,caml_call1(f,x),_Cn_]} 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(_Cm_){return filter_map(f,next,_Cm_)}]} 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(_Cl_){return filter(f,next,_Cl_)}]; 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],_Cj_=0; return append$0(x,function(_Ck_){return concat(next,_Ck_)},_Cj_)} return 0} function flat_map(f,seq,param) {var match=caml_call1(seq,0); if(match) {var next=match[2], x=match[1], _Cg_=0, _Ch_=function(_Ci_){return flat_map(f,next,_Ci_)}; return append$0(caml_call1(f,x),_Ch_,_Cg_)} 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(_Cf_){return unfold(f,u$0,_Cf_)}]} return 0} var Stdlib_Seq= [0, empty, return$0, cons, append$0, map, filter, filter_map, concat, flat_map, flat_map, fold_left, iter, unfold]; caml_register_global(761,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$0(f,o){if(o){var v=o[1];return [0,caml_call1(f,v)]}return 0} function fold(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(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(cmp,o0,o1) {if(o0) {var _Ce_=o0[1]; if(o1){var v1=o1[1];return caml_call2(cmp,_Ce_,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(_Cd_){return return$0(v,_Cd_)}} return empty} var Stdlib_Option= [0, none, some, value, get$0, bind, join, map$0, fold, iter$0, is_none, is_some, equal, compare, to_result, to_list, to_seq]; caml_register_global(762,Stdlib_Option,"Stdlib__Option"); 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$1(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$0(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$0(left,right,e1,e2) {if(0 === e1[0]) {var _Cb_=e1[1]; if(0 === e2[0]){var v2=e2[1];return caml_call2(left,_Cb_,v2)}} else {var _Cc_=e1[1]; if(0 !== e2[0]){var v2$0=e2[1];return caml_call2(right,_Cc_,v2$0)}} return 0} function compare$0(left,right,e1,e2) {if(0 === e1[0]) {var _B$_=e1[1]; if(0 === e2[0]){var v2=e2[1];return caml_call2(left,_B$_,v2)} return -1} var _Ca_=e1[1]; if(0 === e2[0])return 1; var v2$0=e2[1]; return caml_call2(right,_Ca_,v2$0)} var Stdlib_Either= [0, left, right, is_left, is_right, find_left, find_right, map_left, map_right, map$1, fold$0, fold$0, fold$0, equal$0, compare$0]; caml_register_global(763,Stdlib_Either,"Stdlib__Either"); 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$2(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$1(ok,error,r0,r1) {if(0 === r0[0]) {var _B9_=r0[1]; if(0 === r1[0]){var v1=r1[1];return caml_call2(ok,_B9_,v1)}} else {var _B__=r0[1]; if(0 !== r1[0]){var e1=r1[1];return caml_call2(error,_B__,e1)}} return 0} function compare$1(ok,error,r0,r1) {if(0 === r0[0]) {var _B7_=r0[1]; if(0 === r1[0]){var v1=r1[1];return caml_call2(ok,_B7_,v1)} return -1} var _B8_=r0[1]; if(0 === r1[0])return 1; var e1=r1[1]; return caml_call2(error,_B8_,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(_B6_){return return$0(v,_B6_)}} return empty} var Stdlib_Result= [0, ok, error, value$0, get_ok, get_error, bind$0, join$0, map$2, map_error, fold$1, iter$1, iter_error, is_ok, is_error, equal$1, compare$1, to_option, to_list$0, to_seq$0]; caml_register_global(764,Stdlib_Result,"Stdlib__Result"); function equal$2(_B5_,_B4_){return _B5_ === _B4_?1:0} var compare$2=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 _m_(_B3_){return _B3_} var Stdlib_Bool= [0, function(_B2_){return 1 - _B2_}, equal$2, compare$2, _m_, to_float, to_string$0]; caml_register_global(765,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 _B1_=c - 192 | 0,switch$0=0; if(30 < _B1_ >>> 0) {if(! (25 < (_B1_ + 127 | 0) >>> 0))switch$0 = 1} else if(23 !== _B1_)switch$0 = 1; return switch$0?c + 32 | 0:c} function uppercase(c) {var _B0_=c - 224 | 0,switch$0=0; if(30 < _B0_ >>> 0) {if(! (25 < (_B0_ + 127 | 0) >>> 0))switch$0 = 1} else if(23 !== _B0_)switch$0 = 1; return switch$0?c - 32 | 0:c} function lowercase_ascii(c) {var switcher=c - 65 | 0;return 25 < switcher >>> 0?c:c + 32 | 0} function uppercase_ascii(c) {var switcher=c - 97 | 0;return 25 < switcher >>> 0?c:c - 32 | 0} function compare$3(c1,c2){return c1 - c2 | 0} function equal$3(c1,c2){return 0 === (c1 - c2 | 0)?1:0} var Stdlib_Char= [0, chr, escaped, lowercase, uppercase, lowercase_ascii, uppercase_ascii, compare$3, equal$3]; caml_register_global(766,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 _BW_=0 <= i?1:0,_BX_=_BW_?i <= 55295?1:0:_BW_; if(_BX_) var _BY_=_BX_; else var _BZ_=57344 <= i?1:0,_BY_=_BZ_?i <= 1114111?1:0:_BZ_; return _BY_} 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(_BV_){return _BV_} function equal$4(_BU_,_BT_){return _BU_ === _BT_?1:0} var compare$4=caml_int_compare; function hash(_BS_){return _BS_} function _n_(_BR_){return _BR_} var Stdlib_Uchar= [0, min$0, max$0, bom, rep, succ, pred, is_valid, of_int, function(_BQ_){return _BQ_}, _n_, is_char, of_char, to_char, unsafe_to_char, equal$4, compare$4, hash]; caml_register_global(767,Stdlib_Uchar,"Stdlib__Uchar"); var executable_name=runtime.caml_sys_executable_name(0), match=runtime.caml_sys_get_config(0), os_type=match[1], match$0=runtime.caml_sys_const_backend_type(0), 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 _BO_=[0,caml_sys_getenv(s)];return _BO_} catch(_BP_) {_BP_ = caml_wrap_exception(_BP_); if(_BP_ === Not_found)return 0; throw _BP_}} 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} function Make(_BN_,_BM_){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, runtime.caml_ml_enable_runtime_warnings, runtime.caml_ml_runtime_warnings_enabled, Immediate64]; caml_register_global(768,Stdlib_Sys,"Stdlib__Sys"); function length(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(i,n,f) {if(n <= i)return 0; var r=caml_call1(f,i); return [0,r,init_aux(i + 1 | 0,n,f)]} var rev_init_threshold=typeof match$0 === "number"?10000:50; function init(len,f) {if(0 <= len) {if(rev_init_threshold < 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,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$3(f,param) {if(param) {var l=param[2],a=param[1],r=caml_call1(f,a);return [0,r,map$3(f,l)]} return 0} function _o_(i,f,param) {if(param) {var l=param[2],a=param[1],r=caml_call2(f,i,a); return [0,r,_o_(i + 1 | 0,f,l)]} return 0} function mapi(f,l){return _o_(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(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(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(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(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(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(p,param) {var param$0=param; for(;;) {if(param$0) {var l=param$0[2],a=param$0[1],_BL_=caml_call1(p,a); if(_BL_){var param$0=l;continue} return _BL_} return 1}} function exists(p,param) {var param$0=param; for(;;) {if(param$0) {var l=param$0[2],a=param$0[1],_BK_=caml_call1(p,a); if(_BK_)return _BK_; var param$0=l; continue} return 0}} function for_all2(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], _BJ_=caml_call2(p,a1,a2); if(_BJ_){var l1$0=l1$1,l2$0=l2$1;continue} return _BJ_}} else if(! l2$0)return 1; return invalid_arg(cst_List_for_all2)}} function exists2(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], _BI_=caml_call2(p,a1,a2); if(_BI_)return _BI_; 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],_BH_=0 === caml_compare(a,x)?1:0; if(_BH_)return _BH_; 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],_BG_=a === x?1:0; if(_BG_)return _BG_; 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], _BF_=0 === caml_compare(a,x)?1:0; if(_BF_)return _BF_; 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],_BE_=a === x?1:0; if(_BE_)return _BE_; 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(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(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(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 _BD_=rev(no); return [0,rev(yes),_BD_]}} function partition_map(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 _BC_=rev(right); return [0,rev(left),_BC_]}} 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 _p_} 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 _By_=l[2]; if(_By_) {var tl=_By_[2], x2=_By_[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 _BA_=l[2]; if(_BA_) {var _BB_=_BA_[2]; if(_BB_) {var tl$1=_BB_[2], x3=_BB_[1], x2$0=_BA_[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 _Bz_=rev_append(l1,accu)} else var _Bz_=rev_append(l2,accu); return [0,_Bz_,tl$0]}} function sort(n,l) {if(2 === n) {if(l) {var _Bu_=l[2]; if(_Bu_) {var tl=_Bu_[2], x2=_Bu_[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 _Bw_=l[2]; if(_Bw_) {var _Bx_=_Bw_[2]; if(_Bx_) {var tl$1=_Bx_[2], x3=_Bx_[1], x2$0=_Bw_[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 _Bv_=rev_append(l1,accu)} else var _Bv_=rev_append(l2,accu); return [0,_Bv_,tl$0]}} var len=length(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 _Bl_=l[2]; if(_Bl_) {var tl=_Bl_[2], x2=_Bl_[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 _Bn_=l[2]; if(_Bn_) {var _Bo_=_Bn_[2]; if(_Bo_) {var tl$1=_Bo_[2], x3=_Bo_[1], x2$0=_Bn_[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), _Bp_= 0 === c$2 ?[0,x2$0,0] :0 < c$2?[0,x2$0,[0,x3,0]]:[0,x3,[0,x2$0,0]], s$0=_Bp_; else if(0 < c$1) {var c$3=caml_call2(cmp,x2$0,x3); if(0 === c$3) var _Bq_=[0,x1$0,[0,x2$0,0]]; else if(0 < c$3) var _Bq_=[0,x1$0,[0,x2$0,[0,x3,0]]]; else var c$4=caml_call2(cmp,x1$0,x3), _Br_= 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]]], _Bq_=_Br_; var s$0=_Bq_} else {var c$5=caml_call2(cmp,x1$0,x3); if(0 === c$5) var _Bs_=[0,x2$0,[0,x1$0,0]]; else if(0 < c$5) var _Bs_=[0,x2$0,[0,x1$0,[0,x3,0]]]; else var c$6=caml_call2(cmp,x2$0,x3), _Bt_= 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]]], _Bs_=_Bt_; var s$0=_Bs_} 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 _Bm_=rev_append(l1,accu)} else var _Bm_=rev_append(l2,accu); return [0,_Bm_,tl$0]}} function sort(n,l) {if(2 === n) {if(l) {var _Bc_=l[2]; if(_Bc_) {var tl=_Bc_[2], x2=_Bc_[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 _Be_=l[2]; if(_Be_) {var _Bf_=_Be_[2]; if(_Bf_) {var tl$1=_Bf_[2], x3=_Bf_[1], x2$0=_Be_[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), _Bg_= 0 === c$2 ?[0,x2$0,0] :0 <= c$2?[0,x3,[0,x2$0,0]]:[0,x2$0,[0,x3,0]], s$0=_Bg_; else if(0 <= c$1) {var c$3=caml_call2(cmp,x1$0,x3); if(0 === c$3) var _Bh_=[0,x2$0,[0,x1$0,0]]; else if(0 <= c$3) var c$4=caml_call2(cmp,x2$0,x3), _Bi_= 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]]], _Bh_=_Bi_; else var _Bh_=[0,x2$0,[0,x1$0,[0,x3,0]]]; var s$0=_Bh_} else {var c$5=caml_call2(cmp,x2$0,x3); if(0 === c$5) var _Bj_=[0,x1$0,[0,x2$0,0]]; else if(0 <= c$5) var c$6=caml_call2(cmp,x1$0,x3), _Bk_= 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]]], _Bj_=_Bk_; else var _Bj_=[0,x1$0,[0,x2$0,[0,x3,0]]]; var s$0=_Bj_} 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 _Bd_=rev_append(l1,accu)} else var _Bd_=rev_append(l2,accu); return [0,_Bd_,tl$0]}} var len=length(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$5(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], _Bb_=caml_call2(eq,a1,a2); if(_Bb_){var l1$0=l1$1,l2$0=l2$1;continue} return _Bb_}} else if(! l2$0)return 1; return 0}} function compare$5(cmp,l1,l2) {var l1$0=l1,l2$0=l2; for(;;) {if(l1$0) {var _A$_=l1$0[2],_Ba_=l1$0[1]; if(l2$0) {var l2$1=l2$0[2],a2=l2$0[1],c=caml_call2(cmp,_Ba_,a2); if(0 === c){var l1$0=_A$_,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(_A__){return aux(tail,_A__)}]} return 0} return function(_A9_){return aux(l,_A9_)}} function of_seq(seq) {function direct(depth,seq) {if(0 === depth) {var _A8_=0; return rev(fold_left(function(acc,x){return [0,x,acc]},_A8_,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, compare_lengths, compare_length_with, cons$0, hd, tl, nth, nth_opt, rev, init, append, rev_append, flatten, flatten, equal$5, compare$5, iter$2, iteri, map$3, mapi, rev_map, filter_map$0, concat_map, fold_left_map, fold_left$0, fold_right, iter2, map2, rev_map2, fold_left2, fold_right2, for_all, exists, for_all2, exists2, mem, memq, find, find_opt, find_map, find_all, find_all, filteri, partition, partition_map, 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(769,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$6(_A7_,_A6_){return _A7_ === _A6_?1:0} var compare$6=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$6, compare$6, min$1, max$1, to_string$1]; caml_register_global(770,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$0(n,f) {var s=caml_create_bytes(n),_A4_=n - 1 | 0,_A3_=0; if(! (_A4_ < 0)) {var i=_A3_; for(;;) {caml_bytes_unsafe_set(s,i,caml_call1(f,i)); var _A5_=i + 1 | 0; if(_A4_ !== i){var i=_A5_;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,_A2_=b < 0?1:0,match=c < 0?1:0,switch$0=0; if(a < 0) {if(_A2_ && ! match)switch$0 = 1} else if(! _A2_ && 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 _A0_=caml_ml_bytes_length(a) - 1 | 0,_AZ_=0; if(! (_A0_ < 0)) {var i=_AZ_; for(;;) {caml_call1(f,caml_bytes_unsafe_get(a,i)); var _A1_=i + 1 | 0; if(_A0_ !== i){var i=_A1_;continue} break}} return 0} function iteri$0(f,a) {var _AX_=caml_ml_bytes_length(a) - 1 | 0,_AW_=0; if(! (_AX_ < 0)) {var i=_AW_; for(;;) {caml_call2(f,i,caml_bytes_unsafe_get(a,i)); var _AY_=i + 1 | 0; if(_AX_ !== i){var i=_AY_;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 _AT_=param[1]; if(param[2]) {var tl=param[2], x=(caml_ml_bytes_length(_AT_) + seplen | 0) + acc | 0, acc$0=acc <= x?x:invalid_arg(cst_Bytes_concat), acc=acc$0, param=tl; continue} var _AV_=caml_ml_bytes_length(_AT_) + acc | 0} else var _AV_=acc; var dst=caml_create_bytes(_AV_),pos=pos$1,param$0=l; for(;;) {if(param$0) {var _AU_=param$0[1]; if(param$0[2]) {var tl$0=param$0[2]; caml_blit_bytes(_AU_,0,dst,pos,caml_ml_bytes_length(_AU_)); caml_blit_bytes (sep,0,dst,pos + caml_ml_bytes_length(_AU_) | 0,seplen); var pos$0=(pos + caml_ml_bytes_length(_AU_) | 0) + seplen | 0, pos=pos$0, param$0=tl$0; continue} caml_blit_bytes(_AU_,0,dst,pos,caml_ml_bytes_length(_AU_)); 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 _AS_=param - 9 | 0,switch$0=0; if(4 < _AS_ >>> 0) {if(23 === _AS_)switch$0 = 1} else if(2 !== _AS_)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],_AL_=caml_ml_bytes_length(s) - 1 | 0,_AK_=0; if(! (_AL_ < 0)) {var i$0=_AK_; for(;;) {var match=caml_bytes_unsafe_get(s,i$0),switch$0=0; if(32 <= match) {var _AP_=match - 34 | 0,switch$1=0; if(58 < _AP_ >>> 0) {if(93 <= _AP_)switch$1 = 1} else if(56 < (_AP_ - 1 | 0) >>> 0){switch$0 = 1;switch$1 = 1} if(! switch$1){var _AQ_=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 _AQ_=4;break;case 1:var _AQ_=2;break} n[1] = n[1] + _AQ_ | 0; var _AR_=i$0 + 1 | 0; if(_AL_ !== i$0){var i$0=_AR_;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 _AN_=caml_ml_bytes_length(s) - 1 | 0,_AM_=0; if(! (_AN_ < 0)) {var i=_AM_; 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 _AO_=i + 1 | 0; if(_AN_ !== i){var i=_AO_;continue} break}} return s$0} function map$4(f,s) {var l=caml_ml_bytes_length(s); if(0 === l)return s; var r=caml_create_bytes(l),_AI_=l - 1 | 0,_AH_=0; if(! (_AI_ < 0)) {var i=_AH_; for(;;) {caml_bytes_unsafe_set(r,i,caml_call1(f,caml_bytes_unsafe_get(s,i))); var _AJ_=i + 1 | 0; if(_AI_ !== i){var i=_AJ_;continue} break}} return r} function mapi$0(f,s) {var l=caml_ml_bytes_length(s); if(0 === l)return s; var r=caml_create_bytes(l),_AF_=l - 1 | 0,_AE_=0; if(! (_AF_ < 0)) {var i=_AE_; for(;;) {caml_bytes_unsafe_set (r,i,caml_call2(f,i,caml_bytes_unsafe_get(s,i))); var _AG_=i + 1 | 0; if(_AF_ !== i){var i=_AG_;continue} break}} return r} function fold_left$1(f,x,a) {var r=[0,x],_AC_=caml_ml_bytes_length(a) - 1 | 0,_AB_=0; if(! (_AC_ < 0)) {var i=_AB_; for(;;) {r[1] = caml_call2(f,r[1],caml_bytes_unsafe_get(a,i)); var _AD_=i + 1 | 0; if(_AC_ !== i){var i=_AD_;continue} break}} return r[1]} function fold_right$0(f,a,x) {var r=[0,x],_Az_=caml_ml_bytes_length(a) - 1 | 0; if(! (_Az_ < 0)) {var i=_Az_; for(;;) {r[1] = caml_call2(f,caml_bytes_unsafe_get(a,i),r[1]); var _AA_=i - 1 | 0; if(0 !== i){var i=_AA_;continue} break}} return r[1]} function exists$0(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$0(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$4(uppercase_ascii,s)} function lowercase_ascii$0(s){return map$4(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), _Ay_=len_pre <= len_s?1:0; if(_Ay_) {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 _Ay_} 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, _Ax_=0 <= diff?1:0; if(_Ax_) {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 _Ax_} 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 _Av_=1;return _Av_} catch(_Aw_) {_Aw_ = caml_wrap_exception(_Aw_); if(_Aw_ === Not_found)return 0; throw _Aw_} 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 _At_=1;return _At_} catch(_Au_) {_Au_ = caml_wrap_exception(_Au_); if(_Au_ === Not_found)return 0; throw _Au_} return invalid_arg(cst_String_rcontains_from_Byte)} function compare$7(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)], _Ap_=caml_ml_bytes_length(s) - 1 | 0; if(! (_Ap_ < 0)) {var i=_Ap_; for(;;) {if(caml_bytes_unsafe_get(s,i) === sep) {var _Ar_=r[1]; r[1] = [0,sub(s,i + 1 | 0,(j[1] - i | 0) - 1 | 0),_Ar_]; j[1] = i} var _As_=i - 1 | 0; if(0 !== i){var i=_As_;continue} break}} var _Aq_=r[1]; return [0,sub(s,0,j[1]),_Aq_]} function uppercase$0(s){return map$4(uppercase,s)} function lowercase$0(s){return map$4(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),_An_=i + 1 | 0; return [0,x,function(_Ao_){return aux(_An_,_Ao_)}]} var _Al_=0; return function(_Am_){return aux(_Al_,_Am_)}} function to_seqi(s) {function aux(i,param) {if(i === caml_ml_bytes_length(s))return 0; var x=caml_bytes_get(s,i),_Aj_=i + 1 | 0; return [0,[0,i,x],function(_Ak_){return aux(_Aj_,_Ak_)}]} var _Ah_=0; return function(_Ai_){return aux(_Ah_,_Ai_)}} 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_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_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, 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$7=runtime.caml_bytes_equal, include$1= [0, make$0, init$0, empty$0, copy, to_bytes, of_bytes, sub, sub_string, extend, fill, blit, blit$0, concat$0, cat$0, iter$3, iteri$0, map$4, mapi$0, fold_left$1, fold_right$0, for_all$0, exists$0, 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$7, equal$7, starts_with, ends_with, unsafe_to_string, unsafe_of_string, split_on_char, to_seq$2, to_seqi, of_seq$0, 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(771,include$1,"Stdlib__Bytes"); function make$1(n,c){return caml_string_of_bytes(make$0(n,c))} function init$1(n,f){return caml_string_of_bytes(init$0(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$1(f,s) {var _z$_=caml_ml_string_length(s) - 1 | 0,_z__=0; if(! (_z$_ < 0)) {var i=_z__; for(;;) {caml_call2(f,i,caml_string_unsafe_get(s,i)); var _Aa_=i + 1 | 0; if(_z$_ !== i){var i=_Aa_;continue} break}} return 0} function map$5(f,s) {return caml_string_of_bytes(map$4(f,caml_bytes_of_string(s)))} function mapi$1(f,s) {return caml_string_of_bytes(mapi$0(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$1(f,s){return exists$0(f,caml_bytes_of_string(s))} function for_all$1(f,s){return for_all$0(f,caml_bytes_of_string(s))} function is_space$0(param) {var _z9_=param - 9 | 0,switch$0=0; if(4 < _z9_ >>> 0) {if(23 === _z9_)switch$0 = 1} else if(2 !== _z9_)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),_z8_=match - 32 | 0,switch$0=0; if(59 < _z8_ >>> 0) {if(33 < (_z8_ - 61 | 0) >>> 0)switch$0 = 1} else if(2 === _z8_)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 _z6_=1;return _z6_} catch(_z7_) {_z7_ = caml_wrap_exception(_z7_); if(_z7_ === Not_found)return 0; throw _z7_} 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 _z4_=1;return _z4_} catch(_z5_) {_z5_ = caml_wrap_exception(_z5_); if(_z5_ === Not_found)return 0; throw _z5_} 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), _z3_=len_pre <= len_s?1:0; if(_z3_) {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 _z3_} 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, _z2_=0 <= diff?1:0; if(_z2_) {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 _z2_} function split_on_char$0(sep,s) {var r=[0,0], j=[0,caml_ml_string_length(s)], _zY_=caml_ml_string_length(s) - 1 | 0; if(! (_zY_ < 0)) {var i=_zY_; for(;;) {if(caml_string_unsafe_get(s,i) === sep) {var _z0_=r[1]; r[1] = [0,sub$0(s,i + 1 | 0,(j[1] - i | 0) - 1 | 0),_z0_]; j[1] = i} var _z1_=i - 1 | 0; if(0 !== i){var i=_z1_;continue} break}} var _zZ_=r[1]; return [0,sub$0(s,0,j[1]),_zZ_]} 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$8(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_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$8=caml_string_equal, include$2= [0, make$1, init$1, empty$1, of_bytes, to_bytes, concat$1, cat, equal$8, compare$8, starts_with$0, ends_with$0, contains_from$0, rcontains_from$0, contains$0, sub$0, split_on_char$0, map$5, mapi$1, fold_left$2, fold_right$1, for_all$1, exists$1, trim$0, escaped$1, uppercase_ascii$1, lowercase_ascii$1, capitalize_ascii$0, uncapitalize_ascii$0, iter$4, iteri$1, 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, 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(772,include$2,"Stdlib__String"); function equal$9(param,_zX_){return 1} function compare$9(param,_zW_){return 0} function to_string$2(param){return cst$5} var Stdlib_Unit=[0,equal$9,compare$9,to_string$2]; caml_register_global(773,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(774,Stdlib_Marshal,"Stdlib__Marshal"); 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)} function marshal(obj){return runtime.caml_output_value_to_bytes(obj,0)} function unmarshal(str,pos) {var _zV_=pos + total_size(str,pos) | 0; return [0,from_bytes(str,pos),_zV_]} 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,_q_]} 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 _zT_=0 <= l?1:0,_zU_=_zT_?l <= max_ephe_length?1:0:_zT_; if(1 - _zU_)invalid_arg(cst_Obj_Ephemeron_create); return runtime.caml_ephe_create(l)} function length$0(x){return x.length - 1 - 2 | 0} function raise_if_invalid_offset(e,o,msg) {var _zQ_=0 <= o?1:0,_zR_=_zQ_?o < length$0(e)?1:0:_zQ_,_zS_=1 - _zR_; return _zS_?invalid_arg(msg):_zS_} 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$0(e1) - l | 0) < o1) && 0 <= o2 && ! ((length$0(e2) - l | 0) < o2)) {var _zO_=0 !== l?1:0, _zP_=_zO_?runtime.caml_ephe_blit_key(e1,o1,e2,o2,l):_zO_; return _zP_} return invalid_arg(cst_Obj_Ephemeron_blit_key)} var _r_=runtime.caml_ephe_blit_data, _s_=runtime.caml_ephe_check_data, _t_= [0, create, length$0, 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(_zN_){return runtime.caml_ephe_unset_data(_zN_)}, _s_, _r_, 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, marshal, unmarshal, _t_]; caml_register_global(775,Stdlib_Obj,"Stdlib__Obj"); var make_float=runtime.caml_make_float_vect,Floatarray=[0]; function init$2(l,f) {if(0 === l)return [0]; if(0 <= l) {var res=caml_make_vect(l,caml_call1(f,0)),_zL_=l - 1 | 0,_zK_=1; if(! (_zL_ < 1)) {var i=_zK_; for(;;) {res[1 + i] = caml_call1(f,i); var _zM_=i + 1 | 0; if(_zL_ !== i){var i=_zM_;continue} break}} return res} return invalid_arg(cst_Array_init)} function create_matrix(sx,sy,init) {var res=caml_make_vect(sx,[0]),_zI_=sx - 1 | 0,_zH_=0; if(! (_zI_ < 0)) {var x=_zH_; for(;;) {res[1 + x] = caml_make_vect(sy,init); var _zJ_=x + 1 | 0; if(_zI_ !== x){var x=_zJ_;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 _zF_=a.length - 1 - 1 | 0,_zE_=0; if(! (_zF_ < 0)) {var i=_zE_; for(;;) {caml_call1(f,a[1 + i]); var _zG_=i + 1 | 0; if(_zF_ !== i){var i=_zG_;continue} break}} return 0} function iter2$0(f,a,b) {if(a.length - 1 !== b.length - 1) return invalid_arg(cst_Array_iter2_arrays_must_ha); var _zC_=a.length - 1 - 1 | 0,_zB_=0; if(! (_zC_ < 0)) {var i=_zB_; for(;;) {caml_call2(f,a[1 + i],b[1 + i]); var _zD_=i + 1 | 0; if(_zC_ !== i){var i=_zD_;continue} break}} return 0} function map$6(f,a) {var l=a.length - 1; if(0 === l)return [0]; var r=caml_make_vect(l,caml_call1(f,a[1])),_zz_=l - 1 | 0,_zy_=1; if(! (_zz_ < 1)) {var i=_zy_; for(;;) {r[1 + i] = caml_call1(f,a[1 + i]); var _zA_=i + 1 | 0; if(_zz_ !== i){var i=_zA_;continue} break}} return r} function map2$0(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])),_zw_=la - 1 | 0,_zv_=1; if(! (_zw_ < 1)) {var i=_zv_; for(;;) {r[1 + i] = caml_call2(f,a[1 + i],b[1 + i]); var _zx_=i + 1 | 0; if(_zw_ !== i){var i=_zx_;continue} break}} return r} function iteri$2(f,a) {var _zt_=a.length - 1 - 1 | 0,_zs_=0; if(! (_zt_ < 0)) {var i=_zs_; for(;;) {caml_call2(f,i,a[1 + i]); var _zu_=i + 1 | 0; if(_zt_ !== i){var i=_zu_;continue} break}} return 0} function mapi$2(f,a) {var l=a.length - 1; if(0 === l)return [0]; var r=caml_make_vect(l,caml_call2(f,0,a[1])),_zq_=l - 1 | 0,_zp_=1; if(! (_zq_ < 1)) {var i=_zp_; for(;;) {r[1 + i] = caml_call2(f,i,a[1 + i]); var _zr_=i + 1 | 0; if(_zq_ !== i){var i=_zr_;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],_zn_=a.length - 1 - 1 | 0,_zm_=0; if(! (_zn_ < 0)) {var i=_zm_; for(;;) {r[1] = caml_call2(f,r[1],a[1 + i]); var _zo_=i + 1 | 0; if(_zn_ !== i){var i=_zo_;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], _zk_=len - 1 | 0, _zj_=1; if(! (_zk_ < 1)) {var i=_zj_; 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 _zl_=i + 1 | 0; if(_zk_ !== i){var i=_zl_;continue} break}} return [0,acc$1[1],output_array]} function fold_right$2(f,a,x) {var r=[0,x],_zh_=a.length - 1 - 1 | 0; if(! (_zh_ < 0)) {var i=_zh_; for(;;) {r[1] = caml_call2(f,a[1 + i],r[1]); var _zi_=i - 1 | 0; if(0 !== i){var i=_zi_;continue} break}} return r[1]} function exists$2(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$2(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$0(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$0(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$0(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), _zf_=n - 1 | 0, _ze_=1; if(! (_zf_ < 1)) {var i=_ze_; for(;;) {var match$0=x[1 + i],bi=match$0[2],ai=match$0[1]; a[1 + i] = ai; b[1 + i] = bi; var _zg_=i + 1 | 0; if(_zf_ !== i){var i=_zg_;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]]),_zc_=na - 1 | 0,_zb_=1; if(! (_zc_ < 1)) {var i=_zb_; for(;;) {x[1 + i] = [0,a[1 + i],b[1 + i]]; var _zd_=i + 1 | 0; if(_zc_ !== i){var i=_zd_;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 _y6_=i31 + 1 | 0,_y7_=caml_check_bound(a,_y6_)[1 + _y6_]; if(caml_call2(cmp,caml_check_bound(a,i31)[1 + i31],_y7_) < 0) x[1] = i31 + 1 | 0; var _y8_=i31 + 2 | 0, _y9_=caml_check_bound(a,_y8_)[1 + _y8_], _y__=x[1]; if(caml_call2(cmp,caml_check_bound(a,_y__)[1 + _y__],_y9_) < 0) x[1] = i31 + 2 | 0; return x[1]} if((i31 + 1 | 0) < l) {var _y$_=i31 + 1 | 0,_za_=caml_check_bound(a,_y$_)[1 + _y$_]; if(! (0 <= caml_call2(cmp,caml_check_bound(a,i31)[1 + i31],_za_))) 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 _y5_=caml_check_bound(a,j)[1 + j]; caml_check_bound(a,i$0)[1 + i$0] = _y5_; var i$0=j; continue} caml_check_bound(a,i$0)[1 + i$0] = e; return 0}} function trickle(l,i,e) {try {var _y4_=trickledown(l,i,e);return _y4_} 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),_y3_=caml_check_bound(a,i$1)[1 + i$1]; caml_check_bound(a,i$0)[1 + i$0] = _y3_; var i$0=i$1; continue}} function bubble(l,i) {try {var _y2_=bubbledown(l,i);return _y2_} 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,_yU_=((l + 1 | 0) / 3 | 0) - 1 | 0; if(! (_yU_ < 0)) {var i$2=_yU_; for(;;) {trickle(l,i$2,caml_check_bound(a,i$2)[1 + i$2]); var _y1_=i$2 - 1 | 0; if(0 !== i$2){var i$2=_y1_;continue} break}} var _yV_=l - 1 | 0; if(! (_yV_ < 2)) {var i$0=_yV_; a: for(;;) {var e$0=caml_check_bound(a,i$0)[1 + i$0], _yZ_=caml_check_bound(a,0)[1]; caml_check_bound(a,i$0)[1 + i$0] = _yZ_; 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,_u_]; 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 _yT_=caml_check_bound(a,father)[1 + father]; caml_check_bound(a,i)[1 + i] = _yT_; if(0 < father){var i=father;continue} caml_check_bound(a,0)[1] = e$0} var _y0_=i$0 - 1 | 0; if(2 !== i$0){var i$0=_y0_;continue a} break} break}} var _yW_=1 < l?1:0; if(_yW_) {var e=caml_check_bound(a,1)[2],_yX_=caml_check_bound(a,0)[1]; caml_check_bound(a,1)[2] = _yX_; caml_check_bound(a,0)[1] = e; var _yY_=0} else var _yY_=_yW_; return _yY_} 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 _yL_=len - 1 | 0,_yK_=0; if(! (_yL_ < 0)) {var i=_yK_; a: for(;;) {var _yM_=srcofs + i | 0, e=caml_check_bound(a,_yM_)[1 + _yM_], j=[0,(dstofs + i | 0) - 1 | 0]; for(;;) {if(dstofs <= j[1]) {var _yN_=j[1]; if(0 < caml_call2(cmp,caml_check_bound(dst,_yN_)[1 + _yN_],e)) {var _yO_=j[1], _yP_=caml_check_bound(dst,_yO_)[1 + _yO_], _yQ_=j[1] + 1 | 0; caml_check_bound(dst,_yQ_)[1 + _yQ_] = _yP_; j[1] += -1; continue}} var _yR_=j[1] + 1 | 0; caml_check_bound(dst,_yR_)[1 + _yR_] = e; var _yS_=i + 1 | 0; if(_yL_ !== i){var i=_yS_;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],_yI_=i + 1 | 0; return [0,x,function(_yJ_){return aux(_yI_,_yJ_)}]} return 0} var _yG_=0; return function(_yH_){return aux(_yG_,_yH_)}} function to_seqi$1(a) {function aux(i,param) {if(i < a.length - 1) {var x=a[1 + i],_yE_=i + 1 | 0; return [0,[0,i,x],function(_yF_){return aux(_yE_,_yF_)}]} return 0} var _yC_=0; return function(_yD_){return aux(_yC_,_yD_)}} function of_seq$2(i$2) {var _yB_=0,l=fold_left(function(acc,x){return [0,x,acc]},_yB_,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$2, create_matrix, create_matrix, append$1, concat$2, sub$1, copy$1, fill$0, blit$1, to_list$1, of_list, iter$5, iteri$2, map$6, mapi$2, fold_left$3, fold_left_map$0, fold_right$2, iter2$0, map2$0, for_all$2, exists$2, for_all2$0, exists2$0, mem$0, memq$0, find_opt$0, find_map$0, split$0, combine$0, sort, fast_sort$0, fast_sort$0, to_seq$4, to_seqi$1, of_seq$2, Floatarray]; caml_register_global(776,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 _yA_=x == runtime.caml_trunc_float(x)?1:0; return _yA_?is_finite(x):_yA_} function succ$0(x){return caml_nextafter_float(x,infinity)} function pred$0(x){return caml_nextafter_float(x,neg_infinity)} function equal$10(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 _yy_=(ofs + len | 0) - 1 | 0; if(! (_yy_ < ofs)) {var i=ofs; for(;;) {a[1 + i] = v; var _yz_=i + 1 | 0; if(_yy_ !== i){var i=_yz_;continue} break}} return 0} function check(a,ofs,len,msg) {var _yu_=ofs < 0?1:0; if(_yu_) var _yv_=_yu_; else {var _yw_=len < 0?1:0; if(_yw_) var _yv_=_yw_; else var _yx_=(ofs + len | 0) < 0?1:0, _yv_=_yx_ || (a.length - 1 < (ofs + len | 0)?1:0)} return _yv_?invalid_arg(msg):_yv_} function make$2(n,v) {var result=caml_floatarray_create(n); unsafe_fill(result,0,n,v); return result} function init$3(l,f) {if(0 <= l) {var res=caml_floatarray_create(l),_ys_=l - 1 | 0,_yr_=0; if(! (_ys_ < 0)) {var i=_yr_; for(;;) {res[1 + i] = caml_call1(f,i); var _yt_=i + 1 | 0; if(_ys_ !== i){var i=_yt_;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,_v_]}}} 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(a.length - 1,function(_yq_){return a[1 + _yq_]})} function of_list$0(l) {var result=caml_floatarray_create(length(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 _yo_=a.length - 1 - 1 | 0,_yn_=0; if(! (_yo_ < 0)) {var i=_yn_; for(;;) {caml_call1(f,a[1 + i]); var _yp_=i + 1 | 0; if(_yo_ !== i){var i=_yp_;continue} break}} return 0} function iter2$1(f,a,b) {if(a.length - 1 !== b.length - 1) return invalid_arg(cst_Float_Array_iter2_arrays_m); var _yl_=a.length - 1 - 1 | 0,_yk_=0; if(! (_yl_ < 0)) {var i=_yk_; for(;;) {caml_call2(f,a[1 + i],b[1 + i]); var _ym_=i + 1 | 0; if(_yl_ !== i){var i=_ym_;continue} break}} return 0} function map$7(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_call1(f,a[1 + i]); var _yj_=i + 1 | 0; if(_yi_ !== i){var i=_yj_;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_Float_Array_map2_arrays_mu); var r=caml_floatarray_create(la),_yf_=la - 1 | 0,_ye_=0; if(! (_yf_ < 0)) {var i=_ye_; for(;;) {r[1 + i] = caml_call2(f,a[1 + i],b[1 + i]); var _yg_=i + 1 | 0; if(_yf_ !== i){var i=_yg_;continue} break}} return r} function iteri$3(f,a) {var _yc_=a.length - 1 - 1 | 0,_yb_=0; if(! (_yc_ < 0)) {var i=_yb_; for(;;) {caml_call2(f,i,a[1 + i]); var _yd_=i + 1 | 0; if(_yc_ !== i){var i=_yd_;continue} break}} return 0} function mapi$3(f,a) {var l=a.length - 1,r=caml_floatarray_create(l),_x$_=l - 1 | 0,_x__=0; if(! (_x$_ < 0)) {var i=_x__; for(;;) {r[1 + i] = caml_call2(f,i,a[1 + i]); var _ya_=i + 1 | 0; if(_x$_ !== i){var i=_ya_;continue} break}} return r} function fold_left$4(f,x,a) {var r=[0,x],_x8_=a.length - 1 - 1 | 0,_x7_=0; if(! (_x8_ < 0)) {var i=_x7_; for(;;) {r[1] = caml_call2(f,r[1],a[1 + i]); var _x9_=i + 1 | 0; if(_x8_ !== i){var i=_x9_;continue} break}} return r[1]} function fold_right$3(f,a,x) {var r=[0,x],_x5_=a.length - 1 - 1 | 0; if(! (_x5_ < 0)) {var i=_x5_; for(;;) {r[1] = caml_call2(f,a[1 + i],r[1]); var _x6_=i - 1 | 0; if(0 !== i){var i=_x6_;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 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 _x4_=trickledown(l,i,e);return _x4_} 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 _x3_=bubbledown(l,i);return _x3_} 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,_xX_=((l + 1 | 0) / 3 | 0) - 1 | 0; if(! (_xX_ < 0)) {var i$2=_xX_; for(;;) {trickle(l,i$2,caml_array_get(a,i$2)); var _x2_=i$2 - 1 | 0; if(0 !== i$2){var i$2=_x2_;continue} break}} var _xY_=l - 1 | 0; if(! (_xY_ < 2)) {var i$0=_xY_; 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,_w_]; 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 _x1_=i$0 - 1 | 0; if(2 !== i$0){var i$0=_x1_;continue a} break} break}} var _xZ_=1 < l?1:0; if(_xZ_) {var e=caml_array_get(a,1); caml_array_set(a,1,caml_array_get(a,0)); var _x0_=caml_array_set(a,0,e)} else var _x0_=_xZ_; return _x0_} 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 _xV_=len - 1 | 0,_xU_=0; if(! (_xV_ < 0)) {var i=_xU_; 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 _xW_=i + 1 | 0; if(_xV_ !== i){var i=_xW_;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],_xS_=i + 1 | 0; return [0,x,function(_xT_){return aux(_xS_,_xT_)}]} return 0} var _xQ_=0; return function(_xR_){return aux(_xQ_,_xR_)}} function to_seqi$2(a) {function aux(i,param) {if(i < a.length - 1) {var x=a[1 + i],_xO_=i + 1 | 0; return [0,[0,i,x],function(_xP_){return aux(_xO_,_xP_)}]} return 0} var _xM_=0; return function(_xN_){return aux(_xM_,_xN_)}} function of_seq$3(i$2) {var _xL_=0, param$0=fold_left(function(acc,x){return [0,x,acc]},_xL_,i$2), len=length(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])),_xJ_=l - 1 | 0,_xI_=1; if(! (_xJ_ < 1)) {var i=_xI_; for(;;) {r[1 + i] = caml_call1(f,a[1 + i]); var _xK_=i + 1 | 0; if(_xJ_ !== i){var i=_xK_;continue} break}} return r} function map_from_array(f,a) {var l=a.length - 1,r=caml_floatarray_create(l),_xG_=l - 1 | 0,_xF_=0; if(! (_xG_ < 0)) {var i=_xF_; for(;;) {r[1 + i] = caml_call1(f,a[1 + i]); var _xH_=i + 1 | 0; if(_xG_ !== i){var i=_xH_;continue} break}} return r} var _x_=caml_floatarray_create, _y_=caml_array_set, _z_=caml_array_get, _A_= [0, function(_xE_){return _xE_.length - 1}, _z_, _y_, make$2, _x_, init$3, append$2, concat$3, sub$2, copy$2, fill$1, blit$2, to_list$2, of_list$0, iter$6, iteri$3, map$7, mapi$3, fold_left$4, fold_right$3, iter2$1, map2$1, for_all$3, exists$3, 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], _B_=caml_floatarray_create, _C_=caml_array_set, _D_=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$10, min$2, max$2, min_max, min_num, max_num, min_max_num, hash$0, [0, function(_xD_){return _xD_.length - 1}, _D_, _C_, make$2, _B_, init$3, append$2, concat$3, sub$2, copy$2, fill$1, blit$2, to_list$2, of_list$0, iter$6, iteri$3, map$7, mapi$3, fold_left$4, fold_right$3, iter2$1, map2$1, for_all$3, exists$3, 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], _A_]; caml_register_global(777,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 _xB_=[0,caml_int_of_string(s)];return _xB_} catch(_xC_) {_xC_ = caml_wrap_exception(_xC_); if(_xC_[1] === Failure)return 0; throw _xC_}} function compare$10(x,y){return caml_int_compare(x,y)} function equal$11(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$10, unsigned_compare, equal$11, min$3, max$3]; caml_register_global(778,Stdlib_Int32,"Stdlib__Int32"); function succ$2(n){return caml_int64_add(n,_E_)} function pred$2(n){return caml_int64_sub(n,_F_)} function abs$2(n) {return caml_greaterequal(n,_G_)?n:runtime.caml_int64_neg(n)} function lognot$1(n){return runtime.caml_int64_xor(n,_H_)} 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 _xz_=[0,caml_int64_of_string(s)];return _xz_} catch(_xA_) {_xA_ = caml_wrap_exception(_xA_); if(_xA_[1] === Failure)return 0; throw _xA_}} function compare$11(x,y){return caml_int64_compare(x,y)} function equal$12(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 (runtime.caml_int64_shift_right_unsigned(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$11, unsigned_compare$0, equal$12, min$4, max$4]; caml_register_global(779,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 _xx_=[0,caml_int_of_string(s)];return _xx_} catch(_xy_) {_xy_ = caml_wrap_exception(_xy_); if(_xy_[1] === Failure)return 0; throw _xy_}} function compare$12(x,y){return caml_int_compare(x,y)} function equal$13(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$12, unsigned_compare$1, equal$13, min$5, max$5]; caml_register_global(780,Stdlib_Nativeint,"Stdlib__Nativeint"); function engine(tbl,state,buf) {var result=runtime.caml_lex_engine(tbl,state,buf), _xu_=0 <= result?1:0, _xv_=_xu_?buf[12] !== dummy_pos?1:0:_xu_; if(_xv_) {buf[11] = buf[12]; var _xw_=buf[12]; buf[12] = [0,_xw_[1],_xw_[2],_xw_[3],buf[4] + buf[6] | 0]} return result} function new_engine(tbl,state,buf) {var result=runtime.caml_new_lex_engine(tbl,state,buf), _xr_=0 <= result?1:0, _xs_=_xr_?buf[12] !== dummy_pos?1:0:_xr_; if(_xs_) {buf[11] = buf[12]; var _xt_=buf[12]; buf[12] = [0,_xt_[1],_xt_[2],_xt_[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 _xd_=with_positions?zero_pos:dummy_pos, _xe_=with_positions?zero_pos:dummy_pos, aux_buffer=caml_create_bytes(512), _xf_=[0], _xg_=0, _xh_=0, _xi_=0, _xj_=0, _xk_=0, _xl_=0, _xm_=0, _xn_=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],_xp_=t.length - 1 - 1 | 0,_xo_=0; if(! (_xp_ < 0)) {var i=_xo_; for(;;) {var v=caml_check_bound(t,i)[1 + i]; if(0 <= v)caml_check_bound(t,i)[1 + i] = v - s | 0; var _xq_=i + 1 | 0; if(_xp_ !== i){var i=_xq_;continue} break}}} blit(aux_buffer,0,lexbuf[2],lexbuf[3],n); lexbuf[3] = lexbuf[3] + n | 0; return 0}, _xn_, _xm_, _xl_, _xk_, _xj_, _xi_, _xh_, _xg_, _xf_, _xe_, _xd_]} 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 _w4_=with_positions?zero_pos:dummy_pos, _w5_=with_positions?zero_pos:dummy_pos, _w6_=[0], _w7_=1, _w8_=0, _w9_=0, _w__=0, _w$_=0, _xa_=0, _xb_=caml_ml_string_length(s), _xc_=to_bytes(s); return [0, function(lexbuf){lexbuf[9] = 1;return 0}, _xc_, _xb_, _xa_, _w$_, _w__, _w9_, _w8_, _w7_, _w6_, _w5_, _w4_]} 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 _w3_=lexbuf[12]; lexbuf[12] = [0,fname,_w3_[2],_w3_[3],_w3_[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], _w1_=lcp !== dummy_pos?1:0, _w2_=_w1_?(lexbuf[12] = [0,lcp[1],lcp[2] + 1 | 0,lcp[4],lcp[4]],0):_w1_; return _w2_} 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(781,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 _wV_=env[13], _wW_= caml_call1(caml_check_bound(tables[1],_wV_)[1 + _wV_],env), _wX_=4, arg$1=_wW_, cmd$0=_wX_} catch(_w0_) {_w0_ = caml_wrap_exception(_w0_); if(_w0_ !== Parse_error)throw _w0_; var arg$1=0,cmd$0=5,_wY_=_w0_} 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 _wZ_=caml_obj_tag(tok); return caml_check_bound(tables[3],_wZ_)[1 + _wZ_] === 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 _wU_=env[11] - n | 0;return caml_check_bound(env[2],_wU_)[1 + _wU_]} function symbol_start_pos(param) {var i=env[12]; for(;;) {if(0 < i) {var _wR_=(env[11] - i | 0) + 1 | 0, st=caml_check_bound(env[3],_wR_)[1 + _wR_], _wS_=(env[11] - i | 0) + 1 | 0, en=caml_check_bound(env[4],_wS_)[1 + _wS_]; if(caml_notequal(st,en))return st; var i$0=i - 1 | 0,i=i$0; continue} var _wT_=env[11]; return caml_check_bound(env[4],_wT_)[1 + _wT_]}} function symbol_end_pos(param) {var _wQ_=env[11];return caml_check_bound(env[4],_wQ_)[1 + _wQ_]} function rhs_start_pos(n) {var _wP_=env[11] - (env[12] - n | 0) | 0; return caml_check_bound(env[3],_wP_)[1 + _wP_]} function rhs_end_pos(n) {var _wO_=env[11] - (env[12] - n | 0) | 0; return caml_check_bound(env[4],_wO_)[1 + _wO_]} 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(_wN_){return runtime.caml_set_parser_trace(_wN_)}, YYexit, yyparse, peek_val, is_current_lookahead, parse_error]; caml_register_global(782,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 _wM_=hr <= hl?hl + 1 | 0:hr + 1 | 0; return [0,l,v,r,_wM_]} 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],_wH_=height(lr); if(_wH_ <= height(ll))return create(ll,lv,create(lr,v,r)); if(lr) {var lrr=lr[3],lrv=lr[2],lrl=lr[1],_wI_=create(lrr,v,r); return create(create(ll,lv,lrl),lrv,_wI_)} 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],_wJ_=height(rl); if(_wJ_ <= height(rr))return create(create(l,v,rl),rv,rr); if(rl) {var rlr=rl[3],rlv=rl[2],rll=rl[1],_wK_=create(rlr,rv,rr); return create(create(l,v,rll),rlv,_wK_)} return invalid_arg(cst_Set_bal$1)} return invalid_arg(cst_Set_bal$2)} var _wL_=hr <= hl?hl + 1 | 0:hr + 1 | 0; return [0,l,v,r,_wL_]} 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 _wG_=param$0[1]; if(_wG_){var param$0=_wG_;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 _wF_=param$0[1]; if(_wF_){var param$0=_wF_;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 _wE_=param[1]; if(_wE_) {var r=param[3],v=param[2];return bal(remove_min_elt(_wE_),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 _wD_=remove_min_elt(t2);return join(t1,min_elt(t2),_wD_)} 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 _I_} 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), _wC_=0 === c?1:0; if(_wC_)return _wC_; 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 _wB_=remove_min_elt(r);return bal(l,min_elt(r),_wB_)} 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], _wz_=union(r1,r2$0); return join(union(l1,l2$0),v1,_wz_)} if(1 === h1)return add(v1,s2); var match$0=split(v2,s1), r1$0=match$0[3], l1$0=match$0[1], _wA_=union(r1$0,r2); return join(union(l1$0,l2),v2,_wA_)} return s1} return s2} function inter(s1,s2) {if(s1) {if(s2) {var r1=s1[3],v1=s1[2],l1=s1[1],_wv_=split(v1,s2),_ww_=_wv_[1]; if(_wv_[2]) {var r2=_wv_[3],_wx_=inter(r1,r2); return join(inter(l1,_ww_),v1,_wx_)} var r2$0=_wv_[3],_wy_=inter(r1,r2$0); return concat(inter(l1,_ww_),_wy_)} 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],_wu_=disjoint(l1,l2); if(_wu_) {var s2$1=caml_call1(r2,0),s1$0=r1,s2$0=s2$1;continue} return _wu_} return 0} return 1}} function diff(s1,s2) {if(s1) {if(s2) {var r1=s1[3],v1=s1[2],l1=s1[1],_wq_=split(v1,s2),_wr_=_wq_[1]; if(_wq_[2]) {var r2=_wq_[3],_ws_=diff(r1,r2); return concat(diff(l1,_wr_),_ws_)} var r2$0=_wq_[3],_wt_=diff(r1,r2$0); return join(diff(l1,_wr_),v1,_wt_)} 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 _wn_=subset(l1,l2); if(_wn_){var s1$0=r1,s2$0=r2;continue} return _wn_} if(0 <= c) {var _wo_=subset([0,0,v1,r1,0],r2); if(_wo_){var s1$0=l1;continue} return _wo_} var _wp_=subset([0,l1,v1,0,0],l2); if(_wp_){var s1$0=r1;continue} return _wp_} 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], _wk_=caml_call1(p,v); if(_wk_) {var _wl_=for_all(p,l); if(_wl_){var param$0=r;continue} var _wm_=_wl_} else var _wm_=_wk_; return _wm_} 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], _wh_=caml_call1(p,v); if(_wh_) var _wi_=_wh_; else {var _wj_=exists(p,l); if(! _wj_){var param$0=r;continue} var _wi_=_wj_} return _wi_} 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 _wf_=concat(lf,rf);return [0,join(lt,v,rt),_wf_]} var _wg_=join(lf,v,rf); return [0,concat(lt,rt),_wg_]} return _J_} function cardinal(param) {if(param) {var r=param[3],l=param[1],_we_=cardinal(r); return (cardinal(l) + 1 | 0) + _we_ | 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 _wd_=max_elt(l); if(0 <= caml_call2(Ord[1],_wd_,v))switch$0 = 1} if(! switch$0) {var switch$1=0; if(0 !== r) {var _wc_=min_elt(r); if(0 <= caml_call2(Ord[1],v,_wc_))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 _wb_=remove_min_elt(t2); return try_join(t1,min_elt(t2),_wb_)} return t1} return t2} return 0} function of_list(l) {if(l) {var _v2_=l[2],_v3_=l[1]; if(_v2_) {var _v4_=_v2_[2],_v5_=_v2_[1]; if(_v4_) {var _v6_=_v4_[2],_v7_=_v4_[1]; if(_v6_) {var _v8_=_v6_[2],_v9_=_v6_[1]; if(_v8_) {if(_v8_[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 _v__=l[2]; if(_v__) {var l$4=_v__[2],x1=_v__[1],x0$0=l[1]; return [0,[0,[0,0,x0$0,0,1],x1,0,2],l$4]}} break; default: if(l) {var _v$_=l[2]; if(_v$_) {var _wa_=_v$_[2]; if(_wa_) {var l$5=_wa_[2],x2=_wa_[1],x1$0=_v$_[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,_K_]}; return sub(length(l$0),l$0)[1]} var x4=_v8_[1]; return add(x4,add(_v9_,add(_v7_,add(_v5_,singleton(_v3_)))))} return add(_v9_,add(_v7_,add(_v5_,singleton(_v3_))))} return add(_v7_,add(_v5_,singleton(_v3_)))} return add(_v5_,singleton(_v3_))} return singleton(_v3_)} 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],_v0_=cons_enum(t,rest); return [0,x,function(_v1_){return seq_of_enum(_v0_,_v1_)}]} return 0} function to_seq(c) {var _vY_=cons_enum(c,0); return function(_vZ_){return seq_of_enum(_vY_,_vZ_)}} 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],_vW_=snoc_enum(t,rest); return [0,x,function(_vX_){return rev_seq_of_enum(_vW_,_vX_)}]} return 0} function to_rev_seq(c) {var _vU_=snoc_enum(c,0); return function(_vV_){return rev_seq_of_enum(_vU_,_vV_)}} 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 _vS_=[0,v,r,c]} else var _vS_=c; return function(_vT_){return seq_of_enum(_vS_,_vT_)}}} 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(783,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),_vR_=hr <= hl?hl + 1 | 0:hr + 1 | 0; return [0,l,x,d,r,_vR_]} 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],_vM_=height(lr); if(_vM_ <= 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], _vN_=create(lrr,x,d,r); return create(create(ll,lv,ld,lrl),lrv,lrd,_vN_)} 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],_vO_=height(rl); if(_vO_ <= 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], _vP_=create(rlr,rv,rd,rr); return create(create(l,x,d,rll),rlv,rld,_vP_)} return invalid_arg(cst_Map_bal$1)} return invalid_arg(cst_Map_bal$2)} var _vQ_=hr <= hl?hl + 1 | 0:hr + 1 | 0; return [0,l,x,d,r,_vQ_]} 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), _vL_=0 === c?1:0; if(_vL_)return _vL_; 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 _vK_=param$0[1]; if(_vK_){var param$0=_vK_;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 _vJ_=param$0[1]; if(_vJ_){var param$0=_vJ_;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 _vI_=param[1]; if(_vI_) {var r=param[4],d=param[3],v=param[2]; return bal(remove_min_binding(_vI_),v,d,r)} var r$0=param[4]; return r$0} return invalid_arg(cst_Map_remove_min_elt)} function _vh_(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 _vh_(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 _vh_(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], _vF_=caml_call2(p,v,d); if(_vF_) {var _vG_=for_all(p,l); if(_vG_){var param$0=r;continue} var _vH_=_vG_} else var _vH_=_vF_; return _vH_} 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], _vC_=caml_call2(p,v,d); if(_vC_) var _vD_=_vC_; else {var _vE_=exists(p,l); if(! _vE_){var param$0=r;continue} var _vD_=_vE_} return _vD_} 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 _L_} 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], _vy_=merge(f,r1,r2), _vz_=caml_call3(f,v1,[0,d1],d2); return concat_or_join(merge(f,l1,l2),v1,_vz_,_vy_)}} 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], _vA_=merge(f,r1$0,r2$0), _vB_=caml_call3(f,v2,d1$0,[0,d2$0]); return concat_or_join(merge(f,l1$0,l2$0),v2,_vB_,_vA_)} throw [0,Assert_failure,_M_]} 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 _vw_=concat(lf,rf);return [0,join(lt,v,d,rt),_vw_]} var _vx_=join(lf,v,d,rf); return [0,concat(lt,rt),_vx_]} return _N_} 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], _vt_=0 === caml_call2(Ord[1],v1,v2)?1:0; if(_vt_) {var _vu_=caml_call2(cmp,d1,d2); if(_vu_) {var e2$1=cons_enum(r2,e2$0), e1$1=cons_enum(r1,e1$0), e1=e1$1, e2=e2$1; continue} var _vv_=_vu_} else var _vv_=_vt_; return _vv_} return 0} return e2?0:1}} function cardinal(param) {if(param) {var r=param[4],l=param[1],_vs_=cardinal(r); return (cardinal(l) + 1 | 0) + _vs_ | 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],_vq_=cons_enum(t,rest); return [0,[0,k,v],function(_vr_){return seq_of_enum(_vq_,_vr_)}]} return 0} function to_seq(m) {var _vo_=cons_enum(m,0); return function(_vp_){return seq_of_enum(_vo_,_vp_)}} 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],_vm_=snoc_enum(t,rest); return [0, [0,k,v], function(_vn_){return rev_seq_of_enum(_vm_,_vn_)}]} return 0} function to_rev_seq(c) {var _vk_=snoc_enum(c,0); return function(_vl_){return rev_seq_of_enum(_vk_,_vl_)}} 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 _vi_=[0,v,d,r,c]} else var _vi_=c; return function(_vj_){return seq_of_enum(_vi_,_vj_)}}} 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(784,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 _vg_=s[1]; if(_vg_) {var tl=_vg_[2],hd=_vg_[1];s[1] = tl;s[2] = s[2] - 1 | 0;return hd} throw Empty} function pop_opt(s) {var _vf_=s[1]; if(_vf_) {var tl=_vf_[2],hd=_vf_[1];s[1] = tl;s[2] = s[2] - 1 | 0;return [0,hd]} return 0} function top(s) {var _ve_=s[1];if(_ve_){var hd=_ve_[1];return hd}throw Empty} function top_opt(s) {var _vd_=s[1];if(_vd_){var hd=_vd_[1];return [0,hd]}return 0} function is_empty(s){return 0 === s[1]?1:0} function length$1(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, length$1, iter$7, fold$2, to_seq$6, add_seq, of_seq$4]; caml_register_global(785,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],_vc_=q[3]; return _vc_ ?(q[1] = q[1] + 1 | 0,_vc_[2] = cell,q[3] = cell,0) :(q[1] = 1,q[2] = cell,q[3] = cell,0)} function peek(q) {var _vb_=q[2];if(_vb_){var content=_vb_[1];return content}throw Empty$0} function peek_opt(q) {var _va_=q[2];if(_va_){var content=_va_[1];return [0,content]}return 0} function take(q) {var _u__=q[2]; if(_u__) {var _u$_=_u__[1]; if(_u__[2]) {var next=_u__[2];q[1] = q[1] - 1 | 0;q[2] = next;return _u$_} clear$0(q); return _u$_} throw Empty$0} function take_opt(q) {var _u8_=q[2]; if(_u8_) {var _u9_=_u8_[1]; if(_u8_[2]) {var next=_u8_[2];q[1] = q[1] - 1 | 0;q[2] = next;return [0,_u9_]} clear$0(q); return [0,_u9_]} 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$0(q){return 0 === q[1]?1:0} function length$2(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 _u6_=0 < q1[1]?1:0; if(_u6_) {var _u7_=q2[3]; return _u7_ ?(q2[1] = q2[1] + q1[1] | 0, _u7_[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 _u6_} function to_seq$7(q) {function aux(c,param) {if(c) {var x=c[1],next=c[2]; return [0,x,function(_u5_){return aux(next,_u5_)}]} return 0} var _u3_=q[2]; return function(_u4_){return aux(_u3_,_u4_)}} 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, take_opt, take, peek, peek_opt, peek, clear$0, copy$4, is_empty$0, length$2, iter$8, fold$3, transfer, to_seq$7, add_seq$0, of_seq$5]; caml_register_global(786,Stdlib_Queue,"Stdlib__Queue"); 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(787,CamlinternalLazy,"CamlinternalLazy"); function from_fun(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$8(f,x) {return [246, function(_u0_) {var _u1_=caml_obj_tag(x), _u2_=250 === _u1_?x[1]:246 === _u1_?force_lazy_block(x):x; return caml_call1(f,_u2_)}]} function map_val(f,x) {if(is_val(x)) {var _uV_=caml_obj_tag(x), _uW_=250 === _uV_?x[1]:246 === _uV_?force_lazy_block(x):x; return from_val(caml_call1(f,_uW_))} return [246, function(_uX_) {var _uY_=caml_obj_tag(x), _uZ_=250 === _uY_?x[1]:246 === _uY_?force_lazy_block(x):x; return caml_call1(f,_uZ_)}]} var Stdlib_Lazy= [0, Undefined, map$8, is_val, from_val, map_val, from_fun, force_val, from_fun, from_val, is_val]; caml_register_global(788,Stdlib_Lazy,"Stdlib__Lazy"); 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,_O_]} case 2: var f=d$0[1], _uR_=caml_obj_tag(f), d$1=250 === _uR_?f[1]:246 === _uR_?force_lazy_block(f):f, d$0=d$1; continue; case 3: var _uS_=d$0[1],_uT_=_uS_[1]; if(_uT_) {var _uU_=_uT_[1]; if(_uU_){var a$0=_uU_[1];_uS_[1] = 0;return [0,a$0,d$0]} return 0} var match$0=caml_call1(_uS_[2],count); if(match$0){var a$1=match$0[1];return [0,a$1,d$0]} _uS_[1] = _P_; 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 _uM_=s[2]; if(typeof _uM_ === "number") return 0; else switch(_uM_[0]) {case 0:var a=_uM_[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,_Q_]} case 2: var f=_uM_[1], _uN_=caml_obj_tag(f), _uO_=250 === _uN_?f[1]:246 === _uN_?force_lazy_block(f):f; s[2] = _uO_; continue; case 3: var _uP_=_uM_[1],_uQ_=_uP_[1]; if(_uQ_){var a$1=_uQ_[1];return a$1} var x=caml_call1(_uP_[2],s[1]); _uP_[1] = [0,x]; return x; default: var b=_uM_[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 _uK_=s[2]; if(typeof _uK_ !== "number") switch(_uK_[0]) {case 0:var d=_uK_[2];s[1] = s[1] + 1 | 0;s[2] = d;return 0; case 3: var _uL_=_uK_[1]; if(_uL_[1]){s[1] = s[1] + 1 | 0;_uL_[1] = 0;return 0} break; case 4: var b=_uK_[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 _uJ_=0; return [0,[0,0,fold_right(function(x,l){return [0,x,l]},l,_uJ_)]]} 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 _uI_=data(s);return [0,[0,0,[1,data(i),_uI_]]]} 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(_uG_) {var _uH_=data(s);return [1,data(caml_call1(f,0)),_uH_]}]]]]} function lcons(f,s) {return [0, [0, 0, [2, [246, function(_uE_) {var _uF_=data(s);return [0,caml_call1(f,0),_uF_]}]]]]} function lsing(f) {return [0,[0,0,[2,[246,function(_uD_){return [0,caml_call1(f,0),0]}]]]]} var sempty=0; function slazy(f) {return [0,[0,0,[2,[246,function(_uC_){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(789,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$3(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,_R_]} throw [0,Assert_failure,_S_]}} 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} function add_utf_8_uchar(b,u) {if(0 <= u) {if(127 < u) {if(2047 < u) {if(65535 < u) {if(1114111 < u)throw [0,Assert_failure,_T_]; var pos=b[2]; if(b[3] < (pos + 4 | 0))resize(b,4); caml_bytes_unsafe_set(b[1],pos,240 | u >>> 18 | 0); caml_bytes_unsafe_set (b[1],pos + 1 | 0,128 | (u >>> 12 | 0) & 63); caml_bytes_unsafe_set(b[1],pos + 2 | 0,128 | (u >>> 6 | 0) & 63); caml_bytes_unsafe_set(b[1],pos + 3 | 0,128 | u & 63); b[2] = pos + 4 | 0; return 0} var pos$0=b[2]; if(b[3] < (pos$0 + 3 | 0))resize(b,3); caml_bytes_unsafe_set(b[1],pos$0,224 | u >>> 12 | 0); caml_bytes_unsafe_set(b[1],pos$0 + 1 | 0,128 | (u >>> 6 | 0) & 63); caml_bytes_unsafe_set(b[1],pos$0 + 2 | 0,128 | u & 63); b[2] = pos$0 + 3 | 0; return 0} var pos$1=b[2]; if(b[3] < (pos$1 + 2 | 0))resize(b,2); caml_bytes_unsafe_set(b[1],pos$1,192 | u >>> 6 | 0); caml_bytes_unsafe_set(b[1],pos$1 + 1 | 0,128 | u & 63); b[2] = pos$1 + 2 | 0; return 0} return add_char(b,u)} throw [0,Assert_failure,_U_]} function add_utf_16be_uchar(b,u) {if(0 <= u) {if(65535 < u) {if(1114111 < u)throw [0,Assert_failure,_V_]; var u$0=u - 65536 | 0, hi=55296 | u$0 >>> 10 | 0, lo=56320 | u$0 & 1023, pos=b[2]; if(b[3] < (pos + 4 | 0))resize(b,4); caml_bytes_unsafe_set(b[1],pos,hi >>> 8 | 0); caml_bytes_unsafe_set(b[1],pos + 1 | 0,hi & 255); caml_bytes_unsafe_set(b[1],pos + 2 | 0,lo >>> 8 | 0); caml_bytes_unsafe_set(b[1],pos + 3 | 0,lo & 255); b[2] = pos + 4 | 0; return 0} var pos$0=b[2]; if(b[3] < (pos$0 + 2 | 0))resize(b,2); caml_bytes_unsafe_set(b[1],pos$0,u >>> 8 | 0); caml_bytes_unsafe_set(b[1],pos$0 + 1 | 0,u & 255); b[2] = pos$0 + 2 | 0; return 0} throw [0,Assert_failure,_W_]} function add_utf_16le_uchar(b,u) {if(0 <= u) {if(65535 < u) {if(1114111 < u)throw [0,Assert_failure,_X_]; var u$0=u - 65536 | 0, hi=55296 | u$0 >>> 10 | 0, lo=56320 | u$0 & 1023, pos=b[2]; if(b[3] < (pos + 4 | 0))resize(b,4); caml_bytes_unsafe_set(b[1],pos,hi & 255); caml_bytes_unsafe_set(b[1],pos + 1 | 0,hi >>> 8 | 0); caml_bytes_unsafe_set(b[1],pos + 2 | 0,lo & 255); caml_bytes_unsafe_set(b[1],pos + 3 | 0,lo >>> 8 | 0); b[2] = pos + 4 | 0; return 0} var pos$0=b[2]; if(b[3] < (pos$0 + 2 | 0))resize(b,2); caml_bytes_unsafe_set(b[1],pos$0,u & 255); caml_bytes_unsafe_set(b[1],pos$0 + 1 | 0,u >>> 8 | 0); b[2] = pos$0 + 2 | 0; return 0} throw [0,Assert_failure,_Y_]} function add_substring(b,s,offset,len) {var _uz_=offset < 0?1:0; if(_uz_) var _uA_=_uz_; else var _uB_=len < 0?1:0, _uA_=_uB_ || ((caml_ml_string_length(s) - len | 0) < offset?1:0); if(_uA_)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 _ux_=len < 0?1:0,_uy_=_ux_ || (max_string_length < len?1:0); if(_uy_)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,_uw_=b[1]; for(;;) {if(0 !== to_read) {var r=input(ic,_uw_,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,_Z_]}} 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 _uu_=41; else {if(123 !== opening)throw [0,Assert_failure,___];var _uu_=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) !== _uu_) {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 _uv_=92 === previous?1:0; return _uv_?add_char(b,previous):_uv_}} 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),_us_=i + 1 | 0; return [0,x,function(_ut_){return aux(_us_,_ut_)}]} var _uq_=0; return function(_ur_){return aux(_uq_,_ur_)}} function to_seqi$3(b) {function aux(i,param) {if(b[2] <= i)return 0; var x=caml_bytes_unsafe_get(b[1],i),_uo_=i + 1 | 0; return [0,[0,i,x],function(_up_){return aux(_uo_,_up_)}]} var _um_=0; return function(_un_){return aux(_um_,_un_)}} function add_seq$1(b,seq) {return iter(function(_ul_){return add_char(b,_ul_)},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$3, 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(790,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 _uk_=i + 1 | 0; if(31 !== i){var i=_uk_;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],_uj_=[0,ndec];else var _uj_=0; return [0,[8,_$_,pad_of_pad_opt(pad_opt$5),_uj_,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, _uh_=len < min_len?1:0; if(_uh_) {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 _ui_=0} else var _ui_=_uh_; return _ui_} 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 _uf_=caml_ml_string_length(str) - 1 | 0,_ue_=0; if(! (_uf_ < 0)) {var i=_ue_; for(;;) {bprint_char_literal(buf,caml_string_get(str,i)); var _ug_=i + 1 | 0; if(_uf_ !== i){var i=_ug_;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$1) {var buf=buffer_create(16),fmt=fmt$1,ign_flag=0; a: for(;;) if(typeof fmt === "number") return buffer_contents(buf); else switch(fmt[0]) {case 0: var rest=fmt[1]; buffer_add_char(buf,37); bprint_ignored_flag(buf,ign_flag); buffer_add_char(buf,99); var fmt=rest,ign_flag=0; continue; case 1: var rest$0=fmt[1]; buffer_add_char(buf,37); bprint_ignored_flag(buf,ign_flag); buffer_add_char(buf,67); var fmt=rest$0,ign_flag=0; continue; case 2: var rest$1=fmt[2],pad=fmt[1]; buffer_add_char(buf,37); bprint_ignored_flag(buf,ign_flag); bprint_padding(buf,pad); buffer_add_char(buf,115); var fmt=rest$1,ign_flag=0; continue; case 3: var rest$2=fmt[2],pad$0=fmt[1]; buffer_add_char(buf,37); bprint_ignored_flag(buf,ign_flag); bprint_padding(buf,pad$0); buffer_add_char(buf,83); var fmt=rest$2,ign_flag=0; continue; case 4: var rest$3=fmt[4],prec=fmt[3],pad$1=fmt[2],iconv=fmt[1]; buffer_add_char(buf,37); bprint_ignored_flag(buf,ign_flag); bprint_iconv_flag(buf,iconv); bprint_padding(buf,pad$1); bprint_precision(buf,prec); buffer_add_char(buf,char_of_iconv(iconv)); var fmt=rest$3,ign_flag=0; continue; case 5: var rest$4=fmt[4],prec$0=fmt[3],pad$2=fmt[2],iconv$0=fmt[1]; bprint_altint_fmt(buf,ign_flag,iconv$0,pad$2,prec$0,108); var fmt=rest$4,ign_flag=0; continue; case 6: var rest$5=fmt[4],prec$1=fmt[3],pad$3=fmt[2],iconv$1=fmt[1]; bprint_altint_fmt(buf,ign_flag,iconv$1,pad$3,prec$1,110); var fmt=rest$5,ign_flag=0; continue; case 7: var rest$6=fmt[4],prec$2=fmt[3],pad$4=fmt[2],iconv$2=fmt[1]; bprint_altint_fmt(buf,ign_flag,iconv$2,pad$4,prec$2,76); var fmt=rest$6,ign_flag=0; continue; case 8: var rest$7=fmt[4],prec$3=fmt[3],pad$5=fmt[2],fconv=fmt[1]; buffer_add_char(buf,37); bprint_ignored_flag(buf,ign_flag); 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=rest$7,ign_flag=0; continue; case 9: var rest$8=fmt[2],pad$6=fmt[1]; buffer_add_char(buf,37); bprint_ignored_flag(buf,ign_flag); bprint_padding(buf,pad$6); buffer_add_char(buf,66); var fmt=rest$8,ign_flag=0; continue; case 10: var rest$9=fmt[1]; buffer_add_string(buf,cst$26); var fmt=rest$9; continue; case 11: var rest$10=fmt[2],str=fmt[1]; bprint_string_literal(buf,str); var fmt=rest$10; continue; case 12: var rest$11=fmt[2],chr$0=fmt[1]; bprint_char_literal(buf,chr$0); var fmt=rest$11; continue; case 13: var rest$12=fmt[3],fmtty=fmt[2],pad_opt=fmt[1]; buffer_add_char(buf,37); bprint_ignored_flag(buf,ign_flag); 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=rest$12,ign_flag=0; continue; case 14: var rest$13=fmt[3],fmtty$0=fmt[2],pad_opt$0=fmt[1]; buffer_add_char(buf,37); bprint_ignored_flag(buf,ign_flag); 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=rest$13,ign_flag=0; continue; case 15: var rest$14=fmt[1]; buffer_add_char(buf,37); bprint_ignored_flag(buf,ign_flag); buffer_add_char(buf,97); var fmt=rest$14,ign_flag=0; continue; case 16: var rest$15=fmt[1]; buffer_add_char(buf,37); bprint_ignored_flag(buf,ign_flag); buffer_add_char(buf,116); var fmt=rest$15,ign_flag=0; continue; case 17: var rest$16=fmt[2],fmting_lit=fmt[1]; bprint_string_literal(buf,string_of_formatting_lit(fmting_lit)); var fmt=rest$16; continue; case 18: var rest$17=fmt[2],fmting_gen=fmt[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=rest$17; continue; case 19: var rest$18=fmt[1]; buffer_add_char(buf,37); bprint_ignored_flag(buf,ign_flag); buffer_add_char(buf,114); var fmt=rest$18,ign_flag=0; continue; case 20: var rest$19=fmt[3],char_set=fmt[2],width_opt=fmt[1]; buffer_add_char(buf,37); bprint_ignored_flag(buf,ign_flag); 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 _t6_= is_in_char_set(char_set,0) ?(buffer_add_char(buf,94),rev_char_set(char_set)) :char_set, is_alone$0= function(_t$_) {function is_alone(c) {var after=chr(c + 1 | 0), before=chr(c - 1 | 0), _ua_=is_in_char_set(_t$_,c); if(_ua_) var _ub_=is_in_char_set(_t$_,before), _uc_=_ub_?is_in_char_set(_t$_,after):_ub_, _ud_=1 - _uc_; else var _ud_=_ua_; return _ud_} return is_alone}, is_alone=is_alone$0(_t6_); if(is_alone(93))buffer_add_char(buf,93); var i=1; b: for(;;) {if(i < 256) {if(! is_in_char_set(_t6_,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 {var switcher$0=switcher - 1 | 0; if(46 < switcher$0 >>> 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(_t6_,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$1=match$0 - 45 | 0, switch$1=0; if(48 < switcher$1 >>> 0) if(210 <= switcher$1) {print_char(buf,254);print_char(buf,255)} else switch$1 = 1; else {var switcher$2=switcher$1 - 1 | 0; if(46 < switcher$2 >>> 0) {if(! is_in_char_set(_t6_,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(_t6_,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(_t6_,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=rest$19,ign_flag=0; continue a} case 21: var rest$20=fmt[2],counter=fmt[1]; buffer_add_char(buf,37); bprint_ignored_flag(buf,ign_flag); switch(counter) {case 0:var _t7_=108;break; case 1:var _t7_=110;break; default:var _t7_=78} buffer_add_char(buf,_t7_); var fmt=rest$20,ign_flag=0; continue; case 22: var rest$21=fmt[1]; buffer_add_char(buf,37); bprint_ignored_flag(buf,ign_flag); bprint_string_literal(buf,cst_0c); var fmt=rest$21,ign_flag=0; continue; case 23: var rest$22=fmt[2], ign=fmt[1], match$3=param_format_of_ignored_format(ign,rest$22), fmt$0=match$3[1], fmt=fmt$0, ign_flag=1; continue; default: var rest$23=fmt[3], arity=fmt[1], _t9_=int_of_custom_arity(arity), _t8_=1; if(! (_t9_ < 1)) {var i$8=_t8_; for(;;) {buffer_add_char(buf,37); bprint_ignored_flag(buf,ign_flag); buffer_add_char(buf,63); var _t__=i$8 + 1 | 0; if(_t9_ !== i$8){var i$8=_t__;continue} break}} var fmt=rest$23,ign_flag=0; continue}} 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,_aa_]} else switch(ty1[0]) {case 0: var switch$1=0,_tN_=ty1[1]; if(typeof ty2 !== "number") switch(ty2[0]) {case 0:var rest2=ty2[1];return [0,trans(_tN_,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,_tO_=ty1[1]; if(typeof ty2 !== "number") switch(ty2[0]) {case 1:var rest2$0=ty2[1];return [1,trans(_tO_,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,_tP_=ty1[1]; if(typeof ty2 === "number") switch$3 = 1; else switch(ty2[0]) {case 2:var rest2$1=ty2[1];return [2,trans(_tP_,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,_tQ_=ty1[1]; if(typeof ty2 === "number") switch$4 = 1; else switch(ty2[0]) {case 3:var rest2$2=ty2[1];return [3,trans(_tQ_,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,_tR_=ty1[1]; if(typeof ty2 === "number") switch$5 = 1; else switch(ty2[0]) {case 4:var rest2$3=ty2[1];return [4,trans(_tR_,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,_tS_=ty1[1]; if(typeof ty2 === "number") switch$6 = 1; else switch(ty2[0]) {case 5:var rest2$4=ty2[1];return [5,trans(_tS_,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,_tT_=ty1[1]; if(typeof ty2 === "number") switch$7 = 1; else switch(ty2[0]) {case 6:var rest2$5=ty2[1];return [6,trans(_tT_,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,_tU_=ty1[1]; if(typeof ty2 === "number") switch$8 = 1; else switch(ty2[0]) {case 7:var rest2$6=ty2[1];return [7,trans(_tU_,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,_tV_=ty1[2],_tW_=ty1[1]; if(typeof ty2 === "number") switch$9 = 1; else switch(ty2[0]) {case 8: var rest2$7=ty2[2],ty2$0=ty2[1],_tX_=trans(_tV_,rest2$7); return [8,trans(_tW_,ty2$0),_tX_]; 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,_aj_]; break; case 9: var switch$10=0,_tY_=ty1[3],_tZ_=ty1[2],_t0_=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(_tZ_),ty21), match=fmtty_rel_det(ty), f4=match[4], f2=match[2]; caml_call1(f2,0); caml_call1(f4,0); return [9,_t0_,ty22,trans(_tY_,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,_ak_]; break; case 10: var _t1_=ty1[1]; if(typeof ty2 !== "number" && 10 === ty2[0]) {var rest2$9=ty2[1];return [10,trans(_t1_,rest2$9)]} throw [0,Assert_failure,_al_]; case 11: var switch$11=0,_t2_=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(_t2_,rest2$10)]; default:switch$11 = 1} if(switch$11)throw [0,Assert_failure,_am_]; break; case 12: var switch$12=0,_t3_=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(_t3_,rest2$11)]; default:switch$12 = 1} if(switch$12)throw [0,Assert_failure,_an_]; break; case 13: var switch$13=0,_t4_=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(_t4_,rest2$12)]; default:switch$13 = 1} if(switch$13)throw [0,Assert_failure,_ao_]; break; default: var switch$14=0,_t5_=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(_t5_,rest2$13)]; default:switch$14 = 1} if(switch$14)throw [0,Assert_failure,_ap_]} switch(switch$0) {case 0:throw [0,Assert_failure,_ad_]; case 1:throw [0,Assert_failure,_ae_]; case 2:throw [0,Assert_failure,_af_]; case 3:throw [0,Assert_failure,_ag_]; case 4:throw [0,Assert_failure,_ah_]; case 5:throw [0,Assert_failure,_ab_]; case 6:throw [0,Assert_failure,_ac_]; default:throw [0,Assert_failure,_ai_]}} function fmtty_rel_det(param) {if(typeof param === "number") {var _tp_=function(param){return 0}, _tq_=function(param){return 0}, _tr_=function(param){return 0}; return [0,function(param){return 0},_tr_,_tq_,_tp_]} 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], _ts_=function(param){caml_call1(af,0);return 0}; return [0,function(param){caml_call1(fa,0);return 0},_ts_,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], _tt_=function(param){caml_call1(af$0,0);return 0}; return [0, function(param){caml_call1(fa$0,0);return 0}, _tt_, 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], _tu_=function(param){caml_call1(af$1,0);return 0}; return [0, function(param){caml_call1(fa$1,0);return 0}, _tu_, 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], _tv_=function(param){caml_call1(af$2,0);return 0}; return [0, function(param){caml_call1(fa$2,0);return 0}, _tv_, 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], _tw_=function(param){caml_call1(af$3,0);return 0}; return [0, function(param){caml_call1(fa$3,0);return 0}, _tw_, 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], _tx_=function(param){caml_call1(af$4,0);return 0}; return [0, function(param){caml_call1(fa$4,0);return 0}, _tx_, 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], _ty_=function(param){caml_call1(af$5,0);return 0}; return [0, function(param){caml_call1(fa$5,0);return 0}, _ty_, 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], _tz_=function(param){caml_call1(af$6,0);return 0}; return [0, function(param){caml_call1(fa$6,0);return 0}, _tz_, 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], _tA_=function(param){caml_call1(af$7,0);return 0}; return [0, function(param){caml_call1(fa$7,0);return 0}, _tA_, 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], _tB_=function(param){caml_call1(jd,0);caml_call1(de$8,0);return 0}, _tC_=function(param){caml_call1(ed$8,0);caml_call1(dj,0);return 0}, _tD_=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}, _tD_, _tC_, _tB_]; 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], _tE_=function(param){caml_call1(af$9,0);return 0}; return [0, function(param){caml_call1(fa$9,0);return 0}, _tE_, 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], _tF_=function(param){caml_call1(af$10,0);return 0}; return [0, function(param){caml_call1(fa$10,0);return 0}, _tF_, 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], _tG_=function(param){caml_call1(af$11,0);return 0}; return [0, function(param){caml_call1(fa$11,0);return 0}, _tG_, 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], _tH_=function(param){caml_call1(de$12,0);return 0}, _tI_=function(param){caml_call1(ed$12,0);return 0}, _tJ_=function(param){caml_call1(af$12,0);return 0}; return [0, function(param){caml_call1(fa$12,0);return 0}, _tJ_, _tI_, _tH_]; 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], _tK_=function(param){caml_call1(de$13,0);return 0}, _tL_=function(param){caml_call1(ed$13,0);return 0}, _tM_=function(param){caml_call1(af$13,0);return 0}; return [0, function(param){caml_call1(fa$13,0);return 0}, _tM_, _tL_, _tK_]}} 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], _tn_=fmtty_of_fmt(rest$13); if(0 === fmting_gen[0]) var match=fmting_gen[1],fmt=match[1],_to_=fmtty_of_fmt(fmt); else var match$0=fmting_gen[1], fmt$0=match$0[1], _to_=fmtty_of_fmt(fmt$0); return concat_fmtty(_to_,_tn_); 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 _tm_=match[2]; if(typeof _tm_ !== "number" && 2 === _tm_[0]) {var rest=_tm_[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], _tk_=[0,erase_rel(sub1_fmtty)]; if(caml_notequal([0,erase_rel(sub1_fmtty$0)],_tk_)) throw Type_mismatch; var _tl_=[0,erase_rel(sub2_fmtty$1)]; if(caml_notequal([0,erase_rel(sub2_fmtty$2)],_tl_)) 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), _s5_=match$1[2], _s4_=match$1[1]; if(typeof _s5_ !== "number" && 1 === _s5_[0]) {var fmtty_rest$1=_s5_[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,_s4_,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), _s7_=match$3[2], _s6_=match$3[1]; if(typeof _s7_ !== "number" && 1 === _s7_[0]) {var fmtty_rest$2=_s7_[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,_s6_,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), _s9_=match$5[3], _s8_=match$5[1]; if(typeof _s9_ !== "number" && 2 === _s9_[0]) {var fmtty_rest$3=_s9_[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,_s8_,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), _s$_=match$7[3], _s__=match$7[1]; if(typeof _s$_ !== "number" && 3 === _s$_[0]) {var fmtty_rest$4=_s$_[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,_s__,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), _tb_=match$9[3], _ta_=match$9[1]; if(typeof _tb_ !== "number" && 4 === _tb_[0]) {var fmtty_rest$5=_tb_[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,_ta_,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), _td_=match$11[3], _tc_=match$11[1]; if(typeof _td_ !== "number" && 5 === _td_[0]) {var fmtty_rest$6=_td_[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,_tc_,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), _tf_=match$13[3], _te_=match$13[1]; if(typeof _tf_ !== "number" && 6 === _tf_[0]) {var fmtty_rest$7=_tf_[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,_te_,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), _th_=match$15[2], _tg_=match$15[1]; if(typeof _th_ !== "number" && 7 === _th_[0]) {var fmtty_rest$8=_th_[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,_tg_,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], _ti_=[0,erase_rel(sub_fmtty1)]; if(caml_notequal([0,erase_rel(sub_fmtty$1)],_ti_)) 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], _tj_=type_ignored_format_substituti(sub_fmtty$3,rest,fmtty), match$35=_tj_[2], fmtty$22=match$35[2], fmt$22=match$35[1], sub_fmtty$4=_tj_[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 _s3_=type_format_gen(fmt,fmtty); if(typeof _s3_[2] === "number"){var fmt$0=_s3_[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 _s2_=2 === padty$0?48:32,res=make$0(width$0,_s2_); 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) >>> 0))switch$0 = 1} else if(65 <= c)switch$0 = 1} else {var switch$1=0; if(32 !== c) if(43 <= c) {var switcher=c - 43 | 0; switch(switcher) {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(_aq_,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],_sX_=caml_ml_string_length(s) - 1 | 0,_sW_=0; if(! (_sX_ < 0)) {var i$0=_sW_; for(;;) {var match=caml_string_unsafe_get(s,i$0),switcher$0=match - 48 | 0; if(! (9 < switcher$0 >>> 0))n[1]++; var _s1_=i$0 + 1 | 0; if(_sX_ !== i$0){var i$0=_s1_;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], _sZ_=caml_ml_string_length(s) - 1 | 0, _sY_=0; if(! (_sZ_ < 0)) {var i=_sY_; for(;;) {var c=caml_string_unsafe_get(s,i),switcher=c - 48 | 0; if(9 < switcher >>> 0) put(c); else {if(0 === left[1]){put(95);left[1] = 3}left[1] += -1;put(c)} var _s0_=i + 1 | 0; if(_sZ_ !== i){var i=_s0_;continue} break}} return caml_string_of_bytes(buf)} return s} function convert_int(iconv,n) {switch(iconv) {case 1:var _sV_=cst_d$3;break; case 2:var _sV_=cst_d$4;break; case 4:var _sV_=cst_i$1;break; case 5:var _sV_=cst_i$2;break; case 6:var _sV_=cst_x;break; case 7:var _sV_=cst_x$0;break; case 8:var _sV_=cst_X$0;break; case 9:var _sV_=cst_X$1;break; case 10:var _sV_=cst_o;break; case 11:var _sV_=cst_o$0;break; case 0: case 13:var _sV_=cst_d$2;break; case 3: case 14:var _sV_=cst_i$0;break; default:var _sV_=cst_u} return transform_int_alt(iconv,caml_format_int(_sV_,n))} function convert_int32(iconv,n) {switch(iconv) {case 1:var _sU_=cst_ld$0;break; case 2:var _sU_=cst_ld$1;break; case 4:var _sU_=cst_li$1;break; case 5:var _sU_=cst_li$2;break; case 6:var _sU_=cst_lx;break; case 7:var _sU_=cst_lx$0;break; case 8:var _sU_=cst_lX;break; case 9:var _sU_=cst_lX$0;break; case 10:var _sU_=cst_lo;break; case 11:var _sU_=cst_lo$0;break; case 0: case 13:var _sU_=cst_ld;break; case 3: case 14:var _sU_=cst_li$0;break; default:var _sU_=cst_lu} return transform_int_alt(iconv,caml_format_int(_sU_,n))} function convert_nativeint(iconv,n) {switch(iconv) {case 1:var _sT_=cst_nd$0;break; case 2:var _sT_=cst_nd$1;break; case 4:var _sT_=cst_ni$1;break; case 5:var _sT_=cst_ni$2;break; case 6:var _sT_=cst_nx;break; case 7:var _sT_=cst_nx$0;break; case 8:var _sT_=cst_nX;break; case 9:var _sT_=cst_nX$0;break; case 10:var _sT_=cst_no;break; case 11:var _sT_=cst_no$0;break; case 0: case 13:var _sT_=cst_nd;break; case 3: case 14:var _sT_=cst_ni$0;break; default:var _sT_=cst_nu} return transform_int_alt(iconv,caml_format_int(_sT_,n))} function convert_int64(iconv,n) {switch(iconv) {case 1:var _sS_=cst_Ld$0;break; case 2:var _sS_=cst_Ld$1;break; case 4:var _sS_=cst_Li$1;break; case 5:var _sS_=cst_Li$2;break; case 6:var _sS_=cst_Lx;break; case 7:var _sS_=cst_Lx$0;break; case 8:var _sS_=cst_LX;break; case 9:var _sS_=cst_LX$0;break; case 10:var _sS_=cst_Lo;break; case 11:var _sS_=cst_Lo$0;break; case 0: case 13:var _sS_=cst_Ld;break; case 3: case 14:var _sS_=cst_Li$0;break; default:var _sS_=cst_Lu} return transform_int_alt(iconv,caml_int64_format(_sS_,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 _sQ_=0; else {var match=caml_string_get(str,i),_sP_=match - 46 | 0,switch$0=0; if(23 < _sP_ >>> 0) {if(55 === _sP_)switch$0 = 1} else if(21 < (_sP_ - 1 | 0) >>> 0)switch$0 = 1; if(! switch$0){var i$0=i + 1 | 0,i=i$0;continue} var _sQ_=1} var _sR_=_sQ_?str:cat(str,cst$29); return caml_special_val(_sR_)} 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 _sM_=pad$5[2],_sN_=pad$5[1]; if(typeof prec$3 === "number") return prec$3 ?function(p,x) {var str=fix_padding(_sN_,_sM_,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(_sN_,_sM_,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(_sN_,_sM_,convert_float(fconv,p$0,x)); return make_printf(k$0,[4,acc$0,str],rest$7)}} var _sO_=pad$5[1]; if(typeof prec$3 === "number") return prec$3 ?function(w,p,x) {var str=fix_padding(_sO_,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(_sO_,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(_sO_,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 _sK_=fmt$0[1]; if(0 === _sK_[0]) {var rest$13=fmt$0[2], match=_sK_[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=_sK_[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,_ar_]; 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], _sL_=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,_sL_)} return caml_trampoline_return (make_custom$0,[0,k$0,acc$0,rest$19,arity,_sL_])}} 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,_as_]; 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,_sJ_) {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,_at_]; default:throw [0,Assert_failure,_au_]}} function make_invalid_arg(counter,k,acc,fmt) {var _sI_=[8,acc,cst_Printf_bad_conversion$0]; if(counter < 50) {var counter$0=counter + 1 | 0; return make_printf$0(counter$0,k,_sI_,fmt)} return caml_trampoline_return(make_printf$0,[0,k,_sI_,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 _sH_=[4,acc,f]; if(counter < 50) {var counter$0=counter + 1 | 0; return make_printf$0(counter$0,k,_sH_,rest)} return caml_trampoline_return(make_printf$0,[0,k,_sH_,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 _sE_=pad[2],_sF_=pad[1]; if(typeof prec === "number") return prec ?function(p,x) {var str= fix_padding (_sF_,_sE_,fix_int_precision(p,caml_call2(trans,iconv,x))); return make_printf(k,[4,acc,str],fmt)} :function(x) {var str=fix_padding(_sF_,_sE_,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 (_sF_,_sE_,fix_int_precision(p$0,caml_call2(trans,iconv,x))); return make_printf(k,[4,acc,str],fmt)}} var _sG_=pad[1]; if(typeof prec === "number") return prec ?function(w,p,x) {var str= fix_padding (_sG_,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(_sG_,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 (_sG_,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],_rV_=make_iprintf(k$0,o,rest); return function(_sD_){return _rV_}; case 1: var rest$0=fmt$0[1],_rW_=make_iprintf(k$0,o,rest$0); return function(_sC_){return _rW_}; case 2: var _rX_=fmt$0[1]; if(typeof _rX_ === "number") {var rest$1=fmt$0[2],_rY_=make_iprintf(k$0,o,rest$1); return function(_sy_){return _rY_}} else {if(0 === _rX_[0]) {var rest$2=fmt$0[2],_rZ_=make_iprintf(k$0,o,rest$2); return function(_sB_){return _rZ_}} var rest$3=fmt$0[2], _r0_=make_iprintf(k$0,o,rest$3), _r1_=function(_sA_){return _r0_}; return function(_sz_){return _r1_}} case 3: var _r2_=fmt$0[1]; if(typeof _r2_ === "number") {var rest$4=fmt$0[2],_r3_=make_iprintf(k$0,o,rest$4); return function(_su_){return _r3_}} else {if(0 === _r2_[0]) {var rest$5=fmt$0[2],_r4_=make_iprintf(k$0,o,rest$5); return function(_sx_){return _r4_}} var rest$6=fmt$0[2], _r5_=make_iprintf(k$0,o,rest$6), _r6_=function(_sw_){return _r5_}; return function(_sv_){return _r6_}} 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 _r7_=fmt$0[1]; if(typeof _r7_ === "number") {var rest$12=fmt$0[2],_r8_=make_iprintf(k$0,o,rest$12); return function(_sq_){return _r8_}} else {if(0 === _r7_[0]) {var rest$13=fmt$0[2],_r9_=make_iprintf(k$0,o,rest$13); return function(_st_){return _r9_}} var rest$14=fmt$0[2], _r__=make_iprintf(k$0,o,rest$14), _r$_=function(_ss_){return _r__}; return function(_sr_){return _r$_}} 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],_sa_=make_iprintf(k$0,o,rest$15); return function(_sp_){return _sa_}; 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], _sb_=make_iprintf(k$0,o,rest$17), _sc_=function(_so_){return _sb_}; return function(_sn_){return _sc_}; case 16: var rest$18=fmt$0[1],_sd_=make_iprintf(k$0,o,rest$18); return function(_sm_){return _sd_}; case 17:var fmt$4=fmt$0[2],fmt$0=fmt$4;continue; case 18: var _se_=fmt$0[1]; if(0 === _se_[0]) {var rest$19=fmt$0[2], match=_se_[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=_se_[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,_av_]; case 20: var rest$21=fmt$0[3],_sf_=make_iprintf(k$0,o,rest$21); return function(_sl_){return _sf_}; case 21: var rest$22=fmt$0[2],_sg_=make_iprintf(k$0,o,rest$22); return function(_sk_){return _sg_}; case 22: var rest$23=fmt$0[1],_sh_=make_iprintf(k$0,o,rest$23); return function(_sj_){return _sh_}; case 23: var rest$24=fmt$0[2],ign=fmt$0[1],_si_=0; return make_ignored_param (function(param){return caml_call1(k$0,o)},_si_,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],_rT_=fn_of_custom_arity(k,o,fmt,arity); return function(_rU_){return _rT_}} 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 _rp_=make_iprintf(k,o,fmt),_rq_=function(_rH_){return _rp_}; return function(_rG_){return _rq_}} var _rr_=make_iprintf(k,o,fmt); return function(_rF_){return _rr_}} var _rs_=make_iprintf(k,o,fmt); return function(_rE_){return _rs_}} else {if(0 === pad[0]) {if(typeof prec === "number") {if(prec) {var _rt_=make_iprintf(k,o,fmt),_ru_=function(_rS_){return _rt_}; return function(_rR_){return _ru_}} var _rv_=make_iprintf(k,o,fmt); return function(_rQ_){return _rv_}} var _rw_=make_iprintf(k,o,fmt); return function(_rP_){return _rw_}} if(typeof prec === "number") {if(prec) {var _rx_=make_iprintf(k,o,fmt), _ry_=function(_rO_){return _rx_}, _rz_=function(_rN_){return _ry_}; return function(_rM_){return _rz_}} var _rA_=make_iprintf(k,o,fmt),_rB_=function(_rL_){return _rA_}; return function(_rK_){return _rB_}} var _rC_=make_iprintf(k,o,fmt),_rD_=function(_rJ_){return _rC_}; return function(_rI_){return _rD_}}} 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 _rn_=acc$0[2],_ro_=acc$0[1]; if(0 === _rn_[0]) {var acc$1=_rn_[1]; output_acc(o,_ro_); output_string(o,cst$30); var acc$0=acc$1; continue} var acc$2=_rn_[1]; output_acc(o,_ro_); 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 _rl_=acc$0[2],_rm_=acc$0[1]; if(0 === _rl_[0]) {var acc$1=_rl_[1]; bufput_acc(b,_rm_); add_string(b,cst$32); var acc$0=acc$1; continue} var acc$2=_rl_[1]; bufput_acc(b,_rm_); 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 _rj_=acc$0[2],_rk_=acc$0[1]; if(0 === _rj_[0]) {var acc$1=_rj_[1]; strput_acc(b,_rk_); add_string(b,cst$34); var acc$0=acc$1; continue} var acc$2=_rj_[1]; strput_acc(b,_rk_); 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 _aw_; var len=caml_ml_string_length(str); function invalid_box(param) {return caml_call1(failwith_message(_ax_),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),switcher=match - 97 | 0; if(25 < switcher >>> 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 _rh_=caml_int_of_string(sub$0(str,nstart,nend - nstart | 0)), indent=_rh_} catch(_ri_) {_ri_ = caml_wrap_exception(_ri_); if(_ri_[1] !== Failure)throw _ri_; 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(_ay_),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(_az_),str,str_ind,c,s)} function expected_character(str_ind,expected,read) {return caml_call4(failwith_message(_aA_),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),switcher=c - 48 | 0; if(9 < switcher >>> 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(_aR_),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),switcher=c - 48 | 0; if(9 < switcher >>> 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,_aS_]} 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(_aX_),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,_aV_]}} 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(_aT_),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)) {var switcher=match$0 - 123 | 0; switch(switcher) {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), _rf_=[0,[0,str_ind_3 + 1 | 0,[1,s,size]]]} else var _rf_=0; var _re_=_rf_} catch(_rg_) {_rg_ = caml_wrap_exception(_rg_); if(_rg_ !== Not_found && _rg_[1] !== Failure)throw _rg_; var _re_=0} if(_re_) {var match=_re_[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,_aP_,fmt_rest$0]]} function parse_good_break(str_ind,end_ind) {try {var _q9_=str_ind === end_ind?1:0, _q__=_q9_ || (60 !== caml_string_get(str,str_ind)?1:0); if(_q__)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), _q$_=[0,s,width,0], _ra_=str_ind_3 + 1 | 0, formatting_lit$0=_q$_, next_ind=_ra_; else switch$1 = 1; else {var switcher$0=switcher - 1 | 0; if(1 < switcher$0 >>> 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), _rb_=[0,s$0,width,offset], _rc_=str_ind_5 + 1 | 0, formatting_lit$0=_rb_, next_ind=_rc_} else switch$1 = 1} if(switch$1)throw Not_found} catch(_rd_) {_rd_ = caml_wrap_exception(_rd_); if(_rd_ !== Not_found && _rd_[1] !== Failure)throw _rd_; 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], _q7_=[0,[18,formatting$0,fmt_rest$0]]; return _q7_} throw Not_found} catch(_q8_) {_q8_ = caml_wrap_exception(_q8_); if(_q8_ === 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 _q8_}} 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 _q4_=flag[1],_q5_=_q4_?1 - legacy_behavior$0:_q4_; if(_q5_) {var _q6_=caml_string_get(str,str_ind); caml_call3(failwith_message(_aB_),str,str_ind,_q6_)} 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 _qZ_=space[1], _q0_=hash[1], _q1_=plus[1], _q2_=minus[1], _q3_=zero[1]; if(str_ind$0 === end_ind)unexpected_end_of_format(end_ind); var padty= _q3_ ?_q2_ ?legacy_behavior$0 ?0 :incompatible_flag(pct_ind,str_ind$0,45,cst_0) :2 :_q2_?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, _q2_, _q1_, _q0_, _qZ_, ign, [0,padty,width])}} else if(42 === match$0) return parse_after_padding (pct_ind, str_ind$0 + 1 | 0, end_ind, _q2_, _q1_, _q0_, _qZ_, 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,_q2_,_q1_,_q0_,_qZ_,ign,0); case 1: return parse_after_padding (pct_ind,str_ind$0,end_ind,_q2_,_q1_,_q0_,_qZ_,ign,0); default: return parse_after_padding (pct_ind,str_ind$0,end_ind,_q2_,_q1_,_q0_,_qZ_,ign,_aC_)}}} 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) {var switcher=symb$0 - 42 | 0; switch(switcher) {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 _qY_=str_ind$0 + 1 | 0, minus$0=minus || (45 === symb$0?1:0); return parse_literal(minus$0,_qY_)} break }} return legacy_behavior$0 ?parse_after_precision (pct_ind, str_ind$0, end_ind, minus, plus, hash, space, ign, pad, _aD_) :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(_aE_); var n=prec[1]; return parse_conv([0,0,n])} if(typeof prec === "number")return parse_conv(_aF_); 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 ?_aG_ :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 ?_aH_ :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], _qv_=[0,[23,ignored$2,fmt_rest$7]]; else var _qv_=[0,[14,get_pad_opt(40),sub_fmtty,fmt_rest$7]]; var fmt_result=_qv_; 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], _qx_=get_ign(0)?[0,[23,1,fmt_rest$10]]:[0,[1,fmt_rest$10]], fmt_result=_qx_; 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],_qD_=[0,[23,ignored$6,fmt_rest$14]]; else var _qD_=[0,[21,counter$0,fmt_rest$14]]; var fmt_result=_qD_; 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)], _qE_=[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], _qE_=[0,[3,pad$7,fmt_rest$16]]; var fmt_result=_qE_; 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 _qX_=i + 1 | 0; if(c !== i){var i=_qX_;continue} break}} return 0}, fail_single_percent= function(str_ind) {return caml_call2(failwith_message(_aQ_),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 _qW_=str_ind$0 + 1 | 0; if(counter < 50) {var counter$0=counter + 1 | 0; return parse_char_set_after_char$0(counter$0,_qW_,end_ind,c)} return caml_trampoline_return (parse_char_set_after_char$0,[0,_qW_,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 _qU_=str_ind$2 + 2 | 0; if(counter < 50) {var counter$2=counter + 1 | 0; return parse_char_set_content(counter$2,_qU_,end_ind)} return caml_trampoline_return (parse_char_set_content,[0,_qU_,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 _qV_=str_ind$2 + 1 | 0; if(counter < 50) {var counter$1=counter + 1 | 0; return parse_char_set_content(counter$1,_qV_,end_ind)} return caml_trampoline_return (parse_char_set_content,[0,_qV_,end_ind])} if(switch$0 && 37 === c$0) {add_char(c$1); var _qT_=str_ind$0 + 1 | 0; if(counter < 50) {var counter$0=counter + 1 | 0; return parse_char_set_content(counter$0,_qT_,end_ind)} return caml_trampoline_return (parse_char_set_content,[0,_qT_,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], _qJ_=[0,[23,ignored$9,fmt_rest$19]]; else var _qJ_=[0,[20,get_pad_opt(91),char_set$1,fmt_rest$19]]; var fmt_result=_qJ_; 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 _qK_=get_ign(0)?[0,[23,3,fmt_rest$21]]:[0,[22,fmt_rest$21]], _qL_=_qK_; else var _qL_= legacy_behavior$0 ?char_format(fmt_rest$21) :invalid_format_message (str_ind,cst_non_zero_widths_are_unsupp); var _qM_=_qL_} else var _qM_=char_format(fmt_rest$21); var fmt_result=_qM_; break; case 114: var match$25=parse(str_ind,end_ind), fmt_rest$22=match$25[1], _qN_=get_ign(0)?[0,[23,2,fmt_rest$22]]:[0,[19,fmt_rest$22]], fmt_result=_qN_; 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)], _qO_=[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], _qO_=[0,[2,pad$10,fmt_rest$24]]; var fmt_result=_qO_; 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], _qP_=[0,[23,ignored$11,fmt_rest$26]]; else var _qP_=[0,[13,get_pad_opt(123),sub_fmtty$0,fmt_rest$26]]; var fmt_result=_qP_; 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)], _qw_=[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], _qw_=[0,[9,pad$4,fmt_rest$9]]; var fmt_result=_qw_; 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), _qQ_=symb$0 - 88 | 0, switch$2=0; if(! (32 < _qQ_ >>> 0)) switch(_qQ_) {case 0: case 12: case 17: case 23: case 29: case 32:var _qC_=1;switch$2 = 1;break } if(! switch$2)var _qC_=0; if(_qC_){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)) {var switcher$0=symb - 108 | 0; switch(switcher$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,_aU_]; if(get_ign(0)) var ignored$5=[11,counter],_qB_=[0,[23,ignored$5,fmt_rest$13]]; else var _qB_=[0,[21,counter,fmt_rest$13]]; var fmt_result=_qB_} break; case 32: case 35: case 43: case 45: case 95: var fmt_result= caml_call3(failwith_message(_aL_),str,pct_ind,symb); break; case 88: case 100: case 105: case 111: case 117: case 120: var _qF_=get_space(0), _qG_=get_hash(0), iconv$2= compute_int_conv(pct_ind,str_ind,get_plus(0),_qG_,_qF_,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)], _qH_=[0,[23,ignored$8,fmt_rest$17]]; else var _qI_=get_prec(0), match$20=make_padprec_fmt_ebb(get_int_pad(0),_qI_,fmt_rest$17), fmt_rest$18=match$20[3], prec$4=match$20[2], pad$8=match$20[1], _qH_=[0,[4,iconv$2,pad$8,prec$4,fmt_rest$18]]; var fmt_result=_qH_; 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$1=symb - 101 | 0; if(3 < switcher$1 >>> 0) switch$4 = 1; else {switch(switcher$1) {case 0:var _qR_=1;break; case 1:var _qR_=0;break; case 2:var _qR_=3;break; default:var _qR_=6} var kind=_qR_}} else if(69 <= symb) {var switcher$2=symb - 69 | 0,switch$5=0; switch(switcher$2) {case 0:var _qS_=2;break; case 1:switch$4 = 1;switch$5 = 1;break; case 2:var _qS_=4;break; default:var _qS_=7} if(! switch$5)var kind=_qS_} 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,_aW_]} 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 _qy_=match?incompatible_flag(pct_ind,str_ind,95,cst$40):0; else var ndec=match[1],_qy_=[0,ndec]; var ignored$4=[6,get_pad_opt(95),_qy_], _qz_=[0,[23,ignored$4,fmt_rest$11]]} else var _qA_=get_prec(0), match$14=make_padprec_fmt_ebb(get_pad(0),_qA_,fmt_rest$11), fmt_rest$12=match$14[3], prec$3=match$14[2], pad$5=match$14[1], _qz_=[0,[8,fconv,pad$5,prec$3,fmt_rest$12]]; var fmt_result=_qz_; break; default:switch$0 = 1} if(switch$0) {var switch$7=0; if(108 <= symb) if(111 <= symb) switch$7 = 1; else {var switcher=symb - 108 | 0,switch$8=0; switch(switcher) {case 0: var _qf_=caml_string_get(str,str_ind), _qg_=get_space(0), _qh_=get_hash(0), iconv= compute_int_conv (pct_ind,str_ind + 1 | 0,get_plus(0),_qh_,_qg_,_qf_), 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)], _qi_=[0,[23,ignored,fmt_rest]]; else var _qk_=get_prec(0), match$1=make_padprec_fmt_ebb(get_int_pad(0),_qk_,fmt_rest), fmt_rest$0=match$1[3], prec$0=match$1[2], pad$0=match$1[1], _qi_=[0,[5,iconv,pad$0,prec$0,fmt_rest$0]]; var _qj_=_qi_; break; case 1:switch$7 = 1;switch$8 = 1;break; default: var _ql_=caml_string_get(str,str_ind), _qm_=get_space(0), _qn_=get_hash(0), iconv$0= compute_int_conv (pct_ind,str_ind + 1 | 0,get_plus(0),_qn_,_qm_,_ql_), 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)], _qo_=[0,[23,ignored$0,fmt_rest$1]]; else var _qp_=get_prec(0), match$3=make_padprec_fmt_ebb(get_int_pad(0),_qp_,fmt_rest$1), fmt_rest$2=match$3[3], prec$1=match$3[2], pad$1=match$3[1], _qo_=[0,[6,iconv$0,pad$1,prec$1,fmt_rest$2]]; var _qj_=_qo_} if(! switch$8)var fmt_result=_qj_} else if(76 === symb) {var _qq_=caml_string_get(str,str_ind), _qr_=get_space(0), _qs_=get_hash(0), iconv$1= compute_int_conv (pct_ind,str_ind + 1 | 0,get_plus(0),_qs_,_qr_,_qq_), 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)], _qt_=[0,[23,ignored$1,fmt_rest$3]]; else var _qu_=get_prec(0), match$5=make_padprec_fmt_ebb(get_int_pad(0),_qu_,fmt_rest$3), fmt_rest$4=match$5[3], prec$2=match$5[2], pad$2=match$5[1], _qt_=[0,[7,iconv$1,pad$2,prec$2,fmt_rest$4]]; var fmt_result=_qt_} else switch$7 = 1; if(switch$7) var fmt_result= caml_call3(failwith_message(_aI_),str,str_ind - 1 | 0,symb)} if(1 - legacy_behavior$0) {var _p8_=1 - plus_used[1],plus$0=_p8_?plus:_p8_; if(plus$0)incompatible_flag(pct_ind,str_ind,symb,cst$41); var _p9_=1 - hash_used[1],hash$0=_p9_?hash:_p9_; if(hash$0)incompatible_flag(pct_ind,str_ind,symb,cst$42); var _p__=1 - space_used[1],space$0=_p__?space:_p__; if(space$0)incompatible_flag(pct_ind,str_ind,symb,cst$43); var _p$_=1 - pad_used[1],_qa_=_p$_?caml_notequal([0,pad],_aJ_):_p$_; if(_qa_)incompatible_flag(pct_ind,str_ind,symb,cst_padding$0); var _qb_=1 - prec_used[1], _qc_=_qb_?caml_notequal([0,prec],_aK_):_qb_; if(_qc_) {var _qd_=ign?95:symb; incompatible_flag(pct_ind,str_ind,_qd_,cst_precision$2)} var plus$1=ign?plus:ign; if(plus$1)incompatible_flag(pct_ind,str_ind,95,cst$44)} var _qe_=1 - ign_used[1],ign$0=_qe_?ign:_qe_; 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), _p7_= 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=_p7_[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=_aM_; 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) {var switcher$0=c - 91 | 0; switch(switcher$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) {var switcher$1=c - 32 | 0; switch(switcher$1) {case 0: var match$6=parse(str_ind$0 + 1 | 0,end_ind), fmt_rest$5=match$6[1], match$0=[0,[17,_aN_,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,_aO_,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 _p5_=[0,type_format(fmt,fmtty),str];return _p5_} catch(_p6_) {_p6_ = caml_wrap_exception(_p6_); if(_p6_ === Type_mismatch) {var _p4_=string_of_fmtty(fmtty); return caml_call2(failwith_message(_aY_),str,_p4_)} throw _p6_}} 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 _p2_=[0,type_format(fmt$0,fmtty_of_fmt(fmt)),str];return _p2_} catch(_p3_) {_p3_ = caml_wrap_exception(_p3_); if(_p3_ === Type_mismatch) return caml_call2(failwith_message(_aZ_),str,str$0); throw _p3_}} 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(791,CamlinternalFormat,"CamlinternalFormat"); function kfprintf(k,o,param) {var fmt=param[1],_p1_=0; return make_printf (function(acc){output_acc(o,acc);return caml_call1(k,o)}, _p1_, fmt)} function kbprintf(k,b,param) {var fmt=param[1],_p0_=0; return make_printf (function(acc){bufput_acc(b,acc);return caml_call1(k,b)}, _p0_, fmt)} function ikfprintf(k,oc,param) {var fmt=param[1];return make_iprintf(k,oc,fmt)} function fprintf(oc,fmt){return kfprintf(function(_pZ_){return 0},oc,fmt)} function bprintf(b,fmt){return kbprintf(function(_pY_){return 0},b,fmt)} function ifprintf(oc,fmt) {return ikfprintf(function(_pX_){return 0},oc,fmt)} function ibprintf(b,fmt){return ikfprintf(function(_pW_){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(792,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), _pV_=sub$0(s,i + 1 | 0,len - (i + 1 | 0) | 0); return [0,sub$0(s,0,i),_pV_]} function make_symlist(prefix,sep,suffix,l) {if(l) {var t=l[2],h=l[1],_pU_=cat(prefix,h); return cat (fold_left$0(function(x,y){return cat(x,cat(sep,y))},_pU_,t), suffix)} return cst_none} function help_action(param){throw [0,Stop,_a2_]} function add_help(speclist) {try {assoc3(cst_help$2,speclist);var _pR_=0,_pP_=_pR_} catch(_pT_) {_pT_ = caml_wrap_exception(_pT_); if(_pT_ !== Not_found)throw _pT_; var _pP_= [0,[0,cst_help,[0,help_action],cst_Display_this_list_of_optio],0]} try {assoc3(cst_help$1,speclist);var _pQ_=0,add2=_pQ_} catch(_pS_) {_pS_ = caml_wrap_exception(_pS_); if(_pS_ !== Not_found)throw _pS_; var add2= [0, [0,cst_help$0,[0,help_action],cst_Display_this_list_of_optio$0], 0]} return append(speclist,append(_pP_,add2))} function usage_b(buf,speclist,errmsg) {caml_call1(bprintf(buf,_a3_),errmsg); var _pM_=add_help(speclist); return iter$2 (function(param) {var doc=param[3], spec=param[2], key=param[1], _pN_=0 < caml_ml_string_length(doc)?1:0; if(_pN_) {if(11 === spec[0]) {var l=spec[1],_pO_=make_symlist(cst$53,cst$52,cst$51,l); return caml_call3(bprintf(buf,_a1_),key,_pO_,doc)} return caml_call2(bprintf(buf,_a0_),key,doc)} return _pN_}, _pM_)} function usage_string(speclist,errmsg) {var b=create$2(200);usage_b(b,speclist,errmsg);return contents(b)} function usage(speclist,errmsg) {var _pL_=usage_string(speclist,errmsg); return caml_call1(eprintf(_a4_),_pL_)} var current=[0,0]; function bool_of_string_opt$0(x) {try {var _pJ_=[0,bool_of_string(x)];return _pJ_} catch(_pK_) {_pK_ = caml_wrap_exception(_pK_); if(_pK_[1] === Invalid_argument)return 0; throw _pK_}} function int_of_string_opt$0(x) {try {var _pH_=[0,caml_int_of_string(x)];return _pH_} catch(_pI_) {_pI_ = caml_wrap_exception(_pI_); if(_pI_[1] === Failure)return 0; throw _pI_}} function float_of_string_opt(x) {try {var _pF_=[0,caml_float_of_string(x)];return _pF_} catch(_pG_) {_pG_ = caml_wrap_exception(_pG_); if(_pG_[1] === Failure)return 0; throw _pG_}} 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 _pE_=error[1]; if (caml_string_notequal(_pE_,cst_help$3) && caml_string_notequal(_pE_,cst_help$4)) caml_call2(bprintf(b,_a5_),progname,_pE_); break; case 1: var expected=error[3],arg=error[2],opt=error[1]; caml_call4(bprintf(b,_a8_),progname,arg,opt,expected); break; case 2:var s=error[1];caml_call2(bprintf(b,_a9_),progname,s);break; default:var s$0=error[1];caml_call2(bprintf(b,_a__),progname,s$0)} usage_b(b,speclist[1],errmsg); if(! caml_equal(error,_a6_) && ! caml_equal(error,_a7_)) return [0,Bad,contents(b)]; return [0,Help,contents(b)]} current[1]++; for(;;) {if(current[1] < argv[1].length - 1) {try {var _pt_=current[1], s=caml_check_bound(argv[1],_pt_)[1 + _pt_], switch$0=0; if(1 <= caml_ml_string_length(s) && 45 === caml_string_get(s,0)) {try {var follow$1=0, _pv_=assoc3(s,speclist[1]), follow$0=follow$1, action=_pv_} catch(_pC_) {_pC_ = caml_wrap_exception(_pC_); if(_pC_ !== Not_found)throw _pC_; try {var match=split$1(s), arg=match[2], keyword=match[1], follow=[0,arg], _pu_=assoc3(keyword,speclist[1])} catch(_pD_) {_pD_ = caml_wrap_exception(_pD_); if(_pD_ === Not_found)throw [0,Stop,[0,s]]; throw _pD_; var _pw_=_pD_} var follow$0=follow,action=_pu_,_px_=_pC_} 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 _pB_=current[1] + 1 | 0; return caml_check_bound(argv[1],_pB_)[1 + _pB_]} 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 _py_=current[1] + 1 | 0; caml_call1(f$5,caml_check_bound(argv[1],_py_)[1 + _py_]); 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 _pA_=current[1] + 1 | 0,_pz_=acc[1]; acc[1] = [0,caml_check_bound(argv[1],_pA_)[1 + _pA_],_pz_]; 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 _ps_=parse_argv(0,caml_sys_argv(0),l,f,msg);return _ps_} catch(exn) {exn = caml_wrap_exception(exn); if(exn[1] === Bad) {var msg$0=exn[2];caml_call1(eprintf(_a$_),msg$0);return exit(2)} if(exn[1] === Help) {var msg$1=exn[2];caml_call1(printf(_ba_),msg$1);return exit(0)} throw exn}} function parse_dynamic(l,f,msg) {try {var _pr_=parse_argv_dynamic(0,caml_sys_argv(0),l,f,msg);return _pr_} catch(exn) {exn = caml_wrap_exception(exn); if(exn[1] === Bad) {var msg$0=exn[2];caml_call1(eprintf(_bb_),msg$0);return exit(2)} if(exn[1] === Help) {var msg$1=exn[2];caml_call1(printf(_bc_),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]], _pq_=parse_and_expand_argv_dynamic(current$0,argv,spec,f,msg); return _pq_} catch(exn) {exn = caml_wrap_exception(exn); if(exn[1] === Bad) {var msg$0=exn[2];caml_call1(eprintf(_bd_),msg$0);return exit(2)} if(exn[1] === Help) {var msg$1=exn[2];caml_call1(printf(_be_),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(_po_) {_po_ = caml_wrap_exception(_po_); if(_po_ === Not_found) {try {var n=index$0(s,32)} catch(_pp_) {_pp_ = caml_wrap_exception(_pp_); if(_pp_ === Not_found)return len; throw _pp_} return loop(n + 1 | 0)} throw _po_} 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$5 (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$3 (function(ksd) {var _pm_=ksd[1],_pn_=ksd[2]; if(caml_string_notequal(ksd[3],cst$58)) {if(11 === _pn_[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, _pm_, _pn_, 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(_pm_), 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,_pm_,spec,cat(prefix,cat(spaces,suffix))]} return [0,_pm_,spec,replace_leading_tab(msg)]} return ksd}, completed)} function read_aux(trim,sep,file) {var ic=open_in_bin(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 _pl_=sub$0(s,0,len - 1 | 0);switch$0 = 1} if(! switch$0)var _pl_=s; var word=_pl_} 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(_pk_) {_pk_ = caml_wrap_exception(_pk_); if(_pk_ === End_of_file) {if(0 < buf[2])stash(0); caml_ml_close_channel(ic); return of_list(rev(words[1]))} throw _pk_}} var _bf_=10,_bg_=1; function read_arg(_pj_){return read_aux(_bg_,_bf_,_pj_)} var _bh_=0,_bi_=0; function read_arg0(_pi_){return read_aux(_bi_,_bh_,_pi_)} function write_aux(sep,file,args) {var oc=open_out_bin(file); iter$5(function(s){return caml_call2(fprintf(oc,_bj_),s,sep)},args); return close_out(oc)} var _bk_=10; function write_arg(_pg_,_ph_){return write_aux(_bk_,_pg_,_ph_)} var _bl_=0; function write_arg0(_pe_,_pf_){return write_aux(_bl_,_pe_,_pf_)} 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(793,Stdlib_Arg,"Stdlib__Arg"); var Stdlib_Atomic= [0,make,get,set,exchange,compare_and_set,fetch_and_add,incr,decr]; caml_register_global(794,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(_bm_),f) :caml_obj_tag(f) === 253?to_string(f):cst$60 :caml_call1(sprintf(_bn_),f)} function other_fields(x,i) {if(x.length - 1 <= i)return cst$61; var _pc_=other_fields(x,i + 1 | 0),_pd_=field(x,i); return caml_call2(sprintf(_bo_),_pd_,_pc_)} 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(_pb_){} 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 _o9_=other_fields(x,2), _o__=field(x,1), _pa_=caml_call2(sprintf(_bp_),_o__,_o9_); else switch(match) {case 0:var _pa_=cst$62;break; case 1:var _pa_=cst$63;break; default:var _o$_=field(x,1),_pa_=caml_call1(sprintf(_bq_),_o$_)} return cat(constructor,_pa_)} 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 _o8_=caml_call1(fct,arg);return _o8_} catch(x) {x = caml_wrap_exception(x); var _o7_=to_string$6(x); caml_call1(eprintf(_br_),_o7_); caml_ml_flush(stderr); throw x}} function catch$0(fct,arg) {try {var _o6_=caml_call1(fct,arg);return _o6_} catch(x) {x = caml_wrap_exception(x); caml_ml_flush(stdout); var _o5_=to_string$6(x); caml_call1(eprintf(_bs_),_o5_); 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 _oX_=slot[5], _oY_=slot[4], _oZ_=slot[3], _o0_=slot[6]?cst_inlined:cst$64, _o1_=slot[2], _o2_=slot[7], _o3_=info(slot[1]); return [0, caml_call7(sprintf(_bt_),_o3_,_o2_,_o1_,_o0_,_oZ_,_oY_,_oX_)]} if(slot[1])return 0; var _o4_=info(0); return [0,caml_call1(sprintf(_bu_),_o4_)]} function print_raw_backtrace(outchan,raw_backtrace) {var backtrace=convert_raw_backtrace(raw_backtrace); if(backtrace) {var a=backtrace[1],_oV_=a.length - 1 - 1 | 0,_oU_=0; if(! (_oV_ < 0)) {var i=_oU_; for(;;) {var match=format_backtrace_slot(i,caml_check_bound(a,i)[1 + i]); if(match){var str=match[1];caml_call1(fprintf(outchan,_bv_),str)} var _oW_=i + 1 | 0; if(_oV_ !== i){var i=_oW_;continue} break}} return 0} return fprintf(outchan,_bw_)} 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),_oS_=a.length - 1 - 1 | 0,_oR_=0; if(! (_oS_ < 0)) {var i=_oR_; for(;;) {var match=format_backtrace_slot(i,caml_check_bound(a,i)[1 + i]); if(match){var str=match[1];caml_call1(bprintf(b,_bx_),str)} var _oT_=i + 1 | 0; if(_oS_ !== i){var i=_oT_;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 _oQ_=0; else {var param=caml_check_bound(backtrace,i)[1 + i], _oP_=0 === param[0]?1:0; if(! _oP_){var i$0=i - 1 | 0,i=i$0;continue} var _oQ_=_oP_} return _oQ_?[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), _oO_=1 - success; if(_oO_)continue; return _oO_}} 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=_by_.slice(); function default_uncaught_exception_han(exn,raw_backtrace) {var _oM_=to_string$6(exn); caml_call1(eprintf(_bz_),_oM_); print_raw_backtrace(stderr,raw_backtrace); var status=runtime.caml_ml_debug_info_status(0); if(status < 0) {var _oN_=abs(status); prerr_endline(caml_check_bound(errors,_oN_)[1 + _oN_])} 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(_oL_){} try {var _oH_=caml_call2(uncaught_exception_handler[1],exn,raw_backtrace), _oG_=_oH_} catch(exn$0) {exn$0 = caml_wrap_exception(exn$0); var raw_backtrace$0=caml_get_exception_raw_backtra(0), _oE_=to_string$6(exn); caml_call1(eprintf(_bA_),_oE_); print_raw_backtrace(stderr,raw_backtrace); var _oF_=to_string$6(exn$0); caml_call1(eprintf(_bB_),_oF_); print_raw_backtrace(stderr,raw_backtrace$0); var _oG_=caml_ml_flush(stderr)} var _oI_=_oG_} catch(_oK_) {_oK_ = caml_wrap_exception(_oK_); if(_oK_ !== Out_of_memory)throw _oK_; var _oI_=prerr_endline(cst_Fatal_error_out_of_memory_)} return _oI_} catch(_oJ_){return 0}} caml_register_named_value (caml_string_of_jsbytes("Printexc.handle_uncaught_exception"), handle_uncaught_exception); function _bC_(_oD_){return runtime.caml_raw_backtrace_next_slot(_oD_)} function _bD_(_oC_){return runtime.caml_convert_raw_backtrace_slot(_oC_)} function _bE_(_oB_,_oA_) {return runtime.caml_raw_backtrace_slot(_oB_,_oA_)} var _bF_= [0, backtrace_slot_is_raise, backtrace_slot_is_inline, backtrace_slot_location, backtrace_slot_defname, format_backtrace_slot]; function _bG_(_oz_){return caml_get_exception_raw_backtra(_oz_)} function _bH_(_oy_){return runtime.caml_backtrace_status(_oy_)} var Stdlib_Printexc= [0, to_string$6, to_string_default, print, catch$0, print_backtrace, get_backtrace, function(_ox_){return runtime.caml_record_backtrace(_ox_)}, _bH_, register_printer, use_printers, raw_backtrace_entries, _bG_, print_raw_backtrace, raw_backtrace_to_string, default_uncaught_exception_han, set_uncaught_exception_handler, backtrace_slots, backtrace_slots_of_raw_entry, _bF_, raw_backtrace_length, _bE_, _bD_, _bC_, exn_slot_id, exn_slot_name]; caml_register_global(795,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 _ow_=caml_call1(finally$0,0);return _ow_} 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(796,Stdlib_Fun,"Stdlib__Fun"); function print_stat(c) {var st=runtime.caml_gc_stat(0),_oe_=st[4]; caml_call1(fprintf(c,_bI_),_oe_); var _of_=st[5]; caml_call1(fprintf(c,_bJ_),_of_); var _og_=st[14]; caml_call1(fprintf(c,_bK_),_og_); var _oh_=st[17]; caml_call1(fprintf(c,_bL_),_oh_); fprintf(c,_bM_); var _oi_=st[1], l1=caml_ml_string_length(caml_call1(sprintf(_bN_),_oi_)), _oj_=st[1]; caml_call2(fprintf(c,_bO_),l1,_oj_); var _ok_=st[2]; caml_call2(fprintf(c,_bP_),l1,_ok_); var _ol_=st[3]; caml_call2(fprintf(c,_bQ_),l1,_ol_); fprintf(c,_bR_); var _om_=st[15], l2=caml_ml_string_length(caml_call1(sprintf(_bS_),_om_)), _on_=st[15]; caml_call2(fprintf(c,_bT_),l2,_on_); var _oo_=st[6]; caml_call2(fprintf(c,_bU_),l2,_oo_); var _op_=st[8]; caml_call2(fprintf(c,_bV_),l2,_op_); var _oq_=st[10]; caml_call2(fprintf(c,_bW_),l2,_oq_); var _or_=st[12]; caml_call2(fprintf(c,_bX_),l2,_or_); var _os_=st[13]; caml_call2(fprintf(c,_bY_),l2,_os_); fprintf(c,_bZ_); var _ot_=st[9]; caml_call1(fprintf(c,_b0_),_ot_); var _ou_=st[11]; caml_call1(fprintf(c,_b1_),_ou_); var _ov_=st[7]; return caml_call1(fprintf(c,_b2_),_ov_)} 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 _b3_(param){return 0} function _b4_(param){return 0} function _b5_(param){return 0} function _b6_(param){return 0} var null_tracker=[0,function(param){return 0},_b6_,_b5_,_b4_,_b3_]; 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 _b7_=[0,null_tracker,start,runtime.caml_memprof_stop]; function _b8_(_od_){return runtime.caml_final_release(_od_)} function _b9_(_oc_,_ob_) {return runtime.caml_final_register_called_without_value(_oc_,_ob_)} var Stdlib_Gc= [0, print_stat, allocated_bytes, function(_oa_,_n$_){return runtime.caml_final_register(_oa_,_n$_)}, _b9_, _b8_, create_alarm, delete_alarm, _b7_]; caml_register_global(797,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_in_bin(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 _n__=10 <= n?87:48;return n + _n__ | 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 _n9_=i + 1 | 0; if(15 !== i){var i=_n9_;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 {var switcher=c - 48 | 0;if(! (9 < switcher >>> 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,_n7_=digit(caml_string_get(s,i$0 + 1 | 0)); caml_bytes_set (result,i,chr((digit(caml_string_get(s,i$0)) << 4) + _n7_ | 0)); var _n8_=i + 1 | 0; if(15 !== i){var i=_n8_;continue} return caml_string_of_bytes(result)}} var Stdlib_Digest= [0, compare$8, equal$8, string, bytes, substring, subbytes, file, output$0, input$0, to_hex, from_hex]; caml_register_global(798,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 _n6_=i$0 + 1 | 0; if(54 !== i$0){var i$0=_n6_;continue} var accu=[0,cst_x$1],_n2_=54 + max$1(55,l) | 0,_n1_=0; if(! (_n2_ < 0)) {var i=_n1_; 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 _n3_=accu[1], _nX_=caml_string_get(_n3_,3) << 24, _nY_=caml_string_get(_n3_,2) << 16, _nZ_=caml_string_get(_n3_,1) << 8, _n0_=((caml_string_get(_n3_,0) + _nZ_ | 0) + _nY_ | 0) + _nX_ | 0, _n4_=(caml_check_bound(s[1],j)[1 + j] ^ _n0_) & 1073741823; caml_check_bound(s[1],j)[1 + j] = _n4_; var _n5_=i + 1 | 0; if(_n2_ !== i){var i=_n5_;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 _nU_=s[2], curval=caml_check_bound(s[1],_nU_)[1 + _nU_], _nV_=(s[2] + 24 | 0) % 55 | 0, newval= caml_check_bound(s[1],_nV_)[1 + _nV_] + (curval ^ (curval >>> 25 | 0) & 31) | 0, newval30=newval & 1073741823, _nW_=s[2]; caml_check_bound(s[1],_nW_)[1 + _nW_] = 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,_b$_))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),_b__))) 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} var default$0=[0,_ca_.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 full_init$0(seed){return full_init(default$0,seed)} function init$4(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 _cb_= [0, make$3, make_self_init, copy$5, bits, int$0, full_int, int32, nativeint, int64, float$0, bool], Stdlib_Random= [0, init$4, full_init$0, self_init, bits$0, int$1, full_int$0, int32$0, nativeint$0, int64$0, float$1, bool$0, _cb_, get_state, set_state]; caml_register_global(799,Stdlib_Random,"Stdlib__Random"); function ongoing_traversal(h) {var _nS_=h.length - 1 < 4?1:0,_nT_=_nS_ || (h[4] < 0?1:0);return _nT_} function flip_ongoing_traversal(h){h[4] = - h[4] | 0;return 0} try {var _cY_=caml_sys_getenv(cst_OCAMLRUNPARAM),params=_cY_} catch(_nQ_) {_nQ_ = caml_wrap_exception(_nQ_); if(_nQ_ !== Not_found)throw _nQ_; try {var _cX_=caml_sys_getenv(cst_CAMLRUNPARAM),_cc_=_cX_} catch(_nR_) {_nR_ = caml_wrap_exception(_nR_); if(_nR_ !== Not_found)throw _nR_; var _cc_=cst$66} var params=_cc_} 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(_nP_){return caml_call1(_cb_[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 _nN_=caml_obj_tag(prng), _nO_=250 === _nN_?prng[1]:246 === _nN_?force_lazy_block(prng):prng, seed=caml_call1(_cb_[4],_nO_); else var seed=0; return [0,0,caml_make_vect(s,0),seed,s]} function clear$2(h) {var _nM_=0 < h[1]?1:0; return _nM_?(h[1] = 0,fill$0(h[2],0,h[2].length - 1,0)):_nM_} 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]; if(prec){prec[3] = r;var prec=r,param$0=next$0;continue} throw [0,Assert_failure,_cd_]} return prec$0}} return 0} function copy$6(init) {var _nJ_=init[4],_nK_=init[3],_nL_=map$6(copy_bucketlist,init[2]); return [0,init[1],_nL_,_nK_,_nJ_]} function length$4(h){return h[1]} function insert_all_buckets(indexfun,inplace,odata,ndata) {var nsize=ndata.length - 1, ndata_tail=caml_make_vect(nsize,0), _nD_=odata.length - 1 - 1 | 0, _nC_=0; if(! (_nD_ < 0)) {var i$0=_nC_; 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 _nI_=i$0 + 1 | 0; if(_nD_ !== i$0){var i$0=_nI_;continue a} break} break}} if(inplace) {var _nF_=nsize - 1 | 0,_nE_=0; if(! (_nF_ < 0)) {var i=_nE_; for(;;) {var match$0=caml_check_bound(ndata_tail,i)[1 + i]; if(match$0)match$0[3] = 0; var _nH_=i + 1 | 0; if(_nF_ !== i){var i=_nH_;continue} break}} var _nG_=0} else var _nG_=inplace; return _nG_} function resize$0(indexfun,h) {var odata=h[2], osize=odata.length - 1, nsize=osize * 2 | 0, _nB_=nsize < max_array_length?1:0; if(_nB_) {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 _nB_} 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],_nx_=d.length - 1 - 1 | 0,_nw_=0; if(! (_nx_ < 0)) {var i=_nw_; for(;;) {do_bucket(caml_check_bound(d,i)[1 + i]); var _nA_=i + 1 | 0; if(_nx_ !== i){var i=_nA_;continue} break}} var _ny_=1 - old_trav,_nz_=_ny_?flip_ongoing_traversal(h):_ny_; return _nz_} 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 _ns_=d.length - 1 - 1 | 0,_nr_=0; if(! (_ns_ < 0)) {var i=_nr_; for(;;) {filter_map_inplace_bucket(f,h,i,0,caml_check_bound(h[2],i)[1 + i]); var _nv_=i + 1 | 0; if(_ns_ !== i){var i=_nv_;continue} break}} var _nt_=1 - old_trav,_nu_=_nt_?flip_ongoing_traversal(h):_nt_; return _nu_} 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],_nn_=d.length - 1 - 1 | 0,_nm_=0; if(! (_nn_ < 0)) {var i=_nm_; for(;;) {var _np_=accu[1]; accu[1] = do_bucket(caml_check_bound(d,i)[1 + i],_np_); var _nq_=i + 1 | 0; if(_nn_ !== i){var i=_nq_;continue} break}} if(1 - old_trav)flip_ongoing_traversal(h); var _no_=accu[1]; return _no_} 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 _ni_=h[2], _nj_=0, mbl= fold_left$3 (function(m,b){return max$1(m,bucket_length(0,b))},_nj_,_ni_), histo=caml_make_vect(mbl + 1 | 0,0), _nk_=h[2]; iter$5 (function(b) {var l=bucket_length(0,b), _nl_=caml_check_bound(histo,l)[1 + l] + 1 | 0; caml_check_bound(histo,l)[1 + l] = _nl_; return 0}, _nk_); 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(_nh_){return aux(i$0,next,_nh_)}]} 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 _ne_=0,_nf_=0; return function(_ng_){return aux(_nf_,_ne_,_ng_)}} function to_seq_keys(m) {var _na_=to_seq$9(m); function _nb_(_nd_){return _nd_[1]} return function(_nc_){return map(_nb_,_na_,_nc_)}} function to_seq_values(m) {var _m8_=to_seq$9(m); function _m9_(_m$_){return _m$_[2]} return function(_m__){return map(_m9_,_m8_,_m__)}} function MakeSeeded(H) {function key_index(h,key) {var _m7_=h[2].length - 1 - 1 | 0; return caml_call2(H[2],h[3],key) & _m7_} 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 _m6_=h[2].length - 1 << 1 < h[1]?1:0; return _m6_?resize$0(key_index,h):_m6_} 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 _m5_=key_index(h,key),match=caml_check_bound(h[2],_m5_)[1 + _m5_]; 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 _m4_=key_index(h,key),match=caml_check_bound(h[2],_m4_)[1 + _m4_]; 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 _m3_=key_index(h,key); return find_in_bucket(caml_check_bound(h[2],_m3_)[1 + _m3_])} 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 _m0_=0} else var _m0_=1; if(_m0_) {caml_check_bound(h[2],i)[1 + i] = [0,key,data,param$0]; h[1] = h[1] + 1 | 0; var _m1_=h[2].length - 1 << 1 < h[1]?1:0; if(_m1_)return resize$0(key_index,h); var _m2_=_m1_} else var _m2_=_m0_; return _m2_}} function mem(h,key) {var _mZ_=key_index(h,key), param$0=caml_check_bound(h[2],_mZ_)[1 + _mZ_], param=param$0; for(;;) {if(param) {var k=param[1],next=param[3],_mY_=caml_call2(H[1],k,key); if(_mY_)return _mY_; 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$4, 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], _mX_=include[1]; function create(sz){return caml_call2(_mX_,_ce_,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 _mW_=h[2].length - 1 << 1 < h[1]?1:0; return _mW_?resize$0(key_index,h):_mW_} 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$0(h,key) {var _mV_=key_index(h,key),match=caml_check_bound(h[2],_mV_)[1 + _mV_]; 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 _mU_=key_index(h,key),match=caml_check_bound(h[2],_mU_)[1 + _mU_]; 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 _mT_=key_index(h,key); return find_in_bucket(caml_check_bound(h[2],_mT_)[1 + _mT_])} 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 _mQ_=0} else var _mQ_=1; if(_mQ_) {caml_check_bound(h[2],i)[1 + i] = [0,key,data,param$0]; h[1] = h[1] + 1 | 0; var _mR_=h[2].length - 1 << 1 < h[1]?1:0; if(_mR_)return resize$0(key_index,h); var _mS_=_mR_} else var _mS_=_mQ_; return _mS_}} function mem$2(h,key) {var _mP_=key_index(h,key), param$0=caml_check_bound(h[2],_mP_)[1 + _mP_], param=param$0; for(;;) {if(param) {var k=param[1],next=param[3],_mO_=0 === caml_compare(k,key)?1:0; if(_mO_)return _mO_; 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 _mH_=caml_obj_tag(prng), _mI_=250 === _mH_?prng[1]:246 === _mH_?force_lazy_block(prng):prng, seed=caml_call1(_cb_[4],_mI_); else var seed=4 <= h.length - 1?h[3]:0; var _mJ_=4 <= h.length - 1?h[4]:s, h$0=[0,h[1],caml_make_vect(s,0),seed,_mJ_], _mK_=h$0[2], _mL_=h[2], _mM_=0; insert_all_buckets (function(_mN_){return key_index(h$0,_mN_)},_mM_,_mL_,_mK_); return h$0} var Stdlib_Hashtbl= [0, create$3, clear$2, reset$0, copy$6, add$0, find$0, find_opt$1, find_all$0, mem$2, remove, replace, iter$10, filter_map_inplace, fold$4, length$4, 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(800,Stdlib_Hashtbl,"Stdlib__Hashtbl"); function weak_create(l) {var _mF_=0 <= l?1:0,_mG_=_mF_?l <= _t_[15]?1:0:_mF_; if(1 - _mG_)invalid_arg(cst_Weak_create); return runtime.caml_weak_create(l)} function length$5(x){return x.length - 1 - 2 | 0} function raise_if_invalid_offset$0(e,o,msg) {var _mC_=0 <= o?1:0,_mD_=_mC_?o < length$5(e)?1:0:_mC_,_mE_=1 - _mD_; return _mE_?invalid_arg(msg):_mE_} function set$0(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$1(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$5(e1) - l | 0) < o1) && 0 <= o2 && ! ((length$5(e2) - l | 0) < o2)) {var _mA_=0 !== l?1:0, _mB_=_mA_?runtime.caml_weak_blit(e1,o1,e2,o2,l):_mA_; return _mB_} return invalid_arg(cst_Weak_blit)} function fill$2(ar,ofs,len,x) {if(0 <= ofs && 0 <= len && ! ((length$5(ar) - len | 0) < ofs)) {var _my_=(ofs + len | 0) - 1 | 0; if(! (_my_ < ofs)) {var i=ofs; for(;;) {set$0(ar,i,x); var _mz_=i + 1 | 0; if(_my_ !== i){var i=_mz_;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 _mw_=t[1].length - 1 - 1 | 0,_mv_=0; if(! (_mw_ < 0)) {var i=_mv_; for(;;) {caml_check_bound(t[1],i)[1 + i] = emptybucket; caml_check_bound(t[2],i)[1 + i] = [0]; var _mx_=i + 1 | 0; if(_mw_ !== i){var i=_mx_;continue} break}} t[3] = limit; t[4] = 0; return 0} function fold(f,t,init) {var _mu_=t[1],i=0; return fold_right$2 (function(b,accu$1) {var i$0=i,accu=accu$1; for(;;) {if(length$5(b) <= i$0)return accu; var match=get$1(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}}, _mu_, init)} function iter(f,t) {var _mt_=t[1],i=0; return iter$5 (function(b) {var i$0=i; for(;;) {if(length$5(b) <= i$0)return 0; var match=get$1(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}}, _mt_)} function count_bucket(i,b,accu) {var i$0=i,accu$0=accu; for(;;) {if(length$5(b) <= i$0)return accu$0; var _ms_=check$0(b,i$0)?1:0, accu$1=accu$0 + _ms_ | 0, i$1=i$0 + 1 | 0, i$0=i$1, accu$0=accu$1; continue}} function count(t) {var _mn_=0,_mo_=t[1],_mp_=0; return fold_right$2 (function(_mq_,_mr_){return count_bucket(_mp_,_mq_,_mr_)}, _mo_, _mn_)} 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$5(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 _mj_=sz <= t[3]?1:0,_mk_=_mj_?t[3] < newsz?1:0:_mj_; if(_mk_) {t[4] = t[4] + 1 | 0; var i$4=0; for(;;) {var _l$_=t[5], bucket=caml_check_bound(t[1],_l$_)[1 + _l$_], _ma_=t[5], hbucket=caml_check_bound(t[2],_ma_)[1 + _ma_], n=length$5(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$5(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 _mb_=caml_check_bound(hbucket,j)[1 + j]; caml_check_bound(hbucket,i$0)[1 + i$0] = _mb_; 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 _mc_=t[5]; caml_check_bound(t[1],_mc_)[1 + _mc_] = emptybucket; var _md_=t[5]; caml_check_bound(t[2],_md_)[1 + _md_] = [0]} else {var newbucket=weak_create(prev_len); blit$4(bucket,0,newbucket,0,prev_len); var _mg_=t[5]; caml_check_bound(t[1],_mg_)[1 + _mg_] = newbucket; var _mh_=sub$1(hbucket,0,prev_len),_mi_=t[5]; caml_check_bound(t[2],_mi_)[1 + _mi_] = _mh_} var _me_=t[3] < n?1:0,_mf_=_me_?prev_len <= t[3]?1:0:_me_; if(_mf_)t[4] = t[4] - 1 | 0; break}} t[5] = caml_mod(t[5] + 1 | 0,t[1].length - 1); var _mm_=i$4 + 1 | 0; if(2 !== i$4){var i$4=_mm_;continue} break}} var _ml_=((t[1].length - 1) / 2 | 0) < t[4]?1:0; if(_ml_) {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),_l__=t[1],i=0; iteri$2 (function(j,ob) {var i$0=i; for(;;) {if(length$5(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}}, _l__); 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 _ml_} 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$0,[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$5(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$1(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$0,[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$5(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$1(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$5(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 _l9_=0; return find_shadow(t,d,function(w,i){return set$0(w,i,0)},_l9_)} function mem(t,d) {var _l8_=0;return find_shadow(t,d,function(w,i){return 1},_l8_)} 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$5(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$1(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$6(length$5,t[1]); sort(caml_int_compare,lens); var _l0_=0, totlen= fold_left$3(function(_l7_,_l6_){return _l7_ + _l6_ | 0},_l0_,lens), _l1_=len - 1 | 0, _l3_=len / 2 | 0, _l2_=caml_check_bound(lens,_l1_)[1 + _l1_], _l4_=caml_check_bound(lens,_l3_)[1 + _l3_], _l5_=caml_check_bound(lens,0)[1]; return [0,len,count(t),totlen,_l5_,_l4_,_l2_]} return [0, create, clear, merge, add, remove, find, find_opt, find_all, mem, iter, fold, count, stats]} var Stdlib_Weak= [0, weak_create, length$5, set$0, get$1, get_copy, check$0, fill$2, blit$4, Make$1]; caml_register_global(801,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 _lZ_=caml_string_notequal(s,cst$67); return _lZ_?format_pp_text(state,caml_ml_string_length(s),s):_lZ_} 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,_cf_,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 advance_left(state) {for(;;) {var match$12=peek_opt(state[28]); if(match$12) {var match$13=match$12[1], size$0=match$13[1], length$0=match$13[3], token=match$13[2], pending_count=state[13] - state[12] | 0, _lX_=0 <= size$0?1:0, _lY_=_lX_ || (state[9] <= pending_count?1:0); if(_lY_) {take(state[28]); var size$1=0 <= size$0?size$0:pp_infinity; if(typeof token === "number") switch(token) {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])} break; case 1:pop_opt(state[2]);break; case 2:pop_opt(state[3]);break; case 3: var match$5=top_opt(state[2]); if(match$5) {var match$6=match$5[1],width$0=match$6[2]; break_line(state,width$0)} else pp_output_newline(state); break; case 4: if(state[10] !== (state[6] - state[9] | 0)) {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}} break; default: var match$7=pop_opt(state[5]); if(match$7) {var tag_name=match$7[1], marker=caml_call1(state[25],tag_name); pp_output_string(state,marker)}} else switch(token[0]) {case 0:var s=token[1];format_pp_text(state,size$1,s);break; case 1: var breaks=token[2], fits=token[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:break_same_line(state,fits);break; case 1:break_new_line(state,breaks,width$1);break; case 2:break_new_line(state,breaks,width$1);break; case 3: if(state[9] < (size$1 + caml_ml_string_length(before) | 0)) break_new_line(state,breaks,width$1); else break_same_line(state,fits); break; case 4: if(state[11]) break_same_line(state,fits); else if(state[9] < (size$1 + caml_ml_string_length(before) | 0)) break_new_line(state,breaks,width$1); else if(((state[6] - width$1 | 0) + off | 0) < state[10]) break_new_line(state,breaks,width$1); else break_same_line(state,fits); break; default:break_same_line(state,fits)}} break; case 2: var off$0=token[2], n=token[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],_lV_=tabs$0[1]; if(_lV_) {var first=_lV_[1],param=tabs$0[1]; for(;;) {if(param) {var tail=param[2],head=param[1]; if(! (insertion_point <= head)){var param=tail;continue} var _lW_=head} else var _lW_=first; var tab=_lW_; break}} else var tab=insertion_point; var offset=tab - insertion_point | 0; if(0 <= offset) break_same_line(state,[0,cst$69,offset + n | 0,cst$68]); else break_new_line (state,[0,cst$71,tab + off$0 | 0,cst$70],state[6])} break; case 3: var ty=token[2], off$1=token[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) {var switcher=box_type - 1 | 0; if(! (3 < switcher >>> 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$1?ty:5; push([0,box_type$1,width$2],state[2]); break; case 4:var tbox=token[1];push(tbox,state[3]);break; default: var tag_name$0=token[1], marker$0=caml_call1(state[24],tag_name$0); pp_output_string(state,marker$0); push(tag_name$0,state[5])} state[12] = length$0 + state[12] | 0; continue} return _lY_} 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,_cg_,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], _lQ_=queue_elem[1]; if(left_total < state[12])return initialize_scan_stack(state[1]); var _lR_=queue_elem[2]; if(typeof _lR_ !== "number") switch(_lR_[0]) {case 3: var _lT_=1 - ty, _lU_= _lT_ ?(queue_elem[1] = state[13] + _lQ_ | 0,pop_opt(state[1]),0) :_lT_; return _lU_; case 1: case 2: var _lS_= ty?(queue_elem[1] = state[13] + _lQ_ | 0,pop_opt(state[1]),0):ty; return _lS_ } 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 _lO_=state[14] === state[15]?1:0; if(_lO_) {var _lP_=state[16]; return enqueue_string_as(state,caml_ml_string_length(_lP_),_lP_)} return _lO_} function pp_close_box(state,param) {var _lM_=1 < state[14]?1:0; if(_lM_) {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 _lN_=0} else var _lN_=_lM_; return _lN_} function pp_open_stag(state,tag_name) {if(state[22]){push(tag_name,state[4]);caml_call1(state[26],tag_name)} var _lL_=state[23]; if(_lL_) {var token=[5,tag_name];return pp_enqueue(state,[0,size,token,0])} return _lL_} function pp_close_stag(state,param) {if(state[23])pp_enqueue(state,[0,size,5,0]); var _lJ_=state[22]; if(_lJ_) {var match=pop_opt(state[4]); if(match){var tag_name=match[1];return caml_call1(state[27],tag_name)} var _lK_=0} else var _lK_=_lJ_; return _lK_} 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 _lI_=state[4]; iter$7(function(param){return pp_close_tag(state,0)},_lI_); 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 _lH_=state[14] < state[15]?1:0; return _lH_?enqueue_string_as(state,size,s):_lH_} 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 _lG_=state[14] < state[15]?1:0; return _lG_?enqueue_advance(state,[0,size,3,0]):_lG_} function pp_print_if_newline(state,param) {var _lF_=state[14] < state[15]?1:0; return _lF_?enqueue_advance(state,[0,size,4,0]):_lF_} function pp_print_custom_break(state,fits,breaks) {var after=fits[3], width=fits[2], before=fits[1], _lE_=state[14] < state[15]?1:0; if(_lE_) {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 _lE_} 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 _lD_=state[14] < state[15]?1:0; if(_lD_) {var elem=[0,size,[4,[0,[0,0]]],0];return enqueue_advance(state,elem)} return _lD_} function pp_close_tbox(state,param) {var _lA_=1 < state[14]?1:0; if(_lA_) {var _lB_=state[14] < state[15]?1:0; if(_lB_) {var elem=[0,size,2,0]; enqueue_advance(state,elem); state[14] = state[14] - 1 | 0; var _lC_=0} else var _lC_=_lB_} else var _lC_=_lA_; return _lC_} function pp_print_tbreak(state,width,offset) {var _lz_=state[14] < state[15]?1:0; if(_lz_) {var size=- state[13] | 0,elem=[0,size,[2,width,offset],width]; return scan_push(state,1,elem)} return _lz_} function pp_print_tab(state,param){return pp_print_tbreak(state,0,0)} function pp_set_tab(state,param) {var _ly_=state[14] < state[15]?1:0; if(_ly_){var elem=[0,size,0,0];return enqueue_advance(state,elem)} return _ly_} function pp_set_max_boxes(state,n) {var _lw_=1 < n?1:0,_lx_=_lw_?(state[15] = n,0):_lw_;return _lx_} 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 _lv_=1 < n$0?1:0; if(_lv_) {var n$1=state[6] - n$0 | 0,_lu_=1 <= n$1?1:0; if(_lu_) {var n=pp_limit(n$1); state[7] = n; state[8] = state[6] - state[7] | 0; return pp_rinit(state)} return _lu_} return _lv_} function pp_get_max_indent(state,param){return state[8]} function pp_set_margin(state,n) {var _lt_=1 <= n?1:0; if(_lt_) {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 _lt_} function validate_geometry(param) {var margin=param[2],max_indent=param[1]; return 2 <= max_indent?margin <= max_indent?_ch_:_ci_:_cj_} 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 _ls_=0 < n$0?1:0; if(_ls_) {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 _ls_}} function pp_set_formatter_out_channel(state,oc) {state[17] = function(_lp_,_lq_,_lr_){return output_substring(oc,_lp_,_lq_,_lr_)}; state[18] = function(param){return caml_ml_flush(oc)}; state[19] = function(_lo_){return display_newline(state,_lo_)}; state[20] = function(_ln_){return display_indent(state,_ln_)}; state[21] = function(_lm_){return display_indent(state,_lm_)}; 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(_ll_){return 0} function default_pp_print_close_tag(_lk_){return 0} function pp_make_formatter(f,g,h,i,j) {var pp_queue=create$1(0),sys_tok=[0,unknown,_ck_,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 _lh_=create$0(0),_li_=create$0(0),_lj_=create$0(0); return [0, scan_stack, create$0(0), _lj_, _li_, _lh_, 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 _k$_(_lg_){return 0} function _la_(_lf_){return 0} var ppf= pp_make_formatter(output,flush,function(_le_){return 0},_la_,_k$_); ppf[19] = function(_ld_){return display_newline(ppf,_ld_)}; ppf[20] = function(_lc_){return display_indent(ppf,_lc_)}; ppf[21] = function(_lb_){return display_indent(ppf,_lb_)}; return ppf} function formatter_of_out_channel(oc) {function _k7_(param){return caml_ml_flush(oc)} return make_formatter (function(_k8_,_k9_,_k__) {return output_substring(oc,_k8_,_k9_,_k__)}, _k7_)} function formatter_of_buffer(b) {function _k2_(_k6_){return 0} return make_formatter (function(_k3_,_k4_,_k5_) {return add_substring(b,_k3_,_k4_,_k5_)}, _k2_)} 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(_k1_){return add_symbolic_output_item(sob,0)} function h(_k0_){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(_kZ_){return pp_open_hbox(std_formatter,_kZ_)} function open_vbox(_kY_){return pp_open_vbox(std_formatter,_kY_)} function open_hvbox(_kX_){return pp_open_hvbox(std_formatter,_kX_)} function open_hovbox(_kW_){return pp_open_hovbox(std_formatter,_kW_)} function open_box(_kV_){return pp_open_box(std_formatter,_kV_)} function close_box(_kU_){return pp_close_box(std_formatter,_kU_)} function open_tag(_kT_){return pp_open_tag(std_formatter,_kT_)} function close_tag(_kS_){return pp_close_tag(std_formatter,_kS_)} function open_stag(_kR_){return pp_open_stag(std_formatter,_kR_)} function close_stag(_kQ_){return pp_close_stag(std_formatter,_kQ_)} function print_as(_kO_,_kP_){return pp_print_as(std_formatter,_kO_,_kP_)} function print_string$0(_kN_){return pp_print_string(std_formatter,_kN_)} function print_bytes$0(_kM_){return pp_print_bytes(std_formatter,_kM_)} function print_int$0(_kL_){return pp_print_int(std_formatter,_kL_)} function print_float$0(_kK_){return pp_print_float(std_formatter,_kK_)} function print_char$0(_kJ_){return pp_print_char(std_formatter,_kJ_)} function print_bool(_kI_){return pp_print_bool(std_formatter,_kI_)} function print_break(_kG_,_kH_) {return pp_print_break(std_formatter,_kG_,_kH_)} function print_cut(_kF_){return pp_print_cut(std_formatter,_kF_)} function print_space(_kE_){return pp_print_space(std_formatter,_kE_)} function force_newline(_kD_){return pp_force_newline(std_formatter,_kD_)} function print_flush(_kC_){return pp_print_flush(std_formatter,_kC_)} function print_newline$0(_kB_) {return pp_print_newline(std_formatter,_kB_)} function print_if_newline(_kA_) {return pp_print_if_newline(std_formatter,_kA_)} function open_tbox(_kz_){return pp_open_tbox(std_formatter,_kz_)} function close_tbox(_ky_){return pp_close_tbox(std_formatter,_ky_)} function print_tbreak(_kw_,_kx_) {return pp_print_tbreak(std_formatter,_kw_,_kx_)} function set_tab(_kv_){return pp_set_tab(std_formatter,_kv_)} function print_tab(_ku_){return pp_print_tab(std_formatter,_ku_)} function set_margin(_kt_){return pp_set_margin(std_formatter,_kt_)} function get_margin(_ks_){return std_formatter[6]} function set_max_indent(_kr_) {return pp_set_max_indent(std_formatter,_kr_)} function get_max_indent(_kq_){return std_formatter[8]} function set_geometry(_ko_,_kp_) {return pp_set_geometry(std_formatter,_ko_,_kp_)} function safe_set_geometry(_km_,_kn_) {return pp_safe_set_geometry(std_formatter,_km_,_kn_)} function get_geometry(_kl_){return pp_get_geometry(std_formatter,_kl_)} function update_geometry(_kk_) {return pp_update_geometry(std_formatter,_kk_)} function set_max_boxes(_kj_){return pp_set_max_boxes(std_formatter,_kj_)} function get_max_boxes(_ki_){return std_formatter[15]} function over_max_boxes(_kh_) {return pp_over_max_boxes(std_formatter,_kh_)} function set_ellipsis_text(_kg_) {return pp_set_ellipsis_text(std_formatter,_kg_)} function get_ellipsis_text(_kf_){return std_formatter[16]} function set_formatter_out_channel(_ke_) {return pp_set_formatter_out_channel(std_formatter,_ke_)} function set_formatter_out_functions(_kd_) {return pp_set_formatter_out_functions(std_formatter,_kd_)} function get_formatter_out_functions(_kc_) {return pp_get_formatter_out_functions(std_formatter,_kc_)} function set_formatter_output_functions(_ka_,_kb_) {return pp_set_formatter_output_functi(std_formatter,_ka_,_kb_)} function get_formatter_output_functions(_j$_) {return pp_get_formatter_output_functi(std_formatter,_j$_)} function set_formatter_stag_functions(_j__) {return pp_set_formatter_stag_function(std_formatter,_j__)} function get_formatter_stag_functions(_j9_) {return pp_get_formatter_stag_function(std_formatter,_j9_)} function set_print_tags(_j8_) {return pp_set_print_tags(std_formatter,_j8_)} function get_print_tags(_j7_){return std_formatter[22]} function set_mark_tags(_j6_){return pp_set_mark_tags(std_formatter,_j6_)} function get_mark_tags(_j5_){return std_formatter[23]} function set_tags(_j4_){return pp_set_tags(std_formatter,_j4_)} 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 _j3_=param$0[1]; if(param$0[2]) {var vs=param$0[2]; caml_call2(pp_v,ppf,_j3_); 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,_j3_)} 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 _j2_=left[1] !== len?1:0; return _j2_?flush(0):_j2_}} function pp_print_option(opt,pp_v,ppf,param) {if(opt) var sth=opt[1],none=sth; else var none=function(param,_j1_){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 _jR_=acc[2],_jS_=acc[1]; if(0 === _jR_[0]) {var acc$0=_jR_[1]; output_acc$0(ppf,_jS_); return pp_open_stag (ppf,[0,String_tag,compute_tag(output_acc$0,acc$0)])} var acc$1=_jR_[1]; output_acc$0(ppf,_jS_); 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 _jT_=acc[1],switch$1=0; if(typeof _jT_ !== "number" && 0 === _jT_[0]) {var _jU_=_jT_[2],switch$2=0; if(typeof _jU_ !== "number" && 1 === _jU_[0]) {var s$0=acc[2],size=_jU_[2],p$1=_jT_[1]; switch$1 = 1; switch$2 = 1}} if(! switch$1){var s=acc[2],p$0=_jT_;switch$0 = 2} break; case 3: var _jV_=acc[1],switch$3=0; if(typeof _jV_ !== "number" && 0 === _jV_[0]) {var _jW_=_jV_[2],switch$4=0; if(typeof _jW_ !== "number" && 1 === _jW_[0]) {var c$0=acc[2],size$0=_jW_[2],p$3=_jV_[1]; switch$0 = 1; switch$3 = 1; switch$4 = 1}} if(! switch$3){var c=acc[2],p$2=_jV_;switch$0 = 3} break; case 4: var _jX_=acc[1],switch$5=0; if(typeof _jX_ !== "number" && 0 === _jX_[0]) {var _jY_=_jX_[2],switch$6=0; if(typeof _jY_ !== "number" && 1 === _jY_[0]) {var s$0=acc[2],size=_jY_[2],p$1=_jX_[1]; switch$5 = 1; switch$6 = 1}} if(! switch$5){var s=acc[2],p$0=_jX_;switch$0 = 2} break; case 5: var _jZ_=acc[1],switch$7=0; if(typeof _jZ_ === "number" || ! (0 === _jZ_[0])) switch$7 = 1; else {var _j0_=_jZ_[2],switch$8=0; if(typeof _j0_ !== "number" && 1 === _j0_[0]) {var c$0=acc[2],size$0=_j0_[2],p$3=_jZ_[1]; switch$0 = 1; switch$8 = 1} if(! switch$8)switch$7 = 1} if(switch$7){var c=acc[2],p$2=_jZ_;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 _jF_=acc[2],_jG_=acc[1]; if(0 === _jF_[0]) {var acc$0=_jF_[1]; strput_acc$0(ppf,_jG_); return pp_open_stag (ppf,[0,String_tag,compute_tag(strput_acc$0,acc$0)])} var acc$1=_jF_[1]; strput_acc$0(ppf,_jG_); 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 _jH_=acc[1],switch$1=0; if(typeof _jH_ !== "number" && 0 === _jH_[0]) {var _jI_=_jH_[2],switch$2=0; if(typeof _jI_ !== "number" && 1 === _jI_[0]) {var s$0=acc[2],size=_jI_[2],p$1=_jH_[1]; switch$1 = 1; switch$2 = 1}} if(! switch$1){var s=acc[2],p$0=_jH_;switch$0 = 2} break; case 3: var _jJ_=acc[1],switch$3=0; if(typeof _jJ_ !== "number" && 0 === _jJ_[0]) {var _jK_=_jJ_[2],switch$4=0; if(typeof _jK_ !== "number" && 1 === _jK_[0]) {var c$0=acc[2],size$0=_jK_[2],p$3=_jJ_[1]; switch$0 = 1; switch$3 = 1; switch$4 = 1}} if(! switch$3){var c=acc[2],p$2=_jJ_;switch$0 = 3} break; case 4: var _jL_=acc[1],switch$5=0; if(typeof _jL_ !== "number" && 0 === _jL_[0]) {var _jM_=_jL_[2],switch$6=0; if(typeof _jM_ !== "number" && 1 === _jM_[0]) {var s$0=acc[2],size=_jM_[2],p$1=_jL_[1]; switch$5 = 1; switch$6 = 1}} if(! switch$5){var s=acc[2],p$0=_jL_;switch$0 = 2} break; case 5: var _jN_=acc[1],switch$7=0; if(typeof _jN_ === "number" || ! (0 === _jN_[0])) switch$7 = 1; else {var _jO_=_jN_[2],switch$8=0; if(typeof _jO_ !== "number" && 1 === _jO_[0]) {var c$0=acc[2],size$0=_jO_[2],p$3=_jN_[1]; switch$0 = 1; switch$8 = 1} if(! switch$8)switch$7 = 1} if(switch$7){var c=acc[2],p$2=_jN_;switch$0 = 3} break; case 6: var _jP_=acc[1]; if(typeof _jP_ !== "number" && 0 === _jP_[0]) {var _jQ_=_jP_[2]; if(typeof _jQ_ !== "number" && 1 === _jQ_[0]) {var f$1=acc[2],size$1=_jQ_[2],p$4=_jP_[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,_jP_); 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],_jE_=0; return make_printf (function(acc){output_acc$0(ppf,acc);return caml_call1(k,ppf)}, _jE_, 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],_jC_=0; return make_iprintf(function(_jD_){return 0},_jC_,fmt)} function fprintf$0(ppf) {function _jz_(_jB_){return 0} return function(_jA_){return kfprintf$0(_jz_,ppf,_jA_)}} 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],_jy_=0; return make_printf (function(acc) {return caml_call1 (k,function(ppf){return output_acc$0(ppf,acc)})}, _jy_, 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(_ju_,_jv_,_jw_,_jx_) {return pp_set_all_formatter_output_fu(std_formatter,_ju_,_jv_,_jw_,_jx_)} function get_all_formatter_output_funct(_jt_) {return pp_get_all_formatter_output_fu(std_formatter,_jt_)} 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(_js_){return stringify(mot,cst$84,_js_)}; state[25] = function(_jr_){return stringify(mct,cst$85,_jr_)}; var _jn_=0; state[26] = function(_jq_){return stringify(pot,_jn_,_jq_)}; var _jo_=0; state[27] = function(_jp_){return stringify(pct,_jo_,_jp_)}; 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(_jm_) {return pp_set_formatter_tag_functions(std_formatter,_jm_)} function get_formatter_tag_functions(_jl_) {return pp_get_formatter_tag_functions(std_formatter,_jl_)} 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(802,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(_jk_) {_jk_ = caml_wrap_exception(_jk_); if(_jk_ === End_of_file) {ib[2] = null_char;ib[3] = 0;ib[1] = 1;return null_char} throw _jk_}} 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 _jj_=ib[9]; if(typeof _jj_ === "number") return 0 === _jj_?cst_unnamed_function:cst_unnamed_character_string; else {if(0 === _jj_[0])return cst_unnamed_Stdlib_input_chann; var fname=_jj_[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 _cl_=0; function from_function$0(_ji_){return create$4(_cl_,_ji_)} 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(_jh_){return open_in_file(open_in,_jh_)} function from_file_bin(_jg_){return open_in_file(open_in_bin,_jg_)} function from_channel$0(ic){return from_ic(scan_raise_at_end,[0,ic],ic)} function close_in$0(ib) {var _jf_=ib[9]; if(typeof _jf_ === "number") return 0; else {if(0 === _jf_[0]){var ic=_jf_[1];return caml_ml_close_channel(ic)} var ic$0=_jf_[2]; return caml_ml_close_channel(ic$0)}} var memo=[0,0]; function memo_from_ic(scan_close_ic,ic) {try {var _jd_=assq(ic,memo[1]);return _jd_} catch(_je_) {_je_ = caml_wrap_exception(_je_); if(_je_ === Not_found) {var ib=from_ic(scan_close_ic,[0,ic],ic); memo[1] = [0,[0,ic,ib],memo[1]]; return ib} throw _je_}} function memo_from_channel(_jc_) {return memo_from_ic(scan_raise_at_end,_jc_)} 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(_cm_),c))} function bad_token_length(message) {return bad_input(caml_call1(sprintf(_cn_),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(_cp_),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),_ja_=1 - ib[1]; if(_ja_) {var _jb_=c - 9 | 0,switch$0=0; if(4 < _jb_ >>> 0) {if(23 === _jb_)switch$0 = 1} else if(1 < (_jb_ - 2 | 0) >>> 0)switch$0 = 1; if(switch$0){invalidate_current_char(ib);continue} return 0} return _ja_} 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(_cq_),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,_cr_]} 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),switcher=c - 48 | 0; if(9 < switcher >>> 0)return bad_input(caml_call1(sprintf(_cs_),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(_ct_),c$0,basis))} function is_binary_digit(param) {var switcher=param - 48 | 0;return 1 < switcher >>> 0?0:1} function scan_binary_int(_i__,_i$_) {return scan_digit_plus(cst_binary,is_binary_digit,_i__,_i$_)} function is_octal_digit(param) {var switcher=param - 48 | 0;return 7 < switcher >>> 0?0:1} function scan_octal_int(_i8_,_i9_) {return scan_digit_plus(cst_octal,is_octal_digit,_i8_,_i9_)} function is_hexa_digit(param) {var _i7_=param - 48 | 0,switch$0=0; if(22 < _i7_ >>> 0) {if(! (5 < (_i7_ - 49 | 0) >>> 0))switch$0 = 1} else if(6 < (_i7_ - 10 | 0) >>> 0)switch$0 = 1; return switch$0?1:0} function scan_hexadecimal_int(_i5_,_i6_) {return scan_digit_plus(cst_hexadecimal,is_hexa_digit,_i5_,_i6_)} 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); if(ib[1])return width; var switcher=c - 48 | 0; return 9 < switcher >>> 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) {var switcher=c - 65 | 0; return 25 < switcher >>> 0?c:char_of_int((c - 65 | 0) + 97 | 0)} var len=caml_ml_string_length(str), width$0=[0,width], _i2_=len - 1 | 0, _i1_=0; if(! (_i2_ < 0)) {var i=_i1_; for(;;) {var c=peek_char(ib),_i3_=lowercase(caml_string_get(str,i)); if(lowercase(c) !== _i3_)caml_call1(error,0); if(0 === width$0[1])caml_call1(error,0); width$0[1] = store_char(width$0[1],ib,c); var _i4_=i + 1 | 0; if(_i2_ !== i){var i=_i4_;continue} break}} return width$0[1]} function scan_hex_float(width,precision,ib) {var _iO_=0 === width?1:0,_iP_=_iO_ || end_of_input(ib); if(_iP_)bad_hex_float(0); var width$0=scan_sign(width,ib), _iQ_=0 === width$0?1:0, _iR_=_iQ_ || end_of_input(ib); if(_iR_)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), _iS_=0 === width$1?1:0, _iT_=_iS_ || end_of_input(ib); if(_iT_)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), _iW_=0 === width$3?1:0, _iX_=_iW_ || end_of_input(ib); if(_iX_)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),_iY_=match - 46 | 0,switch$1=0; if(34 < _iY_ >>> 0) {if(66 === _iY_)switch$1 = 1} else if(32 < (_iY_ - 1 | 0) >>> 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), _iZ_=0 === width$9?1:0, _i0_=_iZ_ || end_of_input(ib); if(_i0_)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), _iU_=0 === width$2?1:0, _iV_=_iU_ || end_of_input(ib); if(_iV_)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 _iK_=0 === width?1:0,_iL_=_iK_ || end_of_input(ib); if(_iL_)bad_float(0); var width$0=scan_decimal_digit_star(width,ib), _iM_=0 === width$0?1:0, _iN_=_iM_ || end_of_input(ib); if(_iN_)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 {var switcher$0=switcher - 1 | 0; if(30 < switcher$0 >>> 0)return scan_exponent_part(width$0,ib)} return bad_float(0)} function scan_caml_float(width,precision,ib) {var _iw_=0 === width?1:0,_ix_=_iw_ || end_of_input(ib); if(_ix_)bad_float(0); var width$0=scan_sign(width,ib), _iy_=0 === width$0?1:0, _iz_=_iy_ || end_of_input(ib); if(_iz_)bad_float(0); var c=peek_char(ib); if(49 <= c) {if(! (58 <= c)) {var width$1=store_char(width$0,ib,c), _iA_=0 === width$1?1:0, _iB_=_iA_ || end_of_input(ib); if(_iB_)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), _iC_=0 === width$2?1:0, _iD_=_iC_ || end_of_input(ib); if(_iD_)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), _iE_=0 === width$3?1:0, _iF_=_iE_ || end_of_input(ib); if(_iF_)bad_float(0); var width$4=scan_hexadecimal_int(width$3,ib), _iG_=0 === width$4?1:0, _iH_=_iG_ || end_of_input(ib); if(_iH_)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 {var switcher$0=switcher - 1 | 0; if(30 < switcher$0 >>> 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), _iI_=0 === width$9?1:0, _iJ_=_iI_ || end_of_input(ib); if(_iJ_)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 _iv_=c - 9 | 0,switch$0=0; if(4 < _iv_ >>> 0) {if(23 === _iv_)switch$0 = 1} else if(1 < (_iv_ - 2 | 0) >>> 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(_co_),message)):c} function check_next_char_for_char(_it_,_iu_) {return check_next_char(cst_a_Char,_it_,_iu_)} function check_next_char_for_string(_ir_,_is_) {return check_next_char(cst_a_String,_ir_,_is_)} 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$0=c0 - 92 | 0; if(! (28 < switcher$0 >>> 0)) switch(switcher$0) {case 28: var get_digit= function(param) {var c=next_char(ib),_iq_=c - 48 | 0,switch$0=0; if(22 < _iq_ >>> 0) {if(! (5 < (_iq_ - 49 | 0) >>> 0))switch$0 = 1} else if(6 < (_iq_ - 10 | 0) >>> 0)switch$0 = 1; return switch$0?c:bad_input_escape(c)}, c1=get_digit(0), c2=get_digit(0), _im_=hexadecimal_value_of_char(c2), c$0=(16 * hexadecimal_value_of_char(c1) | 0) + _im_ | 0, switch$1=0; if(0 <= c$0 && ! (255 < c$0)) {var _io_=char_of_int(c$0);switch$1 = 1} if(! switch$1) var _io_=bad_input(caml_call2(sprintf(_cv_),c1,c2)); return store_char(width - 2 | 0,ib,_io_); 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),switcher=c - 48 | 0; return 9 < switcher >>> 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 _ip_=char_of_int(c);switch$2 = 1} if(! switch$2) var _ip_=bad_input(caml_call3(sprintf(_cu_),c0,c1$0,c2$0)); return store_char(width - 2 | 0,ib,_ip_)}} 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 {var switcher=c0 - 110 | 0; switch(switcher) {case 0:var _in_=10;break; case 4:var _in_=13;break; case 6:var _in_=9;break; default:switch$3 = 1}} else if(98 === c0)var _in_=8;else switch$3 = 1; if(switch$3)var _in_=c0; return store_char(width,ib,_in_)} 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 _ik_=ignore_char(width$1,ib); if(counter < 50) {var counter$0=counter + 1 | 0; return skip_spaces(counter$0,_ik_)} return caml_trampoline_return(skip_spaces,[0,_ik_])} 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 _il_=ignore_char(width$3,ib); if(counter < 50) {var counter$1=counter + 1 | 0; return skip_spaces(counter$1,_il_)} return caml_trampoline_return(skip_spaces,[0,_il_])} 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),_ig_=0 < i$0?1:0; if(_ig_) {var _ih_=1 - ib[1]; if(_ih_) var _ii_=is_in_char_set(char_set,c),_ij_=_ii_?c !== stp?1:0:_ii_; else var _ij_=_ih_} else var _ij_=_ig_; if(_ij_) {store_char(max_int,ib,c);var i$1=i$0 - 1 | 0,i$0=i$1;continue} return _ij_}} if(scan_indic) {var c=scan_indic[1]; scan_chars(width,c); var _if_=1 - ib[1]; if(_if_) {var ci=peek_char(ib); return c === ci?invalidate_current_char(ib):character_mismatch(c,ci)} return _if_} 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(_cx_),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 _cy_; 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],_id_=erase_rel(symm(fmtty)); if(counter < 50) {var counter$0=counter + 1 | 0; return take_fmtty_format_readers$0(counter$0,k,_id_,rest)} return caml_trampoline_return (take_fmtty_format_readers$0,[0,k,_id_,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 _ie_=fmt$0[1]; if(0 === _ie_[0]) {var rest$0=fmt$0[2], match=_ie_[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=_ie_[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 _h2_=fmt$0[1],_h3_=fmt$0[2]; if(typeof _h3_ !== "number") switch(_h3_[0]) {case 17: var rest$2=_h3_[2], fmting_lit=_h3_[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,_h2_,0,scan$0,token_string); case 18: var _h4_=_h3_[1]; if(0 === _h4_[0]) {var rest$3=_h3_[2], match$0=_h4_[1], fmt$1=match$0[1], scan$1= function(width,param,ib){return scan_string(_cz_,width,ib)}; return pad_prec_scanf (ib, concat_fmt(fmt$1,rest$3), readers, _h2_, 0, scan$1, token_string)} var rest$4=_h3_[2], match$1=_h4_[1], fmt$2=match$1[1], scan$2= function(width,param,ib){return scan_string(_cA_,width,ib)}; return pad_prec_scanf (ib, concat_fmt(fmt$2,rest$4), readers, _h2_, 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,_h2_,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,_ic_,ib) {var c=checked_peek_char(ib), m= 102 === c ?5 :116 === c?4:bad_input(caml_call1(sprintf(_cw_),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(_ib_){return check_char(ib,_ib_)},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 _h5_=format_of_string_fmtty(s,fmtty),fmt$3=_h5_} 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))), _h7_=type_format(fmt$6,erase_rel(fmtty$0)), fmt$5=fmt$8, fmt$4=_h7_} catch(exn) {exn = caml_wrap_exception(exn); if(exn[1] !== Failure)throw exn; var msg$0=exn[2], _h6_=bad_input(msg$0), fmt$5=_h6_[2], fmt$4=_h6_[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], _h8_=string_of_formatting_lit(formatting_lit); iter$4(function(_ia_){return check_char(ib,_ia_)},_h8_); var fmt$0=rest$19; continue; case 18: var _h9_=fmt$0[1]; if(0 === _h9_[0]) {var rest$20=fmt$0[2],match$4=_h9_[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=_h9_[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 _h__=fmt$0[1],_h$_=fmt$0[3]; if(typeof _h$_ !== "number" && 17 === _h$_[0]) {var rest$23=_h$_[2], fmting_lit$0=_h$_[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(_h__); 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(_h__); 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,_cB_]; 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 _h1_=pad[2]; if(typeof prec === "number") {if(prec)return invalid_arg(cst_scanf_bad_conversion$0); caml_call3(scan,_h1_,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,_h1_,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 _h0_=[0,make_scanf(ib,fmt,readers)],_hZ_=_h0_} 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], _hY_= invalid_arg (cat(msg,cat(cst_in_format,cat(escaped$1(str),cst$88)))); switch$0 = 1} if(! switch$0)var _hY_=[1,exc]; var _hZ_=_hY_} if(0 === _hZ_[0]){var args=_hZ_[1];return apply(f,args)} var exc=_hZ_[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 _hX_=format_of_string_format(str,format),fmt=_hX_} 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 _hW_(x){return x} return sscanf_format(cat(cst$90,cat(escaped$1(s),cst$89)),fmt,_hW_)} function unescaped(s) {function _hV_(x){return x} return caml_call1(sscanf(cat(cst$92,cat(s,cst$91)),_cC_),_hV_)} 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$0, 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(803,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(804,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],_hS_=caml_ml_string_length(s) - 1 | 0,_hR_=0; if(! (_hS_ < 0)) {var i=_hR_; for(;;) {var _hT_=caml_string_get(s,i); accu[1] = (223 * accu[1] | 0) + _hT_ | 0; var _hU_=i + 1 | 0; if(_hS_ !== i){var i=_hU_;continue} break}} accu[1] = accu[1] & 2147483647; var tag=1073741823 < accu[1]?accu[1] + 2147483648 | 0:accu[1]; return tag} function compare$13(x,y){return caml_string_compare(x,y)} var Vars=caml_call1(Stdlib_Map[1],[0,compare$13]); function compare$14(x,y){return caml_string_compare(x,y)} var Meths=caml_call1(Stdlib_Map[1],[0,compare$14]), compare$15=caml_int_compare, Labs=caml_call1(Stdlib_Map[1],[0,compare$15]), 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 _hL_=((fit_size(len) * 32 | 0) / 8 | 0) - 1 | 0; caml_check_bound(methods,1)[2] = _hL_; var _hN_=len - 1 | 0,_hM_=0; if(! (_hN_ < 0)) {var i=_hM_; for(;;) {var _hP_=(i * 2 | 0) + 3 | 0, _hO_=caml_check_bound(pub_labels,i)[1 + i]; caml_check_bound(methods,_hP_)[1 + _hP_] = _hO_; var _hQ_=i + 1 | 0; if(_hN_ !== i){var i=_hQ_;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,_hJ_=old_size < new_size?1:0; if(_hJ_) {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 _hK_=0} else var _hK_=_hJ_; return _hK_} 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 _hH_=caml_call2(Meths[28],name,table[3]);return _hH_} catch(_hI_) {_hI_ = caml_wrap_exception(_hI_); if(_hI_ === 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 _hI_}} function get_method_labels(table,names) {return map$6(function(_hG_){return get_method_label(table,_hG_)},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 _hE_=assoc(label,table[6]);return _hE_} catch(_hF_) {_hF_ = caml_wrap_exception(_hF_); if(_hF_ === Not_found) return caml_check_bound(table[2],label)[1 + label]; throw _hF_}} 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$3 (function(_hD_){return get_method_label(table,_hD_)},virt_meths$0), concr_meth_labs= map$3 (function(_hC_){return get_method_label(table,_hC_)},concr_meths$0); table[5] = [0, [0,table[3],table[4],table[6],table[7],virt_meth_labs,vars$0], table[5]]; var _ht_=Vars[1],_hu_=table[7]; function _hv_(lab,info,tvars) {return mem(lab,vars$0)?caml_call3(Vars[4],lab,info,tvars):tvars} table[7] = caml_call3(Vars[13],_hv_,_hu_,_ht_); var by_name=[0,Meths[1]],by_label=[0,Labs[1]]; iter2 (function(met,label) {by_name[1] = caml_call3(Meths[4],met,label,by_name[1]); var _hy_=by_label[1]; try {var _hA_=caml_call2(Labs[28],label,table[4]),_hz_=_hA_} catch(_hB_) {_hB_ = caml_wrap_exception(_hB_); if(_hB_ !== Not_found)throw _hB_; var _hz_=1} by_label[1] = caml_call3(Labs[4],label,_hz_,_hy_); return 0}, concr_meths$0, concr_meth_labs); iter2 (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 _hw_=0,_hx_=table[6]; table[6] = fold_right (function(met,hm) {var lab=met[1];return mem(lab,virt_meth_labs)?hm:[0,met,hm]}, _hx_, _hw_); 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 _hs_=caml_call2(Vars[28],v,table[7]); return caml_call3(Vars[4],v,_hs_,s)}, saved_vars, vars); table[3] = by_name; table[4] = by_label; var _hr_=table[6]; table[6] = fold_right (function(met,hm) {var lab=met[1];return mem(lab,virt_meths)?hm:[0,met,hm]}, _hr_, 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 _hp_=caml_call2(Vars[28],name,table[7]);return _hp_} catch(_hq_) {_hq_ = caml_wrap_exception(_hq_); if(_hq_ === 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 _hq_}} 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), _hh_=nmeths - 1 | 0, _hg_=0; if(! (_hh_ < 0)) {var i$0=_hg_; for(;;) {var _hn_= get_method_label(table,caml_check_bound(meths$0,i$0)[1 + i$0]); caml_check_bound(res,i$0)[1 + i$0] = _hn_; var _ho_=i$0 + 1 | 0; if(_hh_ !== i$0){var i$0=_ho_;continue} break}} var _hj_=nvals - 1 | 0,_hi_=0; if(! (_hj_ < 0)) {var i=_hi_; for(;;) {var _hl_=i + nmeths | 0, _hk_=new_variable(table,caml_check_bound(vals,i)[1 + i]); caml_check_bound(res,_hl_)[1 + _hl_] = _hk_; var _hm_=i + 1 | 0; if(_hj_ !== i){var i=_hm_;continue} break}} return res} function get_variable(table,name) {try {var _he_=caml_call2(Vars[28],name,table[7]);return _he_} catch(_hf_) {_hf_ = caml_wrap_exception(_hf_); if(_hf_ === Not_found)throw [0,Assert_failure,_cD_]; throw _hf_}} function get_variables(table,names) {return map$6(function(_hd_){return get_variable(table,_hd_)},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$6(public_method_label,public_methods), table=new_table(tags); iteri$2 (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 _g__=0, _g$_=to_array(concr_meths), _ha_= [0, map$6 (function(nm){return get_method(cla,get_method_label(cla,nm))},_g$_), _g__], _hb_=to_array(vals); return caml_array_concat ([0, [0,init], [0, map$6(function(_hc_){return get_variable(cla,_hc_)},_hb_), _ha_]])} 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],_g9_=0 !== inits?1:0; return _g9_?iter_f(obj,inits):_g9_} 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,_cH_]} function build_path(n,keys,tables) {var res=[0,0,0,0],r=[0,res],_g5_=0; if(! (n < 0)) {var i=_g5_; for(;;) {var _g7_=r[1]; r[1] = [0,caml_check_bound(keys,i)[1 + i],_g7_,0]; var _g8_=i + 1 | 0; if(n !== i){var i=_g8_;continue} break}} var _g6_=r[1]; if(tables){tables[2] = _g6_;return res} throw [0,Assert_failure,_cE_]} 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,_cJ_]} if(tables$0) {var _g4_=tables$0[3]; if(_g4_){var tables$0=_g4_;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,_cF_]} throw [0,Assert_failure,_cI_]} throw [0,Assert_failure,_cG_]}} 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 _gY_=i[1], label=caml_check_bound(methods,_gY_)[1 + _gY_], next= function(param) {i[1]++; var _g3_=i[1]; return caml_check_bound(methods,_g3_)[1 + _g3_]}, 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 _g1_=caml_call1(obj[1][1 + m],obj); return caml_call2(obj[1][1 + n],obj,_g1_)}} (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 _g0_=obj[1 + n]; return caml_call1(caml_get_public_method(_g0_,m,0),_g0_)}} (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 _gZ_=obj[1 + e][1 + n]; return caml_call1(caml_get_public_method(_gZ_,m,0),_gZ_)}} (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 _g2_=caml_call1(obj[1][1 + n],obj); return caml_call1(caml_get_public_method(_g2_,m,0),_g2_)}} (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(805,CamlinternalOO,"CamlinternalOO"); var Stdlib_Oo=[0,copy$7,public_method_label,public_method_label]; caml_register_global(806,Stdlib_Oo,"Stdlib__Oo"); function init_mod_block(loc,comps$0) {var length=comps$0.length - 1, modu=caml_obj_block(0,length), _gU_=length - 1 | 0, _gT_=0; if(! (_gU_ < 0)) {var i=_gT_; 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(_gW_) {var l$0=modu[1 + i]; if(l === l$0)throw [0,Undefined_recursive_module,loc]; var _gX_=caml_obj_tag(l$0); return 250 === _gX_ ?l$0[1] :246 === _gX_?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 _gV_=i + 1 | 0; if(_gU_ !== i){var i=_gV_;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 _gR_=comps$0.length - 1 - 1 | 0,_gQ_=0; if(! (_gR_ < 0)) {var i=_gQ_; 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 _gP_=j + 1 | 0; if(3 !== j){var j=_gP_;continue} break}} else switch$0 = 1; if(switch$0)throw [0,Assert_failure,_cK_]} 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 _gS_=i + 1 | 0; if(_gR_ !== i){var i=_gS_;continue} break}} return 0} throw [0,Assert_failure,_cL_]} 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(807,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 _gN_=caml_call2(Stdlib_Hashtbl[6],kwd_table,id);return _gN_} catch(_gO_) {_gO_ = caml_wrap_exception(_gO_); if(_gO_ === Not_found)return [1,id]; throw _gO_}} function keyword_or_error(c) {var s=make$1(1,c); try {var _gL_=caml_call2(Stdlib_Hashtbl[6],kwd_table,s);return _gL_} catch(_gM_) {_gM_ = caml_wrap_exception(_gM_); if(_gM_ === Not_found)throw [0,Error,cat(cst_Illegal_character,s)]; throw _gM_}} 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 _gK_=match$1[1]; if(41 === _gK_){junk(strm);return 0} if(42 === _gK_){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 _gH_=match[1]; if(58 <= _gH_) {var switcher=_gH_ - 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 <= _gH_) {junk(strm); var match$0=peek$0(strm); if(match$0) {var _gI_=match$0[1],switcher$0=_gI_ - 48 | 0; if(! (9 < switcher$0 >>> 0)) {junk(strm); var match$1=peek$0(strm); if(match$1) {var _gJ_=match$1[1],switcher$1=_gJ_ - 48 | 0; if(! (9 < switcher$1 >>> 0)) {junk(strm); return chr ((((_gH_ - 48 | 0) * 100 | 0) + ((_gI_ - 48 | 0) * 10 | 0) | 0) + (_gJ_ - 48 | 0) | 0)}} throw [0,Error,cst$99]}} throw [0,Error,cst$98]} junk(strm); return _gH_} throw Failure$0} function end_exponent_part(strm) {for(;;) {var match=peek$0(strm); if(match) {var _gG_=match[1],switcher=_gG_ - 48 | 0; if(! (9 < switcher >>> 0)){junk(strm);store(_gG_);continue}} return [0,[3,caml_float_of_string(get_string(0))]]}} function exponent_part(strm) {var match=peek$0(strm); if(match) {var _gF_=match[1],switch$0=0; if(43 !== _gF_ && 45 !== _gF_)switch$0 = 1; if(! switch$0) {junk(strm);store(_gF_);return end_exponent_part(strm)}} return end_exponent_part(strm)} function number(s) {for(;;) {var match=peek$0(s); if(match) {var _gC_=match[1]; if(58 <= _gC_) {var switch$0=0; if(69 === _gC_ || 101 === _gC_)switch$0 = 1; if(switch$0){junk(s);store(69);return exponent_part(s)}} else {if(46 === _gC_) {junk(s); store(46); for(;;) {var match$0=peek$0(s); if(match$0) {var _gD_=match$0[1],_gE_=_gD_ - 69 | 0; if(32 < _gE_ >>> 0) {var switcher=_gE_ + 21 | 0; if(! (9 < switcher >>> 0)){junk(s);store(_gD_);continue}} else {var switcher$0=_gE_ - 1 | 0; if(30 < switcher$0 >>> 0) {junk(s);store(69);return exponent_part(s)}}} return [0,[3,caml_float_of_string(get_string(0))]]}} if(48 <= _gC_){junk(s);store(_gC_);continue}}} return [0,[2,caml_int_of_string(get_string(0))]]}} function ident2(strm) {for(;;) {var match=peek$0(strm); if(match) {var _gA_=match[1],switch$0=0; if(94 <= _gA_) {var _gB_=_gA_ - 95 | 0; if(30 < _gB_ >>> 0) {if(! (32 <= _gB_))switch$0 = 1} else if(29 === _gB_)switch$0 = 1} else if(65 <= _gA_) {if(92 === _gA_)switch$0 = 1} else if(33 <= _gA_) switch(_gA_ - 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(_gA_);continue}} return [0,ident_or_keyword(get_string(0))]}} function neg_number(s) {var match=peek$0(s); if(match) {var _gz_=match[1],switcher=_gz_ - 48 | 0; if(! (9 < switcher >>> 0)) {junk(s);reset_buffer(0);store(45);store(_gz_);return number(s)}} reset_buffer(0); store(45); return ident2(s)} function ident(strm) {for(;;) {var match=peek$0(strm); if(match) {var _gx_=match[1],switch$0=0; if(91 <= _gx_) {var _gy_=_gx_ - 95 | 0; if(27 < _gy_ >>> 0) {if(97 <= _gy_)switch$0 = 1} else if(1 !== _gy_)switch$0 = 1} else if(48 <= _gx_) {if(6 < (_gx_ - 58 | 0) >>> 0)switch$0 = 1} else if(39 === _gx_)switch$0 = 1; if(switch$0){junk(strm);store(_gx_);continue}} return [0,ident_or_keyword(get_string(0))]}} function next_token$0(counter,strm) {for(;;) {var match=peek$0(strm); if(match) {var _gn_=match[1],switch$0=0; if(124 <= _gn_) {if(127 <= _gn_) {if(192 <= _gn_)switch$0 = 1} else if(125 !== _gn_)switch$0 = 2} else {var _go_=_gn_ - 65 | 0; if(57 < _go_ >>> 0) {if(! (58 <= _go_)) {var switcher=_go_ + 65 | 0; switch(switcher) {case 34: junk(strm); reset_buffer(0); for(;;) {var match$1=peek$0(strm); if(match$1) {var _gq_=match$1[1]; if(34 === _gq_){junk(strm);return [0,[4,get_string(0)]]} if(92 === _gq_) {junk(strm); try {var c$0=escape(strm)} catch(_gw_) {_gw_ = caml_wrap_exception(_gw_); if(_gw_ === Failure$0)throw [0,Error,cst$96]; throw _gw_; var _gt_=_gw_} store(c$0); continue} junk(strm); store(_gq_); continue} throw Failure$0} case 39: junk(strm); try {var match$2=peek$0(strm); if(! match$2)throw Failure$0; var _gr_=match$2[1]; if(92 === _gr_) {junk(strm); try {var _gs_=escape(strm)} catch(_gv_) {_gv_ = caml_wrap_exception(_gv_); if(_gv_ === Failure$0)throw [0,Error,cst$97]; throw _gv_} var c=_gs_} else {junk(strm);var c=_gr_}} catch(_gu_) {_gu_ = caml_wrap_exception(_gu_); if(_gu_ === Failure$0)throw [0,Error,cst$94]; throw _gu_} 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(_gn_);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 _gp_=_go_ - 26 | 0; if(5 < _gp_ >>> 0) switch$0 = 1; else switch(_gp_) {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(_gn_)]; case 1: junk(strm);reset_buffer(0);store(_gn_);return ident(strm); default: junk(strm);reset_buffer(0);store(_gn_);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(808,Stdlib_Genlex,"Stdlib__Genlex"); function MakeSeeded$0(H) {var prng=[246,function(_gm_){return caml_call1(_cb_[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 _gk_=caml_obj_tag(prng), _gl_=250 === _gk_?prng[1]:246 === _gk_?force_lazy_block(prng):prng, seed=caml_call1(_cb_[4],_gl_); 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,_gi_=len - 1 | 0,_gh_=0; if(! (_gi_ < 0)) {var i=_gh_; for(;;) {caml_check_bound(h[2],i)[1 + i] = 0; var _gj_=i + 1 | 0; if(_gi_ !== i){var i=_gj_;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 _ge_=init[4],_gf_=init[3],_gg_=copy$1(init[2]); return [0,init[1],_gg_,_gf_,_ge_]} 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],_gb_=d.length - 1 - 1 | 0,_ga_=0; if(! (_gb_ < 0)) {var i=_ga_; for(;;) {var _gc_=do_bucket(caml_check_bound(d,i)[1 + i]); caml_check_bound(d,i)[1 + i] = _gc_; var _gd_=i + 1 | 0; if(_gb_ !== i){var i=_gd_;continue} break}} return 0} function resize(h) {var odata=h[2],osize=odata.length - 1,nsize=osize * 2 | 0; clean(h); var _f5_=nsize < max_array_length?1:0, _f6_=_f5_?(osize >>> 1 | 0) <= h[1]?1:0:_f5_; if(_f6_) {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), _f$_=[0,hkey,data,caml_check_bound(ndata,nidx)[1 + nidx]]; caml_check_bound(ndata,nidx)[1 + nidx] = _f$_; return 0} return 0}, _f8_=osize - 1 | 0, _f7_=0; if(! (_f8_ < 0)) {var i=_f7_; for(;;) {insert_bucket(caml_check_bound(odata,i)[1 + i]); var _f__=i + 1 | 0; if(_f8_ !== i){var i=_f__;continue} break}} var _f9_=0} else var _f9_=_f6_; return _f9_} 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 _f4_=h[2].length - 1 << 1 < h[1]?1:0; return _f4_?resize(h):_f4_} 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), _f3_=remove_bucket(caml_check_bound(h[2],i)[1 + i]); caml_check_bound(h[2],i)[1 + i] = _f3_; return 0} function find(h,key) {var hkey=caml_call2(H[2],h[3],key), _f2_=key_index(h,hkey), param$1=caml_check_bound(h[2],_f2_)[1 + _f2_], 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), _f1_=key_index(h,hkey), param$1=caml_check_bound(h[2],_f1_)[1 + _f1_], 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 _f0_=key_index(h,hkey); return find_in_bucket(caml_check_bound(h[2],_f0_)[1 + _f0_])} 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 _fY_=replace_bucket(l);return _fY_} catch(_fZ_) {_fZ_ = caml_wrap_exception(_fZ_); if(_fZ_ === 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 _fX_=h[2].length - 1 << 1 < h[1]?1:0; return _fX_?resize(h):_fX_} throw _fZ_}} function mem(h,key) {var hkey=caml_call2(H[2],h[3],key), _fW_=key_index(h,hkey), param$1=caml_check_bound(h[2],_fW_)[1 + _fW_], 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],_fU_=d$0.length - 1 - 1 | 0,_fT_=0; if(! (_fU_ < 0)) {var i=_fT_; 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 _fV_=i + 1 | 0; if(_fU_ !== i){var i=_fV_;continue a} break} break}} return 0} function fold(f,h,init) {var d$0=h[2],accu$1=[0,init],_fQ_=d$0.length - 1 - 1 | 0,_fP_=0; if(! (_fQ_ < 0)) {var i=_fP_; a: for(;;) {var _fR_=accu$1[1], b$0=caml_check_bound(d$0,i)[1 + i], b=b$0, accu=_fR_; 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 _fS_=i + 1 | 0; if(_fQ_ !== i){var i=_fS_;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],_fM_=d.length - 1 - 1 | 0,_fL_=0; if(! (_fM_ < 0)) {var i=_fL_; for(;;) {var _fN_=do_bucket(caml_check_bound(d,i)[1 + i]); caml_check_bound(d,i)[1 + i] = _fN_; var _fO_=i + 1 | 0; if(_fM_ !== i){var i=_fO_;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 _fH_=h[2], _fI_=0, mbl= fold_left$3 (function(m,b){return max$1(m,bucket_length(0,b))},_fI_,_fH_), histo=caml_make_vect(mbl + 1 | 0,0), _fJ_=h[2]; iter$5 (function(b) {var l=bucket_length(0,b), _fK_=caml_check_bound(histo,l)[1 + l] + 1 | 0; caml_check_bound(histo,l)[1 + l] = _fK_; return 0}, _fJ_); 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], _fD_=h[2], _fE_=0, mbl= fold_left$3 (function(m,b){return max$1(m,bucket_length_alive(0,b))},_fE_,_fD_), histo=caml_make_vect(mbl + 1 | 0,0), _fF_=h[2]; iter$5 (function(b) {var l=bucket_length_alive(0,b); size[1] = size[1] + l | 0; var _fG_=caml_check_bound(histo,l)[1 + l] + 1 | 0; caml_check_bound(histo,l)[1 + l] = _fG_; return 0}, _fF_); 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(_fC_){return aux(i$0,next,_fC_)}]} 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 _fz_=0,_fA_=0; return function(_fB_){return aux(_fA_,_fz_,_fB_)}} function to_seq_keys(m) {var _fv_=to_seq(m); function _fw_(_fy_){return _fy_[1]} return function(_fx_){return map(_fw_,_fv_,_fx_)}} function to_seq_values(m) {var _fr_=to_seq(m); function _fs_(_fu_){return _fu_[2]} return function(_ft_){return map(_fs_,_fr_,_ft_)}} 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(_t_[1],1)} function get_key$0(t){return caml_call2(_t_[3],t,0)} function get_key_copy$0(t){return caml_call2(_t_[4],t,0)} function set_key$0(t,k){return caml_call3(_t_[5],t,0,k)} function unset_key$0(t){return caml_call2(_t_[6],t,0)} function check_key$0(t){return caml_call2(_t_[7],t,0)} function blit_key$0(t1,t2){return caml_call5(_t_[8],t1,0,t2,0,1)} function get_data$1(t){return caml_call1(_t_[9],t)} function get_data_copy(t){return caml_call1(_t_[10],t)} function set_data(t,d){return caml_call2(_t_[11],t,d)} function unset_data(t){return caml_call1(_t_[12],t)} function check_data(t){return caml_call1(_t_[13],t)} function blit_data(t1,t2){return caml_call2(_t_[14],t1,t2)} 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], _fq_=include[1]; function create(sz){return caml_call2(_fq_,_cM_,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 create$6(param){return caml_call1(_t_[1],2)} function get_key1(t){return caml_call2(_t_[3],t,0)} function get_key1_copy(t){return caml_call2(_t_[4],t,0)} function set_key1(t,k){return caml_call3(_t_[5],t,0,k)} function unset_key1(t){return caml_call2(_t_[6],t,0)} function check_key1(t){return caml_call2(_t_[7],t,0)} function get_key2(t){return caml_call2(_t_[3],t,1)} function get_key2_copy(t){return caml_call2(_t_[4],t,1)} function set_key2(t,k){return caml_call3(_t_[5],t,1,k)} function unset_key2(t){return caml_call2(_t_[6],t,1)} function check_key2(t){return caml_call2(_t_[7],t,1)} function blit_key1(t1,t2){return caml_call5(_t_[8],t1,0,t2,0,1)} function blit_key2(t1,t2){return caml_call5(_t_[8],t1,1,t2,1,1)} function blit_key12(t1,t2){return caml_call5(_t_[8],t1,0,t2,0,2)} function get_data$2(t){return caml_call1(_t_[9],t)} function get_data_copy$0(t){return caml_call1(_t_[10],t)} function set_data$0(t,d){return caml_call2(_t_[11],t,d)} function unset_data$0(t){return caml_call1(_t_[12],t)} function check_data$0(t){return caml_call1(_t_[13],t)} function blit_data$0(t1,t2){return caml_call2(_t_[14],t1,t2)} 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], _fp_=caml_call2(H2[2],seed,k2) * 65599 | 0; return caml_call2(H1[2],seed,k1) + _fp_ | 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 _fo_=check_key1(c);return _fo_?check_key2(c):_fo_} 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],_fm_=[0,equal,hash]; function hash$0(seed,x){return caml_call1(H1[2],x)} var include=MakeSeeded$2([0,equal$0,hash$0],_fm_), 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], _fn_=include[1]; function create(sz){return caml_call2(_fn_,_cN_,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 create$7(n){return caml_call1(_t_[1],n)} function length$6(k){return caml_call1(_t_[2],k)} function get_key$1(t,n){return caml_call2(_t_[3],t,n)} function get_key_copy$1(t,n){return caml_call2(_t_[4],t,n)} function set_key$1(t,n,k){return caml_call3(_t_[5],t,n,k)} function unset_key$1(t,n){return caml_call2(_t_[6],t,n)} function check_key$1(t,n){return caml_call2(_t_[7],t,n)} function blit_key$1(t1,o1,t2,o2,l) {return caml_call5(_t_[8],t1,o1,t2,o2,l)} function get_data$3(t){return caml_call1(_t_[9],t)} function get_data_copy$1(t){return caml_call1(_t_[10],t)} function set_data$1(t,d){return caml_call2(_t_[11],t,d)} function unset_data$1(t){return caml_call1(_t_[12],t)} function check_data$1(t){return caml_call1(_t_[13],t)} function blit_data$1(t1,t2){return caml_call2(_t_[14],t1,t2)} function MakeSeeded$3(H) {function create(k,d) {var c=create$7(k.length - 1); set_data$1(c,d); var _fk_=k.length - 1 - 1 | 0,_fj_=0; if(! (_fk_ < 0)) {var i=_fj_; for(;;) {set_key$1(c,i,caml_check_bound(k,i)[1 + i]); var _fl_=i + 1 | 0; if(_fk_ !== i){var i=_fl_;continue} break}} return c} function hash(seed,k) {var h=[0,0],_ff_=k.length - 1 - 1 | 0,_fe_=0; if(! (_ff_ < 0)) {var i=_fe_; for(;;) {var _fg_=h[1],_fh_=caml_check_bound(k,i)[1 + i]; h[1] = (caml_call2(H[2],seed,_fh_) * 65599 | 0) + _fg_ | 0; var _fi_=i + 1 | 0; if(_ff_ !== i){var i=_fi_;continue} break}} return h[1]} function equal(c,k) {var len=k.length - 1,len$0=length$6(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],_fd_=caml_check_bound(k,i)[1 + i]; if(caml_call2(H[1],_fd_,ki)){var i$0=i - 1 | 0,i=i$0;continue} return 1} return 2} return 0}} function get_key(c) {var len=length$6(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 _fb_=k.length - 1 - 1 | 0,_fa_=0; if(! (_fb_ < 0)) {var i=_fa_; for(;;) {set_key$1(c,i,caml_check_bound(k,i)[1 + i]); var _fc_=i + 1 | 0; if(_fb_ !== i){var i=_fc_;continue} break}} return set_data$1(c,d)} function check_key(c) {var i$1=length$6(c) - 1 | 0,i=i$1; for(;;) {var _e9_=i < 0?1:0; if(_e9_) var _e__=_e9_; else {var _e$_=check_key$1(c,i); if(_e$_){var i$0=i - 1 | 0,i=i$0;continue} var _e__=_e$_} return _e__}} 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], _e8_=include[1]; function create(sz){return caml_call2(_e8_,_cO_,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]} 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$2, MakeSeeded$1], [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$3, MakeSeeded$2], [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$4, MakeSeeded$3], [0, function(_e7_) {return MakeSeeded$0 ([0,_e7_[3],_e7_[1],_e7_[2],_e7_[5],_e7_[4],_e7_[6],_e7_[7]])}]]; caml_register_global(809,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 _e5_=caml_ml_string_length(n) < 1?1:0, _e6_=_e5_ || (47 !== caml_string_get(n,0)?1:0); return _e6_} function is_implicit(n) {var _e0_=is_relative(n); if(_e0_) {var _e1_=caml_ml_string_length(n) < 2?1:0, _e2_=_e1_ || caml_string_notequal(sub$0(n,0,2),cst$103); if(_e2_) var _e3_=caml_ml_string_length(n) < 3?1:0, _e4_=_e3_ || caml_string_notequal(sub$0(n,0,3),cst$102); else var _e4_=_e2_} else var _e4_=_e0_; return _e4_} 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 _cW_=caml_sys_getenv(cst_TMPDIR),_cP_=_cW_} catch(_eZ_) {_eZ_ = caml_wrap_exception(_eZ_); if(_eZ_ !== Not_found)throw _eZ_; var _cP_=cst_tmp} function quote(s) {var l=caml_ml_string_length(s),b=create$2(l + 20 | 0); add_char(b,39); var _eX_=l - 1 | 0,_eW_=0; if(! (_eX_ < 0)) {var i=_eW_; for(;;) {if(39 === caml_string_get(s,i)) add_string(b,quotequote); else add_char(b,caml_string_get(s,i)); var _eY_=i + 1 | 0; if(_eX_ !== i){var i=_eY_;continue} break}} add_char(b,39); return contents(b)} function quote_command(cmd,stdin,stdout,stderr,args) {if(stderr) var f=stderr[1], _eQ_=caml_equal(stderr,stdout)?cst_2_1:cat(cst_2,quote(f)), _eR_=_eQ_; else var _eR_=cst$109; if(stdout) var f$0=stdout[1],_eS_=cat(cst$104,quote(f$0)); else var _eS_=cst$108; var _eT_=cat(_eS_,_eR_); if(stdin) var f$1=stdin[1],_eU_=cat(cst$105,quote(f$1)); else var _eU_=cst$107; var _eV_=cat(_eU_,_eT_); return cat(concat$1(cst$106,map$3(quote,[0,cmd,args])),_eV_)} function basename(_eP_) {return generic_basename(is_dir_sep,current_dir_name,_eP_)} function dirname(_eO_) {return generic_dirname(is_dir_sep,current_dir_name,_eO_)} 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, _cP_, quote, quote_command, basename, dirname]; function is_dir_sep$0(s,i) {var c=caml_string_get(s,i),_eL_=47 === c?1:0; if(_eL_) var _eM_=_eL_; else var _eN_=92 === c?1:0,_eM_=_eN_ || (58 === c?1:0); return _eM_} function is_relative$0(n) {var _eF_=caml_ml_string_length(n) < 1?1:0, _eG_=_eF_ || (47 !== caml_string_get(n,0)?1:0); if(_eG_) {var _eH_=caml_ml_string_length(n) < 1?1:0, _eI_=_eH_ || (92 !== caml_string_get(n,0)?1:0); if(_eI_) var _eJ_=caml_ml_string_length(n) < 2?1:0, _eK_=_eJ_ || (58 !== caml_string_get(n,1)?1:0); else var _eK_=_eI_} else var _eK_=_eG_; return _eK_} function is_implicit$0(n) {var _ew_=is_relative$0(n); if(_ew_) {var _ex_=caml_ml_string_length(n) < 2?1:0, _ey_=_ex_ || caml_string_notequal(sub$0(n,0,2),cst$113); if(_ey_) {var _ez_=caml_ml_string_length(n) < 2?1:0, _eA_=_ez_ || caml_string_notequal(sub$0(n,0,2),cst$112); if(_eA_) {var _eB_=caml_ml_string_length(n) < 3?1:0, _eC_=_eB_ || caml_string_notequal(sub$0(n,0,3),cst$111); if(_eC_) var _eD_=caml_ml_string_length(n) < 3?1:0, _eE_=_eD_ || caml_string_notequal(sub$0(n,0,3),cst$110); else var _eE_=_eC_} else var _eE_=_eA_} else var _eE_=_ey_} else var _eE_=_ew_; return _eE_} function check_suffix$0(name,suff) {var _et_=caml_ml_string_length(suff) <= caml_ml_string_length(name)?1:0; if(_et_) var s= sub$0 (name, caml_ml_string_length(name) - caml_ml_string_length(suff) | 0, caml_ml_string_length(suff)), _eu_=lowercase_ascii$1(suff), _ev_=caml_string_equal(lowercase_ascii$1(s),_eu_); else var _ev_=_et_; return _ev_} 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), _es_=lowercase_ascii$1(suffix); return caml_string_equal(lowercase_ascii$1(r),_es_) ?[0,sub$0(filename,0,len_f - len_s | 0)] :0} return 0} try {var _cV_=caml_sys_getenv(cst_TEMP),temp_dir_name=_cV_} catch(_er_) {_er_ = caml_wrap_exception(_er_); if(_er_ !== Not_found)throw _er_; 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 _ep_=1; if(! (n < 1)) {var j=_ep_; for(;;) {add_char(b,92); var _eq_=j + 1 | 0; if(n !== j){var j=_eq_;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 _en_=0; if(counter < 50) {var counter$1=counter + 1 | 0; return loop_bs(counter$1,_en_,i$0)} return caml_trampoline_return(loop_bs,[0,_en_,i$0])} if(92 === c) {var _eo_=0; if(counter < 50) {var counter$0=counter + 1 | 0; return loop_bs(counter$0,_eo_,i$0)} return caml_trampoline_return(loop_bs,[0,_eo_,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 _em_=i$0 + 1 | 0; if(counter < 50) {var counter$1=counter + 1 | 0;return loop$0(counter$1,_em_)} return caml_trampoline_return(loop$0,[0,_em_])} 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], _ed_= caml_equal(stderr,stdout) ?cst_2_1$0 :cat(cst_2$0,quote_cmd_filename(f)), _ee_=_ed_; else var _ee_=cst$125; var _ef_=[0,_ee_,_cQ_]; if(stdout) var f$0=stdout[1],_eg_=cat(cst$117,quote_cmd_filename(f$0)); else var _eg_=cst$124; var _eh_=[0,_eg_,_ef_]; if(stdin) var f$1=stdin[1],_ei_=cat(cst$118,quote_cmd_filename(f$1)); else var _ei_=cst$123; var s=concat$1(cst$119,map$3(quote$0,args)), b=create$2(caml_ml_string_length(s) + 20 | 0), _ej_=[0,_ei_,_eh_]; iter$4 (function(c) {var switch$0=0; if(62 <= c) {var _el_=c - 63 | 0; if(60 < _el_ >>> 0) {if(! (62 <= _el_))switch$0 = 1} else if(31 === _el_)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 _ek_=[0,cst$120,[0,contents(b),_ej_]]; return concat$1(cst$122,[0,cst$121,[0,quote_cmd_filename(cmd),_ek_]])} function drive_and_path(s) {var _d$_=2 <= caml_ml_string_length(s)?1:0; if(_d$_) {var param=caml_string_get(s,0),switch$0=0; if(91 <= param) {if(! (25 < (param - 97 | 0) >>> 0))switch$0 = 1} else if(65 <= param)switch$0 = 1; var _ea_=switch$0?1:0,_eb_=_ea_?58 === caml_string_get(s,1)?1:0:_ea_} else var _eb_=_d$_; if(_eb_) {var _ec_=sub$0(s,2,caml_ml_string_length(s) - 2 | 0); return [0,sub$0(s,0,2),_ec_]} 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(_d__) {return generic_basename(is_dir_sep$0,current_dir_name$1,_d__)} function dirname$1(_d9_) {return generic_dirname(is_dir_sep$0,current_dir_name$1,_d9_)} 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, _cP_, 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) {var n=caml_ml_string_length(name) - caml_ml_string_length(suff) | 0; return 0 <= n?sub$0(name,0,n):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(_d8_){return caml_call1(_cb_[2],0)}]; function temp_file_name(temp_dir,prefix,suffix) {var _d6_=caml_obj_tag(prng$0), _d7_= 250 === _d6_?prng$0[1]:246 === _d6_?force_lazy_block(prng$0):prng$0, rnd=caml_call1(_cb_[4],_d7_) & 16777215; return concat$4(temp_dir,caml_call3(sprintf(_cR_),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,_cS_,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,_d4_,_d3_,prefix,suffix) {if(opt)var sth=opt[1],mode=sth;else var mode=_cT_; if(_d4_)var sth$0=_d4_[1],perms=sth$0;else var perms=384; if(_d3_) var sth$1=_d3_[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 _d5_=[0,name,open_out_gen([0,1,[0,3,[0,5,mode]]],perms,name)]; return _d5_} 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(810,Stdlib_Filename,"Stdlib__Filename"); function add$1(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 _cU_; 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 _d2_=Math.atan2(x[2],x[1]);return [254,Math.log(norm(x)),_d2_]} function pow(x,y){return exp(mul(y,log(x)))} var Stdlib_Complex= [0, zero$4, one$4, i, neg, conj, add$1, sub$4, mul, inv, div, sqrt, norm2, norm, arg, polar, exp, log, pow]; caml_register_global(811,Stdlib_Complex,"Stdlib__Complex"); var Stdlib_ArrayLabels= [0, make_float, init$2, create_matrix, create_matrix, append$1, concat$2, sub$1, copy$1, fill$0, blit$1, to_list$1, of_list, iter$5, iteri$2, map$6, mapi$2, fold_left$3, fold_left_map$0, fold_right$2, iter2$0, map2$0, for_all$2, exists$2, for_all2$0, exists2$0, mem$0, memq$0, find_opt$0, find_map$0, split$0, combine$0, sort, fast_sort$0, fast_sort$0, to_seq$4, to_seqi$1, of_seq$2, Floatarray]; caml_register_global(812,Stdlib_ArrayLabels,"Stdlib__ArrayLabels"); var Stdlib_ListLabels= [0, length, compare_lengths, compare_length_with, cons$0, hd, tl, nth, nth_opt, rev, init, append, rev_append, flatten, flatten, equal$5, compare$5, iter$2, iteri, map$3, mapi, rev_map, filter_map$0, concat_map, fold_left_map, fold_left$0, fold_right, iter2, map2, rev_map2, fold_left2, fold_right2, for_all, exists, for_all2, exists2, mem, memq, find, find_opt, find_map, find_all, find_all, filteri, partition, partition_map, 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(813,Stdlib_ListLabels,"Stdlib__ListLabels"); var Stdlib_BytesLabels= [0, make$0, init$0, empty$0, copy, to_bytes, of_bytes, sub, sub_string, extend, fill, blit, blit$0, concat$0, cat$0, iter$3, iteri$0, map$4, mapi$0, fold_left$1, fold_right$0, for_all$0, exists$0, 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$7, equal$7, starts_with, ends_with, unsafe_to_string, unsafe_of_string, split_on_char, to_seq$2, to_seqi, of_seq$0, 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(814,Stdlib_BytesLabels,"Stdlib__BytesLabels"); var Stdlib_StringLabels= [0, make$1, init$1, empty$1, of_bytes, to_bytes, concat$1, cat, equal$8, compare$8, starts_with$0, ends_with$0, contains_from$0, rcontains_from$0, contains$0, sub$0, split_on_char$0, map$5, mapi$1, fold_left$2, fold_right$1, for_all$1, exists$1, trim$0, escaped$1, uppercase_ascii$1, lowercase_ascii$1, capitalize_ascii$0, uncapitalize_ascii$0, iter$4, iteri$1, 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, 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(815,Stdlib_StringLabels,"Stdlib__StringLabels"); var Stdlib_MoreLabels=[0,Stdlib_Hashtbl,Stdlib_Map,Stdlib_Set]; caml_register_global(816,Stdlib_MoreLabels,"Stdlib__MoreLabels"); var Stdlib_StdLabels=[0]; caml_register_global(817,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 _d0_=caml_check_bound(max,col)[1 + col] - 1 | 0,_dZ_=0; if(! (_d0_ < 0)) {var j=_dZ_; for(;;) {caml_check_bound(idx,col)[1 + col] = j; cloop(arr,idx,f,col + 1 | 0,max); var _d1_=j + 1 | 0; if(_d0_ !== j){var j=_d1_;continue} break}} return 0} function floop(arr,idx,f,col,max) {if(0 <= col) {var _dX_=caml_check_bound(max,col)[1 + col],_dW_=1; if(! (_dX_ < 1)) {var j=_dW_; for(;;) {caml_check_bound(idx,col)[1 + col] = j; floop(arr,idx,f,col - 1 | 0,max); var _dY_=j + 1 | 0; if(_dX_ !== j){var j=_dY_;continue} break}} return 0} return caml_ba_set_generic(arr,idx,caml_call1(f,idx))} function init$5(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),_dT_=n - 1 | 0,_dS_=0; if(! (_dT_ < 0)) {var i=_dS_; for(;;) {var _dU_=runtime.caml_ba_dim(a,i); caml_check_bound(d,i)[1 + i] = _dU_; var _dV_=i + 1 | 0; if(_dT_ !== i){var i=_dV_;continue} break}} return d} function size_in_bytes(arr) {var _dR_=fold_left$3(caml_mul,1,dims(arr)); return caml_mul(kind_size_in_bytes(caml_ba_kind(arr)),_dR_)} function create$8(kind,layout){return caml_ba_create(kind,layout,[0])} function get$2(arr){return runtime.caml_ba_get_generic(arr,[0])} function set$1(arr) {var _dP_=[0]; return function(_dQ_){return caml_ba_set_generic(arr,_dP_,_dQ_)}} 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$1(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 _dO_=caml_ba_dim_1(arr); return caml_mul(kind_size_in_bytes(caml_ba_kind(arr)),_dO_)} 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$6(kind,layout,dim,f) {var arr=create$9(kind,layout,dim); if(layout) {var _dM_=1; if(! (dim < 1)) {var i$0=_dM_; for(;;) {caml_ba_set_1(arr,i$0,caml_call1(f,i$0)); var _dN_=i$0 + 1 | 0; if(dim !== i$0){var i$0=_dN_;continue} break}} return arr} var _dK_=dim - 1 | 0,_dJ_=0; if(! (_dK_ < 0)) {var i=_dJ_; for(;;) {caml_ba_set_1(arr,i,caml_call1(f,i)); var _dL_=i + 1 | 0; if(_dK_ !== i){var i=_dL_;continue} break}} return arr} function of_array(kind,layout,data) {var ba=create$9(kind,layout,data.length - 1), ofs=layout?1:0, _dH_=data.length - 1 - 1 | 0, _dG_=0; if(! (_dH_ < 0)) {var i=_dG_; for(;;) {caml_ba_set_1(ba,i + ofs | 0,caml_check_bound(data,i)[1 + i]); var _dI_=i + 1 | 0; if(_dH_ !== i){var i=_dI_;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 _dE_=caml_ba_dim_2(arr),_dF_=caml_ba_dim_1(arr); return caml_mul (caml_mul(kind_size_in_bytes(caml_ba_kind(arr)),_dF_),_dE_)} 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$7(kind,layout,dim1,dim2,f) {var arr=create$10(kind,layout,dim1,dim2); if(layout) {var _dA_=1; if(! (dim2 < 1)) {var j$0=_dA_; for(;;) {var _dB_=1; if(! (dim1 < 1)) {var i$0=_dB_; for(;;) {caml_ba_set_2(arr,i$0,j$0,caml_call2(f,i$0,j$0)); var _dD_=i$0 + 1 | 0; if(dim1 !== i$0){var i$0=_dD_;continue} break}} var _dC_=j$0 + 1 | 0; if(dim2 !== j$0){var j$0=_dC_;continue} break}} return arr} var _dv_=dim1 - 1 | 0,_du_=0; if(! (_dv_ < 0)) {var i=_du_; for(;;) {var _dx_=dim2 - 1 | 0,_dw_=0; if(! (_dx_ < 0)) {var j=_dw_; for(;;) {caml_ba_set_2(arr,i,j,caml_call2(f,i,j)); var _dz_=j + 1 | 0; if(_dx_ !== j){var j=_dz_;continue} break}} var _dy_=i + 1 | 0; if(_dv_ !== i){var i=_dy_;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, _dp_=dim1 - 1 | 0, _do_=0; if(! (_dp_ < 0)) {var i=_do_; for(;;) {var row=caml_check_bound(data,i)[1 + i]; if(row.length - 1 !== dim2) invalid_arg(cst_Bigarray_Array2_of_array_n); var _dr_=dim2 - 1 | 0,_dq_=0; if(! (_dr_ < 0)) {var j=_dq_; for(;;) {caml_ba_set_2 (ba,i + ofs | 0,j + ofs | 0,caml_check_bound(row,j)[1 + 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 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 _dl_=runtime.caml_ba_dim_3(arr), _dm_=caml_ba_dim_2(arr), _dn_=caml_ba_dim_1(arr); return caml_mul (caml_mul (caml_mul(kind_size_in_bytes(caml_ba_kind(arr)),_dn_),_dm_), _dl_)} 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$8(kind,layout,dim1,dim2,dim3,f) {var arr=create$11(kind,layout,dim1,dim2,dim3); if(layout) {var _df_=1; if(! (dim3 < 1)) {var k$0=_df_; for(;;) {var _dg_=1; if(! (dim2 < 1)) {var j$0=_dg_; for(;;) {var _di_=1; if(! (dim1 < 1)) {var i$0=_di_; for(;;) {caml_ba_set_3(arr,i$0,j$0,k$0,caml_call3(f,i$0,j$0,k$0)); var _dk_=i$0 + 1 | 0; if(dim1 !== i$0){var i$0=_dk_;continue} break}} var _dj_=j$0 + 1 | 0; if(dim2 !== j$0){var j$0=_dj_;continue} break}} var _dh_=k$0 + 1 | 0; if(dim3 !== k$0){var k$0=_dh_;continue} break}} return arr} var _c9_=dim1 - 1 | 0,_c8_=0; if(! (_c9_ < 0)) {var i=_c8_; for(;;) {var _c$_=dim2 - 1 | 0,_c__=0; if(! (_c$_ < 0)) {var j=_c__; for(;;) {var _dc_=dim3 - 1 | 0,_db_=0; if(! (_dc_ < 0)) {var k=_db_; for(;;) {caml_ba_set_3(arr,i,j,k,caml_call3(f,i,j,k)); var _de_=k + 1 | 0; if(_dc_ !== k){var k=_de_;continue} break}} var _dd_=j + 1 | 0; if(_c$_ !== j){var j=_dd_;continue} break}} var _da_=i + 1 | 0; if(_c9_ !== i){var i=_da_;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, _c0_=dim1 - 1 | 0, _cZ_=0; if(! (_c0_ < 0)) {var i=_cZ_; for(;;) {var row=caml_check_bound(data,i)[1 + i]; if(row.length - 1 !== dim2) invalid_arg(cst_Bigarray_Array3_of_array_n); var _c2_=dim2 - 1 | 0,_c1_=0; if(! (_c2_ < 0)) {var j=_c1_; 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 _c5_=dim3 - 1 | 0,_c4_=0; if(! (_c5_ < 0)) {var k=_c4_; for(;;) {caml_ba_set_3 (ba, i + ofs | 0, j + ofs | 0, k + ofs | 0, caml_check_bound(col,k)[1 + k]); var _c7_=k + 1 | 0; if(_c5_ !== k){var k=_c7_;continue} break}} var _c6_=j + 1 | 0; if(_c2_ !== j){var j=_c6_;continue} break}} var _c3_=i + 1 | 0; if(_c0_ !== i){var i=_c3_;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$5,dims,size_in_bytes], [0, create$8, of_value, caml_ba_change_layout, size_in_bytes$0, get$2, set$1, of_value], [0, create$9, init$6, caml_ba_change_layout, size_in_bytes$1, slice, of_array], [0, create$10, init$7, caml_ba_change_layout, size_in_bytes$2, slice_left, slice_right, of_array$0], [0, create$11, init$8, 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(818,Stdlib_Bigarray,"Stdlib__Bigarray"); return} (function(){return this}())); //# 1 "../inventaire_linge/.inventaire_linge.objs/inventaire_linge.cma.js" (function(joo_global_object) {"use strict"; var runtime=joo_global_object.jsoo_runtime, caml_list_of_js_array=runtime.caml_list_of_js_array, caml_register_global=runtime.caml_register_global, 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("2021-2022"), destinataires= caml_string_of_jsbytes("dubuval@gmail.com,guy.grange@wanadoo.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]]]]]), cst_Chambre_1$0=caml_string_of_jsbytes("Chambre 1"), cst_Chambre_2$0=caml_string_of_jsbytes("Chambre 2"), cst_Chambre_3$0=caml_string_of_jsbytes("Chambre 3"), cst_S_jour$0=caml_string_of_jsbytes("S\xc3\xa9jour"), cst_Salle_de_bains_1$0=caml_string_of_jsbytes("Salle de bains 1"), cst_Salle_de_bains_2$0=caml_string_of_jsbytes("Salle de bains 2"), cst_ch1$0=caml_string_of_jsbytes("ch1"), cst_ch2$0=caml_string_of_jsbytes("ch2"), cst_ch3$0=caml_string_of_jsbytes("ch3"), cst_sj$0=caml_string_of_jsbytes("sj"), cst_sdb1$0=caml_string_of_jsbytes("sdb1"), cst_sdb2$0=caml_string_of_jsbytes("sdb2"), tarif$0=caml_string_of_jsbytes("2021-2022"), destinataires$0= caml_string_of_jsbytes("dubuval@gmail.com,guy.grange@wanadoo.fr"), pieces$0=[0,0,[0,1,[0,2,[0,3,[0,4,[0,5,0]]]]]], fournitures$0= 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]]]]]), Inventaire_linge=[0]; caml_register_global(32,Inventaire_linge,"Inventaire_linge__"); 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_Inventaire_li= [0, tarif, destinataires, pieces, short_string_of_piece, long_string_of_piece, fournitures]; caml_register_global (33, Inventaire_linge_Inventaire_li, "Inventaire_linge__Inventaire_linge_modifie"); function short_string_of_piece$0(param) {switch(param) {case 0:return cst_ch1$0; case 1:return cst_ch2$0; case 2:return cst_ch3$0; case 3:return cst_sj$0; case 4:return cst_sdb1$0; default:return cst_sdb2$0}} function long_string_of_piece$0(param) {switch(param) {case 0:return cst_Chambre_1$0; case 1:return cst_Chambre_2$0; case 2:return cst_Chambre_3$0; case 3:return cst_S_jour$0; case 4:return cst_Salle_de_bains_1$0; default:return cst_Salle_de_bains_2$0}} var Inventaire_linge$0= [0, tarif$0, destinataires$0, pieces$0, short_string_of_piece$0, long_string_of_piece$0, fournitures$0]; caml_register_global(34,Inventaire_linge$0,"Inventaire_linge"); return} (function(){return this}())); //# 1 "../.js/js_of_ocaml/js_of_ocaml.cma.js" (function(joo_global_object) {"use strict"; var runtime=joo_global_object.jsoo_runtime, caml_exn_with_js_backtrace=runtime.caml_exn_with_js_backtrace, 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_Js_of_ocaml_Js_Error=caml_string_of_jsbytes("Js_of_ocaml__Js.Error"), cst_jsError=caml_string_of_jsbytes("jsError"), 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_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("3.11.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"), dummy_string=caml_string_of_jsbytes(""), dummy_int64=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, Stdlib_Callback=global_data.Stdlib__Callback, 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, Js_of_ocaml=[0]; caml_register_global(1632,Js_of_ocaml,"Js_of_ocaml__"); var Poly=[0], _f_=[0,caml_string_of_jsbytes("lib/js_of_ocaml/dom.ml"),351,67], _g_=[0,caml_string_of_jsbytes("transparent")], _h_=[0,caml_string_of_jsbytes("native")], _l_=[0,caml_string_of_jsbytes("lib/js_of_ocaml/dom_html.ml"),2828,58], _k_=[0,caml_string_of_jsbytes("lib/js_of_ocaml/dom_html.ml"),2827,61], _j_= [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")], _n_=[0,caml_string_of_jsbytes("lib/js_of_ocaml/form.ml"),177,13], _m_=[0,1], _o_=[0,caml_string_of_jsbytes("lib/js_of_ocaml/regexp.ml"),34,64], _p_=[0,caml_string_of_jsbytes(""),0], _cj_=[0,[8,[0,0,0],0,0,[2,0,0]],caml_string_of_jsbytes("%f%s")], _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")], _b7_=[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")], _b6_= 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")]), _b5_= [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")], _bZ_= [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)")], _b0_= [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%%)")], _b1_= [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)")], _b2_= [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)")], _b3_= [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%%)")], _b4_= [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)")], _w_=[0,240,248,255], _x_=[0,250,235,215], _y_=[0,0,255,255], _z_=[0,127,255,212], _A_=[0,240,255,255], _B_=[0,245,245,220], _C_=[0,255,228,196], _D_=[0,0,0,0], _E_=[0,255,235,205], _F_=[0,0,0,255], _G_=[0,138,43,226], _H_=[0,165,42,42], _I_=[0,222,184,135], _J_=[0,95,158,160], _K_=[0,127,255,0], _L_=[0,210,105,30], _M_=[0,255,127,80], _N_=[0,100,149,237], _O_=[0,255,248,220], _P_=[0,220,20,60], _Q_=[0,0,255,255], _R_=[0,0,0,139], _S_=[0,0,139,139], _T_=[0,184,134,11], _U_=[0,169,169,169], _V_=[0,0,100,0], _W_=[0,169,169,169], _X_=[0,189,183,107], _Y_=[0,139,0,139], _Z_=[0,85,107,47], ___=[0,255,140,0], _$_=[0,153,50,204], _aa_=[0,139,0,0], _ab_=[0,233,150,122], _ac_=[0,143,188,143], _ad_=[0,72,61,139], _ae_=[0,47,79,79], _af_=[0,47,79,79], _ag_=[0,0,206,209], _ah_=[0,148,0,211], _ai_=[0,255,20,147], _aj_=[0,0,191,255], _ak_=[0,105,105,105], _al_=[0,105,105,105], _am_=[0,30,144,255], _an_=[0,178,34,34], _ao_=[0,255,250,240], _ap_=[0,34,139,34], _aq_=[0,255,0,255], _ar_=[0,220,220,220], _as_=[0,248,248,255], _at_=[0,255,215,0], _au_=[0,218,165,32], _av_=[0,128,128,128], _aw_=[0,128,128,128], _ax_=[0,0,128,0], _ay_=[0,173,255,47], _az_=[0,240,255,240], _aA_=[0,255,105,180], _aB_=[0,205,92,92], _aC_=[0,75,0,130], _aD_=[0,255,255,240], _aE_=[0,240,230,140], _aF_=[0,230,230,250], _aG_=[0,255,240,245], _aH_=[0,124,252,0], _aI_=[0,255,250,205], _aJ_=[0,173,216,230], _aK_=[0,240,128,128], _aL_=[0,224,255,255], _aM_=[0,250,250,210], _aN_=[0,211,211,211], _aO_=[0,144,238,144], _aP_=[0,211,211,211], _aQ_=[0,255,182,193], _aR_=[0,255,160,122], _aS_=[0,32,178,170], _aT_=[0,135,206,250], _aU_=[0,119,136,153], _aV_=[0,119,136,153], _aW_=[0,176,196,222], _aX_=[0,255,255,224], _aY_=[0,0,255,0], _aZ_=[0,50,205,50], _a0_=[0,250,240,230], _a1_=[0,255,0,255], _a2_=[0,128,0,0], _a3_=[0,102,205,170], _a4_=[0,0,0,205], _a5_=[0,186,85,211], _a6_=[0,147,112,219], _a7_=[0,60,179,113], _a8_=[0,123,104,238], _a9_=[0,0,250,154], _a__=[0,72,209,204], _a$_=[0,199,21,133], _ba_=[0,25,25,112], _bb_=[0,245,255,250], _bc_=[0,255,228,225], _bd_=[0,255,228,181], _be_=[0,255,222,173], _bf_=[0,0,0,128], _bg_=[0,253,245,230], _bh_=[0,128,128,0], _bi_=[0,107,142,35], _bj_=[0,255,165,0], _bk_=[0,255,69,0], _bl_=[0,218,112,214], _bm_=[0,238,232,170], _bn_=[0,152,251,152], _bo_=[0,175,238,238], _bp_=[0,219,112,147], _bq_=[0,255,239,213], _br_=[0,255,218,185], _bs_=[0,205,133,63], _bt_=[0,255,192,203], _bu_=[0,221,160,221], _bv_=[0,176,224,230], _bw_=[0,128,0,128], _bx_=[0,255,0,0], _by_=[0,188,143,143], _bz_=[0,65,105,225], _bA_=[0,139,69,19], _bB_=[0,250,128,114], _bC_=[0,244,164,96], _bD_=[0,46,139,87], _bE_=[0,255,245,238], _bF_=[0,160,82,45], _bG_=[0,192,192,192], _bH_=[0,135,206,235], _bI_=[0,106,90,205], _bJ_=[0,112,128,144], _bK_=[0,112,128,144], _bL_=[0,255,250,250], _bM_=[0,0,255,127], _bN_=[0,70,130,180], _bO_=[0,210,180,140], _bP_=[0,0,128,128], _bQ_=[0,216,191,216], _bR_=[0,255,99,71], _bS_=[0,64,224,208], _bT_=[0,238,130,238], _bU_=[0,245,222,179], _bV_=[0,255,255,255], _bW_=[0,245,245,245], _bX_=[0,255,255,0], _bY_=[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], blit=Stdlib_String[42], copy=Stdlib_String[43], fill=Stdlib_String[44], uppercase=Stdlib_String[45], lowercase=Stdlib_String[46], capitalize=Stdlib_String[47], uncapitalize=Stdlib_String[48], get_uint8=Stdlib_String[49], get_int8=Stdlib_String[50], get_uint16_ne=Stdlib_String[51], get_uint16_be=Stdlib_String[52], get_uint16_le=Stdlib_String[53], get_int16_ne=Stdlib_String[54], get_int16_be=Stdlib_String[55], get_int16_le=Stdlib_String[56], get_int32_ne=Stdlib_String[57], get_int32_be=Stdlib_String[58], get_int32_le=Stdlib_String[59], get_int64_ne=Stdlib_String[60], get_int64_be=Stdlib_String[61], get_int64_le=Stdlib_String[62]; 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, 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(1635,Js_of_ocaml_Import,"Js_of_ocaml__Import"); var global=joo_global_object, Unsafe=[0,global], no_handler=null, t39=undefined; function return$0(_gH_){return _gH_} 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 _gG_=1 - (x == no_handler?1:0);return _gG_?caml_call1(f,x):_gG_} 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 _gF_(x){return [0,x]} return case$0(x,function(param){return 0},_gF_)} var Opt= [0, no_handler, return$0, map$0, bind, test, iter$0, case$0, get, option, to_option]; function return$1(_gE_){return _gE_} 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 _gD_=x !== t39?1:0;return _gD_?caml_call1(f,x):_gD_} 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 _gC_(x){return [0,x]} return case$1(x,function(param){return 0},_gC_)} 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 _gA_(param){return caml_call1(g,x)} var _gB_=caml_call1(f,x); return caml_call2(Opt[8],_gB_,_gA_)} function coerce_opt(x,f,g) {function _gy_(param){return caml_call1(g,x)} var _gz_=caml_call2(Opt[4],x,f); return caml_call2(Opt[8],_gz_,_gy_)} 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(_gx_){return _gx_} function match_result(_gw_){return _gw_} var t121=Unsafe[1].Date, math=Unsafe[1].Math, Error=[248,cst_Js_of_ocaml_Js_Error,caml_fresh_oo_id(0)], error_constr=Unsafe[1].Error; caml_call2(Stdlib_Callback[2],cst_jsError,[0,Error,{}]); function raise_js_error(exn){throw exn} 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,caml_string_of_jsstring(e.toString())]} 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 string_of_error(e){return caml_string_of_jsstring(e.toString())} function export_js(field,x) {return runtime.caml_js_export_var(0)[field] = x} function export$0(field,x) {return export_js(caml_jsstring_of_string(field),x)} function export_all(obj) {var t25=object_keys(obj), t24= caml_js_wrap_callback (function(key,param,_gv_){return export_js(key,obj[key])}); return t25.forEach(t24)} var _c_=runtime.caml_js_error_of_exception,_d_=caml_exn_with_js_backtrace; function _e_(_gu_){return _gu_} var Js_of_ocaml_Js= [0, no_handler, function(_gt_){return _gt_}, t39, _e_, 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, t121, t121, t121, t121, t121, t121, t121, t121, t121, math, error_constr, string_of_error, raise_js_error, _d_, _c_, Error, JSON, decodeURI, decodeURIComponent, encodeURI, encodeURIComponent, escape, unescape, isNaN, parseInt, parseFloat, coerce, coerce_opt, export$0, export_all, Unsafe]; caml_register_global(1639,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 _gs_=nodeList.item(i),match=caml_call1(Opt[10],_gs_); 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) {var switcher=match - 1 | 0; switch(switcher) {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 e$0=event,res$0=caml_call1(f,e$0); if(1 - (res$0 | 0))e$0.returnValue = res$0; return res$0}} 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 e$0=event,res$0=caml_call2(f,this$0,e$0); if(1 - (res$0 | 0))e$0.returnValue = res$0; return res$0})} function invoke_handler(f,this$0,event){return f.call(this$0,event)} function eventTarget(e) {function _gp_(param) {function _gr_(param){throw Stdlib[8]} return caml_call2(Opt[8],e.srcElement,_gr_)} var target=caml_call2(Opt[8],e.target,_gp_); if(target instanceof Unsafe[1].Node) {if(3 === target.nodeType) {var _gq_=function(param){throw [0,Assert_failure,_f_]}; return caml_call2(Opt[8],target.parentNode,_gq_)} return target} return target} 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 _gm_=[0,t48,e,[0]]; return function(_gn_,_go_) {return runtime.caml_js_call(_gm_,_gn_,_go_)}}; 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(b){return t49.capture = b}); iter(once,function(b){return t49.once = b}); iter(passive,function(b){return t49.passive = b}); 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(ev) {return caml_call1(Optdef[5],ev.preventDefault) ?ev.preventDefault() :ev.returnValue = ! ! 0} 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){return t63.bubbles = ! ! x},bubbles); opt_iter(function(x){return t63.cancelable = ! ! x},cancelable); opt_iter(function(x){return t63.detail = x},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(1642,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 (1643,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 _gi_=0; if(endings) var _gj_=116179762 <= endings[1]?_g_:_h_,_gk_=_gj_; else var _gk_=0; var _gl_=[0,[0,cst_type,contentType],[0,[0,cst_endings,_gk_],_gi_]], 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}, _gl_), 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 _gg_(param) {var _gh_=param[1]; if(155580615 === _gh_){var s=param[2];return s} if(486041214 <= _gh_) {if(1037850489 <= _gh_){var a=param[2];return a} var a$0=param[2]; return a$0} if(288368849 <= _gh_) {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],_gg_,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(_gf_){return _gf_},string,arrayBuffer$0], ReaderEvent, filename, fileReader, addEventListener]; caml_register_global(1645,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), 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, 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 _gd_(o){return o} function _ge_(param) {var t8=loc.protocol,t7=loc.hostname,port=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,port.length,0)) {var t12=loc.port;return t13.concat(":",t12)} return t13} return caml_call3(Optdef[7],loc.origin,_ge_,_gd_)} var _i_=Unsafe[1],t22=_i_.document; function getElementById(id) {function _ga_(pnode){return pnode} function _gb_(param){throw Stdlib[8]} var t15=caml_jsstring_of_string(id),_gc_=t22.getElementById(t15); return caml_call3(Opt[7],_gc_,_gb_,_ga_)} function getElementById_exn(id) {function _f8_(pnode){return pnode} function _f9_(param) {var _f$_=caml_call2(Stdlib_Printf[4],_j_,id); return caml_call1(Stdlib[2],_f$_)} var t17=caml_jsstring_of_string(id),_f__=t22.getElementById(t17); return caml_call3(Opt[7],_f__,_f9_,_f8_)} function getElementById_opt(id) {var t19=caml_jsstring_of_string(id),_f7_=t22.getElementById(t19); return caml_call1(Opt[10],_f7_)} function getElementById_coerce(id,coerce) {function _f3_(e) {var _f6_=caml_call1(coerce,e);return caml_call1(Opt[10],_f6_)} function _f4_(param){return 0} var t21=caml_jsstring_of_string(id),_f5_=t22.getElementById(t21); return caml_call3(Opt[7],_f5_,_f4_,_f3_)} 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 _fX_=createElementSyntax[1]; if(785140586 === _fX_) {try {var el=t22.createElement('<input name="x">'), _f0_=el.tagName.toLowerCase() === "input"?1:0, _f1_=_f0_?el.name === "x"?1:0:_f0_, _fY_=_f1_} catch(_f2_){var _fY_=0} var _fZ_=_fY_?982028505:-1003883683; createElementSyntax[1] = _fZ_; continue} if(982028505 <= _fX_) {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 res=createElement(doc,elt); opt_iter(type,function(t){return res.type = t}); opt_iter(name,function(n){return res.name = n}); return res}} 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 c=unsafeCreateElement(doc,cst_canvas); if(1 - caml_call1(Opt[5],c.getContext))throw Canvas_not_available; return c} 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,_fW_=caml_jsstring_of_string(tag); return t56.toLowerCase() === _fW_?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 eventRelatedTarget(e) {function _fT_(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 _fU_=function(param){throw [0,Assert_failure,_k_]}; return caml_call2(Optdef[8],e.fromElement,_fU_)} function _fV_(param){throw [0,Assert_failure,_l_]} return caml_call2(Optdef[8],e.toElement,_fV_)} return caml_call2(Optdef[8],e.relatedTarget,_fT_)} function eventAbsolutePosition(e) {var body=t22.body,html=t22.documentElement; return [0, (e.clientX + body.scrollLeft | 0) + html.scrollLeft | 0, (e.clientY + body.scrollTop | 0) + html.scrollTop | 0]} function eventAbsolutePosition$0(e) {function _fP_(x) {function _fR_(y){return [0,x,y]} function _fS_(param){return eventAbsolutePosition(e)} return caml_call3(Optdef[7],e.pageY,_fS_,_fR_)} function _fQ_(param){return eventAbsolutePosition(e)} return caml_call3(Optdef[7],e.pageX,_fQ_,_fP_)} function elementClientPosition(e) {var r=e.getBoundingClientRect(),body=t22.body,html=t22.documentElement; return [0, ((r.left | 0) - body.clientLeft | 0) - html.clientLeft | 0, ((r.top | 0) - body.clientTop | 0) - html.clientTop | 0]} function getDocumentScroll(param) {var body=t22.body,html=t22.documentElement; return [0, body.scrollLeft + html.scrollLeft | 0, body.scrollTop + html.scrollTop | 0]} function buttonPressed(ev) {function _fN_(x){return x} function _fO_(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,_fO_,_fN_)} function addMousewheelEventListenerWith(e,capture,once,passive,h) {var t95=createDiv(t22); t95.setAttribute("onmousewheel","return;"); if(typeof t95.onmousewheel === "function") {var _fJ_= handler (function(e) {function _fL_(param){return 0} var dx= (- caml_call2(Optdef[8],e.wheelDeltaX,_fL_) | 0) / 40 | 0; function _fM_(param){return e.wheelDelta} var dy= (- caml_call2(Optdef[8],e.wheelDeltaY,_fM_) | 0) / 40 | 0; return caml_call3(h,e,dx,dy)}); return addEventListenerWithOptions (e,Event$0[14],capture,once,passive,_fJ_)} var _fK_= 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,_fK_)} 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) {var switcher=param - 16 | 0; switch(switcher){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) {var switcher=param - 16 | 0; switch(switcher){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) {var switcher$0=param - 12 | 0; switch(switcher$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 _fI_=switcher; if(67 <= _fI_) switch(_fI_) {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(_fI_) {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 _fB_=evt.keyCode; function _fC_(_fH_){return run_next(_fB_,try_key_code_normal,_fH_)} var match=evt.location,switcher=match - 1 | 0; if(2 < switcher >>> 0) var _fD_=make_unidentified; else switch(switcher) {case 0: var _fy_=evt.keyCode, _fD_=function(_fF_){return run_next(_fy_,try_key_code_left,_fF_)}; break; case 1: var _fz_=evt.keyCode, _fD_=function(_fE_){return run_next(_fz_,try_key_code_right,_fE_)}; break; default: var _fA_=evt.keyCode, _fD_=function(_fG_){return run_next(_fA_,try_key_code_numpad,_fG_)}} 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)}), _fD_), _fC_)} function char_of_int(value) {if(caml_call2(symbol$5,0,value)) try {var _fw_=[0,caml_call1(Stdlib_Uchar[8],value)];return _fw_} catch(_fx_){return 0} return 0} function empty_string(param){return ""} function none(param){return 0} function of_event$0(evt) {var t109=caml_call2(Optdef[8],evt.key,empty_string),match=t109.length; return 0 === match ?caml_call3(Optdef[7],evt.charCode,none,char_of_int) :1 === match?char_of_int(t109.charCodeAt(0) | 0):0} function element$1(_fv_){return _fv_} function tagged(e) {var t111=e.tagName,tag=caml_string_of_jsbytes(t111.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 _ft_(e){return [0,tagged(e)]} function _fu_(param){return 0} return caml_call3(Opt[7],e,_fu_,_ft_)} function taggedEvent(ev) {function _fe_(ev){return [0,ev]} function _ff_(param) {function _fh_(ev){return [1,ev]} function _fi_(param) {function _fk_(ev){return [2,ev]} function _fl_(param) {function _fn_(ev){return [3,ev]} function _fo_(param) {function _fq_(ev){return [4,ev]} function _fr_(param){return [5,ev]} var _fs_=popStateEvent(ev); return caml_call3(Opt[7],_fs_,_fr_,_fq_)} var _fp_=mouseScrollEvent(ev); return caml_call3(Opt[7],_fp_,_fo_,_fn_)} var _fm_=wheelEvent(ev); return caml_call3(Opt[7],_fm_,_fl_,_fk_)} var _fj_=keyboardEvent(ev); return caml_call3(Opt[7],_fj_,_fi_,_fh_)} var _fg_=mouseEvent(ev); return caml_call3(Opt[7],_fg_,_ff_,_fe_)} function opt_taggedEvent(ev) {function _fc_(ev){return [0,taggedEvent(ev)]} function _fd_(param){return 0} return caml_call3(Opt[7],ev,_fd_,_fc_)} function stopPropagation(ev) {function _fa_(param){return ev.stopPropagation()} function _fb_(param){return ev.cancelBubble = t25} return caml_call3(Optdef[7],ev.stopPropagation,_fb_,_fa_)} var requestAnimationFrame= runtime.caml_js_pure_expr (function(param) {var l= [0, _i_.requestAnimationFrame, [0, _i_.mozRequestAnimationFrame, [0, _i_.webkitRequestAnimationFrame, [0, _i_.oRequestAnimationFrame, [0,_i_.msRequestAnimationFrame,0]]]]]; try {var _e9_=function(c){return caml_call1(Optdef[5],c)}, req=caml_call2(Stdlib_List[38],_e9_,l), _e__=function(callback){return req(callback)}; return _e__} catch(_e$_) {_e$_ = caml_wrap_exception(_e$_); if(_e$_ === Stdlib[8]) {var now=function(param){var t122=new t121();return t122.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; _i_.setTimeout(callback,dt$0); return 0}} throw _e$_}}); function hasPushState(param) {return caml_call1(Optdef[5],_i_.history.pushState)} function hasPlaceholder(param) {var i=createInput(0,0,t22);return caml_call1(Optdef[5],i.placeholder)} function hasRequired(param) {var i=createInput(0,0,t22);return caml_call1(Optdef[5],i.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(_e8_){return loop(remain,_e8_)}, t130=caml_js_wrap_callback(cb); id[1] = [0,_i_.setTimeout(t130,step$0)]; return 0} loop(d,0); return id} function clearTimeout(id) {var _e7_=id[1]; if(_e7_){var x=_e7_[1];id[1] = 0;return _i_.clearTimeout(x)} return 0} function js_array_of_collection(c){return [].slice.call(c)} var Js_of_ocaml_Dom_html= [0, d, t22, getElementById_opt, getElementById_exn, getElementById_coerce, getElementById, location_origin, _i_, 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], setTimeout, clearTimeout, js_array_of_collection, requestAnimationFrame, runtime.caml_js_html_entities, onIE, hasPushState, hasPlaceholder, hasRequired]; caml_register_global(1648,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 _e5_=caml_call2(symbol$9,elt.name.length,0), _e6_=_e5_?1 - (elt.disabled | 0):_e5_; return _e6_} function form_elements(get,form) {var length=form.elements.length; function _eT_(i) {var t34=form.elements,_e4_=t34.item(i); return caml_call1(Opt[10],_e4_)} var _eU_=caml_call2(Stdlib_Array[2],length,_eT_), elements=caml_call1(Stdlib_Array[11],_eU_); function _eV_(param) {if(param) {var v=param[1],match$3=tagged(v); switch(match$3[0]) {case 31: var v$0=match$3[1]; if(get)var sth=get[1],get$0=sth;else var get$0=0; if(have_content(v$0)) {var name$1=caml_string_of_jsstring(v$0.name), value=v$0.value, t20=v$0.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$0.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$0.multiple); if(match$1 && match$1[1]) {var _eZ_=function(t28){return list.item(t28)}, _e0_=caml_call2(Stdlib_Array[2],list.length,_eZ_), _e1_=caml_call1(Stdlib_Array[11],_e0_); 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}, _e1_)} var _e2_=list.item(0),match$2=caml_call1(Opt[10],_e2_); 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$0.checked | 0?[0,[0,name$1,[0,-976970511,value]],0]:0} return 0; case 48: var v$1=match$3[1]; if(have_content(v$1)) {var name$0=caml_string_of_jsstring(v$1.name); if(v$1.multiple | 0) {var _eX_= function(i) {var t13=v$1.options,_e3_=t13.item(i); return caml_call1(Opt[10],_e3_)}, options=caml_call2(Stdlib_Array[2],v$1.options.length,_eX_), _eY_=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}, _eY_)} return [0,[0,name$0,[0,-976970511,v$1.value]],0]} return 0; case 53: var v$2=match$3[1]; if(have_content(v$2)) {var name=caml_string_of_jsstring(v$2.name); return [0,[0,name,[0,-976970511,v$2.value]],0]} return 0; default:return 0}} return 0} var _eW_=caml_call2(Stdlib_List[19],_eV_,elements), contents=caml_call1(Stdlib_List[14],_eW_); return contents} 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],_eR_=form_elt[2],_eS_=form_elt[1]; if(781515420 <= _eR_[1]) {var file=_eR_[2],t38=caml_jsstring_of_string(_eS_); return f.append(t38,file)} var s=_eR_[2],t35=caml_jsstring_of_string(_eS_); 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),_eO_=form_elements(0,form); function _eP_(_eQ_){return append(contents,_eQ_)} caml_call2(Stdlib_List[17],_eP_,_eO_); return contents} function get_form_contents(form) {var _eL_=form_elements(_m_,form); function _eM_(param) {var _eN_=param[2]; if(typeof _eN_ !== "number" && -976970511 === _eN_[1]) {var s=_eN_[2],name=param[1]; return [0,name,caml_string_of_jsstring(s)]} throw [0,Assert_failure,_n_]} return caml_call2(Stdlib_List[19],_eM_,_eL_)} var Js_of_ocaml_Form= [0, formData, formData_form, append, post_form_contents, get_form_contents, empty_form_contents, form_elements]; caml_register_global(1649,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 (1650,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 _eI_=caml_call1(Stdlib_Array[12],scripts); function _eJ_(s){return caml_jsstring_of_string(s)} var _eK_=caml_call2(Stdlib_Array[15],_eJ_,_eI_); return runtime.caml_js_fun_call(Unsafe[1].importScripts,_eK_)} 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)} return Unsafe[1].onmessage = caml_js_wrap_callback(js_handler)} 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(1651,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 (1652,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[86],cst_webglcontextlost), webglcontextrestored=caml_call1(Event$0[86],cst_webglcontextrestored), webglcontextcreationerror= caml_call1(Event$0[86],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(1653,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 _eH_(param){throw [0,Assert_failure,_o_]} return caml_string_of_jsbytes(caml_call2(Optdef[8],a[i],_eH_))} function string_match(r,s,i) {r.lastIndex = i; var t11=caml_jsbytes_of_string(s), _eF_=r.exec(t11), _eG_=caml_call2(Opt[3],_eF_,match_result); return caml_call1(Opt[10],_eG_)} function search_forward(r,s,i) {r.lastIndex = i; var t15=caml_jsbytes_of_string(s); function _eC_(res){return [0,res.index,res]} var _eD_=r.exec(t15),_eE_=caml_call2(Opt[3],_eD_,_eC_); return caml_call1(Opt[10],_eE_)} function matched_string(r){return blunt_str_array_get(r,0)} function matched_group(r,i) {var _eB_=caml_call2(Optdef[3],r[i],caml_string_of_jsbytes); return caml_call1(Optdef[10],_eB_)} 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(1654,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 _ez_=caml_call3(String[30],s,i,47),j=_ez_} catch(_eA_) {_eA_ = caml_wrap_exception(_eA_); if(_eA_ !== Stdlib[8])throw _eA_; 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 _ey_=a[2]; if(! _ey_)return 0; if(! caml_string_notequal(_ey_[1],cst$3) && ! _ey_[2])return _p_} return a} function encode_arguments(l) {function _et_(param) {var v=param[2], n=param[1], _ev_=urlencode(0,v), _ew_=caml_call2(Stdlib[28],cst$4,_ev_), _ex_=urlencode(0,n); return caml_call2(Stdlib[28],_ex_,_ew_)} var _eu_=caml_call2(Stdlib_List[19],_et_,l); return caml_call2(String[6],cst$5,_eu_)} function decode_arguments_js_string(s) {var t0=caml_jsstring_of_string(caml_call2(String[1],1,38)), arr=s.split(t0), len=arr.length; function aux(acc,idx) {var idx$0=idx; for(;;) {if(caml_call2(symbol$5,idx$0,0))return acc; try {var _el_=idx$0 - 1 | 0, _em_= function(s) {function _er_(param) {var y=param[2], x=param[1], _es_=urldecode_js_string_string(y); return [0,urldecode_js_string_string(x),_es_]} var t2=caml_jsstring_of_string(caml_call2(String[1],1,61)), t5=s.indexOf(t2); if(caml_call2(symbol$5,t5,0)) var _eq_=t39; else var t7=t5 + 1 | 0, _ep_=s.slice(t7), _eq_=[0,s.slice(0,t5),_ep_]; return caml_call3(Optdef[7],_eq_,interrupt,_er_)}, _en_= aux ([0,caml_call3(Optdef[7],arr[idx$0],interrupt,_em_),acc],_el_); return _en_} catch(_eo_) {_eo_ = caml_wrap_exception(_eo_); if(_eo_ === Local_exn) {var idx$1=idx$0 - 1 | 0,idx$0=idx$1;continue} throw _eo_}}} 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 _d4_(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 _ec_=function(param){return caml_jsbytes_of_string(cst$7)}, path_str= urldecode_js_string_string(caml_call2(Optdef[8],res[6],_ec_)), _ed_=function(param){return caml_jsbytes_of_string(cst$8)}, _ee_= urldecode_js_string_string(caml_call2(Optdef[8],res[10],_ed_)), _ef_=function(param){return caml_jsbytes_of_string(cst$9)}, _eg_= decode_arguments_js_string(caml_call2(Optdef[8],res[8],_ef_)), _eh_=path_of_path_string(path_str), _ei_=function(param){return caml_jsbytes_of_string(cst$10)}, s=caml_string_of_jsbytes(caml_call2(Optdef[8],res[4],_ei_)), _ej_= 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)), _ej_, _eh_, path_str, _eg_, _ee_], _ek_=ssl?[1,url]:[0,url]; return [0,_ek_]}} throw Not_an_http_protocol} function _d5_(param) {function _d7_(res) {var path_str= urldecode_js_string_string(caml_call2(Optdef[8],res[2],interrupt)); function _d__(param){return caml_jsbytes_of_string(cst$11)} var _d$_=caml_string_of_jsbytes(caml_call2(Optdef[8],res[6],_d__)); function _ea_(param){return caml_jsbytes_of_string(cst$12)} var _eb_= decode_arguments_js_string(caml_call2(Optdef[8],res[4],_ea_)); return [0,[2,[0,path_of_path_string(path_str),path_str,_eb_,_d$_]]]} function _d8_(param){return 0} var _d9_=t26.exec(s); return caml_call3(Opt[7],_d9_,_d8_,_d7_)} var _d6_=t24.exec(s); return caml_call3(Opt[7],_d6_,_d5_,_d4_)} 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 _dr_=urlencode(0,frag),_ds_=caml_call2(Stdlib[28],cst$14,_dr_); else var _ds_=cst$21; if(args) var _dt_=encode_arguments(args), _du_=caml_call2(Stdlib[28],cst$15,_dt_); else var _du_=cst$20; var _dv_=caml_call2(Stdlib[28],_du_,_ds_), _dw_=function(x){return urlencode(0,x)}, _dx_=caml_call2(Stdlib_List[19],_dw_,path), _dy_=caml_call2(String[6],cst$16,_dx_), _dz_=caml_call2(Stdlib[28],_dy_,_dv_), _dA_=caml_call2(Stdlib[28],cst$17,_dz_); if(80 === port) var _dB_=cst$18; else var _dF_=caml_call1(Stdlib[33],port), _dB_=caml_call2(Stdlib[28],cst$19,_dF_); var _dC_=caml_call2(Stdlib[28],_dB_,_dA_), _dD_=urlencode(0,host), _dE_=caml_call2(Stdlib[28],_dD_,_dC_); return caml_call2(Stdlib[28],cst_http$1,_dE_); 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 _dG_=urlencode(0,frag$0), _dH_=caml_call2(Stdlib[28],cst$23,_dG_); else var _dH_=cst$30; if(args$0) var _dI_=encode_arguments(args$0), _dJ_=caml_call2(Stdlib[28],cst$24,_dI_); else var _dJ_=cst$29; var _dK_=caml_call2(Stdlib[28],_dJ_,_dH_), _dL_=function(x){return urlencode(0,x)}, _dM_=caml_call2(Stdlib_List[19],_dL_,path$0), _dN_=caml_call2(String[6],cst$25,_dM_), _dO_=caml_call2(Stdlib[28],_dN_,_dK_), _dP_=caml_call2(Stdlib[28],cst$26,_dO_); if(443 === port$0) var _dQ_=cst$27; else var _dU_=caml_call1(Stdlib[33],port$0), _dQ_=caml_call2(Stdlib[28],cst$28,_dU_); var _dR_=caml_call2(Stdlib[28],_dQ_,_dP_), _dS_=urlencode(0,host$0), _dT_=caml_call2(Stdlib[28],_dS_,_dR_); return caml_call2(Stdlib[28],cst_https$1,_dT_); 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 _dV_=urlencode(0,frag$1), _dW_=caml_call2(Stdlib[28],cst$32,_dV_); else var _dW_=cst$36; if(args$1) var _dX_=encode_arguments(args$1), _dY_=caml_call2(Stdlib[28],cst$33,_dX_); else var _dY_=cst$35; var _dZ_=caml_call2(Stdlib[28],_dY_,_dW_), _d0_=function(x){return urlencode(0,x)}, _d1_=caml_call2(Stdlib_List[19],_d0_,path$1), _d2_=caml_call2(String[6],cst$34,_d1_), _d3_=caml_call2(Stdlib[28],_d2_,_dZ_); return caml_call2(Stdlib[28],cst_file$2,_d3_)}} var _q_=caml_call1(Optdef[2],_i_.location); if(caml_call1(Optdef[5],_q_)) var _r_=_i_.location; else var t42=function(param,_dq_){return 0}, t41=function(param,_dp_){return 0}, t40=function(param){return 0}, _r_= {"href":"", "protocol":"", "host":"", "hostname":"", "port":"", "pathname":"", "search":"", "hash":"", "origin":t39, "reload":caml_js_wrap_meth_callback(t40), "replace":caml_js_wrap_meth_callback(t41), "assign":caml_js_wrap_meth_callback(t42)}; var host=urldecode_js_string_string(_r_.hostname), protocol=urldecode_js_string_string(_r_.protocol), _s_=0, port= function(param) {try {var _dn_=[0,caml_int_of_string(caml_string_of_jsbytes(_r_.port))]; return _dn_} catch(_do_) {_do_ = caml_wrap_exception(_do_); if(_do_[1] === Stdlib[7])return 0; throw _do_}} (_s_), path_string=urldecode_js_string_string(_r_.pathname), path=path_of_path_string(path_string), t49=_r_.search; if(t49.charAt(0) === "?") var t52=_r_.search,_t_=t52.slice(1); else var _t_=_r_.search; var arguments$0=decode_arguments_js_string(_t_); function get_fragment(param) {function _dk_(res){return caml_string_of_jsstring(res[1])} function _dl_(param){return cst$37} var t57=new t11("#(.*)"),t58=_r_.href,_dm_=t58.match(t57); return caml_call3(Opt[7],_dm_,_dl_,_dk_)} function set_fragment(s) {return _r_.hash = caml_jsbytes_of_string(urlencode(0,s))} function get$2(param){return url_of_js_string(_r_.href)} function set$0(u) {return _r_.href = caml_jsbytes_of_string(string_of_url(u))} var as_string=urldecode_js_string_string(_r_.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(1656,Js_of_ocaml_Url,"Js_of_ocaml__Url"); var Js_of_ocaml_Lib_version=[0,s,git_version]; caml_register_global (1657,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[62],git_version,cst$38)) var js_of_ocaml_version=s; else var _cn_=caml_call2(Stdlib[28],cst$41,git_version), js_of_ocaml_version=caml_call2(Stdlib[28],s,_cn_); var _u_=runtime.caml_create_file, _v_=runtime.caml_read_file_content, Js_of_ocaml_Sys_js= [0, set_channel_flusher, set_channel_filler, function(_dj_){return runtime.caml_list_mount_point(_dj_)}, unmount, mount, _v_, _u_, update_file, js_of_ocaml_version]; caml_register_global(1658,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 (1659,Js_of_ocaml_ResizeObserver,"Js_of_ocaml__ResizeObserver"); function empty_mutation_observer_init(param){return {}} var t2$1=Unsafe[1].MutationObserver; function is_supported$1(param){return caml_call1(Optdef[5],t2$1)} function observe$0 (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(v){return t18.childList = v}); opt_iter(attributes,function(v){return t18.attributes = v}); opt_iter(character_data,function(v){return t18.characterData = v}); opt_iter(subtree,function(v){return t18.subtree = v}); opt_iter (attribute_old_value,function(v){return t18.attributeOldValue = v}); opt_iter (character_data_old_value, function(v){return t18.characterDataOldValue = v}); opt_iter (attribute_filter, function(l) {return t18.attributeFilter = caml_js_from_array(caml_call1(Stdlib_Array[12],l))}); t19.observe(node,t18); return t19} var Js_of_ocaml_MutationObserver= [0,empty_mutation_observer_init,t2$1,is_supported$1,observe$0]; caml_register_global (1660,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, key_array=t10.keys(t), res=[0,0], _df_=key_array.length - 1 | 0, _de_=0; if(! (_df_ < 0)) {var i=_de_; for(;;) {var _dg_=function(param){return caml_call1(Stdlib[2],cst_Jstable_keys)}, t15=caml_call2(Optdef[8],key_array[i],_dg_), t14=t15.length - 1 | 0, _dh_=res[1]; res[1] = [0,t15.substring(0,t14),_dh_]; var _di_=i + 1 | 0; if(_df_ !== i){var i=_di_;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(1661,Js_of_ocaml_Jstable,"Js_of_ocaml__Jstable"); var t12=Unsafe[1].JSON; function reviver(this$0,key,value) {if(typeof value == typeof "foo")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 t12.parse(t2,t3$0)} var mlString_constr=dummy_string.constructor, mlInt64_constr=dummy_int64.constructor; function t11$1(key,value) {return value instanceof mlString_constr ?caml_jsbytes_of_string(value) :value instanceof mlInt64_constr ?caml_js_from_array([0,255,value.lo,value.mi,value.hi]) :value} function output(t10){return t12.stringify(t10,t11$1)} var Js_of_ocaml_Json=[0,output,unsafe_input]; caml_register_global(1662,Js_of_ocaml_Json,"Js_of_ocaml__Json"); function string_of_name(param) {var _dd_=param; if(74 <= _dd_) {if(111 <= _dd_) switch(_dd_) {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(_dd_) {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 <= _dd_) switch(_dd_) {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(_dd_) {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 _dc_=caml_call2(Stdlib[28],s,cst_is_not_a_valid_color_name); throw [0,Stdlib[6],_dc_]} function rgb_of_name(param) {var _db_=param; if(74 <= _db_) {if(111 <= _db_) switch(_db_) {case 111:return _bp_; case 112:return _bq_; case 113:return _br_; case 114:return _bs_; case 115:return _bt_; case 116:return _bu_; case 117:return _bv_; case 118:return _bw_; case 119:return _bx_; case 120:return _by_; case 121:return _bz_; case 122:return _bA_; case 123:return _bB_; case 124:return _bC_; case 125:return _bD_; case 126:return _bE_; case 127:return _bF_; case 128:return _bG_; case 129:return _bH_; case 130:return _bI_; case 131:return _bJ_; case 132:return _bK_; case 133:return _bL_; case 134:return _bM_; case 135:return _bN_; case 136:return _bO_; case 137:return _bP_; case 138:return _bQ_; case 139:return _bR_; case 140:return _bS_; case 141:return _bT_; case 142:return _bU_; case 143:return _bV_; case 144:return _bW_; case 145:return _bX_; default:return _bY_} switch(_db_) {case 74:return _aQ_; case 75:return _aR_; case 76:return _aS_; case 77:return _aT_; case 78:return _aU_; case 79:return _aV_; case 80:return _aW_; case 81:return _aX_; case 82:return _aY_; case 83:return _aZ_; case 84:return _a0_; case 85:return _a1_; case 86:return _a2_; case 87:return _a3_; case 88:return _a4_; case 89:return _a5_; case 90:return _a6_; case 91:return _a7_; case 92:return _a8_; case 93:return _a9_; case 94:return _a__; case 95:return _a$_; case 96:return _ba_; case 97:return _bb_; case 98:return _bc_; case 99:return _bd_; case 100:return _be_; case 101:return _bf_; case 102:return _bg_; case 103:return _bh_; case 104:return _bi_; case 105:return _bj_; case 106:return _bk_; case 107:return _bl_; case 108:return _bm_; case 109:return _bn_; default:return _bo_}} if(37 <= _db_) switch(_db_) {case 37:return _af_; case 38:return _ag_; case 39:return _ah_; case 40:return _ai_; case 41:return _aj_; case 42:return _ak_; case 43:return _al_; case 44:return _am_; case 45:return _an_; case 46:return _ao_; case 47:return _ap_; case 48:return _aq_; case 49:return _ar_; case 50:return _as_; case 51:return _at_; case 52:return _au_; case 53:return _av_; case 54:return _aw_; case 55:return _ax_; case 56:return _ay_; case 57:return _az_; case 58:return _aA_; case 59:return _aB_; case 60:return _aC_; case 61:return _aD_; case 62:return _aE_; case 63:return _aF_; case 64:return _aG_; case 65:return _aH_; case 66:return _aI_; case 67:return _aJ_; case 68:return _aK_; case 69:return _aL_; case 70:return _aM_; case 71:return _aN_; case 72:return _aO_; default:return _aP_} switch(_db_) {case 0:return _w_; case 1:return _x_; case 2:return _y_; case 3:return _z_; case 4:return _A_; case 5:return _B_; case 6:return _C_; case 7:return _D_; case 8:return _E_; case 9:return _F_; case 10:return _G_; case 11:return _H_; case 12:return _I_; case 13:return _J_; case 14:return _K_; case 15:return _L_; case 16:return _M_; case 17:return _N_; case 18:return _O_; case 19:return _P_; case 20:return _Q_; case 21:return _R_; case 22:return _S_; case 23:return _T_; case 24:return _U_; case 25:return _V_; case 26:return _W_; case 27:return _X_; case 28:return _Y_; case 29:return _Z_; case 30:return ___; case 31:return _$_; case 32:return _aa_; case 33:return _ab_; case 34:return _ac_; case 35:return _ad_; default:return _ae_}} 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],_bZ_,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],_b0_,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],_b1_,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],_b2_,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],_b3_,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],_b4_,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 _c9_=caml_call2(symbol$5,i,0), _c__=_c9_ || caml_call2(symbol$9,i,255); if(_c__) {var _c$_=caml_call1(Stdlib[33],i), _da_=caml_call2(Stdlib[28],_c$_,cst_is_out_of_valid_range); throw [0,Stdlib[6],_da_]} return _c__} in_range(red); in_range(green); in_range(blue); return caml_call4(Stdlib_Printf[4],_b5_,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 _c6_=caml_string_of_jsstring(s); if(caml_call2(Stdlib_List[36],_c6_,_b6_))return s; var _c7_=caml_string_of_jsstring(s), _c8_=caml_call2(Stdlib[28],_c7_,cst_is_not_a_valid_color); throw [0,Stdlib[6],_c8_]} 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 _cT_=[0,name_of_string(s)];return _cT_} catch(_cU_) {_cU_ = caml_wrap_exception(_cU_); if(_cU_[1] === Stdlib[6]) {var fail= function(param) {var _c5_=caml_call2(Stdlib[28],s,cst_is_not_a_valid_color$0); throw [0,Stdlib[6],_c5_]}, 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 _c3_=caml_int_of_string(i);return _c3_} catch(_c4_) {_c4_ = caml_wrap_exception(_c4_); if(_c4_[1] === Stdlib[6]) var s=_c4_[2]; else {if(_c4_[1] !== Stdlib[7])throw _c4_;var s=_c4_[2]} var _c0_=caml_call2(Stdlib[28],cst$39,s), _c1_=caml_call2(Stdlib[28],i,_c0_), _c2_=caml_call2(Stdlib[28],cst_color_conversion_error,_c1_); throw [0,Stdlib[6],_c2_]}} return fail(0)}, f_of_s= function(f) {try {var _cY_=caml_float_of_string(f);return _cY_} catch(_cZ_) {_cZ_ = caml_wrap_exception(_cZ_); if(_cZ_[1] === Stdlib[6]) var s=_cZ_[2]; else {if(_cZ_[1] !== Stdlib[7])throw _cZ_;var s=_cZ_[2]} var _cV_=caml_call2(Stdlib[28],cst$40,s), _cW_=caml_call2(Stdlib[28],f,_cV_), _cX_=caml_call2(Stdlib[28],cst_color_conversion_error$0,_cW_); throw [0,Stdlib[6],_cX_]}}, 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 _cB_=match$0[1]; if(! caml_string_notequal(_cB_,cst_rgb)) {if(alpha)return fail(0); var _cF_=i_of_s_o(blue),_cG_=i_of_s_o(green); return [1,[0,i_of_s_o(red),_cG_,_cF_]]} if(! caml_string_notequal(_cB_,cst_rgba)) {if(alpha) {var a=alpha[1], _cC_=f_of_s(a), _cD_=i_of_s_o(blue), _cE_=i_of_s_o(green); return [3,[0,i_of_s_o(red),_cE_,_cD_,_cC_]]} 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 _cH_=match$2[1]; if(! caml_string_notequal(_cH_,cst_rgb$0)) {if(alpha$0)return fail(0); var _cL_=i_of_s_o(blue$0),_cM_=i_of_s_o(green$0); return [2,[0,i_of_s_o(red$0),_cM_,_cL_]]} if(! caml_string_notequal(_cH_,cst_rgba$0)) {if(alpha$0) {var a$0=alpha$0[1], _cI_=f_of_s(a$0), _cJ_=i_of_s_o(blue$0), _cK_=i_of_s_o(green$0); return [4,[0,i_of_s_o(red$0),_cK_,_cJ_,_cI_]]} 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 _cN_=match$4[1]; if(! caml_string_notequal(_cN_,cst_hsl)) {if(alpha$1)return fail(0); var _cR_=i_of_s_o(blue$1),_cS_=i_of_s_o(green$1); return [5,[0,i_of_s_o(red$1),_cS_,_cR_]]} if(! caml_string_notequal(_cN_,cst_hsla)) {if(alpha$1) {var a$1=alpha$1[1], _cO_=f_of_s(a$1), _cP_=i_of_s_o(blue$1), _cQ_=i_of_s_o(green$1); return [6,[0,i_of_s_o(red$1),_cQ_,_cP_,_cO_]]} return fail(0)}} return fail(0)} return fail(0)} throw _cU_}} 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],_b7_,f,cst_em$0); case 1: var f$0=param[1]; return caml_call3(Stdlib_Printf[4],_b8_,f$0,cst_ex); case 2: var f$1=param[1]; return caml_call3(Stdlib_Printf[4],_b9_,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],_b$_,f$3,cst_rem); case 5: var f$4=param[1]; return caml_call3(Stdlib_Printf[4],_ca_,f$4,cst_vw); case 6: var f$5=param[1]; return caml_call3(Stdlib_Printf[4],_cb_,f$5,cst_vh); case 7: var f$6=param[1]; return caml_call3(Stdlib_Printf[4],_cc_,f$6,cst_vm); case 8: var f$7=param[1]; return caml_call3(Stdlib_Printf[4],_cd_,f$7,cst_ch); case 9: var f$8=param[1]; return caml_call3(Stdlib_Printf[4],_ce_,f$8,cst_mm); case 10: var f$9=param[1]; return caml_call3(Stdlib_Printf[4],_cf_,f$9,cst_cm); case 11: var f$10=param[1]; return caml_call3(Stdlib_Printf[4],_cg_,f$10,cst_in); case 12: var f$11=param[1]; return caml_call3(Stdlib_Printf[4],_ch_,f$11,cst_pt); default: var f$12=param[1]; return caml_call3(Stdlib_Printf[4],_ci_,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[62],s,cst_0$0))return 0; function fail(param) {var _cA_=caml_call2(Stdlib[28],s,cst_is_not_a_valid_length); throw [0,Stdlib[6],_cA_]} 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 _cy_=caml_float_of_string(f)} catch(exn) {exn = caml_wrap_exception(exn); if(exn[1] === Stdlib[6]) {var s$0=exn[2], _cx_=caml_call2(Stdlib[28],cst_length_conversion_error,s$0); throw [0,Stdlib[6],_cx_]} throw exn} var f$0=_cy_} else var f$0=fail(0); var match$1=matched_group(r,2); if(match$1) {var _cz_=match$1[1],switch$0=caml_string_compare(_cz_,cst_pc$0); if(0 <= switch$0) {if(! (0 < switch$0))return [13,f$0]; if(! caml_string_notequal(_cz_,cst_pt$0))return [12,f$0]; if(! caml_string_notequal(_cz_,cst_px$0))return [2,f$0]; if(! caml_string_notequal(_cz_,cst_rem$0))return [4,f$0]; if(! caml_string_notequal(_cz_,cst_vh$0))return [6,f$0]; if(! caml_string_notequal(_cz_,cst_vm$0))return [7,f$0]; if(! caml_string_notequal(_cz_,cst_vw$0))return [5,f$0]} else {if(! caml_string_notequal(_cz_,cst_ch$0))return [8,f$0]; if(! caml_string_notequal(_cz_,cst_cm$0))return [10,f$0]; if(! caml_string_notequal(_cz_,cst_em$1))return [0,f$0]; if(! caml_string_notequal(_cz_,cst_ex$0))return [1,f$0]; if(! caml_string_notequal(_cz_,cst_gd$0))return [3,f$0]; if(! caml_string_notequal(_cz_,cst_in$0))return [11,f$0]; if(! caml_string_notequal(_cz_,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],_cj_,f,cst_deg); case 1: var f$0=param[1]; return caml_call3(Stdlib_Printf[4],_ck_,f$0,cst_grad); case 2: var f$1=param[1]; return caml_call3(Stdlib_Printf[4],_cl_,f$1,cst_rad); default: var f$2=param[1]; return caml_call3(Stdlib_Printf[4],_cm_,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 _cw_=caml_call2(Stdlib[28],s,cst_is_not_a_valid_length$0); throw [0,Stdlib[6],_cw_]} 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 _cu_=caml_float_of_string(f)} catch(exn) {exn = caml_wrap_exception(exn); if(exn[1] === Stdlib[6]) {var s$0=exn[2], _ct_=caml_call2(Stdlib[28],cst_length_conversion_error$0,s$0); throw [0,Stdlib[6],_ct_]} throw exn} var f$0=_cu_} else var f$0=fail(0); var match$1=matched_group(r,2); if(match$1) {var _cv_=match$1[1]; if(! caml_string_notequal(_cv_,cst_deg$0))return [0,f$0]; if(! caml_string_notequal(_cv_,cst_grad$0))return [1,f$0]; if(! caml_string_notequal(_cv_,cst_rad$0))return [2,f$0]; if(! caml_string_notequal(_cv_,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(1663,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 _cs_=! ! capture; return addEventListener (target, typ, full_handler(function(n,e){return ! ! caml_call2(cb,n,e)}), _cs_)} var Js_of_ocaml_Dom_events=[0,Event$0,listen,removeEventListener]; caml_register_global (1664,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 _cp_(e){if(e instanceof svg_element)return e;throw Stdlib[8]} function _cq_(param){throw Stdlib[8]} var t6=caml_jsstring_of_string(id), t7=Unsafe[1].document, _cr_=t7.getElementById(t6); return caml_call3(Opt[7],_cr_,_cq_,_cp_)} function element$2(e){return e instanceof svg_element?e:no_handler} function unsafeCoerce$0(e,tag) {var t9=e.tagName,_co_=caml_jsstring_of_string(tag); return t9.toLowerCase() === _co_?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(1665,Js_of_ocaml_Dom_svg,"Js_of_ocaml__Dom_svg"); function withCredentials(b) {var init={};init.withCredentials = ! ! b;return init} var eventSource=Unsafe[1].EventSource, eventSource_options=Unsafe[1].EventSource, Js_of_ocaml_EventSource= [0,withCredentials,eventSource,eventSource_options,addEventListener]; caml_register_global (1666,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(1667,Js_of_ocaml_Firebug,"Js_of_ocaml__Firebug"); function empty_position_options(param){return {}} var x=Unsafe[1].navigator, geolocation=caml_call1(Optdef[5],x)?x.geolocation:x; function is_supported$2(param){return caml_call1(Optdef[5],geolocation)} var Js_of_ocaml_Geolocation= [0,empty_position_options,geolocation,is_supported$2]; caml_register_global (1668,Js_of_ocaml_Geolocation,"Js_of_ocaml__Geolocation"); function empty_intersection_observer_op(param){return {}} var intersectionObserver_unsafe=Unsafe[1].IntersectionObserver; function is_supported$3(param) {return caml_call1(Optdef[5],intersectionObserver_unsafe)} var Js_of_ocaml_IntersectionObserv= [0, empty_intersection_observer_op, is_supported$3, intersectionObserver_unsafe]; caml_register_global (1669,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, collator_constr=Unsafe[1].Intl.Collator, dateTimeFormat_constr=Unsafe[1].Intl.DateTimeFormat, numberFormat_constr=Unsafe[1].Intl.NumberFormat, pluralRules_constr=Unsafe[1].Intl.PluralRules; function is_supported$4(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$4]; caml_register_global(1670,Js_of_ocaml_Intl,"Js_of_ocaml__Intl"); var Js_of_ocaml$0=[0]; caml_register_global(1671,Js_of_ocaml$0,"Js_of_ocaml"); return} (function(){return this}())); //# 1 "../.js/uutf/uutf.cma.js" (function(joo_global_object) {"use strict"; var runtime=joo_global_object.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"),364,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"),154,55], _n_=[0,684370880,427938126], _r_=[0,caml_string_of_jsbytes("src/uutf.ml"),153,55], _s_=[0,caml_string_of_jsbytes("src/uutf.ml"),155,55], _t_=[0,684370880,3455931], _j_=[0,caml_string_of_jsbytes("src/uutf.ml"),121,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[45],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) >>> 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) >>> 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) {var switcher=match - 10 | 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]]}} 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) >>> 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} (function(){return this}())); //# 1 "../.js/re/re.cma.js" (function(joo_global_object) {"use strict"; var runtime=joo_global_object.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 _bM_= [0, [12,59,[17,[0,caml_string_of_jsbytes("@ "),1,0],0]], caml_string_of_jsbytes(";@ ")], _bN_= [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@ ]@]")], _bL_=[0,[12,34,[2,0,[12,34,0]]],caml_string_of_jsbytes('"%s"')], _bK_= [0, [17,[0,caml_string_of_jsbytes("@ "),1,0],[4,0,0,0,0]], caml_string_of_jsbytes("@ %d")], _bJ_= [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], _bO_=[0,[4,0,0,0,0],caml_string_of_jsbytes("%d")], _bP_=[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 _ju_=param - 192 | 0; if(54 < _ju_ >>> 0) {if(56 <= _ju_)switch$0 = 1} else if(23 !== _ju_)switch$0 = 1} else {var _jv_=param - 171 | 0; if(14 < _jv_ >>> 0 || 10 === _jv_)switch$0 = 1} else if(65 <= param) {var _jw_=param - 91 | 0; if(5 < _jw_ >>> 0) {if(! (32 <= _jw_))switch$0 = 1} else if(4 === _jw_)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], _C_=include[29], _bj_=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], _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], _be_=include[124], _bf_=include[125], _bg_=include[126], _bh_=include[127], _bi_=include[128], _bk_=include[130], _bl_=include[131], _bm_=include[132], _bn_=include[133], _bo_=include[134], _bp_=include[135], _bq_=include[136], _br_=include[137], _bs_=include[138], _bt_=include[139], _bu_=include[140], _bv_=include[141], _bw_=include[142], _bx_=include[143], _by_=include[144], _bz_=include[145], _bA_=include[146], _bB_=include[147], _bC_=include[148], _bD_=include[149], _bE_=include[150], _bF_=include[151], _bG_=include[152], _bH_=include[153], _bI_=include[154]; function pp_print_list(opt,pp,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=_C_; if(param$0) {var _jt_=param$0[1]; if(param$0[2]) {var vs=param$0[2]; caml_call2(pp,ppf,_jt_); caml_call2(pp_sep,ppf,0); var opt$1=[0,pp_sep],opt$0=opt$1,param$0=vs; continue} return caml_call2(pp,ppf,_jt_)} return 0}} function sexp(fmt,s,pp,x){return caml_call5(_bj_,fmt,_bJ_,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(_bj_,fmt,_bK_,i)}return 0} function quote(fmt,s){return caml_call3(include[129],fmt,_bL_,s)} function pp_olist(pp_elem,fmt) {var _jp_=[0,function(fmt,param){return caml_call2(_bj_,fmt,_bM_)}]; function _jq_(_jr_,_js_){return pp_print_list(_jp_,pp_elem,_jr_,_js_)} return caml_call3(include[129],fmt,_bN_,_jq_)} function pp_str_list(_jo_){return pp_olist(quote,_jo_)} 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_, pp_print_list, pp_print_list, _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], _jn_=l$1[1], c2=_jn_[2], c1=_jn_[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], _jk_=l$1[1], c2=_jk_[2], c1=_jk_[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 _jl_=inter(r$0,l$1); return [0,[0,caml_call2(Stdlib[17],c1$0,c1),c2$0],_jl_]} var _jm_=inter(l$2,r); return [0,[0,caml_call2(Stdlib[17],c1$0,c1),c2],_jm_]} 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], _jj_=l$1[1], c2=_jj_[2], c1=_jj_[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,_bO_,c1) :caml_call4(include[129],ch,_bP_,c1,c2)} var _bQ_=0; function pp$0(_jh_,_ji_){return pp_print_list(_bQ_,print_one,_jh_,_ji_)} 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,_jg_) {var v=_jg_[2],j=_jg_[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 _jb_=l[1],_jc_=_jb_[1]; if(_jc_ && ! _jc_[2]) {var x$0=_jb_[2], _jd_=_jc_[1], d=_jd_[2], d$0=_jd_[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 _je_=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)], _je_]} var _jf_=prepend(s$0,x,r$0); return [0, [0,[0,[0,d$0,d],0],caml_call2(Stdlib[37],x,x$0)], _jf_]} 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 _ja_=caml_call2(Set[7],old[2],nw[2]); return [0,merge_marks_offset(old[1],nw[1]),_ja_]} 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 _i$_=marks[1]; if(-1 === _i$_[2]) {var rem=marks[2],a=_i$_[1];return [0,[0,a,idx],_bS_(idx,rem)]}} return marks} function marks_set_idx(marks,idx) {var _i__=marks[2];return [0,_bS_(idx,marks[1]),_i__]} function pp_marks(ch,t) {var _i8_=t[1]; if(_i8_) {var r=_i8_[2],match=_i8_[1],i=match[2],a=match[1]; caml_call4(include[129],ch,_bT_,a,i); var _i9_= function(param) {var i=param[2],a=param[1]; return caml_call4(include[129],ch,_bU_,a,i)}; return caml_call2(Stdlib_List[17],_i9_,r)} return 0} function pp_sem(ch,k) {var _i7_=-730718166 === k?cst_long:332064784 <= k?cst_first:cst_short; return caml_call2(include[13],ch,_i7_)} 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 _iU_=e[2]; if(typeof _iU_ === "number") return caml_call2(_m_,ch,cst_eps); else switch(_iU_[0]) {case 0:var l=_iU_[1];return sexp(ch,cst_cst,pp$0,l); case 1: var l$0=_iU_[1],_iV_=0; return sexp (ch, cst_alt, function(_i5_,_i6_) {return pp_print_list(_iV_,pp$2,_i5_,_i6_)}, l$0); case 2: var e$0=_iU_[3],e$1=_iU_[2],k=_iU_[1],_iW_=[0,k,e$1,e$0]; return sexp (ch, cst_seq, function(_i3_,_i4_) {return triple(pp_sem,pp$2,pp$2,_i3_,_i4_)}, _iW_); case 3: var e$2=_iU_[3],k$0=_iU_[2],_iX_=[0,k$0,e$2]; return sexp (ch, cst_rep, function(_i1_,_i2_){return pair(pp_sem,pp$2,_i1_,_i2_)}, _iX_); case 4:var i=_iU_[1];return sexp(ch,cst_mark,_s_,i); case 5: var e$3=_iU_[2],b=_iU_[1],_iY_=[0,b,e$3]; return sexp (ch, cst_erase, function(_iZ_,_i0_){return pair(_s_,_s_,_iZ_,_i0_)}, _iY_); case 6:var c=_iU_[1];return sexp(ch,cst_before,pp,c); case 7:var c$0=_iU_[1];return sexp(ch,cst_after,pp,c$0); default:var i$0=_iU_[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 _iS_=x[2],_iT_=y[2]; if(typeof _iS_ !== "number" && 1 === _iS_[0] && ! _iS_[1])return x; if(typeof _iT_ !== "number" && 1 === _iT_[0] && ! _iT_[1])return y; if(typeof _iS_ === "number")return y; if(typeof _iT_ === "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 _iO_=x[2]; if(typeof _iO_ !== "number") switch(_iO_[0]) {case 1: var l=_iO_[1],_iP_=function(_iR_){return rename(ids,_iR_)}; return mk_expr(ids,[1,caml_call2(Stdlib_List[19],_iP_,l)]); case 2: var z=_iO_[3],y=_iO_[2],k=_iO_[1],_iQ_=rename(ids,z); return mk_expr(ids,[2,k,rename(ids,y),_iQ_]); case 3: var y$0=_iO_[3],k$0=_iO_[2],g=_iO_[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 _iv_=l1$0[1]; switch(_iv_[0]) {case 0: if(l2$0) {var _iw_=l2$0[1],_ix_=l1$0[2],_iy_=_iv_[2],_iz_=_iv_[1]; if(0 === _iw_[0]) {var r2=l2$0[2], e2=_iw_[2], l2$1=_iw_[1], _iA_=_iy_[1] === e2[1]?1:0; if(_iA_) {var _iB_=equal$1(_iz_,l2$1); if(_iB_){var l1$0=_ix_,l2$0=r2;continue} var _iC_=_iB_} else var _iC_=_iA_; return _iC_}} break; case 1: if(l2$0) {var _iD_=l2$0[1],_iE_=l1$0[2],_iF_=_iv_[2],_iG_=_iv_[1]; if(1 === _iD_[0]) {var r2$0=l2$0[2], e2$0=_iD_[2], marks2=_iD_[1], _iH_=_iF_[1] === e2$0[1]?1:0; if(_iH_) {var _iI_=caml_equal(_iG_,marks2); if(_iI_){var l1$0=_iE_,l2$0=r2$0;continue} var _iJ_=_iI_} else var _iJ_=_iH_; return _iJ_}} break; default: if(l2$0) {var _iK_=l2$0[1],_iL_=l1$0[2],_iM_=_iv_[1]; if(2 === _iK_[0]) {var r2$1=l2$0[2], marks2$0=_iK_[1], _iN_=caml_equal(_iM_,marks2$0); if(_iN_){var l1$0=_iL_,l2$0=r2$1;continue} return _iN_}}}} 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 _is_=l$0[1]; switch(_is_[0]) {case 0: var r=l$0[2], e=_is_[2], l$1=_is_[1], _it_=hash$1(l$1,accu$0), accu$1=hash_combine(388635598,hash_combine(e[1],_it_)), l$0=r, accu$0=accu$1; continue; case 1: var r$0=l$0[2], e$0=_is_[2], marks=_is_[1], _iu_=hash$0(marks,accu$0), accu$2=hash_combine(726404471,hash_combine(e$0[1],_iu_)), l$0=r$0, accu$0=accu$2; continue; default: var r$1=l$0[2], marks$0=_is_[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 _ir_=x[1]; if(1 === _ir_[0] && typeof _ir_[2][2] === "number" && ! x[2]) {var marks=_ir_[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 _iq_= function(e) {caml_call2(include[129],ch,_b1_);return print_state_rec(ch,e,y)}; return caml_call2(Stdlib_List[17],_iq_,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 _ip_=e[1]; if(typeof e[2][2] === "number") return caml_call5(include[129],ch,_bY_,y[1],pp_marks,_ip_); var x$0=e[2]; return caml_call7(include[129],ch,_bZ_,x$0[1],pp_marks,_ip_,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 _il_=x[5] === y[5]?1:0; if(_il_) {var _im_=x[1] === y[1]?1:0; if(_im_) {var _in_=x[2] === y[2]?1:0; if(_in_)return equal$1(x[3],y[3]); var _io_=_in_} else var _io_=_im_} else var _io_=_il_; return _io_} 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 _ig_(param) {if(0 === param[0]) {var l=param[1];return caml_call1(mark_used_indices(tbl),l)} var marks=param[1],_ih_=marks[1]; function _ii_(param) {var i=param[2], _ij_=0 <= i?1:0, _ik_=_ij_?(caml_check_bound(tbl,i)[1 + i] = 1,0):_ij_; return _ik_} return caml_call2(Stdlib_List[17],_ii_,_ih_)} return caml_call1(Stdlib_List[17],_ig_)} 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 _ie_=param[1]; if(2 === _ie_[0]) {var r=param[2],_if_=caml_call1(remove_matches,r); return [0,caml_call1(Stdlib_List[9],l),_if_]} var param$0=param[2],l$0=[0,_ie_,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 _id_=l$0[1]; switch(_id_[0]) {case 0: var r=l$0[2], kind=_id_[3], x=_id_[2], l$1=_id_[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 _id_[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,_id_,r$2],prev$2]} var r$3=l$0[2],x$0=_id_[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,_id_,r$4],prev$3]; default:return [0,[0,_id_,0],prev]}} return [0,0,prev]}} function set_idx(idx,param) {if(param) {var _h$_=param[1]; switch(_h$_[0]) {case 0: var r=param[2], kind=_h$_[3], x=_h$_[2], l=_h$_[1], _ia_=set_idx(idx,r); return [0,[0,set_idx(idx,l),x,kind],_ia_]; case 1: var r$0=param[2],x$0=_h$_[2],marks=_h$_[1],_ib_=set_idx(idx,r$0); return [0,[1,marks_set_idx(marks,idx),x$0],_ib_]; default: var r$1=param[2],marks$0=_h$_[1],_ic_=set_idx(idx,r$1); return [0,[2,marks_set_idx(marks$0,idx)],_ic_]}} return 0} function filter_marks(b,e,marks) {var _h6_=marks[2],_h7_=marks[1]; function _h8_(param) {var i=param[1],_h9_=i < b?1:0,_h__=_h9_ || (e < i?1:0);return _h__} return [0,caml_call2(Stdlib_List[41],_h8_,_h7_),_h6_]} function delta_1$0(counter,init,c,next_cat,prev_cat,x,rem) {var _h3_=x[2]; if(typeof _h3_ === "number") return [0,[2,init],rem]; else switch(_h3_[0]) {case 0:var s=_h3_[1];return mem(c,s)?[0,[1,init,eps_expr],rem]:rem; case 1: var l=_h3_[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=_h3_[3], y=_h3_[2], kind=_h3_[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=_h3_[3], kind$0=_h3_[2], rep_kind=_h3_[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=_h3_[1], _h4_=init[2], marks$1=[0,[0,[0,i,-1],caml_call2(Stdlib_List[53],i,init[1])],_h4_]; return [0,[2,marks$1],rem]; case 5: var e=_h3_[2],b=_h3_[1];return [0,[2,filter_marks(b,e,init)],rem]; case 6: var cat=_h3_[1];return intersect(next_cat,cat)?[0,[2,init],rem]:rem; case 7: var cat$0=_h3_[1]; return intersect(prev_cat,cat$0)?[0,[2,init],rem]:rem; default: var i$0=_h3_[1], _h5_=caml_call2(Set[4],i$0,init[2]), marks$2=[0,init[1],_h5_]; 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],_h2_=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,_h2_)} return caml_trampoline_return (delta_1$0,[0,marks,c,next_cat,prev_cat,y,_h2_])} 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 _h0_=delta_1(marks,c,next_cat,prev_cat,z,rem); return tseq(kind,caml_call1(remove_matches,y),z,_h0_)} 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 _h1_=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,_h1_)} return caml_trampoline_return (delta_1$0,[0,marks,c,next_cat,prev_cat,z,_h1_])} 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 _hZ_=l$0[2]; if(_hZ_) {var rem=_hZ_[2], tr2=_hZ_[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 _hY_(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],_hY_,l)} function deriv_seq(all_chars,categories,cat,kind,y,z,rem) {function _hP_(param) {var xl=param[2]; function _hX_(param){return 2 === param[0]?1:0} return caml_call2(Stdlib_List[33],_hX_,xl)} if(caml_call2(Stdlib_List[33],_hP_,y)) {var z$0=deriv_1(all_chars,categories,empty$0,cat,z,[0,[0,all_chars,0],0]), _hQ_= 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], _hS_= 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],_hS_),z$0); if(-730718166 === kind) {var _hT_=caml_call2(prepend_deriv,restrict(s,z$1),rem); return prepend (s,tseq(kind,caml_call1(remove_matches,y),z,0),_hT_)} if(332064784 <= kind) {var match$0=split_at_match(y), y$0=match$0[2], y$1=match$0[1], _hU_=prepend(s,tseq(kind,y$0,z,0),rem), _hV_=caml_call2(prepend_deriv,restrict(s,z$1),_hU_); return prepend(s,tseq(kind,y$1,z,0),_hV_)} var _hW_= prepend(s,tseq(kind,caml_call1(remove_matches,y),z,0),rem); return caml_call2(prepend_deriv,restrict(s,z$1),_hW_)} return prepend(s,tseq(kind,y,z,0),rem)}; return caml_call3(Stdlib_List[26],_hQ_,y,rem)} function _hR_(param,rem) {var xl=param[2],s=param[1];return prepend(s,tseq(kind,xl,z,0),rem)} return caml_call3(Stdlib_List[26],_hR_,y,rem)} function deriv_1$0(counter,all_chars,categories,marks,cat,x,rem$1) {var _hJ_=x[2]; if(typeof _hJ_ === "number") return prepend(all_chars,[0,[2,marks],0],rem$1); else switch(_hJ_[0]) {case 0: var s=_hJ_[1];return prepend(s,[0,[1,marks,eps_expr],0],rem$1); case 1: var l=_hJ_[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=_hJ_[3], y=_hJ_[2], kind=_hJ_[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=_hJ_[3], kind$0=_hJ_[2], rep_kind=_hJ_[1], y$2= deriv_1(all_chars,categories,marks,cat,y$1,[0,[0,all_chars,0],0]), _hK_= 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 _hO_= 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,_hO_,rem)}; return caml_call3(Stdlib_List[26],_hK_,y$2,rem$1); case 4: var i=_hJ_[1],_hL_=marks[2]; return prepend (all_chars, [0, [2, [0,[0,[0,i,-1],caml_call2(Stdlib_List[53],i,marks[1])],_hL_]], 0], rem$1); case 5: var e$1=_hJ_[2], b=_hJ_[1], _hN_=marks[2], e=e$1, rem=filter_marks(b,e$1,marks)[1], _hM_=0; for(;;) {if(e < b) return prepend(all_chars,[0,[2,[0,rem,_hN_]],_hM_],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=_hJ_[1]; return prepend (caml_call2(Stdlib_List[48],cat$0,categories), [0,[2,marks],0], rem$1); case 7: var cat$1=_hJ_[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],_hI_=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,_hI_)} return caml_trampoline_return (deriv_1$0,[0,all_chars,categories,marks,cat,y,_hI_])} 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]), _hD_=0; function _hE_(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 _hH_(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],_hH_,categories,rem)} var l=caml_call3(Stdlib_List[26],_hE_,der,_hD_); function _hA_(param,_hG_) {var st2=_hG_[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 _hB_=red_tr(caml_call2(Stdlib_List[56],_hA_,l)); function _hC_(param,_hF_) {var s2=_hF_[1],s1=param[1];return caml_compare(s1,s2)} return caml_call2(Stdlib_List[56],_hC_,_hB_)} function status(s) {var _hv_=s[4]; if(_hv_){var st=_hv_[1];return st} var _hw_=s[3]; if(_hw_) {var _hx_=_hw_[1]; if(2 === _hx_[0]) {var m=_hx_[1], _hz_=m[1], _hy_=m[2], _hs_=-1, _ht_= function(ma,param) {var i=param[1];return caml_call2(Stdlib[17],ma,i)}, ma=caml_call3(Stdlib_List[25],_ht_,_hs_,_hz_), res=caml_make_vect(ma + 1 | 0,-1), _hu_= function(param) {var v=param[2],i=param[1]; caml_check_bound(res,i)[1 + i] = v; return 0}; caml_call2(Stdlib_List[17],_hu_,_hz_); var st$0=[0,res,_hy_]} 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 _hq_=caml_call1(Stdlib_Char[1],i); caml_bytes_set(color_repr,v[1],_hq_); var _hr_=i + 1 | 0; if(255 !== i){var i=_hr_;continue} var _hp_=v[1] + 1 | 0; return [0, c, caml_call3(Stdlib_Bytes[7],color_repr,0,v[1] + 1 | 0), _hp_]}} 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 _hm_=2 * i | 0,m1=caml_check_bound(t[2],_hm_)[1 + _hm_]; if(-1 === m1)throw Stdlib[8]; var p1=caml_check_bound(t[4],m1)[1 + m1] - 1 | 0, _hn_=(2 * i | 0) + 1 | 0, _ho_=caml_check_bound(t[2],_hn_)[1 + _hn_], p2=caml_check_bound(t[4],_ho_)[1 + _ho_] - 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 _hl_=2 * i | 0,idx=caml_check_bound(t[2],_hl_)[1 + _hl_]; 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), _hg_=((t[2].length - 1) / 2 | 0) - 1 | 0, _hf_=0; if(! (_hg_ < 0)) {var i=_hf_; for(;;) {var _hh_=2 * i | 0,m1=caml_check_bound(t[2],_hh_)[1 + _hh_]; if(-1 !== m1) {var p1=caml_check_bound(t[4],m1)[1 + m1], _hi_=(2 * i | 0) + 1 | 0, _hj_=caml_check_bound(t[2],_hi_)[1 + _hi_], p2=caml_check_bound(t[4],_hj_)[1 + _hj_]; caml_check_bound(res,i)[1 + i] = [0,p1 - 1 | 0,p2 - 1 | 0]} var _hk_=i + 1 | 0; if(_hg_ !== i){var i=_hk_;continue} break}} return res} function all(t) {var res=caml_make_vect(t[5],dummy_string), _g$_=((t[2].length - 1) / 2 | 0) - 1 | 0, _g__=0; if(! (_g$_ < 0)) {var i=_g__; for(;;) {var _ha_=2 * i | 0,m1=caml_check_bound(t[2],_ha_)[1 + _ha_]; if(-1 !== m1) {var p1=caml_check_bound(t[4],m1)[1 + m1], _hb_=(2 * i | 0) + 1 | 0, _hc_=caml_check_bound(t[2],_hb_)[1 + _hb_], p2=caml_check_bound(t[4],_hc_)[1 + _hc_], _hd_=caml_call3(Stdlib_String[15],t[1],p1 - 1 | 0,p2 - p1 | 0); caml_check_bound(res,i)[1 + i] = _hd_} var _he_=i + 1 | 0; if(_g$_ !== i){var i=_he_;continue} break}} return res} function pp$4(fmt,t) {var offsets=all_offset(t),strs=all(t); function _g4_(i) {var _g9_=caml_check_bound(offsets,i)[1 + i]; return [0,caml_check_bound(strs,i)[1 + i],_g9_]} var _g5_=caml_call2(Stdlib_Array[2],strs.length - 1,_g4_), matches=caml_call1(Stdlib_Array[11],_g5_); function pp_match(fmt,param) {var match=param[2],stop=match[2],start=match[1],str=param[1]; return caml_call5(_bj_,fmt,_b8_,str,start,stop)} var _g6_=0; return sexp (fmt, cst_Group, function(_g7_,_g8_) {return pp_print_list(_g6_,pp_match,_g7_,_g8_)}, 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 _g0_=0, _g1_=break_state?dummy_next:caml_make_vect(ncol,unknown_state), _g2_=desc[1], _g3_=break_state?break$0:desc[1]; return [0,_g3_,_g2_,_g1_,_g0_,desc]} function find_state(re,desc) {try {var _gY_=caml_call2(_b7_[3][7],re[8],desc);return _gY_} catch(_gZ_) {_gZ_ = caml_wrap_exception(_gZ_); if(_gZ_ === Stdlib[8]) {var st=mk_state(re[5],desc); caml_call3(_b7_[3][5],re[8],desc,st); return st} throw _gZ_}} function delta$0(info,cat,color,st) {var desc=delta(info[1][7],cat,color,st[5]), len=info[3].length - 1, _gW_=desc[1] === len?1:0, _gX_=_gW_?0 < len?1:0:_gW_; if(_gX_) {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 _gV_=caml_string_get(s,pos), color=caml_bytes_get(info[2],_gV_), 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 _gT_=caml_call2(Stdlib_List[48],cat,st[4]);return _gT_} catch(_gU_) {_gU_ = caml_wrap_exception(_gU_); if(_gU_ === Stdlib[8]) {var st$0=delta$0(info,cat,-1,st), _gS_=status(st$0), res=[0,st$0[1],_gS_]; st[4] = [0,[0,cat,res],st[4]]; return res} throw _gU_}} function find_initial_state(re,cat) {try {var _gQ_=caml_call2(Stdlib_List[48],cat,re[2]);return _gQ_} catch(_gR_) {_gR_ = caml_wrap_exception(_gR_); if(_gR_ === 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 _gR_}} 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 _gP_=caml_string_get(s,pos); return caml_bytes_get(re[3],_gP_)} 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 _gM_=info$0[1][6],st$6=caml_check_bound(st$9[3],_gM_)[1 + _gM_]; if(0 <= st$6[1]) {if(groups) {var _gN_=st$6[1]; caml_check_bound(info$0[3],_gN_)[1 + _gN_] = pos$5 + 1 | 0} return st$6} if(st$6[1] === -3) {if(groups) {var _gO_=st$6[2]; caml_check_bound(info$0[3],_gO_)[1 + _gO_] = 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 _gD_=caml_string_get(s,pos), _gE_=caml_bytes_get(info[2],_gD_), st$0=caml_check_bound(st[3],_gE_)[1 + _gE_], 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 _gF_=caml_string_get(s,pos$1), _gG_=caml_bytes_get(info[2],_gF_), st$3=caml_check_bound(st$1[3],_gG_)[1 + _gG_], _gH_=st$1[1]; caml_check_bound(info[3],_gH_)[1 + _gH_] = pos$1; var pos$0=pos$1,st$2=st$1,st$1=st$3; continue} var _gI_=st$1[1]; caml_check_bound(info[3],_gI_)[1 + _gI_] = pos$1; return st$1} if(st$1[1] === -3) {var _gJ_=st$1[2]; caml_check_bound(info[3],_gJ_)[1 + _gJ_] = 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 _gK_=caml_string_get(s,pos$2), _gL_=caml_bytes_get(info[2],_gK_), st$5=caml_check_bound(st$4[3],_gL_)[1 + _gL_]; 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, _gB_=10 < n?caml_make_vect(n,0):_b9_.slice(), _gC_=_gB_; else var _gC_=[0]; var info=[0,re,re[3],_gC_,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 _gy_=caml_call2(CSetMap[28],v,cache[1]);return _gy_} catch(_gz_) {_gz_ = caml_wrap_exception(_gz_); if(_gz_ === Stdlib[8]) {var l= fold_right (s, empty, function(param,l) {var j=param[2],i=param[1],_gA_=caml_bytes_get(cm,j); return union(cseq(caml_bytes_get(cm,i),_gA_),l)}); cache[1] = caml_call3(CSetMap[4],v,l,cache[1]); return l} throw _gz_}} 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) {var _gv_=0; return sexp (fmt, s, function(_gw_,_gx_) {return pp_print_list(_gv_,pp$5,_gw_,_gx_)}, 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(_bj_,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,3); 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,3),_fY_),kind]; case 4: var _fZ_=before(ids,letter), _f0_=[0,seq$0(ids,332064784,after(ids,letter),_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[5],_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[11],_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[42],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) >>> 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)) {var switcher=match - 123 | 0; switch(switcher) {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 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)) {var switcher=c$1 - 58 | 0; switch(switcher) {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 integer(param) {if(eos$0(0))return 0; var d=get(0),switcher=d - 48 | 0; if(9 < switcher >>> 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),switcher$0=d$0 - 48 | 0; if(9 < switcher$0 >>> 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 branch(param) {var left=0; for(;;) {if(! eos$0(0) && ! test(124) && ! test(41)) {if(accept(46)) var r=dotall?any:notnl; else if(accept(40)) if(accept(63)) if(accept(58)) {var r$0=regexp(0); if(1 - accept(41))throw Parse_error$1; var r=r$0} else {if(! accept(35))throw Parse_error$1; for(;;) {if(eos$0(0))throw Parse_error$1; if(! accept(41)){i[1]++;continue} var r=epsilon; break}} else {var r$1=regexp(0); if(1 - accept(41))throw Parse_error$1; var r=[6,r$1]} else if(accept(94)) var r=multiline?bol:bos; else if(accept(36)) var r=multiline?eol:dollar_endonly?leol:eos; else if(accept(91)) var r=accept(94)?compl(bracket(0)):alt$0(bracket(0)); else if(accept(92)) {if(eos$0(0))throw Parse_error$1; var c=get(0),switcher=c - 48 | 0,switch$0=0; if(74 < switcher >>> 0) switch$0 = 1; else switch(switcher) {case 17:var r=bos;break; case 18:var r=not_boundary;break; case 20:var r=compl([0,digit,0]);break; case 23:var r=start$0;break; case 35:var r=compl([0,space,0]);break; case 39:var r=compl([0,alnum,[0,char$0(95),0]]);break; case 42:var r=leol;break; case 50:var r=alt$0([0,bow,[0,eow,0]]);break; case 52:var r=digit;break; case 67:var r=space;break; case 71:var r=alt$0([0,alnum,[0,char$0(95),0]]);break; case 74:var r=eos;break; 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:switch$0 = 1;break; default:throw Parse_error$1} if(switch$0)var r=char$0(c)} else {if(eos$0(0))throw Parse_error$1; 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$1; var r=char$0(c$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$0=match[1],j=accept(44)?integer(0):[0,i$0]; if(1 - accept(125))throw Parse_error$1; if(j){var j$0=j[1];if(j$0 < i$0)throw Parse_error$1} var _c9_=greedy_mod(repn(r,i$0,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),switcher=d - 48 | 0; if(9 < switcher >>> 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),switcher$0=d$0 - 48 | 0; if(9 < switcher$0 >>> 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} (function(){return this}())); //# 1 "../.js/tyxml.functor/tyxml_f.cma.js" (function(joo_global_object) {"use strict"; var runtime=joo_global_object.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[1]; 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)) {var switcher=c - 60 | 0; switch(switcher) {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)) {var switcher=code - 60 | 0; switch(switcher) {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} (function(){return this}())); //# 1 "../.js/tyxml/tyxml.cma.js" (function(joo_global_object) {"use strict"; var runtime=joo_global_object.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} (function(){return this}())); //# 1 ".mechanic.eobjs/byte/dune__exe__Mechanic.cmo.js" (function(joo_global_object) {"use strict"; var runtime=joo_global_object.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];return inp.value = caml_jsstring_of_string(v)} 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]; return inp.value = caml_jsstring_of_string(caml_call1(Stdlib[33],0))} 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];return td.innerHTML = caml_jsstring_of_string(v)} 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 email_body(param) {var b=caml_call1(Stdlib_Buffer[1],500); caml_call2(Stdlib_Printf[5],b,_c_); var _aJ_=read_string_input_by_id(cst_nom_prenom); caml_call3(Stdlib_Printf[5],b,_d_,_aJ_); var _aK_=read_string_input_by_id(cst_arrivee); caml_call3(Stdlib_Printf[5],b,_e_,_aK_); var _aL_=read_string_input_by_id(cst_depart); caml_call3(Stdlib_Printf[5],b,_f_,_aL_); var _aM_=Inventaire_linge[6]; function _aN_(f) {var _a0_=field_id_and_piece_by_fournitu(f); function _a1_(param,_a3_) {var short$0=_a3_[2], field_id=_a3_[1], detail=param[2], s=param[1], q=read_int_input_by_id(field_id); if(0 < q) var _a4_=caml_call1(Stdlib[33],q), _a5_=caml_call2(Stdlib[28],cst$2,_a4_), _a6_=[0,caml_call2(Stdlib[28],short$0,_a5_),detail]; else var _a6_=detail; return [0,s + q | 0,_a6_]} var param=caml_call1(caml_call2(Stdlib_List[25],_a1_,_g_),_a0_), _a2_=param[1]; if(0 === _a2_)return 0; var detail=param[2]; return [0,[0,f[2],_a2_,detail]]} var _aO_=caml_call2(Stdlib_List[22],_aN_,_aM_); function _aP_(param) {var detail=param[3],q=param[2],descr=param[1]; if(detail) var _aY_=caml_call2(Stdlib_String[6],cst$3,detail), _aZ_=caml_call2(Stdlib_Printf[4],_h_,_aY_); else var _aZ_=cst$4; return caml_call5(Stdlib_Printf[5],b,_i_,q,descr,_aZ_)} caml_call1(caml_call1(Stdlib_List[17],_aP_),_aO_); var _aQ_=Inventaire_linge[6],_aR_=0; function _aS_(total,f) {var _aU_=field_id_by_fourniture(f),_aV_=0; function _aW_(s,field_id) {return s + read_int_input_by_id(field_id) | 0} var _aX_=caml_call1(caml_call2(Stdlib_List[25],_aW_,_aV_),_aU_); return total + caml_mul(f[3],_aX_) | 0} var _aT_=caml_call3(Stdlib_List[25],_aS_,_aR_,_aQ_); caml_call3(Stdlib_Printf[5],b,_j_,_aT_); return caml_call1(Stdlib_Buffer[2],b)} function resume_body(param) {var _I_=[0,caml_call1(Tyxml_html[219],cst$5),0], _H_=0, _J_=Inventaire_linge[6], _K_=0; function _L_(total,f) {var _aF_=field_id_by_fourniture(f),_aG_=0; function _aH_(s,field_id) {return s + read_int_input_by_id(field_id) | 0} var _aI_=caml_call1(caml_call2(Stdlib_List[25],_aH_,_aG_),_aF_); return total + caml_mul(f[3],_aI_) | 0} var _M_=caml_call3(Stdlib_List[25],_L_,_K_,_J_), _N_=caml_call1(Stdlib[33],_M_), _O_=[0,caml_call1(Tyxml_html[219],_N_),_I_], _P_=[0,caml_call1(Tyxml_html[219],cst_Total),0], _Q_=[0,caml_call2(Tyxml_html[254],0,_P_),_O_], _R_=[0,caml_call2(Tyxml_html[241],0,_Q_),_H_], _S_=[0,caml_call2(Tyxml_html[264],0,0),_R_], _T_=Inventaire_linge[6]; function _U_(f) {var _ax_=field_id_and_piece_by_fournitu(f); function _ay_(param,_aB_) {var short$0=_aB_[2], field_id=_aB_[1], detail=param[2], s=param[1], q=read_int_input_by_id(field_id); if(0 < q) var _aC_=caml_call1(Stdlib[33],q), _aD_=caml_call2(Stdlib[28],cst$6,_aC_), _aE_=[0,caml_call2(Stdlib[28],short$0,_aD_),detail]; else var _aE_=detail; return [0,s + q | 0,_aE_]} var param=caml_call1(caml_call2(Stdlib_List[25],_ay_,_k_),_ax_), _az_=param[1]; if(0 === _az_)return 0; var detail=param[2],_aA_=caml_call1(Stdlib_List[9],detail); return [0,[0,f[2],_az_,_aA_]]} var _V_=caml_call2(Stdlib_List[22],_U_,_T_); function _W_(param) {var detail=param[3],q=param[2],descr=param[1],_ap_=0; if(detail) var _aq_=caml_call2(Stdlib_String[6],cst$7,detail), _ar_=caml_call2(Stdlib_Printf[4],_l_,_aq_); else var _ar_=cst$9; var _as_=[0,caml_call1(Tyxml_html[219],_ar_),_ap_], _at_=[0,caml_call1(Tyxml_html[219],descr),_as_], _au_=[0,caml_call1(Tyxml_html[219],cst$8),_at_], _av_=caml_call1(Stdlib[33],q), _aw_=[0,caml_call1(Tyxml_html[219],_av_),_au_]; return caml_call2(Tyxml_html[250],0,_aw_)} var _X_=caml_call1(caml_call1(Stdlib_List[19],_W_),_V_), _Y_=[0,caml_call2(Tyxml_html[247],0,_X_),_S_], _Z_=[0,caml_call2(Tyxml_html[264],0,0),_Y_], ___=read_string_input_by_id(cst_depart$0), _$_=[0,caml_call1(Tyxml_html[219],___),0], _aa_=[0,caml_call1(Tyxml_html[219],cst_Date_de_d_part),_$_], _ab_=[0,caml_call2(Tyxml_html[254],0,_aa_),0], _ac_=[0,caml_call2(Tyxml_html[241],0,_ab_),_Z_], _ad_=read_string_input_by_id(cst_arrivee$0), _ae_=[0,caml_call1(Tyxml_html[219],_ad_),0], _af_=[0,caml_call1(Tyxml_html[219],cst_Date_d_arriv_e),_ae_], _ag_=[0,caml_call2(Tyxml_html[254],0,_af_),0], _ah_=[0,caml_call2(Tyxml_html[241],0,_ag_),_ac_], _ai_=read_string_input_by_id(cst_nom_prenom$0), _aj_=[0,caml_call1(Tyxml_html[219],_ai_),0], _ak_=[0,caml_call1(Tyxml_html[219],cst_Locataire),_aj_], _al_=[0,caml_call2(Tyxml_html[254],0,_ak_),0], _am_=[0,caml_call2(Tyxml_html[241],0,_al_),_ah_], _an_=caml_call2(Tyxml_html[244],0,_am_), _ao_=caml_call3(Tyxml_html[346],0,0,0); return caml_jsstring_of_string (caml_call1(caml_call2(Stdlib_Format[133],_m_,_ao_),_an_))} function update_msg(param) {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], _E_=email_body(0), _F_=caml_call2(Stdlib[28],cst_subject_R_servation_linge_,_E_), _G_=caml_call2(Stdlib[28],Inventaire_linge[2],_F_); a.href = caml_jsstring_of_string(caml_call2(Stdlib[28],cst_mailto,_G_))} 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];return resume.innerHTML = resume_body(0)} return 0} function compute(param) {var _n_=Inventaire_linge[6]; function _o_(f) {var _y_=field_id_by_fourniture(f),_z_=0; function _A_(s,field_id) {return s + read_int_input_by_id(field_id) | 0} var qte=caml_call1(caml_call2(Stdlib_List[25],_A_,_z_),_y_), _B_=caml_call1(Stdlib[33],caml_mul(qte,f[3])), _C_=caml_call2(Stdlib[28],_B_,cst$10); set_td_by_id(f[1],_C_); var _D_=caml_call1(Stdlib[33],qte); return set_td_by_id(caml_call2(Stdlib[28],f[1],cst_qte),_D_)} caml_call2(Stdlib_List[17],_o_,_n_); var _p_=Inventaire_linge[6],_q_=0; function _r_(total,f) {var _u_=field_id_by_fourniture(f),_v_=0; function _w_(s,field_id) {return s + read_int_input_by_id(field_id) | 0} var _x_=caml_call1(caml_call2(Stdlib_List[25],_w_,_v_),_u_); return total + caml_mul(f[3],_x_) | 0} var _s_=caml_call3(Stdlib_List[25],_r_,_q_,_p_), _t_=caml_call1(Stdlib[33],_s_); set_td_by_id (cst_total,caml_call1(caml_call2(Stdlib_Fun[2],Stdlib[28],cst$11),_t_)); return update_msg(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[50],cst_compute,compute); caml_call2(Js_of_ocaml_Js[50],cst_reset_form,reset_form); var Dune_exe_Mechanic= [0, set_string_input_by_id, read_string_input_by_id, zero_int_input_by_id, read_int_input_by_id, set_td_by_id, field_id_by_fourniture, field_id_and_piece_by_fournitu, all_names, email_body, resume_body, update_msg, compute, reset_form]; runtime.caml_register_global(68,Dune_exe_Mechanic,"Dune__exe__Mechanic"); return} (function(){return this}())); //# 1 "../.js/stdlib/std_exit.cmo.js" (function(joo_global_object) {"use strict"; var runtime=joo_global_object.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} (function(){return this}())); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLjAsImZpbGUiOiJtZWNoYW5pYy5iYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJuYW1lcyI6WyJjYW1sX2ludDY0X2lzX3plcm8iLCJ4IiwiY2FtbF9zdHJfcmVwZWF0IiwibiIsInMiLCJyIiwibCIsImNhbWxfaW50NjRfb2Zmc2V0IiwiTWF0aCIsImNhbWxfcmFpc2VfY29uc3RhbnQiLCJ0YWciLCJjYW1sX2dsb2JhbF9kYXRhIiwiY2FtbF9yYWlzZV96ZXJvX2RpdmlkZSIsIk1sSW50NjQiLCJsbyIsIm1pIiwiaGkiLCJ0aGlzIiwieGhpIiwiaCIsInNpZ24iLCJvZmZzZXQiLCJtb2R1bHVzIiwiZGl2aXNvciIsInF1b3RpZW50IiwieSIsInEiLCJjYW1sX2ludDY0X29mX2ludDMyIiwiY2FtbF9pbnQ2NF90b19pbnQzMiIsImNhbWxfaW50NjRfaXNfbmVnYXRpdmUiLCJjYW1sX2ludDY0X25lZyIsImNhbWxfc3ViYXJyYXlfdG9fanNieXRlcyIsImEiLCJpIiwibGVuIiwiZiIsIlN0cmluZyIsIm51bGwiLCJjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzIiwiY2FtbF9qc2J5dGVzX29mX3N0cmluZyIsImNhbWxfcmFpc2Vfd2l0aF9hcmciLCJhcmciLCJqc29vX2lzX2FzY2lpIiwiY2FtbF91dGYxNl9vZl91dGY4IiwiYiIsInQiLCJjIiwiYzEiLCJjMiIsInYiLCJqIiwiTWxCeXRlcyIsImNvbnRlbnRzIiwibGVuZ3RoIiwiY29udGVudCIsImNhbWxfYnl0ZXNfb2ZfanNieXRlcyIsImNhbWxfc3RyaW5nX29mX2pzYnl0ZXMiLCJjYW1sX3JhaXNlX3dpdGhfc3RyaW5nIiwibXNnIiwiY2FtbF9pbnZhbGlkX2FyZ3VtZW50IiwiY2FtbF9wYXJzZV9mb3JtYXQiLCJmbXQiLCJjYW1sX2ZpbmlzaF9mb3JtYXR0aW5nIiwicmF3YnVmZmVyIiwiYnVmZmVyIiwiY2FtbF9pbnQ2NF9mb3JtYXQiLCJ3YmFzZSIsImN2dGJsIiwicCIsImNhbWxfZXhwbTFfZmxvYXQiLCJjYW1sX2pzc3RyaW5nX29mX3N0cmluZyIsIm1ha2VfcGF0aF9pc19hYnNvbHV0ZSIsInBvc2l4IiwicGF0aCIsIndpbjMyIiwic3BsaXREZXZpY2VSZSIsInJlc3VsdCIsImRldmljZSIsImlzVW5jIiwiQm9vbGVhbiIsInJvb3QiLCJzZXAiLCJqb29fZ2xvYmFsX29iamVjdCIsInBhdGhfaXNfYWJzb2x1dGUiLCJjYW1sX3RyYWlsaW5nX3NsYXNoIiwibmFtZSIsImNhbWxfY3VycmVudF9kaXIiLCJjYW1sX21ha2VfcGF0aCIsImNvbXAwIiwiY29tcCIsIm5jb21wIiwiY2FtbF91dGY4X29mX3V0ZjE2IiwiZCIsImNhbWxfYnl0ZXNfb2ZfdXRmMTZfanNzdHJpbmciLCJjYW1sX3N0cmluZ19vZl9qc3N0cmluZyIsInVuaXhfZXJyb3IiLCJtYWtlX3VuaXhfZXJyX2FyZ3MiLCJjb2RlIiwic3lzY2FsbCIsImVycm5vIiwidmFyaWFudCIsImFyZ3MiLCJjYW1sX25hbWVkX3ZhbHVlcyIsImNhbWxfbmFtZWRfdmFsdWUiLCJubSIsImNhbWxfcmFpc2Vfd2l0aF9hcmdzIiwiY2FtbF9pc19tbF9ieXRlcyIsImNhbWxfaXNfbWxfc3RyaW5nIiwiY2FtbF9ieXRlc19vZl9hcnJheSIsImNhbWxfYnl0ZXNfb2Zfc3RyaW5nIiwiY2FtbF9yYWlzZV9zeXNfZXJyb3IiLCJjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZSIsImNhbWxfYnl0ZXNfYm91bmRfZXJyb3IiLCJjYW1sX2J5dGVzX3Vuc2FmZV9nZXQiLCJjYW1sX2J5dGVzX2dldCIsImNhbWxfY3JlYXRlX2J5dGVzIiwiY2FtbF9tbF9ieXRlc19sZW5ndGgiLCJjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXkiLCJBcnJheSIsImNhbWxfYmxpdF9ieXRlcyIsInMxIiwiaTEiLCJzMiIsImkyIiwiY2FtbF9ibGl0X3N0cmluZyIsImUiLCJNbEZpbGUiLCJNbEZha2VGaWxlIiwib2xkIiwiYnVmIiwicG9zIiwiY2xlbiIsIm5ld19zdHIiLCJvbGRfZGF0YSIsIk1sRmFrZURldmljZSIsInJlcyIsIlN5bWJvbCIsIm5hbWVfc2xhc2giLCJtb2RlIiwicmFpc2VfdW5peCIsInBhcmVudCIsIlJlZ0V4cCIsInNlZW4iLCJtIiwib2siLCJmaWxlIiwiYnl0ZXMiLCJjYW1sX21sX3N0cmluZ19sZW5ndGgiLCJjYW1sX3N0cmluZ191bnNhZmVfZ2V0IiwiY2FtbF9hcnJheV9vZl9zdHJpbmciLCJjYW1sX2FycmF5X29mX2J5dGVzIiwiY2FtbF9ieXRlc191bnNhZmVfc2V0IiwiY2FtbF9ieXRlc19zZXQiLCJNbE5vZGVGaWxlIiwiZmQiLCJyZXF1aXJlIiwiZXJyIiwiYnVmX29mZnNldCIsIk1sTm9kZURldmljZSIsImNvbnN0cyIsImtleSIsIm8iLCJqc19zdGF0cyIsInRvX2RpciIsInRhcmdldCIsImxpbmsiLCJmaWxlX2tpbmQiLCJjYW1sX2dldF9yb290IiwiY2FtbF9mYWlsd2l0aCIsImNhbWxfcm9vdCIsImZzX25vZGVfc3VwcG9ydGVkIiwianNvb19tb3VudF9wb2ludCIsInJlc29sdmVfZnNfZGV2aWNlIiwiY2FtbF9zeXNfaXNfZGlyZWN0b3J5IiwiY2FtbF9yYWlzZV9ub3RfZm91bmQiLCJjYW1sX3N5c19nZXRlbnYiLCJnIiwidW5kZWZpbmVkIiwic2hpZnRfcmlnaHRfbmF0IiwibmF0MSIsIm9mczEiLCJsZW4xIiwibmF0MiIsIm9mczIiLCJuYml0cyIsIndyYXAiLCJjYW1sX2dyX3N0YXRlIiwiY2FtbF9ncl9zdGF0ZV9nZXQiLCJjYW1sX2dyX3BvaW50X2NvbG9yIiwiaW0iLCJNbE9iamVjdFRhYmxlIiwiTmFpdmVMb29rdXAiLCJvYmpzIiwiY2FtbF9zeXNfcmVuYW1lIiwib19yb290Iiwibl9yb290IiwiY2FtbF9sb2cxMF9mbG9hdCIsInVuaXhfdW5saW5rIiwiY2FtbF9ydW50aW1lX3dhcm5pbmdzIiwiY2FtbF9tbF9lbmFibGVfcnVudGltZV93YXJuaW5ncyIsImJvb2wiLCJjYW1sX2NsYXNzaWZ5X2Zsb2F0IiwiaXNGaW5pdGUiLCJpc05hTiIsInVuaXhfcm1kaXIiLCJjYW1sX21sX3JlZmlsbF9pbnB1dCIsImNoYW4iLCJzdHIiLCJzdHJfbGVuIiwiY2FtbF9tbF9jaGFubmVscyIsImNhbWxfbWxfbWF5X3JlZmlsbF9pbnB1dCIsImNoYW5pZCIsImNhbWxfYXJyYXlfYm91bmRfZXJyb3IiLCJjYW1sX21sX2lucHV0X3NjYW5fbGluZSIsImNhbWxfZ2NfbWlub3IiLCJjYW1sX2ludDY0X29mX2J5dGVzIiwiY2FtbF9iYV91aW50OF9nZXQ2NCIsImJhIiwiaTAiLCJvZnMiLCJiMSIsImIyIiwiYjMiLCJiNCIsImI1IiwiYjYiLCJiNyIsImI4IiwiY2FtbF9pbnQ2NF90b19ieXRlcyIsImNhbWxfaW50NjRfbWFyc2hhbCIsIndyaXRlciIsInNpemVzIiwiY2FtbF9iYV9udW1fZGltcyIsImNhbWxfcmV0dXJuX2V4bl9jb25zdGFudCIsImNhbWxfd3JhcF9leGNlcHRpb24iLCJjYW1sX2NyZWF0ZV9maWxlIiwiY2FtbF9mc19pbml0IiwidG1wIiwiY2FtbF9zZXRfcGFyc2VyX3RyYWNlIiwiY2FtbF9saXN0X29mX2pzX2FycmF5IiwidW5peF9nZXR0aW1lb2ZkYXkiLCJEYXRlIiwiY2FtbF9tdWwiLCJjYW1sX2hhc2hfbWl4X2ludCIsIm51bV9kaWdpdHNfbmF0IiwibmF0IiwiY2FtbF9oYXNoX25hdCIsImNhbWxfY2FsbF9nZW4iLCJhcmdzTGVuIiwiZXh0cmFfYXJncyIsImFyZ3VtZW50cyIsIm5hcmdzIiwiY2FtbF9qc193cmFwX2NhbGxiYWNrX2FyZ3VtZW50cyIsImNhbWxfc3lzX2NoZGlyIiwiZGlyIiwiY2FtbF9nY19jb3VudGVycyIsImNhbWxfZ3Jfc3luY2hyb25pemUiLCJ1bml4X2hhc19zeW1saW5rIiwidW5pdCIsImxvZzJfb2siLCJqc29vX2Zsb29yX2xvZzIiLCJJbmZpbml0eSIsImNhbWxfaW50MzJfYml0c19vZl9mbG9hdCIsImZsb2F0MzJhIiwiaW50MzJhIiwiY2FtbF9pbnQ2NF9jcmVhdGVfbG9fbWlfaGkiLCJjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQiLCJleHAiLCJrIiwicjMiLCJyMiIsInIxIiwiY2FtbF9iYV9zZXJpYWxpemUiLCJzeiIsImNvbXBsZXgiLCJjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50Iiwia2luZCIsImNhbWxfYmFfY3JlYXRlX2J1ZmZlciIsInNpemUiLCJ2aWV3IiwiZGF0YSIsImNhbWxfaW50MzJfZmxvYXRfb2ZfYml0cyIsImNhbWxfaW50NjRfZmxvYXRfb2ZfYml0cyIsIk5hTiIsImNhbWxfYmFfZ2V0X3NpemUiLCJkaW1zIiwibl9kaW1zIiwiY2FtbF9pbnQ2NF9jcmVhdGVfbG9faGkiLCJjYW1sX2ludDY0X2hpMzIiLCJjYW1sX2ludDY0X2xvMzIiLCJjYW1sX2JhX2N1c3RvbV9uYW1lIiwiTWxfQmlnYXJyYXkiLCJsYXlvdXQiLCJyZSIsInRvdGFsIiwiazEiLCJrMiIsIk1sX0JpZ2FycmF5X2NfMV8xIiwiY2FtbF9iYV9jcmVhdGVfdW5zYWZlIiwic2l6ZV9wZXJfZWxlbWVudCIsImNhbWxfYmFfZGVzZXJpYWxpemUiLCJyZWFkZXIiLCJudW1fZGltcyIsInNpemVfZGltIiwic2l6ZV9kaW1faGkiLCJzaXplX2RpbV9sbyIsInNpeHR5IiwiaW50NjQiLCJjYW1sX2JhX2NvbXBhcmUiLCJjYW1sX2hhc2hfbWl4X2ludDY0IiwiY2FtbF9oYXNoX21peF9mbG9hdCIsInYwIiwiY2FtbF9iYV9oYXNoIiwibnVtX2VsdHMiLCJ3IiwiY2FtbF9pbnQzMl91bm1hcnNoYWwiLCJjYW1sX25hdGl2ZWludF91bm1hcnNoYWwiLCJjYW1sX2ludDY0X3VubWFyc2hhbCIsImNhbWxfaW50NjRfY29tcGFyZSIsImNhbWxfaW50NjRfaGFzaCIsImNhbWxfY3VzdG9tX29wcyIsImNhbWxfY29tcGFyZV92YWxfZ2V0X2N1c3RvbSIsImNhbWxfY29tcGFyZV92YWxfbnVtYmVyX2N1c3RvbSIsIm51bSIsImN1c3RvbSIsInN3YXAiLCJjYW1sX2NvbXBhcmVfdmFsX3RhZyIsIk51bWJlciIsImNhbWxfaW50X2NvbXBhcmUiLCJjYW1sX2J5dGVzX2NvbXBhcmUiLCJjYW1sX3N0cmluZ19jb21wYXJlIiwiY2FtbF9jb21wYXJlX3ZhbCIsInN0YWNrIiwidGFnX2EiLCJ0YWdfYiIsImNhbWxfZ3JlYXRlcnRoYW4iLCJkaXZfaGVscGVyIiwieiIsImRpdl9kaWdpdF9uYXQiLCJuYXRxIiwib2ZzcSIsIm5hdHIiLCJvZnNyIiwicmVtIiwibnVtX2xlYWRpbmdfemVyb19iaXRzX2luX2RpZ2l0Iiwic2hpZnRfbGVmdF9uYXQiLCJNbE5hdCIsImNyZWF0ZV9uYXQiLCJhcnIiLCJzZXRfdG9femVyb19uYXQiLCJpbmNyX25hdCIsImNhcnJ5X2luIiwiY2FycnkiLCJhZGRfbmF0IiwibGVuMiIsIm5hdF9vZl9hcnJheSIsIm11bHRfZGlnaXRfbmF0IiwibmF0MyIsIm9mczMiLCJ4MSIsIngyIiwieDMiLCJkZWNyX25hdCIsImJvcnJvdyIsInN1Yl9uYXQiLCJjb21wYXJlX25hdCIsImRpdl9uYXQiLCJxdW8iLCJjYW1sX2JhX2JsaXQiLCJzcmMiLCJkc3QiLCJpc19kaWdpdF9pbnQiLCJjYW1sX2ludDY0X2RpdiIsImNhbWxfanNfaHRtbF9lbnRpdGllcyIsImVudGl0eSIsInRlbXAiLCJkb2N1bWVudCIsImNhbWxfc3RyaW5nX3Vuc2FmZV9zZXQiLCJjYW1sX2ludDY0X29mX2Zsb2F0IiwiY2FtbF9tbF9jaGFubmVsX3NpemVfNjQiLCJjYW1sX2JhX3NldF8yIiwiY2FtbF9hcmd2IiwibWFpbiIsImFyZ3YiLCJhcmdzMiIsImNhbWxfZXhlY3V0YWJsZV9uYW1lIiwiY2FtbF9qc19ldmFsX3N0cmluZyIsImV2YWwiLCJzZXJpYWxpemVfbmF0IiwiY2FtbF9tZW1wcm9mX3NldCIsIl9jb250cm9sIiwiY2FtbF9zeXNfZXhpdCIsImNhbWxfY2hhbm5lbF9kZXNjcmlwdG9yIiwiY2FtbF9qc19mcm9tX2FycmF5IiwiY2FtbF9iYV9yZXNoYXBlIiwidmluZCIsIm5ld19kaW0iLCJjYW1sX29vX2xhc3RfaWQiLCJjYW1sX3NldF9vb19pZCIsImNhbWxfZ3JfZmlsbF9yZWN0IiwiY2FtbF9iaWdzdHJpbmdfYmxpdF9zdHJpbmdfdG9fYmEiLCJzdHIxIiwicG9zMSIsImJhMiIsInBvczIiLCJzbGljZSIsImNhbWxfZ3Jfc2V0X3dpbmRvd190aXRsZSIsImpzbmFtZSIsImNhbWxfZ2V0X2dsb2JhbF9kYXRhIiwiY2FtbF9pbnQ2NF9zaGlmdF9yaWdodF91bnNpZ25lZCIsImNhbWxfYmFfdWludDhfZ2V0MTYiLCJjYW1sX2NvbXBhcmUiLCJjYW1sX2ZyZXNoX29vX2lkIiwiY2FtbF9pbnQ2NF90b19mbG9hdCIsImNhbWxfYmFfZ2V0XzEiLCJjYW1sX2JpZ3N0cmluZ19tZW1jbXAiLCJjYW1sX25ld19zdHJpbmciLCJjYW1sX2VyZl9mbG9hdCIsImExIiwiYTIiLCJhMyIsImE0IiwiYTUiLCJjYW1sX2JhX3VpbnQ4X2dldDMyIiwiY2FtbF9yYXdfYmFja3RyYWNlX2xlbmd0aCIsImNhbWxfb2JqX2Jsb2NrIiwiY2FtbF9ncl9jbGVhcl9ncmFwaCIsImJpZ3N0cmluZ190b19hcnJheV9idWZmZXIiLCJicyIsImNhbWxfc3lzX2NvbnN0X25ha2VkX3BvaW50ZXJzX2NoZWNrZWQiLCJfdW5pdCIsImx4b3JfZGlnaXRfbmF0IiwiY2FtbF9vYmpfYWRkX29mZnNldCIsImNhbWxfZmluYWxfcmVsZWFzZSIsImNhbWxfanNfdG9fYXJyYXkiLCJjYW1sX2dyX3Bsb3QiLCJjb2xvciIsImNhbWxfYnl0ZXNfc2V0NjQiLCJpNjQiLCJjYW1sX2J5dGVzX3NldDE2IiwiaTE2IiwiY2FtbF9zdHJpbmdfc2V0MTYiLCJjYW1sX2ludDY0X2Jzd2FwIiwiY2FtbF9maWxsX2J5dGVzIiwiY2FtbF9maWxsX3N0cmluZyIsImNhbWxfZ2NfbWFqb3IiLCJjYW1sX2xleF9hcnJheSIsImNhbWxfbGV4X2VuZ2luZSIsInRibCIsInN0YXJ0X3N0YXRlIiwibGV4YnVmIiwibGV4X2J1ZmZlciIsImxleF9idWZmZXJfbGVuIiwibGV4X3N0YXJ0X3BvcyIsImxleF9jdXJyX3BvcyIsImxleF9sYXN0X3BvcyIsImxleF9sYXN0X2FjdGlvbiIsImxleF9lb2ZfcmVhY2hlZCIsImxleF9iYXNlIiwibGV4X2JhY2t0cmsiLCJsZXhfZGVmYXVsdCIsImxleF90cmFucyIsImxleF9jaGVjayIsInN0YXRlIiwiYmFzZSIsImJhY2t0cmsiLCJ1bml4X2dldHVpZCIsImNhbWxfc3lzX2ZpbGVfZXhpc3RzIiwiY2FtbF9jb252ZXJ0X3Jhd19iYWNrdHJhY2Vfc2xvdCIsImNhbWxfYXJyYXlfc3ViIiwiY2FtbF9ieXRlc19lcXVhbCIsImNhbWxfZ3Jfc2l6ZV94IiwiY2FtbF9tbF9kZWJ1Z19pbmZvX3N0YXR1cyIsIm9zX3R5cGUiLCJjYW1sX3N5c19jb25zdF9vc3R5cGVfY3lnd2luIiwiY2FtbF9jb3NoX2Zsb2F0IiwiY2FtbF9lcGhlX2tleV9vZmZzZXQiLCJjYW1sX3dlYWtfY2hlY2siLCJjYW1sX2VwaGVfY2hlY2tfa2V5IiwiY2FtbF9oYXNoX21peF9maW5hbCIsImNhbWxfZ3JfdGV4dF9zaXplIiwidHh0IiwiY2FtbF9sZXhfcnVuX21lbSIsIm1lbSIsImN1cnJfcG9zIiwiY2FtbF9sZXhfcnVuX3RhZyIsImNhbWxfbmV3X2xleF9lbmdpbmUiLCJsZXhfbWVtIiwibGV4X2Jhc2VfY29kZSIsImxleF9iYWNrdHJrX2NvZGUiLCJsZXhfZGVmYXVsdF9jb2RlIiwibGV4X3RyYW5zX2NvZGUiLCJsZXhfY2hlY2tfY29kZSIsImxleF9jb2RlIiwicGNfb2ZmIiwicHN0YXRlIiwiYmFzZV9jb2RlIiwiY2FtbF9iYV91aW50OF9zZXQ2NCIsImNhbWxfc3lzX2V4ZWN1dGFibGVfbmFtZSIsImNhbWxfbGVzc2VxdWFsIiwiY2FtbF9hY29zaF9mbG9hdCIsImNhbWxfbWxfZmx1c2giLCJvdXRwdXQiLCJjYW1sX21sX3NlZWtfb3V0XzY0IiwiY29tcGFyZV9uYXRfcmVhbCIsImNhbWxfZ2Nfc2V0IiwiY2FtbF9qc19nZXQiLCJjYW1sX2djX2NvbXBhY3Rpb24iLCJjYW1sX3dlYWtfZ2V0IiwiY2FtbF9lcGhlX2dldF9rZXkiLCJjYW1sX2JpZ3N0cmluZ19ibGl0X2J5dGVzX3RvX2JhIiwid2luX2NsZWFudXAiLCJjYW1sX3N5c19jbG9zZSIsImNhbWxfbWxfY2xvc2VfY2hhbm5lbCIsImNhbWxfZXhuX3dpdGhfanNfYmFja3RyYWNlIiwiZXhuIiwiZm9yY2UiLCJjYW1sX3N5c19pc2F0dHkiLCJfY2hhbiIsImlzX2RpZ2l0X3plcm8iLCJ1bml4X2luZXRfYWRkcl9vZl9zdHJpbmciLCJjYW1sX2pzX3NldCIsImNhbWxfYXJyYXlfZ2V0IiwiYXJyYXkiLCJpbmRleCIsImNhbWxfbG9nMl9mbG9hdCIsImNhbWxfZ2NfaHVnZV9mYWxsYmFja19jb3VudCIsImNhbWxfc3BhY2V0aW1lX29ubHlfd29ya3NfZm9yX25hdGl2ZV9jb2RlIiwiY2FtbF9pbnQ2NF9zdWIiLCJjYW1sX21sX3NlZWtfaW5fNjQiLCJjYW1sX2ludDY0X3NoaWZ0X2xlZnQiLCJjYW1sX25vdGVxdWFsIiwiY2FtbF9zeXNfY29uc3RfaW50X3NpemUiLCJjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFjayIsImNhbWxfaXNfanMiLCJjYW1sX2JhX2RpbSIsImNhbWxfYmFfZGltXzEiLCJ1bml4X2xvY2FsdGltZSIsImRfbnVtIiwiamFudWFyeWZpcnN0IiwiZG95IiwiamFuIiwianVsIiwic3RkVGltZXpvbmVPZmZzZXQiLCJjYW1sX2pzX21ldGhfY2FsbCIsImNhbWxfd2Vha19jcmVhdGUiLCJjYW1sX2VwaGVfY3JlYXRlIiwiY2FtbF9qc190b19ieXRlX3N0cmluZyIsInVuaXhfbWt0aW1lIiwidG0iLCJ0bTIiLCJjYW1sX3RyYW1wb2xpbmUiLCJjYW1sX2J5dGVzX2dldDY0IiwiY2FtbF93ZWFrX3NldCIsImNhbWxfc3lzX3JlbW92ZSIsImNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yIiwiY2FtbF9zdHJpbmdfZ2V0MzIiLCJjYW1sX2h5cG90X2Zsb2F0IiwiY2FtbF9qc19jYWxsIiwiY2FtbF9zeXNfY29uc3RfbWF4X3dvc2l6ZSIsImNhbWxfZXBoZV91bnNldF9rZXkiLCJjYW1sX2hhc2hfbWl4X2J5dGVzX2FyciIsImNhbWxfaGFzaF9taXhfanNieXRlcyIsImNhbWxfaGFzaF9taXhfYnl0ZXMiLCJjYW1sX2J5dGVzX2xlc3N0aGFuIiwiY2FtbF9lcmZjX2Zsb2F0IiwiY2FtbF9ncl9maWxsX3BvbHkiLCJhciIsImNhbWxfZ2NfcXVpY2tfc3RhdCIsImNhbWxfcmFpc2VfZW5kX29mX2ZpbGUiLCJjYW1sX21sX2lucHV0X2ludCIsImNhbWxfZ3JfZGlzcGxheV9tb2RlIiwiY2FtbF9vYmpfcmVhY2hhYmxlX3dvcmRzIiwibnRoX2RpZ2l0X25hdCIsImNhbWxfYXJyYXlfYmxpdCIsImNhbWxfZmxvYXRfb2Zfc3RyaW5nIiwibTMiLCJtYW50aXNzYSIsInBhcnNlSW50IiwiZXhwb25lbnQiLCJjYW1sX3N5c19nZXRjd2QiLCJjYW1sX3N5c19jb25zdF9iaWdfZW5kaWFuIiwiY2FtbF9saXN0X3RvX2pzX2FycmF5IiwiY2FtbF9sZWdhY3lfY3VzdG9tX2NvZGUiLCJjYW1sX291dHB1dF92YWwiLCJXcml0ZXIiLCJ2YWx1ZSIsImZsYWdzIiwibm9fc2hhcmluZyIsImNsb3N1cmVzIiwiaW50ZXJuX29ial90YWJsZSIsIm1lbW8iLCJleGlzdGluZ19vZmZzZXQiLCJleHRlcm5fcmVjIiwib3BzIiwic3pfMzJfNjQiLCJoZWFkZXJfcG9zIiwib2xkX3BvcyIsInR5cGVfb2ZfdiIsImNhbWxfc3RyaW5nX29mX2FycmF5IiwiY2FtbF9vdXRwdXRfdmFsdWVfdG9fc3RyaW5nIiwiY2FtbF9yYWlzZV9ub3RfYV9kaXIiLCJjYW1sX3N5c19zeXN0ZW1fY29tbWFuZCIsImNtZCIsInVuaXhfaXNhdHR5IiwiZmlsZURlc2NyaXB0b3IiLCJ0dHkiLCJjYW1sX2pzX2Vycm9yX29mX2V4Y2VwdGlvbiIsImRlc2VyaWFsaXplX25hdCIsImluaXRpYWxpemVfbmF0IiwiY2FtbF9ncl9vcGVuX3N1YndpbmRvdyIsInVuaXhfbHN0YXQiLCJ1bml4X2xzdGF0XzY0IiwianNfcHJpbnRfc3Rkb3V0IiwiY2FtbF9jb3B5c2lnbl9mbG9hdCIsImNhbWxfZ3Jfc2V0X3RleHRfc2l6ZSIsImNhbWxfbWQ1X2J5dGVzIiwiYWRkIiwieHgiLCJmZiIsImdnIiwiaGgiLCJpaSIsIm1kNSIsImNhbWxfYmFfc2V0X2dlbmVyaWMiLCJjYW1sX2VwaGVfc2V0X2tleSIsImNhbWxfYnl0ZXNfbGVzc2VxdWFsIiwiY2FtbF9zdHJpbmdfbGVzc2VxdWFsIiwiY2FtbF9zdHJpbmdfZ3JlYXRlcmVxdWFsIiwiY2FtbF9pbnQ2NF9hZGQiLCJjYW1sX25leHRhZnRlcl9mbG9hdCIsImJpdHMiLCJvbmUiLCJjYW1sX2dyX3NpemVfeSIsImNhbWxfbWxfcG9zX2luIiwiY2FtbF9pbnQ2NF9hbmQiLCJjYW1sX3N5c19jb25zdF93b3JkX3NpemUiLCJjYW1sX3N0ZF9vdXRwdXQiLCJzbGVuIiwianNfcHJpbnRfc3RkZXJyIiwiY2FtbF9zeXNfb3Blbl9pbnRlcm5hbCIsImlkeCIsImluZm8iLCJjYW1sX3N5c19vcGVuIiwiX3Blcm1zIiwiTWxTdHJpbmdSZWFkZXIiLCJjYW1sX2Zsb2F0X29mX2J5dGVzIiwiY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3JlYWRlciIsIl9tYWdpYyIsIl9ibG9ja19sZW4iLCJudW1fb2JqZWN0cyIsIl9zaXplXzMyIiwiX3NpemVfNjQiLCJvYmpfY291bnRlciIsImludGVybl9yZWMiLCJoZWFkZXIiLCJleHBlY3RlZF9zaXplIiwiY2FtbF9zdHJpbmdfb2ZfYnl0ZXMiLCJjYW1sX2lucHV0X3ZhbHVlX2Zyb21fYnl0ZXMiLCJjYW1sX3N0cmluZ19nZXQiLCJyZV9tYXRjaCIsInJlX3dvcmRfbGV0dGVycyIsIm9wY29kZXMiLCJpc193b3JkX2xldHRlciIsImluX2JpdHNldCIsInJlX21hdGNoX2ltcGwiLCJwYXJ0aWFsIiwicHJvZyIsImNwb29sIiwibm9ybXRhYmxlIiwibnVtZ3JvdXBzIiwibnVtcmVnaXN0ZXJzIiwic3RhcnRjaGFycyIsInBjIiwicXVpdCIsImdyb3VwcyIsInJlX3JlZ2lzdGVyIiwiYmFja3RyYWNrIiwiaXRlbSIsInB1c2giLCJhY2NlcHQiLCJwcmVmaXhfbWF0Y2giLCJvcCIsInNhcmciLCJ1YXJnIiwiZ3JvdXAiLCJFcnJvciIsInJlX3NlYXJjaF9iYWNrd2FyZCIsImNhbWxfanNfZnJvbV9zdHJpbmciLCJjYW1sX2JhX3N1YiIsImNoYW5nZWRfZGltIiwibXVsIiwibmV3X2RpbXMiLCJuZXdfZGF0YSIsImNhbWxfZ2NfZnVsbF9tYWpvciIsImNhbWxfYnl0ZXNfc2V0MzIiLCJpMzIiLCJjYW1sX2dyX3NpZ2lvX3NpZ25hbCIsImNhbWxfYmFfdWludDhfc2V0MzIiLCJjYW1sX3N5c19jb25zdF9vc3R5cGVfdW5peCIsImNhbWxfc2lnbmJpdF9mbG9hdCIsImNhbWxfZ3JfY3VycmVudF94IiwiY2FtbF9ncl9zZXRfbGluZV93aWR0aCIsImNhbWxfZ3Jfc2V0X2ZvbnQiLCJjYW1sX2dyX3NldF9jb2xvciIsImNvbnZlcnQiLCJudW1iZXIiLCJjX3N0ciIsImNhbWxfZ3JfbW92ZXRvIiwiY2FtbF9ncl9yZXNpemVfd2luZG93IiwiY2FtbF9ncl9zdGF0ZV9pbml0IiwiY2FtbF9iYV9raW5kX29mX3R5cGVkX2FycmF5IiwidGEiLCJjYW1sX2JhX2Zyb21fdHlwZWRfYXJyYXkiLCJjYW1sX21sX3NlZWtfb3V0IiwiY2FtbF9qc190eXBlb2YiLCJjYW1sX3Jlc3RvcmVfcmF3X2JhY2t0cmFjZSIsImJ0IiwiY2FtbF9ncl9saW5ldG8iLCJjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja191bnNhZmUiLCJjYW1sX2JhX2RpbV8zIiwiY2FtbF9pc19zcGVjaWFsX2V4Y2VwdGlvbiIsImNhbWxfZm9ybWF0X2V4Y2VwdGlvbiIsImJ1Y2tldCIsInN0YXJ0IiwiY2FtbF9mYXRhbF91bmNhdWdodF9leGNlcHRpb24iLCJoYW5kbGVyIiwiYXRfZXhpdCIsImNhbWxfZXBoZV9kYXRhX29mZnNldCIsImNhbWxfZXBoZV9jaGVja19kYXRhIiwiY2FtbF9ieXRlc19nZXQxNiIsImNhbWxfb2JqX21ha2VfZm9yd2FyZCIsImNhbWxfanNfZnJvbV9ib29sIiwiY2FtbF9tbF9zZXRfY2hhbm5lbF9uYW1lIiwiY2FtbF9leHAyX2Zsb2F0IiwiY2FtbF9ncl9jbG9zZV9ncmFwaCIsImNhbWxfY3JlYXRlX3N0cmluZyIsImNhbWxfbWQ1X3N0cmluZyIsImNhbWxfbWQ1X2NoYW4iLCJjaGFuX2xlbiIsImNhbWxfb2JqX2R1cCIsImNhbWxfd2Vha19nZXRfY29weSIsImNhbWxfYXRhbmhfZmxvYXQiLCJjYW1sX21sX291dHB1dF9ieXRlcyIsInN0cmluZyIsImpzc3RyaW5nIiwiaWQiLCJjYW1sX21sX291dHB1dCIsImNhbWxfZXBoZV9nZXRfZGF0YSIsImNhbWxfeG1saHR0cHJlcXVlc3RfY3JlYXRlIiwiY2FtbF90cmFtcG9saW5lX3JldHVybiIsImNhbWxfYXJyYXlfYXBwZW5kIiwibDEiLCJsMiIsImNhbWxfbWxfc2V0X2NoYW5uZWxfcmVmaWxsIiwiY2FtbF9qc19leHByIiwiY2FtbF9pbnQ2NF9tdWwiLCJjYW1sX21sX3J1bnRpbWVfd2FybmluZ3NfZW5hYmxlZCIsImNhbWxfb3V0cHV0X3ZhbHVlX3RvX2J5dGVzIiwiY2FtbF9ldmVudGxvZ19yZXN1bWUiLCJjYW1sX2hhc2hfdW5pdl9wYXJhbSIsImNvdW50IiwibGltaXQiLCJvYmoiLCJoYXNoX2FjY3UiLCJoYXNoX2F1eCIsImpzYnl0ZXMiLCJjYW1sX3N0cmluZ19lcXVhbCIsImNhbWxfb3V0cHV0X3ZhbHVlX3RvX2J1ZmZlciIsInJlX3JlcGxhY2VtZW50X3RleHQiLCJyZXBsIiwib3JpZyIsImN1ciIsImVuZCIsImNhbWxfcHVyZV9qc19leHByIiwiYmxpdF9uYXQiLCJjYW1sX2ludDY0X3VsdCIsImNhbWxfaW50NjRfeG9yIiwiY2FtbF9iaWdzdHJpbmdfYmxpdF9iYV90b19ieXRlcyIsImJhMSIsImJ5dGVzMiIsImNhbWxfcmVnaXN0ZXJfbmFtZWRfdmFsdWUiLCJjYW1sX3RvX2pzX3N0cmluZyIsImNhbWxfcGFyc2Vfc2lnbl9hbmRfYmFzZSIsImNhbWxfcGFyc2VfZGlnaXQiLCJjYW1sX2ludDY0X29mX3N0cmluZyIsImJhc2U2NCIsInRocmVzaG9sZCIsInJlX3NlYXJjaF9mb3J3YXJkIiwiY2FtbF9ibGl0X3N0cmluZ190b19iaWdzdHJpbmciLCJjYW1sX21ha2VfdmVjdCIsImluaXQiLCJjYW1sX21sX3NlZWtfaW4iLCJjYW1sX3N5c19yZWFkX2RpcmVjdG9yeSIsImNhbWxfbWxfb3V0cHV0X2NoYXIiLCJjYW1sX3N5c19jb25zdF9vc3R5cGVfd2luMzIiLCJjYW1sX29ial9pc19ibG9jayIsImNhbWxfbWxfaW5wdXRfY2hhciIsImNhbWxfb2JqX3NldF9yYXdfZmllbGQiLCJjYW1sX2pzX3ZhciIsImNhbWxfdHJ1bmNfZmxvYXQiLCJjYW1sX2VwaGVfYmxpdF9kYXRhIiwiY2FtbF9pc19wcmludGFibGUiLCJjYW1sX2VxdWFsIiwicmVfcGFydGlhbF9tYXRjaCIsImNhbWxfc3lzX3JhbmRvbV9zZWVkIiwibm93IiwiY2FtbF9maW5hbF9yZWdpc3Rlcl9jYWxsZWRfd2l0aG91dF92YWx1ZSIsImNhbWxfYmFfZ2V0XzIiLCJ3aW5faGFuZGxlX2ZkIiwiY2FtbF9iYV91aW50OF9zZXQxNiIsIndpbl9maWxlZGVzY3Jfb2ZfY2hhbm5lbCIsImNhbWxfanNfZGVsZXRlIiwiY2FtbF9pbnRfb2Zfc3RyaW5nIiwiY2FtbF9saXN0X21vdW50X3BvaW50IiwicHJldiIsImNhbWxfbWFyc2hhbF9jb25zdGFudHMiLCJjYW1sX29ial9yYXdfZmllbGQiLCJjYW1sX2pzX2VxdWFscyIsImJpZ3N0cmluZ190b190eXBlZF9hcnJheSIsImNhbWxfZ3JfYXJjX2F1eCIsImN0eCIsImN4IiwiY3kiLCJyeSIsInJ4Iiwicm90IiwieFBvcyIsInlQb3MiLCJ4UG9zX3ByZXYiLCJ5UG9zX3ByZXYiLCJzcGFjZSIsImRlbHRhIiwiY2FtbF9ncl9maWxsX2FyYyIsImNhbWxfYmFfc2xpY2UiLCJudW1faW5kcyIsInN1Yl9kaW1zIiwiY2FtbF9tYXJzaGFsX2RhdGFfc2l6ZSIsImdldDMyIiwiY2FtbF9pbnB1dF92YWx1ZSIsImNhbWxfYmFfa2luZCIsImNhbWxfanNfZnVuX2NhbGwiLCJjYW1sX2djX21ham9yX3NsaWNlIiwid29yayIsImNhbWxfanNfcHVyZV9leHByIiwiY29tcGFyZV9kaWdpdHNfbmF0IiwiY2FtbF9tbF9pbnB1dCIsImNhbWxfZ3Jfd2FpdF9ldmVudCIsIl9ldmwiLCJjYW1sX2dyX3NpZ2lvX2hhbmRsZXIiLCJjYW1sX2hhc2hfbWl4X2JpZ3N0cmluZyIsImNhbWxfcmVjb3JkX2JhY2t0cmFjZSIsInVuaXhfZ210aW1lIiwiY2FtbF9zeXNfZ2V0X2NvbmZpZyIsImNhbWxfc3lzX2NvbnN0X2JhY2tlbmRfdHlwZSIsInVuaXhfdGltZSIsImNhbWxfbWxfb3V0X2NoYW5uZWxzX2xpc3QiLCJjYW1sX2FzaW5oX2Zsb2F0IiwiYmlnc3RyaW5nX29mX2FycmF5X2J1ZmZlciIsImFiIiwiY2FtbF9tb2QiLCJjYW1sX2JhX2luaXQiLCJyZV9zdHJpbmdfbWF0Y2giLCJCaWdTdHJpbmdSZWFkZXIiLCJjYW1sX2dyX2R1bXBfaW1hZ2UiLCJjYW1sX2JhX2dldF9nZW5lcmljIiwiY2FtbF9nZXRfZXhjZXB0aW9uX2JhY2t0cmFjZSIsImNhbWxfZm9ybWF0X2Zsb2F0IiwidG9GaXhlZCIsImRwIiwicHJlYyIsImNhbWxfbW91bnRfYXV0b2xvYWQiLCJjYW1sX2JpZ3N0cmluZ19ibGl0X2JhX3RvX2JhIiwiY2FtbF9ibGl0X2JpZ3N0cmluZ190b19iaWdzdHJpbmciLCJjYW1sX3N0cmluZ19sZXNzdGhhbiIsImNhbWxfc3RyaW5nX2dyZWF0ZXJ0aGFuIiwiY2FtbF9kaXYiLCJjYW1sX2VwaGVfZ2V0X2RhdGFfY29weSIsImNhbWxfbWVtcHJvZl9zdGFydCIsInJhdGUiLCJzdGFja19zaXplIiwidHJhY2tlciIsImNhbWxfc3lzX2dldF9hcmd2IiwiY2FtbF9qc190b19ib29sIiwiY2FtbF9ncl9jcmVhdGVfaW1hZ2UiLCJjYW1sX2VwaGVfZ2V0X2tleV9jb3B5IiwiY2FtbF9sZXNzdGhhbiIsImNhbWxfcmF3X2JhY2t0cmFjZV9uZXh0X3Nsb3QiLCJjYW1sX3JlZ2lzdGVyX2dsb2JhbCIsIm5hbWVfb3B0IiwibXVsdF9uYXQiLCJsZW4zIiwic3F1YXJlX25hdCIsImNhbWxfanNfZnJvbV9mbG9hdCIsImNhbWxfZmxvYXRhcnJheV9jcmVhdGUiLCJjYW1sX2djX3N0YXQiLCJjYW1sX2dldF9tYWpvcl9jcmVkaXQiLCJjYW1sX3N5c19tb2RpZnlfYXJndiIsImNhbWxfbWV0aG9kX2NhY2hlIiwiY2FtbF9nZXRfcHVibGljX21ldGhvZCIsImNhY2hlaWQiLCJtZXRocyIsImxpIiwiY2FtbF9qc19nZXRfY29uc29sZSIsImNhbWxfc3lzX3Vuc2FmZV9nZXRlbnYiLCJjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9pbiIsInJlZmlsbCIsImZzIiwiY2hhbm5lbCIsImJpZ3N0cmluZ19vZl90eXBlZF9hcnJheSIsImNhbWxfcm91bmRfZmxvYXQiLCJ1bml4X3N0YXQiLCJ1bml4X3N0YXRfNjQiLCJjYW1sX29qc19uZXdfYXJyIiwiRiIsImNvbXBsZW1lbnRfbmF0IiwiY2FtbF9qc19yZWdleHBzIiwiY2FtbF9qc19odG1sX2VzY2FwZSIsImNhbWxfYmFfZGltXzIiLCJjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja19hcmd1bWVudHMiLCJjYW1sX3NpbmhfZmxvYXQiLCJjYW1sX2xkZXhwX2Zsb2F0IiwiY2FtbF9ncl9zdGF0ZV9zZXQiLCJjYW1sX2pzX3dyYXBfY2FsbGJhY2tfc3RyaWN0IiwiYXJpdHkiLCJjYW1sX2djX21pbm9yX3dvcmRzIiwiY2FtbF9iYV9zZXRfMSIsImNhbWxfZ2V0X2N1cnJlbnRfY2FsbHN0YWNrIiwibGFuZF9kaWdpdF9uYXQiLCJjYW1sX2ludDY0X21vZCIsInVuaXhfcmVhZGxpbmsiLCJjYW1sX29ial9zZXRfdGFnIiwiY2FtbF9jcmVhdGVfZmlsZV9leHRlcm4iLCJjYW1sX2ludDMyX2Jzd2FwIiwid2luX3N0YXJ0dXAiLCJjYW1sX2JhX3NldF8zIiwiY2FtbF9qc19pbnN0YW5jZW9mIiwiY2FtbF9nZXRfbWFqb3JfYnVja2V0IiwiY2FtbF9ibGl0X2JpZ3N0cmluZ190b19zdHJpbmciLCJudGhfZGlnaXRfbmF0X25hdGl2ZSIsInNldF9kaWdpdF9uYXRfbmF0aXZlIiwiZGlnaXQiLCJjYW1sX3N0cmluZ19zZXQ2NCIsImNhbWxfZ3Jfc3RhdGVfY3JlYXRlIiwiY2FudmFzIiwiY29udGV4dCIsImNhbWxfanNfd3JhcF9jYWxsYmFjayIsImNhbWxfZ3JfZHJhd19hcmMiLCJjYW1sX2JhX21hcF9maWxlIiwidmZkIiwic2hhcmVkIiwiY2FtbF9iYV9tYXBfZmlsZV9ieXRlY29kZSIsImFyZ24iLCJ1bml4X3N5bWxpbmsiLCJzcmNfcm9vdCIsImRzdF9yb290IiwiY2FtbF9iYV9jcmVhdGVfZnJvbSIsImRhdGExIiwiZGF0YTIiLCJqc3R5cCIsImNhbWxfdGFuaF9mbG9hdCIsImNhbWxfZ3JfZHJhd19zdHIiLCJkeCIsImNhbWxfZ3JfZHJhd19zdHJpbmciLCJjYW1sX2dyX2RyYXdfY2hhciIsImNhbWxfdW5tb3VudCIsImNhbWxfaW5wdXRfdmFsdWVfZnJvbV9zdHJpbmciLCJjYW1sX21sX3Bvc19pbl82NCIsImNhbWxfZ3JfZHJhd19pbWFnZSIsImltYWdlIiwiY2FtbF9yZWdpc3Rlcl9jaGFubmVsX2Zvcl9zcGFjZXRpbWUiLCJfY2hhbm5lbCIsImNhbWxfc3RyaW5nX3NldCIsImNhbWxfc3lzX3JtZGlyIiwiY2FtbF9tbF9wb3Nfb3V0IiwiY2FtbF9zcGFjZXRpbWVfZW5hYmxlZCIsImNhbWxfYnl0ZXNfbm90ZXF1YWwiLCJjYW1sX3J1bnRpbWVfcGFyYW1ldGVycyIsImNhbWxfanNfb2JqZWN0IiwiY2FtbF9iYV9jcmVhdGUiLCJkaW1zX21sIiwiY2FtbF93ZWFrX2JsaXQiLCJjYW1sX2dyX3JlbWVtYmVyX21vZGUiLCJjYW1sX2ZtYV9mbG9hdCIsIlNQTElUIiwiTUlOX1ZBTFVFIiwiRVBTSUxPTiIsIkMiLCJBIiwiQiIsIm11bHRpcGx5IiwiYXQiLCJhaGkiLCJhbG8iLCJiaGkiLCJibG8iLCJhZGp1c3QiLCJzY2FsZSIsInhzIiwieXMiLCJ6cyIsInh5IiwidSIsImNhbWxfYnN3YXAxNiIsImNhbWxfbWxfc2V0X2JpbmFyeV9tb2RlIiwiY2FtbF9maW5hbF9yZWdpc3RlciIsImNhbWxfZ3JfZHJhd19yZWN0IiwiY2FtbF9zdHJpbmdfZ2V0MTYiLCJjYW1sX2VwaGVfdW5zZXRfZGF0YSIsImNhbWxfb3V0cHV0X3ZhbHVlIiwiY2FtbF9iYV9nZXRfMyIsImNhbWxfZXBoZV9ibGl0X2tleSIsImNhbWxfaW5pdGlhbF90aW1lIiwiY2FtbF9zeXNfdGltZSIsImNhbWxfc3lzX3RpbWVfaW5jbHVkZV9jaGlsZHJlbiIsImNhbWxfY2hlY2tfYm91bmQiLCJ1bml4X2dldHB3dWlkIiwiY2FtbF9oYXNoX21peF9zdHJpbmciLCJjYW1sX2hhc2giLCJzZWVkIiwicXVldWUiLCJyZCIsIndyIiwiY2FtbF9vYmpfdGFnIiwiRnVuY3Rpb24iLCJjYW1sX2JhX3RvX3R5cGVkX2FycmF5IiwiY2FtbF9qc19leHBvcnRfdmFyIiwibW9kdWxlIiwiY2FtbF9ieXRlc19nZXQzMiIsImNhbWxfZnJleHBfZmxvYXQiLCJuZWciLCJjYW1sX3N0cmluZ19nZXQ2NCIsImNhbWxfbWxfcG9zX291dF82NCIsImNhbWxfZ3JfY2xvc2Vfc3Vid2luZG93IiwiY2FtbF9mbG9hdGFycmF5X2JsaXQiLCJjYW1sX2dldF9taW5vcl9mcmVlIiwiY2FtbF9zZXRfc3RhdGljX2VudiIsImNhbWxfYmFfY2hhbmdlX2xheW91dCIsImNhbWxfanNfbmV3IiwidW5peF9ta2RpciIsInBlcm0iLCJjYW1sX2dyX2N1cnJlbnRfeSIsImNhbWxfZm9ybWF0X2ludCIsImNhbWxfb2JqX3RydW5jYXRlIiwiY2FtbF9qc190b19zdHJpbmciLCJpc19kaWdpdF9vZGQiLCJjYW1sX3J1bnRpbWVfdmFyaWFudCIsImNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX291dCIsImNhbWxfYXJyYXlfY29uY2F0IiwiY2FtbF9ncl9vcGVuX2dyYXBoIiwiZ2V0Iiwic3BlY3MiLCJzdGF0dXMiLCJ3aW4iLCJkb2MiLCJ0aXRsZSIsImJvZHkiLCJjYW1sX2VwaGVfc2V0X2RhdGEiLCJjYW1sX21ha2VfZmxvYXRfdmVjdCIsImNhbWxfY2JydF9mbG9hdCIsImNhbWxfZXZlbnRsb2dfcGF1c2UiLCJjYW1sX21lbXByb2Zfc3RvcCIsImNhbWxfZ3JlYXRlcmVxdWFsIiwiY2FtbF9nZXRfZXhjZXB0aW9uX3Jhd19iYWNrdHJhY2UiLCJjYW1sX2xvZzFwX2Zsb2F0IiwiY2FtbF9pbnQ2NF9vciIsImNhbWxfbGF6eV9tYWtlX2ZvcndhcmQiLCJsb3JfZGlnaXRfbmF0IiwiY2FtbF9ncl9ibGl0X2ltYWdlIiwiaW0yIiwiY2FtbF9ncl93aW5kb3dfaWQiLCJjYW1sX2pzX29uX2llIiwidWEiLCJjYW1sX2ludDY0X3NoaWZ0X3JpZ2h0IiwiY2FtbF9iYV9sYXlvdXQiLCJjYW1sX2NvbnZlcnRfcmF3X2JhY2t0cmFjZSIsImNhbWxfYXJyYXlfc2V0IiwibmV3dmFsIiwiY2FtbF9ieXRlc19ncmVhdGVyZXF1YWwiLCJzZXRfZGlnaXRfbmF0IiwiY2FtbF9ncl9kb2Nfb2Zfc3RhdGUiLCJjYW1sX21sX291dHB1dF9pbnQiLCJjYW1sX29ial93aXRoX3RhZyIsImNhbWxfbWxfY2hhbm5lbF9zaXplIiwiY2FtbF9yYXdfYmFja3RyYWNlX3Nsb3QiLCJjYW1sX2hleHN0cmluZ19vZl9mbG9hdCIsInN0eWxlIiwiZXhwX3NpZ24iLCJzaWduX3N0ciIsImNzdCIsInhfc3RyIiwiY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfc3RyaWN0IiwiY2FtbF9iYWNrdHJhY2Vfc3RhdHVzIiwiY2FtbF9pbnN0YWxsX3NpZ25hbF9oYW5kbGVyIiwiY2FtbF9zeXNfYXJndiIsImNhbWxfYmFfZmlsbCIsImNhbWxfbW9kZl9mbG9hdCIsImNhbWxfZ2NfZ2V0IiwiY2FtbF9mbG9hdF9jb21wYXJlIiwiY2FtbF9zdHJpbmdfc2V0MzIiLCJjYW1sX3BhcnNlX2VuZ2luZSIsInRhYmxlcyIsImVudiIsIkVSUkNPREUiLCJsb29wIiwidGVzdHNoaWZ0Iiwic2hpZnQiLCJzaGlmdF9yZWNvdmVyIiwicmVkdWNlIiwiUkVBRF9UT0tFTiIsIlJBSVNFX1BBUlNFX0VSUk9SIiwiR1JPV19TVEFDS1NfMSIsIkdST1dfU1RBQ0tTXzIiLCJDT01QVVRFX1NFTUFOVElDX0FDVElPTiIsIkNBTExfRVJST1JfRlVOQ1RJT04iLCJlbnZfc19zdGFjayIsImVudl92X3N0YWNrIiwiZW52X3N5bWJfc3RhcnRfc3RhY2siLCJlbnZfc3ltYl9lbmRfc3RhY2siLCJlbnZfc3RhY2tzaXplIiwiZW52X3N0YWNrYmFzZSIsImVudl9jdXJyX2NoYXIiLCJlbnZfbHZhbCIsImVudl9zeW1iX3N0YXJ0IiwiZW52X3N5bWJfZW5kIiwiZW52X2FzcCIsImVudl9ydWxlX2xlbiIsImVudl9ydWxlX251bWJlciIsImVudl9zcCIsImVudl9zdGF0ZSIsImVudl9lcnJmbGFnIiwidGJsX3RyYW5zbF9jb25zdCIsInRibF90cmFuc2xfYmxvY2siLCJ0YmxfbGhzIiwidGJsX2xlbiIsInRibF9kZWZyZWQiLCJ0YmxfZGdvdG8iLCJ0Ymxfc2luZGV4IiwidGJsX3JpbmRleCIsInRibF9naW5kZXgiLCJ0YmxfdGFibGVzaXplIiwidGJsX3RhYmxlIiwidGJsX2NoZWNrIiwibjEiLCJuMiIsInN0YXRlMSIsInNwIiwiZXJyZmxhZyIsImFzcCIsImNhbWxfdXBkYXRlX2R1bW15IiwiY2FtbF9hcnJheV9maWxsIiwiY2FtbF9zeXNfbWtkaXIiLCJjYW1sX3N0cmluZ19ub3RlcXVhbCIsImNhbWxfYnl0ZXNfZ3JlYXRlcnRoYW4iLCJjYW1sX2dyX21ha2VfaW1hZ2UiLCJjYW1sX21sX3NldF9jaGFubmVsX291dHB1dCIsImNhbWxfcmVhZF9maWxlX2NvbnRlbnQiLCJjYW1sX2pzX3RvX2Zsb2F0IiwiY2FtbF9zZXR1cF91bmNhdWdodF9leGNlcHRpb25faGFuZGxlciIsIm9yaWdpbiIsImV2ZW50IiwiZXJyX25vX3ByZWQiLCJlcnJfbm9fc3VjYyIsInplcm8kMiIsIm9uZSQyIiwibWludXNfb25lJDIiLCJtaW5faW50JDIiLCJtYXhfaW50JDIiLCJkdW1teV9wb3MiLCJ6ZXJvX3BvcyIsInN1Yl9mb3JtYXQiLCJmb3JtYXR0aW5nX2xpdCIsImxvY2ZtdCIsIm51bGwkMCIsImN1cnJlbnRfZGlyX25hbWUiLCJwYXJlbnRfZGlyX25hbWUiLCJkaXJfc2VwIiwicXVvdGVxdW90ZSIsIm51bGwkMSIsImN1cnJlbnRfZGlyX25hbWUkMCIsInBhcmVudF9kaXJfbmFtZSQwIiwiZGlyX3NlcCQwIiwibnVsbCQyIiwiY3VycmVudF9kaXJfbmFtZSQxIiwicGFyZW50X2Rpcl9uYW1lJDEiLCJkaXJfc2VwJDEiLCJ6ZXJvJDQiLCJvbmUkNCIsImkiLCJlcmFzZV9yZWwiLCJyZXN0IiwicmVzdCQwIiwicmVzdCQxIiwicmVzdCQyIiwicmVzdCQzIiwicmVzdCQ0IiwicmVzdCQ1IiwicmVzdCQ2IiwicmVzdCQ3IiwidHkiLCJyZXN0JDgiLCJ0eTEiLCJyZXN0JDkiLCJyZXN0JDEwIiwicmVzdCQxMSIsInJlc3QkMTIiLCJyZXN0JDEzIiwiY29uY2F0X2ZtdHR5IiwiZm10dHkxIiwiZm10dHkyIiwidHkyIiwiY29uY2F0X2ZtdCIsImZtdDEiLCJmbXQyIiwicGFkIiwicGFkJDAiLCJwcmVjIiwicGFkJDEiLCJpY29udiIsInByZWMkMCIsInBhZCQyIiwiaWNvbnYkMCIsInByZWMkMSIsInBhZCQzIiwiaWNvbnYkMSIsInByZWMkMiIsInBhZCQ0IiwiaWNvbnYkMiIsInByZWMkMyIsInBhZCQ1IiwiZmNvbnYiLCJwYWQkNiIsInN0ciIsImNociIsImZtdHR5IiwicGFkJDciLCJmbXR0eSQwIiwicGFkJDgiLCJyZXN0JDE0IiwicmVzdCQxNSIsInJlc3QkMTYiLCJmbXRpbmdfbGl0IiwicmVzdCQxNyIsImZtdGluZ19nZW4iLCJyZXN0JDE4IiwicmVzdCQxOSIsImNoYXJfc2V0Iiwid2lkdGhfb3B0IiwicmVzdCQyMCIsImNvdW50ZXIiLCJyZXN0JDIxIiwicmVzdCQyMiIsImlnbiIsInJlc3QkMjMiLCJmIiwiYXJpdHkiLCJ2IiwiciIsImN1ciIsInNlZW4iLCJuIiwiZmFpbHdpdGgiLCJzIiwiaW52YWxpZF9hcmciLCJtaW4iLCJ4IiwieSIsIm1heCIsImFicyIsImxub3QiLCJpbmZpbml0eSIsIm5lZ19pbmZpbml0eSIsIm5hbiIsIm1heF9mbG9hdCIsIm1pbl9mbG9hdCIsImVwc2lsb24iLCJtYXhfaW50IiwibWluX2ludCIsInMxIiwiczIiLCJsMSIsImwyIiwiY2hhcl9vZl9pbnQiLCJzdHJpbmdfb2ZfYm9vbCIsImIiLCJib29sX29mX3N0cmluZyIsImJvb2xfb2Zfc3RyaW5nX29wdCIsInN0cmluZ19vZl9pbnQiLCJpbnRfb2Zfc3RyaW5nX29wdCIsInZhbGlkX2Zsb2F0X2xleGVtIiwibCIsImkkMCIsInRvX3N0cmluZyIsIm9mX3N0cmluZ19vcHQiLCJhcHBlbmQiLCJ0bCIsImhkIiwic3RkaW4iLCJzdGRvdXQiLCJzdGRlcnIiLCJvcGVuX291dF9nZW4iLCJtb2RlIiwicGVybSIsIm5hbWUiLCJjIiwib3Blbl9vdXQiLCJvcGVuX291dF9iaW4iLCJmbHVzaF9hbGwiLCJpdGVyIiwiYSIsIm91dHB1dF9ieXRlcyIsIm9jIiwib3V0cHV0X3N0cmluZyIsIm91dHB1dCIsIm9mcyIsImxlbiIsIm91dHB1dF9zdWJzdHJpbmciLCJvdXRwdXRfdmFsdWUiLCJjaGFuIiwiY2xvc2Vfb3V0IiwiY2xvc2Vfb3V0X25vZXJyIiwib3Blbl9pbl9nZW4iLCJvcGVuX2luIiwib3Blbl9pbl9iaW4iLCJpbnB1dCIsImljIiwidW5zYWZlX3JlYWxseV9pbnB1dCIsIm9mcyQwIiwibGVuJDAiLCJsZW4kMSIsIm9mcyQxIiwicmVhbGx5X2lucHV0IiwicmVhbGx5X2lucHV0X3N0cmluZyIsImlucHV0X2xpbmUiLCJidWlsZF9yZXN1bHQiLCJidWYiLCJhY2N1IiwiYmVnIiwiYWNjdSQwIiwicmVzIiwiY2xvc2VfaW5fbm9lcnIiLCJwcmludF9jaGFyIiwicHJpbnRfc3RyaW5nIiwicHJpbnRfYnl0ZXMiLCJwcmludF9pbnQiLCJwcmludF9mbG9hdCIsInByaW50X2VuZGxpbmUiLCJwcmludF9uZXdsaW5lIiwicHJlcnJfY2hhciIsInByZXJyX3N0cmluZyIsInByZXJyX2J5dGVzIiwicHJlcnJfaW50IiwicHJlcnJfZmxvYXQiLCJwcmVycl9lbmRsaW5lIiwicHJlcnJfbmV3bGluZSIsInJlYWRfbGluZSIsInJlYWRfaW50IiwicmVhZF9pbnRfb3B0IiwicmVhZF9mbG9hdCIsInJlYWRfZmxvYXRfb3B0Iiwic3RyaW5nX29mX2Zvcm1hdCIsInN5bWJvbCIsInN0cjIiLCJzdHIxIiwiZXhpdF9mdW5jdGlvbiIsImF0X2V4aXQiLCJmX3lldF90b19ydW4iLCJvbGRfZXhpdCIsIm5ld19leGl0JDAiLCJuZXdfZXhpdCIsInN1Y2Nlc3MiLCJkb19hdF9leGl0IiwiZXhpdCIsInJldGNvZGUiLCJzZXRfYmluYXJ5X21vZGVfaW4iLCJjbG9zZV9pbiIsImluX2NoYW5uZWxfbGVuZ3RoIiwicG9zX2luIiwic2Vla19pbiIsImlucHV0X3ZhbHVlIiwiaW5wdXRfYmluYXJ5X2ludCIsImlucHV0X2J5dGUiLCJpbnB1dF9jaGFyIiwic2V0X2JpbmFyeV9tb2RlX291dCIsIm91dF9jaGFubmVsX2xlbmd0aCIsInBvc19vdXQiLCJzZWVrX291dCIsIm91dHB1dF9iaW5hcnlfaW50Iiwib3V0cHV0X2J5dGUiLCJvdXRwdXRfY2hhciIsImZsdXNoIiwiZW1wdHkiLCJyZXR1cm4kMCIsImNvbnMiLCJuZXh0IiwiYXBwZW5kJDAiLCJzZXExIiwic2VxMiIsIm1hcCIsInNlcSIsImZpbHRlcl9tYXAiLCJzZXEkMCIsImZpbHRlciIsImNvbmNhdCIsImZsYXRfbWFwIiwiZm9sZF9sZWZ0IiwiYWNjIiwiYWNjJDAiLCJhY2MkMSIsInVuZm9sZCIsInUiLCJ1JDAiLCJub25lIiwic29tZSIsInZhbHVlIiwibyIsImRlZmF1bHQkMCIsImdldCQwIiwiYmluZCIsImpvaW4iLCJtYXAkMCIsImZvbGQiLCJpdGVyJDAiLCJpc19ub25lIiwiaXNfc29tZSIsImVxdWFsIiwiZXEiLCJvMCIsIm8xIiwidjEiLCJ2MCIsImNvbXBhcmUiLCJjbXAiLCJ0b19yZXN1bHQiLCJ0b19saXN0IiwidG9fc2VxIiwibGVmdCIsInJpZ2h0IiwiaXNfbGVmdCIsImlzX3JpZ2h0IiwiZmluZF9sZWZ0IiwiZmluZF9yaWdodCIsIm1hcF9sZWZ0IiwiZSIsIm1hcF9yaWdodCIsIm1hcCQxIiwidiQwIiwiZm9sZCQwIiwiZXF1YWwkMCIsImUxIiwiZTIiLCJ2MiIsInYyJDAiLCJjb21wYXJlJDAiLCJvayIsImVycm9yIiwidmFsdWUkMCIsImdldF9vayIsImdldF9lcnJvciIsImJpbmQkMCIsImpvaW4kMCIsIm1hcCQyIiwibWFwX2Vycm9yIiwiZm9sZCQxIiwiaXRlciQxIiwiaXRlcl9lcnJvciIsImlzX29rIiwiaXNfZXJyb3IiLCJlcXVhbCQxIiwicjAiLCJyMSIsImNvbXBhcmUkMSIsInRvX29wdGlvbiIsInRvX2xpc3QkMCIsInRvX3NlcSQwIiwiZXF1YWwkMiIsImNvbXBhcmUkMiIsInRvX2Zsb2F0IiwidG9fc3RyaW5nJDAiLCJlc2NhcGVkIiwicyQwIiwibG93ZXJjYXNlIiwidXBwZXJjYXNlIiwibG93ZXJjYXNlX2FzY2lpIiwidXBwZXJjYXNlX2FzY2lpIiwiY29tcGFyZSQzIiwiYzEiLCJjMiIsImVxdWFsJDMiLCJtaW4kMCIsIm1heCQwIiwibG9fYm91bmQiLCJoaV9ib3VuZCIsImJvbSIsInJlcCIsInN1Y2MiLCJwcmVkIiwiaXNfdmFsaWQiLCJvZl9pbnQiLCJpc19jaGFyIiwib2ZfY2hhciIsInRvX2NoYXIiLCJ1bnNhZmVfdG9fY2hhciIsImVxdWFsJDQiLCJjb21wYXJlJDQiLCJoYXNoIiwibWF0Y2gkMSIsImxlbmd0aCIsInBhcmFtJDAiLCJjb25zJDAiLCJudGgiLCJsJDAiLCJuJDAiLCJsJDEiLCJuJDEiLCJudGhfb3B0IiwicmV2X2FwcGVuZCIsImwxJDAiLCJsMiQwIiwibDEkMSIsImwyJDEiLCJyZXYiLCJpbml0X2F1eCIsInJldl9pbml0X3RocmVzaG9sZCIsInBhcmFtIiwiYWNjdSQxIiwiYTIiLCJhMSIsInAiLCJwYWlyIiwicmVzdWx0IiwieHMiLCJ4JDAiLCJyeSIsInJ4IiwidDIiLCJoMiIsInQxIiwiaDEiLCJyZXZfc29ydCIsIngyIiwieDEiLCJ0bCQxIiwieDMiLCJ4MiQwIiwieDEkMCIsIm4xIiwibjIiLCJzb3J0IiwidGwkMCIsImMkMCIsImMkMSIsImMkMiIsImMkMyIsImMkNCIsImMkNSIsImMkNiIsImFjY3UkMiIsImF1eCIsInRhaWwiLCJkaXJlY3QiLCJkZXB0aCIsInplcm8iLCJvbmUiLCJtaW51c19vbmUiLCJhYnMkMCIsIm1heF9pbnQkMCIsIm1pbl9pbnQkMCIsImxvZ25vdCIsImVxdWFsJDYiLCJjb21wYXJlJDYiLCJtaW4kMSIsIm1heCQxIiwidG9fc3RyaW5nJDEiLCJzeW1ib2wkMCIsImRzdG9mZiIsInNyY29mZiIsImNweWxlbiIsIm9mczEiLCJvZnMyIiwic2VwIiwic2VwbGVuIiwiZHN0IiwiaXNfc3BhY2UiLCJqIiwiYXBwbHkxIiwicHJlZml4IiwibGVuX3MiLCJsZW5fcHJlIiwic3VmZml4IiwibGVuX3N1ZiIsImRpZmYiLCJpbmRleF9yZWMiLCJsaW0iLCJpJDEiLCJpbmRleF9yZWNfb3B0IiwicmluZGV4X3JlYyIsInJpbmRleF9yZWNfb3B0IiwibmV3X2xlbiIsIm5ld19idWYiLCJpc19zcGFjZSQwIiwiaW5kZXhfcmVjJDAiLCJpbmRleF9yZWNfb3B0JDAiLCJyaW5kZXhfcmVjJDAiLCJyaW5kZXhfcmVjX29wdCQwIiwiZyIsImVxdWFsJDkiLCJjb21wYXJlJDkiLCJ0b19zdHJpbmckMiIsInRvX2J1ZmZlciIsImJ1ZmYiLCJmbGFncyIsImhlYWRlcl9zaXplIiwiZGF0YV9zaXplIiwidG90YWxfc2l6ZSIsImZyb21fYnl0ZXMiLCJmcm9tX3N0cmluZyIsImlzX2Jsb2NrIiwiZG91YmxlX2ZpZWxkIiwic2V0X2RvdWJsZV9maWVsZCIsIm1hcnNoYWwiLCJvYmoiLCJ1bm1hcnNoYWwiLCJwb3MiLCJmaXJzdF9ub25fY29uc3RhbnRfY29uc3RydWN0b3IiLCJsYXN0X25vbl9jb25zdGFudF9jb25zdHJ1Y3Rvcl8iLCJsYXp5X3RhZyIsImNsb3N1cmVfdGFnIiwib2JqZWN0X3RhZyIsImluZml4X3RhZyIsImZvcndhcmRfdGFnIiwibm9fc2Nhbl90YWciLCJhYnN0cmFjdF90YWciLCJzdHJpbmdfdGFnIiwiZG91YmxlX3RhZyIsImRvdWJsZV9hcnJheV90YWciLCJjdXN0b21fdGFnIiwiaW50X3RhZyIsIm91dF9vZl9oZWFwX3RhZyIsInVuYWxpZ25lZF90YWciLCJpbmZvIiwic3RhcnRfZW52Iiwib2ZfdmFsIiwic2xvdCIsImlkIiwiZXh0ZW5zaW9uX2NvbnN0cnVjdG9yIiwiZXh0ZW5zaW9uX25hbWUiLCJleHRlbnNpb25faWQiLCJtYXhfZXBoZV9sZW5ndGgiLCJjcmVhdGUiLCJsZW5ndGgkMCIsInJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0IiwibXNnIiwiZ2V0X2tleSIsImdldF9rZXlfY29weSIsInNldF9rZXkiLCJ1bnNldF9rZXkiLCJjaGVja19rZXkiLCJibGl0X2tleSIsIm8yIiwic3giLCJzeSIsImluaXQiLCJsYSIsImxiIiwicmVzJDAiLCJsaXN0X2xlbmd0aCIsInBhcmFtJDEiLCJoZCQwIiwiaW5wdXRfYXJyYXkiLCJlbHQiLCJvdXRwdXRfYXJyYXkiLCJlbHQkMCIsImFjYyQyIiwiYjAiLCJhMCIsImJpIiwiYWkiLCJuYSIsIm5iIiwibWF4c29uIiwiaTMxIiwidHJpY2tsZWRvd24iLCJ0cmlja2xlIiwiYnViYmxlZG93biIsImJ1YmJsZSIsImkkMiIsImUkMCIsImZhdGhlciIsIm1lcmdlIiwic3JjMW9mcyIsInNyYzFsZW4iLCJzcmMyIiwic3JjMm9mcyIsInNyYzJsZW4iLCJkc3RvZnMiLCJzcmMxciIsInNyYzJyIiwiczIkMSIsInMxJDEiLCJpMSIsImkyIiwiZCIsImkyJDAiLCJkJDAiLCJzMiQwIiwiaTEkMCIsImQkMSIsInMxJDAiLCJpc29ydHRvIiwic3Jjb2ZzIiwic29ydHRvIiwidCIsInplcm8kMCIsIm9uZSQwIiwibWludXNfb25lJDAiLCJpc19maW5pdGUiLCJpc19pbmZpbml0ZSIsImlzX25hbiIsInBpIiwiaXNfaW50ZWdlciIsInN1Y2MkMCIsInByZWQkMCIsImVxdWFsJDEwIiwibWluJDIiLCJtYXgkMiIsIm1pbl9tYXgiLCJtaW5fbnVtIiwibWF4X251bSIsIm1pbl9tYXhfbnVtIiwiaGFzaCQwIiwidW5zYWZlX2ZpbGwiLCJjaGVjayIsIm1ha2UkMiIsImluaXQkMyIsImFwcGVuZCQyIiwiY29uY2F0JDMiLCJobGVuIiwic3ViJDIiLCJjb3B5JDIiLCJmaWxsJDEiLCJibGl0JDIiLCJzcmMiLCJzb2ZzIiwiZG9mcyIsInRvX2xpc3QkMiIsIm9mX2xpc3QkMCIsImgiLCJpdGVyJDYiLCJpdGVyMiQxIiwibWFwJDciLCJtYXAyJDEiLCJpdGVyaSQzIiwibWFwaSQzIiwiZm9sZF9sZWZ0JDQiLCJmb2xkX3JpZ2h0JDMiLCJleGlzdHMkMyIsImZvcl9hbGwkMyIsIm1lbSQxIiwibWVtX2llZWUiLCJzb3J0JDAiLCJzdGFibGVfc29ydCIsInRvX3NlcSQ1IiwidG9fc2VxaSQyIiwib2Zfc2VxJDMiLCJtYXBfdG9fYXJyYXkiLCJtYXBfZnJvbV9hcnJheSIsInplcm8kMSIsIm9uZSQxIiwibWludXNfb25lJDEiLCJzdWNjJDEiLCJwcmVkJDEiLCJhYnMkMSIsIm1pbl9pbnQkMSIsIm1heF9pbnQkMSIsImxvZ25vdCQwIiwidW5zaWduZWRfdG9faW50IiwidG9fc3RyaW5nJDMiLCJvZl9zdHJpbmdfb3B0JDAiLCJjb21wYXJlJDEwIiwiZXF1YWwkMTEiLCJ1bnNpZ25lZF9jb21wYXJlIiwibSIsIm1pbiQzIiwibWF4JDMiLCJ1bnNpZ25lZF9kaXYiLCJxIiwidW5zaWduZWRfcmVtIiwic3VjYyQyIiwicHJlZCQyIiwiYWJzJDIiLCJsb2dub3QkMSIsIm1heF9pbnQkMyIsInVuc2lnbmVkX3RvX2ludCQwIiwidG9fc3RyaW5nJDQiLCJvZl9zdHJpbmdfb3B0JDEiLCJjb21wYXJlJDExIiwiZXF1YWwkMTIiLCJ1bnNpZ25lZF9jb21wYXJlJDAiLCJtaW4kNCIsIm1heCQ0IiwidW5zaWduZWRfZGl2JDAiLCJ1bnNpZ25lZF9yZW0kMCIsInplcm8kMyIsIm9uZSQzIiwibWludXNfb25lJDMiLCJzdWNjJDMiLCJwcmVkJDMiLCJhYnMkMyIsIm1pbl9pbnQkMyIsIm1heF9pbnQkNCIsImxvZ25vdCQyIiwidW5zaWduZWRfdG9faW50JDEiLCJ0b19zdHJpbmckNSIsIm9mX3N0cmluZ19vcHQkMiIsImNvbXBhcmUkMTIiLCJlcXVhbCQxMyIsInVuc2lnbmVkX2NvbXBhcmUkMSIsIm1pbiQ1IiwibWF4JDUiLCJ1bnNpZ25lZF9kaXYkMSIsInVuc2lnbmVkX3JlbSQxIiwiZW5naW5lIiwidGJsIiwic3RhdGUiLCJuZXdfZW5naW5lIiwiZnJvbV9mdW5jdGlvbiIsIm9wdCIsInN0aCIsIndpdGhfcG9zaXRpb25zIiwiYXV4X2J1ZmZlciIsImxleGJ1ZiIsInJlYWQiLCJuZXdsZW4iLCJuZXdidWYiLCJmcm9tX2NoYW5uZWwiLCJmcm9tX3N0cmluZyQwIiwic2V0X3Bvc2l0aW9uIiwicG9zaXRpb24iLCJzZXRfZmlsZW5hbWUiLCJmbmFtZSIsImxleGVtZSIsInN1Yl9sZXhlbWUiLCJzdWJfbGV4ZW1lX29wdCIsInN1Yl9sZXhlbWVfY2hhciIsInN1Yl9sZXhlbWVfY2hhcl9vcHQiLCJsZXhlbWVfY2hhciIsImxleGVtZV9zdGFydCIsImxleGVtZV9lbmQiLCJsZXhlbWVfc3RhcnRfcCIsImxleGVtZV9lbmRfcCIsIm5ld19saW5lIiwibGNwIiwiZmx1c2hfaW5wdXQiLCJlbnYiLCJncm93X3N0YWNrcyIsIm9sZHNpemUiLCJuZXdzaXplIiwibmV3X3MiLCJuZXdfdiIsIm5ld19zdGFydCIsIm5ld19lbmQiLCJjbGVhcl9wYXJzZXIiLCJjdXJyZW50X2xvb2thaGVhZF9mdW4iLCJ5eXBhcnNlIiwidGFibGVzIiwic3RhcnQiLCJsZXhlciIsImluaXRfYXNwIiwiaW5pdF9zcCIsImluaXRfc3RhY2tiYXNlIiwiaW5pdF9zdGF0ZSIsImluaXRfY3Vycl9jaGFyIiwiaW5pdF9sdmFsIiwiaW5pdF9lcnJmbGFnIiwiY21kIiwiYXJnIiwiYXJnJDAiLCJhcmckMSIsImNtZCQwIiwiZXhuIiwiY3Vycl9jaGFyIiwidG9rIiwicGVla192YWwiLCJzeW1ib2xfc3RhcnRfcG9zIiwic3QiLCJlbiIsInN5bWJvbF9lbmRfcG9zIiwicmhzX3N0YXJ0X3BvcyIsInJoc19lbmRfcG9zIiwic3ltYm9sX3N0YXJ0Iiwic3ltYm9sX2VuZCIsInJoc19zdGFydCIsInJoc19lbmQiLCJpc19jdXJyZW50X2xvb2thaGVhZCIsInBhcnNlX2Vycm9yIiwiaGVpZ2h0IiwiaGwiLCJoJDAiLCJociIsImJhbCIsImxyIiwibHYiLCJsbCIsImxyciIsImxydiIsImxybCIsInJyIiwicnYiLCJybCIsInJsciIsInJsdiIsInJsbCIsImFkZCIsInNpbmdsZXRvbiIsImFkZF9taW5fZWxlbWVudCIsImFkZF9tYXhfZWxlbWVudCIsInJoIiwibGgiLCJtaW5fZWx0IiwibWluX2VsdF9vcHQiLCJtYXhfZWx0IiwibWF4X2VsdF9vcHQiLCJyZW1vdmVfbWluX2VsdCIsInIkMCIsInNwbGl0IiwicHJlcyIsInByZXMkMCIsImlzX2VtcHR5IiwibWVtIiwicmVtb3ZlIiwidW5pb24iLCJyMiIsInIyJDAiLCJyMSQwIiwiaW50ZXIiLCJzcGxpdF9iaXMiLCJkaXNqb2ludCIsImNvbnNfZW51bSIsInMkMSIsImUkMSIsImUyJDIiLCJlMSQyIiwiZTIkMCIsImUxJDAiLCJlMiQxIiwiZTEkMSIsInN1YnNldCIsImZvcl9hbGwiLCJleGlzdHMiLCJwdiIsInBhcnRpdGlvbiIsImxmIiwibHQiLCJyZiIsInJ0IiwiY2FyZGluYWwiLCJlbGVtZW50c19hdXgiLCJlbGVtZW50cyIsImZpbmQiLCJmaW5kX2ZpcnN0IiwiZmluZF9maXJzdF9vcHQiLCJmaW5kX2xhc3QiLCJmaW5kX2xhc3Rfb3B0IiwiZmluZF9vcHQiLCJ0cnlfam9pbiIsInYkMSIsIm9mX2xpc3QiLCJzdWIiLCJsJDMiLCJ4MCIsImwkNCIsIngwJDAiLCJsJDUiLCJ4MCQxIiwibmwiLCJtaWQiLCJsJDIiLCJ4NCIsImFkZF9zZXEiLCJvZl9zZXEiLCJzZXFfb2ZfZW51bSIsInNub2NfZW51bSIsInJldl9zZXFfb2ZfZW51bSIsInRvX3Jldl9zZXEiLCJ0b19zZXFfZnJvbSIsImxvdyIsImxkIiwibHJkIiwicmQiLCJybGQiLCJkYXRhIiwibWluX2JpbmRpbmciLCJtaW5fYmluZGluZ19vcHQiLCJtYXhfYmluZGluZyIsIm1heF9iaW5kaW5nX29wdCIsInJlbW92ZV9taW5fYmluZGluZyIsInVwZGF0ZSIsImRhdGEkMCIsIm1hcGkiLCJtJDAiLCJhZGRfbWluX2JpbmRpbmciLCJrIiwiYWRkX21heF9iaW5kaW5nIiwiY29uY2F0X29yX2pvaW4iLCJkMSIsImQyIiwiZDIkMCIsImQxJDAiLCJkMiQxIiwiZDEkMSIsInB2ZCIsImZ2ZCIsIm0kMSIsIm0xIiwibTIiLCJiaW5kaW5nc19hdXgiLCJiaW5kaW5ncyIsImNyZWF0ZSQwIiwiY2xlYXIiLCJjb3B5JDMiLCJwdXNoIiwicG9wIiwicG9wX29wdCIsInRvcCIsInRvcF9vcHQiLCJsZW5ndGgkMSIsIml0ZXIkNyIsImZvbGQkMiIsInRvX3NlcSQ2Iiwib2Zfc2VxJDQiLCJjcmVhdGUkMSIsImNsZWFyJDAiLCJjZWxsIiwicGVlayIsImNvbnRlbnQiLCJwZWVrX29wdCIsInRha2UiLCJ0YWtlX29wdCIsImNvcHkkNCIsInFfcmVzIiwicHJldiIsImlzX2VtcHR5JDAiLCJsZW5ndGgkMiIsIml0ZXIkOCIsImZvbGQkMyIsInRyYW5zZmVyIiwicTEiLCJxMiIsInRvX3NlcSQ3IiwiYWRkX3NlcSQwIiwib2Zfc2VxJDUiLCJyYWlzZV91bmRlZmluZWQiLCJmb3JjZV9sYXp5X2Jsb2NrIiwiYmxrIiwiY2xvc3VyZSIsImZvcmNlX3ZhbF9sYXp5X2Jsb2NrIiwiZm9yY2UiLCJsenYiLCJmb3JjZV92YWwiLCJmcm9tX2Z1biIsImZyb21fdmFsIiwiaXNfdmFsIiwibWFwJDgiLCJtYXBfdmFsIiwiY291bnQiLCJmaWxsX2J1ZmYiLCJnZXRfZGF0YSIsImQxMSIsImEkMCIsImEkMSIsInBlZWtfZGF0YSIsInBlZWskMCIsImp1bmtfZGF0YSIsImp1bmsiLCJuZ2V0X2RhdGEiLCJhbCIsIm5wZWVrIiwiZW1wdHkkMiIsIml0ZXIkOSIsInN0cm0iLCJmcm9tIiwib2ZfbGlzdCQxIiwib2Zfc3RyaW5nIiwib2ZfYnl0ZXMkMCIsIm9mX2NoYW5uZWwiLCJpYXBwIiwiaWNvbnMiLCJpc2luZyIsImxhcHAiLCJsY29ucyIsImxzaW5nIiwic2VtcHR5Iiwic2xhenkiLCJkdW1wX2RhdGEiLCJkdW1wIiwiY3JlYXRlJDIiLCJjb250ZW50cyIsInRvX2J5dGVzJDAiLCJzdWIkMyIsImJsaXQkMyIsIm50aCQwIiwibGVuZ3RoJDMiLCJjbGVhciQxIiwicmVzZXQiLCJyZXNpemUiLCJtb3JlIiwib2xkX3BvcyIsIm9sZF9sZW4iLCJuZXdfYnVmZmVyIiwiYWRkX2NoYXIiLCJhZGRfdXRmXzhfdWNoYXIiLCJwb3MkMCIsInBvcyQxIiwiYWRkX3V0Zl8xNmJlX3VjaGFyIiwiaGkiLCJsbyIsImFkZF91dGZfMTZsZV91Y2hhciIsImFkZF9zdWJzdHJpbmciLCJvZmZzZXQiLCJuZXdfcG9zaXRpb24iLCJhZGRfc3ViYnl0ZXMiLCJhZGRfc3RyaW5nIiwiYWRkX2J5dGVzIiwiYWRkX2J1ZmZlciIsImJzIiwiYWRkX2NoYW5uZWwiLCJhbHJlYWR5X3JlYWQiLCJ0b19yZWFkIiwiYWxyZWFkeV9yZWFkJDAiLCJ0b19yZWFkJDAiLCJvdXRwdXRfYnVmZmVyIiwiYWRkX3N1YnN0aXR1dGUiLCJsaW0kMSIsInByZXZpb3VzIiwiaSQ3IiwiY3VycmVudCIsImkkOCIsIm9wZW5pbmciLCJpJDYiLCJsaW0kMCIsImkkMyIsInN0b3AiLCJpJDQiLCJpJDUiLCJrJDIiLCJrJDAiLCJrJDEiLCJuZXh0X2kiLCJpZGVudCIsImkkOSIsImkkMTAiLCJpJDExIiwidHJ1bmNhdGUiLCJ0b19zZXEkOCIsInRvX3NlcWkkMyIsImFkZF9zZXEkMSIsIm9mX3NlcSQ2IiwiYWRkX2ludDgiLCJhZGRfaW50MTZfbmUiLCJhZGRfaW50MzJfbmUiLCJhZGRfaW50NjRfbmUiLCJhZGRfaW50MTZfbGUiLCJhZGRfaW50MTZfYmUiLCJhZGRfaW50MzJfbGUiLCJhZGRfaW50MzJfYmUiLCJhZGRfaW50NjRfbGUiLCJhZGRfaW50NjRfYmUiLCJjcmVhdGVfY2hhcl9zZXQiLCJhZGRfaW5fY2hhcl9zZXQiLCJzdHJfaW5kIiwibWFzayIsImZyZWV6ZV9jaGFyX3NldCIsInJldl9jaGFyX3NldCIsImNoYXJfc2V0JDAiLCJpc19pbl9jaGFyX3NldCIsInBhZF9vZl9wYWRfb3B0IiwicGFkX29wdCIsIndpZHRoIiwicGFyYW1fZm9ybWF0X29mX2lnbm9yZWRfZm9ybWF0IiwiZm10IiwicGFkX29wdCQwIiwicGFkX29wdCQxIiwicGFkX29wdCQyIiwicGFkX29wdCQzIiwicGFkX29wdCQ0IiwicHJlY19vcHQiLCJwYWRfb3B0JDUiLCJuZGVjIiwicGFkX29wdCQ2IiwicGFkX29wdCQ3IiwicGFkX29wdCQ4IiwiZGVmYXVsdF9mbG9hdF9wcmVjaXNpb24iLCJidWZmZXJfY3JlYXRlIiwiaW5pdF9zaXplIiwiYnVmZmVyX2NoZWNrX3NpemUiLCJvdmVyaGVhZCIsIm1pbl9sZW4iLCJuZXdfc3RyIiwiYnVmZmVyX2FkZF9jaGFyIiwiYnVmZmVyX2FkZF9zdHJpbmciLCJzdHJfbGVuIiwiYnVmZmVyX2NvbnRlbnRzIiwiY2hhcl9vZl9pY29udiIsImNoYXJfb2ZfZmNvbnYiLCJjRiIsImJwcmludF9wYWR0eSIsInBhZHR5IiwiYnByaW50X2lnbm9yZWRfZmxhZyIsImlnbl9mbGFnIiwiYnByaW50X3BhZF9vcHQiLCJicHJpbnRfcGFkZGluZyIsInBhZHR5JDAiLCJicHJpbnRfcHJlY2lzaW9uIiwiYnByaW50X2ljb252X2ZsYWciLCJicHJpbnRfYWx0aW50X2ZtdCIsImJwcmludF9mY29udl9mbGFnIiwic3RyaW5nX29mX2Zvcm1hdHRpbmdfbGl0Iiwic3RyJDAiLCJicHJpbnRfY2hhcl9saXRlcmFsIiwiYnByaW50X3N0cmluZ19saXRlcmFsIiwiYnByaW50X2ZtdHR5Iiwic3ViX2ZtdHR5Iiwic3ViX2ZtdHR5JDAiLCJpbnRfb2ZfY3VzdG9tX2FyaXR5Iiwic3RyaW5nX29mX2ZtdCIsImZtdCQxIiwiY2hyJDAiLCJzdHIkMSIsImlzX2Fsb25lJDAiLCJpc19hbG9uZSIsImFmdGVyIiwiYmVmb3JlIiwiaiQwIiwiaiQxIiwiZm10JDAiLCJzeW1tIiwidHJhbnMiLCJyZXN0MiIsInJlc3QyJDAiLCJyZXN0MiQxIiwicmVzdDIkMiIsInJlc3QyJDMiLCJyZXN0MiQ0IiwicmVzdDIkNSIsInJlc3QyJDYiLCJyZXN0MiQ3IiwidHkyJDAiLCJyZXN0MiQ4IiwidHkyMiIsInR5MjEiLCJmbXR0eV9yZWxfZGV0IiwiZjQiLCJmMiIsInJlc3QyJDkiLCJyZXN0MiQxMCIsInJlc3QyJDExIiwicmVzdDIkMTIiLCJyZXN0MiQxMyIsImRlIiwiZWQiLCJhZiIsImZhIiwiZGUkMCIsImVkJDAiLCJhZiQwIiwiZmEkMCIsImRlJDEiLCJlZCQxIiwiYWYkMSIsImZhJDEiLCJkZSQyIiwiZWQkMiIsImFmJDIiLCJmYSQyIiwiZGUkMyIsImVkJDMiLCJhZiQzIiwiZmEkMyIsImRlJDQiLCJlZCQ0IiwiYWYkNCIsImZhJDQiLCJkZSQ1IiwiZWQkNSIsImFmJDUiLCJmYSQ1IiwiZGUkNiIsImVkJDYiLCJhZiQ2IiwiZmEkNiIsImRlJDciLCJlZCQ3IiwiYWYkNyIsImZhJDciLCJkZSQ4IiwiZWQkOCIsImFmJDgiLCJmYSQ4IiwiamQiLCJkaiIsImdhIiwiYWciLCJkZSQ5IiwiZWQkOSIsImFmJDkiLCJmYSQ5IiwiZGUkMTAiLCJlZCQxMCIsImFmJDEwIiwiZmEkMTAiLCJkZSQxMSIsImVkJDExIiwiYWYkMTEiLCJmYSQxMSIsImRlJDEyIiwiZWQkMTIiLCJhZiQxMiIsImZhJDEyIiwiZGUkMTMiLCJlZCQxMyIsImFmJDEzIiwiZmEkMTMiLCJmbXR0eV9vZl9wcmVjaXNpb25fZm10dHkiLCJmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IiwiZm10dHlfb2ZfY3VzdG9tIiwiYXJpdHkkMCIsImZtdHR5X29mX2ZtdCIsInR5X3Jlc3QiLCJwcmVjX3R5IiwidHlfcmVzdCQwIiwicHJlY190eSQwIiwidHlfcmVzdCQxIiwicHJlY190eSQxIiwidHlfcmVzdCQyIiwicHJlY190eSQyIiwidHlfcmVzdCQzIiwicHJlY190eSQzIiwiZm10dHkkMSIsImZtdHR5JDIiLCJmbXR0eSQzIiwidHkkMCIsImZtdHR5JDQiLCJmbXR0eSQ1IiwidHlwZV9wYWRkaW5nIiwidyIsInR5cGVfcGFkcHJlYyIsInR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aSIsInR5cGVfZm9ybWF0X2dlbiIsImZtdHR5X3Jlc3QiLCJzdWJfZm10dHlfcmVzdCIsInN1Yl9mbXR0eV9yZXN0JDAiLCJmbXR0eV9yZXN0JDAiLCJzdWJfZm10dHlfcmVzdCQxIiwic3ViX2ZtdHR5X3Jlc3QkMiIsImZtdHR5X3Jlc3QkMSIsInN1Yl9mbXR0eV9yZXN0JDMiLCJmbXQkMiIsInN1Yl9mbXR0eV9yZXN0JDQiLCJmbXR0eV9yZXN0JDIiLCJzdWJfZm10dHlfcmVzdCQ1IiwiZm10JDMiLCJzdWJfZm10dHlfcmVzdCQ2IiwiZm10dHlfcmVzdCQzIiwic3ViX2ZtdHR5X3Jlc3QkNyIsImZtdCQ0Iiwic3ViX2ZtdHR5X3Jlc3QkOCIsImZtdHR5X3Jlc3QkNCIsInN1Yl9mbXR0eV9yZXN0JDkiLCJmbXQkNSIsInN1Yl9mbXR0eV9yZXN0JDEwIiwiZm10dHlfcmVzdCQ1Iiwic3ViX2ZtdHR5X3Jlc3QkMTEiLCJmbXQkNiIsInN1Yl9mbXR0eV9yZXN0JDEyIiwiZm10dHlfcmVzdCQ2Iiwic3ViX2ZtdHR5X3Jlc3QkMTMiLCJmbXQkNyIsInN1Yl9mbXR0eV9yZXN0JDE0IiwiZm10dHlfcmVzdCQ3Iiwic3ViMl9mbXR0eSIsInN1Yl9mbXR0eV9yZXN0JDE1Iiwic3ViMl9mbXR0eSQwIiwiZm10JDgiLCJzdWJfZm10dHlfcmVzdCQxNiIsImZtdHR5X3Jlc3QkOCIsInN1YjJfZm10dHkkMSIsInN1YjFfZm10dHkiLCJzdWJfZm10dHlfcmVzdCQxNyIsInN1YjJfZm10dHkkMiIsInN1YjFfZm10dHkkMCIsImZtdCQ5Iiwic3ViX2ZtdHR5X3Jlc3QkMTgiLCJmbXR0eV9yZXN0JDkiLCJzdWJfZm10dHlfcmVzdCQxOSIsImZtdCQxMCIsInN1Yl9mbXR0eV9yZXN0JDIwIiwiZm10dHlfcmVzdCQxMCIsInN1Yl9mbXR0eV9yZXN0JDIxIiwiZm10JDExIiwic3ViX2ZtdHR5X3Jlc3QkMjIiLCJmbXR0eV9yZXN0JDExIiwic3ViX2ZtdHR5X3Jlc3QkMjMiLCJmbXQkMTIiLCJzdWJfZm10dHlfcmVzdCQyNCIsImZtdHR5X3Jlc3QkMTIiLCJzdWJfZm10dHlfcmVzdCQyNSIsImZtdCQxMyIsInN1Yl9mbXR0eV9yZXN0JDI2IiwiZm10X3Jlc3QiLCJmbXRfcmVzdCQwIiwiZm10X3Jlc3QkMSIsImZtdF9yZXN0JDIiLCJmbXRfcmVzdCQzIiwiZm10X3Jlc3QkNCIsImZtdF9yZXN0JDUiLCJwcmVjJDQiLCJmbXR0eSQ2IiwiZm10X3Jlc3QkNiIsInByZWMkNSIsInByZWMkNiIsImZtdHR5JDciLCJmbXRfcmVzdCQ3IiwicHJlYyQ3IiwicHJlYyQ4IiwiZm10dHkkOCIsImZtdF9yZXN0JDgiLCJmbXR0eSQ5IiwiZm10X3Jlc3QkOSIsImZtdHR5JDEwIiwiZm10X3Jlc3QkMTAiLCJmbXR0eSQxMSIsImZtdF9yZXN0JDExIiwiZm10dHkkMTIiLCJmbXRfcmVzdCQxMiIsImZtdHR5JDEzIiwic3ViX2ZtdHR5MSIsImZtdF9yZXN0JDEzIiwic3ViX2ZtdHR5JDEiLCJmbXR0eSQxNCIsImZtdCQxNCIsImZtdF9yZXN0JDE0IiwiZm10dHkkMTUiLCJmbXQkMTUiLCJmbXRfcmVzdCQxNSIsImZtdHR5JDE2IiwiZm10JDE2IiwiZm10X3Jlc3QkMTYiLCJmbXR0eSQxNyIsImZtdCQxNyIsImZtdF9yZXN0JDE3IiwiZm9ybWF0dGluZ19nZW4iLCJmbXR0eTMiLCJmbXQzIiwiZm10MSQwIiwiZm10dHkyJDAiLCJmbXQyJDAiLCJmbXR0eTMkMCIsImZtdDMkMCIsImZtdHR5X3Jlc3QkMTMiLCJmbXRfcmVzdCQxOCIsImZtdHR5JDE4IiwiZm10JDE4IiwiZm10dHlfcmVzdCQxNCIsImZtdF9yZXN0JDE5IiwiZm10dHkkMTkiLCJmbXQkMTkiLCJmbXR0eV9yZXN0JDE1IiwiZm10X3Jlc3QkMjAiLCJmbXR0eSQyMCIsImZtdCQyMCIsInR5cGVfaWdub3JlZF9wYXJhbV9vbmUiLCJmbXR0eV9yZXN0JDE2IiwiZm10dHkkMjEiLCJmbXQkMjEiLCJzdWJfZm10dHkkMiIsInN1Yl9mbXR0eSQzIiwiZm10dHkkMjIiLCJmbXQkMjIiLCJzdWJfZm10dHkkNCIsInR5cGVfZm9ybWF0IiwicmVjYXN0IiwiZml4X3BhZGRpbmciLCJ3aWR0aCQwIiwiZml4X2ludF9wcmVjaXNpb24iLCJyZXMkMSIsInN0cmluZ190b19jYW1sX3N0cmluZyIsImZvcm1hdF9vZl9mY29udiIsInN5bWIiLCJ0cmFuc2Zvcm1faW50X2FsdCIsImRpZ2l0cyIsInB1dCIsImNvbnZlcnRfaW50IiwiY29udmVydF9pbnQzMiIsImNvbnZlcnRfbmF0aXZlaW50IiwiY29udmVydF9pbnQ2NCIsImNvbnZlcnRfZmxvYXQiLCJoZXgiLCJzaWduIiwiY2FtbF9zcGVjaWFsX3ZhbCIsInN0cmluZ19vZl9mbXR0eSIsIm1ha2VfcHJpbnRmJDAiLCJuZXdfYWNjIiwibWFrZV9wcmludGYiLCJtYWtlX3BhZGRpbmciLCJtYWtlX2ludF9wYWRkaW5nX3ByZWNpc2lvbiIsInAkMCIsInAkMSIsImFjYyQzIiwiYWNjJDQiLCJrJDMiLCJrYWNjIiwiayQ0IiwibWFrZV9pZ25vcmVkX3BhcmFtJDAiLCJtYWtlX2N1c3RvbSQwIiwibWFrZV9pbnZhbGlkX2FyZyIsIm1ha2VfZnJvbV9mbXR0eSQwIiwibWFrZV9mcm9tX2ZtdHR5IiwibWFrZV9jdXN0b20iLCJtYWtlX2lnbm9yZWRfcGFyYW0iLCJtYWtlX2lwcmludGYkMCIsIm1ha2VfaXByaW50ZiIsImZuX29mX3BhZGRpbmdfcHJlY2lzaW9uIiwia29jIiwicmVzdCQyNCIsInJlc3QkMjUiLCJmbl9vZl9jdXN0b21fYXJpdHkkMCIsImZuX29mX2N1c3RvbV9hcml0eSIsIm91dHB1dF9hY2MiLCJwJDIiLCJwJDMiLCJwJDQiLCJidWZwdXRfYWNjIiwic3RycHV0X2FjYyIsImZhaWx3aXRoX21lc3NhZ2UiLCJvcGVuX2JveF9vZl9zdHJpbmciLCJpbnZhbGlkX2JveCIsInBhcnNlX3NwYWNlcyIsInBhcnNlX2x3b3JkIiwicGFyc2VfaW50Iiwid3N0YXJ0Iiwid2VuZCIsImJveF9uYW1lIiwibnN0YXJ0IiwibmVuZCIsImluZGVudCIsImV4cF9lbmQiLCJib3hfdHlwZSIsIm1ha2VfcGFkZGluZ19mbXRfZWJiIiwibWFrZV9wYWRwcmVjX2ZtdF9lYmIiLCJmbXRfZWJiX29mX3N0cmluZyIsImxlZ2FjeV9iZWhhdmlvciIsImZsYWciLCJsZWdhY3lfYmVoYXZpb3IkMCIsImludmFsaWRfZm9ybWF0X21lc3NhZ2UiLCJ1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQiLCJlbmRfaW5kIiwiaW52YWxpZF9mb3JtYXRfd2l0aG91dCIsImV4cGVjdGVkX2NoYXJhY3RlciIsImV4cGVjdGVkIiwiYWRkX2xpdGVyYWwiLCJsaXRfc3RhcnQiLCJzaXplIiwicGFyc2VfcG9zaXRpdmUiLCJzdHJfaW5kJDAiLCJzdHJfaW5kJDEiLCJwYXJzZV9pbnRlZ2VyIiwibmV4dF9pbmQiLCJpbmNvbXBhdGlibGVfZmxhZyIsInBjdF9pbmQiLCJvcHRpb24iLCJzdWJmbXQiLCJjb21wdXRlX2ludF9jb252IiwicGx1cyIsInNwYWNlIiwicGx1cyQwIiwic3BhY2UkMCIsInNlYXJjaF9zdWJmb3JtYXRfZW5kIiwic3ViX2VuZCIsInN0cl9pbmQkMiIsInN1Yl9lbmQkMCIsInN0cl9pbmQkMyIsInN1Yl9lbmQkMSIsInN0cl9pbmQkNCIsInN0cl9pbmQkNSIsInN1Yl9lbmQkMiIsInN0cl9pbmQkNiIsInN0cl9pbmQkNyIsInBhcnNlX21hZ2ljX3NpemUiLCJzdHJfaW5kXzEiLCJzdHJfaW5kXzIiLCJzdHJfaW5kXzMiLCJwYXJzZSIsInBhcnNlX2dvb2RfYnJlYWsiLCJmb3JtYXR0aW5nX2xpdCQwIiwic3RyX2luZF80Iiwic3RyX2luZF81IiwicGFyc2VfdGFnIiwiaXNfb3Blbl90YWciLCJpbmQiLCJzdWJfc3RyIiwic3ViX2ZtdCIsInN1Yl9mb3JtYXQkMCIsImZvcm1hdHRpbmckMCIsImZvcm1hdHRpbmciLCJwYXJzZV9mbGFncyIsIm1pbnVzIiwic2V0X2ZsYWciLCJuZXdfaW5kIiwicGFyc2VfYWZ0ZXJfcGFkZGluZyIsInBhcnNlX2xpdGVyYWwiLCJwYXJzZV9hZnRlcl9wcmVjaXNpb24iLCJzeW1iJDAiLCJtaW51cyQwIiwicGFyc2VfY29udmVyc2lvbiIsInBhcnNlX2NvbnYiLCJwYWRwcmVjIiwicGx1c191c2VkIiwiaGFzaF91c2VkIiwic3BhY2VfdXNlZCIsImlnbl91c2VkIiwicGFkX3VzZWQiLCJwcmVjX3VzZWQiLCJnZXRfcGx1cyIsImdldF9oYXNoIiwiZ2V0X3NwYWNlIiwiZ2V0X2lnbiIsImdldF9wYWQiLCJnZXRfcHJlYyIsImdldF9wYWRwcmVjIiwiZ2V0X2ludF9wYWQiLCJjaGVja19ub18wIiwib3B0X29mX3BhZCIsIndpZHRoJDEiLCJnZXRfcGFkX29wdCIsImdldF9wYWRwcmVjX29wdCIsImZtdF9yZXN1bHQiLCJpZ25vcmVkJDIiLCJjb3VudGVyJDAiLCJpZ25vcmVkJDYiLCJpZ25vcmVkJDciLCJhZGRfcmFuZ2UiLCJmYWlsX3NpbmdsZV9wZXJjZW50IiwicGFyc2VfY2hhcl9zZXRfY29udGVudCIsInBhcnNlX2NoYXJfc2V0X2FmdGVyX2NoYXIkMCIsInBhcnNlX2NoYXJfc2V0X2FmdGVyX2NoYXIiLCJyZXZlcnNlIiwiY2hhcl9zZXQkMSIsImlnbm9yZWQkOSIsImNoYXJfZm9ybWF0IiwiZm10X3Jlc3QkMjEiLCJmbXRfcmVzdCQyMiIsInBhZCQ5IiwiZm10X3Jlc3QkMjMiLCJpZ25vcmVkJDEwIiwiZm10X3Jlc3QkMjQiLCJwYWQkMTAiLCJmbXRfcmVzdCQyNSIsInN1Yl9mbXQkMCIsImZtdF9yZXN0JDI2IiwiaWdub3JlZCQxMSIsImlnbm9yZWQkMyIsImlnbm9yZWQkNSIsImlnbm9yZWQkOCIsInNwYWNlJDEiLCJoYXNoJDEiLCJwbHVzJDIiLCJraW5kIiwiaWdub3JlZCQ0IiwiaWdub3JlZCIsImlnbm9yZWQkMCIsImlnbm9yZWQkMSIsInBsdXMkMSIsImlnbiQwIiwiZm9ybWF0X29mX3N0cmluZ19mbXR0eSIsImZvcm1hdF9vZl9zdHJpbmdfZm9ybWF0Iiwia2ZwcmludGYiLCJrYnByaW50ZiIsImlrZnByaW50ZiIsImZwcmludGYiLCJicHJpbnRmIiwiaWZwcmludGYiLCJpYnByaW50ZiIsInByaW50ZiIsImVwcmludGYiLCJrc3ByaW50ZiIsInNwcmludGYiLCJhc3NvYzMiLCJ5MiIsInkxIiwic3BsaXQkMSIsIm1ha2Vfc3ltbGlzdCIsImhlbHBfYWN0aW9uIiwiYWRkX2hlbHAiLCJzcGVjbGlzdCIsImFkZDIiLCJ1c2FnZV9iIiwiZXJybXNnIiwiZG9jIiwic3BlYyIsImtleSIsInVzYWdlX3N0cmluZyIsInVzYWdlIiwiYm9vbF9vZl9zdHJpbmdfb3B0JDAiLCJpbnRfb2Zfc3RyaW5nX29wdCQwIiwiZmxvYXRfb2Zfc3RyaW5nX29wdCIsInBhcnNlX2FuZF9leHBhbmRfYXJndl9keW5hbWljXyIsImFsbG93X2V4cGFuZCIsImFyZ3YiLCJhbm9uZnVuIiwiaW5pdHBvcyIsImNvbnZlcnRfZXJyb3IiLCJwcm9nbmFtZSIsImZvbGxvdyQwIiwiYWN0aW9uIiwia2V5d29yZCIsIm5vX2FyZyQwIiwiZm9sbG93Iiwibm9fYXJnIiwiZ2V0X2FyZyQwIiwiZ2V0X2FyZyIsImNvbnN1bWVfYXJnJDAiLCJjb25zdW1lX2FyZyIsInRyZWF0X2FjdGlvbiQwIiwidHJlYXRfYWN0aW9uIiwiZiQwIiwiZiQxIiwiciQxIiwiZiQyIiwiciQyIiwiYXJnJDIiLCJmJDMiLCJhcmckMyIsIngkMSIsInIkMyIsImFyZyQ0IiwieCQyIiwic3BlY3MiLCJmJDQiLCJhcmckNSIsImYkNSIsImYkNiIsImYkNyIsImFyZyQ2IiwibmV3YXJnIiwicGFyc2VfYW5kX2V4cGFuZF9hcmd2X2R5bmFtaWMiLCJwYXJzZV9hcmd2X2R5bmFtaWMiLCJjdXJyZW50JDAiLCJwYXJzZV9hcmd2IiwibXNnJDAiLCJtc2ckMSIsInBhcnNlX2R5bmFtaWMiLCJwYXJzZV9leHBhbmQiLCJzZWNvbmRfd29yZCIsImxvb3AiLCJtYXhfYXJnX2xlbiIsImt3ZCIsInJlcGxhY2VfbGVhZGluZ190YWIiLCJhbGlnbiIsImxpbWl0IiwiY29tcGxldGVkIiwia3NkIiwiY3V0Y29sJDAiLCJzcGFjZXMkMCIsImN1dGNvbCIsImt3ZF9sZW4iLCJzcGFjZXMiLCJyZWFkX2F1eCIsInRyaW0iLCJmaWxlIiwid29yZHMiLCJzdGFzaCIsIndvcmQiLCJyZWFkX2FyZyIsInJlYWRfYXJnMCIsIndyaXRlX2F1eCIsImFyZ3MiLCJ3cml0ZV9hcmciLCJ3cml0ZV9hcmcwIiwicHJpbnRlcnMiLCJmaWVsZCIsIm90aGVyX2ZpZWxkcyIsInVzZV9wcmludGVycyIsImNvbnYiLCJ0b19zdHJpbmdfZGVmYXVsdCIsImNoYXIkMCIsImxpbmUiLCJjaGFyJDEiLCJsaW5lJDAiLCJmaWxlJDAiLCJjaGFyJDIiLCJsaW5lJDEiLCJmaWxlJDEiLCJjb25zdHJ1Y3RvciIsInRvX3N0cmluZyQ2IiwicHJpbnQiLCJmY3QiLCJjYXRjaCQwIiwicmF3X2JhY2t0cmFjZV9lbnRyaWVzIiwiYnQiLCJjb252ZXJ0X3Jhd19iYWNrdHJhY2UiLCJmb3JtYXRfYmFja3RyYWNlX3Nsb3QiLCJpc19yYWlzZSIsInByaW50X3Jhd19iYWNrdHJhY2UiLCJvdXRjaGFuIiwicmF3X2JhY2t0cmFjZSIsImJhY2t0cmFjZSIsInByaW50X2JhY2t0cmFjZSIsInJhd19iYWNrdHJhY2VfdG9fc3RyaW5nIiwiYmFja3RyYWNlX3Nsb3RfaXNfcmFpc2UiLCJiYWNrdHJhY2Vfc2xvdF9pc19pbmxpbmUiLCJiYWNrdHJhY2Vfc2xvdF9sb2NhdGlvbiIsImJhY2t0cmFjZV9zbG90X2RlZm5hbWUiLCJiYWNrdHJhY2Vfc2xvdHMiLCJiYWNrdHJhY2Vfc2xvdHNfb2ZfcmF3X2VudHJ5IiwiZW50cnkiLCJyYXdfYmFja3RyYWNlX2xlbmd0aCIsImdldF9iYWNrdHJhY2UiLCJyZWdpc3Rlcl9wcmludGVyIiwiZm4iLCJvbGRfcHJpbnRlcnMiLCJuZXdfcHJpbnRlcnMiLCJleG5fc2xvdCIsImV4bl9zbG90X2lkIiwiZXhuX3Nsb3RfbmFtZSIsImVycm9ycyIsImRlZmF1bHRfdW5jYXVnaHRfZXhjZXB0aW9uX2hhbiIsInN0YXR1cyIsInVuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyIiwic2V0X3VuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyIiwiZW1wdHlfYmFja3RyYWNlIiwiaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvbiIsImRlYnVnZ2VyX2luX3VzZSIsImV4biQwIiwicmF3X2JhY2t0cmFjZSQwIiwiY29uc3QkMCIsImZsaXAiLCJuZWdhdGUiLCJwcm90ZWN0IiwiZmluYWxseSQwIiwid29yayIsImZpbmFsbHlfbm9fZXhuIiwid29ya19leG4iLCJ3b3JrX2J0IiwicHJpbnRfc3RhdCIsImFsbG9jYXRlZF9ieXRlcyIsIm1hIiwicHJvIiwibWkiLCJjcmVhdGVfYWxhcm0iLCJkZWxldGVfYWxhcm0iLCJudWxsX3RyYWNrZXIiLCJzYW1wbGluZ19yYXRlIiwidHJhY2tlciIsImNhbGxzdGFja19zaXplIiwic3RyaW5nIiwiYnl0ZXMiLCJzdWJzdHJpbmciLCJzdWJieXRlcyIsImZpbGVuYW1lIiwib3V0cHV0JDAiLCJkaWdlc3QiLCJpbnB1dCQwIiwiY2hhcl9oZXgiLCJ0b19oZXgiLCJmcm9tX2hleCIsImRpZ2l0IiwibmV3X3N0YXRlIiwiYXNzaWduIiwic3QxIiwic3QyIiwiZnVsbF9pbml0Iiwic2VlZCIsInNlZWQkMCIsIm1ha2UkMyIsIm1ha2Vfc2VsZl9pbml0IiwiY29weSQ1IiwiYml0cyIsImN1cnZhbCIsIm5ld3ZhbCIsIm5ld3ZhbDMwIiwiaW50YXV4IiwiaW50JDAiLCJib3VuZCIsImZ1bGxfaW50IiwiYjEiLCJiMiIsImJwb3MiLCJiMyIsImJwb3MkMCIsImludDMyIiwiaW50NjQiLCJuYXRpdmVpbnQiLCJmbG9hdCQwIiwiYm9vbCIsImJpdHMkMCIsImludCQxIiwiZnVsbF9pbnQkMCIsImludDMyJDAiLCJuYXRpdmVpbnQkMCIsImludDY0JDAiLCJmbG9hdCQxIiwic2NhbGUiLCJib29sJDAiLCJmdWxsX2luaXQkMCIsImluaXQkNCIsInNlbGZfaW5pdCIsImdldF9zdGF0ZSIsInNldF9zdGF0ZSIsIm9uZ29pbmdfdHJhdmVyc2FsIiwiZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCIsInBhcmFtcyIsInJhbmRvbWl6ZWRfZGVmYXVsdCIsInJhbmRvbWl6ZWQiLCJyYW5kb21pemUiLCJpc19yYW5kb21pemVkIiwicHJuZyIsInBvd2VyXzJfYWJvdmUiLCJjcmVhdGUkMyIsImluaXRpYWxfc2l6ZSIsInJhbmRvbSIsImNsZWFyJDIiLCJyZXNldCQwIiwiY29weV9idWNrZXRsaXN0Iiwia2V5JDAiLCJuZXh0JDAiLCJjb3B5JDYiLCJsZW5ndGgkNCIsImluc2VydF9hbGxfYnVja2V0cyIsImluZGV4ZnVuIiwiaW5wbGFjZSIsIm9kYXRhIiwibmRhdGEiLCJuc2l6ZSIsIm5kYXRhX3RhaWwiLCJjZWxsJDAiLCJuaWR4IiwibWF0Y2giLCJtYXRjaCQwIiwicmVzaXplJDAiLCJvc2l6ZSIsIml0ZXIkMTAiLCJkb19idWNrZXQiLCJvbGRfdHJhdiIsImZpbHRlcl9tYXBfaW5wbGFjZV9idWNrZXQiLCJmaWx0ZXJfbWFwX2lucGxhY2UiLCJmb2xkJDQiLCJiJDAiLCJidWNrZXRfbGVuZ3RoIiwic3RhdHMiLCJtYmwiLCJoaXN0byIsInRvX3NlcSQ5IiwidGJsX2RhdGEiLCJidWNrIiwiYnVjayQwIiwiYnVjayQxIiwidG9fc2VxX2tleXMiLCJ0b19zZXFfdmFsdWVzIiwia2V5X2luZGV4IiwiYnVja2V0IiwiazEiLCJuZXh0MSIsImsyIiwibmV4dDIiLCJrMyIsImQzIiwibmV4dDMiLCJmaW5kX2FsbCIsImZpbmRfaW5fYnVja2V0IiwicmVwbGFjZSIsInJlcGxhY2Vfc2VxIiwiY29weSIsInN6IiwiaGFzaF9wYXJhbSIsInNlZWRlZF9oYXNoIiwiYWRkJDAiLCJmaW5kJDAiLCJmaW5kX29wdCQxIiwiZmluZF9hbGwkMCIsIm1lbSQyIiwiYWRkX3NlcSQyIiwib2Zfc2VxJDciLCJyZWJ1aWxkIiwid2Vha19jcmVhdGUiLCJsZW5ndGgkNSIsInJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0JDAiLCJzZXQkMCIsImdldCQxIiwiZ2V0X2NvcHkiLCJjaGVjayQwIiwiYmxpdCQ0IiwiZmlsbCQyIiwiYXIiLCJlbXB0eWJ1Y2tldCIsImdldF9pbmRleCIsInN6JDAiLCJzeiQxIiwiY291bnRfYnVja2V0IiwiYWRkX2F1eCIsInNldHRlciIsImluZGV4IiwiYnVja2V0JDAiLCJoYXNoZXMiLCJuZXdzeiIsIm5ld2J1Y2tldCQwIiwibmV3aGFzaGVzIiwiaGJ1Y2tldCIsInByZXZfbGVuIiwibGl2ZSIsImokMiIsIm5ld2J1Y2tldCIsIm5ld3QiLCJvYiIsIm9oIiwic2V0dGVyJDAiLCJuaSIsImZpbmRfb3IiLCJpZm5vdGZvdW5kIiwiZmluZF9zaGFkb3ciLCJpZmZvdW5kIiwibGVucyIsInRvdGxlbiIsImlkJDAiLCJ1bmtub3duIiwicHBfZW5xdWV1ZSIsInRva2VuIiwicHBfaW5maW5pdHkiLCJwcF9vdXRwdXRfc3RyaW5nIiwicHBfb3V0cHV0X25ld2xpbmUiLCJmb3JtYXRfcHBfdGV4dCIsInRleHQiLCJmb3JtYXRfc3RyaW5nIiwiYnJlYWtfbmV3X2xpbmUiLCJyZWFsX2luZGVudCIsImJyZWFrX2xpbmUiLCJicmVha19zYW1lX2xpbmUiLCJhZHZhbmNlX2xlZnQiLCJzaXplJDAiLCJwZW5kaW5nX2NvdW50Iiwic2l6ZSQxIiwidGFicyIsImFkZF90YWIiLCJscyIsInRhZ19uYW1lIiwibWFya2VyIiwiYnJlYWtzIiwiZml0cyIsIm9mZiIsImJveF90eXBlJDAiLCJvZmYkMCIsImluc2VydGlvbl9wb2ludCIsInRhYnMkMCIsImZpcnN0IiwiaGVhZCIsInRhYiIsIm9mZiQxIiwiaW5zZXJ0aW9uX3BvaW50JDAiLCJ3aWR0aCQyIiwiYm94X3R5cGUkMSIsInRib3giLCJ0YWdfbmFtZSQwIiwibWFya2VyJDAiLCJlbnF1ZXVlX2FkdmFuY2UiLCJlbnF1ZXVlX3N0cmluZ19hcyIsImluaXRpYWxpemVfc2Nhbl9zdGFjayIsInN0YWNrIiwicXVldWVfZWxlbSIsInNldF9zaXplIiwibGVmdF90b3RhbCIsInNjYW5fcHVzaCIsImVsZW0iLCJwcF9vcGVuX2JveF9nZW4iLCJicl90eSIsInBwX2Nsb3NlX2JveCIsInBwX29wZW5fc3RhZyIsInBwX2Nsb3NlX3N0YWciLCJwcF9vcGVuX3RhZyIsInBwX2Nsb3NlX3RhZyIsInBwX3NldF9wcmludF90YWdzIiwicHBfc2V0X21hcmtfdGFncyIsInBwX2dldF9wcmludF90YWdzIiwicHBfZ2V0X21hcmtfdGFncyIsInBwX3NldF90YWdzIiwicHBfZ2V0X2Zvcm1hdHRlcl9zdGFnX2Z1bmN0aW9uIiwicHBfc2V0X2Zvcm1hdHRlcl9zdGFnX2Z1bmN0aW9uIiwicGN0IiwicG90IiwibWN0IiwibW90IiwicHBfcmluaXQiLCJwcF9mbHVzaF9xdWV1ZSIsInBwX3ByaW50X2FzX3NpemUiLCJwcF9wcmludF9hcyIsImlzaXplIiwicHBfcHJpbnRfc3RyaW5nIiwicHBfcHJpbnRfYnl0ZXMiLCJwcF9wcmludF9pbnQiLCJwcF9wcmludF9mbG9hdCIsInBwX3ByaW50X2Jvb2wiLCJwcF9wcmludF9jaGFyIiwicHBfb3Blbl9oYm94IiwicHBfb3Blbl92Ym94IiwicHBfb3Blbl9odmJveCIsInBwX29wZW5faG92Ym94IiwicHBfb3Blbl9ib3giLCJwcF9wcmludF9uZXdsaW5lIiwicHBfcHJpbnRfZmx1c2giLCJwcF9mb3JjZV9uZXdsaW5lIiwicHBfcHJpbnRfaWZfbmV3bGluZSIsInBwX3ByaW50X2N1c3RvbV9icmVhayIsInBwX3ByaW50X2JyZWFrIiwicHBfcHJpbnRfc3BhY2UiLCJwcF9wcmludF9jdXQiLCJwcF9vcGVuX3Rib3giLCJwcF9jbG9zZV90Ym94IiwicHBfcHJpbnRfdGJyZWFrIiwicHBfcHJpbnRfdGFiIiwicHBfc2V0X3RhYiIsInBwX3NldF9tYXhfYm94ZXMiLCJwcF9nZXRfbWF4X2JveGVzIiwicHBfb3Zlcl9tYXhfYm94ZXMiLCJwcF9zZXRfZWxsaXBzaXNfdGV4dCIsInBwX2dldF9lbGxpcHNpc190ZXh0IiwicHBfbGltaXQiLCJwcF9zZXRfbWF4X2luZGVudCIsInBwX2dldF9tYXhfaW5kZW50IiwicHBfc2V0X21hcmdpbiIsIm5ld19tYXhfaW5kZW50IiwidmFsaWRhdGVfZ2VvbWV0cnkiLCJtYXJnaW4iLCJtYXhfaW5kZW50IiwiY2hlY2tfZ2VvbWV0cnkiLCJnZW9tZXRyeSIsInBwX2dldF9tYXJnaW4iLCJwcF9zZXRfZnVsbF9nZW9tZXRyeSIsInBwX3NldF9nZW9tZXRyeSIsInBwX3NhZmVfc2V0X2dlb21ldHJ5IiwicHBfZ2V0X2dlb21ldHJ5IiwicHBfdXBkYXRlX2dlb21ldHJ5IiwicHBfc2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zIiwicHBfZ2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zIiwicHBfc2V0X2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3RpIiwicHBfZ2V0X2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3RpIiwiZGlzcGxheV9uZXdsaW5lIiwiYmxhbmtfbGluZSIsImRpc3BsYXlfaW5kZW50IiwicHBfc2V0X2Zvcm1hdHRlcl9vdXRfY2hhbm5lbCIsImRlZmF1bHRfcHBfbWFya19vcGVuX3RhZyIsImRlZmF1bHRfcHBfbWFya19jbG9zZV90YWciLCJkZWZhdWx0X3BwX3ByaW50X29wZW5fdGFnIiwiZGVmYXVsdF9wcF9wcmludF9jbG9zZV90YWciLCJwcF9tYWtlX2Zvcm1hdHRlciIsInBwX3F1ZXVlIiwic3lzX3RvayIsInNjYW5fc3RhY2siLCJmb3JtYXR0ZXJfb2Zfb3V0X2Z1bmN0aW9ucyIsIm91dF9mdW5zIiwibWFrZV9mb3JtYXR0ZXIiLCJwcGYiLCJmb3JtYXR0ZXJfb2Zfb3V0X2NoYW5uZWwiLCJmb3JtYXR0ZXJfb2ZfYnVmZmVyIiwicHBfYnVmZmVyX3NpemUiLCJwcF9tYWtlX2J1ZmZlciIsInN0ZGJ1ZiIsInN0ZF9mb3JtYXR0ZXIiLCJlcnJfZm9ybWF0dGVyIiwic3RyX2Zvcm1hdHRlciIsImZsdXNoX2J1ZmZlcl9mb3JtYXR0ZXIiLCJmbHVzaF9zdHJfZm9ybWF0dGVyIiwibWFrZV9zeW1ib2xpY19vdXRwdXRfYnVmZmVyIiwiY2xlYXJfc3ltYm9saWNfb3V0cHV0X2J1ZmZlciIsInNvYiIsImdldF9zeW1ib2xpY19vdXRwdXRfYnVmZmVyIiwiZmx1c2hfc3ltYm9saWNfb3V0cHV0X2J1ZmZlciIsIml0ZW1zIiwiYWRkX3N5bWJvbGljX291dHB1dF9pdGVtIiwiaXRlbSIsImZvcm1hdHRlcl9vZl9zeW1ib2xpY19vdXRwdXRfYiIsIm9wZW5faGJveCIsIm9wZW5fdmJveCIsIm9wZW5faHZib3giLCJvcGVuX2hvdmJveCIsIm9wZW5fYm94IiwiY2xvc2VfYm94Iiwib3Blbl90YWciLCJjbG9zZV90YWciLCJvcGVuX3N0YWciLCJjbG9zZV9zdGFnIiwicHJpbnRfYXMiLCJwcmludF9zdHJpbmckMCIsInByaW50X2J5dGVzJDAiLCJwcmludF9pbnQkMCIsInByaW50X2Zsb2F0JDAiLCJwcmludF9jaGFyJDAiLCJwcmludF9ib29sIiwicHJpbnRfYnJlYWsiLCJwcmludF9jdXQiLCJwcmludF9zcGFjZSIsImZvcmNlX25ld2xpbmUiLCJwcmludF9mbHVzaCIsInByaW50X25ld2xpbmUkMCIsInByaW50X2lmX25ld2xpbmUiLCJvcGVuX3Rib3giLCJjbG9zZV90Ym94IiwicHJpbnRfdGJyZWFrIiwic2V0X3RhYiIsInByaW50X3RhYiIsInNldF9tYXJnaW4iLCJnZXRfbWFyZ2luIiwic2V0X21heF9pbmRlbnQiLCJnZXRfbWF4X2luZGVudCIsInNldF9nZW9tZXRyeSIsInNhZmVfc2V0X2dlb21ldHJ5IiwiZ2V0X2dlb21ldHJ5IiwidXBkYXRlX2dlb21ldHJ5Iiwic2V0X21heF9ib3hlcyIsImdldF9tYXhfYm94ZXMiLCJvdmVyX21heF9ib3hlcyIsInNldF9lbGxpcHNpc190ZXh0IiwiZ2V0X2VsbGlwc2lzX3RleHQiLCJzZXRfZm9ybWF0dGVyX291dF9jaGFubmVsIiwic2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zIiwiZ2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zIiwic2V0X2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIiwiZ2V0X2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIiwic2V0X2Zvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyIsImdldF9mb3JtYXR0ZXJfc3RhZ19mdW5jdGlvbnMiLCJzZXRfcHJpbnRfdGFncyIsImdldF9wcmludF90YWdzIiwic2V0X21hcmtfdGFncyIsImdldF9tYXJrX3RhZ3MiLCJzZXRfdGFncyIsInBwX3ByaW50X2xpc3QiLCJwcF92Iiwib3B0JDAiLCJwcF9zZXAiLCJ2cyIsIm9wdCQxIiwicHBfcHJpbnRfc2VxIiwic2VxJDEiLCJzZXEkMiIsInBwX3ByaW50X3RleHQiLCJwcF9wcmludF9vcHRpb24iLCJwcF9wcmludF9yZXN1bHQiLCJwcF9wcmludF9laXRoZXIiLCJjb21wdXRlX3RhZyIsInRhZ19hY2MiLCJvdXRwdXRfZm9ybWF0dGluZ19saXQiLCJvdXRwdXRfYWNjJDAiLCJidHkiLCJwJDUiLCJwJDYiLCJzdHJwdXRfYWNjJDAiLCJrZnByaW50ZiQwIiwiaWtmcHJpbnRmJDAiLCJpZnByaW50ZiQwIiwiZnByaW50ZiQwIiwicHJpbnRmJDAiLCJlcHJpbnRmJDAiLCJrZHByaW50ZiIsImRwcmludGYiLCJrcHJpbnRmIiwic3ByaW50ZiQwIiwia2FzcHJpbnRmIiwiYXNwcmludGYiLCJmbHVzaF9zdGFuZGFyZF9mb3JtYXR0ZXJzIiwicHBfc2V0X2FsbF9mb3JtYXR0ZXJfb3V0cHV0X2Z1IiwicHBfZ2V0X2FsbF9mb3JtYXR0ZXJfb3V0cHV0X2Z1Iiwic2V0X2FsbF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0IiwiZ2V0X2FsbF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0IiwiYnByaW50ZiQwIiwicHBfc2V0X2Zvcm1hdHRlcl90YWdfZnVuY3Rpb25zIiwic3RyaW5naWZ5IiwicHBfZ2V0X2Zvcm1hdHRlcl90YWdfZnVuY3Rpb25zIiwiZnVucyIsIm1hcmtfb3Blbl90YWciLCJtYXJrX2Nsb3NlX3RhZyIsInByaW50X29wZW5fdGFnIiwicHJpbnRfY2xvc2VfdGFnIiwic2V0X2Zvcm1hdHRlcl90YWdfZnVuY3Rpb25zIiwiZ2V0X2Zvcm1hdHRlcl90YWdfZnVuY3Rpb25zIiwibnVsbF9jaGFyIiwibmV4dF9jaGFyIiwiaWIiLCJwZWVrX2NoYXIiLCJjaGVja2VkX3BlZWtfY2hhciIsImVuZF9vZl9pbnB1dCIsImJlZ2lubmluZ19vZl9pbnB1dCIsIm5hbWVfb2ZfaW5wdXQiLCJjaGFyX2NvdW50IiwicmVzZXRfdG9rZW4iLCJpbnZhbGlkYXRlX2N1cnJlbnRfY2hhciIsInRva2VuX3N0cmluZyIsInRva2VuX2J1ZmZlciIsInNraXBfY2hhciIsImlnbm9yZV9jaGFyIiwic3RvcmVfY2hhciIsImRlZmF1bHRfdG9rZW5fYnVmZmVyX3NpemUiLCJjcmVhdGUkNCIsImluYW1lIiwiZnJvbV9zdHJpbmckMSIsImZyb21fZnVuY3Rpb24kMCIsInNjYW5fY2xvc2VfYXRfZW5kIiwic2Nhbl9yYWlzZV9hdF9lbmQiLCJmcm9tX2ljIiwic2Nhbl9jbG9zZV9pYyIsImVvZiIsInN0ZGliIiwib3Blbl9pbl9maWxlIiwiZnJvbV9maWxlIiwiZnJvbV9maWxlX2JpbiIsImZyb21fY2hhbm5lbCQwIiwiY2xvc2VfaW4kMCIsImljJDAiLCJtZW1vIiwibWVtb19mcm9tX2ljIiwibWVtb19mcm9tX2NoYW5uZWwiLCJiYWRfaW5wdXQiLCJiYWRfaW5wdXRfZXNjYXBlIiwiYmFkX3Rva2VuX2xlbmd0aCIsIm1lc3NhZ2UiLCJiYWRfZmxvYXQiLCJiYWRfaGV4X2Zsb2F0IiwiY2hhcmFjdGVyX21pc21hdGNoIiwiY2kiLCJjaGVja190aGlzX2NoYXIiLCJjaGVja19jaGFyIiwidG9rZW5fY2hhciIsInRva2VuX2Jvb2wiLCJpbnRlZ2VyX2NvbnZlcnNpb25fb2ZfY2hhciIsInRva2VuX2ludF9saXRlcmFsIiwidG9rZW5fZmxvYXQiLCJzY2FuX2RlY2ltYWxfZGlnaXRfc3RhciIsInNjYW5fdW5zaWduZWRfZGVjaW1hbF9pbnQiLCJzY2FuX2RpZ2l0X3BsdXMiLCJiYXNpcyIsImRpZ2l0cCIsIndpZHRoJDMiLCJpc19iaW5hcnlfZGlnaXQiLCJzY2FuX2JpbmFyeV9pbnQiLCJpc19vY3RhbF9kaWdpdCIsInNjYW5fb2N0YWxfaW50IiwiaXNfaGV4YV9kaWdpdCIsInNjYW5faGV4YWRlY2ltYWxfaW50Iiwic2Nhbl9zaWduIiwic2Nhbl9vcHRpb25hbGx5X3NpZ25lZF9kZWNpbWFsIiwic2Nhbl9pbnRfY29udmVyc2lvbiIsInNjYW5fZnJhY3Rpb25hbF9wYXJ0Iiwic2Nhbl9leHBvbmVudF9wYXJ0Iiwic2Nhbl9mbG9hdCIsInByZWNpc2lvbiIsInByZWNpc2lvbiQwIiwiY2hlY2tfY2FzZV9pbnNlbnNpdGl2ZV9zdHJpbmciLCJzY2FuX2hleF9mbG9hdCIsIndpZHRoJDQiLCJ3aWR0aCQ1Iiwid2lkdGgkNiIsIndpZHRoJDEwIiwid2lkdGgkNyIsIndpZHRoJDgiLCJ3aWR0aCQ5Iiwic2Nhbl9jYW1sX2Zsb2F0X3Jlc3QiLCJ3aWR0aF9wcmVjaXNpb24iLCJmcmFjX3dpZHRoIiwic2Nhbl9jYW1sX2Zsb2F0Iiwic2Nhbl9zdHJpbmciLCJzdHAiLCJzY2FuX2NoYXIiLCJoZXhhZGVjaW1hbF92YWx1ZV9vZl9jaGFyIiwiY2hlY2tfbmV4dF9jaGFyIiwiY2hlY2tfbmV4dF9jaGFyX2Zvcl9jaGFyIiwiY2hlY2tfbmV4dF9jaGFyX2Zvcl9zdHJpbmciLCJzY2FuX2JhY2tzbGFzaF9jaGFyIiwiYzAiLCJnZXRfZGlnaXQiLCJnZXRfZGlnaXQkMCIsImMxJDAiLCJjMiQwIiwic2Nhbl9jYW1sX2NoYXIiLCJmaW5kX3N0b3AiLCJzY2FuX2NhbWxfc3RyaW5nIiwiZmluZF9zdG9wJDAiLCJza2lwX3NwYWNlcyIsInNjYW5fY2hhcnNfaW5fY2hhcl9zZXQiLCJzY2FuX2luZGljIiwic2Nhbl9jaGFycyIsInNjYW5mX2JhZF9pbnB1dCIsImdldF9jb3VudGVyIiwid2lkdGhfb2ZfcGFkX29wdCIsInN0b3BwZXJfb2ZfZm9ybWF0dGluZ19saXQiLCJmbXRpbmciLCJ0YWtlX2Zvcm1hdF9yZWFkZXJzJDAiLCJ0YWtlX2ZtdHR5X2Zvcm1hdF9yZWFkZXJzJDAiLCJyZWFkZXIiLCJuZXdfayIsInJlYWRlcnNfcmVzdCIsInRha2VfZm9ybWF0X3JlYWRlcnMiLCJmbXQkMjMiLCJmbXQkMjQiLCJmbXQkMjUiLCJ0YWtlX2ZtdHR5X2Zvcm1hdF9yZWFkZXJzIiwibWFrZV9zY2FuZiIsInJlYWRlcnMiLCJzY2FuJDAiLCJzdHJfcmVzdCIsInBhZF9wcmVjX3NjYW5mIiwic2NhbiQxIiwic2NhbiQyIiwic2NhbiIsInNjYW4kMyIsInNjYW4kNCIsImNvbnYkMCIsInNjYW4kNSIsImNvbnYkMSIsInNjYW4kNiIsImNvbnYkMiIsInNjYW4kNyIsInNjYW4kOCIsImZtdGluZ19saXQkMCIsInN0cCQwIiwicyQyIiwic3RyX3Jlc3QkMCIsInJlc3QkMjYiLCJhcmdfcmVzdCIsImtzY2FuZiIsImVmIiwiYXBwbHkiLCJhcmdzJDAiLCJleGMiLCJic2NhbmYiLCJrc3NjYW5mIiwic3NjYW5mIiwic2NhbmYiLCJic2NhbmZfZm9ybWF0IiwiZm9ybWF0Iiwic3NjYW5mX2Zvcm1hdCIsImZvcm1hdF9mcm9tX3N0cmluZyIsInVuZXNjYXBlZCIsImtmc2NhbmYiLCJmc2NhbmYiLCJyZWdpc3RlciIsInJlZ2lzdGVyX2V4Y2VwdGlvbiIsIm8kMCIsInBhcmFtcyQwIiwiaW5pdGlhbF9vYmplY3Rfc2l6ZSIsImR1bW15X2l0ZW0iLCJ0YWciLCJjb21wYXJlJDEzIiwiY29tcGFyZSQxNCIsImNvbXBhcmUkMTUiLCJkdW1teV90YWJsZSIsInRhYmxlX2NvdW50IiwiZHVtbXlfbWV0IiwiZml0X3NpemUiLCJuZXdfdGFibGUiLCJwdWJfbGFiZWxzIiwibWV0aG9kcyIsInJlc2l6ZSQxIiwiYXJyYXkiLCJuZXdfc2l6ZSIsIm9sZF9zaXplIiwibmV3X2J1Y2siLCJtZXRob2RfY291bnQiLCJpbnN0X3Zhcl9jb3VudCIsIm5ld19tZXRob2QiLCJ0YWJsZSIsImdldF9tZXRob2RfbGFiZWwiLCJsYWJlbCIsImdldF9tZXRob2RfbGFiZWxzIiwibmFtZXMiLCJzZXRfbWV0aG9kIiwiZWxlbWVudCIsImdldF9tZXRob2QiLCJ0b19saXN0JDMiLCJhcnIiLCJuYXJyb3ciLCJ2YXJzIiwidmlydF9tZXRocyIsImNvbmNyX21ldGhzIiwidmFycyQwIiwidmlydF9tZXRocyQwIiwiY29uY3JfbWV0aHMkMCIsInZpcnRfbWV0aF9sYWJzIiwiY29uY3JfbWV0aF9sYWJzIiwibGFiIiwidHZhcnMiLCJieV9uYW1lIiwiYnlfbGFiZWwiLCJtZXQiLCJobSIsIndpZGVuIiwic2F2ZWRfdmFycyIsInNhdmVkX2hpZGRlbl9tZXRocyIsIm5ld19zbG90IiwibmV3X3ZhcmlhYmxlIiwidG9fYXJyYXkiLCJuZXdfbWV0aG9kc192YXJpYWJsZXMiLCJtZXRocyIsInZhbHMiLCJtZXRocyQwIiwibm1ldGhzIiwibnZhbHMiLCJnZXRfdmFyaWFibGUiLCJnZXRfdmFyaWFibGVzIiwiYWRkX2luaXRpYWxpemVyIiwiY3JlYXRlX3RhYmxlIiwicHVibGljX21ldGhvZHMiLCJ0YWdzIiwiaW5pdF9jbGFzcyIsImluaGVyaXRzIiwiY2xhIiwic3VwZXIkMCIsIm5tIiwibWFrZV9jbGFzcyIsInB1Yl9tZXRocyIsImNsYXNzX2luaXQiLCJlbnZfaW5pdCIsIm1ha2VfY2xhc3Nfc3RvcmUiLCJpbml0X3RhYmxlIiwiZHVtbXlfY2xhc3MiLCJsb2MiLCJ1bmRlZiIsImNyZWF0ZV9vYmplY3QiLCJjcmVhdGVfb2JqZWN0X29wdCIsIm9ial8wIiwiaXRlcl9mIiwicnVuX2luaXRpYWxpemVycyIsImluaXRzIiwicnVuX2luaXRpYWxpemVyc19vcHQiLCJjcmVhdGVfb2JqZWN0X2FuZF9ydW5faW5pdGlhbGkiLCJnZXRfZGF0YSQwIiwiYnVpbGRfcGF0aCIsImtleXMiLCJsb29rdXBfdGFibGVzIiwicm9vdCIsInRhYmxlcyQyIiwidGFibGVzJDAiLCJ0YWJsZXMkMSIsIm5ld19jYWNoZSIsInNldF9tZXRob2RzIiwiY2xvIiwiY2xvJDAiLCJuJDIiLCJuJDMiLCJuJDQiLCJuJDUiLCJuJDYiLCJ4JDMiLCJuJDciLCJ4JDQiLCJuJDgiLCJuJDkiLCJ4JDUiLCJmJDgiLCJlJDIiLCJuJDEwIiwieCQ2IiwiZiQ5IiwibiQxMSIsIngkNyIsIm4kMTIiLCJ4JDgiLCJuJDEzIiwibiQxNCIsImUkMyIsIm4kMTUiLCJtJDIiLCJ4JDkiLCJtJDMiLCJuJDE2IiwibSQ0IiwiZSQ0IiwibiQxNyIsIm0kNSIsIm4kMTgiLCJzdGF0cyQwIiwiaW5pdF9tb2RfYmxvY2siLCJjb21wcyQwIiwibW9kdSIsInNoYXBlIiwiZm4kMCIsImNvbXBzIiwiaW5pdF9tb2QiLCJ1cGRhdGVfbW9kX2Jsb2NrIiwiY2wiLCJ1cGRhdGVfbW9kIiwiaW5pdGlhbF9idWZmZXIiLCJidWZmZXIiLCJidWZwb3MiLCJyZXNldF9idWZmZXIiLCJzdG9yZSIsIm5ld2J1ZmZlciIsImdldF9zdHJpbmciLCJtYWtlX2xleGVyIiwia2V5d29yZHMiLCJrd2RfdGFibGUiLCJpZGVudF9vcl9rZXl3b3JkIiwia2V5d29yZF9vcl9lcnJvciIsImNvbW1lbnQiLCJlc2NhcGUiLCJlbmRfZXhwb25lbnRfcGFydCIsImV4cG9uZW50X3BhcnQiLCJudW1iZXIiLCJpZGVudDIiLCJuZWdfbnVtYmVyIiwibmV4dF90b2tlbiQwIiwibWF5YmVfY29tbWVudCIsIm5leHRfdG9rZW4iLCJoa2V5IiwiY2xlYW4iLCJpbnNlcnRfYnVja2V0IiwiY29udGFpbmVyIiwicmVtb3ZlX2J1Y2tldCIsImhrIiwicmVwbGFjZV9idWNrZXQiLCJuZXdfZCIsImJ1Y2tldF9sZW5ndGhfYWxpdmUiLCJzdGF0c19hbGl2ZSIsImNyZWF0ZSQ1IiwiZ2V0X2tleSQwIiwiZ2V0X2tleV9jb3B5JDAiLCJzZXRfa2V5JDAiLCJ1bnNldF9rZXkkMCIsImNoZWNrX2tleSQwIiwiYmxpdF9rZXkkMCIsImdldF9kYXRhJDEiLCJnZXRfZGF0YV9jb3B5Iiwic2V0X2RhdGEiLCJ1bnNldF9kYXRhIiwiY2hlY2tfZGF0YSIsImJsaXRfZGF0YSIsInNldF9rZXlfZGF0YSIsImNyZWF0ZSQ2IiwiZ2V0X2tleTEiLCJnZXRfa2V5MV9jb3B5Iiwic2V0X2tleTEiLCJ1bnNldF9rZXkxIiwiY2hlY2tfa2V5MSIsImdldF9rZXkyIiwiZ2V0X2tleTJfY29weSIsInNldF9rZXkyIiwidW5zZXRfa2V5MiIsImNoZWNrX2tleTIiLCJibGl0X2tleTEiLCJibGl0X2tleTIiLCJibGl0X2tleTEyIiwiZ2V0X2RhdGEkMiIsImdldF9kYXRhX2NvcHkkMCIsInNldF9kYXRhJDAiLCJ1bnNldF9kYXRhJDAiLCJjaGVja19kYXRhJDAiLCJibGl0X2RhdGEkMCIsImsyJDAiLCJrMSQwIiwiY3JlYXRlJDciLCJsZW5ndGgkNiIsImdldF9rZXkkMSIsImdldF9rZXlfY29weSQxIiwic2V0X2tleSQxIiwidW5zZXRfa2V5JDEiLCJjaGVja19rZXkkMSIsImJsaXRfa2V5JDEiLCJnZXRfZGF0YSQzIiwiZ2V0X2RhdGFfY29weSQxIiwic2V0X2RhdGEkMSIsInVuc2V0X2RhdGEkMSIsImNoZWNrX2RhdGEkMSIsImJsaXRfZGF0YSQxIiwia2kiLCJrMCIsImdlbmVyaWNfYmFzZW5hbWUiLCJpc19kaXJfc2VwIiwiZ2VuZXJpY19kaXJuYW1lIiwiaXNfcmVsYXRpdmUiLCJpc19pbXBsaWNpdCIsImNoZWNrX3N1ZmZpeCIsInN1ZmYiLCJjaG9wX3N1ZmZpeF9vcHQiLCJsZW5fZiIsInF1b3RlIiwicXVvdGVfY29tbWFuZCIsImJhc2VuYW1lIiwiZGlybmFtZSIsImlzX2Rpcl9zZXAkMCIsImlzX3JlbGF0aXZlJDAiLCJpc19pbXBsaWNpdCQwIiwiY2hlY2tfc3VmZml4JDAiLCJjaG9wX3N1ZmZpeF9vcHQkMCIsInRlbXBfZGlyX25hbWUiLCJxdW90ZSQwIiwiYWRkX2JzIiwibG9vcCQwIiwibG9vcF9icyIsInF1b3RlX2NtZF9maWxlbmFtZSIsInF1b3RlX2NvbW1hbmQkMCIsImRyaXZlX2FuZF9wYXRoIiwiZGlybmFtZSQwIiwicGF0aCIsImRyaXZlIiwiZGlyIiwiYmFzZW5hbWUkMCIsImJhc2VuYW1lJDEiLCJkaXJuYW1lJDEiLCJudWxsJDMiLCJjdXJyZW50X2Rpcl9uYW1lJDIiLCJwYXJlbnRfZGlyX25hbWUkMiIsImRpcl9zZXAkMiIsImlzX2Rpcl9zZXAkMSIsImlzX3JlbGF0aXZlJDEiLCJpc19pbXBsaWNpdCQxIiwiY2hlY2tfc3VmZml4JDEiLCJjaG9wX3N1ZmZpeF9vcHQkMSIsInRlbXBfZGlyX25hbWUkMCIsInF1b3RlJDEiLCJxdW90ZV9jb21tYW5kJDEiLCJiYXNlbmFtZSQyIiwiZGlybmFtZSQyIiwiY29uY2F0JDQiLCJjaG9wX3N1ZmZpeCIsImV4dGVuc2lvbl9sZW4iLCJleHRlbnNpb24iLCJjaG9wX2V4dGVuc2lvbiIsInJlbW92ZV9leHRlbnNpb24iLCJwcm5nJDAiLCJ0ZW1wX2ZpbGVfbmFtZSIsInRlbXBfZGlyIiwicm5kIiwiY3VycmVudF90ZW1wX2Rpcl9uYW1lIiwic2V0X3RlbXBfZGlyX25hbWUiLCJnZXRfdGVtcF9kaXJfbmFtZSIsInRlbXBfZmlsZSIsInRyeV9uYW1lIiwiY291bnRlciQxIiwib3Blbl90ZW1wX2ZpbGUiLCJzdGgkMCIsInBlcm1zIiwic3RoJDEiLCJhZGQkMSIsInN1YiQ0IiwibmVnIiwiY29uaiIsIm11bCIsImRpdiIsImludiIsIm5vcm0yIiwibm9ybSIsInEkMCIsInBvbGFyIiwic3FydCIsInckMCIsImV4cCIsImxvZyIsInBvdyIsImZsb2F0MzIiLCJmbG9hdDY0IiwiaW50OF9zaWduZWQiLCJpbnQ4X3Vuc2lnbmVkIiwiaW50MTZfc2lnbmVkIiwiaW50MTZfdW5zaWduZWQiLCJpbnQzMiQxIiwiaW50NjQkMSIsImludCQyIiwibmF0aXZlaW50JDEiLCJjb21wbGV4MzIiLCJjb21wbGV4NjQiLCJraW5kX3NpemVfaW5fYnl0ZXMiLCJjX2xheW91dCIsImZvcnRyYW5fbGF5b3V0IiwiY2xvb3AiLCJpZHgiLCJjb2wiLCJmbG9vcCIsImluaXQkNSIsImxheW91dCIsImRpbXMiLCJkbGVuIiwic2l6ZV9pbl9ieXRlcyIsImNyZWF0ZSQ4IiwiZ2V0JDIiLCJzZXQkMSIsInNpemVfaW5fYnl0ZXMkMCIsIm9mX3ZhbHVlIiwiY3JlYXRlJDkiLCJkaW0iLCJzaXplX2luX2J5dGVzJDEiLCJzbGljZSIsImluaXQkNiIsIm9mX2FycmF5IiwiYmEiLCJjcmVhdGUkMTAiLCJkaW0xIiwiZGltMiIsInNpemVfaW5fYnl0ZXMkMiIsInNsaWNlX2xlZnQiLCJzbGljZV9yaWdodCIsImluaXQkNyIsIm9mX2FycmF5JDAiLCJyb3ciLCJjcmVhdGUkMTEiLCJkaW0zIiwic2l6ZV9pbl9ieXRlcyQzIiwic2xpY2VfbGVmdF8xIiwic2xpY2VfcmlnaHRfMSIsInNsaWNlX2xlZnRfMiIsInNsaWNlX3JpZ2h0XzIiLCJpbml0JDgiLCJvZl9hcnJheSQxIiwiYXJyYXkwX29mX2dlbmFycmF5IiwiYXJyYXkxX29mX2dlbmFycmF5IiwiYXJyYXkyX29mX2dlbmFycmF5IiwiYXJyYXkzX29mX2dlbmFycmF5IiwicmVzaGFwZV8wIiwicmVzaGFwZV8xIiwicmVzaGFwZV8yIiwicmVzaGFwZV8zIiwidGFyaWYiLCJkZXN0aW5hdGFpcmVzIiwicGllY2VzIiwiZm91cm5pdHVyZXMiLCJ0YXJpZiQwIiwiZGVzdGluYXRhaXJlcyQwIiwicGllY2VzJDAiLCJmb3Vybml0dXJlcyQwIiwic2hvcnRfc3RyaW5nX29mX3BpZWNlIiwibG9uZ19zdHJpbmdfb2ZfcGllY2UiLCJzaG9ydF9zdHJpbmdfb2ZfcGllY2UkMCIsImxvbmdfc3RyaW5nX29mX3BpZWNlJDAiLCJqb29fZ2xvYmFsX29iamVjdCIsIm51bGwiLCJ1bmRlZmluZWQiLCJleG4iLCJldmVudCIsInNldF9zdHJpbmdfaW5wdXRfYnlfaWQiLCJubSIsInYiLCJpbnAiLCJyZWFkX3N0cmluZ19pbnB1dF9ieV9pZCIsInplcm9faW50X2lucHV0X2J5X2lkIiwicmVhZF9pbnRfaW5wdXRfYnlfaWQiLCJzZXRfdGRfYnlfaWQiLCJ0ZCIsImZpZWxkX2lkX2J5X2ZvdXJuaXR1cmUiLCJmIiwicCIsImZpZWxkX2lkX2FuZF9waWVjZV9ieV9mb3Vybml0dSIsImFsbF9uYW1lcyIsImVtYWlsX2JvZHkiLCJiIiwic2hvcnQkMCIsImZpZWxkX2lkIiwiZGV0YWlsIiwicyIsInEiLCJkZXNjciIsInRvdGFsIiwicmVzdW1lX2JvZHkiLCJ1cGRhdGVfbXNnIiwiYSIsInJlc3VtZSIsImNvbXB1dGUiLCJxdGUiLCJyZXNldF9mb3JtIiwiZG9pdCJdLCJzb3VyY2VzIjpbIi9idWlsdGluLytpbnQ2NC5qcyIsIi9idWlsdGluLyttbEJ5dGVzLmpzIiwiL2J1aWx0aW4vK2ZhaWwuanMiLCIvYnVpbHRpbi8rc3RkbGliLmpzIiwiL2J1aWx0aW4vK2Zvcm1hdC5qcyIsIi9idWlsdGluLytpZWVlXzc1NC5qcyIsIi9idWlsdGluLytmcy5qcyIsIi9idWlsdGluLyt1bml4LmpzIiwiL2J1aWx0aW4vK3N5cy5qcyIsIi9idWlsdGluLytmc19mYWtlLmpzIiwiL2J1aWx0aW4vK2ZzX25vZGUuanMiLCIvYnVpbHRpbi8rbmF0LmpzIiwiL2J1aWx0aW4vK2dyYXBoaWNzLmpzIiwiL2J1aWx0aW4vK21hcnNoYWwuanMiLCIvYnVpbHRpbi8raW8uanMiLCIvYnVpbHRpbi8rZ2MuanMiLCIvYnVpbHRpbi8rYmlnYXJyYXkuanMiLCIvYnVpbHRpbi8ranNsaWIuanMiLCIvYnVpbHRpbi8rcGFyc2luZy5qcyIsIi9idWlsdGluLytqc2xpYl9qc19vZl9vY2FtbC5qcyIsIi9idWlsdGluLytpbnRzLmpzIiwiL2J1aWx0aW4vK2hhc2guanMiLCIvYnVpbHRpbi8rY29tcGFyZS5qcyIsIi9idWlsdGluLytvYmouanMiLCIvYnVpbHRpbi8rYmlnc3RyaW5nLmpzIiwiL2J1aWx0aW4vK2JhY2t0cmFjZS5qcyIsIi9idWlsdGluLytsZXhpbmcuanMiLCIvYnVpbHRpbi8rYXJyYXkuanMiLCIvYnVpbHRpbi8rd2Vhay5qcyIsIi9idWlsdGluLyttZDUuanMiLCIvYnVpbHRpbi8rc3RyLmpzIiwiL2J1aWx0aW4vK2JpZ3N0cmluZy1jc3RydWN0LmpzIiwiL2hvbWUvbWF0dC8ub3BhbS80LjEzLjEvbGliL29jYW1sL3VjaGFyLm1sIiwiL2hvbWUvbWF0dC8ub3BhbS80LjEzLjEvbGliL29jYW1sL2ludDY0Lm1sIiwiL2hvbWUvbWF0dC8ub3BhbS80LjEzLjEvbGliL29jYW1sL2xleGluZy5tbCIsIi9ob21lL21hdHQvLm9wYW0vNC4xMy4xL2xpYi9vY2FtbC9jYW1saW50ZXJuYWxGb3JtYXQubWwiLCIvaG9tZS9tYXR0Ly5vcGFtLzQuMTMuMS9saWIvb2NhbWwvcHJpbnRleGMubWwiLCIvaG9tZS9tYXR0Ly5vcGFtLzQuMTMuMS9saWIvb2NhbWwvZmlsZW5hbWUubWwiLCIvaG9tZS9tYXR0Ly5vcGFtLzQuMTMuMS9saWIvb2NhbWwvY29tcGxleC5tbCIsIi9ob21lL21hdHQvLm9wYW0vNC4xMy4xL2xpYi9vY2FtbC9jYW1saW50ZXJuYWxGb3JtYXRCYXNpY3MubWwiLCIvaG9tZS9tYXR0Ly5vcGFtLzQuMTMuMS9saWIvb2NhbWwvY2FtbGludGVybmFsQXRvbWljLm1sIiwiL2hvbWUvbWF0dC8ub3BhbS80LjEzLjEvbGliL29jYW1sL3N0ZGxpYi5tbCIsIi9ob21lL21hdHQvLm9wYW0vNC4xMy4xL2xpYi9vY2FtbC9wZXJ2YXNpdmVzLm1sIiwiL2hvbWUvbWF0dC8ub3BhbS80LjEzLjEvbGliL29jYW1sL2Zsb2F0Lm1sIiwiL2hvbWUvbWF0dC8ub3BhbS80LjEzLjEvbGliL29jYW1sL3JhbmRvbS5tbCIsIi9ob21lL21hdHQvLm9wYW0vNC4xMy4xL2xpYi9vY2FtbC9saXN0Lm1sIiwiL2hvbWUvbWF0dC8ub3BhbS80LjEzLjEvbGliL29jYW1sL3NlcS5tbCIsIi9ob21lL21hdHQvLm9wYW0vNC4xMy4xL2xpYi9vY2FtbC9vcHRpb24ubWwiLCIvaG9tZS9tYXR0Ly5vcGFtLzQuMTMuMS9saWIvb2NhbWwvZWl0aGVyLm1sIiwiL2hvbWUvbWF0dC8ub3BhbS80LjEzLjEvbGliL29jYW1sL3Jlc3VsdC5tbCIsIi9ob21lL21hdHQvLm9wYW0vNC4xMy4xL2xpYi9vY2FtbC9ib29sLm1sIiwiL2hvbWUvbWF0dC8ub3BhbS80LjEzLjEvbGliL29jYW1sL2NoYXIubWwiLCIvaG9tZS9tYXR0Ly5vcGFtLzQuMTMuMS9saWIvb2NhbWwvbmF0aXZlaW50Lm1sIiwiL2hvbWUvbWF0dC8ub3BhbS80LjEzLjEvbGliL29jYW1sL2ludC5tbCIsIi9ob21lL21hdHQvLm9wYW0vNC4xMy4xL2xpYi9vY2FtbC9ieXRlcy5tbCIsIi9ob21lL21hdHQvLm9wYW0vNC4xMy4xL2xpYi9vY2FtbC9zdHJpbmcubWwiLCIvaG9tZS9tYXR0Ly5vcGFtLzQuMTMuMS9saWIvb2NhbWwvdW5pdC5tbCIsIi9ob21lL21hdHQvLm9wYW0vNC4xMy4xL2xpYi9vY2FtbC9tYXJzaGFsLm1sIiwiL2hvbWUvbWF0dC8ub3BhbS80LjEzLjEvbGliL29jYW1sL29iai5tbCIsIi9ob21lL21hdHQvLm9wYW0vNC4xMy4xL2xpYi9vY2FtbC9hcnJheS5tbCIsIi9ob21lL21hdHQvLm9wYW0vNC4xMy4xL2xpYi9vY2FtbC9pbnQzMi5tbCIsIi9ob21lL21hdHQvLm9wYW0vNC4xMy4xL2xpYi9vY2FtbC9wYXJzaW5nLm1sIiwiL2hvbWUvbWF0dC8ub3BhbS80LjEzLjEvbGliL29jYW1sL3NldC5tbCIsIi9ob21lL21hdHQvLm9wYW0vNC4xMy4xL2xpYi9vY2FtbC9tYXAubWwiLCIvaG9tZS9tYXR0Ly5vcGFtLzQuMTMuMS9saWIvb2NhbWwvc3RhY2subWwiLCIvaG9tZS9tYXR0Ly5vcGFtLzQuMTMuMS9saWIvb2NhbWwvcXVldWUubWwiLCIvaG9tZS9tYXR0Ly5vcGFtLzQuMTMuMS9saWIvb2NhbWwvY2FtbGludGVybmFsTGF6eS5tbCIsIi9ob21lL21hdHQvLm9wYW0vNC4xMy4xL2xpYi9vY2FtbC9sYXp5Lm1sIiwiL2hvbWUvbWF0dC8ub3BhbS80LjEzLjEvbGliL29jYW1sL3N0cmVhbS5tbCIsIi9ob21lL21hdHQvLm9wYW0vNC4xMy4xL2xpYi9vY2FtbC9idWZmZXIubWwiLCIvaG9tZS9tYXR0Ly5vcGFtLzQuMTMuMS9saWIvb2NhbWwvcHJpbnRmLm1sIiwiL2hvbWUvbWF0dC8ub3BhbS80LjEzLjEvbGliL29jYW1sL2FyZy5tbCIsIi9ob21lL21hdHQvLm9wYW0vNC4xMy4xL2xpYi9vY2FtbC9mdW4ubWwiLCIvaG9tZS9tYXR0Ly5vcGFtLzQuMTMuMS9saWIvb2NhbWwvZ2MubWwiLCIvaG9tZS9tYXR0Ly5vcGFtLzQuMTMuMS9saWIvb2NhbWwvZGlnZXN0Lm1sIiwiL2hvbWUvbWF0dC8ub3BhbS80LjEzLjEvbGliL29jYW1sL2hhc2h0YmwubWwiLCIvaG9tZS9tYXR0Ly5vcGFtLzQuMTMuMS9saWIvb2NhbWwvd2Vhay5tbCIsIi9ob21lL21hdHQvLm9wYW0vNC4xMy4xL2xpYi9vY2FtbC9mb3JtYXQubWwiLCIvaG9tZS9tYXR0Ly5vcGFtLzQuMTMuMS9saWIvb2NhbWwvc2NhbmYubWwiLCIvaG9tZS9tYXR0Ly5vcGFtLzQuMTMuMS9saWIvb2NhbWwvY2FsbGJhY2subWwiLCIvaG9tZS9tYXR0Ly5vcGFtLzQuMTMuMS9saWIvb2NhbWwvY2FtbGludGVybmFsT08ubWwiLCIvaG9tZS9tYXR0Ly5vcGFtLzQuMTMuMS9saWIvb2NhbWwvY2FtbGludGVybmFsTW9kLm1sIiwiL2hvbWUvbWF0dC8ub3BhbS80LjEzLjEvbGliL29jYW1sL2dlbmxleC5tbCIsIi9ob21lL21hdHQvLm9wYW0vNC4xMy4xL2xpYi9vY2FtbC9lcGhlbWVyb24ubWwiLCIvaG9tZS9tYXR0Ly5vcGFtLzQuMTMuMS9saWIvb2NhbWwvYmlnYXJyYXkubWwiLCIvaG9tZS9tYXR0L3Byb2pldHMvbG9jYXRpb25fZHVidXZhbC9fYnVpbGQvZGVmYXVsdC9pbnZlbnRhaXJlX2xpbmdlL2ludmVudGFpcmVfbGluZ2VfbW9kaWZpZS5tbCIsIi9ob21lL21hdHQvcHJvamV0cy9sb2NhdGlvbl9kdWJ1dmFsL19idWlsZC9kZWZhdWx0L2ludmVudGFpcmVfbGluZ2UvaW52ZW50YWlyZV9saW5nZS5tbCIsIiIsIi9ob21lL21hdHQvcHJvamV0cy9sb2NhdGlvbl9kdWJ1dmFsL19idWlsZC9kZWZhdWx0L21lY2hhbmljL21lY2hhbmljLm1sIiwiL2hvbWUvbWF0dC8ub3BhbS80LjEzLjEvbGliL29jYW1sL3N0ZF9leGl0Lm1sIl0sIm1hcHBpbmdzIjoiOzs7O0lBME9BLFNBQVNBLG1CQUFtQkMsR0FBSyxTQUFRLFVBQVk7SUN6THJELFNBQVNDLGdCQUFnQkMsRUFBR0M7TUFDMUIsR0FBR0QsT0FBUTtNQUNYLEdBQUlDLFNBQVUsT0FBUSxTQUFTRDtNQUMvQixJQUFNLEtBQVE7TUFDZDtPQUFRLENBQ04sR0FBSUEsTUFBT0UsS0FBS0Q7UUFDaEJEO1FBQ0EsR0FBSUEsT0FBUSxPQUFPRTtRQUNuQkQsS0FBS0E7UUFDTEU7UUFDQSxHQUFJQSxPQUFRLGFBTWhCO0lEN0NBLElBQUlDLGtCQUFvQjtJRUF4QixTQUFTRSxvQkFBcUJDLEtBQU8sTUFBTUEsR0FBSztJQzJDaEQsSUFBSUM7SURMSixTQUFTQztNQUNQLG9CQUFvQkQsa0NBQ3RCO0lGcENBLFNBQVNFLFFBQVNDLEdBQUdDLEdBQUdDO01BQ3RCQyxVQUFVSCxjQUNWRyxVQUFVRixjQUNWRSxVQUFVRCxXQUNaO0lBQ0FIO0lBQ0FBOztlQUNFLFdB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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7VTs7Ozs7OztJdUJ0VkQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztLQ2tCS0M7S0FDQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0tDd0JBQztLQUNBQztLQUNBQztLQUlBQztLQUNBQzs7OztLQ3pCQUM7S0FtSEFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztLQ285RU1DO0tBUVFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztLQ2xsRmRDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0tDc0VFQztLQUNBQztLQUNBQztLQUNBQzs7O0tBL0VZQztLQW1IWkM7S0FDQUM7S0FDQUM7S0FDQUM7OztLQW1JQUM7S0FDQUM7S0FDQUM7S0FDQUM7OztLQ3hQRkM7S0FDQUM7S0FDQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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LGtCQUFNO2FBRWRDO01BQXVCO2VBQ1g7ZUFDQTtlQUNBO2VBQ0Y7ZUFDRjtnQkFDQSw4QkFBa0I7Ozs7T0F0QjFCUDtPQUVBQztPQUlBQztPQUVBSTtPQVFBQztPQWVBSjs7VUZoQ0w7Ozs7Ozs7SUVBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7WUNDQ0s7S0RERDtnQkNDQ0M7S0RERCxJQ0NDQztJREREOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs0QkNDWUMsS0FBTyxNQUFNQSxHQUF2Qjs7MEJEREY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztnQkNDQ0MsTURERDs7Ozs7Ozs7Ozt5QkNDQ0EsTURERDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUNBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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OztPQUFzRTthQUZ0RUM7Z0JBTUY7Z0JBQ0E7Z0JBQ0E7Z0JBQzJDO2tCQUE5QiwyQkExT2J6QixzQkFtQ0FRO2dCQXVNMkM7ZUFUekNpQixJQVVVO0lBR2QsMENBaENFSDtJQWlDRiw2Q0FmRUU7SUFlRjs7O09BL1BFN0I7T0FRQUk7T0FRQUM7T0FRQUM7T0FRQUM7T0FRQUU7T0FLQUc7T0FNQUM7T0FHQUM7T0F3Q0FTO09BMEdBQztPQXNCQUc7T0FrQkFFO0lBZUY7VURsUUg7Ozs7Ozs7SUNBQTs7OztJQ2tCUzs7O1VEbEJUIiwic291cmNlc0NvbnRlbnQiOlsiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwIErDqXLDtG1lIFZvdWlsbG9uXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfb2Zmc2V0XG52YXIgY2FtbF9pbnQ2NF9vZmZzZXQgPSBNYXRoLnBvdygyLCAtMjQpO1xuXG4vL1Byb3ZpZGVzOiBNbEludDY0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mZnNldCwgY2FtbF9yYWlzZV96ZXJvX2RpdmlkZVxuZnVuY3Rpb24gTWxJbnQ2NCAobG8sbWksaGkpIHtcbiAgdGhpcy5sbyA9IGxvICYgMHhmZmZmZmY7XG4gIHRoaXMubWkgPSBtaSAmIDB4ZmZmZmZmO1xuICB0aGlzLmhpID0gaGkgJiAweGZmZmY7XG59XG5NbEludDY0LnByb3RvdHlwZS5jYW1sX2N1c3RvbSA9IFwiX2pcIlxuTWxJbnQ2NC5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIG5ldyBNbEludDY0KHRoaXMubG8sdGhpcy5taSx0aGlzLmhpKTtcbn1cblxuTWxJbnQ2NC5wcm90b3R5cGUudWNvbXBhcmUgPSBmdW5jdGlvbiAoeCkge1xuICBpZiAodGhpcy5oaSA+IHguaGkpIHJldHVybiAxO1xuICBpZiAodGhpcy5oaSA8IHguaGkpIHJldHVybiAtMTtcbiAgaWYgKHRoaXMubWkgPiB4Lm1pKSByZXR1cm4gMTtcbiAgaWYgKHRoaXMubWkgPCB4Lm1pKSByZXR1cm4gLTE7XG4gIGlmICh0aGlzLmxvID4geC5sbykgcmV0dXJuIDE7XG4gIGlmICh0aGlzLmxvIDwgeC5sbykgcmV0dXJuIC0xO1xuICByZXR1cm4gMDtcbn1cbk1sSW50NjQucHJvdG90eXBlLmNvbXBhcmUgPSBmdW5jdGlvbiAoeCkge1xuICB2YXIgaGkgPSB0aGlzLmhpIDw8IDE2O1xuICB2YXIgeGhpID0geC5oaSA8PCAxNjtcbiAgaWYgKGhpID4geGhpKSByZXR1cm4gMTtcbiAgaWYgKGhpIDwgeGhpKSByZXR1cm4gLTE7XG4gIGlmICh0aGlzLm1pID4geC5taSkgcmV0dXJuIDE7XG4gIGlmICh0aGlzLm1pIDwgeC5taSkgcmV0dXJuIC0xO1xuICBpZiAodGhpcy5sbyA+IHgubG8pIHJldHVybiAxO1xuICBpZiAodGhpcy5sbyA8IHgubG8pIHJldHVybiAtMTtcbiAgcmV0dXJuIDA7XG59XG5NbEludDY0LnByb3RvdHlwZS5uZWcgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBsbyA9IC0gdGhpcy5sbztcbiAgdmFyIG1pID0gLSB0aGlzLm1pICsgKGxvID4+IDI0KTtcbiAgdmFyIGhpID0gLSB0aGlzLmhpICsgKG1pID4+IDI0KTtcbiAgcmV0dXJuIG5ldyBNbEludDY0KGxvLCBtaSwgaGkpO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKHgpIHtcbiAgdmFyIGxvID0gdGhpcy5sbyArIHgubG87XG4gIHZhciBtaSA9IHRoaXMubWkgKyB4Lm1pICsgKGxvID4+IDI0KTtcbiAgdmFyIGhpID0gdGhpcy5oaSArIHguaGkgKyAobWkgPj4gMjQpO1xuICByZXR1cm4gbmV3IE1sSW50NjQobG8sIG1pLCBoaSk7XG59XG5NbEludDY0LnByb3RvdHlwZS5zdWIgPSBmdW5jdGlvbiAoeCkge1xuICB2YXIgbG8gPSB0aGlzLmxvIC0geC5sbztcbiAgdmFyIG1pID0gdGhpcy5taSAtIHgubWkgKyAobG8gPj4gMjQpO1xuICB2YXIgaGkgPSB0aGlzLmhpIC0geC5oaSArIChtaSA+PiAyNCk7XG4gIHJldHVybiBuZXcgTWxJbnQ2NChsbywgbWksIGhpKTtcbn1cbk1sSW50NjQucHJvdG90eXBlLm11bCA9IGZ1bmN0aW9uICh4KSB7XG4gIHZhciBsbyA9IHRoaXMubG8gKiB4LmxvO1xuICB2YXIgbWkgPSAoKGxvICogY2FtbF9pbnQ2NF9vZmZzZXQpIHwgMCkgKyB0aGlzLm1pICogeC5sbyArIHRoaXMubG8gKiB4Lm1pO1xuICB2YXIgaGkgPSAoKG1pICogY2FtbF9pbnQ2NF9vZmZzZXQpIHwgMCkgKyB0aGlzLmhpICogeC5sbyArIHRoaXMubWkgKiB4Lm1pICsgdGhpcy5sbyAqIHguaGk7XG4gIHJldHVybiBuZXcgTWxJbnQ2NChsbywgbWksIGhpKTtcbn1cbk1sSW50NjQucHJvdG90eXBlLmlzWmVybyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICh0aGlzLmxvfHRoaXMubWl8dGhpcy5oaSkgPT0gMDtcbn1cbk1sSW50NjQucHJvdG90eXBlLmlzTmVnID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gKHRoaXMuaGkgPDwgMTYpIDwgMDtcbn1cbk1sSW50NjQucHJvdG90eXBlLmFuZCA9IGZ1bmN0aW9uICh4KSB7XG4gIHJldHVybiBuZXcgTWxJbnQ2NCh0aGlzLmxvICYgeC5sbywgdGhpcy5taSAmIHgubWksIHRoaXMuaGkgJiB4LmhpKTtcbn1cbk1sSW50NjQucHJvdG90eXBlLm9yID0gZnVuY3Rpb24gKHgpIHtcbiAgcmV0dXJuIG5ldyBNbEludDY0KHRoaXMubG98eC5sbywgdGhpcy5taXx4Lm1pLCB0aGlzLmhpfHguaGkpO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUueG9yID0gZnVuY3Rpb24gKHgpIHtcbiAgcmV0dXJuIG5ldyBNbEludDY0KHRoaXMubG9eeC5sbywgdGhpcy5taV54Lm1pLCB0aGlzLmhpXnguaGkpO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUuc2hpZnRfbGVmdCA9IGZ1bmN0aW9uIChzKSB7XG4gIHMgPSBzICYgNjM7XG4gIGlmIChzID09IDApIHJldHVybiB0aGlzO1xuICBpZiAocyA8IDI0KSB7XG4gICAgcmV0dXJuIG5ldyBNbEludDY0ICh0aGlzLmxvIDw8IHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAodGhpcy5taSA8PCBzKSB8ICh0aGlzLmxvID4+ICgyNCAtIHMpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLmhpIDw8IHMpIHwgKHRoaXMubWkgPj4gKDI0IC0gcykpKTtcbiAgfVxuICBpZiAocyA8IDQ4KVxuICAgIHJldHVybiBuZXcgTWxJbnQ2NCAoMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG8gPDwgKHMgLSAyNCksXG4gICAgICAgICAgICAgICAgICAgICAgICAodGhpcy5taSA8PCAocyAtIDI0KSkgfCAodGhpcy5sbyA+PiAoNDggLSBzKSkpO1xuICByZXR1cm4gbmV3IE1sSW50NjQoMCwgMCwgdGhpcy5sbyA8PCAocyAtIDQ4KSlcbn1cbk1sSW50NjQucHJvdG90eXBlLnNoaWZ0X3JpZ2h0X3Vuc2lnbmVkID0gZnVuY3Rpb24gKHMpIHtcbiAgcyA9IHMgJiA2MztcbiAgaWYgKHMgPT0gMCkgcmV0dXJuIHRoaXM7XG4gIGlmIChzIDwgMjQpXG4gICAgcmV0dXJuIG5ldyBNbEludDY0IChcbiAgICAgICh0aGlzLmxvID4+IHMpIHwgKHRoaXMubWkgPDwgKDI0IC0gcykpLFxuICAgICAgKHRoaXMubWkgPj4gcykgfCAodGhpcy5oaSA8PCAoMjQgLSBzKSksXG4gICAgICAodGhpcy5oaSA+PiBzKSk7XG4gIGlmIChzIDwgNDgpXG4gICAgcmV0dXJuIG5ldyBNbEludDY0IChcbiAgICAgICh0aGlzLm1pID4+IChzIC0gMjQpKSB8ICh0aGlzLmhpIDw8ICg0OCAtIHMpKSxcbiAgICAgICh0aGlzLmhpID4+IChzIC0gMjQpKSxcbiAgICAgIDApO1xuICByZXR1cm4gbmV3IE1sSW50NjQgKHRoaXMuaGkgPj4gKHMgLSA0OCksIDAsIDApO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUuc2hpZnRfcmlnaHQgPSBmdW5jdGlvbiAocykge1xuICBzID0gcyAmIDYzO1xuICBpZiAocyA9PSAwKSByZXR1cm4gdGhpcztcbiAgdmFyIGggPSAodGhpcy5oaSA8PCAxNikgPj4gMTY7XG4gIGlmIChzIDwgMjQpXG4gICAgcmV0dXJuIG5ldyBNbEludDY0IChcbiAgICAgICh0aGlzLmxvID4+IHMpIHwgKHRoaXMubWkgPDwgKDI0IC0gcykpLFxuICAgICAgKHRoaXMubWkgPj4gcykgfCAoaCA8PCAoMjQgLSBzKSksXG4gICAgICAoKHRoaXMuaGkgPDwgMTYpID4+IHMpID4+PiAxNik7XG4gIHZhciBzaWduID0gKHRoaXMuaGkgPDwgMTYpID4+IDMxO1xuICBpZiAocyA8IDQ4KVxuICAgIHJldHVybiBuZXcgTWxJbnQ2NCAoXG4gICAgICAodGhpcy5taSA+PiAocyAtIDI0KSkgfCAodGhpcy5oaSA8PCAoNDggLSBzKSksXG4gICAgICAodGhpcy5oaSA8PCAxNikgPj4gKHMgLSAyNCkgPj4gMTYsXG4gICAgICBzaWduICYgMHhmZmZmKTtcbiAgcmV0dXJuIG5ldyBNbEludDY0ICgodGhpcy5oaSA8PCAxNikgPj4gKHMgLSAzMiksIHNpZ24sIHNpZ24pO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUubHNsMSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5oaSA9ICh0aGlzLmhpIDw8IDEpIHwgKHRoaXMubWkgPj4gMjMpO1xuICB0aGlzLm1pID0gKCh0aGlzLm1pIDw8IDEpIHwgKHRoaXMubG8gPj4gMjMpKSAmIDB4ZmZmZmZmO1xuICB0aGlzLmxvID0gKHRoaXMubG8gPDwgMSkgJiAweGZmZmZmZjtcbn1cbk1sSW50NjQucHJvdG90eXBlLmxzcjEgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMubG8gPSAoKHRoaXMubG8gPj4+IDEpIHwgKHRoaXMubWkgPDwgMjMpKSAmIDB4ZmZmZmZmO1xuICB0aGlzLm1pID0gKCh0aGlzLm1pID4+PiAxKSB8ICh0aGlzLmhpIDw8IDIzKSkgJiAweGZmZmZmZjtcbiAgdGhpcy5oaSA9IHRoaXMuaGkgPj4+IDE7XG59XG5NbEludDY0LnByb3RvdHlwZS51ZGl2bW9kID0gZnVuY3Rpb24gKHgpIHtcbiAgdmFyIG9mZnNldCA9IDA7XG4gIHZhciBtb2R1bHVzID0gdGhpcy5jb3B5KCk7XG4gIHZhciBkaXZpc29yID0geC5jb3B5KCk7XG4gIHZhciBxdW90aWVudCA9IG5ldyBNbEludDY0KDAsMCwwKTtcbiAgd2hpbGUgKG1vZHVsdXMudWNvbXBhcmUoZGl2aXNvcikgPiAwKSB7XG4gICAgb2Zmc2V0Kys7XG4gICAgZGl2aXNvci5sc2wxKCk7XG4gIH1cbiAgd2hpbGUgKG9mZnNldCA+PSAwKSB7XG4gICAgb2Zmc2V0IC0tO1xuICAgIHF1b3RpZW50LmxzbDEoKTtcbiAgICBpZiAobW9kdWx1cy51Y29tcGFyZShkaXZpc29yKSA+PSAwKSB7XG4gICAgICBxdW90aWVudC5sbyArKztcbiAgICAgIG1vZHVsdXMgPSBtb2R1bHVzLnN1YihkaXZpc29yKTtcbiAgICB9XG4gICAgZGl2aXNvci5sc3IxKCk7XG4gIH1cbiAgcmV0dXJuIHsgcXVvdGllbnQgOiBxdW90aWVudCwgbW9kdWx1cyA6IG1vZHVsdXMgfTtcbn1cbk1sSW50NjQucHJvdG90eXBlLmRpdiA9IGZ1bmN0aW9uICh5KVxue1xuICB2YXIgeCA9IHRoaXM7XG4gIGlmICh5LmlzWmVybygpKSBjYW1sX3JhaXNlX3plcm9fZGl2aWRlICgpO1xuICB2YXIgc2lnbiA9IHguaGkgXiB5LmhpO1xuICBpZiAoeC5oaSAmIDB4ODAwMCkgeCA9IHgubmVnKCk7XG4gIGlmICh5LmhpICYgMHg4MDAwKSB5ID0geS5uZWcoKTtcbiAgdmFyIHEgPSB4LnVkaXZtb2QoeSkucXVvdGllbnQ7XG4gIGlmIChzaWduICYgMHg4MDAwKSBxID0gcS5uZWcoKTtcbiAgcmV0dXJuIHE7XG59XG5NbEludDY0LnByb3RvdHlwZS5tb2QgPSBmdW5jdGlvbiAoeSlcbntcbiAgdmFyIHggPSB0aGlzO1xuICBpZiAoeS5pc1plcm8oKSkgY2FtbF9yYWlzZV96ZXJvX2RpdmlkZSAoKTtcbiAgdmFyIHNpZ24gPSB4LmhpO1xuICBpZiAoeC5oaSAmIDB4ODAwMCkgeCA9IHgubmVnKCk7XG4gIGlmICh5LmhpICYgMHg4MDAwKSB5ID0geS5uZWcoKTtcbiAgdmFyIHIgPSB4LnVkaXZtb2QoeSkubW9kdWx1cztcbiAgaWYgKHNpZ24gJiAweDgwMDApIHIgPSByLm5lZygpO1xuICByZXR1cm4gcjtcbn1cbk1sSW50NjQucHJvdG90eXBlLnRvSW50ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5sbyB8ICh0aGlzLm1pIDw8IDI0KTtcbn1cbk1sSW50NjQucHJvdG90eXBlLnRvRmxvYXQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAoKHRoaXMuaGkgPDwgMTYpICogTWF0aC5wb3coMiwgMzIpICsgdGhpcy5taSAqIE1hdGgucG93KDIsIDI0KSkgKyB0aGlzLmxvO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUudG9BcnJheSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIFt0aGlzLmhpID4+IDgsXG4gICAgICAgICAgdGhpcy5oaSAmIDB4ZmYsXG4gICAgICAgICAgdGhpcy5taSA+PiAxNixcbiAgICAgICAgICAodGhpcy5taSA+PiA4KSAmIDB4ZmYsXG4gICAgICAgICAgdGhpcy5taSAmIDB4ZmYsXG4gICAgICAgICAgdGhpcy5sbyA+PiAxNixcbiAgICAgICAgICAodGhpcy5sbyA+PiA4KSAmIDB4ZmYsXG4gICAgICAgICAgdGhpcy5sbyAmIDB4ZmZdO1xufVxuTWxJbnQ2NC5wcm90b3R5cGUubG8zMiA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXMubG8gfCAoKHRoaXMubWkgJiAweGZmKSA8PCAyNCk7XG59XG5NbEludDY0LnByb3RvdHlwZS5oaTMyID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gKCh0aGlzLm1pID4+PiA4KSAmIDB4ZmZmZikgfCAodGhpcy5oaSA8PCAxNik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfdWx0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X3VsdCh4LHkpIHsgcmV0dXJuIHgudWNvbXBhcmUoeSkgPCAwOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfY29tcGFyZSBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9jb21wYXJlKHgseSwgdG90YWwpIHsgcmV0dXJuIHguY29tcGFyZSh5KSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfbmVnIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X25lZyAoeCkgeyByZXR1cm4geC5uZWcoKSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfYWRkIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2FkZCAoeCwgeSkgeyByZXR1cm4geC5hZGQoeSkgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X3N1YiBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9zdWIgKHgsIHkpIHsgcmV0dXJuIHguc3ViKHkpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9tdWwgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2Zmc2V0XG5mdW5jdGlvbiBjYW1sX2ludDY0X211bCh4LHkpIHsgcmV0dXJuIHgubXVsKHkpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9pc196ZXJvIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2lzX3plcm8oeCkgeyByZXR1cm4gK3guaXNaZXJvKCk7IH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9pc19uZWdhdGl2ZSBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9pc19uZWdhdGl2ZSh4KSB7IHJldHVybiAreC5pc05lZygpOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfYW5kIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2FuZCAoeCwgeSkgeyByZXR1cm4geC5hbmQoeSk7IH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9vciBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9vciAoeCwgeSkgeyByZXR1cm4geC5vcih5KTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X3hvciBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF94b3IgKHgsIHkpIHsgcmV0dXJuIHgueG9yKHkpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9zaGlmdF9sZWZ0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X3NoaWZ0X2xlZnQgKHgsIHMpIHsgcmV0dXJuIHguc2hpZnRfbGVmdChzKSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfc2hpZnRfcmlnaHRfdW5zaWduZWQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfc2hpZnRfcmlnaHRfdW5zaWduZWQgKHgsIHMpIHsgcmV0dXJuIHguc2hpZnRfcmlnaHRfdW5zaWduZWQocykgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X3NoaWZ0X3JpZ2h0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X3NoaWZ0X3JpZ2h0ICh4LCBzKSB7IHJldHVybiB4LnNoaWZ0X3JpZ2h0KHMpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9kaXYgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfZGl2ICh4LCB5KSB7IHJldHVybiB4LmRpdih5KSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfbW9kIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ludDY0X21vZCAoeCwgeSkgeyByZXR1cm4geC5tb2QoeSkgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X29mX2ludDMyIGNvbnN0XG4vL1JlcXVpcmVzOiBNbEludDY0XG5mdW5jdGlvbiBjYW1sX2ludDY0X29mX2ludDMyICh4KSB7XG4gIHJldHVybiBuZXcgTWxJbnQ2NCh4ICYgMHhmZmZmZmYsICh4ID4+IDI0KSAmIDB4ZmZmZmZmLCAoeCA+PiAzMSkgJiAweGZmZmYpXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfdG9faW50MzIgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfdG9faW50MzIgKHgpIHsgcmV0dXJuIHgudG9JbnQoKSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfdG9fZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfdG9fZmxvYXQgKHgpIHsgcmV0dXJuIHgudG9GbG9hdCAoKSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfb2ZfZmxvYXQgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2Zmc2V0LCBNbEludDY0XG5mdW5jdGlvbiBjYW1sX2ludDY0X29mX2Zsb2F0ICh4KSB7XG4gIGlmICh4IDwgMCkgeCA9IE1hdGguY2VpbCh4KTtcbiAgcmV0dXJuIG5ldyBNbEludDY0KFxuICAgIHggJiAweGZmZmZmZixcbiAgICBNYXRoLmZsb29yKHggKiBjYW1sX2ludDY0X29mZnNldCkgJiAweGZmZmZmZixcbiAgICBNYXRoLmZsb29yKHggKiBjYW1sX2ludDY0X29mZnNldCAqIGNhbWxfaW50NjRfb2Zmc2V0KSAmIDB4ZmZmZik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfZm9ybWF0IGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX3BhcnNlX2Zvcm1hdCwgY2FtbF9maW5pc2hfZm9ybWF0dGluZ1xuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9pc19uZWdhdGl2ZSwgY2FtbF9pbnQ2NF9uZWdcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2ZfaW50MzIsIGNhbWxfaW50NjRfdG9faW50MzJcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfaXNfemVybywgY2FtbF9zdHJfcmVwZWF0XG5mdW5jdGlvbiBjYW1sX2ludDY0X2Zvcm1hdCAoZm10LCB4KSB7XG4gIHZhciBmID0gY2FtbF9wYXJzZV9mb3JtYXQoZm10KTtcbiAgaWYgKGYuc2lnbmVkY29udiAmJiBjYW1sX2ludDY0X2lzX25lZ2F0aXZlKHgpKSB7XG4gICAgZi5zaWduID0gLTE7IHggPSBjYW1sX2ludDY0X25lZyh4KTtcbiAgfVxuICB2YXIgYnVmZmVyID0gXCJcIjtcbiAgdmFyIHdiYXNlID0gY2FtbF9pbnQ2NF9vZl9pbnQzMihmLmJhc2UpO1xuICB2YXIgY3Z0YmwgPSBcIjAxMjM0NTY3ODlhYmNkZWZcIjtcbiAgZG8ge1xuICAgIHZhciBwID0geC51ZGl2bW9kKHdiYXNlKTtcbiAgICB4ID0gcC5xdW90aWVudDtcbiAgICBidWZmZXIgPSBjdnRibC5jaGFyQXQoY2FtbF9pbnQ2NF90b19pbnQzMihwLm1vZHVsdXMpKSArIGJ1ZmZlcjtcbiAgfSB3aGlsZSAoISBjYW1sX2ludDY0X2lzX3plcm8oeCkpO1xuICBpZiAoZi5wcmVjID49IDApIHtcbiAgICBmLmZpbGxlciA9ICcgJztcbiAgICB2YXIgbiA9IGYucHJlYyAtIGJ1ZmZlci5sZW5ndGg7XG4gICAgaWYgKG4gPiAwKSBidWZmZXIgPSBjYW1sX3N0cl9yZXBlYXQgKG4sICcwJykgKyBidWZmZXI7XG4gIH1cbiAgcmV0dXJuIGNhbWxfZmluaXNoX2Zvcm1hdHRpbmcoZiwgYnVmZmVyKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9vZl9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfcGFyc2Vfc2lnbl9hbmRfYmFzZSwgY2FtbF9mYWlsd2l0aCwgY2FtbF9wYXJzZV9kaWdpdFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZl9pbnQzMiwgY2FtbF9pbnQ2NF91bHRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfYWRkLCBjYW1sX2ludDY0X211bCwgY2FtbF9pbnQ2NF9uZWdcbi8vUmVxdWlyZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aCxjYW1sX3N0cmluZ191bnNhZmVfZ2V0LCBNbEludDY0XG5mdW5jdGlvbiBjYW1sX2ludDY0X29mX3N0cmluZyhzKSB7XG4gIHZhciByID0gY2FtbF9wYXJzZV9zaWduX2FuZF9iYXNlIChzKTtcbiAgdmFyIGkgPSByWzBdLCBzaWduID0gclsxXSwgYmFzZSA9IHJbMl07XG4gIHZhciBiYXNlNjQgPSBjYW1sX2ludDY0X29mX2ludDMyKGJhc2UpO1xuICB2YXIgdGhyZXNob2xkID1cbiAgICAgIG5ldyBNbEludDY0KDB4ZmZmZmZmLCAweGZmZmZmZmYsIDB4ZmZmZikudWRpdm1vZChiYXNlNjQpLnF1b3RpZW50O1xuICB2YXIgYyA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSk7XG4gIHZhciBkID0gY2FtbF9wYXJzZV9kaWdpdChjKTtcbiAgaWYgKGQgPCAwIHx8IGQgPj0gYmFzZSkgY2FtbF9mYWlsd2l0aChcImludF9vZl9zdHJpbmdcIik7XG4gIHZhciByZXMgPSBjYW1sX2ludDY0X29mX2ludDMyKGQpO1xuICBmb3IgKDs7KSB7XG4gICAgaSsrO1xuICAgIGMgPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsIGkpO1xuICAgIGlmIChjID09IDk1KSBjb250aW51ZTtcbiAgICBkID0gY2FtbF9wYXJzZV9kaWdpdChjKTtcbiAgICBpZiAoZCA8IDAgfHwgZCA+PSBiYXNlKSBicmVhaztcbiAgICAvKiBEZXRlY3Qgb3ZlcmZsb3cgaW4gbXVsdGlwbGljYXRpb24gYmFzZSAqIHJlcyAqL1xuICAgIGlmIChjYW1sX2ludDY0X3VsdCh0aHJlc2hvbGQsIHJlcykpIGNhbWxfZmFpbHdpdGgoXCJpbnRfb2Zfc3RyaW5nXCIpO1xuICAgIGQgPSBjYW1sX2ludDY0X29mX2ludDMyKGQpO1xuICAgIHJlcyA9IGNhbWxfaW50NjRfYWRkKGNhbWxfaW50NjRfbXVsKGJhc2U2NCwgcmVzKSwgZCk7XG4gICAgLyogRGV0ZWN0IG92ZXJmbG93IGluIGFkZGl0aW9uIChiYXNlICogcmVzKSArIGQgKi9cbiAgICBpZiAoY2FtbF9pbnQ2NF91bHQocmVzLCBkKSkgY2FtbF9mYWlsd2l0aChcImludF9vZl9zdHJpbmdcIik7XG4gIH1cbiAgaWYgKGkgIT0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpKSBjYW1sX2ZhaWx3aXRoKFwiaW50X29mX3N0cmluZ1wiKTtcbiAgaWYgKGJhc2UgPT0gMTAgJiYgY2FtbF9pbnQ2NF91bHQobmV3IE1sSW50NjQoMCwgMCwgMHg4MDAwKSwgcmVzKSlcbiAgICBjYW1sX2ZhaWx3aXRoKFwiaW50X29mX3N0cmluZ1wiKTtcbiAgaWYgKHNpZ24gPCAwKSByZXMgPSBjYW1sX2ludDY0X25lZyhyZXMpO1xuICByZXR1cm4gcmVzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2NyZWF0ZV9sb19taV9oaSBjb25zdFxuLy9SZXF1aXJlczogTWxJbnQ2NFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9jcmVhdGVfbG9fbWlfaGkobG8sIG1pLCBoaSl7XG4gIHJldHVybiBuZXcgTWxJbnQ2NChsbywgbWksIGhpKVxufVxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9jcmVhdGVfbG9faGkgY29uc3Rcbi8vUmVxdWlyZXM6IE1sSW50NjRcbmZ1bmN0aW9uIGNhbWxfaW50NjRfY3JlYXRlX2xvX2hpKGxvLCBoaSl7XG4gIHJldHVybiBuZXcgTWxJbnQ2NCAoXG4gICAgbG8gJiAweGZmZmZmZixcbiAgICAoKGxvID4+PiAyNCkgJiAweGZmKSB8ICgoaGkgJiAweGZmZmYpIDw8IDgpLFxuICAgIChoaSA+Pj4gMTYpICYgMHhmZmZmKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfbG8zMiBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9sbzMyKHYpeyByZXR1cm4gdi5sbzMyKCkgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2hpMzIgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW50NjRfaGkzMih2KXsgcmV0dXJuIHYuaGkzMigpIH1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF9vZl9ieXRlcyBjb25zdFxuLy9SZXF1aXJlczogTWxJbnQ2NFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9vZl9ieXRlcyhhKSB7XG4gIHJldHVybiBuZXcgTWxJbnQ2NChhWzddIDw8IDAgfCAoYVs2XSA8PCA4KSB8IChhWzVdIDw8IDE2KSxcbiAgICAgICAgICAgICAgICAgICAgIGFbNF0gPDwgMCB8IChhWzNdIDw8IDgpIHwgKGFbMl0gPDwgMTYpLFxuICAgICAgICAgICAgICAgICAgICAgYVsxXSA8PCAwIHwgKGFbMF0gPDwgOCkpO1xufVxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF90b19ieXRlcyBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF90b19ieXRlcyh4KSB7IHJldHVybiB4LnRvQXJyYXkoKSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfaGFzaCBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9oYXNoKHYpe1xuICByZXR1cm4gKHYubG8zMigpKSBeICh2LmhpMzIoKSlcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxMC0yMDE0IErDqXLDtG1lIFZvdWlsbG9uXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vIEFuIE9DYW1sIHN0cmluZyBpcyBhbiBvYmplY3Qgd2l0aCB0aHJlZSBmaWVsZHM6XG4vLyAtIHRhZyAndCdcbi8vIC0gbGVuZ3RoICdsJ1xuLy8gLSBjb250ZW50cyAnYydcbi8vXG4vLyBUaGUgY29udGVudHMgb2YgdGhlIHN0cmluZyBjYW4gYmUgZWl0aGVyIGEgSmF2YVNjcmlwdCBhcnJheSBvclxuLy8gYSBKYXZhU2NyaXB0IHN0cmluZy4gVGhlIGxlbmd0aCBvZiB0aGlzIHN0cmluZyBjYW4gYmUgbGVzcyB0aGFuIHRoZVxuLy8gbGVuZ3RoIG9mIHRoZSBPQ2FtbCBzdHJpbmcuIEluIHRoaXMgY2FzZSwgcmVtYWluaW5nIGJ5dGVzIGFyZVxuLy8gYXNzdW1lZCB0byBiZSB6ZXJvZXMuIEFycmF5cyBhcmUgbXV0YWJsZSBidXQgY29uc3VtZXMgbW9yZSBtZW1vcnlcbi8vIHRoYW4gc3RyaW5ncy4gQSBjb21tb24gcGF0dGVybiBpcyB0byBzdGFydCBmcm9tIGFuIGVtcHR5IHN0cmluZyBhbmRcbi8vIHByb2dyZXNzaXZlbHkgZmlsbCBpdCBmcm9tIHRoZSBzdGFydC4gUGFydGlhbCBzdHJpbmdzIG1ha2VzIGl0XG4vLyBwb3NzaWJsZSB0byBpbXBsZW1lbnQgdGhpcyBlZmZpY2llbnRseS5cbi8vXG4vLyBXaGVuIGNvbnZlcnRpbmcgdG8gYW5kIGZyb20gVVRGLTE2LCB3ZSBrZWVwIHRyYWNrIG9mIHdoZXRoZXIgdGhlXG4vLyBzdHJpbmcgaXMgY29tcG9zZWQgb25seSBvZiBBU0NJSSBjaGFyYWN0ZXJzIChpbiB3aGljaCBjYXNlLCBub1xuLy8gY29udmVyc2lvbiBuZWVkcyB0byBiZSBwZXJmb3JtZWQpIG9yIG5vdC5cbi8vXG4vLyBUaGUgc3RyaW5nIHRhZyBjYW4gdGh1cyB0YWtlIHRoZSBmb2xsb3dpbmcgdmFsdWVzOlxuLy8gICBmdWxsIHN0cmluZyAgICAgQllURSB8IFVOS05PV046ICAgICAgMFxuLy8gICAgICAgICAgICAgICAgICAgQllURSB8IEFTQ0lJOiAgICAgICAgOVxuLy8gICAgICAgICAgICAgICAgICAgQllURSB8IE5PVF9BU0NJSTogICAgOFxuLy8gICBzdHJpbmcgcHJlZml4ICAgUEFSVElBTDogICAgICAgICAgICAgMlxuLy8gICBhcnJheSAgICAgICAgICAgQVJSQVk6ICAgICAgICAgICAgICAgNFxuLy9cbi8vIE9uZSBjYW4gdXNlIGJpdCBtYXNraW5nIHRvIGRpc2NyaW1pbmF0ZSB0aGVzZSBkaWZmZXJlbnQgY2FzZXM6XG4vLyAgIGtub3duX2VuY29kaW5nKHgpID0geCY4XG4vLyAgIGlzX2FzY2lpKHgpID0gICAgICAgeCYxXG4vLyAgIGtpbmQoeCkgPSAgICAgICAgICAgeCY2XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyX3JlcGVhdFxuZnVuY3Rpb24gY2FtbF9zdHJfcmVwZWF0KG4sIHMpIHtcbiAgaWYobiA9PSAwKSByZXR1cm4gXCJcIjtcbiAgaWYgKHMucmVwZWF0KSB7cmV0dXJuIHMucmVwZWF0KG4pO30gLy8gRUNNQXNjcmlwdCA2IGFuZCBGaXJlZm94IDI0K1xuICB2YXIgciA9IFwiXCIsIGwgPSAwO1xuICBmb3IoOzspIHtcbiAgICBpZiAobiAmIDEpIHIgKz0gcztcbiAgICBuID4+PSAxO1xuICAgIGlmIChuID09IDApIHJldHVybiByO1xuICAgIHMgKz0gcztcbiAgICBsKys7XG4gICAgaWYgKGwgPT0gOSkge1xuICAgICAgcy5zbGljZSgwLDEpOyAvLyBmbGF0dGVuIHRoZSBzdHJpbmdcbiAgICAgIC8vIHRoZW4sIHRoZSBmbGF0dGVuaW5nIG9mIHRoZSB3aG9sZSBzdHJpbmcgd2lsbCBiZSBmYXN0ZXIsXG4gICAgICAvLyBhcyBpdCB3aWxsIGJlIGNvbXBvc2VkIG9mIGxhcmdlciBwaWVjZXNcbiAgICB9XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdWJhcnJheV90b19qc2J5dGVzXG4vL1dlYWtkZWZcbi8vIFByZSBFQ01BU2NyaXB0IDUsIFthcHBseV0gd291bGQgbm90IHN1cHBvcnQgYXJyYXktbGlrZSBvYmplY3QuXG4vLyBJbiBzdWNoIHNldHVwLCBUeXBlZF9hcnJheSB3b3VsZCBiZSBpbXBsZW1lbnRlZCBhcyBwb2x5ZmlsbCwgYW5kIFtmLmFwcGx5XSB3b3VsZFxuLy8gZmFpbCBoZXJlLiBNYXJrIHRoZSBwcmltaXRpdmUgYXMgV2Vha2RlZiwgc28gdGhhdCBwZW9wbGUgY2FuIG92ZXJyaWRlIGl0IGVhc2lseS5cbmZ1bmN0aW9uIGNhbWxfc3ViYXJyYXlfdG9fanNieXRlcyAoYSwgaSwgbGVuKSB7XG4gIHZhciBmID0gU3RyaW5nLmZyb21DaGFyQ29kZTtcbiAgaWYgKGkgPT0gMCAmJiBsZW4gPD0gNDA5NiAmJiBsZW4gPT0gYS5sZW5ndGgpIHJldHVybiBmLmFwcGx5IChudWxsLCBhKTtcbiAgdmFyIHMgPSBcIlwiO1xuICBmb3IgKDsgMCA8IGxlbjsgaSArPSAxMDI0LGxlbi09MTAyNClcbiAgICBzICs9IGYuYXBwbHkgKG51bGwsIGEuc2xpY2UoaSxpICsgTWF0aC5taW4obGVuLCAxMDI0KSkpO1xuICByZXR1cm4gcztcbn1cblxuLy9Qcm92aWRlczogY2FtbF91dGY4X29mX3V0ZjE2XG5mdW5jdGlvbiBjYW1sX3V0Zjhfb2ZfdXRmMTYocykge1xuICBmb3IgKHZhciBiID0gXCJcIiwgdCA9IGIsIGMsIGQsIGkgPSAwLCBsID0gcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBjID0gcy5jaGFyQ29kZUF0KGkpO1xuICAgIGlmIChjIDwgMHg4MCkge1xuICAgICAgZm9yICh2YXIgaiA9IGkgKyAxOyAoaiA8IGwpICYmIChjID0gcy5jaGFyQ29kZUF0KGopKSA8IDB4ODA7IGorKyk7XG4gICAgICBpZiAoaiAtIGkgPiA1MTIpIHsgdC5zdWJzdHIoMCwgMSk7IGIgKz0gdDsgdCA9IFwiXCI7IGIgKz0gcy5zbGljZShpLCBqKSB9XG4gICAgICBlbHNlIHQgKz0gcy5zbGljZShpLCBqKTtcbiAgICAgIGlmIChqID09IGwpIGJyZWFrO1xuICAgICAgaSA9IGo7XG4gICAgfVxuICAgIGlmIChjIDwgMHg4MDApIHtcbiAgICAgIHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgweGMwIHwgKGMgPj4gNikpO1xuICAgICAgdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4ODAgfCAoYyAmIDB4M2YpKTtcbiAgICB9IGVsc2UgaWYgKGMgPCAweGQ4MDAgfHwgYyA+PSAweGRmZmYpIHtcbiAgICAgIHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgweGUwIHwgKGMgPj4gMTIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAgfCAoKGMgPj4gNikgJiAweDNmKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwIHwgKGMgJiAweDNmKSk7XG4gICAgfSBlbHNlIGlmIChjID49IDB4ZGJmZiB8fCBpICsgMSA9PSBsIHx8XG4gICAgICAgICAgICAgICAoZCA9IHMuY2hhckNvZGVBdChpICsgMSkpIDwgMHhkYzAwIHx8IGQgPiAweGRmZmYpIHtcbiAgICAgIC8vIFVubWF0Y2hlZCBzdXJyb2dhdGUgcGFpciwgcmVwbGFjZWQgYnkgXFx1ZmZmZCAocmVwbGFjZW1lbnQgY2hhcmFjdGVyKVxuICAgICAgdCArPSBcIlxceGVmXFx4YmZcXHhiZFwiO1xuICAgIH0gZWxzZSB7XG4gICAgICBpKys7XG4gICAgICBjID0gKGMgPDwgMTApICsgZCAtIDB4MzVmZGMwMDtcbiAgICAgIHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgweGYwIHwgKGMgPj4gMTgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAgfCAoKGMgPj4gMTIpICYgMHgzZiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MCB8ICgoYyA+PiA2KSAmIDB4M2YpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAgfCAoYyAmIDB4M2YpKTtcbiAgICB9XG4gICAgaWYgKHQubGVuZ3RoID4gMTAyNCkge3Quc3Vic3RyKDAsIDEpOyBiICs9IHQ7IHQgPSBcIlwiO31cbiAgfVxuICByZXR1cm4gYit0O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3V0ZjE2X29mX3V0ZjhcbmZ1bmN0aW9uIGNhbWxfdXRmMTZfb2ZfdXRmOChzKSB7XG4gIGZvciAodmFyIGIgPSBcIlwiLCB0ID0gXCJcIiwgYywgYzEsIGMyLCB2LCBpID0gMCwgbCA9IHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgYzEgPSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgaWYgKGMxIDwgMHg4MCkge1xuICAgICAgZm9yICh2YXIgaiA9IGkgKyAxOyAoaiA8IGwpICYmIChjMSA9IHMuY2hhckNvZGVBdChqKSkgPCAweDgwOyBqKyspO1xuICAgICAgaWYgKGogLSBpID4gNTEyKSB7IHQuc3Vic3RyKDAsIDEpOyBiICs9IHQ7IHQgPSBcIlwiOyBiICs9IHMuc2xpY2UoaSwgaikgfVxuICAgICAgZWxzZSB0ICs9IHMuc2xpY2UoaSwgaik7XG4gICAgICBpZiAoaiA9PSBsKSBicmVhaztcbiAgICAgIGkgPSBqO1xuICAgIH1cbiAgICB2ID0gMTtcbiAgICBpZiAoKCsraSA8IGwpICYmICgoKGMyID0gcy5jaGFyQ29kZUF0KGkpKSAmIC02NCkgPT0gMTI4KSkge1xuICAgICAgYyA9IGMyICsgKGMxIDw8IDYpO1xuICAgICAgaWYgKGMxIDwgMHhlMCkge1xuICAgICAgICB2ID0gYyAtIDB4MzA4MDtcbiAgICAgICAgaWYgKHYgPCAweDgwKSB2ID0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHYgPSAyO1xuICAgICAgICBpZiAoKCsraSA8IGwpICYmICgoKGMyID0gcy5jaGFyQ29kZUF0KGkpKSAmIC02NCkgPT0gMTI4KSkge1xuICAgICAgICAgIGMgPSBjMiArIChjIDw8IDYpO1xuICAgICAgICAgIGlmIChjMSA8IDB4ZjApIHtcbiAgICAgICAgICAgIHYgPSBjIC0gMHhlMjA4MDtcbiAgICAgICAgICAgIGlmICgodiA8IDB4ODAwKSB8fCAoKHYgPj0gMHhkN2ZmKSAmJiAodiA8IDB4ZTAwMCkpKSB2ID0gMjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdiA9IDM7XG4gICAgICAgICAgICBpZiAoKCsraSA8IGwpICYmICgoKGMyID0gcy5jaGFyQ29kZUF0KGkpKSAmIC02NCkgPT0gMTI4KSAmJlxuICAgICAgICAgICAgICAgIChjMSA8IDB4ZjUpKSB7XG4gICAgICAgICAgICAgIHYgPSBjMiAtIDB4M2M4MjA4MCArIChjIDw8IDYpO1xuICAgICAgICAgICAgICBpZiAodiA8IDB4MTAwMDAgfHwgdiA+IDB4MTBmZmZmKSB2ID0gMztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHYgPCA0KSB7IC8vIEludmFsaWQgc2VxdWVuY2VcbiAgICAgIGkgLT0gdjtcbiAgICAgIHQgKz0gXCJcXHVmZmZkXCI7XG4gICAgfSBlbHNlIGlmICh2ID4gMHhmZmZmKVxuICAgICAgdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4ZDdjMCArICh2ID4+IDEwKSwgMHhkYzAwICsgKHYgJiAweDNGRikpXG4gICAgZWxzZVxuICAgICAgdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHYpO1xuICAgIGlmICh0Lmxlbmd0aCA+IDEwMjQpIHt0LnN1YnN0cigwLCAxKTsgYiArPSB0OyB0ID0gXCJcIjt9XG4gIH1cbiAgcmV0dXJuIGIrdDtcbn1cblxuLy9Qcm92aWRlczoganNvb19pc19hc2NpaVxuZnVuY3Rpb24ganNvb19pc19hc2NpaSAocykge1xuICAvLyBUaGUgcmVndWxhciBleHByZXNzaW9uIGdldHMgYmV0dGVyIGF0IGFyb3VuZCB0aGlzIHBvaW50IGZvciBhbGwgYnJvd3NlcnNcbiAgaWYgKHMubGVuZ3RoIDwgMjQpIHtcbiAgICAvLyBTcGlkZXJtb25rZXkgZ2V0cyBtdWNoIHNsb3dlciB3aGVuIHMubGVuZ3RoID49IDI0IChvbiA2NCBiaXQgYXJjaHMpXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzLmxlbmd0aDsgaSsrKSBpZiAocy5jaGFyQ29kZUF0KGkpID4gMTI3KSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZVxuICAgIHJldHVybiAhL1teXFx4MDAtXFx4N2ZdLy50ZXN0KHMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQgbXV0YWJsZVxuZnVuY3Rpb24gY2FtbF9ieXRlc191bnNhZmVfZ2V0IChzLCBpKSB7XG4gIHN3aXRjaCAocy50ICYgNikge1xuICBkZWZhdWx0OiAvKiBQQVJUSUFMICovXG4gICAgaWYgKGkgPj0gcy5jLmxlbmd0aCkgcmV0dXJuIDA7XG4gIGNhc2UgMDogLyogQllURVMgKi9cbiAgICByZXR1cm4gcy5jLmNoYXJDb2RlQXQoaSk7XG4gIGNhc2UgNDogLyogQVJSQVkgKi9cbiAgICByZXR1cm4gcy5jW2ldXG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc191bnNhZmVfc2V0XG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfdW5zYWZlX3NldCAocywgaSwgYykge1xuICAvLyBUaGUgT0NhbWwgY29tcGlsZXIgdXNlcyBDaGFyLnVuc2FmZV9jaHIgb24gaW50ZWdlcnMgbGFyZ2VyIHRoYW4gMjU1IVxuICBjICY9IDB4ZmY7XG4gIGlmIChzLnQgIT0gNCAvKiBBUlJBWSAqLykge1xuICAgIGlmIChpID09IHMuYy5sZW5ndGgpIHtcbiAgICAgIHMuYyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlIChjKTtcbiAgICAgIGlmIChpICsgMSA9PSBzLmwpIHMudCA9IDA7IC8qQllURVMgfCBVTktPV04qL1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIGNhbWxfY29udmVydF9ieXRlc190b19hcnJheSAocyk7XG4gIH1cbiAgcy5jW2ldID0gYztcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yICgpIHtcbiAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50IChcImluZGV4IG91dCBvZiBib3VuZHNcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfYm91bmRfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9ieXRlc19ib3VuZF9lcnJvciAoKSB7XG4gIGNhbWxfaW52YWxpZF9hcmd1bWVudCAoXCJpbmRleCBvdXQgb2YgYm91bmRzXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19nZXRcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yLCBjYW1sX3N0cmluZ191bnNhZmVfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGhcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2dldCAocywgaSkge1xuICBpZiAoaSA+Pj4gMCA+PSBjYW1sX21sX3N0cmluZ19sZW5ndGgocykpIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yKCk7XG4gIHJldHVybiBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IChzLCBpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfZ2V0MTZcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQsIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGhcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2dldDE2KHMsaSkge1xuICBpZiAoaSA+Pj4gMCA+PSBjYW1sX21sX3N0cmluZ19sZW5ndGgocykgLSAxKSBjYW1sX3N0cmluZ19ib3VuZF9lcnJvcigpO1xuICB2YXIgYjEgPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IChzLCBpKSxcbiAgICAgIGIyID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldCAocywgaSArIDEpO1xuICByZXR1cm4gKGIyIDw8IDggfCBiMSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfZ2V0MTZcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCwgY2FtbF9ieXRlc19ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9ieXRlc19nZXQxNihzLGkpIHtcbiAgaWYgKGkgPj4+IDAgPj0gcy5sIC0gMSkgY2FtbF9ieXRlc19ib3VuZF9lcnJvcigpO1xuICB2YXIgYjEgPSBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQgKHMsIGkpLFxuICAgICAgYjIgPSBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQgKHMsIGkgKyAxKTtcbiAgcmV0dXJuIChiMiA8PCA4IHwgYjEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19nZXQzMlxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfdW5zYWZlX2dldCwgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9zdHJpbmdfZ2V0MzIocyxpKSB7XG4gIGlmIChpID4+PiAwID49IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSAtIDMpIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiMSA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgKHMsIGkpLFxuICAgICAgYjIgPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IChzLCBpICsgMSksXG4gICAgICBiMyA9IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgKHMsIGkgKyAyKSxcbiAgICAgIGI0ID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldCAocywgaSArIDMpO1xuICByZXR1cm4gKGI0IDw8IDI0IHwgYjMgPDwgMTYgfCBiMiA8PCA4IHwgYjEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2dldDMyXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQsIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfZ2V0MzIocyxpKSB7XG4gIGlmIChpID4+PiAwID49IHMubCAtIDMpIGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGIxID0gY2FtbF9ieXRlc191bnNhZmVfZ2V0IChzLCBpKSxcbiAgICAgIGIyID0gY2FtbF9ieXRlc191bnNhZmVfZ2V0IChzLCBpICsgMSksXG4gICAgICBiMyA9IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCAocywgaSArIDIpLFxuICAgICAgYjQgPSBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQgKHMsIGkgKyAzKTtcbiAgcmV0dXJuIChiNCA8PCAyNCB8IGIzIDw8IDE2IHwgYjIgPDwgOCB8IGIxKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfZ2V0NjRcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQsIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGhcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2dldDY0KHMsaSkge1xuICBpZiAoaSA+Pj4gMCA+PSBjYW1sX21sX3N0cmluZ19sZW5ndGgocykgLSA3KSBjYW1sX3N0cmluZ19ib3VuZF9lcnJvcigpO1xuICB2YXIgYSA9IG5ldyBBcnJheSg4KTtcbiAgZm9yKHZhciBqID0gMDsgaiA8IDg7IGorKyl7XG4gICAgYVs3IC0gal0gPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IChzLCBpICsgaik7XG4gIH1cbiAgcmV0dXJuIGNhbWxfaW50NjRfb2ZfYnl0ZXMoYSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfZ2V0NjRcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfdW5zYWZlX2dldCwgY2FtbF9ieXRlc19ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZl9ieXRlc1xuZnVuY3Rpb24gY2FtbF9ieXRlc19nZXQ2NChzLGkpIHtcbiAgaWYgKGkgPj4+IDAgPj0gcy5sIC0gNykgY2FtbF9ieXRlc19ib3VuZF9lcnJvcigpO1xuICB2YXIgYSA9IG5ldyBBcnJheSg4KTtcbiAgZm9yKHZhciBqID0gMDsgaiA8IDg7IGorKyl7XG4gICAgYVs3IC0gal0gPSBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQgKHMsIGkgKyBqKTtcbiAgfVxuICByZXR1cm4gY2FtbF9pbnQ2NF9vZl9ieXRlcyhhKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19nZXRcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IsIGNhbWxfYnl0ZXNfdW5zYWZlX2dldFxuZnVuY3Rpb24gY2FtbF9ieXRlc19nZXQgKHMsIGkpIHtcbiAgaWYgKGkgPj4+IDAgPj0gcy5sKSBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yKCk7XG4gIHJldHVybiBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQgKHMsIGkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19zZXRcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfc2V0IChzLCBpLCBjKSB7XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3N0cmluZ19zZXRcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX3NldFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfdW5zYWZlX3NldCwgY2FtbF9zdHJpbmdfYm91bmRfZXJyb3Jcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3NldCAocywgaSwgYykge1xuICBpZiAoaSA+Pj4gMCA+PSBzLmwpIGNhbWxfc3RyaW5nX2JvdW5kX2Vycm9yKCk7XG4gIHJldHVybiBjYW1sX3N0cmluZ191bnNhZmVfc2V0IChzLCBpLCBjKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19zZXQxNlxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19ib3VuZF9lcnJvciwgY2FtbF9ieXRlc191bnNhZmVfc2V0XG5mdW5jdGlvbiBjYW1sX2J5dGVzX3NldDE2KHMsaSxpMTYpe1xuICBpZiAoaSA+Pj4gMCA+PSBzLmwgLSAxKSBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiMiA9IDB4RkYgJiBpMTYgPj4gOCxcbiAgICAgIGIxID0gMHhGRiAmIGkxNjtcbiAgY2FtbF9ieXRlc191bnNhZmVfc2V0IChzLCBpICsgMCwgYjEpO1xuICBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQgKHMsIGkgKyAxLCBiMik7XG4gIHJldHVybiAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX3NldDE2XG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3NldDE2KHMsaSxpMTYpe1xuICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9zdHJpbmdfc2V0MTZcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX3NldDE2XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX3NldDE2XG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19zZXQxNihzLGksaTE2KXtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfc2V0MTYocyxpLGkxNik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfc2V0MzJcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfYm91bmRfZXJyb3IsIGNhbWxfYnl0ZXNfdW5zYWZlX3NldFxuZnVuY3Rpb24gY2FtbF9ieXRlc19zZXQzMihzLGksaTMyKXtcbiAgaWYgKGkgPj4+IDAgPj0gcy5sIC0gMykgY2FtbF9ieXRlc19ib3VuZF9lcnJvcigpO1xuICB2YXIgYjQgPSAweEZGICYgaTMyID4+IDI0LFxuICAgICAgYjMgPSAweEZGICYgaTMyID4+IDE2LFxuICAgICAgYjIgPSAweEZGICYgaTMyID4+IDgsXG4gICAgICBiMSA9IDB4RkYgJiBpMzI7XG4gIGNhbWxfYnl0ZXNfdW5zYWZlX3NldCAocywgaSArIDAsIGIxKTtcbiAgY2FtbF9ieXRlc191bnNhZmVfc2V0IChzLCBpICsgMSwgYjIpO1xuICBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQgKHMsIGkgKyAyLCBiMyk7XG4gIGNhbWxfYnl0ZXNfdW5zYWZlX3NldCAocywgaSArIDMsIGI0KTtcbiAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfc2V0MzJcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfc2V0MzIocyxpLGkzMil7XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX3N0cmluZ19zZXQzMlwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfc2V0MzJcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfc2V0MzJcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3NldDMyKHMsaSxpMzIpe1xuICByZXR1cm4gY2FtbF9ieXRlc19zZXQzMihzLGksaTMyKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19zZXQ2NFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19ib3VuZF9lcnJvciwgY2FtbF9ieXRlc191bnNhZmVfc2V0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X3RvX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2J5dGVzX3NldDY0KHMsaSxpNjQpe1xuICBpZiAoaSA+Pj4gMCA+PSBzLmwgLSA3KSBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yKCk7XG4gIHZhciBhID0gY2FtbF9pbnQ2NF90b19ieXRlcyhpNjQpO1xuICBmb3IodmFyIGogPSAwOyBqIDwgODsgaisrKSB7XG4gICAgY2FtbF9ieXRlc191bnNhZmVfc2V0IChzLCBpICsgNyAtIGosIGFbal0pO1xuICB9XG4gIHJldHVybiAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX3NldDY0XG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3NldDY0KHMsaSxpNjQpe1xuICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9zdHJpbmdfc2V0NjRcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX3NldDY0XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX3NldDY0XG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19zZXQ2NChzLGksaTY0KXtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfc2V0NjQocyxpLGk2NCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfc2V0XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX2JvdW5kX2Vycm9yLCBjYW1sX2J5dGVzX3Vuc2FmZV9zZXRcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfc2V0IChzLCBpLCBjKSB7XG4gIGlmIChpID4+PiAwID49IHMubCkgY2FtbF9ieXRlc19ib3VuZF9lcnJvcigpO1xuICByZXR1cm4gY2FtbF9ieXRlc191bnNhZmVfc2V0IChzLCBpLCBjKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19vZl91dGYxNl9qc3N0cmluZ1xuLy9SZXF1aXJlczoganNvb19pc19hc2NpaSwgY2FtbF91dGY4X29mX3V0ZjE2LCBNbEJ5dGVzXG5mdW5jdGlvbiBjYW1sX2J5dGVzX29mX3V0ZjE2X2pzc3RyaW5nIChzKSB7XG4gIHZhciB0YWcgPSA5IC8qIEJZVEVTIHwgQVNDSUkgKi87XG4gIGlmICghanNvb19pc19hc2NpaShzKSlcbiAgICB0YWcgPSA4IC8qIEJZVEVTIHwgTk9UX0FTQ0lJICovLCBzID0gY2FtbF91dGY4X29mX3V0ZjE2KHMpO1xuICByZXR1cm4gbmV3IE1sQnl0ZXModGFnLCBzLCBzLmxlbmd0aCk7XG59XG5cblxuLy9Qcm92aWRlczogTWxCeXRlc1xuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcywganNvb19pc19hc2NpaSwgY2FtbF91dGYxNl9vZl91dGY4XG5mdW5jdGlvbiBNbEJ5dGVzICh0YWcsIGNvbnRlbnRzLCBsZW5ndGgpIHtcbiAgdGhpcy50PXRhZzsgdGhpcy5jPWNvbnRlbnRzOyB0aGlzLmw9bGVuZ3RoO1xufVxuTWxCeXRlcy5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpe1xuICBzd2l0Y2ggKHRoaXMudCkge1xuICBjYXNlIDk6IC8qQllURVMgfCBBU0NJSSovXG4gICAgcmV0dXJuIHRoaXMuYztcbiAgZGVmYXVsdDpcbiAgICBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHRoaXMpO1xuICBjYXNlIDA6IC8qQllURVMgfCBVTktPV04qL1xuICAgIGlmIChqc29vX2lzX2FzY2lpKHRoaXMuYykpIHtcbiAgICAgIHRoaXMudCA9IDk7IC8qQllURVMgfCBBU0NJSSovXG4gICAgICByZXR1cm4gdGhpcy5jO1xuICAgIH1cbiAgICB0aGlzLnQgPSA4OyAvKkJZVEVTIHwgTk9UX0FTQ0lJKi9cbiAgY2FzZSA4OiAvKkJZVEVTIHwgTk9UX0FTQ0lJKi9cbiAgICByZXR1cm4gdGhpcy5jO1xuICB9XG59O1xuTWxCeXRlcy5wcm90b3R5cGUudG9VdGYxNiA9IGZ1bmN0aW9uICgpe1xuICB2YXIgciA9IHRoaXMudG9TdHJpbmcoKTtcbiAgaWYodGhpcy50ID09IDkpIHJldHVybiByXG4gIHJldHVybiBjYW1sX3V0ZjE2X29mX3V0Zjgocik7XG59XG5NbEJ5dGVzLnByb3RvdHlwZS5zbGljZSA9IGZ1bmN0aW9uICgpe1xuICB2YXIgY29udGVudCA9IHRoaXMudCA9PSA0ID8gdGhpcy5jLnNsaWNlKCkgOiB0aGlzLmM7XG4gIHJldHVybiBuZXcgTWxCeXRlcyh0aGlzLnQsY29udGVudCx0aGlzLmwpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3N0cl9yZXBlYXQsIGNhbWxfc3ViYXJyYXlfdG9fanNieXRlc1xuZnVuY3Rpb24gY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyAocykge1xuICAvKiBBc3N1bWVzIG5vdCBCWVRFUyAqL1xuICBpZiAocy50ID09IDIgLyogUEFSVElBTCAqLylcbiAgICBzLmMgKz0gY2FtbF9zdHJfcmVwZWF0KHMubCAtIHMuYy5sZW5ndGgsICdcXDAnKVxuICBlbHNlXG4gICAgcy5jID0gY2FtbF9zdWJhcnJheV90b19qc2J5dGVzIChzLmMsIDAsIHMuYy5sZW5ndGgpO1xuICBzLnQgPSAwOyAvKkJZVEVTIHwgVU5LT1dOKi9cbn1cblxuLy9Qcm92aWRlczogY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5XG5mdW5jdGlvbiBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXkgKHMpIHtcbiAgLyogQXNzdW1lcyBub3QgQVJSQVkgKi9cbiAgaWYoam9vX2dsb2JhbF9vYmplY3QuVWludDhBcnJheSkge1xuICAgIHZhciBhID0gbmV3IGpvb19nbG9iYWxfb2JqZWN0LlVpbnQ4QXJyYXkocy5sKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgYSA9IG5ldyBBcnJheShzLmwpO1xuICB9XG4gIHZhciBiID0gcy5jLCBsID0gYi5sZW5ndGgsIGkgPSAwO1xuICBmb3IgKDsgaSA8IGw7IGkrKykgYVtpXSA9IGIuY2hhckNvZGVBdChpKTtcbiAgZm9yIChsID0gcy5sOyBpIDwgbDsgaSsrKSBhW2ldID0gMDtcbiAgcy5jID0gYTtcbiAgcy50ID0gNDsgLyogQVJSQVkgKi9cbiAgcmV0dXJuIGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfb2ZfYnl0ZXMgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5XG5mdW5jdGlvbiBjYW1sX2FycmF5X29mX2J5dGVzIChzKSB7XG4gIGlmIChzLnQgIT0gNCAvKiBBUlJBWSAqLykgY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5KHMpO1xuICByZXR1cm4gcy5jO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X29mX3N0cmluZyBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aCwgY2FtbF9zdHJpbmdfdW5zYWZlX2dldFxuZnVuY3Rpb24gY2FtbF9hcnJheV9vZl9zdHJpbmcgKHMpIHtcbiAgdmFyIGwgPSBjYW1sX21sX3N0cmluZ19sZW5ndGgocyk7XG4gIHZhciBhID0gbmV3IEFycmF5KGwpO1xuICB2YXIgaSA9IDA7XG4gIGZvciAoOyBpIDwgbDsgaSsrKSBhW2ldID0gY2FtbF9zdHJpbmdfdW5zYWZlX2dldChzLGkpO1xuICByZXR1cm4gYTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jcmVhdGVfc3RyaW5nIGNvbnN0XG4vL1JlcXVpcmVzOiBNbEJ5dGVzLCBjYW1sX2ludmFsaWRfYXJndW1lbnRcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfY3JlYXRlX3N0cmluZyhsZW4pIHtcbiAgaWYobGVuIDwgMCkgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiU3RyaW5nLmNyZWF0ZVwiKTtcbiAgcmV0dXJuIG5ldyBNbEJ5dGVzKGxlbj8yOjksXCJcIixsZW4pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NyZWF0ZV9zdHJpbmcgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2NyZWF0ZV9zdHJpbmcobGVuKSB7XG4gIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIlN0cmluZy5jcmVhdGVcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY3JlYXRlX2J5dGVzIGNvbnN0XG4vL1JlcXVpcmVzOiBNbEJ5dGVzLGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9jcmVhdGVfYnl0ZXMobGVuKSB7XG4gIGlmIChsZW4gPCAwKSBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCeXRlcy5jcmVhdGVcIik7XG4gIHJldHVybiBuZXcgTWxCeXRlcyhsZW4/Mjo5LFwiXCIsbGVuKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfb2ZfYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfc3ViYXJyYXlfdG9fanNieXRlcywgY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfb2ZfYXJyYXkgKGEpIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoY2FtbF9zdWJhcnJheV90b19qc2J5dGVzKGEsMCxhLmxlbmd0aCkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX29mX2FycmF5XG4vL1JlcXVpcmVzOiBNbEJ5dGVzXG5mdW5jdGlvbiBjYW1sX2J5dGVzX29mX2FycmF5IChhKSB7XG4gIHJldHVybiBuZXcgTWxCeXRlcyg0LGEsYS5sZW5ndGgpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2NvbXBhcmUgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlc1xuZnVuY3Rpb24gY2FtbF9ieXRlc19jb21wYXJlKHMxLCBzMikge1xuICAoczEudCAmIDYpICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczEpO1xuICAoczIudCAmIDYpICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczIpO1xuICByZXR1cm4gKHMxLmMgPCBzMi5jKT8tMTooczEuYyA+IHMyLmMpPzE6MDtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2VxdWFsIG11dGFibGUgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfZXF1YWwoczEsIHMyKSB7XG4gIGlmKHMxID09PSBzMikgcmV0dXJuIDE7XG4gIChzMS50ICYgNikgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzMSk7XG4gIChzMi50ICYgNikgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzMik7XG4gIHJldHVybiAoczEuYyA9PSBzMi5jKT8xOjA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX25vdGVxdWFsIG11dGFibGUgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX2VxdWFsXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19ub3RlcXVhbChzMSwgczIpIHsgcmV0dXJuIDEtY2FtbF9zdHJpbmdfZXF1YWwoczEsIHMyKTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX25vdGVxdWFsIG11dGFibGUgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX2VxdWFsXG5mdW5jdGlvbiBjYW1sX2J5dGVzX25vdGVxdWFsKHMxLCBzMikgeyByZXR1cm4gMS1jYW1sX3N0cmluZ19lcXVhbChzMSwgczIpOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfbGVzc2VxdWFsIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfbGVzc2VxdWFsKHMxLCBzMikge1xuICAoczEudCAmIDYpICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczEpO1xuICAoczIudCAmIDYpICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMoczIpO1xuICByZXR1cm4gKHMxLmMgPD0gczIuYyk/MTowO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2xlc3N0aGFuIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfbGVzc3RoYW4oczEsIHMyKSB7XG4gIChzMS50ICYgNikgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzMSk7XG4gIChzMi50ICYgNikgJiYgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzMik7XG4gIHJldHVybiAoczEuYyA8IHMyLmMpPzE6MDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfZ3JlYXRlcmVxdWFsXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19sZXNzZXF1YWxcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2dyZWF0ZXJlcXVhbChzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX2xlc3NlcXVhbChzMixzMSk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX2dyZWF0ZXJlcXVhbFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19sZXNzZXF1YWxcbmZ1bmN0aW9uIGNhbWxfYnl0ZXNfZ3JlYXRlcmVxdWFsKHMxLCBzMikge1xuICByZXR1cm4gY2FtbF9ieXRlc19sZXNzZXF1YWwoczIsczEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19ncmVhdGVydGhhblxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfbGVzc3RoYW5cbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2dyZWF0ZXJ0aGFuKHMxLCBzMikge1xuICByZXR1cm4gY2FtbF9zdHJpbmdfbGVzc3RoYW4oczIsIHMxKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ieXRlc19ncmVhdGVydGhhblxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19sZXNzdGhhblxuZnVuY3Rpb24gY2FtbF9ieXRlc19ncmVhdGVydGhhbihzMSwgczIpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfbGVzc3RoYW4oczIsIHMxKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9maWxsX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3N0cl9yZXBlYXQsIGNhbWxfY29udmVydF9ieXRlc190b19hcnJheVxuZnVuY3Rpb24gY2FtbF9maWxsX2J5dGVzKHMsIGksIGwsIGMpIHtcbiAgaWYgKGwgPiAwKSB7XG4gICAgaWYgKGkgPT0gMCAmJiAobCA+PSBzLmwgfHwgKHMudCA9PSAyIC8qIFBBUlRJQUwgKi8gJiYgbCA+PSBzLmMubGVuZ3RoKSkpIHtcbiAgICAgIGlmIChjID09IDApIHtcbiAgICAgICAgcy5jID0gXCJcIjtcbiAgICAgICAgcy50ID0gMjsgLyogUEFSVElBTCAqL1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcy5jID0gY2FtbF9zdHJfcmVwZWF0IChsLCBTdHJpbmcuZnJvbUNoYXJDb2RlKGMpKTtcbiAgICAgICAgcy50ID0gKGwgPT0gcy5sKT8wIC8qIEJZVEVTIHwgVU5LT1dOICovIDoyOyAvKiBQQVJUSUFMICovXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChzLnQgIT0gNCAvKiBBUlJBWSAqLykgY2FtbF9jb252ZXJ0X2J5dGVzX3RvX2FycmF5KHMpO1xuICAgICAgZm9yIChsICs9IGk7IGkgPCBsOyBpKyspIHMuY1tpXSA9IGM7XG4gICAgfVxuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ZpbGxfc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2ZpbGxfYnl0ZXNcbnZhciBjYW1sX2ZpbGxfc3RyaW5nID0gY2FtbF9maWxsX2J5dGVzXG5cbi8vUHJvdmlkZXM6IGNhbWxfYmxpdF9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9zdWJhcnJheV90b19qc2J5dGVzLCBjYW1sX2NvbnZlcnRfYnl0ZXNfdG9fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfYmxpdF9ieXRlcyhzMSwgaTEsIHMyLCBpMiwgbGVuKSB7XG4gIGlmIChsZW4gPT0gMCkgcmV0dXJuIDA7XG4gIGlmICgoaTIgPT0gMCkgJiZcbiAgICAgIChsZW4gPj0gczIubCB8fCAoczIudCA9PSAyIC8qIFBBUlRJQUwgKi8gJiYgbGVuID49IHMyLmMubGVuZ3RoKSkpIHtcbiAgICBzMi5jID0gKHMxLnQgPT0gNCAvKiBBUlJBWSAqLyk/XG4gICAgICBjYW1sX3N1YmFycmF5X3RvX2pzYnl0ZXMoczEuYywgaTEsIGxlbik6XG4gICAgICAoaTEgPT0gMCAmJiBzMS5jLmxlbmd0aCA9PSBsZW4pP3MxLmM6czEuYy5zdWJzdHIoaTEsIGxlbik7XG4gICAgczIudCA9IChzMi5jLmxlbmd0aCA9PSBzMi5sKT8wIC8qIEJZVEVTIHwgVU5LT1dOICovIDoyOyAvKiBQQVJUSUFMICovXG4gIH0gZWxzZSBpZiAoczIudCA9PSAyIC8qIFBBUlRJQUwgKi8gJiYgaTIgPT0gczIuYy5sZW5ndGgpIHtcbiAgICBzMi5jICs9IChzMS50ID09IDQgLyogQVJSQVkgKi8pP1xuICAgICAgY2FtbF9zdWJhcnJheV90b19qc2J5dGVzKHMxLmMsIGkxLCBsZW4pOlxuICAgICAgKGkxID09IDAgJiYgczEuYy5sZW5ndGggPT0gbGVuKT9zMS5jOnMxLmMuc3Vic3RyKGkxLCBsZW4pO1xuICAgIHMyLnQgPSAoczIuYy5sZW5ndGggPT0gczIubCk/MCAvKiBCWVRFUyB8IFVOS09XTiAqLyA6MjsgLyogUEFSVElBTCAqL1xuICB9IGVsc2Uge1xuICAgIGlmIChzMi50ICE9IDQgLyogQVJSQVkgKi8pIGNhbWxfY29udmVydF9ieXRlc190b19hcnJheShzMik7XG4gICAgdmFyIGMxID0gczEuYywgYzIgPSBzMi5jO1xuICAgIGlmIChzMS50ID09IDQgLyogQVJSQVkgKi8pIHtcbiAgICAgIGlmIChpMiA8PSBpMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSBjMiBbaTIgKyBpXSA9IGMxIFtpMSArIGldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IGxlbiAtIDE7IGkgPj0gMDsgaS0tKSBjMiBbaTIgKyBpXSA9IGMxIFtpMSArIGldO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgbCA9IE1hdGgubWluIChsZW4sIGMxLmxlbmd0aCAtIGkxKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbDsgaSsrKSBjMiBbaTIgKyBpXSA9IGMxLmNoYXJDb2RlQXQoaTEgKyBpKTtcbiAgICAgIGZvciAoOyBpIDwgbGVuOyBpKyspIGMyIFtpMiArIGldID0gMDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmxpdF9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfYmxpdF9ieXRlcywgY2FtbF9ieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfYmxpdF9zdHJpbmcoYSxiLGMsZCxlKSB7XG4gIGNhbWxfYmxpdF9ieXRlcyhjYW1sX2J5dGVzX29mX3N0cmluZyhhKSxiLGMsZCxlKTtcbiAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9ieXRlc19sZW5ndGggY29uc3RcbmZ1bmN0aW9uIGNhbWxfbWxfYnl0ZXNfbGVuZ3RoKHMpIHsgcmV0dXJuIHMubCB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQgY29uc3Rcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfdW5zYWZlX2dldCAocywgaSkge1xuICByZXR1cm4gcy5jaGFyQ29kZUF0KGkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ191bnNhZmVfc2V0XG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX3Vuc2FmZV9zZXQgKHMsIGksIGMpIHtcbiAgY2FtbF9mYWlsd2l0aChcImNhbWxfc3RyaW5nX3Vuc2FmZV9zZXRcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc3RyaW5nX2xlbmd0aCBjb25zdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX21sX3N0cmluZ19sZW5ndGgocykge1xuICByZXR1cm4gcy5sZW5ndGhcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfY29tcGFyZSBjb25zdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19jb21wYXJlKHMxLCBzMikge1xuICByZXR1cm4gKHMxIDwgczIpPy0xOihzMSA+IHMyKT8xOjA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX2VxdWFsIGNvbnN0XG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2VxdWFsKHMxLCBzMikge1xuICBpZihzMSA9PT0gczIpIHJldHVybiAxO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfbGVzc2VxdWFsIGNvbnN0XG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2xlc3NlcXVhbChzMSwgczIpIHtcbiAgcmV0dXJuIChzMSA8PSBzMik/MTowO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19sZXNzdGhhbiBjb25zdFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19sZXNzdGhhbihzMSwgczIpIHtcbiAgcmV0dXJuIChzMSA8IHMyKT8xOjA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX29mX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX29mX2J5dGVzKHMpIHtcbiAgKHMudCAmIDYpICYmIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMocyk7XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKHMuYyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfb2Zfc3RyaW5nIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX29mX2pzYnl0ZXMsIGNhbWxfanNieXRlc19vZl9zdHJpbmdcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9ieXRlc19vZl9zdHJpbmcocykge1xuICByZXR1cm4gY2FtbF9ieXRlc19vZl9qc2J5dGVzKGNhbWxfanNieXRlc19vZl9zdHJpbmcocykpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzIGNvbnN0XG4vL0lmOiBqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoeCkgeyByZXR1cm4geCB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNieXRlc19vZl9zdHJpbmcgY29uc3Rcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc2J5dGVzX29mX3N0cmluZyh4KSB7IHJldHVybiB4IH1cblxuLy9Qcm92aWRlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcgY29uc3Rcbi8vUmVxdWlyZXM6IGpzb29faXNfYXNjaWksIGNhbWxfdXRmMTZfb2ZfdXRmOFxuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhzKSB7XG4gIGlmKGpzb29faXNfYXNjaWkocykpXG4gICAgcmV0dXJuIHM7XG4gIHJldHVybiBjYW1sX3V0ZjE2X29mX3V0Zjgocyk7IH1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcgY29uc3Rcbi8vUmVxdWlyZXM6IGpzb29faXNfYXNjaWksIGNhbWxfdXRmOF9vZl91dGYxNiwgY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuLy9JZjoganMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyAocykge1xuICBpZiAoanNvb19pc19hc2NpaShzKSlcbiAgICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhzKVxuICBlbHNlIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKGNhbWxfdXRmOF9vZl91dGYxNihzKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnl0ZXNfb2ZfanNieXRlcyBjb25zdFxuLy9SZXF1aXJlczogTWxCeXRlc1xuZnVuY3Rpb24gY2FtbF9ieXRlc19vZl9qc2J5dGVzKHMpIHsgcmV0dXJuIG5ldyBNbEJ5dGVzKDAscyxzLmxlbmd0aCk7IH1cblxuXG4vLyBUaGUgc2VjdGlvbiBiZWxvdyBzaG91bGQgYmUgdXNlZCB3aGVuIHVzZS1qcy1zdHJpbmc9ZmFsc2VcblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfdW5zYWZlX2dldCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc191bnNhZmVfZ2V0XG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ191bnNhZmVfZ2V0IChzLCBpKSB7XG4gIHJldHVybiBjYW1sX2J5dGVzX3Vuc2FmZV9nZXQocyxpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfdW5zYWZlX3NldFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc191bnNhZmVfc2V0XG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ191bnNhZmVfc2V0IChzLCBpLCBjKSB7XG4gIHJldHVybiBjYW1sX2J5dGVzX3Vuc2FmZV9zZXQocyxpLGMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3N0cmluZ19sZW5ndGggY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfbWxfYnl0ZXNfbGVuZ3RoXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX21sX3N0cmluZ19sZW5ndGgocykge1xuICByZXR1cm4gY2FtbF9tbF9ieXRlc19sZW5ndGgocylcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfY29tcGFyZVxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19jb21wYXJlXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19jb21wYXJlKHMxLCBzMikge1xuICByZXR1cm4gY2FtbF9ieXRlc19jb21wYXJlKHMxLHMyKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19lcXVhbFxuLy9SZXF1aXJlczogY2FtbF9ieXRlc19lcXVhbFxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfZXF1YWwoczEsIHMyKSB7XG4gIHJldHVybiBjYW1sX2J5dGVzX2VxdWFsKHMxLHMyKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19sZXNzZXF1YWxcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfbGVzc2VxdWFsXG4vL0lmOiAhanMtc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3N0cmluZ19sZXNzZXF1YWwoczEsIHMyKSB7XG4gIHJldHVybiBjYW1sX2J5dGVzX2xlc3NlcXVhbChzMSxzMilcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfbGVzc3RoYW5cbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfbGVzc3RoYW5cbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX2xlc3N0aGFuKHMxLCBzMikge1xuICByZXR1cm4gY2FtbF9ieXRlc19sZXNzdGhhbihzMSxzMilcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zdHJpbmdfb2ZfYnl0ZXNcbi8vSWY6ICFqcy1zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3RyaW5nX29mX2J5dGVzKHMpIHsgcmV0dXJuIHMgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2J5dGVzX29mX3N0cmluZyBjb25zdFxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9ieXRlc19vZl9zdHJpbmcocykgeyByZXR1cm4gcyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfb2ZfanNieXRlc1xuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhzKSB7IHJldHVybiBjYW1sX2J5dGVzX29mX2pzYnl0ZXMocyk7IH1cblxuLy9Qcm92aWRlczogY2FtbF9qc2J5dGVzX29mX3N0cmluZyBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlc1xuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhzKSB7XG4gIGlmICgocy50ICYgNikgIT0gMCAvKiBCWVRFUyAqLykgY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlcyhzKTtcbiAgcmV0dXJuIHMuYyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nIG11dGFibGUgKGNvbnN0KVxuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcocyl7XG4gIHJldHVybiBzLnRvVXRmMTYoKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9ieXRlc19vZl91dGYxNl9qc3N0cmluZ1xuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcgKHMpIHtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfb2ZfdXRmMTZfanNzdHJpbmcocyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaXNfbWxfYnl0ZXNcbi8vUmVxdWlyZXM6IE1sQnl0ZXNcbmZ1bmN0aW9uIGNhbWxfaXNfbWxfYnl0ZXMocykge1xuICByZXR1cm4gKHMgaW5zdGFuY2VvZiBNbEJ5dGVzKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pc19tbF9zdHJpbmdcbi8vUmVxdWlyZXM6IGpzb29faXNfYXNjaWlcbi8vSWY6IGpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9pc19tbF9zdHJpbmcocykge1xuICByZXR1cm4gKHR5cGVvZiBzID09PSBcInN0cmluZ1wiICYmICEvW15cXHgwMC1cXHhmZl0vLnRlc3QocykpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2lzX21sX3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9pc19tbF9ieXRlc1xuLy9JZjogIWpzLXN0cmluZ1xuZnVuY3Rpb24gY2FtbF9pc19tbF9zdHJpbmcocykge1xuICByZXR1cm4gY2FtbF9pc19tbF9ieXRlcyhzKTtcbn1cblxuLy8gVGhlIGZ1bmN0aW9ucyBiZWxvdyBhcmUgZGVwcmVjYXRlZFxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3RvX2J5dGVfc3RyaW5nIGNvbnN0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX2pzX3RvX2J5dGVfc3RyaW5nKHMpIHsgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMocykgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX25ld19zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfbmV3X3N0cmluZyAocykgeyByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhzKSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZnJvbV9zdHJpbmcgbXV0YWJsZSAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9qc19mcm9tX3N0cmluZyhzKSB7XG4gIHJldHVybiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhzKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3RvX2pzX3N0cmluZyBtdXRhYmxlIChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3RvX2pzX3N0cmluZyhzKSB7XG4gIHJldHVybiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhzKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3RvX3N0cmluZyBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNfdG9fc3RyaW5nIChzKSB7XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhzKTtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vUmFpc2UgZXhjZXB0aW9uXG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2VfY29uc3RhbnQgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9yYWlzZV9jb25zdGFudCAodGFnKSB7IHRocm93IHRhZzsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JldHVybl9leG5fY29uc3RhbnQgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9yZXR1cm5fZXhuX2NvbnN0YW50ICh0YWcpIHsgcmV0dXJuIHRhZzsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX3dpdGhfYXJnIChjb25zdCwgY29uc3QpXG5mdW5jdGlvbiBjYW1sX3JhaXNlX3dpdGhfYXJnICh0YWcsIGFyZykgeyB0aHJvdyBbMCwgdGFnLCBhcmddOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2Vfd2l0aF9hcmdzIChjb25zdCwgY29uc3QpXG5mdW5jdGlvbiBjYW1sX3JhaXNlX3dpdGhfYXJncyAodGFnLCBhcmdzKSB7IHRocm93IFswLCB0YWddLmNvbmNhdChhcmdzKTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX3dpdGhfc3RyaW5nIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3dpdGhfYXJnLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX3JhaXNlX3dpdGhfc3RyaW5nICh0YWcsIG1zZykge1xuICBjYW1sX3JhaXNlX3dpdGhfYXJnICh0YWcsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMobXNnKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZmFpbHdpdGggKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV93aXRoX3N0cmluZywgY2FtbF9nbG9iYWxfZGF0YVxuZnVuY3Rpb24gY2FtbF9mYWlsd2l0aCAobXNnKSB7XG4gIGNhbWxfcmFpc2Vfd2l0aF9zdHJpbmcoY2FtbF9nbG9iYWxfZGF0YS5GYWlsdXJlLCBtc2cpO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3dpdGhfc3RyaW5nLCBjYW1sX2dsb2JhbF9kYXRhXG5mdW5jdGlvbiBjYW1sX2ludmFsaWRfYXJndW1lbnQgKG1zZykge1xuICBjYW1sX3JhaXNlX3dpdGhfc3RyaW5nKGNhbWxfZ2xvYmFsX2RhdGEuSW52YWxpZF9hcmd1bWVudCwgbXNnKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9yYWlzZV9lbmRfb2ZfZmlsZVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9jb25zdGFudCwgY2FtbF9nbG9iYWxfZGF0YVxuZnVuY3Rpb24gY2FtbF9yYWlzZV9lbmRfb2ZfZmlsZSAoKSB7XG4gIGNhbWxfcmFpc2VfY29uc3RhbnQoY2FtbF9nbG9iYWxfZGF0YS5FbmRfb2ZfZmlsZSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2VfemVyb19kaXZpZGVcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2VfY29uc3RhbnQsIGNhbWxfZ2xvYmFsX2RhdGFcbmZ1bmN0aW9uIGNhbWxfcmFpc2VfemVyb19kaXZpZGUgKCkge1xuICBjYW1sX3JhaXNlX2NvbnN0YW50KGNhbWxfZ2xvYmFsX2RhdGEuRGl2aXNpb25fYnlfemVybyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2Vfbm90X2ZvdW5kXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX2NvbnN0YW50LCBjYW1sX2dsb2JhbF9kYXRhXG5mdW5jdGlvbiBjYW1sX3JhaXNlX25vdF9mb3VuZCAoKSB7XG4gIGNhbWxfcmFpc2VfY29uc3RhbnQoY2FtbF9nbG9iYWxfZGF0YS5Ob3RfZm91bmQpOyB9XG5cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yICgpIHtcbiAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiaW5kZXggb3V0IG9mIGJvdW5kc1wiKTtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxMCBKw6lyw7RtZSBWb3VpbGxvblxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NhbGxfZ2VuIChjb25zdCwgc2hhbGxvdylcbi8vV2Vha2RlZlxuZnVuY3Rpb24gY2FtbF9jYWxsX2dlbihmLCBhcmdzKSB7XG4gIGlmKGYuZnVuKVxuICAgIHJldHVybiBjYW1sX2NhbGxfZ2VuKGYuZnVuLCBhcmdzKTtcbiAgLy9GSVhNRSwgY2FuIGhhcHBlbiB3aXRoIHRvbyBtYW55IGFyZ3VtZW50c1xuICBpZih0eXBlb2YgZiAhPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gZjtcbiAgdmFyIG4gPSBmLmxlbmd0aCB8IDA7XG4gIGlmKG4gPT09IDApIHJldHVybiBmLmFwcGx5KG51bGwsYXJncyk7XG4gIHZhciBhcmdzTGVuID0gYXJncy5sZW5ndGggfCAwO1xuICB2YXIgZCA9IG4gLSBhcmdzTGVuIHwgMDtcbiAgaWYgKGQgPT0gMClcbiAgICByZXR1cm4gZi5hcHBseShudWxsLCBhcmdzKTtcbiAgZWxzZSBpZiAoZCA8IDApIHtcbiAgICByZXR1cm4gY2FtbF9jYWxsX2dlbihmLmFwcGx5KG51bGwsYXJncy5zbGljZSgwLG4pKSxhcmdzLnNsaWNlKG4pKTtcbiAgfVxuICBlbHNlIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCl7XG4gICAgICB2YXIgZXh0cmFfYXJncyA9IChhcmd1bWVudHMubGVuZ3RoID09IDApPzE6YXJndW1lbnRzLmxlbmd0aDtcbiAgICAgIHZhciBuYXJncyA9IG5ldyBBcnJheShhcmdzLmxlbmd0aCtleHRyYV9hcmdzKTtcbiAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrICkgbmFyZ3NbaV0gPSBhcmdzW2ldO1xuICAgICAgZm9yKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKyApIG5hcmdzW2FyZ3MubGVuZ3RoK2ldID0gYXJndW1lbnRzW2ldO1xuICAgICAgcmV0dXJuIGNhbWxfY2FsbF9nZW4oZiwgbmFyZ3MpXG4gICAgfVxuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbmFtZWRfdmFsdWVzXG52YXIgY2FtbF9uYW1lZF92YWx1ZXMgPSB7fTtcblxuLy9Qcm92aWRlczogY2FtbF9yZWdpc3Rlcl9uYW1lZF92YWx1ZSAoY29uc3QsY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX25hbWVkX3ZhbHVlcywgY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9yZWdpc3Rlcl9uYW1lZF92YWx1ZShubSx2KSB7XG4gIGNhbWxfbmFtZWRfdmFsdWVzW2NhbWxfanNieXRlc19vZl9zdHJpbmcobm0pXSA9IHY7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX25hbWVkX3ZhbHVlXG4vL1JlcXVpcmVzOiBjYW1sX25hbWVkX3ZhbHVlc1xuZnVuY3Rpb24gY2FtbF9uYW1lZF92YWx1ZShubSkge1xuICByZXR1cm4gY2FtbF9uYW1lZF92YWx1ZXNbbm1dXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ2xvYmFsX2RhdGFcbnZhciBjYW1sX2dsb2JhbF9kYXRhID0gWzBdO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX3JlZ2lzdGVyX2dsb2JhbCAoY29uc3QsIHNoYWxsb3csIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9nbG9iYWxfZGF0YVxuZnVuY3Rpb24gY2FtbF9yZWdpc3Rlcl9nbG9iYWwgKG4sIHYsIG5hbWVfb3B0KSB7XG4gIGlmKG5hbWVfb3B0ICYmIGpvb19nbG9iYWxfb2JqZWN0LnRvcGxldmVsUmVsb2MpXG4gICAgbiA9IGpvb19nbG9iYWxfb2JqZWN0LnRvcGxldmVsUmVsb2MobmFtZV9vcHQpO1xuICBjYW1sX2dsb2JhbF9kYXRhW24gKyAxXSA9IHY7XG4gIGlmKG5hbWVfb3B0KSBjYW1sX2dsb2JhbF9kYXRhW25hbWVfb3B0XSA9IHY7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ2V0X2dsb2JhbF9kYXRhIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfZ2xvYmFsX2RhdGFcbmZ1bmN0aW9uIGNhbWxfZ2V0X2dsb2JhbF9kYXRhICgpIHsgcmV0dXJuIGNhbWxfZ2xvYmFsX2RhdGE7IH1cblxuLy9Qcm92aWRlczogY2FtbF9pc19wcmludGFibGUgY29uc3QgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9pc19wcmludGFibGUoYykgeyByZXR1cm4gKyhjID4gMzEgJiYgYyA8IDEyNyk7IH1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vLy8vLy8vLy8vLy8gRm9ybWF0XG5cbi8vUHJvdmlkZXM6IGNhbWxfcGFyc2VfZm9ybWF0XG4vL1JlcXVpcmVzOiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nLCBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfcGFyc2VfZm9ybWF0IChmbXQpIHtcbiAgZm10ID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhmbXQpO1xuICB2YXIgbGVuID0gZm10Lmxlbmd0aDtcbiAgaWYgKGxlbiA+IDMxKSBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJmb3JtYXRfaW50OiBmb3JtYXQgdG9vIGxvbmdcIik7XG4gIHZhciBmID1cbiAgICAgIHsganVzdGlmeTonKycsIHNpZ25zdHlsZTonLScsIGZpbGxlcjonICcsIGFsdGVybmF0ZTpmYWxzZSxcbiAgICAgICAgYmFzZTowLCBzaWduZWRjb252OmZhbHNlLCB3aWR0aDowLCB1cHBlcmNhc2U6ZmFsc2UsXG4gICAgICAgIHNpZ246MSwgcHJlYzotMSwgY29udjonZicgfTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIHZhciBjID0gZm10LmNoYXJBdChpKTtcbiAgICBzd2l0Y2ggKGMpIHtcbiAgICBjYXNlICctJzpcbiAgICAgIGYuanVzdGlmeSA9ICctJzsgYnJlYWs7XG4gICAgY2FzZSAnKyc6IGNhc2UgJyAnOlxuICAgICAgZi5zaWduc3R5bGUgPSBjOyBicmVhaztcbiAgICBjYXNlICcwJzpcbiAgICAgIGYuZmlsbGVyID0gJzAnOyBicmVhaztcbiAgICBjYXNlICcjJzpcbiAgICAgIGYuYWx0ZXJuYXRlID0gdHJ1ZTsgYnJlYWs7XG4gICAgY2FzZSAnMSc6IGNhc2UgJzInOiBjYXNlICczJzogY2FzZSAnNCc6IGNhc2UgJzUnOlxuICAgIGNhc2UgJzYnOiBjYXNlICc3JzogY2FzZSAnOCc6IGNhc2UgJzknOlxuICAgICAgZi53aWR0aCA9IDA7XG4gICAgICB3aGlsZSAoYz1mbXQuY2hhckNvZGVBdChpKSAtIDQ4LCBjID49IDAgJiYgYyA8PSA5KSB7XG4gICAgICAgIGYud2lkdGggPSBmLndpZHRoICogMTAgKyBjOyBpKytcbiAgICAgIH1cbiAgICAgIGktLTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJy4nOlxuICAgICAgZi5wcmVjID0gMDtcbiAgICAgIGkrKztcbiAgICAgIHdoaWxlIChjPWZtdC5jaGFyQ29kZUF0KGkpIC0gNDgsIGMgPj0gMCAmJiBjIDw9IDkpIHtcbiAgICAgICAgZi5wcmVjID0gZi5wcmVjICogMTAgKyBjOyBpKytcbiAgICAgIH1cbiAgICAgIGktLTtcbiAgICBjYXNlICdkJzogY2FzZSAnaSc6XG4gICAgICBmLnNpZ25lZGNvbnYgPSB0cnVlOyAvKiBmYWxsdGhyb3VnaCAqL1xuICAgIGNhc2UgJ3UnOlxuICAgICAgZi5iYXNlID0gMTA7IGJyZWFrO1xuICAgIGNhc2UgJ3gnOlxuICAgICAgZi5iYXNlID0gMTY7IGJyZWFrO1xuICAgIGNhc2UgJ1gnOlxuICAgICAgZi5iYXNlID0gMTY7IGYudXBwZXJjYXNlID0gdHJ1ZTsgYnJlYWs7XG4gICAgY2FzZSAnbyc6XG4gICAgICBmLmJhc2UgPSA4OyBicmVhaztcbiAgICBjYXNlICdlJzogY2FzZSAnZic6IGNhc2UgJ2cnOlxuICAgICAgZi5zaWduZWRjb252ID0gdHJ1ZTsgZi5jb252ID0gYzsgYnJlYWs7XG4gICAgY2FzZSAnRSc6IGNhc2UgJ0YnOiBjYXNlICdHJzpcbiAgICAgIGYuc2lnbmVkY29udiA9IHRydWU7IGYudXBwZXJjYXNlID0gdHJ1ZTtcbiAgICAgIGYuY29udiA9IGMudG9Mb3dlckNhc2UgKCk7IGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9maW5pc2hfZm9ybWF0dGluZ1xuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9maW5pc2hfZm9ybWF0dGluZyhmLCByYXdidWZmZXIpIHtcbiAgaWYgKGYudXBwZXJjYXNlKSByYXdidWZmZXIgPSByYXdidWZmZXIudG9VcHBlckNhc2UoKTtcbiAgdmFyIGxlbiA9IHJhd2J1ZmZlci5sZW5ndGg7XG4gIC8qIEFkanVzdCBsZW4gdG8gcmVmbGVjdCBhZGRpdGlvbmFsIGNoYXJzIChzaWduLCBldGMpICovXG4gIGlmIChmLnNpZ25lZGNvbnYgJiYgKGYuc2lnbiA8IDAgfHwgZi5zaWduc3R5bGUgIT0gJy0nKSkgbGVuKys7XG4gIGlmIChmLmFsdGVybmF0ZSkge1xuICAgIGlmIChmLmJhc2UgPT0gOCkgbGVuICs9IDE7XG4gICAgaWYgKGYuYmFzZSA9PSAxNikgbGVuICs9IDI7XG4gIH1cbiAgLyogRG8gdGhlIGZvcm1hdHRpbmcgKi9cbiAgdmFyIGJ1ZmZlciA9IFwiXCI7XG4gIGlmIChmLmp1c3RpZnkgPT0gJysnICYmIGYuZmlsbGVyID09ICcgJylcbiAgICBmb3IgKHZhciBpID0gbGVuOyBpIDwgZi53aWR0aDsgaSsrKSBidWZmZXIgKz0gJyAnO1xuICBpZiAoZi5zaWduZWRjb252KSB7XG4gICAgaWYgKGYuc2lnbiA8IDApIGJ1ZmZlciArPSAnLSc7XG4gICAgZWxzZSBpZiAoZi5zaWduc3R5bGUgIT0gJy0nKSBidWZmZXIgKz0gZi5zaWduc3R5bGU7XG4gIH1cbiAgaWYgKGYuYWx0ZXJuYXRlICYmIGYuYmFzZSA9PSA4KSBidWZmZXIgKz0gJzAnO1xuICBpZiAoZi5hbHRlcm5hdGUgJiYgZi5iYXNlID09IDE2KSBidWZmZXIgKz0gXCIweFwiO1xuICBpZiAoZi5qdXN0aWZ5ID09ICcrJyAmJiBmLmZpbGxlciA9PSAnMCcpXG4gICAgZm9yICh2YXIgaSA9IGxlbjsgaSA8IGYud2lkdGg7IGkrKykgYnVmZmVyICs9ICcwJztcbiAgYnVmZmVyICs9IHJhd2J1ZmZlcjtcbiAgaWYgKGYuanVzdGlmeSA9PSAnLScpXG4gICAgZm9yICh2YXIgaSA9IGxlbjsgaSA8IGYud2lkdGg7IGkrKykgYnVmZmVyICs9ICcgJztcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoYnVmZmVyKTtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxMCBKw6lyw7RtZSBWb3VpbGxvblxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBqc29vX2Zsb29yX2xvZzJcbnZhciBsb2cyX29rID0gTWF0aC5sb2cyICYmIE1hdGgubG9nMigxLjEyMzU1ODIwOTI4ODk0NzRFKzMwNykgPT0gMTAyMFxuZnVuY3Rpb24ganNvb19mbG9vcl9sb2cyKHgpIHtcbiAgaWYobG9nMl9vaykgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5sb2cyKHgpKVxuICB2YXIgaSA9IDA7XG4gIGlmICh4ID09IDApIHJldHVybiAtSW5maW5pdHk7XG4gIGlmKHg+PTEpIHt3aGlsZSAoeD49Mikge3gvPTI7IGkrK30gfVxuICBlbHNlIHt3aGlsZSAoeCA8IDEpIHt4Kj0yOyBpLS19IH07XG4gIHJldHVybiBpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQgY29uc3Rcbi8vUmVxdWlyZXM6IGpzb29fZmxvb3JfbG9nMiwgY2FtbF9pbnQ2NF9jcmVhdGVfbG9fbWlfaGlcbmZ1bmN0aW9uIGNhbWxfaW50NjRfYml0c19vZl9mbG9hdCAoeCkge1xuICBpZiAoIWlzRmluaXRlKHgpKSB7XG4gICAgaWYgKGlzTmFOKHgpKVxuICAgICAgcmV0dXJuIGNhbWxfaW50NjRfY3JlYXRlX2xvX21pX2hpKDEsIDAsIDB4N2ZmMCk7XG4gICAgaWYgKHggPiAwKVxuICAgICAgcmV0dXJuIGNhbWxfaW50NjRfY3JlYXRlX2xvX21pX2hpKDAsIDAsIDB4N2ZmMClcbiAgICBlbHNlXG4gICAgICByZXR1cm4gY2FtbF9pbnQ2NF9jcmVhdGVfbG9fbWlfaGkoMCwgMCwgMHhmZmYwKVxuICB9XG4gIHZhciBzaWduID0gKHg9PTAgJiYgMS94ID09IC1JbmZpbml0eSk/MHg4MDAwOih4Pj0wKT8wOjB4ODAwMDtcbiAgaWYgKHNpZ24pIHggPSAteDtcbiAgLy8gSW50NjQuYml0c19vZl9mbG9hdCAxLjEyMzU1ODIwOTI4ODk0NzRFKzMwNyA9IDB4N2ZiMDAwMDAwMDAwMDAwMExcbiAgLy8gdXNpbmcgTWF0aC5MT0cyRSpNYXRoLmxvZyh4KSBpbiBwbGFjZSBvZiBNYXRoLmxvZzIgcmVzdWx0IGluIHByZWNpc2lvbiBsb3N0XG4gIHZhciBleHAgPSBqc29vX2Zsb29yX2xvZzIoeCkgKyAxMDIzO1xuICBpZiAoZXhwIDw9IDApIHtcbiAgICBleHAgPSAwO1xuICAgIHggLz0gTWF0aC5wb3coMiwtMTAyNik7XG4gIH0gZWxzZSB7XG4gICAgeCAvPSBNYXRoLnBvdygyLGV4cC0xMDI3KTtcbiAgICBpZiAoeCA8IDE2KSB7XG4gICAgICB4ICo9IDI7IGV4cCAtPTE7IH1cbiAgICBpZiAoZXhwID09IDApIHtcbiAgICAgIHggLz0gMjsgfVxuICB9XG4gIHZhciBrID0gTWF0aC5wb3coMiwyNCk7XG4gIHZhciByMyA9IHh8MDtcbiAgeCA9ICh4IC0gcjMpICogaztcbiAgdmFyIHIyID0geHwwO1xuICB4ID0gKHggLSByMikgKiBrO1xuICB2YXIgcjEgPSB4fDA7XG4gIHIzID0gKHIzICYweGYpIHwgc2lnbiB8IGV4cCA8PCA0O1xuICByZXR1cm4gY2FtbF9pbnQ2NF9jcmVhdGVfbG9fbWlfaGkocjEsIHIyLCByMyk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50MzJfYml0c19vZl9mbG9hdCBjb25zdFxuLy9SZXF1aXJlczoganNvb19mbG9vcl9sb2cyXG5mdW5jdGlvbiBjYW1sX2ludDMyX2JpdHNfb2ZfZmxvYXQgKHgpIHtcbiAgdmFyIGZsb2F0MzJhID0gbmV3IGpvb19nbG9iYWxfb2JqZWN0LkZsb2F0MzJBcnJheSgxKTtcbiAgZmxvYXQzMmFbMF0gPSB4O1xuICB2YXIgaW50MzJhID0gbmV3IGpvb19nbG9iYWxfb2JqZWN0LkludDMyQXJyYXkoZmxvYXQzMmEuYnVmZmVyKTtcbiAgcmV0dXJuIGludDMyYVswXSB8IDA7XG59XG5cbi8vRlAgbGl0ZXJhbHMgY2FuIGJlIHdyaXR0ZW4gdXNpbmcgdGhlIGhleGFkZWNpbWFsXG4vL25vdGF0aW9uIDB4PG1hbnRpc3NhIGluIGhleD5wPGV4cG9uZW50PiBmcm9tIElTTyBDOTkuXG4vL2h0dHBzOi8vZ2l0aHViLmNvbS9kYW5rb2dhaS9qcy1oZXhmbG9hdC9ibG9iL21hc3Rlci9oZXhmbG9hdC5qc1xuLy9Qcm92aWRlczogY2FtbF9oZXhzdHJpbmdfb2ZfZmxvYXQgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nLCBjYW1sX3N0cl9yZXBlYXRcbmZ1bmN0aW9uIGNhbWxfaGV4c3RyaW5nX29mX2Zsb2F0ICh4LCBwcmVjLCBzdHlsZSkge1xuICBpZiAoIWlzRmluaXRlKHgpKSB7XG4gICAgaWYgKGlzTmFOKHgpKSByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcoXCJuYW5cIik7XG4gICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nICgoeCA+IDApP1wiaW5maW5pdHlcIjpcIi1pbmZpbml0eVwiKTtcbiAgfVxuICB2YXIgc2lnbiA9ICh4PT0wICYmIDEveCA9PSAtSW5maW5pdHkpPzE6KHg+PTApPzA6MTtcbiAgaWYoc2lnbikgeCA9IC14O1xuICB2YXIgZXhwID0gMDtcbiAgaWYgKHggPT0gMCkgeyB9XG4gIGVsc2UgaWYgKHggPCAxKSB7XG4gICAgd2hpbGUgKHggPCAxICYmIGV4cCA+IC0xMDIyKSAgeyB4ICo9IDI7IGV4cC0tIH1cbiAgfSBlbHNlIHtcbiAgICB3aGlsZSAoeCA+PSAyKSB7IHggLz0gMjsgZXhwKysgfVxuICB9XG4gIHZhciBleHBfc2lnbiA9IGV4cCA8IDAgPyAnJyA6ICcrJztcbiAgdmFyIHNpZ25fc3RyID0gJyc7XG4gIGlmIChzaWduKSBzaWduX3N0ciA9ICctJ1xuICBlbHNlIHtcbiAgICBzd2l0Y2goc3R5bGUpe1xuICAgIGNhc2UgNDMgLyogJysnICovOiBzaWduX3N0ciA9ICcrJzsgYnJlYWs7XG4gICAgY2FzZSAzMiAvKiAnICcgKi86IHNpZ25fc3RyID0gJyAnOyBicmVhaztcbiAgICBkZWZhdWx0OiBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKHByZWMgPj0gMCAmJiBwcmVjIDwgMTMpIHtcbiAgICAvKiBJZiBhIHByZWNpc2lvbiBpcyBnaXZlbiwgYW5kIGlzIHNtYWxsLCByb3VuZCBtYW50aXNzYSBhY2NvcmRpbmdseSAqL1xuICAgIHZhciBjc3QgPSBNYXRoLnBvdygyLHByZWMgKiA0KTtcbiAgICB4ID0gTWF0aC5yb3VuZCh4ICogY3N0KSAvIGNzdDtcbiAgfVxuICB2YXIgeF9zdHIgPSB4LnRvU3RyaW5nKDE2KTtcbiAgaWYocHJlYyA+PSAwKXtcbiAgICB2YXIgaWR4ID0geF9zdHIuaW5kZXhPZignLicpO1xuICAgIGlmKGlkeDwwKSB7XG4gICAgICB4X3N0ciArPSAnLicgKyBjYW1sX3N0cl9yZXBlYXQocHJlYywgJzAnKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB2YXIgc2l6ZSA9IGlkeCsxK3ByZWM7XG4gICAgICBpZih4X3N0ci5sZW5ndGggPCBzaXplKVxuICAgICAgICB4X3N0ciArPSBjYW1sX3N0cl9yZXBlYXQoc2l6ZSAtIHhfc3RyLmxlbmd0aCwgJzAnKTtcbiAgICAgIGVsc2VcbiAgICAgICAgeF9zdHIgPSB4X3N0ci5zdWJzdHIoMCxzaXplKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nIChzaWduX3N0ciArICcweCcgKyB4X3N0ciArICdwJyArIGV4cF9zaWduICsgZXhwLnRvU3RyaW5nKDEwKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0cyBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzICh4KSB7XG4gIHZhciBsbyA9IHgubG87XG4gIHZhciBtaSA9IHgubWk7XG4gIHZhciBoaSA9IHguaGk7XG4gIHZhciBleHAgPSAoaGkgJiAweDdmZmYpID4+IDQ7XG4gIGlmIChleHAgPT0gMjA0Nykge1xuICAgIGlmICgobG98bWl8KGhpJjB4ZikpID09IDApXG4gICAgICByZXR1cm4gKGhpICYgMHg4MDAwKT8oLUluZmluaXR5KTpJbmZpbml0eTtcbiAgICBlbHNlXG4gICAgICByZXR1cm4gTmFOO1xuICB9XG4gIHZhciBrID0gTWF0aC5wb3coMiwtMjQpO1xuICB2YXIgcmVzID0gKGxvKmsrbWkpKmsrKGhpJjB4Zik7XG4gIGlmIChleHAgPiAwKSB7XG4gICAgcmVzICs9IDE2O1xuICAgIHJlcyAqPSBNYXRoLnBvdygyLGV4cC0xMDI3KTtcbiAgfSBlbHNlXG4gICAgcmVzICo9IE1hdGgucG93KDIsLTEwMjYpO1xuICBpZiAoaGkgJiAweDgwMDApIHJlcyA9IC0gcmVzO1xuICByZXR1cm4gcmVzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX25leHRhZnRlcl9mbG9hdCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzLCBjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQsIGNhbWxfaW50NjRfYWRkLCBjYW1sX2ludDY0X3N1YixjYW1sX2ludDY0X29mX2ludDMyXG5mdW5jdGlvbiBjYW1sX25leHRhZnRlcl9mbG9hdCAoeCx5KSB7XG4gIGlmKGlzTmFOKHgpIHx8IGlzTmFOKHkpKSByZXR1cm4gTmFOO1xuICBpZih4PT15KSByZXR1cm4geTtcbiAgaWYoeD09MCl7XG4gICAgaWYoeSA8IDApXG4gICAgICByZXR1cm4gLU1hdGgucG93KDIsIC0xMDc0KVxuICAgIGVsc2VcbiAgICAgIHJldHVybiBNYXRoLnBvdygyLCAtMTA3NClcbiAgfVxuICB2YXIgYml0cyA9IGNhbWxfaW50NjRfYml0c19vZl9mbG9hdCh4KTtcbiAgdmFyIG9uZSA9IGNhbWxfaW50NjRfb2ZfaW50MzIoMSk7XG4gIGlmICgoeDx5KSA9PSAoeD4wKSlcbiAgICBiaXRzID0gY2FtbF9pbnQ2NF9hZGQoYml0cywgb25lKVxuICBlbHNlXG4gICAgYml0cyA9IGNhbWxfaW50NjRfc3ViKGJpdHMsIG9uZSlcbiAgcmV0dXJuIGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0cyhiaXRzKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF90cnVuY19mbG9hdFxuZnVuY3Rpb24gY2FtbF90cnVuY19mbG9hdCh4KXtcbiAgcmV0dXJuIE1hdGgudHJ1bmMoeCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW50MzJfZmxvYXRfb2ZfYml0cyBjb25zdFxuZnVuY3Rpb24gY2FtbF9pbnQzMl9mbG9hdF9vZl9iaXRzICh4KSB7XG4gIHZhciBpbnQzMmEgPSBuZXcgam9vX2dsb2JhbF9vYmplY3QuSW50MzJBcnJheSgxKTtcbiAgaW50MzJhWzBdID0geDtcbiAgdmFyIGZsb2F0MzJhID0gbmV3IGpvb19nbG9iYWxfb2JqZWN0LkZsb2F0MzJBcnJheShpbnQzMmEuYnVmZmVyKTtcbiAgcmV0dXJuIGZsb2F0MzJhWzBdO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NsYXNzaWZ5X2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2NsYXNzaWZ5X2Zsb2F0ICh4KSB7XG4gIGlmIChpc0Zpbml0ZSAoeCkpIHtcbiAgICBpZiAoTWF0aC5hYnMoeCkgPj0gMi4yMjUwNzM4NTg1MDcyMDE0ZS0zMDgpIHJldHVybiAwO1xuICAgIGlmICh4ICE9IDApIHJldHVybiAxO1xuICAgIHJldHVybiAyO1xuICB9XG4gIHJldHVybiBpc05hTih4KT80OjM7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX21vZGZfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfbW9kZl9mbG9hdCAoeCkge1xuICBpZiAoaXNGaW5pdGUgKHgpKSB7XG4gICAgdmFyIG5lZyA9ICgxL3gpIDwgMDtcbiAgICB4ID0gTWF0aC5hYnMoeCk7XG4gICAgdmFyIGkgPSBNYXRoLmZsb29yICh4KTtcbiAgICB2YXIgZiA9IHggLSBpO1xuICAgIGlmIChuZWcpIHsgaSA9IC1pOyBmID0gLWY7IH1cbiAgICByZXR1cm4gWzAsIGYsIGldO1xuICB9XG4gIGlmIChpc05hTiAoeCkpIHJldHVybiBbMCwgTmFOLCBOYU5dO1xuICByZXR1cm4gWzAsIDEveCwgeF07XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2xkZXhwX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2xkZXhwX2Zsb2F0ICh4LGV4cCkge1xuICBleHAgfD0gMDtcbiAgaWYgKGV4cCA+IDEwMjMpIHtcbiAgICBleHAgLT0gMTAyMztcbiAgICB4ICo9IE1hdGgucG93KDIsIDEwMjMpO1xuICAgIGlmIChleHAgPiAxMDIzKSB7ICAvLyBpbiBjYXNlIHggaXMgc3Vibm9ybWFsXG4gICAgICBleHAgLT0gMTAyMztcbiAgICAgIHggKj0gTWF0aC5wb3coMiwgMTAyMyk7XG4gICAgfVxuICB9XG4gIGlmIChleHAgPCAtMTAyMykge1xuICAgIGV4cCArPSAxMDIzO1xuICAgIHggKj0gTWF0aC5wb3coMiwgLTEwMjMpO1xuICB9XG4gIHggKj0gTWF0aC5wb3coMiwgZXhwKTtcbiAgcmV0dXJuIHg7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2ZyZXhwX2Zsb2F0IGNvbnN0XG4vL1JlcXVpcmVzOiBqc29vX2Zsb29yX2xvZzJcbmZ1bmN0aW9uIGNhbWxfZnJleHBfZmxvYXQgKHgpIHtcbiAgaWYgKCh4ID09IDApIHx8ICFpc0Zpbml0ZSh4KSkgcmV0dXJuIFswLCB4LCAwXTtcbiAgdmFyIG5lZyA9IHggPCAwO1xuICBpZiAobmVnKSB4ID0gLSB4O1xuICB2YXIgZXhwID0gTWF0aC5tYXgoLTEwMjMsIGpzb29fZmxvb3JfbG9nMih4KSArIDEpO1xuICB4ICo9IE1hdGgucG93KDIsLWV4cCk7XG4gIHdoaWxlICh4IDwgMC41KSB7XG4gICAgeCAqPSAyO1xuICAgIGV4cC0tO1xuICB9XG4gIHdoaWxlICh4ID49IDEpIHtcbiAgICB4ICo9IDAuNTtcbiAgICBleHArKztcbiAgfVxuICBpZiAobmVnKSB4ID0gLSB4O1xuICByZXR1cm4gWzAsIHgsIGV4cF07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZmxvYXRfY29tcGFyZSBjb25zdFxuZnVuY3Rpb24gY2FtbF9mbG9hdF9jb21wYXJlICh4LCB5KSB7XG4gIGlmICh4ID09PSB5KSByZXR1cm4gMDtcbiAgaWYgKHggPCB5KSByZXR1cm4gLTE7XG4gIGlmICh4ID4geSkgcmV0dXJuIDE7XG4gIGlmICh4ID09PSB4KSByZXR1cm4gMTtcbiAgaWYgKHkgPT09IHkpIHJldHVybiAtMTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY29weXNpZ25fZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfY29weXNpZ25fZmxvYXQgKHgsIHkpIHtcbiAgaWYgKHkgPT0gMCkgeSA9IDEgLyB5O1xuICB4ID0gTWF0aC5hYnMoeCk7XG4gIHJldHVybiAoeSA8IDApPygteCk6eDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zaWduYml0X2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX3NpZ25iaXRfZmxvYXQoeCkge1xuICBpZiAoeCA9PSAwKSB4ID0gMSAvIHg7XG4gIHJldHVybiAoeCA8IDApPzE6MDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9leHBtMV9mbG9hdCBjb25zdFxuZnVuY3Rpb24gY2FtbF9leHBtMV9mbG9hdCAoeCkgeyByZXR1cm4gTWF0aC5leHBtMSh4KTsgfVxuLy9Qcm92aWRlczogY2FtbF9leHAyX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2V4cDJfZmxvYXQoeCkgeyByZXR1cm4gTWF0aC5wb3coMiwgeCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfbG9nMXBfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfbG9nMXBfZmxvYXQoeCkgeyByZXR1cm4gTWF0aC5sb2cxcCh4KTsgfVxuLy9Qcm92aWRlczogY2FtbF9sb2cyX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2xvZzJfZmxvYXQoeCkgeyByZXR1cm4gTWF0aC5sb2cyKHgpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2h5cG90X2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2h5cG90X2Zsb2F0ICh4LCB5KSB7IHJldHVybiBNYXRoLmh5cG90KHgsIHkpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2xvZzEwX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2xvZzEwX2Zsb2F0ICh4KSB7IHJldHVybiBNYXRoLmxvZzEwKHgpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2Nvc2hfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfY29zaF9mbG9hdCAoeCkgeyByZXR1cm4gTWF0aC5jb3NoKHgpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2Fjb3NoX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2Fjb3NoX2Zsb2F0ICh4KSB7IHJldHVybiBNYXRoLmFjb3NoKHgpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX3NpbmhfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfc2luaF9mbG9hdCAoeCkgeyByZXR1cm4gTWF0aC5zaW5oKHgpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2FzaW5oX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2FzaW5oX2Zsb2F0ICh4KSB7IHJldHVybiBNYXRoLmFzaW5oKHgpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX3RhbmhfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfdGFuaF9mbG9hdCAoeCkgeyByZXR1cm4gTWF0aC50YW5oKHgpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2F0YW5oX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2F0YW5oX2Zsb2F0ICh4KSB7IHJldHVybiBNYXRoLmF0YW5oKHgpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX3JvdW5kX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX3JvdW5kX2Zsb2F0ICh4KSB7IHJldHVybiBNYXRoLnJvdW5kKHgpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2NicnRfZmxvYXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfY2JydF9mbG9hdCAoeCkgeyByZXR1cm4gTWF0aC5jYnJ0KHgpOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfZXJmX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2VyZl9mbG9hdCh4KSB7XG4gIHZhciBhMSA9IDAuMjU0ODI5NTkyO1xuICB2YXIgYTIgPSAtMC4yODQ0OTY3MzY7XG4gIHZhciBhMyA9IDEuNDIxNDEzNzQxO1xuICB2YXIgYTQgPSAtMS40NTMxNTIwMjc7XG4gIHZhciBhNSA9IDEuMDYxNDA1NDI5O1xuICB2YXIgcCA9IDAuMzI3NTkxMTtcblxuICB2YXIgc2lnbiA9IDE7XG4gIGlmICh4IDwgMCkge1xuICAgIHNpZ24gPSAtMTtcbiAgfVxuICB4ID0gTWF0aC5hYnMoeCk7XG4gIHZhciB0ID0gMS4wIC8gKDEuMCArIHAgKiB4KTtcbiAgdmFyIHkgPSAxLjAgLSAoKCgoYTUgKiB0ICsgYTQpICogdCArIGEzKSAqIHQgKyBhMikgKiB0ICsgYTEpICogdCAqIE1hdGguZXhwKC14ICogeCk7XG5cbiAgcmV0dXJuIHNpZ24gKiB5O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2VyZmNfZmxvYXQgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfZXJmX2Zsb2F0XG5mdW5jdGlvbiBjYW1sX2VyZmNfZmxvYXQoeCkge1xuICByZXR1cm4gMSAtIGNhbWxfZXJmX2Zsb2F0KHgpO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfZm1hX2Zsb2F0IGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ZtYV9mbG9hdCh4LCB5LCB6KSB7XG4gIHZhciBTUExJVCA9IE1hdGgucG93KDIsIDI3KSArIDE7XG4gIHZhciBNSU5fVkFMVUUgPSBNYXRoLnBvdygyLCAtMTAyMik7XG4gIHZhciBFUFNJTE9OID0gTWF0aC5wb3coMiwgLTUyKTtcbiAgdmFyIEMgPSA0MTY7XG4gIHZhciBBID0gTWF0aC5wb3coMiwgK0MpO1xuICB2YXIgQiA9IE1hdGgucG93KDIsIC1DKTtcblxuICBmdW5jdGlvbiBtdWx0aXBseSAoYSwgYikge1xuICAgIHZhciBhdCA9IFNQTElUICogYTtcbiAgICB2YXIgYWhpID0gYXQgLSAoYXQgLSBhKTtcbiAgICB2YXIgYWxvID0gYSAtIGFoaTtcbiAgICB2YXIgYnQgPSBTUExJVCAqIGI7XG4gICAgdmFyIGJoaSA9IGJ0IC0gKGJ0IC0gYik7XG4gICAgdmFyIGJsbyA9IGIgLSBiaGk7XG4gICAgdmFyIHAgPSBhICogYjtcbiAgICB2YXIgZSA9ICgoYWhpICogYmhpIC0gcCkgKyBhaGkgKiBibG8gKyBhbG8gKiBiaGkpICsgYWxvICogYmxvO1xuICAgIHJldHVybiB7XG4gICAgICBwOiBwLFxuICAgICAgZTogZVxuICAgIH07XG4gIH07XG5cbiAgZnVuY3Rpb24gYWRkIChhLCBiKSB7XG4gICAgdmFyIHMgPSBhICsgYjtcbiAgICB2YXIgdiA9IHMgLSBhO1xuICAgIHZhciBlID0gKGEgLSAocyAtIHYpKSArIChiIC0gdik7XG4gICAgcmV0dXJuIHtcbiAgICAgIHM6IHMsXG4gICAgICBlOiBlXG4gICAgfTtcbiAgfTtcblxuICBmdW5jdGlvbiBhZGp1c3QgKHgsIHkpIHtcbiAgICByZXR1cm4geCAhPT0gMCAmJiB5ICE9PSAwICYmIFNQTElUICogeCAtIChTUExJVCAqIHggLSB4KSA9PT0geCA/IHggKiAoMSArICh4IDwgMCA/IC0xIDogKzEpICogKHkgPCAwID8gLTEgOiArMSkgKiBFUFNJTE9OKSA6IHg7XG4gIH07XG5cbiAgaWYgKHggPT09IDAgfHwgeCAhPT0geCB8fCB4ID09PSArMSAvIDAgfHwgeCA9PT0gLTEgLyAwIHx8XG4gICAgICB5ID09PSAwIHx8IHkgIT09IHkgfHwgeSA9PT0gKzEgLyAwIHx8IHkgPT09IC0xIC8gMCkge1xuICAgIHJldHVybiB4ICogeSArIHo7XG4gIH1cbiAgaWYgKHogPT09IDApIHtcbiAgICByZXR1cm4geCAqIHk7XG4gIH1cbiAgaWYgKHogIT09IHogfHwgeiA9PT0gKzEgLyAwIHx8IHogPT09IC0xIC8gMCkge1xuICAgIHJldHVybiB6O1xuICB9XG5cbiAgdmFyIHNjYWxlID0gMTtcbiAgd2hpbGUgKE1hdGguYWJzKHgpID4gQSkge1xuICAgIHNjYWxlICo9IEE7XG4gICAgeCAqPSBCO1xuICB9XG4gIHdoaWxlIChNYXRoLmFicyh5KSA+IEEpIHtcbiAgICBzY2FsZSAqPSBBO1xuICAgIHkgKj0gQjtcbiAgfVxuICBpZiAoc2NhbGUgPT09IDEgLyAwKSB7XG4gICAgcmV0dXJuIHggKiB5ICogc2NhbGU7XG4gIH1cbiAgd2hpbGUgKE1hdGguYWJzKHgpIDwgQikge1xuICAgIHNjYWxlICo9IEI7XG4gICAgeCAqPSBBO1xuICB9XG4gIHdoaWxlIChNYXRoLmFicyh5KSA8IEIpIHtcbiAgICBzY2FsZSAqPSBCO1xuICAgIHkgKj0gQTtcbiAgfVxuICBpZiAoc2NhbGUgPT09IDApIHtcbiAgICByZXR1cm4gejtcbiAgfVxuXG4gIHZhciB4cyA9IHg7XG4gIHZhciB5cyA9IHk7XG4gIHZhciB6cyA9IHogLyBzY2FsZTtcblxuICBpZiAoTWF0aC5hYnMoenMpID4gTWF0aC5hYnMoeHMgKiB5cykgKiA0IC8gRVBTSUxPTikge1xuICAgIHJldHVybiB6O1xuICB9XG4gIGlmIChNYXRoLmFicyh6cykgPCBNYXRoLmFicyh4cyAqIHlzKSAqIEVQU0lMT04gLyA0ICogRVBTSUxPTiAvIDQpIHtcbiAgICB6cyA9ICh6IDwgMCA/IC0xIDogKzEpICogTUlOX1ZBTFVFO1xuICB9XG5cbiAgdmFyIHh5ID0gbXVsdGlwbHkoeHMsIHlzKTtcbiAgdmFyIHMgPSBhZGQoeHkucCwgenMpO1xuICB2YXIgdSA9IGFkZCh4eS5lLCBzLmUpO1xuICB2YXIgaSA9IGFkZChzLnMsIHUucyk7XG5cbiAgdmFyIGYgPSBpLnMgKyBhZGp1c3QoaS5lLCB1LmUpO1xuICBpZiAoZiA9PT0gMCkge1xuICAgIHJldHVybiBmO1xuICB9XG5cbiAgdmFyIGZzID0gZiAqIHNjYWxlO1xuICBpZiAoTWF0aC5hYnMoZnMpID4gTUlOX1ZBTFVFKSB7XG4gICAgcmV0dXJuIGZzO1xuICB9XG5cbiAgLy8gSXQgaXMgcG9zc2libGUgdGhhdCB0aGVyZSB3YXMgZXh0cmEgcm91bmRpbmcgZm9yIGEgZGVub3JtYWxpemVkIHZhbHVlLlxuICByZXR1cm4gZnMgKyBhZGp1c3QoZiAtIGZzIC8gc2NhbGUsIGkuZSkgKiBzY2FsZTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mb3JtYXRfZmxvYXQgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfcGFyc2VfZm9ybWF0LCBjYW1sX2ZpbmlzaF9mb3JtYXR0aW5nXG5mdW5jdGlvbiBjYW1sX2Zvcm1hdF9mbG9hdCAoZm10LCB4KSB7XG4gIGZ1bmN0aW9uIHRvRml4ZWQoeCxkcCkge1xuICAgIGlmIChNYXRoLmFicyh4KSA8IDEuMCkge1xuICAgICAgcmV0dXJuIHgudG9GaXhlZChkcCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBlID0gcGFyc2VJbnQoeC50b1N0cmluZygpLnNwbGl0KCcrJylbMV0pO1xuICAgICAgaWYgKGUgPiAyMCkge1xuICAgICAgICBlIC09IDIwO1xuICAgICAgICB4IC89IE1hdGgucG93KDEwLGUpO1xuICAgICAgICB4ICs9IChuZXcgQXJyYXkoZSsxKSkuam9pbignMCcpO1xuICAgICAgICBpZihkcCA+IDApIHtcbiAgICAgICAgICB4ID0geCArICcuJyArIChuZXcgQXJyYXkoZHArMSkpLmpvaW4oJzAnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geDtcbiAgICAgIH1cbiAgICAgIGVsc2UgcmV0dXJuIHgudG9GaXhlZChkcClcbiAgICB9XG4gIH1cbiAgdmFyIHMsIGYgPSBjYW1sX3BhcnNlX2Zvcm1hdChmbXQpO1xuICB2YXIgcHJlYyA9IChmLnByZWMgPCAwKT82OmYucHJlYztcbiAgaWYgKHggPCAwIHx8ICh4ID09IDAgJiYgMS94ID09IC1JbmZpbml0eSkpIHsgZi5zaWduID0gLTE7IHggPSAteDsgfVxuICBpZiAoaXNOYU4oeCkpIHsgcyA9IFwibmFuXCI7IGYuZmlsbGVyID0gJyAnOyB9XG4gIGVsc2UgaWYgKCFpc0Zpbml0ZSh4KSkgeyBzID0gXCJpbmZcIjsgZi5maWxsZXIgPSAnICc7IH1cbiAgZWxzZVxuICAgIHN3aXRjaCAoZi5jb252KSB7XG4gICAgY2FzZSAnZSc6XG4gICAgICB2YXIgcyA9IHgudG9FeHBvbmVudGlhbChwcmVjKTtcbiAgICAgIC8vIGV4cG9uZW50IHNob3VsZCBiZSBhdCBsZWFzdCB0d28gZGlnaXRzXG4gICAgICB2YXIgaSA9IHMubGVuZ3RoO1xuICAgICAgaWYgKHMuY2hhckF0KGkgLSAzKSA9PSAnZScpXG4gICAgICAgIHMgPSBzLnNsaWNlICgwLCBpIC0gMSkgKyAnMCcgKyBzLnNsaWNlIChpIC0gMSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdmJzpcbiAgICAgIHMgPSB0b0ZpeGVkKHgsIHByZWMpOyBicmVhaztcbiAgICBjYXNlICdnJzpcbiAgICAgIHByZWMgPSBwcmVjP3ByZWM6MTtcbiAgICAgIHMgPSB4LnRvRXhwb25lbnRpYWwocHJlYyAtIDEpO1xuICAgICAgdmFyIGogPSBzLmluZGV4T2YoJ2UnKTtcbiAgICAgIHZhciBleHAgPSArcy5zbGljZShqICsgMSk7XG4gICAgICBpZiAoZXhwIDwgLTQgfHwgeCA+PSAxZTIxIHx8IHgudG9GaXhlZCgwKS5sZW5ndGggPiBwcmVjKSB7XG4gICAgICAgIC8vIHJlbW92ZSB0cmFpbGluZyB6ZXJvZXNcbiAgICAgICAgdmFyIGkgPSBqIC0gMTsgd2hpbGUgKHMuY2hhckF0KGkpID09ICcwJykgaS0tO1xuICAgICAgICBpZiAocy5jaGFyQXQoaSkgPT0gJy4nKSBpLS07XG4gICAgICAgIHMgPSBzLnNsaWNlKDAsIGkgKyAxKSArIHMuc2xpY2Uoaik7XG4gICAgICAgIGkgPSBzLmxlbmd0aDtcbiAgICAgICAgaWYgKHMuY2hhckF0KGkgLSAzKSA9PSAnZScpXG4gICAgICAgICAgcyA9IHMuc2xpY2UgKDAsIGkgLSAxKSArICcwJyArIHMuc2xpY2UgKGkgLSAxKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcCA9IHByZWM7XG4gICAgICAgIGlmIChleHAgPCAwKSB7IHAgLT0gZXhwICsgMTsgcyA9IHgudG9GaXhlZChwKTsgfVxuICAgICAgICBlbHNlIHdoaWxlIChzID0geC50b0ZpeGVkKHApLCBzLmxlbmd0aCA+IHByZWMgKyAxKSBwLS07XG4gICAgICAgIGlmIChwKSB7XG4gICAgICAgICAgLy8gcmVtb3ZlIHRyYWlsaW5nIHplcm9lc1xuICAgICAgICAgIHZhciBpID0gcy5sZW5ndGggLSAxOyB3aGlsZSAocy5jaGFyQXQoaSkgPT0gJzAnKSBpLS07XG4gICAgICAgICAgaWYgKHMuY2hhckF0KGkpID09ICcuJykgaS0tO1xuICAgICAgICAgIHMgPSBzLnNsaWNlKDAsIGkgKyAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICByZXR1cm4gY2FtbF9maW5pc2hfZm9ybWF0dGluZyhmLCBzKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mbG9hdF9vZl9zdHJpbmcgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aCwgY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9mbG9hdF9vZl9zdHJpbmcocykge1xuICB2YXIgcmVzO1xuICBzID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhzKVxuICByZXMgPSArcztcbiAgaWYgKChzLmxlbmd0aCA+IDApICYmIChyZXMgPT09IHJlcykpIHJldHVybiByZXM7XG4gIHMgPSBzLnJlcGxhY2UoL18vZyxcIlwiKTtcbiAgcmVzID0gK3M7XG4gIGlmICgoKHMubGVuZ3RoID4gMCkgJiYgKHJlcyA9PT0gcmVzKSkgfHwgL15bKy1dP25hbiQvaS50ZXN0KHMpKSByZXR1cm4gcmVzO1xuICB2YXIgbSA9IC9eICooWystXT8pMHgoWzAtOWEtZl0rKVxcLj8oWzAtOWEtZl0qKXAoWystXT9bMC05XSspL2kuZXhlYyhzKTtcbiAgLy8gICAgICAgICAgMSAgICAgICAgMiAgICAgICAgICAgICAzICAgICAgICAgICA0XG4gIGlmKG0pe1xuICAgIHZhciBtMyA9IG1bM10ucmVwbGFjZSgvMCskLywnJyk7XG4gICAgdmFyIG1hbnRpc3NhID0gcGFyc2VJbnQobVsxXSArIG1bMl0gKyBtMywgMTYpO1xuICAgIHZhciBleHBvbmVudCA9IChtWzRdfDApIC0gNCptMy5sZW5ndGg7XG4gICAgcmVzID0gbWFudGlzc2EgKiBNYXRoLnBvdygyLCBleHBvbmVudCk7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICBpZigvXlxcKz9pbmYoaW5pdHkpPyQvaS50ZXN0KHMpKSByZXR1cm4gSW5maW5pdHk7XG4gIGlmKC9eLWluZihpbml0eSk/JC9pLnRlc3QocykpIHJldHVybiAtSW5maW5pdHk7XG4gIGNhbWxfZmFpbHdpdGgoXCJmbG9hdF9vZl9zdHJpbmdcIik7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTQgSsOpcsO0bWUgVm91aWxsb24sIEh1Z28gSGV1emFyZFxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vLy8vLy8vLy8vLy8vIER1bW15IGZpbGVzeXN0ZW1cblxuLy9Qcm92aWRlczogY2FtbF90cmFpbGluZ19zbGFzaFxuZnVuY3Rpb24gY2FtbF90cmFpbGluZ19zbGFzaChuYW1lKXtcbiAgcmV0dXJuIChuYW1lLnNsaWNlKC0xKSAhPT0gXCIvXCIpID8gKG5hbWUgKyBcIi9cIikgOiBuYW1lO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2N1cnJlbnRfZGlyXG4vL1JlcXVpcmVzOiBjYW1sX3RyYWlsaW5nX3NsYXNoXG5pZihqb29fZ2xvYmFsX29iamVjdC5wcm9jZXNzICYmIGpvb19nbG9iYWxfb2JqZWN0LnByb2Nlc3MuY3dkKVxuICB2YXIgY2FtbF9jdXJyZW50X2RpciA9IGpvb19nbG9iYWxfb2JqZWN0LnByb2Nlc3MuY3dkKCkucmVwbGFjZSgvXFxcXC9nLCcvJyk7XG5lbHNlXG4gIHZhciBjYW1sX2N1cnJlbnRfZGlyID0gIFwiL3N0YXRpY1wiO1xuY2FtbF9jdXJyZW50X2RpciA9IGNhbWxfdHJhaWxpbmdfc2xhc2goY2FtbF9jdXJyZW50X2Rpcik7XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ2V0X3Jvb3Rcbi8vUmVxdWlyZXM6IHBhdGhfaXNfYWJzb2x1dGVcbmZ1bmN0aW9uIGNhbWxfZ2V0X3Jvb3QocGF0aCl7XG4gIHZhciB4ID0gcGF0aF9pc19hYnNvbHV0ZShwYXRoKTtcbiAgaWYgKCF4KSByZXR1cm47XG4gIHJldHVybiB4WzBdICsgXCIvXCJ9XG5cbi8vUHJvdmlkZXM6IGNhbWxfcm9vdFxuLy9SZXF1aXJlczogY2FtbF9nZXRfcm9vdCwgY2FtbF9jdXJyZW50X2RpciwgY2FtbF9mYWlsd2l0aFxudmFyIGNhbWxfcm9vdCA9IGNhbWxfZ2V0X3Jvb3QoY2FtbF9jdXJyZW50X2RpcikgfHwgY2FtbF9mYWlsd2l0aChcInVuYWJsZSB0byBjb21wdXRlIGNhbWxfcm9vdFwiKTtcblxuXG4vL1Byb3ZpZGVzOiBNbEZpbGVcbmZ1bmN0aW9uIE1sRmlsZSgpeyAgfVxuXG4vL1Byb3ZpZGVzOiBwYXRoX2lzX2Fic29sdXRlXG5mdW5jdGlvbiBtYWtlX3BhdGhfaXNfYWJzb2x1dGUoKSB7XG4gIGZ1bmN0aW9uIHBvc2l4KHBhdGgpIHtcbiAgICBpZiAocGF0aC5jaGFyQXQoMCkgPT09ICcvJykgcmV0dXJuIFtcIlwiLCBwYXRoLnN1YnN0cmluZygxKV07XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZnVuY3Rpb24gd2luMzIocGF0aCkge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL2IzZmNjMjQ1ZmIyNTUzOTkwOWVmMWQ1ZWFhMDFkYmY5MmUxNjg2MzMvbGliL3BhdGguanMjTDU2XG4gICAgdmFyIHNwbGl0RGV2aWNlUmUgPSAvXihbYS16QS1aXTp8W1xcXFwvXXsyfVteXFxcXC9dK1tcXFxcL10rW15cXFxcL10rKT8oW1xcXFwvXSk/KFtcXHNcXFNdKj8pJC87XG4gICAgdmFyIHJlc3VsdCA9IHNwbGl0RGV2aWNlUmUuZXhlYyhwYXRoKTtcbiAgICB2YXIgZGV2aWNlID0gcmVzdWx0WzFdIHx8ICcnO1xuICAgIHZhciBpc1VuYyA9IEJvb2xlYW4oZGV2aWNlICYmIGRldmljZS5jaGFyQXQoMSkgIT09ICc6Jyk7XG5cbiAgICAvLyBVTkMgcGF0aHMgYXJlIGFsd2F5cyBhYnNvbHV0ZVxuICAgIGlmIChCb29sZWFuKHJlc3VsdFsyXSB8fCBpc1VuYykpIHtcbiAgICAgIHZhciByb290ID0gKHJlc3VsdFsxXSB8fCAnJyk7XG4gICAgICB2YXIgc2VwID0gKHJlc3VsdFsyXSB8fCAnJyk7XG4gICAgICByZXR1cm4gW3Jvb3QsIHBhdGguc3Vic3RyaW5nKHJvb3QubGVuZ3RoICsgc2VwLmxlbmd0aCldXG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuICBpZihqb29fZ2xvYmFsX29iamVjdC5wcm9jZXNzICYmIGpvb19nbG9iYWxfb2JqZWN0LnByb2Nlc3MucGxhdGZvcm0pIHtcbiAgICByZXR1cm4gam9vX2dsb2JhbF9vYmplY3QucHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJyA/IHdpbjMyIDogcG9zaXg7XG4gIH1cbiAgZWxzZSByZXR1cm4gcG9zaXhcbn1cbnZhciBwYXRoX2lzX2Fic29sdXRlID0gbWFrZV9wYXRoX2lzX2Fic29sdXRlKCk7XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWFrZV9wYXRoXG4vL1JlcXVpcmVzOiBjYW1sX2N1cnJlbnRfZGlyXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZywgcGF0aF9pc19hYnNvbHV0ZVxuZnVuY3Rpb24gY2FtbF9tYWtlX3BhdGggKG5hbWUpIHtcbiAgbmFtZT1jYW1sX2pzc3RyaW5nX29mX3N0cmluZyhuYW1lKTtcbiAgaWYoICFwYXRoX2lzX2Fic29sdXRlKG5hbWUpIClcbiAgICBuYW1lID0gY2FtbF9jdXJyZW50X2RpciArIG5hbWU7XG4gIHZhciBjb21wMCA9IHBhdGhfaXNfYWJzb2x1dGUobmFtZSk7XG4gIHZhciBjb21wID0gY29tcDBbMV0uc3BsaXQoXCIvXCIpO1xuICB2YXIgbmNvbXAgPSBbXVxuICBmb3IodmFyIGkgPSAwOyBpPGNvbXAubGVuZ3RoOyBpKyspe1xuICAgIHN3aXRjaChjb21wW2ldKXtcbiAgICBjYXNlIFwiLi5cIjogaWYobmNvbXAubGVuZ3RoPjEpIG5jb21wLnBvcCgpOyBicmVhaztcbiAgICBjYXNlIFwiLlwiOiBicmVhaztcbiAgICBkZWZhdWx0OiBuY29tcC5wdXNoKGNvbXBbaV0pO2JyZWFrXG4gICAgfVxuICB9XG4gIG5jb21wLnVuc2hpZnQoY29tcDBbMF0pO1xuICBuY29tcC5vcmlnID0gbmFtZTtcbiAgcmV0dXJuIG5jb21wO1xufVxuXG4vL1Byb3ZpZGVzOmpzb29fbW91bnRfcG9pbnRcbi8vUmVxdWlyZXM6IE1sRmFrZURldmljZSwgTWxOb2RlRGV2aWNlLCBjYW1sX3Jvb3QsIGZzX25vZGVfc3VwcG9ydGVkXG52YXIganNvb19tb3VudF9wb2ludCA9IFtdXG5pZiAoZnNfbm9kZV9zdXBwb3J0ZWQoKSkge1xuICBqc29vX21vdW50X3BvaW50LnB1c2goe3BhdGg6Y2FtbF9yb290LGRldmljZTpuZXcgTWxOb2RlRGV2aWNlKGNhbWxfcm9vdCl9KTtcbn0gZWxzZSB7XG4gIGpzb29fbW91bnRfcG9pbnQucHVzaCh7cGF0aDpjYW1sX3Jvb3QsZGV2aWNlOm5ldyBNbEZha2VEZXZpY2UoY2FtbF9yb290KX0pO1xufVxuanNvb19tb3VudF9wb2ludC5wdXNoKHtwYXRoOlwiL3N0YXRpYy9cIiwgZGV2aWNlOm5ldyBNbEZha2VEZXZpY2UoXCIvc3RhdGljL1wiKX0pO1xuXG4vL1Byb3ZpZGVzOmNhbWxfbGlzdF9tb3VudF9wb2ludFxuLy9SZXF1aXJlczoganNvb19tb3VudF9wb2ludCwgY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9saXN0X21vdW50X3BvaW50KCl7XG4gIHZhciBwcmV2ID0gMFxuICBmb3IodmFyIGkgPSAwOyBpIDwganNvb19tb3VudF9wb2ludC5sZW5ndGg7IGkrKyl7XG4gICAgdmFyIG9sZCA9IHByZXY7XG4gICAgcHJldiA9IFswLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKGpzb29fbW91bnRfcG9pbnRbaV0ucGF0aCksIG9sZF1cbiAgfVxuICByZXR1cm4gcHJldjtcbn1cblxuLy9Qcm92aWRlczogcmVzb2x2ZV9mc19kZXZpY2Vcbi8vUmVxdWlyZXM6IGNhbWxfbWFrZV9wYXRoLCBqc29vX21vdW50X3BvaW50LCBjYW1sX3JhaXNlX3N5c19lcnJvciwgY2FtbF9nZXRfcm9vdCwgTWxOb2RlRGV2aWNlLCBjYW1sX3RyYWlsaW5nX3NsYXNoXG5mdW5jdGlvbiByZXNvbHZlX2ZzX2RldmljZShuYW1lKXtcbiAgdmFyIHBhdGggPSBjYW1sX21ha2VfcGF0aChuYW1lKTtcbiAgdmFyIG5hbWUgPSBwYXRoLmpvaW4oXCIvXCIpO1xuICB2YXIgbmFtZV9zbGFzaCA9IGNhbWxfdHJhaWxpbmdfc2xhc2gobmFtZSk7XG4gIHZhciByZXM7XG4gIGZvcih2YXIgaSA9IDA7IGkgPCBqc29vX21vdW50X3BvaW50Lmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIG0gPSBqc29vX21vdW50X3BvaW50W2ldO1xuICAgIGlmKG5hbWVfc2xhc2guc2VhcmNoKG0ucGF0aCkgPT0gMFxuICAgICAgICYmICghcmVzIHx8IHJlcy5wYXRoLmxlbmd0aCA8IG0ucGF0aC5sZW5ndGgpKVxuICAgICAgcmVzID0ge3BhdGg6bS5wYXRoLGRldmljZTptLmRldmljZSxyZXN0Om5hbWUuc3Vic3RyaW5nKG0ucGF0aC5sZW5ndGgsbmFtZS5sZW5ndGgpfTtcbiAgfVxuICBpZiggIXJlcykge1xuICAgIHZhciByb290ID0gY2FtbF9nZXRfcm9vdChuYW1lKTtcbiAgICBpZiAocm9vdCAmJiByb290Lm1hdGNoKC9eW2EtekEtWl06XFwvJC8pKXtcbiAgICAgIHZhciBtID0ge3BhdGg6cm9vdCxkZXZpY2U6bmV3IE1sTm9kZURldmljZShyb290KX07XG4gICAgICBqc29vX21vdW50X3BvaW50LnB1c2gobSk7XG4gICAgICByZXMgPSB7cGF0aDptLnBhdGgsZGV2aWNlOm0uZGV2aWNlLHJlc3Q6bmFtZS5zdWJzdHJpbmcobS5wYXRoLmxlbmd0aCxuYW1lLmxlbmd0aCl9O1xuICAgIH1cbiAgfVxuICBpZiggcmVzICkgcmV0dXJuIHJlcztcbiAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoXCJubyBkZXZpY2UgZm91bmQgZm9yIFwiICsgbmFtZV9zbGFzaCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbW91bnRfYXV0b2xvYWRcbi8vUmVxdWlyZXM6IE1sRmFrZURldmljZSwgY2FtbF9tYWtlX3BhdGgsIGpzb29fbW91bnRfcG9pbnQsIGNhbWxfdHJhaWxpbmdfc2xhc2hcbmZ1bmN0aW9uIGNhbWxfbW91bnRfYXV0b2xvYWQobmFtZSxmKXtcbiAgdmFyIHBhdGggPSBjYW1sX21ha2VfcGF0aChuYW1lKTtcbiAgdmFyIG5hbWUgPSBjYW1sX3RyYWlsaW5nX3NsYXNoKHBhdGguam9pbihcIi9cIikpO1xuICBqc29vX21vdW50X3BvaW50LnB1c2goe3BhdGg6bmFtZSxkZXZpY2U6bmV3IE1sRmFrZURldmljZShuYW1lLGYpfSlcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfdW5tb3VudFxuLy9SZXF1aXJlczoganNvb19tb3VudF9wb2ludCwgY2FtbF9tYWtlX3BhdGgsIGNhbWxfdHJhaWxpbmdfc2xhc2hcbmZ1bmN0aW9uIGNhbWxfdW5tb3VudChuYW1lKXtcbiAgdmFyIHBhdGggPSBjYW1sX21ha2VfcGF0aChuYW1lKTtcbiAgdmFyIG5hbWUgPSBjYW1sX3RyYWlsaW5nX3NsYXNoKHBhdGguam9pbihcIi9cIikpO1xuICB2YXIgaWR4ID0gLTE7XG4gIGZvcih2YXIgaSA9IDA7IGkgPCBqc29vX21vdW50X3BvaW50Lmxlbmd0aDsgaSsrKVxuICAgIGlmKGpzb29fbW91bnRfcG9pbnRbaV0ucGF0aCA9PSBuYW1lKSBpZHggPSBpO1xuICBpZihpZHggPiAtMSkganNvb19tb3VudF9wb2ludC5zcGxpY2UoaWR4LDEpO1xuICByZXR1cm4gMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19nZXRjd2Rcbi8vUmVxdWlyZXM6IGNhbWxfY3VycmVudF9kaXIsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfc3lzX2dldGN3ZCgpIHtcbiAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoY2FtbF9jdXJyZW50X2Rpcik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NoZGlyXG4vL1JlcXVpcmVzOiBjYW1sX2N1cnJlbnRfZGlyLCBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZSwgcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfdHJhaWxpbmdfc2xhc2hcbmZ1bmN0aW9uIGNhbWxfc3lzX2NoZGlyKGRpcikge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKGRpcik7XG4gIGlmKHJvb3QuZGV2aWNlLmV4aXN0cyhyb290LnJlc3QpKSB7XG4gICAgaWYocm9vdC5yZXN0KSBjYW1sX2N1cnJlbnRfZGlyID0gY2FtbF90cmFpbGluZ19zbGFzaChyb290LnBhdGggKyByb290LnJlc3QpO1xuICAgIGVsc2UgY2FtbF9jdXJyZW50X2RpciA9IHJvb3QucGF0aDtcbiAgICByZXR1cm4gMDtcbiAgfVxuICBlbHNlIHtcbiAgICBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZShkaXIpO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2Vfbm9fc3VjaF9maWxlXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvclxuLy9SZXF1aXJlczogY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUobmFtZSl7XG4gIG5hbWUgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKG5hbWUpO1xuICBjYW1sX3JhaXNlX3N5c19lcnJvciAobmFtZSArIFwiOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3JhaXNlX25vdF9hX2RpclxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9zeXNfZXJyb3Jcbi8vUmVxdWlyZXM6IGNhbWxfanNieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfcmFpc2Vfbm90X2FfZGlyKG5hbWUpe1xuICBuYW1lID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhuYW1lKTtcbiAgY2FtbF9yYWlzZV9zeXNfZXJyb3IgKG5hbWUgKyBcIjogTm90IGEgZGlyZWN0b3J5XCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19maWxlX2V4aXN0c1xuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2VcbmZ1bmN0aW9uIGNhbWxfc3lzX2ZpbGVfZXhpc3RzIChuYW1lKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIHJldHVybiByb290LmRldmljZS5leGlzdHMocm9vdC5yZXN0KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfcmVhZF9kaXJlY3Rvcnlcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfbm90X2FfZGlyLCByZXNvbHZlX2ZzX2RldmljZVxuZnVuY3Rpb24gY2FtbF9zeXNfcmVhZF9kaXJlY3RvcnkobmFtZSl7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIHZhciBhID0gcm9vdC5kZXZpY2UucmVhZGRpcihyb290LnJlc3QpO1xuICB2YXIgbCA9IG5ldyBBcnJheShhLmxlbmd0aCArIDEpO1xuICBsWzBdID0gMDtcbiAgZm9yKHZhciBpPTA7aTxhLmxlbmd0aDtpKyspXG4gICAgbFtpKzFdID0gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhhW2ldKTtcbiAgcmV0dXJuIGw7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX3JlbW92ZVxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGUsIHJlc29sdmVfZnNfZGV2aWNlXG5mdW5jdGlvbiBjYW1sX3N5c19yZW1vdmUobmFtZSl7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIHZhciBvayA9IHJvb3QuZGV2aWNlLnVubGluayhyb290LnJlc3QpO1xuICBpZihvayA9PSAwKSBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZShuYW1lKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2lzX2RpcmVjdG9yeVxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2VcbmZ1bmN0aW9uIGNhbWxfc3lzX2lzX2RpcmVjdG9yeShuYW1lKXtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgdmFyIGEgPSByb290LmRldmljZS5pc19kaXIocm9vdC5yZXN0KTtcbiAgcmV0dXJuIGE/MTowO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19yZW5hbWVcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGgsIHJlc29sdmVfZnNfZGV2aWNlXG5mdW5jdGlvbiBjYW1sX3N5c19yZW5hbWUobyxuKXtcbiAgdmFyIG9fcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG8pO1xuICB2YXIgbl9yb290ID0gcmVzb2x2ZV9mc19kZXZpY2Uobik7XG4gIGlmKG9fcm9vdC5kZXZpY2UgIT0gbl9yb290LmRldmljZSlcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9zeXNfcmVuYW1lOiBjYW5ub3QgbW92ZSBmaWxlIGJldHdlZW4gdHdvIGZpbGVzeXN0ZW1cIik7XG4gIGlmKCFvX3Jvb3QuZGV2aWNlLnJlbmFtZSlcbiAgICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9zeXNfcmVuYW1lOiBubyBpbXBsZW1lbnRlZFwiKTtcbiAgb19yb290LmRldmljZS5yZW5hbWUob19yb290LnJlc3QsIG5fcm9vdC5yZXN0KTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfbWtkaXJcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX3JhaXNlX3N5c19lcnJvclxuZnVuY3Rpb24gY2FtbF9zeXNfbWtkaXIobmFtZSwgcGVybSl7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIHJvb3QuZGV2aWNlLm1rZGlyKHJvb3QucmVzdCxwZXJtKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX3JtZGlyXG4vL1JlcXVpcmVzOiByZXNvbHZlX2ZzX2RldmljZSwgY2FtbF9yYWlzZV9zeXNfZXJyb3IsIGNhbWxfcmFpc2Vfbm90X2FfZGlyXG5mdW5jdGlvbiBjYW1sX3N5c19ybWRpcihuYW1lKXtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgcm9vdC5kZXZpY2Uucm1kaXIocm9vdC5yZXN0KTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfbWFwX2ZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfYmFfbWFwX2ZpbGUodmZkLCBraW5kLCBsYXlvdXQsIHNoYXJlZCwgZGltcywgcG9zKSB7XG4gIC8vIHZhciBkYXRhID0gY2FtbF9nbG9iYWxfZGF0YS5mZHNbdmZkXTtcbiAgY2FtbF9mYWlsd2l0aChcImNhbWxfYmFfbWFwX2ZpbGUgbm90IGltcGxlbWVudGVkXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX21hcF9maWxlX2J5dGVjb2RlXG4vL1JlcXVpcmVzOiBjYW1sX2JhX21hcF9maWxlXG5mdW5jdGlvbiBjYW1sX2JhX21hcF9maWxlX2J5dGVjb2RlKGFyZ3YsYXJnbil7XG4gIHJldHVybiBjYW1sX2JhX21hcF9maWxlKGFyZ3ZbMF0sYXJndlsxXSxhcmd2WzJdLGFyZ3ZbM10sYXJndls0XSxhcmd2WzVdKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jcmVhdGVfZmlsZV9leHRlcm5cbmZ1bmN0aW9uIGNhbWxfY3JlYXRlX2ZpbGVfZXh0ZXJuKG5hbWUsY29udGVudCl7XG4gIGlmKGpvb19nbG9iYWxfb2JqZWN0LmNhbWxfY3JlYXRlX2ZpbGUpXG4gICAgam9vX2dsb2JhbF9vYmplY3QuY2FtbF9jcmVhdGVfZmlsZShuYW1lLGNvbnRlbnQpO1xuICBlbHNlIHtcbiAgICBpZigham9vX2dsb2JhbF9vYmplY3QuY2FtbF9mc190bXApIGpvb19nbG9iYWxfb2JqZWN0LmNhbWxfZnNfdG1wID0gW107XG4gICAgam9vX2dsb2JhbF9vYmplY3QuY2FtbF9mc190bXAucHVzaCh7bmFtZTpuYW1lLGNvbnRlbnQ6Y29udGVudH0pO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ZzX2luaXRcbi8vUmVxdWlyZXM6IGNhbWxfY3JlYXRlX2ZpbGVcbmZ1bmN0aW9uIGNhbWxfZnNfaW5pdCAoKXtcbiAgdmFyIHRtcD1qb29fZ2xvYmFsX29iamVjdC5jYW1sX2ZzX3RtcFxuICBpZih0bXApe1xuICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0bXAubGVuZ3RoOyBpKyspe1xuICAgICAgY2FtbF9jcmVhdGVfZmlsZSh0bXBbaV0ubmFtZSx0bXBbaV0uY29udGVudCk7XG4gICAgfVxuICB9XG4gIGpvb19nbG9iYWxfb2JqZWN0LmNhbWxfY3JlYXRlX2ZpbGUgPSBjYW1sX2NyZWF0ZV9maWxlO1xuICBqb29fZ2xvYmFsX29iamVjdC5jYW1sX2ZzX3RtcCA9IFtdO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jcmVhdGVfZmlsZVxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aCwgcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfY3JlYXRlX2ZpbGUobmFtZSxjb250ZW50KSB7XG4gIHZhciBuYW1lID0gKHR5cGVvZiBuYW1lID09IFwic3RyaW5nXCIpP2NhbWxfc3RyaW5nX29mX2pzYnl0ZXMobmFtZSk6bmFtZTtcbiAgdmFyIGNvbnRlbnQgPSAodHlwZW9mIGNvbnRlbnQgPT0gXCJzdHJpbmdcIik/Y2FtbF9zdHJpbmdfb2ZfanNieXRlcyhjb250ZW50KTpjb250ZW50O1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICBpZighIHJvb3QuZGV2aWNlLnJlZ2lzdGVyKSBjYW1sX2ZhaWx3aXRoKFwiY2Fubm90IHJlZ2lzdGVyIGZpbGVcIik7XG4gIHJvb3QuZGV2aWNlLnJlZ2lzdGVyKHJvb3QucmVzdCxjb250ZW50KTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfcmVhZF9maWxlX2NvbnRlbnRcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZSwgY2FtbF9jcmVhdGVfYnl0ZXMsIGNhbWxfc3RyaW5nX29mX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX3JlYWRfZmlsZV9jb250ZW50IChuYW1lKSB7XG4gIHZhciBuYW1lID0gKHR5cGVvZiBuYW1lID09IFwic3RyaW5nXCIpP2NhbWxfc3RyaW5nX29mX2pzYnl0ZXMobmFtZSk6bmFtZTtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgaWYocm9vdC5kZXZpY2UuZXhpc3RzKHJvb3QucmVzdCkpIHtcbiAgICB2YXIgZmlsZSA9IHJvb3QuZGV2aWNlLm9wZW4ocm9vdC5yZXN0LHtyZG9ubHk6MX0pO1xuICAgIHZhciBsZW4gID0gZmlsZS5sZW5ndGgoKTtcbiAgICB2YXIgYnVmICA9IGNhbWxfY3JlYXRlX2J5dGVzKGxlbik7XG4gICAgZmlsZS5yZWFkKDAsYnVmLDAsbGVuKTtcbiAgICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfYnl0ZXMoYnVmKVxuICB9XG4gIGNhbWxfcmFpc2Vfbm9fc3VjaF9maWxlKG5hbWUpO1xufVxuIiwiLy9Qcm92aWRlczogdW5peF9nZXR0aW1lb2ZkYXlcbmZ1bmN0aW9uIHVuaXhfZ2V0dGltZW9mZGF5ICgpIHtcbiAgcmV0dXJuIChuZXcgRGF0ZSgpKS5nZXRUaW1lKCkgLyAxMDAwO1xufVxuXG4vL1Byb3ZpZGVzOiB1bml4X3RpbWVcbi8vUmVxdWlyZXM6IHVuaXhfZ2V0dGltZW9mZGF5XG5mdW5jdGlvbiB1bml4X3RpbWUgKCkge1xuICByZXR1cm4gTWF0aC5mbG9vcih1bml4X2dldHRpbWVvZmRheSAoKSk7XG59XG5cbi8vUHJvdmlkZXM6IHVuaXhfZ210aW1lXG5mdW5jdGlvbiB1bml4X2dtdGltZSAodCkge1xuICB2YXIgZCA9IG5ldyBEYXRlICh0ICogMTAwMCk7XG4gIHZhciBkX251bSA9IGQuZ2V0VGltZSgpO1xuICB2YXIgamFudWFyeWZpcnN0ID0gKG5ldyBEYXRlKERhdGUuVVRDKGQuZ2V0VVRDRnVsbFllYXIoKSwgMCwgMSkpKS5nZXRUaW1lKCk7XG4gIHZhciBkb3kgPSBNYXRoLmZsb29yKChkX251bSAtIGphbnVhcnlmaXJzdCkgLyA4NjQwMDAwMCk7XG4gIHJldHVybiBCTE9DSygwLCBkLmdldFVUQ1NlY29uZHMoKSwgZC5nZXRVVENNaW51dGVzKCksIGQuZ2V0VVRDSG91cnMoKSxcbiAgICAgICAgICAgICAgIGQuZ2V0VVRDRGF0ZSgpLCBkLmdldFVUQ01vbnRoKCksIGQuZ2V0VVRDRnVsbFllYXIoKSAtIDE5MDAsXG4gICAgICAgICAgICAgICBkLmdldFVUQ0RheSgpLCBkb3ksXG4gICAgICAgICAgICAgICBmYWxzZSB8IDAgLyogZm9yIFVUQyBkYXlsaWdodCBzYXZpbmdzIHRpbWUgaXMgZmFsc2UgKi8pXG59XG5cbi8vUHJvdmlkZXM6IHVuaXhfbG9jYWx0aW1lXG5mdW5jdGlvbiB1bml4X2xvY2FsdGltZSAodCkge1xuICB2YXIgZCA9IG5ldyBEYXRlICh0ICogMTAwMCk7XG4gIHZhciBkX251bSA9IGQuZ2V0VGltZSgpO1xuICB2YXIgamFudWFyeWZpcnN0ID0gKG5ldyBEYXRlKGQuZ2V0RnVsbFllYXIoKSwgMCwgMSkpLmdldFRpbWUoKTtcbiAgdmFyIGRveSA9IE1hdGguZmxvb3IoKGRfbnVtIC0gamFudWFyeWZpcnN0KSAvIDg2NDAwMDAwKTtcbiAgdmFyIGphbiA9IG5ldyBEYXRlKGQuZ2V0RnVsbFllYXIoKSwgMCwgMSk7XG4gIHZhciBqdWwgPSBuZXcgRGF0ZShkLmdldEZ1bGxZZWFyKCksIDYsIDEpO1xuICB2YXIgc3RkVGltZXpvbmVPZmZzZXQgPSBNYXRoLm1heChqYW4uZ2V0VGltZXpvbmVPZmZzZXQoKSwganVsLmdldFRpbWV6b25lT2Zmc2V0KCkpO1xuICByZXR1cm4gQkxPQ0soMCwgZC5nZXRTZWNvbmRzKCksIGQuZ2V0TWludXRlcygpLCBkLmdldEhvdXJzKCksXG4gICAgICAgICAgICAgICBkLmdldERhdGUoKSwgZC5nZXRNb250aCgpLCBkLmdldEZ1bGxZZWFyKCkgLSAxOTAwLFxuICAgICAgICAgICAgICAgZC5nZXREYXkoKSwgZG95LFxuICAgICAgICAgICAgICAgKGQuZ2V0VGltZXpvbmVPZmZzZXQoKSA8IHN0ZFRpbWV6b25lT2Zmc2V0KSB8IDAgLyogZGF5bGlnaHQgc2F2aW5ncyB0aW1lICBmaWVsZC4gKi8pXG59XG5cbi8vUHJvdmlkZXM6IHVuaXhfbWt0aW1lXG4vL1JlcXVpcmVzOiB1bml4X2xvY2FsdGltZVxuZnVuY3Rpb24gdW5peF9ta3RpbWUodG0pe1xuICB2YXIgZCA9IChuZXcgRGF0ZSh0bVs2XSsxOTAwLHRtWzVdLHRtWzRdLHRtWzNdLHRtWzJdLHRtWzFdKSkuZ2V0VGltZSgpO1xuICB2YXIgdCA9IE1hdGguZmxvb3IoZCAvIDEwMDApO1xuICB2YXIgdG0yID0gdW5peF9sb2NhbHRpbWUodCk7XG4gIHJldHVybiBCTE9DSygwLHQsdG0yKTtcbn1cblxuLy9Qcm92aWRlczogd2luX3N0YXJ0dXAgY29uc3RcbmZ1bmN0aW9uIHdpbl9zdGFydHVwKCkge31cblxuLy9Qcm92aWRlczogd2luX2NsZWFudXAgY29uc3RcbmZ1bmN0aW9uIHdpbl9jbGVhbnVwKCkge31cblxuLy9Qcm92aWRlczogd2luX2hhbmRsZV9mZCBjb25zdFxuZnVuY3Rpb24gd2luX2hhbmRsZV9mZCh4KSB7cmV0dXJuIHg7fVxuXG4vL1Byb3ZpZGVzOiB1bml4X2lzYXR0eVxuLy9SZXF1aXJlczogZnNfbm9kZV9zdXBwb3J0ZWRcbmZ1bmN0aW9uIHVuaXhfaXNhdHR5KGZpbGVEZXNjcmlwdG9yKSB7XG4gIGlmKGZzX25vZGVfc3VwcG9ydGVkKCkpIHtcbiAgICB2YXIgdHR5ID0gcmVxdWlyZSgndHR5Jyk7XG4gICAgcmV0dXJuIHR0eS5pc2F0dHkoZmlsZURlc2NyaXB0b3IpPzE6MDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gMDtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBtYWtlX3VuaXhfZXJyX2FyZ3Ncbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG52YXIgdW5peF9lcnJvciA9IFtcbiAgLyogPT09VW5peC5lcnJvcj09PVxuICAgKlxuICAgKiBUaGlzIGFycmF5IGlzIGluIG9yZGVyIG9mIHRoZSB2YXJpYW50IGluIE9DYW1sXG4gICAqL1xuICBcIkUyQklHXCIsIFwiRUFDQ0VTXCIsIFwiRUFHQUlOXCIsIFwiRUJBREZcIiwgXCJFQlVTWVwiLCBcIkVDSElMRFwiLCBcIkVERUFETEtcIiwgXCJFRE9NXCIsXG4gIFwiRUVYSVNUXCIsIFwiRUZBVUxUXCIsIFwiRUZCSUdcIiwgXCJFSU5UUlwiLCBcIkVJTlZBTFwiLCBcIkVJT1wiLCBcIkVJU0RJUlwiLCBcIkVNRklMRVwiLFxuICBcIkVNTElOS1wiLCBcIkVOQU1FVE9PTE9OR1wiLCBcIkVORklMRVwiLCBcIkVOT0RFVlwiLCBcIkVOT0VOVFwiLCBcIkVOT0VYRUNcIiwgXCJFTk9MQ0tcIixcbiAgXCJFTk9NRU1cIiwgXCJFTk9TUENcIiwgXCJFTk9TWVNcIiwgXCJFTk9URElSXCIsIFwiRU5PVEVNUFRZXCIsIFwiRU5PVFRZXCIsIFwiRU5YSU9cIixcbiAgXCJFUEVSTVwiLCBcIkVQSVBFXCIsIFwiRVJBTkdFXCIsIFwiRVJPRlNcIiwgXCJFU1BJUEVcIiwgXCJFU1JDSFwiLCBcIkVYREVWXCIsIFwiRVdPVUxEQkxPQ0tcIixcbiAgXCJFSU5QUk9HUkVTU1wiLCBcIkVBTFJFQURZXCIsIFwiRU5PVFNPQ0tcIiwgXCJFREVTVEFERFJSRVFcIiwgXCJFTVNHU0laRVwiLFxuICBcIkVQUk9UT1RZUEVcIiwgXCJFTk9QUk9UT09QVFwiLCBcIkVQUk9UT05PU1VQUE9SVFwiLCBcIkVTT0NLVE5PU1VQUE9SVFwiLFxuICBcIkVPUE5PVFNVUFBcIiwgXCJFUEZOT1NVUFBPUlRcIiwgXCJFQUZOT1NVUFBPUlRcIiwgXCJFQUREUklOVVNFXCIsIFwiRUFERFJOT1RBVkFJTFwiLFxuICBcIkVORVRET1dOXCIsIFwiRU5FVFVOUkVBQ0hcIiwgXCJFTkVUUkVTRVRcIiwgXCJFQ09OTkFCT1JURURcIiwgXCJFQ09OTlJFU0VUXCIsIFwiRU5PQlVGU1wiLFxuICBcIkVJU0NPTk5cIiwgXCJFTk9UQ09OTlwiLCBcIkVTSFVURE9XTlwiLCBcIkVUT09NQU5ZUkVGU1wiLCBcIkVUSU1FRE9VVFwiLCBcIkVDT05OUkVGVVNFRFwiLFxuICBcIkVIT1NURE9XTlwiLCBcIkVIT1NUVU5SRUFDSFwiLCBcIkVMT09QXCIsIFwiRU9WRVJGTE9XXCJcbl07XG5mdW5jdGlvbiBtYWtlX3VuaXhfZXJyX2FyZ3MoY29kZSwgc3lzY2FsbCwgcGF0aCwgZXJybm8pIHtcbiAgdmFyIHZhcmlhbnQgPSB1bml4X2Vycm9yLmluZGV4T2YoY29kZSk7XG4gIGlmICh2YXJpYW50IDwgMCkge1xuICAgIC8vIERlZmF1bHQgaWYgdW5kZWZpbmVkXG4gICAgaWYgKGVycm5vID09IG51bGwpIHtcbiAgICAgIGVycm5vID0gLTk5OTlcbiAgICB9XG4gICAgLy8gSWYgbm9uZSBvZiB0aGUgYWJvdmUgdmFyaWFudHMsIGZhbGxiYWNrIHRvIEVVTktOT1dORVJSKGludClcbiAgICB2YXJpYW50ID0gQkxPQ0soMCwgZXJybm8pO1xuICB9XG4gIHZhciBhcmdzID0gW1xuICAgIHZhcmlhbnQsXG4gICAgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcoc3lzY2FsbCB8fCBcIlwiKSxcbiAgICBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhwYXRoIHx8IFwiXCIpXG4gIF07XG4gIHJldHVybiBhcmdzO1xufVxuXG4vL1Byb3ZpZGVzOiB1bml4X3N0YXRcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiB1bml4X3N0YXQobmFtZSkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICBpZiAoIXJvb3QuZGV2aWNlLnN0YXQpIHtcbiAgICBjYW1sX2ZhaWx3aXRoKFwidW5peF9zdGF0OiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIHJvb3QuZGV2aWNlLnN0YXQocm9vdC5yZXN0LCAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUpO1xufVxuXG4vL1Byb3ZpZGVzOiB1bml4X3N0YXRfNjRcbi8vUmVxdWlyZXM6IHVuaXhfc3RhdFxudmFyIHVuaXhfc3RhdF82NCA9IHVuaXhfc3RhdDtcblxuLy9Qcm92aWRlczogdW5peF9sc3RhdFxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIHVuaXhfbHN0YXQobmFtZSkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICBpZiAoIXJvb3QuZGV2aWNlLmxzdGF0KSB7XG4gICAgY2FtbF9mYWlsd2l0aChcInVuaXhfbHN0YXQ6IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuICByZXR1cm4gcm9vdC5kZXZpY2UubHN0YXQocm9vdC5yZXN0LCAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUpO1xufVxuXG4vL1Byb3ZpZGVzOiB1bml4X2xzdGF0XzY0XG4vL1JlcXVpcmVzOiB1bml4X2xzdGF0XG52YXIgdW5peF9sc3RhdF82NCA9IHVuaXhfbHN0YXQ7XG5cbi8vUHJvdmlkZXM6IHVuaXhfbWtkaXJcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiB1bml4X21rZGlyKG5hbWUsIHBlcm0pIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgaWYgKCFyb290LmRldmljZS5ta2Rpcikge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJ1bml4X21rZGlyOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIHJvb3QuZGV2aWNlLm1rZGlyKHJvb3QucmVzdCwgcGVybSwgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlKTtcbn1cblxuLy9Qcm92aWRlczogdW5peF9ybWRpclxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2UsIGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIHVuaXhfcm1kaXIobmFtZSkge1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICBpZiAoIXJvb3QuZGV2aWNlLnJtZGlyKSB7XG4gICAgY2FtbF9mYWlsd2l0aChcInVuaXhfcm1kaXI6IG5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgfVxuICByZXR1cm4gcm9vdC5kZXZpY2Uucm1kaXIocm9vdC5yZXN0LCAvKiByYWlzZSBVbml4X2Vycm9yICovIHRydWUpO1xufVxuXG4vL1Byb3ZpZGVzOiB1bml4X3N5bWxpbmtcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiB1bml4X3N5bWxpbmsodG9fZGlyLCBzcmMsIGRzdCkge1xuICB2YXIgc3JjX3Jvb3QgPSByZXNvbHZlX2ZzX2RldmljZShzcmMpO1xuICB2YXIgZHN0X3Jvb3QgPSByZXNvbHZlX2ZzX2RldmljZShkc3QpO1xuICBpZihzcmNfcm9vdC5kZXZpY2UgIT0gZHN0X3Jvb3QuZGV2aWNlKVxuICAgIGNhbWxfZmFpbHdpdGgoXCJ1bml4X3N5bWxpbms6IGNhbm5vdCBzeW1saW5rIGJldHdlZW4gdHdvIGZpbGVzeXN0ZW1zXCIpO1xuICBpZiAoIXNyY19yb290LmRldmljZS5zeW1saW5rKSB7XG4gICAgY2FtbF9mYWlsd2l0aChcInVuaXhfc3ltbGluazogbm90IGltcGxlbWVudGVkXCIpO1xuICB9XG4gIHJldHVybiBzcmNfcm9vdC5kZXZpY2Uuc3ltbGluayh0b19kaXIsIHNyY19yb290LnJlc3QsIGRzdF9yb290LnJlc3QsIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gdHJ1ZSk7XG59XG5cbi8vUHJvdmlkZXM6IHVuaXhfcmVhZGxpbmtcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiB1bml4X3JlYWRsaW5rKG5hbWUpIHtcbiAgdmFyIHJvb3QgPSByZXNvbHZlX2ZzX2RldmljZShuYW1lKTtcbiAgaWYgKCFyb290LmRldmljZS5yZWFkbGluaykge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJ1bml4X3JlYWRsaW5rOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIHJvb3QuZGV2aWNlLnJlYWRsaW5rKHJvb3QucmVzdCwgLyogcmFpc2UgVW5peF9lcnJvciAqLyB0cnVlKTtcbn1cblxuLy9Qcm92aWRlczogdW5peF91bmxpbmtcbi8vUmVxdWlyZXM6IHJlc29sdmVfZnNfZGV2aWNlLCBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiB1bml4X3VubGluayhuYW1lKSB7XG4gIHZhciByb290ID0gcmVzb2x2ZV9mc19kZXZpY2UobmFtZSk7XG4gIGlmICghcm9vdC5kZXZpY2UudW5saW5rKSB7XG4gICAgY2FtbF9mYWlsd2l0aChcInVuaXhfdW5saW5rOiBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cbiAgcmV0dXJuIHJvb3QuZGV2aWNlLnVubGluayhyb290LnJlc3QsIC8qIHJhaXNlIFVuaXhfZXJyb3IgKi8gdHJ1ZSk7XG59XG5cbi8vUHJvdmlkZXM6IHVuaXhfZ2V0dWlkXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX25vdF9mb3VuZFxuZnVuY3Rpb24gdW5peF9nZXR1aWQodW5pdCkge1xuICBpZihqb29fZ2xvYmFsX29iamVjdC5wcm9jZXNzICYmIGpvb19nbG9iYWxfb2JqZWN0LnByb2Nlc3MuZ2V0dWlkKXtcbiAgICByZXR1cm4gam9vX2dsb2JhbF9vYmplY3QucHJvY2Vzcy5nZXR1aWQoKTtcbiAgfVxuICBjYW1sX3JhaXNlX25vdF9mb3VuZCgpO1xufVxuXG4vL1Byb3ZpZGVzOiB1bml4X2dldHB3dWlkXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX25vdF9mb3VuZFxuZnVuY3Rpb24gdW5peF9nZXRwd3VpZCh1bml0KSB7XG4gIGNhbWxfcmFpc2Vfbm90X2ZvdW5kKClcbn1cblxuLy9Qcm92aWRlczogdW5peF9oYXNfc3ltbGlua1xuLy9SZXF1aXJlczogZnNfbm9kZV9zdXBwb3J0ZWRcbmZ1bmN0aW9uIHVuaXhfaGFzX3N5bWxpbmsodW5pdCkge1xuICByZXR1cm4gZnNfbm9kZV9zdXBwb3J0ZWQoKT8xOjBcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vLy8vLy8vLy8vLy8gU3lzXG5cbi8vUHJvdmlkZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yIChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfd2l0aF9zdHJpbmcsIGNhbWxfZ2xvYmFsX2RhdGFcbmZ1bmN0aW9uIGNhbWxfcmFpc2Vfc3lzX2Vycm9yIChtc2cpIHtcbiAgY2FtbF9yYWlzZV93aXRoX3N0cmluZyhjYW1sX2dsb2JhbF9kYXRhLlN5c19lcnJvciwgbXNnKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfZXhpdFxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX3N5c19leGl0IChjb2RlKSB7XG4gIHZhciBnID0gam9vX2dsb2JhbF9vYmplY3Q7XG4gIGlmKGcucXVpdCkgZy5xdWl0KGNvZGUpO1xuICAvL25vZGVqc1xuICBpZihnLnByb2Nlc3MgJiYgZy5wcm9jZXNzLmV4aXQpXG4gICAgZy5wcm9jZXNzLmV4aXQoY29kZSk7XG4gIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkZ1bmN0aW9uICdleGl0JyBub3QgaW1wbGVtZW50ZWRcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfaXNfc3BlY2lhbF9leGNlcHRpb25cbmZ1bmN0aW9uIGNhbWxfaXNfc3BlY2lhbF9leGNlcHRpb24oZXhuKXtcbiAgc3dpdGNoKGV4blsyXSkge1xuICBjYXNlIC04OiAvLyBNYXRjaF9mYWlsdXJlXG4gIGNhc2UgLTExOiAvLyBBc3NlcnRfZmFpbHVyZVxuICBjYXNlIC0xMjogLy8gVW5kZWZpbmVkX3JlY3Vyc2l2ZV9tb2R1bGVcbiAgICByZXR1cm4gMTtcbiAgZGVmYXVsdDpcbiAgICByZXR1cm4gMDtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2Zvcm1hdF9leGNlcHRpb25cbi8vUmVxdWlyZXM6IE1sQnl0ZXMsIGNhbWxfaXNfc3BlY2lhbF9leGNlcHRpb25cbmZ1bmN0aW9uIGNhbWxfZm9ybWF0X2V4Y2VwdGlvbihleG4pe1xuICB2YXIgciA9IFwiXCI7XG4gIGlmKGV4blswXSA9PSAwKSB7XG4gICAgciArPSBleG5bMV1bMV07XG4gICAgaWYoZXhuLmxlbmd0aCA9PSAzICYmIGV4blsyXVswXSA9PSAwICYmIGNhbWxfaXNfc3BlY2lhbF9leGNlcHRpb24oZXhuWzFdKSkge1xuXG4gICAgICB2YXIgYnVja2V0ID0gZXhuWzJdO1xuICAgICAgdmFyIHN0YXJ0ID0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHN0YXJ0ID0gMlxuICAgICAgdmFyIGJ1Y2tldCA9IGV4bjtcbiAgICB9XG4gICAgciArPSBcIihcIjtcbiAgICBmb3IodmFyIGkgPSBzdGFydDsgaSA8IGJ1Y2tldC5sZW5ndGg7IGkgKyspe1xuICAgICAgaWYoaSA+IHN0YXJ0KSByKz1cIiwgXCI7XG4gICAgICB2YXIgdiA9IGJ1Y2tldFtpXVxuICAgICAgaWYodHlwZW9mIHYgPT0gXCJudW1iZXJcIilcbiAgICAgICAgcis9IHYudG9TdHJpbmcoKTtcbiAgICAgIGVsc2UgaWYodiBpbnN0YW5jZW9mIE1sQnl0ZXMpe1xuICAgICAgICByKz0gJ1wiJyArIHYudG9TdHJpbmcoKSArICdcIic7XG4gICAgICB9XG4gICAgICBlbHNlIGlmKHR5cGVvZiB2ID09IFwic3RyaW5nXCIpe1xuICAgICAgICByKz0gJ1wiJyArIHYudG9TdHJpbmcoKSArICdcIic7XG4gICAgICB9XG4gICAgICBlbHNlIHIgKz0gXCJfXCI7XG4gICAgfVxuICAgIHIgKz0gXCIpXCJcbiAgfSBlbHNlIGlmIChleG5bMF0gPT0gMjQ4KXtcbiAgICByICs9IGV4blsxXVxuICB9XG4gIHJldHVybiByXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZmF0YWxfdW5jYXVnaHRfZXhjZXB0aW9uXG4vL1JlcXVpcmVzOiBjYW1sX25hbWVkX3ZhbHVlLCBjYW1sX2Zvcm1hdF9leGNlcHRpb25cbmZ1bmN0aW9uIGNhbWxfZmF0YWxfdW5jYXVnaHRfZXhjZXB0aW9uKGVycil7XG4gIGlmKGVyciBpbnN0YW5jZW9mIEFycmF5ICYmIChlcnJbMF0gPT0gMCB8fCBlcnJbMF0gPT0gMjQ4KSkge1xuICAgIHZhciBoYW5kbGVyID0gY2FtbF9uYW1lZF92YWx1ZShcIlByaW50ZXhjLmhhbmRsZV91bmNhdWdodF9leGNlcHRpb25cIik7XG4gICAgaWYoaGFuZGxlcikgaGFuZGxlcihlcnIsZmFsc2UpO1xuICAgIGVsc2Uge1xuICAgICAgdmFyIG1zZyA9IGNhbWxfZm9ybWF0X2V4Y2VwdGlvbihlcnIpO1xuICAgICAgdmFyIGF0X2V4aXQgPSBjYW1sX25hbWVkX3ZhbHVlKFwiUGVydmFzaXZlcy5kb19hdF9leGl0XCIpO1xuICAgICAgaWYoYXRfZXhpdCkgeyBhdF9leGl0KDApIH1cbiAgICAgIGpvb19nbG9iYWxfb2JqZWN0LmNvbnNvbGUuZXJyb3IoXCJGYXRhbCBlcnJvcjogZXhjZXB0aW9uIFwiICsgbXNnICsgXCJcXG5cIik7XG4gICAgfVxuICB9XG4gIGVsc2Uge1xuICAgIHRocm93IGVyclxuICB9XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9zZXRfc3RhdGljX2VudlxuZnVuY3Rpb24gY2FtbF9zZXRfc3RhdGljX2VudihrLHYpe1xuICBpZigham9vX2dsb2JhbF9vYmplY3QuanNvb19zdGF0aWNfZW52KVxuICAgIGpvb19nbG9iYWxfb2JqZWN0Lmpzb29fc3RhdGljX2VudiA9IHt9XG4gIGpvb19nbG9iYWxfb2JqZWN0Lmpzb29fc3RhdGljX2VudltrXSA9IHY7XG4gIHJldHVybiAwO1xufVxuLy9Qcm92aWRlczogY2FtbF9zeXNfZ2V0ZW52IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfbm90X2ZvdW5kXG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3lzX2dldGVudiAobmFtZSkge1xuICB2YXIgZyA9IGpvb19nbG9iYWxfb2JqZWN0O1xuICB2YXIgbiA9IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKG5hbWUpO1xuICAvL25vZGVqcyBlbnZcbiAgaWYoZy5wcm9jZXNzXG4gICAgICYmIGcucHJvY2Vzcy5lbnZcbiAgICAgJiYgZy5wcm9jZXNzLmVudltuXSAhPSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKGcucHJvY2Vzcy5lbnZbbl0pO1xuICBpZihqb29fZ2xvYmFsX29iamVjdC5qc29vX3N0YXRpY19lbnZcbiAgICAgJiYgam9vX2dsb2JhbF9vYmplY3QuanNvb19zdGF0aWNfZW52W25dKVxuICAgIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhqb29fZ2xvYmFsX29iamVjdC5qc29vX3N0YXRpY19lbnZbbl0pXG4gIGNhbWxfcmFpc2Vfbm90X2ZvdW5kICgpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c191bnNhZmVfZ2V0ZW52XG4vL1JlcXVpcmVzOiBjYW1sX3N5c19nZXRlbnZcbmZ1bmN0aW9uIGNhbWxfc3lzX3Vuc2FmZV9nZXRlbnYobmFtZSl7XG4gIHJldHVybiBjYW1sX3N5c19nZXRlbnYgKG5hbWUpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FyZ3Zcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG52YXIgY2FtbF9hcmd2ID0gKChmdW5jdGlvbiAoKSB7XG4gIHZhciBnID0gam9vX2dsb2JhbF9vYmplY3Q7XG4gIHZhciBtYWluID0gXCJhLm91dFwiO1xuICB2YXIgYXJncyA9IFtdXG5cbiAgaWYoZy5wcm9jZXNzXG4gICAgICYmIGcucHJvY2Vzcy5hcmd2XG4gICAgICYmIGcucHJvY2Vzcy5hcmd2Lmxlbmd0aCA+IDEpIHtcbiAgICB2YXIgYXJndiA9IGcucHJvY2Vzcy5hcmd2XG4gICAgLy9ub2RlanNcbiAgICBtYWluID0gYXJndlsxXTtcbiAgICBhcmdzID0gYXJndi5zbGljZSgyKTtcbiAgfVxuXG4gIHZhciBwID0gY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmcobWFpbik7XG4gIHZhciBhcmdzMiA9IFswLCBwXTtcbiAgZm9yKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspXG4gICAgYXJnczIucHVzaChjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhhcmdzW2ldKSk7XG4gIHJldHVybiBhcmdzMjtcbn0pKCkpXG5cbi8vUHJvdmlkZXM6IGNhbWxfZXhlY3V0YWJsZV9uYW1lXG4vL1JlcXVpcmVzOiBjYW1sX2FyZ3ZcbnZhciBjYW1sX2V4ZWN1dGFibGVfbmFtZSA9IGNhbWxfYXJndlsxXVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19nZXRfYXJndlxuLy9SZXF1aXJlczogY2FtbF9hcmd2XG5mdW5jdGlvbiBjYW1sX3N5c19nZXRfYXJndiAoYSkge1xuICByZXR1cm4gWzAsIGNhbWxfYXJndlsxXSwgY2FtbF9hcmd2XTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfYXJndlxuLy9SZXF1aXJlczogY2FtbF9hcmd2XG5mdW5jdGlvbiBjYW1sX3N5c19hcmd2IChhKSB7XG4gIHJldHVybiBjYW1sX2FyZ3Y7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX21vZGlmeV9hcmd2XG4vL1JlcXVpcmVzOiBjYW1sX2FyZ3ZcbmZ1bmN0aW9uIGNhbWxfc3lzX21vZGlmeV9hcmd2KGFyZyl7XG4gIGNhbWxfYXJndiA9IGFyZztcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2V4ZWN1dGFibGVfbmFtZSBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9leGVjdXRhYmxlX25hbWVcbmZ1bmN0aW9uIGNhbWxfc3lzX2V4ZWN1dGFibGVfbmFtZShhKXtcbiAgcmV0dXJuIGNhbWxfZXhlY3V0YWJsZV9uYW1lXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX3N5c3RlbV9jb21tYW5kXG4vL1JlcXVpcmVzOiBjYW1sX2pzc3RyaW5nX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9zeXNfc3lzdGVtX2NvbW1hbmQoY21kKXtcbiAgdmFyIGNtZCA9IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKGNtZCk7XG4gIGlmICh0eXBlb2YgcmVxdWlyZSAhPSBcInVuZGVmaW5lZFwiXG4gICAgICAmJiByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJylcbiAgICAgICYmIHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKS5leGVjU3luYykge1xuICAgIHRyeSB7cmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWNTeW5jKGNtZCx7c3RkaW86ICdpbmhlcml0J30pOyByZXR1cm4gMH1cbiAgICBjYXRjaCAoZSkge3JldHVybiAxfVxuICB9XG4gIGVsc2UgcmV0dXJuIDEyNztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfdGltZSBtdXRhYmxlXG52YXIgY2FtbF9pbml0aWFsX3RpbWUgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpICogMC4wMDE7XG5mdW5jdGlvbiBjYW1sX3N5c190aW1lICgpIHtcbiAgdmFyIG5vdyA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7XG4gIHJldHVybiBub3cgKiAwLjAwMSAtIGNhbWxfaW5pdGlhbF90aW1lO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c190aW1lX2luY2x1ZGVfY2hpbGRyZW5cbi8vUmVxdWlyZXM6IGNhbWxfc3lzX3RpbWVcbmZ1bmN0aW9uIGNhbWxfc3lzX3RpbWVfaW5jbHVkZV9jaGlsZHJlbihiKSB7XG4gIHJldHVybiBjYW1sX3N5c190aW1lKCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX3JhbmRvbV9zZWVkIG11dGFibGVcbi8vVGhlIGZ1bmN0aW9uIG5lZWRzIHRvIHJldHVybiBhbiBhcnJheSBzaW5jZSBPQ2FtbCA0LjAuLi5cbmZ1bmN0aW9uIGNhbWxfc3lzX3JhbmRvbV9zZWVkICgpIHtcbiAgdmFyIG5vdyA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7XG4gIHZhciB4ID0gbm93XjB4ZmZmZmZmZmYqTWF0aC5yYW5kb20oKTtcbiAgcmV0dXJuIFswLHhdO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jb25zdF9iaWdfZW5kaWFuIGNvbnN0XG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF9iaWdfZW5kaWFuICgpIHsgcmV0dXJuIDA7IH1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29uc3Rfd29yZF9zaXplIGNvbnN0XG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF93b3JkX3NpemUgKCkgeyByZXR1cm4gMzI7IH1cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY29uc3RfaW50X3NpemUgY29uc3RcbmZ1bmN0aW9uIGNhbWxfc3lzX2NvbnN0X2ludF9zaXplICgpIHsgcmV0dXJuIDMyOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NvbnN0X21heF93b3NpemUgY29uc3Rcbi8vIG1heF9pbnQgLyA0IHNvIHRoYXQgdGhlIGZvbGxvd2luZyBkb2VzIG5vdCBvdmVyZmxvd1xuLy9sZXQgbWF4X3N0cmluZ19sZW5ndGggPSB3b3JkX3NpemUgLyA4ICogbWF4X2FycmF5X2xlbmd0aCAtIDE7O1xuZnVuY3Rpb24gY2FtbF9zeXNfY29uc3RfbWF4X3dvc2l6ZSAoKSB7IHJldHVybiAoMHg3RkZGRkZGRi80KSB8IDA7fVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jb25zdF9vc3R5cGVfdW5peCBjb25zdFxuLy9SZXF1aXJlczogb3NfdHlwZVxuZnVuY3Rpb24gY2FtbF9zeXNfY29uc3Rfb3N0eXBlX3VuaXggKCkgeyByZXR1cm4gb3NfdHlwZSA9PSBcIlVuaXhcIiA/IDEgOiAwOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jb25zdF9vc3R5cGVfd2luMzIgY29uc3Rcbi8vUmVxdWlyZXM6IG9zX3R5cGVcbmZ1bmN0aW9uIGNhbWxfc3lzX2NvbnN0X29zdHlwZV93aW4zMiAoKSB7IHJldHVybiBvc190eXBlID09IFwiV2luMzJcIiA/IDEgOiAwOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19jb25zdF9vc3R5cGVfY3lnd2luIGNvbnN0XG4vL1JlcXVpcmVzOiBvc190eXBlXG5mdW5jdGlvbiBjYW1sX3N5c19jb25zdF9vc3R5cGVfY3lnd2luICgpIHsgcmV0dXJuIG9zX3R5cGUgPT0gXCJDeWd3aW5cIiA/IDEgOiAwOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NvbnN0X2JhY2tlbmRfdHlwZSBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9zeXNfY29uc3RfYmFja2VuZF90eXBlICgpIHtcbiAgcmV0dXJuIFswLCBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKFwianNfb2Zfb2NhbWxcIildO1xufVxuXG4vL1Byb3ZpZGVzOiBvc190eXBlXG52YXIgb3NfdHlwZSA9IChqb29fZ2xvYmFsX29iamVjdC5wcm9jZXNzICYmXG4gICAgICAgICAgICAgICBqb29fZ2xvYmFsX29iamVjdC5wcm9jZXNzLnBsYXRmb3JtICYmXG4gICAgICAgICAgICAgICBqb29fZ2xvYmFsX29iamVjdC5wcm9jZXNzLnBsYXRmb3JtID09IFwid2luMzJcIikgPyBcIkN5Z3dpblwiIDogXCJVbml4XCI7XG5cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfZ2V0X2NvbmZpZyBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlcywgb3NfdHlwZVxuZnVuY3Rpb24gY2FtbF9zeXNfZ2V0X2NvbmZpZyAoKSB7XG4gIHJldHVybiBbMCwgY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhvc190eXBlKSwgMzIsIDBdO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19pc2F0dHlcbmZ1bmN0aW9uIGNhbWxfc3lzX2lzYXR0eShfY2hhbikge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ydW50aW1lX3ZhcmlhbnRcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfcnVudGltZV92YXJpYW50KF91bml0KSB7XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKFwiXCIpO1xufVxuLy9Qcm92aWRlczogY2FtbF9ydW50aW1lX3BhcmFtZXRlcnNcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfcnVudGltZV9wYXJhbWV0ZXJzKF91bml0KSB7XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKFwiXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2luc3RhbGxfc2lnbmFsX2hhbmRsZXIgY29uc3RcbmZ1bmN0aW9uIGNhbWxfaW5zdGFsbF9zaWduYWxfaGFuZGxlcigpe3JldHVybiAwfVxuXG4vL1Byb3ZpZGVzOiB1bml4X2luZXRfYWRkcl9vZl9zdHJpbmdcbmZ1bmN0aW9uIHVuaXhfaW5ldF9hZGRyX29mX3N0cmluZyAoKSB7cmV0dXJuIDA7fVxuXG5cblxuLy9Qcm92aWRlczogY2FtbF9ydW50aW1lX3dhcm5pbmdzXG52YXIgY2FtbF9ydW50aW1lX3dhcm5pbmdzID0gMDtcblxuLy9Qcm92aWRlczogY2FtbF9tbF9lbmFibGVfcnVudGltZV93YXJuaW5nc1xuLy9SZXF1aXJlczogY2FtbF9ydW50aW1lX3dhcm5pbmdzXG5mdW5jdGlvbiBjYW1sX21sX2VuYWJsZV9ydW50aW1lX3dhcm5pbmdzIChib29sKSB7XG4gIGNhbWxfcnVudGltZV93YXJuaW5ncyA9IGJvb2w7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3J1bnRpbWVfd2FybmluZ3NfZW5hYmxlZFxuLy9SZXF1aXJlczogY2FtbF9ydW50aW1lX3dhcm5pbmdzXG5mdW5jdGlvbiBjYW1sX21sX3J1bnRpbWVfd2FybmluZ3NfZW5hYmxlZCAoX3VuaXQpIHtcbiAgcmV0dXJuIGNhbWxfcnVudGltZV93YXJuaW5ncztcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX3NwYWNldGltZV9lbmFibGVkIGNvbnN0IChjb25zdClcbmZ1bmN0aW9uIGNhbWxfc3BhY2V0aW1lX2VuYWJsZWQoX3VuaXQpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3lzX2NvbnN0X25ha2VkX3BvaW50ZXJzX2NoZWNrZWQgY29uc3QgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9zeXNfY29uc3RfbmFrZWRfcG9pbnRlcnNfY2hlY2tlZChfdW5pdCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9yZWdpc3Rlcl9jaGFubmVsX2Zvcl9zcGFjZXRpbWUgY29uc3QgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9yZWdpc3Rlcl9jaGFubmVsX2Zvcl9zcGFjZXRpbWUoX2NoYW5uZWwpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfc3BhY2V0aW1lX29ubHlfd29ya3NfZm9yX25hdGl2ZV9jb2RlXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX3NwYWNldGltZV9vbmx5X3dvcmtzX2Zvcl9uYXRpdmVfY29kZSgpIHtcbiAgY2FtbF9mYWlsd2l0aChcIlNwYWNldGltZSBwcm9maWxpbmcgb25seSB3b3JrcyBmb3IgbmF0aXZlIGNvZGVcIik7XG59XG5cbi8vQWx3YXlzXG4vL1JlcXVpcmVzOiBjYW1sX2ZhdGFsX3VuY2F1Z2h0X2V4Y2VwdGlvblxuZnVuY3Rpb24gY2FtbF9zZXR1cF91bmNhdWdodF9leGNlcHRpb25faGFuZGxlcigpIHtcbiAgdmFyIGcgPSBqb29fZ2xvYmFsX29iamVjdDtcbiAgaWYoZy5wcm9jZXNzICYmIGcucHJvY2Vzcy5vbikge1xuICAgIGcucHJvY2Vzcy5vbigndW5jYXVnaHRFeGNlcHRpb24nLCBmdW5jdGlvbiAoZXJyLCBvcmlnaW4pIHtcbiAgICAgIGNhbWxfZmF0YWxfdW5jYXVnaHRfZXhjZXB0aW9uKGVycik7XG4gICAgICBnLnByb2Nlc3MuZXhpdCAoMik7XG4gICAgfSlcbiAgfVxuICBlbHNlIGlmKGcuYWRkRXZlbnRMaXN0ZW5lcil7XG4gICAgZy5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIGZ1bmN0aW9uKGV2ZW50KXtcbiAgICAgIGlmKGV2ZW50LmVycm9yKXtcbiAgICAgICAgY2FtbF9mYXRhbF91bmNhdWdodF9leGNlcHRpb24oZXZlbnQuZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5jYW1sX3NldHVwX3VuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyKCk7XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTQgSsOpcsO0bWUgVm91aWxsb24sIEh1Z28gSGV1emFyZFxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBNbEZha2VEZXZpY2Vcbi8vUmVxdWlyZXM6IE1sRmFrZUZpbGUsIGNhbWxfY3JlYXRlX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvciwgY2FtbF9yYWlzZV9ub19zdWNoX2ZpbGVcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMsIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2J5dGVzX29mX2FycmF5LCBjYW1sX2J5dGVzX29mX3N0cmluZywgY2FtbF9ieXRlc19vZl9qc2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX2lzX21sX2J5dGVzLCBjYW1sX2lzX21sX3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9uYW1lZF92YWx1ZSwgY2FtbF9yYWlzZV93aXRoX2FyZ3MsIGNhbWxfbmFtZWRfdmFsdWVzXG4vL1JlcXVpcmVzOiBtYWtlX3VuaXhfZXJyX2FyZ3NcbmZ1bmN0aW9uIE1sRmFrZURldmljZSAocm9vdCwgZikge1xuICB0aGlzLmNvbnRlbnQ9e307XG4gIHRoaXMucm9vdCA9IHJvb3Q7XG4gIHRoaXMubG9va3VwRnVuID0gZjtcbn1cbk1sRmFrZURldmljZS5wcm90b3R5cGUubm0gPSBmdW5jdGlvbihuYW1lKSB7XG4gIHJldHVybiAodGhpcy5yb290ICsgbmFtZSk7XG59XG5NbEZha2VEZXZpY2UucHJvdG90eXBlLmNyZWF0ZV9kaXJfaWZfbmVlZGVkID0gZnVuY3Rpb24obmFtZSkge1xuICB2YXIgY29tcCA9IG5hbWUuc3BsaXQoXCIvXCIpO1xuICB2YXIgcmVzID0gXCJcIjtcbiAgZm9yKHZhciBpID0gMDsgaSA8IGNvbXAubGVuZ3RoIC0gMTsgaSsrKXtcbiAgICByZXMgKz0gY29tcFtpXSArIFwiL1wiO1xuICAgIGlmKHRoaXMuY29udGVudFtyZXNdKSBjb250aW51ZTtcbiAgICB0aGlzLmNvbnRlbnRbcmVzXSA9IFN5bWJvbChcImRpcmVjdG9yeVwiKTtcbiAgfVxufVxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5zbGFzaCA9IGZ1bmN0aW9uKG5hbWUpe1xuICByZXR1cm4gL1xcLyQvLnRlc3QobmFtZSk/bmFtZToobmFtZSArIFwiL1wiKTtcbn1cbk1sRmFrZURldmljZS5wcm90b3R5cGUubG9va3VwID0gZnVuY3Rpb24obmFtZSkge1xuICBpZighdGhpcy5jb250ZW50W25hbWVdICYmIHRoaXMubG9va3VwRnVuKSB7XG4gICAgdmFyIHJlcyA9IHRoaXMubG9va3VwRnVuKGNhbWxfc3RyaW5nX29mX2pzYnl0ZXModGhpcy5yb290KSwgY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhuYW1lKSk7XG4gICAgaWYocmVzICE9PSAwKSB7XG4gICAgICB0aGlzLmNyZWF0ZV9kaXJfaWZfbmVlZGVkKG5hbWUpO1xuICAgICAgdGhpcy5jb250ZW50W25hbWVdPW5ldyBNbEZha2VGaWxlKGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKHJlc1sxXSkpO1xuICAgIH1cbiAgfVxufVxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5leGlzdHMgPSBmdW5jdGlvbihuYW1lKSB7XG4gIC8vIFRoZSByb290IG9mIHRoZSBkZXZpY2UgZXhpc3RzXG4gIGlmKG5hbWUgPT0gXCJcIikgcmV0dXJuIDE7XG4gIC8vIENoZWNrIGlmIGEgZGlyZWN0b3J5IGV4aXN0c1xuICB2YXIgbmFtZV9zbGFzaCA9IHRoaXMuc2xhc2gobmFtZSk7XG4gIGlmKHRoaXMuY29udGVudFtuYW1lX3NsYXNoXSkgcmV0dXJuIDE7XG4gIC8vIENoZWNrIGlmIGEgZmlsZSBleGlzdHNcbiAgdGhpcy5sb29rdXAobmFtZSk7XG4gIHJldHVybiB0aGlzLmNvbnRlbnRbbmFtZV0/MTowO1xufVxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5ta2RpciA9IGZ1bmN0aW9uKG5hbWUsbW9kZSwgcmFpc2VfdW5peCkge1xuICB2YXIgdW5peF9lcnJvciA9IHJhaXNlX3VuaXggJiYgY2FtbF9uYW1lZF92YWx1ZSgnVW5peC5Vbml4X2Vycm9yJyk7XG4gIGlmKHRoaXMuZXhpc3RzKG5hbWUpKSB7XG4gICAgaWYgKHVuaXhfZXJyb3IpIHtcbiAgICAgIGNhbWxfcmFpc2Vfd2l0aF9hcmdzKHVuaXhfZXJyb3IsIG1ha2VfdW5peF9lcnJfYXJncyhcIkVFWElTVFwiLCBcIm1rZGlyXCIsIHRoaXMubm0obmFtZSkpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihuYW1lICsgXCI6IEZpbGUgZXhpc3RzXCIpO1xuICAgIH1cbiAgfVxuICB2YXIgcGFyZW50ID0gL14oLiopXFwvW14vXSsvLmV4ZWMobmFtZSk7XG4gIHBhcmVudCA9IChwYXJlbnQgJiYgcGFyZW50WzFdKSB8fCAnJztcbiAgaWYoIXRoaXMuZXhpc3RzKHBhcmVudCkpe1xuICAgIGlmICh1bml4X2Vycm9yKSB7XG4gICAgICBjYW1sX3JhaXNlX3dpdGhfYXJncyh1bml4X2Vycm9yLCBtYWtlX3VuaXhfZXJyX2FyZ3MoXCJFTk9FTlRcIiwgXCJta2RpclwiLCB0aGlzLm5tKHBhcmVudCkpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihwYXJlbnQgKyBcIjogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeVwiKTtcbiAgICB9XG4gIH1cbiAgaWYoIXRoaXMuaXNfZGlyKHBhcmVudCkpe1xuICAgIGlmICh1bml4X2Vycm9yKSB7XG4gICAgICBjYW1sX3JhaXNlX3dpdGhfYXJncyh1bml4X2Vycm9yLCBtYWtlX3VuaXhfZXJyX2FyZ3MoXCJFTk9URElSXCIsIFwibWtkaXJcIiwgdGhpcy5ubShwYXJlbnQpKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IocGFyZW50ICsgXCI6IE5vdCBhIGRpcmVjdG9yeVwiKTtcbiAgICB9XG4gIH1cbiAgdGhpcy5jcmVhdGVfZGlyX2lmX25lZWRlZCh0aGlzLnNsYXNoKG5hbWUpKTtcbn1cbk1sRmFrZURldmljZS5wcm90b3R5cGUucm1kaXIgPSBmdW5jdGlvbihuYW1lLCByYWlzZV91bml4KSB7XG4gIHZhciB1bml4X2Vycm9yID0gcmFpc2VfdW5peCAmJiBjYW1sX25hbWVkX3ZhbHVlKCdVbml4LlVuaXhfZXJyb3InKTtcbiAgdmFyIG5hbWVfc2xhc2ggPSAobmFtZSA9PSBcIlwiKT9cIlwiOih0aGlzLnNsYXNoKG5hbWUpKTtcbiAgdmFyIHIgPSBuZXcgUmVnRXhwKFwiXlwiICsgbmFtZV9zbGFzaCArIFwiKFteL10rKVwiKTtcbiAgaWYoIXRoaXMuZXhpc3RzKG5hbWUpKSB7XG4gICAgaWYgKHVuaXhfZXJyb3IpIHtcbiAgICAgIGNhbWxfcmFpc2Vfd2l0aF9hcmdzKHVuaXhfZXJyb3IsIG1ha2VfdW5peF9lcnJfYXJncyhcIkVOT0VOVFwiLCBcInJtZGlyXCIsIHRoaXMubm0obmFtZSkpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihuYW1lICsgXCI6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnlcIik7XG4gICAgfVxuICB9XG4gIGlmKCF0aGlzLmlzX2RpcihuYW1lKSkge1xuICAgIGlmICh1bml4X2Vycm9yKSB7XG4gICAgICBjYW1sX3JhaXNlX3dpdGhfYXJncyh1bml4X2Vycm9yLCBtYWtlX3VuaXhfZXJyX2FyZ3MoXCJFTk9URElSXCIsIFwicm1kaXJcIiwgdGhpcy5ubShuYW1lKSkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKG5hbWUgKyBcIjogTm90IGEgZGlyZWN0b3J5XCIpO1xuICAgIH1cbiAgfVxuICBmb3IodmFyIG4gaW4gdGhpcy5jb250ZW50KSB7XG4gICAgaWYobi5tYXRjaChyKSkge1xuICAgICAgaWYgKHVuaXhfZXJyb3IpIHtcbiAgICAgICAgY2FtbF9yYWlzZV93aXRoX2FyZ3ModW5peF9lcnJvciwgbWFrZV91bml4X2Vycl9hcmdzKFwiRU5PVEVNUFRZXCIsIFwicm1kaXJcIiwgdGhpcy5ubShuYW1lKSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IodGhpcy5ubShuYW1lKSArIFwiOiBEaXJlY3Rvcnkgbm90IGVtcHR5XCIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBkZWxldGUgdGhpcy5jb250ZW50W25hbWVfc2xhc2hdO1xufVxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5yZWFkZGlyID0gZnVuY3Rpb24obmFtZSkge1xuICB2YXIgbmFtZV9zbGFzaCA9IChuYW1lID09IFwiXCIpP1wiXCI6KHRoaXMuc2xhc2gobmFtZSkpO1xuICBpZighdGhpcy5leGlzdHMobmFtZSkpIHtcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihuYW1lICsgXCI6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnlcIik7XG4gIH1cbiAgaWYoIXRoaXMuaXNfZGlyKG5hbWUpKSB7XG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IobmFtZSArIFwiOiBOb3QgYSBkaXJlY3RvcnlcIik7XG4gIH1cbiAgdmFyIHIgPSBuZXcgUmVnRXhwKFwiXlwiICsgbmFtZV9zbGFzaCArIFwiKFteL10rKVwiKTtcbiAgdmFyIHNlZW4gPSB7fVxuICB2YXIgYSA9IFtdO1xuICBmb3IodmFyIG4gaW4gdGhpcy5jb250ZW50KSB7XG4gICAgdmFyIG0gPSBuLm1hdGNoKHIpO1xuICAgIGlmKG0gJiYgIXNlZW5bbVsxXV0pIHtzZWVuW21bMV1dID0gdHJ1ZTsgYS5wdXNoKG1bMV0pfVxuICB9XG4gIHJldHVybiBhO1xufVxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5pc19kaXIgPSBmdW5jdGlvbihuYW1lKSB7XG4gIGlmKG5hbWUgPT0gXCJcIikgIHJldHVybiB0cnVlO1xuICB2YXIgbmFtZV9zbGFzaCA9IHRoaXMuc2xhc2gobmFtZSk7XG4gIHJldHVybiB0aGlzLmNvbnRlbnRbbmFtZV9zbGFzaF0/MTowO1xufVxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS51bmxpbmsgPSBmdW5jdGlvbihuYW1lKSB7XG4gIHZhciBvayA9IHRoaXMuY29udGVudFtuYW1lXT90cnVlOmZhbHNlO1xuICBkZWxldGUgdGhpcy5jb250ZW50W25hbWVdO1xuICByZXR1cm4gb2s7XG59XG5NbEZha2VEZXZpY2UucHJvdG90eXBlLm9wZW4gPSBmdW5jdGlvbihuYW1lLCBmKSB7XG4gIGlmKGYucmRvbmx5ICYmIGYud3Jvbmx5KVxuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHRoaXMubm0obmFtZSkgKyBcIiA6IGZsYWdzIE9wZW5fcmRvbmx5IGFuZCBPcGVuX3dyb25seSBhcmUgbm90IGNvbXBhdGlibGVcIik7XG4gIGlmKGYudGV4dCAmJiBmLmJpbmFyeSlcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcih0aGlzLm5tKG5hbWUpICsgXCIgOiBmbGFncyBPcGVuX3RleHQgYW5kIE9wZW5fYmluYXJ5IGFyZSBub3QgY29tcGF0aWJsZVwiKTtcbiAgdGhpcy5sb29rdXAobmFtZSk7XG4gIGlmICh0aGlzLmNvbnRlbnRbbmFtZV0pIHtcbiAgICBpZiAodGhpcy5pc19kaXIobmFtZSkpIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHRoaXMubm0obmFtZSkgKyBcIiA6IGlzIGEgZGlyZWN0b3J5XCIpO1xuICAgIGlmIChmLmNyZWF0ZSAmJiBmLmV4Y2wpIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHRoaXMubm0obmFtZSkgKyBcIiA6IGZpbGUgYWxyZWFkeSBleGlzdHNcIik7XG4gICAgdmFyIGZpbGUgPSB0aGlzLmNvbnRlbnRbbmFtZV07XG4gICAgaWYoZi50cnVuY2F0ZSkgZmlsZS50cnVuY2F0ZSgpO1xuICAgIHJldHVybiBmaWxlO1xuICB9IGVsc2UgaWYgKGYuY3JlYXRlKSB7XG4gICAgdGhpcy5jcmVhdGVfZGlyX2lmX25lZWRlZChuYW1lKTtcbiAgICB0aGlzLmNvbnRlbnRbbmFtZV0gPSBuZXcgTWxGYWtlRmlsZShjYW1sX2NyZWF0ZV9ieXRlcygwKSk7XG4gICAgcmV0dXJuIHRoaXMuY29udGVudFtuYW1lXTtcbiAgfSBlbHNlIHtcbiAgICBjYW1sX3JhaXNlX25vX3N1Y2hfZmlsZSAodGhpcy5ubShuYW1lKSk7XG4gIH1cbn1cblxuTWxGYWtlRGV2aWNlLnByb3RvdHlwZS5yZWdpc3Rlcj0gZnVuY3Rpb24gKG5hbWUsY29udGVudCl7XG4gIHZhciBmaWxlO1xuICBpZih0aGlzLmNvbnRlbnRbbmFtZV0pIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKHRoaXMubm0obmFtZSkgKyBcIiA6IGZpbGUgYWxyZWFkeSBleGlzdHNcIik7XG4gIGlmKGNhbWxfaXNfbWxfYnl0ZXMoY29udGVudCkpXG4gICAgZmlsZSA9IG5ldyBNbEZha2VGaWxlKGNvbnRlbnQpO1xuICBpZihjYW1sX2lzX21sX3N0cmluZyhjb250ZW50KSlcbiAgICBmaWxlID0gbmV3IE1sRmFrZUZpbGUoY2FtbF9ieXRlc19vZl9zdHJpbmcoY29udGVudCkpO1xuICBlbHNlIGlmKGNvbnRlbnQgaW5zdGFuY2VvZiBBcnJheSlcbiAgICBmaWxlID0gbmV3IE1sRmFrZUZpbGUoY2FtbF9ieXRlc19vZl9hcnJheShjb250ZW50KSk7XG4gIGVsc2UgaWYodHlwZW9mIGNvbnRlbnQgPT09IFwic3RyaW5nXCIpXG4gICAgZmlsZSA9IG5ldyBNbEZha2VGaWxlKGNhbWxfYnl0ZXNfb2ZfanNieXRlcyhjb250ZW50KSk7XG4gIGVsc2UgaWYoY29udGVudC50b1N0cmluZykge1xuICAgIHZhciBieXRlcyA9IGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKGNvbnRlbnQudG9TdHJpbmcoKSkpO1xuICAgIGZpbGUgPSBuZXcgTWxGYWtlRmlsZShieXRlcyk7XG4gIH1cbiAgaWYoZmlsZSl7XG4gICAgdGhpcy5jcmVhdGVfZGlyX2lmX25lZWRlZChuYW1lKTtcbiAgICB0aGlzLmNvbnRlbnRbbmFtZV0gPSBmaWxlO1xuICB9XG4gIGVsc2UgY2FtbF9yYWlzZV9zeXNfZXJyb3IodGhpcy5ubShuYW1lKSArIFwiIDogcmVnaXN0ZXJpbmcgZmlsZSB3aXRoIGludmFsaWQgY29udGVudCB0eXBlXCIpO1xufVxuXG5NbEZha2VEZXZpY2UucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWxGYWtlRGV2aWNlXG5cbi8vUHJvdmlkZXM6IE1sRmFrZUZpbGVcbi8vUmVxdWlyZXM6IE1sRmlsZVxuLy9SZXF1aXJlczogY2FtbF9jcmVhdGVfYnl0ZXMsIGNhbWxfbWxfYnl0ZXNfbGVuZ3RoLCBjYW1sX2JsaXRfYnl0ZXMsIGNhbWxfYmxpdF9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfZ2V0XG5mdW5jdGlvbiBNbEZha2VGaWxlKGNvbnRlbnQpe1xuICB0aGlzLmRhdGEgPSBjb250ZW50O1xufVxuTWxGYWtlRmlsZS5wcm90b3R5cGUgPSBuZXcgTWxGaWxlICgpO1xuTWxGYWtlRmlsZS5wcm90b3R5cGUudHJ1bmNhdGUgPSBmdW5jdGlvbihsZW4pe1xuICB2YXIgb2xkID0gdGhpcy5kYXRhO1xuICB0aGlzLmRhdGEgPSBjYW1sX2NyZWF0ZV9ieXRlcyhsZW58MCk7XG4gIGNhbWxfYmxpdF9ieXRlcyhvbGQsIDAsIHRoaXMuZGF0YSwgMCwgbGVuKTtcbn1cbk1sRmFrZUZpbGUucHJvdG90eXBlLmxlbmd0aCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGNhbWxfbWxfYnl0ZXNfbGVuZ3RoKHRoaXMuZGF0YSk7XG59XG5NbEZha2VGaWxlLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKG9mZnNldCxidWYscG9zLGxlbil7XG4gIHZhciBjbGVuID0gdGhpcy5sZW5ndGgoKTtcbiAgaWYob2Zmc2V0ICsgbGVuID49IGNsZW4pIHtcbiAgICB2YXIgbmV3X3N0ciA9IGNhbWxfY3JlYXRlX2J5dGVzKG9mZnNldCArIGxlbik7XG4gICAgdmFyIG9sZF9kYXRhID0gdGhpcy5kYXRhO1xuICAgIHRoaXMuZGF0YSA9IG5ld19zdHI7XG4gICAgY2FtbF9ibGl0X2J5dGVzKG9sZF9kYXRhLCAwLCB0aGlzLmRhdGEsIDAsIGNsZW4pO1xuICB9XG4gIGNhbWxfYmxpdF9zdHJpbmcoYnVmLCBwb3MsIHRoaXMuZGF0YSwgb2Zmc2V0LCBsZW4pO1xuICByZXR1cm4gMFxufVxuTWxGYWtlRmlsZS5wcm90b3R5cGUucmVhZCA9IGZ1bmN0aW9uKG9mZnNldCxidWYscG9zLGxlbil7XG4gIHZhciBjbGVuID0gdGhpcy5sZW5ndGgoKTtcbiAgY2FtbF9ibGl0X2J5dGVzKHRoaXMuZGF0YSwgb2Zmc2V0LCBidWYsIHBvcywgbGVuKTtcbiAgcmV0dXJuIDBcbn1cbk1sRmFrZUZpbGUucHJvdG90eXBlLnJlYWRfb25lID0gZnVuY3Rpb24ob2Zmc2V0KXtcbiAgcmV0dXJuIGNhbWxfYnl0ZXNfZ2V0KHRoaXMuZGF0YSwgb2Zmc2V0KTtcbn1cbk1sRmFrZUZpbGUucHJvdG90eXBlLmNsb3NlID0gZnVuY3Rpb24oKXtcblxufVxuTWxGYWtlRmlsZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNbEZha2VGaWxlXG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTQgSsOpcsO0bWUgVm91aWxsb24sIEh1Z28gSGV1emFyZFxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBmc19ub2RlX3N1cHBvcnRlZFxuZnVuY3Rpb24gZnNfbm9kZV9zdXBwb3J0ZWQgKCkge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiBqb29fZ2xvYmFsX29iamVjdC5wcm9jZXNzICE9PSAndW5kZWZpbmVkJ1xuICAgICAgJiYgdHlwZW9mIGpvb19nbG9iYWxfb2JqZWN0LnByb2Nlc3MudmVyc2lvbnMgIT09ICd1bmRlZmluZWQnXG4gICAgICAmJiB0eXBlb2Ygam9vX2dsb2JhbF9vYmplY3QucHJvY2Vzcy52ZXJzaW9ucy5ub2RlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgJiYgam9vX2dsb2JhbF9vYmplY3QucHJvY2Vzcy5wbGF0Zm9ybSAhPT0gXCJicm93c2VyXCIpXG59XG5cblxuLy9Qcm92aWRlczogTWxOb2RlRGV2aWNlXG4vL1JlcXVpcmVzOiBNbE5vZGVGaWxlLCBjYW1sX3JhaXNlX3N5c19lcnJvciwgY2FtbF9yYWlzZV93aXRoX2FyZ3Ncbi8vUmVxdWlyZXM6IG1ha2VfdW5peF9lcnJfYXJncywgY2FtbF9uYW1lZF92YWx1ZSwgY2FtbF9zdHJpbmdfb2ZfanNzdHJpbmdcbmZ1bmN0aW9uIE1sTm9kZURldmljZShyb290KSB7XG4gIHRoaXMuZnMgPSByZXF1aXJlKCdmcycpO1xuICB0aGlzLnJvb3QgPSByb290O1xufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5ubSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgcmV0dXJuICh0aGlzLnJvb3QgKyBuYW1lKTtcbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUuZXhpc3RzID0gZnVuY3Rpb24obmFtZSkge1xuICB0cnkge1xuICAgIHJldHVybiB0aGlzLmZzLmV4aXN0c1N5bmModGhpcy5ubShuYW1lKSk/MTowO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5ta2RpciA9IGZ1bmN0aW9uKG5hbWUsIG1vZGUsIHJhaXNlX3VuaXgpIHtcbiAgdHJ5IHtcbiAgICB0aGlzLmZzLm1rZGlyU3luYyh0aGlzLm5tKG5hbWUpLHttb2RlOm1vZGV9KTtcbiAgICByZXR1cm4gMFxuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLnJhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICB9XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLnJtZGlyID0gZnVuY3Rpb24obmFtZSwgcmFpc2VfdW5peCkge1xuICB0cnkge1xuICAgIHRoaXMuZnMucm1kaXJTeW5jKHRoaXMubm0obmFtZSkpO1xuICAgIHJldHVybiAwXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRoaXMucmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gIH1cbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUucmVhZGRpciA9IGZ1bmN0aW9uKG5hbWUsIHJhaXNlX3VuaXgpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gdGhpcy5mcy5yZWFkZGlyU3luYyh0aGlzLm5tKG5hbWUpKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5pc19kaXIgPSBmdW5jdGlvbihuYW1lKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHRoaXMuZnMuc3RhdFN5bmModGhpcy5ubShuYW1lKSkuaXNEaXJlY3RvcnkoKT8xOjA7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGVyci50b1N0cmluZygpKTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS51bmxpbmsgPSBmdW5jdGlvbihuYW1lLCByYWlzZV91bml4KSB7XG4gIHRyeSB7XG4gICAgdmFyIGIgPSB0aGlzLmZzLmV4aXN0c1N5bmModGhpcy5ubShuYW1lKSk/MTowO1xuICAgIHRoaXMuZnMudW5saW5rU3luYyh0aGlzLm5tKG5hbWUpKTtcbiAgICByZXR1cm4gYjtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5vcGVuID0gZnVuY3Rpb24obmFtZSwgZiwgcmFpc2VfdW5peCkge1xuICB2YXIgY29uc3RzID0gcmVxdWlyZSgnY29uc3RhbnRzJyk7XG4gIHZhciByZXMgPSAwO1xuICBmb3IodmFyIGtleSBpbiBmKXtcbiAgICBzd2l0Y2goa2V5KXtcbiAgICBjYXNlIFwicmRvbmx5XCIgIDogcmVzIHw9IGNvbnN0cy5PX1JET05MWTsgYnJlYWs7XG4gICAgY2FzZSBcIndyb25seVwiICA6IHJlcyB8PSBjb25zdHMuT19XUk9OTFk7IGJyZWFrO1xuICAgIGNhc2UgXCJhcHBlbmRcIiAgOlxuICAgICAgcmVzIHw9IGNvbnN0cy5PX1dST05MWSB8IGNvbnN0cy5PX0FQUEVORDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJjcmVhdGVcIiAgIDogcmVzIHw9IGNvbnN0cy5PX0NSRUFUOyAgICBicmVhaztcbiAgICBjYXNlIFwidHJ1bmNhdGVcIiA6IHJlcyB8PSBjb25zdHMuT19UUlVOQzsgICAgYnJlYWs7XG4gICAgY2FzZSBcImV4Y2xcIiAgICAgOiByZXMgfD0gY29uc3RzLk9fRVhDTDsgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJiaW5hcnlcIiAgIDogcmVzIHw9IGNvbnN0cy5PX0JJTkFSWTsgICBicmVhaztcbiAgICBjYXNlIFwidGV4dFwiICAgICA6IHJlcyB8PSBjb25zdHMuT19URVhUOyAgICAgYnJlYWs7XG4gICAgY2FzZSBcIm5vbmJsb2NrXCIgOiByZXMgfD0gY29uc3RzLk9fTk9OQkxPQ0s7IGJyZWFrO1xuICAgIH1cbiAgfVxuICB0cnkge1xuICAgIHZhciBmZCA9IHRoaXMuZnMub3BlblN5bmModGhpcy5ubShuYW1lKSwgcmVzKTtcbiAgICByZXR1cm4gbmV3IE1sTm9kZUZpbGUoZmQpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLnJhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICB9XG59XG5cbk1sTm9kZURldmljZS5wcm90b3R5cGUucmVuYW1lID0gZnVuY3Rpb24obywgbiwgcmFpc2VfdW5peCkge1xuICB0cnkge1xuICAgIHRoaXMuZnMucmVuYW1lU3luYyh0aGlzLm5tKG8pLCB0aGlzLm5tKG4pKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5zdGF0ID0gZnVuY3Rpb24obmFtZSwgcmFpc2VfdW5peCkge1xuICB0cnkge1xuICAgIHZhciBqc19zdGF0cyA9IHRoaXMuZnMuc3RhdFN5bmModGhpcy5ubShuYW1lKSk7XG4gICAgcmV0dXJuIHRoaXMuc3RhdHNfZnJvbV9qcyhqc19zdGF0cyk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRoaXMucmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gIH1cbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUubHN0YXQgPSBmdW5jdGlvbihuYW1lLCByYWlzZV91bml4KSB7XG4gIHRyeSB7XG4gICAgdmFyIGpzX3N0YXRzID0gdGhpcy5mcy5sc3RhdFN5bmModGhpcy5ubShuYW1lKSk7XG4gICAgcmV0dXJuIHRoaXMuc3RhdHNfZnJvbV9qcyhqc19zdGF0cyk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRoaXMucmFpc2Vfbm9kZWpzX2Vycm9yKGVyciwgcmFpc2VfdW5peCk7XG4gIH1cbn1cbk1sTm9kZURldmljZS5wcm90b3R5cGUuc3ltbGluayA9IGZ1bmN0aW9uKHRvX2RpciwgdGFyZ2V0LCBwYXRoLCByYWlzZV91bml4KSB7XG4gIHRyeSB7XG4gICAgdGhpcy5mcy5zeW1saW5rU3luYyh0aGlzLm5tKHRhcmdldCksIHRoaXMubm0ocGF0aCksIHRvX2RpciA/ICdkaXInIDogJ2ZpbGUnKTtcbiAgICByZXR1cm4gMDtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdGhpcy5yYWlzZV9ub2RlanNfZXJyb3IoZXJyLCByYWlzZV91bml4KTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5yZWFkbGluayA9IGZ1bmN0aW9uKG5hbWUsIHJhaXNlX3VuaXgpIHtcbiAgdHJ5IHtcbiAgICB2YXIgbGluayA9IHRoaXMuZnMucmVhZGxpbmtTeW5jKHRoaXMubm0obmFtZSksICd1dGY4Jyk7XG4gICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nKGxpbmspO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aGlzLnJhaXNlX25vZGVqc19lcnJvcihlcnIsIHJhaXNlX3VuaXgpO1xuICB9XG59XG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLnJhaXNlX25vZGVqc19lcnJvciA9IGZ1bmN0aW9uKGVyciwgcmFpc2VfdW5peCkge1xuICB2YXIgdW5peF9lcnJvciA9IGNhbWxfbmFtZWRfdmFsdWUoXCJVbml4LlVuaXhfZXJyb3JcIik7XG4gIGlmIChyYWlzZV91bml4ICYmIHVuaXhfZXJyb3IpIHtcbiAgICB2YXIgYXJncyA9IG1ha2VfdW5peF9lcnJfYXJncyhlcnIuY29kZSwgZXJyLnN5c2NhbGwsIGVyci5wYXRoLCBlcnIuZXJybm8pO1xuICAgIGNhbWxfcmFpc2Vfd2l0aF9hcmdzKHVuaXhfZXJyb3IsIGFyZ3MpO1xuICB9IGVsc2Uge1xuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGVyci50b1N0cmluZygpKTtcbiAgfVxufVxuTWxOb2RlRGV2aWNlLnByb3RvdHlwZS5zdGF0c19mcm9tX2pzID0gZnVuY3Rpb24oanNfc3RhdHMpIHtcbiAgLyogPT09VW5peC5maWxlX2tpbmQ9PT1cbiAgICogdHlwZSBmaWxlX2tpbmQgPVxuICAgKiAgICAgU19SRUcgICAgICAgICAgICAgICAgICAgICAgICgqKiBSZWd1bGFyIGZpbGUgKilcbiAgICogICB8IFNfRElSICAgICAgICAgICAgICAgICAgICAgICAoKiogRGlyZWN0b3J5ICopXG4gICAqICAgfCBTX0NIUiAgICAgICAgICAgICAgICAgICAgICAgKCoqIENoYXJhY3RlciBkZXZpY2UgKilcbiAgICogICB8IFNfQkxLICAgICAgICAgICAgICAgICAgICAgICAoKiogQmxvY2sgZGV2aWNlICopXG4gICAqICAgfCBTX0xOSyAgICAgICAgICAgICAgICAgICAgICAgKCoqIFN5bWJvbGljIGxpbmsgKilcbiAgICogICB8IFNfRklGTyAgICAgICAgICAgICAgICAgICAgICAoKiogTmFtZWQgcGlwZSAqKVxuICAgKiAgIHwgU19TT0NLICAgICAgICAgICAgICAgICAgICAgICgqKiBTb2NrZXQgKilcbiAgICovXG4gIHZhciBmaWxlX2tpbmQ7XG4gIGlmIChqc19zdGF0cy5pc0ZpbGUoKSkge1xuICAgIGZpbGVfa2luZCA9IDA7XG4gIH0gZWxzZSBpZiAoanNfc3RhdHMuaXNEaXJlY3RvcnkoKSkge1xuICAgIGZpbGVfa2luZCA9IDE7XG4gIH0gZWxzZSBpZiAoanNfc3RhdHMuaXNDaGFyYWN0ZXJEZXZpY2UoKSkge1xuICAgIGZpbGVfa2luZCA9IDI7XG4gIH0gZWxzZSBpZiAoanNfc3RhdHMuaXNCbG9ja0RldmljZSgpKSB7XG4gICAgZmlsZV9raW5kID0gMztcbiAgfSBlbHNlIGlmIChqc19zdGF0cy5pc1N5bWJvbGljTGluaygpKSB7XG4gICAgZmlsZV9raW5kID0gNDtcbiAgfSBlbHNlIGlmIChqc19zdGF0cy5pc0ZJRk8oKSkge1xuICAgIGZpbGVfa2luZCA9IDU7XG4gIH0gZWxzZSBpZiAoanNfc3RhdHMuaXNTb2NrZXQoKSkge1xuICAgIGZpbGVfa2luZCA9IDY7XG4gIH1cbiAgLyogPT09VW5peC5zdGF0cz09PVxuICAgKiB0eXBlIHN0YXRzID1cbiAgICogIHsgc3RfZGV2IDogaW50OyAgICAgICAgICAgICAgICgqKiBEZXZpY2UgbnVtYmVyICopXG4gICAqICAgIHN0X2lubyA6IGludDsgICAgICAgICAgICAgICAoKiogSW5vZGUgbnVtYmVyICopXG4gICAqICAgIHN0X2tpbmQgOiBmaWxlX2tpbmQ7ICAgICAgICAoKiogS2luZCBvZiB0aGUgZmlsZSAqKVxuICAgKiAgICBzdF9wZXJtIDogZmlsZV9wZXJtOyAgICAgICAgKCoqIEFjY2VzcyByaWdodHMgKilcbiAgICogICAgc3RfbmxpbmsgOiBpbnQ7ICAgICAgICAgICAgICgqKiBOdW1iZXIgb2YgbGlua3MgKilcbiAgICogICAgc3RfdWlkIDogaW50OyAgICAgICAgICAgICAgICgqKiBVc2VyIGlkIG9mIHRoZSBvd25lciAqKVxuICAgKiAgICBzdF9naWQgOiBpbnQ7ICAgICAgICAgICAgICAgKCoqIEdyb3VwIElEIG9mIHRoZSBmaWxlJ3MgZ3JvdXAgKilcbiAgICogICAgc3RfcmRldiA6IGludDsgICAgICAgICAgICAgICgqKiBEZXZpY2UgSUQgKGlmIHNwZWNpYWwgZmlsZSkgKilcbiAgICogICAgc3Rfc2l6ZSA6IGludDsgICAgICAgICAgICAgICgqKiBTaXplIGluIGJ5dGVzICopXG4gICAqICAgIHN0X2F0aW1lIDogZmxvYXQ7ICAgICAgICAgICAoKiogTGFzdCBhY2Nlc3MgdGltZSAqKVxuICAgKiAgICBzdF9tdGltZSA6IGZsb2F0OyAgICAgICAgICAgKCoqIExhc3QgbW9kaWZpY2F0aW9uIHRpbWUgKilcbiAgICogICAgc3RfY3RpbWUgOiBmbG9hdDsgICAgICAgICAgICgqKiBMYXN0IHN0YXR1cyBjaGFuZ2UgdGltZSAqKVxuICAgKiAgfVxuICAgKi9cbiAgcmV0dXJuIEJMT0NLKFxuICAgIDAsXG4gICAganNfc3RhdHMuZGV2LFxuICAgIGpzX3N0YXRzLmlubyxcbiAgICBmaWxlX2tpbmQsXG4gICAganNfc3RhdHMubW9kZSxcbiAgICBqc19zdGF0cy5ubGluayxcbiAgICBqc19zdGF0cy51aWQsXG4gICAganNfc3RhdHMuZ2lkLFxuICAgIGpzX3N0YXRzLnJkZXYsXG4gICAganNfc3RhdHMuc2l6ZSxcbiAgICBqc19zdGF0cy5hdGltZU1zLFxuICAgIGpzX3N0YXRzLm10aW1lTXMsXG4gICAganNfc3RhdHMuY3RpbWVNc1xuICApO1xufVxuXG5NbE5vZGVEZXZpY2UucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWxOb2RlRGV2aWNlXG5cbi8vUHJvdmlkZXM6IE1sTm9kZUZpbGVcbi8vUmVxdWlyZXM6IE1sRmlsZSwgY2FtbF9hcnJheV9vZl9zdHJpbmcsIGNhbWxfYXJyYXlfb2ZfYnl0ZXMsIGNhbWxfYnl0ZXNfc2V0LCBjYW1sX3JhaXNlX3N5c19lcnJvclxuZnVuY3Rpb24gTWxOb2RlRmlsZShmZCl7XG4gIHRoaXMuZnMgPSByZXF1aXJlKCdmcycpO1xuICB0aGlzLmZkID0gZmQ7XG59XG5NbE5vZGVGaWxlLnByb3RvdHlwZSA9IG5ldyBNbEZpbGUgKCk7XG5cbk1sTm9kZUZpbGUucHJvdG90eXBlLnRydW5jYXRlID0gZnVuY3Rpb24obGVuKXtcbiAgdHJ5IHtcbiAgICB0aGlzLmZzLmZ0cnVuY2F0ZVN5bmModGhpcy5mZCxsZW58MClcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoZXJyLnRvU3RyaW5nKCkpO1xuICB9XG59XG5NbE5vZGVGaWxlLnByb3RvdHlwZS5sZW5ndGggPSBmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHRoaXMuZnMuZnN0YXRTeW5jKHRoaXMuZmQpLnNpemU7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGVyci50b1N0cmluZygpKTtcbiAgfVxufVxuTWxOb2RlRmlsZS5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihvZmZzZXQsYnVmLGJ1Zl9vZmZzZXQsbGVuKXtcbiAgdmFyIGEgPSBjYW1sX2FycmF5X29mX3N0cmluZyhidWYpO1xuICBpZighIChhIGluc3RhbmNlb2Ygam9vX2dsb2JhbF9vYmplY3QuVWludDhBcnJheSkpXG4gICAgYSA9IG5ldyBqb29fZ2xvYmFsX29iamVjdC5VaW50OEFycmF5KGEpO1xuICB2YXIgYnVmZmVyID0gam9vX2dsb2JhbF9vYmplY3QuQnVmZmVyLmZyb20oYSk7XG4gIHRyeSB7XG4gICAgdGhpcy5mcy53cml0ZVN5bmModGhpcy5mZCwgYnVmZmVyLCBidWZfb2Zmc2V0LCBsZW4sIG9mZnNldCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGVyci50b1N0cmluZygpKTtcbiAgfVxuICByZXR1cm4gMDtcbn1cbk1sTm9kZUZpbGUucHJvdG90eXBlLnJlYWQgPSBmdW5jdGlvbihvZmZzZXQsYnVmLGJ1Zl9vZmZzZXQsbGVuKXtcbiAgdmFyIGEgPSBjYW1sX2FycmF5X29mX2J5dGVzKGJ1Zik7XG4gIGlmKCEgKGEgaW5zdGFuY2VvZiBqb29fZ2xvYmFsX29iamVjdC5VaW50OEFycmF5KSlcbiAgICBhID0gbmV3IGpvb19nbG9iYWxfb2JqZWN0LlVpbnQ4QXJyYXkoYSk7XG4gIHZhciBidWZmZXIgPSBqb29fZ2xvYmFsX29iamVjdC5CdWZmZXIuZnJvbShhKTtcbiAgdHJ5IHtcbiAgICB0aGlzLmZzLnJlYWRTeW5jKHRoaXMuZmQsIGJ1ZmZlciwgYnVmX29mZnNldCwgbGVuLCBvZmZzZXQpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjYW1sX3JhaXNlX3N5c19lcnJvcihlcnIudG9TdHJpbmcoKSk7XG4gIH1cbiAgZm9yKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKXtcbiAgICBjYW1sX2J5dGVzX3NldChidWYsYnVmX29mZnNldCArIGksYnVmZmVyW2J1Zl9vZmZzZXQraV0pO1xuICB9XG4gIHJldHVybiAwXG59XG5NbE5vZGVGaWxlLnByb3RvdHlwZS5yZWFkX29uZSA9IGZ1bmN0aW9uKG9mZnNldCl7XG4gIHZhciBhID0gbmV3IGpvb19nbG9iYWxfb2JqZWN0LlVpbnQ4QXJyYXkoMSk7XG4gIHZhciBidWZmZXIgPSBqb29fZ2xvYmFsX29iamVjdC5CdWZmZXIuZnJvbShhKTtcbiAgdHJ5IHtcbiAgICB0aGlzLmZzLnJlYWRTeW5jKHRoaXMuZmQsIGJ1ZmZlciwgMCwgMSwgb2Zmc2V0KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoZXJyLnRvU3RyaW5nKCkpO1xuICB9XG4gIHJldHVybiBidWZmZXJbMF07XG59XG5NbE5vZGVGaWxlLnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCl7XG4gIHRyeSB7XG4gICAgdGhpcy5mcy5jbG9zZVN5bmModGhpcy5mZCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGVyci50b1N0cmluZygpKTtcbiAgfVxufVxuXG5NbE5vZGVGaWxlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1sTm9kZUZpbGU7XG4iLCIvL1Byb3ZpZGVzOiBpbml0aWFsaXplX25hdFxuLy9SZXF1aXJlczogY2FtbF9jdXN0b21fb3BzXG4vL1JlcXVpcmVzOiBzZXJpYWxpemVfbmF0LCBkZXNlcmlhbGl6ZV9uYXQsIGNhbWxfaGFzaF9uYXRcbmZ1bmN0aW9uIGluaXRpYWxpemVfbmF0KCkge1xuICBjYW1sX2N1c3RvbV9vcHNbXCJfbmF0XCJdID1cbiAgICB7IGRlc2VyaWFsaXplIDogZGVzZXJpYWxpemVfbmF0LFxuICAgICAgc2VyaWFsaXplIDogc2VyaWFsaXplX25hdCxcbiAgICAgIGhhc2ggOiBjYW1sX2hhc2hfbmF0XG4gICAgfVxufVxuXG4vL1Byb3ZpZGVzOiBNbE5hdFxuZnVuY3Rpb24gTWxOYXQoeCl7XG4gIHRoaXMuZGF0YSA9IG5ldyBqb29fZ2xvYmFsX29iamVjdC5JbnQzMkFycmF5KHgpO1xuICAvLyBsZW5ndGhfbmF0IGlzbid0IGV4dGVybmFsLCBzbyB3ZSBoYXZlIHRvIG1ha2UgdGhlIE9iai5zaXplXG4gIC8vIHdvcmsgb3V0IHJpZ2h0LiBUaGUgKzIgdG8gYXJyYXkgbGVuZ3RoIHNlZW1zIHRvIHdvcmsuXG4gIHRoaXMubGVuZ3RoID0gdGhpcy5kYXRhLmxlbmd0aCArIDJcbn1cblxuTWxOYXQucHJvdG90eXBlLmNhbWxfY3VzdG9tID0gXCJfbmF0XCI7XG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9uYXRcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfaW50LCBudW1fZGlnaXRzX25hdFxuZnVuY3Rpb24gY2FtbF9oYXNoX25hdCh4KSB7XG4gIHZhciBsZW4gPSBudW1fZGlnaXRzX25hdCh4LCAwLCB4LmRhdGEubGVuZ3RoKTtcbiAgdmFyIGggPSAwO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIHguZGF0YVtpXSk7XG4gIH1cbiAgcmV0dXJuIGg7XG59XG5cblxuLy9Qcm92aWRlczogbmF0X29mX2FycmF5XG4vL1JlcXVpcmVzOiBNbE5hdFxuZnVuY3Rpb24gbmF0X29mX2FycmF5KGwpe1xuICByZXR1cm4gbmV3IE1sTmF0KGwpO1xufVxuXG4vL1Byb3ZpZGVzOiBjcmVhdGVfbmF0XG4vL1JlcXVpcmVzOiBNbE5hdFxuZnVuY3Rpb24gY3JlYXRlX25hdChzaXplKSB7XG4gIHZhciBhcnIgPSBuZXcgTWxOYXQoc2l6ZSk7XG4gIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICBhcnIuZGF0YVtpXSA9IC0xO1xuICB9XG4gIHJldHVybiBhcnI7XG59XG5cbi8vUHJvdmlkZXM6IHNldF90b196ZXJvX25hdFxuZnVuY3Rpb24gc2V0X3RvX3plcm9fbmF0KG5hdCwgb2ZzLCBsZW4pIHtcbiAgZm9yKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgbmF0LmRhdGFbb2ZzK2ldID0gMDtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogYmxpdF9uYXRcbmZ1bmN0aW9uIGJsaXRfbmF0KG5hdDEsIG9mczEsIG5hdDIsIG9mczIsIGxlbikge1xuICBmb3IodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICBuYXQxLmRhdGFbb2ZzMStpXSA9IG5hdDIuZGF0YVtvZnMyK2ldO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBzZXRfZGlnaXRfbmF0XG5mdW5jdGlvbiBzZXRfZGlnaXRfbmF0KG5hdCwgb2ZzLCBkaWdpdCkge1xuICBuYXQuZGF0YVtvZnNdID0gZGlnaXQ7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBudGhfZGlnaXRfbmF0XG5mdW5jdGlvbiBudGhfZGlnaXRfbmF0KG5hdCwgb2ZzKSB7XG4gIHJldHVybiBuYXQuZGF0YVtvZnNdO1xufVxuXG4vL1Byb3ZpZGVzOiBzZXRfZGlnaXRfbmF0X25hdGl2ZVxuZnVuY3Rpb24gc2V0X2RpZ2l0X25hdF9uYXRpdmUobmF0LCBvZnMsIGRpZ2l0KSB7XG4gIG5hdC5kYXRhW29mc10gPSBkaWdpdDtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IG50aF9kaWdpdF9uYXRfbmF0aXZlXG5mdW5jdGlvbiBudGhfZGlnaXRfbmF0X25hdGl2ZShuYXQsIG9mcykge1xuICByZXR1cm4gbmF0LmRhdGFbb2ZzXTtcbn1cblxuLy9Qcm92aWRlczogbnVtX2RpZ2l0c19uYXRcbmZ1bmN0aW9uIG51bV9kaWdpdHNfbmF0KG5hdCwgb2ZzLCBsZW4pIHtcbiAgZm9yKHZhciBpID0gbGVuIC0gMTsgaSA+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+PiAwKSkgcmV0dXJuIC0xO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjb21wYXJlX25hdF9yZWFsXG4vL1JlcXVpcmVzOiBjb21wYXJlX25hdFxuZnVuY3Rpb24gY29tcGFyZV9uYXRfcmVhbChuYXQxLG5hdDIpe1xuICByZXR1cm4gY29tcGFyZV9uYXQobmF0MSwwLG5hdDEuZGF0YS5sZW5ndGgsbmF0MiwwLG5hdDIuZGF0YS5sZW5ndGgpO1xufVxuXG4vL1Byb3ZpZGVzOiBsYW5kX2RpZ2l0X25hdFxuZnVuY3Rpb24gbGFuZF9kaWdpdF9uYXQobmF0MSwgb2ZzMSwgbmF0Miwgb2ZzMikge1xuICBuYXQxLmRhdGFbb2ZzMV0gJj0gbmF0Mi5kYXRhW29mczJdO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogbG9yX2RpZ2l0X25hdFxuZnVuY3Rpb24gbG9yX2RpZ2l0X25hdChuYXQxLCBvZnMxLCBuYXQyLCBvZnMyKSB7XG4gIG5hdDEuZGF0YVtvZnMxXSB8PSBuYXQyLmRhdGFbb2ZzMl07XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBseG9yX2RpZ2l0X25hdFxuZnVuY3Rpb24gbHhvcl9kaWdpdF9uYXQobmF0MSwgb2ZzMSwgbmF0Miwgb2ZzMikge1xuICBuYXQxLmRhdGFbb2ZzMV0gXj0gbmF0Mi5kYXRhW29mczJdO1xuICByZXR1cm4gMDtcbn1cblxuXG4vL1Byb3ZpZGVzOiBzZXJpYWxpemVfbmF0XG5mdW5jdGlvbiBzZXJpYWxpemVfbmF0KHdyaXRlciwgbmF0LCBzeil7XG4gIHZhciBsZW4gPSBuYXQuZGF0YS5sZW5ndGg7XG4gIHdyaXRlci53cml0ZSgzMiwgbGVuKTtcbiAgZm9yKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKXtcbiAgICB3cml0ZXIud3JpdGUoMzIsIG5hdC5kYXRhW2ldKTtcbiAgfVxuICBzelswXSA9IGxlbiAqIDQ7XG4gIHN6WzFdID0gbGVuICogODtcbn1cblxuLy9Qcm92aWRlczogZGVzZXJpYWxpemVfbmF0XG4vL1JlcXVpcmVzOiBNbE5hdFxuZnVuY3Rpb24gZGVzZXJpYWxpemVfbmF0KHJlYWRlciwgc3ope1xuICB2YXIgbGVuID0gcmVhZGVyLnJlYWQzMnMoKTtcbiAgdmFyIG5hdCA9IG5ldyBNbE5hdChsZW4pO1xuICBmb3IodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspe1xuICAgIG5hdC5kYXRhW2ldID0gcmVhZGVyLnJlYWQzMnMoKTtcbiAgfVxuICBzelswXSA9IGxlbiAqIDQ7XG4gIHJldHVybiBuYXQ7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTQgSHVnbyBIZXV6YXJkXG5cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG5cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX3N0YXRlXG52YXIgY2FtbF9ncl9zdGF0ZTtcblxuLy9Qcm92aWRlczogY2FtbF9ncl9zdGF0ZV9nZXRcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVcbi8vUmVxdWlyZXM6IGNhbWxfbmFtZWRfdmFsdWUsIGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfZ3Jfc3RhdGVfZ2V0KCkge1xuICBpZihjYW1sX2dyX3N0YXRlKSB7XG4gICAgcmV0dXJuIGNhbWxfZ3Jfc3RhdGU7XG4gIH1cbiAgdGhyb3cgWzAsY2FtbF9uYW1lZF92YWx1ZShcIkdyYXBoaWNzLkdyYXBoaWNfZmFpbHVyZVwiKSwgY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcIk5vdCBpbml0aWFsaXplZFwiKV1cbn1cbi8vUHJvdmlkZXM6IGNhbWxfZ3Jfc3RhdGVfc2V0XG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlLGNhbWxfZ3Jfc3RhdGVfaW5pdFxuZnVuY3Rpb24gY2FtbF9ncl9zdGF0ZV9zZXQoY3R4KSB7XG4gIGNhbWxfZ3Jfc3RhdGU9Y3R4O1xuICBjYW1sX2dyX3N0YXRlX2luaXQoKVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9vcGVuX2dyYXBoXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2NyZWF0ZVxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9zZXRcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2dyX29wZW5fZ3JhcGgoaW5mbyl7XG4gIHZhciBnID0gam9vX2dsb2JhbF9vYmplY3Q7XG4gIHZhciBpbmZvID0gY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcoaW5mbyk7XG4gIGZ1bmN0aW9uIGdldChuYW1lKXtcbiAgICB2YXIgcmVzID0gaW5mby5tYXRjaChcIihefCwpICpcIituYW1lK1wiICo9ICooW2EtekEtWjAtOV9dKykgKigsfCQpXCIpO1xuICAgIGlmKHJlcykgcmV0dXJuIHJlc1syXTtcbiAgfVxuICB2YXIgc3BlY3MgPSBbXTtcbiAgaWYoIShpbmZvPT1cIlwiKSkgc3BlY3MucHVzaChpbmZvKTtcbiAgdmFyIHRhcmdldCA9IGdldChcInRhcmdldFwiKTtcbiAgaWYoIXRhcmdldCkgdGFyZ2V0PVwiXCI7XG4gIHZhciBzdGF0dXMgPSBnZXQoXCJzdGF0dXNcIik7XG4gIGlmKCFzdGF0dXMpIHNwZWNzLnB1c2goXCJzdGF0dXM9MVwiKVxuXG4gIHZhciB3ID0gZ2V0KFwid2lkdGhcIik7XG4gIHcgPSB3P3BhcnNlSW50KHcpOjIwMDtcbiAgc3BlY3MucHVzaChcIndpZHRoPVwiK3cpO1xuXG4gIHZhciBoID0gZ2V0KFwiaGVpZ2h0XCIpO1xuICBoID0gaD9wYXJzZUludChoKToyMDA7XG4gIHNwZWNzLnB1c2goXCJoZWlnaHQ9XCIraCk7XG5cbiAgdmFyIHdpbiA9IGcub3BlbihcImFib3V0OmJsYW5rXCIsdGFyZ2V0LHNwZWNzLmpvaW4oXCIsXCIpKTtcbiAgaWYoIXdpbikge2NhbWxfZmFpbHdpdGgoXCJHcmFwaGljcy5vcGVuX2dyYXBoOiBjYW5ub3Qgb3BlbiB0aGUgd2luZG93XCIpfVxuICB2YXIgZG9jID0gd2luLmRvY3VtZW50O1xuICB2YXIgY2FudmFzID0gZG9jLmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7XG4gIGNhbnZhcy53aWR0aCA9IHc7XG4gIGNhbnZhcy5oZWlnaHQgPSBoO1xuICB2YXIgY3R4ID0gY2FtbF9ncl9zdGF0ZV9jcmVhdGUoY2FudmFzLHcsaCk7XG4gIGN0eC5zZXRfdGl0bGUgPSBmdW5jdGlvbiAodGl0bGUpIHtcbiAgICBkb2MudGl0bGUgPSB0aXRsZTtcbiAgfTtcbiAgY2FtbF9ncl9zdGF0ZV9zZXQoY3R4KTtcbiAgdmFyIGJvZHkgPSBkb2MuYm9keTtcbiAgYm9keS5zdHlsZS5tYXJnaW4gPSBcIjBweFwiO1xuICBib2R5LmFwcGVuZENoaWxkKGNhbnZhcyk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX3N0YXRlX2luaXRcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc2V0X2NvbG9yLGNhbWxfZ3JfbW92ZXRvLGNhbWxfZ3JfcmVzaXplX3dpbmRvd1xuLy9SZXF1aXJlczogY2FtbF9ncl9zZXRfbGluZV93aWR0aCxjYW1sX2dyX3NldF90ZXh0X3NpemUsY2FtbF9ncl9zZXRfZm9udFxuLy9SZXF1aXJlczogY2FtbF9ncl9zZXRfd2luZG93X3RpdGxlXG5mdW5jdGlvbiBjYW1sX2dyX3N0YXRlX2luaXQoKXtcbiAgY2FtbF9ncl9tb3ZldG8oY2FtbF9ncl9zdGF0ZS54LGNhbWxfZ3Jfc3RhdGUueSk7XG4gIGNhbWxfZ3JfcmVzaXplX3dpbmRvdyhjYW1sX2dyX3N0YXRlLndpZHRoLGNhbWxfZ3Jfc3RhdGUuaGVpZ2h0KTtcbiAgY2FtbF9ncl9zZXRfbGluZV93aWR0aChjYW1sX2dyX3N0YXRlLmxpbmVfd2lkdGgpO1xuICBjYW1sX2dyX3NldF90ZXh0X3NpemUoY2FtbF9ncl9zdGF0ZS50ZXh0X3NpemUpO1xuICBjYW1sX2dyX3NldF9mb250KGNhbWxfZ3Jfc3RhdGUuZm9udCk7XG4gIGNhbWxfZ3Jfc2V0X2NvbG9yKGNhbWxfZ3Jfc3RhdGUuY29sb3IpO1xuICBjYW1sX2dyX3NldF93aW5kb3dfdGl0bGUoY2FtbF9ncl9zdGF0ZS50aXRsZSk7XG4gIC8vY2FtbF9ncl9yZXNpemVfd2luZG93IG1pZ2h0IHJlc2V0IHNvbWUgY2FudmFzJyBwcm9wZXJ0aWVzXG4gIGNhbWxfZ3Jfc3RhdGUuY29udGV4dC50ZXh0QmFzZWxpbmUgPSAnYm90dG9tJztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9zdGF0ZV9jcmVhdGVcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfZ3Jfc3RhdGVfY3JlYXRlKGNhbnZhcyx3LGgpe1xuICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XG4gIHJldHVybiB7XG4gICAgY29udGV4dDogY29udGV4dCxcbiAgICBjYW52YXMgOiBjYW52YXMsXG4gICAgeCA6IDAsXG4gICAgeSA6IDAsXG4gICAgd2lkdGggOiB3LFxuICAgIGhlaWdodCA6IGgsXG4gICAgbGluZV93aWR0aCA6IDEsXG4gICAgZm9udCA6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoXCJmaXhlZFwiKSxcbiAgICB0ZXh0X3NpemUgOiAyNixcbiAgICBjb2xvciA6IDB4MDAwMDAwLFxuICAgIHRpdGxlIDogY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcIlwiKVxuICB9O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX2RvY19vZl9zdGF0ZVxuZnVuY3Rpb24gY2FtbF9ncl9kb2Nfb2Zfc3RhdGUoc3RhdGUpIHtcbiAgaWYoc3RhdGUuY2FudmFzLm93bmVyRG9jdW1lbnQpXG4gICAgcmV0dXJuIHN0YXRlLmNhbnZhcy5vd25lckRvY3VtZW50O1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX2Nsb3NlX2dyYXBoXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9jbG9zZV9ncmFwaCgpe1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHMuY2FudmFzLndpZHRoID0gMDtcbiAgcy5jYW52YXMuaGVpZ2h0ID0gMDtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3Jfc2V0X3dpbmRvd190aXRsZVxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2dyX3NldF93aW5kb3dfdGl0bGUobmFtZSl7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgcy50aXRsZSA9IG5hbWU7XG4gIHZhciBqc25hbWUgPSBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhuYW1lKTtcbiAgaWYocy5zZXRfdGl0bGUpIHMuc2V0X3RpdGxlKGpzbmFtZSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX3Jlc2l6ZV93aW5kb3dcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG5mdW5jdGlvbiBjYW1sX2dyX3Jlc2l6ZV93aW5kb3codyxoKXtcbiAgdmFyIHMgPSBjYW1sX2dyX3N0YXRlX2dldCgpXG4gIHMud2lkdGggPSB3O1xuICBzLmhlaWdodCA9IGg7XG4gIHMuY2FudmFzLndpZHRoID0gdztcbiAgcy5jYW52YXMuaGVpZ2h0ID0gaDtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfY2xlYXJfZ3JhcGhcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG5mdW5jdGlvbiBjYW1sX2dyX2NsZWFyX2dyYXBoKCl7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgcy5jYW52YXMud2lkdGggPSBzLndpZHRoO1xuICBzLmNhbnZhcy5oZWlnaHQgPSBzLmhlaWdodDtcbiAgLy8gIHMuY29udGV4dC5zdHJva2VSZWN0ICgwLiwgMC4sIHMud2lkdGgsIHMuaGVpZ2h0KTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3Jfc2l6ZV94XG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9zaXplX3goKXtcbiAgdmFyIHMgPSBjYW1sX2dyX3N0YXRlX2dldCgpO1xuICByZXR1cm4gcy53aWR0aDtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZ3Jfc2l6ZV95XG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9zaXplX3koKXtcbiAgdmFyIHMgPSBjYW1sX2dyX3N0YXRlX2dldCgpO1xuICByZXR1cm4gcy5oZWlnaHQ7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9ncl9zZXRfY29sb3Jcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG5mdW5jdGlvbiBjYW1sX2dyX3NldF9jb2xvcihjb2xvcil7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgZnVuY3Rpb24gY29udmVydChudW1iZXIpIHtcbiAgICB2YXIgc3RyID0gJycgKyBudW1iZXIudG9TdHJpbmcoMTYpO1xuICAgIHdoaWxlIChzdHIubGVuZ3RoIDwgMikgc3RyID0gJzAnICsgc3RyO1xuICAgIHJldHVybiBzdHI7XG4gIH1cbiAgdmFyXG4gIHIgPSAoY29sb3IgPj4gMTYpICYgMHhmZixcbiAgZyA9IChjb2xvciA+PiA4KSAgJiAweGZmLFxuICBiID0gKGNvbG9yID4+IDApICAmIDB4ZmY7XG4gIHMuY29sb3I9Y29sb3I7XG4gIHZhciBjX3N0ciA9ICcjJyArIGNvbnZlcnQocikgKyBjb252ZXJ0KGcpICsgY29udmVydChiKTtcbiAgcy5jb250ZXh0LmZpbGxTdHlsZSA9ICAgY19zdHI7XG4gIHMuY29udGV4dC5zdHJva2VTdHlsZSA9IGNfc3RyO1xuICByZXR1cm4gMDtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfcGxvdFxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbmZ1bmN0aW9uIGNhbWxfZ3JfcGxvdCh4LHkpe1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHZhciBpbT1zLmNvbnRleHQuY3JlYXRlSW1hZ2VEYXRhKDEsMSk7XG4gIHZhciBkID0gaW0uZGF0YTtcbiAgdmFyIGNvbG9yID0gcy5jb2xvcjtcbiAgZFswXSA9IChjb2xvciA+PiAxNikgJiAweGZmOyAvL3JcbiAgZFsxXSA9IChjb2xvciA+PiA4KSAgJiAweGZmLCAvL2dcbiAgZFsyXSA9IChjb2xvciA+PiAwKSAgJiAweGZmOyAvL2JcbiAgZFszXSA9IDB4RkY7IC8vYVxuICBzLng9eDtcbiAgcy55PXk7XG4gIHMuY29udGV4dC5wdXRJbWFnZURhdGEoaW0seCxzLmhlaWdodCAtIHkpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9wb2ludF9jb2xvclxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbmZ1bmN0aW9uIGNhbWxfZ3JfcG9pbnRfY29sb3IoeCx5KXtcbiAgdmFyIHMgPSBjYW1sX2dyX3N0YXRlX2dldCgpO1xuICB2YXIgaW09cy5jb250ZXh0LmdldEltYWdlRGF0YSh4LHMuaGVpZ2h0IC0geSwxLDEpO1xuICB2YXIgZCA9IGltLmRhdGE7XG4gIHJldHVybiAoZFswXSA8PCAxNikgKyAoZFsxXSA8PCA4KSArIGRbMl07XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2dyX21vdmV0b1xuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbmZ1bmN0aW9uIGNhbWxfZ3JfbW92ZXRvKHgseSl7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgcy54PXg7XG4gIHMueT15O1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9jdXJyZW50X3hcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG5mdW5jdGlvbiBjYW1sX2dyX2N1cnJlbnRfeCgpe1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHJldHVybiBzLnhcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfY3VycmVudF95XG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9jdXJyZW50X3koKXtcbiAgdmFyIHMgPSBjYW1sX2dyX3N0YXRlX2dldCgpO1xuICByZXR1cm4gcy55XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2dyX2xpbmV0b1xuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbmZ1bmN0aW9uIGNhbWxfZ3JfbGluZXRvKHgseSl7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgcy5jb250ZXh0LmJlZ2luUGF0aCgpO1xuICBzLmNvbnRleHQubW92ZVRvKHMueCxzLmhlaWdodCAtIHMueSk7XG4gIHMuY29udGV4dC5saW5lVG8oeCxzLmhlaWdodCAtIHkpO1xuICBzLmNvbnRleHQuc3Ryb2tlKCk7XG4gIHMueD14O1xuICBzLnk9eTtcbiAgcmV0dXJuIDA7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2dyX2RyYXdfcmVjdFxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbmZ1bmN0aW9uIGNhbWxfZ3JfZHJhd19yZWN0KHgseSx3LGgpe1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHMuY29udGV4dC5zdHJva2VSZWN0KHgscy5oZWlnaHQgLSB5LHcsLWgpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9hcmNfYXV4XG5mdW5jdGlvbiBjYW1sX2dyX2FyY19hdXgoY3R4LGN4LGN5LHJ5LHJ4LGExLGEyKXtcbiAgd2hpbGUoYTE+YTIpIGEyKz0zNjA7XG4gIGExIC89IDE4MDtcbiAgYTIgLz0gMTgwO1xuICB2YXIgcm90ID0gMCx4UG9zLHlQb3MseFBvc19wcmV2LHlQb3NfcHJldjtcbiAgdmFyIHNwYWNlID0gMjtcbiAgdmFyIG51bSA9ICgoKGEyIC0gYTEpICogTWF0aC5QSSAqICgocngrcnkpLzIpKSAvIHNwYWNlKSB8IDA7XG4gIHZhciBkZWx0YSA9IChhMiAtIGExKSAqIE1hdGguUEkgLyBudW07XG4gIHZhciBpID0gYTEgKiBNYXRoLlBJO1xuICBmb3IgKHZhciBqPTA7ajw9bnVtO2orKyl7XG4gICAgeFBvcyA9IGN4IC0gKHJ4ICogTWF0aC5zaW4oaSkpICogTWF0aC5zaW4ocm90ICogTWF0aC5QSSkgKyAocnkgKiBNYXRoLmNvcyhpKSkgKiBNYXRoLmNvcyhyb3QgKiBNYXRoLlBJKTtcbiAgICB4UG9zID0geFBvcy50b0ZpeGVkKDIpO1xuICAgIHlQb3MgPSBjeSArIChyeSAqIE1hdGguY29zKGkpKSAqIE1hdGguc2luKHJvdCAqIE1hdGguUEkpICsgKHJ4ICogTWF0aC5zaW4oaSkpICogTWF0aC5jb3Mocm90ICogTWF0aC5QSSk7XG4gICAgeVBvcyA9IHlQb3MudG9GaXhlZCgyKTtcbiAgICBpZiAoaj09MCkge1xuICAgICAgY3R4Lm1vdmVUbyh4UG9zLCB5UG9zKTtcbiAgICB9IGVsc2UgaWYgKHhQb3NfcHJldiE9eFBvcyB8fCB5UG9zX3ByZXYhPXlQb3Mpe1xuICAgICAgY3R4LmxpbmVUbyh4UG9zLCB5UG9zKTtcbiAgICB9XG4gICAgeFBvc19wcmV2PXhQb3M7XG4gICAgeVBvc19wcmV2PXlQb3M7XG4gICAgaS09IGRlbHRhOy8vY2N3XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9ncl9kcmF3X2FyY1xuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXQsIGNhbWxfZ3JfYXJjX2F1eFxuZnVuY3Rpb24gY2FtbF9ncl9kcmF3X2FyYyh4LHkscngscnksYTEsYTIpe1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHMuY29udGV4dC5iZWdpblBhdGgoKTtcbiAgY2FtbF9ncl9hcmNfYXV4KHMuY29udGV4dCx4LHMuaGVpZ2h0IC0geSxyeCxyeSxhMSxhMik7XG4gIHMuY29udGV4dC5zdHJva2UoKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3Jfc2V0X2xpbmVfd2lkdGhcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG5mdW5jdGlvbiBjYW1sX2dyX3NldF9saW5lX3dpZHRoKHcpe1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHMubGluZV93aWR0aCA9IHc7XG4gIHMuY29udGV4dC5saW5lV2lkdGggPSB3XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX2ZpbGxfcmVjdFxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbmZ1bmN0aW9uIGNhbWxfZ3JfZmlsbF9yZWN0KHgseSx3LGgpe1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHMuY29udGV4dC5maWxsUmVjdCh4LHMuaGVpZ2h0IC0geSx3LC1oKTtcbiAgcmV0dXJuIDA7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2dyX2ZpbGxfcG9seVxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbmZ1bmN0aW9uIGNhbWxfZ3JfZmlsbF9wb2x5KGFyKXtcbiAgdmFyIHMgPSBjYW1sX2dyX3N0YXRlX2dldCgpO1xuICBzLmNvbnRleHQuYmVnaW5QYXRoKCk7XG4gIHMuY29udGV4dC5tb3ZlVG8oYXJbMV1bMV0scy5oZWlnaHQgLSBhclsxXVsyXSk7XG4gIGZvcih2YXIgaSA9IDI7IGkgPCBhci5sZW5ndGg7IGkrKylcbiAgICBzLmNvbnRleHQubGluZVRvKGFyW2ldWzFdLHMuaGVpZ2h0IC0gYXJbaV1bMl0pO1xuICBzLmNvbnRleHQubGluZVRvKGFyWzFdWzFdLHMuaGVpZ2h0IC0gYXJbMV1bMl0pO1xuICBzLmNvbnRleHQuZmlsbCgpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9maWxsX2FyY1xuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXQsIGNhbWxfZ3JfYXJjX2F1eFxuZnVuY3Rpb24gY2FtbF9ncl9maWxsX2FyYyh4LHkscngscnksYTEsYTIpe1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHMuY29udGV4dC5iZWdpblBhdGgoKTtcbiAgY2FtbF9ncl9hcmNfYXV4KHMuY29udGV4dCx4LHMuaGVpZ2h0IC0geSxyeCxyeSxhMSxhMik7XG4gIHMuY29udGV4dC5maWxsKCk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX2RyYXdfc3RyXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9kcmF3X3N0cihzdHIpe1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHZhciBtID0gcy5jb250ZXh0Lm1lYXN1cmVUZXh0KHN0cik7XG4gIHZhciBkeCA9IG0ud2lkdGg7XG4gIHMuY29udGV4dC5maWxsVGV4dChzdHIscy54LHMuaGVpZ2h0IC0gcy55KTtcbiAgcy54ICs9IGR4IHwgMDtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfZHJhd19jaGFyXG4vL1JlcXVpcmVzOiBjYW1sX2dyX2RyYXdfc3RyXG5mdW5jdGlvbiBjYW1sX2dyX2RyYXdfY2hhcihjKXtcbiAgY2FtbF9ncl9kcmF3X3N0cihTdHJpbmcuZnJvbUNoYXJDb2RlKGMpKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfZHJhd19zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfZ3JfZHJhd19zdHJcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2dyX2RyYXdfc3RyaW5nKHN0cil7XG4gIGNhbWxfZ3JfZHJhd19zdHIoY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcoc3RyKSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX3NldF9mb250XG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfZ3Jfc2V0X2ZvbnQoZil7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgcy5mb250ID0gZjtcbiAgcy5jb250ZXh0LmZvbnQgPSBzLnRleHRfc2l6ZSArIFwicHggXCIgKyBjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhzLmZvbnQpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9zZXRfdGV4dF9zaXplXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfZ3Jfc2V0X3RleHRfc2l6ZShzaXplKXtcbiAgdmFyIHMgPSBjYW1sX2dyX3N0YXRlX2dldCgpO1xuICBzLnRleHRfc2l6ZSA9IHNpemU7XG4gIHMuY29udGV4dC5mb250ID0gcy50ZXh0X3NpemUgKyBcInB4IFwiICsgY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcocy5mb250KTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfdGV4dF9zaXplXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfZ3JfdGV4dF9zaXplKHR4dCl7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgdmFyIHcgPSBzLmNvbnRleHQubWVhc3VyZVRleHQoY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcodHh0KSkud2lkdGg7XG4gIHJldHVybiBbMCx3LHMudGV4dF9zaXplXTtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX21ha2VfaW1hZ2Vcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG5mdW5jdGlvbiBjYW1sX2dyX21ha2VfaW1hZ2UoYXJyKXtcbiAgdmFyIHMgPSBjYW1sX2dyX3N0YXRlX2dldCgpO1xuICB2YXIgaCA9IGFyci5sZW5ndGggLSAxIDtcbiAgdmFyIHcgPSBhcnJbMV0ubGVuZ3RoIC0gMTtcbiAgdmFyIGltID0gcy5jb250ZXh0LmNyZWF0ZUltYWdlRGF0YSh3LGgpO1xuICBmb3IodmFyIGk9MDtpPGg7aSsrKXtcbiAgICBmb3IodmFyIGo9MDtqPHc7aisrKXtcbiAgICAgIHZhciBjID0gYXJyW2krMV1baisxXTtcbiAgICAgIHZhciBvID0gaSoodyo0KSArIChqICogNCk7XG4gICAgICBpZihjID09IC0xKSB7XG4gICAgICAgIGltLmRhdGFbbyArIDBdID0gMDtcbiAgICAgICAgaW0uZGF0YVtvICsgMV0gPSAwO1xuICAgICAgICBpbS5kYXRhW28gKyAyXSA9IDA7XG4gICAgICAgIGltLmRhdGFbbyArIDNdID0gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGltLmRhdGFbbyArIDBdID0gYyA+PiAxNiAmIDB4ZmY7XG4gICAgICAgIGltLmRhdGFbbyArIDFdID0gYyA+PiAgOCAmIDB4ZmY7XG4gICAgICAgIGltLmRhdGFbbyArIDJdID0gYyA+PiAgMCAmIDBYZmY7XG4gICAgICAgIGltLmRhdGFbbyArIDNdID0gMHhmZjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGltXG59XG4vL1Byb3ZpZGVzOiBjYW1sX2dyX2R1bXBfaW1hZ2Vcbi8vUmVxdWlyZXM6IGNhbWxfZ3Jfc3RhdGVfZ2V0XG5mdW5jdGlvbiBjYW1sX2dyX2R1bXBfaW1hZ2UoaW0pe1xuICB2YXIgZGF0YSA9IFswXVxuICBmb3IodmFyIGk9MDsgaTxpbS5oZWlnaHQ7aSsrKXtcbiAgICBkYXRhW2krMV0gPSBbMF1cbiAgICBmb3IodmFyIGo9MDsgajxpbS53aWR0aDtqKyspe1xuICAgICAgdmFyIG8gPSBpKihpbS53aWR0aCo0KSArIChqICogNCksXG4gICAgICAgICAgciA9IGltLmRhdGFbbyswXSxcbiAgICAgICAgICBnID0gaW0uZGF0YVtvKzFdLFxuICAgICAgICAgIGIgPSBpbS5kYXRhW28rMl07XG4gICAgICBkYXRhW2krMV1baisxXSA9IChyIDw8IDE2KSArIChnIDw8IDgpICsgYlxuICAgIH1cbiAgfVxuICByZXR1cm4gZGF0YVxufVxuLy9Qcm92aWRlczogY2FtbF9ncl9kcmF3X2ltYWdlXG4vL1JlcXVpcmVzOiBjYW1sX2dyX3N0YXRlX2dldFxuZnVuY3Rpb24gY2FtbF9ncl9kcmF3X2ltYWdlKGltLHgseSl7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgaWYoIWltLmltYWdlKSB7XG4gICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7XG4gICAgY2FudmFzLndpZHRoID0gcy53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gcy5oZWlnaHQ7XG4gICAgY2FudmFzLmdldENvbnRleHQoXCIyZFwiKS5wdXRJbWFnZURhdGEoaW0sMCwwKTtcbiAgICB2YXIgaW1hZ2UgPSBuZXcgam9vX2dsb2JhbF9vYmplY3QuSW1hZ2UoKTtcbiAgICBpbWFnZS5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBzLmNvbnRleHQuZHJhd0ltYWdlKGltYWdlLHgscy5oZWlnaHQgLSBpbS5oZWlnaHQgLSB5KTtcbiAgICAgIGltLmltYWdlID0gaW1hZ2U7XG4gICAgfVxuICAgIGltYWdlLnNyYyA9IGNhbnZhcy50b0RhdGFVUkwoXCJpbWFnZS9wbmdcIik7XG4gIH0gZWxzZSB7XG4gICAgcy5jb250ZXh0LmRyYXdJbWFnZShpbS5pbWFnZSx4LHMuaGVpZ2h0IC0gaW0uaGVpZ2h0IC0geSk7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2dyX2NyZWF0ZV9pbWFnZVxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbmZ1bmN0aW9uIGNhbWxfZ3JfY3JlYXRlX2ltYWdlKHgseSl7XG4gIHZhciBzID0gY2FtbF9ncl9zdGF0ZV9nZXQoKTtcbiAgcmV0dXJuIHMuY29udGV4dC5jcmVhdGVJbWFnZURhdGEoeCx5KTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfYmxpdF9pbWFnZVxuLy9SZXF1aXJlczogY2FtbF9ncl9zdGF0ZV9nZXRcbmZ1bmN0aW9uIGNhbWxfZ3JfYmxpdF9pbWFnZShpbSx4LHkpe1xuICB2YXIgcyA9IGNhbWxfZ3Jfc3RhdGVfZ2V0KCk7XG4gIHZhciBpbTIgPSBzLmNvbnRleHQuZ2V0SW1hZ2VEYXRhKHgscy5oZWlnaHQgLSBpbS5oZWlnaHQgLSB5LGltLndpZHRoLGltLmhlaWdodCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgaW0yLmRhdGEubGVuZ3RoOyBpKz00KXtcbiAgICBpbS5kYXRhW2ldID0gaW0yLmRhdGFbaV07XG4gICAgaW0uZGF0YVtpKzFdID0gaW0yLmRhdGFbaSsxXTtcbiAgICBpbS5kYXRhW2krMl0gPSBpbTIuZGF0YVtpKzJdO1xuICAgIGltLmRhdGFbaSszXSA9IGltMi5kYXRhW2krM107XG4gIH1cbiAgcmV0dXJuIDA7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2dyX3NpZ2lvX2hhbmRsZXJcbmZ1bmN0aW9uIGNhbWxfZ3Jfc2lnaW9faGFuZGxlcigpe3JldHVybiAwfVxuLy9Qcm92aWRlczogY2FtbF9ncl9zaWdpb19zaWduYWxcbmZ1bmN0aW9uIGNhbWxfZ3Jfc2lnaW9fc2lnbmFsKCl7cmV0dXJuIDB9XG4vL1Byb3ZpZGVzOiBjYW1sX2dyX3dhaXRfZXZlbnRcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfZ3Jfd2FpdF9ldmVudChfZXZsKXtcbiAgY2FtbF9mYWlsd2l0aChcImNhbWxfZ3Jfd2FpdF9ldmVudCBub3QgSW1wbGVtZW50ZWQ6IHVzZSBHcmFwaGljc19qcyBpbnN0ZWFkXCIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2dyX3N5bmNocm9uaXplXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX2dyX3N5bmNocm9uaXplICgpIHtcbiAgY2FtbF9mYWlsd2l0aChcImNhbWxfZ3Jfc3luY2hyb25pemUgbm90IEltcGxlbWVudGVkXCIpO1xufVxuLy9Qcm92aWRlczogY2FtbF9ncl9yZW1lbWJlcl9tb2RlXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX2dyX3JlbWVtYmVyX21vZGUgKCkge1xuICBjYW1sX2ZhaWx3aXRoKFwiY2FtbF9ncl9yZW1lbWJlcl9tb2RlIG5vdCBJbXBsZW1lbnRlZFwiKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZ3JfZGlzcGxheV9tb2RlXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoXG5mdW5jdGlvbiBjYW1sX2dyX2Rpc3BsYXlfbW9kZSgpIHtcbiAgY2FtbF9mYWlsd2l0aChcImNhbWxfZ3JfZGlzcGxheV9tb2RlIG5vdCBJbXBsZW1lbnRlZFwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl93aW5kb3dfaWRcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfZ3Jfd2luZG93X2lkKGEpIHtcbiAgY2FtbF9mYWlsd2l0aChcImNhbWxfZ3Jfd2luZG93X2lkIG5vdCBJbXBsZW1lbnRlZFwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9vcGVuX3N1YndpbmRvd1xuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF9ncl9vcGVuX3N1YndpbmRvdyhhLGIsYyxkKSB7XG4gIGNhbWxfZmFpbHdpdGgoXCJjYW1sX2dyX29wZW5fc3Vid2luZG93IG5vdCBJbXBsZW1lbnRlZFwiKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9ncl9jbG9zZV9zdWJ3aW5kb3dcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfZ3JfY2xvc2Vfc3Vid2luZG93KGEpIHtcbiAgY2FtbF9mYWlsd2l0aChcImNhbWxfZ3JfY2xvc2Vfc3Vid2luZG93IG5vdCBJbXBsZW1lbnRlZFwiKTtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxMCBKw6lyw7RtZSBWb3VpbGxvblxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBjYW1sX21hcnNoYWxfY29uc3RhbnRzXG52YXIgY2FtbF9tYXJzaGFsX2NvbnN0YW50cyA9IHtcbiAgUFJFRklYX1NNQUxMX0JMT0NLOiAgICAgICAgIDB4ODAsXG4gIFBSRUZJWF9TTUFMTF9JTlQ6ICAgICAgICAgICAweDQwLFxuICBQUkVGSVhfU01BTExfU1RSSU5HOiAgICAgICAgMHgyMCxcbiAgQ09ERV9JTlQ4OiAgICAgICAgICAgICAgICAgIDB4MDAsXG4gIENPREVfSU5UMTY6ICAgICAgICAgICAgICAgICAweDAxLFxuICBDT0RFX0lOVDMyOiAgICAgICAgICAgICAgICAgMHgwMixcbiAgQ09ERV9JTlQ2NDogICAgICAgICAgICAgICAgIDB4MDMsXG4gIENPREVfU0hBUkVEODogICAgICAgICAgICAgICAweDA0LFxuICBDT0RFX1NIQVJFRDE2OiAgICAgICAgICAgICAgMHgwNSxcbiAgQ09ERV9TSEFSRUQzMjogICAgICAgICAgICAgIDB4MDYsXG4gIENPREVfQkxPQ0szMjogICAgICAgICAgICAgICAweDA4LFxuICBDT0RFX0JMT0NLNjQ6ICAgICAgICAgICAgICAgMHgxMyxcbiAgQ09ERV9TVFJJTkc4OiAgICAgICAgICAgICAgIDB4MDksXG4gIENPREVfU1RSSU5HMzI6ICAgICAgICAgICAgICAweDBBLFxuICBDT0RFX0RPVUJMRV9CSUc6ICAgICAgICAgICAgMHgwQixcbiAgQ09ERV9ET1VCTEVfTElUVExFOiAgICAgICAgIDB4MEMsXG4gIENPREVfRE9VQkxFX0FSUkFZOF9CSUc6ICAgICAweDBELFxuICBDT0RFX0RPVUJMRV9BUlJBWThfTElUVExFOiAgMHgwRSxcbiAgQ09ERV9ET1VCTEVfQVJSQVkzMl9CSUc6ICAgIDB4MEYsXG4gIENPREVfRE9VQkxFX0FSUkFZMzJfTElUVExFOiAweDA3LFxuICBDT0RFX0NPREVQT0lOVEVSOiAgICAgICAgICAgMHgxMCxcbiAgQ09ERV9JTkZJWFBPSU5URVI6ICAgICAgICAgIDB4MTEsXG4gIENPREVfQ1VTVE9NOiAgICAgICAgICAgICAgICAweDEyLFxuICBDT0RFX0NVU1RPTV9MRU46ICAgICAgICAgICAgMHgxOCxcbiAgQ09ERV9DVVNUT01fRklYRUQ6ICAgICAgICAgIDB4MTlcbn1cblxuXG4vL1Byb3ZpZGVzOiBNbFN0cmluZ1JlYWRlclxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfanNieXRlcywgY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gTWxTdHJpbmdSZWFkZXIgKHMsIGkpIHsgdGhpcy5zID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhzKTsgdGhpcy5pID0gaTsgfVxuTWxTdHJpbmdSZWFkZXIucHJvdG90eXBlID0ge1xuICByZWFkOHU6ZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5zLmNoYXJDb2RlQXQodGhpcy5pKyspOyB9LFxuICByZWFkOHM6ZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5zLmNoYXJDb2RlQXQodGhpcy5pKyspIDw8IDI0ID4+IDI0OyB9LFxuICByZWFkMTZ1OmZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcyA9IHRoaXMucywgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgMjtcbiAgICByZXR1cm4gKHMuY2hhckNvZGVBdChpKSA8PCA4KSB8IHMuY2hhckNvZGVBdChpICsgMSlcbiAgfSxcbiAgcmVhZDE2czpmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDI7XG4gICAgcmV0dXJuIChzLmNoYXJDb2RlQXQoaSkgPDwgMjQgPj4gMTYpIHwgcy5jaGFyQ29kZUF0KGkgKyAxKTtcbiAgfSxcbiAgcmVhZDMydTpmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHMgPSB0aGlzLnMsIGkgPSB0aGlzLmk7XG4gICAgdGhpcy5pID0gaSArIDQ7XG4gICAgcmV0dXJuICgocy5jaGFyQ29kZUF0KGkpIDw8IDI0KSB8IChzLmNoYXJDb2RlQXQoaSsxKSA8PCAxNikgfFxuICAgICAgICAgICAgKHMuY2hhckNvZGVBdChpKzIpIDw8IDgpIHwgcy5jaGFyQ29kZUF0KGkrMykpID4+PiAwO1xuICB9LFxuICByZWFkMzJzOmZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcyA9IHRoaXMucywgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgNDtcbiAgICByZXR1cm4gKHMuY2hhckNvZGVBdChpKSA8PCAyNCkgfCAocy5jaGFyQ29kZUF0KGkrMSkgPDwgMTYpIHxcbiAgICAgIChzLmNoYXJDb2RlQXQoaSsyKSA8PCA4KSB8IHMuY2hhckNvZGVBdChpKzMpO1xuICB9LFxuICByZWFkc3RyOmZ1bmN0aW9uIChsZW4pIHtcbiAgICB2YXIgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgbGVuO1xuICAgIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKHRoaXMucy5zdWJzdHJpbmcoaSwgaSArIGxlbikpO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IEJpZ1N0cmluZ1JlYWRlclxuLy9SZXF1aXJlczogY2FtbF9zdHJpbmdfb2ZfYXJyYXksIGNhbWxfYmFfZ2V0XzFcbmZ1bmN0aW9uIEJpZ1N0cmluZ1JlYWRlciAoYnMsIGkpIHsgdGhpcy5zID0gYnM7IHRoaXMuaSA9IGk7IH1cbkJpZ1N0cmluZ1JlYWRlci5wcm90b3R5cGUgPSB7XG4gIHJlYWQ4dTpmdW5jdGlvbiAoKSB7IHJldHVybiBjYW1sX2JhX2dldF8xKHRoaXMucyx0aGlzLmkrKyk7IH0sXG4gIHJlYWQ4czpmdW5jdGlvbiAoKSB7IHJldHVybiBjYW1sX2JhX2dldF8xKHRoaXMucyx0aGlzLmkrKykgPDwgMjQgPj4gMjQ7IH0sXG4gIHJlYWQxNnU6ZnVuY3Rpb24gKCkge1xuICAgIHZhciBzID0gdGhpcy5zLCBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyAyO1xuICAgIHJldHVybiAoY2FtbF9iYV9nZXRfMShzLGkpIDw8IDgpIHwgY2FtbF9iYV9nZXRfMShzLGkgKyAxKVxuICB9LFxuICByZWFkMTZzOmZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcyA9IHRoaXMucywgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgMjtcbiAgICByZXR1cm4gKGNhbWxfYmFfZ2V0XzEocyxpKSA8PCAyNCA+PiAxNikgfCBjYW1sX2JhX2dldF8xKHMsaSArIDEpO1xuICB9LFxuICByZWFkMzJ1OmZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcyA9IHRoaXMucywgaSA9IHRoaXMuaTtcbiAgICB0aGlzLmkgPSBpICsgNDtcbiAgICByZXR1cm4gKChjYW1sX2JhX2dldF8xKHMsaSkgICA8PCAyNCkgfCAoY2FtbF9iYV9nZXRfMShzLGkrMSkgPDwgMTYpIHxcbiAgICAgICAgICAgIChjYW1sX2JhX2dldF8xKHMsaSsyKSA8PCA4KSAgfCBjYW1sX2JhX2dldF8xKHMsaSszKSAgICAgICAgICkgPj4+IDA7XG4gIH0sXG4gIHJlYWQzMnM6ZnVuY3Rpb24gKCkge1xuICAgIHZhciBzID0gdGhpcy5zLCBpID0gdGhpcy5pO1xuICAgIHRoaXMuaSA9IGkgKyA0O1xuICAgIHJldHVybiAoY2FtbF9iYV9nZXRfMShzLGkpICAgPDwgMjQpIHwgKGNhbWxfYmFfZ2V0XzEocyxpKzEpIDw8IDE2KSB8XG4gICAgICAoY2FtbF9iYV9nZXRfMShzLGkrMikgPDwgOCkgIHwgY2FtbF9iYV9nZXRfMShzLGkrMyk7XG4gIH0sXG4gIHJlYWRzdHI6ZnVuY3Rpb24gKGxlbikge1xuICAgIHZhciBpID0gdGhpcy5pO1xuICAgIHZhciBhcnIgPSBuZXcgQXJyYXkobGVuKVxuICAgIGZvcih2YXIgaiA9IDA7IGogPCBsZW47IGorKyl7XG4gICAgICBhcnJbal0gPSBjYW1sX2JhX2dldF8xKHRoaXMucywgaStqKTtcbiAgICB9XG4gICAgdGhpcy5pID0gaSArIGxlbjtcbiAgICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfYXJyYXkoYXJyKTtcbiAgfVxufVxuXG5cblxuLy9Qcm92aWRlczogY2FtbF9mbG9hdF9vZl9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzLCBjYW1sX2ludDY0X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2Zsb2F0X29mX2J5dGVzIChhKSB7XG4gIHJldHVybiBjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMgKGNhbWxfaW50NjRfb2ZfYnl0ZXMgKGEpKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3N0cmluZyBtdXRhYmxlXG4vL1JlcXVpcmVzOiBNbFN0cmluZ1JlYWRlciwgY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3JlYWRlclxuZnVuY3Rpb24gY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3N0cmluZyhzLG9mcykge1xuICB2YXIgcmVhZGVyID0gbmV3IE1sU3RyaW5nUmVhZGVyIChzLCB0eXBlb2Ygb2ZzPT1cIm51bWJlclwiP29mczpvZnNbMF0pO1xuICByZXR1cm4gY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3JlYWRlcihyZWFkZXIsIG9mcylcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnB1dF92YWx1ZV9mcm9tX2J5dGVzIG11dGFibGVcbi8vUmVxdWlyZXM6IE1sU3RyaW5nUmVhZGVyLCBjYW1sX2lucHV0X3ZhbHVlX2Zyb21fcmVhZGVyLCBjYW1sX3N0cmluZ19vZl9ieXRlc1xuZnVuY3Rpb24gY2FtbF9pbnB1dF92YWx1ZV9mcm9tX2J5dGVzKHMsb2ZzKSB7XG4gIHZhciByZWFkZXIgPSBuZXcgTWxTdHJpbmdSZWFkZXIgKGNhbWxfc3RyaW5nX29mX2J5dGVzKHMpLCB0eXBlb2Ygb2ZzPT1cIm51bWJlclwiP29mczpvZnNbMF0pO1xuICByZXR1cm4gY2FtbF9pbnB1dF92YWx1ZV9mcm9tX3JlYWRlcihyZWFkZXIsIG9mcylcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQ2NF91bm1hcnNoYWxcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfaW50NjRfdW5tYXJzaGFsKHJlYWRlciwgc2l6ZSl7XG4gIHZhciB0ID0gbmV3IEFycmF5KDgpOztcbiAgZm9yICh2YXIgaiA9IDA7aiA8IDg7aisrKSB0W2pdID0gcmVhZGVyLnJlYWQ4dSgpO1xuICBzaXplWzBdID0gODtcbiAgcmV0dXJuIGNhbWxfaW50NjRfb2ZfYnl0ZXMgKHQpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X21hcnNoYWxcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfdG9fYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfaW50NjRfbWFyc2hhbCh3cml0ZXIsIHYsIHNpemVzKSB7XG4gIHZhciBiID0gY2FtbF9pbnQ2NF90b19ieXRlcyAodik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgODsgaSsrKSB3cml0ZXIud3JpdGUgKDgsIGJbaV0pO1xuICBzaXplc1swXSA9IDg7IHNpemVzWzFdID0gODtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9pbnQzMl91bm1hcnNoYWxcbmZ1bmN0aW9uIGNhbWxfaW50MzJfdW5tYXJzaGFsKHJlYWRlciwgc2l6ZSl7XG4gIHNpemVbMF0gPSA0O1xuICByZXR1cm4gcmVhZGVyLnJlYWQzMnMgKCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbmF0aXZlaW50X3VubWFyc2hhbFxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF9uYXRpdmVpbnRfdW5tYXJzaGFsKHJlYWRlciwgc2l6ZSl7XG4gIHN3aXRjaCAocmVhZGVyLnJlYWQ4dSAoKSkge1xuICBjYXNlIDE6XG4gICAgc2l6ZVswXSA9IDQ7XG4gICAgcmV0dXJuIHJlYWRlci5yZWFkMzJzICgpO1xuICBjYXNlIDI6XG4gICAgY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiBuYXRpdmUgaW50ZWdlciB2YWx1ZSB0b28gbGFyZ2VcIik7XG4gIGRlZmF1bHQ6IGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogaWxsLWZvcm1lZCBuYXRpdmUgaW50ZWdlclwiKTtcbiAgfVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2N1c3RvbV9vcHNcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfdW5tYXJzaGFsLCBjYW1sX2ludDY0X21hcnNoYWwsIGNhbWxfaW50NjRfY29tcGFyZSwgY2FtbF9pbnQ2NF9oYXNoXG4vL1JlcXVpcmVzOiBjYW1sX2ludDMyX3VubWFyc2hhbCwgY2FtbF9uYXRpdmVpbnRfdW5tYXJzaGFsXG4vL1JlcXVpcmVzOiBjYW1sX2JhX3NlcmlhbGl6ZSwgY2FtbF9iYV9kZXNlcmlhbGl6ZSwgY2FtbF9iYV9jb21wYXJlLCBjYW1sX2JhX2hhc2hcbnZhciBjYW1sX2N1c3RvbV9vcHMgPVxuICAgIHtcIl9qXCI6IHtcbiAgICAgIGRlc2VyaWFsaXplIDogY2FtbF9pbnQ2NF91bm1hcnNoYWwsXG4gICAgICBzZXJpYWxpemUgIDogY2FtbF9pbnQ2NF9tYXJzaGFsLFxuICAgICAgZml4ZWRfbGVuZ3RoIDogOCxcbiAgICAgIGNvbXBhcmUgOiBjYW1sX2ludDY0X2NvbXBhcmUsXG4gICAgICBoYXNoIDogY2FtbF9pbnQ2NF9oYXNoXG4gICAgfSxcbiAgICAgXCJfaVwiOiB7XG4gICAgICAgZGVzZXJpYWxpemUgOiBjYW1sX2ludDMyX3VubWFyc2hhbCxcbiAgICAgICBmaXhlZF9sZW5ndGggOiA0LFxuICAgICB9LFxuICAgICBcIl9uXCI6IHtcbiAgICAgICBkZXNlcmlhbGl6ZSA6IGNhbWxfbmF0aXZlaW50X3VubWFyc2hhbCxcbiAgICAgICBmaXhlZF9sZW5ndGggOiA0LFxuICAgICB9LFxuICAgICBcIl9iaWdhcnJheVwiOntcbiAgICAgICBkZXNlcmlhbGl6ZSA6IChmdW5jdGlvbiAocmVhZGVyLCBzeikge3JldHVybiBjYW1sX2JhX2Rlc2VyaWFsaXplIChyZWFkZXIsc3osXCJfYmlnYXJyYXlcIil9KSxcbiAgICAgICBzZXJpYWxpemUgOiBjYW1sX2JhX3NlcmlhbGl6ZSxcbiAgICAgICBjb21wYXJlIDogY2FtbF9iYV9jb21wYXJlLFxuICAgICAgIGhhc2g6IGNhbWxfYmFfaGFzaCxcbiAgICAgfSxcbiAgICAgXCJfYmlnYXJyMDJcIjp7XG4gICAgICAgZGVzZXJpYWxpemUgOiAoZnVuY3Rpb24gKHJlYWRlciwgc3opIHtyZXR1cm4gY2FtbF9iYV9kZXNlcmlhbGl6ZSAocmVhZGVyLHN6LFwiX2JpZ2FycjAyXCIpfSksXG4gICAgICAgc2VyaWFsaXplIDogY2FtbF9iYV9zZXJpYWxpemUsXG4gICAgICAgY29tcGFyZSA6IGNhbWxfYmFfY29tcGFyZSxcbiAgICAgICBoYXNoOiBjYW1sX2JhX2hhc2gsXG4gICAgIH1cbiAgICB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9yZWFkZXIgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuLy9SZXF1aXJlczogY2FtbF9mbG9hdF9vZl9ieXRlcywgY2FtbF9jdXN0b21fb3BzXG5cbmZ1bmN0aW9uIGNhbWxfaW5wdXRfdmFsdWVfZnJvbV9yZWFkZXIocmVhZGVyLCBvZnMpIHtcbiAgdmFyIF9tYWdpYyA9IHJlYWRlci5yZWFkMzJ1ICgpXG4gIHZhciBfYmxvY2tfbGVuID0gcmVhZGVyLnJlYWQzMnUgKCk7XG4gIHZhciBudW1fb2JqZWN0cyA9IHJlYWRlci5yZWFkMzJ1ICgpO1xuICB2YXIgX3NpemVfMzIgPSByZWFkZXIucmVhZDMydSAoKTtcbiAgdmFyIF9zaXplXzY0ID0gcmVhZGVyLnJlYWQzMnUgKCk7XG4gIHZhciBzdGFjayA9IFtdO1xuICB2YXIgaW50ZXJuX29ial90YWJsZSA9IChudW1fb2JqZWN0cyA+IDApP1tdOm51bGw7XG4gIHZhciBvYmpfY291bnRlciA9IDA7XG4gIGZ1bmN0aW9uIGludGVybl9yZWMgKCkge1xuICAgIHZhciBjb2RlID0gcmVhZGVyLnJlYWQ4dSAoKTtcbiAgICBpZiAoY29kZSA+PSAweDQwIC8qY3N0LlBSRUZJWF9TTUFMTF9JTlQqLykge1xuICAgICAgaWYgKGNvZGUgPj0gMHg4MCAvKmNzdC5QUkVGSVhfU01BTExfQkxPQ0sqLykge1xuICAgICAgICB2YXIgdGFnID0gY29kZSAmIDB4RjtcbiAgICAgICAgdmFyIHNpemUgPSAoY29kZSA+PiA0KSAmIDB4NztcbiAgICAgICAgdmFyIHYgPSBbdGFnXTtcbiAgICAgICAgaWYgKHNpemUgPT0gMCkgcmV0dXJuIHY7XG4gICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgc3RhY2sucHVzaCh2LCBzaXplKTtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgICB9IGVsc2VcbiAgICAgICAgcmV0dXJuIChjb2RlICYgMHgzRik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChjb2RlID49IDB4MjAvKmNzdC5QUkVGSVhfU01BTExfU1RSSU5HICovKSB7XG4gICAgICAgIHZhciBsZW4gPSBjb2RlICYgMHgxRjtcbiAgICAgICAgdmFyIHYgPSByZWFkZXIucmVhZHN0ciAobGVuKTtcbiAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICByZXR1cm4gdjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN3aXRjaChjb2RlKSB7XG4gICAgICAgIGNhc2UgMHgwMDogLy9jc3QuQ09ERV9JTlQ4OlxuICAgICAgICAgIHJldHVybiByZWFkZXIucmVhZDhzICgpO1xuICAgICAgICBjYXNlIDB4MDE6IC8vY3N0LkNPREVfSU5UMTY6XG4gICAgICAgICAgcmV0dXJuIHJlYWRlci5yZWFkMTZzICgpO1xuICAgICAgICBjYXNlIDB4MDI6IC8vY3N0LkNPREVfSU5UMzI6XG4gICAgICAgICAgcmV0dXJuIHJlYWRlci5yZWFkMzJzICgpO1xuICAgICAgICBjYXNlIDB4MDM6IC8vY3N0LkNPREVfSU5UNjQ6XG4gICAgICAgICAgY2FtbF9mYWlsd2l0aChcImlucHV0X3ZhbHVlOiBpbnRlZ2VyIHRvbyBsYXJnZVwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAweDA0OiAvL2NzdC5DT0RFX1NIQVJFRDg6XG4gICAgICAgICAgdmFyIG9mZnNldCA9IHJlYWRlci5yZWFkOHUgKCk7XG4gICAgICAgICAgcmV0dXJuIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIgLSBvZmZzZXRdO1xuICAgICAgICBjYXNlIDB4MDU6IC8vY3N0LkNPREVfU0hBUkVEMTY6XG4gICAgICAgICAgdmFyIG9mZnNldCA9IHJlYWRlci5yZWFkMTZ1ICgpO1xuICAgICAgICAgIHJldHVybiBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyIC0gb2Zmc2V0XTtcbiAgICAgICAgY2FzZSAweDA2OiAvL2NzdC5DT0RFX1NIQVJFRDMyOlxuICAgICAgICAgIHZhciBvZmZzZXQgPSByZWFkZXIucmVhZDMydSAoKTtcbiAgICAgICAgICByZXR1cm4gaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlciAtIG9mZnNldF07XG4gICAgICAgIGNhc2UgMHgwODogLy9jc3QuQ09ERV9CTE9DSzMyOlxuICAgICAgICAgIHZhciBoZWFkZXIgPSByZWFkZXIucmVhZDMydSAoKTtcbiAgICAgICAgICB2YXIgdGFnID0gaGVhZGVyICYgMHhGRjtcbiAgICAgICAgICB2YXIgc2l6ZSA9IGhlYWRlciA+PiAxMDtcbiAgICAgICAgICB2YXIgdiA9IFt0YWddO1xuICAgICAgICAgIGlmIChzaXplID09IDApIHJldHVybiB2O1xuICAgICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgICBzdGFjay5wdXNoKHYsIHNpemUpO1xuICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICBjYXNlIDB4MTM6IC8vY3N0LkNPREVfQkxPQ0s2NDpcbiAgICAgICAgICBjYW1sX2ZhaWx3aXRoIChcImlucHV0X3ZhbHVlOiBkYXRhIGJsb2NrIHRvbyBsYXJnZVwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAweDA5OiAvL2NzdC5DT0RFX1NUUklORzg6XG4gICAgICAgICAgdmFyIGxlbiA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgICAgICB2YXIgdiA9IHJlYWRlci5yZWFkc3RyIChsZW4pO1xuICAgICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgY2FzZSAweDBBOiAvL2NzdC5DT0RFX1NUUklORzMyOlxuICAgICAgICAgIHZhciBsZW4gPSByZWFkZXIucmVhZDMydSgpO1xuICAgICAgICAgIHZhciB2ID0gcmVhZGVyLnJlYWRzdHIgKGxlbik7XG4gICAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICBjYXNlIDB4MEM6IC8vY3N0LkNPREVfRE9VQkxFX0xJVFRMRTpcbiAgICAgICAgICB2YXIgdCA9IG5ldyBBcnJheSg4KTs7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7aSA8IDg7aSsrKSB0WzcgLSBpXSA9IHJlYWRlci5yZWFkOHUgKCk7XG4gICAgICAgICAgdmFyIHYgPSBjYW1sX2Zsb2F0X29mX2J5dGVzICh0KTtcbiAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIGNhc2UgMHgwQjogLy9jc3QuQ09ERV9ET1VCTEVfQklHOlxuICAgICAgICAgIHZhciB0ID0gbmV3IEFycmF5KDgpOztcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDtpIDwgODtpKyspIHRbaV0gPSByZWFkZXIucmVhZDh1ICgpO1xuICAgICAgICAgIHZhciB2ID0gY2FtbF9mbG9hdF9vZl9ieXRlcyAodCk7XG4gICAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICBjYXNlIDB4MEU6IC8vY3N0LkNPREVfRE9VQkxFX0FSUkFZOF9MSVRUTEU6XG4gICAgICAgICAgdmFyIGxlbiA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgICAgICB2YXIgdiA9IG5ldyBBcnJheShsZW4rMSk7XG4gICAgICAgICAgdlswXSA9IDI1NDtcbiAgICAgICAgICB2YXIgdCA9IG5ldyBBcnJheSg4KTs7XG4gICAgICAgICAgaWYgKGludGVybl9vYmpfdGFibGUpIGludGVybl9vYmpfdGFibGVbb2JqX2NvdW50ZXIrK10gPSB2O1xuICAgICAgICAgIGZvciAodmFyIGkgPSAxO2kgPD0gbGVuO2krKykge1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7aiA8IDg7aisrKSB0WzcgLSBqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgICAgICAgIHZbaV0gPSBjYW1sX2Zsb2F0X29mX2J5dGVzICh0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIGNhc2UgMHgwRDogLy9jc3QuQ09ERV9ET1VCTEVfQVJSQVk4X0JJRzpcbiAgICAgICAgICB2YXIgbGVuID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgICAgIHZhciB2ID0gbmV3IEFycmF5KGxlbisxKTtcbiAgICAgICAgICB2WzBdID0gMjU0O1xuICAgICAgICAgIHZhciB0ID0gbmV3IEFycmF5KDgpOztcbiAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDE7aSA8PSBsZW47aSsrKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDtqIDwgODtqKyspIHRbal0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICAgICAgICB2IFtpXSA9IGNhbWxfZmxvYXRfb2ZfYnl0ZXMgKHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgY2FzZSAweDA3OiAvL2NzdC5DT0RFX0RPVUJMRV9BUlJBWTMyX0xJVFRMRTpcbiAgICAgICAgICB2YXIgbGVuID0gcmVhZGVyLnJlYWQzMnUoKTtcbiAgICAgICAgICB2YXIgdiA9IG5ldyBBcnJheShsZW4rMSk7XG4gICAgICAgICAgdlswXSA9IDI1NDtcbiAgICAgICAgICBpZiAoaW50ZXJuX29ial90YWJsZSkgaW50ZXJuX29ial90YWJsZVtvYmpfY291bnRlcisrXSA9IHY7XG4gICAgICAgICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7O1xuICAgICAgICAgIGZvciAodmFyIGkgPSAxO2kgPD0gbGVuO2krKykge1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7aiA8IDg7aisrKSB0WzcgLSBqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgICAgICAgIHZbaV0gPSBjYW1sX2Zsb2F0X29mX2J5dGVzICh0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIGNhc2UgMHgwRjogLy9jc3QuQ09ERV9ET1VCTEVfQVJSQVkzMl9CSUc6XG4gICAgICAgICAgdmFyIGxlbiA9IHJlYWRlci5yZWFkMzJ1KCk7XG4gICAgICAgICAgdmFyIHYgPSBuZXcgQXJyYXkobGVuKzEpO1xuICAgICAgICAgIHZbMF0gPSAyNTQ7XG4gICAgICAgICAgdmFyIHQgPSBuZXcgQXJyYXkoOCk7O1xuICAgICAgICAgIGZvciAodmFyIGkgPSAxO2kgPD0gbGVuO2krKykge1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7aiA8IDg7aisrKSB0W2pdID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgICAgICAgICAgdiBbaV0gPSBjYW1sX2Zsb2F0X29mX2J5dGVzICh0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgIGNhc2UgMHgxMDogLy9jc3QuQ09ERV9DT0RFUE9JTlRFUjpcbiAgICAgICAgY2FzZSAweDExOiAvL2NzdC5DT0RFX0lORklYUE9JTlRFUjpcbiAgICAgICAgICBjYW1sX2ZhaWx3aXRoIChcImlucHV0X3ZhbHVlOiBjb2RlIHBvaW50ZXJcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMHgxMjogLy9jc3QuQ09ERV9DVVNUT006XG4gICAgICAgIGNhc2UgMHgxODogLy9jc3QuQ09ERV9DVVNUT01fTEVOOlxuICAgICAgICBjYXNlIDB4MTk6IC8vY3N0LkNPREVfQ1VTVE9NX0ZJWEVEOlxuICAgICAgICAgIHZhciBjLCBzID0gXCJcIjtcbiAgICAgICAgICB3aGlsZSAoKGMgPSByZWFkZXIucmVhZDh1ICgpKSAhPSAwKSBzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUgKGMpO1xuICAgICAgICAgIHZhciBvcHMgPSBjYW1sX2N1c3RvbV9vcHNbc107XG4gICAgICAgICAgdmFyIGV4cGVjdGVkX3NpemU7XG4gICAgICAgICAgaWYoIW9wcylcbiAgICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogdW5rbm93biBjdXN0b20gYmxvY2sgaWRlbnRpZmllclwiKTtcbiAgICAgICAgICBzd2l0Y2goY29kZSl7XG4gICAgICAgICAgY2FzZSAweDEyOiAvLyBjc3QuQ09ERV9DVVNUT00gKGRlcHJlY2F0ZWQpXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDB4MTk6IC8vIGNzdC5DT0RFX0NVU1RPTV9GSVhFRFxuICAgICAgICAgICAgaWYoIW9wcy5maXhlZF9sZW5ndGgpXG4gICAgICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogZXhwZWN0ZWQgYSBmaXhlZC1zaXplIGN1c3RvbSBibG9ja1wiKTtcbiAgICAgICAgICAgIGV4cGVjdGVkX3NpemUgPSBvcHMuZml4ZWRfbGVuZ3RoO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAweDE4OiAvLyBjc3QuQ09ERV9DVVNUT01fTEVOXG4gICAgICAgICAgICBleHBlY3RlZF9zaXplID0gcmVhZGVyLnJlYWQzMnUgKCk7XG4gICAgICAgICAgICAvLyBTa2lwIHNpemU2NFxuICAgICAgICAgICAgcmVhZGVyLnJlYWQzMnMoKTsgcmVhZGVyLnJlYWQzMnMoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgb2xkX3BvcyA9IHJlYWRlci5pO1xuICAgICAgICAgIHZhciBzaXplID0gWzBdO1xuICAgICAgICAgIHZhciB2ID0gb3BzLmRlc2VyaWFsaXplKHJlYWRlciwgc2l6ZSk7XG4gICAgICAgICAgaWYoZXhwZWN0ZWRfc2l6ZSAhPSB1bmRlZmluZWQpe1xuICAgICAgICAgICAgaWYoZXhwZWN0ZWRfc2l6ZSAhPSBzaXplWzBdKVxuICAgICAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IGluY29ycmVjdCBsZW5ndGggb2Ygc2VyaWFsaXplZCBjdXN0b20gYmxvY2tcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSBpbnRlcm5fb2JqX3RhYmxlW29ial9jb3VudGVyKytdID0gdjtcbiAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBjYW1sX2ZhaWx3aXRoIChcImlucHV0X3ZhbHVlOiBpbGwtZm9ybWVkIG1lc3NhZ2VcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgdmFyIHJlcyA9IGludGVybl9yZWMgKCk7XG4gIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgdmFyIHNpemUgPSBzdGFjay5wb3AoKTtcbiAgICB2YXIgdiA9IHN0YWNrLnBvcCgpO1xuICAgIHZhciBkID0gdi5sZW5ndGg7XG4gICAgaWYgKGQgPCBzaXplKSBzdGFjay5wdXNoKHYsIHNpemUpO1xuICAgIHZbZF0gPSBpbnRlcm5fcmVjICgpO1xuICB9XG4gIGlmICh0eXBlb2Ygb2ZzIT1cIm51bWJlclwiKSBvZnNbMF0gPSByZWFkZXIuaTtcbiAgcmV0dXJuIHJlcztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tYXJzaGFsX2RhdGFfc2l6ZSBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2ZhaWx3aXRoLCBjYW1sX2J5dGVzX3Vuc2FmZV9nZXRcbmZ1bmN0aW9uIGNhbWxfbWFyc2hhbF9kYXRhX3NpemUgKHMsIG9mcykge1xuICBmdW5jdGlvbiBnZXQzMihzLGkpIHtcbiAgICByZXR1cm4gKGNhbWxfYnl0ZXNfdW5zYWZlX2dldChzLCBpKSA8PCAyNCkgfFxuICAgICAgKGNhbWxfYnl0ZXNfdW5zYWZlX2dldChzLCBpICsgMSkgPDwgMTYpIHxcbiAgICAgIChjYW1sX2J5dGVzX3Vuc2FmZV9nZXQocywgaSArIDIpIDw8IDgpIHxcbiAgICAgIGNhbWxfYnl0ZXNfdW5zYWZlX2dldChzLCBpICsgMyk7XG4gIH1cbiAgaWYgKGdldDMyKHMsIG9mcykgIT0gKDB4ODQ5NUE2QkV8MCkpXG4gICAgY2FtbF9mYWlsd2l0aChcIk1hcnNoYWwuZGF0YV9zaXplOiBiYWQgb2JqZWN0XCIpO1xuICByZXR1cm4gKGdldDMyKHMsIG9mcyArIDQpKTtcbn1cblxuLy9Qcm92aWRlczogTWxPYmplY3RUYWJsZVxudmFyIE1sT2JqZWN0VGFibGU7XG5pZiAodHlwZW9mIGpvb19nbG9iYWxfb2JqZWN0LldlYWtNYXAgPT09ICd1bmRlZmluZWQnKSB7XG4gIE1sT2JqZWN0VGFibGUgPSBmdW5jdGlvbigpIHtcbiAgICAvKiBwb2x5ZmlsbCAodXNpbmcgbGluZWFyIHNlYXJjaCkgKi9cbiAgICBmdW5jdGlvbiBOYWl2ZUxvb2t1cChvYmpzKSB7IHRoaXMub2JqcyA9IG9ianM7IH1cbiAgICBOYWl2ZUxvb2t1cC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24odikge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm9ianMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHRoaXMub2Jqc1tpXSA9PT0gdikgcmV0dXJuIGk7XG4gICAgICB9XG4gICAgfTtcbiAgICBOYWl2ZUxvb2t1cC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAvLyBEbyBub3RoaW5nIGhlcmUuIFtNbE9iamVjdFRhYmxlLnN0b3JlXSB3aWxsIHB1c2ggdG8gW3RoaXMub2Jqc10gZGlyZWN0bHkuXG4gICAgfTtcblxuICAgIHJldHVybiBmdW5jdGlvbiBNbE9iamVjdFRhYmxlKCkge1xuICAgICAgdGhpcy5vYmpzID0gW107IHRoaXMubG9va3VwID0gbmV3IE5haXZlTG9va3VwKHRoaXMub2Jqcyk7XG4gICAgfTtcbiAgfSgpO1xufVxuZWxzZSB7XG4gIE1sT2JqZWN0VGFibGUgPSBmdW5jdGlvbiBNbE9iamVjdFRhYmxlKCkge1xuICAgIHRoaXMub2JqcyA9IFtdOyB0aGlzLmxvb2t1cCA9IG5ldyBqb29fZ2xvYmFsX29iamVjdC5XZWFrTWFwKCk7XG4gIH07XG59XG5cbk1sT2JqZWN0VGFibGUucHJvdG90eXBlLnN0b3JlID0gZnVuY3Rpb24odikge1xuICB0aGlzLmxvb2t1cC5zZXQodiwgdGhpcy5vYmpzLmxlbmd0aCk7XG4gIHRoaXMub2Jqcy5wdXNoKHYpO1xufVxuXG5NbE9iamVjdFRhYmxlLnByb3RvdHlwZS5yZWNhbGwgPSBmdW5jdGlvbih2KSB7XG4gIHZhciBpID0gdGhpcy5sb29rdXAuZ2V0KHYpO1xuICByZXR1cm4gKGkgPT09IHVuZGVmaW5lZClcbiAgICA/IHVuZGVmaW5lZCA6IHRoaXMub2Jqcy5sZW5ndGggLSBpOyAgIC8qIGluZGV4IGlzIHJlbGF0aXZlICovXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbGVnYWN5X2N1c3RvbV9jb2RlXG4vL1ZlcnNpb246ID49IDQuMDhcbnZhciBjYW1sX2xlZ2FjeV9jdXN0b21fY29kZSA9IGZhbHNlXG5cbi8vUHJvdmlkZXM6IGNhbWxfbGVnYWN5X2N1c3RvbV9jb2RlXG4vL1ZlcnNpb246IDwgNC4wOFxudmFyIGNhbWxfbGVnYWN5X2N1c3RvbV9jb2RlID0gdHJ1ZVxuXG4vL1Byb3ZpZGVzOiBjYW1sX291dHB1dF92YWxcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfdG9fYnl0ZXMsIGNhbWxfZmFpbHdpdGhcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfYml0c19vZl9mbG9hdFxuLy9SZXF1aXJlczogY2FtbF9pc19tbF9ieXRlcywgY2FtbF9tbF9ieXRlc19sZW5ndGgsIGNhbWxfYnl0ZXNfdW5zYWZlX2dldFxuLy9SZXF1aXJlczogY2FtbF9pc19tbF9zdHJpbmcsIGNhbWxfbWxfc3RyaW5nX2xlbmd0aCwgY2FtbF9zdHJpbmdfdW5zYWZlX2dldFxuLy9SZXF1aXJlczogTWxPYmplY3RUYWJsZSwgY2FtbF9saXN0X3RvX2pzX2FycmF5LCBjYW1sX2xlZ2FjeV9jdXN0b21fY29kZSwgY2FtbF9jdXN0b21fb3BzXG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnQsY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xudmFyIGNhbWxfb3V0cHV0X3ZhbCA9IGZ1bmN0aW9uICgpe1xuICBmdW5jdGlvbiBXcml0ZXIgKCkgeyB0aGlzLmNodW5rID0gW107IH1cbiAgV3JpdGVyLnByb3RvdHlwZSA9IHtcbiAgICBjaHVua19pZHg6MjAsIGJsb2NrX2xlbjowLCBvYmpfY291bnRlcjowLCBzaXplXzMyOjAsIHNpemVfNjQ6MCxcbiAgICB3cml0ZTpmdW5jdGlvbiAoc2l6ZSwgdmFsdWUpIHtcbiAgICAgIGZvciAodmFyIGkgPSBzaXplIC0gODtpID49IDA7aSAtPSA4KVxuICAgICAgICB0aGlzLmNodW5rW3RoaXMuY2h1bmtfaWR4KytdID0gKHZhbHVlID4+IGkpICYgMHhGRjtcbiAgICB9LFxuICAgIHdyaXRlX2F0OmZ1bmN0aW9uIChwb3MsIHNpemUsIHZhbHVlKSB7XG4gICAgICB2YXIgcG9zID0gcG9zO1xuICAgICAgZm9yICh2YXIgaSA9IHNpemUgLSA4O2kgPj0gMDtpIC09IDgpXG4gICAgICAgIHRoaXMuY2h1bmtbcG9zKytdID0gKHZhbHVlID4+IGkpICYgMHhGRjtcbiAgICB9LFxuICAgIHdyaXRlX2NvZGU6ZnVuY3Rpb24gKHNpemUsIGNvZGUsIHZhbHVlKSB7XG4gICAgICB0aGlzLmNodW5rW3RoaXMuY2h1bmtfaWR4KytdID0gY29kZTtcbiAgICAgIGZvciAodmFyIGkgPSBzaXplIC0gODtpID49IDA7aSAtPSA4KVxuICAgICAgICB0aGlzLmNodW5rW3RoaXMuY2h1bmtfaWR4KytdID0gKHZhbHVlID4+IGkpICYgMHhGRjtcbiAgICB9LFxuICAgIHdyaXRlX3NoYXJlZDpmdW5jdGlvbiAob2Zmc2V0KSB7XG4gICAgICBpZiAob2Zmc2V0IDwgKDEgPDwgOCkpIHRoaXMud3JpdGVfY29kZSg4LCAweDA0IC8qY3N0LkNPREVfU0hBUkVEOCovLCBvZmZzZXQpO1xuICAgICAgZWxzZSBpZiAob2Zmc2V0IDwgKDEgPDwgMTYpKSB0aGlzLndyaXRlX2NvZGUoMTYsIDB4MDUgLypjc3QuQ09ERV9TSEFSRUQxNiovLCBvZmZzZXQpO1xuICAgICAgZWxzZSB0aGlzLndyaXRlX2NvZGUoMzIsIDB4MDYgLypjc3QuQ09ERV9TSEFSRUQzMiovLCBvZmZzZXQpO1xuICAgIH0sXG4gICAgcG9zOmZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuY2h1bmtfaWR4IH0sXG4gICAgZmluYWxpemU6ZnVuY3Rpb24gKCkge1xuICAgICAgdGhpcy5ibG9ja19sZW4gPSB0aGlzLmNodW5rX2lkeCAtIDIwO1xuICAgICAgdGhpcy5jaHVua19pZHggPSAwO1xuICAgICAgdGhpcy53cml0ZSAoMzIsIDB4ODQ5NUE2QkUpO1xuICAgICAgdGhpcy53cml0ZSAoMzIsIHRoaXMuYmxvY2tfbGVuKTtcbiAgICAgIHRoaXMud3JpdGUgKDMyLCB0aGlzLm9ial9jb3VudGVyKTtcbiAgICAgIHRoaXMud3JpdGUgKDMyLCB0aGlzLnNpemVfMzIpO1xuICAgICAgdGhpcy53cml0ZSAoMzIsIHRoaXMuc2l6ZV82NCk7XG4gICAgICByZXR1cm4gdGhpcy5jaHVuaztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uICh2LCBmbGFncykge1xuICAgIGZsYWdzID0gY2FtbF9saXN0X3RvX2pzX2FycmF5KGZsYWdzKTtcblxuICAgIHZhciBub19zaGFyaW5nID0gKGZsYWdzLmluZGV4T2YoMCAvKk1hcnNoYWwuTm9fc2hhcmluZyovKSAhPT0gLTEpLFxuICAgICAgICBjbG9zdXJlcyA9ICAoZmxhZ3MuaW5kZXhPZigxIC8qTWFyc2hhbC5DbG9zdXJlcyovKSAhPT0gLTEpO1xuICAgIC8qIE1hcnNoYWwuQ29tcGF0XzMyIGlzIHJlZHVuZGFudCBzaW5jZSBpbnRlZ2VycyBhcmUgMzItYml0IGFueXdheSAqL1xuXG4gICAgaWYgKGNsb3N1cmVzKVxuICAgICAgam9vX2dsb2JhbF9vYmplY3QuY29uc29sZS53YXJuKFwiaW4gY2FtbF9vdXRwdXRfdmFsOiBmbGFnIE1hcnNoYWwuQ2xvc3VyZXMgaXMgbm90IHN1cHBvcnRlZC5cIik7XG5cbiAgICB2YXIgd3JpdGVyID0gbmV3IFdyaXRlciAoKTtcbiAgICB2YXIgc3RhY2sgPSBbXTtcbiAgICB2YXIgaW50ZXJuX29ial90YWJsZSA9IG5vX3NoYXJpbmcgPyBudWxsIDogbmV3IE1sT2JqZWN0VGFibGUoKTtcblxuICAgIGZ1bmN0aW9uIG1lbW8odikge1xuICAgICAgaWYgKG5vX3NoYXJpbmcpIHJldHVybiBmYWxzZTtcbiAgICAgIHZhciBleGlzdGluZ19vZmZzZXQgPSBpbnRlcm5fb2JqX3RhYmxlLnJlY2FsbCh2KTtcbiAgICAgIGlmIChleGlzdGluZ19vZmZzZXQpIHsgd3JpdGVyLndyaXRlX3NoYXJlZChleGlzdGluZ19vZmZzZXQpOyByZXR1cm4gdHJ1ZTsgfVxuICAgICAgZWxzZSB7IGludGVybl9vYmpfdGFibGUuc3RvcmUodik7IHJldHVybiBmYWxzZTsgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4dGVybl9yZWMgKHYpIHtcbiAgICAgIGlmICh2LmNhbWxfY3VzdG9tKSB7XG4gICAgICAgIGlmIChtZW1vKHYpKSByZXR1cm47XG4gICAgICAgIHZhciBuYW1lID0gdi5jYW1sX2N1c3RvbTtcbiAgICAgICAgdmFyIG9wcyA9IGNhbWxfY3VzdG9tX29wc1tuYW1lXTtcbiAgICAgICAgdmFyIHN6XzMyXzY0ID0gWzAsMF07XG4gICAgICAgIGlmKCFvcHMuc2VyaWFsaXplKVxuICAgICAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIm91dHB1dF92YWx1ZTogYWJzdHJhY3QgdmFsdWUgKEN1c3RvbSlcIik7XG4gICAgICAgIGlmKGNhbWxfbGVnYWN5X2N1c3RvbV9jb2RlKSB7XG4gICAgICAgICAgd3JpdGVyLndyaXRlICg4LCAweDEyIC8qY3N0LkNPREVfQ1VTVE9NKi8pO1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIHdyaXRlci53cml0ZSAoOCwgbmFtZS5jaGFyQ29kZUF0KGkpKTtcbiAgICAgICAgICB3cml0ZXIud3JpdGUoOCwgMCk7XG4gICAgICAgICAgb3BzLnNlcmlhbGl6ZSh3cml0ZXIsIHYsIHN6XzMyXzY0KTtcbiAgICAgICAgfSBlbHNlIGlmKG9wcy5maXhlZF9sZW5ndGggPT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIDB4MTggLypjc3QuQ09ERV9DVVNUT01fTEVOKi8pO1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIHdyaXRlci53cml0ZSAoOCwgbmFtZS5jaGFyQ29kZUF0KGkpKTtcbiAgICAgICAgICB3cml0ZXIud3JpdGUoOCwgMCk7XG4gICAgICAgICAgdmFyIGhlYWRlcl9wb3MgPSB3cml0ZXIucG9zICgpO1xuICAgICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCAxMjsgaSsrKSB7XG4gICAgICAgICAgICB3cml0ZXIud3JpdGUoOCwgMCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG9wcy5zZXJpYWxpemUod3JpdGVyLCB2LCBzel8zMl82NCk7XG4gICAgICAgICAgd3JpdGVyLndyaXRlX2F0KGhlYWRlcl9wb3MsIDMyLCBzel8zMl82NFswXSk7XG4gICAgICAgICAgd3JpdGVyLndyaXRlX2F0KGhlYWRlcl9wb3MgKyA0LCAzMiwgMCk7IC8vIHplcm9cbiAgICAgICAgICB3cml0ZXIud3JpdGVfYXQoaGVhZGVyX3BvcyArIDgsIDMyLCBzel8zMl82NFsxXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd3JpdGVyLndyaXRlICg4LCAweDE5IC8qY3N0LkNPREVfQ1VTVE9NX0ZJWEVEKi8pO1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIHdyaXRlci53cml0ZSAoOCwgbmFtZS5jaGFyQ29kZUF0KGkpKTtcbiAgICAgICAgICB3cml0ZXIud3JpdGUoOCwgMCk7XG4gICAgICAgICAgdmFyIG9sZF9wb3MgPSB3cml0ZXIucG9zKCk7XG4gICAgICAgICAgb3BzLnNlcmlhbGl6ZSh3cml0ZXIsIHYsIHN6XzMyXzY0KTtcbiAgICAgICAgICBpZiAob3BzLmZpeGVkX2xlbmd0aCAhPSB3cml0ZXIucG9zKCkgLSBvbGRfcG9zKVxuICAgICAgICAgICAgY2FtbF9mYWlsd2l0aChcIm91dHB1dF92YWx1ZTogaW5jb3JyZWN0IGZpeGVkIHNpemVzIHNwZWNpZmllZCBieSBcIiArIG5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHdyaXRlci5zaXplXzMyICs9IDIgKyAoKHN6XzMyXzY0WzBdICsgMykgPj4gMik7XG4gICAgICAgIHdyaXRlci5zaXplXzY0ICs9IDIgKyAoKHN6XzMyXzY0WzFdICsgNykgPj4gMyk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmICh2IGluc3RhbmNlb2YgQXJyYXkgJiYgdlswXSA9PT0gKHZbMF18MCkpIHtcbiAgICAgICAgaWYgKHZbMF0gPT0gMjUxKSB7XG4gICAgICAgICAgY2FtbF9mYWlsd2l0aChcIm91dHB1dF92YWx1ZTogYWJzdHJhY3QgdmFsdWUgKEFic3RyYWN0KVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodi5sZW5ndGggPiAxICYmIG1lbW8odikpIHJldHVybjtcbiAgICAgICAgaWYgKHZbMF0gPCAxNiAmJiB2Lmxlbmd0aCAtIDEgPCA4KVxuICAgICAgICAgIHdyaXRlci53cml0ZSAoOCwgMHg4MCAvKmNzdC5QUkVGSVhfU01BTExfQkxPQ0sqLyArIHZbMF0gKyAoKHYubGVuZ3RoIC0gMSk8PDQpKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHdyaXRlci53cml0ZV9jb2RlKDMyLCAweDA4IC8qY3N0LkNPREVfQkxPQ0szMiovLCAoKHYubGVuZ3RoLTEpIDw8IDEwKSB8IHZbMF0pO1xuICAgICAgICB3cml0ZXIuc2l6ZV8zMiArPSB2Lmxlbmd0aDtcbiAgICAgICAgd3JpdGVyLnNpemVfNjQgKz0gdi5sZW5ndGg7XG4gICAgICAgIGlmICh2Lmxlbmd0aCA+IDEpIHN0YWNrLnB1c2ggKHYsIDEpO1xuICAgICAgfSBlbHNlIGlmIChjYW1sX2lzX21sX2J5dGVzKHYpKSB7XG4gICAgICAgIGlmKCEoY2FtbF9pc19tbF9ieXRlcyhjYW1sX3N0cmluZ19vZl9qc2J5dGVzKFwiXCIpKSkpIHtcbiAgICAgICAgICBjYW1sX2ZhaWx3aXRoKFwib3V0cHV0X3ZhbHVlOiBbQnl0ZXMudF0gY2Fubm90IHNhZmVseSBiZSBtYXJzaGFsZWQgd2l0aCBbLS1lbmFibGUgdXNlLWpzLXN0cmluZ11cIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1lbW8odikpIHJldHVybjtcbiAgICAgICAgdmFyIGxlbiA9IGNhbWxfbWxfYnl0ZXNfbGVuZ3RoKHYpO1xuICAgICAgICBpZiAobGVuIDwgMHgyMClcbiAgICAgICAgICB3cml0ZXIud3JpdGUgKDgsIDB4MjAgLypjc3QuUFJFRklYX1NNQUxMX1NUUklORyovICsgbGVuKTtcbiAgICAgICAgZWxzZSBpZiAobGVuIDwgMHgxMDApXG4gICAgICAgICAgd3JpdGVyLndyaXRlX2NvZGUgKDgsIDB4MDkvKmNzdC5DT0RFX1NUUklORzgqLywgbGVuKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHdyaXRlci53cml0ZV9jb2RlICgzMiwgMHgwQSAvKmNzdC5DT0RFX1NUUklORzMyKi8sIGxlbik7XG4gICAgICAgIGZvciAodmFyIGkgPSAwO2kgPCBsZW47aSsrKVxuICAgICAgICAgIHdyaXRlci53cml0ZSAoOCwgY2FtbF9ieXRlc191bnNhZmVfZ2V0KHYsaSkpO1xuICAgICAgICB3cml0ZXIuc2l6ZV8zMiArPSAxICsgKCgobGVuICsgNCkgLyA0KXwwKTtcbiAgICAgICAgd3JpdGVyLnNpemVfNjQgKz0gMSArICgoKGxlbiArIDgpIC8gOCl8MCk7XG4gICAgICB9IGVsc2UgaWYgKGNhbWxfaXNfbWxfc3RyaW5nKHYpKSB7XG4gICAgICAgIHZhciBsZW4gPSBjYW1sX21sX3N0cmluZ19sZW5ndGgodik7XG4gICAgICAgIGlmIChsZW4gPCAweDIwKVxuICAgICAgICAgIHdyaXRlci53cml0ZSAoOCwgMHgyMCAvKmNzdC5QUkVGSVhfU01BTExfU1RSSU5HKi8gKyBsZW4pO1xuICAgICAgICBlbHNlIGlmIChsZW4gPCAweDEwMClcbiAgICAgICAgICB3cml0ZXIud3JpdGVfY29kZSAoOCwgMHgwOS8qY3N0LkNPREVfU1RSSU5HOCovLCBsZW4pO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgd3JpdGVyLndyaXRlX2NvZGUgKDMyLCAweDBBIC8qY3N0LkNPREVfU1RSSU5HMzIqLywgbGVuKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7aSA8IGxlbjtpKyspXG4gICAgICAgICAgd3JpdGVyLndyaXRlICg4LCBjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHYsaSkpO1xuICAgICAgICB3cml0ZXIuc2l6ZV8zMiArPSAxICsgKCgobGVuICsgNCkgLyA0KXwwKTtcbiAgICAgICAgd3JpdGVyLnNpemVfNjQgKz0gMSArICgoKGxlbiArIDgpIC8gOCl8MCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodiAhPSAodnwwKSl7XG4gICAgICAgICAgdmFyIHR5cGVfb2ZfdiA9IHR5cGVvZiB2O1xuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gSWYgYSBmbG9hdCBoYXBwZW5zIHRvIGJlIGFuIGludGVnZXIgaXQgaXMgc2VyaWFsaXplZCBhcyBhbiBpbnRlZ2VyXG4gICAgICAgICAgLy8gKEpzX29mX29jYW1sIGNhbm5vdCB0ZWxsIHdoZXRoZXIgdGhlIHR5cGUgb2YgYW4gaW50ZWdlciBudW1iZXIgaXNcbiAgICAgICAgICAvLyBmbG9hdCBvciBpbnRlZ2VyLikgVGhpcyBjYW4gcmVzdWx0IGluIHVuZXhwZWN0ZWQgY3Jhc2hlcyB3aGVuXG4gICAgICAgICAgLy8gdW5tYXJzaGFsbGluZyB1c2luZyB0aGUgc3RhbmRhcmQgcnVudGltZS4gSXQgc2VlbXMgYmV0dGVyIHRvXG4gICAgICAgICAgLy8gc3lzdGVtYXRpY2FsbHkgZmFpbCBvbiBtYXJzaGFsbGluZy5cbiAgICAgICAgICAvL1xuICAgICAgICAgIC8vICAgICAgICAgIGlmKHR5cGVfb2ZfdiAhPSBcIm51bWJlclwiKVxuICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJvdXRwdXRfdmFsdWU6IGFic3RyYWN0IHZhbHVlIChcIit0eXBlX29mX3YrXCIpXCIpO1xuICAgICAgICAgIC8vICAgICAgICAgIHZhciB0ID0gY2FtbF9pbnQ2NF90b19ieXRlcyhjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQodikpO1xuICAgICAgICAgIC8vICAgICAgICAgIHdyaXRlci53cml0ZSAoOCwgMHgwQiAvKmNzdC5DT0RFX0RPVUJMRV9CSUcqLyk7XG4gICAgICAgICAgLy8gICAgICAgICAgZm9yKHZhciBpID0gMDsgaTw4OyBpKyspe3dyaXRlci53cml0ZSg4LHRbaV0pfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHYgPj0gMCAmJiB2IDwgMHg0MCkge1xuICAgICAgICAgIHdyaXRlci53cml0ZSAoOCwgMFg0MCAvKmNzdC5QUkVGSVhfU01BTExfSU5UKi8gKyB2KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodiA+PSAtKDEgPDwgNykgJiYgdiA8ICgxIDw8IDcpKVxuICAgICAgICAgICAgd3JpdGVyLndyaXRlX2NvZGUoOCwgMHgwMCAvKmNzdC5DT0RFX0lOVDgqLywgdik7XG4gICAgICAgICAgZWxzZSBpZiAodiA+PSAtKDEgPDwgMTUpICYmIHYgPCAoMSA8PCAxNSkpXG4gICAgICAgICAgICB3cml0ZXIud3JpdGVfY29kZSgxNiwgMHgwMSAvKmNzdC5DT0RFX0lOVDE2Ki8sIHYpO1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHdyaXRlci53cml0ZV9jb2RlKDMyLCAweDAyIC8qY3N0LkNPREVfSU5UMzIqLywgdik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZXh0ZXJuX3JlYyAodik7XG4gICAgd2hpbGUgKHN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICAgIHZhciBpID0gc3RhY2sucG9wICgpO1xuICAgICAgdmFyIHYgPSBzdGFjay5wb3AgKCk7XG4gICAgICBpZiAoaSArIDEgPCB2Lmxlbmd0aCkgc3RhY2sucHVzaCAodiwgaSArIDEpO1xuICAgICAgZXh0ZXJuX3JlYyAodltpXSk7XG4gICAgfVxuICAgIGlmIChpbnRlcm5fb2JqX3RhYmxlKSB3cml0ZXIub2JqX2NvdW50ZXIgPSBpbnRlcm5fb2JqX3RhYmxlLm9ianMubGVuZ3RoO1xuICAgIHdyaXRlci5maW5hbGl6ZSgpO1xuICAgIHJldHVybiB3cml0ZXIuY2h1bms7XG4gIH1cbn0gKCk7XG5cbi8vUHJvdmlkZXM6IGNhbWxfb3V0cHV0X3ZhbHVlX3RvX3N0cmluZyBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX291dHB1dF92YWwsIGNhbWxfc3RyaW5nX29mX2FycmF5XG5mdW5jdGlvbiBjYW1sX291dHB1dF92YWx1ZV90b19zdHJpbmcgKHYsIGZsYWdzKSB7XG4gIHJldHVybiBjYW1sX3N0cmluZ19vZl9hcnJheSAoY2FtbF9vdXRwdXRfdmFsICh2LCBmbGFncykpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX291dHB1dF92YWx1ZV90b19ieXRlcyBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX291dHB1dF92YWwsIGNhbWxfYnl0ZXNfb2ZfYXJyYXlcbmZ1bmN0aW9uIGNhbWxfb3V0cHV0X3ZhbHVlX3RvX2J5dGVzICh2LCBmbGFncykge1xuICByZXR1cm4gY2FtbF9ieXRlc19vZl9hcnJheSAoY2FtbF9vdXRwdXRfdmFsICh2LCBmbGFncykpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX291dHB1dF92YWx1ZV90b19idWZmZXJcbi8vUmVxdWlyZXM6IGNhbWxfb3V0cHV0X3ZhbCwgY2FtbF9mYWlsd2l0aCwgY2FtbF9ibGl0X2J5dGVzXG5mdW5jdGlvbiBjYW1sX291dHB1dF92YWx1ZV90b19idWZmZXIgKHMsIG9mcywgbGVuLCB2LCBmbGFncykge1xuICB2YXIgdCA9IGNhbWxfb3V0cHV0X3ZhbCAodiwgZmxhZ3MpO1xuICBpZiAodC5sZW5ndGggPiBsZW4pIGNhbWxfZmFpbHdpdGggKFwiTWFyc2hhbC50b19idWZmZXI6IGJ1ZmZlciBvdmVyZmxvd1wiKTtcbiAgY2FtbF9ibGl0X2J5dGVzKHQsIDAsIHMsIG9mcywgdC5sZW5ndGgpO1xuICByZXR1cm4gMDtcbn1cbiIsIi8vIEpzX29mX29jYW1sIHJ1bnRpbWUgc3VwcG9ydFxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxNCBKw6lyw7RtZSBWb3VpbGxvbiwgSHVnbyBIZXV6YXJkXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vLy8vLy8vLy8vLy8gSW9cblxuLy9Qcm92aWRlczogY2FtbF9zeXNfY2xvc2Vcbi8vUmVxdWlyZXM6IGNhbWxfZ2xvYmFsX2RhdGFcbmZ1bmN0aW9uIGNhbWxfc3lzX2Nsb3NlKGZkKSB7XG4gIGRlbGV0ZSBjYW1sX2dsb2JhbF9kYXRhLmZkc1tmZF07XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N0ZF9vdXRwdXRcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMsIGNhbWxfbWxfc3RyaW5nX2xlbmd0aCwgY2FtbF9tbF9jaGFubmVsc1xuZnVuY3Rpb24gY2FtbF9zdGRfb3V0cHV0KGNoYW5pZCxzKXtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxzW2NoYW5pZF07XG4gIHZhciBzdHIgPSBjYW1sX3N0cmluZ19vZl9qc2J5dGVzKHMpO1xuICB2YXIgc2xlbiA9IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzdHIpO1xuICBjaGFuLmZpbGUud3JpdGUoY2hhbi5vZmZzZXQsIHN0ciwgMCwgc2xlbik7XG4gIGNoYW4ub2Zmc2V0ICs9IHNsZW47XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3N5c19vcGVuXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX3N5c19lcnJvciwgY2FtbF9nbG9iYWxfZGF0YVxuLy9SZXF1aXJlczogY2FtbF9jcmVhdGVfYnl0ZXMsTWxGYWtlRmlsZVxuLy9SZXF1aXJlczoganNfcHJpbnRfc3RkZXJyLCBqc19wcmludF9zdGRvdXRcbi8vUmVxdWlyZXM6IGNhbWxfc3RkX291dHB1dFxuLy9SZXF1aXJlczogcmVzb2x2ZV9mc19kZXZpY2Vcbi8vUmVxdWlyZXM6IGNhbWxfanNieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfc3lzX29wZW5faW50ZXJuYWwoaWR4LG91dHB1dCxmaWxlLGZsYWdzKSB7XG4gIGlmKGNhbWxfZ2xvYmFsX2RhdGEuZmRzID09PSB1bmRlZmluZWQpIGNhbWxfZ2xvYmFsX2RhdGEuZmRzID0gbmV3IEFycmF5KCk7XG4gIGZsYWdzPWZsYWdzP2ZsYWdzOnt9O1xuICB2YXIgaW5mbyA9IHt9O1xuICBpbmZvLmZpbGUgPSBmaWxlO1xuICBpbmZvLm9mZnNldCA9IGZsYWdzLmFwcGVuZD9maWxlLmxlbmd0aCgpOjA7XG4gIGluZm8uZmxhZ3MgPSBmbGFncztcbiAgaW5mby5vdXRwdXQgPSBvdXRwdXQ7XG4gIGNhbWxfZ2xvYmFsX2RhdGEuZmRzW2lkeF0gPSBpbmZvO1xuICBpZighY2FtbF9nbG9iYWxfZGF0YS5mZF9sYXN0X2lkeCB8fCBpZHggPiBjYW1sX2dsb2JhbF9kYXRhLmZkX2xhc3RfaWR4KVxuICAgIGNhbWxfZ2xvYmFsX2RhdGEuZmRfbGFzdF9pZHggPSBpZHg7XG4gIHJldHVybiBpZHg7XG59XG5mdW5jdGlvbiBjYW1sX3N5c19vcGVuIChuYW1lLCBmbGFncywgX3Blcm1zKSB7XG4gIHZhciBmID0ge307XG4gIHdoaWxlKGZsYWdzKXtcbiAgICBzd2l0Y2goZmxhZ3NbMV0pe1xuICAgIGNhc2UgMDogZi5yZG9ubHkgPSAxO2JyZWFrO1xuICAgIGNhc2UgMTogZi53cm9ubHkgPSAxO2JyZWFrO1xuICAgIGNhc2UgMjogZi5hcHBlbmQgPSAxO2JyZWFrO1xuICAgIGNhc2UgMzogZi5jcmVhdGUgPSAxO2JyZWFrO1xuICAgIGNhc2UgNDogZi50cnVuY2F0ZSA9IDE7YnJlYWs7XG4gICAgY2FzZSA1OiBmLmV4Y2wgPSAxOyBicmVhaztcbiAgICBjYXNlIDY6IGYuYmluYXJ5ID0gMTticmVhaztcbiAgICBjYXNlIDc6IGYudGV4dCA9IDE7YnJlYWs7XG4gICAgY2FzZSA4OiBmLm5vbmJsb2NrID0gMTticmVhaztcbiAgICB9XG4gICAgZmxhZ3M9ZmxhZ3NbMl07XG4gIH1cbiAgaWYoZi5yZG9ubHkgJiYgZi53cm9ubHkpXG4gICAgY2FtbF9yYWlzZV9zeXNfZXJyb3IoY2FtbF9qc2J5dGVzX29mX3N0cmluZyhuYW1lKSArIFwiIDogZmxhZ3MgT3Blbl9yZG9ubHkgYW5kIE9wZW5fd3Jvbmx5IGFyZSBub3QgY29tcGF0aWJsZVwiKTtcbiAgaWYoZi50ZXh0ICYmIGYuYmluYXJ5KVxuICAgIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKGNhbWxfanNieXRlc19vZl9zdHJpbmcobmFtZSkgKyBcIiA6IGZsYWdzIE9wZW5fdGV4dCBhbmQgT3Blbl9iaW5hcnkgYXJlIG5vdCBjb21wYXRpYmxlXCIpO1xuICB2YXIgcm9vdCA9IHJlc29sdmVfZnNfZGV2aWNlKG5hbWUpO1xuICB2YXIgZmlsZSA9IHJvb3QuZGV2aWNlLm9wZW4ocm9vdC5yZXN0LGYpO1xuICB2YXIgaWR4ID0gY2FtbF9nbG9iYWxfZGF0YS5mZF9sYXN0X2lkeD9jYW1sX2dsb2JhbF9kYXRhLmZkX2xhc3RfaWR4OjA7XG4gIHJldHVybiBjYW1sX3N5c19vcGVuX2ludGVybmFsIChpZHgrMSxjYW1sX3N0ZF9vdXRwdXQsZmlsZSxmKTtcbn1cbmNhbWxfc3lzX29wZW5faW50ZXJuYWwoMCxjYW1sX3N0ZF9vdXRwdXQsIG5ldyBNbEZha2VGaWxlKGNhbWxfY3JlYXRlX2J5dGVzKDApKSk7IC8vc3RkaW5cbmNhbWxfc3lzX29wZW5faW50ZXJuYWwoMSxqc19wcmludF9zdGRvdXQsIG5ldyBNbEZha2VGaWxlKGNhbWxfY3JlYXRlX2J5dGVzKDApKSk7IC8vc3Rkb3V0XG5jYW1sX3N5c19vcGVuX2ludGVybmFsKDIsanNfcHJpbnRfc3RkZXJyLCBuZXcgTWxGYWtlRmlsZShjYW1sX2NyZWF0ZV9ieXRlcygwKSkpOyAvL3N0ZGVyclxuXG5cbi8vIG9jYW1sIENoYW5uZWxzXG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc2V0X2NoYW5uZWxfbmFtZVxuZnVuY3Rpb24gY2FtbF9tbF9zZXRfY2hhbm5lbF9uYW1lKCkge1xuICByZXR1cm4gMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2NoYW5uZWxzXG52YXIgY2FtbF9tbF9jaGFubmVscyA9IG5ldyBBcnJheSgpO1xuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX291dF9jaGFubmVsc19saXN0XG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxzXG5mdW5jdGlvbiBjYW1sX21sX291dF9jaGFubmVsc19saXN0ICgpIHtcbiAgdmFyIGwgPSAwO1xuICBmb3IodmFyIGMgPSAwOyBjIDwgY2FtbF9tbF9jaGFubmVscy5sZW5ndGg7IGMrKyl7XG4gICAgaWYoY2FtbF9tbF9jaGFubmVsc1tjXSAmJiBjYW1sX21sX2NoYW5uZWxzW2NdLm9wZW5lZCAmJiBjYW1sX21sX2NoYW5uZWxzW2NdLm91dClcbiAgICAgIGw9WzAsY2FtbF9tbF9jaGFubmVsc1tjXS5mZCxsXTtcbiAgfVxuICByZXR1cm4gbDtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9vdXRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbHMsIGNhbWxfZ2xvYmFsX2RhdGFcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yXG5mdW5jdGlvbiBjYW1sX21sX29wZW5fZGVzY3JpcHRvcl9vdXQgKGZkKSB7XG4gIHZhciBkYXRhID0gY2FtbF9nbG9iYWxfZGF0YS5mZHNbZmRdO1xuICBpZihkYXRhLmZsYWdzLnJkb25seSkgY2FtbF9yYWlzZV9zeXNfZXJyb3IoXCJmZCBcIisgZmQgKyBcIiBpcyByZWFkb25seVwiKTtcbiAgdmFyIGNoYW5uZWwgPSB7XG4gICAgZmlsZTpkYXRhLmZpbGUsXG4gICAgb2Zmc2V0OmRhdGEub2Zmc2V0LFxuICAgIGZkOmZkLFxuICAgIG9wZW5lZDp0cnVlLFxuICAgIG91dDp0cnVlLFxuICAgIGJ1ZmZlcjpcIlwiXG4gIH07XG4gIGNhbWxfbWxfY2hhbm5lbHNbY2hhbm5lbC5mZF09Y2hhbm5lbDtcbiAgcmV0dXJuIGNoYW5uZWwuZmQ7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX2luXG4vL1JlcXVpcmVzOiBjYW1sX2dsb2JhbF9kYXRhLGNhbWxfc3lzX29wZW4sY2FtbF9yYWlzZV9zeXNfZXJyb3IsIGNhbWxfbWxfY2hhbm5lbHNcbi8vUmVxdWlyZXM6IGZzX25vZGVfc3VwcG9ydGVkLCBjYW1sX3N0cmluZ19vZl9qc3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3JfaW4gKGZkKSAge1xuICB2YXIgZGF0YSA9IGNhbWxfZ2xvYmFsX2RhdGEuZmRzW2ZkXTtcbiAgaWYoZGF0YS5mbGFncy53cm9ubHkpIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKFwiZmQgXCIrIGZkICsgXCIgaXMgd3JpdGVvbmx5XCIpO1xuICB2YXIgcmVmaWxsID0gbnVsbDtcbiAgaWYoZmQgPT0gMCAmJiBmc19ub2RlX3N1cHBvcnRlZCgpKXtcbiAgICB2YXIgZnMgPSByZXF1aXJlKCdmcycpO1xuICAgIHJlZmlsbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBjYW1sX3N0cmluZ19vZl9qc3N0cmluZyhmcy5yZWFkRmlsZVN5bmMoMCwgJ3V0ZjgnKSl9O1xuICB9XG4gIHZhciBjaGFubmVsID0ge1xuICAgIGZpbGU6ZGF0YS5maWxlLFxuICAgIG9mZnNldDpkYXRhLm9mZnNldCxcbiAgICBmZDpmZCxcbiAgICBvcGVuZWQ6dHJ1ZSxcbiAgICBvdXQ6IGZhbHNlLFxuICAgIHJlZmlsbDpyZWZpbGxcbiAgfTtcbiAgY2FtbF9tbF9jaGFubmVsc1tjaGFubmVsLmZkXT1jaGFubmVsO1xuICByZXR1cm4gY2hhbm5lbC5mZDtcbn1cblxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NoYW5uZWxfZGVzY3JpcHRvclxuLy9SZXF1aXJlczogY2FtbF9nbG9iYWxfZGF0YSwgY2FtbF9tbF9jaGFubmVsc1xuZnVuY3Rpb24gY2FtbF9jaGFubmVsX2Rlc2NyaXB0b3IoY2hhbmlkKXtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxzW2NoYW5pZF07XG4gIHJldHVybiBjaGFuLmZkO1xufVxuXG4vL1Byb3ZpZGVzOiB3aW5fZmlsZWRlc2NyX29mX2NoYW5uZWxcbi8vUmVxdWlyZXM6IGNhbWxfY2hhbm5lbF9kZXNjcmlwdG9yXG52YXIgd2luX2ZpbGVkZXNjcl9vZl9jaGFubmVsID0gY2FtbF9jaGFubmVsX2Rlc2NyaXB0b3JcblxuLy9Qcm92aWRlczogY2FtbF9tbF9zZXRfYmluYXJ5X21vZGVcbi8vUmVxdWlyZXM6IGNhbWxfZ2xvYmFsX2RhdGEsIGNhbWxfbWxfY2hhbm5lbHNcbmZ1bmN0aW9uIGNhbWxfbWxfc2V0X2JpbmFyeV9tb2RlKGNoYW5pZCxtb2RlKXtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxzW2NoYW5pZF07XG4gIHZhciBkYXRhID0gY2FtbF9nbG9iYWxfZGF0YS5mZHNbY2hhbi5mZF07XG4gIGRhdGEuZmxhZ3MudGV4dCA9ICFtb2RlXG4gIGRhdGEuZmxhZ3MuYmluYXJ5ID0gbW9kZVxuICByZXR1cm4gMDtcbn1cblxuLy9JbnB1dCBmcm9tIGluX2NoYW5uZWxcblxuLy9Qcm92aWRlczogY2FtbF9tbF9jbG9zZV9jaGFubmVsXG4vL1JlcXVpcmVzOiBjYW1sX21sX2ZsdXNoLCBjYW1sX21sX2NoYW5uZWxzXG4vL1JlcXVpcmVzOiBjYW1sX3N5c19jbG9zZVxuZnVuY3Rpb24gY2FtbF9tbF9jbG9zZV9jaGFubmVsIChjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxzW2NoYW5pZF07XG4gIGNhbWxfbWxfZmx1c2goY2hhbmlkKTtcbiAgY2hhbi5vcGVuZWQgPSBmYWxzZTtcbiAgY2hhbi5maWxlLmNsb3NlKCk7XG4gIGNhbWxfc3lzX2Nsb3NlKGNoYW4uZmQpXG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2NoYW5uZWxfc2l6ZVxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVsc1xuZnVuY3Rpb24gY2FtbF9tbF9jaGFubmVsX3NpemUoY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdO1xuICByZXR1cm4gY2hhbi5maWxlLmxlbmd0aCgpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2NoYW5uZWxfc2l6ZV82NFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZl9mbG9hdCxjYW1sX21sX2NoYW5uZWxzXG5mdW5jdGlvbiBjYW1sX21sX2NoYW5uZWxfc2l6ZV82NChjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxzW2NoYW5pZF07XG4gIHJldHVybiBjYW1sX2ludDY0X29mX2Zsb2F0KGNoYW4uZmlsZS5sZW5ndGggKCkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3NldF9jaGFubmVsX291dHB1dFxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVscywgY2FtbF9nbG9iYWxfZGF0YVxuZnVuY3Rpb24gY2FtbF9tbF9zZXRfY2hhbm5lbF9vdXRwdXQoY2hhbmlkLGYpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxzW2NoYW5pZF07XG4gIGNhbWxfZ2xvYmFsX2RhdGEuZmRzW2NoYW4uZmRdLm91dHB1dCA9IGY7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3NldF9jaGFubmVsX3JlZmlsbFxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVscywgY2FtbF9nbG9iYWxfZGF0YVxuZnVuY3Rpb24gY2FtbF9tbF9zZXRfY2hhbm5lbF9yZWZpbGwoY2hhbmlkLGYpIHtcbiAgY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdLnJlZmlsbCA9IGY7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3JlZmlsbF9pbnB1dFxuLy9SZXF1aXJlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoXG5mdW5jdGlvbiBjYW1sX21sX3JlZmlsbF9pbnB1dCAoY2hhbikge1xuICB2YXIgc3RyID0gY2hhbi5yZWZpbGwoKTtcbiAgdmFyIHN0cl9sZW4gPSBjYW1sX21sX3N0cmluZ19sZW5ndGgoc3RyKTtcbiAgaWYgKHN0cl9sZW4gPT0gMCkgY2hhbi5yZWZpbGwgPSBudWxsO1xuICBjaGFuLmZpbGUud3JpdGUoY2hhbi5maWxlLmxlbmd0aCgpLCBzdHIsIDAsIHN0cl9sZW4pO1xuICByZXR1cm4gc3RyX2xlbjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9tYXlfcmVmaWxsX2lucHV0XG4vL1JlcXVpcmVzOiBjYW1sX21sX3JlZmlsbF9pbnB1dCwgY2FtbF9tbF9jaGFubmVsc1xuZnVuY3Rpb24gY2FtbF9tbF9tYXlfcmVmaWxsX2lucHV0IChjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxzW2NoYW5pZF07XG4gIGlmIChjaGFuLnJlZmlsbCA9PSBudWxsKSByZXR1cm47XG4gIGlmIChjaGFuLmZpbGUubGVuZ3RoKCkgIT0gY2hhbi5vZmZzZXQpIHJldHVybjtcbiAgY2FtbF9tbF9yZWZpbGxfaW5wdXQgKGNoYW4pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2lucHV0XG4vL1JlcXVpcmVzOiBjYW1sX21sX3JlZmlsbF9pbnB1dCwgY2FtbF9tbF9jaGFubmVsc1xuZnVuY3Rpb24gY2FtbF9tbF9pbnB1dCAoY2hhbmlkLCBzLCBpLCBsKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdO1xuICB2YXIgbDIgPSBjaGFuLmZpbGUubGVuZ3RoKCkgLSBjaGFuLm9mZnNldDtcbiAgaWYgKGwyID09IDAgJiYgY2hhbi5yZWZpbGwgIT0gbnVsbCkgbDIgPSBjYW1sX21sX3JlZmlsbF9pbnB1dChjaGFuKTtcbiAgaWYgKGwyIDwgbCkgbCA9IGwyO1xuICBjaGFuLmZpbGUucmVhZChjaGFuLm9mZnNldCwgcywgaSwgbCk7XG4gIGNoYW4ub2Zmc2V0ICs9IGw7XG4gIHJldHVybiBsO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2lucHV0X3ZhbHVlXG4vL1JlcXVpcmVzOiBjYW1sX21hcnNoYWxfZGF0YV9zaXplLCBjYW1sX2lucHV0X3ZhbHVlX2Zyb21fYnl0ZXMsIGNhbWxfY3JlYXRlX2J5dGVzLCBjYW1sX21sX2NoYW5uZWxzXG5mdW5jdGlvbiBjYW1sX2lucHV0X3ZhbHVlIChjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxzW2NoYW5pZF07XG5cbiAgdmFyIGJ1ZiA9IGNhbWxfY3JlYXRlX2J5dGVzKDgpO1xuICBjaGFuLmZpbGUucmVhZChjaGFuLm9mZnNldCxidWYsMCw4KTtcblxuICAvLyBIZWFkZXIgaXMgMjAgYnl0ZXNcbiAgdmFyIGxlbiA9IGNhbWxfbWFyc2hhbF9kYXRhX3NpemUgKGJ1ZiwgMCkgKyAyMDtcblxuICB2YXIgYnVmID0gY2FtbF9jcmVhdGVfYnl0ZXMobGVuKTtcbiAgY2hhbi5maWxlLnJlYWQoY2hhbi5vZmZzZXQsYnVmLDAsbGVuKTtcblxuICB2YXIgb2Zmc2V0ID0gWzBdO1xuICB2YXIgcmVzID0gY2FtbF9pbnB1dF92YWx1ZV9mcm9tX2J5dGVzKGJ1Ziwgb2Zmc2V0KTtcbiAgY2hhbi5vZmZzZXQgPSBjaGFuLm9mZnNldCArIG9mZnNldFswXTtcbiAgcmV0dXJuIHJlcztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9pbnB1dF9jaGFyXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX2VuZF9vZl9maWxlLCBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX21sX21heV9yZWZpbGxfaW5wdXQsIGNhbWxfbWxfY2hhbm5lbHNcbmZ1bmN0aW9uIGNhbWxfbWxfaW5wdXRfY2hhciAoY2hhbmlkKSB7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdO1xuICBjYW1sX21sX21heV9yZWZpbGxfaW5wdXQoY2hhbmlkKTtcbiAgaWYgKGNoYW4ub2Zmc2V0ID49IGNoYW4uZmlsZS5sZW5ndGgoKSlcbiAgICBjYW1sX3JhaXNlX2VuZF9vZl9maWxlKCk7XG4gIHZhciByZXMgPSBjaGFuLmZpbGUucmVhZF9vbmUoY2hhbi5vZmZzZXQpO1xuICBjaGFuLm9mZnNldCsrO1xuICByZXR1cm4gcmVzO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX2lucHV0X2ludFxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9lbmRfb2ZfZmlsZVxuLy9SZXF1aXJlczogY2FtbF9tbF9yZWZpbGxfaW5wdXQsIGNhbWxfbWxfY2hhbm5lbHNcbmZ1bmN0aW9uIGNhbWxfbWxfaW5wdXRfaW50IChjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxzW2NoYW5pZF07XG4gIHZhciBmaWxlID0gY2hhbi5maWxlO1xuICB3aGlsZSAoKGNoYW4ub2Zmc2V0ICsgMykgPj0gZmlsZS5sZW5ndGgoKSkge1xuICAgIHZhciBsID0gY2FtbF9tbF9yZWZpbGxfaW5wdXQoY2hhbik7XG4gICAgaWYgKGwgPT0gMCkgY2FtbF9yYWlzZV9lbmRfb2ZfZmlsZSgpO1xuICB9XG4gIHZhciBvID0gY2hhbi5vZmZzZXQ7XG4gIHZhciByID0oZmlsZS5yZWFkX29uZShvICApIDw8IDI0KVxuICAgICAgfCAgKGZpbGUucmVhZF9vbmUobysxKSA8PCAxNilcbiAgICAgIHwgIChmaWxlLnJlYWRfb25lKG8rMikgPDwgOClcbiAgICAgIHwgIChmaWxlLnJlYWRfb25lKG8rMykpO1xuICBjaGFuLm9mZnNldCs9NDtcbiAgcmV0dXJuIHI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfc2Vla19pblxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV9zeXNfZXJyb3IsIGNhbWxfbWxfY2hhbm5lbHNcbmZ1bmN0aW9uIGNhbWxfbWxfc2Vla19pbihjaGFuaWQscG9zKXtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxzW2NoYW5pZF07XG4gIGlmIChjaGFuLnJlZmlsbCAhPSBudWxsKSBjYW1sX3JhaXNlX3N5c19lcnJvcihcIklsbGVnYWwgc2Vla1wiKTtcbiAgY2hhbi5vZmZzZXQgPSBwb3M7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3NlZWtfaW5fNjRcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfdG9fZmxvYXQsIGNhbWxfcmFpc2Vfc3lzX2Vycm9yLCBjYW1sX21sX2NoYW5uZWxzXG5mdW5jdGlvbiBjYW1sX21sX3NlZWtfaW5fNjQoY2hhbmlkLHBvcyl7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdO1xuICBpZiAoY2hhbi5yZWZpbGwgIT0gbnVsbCkgY2FtbF9yYWlzZV9zeXNfZXJyb3IoXCJJbGxlZ2FsIHNlZWtcIik7XG4gIGNoYW4ub2Zmc2V0ID0gY2FtbF9pbnQ2NF90b19mbG9hdChwb3MpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9wb3NfaW5cbi8vUmVxdWlyZXM6IGNhbWxfbWxfY2hhbm5lbHNcbmZ1bmN0aW9uIGNhbWxfbWxfcG9zX2luKGNoYW5pZCkge3JldHVybiBjYW1sX21sX2NoYW5uZWxzW2NoYW5pZF0ub2Zmc2V0fVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX3Bvc19pbl82NFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZl9mbG9hdCwgY2FtbF9tbF9jaGFubmVsc1xuZnVuY3Rpb24gY2FtbF9tbF9wb3NfaW5fNjQoY2hhbmlkKSB7cmV0dXJuIGNhbWxfaW50NjRfb2ZfZmxvYXQoY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdLm9mZnNldCl9XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfaW5wdXRfc2Nhbl9saW5lXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG4vL1JlcXVpcmVzOiBjYW1sX21sX21heV9yZWZpbGxfaW5wdXQsIGNhbWxfbWxfY2hhbm5lbHNcbmZ1bmN0aW9uIGNhbWxfbWxfaW5wdXRfc2Nhbl9saW5lKGNoYW5pZCl7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdO1xuICBjYW1sX21sX21heV9yZWZpbGxfaW5wdXQoY2hhbmlkKTtcbiAgdmFyIHAgPSBjaGFuLm9mZnNldDtcbiAgdmFyIGxlbiA9IGNoYW4uZmlsZS5sZW5ndGgoKTtcbiAgaWYocCA+PSBsZW4pIHsgcmV0dXJuIDA7fVxuICB3aGlsZSh0cnVlKSB7XG4gICAgaWYocCA+PSBsZW4pIHJldHVybiAtIChwIC0gY2hhbi5vZmZzZXQpO1xuICAgIGlmKGNoYW4uZmlsZS5yZWFkX29uZShwKSA9PSAxMCkgcmV0dXJuIHAgLSBjaGFuLm9mZnNldCArIDE7XG4gICAgcCsrO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfZmx1c2hcbi8vUmVxdWlyZXM6IGNhbWxfcmFpc2Vfc3lzX2Vycm9yLCBjYW1sX2dsb2JhbF9kYXRhLCBjYW1sX21sX2NoYW5uZWxzXG5mdW5jdGlvbiBjYW1sX21sX2ZsdXNoIChjaGFuaWQpIHtcbiAgdmFyIGNoYW4gPSBjYW1sX21sX2NoYW5uZWxzW2NoYW5pZF07XG4gIGlmKCEgY2hhbi5vcGVuZWQpIGNhbWxfcmFpc2Vfc3lzX2Vycm9yKFwiQ2Fubm90IGZsdXNoIGEgY2xvc2VkIGNoYW5uZWxcIik7XG4gIGlmKCFjaGFuLmJ1ZmZlciB8fCBjaGFuLmJ1ZmZlciA9PSBcIlwiKSByZXR1cm4gMDtcbiAgaWYoY2hhbi5mZFxuICAgICAmJiBjYW1sX2dsb2JhbF9kYXRhLmZkc1tjaGFuLmZkXVxuICAgICAmJiBjYW1sX2dsb2JhbF9kYXRhLmZkc1tjaGFuLmZkXS5vdXRwdXQpIHtcbiAgICB2YXIgb3V0cHV0ID0gY2FtbF9nbG9iYWxfZGF0YS5mZHNbY2hhbi5mZF0ub3V0cHV0O1xuICAgIHN3aXRjaChvdXRwdXQubGVuZ3RoKXtcbiAgICBjYXNlIDI6IG91dHB1dChjaGFuaWQsY2hhbi5idWZmZXIpO2JyZWFrO1xuICAgIGRlZmF1bHQ6IG91dHB1dChjaGFuLmJ1ZmZlcilcbiAgICB9O1xuICB9XG4gIGNoYW4uYnVmZmVyID0gXCJcIjtcbiAgcmV0dXJuIDA7XG59XG5cbi8vb3V0cHV0IHRvIG91dF9jaGFubmVsXG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3V0cHV0X2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX21sX2ZsdXNoLGNhbWxfbWxfYnl0ZXNfbGVuZ3RoXG4vL1JlcXVpcmVzOiBjYW1sX2NyZWF0ZV9ieXRlcywgY2FtbF9ibGl0X2J5dGVzLCBjYW1sX3JhaXNlX3N5c19lcnJvciwgY2FtbF9tbF9jaGFubmVscywgY2FtbF9zdHJpbmdfb2ZfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfanNieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfbWxfb3V0cHV0X2J5dGVzKGNoYW5pZCxidWZmZXIsb2Zmc2V0LGxlbikge1xuICB2YXIgY2hhbiA9IGNhbWxfbWxfY2hhbm5lbHNbY2hhbmlkXTtcbiAgaWYoISBjaGFuLm9wZW5lZCkgY2FtbF9yYWlzZV9zeXNfZXJyb3IoXCJDYW5ub3Qgb3V0cHV0IHRvIGEgY2xvc2VkIGNoYW5uZWxcIik7XG4gIHZhciBieXRlcztcbiAgaWYob2Zmc2V0ID09IDAgJiYgY2FtbF9tbF9ieXRlc19sZW5ndGgoYnVmZmVyKSA9PSBsZW4pXG4gICAgYnl0ZXMgPSBidWZmZXI7XG4gIGVsc2Uge1xuICAgIGJ5dGVzID0gY2FtbF9jcmVhdGVfYnl0ZXMobGVuKTtcbiAgICBjYW1sX2JsaXRfYnl0ZXMoYnVmZmVyLG9mZnNldCxieXRlcywwLGxlbik7XG4gIH1cbiAgdmFyIHN0cmluZyA9IGNhbWxfc3RyaW5nX29mX2J5dGVzKGJ5dGVzKTtcbiAgdmFyIGpzc3RyaW5nID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhzdHJpbmcpO1xuICB2YXIgaWQgPSBqc3N0cmluZy5sYXN0SW5kZXhPZihcIlxcblwiKTtcbiAgaWYoaWQgPCAwKVxuICAgIGNoYW4uYnVmZmVyKz1qc3N0cmluZztcbiAgZWxzZSB7XG4gICAgY2hhbi5idWZmZXIrPWpzc3RyaW5nLnN1YnN0cigwLGlkKzEpO1xuICAgIGNhbWxfbWxfZmx1c2ggKGNoYW5pZCk7XG4gICAgY2hhbi5idWZmZXIgKz0ganNzdHJpbmcuc3Vic3RyKGlkKzEpO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX291dHB1dFxuLy9SZXF1aXJlczogY2FtbF9tbF9vdXRwdXRfYnl0ZXMsIGNhbWxfYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX21sX291dHB1dChjaGFuaWQsYnVmZmVyLG9mZnNldCxsZW4pe1xuICByZXR1cm4gY2FtbF9tbF9vdXRwdXRfYnl0ZXMoY2hhbmlkLGNhbWxfYnl0ZXNfb2Zfc3RyaW5nKGJ1ZmZlciksb2Zmc2V0LGxlbik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWxfb3V0cHV0X2NoYXJcbi8vUmVxdWlyZXM6IGNhbWxfbWxfb3V0cHV0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzXG5mdW5jdGlvbiBjYW1sX21sX291dHB1dF9jaGFyIChjaGFuaWQsYykge1xuICB2YXIgcyA9IGNhbWxfc3RyaW5nX29mX2pzYnl0ZXMoU3RyaW5nLmZyb21DaGFyQ29kZShjKSk7XG4gIGNhbWxfbWxfb3V0cHV0KGNoYW5pZCxzLDAsMSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX291dHB1dF92YWx1ZVxuLy9SZXF1aXJlczogY2FtbF9vdXRwdXRfdmFsdWVfdG9fc3RyaW5nLCBjYW1sX21sX291dHB1dCxjYW1sX21sX3N0cmluZ19sZW5ndGhcbmZ1bmN0aW9uIGNhbWxfb3V0cHV0X3ZhbHVlIChjaGFuaWQsdixmbGFncykge1xuICB2YXIgcyA9IGNhbWxfb3V0cHV0X3ZhbHVlX3RvX3N0cmluZyh2LCBmbGFncyk7XG4gIGNhbWxfbWxfb3V0cHV0KGNoYW5pZCxzLDAsY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpKTtcbiAgcmV0dXJuIDA7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF9tbF9zZWVrX291dFxuLy9SZXF1aXJlczogY2FtbF9tbF9jaGFubmVscywgY2FtbF9tbF9mbHVzaFxuZnVuY3Rpb24gY2FtbF9tbF9zZWVrX291dChjaGFuaWQscG9zKXtcbiAgY2FtbF9tbF9mbHVzaChjaGFuaWQpO1xuICBjYW1sX21sX2NoYW5uZWxzW2NoYW5pZF0ub2Zmc2V0ID0gcG9zO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9zZWVrX291dF82NFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF90b19mbG9hdCwgY2FtbF9tbF9jaGFubmVscywgY2FtbF9tbF9mbHVzaFxuZnVuY3Rpb24gY2FtbF9tbF9zZWVrX291dF82NChjaGFuaWQscG9zKXtcbiAgY2FtbF9tbF9mbHVzaChjaGFuaWQpO1xuICBjYW1sX21sX2NoYW5uZWxzW2NoYW5pZF0ub2Zmc2V0ID0gY2FtbF9pbnQ2NF90b19mbG9hdChwb3MpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9wb3Nfb3V0XG4vL1JlcXVpcmVzOiBjYW1sX21sX2NoYW5uZWxzLCBjYW1sX21sX2ZsdXNoXG5mdW5jdGlvbiBjYW1sX21sX3Bvc19vdXQoY2hhbmlkKSB7XG4gIGNhbWxfbWxfZmx1c2goY2hhbmlkKTtcbiAgcmV0dXJuIGNhbWxfbWxfY2hhbm5lbHNbY2hhbmlkXS5vZmZzZXRcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tbF9wb3Nfb3V0XzY0XG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X29mX2Zsb2F0LCBjYW1sX21sX2NoYW5uZWxzLCBjYW1sX21sX2ZsdXNoXG5mdW5jdGlvbiBjYW1sX21sX3Bvc19vdXRfNjQoY2hhbmlkKSB7XG4gIGNhbWxfbWxfZmx1c2goY2hhbmlkKTtcbiAgcmV0dXJuIGNhbWxfaW50NjRfb2ZfZmxvYXQgKGNhbWxfbWxfY2hhbm5lbHNbY2hhbmlkXS5vZmZzZXQpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21sX291dHB1dF9pbnRcbi8vUmVxdWlyZXM6IGNhbWxfbWxfb3V0cHV0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9hcnJheVxuZnVuY3Rpb24gY2FtbF9tbF9vdXRwdXRfaW50IChjaGFuaWQsaSkge1xuICB2YXIgYXJyID0gWyhpPj4yNCkgJiAweEZGLChpPj4xNikgJiAweEZGLChpPj44KSAmIDB4RkYsaSAmIDB4RkYgXTtcbiAgdmFyIHMgPSBjYW1sX3N0cmluZ19vZl9hcnJheShhcnIpO1xuICBjYW1sX21sX291dHB1dChjaGFuaWQscywwLDQpO1xuICByZXR1cm4gMFxufVxuIiwiXG5cbi8vUHJvdmlkZXM6IGNhbWxfZ2NfbWlub3JcbmZ1bmN0aW9uIGNhbWxfZ2NfbWlub3IoKXsgcmV0dXJuIDB9XG4vL1Byb3ZpZGVzOiBjYW1sX2djX21ham9yXG5mdW5jdGlvbiBjYW1sX2djX21ham9yKCl7IHJldHVybiAwfVxuLy9Qcm92aWRlczogY2FtbF9nY19mdWxsX21ham9yXG5mdW5jdGlvbiBjYW1sX2djX2Z1bGxfbWFqb3IoKXsgcmV0dXJuIDB9XG4vL1Byb3ZpZGVzOiBjYW1sX2djX2NvbXBhY3Rpb25cbmZ1bmN0aW9uIGNhbWxfZ2NfY29tcGFjdGlvbigpeyByZXR1cm4gMH1cbi8vUHJvdmlkZXM6IGNhbWxfZ2NfY291bnRlcnNcbmZ1bmN0aW9uIGNhbWxfZ2NfY291bnRlcnMoKSB7IHJldHVybiBbMjU0LDAsMCwwXSB9XG4vL1Byb3ZpZGVzOiBjYW1sX2djX3F1aWNrX3N0YXRcbmZ1bmN0aW9uIGNhbWxfZ2NfcXVpY2tfc3RhdCgpe1xuICByZXR1cm4gWzAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMF1cbn1cbi8vUHJvdmlkZXM6IGNhbWxfZ2Nfc3RhdFxuZnVuY3Rpb24gY2FtbF9nY19zdGF0KCkge1xuICByZXR1cm4gWzAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMF1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9nY19zZXRcbmZ1bmN0aW9uIGNhbWxfZ2Nfc2V0KF9jb250cm9sKSB7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2djX2dldFxuZnVuY3Rpb24gY2FtbF9nY19nZXQoKXtcbiAgcmV0dXJuIFswLDAsMCwwLDAsMCwwLDAsMF1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9tZW1wcm9mX3NldFxuZnVuY3Rpb24gY2FtbF9tZW1wcm9mX3NldChfY29udHJvbCkge1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9maW5hbF9yZWdpc3RlciBjb25zdFxuZnVuY3Rpb24gY2FtbF9maW5hbF9yZWdpc3RlciAoKSB7IHJldHVybiAwOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2ZpbmFsX3JlZ2lzdGVyX2NhbGxlZF93aXRob3V0X3ZhbHVlIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2ZpbmFsX3JlZ2lzdGVyX2NhbGxlZF93aXRob3V0X3ZhbHVlICgpIHsgcmV0dXJuIDA7IH1cbi8vUHJvdmlkZXM6IGNhbWxfZmluYWxfcmVsZWFzZSBjb25zdFxuZnVuY3Rpb24gY2FtbF9maW5hbF9yZWxlYXNlICgpIHsgcmV0dXJuIDA7IH1cblxuLy9Qcm92aWRlczogY2FtbF9tZW1wcm9mX3N0YXJ0XG5mdW5jdGlvbiBjYW1sX21lbXByb2Zfc3RhcnQocmF0ZSxzdGFja19zaXplLHRyYWNrZXIpe1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tZW1wcm9mX3N0b3BcbmZ1bmN0aW9uIGNhbWxfbWVtcHJvZl9zdG9wKHVuaXQpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZXZlbnRsb2dfcmVzdW1lXG5mdW5jdGlvbiBjYW1sX2V2ZW50bG9nX3Jlc3VtZSh1bml0KSB7IHJldHVybiAwOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfZXZlbnRsb2dfcGF1c2VcbmZ1bmN0aW9uIGNhbWxfZXZlbnRsb2dfcGF1c2UodW5pdCkgeyByZXR1cm4gMDsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2djX2h1Z2VfZmFsbGJhY2tfY291bnRcbmZ1bmN0aW9uIGNhbWxfZ2NfaHVnZV9mYWxsYmFja19jb3VudCh1bml0KSB7IHJldHVybiAwOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ2NfbWFqb3Jfc2xpY2VcbmZ1bmN0aW9uIGNhbWxfZ2NfbWFqb3Jfc2xpY2Uod29yaykgeyByZXR1cm4gMDsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2djX21pbm9yX3dvcmRzXG5mdW5jdGlvbiBjYW1sX2djX21pbm9yX3dvcmRzKHVuaXQpIHsgcmV0dXJuIDA7IH1cblxuLy9Qcm92aWRlczogY2FtbF9nZXRfbWlub3JfZnJlZVxuZnVuY3Rpb24gY2FtbF9nZXRfbWlub3JfZnJlZSh1bml0KSB7IHJldHVybiAwOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfZ2V0X21ham9yX2J1Y2tldFxuZnVuY3Rpb24gY2FtbF9nZXRfbWFqb3JfYnVja2V0KG4pIHsgcmV0dXJuIDA7IH1cblxuLy9Qcm92aWRlczogY2FtbF9nZXRfbWFqb3JfY3JlZGl0XG5mdW5jdGlvbiBjYW1sX2dldF9tYWpvcl9jcmVkaXQobikgeyByZXR1cm4gMDsgfVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDE0IErDqXLDtG1lIFZvdWlsbG9uLCBIdWdvIEhldXphcmQsIEFuZHkgUmF5XG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG4vL1xuLy8gQmlnYXJyYXkuXG4vL1xuLy8gLSBhbGwgYmlnYXJyYXkgdHlwZXMgaW5jbHVkaW5nIEludDY0IGFuZCBDb21wbGV4LlxuLy8gLSBmb3J0cmFuICsgYyBsYXlvdXRzXG4vLyAtIHN1Yi9zbGljZS9yZXNoYXBlXG4vLyAtIHJldGFpbiBmYXN0IHBhdGggZm9yIDFkIGFycmF5IGFjY2Vzc1xuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2luaXQgY29uc3RcbmZ1bmN0aW9uIGNhbWxfYmFfaW5pdCgpIHtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZ2V0X3NpemVcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9iYV9nZXRfc2l6ZShkaW1zKSB7XG4gIHZhciBuX2RpbXMgPSBkaW1zLmxlbmd0aDtcbiAgdmFyIHNpemUgPSAxO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG5fZGltczsgaSsrKSB7XG4gICAgaWYgKGRpbXNbaV0gPCAwKVxuICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkuY3JlYXRlOiBuZWdhdGl2ZSBkaW1lbnNpb25cIik7XG4gICAgc2l6ZSA9IHNpemUgKiBkaW1zW2ldO1xuICB9XG4gIHJldHVybiBzaXplO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50XG5mdW5jdGlvbiBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50KGtpbmQpe1xuICBzd2l0Y2goa2luZCl7XG4gIGNhc2UgNzogY2FzZSAxMDogY2FzZSAxMTogcmV0dXJuIDI7XG4gIGRlZmF1bHQ6IHJldHVybiAxO1xuICB9XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfY3JlYXRlX2J1ZmZlclxuLy9SZXF1aXJlczogY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudFxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX2JhX2NyZWF0ZV9idWZmZXIoa2luZCwgc2l6ZSl7XG4gIHZhciBnID0gam9vX2dsb2JhbF9vYmplY3Q7XG4gIHZhciB2aWV3O1xuICBzd2l0Y2goa2luZCl7XG4gIGNhc2UgMDogIHZpZXcgPSBnLkZsb2F0MzJBcnJheTsgYnJlYWs7XG4gIGNhc2UgMTogIHZpZXcgPSBnLkZsb2F0NjRBcnJheTsgYnJlYWs7XG4gIGNhc2UgMjogIHZpZXcgPSBnLkludDhBcnJheTsgYnJlYWs7XG4gIGNhc2UgMzogIHZpZXcgPSBnLlVpbnQ4QXJyYXk7IGJyZWFrO1xuICBjYXNlIDQ6ICB2aWV3ID0gZy5JbnQxNkFycmF5OyBicmVhaztcbiAgY2FzZSA1OiAgdmlldyA9IGcuVWludDE2QXJyYXk7IGJyZWFrO1xuICBjYXNlIDY6ICB2aWV3ID0gZy5JbnQzMkFycmF5OyBicmVhaztcbiAgY2FzZSA3OiAgdmlldyA9IGcuSW50MzJBcnJheTsgYnJlYWs7XG4gIGNhc2UgODogIHZpZXcgPSBnLkludDMyQXJyYXk7IGJyZWFrO1xuICBjYXNlIDk6ICB2aWV3ID0gZy5JbnQzMkFycmF5OyBicmVhaztcbiAgY2FzZSAxMDogdmlldyA9IGcuRmxvYXQzMkFycmF5OyBicmVhaztcbiAgY2FzZSAxMTogdmlldyA9IGcuRmxvYXQ2NEFycmF5OyBicmVhaztcbiAgY2FzZSAxMjogdmlldyA9IGcuVWludDhBcnJheTsgYnJlYWs7XG4gIH1cbiAgaWYgKCF2aWV3KSBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5jcmVhdGU6IHVuc3VwcG9ydGVkIGtpbmRcIik7XG4gIHZhciBkYXRhID0gbmV3IHZpZXcoc2l6ZSAqIGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnQoa2luZCkpO1xuICByZXR1cm4gZGF0YTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9jdXN0b21fbmFtZVxuLy9WZXJzaW9uOiA8IDQuMTFcbnZhciBjYW1sX2JhX2N1c3RvbV9uYW1lID0gXCJfYmlnYXJyYXlcIlxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2N1c3RvbV9uYW1lXG4vL1ZlcnNpb246ID49IDQuMTFcbnZhciBjYW1sX2JhX2N1c3RvbV9uYW1lID0gXCJfYmlnYXJyMDJcIlxuXG4vL1Byb3ZpZGVzOiBNbF9CaWdhcnJheVxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvciwgY2FtbF9pbnZhbGlkX2FyZ3VtZW50LCBjYW1sX2JhX2N1c3RvbV9uYW1lXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X2NyZWF0ZV9sb19oaSwgY2FtbF9pbnQ2NF9oaTMyLCBjYW1sX2ludDY0X2xvMzJcbmZ1bmN0aW9uIE1sX0JpZ2FycmF5IChraW5kLCBsYXlvdXQsIGRpbXMsIGJ1ZmZlcikge1xuXG4gIHRoaXMua2luZCAgID0ga2luZCA7XG4gIHRoaXMubGF5b3V0ID0gbGF5b3V0O1xuICB0aGlzLmRpbXMgICA9IGRpbXM7XG4gIHRoaXMuZGF0YSA9IGJ1ZmZlcjtcbn1cblxuTWxfQmlnYXJyYXkucHJvdG90eXBlLmNhbWxfY3VzdG9tID0gY2FtbF9iYV9jdXN0b21fbmFtZTtcblxuTWxfQmlnYXJyYXkucHJvdG90eXBlLm9mZnNldCA9IGZ1bmN0aW9uIChhcmcpIHtcbiAgdmFyIG9mcyA9IDA7XG4gIGlmKHR5cGVvZiBhcmcgPT09IFwibnVtYmVyXCIpIGFyZyA9IFthcmddO1xuICBpZiAoISAoYXJnIGluc3RhbmNlb2YgQXJyYXkpKSBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJiaWdhcnJheS5qczogaW52YWxpZCBvZmZzZXRcIik7XG4gIGlmICh0aGlzLmRpbXMubGVuZ3RoICE9IGFyZy5sZW5ndGgpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkuZ2V0L3NldDogYmFkIG51bWJlciBvZiBkaW1lbnNpb25zXCIpO1xuICBpZih0aGlzLmxheW91dCA9PSAwIC8qIGNfbGF5b3V0ICovKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRpbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChhcmdbaV0gPCAwIHx8IGFyZ1tpXSA+PSB0aGlzLmRpbXNbaV0pXG4gICAgICAgIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgICAgIG9mcyA9IChvZnMgKiB0aGlzLmRpbXNbaV0pICsgYXJnW2ldO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBpID0gdGhpcy5kaW1zLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBpZiAoYXJnW2ldIDwgMSB8fCBhcmdbaV0gPiB0aGlzLmRpbXNbaV0pe1xuICAgICAgICBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gICAgICB9XG4gICAgICBvZnMgPSAob2ZzICogdGhpcy5kaW1zW2ldKSArIChhcmdbaV0gLSAxKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG9mcztcbn1cblxuTWxfQmlnYXJyYXkucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChvZnMpIHtcbiAgc3dpdGNoKHRoaXMua2luZCl7XG4gIGNhc2UgNzpcbiAgICAvLyBJbnQ2NFxuICAgIHZhciBsID0gdGhpcy5kYXRhW29mcyAqIDIgKyAwXTtcbiAgICB2YXIgaCA9IHRoaXMuZGF0YVtvZnMgKiAyICsgMV07XG4gICAgcmV0dXJuIGNhbWxfaW50NjRfY3JlYXRlX2xvX2hpKGwsaCk7XG4gIGNhc2UgMTA6IGNhc2UgMTE6XG4gICAgLy8gQ29tcGxleDMyLCBDb21wbGV4NjRcbiAgICB2YXIgciA9IHRoaXMuZGF0YVtvZnMgKiAyICsgMF07XG4gICAgdmFyIGkgPSB0aGlzLmRhdGFbb2ZzICogMiArIDFdO1xuICAgIHJldHVybiBbMjU0LCByLCBpXTtcbiAgZGVmYXVsdDpcbiAgICByZXR1cm4gdGhpcy5kYXRhW29mc11cbiAgfVxufVxuXG5NbF9CaWdhcnJheS5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKG9mcyx2KSB7XG4gIHN3aXRjaCh0aGlzLmtpbmQpe1xuICBjYXNlIDc6XG4gICAgLy8gSW50NjRcbiAgICB0aGlzLmRhdGFbb2ZzICogMiArIDBdID0gY2FtbF9pbnQ2NF9sbzMyKHYpO1xuICAgIHRoaXMuZGF0YVtvZnMgKiAyICsgMV0gPSBjYW1sX2ludDY0X2hpMzIodik7XG4gICAgYnJlYWs7XG4gIGNhc2UgMTA6IGNhc2UgMTE6XG4gICAgLy8gQ29tcGxleDMyLCBDb21wbGV4NjRcbiAgICB0aGlzLmRhdGFbb2ZzICogMiArIDBdID0gdlsxXTtcbiAgICB0aGlzLmRhdGFbb2ZzICogMiArIDFdID0gdlsyXTtcbiAgICBicmVhaztcbiAgZGVmYXVsdDpcbiAgICB0aGlzLmRhdGFbb2ZzXSA9IHY7XG4gICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIDBcbn1cblxuXG5NbF9CaWdhcnJheS5wcm90b3R5cGUuZmlsbCA9IGZ1bmN0aW9uICh2KSB7XG4gIHN3aXRjaCh0aGlzLmtpbmQpe1xuICBjYXNlIDc6XG4gICAgLy8gSW50NjRcbiAgICB2YXIgYSA9IGNhbWxfaW50NjRfbG8zMih2KTtcbiAgICB2YXIgYiA9IGNhbWxfaW50NjRfaGkzMih2KTtcbiAgICBpZihhID09IGIpe1xuICAgICAgdGhpcy5kYXRhLmZpbGwoYSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgZm9yKHZhciBpID0gMDsgaTx0aGlzLmRhdGEubGVuZ3RoOyBpKyspe1xuICAgICAgICB0aGlzLmRhdGFbaV0gPSAoaSUyID09IDApID8gYSA6IGI7XG4gICAgICB9XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDEwOiBjYXNlIDExOlxuICAgIC8vIENvbXBsZXgzMiwgQ29tcGxleDY0XG4gICAgdmFyIGltID0gdlsxXTtcbiAgICB2YXIgcmUgPSB2WzJdO1xuICAgIGlmKGltID09IHJlKXtcbiAgICAgIHRoaXMuZGF0YS5maWxsKGltKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBmb3IodmFyIGkgPSAwOyBpPHRoaXMuZGF0YS5sZW5ndGg7IGkrKyl7XG4gICAgICAgIHRoaXMuZGF0YVtpXSA9IChpJTIgPT0gMCkgPyBpbSA6IHJlO1xuICAgICAgfVxuICAgIH1cbiAgICBicmVhaztcbiAgZGVmYXVsdDpcbiAgICB0aGlzLmRhdGEuZmlsbCh2KTtcbiAgICBicmVhaztcbiAgfVxufVxuXG5cbk1sX0JpZ2FycmF5LnByb3RvdHlwZS5jb21wYXJlID0gZnVuY3Rpb24gKGIsIHRvdGFsKSB7XG4gIGlmICh0aGlzLmxheW91dCAhPSBiLmxheW91dCB8fCB0aGlzLmtpbmQgIT0gYi5raW5kKSB7XG4gICAgdmFyIGsxID0gdGhpcy5raW5kIHwgKHRoaXMubGF5b3V0IDw8IDgpO1xuICAgIHZhciBrMiA9ICAgIGIua2luZCB8IChiLmxheW91dCA8PCA4KTtcbiAgICByZXR1cm4gazIgLSBrMTtcbiAgfVxuICBpZiAodGhpcy5kaW1zLmxlbmd0aCAhPSBiLmRpbXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGIuZGltcy5sZW5ndGggLSB0aGlzLmRpbXMubGVuZ3RoO1xuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5kaW1zLmxlbmd0aDsgaSsrKVxuICAgIGlmICh0aGlzLmRpbXNbaV0gIT0gYi5kaW1zW2ldKVxuICAgICAgcmV0dXJuICh0aGlzLmRpbXNbaV0gPCBiLmRpbXNbaV0pID8gLTEgOiAxO1xuICBzd2l0Y2ggKHRoaXMua2luZCkge1xuICBjYXNlIDA6XG4gIGNhc2UgMTpcbiAgY2FzZSAxMDpcbiAgY2FzZSAxMTpcbiAgICAvLyBGbG9hdHNcbiAgICB2YXIgeCwgeTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgeCA9IHRoaXMuZGF0YVtpXTtcbiAgICAgIHkgPSBiLmRhdGFbaV07XG4gICAgICBpZiAoeCA8IHkpXG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIGlmICh4ID4geSlcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICBpZiAoeCAhPSB5KSB7XG4gICAgICAgIGlmICghdG90YWwpIHJldHVybiBOYU47XG4gICAgICAgIGlmICh4ID09IHgpIHJldHVybiAxO1xuICAgICAgICBpZiAoeSA9PSB5KSByZXR1cm4gLTE7XG4gICAgICB9XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDc6XG4gICAgLy8gSW50NjRcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZGF0YS5sZW5ndGg7IGkrPTIpIHtcbiAgICAgIC8vIENoZWNrIGhpZ2hlc3QgYml0cyBmaXJzdFxuICAgICAgaWYgKHRoaXMuZGF0YVtpKzFdIDwgYi5kYXRhW2krMV0pXG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIGlmICh0aGlzLmRhdGFbaSsxXSA+IGIuZGF0YVtpKzFdKVxuICAgICAgICByZXR1cm4gMTtcbiAgICAgIGlmICgodGhpcy5kYXRhW2ldID4+PiAwKSA8IChiLmRhdGFbaV0gPj4+IDApKVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgICBpZiAoKHRoaXMuZGF0YVtpXSA+Pj4gMCkgPiAoYi5kYXRhW2ldID4+PiAwKSlcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDI6XG4gIGNhc2UgMzpcbiAgY2FzZSA0OlxuICBjYXNlIDU6XG4gIGNhc2UgNjpcbiAgY2FzZSA4OlxuICBjYXNlIDk6XG4gIGNhc2UgMTI6XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmRhdGFbaV0gPCBiLmRhdGFbaV0pXG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIGlmICh0aGlzLmRhdGFbaV0gPiBiLmRhdGFbaV0pXG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICBicmVhaztcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogTWxfQmlnYXJyYXlfY18xXzFcbi8vUmVxdWlyZXM6IE1sX0JpZ2FycmF5LCBjYW1sX2FycmF5X2JvdW5kX2Vycm9yLCBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIE1sX0JpZ2FycmF5X2NfMV8xKGtpbmQsIGxheW91dCwgZGltcywgYnVmZmVyKSB7XG4gIHRoaXMua2luZCAgID0ga2luZCA7XG4gIHRoaXMubGF5b3V0ID0gbGF5b3V0O1xuICB0aGlzLmRpbXMgICA9IGRpbXM7XG4gIHRoaXMuZGF0YSAgID0gYnVmZmVyO1xufVxuXG5NbF9CaWdhcnJheV9jXzFfMS5wcm90b3R5cGUgPSBuZXcgTWxfQmlnYXJyYXkoKVxuTWxfQmlnYXJyYXlfY18xXzEucHJvdG90eXBlLm9mZnNldCA9IGZ1bmN0aW9uIChhcmcpIHtcbiAgaWYodHlwZW9mIGFyZyAhPT0gXCJudW1iZXJcIil7XG4gICAgaWYoKGFyZyBpbnN0YW5jZW9mIEFycmF5KSAmJiBhcmcubGVuZ3RoID09IDEpXG4gICAgICBhcmcgPSBhcmdbMF07XG4gICAgZWxzZSBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJNbF9CaWdhcnJheV9jXzFfMS5vZmZzZXRcIik7XG4gIH1cbiAgaWYgKGFyZyA8IDAgfHwgYXJnID49IHRoaXMuZGltc1swXSlcbiAgICBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHJldHVybiBhcmc7XG59XG5cbk1sX0JpZ2FycmF5X2NfMV8xLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAob2ZzKSB7XG4gIHJldHVybiB0aGlzLmRhdGFbb2ZzXTtcbn1cblxuTWxfQmlnYXJyYXlfY18xXzEucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChvZnMsdikge1xuICB0aGlzLmRhdGFbb2ZzXSA9IHY7XG4gIHJldHVybiAwXG59XG5cbk1sX0JpZ2FycmF5X2NfMV8xLnByb3RvdHlwZS5maWxsID0gZnVuY3Rpb24gKHYpIHtcbiAgdGhpcy5kYXRhLmZpbGwodik7XG4gIHJldHVybiAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfY29tcGFyZVxuZnVuY3Rpb24gY2FtbF9iYV9jb21wYXJlKGEsYix0b3RhbCl7XG4gIHJldHVybiBhLmNvbXBhcmUoYix0b3RhbClcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9jcmVhdGVfdW5zYWZlXG4vL1JlcXVpcmVzOiBNbF9CaWdhcnJheSwgTWxfQmlnYXJyYXlfY18xXzEsIGNhbWxfYmFfZ2V0X3NpemUsIGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnRcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGtpbmQsIGxheW91dCwgZGltcywgZGF0YSl7XG4gIHZhciBzaXplX3Blcl9lbGVtZW50ID0gY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudChraW5kKTtcbiAgaWYoY2FtbF9iYV9nZXRfc2l6ZShkaW1zKSAqIHNpemVfcGVyX2VsZW1lbnQgIT0gZGF0YS5sZW5ndGgpIHtcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJsZW5ndGggZG9lc24ndCBtYXRjaCBkaW1zXCIpO1xuICB9XG4gIGlmKGxheW91dCA9PSAwICYmIC8vIGNfbGF5b3V0XG4gICAgIGRpbXMubGVuZ3RoID09IDEgJiYgLy8gQXJyYXkxXG4gICAgIHNpemVfcGVyX2VsZW1lbnQgPT0gMSkgLy8gMS10by0xIG1hcHBpbmdcbiAgICByZXR1cm4gbmV3IE1sX0JpZ2FycmF5X2NfMV8xKGtpbmQsIGxheW91dCwgZGltcywgZGF0YSk7XG4gIHJldHVybiBuZXcgTWxfQmlnYXJyYXkoa2luZCwgbGF5b3V0LCBkaW1zLCBkYXRhKTtcblxufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfY3JlYXRlXG4vL1JlcXVpcmVzOiBjYW1sX2pzX2Zyb21fYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZ2V0X3NpemUsIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZVxuLy9SZXF1aXJlczogY2FtbF9iYV9jcmVhdGVfYnVmZmVyXG5mdW5jdGlvbiBjYW1sX2JhX2NyZWF0ZShraW5kLCBsYXlvdXQsIGRpbXNfbWwpIHtcbiAgdmFyIGRpbXMgPSBjYW1sX2pzX2Zyb21fYXJyYXkoZGltc19tbCk7XG4gIHZhciBkYXRhID0gY2FtbF9iYV9jcmVhdGVfYnVmZmVyKGtpbmQsIGNhbWxfYmFfZ2V0X3NpemUoZGltcykpO1xuICByZXR1cm4gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGtpbmQsIGxheW91dCwgZGltcywgZGF0YSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfY2hhbmdlX2xheW91dFxuLy9SZXF1aXJlczogY2FtbF9iYV9jcmVhdGVfdW5zYWZlXG5mdW5jdGlvbiBjYW1sX2JhX2NoYW5nZV9sYXlvdXQoYmEsIGxheW91dCkge1xuICBpZihiYS5sYXlvdXQgPT0gbGF5b3V0KSByZXR1cm4gYmE7XG4gIHZhciBuZXdfZGltcyA9IFtdXG4gIGZvcih2YXIgaSA9IDA7IGkgPCBiYS5kaW1zLmxlbmd0aDsgaSsrKSBuZXdfZGltc1tpXSA9IGJhLmRpbXNbYmEuZGltcy5sZW5ndGggLSBpIC0gMV07XG4gIHJldHVybiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoYmEua2luZCwgbGF5b3V0LCBuZXdfZGltcywgYmEuZGF0YSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfa2luZFxuZnVuY3Rpb24gY2FtbF9iYV9raW5kKGJhKSB7XG4gIHJldHVybiBiYS5raW5kO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2xheW91dFxuZnVuY3Rpb24gY2FtbF9iYV9sYXlvdXQoYmEpIHtcbiAgcmV0dXJuIGJhLmxheW91dDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9udW1fZGltc1xuZnVuY3Rpb24gY2FtbF9iYV9udW1fZGltcyhiYSkge1xuICByZXR1cm4gYmEuZGltcy5sZW5ndGg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZGltXG4vL1JlcXVpcmVzOiBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfZGltKGJhLCBpKSB7XG4gIGlmIChpIDwgMCB8fCBpID49IGJhLmRpbXMubGVuZ3RoKVxuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LmRpbVwiKTtcbiAgcmV0dXJuIGJhLmRpbXNbaV07XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZGltXzFcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZGltXG5mdW5jdGlvbiBjYW1sX2JhX2RpbV8xKGJhKSB7XG4gIHJldHVybiBjYW1sX2JhX2RpbShiYSwgMCk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZGltXzJcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZGltXG5mdW5jdGlvbiBjYW1sX2JhX2RpbV8yKGJhKSB7XG4gIHJldHVybiBjYW1sX2JhX2RpbShiYSwgMSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZGltXzNcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZGltXG5mdW5jdGlvbiBjYW1sX2JhX2RpbV8zKGJhKSB7XG4gIHJldHVybiBjYW1sX2JhX2RpbShiYSwgMik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZ2V0X2dlbmVyaWNcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuZnVuY3Rpb24gY2FtbF9iYV9nZXRfZ2VuZXJpYyhiYSwgaSkge1xuICB2YXIgb2ZzID0gYmEub2Zmc2V0KGNhbWxfanNfZnJvbV9hcnJheShpKSk7XG4gIHJldHVybiBiYS5nZXQob2ZzKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV91aW50OF9nZXQxNlxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9iYV91aW50OF9nZXQxNihiYSwgaTApIHtcbiAgdmFyIG9mcyA9IGJhLm9mZnNldChpMCk7XG4gIGlmKG9mcyArIDEgPj0gYmEuZGF0YS5sZW5ndGgpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGIxID0gYmEuZ2V0KG9mcyk7XG4gIHZhciBiMiA9IGJhLmdldChvZnMgKyAxKTtcbiAgcmV0dXJuIChiMSB8IChiMiA8PCA4KSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfdWludDhfZ2V0MzJcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfYmFfdWludDhfZ2V0MzIoYmEsIGkwKSB7XG4gIHZhciBvZnMgPSBiYS5vZmZzZXQoaTApO1xuICBpZihvZnMgKyAzID49IGJhLmRhdGEubGVuZ3RoKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHZhciBiMSA9IGJhLmdldChvZnMrMCk7XG4gIHZhciBiMiA9IGJhLmdldChvZnMrMSk7XG4gIHZhciBiMyA9IGJhLmdldChvZnMrMik7XG4gIHZhciBiNCA9IGJhLmdldChvZnMrMyk7XG4gIHJldHVybiAoIChiMSA8PCAwKSAgfFxuICAgICAgICAgICAoYjIgPDwgOCkgIHxcbiAgICAgICAgICAgKGIzIDw8IDE2KSB8XG4gICAgICAgICAgIChiNCA8PCAyNCkgKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV91aW50OF9nZXQ2NFxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvciwgY2FtbF9pbnQ2NF9vZl9ieXRlc1xuZnVuY3Rpb24gY2FtbF9iYV91aW50OF9nZXQ2NChiYSwgaTApIHtcbiAgdmFyIG9mcyA9IGJhLm9mZnNldChpMCk7XG4gIGlmKG9mcyArIDcgPj0gYmEuZGF0YS5sZW5ndGgpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgdmFyIGIxID0gYmEuZ2V0KG9mcyswKTtcbiAgdmFyIGIyID0gYmEuZ2V0KG9mcysxKTtcbiAgdmFyIGIzID0gYmEuZ2V0KG9mcysyKTtcbiAgdmFyIGI0ID0gYmEuZ2V0KG9mcyszKTtcbiAgdmFyIGI1ID0gYmEuZ2V0KG9mcys0KTtcbiAgdmFyIGI2ID0gYmEuZ2V0KG9mcys1KTtcbiAgdmFyIGI3ID0gYmEuZ2V0KG9mcys2KTtcbiAgdmFyIGI4ID0gYmEuZ2V0KG9mcys3KTtcbiAgcmV0dXJuIGNhbWxfaW50NjRfb2ZfYnl0ZXMoW2I4LGI3LGI2LGI1LGI0LGIzLGIyLGIxXSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZ2V0XzFcbmZ1bmN0aW9uIGNhbWxfYmFfZ2V0XzEoYmEsIGkwKSB7XG4gIHJldHVybiBiYS5nZXQoYmEub2Zmc2V0KGkwKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZ2V0XzJcbmZ1bmN0aW9uIGNhbWxfYmFfZ2V0XzIoYmEsIGkwLCBpMSkge1xuICByZXR1cm4gYmEuZ2V0KGJhLm9mZnNldChbaTAsaTFdKSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZ2V0XzNcbmZ1bmN0aW9uIGNhbWxfYmFfZ2V0XzMoYmEsIGkwLCBpMSwgaTIpIHtcbiAgcmV0dXJuIGJhLmdldChiYS5vZmZzZXQoW2kwLGkxLGkyXSkpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3NldF9nZW5lcmljXG4vL1JlcXVpcmVzOiBjYW1sX2pzX2Zyb21fYXJyYXlcbmZ1bmN0aW9uIGNhbWxfYmFfc2V0X2dlbmVyaWMoYmEsIGksIHYpIHtcbiAgYmEuc2V0KGJhLm9mZnNldChjYW1sX2pzX2Zyb21fYXJyYXkoaSkpLCB2KTtcbiAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV91aW50OF9zZXQxNlxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9iYV91aW50OF9zZXQxNihiYSwgaTAsIHYpIHtcbiAgdmFyIG9mcyA9IGJhLm9mZnNldChpMCk7XG4gIGlmKG9mcyArIDEgPj0gYmEuZGF0YS5sZW5ndGgpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgYmEuc2V0KG9mcyswLCAgdiAgICAgICAgJiAweGZmKTtcbiAgYmEuc2V0KG9mcysxLCAodiA+Pj4gOCkgJiAweGZmKTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfdWludDhfc2V0MzJcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfYmFfdWludDhfc2V0MzIoYmEsIGkwLCB2KSB7XG4gIHZhciBvZnMgPSBiYS5vZmZzZXQoaTApO1xuICBpZihvZnMgKyAzID49IGJhLmRhdGEubGVuZ3RoKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIGJhLnNldChvZnMrMCwgIHYgICAgICAgICAmIDB4ZmYpO1xuICBiYS5zZXQob2ZzKzEsICh2ID4+PiA4KSAgJiAweGZmKTtcbiAgYmEuc2V0KG9mcysyLCAodiA+Pj4gMTYpICYgMHhmZik7XG4gIGJhLnNldChvZnMrMywgKHYgPj4+IDI0KSAmIDB4ZmYpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV91aW50OF9zZXQ2NFxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvciwgY2FtbF9pbnQ2NF90b19ieXRlc1xuZnVuY3Rpb24gY2FtbF9iYV91aW50OF9zZXQ2NChiYSwgaTAsIHYpIHtcbiAgdmFyIG9mcyA9IGJhLm9mZnNldChpMCk7XG4gIGlmKG9mcyArIDcgPj0gYmEuZGF0YS5sZW5ndGgpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgdmFyIHYgPSBjYW1sX2ludDY0X3RvX2J5dGVzKHYpO1xuICBmb3IodmFyIGkgPSAwOyBpIDwgODsgaSsrKSBiYS5zZXQob2ZzK2ksIHZbNy1pXSlcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfc2V0XzFcbmZ1bmN0aW9uIGNhbWxfYmFfc2V0XzEoYmEsIGkwLCB2KSB7XG4gIGJhLnNldChiYS5vZmZzZXQoaTApLCB2KTtcbiAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9zZXRfMlxuZnVuY3Rpb24gY2FtbF9iYV9zZXRfMihiYSwgaTAsIGkxLCB2KSB7XG4gIGJhLnNldChiYS5vZmZzZXQoW2kwLGkxXSksIHYpO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9zZXRfM1xuZnVuY3Rpb24gY2FtbF9iYV9zZXRfMyhiYSwgaTAsIGkxLCBpMiwgdikge1xuICBiYS5zZXQoYmEub2Zmc2V0KFtpMCxpMSxpMl0pLCB2KTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZmlsbFxuZnVuY3Rpb24gY2FtbF9iYV9maWxsKGJhLCB2KSB7XG4gIGJhLmZpbGwodik7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2JsaXRcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9iYV9ibGl0KHNyYywgZHN0KSB7XG4gIGlmIChkc3QuZGltcy5sZW5ndGggIT0gc3JjLmRpbXMubGVuZ3RoKVxuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LmJsaXQ6IGRpbWVuc2lvbiBtaXNtYXRjaFwiKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBkc3QuZGltcy5sZW5ndGg7IGkrKylcbiAgICBpZiAoZHN0LmRpbXNbaV0gIT0gc3JjLmRpbXNbaV0pXG4gICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5ibGl0OiBkaW1lbnNpb24gbWlzbWF0Y2hcIik7XG4gIGRzdC5kYXRhLnNldChzcmMuZGF0YSk7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3N1YlxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50LCBjYW1sX2JhX2NyZWF0ZV91bnNhZmUsIGNhbWxfYmFfZ2V0X3NpemVcbi8vUmVxdWlyZXM6IGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnRcbmZ1bmN0aW9uIGNhbWxfYmFfc3ViKGJhLCBvZnMsIGxlbikge1xuICB2YXIgY2hhbmdlZF9kaW07XG4gIHZhciBtdWwgPSAxO1xuICBpZiAoYmEubGF5b3V0ID09IDApIHtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGJhLmRpbXMubGVuZ3RoOyBpKyspXG4gICAgICBtdWwgPSBtdWwgKiBiYS5kaW1zW2ldO1xuICAgIGNoYW5nZWRfZGltID0gMDtcbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IChiYS5kaW1zLmxlbmd0aCAtIDEpOyBpKyspXG4gICAgICBtdWwgPSBtdWwgKiBiYS5kaW1zW2ldO1xuICAgIGNoYW5nZWRfZGltID0gYmEuZGltcy5sZW5ndGggLSAxO1xuICAgIG9mcyA9IG9mcyAtIDE7XG4gIH1cbiAgaWYgKG9mcyA8IDAgfHwgbGVuIDwgMCB8fCAob2ZzICsgbGVuKSA+IGJhLmRpbXNbY2hhbmdlZF9kaW1dKXtcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5zdWI6IGJhZCBzdWItYXJyYXlcIik7XG4gIH1cbiAgdmFyIG5ld19kaW1zID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYmEuZGltcy5sZW5ndGg7IGkrKylcbiAgICBuZXdfZGltc1tpXSA9IGJhLmRpbXNbaV07XG4gIG5ld19kaW1zW2NoYW5nZWRfZGltXSA9IGxlbjtcbiAgbXVsICo9IGNhbWxfYmFfZ2V0X3NpemVfcGVyX2VsZW1lbnQoYmEua2luZCk7XG4gIHZhciBuZXdfZGF0YSA9IGJhLmRhdGEuc3ViYXJyYXkob2ZzICogbXVsLCAob2ZzICsgbGVuKSAqIG11bCk7XG4gIHJldHVybiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoYmEua2luZCwgYmEubGF5b3V0LCBuZXdfZGltcywgbmV3X2RhdGEpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX3NsaWNlXG4vL1JlcXVpcmVzOiBjYW1sX2pzX2Zyb21fYXJyYXksIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZSwgY2FtbF9pbnZhbGlkX2FyZ3VtZW50LCBjYW1sX2JhX2dldF9zaXplXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50XG5mdW5jdGlvbiBjYW1sX2JhX3NsaWNlKGJhLCB2aW5kKSB7XG4gIHZpbmQgPSBjYW1sX2pzX2Zyb21fYXJyYXkodmluZCk7XG4gIHZhciBudW1faW5kcyA9IHZpbmQubGVuZ3RoO1xuICB2YXIgaW5kZXggPSBbXTtcbiAgdmFyIHN1Yl9kaW1zID0gW107XG4gIHZhciBvZnM7XG5cbiAgaWYgKG51bV9pbmRzID4gYmEuZGltcy5sZW5ndGgpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkuc2xpY2U6IHRvbyBtYW55IGluZGljZXNcIik7XG5cbiAgLy8gQ29tcHV0ZSBvZmZzZXQgYW5kIGNoZWNrIGJvdW5kc1xuICBpZiAoYmEubGF5b3V0ID09IDApIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bV9pbmRzOyBpKyspXG4gICAgICBpbmRleFtpXSA9IHZpbmRbaV07XG4gICAgZm9yICg7IGkgPCBiYS5kaW1zLmxlbmd0aDsgaSsrKVxuICAgICAgaW5kZXhbaV0gPSAwO1xuICAgIHN1Yl9kaW1zID0gYmEuZGltcy5zbGljZShudW1faW5kcyk7XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1faW5kczsgaSsrKVxuICAgICAgaW5kZXhbYmEuZGltcy5sZW5ndGggLSBudW1faW5kcyArIGldID0gdmluZFtpXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJhLmRpbXMubGVuZ3RoIC0gbnVtX2luZHM7IGkrKylcbiAgICAgIGluZGV4W2ldID0gMTtcbiAgICBzdWJfZGltcyA9IGJhLmRpbXMuc2xpY2UoMCwgYmEuZGltcy5sZW5ndGggLSBudW1faW5kcyk7XG4gIH1cbiAgb2ZzID0gYmEub2Zmc2V0KGluZGV4KTtcbiAgdmFyIHNpemUgPSBjYW1sX2JhX2dldF9zaXplKHN1Yl9kaW1zKTtcbiAgdmFyIHNpemVfcGVyX2VsZW1lbnQgPSBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50KGJhLmtpbmQpO1xuICB2YXIgbmV3X2RhdGEgPSBiYS5kYXRhLnN1YmFycmF5KG9mcyAqIHNpemVfcGVyX2VsZW1lbnQsIChvZnMgKyBzaXplKSAqIHNpemVfcGVyX2VsZW1lbnQpO1xuICByZXR1cm4gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGJhLmtpbmQsIGJhLmxheW91dCwgc3ViX2RpbXMsIG5ld19kYXRhKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9yZXNoYXBlXG4vL1JlcXVpcmVzOiBjYW1sX2pzX2Zyb21fYXJyYXksIGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9iYV9jcmVhdGVfdW5zYWZlLCBjYW1sX2JhX2dldF9zaXplXG5mdW5jdGlvbiBjYW1sX2JhX3Jlc2hhcGUoYmEsIHZpbmQpIHtcbiAgdmluZCA9IGNhbWxfanNfZnJvbV9hcnJheSh2aW5kKTtcbiAgdmFyIG5ld19kaW0gPSBbXTtcbiAgdmFyIG51bV9kaW1zID0gdmluZC5sZW5ndGg7XG5cbiAgaWYgKG51bV9kaW1zIDwgMCB8fCBudW1fZGltcyA+IDE2KXtcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJCaWdhcnJheS5yZXNoYXBlOiBiYWQgbnVtYmVyIG9mIGRpbWVuc2lvbnNcIik7XG4gIH1cbiAgdmFyIG51bV9lbHRzID0gMTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1fZGltczsgaSsrKSB7XG4gICAgbmV3X2RpbVtpXSA9IHZpbmRbaV07XG4gICAgaWYgKG5ld19kaW1baV0gPCAwKVxuICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiQmlnYXJyYXkucmVzaGFwZTogbmVnYXRpdmUgZGltZW5zaW9uXCIpO1xuICAgIG51bV9lbHRzID0gbnVtX2VsdHMgKiBuZXdfZGltW2ldO1xuICB9XG5cbiAgdmFyIHNpemUgPSBjYW1sX2JhX2dldF9zaXplKGJhLmRpbXMpO1xuICAvLyBDaGVjayB0aGF0IHNpemVzIGFncmVlXG4gIGlmIChudW1fZWx0cyAhPSBzaXplKVxuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIkJpZ2FycmF5LnJlc2hhcGU6IHNpemUgbWlzbWF0Y2hcIik7XG4gIHJldHVybiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoYmEua2luZCwgYmEubGF5b3V0LCBuZXdfZGltLCBiYS5kYXRhKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9zZXJpYWxpemVcbi8vUmVxdWlyZXM6IGNhbWxfaW50NjRfYml0c19vZl9mbG9hdCwgY2FtbF9pbnQ2NF90b19ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9pbnQzMl9iaXRzX29mX2Zsb2F0XG5mdW5jdGlvbiBjYW1sX2JhX3NlcmlhbGl6ZSh3cml0ZXIsIGJhLCBzeikge1xuICB3cml0ZXIud3JpdGUoMzIsIGJhLmRpbXMubGVuZ3RoKTtcbiAgd3JpdGVyLndyaXRlKDMyLCAoYmEua2luZCB8IChiYS5sYXlvdXQgPDwgOCkpKTtcbiAgaWYoYmEuY2FtbF9jdXN0b20gPT0gXCJfYmlnYXJyMDJcIilcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgYmEuZGltcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYoYmEuZGltc1tpXSA8IDB4ZmZmZilcbiAgICAgICAgd3JpdGVyLndyaXRlKDE2LCBiYS5kaW1zW2ldKTtcbiAgICAgIGVsc2Uge1xuICAgICAgICB3cml0ZXIud3JpdGUoMTYsIDB4ZmZmZik7XG4gICAgICAgIHdyaXRlci53cml0ZSgzMiwgMCk7XG4gICAgICAgIHdyaXRlci53cml0ZSgzMiwgYmEuZGltc1tpXSk7XG4gICAgICB9XG4gICAgfVxuICBlbHNlXG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGJhLmRpbXMubGVuZ3RoOyBpKyspIHdyaXRlci53cml0ZSgzMixiYS5kaW1zW2ldKVxuICBzd2l0Y2goYmEua2luZCl7XG4gIGNhc2UgMjogIC8vSW50OEFycmF5XG4gIGNhc2UgMzogIC8vVWludDhBcnJheVxuICBjYXNlIDEyOiAvL1VpbnQ4QXJyYXlcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGg7IGkrKyl7XG4gICAgICB3cml0ZXIud3JpdGUoOCwgYmEuZGF0YVtpXSk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDQ6ICAvLyBJbnQxNkFycmF5XG4gIGNhc2UgNTogIC8vIFVpbnQxNkFycmF5XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGJhLmRhdGEubGVuZ3RoOyBpKyspe1xuICAgICAgd3JpdGVyLndyaXRlKDE2LCBiYS5kYXRhW2ldKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgNjogIC8vIEludDMyQXJyYXkgKGludDMyKVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBiYS5kYXRhLmxlbmd0aDsgaSsrKXtcbiAgICAgIHdyaXRlci53cml0ZSgzMiwgYmEuZGF0YVtpXSk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDg6ICAvLyBJbnQzMkFycmF5IChpbnQpXG4gIGNhc2UgOTogIC8vIEludDMyQXJyYXkgKG5hdGl2ZWludClcbiAgICB3cml0ZXIud3JpdGUoOCwwKTtcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGg7IGkrKyl7XG4gICAgICB3cml0ZXIud3JpdGUoMzIsIGJhLmRhdGFbaV0pO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSA3OiAgLy8gSW50MzJBcnJheSAoaW50NjQpXG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGJhLmRhdGEubGVuZ3RoIC8gMjsgaSsrKXtcbiAgICAgIHZhciBiID0gY2FtbF9pbnQ2NF90b19ieXRlcyhiYS5nZXQoaSkpO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA4OyBqKyspIHdyaXRlci53cml0ZSAoOCwgYltqXSk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDE6ICAvLyBGbG9hdDY0QXJyYXlcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGg7IGkrKyl7XG4gICAgICB2YXIgYiA9IGNhbWxfaW50NjRfdG9fYnl0ZXMoY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0KGJhLmdldChpKSkpO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA4OyBqKyspIHdyaXRlci53cml0ZSAoOCwgYltqXSk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDA6ICAvLyBGbG9hdDMyQXJyYXlcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgYmEuZGF0YS5sZW5ndGg7IGkrKyl7XG4gICAgICB2YXIgYiA9IGNhbWxfaW50MzJfYml0c19vZl9mbG9hdChiYS5nZXQoaSkpO1xuICAgICAgd3JpdGVyLndyaXRlKDMyLCBiKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgMTA6IC8vIEZsb2F0MzJBcnJheSAoY29tcGxleDMyKVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBiYS5kYXRhLmxlbmd0aCAvIDI7IGkrKyl7XG4gICAgICB2YXIgaiA9IGJhLmdldChpKTtcbiAgICAgIHdyaXRlci53cml0ZSgzMiwgY2FtbF9pbnQzMl9iaXRzX29mX2Zsb2F0KGpbMV0pKTtcbiAgICAgIHdyaXRlci53cml0ZSgzMiwgY2FtbF9pbnQzMl9iaXRzX29mX2Zsb2F0KGpbMl0pKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgMTE6IC8vIEZsb2F0NjRBcnJheSAoY29tcGxleDY0KVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBiYS5kYXRhLmxlbmd0aCAvIDI7IGkrKyl7XG4gICAgICB2YXIgY29tcGxleCA9IGJhLmdldChpKTtcbiAgICAgIHZhciBiID0gY2FtbF9pbnQ2NF90b19ieXRlcyhjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQoY29tcGxleFsxXSkpO1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA4OyBqKyspIHdyaXRlci53cml0ZSAoOCwgYltqXSk7XG4gICAgICB2YXIgYiA9IGNhbWxfaW50NjRfdG9fYnl0ZXMoY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0KGNvbXBsZXhbMl0pKTtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgODsgaisrKSB3cml0ZXIud3JpdGUgKDgsIGJbal0pO1xuICAgIH1cbiAgICBicmVhaztcbiAgfVxuICBzelswXSA9ICg0ICsgYmEuZGltcy5sZW5ndGgpICogNDtcbiAgc3pbMV0gPSAoNCArIGJhLmRpbXMubGVuZ3RoKSAqIDg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfZGVzZXJpYWxpemVcbi8vUmVxdWlyZXM6IGNhbWxfYmFfY3JlYXRlX3Vuc2FmZSwgY2FtbF9mYWlsd2l0aFxuLy9SZXF1aXJlczogY2FtbF9iYV9nZXRfc2l6ZVxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9vZl9ieXRlcywgY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzXG4vL1JlcXVpcmVzOiBjYW1sX2ludDMyX2Zsb2F0X29mX2JpdHNcbi8vUmVxdWlyZXM6IGNhbWxfYmFfY3JlYXRlX2J1ZmZlclxuZnVuY3Rpb24gY2FtbF9iYV9kZXNlcmlhbGl6ZShyZWFkZXIsIHN6LCBuYW1lKXtcbiAgdmFyIG51bV9kaW1zID0gcmVhZGVyLnJlYWQzMnMoKTtcbiAgaWYgKG51bV9kaW1zIDwgMCB8fCBudW1fZGltcyA+IDE2KVxuICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogd3JvbmcgbnVtYmVyIG9mIGJpZ2FycmF5IGRpbWVuc2lvbnNcIik7XG4gIHZhciB0YWcgPSByZWFkZXIucmVhZDMycygpO1xuICB2YXIga2luZCA9IHRhZyAmIDB4ZmZcbiAgdmFyIGxheW91dCA9ICh0YWcgPj4gOCkgJiAxO1xuICB2YXIgZGltcyA9IFtdXG4gIGlmKG5hbWUgPT0gXCJfYmlnYXJyMDJcIilcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bV9kaW1zOyBpKyspIHtcbiAgICAgIHZhciBzaXplX2RpbSA9IHJlYWRlci5yZWFkMTZ1KCk7XG4gICAgICBpZihzaXplX2RpbSA9PSAweGZmZmYpe1xuICAgICAgICB2YXIgc2l6ZV9kaW1faGkgPSByZWFkZXIucmVhZDMydSgpO1xuICAgICAgICB2YXIgc2l6ZV9kaW1fbG8gPSByZWFkZXIucmVhZDMydSgpO1xuICAgICAgICBpZihzaXplX2RpbV9oaSAhPSAwKVxuICAgICAgICAgIGNhbWxfZmFpbHdpdGgoXCJpbnB1dF92YWx1ZTogYmlnYXJyYXkgZGltZW5zaW9uIG92ZXJmbG93IGluIDMyYml0XCIpO1xuICAgICAgICBzaXplX2RpbSA9IHNpemVfZGltX2xvO1xuICAgICAgfVxuICAgICAgZGltcy5wdXNoKHNpemVfZGltKTtcbiAgICB9XG4gIGVsc2VcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bV9kaW1zOyBpKyspIGRpbXMucHVzaChyZWFkZXIucmVhZDMydSgpKTtcbiAgdmFyIHNpemUgPSBjYW1sX2JhX2dldF9zaXplKGRpbXMpO1xuICB2YXIgZGF0YSA9IGNhbWxfYmFfY3JlYXRlX2J1ZmZlcihraW5kLCBzaXplKTtcbiAgdmFyIGJhID0gY2FtbF9iYV9jcmVhdGVfdW5zYWZlKGtpbmQsIGxheW91dCwgZGltcywgZGF0YSk7XG4gIHN3aXRjaChraW5kKXtcbiAgY2FzZSAyOiAgLy9JbnQ4QXJyYXlcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKXtcbiAgICAgIGRhdGFbaV0gPSByZWFkZXIucmVhZDhzKCk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDM6ICAvL1VpbnQ4QXJyYXlcbiAgY2FzZSAxMjogLy9VaW50OEFycmF5XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKyl7XG4gICAgICBkYXRhW2ldID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSA0OiAgLy8gSW50MTZBcnJheVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspe1xuICAgICAgZGF0YVtpXSA9IHJlYWRlci5yZWFkMTZzKCk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDU6ICAvLyBVaW50MTZBcnJheVxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBzaXplOyBpKyspe1xuICAgICAgZGF0YVtpXSA9IHJlYWRlci5yZWFkMTZ1KCk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDY6ICAvLyBJbnQzMkFycmF5IChpbnQzMilcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKXtcbiAgICAgIGRhdGFbaV0gPSByZWFkZXIucmVhZDMycygpO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSA4OiAgLy8gSW50MzJBcnJheSAoaW50KVxuICBjYXNlIDk6ICAvLyBJbnQzMkFycmF5IChuYXRpdmVpbnQpXG4gICAgdmFyIHNpeHR5ID0gcmVhZGVyLnJlYWQ4dSgpO1xuICAgIGlmKHNpeHR5KSBjYW1sX2ZhaWx3aXRoKFwiaW5wdXRfdmFsdWU6IGNhbm5vdCByZWFkIGJpZ2FycmF5IHdpdGggNjQtYml0IE9DYW1sIGludHNcIik7XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKyl7XG4gICAgICBkYXRhW2ldID0gcmVhZGVyLnJlYWQzMnMoKTtcbiAgICB9XG4gICAgYnJlYWs7XG4gIGNhc2UgNzogLy8gKGludDY0KVxuICAgIHZhciB0ID0gbmV3IEFycmF5KDgpOztcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKXtcbiAgICAgIGZvciAodmFyIGogPSAwO2ogPCA4O2orKykgdFtqXSA9IHJlYWRlci5yZWFkOHUoKTtcbiAgICAgIHZhciBpbnQ2NCA9IGNhbWxfaW50NjRfb2ZfYnl0ZXModCk7XG4gICAgICBiYS5zZXQoaSxpbnQ2NCk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDE6ICAvLyBGbG9hdDY0QXJyYXlcbiAgICB2YXIgdCA9IG5ldyBBcnJheSg4KTs7XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKyl7XG4gICAgICBmb3IgKHZhciBqID0gMDtqIDwgODtqKyspIHRbal0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICB2YXIgZiA9IGNhbWxfaW50NjRfZmxvYXRfb2ZfYml0cyhjYW1sX2ludDY0X29mX2J5dGVzKHQpKTtcbiAgICAgIGJhLnNldChpLGYpO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAwOiAgLy8gRmxvYXQzMkFycmF5XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKyl7XG4gICAgICB2YXIgZiA9IGNhbWxfaW50MzJfZmxvYXRfb2ZfYml0cyhyZWFkZXIucmVhZDMycygpKTtcbiAgICAgIGJhLnNldChpLGYpO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAxMDogLy8gRmxvYXQzMkFycmF5IChjb21wbGV4MzIpXG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKyl7XG4gICAgICB2YXIgcmUgPSBjYW1sX2ludDMyX2Zsb2F0X29mX2JpdHMocmVhZGVyLnJlYWQzMnMoKSk7XG4gICAgICB2YXIgaW0gPSBjYW1sX2ludDMyX2Zsb2F0X29mX2JpdHMocmVhZGVyLnJlYWQzMnMoKSk7XG4gICAgICBiYS5zZXQoaSxbMjU0LHJlLGltXSk7XG4gICAgfVxuICAgIGJyZWFrO1xuICBjYXNlIDExOiAvLyBGbG9hdDY0QXJyYXkgKGNvbXBsZXg2NClcbiAgICB2YXIgdCA9IG5ldyBBcnJheSg4KTs7XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKyl7XG4gICAgICBmb3IgKHZhciBqID0gMDtqIDwgODtqKyspIHRbal0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICB2YXIgcmUgPSBjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMoY2FtbF9pbnQ2NF9vZl9ieXRlcyh0KSk7XG4gICAgICBmb3IgKHZhciBqID0gMDtqIDwgODtqKyspIHRbal0gPSByZWFkZXIucmVhZDh1KCk7XG4gICAgICB2YXIgaW0gPSBjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHMoY2FtbF9pbnQ2NF9vZl9ieXRlcyh0KSk7XG4gICAgICBiYS5zZXQoaSxbMjU0LHJlLGltXSk7XG4gICAgfVxuICAgIGJyZWFrXG4gIH1cbiAgc3pbMF0gPSAoNCArIG51bV9kaW1zKSAqIDQ7XG4gIHJldHVybiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoa2luZCwgbGF5b3V0LCBkaW1zLCBkYXRhKTtcbn1cblxuLy9EZXByZWNhdGVkXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2NyZWF0ZV9mcm9tXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUsIGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9iYV9nZXRfc2l6ZV9wZXJfZWxlbWVudFxuZnVuY3Rpb24gY2FtbF9iYV9jcmVhdGVfZnJvbShkYXRhMSwgZGF0YTIsIGpzdHlwLCBraW5kLCBsYXlvdXQsIGRpbXMpe1xuICBpZihkYXRhMiB8fCBjYW1sX2JhX2dldF9zaXplX3Blcl9lbGVtZW50KGtpbmQpID09IDIpe1xuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImNhbWxfYmFfY3JlYXRlX2Zyb206IHVzZSByZXR1cm4gY2FtbF9iYV9jcmVhdGVfdW5zYWZlXCIpO1xuICB9XG4gIHJldHVybiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoa2luZCwgbGF5b3V0LCBkaW1zLCBkYXRhMSk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfaGFzaCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9iYV9nZXRfc2l6ZSwgY2FtbF9oYXNoX21peF9pbnQsIGNhbWxfaGFzaF9taXhfZmxvYXRcbmZ1bmN0aW9uIGNhbWxfYmFfaGFzaChiYSl7XG4gIHZhciBudW1fZWx0cyA9IGNhbWxfYmFfZ2V0X3NpemUoYmEuZGltcyk7XG4gIHZhciBoID0gMDtcbiAgc3dpdGNoKGJhLmtpbmQpe1xuICBjYXNlIDI6ICAvL0ludDhBcnJheVxuICBjYXNlIDM6ICAvL1VpbnQ4QXJyYXlcbiAgY2FzZSAxMjogLy9VaW50OEFycmF5XG4gICAgaWYobnVtX2VsdHMgPiAyNTYpIG51bV9lbHRzID0gMjU2O1xuICAgIHZhciB3ID0gMCwgaSA9MDtcbiAgICBmb3IoaSA9IDA7IGkgKyA0IDw9IGJhLmRhdGEubGVuZ3RoOyBpKz00KXtcbiAgICAgIHcgPSBiYS5kYXRhW2krMF0gfCAoYmEuZGF0YVtpKzFdIDw8IDgpIHwgKGJhLmRhdGFbaSsyXSA8PCAxNikgfCAoYmEuZGF0YVtpKzNdIDw8IDI0KTtcbiAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLHcpO1xuICAgIH1cbiAgICB3ID0gMDtcbiAgICBzd2l0Y2ggKG51bV9lbHRzICYgMykge1xuICAgIGNhc2UgMzogdyAgPSBiYS5kYXRhW2krMl0gPDwgMTY7ICAgIC8qIGZhbGx0aHJvdWdoICovXG4gICAgY2FzZSAyOiB3IHw9IGJhLmRhdGFbaSsxXSA8PCA4OyAgICAgLyogZmFsbHRocm91Z2ggKi9cbiAgICBjYXNlIDE6IHcgfD0gYmEuZGF0YVtpKzBdO1xuICAgICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIHcpO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSA0OiAgLy8gSW50MTZBcnJheVxuICBjYXNlIDU6ICAvLyBVaW50MTZBcnJheVxuICAgIGlmKG51bV9lbHRzID4gMTI4KSBudW1fZWx0cyA9IDEyODtcbiAgICB2YXIgdyA9IDAsIGkgPTA7XG4gICAgZm9yKGkgPSAwOyBpICsgMiA8PSBiYS5kYXRhLmxlbmd0aDsgaSs9Mil7XG4gICAgICB3ID0gYmEuZGF0YVtpKzBdIHwgKGJhLmRhdGFbaSsxXSA8PCAxNik7XG4gICAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCx3KTtcbiAgICB9XG4gICAgaWYgKChudW1fZWx0cyAmIDEpICE9IDApXG4gICAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgYmEuZGF0YVtpXSk7XG4gICAgYnJlYWs7XG4gIGNhc2UgNjogIC8vIEludDMyQXJyYXkgKGludDMyKVxuICAgIGlmIChudW1fZWx0cyA+IDY0KSBudW1fZWx0cyA9IDY0O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2VsdHM7IGkrKykgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIGJhLmRhdGFbaV0pO1xuICAgIGJyZWFrO1xuICBjYXNlIDg6ICAvLyBJbnQzMkFycmF5IChpbnQpXG4gIGNhc2UgOTogIC8vIEludDMyQXJyYXkgKG5hdGl2ZWludClcbiAgICBpZiAobnVtX2VsdHMgPiA2NCkgbnVtX2VsdHMgPSA2NDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bV9lbHRzOyBpKyspIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCBiYS5kYXRhW2ldKTtcbiAgICBicmVhaztcbiAgY2FzZSA3OiAgLy8gSW50MzJBcnJheSAoaW50NjQpXG4gICAgaWYgKG51bV9lbHRzID4gMzIpIG51bV9lbHRzID0gMzI7XG4gICAgbnVtX2VsdHMgKj0gMlxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2VsdHM7IGkrKykge1xuICAgICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIGJhLmRhdGFbaV0pO1xuICAgIH1cbiAgICBicmVhaztcbiAgY2FzZSAxMDogLy8gRmxvYXQzMkFycmF5IChjb21wbGV4MzIpXG4gICAgbnVtX2VsdHMgKj0yOyAvKiBmYWxsdGhyb3VnaCAqL1xuICBjYXNlIDA6ICAvLyBGbG9hdDMyQXJyYXlcbiAgICBpZiAobnVtX2VsdHMgPiA2NCkgbnVtX2VsdHMgPSA2NDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bV9lbHRzOyBpKyspIGggPSBjYW1sX2hhc2hfbWl4X2Zsb2F0KGgsIGJhLmRhdGFbaV0pO1xuICAgIGJyZWFrO1xuICBjYXNlIDExOiAvLyBGbG9hdDY0QXJyYXkgKGNvbXBsZXg2NClcbiAgICBudW1fZWx0cyAqPTI7IC8qIGZhbGx0aHJvdWdoICovXG4gIGNhc2UgMTogIC8vIEZsb2F0NjRBcnJheVxuICAgIGlmIChudW1fZWx0cyA+IDMyKSBudW1fZWx0cyA9IDMyO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtX2VsdHM7IGkrKykgaCA9IGNhbWxfaGFzaF9taXhfZmxvYXQoaCwgYmEuZGF0YVtpXSk7XG4gICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIGg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmFfdG9fdHlwZWRfYXJyYXkgbXV0YWJsZVxuZnVuY3Rpb24gY2FtbF9iYV90b190eXBlZF9hcnJheShiYSl7XG4gIHJldHVybiBiYS5kYXRhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JhX2tpbmRfb2ZfdHlwZWRfYXJyYXkgbXV0YWJsZVxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX2JhX2tpbmRfb2ZfdHlwZWRfYXJyYXkodGEpe1xuICB2YXIgZyA9IGpvb19nbG9iYWxfb2JqZWN0O1xuICB2YXIga2luZDtcbiAgaWYgKHRhIGluc3RhbmNlb2YgZy5GbG9hdDMyQXJyYXkpIGtpbmQgPSAwO1xuICBlbHNlIGlmICh0YSBpbnN0YW5jZW9mIGcuRmxvYXQ2NEFycmF5KSBraW5kID0gMTtcbiAgZWxzZSBpZiAodGEgaW5zdGFuY2VvZiBnLkludDhBcnJheSkga2luZCA9IDI7XG4gIGVsc2UgaWYgKHRhIGluc3RhbmNlb2YgZy5VaW50OEFycmF5KSBraW5kID0gMztcbiAgZWxzZSBpZiAodGEgaW5zdGFuY2VvZiBnLkludDE2QXJyYXkpIGtpbmQgPSA0O1xuICBlbHNlIGlmICh0YSBpbnN0YW5jZW9mIGcuVWludDE2QXJyYXkpIGtpbmQgPSA1O1xuICBlbHNlIGlmICh0YSBpbnN0YW5jZW9mIGcuSW50MzJBcnJheSkga2luZCA9IDY7XG4gIGVsc2UgaWYgKHRhIGluc3RhbmNlb2YgZy5VaW50MzJBcnJheSkga2luZCA9IDY7XG4gIGVsc2UgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY2FtbF9iYV9raW5kX29mX3R5cGVkX2FycmF5OiB1bnN1cHBvcnRlZCBraW5kXCIpO1xuICByZXR1cm4ga2luZDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iYV9mcm9tX3R5cGVkX2FycmF5IG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfYmFfa2luZF9vZl90eXBlZF9hcnJheVxuLy9SZXF1aXJlczogY2FtbF9iYV9jcmVhdGVfdW5zYWZlXG5mdW5jdGlvbiBjYW1sX2JhX2Zyb21fdHlwZWRfYXJyYXkodGEpe1xuICB2YXIga2luZCA9IGNhbWxfYmFfa2luZF9vZl90eXBlZF9hcnJheSh0YSk7XG4gIHJldHVybiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoa2luZCwgMCwgW3RhLmxlbmd0aF0sIHRhKTtcbn1cbiIsIi8vIEpzX29mX29jYW1sIGxpYnJhcnlcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vLyBDb3B5cmlnaHQgKEMpIDIwMTAgSsOpcsO0bWUgVm91aWxsb25cbi8vIExhYm9yYXRvaXJlIFBQUyAtIENOUlMgVW5pdmVyc2l0w6kgUGFyaXMgRGlkZXJvdFxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8vLy8vLy8vLy8vLyBKc2xpYlxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3B1cmVfZXhwciBjb25zdFxuZnVuY3Rpb24gY2FtbF9qc19wdXJlX2V4cHIgKGYpIHsgcmV0dXJuIGYoKTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3NldCAobXV0YWJsZSwgY29uc3QsIGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc19zZXQobyxmLHYpIHsgb1tmXT12O3JldHVybiAwfVxuLy9Qcm92aWRlczogY2FtbF9qc19nZXQgbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc19nZXQobyxmKSB7IHJldHVybiBvW2ZdOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2RlbGV0ZSAobXV0YWJsZSwgY29uc3QpXG5mdW5jdGlvbiBjYW1sX2pzX2RlbGV0ZShvLGYpIHsgZGVsZXRlIG9bZl07IHJldHVybiAwfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2luc3RhbmNlb2YgKGNvbnN0LCBjb25zdClcbmZ1bmN0aW9uIGNhbWxfanNfaW5zdGFuY2VvZihvLGMpIHsgcmV0dXJuIG8gaW5zdGFuY2VvZiBjOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfdHlwZW9mIChjb25zdClcbmZ1bmN0aW9uIGNhbWxfanNfdHlwZW9mKG8pIHsgcmV0dXJuIHR5cGVvZiBvOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfb25faWUgY29uc3RcbmZ1bmN0aW9uIGNhbWxfanNfb25faWUgKCkge1xuICB2YXIgdWEgPVxuICAgICAgam9vX2dsb2JhbF9vYmplY3QubmF2aWdhdG9yP2pvb19nbG9iYWxfb2JqZWN0Lm5hdmlnYXRvci51c2VyQWdlbnQ6XCJcIjtcbiAgcmV0dXJuIHVhLmluZGV4T2YoXCJNU0lFXCIpICE9IC0xICYmIHVhLmluZGV4T2YoXCJPcGVyYVwiKSAhPSAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2h0bWxfZXNjYXBlIGNvbnN0IChjb25zdClcbnZhciBjYW1sX2pzX3JlZ2V4cHMgPSB7IGFtcDovJi9nLCBsdDovPC9nLCBxdW90Oi9cXFwiL2csIGFsbDovWyY8XFxcIl0vIH07XG5mdW5jdGlvbiBjYW1sX2pzX2h0bWxfZXNjYXBlIChzKSB7XG4gIGlmICghY2FtbF9qc19yZWdleHBzLmFsbC50ZXN0KHMpKSByZXR1cm4gcztcbiAgcmV0dXJuIHMucmVwbGFjZShjYW1sX2pzX3JlZ2V4cHMuYW1wLCBcIiZhbXA7XCIpXG4gICAgLnJlcGxhY2UoY2FtbF9qc19yZWdleHBzLmx0LCBcIiZsdDtcIilcbiAgICAucmVwbGFjZShjYW1sX2pzX3JlZ2V4cHMucXVvdCwgXCImcXVvdDtcIik7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfaHRtbF9lbnRpdGllc1xuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aFxuZnVuY3Rpb24gY2FtbF9qc19odG1sX2VudGl0aWVzKHMpIHtcbiAgdmFyIGVudGl0eSA9IC9eJiM/WzAtOWEtekEtWl0rOyQvXG4gIGlmKHMubWF0Y2goZW50aXR5KSlcbiAge1xuICAgIHZhciBzdHIsIHRlbXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwJyk7XG4gICAgdGVtcC5pbm5lckhUTUw9IHM7XG4gICAgc3RyPSB0ZW1wLnRleHRDb250ZW50IHx8IHRlbXAuaW5uZXJUZXh0O1xuICAgIHRlbXA9bnVsbDtcbiAgICByZXR1cm4gc3RyO1xuICB9XG4gIGVsc2Uge1xuICAgIGNhbWxfZmFpbHdpdGgoXCJJbnZhbGlkIGVudGl0eSBcIiArIHMpO1xuICB9XG59XG5cbi8vLy8vLy8vLy8vIERlYnVnZ2luZyBjb25zb2xlXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2dldF9jb25zb2xlIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2pzX2dldF9jb25zb2xlICgpIHtcbiAgdmFyIGMgPSBqb29fZ2xvYmFsX29iamVjdC5jb25zb2xlP2pvb19nbG9iYWxfb2JqZWN0LmNvbnNvbGU6e307XG4gIHZhciBtID0gW1wibG9nXCIsIFwiZGVidWdcIiwgXCJpbmZvXCIsIFwid2FyblwiLCBcImVycm9yXCIsIFwiYXNzZXJ0XCIsIFwiZGlyXCIsIFwiZGlyeG1sXCIsXG4gICAgICAgICAgIFwidHJhY2VcIiwgXCJncm91cFwiLCBcImdyb3VwQ29sbGFwc2VkXCIsIFwiZ3JvdXBFbmRcIiwgXCJ0aW1lXCIsIFwidGltZUVuZFwiXTtcbiAgZnVuY3Rpb24gZiAoKSB7fVxuICBmb3IgKHZhciBpID0gMDsgaSA8IG0ubGVuZ3RoOyBpKyspIGlmICghY1ttW2ldXSkgY1ttW2ldXT1mO1xuICByZXR1cm4gYztcbn1cblxuLy9Qcm92aWRlczpjYW1sX3RyYW1wb2xpbmVcbmZ1bmN0aW9uIGNhbWxfdHJhbXBvbGluZShyZXMpIHtcbiAgdmFyIGMgPSAxO1xuICB3aGlsZShyZXMgJiYgcmVzLmpvb190cmFtcCl7XG4gICAgcmVzID0gcmVzLmpvb190cmFtcC5hcHBseShudWxsLCByZXMuam9vX2FyZ3MpO1xuICAgIGMrKztcbiAgfVxuICByZXR1cm4gcmVzO1xufVxuXG4vL1Byb3ZpZGVzOmNhbWxfdHJhbXBvbGluZV9yZXR1cm5cbmZ1bmN0aW9uIGNhbWxfdHJhbXBvbGluZV9yZXR1cm4oZixhcmdzKSB7XG4gIHJldHVybiB7am9vX3RyYW1wOmYsam9vX2FyZ3M6YXJnc307XG59XG5cbi8vUHJvdmlkZXM6IGpzX3ByaW50X3N0ZG91dCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX3V0ZjE2X29mX3V0ZjhcbmZ1bmN0aW9uIGpzX3ByaW50X3N0ZG91dChzKSB7XG4gIHZhciBzID0gY2FtbF91dGYxNl9vZl91dGY4KHMpO1xuICB2YXIgZyA9IGpvb19nbG9iYWxfb2JqZWN0O1xuICBpZiAoZy5wcm9jZXNzICYmIGcucHJvY2Vzcy5zdGRvdXQgJiYgZy5wcm9jZXNzLnN0ZG91dC53cml0ZSkge1xuICAgIGcucHJvY2Vzcy5zdGRvdXQud3JpdGUocylcbiAgfSBlbHNlIHtcbiAgICAvLyBEbyBub3Qgb3V0cHV0IHRoZSBsYXN0IFxcbiBpZiBwcmVzZW50XG4gICAgLy8gYXMgY29uc29sZSBsb2dnaW5nIGRpc3BsYXkgYSBuZXdsaW5lIGF0IHRoZSBlbmRcbiAgICBpZihzLmNoYXJDb2RlQXQocy5sZW5ndGggLSAxKSA9PSAxMClcbiAgICAgIHMgPSBzLnN1YnN0cigwLHMubGVuZ3RoIC0gMSApO1xuICAgIHZhciB2ID0gZy5jb25zb2xlO1xuICAgIHYgICYmIHYubG9nICYmIHYubG9nKHMpO1xuICB9XG59XG4vL1Byb3ZpZGVzOiBqc19wcmludF9zdGRlcnIgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF91dGYxNl9vZl91dGY4XG5mdW5jdGlvbiBqc19wcmludF9zdGRlcnIocykge1xuICB2YXIgcyA9IGNhbWxfdXRmMTZfb2ZfdXRmOChzKTtcbiAgdmFyIGcgPSBqb29fZ2xvYmFsX29iamVjdDtcbiAgaWYgKGcucHJvY2VzcyAmJiBnLnByb2Nlc3Muc3Rkb3V0ICYmIGcucHJvY2Vzcy5zdGRvdXQud3JpdGUpIHtcbiAgICBnLnByb2Nlc3Muc3RkZXJyLndyaXRlKHMpXG4gIH0gZWxzZSB7XG4gICAgLy8gRG8gbm90IG91dHB1dCB0aGUgbGFzdCBcXG4gaWYgcHJlc2VudFxuICAgIC8vIGFzIGNvbnNvbGUgbG9nZ2luZyBkaXNwbGF5IGEgbmV3bGluZSBhdCB0aGUgZW5kXG4gICAgaWYocy5jaGFyQ29kZUF0KHMubGVuZ3RoIC0gMSkgPT0gMTApXG4gICAgICBzID0gcy5zdWJzdHIoMCxzLmxlbmd0aCAtIDEgKTtcbiAgICB2YXIgdiA9IGcuY29uc29sZTtcbiAgICB2ICYmIHYuZXJyb3IgJiYgdi5lcnJvcihzKTtcbiAgfVxufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfaXNfanNcbmZ1bmN0aW9uIGNhbWxfaXNfanMoKSB7XG4gIHJldHVybiAxO1xufVxuXG5cblxuLy9Qcm92aWRlczogY2FtbF93cmFwX2V4Y2VwdGlvbiBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2dsb2JhbF9kYXRhLGNhbWxfc3RyaW5nX29mX2pzc3RyaW5nLGNhbWxfbmFtZWRfdmFsdWVcbi8vUmVxdWlyZXM6IGNhbWxfcmV0dXJuX2V4bl9jb25zdGFudFxuZnVuY3Rpb24gY2FtbF93cmFwX2V4Y2VwdGlvbihlKSB7XG4gIGlmKGUgaW5zdGFuY2VvZiBBcnJheSkgcmV0dXJuIGU7XG4gIC8vU3RhY2tfb3ZlcmZsb3c6IGNocm9tZSwgc2FmYXJpXG4gIGlmKGpvb19nbG9iYWxfb2JqZWN0LlJhbmdlRXJyb3JcbiAgICAgJiYgZSBpbnN0YW5jZW9mIGpvb19nbG9iYWxfb2JqZWN0LlJhbmdlRXJyb3JcbiAgICAgJiYgZS5tZXNzYWdlXG4gICAgICYmIGUubWVzc2FnZS5tYXRjaCgvbWF4aW11bSBjYWxsIHN0YWNrL2kpKVxuICAgIHJldHVybiBjYW1sX3JldHVybl9leG5fY29uc3RhbnQoY2FtbF9nbG9iYWxfZGF0YS5TdGFja19vdmVyZmxvdyk7XG4gIC8vU3RhY2tfb3ZlcmZsb3c6IGZpcmVmb3hcbiAgaWYoam9vX2dsb2JhbF9vYmplY3QuSW50ZXJuYWxFcnJvclxuICAgICAmJiBlIGluc3RhbmNlb2Ygam9vX2dsb2JhbF9vYmplY3QuSW50ZXJuYWxFcnJvclxuICAgICAmJiBlLm1lc3NhZ2VcbiAgICAgJiYgZS5tZXNzYWdlLm1hdGNoKC90b28gbXVjaCByZWN1cnNpb24vaSkpXG4gICAgcmV0dXJuIGNhbWxfcmV0dXJuX2V4bl9jb25zdGFudChjYW1sX2dsb2JhbF9kYXRhLlN0YWNrX292ZXJmbG93KTtcbiAgLy9XcmFwIEVycm9yIGluIEpzLkVycm9yIGV4Y2VwdGlvblxuICBpZihlIGluc3RhbmNlb2Ygam9vX2dsb2JhbF9vYmplY3QuRXJyb3IgJiYgY2FtbF9uYW1lZF92YWx1ZShcImpzRXJyb3JcIikpXG4gICAgcmV0dXJuIFswLGNhbWxfbmFtZWRfdmFsdWUoXCJqc0Vycm9yXCIpLGVdO1xuICAvL2ZhbGxiYWNrOiB3cmFwcGVkIGluIEZhaWx1cmVcbiAgcmV0dXJuIFswLGNhbWxfZ2xvYmFsX2RhdGEuRmFpbHVyZSxjYW1sX3N0cmluZ19vZl9qc3N0cmluZyAoU3RyaW5nKGUpKV07XG59XG5cbi8vIEV4cGVyaW1lbnRhbFxuLy9Qcm92aWRlczogY2FtbF9leG5fd2l0aF9qc19iYWNrdHJhY2Vcbi8vUmVxdWlyZXM6IGNhbWxfZ2xvYmFsX2RhdGFcbmZ1bmN0aW9uIGNhbWxfZXhuX3dpdGhfanNfYmFja3RyYWNlKGV4biwgZm9yY2UpIHtcbiAgLy9uZXZlciByZXJhaXNlIGZvciBjb25zdGFudCBleG5cbiAgaWYoIWV4bi5qc19lcnJvciB8fCBmb3JjZSB8fCBleG5bMF0gPT0gMjQ4KSBleG4uanNfZXJyb3IgPSBuZXcgam9vX2dsb2JhbF9vYmplY3QuRXJyb3IoXCJKcyBleGNlcHRpb24gY29udGFpbmluZyBiYWNrdHJhY2VcIik7XG4gIHJldHVybiBleG47XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZXJyb3Jfb2ZfZXhjZXB0aW9uXG5mdW5jdGlvbiBjYW1sX2pzX2Vycm9yX29mX2V4Y2VwdGlvbihleG4pIHtcbiAgaWYoZXhuLmpzX2Vycm9yKSB7IHJldHVybiBleG4uanNfZXJyb3I7IH1cbiAgcmV0dXJuIG51bGw7XG59XG4iLCIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdGl2ZSBDYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICovXG4vKiAgZW4gQXV0b21hdGlxdWUuICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkICAgICovXG4vKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHdpdGggICAgICovXG4vKiAgdGhlIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIGZpbGUgLi4vTElDRU5TRS4gICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbi8qICRJZDogcGFyc2luZy5jIDg5ODMgMjAwOC0wOC0wNiAwOTozODoyNVogeGxlcm95ICQgKi9cblxuLyogVGhlIFBEQSBhdXRvbWF0b24gZm9yIHBhcnNlcnMgZ2VuZXJhdGVkIGJ5IGNhbWx5YWNjICovXG5cbi8qIFRoZSBwdXNoZG93biBhdXRvbWF0YSAqL1xuXG4vL1Byb3ZpZGVzOiBjYW1sX3BhcnNlX2VuZ2luZVxuLy9SZXF1aXJlczogY2FtbF9sZXhfYXJyYXlcbmZ1bmN0aW9uIGNhbWxfcGFyc2VfZW5naW5lKHRhYmxlcywgZW52LCBjbWQsIGFyZylcbntcbiAgdmFyIEVSUkNPREUgPSAyNTY7XG5cbiAgLy92YXIgU1RBUlQgPSAwO1xuICAvL3ZhciBUT0tFTl9SRUFEID0gMTtcbiAgLy92YXIgU1RBQ0tTX0dST1dOXzEgPSAyO1xuICAvL3ZhciBTVEFDS1NfR1JPV05fMiA9IDM7XG4gIC8vdmFyIFNFTUFOVElDX0FDVElPTl9DT01QVVRFRCA9IDQ7XG4gIC8vdmFyIEVSUk9SX0RFVEVDVEVEID0gNTtcbiAgdmFyIGxvb3AgPSA2O1xuICB2YXIgdGVzdHNoaWZ0ID0gNztcbiAgdmFyIHNoaWZ0ID0gODtcbiAgdmFyIHNoaWZ0X3JlY292ZXIgPSA5O1xuICB2YXIgcmVkdWNlID0gMTA7XG5cbiAgdmFyIFJFQURfVE9LRU4gPSAwO1xuICB2YXIgUkFJU0VfUEFSU0VfRVJST1IgPSAxO1xuICB2YXIgR1JPV19TVEFDS1NfMSA9IDI7XG4gIHZhciBHUk9XX1NUQUNLU18yID0gMztcbiAgdmFyIENPTVBVVEVfU0VNQU5USUNfQUNUSU9OID0gNDtcbiAgdmFyIENBTExfRVJST1JfRlVOQ1RJT04gPSA1O1xuXG4gIHZhciBlbnZfc19zdGFjayA9IDE7XG4gIHZhciBlbnZfdl9zdGFjayA9IDI7XG4gIHZhciBlbnZfc3ltYl9zdGFydF9zdGFjayA9IDM7XG4gIHZhciBlbnZfc3ltYl9lbmRfc3RhY2sgPSA0O1xuICB2YXIgZW52X3N0YWNrc2l6ZSA9IDU7XG4gIHZhciBlbnZfc3RhY2tiYXNlID0gNjtcbiAgdmFyIGVudl9jdXJyX2NoYXIgPSA3O1xuICB2YXIgZW52X2x2YWwgPSA4O1xuICB2YXIgZW52X3N5bWJfc3RhcnQgPSA5O1xuICB2YXIgZW52X3N5bWJfZW5kID0gMTA7XG4gIHZhciBlbnZfYXNwID0gMTE7XG4gIHZhciBlbnZfcnVsZV9sZW4gPSAxMjtcbiAgdmFyIGVudl9ydWxlX251bWJlciA9IDEzO1xuICB2YXIgZW52X3NwID0gMTQ7XG4gIHZhciBlbnZfc3RhdGUgPSAxNTtcbiAgdmFyIGVudl9lcnJmbGFnID0gMTY7XG5cbiAgLy8gdmFyIF90YmxfYWN0aW9ucyA9IDE7XG4gIHZhciB0YmxfdHJhbnNsX2NvbnN0ID0gMjtcbiAgdmFyIHRibF90cmFuc2xfYmxvY2sgPSAzO1xuICB2YXIgdGJsX2xocyA9IDQ7XG4gIHZhciB0YmxfbGVuID0gNTtcbiAgdmFyIHRibF9kZWZyZWQgPSA2O1xuICB2YXIgdGJsX2Rnb3RvID0gNztcbiAgdmFyIHRibF9zaW5kZXggPSA4O1xuICB2YXIgdGJsX3JpbmRleCA9IDk7XG4gIHZhciB0YmxfZ2luZGV4ID0gMTA7XG4gIHZhciB0YmxfdGFibGVzaXplID0gMTE7XG4gIHZhciB0YmxfdGFibGUgPSAxMjtcbiAgdmFyIHRibF9jaGVjayA9IDEzO1xuICAvLyB2YXIgX3RibF9lcnJvcl9mdW5jdGlvbiA9IDE0O1xuICAvLyB2YXIgX3RibF9uYW1lc19jb25zdCA9IDE1O1xuICAvLyB2YXIgX3RibF9uYW1lc19ibG9jayA9IDE2O1xuXG4gIGlmICghdGFibGVzLmRnb3RvKSB7XG4gICAgdGFibGVzLmRlZnJlZCA9IGNhbWxfbGV4X2FycmF5ICh0YWJsZXNbdGJsX2RlZnJlZF0pO1xuICAgIHRhYmxlcy5zaW5kZXggPSBjYW1sX2xleF9hcnJheSAodGFibGVzW3RibF9zaW5kZXhdKTtcbiAgICB0YWJsZXMuY2hlY2sgID0gY2FtbF9sZXhfYXJyYXkgKHRhYmxlc1t0YmxfY2hlY2tdKTtcbiAgICB0YWJsZXMucmluZGV4ID0gY2FtbF9sZXhfYXJyYXkgKHRhYmxlc1t0YmxfcmluZGV4XSk7XG4gICAgdGFibGVzLnRhYmxlICA9IGNhbWxfbGV4X2FycmF5ICh0YWJsZXNbdGJsX3RhYmxlXSk7XG4gICAgdGFibGVzLmxlbiAgICA9IGNhbWxfbGV4X2FycmF5ICh0YWJsZXNbdGJsX2xlbl0pO1xuICAgIHRhYmxlcy5saHMgICAgPSBjYW1sX2xleF9hcnJheSAodGFibGVzW3RibF9saHNdKTtcbiAgICB0YWJsZXMuZ2luZGV4ID0gY2FtbF9sZXhfYXJyYXkgKHRhYmxlc1t0YmxfZ2luZGV4XSk7XG4gICAgdGFibGVzLmRnb3RvICA9IGNhbWxfbGV4X2FycmF5ICh0YWJsZXNbdGJsX2Rnb3RvXSk7XG4gIH1cblxuICB2YXIgcmVzID0gMCwgbiwgbjEsIG4yLCBzdGF0ZTE7XG5cbiAgLy8gUkVTVE9SRVxuICB2YXIgc3AgPSBlbnZbZW52X3NwXTtcbiAgdmFyIHN0YXRlID0gZW52W2Vudl9zdGF0ZV07XG4gIHZhciBlcnJmbGFnID0gZW52W2Vudl9lcnJmbGFnXTtcblxuICBleGl0OmZvciAoOzspIHtcbiAgICBzd2l0Y2goY21kKSB7XG4gICAgY2FzZSAwOi8vU1RBUlQ6XG4gICAgICBzdGF0ZSA9IDA7XG4gICAgICBlcnJmbGFnID0gMDtcbiAgICAgIC8vIEZhbGwgdGhyb3VnaFxuXG4gICAgY2FzZSA2Oi8vbG9vcDpcbiAgICAgIG4gPSB0YWJsZXMuZGVmcmVkW3N0YXRlXTtcbiAgICAgIGlmIChuICE9IDApIHsgY21kID0gcmVkdWNlOyBicmVhazsgfVxuICAgICAgaWYgKGVudltlbnZfY3Vycl9jaGFyXSA+PSAwKSB7IGNtZCA9IHRlc3RzaGlmdDsgYnJlYWs7IH1cbiAgICAgIHJlcyA9IFJFQURfVE9LRU47XG4gICAgICBicmVhayBleGl0O1xuICAgICAgLyogVGhlIE1MIGNvZGUgY2FsbHMgdGhlIGxleGVyIGFuZCB1cGRhdGVzICovXG4gICAgICAvKiBzeW1iX3N0YXJ0IGFuZCBzeW1iX2VuZCAqL1xuICAgIGNhc2UgMTovL1RPS0VOX1JFQUQ6XG4gICAgICBpZiAoYXJnIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgZW52W2Vudl9jdXJyX2NoYXJdID0gdGFibGVzW3RibF90cmFuc2xfYmxvY2tdW2FyZ1swXSArIDFdO1xuICAgICAgICBlbnZbZW52X2x2YWxdID0gYXJnWzFdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZW52W2Vudl9jdXJyX2NoYXJdID0gdGFibGVzW3RibF90cmFuc2xfY29uc3RdW2FyZyArIDFdO1xuICAgICAgICBlbnZbZW52X2x2YWxdID0gMDtcbiAgICAgIH1cbiAgICAgIC8vIEZhbGwgdGhyb3VnaFxuXG4gICAgY2FzZSA3Oi8vdGVzdHNoaWZ0OlxuICAgICAgbjEgPSB0YWJsZXMuc2luZGV4W3N0YXRlXTtcbiAgICAgIG4yID0gbjEgKyBlbnZbZW52X2N1cnJfY2hhcl07XG4gICAgICBpZiAobjEgIT0gMCAmJiBuMiA+PSAwICYmIG4yIDw9IHRhYmxlc1t0YmxfdGFibGVzaXplXSAmJlxuICAgICAgICAgIHRhYmxlcy5jaGVja1tuMl0gPT0gZW52W2Vudl9jdXJyX2NoYXJdKSB7XG4gICAgICAgIGNtZCA9IHNoaWZ0OyBicmVhaztcbiAgICAgIH1cbiAgICAgIG4xID0gdGFibGVzLnJpbmRleFtzdGF0ZV07XG4gICAgICBuMiA9IG4xICsgZW52W2Vudl9jdXJyX2NoYXJdO1xuICAgICAgaWYgKG4xICE9IDAgJiYgbjIgPj0gMCAmJiBuMiA8PSB0YWJsZXNbdGJsX3RhYmxlc2l6ZV0gJiZcbiAgICAgICAgICB0YWJsZXMuY2hlY2tbbjJdID09IGVudltlbnZfY3Vycl9jaGFyXSkge1xuICAgICAgICBuID0gdGFibGVzLnRhYmxlW24yXTtcbiAgICAgICAgY21kID0gcmVkdWNlOyBicmVhaztcbiAgICAgIH1cbiAgICAgIGlmIChlcnJmbGFnIDw9IDApIHtcbiAgICAgICAgcmVzID0gQ0FMTF9FUlJPUl9GVU5DVElPTjtcbiAgICAgICAgYnJlYWsgZXhpdDtcbiAgICAgIH1cbiAgICAgIC8vIEZhbGwgdGhyb3VnaFxuICAgICAgLyogVGhlIE1MIGNvZGUgY2FsbHMgdGhlIGVycm9yIGZ1bmN0aW9uICovXG4gICAgY2FzZSA1Oi8vRVJST1JfREVURUNURUQ6XG4gICAgICBpZiAoZXJyZmxhZyA8IDMpIHtcbiAgICAgICAgZXJyZmxhZyA9IDM7XG4gICAgICAgIGZvciAoOzspIHtcbiAgICAgICAgICBzdGF0ZTEgPSBlbnZbZW52X3Nfc3RhY2tdW3NwICsgMV07XG4gICAgICAgICAgbjEgPSB0YWJsZXMuc2luZGV4W3N0YXRlMV07XG4gICAgICAgICAgbjIgPSBuMSArIEVSUkNPREU7XG4gICAgICAgICAgaWYgKG4xICE9IDAgJiYgbjIgPj0gMCAmJiBuMiA8PSB0YWJsZXNbdGJsX3RhYmxlc2l6ZV0gJiZcbiAgICAgICAgICAgICAgdGFibGVzLmNoZWNrW24yXSA9PSBFUlJDT0RFKSB7XG4gICAgICAgICAgICBjbWQgPSBzaGlmdF9yZWNvdmVyOyBicmVhaztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHNwIDw9IGVudltlbnZfc3RhY2tiYXNlXSkgcmV0dXJuIFJBSVNFX1BBUlNFX0VSUk9SO1xuICAgICAgICAgICAgLyogVGhlIE1MIGNvZGUgcmFpc2VzIFBhcnNlX2Vycm9yICovXG4gICAgICAgICAgICBzcC0tO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGVudltlbnZfY3Vycl9jaGFyXSA9PSAwKSByZXR1cm4gUkFJU0VfUEFSU0VfRVJST1I7XG4gICAgICAgIC8qIFRoZSBNTCBjb2RlIHJhaXNlcyBQYXJzZV9lcnJvciAqL1xuICAgICAgICBlbnZbZW52X2N1cnJfY2hhcl0gPSAtMTtcbiAgICAgICAgY21kID0gbG9vcDsgYnJlYWs7XG4gICAgICB9XG4gICAgICAvLyBGYWxsIHRocm91Z2hcbiAgICBjYXNlIDg6Ly9zaGlmdDpcbiAgICAgIGVudltlbnZfY3Vycl9jaGFyXSA9IC0xO1xuICAgICAgaWYgKGVycmZsYWcgPiAwKSBlcnJmbGFnLS07XG4gICAgICAvLyBGYWxsIHRocm91Z2hcbiAgICBjYXNlIDk6Ly9zaGlmdF9yZWNvdmVyOlxuICAgICAgc3RhdGUgPSB0YWJsZXMudGFibGVbbjJdO1xuICAgICAgc3ArKztcbiAgICAgIGlmIChzcCA+PSBlbnZbZW52X3N0YWNrc2l6ZV0pIHtcbiAgICAgICAgcmVzID0gR1JPV19TVEFDS1NfMTtcbiAgICAgICAgYnJlYWsgZXhpdDtcbiAgICAgIH1cbiAgICAgIC8vIEZhbGwgdGhyb3VnaFxuICAgICAgLyogVGhlIE1MIGNvZGUgcmVzaXplcyB0aGUgc3RhY2tzICovXG4gICAgY2FzZSAyOi8vU1RBQ0tTX0dST1dOXzE6XG4gICAgICBlbnZbZW52X3Nfc3RhY2tdW3NwICsgMV0gPSBzdGF0ZTtcbiAgICAgIGVudltlbnZfdl9zdGFja11bc3AgKyAxXSA9IGVudltlbnZfbHZhbF07XG4gICAgICBlbnZbZW52X3N5bWJfc3RhcnRfc3RhY2tdW3NwICsgMV0gPSBlbnZbZW52X3N5bWJfc3RhcnRdO1xuICAgICAgZW52W2Vudl9zeW1iX2VuZF9zdGFja11bc3AgKyAxXSA9IGVudltlbnZfc3ltYl9lbmRdO1xuICAgICAgY21kID0gbG9vcDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAxMDovL3JlZHVjZTpcbiAgICAgIHZhciBtID0gdGFibGVzLmxlbltuXTtcbiAgICAgIGVudltlbnZfYXNwXSA9IHNwO1xuICAgICAgZW52W2Vudl9ydWxlX251bWJlcl0gPSBuO1xuICAgICAgZW52W2Vudl9ydWxlX2xlbl0gPSBtO1xuICAgICAgc3AgPSBzcCAtIG0gKyAxO1xuICAgICAgbSA9IHRhYmxlcy5saHNbbl07XG4gICAgICBzdGF0ZTEgPSBlbnZbZW52X3Nfc3RhY2tdW3NwXTtcbiAgICAgIG4xID0gdGFibGVzLmdpbmRleFttXTtcbiAgICAgIG4yID0gbjEgKyBzdGF0ZTE7XG4gICAgICBpZiAobjEgIT0gMCAmJiBuMiA+PSAwICYmIG4yIDw9IHRhYmxlc1t0YmxfdGFibGVzaXplXSAmJlxuICAgICAgICAgIHRhYmxlcy5jaGVja1tuMl0gPT0gc3RhdGUxKVxuICAgICAgICBzdGF0ZSA9IHRhYmxlcy50YWJsZVtuMl07XG4gICAgICBlbHNlXG4gICAgICAgIHN0YXRlID0gdGFibGVzLmRnb3RvW21dO1xuICAgICAgaWYgKHNwID49IGVudltlbnZfc3RhY2tzaXplXSkge1xuICAgICAgICByZXMgPSBHUk9XX1NUQUNLU18yO1xuICAgICAgICBicmVhayBleGl0O1xuICAgICAgfVxuICAgICAgLy8gRmFsbCB0aHJvdWdoXG4gICAgICAvKiBUaGUgTUwgY29kZSByZXNpemVzIHRoZSBzdGFja3MgKi9cbiAgICBjYXNlIDM6Ly9TVEFDS1NfR1JPV05fMjpcbiAgICAgIHJlcyA9IENPTVBVVEVfU0VNQU5USUNfQUNUSU9OO1xuICAgICAgYnJlYWsgZXhpdDtcbiAgICAgIC8qIFRoZSBNTCBjb2RlIGNhbGxzIHRoZSBzZW1hbnRpYyBhY3Rpb24gKi9cbiAgICBjYXNlIDQ6Ly9TRU1BTlRJQ19BQ1RJT05fQ09NUFVURUQ6XG4gICAgICBlbnZbZW52X3Nfc3RhY2tdW3NwICsgMV0gPSBzdGF0ZTtcbiAgICAgIGVudltlbnZfdl9zdGFja11bc3AgKyAxXSA9IGFyZztcbiAgICAgIHZhciBhc3AgPSBlbnZbZW52X2FzcF07XG4gICAgICBlbnZbZW52X3N5bWJfZW5kX3N0YWNrXVtzcCArIDFdID0gZW52W2Vudl9zeW1iX2VuZF9zdGFja11bYXNwICsgMV07XG4gICAgICBpZiAoc3AgPiBhc3ApIHtcbiAgICAgICAgLyogVGhpcyBpcyBhbiBlcHNpbG9uIHByb2R1Y3Rpb24uIFRha2Ugc3ltYl9zdGFydCBlcXVhbCB0byBzeW1iX2VuZC4gKi9cbiAgICAgICAgZW52W2Vudl9zeW1iX3N0YXJ0X3N0YWNrXVtzcCArIDFdID0gZW52W2Vudl9zeW1iX2VuZF9zdGFja11bYXNwICsgMV07XG4gICAgICB9XG4gICAgICBjbWQgPSBsb29wOyBicmVhaztcbiAgICAgIC8qIFNob3VsZCBub3QgaGFwcGVuICovXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBSQUlTRV9QQVJTRV9FUlJPUjtcbiAgICB9XG4gIH1cbiAgLy8gU0FWRVxuICBlbnZbZW52X3NwXSA9IHNwO1xuICBlbnZbZW52X3N0YXRlXSA9IHN0YXRlO1xuICBlbnZbZW52X2VycmZsYWddID0gZXJyZmxhZztcbiAgcmV0dXJuIHJlcztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9zZXRfcGFyc2VyX3RyYWNlIGNvbnN0XG4vL0R1bW15IGZ1bmN0aW9uIVxuZnVuY3Rpb24gY2FtbF9zZXRfcGFyc2VyX3RyYWNlKCkgeyByZXR1cm4gMDsgfVxuIiwiLy8gSnNfb2Zfb2NhbWwgbGlicmFyeVxuLy8gaHR0cDovL3d3dy5vY3NpZ2VuLm9yZy9qc19vZl9vY2FtbC9cbi8vIENvcHlyaWdodCAoQykgMjAxMCBKw6lyw7RtZSBWb3VpbGxvblxuLy8gTGFib3JhdG9pcmUgUFBTIC0gQ05SUyBVbml2ZXJzaXTDqSBQYXJpcyBEaWRlcm90XG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vLy8vLy8vLy8vLy8vIEpzbGliOiBjb2RlIHNwZWNpZmljIHRvIEpzX29mX29jYW1sXG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZnJvbV9ib29sIGNvbnN0IChjb25zdClcbmZ1bmN0aW9uIGNhbWxfanNfZnJvbV9ib29sKHgpIHsgcmV0dXJuICEheDsgfVxuLy9Qcm92aWRlczogY2FtbF9qc190b19ib29sIGNvbnN0IChjb25zdClcbmZ1bmN0aW9uIGNhbWxfanNfdG9fYm9vbCh4KSB7IHJldHVybiAreDsgfVxuLy9Qcm92aWRlczogY2FtbF9qc19mcm9tX2Zsb2F0IGNvbnN0IChjb25zdClcbmZ1bmN0aW9uIGNhbWxfanNfZnJvbV9mbG9hdCh4KSB7IHJldHVybiB4OyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3RvX2Zsb2F0IGNvbnN0IChjb25zdClcbmZ1bmN0aW9uIGNhbWxfanNfdG9fZmxvYXQoeCkgeyByZXR1cm4geDsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2Zyb21fYXJyYXkgbXV0YWJsZSAoc2hhbGxvdylcbmZ1bmN0aW9uIGNhbWxfanNfZnJvbV9hcnJheShhKSB7XG4gIHJldHVybiBhLnNsaWNlKDEpO1xufVxuLy9Qcm92aWRlczogY2FtbF9qc190b19hcnJheSBtdXRhYmxlIChzaGFsbG93KVxuZnVuY3Rpb24gY2FtbF9qc190b19hcnJheShhKSB7XG4gIHZhciBsZW4gPSBhLmxlbmd0aDtcbiAgdmFyIGIgPSBuZXcgQXJyYXkobGVuKzEpO1xuICBiWzBdID0gMDtcbiAgZm9yKHZhciBpPTA7aTxsZW47aSsrKSBiW2krMV0gPSBhW2ldO1xuICByZXR1cm4gYjtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9saXN0X29mX2pzX2FycmF5IGNvbnN0IChjb25zdClcbmZ1bmN0aW9uIGNhbWxfbGlzdF9vZl9qc19hcnJheShhKXtcbiAgdmFyIGwgPSAwO1xuICBmb3IodmFyIGk9YS5sZW5ndGggLSAxOyBpPj0wOyBpLS0pe1xuICAgIHZhciBlID0gYVtpXTtcbiAgICBsID0gWzAsZSxsXTtcbiAgfVxuICByZXR1cm4gbFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2xpc3RfdG9fanNfYXJyYXkgY29uc3QgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9saXN0X3RvX2pzX2FycmF5KGwpe1xuICB2YXIgYSA9IFtdO1xuICBmb3IoOyBsICE9PSAwOyBsID0gbFsyXSkge1xuICAgIGEucHVzaChsWzFdKTtcbiAgfVxuICByZXR1cm4gYTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc192YXIgbXV0YWJsZSAoY29uc3QpXG4vL1JlcXVpcmVzOiBqc19wcmludF9zdGRlcnJcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzX3Zhcih4KSB7XG4gIHZhciB4ID0gY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcoeCk7XG4gIC8vQ2hlY2tzIHRoYXQgeCBoYXMgdGhlIGZvcm0gaWRlbnRbLmlkZW50XSpcbiAgaWYoIXgubWF0Y2goL15bYS16QS1aXyRdW2EtekEtWl8kMC05XSooXFwuW2EtekEtWl8kXVthLXpBLVpfJDAtOV0qKSokLykpe1xuICAgIGpzX3ByaW50X3N0ZGVycihcImNhbWxfanNfdmFyOiBcXFwiXCIgKyB4ICsgXCJcXFwiIGlzIG5vdCBhIHZhbGlkIEphdmFTY3JpcHQgdmFyaWFibGUuIGNvbnRpbnVpbmcgLi5cIik7XG4gICAgLy9qb29fZ2xvYmFsX29iamVjdC5jb25zb2xlLmVycm9yKFwiSnMuVW5zYWZlLmV2YWxfc3RyaW5nXCIpXG4gIH1cbiAgcmV0dXJuIGV2YWwoeCk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2NhbGwgKGNvbnN0LCBtdXRhYmxlLCBzaGFsbG93KVxuLy9SZXF1aXJlczogY2FtbF9qc19mcm9tX2FycmF5XG5mdW5jdGlvbiBjYW1sX2pzX2NhbGwoZiwgbywgYXJncykgeyByZXR1cm4gZi5hcHBseShvLCBjYW1sX2pzX2Zyb21fYXJyYXkoYXJncykpOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2Z1bl9jYWxsIChjb25zdCwgc2hhbGxvdylcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuZnVuY3Rpb24gY2FtbF9qc19mdW5fY2FsbChmLCBhKSB7XG4gIHN3aXRjaCAoYS5sZW5ndGgpIHtcbiAgY2FzZSAxOiByZXR1cm4gZigpO1xuICBjYXNlIDI6IHJldHVybiBmIChhWzFdKTtcbiAgY2FzZSAzOiByZXR1cm4gZiAoYVsxXSxhWzJdKTtcbiAgY2FzZSA0OiByZXR1cm4gZiAoYVsxXSxhWzJdLGFbM10pO1xuICBjYXNlIDU6IHJldHVybiBmIChhWzFdLGFbMl0sYVszXSxhWzRdKTtcbiAgY2FzZSA2OiByZXR1cm4gZiAoYVsxXSxhWzJdLGFbM10sYVs0XSxhWzVdKTtcbiAgY2FzZSA3OiByZXR1cm4gZiAoYVsxXSxhWzJdLGFbM10sYVs0XSxhWzVdLGFbNl0pO1xuICBjYXNlIDg6IHJldHVybiBmIChhWzFdLGFbMl0sYVszXSxhWzRdLGFbNV0sYVs2XSxhWzddKTtcbiAgfVxuICByZXR1cm4gZi5hcHBseShudWxsLCBjYW1sX2pzX2Zyb21fYXJyYXkoYSkpO1xufVxuLy9Qcm92aWRlczogY2FtbF9qc19tZXRoX2NhbGwgKG11dGFibGUsIGNvbnN0LCBzaGFsbG93KVxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuZnVuY3Rpb24gY2FtbF9qc19tZXRoX2NhbGwobywgZiwgYXJncykge1xuICByZXR1cm4gb1tjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhmKV0uYXBwbHkobywgY2FtbF9qc19mcm9tX2FycmF5KGFyZ3MpKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfbmV3IChjb25zdCwgc2hhbGxvdylcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuZnVuY3Rpb24gY2FtbF9qc19uZXcoYywgYSkge1xuICBzd2l0Y2ggKGEubGVuZ3RoKSB7XG4gIGNhc2UgMTogcmV0dXJuIG5ldyBjO1xuICBjYXNlIDI6IHJldHVybiBuZXcgYyAoYVsxXSk7XG4gIGNhc2UgMzogcmV0dXJuIG5ldyBjIChhWzFdLGFbMl0pO1xuICBjYXNlIDQ6IHJldHVybiBuZXcgYyAoYVsxXSxhWzJdLGFbM10pO1xuICBjYXNlIDU6IHJldHVybiBuZXcgYyAoYVsxXSxhWzJdLGFbM10sYVs0XSk7XG4gIGNhc2UgNjogcmV0dXJuIG5ldyBjIChhWzFdLGFbMl0sYVszXSxhWzRdLGFbNV0pO1xuICBjYXNlIDc6IHJldHVybiBuZXcgYyAoYVsxXSxhWzJdLGFbM10sYVs0XSxhWzVdLGFbNl0pO1xuICBjYXNlIDg6IHJldHVybiBuZXcgYyAoYVsxXSxhWzJdLGFbM10sYVs0XSxhWzVdLGFbNl0sYVs3XSk7XG4gIH1cbiAgZnVuY3Rpb24gRigpIHsgcmV0dXJuIGMuYXBwbHkodGhpcywgY2FtbF9qc19mcm9tX2FycmF5KGEpKTsgfVxuICBGLnByb3RvdHlwZSA9IGMucHJvdG90eXBlO1xuICByZXR1cm4gbmV3IEY7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX29qc19uZXdfYXJyIChjb25zdCwgc2hhbGxvdylcbi8vUmVxdWlyZXM6IGNhbWxfanNfZnJvbV9hcnJheVxuZnVuY3Rpb24gY2FtbF9vanNfbmV3X2FycihjLCBhKSB7XG4gIHN3aXRjaCAoYS5sZW5ndGgpIHtcbiAgY2FzZSAwOiByZXR1cm4gbmV3IGM7XG4gIGNhc2UgMTogcmV0dXJuIG5ldyBjIChhWzBdKTtcbiAgY2FzZSAyOiByZXR1cm4gbmV3IGMgKGFbMF0sYVsxXSk7XG4gIGNhc2UgMzogcmV0dXJuIG5ldyBjIChhWzBdLGFbMV0sYVsyXSk7XG4gIGNhc2UgNDogcmV0dXJuIG5ldyBjIChhWzBdLGFbMV0sYVsyXSxhWzNdKTtcbiAgY2FzZSA1OiByZXR1cm4gbmV3IGMgKGFbMF0sYVsxXSxhWzJdLGFbM10sYVs0XSk7XG4gIGNhc2UgNjogcmV0dXJuIG5ldyBjIChhWzBdLGFbMV0sYVsyXSxhWzNdLGFbNF0sYVs1XSk7XG4gIGNhc2UgNzogcmV0dXJuIG5ldyBjIChhWzBdLGFbMV0sYVsyXSxhWzNdLGFbNF0sYVs1XSxhWzZdKTtcbiAgfVxuICBmdW5jdGlvbiBGKCkgeyByZXR1cm4gYy5hcHBseSh0aGlzLCBhKTsgfVxuICBGLnByb3RvdHlwZSA9IGMucHJvdG90eXBlO1xuICByZXR1cm4gbmV3IEY7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3dyYXBfY2FsbGJhY2sgY29uc3QgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jYWxsX2dlblxuZnVuY3Rpb24gY2FtbF9qc193cmFwX2NhbGxiYWNrKGYpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBpZihsZW4gPiAwKXtcbiAgICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGxlbik7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSBhcmdzW2ldID0gYXJndW1lbnRzW2ldO1xuICAgICAgcmV0dXJuIGNhbWxfY2FsbF9nZW4oZiwgYXJncyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBjYW1sX2NhbGxfZ2VuKGYsIFt1bmRlZmluZWRdKTtcbiAgICB9XG4gIH1cbn1cblxuLy9Qcm92aWRlczogY2FtbF9qc193cmFwX2NhbGxiYWNrX2FyZ3VtZW50c1xuLy9SZXF1aXJlczogY2FtbF9jYWxsX2dlblxuZnVuY3Rpb24gY2FtbF9qc193cmFwX2NhbGxiYWNrX2FyZ3VtZW50cyhmKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShsZW4pO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIGFyZ3NbaV0gPSBhcmd1bWVudHNbaV07XG4gICAgcmV0dXJuIGNhbWxfY2FsbF9nZW4oZiwgW2FyZ3NdKTtcbiAgfVxufVxuLy9Qcm92aWRlczogY2FtbF9qc193cmFwX2NhbGxiYWNrX3N0cmljdCBjb25zdFxuLy9SZXF1aXJlczogY2FtbF9jYWxsX2dlblxuZnVuY3Rpb24gY2FtbF9qc193cmFwX2NhbGxiYWNrX3N0cmljdChhcml0eSwgZikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBpZihuID09IGFyaXR5ICYmIGYubGVuZ3RoID09IGFyaXR5KSByZXR1cm4gZi5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyaXR5KTtcbiAgICB2YXIgbGVuID0gTWF0aC5taW4oYXJndW1lbnRzLmxlbmd0aCwgYXJpdHkpXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICByZXR1cm4gY2FtbF9jYWxsX2dlbihmLCBhcmdzKTtcbiAgfTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrIGNvbnN0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbF9nZW5cbmZ1bmN0aW9uIGNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrKGYpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShsZW4gKyAxKTtcbiAgICBhcmdzWzBdID0gdGhpcztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSBhcmdzW2krMV0gPSBhcmd1bWVudHNbaV07XG4gICAgcmV0dXJuIGNhbWxfY2FsbF9nZW4oZixhcmdzKTtcbiAgfVxufVxuLy9Qcm92aWRlczogY2FtbF9qc193cmFwX21ldGhfY2FsbGJhY2tfYXJndW1lbnRzIGNvbnN0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbF9nZW5cbmZ1bmN0aW9uIGNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrX2FyZ3VtZW50cyhmKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkobGVuKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSBhcmdzW2ldID0gYXJndW1lbnRzW2ldO1xuICAgIHJldHVybiBjYW1sX2NhbGxfZ2VuKGYsW3RoaXMsYXJnc10pO1xuICB9XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja19zdHJpY3QgY29uc3Rcbi8vUmVxdWlyZXM6IGNhbWxfY2FsbF9nZW5cbmZ1bmN0aW9uIGNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrX3N0cmljdChhcml0eSwgZikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyaXR5ICsgMSk7XG4gICAgdmFyIGxlbiA9IE1hdGgubWluKGFyZ3VtZW50cy5sZW5ndGgsIGFyaXR5KVxuICAgIGFyZ3NbMF0gPSB0aGlzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIGFyZ3NbaSsxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICByZXR1cm4gY2FtbF9jYWxsX2dlbihmLCBhcmdzKTtcbiAgfTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfanNfd3JhcF9tZXRoX2NhbGxiYWNrX3Vuc2FmZSBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NhbGxfZ2VuXG5mdW5jdGlvbiBjYW1sX2pzX3dyYXBfbWV0aF9jYWxsYmFja191bnNhZmUoZikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGxlbiArIDEpO1xuICAgIGFyZ3NbMF0gPSB0aGlzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIGFyZ3NbaSsxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICByZXR1cm4gZi5hcHBseShudWxsLCBhcmdzKTsgfVxufVxuLy9Qcm92aWRlczogY2FtbF9qc19lcXVhbHMgbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9qc19lcXVhbHMgKHgsIHkpIHsgcmV0dXJuICsoeCA9PSB5KTsgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2pzX2V2YWxfc3RyaW5nIChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzX2V2YWxfc3RyaW5nIChzKSB7cmV0dXJuIGV2YWwoY2FtbF9qc3N0cmluZ19vZl9zdHJpbmcocykpO31cblxuLy9Qcm92aWRlczogY2FtbF9qc19leHByIChjb25zdClcbi8vUmVxdWlyZXM6IGpzX3ByaW50X3N0ZGVyclxuLy9SZXF1aXJlczogY2FtbF9qc3N0cmluZ19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfanNfZXhwcihzKSB7XG4gIGpzX3ByaW50X3N0ZGVycihcImNhbWxfanNfZXhwcjogZmFsbGJhY2sgdG8gcnVudGltZSBldmFsdWF0aW9uXFxuXCIpO1xuICByZXR1cm4gZXZhbChjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhzKSk7fVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3B1cmVfanNfZXhwciBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBqc19wcmludF9zdGRlcnJcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX3B1cmVfanNfZXhwciAocyl7XG4gIGpzX3ByaW50X3N0ZGVycihcImNhbWxfcHVyZV9qc19leHByOiBmYWxsYmFjayB0byBydW50aW1lIGV2YWx1YXRpb25cXG5cIik7XG4gIHJldHVybiBldmFsKGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nKHMpKTt9XG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfb2JqZWN0IChvYmplY3RfbGl0ZXJhbClcbi8vUmVxdWlyZXM6IGNhbWxfanNzdHJpbmdfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2pzX29iamVjdCAoYSkge1xuICB2YXIgbyA9IHt9O1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcCA9IGFbaV07XG4gICAgb1tjYW1sX2pzc3RyaW5nX29mX3N0cmluZyhwWzFdKV0gPSBwWzJdO1xuICB9XG4gIHJldHVybiBvO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfanNfZXhwb3J0X3ZhclxuZnVuY3Rpb24gY2FtbF9qc19leHBvcnRfdmFyICgpe1xuICBpZih0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUgJiYgbW9kdWxlLmV4cG9ydHMpXG4gICAgcmV0dXJuIG1vZHVsZS5leHBvcnRzXG4gIGVsc2VcbiAgICByZXR1cm4gam9vX2dsb2JhbF9vYmplY3Q7XG59XG5cblxuLy9Qcm92aWRlczogY2FtbF94bWxodHRwcmVxdWVzdF9jcmVhdGVcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbi8vV2Vha2RlZlxuZnVuY3Rpb24gY2FtbF94bWxodHRwcmVxdWVzdF9jcmVhdGUodW5pdCl7XG4gIHZhciBnID0gam9vX2dsb2JhbF9vYmplY3Q7XG4gIGlmKHR5cGVvZiBnLlhNTEh0dHBSZXF1ZXN0ICE9PSAndW5kZWZpbmVkJykge1xuICAgIHRyeSB7IHJldHVybiBuZXcgZy5YTUxIdHRwUmVxdWVzdCB9IGNhdGNoIChlKSB7IH07XG4gIH1cbiAgaWYodHlwZW9mIGcuYWN0aXZlWE9iamVjdCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICB0cnkgeyByZXR1cm4gbmV3IGcuYWN0aXZlWE9iamVjdChcIk1zeG1sMi5YTUxIVFRQXCIpIH0gY2F0Y2goZSl7IH07XG4gICAgdHJ5IHsgcmV0dXJuIG5ldyBnLmFjdGl2ZVhPYmplY3QoXCJNc3htbDMuWE1MSFRUUFwiKSB9IGNhdGNoKGUpeyB9O1xuICAgIHRyeSB7IHJldHVybiBuZXcgZy5hY3RpdmVYT2JqZWN0KFwiTWljcm9zb2Z0LlhNTEhUVFBcIikgfSBjYXRjaChlKXsgfTtcbiAgfVxuICBjYW1sX2ZhaWx3aXRoKFwiQ2Fubm90IGNyZWF0ZSBhIFhNTEh0dHBSZXF1ZXN0XCIpO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogY2FtbF9mb3JtYXRfaW50IGNvbnN0IChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX3BhcnNlX2Zvcm1hdCwgY2FtbF9maW5pc2hfZm9ybWF0dGluZywgY2FtbF9zdHJfcmVwZWF0XG4vL1JlcXVpcmVzOiBjYW1sX3N0cmluZ19vZl9qc2J5dGVzLCBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nXG5mdW5jdGlvbiBjYW1sX2Zvcm1hdF9pbnQoZm10LCBpKSB7XG4gIGlmIChjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKGZtdCkgPT0gXCIlZFwiKSByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhcIlwiK2kpO1xuICB2YXIgZiA9IGNhbWxfcGFyc2VfZm9ybWF0KGZtdCk7XG4gIGlmIChpIDwgMCkgeyBpZiAoZi5zaWduZWRjb252KSB7IGYuc2lnbiA9IC0xOyBpID0gLWk7IH0gZWxzZSBpID4+Pj0gMDsgfVxuICB2YXIgcyA9IGkudG9TdHJpbmcoZi5iYXNlKTtcbiAgaWYgKGYucHJlYyA+PSAwKSB7XG4gICAgZi5maWxsZXIgPSAnICc7XG4gICAgdmFyIG4gPSBmLnByZWMgLSBzLmxlbmd0aDtcbiAgICBpZiAobiA+IDApIHMgPSBjYW1sX3N0cl9yZXBlYXQgKG4sICcwJykgKyBzO1xuICB9XG4gIHJldHVybiBjYW1sX2ZpbmlzaF9mb3JtYXR0aW5nKGYsIHMpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3BhcnNlX3NpZ25fYW5kX2Jhc2Vcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQsIGNhbWxfbWxfc3RyaW5nX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9wYXJzZV9zaWduX2FuZF9iYXNlIChzKSB7XG4gIHZhciBpID0gMCwgbGVuID0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpLCBiYXNlID0gMTAsIHNpZ24gPSAxO1xuICBpZiAobGVuID4gMCkge1xuICAgIHN3aXRjaCAoY2FtbF9zdHJpbmdfdW5zYWZlX2dldChzLGkpKSB7XG4gICAgY2FzZSA0NTogaSsrOyBzaWduID0gLTE7IGJyZWFrO1xuICAgIGNhc2UgNDM6IGkrKzsgc2lnbiA9IDE7IGJyZWFrO1xuICAgIH1cbiAgfVxuICBpZiAoaSArIDEgPCBsZW4gJiYgY2FtbF9zdHJpbmdfdW5zYWZlX2dldChzLCBpKSA9PSA0OClcbiAgICBzd2l0Y2ggKGNhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSArIDEpKSB7XG4gICAgY2FzZSAxMjA6IGNhc2UgODg6IGJhc2UgPSAxNjsgaSArPSAyOyBicmVhaztcbiAgICBjYXNlIDExMTogY2FzZSA3OTogYmFzZSA9ICA4OyBpICs9IDI7IGJyZWFrO1xuICAgIGNhc2UgIDk4OiBjYXNlIDY2OiBiYXNlID0gIDI7IGkgKz0gMjsgYnJlYWs7XG4gICAgY2FzZSAxMTc6IGNhc2UgODU6IGkgKz0gMjsgYnJlYWs7XG4gICAgfVxuICByZXR1cm4gW2ksIHNpZ24sIGJhc2VdO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX3BhcnNlX2RpZ2l0XG5mdW5jdGlvbiBjYW1sX3BhcnNlX2RpZ2l0KGMpIHtcbiAgaWYgKGMgPj0gNDggJiYgYyA8PSA1NykgIHJldHVybiBjIC0gNDg7XG4gIGlmIChjID49IDY1ICYmIGMgPD0gOTApICByZXR1cm4gYyAtIDU1O1xuICBpZiAoYyA+PSA5NyAmJiBjIDw9IDEyMikgcmV0dXJuIGMgLSA4NztcbiAgcmV0dXJuIC0xO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2ludF9vZl9zdHJpbmcgKGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoLCBjYW1sX3N0cmluZ191bnNhZmVfZ2V0XG4vL1JlcXVpcmVzOiBjYW1sX3BhcnNlX3NpZ25fYW5kX2Jhc2UsIGNhbWxfcGFyc2VfZGlnaXQsIGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfaW50X29mX3N0cmluZyAocykge1xuICB2YXIgciA9IGNhbWxfcGFyc2Vfc2lnbl9hbmRfYmFzZSAocyk7XG4gIHZhciBpID0gclswXSwgc2lnbiA9IHJbMV0sIGJhc2UgPSByWzJdO1xuICB2YXIgbGVuID0gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpO1xuICB2YXIgdGhyZXNob2xkID0gLTEgPj4+IDA7XG4gIHZhciBjID0gKGkgPCBsZW4pP2NhbWxfc3RyaW5nX3Vuc2FmZV9nZXQocywgaSk6MDtcbiAgdmFyIGQgPSBjYW1sX3BhcnNlX2RpZ2l0KGMpO1xuICBpZiAoZCA8IDAgfHwgZCA+PSBiYXNlKSBjYW1sX2ZhaWx3aXRoKFwiaW50X29mX3N0cmluZ1wiKTtcbiAgdmFyIHJlcyA9IGQ7XG4gIGZvciAoaSsrO2k8bGVuO2krKykge1xuICAgIGMgPSBjYW1sX3N0cmluZ191bnNhZmVfZ2V0KHMsIGkpO1xuICAgIGlmIChjID09IDk1KSBjb250aW51ZTtcbiAgICBkID0gY2FtbF9wYXJzZV9kaWdpdChjKTtcbiAgICBpZiAoZCA8IDAgfHwgZCA+PSBiYXNlKSBicmVhaztcbiAgICByZXMgPSBiYXNlICogcmVzICsgZDtcbiAgICBpZiAocmVzID4gdGhyZXNob2xkKSBjYW1sX2ZhaWx3aXRoKFwiaW50X29mX3N0cmluZ1wiKTtcbiAgfVxuICBpZiAoaSAhPSBsZW4pIGNhbWxfZmFpbHdpdGgoXCJpbnRfb2Zfc3RyaW5nXCIpO1xuICAvLyBGb3IgYmFzZSBkaWZmZXJlbnQgZnJvbSAxMCwgd2UgZXhwZWN0IGFuIHVuc2lnbmVkIHJlcHJlc2VudGF0aW9uLFxuICAvLyBoZW5jZSBhbnkgdmFsdWUgb2YgJ3JlcycgKGxlc3MgdGhhbiAndGhyZXNob2xkJykgaXMgYWNjZXB0YWJsZS5cbiAgLy8gQnV0IHdlIGhhdmUgdG8gY29udmVydCB0aGUgcmVzdWx0IGJhY2sgdG8gYSBzaWduZWQgaW50ZWdlci5cbiAgcmVzID0gc2lnbiAqIHJlcztcbiAgaWYgKChiYXNlID09IDEwKSAmJiAoKHJlcyB8IDApICE9IHJlcykpXG4gICAgLyogU2lnbmVkIHJlcHJlc2VudGF0aW9uIGV4cGVjdGVkLCBhbGxvdyAtMl4obmJpdHMtMSkgdG8gMl4obmJpdHMtMSkgLSAxICovXG4gICAgY2FtbF9mYWlsd2l0aChcImludF9vZl9zdHJpbmdcIik7XG4gIHJldHVybiByZXMgfCAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX211bCBjb25zdFxuZnVuY3Rpb24gY2FtbF9tdWwoYSxiKXtcbiAgcmV0dXJuIE1hdGguaW11bChhLGIpO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2RpdlxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV96ZXJvX2RpdmlkZVxuZnVuY3Rpb24gY2FtbF9kaXYoeCx5KSB7XG4gIGlmICh5ID09IDApIGNhbWxfcmFpc2VfemVyb19kaXZpZGUgKCk7XG4gIHJldHVybiAoeC95KXwwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21vZFxuLy9SZXF1aXJlczogY2FtbF9yYWlzZV96ZXJvX2RpdmlkZVxuZnVuY3Rpb24gY2FtbF9tb2QoeCx5KSB7XG4gIGlmICh5ID09IDApIGNhbWxfcmFpc2VfemVyb19kaXZpZGUgKCk7XG4gIHJldHVybiB4JXk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYnN3YXAxNlxuZnVuY3Rpb24gY2FtbF9ic3dhcDE2KHgpIHtcbiAgcmV0dXJuICgoKCh4ICYgMHgwMEZGKSA8PCA4KSB8XG4gICAgICAgICAgICgoeCAmIDB4RkYwMCkgPj4gOCkpKTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfaW50MzJfYnN3YXBcbmZ1bmN0aW9uIGNhbWxfaW50MzJfYnN3YXAoeCkge1xuICByZXR1cm4gKCgoeCAmIDB4MDAwMDAwRkYpIDw8IDI0KSB8XG4gICAgICAgICAgKCh4ICYgMHgwMDAwRkYwMCkgPDwgOCkgfFxuICAgICAgICAgICgoeCAmIDB4MDBGRjAwMDApID4+PiA4KSB8XG4gICAgICAgICAgKCh4ICYgMHhGRjAwMDAwMCkgPj4+IDI0KSk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2ludDY0X2Jzd2FwXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X3RvX2J5dGVzLCBjYW1sX2ludDY0X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2ludDY0X2Jzd2FwKHgpIHtcbiAgdmFyIHkgPSBjYW1sX2ludDY0X3RvX2J5dGVzKHgpO1xuICByZXR1cm4gY2FtbF9pbnQ2NF9vZl9ieXRlcyhbeVs3XSwgeVs2XSwgeVs1XSwgeVs0XSwgeVszXSwgeVsyXSwgeVsxXSwgeVswXV0pO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8vLy8vLy8vLy8vLyBIYXNodGJsXG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF91bml2X3BhcmFtIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfaXNfbWxfc3RyaW5nLCBjYW1sX2lzX21sX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX2ludDY0X3RvX2J5dGVzLCBjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQsIGNhbWxfY3VzdG9tX29wc1xuLy9SZXF1aXJlczogY2FtbF9tbF9ieXRlc19sZW5ndGgsIGNhbWxfanNieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfaGFzaF91bml2X3BhcmFtIChjb3VudCwgbGltaXQsIG9iaikge1xuICB2YXIgaGFzaF9hY2N1ID0gMDtcbiAgZnVuY3Rpb24gaGFzaF9hdXggKG9iaikge1xuICAgIGxpbWl0IC0tO1xuICAgIGlmIChjb3VudCA8IDAgfHwgbGltaXQgPCAwKSByZXR1cm47XG4gICAgaWYgKG9iaiBpbnN0YW5jZW9mIEFycmF5ICYmIG9ialswXSA9PT0gKG9ialswXXwwKSkge1xuICAgICAgc3dpdGNoIChvYmpbMF0pIHtcbiAgICAgIGNhc2UgMjQ4OlxuICAgICAgICAvLyBPYmplY3RcbiAgICAgICAgY291bnQgLS07XG4gICAgICAgIGhhc2hfYWNjdSA9IChoYXNoX2FjY3UgKiA2NTU5OSArIG9ialsyXSkgfCAwO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjUwOlxuICAgICAgICAvLyBGb3J3YXJkXG4gICAgICAgIGxpbWl0Kys7IGhhc2hfYXV4KG9iaik7IGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY291bnQgLS07XG4gICAgICAgIGhhc2hfYWNjdSA9IChoYXNoX2FjY3UgKiAxOSArIG9ialswXSkgfCAwO1xuICAgICAgICBmb3IgKHZhciBpID0gb2JqLmxlbmd0aCAtIDE7IGkgPiAwOyBpLS0pIGhhc2hfYXV4IChvYmpbaV0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2FtbF9pc19tbF9ieXRlcyhvYmopKSB7XG4gICAgICBjb3VudCAtLTtcbiAgICAgIHN3aXRjaCAob2JqLnQgJiA2KSB7XG4gICAgICBkZWZhdWx0OiAvKiBQQVJUSUFMICovXG4gICAgICAgIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMob2JqKTtcbiAgICAgIGNhc2UgMDogLyogQllURVMgKi9cbiAgICAgICAgZm9yICh2YXIgYiA9IG9iai5jLCBsID0gY2FtbF9tbF9ieXRlc19sZW5ndGgob2JqKSwgaSA9IDA7IGkgPCBsOyBpKyspXG4gICAgICAgICAgaGFzaF9hY2N1ID0gKGhhc2hfYWNjdSAqIDE5ICsgYi5jaGFyQ29kZUF0KGkpKSB8IDA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyOiAvKiBBUlJBWSAqL1xuICAgICAgICBmb3IgKHZhciBhID0gb2JqLmMsIGwgPSBjYW1sX21sX2J5dGVzX2xlbmd0aChvYmopLCBpID0gMDsgaSA8IGw7IGkrKylcbiAgICAgICAgICBoYXNoX2FjY3UgPSAoaGFzaF9hY2N1ICogMTkgKyBhW2ldKSB8IDA7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjYW1sX2lzX21sX3N0cmluZyhvYmopKSB7XG4gICAgICB2YXIganNieXRlcyA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcob2JqKTtcbiAgICAgIGZvciAodmFyIGIgPSBqc2J5dGVzLCBsID0ganNieXRlcy5sZW5ndGgsIGkgPSAwOyBpIDwgbDsgaSsrKVxuICAgICAgICBoYXNoX2FjY3UgPSAoaGFzaF9hY2N1ICogMTkgKyBiLmNoYXJDb2RlQXQoaSkpIHwgMDtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBvYmogPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGZvciAodmFyIGIgPSBvYmosIGwgPSBvYmoubGVuZ3RoLCBpID0gMDsgaSA8IGw7IGkrKylcbiAgICAgICAgaGFzaF9hY2N1ID0gKGhhc2hfYWNjdSAqIDE5ICsgYi5jaGFyQ29kZUF0KGkpKSB8IDA7XG4gICAgfSBlbHNlIGlmIChvYmogPT09IChvYmp8MCkpIHtcbiAgICAgIC8vIEludGVnZXJcbiAgICAgIGNvdW50IC0tO1xuICAgICAgaGFzaF9hY2N1ID0gKGhhc2hfYWNjdSAqIDY1NTk5ICsgb2JqKSB8IDA7XG4gICAgfSBlbHNlIGlmIChvYmogPT09ICtvYmopIHtcbiAgICAgIC8vIEZsb2F0XG4gICAgICBjb3VudC0tO1xuICAgICAgdmFyIHAgPSBjYW1sX2ludDY0X3RvX2J5dGVzIChjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQgKG9iaikpO1xuICAgICAgZm9yICh2YXIgaSA9IDc7IGkgPj0gMDsgaS0tKSBoYXNoX2FjY3UgPSAoaGFzaF9hY2N1ICogMTkgKyBwW2ldKSB8IDA7XG4gICAgfSBlbHNlIGlmKG9iaiAmJiBvYmouY2FtbF9jdXN0b20pIHtcbiAgICAgIGlmKGNhbWxfY3VzdG9tX29wc1tvYmouY2FtbF9jdXN0b21dICYmIGNhbWxfY3VzdG9tX29wc1tvYmouY2FtbF9jdXN0b21dLmhhc2gpIHtcbiAgICAgICAgdmFyIGggPSBjYW1sX2N1c3RvbV9vcHNbb2JqLmNhbWxfY3VzdG9tXS5oYXNoKG9iaikgfCAwO1xuICAgICAgICBoYXNoX2FjY3UgPSAoaGFzaF9hY2N1ICogNjU1OTkgKyBoKSB8IDA7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGhhc2hfYXV4IChvYmopO1xuICByZXR1cm4gaGFzaF9hY2N1ICYgMHgzRkZGRkZGRjtcbn1cblxuLy9mdW5jdGlvbiBST1RMMzIoeCxuKSB7IHJldHVybiAoKHggPDwgbikgfCAoeCA+Pj4gKDMyLW4pKSk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfaW50XG4vL1JlcXVpcmVzOiBjYW1sX211bFxuZnVuY3Rpb24gY2FtbF9oYXNoX21peF9pbnQoaCxkKSB7XG4gIGQgPSBjYW1sX211bChkLCAweGNjOWUyZDUxfDApO1xuICBkID0gKChkIDw8IDE1KSB8IChkID4+PiAoMzItMTUpKSk7IC8vIFJPVEwzMihkLCAxNSk7XG4gIGQgPSBjYW1sX211bChkLCAweDFiODczNTkzKTtcbiAgaCBePSBkO1xuICBoID0gKChoIDw8IDEzKSB8IChoID4+PiAoMzItMTMpKSk7ICAgLy9ST1RMMzIoaCwgMTMpO1xuICByZXR1cm4gKCgoaCArIChoIDw8IDIpKXwwKSArICgweGU2NTQ2YjY0fDApKXwwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2hfbWl4X2ZpbmFsXG4vL1JlcXVpcmVzOiBjYW1sX211bFxuZnVuY3Rpb24gY2FtbF9oYXNoX21peF9maW5hbChoKSB7XG4gIGggXj0gaCA+Pj4gMTY7XG4gIGggPSBjYW1sX211bCAoaCwgMHg4NWViY2E2YnwwKTtcbiAgaCBePSBoID4+PiAxMztcbiAgaCA9IGNhbWxfbXVsIChoLCAweGMyYjJhZTM1fDApO1xuICBoIF49IGggPj4+IDE2O1xuICByZXR1cm4gaDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9oYXNoX21peF9mbG9hdFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0LCBjYW1sX2hhc2hfbWl4X2ludDY0XG5mdW5jdGlvbiBjYW1sX2hhc2hfbWl4X2Zsb2F0IChoLCB2MCkge1xuICByZXR1cm4gY2FtbF9oYXNoX21peF9pbnQ2NChoLCBjYW1sX2ludDY0X2JpdHNfb2ZfZmxvYXQgKHYwKSk7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX2hhc2hfbWl4X2ludDY0XG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2ludFxuLy9SZXF1aXJlczogY2FtbF9pbnQ2NF9sbzMyLCBjYW1sX2ludDY0X2hpMzJcbmZ1bmN0aW9uIGNhbWxfaGFzaF9taXhfaW50NjQgKGgsIHYpIHtcbiAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIGNhbWxfaW50NjRfbG8zMih2KSk7XG4gIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCBjYW1sX2ludDY0X2hpMzIodikpO1xuICByZXR1cm4gaDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9oYXNoX21peF9qc2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2ludFxuZnVuY3Rpb24gY2FtbF9oYXNoX21peF9qc2J5dGVzKGgsIHMpIHtcbiAgdmFyIGxlbiA9IHMubGVuZ3RoLCBpLCB3O1xuICBmb3IgKGkgPSAwOyBpICsgNCA8PSBsZW47IGkgKz0gNCkge1xuICAgIHcgPSBzLmNoYXJDb2RlQXQoaSlcbiAgICAgIHwgKHMuY2hhckNvZGVBdChpKzEpIDw8IDgpXG4gICAgICB8IChzLmNoYXJDb2RlQXQoaSsyKSA8PCAxNilcbiAgICAgIHwgKHMuY2hhckNvZGVBdChpKzMpIDw8IDI0KTtcbiAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgdyk7XG4gIH1cbiAgdyA9IDA7XG4gIHN3aXRjaCAobGVuICYgMykge1xuICBjYXNlIDM6IHcgID0gcy5jaGFyQ29kZUF0KGkrMikgPDwgMTY7XG4gIGNhc2UgMjogdyB8PSBzLmNoYXJDb2RlQXQoaSsxKSA8PCA4O1xuICBjYXNlIDE6XG4gICAgdyB8PSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIHcpO1xuICBkZWZhdWx0OlxuICB9XG4gIGggXj0gbGVuO1xuICByZXR1cm4gaDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9oYXNoX21peF9ieXRlc19hcnJcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfaW50XG5mdW5jdGlvbiBjYW1sX2hhc2hfbWl4X2J5dGVzX2FycihoLCBzKSB7XG4gIHZhciBsZW4gPSBzLmxlbmd0aCwgaSwgdztcbiAgZm9yIChpID0gMDsgaSArIDQgPD0gbGVuOyBpICs9IDQpIHtcbiAgICB3ID0gc1tpXVxuICAgICAgfCAoc1tpKzFdIDw8IDgpXG4gICAgICB8IChzW2krMl0gPDwgMTYpXG4gICAgICB8IChzW2krM10gPDwgMjQpO1xuICAgIGggPSBjYW1sX2hhc2hfbWl4X2ludChoLCB3KTtcbiAgfVxuICB3ID0gMDtcbiAgc3dpdGNoIChsZW4gJiAzKSB7XG4gIGNhc2UgMzogdyAgPSBzW2krMl0gPDwgMTY7XG4gIGNhc2UgMjogdyB8PSBzW2krMV0gPDwgODtcbiAgY2FzZSAxOiB3IHw9IHNbaV07XG4gICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIHcpO1xuICBkZWZhdWx0OlxuICB9XG4gIGggXj0gbGVuO1xuICByZXR1cm4gaDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9oYXNoX21peF9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9jb252ZXJ0X3N0cmluZ190b19ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9qc2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2J5dGVzX2FyclxuZnVuY3Rpb24gY2FtbF9oYXNoX21peF9ieXRlcyhoLCB2KSB7XG4gIHN3aXRjaCAodi50ICYgNikge1xuICBkZWZhdWx0OlxuICAgIGNhbWxfY29udmVydF9zdHJpbmdfdG9fYnl0ZXMgKHYpO1xuICBjYXNlIDA6IC8qIEJZVEVTICovXG4gICAgaCA9IGNhbWxfaGFzaF9taXhfanNieXRlcyhoLCB2LmMpO1xuICAgIGJyZWFrO1xuICBjYXNlIDI6IC8qIEFSUkFZICovXG4gICAgaCA9IGNhbWxfaGFzaF9taXhfYnl0ZXNfYXJyKGgsIHYuYyk7XG4gIH1cbiAgcmV0dXJuIGhcbn1cblxuLy9Qcm92aWRlczogY2FtbF9oYXNoX21peF9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfanNieXRlcywgY2FtbF9qc2J5dGVzX29mX3N0cmluZ1xuZnVuY3Rpb24gY2FtbF9oYXNoX21peF9zdHJpbmcoaCwgdikge1xuICByZXR1cm4gY2FtbF9oYXNoX21peF9qc2J5dGVzKGgsIGNhbWxfanNieXRlc19vZl9zdHJpbmcodikpO1xufVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaCBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2lzX21sX3N0cmluZywgY2FtbF9pc19tbF9ieXRlc1xuLy9SZXF1aXJlczogY2FtbF9oYXNoX21peF9pbnQsIGNhbWxfaGFzaF9taXhfZmluYWxcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfZmxvYXQsIGNhbWxfaGFzaF9taXhfc3RyaW5nLCBjYW1sX2hhc2hfbWl4X2J5dGVzLCBjYW1sX2N1c3RvbV9vcHNcbi8vUmVxdWlyZXM6IGNhbWxfaGFzaF9taXhfanNieXRlc1xuZnVuY3Rpb24gY2FtbF9oYXNoIChjb3VudCwgbGltaXQsIHNlZWQsIG9iaikge1xuICB2YXIgcXVldWUsIHJkLCB3ciwgc3osIG51bSwgaCwgdiwgaSwgbGVuO1xuICBzeiA9IGxpbWl0O1xuICBpZiAoc3ogPCAwIHx8IHN6ID4gMjU2KSBzeiA9IDI1NjtcbiAgbnVtID0gY291bnQ7XG4gIGggPSBzZWVkO1xuICBxdWV1ZSA9IFtvYmpdOyByZCA9IDA7IHdyID0gMTtcbiAgd2hpbGUgKHJkIDwgd3IgJiYgbnVtID4gMCkge1xuICAgIHYgPSBxdWV1ZVtyZCsrXTtcbiAgICBpZiAodiAmJiB2LmNhbWxfY3VzdG9tKXtcbiAgICAgIGlmKGNhbWxfY3VzdG9tX29wc1t2LmNhbWxfY3VzdG9tXSAmJiBjYW1sX2N1c3RvbV9vcHNbdi5jYW1sX2N1c3RvbV0uaGFzaCkge1xuICAgICAgICB2YXIgaGggPSBjYW1sX2N1c3RvbV9vcHNbdi5jYW1sX2N1c3RvbV0uaGFzaCh2KTtcbiAgICAgICAgaCA9IGNhbWxfaGFzaF9taXhfaW50IChoLCBoaCk7XG4gICAgICAgIG51bSAtLTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodiBpbnN0YW5jZW9mIEFycmF5ICYmIHZbMF0gPT09ICh2WzBdfDApKSB7XG4gICAgICBzd2l0Y2ggKHZbMF0pIHtcbiAgICAgIGNhc2UgMjQ4OlxuICAgICAgICAvLyBPYmplY3RcbiAgICAgICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIHZbMl0pO1xuICAgICAgICBudW0tLTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI1MDpcbiAgICAgICAgLy8gRm9yd2FyZFxuICAgICAgICBxdWV1ZVstLXJkXSA9IHZbMV07XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdmFyIHRhZyA9ICgodi5sZW5ndGggLSAxKSA8PCAxMCkgfCB2WzBdO1xuICAgICAgICBoID0gY2FtbF9oYXNoX21peF9pbnQoaCwgdGFnKTtcbiAgICAgICAgZm9yIChpID0gMSwgbGVuID0gdi5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIGlmICh3ciA+PSBzeikgYnJlYWs7XG4gICAgICAgICAgcXVldWVbd3IrK10gPSB2W2ldO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2FtbF9pc19tbF9ieXRlcyh2KSkge1xuICAgICAgaCA9IGNhbWxfaGFzaF9taXhfYnl0ZXMoaCx2KVxuICAgICAgbnVtLS07XG4gICAgfSBlbHNlIGlmIChjYW1sX2lzX21sX3N0cmluZyh2KSkge1xuICAgICAgaCA9IGNhbWxfaGFzaF9taXhfc3RyaW5nKGgsdilcbiAgICAgIG51bS0tO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHYgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGggPSBjYW1sX2hhc2hfbWl4X2pzYnl0ZXMoaCx2KVxuICAgICAgbnVtLS07XG4gICAgfSBlbHNlIGlmICh2ID09PSAodnwwKSkge1xuICAgICAgLy8gSW50ZWdlclxuICAgICAgaCA9IGNhbWxfaGFzaF9taXhfaW50KGgsIHYrdisxKTtcbiAgICAgIG51bS0tO1xuICAgIH0gZWxzZSBpZiAodiA9PT0gK3YpIHtcbiAgICAgIC8vIEZsb2F0XG4gICAgICBoID0gY2FtbF9oYXNoX21peF9mbG9hdChoLHYpO1xuICAgICAgbnVtLS07XG4gICAgfVxuICB9XG4gIGggPSBjYW1sX2hhc2hfbWl4X2ZpbmFsKGgpO1xuICByZXR1cm4gaCAmIDB4M0ZGRkZGRkY7XG59XG4iLCIvLyBKc19vZl9vY2FtbCBydW50aW1lIHN1cHBvcnRcbi8vIGh0dHA6Ly93d3cub2NzaWdlbi5vcmcvanNfb2Zfb2NhbWwvXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbi8vIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuLy8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd2l0aCBsaW5raW5nIGV4Y2VwdGlvbjtcbi8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbi8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4vLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4vLyBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbi8vXG4vLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Vcbi8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4vLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLlxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvbXBhcmVfdmFsX3RhZ1xuLy9SZXF1aXJlczogY2FtbF9pc19tbF9zdHJpbmcsIGNhbWxfaXNfbWxfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfY29tcGFyZV92YWxfdGFnKGEpe1xuICBpZiAodHlwZW9mIGEgPT09IFwibnVtYmVyXCIpIHJldHVybiAxMDAwOyAvLyBpbnRfdGFnICh3ZSB1c2UgaXQgZm9yIGFsbCBudW1iZXJzKVxuICBlbHNlIGlmIChjYW1sX2lzX21sX2J5dGVzKGEpKSByZXR1cm4gMjUyOyAvLyBzdHJpbmdfdGFnXG4gIGVsc2UgaWYgKGNhbWxfaXNfbWxfc3RyaW5nKGEpKSByZXR1cm4gMTI1MjsgLy8gb2NhbWwgc3RyaW5nIChpZiBkaWZmZXJlbnQgZnJvbSBieXRlcylcbiAgZWxzZSBpZiAoYSBpbnN0YW5jZW9mIEFycmF5ICYmIGFbMF0gPT09IChhWzBdPj4+MCkgJiYgYVswXSA8PSAyNTUpIHtcbiAgICAvLyBMb29rIGxpa2UgYW4gb2NhbWwgYmxvY2tcbiAgICB2YXIgdGFnID0gYVswXSB8IDA7XG4gICAgLy8gaWdub3JlIGRvdWJsZV9hcnJheV90YWcgYmVjYXVzZSB3ZSBjYW5ub3QgYWNjdXJhdGVseSBzZXRcbiAgICAvLyB0aGlzIHRhZyB3aGVuIHdlIGNyZWF0ZSBhbiBhcnJheSBvZiBmbG9hdC5cbiAgICByZXR1cm4gKHRhZyA9PSAyNTQpPzA6dGFnXG4gIH1cbiAgZWxzZSBpZiAoYSBpbnN0YW5jZW9mIFN0cmluZykgcmV0dXJuIDEyNTIwOyAvLyBqYXZhc2NyaXB0IHN0cmluZywgbGlrZSBzdHJpbmdfdGFnICgyNTIpXG4gIGVsc2UgaWYgKHR5cGVvZiBhID09IFwic3RyaW5nXCIpIHJldHVybiAxMjUyMDsgLy8gamF2YXNjcmlwdCBzdHJpbmcsIGxpa2Ugc3RyaW5nX3RhZyAoMjUyKVxuICBlbHNlIGlmIChhIGluc3RhbmNlb2YgTnVtYmVyKSByZXR1cm4gMTAwMDsgLy8gaW50X3RhZyAod2UgdXNlIGl0IGZvciBhbGwgbnVtYmVycylcbiAgZWxzZSBpZiAoYSAmJiBhLmNhbWxfY3VzdG9tKSByZXR1cm4gMTI1NTsgLy8gbGlrZSBjdXN0b21fdGFnICgyNTUpXG4gIGVsc2UgaWYgKGEgJiYgYS5jb21wYXJlKSByZXR1cm4gMTI1NjsgLy8gbGlrZSBjdXN0b21fdGFnICgyNTUpXG4gIGVsc2UgaWYgKHR5cGVvZiBhID09IFwiZnVuY3Rpb25cIikgcmV0dXJuIDEyNDc7IC8vIGxpa2UgY2xvc3VyZV90YWcgKDI0NylcbiAgZWxzZSBpZiAodHlwZW9mIGEgPT0gXCJzeW1ib2xcIikgcmV0dXJuIDEyNTE7XG4gIHJldHVybiAxMDAxOyAvL291dF9vZl9oZWFwX3RhZ1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvbXBhcmVfdmFsX2dldF9jdXN0b21cbi8vUmVxdWlyZXM6IGNhbWxfY3VzdG9tX29wc1xuZnVuY3Rpb24gY2FtbF9jb21wYXJlX3ZhbF9nZXRfY3VzdG9tKGEpe1xuICByZXR1cm4gY2FtbF9jdXN0b21fb3BzW2EuY2FtbF9jdXN0b21dICYmIGNhbWxfY3VzdG9tX29wc1thLmNhbWxfY3VzdG9tXS5jb21wYXJlO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2NvbXBhcmVfdmFsX251bWJlcl9jdXN0b21cbi8vUmVxdWlyZXM6IGNhbWxfY29tcGFyZV92YWxfZ2V0X2N1c3RvbVxuZnVuY3Rpb24gY2FtbF9jb21wYXJlX3ZhbF9udW1iZXJfY3VzdG9tKG51bSwgY3VzdG9tLCBzd2FwLCB0b3RhbCkge1xuICB2YXIgY29tcCA9IGNhbWxfY29tcGFyZV92YWxfZ2V0X2N1c3RvbShjdXN0b20pO1xuICBpZihjb21wKSB7XG4gICAgdmFyIHggPSAoc3dhcCA+IDApP2NvbXAoY3VzdG9tLG51bSx0b3RhbCk6Y29tcChudW0sY3VzdG9tLHRvdGFsKTtcbiAgICBpZih0b3RhbCAmJiB4ICE9IHgpIHJldHVybiBzd2FwOyAvLyB0b3RhbCAmJiBuYW5cbiAgICBpZigreCAhPSAreCkgcmV0dXJuICt4OyAvLyBuYW5cbiAgICBpZigoeCB8IDApICE9IDApIHJldHVybiAoeCB8IDApOyAvLyAhbmFuXG4gIH1cbiAgcmV0dXJuIHN3YXBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9jb21wYXJlX3ZhbCAoY29uc3QsIGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfaW50X2NvbXBhcmUsIGNhbWxfc3RyaW5nX2NvbXBhcmUsIGNhbWxfYnl0ZXNfY29tcGFyZVxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50LCBjYW1sX2NvbXBhcmVfdmFsX2dldF9jdXN0b20sIGNhbWxfY29tcGFyZV92YWxfdGFnXG4vL1JlcXVpcmVzOiBjYW1sX2NvbXBhcmVfdmFsX251bWJlcl9jdXN0b21cbi8vUmVxdWlyZXM6IGNhbWxfanNieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfY29tcGFyZV92YWwgKGEsIGIsIHRvdGFsKSB7XG4gIHZhciBzdGFjayA9IFtdO1xuICBmb3IoOzspIHtcbiAgICBpZiAoISh0b3RhbCAmJiBhID09PSBiKSkge1xuICAgICAgdmFyIHRhZ19hID0gY2FtbF9jb21wYXJlX3ZhbF90YWcoYSk7XG4gICAgICAvLyBmb3J3YXJkX3RhZyA/XG4gICAgICBpZih0YWdfYSA9PSAyNTApIHsgYSA9IGFbMV07IGNvbnRpbnVlIH1cblxuICAgICAgdmFyIHRhZ19iID0gY2FtbF9jb21wYXJlX3ZhbF90YWcoYik7XG4gICAgICAvLyBmb3J3YXJkX3RhZyA/XG4gICAgICBpZih0YWdfYiA9PSAyNTApIHsgYiA9IGJbMV07IGNvbnRpbnVlIH1cblxuICAgICAgLy8gdGFncyBhcmUgZGlmZmVyZW50XG4gICAgICBpZih0YWdfYSAhPT0gdGFnX2IpIHtcbiAgICAgICAgaWYodGFnX2EgPT0gMTAwMCkge1xuICAgICAgICAgIGlmKHRhZ19iID09IDEyNTUpIHsgLy9pbW1lZGlhdGUgY2FuIGNvbXBhcmUgYWdhaW5zdCBjdXN0b21cbiAgICAgICAgICAgIHJldHVybiBjYW1sX2NvbXBhcmVfdmFsX251bWJlcl9jdXN0b20oYSwgYiwgLTEsIHRvdGFsKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIC0xXG4gICAgICAgIH1cbiAgICAgICAgaWYodGFnX2IgPT0gMTAwMCkge1xuICAgICAgICAgIGlmKHRhZ19hID09IDEyNTUpIHsgLy9pbW1lZGlhdGUgY2FuIGNvbXBhcmUgYWdhaW5zdCBjdXN0b21cbiAgICAgICAgICAgIHJldHVybiBjYW1sX2NvbXBhcmVfdmFsX251bWJlcl9jdXN0b20oYiwgYSwgMSwgdG90YWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gMVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAodGFnX2EgPCB0YWdfYik/LTE6MTtcbiAgICAgIH1cbiAgICAgIHN3aXRjaCh0YWdfYSl7XG4gICAgICAgIC8vIDI0NjogTGF6eV90YWcgaGFuZGxlZCBiZWxsb3dcbiAgICAgIGNhc2UgMjQ3OiAvLyBDbG9zdXJlX3RhZ1xuICAgICAgICAvLyBDYW5ub3QgaGFwcGVuXG4gICAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImNvbXBhcmU6IGZ1bmN0aW9uYWwgdmFsdWVcIik7XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIDI0ODogLy8gT2JqZWN0XG4gICAgICAgIHZhciB4ID0gY2FtbF9pbnRfY29tcGFyZShhWzJdLCBiWzJdKTtcbiAgICAgICAgaWYgKHggIT0gMCkgcmV0dXJuICh4IHwgMCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyNDk6IC8vIEluZml4XG4gICAgICAgIC8vIENhbm5vdCBoYXBwZW5cbiAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY29tcGFyZTogZnVuY3Rpb25hbCB2YWx1ZVwiKTtcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgMjUwOiAvLyBGb3J3YXJkIHRhZ1xuICAgICAgICAvLyBDYW5ub3QgaGFwcGVuLCBoYW5kbGVkIGFib3ZlXG4gICAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImVxdWFsOiBnb3QgRm9yd2FyZF90YWcsIHNob3VsZCBub3QgaGFwcGVuXCIpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjUxOiAvL0Fic3RyYWN0XG4gICAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImVxdWFsOiBhYnN0cmFjdCB2YWx1ZVwiKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI1MjogLy8gT0NhbWwgYnl0ZXNcbiAgICAgICAgaWYgKGEgIT09IGIpIHtcbiAgICAgICAgICB2YXIgeCA9IGNhbWxfYnl0ZXNfY29tcGFyZShhLCBiKTtcbiAgICAgICAgICBpZiAoeCAhPSAwKSByZXR1cm4gKHggfCAwKTtcbiAgICAgICAgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI1MzogLy8gRG91YmxlX3RhZ1xuICAgICAgICAvLyBDYW5ub3QgaGFwcGVuXG4gICAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImVxdWFsOiBnb3QgRG91YmxlX3RhZywgc2hvdWxkIG5vdCBoYXBwZW5cIik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyNTQ6IC8vIERvdWJsZV9hcnJheV90YWdcbiAgICAgICAgLy8gQ2Fubm90IGhhcHBlbiwgaGFuZGxlZCBhYm92ZVxuICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJlcXVhbDogZ290IERvdWJsZV9hcnJheV90YWcsIHNob3VsZCBub3QgaGFwcGVuXCIpO1xuICAgICAgICBicmVha1xuICAgICAgY2FzZSAyNTU6IC8vIEN1c3RvbV90YWdcbiAgICAgICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiZXF1YWw6IGdvdCBDdXN0b21fdGFnLCBzaG91bGQgbm90IGhhcHBlblwiKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDEyNDc6IC8vIEZ1bmN0aW9uXG4gICAgICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImNvbXBhcmU6IGZ1bmN0aW9uYWwgdmFsdWVcIik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxMjU1OiAvLyBDdXN0b21cbiAgICAgICAgdmFyIGNvbXAgPSBjYW1sX2NvbXBhcmVfdmFsX2dldF9jdXN0b20oYSk7XG4gICAgICAgIGlmKGNvbXAgIT0gY2FtbF9jb21wYXJlX3ZhbF9nZXRfY3VzdG9tKGIpKXtcbiAgICAgICAgICByZXR1cm4gKGEuY2FtbF9jdXN0b208Yi5jYW1sX2N1c3RvbSk/LTE6MTtcbiAgICAgICAgfVxuICAgICAgICBpZighY29tcClcbiAgICAgICAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJjb21wYXJlOiBhYnN0cmFjdCB2YWx1ZVwiKTtcbiAgICAgICAgdmFyIHggPSBjb21wKGEsYix0b3RhbCk7XG4gICAgICAgIGlmKHggIT0geCl7IC8vIFByb3RlY3QgYWdhaW5zdCBpbnZhbGlkIFVOT1JERVJFRFxuICAgICAgICAgIHJldHVybiB0b3RhbD8tMTp4O1xuICAgICAgICB9XG4gICAgICAgIGlmKHggIT09ICh4fDApKXsgLy8gUHJvdGVjdCBhZ2FpbnN0IGludmFsaWQgcmV0dXJuIHZhbHVlXG4gICAgICAgICAgcmV0dXJuIC0xXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHggIT0gMCkgcmV0dXJuICh4IHwgMCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxMjU2OiAvLyBjb21wYXJlIGZ1bmN0aW9uXG4gICAgICAgIHZhciB4ID0gYS5jb21wYXJlKGIsdG90YWwpO1xuICAgICAgICBpZih4ICE9IHgpIHsgLy8gUHJvdGVjdCBhZ2FpbnN0IGludmFsaWQgVU5PUkRFUkVEXG4gICAgICAgICAgcmV0dXJuIHRvdGFsPy0xOng7XG4gICAgICAgIH1cbiAgICAgICAgaWYoeCAhPT0gKHh8MCkpeyAvLyBQcm90ZWN0IGFnYWluc3QgaW52YWxpZCByZXR1cm4gdmFsdWVcbiAgICAgICAgICByZXR1cm4gLTFcbiAgICAgICAgfVxuICAgICAgICBpZiAoeCAhPSAwKSByZXR1cm4gKHggfCAwKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDEwMDA6IC8vIE51bWJlclxuICAgICAgICBhID0gK2E7XG4gICAgICAgIGIgPSArYjtcbiAgICAgICAgaWYgKGEgPCBiKSByZXR1cm4gLTE7XG4gICAgICAgIGlmIChhID4gYikgcmV0dXJuIDE7XG4gICAgICAgIGlmIChhICE9IGIpIHtcbiAgICAgICAgICBpZiAoIXRvdGFsKSByZXR1cm4gTmFOO1xuICAgICAgICAgIGlmIChhID09IGEpIHJldHVybiAxO1xuICAgICAgICAgIGlmIChiID09IGIpIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTAwMTogLy8gVGhlIHJlc3RcbiAgICAgICAgLy8gSGVyZSB3ZSBjYW4gYmUgaW4gdGhlIGZvbGxvd2luZyBjYXNlczpcbiAgICAgICAgLy8gMS4gSmF2YVNjcmlwdCBwcmltaXRpdmUgdHlwZXNcbiAgICAgICAgLy8gMi4gSmF2YVNjcmlwdCBvYmplY3QgdGhhdCBjYW4gYmUgY29lcmNlZCB0byBwcmltaXRpdmUgdHlwZXNcbiAgICAgICAgLy8gMy4gSmF2YVNjcmlwdCBvYmplY3QgdGhhbiBjYW5ub3QgYmUgY29lcmNlZCB0byBwcmltaXRpdmUgdHlwZXNcbiAgICAgICAgLy9cbiAgICAgICAgLy8gKDMpIHdpbGwgcmFpc2UgYSBbVHlwZUVycm9yXVxuICAgICAgICAvLyAoMikgd2lsbCBjb2VyY2UgdG8gcHJpbWl0aXZlIHR5cGVzIHVzaW5nIFt2YWx1ZU9mXSBvciBbdG9TdHJpbmddXG4gICAgICAgIC8vICgyKSBhbmQgKDMpLCBhZnRlciBldmVudHVhbCBjb2VyY2lvblxuICAgICAgICAvLyAtIGlmIGEgYW5kIGIgYXJlIHN0cmluZ3MsIGFwcGx5IGxleGljb2dyYXBoaWMgY29tcGFyaXNvblxuICAgICAgICAvLyAtIGlmIGEgb3IgYiBhcmUgbm90IHN0cmluZ3MsIGNvbnZlcnQgYSBhbmQgYiB0byBudW1iZXJcbiAgICAgICAgLy8gICBhbmQgYXBwbHkgc3RhbmRhcmQgY29tcGFyaXNvblxuICAgICAgICAvL1xuICAgICAgICAvLyBFeGNlcHRpb246IGAhPWAgd2lsbCBub3QgY29lcmNlL2NvbnZlcnQgaWYgYm90aCBhIGFuZCBiIGFyZSBvYmplY3RzXG4gICAgICAgIGlmIChhIDwgYikgcmV0dXJuIC0xO1xuICAgICAgICBpZiAoYSA+IGIpIHJldHVybiAxO1xuICAgICAgICBpZiAoYSAhPSBiKSB7XG4gICAgICAgICAgaWYgKCF0b3RhbCkgcmV0dXJuIE5hTjtcbiAgICAgICAgICBpZiAoYSA9PSBhKSByZXR1cm4gMTtcbiAgICAgICAgICBpZiAoYiA9PSBiKSByZXR1cm4gLTE7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDEyNTE6IC8vIEphdmFTY3JpcHQgU3ltYm9sLCBubyBvcmRlcmluZy5cbiAgICAgICAgaWYoYSAhPT0gYikge1xuICAgICAgICAgIGlmICghdG90YWwpIHJldHVybiBOYU47XG4gICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDEyNTI6IC8vIG9jYW1sIHN0cmluZ3NcbiAgICAgICAgdmFyIGEgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKGEpO1xuICAgICAgICB2YXIgYiA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcoYik7XG4gICAgICAgIGlmKGEgIT09IGIpIHtcbiAgICAgICAgICBpZihhIDwgYikgcmV0dXJuIC0xO1xuICAgICAgICAgIGlmKGEgPiBiKSByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTI1MjA6IC8vIGphdmFzY3JpcHQgc3RyaW5nc1xuICAgICAgICB2YXIgYSA9IGEudG9TdHJpbmcoKTtcbiAgICAgICAgdmFyIGIgPSBiLnRvU3RyaW5nKCk7XG4gICAgICAgIGlmKGEgIT09IGIpIHtcbiAgICAgICAgICBpZihhIDwgYikgcmV0dXJuIC0xO1xuICAgICAgICAgIGlmKGEgPiBiKSByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjQ2OiAvLyBMYXp5X3RhZ1xuICAgICAgY2FzZSAyNTQ6IC8vIERvdWJsZV9hcnJheVxuICAgICAgZGVmYXVsdDogLy8gQmxvY2sgd2l0aCBvdGhlciB0YWdcbiAgICAgICAgaWYgKGEubGVuZ3RoICE9IGIubGVuZ3RoKSByZXR1cm4gKGEubGVuZ3RoIDwgYi5sZW5ndGgpPy0xOjE7XG4gICAgICAgIGlmIChhLmxlbmd0aCA+IDEpIHN0YWNrLnB1c2goYSwgYiwgMSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc3RhY2subGVuZ3RoID09IDApIHJldHVybiAwO1xuICAgIHZhciBpID0gc3RhY2sucG9wKCk7XG4gICAgYiA9IHN0YWNrLnBvcCgpO1xuICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICBpZiAoaSArIDEgPCBhLmxlbmd0aCkgc3RhY2sucHVzaChhLCBiLCBpICsgMSk7XG4gICAgYSA9IGFbaV07XG4gICAgYiA9IGJbaV07XG4gIH1cbn1cbi8vUHJvdmlkZXM6IGNhbWxfY29tcGFyZSAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbFxuZnVuY3Rpb24gY2FtbF9jb21wYXJlIChhLCBiKSB7IHJldHVybiBjYW1sX2NvbXBhcmVfdmFsIChhLCBiLCB0cnVlKTsgfVxuLy9Qcm92aWRlczogY2FtbF9pbnRfY29tcGFyZSBtdXRhYmxlIChjb25zdCwgY29uc3QpXG5mdW5jdGlvbiBjYW1sX2ludF9jb21wYXJlIChhLCBiKSB7XG4gIGlmIChhIDwgYikgcmV0dXJuICgtMSk7IGlmIChhID09IGIpIHJldHVybiAwOyByZXR1cm4gMTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfZXF1YWwgbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbFxuZnVuY3Rpb24gY2FtbF9lcXVhbCAoeCwgeSkgeyByZXR1cm4gKyhjYW1sX2NvbXBhcmVfdmFsKHgseSxmYWxzZSkgPT0gMCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfbm90ZXF1YWwgbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbFxuZnVuY3Rpb24gY2FtbF9ub3RlcXVhbCAoeCwgeSkgeyByZXR1cm4gKyhjYW1sX2NvbXBhcmVfdmFsKHgseSxmYWxzZSkgIT0gMCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfZ3JlYXRlcmVxdWFsIG11dGFibGUgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfY29tcGFyZV92YWxcbmZ1bmN0aW9uIGNhbWxfZ3JlYXRlcmVxdWFsICh4LCB5KSB7IHJldHVybiArKGNhbWxfY29tcGFyZV92YWwoeCx5LGZhbHNlKSA+PSAwKTsgfVxuLy9Qcm92aWRlczogY2FtbF9ncmVhdGVydGhhbiBtdXRhYmxlIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NvbXBhcmVfdmFsXG5mdW5jdGlvbiBjYW1sX2dyZWF0ZXJ0aGFuICh4LCB5KSB7IHJldHVybiArKGNhbWxfY29tcGFyZV92YWwoeCx5LGZhbHNlKSA+IDApOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2xlc3NlcXVhbCBtdXRhYmxlIChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2NvbXBhcmVfdmFsXG5mdW5jdGlvbiBjYW1sX2xlc3NlcXVhbCAoeCwgeSkgeyByZXR1cm4gKyhjYW1sX2NvbXBhcmVfdmFsKHgseSxmYWxzZSkgPD0gMCk7IH1cbi8vUHJvdmlkZXM6IGNhbWxfbGVzc3RoYW4gbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9jb21wYXJlX3ZhbFxuZnVuY3Rpb24gY2FtbF9sZXNzdGhhbiAoeCwgeSkgeyByZXR1cm4gKyhjYW1sX2NvbXBhcmVfdmFsKHgseSxmYWxzZSkgPCAwKTsgfVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogY2FtbF91cGRhdGVfZHVtbXlcbmZ1bmN0aW9uIGNhbWxfdXBkYXRlX2R1bW15ICh4LCB5KSB7XG4gIGlmKCB0eXBlb2YgeT09PVwiZnVuY3Rpb25cIiApIHsgeC5mdW4gPSB5OyByZXR1cm4gMDsgfVxuICBpZiggeS5mdW4gKSB7IHguZnVuID0geS5mdW47IHJldHVybiAwOyB9XG4gIHZhciBpID0geS5sZW5ndGg7IHdoaWxlIChpLS0pIHhbaV0gPSB5W2ldOyByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfaXNfYmxvY2sgY29uc3QgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9vYmpfaXNfYmxvY2sgKHgpIHsgcmV0dXJuICsoeCBpbnN0YW5jZW9mIEFycmF5KTsgfVxuXG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX3RhZ1xuLy9SZXF1aXJlczogY2FtbF9pc19tbF9ieXRlcywgY2FtbF9pc19tbF9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfb2JqX3RhZyAoeCkge1xuICBpZiAoKHggaW5zdGFuY2VvZiBBcnJheSkgJiYgeFswXSA9PSAoeFswXSA+Pj4gMCkpXG4gICAgcmV0dXJuIHhbMF1cbiAgZWxzZSBpZiAoY2FtbF9pc19tbF9ieXRlcyh4KSlcbiAgICByZXR1cm4gMjUyXG4gIGVsc2UgaWYgKGNhbWxfaXNfbWxfc3RyaW5nKHgpKVxuICAgIHJldHVybiAyNTJcbiAgZWxzZSBpZiAoKHggaW5zdGFuY2VvZiBGdW5jdGlvbikgfHwgdHlwZW9mIHggPT0gXCJmdW5jdGlvblwiKVxuICAgIHJldHVybiAyNDdcbiAgZWxzZSBpZiAoeCAmJiB4LmNhbWxfY3VzdG9tKVxuICAgIHJldHVybiAyNTVcbiAgZWxzZVxuICAgIHJldHVybiAxMDAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX3NldF90YWcgKG11dGFibGUsIGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9vYmpfc2V0X3RhZyAoeCwgdGFnKSB7IHhbMF0gPSB0YWc7IHJldHVybiAwOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX29ial9ibG9jayBjb25zdCAoY29uc3QsY29uc3QpXG5mdW5jdGlvbiBjYW1sX29ial9ibG9jayAodGFnLCBzaXplKSB7XG4gIHZhciBvID0gbmV3IEFycmF5KHNpemUrMSk7XG4gIG9bMF09dGFnO1xuICBmb3IgKHZhciBpID0gMTsgaSA8PSBzaXplOyBpKyspIG9baV0gPSAwO1xuICByZXR1cm4gbztcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vYmpfd2l0aF90YWdcbmZ1bmN0aW9uIGNhbWxfb2JqX3dpdGhfdGFnKHRhZyx4KSB7XG4gIHZhciBsID0geC5sZW5ndGg7XG4gIHZhciBhID0gbmV3IEFycmF5KGwpO1xuICBhWzBdID0gdGFnO1xuICBmb3IodmFyIGkgPSAxOyBpIDwgbDsgaSsrICkgYVtpXSA9IHhbaV07XG4gIHJldHVybiBhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial9kdXAgbXV0YWJsZSAoY29uc3QpXG5mdW5jdGlvbiBjYW1sX29ial9kdXAgKHgpIHtcbiAgdmFyIGwgPSB4Lmxlbmd0aDtcbiAgdmFyIGEgPSBuZXcgQXJyYXkobCk7XG4gIGZvcih2YXIgaSA9IDA7IGkgPCBsOyBpKysgKSBhW2ldID0geFtpXTtcbiAgcmV0dXJuIGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX3RydW5jYXRlIChtdXRhYmxlLCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudFxuZnVuY3Rpb24gY2FtbF9vYmpfdHJ1bmNhdGUgKHgsIHMpIHtcbiAgaWYgKHM8PTAgfHwgcyArIDEgPiB4Lmxlbmd0aClcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQgKFwiT2JqLnRydW5jYXRlXCIpO1xuICBpZiAoeC5sZW5ndGggIT0gcyArIDEpIHgubGVuZ3RoID0gcyArIDE7XG4gIHJldHVybiAwO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial9tYWtlX2ZvcndhcmRcbmZ1bmN0aW9uIGNhbWxfb2JqX21ha2VfZm9yd2FyZCAoYix2KSB7XG4gIGJbMF09MjUwO1xuICBiWzFdPXY7XG4gIHJldHVybiAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbGF6eV9tYWtlX2ZvcndhcmQgY29uc3QgKGNvbnN0KVxuZnVuY3Rpb24gY2FtbF9sYXp5X21ha2VfZm9yd2FyZCAodikgeyByZXR1cm4gWzI1MCwgdl07IH1cblxuLy8vLy8vLy8vLy8vLyBDYW1saW50ZXJuYWxPT1xuLy9Qcm92aWRlczogY2FtbF9nZXRfcHVibGljX21ldGhvZCBjb25zdFxudmFyIGNhbWxfbWV0aG9kX2NhY2hlID0gW107XG5mdW5jdGlvbiBjYW1sX2dldF9wdWJsaWNfbWV0aG9kIChvYmosIHRhZywgY2FjaGVpZCkge1xuICB2YXIgbWV0aHMgPSBvYmpbMV07XG4gIHZhciBvZnMgPSBjYW1sX21ldGhvZF9jYWNoZVtjYWNoZWlkXTtcbiAgaWYgKG9mcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gTWFrZSBzdXJlIHRoZSBhcnJheSBpcyBub3Qgc3BhcnNlXG4gICAgZm9yICh2YXIgaSA9IGNhbWxfbWV0aG9kX2NhY2hlLmxlbmd0aDsgaSA8IGNhY2hlaWQ7IGkrKylcbiAgICAgIGNhbWxfbWV0aG9kX2NhY2hlW2ldID0gMDtcbiAgfSBlbHNlIGlmIChtZXRoc1tvZnNdID09PSB0YWcpIHtcbiAgICByZXR1cm4gbWV0aHNbb2ZzIC0gMV07XG4gIH1cbiAgdmFyIGxpID0gMywgaGkgPSBtZXRoc1sxXSAqIDIgKyAxLCBtaTtcbiAgd2hpbGUgKGxpIDwgaGkpIHtcbiAgICBtaSA9ICgobGkraGkpID4+IDEpIHwgMTtcbiAgICBpZiAodGFnIDwgbWV0aHNbbWkrMV0pIGhpID0gbWktMjtcbiAgICBlbHNlIGxpID0gbWk7XG4gIH1cbiAgY2FtbF9tZXRob2RfY2FjaGVbY2FjaGVpZF0gPSBsaSArIDE7XG4gIC8qIHJldHVybiAwIGlmIHRhZyBpcyBub3QgdGhlcmUgKi9cbiAgcmV0dXJuICh0YWcgPT0gbWV0aHNbbGkrMV0gPyBtZXRoc1tsaV0gOiAwKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9vb19sYXN0X2lkXG52YXIgY2FtbF9vb19sYXN0X2lkID0gMDtcblxuLy9Qcm92aWRlczogY2FtbF9zZXRfb29faWRcbi8vUmVxdWlyZXM6IGNhbWxfb29fbGFzdF9pZFxuZnVuY3Rpb24gY2FtbF9zZXRfb29faWQgKGIpIHtcbiAgYlsyXT1jYW1sX29vX2xhc3RfaWQrKztcbiAgcmV0dXJuIGI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZnJlc2hfb29faWRcbi8vUmVxdWlyZXM6IGNhbWxfb29fbGFzdF9pZFxuZnVuY3Rpb24gY2FtbF9mcmVzaF9vb19pZCgpIHtcbiAgcmV0dXJuIGNhbWxfb29fbGFzdF9pZCsrO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial9yYXdfZmllbGRcbmZ1bmN0aW9uIGNhbWxfb2JqX3Jhd19maWVsZChvLGkpIHsgcmV0dXJuIG9baSsxXSB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX3NldF9yYXdfZmllbGRcbmZ1bmN0aW9uIGNhbWxfb2JqX3NldF9yYXdfZmllbGQobyxpLHYpIHsgcmV0dXJuIG9baSsxXSA9IHYgfVxuXG4vL1Byb3ZpZGVzOiBjYW1sX29ial9yZWFjaGFibGVfd29yZHNcbmZ1bmN0aW9uIGNhbWxfb2JqX3JlYWNoYWJsZV93b3JkcyhvKSB7IHJldHVybiAwOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfb2JqX2FkZF9vZmZzZXRcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfb2JqX2FkZF9vZmZzZXQodixvZmZzZXQpIHtcbiAgY2FtbF9mYWlsd2l0aChcIk9iai5hZGRfb2Zmc2V0IGlzIG5vdCBzdXBwb3J0ZWRcIik7XG59XG4iLCIvLy8vLy8vLy8gQklHU1RSSU5HXG5cbi8vUHJvdmlkZXM6IGNhbWxfaGFzaF9taXhfYmlnc3RyaW5nXG4vL1JlcXVpcmVzOiBjYW1sX2hhc2hfbWl4X2J5dGVzX2FyclxuZnVuY3Rpb24gY2FtbF9oYXNoX21peF9iaWdzdHJpbmcoaCwgYnMpIHtcbiAgcmV0dXJuIGNhbWxfaGFzaF9taXhfYnl0ZXNfYXJyKGgsYnMuZGF0YSk7XG59XG5cbi8vUHJvdmlkZXM6IGJpZ3N0cmluZ190b19hcnJheV9idWZmZXIgbXV0YWJsZVxuZnVuY3Rpb24gYmlnc3RyaW5nX3RvX2FycmF5X2J1ZmZlcihicykge1xuICByZXR1cm4gYnMuZGF0YS5idWZmZXJcbn1cblxuLy9Qcm92aWRlczogYmlnc3RyaW5nX3RvX3R5cGVkX2FycmF5IG11dGFibGVcbmZ1bmN0aW9uIGJpZ3N0cmluZ190b190eXBlZF9hcnJheShicykge1xuICByZXR1cm4gYnMuZGF0YVxufVxuXG4vL1Byb3ZpZGVzOiBiaWdzdHJpbmdfb2ZfYXJyYXlfYnVmZmVyIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfYmFfY3JlYXRlX3Vuc2FmZVxuZnVuY3Rpb24gYmlnc3RyaW5nX29mX2FycmF5X2J1ZmZlcihhYikge1xuICB2YXIgdGEgPSBuZXcgam9vX2dsb2JhbF9vYmplY3QuVWludDhBcnJheShhYik7XG4gIHJldHVybiBjYW1sX2JhX2NyZWF0ZV91bnNhZmUoMTIsIDAsIFt0YS5sZW5ndGhdLCB0YSk7XG59XG5cbi8vUHJvdmlkZXM6IGJpZ3N0cmluZ19vZl90eXBlZF9hcnJheSBtdXRhYmxlXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2NyZWF0ZV91bnNhZmVcbmZ1bmN0aW9uIGJpZ3N0cmluZ19vZl90eXBlZF9hcnJheShiYSkge1xuICB2YXIgdGEgPSBuZXcgam9vX2dsb2JhbF9vYmplY3QuVWludDhBcnJheShiYS5idWZmZXIsIGJhLmJ5dGVPZmZzZXQsIGJhLmxlbmd0aCAqIGJhLkJZVEVTX1BFUl9FTEVNRU5UKTtcbiAgcmV0dXJuIGNhbWxfYmFfY3JlYXRlX3Vuc2FmZSgxMiwgMCwgW3RhLmxlbmd0aF0sIHRhKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iaWdzdHJpbmdfbWVtY21wXG4vL1JlcXVpcmVzOiBjYW1sX2JhX2dldF8xXG5mdW5jdGlvbiBjYW1sX2JpZ3N0cmluZ19tZW1jbXAoczEsIHBvczEsIHMyLCBwb3MyLCBsZW4pe1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgdmFyIGEgPSBjYW1sX2JhX2dldF8xKHMxLHBvczEgKyBpKTtcbiAgICB2YXIgYiA9IGNhbWxfYmFfZ2V0XzEoczIscG9zMiArIGkpO1xuICAgIGlmIChhIDwgYikgcmV0dXJuIC0xO1xuICAgIGlmIChhID4gYikgcmV0dXJuIDE7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmlnc3RyaW5nX2JsaXRfYmFfdG9fYmFcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9iaWdzdHJpbmdfYmxpdF9iYV90b19iYShiYTEsIHBvczEsIGJhMiwgcG9zMiwgbGVuKXtcbiAgaWYoMTIgIT0gYmExLmtpbmQpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY2FtbF9iaWdzdHJpbmdfYmxpdF9iYV90b19iYToga2luZCBtaXNtYXRjaFwiKTtcbiAgaWYoMTIgIT0gYmEyLmtpbmQpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY2FtbF9iaWdzdHJpbmdfYmxpdF9iYV90b19iYToga2luZCBtaXNtYXRjaFwiKTtcbiAgaWYobGVuID09IDApIHJldHVybiAwO1xuICB2YXIgb2ZzMSA9IGJhMS5vZmZzZXQocG9zMSk7XG4gIHZhciBvZnMyID0gYmEyLm9mZnNldChwb3MyKTtcbiAgaWYob2ZzMSArIGxlbiA+IGJhMS5kYXRhLmxlbmd0aCl7XG4gICAgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB9XG4gIGlmKG9mczIgKyBsZW4gPiBiYTIuZGF0YS5sZW5ndGgpe1xuICAgIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgfVxuICB2YXIgc2xpY2UgPSBiYTEuZGF0YS5zdWJhcnJheShvZnMxLG9mczErbGVuKTtcbiAgYmEyLmRhdGEuc2V0KHNsaWNlLHBvczIpO1xuICByZXR1cm4gMFxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2JpZ3N0cmluZ19ibGl0X3N0cmluZ190b19iYVxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50LCBjYW1sX2FycmF5X2JvdW5kX2Vycm9yLCBjYW1sX2FycmF5X29mX3N0cmluZ1xuLy9SZXF1aXJlczogY2FtbF9tbF9zdHJpbmdfbGVuZ3RoXG5mdW5jdGlvbiBjYW1sX2JpZ3N0cmluZ19ibGl0X3N0cmluZ190b19iYShzdHIxLCBwb3MxLCBiYTIsIHBvczIsIGxlbil7XG4gIGlmKDEyICE9IGJhMi5raW5kKVxuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImNhbWxfYmlnc3RyaW5nX2JsaXRfc3RyaW5nX3RvX2JhOiBraW5kIG1pc21hdGNoXCIpO1xuICBpZihsZW4gPT0gMCkgcmV0dXJuIDA7XG4gIHZhciBvZnMyID0gYmEyLm9mZnNldChwb3MyKTtcbiAgaWYocG9zMSArIGxlbiA+IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzdHIxKSkge1xuICAgIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgfVxuICBpZihvZnMyICsgbGVuID4gYmEyLmRhdGEubGVuZ3RoKSB7XG4gICAgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB9XG4gIHZhciBzbGljZSA9IGNhbWxfYXJyYXlfb2Zfc3RyaW5nKHN0cjEpLnNsaWNlKHBvczEscG9zMSArIGxlbik7XG4gIGJhMi5kYXRhLnNldChzbGljZSxvZnMyKTtcbiAgcmV0dXJuIDBcbn1cblxuLy9Qcm92aWRlczogY2FtbF9iaWdzdHJpbmdfYmxpdF9ieXRlc190b19iYVxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50LCBjYW1sX2FycmF5X2JvdW5kX2Vycm9yLCBjYW1sX2FycmF5X29mX2J5dGVzXG4vL1JlcXVpcmVzOiBjYW1sX21sX2J5dGVzX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9iaWdzdHJpbmdfYmxpdF9ieXRlc190b19iYShzdHIxLCBwb3MxLCBiYTIsIHBvczIsIGxlbil7XG4gIGlmKDEyICE9IGJhMi5raW5kKVxuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcImNhbWxfYmlnc3RyaW5nX2JsaXRfc3RyaW5nX3RvX2JhOiBraW5kIG1pc21hdGNoXCIpO1xuICBpZihsZW4gPT0gMCkgcmV0dXJuIDA7XG4gIHZhciBvZnMyID0gYmEyLm9mZnNldChwb3MyKTtcbiAgaWYocG9zMSArIGxlbiA+IGNhbWxfbWxfYnl0ZXNfbGVuZ3RoKHN0cjEpKSB7XG4gICAgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICB9XG4gIGlmKG9mczIgKyBsZW4gPiBiYTIuZGF0YS5sZW5ndGgpIHtcbiAgICBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIH1cbiAgdmFyIHNsaWNlID0gY2FtbF9hcnJheV9vZl9ieXRlcyhzdHIxKS5zbGljZShwb3MxLHBvczEgKyBsZW4pO1xuICBiYTIuZGF0YS5zZXQoc2xpY2Usb2ZzMik7XG4gIHJldHVybiAwXG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYmlnc3RyaW5nX2JsaXRfYmFfdG9fYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfaW52YWxpZF9hcmd1bWVudCwgY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuLy9SZXF1aXJlczogY2FtbF9ibGl0X2J5dGVzLCBjYW1sX2J5dGVzX29mX2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX21sX2J5dGVzX2xlbmd0aFxuZnVuY3Rpb24gY2FtbF9iaWdzdHJpbmdfYmxpdF9iYV90b19ieXRlcyhiYTEsIHBvczEsIGJ5dGVzMiwgcG9zMiwgbGVuKXtcbiAgaWYoMTIgIT0gYmExLmtpbmQpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50KFwiY2FtbF9iaWdzdHJpbmdfYmxpdF9zdHJpbmdfdG9fYmE6IGtpbmQgbWlzbWF0Y2hcIik7XG4gIGlmKGxlbiA9PSAwKSByZXR1cm4gMDtcbiAgdmFyIG9mczEgPSBiYTEub2Zmc2V0KHBvczEpO1xuICBpZihvZnMxICsgbGVuID4gYmExLmRhdGEubGVuZ3RoKXtcbiAgICBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIH1cbiAgaWYocG9zMiArIGxlbiA+IGNhbWxfbWxfYnl0ZXNfbGVuZ3RoKGJ5dGVzMikpe1xuICAgIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgfVxuICB2YXIgc2xpY2UgPSBiYTEuZGF0YS5zbGljZShvZnMxLCBvZnMxK2xlbik7XG4gIGNhbWxfYmxpdF9ieXRlcyhjYW1sX2J5dGVzX29mX2FycmF5KHNsaWNlKSwgMCwgYnl0ZXMyLCBwb3MyLCBsZW4pO1xuICByZXR1cm4gMFxufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy9Qcm92aWRlczogY2FtbF9tbF9kZWJ1Z19pbmZvX3N0YXR1cyBjb25zdFxuZnVuY3Rpb24gY2FtbF9tbF9kZWJ1Z19pbmZvX3N0YXR1cyAoKSB7IHJldHVybiAwOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2JhY2t0cmFjZV9zdGF0dXMgY29uc3RcbmZ1bmN0aW9uIGNhbWxfYmFja3RyYWNlX3N0YXR1cyAoKSB7IHJldHVybiAwOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX2dldF9leGNlcHRpb25fYmFja3RyYWNlIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2dldF9leGNlcHRpb25fYmFja3RyYWNlICgpIHsgcmV0dXJuIDA7IH1cbi8vUHJvdmlkZXM6IGNhbWxfZ2V0X2V4Y2VwdGlvbl9yYXdfYmFja3RyYWNlIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2dldF9leGNlcHRpb25fcmF3X2JhY2t0cmFjZSAoKSB7IHJldHVybiBbMF07IH1cbi8vUHJvdmlkZXM6IGNhbWxfcmVjb3JkX2JhY2t0cmFjZVxuZnVuY3Rpb24gY2FtbF9yZWNvcmRfYmFja3RyYWNlICgpIHsgcmV0dXJuIDA7IH1cbi8vUHJvdmlkZXM6IGNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlIGNvbnN0XG5mdW5jdGlvbiBjYW1sX2NvbnZlcnRfcmF3X2JhY2t0cmFjZSAoKSB7IHJldHVybiBbMF07IH1cbi8vUHJvdmlkZXM6IGNhbWxfcmF3X2JhY2t0cmFjZV9sZW5ndGhcbmZ1bmN0aW9uIGNhbWxfcmF3X2JhY2t0cmFjZV9sZW5ndGgoKSB7IHJldHVybiAwOyB9XG4vL1Byb3ZpZGVzOiBjYW1sX3Jhd19iYWNrdHJhY2VfbmV4dF9zbG90XG5mdW5jdGlvbiBjYW1sX3Jhd19iYWNrdHJhY2VfbmV4dF9zbG90KCkgeyByZXR1cm4gMCB9XG4vL1Byb3ZpZGVzOiBjYW1sX3Jhd19iYWNrdHJhY2Vfc2xvdFxuLy9SZXF1aXJlczogY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX3Jhd19iYWNrdHJhY2Vfc2xvdCAoKSB7XG4gIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIlByaW50ZXhjLmdldF9yYXdfYmFja3RyYWNlX3Nsb3Q6IGluZGV4IG91dCBvZiBib3VuZHNcIik7XG59XG4vL1Byb3ZpZGVzOiBjYW1sX3Jlc3RvcmVfcmF3X2JhY2t0cmFjZVxuZnVuY3Rpb24gY2FtbF9yZXN0b3JlX3Jhd19iYWNrdHJhY2UoZXhuLCBidCkgeyByZXR1cm4gMCB9XG4vL1Byb3ZpZGVzOiBjYW1sX2dldF9jdXJyZW50X2NhbGxzdGFjayBjb25zdFxuZnVuY3Rpb24gY2FtbF9nZXRfY3VycmVudF9jYWxsc3RhY2sgKCkgeyByZXR1cm4gWzBdOyB9XG5cbi8vUHJvdmlkZXM6IGNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlX3Nsb3Rcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbmZ1bmN0aW9uIGNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlX3Nsb3QoKXtcbiAgY2FtbF9mYWlsd2l0aChcImNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlX3Nsb3RcIik7XG59XG4iLCIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdGl2ZSBDYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICovXG4vKiAgZW4gQXV0b21hdGlxdWUuICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkICAgICovXG4vKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHdpdGggICAgICovXG4vKiAgdGhlIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIGZpbGUgLi4vTElDRU5TRS4gICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbi8qICRJZDogbGV4aW5nLmMgNjA0NSAyMDA0LTAxLTAxIDE2OjQyOjQzWiBkb2xpZ2V6ICQgKi9cblxuLyogVGhlIHRhYmxlLWRyaXZlbiBhdXRvbWF0b24gZm9yIGxleGVycyBnZW5lcmF0ZWQgYnkgY2FtbGxleC4gKi9cblxuLy9Qcm92aWRlczogY2FtbF9sZXhfYXJyYXlcbi8vUmVxdWlyZXM6IGNhbWxfanNieXRlc19vZl9zdHJpbmdcbmZ1bmN0aW9uIGNhbWxfbGV4X2FycmF5KHMpIHtcbiAgcyA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcocyk7XG4gIHZhciBsID0gcy5sZW5ndGggLyAyO1xuICB2YXIgYSA9IG5ldyBBcnJheShsKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpKyspXG4gICAgYVtpXSA9IChzLmNoYXJDb2RlQXQoMiAqIGkpIHwgKHMuY2hhckNvZGVBdCgyICogaSArIDEpIDw8IDgpKSA8PCAxNiA+PiAxNjtcbiAgcmV0dXJuIGE7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbGV4X2VuZ2luZVxuLy9SZXF1aXJlczogY2FtbF9mYWlsd2l0aCwgY2FtbF9sZXhfYXJyYXksIGNhbWxfYXJyYXlfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfbGV4X2VuZ2luZSh0YmwsIHN0YXJ0X3N0YXRlLCBsZXhidWYpIHtcbiAgdmFyIGxleF9idWZmZXIgPSAyO1xuICB2YXIgbGV4X2J1ZmZlcl9sZW4gPSAzO1xuICB2YXIgbGV4X3N0YXJ0X3BvcyA9IDU7XG4gIHZhciBsZXhfY3Vycl9wb3MgPSA2O1xuICB2YXIgbGV4X2xhc3RfcG9zID0gNztcbiAgdmFyIGxleF9sYXN0X2FjdGlvbiA9IDg7XG4gIHZhciBsZXhfZW9mX3JlYWNoZWQgPSA5O1xuICB2YXIgbGV4X2Jhc2UgPSAxO1xuICB2YXIgbGV4X2JhY2t0cmsgPSAyO1xuICB2YXIgbGV4X2RlZmF1bHQgPSAzO1xuICB2YXIgbGV4X3RyYW5zID0gNDtcbiAgdmFyIGxleF9jaGVjayA9IDU7XG5cbiAgaWYgKCF0YmwubGV4X2RlZmF1bHQpIHtcbiAgICB0YmwubGV4X2Jhc2UgPSAgICBjYW1sX2xleF9hcnJheSAodGJsW2xleF9iYXNlXSk7XG4gICAgdGJsLmxleF9iYWNrdHJrID0gY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfYmFja3Rya10pO1xuICAgIHRibC5sZXhfY2hlY2sgPSAgIGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X2NoZWNrXSk7XG4gICAgdGJsLmxleF90cmFucyA9ICAgY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfdHJhbnNdKTtcbiAgICB0YmwubGV4X2RlZmF1bHQgPSBjYW1sX2xleF9hcnJheSAodGJsW2xleF9kZWZhdWx0XSk7XG4gIH1cblxuICB2YXIgYywgc3RhdGUgPSBzdGFydF9zdGF0ZTtcblxuICB2YXIgYnVmZmVyID0gY2FtbF9hcnJheV9vZl9ieXRlcyhsZXhidWZbbGV4X2J1ZmZlcl0pO1xuXG4gIGlmIChzdGF0ZSA+PSAwKSB7XG4gICAgLyogRmlyc3QgZW50cnkgKi9cbiAgICBsZXhidWZbbGV4X2xhc3RfcG9zXSA9IGxleGJ1ZltsZXhfc3RhcnRfcG9zXSA9IGxleGJ1ZltsZXhfY3Vycl9wb3NdO1xuICAgIGxleGJ1ZltsZXhfbGFzdF9hY3Rpb25dID0gLTE7XG4gIH0gZWxzZSB7XG4gICAgLyogUmVlbnRyeSBhZnRlciByZWZpbGwgKi9cbiAgICBzdGF0ZSA9IC1zdGF0ZSAtIDE7XG4gIH1cbiAgZm9yKDs7KSB7XG4gICAgLyogTG9va3VwIGJhc2UgYWRkcmVzcyBvciBhY3Rpb24gbnVtYmVyIGZvciBjdXJyZW50IHN0YXRlICovXG4gICAgdmFyIGJhc2UgPSB0YmwubGV4X2Jhc2Vbc3RhdGVdO1xuICAgIGlmIChiYXNlIDwgMCkgcmV0dXJuIC1iYXNlLTE7XG4gICAgLyogU2VlIGlmIGl0J3MgYSBiYWNrdHJhY2sgcG9pbnQgKi9cbiAgICB2YXIgYmFja3RyayA9IHRibC5sZXhfYmFja3Rya1tzdGF0ZV07XG4gICAgaWYgKGJhY2t0cmsgPj0gMCkge1xuICAgICAgbGV4YnVmW2xleF9sYXN0X3Bvc10gPSBsZXhidWZbbGV4X2N1cnJfcG9zXTtcbiAgICAgIGxleGJ1ZltsZXhfbGFzdF9hY3Rpb25dID0gYmFja3RyaztcbiAgICB9XG4gICAgLyogU2VlIGlmIHdlIG5lZWQgYSByZWZpbGwgKi9cbiAgICBpZiAobGV4YnVmW2xleF9jdXJyX3Bvc10gPj0gbGV4YnVmW2xleF9idWZmZXJfbGVuXSl7XG4gICAgICBpZiAobGV4YnVmW2xleF9lb2ZfcmVhY2hlZF0gPT0gMClcbiAgICAgICAgcmV0dXJuIC1zdGF0ZSAtIDE7XG4gICAgICBlbHNlXG4gICAgICAgIGMgPSAyNTY7XG4gICAgfWVsc2V7XG4gICAgICAvKiBSZWFkIG5leHQgaW5wdXQgY2hhciAqL1xuICAgICAgYyA9IGJ1ZmZlcltsZXhidWZbbGV4X2N1cnJfcG9zXV07XG4gICAgICBsZXhidWZbbGV4X2N1cnJfcG9zXSArKztcbiAgICB9XG4gICAgLyogRGV0ZXJtaW5lIG5leHQgc3RhdGUgKi9cbiAgICBpZiAodGJsLmxleF9jaGVja1tiYXNlICsgY10gPT0gc3RhdGUpXG4gICAgICBzdGF0ZSA9IHRibC5sZXhfdHJhbnNbYmFzZSArIGNdO1xuICAgIGVsc2VcbiAgICAgIHN0YXRlID0gdGJsLmxleF9kZWZhdWx0W3N0YXRlXTtcbiAgICAvKiBJZiBubyB0cmFuc2l0aW9uIG9uIHRoaXMgY2hhciwgcmV0dXJuIHRvIGxhc3QgYmFja3RyYWNrIHBvaW50ICovXG4gICAgaWYgKHN0YXRlIDwgMCkge1xuICAgICAgbGV4YnVmW2xleF9jdXJyX3Bvc10gPSBsZXhidWZbbGV4X2xhc3RfcG9zXTtcbiAgICAgIGlmIChsZXhidWZbbGV4X2xhc3RfYWN0aW9uXSA9PSAtMSlcbiAgICAgICAgY2FtbF9mYWlsd2l0aChcImxleGluZzogZW1wdHkgdG9rZW5cIik7XG4gICAgICBlbHNlXG4gICAgICAgIHJldHVybiBsZXhidWZbbGV4X2xhc3RfYWN0aW9uXTtcbiAgICB9ZWxzZXtcbiAgICAgIC8qIEVyYXNlIHRoZSBFT0YgY29uZGl0aW9uIG9ubHkgaWYgdGhlIEVPRiBwc2V1ZG8tY2hhcmFjdGVyIHdhc1xuICAgICAgICAgY29uc3VtZWQgYnkgdGhlIGF1dG9tYXRvbiAoaS5lLiB0aGVyZSB3YXMgbm8gYmFja3RyYWNrIGFib3ZlKVxuICAgICAgKi9cbiAgICAgIGlmIChjID09IDI1NikgbGV4YnVmW2xleF9lb2ZfcmVhY2hlZF0gPSAwO1xuICAgIH1cbiAgfVxufVxuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiBOZXcgbGV4ZXIgZW5naW5lLCB3aXRoIG1lbW9yeSBvZiBwb3NpdGlvbnMgICovXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbi8vUHJvdmlkZXM6IGNhbWxfbmV3X2xleF9lbmdpbmVcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGgsIGNhbWxfbGV4X2FycmF5XG4vL1JlcXVpcmVzOiBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nLCBjYW1sX2FycmF5X29mX2J5dGVzXG5mdW5jdGlvbiBjYW1sX2xleF9ydW5fbWVtKHMsIGksIG1lbSwgY3Vycl9wb3MpIHtcbiAgZm9yICg7Oykge1xuICAgIHZhciBkc3QgPSBzLmNoYXJDb2RlQXQoaSk7IGkrKztcbiAgICBpZiAoZHN0ID09IDB4ZmYpIHJldHVybjtcbiAgICB2YXIgc3JjID0gcy5jaGFyQ29kZUF0KGkpOyBpKys7XG4gICAgaWYgKHNyYyA9PSAweGZmKVxuICAgICAgbWVtIFtkc3QgKyAxXSA9IGN1cnJfcG9zO1xuICAgIGVsc2VcbiAgICAgIG1lbSBbZHN0ICsgMV0gPSBtZW0gW3NyYyArIDFdO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNhbWxfbGV4X3J1bl90YWcocywgaSwgbWVtKSB7XG4gIGZvciAoOzspIHtcbiAgICB2YXIgZHN0ID0gcy5jaGFyQ29kZUF0KGkpOyBpKys7XG4gICAgaWYgKGRzdCA9PSAweGZmKSByZXR1cm4gO1xuICAgIHZhciBzcmMgPSBzLmNoYXJDb2RlQXQoaSk7IGkrKztcbiAgICBpZiAoc3JjID09IDB4ZmYpXG4gICAgICBtZW0gW2RzdCArIDFdID0gLTE7XG4gICAgZWxzZVxuICAgICAgbWVtIFtkc3QgKyAxXSA9IG1lbSBbc3JjICsgMV07XG4gIH1cbn1cblxuZnVuY3Rpb24gY2FtbF9uZXdfbGV4X2VuZ2luZSh0YmwsIHN0YXJ0X3N0YXRlLCBsZXhidWYpIHtcbiAgdmFyIGxleF9idWZmZXIgPSAyO1xuICB2YXIgbGV4X2J1ZmZlcl9sZW4gPSAzO1xuICB2YXIgbGV4X3N0YXJ0X3BvcyA9IDU7XG4gIHZhciBsZXhfY3Vycl9wb3MgPSA2O1xuICB2YXIgbGV4X2xhc3RfcG9zID0gNztcbiAgdmFyIGxleF9sYXN0X2FjdGlvbiA9IDg7XG4gIHZhciBsZXhfZW9mX3JlYWNoZWQgPSA5O1xuICB2YXIgbGV4X21lbSA9IDEwO1xuICB2YXIgbGV4X2Jhc2UgPSAxO1xuICB2YXIgbGV4X2JhY2t0cmsgPSAyO1xuICB2YXIgbGV4X2RlZmF1bHQgPSAzO1xuICB2YXIgbGV4X3RyYW5zID0gNDtcbiAgdmFyIGxleF9jaGVjayA9IDU7XG4gIHZhciBsZXhfYmFzZV9jb2RlID0gNjtcbiAgdmFyIGxleF9iYWNrdHJrX2NvZGUgPSA3O1xuICB2YXIgbGV4X2RlZmF1bHRfY29kZSA9IDg7XG4gIHZhciBsZXhfdHJhbnNfY29kZSA9IDk7XG4gIHZhciBsZXhfY2hlY2tfY29kZSA9IDEwO1xuICB2YXIgbGV4X2NvZGUgPSAxMTtcblxuICBpZiAoIXRibC5sZXhfZGVmYXVsdCkge1xuICAgIHRibC5sZXhfYmFzZSA9ICAgIGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X2Jhc2VdKTtcbiAgICB0YmwubGV4X2JhY2t0cmsgPSBjYW1sX2xleF9hcnJheSAodGJsW2xleF9iYWNrdHJrXSk7XG4gICAgdGJsLmxleF9jaGVjayA9ICAgY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfY2hlY2tdKTtcbiAgICB0YmwubGV4X3RyYW5zID0gICBjYW1sX2xleF9hcnJheSAodGJsW2xleF90cmFuc10pO1xuICAgIHRibC5sZXhfZGVmYXVsdCA9IGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X2RlZmF1bHRdKTtcbiAgfVxuICBpZiAoIXRibC5sZXhfZGVmYXVsdF9jb2RlKSB7XG4gICAgdGJsLmxleF9iYXNlX2NvZGUgPSAgICBjYW1sX2xleF9hcnJheSAodGJsW2xleF9iYXNlX2NvZGVdKTtcbiAgICB0YmwubGV4X2JhY2t0cmtfY29kZSA9IGNhbWxfbGV4X2FycmF5ICh0YmxbbGV4X2JhY2t0cmtfY29kZV0pO1xuICAgIHRibC5sZXhfY2hlY2tfY29kZSA9ICAgY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfY2hlY2tfY29kZV0pO1xuICAgIHRibC5sZXhfdHJhbnNfY29kZSA9ICAgY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfdHJhbnNfY29kZV0pO1xuICAgIHRibC5sZXhfZGVmYXVsdF9jb2RlID0gY2FtbF9sZXhfYXJyYXkgKHRibFtsZXhfZGVmYXVsdF9jb2RlXSk7XG4gIH1cbiAgaWYgKHRibC5sZXhfY29kZSA9PSBudWxsKSB0YmwubGV4X2NvZGUgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHRibFtsZXhfY29kZV0pO1xuXG4gIHZhciBjLCBzdGF0ZSA9IHN0YXJ0X3N0YXRlO1xuXG4gIHZhciBidWZmZXIgPSBjYW1sX2FycmF5X29mX2J5dGVzKGxleGJ1ZltsZXhfYnVmZmVyXSk7XG5cbiAgaWYgKHN0YXRlID49IDApIHtcbiAgICAvKiBGaXJzdCBlbnRyeSAqL1xuICAgIGxleGJ1ZltsZXhfbGFzdF9wb3NdID0gbGV4YnVmW2xleF9zdGFydF9wb3NdID0gbGV4YnVmW2xleF9jdXJyX3Bvc107XG4gICAgbGV4YnVmW2xleF9sYXN0X2FjdGlvbl0gPSAtMTtcbiAgfSBlbHNlIHtcbiAgICAvKiBSZWVudHJ5IGFmdGVyIHJlZmlsbCAqL1xuICAgIHN0YXRlID0gLXN0YXRlIC0gMTtcbiAgfVxuICBmb3IoOzspIHtcbiAgICAvKiBMb29rdXAgYmFzZSBhZGRyZXNzIG9yIGFjdGlvbiBudW1iZXIgZm9yIGN1cnJlbnQgc3RhdGUgKi9cbiAgICB2YXIgYmFzZSA9IHRibC5sZXhfYmFzZVtzdGF0ZV07XG4gICAgaWYgKGJhc2UgPCAwKSB7XG4gICAgICB2YXIgcGNfb2ZmID0gdGJsLmxleF9iYXNlX2NvZGVbc3RhdGVdO1xuICAgICAgY2FtbF9sZXhfcnVuX3RhZyh0YmwubGV4X2NvZGUsIHBjX29mZiwgbGV4YnVmW2xleF9tZW1dKTtcbiAgICAgIHJldHVybiAtYmFzZS0xO1xuICAgIH1cbiAgICAvKiBTZWUgaWYgaXQncyBhIGJhY2t0cmFjayBwb2ludCAqL1xuICAgIHZhciBiYWNrdHJrID0gdGJsLmxleF9iYWNrdHJrW3N0YXRlXTtcbiAgICBpZiAoYmFja3RyayA+PSAwKSB7XG4gICAgICB2YXIgcGNfb2ZmID0gdGJsLmxleF9iYWNrdHJrX2NvZGVbc3RhdGVdO1xuICAgICAgY2FtbF9sZXhfcnVuX3RhZyh0YmwubGV4X2NvZGUsIHBjX29mZiwgbGV4YnVmW2xleF9tZW1dKTtcbiAgICAgIGxleGJ1ZltsZXhfbGFzdF9wb3NdID0gbGV4YnVmW2xleF9jdXJyX3Bvc107XG4gICAgICBsZXhidWZbbGV4X2xhc3RfYWN0aW9uXSA9IGJhY2t0cms7XG4gICAgfVxuICAgIC8qIFNlZSBpZiB3ZSBuZWVkIGEgcmVmaWxsICovXG4gICAgaWYgKGxleGJ1ZltsZXhfY3Vycl9wb3NdID49IGxleGJ1ZltsZXhfYnVmZmVyX2xlbl0pe1xuICAgICAgaWYgKGxleGJ1ZltsZXhfZW9mX3JlYWNoZWRdID09IDApXG4gICAgICAgIHJldHVybiAtc3RhdGUgLSAxO1xuICAgICAgZWxzZVxuICAgICAgICBjID0gMjU2O1xuICAgIH1lbHNle1xuICAgICAgLyogUmVhZCBuZXh0IGlucHV0IGNoYXIgKi9cbiAgICAgIGMgPSBidWZmZXJbbGV4YnVmW2xleF9jdXJyX3Bvc11dO1xuICAgICAgbGV4YnVmW2xleF9jdXJyX3Bvc10gKys7XG4gICAgfVxuICAgIC8qIERldGVybWluZSBuZXh0IHN0YXRlICovXG4gICAgdmFyIHBzdGF0ZSA9IHN0YXRlIDtcbiAgICBpZiAodGJsLmxleF9jaGVja1tiYXNlICsgY10gPT0gc3RhdGUpXG4gICAgICBzdGF0ZSA9IHRibC5sZXhfdHJhbnNbYmFzZSArIGNdO1xuICAgIGVsc2VcbiAgICAgIHN0YXRlID0gdGJsLmxleF9kZWZhdWx0W3N0YXRlXTtcbiAgICAvKiBJZiBubyB0cmFuc2l0aW9uIG9uIHRoaXMgY2hhciwgcmV0dXJuIHRvIGxhc3QgYmFja3RyYWNrIHBvaW50ICovXG4gICAgaWYgKHN0YXRlIDwgMCkge1xuICAgICAgbGV4YnVmW2xleF9jdXJyX3Bvc10gPSBsZXhidWZbbGV4X2xhc3RfcG9zXTtcbiAgICAgIGlmIChsZXhidWZbbGV4X2xhc3RfYWN0aW9uXSA9PSAtMSlcbiAgICAgICAgY2FtbF9mYWlsd2l0aChcImxleGluZzogZW1wdHkgdG9rZW5cIik7XG4gICAgICBlbHNlXG4gICAgICAgIHJldHVybiBsZXhidWZbbGV4X2xhc3RfYWN0aW9uXTtcbiAgICB9ZWxzZXtcbiAgICAgIC8qIElmIHNvbWUgdHJhbnNpdGlvbiwgZ2V0IGFuZCBwZXJmb3JtIG1lbW9yeSBtb3ZlcyAqL1xuICAgICAgdmFyIGJhc2VfY29kZSA9IHRibC5sZXhfYmFzZV9jb2RlW3BzdGF0ZV0sIHBjX29mZjtcbiAgICAgIGlmICh0YmwubGV4X2NoZWNrX2NvZGVbYmFzZV9jb2RlICsgY10gPT0gcHN0YXRlKVxuICAgICAgICBwY19vZmYgPSB0YmwubGV4X3RyYW5zX2NvZGVbYmFzZV9jb2RlICsgY107XG4gICAgICBlbHNlXG4gICAgICAgIHBjX29mZiA9IHRibC5sZXhfZGVmYXVsdF9jb2RlW3BzdGF0ZV07XG4gICAgICBpZiAocGNfb2ZmID4gMClcbiAgICAgICAgY2FtbF9sZXhfcnVuX21lbVxuICAgICAgKHRibC5sZXhfY29kZSwgcGNfb2ZmLCBsZXhidWZbbGV4X21lbV0sIGxleGJ1ZltsZXhfY3Vycl9wb3NdKTtcbiAgICAgIC8qIEVyYXNlIHRoZSBFT0YgY29uZGl0aW9uIG9ubHkgaWYgdGhlIEVPRiBwc2V1ZG8tY2hhcmFjdGVyIHdhc1xuICAgICAgICAgY29uc3VtZWQgYnkgdGhlIGF1dG9tYXRvbiAoaS5lLiB0aGVyZSB3YXMgbm8gYmFja3RyYWNrIGFib3ZlKVxuICAgICAgKi9cbiAgICAgIGlmIChjID09IDI1NikgbGV4YnVmW2xleF9lb2ZfcmVhY2hlZF0gPSAwO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4vLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbi8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdpdGggbGlua2luZyBleGNlcHRpb247XG4vLyBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4vL1xuLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4vLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuLy8gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4vL1xuLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4vLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZVxuLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS5cblxuLy8vLy8vLy8vLy8vLyBBcnJheVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X3N1YiBtdXRhYmxlXG5mdW5jdGlvbiBjYW1sX2FycmF5X3N1YiAoYSwgaSwgbGVuKSB7XG4gIHZhciBhMiA9IG5ldyBBcnJheShsZW4rMSk7XG4gIGEyWzBdPTA7XG4gIGZvcih2YXIgaTIgPSAxLCBpMT0gaSsxOyBpMiA8PSBsZW47IGkyKyssaTErKyApe1xuICAgIGEyW2kyXT1hW2kxXTtcbiAgfVxuICByZXR1cm4gYTI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfYXJyYXlfYXBwZW5kIG11dGFibGVcbmZ1bmN0aW9uIGNhbWxfYXJyYXlfYXBwZW5kKGExLCBhMikge1xuICB2YXIgbDEgPSBhMS5sZW5ndGgsIGwyID0gYTIubGVuZ3RoO1xuICB2YXIgbCA9IGwxK2wyLTFcbiAgdmFyIGEgPSBuZXcgQXJyYXkobCk7XG4gIGFbMF0gPSAwO1xuICB2YXIgaSA9IDEsaiA9IDE7XG4gIGZvcig7aTxsMTtpKyspIGFbaV09YTFbaV07XG4gIGZvcig7aTxsO2krKyxqKyspIGFbaV09YTJbal07XG4gIHJldHVybiBhO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X2NvbmNhdCBtdXRhYmxlXG5mdW5jdGlvbiBjYW1sX2FycmF5X2NvbmNhdChsKSB7XG4gIHZhciBhID0gWzBdO1xuICB3aGlsZSAobCAhPT0gMCkge1xuICAgIHZhciBiID0gbFsxXTtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGIubGVuZ3RoOyBpKyspIGEucHVzaChiW2ldKTtcbiAgICBsID0gbFsyXTtcbiAgfVxuICByZXR1cm4gYTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9ibGl0XG5mdW5jdGlvbiBjYW1sX2FycmF5X2JsaXQoYTEsIGkxLCBhMiwgaTIsIGxlbikge1xuICBpZiAoaTIgPD0gaTEpIHtcbiAgICBmb3IgKHZhciBqID0gMTsgaiA8PSBsZW47IGorKykgYTJbaTIgKyBqXSA9IGExW2kxICsgal07XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgaiA9IGxlbjsgaiA+PSAxOyBqLS0pIGEyW2kyICsgal0gPSBhMVtpMSArIGpdO1xuICB9O1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9mbG9hdGFycmF5X2JsaXRcbmZ1bmN0aW9uIGNhbWxfZmxvYXRhcnJheV9ibGl0KGExLCBpMSwgYTIsIGkyLCBsZW4pIHtcbiAgaWYgKGkyIDw9IGkxKSB7XG4gICAgZm9yICh2YXIgaiA9IDE7IGogPD0gbGVuOyBqKyspIGEyW2kyICsgal0gPSBhMVtpMSArIGpdO1xuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIGogPSBsZW47IGogPj0gMTsgai0tKSBhMltpMiArIGpdID0gYTFbaTEgKyBqXTtcbiAgfTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vLy8vLy8vLy8vLy8gUGVydmFzaXZlXG4vL1Byb3ZpZGVzOiBjYW1sX2FycmF5X3NldCAobXV0YWJsZSwgY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9hcnJheV9zZXQgKGFycmF5LCBpbmRleCwgbmV3dmFsKSB7XG4gIGlmICgoaW5kZXggPCAwKSB8fCAoaW5kZXggPj0gYXJyYXkubGVuZ3RoIC0gMSkpIGNhbWxfYXJyYXlfYm91bmRfZXJyb3IoKTtcbiAgYXJyYXlbaW5kZXgrMV09bmV3dmFsOyByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9nZXQgbXV0YWJsZSAoY29uc3QsIGNvbnN0KVxuLy9SZXF1aXJlczogY2FtbF9hcnJheV9ib3VuZF9lcnJvclxuZnVuY3Rpb24gY2FtbF9hcnJheV9nZXQgKGFycmF5LCBpbmRleCkge1xuICBpZiAoKGluZGV4IDwgMCkgfHwgKGluZGV4ID49IGFycmF5Lmxlbmd0aCAtIDEpKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHJldHVybiBhcnJheVtpbmRleCsxXTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9hcnJheV9maWxsXG5mdW5jdGlvbiBjYW1sX2FycmF5X2ZpbGwoYXJyYXksIG9mcywgbGVuLCB2KXtcbiAgZm9yKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKXtcbiAgICBhcnJheVtvZnMraSsxXSA9IHY7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfY2hlY2tfYm91bmQgKGNvbnN0LCBjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfY2hlY2tfYm91bmQgKGFycmF5LCBpbmRleCkge1xuICBpZiAoaW5kZXggPj4+IDAgPj0gYXJyYXkubGVuZ3RoIC0gMSkgY2FtbF9hcnJheV9ib3VuZF9lcnJvcigpO1xuICByZXR1cm4gYXJyYXk7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWFrZV92ZWN0IGNvbnN0IChjb25zdCwgY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX21ha2VfdmVjdCAobGVuLCBpbml0KSB7XG4gIGlmIChsZW4gPCAwKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHZhciBsZW4gPSBsZW4gKyAxIHwgMDtcbiAgdmFyIGIgPSBuZXcgQXJyYXkobGVuKTtcbiAgYlswXT0wO1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGxlbjsgaSsrKSBiW2ldID0gaW5pdDtcbiAgcmV0dXJuIGI7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfbWFrZV9mbG9hdF92ZWN0IGNvbnN0IChjb25zdClcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYm91bmRfZXJyb3JcbmZ1bmN0aW9uIGNhbWxfbWFrZV9mbG9hdF92ZWN0KGxlbil7XG4gIGlmIChsZW4gPCAwKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHZhciBsZW4gPSBsZW4gKyAxIHwgMDtcbiAgdmFyIGIgPSBuZXcgQXJyYXkobGVuKTtcbiAgYlswXT0yNTQ7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgbGVuOyBpKyspIGJbaV0gPSAwO1xuICByZXR1cm4gYlxufVxuLy9Qcm92aWRlczogY2FtbF9mbG9hdGFycmF5X2NyZWF0ZSBjb25zdCAoY29uc3QpXG4vL1JlcXVpcmVzOiBjYW1sX2FycmF5X2JvdW5kX2Vycm9yXG5mdW5jdGlvbiBjYW1sX2Zsb2F0YXJyYXlfY3JlYXRlKGxlbil7XG4gIGlmIChsZW4gPCAwKSBjYW1sX2FycmF5X2JvdW5kX2Vycm9yKCk7XG4gIHZhciBsZW4gPSBsZW4gKyAxIHwgMDtcbiAgdmFyIGIgPSBuZXcgQXJyYXkobGVuKTtcbiAgYlswXT0yNTQ7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgbGVuOyBpKyspIGJbaV0gPSAwO1xuICByZXR1cm4gYlxufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwIErDqXLDtG1lIFZvdWlsbG9uXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vIFdlYWsgQVBJLCBidXQgd2l0aG91dCB0aGUgd2VhayBzZW1hbnRpY3NcblxuLy9Qcm92aWRlczogY2FtbF9lcGhlX2tleV9vZmZzZXRcbnZhciBjYW1sX2VwaGVfa2V5X29mZnNldCA9IDNcblxuLy9Qcm92aWRlczogY2FtbF9lcGhlX2RhdGFfb2Zmc2V0XG52YXIgY2FtbF9lcGhlX2RhdGFfb2Zmc2V0ID0gMlxuXG4vL1Byb3ZpZGVzOiBjYW1sX3dlYWtfY3JlYXRlXG4vL1JlcXVpcmVzOiBjYW1sX2VwaGVfa2V5X29mZnNldCwgY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiBjYW1sX3dlYWtfY3JlYXRlIChuKSB7XG4gIGlmIChuIDwgMCkgY2FtbF9pbnZhbGlkX2FyZ3VtZW50IChcIldlYWsuY3JlYXRlXCIpO1xuICB2YXIgeCA9IFsyNTEsXCJjYW1sX2VwaGVfbGlzdF9oZWFkXCJdO1xuICB4Lmxlbmd0aCA9IGNhbWxfZXBoZV9rZXlfb2Zmc2V0ICsgbjtcbiAgcmV0dXJuIHg7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfd2Vha19zZXRcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9rZXlfb2Zmc2V0LCBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfd2Vha19zZXQoeCwgaSwgdikge1xuICBpZihpIDwgMCB8fCBjYW1sX2VwaGVfa2V5X29mZnNldCArIGkgPj0geC5sZW5ndGgpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50IChcIldlYWsuc2V0XCIpO1xuICB4W2NhbWxfZXBoZV9rZXlfb2Zmc2V0ICsgaV0gPSB2O1xuICByZXR1cm4gMDtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfd2Vha19nZXRcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9rZXlfb2Zmc2V0LCBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfd2Vha19nZXQoeCwgaSkge1xuICBpZihpIDwgMCB8fCBjYW1sX2VwaGVfa2V5X29mZnNldCArIGkgPj0geC5sZW5ndGgpXG4gICAgY2FtbF9pbnZhbGlkX2FyZ3VtZW50IChcIldlYWsuZ2V0X2tleVwiKTtcbiAgcmV0dXJuICh4W2NhbWxfZXBoZV9rZXlfb2Zmc2V0ICsgaSBdPT09dW5kZWZpbmVkKT8wOnhbY2FtbF9lcGhlX2tleV9vZmZzZXQgKyBpXTtcbn1cbi8vUHJvdmlkZXM6IGNhbWxfd2Vha19nZXRfY29weVxuLy9SZXF1aXJlczogY2FtbF93ZWFrX2dldCxjYW1sX2VwaGVfa2V5X29mZnNldFxuLy9SZXF1aXJlczogY2FtbF9vYmpfZHVwLCBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIGNhbWxfd2Vha19nZXRfY29weSh4LCBpKSB7XG4gIGlmKGkgPCAwIHx8IGNhbWxfZXBoZV9rZXlfb2Zmc2V0ICsgaSA+PSB4Lmxlbmd0aClcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQgKFwiV2Vhay5nZXRfY29weVwiKTtcbiAgdmFyIHkgPSBjYW1sX3dlYWtfZ2V0KHgsIGkpO1xuICBpZiAoeSA9PT0gMCkgcmV0dXJuIHk7XG4gIHZhciB6ID0geVsxXTtcbiAgaWYgKHogaW5zdGFuY2VvZiBBcnJheSkgcmV0dXJuIFswLCBjYW1sX29ial9kdXAoeildO1xuICByZXR1cm4geTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF93ZWFrX2NoZWNrIG11dGFibGVcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9rZXlfb2Zmc2V0XG5mdW5jdGlvbiBjYW1sX3dlYWtfY2hlY2soeCwgaSkge1xuICBpZih4W2NhbWxfZXBoZV9rZXlfb2Zmc2V0ICsgaV0hPT11bmRlZmluZWQgJiYgeFtjYW1sX2VwaGVfa2V5X29mZnNldCArIGldICE9PTApXG4gICAgcmV0dXJuIDE7XG4gIGVsc2VcbiAgICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF93ZWFrX2JsaXRcbi8vUmVxdWlyZXM6IGNhbWxfYXJyYXlfYmxpdFxuLy9SZXF1aXJlczogY2FtbF9lcGhlX2tleV9vZmZzZXRcbmZ1bmN0aW9uIGNhbWxfd2Vha19ibGl0KGExLCBpMSwgYTIsIGkyLCBsZW4pIHtcbiAgLy8gbWludXMgb25lIGJlY2F1c2UgY2FtbF9hcnJheV9ibGl0IHdvcmtzIG9uIG9jYW1sIGFycmF5XG4gIGNhbWxfYXJyYXlfYmxpdChhMSwgY2FtbF9lcGhlX2tleV9vZmZzZXQgKyBpMSAtIDEsXG4gICAgICAgICAgICAgICAgICBhMiwgY2FtbF9lcGhlX2tleV9vZmZzZXQgKyBpMiAtIDEsXG4gICAgICAgICAgICAgICAgICBsZW4pO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9lcGhlX2NyZWF0ZVxuLy9SZXF1aXJlczogY2FtbF93ZWFrX2NyZWF0ZVxudmFyIGNhbWxfZXBoZV9jcmVhdGUgPSBjYW1sX3dlYWtfY3JlYXRlXG5cbi8vUHJvdmlkZXM6IGNhbWxfZXBoZV9ibGl0X2tleVxuLy9SZXF1aXJlczogY2FtbF93ZWFrX2JsaXRcbnZhciBjYW1sX2VwaGVfYmxpdF9rZXkgPSBjYW1sX3dlYWtfYmxpdFxuXG4vL1Byb3ZpZGVzOiBjYW1sX2VwaGVfZ2V0X2tleVxuLy9SZXF1aXJlczogY2FtbF93ZWFrX2dldFxudmFyIGNhbWxfZXBoZV9nZXRfa2V5ID0gY2FtbF93ZWFrX2dldFxuXG4vL1Byb3ZpZGVzOiBjYW1sX2VwaGVfZ2V0X2tleV9jb3B5XG4vL1JlcXVpcmVzOiBjYW1sX3dlYWtfZ2V0X2NvcHlcbnZhciBjYW1sX2VwaGVfZ2V0X2tleV9jb3B5ID0gY2FtbF93ZWFrX2dldF9jb3B5XG5cbi8vUHJvdmlkZXM6IGNhbWxfZXBoZV9jaGVja19rZXlcbi8vUmVxdWlyZXM6IGNhbWxfd2Vha19jaGVja1xudmFyIGNhbWxfZXBoZV9jaGVja19rZXkgPSBjYW1sX3dlYWtfY2hlY2tcblxuLy9Qcm92aWRlczogY2FtbF9lcGhlX3NldF9rZXlcbi8vUmVxdWlyZXM6IGNhbWxfd2Vha19zZXRcbmZ1bmN0aW9uIGNhbWxfZXBoZV9zZXRfa2V5KHgsIGksIHYpIHtcbiAgcmV0dXJuIGNhbWxfd2Vha19zZXQoeCwgaSwgWzAsIHZdKVxufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2VwaGVfdW5zZXRfa2V5XG4vL1JlcXVpcmVzOiBjYW1sX3dlYWtfc2V0XG5mdW5jdGlvbiBjYW1sX2VwaGVfdW5zZXRfa2V5KHgsIGkpIHtcbiAgcmV0dXJuIGNhbWxfd2Vha19zZXQoeCwgaSwgMClcbn1cblxuLy9Qcm92aWRlczogY2FtbF9lcGhlX2JsaXRfZGF0YVxuLy9SZXF1aXJlczogY2FtbF9lcGhlX2RhdGFfb2Zmc2V0XG5mdW5jdGlvbiBjYW1sX2VwaGVfYmxpdF9kYXRhKHNyYywgZHN0KXtcbiAgZHN0W2NhbWxfZXBoZV9kYXRhX29mZnNldF0gPSBzcmNbY2FtbF9lcGhlX2RhdGFfb2Zmc2V0XTtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZXBoZV9nZXRfZGF0YVxuLy9SZXF1aXJlczogY2FtbF9lcGhlX2RhdGFfb2Zmc2V0XG5mdW5jdGlvbiBjYW1sX2VwaGVfZ2V0X2RhdGEoeCl7XG4gIGlmKHhbY2FtbF9lcGhlX2RhdGFfb2Zmc2V0XSA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiAwO1xuICBlbHNlXG4gICAgcmV0dXJuIFswLCB4W2NhbWxfZXBoZV9kYXRhX29mZnNldF1dO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2VwaGVfZ2V0X2RhdGFfY29weVxuLy9SZXF1aXJlczogY2FtbF9lcGhlX2RhdGFfb2Zmc2V0XG4vL1JlcXVpcmVzOiBjYW1sX29ial9kdXBcbmZ1bmN0aW9uIGNhbWxfZXBoZV9nZXRfZGF0YV9jb3B5KHgpe1xuICBpZih4W2NhbWxfZXBoZV9kYXRhX29mZnNldF0gPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gMDtcbiAgZWxzZVxuICAgIHJldHVybiBbMCwgY2FtbF9vYmpfZHVwKHhbY2FtbF9lcGhlX2RhdGFfb2Zmc2V0XSldO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX2VwaGVfc2V0X2RhdGFcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9kYXRhX29mZnNldFxuZnVuY3Rpb24gY2FtbF9lcGhlX3NldF9kYXRhKHgsIGRhdGEpe1xuICB4W2NhbWxfZXBoZV9kYXRhX29mZnNldF0gPSBkYXRhO1xuICByZXR1cm4gMDtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9lcGhlX3Vuc2V0X2RhdGFcbi8vUmVxdWlyZXM6IGNhbWxfZXBoZV9kYXRhX29mZnNldFxuZnVuY3Rpb24gY2FtbF9lcGhlX3Vuc2V0X2RhdGEoeCwgZGF0YSl7XG4gIHhbY2FtbF9lcGhlX2RhdGFfb2Zmc2V0XSA9IHVuZGVmaW5lZDtcbiAgcmV0dXJuIDA7XG59XG5cbi8vUHJvdmlkZXM6IGNhbWxfZXBoZV9jaGVja19kYXRhXG4vL1JlcXVpcmVzOiBjYW1sX2VwaGVfZGF0YV9vZmZzZXRcbmZ1bmN0aW9uIGNhbWxfZXBoZV9jaGVja19kYXRhKHgpe1xuICBpZih4W2NhbWxfZXBoZV9kYXRhX29mZnNldF0gPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gMDtcbiAgZWxzZVxuICAgIHJldHVybiAxO1xufVxuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDEwIErDqXLDtG1lIFZvdWlsbG9uXG4vLyBMYWJvcmF0b2lyZSBQUFMgLSBDTlJTIFVuaXZlcnNpdMOpIFBhcmlzIERpZGVyb3Rcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cblxuLy9Qcm92aWRlczogY2FtbF9tZDVfY2hhblxuLy9SZXF1aXJlczogY2FtbF9tZDVfc3RyaW5nLCBjYW1sX3N0cmluZ19vZl9hcnJheSxjYW1sX21sX2NoYW5uZWxzXG4vL1JlcXVpcmVzOiBjYW1sX3JhaXNlX2VuZF9vZl9maWxlLCBjYW1sX2NyZWF0ZV9ieXRlcywgY2FtbF9zdHJpbmdfb2ZfYnl0ZXNcbmZ1bmN0aW9uIGNhbWxfbWQ1X2NoYW4oY2hhbmlkLGxlbil7XG4gIHZhciBjaGFuID0gY2FtbF9tbF9jaGFubmVsc1tjaGFuaWRdO1xuICB2YXIgY2hhbl9sZW4gPSBjaGFuLmZpbGUubGVuZ3RoKCk7XG4gIGlmKGxlbjwwKSBsZW4gPSBjaGFuX2xlbiAtIGNoYW4ub2Zmc2V0O1xuICBpZihjaGFuLm9mZnNldCArIGxlbiA+IGNoYW5fbGVuKSBjYW1sX3JhaXNlX2VuZF9vZl9maWxlKCk7XG4gIHZhciBidWYgPSBjYW1sX2NyZWF0ZV9ieXRlcyhsZW4pO1xuICBjaGFuLmZpbGUucmVhZChjaGFuLm9mZnNldCxidWYsMCxsZW4pO1xuICByZXR1cm4gY2FtbF9tZDVfc3RyaW5nKGNhbWxfc3RyaW5nX29mX2J5dGVzKGJ1ZiksMCxsZW4pO1xufVxuXG4vL1Byb3ZpZGVzOiBjYW1sX21kNV9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfYnl0ZXNfb2Zfc3RyaW5nLCBjYW1sX21kNV9ieXRlc1xuZnVuY3Rpb24gY2FtbF9tZDVfc3RyaW5nKHMsIG9mcywgbGVuKSB7XG4gIHJldHVybiBjYW1sX21kNV9ieXRlcyhjYW1sX2J5dGVzX29mX3N0cmluZyhzKSxvZnMsbGVuKTtcbn1cblxuLy9Qcm92aWRlczogY2FtbF9tZDVfYnl0ZXNcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX29mX2FycmF5LCBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzXG52YXIgY2FtbF9tZDVfYnl0ZXMgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIGFkZCAoeCwgeSkgeyByZXR1cm4gKHggKyB5KSB8IDA7IH1cbiAgZnVuY3Rpb24geHgocSxhLGIseCxzLHQpIHtcbiAgICBhID0gYWRkKGFkZChhLCBxKSwgYWRkKHgsIHQpKTtcbiAgICByZXR1cm4gYWRkKChhIDw8IHMpIHwgKGEgPj4+ICgzMiAtIHMpKSwgYik7XG4gIH1cbiAgZnVuY3Rpb24gZmYoYSxiLGMsZCx4LHMsdCkge1xuICAgIHJldHVybiB4eCgoYiAmIGMpIHwgKCh+YikgJiBkKSwgYSwgYiwgeCwgcywgdCk7XG4gIH1cbiAgZnVuY3Rpb24gZ2coYSxiLGMsZCx4LHMsdCkge1xuICAgIHJldHVybiB4eCgoYiAmIGQpIHwgKGMgJiAofmQpKSwgYSwgYiwgeCwgcywgdCk7XG4gIH1cbiAgZnVuY3Rpb24gaGgoYSxiLGMsZCx4LHMsdCkgeyByZXR1cm4geHgoYiBeIGMgXiBkLCBhLCBiLCB4LCBzLCB0KTsgfVxuICBmdW5jdGlvbiBpaShhLGIsYyxkLHgscyx0KSB7IHJldHVybiB4eChjIF4gKGIgfCAofmQpKSwgYSwgYiwgeCwgcywgdCk7IH1cblxuICBmdW5jdGlvbiBtZDUoYnVmZmVyLCBsZW5ndGgpIHtcbiAgICB2YXIgaSA9IGxlbmd0aDtcbiAgICBidWZmZXJbaSA+PiAyXSB8PSAweDgwIDw8ICg4ICogKGkgJiAzKSk7XG4gICAgZm9yIChpID0gKGkgJiB+MHgzKSArIDg7KGkgJiAweDNGKSA8IDYwIDtpICs9IDQpXG4gICAgICBidWZmZXJbKGkgPj4gMikgLSAxXSA9IDA7XG4gICAgYnVmZmVyWyhpID4+IDIpIC0xXSA9IGxlbmd0aCA8PCAzO1xuICAgIGJ1ZmZlcltpID4+IDJdID0gKGxlbmd0aCA+PiAyOSkgJiAweDFGRkZGRkZGO1xuXG4gICAgdmFyIHcgPSBbMHg2NzQ1MjMwMSwgMHhFRkNEQUI4OSwgMHg5OEJBRENGRSwgMHgxMDMyNTQ3Nl07XG5cbiAgICBmb3IoaSA9IDA7IGkgPCBidWZmZXIubGVuZ3RoOyBpICs9IDE2KSB7XG4gICAgICB2YXIgYSA9IHdbMF0sIGIgPSB3WzFdLCBjID0gd1syXSwgZCA9IHdbM107XG5cbiAgICAgIGEgPSBmZihhLCBiLCBjLCBkLCBidWZmZXJbaSsgMF0sIDcsIDB4RDc2QUE0NzgpO1xuICAgICAgZCA9IGZmKGQsIGEsIGIsIGMsIGJ1ZmZlcltpKyAxXSwgMTIsIDB4RThDN0I3NTYpO1xuICAgICAgYyA9IGZmKGMsIGQsIGEsIGIsIGJ1ZmZlcltpKyAyXSwgMTcsIDB4MjQyMDcwREIpO1xuICAgICAgYiA9IGZmKGIsIGMsIGQsIGEsIGJ1ZmZlcltpKyAzXSwgMjIsIDB4QzFCRENFRUUpO1xuICAgICAgYSA9IGZmKGEsIGIsIGMsIGQsIGJ1ZmZlcltpKyA0XSwgNywgMHhGNTdDMEZBRik7XG4gICAgICBkID0gZmYoZCwgYSwgYiwgYywgYnVmZmVyW2krIDVdLCAxMiwgMHg0Nzg3QzYyQSk7XG4gICAgICBjID0gZmYoYywgZCwgYSwgYiwgYnVmZmVyW2krIDZdLCAxNywgMHhBODMwNDYxMyk7XG4gICAgICBiID0gZmYoYiwgYywgZCwgYSwgYnVmZmVyW2krIDddLCAyMiwgMHhGRDQ2OTUwMSk7XG4gICAgICBhID0gZmYoYSwgYiwgYywgZCwgYnVmZmVyW2krIDhdLCA3LCAweDY5ODA5OEQ4KTtcbiAgICAgIGQgPSBmZihkLCBhLCBiLCBjLCBidWZmZXJbaSsgOV0sIDEyLCAweDhCNDRGN0FGKTtcbiAgICAgIGMgPSBmZihjLCBkLCBhLCBiLCBidWZmZXJbaSsxMF0sIDE3LCAweEZGRkY1QkIxKTtcbiAgICAgIGIgPSBmZihiLCBjLCBkLCBhLCBidWZmZXJbaSsxMV0sIDIyLCAweDg5NUNEN0JFKTtcbiAgICAgIGEgPSBmZihhLCBiLCBjLCBkLCBidWZmZXJbaSsxMl0sIDcsIDB4NkI5MDExMjIpO1xuICAgICAgZCA9IGZmKGQsIGEsIGIsIGMsIGJ1ZmZlcltpKzEzXSwgMTIsIDB4RkQ5ODcxOTMpO1xuICAgICAgYyA9IGZmKGMsIGQsIGEsIGIsIGJ1ZmZlcltpKzE0XSwgMTcsIDB4QTY3OTQzOEUpO1xuICAgICAgYiA9IGZmKGIsIGMsIGQsIGEsIGJ1ZmZlcltpKzE1XSwgMjIsIDB4NDlCNDA4MjEpO1xuXG4gICAgICBhID0gZ2coYSwgYiwgYywgZCwgYnVmZmVyW2krIDFdLCA1LCAweEY2MUUyNTYyKTtcbiAgICAgIGQgPSBnZyhkLCBhLCBiLCBjLCBidWZmZXJbaSsgNl0sIDksIDB4QzA0MEIzNDApO1xuICAgICAgYyA9IGdnKGMsIGQsIGEsIGIsIGJ1ZmZlcltpKzExXSwgMTQsIDB4MjY1RTVBNTEpO1xuICAgICAgYiA9IGdnKGIsIGMsIGQsIGEsIGJ1ZmZlcltpKyAwXSwgMjAsIDB4RTlCNkM3QUEpO1xuICAgICAgYSA9IGdnKGEsIGIsIGMsIGQsIGJ1ZmZlcltpKyA1XSwgNSwgMHhENjJGMTA1RCk7XG4gICAgICBkID0gZ2coZCwgYSwgYiwgYywgYnVmZmVyW2krMTBdLCA5LCAweDAyNDQxNDUzKTtcbiAgICAgIGMgPSBnZyhjLCBkLCBhLCBiLCBidWZmZXJbaSsxNV0sIDE0LCAweEQ4QTFFNjgxKTtcbiAgICAgIGIgPSBnZyhiLCBjLCBkLCBhLCBidWZmZXJbaSsgNF0sIDIwLCAweEU3RDNGQkM4KTtcbiAgICAgIGEgPSBnZyhhLCBiLCBjLCBkLCBidWZmZXJbaSsgOV0sIDUsIDB4MjFFMUNERTYpO1xuICAgICAgZCA9IGdnKGQsIGEsIGIsIGMsIGJ1ZmZlcltpKzE0XSwgOSwgMHhDMzM3MDdENik7XG4gICAgICBjID0gZ2coYywgZCwgYSwgYiwgYnVmZmVyW2krIDNdLCAxNCwgMHhGNEQ1MEQ4Nyk7XG4gICAgICBiID0gZ2coYiwgYywgZCwgYSwgYnVmZmVyW2krIDhdLCAyMCwgMHg0NTVBMTRFRCk7XG4gICAgICBhID0gZ2coYSwgYiwgYywgZCwgYnVmZmVyW2krMTNdLCA1LCAweEE5RTNFOTA1KTtcbiAgICAgIGQgPSBnZyhkLCBhLCBiLCBjLCBidWZmZXJbaSsgMl0sIDksIDB4RkNFRkEzRjgpO1xuICAgICAgYyA9IGdnKGMsIGQsIGEsIGIsIGJ1ZmZlcltpKyA3XSwgMTQsIDB4Njc2RjAyRDkpO1xuICAgICAgYiA9IGdnKGIsIGMsIGQsIGEsIGJ1ZmZlcltpKzEyXSwgMjAsIDB4OEQyQTRDOEEpO1xuXG4gICAgICBhID0gaGgoYSwgYiwgYywgZCwgYnVmZmVyW2krIDVdLCA0LCAweEZGRkEzOTQyKTtcbiAgICAgIGQgPSBoaChkLCBhLCBiLCBjLCBidWZmZXJbaSsgOF0sIDExLCAweDg3NzFGNjgxKTtcbiAgICAgIGMgPSBoaChjLCBkLCBhLCBiLCBidWZmZXJbaSsxMV0sIDE2LCAweDZEOUQ2MTIyKTtcbiAgICAgIGIgPSBoaChiLCBjLCBkLCBhLCBidWZmZXJbaSsxNF0sIDIzLCAweEZERTUzODBDKTtcbiAgICAgIGEgPSBoaChhLCBiLCBjLCBkLCBidWZmZXJbaSsgMV0sIDQsIDB4QTRCRUVBNDQpO1xuICAgICAgZCA9IGhoKGQsIGEsIGIsIGMsIGJ1ZmZlcltpKyA0XSwgMTEsIDB4NEJERUNGQTkpO1xuICAgICAgYyA9IGhoKGMsIGQsIGEsIGIsIGJ1ZmZlcltpKyA3XSwgMTYsIDB4RjZCQjRCNjApO1xuICAgICAgYiA9IGhoKGIsIGMsIGQsIGEsIGJ1ZmZlcltpKzEwXSwgMjMsIDB4QkVCRkJDNzApO1xuICAgICAgYSA9IGhoKGEsIGIsIGMsIGQsIGJ1ZmZlcltpKzEzXSwgNCwgMHgyODlCN0VDNik7XG4gICAgICBkID0gaGgoZCwgYSwgYiwgYywgYnVmZmVyW2krIDBdLCAxMSwgMHhFQUExMjdGQSk7XG4gICAgICBjID0gaGgoYywgZCwgYSwgYiwgYnVmZmVyW2krIDNdLCAxNiwgMHhENEVGMzA4NSk7XG4gICAgICBiID0gaGgoYiwgYywgZCwgYSwgYnVmZmVyW2krIDZdLCAyMywgMHgwNDg4MUQwNSk7XG4gICAgICBhID0gaGgoYSwgYiwgYywgZCwgYnVmZmVyW2krIDldLCA0LCAweEQ5RDREMDM5KTtcbiAgICAgIGQgPSBoaChkLCBhLCBiLCBjLCBidWZmZXJbaSsxMl0sIDExLCAweEU2REI5OUU1KTtcbiAgICAgIGMgPSBoaChjLCBkLCBhLCBiLCBidWZmZXJbaSsxNV0sIDE2LCAweDFGQTI3Q0Y4KTtcbiAgICAgIGIgPSBoaChiLCBjLCBkLCBhLCBidWZmZXJbaSsgMl0sIDIzLCAweEM0QUM1NjY1KTtcblxuICAgICAgYSA9IGlpKGEsIGIsIGMsIGQsIGJ1ZmZlcltpKyAwXSwgNiwgMHhGNDI5MjI0NCk7XG4gICAgICBkID0gaWkoZCwgYSwgYiwgYywgYnVmZmVyW2krIDddLCAxMCwgMHg0MzJBRkY5Nyk7XG4gICAgICBjID0gaWkoYywgZCwgYSwgYiwgYnVmZmVyW2krMTRdLCAxNSwgMHhBQjk0MjNBNyk7XG4gICAgICBiID0gaWkoYiwgYywgZCwgYSwgYnVmZmVyW2krIDVdLCAyMSwgMHhGQzkzQTAzOSk7XG4gICAgICBhID0gaWkoYSwgYiwgYywgZCwgYnVmZmVyW2krMTJdLCA2LCAweDY1NUI1OUMzKTtcbiAgICAgIGQgPSBpaShkLCBhLCBiLCBjLCBidWZmZXJbaSsgM10sIDEwLCAweDhGMENDQzkyKTtcbiAgICAgIGMgPSBpaShjLCBkLCBhLCBiLCBidWZmZXJbaSsxMF0sIDE1LCAweEZGRUZGNDdEKTtcbiAgICAgIGIgPSBpaShiLCBjLCBkLCBhLCBidWZmZXJbaSsgMV0sIDIxLCAweDg1ODQ1REQxKTtcbiAgICAgIGEgPSBpaShhLCBiLCBjLCBkLCBidWZmZXJbaSsgOF0sIDYsIDB4NkZBODdFNEYpO1xuICAgICAgZCA9IGlpKGQsIGEsIGIsIGMsIGJ1ZmZlcltpKzE1XSwgMTAsIDB4RkUyQ0U2RTApO1xuICAgICAgYyA9IGlpKGMsIGQsIGEsIGIsIGJ1ZmZlcltpKyA2XSwgMTUsIDB4QTMwMTQzMTQpO1xuICAgICAgYiA9IGlpKGIsIGMsIGQsIGEsIGJ1ZmZlcltpKzEzXSwgMjEsIDB4NEUwODExQTEpO1xuICAgICAgYSA9IGlpKGEsIGIsIGMsIGQsIGJ1ZmZlcltpKyA0XSwgNiwgMHhGNzUzN0U4Mik7XG4gICAgICBkID0gaWkoZCwgYSwgYiwgYywgYnVmZmVyW2krMTFdLCAxMCwgMHhCRDNBRjIzNSk7XG4gICAgICBjID0gaWkoYywgZCwgYSwgYiwgYnVmZmVyW2krIDJdLCAxNSwgMHgyQUQ3RDJCQik7XG4gICAgICBiID0gaWkoYiwgYywgZCwgYSwgYnVmZmVyW2krIDldLCAyMSwgMHhFQjg2RDM5MSk7XG5cbiAgICAgIHdbMF0gPSBhZGQoYSwgd1swXSk7XG4gICAgICB3WzFdID0gYWRkKGIsIHdbMV0pO1xuICAgICAgd1syXSA9IGFkZChjLCB3WzJdKTtcbiAgICAgIHdbM10gPSBhZGQoZCwgd1szXSk7XG4gICAgfVxuXG4gICAgdmFyIHQgPSBuZXcgQXJyYXkoMTYpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNDsgaSsrKVxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA0OyBqKyspXG4gICAgICAgIHRbaSAqIDQgKyBqXSA9ICh3W2ldID4+ICg4ICogaikpICYgMHhGRjtcbiAgICByZXR1cm4gdDtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAocywgb2ZzLCBsZW4pIHtcbiAgICAvLyBGSVg6IG1heWJlIHdlIHNob3VsZCBwZXJmb3JtIHRoZSBjb21wdXRhdGlvbiBieSBjaHVuayBvZiA2NCBieXRlc1xuICAgIC8vIGFzIGluIGh0dHA6Ly93d3cubXllcnNkYWlseS5vcmcvam9zZXBoL2phdmFzY3JpcHQvbWQ1LmpzXG4gICAgdmFyIGJ1ZiA9IFtdO1xuICAgIHN3aXRjaCAocy50ICYgNikge1xuICAgIGRlZmF1bHQ6XG4gICAgICBjYW1sX2NvbnZlcnRfc3RyaW5nX3RvX2J5dGVzKHMpO1xuICAgIGNhc2UgMDogLyogQllURVMgKi9cbiAgICAgIHZhciBiID0gcy5jO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrPTQpIHtcbiAgICAgICAgdmFyIGogPSBpICsgb2ZzO1xuICAgICAgICBidWZbaT4+Ml0gPVxuICAgICAgICAgIGIuY2hhckNvZGVBdChqKSB8IChiLmNoYXJDb2RlQXQoaisxKSA8PCA4KSB8XG4gICAgICAgICAgKGIuY2hhckNvZGVBdChqKzIpIDw8IDE2KSB8IChiLmNoYXJDb2RlQXQoaiszKSA8PCAyNCk7XG4gICAgICB9XG4gICAgICBmb3IgKDsgaSA8IGxlbjsgaSsrKSBidWZbaT4+Ml0gfD0gYi5jaGFyQ29kZUF0KGkgKyBvZnMpIDw8ICg4ICogKGkgJiAzKSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIDQ6IC8qIEFSUkFZICovXG4gICAgICB2YXIgYSA9IHMuYztcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKz00KSB7XG4gICAgICAgIHZhciBqID0gaSArIG9mcztcbiAgICAgICAgYnVmW2k+PjJdID0gYVtqXSB8IChhW2orMV0gPDwgOCkgfCAoYVtqKzJdIDw8IDE2KSB8IChhW2orM10gPDwgMjQpO1xuICAgICAgfVxuICAgICAgZm9yICg7IGkgPCBsZW47IGkrKykgYnVmW2k+PjJdIHw9IGFbaSArIG9mc10gPDwgKDggKiAoaSAmIDMpKTtcbiAgICB9XG4gICAgcmV0dXJuIGNhbWxfc3RyaW5nX29mX2FycmF5KG1kNShidWYsIGxlbikpO1xuICB9XG59ICgpO1xuIiwiLy8gSnNfb2Zfb2NhbWwgcnVudGltZSBzdXBwb3J0XG4vLyBodHRwOi8vd3d3Lm9jc2lnZW4ub3JnL2pzX29mX29jYW1sL1xuLy8gQ29weXJpZ2h0IChDKSAyMDIwIC0gSHVnbyBIZXV6YXJkXG4vLyBDb3B5cmlnaHQgKEMpIDIwMjAgLSBTaGFjaGFyIEl0emhha3lcbi8vXG4vLyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4vLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3aXRoIGxpbmtpbmcgZXhjZXB0aW9uO1xuLy8gZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuLy9cbi8vIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuLy8gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2Zcbi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbi8vIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuLy9cbi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuLy8gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmVcbi8vIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuXG5cbi8vIEJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9vY2FtbC9vY2FtbC9ibG9iLzQuMDcvb3RoZXJsaWJzL3N0ci9zdHJzdHVicy5jXG4vLyBDb3BpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vanNjb3EvanNjb3EvYmxvYi92OC4xMS9jb3EtanMvanNfc3R1Yi9zdHIuanNcblxuLy9Qcm92aWRlczogcmVfbWF0Y2hcbi8vUmVxdWlyZXM6IGNhbWxfanNieXRlc19vZl9zdHJpbmcsIGNhbWxfanNfZnJvbV9hcnJheSwgY2FtbF9hcnJheV9vZl9zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfc3RyaW5nX2dldFxuXG52YXIgcmVfbWF0Y2ggPSBmdW5jdGlvbigpe1xuICB2YXIgcmVfd29yZF9sZXR0ZXJzID0gW1xuICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsICAgICAgIC8qIDB4MDAtMHgxRjogbm9uZSAqL1xuICAgIDB4MDAsIDB4MDAsIDB4RkYsIDB4MDMsICAgICAgIC8qIDB4MjAtMHgzRjogZGlnaXRzIDAtOSAqL1xuICAgIDB4RkUsIDB4RkYsIDB4RkYsIDB4ODcsICAgICAgIC8qIDB4NDAtMHg1RjogQSB0byBaLCBfICovXG4gICAgMHhGRSwgMHhGRiwgMHhGRiwgMHgwNywgICAgICAgLyogMHg2MC0weDdGOiBhIHRvIHogKi9cbiAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAgICAgICAvKiAweDgwLTB4OUY6IG5vbmUgKi9cbiAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAgICAgICAvKiAweEEwLTB4QkY6IG5vbmUgKi9cbiAgICAweEZGLCAweEZGLCAweDdGLCAweEZGLCAgICAgICAvKiAweEMwLTB4REY6IExhdGluLTEgYWNjZW50ZWQgdXBwZXJjYXNlICovXG4gICAgMHhGRiwgMHhGRiwgMHg3RiwgMHhGRiAgICAgICAgLyogMHhFMC0weEZGOiBMYXRpbi0xIGFjY2VudGVkIGxvd2VyY2FzZSAqL1xuICBdO1xuXG4gIHZhciBvcGNvZGVzID0ge1xuICAgIENIQVI6IDAsIENIQVJOT1JNOiAxLCBTVFJJTkc6IDIsIFNUUklOR05PUk06IDMsIENIQVJDTEFTUzogNCxcbiAgICBCT0w6IDUsIEVPTDogNiwgV09SREJPVU5EQVJZOiA3LFxuICAgIEJFR0dST1VQOiA4LCBFTkRHUk9VUDogOSwgUkVGR1JPVVA6IDEwLFxuICAgIEFDQ0VQVDogMTEsXG4gICAgU0lNUExFT1BUOiAxMiwgU0lNUExFU1RBUjogMTMsIFNJTVBMRVBMVVM6IDE0LFxuICAgIEdPVE86IDE1LCBQVVNIQkFDSzogMTYsIFNFVE1BUks6IDE3LFxuICAgIENIRUNLUFJPR1JFU1M6IDE4XG4gIH07XG5cbiAgZnVuY3Rpb24gaXNfd29yZF9sZXR0ZXIoYykge1xuICAgIHJldHVybiAocmVfd29yZF9sZXR0ZXJzWyAgKGMgPj4gMyldID4+IChjICYgNykpICYgMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluX2JpdHNldChzLGkpIHtcbiAgICByZXR1cm4gKGNhbWxfc3RyaW5nX2dldChzLChpID4+IDMpKSA+PiAoaSAmIDcpKSAmIDE7XG4gIH1cblxuICBmdW5jdGlvbiByZV9tYXRjaF9pbXBsKHJlLCBzLCBwb3MsIHBhcnRpYWwpIHtcblxuICAgIHZhciBwcm9nICAgICAgICAgID0gY2FtbF9qc19mcm9tX2FycmF5KHJlWzFdKSxcbiAgICAgICAgY3Bvb2wgICAgICAgICA9IGNhbWxfanNfZnJvbV9hcnJheShyZVsyXSksXG4gICAgICAgIG5vcm10YWJsZSAgICAgPSBjYW1sX2pzYnl0ZXNfb2Zfc3RyaW5nKHJlWzNdKSxcbiAgICAgICAgbnVtZ3JvdXBzICAgICA9IHJlWzRdIHwgMCxcbiAgICAgICAgbnVtcmVnaXN0ZXJzICA9IHJlWzVdIHwgMCxcbiAgICAgICAgc3RhcnRjaGFycyAgICA9IHJlWzZdIHwgMDtcblxuICAgIHZhciBzID0gY2FtbF9hcnJheV9vZl9zdHJpbmcocyk7XG5cbiAgICB2YXIgcGMgPSAwLFxuICAgICAgICBxdWl0ID0gZmFsc2UsXG4gICAgICAgIHN0YWNrID0gW10sXG4gICAgICAgIGdyb3VwcyA9IG5ldyBBcnJheShudW1ncm91cHMpLFxuICAgICAgICByZV9yZWdpc3RlciA9IG5ldyBBcnJheShudW1yZWdpc3RlcnMpO1xuXG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGdyb3Vwcy5sZW5ndGg7IGkrKyl7XG4gICAgICBncm91cHNbaV0gPSB7c3RhcnQ6IC0xLCBlbmQ6LTF9XG4gICAgfVxuICAgIGdyb3Vwc1swXS5zdGFydCA9IHBvcztcblxuICAgIHZhciBiYWNrdHJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB3aGlsZSAoc3RhY2subGVuZ3RoKSB7XG4gICAgICAgIHZhciBpdGVtID0gc3RhY2sucG9wKCk7XG4gICAgICAgIGlmIChpdGVtLnVuZG8pIHtcbiAgICAgICAgICBpdGVtLnVuZG8ub2JqW2l0ZW0udW5kby5wcm9wXSA9IGl0ZW0udW5kby52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmKGl0ZW0ucG9zKSB7XG4gICAgICAgICAgcGMgPSBpdGVtLnBvcy5wYztcbiAgICAgICAgICBwb3MgPSBpdGVtLnBvcy50eHQ7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBxdWl0ID0gdHJ1ZTtcbiAgICB9O1xuXG4gICAgdmFyIHB1c2ggPSBmdW5jdGlvbihpdGVtKSB7IHN0YWNrLnB1c2goaXRlbSk7IH07XG5cbiAgICB2YXIgYWNjZXB0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgZ3JvdXBzWzBdLmVuZCA9IHBvcztcbiAgICAgIHZhciByZXN1bHQgPSBuZXcgQXJyYXkoMSArIGdyb3Vwcy5sZW5ndGgqMik7XG4gICAgICByZXN1bHRbMF0gPSAwOyAvLyB0YWdcbiAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBncm91cHMubGVuZ3RoOyBpKyspe1xuICAgICAgICB2YXIgZyA9IGdyb3Vwc1tpXTtcbiAgICAgICAgaWYoZy5zdGFydCA8IDAgfHwgZy5lbmQgPCAwKSB7XG4gICAgICAgICAgZy5zdGFydCA9IGcuZW5kID0gLTE7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0WzIqaSArIDEgXSA9IGcuc3RhcnQ7XG4gICAgICAgIHJlc3VsdFsyKmkgKyAxICsgMSBdID0gZy5lbmQ7XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH07XG5cbiAgICB2YXIgcHJlZml4X21hdGNoID0gZnVuY3Rpb24gKCkge1xuICAgICAgaWYocGFydGlhbCkgcmV0dXJuIGFjY2VwdCAoKTtcbiAgICAgIGVsc2UgYmFja3RyYWNrICgpO1xuICAgIH1cblxuICAgIC8qIE1haW4gREZBIGludGVycHJldGVyIGxvb3AgKi9cbiAgICB3aGlsZSAoIXF1aXQpIHtcbiAgICAgIHZhciBvcCA9IHByb2dbcGNdICYgMHhmZixcbiAgICAgICAgICBzYXJnID0gcHJvZ1twY10gPj4gOCxcbiAgICAgICAgICB1YXJnID0gc2FyZyAmIDB4ZmYsXG4gICAgICAgICAgYyA9IHNbcG9zXSxcbiAgICAgICAgICBncm91cDtcblxuICAgICAgcGMrKztcblxuICAgICAgc3dpdGNoIChvcCkge1xuICAgICAgY2FzZSBvcGNvZGVzLkNIQVI6XG4gICAgICAgIGlmKHBvcyA9PT0gcy5sZW5ndGgpIHtwcmVmaXhfbWF0Y2ggKCk7IGJyZWFrfTtcbiAgICAgICAgaWYgKGMgPT09IHVhcmcpIHBvcysrO1xuICAgICAgICBlbHNlIGJhY2t0cmFjaygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2Ugb3Bjb2Rlcy5DSEFSTk9STTpcbiAgICAgICAgaWYocG9zID09PSBzLmxlbmd0aCkge3ByZWZpeF9tYXRjaCAoKTsgYnJlYWt9O1xuICAgICAgICBpZiAobm9ybXRhYmxlLmNoYXJDb2RlQXQoYykgPT09IHVhcmcpIHBvcysrO1xuICAgICAgICBlbHNlIGJhY2t0cmFjaygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2Ugb3Bjb2Rlcy5TVFJJTkc6XG4gICAgICAgIGZvciAodmFyIGFyZyA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcoY3Bvb2xbdWFyZ10pLCBpID0gMDsgaSA8IGFyZy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmKHBvcyA9PT0gcy5sZW5ndGgpIHtwcmVmaXhfbWF0Y2ggKCk7IGJyZWFrfTtcbiAgICAgICAgICBpZiAoYyA9PT0gYXJnLmNoYXJDb2RlQXQoaSkpXG4gICAgICAgICAgICBjID0gc1srK3Bvc107XG4gICAgICAgICAgZWxzZSB7IGJhY2t0cmFjaygpOyBicmVhazsgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBvcGNvZGVzLlNUUklOR05PUk06XG4gICAgICAgIGZvciAodmFyIGFyZyA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcoY3Bvb2xbdWFyZ10pLCBpID0gMDsgaSA8IGFyZy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmKHBvcyA9PT0gcy5sZW5ndGgpIHtwcmVmaXhfbWF0Y2ggKCk7IGJyZWFrfTtcbiAgICAgICAgICBpZiAobm9ybXRhYmxlLmNoYXJDb2RlQXQoYykgPT09IGFyZy5jaGFyQ29kZUF0KGkpKVxuICAgICAgICAgICAgYyA9IHNbKytwb3NdO1xuICAgICAgICAgIGVsc2UgeyBiYWNrdHJhY2soKTsgYnJlYWs7IH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2Ugb3Bjb2Rlcy5DSEFSQ0xBU1M6XG4gICAgICAgIGlmKHBvcyA9PT0gcy5sZW5ndGgpIHtwcmVmaXhfbWF0Y2ggKCk7IGJyZWFrfTtcbiAgICAgICAgaWYgKGluX2JpdHNldChjcG9vbFt1YXJnXSwgYykpIHBvcysrO1xuICAgICAgICBlbHNlIGJhY2t0cmFjaygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2Ugb3Bjb2Rlcy5CT0w6XG4gICAgICAgIGlmKHBvcyA+IDAgJiYgc1twb3MgLSAxXSAhPSAxMCAvKiBcXG4gKi8pIHtiYWNrdHJhY2soKX1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIG9wY29kZXMuRU9MOlxuICAgICAgICBpZihwb3MgPCBzLmxlbmd0aCAmJiBzW3Bvc10gIT0gMTAgLyogXFxuICovKSB7YmFja3RyYWNrKCl9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBvcGNvZGVzLldPUkRCT1VOREFSWTpcbiAgICAgICAgaWYocG9zID09IDApIHtcbiAgICAgICAgICBpZihwb3MgPT09IHMubGVuZ3RoKSB7cHJlZml4X21hdGNoICgpOyBicmVha307XG4gICAgICAgICAgaWYoaXNfd29yZF9sZXR0ZXIoc1swXSkpIGJyZWFrO1xuICAgICAgICAgIGJhY2t0cmFjaygpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHBvcyA9PT0gcy5sZW5ndGgpIHtcbiAgICAgICAgICBpZihpc193b3JkX2xldHRlcihzW3BvcyAtIDFdKSkgYnJlYWs7XG4gICAgICAgICAgYmFja3RyYWNrICgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGlmKGlzX3dvcmRfbGV0dGVyKHNbcG9zIC0gMV0pICE9IGlzX3dvcmRfbGV0dGVyKHNbcG9zXSkpIGJyZWFrO1xuICAgICAgICAgIGJhY2t0cmFjayAoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2Ugb3Bjb2Rlcy5CRUdHUk9VUDpcbiAgICAgICAgZ3JvdXAgPSBncm91cHNbdWFyZ107XG4gICAgICAgIHB1c2goe3VuZG86IHtvYmo6Z3JvdXAsXG4gICAgICAgICAgICAgICAgICAgICBwcm9wOidzdGFydCcsXG4gICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZ3JvdXAuc3RhcnR9fSk7XG4gICAgICAgIGdyb3VwLnN0YXJ0ID0gcG9zO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2Ugb3Bjb2Rlcy5FTkRHUk9VUDpcbiAgICAgICAgZ3JvdXAgPSBncm91cHNbdWFyZ107XG4gICAgICAgIHB1c2goe3VuZG86IHtvYmo6IGdyb3VwLFxuICAgICAgICAgICAgICAgICAgICAgcHJvcDonZW5kJyxcbiAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBncm91cC5lbmR9fSk7XG4gICAgICAgIGdyb3VwLmVuZCA9IHBvcztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIG9wY29kZXMuUkVGR1JPVVA6XG4gICAgICAgIGdyb3VwID0gZ3JvdXBzW3VhcmddO1xuICAgICAgICBpZihncm91cC5zdGFydCA8IDAgfHwgZ3JvdXAuZW5kIDwgMCkge2JhY2t0cmFjayAoKTsgYnJlYWt9XG4gICAgICAgIGZvciAodmFyIGkgPSBncm91cC5zdGFydDsgaSA8IGdyb3VwLmVuZDsgaSsrKXtcbiAgICAgICAgICBpZihwb3MgPT09IHMubGVuZ3RoKSB7cHJlZml4X21hdGNoICgpOyBicmVha307XG4gICAgICAgICAgaWYoc1tpXSAhPSBzW3Bvc10pIHtiYWNrdHJhY2sgKCk7IGJyZWFrfVxuICAgICAgICAgIHBvcysrO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBvcGNvZGVzLlNJTVBMRU9QVDpcbiAgICAgICAgaWYgKGluX2JpdHNldChjcG9vbFt1YXJnXSwgYykpIHBvcysrO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2Ugb3Bjb2Rlcy5TSU1QTEVTVEFSOlxuICAgICAgICB3aGlsZSAoaW5fYml0c2V0KGNwb29sW3VhcmddLCBjKSlcbiAgICAgICAgICBjID0gc1srK3Bvc107XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBvcGNvZGVzLlNJTVBMRVBMVVM6XG4gICAgICAgIGlmKHBvcyA9PT0gcy5sZW5ndGgpIHtwcmVmaXhfbWF0Y2ggKCk7IGJyZWFrfTtcbiAgICAgICAgaWYgKGluX2JpdHNldChjcG9vbFt1YXJnXSwgYykpIHtcbiAgICAgICAgICBkbyB7XG4gICAgICAgICAgICBjID0gc1srK3Bvc107XG4gICAgICAgICAgfSB3aGlsZSAoaW5fYml0c2V0KGNwb29sW3VhcmddLCBjKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBiYWNrdHJhY2soKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIG9wY29kZXMuQUNDRVBUOlxuICAgICAgICByZXR1cm4gYWNjZXB0KCk7XG4gICAgICBjYXNlIG9wY29kZXMuR09UTzpcbiAgICAgICAgcGMgPSBwYyArIHNhcmc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBvcGNvZGVzLlBVU0hCQUNLOlxuICAgICAgICBwdXNoKHtwb3M6IHtwYzogcGMgKyBzYXJnLCB0eHQ6IHBvc319KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIG9wY29kZXMuU0VUTUFSSzpcbiAgICAgICAgcHVzaCh7dW5kbzoge29iajpyZV9yZWdpc3RlcixcbiAgICAgICAgICAgICAgICAgICAgIHByb3A6IHVhcmcsXG4gICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcmVfcmVnaXN0ZXJbdWFyZ119fSk7XG4gICAgICAgIHJlX3JlZ2lzdGVyW3VhcmddID0gcG9zO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2Ugb3Bjb2Rlcy5DSEVDS1BST0dSRVNTOlxuICAgICAgICBpZiAocmVfcmVnaXN0ZXJbdWFyZ10gPT09IHBvcykgYmFja3RyYWNrKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDogdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBieXRlY29kZVwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICByZXR1cm4gcmVfbWF0Y2hfaW1wbDtcbn0oKTtcblxuXG4vL1Byb3ZpZGVzOiByZV9zZWFyY2hfZm9yd2FyZFxuLy9SZXF1aXJlczogcmVfbWF0Y2gsIGNhbWxfbWxfc3RyaW5nX2xlbmd0aCwgY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiByZV9zZWFyY2hfZm9yd2FyZChyZSwgcywgcG9zKSB7XG4gIGlmKHBvcyA8IDAgfHwgcG9zID4gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpKVxuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIlN0ci5zZWFyY2hfZm9yd2FyZFwiKVxuICB3aGlsZSAocG9zIDw9IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSkge1xuICAgIHZhciByZXMgPSByZV9tYXRjaChyZSwgcywgcG9zLCAwKTtcbiAgICBpZiAocmVzKSByZXR1cm4gcmVzO1xuICAgIHBvcysrO1xuICB9XG5cbiAgcmV0dXJuIFswXTsgIC8qIFt8fF0gOiBpbnQgYXJyYXkgKi9cbn1cblxuLy9Qcm92aWRlczogcmVfc2VhcmNoX2JhY2t3YXJkXG4vL1JlcXVpcmVzOiByZV9tYXRjaCwgY2FtbF9tbF9zdHJpbmdfbGVuZ3RoLCBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIHJlX3NlYXJjaF9iYWNrd2FyZChyZSwgcywgcG9zKSB7XG4gIGlmKHBvcyA8IDAgfHwgcG9zID4gY2FtbF9tbF9zdHJpbmdfbGVuZ3RoKHMpKVxuICAgIGNhbWxfaW52YWxpZF9hcmd1bWVudChcIlN0ci5zZWFyY2hfYmFja3dhcmRcIilcbiAgd2hpbGUgKHBvcyA+PSAwKSB7XG4gICAgdmFyIHJlcyA9IHJlX21hdGNoKHJlLCBzLCBwb3MsIDApO1xuICAgIGlmIChyZXMpIHJldHVybiByZXM7XG4gICAgcG9zLS07XG4gIH1cblxuICByZXR1cm4gWzBdOyAgLyogW3x8XSA6IGludCBhcnJheSAqL1xufVxuXG5cbi8vUHJvdmlkZXM6IHJlX3N0cmluZ19tYXRjaFxuLy9SZXF1aXJlczogcmVfbWF0Y2gsIGNhbWxfbWxfc3RyaW5nX2xlbmd0aCwgY2FtbF9pbnZhbGlkX2FyZ3VtZW50XG5mdW5jdGlvbiByZV9zdHJpbmdfbWF0Y2gocmUscyxwb3Mpe1xuICBpZihwb3MgPCAwIHx8IHBvcyA+IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSlcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJTdHIuc3RyaW5nX21hdGNoXCIpXG4gIHZhciByZXMgPSByZV9tYXRjaChyZSwgcywgcG9zLCAwKTtcbiAgaWYgKHJlcykgcmV0dXJuIHJlcztcbiAgZWxzZSByZXR1cm4gWzBdO1xufVxuXG4vL1Byb3ZpZGVzOiByZV9wYXJ0aWFsX21hdGNoXG4vL1JlcXVpcmVzOiByZV9tYXRjaCwgY2FtbF9tbF9zdHJpbmdfbGVuZ3RoLCBjYW1sX2ludmFsaWRfYXJndW1lbnRcbmZ1bmN0aW9uIHJlX3BhcnRpYWxfbWF0Y2gocmUscyxwb3Mpe1xuICBpZihwb3MgPCAwIHx8IHBvcyA+IGNhbWxfbWxfc3RyaW5nX2xlbmd0aChzKSlcbiAgICBjYW1sX2ludmFsaWRfYXJndW1lbnQoXCJTdHIucGFydGlhbF9tYXRjaFwiKVxuICB2YXIgcmVzID0gcmVfbWF0Y2gocmUsIHMsIHBvcywgMSk7XG4gIGlmIChyZXMpIHJldHVybiByZXM7XG4gIGVsc2UgcmV0dXJuIFswXTtcbn1cblxuLy9Qcm92aWRlczogcmVfcmVwbGFjZW1lbnRfdGV4dFxuLy9SZXF1aXJlczogY2FtbF9qc2J5dGVzX29mX3N0cmluZywgY2FtbF9zdHJpbmdfb2ZfanNieXRlc1xuLy9SZXF1aXJlczogY2FtbF9hcnJheV9nZXRcbi8vUmVxdWlyZXM6IGNhbWxfZmFpbHdpdGhcbi8vIGV4dGVybmFsIHJlX3JlcGxhY2VtZW50X3RleHQ6IHN0cmluZyAtPiBpbnQgYXJyYXkgLT4gc3RyaW5nIC0+IHN0cmluZ1xuZnVuY3Rpb24gcmVfcmVwbGFjZW1lbnRfdGV4dChyZXBsLGdyb3VwcyxvcmlnKSB7XG4gIHZhciByZXBsID0gY2FtbF9qc2J5dGVzX29mX3N0cmluZyhyZXBsKTtcbiAgdmFyIGxlbiA9IHJlcGwubGVuZ3RoO1xuICB2YXIgb3JpZyA9IGNhbWxfanNieXRlc19vZl9zdHJpbmcob3JpZyk7XG4gIHZhciByZXMgPSBcIlwiOyAvL3Jlc3VsdFxuICB2YXIgbiA9IDA7IC8vIGN1cnJlbnQgcG9zaXRpb25cbiAgdmFyIGN1cjsgLy9jdXJyZW50IGNoYXJcbiAgdmFyIHN0YXJ0LCBlbmQsIGM7XG4gIHdoaWxlKG4gPCBsZW4pe1xuICAgIGN1ciA9IHJlcGwuY2hhckF0KG4rKyk7XG4gICAgaWYoY3VyICE9ICdcXFxcJyl7XG4gICAgICByZXMgKz0gY3VyO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGlmKG4gPT0gbGVuKSBjYW1sX2ZhaWx3aXRoKFwiU3RyLnJlcGxhY2U6IGlsbGVnYWwgYmFja3NsYXNoIHNlcXVlbmNlXCIpO1xuICAgICAgY3VyID0gcmVwbC5jaGFyQXQobisrKTtcbiAgICAgIHN3aXRjaChjdXIpe1xuICAgICAgY2FzZSAnXFxcXCc6XG4gICAgICAgIHJlcyArPSBjdXI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnMCc6IGNhc2UgJzEnOiBjYXNlICcyJzogY2FzZSAnMyc6IGNhc2UgJzQnOlxuICAgICAgY2FzZSAnNSc6IGNhc2UgJzYnOiBjYXNlICc3JzogY2FzZSAnOCc6IGNhc2UgJzknOlxuICAgICAgICBjID0gK2N1cjtcbiAgICAgICAgaWYgKGMqMiA+PSBncm91cHMubGVuZ3RoIC0gMSApXG4gICAgICAgICAgY2FtbF9mYWlsd2l0aChcIlN0ci5yZXBsYWNlOiByZWZlcmVuY2UgdG8gdW5tYXRjaGVkIGdyb3VwXCIgKTtcbiAgICAgICAgc3RhcnQgPSBjYW1sX2FycmF5X2dldChncm91cHMsYyoyKTtcbiAgICAgICAgZW5kID0gY2FtbF9hcnJheV9nZXQoZ3JvdXBzLCBjKjIgKzEpO1xuICAgICAgICBpZiAoc3RhcnQgPT0gLTEpXG4gICAgICAgICAgY2FtbF9mYWlsd2l0aChcIlN0ci5yZXBsYWNlOiByZWZlcmVuY2UgdG8gdW5tYXRjaGVkIGdyb3VwXCIpO1xuICAgICAgICByZXMrPW9yaWcuc2xpY2Uoc3RhcnQsZW5kKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXMgKz0gKCdcXFxcJyAgKyBjdXIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gY2FtbF9zdHJpbmdfb2ZfanNieXRlcyhyZXMpOyB9XG4iLCIvL1RoZSBmb2xsb3dpbmcgYXJlIGRlZmluZWQgaW4gQ3N0cnVjdFxuLy9UaGVyZSBhcmUganVzdCBwcm92aWRlZCBoZXJlIGZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnNcblxuLy9Qcm92aWRlczogY2FtbF9ibGl0X2JpZ3N0cmluZ190b19iaWdzdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfYmlnc3RyaW5nX2JsaXRfYmFfdG9fYmFcbi8vV2Vha2RlZlxudmFyIGNhbWxfYmxpdF9iaWdzdHJpbmdfdG9fYmlnc3RyaW5nID0gY2FtbF9iaWdzdHJpbmdfYmxpdF9iYV90b19iYVxuLy9Qcm92aWRlczogY2FtbF9ibGl0X2JpZ3N0cmluZ190b19zdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfYmlnc3RyaW5nX2JsaXRfYmFfdG9fYnl0ZXNcbi8vV2Vha2RlZlxudmFyIGNhbWxfYmxpdF9iaWdzdHJpbmdfdG9fc3RyaW5nID0gY2FtbF9iaWdzdHJpbmdfYmxpdF9iYV90b19ieXRlc1xuLy9Qcm92aWRlczogY2FtbF9ibGl0X3N0cmluZ190b19iaWdzdHJpbmdcbi8vUmVxdWlyZXM6IGNhbWxfYmlnc3RyaW5nX2JsaXRfc3RyaW5nX3RvX2JhXG4vL1dlYWtkZWZcbnZhciBjYW1sX2JsaXRfc3RyaW5nX3RvX2JpZ3N0cmluZyA9IGNhbWxfYmlnc3RyaW5nX2JsaXRfc3RyaW5nX3RvX2JhXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgIERhbmllbCBDLiBCdWVuemxpICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE0IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbmV4dGVybmFsIGZvcm1hdF9pbnQgOiBzdHJpbmcgLT4gaW50IC0+IHN0cmluZyA9IFwiY2FtbF9mb3JtYXRfaW50XCJcblxubGV0IGVycl9ub19wcmVkID0gXCJVKzAwMDAgaGFzIG5vIHByZWRlY2Vzc29yXCJcbmxldCBlcnJfbm9fc3VjYyA9IFwiVSsxMEZGRkYgaGFzIG5vIHN1Y2Nlc3NvclwiXG5sZXQgZXJyX25vdF9zdiBpID0gZm9ybWF0X2ludCBcIiVYXCIgaSBeIFwiIGlzIG5vdCBhbiBVbmljb2RlIHNjYWxhciB2YWx1ZVwiXG5sZXQgZXJyX25vdF9sYXRpbjEgdSA9IFwiVStcIiBeIGZvcm1hdF9pbnQgXCIlMDRYXCIgdSBeIFwiIGlzIG5vdCBhIGxhdGluMSBjaGFyYWN0ZXJcIlxuXG50eXBlIHQgPSBpbnRcblxubGV0IG1pbiA9IDB4MDAwMFxubGV0IG1heCA9IDB4MTBGRkZGXG5sZXQgbG9fYm91bmQgPSAweEQ3RkZcbmxldCBoaV9ib3VuZCA9IDB4RTAwMFxuXG5sZXQgYm9tID0gMHhGRUZGXG5sZXQgcmVwID0gMHhGRkZEXG5cbmxldCBzdWNjIHUgPVxuICBpZiB1ID0gbG9fYm91bmQgdGhlbiBoaV9ib3VuZCBlbHNlXG4gIGlmIHUgPSBtYXggdGhlbiBpbnZhbGlkX2FyZyBlcnJfbm9fc3VjYyBlbHNlXG4gIHUgKyAxXG5cbmxldCBwcmVkIHUgPVxuICBpZiB1ID0gaGlfYm91bmQgdGhlbiBsb19ib3VuZCBlbHNlXG4gIGlmIHUgPSBtaW4gdGhlbiBpbnZhbGlkX2FyZyBlcnJfbm9fcHJlZCBlbHNlXG4gIHUgLSAxXG5cbmxldCBpc192YWxpZCBpID0gKG1pbiA8PSBpICYmIGkgPD0gbG9fYm91bmQpIHx8IChoaV9ib3VuZCA8PSBpICYmIGkgPD0gbWF4KVxubGV0IG9mX2ludCBpID0gaWYgaXNfdmFsaWQgaSB0aGVuIGkgZWxzZSBpbnZhbGlkX2FyZyAoZXJyX25vdF9zdiBpKVxuZXh0ZXJuYWwgdW5zYWZlX29mX2ludCA6IGludCAtPiB0ID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgdG9faW50IDogdCAtPiBpbnQgPSBcIiVpZGVudGl0eVwiXG5cbmxldCBpc19jaGFyIHUgPSB1IDwgMjU2XG5sZXQgb2ZfY2hhciBjID0gQ2hhci5jb2RlIGNcbmxldCB0b19jaGFyIHUgPVxuICBpZiB1ID4gMjU1IHRoZW4gaW52YWxpZF9hcmcgKGVycl9ub3RfbGF0aW4xIHUpIGVsc2VcbiAgQ2hhci51bnNhZmVfY2hyIHVcblxubGV0IHVuc2FmZV90b19jaGFyID0gQ2hhci51bnNhZmVfY2hyXG5cbmxldCBlcXVhbCA6IGludCAtPiBpbnQgLT4gYm9vbCA9ICggPSApXG5sZXQgY29tcGFyZSA6IGludCAtPiBpbnQgLT4gaW50ID0gU3RkbGliLmNvbXBhcmVcbmxldCBoYXNoID0gdG9faW50XG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIE1vZHVsZSBbSW50NjRdOiA2NC1iaXQgaW50ZWdlcnMgKilcblxuZXh0ZXJuYWwgbmVnIDogaW50NjQgLT4gaW50NjQgPSBcIiVpbnQ2NF9uZWdcIlxuZXh0ZXJuYWwgYWRkIDogaW50NjQgLT4gaW50NjQgLT4gaW50NjQgPSBcIiVpbnQ2NF9hZGRcIlxuZXh0ZXJuYWwgc3ViIDogaW50NjQgLT4gaW50NjQgLT4gaW50NjQgPSBcIiVpbnQ2NF9zdWJcIlxuZXh0ZXJuYWwgbXVsIDogaW50NjQgLT4gaW50NjQgLT4gaW50NjQgPSBcIiVpbnQ2NF9tdWxcIlxuZXh0ZXJuYWwgZGl2IDogaW50NjQgLT4gaW50NjQgLT4gaW50NjQgPSBcIiVpbnQ2NF9kaXZcIlxuZXh0ZXJuYWwgcmVtIDogaW50NjQgLT4gaW50NjQgLT4gaW50NjQgPSBcIiVpbnQ2NF9tb2RcIlxuZXh0ZXJuYWwgbG9nYW5kIDogaW50NjQgLT4gaW50NjQgLT4gaW50NjQgPSBcIiVpbnQ2NF9hbmRcIlxuZXh0ZXJuYWwgbG9nb3IgOiBpbnQ2NCAtPiBpbnQ2NCAtPiBpbnQ2NCA9IFwiJWludDY0X29yXCJcbmV4dGVybmFsIGxvZ3hvciA6IGludDY0IC0+IGludDY0IC0+IGludDY0ID0gXCIlaW50NjRfeG9yXCJcbmV4dGVybmFsIHNoaWZ0X2xlZnQgOiBpbnQ2NCAtPiBpbnQgLT4gaW50NjQgPSBcIiVpbnQ2NF9sc2xcIlxuZXh0ZXJuYWwgc2hpZnRfcmlnaHQgOiBpbnQ2NCAtPiBpbnQgLT4gaW50NjQgPSBcIiVpbnQ2NF9hc3JcIlxuZXh0ZXJuYWwgc2hpZnRfcmlnaHRfbG9naWNhbCA6IGludDY0IC0+IGludCAtPiBpbnQ2NCA9IFwiJWludDY0X2xzclwiXG5leHRlcm5hbCBvZl9pbnQgOiBpbnQgLT4gaW50NjQgPSBcIiVpbnQ2NF9vZl9pbnRcIlxuZXh0ZXJuYWwgdG9faW50IDogaW50NjQgLT4gaW50ID0gXCIlaW50NjRfdG9faW50XCJcbmV4dGVybmFsIG9mX2Zsb2F0IDogZmxvYXQgLT4gaW50NjRcbiAgPSBcImNhbWxfaW50NjRfb2ZfZmxvYXRcIiBcImNhbWxfaW50NjRfb2ZfZmxvYXRfdW5ib3hlZFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCB0b19mbG9hdCA6IGludDY0IC0+IGZsb2F0XG4gID0gXCJjYW1sX2ludDY0X3RvX2Zsb2F0XCIgXCJjYW1sX2ludDY0X3RvX2Zsb2F0X3VuYm94ZWRcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgb2ZfaW50MzIgOiBpbnQzMiAtPiBpbnQ2NCA9IFwiJWludDY0X29mX2ludDMyXCJcbmV4dGVybmFsIHRvX2ludDMyIDogaW50NjQgLT4gaW50MzIgPSBcIiVpbnQ2NF90b19pbnQzMlwiXG5leHRlcm5hbCBvZl9uYXRpdmVpbnQgOiBuYXRpdmVpbnQgLT4gaW50NjQgPSBcIiVpbnQ2NF9vZl9uYXRpdmVpbnRcIlxuZXh0ZXJuYWwgdG9fbmF0aXZlaW50IDogaW50NjQgLT4gbmF0aXZlaW50ID0gXCIlaW50NjRfdG9fbmF0aXZlaW50XCJcblxubGV0IHplcm8gPSAwTFxubGV0IG9uZSA9IDFMXG5sZXQgbWludXNfb25lID0gLTFMXG5sZXQgc3VjYyBuID0gYWRkIG4gMUxcbmxldCBwcmVkIG4gPSBzdWIgbiAxTFxubGV0IGFicyBuID0gaWYgbiA+PSAwTCB0aGVuIG4gZWxzZSBuZWcgblxubGV0IG1pbl9pbnQgPSAweDgwMDAwMDAwMDAwMDAwMDBMXG5sZXQgbWF4X2ludCA9IDB4N0ZGRkZGRkZGRkZGRkZGRkxcbmxldCBsb2dub3QgbiA9IGxvZ3hvciBuICgtMUwpXG5cbmxldCB1bnNpZ25lZF90b19pbnQgPVxuICBsZXQgbWF4X2ludCA9IG9mX2ludCBTdGRsaWIubWF4X2ludCBpblxuICBmdW4gbiAtPlxuICAgIGlmIGNvbXBhcmUgemVybyBuIDw9IDAgJiYgY29tcGFyZSBuIG1heF9pbnQgPD0gMCB0aGVuXG4gICAgICBTb21lICh0b19pbnQgbilcbiAgICBlbHNlXG4gICAgICBOb25lXG5cbmV4dGVybmFsIGZvcm1hdCA6IHN0cmluZyAtPiBpbnQ2NCAtPiBzdHJpbmcgPSBcImNhbWxfaW50NjRfZm9ybWF0XCJcbmxldCB0b19zdHJpbmcgbiA9IGZvcm1hdCBcIiVkXCIgblxuXG5leHRlcm5hbCBvZl9zdHJpbmcgOiBzdHJpbmcgLT4gaW50NjQgPSBcImNhbWxfaW50NjRfb2Zfc3RyaW5nXCJcblxubGV0IG9mX3N0cmluZ19vcHQgcyA9XG4gICgqIFRPRE86IGV4cG9zZSBhIG5vbi1yYWlzaW5nIHByaW1pdGl2ZSBkaXJlY3RseS4gKilcbiAgdHJ5IFNvbWUgKG9mX3N0cmluZyBzKVxuICB3aXRoIEZhaWx1cmUgXyAtPiBOb25lXG5cblxuXG5leHRlcm5hbCBiaXRzX29mX2Zsb2F0IDogZmxvYXQgLT4gaW50NjRcbiAgPSBcImNhbWxfaW50NjRfYml0c19vZl9mbG9hdFwiIFwiY2FtbF9pbnQ2NF9iaXRzX29mX2Zsb2F0X3VuYm94ZWRcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgZmxvYXRfb2ZfYml0cyA6IGludDY0IC0+IGZsb2F0XG4gID0gXCJjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHNcIiBcImNhbWxfaW50NjRfZmxvYXRfb2ZfYml0c191bmJveGVkXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cblxudHlwZSB0ID0gaW50NjRcblxubGV0IGNvbXBhcmUgKHg6IHQpICh5OiB0KSA9IFN0ZGxpYi5jb21wYXJlIHggeVxubGV0IGVxdWFsICh4OiB0KSAoeTogdCkgPSBjb21wYXJlIHggeSA9IDBcblxubGV0IHVuc2lnbmVkX2NvbXBhcmUgbiBtID1cbiAgY29tcGFyZSAoc3ViIG4gbWluX2ludCkgKHN1YiBtIG1pbl9pbnQpXG5cbmxldCBtaW4geCB5IDogdCA9IGlmIHggPD0geSB0aGVuIHggZWxzZSB5XG5sZXQgbWF4IHggeSA6IHQgPSBpZiB4ID49IHkgdGhlbiB4IGVsc2UgeVxuXG4oKiBVbnNpZ25lZCBkaXZpc2lvbiBmcm9tIHNpZ25lZCBkaXZpc2lvbiBvZiB0aGUgc2FtZVxuICAgYml0bmVzcy4gU2VlIFdhcnJlbiBKci4sIEhlbnJ5IFMuICgyMDEzKS4gSGFja2VyJ3MgRGVsaWdodCAoMiBlZC4pLCBTZWMgOS0zLlxuKilcbmxldCB1bnNpZ25lZF9kaXYgbiBkID1cbiAgaWYgZCA8IHplcm8gdGhlblxuICAgIGlmIHVuc2lnbmVkX2NvbXBhcmUgbiBkIDwgMCB0aGVuIHplcm8gZWxzZSBvbmVcbiAgZWxzZVxuICAgIGxldCBxID0gc2hpZnRfbGVmdCAoZGl2IChzaGlmdF9yaWdodF9sb2dpY2FsIG4gMSkgZCkgMSBpblxuICAgIGxldCByID0gc3ViIG4gKG11bCBxIGQpIGluXG4gICAgaWYgdW5zaWduZWRfY29tcGFyZSByIGQgPj0gMCB0aGVuIHN1Y2MgcSBlbHNlIHFcblxubGV0IHVuc2lnbmVkX3JlbSBuIGQgPVxuICBzdWIgbiAobXVsICh1bnNpZ25lZF9kaXYgbiBkKSBkKVxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBUaGUgcnVuLXRpbWUgbGlicmFyeSBmb3IgbGV4ZXJzIGdlbmVyYXRlZCBieSBjYW1sbGV4ICopXG5cbnR5cGUgcG9zaXRpb24gPSB7XG4gIHBvc19mbmFtZSA6IHN0cmluZztcbiAgcG9zX2xudW0gOiBpbnQ7XG4gIHBvc19ib2wgOiBpbnQ7XG4gIHBvc19jbnVtIDogaW50O1xufVxuXG5sZXQgZHVtbXlfcG9zID0ge1xuICBwb3NfZm5hbWUgPSBcIlwiO1xuICBwb3NfbG51bSA9IDA7XG4gIHBvc19ib2wgPSAwO1xuICBwb3NfY251bSA9IC0xO1xufVxuXG50eXBlIGxleGJ1ZiA9XG4gIHsgcmVmaWxsX2J1ZmYgOiBsZXhidWYgLT4gdW5pdDtcbiAgICBtdXRhYmxlIGxleF9idWZmZXIgOiBieXRlcztcbiAgICBtdXRhYmxlIGxleF9idWZmZXJfbGVuIDogaW50O1xuICAgIG11dGFibGUgbGV4X2Fic19wb3MgOiBpbnQ7XG4gICAgbXV0YWJsZSBsZXhfc3RhcnRfcG9zIDogaW50O1xuICAgIG11dGFibGUgbGV4X2N1cnJfcG9zIDogaW50O1xuICAgIG11dGFibGUgbGV4X2xhc3RfcG9zIDogaW50O1xuICAgIG11dGFibGUgbGV4X2xhc3RfYWN0aW9uIDogaW50O1xuICAgIG11dGFibGUgbGV4X2VvZl9yZWFjaGVkIDogYm9vbDtcbiAgICBtdXRhYmxlIGxleF9tZW0gOiBpbnQgYXJyYXk7XG4gICAgbXV0YWJsZSBsZXhfc3RhcnRfcCA6IHBvc2l0aW9uO1xuICAgIG11dGFibGUgbGV4X2N1cnJfcCA6IHBvc2l0aW9uO1xuICB9XG5cbnR5cGUgbGV4X3RhYmxlcyA9XG4gIHsgbGV4X2Jhc2U6IHN0cmluZztcbiAgICBsZXhfYmFja3Ryazogc3RyaW5nO1xuICAgIGxleF9kZWZhdWx0OiBzdHJpbmc7XG4gICAgbGV4X3RyYW5zOiBzdHJpbmc7XG4gICAgbGV4X2NoZWNrOiBzdHJpbmc7XG4gICAgbGV4X2Jhc2VfY29kZSA6IHN0cmluZztcbiAgICBsZXhfYmFja3Rya19jb2RlIDogc3RyaW5nO1xuICAgIGxleF9kZWZhdWx0X2NvZGUgOiBzdHJpbmc7XG4gICAgbGV4X3RyYW5zX2NvZGUgOiBzdHJpbmc7XG4gICAgbGV4X2NoZWNrX2NvZGUgOiBzdHJpbmc7XG4gICAgbGV4X2NvZGU6IHN0cmluZzt9XG5cbmV4dGVybmFsIGNfZW5naW5lIDogbGV4X3RhYmxlcyAtPiBpbnQgLT4gbGV4YnVmIC0+IGludCA9IFwiY2FtbF9sZXhfZW5naW5lXCJcbmV4dGVybmFsIGNfbmV3X2VuZ2luZSA6IGxleF90YWJsZXMgLT4gaW50IC0+IGxleGJ1ZiAtPiBpbnRcbiAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9uZXdfbGV4X2VuZ2luZVwiXG5cbmxldCBlbmdpbmUgdGJsIHN0YXRlIGJ1ZiA9XG4gIGxldCByZXN1bHQgPSBjX2VuZ2luZSB0Ymwgc3RhdGUgYnVmIGluXG4gIGlmIHJlc3VsdCA+PSAwICYmIGJ1Zi5sZXhfY3Vycl9wICE9IGR1bW15X3BvcyB0aGVuIGJlZ2luXG4gICAgYnVmLmxleF9zdGFydF9wIDwtIGJ1Zi5sZXhfY3Vycl9wO1xuICAgIGJ1Zi5sZXhfY3Vycl9wIDwtIHtidWYubGV4X2N1cnJfcFxuICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHBvc19jbnVtID0gYnVmLmxleF9hYnNfcG9zICsgYnVmLmxleF9jdXJyX3Bvc307XG4gIGVuZDtcbiAgcmVzdWx0XG5cblxubGV0IG5ld19lbmdpbmUgdGJsIHN0YXRlIGJ1ZiA9XG4gIGxldCByZXN1bHQgPSBjX25ld19lbmdpbmUgdGJsIHN0YXRlIGJ1ZiBpblxuICBpZiByZXN1bHQgPj0gMCAmJiBidWYubGV4X2N1cnJfcCAhPSBkdW1teV9wb3MgdGhlbiBiZWdpblxuICAgIGJ1Zi5sZXhfc3RhcnRfcCA8LSBidWYubGV4X2N1cnJfcDtcbiAgICBidWYubGV4X2N1cnJfcCA8LSB7YnVmLmxleF9jdXJyX3BcbiAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBwb3NfY251bSA9IGJ1Zi5sZXhfYWJzX3BvcyArIGJ1Zi5sZXhfY3Vycl9wb3N9O1xuICBlbmQ7XG4gIHJlc3VsdFxuXG5sZXQgbGV4X3JlZmlsbCByZWFkX2Z1biBhdXhfYnVmZmVyIGxleGJ1ZiA9XG4gIGxldCByZWFkID1cbiAgICByZWFkX2Z1biBhdXhfYnVmZmVyIChCeXRlcy5sZW5ndGggYXV4X2J1ZmZlcikgaW5cbiAgbGV0IG4gPVxuICAgIGlmIHJlYWQgPiAwXG4gICAgdGhlbiByZWFkXG4gICAgZWxzZSAobGV4YnVmLmxleF9lb2ZfcmVhY2hlZCA8LSB0cnVlOyAwKSBpblxuICAoKiBDdXJyZW50IHN0YXRlIG9mIHRoZSBidWZmZXI6XG4gICAgICAgIDwtLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLT5cbiAgICAgICAgfCAganVuayB8ICAgICAgdmFsaWQgZGF0YSAgICAgfCAgIGp1bmsgICAgfFxuICAgICAgICBeICAgICAgIF4gICAgICAgICAgICAgICAgICAgICBeICAgICAgICAgICBeXG4gICAgICAgIDAgICAgc3RhcnRfcG9zICAgICAgICAgICAgIGJ1ZmZlcl9lbmQgICAgQnl0ZXMubGVuZ3RoIGJ1ZmZlclxuICAqKVxuICBpZiBsZXhidWYubGV4X2J1ZmZlcl9sZW4gKyBuID4gQnl0ZXMubGVuZ3RoIGxleGJ1Zi5sZXhfYnVmZmVyIHRoZW4gYmVnaW5cbiAgICAoKiBUaGVyZSBpcyBub3QgZW5vdWdoIHNwYWNlIGF0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciAqKVxuICAgIGlmIGxleGJ1Zi5sZXhfYnVmZmVyX2xlbiAtIGxleGJ1Zi5sZXhfc3RhcnRfcG9zICsgblxuICAgICAgIDw9IEJ5dGVzLmxlbmd0aCBsZXhidWYubGV4X2J1ZmZlclxuICAgIHRoZW4gYmVnaW5cbiAgICAgICgqIEJ1dCB0aGVyZSBpcyBlbm91Z2ggc3BhY2UgaWYgd2UgcmVjbGFpbSB0aGUganVuayBhdCB0aGUgYmVnaW5uaW5nXG4gICAgICAgICBvZiB0aGUgYnVmZmVyICopXG4gICAgICBCeXRlcy5ibGl0IGxleGJ1Zi5sZXhfYnVmZmVyIGxleGJ1Zi5sZXhfc3RhcnRfcG9zXG4gICAgICAgICAgICAgICAgICBsZXhidWYubGV4X2J1ZmZlciAwXG4gICAgICAgICAgICAgICAgICAobGV4YnVmLmxleF9idWZmZXJfbGVuIC0gbGV4YnVmLmxleF9zdGFydF9wb3MpXG4gICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgICgqIFdlIG11c3QgZ3JvdyB0aGUgYnVmZmVyLiAgRG91YmxpbmcgaXRzIHNpemUgd2lsbCBwcm92aWRlIGVub3VnaFxuICAgICAgICAgc3BhY2Ugc2luY2UgbiA8PSBTdHJpbmcubGVuZ3RoIGF1eF9idWZmZXIgPD0gU3RyaW5nLmxlbmd0aCBidWZmZXIuXG4gICAgICAgICBXYXRjaCBvdXQgZm9yIHN0cmluZyBsZW5ndGggb3ZlcmZsb3csIHRob3VnaC4gKilcbiAgICAgIGxldCBuZXdsZW4gPVxuICAgICAgICBJbnQubWluICgyICogQnl0ZXMubGVuZ3RoIGxleGJ1Zi5sZXhfYnVmZmVyKSBTeXMubWF4X3N0cmluZ19sZW5ndGggaW5cbiAgICAgIGlmIGxleGJ1Zi5sZXhfYnVmZmVyX2xlbiAtIGxleGJ1Zi5sZXhfc3RhcnRfcG9zICsgbiA+IG5ld2xlblxuICAgICAgdGhlbiBmYWlsd2l0aCBcIkxleGluZy5sZXhfcmVmaWxsOiBjYW5ub3QgZ3JvdyBidWZmZXJcIjtcbiAgICAgIGxldCBuZXdidWYgPSBCeXRlcy5jcmVhdGUgbmV3bGVuIGluXG4gICAgICAoKiBDb3B5IHRoZSB2YWxpZCBkYXRhIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5ldyBidWZmZXIgKilcbiAgICAgIEJ5dGVzLmJsaXQgbGV4YnVmLmxleF9idWZmZXIgbGV4YnVmLmxleF9zdGFydF9wb3NcbiAgICAgICAgICAgICAgICAgIG5ld2J1ZiAwXG4gICAgICAgICAgICAgICAgICAobGV4YnVmLmxleF9idWZmZXJfbGVuIC0gbGV4YnVmLmxleF9zdGFydF9wb3MpO1xuICAgICAgbGV4YnVmLmxleF9idWZmZXIgPC0gbmV3YnVmXG4gICAgZW5kO1xuICAgICgqIFJlYWxsb2NhdGlvbiBvciBub3QsIHdlIGhhdmUgc2hpZnRlZCB0aGUgZGF0YSBsZWZ0IGJ5XG4gICAgICAgc3RhcnRfcG9zIGNoYXJhY3RlcnM7IHVwZGF0ZSB0aGUgcG9zaXRpb25zICopXG4gICAgbGV0IHMgPSBsZXhidWYubGV4X3N0YXJ0X3BvcyBpblxuICAgIGxleGJ1Zi5sZXhfYWJzX3BvcyA8LSBsZXhidWYubGV4X2Fic19wb3MgKyBzO1xuICAgIGxleGJ1Zi5sZXhfY3Vycl9wb3MgPC0gbGV4YnVmLmxleF9jdXJyX3BvcyAtIHM7XG4gICAgbGV4YnVmLmxleF9zdGFydF9wb3MgPC0gMDtcbiAgICBsZXhidWYubGV4X2xhc3RfcG9zIDwtIGxleGJ1Zi5sZXhfbGFzdF9wb3MgLSBzO1xuICAgIGxleGJ1Zi5sZXhfYnVmZmVyX2xlbiA8LSBsZXhidWYubGV4X2J1ZmZlcl9sZW4gLSBzIDtcbiAgICBsZXQgdCA9IGxleGJ1Zi5sZXhfbWVtIGluXG4gICAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCB0LTEgZG9cbiAgICAgIGxldCB2ID0gdC4oaSkgaW5cbiAgICAgIGlmIHYgPj0gMCB0aGVuXG4gICAgICAgIHQuKGkpIDwtIHYtc1xuICAgIGRvbmVcbiAgZW5kO1xuICAoKiBUaGVyZSBpcyBub3cgZW5vdWdoIHNwYWNlIGF0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciAqKVxuICBCeXRlcy5ibGl0IGF1eF9idWZmZXIgMCBsZXhidWYubGV4X2J1ZmZlciBsZXhidWYubGV4X2J1ZmZlcl9sZW4gbjtcbiAgbGV4YnVmLmxleF9idWZmZXJfbGVuIDwtIGxleGJ1Zi5sZXhfYnVmZmVyX2xlbiArIG5cblxubGV0IHplcm9fcG9zID0ge1xuICBwb3NfZm5hbWUgPSBcIlwiO1xuICBwb3NfbG51bSA9IDE7XG4gIHBvc19ib2wgPSAwO1xuICBwb3NfY251bSA9IDA7XG59XG5cbmxldCBmcm9tX2Z1bmN0aW9uID8od2l0aF9wb3NpdGlvbnMgPSB0cnVlKSBmID1cbiAgeyByZWZpbGxfYnVmZiA9IGxleF9yZWZpbGwgZiAoQnl0ZXMuY3JlYXRlIDUxMik7XG4gICAgbGV4X2J1ZmZlciA9IEJ5dGVzLmNyZWF0ZSAxMDI0O1xuICAgIGxleF9idWZmZXJfbGVuID0gMDtcbiAgICBsZXhfYWJzX3BvcyA9IDA7XG4gICAgbGV4X3N0YXJ0X3BvcyA9IDA7XG4gICAgbGV4X2N1cnJfcG9zID0gMDtcbiAgICBsZXhfbGFzdF9wb3MgPSAwO1xuICAgIGxleF9sYXN0X2FjdGlvbiA9IDA7XG4gICAgbGV4X21lbSA9IFt8fF07XG4gICAgbGV4X2VvZl9yZWFjaGVkID0gZmFsc2U7XG4gICAgbGV4X3N0YXJ0X3AgPSBpZiB3aXRoX3Bvc2l0aW9ucyB0aGVuIHplcm9fcG9zIGVsc2UgZHVtbXlfcG9zO1xuICAgIGxleF9jdXJyX3AgPSBpZiB3aXRoX3Bvc2l0aW9ucyB0aGVuIHplcm9fcG9zIGVsc2UgZHVtbXlfcG9zO1xuICB9XG5cbmxldCBmcm9tX2NoYW5uZWwgP3dpdGhfcG9zaXRpb25zIGljID1cbiAgZnJvbV9mdW5jdGlvbiA/d2l0aF9wb3NpdGlvbnMgKGZ1biBidWYgbiAtPiBpbnB1dCBpYyBidWYgMCBuKVxuXG5sZXQgZnJvbV9zdHJpbmcgPyh3aXRoX3Bvc2l0aW9ucyA9IHRydWUpIHMgPVxuICB7IHJlZmlsbF9idWZmID0gKGZ1biBsZXhidWYgLT4gbGV4YnVmLmxleF9lb2ZfcmVhY2hlZCA8LSB0cnVlKTtcbiAgICBsZXhfYnVmZmVyID0gQnl0ZXMub2Zfc3RyaW5nIHM7ICgqIGhhdmUgdG8gbWFrZSBhIGNvcHkgZm9yIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggdW5zYWZlLXN0cmluZyBtb2RlICopXG4gICAgbGV4X2J1ZmZlcl9sZW4gPSBTdHJpbmcubGVuZ3RoIHM7XG4gICAgbGV4X2Fic19wb3MgPSAwO1xuICAgIGxleF9zdGFydF9wb3MgPSAwO1xuICAgIGxleF9jdXJyX3BvcyA9IDA7XG4gICAgbGV4X2xhc3RfcG9zID0gMDtcbiAgICBsZXhfbGFzdF9hY3Rpb24gPSAwO1xuICAgIGxleF9tZW0gPSBbfHxdO1xuICAgIGxleF9lb2ZfcmVhY2hlZCA9IHRydWU7XG4gICAgbGV4X3N0YXJ0X3AgPSBpZiB3aXRoX3Bvc2l0aW9ucyB0aGVuIHplcm9fcG9zIGVsc2UgZHVtbXlfcG9zO1xuICAgIGxleF9jdXJyX3AgPSBpZiB3aXRoX3Bvc2l0aW9ucyB0aGVuIHplcm9fcG9zIGVsc2UgZHVtbXlfcG9zO1xuICB9XG5cbmxldCBzZXRfcG9zaXRpb24gbGV4YnVmIHBvc2l0aW9uID1cbiAgbGV4YnVmLmxleF9jdXJyX3AgIDwtIHtwb3NpdGlvbiB3aXRoIHBvc19mbmFtZSA9IGxleGJ1Zi5sZXhfY3Vycl9wLnBvc19mbmFtZX07XG4gIGxleGJ1Zi5sZXhfYWJzX3BvcyA8LSBwb3NpdGlvbi5wb3NfY251bVxuXG5sZXQgc2V0X2ZpbGVuYW1lIGxleGJ1ZiBmbmFtZSA9XG4gIGxleGJ1Zi5sZXhfY3Vycl9wIDwtIHtsZXhidWYubGV4X2N1cnJfcCB3aXRoIHBvc19mbmFtZSA9IGZuYW1lfVxuXG5sZXQgd2l0aF9wb3NpdGlvbnMgbGV4YnVmID0gbGV4YnVmLmxleF9jdXJyX3AgIT0gZHVtbXlfcG9zXG5cbmxldCBsZXhlbWUgbGV4YnVmID1cbiAgbGV0IGxlbiA9IGxleGJ1Zi5sZXhfY3Vycl9wb3MgLSBsZXhidWYubGV4X3N0YXJ0X3BvcyBpblxuICBCeXRlcy5zdWJfc3RyaW5nIGxleGJ1Zi5sZXhfYnVmZmVyIGxleGJ1Zi5sZXhfc3RhcnRfcG9zIGxlblxuXG5sZXQgc3ViX2xleGVtZSBsZXhidWYgaTEgaTIgPVxuICBsZXQgbGVuID0gaTItaTEgaW5cbiAgQnl0ZXMuc3ViX3N0cmluZyBsZXhidWYubGV4X2J1ZmZlciBpMSBsZW5cblxubGV0IHN1Yl9sZXhlbWVfb3B0IGxleGJ1ZiBpMSBpMiA9XG4gIGlmIGkxID49IDAgdGhlbiBiZWdpblxuICAgIGxldCBsZW4gPSBpMi1pMSBpblxuICAgIFNvbWUgKEJ5dGVzLnN1Yl9zdHJpbmcgbGV4YnVmLmxleF9idWZmZXIgaTEgbGVuKVxuICBlbmQgZWxzZSBiZWdpblxuICAgIE5vbmVcbiAgZW5kXG5cbmxldCBzdWJfbGV4ZW1lX2NoYXIgbGV4YnVmIGkgPSBCeXRlcy5nZXQgbGV4YnVmLmxleF9idWZmZXIgaVxuXG5sZXQgc3ViX2xleGVtZV9jaGFyX29wdCBsZXhidWYgaSA9XG4gIGlmIGkgPj0gMCB0aGVuXG4gICAgU29tZSAoQnl0ZXMuZ2V0IGxleGJ1Zi5sZXhfYnVmZmVyIGkpXG4gIGVsc2VcbiAgICBOb25lXG5cblxubGV0IGxleGVtZV9jaGFyIGxleGJ1ZiBpID1cbiAgQnl0ZXMuZ2V0IGxleGJ1Zi5sZXhfYnVmZmVyIChsZXhidWYubGV4X3N0YXJ0X3BvcyArIGkpXG5cbmxldCBsZXhlbWVfc3RhcnQgbGV4YnVmID0gbGV4YnVmLmxleF9zdGFydF9wLnBvc19jbnVtXG5sZXQgbGV4ZW1lX2VuZCBsZXhidWYgPSBsZXhidWYubGV4X2N1cnJfcC5wb3NfY251bVxuXG5sZXQgbGV4ZW1lX3N0YXJ0X3AgbGV4YnVmID0gbGV4YnVmLmxleF9zdGFydF9wXG5sZXQgbGV4ZW1lX2VuZF9wIGxleGJ1ZiA9IGxleGJ1Zi5sZXhfY3Vycl9wXG5cbmxldCBuZXdfbGluZSBsZXhidWYgPVxuICBsZXQgbGNwID0gbGV4YnVmLmxleF9jdXJyX3AgaW5cbiAgaWYgbGNwICE9IGR1bW15X3BvcyB0aGVuXG4gICAgbGV4YnVmLmxleF9jdXJyX3AgPC1cbiAgICAgIHsgbGNwIHdpdGhcbiAgICAgICAgcG9zX2xudW0gPSBsY3AucG9zX2xudW0gKyAxO1xuICAgICAgICBwb3NfYm9sID0gbGNwLnBvc19jbnVtO1xuICAgICAgfVxuXG5cblxuKCogRGlzY2FyZCBkYXRhIGxlZnQgaW4gbGV4ZXIgYnVmZmVyLiAqKVxuXG5sZXQgZmx1c2hfaW5wdXQgbGIgPVxuICBsYi5sZXhfY3Vycl9wb3MgPC0gMDtcbiAgbGIubGV4X2Fic19wb3MgPC0gMDtcbiAgbGV0IGxjcCA9IGxiLmxleF9jdXJyX3AgaW5cbiAgaWYgbGNwICE9IGR1bW15X3BvcyB0aGVuXG4gICAgbGIubGV4X2N1cnJfcCA8LSB7emVyb19wb3Mgd2l0aCBwb3NfZm5hbWUgPSBsY3AucG9zX2ZuYW1lfTtcbiAgbGIubGV4X2J1ZmZlcl9sZW4gPC0gMDtcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICBCZW5vaXQgVmF1Z29uLCBFTlNUQSAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMTQgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxub3BlbiBDYW1saW50ZXJuYWxGb3JtYXRCYXNpY3NcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgKCogVG9vbHMgdG8gbWFuaXB1bGF0ZSBzY2FubmluZyBzZXQgb2YgY2hhcnMgKHNlZSAlWy4uLl0pICopXG5cbnR5cGUgbXV0YWJsZV9jaGFyX3NldCA9IGJ5dGVzXG5cbigqIENyZWF0ZSBhIGZyZXNoLCBlbXB0eSwgbXV0YWJsZSBjaGFyIHNldC4gKilcbmxldCBjcmVhdGVfY2hhcl9zZXQgKCkgPSBCeXRlcy5tYWtlIDMyICdcXDAwMCdcblxuKCogQWRkIGEgY2hhciBpbiBhIG11dGFibGUgY2hhciBzZXQuICopXG5sZXQgYWRkX2luX2NoYXJfc2V0IGNoYXJfc2V0IGMgPVxuICBsZXQgaW5kID0gaW50X29mX2NoYXIgYyBpblxuICBsZXQgc3RyX2luZCA9IGluZCBsc3IgMyBhbmQgbWFzayA9IDEgbHNsIChpbmQgbGFuZCAwYjExMSkgaW5cbiAgQnl0ZXMuc2V0IGNoYXJfc2V0IHN0cl9pbmRcbiAgICAoY2hhcl9vZl9pbnQgKGludF9vZl9jaGFyIChCeXRlcy5nZXQgY2hhcl9zZXQgc3RyX2luZCkgbG9yIG1hc2spKVxuXG5sZXQgZnJlZXplX2NoYXJfc2V0IGNoYXJfc2V0ID1cbiAgQnl0ZXMudG9fc3RyaW5nIGNoYXJfc2V0XG5cbigqIENvbXB1dGUgdGhlIGNvbXBsZW1lbnQgb2YgYSBjaGFyIHNldC4gKilcbmxldCByZXZfY2hhcl9zZXQgY2hhcl9zZXQgPVxuICBsZXQgY2hhcl9zZXQnID0gY3JlYXRlX2NoYXJfc2V0ICgpIGluXG4gIGZvciBpID0gMCB0byAzMSBkb1xuICAgIEJ5dGVzLnNldCBjaGFyX3NldCcgaVxuICAgICAgKGNoYXJfb2ZfaW50IChpbnRfb2ZfY2hhciAoU3RyaW5nLmdldCBjaGFyX3NldCBpKSBseG9yIDB4RkYpKTtcbiAgZG9uZTtcbiAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyBjaGFyX3NldCdcblxuKCogUmV0dXJuIHRydWUgaWYgYSBgYycgaXMgaW4gYGNoYXJfc2V0Jy4gKilcbmxldCBpc19pbl9jaGFyX3NldCBjaGFyX3NldCBjID1cbiAgbGV0IGluZCA9IGludF9vZl9jaGFyIGMgaW5cbiAgbGV0IHN0cl9pbmQgPSBpbmQgbHNyIDMgYW5kIG1hc2sgPSAxIGxzbCAoaW5kIGxhbmQgMGIxMTEpIGluXG4gIChpbnRfb2ZfY2hhciAoU3RyaW5nLmdldCBjaGFyX3NldCBzdHJfaW5kKSBsYW5kIG1hc2spIDw+IDBcblxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICgqIElnbm9yZWQgcGFyYW0gY29udmVyc2lvbiAqKVxuXG4oKiBHQURUIHVzZWQgdG8gYWJzdHJhY3QgYW4gZXhpc3RlbnRpYWwgdHlwZSBwYXJhbWV0ZXIuICopXG4oKiBTZWUgcGFyYW1fZm9ybWF0X29mX2lnbm9yZWRfZm9ybWF0LiAqKVxudHlwZSAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgcGFyYW1fZm9ybWF0X2ViYiA9IFBhcmFtX2Zvcm1hdF9FQkIgOlxuICAgICgneCAtPiAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgcGFyYW1fZm9ybWF0X2ViYlxuXG4oKiBDb21wdXRlIGEgcGFkZGluZyBhc3NvY2lhdGVkIHRvIGEgcGFkX29wdGlvbiAoc2VlIFwiJV80MmRcIikuICopXG5sZXQgcGFkX29mX3BhZF9vcHQgcGFkX29wdCA9IG1hdGNoIHBhZF9vcHQgd2l0aFxuICB8IE5vbmUgLT4gTm9fcGFkZGluZ1xuICB8IFNvbWUgd2lkdGggLT4gTGl0X3BhZGRpbmcgKFJpZ2h0LCB3aWR0aClcblxuKCogQ29tcHV0ZSBhIHByZWNpc2lvbiBhc3NvY2lhdGVkIHRvIGEgcHJlY19vcHRpb24gKHNlZSBcIiVfLjQyZlwiKS4gKilcbmxldCBwcmVjX29mX3ByZWNfb3B0IHByZWNfb3B0ID0gbWF0Y2ggcHJlY19vcHQgd2l0aFxuICB8IE5vbmUgLT4gTm9fcHJlY2lzaW9uXG4gIHwgU29tZSBuZGVjIC0+IExpdF9wcmVjaXNpb24gbmRlY1xuXG4oKiBUdXJuIGFuIGlnbm9yZWQgcGFyYW0gaW50byBpdHMgZXF1aXZhbGVudCBub3QtaWdub3JlZCBmb3JtYXQgbm9kZS4gKilcbigqIFVzZWQgZm9yIGZvcm1hdCBwcmV0dHktcHJpbnRpbmcgYW5kIFNjYW5mLiAqKVxubGV0IHBhcmFtX2Zvcm1hdF9vZl9pZ25vcmVkX2Zvcm1hdCA6IHR5cGUgYSBiIGMgZCBlIGYgeCB5IC5cbiAgICAoYSwgYiwgYywgZCwgeSwgeCkgaWdub3JlZCAtPiAoeCwgYiwgYywgeSwgZSwgZikgZm10IC0+XG4gICAgICAoYSwgYiwgYywgZCwgZSwgZikgcGFyYW1fZm9ybWF0X2ViYiA9XG5mdW4gaWduIGZtdCAtPiBtYXRjaCBpZ24gd2l0aFxuICB8IElnbm9yZWRfY2hhciAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKENoYXIgZm10KVxuICB8IElnbm9yZWRfY2FtbF9jaGFyIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQiAoQ2FtbF9jaGFyIGZtdClcbiAgfCBJZ25vcmVkX3N0cmluZyBwYWRfb3B0IC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQiAoU3RyaW5nIChwYWRfb2ZfcGFkX29wdCBwYWRfb3B0LCBmbXQpKVxuICB8IElnbm9yZWRfY2FtbF9zdHJpbmcgcGFkX29wdCAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKENhbWxfc3RyaW5nIChwYWRfb2ZfcGFkX29wdCBwYWRfb3B0LCBmbXQpKVxuICB8IElnbm9yZWRfaW50IChpY29udiwgcGFkX29wdCkgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChJbnQgKGljb252LCBwYWRfb2ZfcGFkX29wdCBwYWRfb3B0LCBOb19wcmVjaXNpb24sIGZtdCkpXG4gIHwgSWdub3JlZF9pbnQzMiAoaWNvbnYsIHBhZF9vcHQpIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQlxuICAgICAgKEludDMyIChpY29udiwgcGFkX29mX3BhZF9vcHQgcGFkX29wdCwgTm9fcHJlY2lzaW9uLCBmbXQpKVxuICB8IElnbm9yZWRfbmF0aXZlaW50IChpY29udiwgcGFkX29wdCkgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCXG4gICAgICAoTmF0aXZlaW50IChpY29udiwgcGFkX29mX3BhZF9vcHQgcGFkX29wdCwgTm9fcHJlY2lzaW9uLCBmbXQpKVxuICB8IElnbm9yZWRfaW50NjQgKGljb252LCBwYWRfb3B0KSAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkJcbiAgICAgIChJbnQ2NCAoaWNvbnYsIHBhZF9vZl9wYWRfb3B0IHBhZF9vcHQsIE5vX3ByZWNpc2lvbiwgZm10KSlcbiAgfCBJZ25vcmVkX2Zsb2F0IChwYWRfb3B0LCBwcmVjX29wdCkgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCXG4gICAgICAoRmxvYXQgKChGbG9hdF9mbGFnXywgRmxvYXRfZiksXG4gICAgICAgICAgICAgIHBhZF9vZl9wYWRfb3B0IHBhZF9vcHQsIHByZWNfb2ZfcHJlY19vcHQgcHJlY19vcHQsIGZtdCkpXG4gIHwgSWdub3JlZF9ib29sIHBhZF9vcHQgLT5cbiAgICBQYXJhbV9mb3JtYXRfRUJCIChCb29sIChwYWRfb2ZfcGFkX29wdCBwYWRfb3B0LCBmbXQpKVxuICB8IElnbm9yZWRfZm9ybWF0X2FyZyAocGFkX29wdCwgZm10dHkpIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQiAoRm9ybWF0X2FyZyAocGFkX29wdCwgZm10dHksIGZtdCkpXG4gIHwgSWdub3JlZF9mb3JtYXRfc3Vic3QgKHBhZF9vcHQsIGZtdHR5KSAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkJcbiAgICAgIChGb3JtYXRfc3Vic3QgKHBhZF9vcHQsIGZtdHR5LCBmbXQpKVxuICB8IElnbm9yZWRfcmVhZGVyIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQiAoUmVhZGVyIGZtdClcbiAgfCBJZ25vcmVkX3NjYW5fY2hhcl9zZXQgKHdpZHRoX29wdCwgY2hhcl9zZXQpIC0+XG4gICAgUGFyYW1fZm9ybWF0X0VCQiAoU2Nhbl9jaGFyX3NldCAod2lkdGhfb3B0LCBjaGFyX3NldCwgZm10KSlcbiAgfCBJZ25vcmVkX3NjYW5fZ2V0X2NvdW50ZXIgY291bnRlciAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKFNjYW5fZ2V0X2NvdW50ZXIgKGNvdW50ZXIsIGZtdCkpXG4gIHwgSWdub3JlZF9zY2FuX25leHRfY2hhciAtPlxuICAgIFBhcmFtX2Zvcm1hdF9FQkIgKFNjYW5fbmV4dF9jaGFyIGZtdClcblxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogVHlwZXMgKilcblxudHlwZSAoJ2IsICdjKSBhY2NfZm9ybWF0dGluZ19nZW4gPVxuICB8IEFjY19vcGVuX3RhZyBvZiAoJ2IsICdjKSBhY2NcbiAgfCBBY2Nfb3Blbl9ib3ggb2YgKCdiLCAnYykgYWNjXG5cbigqIFJldmVyc2VkIGxpc3Qgb2YgcHJpbnRpbmcgYXRvbXMuICopXG4oKiBVc2VkIHRvIGFjY3VtdWxhdGUgcHJpbnRmIGFyZ3VtZW50cy4gKilcbmFuZCAoJ2IsICdjKSBhY2MgPVxuICB8IEFjY19mb3JtYXR0aW5nX2xpdCBvZiAoJ2IsICdjKSBhY2MgKiBmb3JtYXR0aW5nX2xpdFxuICAgICAgKCogU3BlY2lhbCBmbXR0aW5nIChib3gpICopXG4gIHwgQWNjX2Zvcm1hdHRpbmdfZ2VuIG9mICgnYiwgJ2MpIGFjYyAqICgnYiwgJ2MpIGFjY19mb3JtYXR0aW5nX2dlblxuICAgICAgKCogU3BlY2lhbCBmbXR0aW5nIChib3gpICopXG4gIHwgQWNjX3N0cmluZ19saXRlcmFsIG9mICgnYiwgJ2MpIGFjYyAqIHN0cmluZyAgICAgKCogTGl0ZXJhbCBzdHJpbmcgKilcbiAgfCBBY2NfY2hhcl9saXRlcmFsICAgb2YgKCdiLCAnYykgYWNjICogY2hhciAgICAgICAoKiBMaXRlcmFsIGNoYXIgKilcbiAgfCBBY2NfZGF0YV9zdHJpbmcgICAgb2YgKCdiLCAnYykgYWNjICogc3RyaW5nICAgICAoKiBHZW5lcmF0ZWQgc3RyaW5nICopXG4gIHwgQWNjX2RhdGFfY2hhciAgICAgIG9mICgnYiwgJ2MpIGFjYyAqIGNoYXIgICAgICAgKCogR2VuZXJhdGVkIGNoYXIgKilcbiAgfCBBY2NfZGVsYXkgICAgICAgICAgb2YgKCdiLCAnYykgYWNjICogKCdiIC0+ICdjKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogRGVsYXllZCBwcmludGluZyAoJWEsICV0KSAqKVxuICB8IEFjY19mbHVzaCAgICAgICAgICBvZiAoJ2IsICdjKSBhY2MgICAgICAgICAgICAgICgqIEZsdXNoICopXG4gIHwgQWNjX2ludmFsaWRfYXJnICAgIG9mICgnYiwgJ2MpIGFjYyAqIHN0cmluZ1xuICAgICAgKCogUmFpc2UgSW52YWxpZF9hcmd1bWVudCBtc2cgKilcbiAgfCBFbmRfb2ZfYWNjXG5cbigqIExpc3Qgb2YgaGV0ZXJvZ2VuZW91cyB2YWx1ZXMuICopXG4oKiBVc2VkIHRvIGFjY3VtdWxhdGUgc2NhbmYgY2FsbGJhY2sgYXJndW1lbnRzLiAqKVxudHlwZSAoJ2EsICdiKSBoZXRlcl9saXN0ID1cbiAgfCBDb25zIDogJ2MgKiAoJ2EsICdiKSBoZXRlcl9saXN0IC0+ICgnYyAtPiAnYSwgJ2IpIGhldGVyX2xpc3RcbiAgfCBOaWwgOiAoJ2IsICdiKSBoZXRlcl9saXN0XG5cbigqIEV4aXN0ZW50aWFsIEJsYWNrIEJveGVzLiAqKVxuKCogVXNlZCB0byBhYnN0cmFjdCBzb21lIGV4aXN0ZW50aWFsIHR5cGUgcGFyYW1ldGVycy4gKilcblxuKCogR0FEVCB0eXBlIGFzc29jaWF0aW5nIGEgcGFkZGluZyBhbmQgYW4gZm10dHkuICopXG4oKiBTZWUgdGhlIHR5cGVfcGFkZGluZyBmdW5jdGlvbi4gKilcbnR5cGUgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIHBhZGRpbmdfZm10dHlfZWJiID0gUGFkZGluZ19mbXR0eV9FQkIgOlxuICAgICAoJ3gsICd5KSBwYWRkaW5nICogKCd5LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdHR5IC0+XG4gICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBwYWRkaW5nX2ZtdHR5X2ViYlxuXG4oKiBHQURUIHR5cGUgYXNzb2NpYXRpbmcgYSBwYWRkaW5nLCBhIHByZWNpc2lvbiBhbmQgYW4gZm10dHkuICopXG4oKiBTZWUgdGhlIHR5cGVfcGFkcHJlYyBmdW5jdGlvbi4gKilcbnR5cGUgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIHBhZHByZWNfZm10dHlfZWJiID0gUGFkcHJlY19mbXR0eV9FQkIgOlxuICAgICAoJ3gsICd5KSBwYWRkaW5nICogKCd5LCAneikgcHJlY2lzaW9uICogKCd6LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdHR5IC0+XG4gICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBwYWRwcmVjX2ZtdHR5X2ViYlxuXG4oKiBHQURUIHR5cGUgYXNzb2NpYXRpbmcgYSBwYWRkaW5nIGFuZCBhbiBmbXQuICopXG4oKiBTZWUgbWFrZV9wYWRkaW5nX2ZtdF9lYmIgYW5kIHBhcnNlX2Zvcm1hdCBmdW5jdGlvbnMuICopXG50eXBlICgnYSwgJ2IsICdjLCAnZSwgJ2YpIHBhZGRpbmdfZm10X2ViYiA9IFBhZGRpbmdfZm10X0VCQiA6XG4gICAgIChfLCAneCAtPiAnYSkgcGFkZGluZyAqXG4gICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgKCd4LCAnYiwgJ2MsICdlLCAnZikgcGFkZGluZ19mbXRfZWJiXG5cbigqIEdBRFQgdHlwZSBhc3NvY2lhdGluZyBhIHByZWNpc2lvbiBhbmQgYW4gZm10LiAqKVxuKCogU2VlIG1ha2VfcHJlY2lzaW9uX2ZtdF9lYmIgYW5kIHBhcnNlX2Zvcm1hdCBmdW5jdGlvbnMuICopXG50eXBlICgnYSwgJ2IsICdjLCAnZSwgJ2YpIHByZWNpc2lvbl9mbXRfZWJiID0gUHJlY2lzaW9uX2ZtdF9FQkIgOlxuICAgICAoXywgJ3ggLT4gJ2EpIHByZWNpc2lvbiAqXG4gICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgKCd4LCAnYiwgJ2MsICdlLCAnZikgcHJlY2lzaW9uX2ZtdF9lYmJcblxuKCogR0FEVCB0eXBlIGFzc29jaWF0aW5nIGEgcGFkZGluZywgYSBwcmVjaXNpb24gYW5kIGFuIGZtdC4gKilcbigqIFNlZSBtYWtlX3BhZHByZWNfZm10X2ViYiBhbmQgcGFyc2VfZm9ybWF0IGZ1bmN0aW9ucy4gKilcbnR5cGUgKCdwLCAnYiwgJ2MsICdlLCAnZikgcGFkcHJlY19mbXRfZWJiID0gUGFkcHJlY19mbXRfRUJCIDpcbiAgICAgKCd4LCAneSkgcGFkZGluZyAqICgneSwgJ3AgLT4gJ2EpIHByZWNpc2lvbiAqXG4gICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgKCdwLCAnYiwgJ2MsICdlLCAnZikgcGFkcHJlY19mbXRfZWJiXG5cbigqIEFic3RyYWN0IHRoZSAnYSBhbmQgJ2QgcGFyYW1ldGVycyBvZiBhbiBmbXQuICopXG4oKiBPdXRwdXQgdHlwZSBvZiB0aGUgZm9ybWF0IHBhcnNpbmcgZnVuY3Rpb24uICopXG50eXBlICgnYiwgJ2MsICdlLCAnZikgZm10X2ViYiA9IEZtdF9FQkIgOlxuICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICgnYiwgJ2MsICdlLCAnZikgZm10X2ViYlxuXG4oKiBHQURUIHR5cGUgYXNzb2NpYXRpbmcgYW4gZm10dHkgYW5kIGFuIGZtdC4gKilcbigqIFNlZSB0aGUgdHlwZV9mb3JtYXRfZ2VuIGZ1bmN0aW9uLiAqKVxudHlwZSAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10X2ZtdHR5X2ViYiA9IEZtdF9mbXR0eV9FQkIgOlxuICAgICAoJ2EsICdiLCAnYywgJ2QsICd5LCAneCkgZm10ICpcbiAgICAgKCd4LCAnYiwgJ2MsICd5LCAnZSwgJ2YpIGZtdHR5IC0+XG4gICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRfZm10dHlfZWJiXG5cbigqIEdBRFQgdHlwZSBhc3NvY2lhdGluZyBhbiBmbXR0eSBhbmQgYW4gZm10LiAqKVxuKCogU2VlIHRoZSB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBmdW5jdGlvbi4gKilcbnR5cGUgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdHR5X2ZtdF9lYmIgPSBGbXR0eV9mbXRfRUJCIDpcbiAgICAgKCdhLCAnYiwgJ2MsICdkLCAneSwgJ3gpIGZtdHR5ICpcbiAgICAgKCd4LCAnYiwgJ2MsICd5LCAnZSwgJ2YpIGZtdF9mbXR0eV9lYmIgLT5cbiAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdHR5X2ZtdF9lYmJcblxuKCogQWJzdHJhY3QgYWxsIGZtdHR5IHR5cGUgcGFyYW1ldGVycy4gKilcbigqIFVzZWQgdG8gY29tcGFyZSBmb3JtYXQgdHlwZXMuICopXG50eXBlIGZtdHR5X2ViYiA9IEZtdHR5X0VCQiA6ICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eSAtPiBmbXR0eV9lYmJcblxuKCogQWJzdHJhY3QgYWxsIHBhZGRpbmcgdHlwZSBwYXJhbWV0ZXJzLiAqKVxuKCogVXNlZCB0byBjb21wYXJlIHBhZGRpbmdzLiAqKVxudHlwZSBwYWRkaW5nX2ViYiA9IFBhZGRpbmdfRUJCIDogKCdhLCAnYikgcGFkZGluZyAtPiBwYWRkaW5nX2ViYlxuXG4oKiBBYnN0cmFjdCBhbGwgcHJlY2lzaW9uIHR5cGUgcGFyYW1ldGVycy4gKilcbigqIFVzZWQgdG8gY29tcGFyZSBwcmVjaXNpb25zLiAqKVxudHlwZSBwcmVjaXNpb25fZWJiID0gUHJlY2lzaW9uX0VCQiA6ICgnYSwgJ2IpIHByZWNpc2lvbiAtPiBwcmVjaXNpb25fZWJiXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQ29uc3RhbnRzICopXG5cbigqIERlZmF1bHQgcHJlY2lzaW9uIGZvciBmbG9hdCBwcmludGluZy4gKilcbmxldCBkZWZhdWx0X2Zsb2F0X3ByZWNpc2lvbiBmY29udiA9XG4gIG1hdGNoIHNuZCBmY29udiB3aXRoXG4gIHwgRmxvYXRfZiB8IEZsb2F0X2UgfCBGbG9hdF9FIHwgRmxvYXRfZyB8IEZsb2F0X0cgfCBGbG9hdF9oIHwgRmxvYXRfSFxuICB8IEZsb2F0X0NGIC0+IC02XG4gICgqIEZvciAlaCAlSCBhbmQgJSNGIGZvcm1hdHMsIGEgbmVnYXRpdmUgcHJlY2lzaW9uIG1lYW5zIFwiYXMgbWFueSBkaWdpdHMgYXNcbiAgICAgbmVjZXNzYXJ5XCIuICBGb3IgdGhlIG90aGVyIEZQIGZvcm1hdHMsIHdlIHRha2UgdGhlIGFic29sdXRlIHZhbHVlXG4gICAgIG9mIHRoZSBwcmVjaXNpb24sIGhlbmNlIDYgZGlnaXRzIGJ5IGRlZmF1bHQuICopXG4gIHwgRmxvYXRfRiAtPiAxMlxuICAoKiBEZWZhdWx0IHByZWNpc2lvbiBmb3IgT0NhbWwgZmxvYXQgcHJpbnRpbmcgKCVGKS4gKilcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBFeHRlcm5hbHMgKilcblxuZXh0ZXJuYWwgZm9ybWF0X2Zsb2F0OiBzdHJpbmcgLT4gZmxvYXQgLT4gc3RyaW5nXG4gID0gXCJjYW1sX2Zvcm1hdF9mbG9hdFwiXG5leHRlcm5hbCBmb3JtYXRfaW50OiBzdHJpbmcgLT4gaW50IC0+IHN0cmluZ1xuICA9IFwiY2FtbF9mb3JtYXRfaW50XCJcbmV4dGVybmFsIGZvcm1hdF9pbnQzMjogc3RyaW5nIC0+IGludDMyIC0+IHN0cmluZ1xuICA9IFwiY2FtbF9pbnQzMl9mb3JtYXRcIlxuZXh0ZXJuYWwgZm9ybWF0X25hdGl2ZWludDogc3RyaW5nIC0+IG5hdGl2ZWludCAtPiBzdHJpbmdcbiAgPSBcImNhbWxfbmF0aXZlaW50X2Zvcm1hdFwiXG5leHRlcm5hbCBmb3JtYXRfaW50NjQ6IHN0cmluZyAtPiBpbnQ2NCAtPiBzdHJpbmdcbiAgPSBcImNhbWxfaW50NjRfZm9ybWF0XCJcbmV4dGVybmFsIGhleHN0cmluZ19vZl9mbG9hdDogZmxvYXQgLT4gaW50IC0+IGNoYXIgLT4gc3RyaW5nXG4gID0gXCJjYW1sX2hleHN0cmluZ19vZl9mbG9hdFwiXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAoKiBUb29scyB0byBwcmV0dHktcHJpbnQgZm9ybWF0cyAqKVxuXG4oKiBUeXBlIG9mIGV4dGVuc2libGUgY2hhcmFjdGVyIGJ1ZmZlcnMuICopXG50eXBlIGJ1ZmZlciA9IHtcbiAgbXV0YWJsZSBpbmQgOiBpbnQ7XG4gIG11dGFibGUgYnl0ZXMgOiBieXRlcztcbn1cblxuKCogQ3JlYXRlIGEgZnJlc2ggYnVmZmVyLiAqKVxubGV0IGJ1ZmZlcl9jcmVhdGUgaW5pdF9zaXplID0geyBpbmQgPSAwOyBieXRlcyA9IEJ5dGVzLmNyZWF0ZSBpbml0X3NpemUgfVxuXG4oKiBDaGVjayBzaXplIG9mIHRoZSBidWZmZXIgYW5kIGdyb3cgaXQgaWYgbmVlZGVkLiAqKVxubGV0IGJ1ZmZlcl9jaGVja19zaXplIGJ1ZiBvdmVyaGVhZCA9XG4gIGxldCBsZW4gPSBCeXRlcy5sZW5ndGggYnVmLmJ5dGVzIGluXG4gIGxldCBtaW5fbGVuID0gYnVmLmluZCArIG92ZXJoZWFkIGluXG4gIGlmIG1pbl9sZW4gPiBsZW4gdGhlbiAoXG4gICAgbGV0IG5ld19sZW4gPSBJbnQubWF4IChsZW4gKiAyKSBtaW5fbGVuIGluXG4gICAgbGV0IG5ld19zdHIgPSBCeXRlcy5jcmVhdGUgbmV3X2xlbiBpblxuICAgIEJ5dGVzLmJsaXQgYnVmLmJ5dGVzIDAgbmV3X3N0ciAwIGxlbjtcbiAgICBidWYuYnl0ZXMgPC0gbmV3X3N0cjtcbiAgKVxuXG4oKiBBZGQgdGhlIGNoYXJhY3RlciBgYycgdG8gdGhlIGJ1ZmZlciBgYnVmJy4gKilcbmxldCBidWZmZXJfYWRkX2NoYXIgYnVmIGMgPVxuICBidWZmZXJfY2hlY2tfc2l6ZSBidWYgMTtcbiAgQnl0ZXMuc2V0IGJ1Zi5ieXRlcyBidWYuaW5kIGM7XG4gIGJ1Zi5pbmQgPC0gYnVmLmluZCArIDFcblxuKCogQWRkIHRoZSBzdHJpbmcgYHMnIHRvIHRoZSBidWZmZXIgYGJ1ZicuICopXG5sZXQgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIHMgPVxuICBsZXQgc3RyX2xlbiA9IFN0cmluZy5sZW5ndGggcyBpblxuICBidWZmZXJfY2hlY2tfc2l6ZSBidWYgc3RyX2xlbjtcbiAgU3RyaW5nLmJsaXQgcyAwIGJ1Zi5ieXRlcyBidWYuaW5kIHN0cl9sZW47XG4gIGJ1Zi5pbmQgPC0gYnVmLmluZCArIHN0cl9sZW5cblxuKCogR2V0IHRoZSBjb250ZW50IG9mIHRoZSBidWZmZXIuICopXG5sZXQgYnVmZmVyX2NvbnRlbnRzIGJ1ZiA9XG4gIEJ5dGVzLnN1Yl9zdHJpbmcgYnVmLmJ5dGVzIDAgYnVmLmluZFxuXG4oKioqKVxuXG4oKiBDb252ZXJ0IGFuIGludGVnZXIgY29udmVyc2lvbiB0byBjaGFyLiAqKVxubGV0IGNoYXJfb2ZfaWNvbnYgaWNvbnYgPSBtYXRjaCBpY29udiB3aXRoXG4gIHwgSW50X2QgfCBJbnRfcGQgfCBJbnRfc2QgfCBJbnRfQ2QgLT4gJ2QnIHwgSW50X2kgfCBJbnRfcGkgfCBJbnRfc2lcbiAgfCBJbnRfQ2kgLT4gJ2knIHwgSW50X3ggfCBJbnRfQ3ggLT4gJ3gnIHwgSW50X1ggfCBJbnRfQ1ggLT4gJ1gnIHwgSW50X29cbiAgfCBJbnRfQ28gLT4gJ28nIHwgSW50X3UgfCBJbnRfQ3UgLT4gJ3UnXG5cbigqIENvbnZlcnQgYSBmbG9hdCBjb252ZXJzaW9uIHRvIGNoYXIuICopXG4oKiBgY0YnIHdpbGwgYmUgJ0YnIGZvciBkaXNwbGF5aW5nIGZvcm1hdCBhbmQgJ2cnIHRvIGNhbGwgbGliYyBwcmludGYgKilcbmxldCBjaGFyX29mX2Zjb252ID8oY0Y9J0YnKSBmY29udiA9IG1hdGNoIHNuZCBmY29udiB3aXRoXG4gIHwgRmxvYXRfZiAtPiAnZicgfCBGbG9hdF9lIC0+ICdlJ1xuICB8IEZsb2F0X0UgLT4gJ0UnIHwgRmxvYXRfZyAtPiAnZydcbiAgfCBGbG9hdF9HIC0+ICdHJyB8IEZsb2F0X0YgLT4gY0ZcbiAgfCBGbG9hdF9oIC0+ICdoJyB8IEZsb2F0X0ggLT4gJ0gnXG4gIHwgRmxvYXRfQ0YgLT4gJ0YnXG5cblxuKCogQ29udmVydCBhIHNjYW5uaW5nIGNvdW50ZXIgdG8gY2hhci4gKilcbmxldCBjaGFyX29mX2NvdW50ZXIgY291bnRlciA9IG1hdGNoIGNvdW50ZXIgd2l0aFxuICB8IExpbmVfY291bnRlciAgLT4gJ2wnXG4gIHwgQ2hhcl9jb3VudGVyICAtPiAnbidcbiAgfCBUb2tlbl9jb3VudGVyIC0+ICdOJ1xuXG4oKioqKVxuXG4oKiBQcmludCBhIGNoYXJfc2V0IGluIGEgYnVmZmVyIHdpdGggdGhlIE9DYW1sIGZvcm1hdCBsZXhpY2FsIGNvbnZlbnRpb24uICopXG5sZXQgYnByaW50X2NoYXJfc2V0IGJ1ZiBjaGFyX3NldCA9XG4gIGxldCByZWMgcHJpbnRfc3RhcnQgc2V0ID1cbiAgICBsZXQgaXNfYWxvbmUgYyA9XG4gICAgICBsZXQgYmVmb3JlLCBhZnRlciA9IENoYXIuKGNociAoY29kZSBjIC0gMSksIGNociAoY29kZSBjICsgMSkpIGluXG4gICAgICBpc19pbl9jaGFyX3NldCBzZXQgY1xuICAgICAgJiYgbm90IChpc19pbl9jaGFyX3NldCBzZXQgYmVmb3JlICYmIGlzX2luX2NoYXJfc2V0IHNldCBhZnRlcikgaW5cbiAgICBpZiBpc19hbG9uZSAnXScgdGhlbiBidWZmZXJfYWRkX2NoYXIgYnVmICddJztcbiAgICBwcmludF9vdXQgc2V0IDE7XG4gICAgaWYgaXNfYWxvbmUgJy0nIHRoZW4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnLSc7XG4gIGFuZCBwcmludF9vdXQgc2V0IGkgPVxuICAgIGlmIGkgPCAyNTYgdGhlblxuICAgICAgaWYgaXNfaW5fY2hhcl9zZXQgc2V0IChjaGFyX29mX2ludCBpKSB0aGVuIHByaW50X2ZpcnN0IHNldCBpXG4gICAgICBlbHNlIHByaW50X291dCBzZXQgKGkgKyAxKVxuICBhbmQgcHJpbnRfZmlyc3Qgc2V0IGkgPVxuICAgIG1hdGNoIGNoYXJfb2ZfaW50IGkgd2l0aFxuICAgIHwgJ1xcMjU1JyAtPiBwcmludF9jaGFyIGJ1ZiAyNTU7XG4gICAgfCAnXScgfCAnLScgLT4gcHJpbnRfb3V0IHNldCAoaSArIDEpO1xuICAgIHwgXyAtPiBwcmludF9zZWNvbmQgc2V0IChpICsgMSk7XG4gIGFuZCBwcmludF9zZWNvbmQgc2V0IGkgPVxuICAgIGlmIGlzX2luX2NoYXJfc2V0IHNldCAoY2hhcl9vZl9pbnQgaSkgdGhlblxuICAgICAgbWF0Y2ggY2hhcl9vZl9pbnQgaSB3aXRoXG4gICAgICB8ICdcXDI1NScgLT5cbiAgICAgICAgcHJpbnRfY2hhciBidWYgMjU0O1xuICAgICAgICBwcmludF9jaGFyIGJ1ZiAyNTU7XG4gICAgICB8ICddJyB8ICctJyB3aGVuIG5vdCAoaXNfaW5fY2hhcl9zZXQgc2V0IChjaGFyX29mX2ludCAoaSArIDEpKSkgLT5cbiAgICAgICAgcHJpbnRfY2hhciBidWYgKGkgLSAxKTtcbiAgICAgICAgcHJpbnRfb3V0IHNldCAoaSArIDEpO1xuICAgICAgfCBfIHdoZW4gbm90IChpc19pbl9jaGFyX3NldCBzZXQgKGNoYXJfb2ZfaW50IChpICsgMSkpKSAtPlxuICAgICAgICBwcmludF9jaGFyIGJ1ZiAoaSAtIDEpO1xuICAgICAgICBwcmludF9jaGFyIGJ1ZiBpO1xuICAgICAgICBwcmludF9vdXQgc2V0IChpICsgMik7XG4gICAgICB8IF8gLT5cbiAgICAgICAgcHJpbnRfaW4gc2V0IChpIC0gMSkgKGkgKyAyKTtcbiAgICBlbHNlIChcbiAgICAgIHByaW50X2NoYXIgYnVmIChpIC0gMSk7XG4gICAgICBwcmludF9vdXQgc2V0IChpICsgMSk7XG4gICAgKVxuICBhbmQgcHJpbnRfaW4gc2V0IGkgaiA9XG4gICAgaWYgaiA9IDI1NiB8fCBub3QgKGlzX2luX2NoYXJfc2V0IHNldCAoY2hhcl9vZl9pbnQgaikpIHRoZW4gKFxuICAgICAgcHJpbnRfY2hhciBidWYgaTtcbiAgICAgIHByaW50X2NoYXIgYnVmIChpbnRfb2ZfY2hhciAnLScpO1xuICAgICAgcHJpbnRfY2hhciBidWYgKGogLSAxKTtcbiAgICAgIGlmIGogPCAyNTYgdGhlbiBwcmludF9vdXQgc2V0IChqICsgMSk7XG4gICAgKSBlbHNlXG4gICAgICBwcmludF9pbiBzZXQgaSAoaiArIDEpO1xuICBhbmQgcHJpbnRfY2hhciBidWYgaSA9IG1hdGNoIGNoYXJfb2ZfaW50IGkgd2l0aFxuICAgIHwgJyUnIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBidWZmZXJfYWRkX2NoYXIgYnVmICclJztcbiAgICB8ICdAJyAtPiBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnQCc7XG4gICAgfCBjICAgLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiBjO1xuICBpblxuICBidWZmZXJfYWRkX2NoYXIgYnVmICdbJztcbiAgcHJpbnRfc3RhcnQgKFxuICAgIGlmIGlzX2luX2NoYXJfc2V0IGNoYXJfc2V0ICdcXDAwMCdcbiAgICB0aGVuICggYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnXic7IHJldl9jaGFyX3NldCBjaGFyX3NldCApXG4gICAgZWxzZSBjaGFyX3NldFxuICApO1xuICBidWZmZXJfYWRkX2NoYXIgYnVmICddJ1xuXG4oKioqKVxuXG4oKiBQcmludCBhIHBhZHR5IGluIGEgYnVmZmVyIHdpdGggdGhlIGZvcm1hdC1saWtlIHN5bnRheC4gKilcbmxldCBicHJpbnRfcGFkdHkgYnVmIHBhZHR5ID0gbWF0Y2ggcGFkdHkgd2l0aFxuICB8IExlZnQgIC0+IGJ1ZmZlcl9hZGRfY2hhciBidWYgJy0nXG4gIHwgUmlnaHQgLT4gKClcbiAgfCBaZXJvcyAtPiBidWZmZXJfYWRkX2NoYXIgYnVmICcwJ1xuXG4oKiBQcmludCB0aGUgJ18nIG9mIGFuIGlnbm9yZWQgZmxhZyBpZiBuZWVkZWQuICopXG5sZXQgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWcgPVxuICBpZiBpZ25fZmxhZyB0aGVuIGJ1ZmZlcl9hZGRfY2hhciBidWYgJ18nXG5cbigqKiopXG5cbmxldCBicHJpbnRfcGFkX29wdCBidWYgcGFkX29wdCA9IG1hdGNoIHBhZF9vcHQgd2l0aFxuICB8IE5vbmUgLT4gKClcbiAgfCBTb21lIHdpZHRoIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiAoSW50LnRvX3N0cmluZyB3aWR0aClcblxuKCoqKilcblxuKCogUHJpbnQgcGFkZGluZyBpbiBhIGJ1ZmZlciB3aXRoIHRoZSBmb3JtYXQtbGlrZSBzeW50YXguICopXG5sZXQgYnByaW50X3BhZGRpbmcgOiB0eXBlIGEgYiAuIGJ1ZmZlciAtPiAoYSwgYikgcGFkZGluZyAtPiB1bml0ID1cbmZ1biBidWYgcGFkIC0+IG1hdGNoIHBhZCB3aXRoXG4gIHwgTm9fcGFkZGluZyAtPiAoKVxuICB8IExpdF9wYWRkaW5nIChwYWR0eSwgbikgLT5cbiAgICBicHJpbnRfcGFkdHkgYnVmIHBhZHR5O1xuICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiAoSW50LnRvX3N0cmluZyBuKTtcbiAgfCBBcmdfcGFkZGluZyBwYWR0eSAtPlxuICAgIGJwcmludF9wYWR0eSBidWYgcGFkdHk7XG4gICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnKidcblxuKCogUHJpbnQgcHJlY2lzaW9uIGluIGEgYnVmZmVyIHdpdGggdGhlIGZvcm1hdC1saWtlIHN5bnRheC4gKilcbmxldCBicHJpbnRfcHJlY2lzaW9uIDogdHlwZSBhIGIgLiBidWZmZXIgLT4gKGEsIGIpIHByZWNpc2lvbiAtPiB1bml0ID1cbiAgZnVuIGJ1ZiBwcmVjIC0+IG1hdGNoIHByZWMgd2l0aFxuICB8IE5vX3ByZWNpc2lvbiAtPiAoKVxuICB8IExpdF9wcmVjaXNpb24gbiAtPlxuICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJy4nO1xuICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiAoSW50LnRvX3N0cmluZyBuKTtcbiAgfCBBcmdfcHJlY2lzaW9uIC0+XG4gICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiLipcIlxuXG4oKioqKVxuXG4oKiBQcmludCB0aGUgb3B0aW9uYWwgJysnLCAnICcgb3IgJyMnIGFzc29jaWF0ZWQgdG8gYW4gaW50IGNvbnZlcnNpb24uICopXG5sZXQgYnByaW50X2ljb252X2ZsYWcgYnVmIGljb252ID0gbWF0Y2ggaWNvbnYgd2l0aFxuICB8IEludF9wZCB8IEludF9waSAtPiBidWZmZXJfYWRkX2NoYXIgYnVmICcrJ1xuICB8IEludF9zZCB8IEludF9zaSAtPiBidWZmZXJfYWRkX2NoYXIgYnVmICcgJ1xuICB8IEludF9DeCB8IEludF9DWCB8IEludF9DbyB8IEludF9DZCB8IEludF9DaSB8IEludF9DdSAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnIydcbiAgfCBJbnRfZCB8IEludF9pIHwgSW50X3ggfCBJbnRfWCB8IEludF9vIHwgSW50X3UgLT4gKClcblxuKCogUHJpbnQgYW4gY29tcGxldGUgaW50IGZvcm1hdCBpbiBhIGJ1ZmZlciAoZXg6IFwiJTMuKmRcIikuICopXG5sZXQgYnByaW50X2ludF9mbXQgYnVmIGlnbl9mbGFnIGljb252IHBhZCBwcmVjID1cbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7XG4gIGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICBicHJpbnRfaWNvbnZfZmxhZyBidWYgaWNvbnY7XG4gIGJwcmludF9wYWRkaW5nIGJ1ZiBwYWQ7XG4gIGJwcmludF9wcmVjaXNpb24gYnVmIHByZWM7XG4gIGJ1ZmZlcl9hZGRfY2hhciBidWYgKGNoYXJfb2ZfaWNvbnYgaWNvbnYpXG5cbigqIFByaW50IGEgY29tcGxldGUgaW50MzIsIG5hdGl2ZWludCBvciBpbnQ2NCBmb3JtYXQgaW4gYSBidWZmZXIuICopXG5sZXQgYnByaW50X2FsdGludF9mbXQgYnVmIGlnbl9mbGFnIGljb252IHBhZCBwcmVjIGMgPVxuICBidWZmZXJfYWRkX2NoYXIgYnVmICclJztcbiAgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gIGJwcmludF9pY29udl9mbGFnIGJ1ZiBpY29udjtcbiAgYnByaW50X3BhZGRpbmcgYnVmIHBhZDtcbiAgYnByaW50X3ByZWNpc2lvbiBidWYgcHJlYztcbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiBjO1xuICBidWZmZXJfYWRkX2NoYXIgYnVmIChjaGFyX29mX2ljb252IGljb252KVxuXG4oKioqKVxuXG4oKiBQcmludCB0aGUgb3B0aW9uYWwgJysnLCAnICcgYW5kL29yICcjJyBhc3NvY2lhdGVkIHRvIGEgZmxvYXQgY29udmVyc2lvbi4gKilcbmxldCBicHJpbnRfZmNvbnZfZmxhZyBidWYgZmNvbnYgPVxuICBiZWdpbiBtYXRjaCBmc3QgZmNvbnYgd2l0aFxuICB8IEZsb2F0X2ZsYWdfcCAtPiBidWZmZXJfYWRkX2NoYXIgYnVmICcrJ1xuICB8IEZsb2F0X2ZsYWdfcyAtPiBidWZmZXJfYWRkX2NoYXIgYnVmICcgJ1xuICB8IEZsb2F0X2ZsYWdfIC0+ICgpIGVuZDtcbiAgbWF0Y2ggc25kIGZjb252IHdpdGhcbiAgfCBGbG9hdF9DRiAtPiBidWZmZXJfYWRkX2NoYXIgYnVmICcjJ1xuICB8IEZsb2F0X2YgfCBGbG9hdF9lIHwgRmxvYXRfRSB8IEZsb2F0X2cgfCBGbG9hdF9HXG4gIHwgRmxvYXRfRiB8IEZsb2F0X2ggfCBGbG9hdF9IIC0+ICgpXG5cbigqIFByaW50IGEgY29tcGxldGUgZmxvYXQgZm9ybWF0IGluIGEgYnVmZmVyIChleDogXCIlKyouM2ZcIikuICopXG5sZXQgYnByaW50X2Zsb2F0X2ZtdCBidWYgaWduX2ZsYWcgZmNvbnYgcGFkIHByZWMgPVxuICBidWZmZXJfYWRkX2NoYXIgYnVmICclJztcbiAgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gIGJwcmludF9mY29udl9mbGFnIGJ1ZiBmY29udjtcbiAgYnByaW50X3BhZGRpbmcgYnVmIHBhZDtcbiAgYnByaW50X3ByZWNpc2lvbiBidWYgcHJlYztcbiAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAoY2hhcl9vZl9mY29udiBmY29udilcblxuKCogQ29tcHV0ZSB0aGUgbGl0ZXJhbCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBGb3JtYXR0aW5nX2xpdC4gKilcbigqIFVzZWQgYnkgUHJpbnRmIGFuZCBTY2FuZiB3aGVyZSBmb3JtYXR0aW5nIGlzIG5vdCBpbnRlcnByZXRlZC4gKilcbmxldCBzdHJpbmdfb2ZfZm9ybWF0dGluZ19saXQgZm9ybWF0dGluZ19saXQgPSBtYXRjaCBmb3JtYXR0aW5nX2xpdCB3aXRoXG4gIHwgQ2xvc2VfYm94ICAgICAgICAgICAgLT4gXCJAXVwiXG4gIHwgQ2xvc2VfdGFnICAgICAgICAgICAgLT4gXCJAfVwiXG4gIHwgQnJlYWsgKHN0ciwgXywgXykgICAgLT4gc3RyXG4gIHwgRkZsdXNoICAgICAgICAgICAgICAgLT4gXCJAP1wiXG4gIHwgRm9yY2VfbmV3bGluZSAgICAgICAgLT4gXCJAXFxuXCJcbiAgfCBGbHVzaF9uZXdsaW5lICAgICAgICAtPiBcIkAuXCJcbiAgfCBNYWdpY19zaXplIChzdHIsIF8pICAtPiBzdHJcbiAgfCBFc2NhcGVkX2F0ICAgICAgICAgICAtPiBcIkBAXCJcbiAgfCBFc2NhcGVkX3BlcmNlbnQgICAgICAtPiBcIkAlXCJcbiAgfCBTY2FuX2luZGljIGMgLT4gXCJAXCIgXiAoU3RyaW5nLm1ha2UgMSBjKVxuXG4oKioqKVxuXG4oKiBQcmludCBhIGxpdGVyYWwgY2hhciBpbiBhIGJ1ZmZlciwgZXNjYXBlICclJyBieSBcIiUlXCIuICopXG5sZXQgYnByaW50X2NoYXJfbGl0ZXJhbCBidWYgY2hyID0gbWF0Y2ggY2hyIHdpdGhcbiAgfCAnJScgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJSVcIlxuICB8IF8gLT4gYnVmZmVyX2FkZF9jaGFyIGJ1ZiBjaHJcblxuKCogUHJpbnQgYSBsaXRlcmFsIHN0cmluZyBpbiBhIGJ1ZmZlciwgZXNjYXBlIGFsbCAnJScgYnkgXCIlJVwiLiAqKVxubGV0IGJwcmludF9zdHJpbmdfbGl0ZXJhbCBidWYgc3RyID1cbiAgZm9yIGkgPSAwIHRvIFN0cmluZy5sZW5ndGggc3RyIC0gMSBkb1xuICAgIGJwcmludF9jaGFyX2xpdGVyYWwgYnVmIHN0ci5baV1cbiAgZG9uZVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBGb3JtYXQgcHJldHR5LXByaW50aW5nICopXG5cbigqIFByaW50IGEgY29tcGxldGUgZm9ybWF0IHR5cGUgKGFuIGZtdHR5KSBpbiBhIGJ1ZmZlci4gKilcbmxldCByZWMgYnByaW50X2ZtdHR5IDogdHlwZSBhIGIgYyBkIGUgZiBnIGggaSBqIGsgbCAuXG4gICAgYnVmZmVyIC0+IChhLCBiLCBjLCBkLCBlLCBmLCBnLCBoLCBpLCBqLCBrLCBsKSBmbXR0eV9yZWwgLT4gdW5pdCA9XG5mdW4gYnVmIGZtdHR5IC0+IG1hdGNoIGZtdHR5IHdpdGhcbiAgfCBDaGFyX3R5IHJlc3QgICAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlY1wiOyAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IFN0cmluZ190eSByZXN0ICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVzXCI7ICBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgSW50X3R5IHJlc3QgICAgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJWlcIjsgIGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBJbnQzMl90eSByZXN0ICAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlbGlcIjsgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IE5hdGl2ZWludF90eSByZXN0IC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVuaVwiOyBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgSW50NjRfdHkgcmVzdCAgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJUxpXCI7IGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBGbG9hdF90eSByZXN0ICAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlZlwiOyAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IEJvb2xfdHkgcmVzdCAgICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiVCXCI7ICBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgQWxwaGFfdHkgcmVzdCAgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJWFcIjsgIGJwcmludF9mbXR0eSBidWYgcmVzdDtcbiAgfCBUaGV0YV90eSByZXN0ICAgICAtPiBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIldFwiOyAgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IEFueV90eSByZXN0ICAgICAgIC0+IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiU/XCI7ICBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG4gIHwgUmVhZGVyX3R5IHJlc3QgICAgLT4gYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJXJcIjsgIGJwcmludF9mbXR0eSBidWYgcmVzdDtcblxuICB8IElnbm9yZWRfcmVhZGVyX3R5IHJlc3QgLT5cbiAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlX3JcIjtcbiAgICBicHJpbnRfZm10dHkgYnVmIHJlc3Q7XG5cbiAgfCBGb3JtYXRfYXJnX3R5IChzdWJfZm10dHksIHJlc3QpIC0+XG4gICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJXtcIjsgYnByaW50X2ZtdHR5IGJ1ZiBzdWJfZm10dHk7XG4gICAgYnVmZmVyX2FkZF9zdHJpbmcgYnVmIFwiJX1cIjsgYnByaW50X2ZtdHR5IGJ1ZiByZXN0O1xuICB8IEZvcm1hdF9zdWJzdF90eSAoc3ViX2ZtdHR5LCBfLCByZXN0KSAtPlxuICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiUoXCI7IGJwcmludF9mbXR0eSBidWYgc3ViX2ZtdHR5O1xuICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIiUpXCI7IGJwcmludF9mbXR0eSBidWYgcmVzdDtcblxuICB8IEVuZF9vZl9mbXR0eSAtPiAoKVxuXG4oKioqKVxuXG5sZXQgcmVjIGludF9vZl9jdXN0b21fYXJpdHkgOiB0eXBlIGEgYiBjIC5cbiAgKGEsIGIsIGMpIGN1c3RvbV9hcml0eSAtPiBpbnQgPVxuICBmdW5jdGlvblxuICB8IEN1c3RvbV96ZXJvIC0+IDBcbiAgfCBDdXN0b21fc3VjYyB4IC0+IDEgKyBpbnRfb2ZfY3VzdG9tX2FyaXR5IHhcblxuKCogUHJpbnQgYSBjb21wbGV0ZSBmb3JtYXQgaW4gYSBidWZmZXIuICopXG5sZXQgYnByaW50X2ZtdCBidWYgZm10ID1cbiAgbGV0IHJlYyBmbXRpdGVyIDogdHlwZSBhIGIgYyBkIGUgZiAuXG4gICAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+IGJvb2wgLT4gdW5pdCA9XG4gIGZ1biBmbXQgaWduX2ZsYWcgLT4gbWF0Y2ggZm10IHdpdGhcbiAgICB8IFN0cmluZyAocGFkLCByZXN0KSAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnByaW50X3BhZGRpbmcgYnVmIHBhZDsgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAncyc7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBDYW1sX3N0cmluZyAocGFkLCByZXN0KSAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnByaW50X3BhZGRpbmcgYnVmIHBhZDsgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnUyc7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG5cbiAgICB8IEludCAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICAgIGJwcmludF9pbnRfZm10IGJ1ZiBpZ25fZmxhZyBpY29udiBwYWQgcHJlYztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IEludDMyIChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgICAgYnByaW50X2FsdGludF9mbXQgYnVmIGlnbl9mbGFnIGljb252IHBhZCBwcmVjICdsJztcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IE5hdGl2ZWludCAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICAgIGJwcmludF9hbHRpbnRfZm10IGJ1ZiBpZ25fZmxhZyBpY29udiBwYWQgcHJlYyAnbic7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBJbnQ2NCAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICAgIGJwcmludF9hbHRpbnRfZm10IGJ1ZiBpZ25fZmxhZyBpY29udiBwYWQgcHJlYyAnTCc7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBGbG9hdCAoZmNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICAgIGJwcmludF9mbG9hdF9mbXQgYnVmIGlnbl9mbGFnIGZjb252IHBhZCBwcmVjO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuXG4gICAgfCBDaGFyIHJlc3QgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJ2MnOyBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBDYW1sX2NoYXIgcmVzdCAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnQyc7IGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IEJvb2wgKHBhZCwgcmVzdCkgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJwcmludF9wYWRkaW5nIGJ1ZiBwYWQ7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJ0InO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgQWxwaGEgcmVzdCAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnYSc7IGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IFRoZXRhIHJlc3QgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJ3QnOyBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBDdXN0b20gKGFyaXR5LCBfLCByZXN0KSAtPlxuICAgICAgZm9yIF9pID0gMSB0byBpbnRfb2ZfY3VzdG9tX2FyaXR5IGFyaXR5IGRvXG4gICAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnPyc7XG4gICAgICBkb25lO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuICAgIHwgUmVhZGVyIHJlc3QgLT5cbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnOyBicHJpbnRfaWdub3JlZF9mbGFnIGJ1ZiBpZ25fZmxhZztcbiAgICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJ3InOyBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBGbHVzaCByZXN0IC0+XG4gICAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgXCIlIVwiO1xuICAgICAgZm10aXRlciByZXN0IGlnbl9mbGFnO1xuXG4gICAgfCBTdHJpbmdfbGl0ZXJhbCAoc3RyLCByZXN0KSAtPlxuICAgICAgYnByaW50X3N0cmluZ19saXRlcmFsIGJ1ZiBzdHI7XG4gICAgICBmbXRpdGVyIHJlc3QgaWduX2ZsYWc7XG4gICAgfCBDaGFyX2xpdGVyYWwgKGNociwgcmVzdCkgLT5cbiAgICAgIGJwcmludF9jaGFyX2xpdGVyYWwgYnVmIGNocjtcbiAgICAgIGZtdGl0ZXIgcmVzdCBpZ25fZmxhZztcblxuICAgIHwgRm9ybWF0X2FyZyAocGFkX29wdCwgZm10dHksIHJlc3QpIC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBicHJpbnRfcGFkX29wdCBidWYgcGFkX29wdDsgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAneyc7XG4gICAgICBicHJpbnRfZm10dHkgYnVmIGZtdHR5OyBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnfSc7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBGb3JtYXRfc3Vic3QgKHBhZF9vcHQsIGZtdHR5LCByZXN0KSAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnByaW50X3BhZF9vcHQgYnVmIHBhZF9vcHQ7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJygnO1xuICAgICAgYnByaW50X2ZtdHR5IGJ1ZiBmbXR0eTsgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJ1ZmZlcl9hZGRfY2hhciBidWYgJyknO1xuICAgICAgZm10aXRlciByZXN0IGZhbHNlO1xuXG4gICAgfCBTY2FuX2NoYXJfc2V0ICh3aWR0aF9vcHQsIGNoYXJfc2V0LCByZXN0KSAtPlxuICAgICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiAnJSc7IGJwcmludF9pZ25vcmVkX2ZsYWcgYnVmIGlnbl9mbGFnO1xuICAgICAgYnByaW50X3BhZF9vcHQgYnVmIHdpZHRoX29wdDsgYnByaW50X2NoYXJfc2V0IGJ1ZiBjaGFyX3NldDtcbiAgICAgIGZtdGl0ZXIgcmVzdCBmYWxzZTtcbiAgICB8IFNjYW5fZ2V0X2NvdW50ZXIgKGNvdW50ZXIsIHJlc3QpIC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmIChjaGFyX29mX2NvdW50ZXIgY291bnRlcik7XG4gICAgICBmbXRpdGVyIHJlc3QgZmFsc2U7XG4gICAgfCBTY2FuX25leHRfY2hhciByZXN0IC0+XG4gICAgICBidWZmZXJfYWRkX2NoYXIgYnVmICclJzsgYnByaW50X2lnbm9yZWRfZmxhZyBidWYgaWduX2ZsYWc7XG4gICAgICBicHJpbnRfc3RyaW5nX2xpdGVyYWwgYnVmIFwiMGNcIjsgZm10aXRlciByZXN0IGZhbHNlO1xuXG4gICAgfCBJZ25vcmVkX3BhcmFtIChpZ24sIHJlc3QpIC0+XG4gICAgICBsZXQgUGFyYW1fZm9ybWF0X0VCQiBmbXQnID0gcGFyYW1fZm9ybWF0X29mX2lnbm9yZWRfZm9ybWF0IGlnbiByZXN0IGluXG4gICAgICBmbXRpdGVyIGZtdCcgdHJ1ZTtcblxuICAgIHwgRm9ybWF0dGluZ19saXQgKGZtdGluZ19saXQsIHJlc3QpIC0+XG4gICAgICBicHJpbnRfc3RyaW5nX2xpdGVyYWwgYnVmIChzdHJpbmdfb2ZfZm9ybWF0dGluZ19saXQgZm10aW5nX2xpdCk7XG4gICAgICBmbXRpdGVyIHJlc3QgaWduX2ZsYWc7XG4gICAgfCBGb3JtYXR0aW5nX2dlbiAoZm10aW5nX2dlbiwgcmVzdCkgLT5cbiAgICAgIGJlZ2luIG1hdGNoIGZtdGluZ19nZW4gd2l0aFxuICAgICAgfCBPcGVuX3RhZyAoRm9ybWF0IChfLCBzdHIpKSAtPlxuICAgICAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgXCJAe1wiOyBidWZmZXJfYWRkX3N0cmluZyBidWYgc3RyXG4gICAgICB8IE9wZW5fYm94IChGb3JtYXQgKF8sIHN0cikpIC0+XG4gICAgICAgIGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBcIkBbXCI7IGJ1ZmZlcl9hZGRfc3RyaW5nIGJ1ZiBzdHJcbiAgICAgIGVuZDtcbiAgICAgIGZtdGl0ZXIgcmVzdCBpZ25fZmxhZztcblxuICAgIHwgRW5kX29mX2Zvcm1hdCAtPiAoKVxuXG4gIGluIGZtdGl0ZXIgZm10IGZhbHNlXG5cbigqKiopXG5cbigqIENvbnZlcnQgYSBmb3JtYXQgdG8gc3RyaW5nLiAqKVxubGV0IHN0cmluZ19vZl9mbXQgZm10ID1cbiAgbGV0IGJ1ZiA9IGJ1ZmZlcl9jcmVhdGUgMTYgaW5cbiAgYnByaW50X2ZtdCBidWYgZm10O1xuICBidWZmZXJfY29udGVudHMgYnVmXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICgqIFR5cGUgZXh0cmFjdGlvbiAqKVxuXG50eXBlIChfLCBfKSBlcSA9IFJlZmwgOiAoJ2EsICdhKSBlcVxuXG4oKiBJbnZhcmlhbnQ6IHRoaXMgZnVuY3Rpb24gaXMgdGhlIGlkZW50aXR5IG9uIHZhbHVlcy5cblxuICAgSW4gcGFydGljdWxhciwgaWYgKHR5MSwgdHkyKSBoYXZlIGVxdWFsIHZhbHVlcywgdGhlblxuICAgKHRyYW5zIChzeW1tIHR5MSkgdHkyKSByZXNwZWN0cyB0aGUgJ3RyYW5zJyBwcmVjb25kaXRpb24uICopXG5sZXQgcmVjIHN5bW0gOiB0eXBlIGExIGIxIGMxIGQxIGUxIGYxIGEyIGIyIGMyIGQyIGUyIGYyIC5cbiAgIChhMSwgYjEsIGMxLCBkMSwgZTEsIGYxLFxuICAgIGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdHR5X3JlbFxuLT4gKGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIsXG4gICAgYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSkgZm10dHlfcmVsXG49IGZ1bmN0aW9uXG4gIHwgQ2hhcl90eSByZXN0IC0+IENoYXJfdHkgKHN5bW0gcmVzdClcbiAgfCBJbnRfdHkgcmVzdCAtPiBJbnRfdHkgKHN5bW0gcmVzdClcbiAgfCBJbnQzMl90eSByZXN0IC0+IEludDMyX3R5IChzeW1tIHJlc3QpXG4gIHwgSW50NjRfdHkgcmVzdCAtPiBJbnQ2NF90eSAoc3ltbSByZXN0KVxuICB8IE5hdGl2ZWludF90eSByZXN0IC0+IE5hdGl2ZWludF90eSAoc3ltbSByZXN0KVxuICB8IEZsb2F0X3R5IHJlc3QgLT4gRmxvYXRfdHkgKHN5bW0gcmVzdClcbiAgfCBCb29sX3R5IHJlc3QgLT4gQm9vbF90eSAoc3ltbSByZXN0KVxuICB8IFN0cmluZ190eSByZXN0IC0+IFN0cmluZ190eSAoc3ltbSByZXN0KVxuICB8IFRoZXRhX3R5IHJlc3QgLT4gVGhldGFfdHkgKHN5bW0gcmVzdClcbiAgfCBBbHBoYV90eSByZXN0IC0+IEFscGhhX3R5IChzeW1tIHJlc3QpXG4gIHwgQW55X3R5IHJlc3QgLT4gQW55X3R5IChzeW1tIHJlc3QpXG4gIHwgUmVhZGVyX3R5IHJlc3QgLT4gUmVhZGVyX3R5IChzeW1tIHJlc3QpXG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgcmVzdCAtPiBJZ25vcmVkX3JlYWRlcl90eSAoc3ltbSByZXN0KVxuICB8IEZvcm1hdF9hcmdfdHkgKHR5LCByZXN0KSAtPlxuICAgIEZvcm1hdF9hcmdfdHkgKHR5LCBzeW1tIHJlc3QpXG4gIHwgRm9ybWF0X3N1YnN0X3R5ICh0eTEsIHR5MiwgcmVzdCkgLT5cbiAgICBGb3JtYXRfc3Vic3RfdHkgKHR5MiwgdHkxLCBzeW1tIHJlc3QpXG4gIHwgRW5kX29mX2ZtdHR5IC0+IEVuZF9vZl9mbXR0eVxuXG5sZXQgcmVjIGZtdHR5X3JlbF9kZXQgOiB0eXBlIGExIGIgYyBkMSBlMSBmMSBhMiBkMiBlMiBmMiAuXG4gIChhMSwgYiwgYywgZDEsIGUxLCBmMSxcbiAgIGEyLCBiLCBjLCBkMiwgZTIsIGYyKSBmbXR0eV9yZWwgLT5cbiAgICAoKGYxLCBmMikgZXEgLT4gKGExLCBhMikgZXEpXG4gICogKChhMSwgYTIpIGVxIC0+IChmMSwgZjIpIGVxKVxuICAqICgoZTEsIGUyKSBlcSAtPiAoZDEsIGQyKSBlcSlcbiAgKiAoKGQxLCBkMikgZXEgLT4gKGUxLCBlMikgZXEpXG49IGZ1bmN0aW9uXG4gIHwgRW5kX29mX2ZtdHR5IC0+XG4gICAgKGZ1biBSZWZsIC0+IFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IFJlZmwpXG4gIHwgQ2hhcl90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IFN0cmluZ190eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IEludF90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IEludDMyX3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgSW50NjRfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBOYXRpdmVpbnRfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBGbG9hdF90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIGVkLCBkZVxuICB8IEJvb2xfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcblxuICB8IFRoZXRhX3R5IHJlc3QgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgQWxwaGFfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBBbnlfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICBlZCwgZGVcbiAgfCBSZWFkZXJfdHkgcmVzdCAtPlxuICAgIGxldCBmYSwgYWYsIGVkLCBkZSA9IGZtdHR5X3JlbF9kZXQgcmVzdCBpblxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGZhIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBlZCBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGRlIFJlZmwgaW4gUmVmbClcbiAgfCBJZ25vcmVkX3JlYWRlcl90eSByZXN0IC0+XG4gICAgbGV0IGZhLCBhZiwgZWQsIGRlID0gZm10dHlfcmVsX2RldCByZXN0IGluXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZmEgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBhZiBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGVkIFJlZmwgaW4gUmVmbCksXG4gICAgKGZ1biBSZWZsIC0+IGxldCBSZWZsID0gZGUgUmVmbCBpbiBSZWZsKVxuICB8IEZvcm1hdF9hcmdfdHkgKF90eSwgcmVzdCkgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIFJlZmwpLFxuICAgIChmdW4gUmVmbCAtPiBsZXQgUmVmbCA9IGFmIFJlZmwgaW4gUmVmbCksXG4gICAgZWQsIGRlXG4gIHwgRm9ybWF0X3N1YnN0X3R5ICh0eTEsIHR5MiwgcmVzdCkgLT5cbiAgICBsZXQgZmEsIGFmLCBlZCwgZGUgPSBmbXR0eV9yZWxfZGV0IHJlc3QgaW5cbiAgICBsZXQgdHkgPSB0cmFucyAoc3ltbSB0eTEpIHR5MiBpblxuICAgIGxldCBhZywgZ2EsIGRqLCBqZCA9IGZtdHR5X3JlbF9kZXQgdHkgaW5cbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBmYSBSZWZsIGluIGxldCBSZWZsID0gYWcgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBnYSBSZWZsIGluIGxldCBSZWZsID0gYWYgUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBlZCBSZWZsIGluIGxldCBSZWZsID0gZGogUmVmbCBpbiBSZWZsKSxcbiAgICAoZnVuIFJlZmwgLT4gbGV0IFJlZmwgPSBqZCBSZWZsIGluIGxldCBSZWZsID0gZGUgUmVmbCBpbiBSZWZsKVxuXG4oKiBQcmVjb25kaXRpb246IHdlIGFzc3VtZSB0aGF0IHRoZSB0d28gZm10dHlfcmVsIGFyZ3VtZW50cyBoYXZlIGVxdWFsXG4gICB2YWx1ZXMgKGF0IHBvc3NpYmx5IGRpc3RpbmN0IHR5cGVzKTsgdGhpcyBpbnZhcmlhbnQgY29tZXMgZnJvbSB0aGUgd2F5XG4gICBmbXR0eV9yZWwgd2l0bmVzc2VzIGFyZSBwcm9kdWNlZCBieSB0aGUgdHlwZS1jaGVja2VyXG5cbiAgIFRoZSBjb2RlIGJlbG93IHVzZXMgKGFzc2VydCBmYWxzZSkgd2hlbiB0aGlzIGFzc3VtcHRpb24gaXMgYnJva2VuLiBUaGVcbiAgIGNvZGUgcGF0dGVybiBpcyB0aGUgZm9sbG93aW5nOlxuXG4gICAgIHwgRm9vIHgsIEZvbyB5IC0+XG4gICAgICAgKCogY2FzZSB3aGVyZSBpbmRlZWQgYm90aCB2YWx1ZXNcbiAgICAgICAgICBzdGFydCB3aXRoIGNvbnN0cnVjdG9yIEZvbyAqKVxuICAgICB8IEZvbyBfLCBfXG4gICAgIHwgXywgRm9vIF8gLT5cbiAgICAgICAoKiBkaWZmZXJlbnQgaGVhZCBjb25zdHJ1Y3RvcnM6IGJyb2tlbiBwcmVjb25kaXRpb24gKilcbiAgICAgICBhc3NlcnQgZmFsc2VcbiopXG5hbmQgdHJhbnMgOiB0eXBlXG4gIGExIGIxIGMxIGQxIGUxIGYxXG4gIGEyIGIyIGMyIGQyIGUyIGYyXG4gIGEzIGIzIGMzIGQzIGUzIGYzXG4uXG4gICAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSxcbiAgICBhMiwgYjIsIGMyLCBkMiwgZTIsIGYyKSBmbXR0eV9yZWxcbi0+IChhMiwgYjIsIGMyLCBkMiwgZTIsIGYyLFxuICAgIGEzLCBiMywgYzMsIGQzLCBlMywgZjMpIGZtdHR5X3JlbFxuLT4gKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEsXG4gICAgYTMsIGIzLCBjMywgZDMsIGUzLCBmMykgZm10dHlfcmVsXG49IGZ1biB0eTEgdHkyIC0+IG1hdGNoIHR5MSwgdHkyIHdpdGhcbiAgfCBDaGFyX3R5IHJlc3QxLCBDaGFyX3R5IHJlc3QyIC0+IENoYXJfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IFN0cmluZ190eSByZXN0MSwgU3RyaW5nX3R5IHJlc3QyIC0+IFN0cmluZ190eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgQm9vbF90eSByZXN0MSwgQm9vbF90eSByZXN0MiAtPiBCb29sX3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBJbnRfdHkgcmVzdDEsIEludF90eSByZXN0MiAtPiBJbnRfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IEludDMyX3R5IHJlc3QxLCBJbnQzMl90eSByZXN0MiAtPiBJbnQzMl90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgSW50NjRfdHkgcmVzdDEsIEludDY0X3R5IHJlc3QyIC0+IEludDY0X3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBOYXRpdmVpbnRfdHkgcmVzdDEsIE5hdGl2ZWludF90eSByZXN0MiAtPiBOYXRpdmVpbnRfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IEZsb2F0X3R5IHJlc3QxLCBGbG9hdF90eSByZXN0MiAtPiBGbG9hdF90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG5cbiAgfCBBbHBoYV90eSByZXN0MSwgQWxwaGFfdHkgcmVzdDIgLT4gQWxwaGFfdHkgKHRyYW5zIHJlc3QxIHJlc3QyKVxuICB8IEFscGhhX3R5IF8sIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgXywgQWxwaGFfdHkgXyAtPiBhc3NlcnQgZmFsc2VcblxuICB8IFRoZXRhX3R5IHJlc3QxLCBUaGV0YV90eSByZXN0MiAtPiBUaGV0YV90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgVGhldGFfdHkgXywgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBfLCBUaGV0YV90eSBfIC0+IGFzc2VydCBmYWxzZVxuXG4gIHwgQW55X3R5IHJlc3QxLCBBbnlfdHkgcmVzdDIgLT4gQW55X3R5ICh0cmFucyByZXN0MSByZXN0MilcbiAgfCBBbnlfdHkgXywgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBfLCBBbnlfdHkgXyAtPiBhc3NlcnQgZmFsc2VcblxuICB8IFJlYWRlcl90eSByZXN0MSwgUmVhZGVyX3R5IHJlc3QyIC0+IFJlYWRlcl90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgUmVhZGVyX3R5IF8sIF8gLT4gYXNzZXJ0IGZhbHNlXG4gIHwgXywgUmVhZGVyX3R5IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbiAgfCBJZ25vcmVkX3JlYWRlcl90eSByZXN0MSwgSWdub3JlZF9yZWFkZXJfdHkgcmVzdDIgLT5cbiAgICBJZ25vcmVkX3JlYWRlcl90eSAodHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgXywgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBfLCBJZ25vcmVkX3JlYWRlcl90eSBfIC0+IGFzc2VydCBmYWxzZVxuXG4gIHwgRm9ybWF0X2FyZ190eSAodHkxLCByZXN0MSksIEZvcm1hdF9hcmdfdHkgKHR5MiwgcmVzdDIpIC0+XG4gICAgRm9ybWF0X2FyZ190eSAodHJhbnMgdHkxIHR5MiwgdHJhbnMgcmVzdDEgcmVzdDIpXG4gIHwgRm9ybWF0X2FyZ190eSBfLCBfIC0+IGFzc2VydCBmYWxzZVxuICB8IF8sIEZvcm1hdF9hcmdfdHkgXyAtPiBhc3NlcnQgZmFsc2VcblxuICB8IEZvcm1hdF9zdWJzdF90eSAodHkxMSwgdHkxMiwgcmVzdDEpLFxuICAgIEZvcm1hdF9zdWJzdF90eSAodHkyMSwgdHkyMiwgcmVzdDIpIC0+XG4gICAgbGV0IHR5ID0gdHJhbnMgKHN5bW0gdHkxMikgdHkyMSBpblxuICAgIGxldCBfLCBmMiwgXywgZjQgPSBmbXR0eV9yZWxfZGV0IHR5IGluXG4gICAgbGV0IFJlZmwgPSBmMiBSZWZsIGluXG4gICAgbGV0IFJlZmwgPSBmNCBSZWZsIGluXG4gICAgRm9ybWF0X3N1YnN0X3R5ICh0eTExLCB0eTIyLCB0cmFucyByZXN0MSByZXN0MilcbiAgfCBGb3JtYXRfc3Vic3RfdHkgXywgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBfLCBGb3JtYXRfc3Vic3RfdHkgXyAtPiBhc3NlcnQgZmFsc2VcblxuICB8IEVuZF9vZl9mbXR0eSwgRW5kX29mX2ZtdHR5IC0+IEVuZF9vZl9mbXR0eVxuICB8IEVuZF9vZl9mbXR0eSwgXyAtPiBhc3NlcnQgZmFsc2VcbiAgfCBfLCBFbmRfb2ZfZm10dHkgLT4gYXNzZXJ0IGZhbHNlXG5cbmxldCByZWMgZm10dHlfb2ZfZm9ybWF0dGluZ19nZW4gOiB0eXBlIGEgYiBjIGQgZSBmIC5cbiAgKGEsIGIsIGMsIGQsIGUsIGYpIGZvcm1hdHRpbmdfZ2VuIC0+XG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5ID1cbmZ1biBmb3JtYXR0aW5nX2dlbiAtPiBtYXRjaCBmb3JtYXR0aW5nX2dlbiB3aXRoXG4gIHwgT3Blbl90YWcgKEZvcm1hdCAoZm10LCBfKSkgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IE9wZW5fYm94IChGb3JtYXQgKGZtdCwgXykpIC0+IGZtdHR5X29mX2ZtdCBmbXRcblxuKCogRXh0cmFjdCB0aGUgdHlwZSByZXByZXNlbnRhdGlvbiAoYW4gZm10dHkpIG9mIGEgZm9ybWF0LiAqKVxuYW5kIGZtdHR5X29mX2ZtdCA6IHR5cGUgYSBiIGMgZCBlIGYgLlxuICAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+IChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSA9XG5mdW4gZm10dHkgLT4gbWF0Y2ggZm10dHkgd2l0aFxuICB8IFN0cmluZyAocGFkLCByZXN0KSAtPlxuICAgIGZtdHR5X29mX3BhZGRpbmdfZm10dHkgcGFkIChTdHJpbmdfdHkgKGZtdHR5X29mX2ZtdCByZXN0KSlcbiAgfCBDYW1sX3N0cmluZyAocGFkLCByZXN0KSAtPlxuICAgIGZtdHR5X29mX3BhZGRpbmdfZm10dHkgcGFkIChTdHJpbmdfdHkgKGZtdHR5X29mX2ZtdCByZXN0KSlcblxuICB8IEludCAoXywgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIGxldCB0eV9yZXN0ID0gZm10dHlfb2ZfZm10IHJlc3QgaW5cbiAgICBsZXQgcHJlY190eSA9IGZtdHR5X29mX3ByZWNpc2lvbl9mbXR0eSBwcmVjIChJbnRfdHkgdHlfcmVzdCkgaW5cbiAgICBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IHBhZCBwcmVjX3R5XG4gIHwgSW50MzIgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBsZXQgdHlfcmVzdCA9IGZtdHR5X29mX2ZtdCByZXN0IGluXG4gICAgbGV0IHByZWNfdHkgPSBmbXR0eV9vZl9wcmVjaXNpb25fZm10dHkgcHJlYyAoSW50MzJfdHkgdHlfcmVzdCkgaW5cbiAgICBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IHBhZCBwcmVjX3R5XG4gIHwgTmF0aXZlaW50IChfLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbGV0IHR5X3Jlc3QgPSBmbXR0eV9vZl9mbXQgcmVzdCBpblxuICAgIGxldCBwcmVjX3R5ID0gZm10dHlfb2ZfcHJlY2lzaW9uX2ZtdHR5IHByZWMgKE5hdGl2ZWludF90eSB0eV9yZXN0KSBpblxuICAgIGZtdHR5X29mX3BhZGRpbmdfZm10dHkgcGFkIHByZWNfdHlcbiAgfCBJbnQ2NCAoXywgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIGxldCB0eV9yZXN0ID0gZm10dHlfb2ZfZm10IHJlc3QgaW5cbiAgICBsZXQgcHJlY190eSA9IGZtdHR5X29mX3ByZWNpc2lvbl9mbXR0eSBwcmVjIChJbnQ2NF90eSB0eV9yZXN0KSBpblxuICAgIGZtdHR5X29mX3BhZGRpbmdfZm10dHkgcGFkIHByZWNfdHlcbiAgfCBGbG9hdCAoXywgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIGxldCB0eV9yZXN0ID0gZm10dHlfb2ZfZm10IHJlc3QgaW5cbiAgICBsZXQgcHJlY190eSA9IGZtdHR5X29mX3ByZWNpc2lvbl9mbXR0eSBwcmVjIChGbG9hdF90eSB0eV9yZXN0KSBpblxuICAgIGZtdHR5X29mX3BhZGRpbmdfZm10dHkgcGFkIHByZWNfdHlcblxuICB8IENoYXIgcmVzdCAgICAgICAgICAgICAgICAgIC0+IENoYXJfdHkgKGZtdHR5X29mX2ZtdCByZXN0KVxuICB8IENhbWxfY2hhciByZXN0ICAgICAgICAgICAgIC0+IENoYXJfdHkgKGZtdHR5X29mX2ZtdCByZXN0KVxuICB8IEJvb2wgKHBhZCwgcmVzdCkgICAgICAgICAgIC0+XG4gICAgICBmbXR0eV9vZl9wYWRkaW5nX2ZtdHR5IHBhZCAoQm9vbF90eSAoZm10dHlfb2ZfZm10IHJlc3QpKVxuICB8IEFscGhhIHJlc3QgICAgICAgICAgICAgICAgIC0+IEFscGhhX3R5IChmbXR0eV9vZl9mbXQgcmVzdClcbiAgfCBUaGV0YSByZXN0ICAgICAgICAgICAgICAgICAtPiBUaGV0YV90eSAoZm10dHlfb2ZfZm10IHJlc3QpXG4gIHwgQ3VzdG9tIChhcml0eSwgXywgcmVzdCkgICAgLT4gZm10dHlfb2ZfY3VzdG9tIGFyaXR5IChmbXR0eV9vZl9mbXQgcmVzdClcbiAgfCBSZWFkZXIgcmVzdCAgICAgICAgICAgICAgICAtPiBSZWFkZXJfdHkgKGZtdHR5X29mX2ZtdCByZXN0KVxuXG4gIHwgRm9ybWF0X2FyZyAoXywgdHksIHJlc3QpIC0+XG4gICAgRm9ybWF0X2FyZ190eSAodHksIGZtdHR5X29mX2ZtdCByZXN0KVxuICB8IEZvcm1hdF9zdWJzdCAoXywgdHksIHJlc3QpIC0+XG4gICAgRm9ybWF0X3N1YnN0X3R5ICh0eSwgdHksIGZtdHR5X29mX2ZtdCByZXN0KVxuXG4gIHwgRmx1c2ggcmVzdCAgICAgICAgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IHJlc3RcbiAgfCBTdHJpbmdfbGl0ZXJhbCAoXywgcmVzdCkgICAtPiBmbXR0eV9vZl9mbXQgcmVzdFxuICB8IENoYXJfbGl0ZXJhbCAoXywgcmVzdCkgICAgIC0+IGZtdHR5X29mX2ZtdCByZXN0XG5cbiAgfCBTY2FuX2NoYXJfc2V0IChfLCBfLCByZXN0KSAtPiBTdHJpbmdfdHkgKGZtdHR5X29mX2ZtdCByZXN0KVxuICB8IFNjYW5fZ2V0X2NvdW50ZXIgKF8sIHJlc3QpIC0+IEludF90eSAoZm10dHlfb2ZfZm10IHJlc3QpXG4gIHwgU2Nhbl9uZXh0X2NoYXIgcmVzdCAgICAgICAgLT4gQ2hhcl90eSAoZm10dHlfb2ZfZm10IHJlc3QpXG4gIHwgSWdub3JlZF9wYXJhbSAoaWduLCByZXN0KSAgLT4gZm10dHlfb2ZfaWdub3JlZF9mb3JtYXQgaWduIHJlc3RcbiAgfCBGb3JtYXR0aW5nX2xpdCAoXywgcmVzdCkgICAtPiBmbXR0eV9vZl9mbXQgcmVzdFxuICB8IEZvcm1hdHRpbmdfZ2VuIChmbXRpbmdfZ2VuLCByZXN0KSAgLT5cbiAgICBjb25jYXRfZm10dHkgKGZtdHR5X29mX2Zvcm1hdHRpbmdfZ2VuIGZtdGluZ19nZW4pIChmbXR0eV9vZl9mbXQgcmVzdClcblxuICB8IEVuZF9vZl9mb3JtYXQgICAgICAgICAgICAgIC0+IEVuZF9vZl9mbXR0eVxuXG5hbmQgZm10dHlfb2ZfY3VzdG9tIDogdHlwZSB4IHkgYSBiIGMgZCBlIGYgLlxuICAoYSwgeCwgeSkgY3VzdG9tX2FyaXR5IC0+IChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSAtPlxuICAoeSwgYiwgYywgZCwgZSwgZikgZm10dHkgPVxuZnVuIGFyaXR5IGZtdHR5IC0+IG1hdGNoIGFyaXR5IHdpdGhcbiAgfCBDdXN0b21femVybyAtPiBmbXR0eVxuICB8IEN1c3RvbV9zdWNjIGFyaXR5IC0+IEFueV90eSAoZm10dHlfb2ZfY3VzdG9tIGFyaXR5IGZtdHR5KVxuXG4oKiBFeHRyYWN0IHRoZSBmbXR0eSBvZiBhbiBpZ25vcmVkIHBhcmFtZXRlciBmb2xsb3dlZCBieSB0aGUgcmVzdCBvZlxuICAgdGhlIGZvcm1hdC4gKilcbmFuZCBmbXR0eV9vZl9pZ25vcmVkX2Zvcm1hdCA6IHR5cGUgeCB5IGEgYiBjIGQgZSBmIC5cbiAgICAoYSwgYiwgYywgZCwgeSwgeCkgaWdub3JlZCAtPlxuICAgICh4LCBiLCBjLCB5LCBlLCBmKSBmbXQgLT5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgPVxuZnVuIGlnbiBmbXQgLT4gbWF0Y2ggaWduIHdpdGhcbiAgfCBJZ25vcmVkX2NoYXIgICAgICAgICAgICAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBJZ25vcmVkX2NhbWxfY2hhciAgICAgICAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBJZ25vcmVkX3N0cmluZyBfICAgICAgICAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBJZ25vcmVkX2NhbWxfc3RyaW5nIF8gICAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBJZ25vcmVkX2ludCAoXywgXykgICAgICAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBJZ25vcmVkX2ludDMyIChfLCBfKSAgICAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBJZ25vcmVkX25hdGl2ZWludCAoXywgXykgICAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBJZ25vcmVkX2ludDY0IChfLCBfKSAgICAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBJZ25vcmVkX2Zsb2F0IChfLCBfKSAgICAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBJZ25vcmVkX2Jvb2wgXyAgICAgICAgICAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBJZ25vcmVkX2Zvcm1hdF9hcmcgXyAgICAgICAgICAgIC0+IGZtdHR5X29mX2ZtdCBmbXRcbiAgfCBJZ25vcmVkX2Zvcm1hdF9zdWJzdCAoXywgZm10dHkpIC0+IGNvbmNhdF9mbXR0eSBmbXR0eSAoZm10dHlfb2ZfZm10IGZtdClcbiAgfCBJZ25vcmVkX3JlYWRlciAgICAgICAgICAgICAgICAgIC0+IElnbm9yZWRfcmVhZGVyX3R5IChmbXR0eV9vZl9mbXQgZm10KVxuICB8IElnbm9yZWRfc2Nhbl9jaGFyX3NldCBfICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfc2Nhbl9nZXRfY291bnRlciBfICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuICB8IElnbm9yZWRfc2Nhbl9uZXh0X2NoYXIgICAgICAgICAgLT4gZm10dHlfb2ZfZm10IGZtdFxuXG4oKiBBZGQgYW4gSW50X3R5IG5vZGUgaWYgcGFkZGluZyBpcyB0YWtlbiBhcyBhbiBleHRyYSBhcmd1bWVudCAoZXg6IFwiJSpzXCIpLiAqKVxuYW5kIGZtdHR5X29mX3BhZGRpbmdfZm10dHkgOiB0eXBlIHggYSBiIGMgZCBlIGYgLlxuICAgICh4LCBhKSBwYWRkaW5nIC0+IChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSAtPiAoeCwgYiwgYywgZCwgZSwgZikgZm10dHkgPVxuICBmdW4gcGFkIGZtdHR5IC0+IG1hdGNoIHBhZCB3aXRoXG4gICAgfCBOb19wYWRkaW5nICAgIC0+IGZtdHR5XG4gICAgfCBMaXRfcGFkZGluZyBfIC0+IGZtdHR5XG4gICAgfCBBcmdfcGFkZGluZyBfIC0+IEludF90eSBmbXR0eVxuXG4oKiBBZGQgYW4gSW50X3R5IG5vZGUgaWYgcHJlY2lzaW9uIGlzIHRha2VuIGFzIGFuIGV4dHJhIGFyZ3VtZW50IChleDogXCIlLipmXCIpLiopXG5hbmQgZm10dHlfb2ZfcHJlY2lzaW9uX2ZtdHR5IDogdHlwZSB4IGEgYiBjIGQgZSBmIC5cbiAgICAoeCwgYSkgcHJlY2lzaW9uIC0+IChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSAtPiAoeCwgYiwgYywgZCwgZSwgZikgZm10dHkgPVxuICBmdW4gcHJlYyBmbXR0eSAtPiBtYXRjaCBwcmVjIHdpdGhcbiAgICB8IE5vX3ByZWNpc2lvbiAgICAtPiBmbXR0eVxuICAgIHwgTGl0X3ByZWNpc2lvbiBfIC0+IGZtdHR5XG4gICAgfCBBcmdfcHJlY2lzaW9uICAgLT4gSW50X3R5IGZtdHR5XG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogRm9ybWF0IHR5cGluZyAqKVxuXG4oKiBFeGNlcHRpb24gcmFpc2VkIHdoZW4gYSBmb3JtYXQgZG9lcyBub3QgbWF0Y2ggYSBnaXZlbiBmb3JtYXQgdHlwZS4gKilcbmV4Y2VwdGlvbiBUeXBlX21pc21hdGNoXG5cbigqIFR5cGUgYSBwYWRkaW5nLiAqKVxuKCogVGFrZSBhbiBJbnRfdHkgZnJvbSB0aGUgZm10dHkgaWYgdGhlIGludGVnZXIgc2hvdWxkIGJlIGtlcHQgYXMgYXJndW1lbnQuICopXG4oKiBSYWlzZSBUeXBlX21pc21hdGNoIGluIGNhc2Ugb2YgdHlwZSBtaXNtYXRjaC4gKilcbmxldCB0eXBlX3BhZGRpbmcgOiB0eXBlIGEgYiBjIGQgZSBmIHggeSAuXG4gICAgKHgsIHkpIHBhZGRpbmcgLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5IC0+XG4gICAgICAoYSwgYiwgYywgZCwgZSwgZikgcGFkZGluZ19mbXR0eV9lYmIgPVxuZnVuIHBhZCBmbXR0eSAtPiBtYXRjaCBwYWQsIGZtdHR5IHdpdGhcbiAgfCBOb19wYWRkaW5nLCBfIC0+IFBhZGRpbmdfZm10dHlfRUJCIChOb19wYWRkaW5nLCBmbXR0eSlcbiAgfCBMaXRfcGFkZGluZyAocGFkdHksIHcpLCBfIC0+IFBhZGRpbmdfZm10dHlfRUJCIChMaXRfcGFkZGluZyAocGFkdHksdyksZm10dHkpXG4gIHwgQXJnX3BhZGRpbmcgcGFkdHksIEludF90eSByZXN0IC0+IFBhZGRpbmdfZm10dHlfRUJCIChBcmdfcGFkZGluZyBwYWR0eSxyZXN0KVxuICB8IF8gLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuXG4oKiBDb252ZXJ0IGEgKHVwYWRkaW5nLCB1cHJlY2lzaW9uKSB0byBhIChwYWRkaW5nLCBwcmVjaXNpb24pLiAqKVxuKCogVGFrZSBvbmUgb3IgdHdvIEludF90eSBmcm9tIHRoZSBmbXR0eSBpZiBuZWVkZWQuICopXG4oKiBSYWlzZSBUeXBlX21pc21hdGNoIGluIGNhc2Ugb2YgdHlwZSBtaXNtYXRjaC4gKilcbmxldCB0eXBlX3BhZHByZWMgOiB0eXBlIGEgYiBjIGQgZSBmIHggeSB6IC5cbiAgKHgsIHkpIHBhZGRpbmcgLT4gKHksIHopIHByZWNpc2lvbiAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgLT5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgcGFkcHJlY19mbXR0eV9lYmIgPVxuZnVuIHBhZCBwcmVjIGZtdHR5IC0+IG1hdGNoIHByZWMsIHR5cGVfcGFkZGluZyBwYWQgZm10dHkgd2l0aFxuICB8IE5vX3ByZWNpc2lvbiwgUGFkZGluZ19mbXR0eV9FQkIgKHBhZCwgcmVzdCkgLT5cbiAgICBQYWRwcmVjX2ZtdHR5X0VCQiAocGFkLCBOb19wcmVjaXNpb24sIHJlc3QpXG4gIHwgTGl0X3ByZWNpc2lvbiBwLCBQYWRkaW5nX2ZtdHR5X0VCQiAocGFkLCByZXN0KSAtPlxuICAgIFBhZHByZWNfZm10dHlfRUJCIChwYWQsIExpdF9wcmVjaXNpb24gcCwgcmVzdClcbiAgfCBBcmdfcHJlY2lzaW9uLCBQYWRkaW5nX2ZtdHR5X0VCQiAocGFkLCBJbnRfdHkgcmVzdCkgLT5cbiAgICBQYWRwcmVjX2ZtdHR5X0VCQiAocGFkLCBBcmdfcHJlY2lzaW9uLCByZXN0KVxuICB8IF8sIFBhZGRpbmdfZm10dHlfRUJCIChfLCBfKSAtPiByYWlzZSBUeXBlX21pc21hdGNoXG5cbigqIFR5cGUgYSBmb3JtYXQgYWNjb3JkaW5nIHRvIGFuIGZtdHR5LiAqKVxuKCogSWYgdHlwaW5nIHN1Y2NlZWQsIGdlbmVyYXRlIGEgY29weSBvZiB0aGUgZm9ybWF0IHdpdGggdGhlIHNhbWVcbiAgICB0eXBlIHBhcmFtZXRlcnMgYXMgdGhlIGZtdHR5LiAqKVxuKCogUmFpc2UgW0ZhaWx1cmVdIHdpdGggYW4gZXJyb3IgbWVzc2FnZSBpbiBjYXNlIG9mIHR5cGUgbWlzbWF0Y2guICopXG5sZXQgcmVjIHR5cGVfZm9ybWF0IDpcbiAgdHlwZSBhMSBiMSBjMSBkMSBlMSBmMVxuICAgICAgIGEyIGIyIGMyIGQyIGUyIGYyICAuXG4gICAgIChhMSwgYjEsIGMxLCBkMSwgZTEsIGYxKSBmbXRcbiAgLT4gKGEyLCBiMiwgYzIsIGQyLCBlMiwgZjIpIGZtdHR5XG4gIC0+IChhMiwgYjIsIGMyLCBkMiwgZTIsIGYyKSBmbXRcbj0gZnVuIGZtdCBmbXR0eSAtPiBtYXRjaCB0eXBlX2Zvcm1hdF9nZW4gZm10IGZtdHR5IHdpdGhcbiAgfCBGbXRfZm10dHlfRUJCIChmbXQnLCBFbmRfb2ZfZm10dHkpIC0+IGZtdCdcbiAgfCBfIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcblxuYW5kIHR5cGVfZm9ybWF0X2dlbiA6XG4gIHR5cGUgYTEgYjEgYzEgZDEgZTEgZjFcbiAgICAgICBhMiBiMiBjMiBkMiBlMiBmMiAgLlxuICAgICAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSkgZm10XG4gIC0+IChhMiwgYjIsIGMyLCBkMiwgZTIsIGYyKSBmbXR0eVxuICAtPiAoYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10X2ZtdHR5X2ViYlxuPSBmdW4gZm10IGZtdHR5IC0+IG1hdGNoIGZtdCwgZm10dHkgd2l0aFxuICB8IENoYXIgZm10X3Jlc3QsIENoYXJfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChDaGFyIGZtdCcsIGZtdHR5JylcbiAgfCBDYW1sX2NoYXIgZm10X3Jlc3QsIENoYXJfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChDYW1sX2NoYXIgZm10JywgZm10dHknKVxuICB8IFN0cmluZyAocGFkLCBmbXRfcmVzdCksIF8gLT4gKFxuICAgIG1hdGNoIHR5cGVfcGFkZGluZyBwYWQgZm10dHkgd2l0aFxuICAgIHwgUGFkZGluZ19mbXR0eV9FQkIgKHBhZCwgU3RyaW5nX3R5IGZtdHR5X3Jlc3QpIC0+XG4gICAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgICBGbXRfZm10dHlfRUJCIChTdHJpbmcgKHBhZCwgZm10JyksIGZtdHR5JylcbiAgICB8IFBhZGRpbmdfZm10dHlfRUJCIChfLCBfKSAtPiByYWlzZSBUeXBlX21pc21hdGNoXG4gIClcbiAgfCBDYW1sX3N0cmluZyAocGFkLCBmbXRfcmVzdCksIF8gLT4gKFxuICAgIG1hdGNoIHR5cGVfcGFkZGluZyBwYWQgZm10dHkgd2l0aFxuICAgIHwgUGFkZGluZ19mbXR0eV9FQkIgKHBhZCwgU3RyaW5nX3R5IGZtdHR5X3Jlc3QpIC0+XG4gICAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgICBGbXRfZm10dHlfRUJCIChDYW1sX3N0cmluZyAocGFkLCBmbXQnKSwgZm10dHknKVxuICAgIHwgUGFkZGluZ19mbXR0eV9FQkIgKF8sIF8pIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcbiAgKVxuICB8IEludCAoaWNvbnYsIHBhZCwgcHJlYywgZm10X3Jlc3QpLCBfIC0+IChcbiAgICBtYXRjaCB0eXBlX3BhZHByZWMgcGFkIHByZWMgZm10dHkgd2l0aFxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKHBhZCwgcHJlYywgSW50X3R5IGZtdHR5X3Jlc3QpIC0+XG4gICAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgICBGbXRfZm10dHlfRUJCIChJbnQgKGljb252LCBwYWQsIHByZWMsIGZtdCcpLCBmbXR0eScpXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAoXywgXywgXykgLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuICApXG4gIHwgSW50MzIgKGljb252LCBwYWQsIHByZWMsIGZtdF9yZXN0KSwgXyAtPiAoXG4gICAgbWF0Y2ggdHlwZV9wYWRwcmVjIHBhZCBwcmVjIGZtdHR5IHdpdGhcbiAgICB8IFBhZHByZWNfZm10dHlfRUJCIChwYWQsIHByZWMsIEludDMyX3R5IGZtdHR5X3Jlc3QpIC0+XG4gICAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgICBGbXRfZm10dHlfRUJCIChJbnQzMiAoaWNvbnYsIHBhZCwgcHJlYywgZm10JyksIGZtdHR5JylcbiAgICB8IFBhZHByZWNfZm10dHlfRUJCIChfLCBfLCBfKSAtPiByYWlzZSBUeXBlX21pc21hdGNoXG4gIClcbiAgfCBOYXRpdmVpbnQgKGljb252LCBwYWQsIHByZWMsIGZtdF9yZXN0KSwgXyAtPiAoXG4gICAgbWF0Y2ggdHlwZV9wYWRwcmVjIHBhZCBwcmVjIGZtdHR5IHdpdGhcbiAgICB8IFBhZHByZWNfZm10dHlfRUJCIChwYWQsIHByZWMsIE5hdGl2ZWludF90eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoTmF0aXZlaW50IChpY29udiwgcGFkLCBwcmVjLCBmbXQnKSwgZm10dHknKVxuICAgIHwgUGFkcHJlY19mbXR0eV9FQkIgKF8sIF8sIF8pIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcbiAgKVxuICB8IEludDY0IChpY29udiwgcGFkLCBwcmVjLCBmbXRfcmVzdCksIF8gLT4gKFxuICAgIG1hdGNoIHR5cGVfcGFkcHJlYyBwYWQgcHJlYyBmbXR0eSB3aXRoXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAocGFkLCBwcmVjLCBJbnQ2NF90eSBmbXR0eV9yZXN0KSAtPlxuICAgICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoSW50NjQgKGljb252LCBwYWQsIHByZWMsIGZtdCcpLCBmbXR0eScpXG4gICAgfCBQYWRwcmVjX2ZtdHR5X0VCQiAoXywgXywgXykgLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuICApXG4gIHwgRmxvYXQgKGZjb252LCBwYWQsIHByZWMsIGZtdF9yZXN0KSwgXyAtPiAoXG4gICAgbWF0Y2ggdHlwZV9wYWRwcmVjIHBhZCBwcmVjIGZtdHR5IHdpdGhcbiAgICB8IFBhZHByZWNfZm10dHlfRUJCIChwYWQsIHByZWMsIEZsb2F0X3R5IGZtdHR5X3Jlc3QpIC0+XG4gICAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgICBGbXRfZm10dHlfRUJCIChGbG9hdCAoZmNvbnYsIHBhZCwgcHJlYywgZm10JyksIGZtdHR5JylcbiAgICB8IFBhZHByZWNfZm10dHlfRUJCIChfLCBfLCBfKSAtPiByYWlzZSBUeXBlX21pc21hdGNoXG4gIClcbiAgfCBCb29sIChwYWQsIGZtdF9yZXN0KSwgXyAtPiAoXG4gICAgbWF0Y2ggdHlwZV9wYWRkaW5nIHBhZCBmbXR0eSB3aXRoXG4gICAgfCBQYWRkaW5nX2ZtdHR5X0VCQiAocGFkLCBCb29sX3R5IGZtdHR5X3Jlc3QpIC0+XG4gICAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgICBGbXRfZm10dHlfRUJCIChCb29sIChwYWQsIGZtdCcpLCBmbXR0eScpXG4gICAgfCBQYWRkaW5nX2ZtdHR5X0VCQiAoXywgXykgLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuICApXG4gIHwgRmx1c2ggZm10X3Jlc3QsIGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoRmx1c2ggZm10JywgZm10dHknKVxuXG4gIHwgU3RyaW5nX2xpdGVyYWwgKHN0ciwgZm10X3Jlc3QpLCBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKFN0cmluZ19saXRlcmFsIChzdHIsIGZtdCcpLCBmbXR0eScpXG4gIHwgQ2hhcl9saXRlcmFsIChjaHIsIGZtdF9yZXN0KSwgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChDaGFyX2xpdGVyYWwgKGNociwgZm10JyksIGZtdHR5JylcblxuICB8IEZvcm1hdF9hcmcgKHBhZF9vcHQsIHN1Yl9mbXR0eSwgZm10X3Jlc3QpLFxuICAgIEZvcm1hdF9hcmdfdHkgKHN1Yl9mbXR0eScsIGZtdHR5X3Jlc3QpIC0+XG4gICAgaWYgRm10dHlfRUJCIHN1Yl9mbXR0eSA8PiBGbXR0eV9FQkIgc3ViX2ZtdHR5JyB0aGVuIHJhaXNlIFR5cGVfbWlzbWF0Y2g7XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKEZvcm1hdF9hcmcgKHBhZF9vcHQsIHN1Yl9mbXR0eScsIGZtdCcpLCBmbXR0eScpXG4gIHwgRm9ybWF0X3N1YnN0IChwYWRfb3B0LCBzdWJfZm10dHksIGZtdF9yZXN0KSxcbiAgICBGb3JtYXRfc3Vic3RfdHkgKHN1Yl9mbXR0eTEsIF9zdWJfZm10dHkyLCBmbXR0eV9yZXN0KSAtPlxuICAgIGlmIEZtdHR5X0VCQiAoZXJhc2VfcmVsIHN1Yl9mbXR0eSkgPD4gRm10dHlfRUJCIChlcmFzZV9yZWwgc3ViX2ZtdHR5MSkgdGhlblxuICAgICAgcmFpc2UgVHlwZV9taXNtYXRjaDtcbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9XG4gICAgICB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgKGVyYXNlX3JlbCBmbXR0eV9yZXN0KVxuICAgIGluXG4gICAgRm10X2ZtdHR5X0VCQiAoRm9ybWF0X3N1YnN0IChwYWRfb3B0LCBzdWJfZm10dHkxLCBmbXQnKSwgZm10dHknKVxuICAoKiBQcmludGYgYW5kIEZvcm1hdCBzcGVjaWZpYyBjb25zdHJ1Y3RvcnM6ICopXG4gIHwgQWxwaGEgZm10X3Jlc3QsIEFscGhhX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoQWxwaGEgZm10JywgZm10dHknKVxuICB8IFRoZXRhIGZtdF9yZXN0LCBUaGV0YV90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKFRoZXRhIGZtdCcsIGZtdHR5JylcblxuICAoKiBGb3JtYXQgc3BlY2lmaWMgY29uc3RydWN0b3JzOiAqKVxuICB8IEZvcm1hdHRpbmdfbGl0IChmb3JtYXR0aW5nX2xpdCwgZm10X3Jlc3QpLCBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKEZvcm1hdHRpbmdfbGl0IChmb3JtYXR0aW5nX2xpdCwgZm10JyksIGZtdHR5JylcbiAgfCBGb3JtYXR0aW5nX2dlbiAoZm9ybWF0dGluZ19nZW4sIGZtdF9yZXN0KSwgZm10dHlfcmVzdCAtPlxuICAgIHR5cGVfZm9ybWF0dGluZ19nZW4gZm9ybWF0dGluZ19nZW4gZm10X3Jlc3QgZm10dHlfcmVzdFxuXG4gICgqIFNjYW5mIHNwZWNpZmljIGNvbnN0cnVjdG9yczogKilcbiAgfCBSZWFkZXIgZm10X3Jlc3QsIFJlYWRlcl90eSBmbXR0eV9yZXN0IC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10X3Jlc3QgZm10dHlfcmVzdCBpblxuICAgIEZtdF9mbXR0eV9FQkIgKFJlYWRlciBmbXQnLCBmbXR0eScpXG4gIHwgU2Nhbl9jaGFyX3NldCAod2lkdGhfb3B0LCBjaGFyX3NldCwgZm10X3Jlc3QpLCBTdHJpbmdfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdF9yZXN0IGZtdHR5X3Jlc3QgaW5cbiAgICBGbXRfZm10dHlfRUJCIChTY2FuX2NoYXJfc2V0ICh3aWR0aF9vcHQsIGNoYXJfc2V0LCBmbXQnKSwgZm10dHknKVxuICB8IFNjYW5fZ2V0X2NvdW50ZXIgKGNvdW50ZXIsIGZtdF9yZXN0KSwgSW50X3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXRfcmVzdCBmbXR0eV9yZXN0IGluXG4gICAgRm10X2ZtdHR5X0VCQiAoU2Nhbl9nZXRfY291bnRlciAoY291bnRlciwgZm10JyksIGZtdHR5JylcbiAgfCBJZ25vcmVkX3BhcmFtIChpZ24sIHJlc3QpLCBmbXR0eV9yZXN0IC0+XG4gICAgdHlwZV9pZ25vcmVkX3BhcmFtIGlnbiByZXN0IGZtdHR5X3Jlc3RcblxuICB8IEVuZF9vZl9mb3JtYXQsIGZtdHR5X3Jlc3QgLT4gRm10X2ZtdHR5X0VCQiAoRW5kX29mX2Zvcm1hdCwgZm10dHlfcmVzdClcblxuICB8IF8gLT4gcmFpc2UgVHlwZV9taXNtYXRjaFxuXG5hbmQgdHlwZV9mb3JtYXR0aW5nX2dlbiA6IHR5cGUgYTEgYTMgYjEgYjMgYzEgYzMgZDEgZDMgZTEgZTIgZTMgZjEgZjIgZjMgLlxuICAgIChhMSwgYjEsIGMxLCBkMSwgZTEsIGYxKSBmb3JtYXR0aW5nX2dlbiAtPlxuICAgIChmMSwgYjEsIGMxLCBlMSwgZTIsIGYyKSBmbXQgLT5cbiAgICAoYTMsIGIzLCBjMywgZDMsIGUzLCBmMykgZm10dHkgLT5cbiAgICAoYTMsIGIzLCBjMywgZDMsIGUzLCBmMykgZm10X2ZtdHR5X2ViYiA9XG5mdW4gZm9ybWF0dGluZ19nZW4gZm10MCBmbXR0eTAgLT4gbWF0Y2ggZm9ybWF0dGluZ19nZW4gd2l0aFxuICB8IE9wZW5fdGFnIChGb3JtYXQgKGZtdDEsIHN0cikpIC0+XG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdDIsIGZtdHR5MikgPSB0eXBlX2Zvcm1hdF9nZW4gZm10MSBmbXR0eTAgaW5cbiAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10MywgZm10dHkzKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXQwIGZtdHR5MiBpblxuICAgIEZtdF9mbXR0eV9FQkIgKEZvcm1hdHRpbmdfZ2VuIChPcGVuX3RhZyAoRm9ybWF0IChmbXQyLCBzdHIpKSwgZm10MyksIGZtdHR5MylcbiAgfCBPcGVuX2JveCAoRm9ybWF0IChmbXQxLCBzdHIpKSAtPlxuICAgIGxldCBGbXRfZm10dHlfRUJCIChmbXQyLCBmbXR0eTIpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdDEgZm10dHkwIGluXG4gICAgbGV0IEZtdF9mbXR0eV9FQkIgKGZtdDMsIGZtdHR5MykgPSB0eXBlX2Zvcm1hdF9nZW4gZm10MCBmbXR0eTIgaW5cbiAgICBGbXRfZm10dHlfRUJCIChGb3JtYXR0aW5nX2dlbiAoT3Blbl9ib3ggKEZvcm1hdCAoZm10Miwgc3RyKSksIGZtdDMpLCBmbXR0eTMpXG5cbigqIFR5cGUgYW4gSWdub3JlZF9wYXJhbSBub2RlIGFjY29yZGluZyB0byBhbiBmbXR0eS4gKilcbmFuZCB0eXBlX2lnbm9yZWRfcGFyYW0gOiB0eXBlIHAgcSB4IHkgeiB0IHUgdiBhIGIgYyBkIGUgZiAuXG4gICAgKHgsIHksIHosIHQsIHEsIHApIGlnbm9yZWQgLT5cbiAgICAocCwgeSwgeiwgcSwgdSwgdikgZm10IC0+XG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdHR5IC0+XG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdF9mbXR0eV9lYmIgPVxuZnVuIGlnbiBmbXQgZm10dHkgLT4gbWF0Y2ggaWduIHdpdGhcbiAgfCBJZ25vcmVkX2NoYXIgICAgICAgICAgICAgICBhcyBpZ24nIC0+IHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgaWduJyBmbXQgZm10dHlcbiAgfCBJZ25vcmVkX2NhbWxfY2hhciAgICAgICAgICBhcyBpZ24nIC0+IHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgaWduJyBmbXQgZm10dHlcbiAgfCBJZ25vcmVkX3N0cmluZyBfICAgICAgICAgICBhcyBpZ24nIC0+IHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgaWduJyBmbXQgZm10dHlcbiAgfCBJZ25vcmVkX2NhbWxfc3RyaW5nIF8gICAgICBhcyBpZ24nIC0+IHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgaWduJyBmbXQgZm10dHlcbiAgfCBJZ25vcmVkX2ludCBfICAgICAgICAgICAgICBhcyBpZ24nIC0+IHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgaWduJyBmbXQgZm10dHlcbiAgfCBJZ25vcmVkX2ludDMyIF8gICAgICAgICAgICBhcyBpZ24nIC0+IHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgaWduJyBmbXQgZm10dHlcbiAgfCBJZ25vcmVkX25hdGl2ZWludCBfICAgICAgICBhcyBpZ24nIC0+IHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgaWduJyBmbXQgZm10dHlcbiAgfCBJZ25vcmVkX2ludDY0IF8gICAgICAgICAgICBhcyBpZ24nIC0+IHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgaWduJyBmbXQgZm10dHlcbiAgfCBJZ25vcmVkX2Zsb2F0IF8gICAgICAgICAgICBhcyBpZ24nIC0+IHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgaWduJyBmbXQgZm10dHlcbiAgfCBJZ25vcmVkX2Jvb2wgXyAgICAgICAgICAgICBhcyBpZ24nIC0+IHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgaWduJyBmbXQgZm10dHlcbiAgfCBJZ25vcmVkX3NjYW5fY2hhcl9zZXQgXyAgICBhcyBpZ24nIC0+IHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgaWduJyBmbXQgZm10dHlcbiAgfCBJZ25vcmVkX3NjYW5fZ2V0X2NvdW50ZXIgXyBhcyBpZ24nIC0+IHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgaWduJyBmbXQgZm10dHlcbiAgfCBJZ25vcmVkX3NjYW5fbmV4dF9jaGFyICAgICBhcyBpZ24nIC0+IHR5cGVfaWdub3JlZF9wYXJhbV9vbmUgaWduJyBmbXQgZm10dHlcbiAgfCBJZ25vcmVkX2Zvcm1hdF9hcmcgKHBhZF9vcHQsIHN1Yl9mbXR0eSkgLT5cbiAgICB0eXBlX2lnbm9yZWRfcGFyYW1fb25lIChJZ25vcmVkX2Zvcm1hdF9hcmcgKHBhZF9vcHQsIHN1Yl9mbXR0eSkpIGZtdCBmbXR0eVxuICB8IElnbm9yZWRfZm9ybWF0X3N1YnN0IChwYWRfb3B0LCBzdWJfZm10dHkpIC0+XG4gICAgbGV0IEZtdHR5X2ZtdF9FQkIgKHN1Yl9mbXR0eScsIEZtdF9mbXR0eV9FQkIgKGZtdCcsIGZtdHR5JykpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eSBmbXQgZm10dHkgaW5cbiAgICBGbXRfZm10dHlfRUJCIChJZ25vcmVkX3BhcmFtIChJZ25vcmVkX2Zvcm1hdF9zdWJzdCAocGFkX29wdCwgc3ViX2ZtdHR5JyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm10JyksXG4gICAgICAgICAgICAgICAgICAgZm10dHknKVxuICB8IElnbm9yZWRfcmVhZGVyIC0+IChcbiAgICBtYXRjaCBmbXR0eSB3aXRoXG4gICAgfCBJZ25vcmVkX3JlYWRlcl90eSBmbXR0eV9yZXN0IC0+XG4gICAgICBsZXQgRm10X2ZtdHR5X0VCQiAoZm10JywgZm10dHknKSA9IHR5cGVfZm9ybWF0X2dlbiBmbXQgZm10dHlfcmVzdCBpblxuICAgICAgRm10X2ZtdHR5X0VCQiAoSWdub3JlZF9wYXJhbSAoSWdub3JlZF9yZWFkZXIsIGZtdCcpLCBmbXR0eScpXG4gICAgfCBfIC0+IHJhaXNlIFR5cGVfbWlzbWF0Y2hcbiAgKVxuXG5hbmQgdHlwZV9pZ25vcmVkX3BhcmFtX29uZSA6IHR5cGUgYTEgYTIgYjEgYjIgYzEgYzIgZDEgZDIgZTEgZTIgZjEgZjIgLlxuICAgIChhMiwgYjIsIGMyLCBkMiwgZDIsIGEyKSBpZ25vcmVkIC0+XG4gICAgKGExLCBiMSwgYzEsIGQxLCBlMSwgZjEpIGZtdCAtPlxuICAgIChhMiwgYjIsIGMyLCBkMiwgZTIsIGYyKSBmbXR0eSAtPlxuICAgIChhMiwgYjIsIGMyLCBkMiwgZTIsIGYyKSBmbXRfZm10dHlfZWJiXG49IGZ1biBpZ24gZm10IGZtdHR5IC0+XG4gIGxldCBGbXRfZm10dHlfRUJCIChmbXQnLCBmbXR0eScpID0gdHlwZV9mb3JtYXRfZ2VuIGZtdCBmbXR0eSBpblxuICBGbXRfZm10dHlfRUJCIChJZ25vcmVkX3BhcmFtIChpZ24sIGZtdCcpLCBmbXR0eScpXG5cbigqIFR5cGluZyBvZiB0aGUgY29tcGxleCBjYXNlOiBcIiVfKC4uLiUpXCIuICopXG5hbmQgdHlwZV9pZ25vcmVkX2Zvcm1hdF9zdWJzdGl0dXRpb24gOiB0eXBlIHcgeCB5IHogcCBzIHQgdSBhIGIgYyBkIGUgZiAuXG4gICAgKHcsIHgsIHksIHosIHMsIHApIGZtdHR5IC0+XG4gICAgKHAsIHgsIHksIHMsIHQsIHUpIGZtdCAtPlxuICAgIChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eSAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10dHlfZm10X2ViYiA9XG5mdW4gc3ViX2ZtdHR5IGZtdCBmbXR0eSAtPiBtYXRjaCBzdWJfZm10dHksIGZtdHR5IHdpdGhcbiAgfCBDaGFyX3R5IHN1Yl9mbXR0eV9yZXN0LCBDaGFyX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKENoYXJfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IFN0cmluZ190eSBzdWJfZm10dHlfcmVzdCwgU3RyaW5nX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKFN0cmluZ190eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgSW50X3R5IHN1Yl9mbXR0eV9yZXN0LCBJbnRfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eV9yZXN0IGZtdCBmbXR0eV9yZXN0IGluXG4gICAgRm10dHlfZm10X0VCQiAoSW50X3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBJbnQzMl90eSBzdWJfZm10dHlfcmVzdCwgSW50MzJfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eV9yZXN0IGZtdCBmbXR0eV9yZXN0IGluXG4gICAgRm10dHlfZm10X0VCQiAoSW50MzJfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IE5hdGl2ZWludF90eSBzdWJfZm10dHlfcmVzdCwgTmF0aXZlaW50X3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKE5hdGl2ZWludF90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgSW50NjRfdHkgc3ViX2ZtdHR5X3Jlc3QsIEludDY0X3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKEludDY0X3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBGbG9hdF90eSBzdWJfZm10dHlfcmVzdCwgRmxvYXRfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eV9yZXN0IGZtdCBmbXR0eV9yZXN0IGluXG4gICAgRm10dHlfZm10X0VCQiAoRmxvYXRfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IEJvb2xfdHkgc3ViX2ZtdHR5X3Jlc3QsIEJvb2xfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eV9yZXN0IGZtdCBmbXR0eV9yZXN0IGluXG4gICAgRm10dHlfZm10X0VCQiAoQm9vbF90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgQWxwaGFfdHkgc3ViX2ZtdHR5X3Jlc3QsIEFscGhhX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKEFscGhhX3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcbiAgfCBUaGV0YV90eSBzdWJfZm10dHlfcmVzdCwgVGhldGFfdHkgZm10dHlfcmVzdCAtPlxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eV9yZXN0IGZtdCBmbXR0eV9yZXN0IGluXG4gICAgRm10dHlfZm10X0VCQiAoVGhldGFfdHkgc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKVxuICB8IFJlYWRlcl90eSBzdWJfZm10dHlfcmVzdCwgUmVhZGVyX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKFJlYWRlcl90eSBzdWJfZm10dHlfcmVzdCcsIGZtdCcpXG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgc3ViX2ZtdHR5X3Jlc3QsIElnbm9yZWRfcmVhZGVyX3R5IGZtdHR5X3Jlc3QgLT5cbiAgICBsZXQgRm10dHlfZm10X0VCQiAoc3ViX2ZtdHR5X3Jlc3QnLCBmbXQnKSA9XG4gICAgICB0eXBlX2lnbm9yZWRfZm9ybWF0X3N1YnN0aXR1dGlvbiBzdWJfZm10dHlfcmVzdCBmbXQgZm10dHlfcmVzdCBpblxuICAgIEZtdHR5X2ZtdF9FQkIgKElnbm9yZWRfcmVhZGVyX3R5IHN1Yl9mbXR0eV9yZXN0JywgZm10JylcblxuICB8IEZvcm1hdF9hcmdfdHkgKHN1YjJfZm10dHksIHN1Yl9mbXR0eV9yZXN0KSxcbiAgICBGb3JtYXRfYXJnX3R5IChzdWIyX2ZtdHR5JywgZm10dHlfcmVzdCkgLT5cbiAgICBpZiBGbXR0eV9FQkIgc3ViMl9mbXR0eSA8PiBGbXR0eV9FQkIgc3ViMl9mbXR0eScgdGhlbiByYWlzZSBUeXBlX21pc21hdGNoO1xuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIHN1Yl9mbXR0eV9yZXN0IGZtdCBmbXR0eV9yZXN0IGluXG4gICAgRm10dHlfZm10X0VCQiAoRm9ybWF0X2FyZ190eSAoc3ViMl9mbXR0eScsIHN1Yl9mbXR0eV9yZXN0JyksIGZtdCcpXG4gIHwgRm9ybWF0X3N1YnN0X3R5IChzdWIxX2ZtdHR5LCAgc3ViMl9mbXR0eSwgIHN1Yl9mbXR0eV9yZXN0KSxcbiAgICBGb3JtYXRfc3Vic3RfdHkgKHN1YjFfZm10dHknLCBzdWIyX2ZtdHR5JywgZm10dHlfcmVzdCkgLT5cbiAgICAoKiBUT0RPIGRlZmluZSBGbXR0eV9yZWxfRUJCIHRvIHJlbW92ZSB0aG9zZSBlcmFzZV9yZWwgKilcbiAgICBpZiBGbXR0eV9FQkIgKGVyYXNlX3JlbCBzdWIxX2ZtdHR5KSA8PiBGbXR0eV9FQkIgKGVyYXNlX3JlbCBzdWIxX2ZtdHR5JylcbiAgICB0aGVuIHJhaXNlIFR5cGVfbWlzbWF0Y2g7XG4gICAgaWYgRm10dHlfRUJCIChlcmFzZV9yZWwgc3ViMl9mbXR0eSkgPD4gRm10dHlfRUJCIChlcmFzZV9yZWwgc3ViMl9mbXR0eScpXG4gICAgdGhlbiByYWlzZSBUeXBlX21pc21hdGNoO1xuICAgIGxldCBzdWJfZm10dHknID0gdHJhbnMgKHN5bW0gc3ViMV9mbXR0eScpIHN1YjJfZm10dHknIGluXG4gICAgbGV0IF8sIGYyLCBfLCBmNCA9IGZtdHR5X3JlbF9kZXQgc3ViX2ZtdHR5JyBpblxuICAgIGxldCBSZWZsID0gZjIgUmVmbCBpblxuICAgIGxldCBSZWZsID0gZjQgUmVmbCBpblxuICAgIGxldCBGbXR0eV9mbXRfRUJCIChzdWJfZm10dHlfcmVzdCcsIGZtdCcpID1cbiAgICAgIHR5cGVfaWdub3JlZF9mb3JtYXRfc3Vic3RpdHV0aW9uIChlcmFzZV9yZWwgc3ViX2ZtdHR5X3Jlc3QpIGZtdCBmbXR0eV9yZXN0XG4gICAgaW5cbiAgICBGbXR0eV9mbXRfRUJCIChGb3JtYXRfc3Vic3RfdHkgKHN1YjFfZm10dHknLCBzdWIyX2ZtdHR5JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bW0gc3ViX2ZtdHR5X3Jlc3QnKSxcbiAgICAgICAgICAgICAgICAgICBmbXQnKVxuICB8IEVuZF9vZl9mbXR0eSwgZm10dHkgLT5cbiAgICBGbXR0eV9mbXRfRUJCIChFbmRfb2ZfZm10dHksIHR5cGVfZm9ybWF0X2dlbiBmbXQgZm10dHkpXG4gIHwgXyAtPiByYWlzZSBUeXBlX21pc21hdGNoXG5cbigqIFRoaXMgaW1wbGVtZW50YXRpb24gb2YgYHJlY2FzdGAgaXMgYSBiaXQgZGlzYXBwb2ludGluZy4gVGhlXG4gICBpbnZhcmlhbnQgcHJvdmlkZWQgYnkgdGhlIHR5cGUgYXJlIHZlcnkgc3Ryb25nOiB0aGUgaW5wdXQgZm9ybWF0J3NcbiAgIHR5cGUgaXMgaW4gcmVsYXRpb24gdG8gdGhlIG91dHB1dCB0eXBlJ3MgYXMgd2l0bmVzc2VkIGJ5IHRoZVxuICAgZm10dHlfcmVsIGFyZ3VtZW50LiBPbmUgd291bGQgYXQgZmlyc3QgZXhwZWN0IHRoaXMgZnVuY3Rpb24gdG8gYmVcbiAgIHRvdGFsLCBhbmQgaW1wbGVtZW50YWJsZSBieSBleGhhdXN0aXZlIHBhdHRlcm4gbWF0Y2hpbmcuIEluc3RlYWQsXG4gICB3ZSByZXVzZSB0aGUgaGlnaGx5IHBhcnRpYWwgYW5kIG11Y2ggbGVzcyB3ZWxsLWRlZmluZWQgZnVuY3Rpb25cbiAgIGB0eXBlX2Zvcm1hdGAgdGhhdCBoYXMgbG9zdCBhbGwga25vd2xlZGdlIG9mIHRoZSBjb3JyZXNwb25kZW5jZVxuICAgYmV0d2VlbiB0aGUgYXJndW1lbnQncyB0eXBlcy5cblxuICAgQmVzaWRlcyB0aGUgZmFjdCB0aGF0IHRoaXMgZnVuY3Rpb24gcmV1c2VzIGEgbG90IG9mIHRoZVxuICAgYHR5cGVfZm9ybWF0YCBsb2dpYyAoZWcuOiBzZWVpbmcgSW50X3R5IGluIHRoZSBmbXR0eSBwYXJhbWV0ZXIgZG9lc1xuICAgbm90IGxldCB5b3UgbWF0Y2ggb24gSW50IG9ubHksIGFzIHlvdSBtYXkgaW4gZmFjdCBoYXZlIEZsb2F0XG4gICAoQXJnX3BhZGRpbmcsIC4uLikgKFwiJS4qZFwiKSBiZWdpbm5pbmcgd2l0aCBhbiBJbnRfdHkpLCBpdCBpcyBhbHNvXG4gICBhIHBhcnRpYWwgZnVuY3Rpb24sIGJlY2F1c2UgdGhlIHR5cGluZyBpbmZvcm1hdGlvbiBpbiBhIGZvcm1hdCBpc1xuICAgbm90IHF1aXRlIGVub3VnaCB0byByZWNvbnN0cnVjdCBpdCB1bmFtYmlndW91c2x5LiBGb3IgZXhhbXBsZSwgdGhlXG4gICBmb3JtYXQgdHlwZXMgb2YgXCIlZCVfclwiIGFuZCBcIiVfciVkXCIgaGF2ZSB0aGUgc2FtZSBmb3JtYXQ2XG4gICBwYXJhbWV0ZXJzLCBidXQgdGhleSBhcmUgbm90IGF0IGFsbCBleGNoYW5nZWFibGUsIGFuZCBwdXR0aW5nIG9uZVxuICAgaW4gcGxhY2Ugb2YgdGhlIG90aGVyIG11c3QgcmVzdWx0IGluIGEgZHluYW1pYyBmYWlsdXJlLlxuXG4gICBHaXZlbiB0aGF0OlxuICAgLSB3ZSdkIGhhdmUgdG8gZHVwbGljYXRlIGEgbG90IG9mIG5vbi10cml2aWFsIHR5cGluZyBsb2dpYyBmcm9tIHR5cGVfZm9ybWF0XG4gICAtIHRoaXMgd291bGRuJ3QgZXZlbiBlbGltaW5hdGUgKGFsbCkgdGhlIGR5bmFtaWMgZmFpbHVyZXNcbiAgIHdlIGRlY2lkZWQgdG8ganVzdCByZXVzZSB0eXBlX2Zvcm1hdCBkaXJlY3RseSBmb3Igbm93LlxuKilcbmxldCByZWNhc3QgOlxuICB0eXBlIGExIGIxIGMxIGQxIGUxIGYxXG4gICAgICAgYTIgYjIgYzIgZDIgZTIgZjJcbiAgLlxuICAgICAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSkgZm10XG4gIC0+IChhMSwgYjEsIGMxLCBkMSwgZTEsIGYxLFxuICAgICAgYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10dHlfcmVsXG4gIC0+IChhMiwgYjIsIGMyLCBkMiwgZTIsIGYyKSBmbXRcbj0gZnVuIGZtdCBmbXR0eSAtPlxuICB0eXBlX2Zvcm1hdCBmbXQgKGVyYXNlX3JlbCAoc3ltbSBmbXR0eSkpXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIFByaW50aW5nIHRvb2xzICopXG5cbigqIEFkZCBwYWRkaW5nIHNwYWNlcyBhcm91bmQgYSBzdHJpbmcuICopXG5sZXQgZml4X3BhZGRpbmcgcGFkdHkgd2lkdGggc3RyID1cbiAgbGV0IGxlbiA9IFN0cmluZy5sZW5ndGggc3RyIGluXG4gIGxldCB3aWR0aCwgcGFkdHkgPVxuICAgIGFicyB3aWR0aCxcbiAgICAoKiB3aGlsZSBsaXRlcmFsIHBhZGRpbmcgd2lkdGhzIGFyZSBhbHdheXMgbm9uLW5lZ2F0aXZlLFxuICAgICAgIGR5bmFtaWNhbGx5LXNldCB3aWR0aHMgKEFyZ19wYWRkaW5nLCBlZy4gJSpkKSBtYXkgYmUgbmVnYXRpdmU7XG4gICAgICAgd2UgaW50ZXJwcmV0IHRob3NlIGFzIHNwZWNpZnlpbmcgYSBwYWRkaW5nLXRvLXRoZS1sZWZ0OyB0aGlzXG4gICAgICAgbWVhbnMgdGhhdCAnMCcgbWF5IGdldCBkcm9wcGVkIGV2ZW4gaWYgaXQgd2FzIGV4cGxpY2l0bHkgc2V0LFxuICAgICAgIGJ1dDpcbiAgICAgICAtIHRoaXMgaXMgd2hhdCB0aGUgbGVnYWN5IGltcGxlbWVudGF0aW9uIGRvZXMsIGFuZFxuICAgICAgICAgd2UgcHJlc2VydmUgY29tcGF0aWJpbGl0eSBpZiBwb3NzaWJsZVxuICAgICAgIC0gd2UgY291bGQgb25seSBzaWduYWwgdGhpcyBpc3N1ZSBieSBmYWlsaW5nIGF0IHJ1bnRpbWUsXG4gICAgICAgICB3aGljaCBpcyBub3QgdmVyeSBuaWNlLi4uICopXG4gICAgaWYgd2lkdGggPCAwIHRoZW4gTGVmdCBlbHNlIHBhZHR5IGluXG4gIGlmIHdpZHRoIDw9IGxlbiB0aGVuIHN0ciBlbHNlXG4gICAgbGV0IHJlcyA9IEJ5dGVzLm1ha2Ugd2lkdGggKGlmIHBhZHR5ID0gWmVyb3MgdGhlbiAnMCcgZWxzZSAnICcpIGluXG4gICAgYmVnaW4gbWF0Y2ggcGFkdHkgd2l0aFxuICAgIHwgTGVmdCAgLT4gU3RyaW5nLmJsaXQgc3RyIDAgcmVzIDAgbGVuXG4gICAgfCBSaWdodCAtPiBTdHJpbmcuYmxpdCBzdHIgMCByZXMgKHdpZHRoIC0gbGVuKSBsZW5cbiAgICB8IFplcm9zIHdoZW4gbGVuID4gMCAmJiAoc3RyLlswXSA9ICcrJyB8fCBzdHIuWzBdID0gJy0nIHx8IHN0ci5bMF0gPSAnICcpIC0+XG4gICAgICBCeXRlcy5zZXQgcmVzIDAgc3RyLlswXTtcbiAgICAgIFN0cmluZy5ibGl0IHN0ciAxIHJlcyAod2lkdGggLSBsZW4gKyAxKSAobGVuIC0gMSlcbiAgICB8IFplcm9zIHdoZW4gbGVuID4gMSAmJiBzdHIuWzBdID0gJzAnICYmIChzdHIuWzFdID0gJ3gnIHx8IHN0ci5bMV0gPSAnWCcpIC0+XG4gICAgICBCeXRlcy5zZXQgcmVzIDEgc3RyLlsxXTtcbiAgICAgIFN0cmluZy5ibGl0IHN0ciAyIHJlcyAod2lkdGggLSBsZW4gKyAyKSAobGVuIC0gMilcbiAgICB8IFplcm9zIC0+XG4gICAgICBTdHJpbmcuYmxpdCBzdHIgMCByZXMgKHdpZHRoIC0gbGVuKSBsZW5cbiAgICBlbmQ7XG4gICAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyByZXNcblxuKCogQWRkICcwJyBwYWRkaW5nIHRvIGludCwgaW50MzIsIG5hdGl2ZWludCBvciBpbnQ2NCBzdHJpbmcgcmVwcmVzZW50YXRpb24uICopXG5sZXQgZml4X2ludF9wcmVjaXNpb24gcHJlYyBzdHIgPVxuICBsZXQgcHJlYyA9IGFicyBwcmVjIGluXG4gIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHN0ciBpblxuICBtYXRjaCBzdHIuWzBdIHdpdGhcbiAgfCAoJysnIHwgJy0nIHwgJyAnKSBhcyBjIHdoZW4gcHJlYyArIDEgPiBsZW4gLT5cbiAgICBsZXQgcmVzID0gQnl0ZXMubWFrZSAocHJlYyArIDEpICcwJyBpblxuICAgIEJ5dGVzLnNldCByZXMgMCBjO1xuICAgIFN0cmluZy5ibGl0IHN0ciAxIHJlcyAocHJlYyAtIGxlbiArIDIpIChsZW4gLSAxKTtcbiAgICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHJlc1xuICB8ICcwJyB3aGVuIHByZWMgKyAyID4gbGVuICYmIGxlbiA+IDEgJiYgKHN0ci5bMV0gPSAneCcgfHwgc3RyLlsxXSA9ICdYJykgLT5cbiAgICBsZXQgcmVzID0gQnl0ZXMubWFrZSAocHJlYyArIDIpICcwJyBpblxuICAgIEJ5dGVzLnNldCByZXMgMSBzdHIuWzFdO1xuICAgIFN0cmluZy5ibGl0IHN0ciAyIHJlcyAocHJlYyAtIGxlbiArIDQpIChsZW4gLSAyKTtcbiAgICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHJlc1xuICB8ICcwJyAuLiAnOScgfCAnYScgLi4gJ2YnIHwgJ0EnIC4uICdGJyB3aGVuIHByZWMgPiBsZW4gLT5cbiAgICBsZXQgcmVzID0gQnl0ZXMubWFrZSBwcmVjICcwJyBpblxuICAgIFN0cmluZy5ibGl0IHN0ciAwIHJlcyAocHJlYyAtIGxlbikgbGVuO1xuICAgIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcmVzXG4gIHwgXyAtPlxuICAgIHN0clxuXG4oKiBFc2NhcGUgYSBzdHJpbmcgYWNjb3JkaW5nIHRvIHRoZSBPQ2FtbCBsZXhpbmcgY29udmVudGlvbi4gKilcbmxldCBzdHJpbmdfdG9fY2FtbF9zdHJpbmcgc3RyID1cbiAgbGV0IHN0ciA9IFN0cmluZy5lc2NhcGVkIHN0ciBpblxuICBsZXQgbCA9IFN0cmluZy5sZW5ndGggc3RyIGluXG4gIGxldCByZXMgPSBCeXRlcy5tYWtlIChsICsgMikgJ1xcXCInIGluXG4gIFN0cmluZy51bnNhZmVfYmxpdCBzdHIgMCByZXMgMSBsO1xuICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHJlc1xuXG4oKiBHZW5lcmF0ZSB0aGUgZm9ybWF0X2ludC9pbnQzMi9uYXRpdmVpbnQvaW50NjQgZmlyc3QgYXJndW1lbnRcbiAgIGZyb20gYW4gaW50X2NvbnYuICopXG5sZXQgZm9ybWF0X29mX2ljb252ID0gZnVuY3Rpb25cbiAgfCBJbnRfZCB8IEludF9DZCAtPiBcIiVkXCIgfCBJbnRfcGQgLT4gXCIlK2RcIiB8IEludF9zZCAtPiBcIiUgZFwiXG4gIHwgSW50X2kgfCBJbnRfQ2kgLT4gXCIlaVwiIHwgSW50X3BpIC0+IFwiJStpXCIgfCBJbnRfc2kgLT4gXCIlIGlcIlxuICB8IEludF94IC0+IFwiJXhcIiB8IEludF9DeCAtPiBcIiUjeFwiXG4gIHwgSW50X1ggLT4gXCIlWFwiIHwgSW50X0NYIC0+IFwiJSNYXCJcbiAgfCBJbnRfbyAtPiBcIiVvXCIgfCBJbnRfQ28gLT4gXCIlI29cIlxuICB8IEludF91IHwgSW50X0N1IC0+IFwiJXVcIlxuXG5sZXQgZm9ybWF0X29mX2ljb252TCA9IGZ1bmN0aW9uXG4gIHwgSW50X2QgfCBJbnRfQ2QgLT4gXCIlTGRcIiB8IEludF9wZCAtPiBcIiUrTGRcIiB8IEludF9zZCAtPiBcIiUgTGRcIlxuICB8IEludF9pIHwgSW50X0NpIC0+IFwiJUxpXCIgfCBJbnRfcGkgLT4gXCIlK0xpXCIgfCBJbnRfc2kgLT4gXCIlIExpXCJcbiAgfCBJbnRfeCAtPiBcIiVMeFwiIHwgSW50X0N4IC0+IFwiJSNMeFwiXG4gIHwgSW50X1ggLT4gXCIlTFhcIiB8IEludF9DWCAtPiBcIiUjTFhcIlxuICB8IEludF9vIC0+IFwiJUxvXCIgfCBJbnRfQ28gLT4gXCIlI0xvXCJcbiAgfCBJbnRfdSB8IEludF9DdSAtPiBcIiVMdVwiXG5cbmxldCBmb3JtYXRfb2ZfaWNvbnZsID0gZnVuY3Rpb25cbiAgfCBJbnRfZCB8IEludF9DZCAtPiBcIiVsZFwiIHwgSW50X3BkIC0+IFwiJStsZFwiIHwgSW50X3NkIC0+IFwiJSBsZFwiXG4gIHwgSW50X2kgfCBJbnRfQ2kgLT4gXCIlbGlcIiB8IEludF9waSAtPiBcIiUrbGlcIiB8IEludF9zaSAtPiBcIiUgbGlcIlxuICB8IEludF94IC0+IFwiJWx4XCIgfCBJbnRfQ3ggLT4gXCIlI2x4XCJcbiAgfCBJbnRfWCAtPiBcIiVsWFwiIHwgSW50X0NYIC0+IFwiJSNsWFwiXG4gIHwgSW50X28gLT4gXCIlbG9cIiB8IEludF9DbyAtPiBcIiUjbG9cIlxuICB8IEludF91IHwgSW50X0N1IC0+IFwiJWx1XCJcblxubGV0IGZvcm1hdF9vZl9pY29udm4gPSBmdW5jdGlvblxuICB8IEludF9kIHwgSW50X0NkIC0+IFwiJW5kXCIgfCBJbnRfcGQgLT4gXCIlK25kXCIgfCBJbnRfc2QgLT4gXCIlIG5kXCJcbiAgfCBJbnRfaSB8IEludF9DaSAtPiBcIiVuaVwiIHwgSW50X3BpIC0+IFwiJStuaVwiIHwgSW50X3NpIC0+IFwiJSBuaVwiXG4gIHwgSW50X3ggLT4gXCIlbnhcIiB8IEludF9DeCAtPiBcIiUjbnhcIlxuICB8IEludF9YIC0+IFwiJW5YXCIgfCBJbnRfQ1ggLT4gXCIlI25YXCJcbiAgfCBJbnRfbyAtPiBcIiVub1wiIHwgSW50X0NvIC0+IFwiJSNub1wiXG4gIHwgSW50X3UgfCBJbnRfQ3UgLT4gXCIlbnVcIlxuXG4oKiBHZW5lcmF0ZSB0aGUgZm9ybWF0X2Zsb2F0IGZpcnN0IGFyZ3VtZW50IGZyb20gYSBmbG9hdF9jb252LiAqKVxubGV0IGZvcm1hdF9vZl9mY29udiBmY29udiBwcmVjID1cbiAgICBsZXQgcHJlYyA9IGFicyBwcmVjIGluXG4gICAgbGV0IHN5bWIgPSBjaGFyX29mX2Zjb252IH5jRjonZycgZmNvbnYgaW5cbiAgICBsZXQgYnVmID0gYnVmZmVyX2NyZWF0ZSAxNiBpblxuICAgIGJ1ZmZlcl9hZGRfY2hhciBidWYgJyUnO1xuICAgIGJwcmludF9mY29udl9mbGFnIGJ1ZiBmY29udjtcbiAgICBidWZmZXJfYWRkX2NoYXIgYnVmICcuJztcbiAgICBidWZmZXJfYWRkX3N0cmluZyBidWYgKEludC50b19zdHJpbmcgcHJlYyk7XG4gICAgYnVmZmVyX2FkZF9jaGFyIGJ1ZiBzeW1iO1xuICAgIGJ1ZmZlcl9jb250ZW50cyBidWZcblxubGV0IHRyYW5zZm9ybV9pbnRfYWx0IGljb252IHMgPVxuICBtYXRjaCBpY29udiB3aXRoXG4gIHwgSW50X0NkIHwgSW50X0NpIHwgSW50X0N1IC0+XG4gICAgbGV0IGRpZ2l0cyA9XG4gICAgICBsZXQgbiA9IHJlZiAwIGluXG4gICAgICBmb3IgaSA9IDAgdG8gU3RyaW5nLmxlbmd0aCBzIC0gMSBkb1xuICAgICAgICBtYXRjaCBTdHJpbmcudW5zYWZlX2dldCBzIGkgd2l0aFxuICAgICAgICB8ICcwJy4uJzknIC0+IGluY3IgblxuICAgICAgICB8IF8gLT4gKClcbiAgICAgIGRvbmU7XG4gICAgICAhblxuICAgIGluXG4gICAgbGV0IGJ1ZiA9IEJ5dGVzLmNyZWF0ZSAoU3RyaW5nLmxlbmd0aCBzICsgKGRpZ2l0cyAtIDEpIC8gMykgaW5cbiAgICBsZXQgcG9zID0gcmVmIDAgaW5cbiAgICBsZXQgcHV0IGMgPSBCeXRlcy5zZXQgYnVmICFwb3MgYzsgaW5jciBwb3MgaW5cbiAgICBsZXQgbGVmdCA9IHJlZiAoKGRpZ2l0cyAtIDEpIG1vZCAzICsgMSkgaW5cbiAgICBmb3IgaSA9IDAgdG8gU3RyaW5nLmxlbmd0aCBzIC0gMSBkb1xuICAgICAgbWF0Y2ggU3RyaW5nLnVuc2FmZV9nZXQgcyBpIHdpdGhcbiAgICAgIHwgJzAnLi4nOScgYXMgYyAtPlxuICAgICAgICAgIGlmICFsZWZ0ID0gMCB0aGVuIChwdXQgJ18nOyBsZWZ0IDo9IDMpOyBkZWNyIGxlZnQ7IHB1dCBjXG4gICAgICB8IGMgLT4gcHV0IGNcbiAgICBkb25lO1xuICAgIEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgYnVmXG4gIHwgXyAtPiBzXG5cbigqIENvbnZlcnQgYW4gaW50ZWdlciB0byBhIHN0cmluZyBhY2NvcmRpbmcgdG8gYSBjb252ZXJzaW9uLiAqKVxubGV0IGNvbnZlcnRfaW50IGljb252IG4gPVxuICB0cmFuc2Zvcm1faW50X2FsdCBpY29udiAoZm9ybWF0X2ludCAoZm9ybWF0X29mX2ljb252IGljb252KSBuKVxubGV0IGNvbnZlcnRfaW50MzIgaWNvbnYgbiA9XG4gIHRyYW5zZm9ybV9pbnRfYWx0IGljb252IChmb3JtYXRfaW50MzIgKGZvcm1hdF9vZl9pY29udmwgaWNvbnYpIG4pXG5sZXQgY29udmVydF9uYXRpdmVpbnQgaWNvbnYgbiA9XG4gIHRyYW5zZm9ybV9pbnRfYWx0IGljb252IChmb3JtYXRfbmF0aXZlaW50IChmb3JtYXRfb2ZfaWNvbnZuIGljb252KSBuKVxubGV0IGNvbnZlcnRfaW50NjQgaWNvbnYgbiA9XG4gIHRyYW5zZm9ybV9pbnRfYWx0IGljb252IChmb3JtYXRfaW50NjQgKGZvcm1hdF9vZl9pY29udkwgaWNvbnYpIG4pXG5cbigqIENvbnZlcnQgYSBmbG9hdCB0byBzdHJpbmcuICopXG4oKiBGaXggc3BlY2lhbCBjYXNlIG9mIFwiT0NhbWwgZmxvYXQgZm9ybWF0XCIuICopXG5sZXQgY29udmVydF9mbG9hdCBmY29udiBwcmVjIHggPVxuICBsZXQgaGV4ICgpID1cbiAgICBsZXQgc2lnbiA9XG4gICAgICBtYXRjaCBmc3QgZmNvbnYgd2l0aFxuICAgICAgfCBGbG9hdF9mbGFnX3AgLT4gJysnXG4gICAgICB8IEZsb2F0X2ZsYWdfcyAtPiAnICdcbiAgICAgIHwgXyAtPiAnLScgaW5cbiAgICBoZXhzdHJpbmdfb2ZfZmxvYXQgeCBwcmVjIHNpZ24gaW5cbiAgbGV0IGFkZF9kb3RfaWZfbmVlZGVkIHN0ciA9XG4gICAgbGV0IGxlbiA9IFN0cmluZy5sZW5ndGggc3RyIGluXG4gICAgbGV0IHJlYyBpc192YWxpZCBpID1cbiAgICAgIGlmIGkgPSBsZW4gdGhlbiBmYWxzZSBlbHNlXG4gICAgICAgIG1hdGNoIHN0ci5baV0gd2l0aFxuICAgICAgICB8ICcuJyB8ICdlJyB8ICdFJyAtPiB0cnVlXG4gICAgICAgIHwgXyAtPiBpc192YWxpZCAoaSArIDEpIGluXG4gICAgaWYgaXNfdmFsaWQgMCB0aGVuIHN0ciBlbHNlIHN0ciBeIFwiLlwiIGluXG4gIGxldCBjYW1sX3NwZWNpYWxfdmFsIHN0ciA9IG1hdGNoIGNsYXNzaWZ5X2Zsb2F0IHggd2l0aFxuICAgIHwgRlBfbm9ybWFsIHwgRlBfc3Vibm9ybWFsIHwgRlBfemVybyAtPiBzdHJcbiAgICB8IEZQX2luZmluaXRlIC0+IGlmIHggPCAwLjAgdGhlbiBcIm5lZ19pbmZpbml0eVwiIGVsc2UgXCJpbmZpbml0eVwiXG4gICAgfCBGUF9uYW4gLT4gXCJuYW5cIiBpblxuICBtYXRjaCBzbmQgZmNvbnYgd2l0aFxuICB8IEZsb2F0X2ggLT4gaGV4ICgpXG4gIHwgRmxvYXRfSCAtPiBTdHJpbmcudXBwZXJjYXNlX2FzY2lpIChoZXggKCkpXG4gIHwgRmxvYXRfQ0YgLT4gY2FtbF9zcGVjaWFsX3ZhbCAoaGV4ICgpKVxuICB8IEZsb2F0X0YgLT5cbiAgICBsZXQgc3RyID0gZm9ybWF0X2Zsb2F0IChmb3JtYXRfb2ZfZmNvbnYgZmNvbnYgcHJlYykgeCBpblxuICAgIGNhbWxfc3BlY2lhbF92YWwgKGFkZF9kb3RfaWZfbmVlZGVkIHN0cilcbiAgfCBGbG9hdF9mIHwgRmxvYXRfZSB8IEZsb2F0X0UgfCBGbG9hdF9nIHwgRmxvYXRfRyAtPlxuICAgIGZvcm1hdF9mbG9hdCAoZm9ybWF0X29mX2Zjb252IGZjb252IHByZWMpIHhcblxuKCogQ29udmVydCBhIGNoYXIgdG8gYSBzdHJpbmcgYWNjb3JkaW5nIHRvIHRoZSBPQ2FtbCBsZXhpY2FsIGNvbnZlbnRpb24uICopXG5sZXQgZm9ybWF0X2NhbWxfY2hhciBjID1cbiAgbGV0IHN0ciA9IENoYXIuZXNjYXBlZCBjIGluXG4gIGxldCBsID0gU3RyaW5nLmxlbmd0aCBzdHIgaW5cbiAgbGV0IHJlcyA9IEJ5dGVzLm1ha2UgKGwgKyAyKSAnXFwnJyBpblxuICBTdHJpbmcudW5zYWZlX2JsaXQgc3RyIDAgcmVzIDEgbDtcbiAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyByZXNcblxuKCogQ29udmVydCBhIGZvcm1hdCB0eXBlIHRvIHN0cmluZyAqKVxubGV0IHN0cmluZ19vZl9mbXR0eSBmbXR0eSA9XG4gIGxldCBidWYgPSBidWZmZXJfY3JlYXRlIDE2IGluXG4gIGJwcmludF9mbXR0eSBidWYgZm10dHk7XG4gIGJ1ZmZlcl9jb250ZW50cyBidWZcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICgqIEdlbmVyaWMgcHJpbnRpbmcgZnVuY3Rpb24gKilcblxuKCogTWFrZSBhIGdlbmVyaWMgcHJpbnRpbmcgZnVuY3Rpb24uICopXG4oKiBVc2VkIHRvIGdlbmVyYXRlIFByaW50ZiBhbmQgRm9ybWF0IHByaW50aW5nIGZ1bmN0aW9ucy4gKilcbigqIFBhcmFtZXRlcnM6XG4gICAgIGs6IGEgY29udGludWF0aW9uIGZpbmFsbHkgYXBwbGllZCB0byB0aGUgb3V0cHV0IHN0cmVhbSBhbmQgdGhlIGFjY3VtdWxhdG9yLlxuICAgICBvOiB0aGUgb3V0cHV0IHN0cmVhbSAoc2VlIGssICVhIGFuZCAldCkuXG4gICAgIGFjYzogcmV2IGxpc3Qgb2YgcHJpbnRpbmcgZW50aXRpZXMgKHN0cmluZywgY2hhciwgZmx1c2gsIGZvcm1hdHRpbmcsIC4uLikuXG4gICAgIGZtdDogdGhlIGZvcm1hdC4gKilcbmxldCByZWMgbWFrZV9wcmludGYgOiB0eXBlIGEgYiBjIGQgZSBmIC5cbiAgICAoKGIsIGMpIGFjYyAtPiBmKSAtPiAoYiwgYykgYWNjIC0+XG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPiBhID1cbmZ1biBrIGFjYyBmbXQgLT4gbWF0Y2ggZm10IHdpdGhcbiAgfCBDaGFyIHJlc3QgLT5cbiAgICBmdW4gYyAtPlxuICAgICAgbGV0IG5ld19hY2MgPSBBY2NfZGF0YV9jaGFyIChhY2MsIGMpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIG5ld19hY2MgcmVzdFxuICB8IENhbWxfY2hhciByZXN0IC0+XG4gICAgZnVuIGMgLT5cbiAgICAgIGxldCBuZXdfYWNjID0gQWNjX2RhdGFfc3RyaW5nIChhY2MsIGZvcm1hdF9jYW1sX2NoYXIgYykgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgbmV3X2FjYyByZXN0XG4gIHwgU3RyaW5nIChwYWQsIHJlc3QpIC0+XG4gICAgbWFrZV9wYWRkaW5nIGsgYWNjIHJlc3QgcGFkIChmdW4gc3RyIC0+IHN0cilcbiAgfCBDYW1sX3N0cmluZyAocGFkLCByZXN0KSAtPlxuICAgIG1ha2VfcGFkZGluZyBrIGFjYyByZXN0IHBhZCBzdHJpbmdfdG9fY2FtbF9zdHJpbmdcbiAgfCBJbnQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbWFrZV9pbnRfcGFkZGluZ19wcmVjaXNpb24gayBhY2MgcmVzdCBwYWQgcHJlYyBjb252ZXJ0X2ludCBpY29udlxuICB8IEludDMyIChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIG1ha2VfaW50X3BhZGRpbmdfcHJlY2lzaW9uIGsgYWNjIHJlc3QgcGFkIHByZWMgY29udmVydF9pbnQzMiBpY29udlxuICB8IE5hdGl2ZWludCAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBtYWtlX2ludF9wYWRkaW5nX3ByZWNpc2lvbiBrIGFjYyByZXN0IHBhZCBwcmVjIGNvbnZlcnRfbmF0aXZlaW50IGljb252XG4gIHwgSW50NjQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbWFrZV9pbnRfcGFkZGluZ19wcmVjaXNpb24gayBhY2MgcmVzdCBwYWQgcHJlYyBjb252ZXJ0X2ludDY0IGljb252XG4gIHwgRmxvYXQgKGZjb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbWFrZV9mbG9hdF9wYWRkaW5nX3ByZWNpc2lvbiBrIGFjYyByZXN0IHBhZCBwcmVjIGZjb252XG4gIHwgQm9vbCAocGFkLCByZXN0KSAtPlxuICAgIG1ha2VfcGFkZGluZyBrIGFjYyByZXN0IHBhZCBzdHJpbmdfb2ZfYm9vbFxuICB8IEFscGhhIHJlc3QgLT5cbiAgICBmdW4gZiB4IC0+IG1ha2VfcHJpbnRmIGsgKEFjY19kZWxheSAoYWNjLCBmdW4gbyAtPiBmIG8geCkpIHJlc3RcbiAgfCBUaGV0YSByZXN0IC0+XG4gICAgZnVuIGYgLT4gbWFrZV9wcmludGYgayAoQWNjX2RlbGF5IChhY2MsIGYpKSByZXN0XG4gIHwgQ3VzdG9tIChhcml0eSwgZiwgcmVzdCkgLT5cbiAgICBtYWtlX2N1c3RvbSBrIGFjYyByZXN0IGFyaXR5IChmICgpKVxuICB8IFJlYWRlciBfIC0+XG4gICAgKCogVGhpcyBjYXNlIGlzIGltcG9zc2libGUsIGJ5IHR5cGluZyBvZiBmb3JtYXRzLiAqKVxuICAgICgqIEluZGVlZCwgc2luY2UgcHJpbnRmIGFuZCBjby4gdGFrZSBhIGZvcm1hdDQgYXMgYXJndW1lbnQsIHRoZSAnZCBhbmQgJ2VcbiAgICAgICB0eXBlIHBhcmFtZXRlcnMgb2YgZm10IGFyZSBvYnZpb3VzbHkgZXF1YWxzLiBUaGUgUmVhZGVyIGlzIHRoZVxuICAgICAgIG9ubHkgY29uc3RydWN0b3Igd2hpY2ggdG91Y2ggJ2QgYW5kICdlIHR5cGUgcGFyYW1ldGVycyBvZiB0aGUgZm9ybWF0XG4gICAgICAgdHlwZSwgaXQgYWRkcyBhbiAoLT4pIHRvIHRoZSAnZCBwYXJhbWV0ZXJzLiBDb25zZXF1ZW50bHksIGEgZm9ybWF0NFxuICAgICAgIGNhbm5vdCBjb250YWluIGEgUmVhZGVyIG5vZGUsIGV4Y2VwdCBpbiB0aGUgc3ViLWZvcm1hdCBhc3NvY2lhdGVkIHRvXG4gICAgICAgYW4gJXsuLi4lfS4gSXQncyBub3QgYSBwcm9ibGVtIGJlY2F1c2UgbWFrZV9wcmludGYgZG8gbm90IGNhbGxcbiAgICAgICBpdHNlbGYgcmVjdXJzaXZlbHkgb24gdGhlIHN1Yi1mb3JtYXQgYXNzb2NpYXRlZCB0byAley4uLiV9LiAqKVxuICAgIGFzc2VydCBmYWxzZVxuICB8IEZsdXNoIHJlc3QgLT5cbiAgICBtYWtlX3ByaW50ZiBrIChBY2NfZmx1c2ggYWNjKSByZXN0XG5cbiAgfCBTdHJpbmdfbGl0ZXJhbCAoc3RyLCByZXN0KSAtPlxuICAgIG1ha2VfcHJpbnRmIGsgKEFjY19zdHJpbmdfbGl0ZXJhbCAoYWNjLCBzdHIpKSByZXN0XG4gIHwgQ2hhcl9saXRlcmFsIChjaHIsIHJlc3QpIC0+XG4gICAgbWFrZV9wcmludGYgayAoQWNjX2NoYXJfbGl0ZXJhbCAoYWNjLCBjaHIpKSByZXN0XG5cbiAgfCBGb3JtYXRfYXJnIChfLCBzdWJfZm10dHksIHJlc3QpIC0+XG4gICAgbGV0IHR5ID0gc3RyaW5nX29mX2ZtdHR5IHN1Yl9mbXR0eSBpblxuICAgIChmdW4gc3RyIC0+XG4gICAgICBpZ25vcmUgc3RyO1xuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHR5KSkgcmVzdClcbiAgfCBGb3JtYXRfc3Vic3QgKF8sIGZtdHR5LCByZXN0KSAtPlxuICAgIGZ1biAoRm9ybWF0IChmbXQsIF8pKSAtPiBtYWtlX3ByaW50ZiBrIGFjY1xuICAgICAgKGNvbmNhdF9mbXQgKHJlY2FzdCBmbXQgZm10dHkpIHJlc3QpXG5cbiAgfCBTY2FuX2NoYXJfc2V0IChfLCBfLCByZXN0KSAtPlxuICAgIGxldCBuZXdfYWNjID0gQWNjX2ludmFsaWRfYXJnIChhY2MsIFwiUHJpbnRmOiBiYWQgY29udmVyc2lvbiAlW1wiKSBpblxuICAgIGZ1biBfIC0+IG1ha2VfcHJpbnRmIGsgbmV3X2FjYyByZXN0XG4gIHwgU2Nhbl9nZXRfY291bnRlciAoXywgcmVzdCkgLT5cbiAgICAoKiBUaGlzIGNhc2Ugc2hvdWxkIGJlIHJlZnVzZWQgZm9yIFByaW50Zi4gKilcbiAgICAoKiBBY2NlcHRlZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gKilcbiAgICAoKiBJbnRlcnByZXQgJWwsICVuIGFuZCAlTCBhcyAldS4gKilcbiAgICBmdW4gbiAtPlxuICAgICAgbGV0IG5ld19hY2MgPSBBY2NfZGF0YV9zdHJpbmcgKGFjYywgZm9ybWF0X2ludCBcIiV1XCIgbikgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgbmV3X2FjYyByZXN0XG4gIHwgU2Nhbl9uZXh0X2NoYXIgcmVzdCAtPlxuICAgIGZ1biBjIC0+XG4gICAgICBsZXQgbmV3X2FjYyA9IEFjY19kYXRhX2NoYXIgKGFjYywgYykgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgbmV3X2FjYyByZXN0XG4gIHwgSWdub3JlZF9wYXJhbSAoaWduLCByZXN0KSAtPlxuICAgIG1ha2VfaWdub3JlZF9wYXJhbSBrIGFjYyBpZ24gcmVzdFxuXG4gIHwgRm9ybWF0dGluZ19saXQgKGZtdGluZ19saXQsIHJlc3QpIC0+XG4gICAgbWFrZV9wcmludGYgayAoQWNjX2Zvcm1hdHRpbmdfbGl0IChhY2MsIGZtdGluZ19saXQpKSByZXN0XG4gIHwgRm9ybWF0dGluZ19nZW4gKE9wZW5fdGFnIChGb3JtYXQgKGZtdCcsIF8pKSwgcmVzdCkgLT5cbiAgICBsZXQgaycga2FjYyA9XG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZm9ybWF0dGluZ19nZW4gKGFjYywgQWNjX29wZW5fdGFnIGthY2MpKSByZXN0IGluXG4gICAgbWFrZV9wcmludGYgaycgRW5kX29mX2FjYyBmbXQnXG4gIHwgRm9ybWF0dGluZ19nZW4gKE9wZW5fYm94IChGb3JtYXQgKGZtdCcsIF8pKSwgcmVzdCkgLT5cbiAgICBsZXQgaycga2FjYyA9XG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZm9ybWF0dGluZ19nZW4gKGFjYywgQWNjX29wZW5fYm94IGthY2MpKSByZXN0IGluXG4gICAgbWFrZV9wcmludGYgaycgRW5kX29mX2FjYyBmbXQnXG5cbiAgfCBFbmRfb2ZfZm9ybWF0IC0+XG4gICAgayBhY2NcblxuKCogRGVsYXkgdGhlIGVycm9yIChJbnZhbGlkX2FyZ3VtZW50IFwiUHJpbnRmOiBiYWQgY29udmVyc2lvbiAlX1wiKS4gKilcbigqIEdlbmVyYXRlIGZ1bmN0aW9ucyB0byB0YWtlIHJlbWFpbmluZyBhcmd1bWVudHMgKGFmdGVyIHRoZSBcIiVfXCIpLiAqKVxuYW5kIG1ha2VfaWdub3JlZF9wYXJhbSA6IHR5cGUgeCB5IGEgYiBjIGQgZSBmIC5cbiAgICAoKGIsIGMpIGFjYyAtPiBmKSAtPiAoYiwgYykgYWNjIC0+XG4gICAgKGEsIGIsIGMsIGQsIHksIHgpIGlnbm9yZWQgLT5cbiAgICAoeCwgYiwgYywgeSwgZSwgZikgZm10IC0+IGEgPVxuZnVuIGsgYWNjIGlnbiBmbXQgLT4gbWF0Y2ggaWduIHdpdGhcbiAgfCBJZ25vcmVkX2NoYXIgICAgICAgICAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9jYW1sX2NoYXIgICAgICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfc3RyaW5nIF8gICAgICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX2NhbWxfc3RyaW5nIF8gICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9pbnQgKF8sIF8pICAgICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfaW50MzIgKF8sIF8pICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX25hdGl2ZWludCAoXywgXykgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9pbnQ2NCAoXywgXykgICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfZmxvYXQgKF8sIF8pICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX2Jvb2wgXyAgICAgICAgICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG4gIHwgSWdub3JlZF9mb3JtYXRfYXJnIF8gICAgICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfZm9ybWF0X3N1YnN0IChfLCBmbXR0eSkgLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIGZtdHR5IGZtdFxuICB8IElnbm9yZWRfcmVhZGVyICAgICAgICAgICAgICAgICAgLT4gYXNzZXJ0IGZhbHNlXG4gIHwgSWdub3JlZF9zY2FuX2NoYXJfc2V0IF8gICAgICAgICAtPiBtYWtlX2ludmFsaWRfYXJnIGsgYWNjIGZtdFxuICB8IElnbm9yZWRfc2Nhbl9nZXRfY291bnRlciBfICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBJZ25vcmVkX3NjYW5fbmV4dF9jaGFyICAgICAgICAgIC0+IG1ha2VfaW52YWxpZF9hcmcgayBhY2MgZm10XG5cblxuKCogU3BlY2lhbCBjYXNlIG9mIHByaW50ZiBcIiVfKFwiLiAqKVxuYW5kIG1ha2VfZnJvbV9mbXR0eSA6IHR5cGUgeCB5IGEgYiBjIGQgZSBmIC5cbiAgICAoKGIsIGMpIGFjYyAtPiBmKSAtPiAoYiwgYykgYWNjIC0+XG4gICAgKGEsIGIsIGMsIGQsIHksIHgpIGZtdHR5IC0+XG4gICAgKHgsIGIsIGMsIHksIGUsIGYpIGZtdCAtPiBhID1cbmZ1biBrIGFjYyBmbXR0eSBmbXQgLT4gbWF0Y2ggZm10dHkgd2l0aFxuICB8IENoYXJfdHkgcmVzdCAgICAgICAgICAgIC0+IGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IFN0cmluZ190eSByZXN0ICAgICAgICAgIC0+IGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IEludF90eSByZXN0ICAgICAgICAgICAgIC0+IGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IEludDMyX3R5IHJlc3QgICAgICAgICAgIC0+IGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IE5hdGl2ZWludF90eSByZXN0ICAgICAgIC0+IGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IEludDY0X3R5IHJlc3QgICAgICAgICAgIC0+IGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IEZsb2F0X3R5IHJlc3QgICAgICAgICAgIC0+IGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IEJvb2xfdHkgcmVzdCAgICAgICAgICAgIC0+IGZ1biBfIC0+IG1ha2VfZnJvbV9mbXR0eSBrIGFjYyByZXN0IGZtdFxuICB8IEFscGhhX3R5IHJlc3QgICAgICAgICAgIC0+IGZ1biBfIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIHJlc3QgZm10XG4gIHwgVGhldGFfdHkgcmVzdCAgICAgICAgICAgLT4gZnVuIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIHJlc3QgZm10XG4gIHwgQW55X3R5IHJlc3QgICAgICAgICAgICAgLT4gZnVuIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIHJlc3QgZm10XG4gIHwgUmVhZGVyX3R5IF8gICAgICAgICAgICAgLT4gYXNzZXJ0IGZhbHNlXG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgXyAgICAgLT4gYXNzZXJ0IGZhbHNlXG4gIHwgRm9ybWF0X2FyZ190eSAoXywgcmVzdCkgLT4gZnVuIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIHJlc3QgZm10XG4gIHwgRW5kX29mX2ZtdHR5ICAgICAgICAgICAgLT4gbWFrZV9pbnZhbGlkX2FyZyBrIGFjYyBmbXRcbiAgfCBGb3JtYXRfc3Vic3RfdHkgKHR5MSwgdHkyLCByZXN0KSAtPlxuICAgIGxldCB0eSA9IHRyYW5zIChzeW1tIHR5MSkgdHkyIGluXG4gICAgZnVuIF8gLT4gbWFrZV9mcm9tX2ZtdHR5IGsgYWNjIChjb25jYXRfZm10dHkgdHkgcmVzdCkgZm10XG5cbigqIEluc2VydCBhbiBBY2NfaW52YWxpZF9hcmcgaW4gdGhlIGFjY3VtdWxhdG9yIGFuZCBjb250aW51ZSB0byBnZW5lcmF0ZVxuICAgY2xvc3VyZXMgdG8gZ2V0IHRoZSByZW1haW5pbmcgYXJndW1lbnRzLiAqKVxuYW5kIG1ha2VfaW52YWxpZF9hcmcgOiB0eXBlIGEgYiBjIGQgZSBmIC5cbiAgICAoKGIsIGMpIGFjYyAtPiBmKSAtPiAoYiwgYykgYWNjIC0+XG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPiBhID1cbmZ1biBrIGFjYyBmbXQgLT5cbiAgbWFrZV9wcmludGYgayAoQWNjX2ludmFsaWRfYXJnIChhY2MsIFwiUHJpbnRmOiBiYWQgY29udmVyc2lvbiAlX1wiKSkgZm10XG5cbigqIEZpeCBwYWRkaW5nLCB0YWtlIGl0IGFzIGFuIGV4dHJhIGludGVnZXIgYXJndW1lbnQgaWYgbmVlZGVkLiAqKVxuYW5kIG1ha2VfcGFkZGluZyA6IHR5cGUgeCB6IGEgYiBjIGQgZSBmIC5cbiAgICAoKGIsIGMpIGFjYyAtPiBmKSAtPiAoYiwgYykgYWNjIC0+XG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPlxuICAgICh4LCB6IC0+IGEpIHBhZGRpbmcgLT4gKHogLT4gc3RyaW5nKSAtPiB4ID1cbiAgZnVuIGsgYWNjIGZtdCBwYWQgdHJhbnMgLT4gbWF0Y2ggcGFkIHdpdGhcbiAgfCBOb19wYWRkaW5nIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBuZXdfYWNjID0gQWNjX2RhdGFfc3RyaW5nIChhY2MsIHRyYW5zIHgpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIG5ld19hY2MgZm10XG4gIHwgTGl0X3BhZGRpbmcgKHBhZHR5LCB3aWR0aCkgLT5cbiAgICBmdW4geCAtPlxuICAgICAgbGV0IG5ld19hY2MgPSBBY2NfZGF0YV9zdHJpbmcgKGFjYywgZml4X3BhZGRpbmcgcGFkdHkgd2lkdGggKHRyYW5zIHgpKSBpblxuICAgICAgbWFrZV9wcmludGYgayBuZXdfYWNjIGZtdFxuICB8IEFyZ19wYWRkaW5nIHBhZHR5IC0+XG4gICAgZnVuIHcgeCAtPlxuICAgICAgbGV0IG5ld19hY2MgPSBBY2NfZGF0YV9zdHJpbmcgKGFjYywgZml4X3BhZGRpbmcgcGFkdHkgdyAodHJhbnMgeCkpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIG5ld19hY2MgZm10XG5cbigqIEZpeCBwYWRkaW5nIGFuZCBwcmVjaXNpb24gZm9yIGludCwgaW50MzIsIG5hdGl2ZWludCBvciBpbnQ2NC4gKilcbigqIFRha2Ugb25lIG9yIHR3byBleHRyYSBpbnRlZ2VyIGFyZ3VtZW50cyBpZiBuZWVkZWQuICopXG5hbmQgbWFrZV9pbnRfcGFkZGluZ19wcmVjaXNpb24gOiB0eXBlIHggeSB6IGEgYiBjIGQgZSBmIC5cbiAgICAoKGIsIGMpIGFjYyAtPiBmKSAtPiAoYiwgYykgYWNjIC0+XG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPlxuICAgICh4LCB5KSBwYWRkaW5nIC0+ICh5LCB6IC0+IGEpIHByZWNpc2lvbiAtPiAoaW50X2NvbnYgLT4geiAtPiBzdHJpbmcpIC0+XG4gICAgaW50X2NvbnYgLT4geCA9XG4gIGZ1biBrIGFjYyBmbXQgcGFkIHByZWMgdHJhbnMgaWNvbnYgLT4gbWF0Y2ggcGFkLCBwcmVjIHdpdGhcbiAgfCBOb19wYWRkaW5nLCBOb19wcmVjaXNpb24gLT5cbiAgICBmdW4geCAtPlxuICAgICAgbGV0IHN0ciA9IHRyYW5zIGljb252IHggaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBOb19wYWRkaW5nLCBMaXRfcHJlY2lzaW9uIHAgLT5cbiAgICBmdW4geCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9pbnRfcHJlY2lzaW9uIHAgKHRyYW5zIGljb252IHgpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgTm9fcGFkZGluZywgQXJnX3ByZWNpc2lvbiAtPlxuICAgIGZ1biBwIHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfaW50X3ByZWNpc2lvbiBwICh0cmFucyBpY29udiB4KSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IExpdF9wYWRkaW5nIChwYWR0eSwgdyksIE5vX3ByZWNpc2lvbiAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X3BhZGRpbmcgcGFkdHkgdyAodHJhbnMgaWNvbnYgeCkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBMaXRfcGFkZGluZyAocGFkdHksIHcpLCBMaXRfcHJlY2lzaW9uIHAgLT5cbiAgICBmdW4geCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKGZpeF9pbnRfcHJlY2lzaW9uIHAgKHRyYW5zIGljb252IHgpKSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IExpdF9wYWRkaW5nIChwYWR0eSwgdyksIEFyZ19wcmVjaXNpb24gLT5cbiAgICBmdW4gcCB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X3BhZGRpbmcgcGFkdHkgdyAoZml4X2ludF9wcmVjaXNpb24gcCAodHJhbnMgaWNvbnYgeCkpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgQXJnX3BhZGRpbmcgcGFkdHksIE5vX3ByZWNpc2lvbiAtPlxuICAgIGZ1biB3IHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3ICh0cmFucyBpY29udiB4KSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IEFyZ19wYWRkaW5nIHBhZHR5LCBMaXRfcHJlY2lzaW9uIHAgLT5cbiAgICBmdW4gdyB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X3BhZGRpbmcgcGFkdHkgdyAoZml4X2ludF9wcmVjaXNpb24gcCAodHJhbnMgaWNvbnYgeCkpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgQXJnX3BhZGRpbmcgcGFkdHksIEFyZ19wcmVjaXNpb24gLT5cbiAgICBmdW4gdyBwIHggLT5cbiAgICAgIGxldCBzdHIgPSBmaXhfcGFkZGluZyBwYWR0eSB3IChmaXhfaW50X3ByZWNpc2lvbiBwICh0cmFucyBpY29udiB4KSkgaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcblxuKCogQ29udmVydCBhIGZsb2F0LCBmaXggcGFkZGluZyBhbmQgcHJlY2lzaW9uIGlmIG5lZWRlZC4gKilcbigqIFRha2UgdGhlIGZsb2F0IGFyZ3VtZW50IGFuZCBvbmUgb3IgdHdvIGV4dHJhIGludGVnZXIgYXJndW1lbnRzIGlmIG5lZWRlZC4gKilcbmFuZCBtYWtlX2Zsb2F0X3BhZGRpbmdfcHJlY2lzaW9uIDogdHlwZSB4IHkgYSBiIGMgZCBlIGYgLlxuICAgICgoYiwgYykgYWNjIC0+IGYpIC0+IChiLCBjKSBhY2MgLT5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+XG4gICAgKHgsIHkpIHBhZGRpbmcgLT4gKHksIGZsb2F0IC0+IGEpIHByZWNpc2lvbiAtPiBmbG9hdF9jb252IC0+IHggPVxuICBmdW4gayBhY2MgZm10IHBhZCBwcmVjIGZjb252IC0+IG1hdGNoIHBhZCwgcHJlYyB3aXRoXG4gIHwgTm9fcGFkZGluZywgTm9fcHJlY2lzaW9uIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBzdHIgPSBjb252ZXJ0X2Zsb2F0IGZjb252IChkZWZhdWx0X2Zsb2F0X3ByZWNpc2lvbiBmY29udikgeCBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IE5vX3BhZGRpbmcsIExpdF9wcmVjaXNpb24gcCAtPlxuICAgIGZ1biB4IC0+XG4gICAgICBsZXQgc3RyID0gY29udmVydF9mbG9hdCBmY29udiBwIHggaW5cbiAgICAgIG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBzdHIpKSBmbXRcbiAgfCBOb19wYWRkaW5nLCBBcmdfcHJlY2lzaW9uIC0+XG4gICAgZnVuIHAgeCAtPlxuICAgICAgbGV0IHN0ciA9IGNvbnZlcnRfZmxvYXQgZmNvbnYgcCB4IGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgTGl0X3BhZGRpbmcgKHBhZHR5LCB3KSwgTm9fcHJlY2lzaW9uIC0+XG4gICAgZnVuIHggLT5cbiAgICAgIGxldCBzdHIgPSBjb252ZXJ0X2Zsb2F0IGZjb252IChkZWZhdWx0X2Zsb2F0X3ByZWNpc2lvbiBmY29udikgeCBpblxuICAgICAgbGV0IHN0cicgPSBmaXhfcGFkZGluZyBwYWR0eSB3IHN0ciBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cicpKSBmbXRcbiAgfCBMaXRfcGFkZGluZyAocGFkdHksIHcpLCBMaXRfcHJlY2lzaW9uIHAgLT5cbiAgICBmdW4geCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKGNvbnZlcnRfZmxvYXQgZmNvbnYgcCB4KSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IExpdF9wYWRkaW5nIChwYWR0eSwgdyksIEFyZ19wcmVjaXNpb24gLT5cbiAgICBmdW4gcCB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X3BhZGRpbmcgcGFkdHkgdyAoY29udmVydF9mbG9hdCBmY29udiBwIHgpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG4gIHwgQXJnX3BhZGRpbmcgcGFkdHksIE5vX3ByZWNpc2lvbiAtPlxuICAgIGZ1biB3IHggLT5cbiAgICAgIGxldCBzdHIgPSBjb252ZXJ0X2Zsb2F0IGZjb252IChkZWZhdWx0X2Zsb2F0X3ByZWNpc2lvbiBmY29udikgeCBpblxuICAgICAgbGV0IHN0cicgPSBmaXhfcGFkZGluZyBwYWR0eSB3IHN0ciBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cicpKSBmbXRcbiAgfCBBcmdfcGFkZGluZyBwYWR0eSwgTGl0X3ByZWNpc2lvbiBwIC0+XG4gICAgZnVuIHcgeCAtPlxuICAgICAgbGV0IHN0ciA9IGZpeF9wYWRkaW5nIHBhZHR5IHcgKGNvbnZlcnRfZmxvYXQgZmNvbnYgcCB4KSBpblxuICAgICAgbWFrZV9wcmludGYgayAoQWNjX2RhdGFfc3RyaW5nIChhY2MsIHN0cikpIGZtdFxuICB8IEFyZ19wYWRkaW5nIHBhZHR5LCBBcmdfcHJlY2lzaW9uIC0+XG4gICAgZnVuIHcgcCB4IC0+XG4gICAgICBsZXQgc3RyID0gZml4X3BhZGRpbmcgcGFkdHkgdyAoY29udmVydF9mbG9hdCBmY29udiBwIHgpIGluXG4gICAgICBtYWtlX3ByaW50ZiBrIChBY2NfZGF0YV9zdHJpbmcgKGFjYywgc3RyKSkgZm10XG5hbmQgbWFrZV9jdXN0b20gOiB0eXBlIHggeSBhIGIgYyBkIGUgZiAuXG4gICgoYiwgYykgYWNjIC0+IGYpIC0+IChiLCBjKSBhY2MgLT5cbiAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPlxuICAoYSwgeCwgeSkgY3VzdG9tX2FyaXR5IC0+IHggLT4geSA9XG4gIGZ1biBrIGFjYyByZXN0IGFyaXR5IGYgLT4gbWF0Y2ggYXJpdHkgd2l0aFxuICB8IEN1c3RvbV96ZXJvIC0+IG1ha2VfcHJpbnRmIGsgKEFjY19kYXRhX3N0cmluZyAoYWNjLCBmKSkgcmVzdFxuICB8IEN1c3RvbV9zdWNjIGFyaXR5IC0+XG4gICAgZnVuIHggLT5cbiAgICAgIG1ha2VfY3VzdG9tIGsgYWNjIHJlc3QgYXJpdHkgKGYgeClcblxubGV0IGNvbnN0IHggXyA9IHhcblxubGV0IHJlYyBtYWtlX2lwcmludGYgOiB0eXBlIGEgYiBjIGQgZSBmIHN0YXRlLlxuICAoc3RhdGUgLT4gZikgLT4gc3RhdGUgLT4gKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPiBhID1cbiAgZnVuIGsgbyBmbXQgLT4gbWF0Y2ggZm10IHdpdGhcbiAgICB8IENoYXIgcmVzdCAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KVxuICAgIHwgQ2FtbF9jaGFyIHJlc3QgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdClcbiAgICB8IFN0cmluZyAoTm9fcGFkZGluZywgcmVzdCkgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdClcbiAgICB8IFN0cmluZyAoTGl0X3BhZGRpbmcgXywgcmVzdCkgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdClcbiAgICB8IFN0cmluZyAoQXJnX3BhZGRpbmcgXywgcmVzdCkgLT5cbiAgICAgICAgY29uc3QgKGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpKVxuICAgIHwgQ2FtbF9zdHJpbmcgKE5vX3BhZGRpbmcsIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBDYW1sX3N0cmluZyAoTGl0X3BhZGRpbmcgXywgcmVzdCkgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdClcbiAgICB8IENhbWxfc3RyaW5nIChBcmdfcGFkZGluZyBfLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAoY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdCkpXG4gICAgfCBJbnQgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICAgICAgZm5fb2ZfcGFkZGluZ19wcmVjaXNpb24gayBvIHJlc3QgcGFkIHByZWNcbiAgICB8IEludDMyIChfLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICAgIGZuX29mX3BhZGRpbmdfcHJlY2lzaW9uIGsgbyByZXN0IHBhZCBwcmVjXG4gICAgfCBOYXRpdmVpbnQgKF8sIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICAgICAgZm5fb2ZfcGFkZGluZ19wcmVjaXNpb24gayBvIHJlc3QgcGFkIHByZWNcbiAgICB8IEludDY0IChfLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgICAgIGZuX29mX3BhZGRpbmdfcHJlY2lzaW9uIGsgbyByZXN0IHBhZCBwcmVjXG4gICAgfCBGbG9hdCAoXywgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgICAgICBmbl9vZl9wYWRkaW5nX3ByZWNpc2lvbiBrIG8gcmVzdCBwYWQgcHJlY1xuICAgIHwgQm9vbCAoTm9fcGFkZGluZywgcmVzdCkgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdClcbiAgICB8IEJvb2wgKExpdF9wYWRkaW5nIF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBCb29sIChBcmdfcGFkZGluZyBfLCByZXN0KSAtPlxuICAgICAgICBjb25zdCAoY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdCkpXG4gICAgfCBBbHBoYSByZXN0IC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAobWFrZV9pcHJpbnRmIGsgbyByZXN0KSlcbiAgICB8IFRoZXRhIHJlc3QgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdClcbiAgICB8IEN1c3RvbSAoYXJpdHksIF8sIHJlc3QpIC0+XG4gICAgICAgIGZuX29mX2N1c3RvbV9hcml0eSBrIG8gcmVzdCBhcml0eVxuICAgIHwgUmVhZGVyIF8gLT5cbiAgICAgICAgKCogVGhpcyBjYXNlIGlzIGltcG9zc2libGUsIGJ5IHR5cGluZyBvZiBmb3JtYXRzLiAgU2VlIHRoZVxuICAgICAgICAgICBub3RlIGluIHRoZSBjb3JyZXNwb25kaW5nIGNhc2UgZm9yIG1ha2VfcHJpbnRmLiAqKVxuICAgICAgICBhc3NlcnQgZmFsc2VcbiAgICB8IEZsdXNoIHJlc3QgLT5cbiAgICAgICAgbWFrZV9pcHJpbnRmIGsgbyByZXN0XG4gICAgfCBTdHJpbmdfbGl0ZXJhbCAoXywgcmVzdCkgLT5cbiAgICAgICAgbWFrZV9pcHJpbnRmIGsgbyByZXN0XG4gICAgfCBDaGFyX2xpdGVyYWwgKF8sIHJlc3QpIC0+XG4gICAgICAgIG1ha2VfaXByaW50ZiBrIG8gcmVzdFxuICAgIHwgRm9ybWF0X2FyZyAoXywgXywgcmVzdCkgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdClcbiAgICB8IEZvcm1hdF9zdWJzdCAoXywgZm10dHksIHJlc3QpIC0+XG4gICAgICAgIGZ1biAoRm9ybWF0IChmbXQsIF8pKSAtPlxuICAgICAgICAgIG1ha2VfaXByaW50ZiBrIG9cbiAgICAgICAgICAgIChjb25jYXRfZm10IChyZWNhc3QgZm10IGZtdHR5KSByZXN0KVxuICAgIHwgU2Nhbl9jaGFyX3NldCAoXywgXywgcmVzdCkgLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gcmVzdClcbiAgICB8IFNjYW5fZ2V0X2NvdW50ZXIgKF8sIHJlc3QpIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBTY2FuX25leHRfY2hhciByZXN0IC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIHJlc3QpXG4gICAgfCBJZ25vcmVkX3BhcmFtIChpZ24sIHJlc3QpIC0+XG4gICAgICAgIG1ha2VfaWdub3JlZF9wYXJhbSAoZnVuIF8gLT4gayBvKSAoRW5kX29mX2FjYykgaWduIHJlc3RcbiAgICB8IEZvcm1hdHRpbmdfbGl0IChfLCByZXN0KSAtPlxuICAgICAgICBtYWtlX2lwcmludGYgayBvIHJlc3RcbiAgICB8IEZvcm1hdHRpbmdfZ2VuIChPcGVuX3RhZyAoRm9ybWF0IChmbXQnLCBfKSksIHJlc3QpIC0+XG4gICAgICAgIG1ha2VfaXByaW50ZiAoZnVuIGtvYyAtPiBtYWtlX2lwcmludGYgayBrb2MgcmVzdCkgbyBmbXQnXG4gICAgfCBGb3JtYXR0aW5nX2dlbiAoT3Blbl9ib3ggKEZvcm1hdCAoZm10JywgXykpLCByZXN0KSAtPlxuICAgICAgICBtYWtlX2lwcmludGYgKGZ1biBrb2MgLT4gbWFrZV9pcHJpbnRmIGsga29jIHJlc3QpIG8gZm10J1xuICAgIHwgRW5kX29mX2Zvcm1hdCAtPlxuICAgICAgICBrIG9cbmFuZCBmbl9vZl9wYWRkaW5nX3ByZWNpc2lvbiA6XG4gIHR5cGUgeCB5IHogYSBiIGMgZCBlIGYgc3RhdGUuXG4gIChzdGF0ZSAtPiBmKSAtPiBzdGF0ZSAtPiAoYSwgYiwgYywgZCwgZSwgZikgZm10IC0+XG4gICh4LCB5KSBwYWRkaW5nIC0+ICh5LCB6IC0+IGEpIHByZWNpc2lvbiAtPiB4ID1cbiAgZnVuIGsgbyBmbXQgcGFkIHByZWMgLT4gbWF0Y2ggcGFkLCBwcmVjIHdpdGhcbiAgICB8IE5vX3BhZGRpbmcgICAsIE5vX3ByZWNpc2lvbiAgICAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyBmbXQpXG4gICAgfCBOb19wYWRkaW5nICAgLCBMaXRfcHJlY2lzaW9uIF8gLT5cbiAgICAgICAgY29uc3QgKG1ha2VfaXByaW50ZiBrIG8gZm10KVxuICAgIHwgTm9fcGFkZGluZyAgICwgQXJnX3ByZWNpc2lvbiAgIC0+XG4gICAgICAgIGNvbnN0IChjb25zdCAobWFrZV9pcHJpbnRmIGsgbyBmbXQpKVxuICAgIHwgTGl0X3BhZGRpbmcgXywgTm9fcHJlY2lzaW9uICAgIC0+XG4gICAgICAgIGNvbnN0IChtYWtlX2lwcmludGYgayBvIGZtdClcbiAgICB8IExpdF9wYWRkaW5nIF8sIExpdF9wcmVjaXNpb24gXyAtPlxuICAgICAgICBjb25zdCAobWFrZV9pcHJpbnRmIGsgbyBmbXQpXG4gICAgfCBMaXRfcGFkZGluZyBfLCBBcmdfcHJlY2lzaW9uICAgLT5cbiAgICAgICAgY29uc3QgKGNvbnN0IChtYWtlX2lwcmludGYgayBvIGZtdCkpXG4gICAgfCBBcmdfcGFkZGluZyBfLCBOb19wcmVjaXNpb24gICAgLT5cbiAgICAgICAgY29uc3QgKGNvbnN0IChtYWtlX2lwcmludGYgayBvIGZtdCkpXG4gICAgfCBBcmdfcGFkZGluZyBfLCBMaXRfcHJlY2lzaW9uIF8gLT5cbiAgICAgICAgY29uc3QgKGNvbnN0IChtYWtlX2lwcmludGYgayBvIGZtdCkpXG4gICAgfCBBcmdfcGFkZGluZyBfLCBBcmdfcHJlY2lzaW9uICAgLT5cbiAgICAgICAgY29uc3QgKGNvbnN0IChjb25zdCAobWFrZV9pcHJpbnRmIGsgbyBmbXQpKSlcbmFuZCBmbl9vZl9jdXN0b21fYXJpdHkgOiB0eXBlIHggeSBhIGIgYyBkIGUgZiBzdGF0ZS5cbiAgKHN0YXRlIC0+IGYpIC0+XG4gIHN0YXRlIC0+IChhLCBiLCBjLCBkLCBlLCBmKSBmbXQgLT4gKGEsIHgsIHkpIGN1c3RvbV9hcml0eSAtPiB5ID1cbiAgZnVuIGsgbyBmbXQgLT4gZnVuY3Rpb25cbiAgICB8IEN1c3RvbV96ZXJvIC0+XG4gICAgICAgIG1ha2VfaXByaW50ZiBrIG8gZm10XG4gICAgfCBDdXN0b21fc3VjYyBhcml0eSAtPlxuICAgICAgICBjb25zdCAoZm5fb2ZfY3VzdG9tX2FyaXR5IGsgbyBmbXQgYXJpdHkpXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICgqIENvbnRpbnVhdGlvbnMgZm9yIG1ha2VfcHJpbnRmICopXG5cbigqIFJlY3Vyc2l2ZWx5IG91dHB1dCBhbiBcImFjY3VtdWxhdG9yXCIgY29udGFpbmluZyBhIHJldmVyc2VkIGxpc3Qgb2ZcbiAgIHByaW50aW5nIGVudGl0aWVzIChzdHJpbmcsIGNoYXIsIGZsdXMsIC4uLikgaW4gYW4gb3V0cHV0X3N0cmVhbS4gKilcbigqIFVzZWQgYXMgYSBjb250aW51YXRpb24gb2YgbWFrZV9wcmludGYuICopXG5sZXQgcmVjIG91dHB1dF9hY2MgbyBhY2MgPSBtYXRjaCBhY2Mgd2l0aFxuICB8IEFjY19mb3JtYXR0aW5nX2xpdCAocCwgZm10aW5nX2xpdCkgLT5cbiAgICBsZXQgcyA9IHN0cmluZ19vZl9mb3JtYXR0aW5nX2xpdCBmbXRpbmdfbGl0IGluXG4gICAgb3V0cHV0X2FjYyBvIHA7IG91dHB1dF9zdHJpbmcgbyBzO1xuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fdGFnIGFjYycpIC0+XG4gICAgb3V0cHV0X2FjYyBvIHA7IG91dHB1dF9zdHJpbmcgbyBcIkB7XCI7IG91dHB1dF9hY2MgbyBhY2MnO1xuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fYm94IGFjYycpIC0+XG4gICAgb3V0cHV0X2FjYyBvIHA7IG91dHB1dF9zdHJpbmcgbyBcIkBbXCI7IG91dHB1dF9hY2MgbyBhY2MnO1xuICB8IEFjY19zdHJpbmdfbGl0ZXJhbCAocCwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKHAsIHMpICAgLT4gb3V0cHV0X2FjYyBvIHA7IG91dHB1dF9zdHJpbmcgbyBzXG4gIHwgQWNjX2NoYXJfbGl0ZXJhbCAocCwgYylcbiAgfCBBY2NfZGF0YV9jaGFyIChwLCBjKSAgICAgLT4gb3V0cHV0X2FjYyBvIHA7IG91dHB1dF9jaGFyIG8gY1xuICB8IEFjY19kZWxheSAocCwgZikgICAgICAgICAtPiBvdXRwdXRfYWNjIG8gcDsgZiBvXG4gIHwgQWNjX2ZsdXNoIHAgICAgICAgICAgICAgIC0+IG91dHB1dF9hY2MgbyBwOyBmbHVzaCBvXG4gIHwgQWNjX2ludmFsaWRfYXJnIChwLCBtc2cpIC0+IG91dHB1dF9hY2MgbyBwOyBpbnZhbGlkX2FyZyBtc2c7XG4gIHwgRW5kX29mX2FjYyAgICAgICAgICAgICAgIC0+ICgpXG5cbigqIFJlY3Vyc2l2ZWx5IG91dHB1dCBhbiBcImFjY3VtdWxhdG9yXCIgY29udGFpbmluZyBhIHJldmVyc2VkIGxpc3Qgb2ZcbiAgIHByaW50aW5nIGVudGl0aWVzIChzdHJpbmcsIGNoYXIsIGZsdXMsIC4uLikgaW4gYSBidWZmZXIuICopXG4oKiBVc2VkIGFzIGEgY29udGludWF0aW9uIG9mIG1ha2VfcHJpbnRmLiAqKVxubGV0IHJlYyBidWZwdXRfYWNjIGIgYWNjID0gbWF0Y2ggYWNjIHdpdGhcbiAgfCBBY2NfZm9ybWF0dGluZ19saXQgKHAsIGZtdGluZ19saXQpIC0+XG4gICAgbGV0IHMgPSBzdHJpbmdfb2ZfZm9ybWF0dGluZ19saXQgZm10aW5nX2xpdCBpblxuICAgIGJ1ZnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX3N0cmluZyBiIHM7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfZ2VuIChwLCBBY2Nfb3Blbl90YWcgYWNjJykgLT5cbiAgICBidWZwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9zdHJpbmcgYiBcIkB7XCI7IGJ1ZnB1dF9hY2MgYiBhY2MnO1xuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fYm94IGFjYycpIC0+XG4gICAgYnVmcHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfc3RyaW5nIGIgXCJAW1wiOyBidWZwdXRfYWNjIGIgYWNjJztcbiAgfCBBY2Nfc3RyaW5nX2xpdGVyYWwgKHAsIHMpXG4gIHwgQWNjX2RhdGFfc3RyaW5nIChwLCBzKSAgIC0+IGJ1ZnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX3N0cmluZyBiIHNcbiAgfCBBY2NfY2hhcl9saXRlcmFsIChwLCBjKVxuICB8IEFjY19kYXRhX2NoYXIgKHAsIGMpICAgICAtPiBidWZwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9jaGFyIGIgY1xuICB8IEFjY19kZWxheSAocCwgZikgICAgICAgICAtPiBidWZwdXRfYWNjIGIgcDsgZiBiXG4gIHwgQWNjX2ZsdXNoIHAgICAgICAgICAgICAgIC0+IGJ1ZnB1dF9hY2MgYiBwO1xuICB8IEFjY19pbnZhbGlkX2FyZyAocCwgbXNnKSAtPiBidWZwdXRfYWNjIGIgcDsgaW52YWxpZF9hcmcgbXNnO1xuICB8IEVuZF9vZl9hY2MgICAgICAgICAgICAgICAtPiAoKVxuXG4oKiBSZWN1cnNpdmVseSBvdXRwdXQgYW4gXCJhY2N1bXVsYXRvclwiIGNvbnRhaW5pbmcgYSByZXZlcnNlZCBsaXN0IG9mXG4gICBwcmludGluZyBlbnRpdGllcyAoc3RyaW5nLCBjaGFyLCBmbHVzLCAuLi4pIGluIGEgYnVmZmVyLiAqKVxuKCogRGlmZmVyIGZyb20gYnVmcHV0X2FjYyBieSB0aGUgaW50ZXJwcmV0YXRpb24gb2YgJWEgYW5kICV0LiAqKVxuKCogVXNlZCBhcyBhIGNvbnRpbnVhdGlvbiBvZiBtYWtlX3ByaW50Zi4gKilcbmxldCByZWMgc3RycHV0X2FjYyBiIGFjYyA9IG1hdGNoIGFjYyB3aXRoXG4gIHwgQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBmbXRpbmdfbGl0KSAtPlxuICAgIGxldCBzID0gc3RyaW5nX29mX2Zvcm1hdHRpbmdfbGl0IGZtdGluZ19saXQgaW5cbiAgICBzdHJwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9zdHJpbmcgYiBzO1xuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fdGFnIGFjYycpIC0+XG4gICAgc3RycHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfc3RyaW5nIGIgXCJAe1wiOyBzdHJwdXRfYWNjIGIgYWNjJztcbiAgfCBBY2NfZm9ybWF0dGluZ19nZW4gKHAsIEFjY19vcGVuX2JveCBhY2MnKSAtPlxuICAgIHN0cnB1dF9hY2MgYiBwOyBCdWZmZXIuYWRkX3N0cmluZyBiIFwiQFtcIjsgc3RycHV0X2FjYyBiIGFjYyc7XG4gIHwgQWNjX3N0cmluZ19saXRlcmFsIChwLCBzKVxuICB8IEFjY19kYXRhX3N0cmluZyAocCwgcykgICAtPiBzdHJwdXRfYWNjIGIgcDsgQnVmZmVyLmFkZF9zdHJpbmcgYiBzXG4gIHwgQWNjX2NoYXJfbGl0ZXJhbCAocCwgYylcbiAgfCBBY2NfZGF0YV9jaGFyIChwLCBjKSAgICAgLT4gc3RycHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfY2hhciBiIGNcbiAgfCBBY2NfZGVsYXkgKHAsIGYpICAgICAgICAgLT4gc3RycHV0X2FjYyBiIHA7IEJ1ZmZlci5hZGRfc3RyaW5nIGIgKGYgKCkpXG4gIHwgQWNjX2ZsdXNoIHAgICAgICAgICAgICAgIC0+IHN0cnB1dF9hY2MgYiBwO1xuICB8IEFjY19pbnZhbGlkX2FyZyAocCwgbXNnKSAtPiBzdHJwdXRfYWNjIGIgcDsgaW52YWxpZF9hcmcgbXNnO1xuICB8IEVuZF9vZl9hY2MgICAgICAgICAgICAgICAtPiAoKVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBFcnJvciBtYW5hZ2VtZW50ICopXG5cbigqIFJhaXNlIFtGYWlsdXJlXSB3aXRoIGEgcHJldHR5LXByaW50ZWQgZXJyb3IgbWVzc2FnZS4gKilcbmxldCBmYWlsd2l0aF9tZXNzYWdlIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgMjU2IGluXG4gIGxldCBrIGFjYyA9IHN0cnB1dF9hY2MgYnVmIGFjYzsgZmFpbHdpdGggKEJ1ZmZlci5jb250ZW50cyBidWYpIGluXG4gIG1ha2VfcHJpbnRmIGsgRW5kX29mX2FjYyBmbXRcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBGb3JtYXR0aW5nIHRvb2xzICopXG5cbigqIENvbnZlcnQgYSBzdHJpbmcgdG8gYW4gb3BlbiBibG9jayBkZXNjcmlwdGlvbiAoaW5kZW50LCBibG9ja190eXBlKSAqKVxubGV0IG9wZW5fYm94X29mX3N0cmluZyBzdHIgPVxuICBpZiBzdHIgPSBcIlwiIHRoZW4gKDAsIFBwX2JveCkgZWxzZVxuICAgIGxldCBsZW4gPSBTdHJpbmcubGVuZ3RoIHN0ciBpblxuICAgIGxldCBpbnZhbGlkX2JveCAoKSA9IGZhaWx3aXRoX21lc3NhZ2UgXCJpbnZhbGlkIGJveCBkZXNjcmlwdGlvbiAlU1wiIHN0ciBpblxuICAgIGxldCByZWMgcGFyc2Vfc3BhY2VzIGkgPVxuICAgICAgaWYgaSA9IGxlbiB0aGVuIGkgZWxzZVxuICAgICAgICBtYXRjaCBzdHIuW2ldIHdpdGhcbiAgICAgICAgfCAnICcgfCAnXFx0JyAtPiBwYXJzZV9zcGFjZXMgKGkgKyAxKVxuICAgICAgICB8IF8gLT4gaVxuICAgIGFuZCBwYXJzZV9sd29yZCBpIGogPVxuICAgICAgaWYgaiA9IGxlbiB0aGVuIGogZWxzZVxuICAgICAgICBtYXRjaCBzdHIuW2pdIHdpdGhcbiAgICAgICAgfCAnYScgLi4gJ3onIC0+IHBhcnNlX2x3b3JkIGkgKGogKyAxKVxuICAgICAgICB8IF8gLT4galxuICAgIGFuZCBwYXJzZV9pbnQgaSBqID1cbiAgICAgIGlmIGogPSBsZW4gdGhlbiBqIGVsc2VcbiAgICAgICAgbWF0Y2ggc3RyLltqXSB3aXRoXG4gICAgICAgIHwgJzAnIC4uICc5JyB8ICctJyAtPiBwYXJzZV9pbnQgaSAoaiArIDEpXG4gICAgICAgIHwgXyAtPiBqIGluXG4gICAgbGV0IHdzdGFydCA9IHBhcnNlX3NwYWNlcyAwIGluXG4gICAgbGV0IHdlbmQgPSBwYXJzZV9sd29yZCB3c3RhcnQgd3N0YXJ0IGluXG4gICAgbGV0IGJveF9uYW1lID0gU3RyaW5nLnN1YiBzdHIgd3N0YXJ0ICh3ZW5kIC0gd3N0YXJ0KSBpblxuICAgIGxldCBuc3RhcnQgPSBwYXJzZV9zcGFjZXMgd2VuZCBpblxuICAgIGxldCBuZW5kID0gcGFyc2VfaW50IG5zdGFydCBuc3RhcnQgaW5cbiAgICBsZXQgaW5kZW50ID1cbiAgICAgIGlmIG5zdGFydCA9IG5lbmQgdGhlbiAwIGVsc2VcbiAgICAgICAgdHJ5IGludF9vZl9zdHJpbmcgKFN0cmluZy5zdWIgc3RyIG5zdGFydCAobmVuZCAtIG5zdGFydCkpXG4gICAgICAgIHdpdGggRmFpbHVyZSBfIC0+IGludmFsaWRfYm94ICgpIGluXG4gICAgbGV0IGV4cF9lbmQgPSBwYXJzZV9zcGFjZXMgbmVuZCBpblxuICAgIGlmIGV4cF9lbmQgPD4gbGVuIHRoZW4gaW52YWxpZF9ib3ggKCk7XG4gICAgbGV0IGJveF90eXBlID0gbWF0Y2ggYm94X25hbWUgd2l0aFxuICAgICAgfCBcIlwiIHwgXCJiXCIgLT4gUHBfYm94XG4gICAgICB8IFwiaFwiICAgICAgLT4gUHBfaGJveFxuICAgICAgfCBcInZcIiAgICAgIC0+IFBwX3Zib3hcbiAgICAgIHwgXCJodlwiICAgICAtPiBQcF9odmJveFxuICAgICAgfCBcImhvdlwiICAgIC0+IFBwX2hvdmJveFxuICAgICAgfCBfICAgICAgICAtPiBpbnZhbGlkX2JveCAoKSBpblxuICAgIChpbmRlbnQsIGJveF90eXBlKVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIFBhcnNpbmcgdG9vbHMgKilcblxuKCogQ3JlYXRlIGEgcGFkZGluZ19mbXRfZWJiIGZyb20gYSBwYWRkaW5nIGFuZCBhIGZvcm1hdC4gKilcbigqIENvcHkgdGhlIHBhZGRpbmcgdG8gZGlzam9pbiB0aGUgdHlwZSBwYXJhbWV0ZXJzIG9mIGFyZ3VtZW50IGFuZCByZXN1bHQuICopXG5sZXQgbWFrZV9wYWRkaW5nX2ZtdF9lYmIgOiB0eXBlIHggeSAuXG4gICAgKHgsIHkpIHBhZGRpbmcgLT4gKF8sIF8sIF8sIF8sIF8sIF8pIGZtdCAtPlxuICAgICAgKF8sIF8sIF8sIF8sIF8pIHBhZGRpbmdfZm10X2ViYiA9XG5mdW4gcGFkIGZtdCAtPiBtYXRjaCBwYWQgd2l0aFxuICB8IE5vX3BhZGRpbmcgICAgICAgICAtPiBQYWRkaW5nX2ZtdF9FQkIgKE5vX3BhZGRpbmcsIGZtdClcbiAgfCBMaXRfcGFkZGluZyAocywgdykgLT4gUGFkZGluZ19mbXRfRUJCIChMaXRfcGFkZGluZyAocywgdyksIGZtdClcbiAgfCBBcmdfcGFkZGluZyBzICAgICAgLT4gUGFkZGluZ19mbXRfRUJCIChBcmdfcGFkZGluZyBzLCBmbXQpXG5cbigqIENyZWF0ZSBhIHByZWNpc2lvbl9mbXRfZWJiIGZyb20gYSBwcmVjaXNpb24gYW5kIGEgZm9ybWF0LiAqKVxuKCogQ29weSB0aGUgcHJlY2lzaW9uIHRvIGRpc2pvaW4gdGhlIHR5cGUgcGFyYW1ldGVycyBvZiBhcmd1bWVudCBhbmQgcmVzdWx0LiAqKVxubGV0IG1ha2VfcHJlY2lzaW9uX2ZtdF9lYmIgOiB0eXBlIHggeSAuXG4gICAgKHgsIHkpIHByZWNpc2lvbiAtPiAoXywgXywgXywgXywgXywgXykgZm10IC0+XG4gICAgICAoXywgXywgXywgXywgXykgcHJlY2lzaW9uX2ZtdF9lYmIgPVxuZnVuIHByZWMgZm10IC0+IG1hdGNoIHByZWMgd2l0aFxuICB8IE5vX3ByZWNpc2lvbiAgICAtPiBQcmVjaXNpb25fZm10X0VCQiAoTm9fcHJlY2lzaW9uLCBmbXQpXG4gIHwgTGl0X3ByZWNpc2lvbiBwIC0+IFByZWNpc2lvbl9mbXRfRUJCIChMaXRfcHJlY2lzaW9uIHAsIGZtdClcbiAgfCBBcmdfcHJlY2lzaW9uICAgLT4gUHJlY2lzaW9uX2ZtdF9FQkIgKEFyZ19wcmVjaXNpb24sIGZtdClcblxuKCogQ3JlYXRlIGEgcGFkcHJlY19mbXRfZWJiIGZyb20gYSBwYWRkaW5nLCBhIHByZWNpc2lvbiBhbmQgYSBmb3JtYXQuICopXG4oKiBDb3B5IHRoZSBwYWRkaW5nIGFuZCB0aGUgcHJlY2lzaW9uIHRvIGRpc2pvaW4gdHlwZSBwYXJhbWV0ZXJzIG9mIGFyZ3VtZW50c1xuICAgYW5kIHJlc3VsdC4gKilcbmxldCBtYWtlX3BhZHByZWNfZm10X2ViYiA6IHR5cGUgeCB5IHogdCAuXG4gICAgKHgsIHkpIHBhZGRpbmcgLT4gKHosIHQpIHByZWNpc2lvbiAtPlxuICAgIChfLCBfLCBfLCBfLCBfLCBfKSBmbXQgLT5cbiAgICAoXywgXywgXywgXywgXykgcGFkcHJlY19mbXRfZWJiID1cbmZ1biBwYWQgcHJlYyBmbXQgLT5cbiAgbGV0IFByZWNpc2lvbl9mbXRfRUJCIChwcmVjLCBmbXQnKSA9IG1ha2VfcHJlY2lzaW9uX2ZtdF9lYmIgcHJlYyBmbXQgaW5cbiAgbWF0Y2ggcGFkIHdpdGhcbiAgfCBOb19wYWRkaW5nICAgICAgICAgLT4gUGFkcHJlY19mbXRfRUJCIChOb19wYWRkaW5nLCBwcmVjLCBmbXQnKVxuICB8IExpdF9wYWRkaW5nIChzLCB3KSAtPiBQYWRwcmVjX2ZtdF9FQkIgKExpdF9wYWRkaW5nIChzLCB3KSwgcHJlYywgZm10JylcbiAgfCBBcmdfcGFkZGluZyBzICAgICAgLT4gUGFkcHJlY19mbXRfRUJCIChBcmdfcGFkZGluZyBzLCBwcmVjLCBmbXQnKVxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBGb3JtYXQgcGFyc2luZyAqKVxuXG4oKiBQYXJzZSBhIHN0cmluZyByZXByZXNlbnRpbmcgYSBmb3JtYXQgYW5kIGNyZWF0ZSBhIGZtdF9lYmIuICopXG4oKiBSYWlzZSBbRmFpbHVyZV0gaW4gY2FzZSBvZiBpbnZhbGlkIGZvcm1hdC4gKilcbmxldCBmbXRfZWJiX29mX3N0cmluZyA/bGVnYWN5X2JlaGF2aW9yIHN0ciA9XG4gICgqIFBhcmFtZXRlcnMgbmFtaW5nIGNvbnZlbnRpb246ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbiAgKCogICAtIGxpdF9zdGFydDogc3RhcnQgb2YgdGhlIGxpdGVyYWwgc2VxdWVuY2UuICAgICAgICAgICAgICAgICAgICAqKVxuICAoKiAgIC0gc3RyX2luZDogY3VycmVudCBpbmRleCBpbiB0aGUgc3RyaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICopXG4gICgqICAgLSBlbmRfaW5kOiBlbmQgb2YgdGhlIGN1cnJlbnQgKHN1Yi0pZm9ybWF0LiAgICAgICAgICAgICAgICAgICAgKilcbiAgKCogICAtIHBjdF9pbmQ6IGluZGV4IG9mIHRoZSAnJScgaW4gdGhlIGN1cnJlbnQgbWljcm8tZm9ybWF0LiAgICAgICAqKVxuICAoKiAgIC0gemVybzogIGlzIHRoZSAnMCcgZmxhZyBkZWZpbmVkIGluIHRoZSBjdXJyZW50IG1pY3JvLWZvcm1hdC4gICopXG4gICgqICAgLSBtaW51czogaXMgdGhlICctJyBmbGFnIGRlZmluZWQgaW4gdGhlIGN1cnJlbnQgbWljcm8tZm9ybWF0LiAgKilcbiAgKCogICAtIHBsdXM6ICBpcyB0aGUgJysnIGZsYWcgZGVmaW5lZCBpbiB0aGUgY3VycmVudCBtaWNyby1mb3JtYXQuICAqKVxuICAoKiAgIC0gaGFzaDogIGlzIHRoZSAnIycgZmxhZyBkZWZpbmVkIGluIHRoZSBjdXJyZW50IG1pY3JvLWZvcm1hdC4gICopXG4gICgqICAgLSBzcGFjZTogaXMgdGhlICcgJyBmbGFnIGRlZmluZWQgaW4gdGhlIGN1cnJlbnQgbWljcm8tZm9ybWF0LiAgKilcbiAgKCogICAtIGlnbjogICBpcyB0aGUgJ18nIGZsYWcgZGVmaW5lZCBpbiB0aGUgY3VycmVudCBtaWNyby1mb3JtYXQuICAqKVxuICAoKiAgIC0gcGFkOiBwYWRkaW5nIG9mIHRoZSBjdXJyZW50IG1pY3JvLWZvcm1hdC4gICAgICAgICAgICAgICAgICAgICopXG4gICgqICAgLSBwcmVjOiBwcmVjaXNpb24gb2YgdGhlIGN1cnJlbnQgbWljcm8tZm9ybWF0LiAgICAgICAgICAgICAgICAgKilcbiAgKCogICAtIHN5bWI6IGNoYXIgcmVwcmVzZW50aW5nIHRoZSBjb252ZXJzaW9uICgnYycsICdzJywgJ2QnLCAuLi4pLiAqKVxuICAoKiAgIC0gY2hhcl9zZXQ6IHNldCBvZiBjaGFyYWN0ZXJzIGFzIGJpdG1hcCAoc2VlIHNjYW5mICVbLi4uXSkuICAgICopXG5cbiAgbGV0IGxlZ2FjeV9iZWhhdmlvciA9IG1hdGNoIGxlZ2FjeV9iZWhhdmlvciB3aXRoXG4gICAgfCBTb21lIGZsYWcgLT4gZmxhZ1xuICAgIHwgTm9uZSAtPiB0cnVlXG4gICgqICBXaGVuIHRoaXMgZmxhZyBpcyBlbmFibGVkLCB0aGUgZm9ybWF0IHBhcnNlciB0cmllcyB0byBiZWhhdmUgYXNcbiAgICAgIHRoZSA8NC4wMiBpbXBsZW1lbnRhdGlvbnMsIGluIHBhcnRpY3VsYXIgaXQgaWdub3JlcyBtb3N0IGJlbmluZVxuICAgICAgbm9uc2Vuc2ljYWwgZm9ybWF0LiBXaGVuIHRoZSBmbGFnIGlzIGRpc2FibGVkLCBpdCB3aWxsIHJlamVjdCBhbnlcbiAgICAgIGZvcm1hdCB0aGF0IGlzIG5vdCBhY2NlcHRlZCBieSB0aGUgc3BlY2lmaWNhdGlvbi5cblxuICAgICAgQSB0eXBpY2FsIGV4YW1wbGUgd291bGQgYmUgXCIlKyBkXCI6IHNwZWNpZnlpbmcgYm90aCAnKycgKGlmIHRoZVxuICAgICAgbnVtYmVyIGlzIHBvc2l0aXZlLCBwYWQgd2l0aCBhICcrJyB0byBnZXQgdGhlIHNhbWUgd2lkdGggYXNcbiAgICAgIG5lZ2F0aXZlIG51bWJlcnMpIGFuZCAnICcgKGlmIHRoZSBudW1iZXIgaXMgcG9zaXRpdmUsIHBhZCB3aXRoXG4gICAgICBhIHNwYWNlKSBkb2VzIG5vdCBtYWtlIHNlbnNlLCBidXQgdGhlIGxlZ2FjeSAoPCA0LjAyKVxuICAgICAgaW1wbGVtZW50YXRpb24gd2FzIGhhcHB5IHRvIGp1c3QgaWdub3JlIHRoZSBzcGFjZS5cbiAgKilcbiAgaW5cblxuICAoKiBSYWlzZSBbRmFpbHVyZV0gd2l0aCBhIGZyaWVuZGx5IGVycm9yIG1lc3NhZ2UuICopXG4gIGxldCBpbnZhbGlkX2Zvcm1hdF9tZXNzYWdlIHN0cl9pbmQgbXNnID1cbiAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICBcImludmFsaWQgZm9ybWF0ICVTOiBhdCBjaGFyYWN0ZXIgbnVtYmVyICVkLCAlc1wiXG4gICAgICBzdHIgc3RyX2luZCBtc2dcbiAgaW5cblxuICAoKiBVc2VkIHdoZW4gdGhlIGVuZCBvZiB0aGUgZm9ybWF0IChvciB0aGUgY3VycmVudCBzdWItZm9ybWF0KSB3YXMgZW5jb3VudGVyZWRcbiAgICAgIHVuZXhwZWN0ZWRseS4gKilcbiAgbGV0IHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kID1cbiAgICBpbnZhbGlkX2Zvcm1hdF9tZXNzYWdlIGVuZF9pbmRcbiAgICAgIFwidW5leHBlY3RlZCBlbmQgb2YgZm9ybWF0XCJcbiAgaW5cblxuICAoKiBVc2VkIGZvciAlMGM6IG5vIG90aGVyIHdpZHRocyBhcmUgaW1wbGVtZW50ZWQgKilcbiAgbGV0IGludmFsaWRfbm9ubnVsbF9jaGFyX3dpZHRoIHN0cl9pbmQgPVxuICAgIGludmFsaWRfZm9ybWF0X21lc3NhZ2Ugc3RyX2luZFxuICAgICAgXCJub24temVybyB3aWR0aHMgYXJlIHVuc3VwcG9ydGVkIGZvciAlYyBjb252ZXJzaW9uc1wiXG4gIGluXG4gICgqIFJhaXNlIFtGYWlsdXJlXSB3aXRoIGEgZnJpZW5kbHkgZXJyb3IgbWVzc2FnZSBhYm91dCBhbiBvcHRpb24gZGVwZW5kZW5jeVxuICAgICBwcm9ibGVtLiAqKVxuICBsZXQgaW52YWxpZF9mb3JtYXRfd2l0aG91dCBzdHJfaW5kIGMgcyA9XG4gICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogYXQgY2hhcmFjdGVyIG51bWJlciAlZCwgJyVjJyB3aXRob3V0ICVzXCJcbiAgICAgIHN0ciBzdHJfaW5kIGMgc1xuICBpblxuXG4gICgqIFJhaXNlIFtGYWlsdXJlXSB3aXRoIGEgZnJpZW5kbHkgZXJyb3IgbWVzc2FnZSBhYm91dCBhbiB1bmV4cGVjdGVkXG4gICAgIGNoYXJhY3Rlci4gKilcbiAgbGV0IGV4cGVjdGVkX2NoYXJhY3RlciBzdHJfaW5kIGV4cGVjdGVkIHJlYWQgPVxuICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogYXQgY2hhcmFjdGVyIG51bWJlciAlZCwgJXMgZXhwZWN0ZWQsIHJlYWQgJUNcIlxuICAgICAgc3RyIHN0cl9pbmQgZXhwZWN0ZWQgcmVhZFxuICBpblxuXG4gICgqIFBhcnNlIHRoZSBzdHJpbmcgZnJvbSBiZWdfaW5kIChpbmNsdWRlZCkgdG8gZW5kX2luZCAoZXhjbHVkZWQpLiAqKVxuICBsZXQgcmVjIHBhcnNlIDogdHlwZSBlIGYgLiBpbnQgLT4gaW50IC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIGJlZ19pbmQgZW5kX2luZCAtPiBwYXJzZV9saXRlcmFsIGJlZ19pbmQgYmVnX2luZCBlbmRfaW5kXG5cbiAgKCogUmVhZCBsaXRlcmFsIGNoYXJhY3RlcnMgdXAgdG8gJyUnIG9yICdAJyBzcGVjaWFsIGNoYXJhY3RlcnMuICopXG4gIGFuZCBwYXJzZV9saXRlcmFsIDogdHlwZSBlIGYgLiBpbnQgLT4gaW50IC0+IGludCAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBsaXRfc3RhcnQgc3RyX2luZCBlbmRfaW5kIC0+XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiBhZGRfbGl0ZXJhbCBsaXRfc3RhcnQgc3RyX2luZCBFbmRfb2ZfZm9ybWF0IGVsc2VcbiAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgICAgfCAnJScgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZV9mb3JtYXQgc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICAgIGFkZF9saXRlcmFsIGxpdF9zdGFydCBzdHJfaW5kIGZtdF9yZXN0XG4gICAgICB8ICdAJyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlX2FmdGVyX2F0IChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBhZGRfbGl0ZXJhbCBsaXRfc3RhcnQgc3RyX2luZCBmbXRfcmVzdFxuICAgICAgfCBfIC0+XG4gICAgICAgIHBhcnNlX2xpdGVyYWwgbGl0X3N0YXJ0IChzdHJfaW5kICsgMSkgZW5kX2luZFxuXG4gICgqIFBhcnNlIGEgZm9ybWF0IGFmdGVyICclJyAqKVxuICBhbmQgcGFyc2VfZm9ybWF0IDogdHlwZSBlIGYgLiBpbnQgLT4gaW50IC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHBjdF9pbmQgZW5kX2luZCAtPiBwYXJzZV9pZ24gcGN0X2luZCAocGN0X2luZCArIDEpIGVuZF9pbmRcblxuICBhbmQgcGFyc2VfaWduIDogdHlwZSBlIGYgLiBpbnQgLT4gaW50IC0+IGludCAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCAtPlxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgICB8ICdfJyAtPiBwYXJzZV9mbGFncyBwY3RfaW5kIChzdHJfaW5kKzEpIGVuZF9pbmQgdHJ1ZVxuICAgICAgfCBfIC0+IHBhcnNlX2ZsYWdzIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIGZhbHNlXG5cbiAgYW5kIHBhcnNlX2ZsYWdzIDogdHlwZSBlIGYgLiBpbnQgLT4gaW50IC0+IGludCAtPiBib29sIC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiXG4gID1cbiAgZnVuIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIGlnbiAtPlxuICAgIGxldCB6ZXJvID0gcmVmIGZhbHNlIGFuZCBtaW51cyA9IHJlZiBmYWxzZVxuICAgIGFuZCBwbHVzID0gcmVmIGZhbHNlIGFuZCBzcGFjZSA9IHJlZiBmYWxzZVxuICAgIGFuZCBoYXNoID0gcmVmIGZhbHNlIGluXG4gICAgbGV0IHNldF9mbGFnIHN0cl9pbmQgZmxhZyA9XG4gICAgICAoKiBpbiBsZWdhY3kgbW9kZSwgZHVwbGljYXRlIGZsYWdzIGFyZSBhY2NlcHRlZCAqKVxuICAgICAgaWYgIWZsYWcgJiYgbm90IGxlZ2FjeV9iZWhhdmlvciB0aGVuXG4gICAgICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgICAgICBcImludmFsaWQgZm9ybWF0ICVTOiBhdCBjaGFyYWN0ZXIgbnVtYmVyICVkLCBkdXBsaWNhdGUgZmxhZyAlQ1wiXG4gICAgICAgICAgc3RyIHN0cl9pbmQgc3RyLltzdHJfaW5kXTtcbiAgICAgIGZsYWcgOj0gdHJ1ZTtcbiAgICBpblxuICAgIGxldCByZWMgcmVhZF9mbGFncyBzdHJfaW5kID1cbiAgICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgICBiZWdpbiBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICAgIHwgJzAnIC0+IHNldF9mbGFnIHN0cl9pbmQgemVybzsgIHJlYWRfZmxhZ3MgKHN0cl9pbmQgKyAxKVxuICAgICAgfCAnLScgLT4gc2V0X2ZsYWcgc3RyX2luZCBtaW51czsgcmVhZF9mbGFncyAoc3RyX2luZCArIDEpXG4gICAgICB8ICcrJyAtPiBzZXRfZmxhZyBzdHJfaW5kIHBsdXM7ICByZWFkX2ZsYWdzIChzdHJfaW5kICsgMSlcbiAgICAgIHwgJyMnIC0+IHNldF9mbGFnIHN0cl9pbmQgaGFzaDsgcmVhZF9mbGFncyAoc3RyX2luZCArIDEpXG4gICAgICB8ICcgJyAtPiBzZXRfZmxhZyBzdHJfaW5kIHNwYWNlOyByZWFkX2ZsYWdzIChzdHJfaW5kICsgMSlcbiAgICAgIHwgXyAtPlxuICAgICAgICBwYXJzZV9wYWRkaW5nIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kXG4gICAgICAgICAgIXplcm8gIW1pbnVzICFwbHVzICFoYXNoICFzcGFjZSBpZ25cbiAgICAgIGVuZFxuICAgIGluXG4gICAgcmVhZF9mbGFncyBzdHJfaW5kXG5cbiAgKCogVHJ5IHRvIHJlYWQgYSBkaWdpdGFsIG9yIGEgJyonIHBhZGRpbmcuICopXG4gIGFuZCBwYXJzZV9wYWRkaW5nIDogdHlwZSBlIGYgLlxuICAgICAgaW50IC0+IGludCAtPiBpbnQgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT5cbiAgICAgICAgKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgemVybyBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduIC0+XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICBsZXQgcGFkdHkgPSBtYXRjaCB6ZXJvLCBtaW51cyB3aXRoXG4gICAgICB8IGZhbHNlLCBmYWxzZSAtPiBSaWdodFxuICAgICAgfCBmYWxzZSwgdHJ1ZSAgLT4gTGVmdFxuICAgICAgfCAgdHJ1ZSwgZmFsc2UgLT4gWmVyb3NcbiAgICAgIHwgIHRydWUsIHRydWUgIC0+XG4gICAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuIExlZnRcbiAgICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgJy0nIFwiMFwiIGluXG4gICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgfCAnMCcgLi4gJzknIC0+XG4gICAgICBsZXQgbmV3X2luZCwgd2lkdGggPSBwYXJzZV9wb3NpdGl2ZSBzdHJfaW5kIGVuZF9pbmQgMCBpblxuICAgICAgcGFyc2VfYWZ0ZXJfcGFkZGluZyBwY3RfaW5kIG5ld19pbmQgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduXG4gICAgICAgIChMaXRfcGFkZGluZyAocGFkdHksIHdpZHRoKSlcbiAgICB8ICcqJyAtPlxuICAgICAgcGFyc2VfYWZ0ZXJfcGFkZGluZyBwY3RfaW5kIChzdHJfaW5kICsgMSkgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2VcbiAgICAgICAgaWduIChBcmdfcGFkZGluZyBwYWR0eSlcbiAgICB8IF8gLT5cbiAgICAgIGJlZ2luIG1hdGNoIHBhZHR5IHdpdGhcbiAgICAgIHwgTGVmdCAgLT5cbiAgICAgICAgaWYgbm90IGxlZ2FjeV9iZWhhdmlvciB0aGVuXG4gICAgICAgICAgaW52YWxpZF9mb3JtYXRfd2l0aG91dCAoc3RyX2luZCAtIDEpICctJyBcInBhZGRpbmdcIjtcbiAgICAgICAgcGFyc2VfYWZ0ZXJfcGFkZGluZyBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduXG4gICAgICAgICAgTm9fcGFkZGluZ1xuICAgICAgfCBaZXJvcyAtPlxuICAgICAgICAgKCogYSAnMCcgcGFkZGluZyBpbmRpY2F0aW9uIG5vdCBmb2xsb3dlZCBieSBhbnl0aGluZyBzaG91bGRcbiAgICAgICAgICAgYmUgaW50ZXJwcmV0ZWQgYXMgYSBSaWdodCBwYWRkaW5nIG9mIHdpZHRoIDAuIFRoaXMgaXMgdXNlZFxuICAgICAgICAgICBieSBzY2FubmluZyBjb252ZXJzaW9ucyAlMHMgYW5kICUwYyAqKVxuICAgICAgICBwYXJzZV9hZnRlcl9wYWRkaW5nIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ25cbiAgICAgICAgICAoTGl0X3BhZGRpbmcgKFJpZ2h0LCAwKSlcbiAgICAgIHwgUmlnaHQgLT5cbiAgICAgICAgcGFyc2VfYWZ0ZXJfcGFkZGluZyBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBtaW51cyBwbHVzIGhhc2ggc3BhY2UgaWduXG4gICAgICAgICAgTm9fcGFkZGluZ1xuICAgICAgZW5kXG5cbiAgKCogSXMgcHJlY2lzaW9uIGRlZmluZWQ/ICopXG4gIGFuZCBwYXJzZV9hZnRlcl9wYWRkaW5nIDogdHlwZSB4IGUgZiAuXG4gICAgICBpbnQgLT4gaW50IC0+IGludCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT5cbiAgICAgICAgKHgsIF8pIHBhZGRpbmcgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnbiBwYWQgLT5cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgIHwgJy4nIC0+XG4gICAgICBwYXJzZV9wcmVjaXNpb24gcGN0X2luZCAoc3RyX2luZCArIDEpIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnblxuICAgICAgICBwYWRcbiAgICB8IHN5bWIgLT5cbiAgICAgIHBhcnNlX2NvbnZlcnNpb24gcGN0X2luZCAoc3RyX2luZCArIDEpIGVuZF9pbmQgcGx1cyBoYXNoIHNwYWNlIGlnbiBwYWRcbiAgICAgICAgTm9fcHJlY2lzaW9uIHBhZCBzeW1iXG5cbiAgKCogUmVhZCB0aGUgZGlnaXRhbCBvciAnKicgcHJlY2lzaW9uLiAqKVxuICBhbmQgcGFyc2VfcHJlY2lzaW9uIDogdHlwZSB4IGUgZiAuXG4gICAgICBpbnQgLT4gaW50IC0+IGludCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT5cbiAgICAgICAgKHgsIF8pIHBhZGRpbmcgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gcGN0X2luZCBzdHJfaW5kIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlIGlnbiBwYWQgLT5cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgIGxldCBwYXJzZV9saXRlcmFsIG1pbnVzIHN0cl9pbmQgPVxuICAgICAgbGV0IG5ld19pbmQsIHByZWMgPSBwYXJzZV9wb3NpdGl2ZSBzdHJfaW5kIGVuZF9pbmQgMCBpblxuICAgICAgcGFyc2VfYWZ0ZXJfcHJlY2lzaW9uIHBjdF9pbmQgbmV3X2luZCBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ25cbiAgICAgICAgcGFkIChMaXRfcHJlY2lzaW9uIHByZWMpIGluXG4gICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgfCAnMCcgLi4gJzknIC0+IHBhcnNlX2xpdGVyYWwgbWludXMgc3RyX2luZFxuICAgIHwgKCcrJyB8ICctJykgYXMgc3ltYiB3aGVuIGxlZ2FjeV9iZWhhdmlvciAtPlxuICAgICAgKCogTGVnYWN5IG1vZGUgd291bGQgYWNjZXB0IGFuZCBpZ25vcmUgJysnIG9yICctJyBiZWZvcmUgdGhlXG4gICAgICAgICBpbnRlZ2VyIGRlc2NyaWJpbmcgdGhlIGRlc2lyZWQgcHJlY2lzaW9uOyBub3RlIHRoYXQgdGhpc1xuICAgICAgICAgY2Fubm90IGhhcHBlbiBmb3IgcGFkZGluZyB3aWR0aCwgYXMgJysnIGFuZCAnLScgYWxyZWFkeSBoYXZlXG4gICAgICAgICBhIHNlbWFudGljcyB0aGVyZS5cblxuICAgICAgICAgVGhhdCBzYWlkLCB0aGUgaWRlYSAoc3VwcG9ydGVkIGJ5IHRoaXMgdHdlYWspIHRoYXQgd2lkdGggYW5kXG4gICAgICAgICBwcmVjaXNpb24gbGl0ZXJhbHMgYXJlIFwiaW50ZWdlciBsaXRlcmFsc1wiIGluIHRoZSBPQ2FtbCBzZW5zZSBpc1xuICAgICAgICAgc3RpbGwgYmxhdGFudGx5IHdyb25nLCBhcyAxMjNfNDU2IG9yIDB4RkYgYXJlIHJlamVjdGVkLiAqKVxuICAgICAgcGFyc2VfbGl0ZXJhbCAobWludXMgfHwgc3ltYiA9ICctJykgKHN0cl9pbmQgKyAxKVxuICAgIHwgJyonIC0+XG4gICAgICBwYXJzZV9hZnRlcl9wcmVjaXNpb24gcGN0X2luZCAoc3RyX2luZCArIDEpIGVuZF9pbmQgbWludXMgcGx1cyBoYXNoIHNwYWNlXG4gICAgICAgIGlnbiBwYWQgQXJnX3ByZWNpc2lvblxuICAgIHwgXyAtPlxuICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW5cbiAgICAgICAgKCogbm90ZSB0aGF0IGxlZ2FjeSBpbXBsZW1lbnRhdGlvbiBkaWQgbm90IGlnbm9yZSAnLicgd2l0aG91dFxuICAgICAgICAgICBhIG51bWJlciAoYXMgaXQgZG9lcyBmb3IgcGFkZGluZyBpbmRpY2F0aW9ucyksIGJ1dFxuICAgICAgICAgICBpbnRlcnByZXRzIGl0IGFzICcuMCcgKilcbiAgICAgICAgcGFyc2VfYWZ0ZXJfcHJlY2lzaW9uIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ25cbiAgICAgICAgICBwYWQgKExpdF9wcmVjaXNpb24gMClcbiAgICAgIGVsc2VcbiAgICAgICAgaW52YWxpZF9mb3JtYXRfd2l0aG91dCAoc3RyX2luZCAtIDEpICcuJyBcInByZWNpc2lvblwiXG5cbiAgKCogVHJ5IHRvIHJlYWQgdGhlIGNvbnZlcnNpb24uICopXG4gIGFuZCBwYXJzZV9hZnRlcl9wcmVjaXNpb24gOiB0eXBlIHggeSB6IHQgZSBmIC5cbiAgICAgIGludCAtPiBpbnQgLT4gaW50IC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPlxuICAgICAgICAoeCwgeSkgcGFkZGluZyAtPiAoeiwgdCkgcHJlY2lzaW9uIC0+IChfLCBfLCBlLCBmKSBmbXRfZWJiID1cbiAgZnVuIHBjdF9pbmQgc3RyX2luZCBlbmRfaW5kIG1pbnVzIHBsdXMgaGFzaCBzcGFjZSBpZ24gcGFkIHByZWMgLT5cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgIGxldCBwYXJzZV9jb252ICh0eXBlIHUpICh0eXBlIHYpIChwYWRwcmVjIDogKHUsIHYpIHBhZGRpbmcpID1cbiAgICAgIHBhcnNlX2NvbnZlcnNpb24gcGN0X2luZCAoc3RyX2luZCArIDEpIGVuZF9pbmQgcGx1cyBoYXNoIHNwYWNlIGlnbiBwYWRcbiAgICAgICAgcHJlYyBwYWRwcmVjIHN0ci5bc3RyX2luZF0gaW5cbiAgICAoKiBpbiBsZWdhY3kgbW9kZSwgc29tZSBmb3JtYXRzICglcyBhbmQgJVMpIGFjY2VwdCBhIHdlaXJkIG1peCBvZlxuICAgICAgIHBhZGRpbmcgYW5kIHByZWNpc2lvbiwgd2hpY2ggaXMgbWVyZ2VkIGFzIGEgc2luZ2xlIHBhZGRpbmdcbiAgICAgICBpbmZvcm1hdGlvbi4gRm9yIGV4YW1wbGUsIGluICUuMTBzIHRoZSBwcmVjaXNpb24gaXMgaW1wbGljaXRseVxuICAgICAgIHVuZGVyc3Rvb2QgYXMgcGFkZGluZyAlMTBzLCBidXQgdGhlIGxlZnQtcGFkZGluZyBjb21wb25lbnQgbWF5XG4gICAgICAgYmUgc3BlY2lmaWVkIGVpdGhlciBhcyBhIGxlZnQgcGFkZGluZyBvciBhIG5lZ2F0aXZlIHByZWNpc2lvbjpcbiAgICAgICAlLS4zcyBhbmQgJS4tM3MgYXJlIGVxdWl2YWxlbnQgdG8gJS0zcyAqKVxuICAgIG1hdGNoIHBhZCB3aXRoXG4gICAgfCBOb19wYWRkaW5nIC0+IChcbiAgICAgIG1hdGNoIG1pbnVzLCBwcmVjIHdpdGhcbiAgICAgICAgfCBfLCBOb19wcmVjaXNpb24gLT4gcGFyc2VfY29udiBOb19wYWRkaW5nXG4gICAgICAgIHwgZmFsc2UsIExpdF9wcmVjaXNpb24gbiAtPiBwYXJzZV9jb252IChMaXRfcGFkZGluZyAoUmlnaHQsIG4pKVxuICAgICAgICB8IHRydWUsIExpdF9wcmVjaXNpb24gbiAtPiBwYXJzZV9jb252IChMaXRfcGFkZGluZyAoTGVmdCwgbikpXG4gICAgICAgIHwgZmFsc2UsIEFyZ19wcmVjaXNpb24gLT4gcGFyc2VfY29udiAoQXJnX3BhZGRpbmcgUmlnaHQpXG4gICAgICAgIHwgdHJ1ZSwgQXJnX3ByZWNpc2lvbiAtPiBwYXJzZV9jb252IChBcmdfcGFkZGluZyBMZWZ0KVxuICAgIClcbiAgICB8IHBhZCAtPiBwYXJzZV9jb252IHBhZFxuXG4gICgqIENhc2UgYW5hbHlzaXMgb24gY29udmVyc2lvbi4gKilcbiAgYW5kIHBhcnNlX2NvbnZlcnNpb24gOiB0eXBlIHggeSB6IHQgdSB2IGUgZiAuXG4gICAgICBpbnQgLT4gaW50IC0+IGludCAtPiBib29sIC0+IGJvb2wgLT4gYm9vbCAtPiBib29sIC0+ICh4LCB5KSBwYWRkaW5nIC0+XG4gICAgICAgICh6LCB0KSBwcmVjaXNpb24gLT4gKHUsIHYpIHBhZGRpbmcgLT4gY2hhciAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBwY3RfaW5kIHN0cl9pbmQgZW5kX2luZCBwbHVzIGhhc2ggc3BhY2UgaWduIHBhZCBwcmVjIHBhZHByZWMgc3ltYiAtPlxuICAgICgqIEZsYWdzIHVzZWQgdG8gY2hlY2sgb3B0aW9uIHVzYWdlcy9jb21wYXRpYmlsaXRpZXMuICopXG4gICAgbGV0IHBsdXNfdXNlZCAgPSByZWYgZmFsc2UgYW5kIGhhc2hfdXNlZCA9IHJlZiBmYWxzZVxuICAgIGFuZCBzcGFjZV91c2VkID0gcmVmIGZhbHNlIGFuZCBpZ25fdXNlZCAgID0gcmVmIGZhbHNlXG4gICAgYW5kIHBhZF91c2VkICAgPSByZWYgZmFsc2UgYW5kIHByZWNfdXNlZCAgPSByZWYgZmFsc2UgaW5cblxuICAgICgqIEFjY2VzcyB0byBvcHRpb25zLCB1cGRhdGUgZmxhZ3MuICopXG4gICAgbGV0IGdldF9wbHVzICAgICgpID0gcGx1c191c2VkICA6PSB0cnVlOyBwbHVzXG4gICAgYW5kIGdldF9oYXNoICAgKCkgPSBoYXNoX3VzZWQgOj0gdHJ1ZTsgaGFzaFxuICAgIGFuZCBnZXRfc3BhY2UgICAoKSA9IHNwYWNlX3VzZWQgOj0gdHJ1ZTsgc3BhY2VcbiAgICBhbmQgZ2V0X2lnbiAgICAgKCkgPSBpZ25fdXNlZCAgIDo9IHRydWU7IGlnblxuICAgIGFuZCBnZXRfcGFkICAgICAoKSA9IHBhZF91c2VkICAgOj0gdHJ1ZTsgcGFkXG4gICAgYW5kIGdldF9wcmVjICAgICgpID0gcHJlY191c2VkICA6PSB0cnVlOyBwcmVjXG4gICAgYW5kIGdldF9wYWRwcmVjICgpID0gcGFkX3VzZWQgICA6PSB0cnVlOyBwYWRwcmVjIGluXG5cbiAgICBsZXQgZ2V0X2ludF9wYWQgKCkgOiAoeCx5KSBwYWRkaW5nID1cbiAgICAgICgqICU1LjNkIGlzIGFjY2VwdGVkIGFuZCBtZWFuaW5nZnVsOiBwYWQgdG8gbGVuZ3RoIDUgd2l0aFxuICAgICAgICAgc3BhY2VzLCBidXQgZmlyc3QgcGFkIHdpdGggemVyb3MgdXB0byBsZW5ndGggMyAoMC1wYWRkaW5nXG4gICAgICAgICBpcyB0aGUgaW50ZXJwcmV0YXRpb24gb2YgXCJwcmVjaXNpb25cIiBmb3IgaW50ZWdlciBmb3JtYXRzKS5cblxuICAgICAgICAgJTA1LjNkIGlzIHJlZHVuZGFudDogcGFkIHRvIGxlbmd0aCA1ICp3aXRoIHplcm9zKiwgYnV0XG4gICAgICAgICBmaXJzdCBwYWQgd2l0aCB6ZXJvcy4uLiBUbyBhZGQgaW5zdWx0IHRvIHRoZSBpbmp1cnksIHRoZVxuICAgICAgICAgbGVnYWN5IGltcGxlbWVudGF0aW9uIGlnbm9yZXMgdGhlIDAtcGFkZGluZyBpbmRpY2F0aW9uIGFuZFxuICAgICAgICAgZG9lcyB0aGUgNSBwYWRkaW5nIHdpdGggc3BhY2VzIGluc3RlYWQuIFdlIHJldXNlIHRoaXNcbiAgICAgICAgIGludGVycHJldGF0aW9uIGZvciBjb21wYXRpYmlsaXR5LCBidXQgc3RhdGljYWxseSByZWplY3QgdGhpc1xuICAgICAgICAgZm9ybWF0IHdoZW4gdGhlIGxlZ2FjeSBtb2RlIGlzIGRpc2FibGVkLCB0byBwcm90ZWN0IHN0cmljdFxuICAgICAgICAgdXNlcnMgZnJvbSB0aGlzIGNvcm5lciBjYXNlLiAqKVxuICAgICAgIG1hdGNoIGdldF9wYWQgKCksIGdldF9wcmVjICgpIHdpdGhcbiAgICAgICAgIHwgcGFkLCBOb19wcmVjaXNpb24gLT4gcGFkXG4gICAgICAgICB8IE5vX3BhZGRpbmcsIF8gICAgIC0+IE5vX3BhZGRpbmdcbiAgICAgICAgIHwgTGl0X3BhZGRpbmcgKFplcm9zLCBuKSwgXyAtPlxuICAgICAgICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiBMaXRfcGFkZGluZyAoUmlnaHQsIG4pXG4gICAgICAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kICcwJyBcInByZWNpc2lvblwiXG4gICAgICAgICB8IEFyZ19wYWRkaW5nIFplcm9zLCBfIC0+XG4gICAgICAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuIEFyZ19wYWRkaW5nIFJpZ2h0XG4gICAgICAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kICcwJyBcInByZWNpc2lvblwiXG4gICAgICAgICB8IExpdF9wYWRkaW5nIF8gYXMgcGFkLCBfIC0+IHBhZFxuICAgICAgICAgfCBBcmdfcGFkZGluZyBfIGFzIHBhZCwgXyAtPiBwYWQgaW5cblxuICAgICgqIENoZWNrIHRoYXQgcGFkdHkgPD4gWmVyb3MuICopXG4gICAgbGV0IGNoZWNrX25vXzAgc3ltYiAodHlwZSBhIGIpIChwYWQgOiAoYSwgYikgcGFkZGluZykgOiAoYSxiKSBwYWRkaW5nID1cbiAgICAgIG1hdGNoIHBhZCB3aXRoXG4gICAgICB8IE5vX3BhZGRpbmcgLT4gcGFkXG4gICAgICB8IExpdF9wYWRkaW5nICgoTGVmdCB8IFJpZ2h0KSwgXykgLT4gcGFkXG4gICAgICB8IEFyZ19wYWRkaW5nIChMZWZ0IHwgUmlnaHQpIC0+IHBhZFxuICAgICAgfCBMaXRfcGFkZGluZyAoWmVyb3MsIHdpZHRoKSAtPlxuICAgICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiBMaXRfcGFkZGluZyAoUmlnaHQsIHdpZHRoKVxuICAgICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiMFwiXG4gICAgICB8IEFyZ19wYWRkaW5nIFplcm9zIC0+XG4gICAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuIEFyZ19wYWRkaW5nIFJpZ2h0XG4gICAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIHN5bWIgXCIwXCJcbiAgICBpblxuXG4gICAgKCogR2V0IHBhZGRpbmcgYXMgYSBwYWRfb3B0aW9uIChzZWUgXCIlX1wiLCBcIiV7XCIsIFwiJShcIiBhbmQgXCIlW1wiKS5cbiAgICAgICAobm8gbmVlZCBmb3IgbGVnYWN5IG1vZGUgdHdlYWtpbmcsIHRob3NlIHdlcmUgcmVqZWN0ZWQgYnkgdGhlXG4gICAgICAgbGVnYWN5IHBhcnNlciBhcyB3ZWxsKSAqKVxuICAgIGxldCBvcHRfb2ZfcGFkIGMgKHR5cGUgYSkgKHR5cGUgYikgKHBhZCA6IChhLCBiKSBwYWRkaW5nKSA9IG1hdGNoIHBhZCB3aXRoXG4gICAgICB8IE5vX3BhZGRpbmcgLT4gTm9uZVxuICAgICAgfCBMaXRfcGFkZGluZyAoUmlnaHQsIHdpZHRoKSAtPiBTb21lIHdpZHRoXG4gICAgICB8IExpdF9wYWRkaW5nIChaZXJvcywgd2lkdGgpIC0+XG4gICAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuIFNvbWUgd2lkdGhcbiAgICAgICAgZWxzZSBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgYyBcIicwJ1wiXG4gICAgICB8IExpdF9wYWRkaW5nIChMZWZ0LCB3aWR0aCkgLT5cbiAgICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gU29tZSB3aWR0aFxuICAgICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBjIFwiJy0nXCJcbiAgICAgIHwgQXJnX3BhZGRpbmcgXyAtPiBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgYyBcIicqJ1wiXG4gICAgaW5cbiAgICBsZXQgZ2V0X3BhZF9vcHQgYyA9IG9wdF9vZl9wYWQgYyAoZ2V0X3BhZCAoKSkgaW5cbiAgICBsZXQgZ2V0X3BhZHByZWNfb3B0IGMgPSBvcHRfb2ZfcGFkIGMgKGdldF9wYWRwcmVjICgpKSBpblxuXG4gICAgKCogR2V0IHByZWNpc2lvbiBhcyBhIHByZWNfb3B0aW9uIChzZWUgXCIlX2ZcIikuXG4gICAgICAgKG5vIG5lZWQgZm9yIGxlZ2FjeSBtb2RlIHR3ZWFraW5nLCB0aG9zZSB3ZXJlIHJlamVjdGVkIGJ5IHRoZVxuICAgICAgIGxlZ2FjeSBwYXJzZXIgYXMgd2VsbCkgKilcbiAgICBsZXQgZ2V0X3ByZWNfb3B0ICgpID0gbWF0Y2ggZ2V0X3ByZWMgKCkgd2l0aFxuICAgICAgfCBOb19wcmVjaXNpb24gICAgICAgLT4gTm9uZVxuICAgICAgfCBMaXRfcHJlY2lzaW9uIG5kZWMgLT4gU29tZSBuZGVjXG4gICAgICB8IEFyZ19wcmVjaXNpb24gICAgICAtPiBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgJ18nIFwiJyonXCJcbiAgICBpblxuXG4gICAgbGV0IGZtdF9yZXN1bHQgPSBtYXRjaCBzeW1iIHdpdGhcbiAgICB8ICcsJyAtPlxuICAgICAgcGFyc2Ugc3RyX2luZCBlbmRfaW5kXG4gICAgfCAnYycgLT5cbiAgICAgIGxldCBjaGFyX2Zvcm1hdCBmbXRfcmVzdCA9ICgqICVjICopXG4gICAgICAgIGlmIGdldF9pZ24gKClcbiAgICAgICAgdGhlbiBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChJZ25vcmVkX2NoYXIsIGZtdF9yZXN0KSlcbiAgICAgICAgZWxzZSBGbXRfRUJCIChDaGFyIGZtdF9yZXN0KVxuICAgICAgaW5cbiAgICAgIGxldCBzY2FuX2Zvcm1hdCBmbXRfcmVzdCA9ICgqICUwYyAqKVxuICAgICAgICBpZiBnZXRfaWduICgpXG4gICAgICAgIHRoZW4gRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoSWdub3JlZF9zY2FuX25leHRfY2hhciwgZm10X3Jlc3QpKVxuICAgICAgICBlbHNlIEZtdF9FQkIgKFNjYW5fbmV4dF9jaGFyIGZtdF9yZXN0KVxuICAgICAgaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBiZWdpbiBtYXRjaCBnZXRfcGFkX29wdCAnYycgd2l0aFxuICAgICAgICB8IE5vbmUgLT4gY2hhcl9mb3JtYXQgZm10X3Jlc3RcbiAgICAgICAgfCBTb21lIDAgLT4gc2Nhbl9mb3JtYXQgZm10X3Jlc3RcbiAgICAgICAgfCBTb21lIF9uIC0+XG4gICAgICAgICAgIGlmIG5vdCBsZWdhY3lfYmVoYXZpb3JcbiAgICAgICAgICAgdGhlbiBpbnZhbGlkX25vbm51bGxfY2hhcl93aWR0aCBzdHJfaW5kXG4gICAgICAgICAgIGVsc2UgKCogbGVnYWN5IGlnbm9yZXMgJWMgd2lkdGhzICopIGNoYXJfZm9ybWF0IGZtdF9yZXN0XG4gICAgICBlbmRcbiAgICB8ICdDJyAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlbiBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChJZ25vcmVkX2NhbWxfY2hhcixmbXRfcmVzdCkpXG4gICAgICBlbHNlIEZtdF9FQkIgKENhbWxfY2hhciBmbXRfcmVzdClcbiAgICB8ICdzJyAtPlxuICAgICAgbGV0IHBhZCA9IGNoZWNrX25vXzAgc3ltYiAoZ2V0X3BhZHByZWMgKCkpIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9zdHJpbmcgKGdldF9wYWRwcmVjX29wdCAnXycpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IFBhZGRpbmdfZm10X0VCQiAocGFkJywgZm10X3Jlc3QnKSA9XG4gICAgICAgICAgbWFrZV9wYWRkaW5nX2ZtdF9lYmIgcGFkIGZtdF9yZXN0IGluXG4gICAgICAgIEZtdF9FQkIgKFN0cmluZyAocGFkJywgZm10X3Jlc3QnKSlcbiAgICB8ICdTJyAtPlxuICAgICAgbGV0IHBhZCA9IGNoZWNrX25vXzAgc3ltYiAoZ2V0X3BhZHByZWMgKCkpIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9jYW1sX3N0cmluZyAoZ2V0X3BhZHByZWNfb3B0ICdfJykgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgUGFkZGluZ19mbXRfRUJCIChwYWQnLCBmbXRfcmVzdCcpID1cbiAgICAgICAgICBtYWtlX3BhZGRpbmdfZm10X2ViYiBwYWQgZm10X3Jlc3QgaW5cbiAgICAgICAgRm10X0VCQiAoQ2FtbF9zdHJpbmcgKHBhZCcsIGZtdF9yZXN0JykpXG4gICAgfCAnZCcgfCAnaScgfCAneCcgfCAnWCcgfCAnbycgfCAndScgLT5cbiAgICAgIGxldCBpY29udiA9IGNvbXB1dGVfaW50X2NvbnYgcGN0X2luZCBzdHJfaW5kIChnZXRfcGx1cyAoKSkgKGdldF9oYXNoICgpKVxuICAgICAgICAoZ2V0X3NwYWNlICgpKSBzeW1iIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9pbnQgKGljb252LCBnZXRfcGFkX29wdCAnXycpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IFBhZHByZWNfZm10X0VCQiAocGFkJywgcHJlYycsIGZtdF9yZXN0JykgPVxuICAgICAgICAgIG1ha2VfcGFkcHJlY19mbXRfZWJiIChnZXRfaW50X3BhZCAoKSkgKGdldF9wcmVjICgpKSBmbXRfcmVzdCBpblxuICAgICAgICBGbXRfRUJCIChJbnQgKGljb252LCBwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSlcbiAgICB8ICdOJyAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGxldCBjb3VudGVyID0gVG9rZW5fY291bnRlciBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9zY2FuX2dldF9jb3VudGVyIGNvdW50ZXIgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBGbXRfRUJCIChTY2FuX2dldF9jb3VudGVyIChjb3VudGVyLCBmbXRfcmVzdCkpXG4gICAgfCAnbCcgfCAnbicgfCAnTCcgd2hlbiBzdHJfaW5kPWVuZF9pbmQgfHwgbm90IChpc19pbnRfYmFzZSBzdHIuW3N0cl9pbmRdKSAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGxldCBjb3VudGVyID0gY291bnRlcl9vZl9jaGFyIHN5bWIgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfc2Nhbl9nZXRfY291bnRlciBjb3VudGVyIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgRm10X0VCQiAoU2Nhbl9nZXRfY291bnRlciAoY291bnRlciwgZm10X3Jlc3QpKVxuICAgIHwgJ2wnIC0+XG4gICAgICBsZXQgaWNvbnYgPVxuICAgICAgICBjb21wdXRlX2ludF9jb252IHBjdF9pbmQgKHN0cl9pbmQgKyAxKSAoZ2V0X3BsdXMgKCkpIChnZXRfaGFzaCAoKSlcbiAgICAgICAgICAoZ2V0X3NwYWNlICgpKSBzdHIuW3N0cl9pbmRdIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9pbnQzMiAoaWNvbnYsIGdldF9wYWRfb3B0ICdfJykgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgUGFkcHJlY19mbXRfRUJCIChwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSA9XG4gICAgICAgICAgbWFrZV9wYWRwcmVjX2ZtdF9lYmIgKGdldF9pbnRfcGFkICgpKSAoZ2V0X3ByZWMgKCkpIGZtdF9yZXN0IGluXG4gICAgICAgIEZtdF9FQkIgKEludDMyIChpY29udiwgcGFkJywgcHJlYycsIGZtdF9yZXN0JykpXG4gICAgfCAnbicgLT5cbiAgICAgIGxldCBpY29udiA9XG4gICAgICAgIGNvbXB1dGVfaW50X2NvbnYgcGN0X2luZCAoc3RyX2luZCArIDEpIChnZXRfcGx1cyAoKSlcbiAgICAgICAgICAoZ2V0X2hhc2ggKCkpIChnZXRfc3BhY2UgKCkpIHN0ci5bc3RyX2luZF0gaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX25hdGl2ZWludCAoaWNvbnYsIGdldF9wYWRfb3B0ICdfJykgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgUGFkcHJlY19mbXRfRUJCIChwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSA9XG4gICAgICAgICAgbWFrZV9wYWRwcmVjX2ZtdF9lYmIgKGdldF9pbnRfcGFkICgpKSAoZ2V0X3ByZWMgKCkpIGZtdF9yZXN0IGluXG4gICAgICAgIEZtdF9FQkIgKE5hdGl2ZWludCAoaWNvbnYsIHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpKVxuICAgIHwgJ0wnIC0+XG4gICAgICBsZXQgaWNvbnYgPVxuICAgICAgICBjb21wdXRlX2ludF9jb252IHBjdF9pbmQgKHN0cl9pbmQgKyAxKSAoZ2V0X3BsdXMgKCkpIChnZXRfaGFzaCAoKSlcbiAgICAgICAgICAoZ2V0X3NwYWNlICgpKSBzdHIuW3N0cl9pbmRdIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuXG4gICAgICAgIGxldCBpZ25vcmVkID0gSWdub3JlZF9pbnQ2NCAoaWNvbnYsIGdldF9wYWRfb3B0ICdfJykgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBsZXQgUGFkcHJlY19mbXRfRUJCIChwYWQnLCBwcmVjJywgZm10X3Jlc3QnKSA9XG4gICAgICAgICAgbWFrZV9wYWRwcmVjX2ZtdF9lYmIgKGdldF9pbnRfcGFkICgpKSAoZ2V0X3ByZWMgKCkpIGZtdF9yZXN0IGluXG4gICAgICAgIEZtdF9FQkIgKEludDY0IChpY29udiwgcGFkJywgcHJlYycsIGZtdF9yZXN0JykpXG4gICAgfCAnZicgfCAnZScgfCAnRScgfCAnZycgfCAnRycgfCAnRicgfCAnaCcgfCAnSCcgLT5cbiAgICAgIGxldCBmY29udiA9XG4gICAgICAgIGNvbXB1dGVfZmxvYXRfY29udiBwY3RfaW5kIHN0cl9pbmRcbiAgICAgICAgICAoZ2V0X3BsdXMgKCkpIChnZXRfaGFzaCAoKSkgKGdldF9zcGFjZSAoKSkgc3ltYiBpblxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfZmxvYXQgKGdldF9wYWRfb3B0ICdfJywgZ2V0X3ByZWNfb3B0ICgpKSBpblxuICAgICAgICBGbXRfRUJCIChJZ25vcmVkX3BhcmFtIChpZ25vcmVkLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlXG4gICAgICAgIGxldCBQYWRwcmVjX2ZtdF9FQkIgKHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpID1cbiAgICAgICAgICBtYWtlX3BhZHByZWNfZm10X2ViYiAoZ2V0X3BhZCAoKSkgKGdldF9wcmVjICgpKSBmbXRfcmVzdCBpblxuICAgICAgICBGbXRfRUJCIChGbG9hdCAoZmNvbnYsIHBhZCcsIHByZWMnLCBmbXRfcmVzdCcpKVxuICAgIHwgJ2InIHwgJ0InIC0+XG4gICAgICBsZXQgcGFkID0gY2hlY2tfbm9fMCBzeW1iIChnZXRfcGFkcHJlYyAoKSkgaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX2Jvb2wgKGdldF9wYWRwcmVjX29wdCAnXycpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IFBhZGRpbmdfZm10X0VCQiAocGFkJywgZm10X3Jlc3QnKSA9XG4gICAgICAgICAgbWFrZV9wYWRkaW5nX2ZtdF9lYmIgcGFkIGZtdF9yZXN0IGluXG4gICAgICAgIEZtdF9FQkIgKEJvb2wgKHBhZCcsIGZtdF9yZXN0JykpXG4gICAgfCAnYScgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBGbXRfRUJCIChBbHBoYSBmbXRfcmVzdClcbiAgICB8ICd0JyAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIEZtdF9FQkIgKFRoZXRhIGZtdF9yZXN0KVxuICAgIHwgJ3InIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIHN0cl9pbmQgZW5kX2luZCBpblxuICAgICAgaWYgZ2V0X2lnbiAoKSB0aGVuIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKElnbm9yZWRfcmVhZGVyLCBmbXRfcmVzdCkpXG4gICAgICBlbHNlIEZtdF9FQkIgKFJlYWRlciBmbXRfcmVzdClcbiAgICB8ICchJyAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIEZtdF9FQkIgKEZsdXNoIGZtdF9yZXN0KVxuICAgIHwgKCclJyB8ICdAJykgYXMgYyAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIEZtdF9FQkIgKENoYXJfbGl0ZXJhbCAoYywgZm10X3Jlc3QpKVxuICAgIHwgJ3snIC0+XG4gICAgICBsZXQgc3ViX2VuZCA9IHNlYXJjaF9zdWJmb3JtYXRfZW5kIHN0cl9pbmQgZW5kX2luZCAnfScgaW5cbiAgICAgIGxldCBGbXRfRUJCIHN1Yl9mbXQgPSBwYXJzZSBzdHJfaW5kIHN1Yl9lbmQgaW5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN1Yl9lbmQgKyAyKSBlbmRfaW5kIGluXG4gICAgICBsZXQgc3ViX2ZtdHR5ID0gZm10dHlfb2ZfZm10IHN1Yl9mbXQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfZm9ybWF0X2FyZyAoZ2V0X3BhZF9vcHQgJ18nLCBzdWJfZm10dHkpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgRm10X0VCQiAoRm9ybWF0X2FyZyAoZ2V0X3BhZF9vcHQgJ3snLCBzdWJfZm10dHksIGZtdF9yZXN0KSlcbiAgICB8ICcoJyAtPlxuICAgICAgbGV0IHN1Yl9lbmQgPSBzZWFyY2hfc3ViZm9ybWF0X2VuZCBzdHJfaW5kIGVuZF9pbmQgJyknIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdWJfZW5kICsgMikgZW5kX2luZCBpblxuICAgICAgbGV0IEZtdF9FQkIgc3ViX2ZtdCA9IHBhcnNlIHN0cl9pbmQgc3ViX2VuZCBpblxuICAgICAgbGV0IHN1Yl9mbXR0eSA9IGZtdHR5X29mX2ZtdCBzdWJfZm10IGluXG4gICAgICBpZiBnZXRfaWduICgpIHRoZW5cbiAgICAgICAgbGV0IGlnbm9yZWQgPSBJZ25vcmVkX2Zvcm1hdF9zdWJzdCAoZ2V0X3BhZF9vcHQgJ18nLCBzdWJfZm10dHkpIGluXG4gICAgICAgIEZtdF9FQkIgKElnbm9yZWRfcGFyYW0gKGlnbm9yZWQsIGZtdF9yZXN0KSlcbiAgICAgIGVsc2VcbiAgICAgICAgRm10X0VCQiAoRm9ybWF0X3N1YnN0IChnZXRfcGFkX29wdCAnKCcsIHN1Yl9mbXR0eSwgZm10X3Jlc3QpKVxuICAgIHwgJ1snIC0+XG4gICAgICBsZXQgbmV4dF9pbmQsIGNoYXJfc2V0ID0gcGFyc2VfY2hhcl9zZXQgc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIG5leHRfaW5kIGVuZF9pbmQgaW5cbiAgICAgIGlmIGdldF9pZ24gKCkgdGhlblxuICAgICAgICBsZXQgaWdub3JlZCA9IElnbm9yZWRfc2Nhbl9jaGFyX3NldCAoZ2V0X3BhZF9vcHQgJ18nLCBjaGFyX3NldCkgaW5cbiAgICAgICAgRm10X0VCQiAoSWdub3JlZF9wYXJhbSAoaWdub3JlZCwgZm10X3Jlc3QpKVxuICAgICAgZWxzZVxuICAgICAgICBGbXRfRUJCIChTY2FuX2NoYXJfc2V0IChnZXRfcGFkX29wdCAnWycsIGNoYXJfc2V0LCBmbXRfcmVzdCkpXG4gICAgfCAnLScgfCAnKycgfCAnIycgfCAnICcgfCAnXycgLT5cbiAgICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogYXQgY2hhcmFjdGVyIG51bWJlciAlZCwgXFxcbiAgICAgICAgIGZsYWcgJUMgaXMgb25seSBhbGxvd2VkIGFmdGVyIHRoZSAnJSUnLCBiZWZvcmUgcGFkZGluZyBhbmQgcHJlY2lzaW9uXCJcbiAgICAgICAgc3RyIHBjdF9pbmQgc3ltYlxuICAgIHwgXyAtPlxuICAgICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgICBcImludmFsaWQgZm9ybWF0ICVTOiBhdCBjaGFyYWN0ZXIgbnVtYmVyICVkLCBcXFxuICAgICAgICAgaW52YWxpZCBjb252ZXJzaW9uIFxcXCIlJSVjXFxcIlwiIHN0ciAoc3RyX2luZCAtIDEpIHN5bWJcbiAgICBpblxuICAgICgqIENoZWNrIGZvciB1bnVzZWQgb3B0aW9ucywgYW5kIHJlamVjdCB0aGVtIGFzIGluY29tcGF0aWJsZS5cblxuICAgICAgIFN1Y2ggY2hlY2tzIG5lZWQgdG8gYmUgZGlzYWJsZWQgaW4gbGVnYWN5IG1vZGUsIGFzIHRoZSBsZWdhY3lcbiAgICAgICBwYXJzZXIgc2lsZW50bHkgaWdub3JlZCBpbmNvbXBhdGlibGUgZmxhZ3MuICopXG4gICAgaWYgbm90IGxlZ2FjeV9iZWhhdmlvciB0aGVuIGJlZ2luXG4gICAgaWYgbm90ICFwbHVzX3VzZWQgJiYgcGx1cyB0aGVuXG4gICAgICBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcIicrJ1wiO1xuICAgIGlmIG5vdCAhaGFzaF91c2VkICYmIGhhc2ggdGhlblxuICAgICAgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIHN5bWIgXCInIydcIjtcbiAgICBpZiBub3QgIXNwYWNlX3VzZWQgJiYgc3BhY2UgdGhlblxuICAgICAgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIHN5bWIgXCInICdcIjtcbiAgICBpZiBub3QgIXBhZF91c2VkICAmJiBQYWRkaW5nX0VCQiBwYWQgPD4gUGFkZGluZ19FQkIgTm9fcGFkZGluZyB0aGVuXG4gICAgICBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgc3ltYiBcImBwYWRkaW5nJ1wiO1xuICAgIGlmIG5vdCAhcHJlY191c2VkICYmIFByZWNpc2lvbl9FQkIgcHJlYyA8PiBQcmVjaXNpb25fRUJCIE5vX3ByZWNpc2lvbiB0aGVuXG4gICAgICBpbmNvbXBhdGlibGVfZmxhZyBwY3RfaW5kIHN0cl9pbmQgKGlmIGlnbiB0aGVuICdfJyBlbHNlIHN5bWIpXG4gICAgICAgIFwiYHByZWNpc2lvbidcIjtcbiAgICBpZiBpZ24gJiYgcGx1cyB0aGVuIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCAnXycgXCInKydcIjtcbiAgICBlbmQ7XG4gICAgKCogdGhpcyBsYXN0IHRlc3QgbXVzdCBub3QgYmUgZGlzYWJsZWQgaW4gbGVnYWN5IG1vZGUsXG4gICAgICAgYXMgaWdub3JpbmcgaXQgd291bGQgdHlwaWNhbGx5IHJlc3VsdCBpbiBhIGRpZmZlcmVudCB0eXBpbmdcbiAgICAgICB0aGFuIHdoYXQgdGhlIGxlZ2FjeSBwYXJzZXIgdXNlZCAqKVxuICAgIGlmIG5vdCAhaWduX3VzZWQgJiYgaWduIHRoZW5cbiAgICAgIGJlZ2luIG1hdGNoIHN5bWIgd2l0aFxuICAgICAgICAoKiBhcmd1bWVudC1sZXNzIGZvcm1hdHMgY2FuIHNhZmVseSBiZSBpZ25vcmVkIGluIGxlZ2FjeSBtb2RlICopXG4gICAgICAgIHwgKCdAJyB8ICclJyB8ICchJyB8ICcsJykgd2hlbiBsZWdhY3lfYmVoYXZpb3IgLT4gKClcbiAgICAgICAgfCBfIC0+XG4gICAgICAgICAgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIHN5bWIgXCInXydcIlxuICAgICAgZW5kO1xuICAgIGZtdF9yZXN1bHRcblxuICAoKiBQYXJzZSBmb3JtYXR0aW5nIGluZm9ybWF0aW9uIChhZnRlciAnQCcpLiAqKVxuICBhbmQgcGFyc2VfYWZ0ZXJfYXQgOiB0eXBlIGUgZiAuIGludCAtPiBpbnQgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gc3RyX2luZCBlbmRfaW5kIC0+XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiBGbXRfRUJCIChDaGFyX2xpdGVyYWwgKCdAJywgRW5kX29mX2Zvcm1hdCkpXG4gICAgZWxzZVxuICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgICB8ICdbJyAtPlxuICAgICAgICBwYXJzZV90YWcgZmFsc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kXG4gICAgICB8ICddJyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoQ2xvc2VfYm94LCBmbXRfcmVzdCkpXG4gICAgICB8ICd7JyAtPlxuICAgICAgICBwYXJzZV90YWcgdHJ1ZSAoc3RyX2luZCArIDEpIGVuZF9pbmRcbiAgICAgIHwgJ30nIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChDbG9zZV90YWcsIGZtdF9yZXN0KSlcbiAgICAgIHwgJywnIC0+XG4gICAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChCcmVhayAoXCJALFwiLCAwLCAwKSwgZm10X3Jlc3QpKVxuICAgICAgfCAnICcgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKEJyZWFrIChcIkAgXCIsIDEsIDApLCBmbXRfcmVzdCkpXG4gICAgICB8ICc7JyAtPlxuICAgICAgICBwYXJzZV9nb29kX2JyZWFrIChzdHJfaW5kICsgMSkgZW5kX2luZFxuICAgICAgfCAnPycgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKEZGbHVzaCwgZm10X3Jlc3QpKVxuICAgICAgfCAnXFxuJyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoRm9yY2VfbmV3bGluZSwgZm10X3Jlc3QpKVxuICAgICAgfCAnLicgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKEZsdXNoX25ld2xpbmUsIGZtdF9yZXN0KSlcbiAgICAgIHwgJzwnIC0+XG4gICAgICAgIHBhcnNlX21hZ2ljX3NpemUgKHN0cl9pbmQgKyAxKSBlbmRfaW5kXG4gICAgICB8ICdAJyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoRXNjYXBlZF9hdCwgZm10X3Jlc3QpKVxuICAgICAgfCAnJScgd2hlbiBzdHJfaW5kICsgMSA8IGVuZF9pbmQgJiYgc3RyLltzdHJfaW5kICsgMV0gPSAnJScgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoc3RyX2luZCArIDIpIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19saXQgKEVzY2FwZWRfcGVyY2VudCwgZm10X3Jlc3QpKVxuICAgICAgfCAnJScgLT5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgICAgRm10X0VCQiAoQ2hhcl9saXRlcmFsICgnQCcsIGZtdF9yZXN0KSlcbiAgICAgIHwgYyAtPlxuICAgICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIChzdHJfaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBGbXRfRUJCIChGb3JtYXR0aW5nX2xpdCAoU2Nhbl9pbmRpYyBjLCBmbXRfcmVzdCkpXG5cbiAgKCogVHJ5IHRvIHJlYWQgdGhlIG9wdGlvbmFsIDxuYW1lPiBhZnRlciBcIkB7XCIgb3IgXCJAW1wiLiAqKVxuICBhbmQgcGFyc2VfdGFnIDogdHlwZSBlIGYgLiBib29sIC0+IGludCAtPiBpbnQgLT4gKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gaXNfb3Blbl90YWcgc3RyX2luZCBlbmRfaW5kIC0+XG4gICAgdHJ5XG4gICAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHJhaXNlIE5vdF9mb3VuZDtcbiAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgICAgfCAnPCcgLT5cbiAgICAgICAgbGV0IGluZCA9IFN0cmluZy5pbmRleF9mcm9tIHN0ciAoc3RyX2luZCArIDEpICc+JyBpblxuICAgICAgICBpZiBpbmQgPj0gZW5kX2luZCB0aGVuIHJhaXNlIE5vdF9mb3VuZDtcbiAgICAgICAgbGV0IHN1Yl9zdHIgPSBTdHJpbmcuc3ViIHN0ciBzdHJfaW5kIChpbmQgLSBzdHJfaW5kICsgMSkgaW5cbiAgICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSAoaW5kICsgMSkgZW5kX2luZCBpblxuICAgICAgICBsZXQgRm10X0VCQiBzdWJfZm10ID0gcGFyc2Ugc3RyX2luZCAoaW5kICsgMSkgaW5cbiAgICAgICAgbGV0IHN1Yl9mb3JtYXQgPSBGb3JtYXQgKHN1Yl9mbXQsIHN1Yl9zdHIpIGluXG4gICAgICAgIGxldCBmb3JtYXR0aW5nID1cbiAgICAgICAgICBpZiBpc19vcGVuX3RhZyB0aGVuIE9wZW5fdGFnIHN1Yl9mb3JtYXQgZWxzZSBPcGVuX2JveCBzdWJfZm9ybWF0IGluXG4gICAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfZ2VuIChmb3JtYXR0aW5nLCBmbXRfcmVzdCkpXG4gICAgICB8IF8gLT5cbiAgICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gICAgd2l0aCBOb3RfZm91bmQgLT5cbiAgICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2Ugc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICBsZXQgc3ViX2Zvcm1hdCA9IEZvcm1hdCAoRW5kX29mX2Zvcm1hdCwgXCJcIikgaW5cbiAgICAgIGxldCBmb3JtYXR0aW5nID1cbiAgICAgICAgaWYgaXNfb3Blbl90YWcgdGhlbiBPcGVuX3RhZyBzdWJfZm9ybWF0IGVsc2UgT3Blbl9ib3ggc3ViX2Zvcm1hdCBpblxuICAgICAgRm10X0VCQiAoRm9ybWF0dGluZ19nZW4gKGZvcm1hdHRpbmcsIGZtdF9yZXN0KSlcblxuICAoKiBUcnkgdG8gcmVhZCB0aGUgb3B0aW9uYWwgPHdpZHRoIG9mZnNldD4gYWZ0ZXIgXCJAO1wiLiAqKVxuICBhbmQgcGFyc2VfZ29vZF9icmVhayA6IHR5cGUgZSBmIC4gaW50IC0+IGludCAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBzdHJfaW5kIGVuZF9pbmQgLT5cbiAgICBsZXQgbmV4dF9pbmQsIGZvcm1hdHRpbmdfbGl0ID1cbiAgICAgIHRyeVxuICAgICAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB8fCBzdHIuW3N0cl9pbmRdIDw+ICc8JyB0aGVuIHJhaXNlIE5vdF9mb3VuZDtcbiAgICAgICAgbGV0IHN0cl9pbmRfMSA9IHBhcnNlX3NwYWNlcyAoc3RyX2luZCArIDEpIGVuZF9pbmQgaW5cbiAgICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kXzFdIHdpdGhcbiAgICAgICAgfCAnMCcgLi4gJzknIHwgJy0nIC0+IChcbiAgICAgICAgICBsZXQgc3RyX2luZF8yLCB3aWR0aCA9IHBhcnNlX2ludGVnZXIgc3RyX2luZF8xIGVuZF9pbmQgaW5cbiAgICAgICAgICAgIGxldCBzdHJfaW5kXzMgPSBwYXJzZV9zcGFjZXMgc3RyX2luZF8yIGVuZF9pbmQgaW5cbiAgICAgICAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF8zXSB3aXRoXG4gICAgICAgICAgICAgIHwgJz4nIC0+XG4gICAgICAgICAgICAgICAgbGV0IHMgPSBTdHJpbmcuc3ViIHN0ciAoc3RyX2luZC0yKSAoc3RyX2luZF8zLXN0cl9pbmQrMykgaW5cbiAgICAgICAgICAgICAgICBzdHJfaW5kXzMgKyAxLCBCcmVhayAocywgd2lkdGgsIDApXG4gICAgICAgICAgICAgIHwgJzAnIC4uICc5JyB8ICctJyAtPlxuICAgICAgICAgICAgICAgIGxldCBzdHJfaW5kXzQsIG9mZnNldCA9IHBhcnNlX2ludGVnZXIgc3RyX2luZF8zIGVuZF9pbmQgaW5cbiAgICAgICAgICAgICAgICBsZXQgc3RyX2luZF81ID0gcGFyc2Vfc3BhY2VzIHN0cl9pbmRfNCBlbmRfaW5kIGluXG4gICAgICAgICAgICAgICAgaWYgc3RyLltzdHJfaW5kXzVdIDw+ICc+JyB0aGVuIHJhaXNlIE5vdF9mb3VuZDtcbiAgICAgICAgICAgICAgICBsZXQgcyA9IFN0cmluZy5zdWIgc3RyIChzdHJfaW5kLTIpIChzdHJfaW5kXzUtc3RyX2luZCszKSBpblxuICAgICAgICAgICAgICAgIHN0cl9pbmRfNSArIDEsIEJyZWFrIChzLCB3aWR0aCwgb2Zmc2V0KVxuICAgICAgICAgICAgICB8IF8gLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICAgIClcbiAgICAgICAgfCBfIC0+IHJhaXNlIE5vdF9mb3VuZFxuICAgICAgd2l0aCBOb3RfZm91bmQgfCBGYWlsdXJlIF8gLT5cbiAgICAgICAgc3RyX2luZCwgQnJlYWsgKFwiQDtcIiwgMSwgMClcbiAgICBpblxuICAgIGxldCBGbXRfRUJCIGZtdF9yZXN0ID0gcGFyc2UgbmV4dF9pbmQgZW5kX2luZCBpblxuICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChmb3JtYXR0aW5nX2xpdCwgZm10X3Jlc3QpKVxuXG4gICgqIFBhcnNlIHRoZSBzaXplIGluIGEgPG4+LiAqKVxuICBhbmQgcGFyc2VfbWFnaWNfc2l6ZSA6IHR5cGUgZSBmIC4gaW50IC0+IGludCAtPiAoXywgXywgZSwgZikgZm10X2ViYiA9XG4gIGZ1biBzdHJfaW5kIGVuZF9pbmQgLT5cbiAgICBtYXRjaFxuICAgICAgdHJ5XG4gICAgICAgIGxldCBzdHJfaW5kXzEgPSBwYXJzZV9zcGFjZXMgc3RyX2luZCBlbmRfaW5kIGluXG4gICAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF8xXSB3aXRoXG4gICAgICAgIHwgJzAnIC4uICc5JyB8ICctJyAtPlxuICAgICAgICAgIGxldCBzdHJfaW5kXzIsIHNpemUgPSBwYXJzZV9pbnRlZ2VyIHN0cl9pbmRfMSBlbmRfaW5kIGluXG4gICAgICAgICAgbGV0IHN0cl9pbmRfMyA9IHBhcnNlX3NwYWNlcyBzdHJfaW5kXzIgZW5kX2luZCBpblxuICAgICAgICAgIGlmIHN0ci5bc3RyX2luZF8zXSA8PiAnPicgdGhlbiByYWlzZSBOb3RfZm91bmQ7XG4gICAgICAgICAgbGV0IHMgPSBTdHJpbmcuc3ViIHN0ciAoc3RyX2luZCAtIDIpIChzdHJfaW5kXzMgLSBzdHJfaW5kICsgMykgaW5cbiAgICAgICAgICBTb21lIChzdHJfaW5kXzMgKyAxLCBNYWdpY19zaXplIChzLCBzaXplKSlcbiAgICAgICAgfCBfIC0+IE5vbmVcbiAgICAgIHdpdGggTm90X2ZvdW5kIHwgRmFpbHVyZSBfIC0+XG4gICAgICAgIE5vbmVcbiAgICB3aXRoXG4gICAgfCBTb21lIChuZXh0X2luZCwgZm9ybWF0dGluZ19saXQpIC0+XG4gICAgICBsZXQgRm10X0VCQiBmbXRfcmVzdCA9IHBhcnNlIG5leHRfaW5kIGVuZF9pbmQgaW5cbiAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChmb3JtYXR0aW5nX2xpdCwgZm10X3Jlc3QpKVxuICAgIHwgTm9uZSAtPlxuICAgICAgbGV0IEZtdF9FQkIgZm10X3Jlc3QgPSBwYXJzZSBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICAgIEZtdF9FQkIgKEZvcm1hdHRpbmdfbGl0IChTY2FuX2luZGljICc8JywgZm10X3Jlc3QpKVxuXG4gICgqIFBhcnNlIGFuZCBjb25zdHJ1Y3QgYSBjaGFyIHNldC4gKilcbiAgYW5kIHBhcnNlX2NoYXJfc2V0IHN0cl9pbmQgZW5kX2luZCA9XG4gICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcblxuICAgIGxldCBjaGFyX3NldCA9IGNyZWF0ZV9jaGFyX3NldCAoKSBpblxuICAgIGxldCBhZGRfY2hhciBjID1cbiAgICAgIGFkZF9pbl9jaGFyX3NldCBjaGFyX3NldCBjO1xuICAgIGluXG4gICAgbGV0IGFkZF9yYW5nZSBjIGMnID1cbiAgICAgIGZvciBpID0gaW50X29mX2NoYXIgYyB0byBpbnRfb2ZfY2hhciBjJyBkb1xuICAgICAgICBhZGRfaW5fY2hhcl9zZXQgY2hhcl9zZXQgKGNoYXJfb2ZfaW50IGkpO1xuICAgICAgZG9uZTtcbiAgICBpblxuXG4gICAgbGV0IGZhaWxfc2luZ2xlX3BlcmNlbnQgc3RyX2luZCA9XG4gICAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6ICclJScgYWxvbmUgaXMgbm90IGFjY2VwdGVkIGluIGNoYXJhY3RlciBzZXRzLCBcXFxuICAgICAgICAgdXNlICUlJSUgaW5zdGVhZCBhdCBwb3NpdGlvbiAlZC5cIiBzdHIgc3RyX2luZFxuICAgIGluXG5cbiAgICAoKiBQYXJzZSB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIGEgY2hhciBzZXQuICopXG4gICAgbGV0IHJlYyBwYXJzZV9jaGFyX3NldF9zdGFydCBzdHJfaW5kIGVuZF9pbmQgPVxuICAgICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgIGxldCBjID0gc3RyLltzdHJfaW5kXSBpblxuICAgICAgcGFyc2VfY2hhcl9zZXRfYWZ0ZXJfY2hhciAoc3RyX2luZCArIDEpIGVuZF9pbmQgY1xuXG4gICAgKCogUGFyc2UgdGhlIGNvbnRlbnQgb2YgYSBjaGFyIHNldCB1bnRpbCB0aGUgZmlyc3QgJ10nLiAqKVxuICAgIGFuZCBwYXJzZV9jaGFyX3NldF9jb250ZW50IHN0cl9pbmQgZW5kX2luZCA9XG4gICAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgICB8ICddJyAtPlxuICAgICAgICBzdHJfaW5kICsgMVxuICAgICAgfCAnLScgLT5cbiAgICAgICAgYWRkX2NoYXIgJy0nO1xuICAgICAgICBwYXJzZV9jaGFyX3NldF9jb250ZW50IChzdHJfaW5kICsgMSkgZW5kX2luZFxuICAgICAgfCBjIC0+XG4gICAgICAgIHBhcnNlX2NoYXJfc2V0X2FmdGVyX2NoYXIgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGNcblxuICAgICgqIFRlc3QgZm9yIHJhbmdlIGluIGNoYXIgc2V0LiAqKVxuICAgIGFuZCBwYXJzZV9jaGFyX3NldF9hZnRlcl9jaGFyIHN0cl9pbmQgZW5kX2luZCBjID1cbiAgICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICAgIHwgJ10nIC0+XG4gICAgICAgIGFkZF9jaGFyIGM7XG4gICAgICAgIHN0cl9pbmQgKyAxXG4gICAgICB8ICctJyAtPlxuICAgICAgICBwYXJzZV9jaGFyX3NldF9hZnRlcl9taW51cyAoc3RyX2luZCArIDEpIGVuZF9pbmQgY1xuICAgICAgfCAoJyUnIHwgJ0AnKSBhcyBjJyB3aGVuIGMgPSAnJScgLT5cbiAgICAgICAgYWRkX2NoYXIgYyc7XG4gICAgICAgIHBhcnNlX2NoYXJfc2V0X2NvbnRlbnQgKHN0cl9pbmQgKyAxKSBlbmRfaW5kXG4gICAgICB8IGMnIC0+XG4gICAgICAgIGlmIGMgPSAnJScgdGhlbiBmYWlsX3NpbmdsZV9wZXJjZW50IHN0cl9pbmQ7XG4gICAgICAgICgqIG5vdGUgdGhhdCAnQCcgYWxvbmUgaXMgYWNjZXB0ZWQsIGFzIGRvbmUgYnkgdGhlIGxlZ2FjeVxuICAgICAgICAgICBpbXBsZW1lbnRhdGlvbjsgdGhlIGRvY3VtZW50YXRpb24gc3BlY2lmaWNhbGx5IHJlcXVpcmVzICVAXG4gICAgICAgICAgIHNvIHdlIGNvdWxkIHdhcm4gb24gdGhhdCAqKVxuICAgICAgICBhZGRfY2hhciBjO1xuICAgICAgICBwYXJzZV9jaGFyX3NldF9hZnRlcl9jaGFyIChzdHJfaW5kICsgMSkgZW5kX2luZCBjJ1xuXG4gICAgKCogTWFuYWdlIHJhbmdlIGluIGNoYXIgc2V0IChleGNlcHQgaWYgdGhlICctJyB0aGUgbGFzdCBjaGFyIGJlZm9yZSAnXScpICopXG4gICAgYW5kIHBhcnNlX2NoYXJfc2V0X2FmdGVyX21pbnVzIHN0cl9pbmQgZW5kX2luZCBjID1cbiAgICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgICBtYXRjaCBzdHIuW3N0cl9pbmRdIHdpdGhcbiAgICAgIHwgJ10nIC0+XG4gICAgICAgIGFkZF9jaGFyIGM7XG4gICAgICAgIGFkZF9jaGFyICctJztcbiAgICAgICAgc3RyX2luZCArIDFcbiAgICAgIHwgJyUnIC0+XG4gICAgICAgIGlmIHN0cl9pbmQgKyAxID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgICBiZWdpbiBtYXRjaCBzdHIuW3N0cl9pbmQgKyAxXSB3aXRoXG4gICAgICAgICAgfCAoJyUnIHwgJ0AnKSBhcyBjJyAtPlxuICAgICAgICAgICAgYWRkX3JhbmdlIGMgYyc7XG4gICAgICAgICAgICBwYXJzZV9jaGFyX3NldF9jb250ZW50IChzdHJfaW5kICsgMikgZW5kX2luZFxuICAgICAgICAgIHwgXyAtPiBmYWlsX3NpbmdsZV9wZXJjZW50IHN0cl9pbmRcbiAgICAgICAgZW5kXG4gICAgICB8IGMnIC0+XG4gICAgICAgIGFkZF9yYW5nZSBjIGMnO1xuICAgICAgICBwYXJzZV9jaGFyX3NldF9jb250ZW50IChzdHJfaW5kICsgMSkgZW5kX2luZFxuICAgIGluXG4gICAgbGV0IHN0cl9pbmQsIHJldmVyc2UgPVxuICAgICAgaWYgc3RyX2luZCA9IGVuZF9pbmQgdGhlbiB1bmV4cGVjdGVkX2VuZF9vZl9mb3JtYXQgZW5kX2luZDtcbiAgICAgIG1hdGNoIHN0ci5bc3RyX2luZF0gd2l0aFxuICAgICAgICB8ICdeJyAtPiBzdHJfaW5kICsgMSwgdHJ1ZVxuICAgICAgICB8IF8gLT4gc3RyX2luZCwgZmFsc2UgaW5cbiAgICBsZXQgbmV4dF9pbmQgPSBwYXJzZV9jaGFyX3NldF9zdGFydCBzdHJfaW5kIGVuZF9pbmQgaW5cbiAgICBsZXQgY2hhcl9zZXQgPSBmcmVlemVfY2hhcl9zZXQgY2hhcl9zZXQgaW5cbiAgICBuZXh0X2luZCwgKGlmIHJldmVyc2UgdGhlbiByZXZfY2hhcl9zZXQgY2hhcl9zZXQgZWxzZSBjaGFyX3NldClcblxuICAoKiBDb25zdW1lIGFsbCBuZXh0IHNwYWNlcywgcmFpc2UgYW4gRmFpbHVyZSBpZiBlbmRfaW5kIGlzIHJlYWNoZWQuICopXG4gIGFuZCBwYXJzZV9zcGFjZXMgc3RyX2luZCBlbmRfaW5kID1cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgIGlmIHN0ci5bc3RyX2luZF0gPSAnICcgdGhlbiBwYXJzZV9zcGFjZXMgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIGVsc2Ugc3RyX2luZFxuXG4gICgqIFJlYWQgYSBwb3NpdGl2ZSBpbnRlZ2VyIGZyb20gdGhlIHN0cmluZywgcmFpc2UgYSBGYWlsdXJlIGlmIGVuZF9pbmQgaXNcbiAgICAgcmVhY2hlZC4gKilcbiAgYW5kIHBhcnNlX3Bvc2l0aXZlIHN0cl9pbmQgZW5kX2luZCBhY2MgPVxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgfCAnMCcgLi4gJzknIGFzIGMgLT5cbiAgICAgIGxldCBuZXdfYWNjID0gYWNjICogMTAgKyAoaW50X29mX2NoYXIgYyAtIGludF9vZl9jaGFyICcwJykgaW5cbiAgICAgIGlmIG5ld19hY2MgPiBTeXMubWF4X3N0cmluZ19sZW5ndGggdGhlblxuICAgICAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICAgICAgXCJpbnZhbGlkIGZvcm1hdCAlUzogaW50ZWdlciAlZCBpcyBncmVhdGVyIHRoYW4gdGhlIGxpbWl0ICVkXCJcbiAgICAgICAgICBzdHIgbmV3X2FjYyBTeXMubWF4X3N0cmluZ19sZW5ndGhcbiAgICAgIGVsc2VcbiAgICAgICAgcGFyc2VfcG9zaXRpdmUgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIG5ld19hY2NcbiAgICB8IF8gLT4gc3RyX2luZCwgYWNjXG5cbiAgKCogUmVhZCBhIHBvc2l0aXZlIG9yIG5lZ2F0aXZlIGludGVnZXIgZnJvbSB0aGUgc3RyaW5nLCByYWlzZSBhIEZhaWx1cmVcbiAgICAgaWYgZW5kX2luZCBpcyByZWFjaGVkLiAqKVxuICBhbmQgcGFyc2VfaW50ZWdlciBzdHJfaW5kIGVuZF9pbmQgPVxuICAgIGlmIHN0cl9pbmQgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgfCAnMCcgLi4gJzknIC0+IHBhcnNlX3Bvc2l0aXZlIHN0cl9pbmQgZW5kX2luZCAwXG4gICAgfCAnLScgLT4gKFxuICAgICAgaWYgc3RyX2luZCArIDEgPSBlbmRfaW5kIHRoZW4gdW5leHBlY3RlZF9lbmRfb2ZfZm9ybWF0IGVuZF9pbmQ7XG4gICAgICBtYXRjaCBzdHIuW3N0cl9pbmQgKyAxXSB3aXRoXG4gICAgICB8ICcwJyAuLiAnOScgLT5cbiAgICAgICAgbGV0IG5leHRfaW5kLCBuID0gcGFyc2VfcG9zaXRpdmUgKHN0cl9pbmQgKyAxKSBlbmRfaW5kIDAgaW5cbiAgICAgICAgbmV4dF9pbmQsIC1uXG4gICAgICB8IGMgLT5cbiAgICAgICAgZXhwZWN0ZWRfY2hhcmFjdGVyIChzdHJfaW5kICsgMSkgXCJkaWdpdFwiIGNcbiAgICApXG4gICAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG4gICgqIEFkZCBhIGxpdGVyYWwgdG8gYSBmb3JtYXQgZnJvbSBhIGxpdGVyYWwgY2hhcmFjdGVyIHN1Yi1zZXF1ZW5jZS4gKilcbiAgYW5kIGFkZF9saXRlcmFsIDogdHlwZSBhIGQgZSBmIC5cbiAgICAgIGludCAtPiBpbnQgLT4gKGEsIF8sIF8sIGQsIGUsIGYpIGZtdCAtPlxuICAgICAgKF8sIF8sIGUsIGYpIGZtdF9lYmIgPVxuICBmdW4gbGl0X3N0YXJ0IHN0cl9pbmQgZm10IC0+IG1hdGNoIHN0cl9pbmQgLSBsaXRfc3RhcnQgd2l0aFxuICAgIHwgMCAgICAtPiBGbXRfRUJCIGZtdFxuICAgIHwgMSAgICAtPiBGbXRfRUJCIChDaGFyX2xpdGVyYWwgKHN0ci5bbGl0X3N0YXJ0XSwgZm10KSlcbiAgICB8IHNpemUgLT4gRm10X0VCQiAoU3RyaW5nX2xpdGVyYWwgKFN0cmluZy5zdWIgc3RyIGxpdF9zdGFydCBzaXplLCBmbXQpKVxuXG4gICgqIFNlYXJjaCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IHN1Yi1mb3JtYXRcbiAgICAgKGkuZS4gdGhlIGNvcnJlc3BvbmRpbmcgXCIlfVwiIG9yIFwiJSlcIikgKilcbiAgYW5kIHNlYXJjaF9zdWJmb3JtYXRfZW5kIHN0cl9pbmQgZW5kX2luZCBjID1cbiAgICBpZiBzdHJfaW5kID0gZW5kX2luZCB0aGVuXG4gICAgICBmYWlsd2l0aF9tZXNzYWdlXG4gICAgICAgIFwiaW52YWxpZCBmb3JtYXQgJVM6IHVuY2xvc2VkIHN1Yi1mb3JtYXQsIFxcXG4gICAgICAgICBleHBlY3RlZCBcXFwiJSUlY1xcXCIgYXQgY2hhcmFjdGVyIG51bWJlciAlZFwiIHN0ciBjIGVuZF9pbmQ7XG4gICAgbWF0Y2ggc3RyLltzdHJfaW5kXSB3aXRoXG4gICAgfCAnJScgLT5cbiAgICAgIGlmIHN0cl9pbmQgKyAxID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgaWYgc3RyLltzdHJfaW5kICsgMV0gPSBjIHRoZW4gKCogRW5kIG9mIGZvcm1hdCBmb3VuZCAqKSBzdHJfaW5kIGVsc2VcbiAgICAgICAgYmVnaW4gbWF0Y2ggc3RyLltzdHJfaW5kICsgMV0gd2l0aFxuICAgICAgICB8ICdfJyAtPlxuICAgICAgICAgICgqIFNlYXJjaCBmb3IgXCIlXyhcIiBvciBcIiVfe1wiLiAqKVxuICAgICAgICAgIGlmIHN0cl9pbmQgKyAyID0gZW5kX2luZCB0aGVuIHVuZXhwZWN0ZWRfZW5kX29mX2Zvcm1hdCBlbmRfaW5kO1xuICAgICAgICAgIGJlZ2luIG1hdGNoIHN0ci5bc3RyX2luZCArIDJdIHdpdGhcbiAgICAgICAgICB8ICd7JyAtPlxuICAgICAgICAgICAgbGV0IHN1Yl9lbmQgPSBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3RyX2luZCArIDMpIGVuZF9pbmQgJ30nIGluXG4gICAgICAgICAgICBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3ViX2VuZCArIDIpIGVuZF9pbmQgY1xuICAgICAgICAgIHwgJygnIC0+XG4gICAgICAgICAgICBsZXQgc3ViX2VuZCA9IHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdHJfaW5kICsgMykgZW5kX2luZCAnKScgaW5cbiAgICAgICAgICAgIHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdWJfZW5kICsgMikgZW5kX2luZCBjXG4gICAgICAgICAgfCBfIC0+IHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdHJfaW5kICsgMykgZW5kX2luZCBjXG4gICAgICAgICAgZW5kXG4gICAgICAgIHwgJ3snIC0+XG4gICAgICAgICAgKCogJXsuLi4lfSBzdWItZm9ybWF0IGZvdW5kLiAqKVxuICAgICAgICAgIGxldCBzdWJfZW5kID0gc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN0cl9pbmQgKyAyKSBlbmRfaW5kICd9JyBpblxuICAgICAgICAgIHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdWJfZW5kICsgMikgZW5kX2luZCBjXG4gICAgICAgIHwgJygnIC0+XG4gICAgICAgICAgKCogJSguLi4lKSBzdWItZm9ybWF0IGZvdW5kLiAqKVxuICAgICAgICAgIGxldCBzdWJfZW5kID0gc2VhcmNoX3N1YmZvcm1hdF9lbmQgKHN0cl9pbmQgKyAyKSBlbmRfaW5kICcpJyBpblxuICAgICAgICAgIHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdWJfZW5kICsgMikgZW5kX2luZCBjXG4gICAgICAgIHwgJ30nIC0+XG4gICAgICAgICAgKCogRXJyb3I6ICUoLi4uJX0uICopXG4gICAgICAgICAgZXhwZWN0ZWRfY2hhcmFjdGVyIChzdHJfaW5kICsgMSkgXCJjaGFyYWN0ZXIgJyknXCIgJ30nXG4gICAgICAgIHwgJyknIC0+XG4gICAgICAgICAgKCogRXJyb3I6ICV7Li4uJSkuICopXG4gICAgICAgICAgZXhwZWN0ZWRfY2hhcmFjdGVyIChzdHJfaW5kICsgMSkgXCJjaGFyYWN0ZXIgJ30nXCIgJyknXG4gICAgICAgIHwgXyAtPlxuICAgICAgICAgIHNlYXJjaF9zdWJmb3JtYXRfZW5kIChzdHJfaW5kICsgMikgZW5kX2luZCBjXG4gICAgICAgIGVuZFxuICAgIHwgXyAtPiBzZWFyY2hfc3ViZm9ybWF0X2VuZCAoc3RyX2luZCArIDEpIGVuZF9pbmQgY1xuXG4gICgqIENoZWNrIGlmIHN5bWIgaXMgYSB2YWxpZCBpbnQgY29udmVyc2lvbiBhZnRlciBcIiVsXCIsIFwiJW5cIiBvciBcIiVMXCIgKilcbiAgYW5kIGlzX2ludF9iYXNlIHN5bWIgPSBtYXRjaCBzeW1iIHdpdGhcbiAgICB8ICdkJyB8ICdpJyB8ICd4JyB8ICdYJyB8ICdvJyB8ICd1JyAtPiB0cnVlXG4gICAgfCBfIC0+IGZhbHNlXG5cbiAgKCogQ29udmVydCBhIGNoYXIgKGwsIG4gb3IgTCkgdG8gaXRzIGFzc29jaWF0ZWQgY291bnRlci4gKilcbiAgYW5kIGNvdW50ZXJfb2ZfY2hhciBzeW1iID0gbWF0Y2ggc3ltYiB3aXRoXG4gICAgfCAnbCcgLT4gTGluZV9jb3VudGVyICB8ICduJyAtPiBDaGFyX2NvdW50ZXJcbiAgICB8ICdMJyAtPiBUb2tlbl9jb3VudGVyIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxuICAoKiBDb252ZXJ0IChwbHVzLCBzeW1iKSB0byBpdHMgYXNzb2NpYXRlZCBpbnRfY29udi4gKilcbiAgYW5kIGNvbXB1dGVfaW50X2NvbnYgcGN0X2luZCBzdHJfaW5kIHBsdXMgaGFzaCBzcGFjZSBzeW1iID1cbiAgICBtYXRjaCBwbHVzLCBoYXNoLCBzcGFjZSwgc3ltYiB3aXRoXG4gICAgfCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAnZCcgLT4gSW50X2QgIHwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgJ2knIC0+IEludF9pXG4gICAgfCBmYWxzZSwgZmFsc2UsICB0cnVlLCAnZCcgLT4gSW50X3NkIHwgZmFsc2UsIGZhbHNlLCAgdHJ1ZSwgJ2knIC0+IEludF9zaVxuICAgIHwgIHRydWUsIGZhbHNlLCBmYWxzZSwgJ2QnIC0+IEludF9wZCB8ICB0cnVlLCBmYWxzZSwgZmFsc2UsICdpJyAtPiBJbnRfcGlcbiAgICB8IGZhbHNlLCBmYWxzZSwgZmFsc2UsICd4JyAtPiBJbnRfeCAgfCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAnWCcgLT4gSW50X1hcbiAgICB8IGZhbHNlLCAgdHJ1ZSwgZmFsc2UsICd4JyAtPiBJbnRfQ3ggfCBmYWxzZSwgIHRydWUsIGZhbHNlLCAnWCcgLT4gSW50X0NYXG4gICAgfCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAnbycgLT4gSW50X29cbiAgICB8IGZhbHNlLCAgdHJ1ZSwgZmFsc2UsICdvJyAtPiBJbnRfQ29cbiAgICB8IGZhbHNlLCBmYWxzZSwgZmFsc2UsICd1JyAtPiBJbnRfdVxuICAgIHwgZmFsc2UsICB0cnVlLCBmYWxzZSwgJ2QnIC0+IEludF9DZFxuICAgIHwgZmFsc2UsICB0cnVlLCBmYWxzZSwgJ2knIC0+IEludF9DaVxuICAgIHwgZmFsc2UsICB0cnVlLCBmYWxzZSwgJ3UnIC0+IEludF9DdVxuICAgIHwgXywgdHJ1ZSwgXywgJ3gnIHdoZW4gbGVnYWN5X2JlaGF2aW9yIC0+IEludF9DeFxuICAgIHwgXywgdHJ1ZSwgXywgJ1gnIHdoZW4gbGVnYWN5X2JlaGF2aW9yIC0+IEludF9DWFxuICAgIHwgXywgdHJ1ZSwgXywgJ28nIHdoZW4gbGVnYWN5X2JlaGF2aW9yIC0+IEludF9Db1xuICAgIHwgXywgdHJ1ZSwgXywgKCdkJyB8ICdpJyB8ICd1JykgLT5cbiAgICAgIGlmIGxlZ2FjeV9iZWhhdmlvciB0aGVuICgqIGlnbm9yZSAqKVxuICAgICAgICBjb21wdXRlX2ludF9jb252IHBjdF9pbmQgc3RyX2luZCBwbHVzIGZhbHNlIHNwYWNlIHN5bWJcbiAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kIHN5bWIgXCInIydcIlxuICAgIHwgdHJ1ZSwgXywgdHJ1ZSwgXyAtPlxuICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW5cbiAgICAgICAgKCogcGx1cyBhbmQgc3BhY2U6IGxlZ2FjeSBpbXBsZW1lbnRhdGlvbiBwcmVmZXJzIHBsdXMgKilcbiAgICAgICAgY29tcHV0ZV9pbnRfY29udiBwY3RfaW5kIHN0cl9pbmQgcGx1cyBoYXNoIGZhbHNlIHN5bWJcbiAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kICcgJyBcIicrJ1wiXG4gICAgfCBmYWxzZSwgXywgdHJ1ZSwgXyAgICAtPlxuICAgICAgaWYgbGVnYWN5X2JlaGF2aW9yIHRoZW4gKCogaWdub3JlICopXG4gICAgICAgIGNvbXB1dGVfaW50X2NvbnYgcGN0X2luZCBzdHJfaW5kIHBsdXMgaGFzaCBmYWxzZSBzeW1iXG4gICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiJyAnXCJcbiAgICB8IHRydWUsIF8sIGZhbHNlLCBfICAgIC0+XG4gICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiAoKiBpZ25vcmUgKilcbiAgICAgICAgY29tcHV0ZV9pbnRfY29udiBwY3RfaW5kIHN0cl9pbmQgZmFsc2UgaGFzaCBzcGFjZSBzeW1iXG4gICAgICBlbHNlIGluY29tcGF0aWJsZV9mbGFnIHBjdF9pbmQgc3RyX2luZCBzeW1iIFwiJysnXCJcbiAgICB8IGZhbHNlLCBfLCBmYWxzZSwgXyAtPiBhc3NlcnQgZmFsc2VcblxuICAoKiBDb252ZXJ0IChwbHVzLCBzcGFjZSwgc3ltYikgdG8gaXRzIGFzc29jaWF0ZWQgZmxvYXRfY29udi4gKilcbiAgYW5kIGNvbXB1dGVfZmxvYXRfY29udiBwY3RfaW5kIHN0cl9pbmQgcGx1cyBoYXNoIHNwYWNlIHN5bWIgPVxuICAgIGxldCBmbGFnID0gbWF0Y2ggcGx1cywgc3BhY2Ugd2l0aFxuICAgIHwgZmFsc2UsIGZhbHNlIC0+IEZsb2F0X2ZsYWdfXG4gICAgfCBmYWxzZSwgIHRydWUgLT4gRmxvYXRfZmxhZ19zXG4gICAgfCAgdHJ1ZSwgZmFsc2UgLT4gRmxvYXRfZmxhZ19wXG4gICAgfCAgdHJ1ZSwgIHRydWUgLT5cbiAgICAgICgqIHBsdXMgYW5kIHNwYWNlOiBsZWdhY3kgaW1wbGVtZW50YXRpb24gcHJlZmVycyBwbHVzICopXG4gICAgICBpZiBsZWdhY3lfYmVoYXZpb3IgdGhlbiBGbG9hdF9mbGFnX3BcbiAgICAgIGVsc2UgaW5jb21wYXRpYmxlX2ZsYWcgcGN0X2luZCBzdHJfaW5kICcgJyBcIicrJ1wiIGluXG4gICAgbGV0IGtpbmQgPSBtYXRjaCBoYXNoLCBzeW1iIHdpdGhcbiAgICB8IF8sICdmJyAtPiBGbG9hdF9mXG4gICAgfCBfLCAnZScgLT4gRmxvYXRfZVxuICAgIHwgXywgJ0UnIC0+IEZsb2F0X0VcbiAgICB8IF8sICdnJyAtPiBGbG9hdF9nXG4gICAgfCBfLCAnRycgLT4gRmxvYXRfR1xuICAgIHwgXywgJ2gnIC0+IEZsb2F0X2hcbiAgICB8IF8sICdIJyAtPiBGbG9hdF9IXG4gICAgfCBmYWxzZSwgJ0YnIC0+IEZsb2F0X0ZcbiAgICB8IHRydWUsICdGJyAtPiBGbG9hdF9DRlxuICAgIHwgXyAtPiBhc3NlcnQgZmFsc2UgaW5cbiAgICBmbGFnLCBraW5kXG5cbiAgKCogUmFpc2UgW0ZhaWx1cmVdIHdpdGggYSBmcmllbmRseSBlcnJvciBtZXNzYWdlIGFib3V0IGluY29tcGF0aWJsZSBvcHRpb25zLiopXG4gIGFuZCBpbmNvbXBhdGlibGVfZmxhZyA6IHR5cGUgYSAuIGludCAtPiBpbnQgLT4gY2hhciAtPiBzdHJpbmcgLT4gYSA9XG4gICAgZnVuIHBjdF9pbmQgc3RyX2luZCBzeW1iIG9wdGlvbiAtPlxuICAgICAgbGV0IHN1YmZtdCA9IFN0cmluZy5zdWIgc3RyIHBjdF9pbmQgKHN0cl9pbmQgLSBwY3RfaW5kKSBpblxuICAgICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgICBcImludmFsaWQgZm9ybWF0ICVTOiBhdCBjaGFyYWN0ZXIgbnVtYmVyICVkLCBcXFxuICAgICAgICAgJXMgaXMgaW5jb21wYXRpYmxlIHdpdGggJyVjJyBpbiBzdWItZm9ybWF0ICVTXCJcbiAgICAgICAgc3RyIHBjdF9pbmQgb3B0aW9uIHN5bWIgc3ViZm10XG5cbiAgaW4gcGFyc2UgMCAoU3RyaW5nLmxlbmd0aCBzdHIpXG5cbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4gICAgICAgICAgICAgICAgICAoKiBHdWFyZGVkIHN0cmluZyB0byBmb3JtYXQgY29udmVyc2lvbnMgKilcblxuKCogQ29udmVydCBhIHN0cmluZyB0byBhIGZvcm1hdCBhY2NvcmRpbmcgdG8gYW4gZm10dHkuICopXG4oKiBSYWlzZSBbRmFpbHVyZV0gd2l0aCBhbiBlcnJvciBtZXNzYWdlIGluIGNhc2Ugb2YgdHlwZSBtaXNtYXRjaC4gKilcbmxldCBmb3JtYXRfb2Zfc3RyaW5nX2ZtdHR5IHN0ciBmbXR0eSA9XG4gIGxldCBGbXRfRUJCIGZtdCA9IGZtdF9lYmJfb2Zfc3RyaW5nIHN0ciBpblxuICB0cnkgRm9ybWF0ICh0eXBlX2Zvcm1hdCBmbXQgZm10dHksIHN0cilcbiAgd2l0aCBUeXBlX21pc21hdGNoIC0+XG4gICAgZmFpbHdpdGhfbWVzc2FnZVxuICAgICAgXCJiYWQgaW5wdXQ6IGZvcm1hdCB0eXBlIG1pc21hdGNoIGJldHdlZW4gJVMgYW5kICVTXCJcbiAgICAgIHN0ciAoc3RyaW5nX29mX2ZtdHR5IGZtdHR5KVxuXG4oKiBDb252ZXJ0IGEgc3RyaW5nIHRvIGEgZm9ybWF0IGNvbXBhdGlibGUgd2l0aCBhbiBvdGhlciBmb3JtYXQuICopXG4oKiBSYWlzZSBbRmFpbHVyZV0gd2l0aCBhbiBlcnJvciBtZXNzYWdlIGluIGNhc2Ugb2YgdHlwZSBtaXNtYXRjaC4gKilcbmxldCBmb3JtYXRfb2Zfc3RyaW5nX2Zvcm1hdCBzdHIgKEZvcm1hdCAoZm10Jywgc3RyJykpID1cbiAgbGV0IEZtdF9FQkIgZm10ID0gZm10X2ViYl9vZl9zdHJpbmcgc3RyIGluXG4gIHRyeSBGb3JtYXQgKHR5cGVfZm9ybWF0IGZtdCAoZm10dHlfb2ZfZm10IGZtdCcpLCBzdHIpXG4gIHdpdGggVHlwZV9taXNtYXRjaCAtPlxuICAgIGZhaWx3aXRoX21lc3NhZ2VcbiAgICAgIFwiYmFkIGlucHV0OiBmb3JtYXQgdHlwZSBtaXNtYXRjaCBiZXR3ZWVuICVTIGFuZCAlU1wiIHN0ciBzdHInXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbm9wZW4gUHJpbnRmXG5cbnR5cGUgdCA9IGV4biA9IC4uXG5cbmxldCBwcmludGVycyA9IEF0b21pYy5tYWtlIFtdXG5cbmxldCBsb2NmbXQgPSBmb3JtYXRfb2Zfc3RyaW5nIFwiRmlsZSBcXFwiJXNcXFwiLCBsaW5lICVkLCBjaGFyYWN0ZXJzICVkLSVkOiAlc1wiXG5cbmxldCBmaWVsZCB4IGkgPVxuICBsZXQgZiA9IE9iai5maWVsZCB4IGkgaW5cbiAgaWYgbm90IChPYmouaXNfYmxvY2sgZikgdGhlblxuICAgIHNwcmludGYgXCIlZFwiIChPYmoubWFnaWMgZiA6IGludCkgICAgICAgICAgICgqIGNhbiBhbHNvIGJlIGEgY2hhciAqKVxuICBlbHNlIGlmIE9iai50YWcgZiA9IE9iai5zdHJpbmdfdGFnIHRoZW5cbiAgICBzcHJpbnRmIFwiJVNcIiAoT2JqLm1hZ2ljIGYgOiBzdHJpbmcpXG4gIGVsc2UgaWYgT2JqLnRhZyBmID0gT2JqLmRvdWJsZV90YWcgdGhlblxuICAgIHN0cmluZ19vZl9mbG9hdCAoT2JqLm1hZ2ljIGYgOiBmbG9hdClcbiAgZWxzZVxuICAgIFwiX1wiXG5cbmxldCByZWMgb3RoZXJfZmllbGRzIHggaSA9XG4gIGlmIGkgPj0gT2JqLnNpemUgeCB0aGVuIFwiXCJcbiAgZWxzZSBzcHJpbnRmIFwiLCAlcyVzXCIgKGZpZWxkIHggaSkgKG90aGVyX2ZpZWxkcyB4IChpKzEpKVxuXG5sZXQgZmllbGRzIHggPVxuICBtYXRjaCBPYmouc2l6ZSB4IHdpdGhcbiAgfCAwIC0+IFwiXCJcbiAgfCAxIC0+IFwiXCJcbiAgfCAyIC0+IHNwcmludGYgXCIoJXMpXCIgKGZpZWxkIHggMSlcbiAgfCBfIC0+IHNwcmludGYgXCIoJXMlcylcIiAoZmllbGQgeCAxKSAob3RoZXJfZmllbGRzIHggMilcblxubGV0IHVzZV9wcmludGVycyB4ID1cbiAgbGV0IHJlYyBjb252ID0gZnVuY3Rpb25cbiAgICB8IGhkIDo6IHRsIC0+XG4gICAgICAgIChtYXRjaCBoZCB4IHdpdGhcbiAgICAgICAgIHwgTm9uZSB8IGV4Y2VwdGlvbiBfIC0+IGNvbnYgdGxcbiAgICAgICAgIHwgU29tZSBzIC0+IFNvbWUgcylcbiAgICB8IFtdIC0+IE5vbmUgaW5cbiAgY29udiAoQXRvbWljLmdldCBwcmludGVycylcblxubGV0IHRvX3N0cmluZ19kZWZhdWx0ID0gZnVuY3Rpb25cbiAgfCBPdXRfb2ZfbWVtb3J5IC0+IFwiT3V0IG9mIG1lbW9yeVwiXG4gIHwgU3RhY2tfb3ZlcmZsb3cgLT4gXCJTdGFjayBvdmVyZmxvd1wiXG4gIHwgTWF0Y2hfZmFpbHVyZShmaWxlLCBsaW5lLCBjaGFyKSAtPlxuICAgICAgc3ByaW50ZiBsb2NmbXQgZmlsZSBsaW5lIGNoYXIgKGNoYXIrNSkgXCJQYXR0ZXJuIG1hdGNoaW5nIGZhaWxlZFwiXG4gIHwgQXNzZXJ0X2ZhaWx1cmUoZmlsZSwgbGluZSwgY2hhcikgLT5cbiAgICAgIHNwcmludGYgbG9jZm10IGZpbGUgbGluZSBjaGFyIChjaGFyKzYpIFwiQXNzZXJ0aW9uIGZhaWxlZFwiXG4gIHwgVW5kZWZpbmVkX3JlY3Vyc2l2ZV9tb2R1bGUoZmlsZSwgbGluZSwgY2hhcikgLT5cbiAgICAgIHNwcmludGYgbG9jZm10IGZpbGUgbGluZSBjaGFyIChjaGFyKzYpIFwiVW5kZWZpbmVkIHJlY3Vyc2l2ZSBtb2R1bGVcIlxuICB8IHggLT5cbiAgICAgIGxldCB4ID0gT2JqLnJlcHIgeCBpblxuICAgICAgaWYgT2JqLnRhZyB4IDw+IDAgdGhlblxuICAgICAgICAoT2JqLm1hZ2ljIChPYmouZmllbGQgeCAwKSA6IHN0cmluZylcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IGNvbnN0cnVjdG9yID1cbiAgICAgICAgICAoT2JqLm1hZ2ljIChPYmouZmllbGQgKE9iai5maWVsZCB4IDApIDApIDogc3RyaW5nKSBpblxuICAgICAgICBjb25zdHJ1Y3RvciBeIChmaWVsZHMgeClcblxubGV0IHRvX3N0cmluZyBlID1cbiAgbWF0Y2ggdXNlX3ByaW50ZXJzIGUgd2l0aFxuICB8IFNvbWUgcyAtPiBzXG4gIHwgTm9uZSAtPiB0b19zdHJpbmdfZGVmYXVsdCBlXG5cbmxldCBwcmludCBmY3QgYXJnID1cbiAgdHJ5XG4gICAgZmN0IGFyZ1xuICB3aXRoIHggLT5cbiAgICBlcHJpbnRmIFwiVW5jYXVnaHQgZXhjZXB0aW9uOiAlc1xcblwiICh0b19zdHJpbmcgeCk7XG4gICAgZmx1c2ggc3RkZXJyO1xuICAgIHJhaXNlIHhcblxubGV0IGNhdGNoIGZjdCBhcmcgPVxuICB0cnlcbiAgICBmY3QgYXJnXG4gIHdpdGggeCAtPlxuICAgIGZsdXNoIHN0ZG91dDtcbiAgICBlcHJpbnRmIFwiVW5jYXVnaHQgZXhjZXB0aW9uOiAlc1xcblwiICh0b19zdHJpbmcgeCk7XG4gICAgZXhpdCAyXG5cbnR5cGUgcmF3X2JhY2t0cmFjZV9zbG90XG50eXBlIHJhd19iYWNrdHJhY2VfZW50cnkgPSBwcml2YXRlIGludFxudHlwZSByYXdfYmFja3RyYWNlID0gcmF3X2JhY2t0cmFjZV9lbnRyeSBhcnJheVxuXG5sZXQgcmF3X2JhY2t0cmFjZV9lbnRyaWVzIGJ0ID0gYnRcblxuZXh0ZXJuYWwgZ2V0X3Jhd19iYWNrdHJhY2U6XG4gIHVuaXQgLT4gcmF3X2JhY2t0cmFjZSA9IFwiY2FtbF9nZXRfZXhjZXB0aW9uX3Jhd19iYWNrdHJhY2VcIlxuXG5leHRlcm5hbCByYWlzZV93aXRoX2JhY2t0cmFjZTogZXhuIC0+IHJhd19iYWNrdHJhY2UgLT4gJ2FcbiAgPSBcIiVyYWlzZV93aXRoX2JhY2t0cmFjZVwiXG5cbnR5cGUgYmFja3RyYWNlX3Nsb3QgPVxuICB8IEtub3duX2xvY2F0aW9uIG9mIHtcbiAgICAgIGlzX3JhaXNlICAgIDogYm9vbDtcbiAgICAgIGZpbGVuYW1lICAgIDogc3RyaW5nO1xuICAgICAgbGluZV9udW1iZXIgOiBpbnQ7XG4gICAgICBzdGFydF9jaGFyICA6IGludDtcbiAgICAgIGVuZF9jaGFyICAgIDogaW50O1xuICAgICAgaXNfaW5saW5lICAgOiBib29sO1xuICAgICAgZGVmbmFtZSAgICAgOiBzdHJpbmc7XG4gICAgfVxuICB8IFVua25vd25fbG9jYXRpb24gb2Yge1xuICAgICAgaXNfcmFpc2UgOiBib29sXG4gICAgfVxuXG4oKiB0byBhdm9pZCB3YXJuaW5nICopXG5sZXQgXyA9IFtLbm93bl9sb2NhdGlvbiB7IGlzX3JhaXNlID0gZmFsc2U7IGZpbGVuYW1lID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZV9udW1iZXIgPSAwOyBzdGFydF9jaGFyID0gMDsgZW5kX2NoYXIgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpc19pbmxpbmUgPSBmYWxzZTsgZGVmbmFtZSA9IFwiXCIgfTtcbiAgICAgICAgIFVua25vd25fbG9jYXRpb24geyBpc19yYWlzZSA9IGZhbHNlIH1dXG5cbmV4dGVybmFsIGNvbnZlcnRfcmF3X2JhY2t0cmFjZV9zbG90OlxuICByYXdfYmFja3RyYWNlX3Nsb3QgLT4gYmFja3RyYWNlX3Nsb3QgPSBcImNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlX3Nsb3RcIlxuXG5leHRlcm5hbCBjb252ZXJ0X3Jhd19iYWNrdHJhY2U6XG4gIHJhd19iYWNrdHJhY2UgLT4gYmFja3RyYWNlX3Nsb3QgYXJyYXkgPSBcImNhbWxfY29udmVydF9yYXdfYmFja3RyYWNlXCJcblxubGV0IGNvbnZlcnRfcmF3X2JhY2t0cmFjZSBidCA9XG4gIHRyeSBTb21lIChjb252ZXJ0X3Jhd19iYWNrdHJhY2UgYnQpXG4gIHdpdGggRmFpbHVyZSBfIC0+IE5vbmVcblxubGV0IGZvcm1hdF9iYWNrdHJhY2Vfc2xvdCBwb3Mgc2xvdCA9XG4gIGxldCBpbmZvIGlzX3JhaXNlID1cbiAgICBpZiBpc19yYWlzZSB0aGVuXG4gICAgICBpZiBwb3MgPSAwIHRoZW4gXCJSYWlzZWQgYXRcIiBlbHNlIFwiUmUtcmFpc2VkIGF0XCJcbiAgICBlbHNlXG4gICAgICBpZiBwb3MgPSAwIHRoZW4gXCJSYWlzZWQgYnkgcHJpbWl0aXZlIG9wZXJhdGlvbiBhdFwiIGVsc2UgXCJDYWxsZWQgZnJvbVwiXG4gIGluXG4gIG1hdGNoIHNsb3Qgd2l0aFxuICB8IFVua25vd25fbG9jYXRpb24gbCAtPlxuICAgICAgaWYgbC5pc19yYWlzZSB0aGVuXG4gICAgICAgICgqIGNvbXBpbGVyLWluc2VydGVkIHJlLXJhaXNlLCBza2lwcGVkICopIE5vbmVcbiAgICAgIGVsc2VcbiAgICAgICAgU29tZSAoc3ByaW50ZiBcIiVzIHVua25vd24gbG9jYXRpb25cIiAoaW5mbyBmYWxzZSkpXG4gIHwgS25vd25fbG9jYXRpb24gbCAtPlxuICAgICAgU29tZSAoc3ByaW50ZiBcIiVzICVzIGluIGZpbGUgXFxcIiVzXFxcIiVzLCBsaW5lICVkLCBjaGFyYWN0ZXJzICVkLSVkXCJcbiAgICAgICAgICAgICAgKGluZm8gbC5pc19yYWlzZSkgbC5kZWZuYW1lIGwuZmlsZW5hbWVcbiAgICAgICAgICAgICAgKGlmIGwuaXNfaW5saW5lIHRoZW4gXCIgKGlubGluZWQpXCIgZWxzZSBcIlwiKVxuICAgICAgICAgICAgICBsLmxpbmVfbnVtYmVyIGwuc3RhcnRfY2hhciBsLmVuZF9jaGFyKVxuXG5sZXQgcHJpbnRfZXhjZXB0aW9uX2JhY2t0cmFjZSBvdXRjaGFuIGJhY2t0cmFjZSA9XG4gIG1hdGNoIGJhY2t0cmFjZSB3aXRoXG4gIHwgTm9uZSAtPlxuICAgICAgZnByaW50ZiBvdXRjaGFuXG4gICAgICAgIFwiKFByb2dyYW0gbm90IGxpbmtlZCB3aXRoIC1nLCBjYW5ub3QgcHJpbnQgc3RhY2sgYmFja3RyYWNlKVxcblwiXG4gIHwgU29tZSBhIC0+XG4gICAgICBmb3IgaSA9IDAgdG8gQXJyYXkubGVuZ3RoIGEgLSAxIGRvXG4gICAgICAgIG1hdGNoIGZvcm1hdF9iYWNrdHJhY2Vfc2xvdCBpIGEuKGkpIHdpdGhcbiAgICAgICAgICB8IE5vbmUgLT4gKClcbiAgICAgICAgICB8IFNvbWUgc3RyIC0+IGZwcmludGYgb3V0Y2hhbiBcIiVzXFxuXCIgc3RyXG4gICAgICBkb25lXG5cbmxldCBwcmludF9yYXdfYmFja3RyYWNlIG91dGNoYW4gcmF3X2JhY2t0cmFjZSA9XG4gIHByaW50X2V4Y2VwdGlvbl9iYWNrdHJhY2Ugb3V0Y2hhbiAoY29udmVydF9yYXdfYmFja3RyYWNlIHJhd19iYWNrdHJhY2UpXG5cbigqIGNvbmZ1c2luZ2x5IG5hbWVkOiBwcmludHMgdGhlIGdsb2JhbCBjdXJyZW50IGJhY2t0cmFjZSAqKVxubGV0IHByaW50X2JhY2t0cmFjZSBvdXRjaGFuID1cbiAgcHJpbnRfcmF3X2JhY2t0cmFjZSBvdXRjaGFuIChnZXRfcmF3X2JhY2t0cmFjZSAoKSlcblxubGV0IGJhY2t0cmFjZV90b19zdHJpbmcgYmFja3RyYWNlID1cbiAgbWF0Y2ggYmFja3RyYWNlIHdpdGhcbiAgfCBOb25lIC0+XG4gICAgIFwiKFByb2dyYW0gbm90IGxpbmtlZCB3aXRoIC1nLCBjYW5ub3QgcHJpbnQgc3RhY2sgYmFja3RyYWNlKVxcblwiXG4gIHwgU29tZSBhIC0+XG4gICAgICBsZXQgYiA9IEJ1ZmZlci5jcmVhdGUgMTAyNCBpblxuICAgICAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCBhIC0gMSBkb1xuICAgICAgICBtYXRjaCBmb3JtYXRfYmFja3RyYWNlX3Nsb3QgaSBhLihpKSB3aXRoXG4gICAgICAgICAgfCBOb25lIC0+ICgpXG4gICAgICAgICAgfCBTb21lIHN0ciAtPiBicHJpbnRmIGIgXCIlc1xcblwiIHN0clxuICAgICAgZG9uZTtcbiAgICAgIEJ1ZmZlci5jb250ZW50cyBiXG5cbmxldCByYXdfYmFja3RyYWNlX3RvX3N0cmluZyByYXdfYmFja3RyYWNlID1cbiAgYmFja3RyYWNlX3RvX3N0cmluZyAoY29udmVydF9yYXdfYmFja3RyYWNlIHJhd19iYWNrdHJhY2UpXG5cbmxldCBiYWNrdHJhY2Vfc2xvdF9pc19yYWlzZSA9IGZ1bmN0aW9uXG4gIHwgS25vd25fbG9jYXRpb24gbCAtPiBsLmlzX3JhaXNlXG4gIHwgVW5rbm93bl9sb2NhdGlvbiBsIC0+IGwuaXNfcmFpc2VcblxubGV0IGJhY2t0cmFjZV9zbG90X2lzX2lubGluZSA9IGZ1bmN0aW9uXG4gIHwgS25vd25fbG9jYXRpb24gbCAtPiBsLmlzX2lubGluZVxuICB8IFVua25vd25fbG9jYXRpb24gXyAtPiBmYWxzZVxuXG50eXBlIGxvY2F0aW9uID0ge1xuICBmaWxlbmFtZSA6IHN0cmluZztcbiAgbGluZV9udW1iZXIgOiBpbnQ7XG4gIHN0YXJ0X2NoYXIgOiBpbnQ7XG4gIGVuZF9jaGFyIDogaW50O1xufVxuXG5sZXQgYmFja3RyYWNlX3Nsb3RfbG9jYXRpb24gPSBmdW5jdGlvblxuICB8IFVua25vd25fbG9jYXRpb24gXyAtPiBOb25lXG4gIHwgS25vd25fbG9jYXRpb24gbCAtPlxuICAgIFNvbWUge1xuICAgICAgZmlsZW5hbWUgICAgPSBsLmZpbGVuYW1lO1xuICAgICAgbGluZV9udW1iZXIgPSBsLmxpbmVfbnVtYmVyO1xuICAgICAgc3RhcnRfY2hhciAgPSBsLnN0YXJ0X2NoYXI7XG4gICAgICBlbmRfY2hhciAgICA9IGwuZW5kX2NoYXI7XG4gICAgfVxuXG5sZXQgYmFja3RyYWNlX3Nsb3RfZGVmbmFtZSA9IGZ1bmN0aW9uXG4gIHwgVW5rbm93bl9sb2NhdGlvbiBfXG4gIHwgS25vd25fbG9jYXRpb24geyBkZWZuYW1lID0gXCJcIiB9IC0+IE5vbmVcbiAgfCBLbm93bl9sb2NhdGlvbiBsIC0+IFNvbWUgbC5kZWZuYW1lXG5cbmxldCBiYWNrdHJhY2Vfc2xvdHMgcmF3X2JhY2t0cmFjZSA9XG4gICgqIFRoZSBkb2N1bWVudGF0aW9uIG9mIHRoaXMgZnVuY3Rpb24gZ3VhcmFudGVlcyB0aGF0IFNvbWUgaXNcbiAgICAgcmV0dXJuZWQgb25seSBpZiBhIHBhcnQgb2YgdGhlIHRyYWNlIGlzIHVzYWJsZS4gVGhpcyBnaXZlcyB1c1xuICAgICBhIGJpdCBtb3JlIHdvcmsgdGhhbiBqdXN0IGNvbnZlcnRfcmF3X2JhY2t0cmFjZSwgYnV0IGl0IG1ha2VzIHRoZVxuICAgICBBUEkgbW9yZSB1c2VyLWZyaWVuZGx5IC0tIG90aGVyd2lzZSBtb3N0IHVzZXJzIHdvdWxkIGhhdmUgdG9cbiAgICAgcmVpbXBsZW1lbnQgdGhlIFwiUHJvZ3JhbSBub3QgbGlua2VkIHdpdGggLWcsIHNvcnJ5XCIgbG9naWNcbiAgICAgdGhlbXNlbHZlcy4gKilcbiAgbWF0Y2ggY29udmVydF9yYXdfYmFja3RyYWNlIHJhd19iYWNrdHJhY2Ugd2l0aFxuICAgIHwgTm9uZSAtPiBOb25lXG4gICAgfCBTb21lIGJhY2t0cmFjZSAtPlxuICAgICAgbGV0IHVzYWJsZV9zbG90ID0gZnVuY3Rpb25cbiAgICAgICAgfCBVbmtub3duX2xvY2F0aW9uIF8gLT4gZmFsc2VcbiAgICAgICAgfCBLbm93bl9sb2NhdGlvbiBfIC0+IHRydWUgaW5cbiAgICAgIGxldCByZWMgZXhpc3RzX3VzYWJsZSA9IGZ1bmN0aW9uXG4gICAgICAgIHwgKC0xKSAtPiBmYWxzZVxuICAgICAgICB8IGkgLT4gdXNhYmxlX3Nsb3QgYmFja3RyYWNlLihpKSB8fCBleGlzdHNfdXNhYmxlIChpIC0gMSkgaW5cbiAgICAgIGlmIGV4aXN0c191c2FibGUgKEFycmF5Lmxlbmd0aCBiYWNrdHJhY2UgLSAxKVxuICAgICAgdGhlbiBTb21lIGJhY2t0cmFjZVxuICAgICAgZWxzZSBOb25lXG5cbmxldCBiYWNrdHJhY2Vfc2xvdHNfb2ZfcmF3X2VudHJ5IGVudHJ5ID1cbiAgYmFja3RyYWNlX3Nsb3RzIFt8IGVudHJ5IHxdXG5cbm1vZHVsZSBTbG90ID0gc3RydWN0XG4gIHR5cGUgdCA9IGJhY2t0cmFjZV9zbG90XG4gIGxldCBmb3JtYXQgPSBmb3JtYXRfYmFja3RyYWNlX3Nsb3RcbiAgbGV0IGlzX3JhaXNlID0gYmFja3RyYWNlX3Nsb3RfaXNfcmFpc2VcbiAgbGV0IGlzX2lubGluZSA9IGJhY2t0cmFjZV9zbG90X2lzX2lubGluZVxuICBsZXQgbG9jYXRpb24gPSBiYWNrdHJhY2Vfc2xvdF9sb2NhdGlvblxuICBsZXQgbmFtZSA9IGJhY2t0cmFjZV9zbG90X2RlZm5hbWVcbmVuZFxuXG5sZXQgcmF3X2JhY2t0cmFjZV9sZW5ndGggYnQgPSBBcnJheS5sZW5ndGggYnRcblxuZXh0ZXJuYWwgZ2V0X3Jhd19iYWNrdHJhY2Vfc2xvdCA6XG4gIHJhd19iYWNrdHJhY2UgLT4gaW50IC0+IHJhd19iYWNrdHJhY2Vfc2xvdCA9IFwiY2FtbF9yYXdfYmFja3RyYWNlX3Nsb3RcIlxuXG5leHRlcm5hbCBnZXRfcmF3X2JhY2t0cmFjZV9uZXh0X3Nsb3QgOlxuICByYXdfYmFja3RyYWNlX3Nsb3QgLT4gcmF3X2JhY2t0cmFjZV9zbG90IG9wdGlvblxuICA9IFwiY2FtbF9yYXdfYmFja3RyYWNlX25leHRfc2xvdFwiXG5cbigqIGNvbmZ1c2luZ2x5IG5hbWVkOlxuICAgcmV0dXJucyB0aGUgKnN0cmluZyogY29ycmVzcG9uZGluZyB0byB0aGUgZ2xvYmFsIGN1cnJlbnQgYmFja3RyYWNlICopXG5sZXQgZ2V0X2JhY2t0cmFjZSAoKSA9IHJhd19iYWNrdHJhY2VfdG9fc3RyaW5nIChnZXRfcmF3X2JhY2t0cmFjZSAoKSlcblxuZXh0ZXJuYWwgcmVjb3JkX2JhY2t0cmFjZTogYm9vbCAtPiB1bml0ID0gXCJjYW1sX3JlY29yZF9iYWNrdHJhY2VcIlxuZXh0ZXJuYWwgYmFja3RyYWNlX3N0YXR1czogdW5pdCAtPiBib29sID0gXCJjYW1sX2JhY2t0cmFjZV9zdGF0dXNcIlxuXG5sZXQgcmVjIHJlZ2lzdGVyX3ByaW50ZXIgZm4gPVxuICBsZXQgb2xkX3ByaW50ZXJzID0gQXRvbWljLmdldCBwcmludGVycyBpblxuICBsZXQgbmV3X3ByaW50ZXJzID0gZm4gOjogb2xkX3ByaW50ZXJzIGluXG4gIGxldCBzdWNjZXNzID0gQXRvbWljLmNvbXBhcmVfYW5kX3NldCBwcmludGVycyBvbGRfcHJpbnRlcnMgbmV3X3ByaW50ZXJzIGluXG4gIGlmIG5vdCBzdWNjZXNzIHRoZW4gcmVnaXN0ZXJfcHJpbnRlciBmblxuXG5leHRlcm5hbCBnZXRfY2FsbHN0YWNrOiBpbnQgLT4gcmF3X2JhY2t0cmFjZSA9IFwiY2FtbF9nZXRfY3VycmVudF9jYWxsc3RhY2tcIlxuXG5sZXQgZXhuX3Nsb3QgeCA9XG4gIGxldCB4ID0gT2JqLnJlcHIgeCBpblxuICBpZiBPYmoudGFnIHggPSAwIHRoZW4gT2JqLmZpZWxkIHggMCBlbHNlIHhcblxubGV0IGV4bl9zbG90X2lkIHggPVxuICBsZXQgc2xvdCA9IGV4bl9zbG90IHggaW5cbiAgKE9iai5vYmogKE9iai5maWVsZCBzbG90IDEpIDogaW50KVxuXG5sZXQgZXhuX3Nsb3RfbmFtZSB4ID1cbiAgbGV0IHNsb3QgPSBleG5fc2xvdCB4IGluXG4gIChPYmoub2JqIChPYmouZmllbGQgc2xvdCAwKSA6IHN0cmluZylcblxuZXh0ZXJuYWwgZ2V0X2RlYnVnX2luZm9fc3RhdHVzIDogdW5pdCAtPiBpbnQgPSBcImNhbWxfbWxfZGVidWdfaW5mb19zdGF0dXNcIlxuXG4oKiBEZXNjcmlwdGlvbnMgZm9yIGVycm9ycyBpbiBzdGFydHVwLmguIFNlZSBhbHNvIGJhY2t0cmFjZS5jICopXG5sZXQgZXJyb3JzID0gW3wgXCJcIjtcbiAgKCogRklMRV9OT1RfRk9VTkQgKilcbiAgXCIoQ2Fubm90IHByaW50IGxvY2F0aW9uczpcXG4gXFxcbiAgICAgIGJ5dGVjb2RlIGV4ZWN1dGFibGUgcHJvZ3JhbSBmaWxlIG5vdCBmb3VuZClcIjtcbiAgKCogQkFEX0JZVEVDT0RFICopXG4gIFwiKENhbm5vdCBwcmludCBsb2NhdGlvbnM6XFxuIFxcXG4gICAgICBieXRlY29kZSBleGVjdXRhYmxlIHByb2dyYW0gZmlsZSBhcHBlYXJzIHRvIGJlIGNvcnJ1cHQpXCI7XG4gICgqIFdST05HX01BR0lDICopXG4gIFwiKENhbm5vdCBwcmludCBsb2NhdGlvbnM6XFxuIFxcXG4gICAgICBieXRlY29kZSBleGVjdXRhYmxlIHByb2dyYW0gZmlsZSBoYXMgd3JvbmcgbWFnaWMgbnVtYmVyKVwiO1xuICAoKiBOT19GRFMgKilcbiAgXCIoQ2Fubm90IHByaW50IGxvY2F0aW9uczpcXG4gXFxcbiAgICAgIGJ5dGVjb2RlIGV4ZWN1dGFibGUgcHJvZ3JhbSBmaWxlIGNhbm5vdCBiZSBvcGVuZWQ7XFxuIFxcXG4gICAgICAtLSB0b28gbWFueSBvcGVuIGZpbGVzLiBUcnkgcnVubmluZyB3aXRoIE9DQU1MUlVOUEFSQU09Yj0yKVwiXG58XVxuXG5sZXQgZGVmYXVsdF91bmNhdWdodF9leGNlcHRpb25faGFuZGxlciBleG4gcmF3X2JhY2t0cmFjZSA9XG4gIGVwcmludGYgXCJGYXRhbCBlcnJvcjogZXhjZXB0aW9uICVzXFxuXCIgKHRvX3N0cmluZyBleG4pO1xuICBwcmludF9yYXdfYmFja3RyYWNlIHN0ZGVyciByYXdfYmFja3RyYWNlO1xuICBsZXQgc3RhdHVzID0gZ2V0X2RlYnVnX2luZm9fc3RhdHVzICgpIGluXG4gIGlmIHN0YXR1cyA8IDAgdGhlblxuICAgIHByZXJyX2VuZGxpbmUgZXJyb3JzLihhYnMgc3RhdHVzKTtcbiAgZmx1c2ggc3RkZXJyXG5cbmxldCB1bmNhdWdodF9leGNlcHRpb25faGFuZGxlciA9IHJlZiBkZWZhdWx0X3VuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyXG5cbmxldCBzZXRfdW5jYXVnaHRfZXhjZXB0aW9uX2hhbmRsZXIgZm4gPSB1bmNhdWdodF9leGNlcHRpb25faGFuZGxlciA6PSBmblxuXG5sZXQgZW1wdHlfYmFja3RyYWNlIDogcmF3X2JhY2t0cmFjZSA9IFt8IHxdXG5cbmxldCB0cnlfZ2V0X3Jhd19iYWNrdHJhY2UgKCkgPVxuICB0cnlcbiAgICBnZXRfcmF3X2JhY2t0cmFjZSAoKVxuICB3aXRoIF8gKCogT3V0X29mX21lbW9yeT8gKikgLT5cbiAgICBlbXB0eV9iYWNrdHJhY2VcblxubGV0IGhhbmRsZV91bmNhdWdodF9leGNlcHRpb24nIGV4biBkZWJ1Z2dlcl9pbl91c2UgPVxuICB0cnlcbiAgICAoKiBHZXQgdGhlIGJhY2t0cmFjZSBub3csIGluIGNhc2Ugb25lIG9mIHRoZSBbYXRfZXhpdF0gZnVuY3Rpb25cbiAgICAgICBkZXN0cm95cyBpdC4gKilcbiAgICBsZXQgcmF3X2JhY2t0cmFjZSA9XG4gICAgICBpZiBkZWJ1Z2dlcl9pbl91c2UgKCogU2FtZSB0ZXN0IGFzIGluIFtydW50aW1lL3ByaW50ZXhjLmNdICopIHRoZW5cbiAgICAgICAgZW1wdHlfYmFja3RyYWNlXG4gICAgICBlbHNlXG4gICAgICAgIHRyeV9nZXRfcmF3X2JhY2t0cmFjZSAoKVxuICAgIGluXG4gICAgKHRyeSBTdGRsaWIuZG9fYXRfZXhpdCAoKSB3aXRoIF8gLT4gKCkpO1xuICAgIHRyeVxuICAgICAgIXVuY2F1Z2h0X2V4Y2VwdGlvbl9oYW5kbGVyIGV4biByYXdfYmFja3RyYWNlXG4gICAgd2l0aCBleG4nIC0+XG4gICAgICBsZXQgcmF3X2JhY2t0cmFjZScgPSB0cnlfZ2V0X3Jhd19iYWNrdHJhY2UgKCkgaW5cbiAgICAgIGVwcmludGYgXCJGYXRhbCBlcnJvcjogZXhjZXB0aW9uICVzXFxuXCIgKHRvX3N0cmluZyBleG4pO1xuICAgICAgcHJpbnRfcmF3X2JhY2t0cmFjZSBzdGRlcnIgcmF3X2JhY2t0cmFjZTtcbiAgICAgIGVwcmludGYgXCJGYXRhbCBlcnJvciBpbiB1bmNhdWdodCBleGNlcHRpb24gaGFuZGxlcjogZXhjZXB0aW9uICVzXFxuXCJcbiAgICAgICAgKHRvX3N0cmluZyBleG4nKTtcbiAgICAgIHByaW50X3Jhd19iYWNrdHJhY2Ugc3RkZXJyIHJhd19iYWNrdHJhY2UnO1xuICAgICAgZmx1c2ggc3RkZXJyXG4gIHdpdGhcbiAgICB8IE91dF9vZl9tZW1vcnkgLT5cbiAgICAgICAgcHJlcnJfZW5kbGluZVxuICAgICAgICAgIFwiRmF0YWwgZXJyb3I6IG91dCBvZiBtZW1vcnkgaW4gdW5jYXVnaHQgZXhjZXB0aW9uIGhhbmRsZXJcIlxuXG4oKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBbY2FtbF9mYXRhbF91bmNhdWdodF9leGNlcHRpb25dIGluXG4gICBbcnVudGltZS9wcmludGV4Yy5jXSB3aGljaCBleHBlY3RzIG5vIGV4Y2VwdGlvbiBpcyByYWlzZWQuICopXG5sZXQgaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvbiBleG4gZGVidWdnZXJfaW5fdXNlID1cbiAgdHJ5XG4gICAgaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvbicgZXhuIGRlYnVnZ2VyX2luX3VzZVxuICB3aXRoIF8gLT5cbiAgICAoKiBUaGVyZSBpcyBub3QgbXVjaCB3ZSBjYW4gZG8gYXQgdGhpcyBwb2ludCAqKVxuICAgICgpXG5cbmV4dGVybmFsIHJlZ2lzdGVyX25hbWVkX3ZhbHVlIDogc3RyaW5nIC0+ICdhIC0+IHVuaXRcbiAgPSBcImNhbWxfcmVnaXN0ZXJfbmFtZWRfdmFsdWVcIlxuXG5sZXQgKCkgPVxuICByZWdpc3Rlcl9uYW1lZF92YWx1ZSBcIlByaW50ZXhjLmhhbmRsZV91bmNhdWdodF9leGNlcHRpb25cIlxuICAgIGhhbmRsZV91bmNhdWdodF9leGNlcHRpb25cbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICBYYXZpZXIgTGVyb3kgYW5kIERhbWllbiBEb2xpZ2V6LCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxubGV0IGdlbmVyaWNfcXVvdGUgcXVvdGVxdW90ZSBzID1cbiAgbGV0IGwgPSBTdHJpbmcubGVuZ3RoIHMgaW5cbiAgbGV0IGIgPSBCdWZmZXIuY3JlYXRlIChsICsgMjApIGluXG4gIEJ1ZmZlci5hZGRfY2hhciBiICdcXCcnO1xuICBmb3IgaSA9IDAgdG8gbCAtIDEgZG9cbiAgICBpZiBzLltpXSA9ICdcXCcnXG4gICAgdGhlbiBCdWZmZXIuYWRkX3N0cmluZyBiIHF1b3RlcXVvdGVcbiAgICBlbHNlIEJ1ZmZlci5hZGRfY2hhciBiICBzLltpXVxuICBkb25lO1xuICBCdWZmZXIuYWRkX2NoYXIgYiAnXFwnJztcbiAgQnVmZmVyLmNvbnRlbnRzIGJcblxuKCogVGhpcyBmdW5jdGlvbiBpbXBsZW1lbnRzIHRoZSBPcGVuIEdyb3VwIHNwZWNpZmljYXRpb24gZm91bmQgaGVyZTpcbiAgW1sxXV0gaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzk2OTk5MTk3OTkvdXRpbGl0aWVzL2Jhc2VuYW1lLmh0bWxcbiAgSW4gc3RlcCAxIG9mIFtbMV1dLCB3ZSBjaG9vc2UgdG8gcmV0dXJuIFwiLlwiIGZvciBlbXB0eSBpbnB1dC5cbiAgICAoZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBwcmV2aW91cyB2ZXJzaW9ucyBvZiBPQ2FtbClcbiAgSW4gc3RlcCAyLCB3ZSBjaG9vc2UgdG8gcHJvY2VzcyBcIi8vXCIgbm9ybWFsbHkuXG4gIFN0ZXAgNiBpcyBub3QgaW1wbGVtZW50ZWQ6IHdlIGNvbnNpZGVyIHRoYXQgdGhlIFtzdWZmaXhdIG9wZXJhbmQgaXNcbiAgICBhbHdheXMgYWJzZW50LiAgU3VmZml4ZXMgYXJlIGhhbmRsZWQgYnkgW2Nob3Bfc3VmZml4XSBhbmQgW2Nob3BfZXh0ZW5zaW9uXS5cbiopXG5sZXQgZ2VuZXJpY19iYXNlbmFtZSBpc19kaXJfc2VwIGN1cnJlbnRfZGlyX25hbWUgbmFtZSA9XG4gIGxldCByZWMgZmluZF9lbmQgbiA9XG4gICAgaWYgbiA8IDAgdGhlbiBTdHJpbmcuc3ViIG5hbWUgMCAxXG4gICAgZWxzZSBpZiBpc19kaXJfc2VwIG5hbWUgbiB0aGVuIGZpbmRfZW5kIChuIC0gMSlcbiAgICBlbHNlIGZpbmRfYmVnIG4gKG4gKyAxKVxuICBhbmQgZmluZF9iZWcgbiBwID1cbiAgICBpZiBuIDwgMCB0aGVuIFN0cmluZy5zdWIgbmFtZSAwIHBcbiAgICBlbHNlIGlmIGlzX2Rpcl9zZXAgbmFtZSBuIHRoZW4gU3RyaW5nLnN1YiBuYW1lIChuICsgMSkgKHAgLSBuIC0gMSlcbiAgICBlbHNlIGZpbmRfYmVnIChuIC0gMSkgcFxuICBpblxuICBpZiBuYW1lID0gXCJcIlxuICB0aGVuIGN1cnJlbnRfZGlyX25hbWVcbiAgZWxzZSBmaW5kX2VuZCAoU3RyaW5nLmxlbmd0aCBuYW1lIC0gMSlcblxuKCogVGhpcyBmdW5jdGlvbiBpbXBsZW1lbnRzIHRoZSBPcGVuIEdyb3VwIHNwZWNpZmljYXRpb24gZm91bmQgaGVyZTpcbiAgW1syXV0gaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzk2OTk5MTk3OTkvdXRpbGl0aWVzL2Rpcm5hbWUuaHRtbFxuICBJbiBzdGVwIDYgb2YgW1syXV0sIHdlIGNob29zZSB0byBwcm9jZXNzIFwiLy9cIiBub3JtYWxseS5cbiopXG5sZXQgZ2VuZXJpY19kaXJuYW1lIGlzX2Rpcl9zZXAgY3VycmVudF9kaXJfbmFtZSBuYW1lID1cbiAgbGV0IHJlYyB0cmFpbGluZ19zZXAgbiA9XG4gICAgaWYgbiA8IDAgdGhlbiBTdHJpbmcuc3ViIG5hbWUgMCAxXG4gICAgZWxzZSBpZiBpc19kaXJfc2VwIG5hbWUgbiB0aGVuIHRyYWlsaW5nX3NlcCAobiAtIDEpXG4gICAgZWxzZSBiYXNlIG5cbiAgYW5kIGJhc2UgbiA9XG4gICAgaWYgbiA8IDAgdGhlbiBjdXJyZW50X2Rpcl9uYW1lXG4gICAgZWxzZSBpZiBpc19kaXJfc2VwIG5hbWUgbiB0aGVuIGludGVybWVkaWF0ZV9zZXAgblxuICAgIGVsc2UgYmFzZSAobiAtIDEpXG4gIGFuZCBpbnRlcm1lZGlhdGVfc2VwIG4gPVxuICAgIGlmIG4gPCAwIHRoZW4gU3RyaW5nLnN1YiBuYW1lIDAgMVxuICAgIGVsc2UgaWYgaXNfZGlyX3NlcCBuYW1lIG4gdGhlbiBpbnRlcm1lZGlhdGVfc2VwIChuIC0gMSlcbiAgICBlbHNlIFN0cmluZy5zdWIgbmFtZSAwIChuICsgMSlcbiAgaW5cbiAgaWYgbmFtZSA9IFwiXCJcbiAgdGhlbiBjdXJyZW50X2Rpcl9uYW1lXG4gIGVsc2UgdHJhaWxpbmdfc2VwIChTdHJpbmcubGVuZ3RoIG5hbWUgLSAxKVxuXG5tb2R1bGUgdHlwZSBTWVNERVBTID0gc2lnXG4gIHZhbCBudWxsIDogc3RyaW5nXG4gIHZhbCBjdXJyZW50X2Rpcl9uYW1lIDogc3RyaW5nXG4gIHZhbCBwYXJlbnRfZGlyX25hbWUgOiBzdHJpbmdcbiAgdmFsIGRpcl9zZXAgOiBzdHJpbmdcbiAgdmFsIGlzX2Rpcl9zZXAgOiBzdHJpbmcgLT4gaW50IC0+IGJvb2xcbiAgdmFsIGlzX3JlbGF0aXZlIDogc3RyaW5nIC0+IGJvb2xcbiAgdmFsIGlzX2ltcGxpY2l0IDogc3RyaW5nIC0+IGJvb2xcbiAgdmFsIGNoZWNrX3N1ZmZpeCA6IHN0cmluZyAtPiBzdHJpbmcgLT4gYm9vbFxuICB2YWwgY2hvcF9zdWZmaXhfb3B0IDogc3VmZml4OnN0cmluZyAtPiBzdHJpbmcgLT4gc3RyaW5nIG9wdGlvblxuICB2YWwgdGVtcF9kaXJfbmFtZSA6IHN0cmluZ1xuICB2YWwgcXVvdGUgOiBzdHJpbmcgLT4gc3RyaW5nXG4gIHZhbCBxdW90ZV9jb21tYW5kIDpcbiAgICBzdHJpbmcgLT4gP3N0ZGluOiBzdHJpbmcgLT4gP3N0ZG91dDogc3RyaW5nIC0+ID9zdGRlcnI6IHN0cmluZ1xuICAgICAgICAgICAtPiBzdHJpbmcgbGlzdCAtPiBzdHJpbmdcbiAgdmFsIGJhc2VuYW1lIDogc3RyaW5nIC0+IHN0cmluZ1xuICB2YWwgZGlybmFtZSA6IHN0cmluZyAtPiBzdHJpbmdcbmVuZFxuXG5tb2R1bGUgVW5peCA6IFNZU0RFUFMgPSBzdHJ1Y3RcbiAgbGV0IG51bGwgPSBcIi9kZXYvbnVsbFwiXG4gIGxldCBjdXJyZW50X2Rpcl9uYW1lID0gXCIuXCJcbiAgbGV0IHBhcmVudF9kaXJfbmFtZSA9IFwiLi5cIlxuICBsZXQgZGlyX3NlcCA9IFwiL1wiXG4gIGxldCBpc19kaXJfc2VwIHMgaSA9IHMuW2ldID0gJy8nXG4gIGxldCBpc19yZWxhdGl2ZSBuID0gU3RyaW5nLmxlbmd0aCBuIDwgMSB8fCBuLlswXSA8PiAnLydcbiAgbGV0IGlzX2ltcGxpY2l0IG4gPVxuICAgIGlzX3JlbGF0aXZlIG5cbiAgICAmJiAoU3RyaW5nLmxlbmd0aCBuIDwgMiB8fCBTdHJpbmcuc3ViIG4gMCAyIDw+IFwiLi9cIilcbiAgICAmJiAoU3RyaW5nLmxlbmd0aCBuIDwgMyB8fCBTdHJpbmcuc3ViIG4gMCAzIDw+IFwiLi4vXCIpXG4gIGxldCBjaGVja19zdWZmaXggbmFtZSBzdWZmID1cbiAgICBTdHJpbmcuZW5kc193aXRoIH5zdWZmaXg6c3VmZiBuYW1lXG5cbiAgbGV0IGNob3Bfc3VmZml4X29wdCB+c3VmZml4IGZpbGVuYW1lID1cbiAgICBsZXQgbGVuX3MgPSBTdHJpbmcubGVuZ3RoIHN1ZmZpeCBhbmQgbGVuX2YgPSBTdHJpbmcubGVuZ3RoIGZpbGVuYW1lIGluXG4gICAgaWYgbGVuX2YgPj0gbGVuX3MgdGhlblxuICAgICAgbGV0IHIgPSBTdHJpbmcuc3ViIGZpbGVuYW1lIChsZW5fZiAtIGxlbl9zKSBsZW5fcyBpblxuICAgICAgaWYgciA9IHN1ZmZpeCB0aGVuXG4gICAgICAgIFNvbWUgKFN0cmluZy5zdWIgZmlsZW5hbWUgMCAobGVuX2YgLSBsZW5fcykpXG4gICAgICBlbHNlXG4gICAgICAgIE5vbmVcbiAgICBlbHNlXG4gICAgICBOb25lXG5cbiAgbGV0IHRlbXBfZGlyX25hbWUgPVxuICAgIHRyeSBTeXMuZ2V0ZW52IFwiVE1QRElSXCIgd2l0aCBOb3RfZm91bmQgLT4gXCIvdG1wXCJcbiAgbGV0IHF1b3RlID0gZ2VuZXJpY19xdW90ZSBcIidcXFxcJydcIlxuICBsZXQgcXVvdGVfY29tbWFuZCBjbWQgP3N0ZGluID9zdGRvdXQgP3N0ZGVyciBhcmdzID1cbiAgICBTdHJpbmcuY29uY2F0IFwiIFwiIChMaXN0Lm1hcCBxdW90ZSAoY21kIDo6IGFyZ3MpKVxuICAgIF4gKG1hdGNoIHN0ZGluICB3aXRoIE5vbmUgLT4gXCJcIiB8IFNvbWUgZiAtPiBcIiA8XCIgXiBxdW90ZSBmKVxuICAgIF4gKG1hdGNoIHN0ZG91dCB3aXRoIE5vbmUgLT4gXCJcIiB8IFNvbWUgZiAtPiBcIiA+XCIgXiBxdW90ZSBmKVxuICAgIF4gKG1hdGNoIHN0ZGVyciB3aXRoIE5vbmUgLT4gXCJcIiB8IFNvbWUgZiAtPiBpZiBzdGRlcnIgPSBzdGRvdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW4gXCIgMj4mMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFwiIDI+XCIgXiBxdW90ZSBmKVxuICBsZXQgYmFzZW5hbWUgPSBnZW5lcmljX2Jhc2VuYW1lIGlzX2Rpcl9zZXAgY3VycmVudF9kaXJfbmFtZVxuICBsZXQgZGlybmFtZSA9IGdlbmVyaWNfZGlybmFtZSBpc19kaXJfc2VwIGN1cnJlbnRfZGlyX25hbWVcbmVuZFxuXG5tb2R1bGUgV2luMzIgOiBTWVNERVBTID0gc3RydWN0XG4gIGxldCBudWxsID0gXCJOVUxcIlxuICBsZXQgY3VycmVudF9kaXJfbmFtZSA9IFwiLlwiXG4gIGxldCBwYXJlbnRfZGlyX25hbWUgPSBcIi4uXCJcbiAgbGV0IGRpcl9zZXAgPSBcIlxcXFxcIlxuICBsZXQgaXNfZGlyX3NlcCBzIGkgPSBsZXQgYyA9IHMuW2ldIGluIGMgPSAnLycgfHwgYyA9ICdcXFxcJyB8fCBjID0gJzonXG4gIGxldCBpc19yZWxhdGl2ZSBuID1cbiAgICAoU3RyaW5nLmxlbmd0aCBuIDwgMSB8fCBuLlswXSA8PiAnLycpXG4gICAgJiYgKFN0cmluZy5sZW5ndGggbiA8IDEgfHwgbi5bMF0gPD4gJ1xcXFwnKVxuICAgICYmIChTdHJpbmcubGVuZ3RoIG4gPCAyIHx8IG4uWzFdIDw+ICc6JylcbiAgbGV0IGlzX2ltcGxpY2l0IG4gPVxuICAgIGlzX3JlbGF0aXZlIG5cbiAgICAmJiAoU3RyaW5nLmxlbmd0aCBuIDwgMiB8fCBTdHJpbmcuc3ViIG4gMCAyIDw+IFwiLi9cIilcbiAgICAmJiAoU3RyaW5nLmxlbmd0aCBuIDwgMiB8fCBTdHJpbmcuc3ViIG4gMCAyIDw+IFwiLlxcXFxcIilcbiAgICAmJiAoU3RyaW5nLmxlbmd0aCBuIDwgMyB8fCBTdHJpbmcuc3ViIG4gMCAzIDw+IFwiLi4vXCIpXG4gICAgJiYgKFN0cmluZy5sZW5ndGggbiA8IDMgfHwgU3RyaW5nLnN1YiBuIDAgMyA8PiBcIi4uXFxcXFwiKVxuICBsZXQgY2hlY2tfc3VmZml4IG5hbWUgc3VmZiA9XG4gICBTdHJpbmcubGVuZ3RoIG5hbWUgPj0gU3RyaW5nLmxlbmd0aCBzdWZmICYmXG4gICAobGV0IHMgPSBTdHJpbmcuc3ViIG5hbWUgKFN0cmluZy5sZW5ndGggbmFtZSAtIFN0cmluZy5sZW5ndGggc3VmZilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU3RyaW5nLmxlbmd0aCBzdWZmKSBpblxuICAgIFN0cmluZy5sb3dlcmNhc2VfYXNjaWkgcyA9IFN0cmluZy5sb3dlcmNhc2VfYXNjaWkgc3VmZilcblxuICBsZXQgY2hvcF9zdWZmaXhfb3B0IH5zdWZmaXggZmlsZW5hbWUgPVxuICAgIGxldCBsZW5fcyA9IFN0cmluZy5sZW5ndGggc3VmZml4IGFuZCBsZW5fZiA9IFN0cmluZy5sZW5ndGggZmlsZW5hbWUgaW5cbiAgICBpZiBsZW5fZiA+PSBsZW5fcyB0aGVuXG4gICAgICBsZXQgciA9IFN0cmluZy5zdWIgZmlsZW5hbWUgKGxlbl9mIC0gbGVuX3MpIGxlbl9zIGluXG4gICAgICBpZiBTdHJpbmcubG93ZXJjYXNlX2FzY2lpIHIgPSBTdHJpbmcubG93ZXJjYXNlX2FzY2lpIHN1ZmZpeCB0aGVuXG4gICAgICAgIFNvbWUgKFN0cmluZy5zdWIgZmlsZW5hbWUgMCAobGVuX2YgLSBsZW5fcykpXG4gICAgICBlbHNlXG4gICAgICAgIE5vbmVcbiAgICBlbHNlXG4gICAgICBOb25lXG5cblxuICBsZXQgdGVtcF9kaXJfbmFtZSA9XG4gICAgdHJ5IFN5cy5nZXRlbnYgXCJURU1QXCIgd2l0aCBOb3RfZm91bmQgLT4gXCIuXCJcbiAgbGV0IHF1b3RlIHMgPVxuICAgIGxldCBsID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gICAgbGV0IGIgPSBCdWZmZXIuY3JlYXRlIChsICsgMjApIGluXG4gICAgQnVmZmVyLmFkZF9jaGFyIGIgJ1xcXCInO1xuICAgIGxldCByZWMgbG9vcCBpID1cbiAgICAgIGlmIGkgPSBsIHRoZW4gQnVmZmVyLmFkZF9jaGFyIGIgJ1xcXCInIGVsc2VcbiAgICAgIG1hdGNoIHMuW2ldIHdpdGhcbiAgICAgIHwgJ1xcXCInIC0+IGxvb3BfYnMgMCBpO1xuICAgICAgfCAnXFxcXCcgLT4gbG9vcF9icyAwIGk7XG4gICAgICB8IGMgICAgLT4gQnVmZmVyLmFkZF9jaGFyIGIgYzsgbG9vcCAoaSsxKTtcbiAgICBhbmQgbG9vcF9icyBuIGkgPVxuICAgICAgaWYgaSA9IGwgdGhlbiBiZWdpblxuICAgICAgICBCdWZmZXIuYWRkX2NoYXIgYiAnXFxcIic7XG4gICAgICAgIGFkZF9icyBuO1xuICAgICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgICAgbWF0Y2ggcy5baV0gd2l0aFxuICAgICAgICB8ICdcXFwiJyAtPiBhZGRfYnMgKDIqbisxKTsgQnVmZmVyLmFkZF9jaGFyIGIgJ1xcXCInOyBsb29wIChpKzEpO1xuICAgICAgICB8ICdcXFxcJyAtPiBsb29wX2JzIChuKzEpIChpKzEpO1xuICAgICAgICB8IF8gICAgLT4gYWRkX2JzIG47IGxvb3AgaVxuICAgICAgZW5kXG4gICAgYW5kIGFkZF9icyBuID0gZm9yIF9qID0gMSB0byBuIGRvIEJ1ZmZlci5hZGRfY2hhciBiICdcXFxcJzsgZG9uZVxuICAgIGluXG4gICAgbG9vcCAwO1xuICAgIEJ1ZmZlci5jb250ZW50cyBiXG4oKlxuUXVvdGluZyBjb21tYW5kcyBmb3IgZXhlY3V0aW9uIGJ5IGNtZC5leGUgaXMgZGlmZmljdWx0LlxuMS0gRWFjaCBhcmd1bWVudCBpcyBmaXJzdCBxdW90ZWQgdXNpbmcgdGhlIFwicXVvdGVcIiBmdW5jdGlvbiBhYm92ZSwgdG9cbiAgIHByb3RlY3QgaXQgYWdhaW5zdCB0aGUgcHJvY2Vzc2luZyBwZXJmb3JtZWQgYnkgdGhlIEMgcnVudGltZSBzeXN0ZW0sXG4gICB0aGVuIGNtZC5leGUncyBzcGVjaWFsIGNoYXJhY3RlcnMgYXJlIGVzY2FwZWQgd2l0aCAnXicsIHVzaW5nXG4gICB0aGUgXCJxdW90ZV9jbWRcIiBmdW5jdGlvbiBiZWxvdy4gIEZvciBtb3JlIGRldGFpbHMsIHNlZVxuICAgaHR0cHM6Ly9ibG9ncy5tc2RuLm1pY3Jvc29mdC5jb20vdHdpc3R5bGl0dGxlcGFzc2FnZXNhbGxhbGlrZS8yMDExLzA0LzIzXG4yLSBUaGUgY29tbWFuZCBhbmQgdGhlIHJlZGlyZWN0aW9uIGZpbGVzLCBpZiBhbnksIG11c3QgYmUgZG91YmxlLXF1b3RlZFxuICAgaW4gY2FzZSB0aGV5IGNvbnRhaW4gc3BhY2VzLiAgVGhpcyBxdW90aW5nIGlzIGludGVycHJldGVkIGJ5IGNtZC5leGUsXG4gICBub3QgYnkgdGhlIEMgcnVudGltZSBzeXN0ZW0sIGhlbmNlIHRoZSBcInF1b3RlXCIgZnVuY3Rpb24gYWJvdmVcbiAgIGNhbm5vdCBiZSB1c2VkLiAgVGhlIHR3byBjaGFyYWN0ZXJzIHdlIGRvbid0IGtub3cgaG93IHRvIHF1b3RlXG4gICBpbnNpZGUgYSBkb3VibGUtcXVvdGVkIGNtZC5leGUgc3RyaW5nIGFyZSBkb3VibGUtcXVvdGUgYW5kIHBlcmNlbnQuXG4gICBXZSBqdXN0IGZhaWwgaWYgdGhlIGNvbW1hbmQgbmFtZSBvciB0aGUgcmVkaXJlY3Rpb24gZmlsZSBuYW1lc1xuICAgY29udGFpbiBhIGRvdWJsZSBxdW90ZSAobm90IGFsbG93ZWQgaW4gV2luZG93cyBmaWxlIG5hbWVzLCBhbnl3YXkpXG4gICBvciBhIHBlcmNlbnQuICBTZWUgZnVuY3Rpb24gXCJxdW90ZV9jbWRfZmlsZW5hbWVcIiBiZWxvdy5cbjMtIFRoZSB3aG9sZSBzdHJpbmcgcGFzc2VkIHRvIFN5cy5jb21tYW5kIGlzIHRoZW4gZW5jbG9zZWQgaW4gZG91YmxlXG4gICBxdW90ZXMsIHdoaWNoIGFyZSBpbW1lZGlhdGVseSBzdHJpcHBlZCBieSBjbWQuZXhlLiAgT3RoZXJ3aXNlLFxuICAgc29tZSBvZiB0aGUgZG91YmxlIHF1b3RlcyBmcm9tIHN0ZXAgMiBhYm92ZSBjYW4gYmUgbWlzcGFyc2VkLlxuICAgU2VlIGUuZy4gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzk5NjUxNDFcbiopXG4gIGxldCBxdW90ZV9jbWQgcyA9XG4gICAgbGV0IGIgPSBCdWZmZXIuY3JlYXRlIChTdHJpbmcubGVuZ3RoIHMgKyAyMCkgaW5cbiAgICBTdHJpbmcuaXRlclxuICAgICAgKGZ1biBjIC0+XG4gICAgICAgIG1hdGNoIGMgd2l0aFxuICAgICAgICB8ICcoJyB8ICcpJyB8ICchJyB8ICdeJyB8ICclJyB8ICdcXFwiJyB8ICc8JyB8ICc+JyB8ICcmJyB8ICd8JyAtPlxuICAgICAgICAgICAgQnVmZmVyLmFkZF9jaGFyIGIgJ14nOyBCdWZmZXIuYWRkX2NoYXIgYiBjXG4gICAgICAgIHwgXyAtPlxuICAgICAgICAgICAgQnVmZmVyLmFkZF9jaGFyIGIgYylcbiAgICAgIHM7XG4gICAgQnVmZmVyLmNvbnRlbnRzIGJcbiAgbGV0IHF1b3RlX2NtZF9maWxlbmFtZSBmID1cbiAgICBpZiBTdHJpbmcuY29udGFpbnMgZiAnXFxcIicgfHwgU3RyaW5nLmNvbnRhaW5zIGYgJyUnIHRoZW5cbiAgICAgIGZhaWx3aXRoIChcIkZpbGVuYW1lLnF1b3RlX2NvbW1hbmQ6IGJhZCBmaWxlIG5hbWUgXCIgXiBmKVxuICAgIGVsc2UgaWYgU3RyaW5nLmNvbnRhaW5zIGYgJyAnIHRoZW5cbiAgICAgIFwiXFxcIlwiIF4gZiBeIFwiXFxcIlwiXG4gICAgZWxzZVxuICAgICAgZlxuICAoKiBSZWRpcmVjdGlvbnMgaW4gY21kLmV4ZTogc2VlIGh0dHBzOi8vc3M2NC5jb20vbnQvc3ludGF4LXJlZGlyZWN0aW9uLmh0bWxcbiAgICAgYW5kIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3ByZXZpb3VzLXZlcnNpb25zL3dpbmRvd3MvaXQtcHJvL3dpbmRvd3MteHAvYmI0OTA5ODIodj10ZWNobmV0LjEwKVxuICAqKVxuICBsZXQgcXVvdGVfY29tbWFuZCBjbWQgP3N0ZGluID9zdGRvdXQgP3N0ZGVyciBhcmdzID1cbiAgICBTdHJpbmcuY29uY2F0IFwiXCIgW1xuICAgICAgXCJcXFwiXCI7XG4gICAgICBxdW90ZV9jbWRfZmlsZW5hbWUgY21kO1xuICAgICAgXCIgXCI7XG4gICAgICBxdW90ZV9jbWQgKFN0cmluZy5jb25jYXQgXCIgXCIgKExpc3QubWFwIHF1b3RlIGFyZ3MpKTtcbiAgICAgIChtYXRjaCBzdGRpbiAgd2l0aCBOb25lIC0+IFwiXCIgfCBTb21lIGYgLT4gXCIgPFwiIF4gcXVvdGVfY21kX2ZpbGVuYW1lIGYpO1xuICAgICAgKG1hdGNoIHN0ZG91dCB3aXRoIE5vbmUgLT4gXCJcIiB8IFNvbWUgZiAtPiBcIiA+XCIgXiBxdW90ZV9jbWRfZmlsZW5hbWUgZik7XG4gICAgICAobWF0Y2ggc3RkZXJyIHdpdGggTm9uZSAtPiBcIlwiIHwgU29tZSBmIC0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgc3RkZXJyID0gc3Rkb3V0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbiBcIiAyPiYxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIFwiIDI+XCIgXiBxdW90ZV9jbWRfZmlsZW5hbWUgZik7XG4gICAgICBcIlxcXCJcIlxuICAgIF1cbiAgbGV0IGhhc19kcml2ZSBzID1cbiAgICBsZXQgaXNfbGV0dGVyID0gZnVuY3Rpb25cbiAgICAgIHwgJ0EnIC4uICdaJyB8ICdhJyAuLiAneicgLT4gdHJ1ZVxuICAgICAgfCBfIC0+IGZhbHNlXG4gICAgaW5cbiAgICBTdHJpbmcubGVuZ3RoIHMgPj0gMiAmJiBpc19sZXR0ZXIgcy5bMF0gJiYgcy5bMV0gPSAnOidcbiAgbGV0IGRyaXZlX2FuZF9wYXRoIHMgPVxuICAgIGlmIGhhc19kcml2ZSBzXG4gICAgdGhlbiAoU3RyaW5nLnN1YiBzIDAgMiwgU3RyaW5nLnN1YiBzIDIgKFN0cmluZy5sZW5ndGggcyAtIDIpKVxuICAgIGVsc2UgKFwiXCIsIHMpXG4gIGxldCBkaXJuYW1lIHMgPVxuICAgIGxldCAoZHJpdmUsIHBhdGgpID0gZHJpdmVfYW5kX3BhdGggcyBpblxuICAgIGxldCBkaXIgPSBnZW5lcmljX2Rpcm5hbWUgaXNfZGlyX3NlcCBjdXJyZW50X2Rpcl9uYW1lIHBhdGggaW5cbiAgICBkcml2ZSBeIGRpclxuICBsZXQgYmFzZW5hbWUgcyA9XG4gICAgbGV0IChfZHJpdmUsIHBhdGgpID0gZHJpdmVfYW5kX3BhdGggcyBpblxuICAgIGdlbmVyaWNfYmFzZW5hbWUgaXNfZGlyX3NlcCBjdXJyZW50X2Rpcl9uYW1lIHBhdGhcbmVuZFxuXG5tb2R1bGUgQ3lnd2luIDogU1lTREVQUyA9IHN0cnVjdFxuICBsZXQgbnVsbCA9IFwiL2Rldi9udWxsXCJcbiAgbGV0IGN1cnJlbnRfZGlyX25hbWUgPSBcIi5cIlxuICBsZXQgcGFyZW50X2Rpcl9uYW1lID0gXCIuLlwiXG4gIGxldCBkaXJfc2VwID0gXCIvXCJcbiAgbGV0IGlzX2Rpcl9zZXAgPSBXaW4zMi5pc19kaXJfc2VwXG4gIGxldCBpc19yZWxhdGl2ZSA9IFdpbjMyLmlzX3JlbGF0aXZlXG4gIGxldCBpc19pbXBsaWNpdCA9IFdpbjMyLmlzX2ltcGxpY2l0XG4gIGxldCBjaGVja19zdWZmaXggPSBXaW4zMi5jaGVja19zdWZmaXhcbiAgbGV0IGNob3Bfc3VmZml4X29wdCA9IFdpbjMyLmNob3Bfc3VmZml4X29wdFxuICBsZXQgdGVtcF9kaXJfbmFtZSA9IFVuaXgudGVtcF9kaXJfbmFtZVxuICBsZXQgcXVvdGUgPSBVbml4LnF1b3RlXG4gIGxldCBxdW90ZV9jb21tYW5kID0gVW5peC5xdW90ZV9jb21tYW5kXG4gIGxldCBiYXNlbmFtZSA9IGdlbmVyaWNfYmFzZW5hbWUgaXNfZGlyX3NlcCBjdXJyZW50X2Rpcl9uYW1lXG4gIGxldCBkaXJuYW1lID0gZ2VuZXJpY19kaXJuYW1lIGlzX2Rpcl9zZXAgY3VycmVudF9kaXJfbmFtZVxuZW5kXG5cbm1vZHVsZSBTeXNkZXBzID1cbiAgKHZhbCAobWF0Y2ggU3lzLm9zX3R5cGUgd2l0aFxuICAgICAgIHwgXCJXaW4zMlwiIC0+IChtb2R1bGUgV2luMzI6IFNZU0RFUFMpXG4gICAgICAgfCBcIkN5Z3dpblwiIC0+IChtb2R1bGUgQ3lnd2luOiBTWVNERVBTKVxuICAgICAgIHwgXyAtPiAobW9kdWxlIFVuaXg6IFNZU0RFUFMpKSlcblxuaW5jbHVkZSBTeXNkZXBzXG5cbmxldCBjb25jYXQgZGlybmFtZSBmaWxlbmFtZSA9XG4gIGxldCBsID0gU3RyaW5nLmxlbmd0aCBkaXJuYW1lIGluXG4gIGlmIGwgPSAwIHx8IGlzX2Rpcl9zZXAgZGlybmFtZSAobC0xKVxuICB0aGVuIGRpcm5hbWUgXiBmaWxlbmFtZVxuICBlbHNlIGRpcm5hbWUgXiBkaXJfc2VwIF4gZmlsZW5hbWVcblxubGV0IGNob3Bfc3VmZml4IG5hbWUgc3VmZiA9XG4gIGxldCBuID0gU3RyaW5nLmxlbmd0aCBuYW1lIC0gU3RyaW5nLmxlbmd0aCBzdWZmIGluXG4gIGlmIG4gPCAwIHRoZW4gaW52YWxpZF9hcmcgXCJGaWxlbmFtZS5jaG9wX3N1ZmZpeFwiIGVsc2UgU3RyaW5nLnN1YiBuYW1lIDAgblxuXG5sZXQgZXh0ZW5zaW9uX2xlbiBuYW1lID1cbiAgbGV0IHJlYyBjaGVjayBpMCBpID1cbiAgICBpZiBpIDwgMCB8fCBpc19kaXJfc2VwIG5hbWUgaSB0aGVuIDBcbiAgICBlbHNlIGlmIG5hbWUuW2ldID0gJy4nIHRoZW4gY2hlY2sgaTAgKGkgLSAxKVxuICAgIGVsc2UgU3RyaW5nLmxlbmd0aCBuYW1lIC0gaTBcbiAgaW5cbiAgbGV0IHJlYyBzZWFyY2hfZG90IGkgPVxuICAgIGlmIGkgPCAwIHx8IGlzX2Rpcl9zZXAgbmFtZSBpIHRoZW4gMFxuICAgIGVsc2UgaWYgbmFtZS5baV0gPSAnLicgdGhlbiBjaGVjayBpIChpIC0gMSlcbiAgICBlbHNlIHNlYXJjaF9kb3QgKGkgLSAxKVxuICBpblxuICBzZWFyY2hfZG90IChTdHJpbmcubGVuZ3RoIG5hbWUgLSAxKVxuXG5sZXQgZXh0ZW5zaW9uIG5hbWUgPVxuICBsZXQgbCA9IGV4dGVuc2lvbl9sZW4gbmFtZSBpblxuICBpZiBsID0gMCB0aGVuIFwiXCIgZWxzZSBTdHJpbmcuc3ViIG5hbWUgKFN0cmluZy5sZW5ndGggbmFtZSAtIGwpIGxcblxubGV0IGNob3BfZXh0ZW5zaW9uIG5hbWUgPVxuICBsZXQgbCA9IGV4dGVuc2lvbl9sZW4gbmFtZSBpblxuICBpZiBsID0gMCB0aGVuIGludmFsaWRfYXJnIFwiRmlsZW5hbWUuY2hvcF9leHRlbnNpb25cIlxuICBlbHNlIFN0cmluZy5zdWIgbmFtZSAwIChTdHJpbmcubGVuZ3RoIG5hbWUgLSBsKVxuXG5sZXQgcmVtb3ZlX2V4dGVuc2lvbiBuYW1lID1cbiAgbGV0IGwgPSBleHRlbnNpb25fbGVuIG5hbWUgaW5cbiAgaWYgbCA9IDAgdGhlbiBuYW1lIGVsc2UgU3RyaW5nLnN1YiBuYW1lIDAgKFN0cmluZy5sZW5ndGggbmFtZSAtIGwpXG5cbmV4dGVybmFsIG9wZW5fZGVzYzogc3RyaW5nIC0+IG9wZW5fZmxhZyBsaXN0IC0+IGludCAtPiBpbnQgPSBcImNhbWxfc3lzX29wZW5cIlxuZXh0ZXJuYWwgY2xvc2VfZGVzYzogaW50IC0+IHVuaXQgPSBcImNhbWxfc3lzX2Nsb3NlXCJcblxubGV0IHBybmcgPSBsYXp5KFJhbmRvbS5TdGF0ZS5tYWtlX3NlbGZfaW5pdCAoKSlcblxubGV0IHRlbXBfZmlsZV9uYW1lIHRlbXBfZGlyIHByZWZpeCBzdWZmaXggPVxuICBsZXQgcm5kID0gKFJhbmRvbS5TdGF0ZS5iaXRzIChMYXp5LmZvcmNlIHBybmcpKSBsYW5kIDB4RkZGRkZGIGluXG4gIGNvbmNhdCB0ZW1wX2RpciAoUHJpbnRmLnNwcmludGYgXCIlcyUwNnglc1wiIHByZWZpeCBybmQgc3VmZml4KVxuXG5cbmxldCBjdXJyZW50X3RlbXBfZGlyX25hbWUgPSByZWYgdGVtcF9kaXJfbmFtZVxuXG5sZXQgc2V0X3RlbXBfZGlyX25hbWUgcyA9IGN1cnJlbnRfdGVtcF9kaXJfbmFtZSA6PSBzXG5sZXQgZ2V0X3RlbXBfZGlyX25hbWUgKCkgPSAhY3VycmVudF90ZW1wX2Rpcl9uYW1lXG5cbmxldCB0ZW1wX2ZpbGUgPyh0ZW1wX2RpciA9ICFjdXJyZW50X3RlbXBfZGlyX25hbWUpIHByZWZpeCBzdWZmaXggPVxuICBsZXQgcmVjIHRyeV9uYW1lIGNvdW50ZXIgPVxuICAgIGxldCBuYW1lID0gdGVtcF9maWxlX25hbWUgdGVtcF9kaXIgcHJlZml4IHN1ZmZpeCBpblxuICAgIHRyeVxuICAgICAgY2xvc2VfZGVzYyhvcGVuX2Rlc2MgbmFtZSBbT3Blbl93cm9ubHk7IE9wZW5fY3JlYXQ7IE9wZW5fZXhjbF0gMG82MDApO1xuICAgICAgbmFtZVxuICAgIHdpdGggU3lzX2Vycm9yIF8gYXMgZSAtPlxuICAgICAgaWYgY291bnRlciA+PSAxMDAwIHRoZW4gcmFpc2UgZSBlbHNlIHRyeV9uYW1lIChjb3VudGVyICsgMSlcbiAgaW4gdHJ5X25hbWUgMFxuXG5sZXQgb3Blbl90ZW1wX2ZpbGUgPyhtb2RlID0gW09wZW5fdGV4dF0pID8ocGVybXMgPSAwbzYwMClcbiAgICAgICAgICAgICAgICAgICA/KHRlbXBfZGlyID0gIWN1cnJlbnRfdGVtcF9kaXJfbmFtZSkgcHJlZml4IHN1ZmZpeCA9XG4gIGxldCByZWMgdHJ5X25hbWUgY291bnRlciA9XG4gICAgbGV0IG5hbWUgPSB0ZW1wX2ZpbGVfbmFtZSB0ZW1wX2RpciBwcmVmaXggc3VmZml4IGluXG4gICAgdHJ5XG4gICAgICAobmFtZSxcbiAgICAgICBvcGVuX291dF9nZW4gKE9wZW5fd3Jvbmx5OjpPcGVuX2NyZWF0OjpPcGVuX2V4Y2w6Om1vZGUpIHBlcm1zIG5hbWUpXG4gICAgd2l0aCBTeXNfZXJyb3IgXyBhcyBlIC0+XG4gICAgICBpZiBjb3VudGVyID49IDEwMDAgdGhlbiByYWlzZSBlIGVsc2UgdHJ5X25hbWUgKGNvdW50ZXIgKyAxKVxuICBpbiB0cnlfbmFtZSAwXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDAyIEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIENvbXBsZXggbnVtYmVycyAqKVxuXG50eXBlIHQgPSB7IHJlOiBmbG9hdDsgaW06IGZsb2F0IH1cblxubGV0IHplcm8gPSB7IHJlID0gMC4wOyBpbSA9IDAuMCB9XG5sZXQgb25lID0geyByZSA9IDEuMDsgaW0gPSAwLjAgfVxubGV0IGkgPSB7IHJlID0gMC4wOyBpbSA9IDEuMCB9XG5cbmxldCBhZGQgeCB5ID0geyByZSA9IHgucmUgKy4geS5yZTsgaW0gPSB4LmltICsuIHkuaW0gfVxuXG5sZXQgc3ViIHggeSA9IHsgcmUgPSB4LnJlIC0uIHkucmU7IGltID0geC5pbSAtLiB5LmltIH1cblxubGV0IG5lZyB4ID0geyByZSA9IC0uIHgucmU7IGltID0gLS4geC5pbSB9XG5cbmxldCBjb25qIHggPSB7IHJlID0geC5yZTsgaW0gPSAtLiB4LmltIH1cblxubGV0IG11bCB4IHkgPSB7IHJlID0geC5yZSAqLiB5LnJlIC0uIHguaW0gKi4geS5pbTtcbiAgICAgICAgICAgICAgICBpbSA9IHgucmUgKi4geS5pbSArLiB4LmltICouIHkucmUgfVxuXG5sZXQgZGl2IHggeSA9XG4gIGlmIGFic19mbG9hdCB5LnJlID49IGFic19mbG9hdCB5LmltIHRoZW5cbiAgICBsZXQgciA9IHkuaW0gLy4geS5yZSBpblxuICAgIGxldCBkID0geS5yZSArLiByICouIHkuaW0gaW5cbiAgICB7IHJlID0gKHgucmUgKy4gciAqLiB4LmltKSAvLiBkO1xuICAgICAgaW0gPSAoeC5pbSAtLiByICouIHgucmUpIC8uIGQgfVxuICBlbHNlXG4gICAgbGV0IHIgPSB5LnJlIC8uIHkuaW0gaW5cbiAgICBsZXQgZCA9IHkuaW0gKy4gciAqLiB5LnJlIGluXG4gICAgeyByZSA9IChyICouIHgucmUgKy4geC5pbSkgLy4gZDtcbiAgICAgIGltID0gKHIgKi4geC5pbSAtLiB4LnJlKSAvLiBkIH1cblxubGV0IGludiB4ID0gZGl2IG9uZSB4XG5cbmxldCBub3JtMiB4ID0geC5yZSAqLiB4LnJlICsuIHguaW0gKi4geC5pbVxuXG5sZXQgbm9ybSB4ID1cbiAgKCogV2F0Y2ggb3V0IGZvciBvdmVyZmxvdyBpbiBjb21wdXRpbmcgcmVeMiArIGltXjIgKilcbiAgbGV0IHIgPSBhYnNfZmxvYXQgeC5yZSBhbmQgaSA9IGFic19mbG9hdCB4LmltIGluXG4gIGlmIHIgPSAwLjAgdGhlbiBpXG4gIGVsc2UgaWYgaSA9IDAuMCB0aGVuIHJcbiAgZWxzZSBpZiByID49IGkgdGhlblxuICAgIGxldCBxID0gaSAvLiByIGluIHIgKi4gc3FydCgxLjAgKy4gcSAqLiBxKVxuICBlbHNlXG4gICAgbGV0IHEgPSByIC8uIGkgaW4gaSAqLiBzcXJ0KDEuMCArLiBxICouIHEpXG5cbmxldCBhcmcgeCA9IGF0YW4yIHguaW0geC5yZVxuXG5sZXQgcG9sYXIgbiBhID0geyByZSA9IGNvcyBhICouIG47IGltID0gc2luIGEgKi4gbiB9XG5cbmxldCBzcXJ0IHggPVxuICBpZiB4LnJlID0gMC4wICYmIHguaW0gPSAwLjAgdGhlbiB7IHJlID0gMC4wOyBpbSA9IDAuMCB9XG4gIGVsc2UgYmVnaW5cbiAgICBsZXQgciA9IGFic19mbG9hdCB4LnJlIGFuZCBpID0gYWJzX2Zsb2F0IHguaW0gaW5cbiAgICBsZXQgdyA9XG4gICAgICBpZiByID49IGkgdGhlbiBiZWdpblxuICAgICAgICBsZXQgcSA9IGkgLy4gciBpblxuICAgICAgICBzcXJ0KHIpICouIHNxcnQoMC41ICouICgxLjAgKy4gc3FydCgxLjAgKy4gcSAqLiBxKSkpXG4gICAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgICBsZXQgcSA9IHIgLy4gaSBpblxuICAgICAgICBzcXJ0KGkpICouIHNxcnQoMC41ICouIChxICsuIHNxcnQoMS4wICsuIHEgKi4gcSkpKVxuICAgICAgZW5kIGluXG4gICAgaWYgeC5yZSA+PSAwLjBcbiAgICB0aGVuIHsgcmUgPSB3OyAgaW0gPSAwLjUgKi4geC5pbSAvLiB3IH1cbiAgICBlbHNlIHsgcmUgPSAwLjUgKi4gaSAvLiB3OyAgaW0gPSBpZiB4LmltID49IDAuMCB0aGVuIHcgZWxzZSAtLiB3IH1cbiAgZW5kXG5cbmxldCBleHAgeCA9XG4gIGxldCBlID0gZXhwIHgucmUgaW4geyByZSA9IGUgKi4gY29zIHguaW07IGltID0gZSAqLiBzaW4geC5pbSB9XG5cbmxldCBsb2cgeCA9IHsgcmUgPSBsb2cgKG5vcm0geCk7IGltID0gYXRhbjIgeC5pbSB4LnJlIH1cblxubGV0IHBvdyB4IHkgPSBleHAgKG11bCB5IChsb2cgeCkpXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgQmVub2l0IFZhdWdvbiwgRU5TVEEgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE0IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIFBhZGRpbmcgcG9zaXRpb24uICopXG50eXBlIHBhZHR5ID1cbiAgfCBMZWZ0ICAgKCogVGV4dCBpcyBsZWZ0IGp1c3RpZmllZCAoJy0nIG9wdGlvbikuICAgICAgICAgICAgICAgKilcbiAgfCBSaWdodCAgKCogVGV4dCBpcyByaWdodCBqdXN0aWZpZWQgKG5vICctJyBvcHRpb24pLiAgICAgICAgICAgKilcbiAgfCBaZXJvcyAgKCogVGV4dCBpcyByaWdodCBqdXN0aWZpZWQgYnkgemVyb3MgKHNlZSAnMCcgb3B0aW9uKS4gKilcblxuKCoqKilcblxuKCogSW50ZWdlciBjb252ZXJzaW9uLiAqKVxudHlwZSBpbnRfY29udiA9XG4gIHwgSW50X2QgfCBJbnRfcGQgfCBJbnRfc2QgICAgICAgICgqICAlZCB8ICUrZCB8ICUgZCAgKilcbiAgfCBJbnRfaSB8IEludF9waSB8IEludF9zaSAgICAgICAgKCogICVpIHwgJStpIHwgJSBpICAqKVxuICB8IEludF94IHwgSW50X0N4ICAgICAgICAgICAgICAgICAoKiAgJXggfCAlI3ggICAgICAgICopXG4gIHwgSW50X1ggfCBJbnRfQ1ggICAgICAgICAgICAgICAgICgqICAlWCB8ICUjWCAgICAgICAgKilcbiAgfCBJbnRfbyB8IEludF9DbyAgICAgICAgICAgICAgICAgKCogICVvIHwgJSNvICAgICAgICAqKVxuICB8IEludF91ICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAgJXUgICAgICAgICAgICAgICopXG4gIHwgSW50X0NkIHwgSW50X0NpIHwgSW50X0N1ICAgICAgICgqICAlI2QgfCAlI2kgfCAlI3UgKilcblxuKCogRmxvYXQgY29udmVyc2lvbi4gKilcbnR5cGUgZmxvYXRfZmxhZ19jb252ID1cbiAgfCBGbG9hdF9mbGFnXyAgICAgICAgICAgICAgICAgICAgKCogJVtmZUVnR0ZoSF0gKilcbiAgfCBGbG9hdF9mbGFnX3AgICAgICAgICAgICAgICAgICAgKCogJStbZmVFZ0dGaEhdICopXG4gIHwgRmxvYXRfZmxhZ19zICAgICAgICAgICAgICAgICAgICgqICUgW2ZlRWdHRmhIXSAqKVxudHlwZSBmbG9hdF9raW5kX2NvbnYgPVxuICB8IEZsb2F0X2YgICAgICAgICAgICAgICAgICAgICAgICAoKiAgJWYgfCAlK2YgfCAlIGYgICopXG4gIHwgRmxvYXRfZSAgICAgICAgICAgICAgICAgICAgICAgICgqICAlZSB8ICUrZSB8ICUgZSAgKilcbiAgfCBGbG9hdF9FICAgICAgICAgICAgICAgICAgICAgICAgKCogICVFIHwgJStFIHwgJSBFICAqKVxuICB8IEZsb2F0X2cgICAgICAgICAgICAgICAgICAgICAgICAoKiAgJWcgfCAlK2cgfCAlIGcgICopXG4gIHwgRmxvYXRfRyAgICAgICAgICAgICAgICAgICAgICAgICgqICAlRyB8ICUrRyB8ICUgRyAgKilcbiAgfCBGbG9hdF9GICAgICAgICAgICAgICAgICAgICAgICAgKCogICVGIHwgJStGIHwgJSBGICAqKVxuICB8IEZsb2F0X2ggICAgICAgICAgICAgICAgICAgICAgICAoKiAgJWggfCAlK2ggfCAlIGggICopXG4gIHwgRmxvYXRfSCAgICAgICAgICAgICAgICAgICAgICAgICgqICAlSCB8ICUrSCB8ICUgSCAgKilcbiAgfCBGbG9hdF9DRiAgICAgICAgICAgICAgICAgICAgICAgKCogICUjRnwgJSsjRnwgJSAjRiAqKVxudHlwZSBmbG9hdF9jb252ID0gZmxvYXRfZmxhZ19jb252ICogZmxvYXRfa2luZF9jb252XG5cbigqKiopXG5cbigqIENoYXIgc2V0cyAoc2VlICVbLi4uXSkgYXJlIGJpdG1hcHMgaW1wbGVtZW50ZWQgYXMgMzItY2hhciBzdHJpbmdzLiAqKVxudHlwZSBjaGFyX3NldCA9IHN0cmluZ1xuXG4oKioqKVxuXG4oKiBDb3VudGVyIHVzZWQgaW4gU2NhbmYuICopXG50eXBlIGNvdW50ZXIgPVxuICB8IExpbmVfY291bnRlciAgICAgKCogICVsICAgICAgKilcbiAgfCBDaGFyX2NvdW50ZXIgICAgICgqICAlbiAgICAgICopXG4gIHwgVG9rZW5fY291bnRlciAgICAoKiAgJU4sICVMICAqKVxuXG4oKioqKVxuXG4oKiBQYWRkaW5nIG9mIHN0cmluZ3MgYW5kIG51bWJlcnMuICopXG50eXBlICgnYSwgJ2IpIHBhZGRpbmcgPVxuICAoKiBObyBwYWRkaW5nIChleDogXCIlZFwiKSAqKVxuICB8IE5vX3BhZGRpbmcgIDogKCdhLCAnYSkgcGFkZGluZ1xuICAoKiBMaXRlcmFsIHBhZGRpbmcgKGV4OiBcIiU4ZFwiKSAqKVxuICB8IExpdF9wYWRkaW5nIDogcGFkdHkgKiBpbnQgLT4gKCdhLCAnYSkgcGFkZGluZ1xuICAoKiBQYWRkaW5nIGFzIGV4dHJhIGFyZ3VtZW50IChleDogXCIlKmRcIikgKilcbiAgfCBBcmdfcGFkZGluZyA6IHBhZHR5IC0+IChpbnQgLT4gJ2EsICdhKSBwYWRkaW5nXG5cbigqIFNvbWUgZm9ybWF0cywgc3VjaCBhcyAlX2QsXG4gICBvbmx5IGFjY2VwdCBhbiBvcHRpb25hbCBudW1iZXIgYXMgcGFkZGluZyBvcHRpb24gKG5vIGV4dHJhIGFyZ3VtZW50KSAqKVxudHlwZSBwYWRfb3B0aW9uID0gaW50IG9wdGlvblxuXG4oKiBQcmVjaXNpb24gb2YgZmxvYXRzIGFuZCAnMCctcGFkZGluZyBvZiBpbnRlZ2Vycy4gKilcbnR5cGUgKCdhLCAnYikgcHJlY2lzaW9uID1cbiAgKCogTm8gcHJlY2lzaW9uIChleDogXCIlZlwiKSAqKVxuICB8IE5vX3ByZWNpc2lvbiA6ICgnYSwgJ2EpIHByZWNpc2lvblxuICAoKiBMaXRlcmFsIHByZWNpc2lvbiAoZXg6IFwiJS4zZlwiKSAqKVxuICB8IExpdF9wcmVjaXNpb24gOiBpbnQgLT4gKCdhLCAnYSkgcHJlY2lzaW9uXG4gICgqIFByZWNpc2lvbiBhcyBleHRyYSBhcmd1bWVudCAoZXg6IFwiJS4qZlwiKSAqKVxuICB8IEFyZ19wcmVjaXNpb24gOiAoaW50IC0+ICdhLCAnYSkgcHJlY2lzaW9uXG5cbigqIFNvbWUgZm9ybWF0cywgc3VjaCBhcyAlX2YsXG4gICBvbmx5IGFjY2VwdCBhbiBvcHRpb25hbCBudW1iZXIgYXMgcHJlY2lzaW9uIG9wdGlvbiAobm8gZXh0cmEgYXJndW1lbnQpICopXG50eXBlIHByZWNfb3B0aW9uID0gaW50IG9wdGlvblxuXG4oKiBzZWUgdGhlIEN1c3RvbSBmb3JtYXQgY29tYmluYXRvciAqKVxudHlwZSAoJ2EsICdiLCAnYykgY3VzdG9tX2FyaXR5ID1cbiAgfCBDdXN0b21femVybyA6ICgnYSwgc3RyaW5nLCAnYSkgY3VzdG9tX2FyaXR5XG4gIHwgQ3VzdG9tX3N1Y2MgOiAoJ2EsICdiLCAnYykgY3VzdG9tX2FyaXR5IC0+XG4gICAgKCdhLCAneCAtPiAnYiwgJ3ggLT4gJ2MpIGN1c3RvbV9hcml0eVxuXG4oKioqKVxuXG4oKiAgICAgICAgUmVsYXRpb25hbCBmb3JtYXQgdHlwZXNcblxuSW4gdGhlIGZpcnN0IGZvcm1hdCtnYWR0cyBpbXBsZW1lbnRhdGlvbiwgdGhlIHR5cGUgZm9yICUoLi4lKSBpbiB0aGVcbmZtdCBHQURUIHdhcyBhcyBmb2xsb3dzOlxuXG58IEZvcm1hdF9zdWJzdCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICUoLi4uJSkgKilcbiAgICBwYWRfb3B0aW9uICogKCdkMSwgJ3ExLCAnZDIsICdxMikgcmVhZGVyX25iX3VuaWZpZXIgKlxuICAgICgneCwgJ2IsICdjLCAnZDEsICdxMSwgJ3UpIGZtdHR5ICpcbiAgICAoJ3UsICdiLCAnYywgJ3ExLCAnZTEsICdmKSBmbXQgLT5cbiAgICAgICgoJ3gsICdiLCAnYywgJ2QyLCAncTIsICd1KSBmb3JtYXQ2IC0+ICd4LCAnYiwgJ2MsICdkMSwgJ2UxLCAnZikgZm10XG5cbk5vdGljZSB0aGF0IHRoZSAndSBwYXJhbWV0ZXIgaW4gJ2YgcG9zaXRpb24gaW4gdGhlIGZvcm1hdCBhcmd1bWVudFxuKCgneCwgLi4sICd1KSBmb3JtYXQ2IC0+IC4uKSBpcyBlcXVhbCB0byB0aGUgJ3UgcGFyYW1ldGVyIGluICdhXG5wb3NpdGlvbiBpbiB0aGUgZm9ybWF0IHRhaWwgKCgndSwgLi4sICdmKSBmbXQpLiBUaGlzIG1lYW5zIHRoYXQgdGhlXG50eXBlIG9mIHRoZSBleHBlY3RlZCBmb3JtYXQgcGFyYW1ldGVyIGRlcGVuZHMgb2Ygd2hlcmUgdGhlICUoLi4uJSlcbmFyZSBpbiB0aGUgZm9ybWF0IHN0cmluZzpcblxuICAjIFByaW50Zi5wcmludGYgXCIlKCUpXCJcbiAgLSA6ICh1bml0LCBvdXRfY2hhbm5lbCwgdW5pdCwgJ19hLCAnX2EsIHVuaXQpXG4gICAgICBDYW1saW50ZXJuYWxGb3JtYXRCYXNpY3MuZm9ybWF0NiAtPiB1bml0XG4gID0gPGZ1bj5cbiAgIyBQcmludGYucHJpbnRmIFwiJSglKSVkXCJcbiAgLSA6IChpbnQgLT4gdW5pdCwgb3V0X2NoYW5uZWwsIHVuaXQsICdfYSwgJ19hLCBpbnQgLT4gdW5pdClcbiAgICAgIENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljcy5mb3JtYXQ2IC0+IGludCAtPiB1bml0XG4gID0gPGZ1bj5cblxuT24gdGhlIGNvbnRyYXJ5LCB0aGUgbGVnYWN5IHR5cGVyIGdpdmVzIGEgY2xldmVyIHR5cGUgdGhhdCBkb2VzIG5vdFxuZGVwZW5kIG9uIHRoZSBwb3NpdGlvbiBvZiAlKC4uJSkgaW4gdGhlIGZvcm1hdCBzdHJpbmcuIEZvciBleGFtcGxlLFxuJSglKSB3aWxsIGhhdmUgdGhlIHBvbHltb3JwaGljIHR5cGUgKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpOiBpdCBjYW5cbmJlIGNvbmNhdGVuYXRlZCB0byBhbnkgZm9ybWF0IHR5cGUsIGFuZCBvbmx5IGVuZm9yY2VzIHRoZSBjb25zdHJhaW50XG50aGF0IGl0cyAnYSBhbmQgJ2YgcGFyYW1ldGVycyBhcmUgZXF1YWwgKG5vIGZvcm1hdCBhcmd1bWVudHMpIGFuZCAnZFxuYW5kICdlIGFyZSBlcXVhbCAobm8gcmVhZGVyIGFyZ3VtZW50KS5cblxuVGhlIHdlYWtlbmluZyBvZiB0aGlzIHBhcmFtZXRlciB0eXBlIGluIHRoZSBHQURUIHZlcnNpb24gYnJva2UgdXNlclxuY29kZSAoaW4gZmFjdCBpdCBlc3NlbnRpYWxseSBtYWRlICUoLi4uJSkgdW51c2FibGUgZXhjZXB0IGF0IHRoZSBsYXN0XG5wb3NpdGlvbiBvZiBhIGZvcm1hdCkuIEluIHBhcnRpY3VsYXIsIHRoZSBmb2xsb3dpbmcgd291bGQgbm90IHdvcmtcbmFueW1vcmU6XG5cbiAgZnVuIHNlcCAtPlxuICAgIEZvcm1hdC5wcmludGYgXCJmb28lKCUpYmFyJSglKWJhelwiIHNlcCBzZXBcblxuQXMgdGhlIHR5cGUtY2hlY2tlciB3b3VsZCByZXF1aXJlIHR3byAqaW5jb21wYXRpYmxlKiB0eXBlcyBmb3IgdGhlICUoJSlcbmluIGRpZmZlcmVudCBwb3NpdGlvbnMuXG5cblRoZSBzb2x1dGlvbiB0byByZWdhaW4gYSBnZW5lcmFsIHR5cGUgZm9yICUoLi4lKSBpcyB0byBnZW5lcmFsaXplIHRoaXNcbnRlY2huaXF1ZSwgbm90IG9ubHkgb24gdGhlICdkLCAnZSBwYXJhbWV0ZXJzLCBidXQgb24gYWxsIHNpeFxucGFyYW1ldGVycyBvZiBhIGZvcm1hdDogd2UgaW50cm9kdWNlIGEgXCJyZWxhdGlvbmFsXCIgdHlwZVxuICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxud2hvc2UgdmFsdWVzIGFyZSBwcm9vZnMgdGhhdCAoJ2ExLCAuLiwgJ2YxKSBhbmQgKCdhMiwgLi4sICdmMikgbW9yYWxseVxuY29ycmVzcG9uZCB0byB0aGUgc2FtZSBmb3JtYXQgdHlwZTogJ2ExIGlzIG9idGFpbmVkIGZyb20gJ2YxLCdiMSwnYzFcbmluIHRoZSBleGFjdCBzYW1lIHdheSB0aGF0ICdhMiBpcyBvYnRhaW5lZCBmcm9tICdmMiwnYjIsJ2MyLCBldGMuXG5cbkZvciBleGFtcGxlLCB0aGUgcmVsYXRpb24gYmV0d2VlbiB0d28gZm9ybWF0IHR5cGVzIGJlZ2lubmluZyB3aXRoIGEgQ2hhclxucGFyYW1ldGVyIGlzIGFzIGZvbGxvd3M6XG5cbnwgQ2hhcl90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVjICAqKVxuICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAoY2hhciAtPiAnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICBjaGFyIC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuXG5JbiB0aGUgZ2VuZXJhbCBjYXNlLCB0aGUgdGVybSBzdHJ1Y3R1cmUgb2YgZm10dHlfcmVsIGlzIChhbG1vc3RbMV0pXG5pc29tb3JwaGljIHRvIHRoZSBmbXR0eSBvZiB0aGUgcHJldmlvdXMgaW1wbGVtZW50YXRpb246IGV2ZXJ5XG5jb25zdHJ1Y3RvciBpcyByZS1yZWFkIHdpdGggYSBiaW5hcnksIHJlbGF0aW9uYWwgdHlwZSwgaW5zdGVhZCBvZiB0aGVcbnByZXZpb3VzIHVuYXJ5IHR5cGluZy4gZm10dHkgY2FuIHRoZW4gYmUgcmUtZGVmaW5lZCBhcyB0aGUgZGlhZ29uYWwgb2ZcbmZtdHR5X3JlbDpcblxuICB0eXBlICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eSA9XG4gICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YsXG4gICAgICAgICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdHR5X3JlbFxuXG5PbmNlIHdlIGhhdmUgdGhpcyBmbXR0eV9yZWwgdHlwZSBpbiBwbGFjZSwgd2UgY2FuIGdpdmUgdGhlIG1vcmVcbmdlbmVyYWwgdHlwZSB0byAlKC4uLiUpOlxuXG58IEZvcm1hdF9zdWJzdCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICUoLi4uJSkgKilcbiAgICBwYWRfb3B0aW9uICpcbiAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCxcbiAgICAgJ2cyLCAnYiwgJ2MsICdqMiwgJ2QsICdhKSBmbXR0eV9yZWwgKlxuICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAoKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYgLT4gJ2cyLCAnYiwgJ2MsICdqMiwgJ2UsICdmKSBmbXRcblxuV2UgYWNjZXB0IGFueSBmb3JtYXQgKCgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2KSAodGhpcyBpc1xuY29tcGxldGVseSB1bnJlbGF0ZWQgdG8gdGhlIHR5cGUgb2YgdGhlIGN1cnJlbnQgZm9ybWF0KSwgYnV0IGFsc29cbnJlcXVpcmUgYSBwcm9vZiB0aGF0IHRoaXMgZm9ybWF0IGlzIGluIHJlbGF0aW9uIHRvIGFub3RoZXIgZm9ybWF0IHRoYXRcbmlzIGNvbmNhdGVuYWJsZSB0byB0aGUgZm9ybWF0IHRhaWwuIFdoZW4gZXhlY3V0aW5nIGEgJSguLi4lKSBmb3JtYXRcbihpbiBjYW1saW50ZXJuYWxGb3JtYXQubWw6bWFrZV9wcmludGYgb3Igc2NhbmYubWw6bWFrZV9zY2FuZiksIHdlXG50cmFuc3R5cGUgdGhlIGZvcm1hdCBhbG9uZyB0aGlzIHJlbGF0aW9uIHVzaW5nIHRoZSAncmVjYXN0JyBmdW5jdGlvblxudG8gdHJhbnNwb3NlIGJldHdlZW4gcmVsYXRlZCBmb3JtYXQgdHlwZXMuXG5cbiAgdmFsIHJlY2FzdCA6XG4gICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxKSBmbXRcbiAgLT4gKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgLT4gKCdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdFxuXG5OT1RFIFsxXTogdGhlIHR5cGluZyBvZiBGb3JtYXRfc3Vic3RfdHkgcmVxdWlyZXMgbm90IG9uZSBmb3JtYXQgdHlwZSwgYnV0XG50d28sIG9uZSB0byBlc3RhYmxpc2ggdGhlIGxpbmsgYmV0d2VlbiB0aGUgZm9ybWF0IGFyZ3VtZW50IGFuZCB0aGVcbmZpcnN0IHNpeCBwYXJhbWV0ZXJzLCBhbmQgdGhlIG90aGVyIGZvciB0aGUgbGluayBiZXR3ZWVuIHRoZSBmb3JtYXRcbmFyZ3VtZW50IGFuZCB0aGUgbGFzdCBzaXggcGFyYW1ldGVycy5cblxufCBGb3JtYXRfc3Vic3RfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJSguLi4lKSAqKVxuICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsLFxuICAgICAnZzEsICdiMSwgJ2MxLCAnajEsICdkMSwgJ2ExKSBmbXR0eV9yZWwgKlxuICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsLFxuICAgICAnZzIsICdiMiwgJ2MyLCAnajIsICdkMiwgJ2EyKSBmbXR0eV9yZWwgKlxuICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAoKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYgLT4gJ2cxLCAnYjEsICdjMSwgJ2oxLCAnZTEsICdmMSxcbiAgICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYgLT4gJ2cyLCAnYjIsICdjMiwgJ2oyLCAnZTIsICdmMikgZm10dHlfcmVsXG5cbldoZW4gd2UgZ2VuZXJhdGUgYSBmb3JtYXQgQVNULCB3ZSBnZW5lcmF0ZSBleGFjdGx5IHRoZSBzYW1lIHdpdG5lc3NcbmZvciBib3RoIHJlbGF0aW9ucywgYW5kIHRoZSB3aXRuZXNzLWNvbnZlcnNpb24gZnVuY3Rpb25zIGluXG5jYW1saW50ZXJuYWxGb3JtYXQgZG8gcmVseSBvbiB0aGlzIGludmFyaWFudC4gRm9yIGV4YW1wbGUsIHRoZVxuZnVuY3Rpb24gdGhhdCBwcm92ZXMgdGhhdCB0aGUgcmVsYXRpb24gaXMgdHJhbnNpdGl2ZVxuXG4gIHZhbCB0cmFucyA6XG4gICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIC0+ICgnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyLFxuICAgICAgJ2EzLCAnYjMsICdjMywgJ2QzLCAnZTMsICdmMykgZm10dHlfcmVsXG4gIC0+ICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgJ2EzLCAnYjMsICdjMywgJ2QzLCAnZTMsICdmMykgZm10dHlfcmVsXG5cbmRvZXMgYXNzdW1lIHRoYXQgdGhlIHR3byBpbnB1dHMgaGF2ZSBleGFjdGx5IHRoZSBzYW1lIHRlcm0gc3RydWN0dXJlXG4oYW5kIGlzIG9ubHkgZXZlcnkgdXNlZCBmb3IgYXJndW1lbnQgd2l0bmVzc2VzIG9mIHRoZVxuRm9ybWF0X3N1YnN0X3R5IGNvbnN0cnVjdG9yKS5cbiopXG5cbigqIFR5cGUgb2YgYSBibG9jayB1c2VkIGJ5IHRoZSBGb3JtYXQgcHJldHR5LXByaW50ZXIuICopXG50eXBlIGJsb2NrX3R5cGUgPVxuICB8IFBwX2hib3ggICAoKiBIb3Jpem9udGFsIGJsb2NrIG5vIGxpbmUgYnJlYWtpbmcgKilcbiAgfCBQcF92Ym94ICAgKCogVmVydGljYWwgYmxvY2sgZWFjaCBicmVhayBsZWFkcyB0byBhIG5ldyBsaW5lICopXG4gIHwgUHBfaHZib3ggICgqIEhvcml6b250YWwtdmVydGljYWwgYmxvY2s6IHNhbWUgYXMgdmJveCwgZXhjZXB0IGlmIHRoaXMgYmxvY2tcbiAgICAgICAgICAgICAgICAgaXMgc21hbGwgZW5vdWdoIHRvIGZpdCBvbiBhIHNpbmdsZSBsaW5lICopXG4gIHwgUHBfaG92Ym94ICgqIEhvcml6b250YWwgb3IgVmVydGljYWwgYmxvY2s6IGJyZWFrcyBsZWFkIHRvIG5ldyBsaW5lXG4gICAgICAgICAgICAgICAgIG9ubHkgd2hlbiBuZWNlc3NhcnkgdG8gcHJpbnQgdGhlIGNvbnRlbnQgb2YgdGhlIGJsb2NrICopXG4gIHwgUHBfYm94ICAgICgqIEhvcml6b250YWwgb3IgSW5kZW50IGJsb2NrOiBicmVha3MgbGVhZCB0byBuZXcgbGluZVxuICAgICAgICAgICAgICAgICBvbmx5IHdoZW4gbmVjZXNzYXJ5IHRvIHByaW50IHRoZSBjb250ZW50IG9mIHRoZSBibG9jaywgb3JcbiAgICAgICAgICAgICAgICAgd2hlbiBpdCBsZWFkcyB0byBhIG5ldyBpbmRlbnRhdGlvbiBvZiB0aGUgY3VycmVudCBsaW5lICopXG4gIHwgUHBfZml0cyAgICgqIEludGVybmFsIHVzYWdlOiB3aGVuIGEgYmxvY2sgZml0cyBvbiBhIHNpbmdsZSBsaW5lICopXG5cbigqIEZvcm1hdHRpbmcgZWxlbWVudCB1c2VkIGJ5IHRoZSBGb3JtYXQgcHJldHR5LXByaW50ZXIuICopXG50eXBlIGZvcm1hdHRpbmdfbGl0ID1cbiAgfCBDbG9zZV9ib3ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQF0gICAqKVxuICB8IENsb3NlX3RhZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAfSAgICopXG4gIHwgQnJlYWsgb2Ygc3RyaW5nICogaW50ICogaW50ICAgICAgICAgICgqIEAsIHwgQCAgfCBAOyB8IEA7PD4gKilcbiAgfCBGRmx1c2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQD8gICAqKVxuICB8IEZvcmNlX25ld2xpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAXFxuICAqKVxuICB8IEZsdXNoX25ld2xpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBALiAgICopXG4gIHwgTWFnaWNfc2l6ZSBvZiBzdHJpbmcgKiBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEA8bj4gKilcbiAgfCBFc2NhcGVkX2F0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQEAgICAqKVxuICB8IEVzY2FwZWRfcGVyY2VudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAJSUgICopXG4gIHwgU2Nhbl9pbmRpYyBvZiBjaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIEBYICAgKilcblxuKCogRm9ybWF0dGluZyBlbGVtZW50IHVzZWQgYnkgdGhlIEZvcm1hdCBwcmV0dHktcHJpbnRlci4gKilcbnR5cGUgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdHRpbmdfZ2VuID1cbiAgfCBPcGVuX3RhZyA6ICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXQ2IC0+ICAgICAgKCogQHsgICAqKVxuICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXR0aW5nX2dlblxuICB8IE9wZW5fYm94IDogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdDYgLT4gICAgICAoKiBAWyAgICopXG4gICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdHRpbmdfZ2VuXG5cbigqKiopXG5cbigqIExpc3Qgb2YgZm9ybWF0IHR5cGUgZWxlbWVudHMuICopXG4oKiBJbiBwYXJ0aWN1bGFyIHVzZWQgdG8gcmVwcmVzZW50ICUoLi4uJSkgYW5kICV7Li4uJX0gY29udGVudHMuICopXG5hbmQgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdHR5ID1cbiAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YsXG4gICAgICAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXR0eV9yZWxcbmFuZCAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsID1cbiAgfCBDaGFyX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWMgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgIChjaGFyIC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgY2hhciAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBTdHJpbmdfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJXMgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgIChzdHJpbmcgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICBzdHJpbmcgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgSW50X3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVkICAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoaW50IC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgaW50IC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IEludDMyX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlbGQgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKGludDMyIC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgaW50MzIgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgTmF0aXZlaW50X3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVuZCAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAobmF0aXZlaW50IC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgbmF0aXZlaW50IC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IEludDY0X3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlTGQgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKGludDY0IC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgaW50NjQgLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgRmxvYXRfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVmICAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoZmxvYXQgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICBmbG9hdCAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBCb29sX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJUIgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgIChib29sIC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgYm9vbCAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcblxuICB8IEZvcm1hdF9hcmdfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAley4uLiV9ICopXG4gICAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm10dHkgKlxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZvcm1hdDYgLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NiAtPiAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKVxuICAgICAgICAgICBmbXR0eV9yZWxcbiAgfCBGb3JtYXRfc3Vic3RfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJSguLi4lKSAqKVxuICAgICAgKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wsXG4gICAgICAgJ2cxLCAnYjEsICdjMSwgJ2oxLCAnZDEsICdhMSkgZm10dHlfcmVsICpcbiAgICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsLFxuICAgICAgICdnMiwgJ2IyLCAnYzIsICdqMiwgJ2QyLCAnYTIpIGZtdHR5X3JlbCAqXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgICgoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NiAtPiAnZzEsICdiMSwgJ2MxLCAnajEsICdlMSwgJ2YxLFxuICAgICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmb3JtYXQ2IC0+ICdnMiwgJ2IyLCAnYzIsICdqMiwgJ2UyLCAnZjIpXG4gICAgICAgICAgIGZtdHR5X3JlbFxuXG4gICgqIFByaW50ZiBhbmQgRm9ybWF0IHNwZWNpZmljIGNvbnN0cnVjdG9ycy4gKilcbiAgfCBBbHBoYV90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWEgICopXG4gICAgICAoJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWwgLT5cbiAgICAgICgoJ2IxIC0+ICd4IC0+ICdjMSkgLT4gJ3ggLT4gJ2ExLCAnYjEsICdjMSwgJ2QxLCAnZTEsICdmMSxcbiAgICAgICAoJ2IyIC0+ICd4IC0+ICdjMikgLT4gJ3ggLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG4gIHwgVGhldGFfdHkgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICV0ICAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoKCdiMSAtPiAnYzEpIC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgKCdiMiAtPiAnYzIpIC0+ICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbFxuICB8IEFueV90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogVXNlZCBmb3IgY3VzdG9tIGZvcm1hdHMgKilcbiAgICAgICgnYTEsICdiMSwgJ2MxLCAnZDEsICdlMSwgJ2YxLFxuICAgICAgICdhMiwgJ2IyLCAnYzIsICdkMiwgJ2UyLCAnZjIpIGZtdHR5X3JlbCAtPlxuICAgICAgKCd4IC0+ICdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ3ggLT4gJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsXG5cbiAgKCogU2NhbmYgc3BlY2lmaWMgY29uc3RydWN0b3IuICopXG4gIHwgUmVhZGVyX3R5IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVyICAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoJ3ggLT4gJ2ExLCAnYjEsICdjMSwgKCdiMSAtPiAneCkgLT4gJ2QxLCAnZTEsICdmMSxcbiAgICAgICAneCAtPiAnYTIsICdiMiwgJ2MyLCAoJ2IyIC0+ICd4KSAtPiAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcbiAgfCBJZ25vcmVkX3JlYWRlcl90eSA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9yICAqKVxuICAgICAgKCdhMSwgJ2IxLCAnYzEsICdkMSwgJ2UxLCAnZjEsXG4gICAgICAgJ2EyLCAnYjIsICdjMiwgJ2QyLCAnZTIsICdmMikgZm10dHlfcmVsIC0+XG4gICAgICAoJ2ExLCAnYjEsICdjMSwgKCdiMSAtPiAneCkgLT4gJ2QxLCAnZTEsICdmMSxcbiAgICAgICAnYTIsICdiMiwgJ2MyLCAoJ2IyIC0+ICd4KSAtPiAnZDIsICdlMiwgJ2YyKSBmbXR0eV9yZWxcblxuICB8IEVuZF9vZl9mbXR0eSA6XG4gICAgICAoJ2YxLCAnYjEsICdjMSwgJ2QxLCAnZDEsICdmMSxcbiAgICAgICAnZjIsICdiMiwgJ2MyLCAnZDIsICdkMiwgJ2YyKSBmbXR0eV9yZWxcblxuKCoqKilcblxuKCogTGlzdCBvZiBmb3JtYXQgZWxlbWVudHMuICopXG5hbmQgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCA9XG4gIHwgQ2hhciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJWMgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKGNoYXIgLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgQ2FtbF9jaGFyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJUMgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKGNoYXIgLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgU3RyaW5nIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJXMgKilcbiAgICAgICgneCwgc3RyaW5nIC0+ICdhKSBwYWRkaW5nICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgQ2FtbF9zdHJpbmcgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJVMgKilcbiAgICAgICgneCwgc3RyaW5nIC0+ICdhKSBwYWRkaW5nICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgSW50IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJVtkaXhYdW9dICopXG4gICAgICBpbnRfY29udiAqICgneCwgJ3kpIHBhZGRpbmcgKiAoJ3ksIGludCAtPiAnYSkgcHJlY2lzaW9uICpcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCd4LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IEludDMyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVsW2RpeFh1b10gKilcbiAgICAgIGludF9jb252ICogKCd4LCAneSkgcGFkZGluZyAqICgneSwgaW50MzIgLT4gJ2EpIHByZWNpc2lvbiAqXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBOYXRpdmVpbnQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlbltkaXhYdW9dICopXG4gICAgICBpbnRfY29udiAqICgneCwgJ3kpIHBhZGRpbmcgKiAoJ3ksIG5hdGl2ZWludCAtPiAnYSkgcHJlY2lzaW9uICpcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCd4LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IEludDY0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVMW2RpeFh1b10gKilcbiAgICAgIGludF9jb252ICogKCd4LCAneSkgcGFkZGluZyAqICgneSwgaW50NjQgLT4gJ2EpIHByZWNpc2lvbiAqXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgneCwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBGbG9hdCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlW2ZlRWdHRmhIXSAqKVxuICAgICAgZmxvYXRfY29udiAqICgneCwgJ3kpIHBhZGRpbmcgKiAoJ3ksIGZsb2F0IC0+ICdhKSBwcmVjaXNpb24gKlxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ3gsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgQm9vbCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJVtiQl0gKilcbiAgICAgICgneCwgYm9vbCAtPiAnYSkgcGFkZGluZyAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCd4LCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IEZsdXNoIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICUhICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcblxuICB8IFN0cmluZ19saXRlcmFsIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIGFiYyAqKVxuICAgICAgc3RyaW5nICogKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdCAtPlxuICAgICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgQ2hhcl9saXRlcmFsIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogeCAqKVxuICAgICAgY2hhciAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuXG4gIHwgRm9ybWF0X2FyZyA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJXsuLi4lfSAqKVxuICAgICAgcGFkX29wdGlvbiAqICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsKSBmbXR0eSAqXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NiAtPiAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBGb3JtYXRfc3Vic3QgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlKC4uLiUpICopXG4gICAgICBwYWRfb3B0aW9uICpcbiAgICAgICgnZywgJ2gsICdpLCAnaiwgJ2ssICdsLFxuICAgICAgICdnMiwgJ2IsICdjLCAnajIsICdkLCAnYSkgZm10dHlfcmVsICpcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICgoJ2csICdoLCAnaSwgJ2osICdrLCAnbCkgZm9ybWF0NiAtPiAnZzIsICdiLCAnYywgJ2oyLCAnZSwgJ2YpIGZtdFxuXG4gICgqIFByaW50ZiBhbmQgRm9ybWF0IHNwZWNpZmljIGNvbnN0cnVjdG9yLiAqKVxuICB8IEFscGhhIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVhICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgoJ2IgLT4gJ3ggLT4gJ2MpIC0+ICd4IC0+ICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IFRoZXRhIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICV0ICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgoJ2IgLT4gJ2MpIC0+ICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuXG4gICgqIEZvcm1hdCBzcGVjaWZpYyBjb25zdHJ1Y3RvcjogKilcbiAgfCBGb3JtYXR0aW5nX2xpdCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBAXyAqKVxuICAgICAgZm9ybWF0dGluZ19saXQgKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBGb3JtYXR0aW5nX2dlbiA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogQF8gKilcbiAgICAgICgnYTEsICdiLCAnYywgJ2QxLCAnZTEsICdmMSkgZm9ybWF0dGluZ19nZW4gKlxuICAgICAgKCdmMSwgJ2IsICdjLCAnZTEsICdlMiwgJ2YyKSBmbXQgLT4gKCdhMSwgJ2IsICdjLCAnZDEsICdlMiwgJ2YyKSBmbXRcblxuICAoKiBTY2FuZiBzcGVjaWZpYyBjb25zdHJ1Y3RvcnM6ICopXG4gIHwgUmVhZGVyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJXIgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCd4IC0+ICdhLCAnYiwgJ2MsICgnYiAtPiAneCkgLT4gJ2QsICdlLCAnZikgZm10XG4gIHwgU2Nhbl9jaGFyX3NldCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJVsuLi5dICopXG4gICAgICBwYWRfb3B0aW9uICogY2hhcl9zZXQgKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10IC0+XG4gICAgICAgIChzdHJpbmcgLT4gJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10XG4gIHwgU2Nhbl9nZXRfY291bnRlciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJVtubE5MXSAqKVxuICAgICAgY291bnRlciAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKGludCAtPiAnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcbiAgfCBTY2FuX25leHRfY2hhciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlMGMgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgIChjaGFyIC0+ICdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuICB8IElnbm9yZWRfcGFyYW0gOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfICopXG4gICAgICAoJ2EsICdiLCAnYywgJ2QsICd5LCAneCkgaWdub3JlZCAqICgneCwgJ2IsICdjLCAneSwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZtdFxuXG4gICgqIEN1c3RvbSBwcmludGluZyBmb3JtYXQgKFBSIzY0NTIsIEdQUiMxNDApXG5cbiAgICAgV2UgaW5jbHVkZSBhIHR5cGUgQ3VzdG9tIG9mIFwiY3VzdG9tIGNvbnZlcnRlcnNcIiwgd2hlcmUgYW5cbiAgICAgYXJiaXRyYXJ5IGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGNvbnZlcnQgb25lIG9yIG1vcmVcbiAgICAgYXJndW1lbnRzLiBUaGVyZSBpcyBubyBzeW50YXggZm9yIGN1c3RvbSBjb252ZXJ0ZXJzLCBpdCBpcyBvbmx5XG4gICAgIGludGVuZGVkIGZvciBjdXN0b20gcHJvY2Vzc29ycyB0aGF0IHdpc2ggdG8gcmVseSBvbiB0aGVcbiAgICAgc3RkbGliLWRlZmluZWQgZm9ybWF0IEdBRFRzLlxuXG4gICAgIEZvciBpbnN0YW5jZSBhIHByZS1wcm9jZXNzb3IgY291bGQgY2hvb3NlIHRvIGludGVycHJldCBzdHJpbmdzXG4gICAgIHByZWZpeGVkIHdpdGggW1wiIVwiXSBhcyBmb3JtYXQgc3RyaW5ncyB3aGVyZSBbJXt7IC4uLiB9fV0gaXNcbiAgICAgYSBzcGVjaWFsIGZvcm0gdG8gcGFzcyBhIHRvX3N0cmluZyBmdW5jdGlvbiwgc28gdGhhdCBvbmUgY291bGRcbiAgICAgd3JpdGU6XG5cbiAgICAge1tcbiAgICAgICB0eXBlIHQgPSB7IHggOiBpbnQ7IHkgOiBpbnQgfVxuXG4gICAgICAgbGV0IHN0cmluZ19vZl90IHQgPSBQcmludGYuc3ByaW50ZiBcInsgeCA9ICVkOyB5ID0gJWQgfVwiIHQueCB0LnlcblxuICAgICAgIFByaW50Zi5wcmludGYgIVwidCA9ICV7e3N0cmluZ19vZl90fX1cIiB7IHggPSA0MjsgeSA9IDQyIH1cbiAgICAgXX1cbiAgKilcbiAgfCBDdXN0b20gOlxuICAgICAgKCdhLCAneCwgJ3kpIGN1c3RvbV9hcml0eSAqICh1bml0IC0+ICd4KSAqICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXQgLT5cbiAgICAgICgneSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmbXRcblxuICAoKiBlbmQgb2YgYSBmb3JtYXQgc3BlY2lmaWNhdGlvbiAqKVxuICB8IEVuZF9vZl9mb3JtYXQgOlxuICAgICAgICAoJ2YsICdiLCAnYywgJ2UsICdlLCAnZikgZm10XG5cbigqKiopXG5cbigqIFR5cGUgZm9yIGlnbm9yZWQgcGFyYW1ldGVycyAoc2VlIFwiJV9cIikuICopXG5hbmQgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGlnbm9yZWQgPVxuICB8IElnbm9yZWRfY2hhciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfYyAqKVxuICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX2NhbWxfY2hhciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX0MgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9zdHJpbmcgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9zICopXG4gICAgICBwYWRfb3B0aW9uIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9jYW1sX3N0cmluZyA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9TICopXG4gICAgICBwYWRfb3B0aW9uIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9pbnQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV9kICopXG4gICAgICBpbnRfY29udiAqIHBhZF9vcHRpb24gLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX2ludDMyIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX2xkICopXG4gICAgICBpbnRfY29udiAqIHBhZF9vcHRpb24gLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX25hdGl2ZWludCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX25kICopXG4gICAgICBpbnRfY29udiAqIHBhZF9vcHRpb24gLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX2ludDY0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX0xkICopXG4gICAgICBpbnRfY29udiAqIHBhZF9vcHRpb24gLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX2Zsb2F0IDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX2YgKilcbiAgICAgIHBhZF9vcHRpb24gKiBwcmVjX29wdGlvbiAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfYm9vbCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfQiAqKVxuICAgICAgcGFkX29wdGlvbiAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfZm9ybWF0X2FyZyA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfey4uLiV9ICopXG4gICAgICBwYWRfb3B0aW9uICogKCdnLCAnaCwgJ2ksICdqLCAnaywgJ2wpIGZtdHR5IC0+XG4gICAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG4gIHwgSWdub3JlZF9mb3JtYXRfc3Vic3QgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogJV8oLi4uJSkgKilcbiAgICAgIHBhZF9vcHRpb24gKiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10dHkgLT5cbiAgICAgICAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX3JlYWRlciA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX3IgKilcbiAgICAgICgnYSwgJ2IsICdjLCAoJ2IgLT4gJ3gpIC0+ICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX3NjYW5fY2hhcl9zZXQgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX1suLi5dICopXG4gICAgICBwYWRfb3B0aW9uICogY2hhcl9zZXQgLT4gKCdhLCAnYiwgJ2MsICdkLCAnZCwgJ2EpIGlnbm9yZWRcbiAgfCBJZ25vcmVkX3NjYW5fZ2V0X2NvdW50ZXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAlX1tubE5MXSAqKVxuICAgICAgY291bnRlciAtPiAoJ2EsICdiLCAnYywgJ2QsICdkLCAnYSkgaWdub3JlZFxuICB8IElnbm9yZWRfc2Nhbl9uZXh0X2NoYXIgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqICVfMGMgKilcbiAgICAgICgnYSwgJ2IsICdjLCAnZCwgJ2QsICdhKSBpZ25vcmVkXG5cbmFuZCAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0NiA9XG4gIEZvcm1hdCBvZiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm10ICogc3RyaW5nXG5cbmxldCByZWMgZXJhc2VfcmVsIDogdHlwZSBhIGIgYyBkIGUgZiBnIGggaSBqIGsgbCAuXG4gIChhLCBiLCBjLCBkLCBlLCBmLFxuICAgZywgaCwgaSwgaiwgaywgbCkgZm10dHlfcmVsIC0+IChhLCBiLCBjLCBkLCBlLCBmKSBmbXR0eVxuPSBmdW5jdGlvblxuICB8IENoYXJfdHkgcmVzdCAtPlxuICAgIENoYXJfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IFN0cmluZ190eSByZXN0IC0+XG4gICAgU3RyaW5nX3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBJbnRfdHkgcmVzdCAtPlxuICAgIEludF90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgSW50MzJfdHkgcmVzdCAtPlxuICAgIEludDMyX3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBJbnQ2NF90eSByZXN0IC0+XG4gICAgSW50NjRfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IE5hdGl2ZWludF90eSByZXN0IC0+XG4gICAgTmF0aXZlaW50X3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBGbG9hdF90eSByZXN0IC0+XG4gICAgRmxvYXRfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IEJvb2xfdHkgcmVzdCAtPlxuICAgIEJvb2xfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IEZvcm1hdF9hcmdfdHkgKHR5LCByZXN0KSAtPlxuICAgIEZvcm1hdF9hcmdfdHkgKHR5LCBlcmFzZV9yZWwgcmVzdClcbiAgfCBGb3JtYXRfc3Vic3RfdHkgKHR5MSwgX3R5MiwgcmVzdCkgLT5cbiAgICBGb3JtYXRfc3Vic3RfdHkgKHR5MSwgdHkxLCBlcmFzZV9yZWwgcmVzdClcbiAgfCBBbHBoYV90eSByZXN0IC0+XG4gICAgQWxwaGFfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IFRoZXRhX3R5IHJlc3QgLT5cbiAgICBUaGV0YV90eSAoZXJhc2VfcmVsIHJlc3QpXG4gIHwgQW55X3R5IHJlc3QgLT5cbiAgICBBbnlfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IFJlYWRlcl90eSByZXN0IC0+XG4gICAgUmVhZGVyX3R5IChlcmFzZV9yZWwgcmVzdClcbiAgfCBJZ25vcmVkX3JlYWRlcl90eSByZXN0IC0+XG4gICAgSWdub3JlZF9yZWFkZXJfdHkgKGVyYXNlX3JlbCByZXN0KVxuICB8IEVuZF9vZl9mbXR0eSAtPiBFbmRfb2ZfZm10dHlcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAoKiBGb3JtYXQgdHlwZSBjb25jYXRlbmF0aW9uICopXG5cbigqIENvbmNhdGVuYXRlIHR3byBmb3JtYXQgdHlwZXMuICopXG4oKiBVc2VkIGJ5OlxuICAgKiByZWFkZXJfbmJfdW5pZmllcl9vZl9mbXR0eSB0byBjb3VudCByZWFkZXJzIGluIGFuIGZtdHR5LFxuICAgKiBTY2FuZi50YWtlX2ZtdHR5X2Zvcm1hdF9yZWFkZXJzIHRvIGV4dHJhY3QgcmVhZGVycyBpbnNpZGUgJSguLi4lKSxcbiAgICogQ2FtbGludGVybmFsRm9ybWF0LmZtdHR5X29mX2lnbm9yZWRfZm9ybWF0IHRvIGV4dHJhY3QgZm9ybWF0IHR5cGUuICopXG5cbigqXG5sZXQgcmVjIGNvbmNhdF9mbXR0eSA6IHR5cGUgYSBiIGMgZCBlIGYgZyBoIC5cbiAgICAoYSwgYiwgYywgZCwgZSwgZikgZm10dHkgLT5cbiAgICAoZiwgYiwgYywgZSwgZywgaCkgZm10dHkgLT5cbiAgICAoYSwgYiwgYywgZCwgZywgaCkgZm10dHkgPVxuKilcbmxldCByZWMgY29uY2F0X2ZtdHR5IDpcbiAgdHlwZSBhMSBiMSBjMSBkMSBlMSBmMVxuICAgICAgIGEyIGIyIGMyIGQyIGUyIGYyXG4gICAgICAgZzEgajEgZzIgajJcbiAgLlxuICAgIChnMSwgYjEsIGMxLCBqMSwgZDEsIGExLFxuICAgICBnMiwgYjIsIGMyLCBqMiwgZDIsIGEyKSBmbXR0eV9yZWwgLT5cbiAgICAoYTEsIGIxLCBjMSwgZDEsIGUxLCBmMSxcbiAgICAgYTIsIGIyLCBjMiwgZDIsIGUyLCBmMikgZm10dHlfcmVsIC0+XG4gICAgKGcxLCBiMSwgYzEsIGoxLCBlMSwgZjEsXG4gICAgIGcyLCBiMiwgYzIsIGoyLCBlMiwgZjIpIGZtdHR5X3JlbCA9XG5mdW4gZm10dHkxIGZtdHR5MiAtPiBtYXRjaCBmbXR0eTEgd2l0aFxuICB8IENoYXJfdHkgcmVzdCAtPlxuICAgIENoYXJfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBTdHJpbmdfdHkgcmVzdCAtPlxuICAgIFN0cmluZ190eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEludF90eSByZXN0IC0+XG4gICAgSW50X3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgSW50MzJfdHkgcmVzdCAtPlxuICAgIEludDMyX3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgTmF0aXZlaW50X3R5IHJlc3QgLT5cbiAgICBOYXRpdmVpbnRfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBJbnQ2NF90eSByZXN0IC0+XG4gICAgSW50NjRfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBGbG9hdF90eSByZXN0IC0+XG4gICAgRmxvYXRfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBCb29sX3R5IHJlc3QgLT5cbiAgICBCb29sX3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgQWxwaGFfdHkgcmVzdCAtPlxuICAgIEFscGhhX3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgVGhldGFfdHkgcmVzdCAtPlxuICAgIFRoZXRhX3R5IChjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgQW55X3R5IHJlc3QgLT5cbiAgICBBbnlfdHkgKGNvbmNhdF9mbXR0eSByZXN0IGZtdHR5MilcbiAgfCBSZWFkZXJfdHkgcmVzdCAtPlxuICAgIFJlYWRlcl90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IElnbm9yZWRfcmVhZGVyX3R5IHJlc3QgLT5cbiAgICBJZ25vcmVkX3JlYWRlcl90eSAoY29uY2F0X2ZtdHR5IHJlc3QgZm10dHkyKVxuICB8IEZvcm1hdF9hcmdfdHkgKHR5LCByZXN0KSAtPlxuICAgIEZvcm1hdF9hcmdfdHkgKHR5LCBjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgRm9ybWF0X3N1YnN0X3R5ICh0eTEsIHR5MiwgcmVzdCkgLT5cbiAgICBGb3JtYXRfc3Vic3RfdHkgKHR5MSwgdHkyLCBjb25jYXRfZm10dHkgcmVzdCBmbXR0eTIpXG4gIHwgRW5kX29mX2ZtdHR5IC0+IGZtdHR5MlxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogRm9ybWF0IGNvbmNhdGVuYXRpb24gKilcblxuKCogQ29uY2F0ZW5hdGUgdHdvIGZvcm1hdHMuICopXG5sZXQgcmVjIGNvbmNhdF9mbXQgOiB0eXBlIGEgYiBjIGQgZSBmIGcgaCAuXG4gICAgKGEsIGIsIGMsIGQsIGUsIGYpIGZtdCAtPlxuICAgIChmLCBiLCBjLCBlLCBnLCBoKSBmbXQgLT5cbiAgICAoYSwgYiwgYywgZCwgZywgaCkgZm10ID1cbmZ1biBmbXQxIGZtdDIgLT4gbWF0Y2ggZm10MSB3aXRoXG4gIHwgU3RyaW5nIChwYWQsIHJlc3QpIC0+XG4gICAgU3RyaW5nIChwYWQsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IENhbWxfc3RyaW5nIChwYWQsIHJlc3QpIC0+XG4gICAgQ2FtbF9zdHJpbmcgKHBhZCwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG5cbiAgfCBJbnQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgSW50IChpY29udiwgcGFkLCBwcmVjLCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBJbnQzMiAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBJbnQzMiAoaWNvbnYsIHBhZCwgcHJlYywgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgTmF0aXZlaW50IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIE5hdGl2ZWludCAoaWNvbnYsIHBhZCwgcHJlYywgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgSW50NjQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgSW50NjQgKGljb252LCBwYWQsIHByZWMsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEZsb2F0IChmY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIEZsb2F0IChmY29udiwgcGFkLCBwcmVjLCBjb25jYXRfZm10IHJlc3QgZm10MilcblxuICB8IENoYXIgKHJlc3QpIC0+XG4gICAgQ2hhciAoY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgQ2FtbF9jaGFyIHJlc3QgLT5cbiAgICBDYW1sX2NoYXIgKGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEJvb2wgKHBhZCwgcmVzdCkgLT5cbiAgICBCb29sIChwYWQsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IEFscGhhIHJlc3QgLT5cbiAgICBBbHBoYSAoY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgVGhldGEgcmVzdCAtPlxuICAgIFRoZXRhIChjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBDdXN0b20gKGFyaXR5LCBmLCByZXN0KSAtPlxuICAgIEN1c3RvbSAoYXJpdHksIGYsIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuICB8IFJlYWRlciByZXN0IC0+XG4gICAgUmVhZGVyIChjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBGbHVzaCByZXN0IC0+XG4gICAgRmx1c2ggKGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuXG4gIHwgU3RyaW5nX2xpdGVyYWwgKHN0ciwgcmVzdCkgLT5cbiAgICBTdHJpbmdfbGl0ZXJhbCAoc3RyLCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBDaGFyX2xpdGVyYWwgKGNociwgcmVzdCkgLT5cbiAgICBDaGFyX2xpdGVyYWwgICAoY2hyLCBjb25jYXRfZm10IHJlc3QgZm10MilcblxuICB8IEZvcm1hdF9hcmcgKHBhZCwgZm10dHksIHJlc3QpIC0+XG4gICAgRm9ybWF0X2FyZyAgIChwYWQsIGZtdHR5LCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBGb3JtYXRfc3Vic3QgKHBhZCwgZm10dHksIHJlc3QpIC0+XG4gICAgRm9ybWF0X3N1YnN0IChwYWQsIGZtdHR5LCBjb25jYXRfZm10IHJlc3QgZm10MilcblxuICB8IFNjYW5fY2hhcl9zZXQgKHdpZHRoX29wdCwgY2hhcl9zZXQsIHJlc3QpIC0+XG4gICAgU2Nhbl9jaGFyX3NldCAod2lkdGhfb3B0LCBjaGFyX3NldCwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgU2Nhbl9nZXRfY291bnRlciAoY291bnRlciwgcmVzdCkgLT5cbiAgICBTY2FuX2dldF9jb3VudGVyIChjb3VudGVyLCBjb25jYXRfZm10IHJlc3QgZm10MilcbiAgfCBTY2FuX25leHRfY2hhciAocmVzdCkgLT5cbiAgICBTY2FuX25leHRfY2hhciAoY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgSWdub3JlZF9wYXJhbSAoaWduLCByZXN0KSAtPlxuICAgIElnbm9yZWRfcGFyYW0gKGlnbiwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG5cbiAgfCBGb3JtYXR0aW5nX2xpdCAoZm10aW5nX2xpdCwgcmVzdCkgLT5cbiAgICBGb3JtYXR0aW5nX2xpdCAoZm10aW5nX2xpdCwgY29uY2F0X2ZtdCByZXN0IGZtdDIpXG4gIHwgRm9ybWF0dGluZ19nZW4gKGZtdGluZ19nZW4sIHJlc3QpIC0+XG4gICAgRm9ybWF0dGluZ19nZW4gKGZtdGluZ19nZW4sIGNvbmNhdF9mbXQgcmVzdCBmbXQyKVxuXG4gIHwgRW5kX29mX2Zvcm1hdCAtPlxuICAgIGZtdDJcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIEdhYnJpZWwgU2NoZXJlciwgcHJvamV0IFBhcnRvdXQsIElOUklBIFBhcmlzLVNhY2xheSAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMjAgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogQ2FtbGludGVybmFsQXRvbWljIGlzIGEgZGVwZW5kZW5jeSBvZiBTdGRsaWIsIHNvIGl0IGlzIGNvbXBpbGVkIHdpdGhcbiAgIC1ub3BlcnZhc2l2ZXMuICopXG5leHRlcm5hbCAoID09ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlZXFcIlxuZXh0ZXJuYWwgKCArICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWFkZGludFwiXG5leHRlcm5hbCBpZ25vcmUgOiAnYSAtPiB1bml0ID0gXCIlaWdub3JlXCJcblxuKCogV2UgYXJlIG5vdCByZXVzaW5nICgnYSByZWYpIGRpcmVjdGx5IHRvIG1ha2UgaXQgZWFzaWVyIHRvIHJlYXNvblxuICAgYWJvdXQgYXRvbWljaXR5IGlmIHdlIHdpc2ggdG86IGV2ZW4gaW4gYSBzZXF1ZW50aWFsIGltcGxlbWVudGF0aW9uLFxuICAgc2lnbmFscyBhbmQgb3RoZXIgYXN5bmNocm9ub3VzIGNhbGxiYWNrcyBtaWdodCBicmVhayBhdG9taWNpdHkuICopXG50eXBlICdhIHQgPSB7bXV0YWJsZSB2OiAnYX1cblxubGV0IG1ha2UgdiA9IHt2fVxubGV0IGdldCByID0gci52XG5sZXQgc2V0IHIgdiA9IHIudiA8LSB2XG5cbigqIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBzZXQgdG8gbmV2ZXIgYmUgaW5saW5lZDogRmxhbWJkYSBpc1xuICAgYWxsb3dlZCB0byBtb3ZlIHN1cnJvdW5kaW5nIGNvZGUgaW5zaWRlIHRoZSBjcml0aWNhbCBzZWN0aW9uLFxuICAgaW5jbHVkaW5nIGFsbG9jYXRpb25zLiAqKVxuXG5sZXRbQGlubGluZSBuZXZlcl0gZXhjaGFuZ2UgciB2ID1cbiAgKCogQkVHSU4gQVRPTUlDICopXG4gIGxldCBjdXIgPSByLnYgaW5cbiAgci52IDwtIHY7XG4gICgqIEVORCBBVE9NSUMgKilcbiAgY3VyXG5cbmxldFtAaW5saW5lIG5ldmVyXSBjb21wYXJlX2FuZF9zZXQgciBzZWVuIHYgPVxuICAoKiBCRUdJTiBBVE9NSUMgKilcbiAgbGV0IGN1ciA9IHIudiBpblxuICBpZiBjdXIgPT0gc2VlbiB0aGVuIChcbiAgICByLnYgPC0gdjtcbiAgICAoKiBFTkQgQVRPTUlDICopXG4gICAgdHJ1ZVxuICApIGVsc2VcbiAgICBmYWxzZVxuXG5sZXRbQGlubGluZSBuZXZlcl0gZmV0Y2hfYW5kX2FkZCByIG4gPVxuICAoKiBCRUdJTiBBVE9NSUMgKilcbiAgbGV0IGN1ciA9IHIudiBpblxuICByLnYgPC0gKGN1ciArIG4pO1xuICAoKiBFTkQgQVRPTUlDICopXG4gIGN1clxuXG5sZXQgaW5jciByID0gaWdub3JlIChmZXRjaF9hbmRfYWRkIHIgMSlcbmxldCBkZWNyIHIgPSBpZ25vcmUgKGZldGNoX2FuZF9hZGQgciAoLTEpKVxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBFeGNlcHRpb25zICopXG5cbmV4dGVybmFsIHJlZ2lzdGVyX25hbWVkX3ZhbHVlIDogc3RyaW5nIC0+ICdhIC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX3JlZ2lzdGVyX25hbWVkX3ZhbHVlXCJcblxubGV0ICgpID1cbiAgKCogZm9yIHJ1bnRpbWUvZmFpbF9uYXQuYyAqKVxuICByZWdpc3Rlcl9uYW1lZF92YWx1ZSBcIlBlcnZhc2l2ZXMuYXJyYXlfYm91bmRfZXJyb3JcIlxuICAgIChJbnZhbGlkX2FyZ3VtZW50IFwiaW5kZXggb3V0IG9mIGJvdW5kc1wiKVxuXG5leHRlcm5hbCByYWlzZSA6IGV4biAtPiAnYSA9IFwiJXJhaXNlXCJcbmV4dGVybmFsIHJhaXNlX25vdHJhY2UgOiBleG4gLT4gJ2EgPSBcIiVyYWlzZV9ub3RyYWNlXCJcblxubGV0IGZhaWx3aXRoIHMgPSByYWlzZShGYWlsdXJlIHMpXG5sZXQgaW52YWxpZF9hcmcgcyA9IHJhaXNlKEludmFsaWRfYXJndW1lbnQgcylcblxuZXhjZXB0aW9uIEV4aXRcbmV4Y2VwdGlvbiBNYXRjaF9mYWlsdXJlID0gTWF0Y2hfZmFpbHVyZVxuZXhjZXB0aW9uIEFzc2VydF9mYWlsdXJlID0gQXNzZXJ0X2ZhaWx1cmVcbmV4Y2VwdGlvbiBJbnZhbGlkX2FyZ3VtZW50ID0gSW52YWxpZF9hcmd1bWVudFxuZXhjZXB0aW9uIEZhaWx1cmUgPSBGYWlsdXJlXG5leGNlcHRpb24gTm90X2ZvdW5kID0gTm90X2ZvdW5kXG5leGNlcHRpb24gT3V0X29mX21lbW9yeSA9IE91dF9vZl9tZW1vcnlcbmV4Y2VwdGlvbiBTdGFja19vdmVyZmxvdyA9IFN0YWNrX292ZXJmbG93XG5leGNlcHRpb24gU3lzX2Vycm9yID0gU3lzX2Vycm9yXG5leGNlcHRpb24gRW5kX29mX2ZpbGUgPSBFbmRfb2ZfZmlsZVxuZXhjZXB0aW9uIERpdmlzaW9uX2J5X3plcm8gPSBEaXZpc2lvbl9ieV96ZXJvXG5leGNlcHRpb24gU3lzX2Jsb2NrZWRfaW8gPSBTeXNfYmxvY2tlZF9pb1xuZXhjZXB0aW9uIFVuZGVmaW5lZF9yZWN1cnNpdmVfbW9kdWxlID0gVW5kZWZpbmVkX3JlY3Vyc2l2ZV9tb2R1bGVcblxuKCogQ29tcG9zaXRpb24gb3BlcmF0b3JzICopXG5cbmV4dGVybmFsICggfD4gKSA6ICdhIC0+ICgnYSAtPiAnYikgLT4gJ2IgPSBcIiVyZXZhcHBseVwiXG5leHRlcm5hbCAoIEBAICkgOiAoJ2EgLT4gJ2IpIC0+ICdhIC0+ICdiID0gXCIlYXBwbHlcIlxuXG4oKiBEZWJ1Z2dpbmcgKilcblxuZXh0ZXJuYWwgX19MT0NfXyA6IHN0cmluZyA9IFwiJWxvY19MT0NcIlxuZXh0ZXJuYWwgX19GSUxFX18gOiBzdHJpbmcgPSBcIiVsb2NfRklMRVwiXG5leHRlcm5hbCBfX0xJTkVfXyA6IGludCA9IFwiJWxvY19MSU5FXCJcbmV4dGVybmFsIF9fTU9EVUxFX18gOiBzdHJpbmcgPSBcIiVsb2NfTU9EVUxFXCJcbmV4dGVybmFsIF9fUE9TX18gOiBzdHJpbmcgKiBpbnQgKiBpbnQgKiBpbnQgPSBcIiVsb2NfUE9TXCJcbmV4dGVybmFsIF9fRlVOQ1RJT05fXyA6IHN0cmluZyA9IFwiJWxvY19GVU5DVElPTlwiXG5cbmV4dGVybmFsIF9fTE9DX09GX18gOiAnYSAtPiBzdHJpbmcgKiAnYSA9IFwiJWxvY19MT0NcIlxuZXh0ZXJuYWwgX19MSU5FX09GX18gOiAnYSAtPiBpbnQgKiAnYSA9IFwiJWxvY19MSU5FXCJcbmV4dGVybmFsIF9fUE9TX09GX18gOiAnYSAtPiAoc3RyaW5nICogaW50ICogaW50ICogaW50KSAqICdhID0gXCIlbG9jX1BPU1wiXG5cbigqIENvbXBhcmlzb25zICopXG5cbmV4dGVybmFsICggPSApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJWVxdWFsXCJcbmV4dGVybmFsICggPD4gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVub3RlcXVhbFwiXG5leHRlcm5hbCAoIDwgKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVsZXNzdGhhblwiXG5leHRlcm5hbCAoID4gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVncmVhdGVydGhhblwiXG5leHRlcm5hbCAoIDw9ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlbGVzc2VxdWFsXCJcbmV4dGVybmFsICggPj0gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVncmVhdGVyZXF1YWxcIlxuZXh0ZXJuYWwgY29tcGFyZSA6ICdhIC0+ICdhIC0+IGludCA9IFwiJWNvbXBhcmVcIlxuXG5sZXQgbWluIHggeSA9IGlmIHggPD0geSB0aGVuIHggZWxzZSB5XG5sZXQgbWF4IHggeSA9IGlmIHggPj0geSB0aGVuIHggZWxzZSB5XG5cbmV4dGVybmFsICggPT0gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVlcVwiXG5leHRlcm5hbCAoICE9ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlbm90ZXFcIlxuXG4oKiBCb29sZWFuIG9wZXJhdGlvbnMgKilcblxuZXh0ZXJuYWwgbm90IDogYm9vbCAtPiBib29sID0gXCIlYm9vbG5vdFwiXG5leHRlcm5hbCAoICYgKSA6IGJvb2wgLT4gYm9vbCAtPiBib29sID0gXCIlc2VxdWFuZFwiXG5leHRlcm5hbCAoICYmICkgOiBib29sIC0+IGJvb2wgLT4gYm9vbCA9IFwiJXNlcXVhbmRcIlxuZXh0ZXJuYWwgKCBvciApIDogYm9vbCAtPiBib29sIC0+IGJvb2wgPSBcIiVzZXF1b3JcIlxuZXh0ZXJuYWwgKCB8fCApIDogYm9vbCAtPiBib29sIC0+IGJvb2wgPSBcIiVzZXF1b3JcIlxuXG4oKiBJbnRlZ2VyIG9wZXJhdGlvbnMgKilcblxuZXh0ZXJuYWwgKCB+LSApIDogaW50IC0+IGludCA9IFwiJW5lZ2ludFwiXG5leHRlcm5hbCAoIH4rICkgOiBpbnQgLT4gaW50ID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgc3VjYyA6IGludCAtPiBpbnQgPSBcIiVzdWNjaW50XCJcbmV4dGVybmFsIHByZWQgOiBpbnQgLT4gaW50ID0gXCIlcHJlZGludFwiXG5leHRlcm5hbCAoICsgKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlYWRkaW50XCJcbmV4dGVybmFsICggLSApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVzdWJpbnRcIlxuZXh0ZXJuYWwgKCAqICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJW11bGludFwiXG5leHRlcm5hbCAoIC8gKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlZGl2aW50XCJcbmV4dGVybmFsICggbW9kICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJW1vZGludFwiXG5cbmxldCBhYnMgeCA9IGlmIHggPj0gMCB0aGVuIHggZWxzZSAteFxuXG5leHRlcm5hbCAoIGxhbmQgKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlYW5kaW50XCJcbmV4dGVybmFsICggbG9yICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJW9yaW50XCJcbmV4dGVybmFsICggbHhvciApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiV4b3JpbnRcIlxuXG5sZXQgbG5vdCB4ID0geCBseG9yICgtMSlcblxuZXh0ZXJuYWwgKCBsc2wgKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlbHNsaW50XCJcbmV4dGVybmFsICggbHNyICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWxzcmludFwiXG5leHRlcm5hbCAoIGFzciApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVhc3JpbnRcIlxuXG5sZXQgbWF4X2ludCA9ICgtMSkgbHNyIDFcbmxldCBtaW5faW50ID0gbWF4X2ludCArIDFcblxuKCogRmxvYXRpbmctcG9pbnQgb3BlcmF0aW9ucyAqKVxuXG5leHRlcm5hbCAoIH4tLiApIDogZmxvYXQgLT4gZmxvYXQgPSBcIiVuZWdmbG9hdFwiXG5leHRlcm5hbCAoIH4rLiApIDogZmxvYXQgLT4gZmxvYXQgPSBcIiVpZGVudGl0eVwiXG5leHRlcm5hbCAoICsuICkgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiJWFkZGZsb2F0XCJcbmV4dGVybmFsICggLS4gKSA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCIlc3ViZmxvYXRcIlxuZXh0ZXJuYWwgKCAqLiApIDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcIiVtdWxmbG9hdFwiXG5leHRlcm5hbCAoIC8uICkgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiJWRpdmZsb2F0XCJcbmV4dGVybmFsICggKiogKSA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX3Bvd2VyX2Zsb2F0XCIgXCJwb3dcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgZXhwIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfZXhwX2Zsb2F0XCIgXCJleHBcIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgZXhwbTEgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9leHBtMV9mbG9hdFwiIFwiY2FtbF9leHBtMVwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhY29zIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfYWNvc19mbG9hdFwiIFwiYWNvc1wiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhc2luIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfYXNpbl9mbG9hdFwiIFwiYXNpblwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhdGFuIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfYXRhbl9mbG9hdFwiIFwiYXRhblwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhdGFuMiA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2F0YW4yX2Zsb2F0XCIgXCJhdGFuMlwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBoeXBvdCA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0XG4gICAgICAgICAgICAgICA9IFwiY2FtbF9oeXBvdF9mbG9hdFwiIFwiY2FtbF9oeXBvdFwiIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBjb3MgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9jb3NfZmxvYXRcIiBcImNvc1wiIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBjb3NoIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfY29zaF9mbG9hdFwiIFwiY29zaFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhY29zaCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2Fjb3NoX2Zsb2F0XCIgXCJjYW1sX2Fjb3NoXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGxvZyA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2xvZ19mbG9hdFwiIFwibG9nXCIgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGxvZzEwIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfbG9nMTBfZmxvYXRcIiBcImxvZzEwXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGxvZzFwIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfbG9nMXBfZmxvYXRcIiBcImNhbWxfbG9nMXBcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgc2luIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfc2luX2Zsb2F0XCIgXCJzaW5cIiBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgc2luaCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX3NpbmhfZmxvYXRcIiBcInNpbmhcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYXNpbmggOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9hc2luaF9mbG9hdFwiIFwiY2FtbF9hc2luaFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBzcXJ0IDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfc3FydF9mbG9hdFwiIFwic3FydFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCB0YW4gOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF90YW5fZmxvYXRcIiBcInRhblwiIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCB0YW5oIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfdGFuaF9mbG9hdFwiIFwidGFuaFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhdGFuaCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2F0YW5oX2Zsb2F0XCIgXCJjYW1sX2F0YW5oXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGNlaWwgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9jZWlsX2Zsb2F0XCIgXCJjZWlsXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGZsb29yIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfZmxvb3JfZmxvYXRcIiBcImZsb29yXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGFic19mbG9hdCA6IGZsb2F0IC0+IGZsb2F0ID0gXCIlYWJzZmxvYXRcIlxuZXh0ZXJuYWwgY29weXNpZ24gOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdFxuICAgICAgICAgICAgICAgICAgPSBcImNhbWxfY29weXNpZ25fZmxvYXRcIiBcImNhbWxfY29weXNpZ25cIlxuICAgICAgICAgICAgICAgICAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIG1vZF9mbG9hdCA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2Ztb2RfZmxvYXRcIiBcImZtb2RcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgZnJleHAgOiBmbG9hdCAtPiBmbG9hdCAqIGludCA9IFwiY2FtbF9mcmV4cF9mbG9hdFwiXG5leHRlcm5hbCBsZGV4cCA6IChmbG9hdCBbQHVuYm94ZWRdKSAtPiAoaW50IFtAdW50YWdnZWRdKSAtPiAoZmxvYXQgW0B1bmJveGVkXSkgPVxuICBcImNhbWxfbGRleHBfZmxvYXRcIiBcImNhbWxfbGRleHBfZmxvYXRfdW5ib3hlZFwiIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBtb2RmIDogZmxvYXQgLT4gZmxvYXQgKiBmbG9hdCA9IFwiY2FtbF9tb2RmX2Zsb2F0XCJcbmV4dGVybmFsIGZsb2F0IDogaW50IC0+IGZsb2F0ID0gXCIlZmxvYXRvZmludFwiXG5leHRlcm5hbCBmbG9hdF9vZl9pbnQgOiBpbnQgLT4gZmxvYXQgPSBcIiVmbG9hdG9maW50XCJcbmV4dGVybmFsIHRydW5jYXRlIDogZmxvYXQgLT4gaW50ID0gXCIlaW50b2ZmbG9hdFwiXG5leHRlcm5hbCBpbnRfb2ZfZmxvYXQgOiBmbG9hdCAtPiBpbnQgPSBcIiVpbnRvZmZsb2F0XCJcbmV4dGVybmFsIGZsb2F0X29mX2JpdHMgOiBpbnQ2NCAtPiBmbG9hdFxuICA9IFwiY2FtbF9pbnQ2NF9mbG9hdF9vZl9iaXRzXCIgXCJjYW1sX2ludDY0X2Zsb2F0X29mX2JpdHNfdW5ib3hlZFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5sZXQgaW5maW5pdHkgPVxuICBmbG9hdF9vZl9iaXRzIDB4N0ZfRjBfMDBfMDBfMDBfMDBfMDBfMDBMXG5sZXQgbmVnX2luZmluaXR5ID1cbiAgZmxvYXRfb2ZfYml0cyAweEZGX0YwXzAwXzAwXzAwXzAwXzAwXzAwTFxubGV0IG5hbiA9XG4gIGZsb2F0X29mX2JpdHMgMHg3Rl9GMF8wMF8wMF8wMF8wMF8wMF8wMUxcbmxldCBtYXhfZmxvYXQgPVxuICBmbG9hdF9vZl9iaXRzIDB4N0ZfRUZfRkZfRkZfRkZfRkZfRkZfRkZMXG5sZXQgbWluX2Zsb2F0ID1cbiAgZmxvYXRfb2ZfYml0cyAweDAwXzEwXzAwXzAwXzAwXzAwXzAwXzAwTFxubGV0IGVwc2lsb25fZmxvYXQgPVxuICBmbG9hdF9vZl9iaXRzIDB4M0NfQjBfMDBfMDBfMDBfMDBfMDBfMDBMXG5cbnR5cGUgZnBjbGFzcyA9XG4gICAgRlBfbm9ybWFsXG4gIHwgRlBfc3Vibm9ybWFsXG4gIHwgRlBfemVyb1xuICB8IEZQX2luZmluaXRlXG4gIHwgRlBfbmFuXG5leHRlcm5hbCBjbGFzc2lmeV9mbG9hdCA6IChmbG9hdCBbQHVuYm94ZWRdKSAtPiBmcGNsYXNzID1cbiAgXCJjYW1sX2NsYXNzaWZ5X2Zsb2F0XCIgXCJjYW1sX2NsYXNzaWZ5X2Zsb2F0X3VuYm94ZWRcIiBbQEBub2FsbG9jXVxuXG4oKiBTdHJpbmcgYW5kIGJ5dGUgc2VxdWVuY2Ugb3BlcmF0aW9ucyAtLSBtb3JlIGluIG1vZHVsZXMgU3RyaW5nIGFuZCBCeXRlcyAqKVxuXG5leHRlcm5hbCBzdHJpbmdfbGVuZ3RoIDogc3RyaW5nIC0+IGludCA9IFwiJXN0cmluZ19sZW5ndGhcIlxuZXh0ZXJuYWwgYnl0ZXNfbGVuZ3RoIDogYnl0ZXMgLT4gaW50ID0gXCIlYnl0ZXNfbGVuZ3RoXCJcbmV4dGVybmFsIGJ5dGVzX2NyZWF0ZSA6IGludCAtPiBieXRlcyA9IFwiY2FtbF9jcmVhdGVfYnl0ZXNcIlxuZXh0ZXJuYWwgc3RyaW5nX2JsaXQgOiBzdHJpbmcgLT4gaW50IC0+IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfYmxpdF9zdHJpbmdcIiBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYnl0ZXNfYmxpdCA6IGJ5dGVzIC0+IGludCAtPiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX2JsaXRfYnl0ZXNcIiBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYnl0ZXNfdW5zYWZlX3RvX3N0cmluZyA6IGJ5dGVzIC0+IHN0cmluZyA9IFwiJWJ5dGVzX3RvX3N0cmluZ1wiXG5cbmxldCAoIF4gKSBzMSBzMiA9XG4gIGxldCBsMSA9IHN0cmluZ19sZW5ndGggczEgYW5kIGwyID0gc3RyaW5nX2xlbmd0aCBzMiBpblxuICBsZXQgcyA9IGJ5dGVzX2NyZWF0ZSAobDEgKyBsMikgaW5cbiAgc3RyaW5nX2JsaXQgczEgMCBzIDAgbDE7XG4gIHN0cmluZ19ibGl0IHMyIDAgcyBsMSBsMjtcbiAgYnl0ZXNfdW5zYWZlX3RvX3N0cmluZyBzXG5cbigqIENoYXJhY3RlciBvcGVyYXRpb25zIC0tIG1vcmUgaW4gbW9kdWxlIENoYXIgKilcblxuZXh0ZXJuYWwgaW50X29mX2NoYXIgOiBjaGFyIC0+IGludCA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIHVuc2FmZV9jaGFyX29mX2ludCA6IGludCAtPiBjaGFyID0gXCIlaWRlbnRpdHlcIlxubGV0IGNoYXJfb2ZfaW50IG4gPVxuICBpZiBuIDwgMCB8fCBuID4gMjU1IHRoZW4gaW52YWxpZF9hcmcgXCJjaGFyX29mX2ludFwiIGVsc2UgdW5zYWZlX2NoYXJfb2ZfaW50IG5cblxuKCogVW5pdCBvcGVyYXRpb25zICopXG5cbmV4dGVybmFsIGlnbm9yZSA6ICdhIC0+IHVuaXQgPSBcIiVpZ25vcmVcIlxuXG4oKiBQYWlyIG9wZXJhdGlvbnMgKilcblxuZXh0ZXJuYWwgZnN0IDogJ2EgKiAnYiAtPiAnYSA9IFwiJWZpZWxkMFwiXG5leHRlcm5hbCBzbmQgOiAnYSAqICdiIC0+ICdiID0gXCIlZmllbGQxXCJcblxuKCogUmVmZXJlbmNlcyAqKVxuXG50eXBlICdhIHJlZiA9IHsgbXV0YWJsZSBjb250ZW50cyA6ICdhIH1cbmV4dGVybmFsIHJlZiA6ICdhIC0+ICdhIHJlZiA9IFwiJW1ha2VtdXRhYmxlXCJcbmV4dGVybmFsICggISApIDogJ2EgcmVmIC0+ICdhID0gXCIlZmllbGQwXCJcbmV4dGVybmFsICggOj0gKSA6ICdhIHJlZiAtPiAnYSAtPiB1bml0ID0gXCIlc2V0ZmllbGQwXCJcbmV4dGVybmFsIGluY3IgOiBpbnQgcmVmIC0+IHVuaXQgPSBcIiVpbmNyXCJcbmV4dGVybmFsIGRlY3IgOiBpbnQgcmVmIC0+IHVuaXQgPSBcIiVkZWNyXCJcblxuKCogUmVzdWx0IHR5cGUgKilcblxudHlwZSAoJ2EsJ2IpIHJlc3VsdCA9IE9rIG9mICdhIHwgRXJyb3Igb2YgJ2JcblxuKCogU3RyaW5nIGNvbnZlcnNpb24gZnVuY3Rpb25zICopXG5cbmV4dGVybmFsIGZvcm1hdF9pbnQgOiBzdHJpbmcgLT4gaW50IC0+IHN0cmluZyA9IFwiY2FtbF9mb3JtYXRfaW50XCJcbmV4dGVybmFsIGZvcm1hdF9mbG9hdCA6IHN0cmluZyAtPiBmbG9hdCAtPiBzdHJpbmcgPSBcImNhbWxfZm9ybWF0X2Zsb2F0XCJcblxubGV0IHN0cmluZ19vZl9ib29sIGIgPVxuICBpZiBiIHRoZW4gXCJ0cnVlXCIgZWxzZSBcImZhbHNlXCJcbmxldCBib29sX29mX3N0cmluZyA9IGZ1bmN0aW9uXG4gIHwgXCJ0cnVlXCIgLT4gdHJ1ZVxuICB8IFwiZmFsc2VcIiAtPiBmYWxzZVxuICB8IF8gLT4gaW52YWxpZF9hcmcgXCJib29sX29mX3N0cmluZ1wiXG5cbmxldCBib29sX29mX3N0cmluZ19vcHQgPSBmdW5jdGlvblxuICB8IFwidHJ1ZVwiIC0+IFNvbWUgdHJ1ZVxuICB8IFwiZmFsc2VcIiAtPiBTb21lIGZhbHNlXG4gIHwgXyAtPiBOb25lXG5cbmxldCBzdHJpbmdfb2ZfaW50IG4gPVxuICBmb3JtYXRfaW50IFwiJWRcIiBuXG5cbmV4dGVybmFsIGludF9vZl9zdHJpbmcgOiBzdHJpbmcgLT4gaW50ID0gXCJjYW1sX2ludF9vZl9zdHJpbmdcIlxuXG5sZXQgaW50X29mX3N0cmluZ19vcHQgcyA9XG4gICgqIFRPRE86IHByb3ZpZGUgdGhpcyBkaXJlY3RseSBhcyBhIG5vbi1yYWlzaW5nIHByaW1pdGl2ZS4gKilcbiAgdHJ5IFNvbWUgKGludF9vZl9zdHJpbmcgcylcbiAgd2l0aCBGYWlsdXJlIF8gLT4gTm9uZVxuXG5leHRlcm5hbCBzdHJpbmdfZ2V0IDogc3RyaW5nIC0+IGludCAtPiBjaGFyID0gXCIlc3RyaW5nX3NhZmVfZ2V0XCJcblxubGV0IHZhbGlkX2Zsb2F0X2xleGVtIHMgPVxuICBsZXQgbCA9IHN0cmluZ19sZW5ndGggcyBpblxuICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgaWYgaSA+PSBsIHRoZW4gcyBeIFwiLlwiIGVsc2VcbiAgICBtYXRjaCBzdHJpbmdfZ2V0IHMgaSB3aXRoXG4gICAgfCAnMCcgLi4gJzknIHwgJy0nIC0+IGxvb3AgKGkgKyAxKVxuICAgIHwgXyAtPiBzXG4gIGluXG4gIGxvb3AgMFxuXG5sZXQgc3RyaW5nX29mX2Zsb2F0IGYgPSB2YWxpZF9mbG9hdF9sZXhlbSAoZm9ybWF0X2Zsb2F0IFwiJS4xMmdcIiBmKVxuXG5leHRlcm5hbCBmbG9hdF9vZl9zdHJpbmcgOiBzdHJpbmcgLT4gZmxvYXQgPSBcImNhbWxfZmxvYXRfb2Zfc3RyaW5nXCJcblxubGV0IGZsb2F0X29mX3N0cmluZ19vcHQgcyA9XG4gICgqIFRPRE86IHByb3ZpZGUgdGhpcyBkaXJlY3RseSBhcyBhIG5vbi1yYWlzaW5nIHByaW1pdGl2ZS4gKilcbiAgdHJ5IFNvbWUgKGZsb2F0X29mX3N0cmluZyBzKVxuICB3aXRoIEZhaWx1cmUgXyAtPiBOb25lXG5cbigqIExpc3Qgb3BlcmF0aW9ucyAtLSBtb3JlIGluIG1vZHVsZSBMaXN0ICopXG5cbmxldCByZWMgKCBAICkgbDEgbDIgPVxuICBtYXRjaCBsMSB3aXRoXG4gICAgW10gLT4gbDJcbiAgfCBoZCA6OiB0bCAtPiBoZCA6OiAodGwgQCBsMilcblxuKCogSS9PIG9wZXJhdGlvbnMgKilcblxudHlwZSBpbl9jaGFubmVsXG50eXBlIG91dF9jaGFubmVsXG5cbmV4dGVybmFsIG9wZW5fZGVzY3JpcHRvcl9vdXQgOiBpbnQgLT4gb3V0X2NoYW5uZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfbWxfb3Blbl9kZXNjcmlwdG9yX291dFwiXG5leHRlcm5hbCBvcGVuX2Rlc2NyaXB0b3JfaW4gOiBpbnQgLT4gaW5fY2hhbm5lbCA9IFwiY2FtbF9tbF9vcGVuX2Rlc2NyaXB0b3JfaW5cIlxuXG5sZXQgc3RkaW4gPSBvcGVuX2Rlc2NyaXB0b3JfaW4gMFxubGV0IHN0ZG91dCA9IG9wZW5fZGVzY3JpcHRvcl9vdXQgMVxubGV0IHN0ZGVyciA9IG9wZW5fZGVzY3JpcHRvcl9vdXQgMlxuXG4oKiBHZW5lcmFsIG91dHB1dCBmdW5jdGlvbnMgKilcblxudHlwZSBvcGVuX2ZsYWcgPVxuICAgIE9wZW5fcmRvbmx5IHwgT3Blbl93cm9ubHkgfCBPcGVuX2FwcGVuZFxuICB8IE9wZW5fY3JlYXQgfCBPcGVuX3RydW5jIHwgT3Blbl9leGNsXG4gIHwgT3Blbl9iaW5hcnkgfCBPcGVuX3RleHQgfCBPcGVuX25vbmJsb2NrXG5cbmV4dGVybmFsIG9wZW5fZGVzYyA6IHN0cmluZyAtPiBvcGVuX2ZsYWcgbGlzdCAtPiBpbnQgLT4gaW50ID0gXCJjYW1sX3N5c19vcGVuXCJcblxuZXh0ZXJuYWwgc2V0X291dF9jaGFubmVsX25hbWU6IG91dF9jaGFubmVsIC0+IHN0cmluZyAtPiB1bml0ID1cbiAgXCJjYW1sX21sX3NldF9jaGFubmVsX25hbWVcIlxuXG5sZXQgb3Blbl9vdXRfZ2VuIG1vZGUgcGVybSBuYW1lID1cbiAgbGV0IGMgPSBvcGVuX2Rlc2NyaXB0b3Jfb3V0KG9wZW5fZGVzYyBuYW1lIG1vZGUgcGVybSkgaW5cbiAgc2V0X291dF9jaGFubmVsX25hbWUgYyBuYW1lO1xuICBjXG5cbmxldCBvcGVuX291dCBuYW1lID1cbiAgb3Blbl9vdXRfZ2VuIFtPcGVuX3dyb25seTsgT3Blbl9jcmVhdDsgT3Blbl90cnVuYzsgT3Blbl90ZXh0XSAwbzY2NiBuYW1lXG5cbmxldCBvcGVuX291dF9iaW4gbmFtZSA9XG4gIG9wZW5fb3V0X2dlbiBbT3Blbl93cm9ubHk7IE9wZW5fY3JlYXQ7IE9wZW5fdHJ1bmM7IE9wZW5fYmluYXJ5XSAwbzY2NiBuYW1lXG5cbmV4dGVybmFsIGZsdXNoIDogb3V0X2NoYW5uZWwgLT4gdW5pdCA9IFwiY2FtbF9tbF9mbHVzaFwiXG5cbmV4dGVybmFsIG91dF9jaGFubmVsc19saXN0IDogdW5pdCAtPiBvdXRfY2hhbm5lbCBsaXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9tbF9vdXRfY2hhbm5lbHNfbGlzdFwiXG5cbmxldCBmbHVzaF9hbGwgKCkgPVxuICBsZXQgcmVjIGl0ZXIgPSBmdW5jdGlvblxuICAgICAgW10gLT4gKClcbiAgICB8IGE6OmwgLT5cbiAgICAgICAgYmVnaW4gdHJ5XG4gICAgICAgICAgICBmbHVzaCBhXG4gICAgICAgIHdpdGggU3lzX2Vycm9yIF8gLT5cbiAgICAgICAgICAoKSAoKiBpZ25vcmUgY2hhbm5lbHMgY2xvc2VkIGR1cmluZyBhIHByZWNlZGluZyBmbHVzaC4gKilcbiAgICAgICAgZW5kO1xuICAgICAgICBpdGVyIGxcbiAgaW4gaXRlciAob3V0X2NoYW5uZWxzX2xpc3QgKCkpXG5cbmV4dGVybmFsIHVuc2FmZV9vdXRwdXQgOiBvdXRfY2hhbm5lbCAtPiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfbWxfb3V0cHV0X2J5dGVzXCJcbmV4dGVybmFsIHVuc2FmZV9vdXRwdXRfc3RyaW5nIDogb3V0X2NoYW5uZWwgLT4gc3RyaW5nIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfbWxfb3V0cHV0XCJcblxuZXh0ZXJuYWwgb3V0cHV0X2NoYXIgOiBvdXRfY2hhbm5lbCAtPiBjaGFyIC0+IHVuaXQgPSBcImNhbWxfbWxfb3V0cHV0X2NoYXJcIlxuXG5sZXQgb3V0cHV0X2J5dGVzIG9jIHMgPVxuICB1bnNhZmVfb3V0cHV0IG9jIHMgMCAoYnl0ZXNfbGVuZ3RoIHMpXG5cbmxldCBvdXRwdXRfc3RyaW5nIG9jIHMgPVxuICB1bnNhZmVfb3V0cHV0X3N0cmluZyBvYyBzIDAgKHN0cmluZ19sZW5ndGggcylcblxubGV0IG91dHB1dCBvYyBzIG9mcyBsZW4gPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gYnl0ZXNfbGVuZ3RoIHMgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIm91dHB1dFwiXG4gIGVsc2UgdW5zYWZlX291dHB1dCBvYyBzIG9mcyBsZW5cblxubGV0IG91dHB1dF9zdWJzdHJpbmcgb2MgcyBvZnMgbGVuID1cbiAgaWYgb2ZzIDwgMCB8fCBsZW4gPCAwIHx8IG9mcyA+IHN0cmluZ19sZW5ndGggcyAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwib3V0cHV0X3N1YnN0cmluZ1wiXG4gIGVsc2UgdW5zYWZlX291dHB1dF9zdHJpbmcgb2MgcyBvZnMgbGVuXG5cbmV4dGVybmFsIG91dHB1dF9ieXRlIDogb3V0X2NoYW5uZWwgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfbWxfb3V0cHV0X2NoYXJcIlxuZXh0ZXJuYWwgb3V0cHV0X2JpbmFyeV9pbnQgOiBvdXRfY2hhbm5lbCAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9tbF9vdXRwdXRfaW50XCJcblxuZXh0ZXJuYWwgbWFyc2hhbF90b19jaGFubmVsIDogb3V0X2NoYW5uZWwgLT4gJ2EgLT4gdW5pdCBsaXN0IC0+IHVuaXRcbiAgICAgPSBcImNhbWxfb3V0cHV0X3ZhbHVlXCJcbmxldCBvdXRwdXRfdmFsdWUgY2hhbiB2ID0gbWFyc2hhbF90b19jaGFubmVsIGNoYW4gdiBbXVxuXG5leHRlcm5hbCBzZWVrX291dCA6IG91dF9jaGFubmVsIC0+IGludCAtPiB1bml0ID0gXCJjYW1sX21sX3NlZWtfb3V0XCJcbmV4dGVybmFsIHBvc19vdXQgOiBvdXRfY2hhbm5lbCAtPiBpbnQgPSBcImNhbWxfbWxfcG9zX291dFwiXG5leHRlcm5hbCBvdXRfY2hhbm5lbF9sZW5ndGggOiBvdXRfY2hhbm5lbCAtPiBpbnQgPSBcImNhbWxfbWxfY2hhbm5lbF9zaXplXCJcbmV4dGVybmFsIGNsb3NlX291dF9jaGFubmVsIDogb3V0X2NoYW5uZWwgLT4gdW5pdCA9IFwiY2FtbF9tbF9jbG9zZV9jaGFubmVsXCJcbmxldCBjbG9zZV9vdXQgb2MgPSBmbHVzaCBvYzsgY2xvc2Vfb3V0X2NoYW5uZWwgb2NcbmxldCBjbG9zZV9vdXRfbm9lcnIgb2MgPVxuICAodHJ5IGZsdXNoIG9jIHdpdGggXyAtPiAoKSk7XG4gICh0cnkgY2xvc2Vfb3V0X2NoYW5uZWwgb2Mgd2l0aCBfIC0+ICgpKVxuZXh0ZXJuYWwgc2V0X2JpbmFyeV9tb2RlX291dCA6IG91dF9jaGFubmVsIC0+IGJvb2wgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9tbF9zZXRfYmluYXJ5X21vZGVcIlxuXG4oKiBHZW5lcmFsIGlucHV0IGZ1bmN0aW9ucyAqKVxuXG5leHRlcm5hbCBzZXRfaW5fY2hhbm5lbF9uYW1lOiBpbl9jaGFubmVsIC0+IHN0cmluZyAtPiB1bml0ID1cbiAgXCJjYW1sX21sX3NldF9jaGFubmVsX25hbWVcIlxuXG5sZXQgb3Blbl9pbl9nZW4gbW9kZSBwZXJtIG5hbWUgPVxuICBsZXQgYyA9IG9wZW5fZGVzY3JpcHRvcl9pbihvcGVuX2Rlc2MgbmFtZSBtb2RlIHBlcm0pIGluXG4gIHNldF9pbl9jaGFubmVsX25hbWUgYyBuYW1lO1xuICBjXG5cbmxldCBvcGVuX2luIG5hbWUgPVxuICBvcGVuX2luX2dlbiBbT3Blbl9yZG9ubHk7IE9wZW5fdGV4dF0gMCBuYW1lXG5cbmxldCBvcGVuX2luX2JpbiBuYW1lID1cbiAgb3Blbl9pbl9nZW4gW09wZW5fcmRvbmx5OyBPcGVuX2JpbmFyeV0gMCBuYW1lXG5cbmV4dGVybmFsIGlucHV0X2NoYXIgOiBpbl9jaGFubmVsIC0+IGNoYXIgPSBcImNhbWxfbWxfaW5wdXRfY2hhclwiXG5cbmV4dGVybmFsIHVuc2FmZV9pbnB1dCA6IGluX2NoYW5uZWwgLT4gYnl0ZXMgLT4gaW50IC0+IGludCAtPiBpbnRcbiAgICAgICAgICAgICAgICAgICAgICA9IFwiY2FtbF9tbF9pbnB1dFwiXG5cbmxldCBpbnB1dCBpYyBzIG9mcyBsZW4gPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gYnl0ZXNfbGVuZ3RoIHMgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcImlucHV0XCJcbiAgZWxzZSB1bnNhZmVfaW5wdXQgaWMgcyBvZnMgbGVuXG5cbmxldCByZWMgdW5zYWZlX3JlYWxseV9pbnB1dCBpYyBzIG9mcyBsZW4gPVxuICBpZiBsZW4gPD0gMCB0aGVuICgpIGVsc2UgYmVnaW5cbiAgICBsZXQgciA9IHVuc2FmZV9pbnB1dCBpYyBzIG9mcyBsZW4gaW5cbiAgICBpZiByID0gMFxuICAgIHRoZW4gcmFpc2UgRW5kX29mX2ZpbGVcbiAgICBlbHNlIHVuc2FmZV9yZWFsbHlfaW5wdXQgaWMgcyAob2ZzICsgcikgKGxlbiAtIHIpXG4gIGVuZFxuXG5sZXQgcmVhbGx5X2lucHV0IGljIHMgb2ZzIGxlbiA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBieXRlc19sZW5ndGggcyAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwicmVhbGx5X2lucHV0XCJcbiAgZWxzZSB1bnNhZmVfcmVhbGx5X2lucHV0IGljIHMgb2ZzIGxlblxuXG5sZXQgcmVhbGx5X2lucHV0X3N0cmluZyBpYyBsZW4gPVxuICBsZXQgcyA9IGJ5dGVzX2NyZWF0ZSBsZW4gaW5cbiAgcmVhbGx5X2lucHV0IGljIHMgMCBsZW47XG4gIGJ5dGVzX3Vuc2FmZV90b19zdHJpbmcgc1xuXG5leHRlcm5hbCBpbnB1dF9zY2FuX2xpbmUgOiBpbl9jaGFubmVsIC0+IGludCA9IFwiY2FtbF9tbF9pbnB1dF9zY2FuX2xpbmVcIlxuXG5sZXQgaW5wdXRfbGluZSBjaGFuID1cbiAgbGV0IHJlYyBidWlsZF9yZXN1bHQgYnVmIHBvcyA9IGZ1bmN0aW9uXG4gICAgW10gLT4gYnVmXG4gIHwgaGQgOjogdGwgLT5cbiAgICAgIGxldCBsZW4gPSBieXRlc19sZW5ndGggaGQgaW5cbiAgICAgIGJ5dGVzX2JsaXQgaGQgMCBidWYgKHBvcyAtIGxlbikgbGVuO1xuICAgICAgYnVpbGRfcmVzdWx0IGJ1ZiAocG9zIC0gbGVuKSB0bCBpblxuICBsZXQgcmVjIHNjYW4gYWNjdSBsZW4gPVxuICAgIGxldCBuID0gaW5wdXRfc2Nhbl9saW5lIGNoYW4gaW5cbiAgICBpZiBuID0gMCB0aGVuIGJlZ2luICAgICAgICAgICAgICAgICAgICgqIG4gPSAwOiB3ZSBhcmUgYXQgRU9GICopXG4gICAgICBtYXRjaCBhY2N1IHdpdGhcbiAgICAgICAgW10gLT4gcmFpc2UgRW5kX29mX2ZpbGVcbiAgICAgIHwgXyAgLT4gYnVpbGRfcmVzdWx0IChieXRlc19jcmVhdGUgbGVuKSBsZW4gYWNjdVxuICAgIGVuZCBlbHNlIGlmIG4gPiAwIHRoZW4gYmVnaW4gICAgICAgICAgKCogbiA+IDA6IG5ld2xpbmUgZm91bmQgaW4gYnVmZmVyICopXG4gICAgICBsZXQgcmVzID0gYnl0ZXNfY3JlYXRlIChuIC0gMSkgaW5cbiAgICAgIGlnbm9yZSAodW5zYWZlX2lucHV0IGNoYW4gcmVzIDAgKG4gLSAxKSk7XG4gICAgICBpZ25vcmUgKGlucHV0X2NoYXIgY2hhbik7ICAgICAgICAgICAoKiBza2lwIHRoZSBuZXdsaW5lICopXG4gICAgICBtYXRjaCBhY2N1IHdpdGhcbiAgICAgICAgW10gLT4gcmVzXG4gICAgICB8ICBfIC0+IGxldCBsZW4gPSBsZW4gKyBuIC0gMSBpblxuICAgICAgICAgICAgICBidWlsZF9yZXN1bHQgKGJ5dGVzX2NyZWF0ZSBsZW4pIGxlbiAocmVzIDo6IGFjY3UpXG4gICAgZW5kIGVsc2UgYmVnaW4gICAgICAgICAgICAgICAgICAgICAgICAoKiBuIDwgMDogbmV3bGluZSBub3QgZm91bmQgKilcbiAgICAgIGxldCBiZWcgPSBieXRlc19jcmVhdGUgKC1uKSBpblxuICAgICAgaWdub3JlKHVuc2FmZV9pbnB1dCBjaGFuIGJlZyAwICgtbikpO1xuICAgICAgc2NhbiAoYmVnIDo6IGFjY3UpIChsZW4gLSBuKVxuICAgIGVuZFxuICBpbiBieXRlc191bnNhZmVfdG9fc3RyaW5nIChzY2FuIFtdIDApXG5cbmV4dGVybmFsIGlucHV0X2J5dGUgOiBpbl9jaGFubmVsIC0+IGludCA9IFwiY2FtbF9tbF9pbnB1dF9jaGFyXCJcbmV4dGVybmFsIGlucHV0X2JpbmFyeV9pbnQgOiBpbl9jaGFubmVsIC0+IGludCA9IFwiY2FtbF9tbF9pbnB1dF9pbnRcIlxuZXh0ZXJuYWwgaW5wdXRfdmFsdWUgOiBpbl9jaGFubmVsIC0+ICdhID0gXCJjYW1sX2lucHV0X3ZhbHVlXCJcbmV4dGVybmFsIHNlZWtfaW4gOiBpbl9jaGFubmVsIC0+IGludCAtPiB1bml0ID0gXCJjYW1sX21sX3NlZWtfaW5cIlxuZXh0ZXJuYWwgcG9zX2luIDogaW5fY2hhbm5lbCAtPiBpbnQgPSBcImNhbWxfbWxfcG9zX2luXCJcbmV4dGVybmFsIGluX2NoYW5uZWxfbGVuZ3RoIDogaW5fY2hhbm5lbCAtPiBpbnQgPSBcImNhbWxfbWxfY2hhbm5lbF9zaXplXCJcbmV4dGVybmFsIGNsb3NlX2luIDogaW5fY2hhbm5lbCAtPiB1bml0ID0gXCJjYW1sX21sX2Nsb3NlX2NoYW5uZWxcIlxubGV0IGNsb3NlX2luX25vZXJyIGljID0gKHRyeSBjbG9zZV9pbiBpYyB3aXRoIF8gLT4gKCkpXG5leHRlcm5hbCBzZXRfYmluYXJ5X21vZGVfaW4gOiBpbl9jaGFubmVsIC0+IGJvb2wgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX21sX3NldF9iaW5hcnlfbW9kZVwiXG5cbigqIE91dHB1dCBmdW5jdGlvbnMgb24gc3RhbmRhcmQgb3V0cHV0ICopXG5cbmxldCBwcmludF9jaGFyIGMgPSBvdXRwdXRfY2hhciBzdGRvdXQgY1xubGV0IHByaW50X3N0cmluZyBzID0gb3V0cHV0X3N0cmluZyBzdGRvdXQgc1xubGV0IHByaW50X2J5dGVzIHMgPSBvdXRwdXRfYnl0ZXMgc3Rkb3V0IHNcbmxldCBwcmludF9pbnQgaSA9IG91dHB1dF9zdHJpbmcgc3Rkb3V0IChzdHJpbmdfb2ZfaW50IGkpXG5sZXQgcHJpbnRfZmxvYXQgZiA9IG91dHB1dF9zdHJpbmcgc3Rkb3V0IChzdHJpbmdfb2ZfZmxvYXQgZilcbmxldCBwcmludF9lbmRsaW5lIHMgPVxuICBvdXRwdXRfc3RyaW5nIHN0ZG91dCBzOyBvdXRwdXRfY2hhciBzdGRvdXQgJ1xcbic7IGZsdXNoIHN0ZG91dFxubGV0IHByaW50X25ld2xpbmUgKCkgPSBvdXRwdXRfY2hhciBzdGRvdXQgJ1xcbic7IGZsdXNoIHN0ZG91dFxuXG4oKiBPdXRwdXQgZnVuY3Rpb25zIG9uIHN0YW5kYXJkIGVycm9yICopXG5cbmxldCBwcmVycl9jaGFyIGMgPSBvdXRwdXRfY2hhciBzdGRlcnIgY1xubGV0IHByZXJyX3N0cmluZyBzID0gb3V0cHV0X3N0cmluZyBzdGRlcnIgc1xubGV0IHByZXJyX2J5dGVzIHMgPSBvdXRwdXRfYnl0ZXMgc3RkZXJyIHNcbmxldCBwcmVycl9pbnQgaSA9IG91dHB1dF9zdHJpbmcgc3RkZXJyIChzdHJpbmdfb2ZfaW50IGkpXG5sZXQgcHJlcnJfZmxvYXQgZiA9IG91dHB1dF9zdHJpbmcgc3RkZXJyIChzdHJpbmdfb2ZfZmxvYXQgZilcbmxldCBwcmVycl9lbmRsaW5lIHMgPVxuICBvdXRwdXRfc3RyaW5nIHN0ZGVyciBzOyBvdXRwdXRfY2hhciBzdGRlcnIgJ1xcbic7IGZsdXNoIHN0ZGVyclxubGV0IHByZXJyX25ld2xpbmUgKCkgPSBvdXRwdXRfY2hhciBzdGRlcnIgJ1xcbic7IGZsdXNoIHN0ZGVyclxuXG4oKiBJbnB1dCBmdW5jdGlvbnMgb24gc3RhbmRhcmQgaW5wdXQgKilcblxubGV0IHJlYWRfbGluZSAoKSA9IGZsdXNoIHN0ZG91dDsgaW5wdXRfbGluZSBzdGRpblxubGV0IHJlYWRfaW50ICgpID0gaW50X29mX3N0cmluZyhyZWFkX2xpbmUoKSlcbmxldCByZWFkX2ludF9vcHQgKCkgPSBpbnRfb2Zfc3RyaW5nX29wdChyZWFkX2xpbmUoKSlcbmxldCByZWFkX2Zsb2F0ICgpID0gZmxvYXRfb2Zfc3RyaW5nKHJlYWRfbGluZSgpKVxubGV0IHJlYWRfZmxvYXRfb3B0ICgpID0gZmxvYXRfb2Zfc3RyaW5nX29wdChyZWFkX2xpbmUoKSlcblxuKCogT3BlcmF0aW9ucyBvbiBsYXJnZSBmaWxlcyAqKVxuXG5tb2R1bGUgTGFyZ2VGaWxlID1cbiAgc3RydWN0XG4gICAgZXh0ZXJuYWwgc2Vla19vdXQgOiBvdXRfY2hhbm5lbCAtPiBpbnQ2NCAtPiB1bml0ID0gXCJjYW1sX21sX3NlZWtfb3V0XzY0XCJcbiAgICBleHRlcm5hbCBwb3Nfb3V0IDogb3V0X2NoYW5uZWwgLT4gaW50NjQgPSBcImNhbWxfbWxfcG9zX291dF82NFwiXG4gICAgZXh0ZXJuYWwgb3V0X2NoYW5uZWxfbGVuZ3RoIDogb3V0X2NoYW5uZWwgLT4gaW50NjRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfbWxfY2hhbm5lbF9zaXplXzY0XCJcbiAgICBleHRlcm5hbCBzZWVrX2luIDogaW5fY2hhbm5lbCAtPiBpbnQ2NCAtPiB1bml0ID0gXCJjYW1sX21sX3NlZWtfaW5fNjRcIlxuICAgIGV4dGVybmFsIHBvc19pbiA6IGluX2NoYW5uZWwgLT4gaW50NjQgPSBcImNhbWxfbWxfcG9zX2luXzY0XCJcbiAgICBleHRlcm5hbCBpbl9jaGFubmVsX2xlbmd0aCA6IGluX2NoYW5uZWwgLT4gaW50NjQgPSBcImNhbWxfbWxfY2hhbm5lbF9zaXplXzY0XCJcbiAgZW5kXG5cbigqIEZvcm1hdHMgKilcblxudHlwZSAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0NlxuICAgPSAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzLmZvcm1hdDZcbiAgID0gRm9ybWF0IG9mICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBDYW1saW50ZXJuYWxGb3JtYXRCYXNpY3MuZm10XG4gICAgICAgICAgICAgICAqIHN0cmluZ1xuXG50eXBlICgnYSwgJ2IsICdjLCAnZCkgZm9ybWF0NCA9ICgnYSwgJ2IsICdjLCAnYywgJ2MsICdkKSBmb3JtYXQ2XG5cbnR5cGUgKCdhLCAnYiwgJ2MpIGZvcm1hdCA9ICgnYSwgJ2IsICdjLCAnYykgZm9ybWF0NFxuXG5sZXQgc3RyaW5nX29mX2Zvcm1hdCAoRm9ybWF0IChfZm10LCBzdHIpKSA9IHN0clxuXG5leHRlcm5hbCBmb3JtYXRfb2Zfc3RyaW5nIDpcbiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0NiAtPlxuICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXQ2ID0gXCIlaWRlbnRpdHlcIlxuXG5sZXQgKCBeXiApIChGb3JtYXQgKGZtdDEsIHN0cjEpKSAoRm9ybWF0IChmbXQyLCBzdHIyKSkgPVxuICBGb3JtYXQgKENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljcy5jb25jYXRfZm10IGZtdDEgZm10MixcbiAgICAgICAgICBzdHIxIF4gXCIlLFwiIF4gc3RyMilcblxuKCogTWlzY2VsbGFuZW91cyAqKVxuXG5leHRlcm5hbCBzeXNfZXhpdCA6IGludCAtPiAnYSA9IFwiY2FtbF9zeXNfZXhpdFwiXG5cbmxldCBleGl0X2Z1bmN0aW9uID0gQ2FtbGludGVybmFsQXRvbWljLm1ha2UgZmx1c2hfYWxsXG5cbmxldCByZWMgYXRfZXhpdCBmID1cbiAgbGV0IG1vZHVsZSBBdG9taWMgPSBDYW1saW50ZXJuYWxBdG9taWMgaW5cbiAgKCogTVBSIzcyNTMsIE1QUiM3Nzk2OiBtYWtlIHN1cmUgXCJmXCIgaXMgZXhlY3V0ZWQgb25seSBvbmNlICopXG4gIGxldCBmX3lldF90b19ydW4gPSBBdG9taWMubWFrZSB0cnVlIGluXG4gIGxldCBvbGRfZXhpdCA9IEF0b21pYy5nZXQgZXhpdF9mdW5jdGlvbiBpblxuICBsZXQgbmV3X2V4aXQgKCkgPVxuICAgIGlmIEF0b21pYy5jb21wYXJlX2FuZF9zZXQgZl95ZXRfdG9fcnVuIHRydWUgZmFsc2UgdGhlbiBmICgpIDtcbiAgICBvbGRfZXhpdCAoKVxuICBpblxuICBsZXQgc3VjY2VzcyA9IEF0b21pYy5jb21wYXJlX2FuZF9zZXQgZXhpdF9mdW5jdGlvbiBvbGRfZXhpdCBuZXdfZXhpdCBpblxuICBpZiBub3Qgc3VjY2VzcyB0aGVuIGF0X2V4aXQgZlxuXG5sZXQgZG9fYXRfZXhpdCAoKSA9IChDYW1saW50ZXJuYWxBdG9taWMuZ2V0IGV4aXRfZnVuY3Rpb24pICgpXG5cbmxldCBleGl0IHJldGNvZGUgPVxuICBkb19hdF9leGl0ICgpO1xuICBzeXNfZXhpdCByZXRjb2RlXG5cbmxldCBfID0gcmVnaXN0ZXJfbmFtZWRfdmFsdWUgXCJQZXJ2YXNpdmVzLmRvX2F0X2V4aXRcIiBkb19hdF9leGl0XG5cbmV4dGVybmFsIG1ham9yIDogdW5pdCAtPiB1bml0ID0gXCJjYW1sX2djX21ham9yXCJcbmV4dGVybmFsIG5ha2VkX3BvaW50ZXJzX2NoZWNrZWQgOiB1bml0IC0+IGJvb2xcbiAgPSBcImNhbWxfc3lzX2NvbnN0X25ha2VkX3BvaW50ZXJzX2NoZWNrZWRcIlxubGV0ICgpID0gaWYgbmFrZWRfcG9pbnRlcnNfY2hlY2tlZCAoKSB0aGVuIGF0X2V4aXQgbWFqb3JcblxuKCpNT0RVTEVfQUxJQVNFUyopXG5tb2R1bGUgQXJnICAgICAgICAgID0gQXJnXG5tb2R1bGUgQXJyYXkgICAgICAgID0gQXJyYXlcbm1vZHVsZSBBcnJheUxhYmVscyAgPSBBcnJheUxhYmVsc1xubW9kdWxlIEF0b21pYyAgICAgICA9IEF0b21pY1xubW9kdWxlIEJpZ2FycmF5ICAgICA9IEJpZ2FycmF5XG5tb2R1bGUgQm9vbCAgICAgICAgID0gQm9vbFxubW9kdWxlIEJ1ZmZlciAgICAgICA9IEJ1ZmZlclxubW9kdWxlIEJ5dGVzICAgICAgICA9IEJ5dGVzXG5tb2R1bGUgQnl0ZXNMYWJlbHMgID0gQnl0ZXNMYWJlbHNcbm1vZHVsZSBDYWxsYmFjayAgICAgPSBDYWxsYmFja1xubW9kdWxlIENoYXIgICAgICAgICA9IENoYXJcbm1vZHVsZSBDb21wbGV4ICAgICAgPSBDb21wbGV4XG5tb2R1bGUgRGlnZXN0ICAgICAgID0gRGlnZXN0XG5tb2R1bGUgRWl0aGVyICAgICAgID0gRWl0aGVyXG5tb2R1bGUgRXBoZW1lcm9uICAgID0gRXBoZW1lcm9uXG5tb2R1bGUgRmlsZW5hbWUgICAgID0gRmlsZW5hbWVcbm1vZHVsZSBGbG9hdCAgICAgICAgPSBGbG9hdFxubW9kdWxlIEZvcm1hdCAgICAgICA9IEZvcm1hdFxubW9kdWxlIEZ1biAgICAgICAgICA9IEZ1blxubW9kdWxlIEdjICAgICAgICAgICA9IEdjXG5tb2R1bGUgR2VubGV4ICAgICAgID0gR2VubGV4XG5tb2R1bGUgSGFzaHRibCAgICAgID0gSGFzaHRibFxubW9kdWxlIEludCAgICAgICAgICA9IEludFxubW9kdWxlIEludDMyICAgICAgICA9IEludDMyXG5tb2R1bGUgSW50NjQgICAgICAgID0gSW50NjRcbm1vZHVsZSBMYXp5ICAgICAgICAgPSBMYXp5XG5tb2R1bGUgTGV4aW5nICAgICAgID0gTGV4aW5nXG5tb2R1bGUgTGlzdCAgICAgICAgID0gTGlzdFxubW9kdWxlIExpc3RMYWJlbHMgICA9IExpc3RMYWJlbHNcbm1vZHVsZSBNYXAgICAgICAgICAgPSBNYXBcbm1vZHVsZSBNYXJzaGFsICAgICAgPSBNYXJzaGFsXG5tb2R1bGUgTW9yZUxhYmVscyAgID0gTW9yZUxhYmVsc1xubW9kdWxlIE5hdGl2ZWludCAgICA9IE5hdGl2ZWludFxubW9kdWxlIE9iaiAgICAgICAgICA9IE9ialxubW9kdWxlIE9vICAgICAgICAgICA9IE9vXG5tb2R1bGUgT3B0aW9uICAgICAgID0gT3B0aW9uXG5tb2R1bGUgUGFyc2luZyAgICAgID0gUGFyc2luZ1xubW9kdWxlIFBlcnZhc2l2ZXMgICA9IFBlcnZhc2l2ZXNcbm1vZHVsZSBQcmludGV4YyAgICAgPSBQcmludGV4Y1xubW9kdWxlIFByaW50ZiAgICAgICA9IFByaW50ZlxubW9kdWxlIFF1ZXVlICAgICAgICA9IFF1ZXVlXG5tb2R1bGUgUmFuZG9tICAgICAgID0gUmFuZG9tXG5tb2R1bGUgUmVzdWx0ICAgICAgID0gUmVzdWx0XG5tb2R1bGUgU2NhbmYgICAgICAgID0gU2NhbmZcbm1vZHVsZSBTZXEgICAgICAgICAgPSBTZXFcbm1vZHVsZSBTZXQgICAgICAgICAgPSBTZXRcbm1vZHVsZSBTdGFjayAgICAgICAgPSBTdGFja1xubW9kdWxlIFN0ZExhYmVscyAgICA9IFN0ZExhYmVsc1xubW9kdWxlIFN0cmVhbSAgICAgICA9IFN0cmVhbVxubW9kdWxlIFN0cmluZyAgICAgICA9IFN0cmluZ1xubW9kdWxlIFN0cmluZ0xhYmVscyA9IFN0cmluZ0xhYmVsc1xubW9kdWxlIFN5cyAgICAgICAgICA9IFN5c1xubW9kdWxlIFVjaGFyICAgICAgICA9IFVjaGFyXG5tb2R1bGUgVW5pdCAgICAgICAgID0gVW5pdFxubW9kdWxlIFdlYWsgICAgICAgICA9IFdlYWtcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgIEplcmVtaWUgRGltaW5vLCBKYW5lIFN0cmVldCBFdXJvcGUgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMTcgSmFuZSBTdHJlZXQgR3JvdXAgTExDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCoqIEBkZXByZWNhdGVkIFVzZSB7IVN0ZGxpYn0gKilcblxuZXh0ZXJuYWwgcmFpc2UgOiBleG4gLT4gJ2EgPSBcIiVyYWlzZVwiXG5leHRlcm5hbCByYWlzZV9ub3RyYWNlIDogZXhuIC0+ICdhID0gXCIlcmFpc2Vfbm90cmFjZVwiXG5sZXQgaW52YWxpZF9hcmcgPSBpbnZhbGlkX2FyZ1xubGV0IGZhaWx3aXRoID0gZmFpbHdpdGhcbmV4Y2VwdGlvbiBFeGl0XG5leHRlcm5hbCAoID0gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVlcXVhbFwiXG5leHRlcm5hbCAoIDw+ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlbm90ZXF1YWxcIlxuZXh0ZXJuYWwgKCA8ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlbGVzc3RoYW5cIlxuZXh0ZXJuYWwgKCA+ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlZ3JlYXRlcnRoYW5cIlxuZXh0ZXJuYWwgKCA8PSApIDogJ2EgLT4gJ2EgLT4gYm9vbCA9IFwiJWxlc3NlcXVhbFwiXG5leHRlcm5hbCAoID49ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlZ3JlYXRlcmVxdWFsXCJcbmV4dGVybmFsIGNvbXBhcmUgOiAnYSAtPiAnYSAtPiBpbnQgPSBcIiVjb21wYXJlXCJcbmxldCBtaW4gPSBtaW5cbmxldCBtYXggPSBtYXhcbmV4dGVybmFsICggPT0gKSA6ICdhIC0+ICdhIC0+IGJvb2wgPSBcIiVlcVwiXG5leHRlcm5hbCAoICE9ICkgOiAnYSAtPiAnYSAtPiBib29sID0gXCIlbm90ZXFcIlxuZXh0ZXJuYWwgbm90IDogYm9vbCAtPiBib29sID0gXCIlYm9vbG5vdFwiXG5leHRlcm5hbCAoICYmICkgOiBib29sIC0+IGJvb2wgLT4gYm9vbCA9IFwiJXNlcXVhbmRcIlxuZXh0ZXJuYWwgKCAmICkgOiBib29sIC0+IGJvb2wgLT4gYm9vbCA9IFwiJXNlcXVhbmRcIlxuICBbQEBvY2FtbC5kZXByZWNhdGVkIFwiVXNlICgmJikgaW5zdGVhZC5cIl1cbmV4dGVybmFsICggfHwgKSA6IGJvb2wgLT4gYm9vbCAtPiBib29sID0gXCIlc2VxdW9yXCJcbmV4dGVybmFsICggb3IgKSA6IGJvb2wgLT4gYm9vbCAtPiBib29sID0gXCIlc2VxdW9yXCJcbiAgW0BAb2NhbWwuZGVwcmVjYXRlZCBcIlVzZSAofHwpIGluc3RlYWQuXCJdXG5leHRlcm5hbCBfX0xPQ19fIDogc3RyaW5nID0gXCIlbG9jX0xPQ1wiXG5leHRlcm5hbCBfX0ZJTEVfXyA6IHN0cmluZyA9IFwiJWxvY19GSUxFXCJcbmV4dGVybmFsIF9fTElORV9fIDogaW50ID0gXCIlbG9jX0xJTkVcIlxuZXh0ZXJuYWwgX19NT0RVTEVfXyA6IHN0cmluZyA9IFwiJWxvY19NT0RVTEVcIlxuZXh0ZXJuYWwgX19QT1NfXyA6IHN0cmluZyAqIGludCAqIGludCAqIGludCA9IFwiJWxvY19QT1NcIlxuZXh0ZXJuYWwgX19MT0NfT0ZfXyA6ICdhIC0+IHN0cmluZyAqICdhID0gXCIlbG9jX0xPQ1wiXG5leHRlcm5hbCBfX0xJTkVfT0ZfXyA6ICdhIC0+IGludCAqICdhID0gXCIlbG9jX0xJTkVcIlxuZXh0ZXJuYWwgX19QT1NfT0ZfXyA6ICdhIC0+IChzdHJpbmcgKiBpbnQgKiBpbnQgKiBpbnQpICogJ2EgPSBcIiVsb2NfUE9TXCJcbmV4dGVybmFsICggfD4gKSA6ICdhIC0+ICgnYSAtPiAnYikgLT4gJ2IgPSBcIiVyZXZhcHBseVwiXG5leHRlcm5hbCAoIEBAICkgOiAoJ2EgLT4gJ2IpIC0+ICdhIC0+ICdiID0gXCIlYXBwbHlcIlxuZXh0ZXJuYWwgKCB+LSApIDogaW50IC0+IGludCA9IFwiJW5lZ2ludFwiXG5leHRlcm5hbCAoIH4rICkgOiBpbnQgLT4gaW50ID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgc3VjYyA6IGludCAtPiBpbnQgPSBcIiVzdWNjaW50XCJcbmV4dGVybmFsIHByZWQgOiBpbnQgLT4gaW50ID0gXCIlcHJlZGludFwiXG5leHRlcm5hbCAoICsgKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlYWRkaW50XCJcbmV4dGVybmFsICggLSApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVzdWJpbnRcIlxuZXh0ZXJuYWwgKCAqICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJW11bGludFwiXG5leHRlcm5hbCAoIC8gKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlZGl2aW50XCJcbmV4dGVybmFsICggbW9kICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJW1vZGludFwiXG5sZXQgYWJzID0gYWJzXG5sZXQgbWF4X2ludCA9IG1heF9pbnRcbmxldCBtaW5faW50ID0gbWluX2ludFxuZXh0ZXJuYWwgKCBsYW5kICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWFuZGludFwiXG5leHRlcm5hbCAoIGxvciApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVvcmludFwiXG5leHRlcm5hbCAoIGx4b3IgKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIleG9yaW50XCJcbmxldCBsbm90ID0gbG5vdFxuZXh0ZXJuYWwgKCBsc2wgKSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlbHNsaW50XCJcbmV4dGVybmFsICggbHNyICkgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWxzcmludFwiXG5leHRlcm5hbCAoIGFzciApIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVhc3JpbnRcIlxuZXh0ZXJuYWwgKCB+LS4gKSA6IGZsb2F0IC0+IGZsb2F0ID0gXCIlbmVnZmxvYXRcIlxuZXh0ZXJuYWwgKCB+Ky4gKSA6IGZsb2F0IC0+IGZsb2F0ID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgKCArLiApIDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcIiVhZGRmbG9hdFwiXG5leHRlcm5hbCAoIC0uICkgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiJXN1YmZsb2F0XCJcbmV4dGVybmFsICggKi4gKSA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCIlbXVsZmxvYXRcIlxuZXh0ZXJuYWwgKCAvLiApIDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcIiVkaXZmbG9hdFwiXG5leHRlcm5hbCAoICoqICkgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9wb3dlcl9mbG9hdFwiIFwicG93XCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIHNxcnQgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9zcXJ0X2Zsb2F0XCIgXCJzcXJ0XCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGV4cCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2V4cF9mbG9hdFwiIFwiZXhwXCIgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGxvZyA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2xvZ19mbG9hdFwiIFwibG9nXCIgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGxvZzEwIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfbG9nMTBfZmxvYXRcIiBcImxvZzEwXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGV4cG0xIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfZXhwbTFfZmxvYXRcIiBcImNhbWxfZXhwbTFcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgbG9nMXAgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9sb2cxcF9mbG9hdFwiIFwiY2FtbF9sb2cxcFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBjb3MgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9jb3NfZmxvYXRcIiBcImNvc1wiIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBzaW4gOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9zaW5fZmxvYXRcIiBcInNpblwiIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCB0YW4gOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF90YW5fZmxvYXRcIiBcInRhblwiIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhY29zIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfYWNvc19mbG9hdFwiIFwiYWNvc1wiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhc2luIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfYXNpbl9mbG9hdFwiIFwiYXNpblwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhdGFuIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfYXRhbl9mbG9hdFwiIFwiYXRhblwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhdGFuMiA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2F0YW4yX2Zsb2F0XCIgXCJhdGFuMlwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBoeXBvdCA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2h5cG90X2Zsb2F0XCIgXCJjYW1sX2h5cG90XCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGNvc2ggOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9jb3NoX2Zsb2F0XCIgXCJjb3NoXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIHNpbmggOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9zaW5oX2Zsb2F0XCIgXCJzaW5oXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIHRhbmggOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF90YW5oX2Zsb2F0XCIgXCJ0YW5oXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGNlaWwgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9jZWlsX2Zsb2F0XCIgXCJjZWlsXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGZsb29yIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfZmxvb3JfZmxvYXRcIiBcImZsb29yXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGFic19mbG9hdCA6IGZsb2F0IC0+IGZsb2F0ID0gXCIlYWJzZmxvYXRcIlxuZXh0ZXJuYWwgY29weXNpZ24gOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdFxuICAgICAgICAgICAgICAgICAgPSBcImNhbWxfY29weXNpZ25fZmxvYXRcIiBcImNhbWxfY29weXNpZ25cIlxuICAgICAgICAgICAgICAgICAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIG1vZF9mbG9hdCA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2Ztb2RfZmxvYXRcIiBcImZtb2RcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgZnJleHAgOiBmbG9hdCAtPiBmbG9hdCAqIGludCA9IFwiY2FtbF9mcmV4cF9mbG9hdFwiXG5leHRlcm5hbCBsZGV4cCA6IChmbG9hdCBbQHVuYm94ZWRdKSAtPiAoaW50IFtAdW50YWdnZWRdKSAtPiAoZmxvYXQgW0B1bmJveGVkXSkgPVxuICBcImNhbWxfbGRleHBfZmxvYXRcIiBcImNhbWxfbGRleHBfZmxvYXRfdW5ib3hlZFwiIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBtb2RmIDogZmxvYXQgLT4gZmxvYXQgKiBmbG9hdCA9IFwiY2FtbF9tb2RmX2Zsb2F0XCJcbmV4dGVybmFsIGZsb2F0IDogaW50IC0+IGZsb2F0ID0gXCIlZmxvYXRvZmludFwiXG5leHRlcm5hbCBmbG9hdF9vZl9pbnQgOiBpbnQgLT4gZmxvYXQgPSBcIiVmbG9hdG9maW50XCJcbmV4dGVybmFsIHRydW5jYXRlIDogZmxvYXQgLT4gaW50ID0gXCIlaW50b2ZmbG9hdFwiXG5leHRlcm5hbCBpbnRfb2ZfZmxvYXQgOiBmbG9hdCAtPiBpbnQgPSBcIiVpbnRvZmZsb2F0XCJcbmxldCBpbmZpbml0eSA9IGluZmluaXR5XG5sZXQgbmVnX2luZmluaXR5ID0gbmVnX2luZmluaXR5XG5sZXQgbmFuID0gbmFuXG5sZXQgbWF4X2Zsb2F0ID0gbWF4X2Zsb2F0XG5sZXQgbWluX2Zsb2F0ID0gbWluX2Zsb2F0XG5sZXQgZXBzaWxvbl9mbG9hdCA9IGVwc2lsb25fZmxvYXRcbnR5cGUgbm9ucmVjIGZwY2xhc3MgPSBmcGNsYXNzID1cbiAgICBGUF9ub3JtYWxcbiAgfCBGUF9zdWJub3JtYWxcbiAgfCBGUF96ZXJvXG4gIHwgRlBfaW5maW5pdGVcbiAgfCBGUF9uYW5cbmV4dGVybmFsIGNsYXNzaWZ5X2Zsb2F0IDogKGZsb2F0IFtAdW5ib3hlZF0pIC0+IGZwY2xhc3MgPVxuICBcImNhbWxfY2xhc3NpZnlfZmxvYXRcIiBcImNhbWxfY2xhc3NpZnlfZmxvYXRfdW5ib3hlZFwiIFtAQG5vYWxsb2NdXG5sZXQgKCBeICkgPSAoIF4gKVxuZXh0ZXJuYWwgaW50X29mX2NoYXIgOiBjaGFyIC0+IGludCA9IFwiJWlkZW50aXR5XCJcbmxldCBjaGFyX29mX2ludCA9IGNoYXJfb2ZfaW50XG5leHRlcm5hbCBpZ25vcmUgOiAnYSAtPiB1bml0ID0gXCIlaWdub3JlXCJcbmxldCBzdHJpbmdfb2ZfYm9vbCA9IHN0cmluZ19vZl9ib29sXG5sZXQgYm9vbF9vZl9zdHJpbmcgPSBib29sX29mX3N0cmluZ1xubGV0IGJvb2xfb2Zfc3RyaW5nX29wdCA9IGJvb2xfb2Zfc3RyaW5nX29wdFxubGV0IHN0cmluZ19vZl9pbnQgPSBzdHJpbmdfb2ZfaW50XG5leHRlcm5hbCBpbnRfb2Zfc3RyaW5nIDogc3RyaW5nIC0+IGludCA9IFwiY2FtbF9pbnRfb2Zfc3RyaW5nXCJcbmxldCBpbnRfb2Zfc3RyaW5nX29wdCA9IGludF9vZl9zdHJpbmdfb3B0XG5sZXQgc3RyaW5nX29mX2Zsb2F0ID0gc3RyaW5nX29mX2Zsb2F0XG5leHRlcm5hbCBmbG9hdF9vZl9zdHJpbmcgOiBzdHJpbmcgLT4gZmxvYXQgPSBcImNhbWxfZmxvYXRfb2Zfc3RyaW5nXCJcbmxldCBmbG9hdF9vZl9zdHJpbmdfb3B0ID0gZmxvYXRfb2Zfc3RyaW5nX29wdFxuZXh0ZXJuYWwgZnN0IDogJ2EgKiAnYiAtPiAnYSA9IFwiJWZpZWxkMFwiXG5leHRlcm5hbCBzbmQgOiAnYSAqICdiIC0+ICdiID0gXCIlZmllbGQxXCJcbmxldCAoIEAgKSAgPSAoIEAgKVxudHlwZSBub25yZWMgaW5fY2hhbm5lbCA9IGluX2NoYW5uZWxcbnR5cGUgbm9ucmVjIG91dF9jaGFubmVsID0gb3V0X2NoYW5uZWxcbmxldCBzdGRpbiA9IHN0ZGluXG5sZXQgc3Rkb3V0ID0gc3Rkb3V0XG5sZXQgc3RkZXJyID0gc3RkZXJyXG5sZXQgcHJpbnRfY2hhciA9IHByaW50X2NoYXJcbmxldCBwcmludF9zdHJpbmcgPSBwcmludF9zdHJpbmdcbmxldCBwcmludF9ieXRlcyA9IHByaW50X2J5dGVzXG5sZXQgcHJpbnRfaW50ID0gcHJpbnRfaW50XG5sZXQgcHJpbnRfZmxvYXQgPSBwcmludF9mbG9hdFxubGV0IHByaW50X2VuZGxpbmUgPSBwcmludF9lbmRsaW5lXG5sZXQgcHJpbnRfbmV3bGluZSA9IHByaW50X25ld2xpbmVcbmxldCBwcmVycl9jaGFyID0gcHJlcnJfY2hhclxubGV0IHByZXJyX3N0cmluZyA9IHByZXJyX3N0cmluZ1xubGV0IHByZXJyX2J5dGVzID0gcHJlcnJfYnl0ZXNcbmxldCBwcmVycl9pbnQgPSBwcmVycl9pbnRcbmxldCBwcmVycl9mbG9hdCA9IHByZXJyX2Zsb2F0XG5sZXQgcHJlcnJfZW5kbGluZSA9IHByZXJyX2VuZGxpbmVcbmxldCBwcmVycl9uZXdsaW5lID0gcHJlcnJfbmV3bGluZVxubGV0IHJlYWRfbGluZSA9IHJlYWRfbGluZVxubGV0IHJlYWRfaW50ID0gcmVhZF9pbnRcbmxldCByZWFkX2ludF9vcHQgPSByZWFkX2ludF9vcHRcbmxldCByZWFkX2Zsb2F0ID0gcmVhZF9mbG9hdFxubGV0IHJlYWRfZmxvYXRfb3B0ID0gcmVhZF9mbG9hdF9vcHRcbnR5cGUgbm9ucmVjIG9wZW5fZmxhZyA9IG9wZW5fZmxhZyA9XG4gICAgT3Blbl9yZG9ubHlcbiAgfCBPcGVuX3dyb25seVxuICB8IE9wZW5fYXBwZW5kXG4gIHwgT3Blbl9jcmVhdFxuICB8IE9wZW5fdHJ1bmNcbiAgfCBPcGVuX2V4Y2xcbiAgfCBPcGVuX2JpbmFyeVxuICB8IE9wZW5fdGV4dFxuICB8IE9wZW5fbm9uYmxvY2tcbmxldCBvcGVuX291dCA9IG9wZW5fb3V0XG5sZXQgb3Blbl9vdXRfYmluID0gb3Blbl9vdXRfYmluXG5sZXQgb3Blbl9vdXRfZ2VuID0gb3Blbl9vdXRfZ2VuXG5sZXQgZmx1c2ggPSBmbHVzaFxubGV0IGZsdXNoX2FsbCA9IGZsdXNoX2FsbFxubGV0IG91dHB1dF9jaGFyID0gb3V0cHV0X2NoYXJcbmxldCBvdXRwdXRfc3RyaW5nID0gb3V0cHV0X3N0cmluZ1xubGV0IG91dHB1dF9ieXRlcyA9IG91dHB1dF9ieXRlc1xubGV0IG91dHB1dCA9IG91dHB1dFxubGV0IG91dHB1dF9zdWJzdHJpbmcgPSBvdXRwdXRfc3Vic3RyaW5nXG5sZXQgb3V0cHV0X2J5dGUgPSBvdXRwdXRfYnl0ZVxubGV0IG91dHB1dF9iaW5hcnlfaW50ID0gb3V0cHV0X2JpbmFyeV9pbnRcbmxldCBvdXRwdXRfdmFsdWUgPSBvdXRwdXRfdmFsdWVcbmxldCBzZWVrX291dCA9IHNlZWtfb3V0XG5sZXQgcG9zX291dCA9IHBvc19vdXRcbmxldCBvdXRfY2hhbm5lbF9sZW5ndGggPSBvdXRfY2hhbm5lbF9sZW5ndGhcbmxldCBjbG9zZV9vdXQgPSBjbG9zZV9vdXRcbmxldCBjbG9zZV9vdXRfbm9lcnIgPSBjbG9zZV9vdXRfbm9lcnJcbmxldCBzZXRfYmluYXJ5X21vZGVfb3V0ID0gc2V0X2JpbmFyeV9tb2RlX291dFxubGV0IG9wZW5faW4gPSBvcGVuX2luXG5sZXQgb3Blbl9pbl9iaW4gPSBvcGVuX2luX2JpblxubGV0IG9wZW5faW5fZ2VuID0gb3Blbl9pbl9nZW5cbmxldCBpbnB1dF9jaGFyID0gaW5wdXRfY2hhclxubGV0IGlucHV0X2xpbmUgPSBpbnB1dF9saW5lXG5sZXQgaW5wdXQgPSBpbnB1dFxubGV0IHJlYWxseV9pbnB1dCA9IHJlYWxseV9pbnB1dFxubGV0IHJlYWxseV9pbnB1dF9zdHJpbmcgPSByZWFsbHlfaW5wdXRfc3RyaW5nXG5sZXQgaW5wdXRfYnl0ZSA9IGlucHV0X2J5dGVcbmxldCBpbnB1dF9iaW5hcnlfaW50ID0gaW5wdXRfYmluYXJ5X2ludFxubGV0IGlucHV0X3ZhbHVlID0gaW5wdXRfdmFsdWVcbmxldCBzZWVrX2luID0gc2Vla19pblxubGV0IHBvc19pbiA9IHBvc19pblxubGV0IGluX2NoYW5uZWxfbGVuZ3RoID0gaW5fY2hhbm5lbF9sZW5ndGhcbmxldCBjbG9zZV9pbiA9IGNsb3NlX2luXG5sZXQgY2xvc2VfaW5fbm9lcnIgPSBjbG9zZV9pbl9ub2VyclxubGV0IHNldF9iaW5hcnlfbW9kZV9pbiA9IHNldF9iaW5hcnlfbW9kZV9pblxubW9kdWxlIExhcmdlRmlsZSA9IExhcmdlRmlsZVxudHlwZSBub25yZWMgJ2EgcmVmID0gJ2EgcmVmID0geyBtdXRhYmxlIGNvbnRlbnRzIDogJ2EgfVxuZXh0ZXJuYWwgcmVmIDogJ2EgLT4gJ2EgcmVmID0gXCIlbWFrZW11dGFibGVcIlxuZXh0ZXJuYWwgKCAhICkgOiAnYSByZWYgLT4gJ2EgPSBcIiVmaWVsZDBcIlxuZXh0ZXJuYWwgKCA6PSApIDogJ2EgcmVmIC0+ICdhIC0+IHVuaXQgPSBcIiVzZXRmaWVsZDBcIlxuZXh0ZXJuYWwgaW5jciA6IGludCByZWYgLT4gdW5pdCA9IFwiJWluY3JcIlxuZXh0ZXJuYWwgZGVjciA6IGludCByZWYgLT4gdW5pdCA9IFwiJWRlY3JcIlxudHlwZSBub25yZWMgKCdhLCdiKSByZXN1bHQgPSAoJ2EsJ2IpIHJlc3VsdCA9IE9rIG9mICdhIHwgRXJyb3Igb2YgJ2JcbnR5cGUgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdDYgPVxuICAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzLmZvcm1hdDZcbnR5cGUgKCdhLCAnYiwgJ2MsICdkKSBmb3JtYXQ0ID0gKCdhLCAnYiwgJ2MsICdjLCAnYywgJ2QpIGZvcm1hdDZcbnR5cGUgKCdhLCAnYiwgJ2MpIGZvcm1hdCA9ICgnYSwgJ2IsICdjLCAnYykgZm9ybWF0NFxubGV0IHN0cmluZ19vZl9mb3JtYXQgPSBzdHJpbmdfb2ZfZm9ybWF0XG5leHRlcm5hbCBmb3JtYXRfb2Zfc3RyaW5nIDpcbiAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdDYgLT5cbiAgKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdDYgPSBcIiVpZGVudGl0eVwiXG5sZXQgKCBeXiApID0gKCBeXiApXG5sZXQgZXhpdCA9IGV4aXRcbmxldCBhdF9leGl0ID0gYXRfZXhpdFxubGV0IHZhbGlkX2Zsb2F0X2xleGVtID0gdmFsaWRfZmxvYXRfbGV4ZW1cbmxldCBkb19hdF9leGl0ID0gZG9fYXRfZXhpdFxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICBOaWNvbGFzIE9qZWRhIEJhciwgTGV4aUZpICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxOCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG5leHRlcm5hbCBuZWcgOiBmbG9hdCAtPiBmbG9hdCA9IFwiJW5lZ2Zsb2F0XCJcbmV4dGVybmFsIGFkZCA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCIlYWRkZmxvYXRcIlxuZXh0ZXJuYWwgc3ViIDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcIiVzdWJmbG9hdFwiXG5leHRlcm5hbCBtdWwgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiJW11bGZsb2F0XCJcbmV4dGVybmFsIGRpdiA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCIlZGl2ZmxvYXRcIlxuZXh0ZXJuYWwgcmVtIDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfZm1vZF9mbG9hdFwiIFwiZm1vZFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBmbWEgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9mbWFfZmxvYXRcIiBcImNhbWxfZm1hXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGFicyA6IGZsb2F0IC0+IGZsb2F0ID0gXCIlYWJzZmxvYXRcIlxuXG5sZXQgemVybyA9IDAuXG5sZXQgb25lID0gMS5cbmxldCBtaW51c19vbmUgPSAtMS5cbmxldCBpbmZpbml0eSA9IFN0ZGxpYi5pbmZpbml0eVxubGV0IG5lZ19pbmZpbml0eSA9IFN0ZGxpYi5uZWdfaW5maW5pdHlcbmxldCBuYW4gPSBTdGRsaWIubmFuXG5sZXQgaXNfZmluaXRlICh4OiBmbG9hdCkgPSB4IC0uIHggPSAwLlxubGV0IGlzX2luZmluaXRlICh4OiBmbG9hdCkgPSAxLiAvLiB4ID0gMC5cbmxldCBpc19uYW4gKHg6IGZsb2F0KSA9IHggPD4geFxuXG5sZXQgcGkgPSAweDEuOTIxZmI1NDQ0MmQxOHArMVxubGV0IG1heF9mbG9hdCA9IFN0ZGxpYi5tYXhfZmxvYXRcbmxldCBtaW5fZmxvYXQgPSBTdGRsaWIubWluX2Zsb2F0XG5sZXQgZXBzaWxvbiA9IFN0ZGxpYi5lcHNpbG9uX2Zsb2F0XG5leHRlcm5hbCBvZl9pbnQgOiBpbnQgLT4gZmxvYXQgPSBcIiVmbG9hdG9maW50XCJcbmV4dGVybmFsIHRvX2ludCA6IGZsb2F0IC0+IGludCA9IFwiJWludG9mZmxvYXRcIlxuZXh0ZXJuYWwgb2Zfc3RyaW5nIDogc3RyaW5nIC0+IGZsb2F0ID0gXCJjYW1sX2Zsb2F0X29mX3N0cmluZ1wiXG5sZXQgb2Zfc3RyaW5nX29wdCA9IFN0ZGxpYi5mbG9hdF9vZl9zdHJpbmdfb3B0XG5sZXQgdG9fc3RyaW5nID0gU3RkbGliLnN0cmluZ19vZl9mbG9hdFxudHlwZSBmcGNsYXNzID0gU3RkbGliLmZwY2xhc3MgPVxuICAgIEZQX25vcm1hbFxuICB8IEZQX3N1Ym5vcm1hbFxuICB8IEZQX3plcm9cbiAgfCBGUF9pbmZpbml0ZVxuICB8IEZQX25hblxuZXh0ZXJuYWwgY2xhc3NpZnlfZmxvYXQgOiAoZmxvYXQgW0B1bmJveGVkXSkgLT4gZnBjbGFzcyA9XG4gIFwiY2FtbF9jbGFzc2lmeV9mbG9hdFwiIFwiY2FtbF9jbGFzc2lmeV9mbG9hdF91bmJveGVkXCIgW0BAbm9hbGxvY11cbmV4dGVybmFsIHBvdyA6IGZsb2F0IC0+IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX3Bvd2VyX2Zsb2F0XCIgXCJwb3dcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgc3FydCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX3NxcnRfZmxvYXRcIiBcInNxcnRcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgY2JydCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2NicnRfZmxvYXRcIiBcImNhbWxfY2JydFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBleHAgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9leHBfZmxvYXRcIiBcImV4cFwiIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBleHAyIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfZXhwMl9mbG9hdFwiIFwiY2FtbF9leHAyXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGxvZyA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2xvZ19mbG9hdFwiIFwibG9nXCIgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGxvZzEwIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfbG9nMTBfZmxvYXRcIiBcImxvZzEwXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGxvZzIgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9sb2cyX2Zsb2F0XCIgXCJjYW1sX2xvZzJcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgZXhwbTEgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9leHBtMV9mbG9hdFwiIFwiY2FtbF9leHBtMVwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBsb2cxcCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2xvZzFwX2Zsb2F0XCIgXCJjYW1sX2xvZzFwXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGNvcyA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2Nvc19mbG9hdFwiIFwiY29zXCIgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIHNpbiA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX3Npbl9mbG9hdFwiIFwic2luXCIgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIHRhbiA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX3Rhbl9mbG9hdFwiIFwidGFuXCIgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGFjb3MgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9hY29zX2Zsb2F0XCIgXCJhY29zXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGFzaW4gOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9hc2luX2Zsb2F0XCIgXCJhc2luXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGF0YW4gOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9hdGFuX2Zsb2F0XCIgXCJhdGFuXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGF0YW4yIDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfYXRhbjJfZmxvYXRcIiBcImF0YW4yXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGh5cG90IDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXRcbiAgICAgICAgICAgICAgID0gXCJjYW1sX2h5cG90X2Zsb2F0XCIgXCJjYW1sX2h5cG90XCIgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGNvc2ggOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9jb3NoX2Zsb2F0XCIgXCJjb3NoXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIHNpbmggOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9zaW5oX2Zsb2F0XCIgXCJzaW5oXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIHRhbmggOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF90YW5oX2Zsb2F0XCIgXCJ0YW5oXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGFjb3NoIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfYWNvc2hfZmxvYXRcIiBcImNhbWxfYWNvc2hcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgYXNpbmggOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9hc2luaF9mbG9hdFwiIFwiY2FtbF9hc2luaFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBhdGFuaCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2F0YW5oX2Zsb2F0XCIgXCJjYW1sX2F0YW5oXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIGVyZiA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2VyZl9mbG9hdFwiIFwiY2FtbF9lcmZcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgZXJmYyA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2VyZmNfZmxvYXRcIiBcImNhbWxfZXJmY1wiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCB0cnVuYyA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX3RydW5jX2Zsb2F0XCIgXCJjYW1sX3RydW5jXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIHJvdW5kIDogZmxvYXQgLT4gZmxvYXQgPSBcImNhbWxfcm91bmRfZmxvYXRcIiBcImNhbWxfcm91bmRcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgY2VpbCA6IGZsb2F0IC0+IGZsb2F0ID0gXCJjYW1sX2NlaWxfZmxvYXRcIiBcImNlaWxcIlxuICBbQEB1bmJveGVkXSBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgZmxvb3IgOiBmbG9hdCAtPiBmbG9hdCA9IFwiY2FtbF9mbG9vcl9mbG9hdFwiIFwiZmxvb3JcIlxuW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cblxubGV0IGlzX2ludGVnZXIgeCA9IHggPSB0cnVuYyB4ICYmIGlzX2Zpbml0ZSB4XG5cbmV4dGVybmFsIG5leHRfYWZ0ZXIgOiBmbG9hdCAtPiBmbG9hdCAtPiBmbG9hdFxuICA9IFwiY2FtbF9uZXh0YWZ0ZXJfZmxvYXRcIiBcImNhbWxfbmV4dGFmdGVyXCIgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cblxubGV0IHN1Y2MgeCA9IG5leHRfYWZ0ZXIgeCBpbmZpbml0eVxubGV0IHByZWQgeCA9IG5leHRfYWZ0ZXIgeCBuZWdfaW5maW5pdHlcblxuZXh0ZXJuYWwgY29weV9zaWduIDogZmxvYXQgLT4gZmxvYXQgLT4gZmxvYXRcbiAgICAgICAgICAgICAgICAgID0gXCJjYW1sX2NvcHlzaWduX2Zsb2F0XCIgXCJjYW1sX2NvcHlzaWduXCJcbiAgICAgICAgICAgICAgICAgIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBzaWduX2JpdCA6IChmbG9hdCBbQHVuYm94ZWRdKSAtPiBib29sXG4gID0gXCJjYW1sX3NpZ25iaXRfZmxvYXRcIiBcImNhbWxfc2lnbmJpdFwiIFtAQG5vYWxsb2NdXG5cbmV4dGVybmFsIGZyZXhwIDogZmxvYXQgLT4gZmxvYXQgKiBpbnQgPSBcImNhbWxfZnJleHBfZmxvYXRcIlxuZXh0ZXJuYWwgbGRleHAgOiAoZmxvYXQgW0B1bmJveGVkXSkgLT4gKGludCBbQHVudGFnZ2VkXSkgLT4gKGZsb2F0IFtAdW5ib3hlZF0pID1cbiAgXCJjYW1sX2xkZXhwX2Zsb2F0XCIgXCJjYW1sX2xkZXhwX2Zsb2F0X3VuYm94ZWRcIiBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgbW9kZiA6IGZsb2F0IC0+IGZsb2F0ICogZmxvYXQgPSBcImNhbWxfbW9kZl9mbG9hdFwiXG50eXBlIHQgPSBmbG9hdFxuZXh0ZXJuYWwgY29tcGFyZSA6IGZsb2F0IC0+IGZsb2F0IC0+IGludCA9IFwiJWNvbXBhcmVcIlxubGV0IGVxdWFsIHggeSA9IGNvbXBhcmUgeCB5ID0gMFxuXG5sZXRbQGlubGluZV0gbWluICh4OiBmbG9hdCkgKHk6IGZsb2F0KSA9XG4gIGlmIHkgPiB4IHx8IChub3Qoc2lnbl9iaXQgeSkgJiYgc2lnbl9iaXQgeCkgdGhlblxuICAgIGlmIGlzX25hbiB5IHRoZW4geSBlbHNlIHhcbiAgZWxzZSBpZiBpc19uYW4geCB0aGVuIHggZWxzZSB5XG5cbmxldFtAaW5saW5lXSBtYXggKHg6IGZsb2F0KSAoeTogZmxvYXQpID1cbiAgaWYgeSA+IHggfHwgKG5vdChzaWduX2JpdCB5KSAmJiBzaWduX2JpdCB4KSB0aGVuXG4gICAgaWYgaXNfbmFuIHggdGhlbiB4IGVsc2UgeVxuICBlbHNlIGlmIGlzX25hbiB5IHRoZW4geSBlbHNlIHhcblxubGV0W0BpbmxpbmVdIG1pbl9tYXggKHg6IGZsb2F0KSAoeTogZmxvYXQpID1cbiAgaWYgaXNfbmFuIHggfHwgaXNfbmFuIHkgdGhlbiAobmFuLCBuYW4pXG4gIGVsc2UgaWYgeSA+IHggfHwgKG5vdChzaWduX2JpdCB5KSAmJiBzaWduX2JpdCB4KSB0aGVuICh4LCB5KSBlbHNlICh5LCB4KVxuXG5sZXRbQGlubGluZV0gbWluX251bSAoeDogZmxvYXQpICh5OiBmbG9hdCkgPVxuICBpZiB5ID4geCB8fCAobm90KHNpZ25fYml0IHkpICYmIHNpZ25fYml0IHgpIHRoZW5cbiAgICBpZiBpc19uYW4geCB0aGVuIHkgZWxzZSB4XG4gIGVsc2UgaWYgaXNfbmFuIHkgdGhlbiB4IGVsc2UgeVxuXG5sZXRbQGlubGluZV0gbWF4X251bSAoeDogZmxvYXQpICh5OiBmbG9hdCkgPVxuICBpZiB5ID4geCB8fCAobm90KHNpZ25fYml0IHkpICYmIHNpZ25fYml0IHgpIHRoZW5cbiAgICBpZiBpc19uYW4geSB0aGVuIHggZWxzZSB5XG4gIGVsc2UgaWYgaXNfbmFuIHggdGhlbiB5IGVsc2UgeFxuXG5sZXRbQGlubGluZV0gbWluX21heF9udW0gKHg6IGZsb2F0KSAoeTogZmxvYXQpID1cbiAgaWYgaXNfbmFuIHggdGhlbiAoeSx5KVxuICBlbHNlIGlmIGlzX25hbiB5IHRoZW4gKHgseClcbiAgZWxzZSBpZiB5ID4geCB8fCAobm90KHNpZ25fYml0IHkpICYmIHNpZ25fYml0IHgpIHRoZW4gKHgseSkgZWxzZSAoeSx4KVxuXG5leHRlcm5hbCBzZWVkZWRfaGFzaF9wYXJhbSA6IGludCAtPiBpbnQgLT4gaW50IC0+IGZsb2F0IC0+IGludFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfaGFzaFwiIFtAQG5vYWxsb2NdXG5sZXQgaGFzaCB4ID0gc2VlZGVkX2hhc2hfcGFyYW0gMTAgMTAwIDAgeFxuXG5tb2R1bGUgQXJyYXkgPSBzdHJ1Y3RcblxuICB0eXBlIHQgPSBmbG9hdGFycmF5XG5cbiAgZXh0ZXJuYWwgbGVuZ3RoIDogdCAtPiBpbnQgPSBcIiVmbG9hdGFycmF5X2xlbmd0aFwiXG4gIGV4dGVybmFsIGdldCA6IHQgLT4gaW50IC0+IGZsb2F0ID0gXCIlZmxvYXRhcnJheV9zYWZlX2dldFwiXG4gIGV4dGVybmFsIHNldCA6IHQgLT4gaW50IC0+IGZsb2F0IC0+IHVuaXQgPSBcIiVmbG9hdGFycmF5X3NhZmVfc2V0XCJcbiAgZXh0ZXJuYWwgY3JlYXRlIDogaW50IC0+IHQgPSBcImNhbWxfZmxvYXRhcnJheV9jcmVhdGVcIlxuICBleHRlcm5hbCB1bnNhZmVfZ2V0IDogdCAtPiBpbnQgLT4gZmxvYXQgPSBcIiVmbG9hdGFycmF5X3Vuc2FmZV9nZXRcIlxuICBleHRlcm5hbCB1bnNhZmVfc2V0IDogdCAtPiBpbnQgLT4gZmxvYXQgLT4gdW5pdCA9IFwiJWZsb2F0YXJyYXlfdW5zYWZlX3NldFwiXG5cbiAgbGV0IHVuc2FmZV9maWxsIGEgb2ZzIGxlbiB2ID1cbiAgICBmb3IgaSA9IG9mcyB0byBvZnMgKyBsZW4gLSAxIGRvIHVuc2FmZV9zZXQgYSBpIHYgZG9uZVxuXG4gIGV4dGVybmFsIHVuc2FmZV9ibGl0OiB0IC0+IGludCAtPiB0IC0+IGludCAtPiBpbnQgLT4gdW5pdCA9XG4gICAgXCJjYW1sX2Zsb2F0YXJyYXlfYmxpdFwiIFtAQG5vYWxsb2NdXG5cbiAgbGV0IGNoZWNrIGEgb2ZzIGxlbiBtc2cgPVxuICAgIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgKyBsZW4gPCAwIHx8IG9mcyArIGxlbiA+IGxlbmd0aCBhIHRoZW5cbiAgICAgIGludmFsaWRfYXJnIG1zZ1xuXG4gIGxldCBtYWtlIG4gdiA9XG4gICAgbGV0IHJlc3VsdCA9IGNyZWF0ZSBuIGluXG4gICAgdW5zYWZlX2ZpbGwgcmVzdWx0IDAgbiB2O1xuICAgIHJlc3VsdFxuXG4gIGxldCBpbml0IGwgZiA9XG4gICAgaWYgbCA8IDAgdGhlbiBpbnZhbGlkX2FyZyBcIkZsb2F0LkFycmF5LmluaXRcIlxuICAgIGVsc2VcbiAgICAgIGxldCByZXMgPSBjcmVhdGUgbCBpblxuICAgICAgZm9yIGkgPSAwIHRvIGwgLSAxIGRvXG4gICAgICAgIHVuc2FmZV9zZXQgcmVzIGkgKGYgaSlcbiAgICAgIGRvbmU7XG4gICAgICByZXNcblxuICBsZXQgYXBwZW5kIGExIGEyID1cbiAgICBsZXQgbDEgPSBsZW5ndGggYTEgaW5cbiAgICBsZXQgbDIgPSBsZW5ndGggYTIgaW5cbiAgICBsZXQgcmVzdWx0ID0gY3JlYXRlIChsMSArIGwyKSBpblxuICAgIHVuc2FmZV9ibGl0IGExIDAgcmVzdWx0IDAgbDE7XG4gICAgdW5zYWZlX2JsaXQgYTIgMCByZXN1bHQgbDEgbDI7XG4gICAgcmVzdWx0XG5cbiAgKCogbmV4dCAzIGZ1bmN0aW9uczogbW9kaWZpZWQgY29weSBvZiBjb2RlIGZyb20gc3RyaW5nLm1sICopXG4gIGxldCBlbnN1cmVfZ2UgKHg6aW50KSB5ID1cbiAgICBpZiB4ID49IHkgdGhlbiB4IGVsc2UgaW52YWxpZF9hcmcgXCJGbG9hdC5BcnJheS5jb25jYXRcIlxuXG4gIGxldCByZWMgc3VtX2xlbmd0aHMgYWNjID0gZnVuY3Rpb25cbiAgICB8IFtdIC0+IGFjY1xuICAgIHwgaGQgOjogdGwgLT4gc3VtX2xlbmd0aHMgKGVuc3VyZV9nZSAobGVuZ3RoIGhkICsgYWNjKSBhY2MpIHRsXG5cbiAgbGV0IGNvbmNhdCBsID1cbiAgICBsZXQgbGVuID0gc3VtX2xlbmd0aHMgMCBsIGluXG4gICAgbGV0IHJlc3VsdCA9IGNyZWF0ZSBsZW4gaW5cbiAgICBsZXQgcmVjIGxvb3AgbCBpID1cbiAgICAgIG1hdGNoIGwgd2l0aFxuICAgICAgfCBbXSAtPiBhc3NlcnQgKGkgPSBsZW4pXG4gICAgICB8IGhkIDo6IHRsIC0+XG4gICAgICAgIGxldCBobGVuID0gbGVuZ3RoIGhkIGluXG4gICAgICAgIHVuc2FmZV9ibGl0IGhkIDAgcmVzdWx0IGkgaGxlbjtcbiAgICAgICAgbG9vcCB0bCAoaSArIGhsZW4pXG4gICAgaW5cbiAgICBsb29wIGwgMDtcbiAgICByZXN1bHRcblxuICBsZXQgc3ViIGEgb2ZzIGxlbiA9XG4gICAgY2hlY2sgYSBvZnMgbGVuIFwiRmxvYXQuQXJyYXkuc3ViXCI7XG4gICAgbGV0IHJlc3VsdCA9IGNyZWF0ZSBsZW4gaW5cbiAgICB1bnNhZmVfYmxpdCBhIG9mcyByZXN1bHQgMCBsZW47XG4gICAgcmVzdWx0XG5cbiAgbGV0IGNvcHkgYSA9XG4gICAgbGV0IGwgPSBsZW5ndGggYSBpblxuICAgIGxldCByZXN1bHQgPSBjcmVhdGUgbCBpblxuICAgIHVuc2FmZV9ibGl0IGEgMCByZXN1bHQgMCBsO1xuICAgIHJlc3VsdFxuXG4gIGxldCBmaWxsIGEgb2ZzIGxlbiB2ID1cbiAgICBjaGVjayBhIG9mcyBsZW4gXCJGbG9hdC5BcnJheS5maWxsXCI7XG4gICAgdW5zYWZlX2ZpbGwgYSBvZnMgbGVuIHZcblxuICBsZXQgYmxpdCBzcmMgc29mcyBkc3QgZG9mcyBsZW4gPVxuICAgIGNoZWNrIHNyYyBzb2ZzIGxlbiBcIkZsb2F0LmFycmF5LmJsaXRcIjtcbiAgICBjaGVjayBkc3QgZG9mcyBsZW4gXCJGbG9hdC5hcnJheS5ibGl0XCI7XG4gICAgdW5zYWZlX2JsaXQgc3JjIHNvZnMgZHN0IGRvZnMgbGVuXG5cbiAgbGV0IHRvX2xpc3QgYSA9XG4gICAgTGlzdC5pbml0IChsZW5ndGggYSkgKHVuc2FmZV9nZXQgYSlcblxuICBsZXQgb2ZfbGlzdCBsID1cbiAgICBsZXQgcmVzdWx0ID0gY3JlYXRlIChMaXN0Lmxlbmd0aCBsKSBpblxuICAgIGxldCByZWMgZmlsbCBpIGwgPVxuICAgICAgbWF0Y2ggbCB3aXRoXG4gICAgICB8IFtdIC0+IHJlc3VsdFxuICAgICAgfCBoIDo6IHQgLT4gdW5zYWZlX3NldCByZXN1bHQgaSBoOyBmaWxsIChpICsgMSkgdFxuICAgIGluXG4gICAgZmlsbCAwIGxcblxuICAoKiBkdXBsaWNhdGVkIGZyb20gYXJyYXkubWwgKilcbiAgbGV0IGl0ZXIgZiBhID1cbiAgICBmb3IgaSA9IDAgdG8gbGVuZ3RoIGEgLSAxIGRvIGYgKHVuc2FmZV9nZXQgYSBpKSBkb25lXG5cbiAgKCogZHVwbGljYXRlZCBmcm9tIGFycmF5Lm1sICopXG4gIGxldCBpdGVyMiBmIGEgYiA9XG4gICAgaWYgbGVuZ3RoIGEgPD4gbGVuZ3RoIGIgdGhlblxuICAgICAgaW52YWxpZF9hcmcgXCJGbG9hdC5BcnJheS5pdGVyMjogYXJyYXlzIG11c3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGhcIlxuICAgIGVsc2VcbiAgICAgIGZvciBpID0gMCB0byBsZW5ndGggYSAtIDEgZG8gZiAodW5zYWZlX2dldCBhIGkpICh1bnNhZmVfZ2V0IGIgaSkgZG9uZVxuXG4gIGxldCBtYXAgZiBhID1cbiAgICBsZXQgbCA9IGxlbmd0aCBhIGluXG4gICAgbGV0IHIgPSBjcmVhdGUgbCBpblxuICAgIGZvciBpID0gMCB0byBsIC0gMSBkb1xuICAgICAgdW5zYWZlX3NldCByIGkgKGYgKHVuc2FmZV9nZXQgYSBpKSlcbiAgICBkb25lO1xuICAgIHJcblxuICBsZXQgbWFwMiBmIGEgYiA9XG4gICAgbGV0IGxhID0gbGVuZ3RoIGEgaW5cbiAgICBsZXQgbGIgPSBsZW5ndGggYiBpblxuICAgIGlmIGxhIDw+IGxiIHRoZW5cbiAgICAgIGludmFsaWRfYXJnIFwiRmxvYXQuQXJyYXkubWFwMjogYXJyYXlzIG11c3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGhcIlxuICAgIGVsc2UgYmVnaW5cbiAgICAgIGxldCByID0gY3JlYXRlIGxhIGluXG4gICAgICBmb3IgaSA9IDAgdG8gbGEgLSAxIGRvXG4gICAgICAgIHVuc2FmZV9zZXQgciBpIChmICh1bnNhZmVfZ2V0IGEgaSkgKHVuc2FmZV9nZXQgYiBpKSlcbiAgICAgIGRvbmU7XG4gICAgICByXG4gICAgZW5kXG5cbiAgKCogZHVwbGljYXRlZCBmcm9tIGFycmF5Lm1sICopXG4gIGxldCBpdGVyaSBmIGEgPVxuICAgIGZvciBpID0gMCB0byBsZW5ndGggYSAtIDEgZG8gZiBpICh1bnNhZmVfZ2V0IGEgaSkgZG9uZVxuXG4gIGxldCBtYXBpIGYgYSA9XG4gICAgbGV0IGwgPSBsZW5ndGggYSBpblxuICAgIGxldCByID0gY3JlYXRlIGwgaW5cbiAgICBmb3IgaSA9IDAgdG8gbCAtIDEgZG9cbiAgICAgIHVuc2FmZV9zZXQgciBpIChmIGkgKHVuc2FmZV9nZXQgYSBpKSlcbiAgICBkb25lO1xuICAgIHJcblxuICAoKiBkdXBsaWNhdGVkIGZyb20gYXJyYXkubWwgKilcbiAgbGV0IGZvbGRfbGVmdCBmIHggYSA9XG4gICAgbGV0IHIgPSByZWYgeCBpblxuICAgIGZvciBpID0gMCB0byBsZW5ndGggYSAtIDEgZG9cbiAgICAgIHIgOj0gZiAhciAodW5zYWZlX2dldCBhIGkpXG4gICAgZG9uZTtcbiAgICAhclxuXG4gICgqIGR1cGxpY2F0ZWQgZnJvbSBhcnJheS5tbCAqKVxuICBsZXQgZm9sZF9yaWdodCBmIGEgeCA9XG4gICAgbGV0IHIgPSByZWYgeCBpblxuICAgIGZvciBpID0gbGVuZ3RoIGEgLSAxIGRvd250byAwIGRvXG4gICAgICByIDo9IGYgKHVuc2FmZV9nZXQgYSBpKSAhclxuICAgIGRvbmU7XG4gICAgIXJcblxuICAoKiBkdXBsaWNhdGVkIGZyb20gYXJyYXkubWwgKilcbiAgbGV0IGV4aXN0cyBwIGEgPVxuICAgIGxldCBuID0gbGVuZ3RoIGEgaW5cbiAgICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgICBpZiBpID0gbiB0aGVuIGZhbHNlXG4gICAgICBlbHNlIGlmIHAgKHVuc2FmZV9nZXQgYSBpKSB0aGVuIHRydWVcbiAgICAgIGVsc2UgbG9vcCAoaSArIDEpIGluXG4gICAgbG9vcCAwXG5cbiAgKCogZHVwbGljYXRlZCBmcm9tIGFycmF5Lm1sICopXG4gIGxldCBmb3JfYWxsIHAgYSA9XG4gICAgbGV0IG4gPSBsZW5ndGggYSBpblxuICAgIGxldCByZWMgbG9vcCBpID1cbiAgICAgIGlmIGkgPSBuIHRoZW4gdHJ1ZVxuICAgICAgZWxzZSBpZiBwICh1bnNhZmVfZ2V0IGEgaSkgdGhlbiBsb29wIChpICsgMSlcbiAgICAgIGVsc2UgZmFsc2UgaW5cbiAgICBsb29wIDBcblxuICAoKiBkdXBsaWNhdGVkIGZyb20gYXJyYXkubWwgKilcbiAgbGV0IG1lbSB4IGEgPVxuICAgIGxldCBuID0gbGVuZ3RoIGEgaW5cbiAgICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgICBpZiBpID0gbiB0aGVuIGZhbHNlXG4gICAgICBlbHNlIGlmIGNvbXBhcmUgKHVuc2FmZV9nZXQgYSBpKSB4ID0gMCB0aGVuIHRydWVcbiAgICAgIGVsc2UgbG9vcCAoaSArIDEpXG4gICAgaW5cbiAgICBsb29wIDBcblxuICAoKiBtb3N0bHkgZHVwbGljYXRlZCBmcm9tIGFycmF5Lm1sLCBidXQgc2xpZ2h0bHkgZGlmZmVyZW50ICopXG4gIGxldCBtZW1faWVlZSB4IGEgPVxuICAgIGxldCBuID0gbGVuZ3RoIGEgaW5cbiAgICBsZXQgcmVjIGxvb3AgaSA9XG4gICAgICBpZiBpID0gbiB0aGVuIGZhbHNlXG4gICAgICBlbHNlIGlmIHggPSAodW5zYWZlX2dldCBhIGkpIHRoZW4gdHJ1ZVxuICAgICAgZWxzZSBsb29wIChpICsgMSlcbiAgICBpblxuICAgIGxvb3AgMFxuXG4gICgqIGR1cGxpY2F0ZWQgZnJvbSBhcnJheS5tbCAqKVxuICBleGNlcHRpb24gQm90dG9tIG9mIGludFxuICBsZXQgc29ydCBjbXAgYSA9XG4gICAgbGV0IG1heHNvbiBsIGkgPVxuICAgICAgbGV0IGkzMSA9IGkraStpKzEgaW5cbiAgICAgIGxldCB4ID0gcmVmIGkzMSBpblxuICAgICAgaWYgaTMxKzIgPCBsIHRoZW4gYmVnaW5cbiAgICAgICAgaWYgY21wIChnZXQgYSBpMzEpIChnZXQgYSAoaTMxKzEpKSA8IDAgdGhlbiB4IDo9IGkzMSsxO1xuICAgICAgICBpZiBjbXAgKGdldCBhICF4KSAoZ2V0IGEgKGkzMSsyKSkgPCAwIHRoZW4geCA6PSBpMzErMjtcbiAgICAgICAgIXhcbiAgICAgIGVuZCBlbHNlXG4gICAgICAgIGlmIGkzMSsxIDwgbCAmJiBjbXAgKGdldCBhIGkzMSkgKGdldCBhIChpMzErMSkpIDwgMFxuICAgICAgICB0aGVuIGkzMSsxXG4gICAgICAgIGVsc2UgaWYgaTMxIDwgbCB0aGVuIGkzMSBlbHNlIHJhaXNlIChCb3R0b20gaSlcbiAgICBpblxuICAgIGxldCByZWMgdHJpY2tsZWRvd24gbCBpIGUgPVxuICAgICAgbGV0IGogPSBtYXhzb24gbCBpIGluXG4gICAgICBpZiBjbXAgKGdldCBhIGopIGUgPiAwIHRoZW4gYmVnaW5cbiAgICAgICAgc2V0IGEgaSAoZ2V0IGEgaik7XG4gICAgICAgIHRyaWNrbGVkb3duIGwgaiBlO1xuICAgICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgICAgc2V0IGEgaSBlO1xuICAgICAgZW5kO1xuICAgIGluXG4gICAgbGV0IHRyaWNrbGUgbCBpIGUgPSB0cnkgdHJpY2tsZWRvd24gbCBpIGUgd2l0aCBCb3R0b20gaSAtPiBzZXQgYSBpIGUgaW5cbiAgICBsZXQgcmVjIGJ1YmJsZWRvd24gbCBpID1cbiAgICAgIGxldCBqID0gbWF4c29uIGwgaSBpblxuICAgICAgc2V0IGEgaSAoZ2V0IGEgaik7XG4gICAgICBidWJibGVkb3duIGwgalxuICAgIGluXG4gICAgbGV0IGJ1YmJsZSBsIGkgPSB0cnkgYnViYmxlZG93biBsIGkgd2l0aCBCb3R0b20gaSAtPiBpIGluXG4gICAgbGV0IHJlYyB0cmlja2xldXAgaSBlID1cbiAgICAgIGxldCBmYXRoZXIgPSAoaSAtIDEpIC8gMyBpblxuICAgICAgYXNzZXJ0IChpIDw+IGZhdGhlcik7XG4gICAgICBpZiBjbXAgKGdldCBhIGZhdGhlcikgZSA8IDAgdGhlbiBiZWdpblxuICAgICAgICBzZXQgYSBpIChnZXQgYSBmYXRoZXIpO1xuICAgICAgICBpZiBmYXRoZXIgPiAwIHRoZW4gdHJpY2tsZXVwIGZhdGhlciBlIGVsc2Ugc2V0IGEgMCBlO1xuICAgICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgICAgc2V0IGEgaSBlO1xuICAgICAgZW5kO1xuICAgIGluXG4gICAgbGV0IGwgPSBsZW5ndGggYSBpblxuICAgIGZvciBpID0gKGwgKyAxKSAvIDMgLSAxIGRvd250byAwIGRvIHRyaWNrbGUgbCBpIChnZXQgYSBpKTsgZG9uZTtcbiAgICBmb3IgaSA9IGwgLSAxIGRvd250byAyIGRvXG4gICAgICBsZXQgZSA9IChnZXQgYSBpKSBpblxuICAgICAgc2V0IGEgaSAoZ2V0IGEgMCk7XG4gICAgICB0cmlja2xldXAgKGJ1YmJsZSBpIDApIGU7XG4gICAgZG9uZTtcbiAgICBpZiBsID4gMSB0aGVuIChsZXQgZSA9IChnZXQgYSAxKSBpbiBzZXQgYSAxIChnZXQgYSAwKTsgc2V0IGEgMCBlKVxuXG4gICgqIGR1cGxpY2F0ZWQgZnJvbSBhcnJheS5tbCwgZXhjZXB0IGZvciB0aGUgY2FsbCB0byBbY3JlYXRlXSAqKVxuICBsZXQgY3V0b2ZmID0gNVxuICBsZXQgc3RhYmxlX3NvcnQgY21wIGEgPVxuICAgIGxldCBtZXJnZSBzcmMxb2ZzIHNyYzFsZW4gc3JjMiBzcmMyb2ZzIHNyYzJsZW4gZHN0IGRzdG9mcyA9XG4gICAgICBsZXQgc3JjMXIgPSBzcmMxb2ZzICsgc3JjMWxlbiBhbmQgc3JjMnIgPSBzcmMyb2ZzICsgc3JjMmxlbiBpblxuICAgICAgbGV0IHJlYyBsb29wIGkxIHMxIGkyIHMyIGQgPVxuICAgICAgICBpZiBjbXAgczEgczIgPD0gMCB0aGVuIGJlZ2luXG4gICAgICAgICAgc2V0IGRzdCBkIHMxO1xuICAgICAgICAgIGxldCBpMSA9IGkxICsgMSBpblxuICAgICAgICAgIGlmIGkxIDwgc3JjMXIgdGhlblxuICAgICAgICAgICAgbG9vcCBpMSAoZ2V0IGEgaTEpIGkyIHMyIChkICsgMSlcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBibGl0IHNyYzIgaTIgZHN0IChkICsgMSkgKHNyYzJyIC0gaTIpXG4gICAgICAgIGVuZCBlbHNlIGJlZ2luXG4gICAgICAgICAgc2V0IGRzdCBkIHMyO1xuICAgICAgICAgIGxldCBpMiA9IGkyICsgMSBpblxuICAgICAgICAgIGlmIGkyIDwgc3JjMnIgdGhlblxuICAgICAgICAgICAgbG9vcCBpMSBzMSBpMiAoZ2V0IHNyYzIgaTIpIChkICsgMSlcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICBibGl0IGEgaTEgZHN0IChkICsgMSkgKHNyYzFyIC0gaTEpXG4gICAgICAgIGVuZFxuICAgICAgaW4gbG9vcCBzcmMxb2ZzIChnZXQgYSBzcmMxb2ZzKSBzcmMyb2ZzIChnZXQgc3JjMiBzcmMyb2ZzKSBkc3RvZnM7XG4gICAgaW5cbiAgICBsZXQgaXNvcnR0byBzcmNvZnMgZHN0IGRzdG9mcyBsZW4gPVxuICAgICAgZm9yIGkgPSAwIHRvIGxlbiAtIDEgZG9cbiAgICAgICAgbGV0IGUgPSAoZ2V0IGEgKHNyY29mcyArIGkpKSBpblxuICAgICAgICBsZXQgaiA9IHJlZiAoZHN0b2ZzICsgaSAtIDEpIGluXG4gICAgICAgIHdoaWxlICghaiA+PSBkc3RvZnMgJiYgY21wIChnZXQgZHN0ICFqKSBlID4gMCkgZG9cbiAgICAgICAgICBzZXQgZHN0ICghaiArIDEpIChnZXQgZHN0ICFqKTtcbiAgICAgICAgICBkZWNyIGo7XG4gICAgICAgIGRvbmU7XG4gICAgICAgIHNldCBkc3QgKCFqICsgMSkgZTtcbiAgICAgIGRvbmU7XG4gICAgaW5cbiAgICBsZXQgcmVjIHNvcnR0byBzcmNvZnMgZHN0IGRzdG9mcyBsZW4gPVxuICAgICAgaWYgbGVuIDw9IGN1dG9mZiB0aGVuIGlzb3J0dG8gc3Jjb2ZzIGRzdCBkc3RvZnMgbGVuIGVsc2UgYmVnaW5cbiAgICAgICAgbGV0IGwxID0gbGVuIC8gMiBpblxuICAgICAgICBsZXQgbDIgPSBsZW4gLSBsMSBpblxuICAgICAgICBzb3J0dG8gKHNyY29mcyArIGwxKSBkc3QgKGRzdG9mcyArIGwxKSBsMjtcbiAgICAgICAgc29ydHRvIHNyY29mcyBhIChzcmNvZnMgKyBsMikgbDE7XG4gICAgICAgIG1lcmdlIChzcmNvZnMgKyBsMikgbDEgZHN0IChkc3RvZnMgKyBsMSkgbDIgZHN0IGRzdG9mcztcbiAgICAgIGVuZDtcbiAgICBpblxuICAgIGxldCBsID0gbGVuZ3RoIGEgaW5cbiAgICBpZiBsIDw9IGN1dG9mZiB0aGVuIGlzb3J0dG8gMCBhIDAgbCBlbHNlIGJlZ2luXG4gICAgICBsZXQgbDEgPSBsIC8gMiBpblxuICAgICAgbGV0IGwyID0gbCAtIGwxIGluXG4gICAgICBsZXQgdCA9IGNyZWF0ZSBsMiBpblxuICAgICAgc29ydHRvIGwxIHQgMCBsMjtcbiAgICAgIHNvcnR0byAwIGEgbDIgbDE7XG4gICAgICBtZXJnZSBsMiBsMSB0IDAgbDIgYSAwO1xuICAgIGVuZFxuXG4gIGxldCBmYXN0X3NvcnQgPSBzdGFibGVfc29ydFxuXG4gICgqIGR1cGxpY2F0ZWQgZnJvbSBhcnJheS5tbCAqKVxuICBsZXQgdG9fc2VxIGEgPVxuICAgIGxldCByZWMgYXV4IGkgKCkgPVxuICAgICAgaWYgaSA8IGxlbmd0aCBhXG4gICAgICB0aGVuXG4gICAgICAgIGxldCB4ID0gdW5zYWZlX2dldCBhIGkgaW5cbiAgICAgICAgU2VxLkNvbnMgKHgsIGF1eCAoaSsxKSlcbiAgICAgIGVsc2UgU2VxLk5pbFxuICAgIGluXG4gICAgYXV4IDBcblxuICAoKiBkdXBsaWNhdGVkIGZyb20gYXJyYXkubWwgKilcbiAgbGV0IHRvX3NlcWkgYSA9XG4gICAgbGV0IHJlYyBhdXggaSAoKSA9XG4gICAgICBpZiBpIDwgbGVuZ3RoIGFcbiAgICAgIHRoZW5cbiAgICAgICAgbGV0IHggPSB1bnNhZmVfZ2V0IGEgaSBpblxuICAgICAgICBTZXEuQ29ucyAoKGkseCksIGF1eCAoaSsxKSlcbiAgICAgIGVsc2UgU2VxLk5pbFxuICAgIGluXG4gICAgYXV4IDBcblxuICAoKiBtb3N0bHkgZHVwbGljYXRlZCBmcm9tIGFycmF5Lm1sICopXG4gIGxldCBvZl9yZXZfbGlzdCBsID1cbiAgICBsZXQgbGVuID0gTGlzdC5sZW5ndGggbCBpblxuICAgIGxldCBhID0gY3JlYXRlIGxlbiBpblxuICAgIGxldCByZWMgZmlsbCBpID0gZnVuY3Rpb25cbiAgICAgICAgW10gLT4gYVxuICAgICAgfCBoZDo6dGwgLT4gdW5zYWZlX3NldCBhIGkgaGQ7IGZpbGwgKGktMSkgdGxcbiAgICBpblxuICAgIGZpbGwgKGxlbi0xKSBsXG5cbiAgKCogZHVwbGljYXRlZCBmcm9tIGFycmF5Lm1sICopXG4gIGxldCBvZl9zZXEgaSA9XG4gICAgbGV0IGwgPSBTZXEuZm9sZF9sZWZ0IChmdW4gYWNjIHggLT4geDo6YWNjKSBbXSBpIGluXG4gICAgb2ZfcmV2X2xpc3QgbFxuXG5cbiAgbGV0IG1hcF90b19hcnJheSBmIGEgPVxuICAgIGxldCBsID0gbGVuZ3RoIGEgaW5cbiAgICBpZiBsID0gMCB0aGVuIFt8IHxdIGVsc2UgYmVnaW5cbiAgICAgIGxldCByID0gQXJyYXkubWFrZSBsIChmICh1bnNhZmVfZ2V0IGEgMCkpIGluXG4gICAgICBmb3IgaSA9IDEgdG8gbCAtIDEgZG9cbiAgICAgICAgQXJyYXkudW5zYWZlX3NldCByIGkgKGYgKHVuc2FmZV9nZXQgYSBpKSlcbiAgICAgIGRvbmU7XG4gICAgICByXG4gICAgZW5kXG5cbiAgbGV0IG1hcF9mcm9tX2FycmF5IGYgYSA9XG4gICAgbGV0IGwgPSBBcnJheS5sZW5ndGggYSBpblxuICAgIGxldCByID0gY3JlYXRlIGwgaW5cbiAgICBmb3IgaSA9IDAgdG8gbCAtIDEgZG9cbiAgICAgIHVuc2FmZV9zZXQgciBpIChmIChBcnJheS51bnNhZmVfZ2V0IGEgaSkpXG4gICAgZG9uZTtcbiAgICByXG5cbmVuZFxuXG5tb2R1bGUgQXJyYXlMYWJlbHMgPSBBcnJheVxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICBEYW1pZW4gRG9saWdleiwgcHJvamV0IFBhcmEsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBQc2V1ZG8tcmFuZG9tIG51bWJlciBnZW5lcmF0b3JcbiAgIFRoaXMgaXMgYSBsYWdnZWQtRmlib25hY2NpIEYoNTUsIDI0LCArKSB3aXRoIGEgbW9kaWZpZWQgYWRkaXRpb25cbiAgIGZ1bmN0aW9uIHRvIGVuaGFuY2UgdGhlIG1peGluZyBvZiBiaXRzLlxuICAgSWYgd2UgdXNlIG5vcm1hbCBhZGRpdGlvbiwgdGhlIGxvdy1vcmRlciBiaXQgZmFpbHMgdGVzdHMgMSBhbmQgN1xuICAgb2YgdGhlIERpZWhhcmQgdGVzdCBzdWl0ZSwgYW5kIGJpdHMgMSBhbmQgMiBhbHNvIGZhaWwgdGVzdCA3LlxuICAgSWYgd2UgdXNlIG11bHRpcGxpY2F0aW9uIGFzIHN1Z2dlc3RlZCBieSBNYXJzYWdsaWEsIGl0IGRvZXNuJ3QgZmFyZVxuICAgbXVjaCBiZXR0ZXIuXG4gICBCeSBtaXhpbmcgdGhlIGJpdHMgb2Ygb25lIG9mIHRoZSBudW1iZXJzIGJlZm9yZSBhZGRpdGlvbiAoWE9SIHRoZVxuICAgNSBoaWdoLW9yZGVyIGJpdHMgaW50byB0aGUgbG93LW9yZGVyIGJpdHMpLCB3ZSBnZXQgYSBnZW5lcmF0b3IgdGhhdFxuICAgcGFzc2VzIGFsbCB0aGUgRGllaGFyZCB0ZXN0cy5cbiopXG5cbmV4dGVybmFsIHJhbmRvbV9zZWVkOiB1bml0IC0+IGludCBhcnJheSA9IFwiY2FtbF9zeXNfcmFuZG9tX3NlZWRcIlxuXG5tb2R1bGUgU3RhdGUgPSBzdHJ1Y3RcblxuICB0eXBlIHQgPSB7IHN0IDogaW50IGFycmF5OyBtdXRhYmxlIGlkeCA6IGludCB9XG5cbiAgbGV0IG5ld19zdGF0ZSAoKSA9IHsgc3QgPSBBcnJheS5tYWtlIDU1IDA7IGlkeCA9IDAgfVxuICBsZXQgYXNzaWduIHN0MSBzdDIgPVxuICAgIEFycmF5LmJsaXQgc3QyLnN0IDAgc3QxLnN0IDAgNTU7XG4gICAgc3QxLmlkeCA8LSBzdDIuaWR4XG5cblxuICBsZXQgZnVsbF9pbml0IHMgc2VlZCA9XG4gICAgbGV0IGNvbWJpbmUgYWNjdSB4ID0gRGlnZXN0LnN0cmluZyAoYWNjdSBeIEludC50b19zdHJpbmcgeCkgaW5cbiAgICBsZXQgZXh0cmFjdCBkID1cbiAgICAgIENoYXIuY29kZSBkLlswXSArIChDaGFyLmNvZGUgZC5bMV0gbHNsIDgpICsgKENoYXIuY29kZSBkLlsyXSBsc2wgMTYpXG4gICAgICArIChDaGFyLmNvZGUgZC5bM10gbHNsIDI0KVxuICAgIGluXG4gICAgbGV0IHNlZWQgPSBpZiBBcnJheS5sZW5ndGggc2VlZCA9IDAgdGhlbiBbfCAwIHxdIGVsc2Ugc2VlZCBpblxuICAgIGxldCBsID0gQXJyYXkubGVuZ3RoIHNlZWQgaW5cbiAgICBmb3IgaSA9IDAgdG8gNTQgZG9cbiAgICAgIHMuc3QuKGkpIDwtIGk7XG4gICAgZG9uZTtcbiAgICBsZXQgYWNjdSA9IHJlZiBcInhcIiBpblxuICAgIGZvciBpID0gMCB0byA1NCArIEludC5tYXggNTUgbCBkb1xuICAgICAgbGV0IGogPSBpIG1vZCA1NSBpblxuICAgICAgbGV0IGsgPSBpIG1vZCBsIGluXG4gICAgICBhY2N1IDo9IGNvbWJpbmUgIWFjY3Ugc2VlZC4oayk7XG4gICAgICBzLnN0LihqKSA8LSAocy5zdC4oaikgbHhvciBleHRyYWN0ICFhY2N1KSBsYW5kIDB4M0ZGRkZGRkY7ICAoKiBQUiM1NTc1ICopXG4gICAgZG9uZTtcbiAgICBzLmlkeCA8LSAwXG5cblxuICBsZXQgbWFrZSBzZWVkID1cbiAgICBsZXQgcmVzdWx0ID0gbmV3X3N0YXRlICgpIGluXG4gICAgZnVsbF9pbml0IHJlc3VsdCBzZWVkO1xuICAgIHJlc3VsdFxuXG5cbiAgbGV0IG1ha2Vfc2VsZl9pbml0ICgpID0gbWFrZSAocmFuZG9tX3NlZWQgKCkpXG5cbiAgbGV0IGNvcHkgcyA9XG4gICAgbGV0IHJlc3VsdCA9IG5ld19zdGF0ZSAoKSBpblxuICAgIGFzc2lnbiByZXN1bHQgcztcbiAgICByZXN1bHRcblxuXG4gICgqIFJldHVybnMgMzAgcmFuZG9tIGJpdHMgYXMgYW4gaW50ZWdlciAwIDw9IHggPCAxMDczNzQxODI0ICopXG4gIGxldCBiaXRzIHMgPVxuICAgIHMuaWR4IDwtIChzLmlkeCArIDEpIG1vZCA1NTtcbiAgICBsZXQgY3VydmFsID0gcy5zdC4ocy5pZHgpIGluXG4gICAgbGV0IG5ld3ZhbCA9IHMuc3QuKChzLmlkeCArIDI0KSBtb2QgNTUpXG4gICAgICAgICAgICAgICAgICsgKGN1cnZhbCBseG9yICgoY3VydmFsIGxzciAyNSkgbGFuZCAweDFGKSkgaW5cbiAgICBsZXQgbmV3dmFsMzAgPSBuZXd2YWwgbGFuZCAweDNGRkZGRkZGIGluICAoKiBQUiM1NTc1ICopXG4gICAgcy5zdC4ocy5pZHgpIDwtIG5ld3ZhbDMwO1xuICAgIG5ld3ZhbDMwXG5cblxuICBsZXQgcmVjIGludGF1eCBzIG4gPVxuICAgIGxldCByID0gYml0cyBzIGluXG4gICAgbGV0IHYgPSByIG1vZCBuIGluXG4gICAgaWYgciAtIHYgPiAweDNGRkZGRkZGIC0gbiArIDEgdGhlbiBpbnRhdXggcyBuIGVsc2UgdlxuXG4gIGxldCBpbnQgcyBib3VuZCA9XG4gICAgaWYgYm91bmQgPiAweDNGRkZGRkZGIHx8IGJvdW5kIDw9IDBcbiAgICB0aGVuIGludmFsaWRfYXJnIFwiUmFuZG9tLmludFwiXG4gICAgZWxzZSBpbnRhdXggcyBib3VuZFxuXG4gIGxldCByZWMgaW50NjNhdXggcyBuID1cbiAgICBsZXQgbWF4X2ludF8zMiA9ICgxIGxzbCAzMCkgKyAweDNGRkZGRkZGIGluICgqIDB4N0ZGRkZGRkYgKilcbiAgICBsZXQgYjEgPSBiaXRzIHMgaW5cbiAgICBsZXQgYjIgPSBiaXRzIHMgaW5cbiAgICBsZXQgKHIsIG1heF9pbnQpID1cbiAgICAgIGlmIG4gPD0gbWF4X2ludF8zMiB0aGVuXG4gICAgICAgICgqIDMxIHJhbmRvbSBiaXRzIG9uIGJvdGggNjQtYml0IE9DYW1sIGFuZCBKYXZhU2NyaXB0LlxuICAgICAgICAgICBVc2UgdXBwZXIgMTUgYml0cyBvZiBiMSBhbmQgMTYgYml0cyBvZiBiMi4gKilcbiAgICAgICAgbGV0IGJwb3MgPVxuICAgICAgICAgICgoKGIyIGxhbmQgMHgzRkZGQzAwMCkgbHNsIDEpIGxvciAoYjEgbHNyIDE1KSlcbiAgICAgICAgaW5cbiAgICAgICAgICAoYnBvcywgbWF4X2ludF8zMilcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IGIzID0gYml0cyBzIGluXG4gICAgICAgICgqIDYyIHJhbmRvbSBiaXRzIG9uIDY0LWJpdCBPQ2FtbDsgdW5yZWFjaGFibGUgb24gSmF2YVNjcmlwdC5cbiAgICAgICAgICAgVXNlIHVwcGVyIDIwIGJpdHMgb2YgYjEgYW5kIDIxIGJpdHMgb2YgYjIgYW5kIGIzLiAqKVxuICAgICAgICBsZXQgYnBvcyA9XG4gICAgICAgICAgKCgoKGIzIGxhbmQgMHgzRkZGRkUwMCkgbHNsIDEyKSBsb3IgKGIyIGxzciA5KSkgbHNsIDIwKVxuICAgICAgICAgICAgbG9yIChiMSBsc3IgMTApXG4gICAgICAgIGluXG4gICAgICAgICAgKGJwb3MsIG1heF9pbnQpXG4gICAgaW5cbiAgICBsZXQgdiA9IHIgbW9kIG4gaW5cbiAgICBpZiByIC0gdiA+IG1heF9pbnQgLSBuICsgMSB0aGVuIGludDYzYXV4IHMgbiBlbHNlIHZcblxuICBsZXQgZnVsbF9pbnQgcyBib3VuZCA9XG4gICAgaWYgYm91bmQgPD0gMCB0aGVuXG4gICAgICBpbnZhbGlkX2FyZyBcIlJhbmRvbS5mdWxsX2ludFwiXG4gICAgZWxzZSBpZiBib3VuZCA+IDB4M0ZGRkZGRkYgdGhlblxuICAgICAgaW50NjNhdXggcyBib3VuZFxuICAgIGVsc2VcbiAgICAgIGludGF1eCBzIGJvdW5kXG5cblxuICBsZXQgcmVjIGludDMyYXV4IHMgbiA9XG4gICAgbGV0IGIxID0gSW50MzIub2ZfaW50IChiaXRzIHMpIGluXG4gICAgbGV0IGIyID0gSW50MzIuc2hpZnRfbGVmdCAoSW50MzIub2ZfaW50IChiaXRzIHMgbGFuZCAxKSkgMzAgaW5cbiAgICBsZXQgciA9IEludDMyLmxvZ29yIGIxIGIyIGluXG4gICAgbGV0IHYgPSBJbnQzMi5yZW0gciBuIGluXG4gICAgaWYgSW50MzIuc3ViIHIgdiA+IEludDMyLmFkZCAoSW50MzIuc3ViIEludDMyLm1heF9pbnQgbikgMWxcbiAgICB0aGVuIGludDMyYXV4IHMgblxuICAgIGVsc2UgdlxuXG4gIGxldCBpbnQzMiBzIGJvdW5kID1cbiAgICBpZiBib3VuZCA8PSAwbFxuICAgIHRoZW4gaW52YWxpZF9hcmcgXCJSYW5kb20uaW50MzJcIlxuICAgIGVsc2UgaW50MzJhdXggcyBib3VuZFxuXG5cbiAgbGV0IHJlYyBpbnQ2NGF1eCBzIG4gPVxuICAgIGxldCBiMSA9IEludDY0Lm9mX2ludCAoYml0cyBzKSBpblxuICAgIGxldCBiMiA9IEludDY0LnNoaWZ0X2xlZnQgKEludDY0Lm9mX2ludCAoYml0cyBzKSkgMzAgaW5cbiAgICBsZXQgYjMgPSBJbnQ2NC5zaGlmdF9sZWZ0IChJbnQ2NC5vZl9pbnQgKGJpdHMgcyBsYW5kIDcpKSA2MCBpblxuICAgIGxldCByID0gSW50NjQubG9nb3IgYjEgKEludDY0LmxvZ29yIGIyIGIzKSBpblxuICAgIGxldCB2ID0gSW50NjQucmVtIHIgbiBpblxuICAgIGlmIEludDY0LnN1YiByIHYgPiBJbnQ2NC5hZGQgKEludDY0LnN1YiBJbnQ2NC5tYXhfaW50IG4pIDFMXG4gICAgdGhlbiBpbnQ2NGF1eCBzIG5cbiAgICBlbHNlIHZcblxuICBsZXQgaW50NjQgcyBib3VuZCA9XG4gICAgaWYgYm91bmQgPD0gMExcbiAgICB0aGVuIGludmFsaWRfYXJnIFwiUmFuZG9tLmludDY0XCJcbiAgICBlbHNlIGludDY0YXV4IHMgYm91bmRcblxuXG4gIGxldCBuYXRpdmVpbnQgPVxuICAgIGlmIE5hdGl2ZWludC5zaXplID0gMzJcbiAgICB0aGVuIGZ1biBzIGJvdW5kIC0+IE5hdGl2ZWludC5vZl9pbnQzMiAoaW50MzIgcyAoTmF0aXZlaW50LnRvX2ludDMyIGJvdW5kKSlcbiAgICBlbHNlIGZ1biBzIGJvdW5kIC0+IEludDY0LnRvX25hdGl2ZWludCAoaW50NjQgcyAoSW50NjQub2ZfbmF0aXZlaW50IGJvdW5kKSlcblxuXG4gICgqIFJldHVybnMgYSBmbG9hdCAwIDw9IHggPD0gMSB3aXRoIGF0IG1vc3QgNjAgYml0cyBvZiBwcmVjaXNpb24uICopXG4gIGxldCByYXdmbG9hdCBzID1cbiAgICBsZXQgc2NhbGUgPSAxMDczNzQxODI0LjAgICgqIDJeMzAgKilcbiAgICBhbmQgcjEgPSBTdGRsaWIuZmxvYXQgKGJpdHMgcylcbiAgICBhbmQgcjIgPSBTdGRsaWIuZmxvYXQgKGJpdHMgcylcbiAgICBpbiAocjEgLy4gc2NhbGUgKy4gcjIpIC8uIHNjYWxlXG5cblxuICBsZXQgZmxvYXQgcyBib3VuZCA9IHJhd2Zsb2F0IHMgKi4gYm91bmRcblxuICBsZXQgYm9vbCBzID0gKGJpdHMgcyBsYW5kIDEgPSAwKVxuXG5lbmRcblxuKCogVGhpcyBpcyB0aGUgc3RhdGUgeW91IGdldCB3aXRoIFtpbml0IDI3MTgyODE4XSBhbmQgdGhlbiBhcHBseWluZ1xuICAgdGhlIFwibGFuZCAweDNGRkZGRkZGXCIgZmlsdGVyIHRvIHRoZW0uICBTZWUgIzU1NzUsICM1NzkzLCAjNTk3Ny4gKilcbmxldCBkZWZhdWx0ID0ge1xuICBTdGF0ZS5zdCA9IFt8XG4gICAgICAweDNhZTI1MjJiOyAweDFkOGQ0NjM0OyAweDE1YjRmYWQwOyAweDE4YjE0YWNlOyAweDEyZjhhM2M0OyAweDNiMDg2YzQ3O1xuICAgICAgMHgxNmQ0NjdkNjsgMHgxMDFkOTFjNzsgMHgzMjFkZjE3NzsgMHgwMTc2YzE5MzsgMHgxZmY3MmJmMTsgMHgxZTg4OTEwOTtcbiAgICAgIDB4MGI0NjRiMTg7IDB4MmI4NmI5N2M7IDB4MDg5MWRhNDg7IDB4MDMxMzc0NjM7IDB4MDg1YWM1YTE7IDB4MTVkNjFmMmY7XG4gICAgICAweDNiY2VkMzU5OyAweDI5YzFjMTMyOyAweDNhODY3NjZlOyAweDM2NmQ4Yzg2OyAweDFmNWI2MjIyOyAweDNjZTFiNTlmO1xuICAgICAgMHgyZWJmNzhlMTsgMHgyN2NkMWI4NjsgMHgyNThmM2RjMzsgMHgzODlhODE5NDsgMHgwMmU0YzQ0YzsgMHgxOGM0M2Y3ZDtcbiAgICAgIDB4MGY2ZTUzNGY7IDB4MWU3ZGYzNTk7IDB4MDU1ZDBiN2U7IDB4MTBlODRlN2U7IDB4MTI2MTk4ZTQ7IDB4MGU3NzIyY2I7XG4gICAgICAweDFjYmVkZTI4OyAweDMzOTFiOTY0OyAweDNkNDBlOTJhOyAweDBjNTk5MzNkOyAweDBiOGNkMGI3OyAweDI0ZWZmZjFjO1xuICAgICAgMHgyODAzZmRhYTsgMHgwOGViYzcyZTsgMHgwZjUyMmUzMjsgMHgwNTM5OGVkYzsgMHgyMTQ0YTA0YzsgMHgwYWVmM2NiZDtcbiAgICAgIDB4MDFhZDQ3MTk7IDB4MzViOTNjZDY7IDB4MmE1NTlkNGY7IDB4MWU2ZmQ3Njg7IDB4MjZlMjdmMzY7IDB4MTg2ZjE4YzM7XG4gICAgICAweDJmYmY5NjdhO1xuICAgIHxdO1xuICBTdGF0ZS5pZHggPSAwO1xufVxuXG5sZXQgYml0cyAoKSA9IFN0YXRlLmJpdHMgZGVmYXVsdFxubGV0IGludCBib3VuZCA9IFN0YXRlLmludCBkZWZhdWx0IGJvdW5kXG5sZXQgZnVsbF9pbnQgYm91bmQgPSBTdGF0ZS5mdWxsX2ludCBkZWZhdWx0IGJvdW5kXG5sZXQgaW50MzIgYm91bmQgPSBTdGF0ZS5pbnQzMiBkZWZhdWx0IGJvdW5kXG5sZXQgbmF0aXZlaW50IGJvdW5kID0gU3RhdGUubmF0aXZlaW50IGRlZmF1bHQgYm91bmRcbmxldCBpbnQ2NCBib3VuZCA9IFN0YXRlLmludDY0IGRlZmF1bHQgYm91bmRcbmxldCBmbG9hdCBzY2FsZSA9IFN0YXRlLmZsb2F0IGRlZmF1bHQgc2NhbGVcbmxldCBib29sICgpID0gU3RhdGUuYm9vbCBkZWZhdWx0XG5cbmxldCBmdWxsX2luaXQgc2VlZCA9IFN0YXRlLmZ1bGxfaW5pdCBkZWZhdWx0IHNlZWRcbmxldCBpbml0IHNlZWQgPSBTdGF0ZS5mdWxsX2luaXQgZGVmYXVsdCBbfCBzZWVkIHxdXG5sZXQgc2VsZl9pbml0ICgpID0gZnVsbF9pbml0IChyYW5kb21fc2VlZCgpKVxuXG4oKiBNYW5pcHVsYXRpbmcgdGhlIGN1cnJlbnQgc3RhdGUuICopXG5cbmxldCBnZXRfc3RhdGUgKCkgPSBTdGF0ZS5jb3B5IGRlZmF1bHRcbmxldCBzZXRfc3RhdGUgcyA9IFN0YXRlLmFzc2lnbiBkZWZhdWx0IHNcblxuKCoqKioqKioqKioqKioqKioqKioqXG5cbigqIFRlc3QgZnVuY3Rpb25zLiAgTm90IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5LlxuICAgVGhlIFtjaGlzcXVhcmVdIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgd2l0aCBuID4gMTByLlxuICAgSXQgcmV0dXJucyBhIHRyaXBsZSAobG93LCBhY3R1YWwsIGhpZ2gpLlxuICAgSWYgbG93IDw9IGFjdHVhbCA8PSBoaWdoLCB0aGUgW2ddIGZ1bmN0aW9uIHBhc3NlZCB0aGUgdGVzdCxcbiAgIG90aGVyd2lzZSBpdCBmYWlsZWQuXG5cbiAgU29tZSByZXN1bHRzOlxuXG5pbml0IDI3MTgyODE4OyBjaGlzcXVhcmUgaW50IDEwMDAwMCAxMDAwXG5pbml0IDI3MTgyODE4OyBjaGlzcXVhcmUgaW50IDEwMDAwMCAxMDBcbmluaXQgMjcxODI4MTg7IGNoaXNxdWFyZSBpbnQgMTAwMDAwIDUwMDBcbmluaXQgMjcxODI4MTg7IGNoaXNxdWFyZSBpbnQgMTAwMDAwMCAxMDAwXG5pbml0IDI3MTgyODE4OyBjaGlzcXVhcmUgaW50IDEwMDAwMCAxMDI0XG5pbml0IDI5OTc5MjY0MzsgY2hpc3F1YXJlIGludCAxMDAwMDAgMTAyNFxuaW5pdCAxNDE0MjEzNjsgY2hpc3F1YXJlIGludCAxMDAwMDAgMTAyNFxuaW5pdCAyNzE4MjgxODsgaW5pdF9kaWZmIDEwMjQ7IGNoaXNxdWFyZSBkaWZmIDEwMDAwMCAxMDI0XG5pbml0IDI3MTgyODE4OyBpbml0X2RpZmYgMTAwOyBjaGlzcXVhcmUgZGlmZiAxMDAwMDAgMTAwXG5pbml0IDI3MTgyODE4OyBpbml0X2RpZmYyIDEwMjQ7IGNoaXNxdWFyZSBkaWZmMiAxMDAwMDAgMTAyNFxuaW5pdCAyNzE4MjgxODsgaW5pdF9kaWZmMiAxMDA7IGNoaXNxdWFyZSBkaWZmMiAxMDAwMDAgMTAwXG5pbml0IDE0MTQyMTM2OyBpbml0X2RpZmYyIDEwMDsgY2hpc3F1YXJlIGRpZmYyIDEwMDAwMCAxMDBcbmluaXQgMjk5NzkyNjQzOyBpbml0X2RpZmYyIDEwMDsgY2hpc3F1YXJlIGRpZmYyIDEwMDAwMCAxMDBcbi0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoOTM2Ljc1NDQ0Njc5NjYzMjQ2NSwgOTk3LjUsIDEwNjMuMjQ1NTUzMjAzMzY3NTQpXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoODAuLCA4OS43NDAwMDAwMDAwMDUyMzg3LCAxMjAuKVxuIyAtIDogZmxvYXQgKiBmbG9hdCAqIGZsb2F0ID0gKDQ4NTguNTc4NjQzNzYyNjksIDUwNDUuNSwgNTE0MS40MjEzNTYyMzczMSlcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9XG4oOTM2Ljc1NDQ0Njc5NjYzMjQ2NSwgOTQ0LjgwNTk5OTk5OTk4MjMwNSwgMTA2My4yNDU1NTMyMDMzNjc1NClcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg5NjAuLCAxMDE5LjE5NzQ0MDAwMDAwMzU1LCAxMDg4LilcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg5NjAuLCAxMDU5LjMxNzc2MDAwMDAwNTM2LCAxMDg4LilcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg5NjAuLCAxMDM5Ljk4NDYzOTk5OTk5NTEyLCAxMDg4LilcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg5NjAuLCAxMDU0LjM4MjA3OTk5OTk5NTc3LCAxMDg4LilcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg4MC4sIDkwLjA5NjAwMDAwMDAwNSwgMTIwLilcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg5NjAuLCAxMDc2Ljc4NzIwMDAwMDAwNjEyLCAxMDg4LilcbiMgLSA6IGZsb2F0ICogZmxvYXQgKiBmbG9hdCA9ICg4MC4sIDg1LjE3NjAwMDAwMDAwNjc1MjEsIDEyMC4pXG4jIC0gOiBmbG9hdCAqIGZsb2F0ICogZmxvYXQgPSAoODAuLCA4NS4yMTYwMDAwMDAwMDAzNDkyLCAxMjAuKVxuIyAtIDogZmxvYXQgKiBmbG9hdCAqIGZsb2F0ID0gKDgwLiwgODAuNjIyMDAwMDAwMDAzMDI2OCwgMTIwLilcblxuKilcblxuKCogUmV0dXJuIHRoZSBzdW0gb2YgdGhlIHNxdWFyZXMgb2YgdltpMCxpMVsgKilcbmxldCByZWMgc3Vtc3EgdiBpMCBpMSA9XG4gIGlmIGkwID49IGkxIHRoZW4gMC4wXG4gIGVsc2UgaWYgaTEgPSBpMCArIDEgdGhlbiBTdGRsaWIuZmxvYXQgdi4oaTApICouIFN0ZGxpYi5mbG9hdCB2LihpMClcbiAgZWxzZSBzdW1zcSB2IGkwICgoaTAraTEpLzIpICsuIHN1bXNxIHYgKChpMCtpMSkvMikgaTFcblxuXG5sZXQgY2hpc3F1YXJlIGcgbiByID1cbiAgaWYgbiA8PSAxMCAqIHIgdGhlbiBpbnZhbGlkX2FyZyBcImNoaXNxdWFyZVwiO1xuICBsZXQgZiA9IEFycmF5Lm1ha2UgciAwIGluXG4gIGZvciBpID0gMSB0byBuIGRvXG4gICAgbGV0IHQgPSBnIHIgaW5cbiAgICBmLih0KSA8LSBmLih0KSArIDFcbiAgZG9uZTtcbiAgbGV0IHQgPSBzdW1zcSBmIDAgclxuICBhbmQgciA9IFN0ZGxpYi5mbG9hdCByXG4gIGFuZCBuID0gU3RkbGliLmZsb2F0IG4gaW5cbiAgbGV0IHNyID0gMi4wICouIHNxcnQgciBpblxuICAociAtLiBzciwgICAociAqLiB0IC8uIG4pIC0uIG4sICAgciArLiBzcilcblxuXG4oKiBUaGlzIGlzIHRvIHRlc3QgZm9yIGxpbmVhciBkZXBlbmRlbmNpZXMgYmV0d2VlbiBzdWNjZXNzaXZlIHJhbmRvbSBudW1iZXJzLlxuKilcbmxldCBzdCA9IHJlZiAwXG5sZXQgaW5pdF9kaWZmIHIgPSBzdCA6PSBpbnQgclxubGV0IGRpZmYgciA9XG4gIGxldCB4MSA9ICFzdFxuICBhbmQgeDIgPSBpbnQgclxuICBpblxuICBzdCA6PSB4MjtcbiAgaWYgeDEgPj0geDIgdGhlblxuICAgIHgxIC0geDJcbiAgZWxzZVxuICAgIHIgKyB4MSAtIHgyXG5cblxubGV0IHN0MSA9IHJlZiAwXG5hbmQgc3QyID0gcmVmIDBcblxuXG4oKiBUaGlzIGlzIHRvIHRlc3QgZm9yIHF1YWRyYXRpYyBkZXBlbmRlbmNpZXMgYmV0d2VlbiBzdWNjZXNzaXZlIHJhbmRvbVxuICAgbnVtYmVycy5cbiopXG5sZXQgaW5pdF9kaWZmMiByID0gc3QxIDo9IGludCByOyBzdDIgOj0gaW50IHJcbmxldCBkaWZmMiByID1cbiAgbGV0IHgxID0gIXN0MVxuICBhbmQgeDIgPSAhc3QyXG4gIGFuZCB4MyA9IGludCByXG4gIGluXG4gIHN0MSA6PSB4MjtcbiAgc3QyIDo9IHgzO1xuICAoeDMgLSB4MiAtIHgyICsgeDEgKyAyKnIpIG1vZCByXG5cblxuKioqKioqKioqKioqKioqKioqKiopXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIEFuIGFsaWFzIGZvciB0aGUgdHlwZSBvZiBsaXN0cy4gKilcbnR5cGUgJ2EgdCA9ICdhIGxpc3QgPSBbXSB8ICg6Oikgb2YgJ2EgKiAnYSBsaXN0XG5cbigqIExpc3Qgb3BlcmF0aW9ucyAqKVxuXG5sZXQgcmVjIGxlbmd0aF9hdXggbGVuID0gZnVuY3Rpb25cbiAgICBbXSAtPiBsZW5cbiAgfCBfOjpsIC0+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+IFtdXG4gICAgICB8IFNlcS5Db25zICh4LCBuZXh0KSAtPiB4IDo6IGRpcmVjdCAoZGVwdGgtMSkgbmV4dFxuICBpblxuICBkaXJlY3QgNTAwIHNlcVxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgIFNpbW9uIENydWFuZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxNyBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBNb2R1bGUgW1NlcV06IGZ1bmN0aW9uYWwgaXRlcmF0b3JzICopXG5cbnR5cGUgKydhIG5vZGUgPVxuICB8IE5pbFxuICB8IENvbnMgb2YgJ2EgKiAnYSB0XG5cbmFuZCAnYSB0ID0gdW5pdCAtPiAnYSBub2RlXG5cbmxldCBlbXB0eSAoKSA9IE5pbFxuXG5sZXQgcmV0dXJuIHggKCkgPSBDb25zICh4LCBlbXB0eSlcblxubGV0IGNvbnMgeCBuZXh0ICgpID0gQ29ucyAoeCwgbmV4dClcblxubGV0IHJlYyBhcHBlbmQgc2VxMSBzZXEyICgpID1cbiAgbWF0Y2ggc2VxMSgpIHdpdGhcbiAgfCBOaWwgLT4gc2VxMigpXG4gIHwgQ29ucyAoeCwgbmV4dCkgLT4gQ29ucyAoeCwgYXBwZW5kIG5leHQgc2VxMilcblxubGV0IHJlYyBtYXAgZiBzZXEgKCkgPSBtYXRjaCBzZXEoKSB3aXRoXG4gIHwgTmlsIC0+IE5pbFxuICB8IENvbnMgKHgsIG5leHQpIC0+IENvbnMgKGYgeCwgbWFwIGYgbmV4dClcblxubGV0IHJlYyBmaWx0ZXJfbWFwIGYgc2VxICgpID0gbWF0Y2ggc2VxKCkgd2l0aFxuICB8IE5pbCAtPiBOaWxcbiAgfCBDb25zICh4LCBuZXh0KSAtPlxuICAgICAgbWF0Y2ggZiB4IHdpdGhcbiAgICAgICAgfCBOb25lIC0+IGZpbHRlcl9tYXAgZiBuZXh0ICgpXG4gICAgICAgIHwgU29tZSB5IC0+IENvbnMgKHksIGZpbHRlcl9tYXAgZiBuZXh0KVxuXG5sZXQgcmVjIGZpbHRlciBmIHNlcSAoKSA9IG1hdGNoIHNlcSgpIHdpdGhcbiAgfCBOaWwgLT4gTmlsXG4gIHwgQ29ucyAoeCwgbmV4dCkgLT5cbiAgICAgIGlmIGYgeFxuICAgICAgdGhlbiBDb25zICh4LCBmaWx0ZXIgZiBuZXh0KVxuICAgICAgZWxzZSBmaWx0ZXIgZiBuZXh0ICgpXG5cbmxldCByZWMgY29uY2F0IHNlcSAoKSA9IG1hdGNoIHNlcSAoKSB3aXRoXG4gIHwgTmlsIC0+IE5pbFxuICB8IENvbnMgKHgsIG5leHQpIC0+XG4gICAgIGFwcGVuZCB4IChjb25jYXQgbmV4dCkgKClcblxubGV0IHJlYyBmbGF0X21hcCBmIHNlcSAoKSA9IG1hdGNoIHNlcSAoKSB3aXRoXG4gIHwgTmlsIC0+IE5pbFxuICB8IENvbnMgKHgsIG5leHQpIC0+XG4gICAgYXBwZW5kIChmIHgpIChmbGF0X21hcCBmIG5leHQpICgpXG5cbmxldCBjb25jYXRfbWFwID0gZmxhdF9tYXBcblxubGV0IGZvbGRfbGVmdCBmIGFjYyBzZXEgPVxuICBsZXQgcmVjIGF1eCBmIGFjYyBzZXEgPSBtYXRjaCBzZXEgKCkgd2l0aFxuICAgIHwgTmlsIC0+IGFjY1xuICAgIHwgQ29ucyAoeCwgbmV4dCkgLT5cbiAgICAgICAgbGV0IGFjYyA9IGYgYWNjIHggaW5cbiAgICAgICAgYXV4IGYgYWNjIG5leHRcbiAgaW5cbiAgYXV4IGYgYWNjIHNlcVxuXG5sZXQgaXRlciBmIHNlcSA9XG4gIGxldCByZWMgYXV4IHNlcSA9IG1hdGNoIHNlcSAoKSB3aXRoXG4gICAgfCBOaWwgLT4gKClcbiAgICB8IENvbnMgKHgsIG5leHQpIC0+XG4gICAgICAgIGYgeDtcbiAgICAgICAgYXV4IG5leHRcbiAgaW5cbiAgYXV4IHNlcVxuXG5sZXQgcmVjIHVuZm9sZCBmIHUgKCkgPVxuICBtYXRjaCBmIHUgd2l0aFxuICB8IE5vbmUgLT4gTmlsXG4gIHwgU29tZSAoeCwgdScpIC0+IENvbnMgKHgsIHVuZm9sZCBmIHUnKVxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgVGhlIE9DYW1sIHByb2dyYW1tZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxOCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG50eXBlICdhIHQgPSAnYSBvcHRpb24gPSBOb25lIHwgU29tZSBvZiAnYVxuXG5sZXQgbm9uZSA9IE5vbmVcbmxldCBzb21lIHYgPSBTb21lIHZcbmxldCB2YWx1ZSBvIH5kZWZhdWx0ID0gbWF0Y2ggbyB3aXRoIFNvbWUgdiAtPiB2IHwgTm9uZSAtPiBkZWZhdWx0XG5sZXQgZ2V0ID0gZnVuY3Rpb24gU29tZSB2IC0+IHYgfCBOb25lIC0+IGludmFsaWRfYXJnIFwib3B0aW9uIGlzIE5vbmVcIlxubGV0IGJpbmQgbyBmID0gbWF0Y2ggbyB3aXRoIE5vbmUgLT4gTm9uZSB8IFNvbWUgdiAtPiBmIHZcbmxldCBqb2luID0gZnVuY3Rpb24gU29tZSBvIC0+IG8gfCBOb25lIC0+IE5vbmVcbmxldCBtYXAgZiBvID0gbWF0Y2ggbyB3aXRoIE5vbmUgLT4gTm9uZSB8IFNvbWUgdiAtPiBTb21lIChmIHYpXG5sZXQgZm9sZCB+bm9uZSB+c29tZSA9IGZ1bmN0aW9uIFNvbWUgdiAtPiBzb21lIHYgfCBOb25lIC0+IG5vbmVcbmxldCBpdGVyIGYgPSBmdW5jdGlvbiBTb21lIHYgLT4gZiB2IHwgTm9uZSAtPiAoKVxubGV0IGlzX25vbmUgPSBmdW5jdGlvbiBOb25lIC0+IHRydWUgfCBTb21lIF8gLT4gZmFsc2VcbmxldCBpc19zb21lID0gZnVuY3Rpb24gTm9uZSAtPiBmYWxzZSB8IFNvbWUgXyAtPiB0cnVlXG5cbmxldCBlcXVhbCBlcSBvMCBvMSA9IG1hdGNoIG8wLCBvMSB3aXRoXG58IFNvbWUgdjAsIFNvbWUgdjEgLT4gZXEgdjAgdjFcbnwgTm9uZSwgTm9uZSAtPiB0cnVlXG58IF8gLT4gZmFsc2VcblxubGV0IGNvbXBhcmUgY21wIG8wIG8xID0gbWF0Y2ggbzAsIG8xIHdpdGhcbnwgU29tZSB2MCwgU29tZSB2MSAtPiBjbXAgdjAgdjFcbnwgTm9uZSwgTm9uZSAtPiAwXG58IE5vbmUsIFNvbWUgXyAtPiAtMVxufCBTb21lIF8sIE5vbmUgLT4gMVxuXG5sZXQgdG9fcmVzdWx0IH5ub25lID0gZnVuY3Rpb24gTm9uZSAtPiBFcnJvciBub25lIHwgU29tZSB2IC0+IE9rIHZcbmxldCB0b19saXN0ID0gZnVuY3Rpb24gTm9uZSAtPiBbXSB8IFNvbWUgdiAtPiBbdl1cbmxldCB0b19zZXEgPSBmdW5jdGlvbiBOb25lIC0+IFNlcS5lbXB0eSB8IFNvbWUgdiAtPiBTZXEucmV0dXJuIHZcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgR2FicmllbCBTY2hlcmVyLCBwcm9qZXQgUGFyc2lmYWwsIElOUklBIFNhY2xheSAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMTkgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxudHlwZSAoJ2EsICdiKSB0ID0gTGVmdCBvZiAnYSB8IFJpZ2h0IG9mICdiXG5cbmxldCBsZWZ0IHYgPSBMZWZ0IHZcbmxldCByaWdodCB2ID0gUmlnaHQgdlxuXG5sZXQgaXNfbGVmdCA9IGZ1bmN0aW9uXG58IExlZnQgXyAtPiB0cnVlXG58IFJpZ2h0IF8gLT4gZmFsc2VcblxubGV0IGlzX3JpZ2h0ID0gZnVuY3Rpb25cbnwgTGVmdCBfIC0+IGZhbHNlXG58IFJpZ2h0IF8gLT4gdHJ1ZVxuXG5sZXQgZmluZF9sZWZ0ID0gZnVuY3Rpb25cbnwgTGVmdCB2IC0+IFNvbWUgdlxufCBSaWdodCBfIC0+IE5vbmVcblxubGV0IGZpbmRfcmlnaHQgPSBmdW5jdGlvblxufCBMZWZ0IF8gLT4gTm9uZVxufCBSaWdodCB2IC0+IFNvbWUgdlxuXG5sZXQgbWFwX2xlZnQgZiA9IGZ1bmN0aW9uXG58IExlZnQgdiAtPiBMZWZ0IChmIHYpXG58IFJpZ2h0IF8gYXMgZSAtPiBlXG5cbmxldCBtYXBfcmlnaHQgZiA9IGZ1bmN0aW9uXG58IExlZnQgXyBhcyBlIC0+IGVcbnwgUmlnaHQgdiAtPiBSaWdodCAoZiB2KVxuXG5sZXQgbWFwIH5sZWZ0IH5yaWdodCA9IGZ1bmN0aW9uXG58IExlZnQgdiAtPiBMZWZ0IChsZWZ0IHYpXG58IFJpZ2h0IHYgLT4gUmlnaHQgKHJpZ2h0IHYpXG5cbmxldCBmb2xkIH5sZWZ0IH5yaWdodCA9IGZ1bmN0aW9uXG58IExlZnQgdiAtPiBsZWZ0IHZcbnwgUmlnaHQgdiAtPiByaWdodCB2XG5cbmxldCBpdGVyID0gZm9sZFxuXG5sZXQgZm9yX2FsbCA9IGZvbGRcblxubGV0IGVxdWFsIH5sZWZ0IH5yaWdodCBlMSBlMiA9IG1hdGNoIGUxLCBlMiB3aXRoXG58IExlZnQgdjEsIExlZnQgdjIgLT4gbGVmdCB2MSB2MlxufCBSaWdodCB2MSwgUmlnaHQgdjIgLT4gcmlnaHQgdjEgdjJcbnwgTGVmdCBfLCBSaWdodCBfIHwgUmlnaHQgXywgTGVmdCBfIC0+IGZhbHNlXG5cbmxldCBjb21wYXJlIH5sZWZ0IH5yaWdodCBlMSBlMiA9IG1hdGNoIGUxLCBlMiB3aXRoXG58IExlZnQgdjEsIExlZnQgdjIgLT4gbGVmdCB2MSB2MlxufCBSaWdodCB2MSwgUmlnaHQgdjIgLT4gcmlnaHQgdjEgdjJcbnwgTGVmdCBfLCBSaWdodCBfIC0+ICgtMSlcbnwgUmlnaHQgXywgTGVmdCBfIC0+IDFcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBPQ2FtbCBwcm9ncmFtbWVycyAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMTggSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxudHlwZSAoJ2EsICdlKSB0ID0gKCdhLCAnZSkgcmVzdWx0ID0gT2sgb2YgJ2EgfCBFcnJvciBvZiAnZVxuXG5sZXQgb2sgdiA9IE9rIHZcbmxldCBlcnJvciBlID0gRXJyb3IgZVxubGV0IHZhbHVlIHIgfmRlZmF1bHQgPSBtYXRjaCByIHdpdGggT2sgdiAtPiB2IHwgRXJyb3IgXyAtPiBkZWZhdWx0XG5sZXQgZ2V0X29rID0gZnVuY3Rpb24gT2sgdiAtPiB2IHwgRXJyb3IgXyAtPiBpbnZhbGlkX2FyZyBcInJlc3VsdCBpcyBFcnJvciBfXCJcbmxldCBnZXRfZXJyb3IgPSBmdW5jdGlvbiBFcnJvciBlIC0+IGUgfCBPayBfIC0+IGludmFsaWRfYXJnIFwicmVzdWx0IGlzIE9rIF9cIlxubGV0IGJpbmQgciBmID0gbWF0Y2ggciB3aXRoIE9rIHYgLT4gZiB2IHwgRXJyb3IgXyBhcyBlIC0+IGVcbmxldCBqb2luID0gZnVuY3Rpb24gT2sgciAtPiByIHwgRXJyb3IgXyBhcyBlIC0+IGVcbmxldCBtYXAgZiA9IGZ1bmN0aW9uIE9rIHYgLT4gT2sgKGYgdikgfCBFcnJvciBfIGFzIGUgLT4gZVxubGV0IG1hcF9lcnJvciBmID0gZnVuY3Rpb24gRXJyb3IgZSAtPiBFcnJvciAoZiBlKSB8IE9rIF8gYXMgdiAtPiB2XG5sZXQgZm9sZCB+b2sgfmVycm9yID0gZnVuY3Rpb24gT2sgdiAtPiBvayB2IHwgRXJyb3IgZSAtPiBlcnJvciBlXG5sZXQgaXRlciBmID0gZnVuY3Rpb24gT2sgdiAtPiBmIHYgfCBFcnJvciBfIC0+ICgpXG5sZXQgaXRlcl9lcnJvciBmID0gZnVuY3Rpb24gRXJyb3IgZSAtPiBmIGUgfCBPayBfIC0+ICgpXG5sZXQgaXNfb2sgPSBmdW5jdGlvbiBPayBfIC0+IHRydWUgfCBFcnJvciBfIC0+IGZhbHNlXG5sZXQgaXNfZXJyb3IgPSBmdW5jdGlvbiBFcnJvciBfIC0+IHRydWUgfCBPayBfIC0+IGZhbHNlXG5cbmxldCBlcXVhbCB+b2sgfmVycm9yIHIwIHIxID0gbWF0Y2ggcjAsIHIxIHdpdGhcbnwgT2sgdjAsIE9rIHYxIC0+IG9rIHYwIHYxXG58IEVycm9yIGUwLCBFcnJvciBlMSAtPiBlcnJvciBlMCBlMVxufCBfLCBfIC0+IGZhbHNlXG5cbmxldCBjb21wYXJlIH5vayB+ZXJyb3IgcjAgcjEgPSBtYXRjaCByMCwgcjEgd2l0aFxufCBPayB2MCwgT2sgdjEgLT4gb2sgdjAgdjFcbnwgRXJyb3IgZTAsIEVycm9yIGUxIC0+IGVycm9yIGUwIGUxXG58IE9rIF8sIEVycm9yIF8gLT4gLTFcbnwgRXJyb3IgXywgT2sgXyAtPiAxXG5cbmxldCB0b19vcHRpb24gPSBmdW5jdGlvbiBPayB2IC0+IFNvbWUgdiB8IEVycm9yIF8gLT4gTm9uZVxubGV0IHRvX2xpc3QgPSBmdW5jdGlvbiBPayB2IC0+IFt2XSB8IEVycm9yIF8gLT4gW11cbmxldCB0b19zZXEgPSBmdW5jdGlvbiBPayB2IC0+IFNlcS5yZXR1cm4gdiB8IEVycm9yIF8gLT4gU2VxLmVtcHR5XG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgT0NhbWwgcHJvZ3JhbW1lcnMgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE4IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbnR5cGUgdCA9IGJvb2wgPSBmYWxzZSB8IHRydWVcblxuZXh0ZXJuYWwgbm90IDogYm9vbCAtPiBib29sID0gXCIlYm9vbG5vdFwiXG5leHRlcm5hbCAoICYmICkgOiBib29sIC0+IGJvb2wgLT4gYm9vbCA9IFwiJXNlcXVhbmRcIlxuZXh0ZXJuYWwgKCB8fCApIDogYm9vbCAtPiBib29sIC0+IGJvb2wgPSBcIiVzZXF1b3JcIlxubGV0IGVxdWFsIDogYm9vbCAtPiBib29sIC0+IGJvb2wgPSAoID0gKVxubGV0IGNvbXBhcmUgOiBib29sIC0+IGJvb2wgLT4gaW50ID0gU3RkbGliLmNvbXBhcmVcbmV4dGVybmFsIHRvX2ludCA6IGJvb2wgLT4gaW50ID0gXCIlaWRlbnRpdHlcIlxubGV0IHRvX2Zsb2F0ID0gZnVuY3Rpb24gZmFsc2UgLT4gMC4gfCB0cnVlIC0+IDEuXG5cbigqXG5sZXQgb2Zfc3RyaW5nID0gZnVuY3Rpb25cbnwgXCJmYWxzZVwiIC0+IFNvbWUgZmFsc2VcbnwgXCJ0cnVlXCIgLT4gU29tZSB0cnVlXG58IF8gLT4gTm9uZVxuKilcblxubGV0IHRvX3N0cmluZyA9IGZ1bmN0aW9uIGZhbHNlIC0+IFwiZmFsc2VcIiB8IHRydWUgLT4gXCJ0cnVlXCJcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogQ2hhcmFjdGVyIG9wZXJhdGlvbnMgKilcblxuZXh0ZXJuYWwgY29kZTogY2hhciAtPiBpbnQgPSBcIiVpZGVudGl0eVwiXG5leHRlcm5hbCB1bnNhZmVfY2hyOiBpbnQgLT4gY2hhciA9IFwiJWlkZW50aXR5XCJcblxubGV0IGNociBuID1cbiAgaWYgbiA8IDAgfHwgbiA+IDI1NSB0aGVuIGludmFsaWRfYXJnIFwiQ2hhci5jaHJcIiBlbHNlIHVuc2FmZV9jaHIgblxuXG5leHRlcm5hbCBieXRlc19jcmVhdGU6IGludCAtPiBieXRlcyA9IFwiY2FtbF9jcmVhdGVfYnl0ZXNcIlxuZXh0ZXJuYWwgYnl0ZXNfdW5zYWZlX3NldCA6IGJ5dGVzIC0+IGludCAtPiBjaGFyIC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCIlYnl0ZXNfdW5zYWZlX3NldFwiXG5leHRlcm5hbCB1bnNhZmVfdG9fc3RyaW5nIDogYnl0ZXMgLT4gc3RyaW5nID0gXCIlYnl0ZXNfdG9fc3RyaW5nXCJcblxubGV0IGVzY2FwZWQgPSBmdW5jdGlvblxuICB8ICdcXCcnIC0+IFwiXFxcXCdcIlxuICB8ICdcXFxcJyAtPiBcIlxcXFxcXFxcXCJcbiAgfCAnXFxuJyAtPiBcIlxcXFxuXCJcbiAgfCAnXFx0JyAtPiBcIlxcXFx0XCJcbiAgfCAnXFxyJyAtPiBcIlxcXFxyXCJcbiAgfCAnXFxiJyAtPiBcIlxcXFxiXCJcbiAgfCAnICcgLi4gJ34nIGFzIGMgLT5cbiAgICAgIGxldCBzID0gYnl0ZXNfY3JlYXRlIDEgaW5cbiAgICAgIGJ5dGVzX3Vuc2FmZV9zZXQgcyAwIGM7XG4gICAgICB1bnNhZmVfdG9fc3RyaW5nIHNcbiAgfCBjIC0+XG4gICAgICBsZXQgbiA9IGNvZGUgYyBpblxuICAgICAgbGV0IHMgPSBieXRlc19jcmVhdGUgNCBpblxuICAgICAgYnl0ZXNfdW5zYWZlX3NldCBzIDAgJ1xcXFwnO1xuICAgICAgYnl0ZXNfdW5zYWZlX3NldCBzIDEgKHVuc2FmZV9jaHIgKDQ4ICsgbiAvIDEwMCkpO1xuICAgICAgYnl0ZXNfdW5zYWZlX3NldCBzIDIgKHVuc2FmZV9jaHIgKDQ4ICsgKG4gLyAxMCkgbW9kIDEwKSk7XG4gICAgICBieXRlc191bnNhZmVfc2V0IHMgMyAodW5zYWZlX2NociAoNDggKyBuIG1vZCAxMCkpO1xuICAgICAgdW5zYWZlX3RvX3N0cmluZyBzXG5cbmxldCBsb3dlcmNhc2UgPSBmdW5jdGlvblxuICB8ICdBJyAuLiAnWidcbiAgfCAnXFwxOTInIC4uICdcXDIxNCdcbiAgfCAnXFwyMTYnIC4uICdcXDIyMicgYXMgYyAtPlxuICAgIHVuc2FmZV9jaHIoY29kZSBjICsgMzIpXG4gIHwgYyAtPiBjXG5cbmxldCB1cHBlcmNhc2UgPSBmdW5jdGlvblxuICB8ICdhJyAuLiAneidcbiAgfCAnXFwyMjQnIC4uICdcXDI0NidcbiAgfCAnXFwyNDgnIC4uICdcXDI1NCcgYXMgYyAtPlxuICAgIHVuc2FmZV9jaHIoY29kZSBjIC0gMzIpXG4gIHwgYyAtPiBjXG5cbmxldCBsb3dlcmNhc2VfYXNjaWkgPSBmdW5jdGlvblxuICB8ICdBJyAuLiAnWicgYXMgYyAtPiB1bnNhZmVfY2hyKGNvZGUgYyArIDMyKVxuICB8IGMgLT4gY1xuXG5sZXQgdXBwZXJjYXNlX2FzY2lpID0gZnVuY3Rpb25cbiAgfCAnYScgLi4gJ3onIGFzIGMgLT4gdW5zYWZlX2Nocihjb2RlIGMgLSAzMilcbiAgfCBjIC0+IGNcblxudHlwZSB0ID0gY2hhclxuXG5sZXQgY29tcGFyZSBjMSBjMiA9IGNvZGUgYzEgLSBjb2RlIGMyXG5sZXQgZXF1YWwgKGMxOiB0KSAoYzI6IHQpID0gY29tcGFyZSBjMSBjMiA9IDBcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogTW9kdWxlIFtOYXRpdmVpbnRdOiBwcm9jZXNzb3ItbmF0aXZlIGludGVnZXJzICopXG5cbmV4dGVybmFsIG5lZzogbmF0aXZlaW50IC0+IG5hdGl2ZWludCA9IFwiJW5hdGl2ZWludF9uZWdcIlxuZXh0ZXJuYWwgYWRkOiBuYXRpdmVpbnQgLT4gbmF0aXZlaW50IC0+IG5hdGl2ZWludCA9IFwiJW5hdGl2ZWludF9hZGRcIlxuZXh0ZXJuYWwgc3ViOiBuYXRpdmVpbnQgLT4gbmF0aXZlaW50IC0+IG5hdGl2ZWludCA9IFwiJW5hdGl2ZWludF9zdWJcIlxuZXh0ZXJuYWwgbXVsOiBuYXRpdmVpbnQgLT4gbmF0aXZlaW50IC0+IG5hdGl2ZWludCA9IFwiJW5hdGl2ZWludF9tdWxcIlxuZXh0ZXJuYWwgZGl2OiBuYXRpdmVpbnQgLT4gbmF0aXZlaW50IC0+IG5hdGl2ZWludCA9IFwiJW5hdGl2ZWludF9kaXZcIlxuZXh0ZXJuYWwgcmVtOiBuYXRpdmVpbnQgLT4gbmF0aXZlaW50IC0+IG5hdGl2ZWludCA9IFwiJW5hdGl2ZWludF9tb2RcIlxuZXh0ZXJuYWwgbG9nYW5kOiBuYXRpdmVpbnQgLT4gbmF0aXZlaW50IC0+IG5hdGl2ZWludCA9IFwiJW5hdGl2ZWludF9hbmRcIlxuZXh0ZXJuYWwgbG9nb3I6IG5hdGl2ZWludCAtPiBuYXRpdmVpbnQgLT4gbmF0aXZlaW50ID0gXCIlbmF0aXZlaW50X29yXCJcbmV4dGVybmFsIGxvZ3hvcjogbmF0aXZlaW50IC0+IG5hdGl2ZWludCAtPiBuYXRpdmVpbnQgPSBcIiVuYXRpdmVpbnRfeG9yXCJcbmV4dGVybmFsIHNoaWZ0X2xlZnQ6IG5hdGl2ZWludCAtPiBpbnQgLT4gbmF0aXZlaW50ID0gXCIlbmF0aXZlaW50X2xzbFwiXG5leHRlcm5hbCBzaGlmdF9yaWdodDogbmF0aXZlaW50IC0+IGludCAtPiBuYXRpdmVpbnQgPSBcIiVuYXRpdmVpbnRfYXNyXCJcbmV4dGVybmFsIHNoaWZ0X3JpZ2h0X2xvZ2ljYWw6IG5hdGl2ZWludCAtPiBpbnQgLT4gbmF0aXZlaW50ID0gXCIlbmF0aXZlaW50X2xzclwiXG5leHRlcm5hbCBvZl9pbnQ6IGludCAtPiBuYXRpdmVpbnQgPSBcIiVuYXRpdmVpbnRfb2ZfaW50XCJcbmV4dGVybmFsIHRvX2ludDogbmF0aXZlaW50IC0+IGludCA9IFwiJW5hdGl2ZWludF90b19pbnRcIlxuZXh0ZXJuYWwgb2ZfZmxvYXQgOiBmbG9hdCAtPiBuYXRpdmVpbnRcbiAgPSBcImNhbWxfbmF0aXZlaW50X29mX2Zsb2F0XCIgXCJjYW1sX25hdGl2ZWludF9vZl9mbG9hdF91bmJveGVkXCJcbiAgW0BAdW5ib3hlZF0gW0BAbm9hbGxvY11cbmV4dGVybmFsIHRvX2Zsb2F0IDogbmF0aXZlaW50IC0+IGZsb2F0XG4gID0gXCJjYW1sX25hdGl2ZWludF90b19mbG9hdFwiIFwiY2FtbF9uYXRpdmVpbnRfdG9fZmxvYXRfdW5ib3hlZFwiXG4gIFtAQHVuYm94ZWRdIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBvZl9pbnQzMjogaW50MzIgLT4gbmF0aXZlaW50ID0gXCIlbmF0aXZlaW50X29mX2ludDMyXCJcbmV4dGVybmFsIHRvX2ludDMyOiBuYXRpdmVpbnQgLT4gaW50MzIgPSBcIiVuYXRpdmVpbnRfdG9faW50MzJcIlxuXG5sZXQgemVybyA9IDBuXG5sZXQgb25lID0gMW5cbmxldCBtaW51c19vbmUgPSAtMW5cbmxldCBzdWNjIG4gPSBhZGQgbiAxblxubGV0IHByZWQgbiA9IHN1YiBuIDFuXG5sZXQgYWJzIG4gPSBpZiBuID49IDBuIHRoZW4gbiBlbHNlIG5lZyBuXG5sZXQgc2l6ZSA9IFN5cy53b3JkX3NpemVcbmxldCBtaW5faW50ID0gc2hpZnRfbGVmdCAxbiAoc2l6ZSAtIDEpXG5sZXQgbWF4X2ludCA9IHN1YiBtaW5faW50IDFuXG5sZXQgbG9nbm90IG4gPSBsb2d4b3IgbiAoLTFuKVxuXG5sZXQgdW5zaWduZWRfdG9faW50ID1cbiAgbGV0IG1heF9pbnQgPSBvZl9pbnQgU3RkbGliLm1heF9pbnQgaW5cbiAgZnVuIG4gLT5cbiAgICBpZiBjb21wYXJlIHplcm8gbiA8PSAwICYmIGNvbXBhcmUgbiBtYXhfaW50IDw9IDAgdGhlblxuICAgICAgU29tZSAodG9faW50IG4pXG4gICAgZWxzZVxuICAgICAgTm9uZVxuXG5leHRlcm5hbCBmb3JtYXQgOiBzdHJpbmcgLT4gbmF0aXZlaW50IC0+IHN0cmluZyA9IFwiY2FtbF9uYXRpdmVpbnRfZm9ybWF0XCJcbmxldCB0b19zdHJpbmcgbiA9IGZvcm1hdCBcIiVkXCIgblxuXG5leHRlcm5hbCBvZl9zdHJpbmc6IHN0cmluZyAtPiBuYXRpdmVpbnQgPSBcImNhbWxfbmF0aXZlaW50X29mX3N0cmluZ1wiXG5cbmxldCBvZl9zdHJpbmdfb3B0IHMgPVxuICAoKiBUT0RPOiBleHBvc2UgYSBub24tcmFpc2luZyBwcmltaXRpdmUgZGlyZWN0bHkuICopXG4gIHRyeSBTb21lIChvZl9zdHJpbmcgcylcbiAgd2l0aCBGYWlsdXJlIF8gLT4gTm9uZVxuXG50eXBlIHQgPSBuYXRpdmVpbnRcblxubGV0IGNvbXBhcmUgKHg6IHQpICh5OiB0KSA9IFN0ZGxpYi5jb21wYXJlIHggeVxubGV0IGVxdWFsICh4OiB0KSAoeTogdCkgPSBjb21wYXJlIHggeSA9IDBcblxubGV0IHVuc2lnbmVkX2NvbXBhcmUgbiBtID1cbiAgY29tcGFyZSAoc3ViIG4gbWluX2ludCkgKHN1YiBtIG1pbl9pbnQpXG5cbmxldCBtaW4geCB5IDogdCA9IGlmIHggPD0geSB0aGVuIHggZWxzZSB5XG5sZXQgbWF4IHggeSA6IHQgPSBpZiB4ID49IHkgdGhlbiB4IGVsc2UgeVxuXG4oKiBVbnNpZ25lZCBkaXZpc2lvbiBmcm9tIHNpZ25lZCBkaXZpc2lvbiBvZiB0aGUgc2FtZVxuICAgYml0bmVzcy4gU2VlIFdhcnJlbiBKci4sIEhlbnJ5IFMuICgyMDEzKS4gSGFja2VyJ3MgRGVsaWdodCAoMiBlZC4pLCBTZWMgOS0zLlxuKilcbmxldCB1bnNpZ25lZF9kaXYgbiBkID1cbiAgaWYgZCA8IHplcm8gdGhlblxuICAgIGlmIHVuc2lnbmVkX2NvbXBhcmUgbiBkIDwgMCB0aGVuIHplcm8gZWxzZSBvbmVcbiAgZWxzZVxuICAgIGxldCBxID0gc2hpZnRfbGVmdCAoZGl2IChzaGlmdF9yaWdodF9sb2dpY2FsIG4gMSkgZCkgMSBpblxuICAgIGxldCByID0gc3ViIG4gKG11bCBxIGQpIGluXG4gICAgaWYgdW5zaWduZWRfY29tcGFyZSByIGQgPj0gMCB0aGVuIHN1Y2MgcSBlbHNlIHFcblxubGV0IHVuc2lnbmVkX3JlbSBuIGQgPVxuICBzdWIgbiAobXVsICh1bnNpZ25lZF9kaXYgbiBkKSBkKVxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgVGhlIE9DYW1sIHByb2dyYW1tZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAxOCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG50eXBlIHQgPSBpbnRcblxubGV0IHplcm8gPSAwXG5sZXQgb25lID0gMVxubGV0IG1pbnVzX29uZSA9IC0xXG5leHRlcm5hbCBuZWcgOiBpbnQgLT4gaW50ID0gXCIlbmVnaW50XCJcbmV4dGVybmFsIGFkZCA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlYWRkaW50XCJcbmV4dGVybmFsIHN1YiA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlc3ViaW50XCJcbmV4dGVybmFsIG11bCA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlbXVsaW50XCJcbmV4dGVybmFsIGRpdiA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlZGl2aW50XCJcbmV4dGVybmFsIHJlbSA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlbW9kaW50XCJcbmV4dGVybmFsIHN1Y2MgOiBpbnQgLT4gaW50ID0gXCIlc3VjY2ludFwiXG5leHRlcm5hbCBwcmVkIDogaW50IC0+IGludCA9IFwiJXByZWRpbnRcIlxubGV0IGFicyB4ID0gaWYgeCA+PSAwIHRoZW4geCBlbHNlIC14XG5sZXQgbWF4X2ludCA9ICgtMSkgbHNyIDFcbmxldCBtaW5faW50ID0gbWF4X2ludCArIDFcbmV4dGVybmFsIGxvZ2FuZCA6IGludCAtPiBpbnQgLT4gaW50ID0gXCIlYW5kaW50XCJcbmV4dGVybmFsIGxvZ29yIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVvcmludFwiXG5leHRlcm5hbCBsb2d4b3IgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJXhvcmludFwiXG5sZXQgbG9nbm90IHggPSBsb2d4b3IgeCAoLTEpXG5leHRlcm5hbCBzaGlmdF9sZWZ0IDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVsc2xpbnRcIlxuZXh0ZXJuYWwgc2hpZnRfcmlnaHQgOiBpbnQgLT4gaW50IC0+IGludCA9IFwiJWFzcmludFwiXG5leHRlcm5hbCBzaGlmdF9yaWdodF9sb2dpY2FsIDogaW50IC0+IGludCAtPiBpbnQgPSBcIiVsc3JpbnRcIlxubGV0IGVxdWFsIDogaW50IC0+IGludCAtPiBib29sID0gKCA9IClcbmxldCBjb21wYXJlIDogaW50IC0+IGludCAtPiBpbnQgPSBTdGRsaWIuY29tcGFyZVxubGV0IG1pbiB4IHkgOiB0ID0gaWYgeCA8PSB5IHRoZW4geCBlbHNlIHlcbmxldCBtYXggeCB5IDogdCA9IGlmIHggPj0geSB0aGVuIHggZWxzZSB5XG5leHRlcm5hbCB0b19mbG9hdCA6IGludCAtPiBmbG9hdCA9IFwiJWZsb2F0b2ZpbnRcIlxuZXh0ZXJuYWwgb2ZfZmxvYXQgOiBmbG9hdCAtPiBpbnQgPSBcIiVpbnRvZmZsb2F0XCJcblxuKCpcbmV4dGVybmFsIGludF9vZl9zdHJpbmcgOiBzdHJpbmcgLT4gaW50ID0gXCJjYW1sX2ludF9vZl9zdHJpbmdcIlxubGV0IG9mX3N0cmluZyBzID0gdHJ5IFNvbWUgKGludF9vZl9zdHJpbmcgcykgd2l0aCBGYWlsdXJlIF8gLT4gTm9uZVxuKilcblxuZXh0ZXJuYWwgZm9ybWF0X2ludCA6IHN0cmluZyAtPiBpbnQgLT4gc3RyaW5nID0gXCJjYW1sX2Zvcm1hdF9pbnRcIlxubGV0IHRvX3N0cmluZyB4ID0gZm9ybWF0X2ludCBcIiVkXCIgeFxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBCeXRlIHNlcXVlbmNlIG9wZXJhdGlvbnMgKilcblxuKCogV0FSTklORzogU29tZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlIGFyZSBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCBmb3JcbiAgIGVmZmljaWVuY3kgcmVhc29ucy4gV2hlbiB5b3UgbW9kaWZ5IHRoZSBvbmUgaW4gdGhpcyBmaWxlIHlvdSBuZWVkIHRvXG4gICBtb2RpZnkgaXRzIGR1cGxpY2F0ZSBpbiBzdHJpbmcubWwuXG4gICBUaGVzZSBmdW5jdGlvbnMgaGF2ZSBhIFwiZHVwbGljYXRlZFwiIGNvbW1lbnQgYWJvdmUgdGhlaXIgZGVmaW5pdGlvbi5cbiopXG5cbmV4dGVybmFsIGxlbmd0aCA6IGJ5dGVzIC0+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+PSBsZW5ndGggcyB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcucmluZGV4X2Zyb20gLyBCeXRlcy5yaW5kZXhfZnJvbVwiXG4gIGVsc2VcbiAgICByaW5kZXhfcmVjIHMgaSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5sZXQgcmVjIHJpbmRleF9yZWNfb3B0IHMgaSBjID1cbiAgaWYgaSA8IDAgdGhlbiBOb25lIGVsc2VcbiAgaWYgdW5zYWZlX2dldCBzIGkgPSBjIHRoZW4gU29tZSBpIGVsc2UgcmluZGV4X3JlY19vcHQgcyAoaSAtIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCByaW5kZXhfb3B0IHMgYyA9IHJpbmRleF9yZWNfb3B0IHMgKGxlbmd0aCBzIC0gMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IHJpbmRleF9mcm9tX29wdCBzIGkgYyA9XG4gIGlmIGkgPCAtMSB8fCBpID49IGxlbmd0aCBzIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5yaW5kZXhfZnJvbV9vcHQgLyBCeXRlcy5yaW5kZXhfZnJvbV9vcHRcIlxuICBlbHNlXG4gICAgcmluZGV4X3JlY19vcHQgcyBpIGNcblxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGNvbnRhaW5zX2Zyb20gcyBpIGMgPVxuICBsZXQgbCA9IGxlbmd0aCBzIGluXG4gIGlmIGkgPCAwIHx8IGkgPiBsIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5jb250YWluc19mcm9tIC8gQnl0ZXMuY29udGFpbnNfZnJvbVwiXG4gIGVsc2VcbiAgICB0cnkgaWdub3JlIChpbmRleF9yZWMgcyBsIGkgYyk7IHRydWUgd2l0aCBOb3RfZm91bmQgLT4gZmFsc2VcblxuXG4oKiBkdXBsaWNhdGVkIGluIHN0cmluZy5tbCAqKVxubGV0IGNvbnRhaW5zIHMgYyA9IGNvbnRhaW5zX2Zyb20gcyAwIGNcblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCByY29udGFpbnNfZnJvbSBzIGkgYyA9XG4gIGlmIGkgPCAwIHx8IGkgPj0gbGVuZ3RoIHMgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLnJjb250YWluc19mcm9tIC8gQnl0ZXMucmNvbnRhaW5zX2Zyb21cIlxuICBlbHNlXG4gICAgdHJ5IGlnbm9yZSAocmluZGV4X3JlYyBzIGkgYyk7IHRydWUgd2l0aCBOb3RfZm91bmQgLT4gZmFsc2VcblxuXG50eXBlIHQgPSBieXRlc1xuXG5sZXQgY29tcGFyZSAoeDogdCkgKHk6IHQpID0gU3RkbGliLmNvbXBhcmUgeCB5XG5leHRlcm5hbCBlcXVhbCA6IHQgLT4gdCAtPiBib29sID0gXCJjYW1sX2J5dGVzX2VxdWFsXCIgW0BAbm9hbGxvY11cblxuKCogZHVwbGljYXRlZCBpbiBzdHJpbmcubWwgKilcbmxldCBzcGxpdF9vbl9jaGFyIHNlcCBzID1cbiAgbGV0IHIgPSByZWYgW10gaW5cbiAgbGV0IGogPSByZWYgKGxlbmd0aCBzKSBpblxuICBmb3IgaSA9IGxlbmd0aCBzIC0gMSBkb3dudG8gMCBkb1xuICAgIGlmIHVuc2FmZV9nZXQgcyBpID0gc2VwIHRoZW4gYmVnaW5cbiAgICAgIHIgOj0gc3ViIHMgKGkgKyAxKSAoIWogLSBpIC0gMSkgOjogIXI7XG4gICAgICBqIDo9IGlcbiAgICBlbmRcbiAgZG9uZTtcbiAgc3ViIHMgMCAhaiA6OiAhclxuXG4oKiBEZXByZWNhdGVkIGZ1bmN0aW9ucyBpbXBsZW1lbnRlZCB2aWEgb3RoZXIgZGVwcmVjYXRlZCBmdW5jdGlvbnMgKilcbltAQEBvY2FtbC53YXJuaW5nIFwiLTNcIl1cbmxldCB1cHBlcmNhc2UgcyA9IG1hcCBDaGFyLnVwcGVyY2FzZSBzXG5sZXQgbG93ZXJjYXNlIHMgPSBtYXAgQ2hhci5sb3dlcmNhc2Ugc1xuXG5sZXQgY2FwaXRhbGl6ZSBzID0gYXBwbHkxIENoYXIudXBwZXJjYXNlIHNcbmxldCB1bmNhcGl0YWxpemUgcyA9IGFwcGx5MSBDaGFyLmxvd2VyY2FzZSBzXG5cbigqKiB7MSBJdGVyYXRvcnN9ICopXG5cbmxldCB0b19zZXEgcyA9XG4gIGxldCByZWMgYXV4IGkgKCkgPVxuICAgIGlmIGkgPSBsZW5ndGggcyB0aGVuIFNlcS5OaWxcbiAgICBlbHNlXG4gICAgICBsZXQgeCA9IGdldCBzIGkgaW5cbiAgICAgIFNlcS5Db25zICh4LCBhdXggKGkrMSkpXG4gIGluXG4gIGF1eCAwXG5cbmxldCB0b19zZXFpIHMgPVxuICBsZXQgcmVjIGF1eCBpICgpID1cbiAgICBpZiBpID0gbGVuZ3RoIHMgdGhlbiBTZXEuTmlsXG4gICAgZWxzZVxuICAgICAgbGV0IHggPSBnZXQgcyBpIGluXG4gICAgICBTZXEuQ29ucyAoKGkseCksIGF1eCAoaSsxKSlcbiAgaW5cbiAgYXV4IDBcblxubGV0IG9mX3NlcSBpID1cbiAgbGV0IG4gPSByZWYgMCBpblxuICBsZXQgYnVmID0gcmVmIChtYWtlIDI1NiAnXFwwMDAnKSBpblxuICBsZXQgcmVzaXplICgpID1cbiAgICAoKiByZXNpemUgKilcbiAgICBsZXQgbmV3X2xlbiA9IEludC5taW4gKDIgKiBsZW5ndGggIWJ1ZikgU3lzLm1heF9zdHJpbmdfbGVuZ3RoIGluXG4gICAgaWYgbGVuZ3RoICFidWYgPSBuZXdfbGVuIHRoZW4gZmFpbHdpdGggXCJCeXRlcy5vZl9zZXE6IGNhbm5vdCBncm93IGJ5dGVzXCI7XG4gICAgbGV0IG5ld19idWYgPSBtYWtlIG5ld19sZW4gJ1xcMDAwJyBpblxuICAgIGJsaXQgIWJ1ZiAwIG5ld19idWYgMCAhbjtcbiAgICBidWYgOj0gbmV3X2J1ZlxuICBpblxuICBTZXEuaXRlclxuICAgIChmdW4gYyAtPlxuICAgICAgIGlmICFuID0gbGVuZ3RoICFidWYgdGhlbiByZXNpemUoKTtcbiAgICAgICBzZXQgIWJ1ZiAhbiBjO1xuICAgICAgIGluY3IgbilcbiAgICBpO1xuICBzdWIgIWJ1ZiAwICFuXG5cbigqKiB7NiBCaW5hcnkgZW5jb2RpbmcvZGVjb2Rpbmcgb2YgaW50ZWdlcnN9ICopXG5cbigqIFRoZSBnZXRfIGZ1bmN0aW9ucyBhcmUgYWxsIGR1cGxpY2F0ZWQgaW4gc3RyaW5nLm1sICopXG5cbmV4dGVybmFsIGdldF91aW50OCA6IGJ5dGVzIC0+IGludCAtPiBpbnQgPSBcIiVieXRlc19zYWZlX2dldFwiXG5leHRlcm5hbCBnZXRfdWludDE2X25lIDogYnl0ZXMgLT4gaW50IC0+IGludCA9IFwiJWNhbWxfYnl0ZXNfZ2V0MTZcIlxuZXh0ZXJuYWwgZ2V0X2ludDMyX25lIDogYnl0ZXMgLT4gaW50IC0+IGludDMyID0gXCIlY2FtbF9ieXRlc19nZXQzMlwiXG5leHRlcm5hbCBnZXRfaW50NjRfbmUgOiBieXRlcyAtPiBpbnQgLT4gaW50NjQgPSBcIiVjYW1sX2J5dGVzX2dldDY0XCJcbmV4dGVybmFsIHNldF9pbnQ4IDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0ID0gXCIlYnl0ZXNfc2FmZV9zZXRcIlxuZXh0ZXJuYWwgc2V0X2ludDE2X25lIDogYnl0ZXMgLT4gaW50IC0+IGludCAtPiB1bml0ID0gXCIlY2FtbF9ieXRlc19zZXQxNlwiXG5leHRlcm5hbCBzZXRfaW50MzJfbmUgOiBieXRlcyAtPiBpbnQgLT4gaW50MzIgLT4gdW5pdCA9IFwiJWNhbWxfYnl0ZXNfc2V0MzJcIlxuZXh0ZXJuYWwgc2V0X2ludDY0X25lIDogYnl0ZXMgLT4gaW50IC0+IGludDY0IC0+IHVuaXQgPSBcIiVjYW1sX2J5dGVzX3NldDY0XCJcbmV4dGVybmFsIHN3YXAxNiA6IGludCAtPiBpbnQgPSBcIiVic3dhcDE2XCJcbmV4dGVybmFsIHN3YXAzMiA6IGludDMyIC0+IGludDMyID0gXCIlYnN3YXBfaW50MzJcIlxuZXh0ZXJuYWwgc3dhcDY0IDogaW50NjQgLT4gaW50NjQgPSBcIiVic3dhcF9pbnQ2NFwiXG5cbmxldCBnZXRfaW50OCBiIGkgPVxuICAoKGdldF91aW50OCBiIGkpIGxzbCAoU3lzLmludF9zaXplIC0gOCkpIGFzciAoU3lzLmludF9zaXplIC0gOClcblxubGV0IGdldF91aW50MTZfbGUgYiBpID1cbiAgaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiBzd2FwMTYgKGdldF91aW50MTZfbmUgYiBpKVxuICBlbHNlIGdldF91aW50MTZfbmUgYiBpXG5cbmxldCBnZXRfdWludDE2X2JlIGIgaSA9XG4gIGlmIG5vdCBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXAxNiAoZ2V0X3VpbnQxNl9uZSBiIGkpXG4gIGVsc2UgZ2V0X3VpbnQxNl9uZSBiIGlcblxubGV0IGdldF9pbnQxNl9uZSBiIGkgPVxuICAoKGdldF91aW50MTZfbmUgYiBpKSBsc2wgKFN5cy5pbnRfc2l6ZSAtIDE2KSkgYXNyIChTeXMuaW50X3NpemUgLSAxNilcblxubGV0IGdldF9pbnQxNl9sZSBiIGkgPVxuICAoKGdldF91aW50MTZfbGUgYiBpKSBsc2wgKFN5cy5pbnRfc2l6ZSAtIDE2KSkgYXNyIChTeXMuaW50X3NpemUgLSAxNilcblxubGV0IGdldF9pbnQxNl9iZSBiIGkgPVxuICAoKGdldF91aW50MTZfYmUgYiBpKSBsc2wgKFN5cy5pbnRfc2l6ZSAtIDE2KSkgYXNyIChTeXMuaW50X3NpemUgLSAxNilcblxubGV0IGdldF9pbnQzMl9sZSBiIGkgPVxuICBpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXAzMiAoZ2V0X2ludDMyX25lIGIgaSlcbiAgZWxzZSBnZXRfaW50MzJfbmUgYiBpXG5cbmxldCBnZXRfaW50MzJfYmUgYiBpID1cbiAgaWYgbm90IFN5cy5iaWdfZW5kaWFuIHRoZW4gc3dhcDMyIChnZXRfaW50MzJfbmUgYiBpKVxuICBlbHNlIGdldF9pbnQzMl9uZSBiIGlcblxubGV0IGdldF9pbnQ2NF9sZSBiIGkgPVxuICBpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXA2NCAoZ2V0X2ludDY0X25lIGIgaSlcbiAgZWxzZSBnZXRfaW50NjRfbmUgYiBpXG5cbmxldCBnZXRfaW50NjRfYmUgYiBpID1cbiAgaWYgbm90IFN5cy5iaWdfZW5kaWFuIHRoZW4gc3dhcDY0IChnZXRfaW50NjRfbmUgYiBpKVxuICBlbHNlIGdldF9pbnQ2NF9uZSBiIGlcblxubGV0IHNldF9pbnQxNl9sZSBiIGkgeCA9XG4gIGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4gc2V0X2ludDE2X25lIGIgaSAoc3dhcDE2IHgpXG4gIGVsc2Ugc2V0X2ludDE2X25lIGIgaSB4XG5cbmxldCBzZXRfaW50MTZfYmUgYiBpIHggPVxuICBpZiBub3QgU3lzLmJpZ19lbmRpYW4gdGhlbiBzZXRfaW50MTZfbmUgYiBpIChzd2FwMTYgeClcbiAgZWxzZSBzZXRfaW50MTZfbmUgYiBpIHhcblxubGV0IHNldF9pbnQzMl9sZSBiIGkgeCA9XG4gIGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4gc2V0X2ludDMyX25lIGIgaSAoc3dhcDMyIHgpXG4gIGVsc2Ugc2V0X2ludDMyX25lIGIgaSB4XG5cbmxldCBzZXRfaW50MzJfYmUgYiBpIHggPVxuICBpZiBub3QgU3lzLmJpZ19lbmRpYW4gdGhlbiBzZXRfaW50MzJfbmUgYiBpIChzd2FwMzIgeClcbiAgZWxzZSBzZXRfaW50MzJfbmUgYiBpIHhcblxubGV0IHNldF9pbnQ2NF9sZSBiIGkgeCA9XG4gIGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4gc2V0X2ludDY0X25lIGIgaSAoc3dhcDY0IHgpXG4gIGVsc2Ugc2V0X2ludDY0X25lIGIgaSB4XG5cbmxldCBzZXRfaW50NjRfYmUgYiBpIHggPVxuICBpZiBub3QgU3lzLmJpZ19lbmRpYW4gdGhlbiBzZXRfaW50NjRfbmUgYiBpIChzd2FwNjQgeClcbiAgZWxzZSBzZXRfaW50NjRfbmUgYiBpIHhcblxubGV0IHNldF91aW50OCA9IHNldF9pbnQ4XG5sZXQgc2V0X3VpbnQxNl9uZSA9IHNldF9pbnQxNl9uZVxubGV0IHNldF91aW50MTZfYmUgPSBzZXRfaW50MTZfYmVcbmxldCBzZXRfdWludDE2X2xlID0gc2V0X2ludDE2X2xlXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgRGFtaWVuIERvbGlnZXosIHByb2pldCBHYWxsaXVtLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE0IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIFN0cmluZyBvcGVyYXRpb25zLCBiYXNlZCBvbiBieXRlIHNlcXVlbmNlIG9wZXJhdGlvbnMgKilcblxuKCogV0FSTklORzogU29tZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlIGFyZSBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sIGZvclxuICAgZWZmaWNpZW5jeSByZWFzb25zLiBXaGVuIHlvdSBtb2RpZnkgdGhlIG9uZSBpbiB0aGlzIGZpbGUgeW91IG5lZWQgdG9cbiAgIG1vZGlmeSBpdHMgZHVwbGljYXRlIGluIGJ5dGVzLm1sLlxuICAgVGhlc2UgZnVuY3Rpb25zIGhhdmUgYSBcImR1cGxpY2F0ZWRcIiBjb21tZW50IGFib3ZlIHRoZWlyIGRlZmluaXRpb24uXG4qKVxuXG5leHRlcm5hbCBsZW5ndGggOiBzdHJpbmcgLT4gaW50ID0gXCIlc3RyaW5nX2xlbmd0aFwiXG5leHRlcm5hbCBnZXQgOiBzdHJpbmcgLT4gaW50IC0+IGNoYXIgPSBcIiVzdHJpbmdfc2FmZV9nZXRcIlxuZXh0ZXJuYWwgc2V0IDogYnl0ZXMgLT4gaW50IC0+IGNoYXIgLT4gdW5pdCA9IFwiJXN0cmluZ19zYWZlX3NldFwiXG5leHRlcm5hbCBjcmVhdGUgOiBpbnQgLT4gYnl0ZXMgPSBcImNhbWxfY3JlYXRlX3N0cmluZ1wiXG5leHRlcm5hbCB1bnNhZmVfZ2V0IDogc3RyaW5nIC0+IGludCAtPiBjaGFyID0gXCIlc3RyaW5nX3Vuc2FmZV9nZXRcIlxuZXh0ZXJuYWwgdW5zYWZlX3NldCA6IGJ5dGVzIC0+IGludCAtPiBjaGFyIC0+IHVuaXQgPSBcIiVzdHJpbmdfdW5zYWZlX3NldFwiXG5leHRlcm5hbCB1bnNhZmVfYmxpdCA6IHN0cmluZyAtPiBpbnQgLT4gIGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfYmxpdF9zdHJpbmdcIiBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgdW5zYWZlX2ZpbGwgOiBieXRlcyAtPiBpbnQgLT4gaW50IC0+IGNoYXIgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfZmlsbF9zdHJpbmdcIiBbQEBub2FsbG9jXVxuXG5tb2R1bGUgQiA9IEJ5dGVzXG5cbmxldCBidHMgPSBCLnVuc2FmZV90b19zdHJpbmdcbmxldCBib3MgPSBCLnVuc2FmZV9vZl9zdHJpbmdcblxubGV0IG1ha2UgbiBjID1cbiAgQi5tYWtlIG4gYyB8PiBidHNcbmxldCBpbml0IG4gZiA9XG4gIEIuaW5pdCBuIGYgfD4gYnRzXG5sZXQgZW1wdHkgPSBcIlwiXG5sZXQgY29weSBzID1cbiAgQi5jb3B5IChib3MgcykgfD4gYnRzXG5sZXQgb2ZfYnl0ZXMgPSBCLnRvX3N0cmluZ1xubGV0IHRvX2J5dGVzID0gQi5vZl9zdHJpbmdcbmxldCBzdWIgcyBvZnMgbGVuID1cbiAgQi5zdWIgKGJvcyBzKSBvZnMgbGVuIHw+IGJ0c1xubGV0IGZpbGwgPVxuICBCLmZpbGxcbmxldCBibGl0ID1cbiAgQi5ibGl0X3N0cmluZ1xuXG5sZXQgZW5zdXJlX2dlICh4OmludCkgeSA9IGlmIHggPj0geSB0aGVuIHggZWxzZSBpbnZhbGlkX2FyZyBcIlN0cmluZy5jb25jYXRcIlxuXG5sZXQgcmVjIHN1bV9sZW5ndGhzIGFjYyBzZXBsZW4gPSBmdW5jdGlvblxuICB8IFtdIC0+IGFjY1xuICB8IGhkIDo6IFtdIC0+IGxlbmd0aCBoZCArIGFjY1xuICB8IGhkIDo6IHRsIC0+IHN1bV9sZW5ndGhzIChlbnN1cmVfZ2UgKGxlbmd0aCBoZCArIHNlcGxlbiArIGFjYykgYWNjKSBzZXBsZW4gdGxcblxubGV0IHJlYyB1bnNhZmVfYmxpdHMgZHN0IHBvcyBzZXAgc2VwbGVuID0gZnVuY3Rpb25cbiAgICBbXSAtPiBkc3RcbiAgfCBoZCA6OiBbXSAtPlxuICAgIHVuc2FmZV9ibGl0IGhkIDAgZHN0IHBvcyAobGVuZ3RoIGhkKTsgZHN0XG4gIHwgaGQgOjogdGwgLT5cbiAgICB1bnNhZmVfYmxpdCBoZCAwIGRzdCBwb3MgKGxlbmd0aCBoZCk7XG4gICAgdW5zYWZlX2JsaXQgc2VwIDAgZHN0IChwb3MgKyBsZW5ndGggaGQpIHNlcGxlbjtcbiAgICB1bnNhZmVfYmxpdHMgZHN0IChwb3MgKyBsZW5ndGggaGQgKyBzZXBsZW4pIHNlcCBzZXBsZW4gdGxcblxubGV0IGNvbmNhdCBzZXAgPSBmdW5jdGlvblxuICAgIFtdIC0+IFwiXCJcbiAgfCBsIC0+IGxldCBzZXBsZW4gPSBsZW5ndGggc2VwIGluIGJ0cyBAQFxuICAgICAgICAgIHVuc2FmZV9ibGl0c1xuICAgICAgICAgICAgKEIuY3JlYXRlIChzdW1fbGVuZ3RocyAwIHNlcGxlbiBsKSlcbiAgICAgICAgICAgIDAgc2VwIHNlcGxlbiBsXG5cbmxldCBjYXQgPSAoIF4gKVxuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgaXRlciBmIHMgPVxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIHMgLSAxIGRvIGYgKHVuc2FmZV9nZXQgcyBpKSBkb25lXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBpdGVyaSBmIHMgPVxuICBmb3IgaSA9IDAgdG8gbGVuZ3RoIHMgLSAxIGRvIGYgaSAodW5zYWZlX2dldCBzIGkpIGRvbmVcblxubGV0IG1hcCBmIHMgPVxuICBCLm1hcCBmIChib3MgcykgfD4gYnRzXG5sZXQgbWFwaSBmIHMgPVxuICBCLm1hcGkgZiAoYm9zIHMpIHw+IGJ0c1xubGV0IGZvbGRfcmlnaHQgZiB4IGEgPVxuICBCLmZvbGRfcmlnaHQgZiAoYm9zIHgpIGFcbmxldCBmb2xkX2xlZnQgZiBhIHggPVxuICBCLmZvbGRfbGVmdCBmIGEgKGJvcyB4KVxubGV0IGV4aXN0cyBmIHMgPVxuICBCLmV4aXN0cyBmIChib3MgcylcbmxldCBmb3JfYWxsIGYgcyA9XG4gIEIuZm9yX2FsbCBmIChib3MgcylcblxuKCogQmV3YXJlOiB3ZSBjYW5ub3QgdXNlIEIudHJpbSBvciBCLmVzY2FwZSBiZWNhdXNlIHRoZXkgYWx3YXlzIG1ha2UgYVxuICAgY29weSwgYnV0IFN0cmluZy5tbGkgc3BlbGxzIG91dCBzb21lIGNhc2VzIHdoZXJlIHdlIGFyZSBub3QgYWxsb3dlZFxuICAgdG8gbWFrZSBhIGNvcHkuICopXG5cbmxldCBpc19zcGFjZSA9IGZ1bmN0aW9uXG4gIHwgJyAnIHwgJ1xcMDEyJyB8ICdcXG4nIHwgJ1xccicgfCAnXFx0JyAtPiB0cnVlXG4gIHwgXyAtPiBmYWxzZVxuXG5sZXQgdHJpbSBzID1cbiAgaWYgcyA9IFwiXCIgdGhlbiBzXG4gIGVsc2UgaWYgaXNfc3BhY2UgKHVuc2FmZV9nZXQgcyAwKSB8fCBpc19zcGFjZSAodW5zYWZlX2dldCBzIChsZW5ndGggcyAtIDEpKVxuICAgIHRoZW4gYnRzIChCLnRyaW0gKGJvcyBzKSlcbiAgZWxzZSBzXG5cbmxldCBlc2NhcGVkIHMgPVxuICBsZXQgcmVjIGVzY2FwZV9pZl9uZWVkZWQgcyBuIGkgPVxuICAgIGlmIGkgPj0gbiB0aGVuIHMgZWxzZVxuICAgICAgbWF0Y2ggdW5zYWZlX2dldCBzIGkgd2l0aFxuICAgICAgfCAnXFxcIicgfCAnXFxcXCcgfCAnXFwwMDAnLi4nXFwwMzEnIHwgJ1xcMTI3Jy4uICdcXDI1NScgLT5cbiAgICAgICAgICBidHMgKEIuZXNjYXBlZCAoYm9zIHMpKVxuICAgICAgfCBfIC0+IGVzY2FwZV9pZl9uZWVkZWQgcyBuIChpKzEpXG4gIGluXG4gIGVzY2FwZV9pZl9uZWVkZWQgcyAobGVuZ3RoIHMpIDBcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJlYyBpbmRleF9yZWMgcyBsaW0gaSBjID1cbiAgaWYgaSA+PSBsaW0gdGhlbiByYWlzZSBOb3RfZm91bmQgZWxzZVxuICBpZiB1bnNhZmVfZ2V0IHMgaSA9IGMgdGhlbiBpIGVsc2UgaW5kZXhfcmVjIHMgbGltIChpICsgMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgaW5kZXggcyBjID0gaW5kZXhfcmVjIHMgKGxlbmd0aCBzKSAwIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJlYyBpbmRleF9yZWNfb3B0IHMgbGltIGkgYyA9XG4gIGlmIGkgPj0gbGltIHRoZW4gTm9uZSBlbHNlXG4gIGlmIHVuc2FmZV9nZXQgcyBpID0gYyB0aGVuIFNvbWUgaSBlbHNlIGluZGV4X3JlY19vcHQgcyBsaW0gKGkgKyAxKSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBpbmRleF9vcHQgcyBjID0gaW5kZXhfcmVjX29wdCBzIChsZW5ndGggcykgMCBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBpbmRleF9mcm9tIHMgaSBjID1cbiAgbGV0IGwgPSBsZW5ndGggcyBpblxuICBpZiBpIDwgMCB8fCBpID4gbCB0aGVuIGludmFsaWRfYXJnIFwiU3RyaW5nLmluZGV4X2Zyb20gLyBCeXRlcy5pbmRleF9mcm9tXCIgZWxzZVxuICAgIGluZGV4X3JlYyBzIGwgaSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBpbmRleF9mcm9tX29wdCBzIGkgYyA9XG4gIGxldCBsID0gbGVuZ3RoIHMgaW5cbiAgaWYgaSA8IDAgfHwgaSA+IGwgdGhlblxuICAgIGludmFsaWRfYXJnIFwiU3RyaW5nLmluZGV4X2Zyb21fb3B0IC8gQnl0ZXMuaW5kZXhfZnJvbV9vcHRcIlxuICBlbHNlXG4gICAgaW5kZXhfcmVjX29wdCBzIGwgaSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByZWMgcmluZGV4X3JlYyBzIGkgYyA9XG4gIGlmIGkgPCAwIHRoZW4gcmFpc2UgTm90X2ZvdW5kIGVsc2VcbiAgaWYgdW5zYWZlX2dldCBzIGkgPSBjIHRoZW4gaSBlbHNlIHJpbmRleF9yZWMgcyAoaSAtIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJpbmRleCBzIGMgPSByaW5kZXhfcmVjIHMgKGxlbmd0aCBzIC0gMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgcmluZGV4X2Zyb20gcyBpIGMgPVxuICBpZiBpIDwgLTEgfHwgaSA+PSBsZW5ndGggcyB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcucmluZGV4X2Zyb20gLyBCeXRlcy5yaW5kZXhfZnJvbVwiXG4gIGVsc2VcbiAgICByaW5kZXhfcmVjIHMgaSBjXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCByZWMgcmluZGV4X3JlY19vcHQgcyBpIGMgPVxuICBpZiBpIDwgMCB0aGVuIE5vbmUgZWxzZVxuICBpZiB1bnNhZmVfZ2V0IHMgaSA9IGMgdGhlbiBTb21lIGkgZWxzZSByaW5kZXhfcmVjX29wdCBzIChpIC0gMSkgY1xuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgcmluZGV4X29wdCBzIGMgPSByaW5kZXhfcmVjX29wdCBzIChsZW5ndGggcyAtIDEpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJpbmRleF9mcm9tX29wdCBzIGkgYyA9XG4gIGlmIGkgPCAtMSB8fCBpID49IGxlbmd0aCBzIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5yaW5kZXhfZnJvbV9vcHQgLyBCeXRlcy5yaW5kZXhfZnJvbV9vcHRcIlxuICBlbHNlXG4gICAgcmluZGV4X3JlY19vcHQgcyBpIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IGNvbnRhaW5zX2Zyb20gcyBpIGMgPVxuICBsZXQgbCA9IGxlbmd0aCBzIGluXG4gIGlmIGkgPCAwIHx8IGkgPiBsIHRoZW5cbiAgICBpbnZhbGlkX2FyZyBcIlN0cmluZy5jb250YWluc19mcm9tIC8gQnl0ZXMuY29udGFpbnNfZnJvbVwiXG4gIGVsc2VcbiAgICB0cnkgaWdub3JlIChpbmRleF9yZWMgcyBsIGkgYyk7IHRydWUgd2l0aCBOb3RfZm91bmQgLT4gZmFsc2VcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IGNvbnRhaW5zIHMgYyA9IGNvbnRhaW5zX2Zyb20gcyAwIGNcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IHJjb250YWluc19mcm9tIHMgaSBjID1cbiAgaWYgaSA8IDAgfHwgaSA+PSBsZW5ndGggcyB0aGVuXG4gICAgaW52YWxpZF9hcmcgXCJTdHJpbmcucmNvbnRhaW5zX2Zyb20gLyBCeXRlcy5yY29udGFpbnNfZnJvbVwiXG4gIGVsc2VcbiAgICB0cnkgaWdub3JlIChyaW5kZXhfcmVjIHMgaSBjKTsgdHJ1ZSB3aXRoIE5vdF9mb3VuZCAtPiBmYWxzZVxuXG5sZXQgdXBwZXJjYXNlX2FzY2lpIHMgPVxuICBCLnVwcGVyY2FzZV9hc2NpaSAoYm9zIHMpIHw+IGJ0c1xubGV0IGxvd2VyY2FzZV9hc2NpaSBzID1cbiAgQi5sb3dlcmNhc2VfYXNjaWkgKGJvcyBzKSB8PiBidHNcbmxldCBjYXBpdGFsaXplX2FzY2lpIHMgPVxuICBCLmNhcGl0YWxpemVfYXNjaWkgKGJvcyBzKSB8PiBidHNcbmxldCB1bmNhcGl0YWxpemVfYXNjaWkgcyA9XG4gIEIudW5jYXBpdGFsaXplX2FzY2lpIChib3MgcykgfD4gYnRzXG5cbigqIGR1cGxpY2F0ZWQgaW4gYnl0ZXMubWwgKilcbmxldCBzdGFydHNfd2l0aCB+cHJlZml4IHMgPVxuICBsZXQgbGVuX3MgPSBsZW5ndGggc1xuICBhbmQgbGVuX3ByZSA9IGxlbmd0aCBwcmVmaXggaW5cbiAgbGV0IHJlYyBhdXggaSA9XG4gICAgaWYgaSA9IGxlbl9wcmUgdGhlbiB0cnVlXG4gICAgZWxzZSBpZiB1bnNhZmVfZ2V0IHMgaSA8PiB1bnNhZmVfZ2V0IHByZWZpeCBpIHRoZW4gZmFsc2VcbiAgICBlbHNlIGF1eCAoaSArIDEpXG4gIGluIGxlbl9zID49IGxlbl9wcmUgJiYgYXV4IDBcblxuKCogZHVwbGljYXRlZCBpbiBieXRlcy5tbCAqKVxubGV0IGVuZHNfd2l0aCB+c3VmZml4IHMgPVxuICBsZXQgbGVuX3MgPSBsZW5ndGggc1xuICBhbmQgbGVuX3N1ZiA9IGxlbmd0aCBzdWZmaXggaW5cbiAgbGV0IGRpZmYgPSBsZW5fcyAtIGxlbl9zdWYgaW5cbiAgbGV0IHJlYyBhdXggaSA9XG4gICAgaWYgaSA9IGxlbl9zdWYgdGhlbiB0cnVlXG4gICAgZWxzZSBpZiB1bnNhZmVfZ2V0IHMgKGRpZmYgKyBpKSA8PiB1bnNhZmVfZ2V0IHN1ZmZpeCBpIHRoZW4gZmFsc2VcbiAgICBlbHNlIGF1eCAoaSArIDEpXG4gIGluIGRpZmYgPj0gMCAmJiBhdXggMFxuXG4oKiBkdXBsaWNhdGVkIGluIGJ5dGVzLm1sICopXG5sZXQgc3BsaXRfb25fY2hhciBzZXAgcyA9XG4gIGxldCByID0gcmVmIFtdIGluXG4gIGxldCBqID0gcmVmIChsZW5ndGggcykgaW5cbiAgZm9yIGkgPSBsZW5ndGggcyAtIDEgZG93bnRvIDAgZG9cbiAgICBpZiB1bnNhZmVfZ2V0IHMgaSA9IHNlcCB0aGVuIGJlZ2luXG4gICAgICByIDo9IHN1YiBzIChpICsgMSkgKCFqIC0gaSAtIDEpIDo6ICFyO1xuICAgICAgaiA6PSBpXG4gICAgZW5kXG4gIGRvbmU7XG4gIHN1YiBzIDAgIWogOjogIXJcblxuKCogRGVwcmVjYXRlZCBmdW5jdGlvbnMgaW1wbGVtZW50ZWQgdmlhIG90aGVyIGRlcHJlY2F0ZWQgZnVuY3Rpb25zICopXG5bQEBAb2NhbWwud2FybmluZyBcIi0zXCJdXG5sZXQgdXBwZXJjYXNlIHMgPVxuICBCLnVwcGVyY2FzZSAoYm9zIHMpIHw+IGJ0c1xubGV0IGxvd2VyY2FzZSBzID1cbiAgQi5sb3dlcmNhc2UgKGJvcyBzKSB8PiBidHNcbmxldCBjYXBpdGFsaXplIHMgPVxuICBCLmNhcGl0YWxpemUgKGJvcyBzKSB8PiBidHNcbmxldCB1bmNhcGl0YWxpemUgcyA9XG4gIEIudW5jYXBpdGFsaXplIChib3MgcykgfD4gYnRzXG5cbnR5cGUgdCA9IHN0cmluZ1xuXG5sZXQgY29tcGFyZSAoeDogdCkgKHk6IHQpID0gU3RkbGliLmNvbXBhcmUgeCB5XG5leHRlcm5hbCBlcXVhbCA6IHN0cmluZyAtPiBzdHJpbmcgLT4gYm9vbCA9IFwiY2FtbF9zdHJpbmdfZXF1YWxcIiBbQEBub2FsbG9jXVxuXG4oKiogezEgSXRlcmF0b3JzfSAqKVxuXG5sZXQgdG9fc2VxIHMgPSBib3MgcyB8PiBCLnRvX3NlcVxuXG5sZXQgdG9fc2VxaSBzID0gYm9zIHMgfD4gQi50b19zZXFpXG5cbmxldCBvZl9zZXEgZyA9IEIub2Zfc2VxIGcgfD4gYnRzXG5cbigqKiB7NiBCaW5hcnkgZW5jb2RpbmcvZGVjb2Rpbmcgb2YgaW50ZWdlcnN9ICopXG5cbmV4dGVybmFsIGdldF91aW50OCA6IHN0cmluZyAtPiBpbnQgLT4gaW50ID0gXCIlc3RyaW5nX3NhZmVfZ2V0XCJcbmV4dGVybmFsIGdldF91aW50MTZfbmUgOiBzdHJpbmcgLT4gaW50IC0+IGludCA9IFwiJWNhbWxfc3RyaW5nX2dldDE2XCJcbmV4dGVybmFsIGdldF9pbnQzMl9uZSA6IHN0cmluZyAtPiBpbnQgLT4gaW50MzIgPSBcIiVjYW1sX3N0cmluZ19nZXQzMlwiXG5leHRlcm5hbCBnZXRfaW50NjRfbmUgOiBzdHJpbmcgLT4gaW50IC0+IGludDY0ID0gXCIlY2FtbF9zdHJpbmdfZ2V0NjRcIlxuXG5sZXQgZ2V0X2ludDggcyBpID0gQi5nZXRfaW50OCAoYm9zIHMpIGlcbmxldCBnZXRfdWludDE2X2xlIHMgaSA9IEIuZ2V0X3VpbnQxNl9sZSAoYm9zIHMpIGlcbmxldCBnZXRfdWludDE2X2JlIHMgaSA9IEIuZ2V0X3VpbnQxNl9iZSAoYm9zIHMpIGlcbmxldCBnZXRfaW50MTZfbmUgcyBpID0gQi5nZXRfaW50MTZfbmUgKGJvcyBzKSBpXG5sZXQgZ2V0X2ludDE2X2xlIHMgaSA9IEIuZ2V0X2ludDE2X2xlIChib3MgcykgaVxubGV0IGdldF9pbnQxNl9iZSBzIGkgPSBCLmdldF9pbnQxNl9iZSAoYm9zIHMpIGlcbmxldCBnZXRfaW50MzJfbGUgcyBpID0gQi5nZXRfaW50MzJfbGUgKGJvcyBzKSBpXG5sZXQgZ2V0X2ludDMyX2JlIHMgaSA9IEIuZ2V0X2ludDMyX2JlIChib3MgcykgaVxubGV0IGdldF9pbnQ2NF9sZSBzIGkgPSBCLmdldF9pbnQ2NF9sZSAoYm9zIHMpIGlcbmxldCBnZXRfaW50NjRfYmUgcyBpID0gQi5nZXRfaW50NjRfYmUgKGJvcyBzKSBpXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgT0NhbWwgcHJvZ3JhbW1lcnMgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDE4IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbnR5cGUgdCA9IHVuaXQgPSAoKVxuXG5sZXQgZXF1YWwgKCkgKCkgPSB0cnVlXG5sZXQgY29tcGFyZSAoKSAoKSA9IDBcbmxldCB0b19zdHJpbmcgKCkgPSBcIigpXCJcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTcgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxudHlwZSBleHRlcm5fZmxhZ3MgPVxuICAgIE5vX3NoYXJpbmdcbiAgfCBDbG9zdXJlc1xuICB8IENvbXBhdF8zMlxuKCogbm90ZTogdGhpcyB0eXBlIGRlZmluaXRpb24gaXMgdXNlZCBpbiAncnVudGltZS9kZWJ1Z2dlci5jJyAqKVxuXG5leHRlcm5hbCB0b19jaGFubmVsOiBvdXRfY2hhbm5lbCAtPiAnYSAtPiBleHRlcm5fZmxhZ3MgbGlzdCAtPiB1bml0XG4gICAgPSBcImNhbWxfb3V0cHV0X3ZhbHVlXCJcbmV4dGVybmFsIHRvX2J5dGVzOiAnYSAtPiBleHRlcm5fZmxhZ3MgbGlzdCAtPiBieXRlc1xuICAgID0gXCJjYW1sX291dHB1dF92YWx1ZV90b19ieXRlc1wiXG5leHRlcm5hbCB0b19zdHJpbmc6ICdhIC0+IGV4dGVybl9mbGFncyBsaXN0IC0+IHN0cmluZ1xuICAgID0gXCJjYW1sX291dHB1dF92YWx1ZV90b19zdHJpbmdcIlxuZXh0ZXJuYWwgdG9fYnVmZmVyX3Vuc2FmZTpcbiAgICAgIGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gJ2EgLT4gZXh0ZXJuX2ZsYWdzIGxpc3QgLT4gaW50XG4gICAgPSBcImNhbWxfb3V0cHV0X3ZhbHVlX3RvX2J1ZmZlclwiXG5cbmxldCB0b19idWZmZXIgYnVmZiBvZnMgbGVuIHYgZmxhZ3MgPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gQnl0ZXMubGVuZ3RoIGJ1ZmYgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIk1hcnNoYWwudG9fYnVmZmVyOiBzdWJzdHJpbmcgb3V0IG9mIGJvdW5kc1wiXG4gIGVsc2UgdG9fYnVmZmVyX3Vuc2FmZSBidWZmIG9mcyBsZW4gdiBmbGFnc1xuXG4oKiBUaGUgZnVuY3Rpb25zIGJlbG93IHVzZSBieXRlIHNlcXVlbmNlcyBhcyBpbnB1dCwgbmV2ZXIgdXNpbmcgYW55XG4gICBtdXRhdGlvbi4gSXQgbWFrZXMgc2Vuc2UgdG8gdXNlIG5vbi1tdXRhdGVkIFtieXRlc10gcmF0aGVyIHRoYW5cbiAgIFtzdHJpbmddLCBiZWNhdXNlIHdlIHJlYWxseSB3b3JrIHdpdGggc2VxdWVuY2VzIG9mIGJ5dGVzLCBub3RcbiAgIGEgdGV4dCByZXByZXNlbnRhdGlvbi5cbiopXG5cbmV4dGVybmFsIGZyb21fY2hhbm5lbDogaW5fY2hhbm5lbCAtPiAnYSA9IFwiY2FtbF9pbnB1dF92YWx1ZVwiXG5leHRlcm5hbCBmcm9tX2J5dGVzX3Vuc2FmZTogYnl0ZXMgLT4gaW50IC0+ICdhID0gXCJjYW1sX2lucHV0X3ZhbHVlX2Zyb21fYnl0ZXNcIlxuZXh0ZXJuYWwgZGF0YV9zaXplX3Vuc2FmZTogYnl0ZXMgLT4gaW50IC0+IGludCA9IFwiY2FtbF9tYXJzaGFsX2RhdGFfc2l6ZVwiXG5cbmxldCBoZWFkZXJfc2l6ZSA9IDIwXG5sZXQgZGF0YV9zaXplIGJ1ZmYgb2ZzID1cbiAgaWYgb2ZzIDwgMCB8fCBvZnMgPiBCeXRlcy5sZW5ndGggYnVmZiAtIGhlYWRlcl9zaXplXG4gIHRoZW4gaW52YWxpZF9hcmcgXCJNYXJzaGFsLmRhdGFfc2l6ZVwiXG4gIGVsc2UgZGF0YV9zaXplX3Vuc2FmZSBidWZmIG9mc1xubGV0IHRvdGFsX3NpemUgYnVmZiBvZnMgPSBoZWFkZXJfc2l6ZSArIGRhdGFfc2l6ZSBidWZmIG9mc1xuXG5sZXQgZnJvbV9ieXRlcyBidWZmIG9mcyA9XG4gIGlmIG9mcyA8IDAgfHwgb2ZzID4gQnl0ZXMubGVuZ3RoIGJ1ZmYgLSBoZWFkZXJfc2l6ZVxuICB0aGVuIGludmFsaWRfYXJnIFwiTWFyc2hhbC5mcm9tX2J5dGVzXCJcbiAgZWxzZSBiZWdpblxuICAgIGxldCBsZW4gPSBkYXRhX3NpemVfdW5zYWZlIGJ1ZmYgb2ZzIGluXG4gICAgaWYgb2ZzID4gQnl0ZXMubGVuZ3RoIGJ1ZmYgLSAoaGVhZGVyX3NpemUgKyBsZW4pXG4gICAgdGhlbiBpbnZhbGlkX2FyZyBcIk1hcnNoYWwuZnJvbV9ieXRlc1wiXG4gICAgZWxzZSBmcm9tX2J5dGVzX3Vuc2FmZSBidWZmIG9mc1xuICBlbmRcblxubGV0IGZyb21fc3RyaW5nIGJ1ZmYgb2ZzID1cbiAgKCogQnl0ZXMudW5zYWZlX29mX3N0cmluZyBpcyBzYWZlIGhlcmUsIGFzIHRoZSBwcm9kdWNlZCBieXRlXG4gICAgIHNlcXVlbmNlIGlzIG5ldmVyIG11dGF0ZWQgKilcbiAgZnJvbV9ieXRlcyAoQnl0ZXMudW5zYWZlX29mX3N0cmluZyBidWZmKSBvZnNcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogT3BlcmF0aW9ucyBvbiBpbnRlcm5hbCByZXByZXNlbnRhdGlvbnMgb2YgdmFsdWVzICopXG5cbnR5cGUgdFxuXG50eXBlIHJhd19kYXRhID0gbmF0aXZlaW50XG5cbmV4dGVybmFsIHJlcHIgOiAnYSAtPiB0ID0gXCIlaWRlbnRpdHlcIlxuZXh0ZXJuYWwgb2JqIDogdCAtPiAnYSA9IFwiJWlkZW50aXR5XCJcbmV4dGVybmFsIG1hZ2ljIDogJ2EgLT4gJ2IgPSBcIiVpZGVudGl0eVwiXG5leHRlcm5hbCBpc19pbnQgOiB0IC0+IGJvb2wgPSBcIiVvYmpfaXNfaW50XCJcbmxldCBbQGlubGluZSBhbHdheXNdIGlzX2Jsb2NrIGEgPSBub3QgKGlzX2ludCBhKVxuZXh0ZXJuYWwgdGFnIDogdCAtPiBpbnQgPSBcImNhbWxfb2JqX3RhZ1wiIFtAQG5vYWxsb2NdXG5leHRlcm5hbCBzZXRfdGFnIDogdCAtPiBpbnQgLT4gdW5pdCA9IFwiY2FtbF9vYmpfc2V0X3RhZ1wiXG5leHRlcm5hbCBzaXplIDogdCAtPiBpbnQgPSBcIiVvYmpfc2l6ZVwiXG5leHRlcm5hbCByZWFjaGFibGVfd29yZHMgOiB0IC0+IGludCA9IFwiY2FtbF9vYmpfcmVhY2hhYmxlX3dvcmRzXCJcbmV4dGVybmFsIGZpZWxkIDogdCAtPiBpbnQgLT4gdCA9IFwiJW9ial9maWVsZFwiXG5leHRlcm5hbCBzZXRfZmllbGQgOiB0IC0+IGludCAtPiB0IC0+IHVuaXQgPSBcIiVvYmpfc2V0X2ZpZWxkXCJcbmV4dGVybmFsIGZsb2F0YXJyYXlfZ2V0IDogZmxvYXRhcnJheSAtPiBpbnQgLT4gZmxvYXQgPSBcImNhbWxfZmxvYXRhcnJheV9nZXRcIlxuZXh0ZXJuYWwgZmxvYXRhcnJheV9zZXQgOlxuICAgIGZsb2F0YXJyYXkgLT4gaW50IC0+IGZsb2F0IC0+IHVuaXQgPSBcImNhbWxfZmxvYXRhcnJheV9zZXRcIlxubGV0IFtAaW5saW5lIGFsd2F5c10gZG91YmxlX2ZpZWxkIHggaSA9IGZsb2F0YXJyYXlfZ2V0IChvYmogeCA6IGZsb2F0YXJyYXkpIGlcbmxldCBbQGlubGluZSBhbHdheXNdIHNldF9kb3VibGVfZmllbGQgeCBpIHYgPVxuICBmbG9hdGFycmF5X3NldCAob2JqIHggOiBmbG9hdGFycmF5KSBpIHZcbmV4dGVybmFsIHJhd19maWVsZCA6IHQgLT4gaW50IC0+IHJhd19kYXRhID0gXCJjYW1sX29ial9yYXdfZmllbGRcIlxuZXh0ZXJuYWwgc2V0X3Jhd19maWVsZCA6IHQgLT4gaW50IC0+IHJhd19kYXRhIC0+IHVuaXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gXCJjYW1sX29ial9zZXRfcmF3X2ZpZWxkXCJcblxuZXh0ZXJuYWwgbmV3X2Jsb2NrIDogaW50IC0+IGludCAtPiB0ID0gXCJjYW1sX29ial9ibG9ja1wiXG5leHRlcm5hbCBkdXAgOiB0IC0+IHQgPSBcImNhbWxfb2JqX2R1cFwiXG5leHRlcm5hbCB0cnVuY2F0ZSA6IHQgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfb2JqX3RydW5jYXRlXCJcbmV4dGVybmFsIGFkZF9vZmZzZXQgOiB0IC0+IEludDMyLnQgLT4gdCA9IFwiY2FtbF9vYmpfYWRkX29mZnNldFwiXG5leHRlcm5hbCB3aXRoX3RhZyA6IGludCAtPiB0IC0+IHQgPSBcImNhbWxfb2JqX3dpdGhfdGFnXCJcblxubGV0IG1hcnNoYWwgKG9iaiA6IHQpID1cbiAgTWFyc2hhbC50b19ieXRlcyBvYmogW11cbmxldCB1bm1hcnNoYWwgc3RyIHBvcyA9XG4gIChNYXJzaGFsLmZyb21fYnl0ZXMgc3RyIHBvcywgcG9zICsgTWFyc2hhbC50b3RhbF9zaXplIHN0ciBwb3MpXG5cbmxldCBmaXJzdF9ub25fY29uc3RhbnRfY29uc3RydWN0b3JfdGFnID0gMFxubGV0IGxhc3Rfbm9uX2NvbnN0YW50X2NvbnN0cnVjdG9yX3RhZyA9IDI0NVxuXG5sZXQgbGF6eV90YWcgPSAyNDZcbmxldCBjbG9zdXJlX3RhZyA9IDI0N1xubGV0IG9iamVjdF90YWcgPSAyNDhcbmxldCBpbmZpeF90YWcgPSAyNDlcbmxldCBmb3J3YXJkX3RhZyA9IDI1MFxuXG5sZXQgbm9fc2Nhbl90YWcgPSAyNTFcblxubGV0IGFic3RyYWN0X3RhZyA9IDI1MVxubGV0IHN0cmluZ190YWcgPSAyNTJcbmxldCBkb3VibGVfdGFnID0gMjUzXG5sZXQgZG91YmxlX2FycmF5X3RhZyA9IDI1NFxubGV0IGN1c3RvbV90YWcgPSAyNTVcbmxldCBmaW5hbF90YWcgPSBjdXN0b21fdGFnXG5cblxubGV0IGludF90YWcgPSAxMDAwXG5sZXQgb3V0X29mX2hlYXBfdGFnID0gMTAwMVxubGV0IHVuYWxpZ25lZF90YWcgPSAxMDAyXG5cbm1vZHVsZSBDbG9zdXJlID0gc3RydWN0XG4gIHR5cGUgaW5mbyA9IHtcbiAgICBhcml0eTogaW50O1xuICAgIHN0YXJ0X2VudjogaW50O1xuICB9XG5cbiAgbGV0IGluZm9fb2ZfcmF3IChpbmZvIDogbmF0aXZlaW50KSA9XG4gICAgbGV0IG9wZW4gTmF0aXZlaW50IGluXG4gICAgbGV0IGFyaXR5ID1cbiAgICAgICgqIHNpZ25lZDogbmVnYXRpdmUgZm9yIHR1cGxlZCBmdW5jdGlvbnMgKilcbiAgICAgIGlmIFN5cy53b3JkX3NpemUgPSA2NCB0aGVuXG4gICAgICAgIHRvX2ludCAoc2hpZnRfcmlnaHQgaW5mbyA1NilcbiAgICAgIGVsc2VcbiAgICAgICAgdG9faW50IChzaGlmdF9yaWdodCBpbmZvIDI0KVxuICAgIGluXG4gICAgbGV0IHN0YXJ0X2VudiA9XG4gICAgICAoKiBzdGFydF9lbnYgaXMgdW5zaWduZWQsIGJ1dCB3ZSBrbm93IGl0IGNhbiBhbHdheXMgZml0IGFuIE9DYW1sXG4gICAgICAgICBpbnRlZ2VyIHNvIHdlIHVzZSBbdG9faW50XSBpbnN0ZWFkIG9mIFt1bnNpZ25lZF90b19pbnRdLiAqKVxuICAgICAgdG9faW50IChzaGlmdF9yaWdodF9sb2dpY2FsIChzaGlmdF9sZWZ0IGluZm8gOCkgOSkgaW5cbiAgICB7IGFyaXR5OyBzdGFydF9lbnYgfVxuXG4gICgqIG5vdGU6IHdlIGV4cGVjdCBhIGNsb3N1cmUsIG5vdCBhbiBpbmZpeCBwb2ludGVyICopXG4gIGxldCBpbmZvIChvYmogOiB0KSA9XG4gICAgYXNzZXJ0ICh0YWcgb2JqID0gY2xvc3VyZV90YWcpO1xuICAgIGluZm9fb2ZfcmF3IChyYXdfZmllbGQgb2JqIDEpXG5lbmRcblxubW9kdWxlIEV4dGVuc2lvbl9jb25zdHJ1Y3RvciA9XG5zdHJ1Y3RcbiAgdHlwZSB0ID0gZXh0ZW5zaW9uX2NvbnN0cnVjdG9yXG4gIGxldCBvZl92YWwgeCA9XG4gICAgbGV0IHggPSByZXByIHggaW5cbiAgICBsZXQgc2xvdCA9XG4gICAgICBpZiAoaXNfYmxvY2sgeCkgJiYgKHRhZyB4KSA8PiBvYmplY3RfdGFnICYmIChzaXplIHgpID49IDEgdGhlbiBmaWVsZCB4IDBcbiAgICAgIGVsc2UgeFxuICAgIGluXG4gICAgbGV0IG5hbWUgPVxuICAgICAgaWYgKGlzX2Jsb2NrIHNsb3QpICYmICh0YWcgc2xvdCkgPSBvYmplY3RfdGFnIHRoZW4gZmllbGQgc2xvdCAwXG4gICAgICBlbHNlIGludmFsaWRfYXJnIFwiT2JqLmV4dGVuc2lvbl9jb25zdHJ1Y3RvclwiXG4gICAgaW5cbiAgICAgIGlmICh0YWcgbmFtZSkgPSBzdHJpbmdfdGFnIHRoZW4gKG9iaiBzbG90IDogdClcbiAgICAgIGVsc2UgaW52YWxpZF9hcmcgXCJPYmouZXh0ZW5zaW9uX2NvbnN0cnVjdG9yXCJcblxuICBsZXQgW0BpbmxpbmUgYWx3YXlzXSBuYW1lIChzbG90IDogdCkgPVxuICAgIChvYmogKGZpZWxkIChyZXByIHNsb3QpIDApIDogc3RyaW5nKVxuXG4gIGxldCBbQGlubGluZSBhbHdheXNdIGlkIChzbG90IDogdCkgPVxuICAgIChvYmogKGZpZWxkIChyZXByIHNsb3QpIDEpIDogaW50KVxuZW5kXG5cbmxldCBleHRlbnNpb25fY29uc3RydWN0b3IgPSBFeHRlbnNpb25fY29uc3RydWN0b3Iub2ZfdmFsXG5sZXQgZXh0ZW5zaW9uX25hbWUgPSBFeHRlbnNpb25fY29uc3RydWN0b3IubmFtZVxubGV0IGV4dGVuc2lvbl9pZCA9IEV4dGVuc2lvbl9jb25zdHJ1Y3Rvci5pZFxuXG5tb2R1bGUgRXBoZW1lcm9uID0gc3RydWN0XG4gIHR5cGUgb2JqX3QgPSB0XG5cbiAgdHlwZSB0ICgqKiBlcGhlbWVyb24gKilcblxuICAgKCoqIFRvIGNoYW5nZSBpbiBzeW5jIHdpdGggd2Vhay5oICopXG4gIGxldCBhZGRpdGlvbmFsX3ZhbHVlcyA9IDJcbiAgbGV0IG1heF9lcGhlX2xlbmd0aCA9IFN5cy5tYXhfYXJyYXlfbGVuZ3RoIC0gYWRkaXRpb25hbF92YWx1ZXNcblxuICBleHRlcm5hbCBjcmVhdGUgOiBpbnQgLT4gdCA9IFwiY2FtbF9lcGhlX2NyZWF0ZVwiOztcbiAgbGV0IGNyZWF0ZSBsID1cbiAgICBpZiBub3QgKDAgPD0gbCAmJiBsIDw9IG1heF9lcGhlX2xlbmd0aCkgdGhlblxuICAgICAgaW52YWxpZF9hcmcgXCJPYmouRXBoZW1lcm9uLmNyZWF0ZVwiO1xuICAgIGNyZWF0ZSBsXG5cbiAgbGV0IGxlbmd0aCB4ID0gc2l6ZShyZXByIHgpIC0gYWRkaXRpb25hbF92YWx1ZXNcblxuICBsZXQgcmFpc2VfaWZfaW52YWxpZF9vZmZzZXQgZSBvIG1zZyA9XG4gICAgaWYgbm90ICgwIDw9IG8gJiYgbyA8IGxlbmd0aCBlKSB0aGVuXG4gICAgICBpbnZhbGlkX2FyZyBtc2dcblxuICBleHRlcm5hbCBnZXRfa2V5OiB0IC0+IGludCAtPiBvYmpfdCBvcHRpb24gPSBcImNhbWxfZXBoZV9nZXRfa2V5XCJcbiAgbGV0IGdldF9rZXkgZSBvID1cbiAgICByYWlzZV9pZl9pbnZhbGlkX29mZnNldCBlIG8gXCJPYmouRXBoZW1lcm9uLmdldF9rZXlcIjtcbiAgICBnZXRfa2V5IGUgb1xuXG4gIGV4dGVybmFsIGdldF9rZXlfY29weTogdCAtPiBpbnQgLT4gb2JqX3Qgb3B0aW9uID0gXCJjYW1sX2VwaGVfZ2V0X2tleV9jb3B5XCJcbiAgbGV0IGdldF9rZXlfY29weSBlIG8gPVxuICAgIHJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0IGUgbyBcIk9iai5FcGhlbWVyb24uZ2V0X2tleV9jb3B5XCI7XG4gICAgZ2V0X2tleV9jb3B5IGUgb1xuXG4gIGV4dGVybmFsIHNldF9rZXk6IHQgLT4gaW50IC0+IG9ial90IC0+IHVuaXQgPSBcImNhbWxfZXBoZV9zZXRfa2V5XCJcbiAgbGV0IHNldF9rZXkgZSBvIHggPVxuICAgIHJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0IGUgbyBcIk9iai5FcGhlbWVyb24uc2V0X2tleVwiO1xuICAgIHNldF9rZXkgZSBvIHhcblxuICBleHRlcm5hbCB1bnNldF9rZXk6IHQgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfZXBoZV91bnNldF9rZXlcIlxuICBsZXQgdW5zZXRfa2V5IGUgbyA9XG4gICAgcmFpc2VfaWZfaW52YWxpZF9vZmZzZXQgZSBvIFwiT2JqLkVwaGVtZXJvbi51bnNldF9rZXlcIjtcbiAgICB1bnNldF9rZXkgZSBvXG5cbiAgZXh0ZXJuYWwgY2hlY2tfa2V5OiB0IC0+IGludCAtPiBib29sID0gXCJjYW1sX2VwaGVfY2hlY2tfa2V5XCJcbiAgbGV0IGNoZWNrX2tleSBlIG8gPVxuICAgIHJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0IGUgbyBcIk9iai5FcGhlbWVyb24uY2hlY2tfa2V5XCI7XG4gICAgY2hlY2tfa2V5IGUgb1xuXG4gIGV4dGVybmFsIGJsaXRfa2V5IDogdCAtPiBpbnQgLT4gdCAtPiBpbnQgLT4gaW50IC0+IHVuaXRcbiAgICA9IFwiY2FtbF9lcGhlX2JsaXRfa2V5XCJcblxuICBsZXQgYmxpdF9rZXkgZTEgbzEgZTIgbzIgbCA9XG4gICAgaWYgbCA8IDAgfHwgbzEgPCAwIHx8IG8xID4gbGVuZ3RoIGUxIC0gbFxuICAgICAgIHx8IG8yIDwgMCB8fCBvMiA+IGxlbmd0aCBlMiAtIGxcbiAgICB0aGVuIGludmFsaWRfYXJnIFwiT2JqLkVwaGVtZXJvbi5ibGl0X2tleVwiXG4gICAgZWxzZSBpZiBsIDw+IDAgdGhlbiBibGl0X2tleSBlMSBvMSBlMiBvMiBsXG5cbiAgZXh0ZXJuYWwgZ2V0X2RhdGE6IHQgLT4gb2JqX3Qgb3B0aW9uID0gXCJjYW1sX2VwaGVfZ2V0X2RhdGFcIlxuICBleHRlcm5hbCBnZXRfZGF0YV9jb3B5OiB0IC0+IG9ial90IG9wdGlvbiA9IFwiY2FtbF9lcGhlX2dldF9kYXRhX2NvcHlcIlxuICBleHRlcm5hbCBzZXRfZGF0YTogdCAtPiBvYmpfdCAtPiB1bml0ID0gXCJjYW1sX2VwaGVfc2V0X2RhdGFcIlxuICBleHRlcm5hbCB1bnNldF9kYXRhOiB0IC0+IHVuaXQgPSBcImNhbWxfZXBoZV91bnNldF9kYXRhXCJcbiAgZXh0ZXJuYWwgY2hlY2tfZGF0YTogdCAtPiBib29sID0gXCJjYW1sX2VwaGVfY2hlY2tfZGF0YVwiXG4gIGV4dGVybmFsIGJsaXRfZGF0YSA6IHQgLT4gdCAtPiB1bml0ID0gXCJjYW1sX2VwaGVfYmxpdF9kYXRhXCJcblxuZW5kXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk2IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIEFuIGFsaWFzIGZvciB0aGUgdHlwZSBvZiBhcnJheXMuICopXG50eXBlICdhIHQgPSAnYSBhcnJheVxuXG4oKiBBcnJheSBvcGVyYXRpb25zICopXG5cbmV4dGVybmFsIGxlbmd0aCA6ICdhIGFycmF5IC0+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+IGZvbGQgZiBhY2N1IHEuZmlyc3RcblxubGV0IHRyYW5zZmVyIHExIHEyID1cbiAgaWYgcTEubGVuZ3RoID4gMCB0aGVuXG4gICAgbWF0Y2ggcTIubGFzdCB3aXRoXG4gICAgfCBOaWwgLT5cbiAgICAgIHEyLmxlbmd0aCA8LSBxMS5sZW5ndGg7XG4gICAgICBxMi5maXJzdCA8LSBxMS5maXJzdDtcbiAgICAgIHEyLmxhc3QgPC0gcTEubGFzdDtcbiAgICAgIGNsZWFyIHExXG4gICAgfCBDb25zIGxhc3QgLT5cbiAgICAgIHEyLmxlbmd0aCA8LSBxMi5sZW5ndGggKyBxMS5sZW5ndGg7XG4gICAgICBsYXN0Lm5leHQgPC0gcTEuZmlyc3Q7XG4gICAgICBxMi5sYXN0IDwtIHExLmxhc3Q7XG4gICAgICBjbGVhciBxMVxuXG4oKiogezEgSXRlcmF0b3JzfSAqKVxuXG5sZXQgdG9fc2VxIHEgPVxuICBsZXQgcmVjIGF1eCBjICgpID0gbWF0Y2ggYyB3aXRoXG4gICAgfCBOaWwgLT4gU2VxLk5pbFxuICAgIHwgQ29ucyB7IGNvbnRlbnQ9eDsgbmV4dDsgfSAtPiBTZXEuQ29ucyAoeCwgYXV4IG5leHQpXG4gIGluXG4gIGF1eCBxLmZpcnN0XG5cbmxldCBhZGRfc2VxIHEgaSA9IFNlcS5pdGVyIChmdW4geCAtPiBwdXNoIHggcSkgaVxuXG5sZXQgb2Zfc2VxIGcgPVxuICBsZXQgcSA9IGNyZWF0ZSgpIGluXG4gIGFkZF9zZXEgcSBnO1xuICBxXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBEYW1pZW4gRG9saWdleiwgcHJvamV0IFBhcmEsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk3IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIEludGVybmFscyBvZiBmb3JjaW5nIGxhenkgdmFsdWVzLiAqKVxuXG50eXBlICdhIHQgPSAnYSBsYXp5X3RcblxuZXhjZXB0aW9uIFVuZGVmaW5lZFxuXG5sZXQgcmFpc2VfdW5kZWZpbmVkID0gT2JqLnJlcHIgKGZ1biAoKSAtPiByYWlzZSBVbmRlZmluZWQpXG5cbmV4dGVybmFsIG1ha2VfZm9yd2FyZCA6IE9iai50IC0+IE9iai50IC0+IHVuaXQgPSBcImNhbWxfb2JqX21ha2VfZm9yd2FyZFwiXG5cbigqIEFzc3VtZSBbYmxrXSBpcyBhIGJsb2NrIHdpdGggdGFnIGxhenkgKilcbmxldCBmb3JjZV9sYXp5X2Jsb2NrIChibGsgOiAnYXJnIGxhenlfdCkgPVxuICBsZXQgY2xvc3VyZSA9IChPYmoub2JqIChPYmouZmllbGQgKE9iai5yZXByIGJsaykgMCkgOiB1bml0IC0+ICdhcmcpIGluXG4gIE9iai5zZXRfZmllbGQgKE9iai5yZXByIGJsaykgMCByYWlzZV91bmRlZmluZWQ7XG4gIHRyeVxuICAgIGxldCByZXN1bHQgPSBjbG9zdXJlICgpIGluXG4gICAgbWFrZV9mb3J3YXJkIChPYmoucmVwciBibGspIChPYmoucmVwciByZXN1bHQpO1xuICAgIHJlc3VsdFxuICB3aXRoIGUgLT5cbiAgICBPYmouc2V0X2ZpZWxkIChPYmoucmVwciBibGspIDAgKE9iai5yZXByIChmdW4gKCkgLT4gcmFpc2UgZSkpO1xuICAgIHJhaXNlIGVcblxuXG4oKiBBc3N1bWUgW2Jsa10gaXMgYSBibG9jayB3aXRoIHRhZyBsYXp5ICopXG5sZXQgZm9yY2VfdmFsX2xhenlfYmxvY2sgKGJsayA6ICdhcmcgbGF6eV90KSA9XG4gIGxldCBjbG9zdXJlID0gKE9iai5vYmogKE9iai5maWVsZCAoT2JqLnJlcHIgYmxrKSAwKSA6IHVuaXQgLT4gJ2FyZykgaW5cbiAgT2JqLnNldF9maWVsZCAoT2JqLnJlcHIgYmxrKSAwIHJhaXNlX3VuZGVmaW5lZDtcbiAgbGV0IHJlc3VsdCA9IGNsb3N1cmUgKCkgaW5cbiAgbWFrZV9mb3J3YXJkIChPYmoucmVwciBibGspIChPYmoucmVwciByZXN1bHQpO1xuICByZXN1bHRcblxuXG4oKiBbZm9yY2VdIGlzIG5vdCB1c2VkLCBzaW5jZSBbTGF6eS5mb3JjZV0gaXMgZGVjbGFyZWQgYXMgYSBwcmltaXRpdmVcbiAgIHdob3NlIGNvZGUgaW5saW5lcyB0aGUgdGFnIHRlc3RzIG9mIGl0cyBhcmd1bWVudCwgZXhjZXB0IHdoZW4gYWZsXG4gICBpbnN0cnVtZW50YXRpb24gaXMgdHVybmVkIG9uLiAqKVxuXG5sZXQgZm9yY2UgKGx6diA6ICdhcmcgbGF6eV90KSA9XG4gICgqIFVzaW5nIFtTeXMub3BhcXVlX2lkZW50aXR5XSBwcmV2ZW50cyB0d28gcG90ZW50aWFsIHByb2JsZW1zOlxuICAgICAtIElmIHRoZSB2YWx1ZSBpcyBrbm93biB0byBoYXZlIEZvcndhcmRfdGFnLCB0aGVuIGl0cyB0YWcgY291bGQgaGF2ZVxuICAgICAgIGNoYW5nZWQgZHVyaW5nIEdDLCBzbyB0aGF0IGluZm9ybWF0aW9uIG11c3QgYmUgZm9yZ290dGVuIChzZWUgR1BSIzcxM1xuICAgICAgIGFuZCBpc3N1ZSAjNzMwMSlcbiAgICAgLSBJZiB0aGUgdmFsdWUgaXMga25vd24gdG8gYmUgaW1tdXRhYmxlLCB0aGVuIGlmIHRoZSBjb21waWxlclxuICAgICAgIGNhbm5vdCBwcm92ZSB0aGF0IHRoZSBsYXN0IGJyYW5jaCBpcyBub3QgdGFrZW4gaXQgd2lsbCBpc3N1ZSBhXG4gICAgICAgd2FybmluZyA1OSAobW9kaWZpY2F0aW9uIG9mIGFuIGltbXV0YWJsZSB2YWx1ZSkgKilcbiAgbGV0IGx6diA9IFN5cy5vcGFxdWVfaWRlbnRpdHkgbHp2IGluXG4gIGxldCB4ID0gT2JqLnJlcHIgbHp2IGluXG4gIGxldCB0ID0gT2JqLnRhZyB4IGluXG4gIGlmIHQgPSBPYmouZm9yd2FyZF90YWcgdGhlbiAoT2JqLm9iaiAoT2JqLmZpZWxkIHggMCkgOiAnYXJnKSBlbHNlXG4gIGlmIHQgPD4gT2JqLmxhenlfdGFnIHRoZW4gKE9iai5vYmogeCA6ICdhcmcpXG4gIGVsc2UgZm9yY2VfbGF6eV9ibG9jayBsenZcblxuXG5sZXQgZm9yY2VfdmFsIChsenYgOiAnYXJnIGxhenlfdCkgPVxuICBsZXQgeCA9IE9iai5yZXByIGx6diBpblxuICBsZXQgdCA9IE9iai50YWcgeCBpblxuICBpZiB0ID0gT2JqLmZvcndhcmRfdGFnIHRoZW4gKE9iai5vYmogKE9iai5maWVsZCB4IDApIDogJ2FyZykgZWxzZVxuICBpZiB0IDw+IE9iai5sYXp5X3RhZyB0aGVuIChPYmoub2JqIHggOiAnYXJnKVxuICBlbHNlIGZvcmNlX3ZhbF9sYXp5X2Jsb2NrIGx6dlxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgRGFtaWVuIERvbGlnZXosIHByb2pldCBQYXJhLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NyBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBNb2R1bGUgW0xhenldOiBkZWZlcnJlZCBjb21wdXRhdGlvbnMgKilcblxuXG4oKlxuICAgV0FSTklORzogc29tZSBwdXJwbGUgbWFnaWMgaXMgZ29pbmcgb24gaGVyZS4gIERvIG5vdCB0YWtlIHRoaXMgZmlsZVxuICAgYXMgYW4gZXhhbXBsZSBvZiBob3cgdG8gcHJvZ3JhbSBpbiBPQ2FtbC5cbiopXG5cblxuKCogV2UgbWFrZSB1c2Ugb2YgdHdvIHNwZWNpYWwgdGFncyBwcm92aWRlZCBieSB0aGUgcnVudGltZTpcbiAgIFtsYXp5X3RhZ10gYW5kIFtmb3J3YXJkX3RhZ10uXG5cbiAgIEEgdmFsdWUgb2YgdHlwZSBbJ2EgTGF6eS50XSBjYW4gYmUgb25lIG9mIHRocmVlIHRoaW5nczpcbiAgIDEuIEEgYmxvY2sgb2Ygc2l6ZSAxIHdpdGggdGFnIFtsYXp5X3RhZ10uICBJdHMgZmllbGQgaXMgYSBjbG9zdXJlIG9mXG4gICAgICB0eXBlIFt1bml0IC0+ICdhXSB0aGF0IGNvbXB1dGVzIHRoZSB2YWx1ZS5cbiAgIDIuIEEgYmxvY2sgb2Ygc2l6ZSAxIHdpdGggdGFnIFtmb3J3YXJkX3RhZ10uICBJdHMgZmllbGQgaXMgdGhlIHZhbHVlXG4gICAgICBvZiB0eXBlIFsnYV0gdGhhdCB3YXMgY29tcHV0ZWQuXG4gICAzLiBBbnl0aGluZyBlbHNlIGV4Y2VwdCBhIGZsb2F0LiAgVGhpcyBoYXMgdHlwZSBbJ2FdIGFuZCBpcyB0aGUgdmFsdWVcbiAgICAgIHRoYXQgd2FzIGNvbXB1dGVkLlxuICAgRXhjZXB0aW9ucyBhcmUgc3RvcmVkIGluIGZvcm1hdCAoMSkuXG4gICBUaGUgR0Mgd2lsbCBtYWdpY2FsbHkgY2hhbmdlIHRoaW5ncyBmcm9tICgyKSB0byAoMykgYWNjb3JkaW5nIHRvIGl0c1xuICAgZmFuY3kuXG5cbiAgIElmIE9DYW1sIHdhcyBjb25maWd1cmVkIHdpdGggdGhlIC1mbGF0LWZsb2F0LWFycmF5IG9wdGlvbiAod2hpY2ggaXNcbiAgIGN1cnJlbnRseSB0aGUgZGVmYXVsdCksIHRoZSBmb2xsb3dpbmcgaXMgYWxzbyB0cnVlOlxuICAgV2UgY2Fubm90IHVzZSByZXByZXNlbnRhdGlvbiAoMykgZm9yIGEgW2Zsb2F0IExhenkudF0gYmVjYXVzZVxuICAgW2NhbWxfbWFrZV9hcnJheV0gYXNzdW1lcyB0aGF0IG9ubHkgYSBbZmxvYXRdIHZhbHVlIGNhbiBoYXZlIHRhZ1xuICAgW0RvdWJsZV90YWddLlxuXG4gICBXZSBoYXZlIHRvIHVzZSB0aGUgYnVpbHQtaW4gdHlwZSBjb25zdHJ1Y3RvciBbbGF6eV90XSB0b1xuICAgbGV0IHRoZSBjb21waWxlciBpbXBsZW1lbnQgdGhlIHNwZWNpYWwgdHlwaW5nIGFuZCBjb21waWxhdGlvblxuICAgcnVsZXMgZm9yIHRoZSBbbGF6eV0ga2V5d29yZC5cbiopXG5cbnR5cGUgJ2EgdCA9ICdhIENhbWxpbnRlcm5hbExhenkudFxuXG5leGNlcHRpb24gVW5kZWZpbmVkID0gQ2FtbGludGVybmFsTGF6eS5VbmRlZmluZWRcblxuZXh0ZXJuYWwgbWFrZV9mb3J3YXJkIDogJ2EgLT4gJ2EgbGF6eV90ID0gXCJjYW1sX2xhenlfbWFrZV9mb3J3YXJkXCJcblxuZXh0ZXJuYWwgZm9yY2UgOiAnYSB0IC0+ICdhID0gXCIlbGF6eV9mb3JjZVwiXG5cblxubGV0IGZvcmNlX3ZhbCA9IENhbWxpbnRlcm5hbExhenkuZm9yY2VfdmFsXG5cbmxldCBmcm9tX2Z1biAoZiA6IHVuaXQgLT4gJ2FyZykgPVxuICBsZXQgeCA9IE9iai5uZXdfYmxvY2sgT2JqLmxhenlfdGFnIDEgaW5cbiAgT2JqLnNldF9maWVsZCB4IDAgKE9iai5yZXByIGYpO1xuICAoT2JqLm9iaiB4IDogJ2FyZyB0KVxuXG5sZXQgZnJvbV92YWwgKHYgOiAnYXJnKSA9XG4gIGxldCB0ID0gT2JqLnRhZyAoT2JqLnJlcHIgdikgaW5cbiAgaWYgdCA9IE9iai5mb3J3YXJkX3RhZyB8fCB0ID0gT2JqLmxhenlfdGFnIHx8IHQgPSBPYmouZG91YmxlX3RhZyB0aGVuIGJlZ2luXG4gICAgbWFrZV9mb3J3YXJkIHZcbiAgZW5kIGVsc2UgYmVnaW5cbiAgICAoT2JqLm1hZ2ljIHYgOiAnYXJnIHQpXG4gIGVuZFxuXG5cbmxldCBpc192YWwgKGwgOiAnYXJnIHQpID0gT2JqLnRhZyAoT2JqLnJlcHIgbCkgPD4gT2JqLmxhenlfdGFnXG5cbmxldCBsYXp5X2Zyb21fZnVuID0gZnJvbV9mdW5cblxubGV0IGxhenlfZnJvbV92YWwgPSBmcm9tX3ZhbFxuXG5sZXQgbGF6eV9pc192YWwgPSBpc192YWxcblxuXG5sZXQgbWFwIGYgeCA9XG4gIGxhenkgKGYgKGZvcmNlIHgpKVxuXG5sZXQgbWFwX3ZhbCBmIHggPVxuICBpZiBpc192YWwgeFxuICB0aGVuIGxhenlfZnJvbV92YWwgKGYgKGZvcmNlIHgpKVxuICBlbHNlIGxhenkgKGYgKGZvcmNlIHgpKVxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICBEYW5pZWwgZGUgUmF1Z2xhdWRyZSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NyBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG50eXBlICdhIHQgPSAnYSBjZWxsIG9wdGlvblxuYW5kICdhIGNlbGwgPSB7IG11dGFibGUgY291bnQgOiBpbnQ7IG11dGFibGUgZGF0YSA6ICdhIGRhdGEgfVxuYW5kICdhIGRhdGEgPVxuICAgIFNlbXB0eVxuICB8IFNjb25zIG9mICdhICogJ2EgZGF0YVxuICB8IFNhcHAgb2YgJ2EgZGF0YSAqICdhIGRhdGFcbiAgfCBTbGF6eSBvZiAnYSBkYXRhIExhenkudFxuICB8IFNnZW4gb2YgJ2EgZ2VuXG4gIHwgU2J1ZmZpbyA6IGJ1ZmZpbyAtPiBjaGFyIGRhdGFcbmFuZCAnYSBnZW4gPSB7IG11dGFibGUgY3VyciA6ICdhIG9wdGlvbiBvcHRpb247IGZ1bmMgOiBpbnQgLT4gJ2Egb3B0aW9uIH1cbmFuZCBidWZmaW8gPVxuICB7IGljIDogaW5fY2hhbm5lbDsgYnVmZiA6IGJ5dGVzOyBtdXRhYmxlIGxlbiA6IGludDsgbXV0YWJsZSBpbmQgOiBpbnQgfVxuXG5leGNlcHRpb24gRmFpbHVyZVxuZXhjZXB0aW9uIEVycm9yIG9mIHN0cmluZ1xuXG5sZXQgY291bnQgPSBmdW5jdGlvblxuICB8IE5vbmUgLT4gMFxuICB8IFNvbWUgeyBjb3VudCB9IC0+IGNvdW50XG5sZXQgZGF0YSA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiBTZW1wdHlcbiAgfCBTb21lIHsgZGF0YSB9IC0+IGRhdGFcblxubGV0IGZpbGxfYnVmZiBiID1cbiAgYi5sZW4gPC0gaW5wdXQgYi5pYyBiLmJ1ZmYgMCAoQnl0ZXMubGVuZ3RoIGIuYnVmZik7IGIuaW5kIDwtIDBcblxuXG5sZXQgcmVjIGdldF9kYXRhIDogdHlwZSB2LiBpbnQgLT4gdiBkYXRhIC0+IHYgZGF0YSA9IGZ1biBjb3VudCBkIC0+IG1hdGNoIGQgd2l0aFxuICgqIFJldHVybnMgZWl0aGVyIFNlbXB0eSBvciBTY29ucyhhLCBfKSBldmVuIHdoZW4gZCBpcyBhIGdlbmVyYXRvclxuICAgIG9yIGEgYnVmZmVyLiBJbiB0aG9zZSBjYXNlcywgdGhlIGl0ZW0gYSBpcyBzZWVuIGFzIGV4dHJhY3RlZCBmcm9tXG4gdGhlIGdlbmVyYXRvci9idWZmZXIuXG4gVGhlIGNvdW50IHBhcmFtZXRlciBpcyB1c2VkIGZvciBjYWxsaW5nIGBTZ2VuLWZ1bmN0aW9ucycuICAqKVxuICAgU2VtcHR5IHwgU2NvbnMgKF8sIF8pIC0+IGRcbiB8IFNhcHAgKGQxLCBkMikgLT5cbiAgICAgYmVnaW4gbWF0Y2ggZ2V0X2RhdGEgY291bnQgZDEgd2l0aFxuICAgICAgIFNjb25zIChhLCBkMTEpIC0+IFNjb25zIChhLCBTYXBwIChkMTEsIGQyKSlcbiAgICAgfCBTZW1wdHkgLT4gZ2V0X2RhdGEgY291bnQgZDJcbiAgICAgfCBfIC0+IGFzc2VydCBmYWxzZVxuICAgICBlbmRcbiB8IFNnZW4ge2N1cnIgPSBTb21lIE5vbmV9IC0+IFNlbXB0eVxuIHwgU2dlbiAoe2N1cnIgPSBTb21lKFNvbWUgYSl9IGFzIGcpIC0+XG4gICAgIGcuY3VyciA8LSBOb25lOyBTY29ucyhhLCBkKVxuIHwgU2dlbiBnIC0+XG4gICAgIGJlZ2luIG1hdGNoIGcuZnVuYyBjb3VudCB3aXRoXG4gICAgICAgTm9uZSAtPiBnLmN1cnIgPC0gU29tZShOb25lKTsgU2VtcHR5XG4gICAgIHwgU29tZSBhIC0+IFNjb25zKGEsIGQpXG4gICAgICAgICAoKiBXYXJuaW5nOiBhbnlvbmUgdXNpbmcgZyB0aGlua3MgdGhhdCBhbiBpdGVtIGhhcyBiZWVuIHJlYWQgKilcbiAgICAgZW5kXG4gfCBTYnVmZmlvIGIgLT5cbiAgICAgaWYgYi5pbmQgPj0gYi5sZW4gdGhlbiBmaWxsX2J1ZmYgYjtcbiAgICAgaWYgYi5sZW4gPT0gMCB0aGVuIFNlbXB0eSBlbHNlXG4gICAgICAgbGV0IHIgPSBCeXRlcy51bnNhZmVfZ2V0IGIuYnVmZiBiLmluZCBpblxuICAgICAgICgqIFdhcm5pbmc6IGFueW9uZSB1c2luZyBnIHRoaW5rcyB0aGF0IGFuIGl0ZW0gaGFzIGJlZW4gcmVhZCAqKVxuICAgICAgIGIuaW5kIDwtIHN1Y2MgYi5pbmQ7IFNjb25zKHIsIGQpXG4gfCBTbGF6eSBmIC0+IGdldF9kYXRhIGNvdW50IChMYXp5LmZvcmNlIGYpXG5cblxubGV0IHJlYyBwZWVrX2RhdGEgOiB0eXBlIHYuIHYgY2VsbCAtPiB2IG9wdGlvbiA9IGZ1biBzIC0+XG4gKCogY29uc3VsdCB0aGUgZmlyc3QgaXRlbSBvZiBzICopXG4gbWF0Y2ggcy5kYXRhIHdpdGhcbiAgIFNlbXB0eSAtPiBOb25lXG4gfCBTY29ucyAoYSwgXykgLT4gU29tZSBhXG4gfCBTYXBwIChfLCBfKSAtPlxuICAgICBiZWdpbiBtYXRjaCBnZXRfZGF0YSBzLmNvdW50IHMuZGF0YSB3aXRoXG4gICAgICAgU2NvbnMoYSwgXykgYXMgZCAtPiBzLmRhdGEgPC0gZDsgU29tZSBhXG4gICAgIHwgU2VtcHR5IC0+IE5vbmVcbiAgICAgfCBfIC0+IGFzc2VydCBmYWxzZVxuICAgICBlbmRcbiB8IFNsYXp5IGYgLT4gcy5kYXRhIDwtIChMYXp5LmZvcmNlIGYpOyBwZWVrX2RhdGEgc1xuIHwgU2dlbiB7Y3VyciA9IFNvbWUgYX0gLT4gYVxuIHwgU2dlbiBnIC0+IGxldCB4ID0gZy5mdW5jIHMuY291bnQgaW4gZy5jdXJyIDwtIFNvbWUgeDsgeFxuIHwgU2J1ZmZpbyBiIC0+XG4gICAgIGlmIGIuaW5kID49IGIubGVuIHRoZW4gZmlsbF9idWZmIGI7XG4gICAgIGlmIGIubGVuID09IDAgdGhlbiBiZWdpbiBzLmRhdGEgPC0gU2VtcHR5OyBOb25lIGVuZFxuICAgICBlbHNlIFNvbWUgKEJ5dGVzLnVuc2FmZV9nZXQgYi5idWZmIGIuaW5kKVxuXG5cbmxldCBwZWVrID0gZnVuY3Rpb25cbiAgfCBOb25lIC0+IE5vbmVcbiAgfCBTb21lIHMgLT4gcGVla19kYXRhIHNcblxuXG5sZXQgcmVjIGp1bmtfZGF0YSA6IHR5cGUgdi4gdiBjZWxsIC0+IHVuaXQgPSBmdW4gcyAtPlxuICBtYXRjaCBzLmRhdGEgd2l0aFxuICAgIFNjb25zIChfLCBkKSAtPiBzLmNvdW50IDwtIChzdWNjIHMuY291bnQpOyBzLmRhdGEgPC0gZFxuICB8IFNnZW4gKHtjdXJyID0gU29tZSBffSBhcyBnKSAtPiBzLmNvdW50IDwtIChzdWNjIHMuY291bnQpOyBnLmN1cnIgPC0gTm9uZVxuICB8IFNidWZmaW8gYiAtPlxuICAgICAgaWYgYi5pbmQgPj0gYi5sZW4gdGhlbiBmaWxsX2J1ZmYgYjtcbiAgICAgIGlmIGIubGVuID09IDAgdGhlbiBzLmRhdGEgPC0gU2VtcHR5XG4gICAgICBlbHNlIChzLmNvdW50IDwtIChzdWNjIHMuY291bnQpOyBiLmluZCA8LSBzdWNjIGIuaW5kKVxuICB8IF8gLT5cbiAgICAgIG1hdGNoIHBlZWtfZGF0YSBzIHdpdGhcbiAgICAgICAgTm9uZSAtPiAoKVxuICAgICAgfCBTb21lIF8gLT4ganVua19kYXRhIHNcblxuXG5sZXQganVuayA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiAoKVxuICB8IFNvbWUgZGF0YSAtPiBqdW5rX2RhdGEgZGF0YVxuXG5sZXQgcmVjIG5nZXRfZGF0YSBuIHMgPVxuICBpZiBuIDw9IDAgdGhlbiBbXSwgcy5kYXRhLCAwXG4gIGVsc2VcbiAgICBtYXRjaCBwZWVrX2RhdGEgcyB3aXRoXG4gICAgICBTb21lIGEgLT5cbiAgICAgICAganVua19kYXRhIHM7XG4gICAgICAgIGxldCAoYWwsIGQsIGspID0gbmdldF9kYXRhIChwcmVkIG4pIHMgaW4gYSA6OiBhbCwgU2NvbnMgKGEsIGQpLCBzdWNjIGtcbiAgICB8IE5vbmUgLT4gW10sIHMuZGF0YSwgMFxuXG5cbmxldCBucGVla19kYXRhIG4gcyA9XG4gIGxldCAoYWwsIGQsIGxlbikgPSBuZ2V0X2RhdGEgbiBzIGluXG4gIHMuY291bnQgPC0gKHMuY291bnQgLSBsZW4pO1xuICBzLmRhdGEgPC0gZDtcbiAgYWxcblxuXG5sZXQgbnBlZWsgbiA9IGZ1bmN0aW9uXG4gIHwgTm9uZSAtPiBbXVxuICB8IFNvbWUgZCAtPiBucGVla19kYXRhIG4gZFxuXG5sZXQgbmV4dCBzID1cbiAgbWF0Y2ggcGVlayBzIHdpdGhcbiAgICBTb21lIGEgLT4ganVuayBzOyBhXG4gIHwgTm9uZSAtPiByYWlzZSBGYWlsdXJlXG5cblxubGV0IGVtcHR5IHMgPVxuICBtYXRjaCBwZWVrIHMgd2l0aFxuICAgIFNvbWUgXyAtPiByYWlzZSBGYWlsdXJlXG4gIHwgTm9uZSAtPiAoKVxuXG5cbmxldCBpdGVyIGYgc3RybSA9XG4gIGxldCByZWMgZG9fcmVjICgpID1cbiAgICBtYXRjaCBwZWVrIHN0cm0gd2l0aFxuICAgICAgU29tZSBhIC0+IGp1bmsgc3RybTsgaWdub3JlKGYgYSk7IGRvX3JlYyAoKVxuICAgIHwgTm9uZSAtPiAoKVxuICBpblxuICBkb19yZWMgKClcblxuXG4oKiBTdHJlYW0gYnVpbGRpbmcgZnVuY3Rpb25zICopXG5cbmxldCBmcm9tIGYgPSBTb21lIHtjb3VudCA9IDA7IGRhdGEgPSBTZ2VuIHtjdXJyID0gTm9uZTsgZnVuYyA9IGZ9fVxuXG5sZXQgb2ZfbGlzdCBsID1cbiAgU29tZSB7Y291bnQgPSAwOyBkYXRhID0gTGlzdC5mb2xkX3JpZ2h0IChmdW4geCBsIC0+IFNjb25zICh4LCBsKSkgbCBTZW1wdHl9XG5cblxubGV0IG9mX3N0cmluZyBzID1cbiAgbGV0IGNvdW50ID0gcmVmIDAgaW5cbiAgZnJvbSAoZnVuIF8gLT5cbiAgICAoKiBXZSBjYW5ub3QgdXNlIHRoZSBpbmRleCBwYXNzZWQgYnkgdGhlIFtmcm9tXSBmdW5jdGlvbiBkaXJlY3RseVxuICAgICAgIGJlY2F1c2UgaXQgcmV0dXJucyB0aGUgY3VycmVudCBzdHJlYW0gY291bnQsIHdpdGggYWJzb2x1dGVseSBub1xuICAgICAgIGd1YXJhbnRlZSB0aGF0IGl0IHdpbGwgc3RhcnQgZnJvbSAwLiBGb3IgZXhhbXBsZSwgaW4gdGhlIGNhc2VcbiAgICAgICBvZiBbU3RyZWFtLmljb25zICdjJyAoU3RyZWFtLmZyb21fc3RyaW5nIFwiYWJcIildLCB0aGUgZmlyc3RcbiAgICAgICBhY2Nlc3MgdG8gdGhlIHN0cmluZyB3aWxsIGJlIG1hZGUgd2l0aCBjb3VudCBbMV0gYWxyZWFkeS5cbiAgICAqKVxuICAgIGxldCBjID0gIWNvdW50IGluXG4gICAgaWYgYyA8IFN0cmluZy5sZW5ndGggc1xuICAgIHRoZW4gKGluY3IgY291bnQ7IFNvbWUgcy5bY10pXG4gICAgZWxzZSBOb25lKVxuXG5cbmxldCBvZl9ieXRlcyBzID1cbiAgbGV0IGNvdW50ID0gcmVmIDAgaW5cbiAgZnJvbSAoZnVuIF8gLT5cbiAgICBsZXQgYyA9ICFjb3VudCBpblxuICAgIGlmIGMgPCBCeXRlcy5sZW5ndGggc1xuICAgIHRoZW4gKGluY3IgY291bnQ7IFNvbWUgKEJ5dGVzLmdldCBzIGMpKVxuICAgIGVsc2UgTm9uZSlcblxuXG5sZXQgb2ZfY2hhbm5lbCBpYyA9XG4gIFNvbWUge2NvdW50ID0gMDtcbiAgICAgICAgZGF0YSA9IFNidWZmaW8ge2ljID0gaWM7IGJ1ZmYgPSBCeXRlcy5jcmVhdGUgNDA5NjsgbGVuID0gMDsgaW5kID0gMH19XG5cblxuKCogU3RyZWFtIGV4cHJlc3Npb25zIGJ1aWxkZXJzICopXG5cbmxldCBpYXBwIGkgcyA9IFNvbWUge2NvdW50ID0gMDsgZGF0YSA9IFNhcHAgKGRhdGEgaSwgZGF0YSBzKX1cbmxldCBpY29ucyBpIHMgPSBTb21lIHtjb3VudCA9IDA7IGRhdGEgPSBTY29ucyAoaSwgZGF0YSBzKX1cbmxldCBpc2luZyBpID0gU29tZSB7Y291bnQgPSAwOyBkYXRhID0gU2NvbnMgKGksIFNlbXB0eSl9XG5cbmxldCBsYXBwIGYgcyA9XG4gIFNvbWUge2NvdW50ID0gMDsgZGF0YSA9IFNsYXp5IChsYXp5KFNhcHAgKGRhdGEgKGYgKCkpLCBkYXRhIHMpKSl9XG5cbmxldCBsY29ucyBmIHMgPSBTb21lIHtjb3VudCA9IDA7IGRhdGEgPSBTbGF6eSAobGF6eShTY29ucyAoZiAoKSwgZGF0YSBzKSkpfVxubGV0IGxzaW5nIGYgPSBTb21lIHtjb3VudCA9IDA7IGRhdGEgPSBTbGF6eSAobGF6eShTY29ucyAoZiAoKSwgU2VtcHR5KSkpfVxuXG5sZXQgc2VtcHR5ID0gTm9uZVxubGV0IHNsYXp5IGYgPSBTb21lIHtjb3VudCA9IDA7IGRhdGEgPSBTbGF6eSAobGF6eShkYXRhIChmICgpKSkpfVxuXG4oKiBGb3IgZGVidWdnaW5nIHVzZSAqKVxuXG5sZXQgcmVjIGR1bXAgOiB0eXBlIHYuICh2IC0+IHVuaXQpIC0+IHYgdCAtPiB1bml0ID0gZnVuIGYgcyAtPlxuICBwcmludF9zdHJpbmcgXCJ7Y291bnQgPSBcIjtcbiAgcHJpbnRfaW50IChjb3VudCBzKTtcbiAgcHJpbnRfc3RyaW5nIFwiOyBkYXRhID0gXCI7XG4gIGR1bXBfZGF0YSBmIChkYXRhIHMpO1xuICBwcmludF9zdHJpbmcgXCJ9XCI7XG4gIHByaW50X25ld2xpbmUgKClcbmFuZCBkdW1wX2RhdGEgOiB0eXBlIHYuICh2IC0+IHVuaXQpIC0+IHYgZGF0YSAtPiB1bml0ID0gZnVuIGYgLT5cbiAgZnVuY3Rpb25cbiAgICBTZW1wdHkgLT4gcHJpbnRfc3RyaW5nIFwiU2VtcHR5XCJcbiAgfCBTY29ucyAoYSwgZCkgLT5cbiAgICAgIHByaW50X3N0cmluZyBcIlNjb25zIChcIjtcbiAgICAgIGYgYTtcbiAgICAgIHByaW50X3N0cmluZyBcIiwgXCI7XG4gICAgICBkdW1wX2RhdGEgZiBkO1xuICAgICAgcHJpbnRfc3RyaW5nIFwiKVwiXG4gIHwgU2FwcCAoZDEsIGQyKSAtPlxuICAgICAgcHJpbnRfc3RyaW5nIFwiU2FwcCAoXCI7XG4gICAgICBkdW1wX2RhdGEgZiBkMTtcbiAgICAgIHByaW50X3N0cmluZyBcIiwgXCI7XG4gICAgICBkdW1wX2RhdGEgZiBkMjtcbiAgICAgIHByaW50X3N0cmluZyBcIilcIlxuICB8IFNsYXp5IF8gLT4gcHJpbnRfc3RyaW5nIFwiU2xhenlcIlxuICB8IFNnZW4gXyAtPiBwcmludF9zdHJpbmcgXCJTZ2VuXCJcbiAgfCBTYnVmZmlvIF8gLT4gcHJpbnRfc3RyaW5nIFwiU2J1ZmZpb1wiXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICBQaWVycmUgV2VpcyBhbmQgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk5IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIEV4dGVuc2libGUgYnVmZmVycyAqKVxuXG50eXBlIHQgPVxuIHttdXRhYmxlIGJ1ZmZlciA6IGJ5dGVzO1xuICBtdXRhYmxlIHBvc2l0aW9uIDogaW50O1xuICBtdXRhYmxlIGxlbmd0aCA6IGludDtcbiAgaW5pdGlhbF9idWZmZXIgOiBieXRlc31cbigqIEludmFyaWFudHM6IGFsbCBwYXJ0cyBvZiB0aGUgY29kZSBwcmVzZXJ2ZSB0aGUgaW52YXJpYW50cyB0aGF0OlxuICAgLSBbMCA8PSBiLnBvc2l0aW9uIDw9IGIubGVuZ3RoXVxuICAgLSBbYi5sZW5ndGggPSBCeXRlcy5sZW5ndGggYi5idWZmZXJdXG5cbiAgIE5vdGUgaW4gcGFydGljdWxhciB0aGF0IFtiLnBvc2l0aW9uID0gYi5sZW5ndGhdIGlzIGxlZ2FsLFxuICAgaXQgbWVhbnMgdGhhdCB0aGUgYnVmZmVyIGlzIGZ1bGwgYW5kIHdpbGwgaGF2ZSB0byBiZSBleHRlbmRlZFxuICAgYmVmb3JlIGFueSBmdXJ0aGVyIGFkZGl0aW9uLiAqKVxuXG5sZXQgY3JlYXRlIG4gPVxuIGxldCBuID0gaWYgbiA8IDEgdGhlbiAxIGVsc2UgbiBpblxuIGxldCBuID0gaWYgbiA+IFN5cy5tYXhfc3RyaW5nX2xlbmd0aCB0aGVuIFN5cy5tYXhfc3RyaW5nX2xlbmd0aCBlbHNlIG4gaW5cbiBsZXQgcyA9IEJ5dGVzLmNyZWF0ZSBuIGluXG4ge2J1ZmZlciA9IHM7IHBvc2l0aW9uID0gMDsgbGVuZ3RoID0gbjsgaW5pdGlhbF9idWZmZXIgPSBzfVxuXG5sZXQgY29udGVudHMgYiA9IEJ5dGVzLnN1Yl9zdHJpbmcgYi5idWZmZXIgMCBiLnBvc2l0aW9uXG5sZXQgdG9fYnl0ZXMgYiA9IEJ5dGVzLnN1YiBiLmJ1ZmZlciAwIGIucG9zaXRpb25cblxubGV0IHN1YiBiIG9mcyBsZW4gPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gYi5wb3NpdGlvbiAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiQnVmZmVyLnN1YlwiXG4gIGVsc2UgQnl0ZXMuc3ViX3N0cmluZyBiLmJ1ZmZlciBvZnMgbGVuXG5cblxubGV0IGJsaXQgc3JjIHNyY29mZiBkc3QgZHN0b2ZmIGxlbiA9XG4gIGlmIGxlbiA8IDAgfHwgc3Jjb2ZmIDwgMCB8fCBzcmNvZmYgPiBzcmMucG9zaXRpb24gLSBsZW5cbiAgICAgICAgICAgICB8fCBkc3RvZmYgPCAwIHx8IGRzdG9mZiA+IChCeXRlcy5sZW5ndGggZHN0KSAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiQnVmZmVyLmJsaXRcIlxuICBlbHNlXG4gICAgQnl0ZXMudW5zYWZlX2JsaXQgc3JjLmJ1ZmZlciBzcmNvZmYgZHN0IGRzdG9mZiBsZW5cblxuXG5sZXQgbnRoIGIgb2ZzID1cbiAgaWYgb2ZzIDwgMCB8fCBvZnMgPj0gYi5wb3NpdGlvbiB0aGVuXG4gICBpbnZhbGlkX2FyZyBcIkJ1ZmZlci5udGhcIlxuICBlbHNlIEJ5dGVzLnVuc2FmZV9nZXQgYi5idWZmZXIgb2ZzXG5cblxubGV0IGxlbmd0aCBiID0gYi5wb3NpdGlvblxuXG5sZXQgY2xlYXIgYiA9IGIucG9zaXRpb24gPC0gMFxuXG5sZXQgcmVzZXQgYiA9XG4gIGIucG9zaXRpb24gPC0gMDtcbiAgYi5idWZmZXIgPC0gYi5pbml0aWFsX2J1ZmZlcjtcbiAgYi5sZW5ndGggPC0gQnl0ZXMubGVuZ3RoIGIuYnVmZmVyXG5cbigqIFtyZXNpemUgYiBtb3JlXSBlbnN1cmVzIHRoYXQgW2IucG9zaXRpb24gKyBtb3JlIDw9IGIubGVuZ3RoXSBob2xkc1xuICAgYnkgZHluYW1pY2FsbHkgZXh0ZW5kaW5nIFtiLmJ1ZmZlcl0gaWYgbmVjZXNzYXJ5IC0tIGFuZCB0aHVzXG4gICBpbmNyZWFzaW5nIFtiLmxlbmd0aF0uXG5cbiAgIEluIHBhcnRpY3VsYXIsIGFmdGVyIFtyZXNpemUgYiBtb3JlXSBpcyBjYWxsZWQsIGEgZGlyZWN0IGFjY2VzcyBvZlxuICAgc2l6ZSBbbW9yZV0gYXQgW2IucG9zaXRpb25dIHdpbGwgYWx3YXlzIGJlIGluLWJvdW5kcywgc28gdGhhdFxuICAgKHVuc2FmZV97Z2V0LHNldH0pIG1heSBiZSB1c2VkIGZvciBwZXJmb3JtYW5jZS5cbiopXG5sZXQgcmVzaXplIGIgbW9yZSA9XG4gIGxldCBvbGRfcG9zID0gYi5wb3NpdGlvbiBpblxuICBsZXQgb2xkX2xlbiA9IGIubGVuZ3RoIGluXG4gIGxldCBuZXdfbGVuID0gcmVmIG9sZF9sZW4gaW5cbiAgd2hpbGUgb2xkX3BvcyArIG1vcmUgPiAhbmV3X2xlbiBkbyBuZXdfbGVuIDo9IDIgKiAhbmV3X2xlbiBkb25lO1xuICBpZiAhbmV3X2xlbiA+IFN5cy5tYXhfc3RyaW5nX2xlbmd0aCB0aGVuIGJlZ2luXG4gICAgaWYgb2xkX3BvcyArIG1vcmUgPD0gU3lzLm1heF9zdHJpbmdfbGVuZ3RoXG4gICAgdGhlbiBuZXdfbGVuIDo9IFN5cy5tYXhfc3RyaW5nX2xlbmd0aFxuICAgIGVsc2UgZmFpbHdpdGggXCJCdWZmZXIuYWRkOiBjYW5ub3QgZ3JvdyBidWZmZXJcIlxuICBlbmQ7XG4gIGxldCBuZXdfYnVmZmVyID0gQnl0ZXMuY3JlYXRlICFuZXdfbGVuIGluXG4gICgqIFBSIzYxNDg6IGxldCdzIGtlZXAgdXNpbmcgW2JsaXRdIHJhdGhlciB0aGFuIFt1bnNhZmVfYmxpdF0gaW5cbiAgICAgdGhpcyB0cmlja3kgZnVuY3Rpb24gdGhhdCBpcyBzbG93IGFueXdheS4gKilcbiAgQnl0ZXMuYmxpdCBiLmJ1ZmZlciAwIG5ld19idWZmZXIgMCBiLnBvc2l0aW9uO1xuICBiLmJ1ZmZlciA8LSBuZXdfYnVmZmVyO1xuICBiLmxlbmd0aCA8LSAhbmV3X2xlbjtcbiAgYXNzZXJ0IChiLnBvc2l0aW9uICsgbW9yZSA8PSBiLmxlbmd0aCk7XG4gIGFzc2VydCAob2xkX3BvcyArIG1vcmUgPD0gYi5sZW5ndGgpO1xuICAoKVxuICAoKiBOb3RlOiB0aGVyZSBhcmUgdmFyaW91cyBzaXR1YXRpb25zIChwcmVlbXB0aXZlIHRocmVhZHMsIHNpZ25hbHMgYW5kXG4gICAgIGdjIGZpbmFsaXplcnMpIHdoZXJlIE9DYW1sIGNvZGUgbWF5IGJlIHJ1biBhc3luY2hyb25vdXNseTsgaW5cbiAgICAgcGFydGljdWxhciwgdGhlcmUgbWF5IGJlIGEgcmFjZSB3aXRoIGFub3RoZXIgdXNlciBvZiBbYl0sIGNoYW5naW5nXG4gICAgIGl0cyBtdXRhYmxlIGZpZWxkcyBpbiB0aGUgbWlkZGxlIG9mIHRoZSBbcmVzaXplXSBjYWxsLiBUaGUgQnVmZmVyXG4gICAgIG1vZHVsZSBkb2VzIG5vdCBwcm92aWRlIGFueSBjb3JyZWN0bmVzcyBndWFyYW50ZWUgaWYgdGhhdCBoYXBwZW5zLFxuICAgICBidXQgd2UgbXVzdCBzdGlsbCBlbnN1cmUgdGhhdCB0aGUgZGF0YXN0cnVjdHVyZSBpbnZhcmlhbnRzIGhvbGQgZm9yXG4gICAgIG1lbW9yeS1zYWZldHkgLS0gYXMgd2UgcGxhbiB0byB1c2UgW3Vuc2FmZV97Z2V0LHNldH1dLlxuXG4gICAgIFRoZXJlIGFyZSB0d28gcG90ZW50aWFsIGFsbG9jYXRpb24gcG9pbnRzIGluIHRoaXMgZnVuY3Rpb24sXG4gICAgIFtyZWZdIGFuZCBbQnl0ZXMuY3JlYXRlXSwgYnV0IGFsbCByZWFkcyBhbmQgd3JpdGVzIHRvIHRoZSBmaWVsZHNcbiAgICAgb2YgW2JdIGhhcHBlbiBiZWZvcmUgYm90aCBvZiB0aGVtIG9yIGFmdGVyIGJvdGggb2YgdGhlbS5cblxuICAgICBXZSB0aGVyZWZvcmUgYXNzdW1lIHRoYXQgW2IucG9zaXRpb25dIG1heSBjaGFuZ2UgYXQgdGhlc2UgYWxsb2NhdGlvbnMsXG4gICAgIGFuZCBjaGVjayB0aGF0IHRoZSBbYi5wb3NpdGlvbiArIG1vcmUgPD0gYi5sZW5ndGhdIHBvc3Rjb25kaXRpb25cbiAgICAgaG9sZHMgZm9yIGJvdGggdmFsdWVzIG9mIFtiLnBvc2l0aW9uXSwgYmVmb3JlIG9yIGFmdGVyIHRoZSBmdW5jdGlvblxuICAgICBpcyBjYWxsZWQuIE1vcmUgcHJlY2lzZWx5LCB0aGUgZm9sbG93aW5nIGludmFyaWFudHMgbXVzdCBob2xkIGlmIHRoZVxuICAgICBmdW5jdGlvbiByZXR1cm5zIGNvcnJlY3RseSwgaW4gYWRkaXRpb24gdG8gdGhlIHVzdWFsIGJ1ZmZlciBpbnZhcmlhbnRzOlxuICAgICAtIFtvbGQoYi5wb3NpdGlvbikgKyBtb3JlIDw9IG5ldyhiLmxlbmd0aCldXG4gICAgIC0gW25ldyhiLnBvc2l0aW9uKSArIG1vcmUgPD0gbmV3KGIubGVuZ3RoKV1cbiAgICAgLSBbb2xkKGIubGVuZ3RoKSA8PSBuZXcoYi5sZW5ndGgpXVxuXG4gICAgIE5vdGU6IFtiLnBvc2l0aW9uICsgbW9yZSA8PSBvbGQoYi5sZW5ndGgpXSBkb2VzICpub3QqXG4gICAgIGhvbGQgaW4gZ2VuZXJhbCwgYXMgaXQgaXMgcHJlY2lzZWx5IHRoZSBjYXNlIHdoZXJlIHlvdSBuZWVkXG4gICAgIHRvIGNhbGwgW3Jlc2l6ZV0gdG8gaW5jcmVhc2UgW2IubGVuZ3RoXS5cblxuICAgICBOb3RlOiBbYXNzZXJ0XSBhYm92ZSBkb2VzIG5vdCBtZWFuIHRoYXQgd2Uga25vdyB0aGUgY29uZGl0aW9uc1xuICAgICBhbHdheXMgaG9sZCwgYnV0IHRoYXQgdGhlIGZ1bmN0aW9uIG1heSByZXR1cm4gY29ycmVjdGx5XG4gICAgIG9ubHkgaWYgdGhleSBob2xkLlxuXG4gICAgIE5vdGU6IHRoZSBvdGhlciBmdW5jdGlvbnMgaW4gdGhpcyBtb2R1bGUgZG9lcyBub3QgbmVlZFxuICAgICB0byBiZSBjaGVja2VkIHdpdGggdGhpcyBsZXZlbCBvZiBzY3J1dGlueSwgZ2l2ZW4gdGhhdCB0aGV5XG4gICAgIHJlYWQvd3JpdGUgdGhlIGJ1ZmZlciBpbW1lZGlhdGVseSBhZnRlciBjaGVja2luZyB0aGF0XG4gICAgIFtiLnBvc2l0aW9uICsgbW9yZSA8PSBiLmxlbmd0aF0gaG9sZCBvciBjYWxsaW5nIFtyZXNpemVdLlxuICAqKVxuXG5sZXQgYWRkX2NoYXIgYiBjID1cbiAgbGV0IHBvcyA9IGIucG9zaXRpb24gaW5cbiAgaWYgcG9zID49IGIubGVuZ3RoIHRoZW4gcmVzaXplIGIgMTtcbiAgQnl0ZXMudW5zYWZlX3NldCBiLmJ1ZmZlciBwb3MgYztcbiAgYi5wb3NpdGlvbiA8LSBwb3MgKyAxXG5cbiBsZXQgYWRkX3V0Zl84X3VjaGFyIGIgdSA9IG1hdGNoIFVjaGFyLnRvX2ludCB1IHdpdGhcbiB8IHUgd2hlbiB1IDwgMCAtPiBhc3NlcnQgZmFsc2VcbiB8IHUgd2hlbiB1IDw9IDB4MDA3RiAtPlxuICAgICBhZGRfY2hhciBiIChDaGFyLnVuc2FmZV9jaHIgdSlcbiB8IHUgd2hlbiB1IDw9IDB4MDdGRiAtPlxuICAgICBsZXQgcG9zID0gYi5wb3NpdGlvbiBpblxuICAgICBpZiBwb3MgKyAyID4gYi5sZW5ndGggdGhlbiByZXNpemUgYiAyO1xuICAgICBCeXRlcy51bnNhZmVfc2V0IGIuYnVmZmVyIChwb3MgICAgKVxuICAgICAgIChDaGFyLnVuc2FmZV9jaHIgKDB4QzAgbG9yICh1IGxzciA2KSkpO1xuICAgICBCeXRlcy51bnNhZmVfc2V0IGIuYnVmZmVyIChwb3MgKyAxKVxuICAgICAgIChDaGFyLnVuc2FmZV9jaHIgKDB4ODAgbG9yICh1IGxhbmQgMHgzRikpKTtcbiAgICAgYi5wb3NpdGlvbiA8LSBwb3MgKyAyXG4gfCB1IHdoZW4gdSA8PSAweEZGRkYgLT5cbiAgICAgbGV0IHBvcyA9IGIucG9zaXRpb24gaW5cbiAgICAgaWYgcG9zICsgMyA+IGIubGVuZ3RoIHRoZW4gcmVzaXplIGIgMztcbiAgICAgQnl0ZXMudW5zYWZlX3NldCBiLmJ1ZmZlciAocG9zICAgIClcbiAgICAgICAoQ2hhci51bnNhZmVfY2hyICgweEUwIGxvciAodSBsc3IgMTIpKSk7XG4gICAgIEJ5dGVzLnVuc2FmZV9zZXQgYi5idWZmZXIgKHBvcyArIDEpXG4gICAgICAgKENoYXIudW5zYWZlX2NociAoMHg4MCBsb3IgKCh1IGxzciA2KSBsYW5kIDB4M0YpKSk7XG4gICAgIEJ5dGVzLnVuc2FmZV9zZXQgYi5idWZmZXIgKHBvcyArIDIpXG4gICAgICAgKENoYXIudW5zYWZlX2NociAoMHg4MCBsb3IgKHUgbGFuZCAweDNGKSkpO1xuICAgICBiLnBvc2l0aW9uIDwtIHBvcyArIDNcbiB8IHUgd2hlbiB1IDw9IDB4MTBGRkZGIC0+XG4gICAgIGxldCBwb3MgPSBiLnBvc2l0aW9uIGluXG4gICAgIGlmIHBvcyArIDQgPiBiLmxlbmd0aCB0aGVuIHJlc2l6ZSBiIDQ7XG4gICAgIEJ5dGVzLnVuc2FmZV9zZXQgYi5idWZmZXIgKHBvcyAgICApXG4gICAgICAgKENoYXIudW5zYWZlX2NociAoMHhGMCBsb3IgKHUgbHNyIDE4KSkpO1xuICAgICBCeXRlcy51bnNhZmVfc2V0IGIuYnVmZmVyIChwb3MgKyAxKVxuICAgICAgIChDaGFyLnVuc2FmZV9jaHIgKDB4ODAgbG9yICgodSBsc3IgMTIpIGxhbmQgMHgzRikpKTtcbiAgICAgQnl0ZXMudW5zYWZlX3NldCBiLmJ1ZmZlciAocG9zICsgMilcbiAgICAgICAoQ2hhci51bnNhZmVfY2hyICgweDgwIGxvciAoKHUgbHNyIDYpIGxhbmQgMHgzRikpKTtcbiAgICAgQnl0ZXMudW5zYWZlX3NldCBiLmJ1ZmZlciAocG9zICsgMylcbiAgICAgICAoQ2hhci51bnNhZmVfY2hyICgweDgwIGxvciAodSBsYW5kIDB4M0YpKSk7XG4gICAgIGIucG9zaXRpb24gPC0gcG9zICsgNFxuIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxuIGxldCBhZGRfdXRmXzE2YmVfdWNoYXIgYiB1ID0gbWF0Y2ggVWNoYXIudG9faW50IHUgd2l0aFxuIHwgdSB3aGVuIHUgPCAwIC0+IGFzc2VydCBmYWxzZVxuIHwgdSB3aGVuIHUgPD0gMHhGRkZGIC0+XG4gICAgIGxldCBwb3MgPSBiLnBvc2l0aW9uIGluXG4gICAgIGlmIHBvcyArIDIgPiBiLmxlbmd0aCB0aGVuIHJlc2l6ZSBiIDI7XG4gICAgIEJ5dGVzLnVuc2FmZV9zZXQgYi5idWZmZXIgKHBvcyAgICApIChDaGFyLnVuc2FmZV9jaHIgKHUgbHNyIDgpKTtcbiAgICAgQnl0ZXMudW5zYWZlX3NldCBiLmJ1ZmZlciAocG9zICsgMSkgKENoYXIudW5zYWZlX2NociAodSBsYW5kIDB4RkYpKTtcbiAgICAgYi5wb3NpdGlvbiA8LSBwb3MgKyAyXG4gfCB1IHdoZW4gdSA8PSAweDEwRkZGRiAtPlxuICAgICBsZXQgdScgPSB1IC0gMHgxMDAwMCBpblxuICAgICBsZXQgaGkgPSAweEQ4MDAgbG9yICh1JyBsc3IgMTApIGluXG4gICAgIGxldCBsbyA9IDB4REMwMCBsb3IgKHUnIGxhbmQgMHgzRkYpIGluXG4gICAgIGxldCBwb3MgPSBiLnBvc2l0aW9uIGluXG4gICAgIGlmIHBvcyArIDQgPiBiLmxlbmd0aCB0aGVuIHJlc2l6ZSBiIDQ7XG4gICAgIEJ5dGVzLnVuc2FmZV9zZXQgYi5idWZmZXIgKHBvcyAgICApIChDaGFyLnVuc2FmZV9jaHIgKGhpIGxzciA4KSk7XG4gICAgIEJ5dGVzLnVuc2FmZV9zZXQgYi5idWZmZXIgKHBvcyArIDEpIChDaGFyLnVuc2FmZV9jaHIgKGhpIGxhbmQgMHhGRikpO1xuICAgICBCeXRlcy51bnNhZmVfc2V0IGIuYnVmZmVyIChwb3MgKyAyKSAoQ2hhci51bnNhZmVfY2hyIChsbyBsc3IgOCkpO1xuICAgICBCeXRlcy51bnNhZmVfc2V0IGIuYnVmZmVyIChwb3MgKyAzKSAoQ2hhci51bnNhZmVfY2hyIChsbyBsYW5kIDB4RkYpKTtcbiAgICAgYi5wb3NpdGlvbiA8LSBwb3MgKyA0XG4gfCBfIC0+IGFzc2VydCBmYWxzZVxuXG4gbGV0IGFkZF91dGZfMTZsZV91Y2hhciBiIHUgPSBtYXRjaCBVY2hhci50b19pbnQgdSB3aXRoXG4gfCB1IHdoZW4gdSA8IDAgLT4gYXNzZXJ0IGZhbHNlXG4gfCB1IHdoZW4gdSA8PSAweEZGRkYgLT5cbiAgICAgbGV0IHBvcyA9IGIucG9zaXRpb24gaW5cbiAgICAgaWYgcG9zICsgMiA+IGIubGVuZ3RoIHRoZW4gcmVzaXplIGIgMjtcbiAgICAgQnl0ZXMudW5zYWZlX3NldCBiLmJ1ZmZlciAocG9zICAgICkgKENoYXIudW5zYWZlX2NociAodSBsYW5kIDB4RkYpKTtcbiAgICAgQnl0ZXMudW5zYWZlX3NldCBiLmJ1ZmZlciAocG9zICsgMSkgKENoYXIudW5zYWZlX2NociAodSBsc3IgOCkpO1xuICAgICBiLnBvc2l0aW9uIDwtIHBvcyArIDJcbiB8IHUgd2hlbiB1IDw9IDB4MTBGRkZGIC0+XG4gICAgIGxldCB1JyA9IHUgLSAweDEwMDAwIGluXG4gICAgIGxldCBoaSA9IDB4RDgwMCBsb3IgKHUnIGxzciAxMCkgaW5cbiAgICAgbGV0IGxvID0gMHhEQzAwIGxvciAodScgbGFuZCAweDNGRikgaW5cbiAgICAgbGV0IHBvcyA9IGIucG9zaXRpb24gaW5cbiAgICAgaWYgcG9zICsgNCA+IGIubGVuZ3RoIHRoZW4gcmVzaXplIGIgNDtcbiAgICAgQnl0ZXMudW5zYWZlX3NldCBiLmJ1ZmZlciAocG9zICAgICkgKENoYXIudW5zYWZlX2NociAoaGkgbGFuZCAweEZGKSk7XG4gICAgIEJ5dGVzLnVuc2FmZV9zZXQgYi5idWZmZXIgKHBvcyArIDEpIChDaGFyLnVuc2FmZV9jaHIgKGhpIGxzciA4KSk7XG4gICAgIEJ5dGVzLnVuc2FmZV9zZXQgYi5idWZmZXIgKHBvcyArIDIpIChDaGFyLnVuc2FmZV9jaHIgKGxvIGxhbmQgMHhGRikpO1xuICAgICBCeXRlcy51bnNhZmVfc2V0IGIuYnVmZmVyIChwb3MgKyAzKSAoQ2hhci51bnNhZmVfY2hyIChsbyBsc3IgOCkpO1xuICAgICBiLnBvc2l0aW9uIDwtIHBvcyArIDRcbiB8IF8gLT4gYXNzZXJ0IGZhbHNlXG5cbmxldCBhZGRfc3Vic3RyaW5nIGIgcyBvZmZzZXQgbGVuID1cbiAgaWYgb2Zmc2V0IDwgMCB8fCBsZW4gPCAwIHx8IG9mZnNldCA+IFN0cmluZy5sZW5ndGggcyAtIGxlblxuICB0aGVuIGludmFsaWRfYXJnIFwiQnVmZmVyLmFkZF9zdWJzdHJpbmcvYWRkX3N1YmJ5dGVzXCI7XG4gIGxldCBuZXdfcG9zaXRpb24gPSBiLnBvc2l0aW9uICsgbGVuIGluXG4gIGlmIG5ld19wb3NpdGlvbiA+IGIubGVuZ3RoIHRoZW4gcmVzaXplIGIgbGVuO1xuICBCeXRlcy51bnNhZmVfYmxpdF9zdHJpbmcgcyBvZmZzZXQgYi5idWZmZXIgYi5wb3NpdGlvbiBsZW47XG4gIGIucG9zaXRpb24gPC0gbmV3X3Bvc2l0aW9uXG5cbmxldCBhZGRfc3ViYnl0ZXMgYiBzIG9mZnNldCBsZW4gPVxuICBhZGRfc3Vic3RyaW5nIGIgKEJ5dGVzLnVuc2FmZV90b19zdHJpbmcgcykgb2Zmc2V0IGxlblxuXG5sZXQgYWRkX3N0cmluZyBiIHMgPVxuICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIGxldCBuZXdfcG9zaXRpb24gPSBiLnBvc2l0aW9uICsgbGVuIGluXG4gIGlmIG5ld19wb3NpdGlvbiA+IGIubGVuZ3RoIHRoZW4gcmVzaXplIGIgbGVuO1xuICBCeXRlcy51bnNhZmVfYmxpdF9zdHJpbmcgcyAwIGIuYnVmZmVyIGIucG9zaXRpb24gbGVuO1xuICBiLnBvc2l0aW9uIDwtIG5ld19wb3NpdGlvblxuXG5sZXQgYWRkX2J5dGVzIGIgcyA9IGFkZF9zdHJpbmcgYiAoQnl0ZXMudW5zYWZlX3RvX3N0cmluZyBzKVxuXG5sZXQgYWRkX2J1ZmZlciBiIGJzID1cbiAgYWRkX3N1YmJ5dGVzIGIgYnMuYnVmZmVyIDAgYnMucG9zaXRpb25cblxuKCogdGhpcyAocHJpdmF0ZSkgZnVuY3Rpb24gY291bGQgbW92ZSBpbnRvIHRoZSBzdGFuZGFyZCBsaWJyYXJ5ICopXG5sZXQgcmVhbGx5X2lucHV0X3VwX3RvIGljIGJ1ZiBvZnMgbGVuID1cbiAgbGV0IHJlYyBsb29wIGljIGJ1ZiB+YWxyZWFkeV9yZWFkIH5vZnMgfnRvX3JlYWQgPVxuICAgIGlmIHRvX3JlYWQgPSAwIHRoZW4gYWxyZWFkeV9yZWFkXG4gICAgZWxzZSBiZWdpblxuICAgICAgbGV0IHIgPSBpbnB1dCBpYyBidWYgb2ZzIHRvX3JlYWQgaW5cbiAgICAgIGlmIHIgPSAwIHRoZW4gYWxyZWFkeV9yZWFkXG4gICAgICBlbHNlIGJlZ2luXG4gICAgICAgIGxldCBhbHJlYWR5X3JlYWQgPSBhbHJlYWR5X3JlYWQgKyByIGluXG4gICAgICAgIGxldCBvZnMgPSBvZnMgKyByIGluXG4gICAgICAgIGxldCB0b19yZWFkID0gdG9fcmVhZCAtIHIgaW5cbiAgICAgICAgbG9vcCBpYyBidWYgfmFscmVhZHlfcmVhZCB+b2ZzIH50b19yZWFkXG4gICAgICBlbmRcbiAgICBlbmRcbiAgaW4gbG9vcCBpYyBidWYgfmFscmVhZHlfcmVhZDowIH5vZnMgfnRvX3JlYWQ6bGVuXG5cblxubGV0IHVuc2FmZV9hZGRfY2hhbm5lbF91cF90byBiIGljIGxlbiA9XG4gIGlmIGIucG9zaXRpb24gKyBsZW4gPiBiLmxlbmd0aCB0aGVuIHJlc2l6ZSBiIGxlbjtcbiAgbGV0IG4gPSByZWFsbHlfaW5wdXRfdXBfdG8gaWMgYi5idWZmZXIgYi5wb3NpdGlvbiBsZW4gaW5cbiAgKCogVGhlIGFzc2VydGlvbiBiZWxvdyBtYXkgZmFpbCBpbiB3ZWlyZCBzY2VuYXJpbyB3aGVyZVxuICAgICB0aHJlYWRlZC9maW5hbGl6ZXIgY29kZSwgcnVuIGFzeW5jaHJvbm91c2x5IGR1cmluZyB0aGVcbiAgICAgW3JlYWxseV9pbnB1dF91cF90b10gY2FsbCwgcmFjZXMgb24gdGhlIGJ1ZmZlcjsgd2UgZG9uJ3QgZW5zdXJlXG4gICAgIGNvcnJlY3RuZXNzIGluIHRoaXMgY2FzZSwgYnV0IG5lZWQgdG8gcHJlc2VydmUgdGhlIGludmFyaWFudHMgZm9yXG4gICAgIG1lbW9yeS1zYWZldHkgKHNlZSBkaXNjdXNzaW9uIG9mIFtyZXNpemVdKS4gKilcbiAgYXNzZXJ0IChiLnBvc2l0aW9uICsgbiA8PSBiLmxlbmd0aCk7XG4gIGIucG9zaXRpb24gPC0gYi5wb3NpdGlvbiArIG47XG4gIG5cblxubGV0IGFkZF9jaGFubmVsIGIgaWMgbGVuID1cbiAgaWYgbGVuIDwgMCB8fCBsZW4gPiBTeXMubWF4X3N0cmluZ19sZW5ndGggdGhlbiAgICgqIFBSIzUwMDQgKilcbiAgICBpbnZhbGlkX2FyZyBcIkJ1ZmZlci5hZGRfY2hhbm5lbFwiO1xuICBsZXQgbiA9IHVuc2FmZV9hZGRfY2hhbm5lbF91cF90byBiIGljIGxlbiBpblxuICAoKiBJdCBpcyBpbnRlbnRpb25hbCB0aGF0IGEgY29uc3VtZXIgY2F0Y2hpbmcgRW5kX29mX2ZpbGVcbiAgICAgd2lsbCBzZWUgdGhlIGRhdGEgd3JpdHRlbiAoc2VlICM2NzE5LCAjNzEzNikuICopXG4gIGlmIG4gPCBsZW4gdGhlbiByYWlzZSBFbmRfb2ZfZmlsZTtcbiAgKClcblxubGV0IG91dHB1dF9idWZmZXIgb2MgYiA9XG4gIG91dHB1dCBvYyBiLmJ1ZmZlciAwIGIucG9zaXRpb25cblxubGV0IGNsb3NpbmcgPSBmdW5jdGlvblxuICB8ICcoJyAtPiAnKSdcbiAgfCAneycgLT4gJ30nXG4gIHwgXyAtPiBhc3NlcnQgZmFsc2VcblxuKCogb3BlbmluZyBhbmQgY2xvc2luZzogb3BlbiBhbmQgY2xvc2UgY2hhcmFjdGVycywgdHlwaWNhbGx5ICggYW5kIClcbiAgIGs6IGJhbGFuY2Ugb2Ygb3BlbmluZyBhbmQgY2xvc2luZyBjaGFyc1xuICAgczogdGhlIHN0cmluZyB3aGVyZSB3ZSBhcmUgc2VhcmNoaW5nXG4gICBzdGFydDogdGhlIGluZGV4IHdoZXJlIHdlIHN0YXJ0IHRoZSBzZWFyY2guICopXG5sZXQgYWR2YW5jZV90b19jbG9zaW5nIG9wZW5pbmcgY2xvc2luZyBrIHMgc3RhcnQgPVxuICBsZXQgcmVjIGFkdmFuY2UgayBpIGxpbSA9XG4gICAgaWYgaSA+PSBsaW0gdGhlbiByYWlzZSBOb3RfZm91bmQgZWxzZVxuICAgIGlmIHMuW2ldID0gb3BlbmluZyB0aGVuIGFkdmFuY2UgKGsgKyAxKSAoaSArIDEpIGxpbSBlbHNlXG4gICAgaWYgcy5baV0gPSBjbG9zaW5nIHRoZW5cbiAgICAgIGlmIGsgPSAwIHRoZW4gaSBlbHNlIGFkdmFuY2UgKGsgLSAxKSAoaSArIDEpIGxpbVxuICAgIGVsc2UgYWR2YW5jZSBrIChpICsgMSkgbGltIGluXG4gIGFkdmFuY2UgayBzdGFydCAoU3RyaW5nLmxlbmd0aCBzKVxuXG5sZXQgYWR2YW5jZV90b19ub25fYWxwaGEgcyBzdGFydCA9XG4gIGxldCByZWMgYWR2YW5jZSBpIGxpbSA9XG4gICAgaWYgaSA+PSBsaW0gdGhlbiBsaW0gZWxzZVxuICAgIG1hdGNoIHMuW2ldIHdpdGhcbiAgICB8ICdhJyAuLiAneicgfCAnQScgLi4gJ1onIHwgJzAnIC4uICc5JyB8ICdfJyAtPiBhZHZhbmNlIChpICsgMSkgbGltXG4gICAgfCBfIC0+IGkgaW5cbiAgYWR2YW5jZSBzdGFydCAoU3RyaW5nLmxlbmd0aCBzKVxuXG4oKiBXZSBhcmUganVzdCBhdCB0aGUgYmVnaW5uaW5nIG9mIGFuIGlkZW50IGluIHMsIHN0YXJ0aW5nIGF0IHN0YXJ0LiAqKVxubGV0IGZpbmRfaWRlbnQgcyBzdGFydCBsaW0gPVxuICBpZiBzdGFydCA+PSBsaW0gdGhlbiByYWlzZSBOb3RfZm91bmQgZWxzZVxuICBtYXRjaCBzLltzdGFydF0gd2l0aFxuICAoKiBQYXJlbnRoZXNpemVkIGlkZW50ID8gKilcbiAgfCAnKCcgfCAneycgYXMgYyAtPlxuICAgICBsZXQgbmV3X3N0YXJ0ID0gc3RhcnQgKyAxIGluXG4gICAgIGxldCBzdG9wID0gYWR2YW5jZV90b19jbG9zaW5nIGMgKGNsb3NpbmcgYykgMCBzIG5ld19zdGFydCBpblxuICAgICBTdHJpbmcuc3ViIHMgbmV3X3N0YXJ0IChzdG9wIC0gc3RhcnQgLSAxKSwgc3RvcCArIDFcbiAgKCogUmVndWxhciBpZGVudCAqKVxuICB8IF8gLT5cbiAgICAgbGV0IHN0b3AgPSBhZHZhbmNlX3RvX25vbl9hbHBoYSBzIChzdGFydCArIDEpIGluXG4gICAgIFN0cmluZy5zdWIgcyBzdGFydCAoc3RvcCAtIHN0YXJ0KSwgc3RvcFxuXG4oKiBTdWJzdGl0dXRlICRpZGVudCwgJChpZGVudCksIG9yICR7aWRlbnR9IGluIHMsXG4gICAgYWNjb3JkaW5nIHRvIHRoZSBmdW5jdGlvbiBtYXBwaW5nIGYuICopXG5sZXQgYWRkX3N1YnN0aXR1dGUgYiBmIHMgPVxuICBsZXQgbGltID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIGxldCByZWMgc3Vic3QgcHJldmlvdXMgaSA9XG4gICAgaWYgaSA8IGxpbSB0aGVuIGJlZ2luXG4gICAgICBtYXRjaCBzLltpXSB3aXRoXG4gICAgICB8ICckJyBhcyBjdXJyZW50IHdoZW4gcHJldmlvdXMgPSAnXFxcXCcgLT5cbiAgICAgICAgIGFkZF9jaGFyIGIgY3VycmVudDtcbiAgICAgICAgIHN1YnN0ICcgJyAoaSArIDEpXG4gICAgICB8ICckJyAtPlxuICAgICAgICAgbGV0IGogPSBpICsgMSBpblxuICAgICAgICAgbGV0IGlkZW50LCBuZXh0X2kgPSBmaW5kX2lkZW50IHMgaiBsaW0gaW5cbiAgICAgICAgIGFkZF9zdHJpbmcgYiAoZiBpZGVudCk7XG4gICAgICAgICBzdWJzdCAnICcgbmV4dF9pXG4gICAgICB8IGN1cnJlbnQgd2hlbiBwcmV2aW91cyA9PSAnXFxcXCcgLT5cbiAgICAgICAgIGFkZF9jaGFyIGIgJ1xcXFwnO1xuICAgICAgICAgYWRkX2NoYXIgYiBjdXJyZW50O1xuICAgICAgICAgc3Vic3QgJyAnIChpICsgMSlcbiAgICAgIHwgJ1xcXFwnIGFzIGN1cnJlbnQgLT5cbiAgICAgICAgIHN1YnN0IGN1cnJlbnQgKGkgKyAxKVxuICAgICAgfCBjdXJyZW50IC0+XG4gICAgICAgICBhZGRfY2hhciBiIGN1cnJlbnQ7XG4gICAgICAgICBzdWJzdCBjdXJyZW50IChpICsgMSlcbiAgICBlbmQgZWxzZVxuICAgIGlmIHByZXZpb3VzID0gJ1xcXFwnIHRoZW4gYWRkX2NoYXIgYiBwcmV2aW91cyBpblxuICBzdWJzdCAnICcgMFxuXG5sZXQgdHJ1bmNhdGUgYiBsZW4gPVxuICAgIGlmIGxlbiA8IDAgfHwgbGVuID4gbGVuZ3RoIGIgdGhlblxuICAgICAgaW52YWxpZF9hcmcgXCJCdWZmZXIudHJ1bmNhdGVcIlxuICAgIGVsc2VcbiAgICAgIGIucG9zaXRpb24gPC0gbGVuXG5cbigqKiB7MSBJdGVyYXRvcnN9ICopXG5cbmxldCB0b19zZXEgYiA9XG4gIGxldCByZWMgYXV4IGkgKCkgPVxuICAgICgqIE5vdGUgdGhhdCBiLnBvc2l0aW9uIGlzIG5vdCBhIGNvbnN0YW50IGFuZCBjYW5ub3QgYmUgbGlmdGVkIG91dCBvZiBhdXggKilcbiAgICBpZiBpID49IGIucG9zaXRpb24gdGhlbiBTZXEuTmlsXG4gICAgZWxzZVxuICAgICAgbGV0IHggPSBCeXRlcy51bnNhZmVfZ2V0IGIuYnVmZmVyIGkgaW5cbiAgICAgIFNlcS5Db25zICh4LCBhdXggKGkrMSkpXG4gIGluXG4gIGF1eCAwXG5cbmxldCB0b19zZXFpIGIgPVxuICBsZXQgcmVjIGF1eCBpICgpID1cbiAgICAoKiBOb3RlIHRoYXQgYi5wb3NpdGlvbiBpcyBub3QgYSBjb25zdGFudCBhbmQgY2Fubm90IGJlIGxpZnRlZCBvdXQgb2YgYXV4ICopXG4gICAgaWYgaSA+PSBiLnBvc2l0aW9uIHRoZW4gU2VxLk5pbFxuICAgIGVsc2VcbiAgICAgIGxldCB4ID0gQnl0ZXMudW5zYWZlX2dldCBiLmJ1ZmZlciBpIGluXG4gICAgICBTZXEuQ29ucyAoKGkseCksIGF1eCAoaSsxKSlcbiAgaW5cbiAgYXV4IDBcblxubGV0IGFkZF9zZXEgYiBzZXEgPSBTZXEuaXRlciAoYWRkX2NoYXIgYikgc2VxXG5cbmxldCBvZl9zZXEgaSA9XG4gIGxldCBiID0gY3JlYXRlIDMyIGluXG4gIGFkZF9zZXEgYiBpO1xuICBiXG5cbigqKiB7NiBCaW5hcnkgZW5jb2Rpbmcgb2YgaW50ZWdlcnN9ICopXG5cbmV4dGVybmFsIHVuc2FmZV9zZXRfaW50OCA6IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdCA9IFwiJWJ5dGVzX3Vuc2FmZV9zZXRcIlxuZXh0ZXJuYWwgdW5zYWZlX3NldF9pbnQxNiA6IGJ5dGVzIC0+IGludCAtPiBpbnQgLT4gdW5pdCA9IFwiJWNhbWxfYnl0ZXNfc2V0MTZ1XCJcbmV4dGVybmFsIHVuc2FmZV9zZXRfaW50MzIgOiBieXRlcyAtPiBpbnQgLT4gaW50MzIgLT4gdW5pdCA9IFwiJWNhbWxfYnl0ZXNfc2V0MzJ1XCJcbmV4dGVybmFsIHVuc2FmZV9zZXRfaW50NjQgOiBieXRlcyAtPiBpbnQgLT4gaW50NjQgLT4gdW5pdCA9IFwiJWNhbWxfYnl0ZXNfc2V0NjR1XCJcbmV4dGVybmFsIHN3YXAxNiA6IGludCAtPiBpbnQgPSBcIiVic3dhcDE2XCJcbmV4dGVybmFsIHN3YXAzMiA6IGludDMyIC0+IGludDMyID0gXCIlYnN3YXBfaW50MzJcIlxuZXh0ZXJuYWwgc3dhcDY0IDogaW50NjQgLT4gaW50NjQgPSBcIiVic3dhcF9pbnQ2NFwiXG5cblxubGV0IGFkZF9pbnQ4IGIgeCA9XG4gIGxldCBuZXdfcG9zaXRpb24gPSBiLnBvc2l0aW9uICsgMSBpblxuICBpZiBuZXdfcG9zaXRpb24gPiBiLmxlbmd0aCB0aGVuIHJlc2l6ZSBiIDE7XG4gIHVuc2FmZV9zZXRfaW50OCBiLmJ1ZmZlciBiLnBvc2l0aW9uIHg7XG4gIGIucG9zaXRpb24gPC0gbmV3X3Bvc2l0aW9uXG5cbmxldCBhZGRfaW50MTZfbmUgYiB4ID1cbiAgbGV0IG5ld19wb3NpdGlvbiA9IGIucG9zaXRpb24gKyAyIGluXG4gIGlmIG5ld19wb3NpdGlvbiA+IGIubGVuZ3RoIHRoZW4gcmVzaXplIGIgMjtcbiAgdW5zYWZlX3NldF9pbnQxNiBiLmJ1ZmZlciBiLnBvc2l0aW9uIHg7XG4gIGIucG9zaXRpb24gPC0gbmV3X3Bvc2l0aW9uXG5cbmxldCBhZGRfaW50MzJfbmUgYiB4ID1cbiAgbGV0IG5ld19wb3NpdGlvbiA9IGIucG9zaXRpb24gKyA0IGluXG4gIGlmIG5ld19wb3NpdGlvbiA+IGIubGVuZ3RoIHRoZW4gcmVzaXplIGIgNDtcbiAgdW5zYWZlX3NldF9pbnQzMiBiLmJ1ZmZlciBiLnBvc2l0aW9uIHg7XG4gIGIucG9zaXRpb24gPC0gbmV3X3Bvc2l0aW9uXG5cbmxldCBhZGRfaW50NjRfbmUgYiB4ID1cbiAgbGV0IG5ld19wb3NpdGlvbiA9IGIucG9zaXRpb24gKyA4IGluXG4gIGlmIG5ld19wb3NpdGlvbiA+IGIubGVuZ3RoIHRoZW4gcmVzaXplIGIgODtcbiAgdW5zYWZlX3NldF9pbnQ2NCBiLmJ1ZmZlciBiLnBvc2l0aW9uIHg7XG4gIGIucG9zaXRpb24gPC0gbmV3X3Bvc2l0aW9uXG5cbmxldCBhZGRfaW50MTZfbGUgYiB4ID1cbiAgYWRkX2ludDE2X25lIGIgKGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4gc3dhcDE2IHggZWxzZSB4KVxuXG5sZXQgYWRkX2ludDE2X2JlIGIgeCA9XG4gIGFkZF9pbnQxNl9uZSBiIChpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHggZWxzZSBzd2FwMTYgeClcblxubGV0IGFkZF9pbnQzMl9sZSBiIHggPVxuICBhZGRfaW50MzJfbmUgYiAoaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiBzd2FwMzIgeCBlbHNlIHgpXG5cbmxldCBhZGRfaW50MzJfYmUgYiB4ID1cbiAgYWRkX2ludDMyX25lIGIgKGlmIFN5cy5iaWdfZW5kaWFuIHRoZW4geCBlbHNlIHN3YXAzMiB4KVxuXG5sZXQgYWRkX2ludDY0X2xlIGIgeCA9XG4gIGFkZF9pbnQ2NF9uZSBiIChpZiBTeXMuYmlnX2VuZGlhbiB0aGVuIHN3YXA2NCB4IGVsc2UgeClcblxubGV0IGFkZF9pbnQ2NF9iZSBiIHggPVxuICBhZGRfaW50NjRfbmUgYiAoaWYgU3lzLmJpZ19lbmRpYW4gdGhlbiB4IGVsc2Ugc3dhcDY0IHgpXG5cbmxldCBhZGRfdWludDggPSBhZGRfaW50OFxubGV0IGFkZF91aW50MTZfbmUgPSBhZGRfaW50MTZfbmVcbmxldCBhZGRfdWludDE2X2xlID0gYWRkX2ludDE2X2xlXG5sZXQgYWRkX3VpbnQxNl9iZSA9IGFkZF9pbnQxNl9iZVxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBYYXZpZXIgTGVyb3kgYW5kIFBpZXJyZSBXZWlzLCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG5vcGVuIENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljc1xub3BlbiBDYW1saW50ZXJuYWxGb3JtYXRcblxubGV0IGtmcHJpbnRmIGsgbyAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIG1ha2VfcHJpbnRmIChmdW4gYWNjIC0+IG91dHB1dF9hY2MgbyBhY2M7IGsgbykgRW5kX29mX2FjYyBmbXRcbmxldCBrYnByaW50ZiBrIGIgKEZvcm1hdCAoZm10LCBfKSkgPVxuICBtYWtlX3ByaW50ZiAoZnVuIGFjYyAtPiBidWZwdXRfYWNjIGIgYWNjOyBrIGIpIEVuZF9vZl9hY2MgZm10XG5sZXQgaWtmcHJpbnRmIGsgb2MgKEZvcm1hdCAoZm10LCBfKSkgPVxuICBtYWtlX2lwcmludGYgayBvYyBmbXRcbmxldCBpa2JwcmludGYgPSBpa2ZwcmludGZcblxubGV0IGZwcmludGYgb2MgZm10ID0ga2ZwcmludGYgaWdub3JlIG9jIGZtdFxubGV0IGJwcmludGYgYiBmbXQgPSBrYnByaW50ZiBpZ25vcmUgYiBmbXRcbmxldCBpZnByaW50ZiBvYyBmbXQgPSBpa2ZwcmludGYgaWdub3JlIG9jIGZtdFxubGV0IGlicHJpbnRmIGIgZm10ID0gaWticHJpbnRmIGlnbm9yZSBiIGZtdFxubGV0IHByaW50ZiBmbXQgPSBmcHJpbnRmIHN0ZG91dCBmbXRcbmxldCBlcHJpbnRmIGZtdCA9IGZwcmludGYgc3RkZXJyIGZtdFxuXG5sZXQga3NwcmludGYgayAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIGxldCBrJyBhY2MgPVxuICAgIGxldCBidWYgPSBCdWZmZXIuY3JlYXRlIDY0IGluXG4gICAgc3RycHV0X2FjYyBidWYgYWNjO1xuICAgIGsgKEJ1ZmZlci5jb250ZW50cyBidWYpIGluXG4gIG1ha2VfcHJpbnRmIGsnIEVuZF9vZl9hY2MgZm10XG5cbmxldCBzcHJpbnRmIGZtdCA9IGtzcHJpbnRmIChmdW4gcyAtPiBzKSBmbXRcblxubGV0IGtwcmludGYgPSBrc3ByaW50ZlxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgIERhbWllbiBEb2xpZ2V6LCBwcm9qZXQgUGFyYSwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG50eXBlIGtleSA9IHN0cmluZ1xudHlwZSBkb2MgPSBzdHJpbmdcbnR5cGUgdXNhZ2VfbXNnID0gc3RyaW5nXG50eXBlIGFub25fZnVuID0gKHN0cmluZyAtPiB1bml0KVxuXG50eXBlIHNwZWMgPVxuICB8IFVuaXQgb2YgKHVuaXQgLT4gdW5pdCkgICAgICgqIENhbGwgdGhlIGZ1bmN0aW9uIHdpdGggdW5pdCBhcmd1bWVudCAqKVxuICB8IEJvb2wgb2YgKGJvb2wgLT4gdW5pdCkgICAgICgqIENhbGwgdGhlIGZ1bmN0aW9uIHdpdGggYSBib29sIGFyZ3VtZW50ICopXG4gIHwgU2V0IG9mIGJvb2wgcmVmICAgICAgICAgICAgKCogU2V0IHRoZSByZWZlcmVuY2UgdG8gdHJ1ZSAqKVxuICB8IENsZWFyIG9mIGJvb2wgcmVmICAgICAgICAgICgqIFNldCB0aGUgcmVmZXJlbmNlIHRvIGZhbHNlICopXG4gIHwgU3RyaW5nIG9mIChzdHJpbmcgLT4gdW5pdCkgKCogQ2FsbCB0aGUgZnVuY3Rpb24gd2l0aCBhIHN0cmluZyBhcmd1bWVudCAqKVxuICB8IFNldF9zdHJpbmcgb2Ygc3RyaW5nIHJlZiAgICgqIFNldCB0aGUgcmVmZXJlbmNlIHRvIHRoZSBzdHJpbmcgYXJndW1lbnQgKilcbiAgfCBJbnQgb2YgKGludCAtPiB1bml0KSAgICAgICAoKiBDYWxsIHRoZSBmdW5jdGlvbiB3aXRoIGFuIGludCBhcmd1bWVudCAqKVxuICB8IFNldF9pbnQgb2YgaW50IHJlZiAgICAgICAgICgqIFNldCB0aGUgcmVmZXJlbmNlIHRvIHRoZSBpbnQgYXJndW1lbnQgKilcbiAgfCBGbG9hdCBvZiAoZmxvYXQgLT4gdW5pdCkgICAoKiBDYWxsIHRoZSBmdW5jdGlvbiB3aXRoIGEgZmxvYXQgYXJndW1lbnQgKilcbiAgfCBTZXRfZmxvYXQgb2YgZmxvYXQgcmVmICAgICAoKiBTZXQgdGhlIHJlZmVyZW5jZSB0byB0aGUgZmxvYXQgYXJndW1lbnQgKilcbiAgfCBUdXBsZSBvZiBzcGVjIGxpc3QgICAgICAgICAoKiBUYWtlIHNldmVyYWwgYXJndW1lbnRzIGFjY29yZGluZyB0byB0aGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjIGxpc3QgKilcbiAgfCBTeW1ib2wgb2Ygc3RyaW5nIGxpc3QgKiAoc3RyaW5nIC0+IHVuaXQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogVGFrZSBvbmUgb2YgdGhlIHN5bWJvbHMgYXMgYXJndW1lbnQgYW5kXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbCB0aGUgZnVuY3Rpb24gd2l0aCB0aGUgc3ltYm9sLiAqKVxuICB8IFJlc3Qgb2YgKHN0cmluZyAtPiB1bml0KSAgICgqIFN0b3AgaW50ZXJwcmV0aW5nIGtleXdvcmRzIGFuZCBjYWxsIHRoZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHdpdGggZWFjaCByZW1haW5pbmcgYXJndW1lbnQgKilcbiAgfCBSZXN0X2FsbCBvZiAoc3RyaW5nIGxpc3QgLT4gdW5pdClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBTdG9wIGludGVycHJldGluZyBrZXl3b3JkcyBhbmQgY2FsbCB0aGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiB3aXRoIGFsbCByZW1haW5pbmcgYXJndW1lbnRzLiAqKVxuICB8IEV4cGFuZCBvZiAoc3RyaW5nIC0+IHN0cmluZyBhcnJheSkgKCogSWYgdGhlIHJlbWFpbmluZyBhcmd1bWVudHMgdG8gcHJvY2Vzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJlIG9mIHRoZSBmb3JtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbW1wiLWZvb1wiOyBcImFyZ1wiXSBAIHJlc3RdIHdoZXJlIFwiZm9vXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHJlZ2lzdGVyZWQgYXMgW0V4cGFuZCBmXSwgdGhlbiB0aGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50cyBbZiBcImFyZ1wiIEAgcmVzdF0gYXJlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZWQuIE9ubHkgYWxsb3dlZCBpblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BhcnNlX2FuZF9leHBhbmRfYXJndl9keW5hbWljXS4gKilcblxuZXhjZXB0aW9uIEJhZCBvZiBzdHJpbmdcbmV4Y2VwdGlvbiBIZWxwIG9mIHN0cmluZ1xuXG50eXBlIGVycm9yID1cbiAgfCBVbmtub3duIG9mIHN0cmluZ1xuICB8IFdyb25nIG9mIHN0cmluZyAqIHN0cmluZyAqIHN0cmluZyAgKCogb3B0aW9uLCBhY3R1YWwsIGV4cGVjdGVkICopXG4gIHwgTWlzc2luZyBvZiBzdHJpbmdcbiAgfCBNZXNzYWdlIG9mIHN0cmluZ1xuXG5leGNlcHRpb24gU3RvcCBvZiBlcnJvciAoKiB1c2VkIGludGVybmFsbHkgKilcblxub3BlbiBQcmludGZcblxubGV0IHJlYyBhc3NvYzMgeCBsID1cbiAgbWF0Y2ggbCB3aXRoXG4gIHwgW10gLT4gcmFpc2UgTm90X2ZvdW5kXG4gIHwgKHkxLCB5MiwgXykgOjogXyB3aGVuIHkxID0geCAtPiB5MlxuICB8IF8gOjogdCAtPiBhc3NvYzMgeCB0XG5cblxubGV0IHNwbGl0IHMgPVxuICBsZXQgaSA9IFN0cmluZy5pbmRleCBzICc9JyBpblxuICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIFN0cmluZy5zdWIgcyAwIGksIFN0cmluZy5zdWIgcyAoaSsxKSAobGVuLShpKzEpKVxuXG5cbmxldCBtYWtlX3N5bWxpc3QgcHJlZml4IHNlcCBzdWZmaXggbCA9XG4gIG1hdGNoIGwgd2l0aFxuICB8IFtdIC0+IFwiPG5vbmU+XCJcbiAgfCBoOjp0IC0+IChMaXN0LmZvbGRfbGVmdCAoZnVuIHggeSAtPiB4IF4gc2VwIF4geSkgKHByZWZpeCBeIGgpIHQpIF4gc3VmZml4XG5cblxubGV0IHByaW50X3NwZWMgYnVmIChrZXksIHNwZWMsIGRvYykgPVxuICBpZiBTdHJpbmcubGVuZ3RoIGRvYyA+IDAgdGhlblxuICAgIG1hdGNoIHNwZWMgd2l0aFxuICAgIHwgU3ltYm9sIChsLCBfKSAtPlxuICAgICAgICBicHJpbnRmIGJ1ZiBcIiAgJXMgJXMlc1xcblwiIGtleSAobWFrZV9zeW1saXN0IFwie1wiIFwifFwiIFwifVwiIGwpIGRvY1xuICAgIHwgXyAtPlxuICAgICAgICBicHJpbnRmIGJ1ZiBcIiAgJXMgJXNcXG5cIiBrZXkgZG9jXG5cblxubGV0IGhlbHBfYWN0aW9uICgpID0gcmFpc2UgKFN0b3AgKFVua25vd24gXCItaGVscFwiKSlcblxubGV0IGFkZF9oZWxwIHNwZWNsaXN0ID1cbiAgbGV0IGFkZDEgPVxuICAgIHRyeSBpZ25vcmUgKGFzc29jMyBcIi1oZWxwXCIgc3BlY2xpc3QpOyBbXVxuICAgIHdpdGggTm90X2ZvdW5kIC0+XG4gICAgICAgICAgICBbXCItaGVscFwiLCBVbml0IGhlbHBfYWN0aW9uLCBcIiBEaXNwbGF5IHRoaXMgbGlzdCBvZiBvcHRpb25zXCJdXG4gIGFuZCBhZGQyID1cbiAgICB0cnkgaWdub3JlIChhc3NvYzMgXCItLWhlbHBcIiBzcGVjbGlzdCk7IFtdXG4gICAgd2l0aCBOb3RfZm91bmQgLT5cbiAgICAgICAgICAgIFtcIi0taGVscFwiLCBVbml0IGhlbHBfYWN0aW9uLCBcIiBEaXNwbGF5IHRoaXMgbGlzdCBvZiBvcHRpb25zXCJdXG4gIGluXG4gIHNwZWNsaXN0IEAgKGFkZDEgQCBhZGQyKVxuXG5cbmxldCB1c2FnZV9iIGJ1ZiBzcGVjbGlzdCBlcnJtc2cgPVxuICBicHJpbnRmIGJ1ZiBcIiVzXFxuXCIgZXJybXNnO1xuICBMaXN0Lml0ZXIgKHByaW50X3NwZWMgYnVmKSAoYWRkX2hlbHAgc3BlY2xpc3QpXG5cblxubGV0IHVzYWdlX3N0cmluZyBzcGVjbGlzdCBlcnJtc2cgPVxuICBsZXQgYiA9IEJ1ZmZlci5jcmVhdGUgMjAwIGluXG4gIHVzYWdlX2IgYiBzcGVjbGlzdCBlcnJtc2c7XG4gIEJ1ZmZlci5jb250ZW50cyBiXG5cblxubGV0IHVzYWdlIHNwZWNsaXN0IGVycm1zZyA9XG4gIGVwcmludGYgXCIlc1wiICh1c2FnZV9zdHJpbmcgc3BlY2xpc3QgZXJybXNnKVxuXG5cbmxldCBjdXJyZW50ID0gcmVmIDBcblxubGV0IGJvb2xfb2Zfc3RyaW5nX29wdCB4ID1cbiAgdHJ5IFNvbWUgKGJvb2xfb2Zfc3RyaW5nIHgpXG4gIHdpdGggSW52YWxpZF9hcmd1bWVudCBfIC0+IE5vbmVcblxubGV0IGludF9vZl9zdHJpbmdfb3B0IHggPVxuICB0cnkgU29tZSAoaW50X29mX3N0cmluZyB4KVxuICB3aXRoIEZhaWx1cmUgXyAtPiBOb25lXG5cbmxldCBmbG9hdF9vZl9zdHJpbmdfb3B0IHggPVxuICB0cnkgU29tZSAoZmxvYXRfb2Zfc3RyaW5nIHgpXG4gIHdpdGggRmFpbHVyZSBfIC0+IE5vbmVcblxubGV0IHBhcnNlX2FuZF9leHBhbmRfYXJndl9keW5hbWljX2F1eCBhbGxvd19leHBhbmQgY3VycmVudCBhcmd2IHNwZWNsaXN0IGFub25mdW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJybXNnID1cbiAgbGV0IGluaXRwb3MgPSAhY3VycmVudCBpblxuICBsZXQgY29udmVydF9lcnJvciBlcnJvciA9XG4gICAgKCogY29udmVydCBhbiBpbnRlcm5hbCBlcnJvciB0byBhIEJhZC9IZWxwIGV4Y2VwdGlvblxuICAgICAgICpvciogYWRkIHRoZSBwcm9ncmFtIG5hbWUgYXMgYSBwcmVmaXggYW5kIHRoZSB1c2FnZSBtZXNzYWdlIGFzIGEgc3VmZml4XG4gICAgICAgdG8gYW4gdXNlci1yYWlzZWQgQmFkIGV4Y2VwdGlvbi5cbiAgICAqKVxuICAgIGxldCBiID0gQnVmZmVyLmNyZWF0ZSAyMDAgaW5cbiAgICBsZXQgcHJvZ25hbWUgPVxuICAgICAgaWYgaW5pdHBvcyA8IChBcnJheS5sZW5ndGggIWFyZ3YpIHRoZW4gIWFyZ3YuKGluaXRwb3MpIGVsc2UgXCIoPylcIiBpblxuICAgIGJlZ2luIG1hdGNoIGVycm9yIHdpdGhcbiAgICAgIHwgVW5rbm93biBcIi1oZWxwXCIgLT4gKClcbiAgICAgIHwgVW5rbm93biBcIi0taGVscFwiIC0+ICgpXG4gICAgICB8IFVua25vd24gcyAtPlxuICAgICAgICAgIGJwcmludGYgYiBcIiVzOiB1bmtub3duIG9wdGlvbiAnJXMnLlxcblwiIHByb2duYW1lIHNcbiAgICAgIHwgTWlzc2luZyBzIC0+XG4gICAgICAgICAgYnByaW50ZiBiIFwiJXM6IG9wdGlvbiAnJXMnIG5lZWRzIGFuIGFyZ3VtZW50LlxcblwiIHByb2duYW1lIHNcbiAgICAgIHwgV3JvbmcgKG9wdCwgYXJnLCBleHBlY3RlZCkgLT5cbiAgICAgICAgICBicHJpbnRmIGIgXCIlczogd3JvbmcgYXJndW1lbnQgJyVzJzsgb3B0aW9uICclcycgZXhwZWN0cyAlcy5cXG5cIlxuICAgICAgICAgICAgICAgICAgcHJvZ25hbWUgYXJnIG9wdCBleHBlY3RlZFxuICAgICAgfCBNZXNzYWdlIHMgLT4gKCogdXNlciBlcnJvciBtZXNzYWdlICopXG4gICAgICAgICAgYnByaW50ZiBiIFwiJXM6ICVzLlxcblwiIHByb2duYW1lIHNcbiAgICBlbmQ7XG4gICAgdXNhZ2VfYiBiICFzcGVjbGlzdCBlcnJtc2c7XG4gICAgaWYgZXJyb3IgPSBVbmtub3duIFwiLWhlbHBcIiB8fCBlcnJvciA9IFVua25vd24gXCItLWhlbHBcIlxuICAgIHRoZW4gSGVscCAoQnVmZmVyLmNvbnRlbnRzIGIpXG4gICAgZWxzZSBCYWQgKEJ1ZmZlci5jb250ZW50cyBiKVxuICBpblxuICBpbmNyIGN1cnJlbnQ7XG4gIHdoaWxlICFjdXJyZW50IDwgKEFycmF5Lmxlbmd0aCAhYXJndikgZG9cbiAgICBiZWdpbiB0cnlcbiAgICAgIGxldCBzID0gIWFyZ3YuKCFjdXJyZW50KSBpblxuICAgICAgaWYgU3RyaW5nLmxlbmd0aCBzID49IDEgJiYgcy5bMF0gPSAnLScgdGhlbiBiZWdpblxuICAgICAgICBsZXQgYWN0aW9uLCBmb2xsb3cgPVxuICAgICAgICAgIHRyeSBhc3NvYzMgcyAhc3BlY2xpc3QsIE5vbmVcbiAgICAgICAgICB3aXRoIE5vdF9mb3VuZCAtPlxuICAgICAgICAgIHRyeVxuICAgICAgICAgICAgbGV0IGtleXdvcmQsIGFyZyA9IHNwbGl0IHMgaW5cbiAgICAgICAgICAgIGFzc29jMyBrZXl3b3JkICFzcGVjbGlzdCwgU29tZSBhcmdcbiAgICAgICAgICB3aXRoIE5vdF9mb3VuZCAtPiByYWlzZSAoU3RvcCAoVW5rbm93biBzKSlcbiAgICAgICAgaW5cbiAgICAgICAgbGV0IG5vX2FyZyAoKSA9XG4gICAgICAgICAgbWF0Y2ggZm9sbG93IHdpdGhcbiAgICAgICAgICB8IE5vbmUgLT4gKClcbiAgICAgICAgICB8IFNvbWUgYXJnIC0+IHJhaXNlIChTdG9wIChXcm9uZyAocywgYXJnLCBcIm5vIGFyZ3VtZW50XCIpKSkgaW5cbiAgICAgICAgbGV0IGdldF9hcmcgKCkgPVxuICAgICAgICAgIG1hdGNoIGZvbGxvdyB3aXRoXG4gICAgICAgICAgfCBOb25lIC0+XG4gICAgICAgICAgICAgIGlmICFjdXJyZW50ICsgMSA8IChBcnJheS5sZW5ndGggIWFyZ3YpIHRoZW4gIWFyZ3YuKCFjdXJyZW50ICsgMSlcbiAgICAgICAgICAgICAgZWxzZSByYWlzZSAoU3RvcCAoTWlzc2luZyBzKSlcbiAgICAgICAgICB8IFNvbWUgYXJnIC0+IGFyZ1xuICAgICAgICBpblxuICAgICAgICBsZXQgY29uc3VtZV9hcmcgKCkgPVxuICAgICAgICAgIG1hdGNoIGZvbGxvdyB3aXRoXG4gICAgICAgICAgfCBOb25lIC0+IGluY3IgY3VycmVudFxuICAgICAgICAgIHwgU29tZSBfIC0+ICgpXG4gICAgICAgIGluXG4gICAgICAgIGxldCByZWMgdHJlYXRfYWN0aW9uID0gZnVuY3Rpb25cbiAgICAgICAgfCBVbml0IGYgLT4gbm9fYXJnICgpOyBmICgpO1xuICAgICAgICB8IEJvb2wgZiAtPlxuICAgICAgICAgICAgbGV0IGFyZyA9IGdldF9hcmcgKCkgaW5cbiAgICAgICAgICAgIGJlZ2luIG1hdGNoIGJvb2xfb2Zfc3RyaW5nX29wdCBhcmcgd2l0aFxuICAgICAgICAgICAgfCBOb25lIC0+IHJhaXNlIChTdG9wIChXcm9uZyAocywgYXJnLCBcImEgYm9vbGVhblwiKSkpXG4gICAgICAgICAgICB8IFNvbWUgcyAtPiBmIHNcbiAgICAgICAgICAgIGVuZDtcbiAgICAgICAgICAgIGNvbnN1bWVfYXJnICgpO1xuICAgICAgICB8IFNldCByIC0+IG5vX2FyZyAoKTsgciA6PSB0cnVlO1xuICAgICAgICB8IENsZWFyIHIgLT4gbm9fYXJnICgpOyByIDo9IGZhbHNlO1xuICAgICAgICB8IFN0cmluZyBmIC0+XG4gICAgICAgICAgICBsZXQgYXJnID0gZ2V0X2FyZyAoKSBpblxuICAgICAgICAgICAgZiBhcmc7XG4gICAgICAgICAgICBjb25zdW1lX2FyZyAoKTtcbiAgICAgICAgfCBTeW1ib2wgKHN5bWIsIGYpIC0+XG4gICAgICAgICAgICBsZXQgYXJnID0gZ2V0X2FyZyAoKSBpblxuICAgICAgICAgICAgaWYgTGlzdC5tZW0gYXJnIHN5bWIgdGhlbiBiZWdpblxuICAgICAgICAgICAgICBmIGFyZztcbiAgICAgICAgICAgICAgY29uc3VtZV9hcmcgKCk7XG4gICAgICAgICAgICBlbmQgZWxzZSBiZWdpblxuICAgICAgICAgICAgICByYWlzZSAoU3RvcCAoV3JvbmcgKHMsIGFyZywgXCJvbmUgb2Y6IFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeIChtYWtlX3N5bWxpc3QgXCJcIiBcIiBcIiBcIlwiIHN5bWIpKSkpXG4gICAgICAgICAgICBlbmRcbiAgICAgICAgfCBTZXRfc3RyaW5nIHIgLT5cbiAgICAgICAgICAgIHIgOj0gZ2V0X2FyZyAoKTtcbiAgICAgICAgICAgIGNvbnN1bWVfYXJnICgpO1xuICAgICAgICB8IEludCBmIC0+XG4gICAgICAgICAgICBsZXQgYXJnID0gZ2V0X2FyZyAoKSBpblxuICAgICAgICAgICAgYmVnaW4gbWF0Y2ggaW50X29mX3N0cmluZ19vcHQgYXJnIHdpdGhcbiAgICAgICAgICAgIHwgTm9uZSAtPiByYWlzZSAoU3RvcCAoV3JvbmcgKHMsIGFyZywgXCJhbiBpbnRlZ2VyXCIpKSlcbiAgICAgICAgICAgIHwgU29tZSB4IC0+IGYgeFxuICAgICAgICAgICAgZW5kO1xuICAgICAgICAgICAgY29uc3VtZV9hcmcgKCk7XG4gICAgICAgIHwgU2V0X2ludCByIC0+XG4gICAgICAgICAgICBsZXQgYXJnID0gZ2V0X2FyZyAoKSBpblxuICAgICAgICAgICAgYmVnaW4gbWF0Y2ggaW50X29mX3N0cmluZ19vcHQgYXJnIHdpdGhcbiAgICAgICAgICAgIHwgTm9uZSAtPiByYWlzZSAoU3RvcCAoV3JvbmcgKHMsIGFyZywgXCJhbiBpbnRlZ2VyXCIpKSlcbiAgICAgICAgICAgIHwgU29tZSB4IC0+IHIgOj0geFxuICAgICAgICAgICAgZW5kO1xuICAgICAgICAgICAgY29uc3VtZV9hcmcgKCk7XG4gICAgICAgIHwgRmxvYXQgZiAtPlxuICAgICAgICAgICAgbGV0IGFyZyA9IGdldF9hcmcgKCkgaW5cbiAgICAgICAgICAgIGJlZ2luIG1hdGNoIGZsb2F0X29mX3N0cmluZ19vcHQgYXJnIHdpdGhcbiAgICAgICAgICAgIHwgTm9uZSAtPiByYWlzZSAoU3RvcCAoV3JvbmcgKHMsIGFyZywgXCJhIGZsb2F0XCIpKSlcbiAgICAgICAgICAgIHwgU29tZSB4IC0+IGYgeFxuICAgICAgICAgICAgZW5kO1xuICAgICAgICAgICAgY29uc3VtZV9hcmcgKCk7XG4gICAgICAgIHwgU2V0X2Zsb2F0IHIgLT5cbiAgICAgICAgICAgIGxldCBhcmcgPSBnZXRfYXJnICgpIGluXG4gICAgICAgICAgICBiZWdpbiBtYXRjaCBmbG9hdF9vZl9zdHJpbmdfb3B0IGFyZyB3aXRoXG4gICAgICAgICAgICB8IE5vbmUgLT4gcmFpc2UgKFN0b3AgKFdyb25nIChzLCBhcmcsIFwiYSBmbG9hdFwiKSkpXG4gICAgICAgICAgICB8IFNvbWUgeCAtPiByIDo9IHhcbiAgICAgICAgICAgIGVuZDtcbiAgICAgICAgICAgIGNvbnN1bWVfYXJnICgpO1xuICAgICAgICB8IFR1cGxlIHNwZWNzIC0+XG4gICAgICAgICAgICBub19hcmcgKCk7XG4gICAgICAgICAgICBMaXN0Lml0ZXIgdHJlYXRfYWN0aW9uIHNwZWNzO1xuICAgICAgICB8IFJlc3QgZiAtPlxuICAgICAgICAgICAgbm9fYXJnICgpO1xuICAgICAgICAgICAgd2hpbGUgIWN1cnJlbnQgPCAoQXJyYXkubGVuZ3RoICFhcmd2KSAtIDEgZG9cbiAgICAgICAgICAgICAgZiAhYXJndi4oIWN1cnJlbnQgKyAxKTtcbiAgICAgICAgICAgICAgY29uc3VtZV9hcmcgKCk7XG4gICAgICAgICAgICBkb25lO1xuICAgICAgICB8IFJlc3RfYWxsIGYgLT5cbiAgICAgICAgICAgIG5vX2FyZyAoKTtcbiAgICAgICAgICAgIGxldCBhY2MgPSByZWYgW10gaW5cbiAgICAgICAgICAgIHdoaWxlICFjdXJyZW50IDwgQXJyYXkubGVuZ3RoICFhcmd2IC0gMSBkb1xuICAgICAgICAgICAgICBhY2MgOj0gIWFyZ3YuKCFjdXJyZW50ICsgMSkgOjogIWFjYztcbiAgICAgICAgICAgICAgY29uc3VtZV9hcmcgKCk7XG4gICAgICAgICAgICBkb25lO1xuICAgICAgICAgICAgZiAoTGlzdC5yZXYgIWFjYylcbiAgICAgICAgfCBFeHBhbmQgZiAtPlxuICAgICAgICAgICAgaWYgbm90IGFsbG93X2V4cGFuZCB0aGVuXG4gICAgICAgICAgICAgIHJhaXNlIChJbnZhbGlkX2FyZ3VtZW50IFwiQXJnLkV4cGFuZCBpcyBpcyBvbmx5IGFsbG93ZWQgd2l0aCBcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnLnBhcnNlX2FuZF9leHBhbmRfYXJndl9keW5hbWljXCIpO1xuICAgICAgICAgICAgbGV0IGFyZyA9IGdldF9hcmcgKCkgaW5cbiAgICAgICAgICAgIGxldCBuZXdhcmcgPSBmIGFyZyBpblxuICAgICAgICAgICAgY29uc3VtZV9hcmcgKCk7XG4gICAgICAgICAgICBsZXQgYmVmb3JlID0gQXJyYXkuc3ViICFhcmd2IDAgKCFjdXJyZW50ICsgMSlcbiAgICAgICAgICAgIGFuZCBhZnRlciA9XG4gICAgICAgICAgICAgIEFycmF5LnN1YiAhYXJndiAoIWN1cnJlbnQgKyAxKVxuICAgICAgICAgICAgICAgICAgICAgICAgKChBcnJheS5sZW5ndGggIWFyZ3YpIC0gIWN1cnJlbnQgLSAxKSBpblxuICAgICAgICAgICAgYXJndjo9IEFycmF5LmNvbmNhdCBbYmVmb3JlO25ld2FyZzthZnRlcl07XG4gICAgICAgIGluXG4gICAgICAgIHRyZWF0X2FjdGlvbiBhY3Rpb24gZW5kXG4gICAgICBlbHNlIGFub25mdW4gc1xuICAgIHdpdGggfCBCYWQgbSAtPiByYWlzZSAoY29udmVydF9lcnJvciAoTWVzc2FnZSBtKSk7XG4gICAgICAgICB8IFN0b3AgZSAtPiByYWlzZSAoY29udmVydF9lcnJvciBlKTtcbiAgICBlbmQ7XG4gICAgaW5jciBjdXJyZW50XG4gIGRvbmVcblxubGV0IHBhcnNlX2FuZF9leHBhbmRfYXJndl9keW5hbWljIGN1cnJlbnQgYXJndiBzcGVjbGlzdCBhbm9uZnVuIGVycm1zZyA9XG4gIHBhcnNlX2FuZF9leHBhbmRfYXJndl9keW5hbWljX2F1eCB0cnVlIGN1cnJlbnQgYXJndiBzcGVjbGlzdCBhbm9uZnVuIGVycm1zZ1xuXG5sZXQgcGFyc2VfYXJndl9keW5hbWljID8oY3VycmVudD1jdXJyZW50KSBhcmd2IHNwZWNsaXN0IGFub25mdW4gZXJybXNnID1cbiAgcGFyc2VfYW5kX2V4cGFuZF9hcmd2X2R5bmFtaWNfYXV4IGZhbHNlIGN1cnJlbnQgKHJlZiBhcmd2KSBzcGVjbGlzdCBhbm9uZnVuXG4gICAgZXJybXNnXG5cblxubGV0IHBhcnNlX2FyZ3YgPyhjdXJyZW50PWN1cnJlbnQpIGFyZ3Ygc3BlY2xpc3QgYW5vbmZ1biBlcnJtc2cgPVxuICBwYXJzZV9hcmd2X2R5bmFtaWMgfmN1cnJlbnQ6Y3VycmVudCBhcmd2IChyZWYgc3BlY2xpc3QpIGFub25mdW4gZXJybXNnXG5cblxubGV0IHBhcnNlIGwgZiBtc2cgPVxuICB0cnlcbiAgICBwYXJzZV9hcmd2IFN5cy5hcmd2IGwgZiBtc2dcbiAgd2l0aFxuICB8IEJhZCBtc2cgLT4gZXByaW50ZiBcIiVzXCIgbXNnOyBleGl0IDJcbiAgfCBIZWxwIG1zZyAtPiBwcmludGYgXCIlc1wiIG1zZzsgZXhpdCAwXG5cblxubGV0IHBhcnNlX2R5bmFtaWMgbCBmIG1zZyA9XG4gIHRyeVxuICAgIHBhcnNlX2FyZ3ZfZHluYW1pYyBTeXMuYXJndiBsIGYgbXNnXG4gIHdpdGhcbiAgfCBCYWQgbXNnIC0+IGVwcmludGYgXCIlc1wiIG1zZzsgZXhpdCAyXG4gIHwgSGVscCBtc2cgLT4gcHJpbnRmIFwiJXNcIiBtc2c7IGV4aXQgMFxuXG5sZXQgcGFyc2VfZXhwYW5kIGwgZiBtc2cgPVxuICB0cnlcbiAgICBsZXQgYXJndiA9IHJlZiBTeXMuYXJndiBpblxuICAgIGxldCBzcGVjID0gcmVmIGwgaW5cbiAgICBsZXQgY3VycmVudCA9IHJlZiAoIWN1cnJlbnQpIGluXG4gICAgcGFyc2VfYW5kX2V4cGFuZF9hcmd2X2R5bmFtaWMgY3VycmVudCBhcmd2IHNwZWMgZiBtc2dcbiAgd2l0aFxuICB8IEJhZCBtc2cgLT4gZXByaW50ZiBcIiVzXCIgbXNnOyBleGl0IDJcbiAgfCBIZWxwIG1zZyAtPiBwcmludGYgXCIlc1wiIG1zZzsgZXhpdCAwXG5cblxubGV0IHNlY29uZF93b3JkIHMgPVxuICBsZXQgbGVuID0gU3RyaW5nLmxlbmd0aCBzIGluXG4gIGxldCByZWMgbG9vcCBuID1cbiAgICBpZiBuID49IGxlbiB0aGVuIGxlblxuICAgIGVsc2UgaWYgcy5bbl0gPSAnICcgdGhlbiBsb29wIChuKzEpXG4gICAgZWxzZSBuXG4gIGluXG4gIG1hdGNoIFN0cmluZy5pbmRleCBzICdcXHQnIHdpdGhcbiAgfCBuIC0+IGxvb3AgKG4rMSlcbiAgfCBleGNlcHRpb24gTm90X2ZvdW5kIC0+XG4gICAgICBiZWdpbiBtYXRjaCBTdHJpbmcuaW5kZXggcyAnICcgd2l0aFxuICAgICAgfCBuIC0+IGxvb3AgKG4rMSlcbiAgICAgIHwgZXhjZXB0aW9uIE5vdF9mb3VuZCAtPiBsZW5cbiAgICAgIGVuZFxuXG5cbmxldCBtYXhfYXJnX2xlbiBjdXIgKGt3ZCwgc3BlYywgZG9jKSA9XG4gIG1hdGNoIHNwZWMgd2l0aFxuICB8IFN5bWJvbCBfIC0+IEludC5tYXggY3VyIChTdHJpbmcubGVuZ3RoIGt3ZClcbiAgfCBfIC0+IEludC5tYXggY3VyIChTdHJpbmcubGVuZ3RoIGt3ZCArIHNlY29uZF93b3JkIGRvYylcblxuXG5sZXQgcmVwbGFjZV9sZWFkaW5nX3RhYiBzID1cbiAgbGV0IHNlZW4gPSByZWYgZmFsc2UgaW5cbiAgU3RyaW5nLm1hcCAoZnVuY3Rpb24gJ1xcdCcgd2hlbiBub3QgIXNlZW4gLT4gc2VlbiA6PSB0cnVlOyAnICcgfCBjIC0+IGMpIHNcblxubGV0IGFkZF9wYWRkaW5nIGxlbiBrc2QgPVxuICBtYXRjaCBrc2Qgd2l0aFxuICB8IChfLCBfLCBcIlwiKSAtPlxuICAgICAgKCogRG8gbm90IHBhZCB1bmRvY3VtZW50ZWQgb3B0aW9ucywgc28gdGhhdCB0aGV5IHN0aWxsIGRvbid0IHNob3cgdXAgd2hlblxuICAgICAgICogcnVuIHRocm91Z2ggW3VzYWdlXSBvciBbcGFyc2VdLiAqKVxuICAgICAga3NkXG4gIHwgKGt3ZCwgKFN5bWJvbCBfIGFzIHNwZWMpLCBtc2cpIC0+XG4gICAgICBsZXQgY3V0Y29sID0gc2Vjb25kX3dvcmQgbXNnIGluXG4gICAgICBsZXQgc3BhY2VzID0gU3RyaW5nLm1ha2UgKChJbnQubWF4IDAgKGxlbiAtIGN1dGNvbCkpICsgMykgJyAnIGluXG4gICAgICAoa3dkLCBzcGVjLCBcIlxcblwiIF4gc3BhY2VzIF4gcmVwbGFjZV9sZWFkaW5nX3RhYiBtc2cpXG4gIHwgKGt3ZCwgc3BlYywgbXNnKSAtPlxuICAgICAgbGV0IGN1dGNvbCA9IHNlY29uZF93b3JkIG1zZyBpblxuICAgICAgbGV0IGt3ZF9sZW4gPSBTdHJpbmcubGVuZ3RoIGt3ZCBpblxuICAgICAgbGV0IGRpZmYgPSBsZW4gLSBrd2RfbGVuIC0gY3V0Y29sIGluXG4gICAgICBpZiBkaWZmIDw9IDAgdGhlblxuICAgICAgICAoa3dkLCBzcGVjLCByZXBsYWNlX2xlYWRpbmdfdGFiIG1zZylcbiAgICAgIGVsc2VcbiAgICAgICAgbGV0IHNwYWNlcyA9IFN0cmluZy5tYWtlIGRpZmYgJyAnIGluXG4gICAgICAgIGxldCBwcmVmaXggPSBTdHJpbmcuc3ViIChyZXBsYWNlX2xlYWRpbmdfdGFiIG1zZykgMCBjdXRjb2wgaW5cbiAgICAgICAgbGV0IHN1ZmZpeCA9IFN0cmluZy5zdWIgbXNnIGN1dGNvbCAoU3RyaW5nLmxlbmd0aCBtc2cgLSBjdXRjb2wpIGluXG4gICAgICAgIChrd2QsIHNwZWMsIHByZWZpeCBeIHNwYWNlcyBeIHN1ZmZpeClcblxuXG5sZXQgYWxpZ24gPyhsaW1pdD1tYXhfaW50KSBzcGVjbGlzdCA9XG4gIGxldCBjb21wbGV0ZWQgPSBhZGRfaGVscCBzcGVjbGlzdCBpblxuICBsZXQgbGVuID0gTGlzdC5mb2xkX2xlZnQgbWF4X2FyZ19sZW4gMCBjb21wbGV0ZWQgaW5cbiAgbGV0IGxlbiA9IEludC5taW4gbGVuIGxpbWl0IGluXG4gIExpc3QubWFwIChhZGRfcGFkZGluZyBsZW4pIGNvbXBsZXRlZFxuXG5sZXQgdHJpbV9jciBzID1cbiAgbGV0IGxlbiA9IFN0cmluZy5sZW5ndGggcyBpblxuICBpZiBsZW4gPiAwICYmIFN0cmluZy5nZXQgcyAobGVuIC0gMSkgPSAnXFxyJyB0aGVuXG4gICAgU3RyaW5nLnN1YiBzIDAgKGxlbiAtIDEpXG4gIGVsc2VcbiAgICBzXG5cbmxldCByZWFkX2F1eCB0cmltIHNlcCBmaWxlID1cbiAgbGV0IGljID0gb3Blbl9pbl9iaW4gZmlsZSBpblxuICBsZXQgYnVmID0gQnVmZmVyLmNyZWF0ZSAyMDAgaW5cbiAgbGV0IHdvcmRzID0gcmVmIFtdIGluXG4gIGxldCBzdGFzaCAoKSA9XG4gICAgbGV0IHdvcmQgPSBCdWZmZXIuY29udGVudHMgYnVmIGluXG4gICAgbGV0IHdvcmQgPSBpZiB0cmltIHRoZW4gdHJpbV9jciB3b3JkIGVsc2Ugd29yZCBpblxuICAgIHdvcmRzIDo9IHdvcmQgOjogIXdvcmRzO1xuICAgIEJ1ZmZlci5jbGVhciBidWZcbiAgaW5cbiAgYmVnaW5cbiAgICB0cnkgd2hpbGUgdHJ1ZSBkb1xuICAgICAgICBsZXQgYyA9IGlucHV0X2NoYXIgaWMgaW5cbiAgICAgICAgaWYgYyA9IHNlcCB0aGVuIHN0YXNoICgpIGVsc2UgQnVmZmVyLmFkZF9jaGFyIGJ1ZiBjXG4gICAgICBkb25lXG4gICAgd2l0aCBFbmRfb2ZfZmlsZSAtPiAoKVxuICBlbmQ7XG4gIGlmIEJ1ZmZlci5sZW5ndGggYnVmID4gMCB0aGVuIHN0YXNoICgpO1xuICBjbG9zZV9pbiBpYztcbiAgQXJyYXkub2ZfbGlzdCAoTGlzdC5yZXYgIXdvcmRzKVxuXG5sZXQgcmVhZF9hcmcgPSByZWFkX2F1eCB0cnVlICdcXG4nXG5cbmxldCByZWFkX2FyZzAgPSByZWFkX2F1eCBmYWxzZSAnXFx4MDAnXG5cbmxldCB3cml0ZV9hdXggc2VwIGZpbGUgYXJncyA9XG4gIGxldCBvYyA9IG9wZW5fb3V0X2JpbiBmaWxlIGluXG4gIEFycmF5Lml0ZXIgKGZ1biBzIC0+IGZwcmludGYgb2MgXCIlcyVjXCIgcyBzZXApIGFyZ3M7XG4gIGNsb3NlX291dCBvY1xuXG5sZXQgd3JpdGVfYXJnID0gd3JpdGVfYXV4ICdcXG4nXG5cbmxldCB3cml0ZV9hcmcwID0gd3JpdGVfYXV4ICdcXHgwMCdcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBPQ2FtbCBwcm9ncmFtbWVycyAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMTggSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuZXh0ZXJuYWwgaWQgOiAnYSAtPiAnYSA9IFwiJWlkZW50aXR5XCJcbmxldCBjb25zdCBjIF8gPSBjXG5sZXQgZmxpcCBmIHggeSA9IGYgeSB4XG5sZXQgbmVnYXRlIHAgdiA9IG5vdCAocCB2KVxuXG5leGNlcHRpb24gRmluYWxseV9yYWlzZWQgb2YgZXhuXG5cbmxldCAoKSA9IFByaW50ZXhjLnJlZ2lzdGVyX3ByaW50ZXIgQEAgZnVuY3Rpb25cbnwgRmluYWxseV9yYWlzZWQgZXhuIC0+IFNvbWUgKFwiRnVuLkZpbmFsbHlfcmFpc2VkOiBcIiBeIFByaW50ZXhjLnRvX3N0cmluZyBleG4pXG58IF8gLT4gTm9uZVxuXG5sZXQgcHJvdGVjdCB+KGZpbmFsbHkgOiB1bml0IC0+IHVuaXQpIHdvcmsgPVxuICBsZXQgZmluYWxseV9ub19leG4gKCkgPVxuICAgIHRyeSBmaW5hbGx5ICgpIHdpdGggZSAtPlxuICAgICAgbGV0IGJ0ID0gUHJpbnRleGMuZ2V0X3Jhd19iYWNrdHJhY2UgKCkgaW5cbiAgICAgIFByaW50ZXhjLnJhaXNlX3dpdGhfYmFja3RyYWNlIChGaW5hbGx5X3JhaXNlZCBlKSBidFxuICBpblxuICBtYXRjaCB3b3JrICgpIHdpdGhcbiAgfCByZXN1bHQgLT4gZmluYWxseV9ub19leG4gKCkgOyByZXN1bHRcbiAgfCBleGNlcHRpb24gd29ya19leG4gLT5cbiAgICAgIGxldCB3b3JrX2J0ID0gUHJpbnRleGMuZ2V0X3Jhd19iYWNrdHJhY2UgKCkgaW5cbiAgICAgIGZpbmFsbHlfbm9fZXhuICgpIDtcbiAgICAgIFByaW50ZXhjLnJhaXNlX3dpdGhfYmFja3RyYWNlIHdvcmtfZXhuIHdvcmtfYnRcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgRGFtaWVuIERvbGlnZXosIHByb2pldCBQYXJhLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgSmFjcXVlcy1IZW5yaSBKb3VyZGFuLCBwcm9qZXQgR2FsbGl1bSwgSU5SSUEgUGFyaXMgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYtMjAxNiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlICAgKilcbigqICAgICBldCBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxudHlwZSBzdGF0ID0ge1xuICBtaW5vcl93b3JkcyA6IGZsb2F0O1xuICBwcm9tb3RlZF93b3JkcyA6IGZsb2F0O1xuICBtYWpvcl93b3JkcyA6IGZsb2F0O1xuICBtaW5vcl9jb2xsZWN0aW9ucyA6IGludDtcbiAgbWFqb3JfY29sbGVjdGlvbnMgOiBpbnQ7XG4gIGhlYXBfd29yZHMgOiBpbnQ7XG4gIGhlYXBfY2h1bmtzIDogaW50O1xuICBsaXZlX3dvcmRzIDogaW50O1xuICBsaXZlX2Jsb2NrcyA6IGludDtcbiAgZnJlZV93b3JkcyA6IGludDtcbiAgZnJlZV9ibG9ja3MgOiBpbnQ7XG4gIGxhcmdlc3RfZnJlZSA6IGludDtcbiAgZnJhZ21lbnRzIDogaW50O1xuICBjb21wYWN0aW9ucyA6IGludDtcbiAgdG9wX2hlYXBfd29yZHMgOiBpbnQ7XG4gIHN0YWNrX3NpemUgOiBpbnQ7XG4gIGZvcmNlZF9tYWpvcl9jb2xsZWN0aW9uczogaW50O1xufVxuXG50eXBlIGNvbnRyb2wgPSB7XG4gIG11dGFibGUgbWlub3JfaGVhcF9zaXplIDogaW50O1xuICBtdXRhYmxlIG1ham9yX2hlYXBfaW5jcmVtZW50IDogaW50O1xuICBtdXRhYmxlIHNwYWNlX292ZXJoZWFkIDogaW50O1xuICBtdXRhYmxlIHZlcmJvc2UgOiBpbnQ7XG4gIG11dGFibGUgbWF4X292ZXJoZWFkIDogaW50O1xuICBtdXRhYmxlIHN0YWNrX2xpbWl0IDogaW50O1xuICBtdXRhYmxlIGFsbG9jYXRpb25fcG9saWN5IDogaW50O1xuICB3aW5kb3dfc2l6ZSA6IGludDtcbiAgY3VzdG9tX21ham9yX3JhdGlvIDogaW50O1xuICBjdXN0b21fbWlub3JfcmF0aW8gOiBpbnQ7XG4gIGN1c3RvbV9taW5vcl9tYXhfc2l6ZSA6IGludDtcbn1cblxuZXh0ZXJuYWwgc3RhdCA6IHVuaXQgLT4gc3RhdCA9IFwiY2FtbF9nY19zdGF0XCJcbmV4dGVybmFsIHF1aWNrX3N0YXQgOiB1bml0IC0+IHN0YXQgPSBcImNhbWxfZ2NfcXVpY2tfc3RhdFwiXG5leHRlcm5hbCBjb3VudGVycyA6IHVuaXQgLT4gKGZsb2F0ICogZmxvYXQgKiBmbG9hdCkgPSBcImNhbWxfZ2NfY291bnRlcnNcIlxuZXh0ZXJuYWwgbWlub3Jfd29yZHMgOiB1bml0IC0+IChmbG9hdCBbQHVuYm94ZWRdKVxuICA9IFwiY2FtbF9nY19taW5vcl93b3Jkc1wiIFwiY2FtbF9nY19taW5vcl93b3Jkc191bmJveGVkXCJcbmV4dGVybmFsIGdldCA6IHVuaXQgLT4gY29udHJvbCA9IFwiY2FtbF9nY19nZXRcIlxuZXh0ZXJuYWwgc2V0IDogY29udHJvbCAtPiB1bml0ID0gXCJjYW1sX2djX3NldFwiXG5leHRlcm5hbCBtaW5vciA6IHVuaXQgLT4gdW5pdCA9IFwiY2FtbF9nY19taW5vclwiXG5leHRlcm5hbCBtYWpvcl9zbGljZSA6IGludCAtPiBpbnQgPSBcImNhbWxfZ2NfbWFqb3Jfc2xpY2VcIlxuZXh0ZXJuYWwgbWFqb3IgOiB1bml0IC0+IHVuaXQgPSBcImNhbWxfZ2NfbWFqb3JcIlxuZXh0ZXJuYWwgZnVsbF9tYWpvciA6IHVuaXQgLT4gdW5pdCA9IFwiY2FtbF9nY19mdWxsX21ham9yXCJcbmV4dGVybmFsIGNvbXBhY3QgOiB1bml0IC0+IHVuaXQgPSBcImNhbWxfZ2NfY29tcGFjdGlvblwiXG5leHRlcm5hbCBnZXRfbWlub3JfZnJlZSA6IHVuaXQgLT4gaW50ID0gXCJjYW1sX2dldF9taW5vcl9mcmVlXCJcbmV4dGVybmFsIGdldF9idWNrZXQgOiBpbnQgLT4gaW50ID0gXCJjYW1sX2dldF9tYWpvcl9idWNrZXRcIiBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgZ2V0X2NyZWRpdCA6IHVuaXQgLT4gaW50ID0gXCJjYW1sX2dldF9tYWpvcl9jcmVkaXRcIiBbQEBub2FsbG9jXVxuZXh0ZXJuYWwgaHVnZV9mYWxsYmFja19jb3VudCA6IHVuaXQgLT4gaW50ID0gXCJjYW1sX2djX2h1Z2VfZmFsbGJhY2tfY291bnRcIlxuZXh0ZXJuYWwgZXZlbnRsb2dfcGF1c2UgOiB1bml0IC0+IHVuaXQgPSBcImNhbWxfZXZlbnRsb2dfcGF1c2VcIlxuZXh0ZXJuYWwgZXZlbnRsb2dfcmVzdW1lIDogdW5pdCAtPiB1bml0ID0gXCJjYW1sX2V2ZW50bG9nX3Jlc3VtZVwiXG5cbm9wZW4gUHJpbnRmXG5cbmxldCBwcmludF9zdGF0IGMgPVxuICBsZXQgc3QgPSBzdGF0ICgpIGluXG4gIGZwcmludGYgYyBcIm1pbm9yX2NvbGxlY3Rpb25zOiAgICAgICVkXFxuXCIgc3QubWlub3JfY29sbGVjdGlvbnM7XG4gIGZwcmludGYgYyBcIm1ham9yX2NvbGxlY3Rpb25zOiAgICAgICVkXFxuXCIgc3QubWFqb3JfY29sbGVjdGlvbnM7XG4gIGZwcmludGYgYyBcImNvbXBhY3Rpb25zOiAgICAgICAgICAgICVkXFxuXCIgc3QuY29tcGFjdGlvbnM7XG4gIGZwcmludGYgYyBcImZvcmNlZF9tYWpvcl9jb2xsZWN0aW9uczogJWRcXG5cIiBzdC5mb3JjZWRfbWFqb3JfY29sbGVjdGlvbnM7XG4gIGZwcmludGYgYyBcIlxcblwiO1xuICBsZXQgbDEgPSBTdHJpbmcubGVuZ3RoIChzcHJpbnRmIFwiJS4wZlwiIHN0Lm1pbm9yX3dvcmRzKSBpblxuICBmcHJpbnRmIGMgXCJtaW5vcl93b3JkczogICAgJSouMGZcXG5cIiBsMSBzdC5taW5vcl93b3JkcztcbiAgZnByaW50ZiBjIFwicHJvbW90ZWRfd29yZHM6ICUqLjBmXFxuXCIgbDEgc3QucHJvbW90ZWRfd29yZHM7XG4gIGZwcmludGYgYyBcIm1ham9yX3dvcmRzOiAgICAlKi4wZlxcblwiIGwxIHN0Lm1ham9yX3dvcmRzO1xuICBmcHJpbnRmIGMgXCJcXG5cIjtcbiAgbGV0IGwyID0gU3RyaW5nLmxlbmd0aCAoc3ByaW50ZiBcIiVkXCIgc3QudG9wX2hlYXBfd29yZHMpIGluXG4gIGZwcmludGYgYyBcInRvcF9oZWFwX3dvcmRzOiAlKmRcXG5cIiBsMiBzdC50b3BfaGVhcF93b3JkcztcbiAgZnByaW50ZiBjIFwiaGVhcF93b3JkczogICAgICUqZFxcblwiIGwyIHN0LmhlYXBfd29yZHM7XG4gIGZwcmludGYgYyBcImxpdmVfd29yZHM6ICAgICAlKmRcXG5cIiBsMiBzdC5saXZlX3dvcmRzO1xuICBmcHJpbnRmIGMgXCJmcmVlX3dvcmRzOiAgICAgJSpkXFxuXCIgbDIgc3QuZnJlZV93b3JkcztcbiAgZnByaW50ZiBjIFwibGFyZ2VzdF9mcmVlOiAgICUqZFxcblwiIGwyIHN0Lmxhcmdlc3RfZnJlZTtcbiAgZnByaW50ZiBjIFwiZnJhZ21lbnRzOiAgICAgICUqZFxcblwiIGwyIHN0LmZyYWdtZW50cztcbiAgZnByaW50ZiBjIFwiXFxuXCI7XG4gIGZwcmludGYgYyBcImxpdmVfYmxvY2tzOiAlZFxcblwiIHN0LmxpdmVfYmxvY2tzO1xuICBmcHJpbnRmIGMgXCJmcmVlX2Jsb2NrczogJWRcXG5cIiBzdC5mcmVlX2Jsb2NrcztcbiAgZnByaW50ZiBjIFwiaGVhcF9jaHVua3M6ICVkXFxuXCIgc3QuaGVhcF9jaHVua3NcblxuXG5sZXQgYWxsb2NhdGVkX2J5dGVzICgpID1cbiAgbGV0IChtaSwgcHJvLCBtYSkgPSBjb3VudGVycyAoKSBpblxuICAobWkgKy4gbWEgLS4gcHJvKSAqLiBmbG9hdF9vZl9pbnQgKFN5cy53b3JkX3NpemUgLyA4KVxuXG5cbmV4dGVybmFsIGZpbmFsaXNlIDogKCdhIC0+IHVuaXQpIC0+ICdhIC0+IHVuaXQgPSBcImNhbWxfZmluYWxfcmVnaXN0ZXJcIlxuZXh0ZXJuYWwgZmluYWxpc2VfbGFzdCA6ICh1bml0IC0+IHVuaXQpIC0+ICdhIC0+IHVuaXQgPVxuICBcImNhbWxfZmluYWxfcmVnaXN0ZXJfY2FsbGVkX3dpdGhvdXRfdmFsdWVcIlxuZXh0ZXJuYWwgZmluYWxpc2VfcmVsZWFzZSA6IHVuaXQgLT4gdW5pdCA9IFwiY2FtbF9maW5hbF9yZWxlYXNlXCJcblxuXG50eXBlIGFsYXJtID0gYm9vbCByZWZcbnR5cGUgYWxhcm1fcmVjID0ge2FjdGl2ZSA6IGFsYXJtOyBmIDogdW5pdCAtPiB1bml0fVxuXG5sZXQgcmVjIGNhbGxfYWxhcm0gYXJlYyA9XG4gIGlmICEoYXJlYy5hY3RpdmUpIHRoZW4gYmVnaW5cbiAgICBmaW5hbGlzZSBjYWxsX2FsYXJtIGFyZWM7XG4gICAgYXJlYy5mICgpO1xuICBlbmRcblxuXG5sZXQgY3JlYXRlX2FsYXJtIGYgPVxuICBsZXQgYXJlYyA9IHsgYWN0aXZlID0gcmVmIHRydWU7IGYgPSBmIH0gaW5cbiAgZmluYWxpc2UgY2FsbF9hbGFybSBhcmVjO1xuICBhcmVjLmFjdGl2ZVxuXG5cbmxldCBkZWxldGVfYWxhcm0gYSA9IGEgOj0gZmFsc2VcblxubW9kdWxlIE1lbXByb2YgPVxuICBzdHJ1Y3RcbiAgICB0eXBlIGFsbG9jYXRpb25fc291cmNlID0gTm9ybWFsIHwgTWFyc2hhbCB8IEN1c3RvbVxuICAgIHR5cGUgYWxsb2NhdGlvbiA9XG4gICAgICB7IG5fc2FtcGxlcyA6IGludDtcbiAgICAgICAgc2l6ZSA6IGludDtcbiAgICAgICAgc291cmNlIDogYWxsb2NhdGlvbl9zb3VyY2U7XG4gICAgICAgIGNhbGxzdGFjayA6IFByaW50ZXhjLnJhd19iYWNrdHJhY2UgfVxuXG4gICAgdHlwZSAoJ21pbm9yLCAnbWFqb3IpIHRyYWNrZXIgPSB7XG4gICAgICBhbGxvY19taW5vcjogYWxsb2NhdGlvbiAtPiAnbWlub3Igb3B0aW9uO1xuICAgICAgYWxsb2NfbWFqb3I6IGFsbG9jYXRpb24gLT4gJ21ham9yIG9wdGlvbjtcbiAgICAgIHByb21vdGU6ICdtaW5vciAtPiAnbWFqb3Igb3B0aW9uO1xuICAgICAgZGVhbGxvY19taW5vcjogJ21pbm9yIC0+IHVuaXQ7XG4gICAgICBkZWFsbG9jX21ham9yOiAnbWFqb3IgLT4gdW5pdDtcbiAgICB9XG5cbiAgICBsZXQgbnVsbF90cmFja2VyID0ge1xuICAgICAgYWxsb2NfbWlub3IgPSAoZnVuIF8gLT4gTm9uZSk7XG4gICAgICBhbGxvY19tYWpvciA9IChmdW4gXyAtPiBOb25lKTtcbiAgICAgIHByb21vdGUgPSAoZnVuIF8gLT4gTm9uZSk7XG4gICAgICBkZWFsbG9jX21pbm9yID0gKGZ1biBfIC0+ICgpKTtcbiAgICAgIGRlYWxsb2NfbWFqb3IgPSAoZnVuIF8gLT4gKCkpO1xuICAgIH1cblxuICAgIGV4dGVybmFsIGNfc3RhcnQgOlxuICAgICAgZmxvYXQgLT4gaW50IC0+ICgnbWlub3IsICdtYWpvcikgdHJhY2tlciAtPiB1bml0XG4gICAgICA9IFwiY2FtbF9tZW1wcm9mX3N0YXJ0XCJcblxuICAgIGxldCBzdGFydFxuICAgICAgfnNhbXBsaW5nX3JhdGVcbiAgICAgID8oY2FsbHN0YWNrX3NpemUgPSBtYXhfaW50KVxuICAgICAgdHJhY2tlciA9XG4gICAgICBjX3N0YXJ0IHNhbXBsaW5nX3JhdGUgY2FsbHN0YWNrX3NpemUgdHJhY2tlclxuXG4gICAgZXh0ZXJuYWwgc3RvcCA6IHVuaXQgLT4gdW5pdCA9IFwiY2FtbF9tZW1wcm9mX3N0b3BcIlxuICBlbmRcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogTWVzc2FnZSBkaWdlc3QgKE1ENSkgKilcblxudHlwZSB0ID0gc3RyaW5nXG5cbmxldCBjb21wYXJlID0gU3RyaW5nLmNvbXBhcmVcbmxldCBlcXVhbCA9IFN0cmluZy5lcXVhbFxuXG5leHRlcm5hbCB1bnNhZmVfc3RyaW5nOiBzdHJpbmcgLT4gaW50IC0+IGludCAtPiB0ID0gXCJjYW1sX21kNV9zdHJpbmdcIlxuZXh0ZXJuYWwgY2hhbm5lbDogaW5fY2hhbm5lbCAtPiBpbnQgLT4gdCA9IFwiY2FtbF9tZDVfY2hhblwiXG5cbmxldCBzdHJpbmcgc3RyID1cbiAgdW5zYWZlX3N0cmluZyBzdHIgMCAoU3RyaW5nLmxlbmd0aCBzdHIpXG5cbmxldCBieXRlcyBiID0gc3RyaW5nIChCeXRlcy51bnNhZmVfdG9fc3RyaW5nIGIpXG5cbmxldCBzdWJzdHJpbmcgc3RyIG9mcyBsZW4gPVxuICBpZiBvZnMgPCAwIHx8IGxlbiA8IDAgfHwgb2ZzID4gU3RyaW5nLmxlbmd0aCBzdHIgLSBsZW5cbiAgdGhlbiBpbnZhbGlkX2FyZyBcIkRpZ2VzdC5zdWJzdHJpbmdcIlxuICBlbHNlIHVuc2FmZV9zdHJpbmcgc3RyIG9mcyBsZW5cblxubGV0IHN1YmJ5dGVzIGIgb2ZzIGxlbiA9IHN1YnN0cmluZyAoQnl0ZXMudW5zYWZlX3RvX3N0cmluZyBiKSBvZnMgbGVuXG5cbmxldCBmaWxlIGZpbGVuYW1lID1cbiAgbGV0IGljID0gb3Blbl9pbl9iaW4gZmlsZW5hbWUgaW5cbiAgbWF0Y2ggY2hhbm5lbCBpYyAoLTEpIHdpdGhcbiAgICB8IGQgLT4gY2xvc2VfaW4gaWM7IGRcbiAgICB8IGV4Y2VwdGlvbiBlIC0+IGNsb3NlX2luIGljOyByYWlzZSBlXG5cbmxldCBvdXRwdXQgY2hhbiBkaWdlc3QgPVxuICBvdXRwdXRfc3RyaW5nIGNoYW4gZGlnZXN0XG5cbmxldCBpbnB1dCBjaGFuID0gcmVhbGx5X2lucHV0X3N0cmluZyBjaGFuIDE2XG5cbmxldCBjaGFyX2hleCBuID1cbiAgQ2hhci51bnNhZmVfY2hyIChuICsgaWYgbiA8IDEwIHRoZW4gQ2hhci5jb2RlICcwJyBlbHNlIChDaGFyLmNvZGUgJ2EnIC0gMTApKVxuXG5sZXQgdG9faGV4IGQgPVxuICBpZiBTdHJpbmcubGVuZ3RoIGQgPD4gMTYgdGhlbiBpbnZhbGlkX2FyZyBcIkRpZ2VzdC50b19oZXhcIjtcbiAgbGV0IHJlc3VsdCA9IEJ5dGVzLmNyZWF0ZSAzMiBpblxuICBmb3IgaSA9IDAgdG8gMTUgZG9cbiAgICBsZXQgeCA9IENoYXIuY29kZSBkLltpXSBpblxuICAgIEJ5dGVzLnVuc2FmZV9zZXQgcmVzdWx0IChpKjIpIChjaGFyX2hleCAoeCBsc3IgNCkpO1xuICAgIEJ5dGVzLnVuc2FmZV9zZXQgcmVzdWx0IChpKjIrMSkgKGNoYXJfaGV4ICh4IGxhbmQgMHgwZikpO1xuICBkb25lO1xuICBCeXRlcy51bnNhZmVfdG9fc3RyaW5nIHJlc3VsdFxuXG5sZXQgZnJvbV9oZXggcyA9XG4gIGlmIFN0cmluZy5sZW5ndGggcyA8PiAzMiB0aGVuIGludmFsaWRfYXJnIFwiRGlnZXN0LmZyb21faGV4XCI7XG4gIGxldCBkaWdpdCBjID1cbiAgICBtYXRjaCBjIHdpdGhcbiAgICB8ICcwJy4uJzknIC0+IENoYXIuY29kZSBjIC0gQ2hhci5jb2RlICcwJ1xuICAgIHwgJ0EnLi4nRicgLT4gQ2hhci5jb2RlIGMgLSBDaGFyLmNvZGUgJ0EnICsgMTBcbiAgICB8ICdhJy4uJ2YnIC0+IENoYXIuY29kZSBjIC0gQ2hhci5jb2RlICdhJyArIDEwXG4gICAgfCBfIC0+IHJhaXNlIChJbnZhbGlkX2FyZ3VtZW50IFwiRGlnZXN0LmZyb21faGV4XCIpXG4gIGluXG4gIGxldCBieXRlIGkgPSBkaWdpdCBzLltpXSBsc2wgNCArIGRpZ2l0IHMuW2krMV0gaW5cbiAgbGV0IHJlc3VsdCA9IEJ5dGVzLmNyZWF0ZSAxNiBpblxuICBmb3IgaSA9IDAgdG8gMTUgZG9cbiAgICBCeXRlcy5zZXQgcmVzdWx0IGkgKENoYXIuY2hyIChieXRlICgyICogaSkpKTtcbiAgZG9uZTtcbiAgQnl0ZXMudW5zYWZlX3RvX3N0cmluZyByZXN1bHRcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFhhdmllciBMZXJveSwgcHJvamV0IENyaXN0YWwsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDE5OTYgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxuKCogSGFzaCB0YWJsZXMgKilcblxuKCogV2UgZG8gZHluYW1pYyBoYXNoaW5nLCBhbmQgcmVzaXplIHRoZSB0YWJsZSBhbmQgcmVoYXNoIHRoZSBlbGVtZW50c1xuICAgd2hlbiBidWNrZXRzIGJlY29tZSB0b28gbG9uZy4gKilcblxudHlwZSAoJ2EsICdiKSB0ID1cbiAgeyBtdXRhYmxlIHNpemU6IGludDsgICAgICAgICAgICAgICAgICAgICAgICAoKiBudW1iZXIgb2YgZW50cmllcyAqKVxuICAgIG11dGFibGUgZGF0YTogKCdhLCAnYikgYnVja2V0bGlzdCBhcnJheTsgICgqIHRoZSBidWNrZXRzICopXG4gICAgc2VlZDogaW50OyAgICAgICAgICAgICAgICAgICAgICAgICgqIGZvciByYW5kb21pemF0aW9uICopXG4gICAgbXV0YWJsZSBpbml0aWFsX3NpemU6IGludDsgICAgICAgICAgICAgICAgKCogaW5pdGlhbCBhcnJheSBzaXplICopXG4gIH1cblxuYW5kICgnYSwgJ2IpIGJ1Y2tldGxpc3QgPVxuICAgIEVtcHR5XG4gIHwgQ29ucyBvZiB7IG11dGFibGUga2V5OiAnYTtcbiAgICAgICAgICAgICAgbXV0YWJsZSBkYXRhOiAnYjtcbiAgICAgICAgICAgICAgbXV0YWJsZSBuZXh0OiAoJ2EsICdiKSBidWNrZXRsaXN0IH1cblxuKCogVGhlIHNpZ24gb2YgaW5pdGlhbF9zaXplIGVuY29kZXMgdGhlIGZhY3QgdGhhdCBhIHRyYXZlcnNhbCBpc1xuICAgb25nb2luZyBvciBub3QuXG5cbiAgIFRoaXMgZGlzYWJsZXMgdGhlIGVmZmljaWVudCBpbiBwbGFjZSBpbXBsZW1lbnRhdGlvbiBvZiByZXNpemluZy5cbiopXG5cbmxldCBvbmdvaW5nX3RyYXZlcnNhbCBoID1cbiAgT2JqLnNpemUgKE9iai5yZXByIGgpIDwgNCAoKiBjb21wYXRpYmlsaXR5IHdpdGggb2xkIGhhc2ggdGFibGVzICopXG4gIHx8IGguaW5pdGlhbF9zaXplIDwgMFxuXG5sZXQgZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoID1cbiAgaC5pbml0aWFsX3NpemUgPC0gLSBoLmluaXRpYWxfc2l6ZVxuXG4oKiBUbyBwaWNrIHJhbmRvbSBzZWVkcyBpZiByZXF1ZXN0ZWQgKilcblxubGV0IHJhbmRvbWl6ZWRfZGVmYXVsdCA9XG4gIGxldCBwYXJhbXMgPVxuICAgIHRyeSBTeXMuZ2V0ZW52IFwiT0NBTUxSVU5QQVJBTVwiIHdpdGggTm90X2ZvdW5kIC0+XG4gICAgdHJ5IFN5cy5nZXRlbnYgXCJDQU1MUlVOUEFSQU1cIiB3aXRoIE5vdF9mb3VuZCAtPiBcIlwiIGluXG4gIFN0cmluZy5jb250YWlucyBwYXJhbXMgJ1InXG5cbmxldCByYW5kb21pemVkID0gcmVmIHJhbmRvbWl6ZWRfZGVmYXVsdFxuXG5sZXQgcmFuZG9taXplICgpID0gcmFuZG9taXplZCA6PSB0cnVlXG5sZXQgaXNfcmFuZG9taXplZCAoKSA9ICFyYW5kb21pemVkXG5cbmxldCBwcm5nID0gbGF6eSAoUmFuZG9tLlN0YXRlLm1ha2Vfc2VsZl9pbml0KCkpXG5cbigqIEZ1bmN0aW9ucyB3aGljaCBhcHBlYXIgYmVmb3JlIHRoZSBmdW5jdG9yaWFsIGludGVyZmFjZSBtdXN0IGVpdGhlciBiZVxuICAgaW5kZXBlbmRlbnQgb2YgdGhlIGhhc2ggZnVuY3Rpb24gb3IgdGFrZSBpdCBhcyBhIHBhcmFtZXRlciAoc2VlICMyMjAyIGFuZFxuICAgY29kZSBiZWxvdyB0aGUgZnVuY3RvciBkZWZpbml0aW9ucy4gKilcblxuKCogQ3JlYXRpbmcgYSBmcmVzaCwgZW1wdHkgdGFibGUgKilcblxubGV0IHJlYyBwb3dlcl8yX2Fib3ZlIHggbiA9XG4gIGlmIHggPj0gbiB0aGVuIHhcbiAgZWxzZSBpZiB4ICogMiA+IFN5cy5tYXhfYXJyYXlfbGVuZ3RoIHRoZW4geFxuICBlbHNlIHBvd2VyXzJfYWJvdmUgKHggKiAyKSBuXG5cbmxldCBjcmVhdGUgPyhyYW5kb20gPSAhcmFuZG9taXplZCkgaW5pdGlhbF9zaXplID1cbiAgbGV0IHMgPSBwb3dlcl8yX2Fib3ZlIDE2IGluaXRpYWxfc2l6ZSBpblxuICBsZXQgc2VlZCA9IGlmIHJhbmRvbSB0aGVuIFJhbmRvbS5TdGF0ZS5iaXRzIChMYXp5LmZvcmNlIHBybmcpIGVsc2UgMCBpblxuICB7IGluaXRpYWxfc2l6ZSA9IHM7IHNpemUgPSAwOyBzZWVkID0gc2VlZDsgZGF0YSA9IEFycmF5Lm1ha2UgcyBFbXB0eSB9XG5cbmxldCBjbGVhciBoID1cbiAgaWYgaC5zaXplID4gMCB0aGVuIGJlZ2luXG4gICAgaC5zaXplIDwtIDA7XG4gICAgQXJyYXkuZmlsbCBoLmRhdGEgMCAoQXJyYXkubGVuZ3RoIGguZGF0YSkgRW1wdHlcbiAgZW5kXG5cbmxldCByZXNldCBoID1cbiAgbGV0IGxlbiA9IEFycmF5Lmxlbmd0aCBoLmRhdGEgaW5cbiAgaWYgT2JqLnNpemUgKE9iai5yZXByIGgpIDwgNCAoKiBjb21wYXRpYmlsaXR5IHdpdGggb2xkIGhhc2ggdGFibGVzICopXG4gICAgfHwgbGVuID0gYWJzIGguaW5pdGlhbF9zaXplIHRoZW5cbiAgICBjbGVhciBoXG4gIGVsc2UgYmVnaW5cbiAgICBoLnNpemUgPC0gMDtcbiAgICBoLmRhdGEgPC0gQXJyYXkubWFrZSAoYWJzIGguaW5pdGlhbF9zaXplKSBFbXB0eVxuICBlbmRcblxubGV0IGNvcHlfYnVja2V0bGlzdCA9IGZ1bmN0aW9uXG4gIHwgRW1wdHkgLT4gRW1wdHlcbiAgfCBDb25zIHtrZXk7IGRhdGE7IG5leHR9IC0+XG4gICAgICBsZXQgcmVjIGxvb3AgcHJlYyA9IGZ1bmN0aW9uXG4gICAgICAgIHwgRW1wdHkgLT4gKClcbiAgICAgICAgfCBDb25zIHtrZXk7IGRhdGE7IG5leHR9IC0+XG4gICAgICAgICAgICBsZXQgciA9IENvbnMge2tleTsgZGF0YTsgbmV4dH0gaW5cbiAgICAgICAgICAgIGJlZ2luIG1hdGNoIHByZWMgd2l0aFxuICAgICAgICAgICAgfCBFbXB0eSAtPiBhc3NlcnQgZmFsc2VcbiAgICAgICAgICAgIHwgQ29ucyBwcmVjIC0+ICBwcmVjLm5leHQgPC0gclxuICAgICAgICAgICAgZW5kO1xuICAgICAgICAgICAgbG9vcCByIG5leHRcbiAgICAgIGluXG4gICAgICBsZXQgciA9IENvbnMge2tleTsgZGF0YTsgbmV4dH0gaW5cbiAgICAgIGxvb3AgciBuZXh0O1xuICAgICAgclxuXG5sZXQgY29weSBoID0geyBoIHdpdGggZGF0YSA9IEFycmF5Lm1hcCBjb3B5X2J1Y2tldGxpc3QgaC5kYXRhIH1cblxubGV0IGxlbmd0aCBoID0gaC5zaXplXG5cbmxldCBpbnNlcnRfYWxsX2J1Y2tldHMgaW5kZXhmdW4gaW5wbGFjZSBvZGF0YSBuZGF0YSA9XG4gIGxldCBuc2l6ZSA9IEFycmF5Lmxlbmd0aCBuZGF0YSBpblxuICBsZXQgbmRhdGFfdGFpbCA9IEFycmF5Lm1ha2UgbnNpemUgRW1wdHkgaW5cbiAgbGV0IHJlYyBpbnNlcnRfYnVja2V0ID0gZnVuY3Rpb25cbiAgICB8IEVtcHR5IC0+ICgpXG4gICAgfCBDb25zIHtrZXk7IGRhdGE7IG5leHR9IGFzIGNlbGwgLT5cbiAgICAgICAgbGV0IGNlbGwgPVxuICAgICAgICAgIGlmIGlucGxhY2UgdGhlbiBjZWxsXG4gICAgICAgICAgZWxzZSBDb25zIHtrZXk7IGRhdGE7IG5leHQgPSBFbXB0eX1cbiAgICAgICAgaW5cbiAgICAgICAgbGV0IG5pZHggPSBpbmRleGZ1biBrZXkgaW5cbiAgICAgICAgYmVnaW4gbWF0Y2ggbmRhdGFfdGFpbC4obmlkeCkgd2l0aFxuICAgICAgICB8IEVtcHR5IC0+IG5kYXRhLihuaWR4KSA8LSBjZWxsO1xuICAgICAgICB8IENvbnMgdGFpbCAtPiB0YWlsLm5leHQgPC0gY2VsbDtcbiAgICAgICAgZW5kO1xuICAgICAgICBuZGF0YV90YWlsLihuaWR4KSA8LSBjZWxsO1xuICAgICAgICBpbnNlcnRfYnVja2V0IG5leHRcbiAgaW5cbiAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCBvZGF0YSAtIDEgZG9cbiAgICBpbnNlcnRfYnVja2V0IG9kYXRhLihpKVxuICBkb25lO1xuICBpZiBpbnBsYWNlIHRoZW5cbiAgICBmb3IgaSA9IDAgdG8gbnNpemUgLSAxIGRvXG4gICAgICBtYXRjaCBuZGF0YV90YWlsLihpKSB3aXRoXG4gICAgICB8IEVtcHR5IC0+ICgpXG4gICAgICB8IENvbnMgdGFpbCAtPiB0YWlsLm5leHQgPC0gRW1wdHlcbiAgICBkb25lXG5cbmxldCByZXNpemUgaW5kZXhmdW4gaCA9XG4gIGxldCBvZGF0YSA9IGguZGF0YSBpblxuICBsZXQgb3NpemUgPSBBcnJheS5sZW5ndGggb2RhdGEgaW5cbiAgbGV0IG5zaXplID0gb3NpemUgKiAyIGluXG4gIGlmIG5zaXplIDwgU3lzLm1heF9hcnJheV9sZW5ndGggdGhlbiBiZWdpblxuICAgIGxldCBuZGF0YSA9IEFycmF5Lm1ha2UgbnNpemUgRW1wdHkgaW5cbiAgICBsZXQgaW5wbGFjZSA9IG5vdCAob25nb2luZ190cmF2ZXJzYWwgaCkgaW5cbiAgICBoLmRhdGEgPC0gbmRhdGE7ICAgICAgICAgICgqIHNvIHRoYXQgaW5kZXhmdW4gc2VlcyB0aGUgbmV3IGJ1Y2tldCBjb3VudCAqKVxuICAgIGluc2VydF9hbGxfYnVja2V0cyAoaW5kZXhmdW4gaCkgaW5wbGFjZSBvZGF0YSBuZGF0YVxuICBlbmRcblxubGV0IGl0ZXIgZiBoID1cbiAgbGV0IHJlYyBkb19idWNrZXQgPSBmdW5jdGlvblxuICAgIHwgRW1wdHkgLT5cbiAgICAgICAgKClcbiAgICB8IENvbnN7a2V5OyBkYXRhOyBuZXh0fSAtPlxuICAgICAgICBmIGtleSBkYXRhOyBkb19idWNrZXQgbmV4dCBpblxuICBsZXQgb2xkX3RyYXYgPSBvbmdvaW5nX3RyYXZlcnNhbCBoIGluXG4gIGlmIG5vdCBvbGRfdHJhdiB0aGVuIGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaDtcbiAgdHJ5XG4gICAgbGV0IGQgPSBoLmRhdGEgaW5cbiAgICBmb3IgaSA9IDAgdG8gQXJyYXkubGVuZ3RoIGQgLSAxIGRvXG4gICAgICBkb19idWNrZXQgZC4oaSlcbiAgICBkb25lO1xuICAgIGlmIG5vdCBvbGRfdHJhdiB0aGVuIGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaDtcbiAgd2l0aCBleG4gd2hlbiBub3Qgb2xkX3RyYXYgLT5cbiAgICBmbGlwX29uZ29pbmdfdHJhdmVyc2FsIGg7XG4gICAgcmFpc2UgZXhuXG5cbmxldCByZWMgZmlsdGVyX21hcF9pbnBsYWNlX2J1Y2tldCBmIGggaSBwcmVjID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPlxuICAgICAgYmVnaW4gbWF0Y2ggcHJlYyB3aXRoXG4gICAgICB8IEVtcHR5IC0+IGguZGF0YS4oaSkgPC0gRW1wdHlcbiAgICAgIHwgQ29ucyBjIC0+IGMubmV4dCA8LSBFbXB0eVxuICAgICAgZW5kXG4gIHwgKENvbnMgKHtrZXk7IGRhdGE7IG5leHR9IGFzIGMpKSBhcyBzbG90IC0+XG4gICAgICBiZWdpbiBtYXRjaCBmIGtleSBkYXRhIHdpdGhcbiAgICAgIHwgTm9uZSAtPlxuICAgICAgICAgIGguc2l6ZSA8LSBoLnNpemUgLSAxO1xuICAgICAgICAgIGZpbHRlcl9tYXBfaW5wbGFjZV9idWNrZXQgZiBoIGkgcHJlYyBuZXh0XG4gICAgICB8IFNvbWUgZGF0YSAtPlxuICAgICAgICAgIGJlZ2luIG1hdGNoIHByZWMgd2l0aFxuICAgICAgICAgIHwgRW1wdHkgLT4gaC5kYXRhLihpKSA8LSBzbG90XG4gICAgICAgICAgfCBDb25zIGMgLT4gYy5uZXh0IDwtIHNsb3RcbiAgICAgICAgICBlbmQ7XG4gICAgICAgICAgYy5kYXRhIDwtIGRhdGE7XG4gICAgICAgICAgZmlsdGVyX21hcF9pbnBsYWNlX2J1Y2tldCBmIGggaSBzbG90IG5leHRcbiAgICAgIGVuZFxuXG5sZXQgZmlsdGVyX21hcF9pbnBsYWNlIGYgaCA9XG4gIGxldCBkID0gaC5kYXRhIGluXG4gIGxldCBvbGRfdHJhdiA9IG9uZ29pbmdfdHJhdmVyc2FsIGggaW5cbiAgaWYgbm90IG9sZF90cmF2IHRoZW4gZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoO1xuICB0cnlcbiAgICBmb3IgaSA9IDAgdG8gQXJyYXkubGVuZ3RoIGQgLSAxIGRvXG4gICAgICBmaWx0ZXJfbWFwX2lucGxhY2VfYnVja2V0IGYgaCBpIEVtcHR5IGguZGF0YS4oaSlcbiAgICBkb25lO1xuICAgIGlmIG5vdCBvbGRfdHJhdiB0aGVuIGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaFxuICB3aXRoIGV4biB3aGVuIG5vdCBvbGRfdHJhdiAtPlxuICAgIGZsaXBfb25nb2luZ190cmF2ZXJzYWwgaDtcbiAgICByYWlzZSBleG5cblxubGV0IGZvbGQgZiBoIGluaXQgPVxuICBsZXQgcmVjIGRvX2J1Y2tldCBiIGFjY3UgPVxuICAgIG1hdGNoIGIgd2l0aFxuICAgICAgRW1wdHkgLT5cbiAgICAgICAgYWNjdVxuICAgIHwgQ29uc3trZXk7IGRhdGE7IG5leHR9IC0+XG4gICAgICAgIGRvX2J1Y2tldCBuZXh0IChmIGtleSBkYXRhIGFjY3UpIGluXG4gIGxldCBvbGRfdHJhdiA9IG9uZ29pbmdfdHJhdmVyc2FsIGggaW5cbiAgaWYgbm90IG9sZF90cmF2IHRoZW4gZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoO1xuICB0cnlcbiAgICBsZXQgZCA9IGguZGF0YSBpblxuICAgIGxldCBhY2N1ID0gcmVmIGluaXQgaW5cbiAgICBmb3IgaSA9IDAgdG8gQXJyYXkubGVuZ3RoIGQgLSAxIGRvXG4gICAgICBhY2N1IDo9IGRvX2J1Y2tldCBkLihpKSAhYWNjdVxuICAgIGRvbmU7XG4gICAgaWYgbm90IG9sZF90cmF2IHRoZW4gZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoO1xuICAgICFhY2N1XG4gIHdpdGggZXhuIHdoZW4gbm90IG9sZF90cmF2IC0+XG4gICAgZmxpcF9vbmdvaW5nX3RyYXZlcnNhbCBoO1xuICAgIHJhaXNlIGV4blxuXG50eXBlIHN0YXRpc3RpY3MgPSB7XG4gIG51bV9iaW5kaW5nczogaW50O1xuICBudW1fYnVja2V0czogaW50O1xuICBtYXhfYnVja2V0X2xlbmd0aDogaW50O1xuICBidWNrZXRfaGlzdG9ncmFtOiBpbnQgYXJyYXlcbn1cblxubGV0IHJlYyBidWNrZXRfbGVuZ3RoIGFjY3UgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+IGFjY3VcbiAgfCBDb25ze25leHR9IC0+IGJ1Y2tldF9sZW5ndGggKGFjY3UgKyAxKSBuZXh0XG5cbmxldCBzdGF0cyBoID1cbiAgbGV0IG1ibCA9XG4gICAgQXJyYXkuZm9sZF9sZWZ0IChmdW4gbSBiIC0+IEludC5tYXggbSAoYnVja2V0X2xlbmd0aCAwIGIpKSAwIGguZGF0YSBpblxuICBsZXQgaGlzdG8gPSBBcnJheS5tYWtlIChtYmwgKyAxKSAwIGluXG4gIEFycmF5Lml0ZXJcbiAgICAoZnVuIGIgLT5cbiAgICAgIGxldCBsID0gYnVja2V0X2xlbmd0aCAwIGIgaW5cbiAgICAgIGhpc3RvLihsKSA8LSBoaXN0by4obCkgKyAxKVxuICAgIGguZGF0YTtcbiAgeyBudW1fYmluZGluZ3MgPSBoLnNpemU7XG4gICAgbnVtX2J1Y2tldHMgPSBBcnJheS5sZW5ndGggaC5kYXRhO1xuICAgIG1heF9idWNrZXRfbGVuZ3RoID0gbWJsO1xuICAgIGJ1Y2tldF9oaXN0b2dyYW0gPSBoaXN0byB9XG5cbigqKiB7MSBJdGVyYXRvcnN9ICopXG5cbmxldCB0b19zZXEgdGJsID1cbiAgKCogY2FwdHVyZSBjdXJyZW50IGFycmF5LCBzbyB0aGF0IGV2ZW4gaWYgdGhlIHRhYmxlIGlzIHJlc2l6ZWQgd2VcbiAgICAga2VlcCBpdGVyYXRpbmcgb24gdGhlIHNhbWUgYXJyYXkgKilcbiAgbGV0IHRibF9kYXRhID0gdGJsLmRhdGEgaW5cbiAgKCogc3RhdGU6IGluZGV4ICogbmV4dCBidWNrZXQgdG8gdHJhdmVyc2UgKilcbiAgbGV0IHJlYyBhdXggaSBidWNrICgpID0gbWF0Y2ggYnVjayB3aXRoXG4gICAgfCBFbXB0eSAtPlxuICAgICAgICBpZiBpID0gQXJyYXkubGVuZ3RoIHRibF9kYXRhXG4gICAgICAgIHRoZW4gU2VxLk5pbFxuICAgICAgICBlbHNlIGF1eChpKzEpIHRibF9kYXRhLihpKSAoKVxuICAgIHwgQ29ucyB7a2V5OyBkYXRhOyBuZXh0fSAtPlxuICAgICAgICBTZXEuQ29ucyAoKGtleSwgZGF0YSksIGF1eCBpIG5leHQpXG4gIGluXG4gIGF1eCAwIEVtcHR5XG5cbmxldCB0b19zZXFfa2V5cyBtID0gU2VxLm1hcCBmc3QgKHRvX3NlcSBtKVxuXG5sZXQgdG9fc2VxX3ZhbHVlcyBtID0gU2VxLm1hcCBzbmQgKHRvX3NlcSBtKVxuXG4oKiBGdW5jdG9yaWFsIGludGVyZmFjZSAqKVxuXG5tb2R1bGUgdHlwZSBIYXNoZWRUeXBlID1cbiAgc2lnXG4gICAgdHlwZSB0XG4gICAgdmFsIGVxdWFsOiB0IC0+IHQgLT4gYm9vbFxuICAgIHZhbCBoYXNoOiB0IC0+IGludFxuICBlbmRcblxubW9kdWxlIHR5cGUgU2VlZGVkSGFzaGVkVHlwZSA9XG4gIHNpZ1xuICAgIHR5cGUgdFxuICAgIHZhbCBlcXVhbDogdCAtPiB0IC0+IGJvb2xcbiAgICB2YWwgaGFzaDogaW50IC0+IHQgLT4gaW50XG4gIGVuZFxuXG5tb2R1bGUgdHlwZSBTID1cbiAgc2lnXG4gICAgdHlwZSBrZXlcbiAgICB0eXBlICEnYSB0XG4gICAgdmFsIGNyZWF0ZTogaW50IC0+ICdhIHRcbiAgICB2YWwgY2xlYXIgOiAnYSB0IC0+IHVuaXRcbiAgICB2YWwgcmVzZXQgOiAnYSB0IC0+IHVuaXRcbiAgICB2YWwgY29weTogJ2EgdCAtPiAnYSB0XG4gICAgdmFsIGFkZDogJ2EgdCAtPiBrZXkgLT4gJ2EgLT4gdW5pdFxuICAgIHZhbCByZW1vdmU6ICdhIHQgLT4ga2V5IC0+IHVuaXRcbiAgICB2YWwgZmluZDogJ2EgdCAtPiBrZXkgLT4gJ2FcbiAgICB2YWwgZmluZF9vcHQ6ICdhIHQgLT4ga2V5IC0+ICdhIG9wdGlvblxuICAgIHZhbCBmaW5kX2FsbDogJ2EgdCAtPiBrZXkgLT4gJ2EgbGlzdFxuICAgIHZhbCByZXBsYWNlIDogJ2EgdCAtPiBrZXkgLT4gJ2EgLT4gdW5pdFxuICAgIHZhbCBtZW0gOiAnYSB0IC0+IGtleSAtPiBib29sXG4gICAgdmFsIGl0ZXI6IChrZXkgLT4gJ2EgLT4gdW5pdCkgLT4gJ2EgdCAtPiB1bml0XG4gICAgdmFsIGZpbHRlcl9tYXBfaW5wbGFjZTogKGtleSAtPiAnYSAtPiAnYSBvcHRpb24pIC0+ICdhIHQgLT4gdW5pdFxuICAgIHZhbCBmb2xkOiAoa2V5IC0+ICdhIC0+ICdiIC0+ICdiKSAtPiAnYSB0IC0+ICdiIC0+ICdiXG4gICAgdmFsIGxlbmd0aDogJ2EgdCAtPiBpbnRcbiAgICB2YWwgc3RhdHM6ICdhIHQgLT4gc3RhdGlzdGljc1xuICAgIHZhbCB0b19zZXEgOiAnYSB0IC0+IChrZXkgKiAnYSkgU2VxLnRcbiAgICB2YWwgdG9fc2VxX2tleXMgOiBfIHQgLT4ga2V5IFNlcS50XG4gICAgdmFsIHRvX3NlcV92YWx1ZXMgOiAnYSB0IC0+ICdhIFNlcS50XG4gICAgdmFsIGFkZF9zZXEgOiAnYSB0IC0+IChrZXkgKiAnYSkgU2VxLnQgLT4gdW5pdFxuICAgIHZhbCByZXBsYWNlX3NlcSA6ICdhIHQgLT4gKGtleSAqICdhKSBTZXEudCAtPiB1bml0XG4gICAgdmFsIG9mX3NlcSA6IChrZXkgKiAnYSkgU2VxLnQgLT4gJ2EgdFxuICBlbmRcblxubW9kdWxlIHR5cGUgU2VlZGVkUyA9XG4gIHNpZ1xuICAgIHR5cGUga2V5XG4gICAgdHlwZSAhJ2EgdFxuICAgIHZhbCBjcmVhdGUgOiA/cmFuZG9tOmJvb2wgLT4gaW50IC0+ICdhIHRcbiAgICB2YWwgY2xlYXIgOiAnYSB0IC0+IHVuaXRcbiAgICB2YWwgcmVzZXQgOiAnYSB0IC0+IHVuaXRcbiAgICB2YWwgY29weSA6ICdhIHQgLT4gJ2EgdFxuICAgIHZhbCBhZGQgOiAnYSB0IC0+IGtleSAtPiAnYSAtPiB1bml0XG4gICAgdmFsIHJlbW92ZSA6ICdhIHQgLT4ga2V5IC0+IHVuaXRcbiAgICB2YWwgZmluZCA6ICdhIHQgLT4ga2V5IC0+ICdhXG4gICAgdmFsIGZpbmRfb3B0OiAnYSB0IC0+IGtleSAtPiAnYSBvcHRpb25cbiAgICB2YWwgZmluZF9hbGwgOiAnYSB0IC0+IGtleSAtPiAnYSBsaXN0XG4gICAgdmFsIHJlcGxhY2UgOiAnYSB0IC0+IGtleSAtPiAnYSAtPiB1bml0XG4gICAgdmFsIG1lbSA6ICdhIHQgLT4ga2V5IC0+IGJvb2xcbiAgICB2YWwgaXRlciA6IChrZXkgLT4gJ2EgLT4gdW5pdCkgLT4gJ2EgdCAtPiB1bml0XG4gICAgdmFsIGZpbHRlcl9tYXBfaW5wbGFjZTogKGtleSAtPiAnYSAtPiAnYSBvcHRpb24pIC0+ICdhIHQgLT4gdW5pdFxuICAgIHZhbCBmb2xkIDogKGtleSAtPiAnYSAtPiAnYiAtPiAnYikgLT4gJ2EgdCAtPiAnYiAtPiAnYlxuICAgIHZhbCBsZW5ndGggOiAnYSB0IC0+IGludFxuICAgIHZhbCBzdGF0czogJ2EgdCAtPiBzdGF0aXN0aWNzXG4gICAgdmFsIHRvX3NlcSA6ICdhIHQgLT4gKGtleSAqICdhKSBTZXEudFxuICAgIHZhbCB0b19zZXFfa2V5cyA6IF8gdCAtPiBrZXkgU2VxLnRcbiAgICB2YWwgdG9fc2VxX3ZhbHVlcyA6ICdhIHQgLT4gJ2EgU2VxLnRcbiAgICB2YWwgYWRkX3NlcSA6ICdhIHQgLT4gKGtleSAqICdhKSBTZXEudCAtPiB1bml0XG4gICAgdmFsIHJlcGxhY2Vfc2VxIDogJ2EgdCAtPiAoa2V5ICogJ2EpIFNlcS50IC0+IHVuaXRcbiAgICB2YWwgb2Zfc2VxIDogKGtleSAqICdhKSBTZXEudCAtPiAnYSB0XG4gIGVuZFxuXG5tb2R1bGUgTWFrZVNlZWRlZChIOiBTZWVkZWRIYXNoZWRUeXBlKTogKFNlZWRlZFMgd2l0aCB0eXBlIGtleSA9IEgudCkgPVxuICBzdHJ1Y3RcbiAgICB0eXBlIGtleSA9IEgudFxuICAgIHR5cGUgJ2EgaGFzaHRibCA9IChrZXksICdhKSB0XG4gICAgdHlwZSAnYSB0ID0gJ2EgaGFzaHRibFxuICAgIGxldCBjcmVhdGUgPSBjcmVhdGVcbiAgICBsZXQgY2xlYXIgPSBjbGVhclxuICAgIGxldCByZXNldCA9IHJlc2V0XG4gICAgbGV0IGNvcHkgPSBjb3B5XG5cbiAgICBsZXQga2V5X2luZGV4IGgga2V5ID1cbiAgICAgIChILmhhc2ggaC5zZWVkIGtleSkgbGFuZCAoQXJyYXkubGVuZ3RoIGguZGF0YSAtIDEpXG5cbiAgICBsZXQgYWRkIGgga2V5IGRhdGEgPVxuICAgICAgbGV0IGkgPSBrZXlfaW5kZXggaCBrZXkgaW5cbiAgICAgIGxldCBidWNrZXQgPSBDb25ze2tleTsgZGF0YTsgbmV4dD1oLmRhdGEuKGkpfSBpblxuICAgICAgaC5kYXRhLihpKSA8LSBidWNrZXQ7XG4gICAgICBoLnNpemUgPC0gaC5zaXplICsgMTtcbiAgICAgIGlmIGguc2l6ZSA+IEFycmF5Lmxlbmd0aCBoLmRhdGEgbHNsIDEgdGhlbiByZXNpemUga2V5X2luZGV4IGhcblxuICAgIGxldCByZWMgcmVtb3ZlX2J1Y2tldCBoIGkga2V5IHByZWMgPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPlxuICAgICAgICAgICgpXG4gICAgICB8IChDb25zIHtrZXk9azsgbmV4dH0pIGFzIGMgLT5cbiAgICAgICAgICBpZiBILmVxdWFsIGsga2V5XG4gICAgICAgICAgdGhlbiBiZWdpblxuICAgICAgICAgICAgaC5zaXplIDwtIGguc2l6ZSAtIDE7XG4gICAgICAgICAgICBtYXRjaCBwcmVjIHdpdGhcbiAgICAgICAgICAgIHwgRW1wdHkgLT4gaC5kYXRhLihpKSA8LSBuZXh0XG4gICAgICAgICAgICB8IENvbnMgYyAtPiBjLm5leHQgPC0gbmV4dFxuICAgICAgICAgIGVuZFxuICAgICAgICAgIGVsc2UgcmVtb3ZlX2J1Y2tldCBoIGkga2V5IGMgbmV4dFxuXG4gICAgbGV0IHJlbW92ZSBoIGtleSA9XG4gICAgICBsZXQgaSA9IGtleV9pbmRleCBoIGtleSBpblxuICAgICAgcmVtb3ZlX2J1Y2tldCBoIGkga2V5IEVtcHR5IGguZGF0YS4oaSlcblxuICAgIGxldCByZWMgZmluZF9yZWMga2V5ID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT5cbiAgICAgICAgICByYWlzZSBOb3RfZm91bmRcbiAgICAgIHwgQ29uc3trZXk9azsgZGF0YTsgbmV4dH0gLT5cbiAgICAgICAgICBpZiBILmVxdWFsIGtleSBrIHRoZW4gZGF0YSBlbHNlIGZpbmRfcmVjIGtleSBuZXh0XG5cbiAgICBsZXQgZmluZCBoIGtleSA9XG4gICAgICBtYXRjaCBoLmRhdGEuKGtleV9pbmRleCBoIGtleSkgd2l0aFxuICAgICAgfCBFbXB0eSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgIHwgQ29uc3trZXk9azE7IGRhdGE9ZDE7IG5leHQ9bmV4dDF9IC0+XG4gICAgICAgICAgaWYgSC5lcXVhbCBrZXkgazEgdGhlbiBkMSBlbHNlXG4gICAgICAgICAgbWF0Y2ggbmV4dDEgd2l0aFxuICAgICAgICAgIHwgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICAgICAgfCBDb25ze2tleT1rMjsgZGF0YT1kMjsgbmV4dD1uZXh0Mn0gLT5cbiAgICAgICAgICAgICAgaWYgSC5lcXVhbCBrZXkgazIgdGhlbiBkMiBlbHNlXG4gICAgICAgICAgICAgIG1hdGNoIG5leHQyIHdpdGhcbiAgICAgICAgICAgICAgfCBFbXB0eSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgICAgICAgICAgfCBDb25ze2tleT1rMzsgZGF0YT1kMzsgbmV4dD1uZXh0M30gLT5cbiAgICAgICAgICAgICAgICAgIGlmIEguZXF1YWwga2V5IGszIHRoZW4gZDMgZWxzZSBmaW5kX3JlYyBrZXkgbmV4dDNcblxuICAgIGxldCByZWMgZmluZF9yZWNfb3B0IGtleSA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+XG4gICAgICAgICAgTm9uZVxuICAgICAgfCBDb25ze2tleT1rOyBkYXRhOyBuZXh0fSAtPlxuICAgICAgICAgIGlmIEguZXF1YWwga2V5IGsgdGhlbiBTb21lIGRhdGEgZWxzZSBmaW5kX3JlY19vcHQga2V5IG5leHRcblxuICAgIGxldCBmaW5kX29wdCBoIGtleSA9XG4gICAgICBtYXRjaCBoLmRhdGEuKGtleV9pbmRleCBoIGtleSkgd2l0aFxuICAgICAgfCBFbXB0eSAtPiBOb25lXG4gICAgICB8IENvbnN7a2V5PWsxOyBkYXRhPWQxOyBuZXh0PW5leHQxfSAtPlxuICAgICAgICAgIGlmIEguZXF1YWwga2V5IGsxIHRoZW4gU29tZSBkMSBlbHNlXG4gICAgICAgICAgbWF0Y2ggbmV4dDEgd2l0aFxuICAgICAgICAgIHwgRW1wdHkgLT4gTm9uZVxuICAgICAgICAgIHwgQ29uc3trZXk9azI7IGRhdGE9ZDI7IG5leHQ9bmV4dDJ9IC0+XG4gICAgICAgICAgICAgIGlmIEguZXF1YWwga2V5IGsyIHRoZW4gU29tZSBkMiBlbHNlXG4gICAgICAgICAgICAgIG1hdGNoIG5leHQyIHdpdGhcbiAgICAgICAgICAgICAgfCBFbXB0eSAtPiBOb25lXG4gICAgICAgICAgICAgIHwgQ29uc3trZXk9azM7IGRhdGE9ZDM7IG5leHQ9bmV4dDN9IC0+XG4gICAgICAgICAgICAgICAgICBpZiBILmVxdWFsIGtleSBrMyB0aGVuIFNvbWUgZDMgZWxzZSBmaW5kX3JlY19vcHQga2V5IG5leHQzXG5cbiAgICBsZXQgZmluZF9hbGwgaCBrZXkgPVxuICAgICAgbGV0IHJlYyBmaW5kX2luX2J1Y2tldCA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+XG4gICAgICAgICAgW11cbiAgICAgIHwgQ29uc3trZXk9azsgZGF0YT1kOyBuZXh0fSAtPlxuICAgICAgICAgIGlmIEguZXF1YWwgayBrZXlcbiAgICAgICAgICB0aGVuIGQgOjogZmluZF9pbl9idWNrZXQgbmV4dFxuICAgICAgICAgIGVsc2UgZmluZF9pbl9idWNrZXQgbmV4dCBpblxuICAgICAgZmluZF9pbl9idWNrZXQgaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpXG5cbiAgICBsZXQgcmVjIHJlcGxhY2VfYnVja2V0IGtleSBkYXRhID0gZnVuY3Rpb25cbiAgICAgIHwgRW1wdHkgLT5cbiAgICAgICAgICB0cnVlXG4gICAgICB8IENvbnMgKHtrZXk9azsgbmV4dH0gYXMgc2xvdCkgLT5cbiAgICAgICAgICBpZiBILmVxdWFsIGsga2V5XG4gICAgICAgICAgdGhlbiAoc2xvdC5rZXkgPC0ga2V5OyBzbG90LmRhdGEgPC0gZGF0YTsgZmFsc2UpXG4gICAgICAgICAgZWxzZSByZXBsYWNlX2J1Y2tldCBrZXkgZGF0YSBuZXh0XG5cbiAgICBsZXQgcmVwbGFjZSBoIGtleSBkYXRhID1cbiAgICAgIGxldCBpID0ga2V5X2luZGV4IGgga2V5IGluXG4gICAgICBsZXQgbCA9IGguZGF0YS4oaSkgaW5cbiAgICAgIGlmIHJlcGxhY2VfYnVja2V0IGtleSBkYXRhIGwgdGhlbiBiZWdpblxuICAgICAgICBoLmRhdGEuKGkpIDwtIENvbnN7a2V5OyBkYXRhOyBuZXh0PWx9O1xuICAgICAgICBoLnNpemUgPC0gaC5zaXplICsgMTtcbiAgICAgICAgaWYgaC5zaXplID4gQXJyYXkubGVuZ3RoIGguZGF0YSBsc2wgMSB0aGVuIHJlc2l6ZSBrZXlfaW5kZXggaFxuICAgICAgZW5kXG5cbiAgICBsZXQgbWVtIGgga2V5ID1cbiAgICAgIGxldCByZWMgbWVtX2luX2J1Y2tldCA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+XG4gICAgICAgICAgZmFsc2VcbiAgICAgIHwgQ29uc3trZXk9azsgbmV4dH0gLT5cbiAgICAgICAgICBILmVxdWFsIGsga2V5IHx8IG1lbV9pbl9idWNrZXQgbmV4dCBpblxuICAgICAgbWVtX2luX2J1Y2tldCBoLmRhdGEuKGtleV9pbmRleCBoIGtleSlcblxuICAgIGxldCBhZGRfc2VxIHRibCBpID1cbiAgICAgIFNlcS5pdGVyIChmdW4gKGssdikgLT4gYWRkIHRibCBrIHYpIGlcblxuICAgIGxldCByZXBsYWNlX3NlcSB0YmwgaSA9XG4gICAgICBTZXEuaXRlciAoZnVuIChrLHYpIC0+IHJlcGxhY2UgdGJsIGsgdikgaVxuXG4gICAgbGV0IG9mX3NlcSBpID1cbiAgICAgIGxldCB0YmwgPSBjcmVhdGUgMTYgaW5cbiAgICAgIHJlcGxhY2Vfc2VxIHRibCBpO1xuICAgICAgdGJsXG5cbiAgICBsZXQgaXRlciA9IGl0ZXJcbiAgICBsZXQgZmlsdGVyX21hcF9pbnBsYWNlID0gZmlsdGVyX21hcF9pbnBsYWNlXG4gICAgbGV0IGZvbGQgPSBmb2xkXG4gICAgbGV0IGxlbmd0aCA9IGxlbmd0aFxuICAgIGxldCBzdGF0cyA9IHN0YXRzXG4gICAgbGV0IHRvX3NlcSA9IHRvX3NlcVxuICAgIGxldCB0b19zZXFfa2V5cyA9IHRvX3NlcV9rZXlzXG4gICAgbGV0IHRvX3NlcV92YWx1ZXMgPSB0b19zZXFfdmFsdWVzXG4gIGVuZFxuXG5tb2R1bGUgTWFrZShIOiBIYXNoZWRUeXBlKTogKFMgd2l0aCB0eXBlIGtleSA9IEgudCkgPVxuICBzdHJ1Y3RcbiAgICBpbmNsdWRlIE1ha2VTZWVkZWQoc3RydWN0XG4gICAgICAgIHR5cGUgdCA9IEgudFxuICAgICAgICBsZXQgZXF1YWwgPSBILmVxdWFsXG4gICAgICAgIGxldCBoYXNoIChfc2VlZDogaW50KSB4ID0gSC5oYXNoIHhcbiAgICAgIGVuZClcbiAgICBsZXQgY3JlYXRlIHN6ID0gY3JlYXRlIH5yYW5kb206ZmFsc2Ugc3pcbiAgICBsZXQgb2Zfc2VxIGkgPVxuICAgICAgbGV0IHRibCA9IGNyZWF0ZSAxNiBpblxuICAgICAgcmVwbGFjZV9zZXEgdGJsIGk7XG4gICAgICB0YmxcbiAgZW5kXG5cbigqIFBvbHltb3JwaGljIGhhc2ggZnVuY3Rpb24tYmFzZWQgdGFibGVzICopXG4oKiBDb2RlIGluY2x1ZGVkIGJlbG93IHRoZSBmdW5jdG9yaWFsIGludGVyZmFjZSB0byBndWFyZCBhZ2FpbnN0IGFjY2lkZW50YWxcbiAgIHVzZSAtIHNlZSAjMjIwMiAqKVxuXG5leHRlcm5hbCBzZWVkZWRfaGFzaF9wYXJhbSA6XG4gIGludCAtPiBpbnQgLT4gaW50IC0+ICdhIC0+IGludCA9IFwiY2FtbF9oYXNoXCIgW0BAbm9hbGxvY11cblxubGV0IGhhc2ggeCA9IHNlZWRlZF9oYXNoX3BhcmFtIDEwIDEwMCAwIHhcbmxldCBoYXNoX3BhcmFtIG4xIG4yIHggPSBzZWVkZWRfaGFzaF9wYXJhbSBuMSBuMiAwIHhcbmxldCBzZWVkZWRfaGFzaCBzZWVkIHggPSBzZWVkZWRfaGFzaF9wYXJhbSAxMCAxMDAgc2VlZCB4XG5cbmxldCBrZXlfaW5kZXggaCBrZXkgPVxuICBpZiBPYmouc2l6ZSAoT2JqLnJlcHIgaCkgPj0gNFxuICB0aGVuIChzZWVkZWRfaGFzaF9wYXJhbSAxMCAxMDAgaC5zZWVkIGtleSkgbGFuZCAoQXJyYXkubGVuZ3RoIGguZGF0YSAtIDEpXG4gIGVsc2UgaW52YWxpZF9hcmcgXCJIYXNodGJsOiB1bnN1cHBvcnRlZCBoYXNoIHRhYmxlIGZvcm1hdFwiXG5cbmxldCBhZGQgaCBrZXkgZGF0YSA9XG4gIGxldCBpID0ga2V5X2luZGV4IGgga2V5IGluXG4gIGxldCBidWNrZXQgPSBDb25ze2tleTsgZGF0YTsgbmV4dD1oLmRhdGEuKGkpfSBpblxuICBoLmRhdGEuKGkpIDwtIGJ1Y2tldDtcbiAgaC5zaXplIDwtIGguc2l6ZSArIDE7XG4gIGlmIGguc2l6ZSA+IEFycmF5Lmxlbmd0aCBoLmRhdGEgbHNsIDEgdGhlbiByZXNpemUga2V5X2luZGV4IGhcblxubGV0IHJlYyByZW1vdmVfYnVja2V0IGggaSBrZXkgcHJlYyA9IGZ1bmN0aW9uXG4gIHwgRW1wdHkgLT5cbiAgICAgICgpXG4gIHwgKENvbnMge2tleT1rOyBuZXh0fSkgYXMgYyAtPlxuICAgICAgaWYgY29tcGFyZSBrIGtleSA9IDBcbiAgICAgIHRoZW4gYmVnaW5cbiAgICAgICAgaC5zaXplIDwtIGguc2l6ZSAtIDE7XG4gICAgICAgIG1hdGNoIHByZWMgd2l0aFxuICAgICAgICB8IEVtcHR5IC0+IGguZGF0YS4oaSkgPC0gbmV4dFxuICAgICAgICB8IENvbnMgYyAtPiBjLm5leHQgPC0gbmV4dFxuICAgICAgZW5kXG4gICAgICBlbHNlIHJlbW92ZV9idWNrZXQgaCBpIGtleSBjIG5leHRcblxubGV0IHJlbW92ZSBoIGtleSA9XG4gIGxldCBpID0ga2V5X2luZGV4IGgga2V5IGluXG4gIHJlbW92ZV9idWNrZXQgaCBpIGtleSBFbXB0eSBoLmRhdGEuKGkpXG5cbmxldCByZWMgZmluZF9yZWMga2V5ID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPlxuICAgICAgcmFpc2UgTm90X2ZvdW5kXG4gIHwgQ29uc3trZXk9azsgZGF0YTsgbmV4dH0gLT5cbiAgICAgIGlmIGNvbXBhcmUga2V5IGsgPSAwIHRoZW4gZGF0YSBlbHNlIGZpbmRfcmVjIGtleSBuZXh0XG5cbmxldCBmaW5kIGgga2V5ID1cbiAgbWF0Y2ggaC5kYXRhLihrZXlfaW5kZXggaCBrZXkpIHdpdGhcbiAgfCBFbXB0eSAtPiByYWlzZSBOb3RfZm91bmRcbiAgfCBDb25ze2tleT1rMTsgZGF0YT1kMTsgbmV4dD1uZXh0MX0gLT5cbiAgICAgIGlmIGNvbXBhcmUga2V5IGsxID0gMCB0aGVuIGQxIGVsc2VcbiAgICAgIG1hdGNoIG5leHQxIHdpdGhcbiAgICAgIHwgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICB8IENvbnN7a2V5PWsyOyBkYXRhPWQyOyBuZXh0PW5leHQyfSAtPlxuICAgICAgICAgIGlmIGNvbXBhcmUga2V5IGsyID0gMCB0aGVuIGQyIGVsc2VcbiAgICAgICAgICBtYXRjaCBuZXh0MiB3aXRoXG4gICAgICAgICAgfCBFbXB0eSAtPiByYWlzZSBOb3RfZm91bmRcbiAgICAgICAgICB8IENvbnN7a2V5PWszOyBkYXRhPWQzOyBuZXh0PW5leHQzfSAtPlxuICAgICAgICAgICAgICBpZiBjb21wYXJlIGtleSBrMyA9IDAgdGhlbiBkMyBlbHNlIGZpbmRfcmVjIGtleSBuZXh0M1xuXG5sZXQgcmVjIGZpbmRfcmVjX29wdCBrZXkgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+XG4gICAgICBOb25lXG4gIHwgQ29uc3trZXk9azsgZGF0YTsgbmV4dH0gLT5cbiAgICAgIGlmIGNvbXBhcmUga2V5IGsgPSAwIHRoZW4gU29tZSBkYXRhIGVsc2UgZmluZF9yZWNfb3B0IGtleSBuZXh0XG5cbmxldCBmaW5kX29wdCBoIGtleSA9XG4gIG1hdGNoIGguZGF0YS4oa2V5X2luZGV4IGgga2V5KSB3aXRoXG4gIHwgRW1wdHkgLT4gTm9uZVxuICB8IENvbnN7a2V5PWsxOyBkYXRhPWQxOyBuZXh0PW5leHQxfSAtPlxuICAgICAgaWYgY29tcGFyZSBrZXkgazEgPSAwIHRoZW4gU29tZSBkMSBlbHNlXG4gICAgICBtYXRjaCBuZXh0MSB3aXRoXG4gICAgICB8IEVtcHR5IC0+IE5vbmVcbiAgICAgIHwgQ29uc3trZXk9azI7IGRhdGE9ZDI7IG5leHQ9bmV4dDJ9IC0+XG4gICAgICAgICAgaWYgY29tcGFyZSBrZXkgazIgPSAwIHRoZW4gU29tZSBkMiBlbHNlXG4gICAgICAgICAgbWF0Y2ggbmV4dDIgd2l0aFxuICAgICAgICAgIHwgRW1wdHkgLT4gTm9uZVxuICAgICAgICAgIHwgQ29uc3trZXk9azM7IGRhdGE9ZDM7IG5leHQ9bmV4dDN9IC0+XG4gICAgICAgICAgICAgIGlmIGNvbXBhcmUga2V5IGszID0gMCB0aGVuIFNvbWUgZDMgZWxzZSBmaW5kX3JlY19vcHQga2V5IG5leHQzXG5cbmxldCBmaW5kX2FsbCBoIGtleSA9XG4gIGxldCByZWMgZmluZF9pbl9idWNrZXQgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+XG4gICAgICBbXVxuICB8IENvbnN7a2V5PWs7IGRhdGE7IG5leHR9IC0+XG4gICAgICBpZiBjb21wYXJlIGsga2V5ID0gMFxuICAgICAgdGhlbiBkYXRhIDo6IGZpbmRfaW5fYnVja2V0IG5leHRcbiAgICAgIGVsc2UgZmluZF9pbl9idWNrZXQgbmV4dCBpblxuICBmaW5kX2luX2J1Y2tldCBoLmRhdGEuKGtleV9pbmRleCBoIGtleSlcblxubGV0IHJlYyByZXBsYWNlX2J1Y2tldCBrZXkgZGF0YSA9IGZ1bmN0aW9uXG4gIHwgRW1wdHkgLT5cbiAgICAgIHRydWVcbiAgfCBDb25zICh7a2V5PWs7IG5leHR9IGFzIHNsb3QpIC0+XG4gICAgICBpZiBjb21wYXJlIGsga2V5ID0gMFxuICAgICAgdGhlbiAoc2xvdC5rZXkgPC0ga2V5OyBzbG90LmRhdGEgPC0gZGF0YTsgZmFsc2UpXG4gICAgICBlbHNlIHJlcGxhY2VfYnVja2V0IGtleSBkYXRhIG5leHRcblxubGV0IHJlcGxhY2UgaCBrZXkgZGF0YSA9XG4gIGxldCBpID0ga2V5X2luZGV4IGgga2V5IGluXG4gIGxldCBsID0gaC5kYXRhLihpKSBpblxuICBpZiByZXBsYWNlX2J1Y2tldCBrZXkgZGF0YSBsIHRoZW4gYmVnaW5cbiAgICBoLmRhdGEuKGkpIDwtIENvbnN7a2V5OyBkYXRhOyBuZXh0PWx9O1xuICAgIGguc2l6ZSA8LSBoLnNpemUgKyAxO1xuICAgIGlmIGguc2l6ZSA+IEFycmF5Lmxlbmd0aCBoLmRhdGEgbHNsIDEgdGhlbiByZXNpemUga2V5X2luZGV4IGhcbiAgZW5kXG5cbmxldCBtZW0gaCBrZXkgPVxuICBsZXQgcmVjIG1lbV9pbl9idWNrZXQgPSBmdW5jdGlvblxuICB8IEVtcHR5IC0+XG4gICAgICBmYWxzZVxuICB8IENvbnN7a2V5PWs7IG5leHR9IC0+XG4gICAgICBjb21wYXJlIGsga2V5ID0gMCB8fCBtZW1faW5fYnVja2V0IG5leHQgaW5cbiAgbWVtX2luX2J1Y2tldCBoLmRhdGEuKGtleV9pbmRleCBoIGtleSlcblxubGV0IGFkZF9zZXEgdGJsIGkgPVxuICBTZXEuaXRlciAoZnVuIChrLHYpIC0+IGFkZCB0YmwgayB2KSBpXG5cbmxldCByZXBsYWNlX3NlcSB0YmwgaSA9XG4gIFNlcS5pdGVyIChmdW4gKGssdikgLT4gcmVwbGFjZSB0YmwgayB2KSBpXG5cbmxldCBvZl9zZXEgaSA9XG4gIGxldCB0YmwgPSBjcmVhdGUgMTYgaW5cbiAgcmVwbGFjZV9zZXEgdGJsIGk7XG4gIHRibFxuXG5sZXQgcmVidWlsZCA/KHJhbmRvbSA9ICFyYW5kb21pemVkKSBoID1cbiAgbGV0IHMgPSBwb3dlcl8yX2Fib3ZlIDE2IChBcnJheS5sZW5ndGggaC5kYXRhKSBpblxuICBsZXQgc2VlZCA9XG4gICAgaWYgcmFuZG9tIHRoZW4gUmFuZG9tLlN0YXRlLmJpdHMgKExhenkuZm9yY2UgcHJuZylcbiAgICBlbHNlIGlmIE9iai5zaXplIChPYmoucmVwciBoKSA+PSA0IHRoZW4gaC5zZWVkXG4gICAgZWxzZSAwIGluXG4gIGxldCBoJyA9IHtcbiAgICBzaXplID0gaC5zaXplO1xuICAgIGRhdGEgPSBBcnJheS5tYWtlIHMgRW1wdHk7XG4gICAgc2VlZCA9IHNlZWQ7XG4gICAgaW5pdGlhbF9zaXplID0gaWYgT2JqLnNpemUgKE9iai5yZXByIGgpID49IDQgdGhlbiBoLmluaXRpYWxfc2l6ZSBlbHNlIHNcbiAgfSBpblxuICBpbnNlcnRfYWxsX2J1Y2tldHMgKGtleV9pbmRleCBoJykgZmFsc2UgaC5kYXRhIGgnLmRhdGE7XG4gIGgnXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBEYW1pZW4gRG9saWdleiwgcHJvamV0IFBhcmEsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk3IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqKiBXZWFrIGFycmF5IG9wZXJhdGlvbnMgKilcblxudHlwZSAhJ2EgdFxuXG5leHRlcm5hbCBjcmVhdGUgOiBpbnQgLT4gJ2EgdCA9IFwiY2FtbF93ZWFrX2NyZWF0ZVwiXG5cbmxldCBjcmVhdGUgbCA9XG4gIGlmIG5vdCAoMCA8PSBsICYmIGwgPD0gT2JqLkVwaGVtZXJvbi5tYXhfZXBoZV9sZW5ndGgpIHRoZW5cbiAgICBpbnZhbGlkX2FyZyhcIldlYWsuY3JlYXRlXCIpO1xuICBjcmVhdGUgbFxuXG4oKiogbnVtYmVyIG9mIGFkZGl0aW9uYWwgdmFsdWVzIGluIGEgd2VhayBwb2ludGVyICopXG5sZXQgYWRkaXRpb25hbF92YWx1ZXMgPSAyXG5cbmxldCBsZW5ndGggeCA9IE9iai5zaXplKE9iai5yZXByIHgpIC0gYWRkaXRpb25hbF92YWx1ZXNcblxubGV0IHJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0IGUgbyBtc2cgPVxuICBpZiBub3QgKDAgPD0gbyAmJiBvIDwgbGVuZ3RoIGUpIHRoZW5cbiAgICBpbnZhbGlkX2FyZyhtc2cpXG5cbmV4dGVybmFsIHNldCcgOiAnYSB0IC0+IGludCAtPiAnYSAtPiB1bml0ID0gXCJjYW1sX2VwaGVfc2V0X2tleVwiXG5leHRlcm5hbCB1bnNldCA6ICdhIHQgLT4gaW50IC0+IHVuaXQgPSBcImNhbWxfZXBoZV91bnNldF9rZXlcIlxubGV0IHNldCBlIG8geCA9XG4gIHJhaXNlX2lmX2ludmFsaWRfb2Zmc2V0IGUgbyBcIldlYWsuc2V0XCI7XG4gIG1hdGNoIHggd2l0aFxuICB8IE5vbmUgLT4gdW5zZXQgZSBvXG4gIHwgU29tZSB4IC0+IHNldCcgZSBvIHhcblxuZXh0ZXJuYWwgZ2V0IDogJ2EgdCAtPiBpbnQgLT4gJ2Egb3B0aW9uID0gXCJjYW1sX3dlYWtfZ2V0XCJcbmxldCBnZXQgZSBvID1cbiAgcmFpc2VfaWZfaW52YWxpZF9vZmZzZXQgZSBvIFwiV2Vhay5nZXRcIjtcbiAgZ2V0IGUgb1xuXG5leHRlcm5hbCBnZXRfY29weSA6ICdhIHQgLT4gaW50IC0+ICdhIG9wdGlvbiA9IFwiY2FtbF93ZWFrX2dldF9jb3B5XCJcbmxldCBnZXRfY29weSBlIG8gPVxuICByYWlzZV9pZl9pbnZhbGlkX29mZnNldCBlIG8gXCJXZWFrLmdldF9jb3B5XCI7XG4gIGdldF9jb3B5IGUgb1xuXG5leHRlcm5hbCBjaGVjayA6ICdhIHQgLT4gaW50IC0+IGJvb2wgPSBcImNhbWxfd2Vha19jaGVja1wiXG5sZXQgY2hlY2sgZSBvID1cbiAgcmFpc2VfaWZfaW52YWxpZF9vZmZzZXQgZSBvIFwiV2Vhay5jaGVja1wiO1xuICBjaGVjayBlIG9cblxuZXh0ZXJuYWwgYmxpdCA6ICdhIHQgLT4gaW50IC0+ICdhIHQgLT4gaW50IC0+IGludCAtPiB1bml0ID0gXCJjYW1sX3dlYWtfYmxpdFwiXG5cbigqIGJsaXQ6IHNyYyBzcmNvZmYgZHN0IGRzdG9mZiBsZW4gKilcbmxldCBibGl0IGUxIG8xIGUyIG8yIGwgPVxuICBpZiBsIDwgMCB8fCBvMSA8IDAgfHwgbzEgPiBsZW5ndGggZTEgLSBsXG4gICAgIHx8IG8yIDwgMCB8fCBvMiA+IGxlbmd0aCBlMiAtIGxcbiAgdGhlbiBpbnZhbGlkX2FyZyBcIldlYWsuYmxpdFwiXG4gIGVsc2UgaWYgbCA8PiAwIHRoZW4gYmxpdCBlMSBvMSBlMiBvMiBsXG5cbmxldCBmaWxsIGFyIG9mcyBsZW4geCA9XG4gIGlmIG9mcyA8IDAgfHwgbGVuIDwgMCB8fCBvZnMgPiBsZW5ndGggYXIgLSBsZW5cbiAgdGhlbiByYWlzZSAoSW52YWxpZF9hcmd1bWVudCBcIldlYWsuZmlsbFwiKVxuICBlbHNlIGJlZ2luXG4gICAgZm9yIGkgPSBvZnMgdG8gKG9mcyArIGxlbiAtIDEpIGRvXG4gICAgICBzZXQgYXIgaSB4XG4gICAgZG9uZVxuICBlbmRcblxuXG4oKiogV2VhayBoYXNoIHRhYmxlcyAqKVxuXG5tb2R1bGUgdHlwZSBTID0gc2lnXG4gIHR5cGUgZGF0YVxuICB0eXBlIHRcbiAgdmFsIGNyZWF0ZSA6IGludCAtPiB0XG4gIHZhbCBjbGVhciA6IHQgLT4gdW5pdFxuICB2YWwgbWVyZ2UgOiB0IC0+IGRhdGEgLT4gZGF0YVxuICB2YWwgYWRkIDogdCAtPiBkYXRhIC0+IHVuaXRcbiAgdmFsIHJlbW92ZSA6IHQgLT4gZGF0YSAtPiB1bml0XG4gIHZhbCBmaW5kIDogdCAtPiBkYXRhIC0+IGRhdGFcbiAgdmFsIGZpbmRfb3B0IDogdCAtPiBkYXRhIC0+IGRhdGEgb3B0aW9uXG4gIHZhbCBmaW5kX2FsbCA6IHQgLT4gZGF0YSAtPiBkYXRhIGxpc3RcbiAgdmFsIG1lbSA6IHQgLT4gZGF0YSAtPiBib29sXG4gIHZhbCBpdGVyIDogKGRhdGEgLT4gdW5pdCkgLT4gdCAtPiB1bml0XG4gIHZhbCBmb2xkIDogKGRhdGEgLT4gJ2EgLT4gJ2EpIC0+IHQgLT4gJ2EgLT4gJ2FcbiAgdmFsIGNvdW50IDogdCAtPiBpbnRcbiAgdmFsIHN0YXRzIDogdCAtPiBpbnQgKiBpbnQgKiBpbnQgKiBpbnQgKiBpbnQgKiBpbnRcbmVuZFxuXG5tb2R1bGUgTWFrZSAoSCA6IEhhc2h0YmwuSGFzaGVkVHlwZSkgOiAoUyB3aXRoIHR5cGUgZGF0YSA9IEgudCkgPSBzdHJ1Y3RcblxuICB0eXBlICdhIHdlYWtfdCA9ICdhIHRcbiAgbGV0IHdlYWtfY3JlYXRlID0gY3JlYXRlXG4gIGxldCBlbXB0eWJ1Y2tldCA9IHdlYWtfY3JlYXRlIDBcblxuICB0eXBlIGRhdGEgPSBILnRcblxuICB0eXBlIHQgPSB7XG4gICAgbXV0YWJsZSB0YWJsZSA6IGRhdGEgd2Vha190IGFycmF5O1xuICAgIG11dGFibGUgaGFzaGVzIDogaW50IGFycmF5IGFycmF5O1xuICAgIG11dGFibGUgbGltaXQgOiBpbnQ7ICAgICAgICAgICAgICAgKCogYnVja2V0IHNpemUgbGltaXQgKilcbiAgICBtdXRhYmxlIG92ZXJzaXplIDogaW50OyAgICAgICAgICAgICgqIG51bWJlciBvZiBvdmVyc2l6ZSBidWNrZXRzICopXG4gICAgbXV0YWJsZSByb3ZlciA6IGludDsgICAgICAgICAgICAgICAoKiBmb3IgaW50ZXJuYWwgYm9va2tlZXBpbmcgKilcbiAgfVxuXG4gIGxldCBnZXRfaW5kZXggdCBoID0gKGggbGFuZCBtYXhfaW50KSBtb2QgKEFycmF5Lmxlbmd0aCB0LnRhYmxlKVxuXG4gIGxldCBsaW1pdCA9IDdcbiAgbGV0IG92ZXJfbGltaXQgPSAyXG5cbiAgbGV0IGNyZWF0ZSBzeiA9XG4gICAgbGV0IHN6ID0gaWYgc3ogPCA3IHRoZW4gNyBlbHNlIHN6IGluXG4gICAgbGV0IHN6ID0gaWYgc3ogPiBTeXMubWF4X2FycmF5X2xlbmd0aCB0aGVuIFN5cy5tYXhfYXJyYXlfbGVuZ3RoIGVsc2Ugc3ogaW5cbiAgICB7XG4gICAgICB0YWJsZSA9IEFycmF5Lm1ha2Ugc3ogZW1wdHlidWNrZXQ7XG4gICAgICBoYXNoZXMgPSBBcnJheS5tYWtlIHN6IFt8IHxdO1xuICAgICAgbGltaXQgPSBsaW1pdDtcbiAgICAgIG92ZXJzaXplID0gMDtcbiAgICAgIHJvdmVyID0gMDtcbiAgICB9XG5cbiAgbGV0IGNsZWFyIHQgPVxuICAgIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggdC50YWJsZSAtIDEgZG9cbiAgICAgIHQudGFibGUuKGkpIDwtIGVtcHR5YnVja2V0O1xuICAgICAgdC5oYXNoZXMuKGkpIDwtIFt8IHxdO1xuICAgIGRvbmU7XG4gICAgdC5saW1pdCA8LSBsaW1pdDtcbiAgICB0Lm92ZXJzaXplIDwtIDBcblxuXG4gIGxldCBmb2xkIGYgdCBpbml0ID1cbiAgICBsZXQgcmVjIGZvbGRfYnVja2V0IGkgYiBhY2N1ID1cbiAgICAgIGlmIGkgPj0gbGVuZ3RoIGIgdGhlbiBhY2N1IGVsc2VcbiAgICAgIG1hdGNoIGdldCBiIGkgd2l0aFxuICAgICAgfCBTb21lIHYgLT4gZm9sZF9idWNrZXQgKGkrMSkgYiAoZiB2IGFjY3UpXG4gICAgICB8IE5vbmUgLT4gZm9sZF9idWNrZXQgKGkrMSkgYiBhY2N1XG4gICAgaW5cbiAgICBBcnJheS5mb2xkX3JpZ2h0IChmb2xkX2J1Y2tldCAwKSB0LnRhYmxlIGluaXRcblxuXG4gIGxldCBpdGVyIGYgdCA9XG4gICAgbGV0IHJlYyBpdGVyX2J1Y2tldCBpIGIgPVxuICAgICAgaWYgaSA+PSBsZW5ndGggYiB0aGVuICgpIGVsc2VcbiAgICAgIG1hdGNoIGdldCBiIGkgd2l0aFxuICAgICAgfCBTb21lIHYgLT4gZiB2OyBpdGVyX2J1Y2tldCAoaSsxKSBiXG4gICAgICB8IE5vbmUgLT4gaXRlcl9idWNrZXQgKGkrMSkgYlxuICAgIGluXG4gICAgQXJyYXkuaXRlciAoaXRlcl9idWNrZXQgMCkgdC50YWJsZVxuXG5cbiAgbGV0IGl0ZXJfd2VhayBmIHQgPVxuICAgIGxldCByZWMgaXRlcl9idWNrZXQgaSBqIGIgPVxuICAgICAgaWYgaSA+PSBsZW5ndGggYiB0aGVuICgpIGVsc2VcbiAgICAgIG1hdGNoIGNoZWNrIGIgaSB3aXRoXG4gICAgICB8IHRydWUgLT4gZiBiIHQuaGFzaGVzLihqKSBpOyBpdGVyX2J1Y2tldCAoaSsxKSBqIGJcbiAgICAgIHwgZmFsc2UgLT4gaXRlcl9idWNrZXQgKGkrMSkgaiBiXG4gICAgaW5cbiAgICBBcnJheS5pdGVyaSAoaXRlcl9idWNrZXQgMCkgdC50YWJsZVxuXG5cbiAgbGV0IHJlYyBjb3VudF9idWNrZXQgaSBiIGFjY3UgPVxuICAgIGlmIGkgPj0gbGVuZ3RoIGIgdGhlbiBhY2N1IGVsc2VcbiAgICBjb3VudF9idWNrZXQgKGkrMSkgYiAoYWNjdSArIChpZiBjaGVjayBiIGkgdGhlbiAxIGVsc2UgMCkpXG5cblxuICBsZXQgY291bnQgdCA9XG4gICAgQXJyYXkuZm9sZF9yaWdodCAoY291bnRfYnVja2V0IDApIHQudGFibGUgMFxuXG5cbiAgbGV0IG5leHRfc3ogbiA9IEludC5taW4gKDMgKiBuIC8gMiArIDMpIFN5cy5tYXhfYXJyYXlfbGVuZ3RoXG4gIGxldCBwcmV2X3N6IG4gPSAoKG4gLSAzKSAqIDIgKyAyKSAvIDNcblxuICBsZXQgdGVzdF9zaHJpbmtfYnVja2V0IHQgPVxuICAgIGxldCBidWNrZXQgPSB0LnRhYmxlLih0LnJvdmVyKSBpblxuICAgIGxldCBoYnVja2V0ID0gdC5oYXNoZXMuKHQucm92ZXIpIGluXG4gICAgbGV0IGxlbiA9IGxlbmd0aCBidWNrZXQgaW5cbiAgICBsZXQgcHJldl9sZW4gPSBwcmV2X3N6IGxlbiBpblxuICAgIGxldCBsaXZlID0gY291bnRfYnVja2V0IDAgYnVja2V0IDAgaW5cbiAgICBpZiBsaXZlIDw9IHByZXZfbGVuIHRoZW4gYmVnaW5cbiAgICAgIGxldCByZWMgbG9vcCBpIGogPVxuICAgICAgICBpZiBqID49IHByZXZfbGVuIHRoZW4gYmVnaW5cbiAgICAgICAgICBpZiBjaGVjayBidWNrZXQgaSB0aGVuIGxvb3AgKGkgKyAxKSBqXG4gICAgICAgICAgZWxzZSBpZiBjaGVjayBidWNrZXQgaiB0aGVuIGJlZ2luXG4gICAgICAgICAgICBibGl0IGJ1Y2tldCBqIGJ1Y2tldCBpIDE7XG4gICAgICAgICAgICBoYnVja2V0LihpKSA8LSBoYnVja2V0LihqKTtcbiAgICAgICAgICAgIGxvb3AgKGkgKyAxKSAoaiAtIDEpO1xuICAgICAgICAgIGVuZCBlbHNlIGxvb3AgaSAoaiAtIDEpO1xuICAgICAgICBlbmQ7XG4gICAgICBpblxuICAgICAgbG9vcCAwIChsZW5ndGggYnVja2V0IC0gMSk7XG4gICAgICBpZiBwcmV2X2xlbiA9IDAgdGhlbiBiZWdpblxuICAgICAgICB0LnRhYmxlLih0LnJvdmVyKSA8LSBlbXB0eWJ1Y2tldDtcbiAgICAgICAgdC5oYXNoZXMuKHQucm92ZXIpIDwtIFt8IHxdO1xuICAgICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgICAgbGV0IG5ld2J1Y2tldCA9IHdlYWtfY3JlYXRlIHByZXZfbGVuIGluXG4gICAgICAgIGJsaXQgYnVja2V0IDAgbmV3YnVja2V0IDAgcHJldl9sZW47XG4gICAgICAgIHQudGFibGUuKHQucm92ZXIpIDwtIG5ld2J1Y2tldDtcbiAgICAgICAgdC5oYXNoZXMuKHQucm92ZXIpIDwtIEFycmF5LnN1YiBoYnVja2V0IDAgcHJldl9sZW5cbiAgICAgIGVuZDtcbiAgICAgIGlmIGxlbiA+IHQubGltaXQgJiYgcHJldl9sZW4gPD0gdC5saW1pdCB0aGVuIHQub3ZlcnNpemUgPC0gdC5vdmVyc2l6ZSAtIDE7XG4gICAgZW5kO1xuICAgIHQucm92ZXIgPC0gKHQucm92ZXIgKyAxKSBtb2QgKEFycmF5Lmxlbmd0aCB0LnRhYmxlKVxuXG5cbiAgbGV0IHJlYyByZXNpemUgdCA9XG4gICAgbGV0IG9sZGxlbiA9IEFycmF5Lmxlbmd0aCB0LnRhYmxlIGluXG4gICAgbGV0IG5ld2xlbiA9IG5leHRfc3ogb2xkbGVuIGluXG4gICAgaWYgbmV3bGVuID4gb2xkbGVuIHRoZW4gYmVnaW5cbiAgICAgIGxldCBuZXd0ID0gY3JlYXRlIG5ld2xlbiBpblxuICAgICAgbGV0IGFkZF93ZWFrIG9iIG9oIG9pID1cbiAgICAgICAgbGV0IHNldHRlciBuYiBuaSBfID0gYmxpdCBvYiBvaSBuYiBuaSAxIGluXG4gICAgICAgIGxldCBoID0gb2guKG9pKSBpblxuICAgICAgICBhZGRfYXV4IG5ld3Qgc2V0dGVyIE5vbmUgaCAoZ2V0X2luZGV4IG5ld3QgaCk7XG4gICAgICBpblxuICAgICAgaXRlcl93ZWFrIGFkZF93ZWFrIHQ7XG4gICAgICB0LnRhYmxlIDwtIG5ld3QudGFibGU7XG4gICAgICB0Lmhhc2hlcyA8LSBuZXd0Lmhhc2hlcztcbiAgICAgIHQubGltaXQgPC0gbmV3dC5saW1pdDtcbiAgICAgIHQub3ZlcnNpemUgPC0gbmV3dC5vdmVyc2l6ZTtcbiAgICAgIHQucm92ZXIgPC0gdC5yb3ZlciBtb2QgQXJyYXkubGVuZ3RoIG5ld3QudGFibGU7XG4gICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgIHQubGltaXQgPC0gbWF4X2ludDsgICAgICAgICAgICAgKCogbWF4aW11bSBzaXplIGFscmVhZHkgcmVhY2hlZCAqKVxuICAgICAgdC5vdmVyc2l6ZSA8LSAwO1xuICAgIGVuZFxuXG4gIGFuZCBhZGRfYXV4IHQgc2V0dGVyIGQgaCBpbmRleCA9XG4gICAgbGV0IGJ1Y2tldCA9IHQudGFibGUuKGluZGV4KSBpblxuICAgIGxldCBoYXNoZXMgPSB0Lmhhc2hlcy4oaW5kZXgpIGluXG4gICAgbGV0IHN6ID0gbGVuZ3RoIGJ1Y2tldCBpblxuICAgIGxldCByZWMgbG9vcCBpID1cbiAgICAgIGlmIGkgPj0gc3ogdGhlbiBiZWdpblxuICAgICAgICBsZXQgbmV3c3ogPVxuICAgICAgICAgIEludC5taW4gKDMgKiBzeiAvIDIgKyAzKSAoU3lzLm1heF9hcnJheV9sZW5ndGggLSBhZGRpdGlvbmFsX3ZhbHVlcylcbiAgICAgICAgaW5cbiAgICAgICAgaWYgbmV3c3ogPD0gc3ogdGhlbiBmYWlsd2l0aCBcIldlYWsuTWFrZTogaGFzaCBidWNrZXQgY2Fubm90IGdyb3cgbW9yZVwiO1xuICAgICAgICBsZXQgbmV3YnVja2V0ID0gd2Vha19jcmVhdGUgbmV3c3ogaW5cbiAgICAgICAgbGV0IG5ld2hhc2hlcyA9IEFycmF5Lm1ha2UgbmV3c3ogMCBpblxuICAgICAgICBibGl0IGJ1Y2tldCAwIG5ld2J1Y2tldCAwIHN6O1xuICAgICAgICBBcnJheS5ibGl0IGhhc2hlcyAwIG5ld2hhc2hlcyAwIHN6O1xuICAgICAgICBzZXR0ZXIgbmV3YnVja2V0IHN6IGQ7XG4gICAgICAgIG5ld2hhc2hlcy4oc3opIDwtIGg7XG4gICAgICAgIHQudGFibGUuKGluZGV4KSA8LSBuZXdidWNrZXQ7XG4gICAgICAgIHQuaGFzaGVzLihpbmRleCkgPC0gbmV3aGFzaGVzO1xuICAgICAgICBpZiBzeiA8PSB0LmxpbWl0ICYmIG5ld3N6ID4gdC5saW1pdCB0aGVuIGJlZ2luXG4gICAgICAgICAgdC5vdmVyc2l6ZSA8LSB0Lm92ZXJzaXplICsgMTtcbiAgICAgICAgICBmb3IgX2kgPSAwIHRvIG92ZXJfbGltaXQgZG8gdGVzdF9zaHJpbmtfYnVja2V0IHQgZG9uZTtcbiAgICAgICAgZW5kO1xuICAgICAgICBpZiB0Lm92ZXJzaXplID4gQXJyYXkubGVuZ3RoIHQudGFibGUgLyBvdmVyX2xpbWl0IHRoZW4gcmVzaXplIHQ7XG4gICAgICBlbmQgZWxzZSBpZiBjaGVjayBidWNrZXQgaSB0aGVuIGJlZ2luXG4gICAgICAgIGxvb3AgKGkgKyAxKVxuICAgICAgZW5kIGVsc2UgYmVnaW5cbiAgICAgICAgc2V0dGVyIGJ1Y2tldCBpIGQ7XG4gICAgICAgIGhhc2hlcy4oaSkgPC0gaDtcbiAgICAgIGVuZDtcbiAgICBpblxuICAgIGxvb3AgMFxuXG5cbiAgbGV0IGFkZCB0IGQgPVxuICAgIGxldCBoID0gSC5oYXNoIGQgaW5cbiAgICBhZGRfYXV4IHQgc2V0IChTb21lIGQpIGggKGdldF9pbmRleCB0IGgpXG5cblxuICBsZXQgZmluZF9vciB0IGQgaWZub3Rmb3VuZCA9XG4gICAgbGV0IGggPSBILmhhc2ggZCBpblxuICAgIGxldCBpbmRleCA9IGdldF9pbmRleCB0IGggaW5cbiAgICBsZXQgYnVja2V0ID0gdC50YWJsZS4oaW5kZXgpIGluXG4gICAgbGV0IGhhc2hlcyA9IHQuaGFzaGVzLihpbmRleCkgaW5cbiAgICBsZXQgc3ogPSBsZW5ndGggYnVja2V0IGluXG4gICAgbGV0IHJlYyBsb29wIGkgPVxuICAgICAgaWYgaSA+PSBzeiB0aGVuIGlmbm90Zm91bmQgaCBpbmRleFxuICAgICAgZWxzZSBpZiBoID0gaGFzaGVzLihpKSB0aGVuIGJlZ2luXG4gICAgICAgIG1hdGNoIGdldF9jb3B5IGJ1Y2tldCBpIHdpdGhcbiAgICAgICAgfCBTb21lIHYgd2hlbiBILmVxdWFsIHYgZFxuICAgICAgICAgICAtPiBiZWdpbiBtYXRjaCBnZXQgYnVja2V0IGkgd2l0aFxuICAgICAgICAgICAgICB8IFNvbWUgdiAtPiB2XG4gICAgICAgICAgICAgIHwgTm9uZSAtPiBsb29wIChpICsgMSlcbiAgICAgICAgICAgICAgZW5kXG4gICAgICAgIHwgXyAtPiBsb29wIChpICsgMSlcbiAgICAgIGVuZCBlbHNlIGxvb3AgKGkgKyAxKVxuICAgIGluXG4gICAgbG9vcCAwXG5cblxuICBsZXQgbWVyZ2UgdCBkID1cbiAgICBmaW5kX29yIHQgZCAoZnVuIGggaW5kZXggLT4gYWRkX2F1eCB0IHNldCAoU29tZSBkKSBoIGluZGV4OyBkKVxuXG5cbiAgbGV0IGZpbmQgdCBkID0gZmluZF9vciB0IGQgKGZ1biBfaCBfaW5kZXggLT4gcmFpc2UgTm90X2ZvdW5kKVxuXG4gIGxldCBmaW5kX29wdCB0IGQgPVxuICAgIGxldCBoID0gSC5oYXNoIGQgaW5cbiAgICBsZXQgaW5kZXggPSBnZXRfaW5kZXggdCBoIGluXG4gICAgbGV0IGJ1Y2tldCA9IHQudGFibGUuKGluZGV4KSBpblxuICAgIGxldCBoYXNoZXMgPSB0Lmhhc2hlcy4oaW5kZXgpIGluXG4gICAgbGV0IHN6ID0gbGVuZ3RoIGJ1Y2tldCBpblxuICAgIGxldCByZWMgbG9vcCBpID1cbiAgICAgIGlmIGkgPj0gc3ogdGhlbiBOb25lXG4gICAgICBlbHNlIGlmIGggPSBoYXNoZXMuKGkpIHRoZW4gYmVnaW5cbiAgICAgICAgbWF0Y2ggZ2V0X2NvcHkgYnVja2V0IGkgd2l0aFxuICAgICAgICB8IFNvbWUgdiB3aGVuIEguZXF1YWwgdiBkXG4gICAgICAgICAgIC0+IGJlZ2luIG1hdGNoIGdldCBidWNrZXQgaSB3aXRoXG4gICAgICAgICAgICAgIHwgU29tZSBfIGFzIHYgLT4gdlxuICAgICAgICAgICAgICB8IE5vbmUgLT4gbG9vcCAoaSArIDEpXG4gICAgICAgICAgICAgIGVuZFxuICAgICAgICB8IF8gLT4gbG9vcCAoaSArIDEpXG4gICAgICBlbmQgZWxzZSBsb29wIChpICsgMSlcbiAgICBpblxuICAgIGxvb3AgMFxuXG5cbiAgbGV0IGZpbmRfc2hhZG93IHQgZCBpZmZvdW5kIGlmbm90Zm91bmQgPVxuICAgIGxldCBoID0gSC5oYXNoIGQgaW5cbiAgICBsZXQgaW5kZXggPSBnZXRfaW5kZXggdCBoIGluXG4gICAgbGV0IGJ1Y2tldCA9IHQudGFibGUuKGluZGV4KSBpblxuICAgIGxldCBoYXNoZXMgPSB0Lmhhc2hlcy4oaW5kZXgpIGluXG4gICAgbGV0IHN6ID0gbGVuZ3RoIGJ1Y2tldCBpblxuICAgIGxldCByZWMgbG9vcCBpID1cbiAgICAgIGlmIGkgPj0gc3ogdGhlbiBpZm5vdGZvdW5kXG4gICAgICBlbHNlIGlmIGggPSBoYXNoZXMuKGkpIHRoZW4gYmVnaW5cbiAgICAgICAgbWF0Y2ggZ2V0X2NvcHkgYnVja2V0IGkgd2l0aFxuICAgICAgICB8IFNvbWUgdiB3aGVuIEguZXF1YWwgdiBkIC0+IGlmZm91bmQgYnVja2V0IGlcbiAgICAgICAgfCBfIC0+IGxvb3AgKGkgKyAxKVxuICAgICAgZW5kIGVsc2UgbG9vcCAoaSArIDEpXG4gICAgaW5cbiAgICBsb29wIDBcblxuXG4gIGxldCByZW1vdmUgdCBkID0gZmluZF9zaGFkb3cgdCBkIChmdW4gdyBpIC0+IHNldCB3IGkgTm9uZSkgKClcblxuXG4gIGxldCBtZW0gdCBkID0gZmluZF9zaGFkb3cgdCBkIChmdW4gX3cgX2kgLT4gdHJ1ZSkgZmFsc2VcblxuXG4gIGxldCBmaW5kX2FsbCB0IGQgPVxuICAgIGxldCBoID0gSC5oYXNoIGQgaW5cbiAgICBsZXQgaW5kZXggPSBnZXRfaW5kZXggdCBoIGluXG4gICAgbGV0IGJ1Y2tldCA9IHQudGFibGUuKGluZGV4KSBpblxuICAgIGxldCBoYXNoZXMgPSB0Lmhhc2hlcy4oaW5kZXgpIGluXG4gICAgbGV0IHN6ID0gbGVuZ3RoIGJ1Y2tldCBpblxuICAgIGxldCByZWMgbG9vcCBpIGFjY3UgPVxuICAgICAgaWYgaSA+PSBzeiB0aGVuIGFjY3VcbiAgICAgIGVsc2UgaWYgaCA9IGhhc2hlcy4oaSkgdGhlbiBiZWdpblxuICAgICAgICBtYXRjaCBnZXRfY29weSBidWNrZXQgaSB3aXRoXG4gICAgICAgIHwgU29tZSB2IHdoZW4gSC5lcXVhbCB2IGRcbiAgICAgICAgICAgLT4gYmVnaW4gbWF0Y2ggZ2V0IGJ1Y2tldCBpIHdpdGhcbiAgICAgICAgICAgICAgfCBTb21lIHYgLT4gbG9vcCAoaSArIDEpICh2IDo6IGFjY3UpXG4gICAgICAgICAgICAgIHwgTm9uZSAtPiBsb29wIChpICsgMSkgYWNjdVxuICAgICAgICAgICAgICBlbmRcbiAgICAgICAgfCBfIC0+IGxvb3AgKGkgKyAxKSBhY2N1XG4gICAgICBlbmQgZWxzZSBsb29wIChpICsgMSkgYWNjdVxuICAgIGluXG4gICAgbG9vcCAwIFtdXG5cblxuICBsZXQgc3RhdHMgdCA9XG4gICAgbGV0IGxlbiA9IEFycmF5Lmxlbmd0aCB0LnRhYmxlIGluXG4gICAgbGV0IGxlbnMgPSBBcnJheS5tYXAgbGVuZ3RoIHQudGFibGUgaW5cbiAgICBBcnJheS5zb3J0IGNvbXBhcmUgbGVucztcbiAgICBsZXQgdG90bGVuID0gQXJyYXkuZm9sZF9sZWZ0ICggKyApIDAgbGVucyBpblxuICAgIChsZW4sIGNvdW50IHQsIHRvdGxlbiwgbGVucy4oMCksIGxlbnMuKGxlbi8yKSwgbGVucy4obGVuLTEpKVxuXG5cbmVuZFxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgUGllcnJlIFdlaXMsIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBBIHByZXR0eS1wcmludGluZyBmYWNpbGl0eSBhbmQgZGVmaW5pdGlvbiBvZiBmb3JtYXR0ZXJzIGZvciAncGFyYWxsZWwnXG4gICAoaS5lLiB1bnJlbGF0ZWQgb3IgaW5kZXBlbmRlbnQpIHByZXR0eS1wcmludGluZyBvbiBtdWx0aXBsZSBvdXQgY2hhbm5lbHMuICopXG5cbigqXG4gICBUaGUgcHJldHR5LXByaW50aW5nIGVuZ2luZSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMuXG4qKVxuXG5sZXQgaWQgeCA9IHhcblxuKCogQSBkZXZvdGVkIHR5cGUgZm9yIHNpemVzIHRvIGF2b2lkIGNvbmZ1c2lvblxuICAgYmV0d2VlbiBzaXplcyBhbmQgbWVyZSBpbnRlZ2Vycy4gKilcbm1vZHVsZSBTaXplIDogc2lnXG4gIHR5cGUgdFxuXG4gIHZhbCB0b19pbnQgOiB0IC0+IGludFxuICB2YWwgb2ZfaW50IDogaW50IC0+IHRcbiAgdmFsIHplcm8gOiB0XG4gIHZhbCB1bmtub3duIDogdFxuICB2YWwgaXNfa25vd24gOiB0IC0+IGJvb2xcbmVuZCAgPSBzdHJ1Y3RcbiAgdHlwZSB0ID0gaW50XG5cbiAgbGV0IHRvX2ludCA9IGlkXG4gIGxldCBvZl9pbnQgPSBpZFxuICBsZXQgemVybyA9IDBcbiAgbGV0IHVua25vd24gPSAtMVxuICBsZXQgaXNfa25vd24gbiA9IG4gPj0gMFxuZW5kXG5cblxuXG4oKiBUaGUgcHJldHR5LXByaW50aW5nIGJveGVzIGRlZmluaXRpb246XG4gICBhIHByZXR0eS1wcmludGluZyBib3ggaXMgZWl0aGVyXG4gICAtIGhib3g6IGhvcml6b250YWwgYm94IChubyBsaW5lIHNwbGl0dGluZylcbiAgIC0gdmJveDogdmVydGljYWwgYm94IChldmVyeSBicmVhayBoaW50IHNwbGl0cyB0aGUgbGluZSlcbiAgIC0gaHZib3g6IGhvcml6b250YWwvdmVydGljYWwgYm94XG4gICAgICh0aGUgYm94IGJlaGF2ZXMgYXMgYW4gaG9yaXpvbnRhbCBib3ggaWYgaXQgZml0cyBvblxuICAgICAgdGhlIGN1cnJlbnQgbGluZSwgb3RoZXJ3aXNlIHRoZSBib3ggYmVoYXZlcyBhcyBhIHZlcnRpY2FsIGJveClcbiAgIC0gaG92Ym94OiBob3Jpem9udGFsIG9yIHZlcnRpY2FsIGNvbXBhY3RpbmcgYm94XG4gICAgICh0aGUgYm94IGlzIGNvbXBhY3RpbmcgbWF0ZXJpYWwsIHByaW50aW5nIGFzIG11Y2ggbWF0ZXJpYWwgYXMgcG9zc2libGVcbiAgICAgIG9uIGV2ZXJ5IGxpbmVzKVxuICAgLSBib3g6IGhvcml6b250YWwgb3IgdmVydGljYWwgY29tcGFjdGluZyBib3ggd2l0aCBlbmhhbmNlZCBib3ggc3RydWN0dXJlXG4gICAgICh0aGUgYm94IGJlaGF2ZXMgYXMgYW4gaG9yaXpvbnRhbCBvciB2ZXJ0aWNhbCBib3ggYnV0IGJyZWFrIGhpbnRzIHNwbGl0XG4gICAgICB0aGUgbGluZSBpZiBzcGxpdHRpbmcgd291bGQgbW92ZSB0byB0aGUgbGVmdClcbiopXG50eXBlIGJveF90eXBlID0gQ2FtbGludGVybmFsRm9ybWF0QmFzaWNzLmJsb2NrX3R5cGUgPVxuICB8IFBwX2hib3ggfCBQcF92Ym94IHwgUHBfaHZib3ggfCBQcF9ob3Zib3ggfCBQcF9ib3ggfCBQcF9maXRzXG5cblxuKCogVGhlIHByZXR0eS1wcmludGluZyB0b2tlbnMgZGVmaW5pdGlvbjpcbiAgIGFyZSBlaXRoZXIgdGV4dCB0byBwcmludCBvciBwcmV0dHkgcHJpbnRpbmdcbiAgIGVsZW1lbnRzIHRoYXQgZHJpdmUgaW5kZW50YXRpb24gYW5kIGxpbmUgc3BsaXR0aW5nLiAqKVxudHlwZSBwcF90b2tlbiA9XG4gIHwgUHBfdGV4dCBvZiBzdHJpbmcgICAgICAgICAgKCogbm9ybWFsIHRleHQgKilcbiAgfCBQcF9icmVhayBvZiB7ICAgICAgICAgICAgICAoKiBjb21wbGV0ZSBicmVhayAqKVxuICAgICAgZml0czogc3RyaW5nICogaW50ICogc3RyaW5nOyAgICgqIGxpbmUgaXMgbm90IHNwbGl0ICopXG4gICAgICBicmVha3M6IHN0cmluZyAqIGludCAqIHN0cmluZzsgKCogbGluZSBpcyBzcGxpdCAqKVxuICAgIH1cbiAgfCBQcF90YnJlYWsgb2YgaW50ICogaW50ICAgICAoKiBnbyB0byBuZXh0IHRhYnVsYXRpb24gKilcbiAgfCBQcF9zdGFiICAgICAgICAgICAgICAgICAgICAoKiBzZXQgYSB0YWJ1bGF0aW9uICopXG4gIHwgUHBfYmVnaW4gb2YgaW50ICogYm94X3R5cGUgKCogYmVnaW5uaW5nIG9mIGEgYm94ICopXG4gIHwgUHBfZW5kICAgICAgICAgICAgICAgICAgICAgKCogZW5kIG9mIGEgYm94ICopXG4gIHwgUHBfdGJlZ2luIG9mIHRib3ggICAgICAgICAgKCogYmVnaW5uaW5nIG9mIGEgdGFidWxhdGlvbiBib3ggKilcbiAgfCBQcF90ZW5kICAgICAgICAgICAgICAgICAgICAoKiBlbmQgb2YgYSB0YWJ1bGF0aW9uIGJveCAqKVxuICB8IFBwX25ld2xpbmUgICAgICAgICAgICAgICAgICgqIHRvIGZvcmNlIGEgbmV3bGluZSBpbnNpZGUgYSBib3ggKilcbiAgfCBQcF9pZl9uZXdsaW5lICAgICAgICAgICAgICAoKiB0byBkbyBzb21ldGhpbmcgb25seSBpZiB0aGlzIHZlcnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lIGhhcyBiZWVuIGJyb2tlbiAqKVxuICB8IFBwX29wZW5fdGFnIG9mIHN0YWcgICAgICAgICAoKiBvcGVuaW5nIGEgdGFnIG5hbWUgKilcbiAgfCBQcF9jbG9zZV90YWcgICAgICAgICAgICAgICAoKiBjbG9zaW5nIHRoZSBtb3N0IHJlY2VudGx5IG9wZW4gdGFnICopXG5cbmFuZCBzdGFnID0gLi5cblxuYW5kIHRib3ggPSBQcF90Ym94IG9mIGludCBsaXN0IHJlZiAgKCogVGFidWxhdGlvbiBib3ggKilcblxudHlwZSB0YWcgPSBzdHJpbmdcbnR5cGUgc3RhZyArPSBTdHJpbmdfdGFnIG9mIHRhZ1xuXG5cbigqIFRoZSBwcmV0dHktcHJpbnRlciBxdWV1ZTpcbiAgIHByZXR0eS1wcmludGluZyBtYXRlcmlhbCBpcyBub3Qgd3JpdHRlbiBpbiB0aGUgb3V0cHV0IGFzIHNvb24gYXMgZW1pdHRlZDtcbiAgIGluc3RlYWQsIHRoZSBtYXRlcmlhbCBpcyBzaW1wbHkgcmVjb3JkZWQgaW4gdGhlIHByZXR0eS1wcmludGVyIHF1ZXVlLFxuICAgdW50aWwgdGhlIGVuY2xvc2luZyBib3ggaGFzIGEga25vd24gY29tcHV0ZWQgc2l6ZSBhbmQgcHJvcGVyIHNwbGl0dGluZ1xuICAgZGVjaXNpb25zIGNhbiBiZSBtYWRlLlxuXG4gICBUaGUgcHJldHR5LXByaW50ZXIgcXVldWUgY29udGFpbnMgZm9ybWF0dGluZyBlbGVtZW50cyB0byBiZSBwcmludGVkLlxuICAgRWFjaCBmb3JtYXR0aW5nIGVsZW1lbnQgaXMgYSB0dXBsZSAoc2l6ZSwgdG9rZW4sIGxlbmd0aCksIHdoZXJlXG4gICAtIGxlbmd0aCBpcyB0aGUgZGVjbGFyZWQgbGVuZ3RoIG9mIHRoZSB0b2tlbixcbiAgIC0gc2l6ZSBpcyBlZmZlY3RpdmUgc2l6ZSBvZiB0aGUgdG9rZW4gd2hlbiBpdCBpcyBwcmludGVkXG4gICAgIChzaXplIGlzIHNldCB3aGVuIHRoZSBzaXplIG9mIHRoZSBib3ggaXMga25vd24sIHNvIHRoYXQgc2l6ZSBvZiBicmVha1xuICAgICAgaGludHMgYXJlIGRlZmluaXRpdmUpLiAqKVxudHlwZSBwcF9xdWV1ZV9lbGVtID0ge1xuICBtdXRhYmxlIHNpemUgOiBTaXplLnQ7XG4gIHRva2VuIDogcHBfdG9rZW47XG4gIGxlbmd0aCA6IGludDtcbn1cblxuXG4oKiBUaGUgcHJldHR5LXByaW50ZXIgcXVldWUgZGVmaW5pdGlvbi4gKilcbnR5cGUgcHBfcXVldWUgPSBwcF9xdWV1ZV9lbGVtIFF1ZXVlLnRcblxuKCogVGhlIHByZXR0eS1wcmludGVyIHNjYW5uaW5nIHN0YWNrLiAqKVxuXG4oKiBUaGUgcHJldHR5LXByaW50ZXIgc2Nhbm5pbmcgc3RhY2s6IHNjYW5uaW5nIGVsZW1lbnQgZGVmaW5pdGlvbi4gKilcbnR5cGUgcHBfc2Nhbl9lbGVtID0ge1xuICBsZWZ0X3RvdGFsIDogaW50OyAoKiBWYWx1ZSBvZiBwcF9sZWZ0X3RvdGFsIHdoZW4gdGhlIGVsZW1lbnQgd2FzIGVucXVldWVkLiAqKVxuICBxdWV1ZV9lbGVtIDogcHBfcXVldWVfZWxlbVxufVxuXG4oKiBUaGUgcHJldHR5LXByaW50ZXIgZm9ybWF0dGluZyBzdGFjazpcbiAgIHRoZSBmb3JtYXR0aW5nIHN0YWNrIGNvbnRhaW5zIHRoZSBkZXNjcmlwdGlvbiBvZiBhbGwgdGhlIGN1cnJlbnRseSBhY3RpdmVcbiAgIGJveGVzOyB0aGUgcHJldHR5LXByaW50ZXIgZm9ybWF0dGluZyBzdGFjayBpcyB1c2VkIHRvIHNwbGl0IHRoZSBsaW5lc1xuICAgd2hpbGUgcHJpbnRpbmcgdG9rZW5zLiAqKVxuXG4oKiBUaGUgcHJldHR5LXByaW50ZXIgZm9ybWF0dGluZyBzdGFjazogZm9ybWF0dGluZyBzdGFjayBlbGVtZW50IGRlZmluaXRpb24uXG4gICBFYWNoIHN0YWNrIGVsZW1lbnQgZGVzY3JpYmVzIGEgcHJldHR5LXByaW50aW5nIGJveC4gKilcbnR5cGUgcHBfZm9ybWF0X2VsZW0gPSB7IGJveF90eXBlIDogYm94X3R5cGU7IHdpZHRoIDogaW50IH1cblxuKCogVGhlIGZvcm1hdHRlciBkZWZpbml0aW9uLlxuICAgRWFjaCBmb3JtYXR0ZXIgdmFsdWUgaXMgYSBwcmV0dHktcHJpbnRlciBpbnN0YW5jZSB3aXRoIGFsbCBpdHNcbiAgIG1hY2hpbmVyeS4gKilcbnR5cGUgZm9ybWF0dGVyID0ge1xuICAoKiBUaGUgcHJldHR5LXByaW50ZXIgc2Nhbm5pbmcgc3RhY2suICopXG4gIHBwX3NjYW5fc3RhY2sgOiBwcF9zY2FuX2VsZW0gU3RhY2sudDtcbiAgKCogVGhlIHByZXR0eS1wcmludGVyIGZvcm1hdHRpbmcgc3RhY2suICopXG4gIHBwX2Zvcm1hdF9zdGFjayA6IHBwX2Zvcm1hdF9lbGVtIFN0YWNrLnQ7XG4gIHBwX3Rib3hfc3RhY2sgOiB0Ym94IFN0YWNrLnQ7XG4gICgqIFRoZSBwcmV0dHktcHJpbnRlciBzZW1hbnRpY3MgdGFnIHN0YWNrLiAqKVxuICBwcF90YWdfc3RhY2sgOiBzdGFnIFN0YWNrLnQ7XG4gIHBwX21hcmtfc3RhY2sgOiBzdGFnIFN0YWNrLnQ7XG4gICgqIFZhbHVlIG9mIHJpZ2h0IG1hcmdpbi4gKilcbiAgbXV0YWJsZSBwcF9tYXJnaW4gOiBpbnQ7XG4gICgqIE1pbmltYWwgc3BhY2UgbGVmdCBiZWZvcmUgbWFyZ2luLCB3aGVuIG9wZW5pbmcgYSBib3guICopXG4gIG11dGFibGUgcHBfbWluX3NwYWNlX2xlZnQgOiBpbnQ7XG4gICgqIE1heGltdW0gdmFsdWUgb2YgaW5kZW50YXRpb246XG4gICAgIG5vIGJveCBjYW4gYmUgb3BlbmVkIGZ1cnRoZXIuICopXG4gIG11dGFibGUgcHBfbWF4X2luZGVudCA6IGludDtcbiAgKCogU3BhY2UgcmVtYWluaW5nIG9uIHRoZSBjdXJyZW50IGxpbmUuICopXG4gIG11dGFibGUgcHBfc3BhY2VfbGVmdCA6IGludDtcbiAgKCogQ3VycmVudCB2YWx1ZSBvZiBpbmRlbnRhdGlvbi4gKilcbiAgbXV0YWJsZSBwcF9jdXJyZW50X2luZGVudCA6IGludDtcbiAgKCogVHJ1ZSB3aGVuIHRoZSBsaW5lIGhhcyBiZWVuIGJyb2tlbiBieSB0aGUgcHJldHR5LXByaW50ZXIuICopXG4gIG11dGFibGUgcHBfaXNfbmV3X2xpbmUgOiBib29sO1xuICAoKiBUb3RhbCB3aWR0aCBvZiB0b2tlbnMgYWxyZWFkeSBwcmludGVkLiAqKVxuICBtdXRhYmxlIHBwX2xlZnRfdG90YWwgOiBpbnQ7XG4gICgqIFRvdGFsIHdpZHRoIG9mIHRva2VucyBldmVyIHB1dCBpbiBxdWV1ZS4gKilcbiAgbXV0YWJsZSBwcF9yaWdodF90b3RhbCA6IGludDtcbiAgKCogQ3VycmVudCBudW1iZXIgb2Ygb3BlbiBib3hlcy4gKilcbiAgbXV0YWJsZSBwcF9jdXJyX2RlcHRoIDogaW50O1xuICAoKiBNYXhpbXVtIG51bWJlciBvZiBib3hlcyB3aGljaCBjYW4gYmUgc2ltdWx0YW5lb3VzbHkgb3Blbi4gKilcbiAgbXV0YWJsZSBwcF9tYXhfYm94ZXMgOiBpbnQ7XG4gICgqIEVsbGlwc2lzIHN0cmluZy4gKilcbiAgbXV0YWJsZSBwcF9lbGxpcHNpcyA6IHN0cmluZztcbiAgKCogT3V0cHV0IGZ1bmN0aW9uLiAqKVxuICBtdXRhYmxlIHBwX291dF9zdHJpbmcgOiBzdHJpbmcgLT4gaW50IC0+IGludCAtPiB1bml0O1xuICAoKiBGbHVzaGluZyBmdW5jdGlvbi4gKilcbiAgbXV0YWJsZSBwcF9vdXRfZmx1c2ggOiB1bml0IC0+IHVuaXQ7XG4gICgqIE91dHB1dCBvZiBuZXcgbGluZXMuICopXG4gIG11dGFibGUgcHBfb3V0X25ld2xpbmUgOiB1bml0IC0+IHVuaXQ7XG4gICgqIE91dHB1dCBvZiBicmVhayBoaW50cyBzcGFjZXMuICopXG4gIG11dGFibGUgcHBfb3V0X3NwYWNlcyA6IGludCAtPiB1bml0O1xuICAoKiBPdXRwdXQgb2YgaW5kZW50YXRpb24gb2YgbmV3IGxpbmVzLiAqKVxuICBtdXRhYmxlIHBwX291dF9pbmRlbnQgOiBpbnQgLT4gdW5pdDtcbiAgKCogQXJlIHRhZ3MgcHJpbnRlZCA/ICopXG4gIG11dGFibGUgcHBfcHJpbnRfdGFncyA6IGJvb2w7XG4gICgqIEFyZSB0YWdzIG1hcmtlZCA/ICopXG4gIG11dGFibGUgcHBfbWFya190YWdzIDogYm9vbDtcbiAgKCogRmluZCBvcGVuaW5nIGFuZCBjbG9zaW5nIG1hcmtlcnMgb2YgdGFncy4gKilcbiAgbXV0YWJsZSBwcF9tYXJrX29wZW5fdGFnIDogc3RhZyAtPiBzdHJpbmc7XG4gIG11dGFibGUgcHBfbWFya19jbG9zZV90YWcgOiBzdGFnIC0+IHN0cmluZztcbiAgbXV0YWJsZSBwcF9wcmludF9vcGVuX3RhZyA6IHN0YWcgLT4gdW5pdDtcbiAgbXV0YWJsZSBwcF9wcmludF9jbG9zZV90YWcgOiBzdGFnIC0+IHVuaXQ7XG4gICgqIFRoZSBwcmV0dHktcHJpbnRlciBxdWV1ZS4gKilcbiAgcHBfcXVldWUgOiBwcF9xdWV1ZTtcbn1cblxuXG4oKiBUaGUgZm9ybWF0dGVyIHNwZWNpZmljIHRhZyBoYW5kbGluZyBmdW5jdGlvbnMuICopXG50eXBlIGZvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyA9IHtcbiAgbWFya19vcGVuX3N0YWcgOiBzdGFnIC0+IHN0cmluZztcbiAgbWFya19jbG9zZV9zdGFnIDogc3RhZyAtPiBzdHJpbmc7XG4gIHByaW50X29wZW5fc3RhZyA6IHN0YWcgLT4gdW5pdDtcbiAgcHJpbnRfY2xvc2Vfc3RhZyA6IHN0YWcgLT4gdW5pdDtcbn1cblxuXG4oKiBUaGUgZm9ybWF0dGVyIGZ1bmN0aW9ucyB0byBvdXRwdXQgbWF0ZXJpYWwuICopXG50eXBlIGZvcm1hdHRlcl9vdXRfZnVuY3Rpb25zID0ge1xuICBvdXRfc3RyaW5nIDogc3RyaW5nIC0+IGludCAtPiBpbnQgLT4gdW5pdDtcbiAgb3V0X2ZsdXNoIDogdW5pdCAtPiB1bml0O1xuICBvdXRfbmV3bGluZSA6IHVuaXQgLT4gdW5pdDtcbiAgb3V0X3NwYWNlcyA6IGludCAtPiB1bml0O1xuICBvdXRfaW5kZW50IDogaW50IC0+IHVuaXQ7XG59XG5cblxuKCpcblxuICBBdXhpbGlhcmllcyBhbmQgYmFzaWMgZnVuY3Rpb25zLlxuXG4qKVxuXG4oKiBFbnRlciBhIHRva2VuIGluIHRoZSBwcmV0dHktcHJpbnRlciBxdWV1ZS4gKilcbmxldCBwcF9lbnF1ZXVlIHN0YXRlIHRva2VuID1cbiAgc3RhdGUucHBfcmlnaHRfdG90YWwgPC0gc3RhdGUucHBfcmlnaHRfdG90YWwgKyB0b2tlbi5sZW5ndGg7XG4gIFF1ZXVlLmFkZCB0b2tlbiBzdGF0ZS5wcF9xdWV1ZVxuXG5cbmxldCBwcF9jbGVhcl9xdWV1ZSBzdGF0ZSA9XG4gIHN0YXRlLnBwX2xlZnRfdG90YWwgPC0gMTsgc3RhdGUucHBfcmlnaHRfdG90YWwgPC0gMTtcbiAgUXVldWUuY2xlYXIgc3RhdGUucHBfcXVldWVcblxuXG4oKiBQcF9pbmZpbml0eTogbGFyZ2UgdmFsdWUgZm9yIGRlZmF1bHQgdG9rZW5zIHNpemUuXG5cbiAgIFBwX2luZmluaXR5IGlzIGRvY3VtZW50ZWQgYXMgYmVpbmcgZ3JlYXRlciB0aGFuIDFlMTA7IHRvIGF2b2lkXG4gICBjb25mdXNpb24gYWJvdXQgdGhlIHdvcmQgJ2dyZWF0ZXInLCB3ZSBjaG9vc2UgcHBfaW5maW5pdHkgZ3JlYXRlclxuICAgdGhhbiAxZTEwICsgMTsgZm9yIGNvcnJlY3QgaGFuZGxpbmcgb2YgdGVzdHMgaW4gdGhlIGFsZ29yaXRobSxcbiAgIHBwX2luZmluaXR5IG11c3QgYmUgZXZlbiBvbmUgbW9yZSB0aGFuIDFlMTAgKyAxOyBsZXQncyBzdGFuZCBvbiB0aGVcbiAgIHNhZmUgc2lkZSBieSBjaG9vc2luZyAxLmUxMCsxMC5cblxuICAgUHBfaW5maW5pdHkgY291bGQgcHJvYmFibHkgYmUgMTA3Mzc0MTgyMyB0aGF0IGlzIDJeMzAgLSAxLCB0aGF0IGlzXG4gICB0aGUgbWluaW1hbCB1cHBlciBib3VuZCBmb3IgaW50ZWdlcnM7IG5vdyB0aGF0IG1heF9pbnQgaXMgZGVmaW5lZCxcbiAgIHRoaXMgbGltaXQgY291bGQgYWxzbyBiZSBkZWZpbmVkIGFzIG1heF9pbnQgLSAxLlxuXG4gICBIb3dldmVyLCBiZWZvcmUgc2V0dGluZyBwcF9pbmZpbml0eSB0byBzb21ldGhpbmcgYXJvdW5kIG1heF9pbnQsIHdlXG4gICBtdXN0IGNhcmVmdWxseSBkb3VibGUtY2hlY2sgYWxsIHRoZSBpbnRlZ2VyIGFyaXRobWV0aWMgb3BlcmF0aW9uc1xuICAgdGhhdCBpbnZvbHZlIHBwX2luZmluaXR5LCBzaW5jZSBhbnkgb3ZlcmZsb3cgd291bGQgd3JlY2sgaGF2b2MgdGhlXG4gICBwcmV0dHktcHJpbnRpbmcgYWxnb3JpdGhtJ3MgaW52YXJpYW50cy4gR2l2ZW4gdGhhdCB0aGlzIGFyaXRobWV0aWNcbiAgIGNvcnJlY3RuZXNzIGNoZWNrIGlzIGRpZmZpY3VsdCBhbmQgZXJyb3IgcHJvbmUgYW5kIGdpdmVuIHRoYXQgMWUxMFxuICAgKyAxIGlzIGluIHByYWN0aWNlIGxhcmdlIGVub3VnaCwgdGhlcmUgaXMgbm8gbmVlZCB0byBhdHRlbXB0IHRvIHNldFxuICAgcHBfaW5maW5pdHkgdG8gdGhlIHRoZW9yZXRpY2FsbHkgbWF4aW11bSBsaW1pdC4gSXQgaXMgbm90IHdvcnRoIHRoZVxuICAgYnVyZGVuICEgKilcbmxldCBwcF9pbmZpbml0eSA9IDEwMDAwMDAwMTBcblxuKCogT3V0cHV0IGZ1bmN0aW9ucyBmb3IgdGhlIGZvcm1hdHRlci4gKilcbmxldCBwcF9vdXRwdXRfc3RyaW5nIHN0YXRlIHMgPSBzdGF0ZS5wcF9vdXRfc3RyaW5nIHMgMCAoU3RyaW5nLmxlbmd0aCBzKVxuYW5kIHBwX291dHB1dF9uZXdsaW5lIHN0YXRlID0gc3RhdGUucHBfb3V0X25ld2xpbmUgKClcbmFuZCBwcF9vdXRwdXRfc3BhY2VzIHN0YXRlIG4gPSBzdGF0ZS5wcF9vdXRfc3BhY2VzIG5cbmFuZCBwcF9vdXRwdXRfaW5kZW50IHN0YXRlIG4gPSBzdGF0ZS5wcF9vdXRfaW5kZW50IG5cblxuKCogRm9ybWF0IGEgdGV4dHVhbCB0b2tlbiAqKVxubGV0IGZvcm1hdF9wcF90ZXh0IHN0YXRlIHNpemUgdGV4dCA9XG4gIHN0YXRlLnBwX3NwYWNlX2xlZnQgPC0gc3RhdGUucHBfc3BhY2VfbGVmdCAtIHNpemU7XG4gIHBwX291dHB1dF9zdHJpbmcgc3RhdGUgdGV4dDtcbiAgc3RhdGUucHBfaXNfbmV3X2xpbmUgPC0gZmFsc2VcblxuKCogRm9ybWF0IGEgc3RyaW5nIGJ5IGl0cyBsZW5ndGgsIGlmIG5vdCBlbXB0eSAqKVxubGV0IGZvcm1hdF9zdHJpbmcgc3RhdGUgcyA9XG4gIGlmIHMgPD4gXCJcIiB0aGVuIGZvcm1hdF9wcF90ZXh0IHN0YXRlIChTdHJpbmcubGVuZ3RoIHMpIHNcblxuKCogVG8gZm9ybWF0IGEgYnJlYWssIGluZGVudGluZyBhIG5ldyBsaW5lLiAqKVxubGV0IGJyZWFrX25ld19saW5lIHN0YXRlIChiZWZvcmUsIG9mZnNldCwgYWZ0ZXIpIHdpZHRoID1cbiAgZm9ybWF0X3N0cmluZyBzdGF0ZSBiZWZvcmU7XG4gIHBwX291dHB1dF9uZXdsaW5lIHN0YXRlO1xuICBzdGF0ZS5wcF9pc19uZXdfbGluZSA8LSB0cnVlO1xuICBsZXQgaW5kZW50ID0gc3RhdGUucHBfbWFyZ2luIC0gd2lkdGggKyBvZmZzZXQgaW5cbiAgKCogRG9uJ3QgaW5kZW50IG1vcmUgdGhhbiBwcF9tYXhfaW5kZW50LiAqKVxuICBsZXQgcmVhbF9pbmRlbnQgPSBJbnQubWluIHN0YXRlLnBwX21heF9pbmRlbnQgaW5kZW50IGluXG4gIHN0YXRlLnBwX2N1cnJlbnRfaW5kZW50IDwtIHJlYWxfaW5kZW50O1xuICBzdGF0ZS5wcF9zcGFjZV9sZWZ0IDwtIHN0YXRlLnBwX21hcmdpbiAtIHN0YXRlLnBwX2N1cnJlbnRfaW5kZW50O1xuICBwcF9vdXRwdXRfaW5kZW50IHN0YXRlIHN0YXRlLnBwX2N1cnJlbnRfaW5kZW50O1xuICBmb3JtYXRfc3RyaW5nIHN0YXRlIGFmdGVyXG5cblxuKCogVG8gZm9yY2UgYSBsaW5lIGJyZWFrIGluc2lkZSBhIGJveDogbm8gb2Zmc2V0IGlzIGFkZGVkLiAqKVxubGV0IGJyZWFrX2xpbmUgc3RhdGUgd2lkdGggPSBicmVha19uZXdfbGluZSBzdGF0ZSAoXCJcIiwgMCwgXCJcIikgd2lkdGhcblxuKCogVG8gZm9ybWF0IGEgYnJlYWsgdGhhdCBmaXRzIG9uIHRoZSBjdXJyZW50IGxpbmUuICopXG5sZXQgYnJlYWtfc2FtZV9saW5lIHN0YXRlIChiZWZvcmUsIHdpZHRoLCBhZnRlcikgPVxuICBmb3JtYXRfc3RyaW5nIHN0YXRlIGJlZm9yZTtcbiAgc3RhdGUucHBfc3BhY2VfbGVmdCA8LSBzdGF0ZS5wcF9zcGFjZV9sZWZ0IC0gd2lkdGg7XG4gIHBwX291dHB1dF9zcGFjZXMgc3RhdGUgd2lkdGg7XG4gIGZvcm1hdF9zdHJpbmcgc3RhdGUgYWZ0ZXJcblxuXG4oKiBUbyBpbmRlbnQgbm8gbW9yZSB0aGFuIHBwX21heF9pbmRlbnQsIGlmIG9uZSB0cmllcyB0byBvcGVuIGEgYm94XG4gICBiZXlvbmQgcHBfbWF4X2luZGVudCwgdGhlbiB0aGUgYm94IGlzIHJlamVjdGVkIG9uIHRoZSBsZWZ0XG4gICBieSBzaW11bGF0aW5nIGEgYnJlYWsuICopXG5sZXQgcHBfZm9yY2VfYnJlYWtfbGluZSBzdGF0ZSA9XG4gIG1hdGNoIFN0YWNrLnRvcF9vcHQgc3RhdGUucHBfZm9ybWF0X3N0YWNrIHdpdGhcbiAgfCBOb25lIC0+IHBwX291dHB1dF9uZXdsaW5lIHN0YXRlXG4gIHwgU29tZSB7IGJveF90eXBlOyB3aWR0aCB9IC0+XG4gICAgaWYgd2lkdGggPiBzdGF0ZS5wcF9zcGFjZV9sZWZ0IHRoZW5cbiAgICAgIG1hdGNoIGJveF90eXBlIHdpdGhcbiAgICAgIHwgUHBfZml0cyB8IFBwX2hib3ggLT4gKClcbiAgICAgIHwgUHBfdmJveCB8IFBwX2h2Ym94IHwgUHBfaG92Ym94IHwgUHBfYm94IC0+IGJyZWFrX2xpbmUgc3RhdGUgd2lkdGhcblxuXG4oKiBUbyBza2lwIGEgdG9rZW4sIGlmIHRoZSBwcmV2aW91cyBsaW5lIGhhcyBiZWVuIGJyb2tlbi4gKilcbmxldCBwcF9za2lwX3Rva2VuIHN0YXRlID1cbiAgbWF0Y2ggUXVldWUudGFrZV9vcHQgc3RhdGUucHBfcXVldWUgd2l0aFxuICB8IE5vbmUgLT4gKCkgKCogcHJpbnRfaWZfbmV3bGluZSBtdXN0IGhhdmUgYmVlbiB0aGUgbGFzdCBwcmludGluZyBjb21tYW5kICopXG4gIHwgU29tZSB7IHNpemU7IGxlbmd0aDsgXyB9IC0+XG4gICAgc3RhdGUucHBfbGVmdF90b3RhbCA8LSBzdGF0ZS5wcF9sZWZ0X3RvdGFsIC0gbGVuZ3RoO1xuICAgIHN0YXRlLnBwX3NwYWNlX2xlZnQgPC0gc3RhdGUucHBfc3BhY2VfbGVmdCArIFNpemUudG9faW50IHNpemVcblxuXG4oKlxuXG4gIFRoZSBtYWluIHByZXR0eSBwcmludGluZyBmdW5jdGlvbnMuXG5cbiopXG5cbigqIEZvcm1hdHRpbmcgYSB0b2tlbiB3aXRoIGEgZ2l2ZW4gc2l6ZS4gKilcbmxldCBmb3JtYXRfcHBfdG9rZW4gc3RhdGUgc2l6ZSA9IGZ1bmN0aW9uXG5cbiAgfCBQcF90ZXh0IHMgLT5cbiAgICBmb3JtYXRfcHBfdGV4dCBzdGF0ZSBzaXplIHNcblxuICB8IFBwX2JlZ2luIChvZmYsIHR5KSAtPlxuICAgIGxldCBpbnNlcnRpb25fcG9pbnQgPSBzdGF0ZS5wcF9tYXJnaW4gLSBzdGF0ZS5wcF9zcGFjZV9sZWZ0IGluXG4gICAgaWYgaW5zZXJ0aW9uX3BvaW50ID4gc3RhdGUucHBfbWF4X2luZGVudCB0aGVuXG4gICAgICAoKiBjYW4gbm90IG9wZW4gYSBib3ggcmlnaHQgdGhlcmUuICopXG4gICAgICBiZWdpbiBwcF9mb3JjZV9icmVha19saW5lIHN0YXRlIGVuZDtcbiAgICBsZXQgd2lkdGggPSBzdGF0ZS5wcF9zcGFjZV9sZWZ0IC0gb2ZmIGluXG4gICAgbGV0IGJveF90eXBlID1cbiAgICAgIG1hdGNoIHR5IHdpdGhcbiAgICAgIHwgUHBfdmJveCAtPiBQcF92Ym94XG4gICAgICB8IFBwX2hib3ggfCBQcF9odmJveCB8IFBwX2hvdmJveCB8IFBwX2JveCB8IFBwX2ZpdHMgLT5cbiAgICAgICAgaWYgc2l6ZSA+IHN0YXRlLnBwX3NwYWNlX2xlZnQgdGhlbiB0eSBlbHNlIFBwX2ZpdHMgaW5cbiAgICBTdGFjay5wdXNoIHsgYm94X3R5cGU7IHdpZHRoIH0gc3RhdGUucHBfZm9ybWF0X3N0YWNrXG5cbiAgfCBQcF9lbmQgLT5cbiAgICBTdGFjay5wb3Bfb3B0IHN0YXRlLnBwX2Zvcm1hdF9zdGFjayB8PiBpZ25vcmVcblxuICB8IFBwX3RiZWdpbiAoUHBfdGJveCBfIGFzIHRib3gpIC0+XG4gICAgU3RhY2sucHVzaCB0Ym94IHN0YXRlLnBwX3Rib3hfc3RhY2tcblxuICB8IFBwX3RlbmQgLT5cbiAgICBTdGFjay5wb3Bfb3B0IHN0YXRlLnBwX3Rib3hfc3RhY2sgfD4gaWdub3JlXG5cbiAgfCBQcF9zdGFiIC0+XG4gICAgYmVnaW4gbWF0Y2ggU3RhY2sudG9wX29wdCBzdGF0ZS5wcF90Ym94X3N0YWNrIHdpdGhcbiAgICB8IE5vbmUgLT4gKCkgKCogTm8gb3BlbiB0YWJ1bGF0aW9uIGJveC4gKilcbiAgICB8IFNvbWUgKFBwX3Rib3ggdGFicykgLT5cbiAgICAgIGxldCByZWMgYWRkX3RhYiBuID0gZnVuY3Rpb25cbiAgICAgICAgfCBbXSAtPiBbbl1cbiAgICAgICAgfCB4IDo6IGwgYXMgbHMgLT4gaWYgbiA8IHggdGhlbiBuIDo6IGxzIGVsc2UgeCA6OiBhZGRfdGFiIG4gbCBpblxuICAgICAgdGFicyA6PSBhZGRfdGFiIChzdGF0ZS5wcF9tYXJnaW4gLSBzdGF0ZS5wcF9zcGFjZV9sZWZ0KSAhdGFic1xuICAgIGVuZFxuXG4gIHwgUHBfdGJyZWFrIChuLCBvZmYpIC0+XG4gICAgbGV0IGluc2VydGlvbl9wb2ludCA9IHN0YXRlLnBwX21hcmdpbiAtIHN0YXRlLnBwX3NwYWNlX2xlZnQgaW5cbiAgICBiZWdpbiBtYXRjaCBTdGFjay50b3Bfb3B0IHN0YXRlLnBwX3Rib3hfc3RhY2sgd2l0aFxuICAgIHwgTm9uZSAtPiAoKSAoKiBObyBvcGVuIHRhYnVsYXRpb24gYm94LiAqKVxuICAgIHwgU29tZSAoUHBfdGJveCB0YWJzKSAtPlxuICAgICAgbGV0IHRhYiA9XG4gICAgICAgIG1hdGNoICF0YWJzIHdpdGhcbiAgICAgICAgfCBbXSAtPiBpbnNlcnRpb25fcG9pbnRcbiAgICAgICAgfCBmaXJzdCA6OiBfIC0+XG4gICAgICAgICAgbGV0IHJlYyBmaW5kID0gZnVuY3Rpb25cbiAgICAgICAgICAgIHwgaGVhZCA6OiB0YWlsIC0+XG4gICAgICAgICAgICAgIGlmIGhlYWQgPj0gaW5zZXJ0aW9uX3BvaW50IHRoZW4gaGVhZCBlbHNlIGZpbmQgdGFpbFxuICAgICAgICAgICAgfCBbXSAtPiBmaXJzdCBpblxuICAgICAgICAgIGZpbmQgIXRhYnMgaW5cbiAgICAgIGxldCBvZmZzZXQgPSB0YWIgLSBpbnNlcnRpb25fcG9pbnQgaW5cbiAgICAgIGlmIG9mZnNldCA+PSAwXG4gICAgICB0aGVuIGJyZWFrX3NhbWVfbGluZSBzdGF0ZSAoXCJcIiwgb2Zmc2V0ICsgbiwgXCJcIilcbiAgICAgIGVsc2UgYnJlYWtfbmV3X2xpbmUgc3RhdGUgKFwiXCIsIHRhYiArIG9mZiwgXCJcIikgc3RhdGUucHBfbWFyZ2luXG4gICAgZW5kXG5cbiAgfCBQcF9uZXdsaW5lIC0+XG4gICAgYmVnaW4gbWF0Y2ggU3RhY2sudG9wX29wdCBzdGF0ZS5wcF9mb3JtYXRfc3RhY2sgd2l0aFxuICAgIHwgTm9uZSAtPiBwcF9vdXRwdXRfbmV3bGluZSBzdGF0ZSAoKiBObyBvcGVuIGJveC4gKilcbiAgICB8IFNvbWUgeyB3aWR0aDsgX30gLT4gYnJlYWtfbGluZSBzdGF0ZSB3aWR0aFxuICAgIGVuZFxuXG4gIHwgUHBfaWZfbmV3bGluZSAtPlxuICAgIGlmIHN0YXRlLnBwX2N1cnJlbnRfaW5kZW50ICE9IHN0YXRlLnBwX21hcmdpbiAtIHN0YXRlLnBwX3NwYWNlX2xlZnRcbiAgICB0aGVuIHBwX3NraXBfdG9rZW4gc3RhdGVcblxuICB8IFBwX2JyZWFrIHsgZml0czsgYnJlYWtzIH0gLT5cbiAgICBsZXQgYmVmb3JlLCBvZmYsIF8gPSBicmVha3MgaW5cbiAgICBiZWdpbiBtYXRjaCBTdGFjay50b3Bfb3B0IHN0YXRlLnBwX2Zvcm1hdF9zdGFjayB3aXRoXG4gICAgfCBOb25lIC0+ICgpICgqIE5vIG9wZW4gYm94LiAqKVxuICAgIHwgU29tZSB7IGJveF90eXBlOyB3aWR0aCB9IC0+XG4gICAgICBiZWdpbiBtYXRjaCBib3hfdHlwZSB3aXRoXG4gICAgICB8IFBwX2hvdmJveCAtPlxuICAgICAgICBpZiBzaXplICsgU3RyaW5nLmxlbmd0aCBiZWZvcmUgPiBzdGF0ZS5wcF9zcGFjZV9sZWZ0XG4gICAgICAgIHRoZW4gYnJlYWtfbmV3X2xpbmUgc3RhdGUgYnJlYWtzIHdpZHRoXG4gICAgICAgIGVsc2UgYnJlYWtfc2FtZV9saW5lIHN0YXRlIGZpdHNcbiAgICAgIHwgUHBfYm94IC0+XG4gICAgICAgICgqIEhhdmUgdGhlIGxpbmUganVzdCBiZWVuIGJyb2tlbiBoZXJlID8gKilcbiAgICAgICAgaWYgc3RhdGUucHBfaXNfbmV3X2xpbmUgdGhlbiBicmVha19zYW1lX2xpbmUgc3RhdGUgZml0cyBlbHNlXG4gICAgICAgIGlmIHNpemUgKyBTdHJpbmcubGVuZ3RoIGJlZm9yZSA+IHN0YXRlLnBwX3NwYWNlX2xlZnRcbiAgICAgICAgICB0aGVuIGJyZWFrX25ld19saW5lIHN0YXRlIGJyZWFrcyB3aWR0aCBlbHNlXG4gICAgICAgICgqIGJyZWFrIHRoZSBsaW5lIGhlcmUgbGVhZHMgdG8gbmV3IGluZGVudGF0aW9uID8gKilcbiAgICAgICAgaWYgc3RhdGUucHBfY3VycmVudF9pbmRlbnQgPiBzdGF0ZS5wcF9tYXJnaW4gLSB3aWR0aCArIG9mZlxuICAgICAgICB0aGVuIGJyZWFrX25ld19saW5lIHN0YXRlIGJyZWFrcyB3aWR0aFxuICAgICAgICBlbHNlIGJyZWFrX3NhbWVfbGluZSBzdGF0ZSBmaXRzXG4gICAgICB8IFBwX2h2Ym94IC0+IGJyZWFrX25ld19saW5lIHN0YXRlIGJyZWFrcyB3aWR0aFxuICAgICAgfCBQcF9maXRzIC0+IGJyZWFrX3NhbWVfbGluZSBzdGF0ZSBmaXRzXG4gICAgICB8IFBwX3Zib3ggLT4gYnJlYWtfbmV3X2xpbmUgc3RhdGUgYnJlYWtzIHdpZHRoXG4gICAgICB8IFBwX2hib3ggLT4gYnJlYWtfc2FtZV9saW5lIHN0YXRlIGZpdHNcbiAgICAgIGVuZFxuICAgIGVuZFxuXG4gICB8IFBwX29wZW5fdGFnIHRhZ19uYW1lIC0+XG4gICAgIGxldCBtYXJrZXIgPSBzdGF0ZS5wcF9tYXJrX29wZW5fdGFnIHRhZ19uYW1lIGluXG4gICAgIHBwX291dHB1dF9zdHJpbmcgc3RhdGUgbWFya2VyO1xuICAgICBTdGFjay5wdXNoIHRhZ19uYW1lIHN0YXRlLnBwX21hcmtfc3RhY2tcblxuICAgfCBQcF9jbG9zZV90YWcgLT5cbiAgICAgYmVnaW4gbWF0Y2ggU3RhY2sucG9wX29wdCBzdGF0ZS5wcF9tYXJrX3N0YWNrIHdpdGhcbiAgICAgfCBOb25lIC0+ICgpICgqIE5vIG1vcmUgdGFnIHRvIGNsb3NlLiAqKVxuICAgICB8IFNvbWUgdGFnX25hbWUgLT5cbiAgICAgICBsZXQgbWFya2VyID0gc3RhdGUucHBfbWFya19jbG9zZV90YWcgdGFnX25hbWUgaW5cbiAgICAgICBwcF9vdXRwdXRfc3RyaW5nIHN0YXRlIG1hcmtlclxuICAgICBlbmRcblxuXG4oKiBQcmludCBpZiB0b2tlbiBzaXplIGlzIGtub3duIGVsc2UgcHJpbnRpbmcgaXMgZGVsYXllZC5cbiAgIFByaW50aW5nIGlzIGRlbGF5ZWQgd2hlbiB0aGUgdGV4dCB3YWl0aW5nIGluIHRoZSBxdWV1ZSByZXF1aXJlc1xuICAgbW9yZSByb29tIHRvIGZvcm1hdCB0aGFuIGV4aXN0cyBvbiB0aGUgY3VycmVudCBsaW5lLiAqKVxubGV0IHJlYyBhZHZhbmNlX2xlZnQgc3RhdGUgPVxuICBtYXRjaCBRdWV1ZS5wZWVrX29wdCBzdGF0ZS5wcF9xdWV1ZSB3aXRoXG4gIHwgTm9uZSAtPiAoKSAoKiBObyB0b2tlbnMgdG8gcHJpbnQgKilcbiAgfCBTb21lIHsgc2l6ZTsgdG9rZW47IGxlbmd0aCB9IC0+XG4gICAgbGV0IHBlbmRpbmdfY291bnQgPSBzdGF0ZS5wcF9yaWdodF90b3RhbCAtIHN0YXRlLnBwX2xlZnRfdG90YWwgaW5cbiAgICBpZiBTaXplLmlzX2tub3duIHNpemUgfHwgcGVuZGluZ19jb3VudCA+PSBzdGF0ZS5wcF9zcGFjZV9sZWZ0IHRoZW4gYmVnaW5cbiAgICAgIFF1ZXVlLnRha2Ugc3RhdGUucHBfcXVldWUgfD4gaWdub3JlOyAoKiBOb3QgZW1wdHk6IHdlIHBlZWsgaW50byBpdCAqKVxuICAgICAgbGV0IHNpemUgPSBpZiBTaXplLmlzX2tub3duIHNpemUgdGhlbiBTaXplLnRvX2ludCBzaXplIGVsc2UgcHBfaW5maW5pdHkgaW5cbiAgICAgIGZvcm1hdF9wcF90b2tlbiBzdGF0ZSBzaXplIHRva2VuO1xuICAgICAgc3RhdGUucHBfbGVmdF90b3RhbCA8LSBsZW5ndGggKyBzdGF0ZS5wcF9sZWZ0X3RvdGFsO1xuICAgICAgKGFkdmFuY2VfbGVmdCBbQHRhaWxjYWxsXSkgc3RhdGVcbiAgICBlbmRcblxuXG4oKiBUbyBlbnF1ZXVlIGEgdG9rZW4gOiB0cnkgdG8gYWR2YW5jZS4gKilcbmxldCBlbnF1ZXVlX2FkdmFuY2Ugc3RhdGUgdG9rID0gcHBfZW5xdWV1ZSBzdGF0ZSB0b2s7IGFkdmFuY2VfbGVmdCBzdGF0ZVxuXG5cbigqIFRvIGVucXVldWUgc3RyaW5ncy4gKilcbmxldCBlbnF1ZXVlX3N0cmluZ19hcyBzdGF0ZSBzaXplIHMgPVxuICBlbnF1ZXVlX2FkdmFuY2Ugc3RhdGUgeyBzaXplOyB0b2tlbiA9IFBwX3RleHQgczsgbGVuZ3RoID0gU2l6ZS50b19pbnQgc2l6ZSB9XG5cblxubGV0IGVucXVldWVfc3RyaW5nIHN0YXRlIHMgPVxuICBlbnF1ZXVlX3N0cmluZ19hcyBzdGF0ZSAoU2l6ZS5vZl9pbnQgKFN0cmluZy5sZW5ndGggcykpIHNcblxuXG4oKiBSb3V0aW5lcyBmb3Igc2NhbiBzdGFja1xuICAgZGV0ZXJtaW5lIHNpemUgb2YgYm94ZXMuICopXG5cbigqIFRoZSBzY2FuX3N0YWNrIGlzIG5ldmVyIGVtcHR5LiAqKVxubGV0IGluaXRpYWxpemVfc2Nhbl9zdGFjayBzdGFjayA9XG4gIFN0YWNrLmNsZWFyIHN0YWNrO1xuICBsZXQgcXVldWVfZWxlbSA9IHsgc2l6ZSA9IFNpemUudW5rbm93bjsgdG9rZW4gPSBQcF90ZXh0IFwiXCI7IGxlbmd0aCA9IDAgfSBpblxuICBTdGFjay5wdXNoIHsgbGVmdF90b3RhbCA9IC0xOyBxdWV1ZV9lbGVtIH0gc3RhY2tcblxuKCogU2V0dGluZyB0aGUgc2l6ZSBvZiBib3hlcyBvbiBzY2FuIHN0YWNrOlxuICAgaWYgdHkgPSB0cnVlIHRoZW4gc2l6ZSBvZiBicmVhayBpcyBzZXQgZWxzZSBzaXplIG9mIGJveCBpcyBzZXQ7XG4gICBpbiBlYWNoIGNhc2UgcHBfc2Nhbl9zdGFjayBpcyBwb3BwZWQuXG5cbiAgIE5vdGU6XG4gICBQYXR0ZXJuIG1hdGNoaW5nIG9uIHNjYW4gc3RhY2sgaXMgZXhoYXVzdGl2ZSwgc2luY2Ugc2Nhbl9zdGFjayBpcyBuZXZlclxuICAgZW1wdHkuXG4gICBQYXR0ZXJuIG1hdGNoaW5nIG9uIHRva2VuIGluIHNjYW4gc3RhY2sgaXMgYWxzbyBleGhhdXN0aXZlLFxuICAgc2luY2Ugc2Nhbl9wdXNoIGlzIHVzZWQgb24gYnJlYWtzIGFuZCBvcGVuaW5nIG9mIGJveGVzLiAqKVxubGV0IHNldF9zaXplIHN0YXRlIHR5ID1cbiAgbWF0Y2ggU3RhY2sudG9wX29wdCBzdGF0ZS5wcF9zY2FuX3N0YWNrIHdpdGhcbiAgfCBOb25lIC0+ICgpICgqIHNjYW5fc3RhY2sgaXMgbmV2ZXIgZW1wdHkuICopXG4gIHwgU29tZSB7IGxlZnRfdG90YWw7IHF1ZXVlX2VsZW0gfSAtPlxuICAgIGxldCBzaXplID0gU2l6ZS50b19pbnQgcXVldWVfZWxlbS5zaXplIGluXG4gICAgKCogdGVzdCBpZiBzY2FuIHN0YWNrIGNvbnRhaW5zIGFueSBkYXRhIHRoYXQgaXMgbm90IG9ic29sZXRlLiAqKVxuICAgIGlmIGxlZnRfdG90YWwgPCBzdGF0ZS5wcF9sZWZ0X3RvdGFsIHRoZW5cbiAgICAgIGluaXRpYWxpemVfc2Nhbl9zdGFjayBzdGF0ZS5wcF9zY2FuX3N0YWNrXG4gICAgZWxzZVxuICAgICAgbWF0Y2ggcXVldWVfZWxlbS50b2tlbiB3aXRoXG4gICAgICB8IFBwX2JyZWFrIF8gfCBQcF90YnJlYWsgKF8sIF8pIC0+XG4gICAgICAgIGlmIHR5IHRoZW4gYmVnaW5cbiAgICAgICAgICBxdWV1ZV9lbGVtLnNpemUgPC0gU2l6ZS5vZl9pbnQgKHN0YXRlLnBwX3JpZ2h0X3RvdGFsICsgc2l6ZSk7XG4gICAgICAgICAgU3RhY2sucG9wX29wdCBzdGF0ZS5wcF9zY2FuX3N0YWNrIHw+IGlnbm9yZVxuICAgICAgICBlbmRcbiAgICAgIHwgUHBfYmVnaW4gKF8sIF8pIC0+XG4gICAgICAgIGlmIG5vdCB0eSB0aGVuIGJlZ2luXG4gICAgICAgICAgcXVldWVfZWxlbS5zaXplIDwtIFNpemUub2ZfaW50IChzdGF0ZS5wcF9yaWdodF90b3RhbCArIHNpemUpO1xuICAgICAgICAgIFN0YWNrLnBvcF9vcHQgc3RhdGUucHBfc2Nhbl9zdGFjayB8PiBpZ25vcmVcbiAgICAgICAgZW5kXG4gICAgICB8IFBwX3RleHQgXyB8IFBwX3N0YWIgfCBQcF90YmVnaW4gXyB8IFBwX3RlbmQgfCBQcF9lbmRcbiAgICAgIHwgUHBfbmV3bGluZSB8IFBwX2lmX25ld2xpbmUgfCBQcF9vcGVuX3RhZyBfIHwgUHBfY2xvc2VfdGFnIC0+XG4gICAgICAgICgpICgqIHNjYW5fcHVzaCBpcyBvbmx5IHVzZWQgZm9yIGJyZWFrcyBhbmQgYm94ZXMuICopXG5cblxuKCogUHVzaCBhIHRva2VuIG9uIHByZXR0eS1wcmludGVyIHNjYW5uaW5nIHN0YWNrLlxuICAgSWYgYiBpcyB0cnVlIHNldF9zaXplIGlzIGNhbGxlZC4gKilcbmxldCBzY2FuX3B1c2ggc3RhdGUgYiB0b2tlbiA9XG4gIHBwX2VucXVldWUgc3RhdGUgdG9rZW47XG4gIGlmIGIgdGhlbiBzZXRfc2l6ZSBzdGF0ZSB0cnVlO1xuICBsZXQgZWxlbSA9IHsgbGVmdF90b3RhbCA9IHN0YXRlLnBwX3JpZ2h0X3RvdGFsOyBxdWV1ZV9lbGVtID0gdG9rZW4gfSBpblxuICBTdGFjay5wdXNoIGVsZW0gc3RhdGUucHBfc2Nhbl9zdGFja1xuXG5cbigqIFRvIG9wZW4gYSBuZXcgYm94IDpcbiAgIHRoZSB1c2VyIG1heSBzZXQgdGhlIGRlcHRoIGJvdW5kIHBwX21heF9ib3hlc1xuICAgYW55IHRleHQgbmVzdGVkIGRlZXBlciBpcyBwcmludGVkIGFzIHRoZSBlbGxpcHNpcyBzdHJpbmcuICopXG5sZXQgcHBfb3Blbl9ib3hfZ2VuIHN0YXRlIGluZGVudCBicl90eSA9XG4gIHN0YXRlLnBwX2N1cnJfZGVwdGggPC0gc3RhdGUucHBfY3Vycl9kZXB0aCArIDE7XG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgIGxldCBzaXplID0gU2l6ZS5vZl9pbnQgKC0gc3RhdGUucHBfcmlnaHRfdG90YWwpIGluXG4gICAgbGV0IGVsZW0gPSB7IHNpemU7IHRva2VuID0gUHBfYmVnaW4gKGluZGVudCwgYnJfdHkpOyBsZW5ndGggPSAwIH0gaW5cbiAgICBzY2FuX3B1c2ggc3RhdGUgZmFsc2UgZWxlbSBlbHNlXG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPSBzdGF0ZS5wcF9tYXhfYm94ZXNcbiAgdGhlbiBlbnF1ZXVlX3N0cmluZyBzdGF0ZSBzdGF0ZS5wcF9lbGxpcHNpc1xuXG5cbigqIFRoZSBib3ggd2hpY2ggaXMgYWx3YXlzIG9wZW4uICopXG5sZXQgcHBfb3Blbl9zeXNfYm94IHN0YXRlID0gcHBfb3Blbl9ib3hfZ2VuIHN0YXRlIDAgUHBfaG92Ym94XG5cbigqIENsb3NlIGEgYm94LCBzZXR0aW5nIHNpemVzIG9mIGl0cyBzdWIgYm94ZXMuICopXG5sZXQgcHBfY2xvc2VfYm94IHN0YXRlICgpID1cbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA+IDEgdGhlblxuICBiZWdpblxuICAgIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgIGJlZ2luXG4gICAgICBwcF9lbnF1ZXVlIHN0YXRlIHsgc2l6ZSA9IFNpemUuemVybzsgdG9rZW4gPSBQcF9lbmQ7IGxlbmd0aCA9IDAgfTtcbiAgICAgIHNldF9zaXplIHN0YXRlIHRydWU7IHNldF9zaXplIHN0YXRlIGZhbHNlXG4gICAgZW5kO1xuICAgIHN0YXRlLnBwX2N1cnJfZGVwdGggPC0gc3RhdGUucHBfY3Vycl9kZXB0aCAtIDE7XG4gIGVuZFxuXG5cbigqIE9wZW4gYSB0YWcsIHB1c2hpbmcgaXQgb24gdGhlIHRhZyBzdGFjay4gKilcbmxldCBwcF9vcGVuX3N0YWcgc3RhdGUgdGFnX25hbWUgPVxuICBpZiBzdGF0ZS5wcF9wcmludF90YWdzIHRoZW5cbiAgYmVnaW5cbiAgICBTdGFjay5wdXNoIHRhZ19uYW1lIHN0YXRlLnBwX3RhZ19zdGFjaztcbiAgICBzdGF0ZS5wcF9wcmludF9vcGVuX3RhZyB0YWdfbmFtZVxuICBlbmQ7XG4gIGlmIHN0YXRlLnBwX21hcmtfdGFncyB0aGVuXG4gICAgbGV0IHRva2VuID0gUHBfb3Blbl90YWcgdGFnX25hbWUgaW5cbiAgICBwcF9lbnF1ZXVlIHN0YXRlIHsgc2l6ZSA9IFNpemUuemVybzsgdG9rZW47IGxlbmd0aCA9IDAgfVxuXG5cbigqIENsb3NlIGEgdGFnLCBwb3BwaW5nIGl0IGZyb20gdGhlIHRhZyBzdGFjay4gKilcbmxldCBwcF9jbG9zZV9zdGFnIHN0YXRlICgpID1cbiAgaWYgc3RhdGUucHBfbWFya190YWdzIHRoZW5cbiAgICBwcF9lbnF1ZXVlIHN0YXRlIHsgc2l6ZSA9IFNpemUuemVybzsgdG9rZW4gPSBQcF9jbG9zZV90YWc7IGxlbmd0aCA9IDAgfTtcbiAgaWYgc3RhdGUucHBfcHJpbnRfdGFncyB0aGVuXG4gICAgbWF0Y2ggU3RhY2sucG9wX29wdCBzdGF0ZS5wcF90YWdfc3RhY2sgd2l0aFxuICAgIHwgTm9uZSAtPiAoKSAoKiBObyBtb3JlIHRhZyB0byBjbG9zZS4gKilcbiAgICB8IFNvbWUgdGFnX25hbWUgLT5cbiAgICAgIHN0YXRlLnBwX3ByaW50X2Nsb3NlX3RhZyB0YWdfbmFtZVxuXG5sZXQgcHBfb3Blbl90YWcgc3RhdGUgcyA9IHBwX29wZW5fc3RhZyBzdGF0ZSAoU3RyaW5nX3RhZyBzKVxubGV0IHBwX2Nsb3NlX3RhZyBzdGF0ZSAoKSA9IHBwX2Nsb3NlX3N0YWcgc3RhdGUgKClcblxubGV0IHBwX3NldF9wcmludF90YWdzIHN0YXRlIGIgPSBzdGF0ZS5wcF9wcmludF90YWdzIDwtIGJcbmxldCBwcF9zZXRfbWFya190YWdzIHN0YXRlIGIgPSBzdGF0ZS5wcF9tYXJrX3RhZ3MgPC0gYlxubGV0IHBwX2dldF9wcmludF90YWdzIHN0YXRlICgpID0gc3RhdGUucHBfcHJpbnRfdGFnc1xubGV0IHBwX2dldF9tYXJrX3RhZ3Mgc3RhdGUgKCkgPSBzdGF0ZS5wcF9tYXJrX3RhZ3NcbmxldCBwcF9zZXRfdGFncyBzdGF0ZSBiID1cbiAgcHBfc2V0X3ByaW50X3RhZ3Mgc3RhdGUgYjsgcHBfc2V0X21hcmtfdGFncyBzdGF0ZSBiXG5cblxuKCogSGFuZGxpbmcgdGFnIGhhbmRsaW5nIGZ1bmN0aW9uczogZ2V0L3NldCBmdW5jdGlvbnMuICopXG5sZXQgcHBfZ2V0X2Zvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyBzdGF0ZSAoKSA9IHtcbiAgbWFya19vcGVuX3N0YWcgPSBzdGF0ZS5wcF9tYXJrX29wZW5fdGFnO1xuICBtYXJrX2Nsb3NlX3N0YWcgPSBzdGF0ZS5wcF9tYXJrX2Nsb3NlX3RhZztcbiAgcHJpbnRfb3Blbl9zdGFnID0gc3RhdGUucHBfcHJpbnRfb3Blbl90YWc7XG4gIHByaW50X2Nsb3NlX3N0YWcgPSBzdGF0ZS5wcF9wcmludF9jbG9zZV90YWc7XG59XG5cblxubGV0IHBwX3NldF9mb3JtYXR0ZXJfc3RhZ19mdW5jdGlvbnMgc3RhdGUge1xuICAgICBtYXJrX29wZW5fc3RhZyA9IG1vdDtcbiAgICAgbWFya19jbG9zZV9zdGFnID0gbWN0O1xuICAgICBwcmludF9vcGVuX3N0YWcgPSBwb3Q7XG4gICAgIHByaW50X2Nsb3NlX3N0YWcgPSBwY3Q7XG4gIH0gPVxuICBzdGF0ZS5wcF9tYXJrX29wZW5fdGFnIDwtIG1vdDtcbiAgc3RhdGUucHBfbWFya19jbG9zZV90YWcgPC0gbWN0O1xuICBzdGF0ZS5wcF9wcmludF9vcGVuX3RhZyA8LSBwb3Q7XG4gIHN0YXRlLnBwX3ByaW50X2Nsb3NlX3RhZyA8LSBwY3RcblxuXG4oKiBJbml0aWFsaXplIHByZXR0eS1wcmludGVyLiAqKVxubGV0IHBwX3Jpbml0IHN0YXRlID1cbiAgcHBfY2xlYXJfcXVldWUgc3RhdGU7XG4gIGluaXRpYWxpemVfc2Nhbl9zdGFjayBzdGF0ZS5wcF9zY2FuX3N0YWNrO1xuICBTdGFjay5jbGVhciBzdGF0ZS5wcF9mb3JtYXRfc3RhY2s7XG4gIFN0YWNrLmNsZWFyIHN0YXRlLnBwX3Rib3hfc3RhY2s7XG4gIFN0YWNrLmNsZWFyIHN0YXRlLnBwX3RhZ19zdGFjaztcbiAgU3RhY2suY2xlYXIgc3RhdGUucHBfbWFya19zdGFjaztcbiAgc3RhdGUucHBfY3VycmVudF9pbmRlbnQgPC0gMDtcbiAgc3RhdGUucHBfY3Vycl9kZXB0aCA8LSAwO1xuICBzdGF0ZS5wcF9zcGFjZV9sZWZ0IDwtIHN0YXRlLnBwX21hcmdpbjtcbiAgcHBfb3Blbl9zeXNfYm94IHN0YXRlXG5cbmxldCBjbGVhcl90YWdfc3RhY2sgc3RhdGUgPVxuICBTdGFjay5pdGVyIChmdW4gXyAtPiBwcF9jbG9zZV90YWcgc3RhdGUgKCkpIHN0YXRlLnBwX3RhZ19zdGFja1xuXG5cbigqIEZsdXNoaW5nIHByZXR0eS1wcmludGVyIHF1ZXVlLiAqKVxubGV0IHBwX2ZsdXNoX3F1ZXVlIHN0YXRlIGIgPVxuICBjbGVhcl90YWdfc3RhY2sgc3RhdGU7XG4gIHdoaWxlIHN0YXRlLnBwX2N1cnJfZGVwdGggPiAxIGRvXG4gICAgcHBfY2xvc2VfYm94IHN0YXRlICgpXG4gIGRvbmU7XG4gIHN0YXRlLnBwX3JpZ2h0X3RvdGFsIDwtIHBwX2luZmluaXR5O1xuICBhZHZhbmNlX2xlZnQgc3RhdGU7XG4gIGlmIGIgdGhlbiBwcF9vdXRwdXRfbmV3bGluZSBzdGF0ZTtcbiAgcHBfcmluaXQgc3RhdGVcblxuKCpcblxuICBQcm9jZWR1cmVzIHRvIGZvcm1hdCB2YWx1ZXMgYW5kIHVzZSBib3hlcy5cblxuKilcblxuKCogVG8gZm9ybWF0IGEgc3RyaW5nLiAqKVxubGV0IHBwX3ByaW50X2FzX3NpemUgc3RhdGUgc2l6ZSBzID1cbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA8IHN0YXRlLnBwX21heF9ib3hlc1xuICB0aGVuIGVucXVldWVfc3RyaW5nX2FzIHN0YXRlIHNpemUgc1xuXG5cbmxldCBwcF9wcmludF9hcyBzdGF0ZSBpc2l6ZSBzID1cbiAgcHBfcHJpbnRfYXNfc2l6ZSBzdGF0ZSAoU2l6ZS5vZl9pbnQgaXNpemUpIHNcblxuXG5sZXQgcHBfcHJpbnRfc3RyaW5nIHN0YXRlIHMgPVxuICBwcF9wcmludF9hcyBzdGF0ZSAoU3RyaW5nLmxlbmd0aCBzKSBzXG5cbmxldCBwcF9wcmludF9ieXRlcyBzdGF0ZSBzID1cbiAgcHBfcHJpbnRfYXMgc3RhdGUgKEJ5dGVzLmxlbmd0aCBzKSAoQnl0ZXMudG9fc3RyaW5nIHMpXG5cbigqIFRvIGZvcm1hdCBhbiBpbnRlZ2VyLiAqKVxubGV0IHBwX3ByaW50X2ludCBzdGF0ZSBpID0gcHBfcHJpbnRfc3RyaW5nIHN0YXRlIChJbnQudG9fc3RyaW5nIGkpXG5cbigqIFRvIGZvcm1hdCBhIGZsb2F0LiAqKVxubGV0IHBwX3ByaW50X2Zsb2F0IHN0YXRlIGYgPSBwcF9wcmludF9zdHJpbmcgc3RhdGUgKHN0cmluZ19vZl9mbG9hdCBmKVxuXG4oKiBUbyBmb3JtYXQgYSBib29sZWFuLiAqKVxubGV0IHBwX3ByaW50X2Jvb2wgc3RhdGUgYiA9IHBwX3ByaW50X3N0cmluZyBzdGF0ZSAoc3RyaW5nX29mX2Jvb2wgYilcblxuKCogVG8gZm9ybWF0IGEgY2hhci4gKilcbmxldCBwcF9wcmludF9jaGFyIHN0YXRlIGMgPVxuICBwcF9wcmludF9hcyBzdGF0ZSAxIChTdHJpbmcubWFrZSAxIGMpXG5cblxuKCogT3BlbmluZyBib3hlcy4gKilcbmxldCBwcF9vcGVuX2hib3ggc3RhdGUgKCkgPSBwcF9vcGVuX2JveF9nZW4gc3RhdGUgMCBQcF9oYm94XG5hbmQgcHBfb3Blbl92Ym94IHN0YXRlIGluZGVudCA9IHBwX29wZW5fYm94X2dlbiBzdGF0ZSBpbmRlbnQgUHBfdmJveFxuXG5hbmQgcHBfb3Blbl9odmJveCBzdGF0ZSBpbmRlbnQgPSBwcF9vcGVuX2JveF9nZW4gc3RhdGUgaW5kZW50IFBwX2h2Ym94XG5hbmQgcHBfb3Blbl9ob3Zib3ggc3RhdGUgaW5kZW50ID0gcHBfb3Blbl9ib3hfZ2VuIHN0YXRlIGluZGVudCBQcF9ob3Zib3hcbmFuZCBwcF9vcGVuX2JveCBzdGF0ZSBpbmRlbnQgPSBwcF9vcGVuX2JveF9nZW4gc3RhdGUgaW5kZW50IFBwX2JveFxuXG5cbigqIFByaW50aW5nIHF1ZXVlZCB0ZXh0LlxuXG4gICBbcHBfcHJpbnRfZmx1c2hdIHByaW50cyBhbGwgcGVuZGluZyBpdGVtcyBpbiB0aGUgcHJldHR5LXByaW50ZXIgcXVldWUgYW5kXG4gICB0aGVuIGZsdXNoZXMgdGhlIGxvdyBsZXZlbCBvdXRwdXQgZGV2aWNlIG9mIHRoZSBmb3JtYXR0ZXIgdG8gYWN0dWFsbHlcbiAgIGRpc3BsYXkgcHJpbnRpbmcgbWF0ZXJpYWwuXG5cbiAgIFtwcF9wcmludF9uZXdsaW5lXSBiZWhhdmVzIGFzIFtwcF9wcmludF9mbHVzaF0gYWZ0ZXIgcHJpbnRpbmcgYW4gYWRkaXRpb25hbFxuICAgbmV3IGxpbmUuICopXG5sZXQgcHBfcHJpbnRfbmV3bGluZSBzdGF0ZSAoKSA9XG4gIHBwX2ZsdXNoX3F1ZXVlIHN0YXRlIHRydWU7IHN0YXRlLnBwX291dF9mbHVzaCAoKVxuYW5kIHBwX3ByaW50X2ZsdXNoIHN0YXRlICgpID1cbiAgcHBfZmx1c2hfcXVldWUgc3RhdGUgZmFsc2U7IHN0YXRlLnBwX291dF9mbHVzaCAoKVxuXG5cbigqIFRvIGdldCBhIG5ld2xpbmUgd2hlbiBvbmUgZG9lcyBub3Qgd2FudCB0byBjbG9zZSB0aGUgY3VycmVudCBib3guICopXG5sZXQgcHBfZm9yY2VfbmV3bGluZSBzdGF0ZSAoKSA9XG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgIGVucXVldWVfYWR2YW5jZSBzdGF0ZSB7IHNpemUgPSBTaXplLnplcm87IHRva2VuID0gUHBfbmV3bGluZTsgbGVuZ3RoID0gMCB9XG5cblxuKCogVG8gZm9ybWF0IHNvbWV0aGluZywgb25seSBpbiBjYXNlIHRoZSBsaW5lIGhhcyBqdXN0IGJlZW4gYnJva2VuLiAqKVxubGV0IHBwX3ByaW50X2lmX25ld2xpbmUgc3RhdGUgKCkgPVxuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwgc3RhdGUucHBfbWF4X2JveGVzIHRoZW5cbiAgICBlbnF1ZXVlX2FkdmFuY2Ugc3RhdGVcbiAgICAgIHsgc2l6ZSA9IFNpemUuemVybzsgdG9rZW4gPSBQcF9pZl9uZXdsaW5lOyBsZW5ndGggPSAwIH1cblxuXG4oKiBHZW5lcmFsaXplZCBicmVhayBoaW50IHRoYXQgYWxsb3dzIHByaW50aW5nIHN0cmluZ3MgYmVmb3JlL2FmdGVyXG4gICBzYW1lLWxpbmUgb2Zmc2V0ICh3aWR0aCkgb3IgbmV3LWxpbmUgb2Zmc2V0ICopXG5sZXQgcHBfcHJpbnRfY3VzdG9tX2JyZWFrIHN0YXRlIH5maXRzIH5icmVha3MgPVxuICBsZXQgYmVmb3JlLCB3aWR0aCwgYWZ0ZXIgPSBmaXRzIGluXG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgIGxldCBzaXplID0gU2l6ZS5vZl9pbnQgKC0gc3RhdGUucHBfcmlnaHRfdG90YWwpIGluXG4gICAgbGV0IHRva2VuID0gUHBfYnJlYWsgeyBmaXRzOyBicmVha3MgfSBpblxuICAgIGxldCBsZW5ndGggPSBTdHJpbmcubGVuZ3RoIGJlZm9yZSArIHdpZHRoICsgU3RyaW5nLmxlbmd0aCBhZnRlciBpblxuICAgIGxldCBlbGVtID0geyBzaXplOyB0b2tlbjsgbGVuZ3RoIH0gaW5cbiAgICBzY2FuX3B1c2ggc3RhdGUgdHJ1ZSBlbGVtXG5cbigqIFByaW50aW5nIGJyZWFrIGhpbnRzOlxuICAgQSBicmVhayBoaW50IGluZGljYXRlcyB3aGVyZSBhIGJveCBtYXkgYmUgYnJva2VuLlxuICAgSWYgbGluZSBpcyBicm9rZW4gdGhlbiBvZmZzZXQgaXMgYWRkZWQgdG8gdGhlIGluZGVudGF0aW9uIG9mIHRoZSBjdXJyZW50XG4gICBib3ggZWxzZSAodGhlIHZhbHVlIG9mKSB3aWR0aCBibGFua3MgYXJlIHByaW50ZWQuICopXG5sZXQgcHBfcHJpbnRfYnJlYWsgc3RhdGUgd2lkdGggb2Zmc2V0ID1cbiAgcHBfcHJpbnRfY3VzdG9tX2JyZWFrIHN0YXRlXG4gICAgfmZpdHM6KFwiXCIsIHdpZHRoLCBcIlwiKSB+YnJlYWtzOihcIlwiLCBvZmZzZXQsIFwiXCIpXG5cblxuKCogUHJpbnQgYSBzcGFjZSA6XG4gICBhIHNwYWNlIGlzIGEgYnJlYWsgaGludCB0aGF0IHByaW50cyBhIHNpbmdsZSBzcGFjZSBpZiB0aGUgYnJlYWsgZG9lcyBub3RcbiAgIHNwbGl0IHRoZSBsaW5lO1xuICAgYSBjdXQgaXMgYSBicmVhayBoaW50IHRoYXQgcHJpbnRzIG5vdGhpbmcgaWYgdGhlIGJyZWFrIGRvZXMgbm90IHNwbGl0IHRoZVxuICAgbGluZS4gKilcbmxldCBwcF9wcmludF9zcGFjZSBzdGF0ZSAoKSA9IHBwX3ByaW50X2JyZWFrIHN0YXRlIDEgMFxuYW5kIHBwX3ByaW50X2N1dCBzdGF0ZSAoKSA9IHBwX3ByaW50X2JyZWFrIHN0YXRlIDAgMFxuXG5cbigqIFRhYnVsYXRpb24gYm94ZXMuICopXG5sZXQgcHBfb3Blbl90Ym94IHN0YXRlICgpID1cbiAgc3RhdGUucHBfY3Vycl9kZXB0aCA8LSBzdGF0ZS5wcF9jdXJyX2RlcHRoICsgMTtcbiAgaWYgc3RhdGUucHBfY3Vycl9kZXB0aCA8IHN0YXRlLnBwX21heF9ib3hlcyB0aGVuXG4gICAgbGV0IHNpemUgPSBTaXplLnplcm8gaW5cbiAgICBsZXQgZWxlbSA9IHsgc2l6ZTsgdG9rZW4gPSBQcF90YmVnaW4gKFBwX3Rib3ggKHJlZiBbXSkpOyBsZW5ndGggPSAwIH0gaW5cbiAgICBlbnF1ZXVlX2FkdmFuY2Ugc3RhdGUgZWxlbVxuXG5cbigqIENsb3NlIGEgdGFidWxhdGlvbiBib3guICopXG5sZXQgcHBfY2xvc2VfdGJveCBzdGF0ZSAoKSA9XG4gIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPiAxIHRoZW5cbiAgYmVnaW5cbiAgIGlmIHN0YXRlLnBwX2N1cnJfZGVwdGggPCBzdGF0ZS5wcF9tYXhfYm94ZXMgdGhlblxuICAgICBsZXQgZWxlbSA9IHsgc2l6ZSA9IFNpemUuemVybzsgdG9rZW4gPSBQcF90ZW5kOyBsZW5ndGggPSAwIH0gaW5cbiAgICAgZW5xdWV1ZV9hZHZhbmNlIHN0YXRlIGVsZW07XG4gICAgIHN0YXRlLnBwX2N1cnJfZGVwdGggPC0gc3RhdGUucHBfY3Vycl9kZXB0aCAtIDFcbiAgZW5kXG5cblxuKCogUHJpbnQgYSB0YWJ1bGF0aW9uIGJyZWFrLiAqKVxubGV0IHBwX3ByaW50X3RicmVhayBzdGF0ZSB3aWR0aCBvZmZzZXQgPVxuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwgc3RhdGUucHBfbWF4X2JveGVzIHRoZW5cbiAgICBsZXQgc2l6ZSA9IFNpemUub2ZfaW50ICgtIHN0YXRlLnBwX3JpZ2h0X3RvdGFsKSBpblxuICAgIGxldCBlbGVtID0geyBzaXplOyB0b2tlbiA9IFBwX3RicmVhayAod2lkdGgsIG9mZnNldCk7IGxlbmd0aCA9IHdpZHRoIH0gaW5cbiAgICBzY2FuX3B1c2ggc3RhdGUgdHJ1ZSBlbGVtXG5cblxubGV0IHBwX3ByaW50X3RhYiBzdGF0ZSAoKSA9IHBwX3ByaW50X3RicmVhayBzdGF0ZSAwIDBcblxubGV0IHBwX3NldF90YWIgc3RhdGUgKCkgPVxuICBpZiBzdGF0ZS5wcF9jdXJyX2RlcHRoIDwgc3RhdGUucHBfbWF4X2JveGVzIHRoZW5cbiAgICBsZXQgZWxlbSA9IHsgc2l6ZSA9IFNpemUuemVybzsgdG9rZW4gPSBQcF9zdGFiOyBsZW5ndGggPSAwIH0gaW5cbiAgICBlbnF1ZXVlX2FkdmFuY2Ugc3RhdGUgZWxlbVxuXG5cbigqXG5cbiAgUHJvY2VkdXJlcyB0byBjb250cm9sIHRoZSBwcmV0dHktcHJpbnRlcnNcblxuKilcblxuKCogU2V0X21heF9ib3hlcy4gKilcbmxldCBwcF9zZXRfbWF4X2JveGVzIHN0YXRlIG4gPSBpZiBuID4gMSB0aGVuIHN0YXRlLnBwX21heF9ib3hlcyA8LSBuXG5cbigqIFRvIGtub3cgdGhlIGN1cnJlbnQgbWF4aW11bSBudW1iZXIgb2YgYm94ZXMgYWxsb3dlZC4gKilcbmxldCBwcF9nZXRfbWF4X2JveGVzIHN0YXRlICgpID0gc3RhdGUucHBfbWF4X2JveGVzXG5cbmxldCBwcF9vdmVyX21heF9ib3hlcyBzdGF0ZSAoKSA9IHN0YXRlLnBwX2N1cnJfZGVwdGggPSBzdGF0ZS5wcF9tYXhfYm94ZXNcblxuKCogRWxsaXBzaXMuICopXG5sZXQgcHBfc2V0X2VsbGlwc2lzX3RleHQgc3RhdGUgcyA9IHN0YXRlLnBwX2VsbGlwc2lzIDwtIHNcbmFuZCBwcF9nZXRfZWxsaXBzaXNfdGV4dCBzdGF0ZSAoKSA9IHN0YXRlLnBwX2VsbGlwc2lzXG5cblxuKCogVG8gc2V0IHRoZSBtYXJnaW4gb2YgcHJldHR5LXByaW50ZXIuICopXG5sZXQgcHBfbGltaXQgbiA9XG4gIGlmIG4gPCBwcF9pbmZpbml0eSB0aGVuIG4gZWxzZSBwcmVkIHBwX2luZmluaXR5XG5cblxuKCogSW50ZXJuYWwgcHJldHR5LXByaW50ZXIgZnVuY3Rpb25zLiAqKVxubGV0IHBwX3NldF9taW5fc3BhY2VfbGVmdCBzdGF0ZSBuID1cbiAgaWYgbiA+PSAxIHRoZW5cbiAgICBsZXQgbiA9IHBwX2xpbWl0IG4gaW5cbiAgICBzdGF0ZS5wcF9taW5fc3BhY2VfbGVmdCA8LSBuO1xuICAgIHN0YXRlLnBwX21heF9pbmRlbnQgPC0gc3RhdGUucHBfbWFyZ2luIC0gc3RhdGUucHBfbWluX3NwYWNlX2xlZnQ7XG4gICAgcHBfcmluaXQgc3RhdGVcblxuXG4oKiBJbml0aWFsbHksIHdlIGhhdmUgOlxuICAgcHBfbWF4X2luZGVudCA9IHBwX21hcmdpbiAtIHBwX21pbl9zcGFjZV9sZWZ0LCBhbmRcbiAgIHBwX3NwYWNlX2xlZnQgPSBwcF9tYXJnaW4uICopXG5sZXQgcHBfc2V0X21heF9pbmRlbnQgc3RhdGUgbiA9XG4gIGlmIG4gPiAxIHRoZW5cbiAgICBwcF9zZXRfbWluX3NwYWNlX2xlZnQgc3RhdGUgKHN0YXRlLnBwX21hcmdpbiAtIG4pXG5cblxubGV0IHBwX2dldF9tYXhfaW5kZW50IHN0YXRlICgpID0gc3RhdGUucHBfbWF4X2luZGVudFxuXG5sZXQgcHBfc2V0X21hcmdpbiBzdGF0ZSBuID1cbiAgaWYgbiA+PSAxIHRoZW5cbiAgICBsZXQgbiA9IHBwX2xpbWl0IG4gaW5cbiAgICBzdGF0ZS5wcF9tYXJnaW4gPC0gbjtcbiAgICBsZXQgbmV3X21heF9pbmRlbnQgPVxuICAgICAgKCogVHJ5IHRvIG1haW50YWluIG1heF9pbmRlbnQgdG8gaXRzIGFjdHVhbCB2YWx1ZS4gKilcbiAgICAgIGlmIHN0YXRlLnBwX21heF9pbmRlbnQgPD0gc3RhdGUucHBfbWFyZ2luXG4gICAgICB0aGVuIHN0YXRlLnBwX21heF9pbmRlbnQgZWxzZVxuICAgICAgKCogSWYgcG9zc2libGUgbWFpbnRhaW4gcHBfbWluX3NwYWNlX2xlZnQgdG8gaXRzIGFjdHVhbCB2YWx1ZSxcbiAgICAgICAgIGlmIHRoaXMgbGVhZHMgdG8gYSB0b28gc21hbGwgbWF4X2luZGVudCwgdGFrZSBoYWxmIG9mIHRoZVxuICAgICAgICAgbmV3IG1hcmdpbiwgaWYgaXQgaXMgZ3JlYXRlciB0aGFuIDEuICopXG4gICAgICAgSW50Lm1heCAoSW50Lm1heCAoc3RhdGUucHBfbWFyZ2luIC0gc3RhdGUucHBfbWluX3NwYWNlX2xlZnQpXG4gICAgICAgICAgICAgICAgKHN0YXRlLnBwX21hcmdpbiAvIDIpKSAxIGluXG4gICAgKCogUmVidWlsZCBpbnZhcmlhbnRzLiAqKVxuICAgIHBwX3NldF9tYXhfaW5kZW50IHN0YXRlIG5ld19tYXhfaW5kZW50XG5cblxuKCoqIEdlb21ldHJ5IGZ1bmN0aW9ucyBhbmQgdHlwZXMgKilcbnR5cGUgZ2VvbWV0cnkgPSB7IG1heF9pbmRlbnQ6aW50OyBtYXJnaW46IGludH1cblxubGV0IHZhbGlkYXRlX2dlb21ldHJ5IHttYXJnaW47IG1heF9pbmRlbnR9ID1cbiAgaWYgbWF4X2luZGVudCA8IDIgdGhlblxuICAgIEVycm9yIFwibWF4X2luZGVudCA8IDJcIlxuICBlbHNlIGlmIG1hcmdpbiA8PSBtYXhfaW5kZW50IHRoZW5cbiAgICBFcnJvciBcIm1hcmdpbiA8PSBtYXhfaW5kZW50XCJcbiAgZWxzZSBPayAoKVxuXG5sZXQgY2hlY2tfZ2VvbWV0cnkgZ2VvbWV0cnkgPVxuICBtYXRjaCB2YWxpZGF0ZV9nZW9tZXRyeSBnZW9tZXRyeSB3aXRoXG4gIHwgT2sgKCkgLT4gdHJ1ZVxuICB8IEVycm9yIF8gLT4gZmFsc2VcblxubGV0IHBwX2dldF9tYXJnaW4gc3RhdGUgKCkgPSBzdGF0ZS5wcF9tYXJnaW5cblxubGV0IHBwX3NldF9mdWxsX2dlb21ldHJ5IHN0YXRlIHttYXJnaW47IG1heF9pbmRlbnR9ID1cbiAgcHBfc2V0X21hcmdpbiBzdGF0ZSBtYXJnaW47XG4gIHBwX3NldF9tYXhfaW5kZW50IHN0YXRlIG1heF9pbmRlbnQ7XG4gICgpXG5cbmxldCBwcF9zZXRfZ2VvbWV0cnkgc3RhdGUgfm1heF9pbmRlbnQgfm1hcmdpbiA9XG4gIGxldCBnZW9tZXRyeSA9IHsgbWF4X2luZGVudDsgbWFyZ2luIH0gaW5cbiAgbWF0Y2ggdmFsaWRhdGVfZ2VvbWV0cnkgZ2VvbWV0cnkgd2l0aFxuICB8IEVycm9yIG1zZyAtPlxuICAgIHJhaXNlIChJbnZhbGlkX2FyZ3VtZW50IChcIkZvcm1hdC5wcF9zZXRfZ2VvbWV0cnk6IFwiIF4gbXNnKSlcbiAgfCBPayAoKSAtPlxuICAgIHBwX3NldF9mdWxsX2dlb21ldHJ5IHN0YXRlIGdlb21ldHJ5XG5cbmxldCBwcF9zYWZlX3NldF9nZW9tZXRyeSBzdGF0ZSB+bWF4X2luZGVudCB+bWFyZ2luID1cbiAgbGV0IGdlb21ldHJ5ID0geyBtYXhfaW5kZW50OyBtYXJnaW4gfSBpblxuICBtYXRjaCB2YWxpZGF0ZV9nZW9tZXRyeSBnZW9tZXRyeSB3aXRoXG4gIHwgRXJyb3IgX21zZyAtPlxuICAgICAoKVxuICB8IE9rICgpIC0+XG4gICAgcHBfc2V0X2Z1bGxfZ2VvbWV0cnkgc3RhdGUgZ2VvbWV0cnlcblxubGV0IHBwX2dldF9nZW9tZXRyeSBzdGF0ZSAoKSA9XG4gIHsgbWFyZ2luID0gcHBfZ2V0X21hcmdpbiBzdGF0ZSAoKTsgbWF4X2luZGVudCA9IHBwX2dldF9tYXhfaW5kZW50IHN0YXRlICgpIH1cblxubGV0IHBwX3VwZGF0ZV9nZW9tZXRyeSBzdGF0ZSB1cGRhdGUgPVxuICBsZXQgZ2VvbWV0cnkgPSBwcF9nZXRfZ2VvbWV0cnkgc3RhdGUgKCkgaW5cbiAgcHBfc2V0X2Z1bGxfZ2VvbWV0cnkgc3RhdGUgKHVwZGF0ZSBnZW9tZXRyeSlcblxuKCogU2V0dGluZyBhIGZvcm1hdHRlciBiYXNpYyBvdXRwdXQgZnVuY3Rpb25zLiAqKVxubGV0IHBwX3NldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyBzdGF0ZSB7XG4gICAgICBvdXRfc3RyaW5nID0gZjtcbiAgICAgIG91dF9mbHVzaCA9IGc7XG4gICAgICBvdXRfbmV3bGluZSA9IGg7XG4gICAgICBvdXRfc3BhY2VzID0gaTtcbiAgICAgIG91dF9pbmRlbnQgPSBqO1xuICAgIH0gPVxuICBzdGF0ZS5wcF9vdXRfc3RyaW5nIDwtIGY7XG4gIHN0YXRlLnBwX291dF9mbHVzaCA8LSBnO1xuICBzdGF0ZS5wcF9vdXRfbmV3bGluZSA8LSBoO1xuICBzdGF0ZS5wcF9vdXRfc3BhY2VzIDwtIGk7XG4gIHN0YXRlLnBwX291dF9pbmRlbnQgPC0galxuXG5sZXQgcHBfZ2V0X2Zvcm1hdHRlcl9vdXRfZnVuY3Rpb25zIHN0YXRlICgpID0ge1xuICBvdXRfc3RyaW5nID0gc3RhdGUucHBfb3V0X3N0cmluZztcbiAgb3V0X2ZsdXNoID0gc3RhdGUucHBfb3V0X2ZsdXNoO1xuICBvdXRfbmV3bGluZSA9IHN0YXRlLnBwX291dF9uZXdsaW5lO1xuICBvdXRfc3BhY2VzID0gc3RhdGUucHBfb3V0X3NwYWNlcztcbiAgb3V0X2luZGVudCA9IHN0YXRlLnBwX291dF9pbmRlbnQ7XG59XG5cblxuKCogU2V0dGluZyBhIGZvcm1hdHRlciBiYXNpYyBzdHJpbmcgb3V0cHV0IGFuZCBmbHVzaCBmdW5jdGlvbnMuICopXG5sZXQgcHBfc2V0X2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIHN0YXRlIGYgZyA9XG4gIHN0YXRlLnBwX291dF9zdHJpbmcgPC0gZjsgc3RhdGUucHBfb3V0X2ZsdXNoIDwtIGdcblxubGV0IHBwX2dldF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyBzdGF0ZSAoKSA9XG4gIChzdGF0ZS5wcF9vdXRfc3RyaW5nLCBzdGF0ZS5wcF9vdXRfZmx1c2gpXG5cblxuKCogVGhlIGRlZmF1bHQgZnVuY3Rpb24gdG8gb3V0cHV0IG5ldyBsaW5lcy4gKilcbmxldCBkaXNwbGF5X25ld2xpbmUgc3RhdGUgKCkgPSBzdGF0ZS5wcF9vdXRfc3RyaW5nIFwiXFxuXCIgMCAgMVxuXG4oKiBUaGUgZGVmYXVsdCBmdW5jdGlvbiB0byBvdXRwdXQgc3BhY2VzLiAqKVxubGV0IGJsYW5rX2xpbmUgPSBTdHJpbmcubWFrZSA4MCAnICdcbmxldCByZWMgZGlzcGxheV9ibGFua3Mgc3RhdGUgbiA9XG4gIGlmIG4gPiAwIHRoZW5cbiAgaWYgbiA8PSA4MCB0aGVuIHN0YXRlLnBwX291dF9zdHJpbmcgYmxhbmtfbGluZSAwIG4gZWxzZVxuICBiZWdpblxuICAgIHN0YXRlLnBwX291dF9zdHJpbmcgYmxhbmtfbGluZSAwIDgwO1xuICAgIGRpc3BsYXlfYmxhbmtzIHN0YXRlIChuIC0gODApXG4gIGVuZFxuXG5cbigqIFRoZSBkZWZhdWx0IGZ1bmN0aW9uIHRvIG91dHB1dCBpbmRlbnRhdGlvbiBvZiBuZXcgbGluZXMuICopXG5sZXQgZGlzcGxheV9pbmRlbnQgPSBkaXNwbGF5X2JsYW5rc1xuXG4oKiBTZXR0aW5nIGEgZm9ybWF0dGVyIGJhc2ljIG91dHB1dCBmdW5jdGlvbnMgYXMgcHJpbnRpbmcgdG8gYSBnaXZlblxuICAgW1BlcnZhc2l2ZS5vdXRfY2hhbm5lbF0gdmFsdWUuICopXG5sZXQgcHBfc2V0X2Zvcm1hdHRlcl9vdXRfY2hhbm5lbCBzdGF0ZSBvYyA9XG4gIHN0YXRlLnBwX291dF9zdHJpbmcgPC0gb3V0cHV0X3N1YnN0cmluZyBvYztcbiAgc3RhdGUucHBfb3V0X2ZsdXNoIDwtIChmdW4gKCkgLT4gZmx1c2ggb2MpO1xuICBzdGF0ZS5wcF9vdXRfbmV3bGluZSA8LSBkaXNwbGF5X25ld2xpbmUgc3RhdGU7XG4gIHN0YXRlLnBwX291dF9zcGFjZXMgPC0gZGlzcGxheV9ibGFua3Mgc3RhdGU7XG4gIHN0YXRlLnBwX291dF9pbmRlbnQgPC0gZGlzcGxheV9pbmRlbnQgc3RhdGVcblxuKCpcblxuICBEZWZpbmluZyBzcGVjaWZpYyBmb3JtYXR0ZXJzXG5cbiopXG5cbmxldCBkZWZhdWx0X3BwX21hcmtfb3Blbl90YWcgPSBmdW5jdGlvblxuICB8IFN0cmluZ190YWcgcyAtPiBcIjxcIiBeIHMgXiBcIj5cIlxuICB8IF8gLT4gXCJcIlxubGV0IGRlZmF1bHRfcHBfbWFya19jbG9zZV90YWcgPSBmdW5jdGlvblxuICB8IFN0cmluZ190YWcgcyAtPiBcIjwvXCIgXiBzIF4gXCI+XCJcbiAgfCBfIC0+IFwiXCJcblxubGV0IGRlZmF1bHRfcHBfcHJpbnRfb3Blbl90YWcgPSBpZ25vcmVcbmxldCBkZWZhdWx0X3BwX3ByaW50X2Nsb3NlX3RhZyA9IGlnbm9yZVxuXG4oKiBCdWlsZGluZyBhIGZvcm1hdHRlciBnaXZlbiBpdHMgYmFzaWMgb3V0cHV0IGZ1bmN0aW9ucy5cbiAgIE90aGVyIGZpZWxkcyBnZXQgcmVhc29uYWJsZSBkZWZhdWx0IHZhbHVlcy4gKilcbmxldCBwcF9tYWtlX2Zvcm1hdHRlciBmIGcgaCBpIGogPVxuICAoKiBUaGUgaW5pdGlhbCBzdGF0ZSBvZiB0aGUgZm9ybWF0dGVyIGNvbnRhaW5zIGEgZHVtbXkgYm94LiAqKVxuICBsZXQgcHBfcXVldWUgPSBRdWV1ZS5jcmVhdGUgKCkgaW5cbiAgbGV0IHN5c190b2sgPVxuICAgIHsgc2l6ZSA9IFNpemUudW5rbm93bjsgdG9rZW4gPSBQcF9iZWdpbiAoMCwgUHBfaG92Ym94KTsgbGVuZ3RoID0gMCB9IGluXG4gIFF1ZXVlLmFkZCBzeXNfdG9rIHBwX3F1ZXVlO1xuICBsZXQgc2Nhbl9zdGFjayA9IFN0YWNrLmNyZWF0ZSAoKSBpblxuICBpbml0aWFsaXplX3NjYW5fc3RhY2sgc2Nhbl9zdGFjaztcbiAgU3RhY2sucHVzaCB7IGxlZnRfdG90YWwgPSAxOyBxdWV1ZV9lbGVtID0gc3lzX3RvayB9IHNjYW5fc3RhY2s7XG4gIGxldCBwcF9tYXJnaW4gPSA3OFxuICBhbmQgcHBfbWluX3NwYWNlX2xlZnQgPSAxMCBpblxuICB7XG4gICAgcHBfc2Nhbl9zdGFjayA9IHNjYW5fc3RhY2s7XG4gICAgcHBfZm9ybWF0X3N0YWNrID0gU3RhY2suY3JlYXRlICgpO1xuICAgIHBwX3Rib3hfc3RhY2sgPSBTdGFjay5jcmVhdGUgKCk7XG4gICAgcHBfdGFnX3N0YWNrID0gU3RhY2suY3JlYXRlICgpO1xuICAgIHBwX21hcmtfc3RhY2sgPSBTdGFjay5jcmVhdGUgKCk7XG4gICAgcHBfbWFyZ2luID0gcHBfbWFyZ2luO1xuICAgIHBwX21pbl9zcGFjZV9sZWZ0ID0gcHBfbWluX3NwYWNlX2xlZnQ7XG4gICAgcHBfbWF4X2luZGVudCA9IHBwX21hcmdpbiAtIHBwX21pbl9zcGFjZV9sZWZ0O1xuICAgIHBwX3NwYWNlX2xlZnQgPSBwcF9tYXJnaW47XG4gICAgcHBfY3VycmVudF9pbmRlbnQgPSAwO1xuICAgIHBwX2lzX25ld19saW5lID0gdHJ1ZTtcbiAgICBwcF9sZWZ0X3RvdGFsID0gMTtcbiAgICBwcF9yaWdodF90b3RhbCA9IDE7XG4gICAgcHBfY3Vycl9kZXB0aCA9IDE7XG4gICAgcHBfbWF4X2JveGVzID0gbWF4X2ludDtcbiAgICBwcF9lbGxpcHNpcyA9IFwiLlwiO1xuICAgIHBwX291dF9zdHJpbmcgPSBmO1xuICAgIHBwX291dF9mbHVzaCA9IGc7XG4gICAgcHBfb3V0X25ld2xpbmUgPSBoO1xuICAgIHBwX291dF9zcGFjZXMgPSBpO1xuICAgIHBwX291dF9pbmRlbnQgPSBqO1xuICAgIHBwX3ByaW50X3RhZ3MgPSBmYWxzZTtcbiAgICBwcF9tYXJrX3RhZ3MgPSBmYWxzZTtcbiAgICBwcF9tYXJrX29wZW5fdGFnID0gZGVmYXVsdF9wcF9tYXJrX29wZW5fdGFnO1xuICAgIHBwX21hcmtfY2xvc2VfdGFnID0gZGVmYXVsdF9wcF9tYXJrX2Nsb3NlX3RhZztcbiAgICBwcF9wcmludF9vcGVuX3RhZyA9IGRlZmF1bHRfcHBfcHJpbnRfb3Blbl90YWc7XG4gICAgcHBfcHJpbnRfY2xvc2VfdGFnID0gZGVmYXVsdF9wcF9wcmludF9jbG9zZV90YWc7XG4gICAgcHBfcXVldWUgPSBwcF9xdWV1ZTtcbiAgfVxuXG5cbigqIEJ1aWxkIGEgZm9ybWF0dGVyIG91dCBvZiBpdHMgb3V0IGZ1bmN0aW9ucy4gKilcbmxldCBmb3JtYXR0ZXJfb2Zfb3V0X2Z1bmN0aW9ucyBvdXRfZnVucyA9XG4gIHBwX21ha2VfZm9ybWF0dGVyXG4gICAgb3V0X2Z1bnMub3V0X3N0cmluZ1xuICAgIG91dF9mdW5zLm91dF9mbHVzaFxuICAgIG91dF9mdW5zLm91dF9uZXdsaW5lXG4gICAgb3V0X2Z1bnMub3V0X3NwYWNlc1xuICAgIG91dF9mdW5zLm91dF9pbmRlbnRcblxuXG4oKiBNYWtlIGEgZm9ybWF0dGVyIHdpdGggZGVmYXVsdCBmdW5jdGlvbnMgdG8gb3V0cHV0IHNwYWNlcyxcbiAgaW5kZW50YXRpb24sIGFuZCBuZXcgbGluZXMuICopXG5sZXQgbWFrZV9mb3JtYXR0ZXIgb3V0cHV0IGZsdXNoID1cbiAgbGV0IHBwZiA9IHBwX21ha2VfZm9ybWF0dGVyIG91dHB1dCBmbHVzaCBpZ25vcmUgaWdub3JlIGlnbm9yZSBpblxuICBwcGYucHBfb3V0X25ld2xpbmUgPC0gZGlzcGxheV9uZXdsaW5lIHBwZjtcbiAgcHBmLnBwX291dF9zcGFjZXMgPC0gZGlzcGxheV9ibGFua3MgcHBmO1xuICBwcGYucHBfb3V0X2luZGVudCA8LSBkaXNwbGF5X2luZGVudCBwcGY7XG4gIHBwZlxuXG5cbigqIE1ha2UgYSBmb3JtYXR0ZXIgd3JpdGluZyB0byBhIGdpdmVuIFtQZXJ2YXNpdmUub3V0X2NoYW5uZWxdIHZhbHVlLiAqKVxubGV0IGZvcm1hdHRlcl9vZl9vdXRfY2hhbm5lbCBvYyA9XG4gIG1ha2VfZm9ybWF0dGVyIChvdXRwdXRfc3Vic3RyaW5nIG9jKSAoZnVuICgpIC0+IGZsdXNoIG9jKVxuXG5cbigqIE1ha2UgYSBmb3JtYXR0ZXIgd3JpdGluZyB0byBhIGdpdmVuIFtCdWZmZXIudF0gdmFsdWUuICopXG5sZXQgZm9ybWF0dGVyX29mX2J1ZmZlciBiID1cbiAgbWFrZV9mb3JtYXR0ZXIgKEJ1ZmZlci5hZGRfc3Vic3RyaW5nIGIpIGlnbm9yZVxuXG5cbigqIEFsbG9jYXRpbmcgYnVmZmVyIGZvciBwcmV0dHktcHJpbnRpbmcgcHVycG9zZXMuXG4gICBEZWZhdWx0IGJ1ZmZlciBzaXplIGlzIHBwX2J1ZmZlcl9zaXplIG9yIDUxMi5cbiopXG5sZXQgcHBfYnVmZmVyX3NpemUgPSA1MTJcbmxldCBwcF9tYWtlX2J1ZmZlciAoKSA9IEJ1ZmZlci5jcmVhdGUgcHBfYnVmZmVyX3NpemVcblxuKCogVGhlIHN0YW5kYXJkIChzaGFyZWQpIGJ1ZmZlci4gKilcbmxldCBzdGRidWYgPSBwcF9tYWtlX2J1ZmZlciAoKVxuXG4oKiBQcmVkZWZpbmVkIGZvcm1hdHRlcnMgc3RhbmRhcmQgZm9ybWF0dGVyIHRvIHByaW50XG4gICB0byBbU3RkbGliLnN0ZG91dF0sIFtTdGRsaWIuc3RkZXJyXSwgYW5kIHshc3RkYnVmfS4gKilcbmxldCBzdGRfZm9ybWF0dGVyID0gZm9ybWF0dGVyX29mX291dF9jaGFubmVsIFN0ZGxpYi5zdGRvdXRcbmFuZCBlcnJfZm9ybWF0dGVyID0gZm9ybWF0dGVyX29mX291dF9jaGFubmVsIFN0ZGxpYi5zdGRlcnJcbmFuZCBzdHJfZm9ybWF0dGVyID0gZm9ybWF0dGVyX29mX2J1ZmZlciBzdGRidWZcblxuXG4oKiBbZmx1c2hfYnVmZmVyX2Zvcm1hdHRlciBidWYgcHBmXSBmbHVzaGVzIGZvcm1hdHRlciBbcHBmXSxcbiAgIHRoZW4gcmV0dXJucyB0aGUgY29udGVudHMgb2YgYnVmZmVyIFtidWZdIHRoYXQgaXMgcmVzZXQuXG4gICBGb3JtYXR0ZXIgW3BwZl0gaXMgc3VwcG9zZWQgdG8gcHJpbnQgdG8gYnVmZmVyIFtidWZdLCBvdGhlcndpc2UgdGhpc1xuICAgZnVuY3Rpb24gaXMgbm90IHJlYWxseSB1c2VmdWwuICopXG5sZXQgZmx1c2hfYnVmZmVyX2Zvcm1hdHRlciBidWYgcHBmID1cbiAgcHBfZmx1c2hfcXVldWUgcHBmIGZhbHNlO1xuICBsZXQgcyA9IEJ1ZmZlci5jb250ZW50cyBidWYgaW5cbiAgQnVmZmVyLnJlc2V0IGJ1ZjtcbiAgc1xuXG5cbigqIEZsdXNoIFtzdHJfZm9ybWF0dGVyXSBhbmQgZ2V0IHRoZSBjb250ZW50cyBvZiBbc3RkYnVmXS4gKilcbmxldCBmbHVzaF9zdHJfZm9ybWF0dGVyICgpID0gZmx1c2hfYnVmZmVyX2Zvcm1hdHRlciBzdGRidWYgc3RyX2Zvcm1hdHRlclxuXG4oKlxuICBTeW1ib2xpYyBwcmV0dHktcHJpbnRpbmdcbiopXG5cbigqXG4gIFN5bWJvbGljIHByZXR0eS1wcmludGluZyBpcyBwcmV0dHktcHJpbnRpbmcgd2l0aCBubyBsb3cgbGV2ZWwgb3V0cHV0LlxuXG4gIFdoZW4gdXNpbmcgYSBzeW1ib2xpYyBmb3JtYXR0ZXIsIGFsbCByZWd1bGFyIHByZXR0eS1wcmludGluZyBhY3Rpdml0aWVzXG4gIG9jY3VyIGJ1dCBvdXRwdXQgbWF0ZXJpYWwgaXMgc3ltYm9saWMgYW5kIHN0b3JlZCBpbiBhIGJ1ZmZlciBvZiBvdXRwdXRcbiAgaXRlbXMuIEF0IHRoZSBlbmQgb2YgcHJldHR5LXByaW50aW5nLCBmbHVzaGluZyB0aGUgb3V0cHV0IGJ1ZmZlciBhbGxvd3NcbiAgcG9zdC1wcm9jZXNzaW5nIG9mIHN5bWJvbGljIG91dHB1dCBiZWZvcmUgbG93IGxldmVsIG91dHB1dCBvcGVyYXRpb25zLlxuKilcblxudHlwZSBzeW1ib2xpY19vdXRwdXRfaXRlbSA9XG4gIHwgT3V0cHV0X2ZsdXNoXG4gIHwgT3V0cHV0X25ld2xpbmVcbiAgfCBPdXRwdXRfc3RyaW5nIG9mIHN0cmluZ1xuICB8IE91dHB1dF9zcGFjZXMgb2YgaW50XG4gIHwgT3V0cHV0X2luZGVudCBvZiBpbnRcblxudHlwZSBzeW1ib2xpY19vdXRwdXRfYnVmZmVyID0ge1xuICBtdXRhYmxlIHN5bWJvbGljX291dHB1dF9jb250ZW50cyA6IHN5bWJvbGljX291dHB1dF9pdGVtIGxpc3Q7XG59XG5cbmxldCBtYWtlX3N5bWJvbGljX291dHB1dF9idWZmZXIgKCkgPVxuICB7IHN5bWJvbGljX291dHB1dF9jb250ZW50cyA9IFtdIH1cblxubGV0IGNsZWFyX3N5bWJvbGljX291dHB1dF9idWZmZXIgc29iID1cbiAgc29iLnN5bWJvbGljX291dHB1dF9jb250ZW50cyA8LSBbXVxuXG5sZXQgZ2V0X3N5bWJvbGljX291dHB1dF9idWZmZXIgc29iID1cbiAgTGlzdC5yZXYgc29iLnN5bWJvbGljX291dHB1dF9jb250ZW50c1xuXG5sZXQgZmx1c2hfc3ltYm9saWNfb3V0cHV0X2J1ZmZlciBzb2IgPVxuICBsZXQgaXRlbXMgPSBnZXRfc3ltYm9saWNfb3V0cHV0X2J1ZmZlciBzb2IgaW5cbiAgY2xlYXJfc3ltYm9saWNfb3V0cHV0X2J1ZmZlciBzb2I7XG4gIGl0ZW1zXG5cbmxldCBhZGRfc3ltYm9saWNfb3V0cHV0X2l0ZW0gc29iIGl0ZW0gPVxuICBzb2Iuc3ltYm9saWNfb3V0cHV0X2NvbnRlbnRzIDwtIGl0ZW0gOjogc29iLnN5bWJvbGljX291dHB1dF9jb250ZW50c1xuXG5sZXQgZm9ybWF0dGVyX29mX3N5bWJvbGljX291dHB1dF9idWZmZXIgc29iID1cbiAgbGV0IHN5bWJvbGljX2ZsdXNoIHNvYiAoKSA9XG4gICAgYWRkX3N5bWJvbGljX291dHB1dF9pdGVtIHNvYiBPdXRwdXRfZmx1c2hcbiAgYW5kIHN5bWJvbGljX25ld2xpbmUgc29iICgpID1cbiAgICBhZGRfc3ltYm9saWNfb3V0cHV0X2l0ZW0gc29iIE91dHB1dF9uZXdsaW5lXG4gIGFuZCBzeW1ib2xpY19zdHJpbmcgc29iIHMgaSBuID1cbiAgICBhZGRfc3ltYm9saWNfb3V0cHV0X2l0ZW0gc29iIChPdXRwdXRfc3RyaW5nIChTdHJpbmcuc3ViIHMgaSBuKSlcbiAgYW5kIHN5bWJvbGljX3NwYWNlcyBzb2IgbiA9XG4gICAgYWRkX3N5bWJvbGljX291dHB1dF9pdGVtIHNvYiAoT3V0cHV0X3NwYWNlcyBuKVxuICBhbmQgc3ltYm9saWNfaW5kZW50IHNvYiBuID1cbiAgICBhZGRfc3ltYm9saWNfb3V0cHV0X2l0ZW0gc29iIChPdXRwdXRfaW5kZW50IG4pIGluXG5cbiAgbGV0IGYgPSBzeW1ib2xpY19zdHJpbmcgc29iXG4gIGFuZCBnID0gc3ltYm9saWNfZmx1c2ggc29iXG4gIGFuZCBoID0gc3ltYm9saWNfbmV3bGluZSBzb2JcbiAgYW5kIGkgPSBzeW1ib2xpY19zcGFjZXMgc29iXG4gIGFuZCBqID0gc3ltYm9saWNfaW5kZW50IHNvYiBpblxuICBwcF9tYWtlX2Zvcm1hdHRlciBmIGcgaCBpIGpcblxuKCpcblxuICBCYXNpYyBmdW5jdGlvbnMgb24gdGhlICdzdGFuZGFyZCcgZm9ybWF0dGVyXG4gICh0aGUgZm9ybWF0dGVyIHRoYXQgcHJpbnRzIHRvIFtTdGRsaWIuc3Rkb3V0XSkuXG5cbiopXG5cbmxldCBvcGVuX2hib3ggPSBwcF9vcGVuX2hib3ggc3RkX2Zvcm1hdHRlclxuYW5kIG9wZW5fdmJveCA9IHBwX29wZW5fdmJveCBzdGRfZm9ybWF0dGVyXG5hbmQgb3Blbl9odmJveCA9IHBwX29wZW5faHZib3ggc3RkX2Zvcm1hdHRlclxuYW5kIG9wZW5faG92Ym94ID0gcHBfb3Blbl9ob3Zib3ggc3RkX2Zvcm1hdHRlclxuYW5kIG9wZW5fYm94ID0gcHBfb3Blbl9ib3ggc3RkX2Zvcm1hdHRlclxuYW5kIGNsb3NlX2JveCA9IHBwX2Nsb3NlX2JveCBzdGRfZm9ybWF0dGVyXG5hbmQgb3Blbl90YWcgPSBwcF9vcGVuX3RhZyBzdGRfZm9ybWF0dGVyXG5hbmQgY2xvc2VfdGFnID0gcHBfY2xvc2VfdGFnIHN0ZF9mb3JtYXR0ZXJcbmFuZCBvcGVuX3N0YWcgPSBwcF9vcGVuX3N0YWcgc3RkX2Zvcm1hdHRlclxuYW5kIGNsb3NlX3N0YWcgPSBwcF9jbG9zZV9zdGFnIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9hcyA9IHBwX3ByaW50X2FzIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9zdHJpbmcgPSBwcF9wcmludF9zdHJpbmcgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X2J5dGVzID0gcHBfcHJpbnRfYnl0ZXMgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X2ludCA9IHBwX3ByaW50X2ludCBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfZmxvYXQgPSBwcF9wcmludF9mbG9hdCBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfY2hhciA9IHBwX3ByaW50X2NoYXIgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X2Jvb2wgPSBwcF9wcmludF9ib29sIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9icmVhayA9IHBwX3ByaW50X2JyZWFrIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9jdXQgPSBwcF9wcmludF9jdXQgc3RkX2Zvcm1hdHRlclxuYW5kIHByaW50X3NwYWNlID0gcHBfcHJpbnRfc3BhY2Ugc3RkX2Zvcm1hdHRlclxuYW5kIGZvcmNlX25ld2xpbmUgPSBwcF9mb3JjZV9uZXdsaW5lIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9mbHVzaCA9IHBwX3ByaW50X2ZsdXNoIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF9uZXdsaW5lID0gcHBfcHJpbnRfbmV3bGluZSBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfaWZfbmV3bGluZSA9IHBwX3ByaW50X2lmX25ld2xpbmUgc3RkX2Zvcm1hdHRlclxuXG5hbmQgb3Blbl90Ym94ID0gcHBfb3Blbl90Ym94IHN0ZF9mb3JtYXR0ZXJcbmFuZCBjbG9zZV90Ym94ID0gcHBfY2xvc2VfdGJveCBzdGRfZm9ybWF0dGVyXG5hbmQgcHJpbnRfdGJyZWFrID0gcHBfcHJpbnRfdGJyZWFrIHN0ZF9mb3JtYXR0ZXJcblxuYW5kIHNldF90YWIgPSBwcF9zZXRfdGFiIHN0ZF9mb3JtYXR0ZXJcbmFuZCBwcmludF90YWIgPSBwcF9wcmludF90YWIgc3RkX2Zvcm1hdHRlclxuXG5hbmQgc2V0X21hcmdpbiA9IHBwX3NldF9tYXJnaW4gc3RkX2Zvcm1hdHRlclxuYW5kIGdldF9tYXJnaW4gPSBwcF9nZXRfbWFyZ2luIHN0ZF9mb3JtYXR0ZXJcblxuYW5kIHNldF9tYXhfaW5kZW50ID0gcHBfc2V0X21heF9pbmRlbnQgc3RkX2Zvcm1hdHRlclxuYW5kIGdldF9tYXhfaW5kZW50ID0gcHBfZ2V0X21heF9pbmRlbnQgc3RkX2Zvcm1hdHRlclxuXG5hbmQgc2V0X2dlb21ldHJ5ID0gcHBfc2V0X2dlb21ldHJ5IHN0ZF9mb3JtYXR0ZXJcbmFuZCBzYWZlX3NldF9nZW9tZXRyeSA9IHBwX3NhZmVfc2V0X2dlb21ldHJ5IHN0ZF9mb3JtYXR0ZXJcbmFuZCBnZXRfZ2VvbWV0cnkgPSBwcF9nZXRfZ2VvbWV0cnkgc3RkX2Zvcm1hdHRlclxuYW5kIHVwZGF0ZV9nZW9tZXRyeSA9IHBwX3VwZGF0ZV9nZW9tZXRyeSBzdGRfZm9ybWF0dGVyXG5cbmFuZCBzZXRfbWF4X2JveGVzID0gcHBfc2V0X21heF9ib3hlcyBzdGRfZm9ybWF0dGVyXG5hbmQgZ2V0X21heF9ib3hlcyA9IHBwX2dldF9tYXhfYm94ZXMgc3RkX2Zvcm1hdHRlclxuYW5kIG92ZXJfbWF4X2JveGVzID0gcHBfb3Zlcl9tYXhfYm94ZXMgc3RkX2Zvcm1hdHRlclxuXG5hbmQgc2V0X2VsbGlwc2lzX3RleHQgPSBwcF9zZXRfZWxsaXBzaXNfdGV4dCBzdGRfZm9ybWF0dGVyXG5hbmQgZ2V0X2VsbGlwc2lzX3RleHQgPSBwcF9nZXRfZWxsaXBzaXNfdGV4dCBzdGRfZm9ybWF0dGVyXG5cbmFuZCBzZXRfZm9ybWF0dGVyX291dF9jaGFubmVsID1cbiAgcHBfc2V0X2Zvcm1hdHRlcl9vdXRfY2hhbm5lbCBzdGRfZm9ybWF0dGVyXG5cbmFuZCBzZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgPVxuICBwcF9zZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgc3RkX2Zvcm1hdHRlclxuYW5kIGdldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyA9XG4gIHBwX2dldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyBzdGRfZm9ybWF0dGVyXG5cbmFuZCBzZXRfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgPVxuICBwcF9zZXRfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgc3RkX2Zvcm1hdHRlclxuYW5kIGdldF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyA9XG4gIHBwX2dldF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyBzdGRfZm9ybWF0dGVyXG5cbmFuZCBzZXRfZm9ybWF0dGVyX3N0YWdfZnVuY3Rpb25zID1cbiAgcHBfc2V0X2Zvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyBzdGRfZm9ybWF0dGVyXG5hbmQgZ2V0X2Zvcm1hdHRlcl9zdGFnX2Z1bmN0aW9ucyA9XG4gIHBwX2dldF9mb3JtYXR0ZXJfc3RhZ19mdW5jdGlvbnMgc3RkX2Zvcm1hdHRlclxuYW5kIHNldF9wcmludF90YWdzID1cbiAgcHBfc2V0X3ByaW50X3RhZ3Mgc3RkX2Zvcm1hdHRlclxuYW5kIGdldF9wcmludF90YWdzID1cbiAgcHBfZ2V0X3ByaW50X3RhZ3Mgc3RkX2Zvcm1hdHRlclxuYW5kIHNldF9tYXJrX3RhZ3MgPVxuICBwcF9zZXRfbWFya190YWdzIHN0ZF9mb3JtYXR0ZXJcbmFuZCBnZXRfbWFya190YWdzID1cbiAgcHBfZ2V0X21hcmtfdGFncyBzdGRfZm9ybWF0dGVyXG5hbmQgc2V0X3RhZ3MgPVxuICBwcF9zZXRfdGFncyBzdGRfZm9ybWF0dGVyXG5cblxuKCogQ29udmVuaWVuY2UgZnVuY3Rpb25zICopXG5cbigqIFRvIGZvcm1hdCBhIGxpc3QgKilcbmxldCByZWMgcHBfcHJpbnRfbGlzdCA/KHBwX3NlcCA9IHBwX3ByaW50X2N1dCkgcHBfdiBwcGYgPSBmdW5jdGlvblxuICB8IFtdIC0+ICgpXG4gIHwgW3ZdIC0+IHBwX3YgcHBmIHZcbiAgfCB2IDo6IHZzIC0+XG4gICAgcHBfdiBwcGYgdjtcbiAgICBwcF9zZXAgcHBmICgpO1xuICAgIHBwX3ByaW50X2xpc3QgfnBwX3NlcCBwcF92IHBwZiB2c1xuXG4oKiBUbyBmb3JtYXQgYSBzZXF1ZW5jZSAqKVxubGV0IHJlYyBwcF9wcmludF9zZXFfaW4gfnBwX3NlcCBwcF92IHBwZiBzZXEgPVxuICBtYXRjaCBzZXEgKCkgd2l0aFxuICB8IFNlcS5OaWwgLT4gKClcbiAgfCBTZXEuQ29ucyAodiwgc2VxKSAtPlxuICAgIHBwX3NlcCBwcGYgKCk7XG4gICAgcHBfdiBwcGYgdjtcbiAgICBwcF9wcmludF9zZXFfaW4gfnBwX3NlcCBwcF92IHBwZiBzZXFcblxubGV0IHBwX3ByaW50X3NlcSA/KHBwX3NlcCA9IHBwX3ByaW50X2N1dCkgcHBfdiBwcGYgc2VxID1cbiAgbWF0Y2ggc2VxICgpIHdpdGhcbiAgfCBTZXEuTmlsIC0+ICgpXG4gIHwgU2VxLkNvbnMgKHYsIHNlcSkgLT5cbiAgICBwcF92IHBwZiB2O1xuICAgIHBwX3ByaW50X3NlcV9pbiB+cHBfc2VwIHBwX3YgcHBmIHNlcVxuXG4oKiBUbyBmb3JtYXQgZnJlZS1mbG93aW5nIHRleHQgKilcbmxldCBwcF9wcmludF90ZXh0IHBwZiBzID1cbiAgbGV0IGxlbiA9IFN0cmluZy5sZW5ndGggcyBpblxuICBsZXQgbGVmdCA9IHJlZiAwIGluXG4gIGxldCByaWdodCA9IHJlZiAwIGluXG4gIGxldCBmbHVzaCAoKSA9XG4gICAgcHBfcHJpbnRfc3RyaW5nIHBwZiAoU3RyaW5nLnN1YiBzICFsZWZ0ICghcmlnaHQgLSAhbGVmdCkpO1xuICAgIGluY3IgcmlnaHQ7IGxlZnQgOj0gIXJpZ2h0O1xuICBpblxuICB3aGlsZSAoIXJpZ2h0IDw+IGxlbikgZG9cbiAgICBtYXRjaCBzLlshcmlnaHRdIHdpdGhcbiAgICAgIHwgJ1xcbicgLT5cbiAgICAgICAgZmx1c2ggKCk7XG4gICAgICAgIHBwX2ZvcmNlX25ld2xpbmUgcHBmICgpXG4gICAgICB8ICcgJyAtPlxuICAgICAgICBmbHVzaCAoKTsgcHBfcHJpbnRfc3BhY2UgcHBmICgpXG4gICAgICAoKiB0aGVyZSBpcyBubyBzcGVjaWZpYyBzdXBwb3J0IGZvciAnXFx0J1xuICAgICAgICAgYXMgaXQgaXMgdW5jbGVhciB3aGF0IGEgcmlnaHQgc2VtYW50aWNzIHdvdWxkIGJlICopXG4gICAgICB8IF8gLT4gaW5jciByaWdodFxuICBkb25lO1xuICBpZiAhbGVmdCA8PiBsZW4gdGhlbiBmbHVzaCAoKVxuXG5sZXQgcHBfcHJpbnRfb3B0aW9uID8obm9uZSA9IGZ1biBfICgpIC0+ICgpKSBwcF92IHBwZiA9IGZ1bmN0aW9uXG58IE5vbmUgLT4gbm9uZSBwcGYgKClcbnwgU29tZSB2IC0+IHBwX3YgcHBmIHZcblxubGV0IHBwX3ByaW50X3Jlc3VsdCB+b2sgfmVycm9yIHBwZiA9IGZ1bmN0aW9uXG58IE9rIHYgLT4gb2sgcHBmIHZcbnwgRXJyb3IgZSAtPiBlcnJvciBwcGYgZVxuXG5sZXQgcHBfcHJpbnRfZWl0aGVyIH5sZWZ0IH5yaWdodCBwcGYgPSBmdW5jdGlvblxufCBFaXRoZXIuTGVmdCBsIC0+IGxlZnQgcHBmIGxcbnwgRWl0aGVyLlJpZ2h0IHIgLT4gcmlnaHQgcHBmIHJcblxuICgqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxubGV0IGNvbXB1dGVfdGFnIG91dHB1dCB0YWdfYWNjID1cbiAgbGV0IGJ1ZiA9IEJ1ZmZlci5jcmVhdGUgMTYgaW5cbiAgbGV0IHBwZiA9IGZvcm1hdHRlcl9vZl9idWZmZXIgYnVmIGluXG4gIG91dHB1dCBwcGYgdGFnX2FjYztcbiAgcHBfcHJpbnRfZmx1c2ggcHBmICgpO1xuICBsZXQgbGVuID0gQnVmZmVyLmxlbmd0aCBidWYgaW5cbiAgaWYgbGVuIDwgMiB0aGVuIEJ1ZmZlci5jb250ZW50cyBidWZcbiAgZWxzZSBCdWZmZXIuc3ViIGJ1ZiAxIChsZW4gLSAyKVxuXG4gKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbiAgRGVmaW5pbmcgY29udGludWF0aW9ucyB0byBiZSBwYXNzZWQgYXMgYXJndW1lbnRzIG9mXG4gIENhbWxpbnRlcm5hbEZvcm1hdC5tYWtlX3ByaW50Zi5cblxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxub3BlbiBDYW1saW50ZXJuYWxGb3JtYXRCYXNpY3Ncbm9wZW4gQ2FtbGludGVybmFsRm9ybWF0XG5cbigqIEludGVycHJldCBhIGZvcm1hdHRpbmcgZW50aXR5IG9uIGEgZm9ybWF0dGVyLiAqKVxubGV0IG91dHB1dF9mb3JtYXR0aW5nX2xpdCBwcGYgZm10aW5nX2xpdCA9IG1hdGNoIGZtdGluZ19saXQgd2l0aFxuICB8IENsb3NlX2JveCAgICAgICAgICAgICAgICAgLT4gcHBfY2xvc2VfYm94IHBwZiAoKVxuICB8IENsb3NlX3RhZyAgICAgICAgICAgICAgICAgLT4gcHBfY2xvc2VfdGFnIHBwZiAoKVxuICB8IEJyZWFrIChfLCB3aWR0aCwgb2Zmc2V0KSAgLT4gcHBfcHJpbnRfYnJlYWsgcHBmIHdpZHRoIG9mZnNldFxuICB8IEZGbHVzaCAgICAgICAgICAgICAgICAgICAgLT4gcHBfcHJpbnRfZmx1c2ggcHBmICgpXG4gIHwgRm9yY2VfbmV3bGluZSAgICAgICAgICAgICAtPiBwcF9mb3JjZV9uZXdsaW5lIHBwZiAoKVxuICB8IEZsdXNoX25ld2xpbmUgICAgICAgICAgICAgLT4gcHBfcHJpbnRfbmV3bGluZSBwcGYgKClcbiAgfCBNYWdpY19zaXplIChfLCBfKSAgICAgICAgIC0+ICgpXG4gIHwgRXNjYXBlZF9hdCAgICAgICAgICAgICAgICAtPiBwcF9wcmludF9jaGFyIHBwZiAnQCdcbiAgfCBFc2NhcGVkX3BlcmNlbnQgICAgICAgICAgIC0+IHBwX3ByaW50X2NoYXIgcHBmICclJ1xuICB8IFNjYW5faW5kaWMgYyAgICAgICAgICAgICAgLT4gcHBfcHJpbnRfY2hhciBwcGYgJ0AnOyBwcF9wcmludF9jaGFyIHBwZiBjXG5cbigqIFJlY3Vyc2l2ZWx5IG91dHB1dCBhbiBcImFjY3VtdWxhdG9yXCIgY29udGFpbmluZyBhIHJldmVyc2VkIGxpc3Qgb2ZcbiAgIHByaW50aW5nIGVudGl0aWVzIChzdHJpbmcsIGNoYXIsIGZsdXMsIC4uLikgaW4gYW4gb3V0cHV0X3N0cmVhbS4gKilcbigqIERpZmZlciBmcm9tIFByaW50Zi5vdXRwdXRfYWNjIGJ5IHRoZSBpbnRlcnByZXRhdGlvbiBvZiBmb3JtYXR0aW5nLiAqKVxuKCogVXNlZCBhcyBhIGNvbnRpbnVhdGlvbiBvZiBDYW1saW50ZXJuYWxGb3JtYXQubWFrZV9wcmludGYuICopXG5sZXQgcmVjIG91dHB1dF9hY2MgcHBmIGFjYyA9IG1hdGNoIGFjYyB3aXRoXG4gIHwgQWNjX3N0cmluZ19saXRlcmFsIChBY2NfZm9ybWF0dGluZ19saXQgKHAsIE1hZ2ljX3NpemUgKF8sIHNpemUpKSwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKEFjY19mb3JtYXR0aW5nX2xpdCAocCwgTWFnaWNfc2l6ZSAoXywgc2l6ZSkpLCBzKSAtPlxuICAgIG91dHB1dF9hY2MgcHBmIHA7XG4gICAgcHBfcHJpbnRfYXNfc2l6ZSBwcGYgKFNpemUub2ZfaW50IHNpemUpIHM7XG4gIHwgQWNjX2NoYXJfbGl0ZXJhbCAoQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBNYWdpY19zaXplIChfLCBzaXplKSksIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAoQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBNYWdpY19zaXplIChfLCBzaXplKSksIGMpIC0+XG4gICAgb3V0cHV0X2FjYyBwcGYgcDtcbiAgICBwcF9wcmludF9hc19zaXplIHBwZiAoU2l6ZS5vZl9pbnQgc2l6ZSkgKFN0cmluZy5tYWtlIDEgYyk7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBmKSAtPlxuICAgIG91dHB1dF9hY2MgcHBmIHA7XG4gICAgb3V0cHV0X2Zvcm1hdHRpbmdfbGl0IHBwZiBmO1xuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fdGFnIGFjYycpIC0+XG4gICAgb3V0cHV0X2FjYyBwcGYgcDtcbiAgICBwcF9vcGVuX3N0YWcgcHBmIChTdHJpbmdfdGFnIChjb21wdXRlX3RhZyBvdXRwdXRfYWNjIGFjYycpKVxuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fYm94IGFjYycpIC0+XG4gICAgb3V0cHV0X2FjYyBwcGYgcDtcbiAgICBsZXQgKGluZGVudCwgYnR5KSA9IG9wZW5fYm94X29mX3N0cmluZyAoY29tcHV0ZV90YWcgb3V0cHV0X2FjYyBhY2MnKSBpblxuICAgIHBwX29wZW5fYm94X2dlbiBwcGYgaW5kZW50IGJ0eVxuICB8IEFjY19zdHJpbmdfbGl0ZXJhbCAocCwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKHAsIHMpICAgLT4gb3V0cHV0X2FjYyBwcGYgcDsgcHBfcHJpbnRfc3RyaW5nIHBwZiBzO1xuICB8IEFjY19jaGFyX2xpdGVyYWwgKHAsIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAocCwgYykgICAgIC0+IG91dHB1dF9hY2MgcHBmIHA7IHBwX3ByaW50X2NoYXIgcHBmIGM7XG4gIHwgQWNjX2RlbGF5IChwLCBmKSAgICAgICAgIC0+IG91dHB1dF9hY2MgcHBmIHA7IGYgcHBmO1xuICB8IEFjY19mbHVzaCBwICAgICAgICAgICAgICAtPiBvdXRwdXRfYWNjIHBwZiBwOyBwcF9wcmludF9mbHVzaCBwcGYgKCk7XG4gIHwgQWNjX2ludmFsaWRfYXJnIChwLCBtc2cpIC0+IG91dHB1dF9hY2MgcHBmIHA7IGludmFsaWRfYXJnIG1zZztcbiAgfCBFbmRfb2ZfYWNjICAgICAgICAgICAgICAgLT4gKClcblxuKCogUmVjdXJzaXZlbHkgb3V0cHV0IGFuIFwiYWNjdW11bGF0b3JcIiBjb250YWluaW5nIGEgcmV2ZXJzZWQgbGlzdCBvZlxuICAgcHJpbnRpbmcgZW50aXRpZXMgKHN0cmluZywgY2hhciwgZmx1cywgLi4uKSBpbiBhIGJ1ZmZlci4gKilcbigqIERpZmZlciBmcm9tIFByaW50Zi5idWZwdXRfYWNjIGJ5IHRoZSBpbnRlcnByZXRhdGlvbiBvZiBmb3JtYXR0aW5nLiAqKVxuKCogVXNlZCBhcyBhIGNvbnRpbnVhdGlvbiBvZiBDYW1saW50ZXJuYWxGb3JtYXQubWFrZV9wcmludGYuICopXG5sZXQgcmVjIHN0cnB1dF9hY2MgcHBmIGFjYyA9IG1hdGNoIGFjYyB3aXRoXG4gIHwgQWNjX3N0cmluZ19saXRlcmFsIChBY2NfZm9ybWF0dGluZ19saXQgKHAsIE1hZ2ljX3NpemUgKF8sIHNpemUpKSwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKEFjY19mb3JtYXR0aW5nX2xpdCAocCwgTWFnaWNfc2l6ZSAoXywgc2l6ZSkpLCBzKSAtPlxuICAgIHN0cnB1dF9hY2MgcHBmIHA7XG4gICAgcHBfcHJpbnRfYXNfc2l6ZSBwcGYgKFNpemUub2ZfaW50IHNpemUpIHM7XG4gIHwgQWNjX2NoYXJfbGl0ZXJhbCAoQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBNYWdpY19zaXplIChfLCBzaXplKSksIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAoQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBNYWdpY19zaXplIChfLCBzaXplKSksIGMpIC0+XG4gICAgc3RycHV0X2FjYyBwcGYgcDtcbiAgICBwcF9wcmludF9hc19zaXplIHBwZiAoU2l6ZS5vZl9pbnQgc2l6ZSkgKFN0cmluZy5tYWtlIDEgYyk7XG4gIHwgQWNjX2RlbGF5IChBY2NfZm9ybWF0dGluZ19saXQgKHAsIE1hZ2ljX3NpemUgKF8sIHNpemUpKSwgZikgLT5cbiAgICBzdHJwdXRfYWNjIHBwZiBwO1xuICAgIHBwX3ByaW50X2FzX3NpemUgcHBmIChTaXplLm9mX2ludCBzaXplKSAoZiAoKSk7XG4gIHwgQWNjX2Zvcm1hdHRpbmdfbGl0IChwLCBmKSAtPlxuICAgIHN0cnB1dF9hY2MgcHBmIHA7XG4gICAgb3V0cHV0X2Zvcm1hdHRpbmdfbGl0IHBwZiBmO1xuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fdGFnIGFjYycpIC0+XG4gICAgc3RycHV0X2FjYyBwcGYgcDtcbiAgICBwcF9vcGVuX3N0YWcgcHBmIChTdHJpbmdfdGFnIChjb21wdXRlX3RhZyBzdHJwdXRfYWNjIGFjYycpKVxuICB8IEFjY19mb3JtYXR0aW5nX2dlbiAocCwgQWNjX29wZW5fYm94IGFjYycpIC0+XG4gICAgc3RycHV0X2FjYyBwcGYgcDtcbiAgICBsZXQgKGluZGVudCwgYnR5KSA9IG9wZW5fYm94X29mX3N0cmluZyAoY29tcHV0ZV90YWcgc3RycHV0X2FjYyBhY2MnKSBpblxuICAgIHBwX29wZW5fYm94X2dlbiBwcGYgaW5kZW50IGJ0eVxuICB8IEFjY19zdHJpbmdfbGl0ZXJhbCAocCwgcylcbiAgfCBBY2NfZGF0YV9zdHJpbmcgKHAsIHMpICAgLT4gc3RycHV0X2FjYyBwcGYgcDsgcHBfcHJpbnRfc3RyaW5nIHBwZiBzO1xuICB8IEFjY19jaGFyX2xpdGVyYWwgKHAsIGMpXG4gIHwgQWNjX2RhdGFfY2hhciAocCwgYykgICAgIC0+IHN0cnB1dF9hY2MgcHBmIHA7IHBwX3ByaW50X2NoYXIgcHBmIGM7XG4gIHwgQWNjX2RlbGF5IChwLCBmKSAgICAgICAgIC0+IHN0cnB1dF9hY2MgcHBmIHA7IHBwX3ByaW50X3N0cmluZyBwcGYgKGYgKCkpO1xuICB8IEFjY19mbHVzaCBwICAgICAgICAgICAgICAtPiBzdHJwdXRfYWNjIHBwZiBwOyBwcF9wcmludF9mbHVzaCBwcGYgKCk7XG4gIHwgQWNjX2ludmFsaWRfYXJnIChwLCBtc2cpIC0+IHN0cnB1dF9hY2MgcHBmIHA7IGludmFsaWRfYXJnIG1zZztcbiAgfCBFbmRfb2ZfYWNjICAgICAgICAgICAgICAgLT4gKClcblxuKCpcblxuICBEZWZpbmluZyBbZnByaW50Zl0gYW5kIHZhcmlvdXMgZmxhdm9ycyBvZiBbZnByaW50Zl0uXG5cbiopXG5cbmxldCBrZnByaW50ZiBrIHBwZiAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIG1ha2VfcHJpbnRmXG4gICAgKGZ1biBhY2MgLT4gb3V0cHV0X2FjYyBwcGYgYWNjOyBrIHBwZilcbiAgICBFbmRfb2ZfYWNjIGZtdFxuXG5hbmQgaWtmcHJpbnRmIGsgcHBmIChGb3JtYXQgKGZtdCwgXykpID1cbiAgbWFrZV9pcHJpbnRmIGsgcHBmIGZtdFxuXG5sZXQgaWZwcmludGYgX3BwZiAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIG1ha2VfaXByaW50ZiBpZ25vcmUgKCkgZm10XG5cbmxldCBmcHJpbnRmIHBwZiA9IGtmcHJpbnRmIGlnbm9yZSBwcGZcbmxldCBwcmludGYgZm10ID0gZnByaW50ZiBzdGRfZm9ybWF0dGVyIGZtdFxubGV0IGVwcmludGYgZm10ID0gZnByaW50ZiBlcnJfZm9ybWF0dGVyIGZtdFxuXG5sZXQga2RwcmludGYgayAoRm9ybWF0IChmbXQsIF8pKSA9XG4gIG1ha2VfcHJpbnRmXG4gICAgKGZ1biBhY2MgLT4gayAoZnVuIHBwZiAtPiBvdXRwdXRfYWNjIHBwZiBhY2MpKVxuICAgIEVuZF9vZl9hY2MgZm10XG5cbmxldCBkcHJpbnRmIGZtdCA9IGtkcHJpbnRmIChmdW4gaSAtPiBpKSBmbXRcblxubGV0IGtzcHJpbnRmIGsgKEZvcm1hdCAoZm10LCBfKSkgPVxuICBsZXQgYiA9IHBwX21ha2VfYnVmZmVyICgpIGluXG4gIGxldCBwcGYgPSBmb3JtYXR0ZXJfb2ZfYnVmZmVyIGIgaW5cbiAgbGV0IGsgYWNjID1cbiAgICBzdHJwdXRfYWNjIHBwZiBhY2M7XG4gICAgayAoZmx1c2hfYnVmZmVyX2Zvcm1hdHRlciBiIHBwZikgaW5cbiAgbWFrZV9wcmludGYgayBFbmRfb2ZfYWNjIGZtdFxuXG5cbmxldCBzcHJpbnRmIGZtdCA9IGtzcHJpbnRmIGlkIGZtdFxuXG5sZXQga2FzcHJpbnRmIGsgKEZvcm1hdCAoZm10LCBfKSkgPVxuICBsZXQgYiA9IHBwX21ha2VfYnVmZmVyICgpIGluXG4gIGxldCBwcGYgPSBmb3JtYXR0ZXJfb2ZfYnVmZmVyIGIgaW5cbiAgbGV0IGsgYWNjID1cbiAgICBvdXRwdXRfYWNjIHBwZiBhY2M7XG4gICAgayAoZmx1c2hfYnVmZmVyX2Zvcm1hdHRlciBiIHBwZikgaW5cbiAgbWFrZV9wcmludGYgayBFbmRfb2ZfYWNjIGZtdFxuXG5cbmxldCBhc3ByaW50ZiBmbXQgPSBrYXNwcmludGYgaWQgZm10XG5cbigqIEZsdXNoaW5nIHN0YW5kYXJkIGZvcm1hdHRlcnMgYXQgZW5kIG9mIGV4ZWN1dGlvbi4gKilcblxubGV0IGZsdXNoX3N0YW5kYXJkX2Zvcm1hdHRlcnMgKCkgPVxuICBwcF9wcmludF9mbHVzaCBzdGRfZm9ybWF0dGVyICgpO1xuICBwcF9wcmludF9mbHVzaCBlcnJfZm9ybWF0dGVyICgpXG5cbmxldCAoKSA9IGF0X2V4aXQgZmx1c2hfc3RhbmRhcmRfZm9ybWF0dGVyc1xuXG4oKlxuXG4gIERlcHJlY2F0ZWQgc3R1ZmYuXG5cbiopXG5cbigqIERlcHJlY2F0ZWQgOiBzdWJzdW1lZCBieSBwcF9zZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgKilcbmxldCBwcF9zZXRfYWxsX2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIHN0YXRlXG4gICAgfm91dDpmIH5mbHVzaDpnIH5uZXdsaW5lOmggfnNwYWNlczppID1cbiAgcHBfc2V0X2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIHN0YXRlIGYgZztcbiAgc3RhdGUucHBfb3V0X25ld2xpbmUgPC0gaDtcbiAgc3RhdGUucHBfb3V0X3NwYWNlcyA8LSBpXG5cbigqIERlcHJlY2F0ZWQgOiBzdWJzdW1lZCBieSBwcF9nZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgKilcbmxldCBwcF9nZXRfYWxsX2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIHN0YXRlICgpID1cbiAgKHN0YXRlLnBwX291dF9zdHJpbmcsIHN0YXRlLnBwX291dF9mbHVzaCxcbiAgIHN0YXRlLnBwX291dF9uZXdsaW5lLCBzdGF0ZS5wcF9vdXRfc3BhY2VzKVxuXG5cbigqIERlcHJlY2F0ZWQgOiBzdWJzdW1lZCBieSBzZXRfZm9ybWF0dGVyX291dF9mdW5jdGlvbnMgKilcbmxldCBzZXRfYWxsX2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zID1cbiAgcHBfc2V0X2FsbF9mb3JtYXR0ZXJfb3V0cHV0X2Z1bmN0aW9ucyBzdGRfZm9ybWF0dGVyXG5cblxuKCogRGVwcmVjYXRlZCA6IHN1YnN1bWVkIGJ5IGdldF9mb3JtYXR0ZXJfb3V0X2Z1bmN0aW9ucyAqKVxubGV0IGdldF9hbGxfZm9ybWF0dGVyX291dHB1dF9mdW5jdGlvbnMgPVxuICBwcF9nZXRfYWxsX2Zvcm1hdHRlcl9vdXRwdXRfZnVuY3Rpb25zIHN0ZF9mb3JtYXR0ZXJcblxuXG4oKiBEZXByZWNhdGVkIDogZXJyb3IgcHJvbmUgZnVuY3Rpb24sIGRvIG5vdCB1c2UgaXQuXG4gICBUaGlzIGZ1bmN0aW9uIGlzIG5laXRoZXIgY29tcG9zaXRpb25hbCBub3IgaW5jcmVtZW50YWwsIHNpbmNlIGl0IGZsdXNoZXNcbiAgIHRoZSBwcmV0dHktcHJpbnRlciBxdWV1ZSBhdCBlYWNoIGNhbGwuXG4gICBUbyBnZXQgdGhlIHNhbWUgZnVuY3Rpb25hbGl0eSwgZGVmaW5lIGEgZm9ybWF0dGVyIG9mIHlvdXIgb3duIHdyaXRpbmcgdG9cbiAgIHRoZSBidWZmZXIgYXJndW1lbnQsIGFzIGluXG4gICBsZXQgcHBmID0gZm9ybWF0dGVyX29mX2J1ZmZlciBiXG4gICB0aGVuIHVzZSB7IWZwcmludGYgcHBmfSBhcyB1c3VhbC4gKilcbmxldCBicHJpbnRmIGIgKEZvcm1hdCAoZm10LCBfKSA6ICgnYSwgZm9ybWF0dGVyLCB1bml0KSBmb3JtYXQpID1cbiAgbGV0IHBwZiA9IGZvcm1hdHRlcl9vZl9idWZmZXIgYiBpblxuICBsZXQgayBhY2MgPSBvdXRwdXRfYWNjIHBwZiBhY2M7IHBwX2ZsdXNoX3F1ZXVlIHBwZiBmYWxzZSBpblxuICBtYWtlX3ByaW50ZiBrIEVuZF9vZl9hY2MgZm10XG5cblxuKCogRGVwcmVjYXRlZCA6IGFsaWFzIGZvciBrc3ByaW50Zi4gKilcbmxldCBrcHJpbnRmID0ga3NwcmludGZcblxuXG5cbigqIERlcHJlY2F0ZWQgdGFnIGZ1bmN0aW9ucyAqKVxuXG50eXBlIGZvcm1hdHRlcl90YWdfZnVuY3Rpb25zID0ge1xuICBtYXJrX29wZW5fdGFnIDogdGFnIC0+IHN0cmluZztcbiAgbWFya19jbG9zZV90YWcgOiB0YWcgLT4gc3RyaW5nO1xuICBwcmludF9vcGVuX3RhZyA6IHRhZyAtPiB1bml0O1xuICBwcmludF9jbG9zZV90YWcgOiB0YWcgLT4gdW5pdDtcbn1cblxuXG5sZXQgcHBfc2V0X2Zvcm1hdHRlcl90YWdfZnVuY3Rpb25zIHN0YXRlIHtcbiAgICAgbWFya19vcGVuX3RhZyA9IG1vdDtcbiAgICAgbWFya19jbG9zZV90YWcgPSBtY3Q7XG4gICAgIHByaW50X29wZW5fdGFnID0gcG90O1xuICAgICBwcmludF9jbG9zZV90YWcgPSBwY3Q7XG4gICB9ID1cbiAgbGV0IHN0cmluZ2lmeSBmIGUgPSBmdW5jdGlvbiBTdHJpbmdfdGFnIHMgLT4gZiBzIHwgXyAtPiBlIGluXG4gIHN0YXRlLnBwX21hcmtfb3Blbl90YWcgPC0gc3RyaW5naWZ5IG1vdCBcIlwiO1xuICBzdGF0ZS5wcF9tYXJrX2Nsb3NlX3RhZyA8LSBzdHJpbmdpZnkgbWN0IFwiXCI7XG4gIHN0YXRlLnBwX3ByaW50X29wZW5fdGFnIDwtIHN0cmluZ2lmeSBwb3QgKCk7XG4gIHN0YXRlLnBwX3ByaW50X2Nsb3NlX3RhZyA8LSBzdHJpbmdpZnkgcGN0ICgpXG5cbmxldCBwcF9nZXRfZm9ybWF0dGVyX3RhZ19mdW5jdGlvbnMgZm10ICgpID1cbiAgbGV0IGZ1bnMgPSBwcF9nZXRfZm9ybWF0dGVyX3N0YWdfZnVuY3Rpb25zIGZtdCAoKSBpblxuICBsZXQgbWFya19vcGVuX3RhZyBzID0gZnVucy5tYXJrX29wZW5fc3RhZyAoU3RyaW5nX3RhZyBzKSBpblxuICBsZXQgbWFya19jbG9zZV90YWcgcyA9IGZ1bnMubWFya19jbG9zZV9zdGFnIChTdHJpbmdfdGFnIHMpIGluXG4gIGxldCBwcmludF9vcGVuX3RhZyBzID0gZnVucy5wcmludF9vcGVuX3N0YWcgKFN0cmluZ190YWcgcykgaW5cbiAgbGV0IHByaW50X2Nsb3NlX3RhZyBzID0gZnVucy5wcmludF9jbG9zZV9zdGFnIChTdHJpbmdfdGFnIHMpIGluXG4gIHttYXJrX29wZW5fdGFnOyBtYXJrX2Nsb3NlX3RhZzsgcHJpbnRfb3Blbl90YWc7IHByaW50X2Nsb3NlX3RhZ31cblxubGV0IHNldF9mb3JtYXR0ZXJfdGFnX2Z1bmN0aW9ucyA9XG4gIHBwX3NldF9mb3JtYXR0ZXJfdGFnX2Z1bmN0aW9ucyBzdGRfZm9ybWF0dGVyXG5hbmQgZ2V0X2Zvcm1hdHRlcl90YWdfZnVuY3Rpb25zID1cbiAgcHBfZ2V0X2Zvcm1hdHRlcl90YWdfZnVuY3Rpb25zIHN0ZF9mb3JtYXR0ZXJcbiIsIigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0NhbWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgIFBpZXJyZSBXZWlzLCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQ29weXJpZ2h0IDIwMDIgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCAgICAgKilcbigqICAgICBlbiBBdXRvbWF0aXF1ZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgICAgKilcbigqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMSwgd2l0aCB0aGUgICAgICAgICAgKilcbigqICAgc3BlY2lhbCBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gdGhlIGZpbGUgTElDRU5TRS4gICAgICAgICAgKilcbigqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKilcbigqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcblxub3BlbiBDYW1saW50ZXJuYWxGb3JtYXRCYXNpY3Ncbm9wZW4gQ2FtbGludGVybmFsRm9ybWF0XG5cbigqIGFsaWFzIHRvIGF2b2lkIHdhcm5pbmcgZm9yIGFtYmlndWl0eSBiZXR3ZWVuXG4gICBTdGRsaWIuZm9ybWF0NlxuICAgYW5kIENhbWxpbnRlcm5hbEZvcm1hdEJhc2ljcy5mb3JtYXQ2XG5cbiAgICh0aGUgZm9ybWVyIGlzIGluIGZhY3QgYW4gYWxpYXMgZm9yIHRoZSBsYXR0ZXIsXG4gICAgYnV0IHRoZSBhbWJpZ3VpdHkgd2FybmluZyBkb2Vzbid0IGNhcmUpXG4qKVxudHlwZSAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0NiA9XG4gICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBTdGRsaWIuZm9ybWF0NlxuXG5cbigqIFRoZSBydW4tdGltZSBsaWJyYXJ5IGZvciBzY2FubmVycy4gKilcblxuKCogU2Nhbm5pbmcgYnVmZmVycy4gKilcbm1vZHVsZSB0eXBlIFNDQU5OSU5HID0gc2lnXG5cbiAgdHlwZSBpbl9jaGFubmVsXG5cbiAgdHlwZSBzY2FuYnVmID0gaW5fY2hhbm5lbFxuXG4gIHR5cGUgZmlsZV9uYW1lID0gc3RyaW5nXG5cbiAgdmFsIHN0ZGluIDogaW5fY2hhbm5lbFxuICAoKiBUaGUgc2Nhbm5pbmcgYnVmZmVyIHJlYWRpbmcgZnJvbSBbU3RkbGliLnN0ZGluXS5cbiAgICAgW3N0ZGliXSBpcyBlcXVpdmFsZW50IHRvIFtTY2FubmluZy5mcm9tX2NoYW5uZWwgU3RkbGliLnN0ZGluXS4gKilcblxuICB2YWwgc3RkaWIgOiBpbl9jaGFubmVsXG4gICgqIEFuIGFsaWFzIGZvciBbU2NhbmYuc3RkaW5dLCB0aGUgc2Nhbm5pbmcgYnVmZmVyIHJlYWRpbmcgZnJvbVxuICAgICBbU3RkbGliLnN0ZGluXS4gKilcblxuICB2YWwgbmV4dF9jaGFyIDogc2NhbmJ1ZiAtPiBjaGFyXG4gICgqIFtTY2FubmluZy5uZXh0X2NoYXIgaWJdIGFkdmFuY2UgdGhlIHNjYW5uaW5nIGJ1ZmZlciBmb3JcbiAgICAgb25lIGNoYXJhY3Rlci5cbiAgICAgSWYgbm8gbW9yZSBjaGFyYWN0ZXIgY2FuIGJlIHJlYWQsIHNldHMgYSBlbmQgb2YgZmlsZSBjb25kaXRpb24gYW5kXG4gICAgIHJldHVybnMgJ1xcMDAwJy4gKilcblxuICB2YWwgaW52YWxpZGF0ZV9jdXJyZW50X2NoYXIgOiBzY2FuYnVmIC0+IHVuaXRcbiAgKCogW1NjYW5uaW5nLmludmFsaWRhdGVfY3VycmVudF9jaGFyIGliXSBtYXJrIHRoZSBjdXJyZW50X2NoYXIgYXMgYWxyZWFkeVxuICAgICBzY2FubmVkLiAqKVxuXG4gIHZhbCBwZWVrX2NoYXIgOiBzY2FuYnVmIC0+IGNoYXJcbiAgKCogW1NjYW5uaW5nLnBlZWtfY2hhciBpYl0gcmV0dXJucyB0aGUgY3VycmVudCBjaGFyIGF2YWlsYWJsZSBpblxuICAgICB0aGUgYnVmZmVyIG9yIHJlYWRzIG9uZSBpZiBuZWNlc3NhcnkgKHdoZW4gdGhlIGN1cnJlbnQgY2hhcmFjdGVyIGlzXG4gICAgIGFscmVhZHkgc2Nhbm5lZCkuXG4gICAgIElmIG5vIGNoYXJhY3RlciBjYW4gYmUgcmVhZCwgc2V0cyBhbiBlbmQgb2YgZmlsZSBjb25kaXRpb24gYW5kXG4gICAgIHJldHVybnMgJ1xcMDAwJy4gKilcblxuICB2YWwgY2hlY2tlZF9wZWVrX2NoYXIgOiBzY2FuYnVmIC0+IGNoYXJcbiAgKCogU2FtZSBhcyBbU2Nhbm5pbmcucGVla19jaGFyXSBhYm92ZSBidXQgYWx3YXlzIHJldHVybnMgYSB2YWxpZCBjaGFyIG9yXG4gICAgIGZhaWxzOiBpbnN0ZWFkIG9mIHJldHVybmluZyBhIG51bGwgY2hhciB3aGVuIHRoZSByZWFkaW5nIG1ldGhvZCBvZiB0aGVcbiAgICAgaW5wdXQgYnVmZmVyIGhhcyByZWFjaGVkIGFuIGVuZCBvZiBmaWxlLCB0aGUgZnVuY3Rpb24gcmFpc2VzIGV4Y2VwdGlvblxuICAgICBbRW5kX29mX2ZpbGVdLiAqKVxuXG4gIHZhbCBzdG9yZV9jaGFyIDogaW50IC0+IHNjYW5idWYgLT4gY2hhciAtPiBpbnRcbiAgKCogW1NjYW5uaW5nLnN0b3JlX2NoYXIgbGltIGliIGNdIGFkZHMgW2NdIHRvIHRoZSB0b2tlbiBidWZmZXJcbiAgICAgb2YgdGhlIHNjYW5uaW5nIGJ1ZmZlciBbaWJdLiBJdCBhbHNvIGFkdmFuY2VzIHRoZSBzY2FubmluZyBidWZmZXIgZm9yXG4gICAgIG9uZSBjaGFyYWN0ZXIgYW5kIHJldHVybnMgW2xpbSAtIDFdLCBpbmRpY2F0aW5nIHRoZSBuZXcgbGltaXQgZm9yIHRoZVxuICAgICBsZW5ndGggb2YgdGhlIGN1cnJlbnQgdG9rZW4uICopXG5cbiAgdmFsIHNraXBfY2hhciA6IGludCAtPiBzY2FuYnVmIC0+IGludFxuICAoKiBbU2Nhbm5pbmcuc2tpcF9jaGFyIGxpbSBpYl0gaWdub3JlcyB0aGUgY3VycmVudCBjaGFyYWN0ZXIuICopXG5cbiAgdmFsIGlnbm9yZV9jaGFyIDogaW50IC0+IHNjYW5idWYgLT4gaW50XG4gICgqIFtTY2FubmluZy5pZ25vcmVfY2hhciBpYiBsaW1dIGlnbm9yZXMgdGhlIGN1cnJlbnQgY2hhcmFjdGVyIGFuZFxuICAgICBkZWNyZW1lbnRzIHRoZSBsaW1pdC4gKilcblxuICB2YWwgdG9rZW4gOiBzY2FuYnVmIC0+IHN0cmluZ1xuICAoKiBbU2Nhbm5pbmcudG9rZW4gaWJdIHJldHVybnMgdGhlIHN0cmluZyBzdG9yZWQgaW50byB0aGUgdG9rZW5cbiAgICAgYnVmZmVyIG9mIHRoZSBzY2FubmluZyBidWZmZXI6IGl0IHJldHVybnMgdGhlIHRva2VuIG1hdGNoZWQgYnkgdGhlXG4gICAgIGZvcm1hdC4gKilcblxuICB2YWwgcmVzZXRfdG9rZW4gOiBzY2FuYnVmIC0+IHVuaXRcbiAgKCogW1NjYW5uaW5nLnJlc2V0X3Rva2VuIGliXSByZXNldHMgdGhlIHRva2VuIGJ1ZmZlciBvZlxuICAgICB0aGUgZ2l2ZW4gc2Nhbm5pbmcgYnVmZmVyLiAqKVxuXG4gIHZhbCBjaGFyX2NvdW50IDogc2NhbmJ1ZiAtPiBpbnRcbiAgKCogW1NjYW5uaW5nLmNoYXJfY291bnQgaWJdIHJldHVybnMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzXG4gICAgIHJlYWQgc28gZmFyIGZyb20gdGhlIGdpdmVuIGJ1ZmZlci4gKilcblxuICB2YWwgbGluZV9jb3VudCA6IHNjYW5idWYgLT4gaW50XG4gICgqIFtTY2FubmluZy5saW5lX2NvdW50IGliXSByZXR1cm5zIHRoZSBudW1iZXIgb2YgbmV3IGxpbmVcbiAgICAgY2hhcmFjdGVycyByZWFkIHNvIGZhciBmcm9tIHRoZSBnaXZlbiBidWZmZXIuICopXG5cbiAgdmFsIHRva2VuX2NvdW50IDogc2NhbmJ1ZiAtPiBpbnRcbiAgKCogW1NjYW5uaW5nLnRva2VuX2NvdW50IGliXSByZXR1cm5zIHRoZSBudW1iZXIgb2YgdG9rZW5zIHJlYWRcbiAgICAgc28gZmFyIGZyb20gW2liXS4gKilcblxuICB2YWwgZW9mIDogc2NhbmJ1ZiAtPiBib29sXG4gICgqIFtTY2FubmluZy5lb2YgaWJdIHJldHVybnMgdGhlIGVuZCBvZiBpbnB1dCBjb25kaXRpb25cbiAgICAgb2YgdGhlIGdpdmVuIGJ1ZmZlci4gKilcblxuICB2YWwgZW5kX29mX2lucHV0IDogc2NhbmJ1ZiAtPiBib29sXG4gICgqIFtTY2FubmluZy5lbmRfb2ZfaW5wdXQgaWJdIHRlc3RzIHRoZSBlbmQgb2YgaW5wdXQgY29uZGl0aW9uXG4gICAgIG9mIHRoZSBnaXZlbiBidWZmZXIgKGlmIG5vIGNoYXIgaGFzIGV2ZXIgYmVlbiByZWFkLCBhbiBhdHRlbXB0IHRvXG4gICAgIHJlYWQgb25lIGlzIHBlcmZvcm1lZCkuICopXG5cbiAgdmFsIGJlZ2lubmluZ19vZl9pbnB1dCA6IHNjYW5idWYgLT4gYm9vbFxuICAoKiBbU2Nhbm5pbmcuYmVnaW5uaW5nX29mX2lucHV0IGliXSB0ZXN0cyB0aGUgYmVnaW5uaW5nIG9mIGlucHV0XG4gICAgIGNvbmRpdGlvbiBvZiB0aGUgZ2l2ZW4gYnVmZmVyLiAqKVxuXG4gIHZhbCBuYW1lX29mX2lucHV0IDogc2NhbmJ1ZiAtPiBzdHJpbmdcbiAgKCogW1NjYW5uaW5nLm5hbWVfb2ZfaW5wdXQgaWJdIHJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGNoYXJhY3RlclxuICAgICBzb3VyY2UgZm9yIGlucHV0IGJ1ZmZlciBbaWJdLiAqKVxuXG4gIHZhbCBvcGVuX2luIDogZmlsZV9uYW1lIC0+IGluX2NoYW5uZWxcbiAgdmFsIG9wZW5faW5fYmluIDogZmlsZV9uYW1lIC0+IGluX2NoYW5uZWxcbiAgdmFsIGZyb21fZmlsZSA6IGZpbGVfbmFtZSAtPiBpbl9jaGFubmVsXG4gIHZhbCBmcm9tX2ZpbGVfYmluIDogZmlsZV9uYW1lIC0+IGluX2NoYW5uZWxcbiAgdmFsIGZyb21fc3RyaW5nIDogc3RyaW5nIC0+IGluX2NoYW5uZWxcbiAgdmFsIGZyb21fZnVuY3Rpb24gOiAodW5pdCAtPiBjaGFyKSAtPiBpbl9jaGFubmVsXG4gIHZhbCBmcm9tX2NoYW5uZWwgOiBTdGRsaWIuaW5fY2hhbm5lbCAtPiBpbl9jaGFubmVsXG5cbiAgdmFsIGNsb3NlX2luIDogaW5fY2hhbm5lbCAtPiB1bml0XG5cbiAgdmFsIG1lbW9fZnJvbV9jaGFubmVsIDogU3RkbGliLmluX2NoYW5uZWwgLT4gaW5fY2hhbm5lbFxuICAoKiBPYnNvbGV0ZS4gKilcblxuZW5kXG5cblxubW9kdWxlIFNjYW5uaW5nIDogU0NBTk5JTkcgPSBzdHJ1Y3RcblxuICAoKiBUaGUgcnVuLXRpbWUgbGlicmFyeSBmb3Igc2NhbmYuICopXG5cbiAgdHlwZSBmaWxlX25hbWUgPSBzdHJpbmdcblxuICB0eXBlIGluX2NoYW5uZWxfbmFtZSA9XG4gICAgfCBGcm9tX2NoYW5uZWwgb2YgU3RkbGliLmluX2NoYW5uZWxcbiAgICB8IEZyb21fZmlsZSBvZiBmaWxlX25hbWUgKiBTdGRsaWIuaW5fY2hhbm5lbFxuICAgIHwgRnJvbV9mdW5jdGlvblxuICAgIHwgRnJvbV9zdHJpbmdcblxuXG4gIHR5cGUgaW5fY2hhbm5lbCA9IHtcbiAgICBtdXRhYmxlIGljX2VvZiA6IGJvb2w7XG4gICAgbXV0YWJsZSBpY19jdXJyZW50X2NoYXIgOiBjaGFyO1xuICAgIG11dGFibGUgaWNfY3VycmVudF9jaGFyX2lzX3ZhbGlkIDogYm9vbDtcbiAgICBtdXRhYmxlIGljX2NoYXJfY291bnQgOiBpbnQ7XG4gICAgbXV0YWJsZSBpY19saW5lX2NvdW50IDogaW50O1xuICAgIG11dGFibGUgaWNfdG9rZW5fY291bnQgOiBpbnQ7XG4gICAgaWNfZ2V0X25leHRfY2hhciA6IHVuaXQgLT4gY2hhcjtcbiAgICBpY190b2tlbl9idWZmZXIgOiBCdWZmZXIudDtcbiAgICBpY19pbnB1dF9uYW1lIDogaW5fY2hhbm5lbF9uYW1lO1xuICB9XG5cblxuICB0eXBlIHNjYW5idWYgPSBpbl9jaGFubmVsXG5cbiAgbGV0IG51bGxfY2hhciA9ICdcXDAwMCdcblxuICAoKiBSZWFkcyBhIG5ldyBjaGFyYWN0ZXIgZnJvbSBpbnB1dCBidWZmZXIuXG4gICAgIE5leHRfY2hhciBuZXZlciBmYWlscywgZXZlbiBpbiBjYXNlIG9mIGVuZCBvZiBpbnB1dDpcbiAgICAgaXQgdGhlbiBzaW1wbHkgc2V0cyB0aGUgZW5kIG9mIGZpbGUgY29uZGl0aW9uLiAqKVxuICBsZXQgbmV4dF9jaGFyIGliID1cbiAgICB0cnlcbiAgICAgIGxldCBjID0gaWIuaWNfZ2V0X25leHRfY2hhciAoKSBpblxuICAgICAgaWIuaWNfY3VycmVudF9jaGFyIDwtIGM7XG4gICAgICBpYi5pY19jdXJyZW50X2NoYXJfaXNfdmFsaWQgPC0gdHJ1ZTtcbiAgICAgIGliLmljX2NoYXJfY291bnQgPC0gc3VjYyBpYi5pY19jaGFyX2NvdW50O1xuICAgICAgaWYgYyA9ICdcXG4nIHRoZW4gaWIuaWNfbGluZV9jb3VudCA8LSBzdWNjIGliLmljX2xpbmVfY291bnQ7XG4gICAgICBjIHdpdGhcbiAgICB8IEVuZF9vZl9maWxlIC0+XG4gICAgICBsZXQgYyA9IG51bGxfY2hhciBpblxuICAgICAgaWIuaWNfY3VycmVudF9jaGFyIDwtIGM7XG4gICAgICBpYi5pY19jdXJyZW50X2NoYXJfaXNfdmFsaWQgPC0gZmFsc2U7XG4gICAgICBpYi5pY19lb2YgPC0gdHJ1ZTtcbiAgICAgIGNcblxuXG4gIGxldCBwZWVrX2NoYXIgaWIgPVxuICAgIGlmIGliLmljX2N1cnJlbnRfY2hhcl9pc192YWxpZFxuICAgIHRoZW4gaWIuaWNfY3VycmVudF9jaGFyXG4gICAgZWxzZSBuZXh0X2NoYXIgaWJcblxuXG4gICgqIFJldHVybnMgYSB2YWxpZCBjdXJyZW50IGNoYXIgZm9yIHRoZSBpbnB1dCBidWZmZXIuIEluIHBhcnRpY3VsYXJcbiAgICAgbm8gaXJyZWxldmFudCBudWxsIGNoYXJhY3RlciAoYXMgc2V0IGJ5IFtuZXh0X2NoYXJdIGluIGNhc2Ugb2YgZW5kXG4gICAgIG9mIGlucHV0KSBpcyByZXR1cm5lZCwgc2luY2UgW0VuZF9vZl9maWxlXSBpcyByYWlzZWQgd2hlblxuICAgICBbbmV4dF9jaGFyXSBzZXRzIHRoZSBlbmQgb2YgZmlsZSBjb25kaXRpb24gd2hpbGUgdHJ5aW5nIHRvIHJlYWQgYVxuICAgICBuZXcgY2hhcmFjdGVyLiAqKVxuICBsZXQgY2hlY2tlZF9wZWVrX2NoYXIgaWIgPVxuICAgIGxldCBjID0gcGVla19jaGFyIGliIGluXG4gICAgaWYgaWIuaWNfZW9mIHRoZW4gcmFpc2UgRW5kX29mX2ZpbGU7XG4gICAgY1xuXG5cbiAgbGV0IGVuZF9vZl9pbnB1dCBpYiA9XG4gICAgaWdub3JlIChwZWVrX2NoYXIgaWIpO1xuICAgIGliLmljX2VvZlxuXG5cbiAgbGV0IGVvZiBpYiA9IGliLmljX2VvZlxuXG4gIGxldCBiZWdpbm5pbmdfb2ZfaW5wdXQgaWIgPSBpYi5pY19jaGFyX2NvdW50ID0gMFxuXG4gIGxldCBuYW1lX29mX2lucHV0IGliID1cbiAgICBtYXRjaCBpYi5pY19pbnB1dF9uYW1lIHdpdGhcbiAgICB8IEZyb21fY2hhbm5lbCBfaWMgLT4gXCJ1bm5hbWVkIFN0ZGxpYiBpbnB1dCBjaGFubmVsXCJcbiAgICB8IEZyb21fZmlsZSAoZm5hbWUsIF9pYykgLT4gZm5hbWVcbiAgICB8IEZyb21fZnVuY3Rpb24gLT4gXCJ1bm5hbWVkIGZ1bmN0aW9uXCJcbiAgICB8IEZyb21fc3RyaW5nIC0+IFwidW5uYW1lZCBjaGFyYWN0ZXIgc3RyaW5nXCJcblxuXG4gIGxldCBjaGFyX2NvdW50IGliID1cbiAgICBpZiBpYi5pY19jdXJyZW50X2NoYXJfaXNfdmFsaWRcbiAgICB0aGVuIGliLmljX2NoYXJfY291bnQgLSAxXG4gICAgZWxzZSBpYi5pY19jaGFyX2NvdW50XG5cblxuICBsZXQgbGluZV9jb3VudCBpYiA9IGliLmljX2xpbmVfY291bnRcblxuICBsZXQgcmVzZXRfdG9rZW4gaWIgPSBCdWZmZXIucmVzZXQgaWIuaWNfdG9rZW5fYnVmZmVyXG5cbiAgbGV0IGludmFsaWRhdGVfY3VycmVudF9jaGFyIGliID0gaWIuaWNfY3VycmVudF9jaGFyX2lzX3ZhbGlkIDwtIGZhbHNlXG5cbiAgbGV0IHRva2VuIGliID1cbiAgICBsZXQgdG9rZW5fYnVmZmVyID0gaWIuaWNfdG9rZW5fYnVmZmVyIGluXG4gICAgbGV0IHRvayA9IEJ1ZmZlci5jb250ZW50cyB0b2tlbl9idWZmZXIgaW5cbiAgICBCdWZmZXIuY2xlYXIgdG9rZW5fYnVmZmVyO1xuICAgIGliLmljX3Rva2VuX2NvdW50IDwtIHN1Y2MgaWIuaWNfdG9rZW5fY291bnQ7XG4gICAgdG9rXG5cblxuICBsZXQgdG9rZW5fY291bnQgaWIgPSBpYi5pY190b2tlbl9jb3VudFxuXG4gIGxldCBza2lwX2NoYXIgd2lkdGggaWIgPVxuICAgIGludmFsaWRhdGVfY3VycmVudF9jaGFyIGliO1xuICAgIHdpZHRoXG5cblxuICBsZXQgaWdub3JlX2NoYXIgd2lkdGggaWIgPSBza2lwX2NoYXIgKHdpZHRoIC0gMSkgaWJcblxuICBsZXQgc3RvcmVfY2hhciB3aWR0aCBpYiBjID1cbiAgICBCdWZmZXIuYWRkX2NoYXIgaWIuaWNfdG9rZW5fYnVmZmVyIGM7XG4gICAgaWdub3JlX2NoYXIgd2lkdGggaWJcblxuXG4gIGxldCBkZWZhdWx0X3Rva2VuX2J1ZmZlcl9zaXplID0gMTAyNFxuXG4gIGxldCBjcmVhdGUgaW5hbWUgbmV4dCA9IHtcbiAgICBpY19lb2YgPSBmYWxzZTtcbiAgICBpY19jdXJyZW50X2NoYXIgPSBudWxsX2NoYXI7XG4gICAgaWNfY3VycmVudF9jaGFyX2lzX3ZhbGlkID0gZmFsc2U7XG4gICAgaWNfY2hhcl9jb3VudCA9IDA7XG4gICAgaWNfbGluZV9jb3VudCA9IDA7XG4gICAgaWNfdG9rZW5fY291bnQgPSAwO1xuICAgIGljX2dldF9uZXh0X2NoYXIgPSBuZXh0O1xuICAgIGljX3Rva2VuX2J1ZmZlciA9IEJ1ZmZlci5jcmVhdGUgZGVmYXVsdF90b2tlbl9idWZmZXJfc2l6ZTtcbiAgICBpY19pbnB1dF9uYW1lID0gaW5hbWU7XG4gIH1cblxuXG4gIGxldCBmcm9tX3N0cmluZyBzID1cbiAgICBsZXQgaSA9IHJlZiAwIGluXG4gICAgbGV0IGxlbiA9IFN0cmluZy5sZW5ndGggcyBpblxuICAgIGxldCBuZXh0ICgpID1cbiAgICAgIGlmICFpID49IGxlbiB0aGVuIHJhaXNlIEVuZF9vZl9maWxlIGVsc2VcbiAgICAgIGxldCBjID0gcy5bIWldIGluXG4gICAgICBpbmNyIGk7XG4gICAgICBjIGluXG4gICAgY3JlYXRlIEZyb21fc3RyaW5nIG5leHRcblxuXG4gIGxldCBmcm9tX2Z1bmN0aW9uID0gY3JlYXRlIEZyb21fZnVuY3Rpb25cblxuICAoKiBTY2FubmluZyBmcm9tIGFuIGlucHV0IGNoYW5uZWwuICopXG5cbiAgKCogUG9zaXRpb24gb2YgdGhlIHByb2JsZW06XG5cbiAgICAgV2UgY2Fubm90IHByZXZlbnQgdGhlIHNjYW5uaW5nIG1lY2hhbmlzbSB0byB1c2Ugb25lIGxvb2thaGVhZCBjaGFyYWN0ZXIsXG4gICAgIGlmIG5lZWRlZCBieSB0aGUgc2VtYW50aWNzIG9mIHRoZSBmb3JtYXQgc3RyaW5nIHNwZWNpZmljYXRpb25zIChlLmcuIGFcbiAgICAgdHJhaWxpbmcgJ3NraXAgc3BhY2UnIHNwZWNpZmljYXRpb24gaW4gdGhlIGZvcm1hdCBzdHJpbmcpOyBpbiB0aGlzIGNhc2UsXG4gICAgIHRoZSBtYW5kYXRvcnkgbG9va2FoZWFkIGNoYXJhY3RlciBpcyBpbmRlZWQgcmVhZCBmcm9tIHRoZSBpbnB1dCBhbmQgbm90XG4gICAgIHVzZWQgdG8gcmV0dXJuIHRoZSB0b2tlbiByZWFkLiBJdCBpcyB0aHVzIG1hbmRhdG9yeSB0byBiZSBhYmxlIHRvIHN0b3JlXG4gICAgIGFuIHVudXNlZCBsb29rYWhlYWQgY2hhcmFjdGVyIHNvbWV3aGVyZSB0byBnZXQgaXQgYXMgdGhlIGZpcnN0IGNoYXJhY3RlclxuICAgICBvZiB0aGUgbmV4dCBzY2FuLlxuXG4gICAgIFRvIGNpcmN1bXZlbnQgdGhpcyBwcm9ibGVtLCBhbGwgdGhlIHNjYW5uaW5nIGZ1bmN0aW9ucyBnZXQgYSBsb3cgbGV2ZWxcbiAgICAgaW5wdXQgYnVmZmVyIGFyZ3VtZW50IHdoZXJlIHRoZXkgc3RvcmUgdGhlIGxvb2thaGVhZCBjaGFyYWN0ZXIgd2hlblxuICAgICBuZWVkZWQ7IGFkZGl0aW9uYWxseSwgdGhlIGlucHV0IGJ1ZmZlciBpcyB0aGUgb25seSBzb3VyY2Ugb2YgY2hhcmFjdGVyIG9mXG4gICAgIGEgc2Nhbm5lci4gVGhlIFtzY2FuYnVmXSBpbnB1dCBidWZmZXJzIGFyZSBkZWZpbmVkIGluIG1vZHVsZSB7IVNjYW5uaW5nfS5cblxuICAgICBOb3cgd2UgdW5kZXJzdGFuZCB0aGF0IGl0IGlzIGV4dHJlbWVseSBpbXBvcnRhbnQgdGhhdCByZWxhdGVkIGFuZFxuICAgICBzdWNjZXNzaXZlIGNhbGxzIHRvIHNjYW5uZXJzIGluZGVlZCByZWFkIGZyb20gdGhlIHNhbWUgaW5wdXQgYnVmZmVyLlxuICAgICBJbiBlZmZlY3QsIGlmIGEgc2Nhbm5lciBbc2NhbjFdIGlzIHJlYWRpbmcgZnJvbSBbaWIxXSBhbmQgc3RvcmVzIGFuXG4gICAgIHVudXNlZCBsb29rYWhlYWQgY2hhcmFjdGVyIFtjMV0gaW50byBpdHMgaW5wdXQgYnVmZmVyIFtpYjFdLCB0aGVuXG4gICAgIGFub3RoZXIgc2Nhbm5lciBbc2NhbjJdIG5vdCByZWFkaW5nIGZyb20gdGhlIHNhbWUgYnVmZmVyIFtpYjFdIHdpbGwgbWlzc1xuICAgICB0aGUgY2hhcmFjdGVyIFtjMV0sIHNlZW1pbmdseSB2YW5pc2hlZCBpbiB0aGUgYWlyIGZyb20gdGhlIHBvaW50IG9mIHZpZXdcbiAgICAgb2YgW3NjYW4yXS5cblxuICAgICBUaGlzIG1lY2hhbmlzbSB3b3JrcyBwZXJmZWN0bHkgdG8gcmVhZCBmcm9tIHN0cmluZ3MsIGZyb20gZmlsZXMsIGFuZCBmcm9tXG4gICAgIGZ1bmN0aW9ucywgc2luY2UgaW4gdGhvc2UgY2FzZXMsIGFsbG9jYXRpbmcgdHdvIGJ1ZmZlcnMgcmVhZGluZyBmcm9tIHRoZVxuICAgICBzYW1lIHNvdXJjZSBpcyB1bm5hdHVyYWwuXG5cbiAgICAgU3RpbGwsIHRoZXJlIGlzIGEgZGlmZmljdWx0eSBpbiB0aGUgY2FzZSBvZiBzY2FubmluZyBmcm9tIGFuIGlucHV0XG4gICAgIGNoYW5uZWwuIEluIGVmZmVjdCwgd2hlbiBzY2FubmluZyBmcm9tIGFuIGlucHV0IGNoYW5uZWwgW2ljXSwgdGhpcyBjaGFubmVsXG4gICAgIG1heSBub3QgaGF2ZSBiZWVuIGFsbG9jYXRlZCBmcm9tIHdpdGhpbiB0aGlzIGxpYnJhcnkuIEhlbmNlLCBpdCBtYXkgYmVcbiAgICAgc2hhcmVkICh0d28gZnVuY3Rpb25zIG9mIHRoZSB1c2VyJ3MgcHJvZ3JhbSBtYXkgc3VjY2Vzc2l2ZWx5IHJlYWQgZnJvbVxuICAgICBbaWNdKS4gVGhpcyBpcyBoaWdobHkgZXJyb3IgcHJvbmUgc2luY2UsIG9uZSBvZiB0aGUgZnVuY3Rpb24gbWF5IHNlZWsgdGhlXG4gICAgIGlucHV0IGNoYW5uZWwsIHdoaWxlIHRoZSBvdGhlciBmdW5jdGlvbiBoYXMgc3RpbGwgYW4gdW51c2VkIGxvb2thaGVhZFxuICAgICBjaGFyYWN0ZXIgaW4gaXRzIGlucHV0IGJ1ZmZlci4gSW4gY29uY2x1c2lvbiwgeW91IHNob3VsZCBuZXZlciBtaXggZGlyZWN0XG4gICAgIGxvdyBsZXZlbCByZWFkaW5nIGFuZCBoaWdoIGxldmVsIHNjYW5uaW5nIGZyb20gdGhlIHNhbWUgaW5wdXQgY2hhbm5lbC5cblxuICAqKVxuXG4gICgqIFBlcmZvcm0gYnVmZmVyaXplZCBpbnB1dCB0byBpbXByb3ZlIGVmZmljaWVuY3kuICopXG4gIGxldCBmaWxlX2J1ZmZlcl9zaXplID0gcmVmIDEwMjRcblxuICAoKiBUaGUgc2Nhbm5lciBjbG9zZXMgdGhlIGlucHV0IGNoYW5uZWwgYXQgZW5kIG9mIGlucHV0LiAqKVxuICBsZXQgc2Nhbl9jbG9zZV9hdF9lbmQgaWMgPSBTdGRsaWIuY2xvc2VfaW4gaWM7IHJhaXNlIEVuZF9vZl9maWxlXG5cbiAgKCogVGhlIHNjYW5uZXIgZG9lcyBub3QgY2xvc2UgdGhlIGlucHV0IGNoYW5uZWwgYXQgZW5kIG9mIGlucHV0OlxuICAgICBpdCBqdXN0IHJhaXNlcyBbRW5kX29mX2ZpbGVdLiAqKVxuICBsZXQgc2Nhbl9yYWlzZV9hdF9lbmQgX2ljID0gcmFpc2UgRW5kX29mX2ZpbGVcblxuICBsZXQgZnJvbV9pYyBzY2FuX2Nsb3NlX2ljIGluYW1lIGljID1cbiAgICBsZXQgbGVuID0gIWZpbGVfYnVmZmVyX3NpemUgaW5cbiAgICBsZXQgYnVmID0gQnl0ZXMuY3JlYXRlIGxlbiBpblxuICAgIGxldCBpID0gcmVmIDAgaW5cbiAgICBsZXQgbGltID0gcmVmIDAgaW5cbiAgICBsZXQgZW9mID0gcmVmIGZhbHNlIGluXG4gICAgbGV0IG5leHQgKCkgPVxuICAgICAgaWYgIWkgPCAhbGltIHRoZW4gYmVnaW4gbGV0IGMgPSBCeXRlcy5nZXQgYnVmICFpIGluIGluY3IgaTsgYyBlbmQgZWxzZVxuICAgICAgaWYgIWVvZiB0aGVuIHJhaXNlIEVuZF9vZl9maWxlIGVsc2UgYmVnaW5cbiAgICAgICAgbGltIDo9IGlucHV0IGljIGJ1ZiAwIGxlbjtcbiAgICAgICAgaWYgIWxpbSA9IDAgdGhlbiBiZWdpbiBlb2YgOj0gdHJ1ZTsgc2Nhbl9jbG9zZV9pYyBpYyBlbmQgZWxzZSBiZWdpblxuICAgICAgICAgIGkgOj0gMTtcbiAgICAgICAgICBCeXRlcy5nZXQgYnVmIDBcbiAgICAgICAgZW5kXG4gICAgICBlbmQgaW5cbiAgICBjcmVhdGUgaW5hbWUgbmV4dFxuXG5cbiAgbGV0IGZyb21faWNfY2xvc2VfYXRfZW5kID0gZnJvbV9pYyBzY2FuX2Nsb3NlX2F0X2VuZFxuICBsZXQgZnJvbV9pY19yYWlzZV9hdF9lbmQgPSBmcm9tX2ljIHNjYW5fcmFpc2VfYXRfZW5kXG5cbiAgKCogVGhlIHNjYW5uaW5nIGJ1ZmZlciByZWFkaW5nIGZyb20gW1N0ZGxpYi5zdGRpbl0uXG4gICAgIE9uZSBjb3VsZCB0cnkgdG8gZGVmaW5lIFtzdGRpYl0gYXMgYSBzY2FubmluZyBidWZmZXIgcmVhZGluZyBhIGNoYXJhY3RlclxuICAgICBhdCBhIHRpbWUgKG5vIGJ1ZmZlcml6YXRpb24gYXQgYWxsKSwgYnV0IHVuZm9ydHVuYXRlbHkgdGhlIHRvcC1sZXZlbFxuICAgICBpbnRlcmFjdGlvbiB3b3VsZCBiZSB3cm9uZy4gVGhpcyBpcyBkdWUgdG8gc29tZSBraW5kIG9mXG4gICAgICdyYWNlIGNvbmRpdGlvbicgd2hlbiByZWFkaW5nIGZyb20gW1N0ZGxpYi5zdGRpbl0sXG4gICAgIHNpbmNlIHRoZSBpbnRlcmFjdGl2ZSBjb21waWxlciBhbmQgW1NjYW5mLnNjYW5mXSB3aWxsIHNpbXVsdGFuZW91c2x5XG4gICAgIHJlYWQgdGhlIG1hdGVyaWFsIHRoZXkgbmVlZCBmcm9tIFtTdGRsaWIuc3RkaW5dOyB0aGVuLCBjb25mdXNpb25cbiAgICAgd2lsbCByZXN1bHQgZnJvbSB3aGF0IHNob3VsZCBiZSByZWFkIGJ5IHRoZSB0b3AtbGV2ZWwgYW5kIHdoYXQgc2hvdWxkIGJlXG4gICAgIHJlYWQgYnkgW1NjYW5mLnNjYW5mXS5cbiAgICAgVGhpcyBpcyBldmVuIG1vcmUgY29tcGxpY2F0ZWQgYnkgdGhlIG9uZSBjaGFyYWN0ZXIgbG9va2FoZWFkIHRoYXRcbiAgICAgW1NjYW5mLnNjYW5mXSBpcyBzb21ldGltZXMgb2JsaWdlZCB0byBtYWludGFpbjogdGhlIGxvb2thaGVhZCBjaGFyYWN0ZXJcbiAgICAgd2lsbCBiZSBhdmFpbGFibGUgZm9yIHRoZSBuZXh0IFtTY2FuZi5zY2FuZl0gZW50cnksIHNlZW1pbmdseSBjb21pbmcgZnJvbVxuICAgICBub3doZXJlLlxuICAgICBBbHNvIG5vIFtFbmRfb2ZfZmlsZV0gaXMgcmFpc2VkIHdoZW4gcmVhZGluZyBmcm9tIHN0ZGluOiBpZiBub3QgZW5vdWdoXG4gICAgIGNoYXJhY3RlcnMgaGF2ZSBiZWVuIHJlYWQsIHdlIHNpbXBseSBhc2sgdG8gcmVhZCBtb3JlLiAqKVxuICBsZXQgc3RkaW4gPVxuICAgIGZyb21faWMgc2Nhbl9yYWlzZV9hdF9lbmRcbiAgICAgIChGcm9tX2ZpbGUgKFwiLVwiLCBTdGRsaWIuc3RkaW4pKSBTdGRsaWIuc3RkaW5cblxuXG4gIGxldCBzdGRpYiA9IHN0ZGluXG5cbiAgbGV0IG9wZW5faW5fZmlsZSBvcGVuX2luIGZuYW1lID1cbiAgICBtYXRjaCBmbmFtZSB3aXRoXG4gICAgfCBcIi1cIiAtPiBzdGRpblxuICAgIHwgZm5hbWUgLT5cbiAgICAgIGxldCBpYyA9IG9wZW5faW4gZm5hbWUgaW5cbiAgICAgIGZyb21faWNfY2xvc2VfYXRfZW5kIChGcm9tX2ZpbGUgKGZuYW1lLCBpYykpIGljXG5cblxuICBsZXQgb3Blbl9pbiA9IG9wZW5faW5fZmlsZSBTdGRsaWIub3Blbl9pblxuICBsZXQgb3Blbl9pbl9iaW4gPSBvcGVuX2luX2ZpbGUgU3RkbGliLm9wZW5faW5fYmluXG5cbiAgbGV0IGZyb21fZmlsZSA9IG9wZW5faW5cbiAgbGV0IGZyb21fZmlsZV9iaW4gPSBvcGVuX2luX2JpblxuXG4gIGxldCBmcm9tX2NoYW5uZWwgaWMgPVxuICAgIGZyb21faWNfcmFpc2VfYXRfZW5kIChGcm9tX2NoYW5uZWwgaWMpIGljXG5cblxuICBsZXQgY2xvc2VfaW4gaWIgPVxuICAgIG1hdGNoIGliLmljX2lucHV0X25hbWUgd2l0aFxuICAgIHwgRnJvbV9jaGFubmVsIGljIC0+XG4gICAgICBTdGRsaWIuY2xvc2VfaW4gaWNcbiAgICB8IEZyb21fZmlsZSAoX2ZuYW1lLCBpYykgLT4gU3RkbGliLmNsb3NlX2luIGljXG4gICAgfCBGcm9tX2Z1bmN0aW9uIHwgRnJvbV9zdHJpbmcgLT4gKClcblxuXG4gICgqXG4gICAgIE9ic29sZXRlOiBhIG1lbW8gW2Zyb21fY2hhbm5lbF0gdmVyc2lvbiB0byBidWlsZCBhIFtTY2FubmluZy5pbl9jaGFubmVsXVxuICAgICBzY2FubmluZyBidWZmZXIgb3V0IG9mIGEgW1N0ZGxpYi5pbl9jaGFubmVsXS5cbiAgICAgVGhpcyBmdW5jdGlvbiB3YXMgdXNlZCB0byB0cnkgdG8gcHJlc2VydmUgdGhlIHNjYW5uaW5nXG4gICAgIHNlbWFudGljcyBmb3IgdGhlIChub3cgb2Jzb2xldGUpIGZ1bmN0aW9uIFtmc2NhbmZdLlxuICAgICBHaXZlbiB0aGF0IGFsbCBzY2FubmVyIG11c3QgcmVhZCBmcm9tIGEgW1NjYW5uaW5nLmluX2NoYW5uZWxdIHNjYW5uaW5nXG4gICAgIGJ1ZmZlciwgW2ZzY2FuZl0gbXVzdCByZWFkIGZyb20gb25lIVxuICAgICBNb3JlIHByZWNpc2VseSwgZ2l2ZW4gW2ljXSwgYWxsIHN1Y2Nlc3NpdmUgY2FsbHMgW2ZzY2FuZiBpY10gbXVzdCByZWFkXG4gICAgIGZyb20gdGhlIHNhbWUgc2Nhbm5pbmcgYnVmZmVyLlxuICAgICBUaGlzIG9ibGlnZWQgdGhpcyBsaWJyYXJ5IHRvIGFsbG9jYXRlZCBzY2FubmluZyBidWZmZXJzIHRoYXQgd2VyZVxuICAgICBub3QgcHJvcGVybHkgZ2FyYmFnZSBjb2xsZWN0YWJsZSwgaGVuY2UgbGVhZGluZyB0byBtZW1vcnkgbGVha3MuXG4gICAgIElmIHlvdSBuZWVkIHRvIHJlYWQgZnJvbSBhIFtTdGRsaWIuaW5fY2hhbm5lbF0gaW5wdXQgY2hhbm5lbFxuICAgICBbaWNdLCBzaW1wbHkgZGVmaW5lIGEgW1NjYW5uaW5nLmluX2NoYW5uZWxdIGZvcm1hdHRlZCBpbnB1dCBjaGFubmVsIGFzIGluXG4gICAgIFtsZXQgaWIgPSBTY2FubmluZy5mcm9tX2NoYW5uZWwgaWNdLCB0aGVuIHVzZSBbU2NhbmYuYnNjYW5mIGliXSBhcyB1c3VhbC5cbiAgKilcbiAgbGV0IG1lbW9fZnJvbV9pYyA9XG4gICAgbGV0IG1lbW8gPSByZWYgW10gaW5cbiAgICAoZnVuIHNjYW5fY2xvc2VfaWMgaWMgLT5cbiAgICAgdHJ5IExpc3QuYXNzcSBpYyAhbWVtbyB3aXRoXG4gICAgIHwgTm90X2ZvdW5kIC0+XG4gICAgICAgbGV0IGliID1cbiAgICAgICAgIGZyb21faWMgc2Nhbl9jbG9zZV9pYyAoRnJvbV9jaGFubmVsIGljKSBpYyBpblxuICAgICAgIG1lbW8gOj0gKGljLCBpYikgOjogIW1lbW87XG4gICAgICAgaWIpXG5cblxuICAoKiBPYnNvbGV0ZTogc2VlIHshbWVtb19mcm9tX2ljfSBhYm92ZS4gKilcbiAgbGV0IG1lbW9fZnJvbV9jaGFubmVsID0gbWVtb19mcm9tX2ljIHNjYW5fcmFpc2VfYXRfZW5kXG5cbmVuZFxuXG5cbigqIEZvcm1hdHRlZCBpbnB1dCBmdW5jdGlvbnMuICopXG5cbnR5cGUgKCdhLCAnYiwgJ2MsICdkKSBzY2FubmVyID1cbiAgICAgKCdhLCBTY2FubmluZy5pbl9jaGFubmVsLCAnYiwgJ2MsICdhIC0+ICdkLCAnZCkgZm9ybWF0NiAtPiAnY1xuXG5cbigqIFJlcG9ydGluZyBlcnJvcnMuICopXG5leGNlcHRpb24gU2Nhbl9mYWlsdXJlIG9mIHN0cmluZ1xuXG5sZXQgYmFkX2lucHV0IHMgPSByYWlzZSAoU2Nhbl9mYWlsdXJlIHMpXG5cbmxldCBiYWRfaW5wdXRfZXNjYXBlIGMgPVxuICBiYWRfaW5wdXQgKFByaW50Zi5zcHJpbnRmIFwiaWxsZWdhbCBlc2NhcGUgY2hhcmFjdGVyICVDXCIgYylcblxuXG5sZXQgYmFkX3Rva2VuX2xlbmd0aCBtZXNzYWdlID1cbiAgYmFkX2lucHV0XG4gICAgKFByaW50Zi5zcHJpbnRmXG4gICAgICAgXCJzY2FubmluZyBvZiAlcyBmYWlsZWQ6IFxcXG4gICAgICAgIHRoZSBzcGVjaWZpZWQgbGVuZ3RoIHdhcyB0b28gc2hvcnQgZm9yIHRva2VuXCJcbiAgICAgICBtZXNzYWdlKVxuXG5cbmxldCBiYWRfZW5kX29mX2lucHV0IG1lc3NhZ2UgPVxuICBiYWRfaW5wdXRcbiAgICAoUHJpbnRmLnNwcmludGZcbiAgICAgICBcInNjYW5uaW5nIG9mICVzIGZhaWxlZDogXFxcbiAgICAgICAgcHJlbWF0dXJlIGVuZCBvZiBmaWxlIG9jY3VycmVkIGJlZm9yZSBlbmQgb2YgdG9rZW5cIlxuICAgICAgIG1lc3NhZ2UpXG5cblxubGV0IGJhZF9mbG9hdCAoKSA9XG4gIGJhZF9pbnB1dCBcIm5vIGRvdCBvciBleHBvbmVudCBwYXJ0IGZvdW5kIGluIGZsb2F0IHRva2VuXCJcblxuXG5sZXQgYmFkX2hleF9mbG9hdCAoKSA9XG4gIGJhZF9pbnB1dCBcIm5vdCBhIHZhbGlkIGZsb2F0IGluIGhleGFkZWNpbWFsIG5vdGF0aW9uXCJcblxuXG5sZXQgY2hhcmFjdGVyX21pc21hdGNoX2VyciBjIGNpID1cbiAgUHJpbnRmLnNwcmludGYgXCJsb29raW5nIGZvciAlQywgZm91bmQgJUNcIiBjIGNpXG5cblxubGV0IGNoYXJhY3Rlcl9taXNtYXRjaCBjIGNpID1cbiAgYmFkX2lucHV0IChjaGFyYWN0ZXJfbWlzbWF0Y2hfZXJyIGMgY2kpXG5cblxubGV0IHJlYyBza2lwX3doaXRlcyBpYiA9XG4gIGxldCBjID0gU2Nhbm5pbmcucGVla19jaGFyIGliIGluXG4gIGlmIG5vdCAoU2Nhbm5pbmcuZW9mIGliKSB0aGVuIGJlZ2luXG4gICAgbWF0Y2ggYyB3aXRoXG4gICAgfCAnICcgfCAnXFx0JyB8ICdcXG4nIHwgJ1xccicgLT5cbiAgICAgIFNjYW5uaW5nLmludmFsaWRhdGVfY3VycmVudF9jaGFyIGliOyBza2lwX3doaXRlcyBpYlxuICAgIHwgXyAtPiAoKVxuICBlbmRcblxuXG4oKiBDaGVja2luZyB0aGF0IFtjXSBpcyBpbmRlZWQgaW4gdGhlIGlucHV0LCB0aGVuIHNraXBzIGl0LlxuICAgSW4gdGhpcyBjYXNlLCB0aGUgY2hhcmFjdGVyIFtjXSBoYXMgYmVlbiBleHBsaWNpdGx5IHNwZWNpZmllZCBpbiB0aGVcbiAgIGZvcm1hdCBhcyBiZWluZyBtYW5kYXRvcnkgaW4gdGhlIGlucHV0OyBoZW5jZSB3ZSBzaG91bGQgZmFpbCB3aXRoXG4gICBbRW5kX29mX2ZpbGVdIGluIGNhc2Ugb2YgZW5kX29mX2lucHV0LlxuICAgKFJlbWVtYmVyIHRoYXQgW1NjYW5fZmFpbHVyZV0gaXMgcmFpc2VkIG9ubHkgd2hlbiAod2UgY2FuIHByb3ZlIGJ5XG4gICBldmlkZW5jZSkgdGhhdCB0aGUgaW5wdXQgZG9lcyBub3QgbWF0Y2ggdGhlIGZvcm1hdCBzdHJpbmcgZ2l2ZW4uIFdlIG11c3RcbiAgIHRodXMgZGlmZmVyZW50aWF0ZSBbRW5kX29mX2ZpbGVdIGFzIGFuIGVycm9yIGR1ZSB0byBsYWNrIG9mIGlucHV0LCBhbmRcbiAgIFtTY2FuX2ZhaWx1cmVdIHdoaWNoIGlzIGR1ZSB0byBwcm92YWJseSB3cm9uZyBpbnB1dC4gSSBhbSBub3Qgc3VyZSB0aGlzIGlzXG4gICB3b3J0aCB0aGUgYnVyZGVuOiBpdCBpcyBjb21wbGV4IGFuZCBzb21laG93IHN1YmxpbWluYWw7IHNob3VsZCBiZSBjbGVhcmVyXG4gICB0byBmYWlsIHdpdGggU2Nhbl9mYWlsdXJlIFwiTm90IGVub3VnaCBpbnB1dCB0byBjb21wbGV0ZSBzY2FubmluZ1wiISlcblxuICAgVGhhdCdzIHdoeSwgd2FpdGluZyBmb3IgYSBiZXR0ZXIgc29sdXRpb24sIHdlIHVzZSBjaGVja2VkX3BlZWtfY2hhciBoZXJlLlxuICAgV2UgYXJlIGFsc28gY2FyZWZ1bCB0byB0cmVhdCBcIlxcclxcblwiIGluIHRoZSBpbnB1dCBhcyBhbiBlbmQgb2YgbGluZSBtYXJrZXI6XG4gICBpdCBhbHdheXMgbWF0Y2hlcyBhICdcXG4nIHNwZWNpZmljYXRpb24gaW4gdGhlIGlucHV0IGZvcm1hdCBzdHJpbmcuICopXG5sZXQgcmVjIGNoZWNrX2NoYXIgaWIgYyA9XG4gIG1hdGNoIGMgd2l0aFxuICB8ICcgJyAtPiBza2lwX3doaXRlcyBpYlxuICB8ICdcXG4nIC0+IGNoZWNrX25ld2xpbmUgaWJcbiAgfCBjIC0+IGNoZWNrX3RoaXNfY2hhciBpYiBjXG5cbmFuZCBjaGVja190aGlzX2NoYXIgaWIgYyA9XG4gIGxldCBjaSA9IFNjYW5uaW5nLmNoZWNrZWRfcGVla19jaGFyIGliIGluXG4gIGlmIGNpID0gYyB0aGVuIFNjYW5uaW5nLmludmFsaWRhdGVfY3VycmVudF9jaGFyIGliIGVsc2VcbiAgY2hhcmFjdGVyX21pc21hdGNoIGMgY2lcblxuYW5kIGNoZWNrX25ld2xpbmUgaWIgPVxuICBsZXQgY2kgPSBTY2FubmluZy5jaGVja2VkX3BlZWtfY2hhciBpYiBpblxuICBtYXRjaCBjaSB3aXRoXG4gIHwgJ1xcbicgLT4gU2Nhbm5pbmcuaW52YWxpZGF0ZV9jdXJyZW50X2NoYXIgaWJcbiAgfCAnXFxyJyAtPiBTY2FubmluZy5pbnZhbGlkYXRlX2N1cnJlbnRfY2hhciBpYjsgY2hlY2tfdGhpc19jaGFyIGliICdcXG4nXG4gIHwgXyAtPiBjaGFyYWN0ZXJfbWlzbWF0Y2ggJ1xcbicgY2lcblxuXG4oKiBFeHRyYWN0aW5nIHRva2VucyBmcm9tIHRoZSBvdXRwdXQgdG9rZW4gYnVmZmVyLiAqKVxuXG5sZXQgdG9rZW5fY2hhciBpYiA9IChTY2FubmluZy50b2tlbiBpYikuWzBdXG5cbmxldCB0b2tlbl9zdHJpbmcgPSBTY2FubmluZy50b2tlblxuXG5sZXQgdG9rZW5fYm9vbCBpYiA9XG4gIG1hdGNoIFNjYW5uaW5nLnRva2VuIGliIHdpdGhcbiAgfCBcInRydWVcIiAtPiB0cnVlXG4gIHwgXCJmYWxzZVwiIC0+IGZhbHNlXG4gIHwgcyAtPiBiYWRfaW5wdXQgKFByaW50Zi5zcHJpbnRmIFwiaW52YWxpZCBib29sZWFuICclcydcIiBzKVxuXG5cbigqIFRoZSB0eXBlIG9mIGludGVnZXIgY29udmVyc2lvbnMuICopXG50eXBlIGludGVnZXJfY29udmVyc2lvbiA9XG4gIHwgQl9jb252ZXJzaW9uICgqIFVuc2lnbmVkIGJpbmFyeSBjb252ZXJzaW9uICopXG4gIHwgRF9jb252ZXJzaW9uICgqIFNpZ25lZCBkZWNpbWFsIGNvbnZlcnNpb24gKilcbiAgfCBJX2NvbnZlcnNpb24gKCogU2lnbmVkIGludGVnZXIgY29udmVyc2lvbiAqKVxuICB8IE9fY29udmVyc2lvbiAoKiBVbnNpZ25lZCBvY3RhbCBjb252ZXJzaW9uICopXG4gIHwgVV9jb252ZXJzaW9uICgqIFVuc2lnbmVkIGRlY2ltYWwgY29udmVyc2lvbiAqKVxuICB8IFhfY29udmVyc2lvbiAoKiBVbnNpZ25lZCBoZXhhZGVjaW1hbCBjb252ZXJzaW9uICopXG5cblxubGV0IGludGVnZXJfY29udmVyc2lvbl9vZl9jaGFyID0gZnVuY3Rpb25cbiAgfCAnYicgLT4gQl9jb252ZXJzaW9uXG4gIHwgJ2QnIC0+IERfY29udmVyc2lvblxuICB8ICdpJyAtPiBJX2NvbnZlcnNpb25cbiAgfCAnbycgLT4gT19jb252ZXJzaW9uXG4gIHwgJ3UnIC0+IFVfY29udmVyc2lvblxuICB8ICd4JyB8ICdYJyAtPiBYX2NvbnZlcnNpb25cbiAgfCBfIC0+IGFzc2VydCBmYWxzZVxuXG5cbigqIEV4dHJhY3QgYW4gaW50ZWdlciBsaXRlcmFsIHRva2VuLlxuICAgU2luY2UgdGhlIGZ1bmN0aW9ucyBTdGRsaWIuKmludCpfb2Zfc3RyaW5nIGRvIG5vdCBhY2NlcHQgYSBsZWFkaW5nICssXG4gICB3ZSBza2lwIGl0IGlmIG5lY2Vzc2FyeS4gKilcbmxldCB0b2tlbl9pbnRfbGl0ZXJhbCBjb252IGliID1cbiAgbGV0IHRvayA9XG4gICAgbWF0Y2ggY29udiB3aXRoXG4gICAgfCBEX2NvbnZlcnNpb24gfCBJX2NvbnZlcnNpb24gLT4gU2Nhbm5pbmcudG9rZW4gaWJcbiAgICB8IFVfY29udmVyc2lvbiAtPiBcIjB1XCIgXiBTY2FubmluZy50b2tlbiBpYlxuICAgIHwgT19jb252ZXJzaW9uIC0+IFwiMG9cIiBeIFNjYW5uaW5nLnRva2VuIGliXG4gICAgfCBYX2NvbnZlcnNpb24gLT4gXCIweFwiIF4gU2Nhbm5pbmcudG9rZW4gaWJcbiAgICB8IEJfY29udmVyc2lvbiAtPiBcIjBiXCIgXiBTY2FubmluZy50b2tlbiBpYiBpblxuICBsZXQgbCA9IFN0cmluZy5sZW5ndGggdG9rIGluXG4gIGlmIGwgPSAwIHx8IHRvay5bMF0gPD4gJysnIHRoZW4gdG9rIGVsc2UgU3RyaW5nLnN1YiB0b2sgMSAobCAtIDEpXG5cblxuKCogQWxsIHRoZSBmdW5jdGlvbnMgdGhhdCBjb252ZXJ0IGEgc3RyaW5nIHRvIGEgbnVtYmVyIHJhaXNlIHRoZSBleGNlcHRpb25cbiAgIEZhaWx1cmUgd2hlbiB0aGUgY29udmVyc2lvbiBpcyBub3QgcG9zc2libGUuXG4gICBUaGlzIGV4Y2VwdGlvbiBpcyB0aGVuIHRyYXBwZWQgaW4gW2tzY2FuZl0uICopXG5sZXQgdG9rZW5faW50IGNvbnYgaWIgPSBpbnRfb2Zfc3RyaW5nICh0b2tlbl9pbnRfbGl0ZXJhbCBjb252IGliKVxuXG5sZXQgdG9rZW5fZmxvYXQgaWIgPSBmbG9hdF9vZl9zdHJpbmcgKFNjYW5uaW5nLnRva2VuIGliKVxuXG4oKiBUbyBzY2FuIG5hdGl2ZSBpbnRzLCBpbnQzMiBhbmQgaW50NjQgaW50ZWdlcnMuXG4gICBXZSBjYW5ub3QgYWNjZXNzIHRvIGNvbnZlcnNpb25zIHRvL2Zyb20gc3RyaW5ncyBmb3IgdGhvc2UgdHlwZXMsXG4gICBOYXRpdmVpbnQub2Zfc3RyaW5nLCBJbnQzMi5vZl9zdHJpbmcsIGFuZCBJbnQ2NC5vZl9zdHJpbmcsXG4gICBzaW5jZSB0aG9zZSBtb2R1bGVzIGFyZSBub3QgYXZhaWxhYmxlIHRvIFtTY2FuZl0uXG4gICBIb3dldmVyLCB3ZSBjYW4gYmluZCBhbmQgdXNlIHRoZSBjb3JyZXNwb25kaW5nIHByaW1pdGl2ZXMgdGhhdCBhcmVcbiAgIGF2YWlsYWJsZSBpbiB0aGUgcnVudGltZS4gKilcbmV4dGVybmFsIG5hdGl2ZWludF9vZl9zdHJpbmcgOiBzdHJpbmcgLT4gbmF0aXZlaW50XG4gID0gXCJjYW1sX25hdGl2ZWludF9vZl9zdHJpbmdcIlxuXG5leHRlcm5hbCBpbnQzMl9vZl9zdHJpbmcgOiBzdHJpbmcgLT4gaW50MzJcbiAgPSBcImNhbWxfaW50MzJfb2Zfc3RyaW5nXCJcblxuZXh0ZXJuYWwgaW50NjRfb2Zfc3RyaW5nIDogc3RyaW5nIC0+IGludDY0XG4gID0gXCJjYW1sX2ludDY0X29mX3N0cmluZ1wiXG5cblxubGV0IHRva2VuX25hdGl2ZWludCBjb252IGliID0gbmF0aXZlaW50X29mX3N0cmluZyAodG9rZW5faW50X2xpdGVyYWwgY29udiBpYilcbmxldCB0b2tlbl9pbnQzMiBjb252IGliID0gaW50MzJfb2Zfc3RyaW5nICh0b2tlbl9pbnRfbGl0ZXJhbCBjb252IGliKVxubGV0IHRva2VuX2ludDY0IGNvbnYgaWIgPSBpbnQ2NF9vZl9zdHJpbmcgKHRva2VuX2ludF9saXRlcmFsIGNvbnYgaWIpXG5cbigqIFNjYW5uaW5nIG51bWJlcnMuICopXG5cbigqIERpZ2l0cyBzY2FubmluZyBmdW5jdGlvbnMgc3VwcG9zZSB0aGF0IG9uZSBjaGFyYWN0ZXIgaGFzIGJlZW4gY2hlY2tlZCBhbmRcbiAgIGlzIGF2YWlsYWJsZSwgc2luY2UgdGhleSByZXR1cm4gYXQgZW5kIG9mIGZpbGUgd2l0aCB0aGUgY3VycmVudGx5IGZvdW5kXG4gICB0b2tlbiBzZWxlY3RlZC5cblxuICAgUHV0IGl0IGluIGFub3RoZXIgd2F5LCB0aGUgZGlnaXRzIHNjYW5uaW5nIGZ1bmN0aW9ucyBzY2FuIGZvciBhIHBvc3NpYmx5XG4gICBlbXB0eSBzZXF1ZW5jZSBvZiBkaWdpdHMsIChoZW5jZSwgYSBzdWNjZXNzZnVsIHNjYW5uaW5nIGZyb20gb25lIG9mIHRob3NlXG4gICBmdW5jdGlvbnMgZG9lcyBub3QgaW1wbHkgdGhhdCB0aGUgdG9rZW4gaXMgYSB3ZWxsLWZvcm1lZCBudW1iZXI6IHRvIGdldCBhXG4gICB0cnVlIG51bWJlciwgaXQgaXMgbWFuZGF0b3J5IHRvIGNoZWNrIHRoYXQgYXQgbGVhc3Qgb25lIHZhbGlkIGRpZ2l0IGlzXG4gICBhdmFpbGFibGUgYmVmb3JlIGNhbGxpbmcgb25lIG9mIHRoZSBkaWdpdCBzY2FubmluZyBmdW5jdGlvbnMpLiAqKVxuXG4oKiBUaGUgZGVjaW1hbCBjYXNlIGlzIHRyZWF0ZWQgZXNwZWNpYWxseSBmb3Igb3B0aW1pemF0aW9uIHB1cnBvc2VzLiAqKVxubGV0IHJlYyBzY2FuX2RlY2ltYWxfZGlnaXRfc3RhciB3aWR0aCBpYiA9XG4gIGlmIHdpZHRoID0gMCB0aGVuIHdpZHRoIGVsc2VcbiAgbGV0IGMgPSBTY2FubmluZy5wZWVrX2NoYXIgaWIgaW5cbiAgaWYgU2Nhbm5pbmcuZW9mIGliIHRoZW4gd2lkdGggZWxzZVxuICBtYXRjaCBjIHdpdGhcbiAgfCAnMCcgLi4gJzknIGFzIGMgLT5cbiAgICBsZXQgd2lkdGggPSBTY2FubmluZy5zdG9yZV9jaGFyIHdpZHRoIGliIGMgaW5cbiAgICBzY2FuX2RlY2ltYWxfZGlnaXRfc3RhciB3aWR0aCBpYlxuICB8ICdfJyAtPlxuICAgIGxldCB3aWR0aCA9IFNjYW5uaW5nLmlnbm9yZV9jaGFyIHdpZHRoIGliIGluXG4gICAgc2Nhbl9kZWNpbWFsX2RpZ2l0X3N0YXIgd2lkdGggaWJcbiAgfCBfIC0+IHdpZHRoXG5cblxubGV0IHNjYW5fZGVjaW1hbF9kaWdpdF9wbHVzIHdpZHRoIGliID1cbiAgaWYgd2lkdGggPSAwIHRoZW4gYmFkX3Rva2VuX2xlbmd0aCBcImRlY2ltYWwgZGlnaXRzXCIgZWxzZVxuICBsZXQgYyA9IFNjYW5uaW5nLmNoZWNrZWRfcGVla19jaGFyIGliIGluXG4gIG1hdGNoIGMgd2l0aFxuICB8ICcwJyAuLiAnOScgLT5cbiAgICBsZXQgd2lkdGggPSBTY2FubmluZy5zdG9yZV9jaGFyIHdpZHRoIGliIGMgaW5cbiAgICBzY2FuX2RlY2ltYWxfZGlnaXRfc3RhciB3aWR0aCBpYlxuICB8IGMgLT5cbiAgICBiYWRfaW5wdXQgKFByaW50Zi5zcHJpbnRmIFwiY2hhcmFjdGVyICVDIGlzIG5vdCBhIGRlY2ltYWwgZGlnaXRcIiBjKVxuXG5cbigqIFRvIHNjYW4gbnVtYmVycyBmcm9tIG90aGVyIGJhc2VzLCB3ZSB1c2UgYSBwcmVkaWNhdGUgYXJndW1lbnQgdG9cbiAgIHNjYW4gZGlnaXRzLiAqKVxubGV0IHNjYW5fZGlnaXRfc3RhciBkaWdpdHAgd2lkdGggaWIgPVxuICBsZXQgcmVjIHNjYW5fZGlnaXRzIHdpZHRoIGliID1cbiAgICBpZiB3aWR0aCA9IDAgdGhlbiB3aWR0aCBlbHNlXG4gICAgbGV0IGMgPSBTY2FubmluZy5wZWVrX2NoYXIgaWIgaW5cbiAgICBpZiBTY2FubmluZy5lb2YgaWIgdGhlbiB3aWR0aCBlbHNlXG4gICAgbWF0Y2ggYyB3aXRoXG4gICAgfCBjIHdoZW4gZGlnaXRwIGMgLT5cbiAgICAgIGxldCB3aWR0aCA9IFNjYW5uaW5nLnN0b3JlX2NoYXIgd2lkdGggaWIgYyBpblxuICAgICAgc2Nhbl9kaWdpdHMgd2lkdGggaWJcbiAgICB8ICdfJyAtPlxuICAgICAgbGV0IHdpZHRoID0gU2Nhbm5pbmcuaWdub3JlX2NoYXIgd2lkdGggaWIgaW5cbiAgICAgIHNjYW5fZGlnaXRzIHdpZHRoIGliXG4gICAgfCBfIC0+IHdpZHRoIGluXG4gIHNjYW5fZGlnaXRzIHdpZHRoIGliXG5cblxubGV0IHNjYW5fZGlnaXRfcGx1cyBiYXNpcyBkaWdpdHAgd2lkdGggaWIgPVxuICAoKiBFbnN1cmUgd2UgaGF2ZSBnb3QgZW5vdWdoIHdpZHRoIGxlZnQsXG4gICAgIGFuZCByZWFkIGF0IGxlYXN0IG9uZSBkaWdpdC4gKilcbiAgaWYgd2lkdGggPSAwIHRoZW4gYmFkX3Rva2VuX2xlbmd0aCBcImRpZ2l0c1wiIGVsc2VcbiAgbGV0IGMgPSBTY2FubmluZy5jaGVja2VkX3BlZWtfY2hhciBpYiBpblxuICBpZiBkaWdpdHAgYyB0aGVuXG4gICAgbGV0IHdpZHRoID0gU2Nhbm5pbmcuc3RvcmVfY2hhciB3aWR0aCBpYiBjIGluXG4gICAgc2Nhbl9kaWdpdF9zdGFyIGRpZ2l0cCB3aWR0aCBpYlxuICBlbHNlXG4gICAgYmFkX2lucHV0IChQcmludGYuc3ByaW50ZiBcImNoYXJhY3RlciAlQyBpcyBub3QgYSB2YWxpZCAlcyBkaWdpdFwiIGMgYmFzaXMpXG5cblxubGV0IGlzX2JpbmFyeV9kaWdpdCA9IGZ1bmN0aW9uXG4gIHwgJzAnIC4uICcxJyAtPiB0cnVlXG4gIHwgXyAtPiBmYWxzZVxuXG5cbmxldCBzY2FuX2JpbmFyeV9pbnQgPSBzY2FuX2RpZ2l0X3BsdXMgXCJiaW5hcnlcIiBpc19iaW5hcnlfZGlnaXRcblxubGV0IGlzX29jdGFsX2RpZ2l0ID0gZnVuY3Rpb25cbiAgfCAnMCcgLi4gJzcnIC0+IHRydWVcbiAgfCBfIC0+IGZhbHNlXG5cblxubGV0IHNjYW5fb2N0YWxfaW50ID0gc2Nhbl9kaWdpdF9wbHVzIFwib2N0YWxcIiBpc19vY3RhbF9kaWdpdFxuXG5sZXQgaXNfaGV4YV9kaWdpdCA9IGZ1bmN0aW9uXG4gIHwgJzAnIC4uICc5JyB8ICdhJyAuLiAnZicgfCAnQScgLi4gJ0YnIC0+IHRydWVcbiAgfCBfIC0+IGZhbHNlXG5cblxubGV0IHNjYW5faGV4YWRlY2ltYWxfaW50ID0gc2Nhbl9kaWdpdF9wbHVzIFwiaGV4YWRlY2ltYWxcIiBpc19oZXhhX2RpZ2l0XG5cbigqIFNjYW4gYSBkZWNpbWFsIGludGVnZXIuICopXG5sZXQgc2Nhbl91bnNpZ25lZF9kZWNpbWFsX2ludCA9IHNjYW5fZGVjaW1hbF9kaWdpdF9wbHVzXG5cbmxldCBzY2FuX3NpZ24gd2lkdGggaWIgPVxuICBsZXQgYyA9IFNjYW5uaW5nLmNoZWNrZWRfcGVla19jaGFyIGliIGluXG4gIG1hdGNoIGMgd2l0aFxuICB8ICcrJyAtPiBTY2FubmluZy5zdG9yZV9jaGFyIHdpZHRoIGliIGNcbiAgfCAnLScgLT4gU2Nhbm5pbmcuc3RvcmVfY2hhciB3aWR0aCBpYiBjXG4gIHwgXyAtPiB3aWR0aFxuXG5cbmxldCBzY2FuX29wdGlvbmFsbHlfc2lnbmVkX2RlY2ltYWxfaW50IHdpZHRoIGliID1cbiAgbGV0IHdpZHRoID0gc2Nhbl9zaWduIHdpZHRoIGliIGluXG4gIHNjYW5fdW5zaWduZWRfZGVjaW1hbF9pbnQgd2lkdGggaWJcblxuXG4oKiBTY2FuIGFuIHVuc2lnbmVkIGludGVnZXIgdGhhdCBjb3VsZCBiZSBnaXZlbiBpbiBhbnkgKGNvbW1vbikgYmFzaXMuXG4gICBJZiBkaWdpdHMgYXJlIHByZWZpeGVkIGJ5IG9uZSBvZiAweCwgMFgsIDBvLCBvciAwYiwgdGhlIG51bWJlciBpc1xuICAgYXNzdW1lZCB0byBiZSB3cml0dGVuIHJlc3BlY3RpdmVseSBpbiBoZXhhZGVjaW1hbCwgaGV4YWRlY2ltYWwsXG4gICBvY3RhbCwgb3IgYmluYXJ5LiAqKVxubGV0IHNjYW5fdW5zaWduZWRfaW50IHdpZHRoIGliID1cbiAgbWF0Y2ggU2Nhbm5pbmcuY2hlY2tlZF9wZWVrX2NoYXIgaWIgd2l0aFxuICB8ICcwJyBhcyBjIC0+XG4gICAgbGV0IHdpZHRoID0gU2Nhbm5pbmcuc3RvcmVfY2hhciB3aWR0aCBpYiBjIGluXG4gICAgaWYgd2lkdGggPSAwIHRoZW4gd2lkdGggZWxzZVxuICAgIGxldCBjID0gU2Nhbm5pbmcucGVla19jaGFyIGliIGluXG4gICAgaWYgU2Nhbm5pbmcuZW9mIGliIHRoZW4gd2lkdGggZWxzZVxuICAgIGJlZ2luIG1hdGNoIGMgd2l0aFxuICAgIHwgJ3gnIHwgJ1gnIC0+IHNjYW5faGV4YWRlY2ltYWxfaW50IChTY2FubmluZy5zdG9yZV9jaGFyIHdpZHRoIGliIGMpIGliXG4gICAgfCAnbycgLT4gc2Nhbl9vY3RhbF9pbnQgKFNjYW5uaW5nLnN0b3JlX2NoYXIgd2lkdGggaWIgYykgaWJcbiAgICB8ICdiJyAtPiBzY2FuX2JpbmFyeV9pbnQgKFNjYW5uaW5nLnN0b3JlX2NoYXIgd2lkdGggaWIgYykgaWJcbiAgICB8IF8gLT4gc2Nhbl9kZWNpbWFsX2RpZ2l0X3N0YXIgd2lkdGggaWIgZW5kXG4gIHwgXyAtPiBzY2FuX3Vuc2lnbmVkX2RlY2ltYWxfaW50IHdpZHRoIGliXG5cblxubGV0IHNjYW5fb3B0aW9uYWxseV9zaWduZWRfaW50IHdpZHRoIGliID1cbiAgbGV0IHdpZHRoID0gc2Nhbl9zaWduIHdpZHRoIGliIGluXG4gIHNjYW5fdW5zaWduZWRfaW50IHdpZHRoIGliXG5cblxubGV0IHNjYW5faW50X2NvbnZlcnNpb24gY29udiB3aWR0aCBpYiA9XG4gIG1hdGNoIGNvbnYgd2l0aFxuICB8IEJfY29udmVyc2lvbiAtPiBzY2FuX2JpbmFyeV9pbnQgd2lkdGggaWJcbiAgfCBEX2NvbnZlcnNpb24gLT4gc2Nhbl9vcHRpb25hbGx5X3NpZ25lZF9kZWNpbWFsX2ludCB3aWR0aCBpYlxuICB8IElfY29udmVyc2lvbiAtPiBzY2FuX29wdGlvbmFsbHlfc2lnbmVkX2ludCB3aWR0aCBpYlxuICB8IE9fY29udmVyc2lvbiAtPiBzY2FuX29jdGFsX2ludCB3aWR0aCBpYlxuICB8IFVfY29udmVyc2lvbiAtPiBzY2FuX3Vuc2lnbmVkX2RlY2ltYWxfaW50IHdpZHRoIGliXG4gIHwgWF9jb252ZXJzaW9uIC0+IHNjYW5faGV4YWRlY2ltYWxfaW50IHdpZHRoIGliXG5cblxuKCogU2Nhbm5pbmcgZmxvYXRpbmcgcG9pbnQgbnVtYmVycy4gKilcblxuKCogRnJhY3Rpb25hbCBwYXJ0IGlzIG9wdGlvbmFsIGFuZCBjYW4gYmUgcmVkdWNlZCB0byAwIGRpZ2l0cy4gKilcbmxldCBzY2FuX2ZyYWN0aW9uYWxfcGFydCB3aWR0aCBpYiA9XG4gIGlmIHdpZHRoID0gMCB0aGVuIHdpZHRoIGVsc2VcbiAgbGV0IGMgPSBTY2FubmluZy5wZWVrX2NoYXIgaWIgaW5cbiAgaWYgU2Nhbm5pbmcuZW9mIGliIHRoZW4gd2lkdGggZWxzZVxuICBtYXRjaCBjIHdpdGhcbiAgfCAnMCcgLi4gJzknIGFzIGMgLT5cbiAgICBzY2FuX2RlY2ltYWxfZGlnaXRfc3RhciAoU2Nhbm5pbmcuc3RvcmVfY2hhciB3aWR0aCBpYiBjKSBpYlxuICB8IF8gLT4gd2lkdGhcblxuXG4oKiBFeHAgcGFydCBpcyBvcHRpb25hbCBhbmQgY2FuIGJlIHJlZHVjZWQgdG8gMCBkaWdpdHMuICopXG5sZXQgc2Nhbl9leHBvbmVudF9wYXJ0IHdpZHRoIGliID1cbiAgaWYgd2lkdGggPSAwIHRoZW4gd2lkdGggZWxzZVxuICBsZXQgYyA9IFNjYW5uaW5nLnBlZWtfY2hhciBpYiBpblxuICBpZiBTY2FubmluZy5lb2YgaWIgdGhlbiB3aWR0aCBlbHNlXG4gIG1hdGNoIGMgd2l0aFxuICB8ICdlJyB8ICdFJyBhcyBjIC0+XG4gICAgc2Nhbl9vcHRpb25hbGx5X3NpZ25lZF9kZWNpbWFsX2ludCAoU2Nhbm5pbmcuc3RvcmVfY2hhciB3aWR0aCBpYiBjKSBpYlxuICB8IF8gLT4gd2lkdGhcblxuXG4oKiBTY2FuIHRoZSBpbnRlZ2VyIHBhcnQgb2YgYSBmbG9hdGluZyBwb2ludCBudW1iZXIsIChub3QgdXNpbmcgdGhlXG4gICBPQ2FtbCBsZXhpY2FsIGNvbnZlbnRpb24gc2luY2UgdGhlIGludGVnZXIgcGFydCBjYW4gYmUgZW1wdHkpOlxuICAgYW4gb3B0aW9uYWwgc2lnbiwgZm9sbG93ZWQgYnkgYSBwb3NzaWJseSBlbXB0eSBzZXF1ZW5jZSBvZiBkZWNpbWFsXG4gICBkaWdpdHMgKGUuZy4gLS4xKS4gKilcbmxldCBzY2FuX2ludGVnZXJfcGFydCB3aWR0aCBpYiA9XG4gIGxldCB3aWR0aCA9IHNjYW5fc2lnbiB3aWR0aCBpYiBpblxuICBzY2FuX2RlY2ltYWxfZGlnaXRfc3RhciB3aWR0aCBpYlxuXG5cbigqXG4gICBGb3IgdGhlIHRpbWUgYmVpbmcgd2UgaGF2ZSAoYXMgZm91bmQgaW4gc2NhbmYubWxpKTpcbiAgIHRoZSBmaWVsZCB3aWR0aCBpcyBjb21wb3NlZCBvZiBhbiBvcHRpb25hbCBpbnRlZ2VyIGxpdGVyYWxcbiAgIGluZGljYXRpbmcgdGhlIG1heGltYWwgd2lkdGggb2YgdGhlIHRva2VuIHRvIHJlYWQuXG4gICBVbmZvcnR1bmF0ZWx5LCB0aGUgdHlwZS1jaGVja2VyIGxldCB0aGUgdXNlciB3cml0ZSBhbiBvcHRpb25hbCBwcmVjaXNpb24sXG4gICBzaW5jZSB0aGlzIGlzIHZhbGlkIGZvciBwcmludGYgZm9ybWF0IHN0cmluZ3MuXG5cbiAgIFRodXMsIHRoZSBuZXh0IHN0ZXAgZm9yIFNjYW5mIGlzIHRvIHN1cHBvcnQgYSBmdWxsIHdpZHRoIGFuZCBwcmVjaXNpb25cbiAgIGluZGljYXRpb24sIG1vcmUgb3IgbGVzcyBzaW1pbGFyIHRvIHRoZSBvbmUgZm9yIHByaW50ZiwgcG9zc2libHkgZXh0ZW5kZWRcbiAgIHRvIHRoZSBzcGVjaWZpY2F0aW9uIG9mIGEgW21heCwgbWluXSByYW5nZSBmb3IgdGhlIHdpZHRoIG9mIHRoZSB0b2tlbiByZWFkXG4gICBmb3Igc3RyaW5ncy4gU29tZXRoaW5nIGxpa2UgdGhlIGZvbGxvd2luZyBzcGVjIGZvciBzY2FuZi5tbGk6XG5cbiAgIFRoZSBvcHRpb25hbCBbd2lkdGhdIGlzIGFuIGludGVnZXIgaW5kaWNhdGluZyB0aGUgbWF4aW1hbFxuICAgd2lkdGggb2YgdGhlIHRva2VuIHJlYWQuIEZvciBpbnN0YW5jZSwgWyU2ZF0gcmVhZHMgYW4gaW50ZWdlcixcbiAgIGhhdmluZyBhdCBtb3N0IDYgY2hhcmFjdGVycy5cblxuICAgVGhlIG9wdGlvbmFsIFtwcmVjaXNpb25dIGlzIGEgZG90IFsuXSBmb2xsb3dlZCBieSBhbiBpbnRlZ2VyOlxuXG4gICAtIGluIHRoZSBmbG9hdGluZyBwb2ludCBudW1iZXIgY29udmVyc2lvbnMgKFslZl0sIFslZV0sIFslZ10sIFslRl0sIFslRV0sXG4gICBhbmQgWyVGXSBjb252ZXJzaW9ucywgdGhlIFtwcmVjaXNpb25dIGluZGljYXRlcyB0aGUgbWF4aW11bSBudW1iZXIgb2ZcbiAgIGRpZ2l0cyB0aGF0IG1heSBmb2xsb3cgdGhlIGRlY2ltYWwgcG9pbnQuIEZvciBpbnN0YW5jZSwgWyUuNGZdIHJlYWRzIGFcbiAgIFtmbG9hdF0gd2l0aCBhdCBtb3N0IDQgZnJhY3Rpb25hbCBkaWdpdHMsXG5cbiAgIC0gaW4gdGhlIHN0cmluZyBjb252ZXJzaW9ucyAoWyVzXSwgWyVTXSwgWyVcXFsgcmFuZ2UgXFxdXSksIGFuZCBpbiB0aGVcbiAgIGludGVnZXIgbnVtYmVyIGNvbnZlcnNpb25zIChbJWldLCBbJWRdLCBbJXVdLCBbJXhdLCBbJW9dLCBhbmQgdGhlaXJcbiAgIFtpbnQzMl0sIFtpbnQ2NF0sIGFuZCBbbmF0aXZlX2ludF0gY29ycmVzcG9uZGVudCksIHRoZSBbcHJlY2lzaW9uXVxuICAgaW5kaWNhdGVzIHRoZSByZXF1aXJlZCBtaW5pbXVtIHdpZHRoIG9mIHRoZSB0b2tlbiByZWFkLFxuXG4gICAtIG9uIGFsbCBvdGhlciBjb252ZXJzaW9ucywgdGhlIHdpZHRoIGFuZCBwcmVjaXNpb24gc3BlY2lmeSB0aGUgW21heCwgbWluXVxuICAgcmFuZ2UgZm9yIHRoZSB3aWR0aCBvZiB0aGUgdG9rZW4gcmVhZC5cbiopXG5sZXQgc2Nhbl9mbG9hdCB3aWR0aCBwcmVjaXNpb24gaWIgPVxuICBsZXQgd2lkdGggPSBzY2FuX2ludGVnZXJfcGFydCB3aWR0aCBpYiBpblxuICBpZiB3aWR0aCA9IDAgdGhlbiB3aWR0aCwgcHJlY2lzaW9uIGVsc2VcbiAgbGV0IGMgPSBTY2FubmluZy5wZWVrX2NoYXIgaWIgaW5cbiAgaWYgU2Nhbm5pbmcuZW9mIGliIHRoZW4gd2lkdGgsIHByZWNpc2lvbiBlbHNlXG4gIG1hdGNoIGMgd2l0aFxuICB8ICcuJyAtPlxuICAgIGxldCB3aWR0aCA9IFNjYW5uaW5nLnN0b3JlX2NoYXIgd2lkdGggaWIgYyBpblxuICAgIGxldCBwcmVjaXNpb24gPSBJbnQubWluIHdpZHRoIHByZWNpc2lvbiBpblxuICAgIGxldCB3aWR0aCA9IHdpZHRoIC0gKHByZWNpc2lvbiAtIHNjYW5fZnJhY3Rpb25hbF9wYXJ0IHByZWNpc2lvbiBpYikgaW5cbiAgICBzY2FuX2V4cG9uZW50X3BhcnQgd2lkdGggaWIsIHByZWNpc2lvblxuICB8IF8gLT5cbiAgICBzY2FuX2V4cG9uZW50X3BhcnQgd2lkdGggaWIsIHByZWNpc2lvblxuXG5cbmxldCBjaGVja19jYXNlX2luc2Vuc2l0aXZlX3N0cmluZyB3aWR0aCBpYiBlcnJvciBzdHIgPVxuICBsZXQgbG93ZXJjYXNlIGMgPVxuICAgIG1hdGNoIGMgd2l0aFxuICAgIHwgJ0EnIC4uICdaJyAtPlxuICAgICAgY2hhcl9vZl9pbnQgKGludF9vZl9jaGFyIGMgLSBpbnRfb2ZfY2hhciAnQScgKyBpbnRfb2ZfY2hhciAnYScpXG4gICAgfCBfIC0+IGMgaW5cbiAgbGV0IGxlbiA9IFN0cmluZy5sZW5ndGggc3RyIGluXG4gIGxldCB3aWR0aCA9IHJlZiB3aWR0aCBpblxuICBmb3IgaSA9IDAgdG8gbGVuIC0gMSBkb1xuICAgIGxldCBjID0gU2Nhbm5pbmcucGVla19jaGFyIGliIGluXG4gICAgaWYgbG93ZXJjYXNlIGMgPD4gbG93ZXJjYXNlIHN0ci5baV0gdGhlbiBlcnJvciAoKTtcbiAgICBpZiAhd2lkdGggPSAwIHRoZW4gZXJyb3IgKCk7XG4gICAgd2lkdGggOj0gU2Nhbm5pbmcuc3RvcmVfY2hhciAhd2lkdGggaWIgYztcbiAgZG9uZTtcbiAgIXdpZHRoXG5cblxubGV0IHNjYW5faGV4X2Zsb2F0IHdpZHRoIHByZWNpc2lvbiBpYiA9XG4gIGlmIHdpZHRoID0gMCB8fCBTY2FubmluZy5lbmRfb2ZfaW5wdXQgaWIgdGhlbiBiYWRfaGV4X2Zsb2F0ICgpO1xuICBsZXQgd2lkdGggPSBzY2FuX3NpZ24gd2lkdGggaWIgaW5cbiAgaWYgd2lkdGggPSAwIHx8IFNjYW5uaW5nLmVuZF9vZl9pbnB1dCBpYiB0aGVuIGJhZF9oZXhfZmxvYXQgKCk7XG4gIG1hdGNoIFNjYW5uaW5nLnBlZWtfY2hhciBpYiB3aXRoXG4gIHwgJzAnIGFzIGMgLT4gKFxuICAgIGxldCB3aWR0aCA9IFNjYW5uaW5nLnN0b3JlX2NoYXIgd2lkdGggaWIgYyBpblxuICAgIGlmIHdpZHRoID0gMCB8fCBTY2FubmluZy5lbmRfb2ZfaW5wdXQgaWIgdGhlbiBiYWRfaGV4X2Zsb2F0ICgpO1xuICAgIGxldCB3aWR0aCA9IGNoZWNrX2Nhc2VfaW5zZW5zaXRpdmVfc3RyaW5nIHdpZHRoIGliIGJhZF9oZXhfZmxvYXQgXCJ4XCIgaW5cbiAgICBpZiB3aWR0aCA9IDAgfHwgU2Nhbm5pbmcuZW5kX29mX2lucHV0IGliIHRoZW4gd2lkdGggZWxzZVxuICAgICAgbGV0IHdpZHRoID0gbWF0Y2ggU2Nhbm5pbmcucGVla19jaGFyIGliIHdpdGhcbiAgICAgICAgfCAnLicgfCAncCcgfCAnUCcgLT4gd2lkdGhcbiAgICAgICAgfCBfIC0+IHNjYW5faGV4YWRlY2ltYWxfaW50IHdpZHRoIGliIGluXG4gICAgICBpZiB3aWR0aCA9IDAgfHwgU2Nhbm5pbmcuZW5kX29mX2lucHV0IGliIHRoZW4gd2lkdGggZWxzZVxuICAgICAgICBsZXQgd2lkdGggPSBtYXRjaCBTY2FubmluZy5wZWVrX2NoYXIgaWIgd2l0aFxuICAgICAgICAgIHwgJy4nIGFzIGMgLT4gKFxuICAgICAgICAgICAgbGV0IHdpZHRoID0gU2Nhbm5pbmcuc3RvcmVfY2hhciB3aWR0aCBpYiBjIGluXG4gICAgICAgICAgICBpZiB3aWR0aCA9IDAgfHwgU2Nhbm5pbmcuZW5kX29mX2lucHV0IGliIHRoZW4gd2lkdGggZWxzZVxuICAgICAgICAgICAgICBtYXRjaCBTY2FubmluZy5wZWVrX2NoYXIgaWIgd2l0aFxuICAgICAgICAgICAgICB8ICdwJyB8ICdQJyAtPiB3aWR0aFxuICAgICAgICAgICAgICB8IF8gLT5cbiAgICAgICAgICAgICAgICBsZXQgcHJlY2lzaW9uID0gSW50Lm1pbiB3aWR0aCBwcmVjaXNpb24gaW5cbiAgICAgICAgICAgICAgICB3aWR0aCAtIChwcmVjaXNpb24gLSBzY2FuX2hleGFkZWNpbWFsX2ludCBwcmVjaXNpb24gaWIpXG4gICAgICAgICAgKVxuICAgICAgICAgIHwgXyAtPiB3aWR0aCBpblxuICAgICAgICBpZiB3aWR0aCA9IDAgfHwgU2Nhbm5pbmcuZW5kX29mX2lucHV0IGliIHRoZW4gd2lkdGggZWxzZVxuICAgICAgICAgIG1hdGNoIFNjYW5uaW5nLnBlZWtfY2hhciBpYiB3aXRoXG4gICAgICAgICAgfCAncCcgfCAnUCcgYXMgYyAtPlxuICAgICAgICAgICAgbGV0IHdpZHRoID0gU2Nhbm5pbmcuc3RvcmVfY2hhciB3aWR0aCBpYiBjIGluXG4gICAgICAgICAgICBpZiB3aWR0aCA9IDAgfHwgU2Nhbm5pbmcuZW5kX29mX2lucHV0IGliIHRoZW4gYmFkX2hleF9mbG9hdCAoKTtcbiAgICAgICAgICAgIHNjYW5fb3B0aW9uYWxseV9zaWduZWRfZGVjaW1hbF9pbnQgd2lkdGggaWJcbiAgICAgICAgICB8IF8gLT4gd2lkdGhcbiAgKVxuICB8ICduJyB8ICdOJyBhcyBjIC0+XG4gICAgbGV0IHdpZHRoID0gU2Nhbm5pbmcuc3RvcmVfY2hhciB3aWR0aCBpYiBjIGluXG4gICAgaWYgd2lkdGggPSAwIHx8IFNjYW5uaW5nLmVuZF9vZl9pbnB1dCBpYiB0aGVuIGJhZF9oZXhfZmxvYXQgKCk7XG4gICAgY2hlY2tfY2FzZV9pbnNlbnNpdGl2ZV9zdHJpbmcgd2lkdGggaWIgYmFkX2hleF9mbG9hdCBcImFuXCJcbiAgfCAnaScgfCAnSScgYXMgYyAtPlxuICAgIGxldCB3aWR0aCA9IFNjYW5uaW5nLnN0b3JlX2NoYXIgd2lkdGggaWIgYyBpblxuICAgIGlmIHdpZHRoID0gMCB8fCBTY2FubmluZy5lbmRfb2ZfaW5wdXQgaWIgdGhlbiBiYWRfaGV4X2Zsb2F0ICgpO1xuICAgIGNoZWNrX2Nhc2VfaW5zZW5zaXRpdmVfc3RyaW5nIHdpZHRoIGliIGJhZF9oZXhfZmxvYXQgXCJuZmluaXR5XCJcbiAgfCBfIC0+IGJhZF9oZXhfZmxvYXQgKClcblxuXG5sZXQgc2Nhbl9jYW1sX2Zsb2F0X3Jlc3Qgd2lkdGggcHJlY2lzaW9uIGliID1cbiAgaWYgd2lkdGggPSAwIHx8IFNjYW5uaW5nLmVuZF9vZl9pbnB1dCBpYiB0aGVuIGJhZF9mbG9hdCAoKTtcbiAgbGV0IHdpZHRoID0gc2Nhbl9kZWNpbWFsX2RpZ2l0X3N0YXIgd2lkdGggaWIgaW5cbiAgaWYgd2lkdGggPSAwIHx8IFNjYW5uaW5nLmVuZF9vZl9pbnB1dCBpYiB0aGVuIGJhZF9mbG9hdCAoKTtcbiAgbGV0IGMgPSBTY2FubmluZy5wZWVrX2NoYXIgaWIgaW5cbiAgbWF0Y2ggYyB3aXRoXG4gIHwgJy4nIC0+XG4gICAgbGV0IHdpZHRoID0gU2Nhbm5pbmcuc3RvcmVfY2hhciB3aWR0aCBpYiBjIGluXG4gICAgKCogVGhlIGVmZmVjdGl2ZSB3aWR0aCBhdmFpbGFibGUgZm9yIHNjYW5uaW5nIHRoZSBmcmFjdGlvbmFsIHBhcnQgaXNcbiAgICAgICB0aGUgbWluaW11bSBvZiBkZWNsYXJlZCBwcmVjaXNpb24gYW5kIHdpZHRoIGxlZnQuICopXG4gICAgbGV0IHByZWNpc2lvbiA9IEludC5taW4gd2lkdGggcHJlY2lzaW9uIGluXG4gICAgKCogQWZ0ZXIgc2Nhbm5pbmcgdGhlIGZyYWN0aW9uYWwgcGFydCB3aXRoIFtwcmVjaXNpb25dIHByb3Zpc2lvbmFsIHdpZHRoLFxuICAgICAgIFt3aWR0aF9wcmVjaXNpb25dIGlzIGxlZnQuICopXG4gICAgbGV0IHdpZHRoX3ByZWNpc2lvbiA9IHNjYW5fZnJhY3Rpb25hbF9wYXJ0IHByZWNpc2lvbiBpYiBpblxuICAgICgqIEhlbmNlLCBzY2FubmluZyB0aGUgZnJhY3Rpb25hbCBwYXJ0IHRvb2sgZXhhY3RseVxuICAgICAgIFtwcmVjaXNpb24gLSB3aWR0aF9wcmVjaXNpb25dIGNoYXJzLiAqKVxuICAgIGxldCBmcmFjX3dpZHRoID0gcHJlY2lzaW9uIC0gd2lkdGhfcHJlY2lzaW9uIGluXG4gICAgKCogQW5kIG5ldyBwcm92aXNpb25hbCB3aWR0aCBpcyBbd2lkdGggLSB3aWR0aF9wcmVjaXNpb24uICopXG4gICAgbGV0IHdpZHRoID0gd2lkdGggLSBmcmFjX3dpZHRoIGluXG4gICAgc2Nhbl9leHBvbmVudF9wYXJ0IHdpZHRoIGliXG4gIHwgJ2UnIHwgJ0UnIC0+XG4gICAgc2Nhbl9leHBvbmVudF9wYXJ0IHdpZHRoIGliXG4gIHwgXyAtPiBiYWRfZmxvYXQgKClcblxuXG5sZXQgc2Nhbl9jYW1sX2Zsb2F0IHdpZHRoIHByZWNpc2lvbiBpYiA9XG4gIGlmIHdpZHRoID0gMCB8fCBTY2FubmluZy5lbmRfb2ZfaW5wdXQgaWIgdGhlbiBiYWRfZmxvYXQgKCk7XG4gIGxldCB3aWR0aCA9IHNjYW5fc2lnbiB3aWR0aCBpYiBpblxuICBpZiB3aWR0aCA9IDAgfHwgU2Nhbm5pbmcuZW5kX29mX2lucHV0IGliIHRoZW4gYmFkX2Zsb2F0ICgpO1xuICBtYXRjaCBTY2FubmluZy5wZWVrX2NoYXIgaWIgd2l0aFxuICB8ICcwJyBhcyBjIC0+IChcbiAgICBsZXQgd2lkdGggPSBTY2FubmluZy5zdG9yZV9jaGFyIHdpZHRoIGliIGMgaW5cbiAgICBpZiB3aWR0aCA9IDAgfHwgU2Nhbm5pbmcuZW5kX29mX2lucHV0IGliIHRoZW4gYmFkX2Zsb2F0ICgpO1xuICAgIG1hdGNoIFNjYW5uaW5nLnBlZWtfY2hhciBpYiB3aXRoXG4gICAgfCAneCcgfCAnWCcgYXMgYyAtPiAoXG4gICAgICBsZXQgd2lkdGggPSBTY2FubmluZy5zdG9yZV9jaGFyIHdpZHRoIGliIGMgaW5cbiAgICAgIGlmIHdpZHRoID0gMCB8fCBTY2FubmluZy5lbmRfb2ZfaW5wdXQgaWIgdGhlbiBiYWRfZmxvYXQgKCk7XG4gICAgICBsZXQgd2lkdGggPSBzY2FuX2hleGFkZWNpbWFsX2ludCB3aWR0aCBpYiBpblxuICAgICAgaWYgd2lkdGggPSAwIHx8IFNjYW5uaW5nLmVuZF9vZl9pbnB1dCBpYiB0aGVuIGJhZF9mbG9hdCAoKTtcbiAgICAgIGxldCB3aWR0aCA9IG1hdGNoIFNjYW5uaW5nLnBlZWtfY2hhciBpYiB3aXRoXG4gICAgICAgIHwgJy4nIGFzIGMgLT4gKFxuICAgICAgICAgIGxldCB3aWR0aCA9IFNjYW5uaW5nLnN0b3JlX2NoYXIgd2lkdGggaWIgYyBpblxuICAgICAgICAgIGlmIHdpZHRoID0gMCB8fCBTY2FubmluZy5lbmRfb2ZfaW5wdXQgaWIgdGhlbiB3aWR0aCBlbHNlXG4gICAgICAgICAgICBtYXRjaCBTY2FubmluZy5wZWVrX2NoYXIgaWIgd2l0aFxuICAgICAgICAgICAgfCAncCcgfCAnUCcgLT4gd2lkdGhcbiAgICAgICAgICAgIHwgXyAtPlxuICAgICAgICAgICAgICBsZXQgcHJlY2lzaW9uID0gSW50Lm1pbiB3aWR0aCBwcmVjaXNpb24gaW5cbiAgICAgICAgICAgICAgd2lkdGggLSAocHJlY2lzaW9uIC0gc2Nhbl9oZXhhZGVjaW1hbF9pbnQgcHJlY2lzaW9uIGliKVxuICAgICAgICApXG4gICAgICAgIHwgJ3AnIHwgJ1AnIC0+IHdpZHRoXG4gICAgICAgIHwgXyAtPiBiYWRfZmxvYXQgKCkgaW5cbiAgICAgIGlmIHdpZHRoID0gMCB8fCBTY2FubmluZy5lbmRfb2ZfaW5wdXQgaWIgdGhlbiB3aWR0aCBlbHNlXG4gICAgICAgIG1hdGNoIFNjYW5uaW5nLnBlZWtfY2hhciBpYiB3aXRoXG4gICAgICAgIHwgJ3AnIHwgJ1AnIGFzIGMgLT5cbiAgICAgICAgICBsZXQgd2lkdGggPSBTY2FubmluZy5zdG9yZV9jaGFyIHdpZHRoIGliIGMgaW5cbiAgICAgICAgICBpZiB3aWR0aCA9IDAgfHwgU2Nhbm5pbmcuZW5kX29mX2lucHV0IGliIHRoZW4gYmFkX2hleF9mbG9hdCAoKTtcbiAgICAgICAgICBzY2FuX29wdGlvbmFsbHlfc2lnbmVkX2RlY2ltYWxfaW50IHdpZHRoIGliXG4gICAgICAgIHwgXyAtPiB3aWR0aFxuICAgIClcbiAgICB8IF8gLT5cbiAgICAgIHNjYW5fY2FtbF9mbG9hdF9yZXN0IHdpZHRoIHByZWNpc2lvbiBpYlxuICApXG4gIHwgJzEnIC4uICc5JyBhcyBjIC0+XG4gICAgbGV0IHdpZHRoID0gU2Nhbm5pbmcuc3RvcmVfY2hhciB3aWR0aCBpYiBjIGluXG4gICAgaWYgd2lkdGggPSAwIHx8IFNjYW5uaW5nLmVuZF9vZl9pbnB1dCBpYiB0aGVuIGJhZF9mbG9hdCAoKTtcbiAgICBzY2FuX2NhbWxfZmxvYXRfcmVzdCB3aWR0aCBwcmVjaXNpb24gaWJcbigqIFNwZWNpYWwgY2FzZSBvZiBuYW4gYW5kIGluZmluaXR5OlxuICB8ICdpJyAtPlxuICB8ICduJyAtPlxuKilcbiAgfCBfIC0+IGJhZF9mbG9hdCAoKVxuXG5cbigqIFNjYW4gYSByZWd1bGFyIHN0cmluZzpcbiAgIHN0b3BzIHdoZW4gZW5jb3VudGVyaW5nIGEgc3BhY2UsIGlmIG5vIHNjYW5uaW5nIGluZGljYXRpb24gaGFzIGJlZW4gZ2l2ZW47XG4gICBvdGhlcndpc2UsIHN0b3BzIHdoZW4gZW5jb3VudGVyaW5nIHRoZSBjaGFyYWN0ZXJzIGluIHRoZSBzY2FubmluZ1xuICAgaW5kaWNhdGlvbiBbc3RwXS5cbiAgIEl0IGFsc28gc3RvcHMgYXQgZW5kIG9mIGZpbGUgb3Igd2hlbiB0aGUgbWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyBoYXNcbiAgIGJlZW4gcmVhZC4gKilcbmxldCBzY2FuX3N0cmluZyBzdHAgd2lkdGggaWIgPVxuICBsZXQgcmVjIGxvb3Agd2lkdGggPVxuICAgIGlmIHdpZHRoID0gMCB0aGVuIHdpZHRoIGVsc2VcbiAgICBsZXQgYyA9IFNjYW5uaW5nLnBlZWtfY2hhciBpYiBpblxuICAgIGlmIFNjYW5uaW5nLmVvZiBpYiB0aGVuIHdpZHRoIGVsc2VcbiAgICAgIG1hdGNoIHN0cCB3aXRoXG4gICAgICB8IFNvbWUgYycgd2hlbiBjID0gYycgLT4gU2Nhbm5pbmcuc2tpcF9jaGFyIHdpZHRoIGliXG4gICAgICB8IFNvbWUgXyAtPiBsb29wIChTY2FubmluZy5zdG9yZV9jaGFyIHdpZHRoIGliIGMpXG4gICAgICB8IE5vbmUgLT5cbiAgICAgICAgbWF0Y2ggYyB3aXRoXG4gICAgICAgIHwgJyAnIHwgJ1xcdCcgfCAnXFxuJyB8ICdcXHInIC0+IHdpZHRoXG4gICAgICAgIHwgXyAtPiBsb29wIChTY2FubmluZy5zdG9yZV9jaGFyIHdpZHRoIGliIGMpIGluXG4gIGxvb3Agd2lkdGhcblxuXG4oKiBTY2FuIGEgY2hhcjogcGVlayBzdHJpY3RseSBvbmUgY2hhcmFjdGVyIGluIHRoZSBpbnB1dCwgd2hhdHNvZXZlci4gKilcbmxldCBzY2FuX2NoYXIgd2lkdGggaWIgPVxuICAoKiBUaGUgY2FzZSB3aWR0aCA9IDAgY291bGQgbm90IGhhcHBlbiBoZXJlLCBzaW5jZSBpdCBpcyB0ZXN0ZWQgYmVmb3JlXG4gICAgIGNhbGxpbmcgc2Nhbl9jaGFyLCBpbiB0aGUgbWFpbiBzY2FubmluZyBmdW5jdGlvbi5cbiAgICBpZiB3aWR0aCA9IDAgdGhlbiBiYWRfdG9rZW5fbGVuZ3RoIFwiYSBjaGFyYWN0ZXJcIiBlbHNlICopXG4gIFNjYW5uaW5nLnN0b3JlX2NoYXIgd2lkdGggaWIgKFNjYW5uaW5nLmNoZWNrZWRfcGVla19jaGFyIGliKVxuXG5cbmxldCBjaGFyX2Zvcl9iYWNrc2xhc2ggPSBmdW5jdGlvblxuICB8ICduJyAtPiAnXFwwMTAnXG4gIHwgJ3InIC0+ICdcXDAxMydcbiAgfCAnYicgLT4gJ1xcMDA4J1xuICB8ICd0JyAtPiAnXFwwMDknXG4gIHwgYyAtPiBjXG5cblxuKCogVGhlIGludGVnZXIgdmFsdWUgY29ycmVzcG9uZGluZyB0byB0aGUgZmFjaWFsIHZhbHVlIG9mIGEgdmFsaWRcbiAgIGRlY2ltYWwgZGlnaXQgY2hhcmFjdGVyLiAqKVxubGV0IGRlY2ltYWxfdmFsdWVfb2ZfY2hhciBjID0gaW50X29mX2NoYXIgYyAtIGludF9vZl9jaGFyICcwJ1xuXG5sZXQgY2hhcl9mb3JfZGVjaW1hbF9jb2RlIGMwIGMxIGMyID1cbiAgbGV0IGMgPVxuICAgIDEwMCAqIGRlY2ltYWxfdmFsdWVfb2ZfY2hhciBjMCArXG4gICAgIDEwICogZGVjaW1hbF92YWx1ZV9vZl9jaGFyIGMxICtcbiAgICAgICAgICBkZWNpbWFsX3ZhbHVlX29mX2NoYXIgYzIgaW5cbiAgaWYgYyA8IDAgfHwgYyA+IDI1NSB0aGVuXG4gICAgYmFkX2lucHV0XG4gICAgICAoUHJpbnRmLnNwcmludGZcbiAgICAgICAgIFwiYmFkIGNoYXJhY3RlciBkZWNpbWFsIGVuY29kaW5nIFxcXFwlYyVjJWNcIiBjMCBjMSBjMikgZWxzZVxuICBjaGFyX29mX2ludCBjXG5cblxuKCogVGhlIGludGVnZXIgdmFsdWUgY29ycmVzcG9uZGluZyB0byB0aGUgZmFjaWFsIHZhbHVlIG9mIGEgdmFsaWRcbiAgIGhleGFkZWNpbWFsIGRpZ2l0IGNoYXJhY3Rlci4gKilcbmxldCBoZXhhZGVjaW1hbF92YWx1ZV9vZl9jaGFyIGMgPVxuICBsZXQgZCA9IGludF9vZl9jaGFyIGMgaW5cbiAgKCogQ291bGQgYWxzbyBiZTpcbiAgICBpZiBkIDw9IGludF9vZl9jaGFyICc5JyB0aGVuIGQgLSBpbnRfb2ZfY2hhciAnMCcgZWxzZVxuICAgIGlmIGQgPD0gaW50X29mX2NoYXIgJ0YnIHRoZW4gMTAgKyBkIC0gaW50X29mX2NoYXIgJ0EnIGVsc2VcbiAgICBpZiBkIDw9IGludF9vZl9jaGFyICdmJyB0aGVuIDEwICsgZCAtIGludF9vZl9jaGFyICdhJyBlbHNlIGFzc2VydCBmYWxzZVxuICAqKVxuICBpZiBkID49IGludF9vZl9jaGFyICdhJyB0aGVuXG4gICAgZCAtIDg3ICgqIDEwICsgaW50X29mX2NoYXIgYyAtIGludF9vZl9jaGFyICdhJyAqKSBlbHNlXG4gIGlmIGQgPj0gaW50X29mX2NoYXIgJ0EnIHRoZW5cbiAgICBkIC0gNTUgICgqIDEwICsgaW50X29mX2NoYXIgYyAtIGludF9vZl9jaGFyICdBJyAqKSBlbHNlXG4gICAgZCAtIGludF9vZl9jaGFyICcwJ1xuXG5cbmxldCBjaGFyX2Zvcl9oZXhhZGVjaW1hbF9jb2RlIGMxIGMyID1cbiAgbGV0IGMgPVxuICAgIDE2ICogaGV4YWRlY2ltYWxfdmFsdWVfb2ZfY2hhciBjMSArXG4gICAgICAgICBoZXhhZGVjaW1hbF92YWx1ZV9vZl9jaGFyIGMyIGluXG4gIGlmIGMgPCAwIHx8IGMgPiAyNTUgdGhlblxuICAgIGJhZF9pbnB1dFxuICAgICAgKFByaW50Zi5zcHJpbnRmIFwiYmFkIGNoYXJhY3RlciBoZXhhZGVjaW1hbCBlbmNvZGluZyBcXFxcJWMlY1wiIGMxIGMyKSBlbHNlXG4gIGNoYXJfb2ZfaW50IGNcblxuXG4oKiBDYWxsZWQgaW4gcGFydGljdWxhciB3aGVuIGVuY291bnRlcmluZyAnXFxcXCcgYXMgc3RhcnRlciBvZiBhIGNoYXIuXG4gICBTdG9wcyBiZWZvcmUgdGhlIGNvcnJlc3BvbmRpbmcgJ1xcJycuICopXG5sZXQgY2hlY2tfbmV4dF9jaGFyIG1lc3NhZ2Ugd2lkdGggaWIgPVxuICBpZiB3aWR0aCA9IDAgdGhlbiBiYWRfdG9rZW5fbGVuZ3RoIG1lc3NhZ2UgZWxzZVxuICBsZXQgYyA9IFNjYW5uaW5nLnBlZWtfY2hhciBpYiBpblxuICBpZiBTY2FubmluZy5lb2YgaWIgdGhlbiBiYWRfZW5kX29mX2lucHV0IG1lc3NhZ2UgZWxzZVxuICBjXG5cblxubGV0IGNoZWNrX25leHRfY2hhcl9mb3JfY2hhciA9IGNoZWNrX25leHRfY2hhciBcImEgQ2hhclwiXG5sZXQgY2hlY2tfbmV4dF9jaGFyX2Zvcl9zdHJpbmcgPSBjaGVja19uZXh0X2NoYXIgXCJhIFN0cmluZ1wiXG5cbmxldCBzY2FuX2JhY2tzbGFzaF9jaGFyIHdpZHRoIGliID1cbiAgbWF0Y2ggY2hlY2tfbmV4dF9jaGFyX2Zvcl9jaGFyIHdpZHRoIGliIHdpdGhcbiAgfCAnXFxcXCcgfCAnXFwnJyB8ICdcXFwiJyB8ICduJyB8ICd0JyB8ICdiJyB8ICdyJyBhcyBjIC0+XG4gICAgU2Nhbm5pbmcuc3RvcmVfY2hhciB3aWR0aCBpYiAoY2hhcl9mb3JfYmFja3NsYXNoIGMpXG4gIHwgJzAnIC4uICc5JyBhcyBjIC0+XG4gICAgbGV0IGdldF9kaWdpdCAoKSA9XG4gICAgICBsZXQgYyA9IFNjYW5uaW5nLm5leHRfY2hhciBpYiBpblxuICAgICAgbWF0Y2ggYyB3aXRoXG4gICAgICB8ICcwJyAuLiAnOScgYXMgYyAtPiBjXG4gICAgICB8IGMgLT4gYmFkX2lucHV0X2VzY2FwZSBjIGluXG4gICAgbGV0IGMwID0gYyBpblxuICAgIGxldCBjMSA9IGdldF9kaWdpdCAoKSBpblxuICAgIGxldCBjMiA9IGdldF9kaWdpdCAoKSBpblxuICAgIFNjYW5uaW5nLnN0b3JlX2NoYXIgKHdpZHRoIC0gMikgaWIgKGNoYXJfZm9yX2RlY2ltYWxfY29kZSBjMCBjMSBjMilcbiAgfCAneCcgLT5cbiAgICBsZXQgZ2V0X2RpZ2l0ICgpID1cbiAgICAgIGxldCBjID0gU2Nhbm5pbmcubmV4dF9jaGFyIGliIGluXG4gICAgICBtYXRjaCBjIHdpdGhcbiAgICAgIHwgJzAnIC4uICc5JyB8ICdBJyAuLiAnRicgfCAnYScgLi4gJ2YnIGFzIGMgLT4gY1xuICAgICAgfCBjIC0+IGJhZF9pbnB1dF9lc2NhcGUgYyBpblxuICAgIGxldCBjMSA9IGdldF9kaWdpdCAoKSBpblxuICAgIGxldCBjMiA9IGdldF9kaWdpdCAoKSBpblxuICAgIFNjYW5uaW5nLnN0b3JlX2NoYXIgKHdpZHRoIC0gMikgaWIgKGNoYXJfZm9yX2hleGFkZWNpbWFsX2NvZGUgYzEgYzIpXG4gIHwgYyAtPlxuICAgIGJhZF9pbnB1dF9lc2NhcGUgY1xuXG5cbigqIFNjYW4gYSBjaGFyYWN0ZXIgKGFuIE9DYW1sIHRva2VuKS4gKilcbmxldCBzY2FuX2NhbWxfY2hhciB3aWR0aCBpYiA9XG5cbiAgbGV0IHJlYyBmaW5kX3N0YXJ0IHdpZHRoID1cbiAgICBtYXRjaCBTY2FubmluZy5jaGVja2VkX3BlZWtfY2hhciBpYiB3aXRoXG4gICAgfCAnXFwnJyAtPiBmaW5kX2NoYXIgKFNjYW5uaW5nLmlnbm9yZV9jaGFyIHdpZHRoIGliKVxuICAgIHwgYyAtPiBjaGFyYWN0ZXJfbWlzbWF0Y2ggJ1xcJycgY1xuXG4gIGFuZCBmaW5kX2NoYXIgd2lkdGggPVxuICAgIG1hdGNoIGNoZWNrX25leHRfY2hhcl9mb3JfY2hhciB3aWR0aCBpYiB3aXRoXG4gICAgfCAnXFxcXCcgLT5cbiAgICAgIGZpbmRfc3RvcCAoc2Nhbl9iYWNrc2xhc2hfY2hhciAoU2Nhbm5pbmcuaWdub3JlX2NoYXIgd2lkdGggaWIpIGliKVxuICAgIHwgYyAtPlxuICAgICAgZmluZF9zdG9wIChTY2FubmluZy5zdG9yZV9jaGFyIHdpZHRoIGliIGMpXG5cbiAgYW5kIGZpbmRfc3RvcCB3aWR0aCA9XG4gICAgbWF0Y2ggY2hlY2tfbmV4dF9jaGFyX2Zvcl9jaGFyIHdpZHRoIGliIHdpdGhcbiAgICB8ICdcXCcnIC0+IFNjYW5uaW5nLmlnbm9yZV9jaGFyIHdpZHRoIGliXG4gICAgfCBjIC0+IGNoYXJhY3Rlcl9taXNtYXRjaCAnXFwnJyBjIGluXG5cbiAgZmluZF9zdGFydCB3aWR0aFxuXG5cbigqIFNjYW4gYSBkZWxpbWl0ZWQgc3RyaW5nIChhbiBPQ2FtbCB0b2tlbikuICopXG5sZXQgc2Nhbl9jYW1sX3N0cmluZyB3aWR0aCBpYiA9XG5cbiAgbGV0IHJlYyBmaW5kX3N0YXJ0IHdpZHRoID1cbiAgICBtYXRjaCBTY2FubmluZy5jaGVja2VkX3BlZWtfY2hhciBpYiB3aXRoXG4gICAgfCAnXFxcIicgLT4gZmluZF9zdG9wIChTY2FubmluZy5pZ25vcmVfY2hhciB3aWR0aCBpYilcbiAgICB8IGMgLT4gY2hhcmFjdGVyX21pc21hdGNoICdcXFwiJyBjXG5cbiAgYW5kIGZpbmRfc3RvcCB3aWR0aCA9XG4gICAgbWF0Y2ggY2hlY2tfbmV4dF9jaGFyX2Zvcl9zdHJpbmcgd2lkdGggaWIgd2l0aFxuICAgIHwgJ1xcXCInIC0+IFNjYW5uaW5nLmlnbm9yZV9jaGFyIHdpZHRoIGliXG4gICAgfCAnXFxcXCcgLT4gc2Nhbl9iYWNrc2xhc2ggKFNjYW5uaW5nLmlnbm9yZV9jaGFyIHdpZHRoIGliKVxuICAgIHwgYyAtPiBmaW5kX3N0b3AgKFNjYW5uaW5nLnN0b3JlX2NoYXIgd2lkdGggaWIgYylcblxuICBhbmQgc2Nhbl9iYWNrc2xhc2ggd2lkdGggPVxuICAgIG1hdGNoIGNoZWNrX25leHRfY2hhcl9mb3Jfc3RyaW5nIHdpZHRoIGliIHdpdGhcbiAgICB8ICdcXHInIC0+IHNraXBfbmV3bGluZSAoU2Nhbm5pbmcuaWdub3JlX2NoYXIgd2lkdGggaWIpXG4gICAgfCAnXFxuJyAtPiBza2lwX3NwYWNlcyAoU2Nhbm5pbmcuaWdub3JlX2NoYXIgd2lkdGggaWIpXG4gICAgfCBfIC0+IGZpbmRfc3RvcCAoc2Nhbl9iYWNrc2xhc2hfY2hhciB3aWR0aCBpYilcblxuICBhbmQgc2tpcF9uZXdsaW5lIHdpZHRoID1cbiAgICBtYXRjaCBjaGVja19uZXh0X2NoYXJfZm9yX3N0cmluZyB3aWR0aCBpYiB3aXRoXG4gICAgfCAnXFxuJyAtPiBza2lwX3NwYWNlcyAoU2Nhbm5pbmcuaWdub3JlX2NoYXIgd2lkdGggaWIpXG4gICAgfCBfIC0+IGZpbmRfc3RvcCAoU2Nhbm5pbmcuc3RvcmVfY2hhciB3aWR0aCBpYiAnXFxyJylcblxuICBhbmQgc2tpcF9zcGFjZXMgd2lkdGggPVxuICAgIG1hdGNoIGNoZWNrX25leHRfY2hhcl9mb3Jfc3RyaW5nIHdpZHRoIGliIHdpdGhcbiAgICB8ICcgJyAtPiBza2lwX3NwYWNlcyAoU2Nhbm5pbmcuaWdub3JlX2NoYXIgd2lkdGggaWIpXG4gICAgfCBfIC0+IGZpbmRfc3RvcCB3aWR0aCBpblxuXG4gIGZpbmRfc3RhcnQgd2lkdGhcblxuXG4oKiBTY2FuIGEgYm9vbGVhbiAoYW4gT0NhbWwgdG9rZW4pLiAqKVxubGV0IHNjYW5fYm9vbCBpYiA9XG4gIGxldCBjID0gU2Nhbm5pbmcuY2hlY2tlZF9wZWVrX2NoYXIgaWIgaW5cbiAgbGV0IG0gPVxuICAgIG1hdGNoIGMgd2l0aFxuICAgIHwgJ3QnIC0+IDRcbiAgICB8ICdmJyAtPiA1XG4gICAgfCBjIC0+XG4gICAgICBiYWRfaW5wdXRcbiAgICAgICAgKFByaW50Zi5zcHJpbnRmIFwidGhlIGNoYXJhY3RlciAlQyBjYW5ub3Qgc3RhcnQgYSBib29sZWFuXCIgYykgaW5cbiAgc2Nhbl9zdHJpbmcgTm9uZSBtIGliXG5cblxuKCogU2NhbiBhIHN0cmluZyBjb250YWluaW5nIGVsZW1lbnRzIGluIGNoYXJfc2V0IGFuZCB0ZXJtaW5hdGVkIGJ5IHNjYW5faW5kaWNcbiAgIGlmIHByb3ZpZGVkLiAqKVxubGV0IHNjYW5fY2hhcnNfaW5fY2hhcl9zZXQgY2hhcl9zZXQgc2Nhbl9pbmRpYyB3aWR0aCBpYiA9XG4gIGxldCByZWMgc2Nhbl9jaGFycyBpIHN0cCA9XG4gICAgbGV0IGMgPSBTY2FubmluZy5wZWVrX2NoYXIgaWIgaW5cbiAgICBpZiBpID4gMCAmJiBub3QgKFNjYW5uaW5nLmVvZiBpYikgJiZcbiAgICAgICBpc19pbl9jaGFyX3NldCBjaGFyX3NldCBjICYmXG4gICAgICAgaW50X29mX2NoYXIgYyA8PiBzdHAgdGhlblxuICAgICAgbGV0IF8gPSBTY2FubmluZy5zdG9yZV9jaGFyIG1heF9pbnQgaWIgYyBpblxuICAgICAgc2Nhbl9jaGFycyAoaSAtIDEpIHN0cCBpblxuICBtYXRjaCBzY2FuX2luZGljIHdpdGhcbiAgfCBOb25lIC0+IHNjYW5fY2hhcnMgd2lkdGggKC0xKTtcbiAgfCBTb21lIGMgLT5cbiAgICBzY2FuX2NoYXJzIHdpZHRoIChpbnRfb2ZfY2hhciBjKTtcbiAgICBpZiBub3QgKFNjYW5uaW5nLmVvZiBpYikgdGhlblxuICAgICAgbGV0IGNpID0gU2Nhbm5pbmcucGVla19jaGFyIGliIGluXG4gICAgICBpZiBjID0gY2lcbiAgICAgIHRoZW4gU2Nhbm5pbmcuaW52YWxpZGF0ZV9jdXJyZW50X2NoYXIgaWJcbiAgICAgIGVsc2UgY2hhcmFjdGVyX21pc21hdGNoIGMgY2lcblxuXG4oKiBUaGUgZ2xvYmFsIGVycm9yIHJlcG9ydCBmdW5jdGlvbiBmb3IgW1NjYW5mXS4gKilcbmxldCBzY2FuZl9iYWRfaW5wdXQgaWIgPSBmdW5jdGlvblxuICB8IFNjYW5fZmFpbHVyZSBzIHwgRmFpbHVyZSBzIC0+XG4gICAgbGV0IGkgPSBTY2FubmluZy5jaGFyX2NvdW50IGliIGluXG4gICAgYmFkX2lucHV0IChQcmludGYuc3ByaW50ZiBcInNjYW5mOiBiYWQgaW5wdXQgYXQgY2hhciBudW1iZXIgJWk6ICVzXCIgaSBzKVxuICB8IHggLT4gcmFpc2UgeFxuXG5cbigqIEdldCB0aGUgY29udGVudCBvZiBhIGNvdW50ZXIgZnJvbSBhbiBpbnB1dCBidWZmZXIuICopXG5sZXQgZ2V0X2NvdW50ZXIgaWIgY291bnRlciA9XG4gIG1hdGNoIGNvdW50ZXIgd2l0aFxuICB8IExpbmVfY291bnRlciAtPiBTY2FubmluZy5saW5lX2NvdW50IGliXG4gIHwgQ2hhcl9jb3VudGVyIC0+IFNjYW5uaW5nLmNoYXJfY291bnQgaWJcbiAgfCBUb2tlbl9jb3VudGVyIC0+IFNjYW5uaW5nLnRva2VuX2NvdW50IGliXG5cblxuKCogQ29tcHV0ZSB0aGUgd2lkdGggb2YgYSBwYWRkaW5nIG9wdGlvbiAoc2VlIFwiJTQye1wiIGFuZCBcIiUxMjMoXCIpLiAqKVxubGV0IHdpZHRoX29mX3BhZF9vcHQgcGFkX29wdCA9IG1hdGNoIHBhZF9vcHQgd2l0aFxuICB8IE5vbmUgLT4gbWF4X2ludFxuICB8IFNvbWUgd2lkdGggLT4gd2lkdGhcblxuXG5sZXQgc3RvcHBlcl9vZl9mb3JtYXR0aW5nX2xpdCBmbXRpbmcgPVxuICBpZiBmbXRpbmcgPSBFc2NhcGVkX3BlcmNlbnQgdGhlbiAnJScsIFwiXCIgZWxzZVxuICAgIGxldCBzdHIgPSBzdHJpbmdfb2ZfZm9ybWF0dGluZ19saXQgZm10aW5nIGluXG4gICAgbGV0IHN0cCA9IHN0ci5bMV0gaW5cbiAgICBsZXQgc3ViX3N0ciA9IFN0cmluZy5zdWIgc3RyIDIgKFN0cmluZy5sZW5ndGggc3RyIC0gMikgaW5cbiAgICBzdHAsIHN1Yl9zdHJcblxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgKCogUmVhZGVyIG1hbmFnZW1lbnQgKilcblxuKCogQSBjYWxsIHRvIHRha2VfZm9ybWF0X3JlYWRlcnMgb24gYSBmb3JtYXQgaXMgZXZhbHVhdGVkIGludG8gZnVuY3Rpb25zXG4gICB0YWtpbmcgcmVhZGVycyBhcyBhcmd1bWVudHMgYW5kIGFnZ3JlZ2F0ZSB0aGVtIGludG8gYW4gaGV0ZXJvZ2VuZW91cyBsaXN0ICopXG4oKiBXaGVuIGFsbCByZWFkZXJzIGFyZSB0YWtlbiwgZmluYWxseSBwYXNzIHRoZSBsaXN0IG9mIHRoZSByZWFkZXJzIHRvIHRoZVxuICAgY29udGludWF0aW9uIGsuICopXG5sZXQgcmVjIHRha2VfZm9ybWF0X3JlYWRlcnMgOiB0eXBlIGEgYyBkIGUgZiAuXG4gICAgKChkLCBlKSBoZXRlcl9saXN0IC0+IGUpIC0+IChhLCBTY2FubmluZy5pbl9jaGFubmVsLCBjLCBkLCBlLCBmKSBmbXQgLT5cbiAgICBkID1cbmZ1biBrIGZtdCAtPiBtYXRjaCBmbXQgd2l0aFxuICB8IFJlYWRlciBmbXRfcmVzdCAtPlxuICAgIGZ1biByZWFkZXIgLT5cbiAgICAgIGxldCBuZXdfayByZWFkZXJzX3Jlc3QgPSBrIChDb25zIChyZWFkZXIsIHJlYWRlcnNfcmVzdCkpIGluXG4gICAgICB0YWtlX2Zvcm1hdF9yZWFkZXJzIG5ld19rIGZtdF9yZXN0XG4gIHwgQ2hhciByZXN0ICAgICAgICAgICAgICAgICAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIHJlc3RcbiAgfCBDYW1sX2NoYXIgcmVzdCAgICAgICAgICAgICAgICAgICAtPiB0YWtlX2Zvcm1hdF9yZWFkZXJzIGsgcmVzdFxuICB8IFN0cmluZyAoXywgcmVzdCkgICAgICAgICAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayByZXN0XG4gIHwgQ2FtbF9zdHJpbmcgKF8sIHJlc3QpICAgICAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIHJlc3RcbiAgfCBJbnQgKF8sIF8sIF8sIHJlc3QpICAgICAgICAgICAgICAtPiB0YWtlX2Zvcm1hdF9yZWFkZXJzIGsgcmVzdFxuICB8IEludDMyIChfLCBfLCBfLCByZXN0KSAgICAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayByZXN0XG4gIHwgTmF0aXZlaW50IChfLCBfLCBfLCByZXN0KSAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIHJlc3RcbiAgfCBJbnQ2NCAoXywgXywgXywgcmVzdCkgICAgICAgICAgICAtPiB0YWtlX2Zvcm1hdF9yZWFkZXJzIGsgcmVzdFxuICB8IEZsb2F0IChfLCBfLCBfLCByZXN0KSAgICAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayByZXN0XG4gIHwgQm9vbCAoXywgcmVzdCkgICAgICAgICAgICAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIHJlc3RcbiAgfCBBbHBoYSByZXN0ICAgICAgICAgICAgICAgICAgICAgICAtPiB0YWtlX2Zvcm1hdF9yZWFkZXJzIGsgcmVzdFxuICB8IFRoZXRhIHJlc3QgICAgICAgICAgICAgICAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayByZXN0XG4gIHwgRmx1c2ggcmVzdCAgICAgICAgICAgICAgICAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIHJlc3RcbiAgfCBTdHJpbmdfbGl0ZXJhbCAoXywgcmVzdCkgICAgICAgICAtPiB0YWtlX2Zvcm1hdF9yZWFkZXJzIGsgcmVzdFxuICB8IENoYXJfbGl0ZXJhbCAoXywgcmVzdCkgICAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayByZXN0XG4gIHwgQ3VzdG9tIChfLCBfLCByZXN0KSAgICAgICAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIHJlc3RcblxuICB8IFNjYW5fY2hhcl9zZXQgKF8sIF8sIHJlc3QpICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayByZXN0XG4gIHwgU2Nhbl9nZXRfY291bnRlciAoXywgcmVzdCkgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIHJlc3RcbiAgfCBTY2FuX25leHRfY2hhciByZXN0ICAgICAgICAgICAgICAtPiB0YWtlX2Zvcm1hdF9yZWFkZXJzIGsgcmVzdFxuXG4gIHwgRm9ybWF0dGluZ19saXQgKF8sIHJlc3QpICAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIHJlc3RcbiAgfCBGb3JtYXR0aW5nX2dlbiAoT3Blbl90YWcgKEZvcm1hdCAoZm10LCBfKSksIHJlc3QpIC0+XG4gICAgICB0YWtlX2Zvcm1hdF9yZWFkZXJzIGsgKGNvbmNhdF9mbXQgZm10IHJlc3QpXG4gIHwgRm9ybWF0dGluZ19nZW4gKE9wZW5fYm94IChGb3JtYXQgKGZtdCwgXykpLCByZXN0KSAtPlxuICAgICAgdGFrZV9mb3JtYXRfcmVhZGVycyBrIChjb25jYXRfZm10IGZtdCByZXN0KVxuXG4gIHwgRm9ybWF0X2FyZyAoXywgXywgcmVzdCkgICAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIHJlc3RcbiAgfCBGb3JtYXRfc3Vic3QgKF8sIGZtdHR5LCByZXN0KSAgICAtPlxuICAgICB0YWtlX2ZtdHR5X2Zvcm1hdF9yZWFkZXJzIGsgKGVyYXNlX3JlbCAoc3ltbSBmbXR0eSkpIHJlc3RcbiAgfCBJZ25vcmVkX3BhcmFtIChpZ24sIHJlc3QpICAgICAgICAtPiB0YWtlX2lnbm9yZWRfZm9ybWF0X3JlYWRlcnMgayBpZ24gcmVzdFxuXG4gIHwgRW5kX29mX2Zvcm1hdCAgICAgICAgICAgICAgICAgICAgLT4gayBOaWxcblxuKCogVGFrZSByZWFkZXJzIGFzc29jaWF0ZWQgdG8gYW4gZm10dHkgY29taW5nIGZyb20gYSBGb3JtYXRfc3Vic3QgXCIlKC4uLiUpXCIuICopXG5hbmQgdGFrZV9mbXR0eV9mb3JtYXRfcmVhZGVycyA6IHR5cGUgeCB5IGEgYyBkIGUgZiAuXG4gICAgKChkLCBlKSBoZXRlcl9saXN0IC0+IGUpIC0+IChhLCBTY2FubmluZy5pbl9jaGFubmVsLCBjLCBkLCB4LCB5KSBmbXR0eSAtPlxuICAgICAgKHksIFNjYW5uaW5nLmluX2NoYW5uZWwsIGMsIHgsIGUsIGYpIGZtdCAtPiBkID1cbmZ1biBrIGZtdHR5IGZtdCAtPiBtYXRjaCBmbXR0eSB3aXRoXG4gIHwgUmVhZGVyX3R5IGZtdF9yZXN0IC0+XG4gICAgZnVuIHJlYWRlciAtPlxuICAgICAgbGV0IG5ld19rIHJlYWRlcnNfcmVzdCA9IGsgKENvbnMgKHJlYWRlciwgcmVhZGVyc19yZXN0KSkgaW5cbiAgICAgIHRha2VfZm10dHlfZm9ybWF0X3JlYWRlcnMgbmV3X2sgZm10X3Jlc3QgZm10XG4gIHwgSWdub3JlZF9yZWFkZXJfdHkgZm10X3Jlc3QgLT5cbiAgICBmdW4gcmVhZGVyIC0+XG4gICAgICBsZXQgbmV3X2sgcmVhZGVyc19yZXN0ID0gayAoQ29ucyAocmVhZGVyLCByZWFkZXJzX3Jlc3QpKSBpblxuICAgICAgdGFrZV9mbXR0eV9mb3JtYXRfcmVhZGVycyBuZXdfayBmbXRfcmVzdCBmbXRcbiAgfCBDaGFyX3R5IHJlc3QgICAgICAgICAgICAgICAgLT4gdGFrZV9mbXR0eV9mb3JtYXRfcmVhZGVycyBrIHJlc3QgZm10XG4gIHwgU3RyaW5nX3R5IHJlc3QgICAgICAgICAgICAgIC0+IHRha2VfZm10dHlfZm9ybWF0X3JlYWRlcnMgayByZXN0IGZtdFxuICB8IEludF90eSByZXN0ICAgICAgICAgICAgICAgICAtPiB0YWtlX2ZtdHR5X2Zvcm1hdF9yZWFkZXJzIGsgcmVzdCBmbXRcbiAgfCBJbnQzMl90eSByZXN0ICAgICAgICAgICAgICAgLT4gdGFrZV9mbXR0eV9mb3JtYXRfcmVhZGVycyBrIHJlc3QgZm10XG4gIHwgTmF0aXZlaW50X3R5IHJlc3QgICAgICAgICAgIC0+IHRha2VfZm10dHlfZm9ybWF0X3JlYWRlcnMgayByZXN0IGZtdFxuICB8IEludDY0X3R5IHJlc3QgICAgICAgICAgICAgICAtPiB0YWtlX2ZtdHR5X2Zvcm1hdF9yZWFkZXJzIGsgcmVzdCBmbXRcbiAgfCBGbG9hdF90eSByZXN0ICAgICAgICAgICAgICAgLT4gdGFrZV9mbXR0eV9mb3JtYXRfcmVhZGVycyBrIHJlc3QgZm10XG4gIHwgQm9vbF90eSByZXN0ICAgICAgICAgICAgICAgIC0+IHRha2VfZm10dHlfZm9ybWF0X3JlYWRlcnMgayByZXN0IGZtdFxuICB8IEFscGhhX3R5IHJlc3QgICAgICAgICAgICAgICAtPiB0YWtlX2ZtdHR5X2Zvcm1hdF9yZWFkZXJzIGsgcmVzdCBmbXRcbiAgfCBUaGV0YV90eSByZXN0ICAgICAgICAgICAgICAgLT4gdGFrZV9mbXR0eV9mb3JtYXRfcmVhZGVycyBrIHJlc3QgZm10XG4gIHwgQW55X3R5IHJlc3QgICAgICAgICAgICAgICAgIC0+IHRha2VfZm10dHlfZm9ybWF0X3JlYWRlcnMgayByZXN0IGZtdFxuICB8IEZvcm1hdF9hcmdfdHkgKF8sIHJlc3QpICAgICAtPiB0YWtlX2ZtdHR5X2Zvcm1hdF9yZWFkZXJzIGsgcmVzdCBmbXRcbiAgfCBFbmRfb2ZfZm10dHkgICAgICAgICAgICAgICAgLT4gdGFrZV9mb3JtYXRfcmVhZGVycyBrIGZtdFxuICB8IEZvcm1hdF9zdWJzdF90eSAodHkxLCB0eTIsIHJlc3QpIC0+XG4gICAgbGV0IHR5ID0gdHJhbnMgKHN5bW0gdHkxKSB0eTIgaW5cbiAgICB0YWtlX2ZtdHR5X2Zvcm1hdF9yZWFkZXJzIGsgKGNvbmNhdF9mbXR0eSB0eSByZXN0KSBmbXRcblxuKCogVGFrZSByZWFkZXJzIGFzc29jaWF0ZWQgdG8gYW4gaWdub3JlZCBwYXJhbWV0ZXIuICopXG5hbmQgdGFrZV9pZ25vcmVkX2Zvcm1hdF9yZWFkZXJzIDogdHlwZSB4IHkgYSBjIGQgZSBmIC5cbiAgICAoKGQsIGUpIGhldGVyX2xpc3QgLT4gZSkgLT4gKGEsIFNjYW5uaW5nLmluX2NoYW5uZWwsIGMsIGQsIHgsIHkpIGlnbm9yZWQgLT5cbiAgICAgICh5LCBTY2FubmluZy5pbl9jaGFubmVsLCBjLCB4LCBlLCBmKSBmbXQgLT4gZCA9XG5mdW4gayBpZ24gZm10IC0+IG1hdGNoIGlnbiB3aXRoXG4gIHwgSWdub3JlZF9yZWFkZXIgLT5cbiAgICBmdW4gcmVhZGVyIC0+XG4gICAgICBsZXQgbmV3X2sgcmVhZGVyc19yZXN0ID0gayAoQ29ucyAocmVhZGVyLCByZWFkZXJzX3Jlc3QpKSBpblxuICAgICAgdGFrZV9mb3JtYXRfcmVhZGVycyBuZXdfayBmbXRcbiAgfCBJZ25vcmVkX2NoYXIgICAgICAgICAgICAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayBmbXRcbiAgfCBJZ25vcmVkX2NhbWxfY2hhciAgICAgICAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayBmbXRcbiAgfCBJZ25vcmVkX3N0cmluZyBfICAgICAgICAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayBmbXRcbiAgfCBJZ25vcmVkX2NhbWxfc3RyaW5nIF8gICAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayBmbXRcbiAgfCBJZ25vcmVkX2ludCAoXywgXykgICAgICAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayBmbXRcbiAgfCBJZ25vcmVkX2ludDMyIChfLCBfKSAgICAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayBmbXRcbiAgfCBJZ25vcmVkX25hdGl2ZWludCAoXywgXykgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayBmbXRcbiAgfCBJZ25vcmVkX2ludDY0IChfLCBfKSAgICAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayBmbXRcbiAgfCBJZ25vcmVkX2Zsb2F0IChfLCBfKSAgICAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayBmbXRcbiAgfCBJZ25vcmVkX2Jvb2wgXyAgICAgICAgICAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayBmbXRcbiAgfCBJZ25vcmVkX2Zvcm1hdF9hcmcgXyAgICAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayBmbXRcbiAgfCBJZ25vcmVkX2Zvcm1hdF9zdWJzdCAoXywgZm10dHkpIC0+IHRha2VfZm10dHlfZm9ybWF0X3JlYWRlcnMgayBmbXR0eSBmbXRcbiAgfCBJZ25vcmVkX3NjYW5fY2hhcl9zZXQgXyAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayBmbXRcbiAgfCBJZ25vcmVkX3NjYW5fZ2V0X2NvdW50ZXIgXyAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayBmbXRcbiAgfCBJZ25vcmVkX3NjYW5fbmV4dF9jaGFyICAgICAgICAgIC0+IHRha2VfZm9ybWF0X3JlYWRlcnMgayBmbXRcblxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKCogR2VuZXJpYyBzY2FubmluZyAqKVxuXG4oKiBNYWtlIGEgZ2VuZXJpYyBzY2FubmluZyBmdW5jdGlvbi4gKilcbigqIFNjYW4gYSBzdHJlYW0gYWNjb3JkaW5nIHRvIGEgZm9ybWF0IGFuZCByZWFkZXJzIG9idGFpbmVkIGJ5XG4gICB0YWtlX2Zvcm1hdF9yZWFkZXJzLCBhbmQgYWdncmVnYXRlIHNjYW5uZWQgdmFsdWVzIGludG8gYW5cbiAgIGhldGVyb2dlbmVvdXMgbGlzdC4gKilcbigqIFJldHVybiB0aGUgaGV0ZXJvZ2VuZW91cyBsaXN0IG9mIHNjYW5uZWQgdmFsdWVzLiAqKVxubGV0IHJlYyBtYWtlX3NjYW5mIDogdHlwZSBhIGMgZCBlIGYuXG4gICAgU2Nhbm5pbmcuaW5fY2hhbm5lbCAtPiAoYSwgU2Nhbm5pbmcuaW5fY2hhbm5lbCwgYywgZCwgZSwgZikgZm10IC0+XG4gICAgICAoZCwgZSkgaGV0ZXJfbGlzdCAtPiAoYSwgZikgaGV0ZXJfbGlzdCA9XG5mdW4gaWIgZm10IHJlYWRlcnMgLT4gbWF0Y2ggZm10IHdpdGhcbiAgfCBDaGFyIHJlc3QgLT5cbiAgICBsZXQgXyA9IHNjYW5fY2hhciAwIGliIGluXG4gICAgbGV0IGMgPSB0b2tlbl9jaGFyIGliIGluXG4gICAgQ29ucyAoYywgbWFrZV9zY2FuZiBpYiByZXN0IHJlYWRlcnMpXG4gIHwgQ2FtbF9jaGFyIHJlc3QgLT5cbiAgICBsZXQgXyA9IHNjYW5fY2FtbF9jaGFyIDAgaWIgaW5cbiAgICBsZXQgYyA9IHRva2VuX2NoYXIgaWIgaW5cbiAgICBDb25zIChjLCBtYWtlX3NjYW5mIGliIHJlc3QgcmVhZGVycylcblxuICB8IFN0cmluZyAocGFkLCBGb3JtYXR0aW5nX2xpdCAoZm10aW5nX2xpdCwgcmVzdCkpIC0+XG4gICAgbGV0IHN0cCwgc3RyID0gc3RvcHBlcl9vZl9mb3JtYXR0aW5nX2xpdCBmbXRpbmdfbGl0IGluXG4gICAgbGV0IHNjYW4gd2lkdGggXyBpYiA9IHNjYW5fc3RyaW5nIChTb21lIHN0cCkgd2lkdGggaWIgaW5cbiAgICBsZXQgc3RyX3Jlc3QgPSBTdHJpbmdfbGl0ZXJhbCAoc3RyLCByZXN0KSBpblxuICAgIHBhZF9wcmVjX3NjYW5mIGliIHN0cl9yZXN0IHJlYWRlcnMgcGFkIE5vX3ByZWNpc2lvbiBzY2FuIHRva2VuX3N0cmluZ1xuICB8IFN0cmluZyAocGFkLCBGb3JtYXR0aW5nX2dlbiAoT3Blbl90YWcgKEZvcm1hdCAoZm10JywgXykpLCByZXN0KSkgLT5cbiAgICBsZXQgc2NhbiB3aWR0aCBfIGliID0gc2Nhbl9zdHJpbmcgKFNvbWUgJ3snKSB3aWR0aCBpYiBpblxuICAgIHBhZF9wcmVjX3NjYW5mIGliIChjb25jYXRfZm10IGZtdCcgcmVzdCkgcmVhZGVycyBwYWQgTm9fcHJlY2lzaW9uIHNjYW5cbiAgICAgICAgICAgICAgICAgICB0b2tlbl9zdHJpbmdcbiAgfCBTdHJpbmcgKHBhZCwgRm9ybWF0dGluZ19nZW4gKE9wZW5fYm94IChGb3JtYXQgKGZtdCcsIF8pKSwgcmVzdCkpIC0+XG4gICAgbGV0IHNjYW4gd2lkdGggXyBpYiA9IHNjYW5fc3RyaW5nIChTb21lICdbJykgd2lkdGggaWIgaW5cbiAgICBwYWRfcHJlY19zY2FuZiBpYiAoY29uY2F0X2ZtdCBmbXQnIHJlc3QpIHJlYWRlcnMgcGFkIE5vX3ByZWNpc2lvbiBzY2FuXG4gICAgICAgICAgICAgICAgICAgdG9rZW5fc3RyaW5nXG4gIHwgU3RyaW5nIChwYWQsIHJlc3QpIC0+XG4gICAgbGV0IHNjYW4gd2lkdGggXyBpYiA9IHNjYW5fc3RyaW5nIE5vbmUgd2lkdGggaWIgaW5cbiAgICBwYWRfcHJlY19zY2FuZiBpYiByZXN0IHJlYWRlcnMgcGFkIE5vX3ByZWNpc2lvbiBzY2FuIHRva2VuX3N0cmluZ1xuXG4gIHwgQ2FtbF9zdHJpbmcgKHBhZCwgcmVzdCkgLT5cbiAgICBsZXQgc2NhbiB3aWR0aCBfIGliID0gc2Nhbl9jYW1sX3N0cmluZyB3aWR0aCBpYiBpblxuICAgIHBhZF9wcmVjX3NjYW5mIGliIHJlc3QgcmVhZGVycyBwYWQgTm9fcHJlY2lzaW9uIHNjYW4gdG9rZW5fc3RyaW5nXG4gIHwgSW50IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIGxldCBjID0gaW50ZWdlcl9jb252ZXJzaW9uX29mX2NoYXIgKGNoYXJfb2ZfaWNvbnYgaWNvbnYpIGluXG4gICAgbGV0IHNjYW4gd2lkdGggXyBpYiA9IHNjYW5faW50X2NvbnZlcnNpb24gYyB3aWR0aCBpYiBpblxuICAgIHBhZF9wcmVjX3NjYW5mIGliIHJlc3QgcmVhZGVycyBwYWQgcHJlYyBzY2FuICh0b2tlbl9pbnQgYylcbiAgfCBJbnQzMiAoaWNvbnYsIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBsZXQgYyA9IGludGVnZXJfY29udmVyc2lvbl9vZl9jaGFyIChjaGFyX29mX2ljb252IGljb252KSBpblxuICAgIGxldCBzY2FuIHdpZHRoIF8gaWIgPSBzY2FuX2ludF9jb252ZXJzaW9uIGMgd2lkdGggaWIgaW5cbiAgICBwYWRfcHJlY19zY2FuZiBpYiByZXN0IHJlYWRlcnMgcGFkIHByZWMgc2NhbiAodG9rZW5faW50MzIgYylcbiAgfCBOYXRpdmVpbnQgKGljb252LCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgbGV0IGMgPSBpbnRlZ2VyX2NvbnZlcnNpb25fb2ZfY2hhciAoY2hhcl9vZl9pY29udiBpY29udikgaW5cbiAgICBsZXQgc2NhbiB3aWR0aCBfIGliID0gc2Nhbl9pbnRfY29udmVyc2lvbiBjIHdpZHRoIGliIGluXG4gICAgcGFkX3ByZWNfc2NhbmYgaWIgcmVzdCByZWFkZXJzIHBhZCBwcmVjIHNjYW4gKHRva2VuX25hdGl2ZWludCBjKVxuICB8IEludDY0IChpY29udiwgcGFkLCBwcmVjLCByZXN0KSAtPlxuICAgIGxldCBjID0gaW50ZWdlcl9jb252ZXJzaW9uX29mX2NoYXIgKGNoYXJfb2ZfaWNvbnYgaWNvbnYpIGluXG4gICAgbGV0IHNjYW4gd2lkdGggXyBpYiA9IHNjYW5faW50X2NvbnZlcnNpb24gYyB3aWR0aCBpYiBpblxuICAgIHBhZF9wcmVjX3NjYW5mIGliIHJlc3QgcmVhZGVycyBwYWQgcHJlYyBzY2FuICh0b2tlbl9pbnQ2NCBjKVxuICB8IEZsb2F0ICgoXywgKEZsb2F0X0YgfCBGbG9hdF9DRikpLCBwYWQsIHByZWMsIHJlc3QpIC0+XG4gICAgcGFkX3ByZWNfc2NhbmYgaWIgcmVzdCByZWFkZXJzIHBhZCBwcmVjIHNjYW5fY2FtbF9mbG9hdCB0b2tlbl9mbG9hdFxuICB8IEZsb2F0ICgoXywgKEZsb2F0X2YgfCBGbG9hdF9lIHwgRmxvYXRfRSB8IEZsb2F0X2cgfCBGbG9hdF9HKSksXG4gICAgICAgICAgIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBwYWRfcHJlY19zY2FuZiBpYiByZXN0IHJlYWRlcnMgcGFkIHByZWMgc2Nhbl9mbG9hdCB0b2tlbl9mbG9hdFxuICB8IEZsb2F0ICgoXywgKEZsb2F0X2ggfCBGbG9hdF9IKSksIHBhZCwgcHJlYywgcmVzdCkgLT5cbiAgICBwYWRfcHJlY19zY2FuZiBpYiByZXN0IHJlYWRlcnMgcGFkIHByZWMgc2Nhbl9oZXhfZmxvYXQgdG9rZW5fZmxvYXRcbiAgfCBCb29sIChwYWQsIHJlc3QpIC0+XG4gICAgbGV0IHNjYW4gXyBfIGliID0gc2Nhbl9ib29sIGliIGluXG4gICAgcGFkX3ByZWNfc2NhbmYgaWIgcmVzdCByZWFkZXJzIHBhZCBOb19wcmVjaXNpb24gc2NhbiB0b2tlbl9ib29sXG4gIHwgQWxwaGEgXyAtPlxuICAgIGludmFsaWRfYXJnIFwic2NhbmY6IGJhZCBjb252ZXJzaW9uIFxcXCIlYVxcXCJcIlxuICB8IFRoZXRhIF8gLT5cbiAgICBpbnZhbGlkX2FyZyBcInNjYW5mOiBiYWQgY29udmVyc2lvbiBcXFwiJXRcXFwiXCJcbiAgfCBDdXN0b20gXyAtPlxuICAgIGludmFsaWRfYXJnIFwic2NhbmY6IGJhZCBjb252ZXJzaW9uIFxcXCIlP1xcXCIgKGN1c3RvbSBjb252ZXJ0ZXIpXCJcbiAgfCBSZWFkZXIgZm10X3Jlc3QgLT5cbiAgICBiZWdpbiBtYXRjaCByZWFkZXJzIHdpdGhcbiAgICB8IENvbnMgKHJlYWRlciwgcmVhZGVyc19yZXN0KSAtPlxuICAgICAgICBsZXQgeCA9IHJlYWRlciBpYiBpblxuICAgICAgICBDb25zICh4LCBtYWtlX3NjYW5mIGliIGZtdF9yZXN0IHJlYWRlcnNfcmVzdClcbiAgICB8IE5pbCAtPlxuICAgICAgICBpbnZhbGlkX2FyZyBcInNjYW5mOiBtaXNzaW5nIHJlYWRlclwiXG4gICAgZW5kXG4gIHwgRmx1c2ggcmVzdCAtPlxuICAgIGlmIFNjYW5uaW5nLmVuZF9vZl9pbnB1dCBpYiB0aGVuIG1ha2Vfc2NhbmYgaWIgcmVzdCByZWFkZXJzXG4gICAgZWxzZSBiYWRfaW5wdXQgXCJlbmQgb2YgaW5wdXQgbm90IGZvdW5kXCJcblxuICB8IFN0cmluZ19saXRlcmFsIChzdHIsIHJlc3QpIC0+XG4gICAgU3RyaW5nLml0ZXIgKGNoZWNrX2NoYXIgaWIpIHN0cjtcbiAgICBtYWtlX3NjYW5mIGliIHJlc3QgcmVhZGVyc1xuICB8IENoYXJfbGl0ZXJhbCAoY2hyLCByZXN0KSAtPlxuICAgIGNoZWNrX2NoYXIgaWIgY2hyO1xuICAgIG1ha2Vfc2NhbmYgaWIgcmVzdCByZWFkZXJzXG5cbiAgfCBGb3JtYXRfYXJnIChwYWRfb3B0LCBmbXR0eSwgcmVzdCkgLT5cbiAgICBsZXQgXyA9IHNjYW5fY2FtbF9zdHJpbmcgKHdpZHRoX29mX3BhZF9vcHQgcGFkX29wdCkgaWIgaW5cbiAgICBsZXQgcyA9IHRva2VuX3N0cmluZyBpYiBpblxuICAgIGxldCBmbXQgPVxuICAgICAgdHJ5IGZvcm1hdF9vZl9zdHJpbmdfZm10dHkgcyBmbXR0eVxuICAgICAgd2l0aCBGYWlsdXJlIG1zZyAtPiBiYWRfaW5wdXQgbXNnXG4gICAgaW5cbiAgICBDb25zIChmbXQsIG1ha2Vfc2NhbmYgaWIgcmVzdCByZWFkZXJzKVxuICB8IEZvcm1hdF9zdWJzdCAocGFkX29wdCwgZm10dHksIHJlc3QpIC0+XG4gICAgbGV0IF8gPSBzY2FuX2NhbWxfc3RyaW5nICh3aWR0aF9vZl9wYWRfb3B0IHBhZF9vcHQpIGliIGluXG4gICAgbGV0IHMgPSB0b2tlbl9zdHJpbmcgaWIgaW5cbiAgICBsZXQgZm10LCBmbXQnID1cbiAgICAgIHRyeVxuICAgICAgICBsZXQgRm10X0VCQiBmbXQgPSBmbXRfZWJiX29mX3N0cmluZyBzIGluXG4gICAgICAgIGxldCBGbXRfRUJCIGZtdCcgPSBmbXRfZWJiX29mX3N0cmluZyBzIGluXG4gICAgICAgICgqIFRPRE86IGZpbmQgYSB3YXkgdG8gYXZvaWQgcmVwYXJzaW5nIHR3aWNlICopXG5cbiAgICAgICAgKCogVE9ETzogdGhlc2UgdHlwZS1jaGVja3MgYmVsb3cgKmNhbiogZmFpbCBiZWNhdXNlIG9mIHR5cGVcbiAgICAgICAgICAgYW1iaWd1aXR5IGluIHByZXNlbmNlIG9mIGlnbm9yZWQtcmVhZGVyczogXCIlX3IlZFwiIGFuZCBcIiVkJV9yXCJcbiAgICAgICAgICAgYXJlIHR5cGVkIGluIHRoZSBzYW1lIHdheS5cblxuICAgICAgICAgICAjIFNjYW5mLnNzY2FuZiBcIlxcXCIlX3IlZFxcXCIzXCIgXCIlKCVkJV9yJSlcIiBpZ25vcmVcbiAgICAgICAgICAgICAoZnVuIGZtdCBuIC0+IHN0cmluZ19vZl9mb3JtYXQgZm10LCBuKVxuICAgICAgICAgICBFeGNlcHRpb246IENhbWxpbnRlcm5hbEZvcm1hdC5UeXBlX21pc21hdGNoLlxuXG4gICAgICAgICAgIFdlIHNob3VsZCBwcm9wZXJseSBjYXRjaCB0aGlzIGV4Y2VwdGlvbi5cbiAgICAgICAgKilcbiAgICAgICAgdHlwZV9mb3JtYXQgZm10IChlcmFzZV9yZWwgZm10dHkpLFxuICAgICAgICB0eXBlX2Zvcm1hdCBmbXQnIChlcmFzZV9yZWwgKHN5bW0gZm10dHkpKVxuICAgICAgd2l0aCBGYWlsdXJlIG1zZyAtPiBiYWRfaW5wdXQgbXNnXG4gICAgaW5cbiAgICBDb25zIChGb3JtYXQgKGZtdCwgcyksXG4gICAgICAgICAgbWFrZV9zY2FuZiBpYiAoY29uY2F0X2ZtdCBmbXQnIHJlc3QpIHJlYWRlcnMpXG5cbiAgfCBTY2FuX2NoYXJfc2V0ICh3aWR0aF9vcHQsIGNoYXJfc2V0LCBGb3JtYXR0aW5nX2xpdCAoZm10aW5nX2xpdCwgcmVzdCkpIC0+XG4gICAgbGV0IHN0cCwgc3RyID0gc3RvcHBlcl9vZl9mb3JtYXR0aW5nX2xpdCBmbXRpbmdfbGl0IGluXG4gICAgbGV0IHdpZHRoID0gd2lkdGhfb2ZfcGFkX29wdCB3aWR0aF9vcHQgaW5cbiAgICBzY2FuX2NoYXJzX2luX2NoYXJfc2V0IGNoYXJfc2V0IChTb21lIHN0cCkgd2lkdGggaWI7XG4gICAgbGV0IHMgPSB0b2tlbl9zdHJpbmcgaWIgaW5cbiAgICBsZXQgc3RyX3Jlc3QgPSBTdHJpbmdfbGl0ZXJhbCAoc3RyLCByZXN0KSBpblxuICAgIENvbnMgKHMsIG1ha2Vfc2NhbmYgaWIgc3RyX3Jlc3QgcmVhZGVycylcbiAgfCBTY2FuX2NoYXJfc2V0ICh3aWR0aF9vcHQsIGNoYXJfc2V0LCByZXN0KSAtPlxuICAgIGxldCB3aWR0aCA9IHdpZHRoX29mX3BhZF9vcHQgd2lkdGhfb3B0IGluXG4gICAgc2Nhbl9jaGFyc19pbl9jaGFyX3NldCBjaGFyX3NldCBOb25lIHdpZHRoIGliO1xuICAgIGxldCBzID0gdG9rZW5fc3RyaW5nIGliIGluXG4gICAgQ29ucyAocywgbWFrZV9zY2FuZiBpYiByZXN0IHJlYWRlcnMpXG4gIHwgU2Nhbl9nZXRfY291bnRlciAoY291bnRlciwgcmVzdCkgLT5cbiAgICBsZXQgY291bnQgPSBnZXRfY291bnRlciBpYiBjb3VudGVyIGluXG4gICAgQ29ucyAoY291bnQsIG1ha2Vfc2NhbmYgaWIgcmVzdCByZWFkZXJzKVxuICB8IFNjYW5fbmV4dF9jaGFyIHJlc3QgLT5cbiAgICBsZXQgYyA9IFNjYW5uaW5nLmNoZWNrZWRfcGVla19jaGFyIGliIGluXG4gICAgQ29ucyAoYywgbWFrZV9zY2FuZiBpYiByZXN0IHJlYWRlcnMpXG5cbiAgfCBGb3JtYXR0aW5nX2xpdCAoZm9ybWF0dGluZ19saXQsIHJlc3QpIC0+XG4gICAgU3RyaW5nLml0ZXIgKGNoZWNrX2NoYXIgaWIpIChzdHJpbmdfb2ZfZm9ybWF0dGluZ19saXQgZm9ybWF0dGluZ19saXQpO1xuICAgIG1ha2Vfc2NhbmYgaWIgcmVzdCByZWFkZXJzXG4gIHwgRm9ybWF0dGluZ19nZW4gKE9wZW5fdGFnIChGb3JtYXQgKGZtdCcsIF8pKSwgcmVzdCkgLT5cbiAgICBjaGVja19jaGFyIGliICdAJzsgY2hlY2tfY2hhciBpYiAneyc7XG4gICAgbWFrZV9zY2FuZiBpYiAoY29uY2F0X2ZtdCBmbXQnIHJlc3QpIHJlYWRlcnNcbiAgfCBGb3JtYXR0aW5nX2dlbiAoT3Blbl9ib3ggKEZvcm1hdCAoZm10JywgXykpLCByZXN0KSAtPlxuICAgIGNoZWNrX2NoYXIgaWIgJ0AnOyBjaGVja19jaGFyIGliICdbJztcbiAgICBtYWtlX3NjYW5mIGliIChjb25jYXRfZm10IGZtdCcgcmVzdCkgcmVhZGVyc1xuXG4gIHwgSWdub3JlZF9wYXJhbSAoaWduLCByZXN0KSAtPlxuICAgIGxldCBQYXJhbV9mb3JtYXRfRUJCIGZtdCcgPSBwYXJhbV9mb3JtYXRfb2ZfaWdub3JlZF9mb3JtYXQgaWduIHJlc3QgaW5cbiAgICBiZWdpbiBtYXRjaCBtYWtlX3NjYW5mIGliIGZtdCcgcmVhZGVycyB3aXRoXG4gICAgfCBDb25zIChfLCBhcmdfcmVzdCkgLT4gYXJnX3Jlc3RcbiAgICB8IE5pbCAtPiBhc3NlcnQgZmFsc2VcbiAgICBlbmRcblxuICB8IEVuZF9vZl9mb3JtYXQgLT5cbiAgICBOaWxcblxuKCogQ2FzZSBhbmFseXNpcyBvbiBwYWRkaW5nIGFuZCBwcmVjaXNpb24uICopXG4oKiBSZWplY3QgZm9ybWF0cyBjb250YWluaW5nIFwiJSpcIiBvciBcIiUuKlwiLiAqKVxuKCogUGFzcyBwYWRkaW5nIGFuZCBwcmVjaXNpb24gdG8gdGhlIGdlbmVyaWMgc2Nhbm5lciBgc2NhbicuICopXG5hbmQgcGFkX3ByZWNfc2NhbmYgOiB0eXBlIGEgYyBkIGUgZiB4IHkgeiB0IC5cbiAgICBTY2FubmluZy5pbl9jaGFubmVsIC0+IChhLCBTY2FubmluZy5pbl9jaGFubmVsLCBjLCBkLCBlLCBmKSBmbXQgLT5cbiAgICAgIChkLCBlKSBoZXRlcl9saXN0IC0+ICh4LCB5KSBwYWRkaW5nIC0+ICh5LCB6IC0+IGEpIHByZWNpc2lvbiAtPlxuICAgICAgKGludCAtPiBpbnQgLT4gU2Nhbm5pbmcuaW5fY2hhbm5lbCAtPiB0KSAtPlxuICAgICAgKFNjYW5uaW5nLmluX2NoYW5uZWwgLT4geikgLT5cbiAgICAgICh4LCBmKSBoZXRlcl9saXN0ID1cbmZ1biBpYiBmbXQgcmVhZGVycyBwYWQgcHJlYyBzY2FuIHRva2VuIC0+IG1hdGNoIHBhZCwgcHJlYyB3aXRoXG4gIHwgTm9fcGFkZGluZywgTm9fcHJlY2lzaW9uIC0+XG4gICAgbGV0IF8gPSBzY2FuIG1heF9pbnQgbWF4X2ludCBpYiBpblxuICAgIGxldCB4ID0gdG9rZW4gaWIgaW5cbiAgICBDb25zICh4LCBtYWtlX3NjYW5mIGliIGZtdCByZWFkZXJzKVxuICB8IE5vX3BhZGRpbmcsIExpdF9wcmVjaXNpb24gcCAtPlxuICAgIGxldCBfID0gc2NhbiBtYXhfaW50IHAgaWIgaW5cbiAgICBsZXQgeCA9IHRva2VuIGliIGluXG4gICAgQ29ucyAoeCwgbWFrZV9zY2FuZiBpYiBmbXQgcmVhZGVycylcbiAgfCBMaXRfcGFkZGluZyAoKFJpZ2h0IHwgWmVyb3MpLCB3KSwgTm9fcHJlY2lzaW9uIC0+XG4gICAgbGV0IF8gPSBzY2FuIHcgbWF4X2ludCBpYiBpblxuICAgIGxldCB4ID0gdG9rZW4gaWIgaW5cbiAgICBDb25zICh4LCBtYWtlX3NjYW5mIGliIGZtdCByZWFkZXJzKVxuICB8IExpdF9wYWRkaW5nICgoUmlnaHQgfCBaZXJvcyksIHcpLCBMaXRfcHJlY2lzaW9uIHAgLT5cbiAgICBsZXQgXyA9IHNjYW4gdyBwIGliIGluXG4gICAgbGV0IHggPSB0b2tlbiBpYiBpblxuICAgIENvbnMgKHgsIG1ha2Vfc2NhbmYgaWIgZm10IHJlYWRlcnMpXG4gIHwgTGl0X3BhZGRpbmcgKExlZnQsIF8pLCBfIC0+XG4gICAgaW52YWxpZF9hcmcgXCJzY2FuZjogYmFkIGNvbnZlcnNpb24gXFxcIiUtXFxcIlwiXG4gIHwgTGl0X3BhZGRpbmcgKChSaWdodCB8IFplcm9zKSwgXyksIEFyZ19wcmVjaXNpb24gLT5cbiAgICBpbnZhbGlkX2FyZyBcInNjYW5mOiBiYWQgY29udmVyc2lvbiBcXFwiJSpcXFwiXCJcbiAgfCBBcmdfcGFkZGluZyBfLCBfIC0+XG4gICAgaW52YWxpZF9hcmcgXCJzY2FuZjogYmFkIGNvbnZlcnNpb24gXFxcIiUqXFxcIlwiXG4gIHwgTm9fcGFkZGluZywgQXJnX3ByZWNpc2lvbiAtPlxuICAgIGludmFsaWRfYXJnIFwic2NhbmY6IGJhZCBjb252ZXJzaW9uIFxcXCIlKlxcXCJcIlxuXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuICAgICAgICAgICAgKCogRGVmaW5pbmcgW3NjYW5mXSBhbmQgdmFyaW91cyBmbGF2b3JzIG9mIFtzY2FuZl0gKilcblxudHlwZSAnYSBrc2NhbmZfcmVzdWx0ID0gQXJncyBvZiAnYSB8IEV4YyBvZiBleG5cblxubGV0IGtzY2FuZiBpYiBlZiAoRm9ybWF0IChmbXQsIHN0cikpID1cbiAgbGV0IHJlYyBhcHBseSA6IHR5cGUgYSBiIC4gYSAtPiAoYSwgYikgaGV0ZXJfbGlzdCAtPiBiID1cbiAgICBmdW4gZiBhcmdzIC0+IG1hdGNoIGFyZ3Mgd2l0aFxuICAgIHwgQ29ucyAoeCwgcikgLT4gYXBwbHkgKGYgeCkgclxuICAgIHwgTmlsIC0+IGZcbiAgaW5cbiAgbGV0IGsgcmVhZGVycyBmID1cbiAgICBTY2FubmluZy5yZXNldF90b2tlbiBpYjtcbiAgICBtYXRjaCB0cnkgQXJncyAobWFrZV9zY2FuZiBpYiBmbXQgcmVhZGVycykgd2l0aFxuICAgICAgfCAoU2Nhbl9mYWlsdXJlIF8gfCBGYWlsdXJlIF8gfCBFbmRfb2ZfZmlsZSkgYXMgZXhjIC0+IEV4YyBleGNcbiAgICAgIHwgSW52YWxpZF9hcmd1bWVudCBtc2cgLT5cbiAgICAgICAgaW52YWxpZF9hcmcgKG1zZyBeIFwiIGluIGZvcm1hdCBcXFwiXCIgXiBTdHJpbmcuZXNjYXBlZCBzdHIgXiBcIlxcXCJcIilcbiAgICB3aXRoXG4gICAgICB8IEFyZ3MgYXJncyAtPiBhcHBseSBmIGFyZ3NcbiAgICAgIHwgRXhjIGV4YyAtPiBlZiBpYiBleGNcbiAgaW5cbiAgdGFrZV9mb3JtYXRfcmVhZGVycyBrIGZtdFxuXG4oKioqKVxuXG5sZXQga2JzY2FuZiA9IGtzY2FuZlxubGV0IGJzY2FuZiBpYiBmbXQgPSBrYnNjYW5mIGliIHNjYW5mX2JhZF9pbnB1dCBmbXRcblxubGV0IGtzc2NhbmYgcyBlZiBmbXQgPSBrYnNjYW5mIChTY2FubmluZy5mcm9tX3N0cmluZyBzKSBlZiBmbXRcbmxldCBzc2NhbmYgcyBmbXQgPSBrYnNjYW5mIChTY2FubmluZy5mcm9tX3N0cmluZyBzKSBzY2FuZl9iYWRfaW5wdXQgZm10XG5cbmxldCBzY2FuZiBmbXQgPSBrc2NhbmYgU2Nhbm5pbmcuc3RkaWIgc2NhbmZfYmFkX2lucHV0IGZtdFxuXG4oKioqKVxuXG4oKiBTY2FubmluZyBmb3JtYXQgc3RyaW5ncy4gKilcbmxldCBic2NhbmZfZm9ybWF0IDpcbiAgU2Nhbm5pbmcuaW5fY2hhbm5lbCAtPiAoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0NiAtPlxuICAoKCdhLCAnYiwgJ2MsICdkLCAnZSwgJ2YpIGZvcm1hdDYgLT4gJ2cpIC0+ICdnID1cbiAgZnVuIGliIGZvcm1hdCBmIC0+XG4gICAgbGV0IF8gPSBzY2FuX2NhbWxfc3RyaW5nIG1heF9pbnQgaWIgaW5cbiAgICBsZXQgc3RyID0gdG9rZW5fc3RyaW5nIGliIGluXG4gICAgbGV0IGZtdCcgPVxuICAgICAgdHJ5IGZvcm1hdF9vZl9zdHJpbmdfZm9ybWF0IHN0ciBmb3JtYXRcbiAgICAgIHdpdGggRmFpbHVyZSBtc2cgLT4gYmFkX2lucHV0IG1zZyBpblxuICAgIGYgZm10J1xuXG5cbmxldCBzc2NhbmZfZm9ybWF0IDpcbiAgc3RyaW5nIC0+ICgnYSwgJ2IsICdjLCAnZCwgJ2UsICdmKSBmb3JtYXQ2IC0+XG4gICgoJ2EsICdiLCAnYywgJ2QsICdlLCAnZikgZm9ybWF0NiAtPiAnZykgLT4gJ2cgPVxuICBmdW4gcyBmb3JtYXQgZiAtPiBic2NhbmZfZm9ybWF0IChTY2FubmluZy5mcm9tX3N0cmluZyBzKSBmb3JtYXQgZlxuXG5cbmxldCBmb3JtYXRfZnJvbV9zdHJpbmcgcyBmbXQgPVxuICBzc2NhbmZfZm9ybWF0IChcIlxcXCJcIiBeIFN0cmluZy5lc2NhcGVkIHMgXiBcIlxcXCJcIikgZm10IChmdW4geCAtPiB4KVxuXG5cbmxldCB1bmVzY2FwZWQgcyA9XG4gIHNzY2FuZiAoXCJcXFwiXCIgXiBzIF4gXCJcXFwiXCIpIFwiJVMlIVwiIChmdW4geCAtPiB4KVxuXG5cbigqIERlcHJlY2F0ZWQgKilcbmxldCBrZnNjYW5mIGljIGVmIGZtdCA9IGtic2NhbmYgKFNjYW5uaW5nLm1lbW9fZnJvbV9jaGFubmVsIGljKSBlZiBmbXRcbmxldCBmc2NhbmYgaWMgZm10ID0ga3NjYW5mIChTY2FubmluZy5tZW1vX2Zyb21fY2hhbm5lbCBpYykgc2NhbmZfYmFkX2lucHV0IGZtdFxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG4oKiBSZWdpc3RlcmluZyBPQ2FtbCB2YWx1ZXMgd2l0aCB0aGUgQyBydW50aW1lIGZvciBsYXRlciBjYWxsYmFja3MgKilcblxuZXh0ZXJuYWwgcmVnaXN0ZXJfbmFtZWRfdmFsdWUgOiBzdHJpbmcgLT4gT2JqLnQgLT4gdW5pdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBcImNhbWxfcmVnaXN0ZXJfbmFtZWRfdmFsdWVcIlxuXG5sZXQgcmVnaXN0ZXIgbmFtZSB2ID1cbiAgcmVnaXN0ZXJfbmFtZWRfdmFsdWUgbmFtZSAoT2JqLnJlcHIgdilcblxubGV0IHJlZ2lzdGVyX2V4Y2VwdGlvbiBuYW1lIChleG4gOiBleG4pID1cbiAgbGV0IGV4biA9IE9iai5yZXByIGV4biBpblxuICBsZXQgc2xvdCA9IGlmIE9iai50YWcgZXhuID0gT2JqLm9iamVjdF90YWcgdGhlbiBleG4gZWxzZSBPYmouZmllbGQgZXhuIDAgaW5cbiAgcmVnaXN0ZXJfbmFtZWRfdmFsdWUgbmFtZSBzbG90XG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICBKZXJvbWUgVm91aWxsb24sIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDAyIEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbm9wZW4gT2JqXG5cbigqKioqIE9iamVjdCByZXByZXNlbnRhdGlvbiAqKioqKVxuXG5leHRlcm5hbCBzZXRfaWQ6ICdhIC0+ICdhID0gXCJjYW1sX3NldF9vb19pZFwiIFtAQG5vYWxsb2NdXG5cbigqKioqIE9iamVjdCBjb3B5ICoqKiopXG5cbmxldCBjb3B5IG8gPVxuICBsZXQgbyA9IChPYmoub2JqIChPYmouZHVwIChPYmoucmVwciBvKSkpIGluXG4gIHNldF9pZCBvXG5cbigqKioqIENvbXByZXNzaW9uIG9wdGlvbnMgKioqKilcbigqIFBhcmFtZXRlcnMgKilcbnR5cGUgcGFyYW1zID0ge1xuICAgIG11dGFibGUgY29tcGFjdF90YWJsZSA6IGJvb2w7XG4gICAgbXV0YWJsZSBjb3B5X3BhcmVudCA6IGJvb2w7XG4gICAgbXV0YWJsZSBjbGVhbl93aGVuX2NvcHlpbmcgOiBib29sO1xuICAgIG11dGFibGUgcmV0cnlfY291bnQgOiBpbnQ7XG4gICAgbXV0YWJsZSBidWNrZXRfc21hbGxfc2l6ZSA6IGludFxuICB9XG5cbmxldCBwYXJhbXMgPSB7XG4gIGNvbXBhY3RfdGFibGUgPSB0cnVlO1xuICBjb3B5X3BhcmVudCA9IHRydWU7XG4gIGNsZWFuX3doZW5fY29weWluZyA9IHRydWU7XG4gIHJldHJ5X2NvdW50ID0gMztcbiAgYnVja2V0X3NtYWxsX3NpemUgPSAxNlxufVxuXG4oKioqKiBQYXJhbWV0ZXJzICoqKiopXG5cbmxldCBpbml0aWFsX29iamVjdF9zaXplID0gMlxuXG4oKioqKiBJdGVtcyAqKioqKVxuXG50eXBlIGl0ZW0gPSBEdW1teUEgfCBEdW1teUIgfCBEdW1teUMgb2YgaW50XG5sZXQgXyA9IFtEdW1teUE7IER1bW15QjsgRHVtbXlDIDBdICgqIHRvIGF2b2lkIHdhcm5pbmdzICopXG5cbmxldCBkdW1teV9pdGVtID0gKG1hZ2ljICgpIDogaXRlbSlcblxuKCoqKiogVHlwZXMgKioqKilcblxudHlwZSB0YWdcbnR5cGUgbGFiZWwgPSBpbnRcbnR5cGUgY2xvc3VyZSA9IGl0ZW1cbnR5cGUgdCA9IER1bW15QSB8IER1bW15QiB8IER1bW15QyBvZiBpbnRcbmxldCBfID0gW0R1bW15QTsgRHVtbXlCOyBEdW1teUMgMF0gKCogdG8gYXZvaWQgd2FybmluZ3MgKilcblxudHlwZSBvYmogPSB0IGFycmF5XG5leHRlcm5hbCByZXQgOiAob2JqIC0+ICdhKSAtPiBjbG9zdXJlID0gXCIlaWRlbnRpdHlcIlxuXG4oKioqKiBMYWJlbHMgKioqKilcblxubGV0IHB1YmxpY19tZXRob2RfbGFiZWwgcyA6IHRhZyA9XG4gIGxldCBhY2N1ID0gcmVmIDAgaW5cbiAgZm9yIGkgPSAwIHRvIFN0cmluZy5sZW5ndGggcyAtIDEgZG9cbiAgICBhY2N1IDo9IDIyMyAqICFhY2N1ICsgQ2hhci5jb2RlIHMuW2ldXG4gIGRvbmU7XG4gICgqIHJlZHVjZSB0byAzMSBiaXRzICopXG4gIGFjY3UgOj0gIWFjY3UgbGFuZCAoMSBsc2wgMzEgLSAxKTtcbiAgKCogbWFrZSBpdCBzaWduZWQgZm9yIDY0IGJpdHMgYXJjaGl0ZWN0dXJlcyAqKVxuICBsZXQgdGFnID0gaWYgIWFjY3UgPiAweDNGRkZGRkZGIHRoZW4gIWFjY3UgLSAoMSBsc2wgMzEpIGVsc2UgIWFjY3UgaW5cbiAgKCogUHJpbnRmLmVwcmludGYgXCIlcyA9ICVkXFxuXCIgcyB0YWc7IGZsdXNoIHN0ZGVycjsgKilcbiAgbWFnaWMgdGFnXG5cbigqKioqIFNwYXJzZSBhcnJheSAqKioqKVxuXG5tb2R1bGUgVmFycyA9XG4gIE1hcC5NYWtlKHN0cnVjdCB0eXBlIHQgPSBzdHJpbmcgbGV0IGNvbXBhcmUgKHg6dCkgeSA9IGNvbXBhcmUgeCB5IGVuZClcbnR5cGUgdmFycyA9IGludCBWYXJzLnRcblxubW9kdWxlIE1ldGhzID1cbiAgTWFwLk1ha2Uoc3RydWN0IHR5cGUgdCA9IHN0cmluZyBsZXQgY29tcGFyZSAoeDp0KSB5ID0gY29tcGFyZSB4IHkgZW5kKVxudHlwZSBtZXRocyA9IGxhYmVsIE1ldGhzLnRcbm1vZHVsZSBMYWJzID1cbiAgTWFwLk1ha2Uoc3RydWN0IHR5cGUgdCA9IGxhYmVsIGxldCBjb21wYXJlICh4OnQpIHkgPSBjb21wYXJlIHggeSBlbmQpXG50eXBlIGxhYnMgPSBib29sIExhYnMudFxuXG4oKiBUaGUgY29tcGlsZXIgYXNzdW1lcyB0aGF0IHRoZSBmaXJzdCBmaWVsZCBvZiB0aGlzIHN0cnVjdHVyZSBpcyBbc2l6ZV0uICopXG50eXBlIHRhYmxlID1cbiB7IG11dGFibGUgc2l6ZTogaW50O1xuICAgbXV0YWJsZSBtZXRob2RzOiBjbG9zdXJlIGFycmF5O1xuICAgbXV0YWJsZSBtZXRob2RzX2J5X25hbWU6IG1ldGhzO1xuICAgbXV0YWJsZSBtZXRob2RzX2J5X2xhYmVsOiBsYWJzO1xuICAgbXV0YWJsZSBwcmV2aW91c19zdGF0ZXM6XG4gICAgIChtZXRocyAqIGxhYnMgKiAobGFiZWwgKiBpdGVtKSBsaXN0ICogdmFycyAqXG4gICAgICBsYWJlbCBsaXN0ICogc3RyaW5nIGxpc3QpIGxpc3Q7XG4gICBtdXRhYmxlIGhpZGRlbl9tZXRoczogKGxhYmVsICogaXRlbSkgbGlzdDtcbiAgIG11dGFibGUgdmFyczogdmFycztcbiAgIG11dGFibGUgaW5pdGlhbGl6ZXJzOiAob2JqIC0+IHVuaXQpIGxpc3QgfVxuXG5sZXQgZHVtbXlfdGFibGUgPVxuICB7IG1ldGhvZHMgPSBbfCBkdW1teV9pdGVtIHxdO1xuICAgIG1ldGhvZHNfYnlfbmFtZSA9IE1ldGhzLmVtcHR5O1xuICAgIG1ldGhvZHNfYnlfbGFiZWwgPSBMYWJzLmVtcHR5O1xuICAgIHByZXZpb3VzX3N0YXRlcyA9IFtdO1xuICAgIGhpZGRlbl9tZXRocyA9IFtdO1xuICAgIHZhcnMgPSBWYXJzLmVtcHR5O1xuICAgIGluaXRpYWxpemVycyA9IFtdO1xuICAgIHNpemUgPSAwIH1cblxubGV0IHRhYmxlX2NvdW50ID0gcmVmIDBcblxuKCogZHVtbXlfbWV0IHNob3VsZCBiZSBhIHBvaW50ZXIsIHNvIHVzZSBhbiBhdG9tICopXG5sZXQgZHVtbXlfbWV0IDogaXRlbSA9IG9iaiAoT2JqLm5ld19ibG9jayAwIDApXG4oKiBpZiBkZWJ1Z2dpbmcgaXMgbmVlZGVkLCB0aGlzIGNvdWxkIGJlIGEgZ29vZCBpZGVhOiAqKVxuKCogbGV0IGR1bW15X21ldCAoKSA9IGZhaWx3aXRoIFwiVW5kZWZpbmVkIG1ldGhvZFwiICopXG5cbmxldCByZWMgZml0X3NpemUgbiA9XG4gIGlmIG4gPD0gMiB0aGVuIG4gZWxzZVxuICBmaXRfc2l6ZSAoKG4rMSkvMikgKiAyXG5cbmxldCBuZXdfdGFibGUgcHViX2xhYmVscyA9XG4gIGluY3IgdGFibGVfY291bnQ7XG4gIGxldCBsZW4gPSBBcnJheS5sZW5ndGggcHViX2xhYmVscyBpblxuICBsZXQgbWV0aG9kcyA9IEFycmF5Lm1ha2UgKGxlbioyKzIpIGR1bW15X21ldCBpblxuICBtZXRob2RzLigwKSA8LSBtYWdpYyBsZW47XG4gIG1ldGhvZHMuKDEpIDwtIG1hZ2ljIChmaXRfc2l6ZSBsZW4gKiBTeXMud29yZF9zaXplIC8gOCAtIDEpO1xuICBmb3IgaSA9IDAgdG8gbGVuIC0gMSBkbyBtZXRob2RzLihpKjIrMykgPC0gbWFnaWMgcHViX2xhYmVscy4oaSkgZG9uZTtcbiAgeyBtZXRob2RzID0gbWV0aG9kcztcbiAgICBtZXRob2RzX2J5X25hbWUgPSBNZXRocy5lbXB0eTtcbiAgICBtZXRob2RzX2J5X2xhYmVsID0gTGFicy5lbXB0eTtcbiAgICBwcmV2aW91c19zdGF0ZXMgPSBbXTtcbiAgICBoaWRkZW5fbWV0aHMgPSBbXTtcbiAgICB2YXJzID0gVmFycy5lbXB0eTtcbiAgICBpbml0aWFsaXplcnMgPSBbXTtcbiAgICBzaXplID0gaW5pdGlhbF9vYmplY3Rfc2l6ZSB9XG5cbmxldCByZXNpemUgYXJyYXkgbmV3X3NpemUgPVxuICBsZXQgb2xkX3NpemUgPSBBcnJheS5sZW5ndGggYXJyYXkubWV0aG9kcyBpblxuICBpZiBuZXdfc2l6ZSA+IG9sZF9zaXplIHRoZW4gYmVnaW5cbiAgICBsZXQgbmV3X2J1Y2sgPSBBcnJheS5tYWtlIG5ld19zaXplIGR1bW15X21ldCBpblxuICAgIEFycmF5LmJsaXQgYXJyYXkubWV0aG9kcyAwIG5ld19idWNrIDAgb2xkX3NpemU7XG4gICAgYXJyYXkubWV0aG9kcyA8LSBuZXdfYnVja1xuIGVuZFxuXG5sZXQgcHV0IGFycmF5IGxhYmVsIGVsZW1lbnQgPVxuICByZXNpemUgYXJyYXkgKGxhYmVsICsgMSk7XG4gIGFycmF5Lm1ldGhvZHMuKGxhYmVsKSA8LSBlbGVtZW50XG5cbigqKioqIENsYXNzZXMgKioqKilcblxubGV0IG1ldGhvZF9jb3VudCA9IHJlZiAwXG5sZXQgaW5zdF92YXJfY291bnQgPSByZWYgMFxuXG4oKiB0eXBlIHQgKilcbnR5cGUgbWV0aCA9IGl0ZW1cblxubGV0IG5ld19tZXRob2QgdGFibGUgPVxuICBsZXQgaW5kZXggPSBBcnJheS5sZW5ndGggdGFibGUubWV0aG9kcyBpblxuICByZXNpemUgdGFibGUgKGluZGV4ICsgMSk7XG4gIGluZGV4XG5cbmxldCBnZXRfbWV0aG9kX2xhYmVsIHRhYmxlIG5hbWUgPVxuICB0cnlcbiAgICBNZXRocy5maW5kIG5hbWUgdGFibGUubWV0aG9kc19ieV9uYW1lXG4gIHdpdGggTm90X2ZvdW5kIC0+XG4gICAgbGV0IGxhYmVsID0gbmV3X21ldGhvZCB0YWJsZSBpblxuICAgIHRhYmxlLm1ldGhvZHNfYnlfbmFtZSA8LSBNZXRocy5hZGQgbmFtZSBsYWJlbCB0YWJsZS5tZXRob2RzX2J5X25hbWU7XG4gICAgdGFibGUubWV0aG9kc19ieV9sYWJlbCA8LSBMYWJzLmFkZCBsYWJlbCB0cnVlIHRhYmxlLm1ldGhvZHNfYnlfbGFiZWw7XG4gICAgbGFiZWxcblxubGV0IGdldF9tZXRob2RfbGFiZWxzIHRhYmxlIG5hbWVzID1cbiAgQXJyYXkubWFwIChnZXRfbWV0aG9kX2xhYmVsIHRhYmxlKSBuYW1lc1xuXG5sZXQgc2V0X21ldGhvZCB0YWJsZSBsYWJlbCBlbGVtZW50ID1cbiAgaW5jciBtZXRob2RfY291bnQ7XG4gIGlmIExhYnMuZmluZCBsYWJlbCB0YWJsZS5tZXRob2RzX2J5X2xhYmVsIHRoZW5cbiAgICBwdXQgdGFibGUgbGFiZWwgZWxlbWVudFxuICBlbHNlXG4gICAgdGFibGUuaGlkZGVuX21ldGhzIDwtIChsYWJlbCwgZWxlbWVudCkgOjogdGFibGUuaGlkZGVuX21ldGhzXG5cbmxldCBnZXRfbWV0aG9kIHRhYmxlIGxhYmVsID1cbiAgdHJ5IExpc3QuYXNzb2MgbGFiZWwgdGFibGUuaGlkZGVuX21ldGhzXG4gIHdpdGggTm90X2ZvdW5kIC0+IHRhYmxlLm1ldGhvZHMuKGxhYmVsKVxuXG5sZXQgdG9fbGlzdCBhcnIgPVxuICBpZiBhcnIgPT0gbWFnaWMgMCB0aGVuIFtdIGVsc2UgQXJyYXkudG9fbGlzdCBhcnJcblxubGV0IG5hcnJvdyB0YWJsZSB2YXJzIHZpcnRfbWV0aHMgY29uY3JfbWV0aHMgPVxuICBsZXQgdmFycyA9IHRvX2xpc3QgdmFyc1xuICBhbmQgdmlydF9tZXRocyA9IHRvX2xpc3QgdmlydF9tZXRoc1xuICBhbmQgY29uY3JfbWV0aHMgPSB0b19saXN0IGNvbmNyX21ldGhzIGluXG4gIGxldCB2aXJ0X21ldGhfbGFicyA9IExpc3QubWFwIChnZXRfbWV0aG9kX2xhYmVsIHRhYmxlKSB2aXJ0X21ldGhzIGluXG4gIGxldCBjb25jcl9tZXRoX2xhYnMgPSBMaXN0Lm1hcCAoZ2V0X21ldGhvZF9sYWJlbCB0YWJsZSkgY29uY3JfbWV0aHMgaW5cbiAgdGFibGUucHJldmlvdXNfc3RhdGVzIDwtXG4gICAgICh0YWJsZS5tZXRob2RzX2J5X25hbWUsIHRhYmxlLm1ldGhvZHNfYnlfbGFiZWwsIHRhYmxlLmhpZGRlbl9tZXRocyxcbiAgICAgIHRhYmxlLnZhcnMsIHZpcnRfbWV0aF9sYWJzLCB2YXJzKVxuICAgICA6OiB0YWJsZS5wcmV2aW91c19zdGF0ZXM7XG4gIHRhYmxlLnZhcnMgPC1cbiAgICBWYXJzLmZvbGRcbiAgICAgIChmdW4gbGFiIGluZm8gdHZhcnMgLT5cbiAgICAgICAgaWYgTGlzdC5tZW0gbGFiIHZhcnMgdGhlbiBWYXJzLmFkZCBsYWIgaW5mbyB0dmFycyBlbHNlIHR2YXJzKVxuICAgICAgdGFibGUudmFycyBWYXJzLmVtcHR5O1xuICBsZXQgYnlfbmFtZSA9IHJlZiBNZXRocy5lbXB0eSBpblxuICBsZXQgYnlfbGFiZWwgPSByZWYgTGFicy5lbXB0eSBpblxuICBMaXN0Lml0ZXIyXG4gICAgKGZ1biBtZXQgbGFiZWwgLT5cbiAgICAgICBieV9uYW1lIDo9IE1ldGhzLmFkZCBtZXQgbGFiZWwgIWJ5X25hbWU7XG4gICAgICAgYnlfbGFiZWwgOj1cbiAgICAgICAgICBMYWJzLmFkZCBsYWJlbFxuICAgICAgICAgICAgKHRyeSBMYWJzLmZpbmQgbGFiZWwgdGFibGUubWV0aG9kc19ieV9sYWJlbCB3aXRoIE5vdF9mb3VuZCAtPiB0cnVlKVxuICAgICAgICAgICAgIWJ5X2xhYmVsKVxuICAgIGNvbmNyX21ldGhzIGNvbmNyX21ldGhfbGFicztcbiAgTGlzdC5pdGVyMlxuICAgIChmdW4gbWV0IGxhYmVsIC0+XG4gICAgICAgYnlfbmFtZSA6PSBNZXRocy5hZGQgbWV0IGxhYmVsICFieV9uYW1lO1xuICAgICAgIGJ5X2xhYmVsIDo9IExhYnMuYWRkIGxhYmVsIGZhbHNlICFieV9sYWJlbClcbiAgICB2aXJ0X21ldGhzIHZpcnRfbWV0aF9sYWJzO1xuICB0YWJsZS5tZXRob2RzX2J5X25hbWUgPC0gIWJ5X25hbWU7XG4gIHRhYmxlLm1ldGhvZHNfYnlfbGFiZWwgPC0gIWJ5X2xhYmVsO1xuICB0YWJsZS5oaWRkZW5fbWV0aHMgPC1cbiAgICAgTGlzdC5mb2xkX3JpZ2h0XG4gICAgICAgKGZ1biAoKGxhYiwgXykgYXMgbWV0KSBobSAtPlxuICAgICAgICAgIGlmIExpc3QubWVtIGxhYiB2aXJ0X21ldGhfbGFicyB0aGVuIGhtIGVsc2UgbWV0OjpobSlcbiAgICAgICB0YWJsZS5oaWRkZW5fbWV0aHNcbiAgICAgICBbXVxuXG5sZXQgd2lkZW4gdGFibGUgPVxuICBsZXQgKGJ5X25hbWUsIGJ5X2xhYmVsLCBzYXZlZF9oaWRkZW5fbWV0aHMsIHNhdmVkX3ZhcnMsIHZpcnRfbWV0aHMsIHZhcnMpID1cbiAgICBMaXN0LmhkIHRhYmxlLnByZXZpb3VzX3N0YXRlc1xuICBpblxuICB0YWJsZS5wcmV2aW91c19zdGF0ZXMgPC0gTGlzdC50bCB0YWJsZS5wcmV2aW91c19zdGF0ZXM7XG4gIHRhYmxlLnZhcnMgPC1cbiAgICAgTGlzdC5mb2xkX2xlZnRcbiAgICAgICAoZnVuIHMgdiAtPiBWYXJzLmFkZCB2IChWYXJzLmZpbmQgdiB0YWJsZS52YXJzKSBzKVxuICAgICAgIHNhdmVkX3ZhcnMgdmFycztcbiAgdGFibGUubWV0aG9kc19ieV9uYW1lIDwtIGJ5X25hbWU7XG4gIHRhYmxlLm1ldGhvZHNfYnlfbGFiZWwgPC0gYnlfbGFiZWw7XG4gIHRhYmxlLmhpZGRlbl9tZXRocyA8LVxuICAgICBMaXN0LmZvbGRfcmlnaHRcbiAgICAgICAoZnVuICgobGFiLCBfKSBhcyBtZXQpIGhtIC0+XG4gICAgICAgICAgaWYgTGlzdC5tZW0gbGFiIHZpcnRfbWV0aHMgdGhlbiBobSBlbHNlIG1ldDo6aG0pXG4gICAgICAgdGFibGUuaGlkZGVuX21ldGhzXG4gICAgICAgc2F2ZWRfaGlkZGVuX21ldGhzXG5cbmxldCBuZXdfc2xvdCB0YWJsZSA9XG4gIGxldCBpbmRleCA9IHRhYmxlLnNpemUgaW5cbiAgdGFibGUuc2l6ZSA8LSBpbmRleCArIDE7XG4gIGluZGV4XG5cbmxldCBuZXdfdmFyaWFibGUgdGFibGUgbmFtZSA9XG4gIHRyeSBWYXJzLmZpbmQgbmFtZSB0YWJsZS52YXJzXG4gIHdpdGggTm90X2ZvdW5kIC0+XG4gICAgbGV0IGluZGV4ID0gbmV3X3Nsb3QgdGFibGUgaW5cbiAgICBpZiBuYW1lIDw+IFwiXCIgdGhlbiB0YWJsZS52YXJzIDwtIFZhcnMuYWRkIG5hbWUgaW5kZXggdGFibGUudmFycztcbiAgICBpbmRleFxuXG5sZXQgdG9fYXJyYXkgYXJyID1cbiAgaWYgYXJyID0gT2JqLm1hZ2ljIDAgdGhlbiBbfHxdIGVsc2UgYXJyXG5cbmxldCBuZXdfbWV0aG9kc192YXJpYWJsZXMgdGFibGUgbWV0aHMgdmFscyA9XG4gIGxldCBtZXRocyA9IHRvX2FycmF5IG1ldGhzIGluXG4gIGxldCBubWV0aHMgPSBBcnJheS5sZW5ndGggbWV0aHMgYW5kIG52YWxzID0gQXJyYXkubGVuZ3RoIHZhbHMgaW5cbiAgbGV0IHJlcyA9IEFycmF5Lm1ha2UgKG5tZXRocyArIG52YWxzKSAwIGluXG4gIGZvciBpID0gMCB0byBubWV0aHMgLSAxIGRvXG4gICAgcmVzLihpKSA8LSBnZXRfbWV0aG9kX2xhYmVsIHRhYmxlIG1ldGhzLihpKVxuICBkb25lO1xuICBmb3IgaSA9IDAgdG8gbnZhbHMgLSAxIGRvXG4gICAgcmVzLihpK25tZXRocykgPC0gbmV3X3ZhcmlhYmxlIHRhYmxlIHZhbHMuKGkpXG4gIGRvbmU7XG4gIHJlc1xuXG5sZXQgZ2V0X3ZhcmlhYmxlIHRhYmxlIG5hbWUgPVxuICB0cnkgVmFycy5maW5kIG5hbWUgdGFibGUudmFycyB3aXRoIE5vdF9mb3VuZCAtPiBhc3NlcnQgZmFsc2VcblxubGV0IGdldF92YXJpYWJsZXMgdGFibGUgbmFtZXMgPVxuICBBcnJheS5tYXAgKGdldF92YXJpYWJsZSB0YWJsZSkgbmFtZXNcblxubGV0IGFkZF9pbml0aWFsaXplciB0YWJsZSBmID1cbiAgdGFibGUuaW5pdGlhbGl6ZXJzIDwtIGY6OnRhYmxlLmluaXRpYWxpemVyc1xuXG4oKlxubW9kdWxlIEtleXMgPVxuICBNYXAuTWFrZShzdHJ1Y3QgdHlwZSB0ID0gdGFnIGFycmF5IGxldCBjb21wYXJlICh4OnQpIHkgPSBjb21wYXJlIHggeSBlbmQpXG5sZXQga2V5X21hcCA9IHJlZiBLZXlzLmVtcHR5XG5sZXQgZ2V0X2tleSB0YWdzIDogaXRlbSA9XG4gIHRyeSBtYWdpYyAoS2V5cy5maW5kIHRhZ3MgIWtleV9tYXAgOiB0YWcgYXJyYXkpXG4gIHdpdGggTm90X2ZvdW5kIC0+XG4gICAga2V5X21hcCA6PSBLZXlzLmFkZCB0YWdzIHRhZ3MgIWtleV9tYXA7XG4gICAgbWFnaWMgdGFnc1xuKilcblxubGV0IGNyZWF0ZV90YWJsZSBwdWJsaWNfbWV0aG9kcyA9XG4gIGlmIHB1YmxpY19tZXRob2RzID09IG1hZ2ljIDAgdGhlbiBuZXdfdGFibGUgW3x8XSBlbHNlXG4gICgqIFtwdWJsaWNfbWV0aG9kc10gbXVzdCBiZSBpbiBhc2NlbmRpbmcgb3JkZXIgZm9yIGJ5dGVjb2RlICopXG4gIGxldCB0YWdzID0gQXJyYXkubWFwIHB1YmxpY19tZXRob2RfbGFiZWwgcHVibGljX21ldGhvZHMgaW5cbiAgbGV0IHRhYmxlID0gbmV3X3RhYmxlIHRhZ3MgaW5cbiAgQXJyYXkuaXRlcmlcbiAgICAoZnVuIGkgbWV0IC0+XG4gICAgICBsZXQgbGFiID0gaSoyKzIgaW5cbiAgICAgIHRhYmxlLm1ldGhvZHNfYnlfbmFtZSAgPC0gTWV0aHMuYWRkIG1ldCBsYWIgdGFibGUubWV0aG9kc19ieV9uYW1lO1xuICAgICAgdGFibGUubWV0aG9kc19ieV9sYWJlbCA8LSBMYWJzLmFkZCBsYWIgdHJ1ZSB0YWJsZS5tZXRob2RzX2J5X2xhYmVsKVxuICAgIHB1YmxpY19tZXRob2RzO1xuICB0YWJsZVxuXG5sZXQgaW5pdF9jbGFzcyB0YWJsZSA9XG4gIGluc3RfdmFyX2NvdW50IDo9ICFpbnN0X3Zhcl9jb3VudCArIHRhYmxlLnNpemUgLSAxO1xuICB0YWJsZS5pbml0aWFsaXplcnMgPC0gTGlzdC5yZXYgdGFibGUuaW5pdGlhbGl6ZXJzO1xuICByZXNpemUgdGFibGUgKDMgKyBtYWdpYyB0YWJsZS5tZXRob2RzLigxKSAqIDE2IC8gU3lzLndvcmRfc2l6ZSlcblxubGV0IGluaGVyaXRzIGNsYSB2YWxzIHZpcnRfbWV0aHMgY29uY3JfbWV0aHMgKF8sIHN1cGVyLCBfLCBlbnYpIHRvcCA9XG4gIG5hcnJvdyBjbGEgdmFscyB2aXJ0X21ldGhzIGNvbmNyX21ldGhzO1xuICBsZXQgaW5pdCA9XG4gICAgaWYgdG9wIHRoZW4gc3VwZXIgY2xhIGVudiBlbHNlIE9iai5yZXByIChzdXBlciBjbGEpIGluXG4gIHdpZGVuIGNsYTtcbiAgQXJyYXkuY29uY2F0XG4gICAgW1t8IHJlcHIgaW5pdCB8XTtcbiAgICAgbWFnaWMgKEFycmF5Lm1hcCAoZ2V0X3ZhcmlhYmxlIGNsYSkgKHRvX2FycmF5IHZhbHMpIDogaW50IGFycmF5KTtcbiAgICAgQXJyYXkubWFwXG4gICAgICAgKGZ1biBubSAtPiByZXByIChnZXRfbWV0aG9kIGNsYSAoZ2V0X21ldGhvZF9sYWJlbCBjbGEgbm0pIDogY2xvc3VyZSkpXG4gICAgICAgKHRvX2FycmF5IGNvbmNyX21ldGhzKSBdXG5cbmxldCBtYWtlX2NsYXNzIHB1Yl9tZXRocyBjbGFzc19pbml0ID1cbiAgbGV0IHRhYmxlID0gY3JlYXRlX3RhYmxlIHB1Yl9tZXRocyBpblxuICBsZXQgZW52X2luaXQgPSBjbGFzc19pbml0IHRhYmxlIGluXG4gIGluaXRfY2xhc3MgdGFibGU7XG4gIChlbnZfaW5pdCAoT2JqLnJlcHIgMCksIGNsYXNzX2luaXQsIGVudl9pbml0LCBPYmoucmVwciAwKVxuXG50eXBlIGluaXRfdGFibGUgPSB7IG11dGFibGUgZW52X2luaXQ6IHQ7IG11dGFibGUgY2xhc3NfaW5pdDogdGFibGUgLT4gdCB9XG5bQEB3YXJuaW5nIFwiLXVudXNlZC1maWVsZFwiXVxuXG5sZXQgbWFrZV9jbGFzc19zdG9yZSBwdWJfbWV0aHMgY2xhc3NfaW5pdCBpbml0X3RhYmxlID1cbiAgbGV0IHRhYmxlID0gY3JlYXRlX3RhYmxlIHB1Yl9tZXRocyBpblxuICBsZXQgZW52X2luaXQgPSBjbGFzc19pbml0IHRhYmxlIGluXG4gIGluaXRfY2xhc3MgdGFibGU7XG4gIGluaXRfdGFibGUuY2xhc3NfaW5pdCA8LSBjbGFzc19pbml0O1xuICBpbml0X3RhYmxlLmVudl9pbml0IDwtIGVudl9pbml0XG5cbmxldCBkdW1teV9jbGFzcyBsb2MgPVxuICBsZXQgdW5kZWYgPSBmdW4gXyAtPiByYWlzZSAoVW5kZWZpbmVkX3JlY3Vyc2l2ZV9tb2R1bGUgbG9jKSBpblxuICAoT2JqLm1hZ2ljIHVuZGVmLCB1bmRlZiwgdW5kZWYsIE9iai5yZXByIDApXG5cbigqKioqIE9iamVjdHMgKioqKilcblxubGV0IGNyZWF0ZV9vYmplY3QgdGFibGUgPVxuICAoKiBYWFggQXBwZWwgZGUgW29ial9ibG9ja10gfCBDYWxsIHRvIFtvYmpfYmxvY2tdICAqKVxuICBsZXQgb2JqID0gT2JqLm5ld19ibG9jayBPYmoub2JqZWN0X3RhZyB0YWJsZS5zaXplIGluXG4gICgqIFhYWCBBcHBlbCBkZSBbY2FtbF9tb2RpZnldIHwgQ2FsbCB0byBbY2FtbF9tb2RpZnldICopXG4gIE9iai5zZXRfZmllbGQgb2JqIDAgKE9iai5yZXByIHRhYmxlLm1ldGhvZHMpO1xuICBPYmoub2JqIChzZXRfaWQgb2JqKVxuXG5sZXQgY3JlYXRlX29iamVjdF9vcHQgb2JqXzAgdGFibGUgPVxuICBpZiAoT2JqLm1hZ2ljIG9ial8wIDogYm9vbCkgdGhlbiBvYmpfMCBlbHNlIGJlZ2luXG4gICAgKCogWFhYIEFwcGVsIGRlIFtvYmpfYmxvY2tdIHwgQ2FsbCB0byBbb2JqX2Jsb2NrXSAgKilcbiAgICBsZXQgb2JqID0gT2JqLm5ld19ibG9jayBPYmoub2JqZWN0X3RhZyB0YWJsZS5zaXplIGluXG4gICAgKCogWFhYIEFwcGVsIGRlIFtjYW1sX21vZGlmeV0gfCBDYWxsIHRvIFtjYW1sX21vZGlmeV0gKilcbiAgICBPYmouc2V0X2ZpZWxkIG9iaiAwIChPYmoucmVwciB0YWJsZS5tZXRob2RzKTtcbiAgICBPYmoub2JqIChzZXRfaWQgb2JqKVxuICBlbmRcblxubGV0IHJlYyBpdGVyX2Ygb2JqID1cbiAgZnVuY3Rpb25cbiAgICBbXSAgIC0+ICgpXG4gIHwgZjo6bCAtPiBmIG9iajsgaXRlcl9mIG9iaiBsXG5cbmxldCBydW5faW5pdGlhbGl6ZXJzIG9iaiB0YWJsZSA9XG4gIGxldCBpbml0cyA9IHRhYmxlLmluaXRpYWxpemVycyBpblxuICBpZiBpbml0cyA8PiBbXSB0aGVuXG4gICAgaXRlcl9mIG9iaiBpbml0c1xuXG5sZXQgcnVuX2luaXRpYWxpemVyc19vcHQgb2JqXzAgb2JqIHRhYmxlID1cbiAgaWYgKE9iai5tYWdpYyBvYmpfMCA6IGJvb2wpIHRoZW4gb2JqIGVsc2UgYmVnaW5cbiAgICBsZXQgaW5pdHMgPSB0YWJsZS5pbml0aWFsaXplcnMgaW5cbiAgICBpZiBpbml0cyA8PiBbXSB0aGVuIGl0ZXJfZiBvYmogaW5pdHM7XG4gICAgb2JqXG4gIGVuZFxuXG5sZXQgY3JlYXRlX29iamVjdF9hbmRfcnVuX2luaXRpYWxpemVycyBvYmpfMCB0YWJsZSA9XG4gIGlmIChPYmoubWFnaWMgb2JqXzAgOiBib29sKSB0aGVuIG9ial8wIGVsc2UgYmVnaW5cbiAgICBsZXQgb2JqID0gY3JlYXRlX29iamVjdCB0YWJsZSBpblxuICAgIHJ1bl9pbml0aWFsaXplcnMgb2JqIHRhYmxlO1xuICAgIG9ialxuICBlbmRcblxuKCogRXF1aXZhbGVudCBwcmltaXRpdmUgYmVsb3dcbmxldCBzZW5kc2VsZiBvYmogbGFiID1cbiAgKG1hZ2ljIG9iaiA6IChvYmogLT4gdCkgYXJyYXkgYXJyYXkpLigwKS4obGFiKSBvYmpcbiopXG5leHRlcm5hbCBzZW5kIDogb2JqIC0+IHRhZyAtPiAnYSA9IFwiJXNlbmRcIlxuZXh0ZXJuYWwgc2VuZGNhY2hlIDogb2JqIC0+IHRhZyAtPiB0IC0+IGludCAtPiAnYSA9IFwiJXNlbmRjYWNoZVwiXG5leHRlcm5hbCBzZW5kc2VsZiA6IG9iaiAtPiBsYWJlbCAtPiAnYSA9IFwiJXNlbmRzZWxmXCJcbmV4dGVybmFsIGdldF9wdWJsaWNfbWV0aG9kIDogb2JqIC0+IHRhZyAtPiBjbG9zdXJlXG4gICAgPSBcImNhbWxfZ2V0X3B1YmxpY19tZXRob2RcIiBbQEBub2FsbG9jXVxuXG4oKioqKiB0YWJsZSBjb2xsZWN0aW9uIGFjY2VzcyAqKioqKVxuXG50eXBlIHRhYmxlcyA9XG4gIHwgRW1wdHlcbiAgfCBDb25zIG9mIHtrZXkgOiBjbG9zdXJlOyBtdXRhYmxlIGRhdGE6IHRhYmxlczsgbXV0YWJsZSBuZXh0OiB0YWJsZXN9XG5cbmxldCBzZXRfZGF0YSB0YWJsZXMgdiA9IG1hdGNoIHRhYmxlcyB3aXRoXG4gIHwgRW1wdHkgLT4gYXNzZXJ0IGZhbHNlXG4gIHwgQ29ucyB0YWJsZXMgLT4gdGFibGVzLmRhdGEgPC0gdlxubGV0IHNldF9uZXh0IHRhYmxlcyB2ID0gbWF0Y2ggdGFibGVzIHdpdGhcbiAgfCBFbXB0eSAtPiBhc3NlcnQgZmFsc2VcbiAgfCBDb25zIHRhYmxlcyAtPiB0YWJsZXMubmV4dCA8LSB2XG5sZXQgZ2V0X2tleSA9IGZ1bmN0aW9uXG4gIHwgRW1wdHkgLT4gYXNzZXJ0IGZhbHNlXG4gIHwgQ29ucyB0YWJsZXMgLT4gdGFibGVzLmtleVxubGV0IGdldF9kYXRhID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPiBhc3NlcnQgZmFsc2VcbiAgfCBDb25zIHRhYmxlcyAtPiB0YWJsZXMuZGF0YVxubGV0IGdldF9uZXh0ID0gZnVuY3Rpb25cbiAgfCBFbXB0eSAtPiBhc3NlcnQgZmFsc2VcbiAgfCBDb25zIHRhYmxlcyAtPiB0YWJsZXMubmV4dFxuXG5sZXQgYnVpbGRfcGF0aCBuIGtleXMgdGFibGVzID1cbiAgbGV0IHJlcyA9IENvbnMge2tleSA9IE9iai5tYWdpYyAwOyBkYXRhID0gRW1wdHk7IG5leHQgPSBFbXB0eX0gaW5cbiAgbGV0IHIgPSByZWYgcmVzIGluXG4gIGZvciBpID0gMCB0byBuIGRvXG4gICAgciA6PSBDb25zIHtrZXkgPSBrZXlzLihpKTsgZGF0YSA9ICFyOyBuZXh0ID0gRW1wdHl9XG4gIGRvbmU7XG4gIHNldF9kYXRhIHRhYmxlcyAhcjtcbiAgcmVzXG5cbmxldCByZWMgbG9va3VwX2tleXMgaSBrZXlzIHRhYmxlcyA9XG4gIGlmIGkgPCAwIHRoZW4gdGFibGVzIGVsc2VcbiAgbGV0IGtleSA9IGtleXMuKGkpIGluXG4gIGxldCByZWMgbG9va3VwX2tleSAodGFibGVzOnRhYmxlcykgPVxuICAgIGlmIGdldF9rZXkgdGFibGVzID09IGtleSB0aGVuXG4gICAgICBtYXRjaCBnZXRfZGF0YSB0YWJsZXMgd2l0aFxuICAgICAgfCBFbXB0eSAtPiBhc3NlcnQgZmFsc2VcbiAgICAgIHwgQ29ucyBfIGFzIHRhYmxlc19kYXRhIC0+XG4gICAgICAgICAgbG9va3VwX2tleXMgKGktMSkga2V5cyB0YWJsZXNfZGF0YVxuICAgIGVsc2VcbiAgICAgIG1hdGNoIGdldF9uZXh0IHRhYmxlcyB3aXRoXG4gICAgICB8IENvbnMgXyBhcyBuZXh0IC0+IGxvb2t1cF9rZXkgbmV4dFxuICAgICAgfCBFbXB0eSAtPlxuICAgICAgICAgIGxldCBuZXh0IDogdGFibGVzID0gQ29ucyB7a2V5OyBkYXRhID0gRW1wdHk7IG5leHQgPSBFbXB0eX0gaW5cbiAgICAgICAgICBzZXRfbmV4dCB0YWJsZXMgbmV4dDtcbiAgICAgICAgICBidWlsZF9wYXRoIChpLTEpIGtleXMgbmV4dFxuICBpblxuICBsb29rdXBfa2V5IHRhYmxlc1xuXG5sZXQgbG9va3VwX3RhYmxlcyByb290IGtleXMgPVxuICBtYXRjaCBnZXRfZGF0YSByb290IHdpdGhcbiAgfCBDb25zIF8gYXMgcm9vdF9kYXRhIC0+XG4gICAgbG9va3VwX2tleXMgKEFycmF5Lmxlbmd0aCBrZXlzIC0gMSkga2V5cyByb290X2RhdGFcbiAgfCBFbXB0eSAtPlxuICAgIGJ1aWxkX3BhdGggKEFycmF5Lmxlbmd0aCBrZXlzIC0gMSkga2V5cyByb290XG5cbigqKioqIGJ1aWx0aW4gbWV0aG9kcyAqKioqKVxuXG5sZXQgZ2V0X2NvbnN0IHggPSByZXQgKGZ1biBfb2JqIC0+IHgpXG5sZXQgZ2V0X3ZhciBuICAgPSByZXQgKGZ1biBvYmogLT4gQXJyYXkudW5zYWZlX2dldCBvYmogbilcbmxldCBnZXRfZW52IGUgbiA9XG4gIHJldCAoZnVuIG9iaiAtPlxuICAgIEFycmF5LnVuc2FmZV9nZXQgKE9iai5tYWdpYyAoQXJyYXkudW5zYWZlX2dldCBvYmogZSkgOiBvYmopIG4pXG5sZXQgZ2V0X21ldGggbiAgPSByZXQgKGZ1biBvYmogLT4gc2VuZHNlbGYgb2JqIG4pXG5sZXQgc2V0X3ZhciBuICAgPSByZXQgKGZ1biBvYmogeCAtPiBBcnJheS51bnNhZmVfc2V0IG9iaiBuIHgpXG5sZXQgYXBwX2NvbnN0IGYgeCA9IHJldCAoZnVuIF9vYmogLT4gZiB4KVxubGV0IGFwcF92YXIgZiBuICAgPSByZXQgKGZ1biBvYmogLT4gZiAoQXJyYXkudW5zYWZlX2dldCBvYmogbikpXG5sZXQgYXBwX2VudiBmIGUgbiA9XG4gIHJldCAoZnVuIG9iaiAtPlxuICAgIGYgKEFycmF5LnVuc2FmZV9nZXQgKE9iai5tYWdpYyAoQXJyYXkudW5zYWZlX2dldCBvYmogZSkgOiBvYmopIG4pKVxubGV0IGFwcF9tZXRoIGYgbiAgPSByZXQgKGZ1biBvYmogLT4gZiAoc2VuZHNlbGYgb2JqIG4pKVxubGV0IGFwcF9jb25zdF9jb25zdCBmIHggeSA9IHJldCAoZnVuIF9vYmogLT4gZiB4IHkpXG5sZXQgYXBwX2NvbnN0X3ZhciBmIHggbiAgID0gcmV0IChmdW4gb2JqIC0+IGYgeCAoQXJyYXkudW5zYWZlX2dldCBvYmogbikpXG5sZXQgYXBwX2NvbnN0X21ldGggZiB4IG4gPSByZXQgKGZ1biBvYmogLT4gZiB4IChzZW5kc2VsZiBvYmogbikpXG5sZXQgYXBwX3Zhcl9jb25zdCBmIG4geCA9IHJldCAoZnVuIG9iaiAtPiBmIChBcnJheS51bnNhZmVfZ2V0IG9iaiBuKSB4KVxubGV0IGFwcF9tZXRoX2NvbnN0IGYgbiB4ID0gcmV0IChmdW4gb2JqIC0+IGYgKHNlbmRzZWxmIG9iaiBuKSB4KVxubGV0IGFwcF9jb25zdF9lbnYgZiB4IGUgbiA9XG4gIHJldCAoZnVuIG9iaiAtPlxuICAgIGYgeCAoQXJyYXkudW5zYWZlX2dldCAoT2JqLm1hZ2ljIChBcnJheS51bnNhZmVfZ2V0IG9iaiBlKSA6IG9iaikgbikpXG5sZXQgYXBwX2Vudl9jb25zdCBmIGUgbiB4ID1cbiAgcmV0IChmdW4gb2JqIC0+XG4gICAgZiAoQXJyYXkudW5zYWZlX2dldCAoT2JqLm1hZ2ljIChBcnJheS51bnNhZmVfZ2V0IG9iaiBlKSA6IG9iaikgbikgeClcbmxldCBtZXRoX2FwcF9jb25zdCBuIHggPSByZXQgKGZ1biBvYmogLT4gKHNlbmRzZWxmIG9iaiBuIDogXyAtPiBfKSB4KVxubGV0IG1ldGhfYXBwX3ZhciBuIG0gPVxuICByZXQgKGZ1biBvYmogLT4gKHNlbmRzZWxmIG9iaiBuIDogXyAtPiBfKSAoQXJyYXkudW5zYWZlX2dldCBvYmogbSkpXG5sZXQgbWV0aF9hcHBfZW52IG4gZSBtID1cbiAgcmV0IChmdW4gb2JqIC0+IChzZW5kc2VsZiBvYmogbiA6IF8gLT4gXylcbiAgICAgIChBcnJheS51bnNhZmVfZ2V0IChPYmoubWFnaWMgKEFycmF5LnVuc2FmZV9nZXQgb2JqIGUpIDogb2JqKSBtKSlcbmxldCBtZXRoX2FwcF9tZXRoIG4gbSA9XG4gIHJldCAoZnVuIG9iaiAtPiAoc2VuZHNlbGYgb2JqIG4gOiBfIC0+IF8pIChzZW5kc2VsZiBvYmogbSkpXG5sZXQgc2VuZF9jb25zdCBtIHggYyA9XG4gIHJldCAoZnVuIG9iaiAtPiBzZW5kY2FjaGUgeCBtIChBcnJheS51bnNhZmVfZ2V0IG9iaiAwKSBjKVxubGV0IHNlbmRfdmFyIG0gbiBjID1cbiAgcmV0IChmdW4gb2JqIC0+XG4gICAgc2VuZGNhY2hlIChPYmoubWFnaWMgKEFycmF5LnVuc2FmZV9nZXQgb2JqIG4pIDogb2JqKSBtXG4gICAgICAoQXJyYXkudW5zYWZlX2dldCBvYmogMCkgYylcbmxldCBzZW5kX2VudiBtIGUgbiBjID1cbiAgcmV0IChmdW4gb2JqIC0+XG4gICAgc2VuZGNhY2hlXG4gICAgICAoT2JqLm1hZ2ljIChBcnJheS51bnNhZmVfZ2V0XG4gICAgICAgICAgICAgICAgICAgIChPYmoubWFnaWMgKEFycmF5LnVuc2FmZV9nZXQgb2JqIGUpIDogb2JqKSBuKSA6IG9iailcbiAgICAgIG0gKEFycmF5LnVuc2FmZV9nZXQgb2JqIDApIGMpXG5sZXQgc2VuZF9tZXRoIG0gbiBjID1cbiAgcmV0IChmdW4gb2JqIC0+XG4gICAgc2VuZGNhY2hlIChzZW5kc2VsZiBvYmogbikgbSAoQXJyYXkudW5zYWZlX2dldCBvYmogMCkgYylcbmxldCBuZXdfY2FjaGUgdGFibGUgPVxuICBsZXQgbiA9IG5ld19tZXRob2QgdGFibGUgaW5cbiAgbGV0IG4gPVxuICAgIGlmIG4gbW9kIDIgPSAwIHx8IG4gPiAyICsgbWFnaWMgdGFibGUubWV0aG9kcy4oMSkgKiAxNiAvIFN5cy53b3JkX3NpemVcbiAgICB0aGVuIG4gZWxzZSBuZXdfbWV0aG9kIHRhYmxlXG4gIGluXG4gIHRhYmxlLm1ldGhvZHMuKG4pIDwtIE9iai5tYWdpYyAwO1xuICBuXG5cbnR5cGUgaW1wbCA9XG4gICAgR2V0Q29uc3RcbiAgfCBHZXRWYXJcbiAgfCBHZXRFbnZcbiAgfCBHZXRNZXRoXG4gIHwgU2V0VmFyXG4gIHwgQXBwQ29uc3RcbiAgfCBBcHBWYXJcbiAgfCBBcHBFbnZcbiAgfCBBcHBNZXRoXG4gIHwgQXBwQ29uc3RDb25zdFxuICB8IEFwcENvbnN0VmFyXG4gIHwgQXBwQ29uc3RFbnZcbiAgfCBBcHBDb25zdE1ldGhcbiAgfCBBcHBWYXJDb25zdFxuICB8IEFwcEVudkNvbnN0XG4gIHwgQXBwTWV0aENvbnN0XG4gIHwgTWV0aEFwcENvbnN0XG4gIHwgTWV0aEFwcFZhclxuICB8IE1ldGhBcHBFbnZcbiAgfCBNZXRoQXBwTWV0aFxuICB8IFNlbmRDb25zdFxuICB8IFNlbmRWYXJcbiAgfCBTZW5kRW52XG4gIHwgU2VuZE1ldGhcbiAgfCBDbG9zdXJlIG9mIGNsb3N1cmVcblxubGV0IG1ldGhvZF9pbXBsIHRhYmxlIGkgYXJyID1cbiAgbGV0IG5leHQgKCkgPSBpbmNyIGk7IG1hZ2ljIGFyci4oIWkpIGluXG4gIG1hdGNoIG5leHQoKSB3aXRoXG4gICAgR2V0Q29uc3QgLT4gbGV0IHggOiB0ID0gbmV4dCgpIGluIGdldF9jb25zdCB4XG4gIHwgR2V0VmFyICAgLT4gbGV0IG4gPSBuZXh0KCkgaW4gZ2V0X3ZhciBuXG4gIHwgR2V0RW52ICAgLT4gbGV0IGUgPSBuZXh0KCkgaW4gbGV0IG4gPSBuZXh0KCkgaW4gZ2V0X2VudiBlIG5cbiAgfCBHZXRNZXRoICAtPiBsZXQgbiA9IG5leHQoKSBpbiBnZXRfbWV0aCBuXG4gIHwgU2V0VmFyICAgLT4gbGV0IG4gPSBuZXh0KCkgaW4gc2V0X3ZhciBuXG4gIHwgQXBwQ29uc3QgLT4gbGV0IGYgPSBuZXh0KCkgaW4gbGV0IHggPSBuZXh0KCkgaW4gYXBwX2NvbnN0IGYgeFxuICB8IEFwcFZhciAgIC0+IGxldCBmID0gbmV4dCgpIGluIGxldCBuID0gbmV4dCAoKSBpbiBhcHBfdmFyIGYgblxuICB8IEFwcEVudiAgIC0+XG4gICAgICBsZXQgZiA9IG5leHQoKSBpbiAgbGV0IGUgPSBuZXh0KCkgaW4gbGV0IG4gPSBuZXh0KCkgaW5cbiAgICAgIGFwcF9lbnYgZiBlIG5cbiAgfCBBcHBNZXRoICAtPiBsZXQgZiA9IG5leHQoKSBpbiBsZXQgbiA9IG5leHQgKCkgaW4gYXBwX21ldGggZiBuXG4gIHwgQXBwQ29uc3RDb25zdCAtPlxuICAgICAgbGV0IGYgPSBuZXh0KCkgaW4gbGV0IHggPSBuZXh0KCkgaW4gbGV0IHkgPSBuZXh0KCkgaW5cbiAgICAgIGFwcF9jb25zdF9jb25zdCBmIHggeVxuICB8IEFwcENvbnN0VmFyIC0+XG4gICAgICBsZXQgZiA9IG5leHQoKSBpbiBsZXQgeCA9IG5leHQoKSBpbiBsZXQgbiA9IG5leHQoKSBpblxuICAgICAgYXBwX2NvbnN0X3ZhciBmIHggblxuICB8IEFwcENvbnN0RW52IC0+XG4gICAgICBsZXQgZiA9IG5leHQoKSBpbiBsZXQgeCA9IG5leHQoKSBpbiBsZXQgZSA9IG5leHQgKCkgaW4gbGV0IG4gPSBuZXh0KCkgaW5cbiAgICAgIGFwcF9jb25zdF9lbnYgZiB4IGUgblxuICB8IEFwcENvbnN0TWV0aCAtPlxuICAgICAgbGV0IGYgPSBuZXh0KCkgaW4gbGV0IHggPSBuZXh0KCkgaW4gbGV0IG4gPSBuZXh0KCkgaW5cbiAgICAgIGFwcF9jb25zdF9tZXRoIGYgeCBuXG4gIHwgQXBwVmFyQ29uc3QgLT5cbiAgICAgIGxldCBmID0gbmV4dCgpIGluIGxldCBuID0gbmV4dCgpIGluIGxldCB4ID0gbmV4dCgpIGluXG4gICAgICBhcHBfdmFyX2NvbnN0IGYgbiB4XG4gIHwgQXBwRW52Q29uc3QgLT5cbiAgICAgIGxldCBmID0gbmV4dCgpIGluIGxldCBlID0gbmV4dCAoKSBpbiBsZXQgbiA9IG5leHQoKSBpbiBsZXQgeCA9IG5leHQoKSBpblxuICAgICAgYXBwX2Vudl9jb25zdCBmIGUgbiB4XG4gIHwgQXBwTWV0aENvbnN0IC0+XG4gICAgICBsZXQgZiA9IG5leHQoKSBpbiBsZXQgbiA9IG5leHQoKSBpbiBsZXQgeCA9IG5leHQoKSBpblxuICAgICAgYXBwX21ldGhfY29uc3QgZiBuIHhcbiAgfCBNZXRoQXBwQ29uc3QgLT5cbiAgICAgIGxldCBuID0gbmV4dCgpIGluIGxldCB4ID0gbmV4dCgpIGluIG1ldGhfYXBwX2NvbnN0IG4geFxuICB8IE1ldGhBcHBWYXIgLT5cbiAgICAgIGxldCBuID0gbmV4dCgpIGluIGxldCBtID0gbmV4dCgpIGluIG1ldGhfYXBwX3ZhciBuIG1cbiAgfCBNZXRoQXBwRW52IC0+XG4gICAgICBsZXQgbiA9IG5leHQoKSBpbiBsZXQgZSA9IG5leHQoKSBpbiBsZXQgbSA9IG5leHQoKSBpblxuICAgICAgbWV0aF9hcHBfZW52IG4gZSBtXG4gIHwgTWV0aEFwcE1ldGggLT5cbiAgICAgIGxldCBuID0gbmV4dCgpIGluIGxldCBtID0gbmV4dCgpIGluIG1ldGhfYXBwX21ldGggbiBtXG4gIHwgU2VuZENvbnN0IC0+XG4gICAgICBsZXQgbSA9IG5leHQoKSBpbiBsZXQgeCA9IG5leHQoKSBpbiBzZW5kX2NvbnN0IG0geCAobmV3X2NhY2hlIHRhYmxlKVxuICB8IFNlbmRWYXIgLT5cbiAgICAgIGxldCBtID0gbmV4dCgpIGluIGxldCBuID0gbmV4dCAoKSBpbiBzZW5kX3ZhciBtIG4gKG5ld19jYWNoZSB0YWJsZSlcbiAgfCBTZW5kRW52IC0+XG4gICAgICBsZXQgbSA9IG5leHQoKSBpbiBsZXQgZSA9IG5leHQoKSBpbiBsZXQgbiA9IG5leHQoKSBpblxuICAgICAgc2VuZF9lbnYgbSBlIG4gKG5ld19jYWNoZSB0YWJsZSlcbiAgfCBTZW5kTWV0aCAtPlxuICAgICAgbGV0IG0gPSBuZXh0KCkgaW4gbGV0IG4gPSBuZXh0ICgpIGluIHNlbmRfbWV0aCBtIG4gKG5ld19jYWNoZSB0YWJsZSlcbiAgfCBDbG9zdXJlIF8gYXMgY2xvIC0+IG1hZ2ljIGNsb1xuXG5sZXQgc2V0X21ldGhvZHMgdGFibGUgbWV0aG9kcyA9XG4gIGxldCBsZW4gPSBBcnJheS5sZW5ndGggbWV0aG9kcyBpbiBsZXQgaSA9IHJlZiAwIGluXG4gIHdoaWxlICFpIDwgbGVuIGRvXG4gICAgbGV0IGxhYmVsID0gbWV0aG9kcy4oIWkpIGluIGxldCBjbG8gPSBtZXRob2RfaW1wbCB0YWJsZSBpIG1ldGhvZHMgaW5cbiAgICBzZXRfbWV0aG9kIHRhYmxlIGxhYmVsIGNsbztcbiAgICBpbmNyIGlcbiAgZG9uZVxuXG4oKioqKiBTdGF0aXN0aWNzICoqKiopXG5cbnR5cGUgc3RhdHMgPVxuICB7IGNsYXNzZXM6IGludDsgbWV0aG9kczogaW50OyBpbnN0X3ZhcnM6IGludDsgfVxuXG5sZXQgc3RhdHMgKCkgPVxuICB7IGNsYXNzZXMgPSAhdGFibGVfY291bnQ7XG4gICAgbWV0aG9kcyA9ICFtZXRob2RfY291bnQ7IGluc3RfdmFycyA9ICFpbnN0X3Zhcl9jb3VudDsgfVxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgWGF2aWVyIExlcm95LCBwcm9qZXQgQ3Jpc3RhbCwgSU5SSUEgUm9jcXVlbmNvdXJ0ICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMjAwNCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG50eXBlIHNoYXBlID1cbiAgfCBGdW5jdGlvblxuICB8IExhenlcbiAgfCBDbGFzc1xuICB8IE1vZHVsZSBvZiBzaGFwZSBhcnJheVxuICB8IFZhbHVlIG9mIE9iai50XG5cbmxldCByZWMgaW5pdF9tb2RfZmllbGQgbW9kdSBpIGxvYyBzaGFwZSA9XG4gIGxldCBpbml0ID1cbiAgICBtYXRjaCBzaGFwZSB3aXRoXG4gICAgfCBGdW5jdGlvbiAtPlxuICAgICAgIGxldCByZWMgZm4gKHggOiAnYSkgPVxuICAgICAgICAgbGV0IGZuJyA6ICdhIC0+ICdiID0gT2JqLm9iaiAoT2JqLmZpZWxkIG1vZHUgaSkgaW5cbiAgICAgICAgIGlmIGZuID09IGZuJyB0aGVuXG4gICAgICAgICAgIHJhaXNlIChVbmRlZmluZWRfcmVjdXJzaXZlX21vZHVsZSBsb2MpXG4gICAgICAgICBlbHNlXG4gICAgICAgICAgIGZuJyB4IGluXG4gICAgICAgT2JqLnJlcHIgZm5cbiAgICB8IExhenkgLT5cbiAgICAgICBsZXQgcmVjIGwgPVxuICAgICAgICAgbGF6eSAoXG4gICAgICAgICAgIGxldCBsJyA9IE9iai5vYmogKE9iai5maWVsZCBtb2R1IGkpIGluXG4gICAgICAgICAgIGlmIGwgPT0gbCcgdGhlblxuICAgICAgICAgICAgIHJhaXNlIChVbmRlZmluZWRfcmVjdXJzaXZlX21vZHVsZSBsb2MpXG4gICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICBMYXp5LmZvcmNlIGwnKSBpblxuICAgICAgIE9iai5yZXByIGxcbiAgICB8IENsYXNzIC0+XG4gICAgICAgT2JqLnJlcHIgKENhbWxpbnRlcm5hbE9PLmR1bW15X2NsYXNzIGxvYylcbiAgICB8IE1vZHVsZSBjb21wcyAtPlxuICAgICAgIE9iai5yZXByIChpbml0X21vZF9ibG9jayBsb2MgY29tcHMpXG4gICAgfCBWYWx1ZSB2IC0+IHZcbiAgaW5cbiAgT2JqLnNldF9maWVsZCBtb2R1IGkgaW5pdFxuXG5hbmQgaW5pdF9tb2RfYmxvY2sgbG9jIGNvbXBzID1cbiAgbGV0IGxlbmd0aCA9IEFycmF5Lmxlbmd0aCBjb21wcyBpblxuICBsZXQgbW9kdSA9IE9iai5uZXdfYmxvY2sgMCBsZW5ndGggaW5cbiAgZm9yIGkgPSAwIHRvIGxlbmd0aCAtIDEgZG9cbiAgICBpbml0X21vZF9maWVsZCBtb2R1IGkgbG9jIGNvbXBzLihpKVxuICBkb25lO1xuICBtb2R1XG5cbmxldCBpbml0X21vZCBsb2Mgc2hhcGUgPVxuICBtYXRjaCBzaGFwZSB3aXRoXG4gIHwgTW9kdWxlIGNvbXBzIC0+XG4gICAgIE9iai5yZXByIChpbml0X21vZF9ibG9jayBsb2MgY29tcHMpXG4gIHwgXyAtPiBmYWlsd2l0aCBcIkNhbWxpbnRlcm5hbE1vZC5pbml0X21vZDogbm90IGEgbW9kdWxlXCJcblxubGV0IHJlYyB1cGRhdGVfbW9kX2ZpZWxkIG1vZHUgaSBzaGFwZSBuID1cbiAgbWF0Y2ggc2hhcGUgd2l0aFxuICB8IEZ1bmN0aW9uIHwgTGF6eSAtPlxuICAgICBPYmouc2V0X2ZpZWxkIG1vZHUgaSBuXG4gIHwgVmFsdWUgXyAtPlxuICAgICAoKSAoKiB0aGUgdmFsdWUgaXMgYWxyZWFkeSB0aGVyZSAqKVxuICB8IENsYXNzIC0+XG4gICAgIGFzc2VydCAoT2JqLnRhZyBuID0gMCAmJiBPYmouc2l6ZSBuID0gNCk7XG4gICAgIGxldCBjbCA9IE9iai5maWVsZCBtb2R1IGkgaW5cbiAgICAgZm9yIGogPSAwIHRvIDMgZG9cbiAgICAgICBPYmouc2V0X2ZpZWxkIGNsIGogKE9iai5maWVsZCBuIGopXG4gICAgIGRvbmVcbiAgfCBNb2R1bGUgY29tcHMgLT5cbiAgICAgdXBkYXRlX21vZF9ibG9jayBjb21wcyAoT2JqLmZpZWxkIG1vZHUgaSkgblxuXG5hbmQgdXBkYXRlX21vZF9ibG9jayBjb21wcyBvIG4gPVxuICBhc3NlcnQgKE9iai50YWcgbiA9IDAgJiYgT2JqLnNpemUgbiA+PSBBcnJheS5sZW5ndGggY29tcHMpO1xuICBmb3IgaSA9IDAgdG8gQXJyYXkubGVuZ3RoIGNvbXBzIC0gMSBkb1xuICAgIHVwZGF0ZV9tb2RfZmllbGQgbyBpIGNvbXBzLihpKSAoT2JqLmZpZWxkIG4gaSlcbiAgZG9uZVxuXG5sZXQgdXBkYXRlX21vZCBzaGFwZSBvIG4gPVxuICBtYXRjaCBzaGFwZSB3aXRoXG4gIHwgTW9kdWxlIGNvbXBzIC0+XG4gICAgIHVwZGF0ZV9tb2RfYmxvY2sgY29tcHMgbyBuXG4gIHwgXyAtPiBmYWlsd2l0aCBcIkNhbWxpbnRlcm5hbE1vZC51cGRhdGVfbW9kOiBub3QgYSBtb2R1bGVcIlxuIiwiKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPQ2FtbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICBYYXZpZXIgTGVyb3ksIHByb2pldCBDcmlzdGFsLCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBDb3B5cmlnaHQgMTk5NiBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0ICAgICAqKVxuKCogICAgIGVuIEF1dG9tYXRpcXVlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCogICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiAgICAqKVxuKCogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4xLCB3aXRoIHRoZSAgICAgICAgICAqKVxuKCogICBzcGVjaWFsIGV4Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiB0aGUgZmlsZSBMSUNFTlNFLiAgICAgICAgICAqKVxuKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKVxuKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKVxuXG50eXBlIHRva2VuID1cbiAgICBLd2Qgb2Ygc3RyaW5nXG4gIHwgSWRlbnQgb2Ygc3RyaW5nXG4gIHwgSW50IG9mIGludFxuICB8IEZsb2F0IG9mIGZsb2F0XG4gIHwgU3RyaW5nIG9mIHN0cmluZ1xuICB8IENoYXIgb2YgY2hhclxuXG4oKiBUaGUgc3RyaW5nIGJ1ZmZlcmluZyBtYWNoaW5lcnkgKilcblxubGV0IGluaXRpYWxfYnVmZmVyID0gQnl0ZXMuY3JlYXRlIDMyXG5cbmxldCBidWZmZXIgPSByZWYgaW5pdGlhbF9idWZmZXJcbmxldCBidWZwb3MgPSByZWYgMFxuXG5sZXQgcmVzZXRfYnVmZmVyICgpID0gYnVmZmVyIDo9IGluaXRpYWxfYnVmZmVyOyBidWZwb3MgOj0gMFxuXG5sZXQgc3RvcmUgYyA9XG4gIGlmICFidWZwb3MgPj0gQnl0ZXMubGVuZ3RoICFidWZmZXIgdGhlbiBiZWdpblxuICAgIGxldCBuZXdidWZmZXIgPSBCeXRlcy5jcmVhdGUgKDIgKiAhYnVmcG9zKSBpblxuICAgIEJ5dGVzLmJsaXQgIWJ1ZmZlciAwIG5ld2J1ZmZlciAwICFidWZwb3M7XG4gICAgYnVmZmVyIDo9IG5ld2J1ZmZlclxuICBlbmQ7XG4gIEJ5dGVzLnNldCAhYnVmZmVyICFidWZwb3MgYztcbiAgaW5jciBidWZwb3NcblxubGV0IGdldF9zdHJpbmcgKCkgPVxuICBsZXQgcyA9IEJ5dGVzLnN1Yl9zdHJpbmcgIWJ1ZmZlciAwICFidWZwb3MgaW4gYnVmZmVyIDo9IGluaXRpYWxfYnVmZmVyOyBzXG5cbigqIFRoZSBsZXhlciAqKVxuXG5sZXQgbWFrZV9sZXhlciBrZXl3b3JkcyA9XG4gIGxldCBrd2RfdGFibGUgPSBIYXNodGJsLmNyZWF0ZSAxNyBpblxuICBMaXN0Lml0ZXIgKGZ1biBzIC0+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+IG5leHRfdG9rZW4gaW5wdXQpXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICBEYW1pZW4gRG9saWdleiwgcHJvamV0IFBhcmEsIElOUklBIFJvY3F1ZW5jb3VydCAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAxOTk3IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbm1vZHVsZSB0eXBlIFNlZWRlZFMgPSBzaWdcbiAgaW5jbHVkZSBIYXNodGJsLlNlZWRlZFNcbiAgdmFsIGNsZWFuOiAnYSB0IC0+IHVuaXRcbiAgdmFsIHN0YXRzX2FsaXZlOiAnYSB0IC0+IEhhc2h0Ymwuc3RhdGlzdGljc1xuICAgICgqKiBzYW1lIGFzIHshc3RhdHN9IGJ1dCBvbmx5IGNvdW50IHRoZSBhbGl2ZSBiaW5kaW5ncyAqKVxuZW5kXG5cbm1vZHVsZSB0eXBlIFMgPSBzaWdcbiAgaW5jbHVkZSBIYXNodGJsLlNcbiAgdmFsIGNsZWFuOiAnYSB0IC0+IHVuaXRcbiAgdmFsIHN0YXRzX2FsaXZlOiAnYSB0IC0+IEhhc2h0Ymwuc3RhdGlzdGljc1xuICAgICgqKiBzYW1lIGFzIHshc3RhdHN9IGJ1dCBvbmx5IGNvdW50IHRoZSBhbGl2ZSBiaW5kaW5ncyAqKVxuZW5kXG5cbm1vZHVsZSBHZW5IYXNoVGFibGUgPSBzdHJ1Y3RcblxuICB0eXBlIGVxdWFsID1cbiAgfCBFVHJ1ZSB8IEVGYWxzZVxuICB8IEVEZWFkICgqKiB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IgcmVjbGFpbWVkIHRoZSBkYXRhICopXG5cbiAgbW9kdWxlIE1ha2VTZWVkZWQoSDogc2lnXG4gICAgdHlwZSB0XG4gICAgdHlwZSAnYSBjb250YWluZXJcbiAgICB2YWwgY3JlYXRlOiB0IC0+ICdhIC0+ICdhIGNvbnRhaW5lclxuICAgIHZhbCBoYXNoOiBpbnQgLT4gdCAtPiBpbnRcbiAgICB2YWwgZXF1YWw6ICdhIGNvbnRhaW5lciAtPiB0IC0+IGVxdWFsXG4gICAgdmFsIGdldF9kYXRhOiAnYSBjb250YWluZXIgLT4gJ2Egb3B0aW9uXG4gICAgdmFsIGdldF9rZXk6ICdhIGNvbnRhaW5lciAtPiB0IG9wdGlvblxuICAgIHZhbCBzZXRfa2V5X2RhdGE6ICdhIGNvbnRhaW5lciAtPiB0IC0+ICdhIC0+IHVuaXRcbiAgICB2YWwgY2hlY2tfa2V5OiAnYSBjb250YWluZXIgLT4gYm9vbFxuICBlbmQpIDogU2VlZGVkUyB3aXRoIHR5cGUga2V5ID0gSC50XG4gID0gc3RydWN0XG5cbiAgICB0eXBlICdhIHQgPVxuICAgICAgeyBtdXRhYmxlIHNpemU6IGludDsgICAgICAgICAgICAgICAgICAoKiBudW1iZXIgb2YgZW50cmllcyAqKVxuICAgICAgICBtdXRhYmxlIGRhdGE6ICdhIGJ1Y2tldGxpc3QgYXJyYXk7ICAoKiB0aGUgYnVja2V0cyAqKVxuICAgICAgICBzZWVkOiBpbnQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAoKiBmb3IgcmFuZG9taXphdGlvbiAqKVxuICAgICAgICBpbml0aWFsX3NpemU6IGludDsgICAgICAgICAgICAgICAgICAoKiBpbml0aWFsIGFycmF5IHNpemUgKilcbiAgICAgIH1cblxuICAgIGFuZCAnYSBidWNrZXRsaXN0ID1cbiAgICB8IEVtcHR5XG4gICAgfCBDb25zIG9mIGludCAoKiBoYXNoIG9mIHRoZSBrZXkgKikgKiAnYSBILmNvbnRhaW5lciAqICdhIGJ1Y2tldGxpc3RcblxuICAgICgqKiB0aGUgaGFzaCBvZiB0aGUga2V5IGlzIGtlcHQgaW4gb3JkZXIgdG8gdGVzdCB0aGUgZXF1YWxpdHkgb2YgdGhlIGhhc2hcbiAgICAgIGJlZm9yZSB0aGUga2V5LiBTYW1lIHJlYXNvbiBhcyBmb3IgV2Vhay5NYWtlICopXG5cbiAgICB0eXBlIGtleSA9IEgudFxuXG4gICAgbGV0IHJlYyBwb3dlcl8yX2Fib3ZlIHggbiA9XG4gICAgICBpZiB4ID49IG4gdGhlbiB4XG4gICAgICBlbHNlIGlmIHggKiAyID4gU3lzLm1heF9hcnJheV9sZW5ndGggdGhlbiB4XG4gICAgICBlbHNlIHBvd2VyXzJfYWJvdmUgKHggKiAyKSBuXG5cbiAgICBsZXQgcHJuZyA9IGxhenkgKFJhbmRvbS5TdGF0ZS5tYWtlX3NlbGZfaW5pdCgpKVxuXG4gICAgbGV0IGNyZWF0ZSA/KHJhbmRvbSA9IChIYXNodGJsLmlzX3JhbmRvbWl6ZWQgKCkpKSBpbml0aWFsX3NpemUgPVxuICAgICAgbGV0IHMgPSBwb3dlcl8yX2Fib3ZlIDE2IGluaXRpYWxfc2l6ZSBpblxuICAgICAgbGV0IHNlZWQgPSBpZiByYW5kb20gdGhlbiBSYW5kb20uU3RhdGUuYml0cyAoTGF6eS5mb3JjZSBwcm5nKSBlbHNlIDAgaW5cbiAgICAgIHsgaW5pdGlhbF9zaXplID0gczsgc2l6ZSA9IDA7IHNlZWQgPSBzZWVkOyBkYXRhID0gQXJyYXkubWFrZSBzIEVtcHR5IH1cblxuICAgIGxldCBjbGVhciBoID1cbiAgICAgIGguc2l6ZSA8LSAwO1xuICAgICAgbGV0IGxlbiA9IEFycmF5Lmxlbmd0aCBoLmRhdGEgaW5cbiAgICAgIGZvciBpID0gMCB0byBsZW4gLSAxIGRvXG4gICAgICAgIGguZGF0YS4oaSkgPC0gRW1wdHlcbiAgICAgIGRvbmVcblxuICAgIGxldCByZXNldCBoID1cbiAgICAgIGxldCBsZW4gPSBBcnJheS5sZW5ndGggaC5kYXRhIGluXG4gICAgICBpZiBsZW4gPSBoLmluaXRpYWxfc2l6ZSB0aGVuXG4gICAgICAgIGNsZWFyIGhcbiAgICAgIGVsc2UgYmVnaW5cbiAgICAgICAgaC5zaXplIDwtIDA7XG4gICAgICAgIGguZGF0YSA8LSBBcnJheS5tYWtlIGguaW5pdGlhbF9zaXplIEVtcHR5XG4gICAgICBlbmRcblxuICAgIGxldCBjb3B5IGggPSB7IGggd2l0aCBkYXRhID0gQXJyYXkuY29weSBoLmRhdGEgfVxuXG4gICAgbGV0IGtleV9pbmRleCBoIGhrZXkgPVxuICAgICAgaGtleSBsYW5kIChBcnJheS5sZW5ndGggaC5kYXRhIC0gMSlcblxuICAgIGxldCBjbGVhbiBoID1cbiAgICAgIGxldCByZWMgZG9fYnVja2V0ID0gZnVuY3Rpb25cbiAgICAgICAgfCBFbXB0eSAtPlxuICAgICAgICAgICAgRW1wdHlcbiAgICAgICAgfCBDb25zKF8sIGMsIHJlc3QpIHdoZW4gbm90IChILmNoZWNrX2tleSBjKSAtPlxuICAgICAgICAgICAgaC5zaXplIDwtIGguc2l6ZSAtIDE7XG4gICAgICAgICAgICBkb19idWNrZXQgcmVzdFxuICAgICAgICB8IENvbnMoaGtleSwgYywgcmVzdCkgLT5cbiAgICAgICAgICAgIENvbnMoaGtleSwgYywgZG9fYnVja2V0IHJlc3QpXG4gICAgICBpblxuICAgICAgbGV0IGQgPSBoLmRhdGEgaW5cbiAgICAgIGZvciBpID0gMCB0byBBcnJheS5sZW5ndGggZCAtIDEgZG9cbiAgICAgICAgZC4oaSkgPC0gZG9fYnVja2V0IGQuKGkpXG4gICAgICBkb25lXG5cbiAgICAoKiogcmVzaXplIGlzIHRoZSBvbmx5IGZ1bmN0aW9uIHRvIGRvIHRoZSBhY3R1YWwgY2xlYW5pbmcgb2YgZGVhZCBrZXlzXG4gICAgICAgIChyZW1vdmUgZG9lcyBpdCBqdXN0IGJlY2F1c2UgaXQgY291bGQpLlxuXG4gICAgICAgIFRoZSBnb2FsIGlzIHRvOlxuXG4gICAgICAgIC0gbm90IHJlc2l6ZSBpbmZpbml0ZWx5IHdoZW4gdGhlIGFjdHVhbCBudW1iZXIgb2YgYWxpdmUga2V5cyBpc1xuICAgICAgICBib3VuZGVkIGJ1dCBrZXlzIGFyZSBjb250aW51b3VzbHkgYWRkZWQuIFRoYXQgd291bGQgaGFwcGVuIGlmXG4gICAgICAgIHRoaXMgZnVuY3Rpb24gYWx3YXlzIHJlc2l6ZS5cbiAgICAgICAgLSBub3QgY2FsbCB0aGlzIGZ1bmN0aW9uIGFmdGVyIGVhY2ggYWRkaXRpb24sIHRoYXQgd291bGQgaGFwcGVuIGlmIHRoaXNcbiAgICAgICAgZnVuY3Rpb24gZG9uJ3QgcmVzaXplIGV2ZW4gd2hlbiBvbmx5IG9uZSBrZXkgaXMgZGVhZC5cblxuICAgICAgICBTbyB0aGUgYWxnb3JpdGhtOlxuICAgICAgICAtIGNsZWFuIHRoZSBrZXlzIGJlZm9yZSByZXNpemluZ1xuICAgICAgICAtIGlmIHRoZSBudW1iZXIgb2YgcmVtYWluaW5nIGtleXMgaXMgbGVzcyB0aGFuIGhhbGYgdGhlIHNpemUgb2YgdGhlXG4gICAgICAgIGFycmF5LCBkb24ndCByZXNpemUuXG4gICAgICAgIC0gaWYgaXQgaXMgbW9yZSwgcmVzaXplLlxuXG4gICAgICAgIFRoZSBzZWNvbmQgcHJvYmxlbSByZW1haW5zIGlmIHRoZSB0YWJsZSByZWFjaGVzIHshU3lzLm1heF9hcnJheV9sZW5ndGh9LlxuXG4gICAgKilcbiAgICBsZXQgcmVzaXplIGggPVxuICAgICAgbGV0IG9kYXRhID0gaC5kYXRhIGluXG4gICAgICBsZXQgb3NpemUgPSBBcnJheS5sZW5ndGggb2RhdGEgaW5cbiAgICAgIGxldCBuc2l6ZSA9IG9zaXplICogMiBpblxuICAgICAgY2xlYW4gaDtcbiAgICAgIGlmIG5zaXplIDwgU3lzLm1heF9hcnJheV9sZW5ndGggJiYgaC5zaXplID49IG9zaXplIGxzciAxIHRoZW4gYmVnaW5cbiAgICAgICAgbGV0IG5kYXRhID0gQXJyYXkubWFrZSBuc2l6ZSBFbXB0eSBpblxuICAgICAgICBoLmRhdGEgPC0gbmRhdGE7ICAgICAgICgqIHNvIHRoYXQga2V5X2luZGV4IHNlZXMgdGhlIG5ldyBidWNrZXQgY291bnQgKilcbiAgICAgICAgbGV0IHJlYyBpbnNlcnRfYnVja2V0ID0gZnVuY3Rpb25cbiAgICAgICAgICAgIEVtcHR5IC0+ICgpXG4gICAgICAgICAgfCBDb25zKGhrZXksIGRhdGEsIHJlc3QpIC0+XG4gICAgICAgICAgICAgIGluc2VydF9idWNrZXQgcmVzdDsgKCogcHJlc2VydmUgb3JpZ2luYWwgb3JkZXIgb2YgZWxlbWVudHMgKilcbiAgICAgICAgICAgICAgbGV0IG5pZHggPSBrZXlfaW5kZXggaCBoa2V5IGluXG4gICAgICAgICAgICAgIG5kYXRhLihuaWR4KSA8LSBDb25zKGhrZXksIGRhdGEsIG5kYXRhLihuaWR4KSkgaW5cbiAgICAgICAgZm9yIGkgPSAwIHRvIG9zaXplIC0gMSBkb1xuICAgICAgICAgIGluc2VydF9idWNrZXQgb2RhdGEuKGkpXG4gICAgICAgIGRvbmVcbiAgICAgIGVuZFxuXG4gICAgbGV0IGFkZCBoIGtleSBpbmZvID1cbiAgICAgIGxldCBoa2V5ID0gSC5oYXNoIGguc2VlZCBrZXkgaW5cbiAgICAgIGxldCBpID0ga2V5X2luZGV4IGggaGtleSBpblxuICAgICAgbGV0IGNvbnRhaW5lciA9IEguY3JlYXRlIGtleSBpbmZvIGluXG4gICAgICBsZXQgYnVja2V0ID0gQ29ucyhoa2V5LCBjb250YWluZXIsIGguZGF0YS4oaSkpIGluXG4gICAgICBoLmRhdGEuKGkpIDwtIGJ1Y2tldDtcbiAgICAgIGguc2l6ZSA8LSBoLnNpemUgKyAxO1xuICAgICAgaWYgaC5zaXplID4gQXJyYXkubGVuZ3RoIGguZGF0YSBsc2wgMSB0aGVuIHJlc2l6ZSBoXG5cbiAgICBsZXQgcmVtb3ZlIGgga2V5ID1cbiAgICAgIGxldCBoa2V5ID0gSC5oYXNoIGguc2VlZCBrZXkgaW5cbiAgICAgIGxldCByZWMgcmVtb3ZlX2J1Y2tldCA9IGZ1bmN0aW9uXG4gICAgICAgIHwgRW1wdHkgLT4gRW1wdHlcbiAgICAgICAgfCBDb25zKGhrLCBjLCBuZXh0KSB3aGVuIGhrZXkgPSBoayAtPlxuICAgICAgICAgICAgYmVnaW4gbWF0Y2ggSC5lcXVhbCBjIGtleSB3aXRoXG4gICAgICAgICAgICB8IEVUcnVlIC0+IGguc2l6ZSA8LSBoLnNpemUgLSAxOyBuZXh0XG4gICAgICAgICAgICB8IEVGYWxzZSAtPiBDb25zKGhrLCBjLCByZW1vdmVfYnVja2V0IG5leHQpXG4gICAgICAgICAgICB8IEVEZWFkIC0+XG4gICAgICAgICAgICAgICAgKCogVGhlIGRlYWQga2V5IGlzIGF1dG9tYXRpY2FsbHkgcmVtb3ZlZC4gSXQgaXMgYWNjZXB0YWJsZVxuICAgICAgICAgICAgICAgICAgICBmb3IgdGhpcyBmdW5jdGlvbiBzaW5jZSBpdCBhbHJlYWR5IHJlbW92ZXMgYSBiaW5kaW5nICopXG4gICAgICAgICAgICAgICAgaC5zaXplIDwtIGguc2l6ZSAtIDE7XG4gICAgICAgICAgICAgICAgcmVtb3ZlX2J1Y2tldCBuZXh0XG4gICAgICAgICAgICBlbmRcbiAgICAgICAgfCBDb25zKGhrLGMsbmV4dCkgLT4gQ29ucyhoaywgYywgcmVtb3ZlX2J1Y2tldCBuZXh0KSBpblxuICAgICAgbGV0IGkgPSBrZXlfaW5kZXggaCBoa2V5IGluXG4gICAgICBoLmRhdGEuKGkpIDwtIHJlbW92ZV9idWNrZXQgaC5kYXRhLihpKVxuXG4gICAgKCoqIHshZmluZH0gZG9uJ3QgcmVtb3ZlIGRlYWQga2V5cyBiZWNhdXNlIGl0IHdvdWxkIGJlIHN1cnByaXNpbmcgZm9yXG4gICAgICAgIHRoZSB1c2VyIHRoYXQgYSByZWFkLW9ubHkgZnVuY3Rpb24gbXV0YXRlcyB0aGUgc3RhdGUgKGVnLiBjb25jdXJyZW50XG4gICAgICAgIGFjY2VzcykuIFNhbWUgZm9yIHshaXRlcn0sIHshZm9sZH0sIHshbWVtfS5cbiAgICAqKVxuICAgIGxldCByZWMgZmluZF9yZWMga2V5IGhrZXkgPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPlxuICAgICAgICAgIHJhaXNlIE5vdF9mb3VuZFxuICAgICAgfCBDb25zKGhrLCBjLCByZXN0KSB3aGVuIGhrZXkgPSBoayAgLT5cbiAgICAgICAgICBiZWdpbiBtYXRjaCBILmVxdWFsIGMga2V5IHdpdGhcbiAgICAgICAgICB8IEVUcnVlIC0+XG4gICAgICAgICAgICAgIGJlZ2luIG1hdGNoIEguZ2V0X2RhdGEgYyB3aXRoXG4gICAgICAgICAgICAgIHwgTm9uZSAtPlxuICAgICAgICAgICAgICAgICAgKCogVGhpcyBjYXNlIGlzIG5vdCBpbXBvc3NpYmxlIGJlY2F1c2UgdGhlIGdjIGNhbiBydW4gYmV0d2VlblxuICAgICAgICAgICAgICAgICAgICAgIEguZXF1YWwgYW5kIEguZ2V0X2RhdGEgKilcbiAgICAgICAgICAgICAgICAgIGZpbmRfcmVjIGtleSBoa2V5IHJlc3RcbiAgICAgICAgICAgICAgfCBTb21lIGQgLT4gZFxuICAgICAgICAgICAgICBlbmRcbiAgICAgICAgICB8IEVGYWxzZSAtPiBmaW5kX3JlYyBrZXkgaGtleSByZXN0XG4gICAgICAgICAgfCBFRGVhZCAtPlxuICAgICAgICAgICAgICBmaW5kX3JlYyBrZXkgaGtleSByZXN0XG4gICAgICAgICAgZW5kXG4gICAgICB8IENvbnMoXywgXywgcmVzdCkgLT5cbiAgICAgICAgICBmaW5kX3JlYyBrZXkgaGtleSByZXN0XG5cbiAgICBsZXQgZmluZCBoIGtleSA9XG4gICAgICBsZXQgaGtleSA9IEguaGFzaCBoLnNlZWQga2V5IGluXG4gICAgICAoKiBUT0RPIGlubGluZSAzIGl0ZXJhdGlvbnMgKilcbiAgICAgIGZpbmRfcmVjIGtleSBoa2V5IChoLmRhdGEuKGtleV9pbmRleCBoIGhrZXkpKVxuXG4gICAgbGV0IHJlYyBmaW5kX3JlY19vcHQga2V5IGhrZXkgPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPlxuICAgICAgICAgIE5vbmVcbiAgICAgIHwgQ29ucyhoaywgYywgcmVzdCkgd2hlbiBoa2V5ID0gaGsgIC0+XG4gICAgICAgICAgYmVnaW4gbWF0Y2ggSC5lcXVhbCBjIGtleSB3aXRoXG4gICAgICAgICAgfCBFVHJ1ZSAtPlxuICAgICAgICAgICAgICBiZWdpbiBtYXRjaCBILmdldF9kYXRhIGMgd2l0aFxuICAgICAgICAgICAgICB8IE5vbmUgLT5cbiAgICAgICAgICAgICAgICAgICgqIFRoaXMgY2FzZSBpcyBub3QgaW1wb3NzaWJsZSBiZWNhdXNlIHRoZSBnYyBjYW4gcnVuIGJldHdlZW5cbiAgICAgICAgICAgICAgICAgICAgICBILmVxdWFsIGFuZCBILmdldF9kYXRhICopXG4gICAgICAgICAgICAgICAgICBmaW5kX3JlY19vcHQga2V5IGhrZXkgcmVzdFxuICAgICAgICAgICAgICB8IFNvbWUgXyBhcyBkIC0+IGRcbiAgICAgICAgICAgICAgZW5kXG4gICAgICAgICAgfCBFRmFsc2UgLT4gZmluZF9yZWNfb3B0IGtleSBoa2V5IHJlc3RcbiAgICAgICAgICB8IEVEZWFkIC0+XG4gICAgICAgICAgICAgIGZpbmRfcmVjX29wdCBrZXkgaGtleSByZXN0XG4gICAgICAgICAgZW5kXG4gICAgICB8IENvbnMoXywgXywgcmVzdCkgLT5cbiAgICAgICAgICBmaW5kX3JlY19vcHQga2V5IGhrZXkgcmVzdFxuXG4gICAgbGV0IGZpbmRfb3B0IGgga2V5ID1cbiAgICAgIGxldCBoa2V5ID0gSC5oYXNoIGguc2VlZCBrZXkgaW5cbiAgICAgICgqIFRPRE8gaW5saW5lIDMgaXRlcmF0aW9ucyAqKVxuICAgICAgZmluZF9yZWNfb3B0IGtleSBoa2V5IChoLmRhdGEuKGtleV9pbmRleCBoIGhrZXkpKVxuXG4gICAgbGV0IGZpbmRfYWxsIGgga2V5ID1cbiAgICAgIGxldCBoa2V5ID0gSC5oYXNoIGguc2VlZCBrZXkgaW5cbiAgICAgIGxldCByZWMgZmluZF9pbl9idWNrZXQgPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPiBbXVxuICAgICAgfCBDb25zKGhrLCBjLCByZXN0KSB3aGVuIGhrZXkgPSBoayAgLT5cbiAgICAgICAgICBiZWdpbiBtYXRjaCBILmVxdWFsIGMga2V5IHdpdGhcbiAgICAgICAgICB8IEVUcnVlIC0+IGJlZ2luIG1hdGNoIEguZ2V0X2RhdGEgYyB3aXRoXG4gICAgICAgICAgICAgIHwgTm9uZSAtPlxuICAgICAgICAgICAgICAgICAgZmluZF9pbl9idWNrZXQgcmVzdFxuICAgICAgICAgICAgICB8IFNvbWUgZCAtPiBkOjpmaW5kX2luX2J1Y2tldCByZXN0XG4gICAgICAgICAgICBlbmRcbiAgICAgICAgICB8IEVGYWxzZSAtPiBmaW5kX2luX2J1Y2tldCByZXN0XG4gICAgICAgICAgfCBFRGVhZCAtPlxuICAgICAgICAgICAgICBmaW5kX2luX2J1Y2tldCByZXN0XG4gICAgICAgICAgZW5kXG4gICAgICB8IENvbnMoXywgXywgcmVzdCkgLT5cbiAgICAgICAgICBmaW5kX2luX2J1Y2tldCByZXN0IGluXG4gICAgICBmaW5kX2luX2J1Y2tldCBoLmRhdGEuKGtleV9pbmRleCBoIGhrZXkpXG5cblxuICAgIGxldCByZXBsYWNlIGgga2V5IGluZm8gPVxuICAgICAgbGV0IGhrZXkgPSBILmhhc2ggaC5zZWVkIGtleSBpblxuICAgICAgbGV0IHJlYyByZXBsYWNlX2J1Y2tldCA9IGZ1bmN0aW9uXG4gICAgICAgIHwgRW1wdHkgLT4gcmFpc2UgTm90X2ZvdW5kXG4gICAgICAgIHwgQ29ucyhoaywgYywgbmV4dCkgd2hlbiBoa2V5ID0gaGsgLT5cbiAgICAgICAgICAgIGJlZ2luIG1hdGNoIEguZXF1YWwgYyBrZXkgd2l0aFxuICAgICAgICAgICAgfCBFVHJ1ZSAtPiBILnNldF9rZXlfZGF0YSBjIGtleSBpbmZvXG4gICAgICAgICAgICB8IEVGYWxzZSB8IEVEZWFkIC0+IHJlcGxhY2VfYnVja2V0IG5leHRcbiAgICAgICAgICAgIGVuZFxuICAgICAgICB8IENvbnMoXyxfLG5leHQpIC0+IHJlcGxhY2VfYnVja2V0IG5leHRcbiAgICAgIGluXG4gICAgICBsZXQgaSA9IGtleV9pbmRleCBoIGhrZXkgaW5cbiAgICAgIGxldCBsID0gaC5kYXRhLihpKSBpblxuICAgICAgdHJ5XG4gICAgICAgIHJlcGxhY2VfYnVja2V0IGxcbiAgICAgIHdpdGggTm90X2ZvdW5kIC0+XG4gICAgICAgIGxldCBjb250YWluZXIgPSBILmNyZWF0ZSBrZXkgaW5mbyBpblxuICAgICAgICBoLmRhdGEuKGkpIDwtIENvbnMoaGtleSwgY29udGFpbmVyLCBsKTtcbiAgICAgICAgaC5zaXplIDwtIGguc2l6ZSArIDE7XG4gICAgICAgIGlmIGguc2l6ZSA+IEFycmF5Lmxlbmd0aCBoLmRhdGEgbHNsIDEgdGhlbiByZXNpemUgaFxuXG4gICAgbGV0IG1lbSBoIGtleSA9XG4gICAgICBsZXQgaGtleSA9IEguaGFzaCBoLnNlZWQga2V5IGluXG4gICAgICBsZXQgcmVjIG1lbV9pbl9idWNrZXQgPSBmdW5jdGlvblxuICAgICAgfCBFbXB0eSAtPlxuICAgICAgICAgIGZhbHNlXG4gICAgICB8IENvbnMoaGssIGMsIHJlc3QpIHdoZW4gaGsgPSBoa2V5IC0+XG4gICAgICAgICAgYmVnaW4gbWF0Y2ggSC5lcXVhbCBjIGtleSB3aXRoXG4gICAgICAgICAgfCBFVHJ1ZSAtPiB0cnVlXG4gICAgICAgICAgfCBFRmFsc2UgfCBFRGVhZCAtPiBtZW1faW5fYnVja2V0IHJlc3RcbiAgICAgICAgICBlbmRcbiAgICAgIHwgQ29ucyhfaGssIF9jLCByZXN0KSAtPiBtZW1faW5fYnVja2V0IHJlc3QgaW5cbiAgICAgIG1lbV9pbl9idWNrZXQgaC5kYXRhLihrZXlfaW5kZXggaCBoa2V5KVxuXG4gICAgbGV0IGl0ZXIgZiBoID1cbiAgICAgIGxldCByZWMgZG9fYnVja2V0ID0gZnVuY3Rpb25cbiAgICAgICAgfCBFbXB0eSAtPlxuICAgICAgICAgICAgKClcbiAgICAgICAgfCBDb25zKF8sIGMsIHJlc3QpIC0+XG4gICAgICAgICAgICBiZWdpbiBtYXRjaCBILmdldF9rZXkgYywgSC5nZXRfZGF0YSBjIHdpdGhcbiAgICAgICAgICAgIHwgTm9uZSwgXyB8IF8sIE5vbmUgLT4gKClcbiAgICAgICAgICAgIHwgU29tZSBrLCBTb21lIGQgLT4gZiBrIGRcbiAgICAgICAgICAgIGVuZDsgZG9fYnVja2V0IHJlc3QgaW5cbiAgICAgIGxldCBkID0gaC5kYXRhIGluXG4gICAgICBmb3IgaSA9IDAgdG8gQXJyYXkubGVuZ3RoIGQgLSAxIGRvXG4gICAgICAgIGRvX2J1Y2tldCBkLihpKVxuICAgICAgZG9uZVxuXG4gICAgbGV0IGZvbGQgZiBoIGluaXQgPVxuICAgICAgbGV0IHJlYyBkb19idWNrZXQgYiBhY2N1ID1cbiAgICAgICAgbWF0Y2ggYiB3aXRoXG4gICAgICAgICAgRW1wdHkgLT5cbiAgICAgICAgICAgIGFjY3VcbiAgICAgICAgfCBDb25zKF8sIGMsIHJlc3QpIC0+XG4gICAgICAgICAgICBsZXQgYWNjdSA9IGJlZ2luIG1hdGNoIEguZ2V0X2tleSBjLCBILmdldF9kYXRhIGMgd2l0aFxuICAgICAgICAgICAgICB8IE5vbmUsIF8gfCBfLCBOb25lIC0+IGFjY3VcbiAgICAgICAgICAgICAgfCBTb21lIGssIFNvbWUgZCAtPiBmIGsgZCBhY2N1XG4gICAgICAgICAgICBlbmQgaW5cbiAgICAgICAgICAgIGRvX2J1Y2tldCByZXN0IGFjY3UgIGluXG4gICAgICBsZXQgZCA9IGguZGF0YSBpblxuICAgICAgbGV0IGFjY3UgPSByZWYgaW5pdCBpblxuICAgICAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCBkIC0gMSBkb1xuICAgICAgICBhY2N1IDo9IGRvX2J1Y2tldCBkLihpKSAhYWNjdVxuICAgICAgZG9uZTtcbiAgICAgICFhY2N1XG5cbiAgICBsZXQgZmlsdGVyX21hcF9pbnBsYWNlIGYgaCA9XG4gICAgICBsZXQgcmVjIGRvX2J1Y2tldCA9IGZ1bmN0aW9uXG4gICAgICAgIHwgRW1wdHkgLT5cbiAgICAgICAgICAgIEVtcHR5XG4gICAgICAgIHwgQ29ucyhoaywgYywgcmVzdCkgLT5cbiAgICAgICAgICAgIG1hdGNoIEguZ2V0X2tleSBjLCBILmdldF9kYXRhIGMgd2l0aFxuICAgICAgICAgICAgfCBOb25lLCBfIHwgXywgTm9uZSAtPlxuICAgICAgICAgICAgICAgIGRvX2J1Y2tldCByZXN0XG4gICAgICAgICAgICB8IFNvbWUgaywgU29tZSBkIC0+XG4gICAgICAgICAgICAgICAgbWF0Y2ggZiBrIGQgd2l0aFxuICAgICAgICAgICAgICAgIHwgTm9uZSAtPlxuICAgICAgICAgICAgICAgICAgICBkb19idWNrZXQgcmVzdFxuICAgICAgICAgICAgICAgIHwgU29tZSBuZXdfZCAtPlxuICAgICAgICAgICAgICAgICAgICBILnNldF9rZXlfZGF0YSBjIGsgbmV3X2Q7XG4gICAgICAgICAgICAgICAgICAgIENvbnMoaGssIGMsIGRvX2J1Y2tldCByZXN0KVxuICAgICAgaW5cbiAgICAgIGxldCBkID0gaC5kYXRhIGluXG4gICAgICBmb3IgaSA9IDAgdG8gQXJyYXkubGVuZ3RoIGQgLSAxIGRvXG4gICAgICAgIGQuKGkpIDwtIGRvX2J1Y2tldCBkLihpKVxuICAgICAgZG9uZVxuXG4gICAgbGV0IGxlbmd0aCBoID0gaC5zaXplXG5cbiAgICBsZXQgcmVjIGJ1Y2tldF9sZW5ndGggYWNjdSA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+IGFjY3VcbiAgICAgIHwgQ29ucyhfLCBfLCByZXN0KSAtPiBidWNrZXRfbGVuZ3RoIChhY2N1ICsgMSkgcmVzdFxuXG4gICAgbGV0IHN0YXRzIGggPVxuICAgICAgbGV0IG1ibCA9XG4gICAgICAgIEFycmF5LmZvbGRfbGVmdCAoZnVuIG0gYiAtPiBJbnQubWF4IG0gKGJ1Y2tldF9sZW5ndGggMCBiKSkgMCBoLmRhdGEgaW5cbiAgICAgIGxldCBoaXN0byA9IEFycmF5Lm1ha2UgKG1ibCArIDEpIDAgaW5cbiAgICAgIEFycmF5Lml0ZXJcbiAgICAgICAgKGZ1biBiIC0+XG4gICAgICAgICAgIGxldCBsID0gYnVja2V0X2xlbmd0aCAwIGIgaW5cbiAgICAgICAgICAgaGlzdG8uKGwpIDwtIGhpc3RvLihsKSArIDEpXG4gICAgICAgIGguZGF0YTtcbiAgICAgIHsgSGFzaHRibC5udW1fYmluZGluZ3MgPSBoLnNpemU7XG4gICAgICAgIG51bV9idWNrZXRzID0gQXJyYXkubGVuZ3RoIGguZGF0YTtcbiAgICAgICAgbWF4X2J1Y2tldF9sZW5ndGggPSBtYmw7XG4gICAgICAgIGJ1Y2tldF9oaXN0b2dyYW0gPSBoaXN0byB9XG5cbiAgICBsZXQgcmVjIGJ1Y2tldF9sZW5ndGhfYWxpdmUgYWNjdSA9IGZ1bmN0aW9uXG4gICAgICB8IEVtcHR5IC0+IGFjY3VcbiAgICAgIHwgQ29ucyhfLCBjLCByZXN0KSB3aGVuIEguY2hlY2tfa2V5IGMgLT5cbiAgICAgICAgICBidWNrZXRfbGVuZ3RoX2FsaXZlIChhY2N1ICsgMSkgcmVzdFxuICAgICAgfCBDb25zKF8sIF8sIHJlc3QpIC0+IGJ1Y2tldF9sZW5ndGhfYWxpdmUgYWNjdSByZXN0XG5cbiAgICBsZXQgc3RhdHNfYWxpdmUgaCA9XG4gICAgICBsZXQgc2l6ZSA9IHJlZiAwIGluXG4gICAgICBsZXQgbWJsID1cbiAgICAgICAgQXJyYXkuZm9sZF9sZWZ0XG4gICAgICAgICAgKGZ1biBtIGIgLT4gSW50Lm1heCBtIChidWNrZXRfbGVuZ3RoX2FsaXZlIDAgYikpIDAgaC5kYXRhXG4gICAgICBpblxuICAgICAgbGV0IGhpc3RvID0gQXJyYXkubWFrZSAobWJsICsgMSkgMCBpblxuICAgICAgQXJyYXkuaXRlclxuICAgICAgICAoZnVuIGIgLT5cbiAgICAgICAgICAgbGV0IGwgPSBidWNrZXRfbGVuZ3RoX2FsaXZlIDAgYiBpblxuICAgICAgICAgICBzaXplIDo9ICFzaXplICsgbDtcbiAgICAgICAgICAgaGlzdG8uKGwpIDwtIGhpc3RvLihsKSArIDEpXG4gICAgICAgIGguZGF0YTtcbiAgICAgIHsgSGFzaHRibC5udW1fYmluZGluZ3MgPSAhc2l6ZTtcbiAgICAgICAgbnVtX2J1Y2tldHMgPSBBcnJheS5sZW5ndGggaC5kYXRhO1xuICAgICAgICBtYXhfYnVja2V0X2xlbmd0aCA9IG1ibDtcbiAgICAgICAgYnVja2V0X2hpc3RvZ3JhbSA9IGhpc3RvIH1cblxuICAgIGxldCB0b19zZXEgdGJsID1cbiAgICAgICgqIGNhcHR1cmUgY3VycmVudCBhcnJheSwgc28gdGhhdCBldmVuIGlmIHRoZSB0YWJsZSBpcyByZXNpemVkIHdlXG4gICAgICAgICBrZWVwIGl0ZXJhdGluZyBvbiB0aGUgc2FtZSBhcnJheSAqKVxuICAgICAgbGV0IHRibF9kYXRhID0gdGJsLmRhdGEgaW5cbiAgICAgICgqIHN0YXRlOiBpbmRleCAqIG5leHQgYnVja2V0IHRvIHRyYXZlcnNlICopXG4gICAgICBsZXQgcmVjIGF1eCBpIGJ1Y2sgKCkgPSBtYXRjaCBidWNrIHdpdGhcbiAgICAgICAgfCBFbXB0eSAtPlxuICAgICAgICAgICAgaWYgaSA9IEFycmF5Lmxlbmd0aCB0YmxfZGF0YVxuICAgICAgICAgICAgdGhlbiBTZXEuTmlsXG4gICAgICAgICAgICBlbHNlIGF1eChpKzEpIHRibF9kYXRhLihpKSAoKVxuICAgICAgICB8IENvbnMgKF8sIGMsIG5leHQpIC0+XG4gICAgICAgICAgICBiZWdpbiBtYXRjaCBILmdldF9rZXkgYywgSC5nZXRfZGF0YSBjIHdpdGhcbiAgICAgICAgICAgICAgfCBOb25lLCBfIHwgXywgTm9uZSAtPiBhdXggaSBuZXh0ICgpXG4gICAgICAgICAgICAgIHwgU29tZSBrZXksIFNvbWUgZGF0YSAtPlxuICAgICAgICAgICAgICAgICAgU2VxLkNvbnMgKChrZXksIGRhdGEpLCBhdXggaSBuZXh0KVxuICAgICAgICAgICAgZW5kXG4gICAgICBpblxuICAgICAgYXV4IDAgRW1wdHlcblxuICAgIGxldCB0b19zZXFfa2V5cyBtID0gU2VxLm1hcCBmc3QgKHRvX3NlcSBtKVxuXG4gICAgbGV0IHRvX3NlcV92YWx1ZXMgbSA9IFNlcS5tYXAgc25kICh0b19zZXEgbSlcblxuICAgIGxldCBhZGRfc2VxIHRibCBpID1cbiAgICAgIFNlcS5pdGVyIChmdW4gKGssdikgLT4gYWRkIHRibCBrIHYpIGlcblxuICAgIGxldCByZXBsYWNlX3NlcSB0YmwgaSA9XG4gICAgICBTZXEuaXRlciAoZnVuIChrLHYpIC0+IHJlcGxhY2UgdGJsIGsgdikgaVxuXG4gICAgbGV0IG9mX3NlcSBpID1cbiAgICAgIGxldCB0YmwgPSBjcmVhdGUgMTYgaW5cbiAgICAgIHJlcGxhY2Vfc2VxIHRibCBpO1xuICAgICAgdGJsXG5cbiAgZW5kXG5lbmRcblxubW9kdWxlIE9iakVwaCA9IE9iai5FcGhlbWVyb25cblxubGV0IF9vYmpfb3B0IDogT2JqLnQgb3B0aW9uIC0+ICdhIG9wdGlvbiA9IGZ1biB4IC0+XG4gIG1hdGNoIHggd2l0aFxuICB8IE5vbmUgLT4geFxuICB8IFNvbWUgdiAtPiBTb21lIChPYmoub2JqIHYpXG5cbigqKiBUaGUgcHJldmlvdXMgZnVuY3Rpb24gaXMgdHlwZWQgc28gdGhpcyBvbmUgaXMgYWxzbyBjb3JyZWN0ICopXG5sZXQgb2JqX29wdCA6IE9iai50IG9wdGlvbiAtPiAnYSBvcHRpb24gPSBmdW4geCAtPiBPYmoubWFnaWMgeFxuXG5cbm1vZHVsZSBLMSA9IHN0cnVjdFxuICB0eXBlICgnaywnZCkgdCA9IE9iakVwaC50XG5cbiAgbGV0IGNyZWF0ZSAoKSA6ICgnaywnZCkgdCA9IE9iakVwaC5jcmVhdGUgMVxuXG4gIGxldCBnZXRfa2V5ICh0OignaywnZCkgdCkgOiAnayBvcHRpb24gPSBvYmpfb3B0IChPYmpFcGguZ2V0X2tleSB0IDApXG4gIGxldCBnZXRfa2V5X2NvcHkgKHQ6KCdrLCdkKSB0KSA6ICdrIG9wdGlvbiA9IG9ial9vcHQgKE9iakVwaC5nZXRfa2V5X2NvcHkgdCAwKVxuICBsZXQgc2V0X2tleSAodDooJ2ssJ2QpIHQpIChrOidrKSA6IHVuaXQgPSBPYmpFcGguc2V0X2tleSB0IDAgKE9iai5yZXByIGspXG4gIGxldCB1bnNldF9rZXkgKHQ6KCdrLCdkKSB0KSA6IHVuaXQgPSBPYmpFcGgudW5zZXRfa2V5IHQgMFxuICBsZXQgY2hlY2tfa2V5ICh0OignaywnZCkgdCkgOiBib29sID0gT2JqRXBoLmNoZWNrX2tleSB0IDBcblxuICBsZXQgYmxpdF9rZXkgKHQxOignaywnZCkgdCkgKHQyOignaywnZCkgdCk6IHVuaXQgPVxuICAgIE9iakVwaC5ibGl0X2tleSB0MSAwIHQyIDAgMVxuXG4gIGxldCBnZXRfZGF0YSAodDooJ2ssJ2QpIHQpIDogJ2Qgb3B0aW9uID0gb2JqX29wdCAoT2JqRXBoLmdldF9kYXRhIHQpXG4gIGxldCBnZXRfZGF0YV9jb3B5ICh0OignaywnZCkgdCkgOiAnZCBvcHRpb24gPSBvYmpfb3B0IChPYmpFcGguZ2V0X2RhdGFfY29weSB0KVxuICBsZXQgc2V0X2RhdGEgKHQ6KCdrLCdkKSB0KSAoZDonZCkgOiB1bml0ID0gT2JqRXBoLnNldF9kYXRhIHQgKE9iai5yZXByIGQpXG4gIGxldCB1bnNldF9kYXRhICh0OignaywnZCkgdCkgOiB1bml0ID0gT2JqRXBoLnVuc2V0X2RhdGEgdFxuICBsZXQgY2hlY2tfZGF0YSAodDooJ2ssJ2QpIHQpIDogYm9vbCA9IE9iakVwaC5jaGVja19kYXRhIHRcbiAgbGV0IGJsaXRfZGF0YSAodDE6KF8sJ2QpIHQpICh0MjooXywnZCkgdCkgOiB1bml0ID0gT2JqRXBoLmJsaXRfZGF0YSB0MSB0MlxuXG4gIG1vZHVsZSBNYWtlU2VlZGVkIChIOkhhc2h0YmwuU2VlZGVkSGFzaGVkVHlwZSkgPVxuICAgIEdlbkhhc2hUYWJsZS5NYWtlU2VlZGVkKHN0cnVjdFxuICAgICAgdHlwZSAnYSBjb250YWluZXIgPSAoSC50LCdhKSB0XG4gICAgICB0eXBlIHQgPSBILnRcbiAgICAgIGxldCBjcmVhdGUgayBkID1cbiAgICAgICAgbGV0IGMgPSBjcmVhdGUgKCkgaW5cbiAgICAgICAgc2V0X2RhdGEgYyBkO1xuICAgICAgICBzZXRfa2V5IGMgaztcbiAgICAgICAgY1xuICAgICAgbGV0IGhhc2ggPSBILmhhc2hcbiAgICAgIGxldCBlcXVhbCBjIGsgPVxuICAgICAgICAoKiB7IWdldF9rZXlfY29weX0gaXMgbm90IHVzZWQgYmVjYXVzZSB0aGUgZXF1YWxpdHkgb2YgdGhlIHVzZXIgY2FuIGJlXG4gICAgICAgICAgICB0aGUgcGh5c2ljYWwgZXF1YWxpdHkgKilcbiAgICAgICAgbWF0Y2ggZ2V0X2tleSBjIHdpdGhcbiAgICAgICAgfCBOb25lIC0+IEdlbkhhc2hUYWJsZS5FRGVhZFxuICAgICAgICB8IFNvbWUgaycgLT5cbiAgICAgICAgICAgIGlmIEguZXF1YWwgayBrJyB0aGVuIEdlbkhhc2hUYWJsZS5FVHJ1ZSBlbHNlIEdlbkhhc2hUYWJsZS5FRmFsc2VcbiAgICAgIGxldCBnZXRfZGF0YSA9IGdldF9kYXRhXG4gICAgICBsZXQgZ2V0X2tleSA9IGdldF9rZXlcbiAgICAgIGxldCBzZXRfa2V5X2RhdGEgYyBrIGQgPVxuICAgICAgICB1bnNldF9kYXRhIGM7XG4gICAgICAgIHNldF9rZXkgYyBrO1xuICAgICAgICBzZXRfZGF0YSBjIGRcbiAgICAgIGxldCBjaGVja19rZXkgPSBjaGVja19rZXlcbiAgICBlbmQpXG5cbiAgbW9kdWxlIE1ha2UoSDogSGFzaHRibC5IYXNoZWRUeXBlKTogKFMgd2l0aCB0eXBlIGtleSA9IEgudCkgPVxuICBzdHJ1Y3RcbiAgICBpbmNsdWRlIE1ha2VTZWVkZWQoc3RydWN0XG4gICAgICAgIHR5cGUgdCA9IEgudFxuICAgICAgICBsZXQgZXF1YWwgPSBILmVxdWFsXG4gICAgICAgIGxldCBoYXNoIChfc2VlZDogaW50KSB4ID0gSC5oYXNoIHhcbiAgICAgIGVuZClcbiAgICBsZXQgY3JlYXRlIHN6ID0gY3JlYXRlIH5yYW5kb206ZmFsc2Ugc3pcbiAgICBsZXQgb2Zfc2VxIGkgPVxuICAgICAgbGV0IHRibCA9IGNyZWF0ZSAxNiBpblxuICAgICAgcmVwbGFjZV9zZXEgdGJsIGk7XG4gICAgICB0YmxcbiAgZW5kXG5cbmVuZFxuXG5tb2R1bGUgSzIgPSBzdHJ1Y3RcbiAgdHlwZSAoJ2sxLCAnazIsICdkKSB0ID0gT2JqRXBoLnRcblxuICBsZXQgY3JlYXRlICgpIDogKCdrMSwnazIsJ2QpIHQgPSBPYmpFcGguY3JlYXRlIDJcblxuICBsZXQgZ2V0X2tleTEgKHQ6KCdrMSwnazIsJ2QpIHQpIDogJ2sxIG9wdGlvbiA9IG9ial9vcHQgKE9iakVwaC5nZXRfa2V5IHQgMClcbiAgbGV0IGdldF9rZXkxX2NvcHkgKHQ6KCdrMSwnazIsJ2QpIHQpIDogJ2sxIG9wdGlvbiA9XG4gICAgb2JqX29wdCAoT2JqRXBoLmdldF9rZXlfY29weSB0IDApXG4gIGxldCBzZXRfa2V5MSAodDooJ2sxLCdrMiwnZCkgdCkgKGs6J2sxKSA6IHVuaXQgPVxuICAgIE9iakVwaC5zZXRfa2V5IHQgMCAoT2JqLnJlcHIgaylcbiAgbGV0IHVuc2V0X2tleTEgKHQ6KCdrMSwnazIsJ2QpIHQpIDogdW5pdCA9IE9iakVwaC51bnNldF9rZXkgdCAwXG4gIGxldCBjaGVja19rZXkxICh0OignazEsJ2syLCdkKSB0KSA6IGJvb2wgPSBPYmpFcGguY2hlY2tfa2V5IHQgMFxuXG4gIGxldCBnZXRfa2V5MiAodDooJ2sxLCdrMiwnZCkgdCkgOiAnazIgb3B0aW9uID0gb2JqX29wdCAoT2JqRXBoLmdldF9rZXkgdCAxKVxuICBsZXQgZ2V0X2tleTJfY29weSAodDooJ2sxLCdrMiwnZCkgdCkgOiAnazIgb3B0aW9uID1cbiAgICBvYmpfb3B0IChPYmpFcGguZ2V0X2tleV9jb3B5IHQgMSlcbiAgbGV0IHNldF9rZXkyICh0OignazEsJ2syLCdkKSB0KSAoazonazIpIDogdW5pdCA9XG4gICAgT2JqRXBoLnNldF9rZXkgdCAxIChPYmoucmVwciBrKVxuICBsZXQgdW5zZXRfa2V5MiAodDooJ2sxLCdrMiwnZCkgdCkgOiB1bml0ID0gT2JqRXBoLnVuc2V0X2tleSB0IDFcbiAgbGV0IGNoZWNrX2tleTIgKHQ6KCdrMSwnazIsJ2QpIHQpIDogYm9vbCA9IE9iakVwaC5jaGVja19rZXkgdCAxXG5cblxuICBsZXQgYmxpdF9rZXkxICh0MTooJ2sxLF8sXykgdCkgKHQyOignazEsXyxfKSB0KSA6IHVuaXQgPVxuICAgIE9iakVwaC5ibGl0X2tleSB0MSAwIHQyIDAgMVxuICBsZXQgYmxpdF9rZXkyICh0MTooXywnazIsXykgdCkgKHQyOihfLCdrMixfKSB0KSA6IHVuaXQgPVxuICAgIE9iakVwaC5ibGl0X2tleSB0MSAxIHQyIDEgMVxuICBsZXQgYmxpdF9rZXkxMiAodDE6KCdrMSwnazIsXykgdCkgKHQyOignazEsJ2syLF8pIHQpIDogdW5pdCA9XG4gICAgT2JqRXBoLmJsaXRfa2V5IHQxIDAgdDIgMCAyXG5cbiAgbGV0IGdldF9kYXRhICh0OignazEsJ2syLCdkKSB0KSA6ICdkIG9wdGlvbiA9IG9ial9vcHQgKE9iakVwaC5nZXRfZGF0YSB0KVxuICBsZXQgZ2V0X2RhdGFfY29weSAodDooJ2sxLCdrMiwnZCkgdCkgOiAnZCBvcHRpb24gPVxuICAgIG9ial9vcHQgKE9iakVwaC5nZXRfZGF0YV9jb3B5IHQpXG4gIGxldCBzZXRfZGF0YSAodDooJ2sxLCdrMiwnZCkgdCkgKGQ6J2QpIDogdW5pdCA9XG4gICAgT2JqRXBoLnNldF9kYXRhIHQgKE9iai5yZXByIGQpXG4gIGxldCB1bnNldF9kYXRhICh0OignazEsJ2syLCdkKSB0KSA6IHVuaXQgPSBPYmpFcGgudW5zZXRfZGF0YSB0XG4gIGxldCBjaGVja19kYXRhICh0OignazEsJ2syLCdkKSB0KSA6IGJvb2wgPSBPYmpFcGguY2hlY2tfZGF0YSB0XG4gIGxldCBibGl0X2RhdGEgKHQxOihfLF8sJ2QpIHQpICh0MjooXyxfLCdkKSB0KSA6IHVuaXQgPSBPYmpFcGguYmxpdF9kYXRhIHQxIHQyXG5cbiAgbW9kdWxlIE1ha2VTZWVkZWRcbiAgICAgIChIMTpIYXNodGJsLlNlZWRlZEhhc2hlZFR5cGUpXG4gICAgICAoSDI6SGFzaHRibC5TZWVkZWRIYXNoZWRUeXBlKSA9XG4gICAgR2VuSGFzaFRhYmxlLk1ha2VTZWVkZWQoc3RydWN0XG4gICAgICB0eXBlICdhIGNvbnRhaW5lciA9IChIMS50LEgyLnQsJ2EpIHRcbiAgICAgIHR5cGUgdCA9IEgxLnQgKiBIMi50XG4gICAgICBsZXQgY3JlYXRlIChrMSxrMikgZCA9XG4gICAgICAgIGxldCBjID0gY3JlYXRlICgpIGluXG4gICAgICAgIHNldF9kYXRhIGMgZDtcbiAgICAgICAgc2V0X2tleTEgYyBrMTsgc2V0X2tleTIgYyBrMjtcbiAgICAgICAgY1xuICAgICAgbGV0IGhhc2ggc2VlZCAoazEsazIpID1cbiAgICAgICAgSDEuaGFzaCBzZWVkIGsxICsgSDIuaGFzaCBzZWVkIGsyICogNjU1OTlcbiAgICAgIGxldCBlcXVhbCBjIChrMSxrMikgPVxuICAgICAgICBtYXRjaCBnZXRfa2V5MSBjLCBnZXRfa2V5MiBjIHdpdGhcbiAgICAgICAgfCBOb25lLCBfIHwgXyAsIE5vbmUgLT4gR2VuSGFzaFRhYmxlLkVEZWFkXG4gICAgICAgIHwgU29tZSBrMScsIFNvbWUgazInIC0+XG4gICAgICAgICAgICBpZiBIMS5lcXVhbCBrMSBrMScgJiYgSDIuZXF1YWwgazIgazInXG4gICAgICAgICAgICB0aGVuIEdlbkhhc2hUYWJsZS5FVHJ1ZSBlbHNlIEdlbkhhc2hUYWJsZS5FRmFsc2VcbiAgICAgIGxldCBnZXRfZGF0YSA9IGdldF9kYXRhXG4gICAgICBsZXQgZ2V0X2tleSBjID1cbiAgICAgICAgbWF0Y2ggZ2V0X2tleTEgYywgZ2V0X2tleTIgYyB3aXRoXG4gICAgICAgIHwgTm9uZSwgXyB8IF8gLCBOb25lIC0+IE5vbmVcbiAgICAgICAgfCBTb21lIGsxJywgU29tZSBrMicgLT4gU29tZSAoazEnLCBrMicpXG4gICAgICBsZXQgc2V0X2tleV9kYXRhIGMgKGsxLGsyKSBkID1cbiAgICAgICAgdW5zZXRfZGF0YSBjO1xuICAgICAgICBzZXRfa2V5MSBjIGsxOyBzZXRfa2V5MiBjIGsyO1xuICAgICAgICBzZXRfZGF0YSBjIGRcbiAgICAgIGxldCBjaGVja19rZXkgYyA9IGNoZWNrX2tleTEgYyAmJiBjaGVja19rZXkyIGNcbiAgICBlbmQpXG5cbiAgbW9kdWxlIE1ha2UoSDE6IEhhc2h0YmwuSGFzaGVkVHlwZSkoSDI6IEhhc2h0YmwuSGFzaGVkVHlwZSk6XG4gICAgKFMgd2l0aCB0eXBlIGtleSA9IEgxLnQgKiBIMi50KSA9XG4gIHN0cnVjdFxuICAgIGluY2x1ZGUgTWFrZVNlZWRlZFxuICAgICAgICAoc3RydWN0XG4gICAgICAgICAgdHlwZSB0ID0gSDEudFxuICAgICAgICAgIGxldCBlcXVhbCA9IEgxLmVxdWFsXG4gICAgICAgICAgbGV0IGhhc2ggKF9zZWVkOiBpbnQpIHggPSBIMS5oYXNoIHhcbiAgICAgICAgZW5kKVxuICAgICAgICAoc3RydWN0XG4gICAgICAgICAgdHlwZSB0ID0gSDIudFxuICAgICAgICAgIGxldCBlcXVhbCA9IEgyLmVxdWFsXG4gICAgICAgICAgbGV0IGhhc2ggKF9zZWVkOiBpbnQpIHggPSBIMi5oYXNoIHhcbiAgICAgICAgZW5kKVxuICAgIGxldCBjcmVhdGUgc3ogPSBjcmVhdGUgfnJhbmRvbTpmYWxzZSBzelxuICAgIGxldCBvZl9zZXEgaSA9XG4gICAgICBsZXQgdGJsID0gY3JlYXRlIDE2IGluXG4gICAgICByZXBsYWNlX3NlcSB0YmwgaTtcbiAgICAgIHRibFxuICBlbmRcblxuZW5kXG5cbm1vZHVsZSBLbiA9IHN0cnVjdFxuICB0eXBlICgnaywnZCkgdCA9IE9iakVwaC50XG5cbiAgbGV0IGNyZWF0ZSBuIDogKCdrLCdkKSB0ID0gT2JqRXBoLmNyZWF0ZSBuXG4gIGxldCBsZW5ndGggKGs6KCdrLCdkKSB0KSA6IGludCA9IE9iakVwaC5sZW5ndGgga1xuXG4gIGxldCBnZXRfa2V5ICh0OignaywnZCkgdCkgKG46aW50KSA6ICdrIG9wdGlvbiA9IG9ial9vcHQgKE9iakVwaC5nZXRfa2V5IHQgbilcbiAgbGV0IGdldF9rZXlfY29weSAodDooJ2ssJ2QpIHQpIChuOmludCkgOiAnayBvcHRpb24gPVxuICAgIG9ial9vcHQgKE9iakVwaC5nZXRfa2V5X2NvcHkgdCBuKVxuICBsZXQgc2V0X2tleSAodDooJ2ssJ2QpIHQpIChuOmludCkgKGs6J2spIDogdW5pdCA9XG4gICAgT2JqRXBoLnNldF9rZXkgdCBuIChPYmoucmVwciBrKVxuICBsZXQgdW5zZXRfa2V5ICh0OignaywnZCkgdCkgKG46aW50KSA6IHVuaXQgPSBPYmpFcGgudW5zZXRfa2V5IHQgblxuICBsZXQgY2hlY2tfa2V5ICh0OignaywnZCkgdCkgKG46aW50KSA6IGJvb2wgPSBPYmpFcGguY2hlY2tfa2V5IHQgblxuXG4gIGxldCBibGl0X2tleSAodDE6KCdrLCdkKSB0KSAobzE6aW50KSAodDI6KCdrLCdkKSB0KSAobzI6aW50KSAobDppbnQpIDogdW5pdCA9XG4gICAgT2JqRXBoLmJsaXRfa2V5IHQxIG8xIHQyIG8yIGxcblxuICBsZXQgZ2V0X2RhdGEgKHQ6KCdrLCdkKSB0KSA6ICdkIG9wdGlvbiA9IG9ial9vcHQgKE9iakVwaC5nZXRfZGF0YSB0KVxuICBsZXQgZ2V0X2RhdGFfY29weSAodDooJ2ssJ2QpIHQpIDogJ2Qgb3B0aW9uID0gb2JqX29wdCAoT2JqRXBoLmdldF9kYXRhX2NvcHkgdClcbiAgbGV0IHNldF9kYXRhICh0OignaywnZCkgdCkgKGQ6J2QpIDogdW5pdCA9IE9iakVwaC5zZXRfZGF0YSB0IChPYmoucmVwciBkKVxuICBsZXQgdW5zZXRfZGF0YSAodDooJ2ssJ2QpIHQpIDogdW5pdCA9IE9iakVwaC51bnNldF9kYXRhIHRcbiAgbGV0IGNoZWNrX2RhdGEgKHQ6KCdrLCdkKSB0KSA6IGJvb2wgPSBPYmpFcGguY2hlY2tfZGF0YSB0XG4gIGxldCBibGl0X2RhdGEgKHQxOihfLCdkKSB0KSAodDI6KF8sJ2QpIHQpIDogdW5pdCA9IE9iakVwaC5ibGl0X2RhdGEgdDEgdDJcblxuICBtb2R1bGUgTWFrZVNlZWRlZCAoSDpIYXNodGJsLlNlZWRlZEhhc2hlZFR5cGUpID1cbiAgICBHZW5IYXNoVGFibGUuTWFrZVNlZWRlZChzdHJ1Y3RcbiAgICAgIHR5cGUgJ2EgY29udGFpbmVyID0gKEgudCwnYSkgdFxuICAgICAgdHlwZSB0ID0gSC50IGFycmF5XG4gICAgICBsZXQgY3JlYXRlIGsgZCA9XG4gICAgICAgIGxldCBjID0gY3JlYXRlIChBcnJheS5sZW5ndGggaykgaW5cbiAgICAgICAgc2V0X2RhdGEgYyBkO1xuICAgICAgICBmb3IgaT0wIHRvIEFycmF5Lmxlbmd0aCBrIC0xIGRvXG4gICAgICAgICAgc2V0X2tleSBjIGkgay4oaSk7XG4gICAgICAgIGRvbmU7XG4gICAgICAgIGNcbiAgICAgIGxldCBoYXNoIHNlZWQgayA9XG4gICAgICAgIGxldCBoID0gcmVmIDAgaW5cbiAgICAgICAgZm9yIGk9MCB0byBBcnJheS5sZW5ndGggayAtMSBkb1xuICAgICAgICAgIGggOj0gSC5oYXNoIHNlZWQgay4oaSkgKiA2NTU5OSArICFoO1xuICAgICAgICBkb25lO1xuICAgICAgICAhaFxuICAgICAgbGV0IGVxdWFsIGMgayA9XG4gICAgICAgIGxldCBsZW4gID0gQXJyYXkubGVuZ3RoIGsgaW5cbiAgICAgICAgbGV0IGxlbicgPSBsZW5ndGggYyBpblxuICAgICAgICBpZiBsZW4gIT0gbGVuJyB0aGVuIEdlbkhhc2hUYWJsZS5FRmFsc2VcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGxldCByZWMgZXF1YWxfYXJyYXkgayBjIGkgPVxuICAgICAgICAgICAgaWYgaSA8IDAgdGhlbiBHZW5IYXNoVGFibGUuRVRydWVcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgbWF0Y2ggZ2V0X2tleSBjIGkgd2l0aFxuICAgICAgICAgICAgICB8IE5vbmUgLT4gR2VuSGFzaFRhYmxlLkVEZWFkXG4gICAgICAgICAgICAgIHwgU29tZSBraSAtPlxuICAgICAgICAgICAgICAgICAgaWYgSC5lcXVhbCBrLihpKSBraVxuICAgICAgICAgICAgICAgICAgdGhlbiBlcXVhbF9hcnJheSBrIGMgKGktMSlcbiAgICAgICAgICAgICAgICAgIGVsc2UgR2VuSGFzaFRhYmxlLkVGYWxzZVxuICAgICAgICAgIGluXG4gICAgICAgICAgZXF1YWxfYXJyYXkgayBjIChsZW4tMSlcbiAgICAgIGxldCBnZXRfZGF0YSA9IGdldF9kYXRhXG4gICAgICBsZXQgZ2V0X2tleSBjID1cbiAgICAgICAgbGV0IGxlbiA9IGxlbmd0aCBjIGluXG4gICAgICAgIGlmIGxlbiA9IDAgdGhlbiBTb21lIFt8fF1cbiAgICAgICAgZWxzZVxuICAgICAgICAgIG1hdGNoIGdldF9rZXkgYyAwIHdpdGhcbiAgICAgICAgICB8IE5vbmUgLT4gTm9uZVxuICAgICAgICAgIHwgU29tZSBrMCAtPlxuICAgICAgICAgICAgICBsZXQgcmVjIGZpbGwgYSBpID1cbiAgICAgICAgICAgICAgICBpZiBpIDwgMSB0aGVuIFNvbWUgYVxuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgIG1hdGNoIGdldF9rZXkgYyBpIHdpdGhcbiAgICAgICAgICAgICAgICAgIHwgTm9uZSAtPiBOb25lXG4gICAgICAgICAgICAgICAgICB8IFNvbWUga2kgLT5cbiAgICAgICAgICAgICAgICAgICAgICBhLihpKSA8LSBraTtcbiAgICAgICAgICAgICAgICAgICAgICBmaWxsIGEgKGktMSlcbiAgICAgICAgICAgICAgaW5cbiAgICAgICAgICAgICAgbGV0IGEgPSBBcnJheS5tYWtlIGxlbiBrMCBpblxuICAgICAgICAgICAgICBmaWxsIGEgKGxlbi0xKVxuICAgICAgbGV0IHNldF9rZXlfZGF0YSBjIGsgZCA9XG4gICAgICAgIHVuc2V0X2RhdGEgYztcbiAgICAgICAgZm9yIGk9MCB0byBBcnJheS5sZW5ndGggayAtMSBkb1xuICAgICAgICAgIHNldF9rZXkgYyBpIGsuKGkpO1xuICAgICAgICBkb25lO1xuICAgICAgICBzZXRfZGF0YSBjIGRcbiAgICAgIGxldCBjaGVja19rZXkgYyA9XG4gICAgICAgIGxldCByZWMgY2hlY2sgYyBpID1cbiAgICAgICAgICBpIDwgMCB8fCAoY2hlY2tfa2V5IGMgaSAmJiBjaGVjayBjIChpLTEpKSBpblxuICAgICAgICBjaGVjayBjIChsZW5ndGggYyAtIDEpXG4gICAgZW5kKVxuXG4gIG1vZHVsZSBNYWtlKEg6IEhhc2h0YmwuSGFzaGVkVHlwZSk6IChTIHdpdGggdHlwZSBrZXkgPSBILnQgYXJyYXkpID1cbiAgc3RydWN0XG4gICAgaW5jbHVkZSBNYWtlU2VlZGVkKHN0cnVjdFxuICAgICAgICB0eXBlIHQgPSBILnRcbiAgICAgICAgbGV0IGVxdWFsID0gSC5lcXVhbFxuICAgICAgICBsZXQgaGFzaCAoX3NlZWQ6IGludCkgeCA9IEguaGFzaCB4XG4gICAgICBlbmQpXG4gICAgbGV0IGNyZWF0ZSBzeiA9IGNyZWF0ZSB+cmFuZG9tOmZhbHNlIHN6XG4gICAgbGV0IG9mX3NlcSBpID1cbiAgICAgIGxldCB0YmwgPSBjcmVhdGUgMTYgaW5cbiAgICAgIHJlcGxhY2Vfc2VxIHRibCBpO1xuICAgICAgdGJsXG4gIGVuZFxuZW5kXG4iLCIoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9DYW1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgTWFudWVsIFNlcnJhbm8gZXQgWGF2aWVyIExlcm95LCBJTlJJQSBSb2NxdWVuY291cnQgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIENvcHlyaWdodCAyMDAwIEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUgZXQgICAgICopXG4oKiAgICAgZW4gQXV0b21hdGlxdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKiAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mICAgICopXG4oKiAgIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLjEsIHdpdGggdGhlICAgICAgICAgICopXG4oKiAgIHNwZWNpYWwgZXhjZXB0aW9uIG9uIGxpbmtpbmcgZGVzY3JpYmVkIGluIHRoZSBmaWxlIExJQ0VOU0UuICAgICAgICAgICopXG4oKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopXG4oKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopXG5cbigqIE1vZHVsZSBbQmlnYXJyYXldOiBsYXJnZSwgbXVsdGktZGltZW5zaW9uYWwsIG51bWVyaWNhbCBhcnJheXMgKilcblxuKCogVGhlc2UgdHlwZXMgaW4gbXVzdCBiZSBrZXB0IGluIHN5bmMgd2l0aCB0aGUgdGFibGVzIGluXG4gICAuLi90eXBpbmcvdHlwZW9wdC5tbCAqKVxuXG50eXBlIGZsb2F0MzJfZWx0ID0gRmxvYXQzMl9lbHRcbnR5cGUgZmxvYXQ2NF9lbHQgPSBGbG9hdDY0X2VsdFxudHlwZSBpbnQ4X3NpZ25lZF9lbHQgPSBJbnQ4X3NpZ25lZF9lbHRcbnR5cGUgaW50OF91bnNpZ25lZF9lbHQgPSBJbnQ4X3Vuc2lnbmVkX2VsdFxudHlwZSBpbnQxNl9zaWduZWRfZWx0ID0gSW50MTZfc2lnbmVkX2VsdFxudHlwZSBpbnQxNl91bnNpZ25lZF9lbHQgPSBJbnQxNl91bnNpZ25lZF9lbHRcbnR5cGUgaW50MzJfZWx0ID0gSW50MzJfZWx0XG50eXBlIGludDY0X2VsdCA9IEludDY0X2VsdFxudHlwZSBpbnRfZWx0ID0gSW50X2VsdFxudHlwZSBuYXRpdmVpbnRfZWx0ID0gTmF0aXZlaW50X2VsdFxudHlwZSBjb21wbGV4MzJfZWx0ID0gQ29tcGxleDMyX2VsdFxudHlwZSBjb21wbGV4NjRfZWx0ID0gQ29tcGxleDY0X2VsdFxuXG50eXBlICgnYSwgJ2IpIGtpbmQgPVxuICAgIEZsb2F0MzIgOiAoZmxvYXQsIGZsb2F0MzJfZWx0KSBraW5kXG4gIHwgRmxvYXQ2NCA6IChmbG9hdCwgZmxvYXQ2NF9lbHQpIGtpbmRcbiAgfCBJbnQ4X3NpZ25lZCA6IChpbnQsIGludDhfc2lnbmVkX2VsdCkga2luZFxuICB8IEludDhfdW5zaWduZWQgOiAoaW50LCBpbnQ4X3Vuc2lnbmVkX2VsdCkga2luZFxuICB8IEludDE2X3NpZ25lZCA6IChpbnQsIGludDE2X3NpZ25lZF9lbHQpIGtpbmRcbiAgfCBJbnQxNl91bnNpZ25lZCA6IChpbnQsIGludDE2X3Vuc2lnbmVkX2VsdCkga2luZFxuICB8IEludDMyIDogKGludDMyLCBpbnQzMl9lbHQpIGtpbmRcbiAgfCBJbnQ2NCA6IChpbnQ2NCwgaW50NjRfZWx0KSBraW5kXG4gIHwgSW50IDogKGludCwgaW50X2VsdCkga2luZFxuICB8IE5hdGl2ZWludCA6IChuYXRpdmVpbnQsIG5hdGl2ZWludF9lbHQpIGtpbmRcbiAgfCBDb21wbGV4MzIgOiAoQ29tcGxleC50LCBjb21wbGV4MzJfZWx0KSBraW5kXG4gIHwgQ29tcGxleDY0IDogKENvbXBsZXgudCwgY29tcGxleDY0X2VsdCkga2luZFxuICB8IENoYXIgOiAoY2hhciwgaW50OF91bnNpZ25lZF9lbHQpIGtpbmRcblxudHlwZSBjX2xheW91dCA9IENfbGF5b3V0X3R5cFxudHlwZSBmb3J0cmFuX2xheW91dCA9IEZvcnRyYW5fbGF5b3V0X3R5cCAoKiopXG5cbnR5cGUgJ2EgbGF5b3V0ID1cbiAgICBDX2xheW91dDogY19sYXlvdXQgbGF5b3V0XG4gIHwgRm9ydHJhbl9sYXlvdXQ6IGZvcnRyYW5fbGF5b3V0IGxheW91dFxuXG4oKiBLZWVwIHRob3NlIGNvbnN0YW50cyBpbiBzeW5jIHdpdGggdGhlIGNhbWxfYmFfa2luZCBlbnVtZXJhdGlvblxuICAgaW4gYmlnYXJyYXkuaCAqKVxuXG5sZXQgZmxvYXQzMiA9IEZsb2F0MzJcbmxldCBmbG9hdDY0ID0gRmxvYXQ2NFxubGV0IGludDhfc2lnbmVkID0gSW50OF9zaWduZWRcbmxldCBpbnQ4X3Vuc2lnbmVkID0gSW50OF91bnNpZ25lZFxubGV0IGludDE2X3NpZ25lZCA9IEludDE2X3NpZ25lZFxubGV0IGludDE2X3Vuc2lnbmVkID0gSW50MTZfdW5zaWduZWRcbmxldCBpbnQzMiA9IEludDMyXG5sZXQgaW50NjQgPSBJbnQ2NFxubGV0IGludCA9IEludFxubGV0IG5hdGl2ZWludCA9IE5hdGl2ZWludFxubGV0IGNvbXBsZXgzMiA9IENvbXBsZXgzMlxubGV0IGNvbXBsZXg2NCA9IENvbXBsZXg2NFxubGV0IGNoYXIgPSBDaGFyXG5cbmxldCBraW5kX3NpemVfaW5fYnl0ZXMgOiB0eXBlIGEgYi4gKGEsIGIpIGtpbmQgLT4gaW50ID0gZnVuY3Rpb25cbiAgfCBGbG9hdDMyIC0+IDRcbiAgfCBGbG9hdDY0IC0+IDhcbiAgfCBJbnQ4X3NpZ25lZCAtPiAxXG4gIHwgSW50OF91bnNpZ25lZCAtPiAxXG4gIHwgSW50MTZfc2lnbmVkIC0+IDJcbiAgfCBJbnQxNl91bnNpZ25lZCAtPiAyXG4gIHwgSW50MzIgLT4gNFxuICB8IEludDY0IC0+IDhcbiAgfCBJbnQgLT4gU3lzLndvcmRfc2l6ZSAvIDhcbiAgfCBOYXRpdmVpbnQgLT4gU3lzLndvcmRfc2l6ZSAvIDhcbiAgfCBDb21wbGV4MzIgLT4gOFxuICB8IENvbXBsZXg2NCAtPiAxNlxuICB8IENoYXIgLT4gMVxuXG4oKiBLZWVwIHRob3NlIGNvbnN0YW50cyBpbiBzeW5jIHdpdGggdGhlIGNhbWxfYmFfbGF5b3V0IGVudW1lcmF0aW9uXG4gICBpbiBiaWdhcnJheS5oICopXG5cbmxldCBjX2xheW91dCA9IENfbGF5b3V0XG5sZXQgZm9ydHJhbl9sYXlvdXQgPSBGb3J0cmFuX2xheW91dFxuXG5tb2R1bGUgR2VuYXJyYXkgPSBzdHJ1Y3RcbiAgdHlwZSAoISdhLCAhJ2IsICEnYykgdFxuICBleHRlcm5hbCBjcmVhdGU6ICgnYSwgJ2IpIGtpbmQgLT4gJ2MgbGF5b3V0IC0+IGludCBhcnJheSAtPiAoJ2EsICdiLCAnYykgdFxuICAgICA9IFwiY2FtbF9iYV9jcmVhdGVcIlxuICBleHRlcm5hbCBnZXQ6ICgnYSwgJ2IsICdjKSB0IC0+IGludCBhcnJheSAtPiAnYVxuICAgICA9IFwiY2FtbF9iYV9nZXRfZ2VuZXJpY1wiXG4gIGV4dGVybmFsIHNldDogKCdhLCAnYiwgJ2MpIHQgLT4gaW50IGFycmF5IC0+ICdhIC0+IHVuaXRcbiAgICAgPSBcImNhbWxfYmFfc2V0X2dlbmVyaWNcIlxuXG4gIGxldCByZWMgY2xvb3AgYXJyIGlkeCBmIGNvbCBtYXggPVxuICAgIGlmIGNvbCA9IEFycmF5Lmxlbmd0aCBpZHggdGhlbiBzZXQgYXJyIGlkeCAoZiBpZHgpXG4gICAgZWxzZSBmb3IgaiA9IDAgdG8gcHJlZCBtYXguKGNvbCkgZG9cbiAgICAgICAgICAgaWR4Lihjb2wpIDwtIGo7XG4gICAgICAgICAgIGNsb29wIGFyciBpZHggZiAoc3VjYyBjb2wpIG1heFxuICAgICAgICAgZG9uZVxuICBsZXQgcmVjIGZsb29wIGFyciBpZHggZiBjb2wgbWF4ID1cbiAgICBpZiBjb2wgPCAwIHRoZW4gc2V0IGFyciBpZHggKGYgaWR4KVxuICAgIGVsc2UgZm9yIGogPSAxIHRvIG1heC4oY29sKSBkb1xuICAgICAgICAgICBpZHguKGNvbCkgPC0gajtcbiAgICAgICAgICAgZmxvb3AgYXJyIGlkeCBmIChwcmVkIGNvbCkgbWF4XG4gICAgICAgICBkb25lXG4gIGxldCBpbml0ICh0eXBlIHQpIGtpbmQgKGxheW91dCA6IHQgbGF5b3V0KSBkaW1zIGYgPVxuICAgIGxldCBhcnIgPSBjcmVhdGUga2luZCBsYXlvdXQgZGltcyBpblxuICAgIG1hdGNoIEFycmF5Lmxlbmd0aCBkaW1zLCBsYXlvdXQgd2l0aFxuICAgIHwgMCwgXyAtPiBhcnJcbiAgICB8IGRsZW4sIENfbGF5b3V0IC0+IGNsb29wIGFyciAoQXJyYXkubWFrZSBkbGVuIDApIGYgMCBkaW1zOyBhcnJcbiAgICB8IGRsZW4sIEZvcnRyYW5fbGF5b3V0IC0+IGZsb29wIGFyciAoQXJyYXkubWFrZSBkbGVuIDEpIGYgKHByZWQgZGxlbikgZGltcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyclxuXG4gIGV4dGVybmFsIG51bV9kaW1zOiAoJ2EsICdiLCAnYykgdCAtPiBpbnQgPSBcImNhbWxfYmFfbnVtX2RpbXNcIlxuICBleHRlcm5hbCBudGhfZGltOiAoJ2EsICdiLCAnYykgdCAtPiBpbnQgLT4gaW50ID0gXCJjYW1sX2JhX2RpbVwiXG4gIGxldCBkaW1zIGEgPVxuICAgIGxldCBuID0gbnVtX2RpbXMgYSBpblxuICAgIGxldCBkID0gQXJyYXkubWFrZSBuIDAgaW5cbiAgICBmb3IgaSA9IDAgdG8gbi0xIGRvIGQuKGkpIDwtIG50aF9kaW0gYSBpIGRvbmU7XG4gICAgZFxuXG4gIGV4dGVybmFsIGtpbmQ6ICgnYSwgJ2IsICdjKSB0IC0+ICgnYSwgJ2IpIGtpbmQgPSBcImNhbWxfYmFfa2luZFwiXG4gIGV4dGVybmFsIGxheW91dDogKCdhLCAnYiwgJ2MpIHQgLT4gJ2MgbGF5b3V0ID0gXCJjYW1sX2JhX2xheW91dFwiXG4gIGV4dGVybmFsIGNoYW5nZV9sYXlvdXQ6ICgnYSwgJ2IsICdjKSB0IC0+ICdkIGxheW91dCAtPiAoJ2EsICdiLCAnZCkgdFxuICAgICA9IFwiY2FtbF9iYV9jaGFuZ2VfbGF5b3V0XCJcblxuICBsZXQgc2l6ZV9pbl9ieXRlcyBhcnIgPVxuICAgIChraW5kX3NpemVfaW5fYnl0ZXMgKGtpbmQgYXJyKSkgKiAoQXJyYXkuZm9sZF9sZWZ0ICggKiApIDEgKGRpbXMgYXJyKSlcblxuICBleHRlcm5hbCBzdWJfbGVmdDogKCdhLCAnYiwgY19sYXlvdXQpIHQgLT4gaW50IC0+IGludCAtPiAoJ2EsICdiLCBjX2xheW91dCkgdFxuICAgICA9IFwiY2FtbF9iYV9zdWJcIlxuICBleHRlcm5hbCBzdWJfcmlnaHQ6ICgnYSwgJ2IsIGZvcnRyYW5fbGF5b3V0KSB0IC0+IGludCAtPiBpbnQgLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKCdhLCAnYiwgZm9ydHJhbl9sYXlvdXQpIHRcbiAgICAgPSBcImNhbWxfYmFfc3ViXCJcbiAgZXh0ZXJuYWwgc2xpY2VfbGVmdDogKCdhLCAnYiwgY19sYXlvdXQpIHQgLT4gaW50IGFycmF5IC0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICgnYSwgJ2IsIGNfbGF5b3V0KSB0XG4gICAgID0gXCJjYW1sX2JhX3NsaWNlXCJcbiAgZXh0ZXJuYWwgc2xpY2VfcmlnaHQ6ICgnYSwgJ2IsIGZvcnRyYW5fbGF5b3V0KSB0IC0+IGludCBhcnJheSAtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2EsICdiLCBmb3J0cmFuX2xheW91dCkgdFxuICAgICA9IFwiY2FtbF9iYV9zbGljZVwiXG4gIGV4dGVybmFsIGJsaXQ6ICgnYSwgJ2IsICdjKSB0IC0+ICgnYSwgJ2IsICdjKSB0IC0+IHVuaXRcbiAgICAgPSBcImNhbWxfYmFfYmxpdFwiXG4gIGV4dGVybmFsIGZpbGw6ICgnYSwgJ2IsICdjKSB0IC0+ICdhIC0+IHVuaXQgPSBcImNhbWxfYmFfZmlsbFwiXG5lbmRcblxubW9kdWxlIEFycmF5MCA9IHN0cnVjdFxuICB0eXBlICghJ2EsICEnYiwgISdjKSB0ID0gKCdhLCAnYiwgJ2MpIEdlbmFycmF5LnRcbiAgbGV0IGNyZWF0ZSBraW5kIGxheW91dCA9XG4gICAgR2VuYXJyYXkuY3JlYXRlIGtpbmQgbGF5b3V0IFt8fF1cbiAgbGV0IGdldCBhcnIgPSBHZW5hcnJheS5nZXQgYXJyIFt8fF1cbiAgbGV0IHNldCBhcnIgPSBHZW5hcnJheS5zZXQgYXJyIFt8fF1cbiAgZXh0ZXJuYWwga2luZDogKCdhLCAnYiwgJ2MpIHQgLT4gKCdhLCAnYikga2luZCA9IFwiY2FtbF9iYV9raW5kXCJcbiAgZXh0ZXJuYWwgbGF5b3V0OiAoJ2EsICdiLCAnYykgdCAtPiAnYyBsYXlvdXQgPSBcImNhbWxfYmFfbGF5b3V0XCJcblxuICBleHRlcm5hbCBjaGFuZ2VfbGF5b3V0OiAoJ2EsICdiLCAnYykgdCAtPiAnZCBsYXlvdXQgLT4gKCdhLCAnYiwgJ2QpIHRcbiAgICA9IFwiY2FtbF9iYV9jaGFuZ2VfbGF5b3V0XCJcblxuICBsZXQgc2l6ZV9pbl9ieXRlcyBhcnIgPSBraW5kX3NpemVfaW5fYnl0ZXMgKGtpbmQgYXJyKVxuXG4gIGV4dGVybmFsIGJsaXQ6ICgnYSwgJ2IsICdjKSB0IC0+ICgnYSwgJ2IsICdjKSB0IC0+IHVuaXQgPSBcImNhbWxfYmFfYmxpdFwiXG4gIGV4dGVybmFsIGZpbGw6ICgnYSwgJ2IsICdjKSB0IC0+ICdhIC0+IHVuaXQgPSBcImNhbWxfYmFfZmlsbFwiXG5cbiAgbGV0IG9mX3ZhbHVlIGtpbmQgbGF5b3V0IHYgPVxuICAgIGxldCBhID0gY3JlYXRlIGtpbmQgbGF5b3V0IGluXG4gICAgc2V0IGEgdjtcbiAgICBhXG4gIGxldCBpbml0ID0gb2ZfdmFsdWVcbmVuZFxuXG5tb2R1bGUgQXJyYXkxID0gc3RydWN0XG4gIHR5cGUgKCEnYSwgISdiLCAhJ2MpIHQgPSAoJ2EsICdiLCAnYykgR2VuYXJyYXkudFxuICBsZXQgY3JlYXRlIGtpbmQgbGF5b3V0IGRpbSA9XG4gICAgR2VuYXJyYXkuY3JlYXRlIGtpbmQgbGF5b3V0IFt8ZGltfF1cbiAgZXh0ZXJuYWwgZ2V0OiAoJ2EsICdiLCAnYykgdCAtPiBpbnQgLT4gJ2EgPSBcIiVjYW1sX2JhX3JlZl8xXCJcbiAgZXh0ZXJuYWwgc2V0OiAoJ2EsICdiLCAnYykgdCAtPiBpbnQgLT4gJ2EgLT4gdW5pdCA9IFwiJWNhbWxfYmFfc2V0XzFcIlxuICBleHRlcm5hbCB1bnNhZmVfZ2V0OiAoJ2EsICdiLCAnYykgdCAtPiBpbnQgLT4gJ2EgPSBcIiVjYW1sX2JhX3Vuc2FmZV9yZWZfMVwiXG4gIGV4dGVybmFsIHVuc2FmZV9zZXQ6ICgnYSwgJ2IsICdjKSB0IC0+IGludCAtPiAnYSAtPiB1bml0XG4gICAgID0gXCIlY2FtbF9iYV91bnNhZmVfc2V0XzFcIlxuICBleHRlcm5hbCBkaW06ICgnYSwgJ2IsICdjKSB0IC0+IGludCA9IFwiJWNhbWxfYmFfZGltXzFcIlxuICBleHRlcm5hbCBraW5kOiAoJ2EsICdiLCAnYykgdCAtPiAoJ2EsICdiKSBraW5kID0gXCJjYW1sX2JhX2tpbmRcIlxuICBleHRlcm5hbCBsYXlvdXQ6ICgnYSwgJ2IsICdjKSB0IC0+ICdjIGxheW91dCA9IFwiY2FtbF9iYV9sYXlvdXRcIlxuXG4gIGV4dGVybmFsIGNoYW5nZV9sYXlvdXQ6ICgnYSwgJ2IsICdjKSB0IC0+ICdkIGxheW91dCAtPiAoJ2EsICdiLCAnZCkgdFxuICAgID0gXCJjYW1sX2JhX2NoYW5nZV9sYXlvdXRcIlxuXG4gIGxldCBzaXplX2luX2J5dGVzIGFyciA9XG4gICAgKGtpbmRfc2l6ZV9pbl9ieXRlcyAoa2luZCBhcnIpKSAqIChkaW0gYXJyKVxuXG4gIGV4dGVybmFsIHN1YjogKCdhLCAnYiwgJ2MpIHQgLT4gaW50IC0+IGludCAtPiAoJ2EsICdiLCAnYykgdCA9IFwiY2FtbF9iYV9zdWJcIlxuICBsZXQgc2xpY2UgKHR5cGUgdCkgKGEgOiAoXywgXywgdCkgR2VuYXJyYXkudCkgbiA9XG4gICAgbWF0Y2ggbGF5b3V0IGEgd2l0aFxuICAgIHwgQ19sYXlvdXQgLT4gKEdlbmFycmF5LnNsaWNlX2xlZnQgYSBbfG58XSA6IChfLCBfLCB0KSBHZW5hcnJheS50KVxuICAgIHwgRm9ydHJhbl9sYXlvdXQgLT4gKEdlbmFycmF5LnNsaWNlX3JpZ2h0IGEgW3xufF06IChfLCBfLCB0KSBHZW5hcnJheS50KVxuICBleHRlcm5hbCBibGl0OiAoJ2EsICdiLCAnYykgdCAtPiAoJ2EsICdiLCAnYykgdCAtPiB1bml0ID0gXCJjYW1sX2JhX2JsaXRcIlxuICBleHRlcm5hbCBmaWxsOiAoJ2EsICdiLCAnYykgdCAtPiAnYSAtPiB1bml0ID0gXCJjYW1sX2JhX2ZpbGxcIlxuICBsZXQgY19pbml0IGFyciBkaW0gZiA9XG4gICAgZm9yIGkgPSAwIHRvIHByZWQgZGltIGRvIHVuc2FmZV9zZXQgYXJyIGkgKGYgaSkgZG9uZVxuICBsZXQgZm9ydHJhbl9pbml0IGFyciBkaW0gZiA9XG4gICAgZm9yIGkgPSAxIHRvIGRpbSBkbyB1bnNhZmVfc2V0IGFyciBpIChmIGkpIGRvbmVcbiAgbGV0IGluaXQgKHR5cGUgdCkga2luZCAobGF5b3V0IDogdCBsYXlvdXQpIGRpbSBmID1cbiAgICBsZXQgYXJyID0gY3JlYXRlIGtpbmQgbGF5b3V0IGRpbSBpblxuICAgIG1hdGNoIGxheW91dCB3aXRoXG4gICAgfCBDX2xheW91dCAtPiBjX2luaXQgYXJyIGRpbSBmOyBhcnJcbiAgICB8IEZvcnRyYW5fbGF5b3V0IC0+IGZvcnRyYW5faW5pdCBhcnIgZGltIGY7IGFyclxuICBsZXQgb2ZfYXJyYXkgKHR5cGUgdCkga2luZCAobGF5b3V0OiB0IGxheW91dCkgZGF0YSA9XG4gICAgbGV0IGJhID0gY3JlYXRlIGtpbmQgbGF5b3V0IChBcnJheS5sZW5ndGggZGF0YSkgaW5cbiAgICBsZXQgb2ZzID1cbiAgICAgIG1hdGNoIGxheW91dCB3aXRoXG4gICAgICAgIENfbGF5b3V0IC0+IDBcbiAgICAgIHwgRm9ydHJhbl9sYXlvdXQgLT4gMVxuICAgIGluXG4gICAgZm9yIGkgPSAwIHRvIEFycmF5Lmxlbmd0aCBkYXRhIC0gMSBkbyB1bnNhZmVfc2V0IGJhIChpICsgb2ZzKSBkYXRhLihpKSBkb25lO1xuICAgIGJhXG5lbmRcblxubW9kdWxlIEFycmF5MiA9IHN0cnVjdFxuICB0eXBlICghJ2EsICEnYiwgISdjKSB0ID0gKCdhLCAnYiwgJ2MpIEdlbmFycmF5LnRcbiAgbGV0IGNyZWF0ZSBraW5kIGxheW91dCBkaW0xIGRpbTIgPVxuICAgIEdlbmFycmF5LmNyZWF0ZSBraW5kIGxheW91dCBbfGRpbTE7IGRpbTJ8XVxuICBleHRlcm5hbCBnZXQ6ICgnYSwgJ2IsICdjKSB0IC0+IGludCAtPiBpbnQgLT4gJ2EgPSBcIiVjYW1sX2JhX3JlZl8yXCJcbiAgZXh0ZXJuYWwgc2V0OiAoJ2EsICdiLCAnYykgdCAtPiBpbnQgLT4gaW50IC0+ICdhIC0+IHVuaXQgPSBcIiVjYW1sX2JhX3NldF8yXCJcbiAgZXh0ZXJuYWwgdW5zYWZlX2dldDogKCdhLCAnYiwgJ2MpIHQgLT4gaW50IC0+IGludCAtPiAnYVxuICAgICA9IFwiJWNhbWxfYmFfdW5zYWZlX3JlZl8yXCJcbiAgZXh0ZXJuYWwgdW5zYWZlX3NldDogKCdhLCAnYiwgJ2MpIHQgLT4gaW50IC0+IGludCAtPiAnYSAtPiB1bml0XG4gICAgID0gXCIlY2FtbF9iYV91bnNhZmVfc2V0XzJcIlxuICBleHRlcm5hbCBkaW0xOiAoJ2EsICdiLCAnYykgdCAtPiBpbnQgPSBcIiVjYW1sX2JhX2RpbV8xXCJcbiAgZXh0ZXJuYWwgZGltMjogKCdhLCAnYiwgJ2MpIHQgLT4gaW50ID0gXCIlY2FtbF9iYV9kaW1fMlwiXG4gIGV4dGVybmFsIGtpbmQ6ICgnYSwgJ2IsICdjKSB0IC0+ICgnYSwgJ2IpIGtpbmQgPSBcImNhbWxfYmFfa2luZFwiXG4gIGV4dGVybmFsIGxheW91dDogKCdhLCAnYiwgJ2MpIHQgLT4gJ2MgbGF5b3V0ID0gXCJjYW1sX2JhX2xheW91dFwiXG5cbiAgZXh0ZXJuYWwgY2hhbmdlX2xheW91dDogKCdhLCAnYiwgJ2MpIHQgLT4gJ2QgbGF5b3V0IC0+ICgnYSwgJ2IsICdkKSB0XG4gICAgPSBcImNhbWxfYmFfY2hhbmdlX2xheW91dFwiXG5cbiAgbGV0IHNpemVfaW5fYnl0ZXMgYXJyID1cbiAgICAoa2luZF9zaXplX2luX2J5dGVzIChraW5kIGFycikpICogKGRpbTEgYXJyKSAqIChkaW0yIGFycilcblxuICBleHRlcm5hbCBzdWJfbGVmdDogKCdhLCAnYiwgY19sYXlvdXQpIHQgLT4gaW50IC0+IGludCAtPiAoJ2EsICdiLCBjX2xheW91dCkgdFxuICAgICA9IFwiY2FtbF9iYV9zdWJcIlxuICBleHRlcm5hbCBzdWJfcmlnaHQ6XG4gICAgKCdhLCAnYiwgZm9ydHJhbl9sYXlvdXQpIHQgLT4gaW50IC0+IGludCAtPiAoJ2EsICdiLCBmb3J0cmFuX2xheW91dCkgdFxuICAgICA9IFwiY2FtbF9iYV9zdWJcIlxuICBsZXQgc2xpY2VfbGVmdCBhIG4gPSBHZW5hcnJheS5zbGljZV9sZWZ0IGEgW3xufF1cbiAgbGV0IHNsaWNlX3JpZ2h0IGEgbiA9IEdlbmFycmF5LnNsaWNlX3JpZ2h0IGEgW3xufF1cbiAgZXh0ZXJuYWwgYmxpdDogKCdhLCAnYiwgJ2MpIHQgLT4gKCdhLCAnYiwgJ2MpIHQgLT4gdW5pdCA9IFwiY2FtbF9iYV9ibGl0XCJcbiAgZXh0ZXJuYWwgZmlsbDogKCdhLCAnYiwgJ2MpIHQgLT4gJ2EgLT4gdW5pdCA9IFwiY2FtbF9iYV9maWxsXCJcbiAgbGV0IGNfaW5pdCBhcnIgZGltMSBkaW0yIGYgPVxuICAgIGZvciBpID0gMCB0byBwcmVkIGRpbTEgZG9cbiAgICAgIGZvciBqID0gMCB0byBwcmVkIGRpbTIgZG9cbiAgICAgICAgdW5zYWZlX3NldCBhcnIgaSBqIChmIGkgailcbiAgICAgIGRvbmVcbiAgICBkb25lXG4gIGxldCBmb3J0cmFuX2luaXQgYXJyIGRpbTEgZGltMiBmID1cbiAgICBmb3IgaiA9IDEgdG8gZGltMiBkb1xuICAgICAgZm9yIGkgPSAxIHRvIGRpbTEgZG9cbiAgICAgICAgdW5zYWZlX3NldCBhcnIgaSBqIChmIGkgailcbiAgICAgIGRvbmVcbiAgICBkb25lXG4gIGxldCBpbml0ICh0eXBlIHQpIGtpbmQgKGxheW91dCA6IHQgbGF5b3V0KSBkaW0xIGRpbTIgZiA9XG4gICAgbGV0IGFyciA9IGNyZWF0ZSBraW5kIGxheW91dCBkaW0xIGRpbTIgaW5cbiAgICBtYXRjaCBsYXlvdXQgd2l0aFxuICAgIHwgQ19sYXlvdXQgLT4gY19pbml0IGFyciBkaW0xIGRpbTIgZjsgYXJyXG4gICAgfCBGb3J0cmFuX2xheW91dCAtPiBmb3J0cmFuX2luaXQgYXJyIGRpbTEgZGltMiBmOyBhcnJcbiAgbGV0IG9mX2FycmF5ICh0eXBlIHQpIGtpbmQgKGxheW91dDogdCBsYXlvdXQpIGRhdGEgPVxuICAgIGxldCBkaW0xID0gQXJyYXkubGVuZ3RoIGRhdGEgaW5cbiAgICBsZXQgZGltMiA9IGlmIGRpbTEgPSAwIHRoZW4gMCBlbHNlIEFycmF5Lmxlbmd0aCBkYXRhLigwKSBpblxuICAgIGxldCBiYSA9IGNyZWF0ZSBraW5kIGxheW91dCBkaW0xIGRpbTIgaW5cbiAgICBsZXQgb2ZzID1cbiAgICAgIG1hdGNoIGxheW91dCB3aXRoXG4gICAgICAgIENfbGF5b3V0IC0+IDBcbiAgICAgIHwgRm9ydHJhbl9sYXlvdXQgLT4gMVxuICAgIGluXG4gICAgZm9yIGkgPSAwIHRvIGRpbTEgLSAxIGRvXG4gICAgICBsZXQgcm93ID0gZGF0YS4oaSkgaW5cbiAgICAgIGlmIEFycmF5Lmxlbmd0aCByb3cgPD4gZGltMiB0aGVuXG4gICAgICAgIGludmFsaWRfYXJnKFwiQmlnYXJyYXkuQXJyYXkyLm9mX2FycmF5OiBub24tcmVjdGFuZ3VsYXIgZGF0YVwiKTtcbiAgICAgIGZvciBqID0gMCB0byBkaW0yIC0gMSBkb1xuICAgICAgICB1bnNhZmVfc2V0IGJhIChpICsgb2ZzKSAoaiArIG9mcykgcm93LihqKVxuICAgICAgZG9uZVxuICAgIGRvbmU7XG4gICAgYmFcbmVuZFxuXG5tb2R1bGUgQXJyYXkzID0gc3RydWN0XG4gIHR5cGUgKCEnYSwgISdiLCAhJ2MpIHQgPSAoJ2EsICdiLCAnYykgR2VuYXJyYXkudFxuICBsZXQgY3JlYXRlIGtpbmQgbGF5b3V0IGRpbTEgZGltMiBkaW0zID1cbiAgICBHZW5hcnJheS5jcmVhdGUga2luZCBsYXlvdXQgW3xkaW0xOyBkaW0yOyBkaW0zfF1cbiAgZXh0ZXJuYWwgZ2V0OiAoJ2EsICdiLCAnYykgdCAtPiBpbnQgLT4gaW50IC0+IGludCAtPiAnYSA9IFwiJWNhbWxfYmFfcmVmXzNcIlxuICBleHRlcm5hbCBzZXQ6ICgnYSwgJ2IsICdjKSB0IC0+IGludCAtPiBpbnQgLT4gaW50IC0+ICdhIC0+IHVuaXRcbiAgICAgPSBcIiVjYW1sX2JhX3NldF8zXCJcbiAgZXh0ZXJuYWwgdW5zYWZlX2dldDogKCdhLCAnYiwgJ2MpIHQgLT4gaW50IC0+IGludCAtPiBpbnQgLT4gJ2FcbiAgICAgPSBcIiVjYW1sX2JhX3Vuc2FmZV9yZWZfM1wiXG4gIGV4dGVybmFsIHVuc2FmZV9zZXQ6ICgnYSwgJ2IsICdjKSB0IC0+IGludCAtPiBpbnQgLT4gaW50IC0+ICdhIC0+IHVuaXRcbiAgICAgPSBcIiVjYW1sX2JhX3Vuc2FmZV9zZXRfM1wiXG4gIGV4dGVybmFsIGRpbTE6ICgnYSwgJ2IsICdjKSB0IC0+IGludCA9IFwiJWNhbWxfYmFfZGltXzFcIlxuICBleHRlcm5hbCBkaW0yOiAoJ2EsICdiLCAnYykgdCAtPiBpbnQgPSBcIiVjYW1sX2JhX2RpbV8yXCJcbiAgZXh0ZXJuYWwgZGltMzogKCdhLCAnYiwgJ2MpIHQgLT4gaW50ID0gXCIlY2FtbF9iYV9kaW1fM1wiXG4gIGV4dGVybmFsIGtpbmQ6ICgnYSwgJ2IsICdjKSB0IC0+ICgnYSwgJ2IpIGtpbmQgPSBcImNhbWxfYmFfa2luZFwiXG4gIGV4dGVybmFsIGxheW91dDogKCdhLCAnYiwgJ2MpIHQgLT4gJ2MgbGF5b3V0ID0gXCJjYW1sX2JhX2xheW91dFwiXG5cbiAgZXh0ZXJuYWwgY2hhbmdlX2xheW91dDogKCdhLCAnYiwgJ2MpIHQgLT4gJ2QgbGF5b3V0IC0+ICgnYSwgJ2IsICdkKSB0XG4gICAgPSBcImNhbWxfYmFfY2hhbmdlX2xheW91dFwiXG5cbiAgbGV0IHNpemVfaW5fYnl0ZXMgYXJyID1cbiAgICAoa2luZF9zaXplX2luX2J5dGVzIChraW5kIGFycikpICogKGRpbTEgYXJyKSAqIChkaW0yIGFycikgKiAoZGltMyBhcnIpXG5cbiAgZXh0ZXJuYWwgc3ViX2xlZnQ6ICgnYSwgJ2IsIGNfbGF5b3V0KSB0IC0+IGludCAtPiBpbnQgLT4gKCdhLCAnYiwgY19sYXlvdXQpIHRcbiAgICAgPSBcImNhbWxfYmFfc3ViXCJcbiAgZXh0ZXJuYWwgc3ViX3JpZ2h0OlxuICAgICAoJ2EsICdiLCBmb3J0cmFuX2xheW91dCkgdCAtPiBpbnQgLT4gaW50IC0+ICgnYSwgJ2IsIGZvcnRyYW5fbGF5b3V0KSB0XG4gICAgID0gXCJjYW1sX2JhX3N1YlwiXG4gIGxldCBzbGljZV9sZWZ0XzEgYSBuIG0gPSBHZW5hcnJheS5zbGljZV9sZWZ0IGEgW3xuOyBtfF1cbiAgbGV0IHNsaWNlX3JpZ2h0XzEgYSBuIG0gPSBHZW5hcnJheS5zbGljZV9yaWdodCBhIFt8bjsgbXxdXG4gIGxldCBzbGljZV9sZWZ0XzIgYSBuID0gR2VuYXJyYXkuc2xpY2VfbGVmdCBhIFt8bnxdXG4gIGxldCBzbGljZV9yaWdodF8yIGEgbiA9IEdlbmFycmF5LnNsaWNlX3JpZ2h0IGEgW3xufF1cbiAgZXh0ZXJuYWwgYmxpdDogKCdhLCAnYiwgJ2MpIHQgLT4gKCdhLCAnYiwgJ2MpIHQgLT4gdW5pdCA9IFwiY2FtbF9iYV9ibGl0XCJcbiAgZXh0ZXJuYWwgZmlsbDogKCdhLCAnYiwgJ2MpIHQgLT4gJ2EgLT4gdW5pdCA9IFwiY2FtbF9iYV9maWxsXCJcbiAgbGV0IGNfaW5pdCBhcnIgZGltMSBkaW0yIGRpbTMgZiA9XG4gICAgZm9yIGkgPSAwIHRvIHByZWQgZGltMSBkb1xuICAgICAgZm9yIGogPSAwIHRvIHByZWQgZGltMiBkb1xuICAgICAgICBmb3IgayA9IDAgdG8gcHJlZCBkaW0zIGRvXG4gICAgICAgICAgdW5zYWZlX3NldCBhcnIgaSBqIGsgKGYgaSBqIGspXG4gICAgICAgIGRvbmVcbiAgICAgIGRvbmVcbiAgICBkb25lXG4gIGxldCBmb3J0cmFuX2luaXQgYXJyIGRpbTEgZGltMiBkaW0zIGYgPVxuICAgIGZvciBrID0gMSB0byBkaW0zIGRvXG4gICAgICBmb3IgaiA9IDEgdG8gZGltMiBkb1xuICAgICAgICBmb3IgaSA9IDEgdG8gZGltMSBkb1xuICAgICAgICAgIHVuc2FmZV9zZXQgYXJyIGkgaiBrIChmIGkgaiBrKVxuICAgICAgICBkb25lXG4gICAgICBkb25lXG4gICAgZG9uZVxuICBsZXQgaW5pdCAodHlwZSB0KSBraW5kIChsYXlvdXQgOiB0IGxheW91dCkgZGltMSBkaW0yIGRpbTMgZiA9XG4gICAgbGV0IGFyciA9IGNyZWF0ZSBraW5kIGxheW91dCBkaW0xIGRpbTIgZGltMyBpblxuICAgIG1hdGNoIGxheW91dCB3aXRoXG4gICAgfCBDX2xheW91dCAtPiBjX2luaXQgYXJyIGRpbTEgZGltMiBkaW0zIGY7IGFyclxuICAgIHwgRm9ydHJhbl9sYXlvdXQgLT4gZm9ydHJhbl9pbml0IGFyciBkaW0xIGRpbTIgZGltMyBmOyBhcnJcbiAgbGV0IG9mX2FycmF5ICh0eXBlIHQpIGtpbmQgKGxheW91dDogdCBsYXlvdXQpIGRhdGEgPVxuICAgIGxldCBkaW0xID0gQXJyYXkubGVuZ3RoIGRhdGEgaW5cbiAgICBsZXQgZGltMiA9IGlmIGRpbTEgPSAwIHRoZW4gMCBlbHNlIEFycmF5Lmxlbmd0aCBkYXRhLigwKSBpblxuICAgIGxldCBkaW0zID0gaWYgZGltMiA9IDAgdGhlbiAwIGVsc2UgQXJyYXkubGVuZ3RoIGRhdGEuKDApLigwKSBpblxuICAgIGxldCBiYSA9IGNyZWF0ZSBraW5kIGxheW91dCBkaW0xIGRpbTIgZGltMyBpblxuICAgIGxldCBvZnMgPVxuICAgICAgbWF0Y2ggbGF5b3V0IHdpdGhcbiAgICAgICAgQ19sYXlvdXQgLT4gMFxuICAgICAgfCBGb3J0cmFuX2xheW91dCAtPiAxXG4gICAgaW5cbiAgICBmb3IgaSA9IDAgdG8gZGltMSAtIDEgZG9cbiAgICAgIGxldCByb3cgPSBkYXRhLihpKSBpblxuICAgICAgaWYgQXJyYXkubGVuZ3RoIHJvdyA8PiBkaW0yIHRoZW5cbiAgICAgICAgaW52YWxpZF9hcmcoXCJCaWdhcnJheS5BcnJheTMub2ZfYXJyYXk6IG5vbi1jdWJpYyBkYXRhXCIpO1xuICAgICAgZm9yIGogPSAwIHRvIGRpbTIgLSAxIGRvXG4gICAgICAgIGxldCBjb2wgPSByb3cuKGopIGluXG4gICAgICAgIGlmIEFycmF5Lmxlbmd0aCBjb2wgPD4gZGltMyB0aGVuXG4gICAgICAgICAgaW52YWxpZF9hcmcoXCJCaWdhcnJheS5BcnJheTMub2ZfYXJyYXk6IG5vbi1jdWJpYyBkYXRhXCIpO1xuICAgICAgICBmb3IgayA9IDAgdG8gZGltMyAtIDEgZG9cbiAgICAgICAgICB1bnNhZmVfc2V0IGJhIChpICsgb2ZzKSAoaiArIG9mcykgKGsgKyBvZnMpIGNvbC4oaylcbiAgICAgICAgZG9uZVxuICAgICAgZG9uZVxuICAgIGRvbmU7XG4gICAgYmFcbmVuZFxuXG5leHRlcm5hbCBnZW5hcnJheV9vZl9hcnJheTA6ICgnYSwgJ2IsICdjKSBBcnJheTAudCAtPiAoJ2EsICdiLCAnYykgR2VuYXJyYXkudFxuICAgPSBcIiVpZGVudGl0eVwiXG5leHRlcm5hbCBnZW5hcnJheV9vZl9hcnJheTE6ICgnYSwgJ2IsICdjKSBBcnJheTEudCAtPiAoJ2EsICdiLCAnYykgR2VuYXJyYXkudFxuICAgPSBcIiVpZGVudGl0eVwiXG5leHRlcm5hbCBnZW5hcnJheV9vZl9hcnJheTI6ICgnYSwgJ2IsICdjKSBBcnJheTIudCAtPiAoJ2EsICdiLCAnYykgR2VuYXJyYXkudFxuICAgPSBcIiVpZGVudGl0eVwiXG5leHRlcm5hbCBnZW5hcnJheV9vZl9hcnJheTM6ICgnYSwgJ2IsICdjKSBBcnJheTMudCAtPiAoJ2EsICdiLCAnYykgR2VuYXJyYXkudFxuICAgPSBcIiVpZGVudGl0eVwiXG5sZXQgYXJyYXkwX29mX2dlbmFycmF5IGEgPVxuICBpZiBHZW5hcnJheS5udW1fZGltcyBhID0gMCB0aGVuIGFcbiAgZWxzZSBpbnZhbGlkX2FyZyBcIkJpZ2FycmF5LmFycmF5MF9vZl9nZW5hcnJheVwiXG5sZXQgYXJyYXkxX29mX2dlbmFycmF5IGEgPVxuICBpZiBHZW5hcnJheS5udW1fZGltcyBhID0gMSB0aGVuIGFcbiAgZWxzZSBpbnZhbGlkX2FyZyBcIkJpZ2FycmF5LmFycmF5MV9vZl9nZW5hcnJheVwiXG5sZXQgYXJyYXkyX29mX2dlbmFycmF5IGEgPVxuICBpZiBHZW5hcnJheS5udW1fZGltcyBhID0gMiB0aGVuIGFcbiAgZWxzZSBpbnZhbGlkX2FyZyBcIkJpZ2FycmF5LmFycmF5Ml9vZl9nZW5hcnJheVwiXG5sZXQgYXJyYXkzX29mX2dlbmFycmF5IGEgPVxuICBpZiBHZW5hcnJheS5udW1fZGltcyBhID0gMyB0aGVuIGFcbiAgZWxzZSBpbnZhbGlkX2FyZyBcIkJpZ2FycmF5LmFycmF5M19vZl9nZW5hcnJheVwiXG5cbmV4dGVybmFsIHJlc2hhcGU6XG4gICAoJ2EsICdiLCAnYykgR2VuYXJyYXkudCAtPiBpbnQgYXJyYXkgLT4gKCdhLCAnYiwgJ2MpIEdlbmFycmF5LnRcbiAgID0gXCJjYW1sX2JhX3Jlc2hhcGVcIlxubGV0IHJlc2hhcGVfMCBhID0gcmVzaGFwZSBhIFt8fF1cbmxldCByZXNoYXBlXzEgYSBkaW0xID0gcmVzaGFwZSBhIFt8ZGltMXxdXG5sZXQgcmVzaGFwZV8yIGEgZGltMSBkaW0yID0gcmVzaGFwZSBhIFt8ZGltMTtkaW0yfF1cbmxldCByZXNoYXBlXzMgYSBkaW0xIGRpbTIgZGltMyA9IHJlc2hhcGUgYSBbfGRpbTE7ZGltMjtkaW0zfF1cblxuKCogRm9yY2UgY2FtbF9iYV9nZXRfezEsMiwzLE59IHRvIGJlIGxpbmtlZCBpbiwgc2luY2Ugd2UgZG9uJ3QgcmVmZXJcbiAgIHRvIHRob3NlIHByaW1pdGl2ZXMgZGlyZWN0bHkgaW4gdGhpcyBmaWxlICopXG5cbmxldCBfID1cbiAgbGV0IF8gPSBHZW5hcnJheS5nZXQgaW5cbiAgbGV0IF8gPSBBcnJheTEuZ2V0IGluXG4gIGxldCBfID0gQXJyYXkyLmdldCBpblxuICBsZXQgXyA9IEFycmF5My5nZXQgaW5cbiAgKClcblxuW0BAQG9jYW1sLndhcm5pbmcgXCItMzJcIl1cbmV4dGVybmFsIGdldDE6IHVuaXQgLT4gdW5pdCA9IFwiY2FtbF9iYV9nZXRfMVwiXG5leHRlcm5hbCBnZXQyOiB1bml0IC0+IHVuaXQgPSBcImNhbWxfYmFfZ2V0XzJcIlxuZXh0ZXJuYWwgZ2V0MzogdW5pdCAtPiB1bml0ID0gXCJjYW1sX2JhX2dldF8zXCJcbmV4dGVybmFsIHNldDE6IHVuaXQgLT4gdW5pdCA9IFwiY2FtbF9iYV9zZXRfMVwiXG5leHRlcm5hbCBzZXQyOiB1bml0IC0+IHVuaXQgPSBcImNhbWxfYmFfc2V0XzJcIlxuZXh0ZXJuYWwgc2V0MzogdW5pdCAtPiB1bml0ID0gXCJjYW1sX2JhX3NldF8zXCJcbiIsImxldCB0YXJpZiA9IFwiMjAyMS0yMDIyXCJcblxubGV0IGRlc3RpbmF0YWlyZXMgPSBcImR1YnV2YWxAZ21haWwuY29tLGd1eS5ncmFuZ2VAd2FuYWRvby5mclwiXG5cbnR5cGUgcGllY2UgPSBDaGFtYnJlMSB8IENoYW1icmUyIHwgQ2hhbWJyZTMgfCBTZWpvdXIgfCBTZGIxIHwgU2RiMlxuXG5sZXQgcGllY2VzID0gWyBDaGFtYnJlMTsgQ2hhbWJyZTI7IENoYW1icmUzOyBTZWpvdXI7IFNkYjE7IFNkYjIgXVxuXG5sZXQgc2hvcnRfc3RyaW5nX29mX3BpZWNlID0gZnVuY3Rpb25cbiAgfCBDaGFtYnJlMSAtPiBcImNoMVwiXG4gIHwgQ2hhbWJyZTIgLT4gXCJjaDJcIlxuICB8IENoYW1icmUzIC0+IFwiY2gzXCJcbiAgfCBTZWpvdXIgLT4gXCJzalwiXG4gIHwgU2RiMSAtPiBcInNkYjFcIlxuICB8IFNkYjIgLT4gXCJzZGIyXCJcblxubGV0IGxvbmdfc3RyaW5nX29mX3BpZWNlID0gZnVuY3Rpb25cbiAgfCBDaGFtYnJlMSAtPiBcIkNoYW1icmUgMVwiXG4gIHwgQ2hhbWJyZTIgLT4gXCJDaGFtYnJlIDJcIlxuICB8IENoYW1icmUzIC0+IFwiQ2hhbWJyZSAzXCJcbiAgfCBTZWpvdXIgLT4gXCJTw6lqb3VyXCJcbiAgfCBTZGIxIC0+IFwiU2FsbGUgZGUgYmFpbnMgMVwiXG4gIHwgU2RiMiAtPiBcIlNhbGxlIGRlIGJhaW5zIDJcIlxuXG50eXBlIGZvdXJuaXR1cmUgPSB7XG4gIG5hbWUgOiBzdHJpbmc7XG4gIGRlc2lnbmF0aW9uIDogc3RyaW5nO1xuICBwcml4IDogaW50O1xuICBkaXNwb25pYmlsaXRlIDogKHBpZWNlICogaW50KSBsaXN0O1xufVxuXG5sZXQgZm91cm5pdHVyZXMgPVxuICBbXG4gICAge1xuICAgICAgbmFtZSA9IFwiZGg4MFwiO1xuICAgICAgZGVzaWduYXRpb24gPSBcIkRyYXAgaG91c3NlIDgwIGNtXCI7XG4gICAgICBwcml4ID0gNDtcbiAgICAgIGRpc3BvbmliaWxpdGUgPSBbIChDaGFtYnJlMSwgMikgXTtcbiAgICB9O1xuICAgIHtcbiAgICAgIG5hbWUgPSBcImRoOTBcIjtcbiAgICAgIGRlc2lnbmF0aW9uID0gXCJEcmFwIGhvdXNzZSA5MCBjbVwiO1xuICAgICAgcHJpeCA9IDQ7XG4gICAgICBkaXNwb25pYmlsaXRlID0gWyAoQ2hhbWJyZTMsIDQpIF07XG4gICAgfTtcbiAgICB7XG4gICAgICBuYW1lID0gXCJkaDE0MFwiO1xuICAgICAgZGVzaWduYXRpb24gPSBcIkRyYXAgaG91c3NlIDE0MCBjbVwiO1xuICAgICAgcHJpeCA9IDc7XG4gICAgICBkaXNwb25pYmlsaXRlID0gWyAoQ2hhbWJyZTIsIDEpOyAoU2Vqb3VyLCAxKSBdO1xuICAgIH07XG4gICAge1xuICAgICAgbmFtZSA9IFwiZGhiYlwiO1xuICAgICAgZGVzaWduYXRpb24gPSBcIkRyYXAgaG91c3NlIGLDqWLDqVwiO1xuICAgICAgcHJpeCA9IDI7XG4gICAgICBkaXNwb25pYmlsaXRlID0gWyAoQ2hhbWJyZTEsIDEpIF07XG4gICAgfTtcbiAgICB7XG4gICAgICBuYW1lID0gXCJoYzFwXCI7XG4gICAgICBkZXNpZ25hdGlvbiA9IFwiSG91c3NlIGRlIGNvdWV0dGUgMSBwbGFjZVwiO1xuICAgICAgcHJpeCA9IDc7XG4gICAgICBkaXNwb25pYmlsaXRlID0gWyAoQ2hhbWJyZTEsIDIpOyAoQ2hhbWJyZTMsIDQpIF07XG4gICAgfTtcbiAgICB7XG4gICAgICBuYW1lID0gXCJoYzJwXCI7XG4gICAgICBkZXNpZ25hdGlvbiA9IFwiSG91c3NlIGRlIGNvdWV0dGUgMiBwbGFjZXNcIjtcbiAgICAgIHByaXggPSAxMDtcbiAgICAgIGRpc3BvbmliaWxpdGUgPSBbIChDaGFtYnJlMiwgMSk7IChTZWpvdXIsIDEpIF07XG4gICAgfTtcbiAgICB7XG4gICAgICBuYW1lID0gXCJoY2JiXCI7XG4gICAgICBkZXNpZ25hdGlvbiA9IFwiSG91c3NlIGRlIGNvdWV0dGUgYsOpYsOpXCI7XG4gICAgICBwcml4ID0gMztcbiAgICAgIGRpc3BvbmliaWxpdGUgPSBbIChDaGFtYnJlMSwgMSkgXTtcbiAgICB9O1xuICAgIHtcbiAgICAgIG5hbWUgPSBcImxpdGJiXCI7XG4gICAgICBkZXNpZ25hdGlvbiA9IFwiTGl0IGLDqWLDqVwiO1xuICAgICAgcHJpeCA9IDg7XG4gICAgICBkaXNwb25pYmlsaXRlID0gWyAoQ2hhbWJyZTEsIDEpIF07XG4gICAgfTtcbiAgICB7XG4gICAgICBuYW1lID0gXCJwbTgwXCI7XG4gICAgICBkZXNpZ25hdGlvbiA9IFwiUHJvdMOoZ2UgbWF0ZWxhcyA4MCBjbVwiO1xuICAgICAgcHJpeCA9IDA7XG4gICAgICBkaXNwb25pYmlsaXRlID0gWyAoQ2hhbWJyZTEsIDIpIF07XG4gICAgfTtcbiAgICB7XG4gICAgICBuYW1lID0gXCJwbTkwXCI7XG4gICAgICBkZXNpZ25hdGlvbiA9IFwiUHJvdMOoZ2UgbWF0ZWxhcyA5MCBjbVwiO1xuICAgICAgcHJpeCA9IDA7XG4gICAgICBkaXNwb25pYmlsaXRlID0gWyAoQ2hhbWJyZTMsIDQpIF07XG4gICAgfTtcbiAgICB7XG4gICAgICBuYW1lID0gXCJwbTE0MFwiO1xuICAgICAgZGVzaWduYXRpb24gPSBcIlByb3TDqGdlIG1hdGVsYXMgMTQwIGNtXCI7XG4gICAgICBwcml4ID0gMDtcbiAgICAgIGRpc3BvbmliaWxpdGUgPSBbIChDaGFtYnJlMiwgMSk7IChTZWpvdXIsIDEpIF07XG4gICAgfTtcbiAgICB7XG4gICAgICBuYW1lID0gXCJwbWJiXCI7XG4gICAgICBkZXNpZ25hdGlvbiA9IFwiUHJvdMOoZ2UgbWF0ZWxhcyBiw6liw6lcIjtcbiAgICAgIHByaXggPSAwO1xuICAgICAgZGlzcG9uaWJpbGl0ZSA9IFsgKENoYW1icmUxLCAxKSBdO1xuICAgIH07XG4gICAge1xuICAgICAgbmFtZSA9IFwidGFpZVwiO1xuICAgICAgZGVzaWduYXRpb24gPSBcIlRhaWUgZOKAmW9yZWlsbGVyXCI7XG4gICAgICBwcml4ID0gMTtcbiAgICAgIGRpc3BvbmliaWxpdGUgPVxuICAgICAgICBbIChDaGFtYnJlMSwgNCk7IChDaGFtYnJlMiwgNCk7IChDaGFtYnJlMywgOCk7IChTZWpvdXIsIDQpIF07XG4gICAgfTtcbiAgICB7XG4gICAgICBuYW1lID0gXCJkb3VjaGVcIjtcbiAgICAgIGRlc2lnbmF0aW9uID0gXCJEcmFwIGRlIGRvdWNoZVwiO1xuICAgICAgcHJpeCA9IDI7XG4gICAgICBkaXNwb25pYmlsaXRlID0gWyAoU2RiMSwgMyk7IChTZGIyLCAzKSBdO1xuICAgIH07XG4gICAge1xuICAgICAgbmFtZSA9IFwiZ2FudFwiO1xuICAgICAgZGVzaWduYXRpb24gPSBcIkdhbnQgZGUgdG9pbGV0dGVcIjtcbiAgICAgIHByaXggPSAxO1xuICAgICAgZGlzcG9uaWJpbGl0ZSA9IFsgKFNkYjEsIDQpOyAoU2RiMiwgNikgXTtcbiAgICB9O1xuICAgIHtcbiAgICAgIG5hbWUgPSBcInNlcnZcIjtcbiAgICAgIGRlc2lnbmF0aW9uID0gXCJTZXJ2aWV0dGUgZGUgdG9pbGV0dGVcIjtcbiAgICAgIHByaXggPSAxO1xuICAgICAgZGlzcG9uaWJpbGl0ZSA9IFsgKFNkYjEsIDQpOyAoU2RiMiwgNikgXTtcbiAgICB9O1xuICAgIHtcbiAgICAgIG5hbWUgPSBcImludlwiO1xuICAgICAgZGVzaWduYXRpb24gPSBcIlNlcnZpZXR0ZSBpbnZpdMOpc1wiO1xuICAgICAgcHJpeCA9IDE7XG4gICAgICBkaXNwb25pYmlsaXRlID0gWyAoU2RiMSwgMSk7IChTZGIyLCAxKSBdO1xuICAgIH07XG4gICAge1xuICAgICAgbmFtZSA9IFwidGFwaXNcIjtcbiAgICAgIGRlc2lnbmF0aW9uID0gXCJUYXBpcyBkZSBkb3VjaGVcIjtcbiAgICAgIHByaXggPSAyO1xuICAgICAgZGlzcG9uaWJpbGl0ZSA9IFsgKFNkYjEsIDIpOyAoU2RiMiwgMikgXTtcbiAgICB9O1xuICAgIHtcbiAgICAgIG5hbWUgPSBcIm1haW5zXCI7XG4gICAgICBkZXNpZ25hdGlvbiA9IFwiRXNzdWllLW1haW5zXCI7XG4gICAgICBwcml4ID0gMTtcbiAgICAgIGRpc3BvbmliaWxpdGUgPSBbIChTZWpvdXIsIDIpIF07XG4gICAgfTtcbiAgICB7XG4gICAgICBuYW1lID0gXCJ0YWJsZVwiO1xuICAgICAgZGVzaWduYXRpb24gPSBcIlNlcnZpZXR0ZXMgZGUgdGFibGVcIjtcbiAgICAgIHByaXggPSAxO1xuICAgICAgZGlzcG9uaWJpbGl0ZSA9IFsgKFNlam91ciwgMTApIF07XG4gICAgfTtcbiAgICB7XG4gICAgICBuYW1lID0gXCJ0b3JjaG9uXCI7XG4gICAgICBkZXNpZ25hdGlvbiA9IFwiVG9yY2hvbnMgw6AgdmFpc3NlbGxlXCI7XG4gICAgICBwcml4ID0gMTtcbiAgICAgIGRpc3BvbmliaWxpdGUgPSBbIChTZWpvdXIsIDIpIF07XG4gICAgfTtcbiAgICB7XG4gICAgICBuYW1lID0gXCJtaWNyb2ZpYnJlXCI7XG4gICAgICBkZXNpZ25hdGlvbiA9IFwiVG9yY2hvbnMgbWljcm9maWJyZVwiO1xuICAgICAgcHJpeCA9IDA7XG4gICAgICBkaXNwb25pYmlsaXRlID0gWyAoU2RiMSwgMik7IChTZGIyLCAyKTsgKFNlam91ciwgMikgXTtcbiAgICB9O1xuICBdXG5cbiIsImxldCB0YXJpZiA9IFwiMjAyMS0yMDIyXCJcblxubGV0IGRlc3RpbmF0YWlyZXMgPSBcImR1YnV2YWxAZ21haWwuY29tLGd1eS5ncmFuZ2VAd2FuYWRvby5mclwiXG5cbnR5cGUgcGllY2UgPSBDaGFtYnJlMSB8IENoYW1icmUyIHwgQ2hhbWJyZTMgfCBTZWpvdXIgfCBTZGIxIHwgU2RiMlxuXG5sZXQgcGllY2VzID0gWyBDaGFtYnJlMTsgQ2hhbWJyZTI7IENoYW1icmUzOyBTZWpvdXI7IFNkYjE7IFNkYjIgXVxuXG5sZXQgc2hvcnRfc3RyaW5nX29mX3BpZWNlID0gZnVuY3Rpb25cbiAgfCBDaGFtYnJlMSAtPiBcImNoMVwiXG4gIHwgQ2hhbWJyZTIgLT4gXCJjaDJcIlxuICB8IENoYW1icmUzIC0+IFwiY2gzXCJcbiAgfCBTZWpvdXIgLT4gXCJzalwiXG4gIHwgU2RiMSAtPiBcInNkYjFcIlxuICB8IFNkYjIgLT4gXCJzZGIyXCJcblxubGV0IGxvbmdfc3RyaW5nX29mX3BpZWNlID0gZnVuY3Rpb25cbiAgfCBDaGFtYnJlMSAtPiBcIkNoYW1icmUgMVwiXG4gIHwgQ2hhbWJyZTIgLT4gXCJDaGFtYnJlIDJcIlxuICB8IENoYW1icmUzIC0+IFwiQ2hhbWJyZSAzXCJcbiAgfCBTZWpvdXIgLT4gXCJTw6lqb3VyXCJcbiAgfCBTZGIxIC0+IFwiU2FsbGUgZGUgYmFpbnMgMVwiXG4gIHwgU2RiMiAtPiBcIlNhbGxlIGRlIGJhaW5zIDJcIlxuXG50eXBlIGZvdXJuaXR1cmUgPSB7XG4gIG5hbWUgOiBzdHJpbmc7XG4gIGRlc2lnbmF0aW9uIDogc3RyaW5nO1xuICBwcml4IDogaW50O1xuICBkaXNwb25pYmlsaXRlIDogKHBpZWNlICogaW50KSBsaXN0O1xufVxuXG5sZXQgZm91cm5pdHVyZXMgPVxuICBbXG4gICAge1xuICAgICAgbmFtZSA9IFwiZGg4MFwiO1xuICAgICAgZGVzaWduYXRpb24gPSBcIkRyYXAgaG91c3NlIDgwIGNtXCI7XG4gICAgICBwcml4ID0gNDtcbiAgICAgIGRpc3BvbmliaWxpdGUgPSBbIChDaGFtYnJlMSwgMikgXTtcbiAgICB9O1xuICAgIHtcbiAgICAgIG5hbWUgPSBcImRoOTBcIjtcbiAgICAgIGRlc2lnbmF0aW9uID0gXCJEcmFwIGhvdXNzZSA5MCBjbVwiO1xuICAgICAgcHJpeCA9IDQ7XG4gICAgICBkaXNwb25pYmlsaXRlID0gWyAoQ2hhbWJyZTMsIDQpIF07XG4gICAgfTtcbiAgICB7XG4gICAgICBuYW1lID0gXCJkaDE0MFwiO1xuICAgICAgZGVzaWduYXRpb24gPSBcIkRyYXAgaG91c3NlIDE0MCBjbVwiO1xuICAgICAgcHJpeCA9IDc7XG4gICAgICBkaXNwb25pYmlsaXRlID0gWyAoQ2hhbWJyZTIsIDEpOyAoU2Vqb3VyLCAxKSBdO1xuICAgIH07XG4gICAge1xuICAgICAgbmFtZSA9IFwiZGhiYlwiO1xuICAgICAgZGVzaWduYXRpb24gPSBcIkRyYXAgaG91c3NlIGLDqWLDqVwiO1xuICAgICAgcHJpeCA9IDI7XG4gICAgICBkaXNwb25pYmlsaXRlID0gWyAoQ2hhbWJyZTEsIDEpIF07XG4gICAgfTtcbiAgICB7XG4gICAgICBuYW1lID0gXCJoYzFwXCI7XG4gICAgICBkZXNpZ25hdGlvbiA9IFwiSG91c3NlIGRlIGNvdWV0dGUgMSBwbGFjZVwiO1xuICAgICAgcHJpeCA9IDc7XG4gICAgICBkaXNwb25pYmlsaXRlID0gWyAoQ2hhbWJyZTEsIDIpOyAoQ2hhbWJyZTMsIDQpIF07XG4gICAgfTtcbiAgICB7XG4gICAgICBuYW1lID0gXCJoYzJwXCI7XG4gICAgICBkZXNpZ25hdGlvbiA9IFwiSG91c3NlIGRlIGNvdWV0dGUgMiBwbGFjZXNcIjtcbiAgICAgIHByaXggPSAxMDtcbiAgICAgIGRpc3BvbmliaWxpdGUgPSBbIChDaGFtYnJlMiwgMSk7IChTZWpvdXIsIDEpIF07XG4gICAgfTtcbiAgICB7XG4gICAgICBuYW1lID0gXCJoY2JiXCI7XG4gICAgICBkZXNpZ25hdGlvbiA9IFwiSG91c3NlIGRlIGNvdWV0dGUgYsOpYsOpXCI7XG4gICAgICBwcml4ID0gMztcbiAgICAgIGRpc3BvbmliaWxpdGUgPSBbIChDaGFtYnJlMSwgMSkgXTtcbiAgICB9O1xuICAgIHtcbiAgICAgIG5hbWUgPSBcImxpdGJiXCI7XG4gICAgICBkZXNpZ25hdGlvbiA9IFwiTGl0IGLDqWLDqVwiO1xuICAgICAgcHJpeCA9IDg7XG4gICAgICBkaXNwb25pYmlsaXRlID0gWyAoQ2hhbWJyZTEsIDEpIF07XG4gICAgfTtcbiAgICB7XG4gICAgICBuYW1lID0gXCJwbTgwXCI7XG4gICAgICBkZXNpZ25hdGlvbiA9IFwiUHJvdMOoZ2UgbWF0ZWxhcyA4MCBjbVwiO1xuICAgICAgcHJpeCA9IDA7XG4gICAgICBkaXNwb25pYmlsaXRlID0gWyAoQ2hhbWJyZTEsIDIpIF07XG4gICAgfTtcbiAgICB7XG4gICAgICBuYW1lID0gXCJwbTkwXCI7XG4gICAgICBkZXNpZ25hdGlvbiA9IFwiUHJvdMOoZ2UgbWF0ZWxhcyA5MCBjbVwiO1xuICAgICAgcHJpeCA9IDA7XG4gICAgICBkaXNwb25pYmlsaXRlID0gWyAoQ2hhbWJyZTMsIDQpIF07XG4gICAgfTtcbiAgICB7XG4gICAgICBuYW1lID0gXCJwbTE0MFwiO1xuICAgICAgZGVzaWduYXRpb24gPSBcIlByb3TDqGdlIG1hdGVsYXMgMTQwIGNtXCI7XG4gICAgICBwcml4ID0gMDtcbiAgICAgIGRpc3BvbmliaWxpdGUgPSBbIChDaGFtYnJlMiwgMSk7IChTZWpvdXIsIDEpIF07XG4gICAgfTtcbiAgICB7XG4gICAgICBuYW1lID0gXCJwbWJiXCI7XG4gICAgICBkZXNpZ25hdGlvbiA9IFwiUHJvdMOoZ2UgbWF0ZWxhcyBiw6liw6lcIjtcbiAgICAgIHByaXggPSAwO1xuICAgICAgZGlzcG9uaWJpbGl0ZSA9IFsgKENoYW1icmUxLCAxKSBdO1xuICAgIH07XG4gICAge1xuICAgICAgbmFtZSA9IFwidGFpZVwiO1xuICAgICAgZGVzaWduYXRpb24gPSBcIlRhaWUgZOKAmW9yZWlsbGVyXCI7XG4gICAgICBwcml4ID0gMTtcbiAgICAgIGRpc3BvbmliaWxpdGUgPVxuICAgICAgICBbIChDaGFtYnJlMSwgNCk7IChDaGFtYnJlMiwgNCk7IChDaGFtYnJlMywgOCk7IChTZWpvdXIsIDQpIF07XG4gICAgfTtcbiAgICB7XG4gICAgICBuYW1lID0gXCJkb3VjaGVcIjtcbiAgICAgIGRlc2lnbmF0aW9uID0gXCJEcmFwIGRlIGRvdWNoZVwiO1xuICAgICAgcHJpeCA9IDI7XG4gICAgICBkaXNwb25pYmlsaXRlID0gWyAoU2RiMSwgMyk7IChTZGIyLCAzKSBdO1xuICAgIH07XG4gICAge1xuICAgICAgbmFtZSA9IFwiZ2FudFwiO1xuICAgICAgZGVzaWduYXRpb24gPSBcIkdhbnQgZGUgdG9pbGV0dGVcIjtcbiAgICAgIHByaXggPSAxO1xuICAgICAgZGlzcG9uaWJpbGl0ZSA9IFsgKFNkYjEsIDQpOyAoU2RiMiwgNikgXTtcbiAgICB9O1xuICAgIHtcbiAgICAgIG5hbWUgPSBcInNlcnZcIjtcbiAgICAgIGRlc2lnbmF0aW9uID0gXCJTZXJ2aWV0dGUgZGUgdG9pbGV0dGVcIjtcbiAgICAgIHByaXggPSAxO1xuICAgICAgZGlzcG9uaWJpbGl0ZSA9IFsgKFNkYjEsIDQpOyAoU2RiMiwgNikgXTtcbiAgICB9O1xuICAgIHtcbiAgICAgIG5hbWUgPSBcImludlwiO1xuICAgICAgZGVzaWduYXRpb24gPSBcIlNlcnZpZXR0ZSBpbnZpdMOpc1wiO1xuICAgICAgcHJpeCA9IDE7XG4gICAgICBkaXNwb25pYmlsaXRlID0gWyAoU2RiMSwgMSk7IChTZGIyLCAxKSBdO1xuICAgIH07XG4gICAge1xuICAgICAgbmFtZSA9IFwidGFwaXNcIjtcbiAgICAgIGRlc2lnbmF0aW9uID0gXCJUYXBpcyBkZSBkb3VjaGVcIjtcbiAgICAgIHByaXggPSAyO1xuICAgICAgZGlzcG9uaWJpbGl0ZSA9IFsgKFNkYjEsIDIpOyAoU2RiMiwgMikgXTtcbiAgICB9O1xuICAgIHtcbiAgICAgIG5hbWUgPSBcIm1haW5zXCI7XG4gICAgICBkZXNpZ25hdGlvbiA9IFwiRXNzdWllLW1haW5zXCI7XG4gICAgICBwcml4ID0gMTtcbiAgICAgIGRpc3BvbmliaWxpdGUgPSBbIChTZWpvdXIsIDIpIF07XG4gICAgfTtcbiAgICB7XG4gICAgICBuYW1lID0gXCJ0YWJsZVwiO1xuICAgICAgZGVzaWduYXRpb24gPSBcIlNlcnZpZXR0ZXMgZGUgdGFibGVcIjtcbiAgICAgIHByaXggPSAxO1xuICAgICAgZGlzcG9uaWJpbGl0ZSA9IFsgKFNlam91ciwgMTApIF07XG4gICAgfTtcbiAgICB7XG4gICAgICBuYW1lID0gXCJ0b3JjaG9uXCI7XG4gICAgICBkZXNpZ25hdGlvbiA9IFwiVG9yY2hvbnMgw6AgdmFpc3NlbGxlXCI7XG4gICAgICBwcml4ID0gMTtcbiAgICAgIGRpc3BvbmliaWxpdGUgPSBbIChTZWpvdXIsIDIpIF07XG4gICAgfTtcbiAgICB7XG4gICAgICBuYW1lID0gXCJtaWNyb2ZpYnJlXCI7XG4gICAgICBkZXNpZ25hdGlvbiA9IFwiVG9yY2hvbnMgbWljcm9maWJyZVwiO1xuICAgICAgcHJpeCA9IDA7XG4gICAgICBkaXNwb25pYmlsaXRlID0gWyAoU2RiMSwgMik7IChTZGIyLCAyKTsgKFNlam91ciwgMikgXTtcbiAgICB9O1xuICBdXG5cbiIsbnVsbCwibW9kdWxlIElMID0gSW52ZW50YWlyZV9saW5nZVxuXG5sZXQgc2V0X3N0cmluZ19pbnB1dF9ieV9pZCBubSB2ID1cbiAgbWF0Y2hcbiAgICBKc19vZl9vY2FtbC5Eb21faHRtbC5nZXRFbGVtZW50QnlJZF9jb2VyY2Ugbm1cbiAgICAgIEpzX29mX29jYW1sLkRvbV9odG1sLkNvZXJjZVRvLmlucHV0XG4gIHdpdGhcbiAgfCBOb25lIC0+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 — 2021-2022</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>