|
|
/*
|
|
|
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
|
if you want to view the source visit the plugins github repository
|
|
|
*/
|
|
|
|
|
|
var rp=Object.create;var zt=Object.defineProperty,op=Object.defineProperties,sp=Object.getOwnPropertyDescriptor,cp=Object.getOwnPropertyDescriptors,lp=Object.getOwnPropertyNames,sn=Object.getOwnPropertySymbols,pp=Object.getPrototypeOf,ea=Object.prototype.hasOwnProperty,Yi=Object.prototype.propertyIsEnumerable;var Ki=(e,t,n)=>t in e?zt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Me=(e,t)=>{for(var n in t||(t={}))ea.call(t,n)&&Ki(e,n,t[n]);if(sn)for(var n of sn(t))Yi.call(t,n)&&Ki(e,n,t[n]);return e},et=(e,t)=>op(e,cp(t));var cn=(e,t)=>{var n={};for(var a in e)ea.call(e,a)&&t.indexOf(a)<0&&(n[a]=e[a]);if(e!=null&&sn)for(var a of sn(e))t.indexOf(a)<0&&Yi.call(e,a)&&(n[a]=e[a]);return n};var K=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Xi=(e,t)=>{for(var n in t)zt(e,n,{get:t[n],enumerable:!0})},Ji=(e,t,n,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of lp(t))!ea.call(e,i)&&i!==n&&zt(e,i,{get:()=>t[i],enumerable:!(a=sp(t,i))||a.enumerable});return e};var be=(e,t,n)=>(n=e!=null?rp(pp(e)):{},Ji(t||!e||!e.__esModule?zt(n,"default",{value:e,enumerable:!0}):n,e)),up=e=>Ji(zt({},"__esModule",{value:!0}),e);var $=(e,t,n)=>new Promise((a,i)=>{var r=p=>{try{s(n.next(p))}catch(l){i(l)}},o=p=>{try{s(n.throw(p))}catch(l){i(l)}},s=p=>p.done?a(p.value):Promise.resolve(p.value).then(r,o);s((n=n.apply(e,t)).next())});var or=K((h1,gp)=>{gp.exports={"application/1d-interleaved-parityfec":{source:"iana"},"application/3gpdash-qoe-report+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/3gpp-ims+xml":{source:"iana",compressible:!0},"application/3gpphal+json":{source:"iana",compressible:!0},"application/3gpphalforms+json":{source:"iana",compressible:!0},"application/a2l":{source:"iana"},"application/ace+cbor":{source:"iana"},"application/activemessage":{source:"iana"},"application/activity+json":{source:"iana",compressible:!0},"application/alto-costmap+json":{source:"iana",compressible:!0},"application/alto-costmapfilter+json":{source:"iana",compressible:!0},"application/alto-directory+json":{source:"iana",compressible:!0},"application/alto-endpointcost+json":{source:"iana",compressible:!0},"application/alto-endpointcostparams+json":{source:"iana",compressible:!0},"application/alto-endpointprop+json":{source:"iana",compressible:!0},"application/alto-endpointpropparams+json":{source:"iana",compressible:!0},"application/alto-error+json":{source:"iana",compressible:!0},"application/alto-networkmap+json":{source:"iana",compressible:!0},"application/alto-networkmapfilter+json":{source:"iana",compressible:!0},"application/alto-updatestreamcontrol+json":{source:"iana",compressible:!0},"application/alto-updatestreamparams+json":{source:"iana",compressible:!0},"application/aml":{source:"iana"},"application/andrew-inset":{source:"iana",extensions:["ez"]},"application/applefile":{source:"iana"},"application/applixware":{source:"apache",extensions:["aw"]},"application/at+jwt":{source:"iana"},"application/atf":{source:"iana"},"application/atfx":{source:"iana"},"application/atom+xml":{source:"iana",compressible:!0,extensions:["atom"]},"application/atomcat+xml":{source:"iana",compressible:!0,extensions:["atomcat"]},"application/atomdeleted+xml":{source:"iana",compressible:!0,extensions:["atomdeleted"]},"application/atomicmail":{source:"iana"},"application/atomsvc+xml":{source:"iana",compressible:!0,extensions:["atomsvc"]},"application/atsc-dwd+xml":{source:"iana",compressible:!0,extensions:["dwd"]},"application/atsc-dynamic-event-message":{source:"iana"},"application/atsc-held+xml":{source:"iana",compressible:!0,extensions:["held"]},"application/atsc-rdt+json":{source:"iana",compressible:!0},"application/atsc-rsat+xml":{source:"iana",compressible:!0,extensions:["rsat"]},"application/atxml":{source:"iana"},"application/auth-policy+xml":{source:"iana",compressible:!0},"application/bacnet-xdd+zip":{source:"iana",compressible:!1},"application/batch-smtp":{source:"iana"},"application/bdoc":{compressible:!1,extensions:["bdoc"]},"application/beep+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/calendar+json":{source:"iana",compressible:!0},"application/calendar+xml":{source:"iana",compressible:!0,extensions:["xcs"]},"application/call-completion":{source:"iana"},"application/cals-1840":{source:"iana"},"application/captive+json":{source:"iana",compressible:!0},"application/cbor":{source:"iana"},"application/cbor-seq":{source:"iana"},"application/cccex":{source:"iana"},"application/ccmp+xml":{source:"iana",compressible:!0},"application/ccxml+xml":{source:"iana",compressible:!0,extensions:["ccxml"]},"application/cdfx+xml":{source:"iana",compressible:!0,extensions:["cdfx"]},"application/cdmi-capability":{source:"iana",extensions:["cdmia"]},"application/cdmi-container":{source:"iana",extensions:["cdmic"]},"application/cdmi-domain":{source:"iana",extensions:["cdmid"]},"application/cdmi-object":{source:"iana",extensions:["cdmio"]},"application/cdmi-queue":{source:"iana",extensions:["cdmiq"]},"application/cdni":{source:"iana"},"application/cea":{source:"iana"},"application/cea-2018+xml":{source:"iana",compressible:!0},"application/cellml+xml":{source:"iana",compressible:!0},"application/cfw":{source:"iana"},"application/city+json":{source:"iana",compressible:!0},"application/clr":{source:"iana"},"application/clue+xml":{source:"iana",compressible:!0},"application/clue_info+xml":{source:"iana",compressible:!0},"application/cms":{source:"iana"},"application/cnrp+xml":{source:"iana",compressible:!0},"application/coap-group+json":{source:"iana",compressible:!0},"application/coap-payload":{source:"iana"},"application/commonground":{source:"iana"},"application/conference-info+xml":{source:"iana",compressible:!0},"application/cose":{source:"iana"},"application/cose-key":{source:"iana"},"application/cose-key-set":{source:"iana"},"application/cpl+xml":{source:"iana",compressible:!0,extensions:["cpl"]},"application/csrattrs":{source:"iana"},"application/csta+xml":{source:"iana",compressible:!0},"application/cstadata+xml":{source:"iana",compressible:!0},"application/csvm+json":{source:"iana",compressible:!0},"application/cu-seeme":{source:"apache",extensions:["cu"]},"application/cwt":{source:"iana"},"application/cybercash":{source:"iana"},"application/dart":{compressible:!0},"application/dash+xml":{source:"iana",compressible:!0,extensions:["mpd"]},"application/dash-patch+xml":{source:"iana",compressible:!0,extensions:["mpp"]},"application/dashdelta":{source:"iana"},"application/davmount+xml":{source:"iana",compressible:!0,extensions:["davmount"]},"application/dca-rft":{source:"iana"},"application/dcd":{source:"iana"},"application/dec-dx":{source:"iana"},"application/dialog-info+xml":{source:"iana",compressible:!0},"application/dicom":{source:"iana"},"application/dicom+json":{source:"iana",compressible:!0},"application/dicom+xml":{source:"iana",compressible:!0},"application/dii":{source:"iana"},"application/dit":{source:"iana"},"application/dns":{source:"iana"},"application/dns+json":{source:"iana",compressible:!0},"application/dns-message":{source:"iana"},"application/docbook+xml":{source:"apache",compressible:!0,extensions:["dbk"]},"application/dots+cbor":{source:"iana"},"application/dskpp+xml":{source:"iana",compressible:!0},"application/dssc+der":{source:"iana",extensions:["dssc"]},"application/dssc+xml":{source:"iana",compressible:!0,extensions:["xdssc"]},"application/dvcs":{source:"iana"},"application/ecmascript":{source:"iana",compressible:!0,extensions:["es","ecma"]},"application/edi-consent":{source:"iana"},"application/edi-x12":{source:"iana",compressible:!1},"application/edifact":{source:"iana",compressible:!1},"application/efi":{source:"iana"},"application/elm+json":{source:"iana",charset:"UTF-8",compressible:!0},"application/elm+xml":{source:"iana",compressible:!0},"application/emergencycalldata.cap+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/emergencycalldata.comment+xml":{source:"iana",compressible:!0},"application/emergencycalldata.control+xml":{source:"iana",compressible:!0},"application/emergencycalldata.deviceinfo+xml":{source:"iana",compressible:!0},"application/emergencycalldata.ecall.msd":{source:"iana"},"application/emergencycalldata.providerinfo+xml":{source:"iana",compressible:!0},"application/emergencycalldata.serviceinfo+xml":{source:"iana",compressible:!0},"application/emergencycalldata.subscriberinfo+xml":{source:"iana",compressible:!0},"application/emergencycalldata.veds+xml":{source:"iana",compressible:!0},"application/emma+xml":{source:"iana",compressible:!0,extensions:["emma"]},"application/emotionml+xml":{source:"iana",compressible:!0,extensions:["emotionml"]},"application/encaprtp":{source:"iana"},"application/epp+xml":{source:"iana",compressible:!0},"application/epub+zip":{source:"iana",compressible:!1,extensions:["epub"]},"application/eshop":{source:"iana"},"application/exi":{source:"iana",extensions:["exi"]},"application/expect-ct-report+json":{source:"iana",compressible:!0},"application/express":{source:"iana",extensions:["exp"]},"application/fastinfoset":{source:"iana"},"application/fastsoap":{source:"iana"},"application/fdt+xml":{source:"iana",compressible:!0,extensions:["fdt"]},"application/fhir+json":{source:"iana",charset:"UTF-8",compressible:!0},"application/fhir+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/fido.trusted-apps+json":{compressible:!0},"application/fits":{source:"iana"},"application/flexfec":{source:"iana"},"application/font-sfnt":{source:"iana"},"application/font-tdpfr":{source:"iana",extensions:["pfr"]},"application/font-woff":{source:"iana",compressible:!1},"application/framework-attributes+xml":{source:"iana",compressible:!0},"application/geo+json":{source:"iana",compressible:!0,extensions:["geojson"]},"application/geo+json-seq":{source:"iana"},"application/geopackage+sqlite3":{source:"iana"},"application/geoxacml+xml":{source:"iana",compressible:!0},"application/gltf-buffer":{source:"iana"},"application/gml+xml":{source:"iana",compressible:!0,extensions:["gml"]},"application/gpx+xml":{source:"apache",compressible:!0,extensions:["gpx"]},"application/gxf":{source:"apache",extensions:["gxf"]},"application/gzip":{source:"iana",compressible:!1,extensions:["gz"]},"application/h224":{source:"iana"},"application/held+xml":{source:"iana",compressible:!0},"application/hjson":{extensions:["hjson"]},"application/http":{source:"iana"},"application/hyperstudio":{source:"iana",extensions:["stk"]},"application/ibe-key-request+xml":{source:"iana",compressible:!0},"application/ibe-pkg-reply+xml":{source:"iana",compressible:!0},"application/ibe-pp-data":{source:"iana"},"application/iges":{source:"iana"},"application/im-iscomposing+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/index":{source:"iana"},"application/index.cmd":{source:"iana"},"application/index.obj":{source:"iana"},"application/index.response":{source:"iana"},"application/index.vnd":{source:"iana"},"application/inkml+xml":{source:"iana",compressible:!0,extensions:["ink","inkml"]},"application/iotp":{source:"iana"},"application/ipfix":{source:"iana",extensions:["ipfix"]},"application/ipp":{source:"iana"},"application/isup":{source:"iana"},"application/its+xml":{source:"iana",compressible:!0,extensions:["its"]},"application/java-archive":{source:"apache",compressible:!1,extensions:["jar","war","ear"]},"application/java-serialized-object":{source:"apache",compressible:!1,extensions:["ser"]},"application/java-vm":{source:"apache",compressible:!1,extensions:["class"]},"application/javascript":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["js","mjs"]},"application/jf2feed+json":{source:"iana",compressible:!0},"application/jose":{source:"iana"},"application/jose+json":{source:"iana",compressible:!0},"application/jrd+json":{source:"iana",compressible:!0},"application/jscalendar+json":{source:"iana",compressible:!0},"application/json":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["json","map"]},"application/json-patch+json":{source:"iana",compressible:!0},"application/json-seq":{source:"iana"},"application/json5":{extensions:["json5"]},"application/jsonml+json":{source:"apache",compressible:!0,extensions:["jsonml"]},"application/jwk+json":{source:"iana",compressible:!0},"application/jwk-set+json":{source:"iana",compressible:!0},"application/jwt":{source:"iana"},"application/kpml-request+xml":{source:"iana",compressible:!0},"application/kpml-response+xml":{source:"iana",compressible:!0},"application/ld+json":{source:"iana",compressible:!0,extensions:["jsonld"]},"application/lgr+xml":{source:"iana",compressible:!0,extensions:["lgr"]},"application/link-format":{source:"iana"},"application/load-control+xml":{source:"iana",compressible:!0},"application/lost+xml":{source:"iana",compressible:!0,extensions:["lostxml"]},"application/lostsync+xml":{source:"iana",compressible:!0},"application/lpf+zip":{source:"iana",compressible:!1},"application/lxf":{source:"iana"},"application/mac-binhex40":{source:"iana",extensions:["hqx"]},"application/mac-compactpro":{source:"apache",extensions:["cpt"]},"application/macwriteii":{source:"iana"},"application/mads+xml":{source:"iana",compressible:!0,extensions:["mads"]},"application/manifest+json":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["webmanifest"]},"application/marc":{source:"iana",extensions:["mrc"]},"application/marcxml+xml":{source:"iana",compressible:!0,extensions:["mrcx"]},"application/mathematica":{source:"iana",extensions:["ma","nb","mb"]},"application/mathml+xml":{source:"iana",compressible:!0,extensions:["mathml"]},"application/mathml-content+xml":{source:"iana",compressible:!0},"application/mathml-presentation+xml":{source:"iana",compressible:!0},"application/mbms-associated-procedure-description+xml":{source:"iana",compressible:!0},"application/mbms-deregister+xml":{source:"iana",compressible:!0},"application/mbms-envelope+xml":{source:"iana",compressible:!0},"application/mbms-msk+xml":{source:"iana",compressible:!0},"application/mbms-msk-response+xml":{source:"iana",compressible:!0},"application/mbms-protection-description+xml":{source:"iana",compressible:!0},"application/mbms-reception-report+xml":{source:"iana",compressible:!0},"application/mbms-register+xml":{source:"iana",compressible:!0},"application/mbms-register-response+xml":{source:"iana",compressible:!0},"application/mbms-schedule+xml":{source:"iana",compressible:!0},"application/mbms-user-service-description+xml":{source:"iana",compressible:!0},"application/mbox":{source:"iana",extensions:["mbox"]},"application/media-policy-dataset+xml":{source:"iana",compressible:!0,extensions:["mpf"]},"application/media_control+xml":{source:"iana",compressible:!0},"application/mediaservercontrol+xml":{source:"iana",compressible:!0,extensions:["mscml"]},"application/merge-patch+json":{source:"iana",compressible:!0},"application/metalink+xml":{source:"apache",compressible:!0,extensions:["metalink"]},"application/metalink4+xml":{source:"iana",compressible:!0,extensions:["meta4"]},"application/mets+xml":{source:"iana",compressible:!0,extensions:["mets"]},"application/mf4":{source:"iana"},"application/mikey":{source:"iana"},"application/mipc":{source:"iana"},"application/missing-blocks+cbor-seq":{source:"iana"},"application/mmt-aei+xml":{source:"iana",compressible:!0,extensions:["maei"]},"application/mmt-usd+xml":{source:"iana",compressible:!0,extensions:["musd"]},"application/mods+xml":{source:"iana",compressible:!0,extensions:["mods"]},"application/moss-keys":{source:"iana"},"application/moss-signature":{source:"iana"},"application/mosskey-data":{source:"iana"},"application/mosskey-request":{source:"iana"},"application/mp21":{source:"iana",extensions:["m21","mp21"]},"application/mp4":{source:"iana",extensions:["mp4s","m4p"]},"application/mpeg4-generic":{source:"iana"},"application/mpeg4-iod":{source:"iana"},"application/mpeg4-iod-xmt":{source:"iana"},"application/mrb-consumer+xml":{source:"iana",compressible:!0},"application/mrb-publish+xml":{source:"iana",compressible:!0},"application/msc-ivr+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/msc-mixer+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/msword":{source:"iana",compressible:!1,extensions:["doc","dot"]},"application/mud+json":{source:"iana",compressible:!0},"application/multipart-core":{source:"iana"},"application/mxf":{source:"iana",extensions:["mxf"]},"application/n-quads":{source:"iana",extensions:["nq"]},"application/n-triples":{source:"iana",extensions:["nt"]},"application/nasdata":{source:"iana"},"application/news-checkgroups":{source:"iana",charset:"US-ASCII"},"application/news-groupinfo":{source:"iana",charset:"US-ASCII"},"application/news-transmission":{source:"iana"},"application/nlsml+xml":{source:"iana",compressible:!0},"application/node":{source:"iana",extensions:["cjs"]},"application/nss":{source:"iana"},"application/oauth-authz-req+jwt":{source:"iana"},"application/oblivious-dns-message":{source:"iana"},"application/ocsp-request":{source:"iana"},"application/ocsp-response":{source:"iana"},"application/octet-stream":{source:"iana",compressible:!1,extensions:["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"]},"application/oda":{source:"iana",extensions:["oda"]},"application/odm+xml":{source:"iana",compressible:!0},"application/odx":{source:"iana"},"application/oebps-package+xml":{source:"iana",compressible:!0,extensions:["opf"]},"application/ogg":{source:"iana",compressible:!1,extensions:["ogx"]},"application/omdoc+xml":{source:"apache",compressible:!0,extensions:["omdoc"]},"application/onenote":{source:"apache",extensions:["onetoc","onetoc2","onetmp","onepkg"]},"application/opc-nodeset+xml":{source:"iana",compressible:!0},"application/oscore":{source:"iana"},"application/oxps":{source:"iana",extensions:["oxps"]},"application/p21":{source:"iana"},"application/p21+zip":{source:"iana",compressible:!1},"application/p2p-overlay+xml":{source:"iana",compressible:!0,extensions:["relo"]},"application/parityfec":{source:"iana"},"application/passport":{source:"iana"},"application/patch-ops-error+xml":{source:"iana",compressible:!0,extensions:["xer"]},"application/pdf":{source:"iana",compressible:!1,extensions:["pdf"]},"application/pdx":{source:"iana"},"application/pem-certificate-chain":{source:"iana"},"application/pgp-encrypted":{source:"iana",compressible:!1,extensions:["pgp"]},"application/pgp-keys":{source:"iana",extensions:["asc"]},"application/pgp-signature":{source:"iana",extensions:["asc","sig"]},"application/pics-rules":{source:"apache",extensions:["prf"]},"application/pidf+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/pidf-diff+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/pkcs10":{source:"iana",extensions:["p10"]},"application/pkcs12":{source:"iana"},"application/pkcs7-mime":{source:"iana",extensions:["p7m","p7c"]},"application/pkcs7-signature":{source:"iana",extensions:["p7s"]},"application/pkcs8":{source:"iana",extensions:["p8"]},"application/pkcs8-encrypted":{source:"iana"},"application/pkix-attr-cert":{source:"iana",extensions:["ac"]},"application/pkix-cert":{source:"iana",extensions:["cer"]},"application/pkix-crl":{source:"iana",extensions:["crl"]},"application/pkix-pkipath":{source:"iana",extensions:["pkipath"]},"application/pkixcmp":{source:"iana",extensions:["pki"]},"application/pls+xml":{source:"iana",compressible:!0,extensions:["pls"]},"application/poc-settings+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/postscript":{source:"iana",compressible:!0,extensions:["ai","eps","ps"]},"application/ppsp-tracker+json":{source:"iana",compressible:!0},"application/problem+json":{source:"iana",compressible:!0},"application/problem+xml":{source:"iana",compressible:!0},"application/provenance+xml":{source:"iana",compressible:!0,extensions:["provx"]},"application/prs.alvestrand.titrax-sheet":{source:"iana"},"application/prs.cww":{source:"iana",extensions:["cww"]},"application/prs.cyn":{source:"iana",charset:"7-BIT"},"application/prs.hpub+zip":{source:"iana",compressible:!1},"application/prs.nprend":{source:"iana"},"application/prs.plucker":{source:"iana"},"application/prs.rdf-xml-crypt":{source:"iana"},"application/prs.xsf+xml":{source:"iana",compressible:!0},"application/pskc+xml":{source:"iana",compressible:!0,extensions:["pskcxml"]},"application/pvd+json":{source:"iana",compressible:!0},"application/qsig":{source:"iana"},"application/raml+yaml":{compressible:!0,extensions:["raml"]},"application/raptorfec":{source:"iana"},"application/rdap+json":{source:"iana",compressible:!0},"application/rdf+xml":{source:"iana",compressible:!0,extensions:["rdf","owl"]},"application/reginfo+xml":{source:"iana",compressible:!0,extensions:["rif"]},"application/relax-ng-compact-syntax":{source:"iana",extensions:["rnc"]},"application/remote-printing":{source:"iana"},"application/reputon+json":{source:"iana",compressible:!0},"application/resource-lists+xml":{source:"iana",compressible:!0,extensions:["rl"]},"application/resource-lists-diff+xml":{source:"iana",compressible:!0,extensions:["rld"]},"application/rfc+xml":{source:"iana",compressible:!0},"application/riscos":{source:"iana"},"application/rlmi+xml":{source:"iana",compressible:!0},"application/rls-services+xml":{source:"iana",compressible:!0,extensions:["rs"]},"application/route-apd+xml":{source:"iana",compressible:!0,extensions:["rapd"]},"application/route-s-tsid+xml":{source:"iana",compressible:!0,extensions:["sls"]},"application/route-usd+xml":{source:"iana",compressible:!0,extensions:["rusd"]},"application/rpki-ghostbusters":{source:"iana",extensions:["gbr"]},"application/rpki-manifest":{source:"iana",extensions:["mft"]},"application/rpki-publication":{source:"iana"},"application/rpki-roa":{source:"iana",extensions:["roa"]},"application/rpki-updown":{source:"iana"},"application/rsd+xml":{source:"apache",compressible:!0,extensions:["rsd"]},"application/rss+xml":{source:"apache",compressible:!0,extensions:["rss"]},"application/rtf":{source:"iana",compressible:!0,extensions:["rtf"]},"application/rtploopback":{source:"iana"},"application/rtx":{source:"iana"},"application/samlassertion+xml":{source:"iana",compressible:!0},"application/samlmetadata+xml":{source:"iana",compressible:!0},"application/sarif+json":{source:"iana",compressible:!0},"application/sarif-external-properties+json":{source:"iana",compressible:!0},"application/sbe":{source:"iana"},"application/sbml+xml":{source:"iana",compressible:!0,extensions:["sbml"]},"application/scaip+xml":{source:"iana",compressible:!0},"application/scim+json":{source:"iana",compressible:!0},"application/scvp-cv-request":{source:"iana",extensions:["scq"]},"application/scvp-cv-response":{source:"iana",extensions:["scs"]},"application/scvp-vp-request":{source:"iana",extensions:["spq"]},"application/scvp-vp-response":{source:"iana",extensions:["spp"]},"application/sdp":{source:"iana",extensions:["sdp"]},"application/secevent+jwt":{source:"iana"},"application/senml+cbor":{source:"iana"},"application/senml+json":{source:"iana",compressible:!0},"application/senml+xml":{source:"iana",compressible:!0,extensions:["senmlx"]},"application/senml-etch+cbor":{source:"iana"},"application/senml-etch+json":{source:"iana",compressible:!0},"application/senml-exi":{source:"iana"},"application/sensml+cbor":{source:"iana"},"application/sensml+json":{source:"iana",compressible:!0},"application/sensml+xml":{source:"iana",compressible:!0,extensions:["sensmlx"]},"application/sensml-exi":{source:"iana"},"application/sep+xml":{source:"iana",compressible:!0},"application/sep-exi":{source:"iana"},"application/session-info":{source:"iana"},"application/set-payment":{source:"iana"},"application/set-payment-initiation":{source:"iana",extensions:["setpay"]},"application/set-registration":{source:"iana"},"application/set-registration-initiation":{source:"iana",extensions:["setreg"]},"application/sgml":{source:"iana"},"application/sgml-open-catalog":{source:"iana"},"application/shf+xml":{source:"iana",compressible:!0,extensions:["shf"]},"application/sieve":{source:"iana",extensions:["siv","sieve"]},"application/simple-filter+xml":{source:"iana",compressible:!0},"application/simple-message-summary":{source:"iana"},"application/simplesymbolcontainer":{source:"iana"},"application/sipc":{source:"iana"},"application/slate":{source:"iana"},"application/smil":{source:"iana"},"application/smil+xml":{source:"iana",compressible:!0,extensions:["smi","smil"]},"application/smpte336m":{source:"iana"},"application/soap+fastinfoset":{source:"iana"},"application/soap+xml":{source:"iana",compressible:!0},"application/sparql-query":{source:"iana",extensions:["rq"]},"application/sparql-results+xml":{source:"iana",compressible:!0,extensions:["srx"]},"application/spdx+json":{source:"iana",compressible:!0},"application/spirits-event+xml":{source:"iana",compressible:!0},"application/sql":{source:"iana"},"application/srgs":{source:"iana",extensions:["gram"]},"application/srgs+xml":{source:"iana",compressible:!0,extensions:["grxml"]},"application/sru+xml":{source:"iana",compressible:!0,extensions:["sru"]},"application/ssdl+xml":{source:"apache",compressible:!0,extensions:["ssdl"]},"application/ssml+xml":{source:"iana",compressible:!0,extensions:["ssml"]},"application/stix+json":{source:"iana",compressible:!0},"application/swid+xml":{source:"iana",compressible:!0,extensions:["swidtag"]},"application/tamp-apex-update":{source:"iana"},"application/tamp-apex-update-confirm":{source:"iana"},"application/tamp-community-update":{source:"iana"},"application/tamp-community-update-confirm":{source:"iana"},"application/tamp-error":{source:"iana"},"application/tamp-sequence-adjust":{source:"iana"},"application/tamp-sequence-adjust-confirm":{source:"iana"},"application/tamp-status-query":{source:"iana"},"application/tamp-status-response":{source:"iana"},"application/tamp-update":{source:"iana"},"application/tamp-update-confirm":{source:"iana"},"application/tar":{compressible:!0},"application/taxii+json":{source:"iana",compressible:!0},"application/td+json":{source:"iana",compressible:!0},"application/tei+xml":{source:"iana",compressible:!0,extensions:["tei","teicorpus"]},"application/tetra_isi":{source:"iana"},"application/thraud+xml":{source:"iana",compressible:!0,extensions:["tfi"]},"application/timestamp-query":{source:"iana"},"application/timestamp-reply":{source:"iana"},"application/timestamped-data":{source:"iana",extensions:["tsd"]},"application/tlsrpt+gzip":{source:"iana"},"application/tlsrpt+json":{source:"iana",compressible:!0},"application/tnauthlist":{source:"iana"},"application/token-introspection+jwt":{source:"iana"},"application/toml":{compressible:!0,extensions:["toml"]},"application/trickle-ice-sdpfrag":{source:"iana"},"application/trig":{source:"iana",extensions:["trig"]},"application/ttml+xml":{source:"iana",compressible:!0,extensions:["ttml"]},"application/tve-trigger":{source:"iana"},"application/tzif":{source:"iana"},"application/tzif-leap":{source:"iana"},"application/ubjson":{compressible:!1,extensions:["ubj"]},"application/ulpfec":{source:"iana"},"application/urc-grpsheet+xml":{source:"iana",compressible:!0},"application/urc-ressheet+xml":{source:"iana",compressible:!0,extensions:["rsheet"]},"application/urc-targetdesc+xml":{source:"iana",compressible:!0,extensions:["td"]},"application/urc-uisocketdesc+xml":{source:"iana",compressible:!0},"application/vcard+json":{source:"iana",compressible:!0},"application/vcard+xml":{source:"iana",compressible:!0},"application/vemmi":{source:"iana"},"application/vividence.scriptfile":{source:"apache"},"application/vnd.1000minds.decision-model+xml":{source:"iana",compressible:!0,extensions:["1km"]},"application/vnd.3gpp-prose+xml":{source:"iana",compressible:!0},"application/vnd.3gpp-prose-pc3ch+xml":{source:"iana",compressible:!0},"application/vnd.3gpp-v2x-local-service-information":{source:"iana"},"application/vnd.3gpp.5gnas":{source:"iana"},"application/vnd.3gpp.access-transfer-events+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.bsf+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.gmop+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.gtpc":{source:"iana"},"application/vnd.3gpp.interworking-data":{source:"iana"},"application/vnd.3gpp.lpp":{source:"iana"},"application/vnd.3gpp.mc-signalling-ear":{source:"iana"},"application/vnd.3gpp.mcdata-affiliation-command+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcdata-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcdata-payload":{source:"iana"},"application/vnd.3gpp.mcdata-service-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcdata-signalling":{source:"iana"},"application/vnd.3gpp.mcdata-ue-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcdata-user-profile+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-affiliation-command+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-floor-request+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-location-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-mbms-usage-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-service-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-signed+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-ue-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-ue-init-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcptt-user-profile+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-affiliation-command+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-affiliation-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-location-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-mbms-usage-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-service-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-transmission-request+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-ue-config+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mcvideo-user-profile+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.mid-call+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.ngap":{source:"iana"},"application/vnd.3gpp.pfcp":{source:"iana"},"application/vnd.3gpp.pic-bw-large":{source:"iana",extensions:["plb"]},"application/vnd.3gpp.pic-bw-small":{source:"iana",extensions:["psb"]},"application/vnd.3gpp.pic-bw-var":{source:"iana",extensions:["pvb"]},"application/vnd.3gpp.s1ap":{source:"iana"},"application/vnd.3gpp.sms":{source:"iana"},"application/vnd.3gpp.sms+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.srvcc-ext+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.srvcc-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.state-and-event-info+xml":{source:"iana",compressible:!0},"application/vnd.3gpp.ussd+xml":{source:"iana",compressible:!0},"application/vnd.3gpp2.bcmcsinfo+xml":{source:"iana",compressible:!0},"application/vnd.3gpp2.sms":{source:"iana"},"application/vnd.3gpp2.tcap":{source:"iana",extensions:["tcap"]},"application/vnd.3lightssoftware.imagescal":{source:"iana"},"application/vnd.3m.post-it-notes":{source:"iana",extensions:["pwn"]},"application/vnd.accpac.simply.aso":{source:"iana",extensions:["aso"]},"application/vnd.accpac.simply.imp":{source:"iana",extensions:["imp"]},"application/vnd.acucobol":{source:"iana",extensions:["acu"]},"application/vnd.acucorp":{source:"iana",extensions:["atc","acutc"]},"application/vnd.adobe.air-application-installer-package+zip":{source:"apache",compressible:!1,extensions:["air"]},"application/vnd.adobe.flash.movie":{source:"iana"},"application/vnd.adobe.formscentral.fcdt":{source:"iana",extensions:["fcdt"]},"application/vnd.adobe.fxp":{source:"iana",extensions:["fxp","fxpl"]},"application/vnd.adobe.partial-upload":{source:"iana"},"application/vnd.adobe.xdp+xml":{source:"iana",compressible:!0,extensions:["xdp"]},"application/vnd.adobe.xfdf":{source:"iana",extensions:["xfdf"]},"application/vnd.aether.imp":{source:"iana"},"application/vnd.afpc.afplinedata":{source:"iana"},"application/vnd.afpc.afplinedata-pagedef":{source:"iana"},"application/vnd.afpc.cmoca-cmresource":{source:"iana"},"application/vnd.afpc.foca-charset":{source:"iana"},"application/vnd.afpc.foca-codedfont":{source:"iana"},"application/vnd.afpc.foca-codepage":{source:"iana"},"application/vnd.afpc.modca":{source:"iana"},"application/vnd.afpc.modca-cmtable":{source:"iana"},"application/vnd.afpc.modca-formdef":{source:"iana"},"application/vnd.afpc.modca-mediummap":{source:"iana"},"application/vnd.afpc.modca-objectcontainer":{source:"iana"},"application/vnd.afpc.modca-overlay":{source:"iana"},"application/vnd.afpc.modca-pagesegment":{source:"iana"},"application/vnd.age":{source:"iana",extensions:["age"]},"application/vnd.ah-barcode":{source:"iana"},"application/vnd.ahead.space":{source:"iana",extensions:["ahead"]},"application/vnd.airzip.filesecure.azf":{source:"iana",extensions:["azf"]},"application/vnd.airzip.filesecure.azs":{source:"iana",extensions:["azs"]},"application/vnd.amadeus+json":{source:"iana",compressible:!0},"application/vnd.amazon.ebook":{source:"apache",extensions:["azw"]},"application/vnd.amazon.mobi8-ebook":{source:"iana"},"application/vnd.americandynamics.acc":{source:"iana",extensions:["acc"]},"application/vnd.amiga.ami":{source:"iana",extensions:["ami"]},"application/vnd.amundsen.maze+xml":{source:"iana",compressible:!0},"application/vnd.android.ota":{source:"iana"},"application/vnd.android.package-archive":{source:"apache",compressible:!1,extensions:["apk"]},"application/vnd.anki":{source:"iana"},"application/vnd.anser-web-certificate-issue-initiation":{source:"iana",extensions:["cii"]},"application/vnd.anser-web-funds-transfer-initiation":{source:"apache",extensions:["fti"]},"application/vnd.antix.game-component":{source:"iana",extensions:["atx"]},"application/vnd.apache.arrow.file":{source:"iana"},"application/vnd.apache.arrow.stream":{source:"iana"},"application/vnd.apache.thrift.binary":{source:"iana"},"application/vnd.apache.thrift.compact":{source:"iana"},"application/vnd.apache.thrift.json":{source:"iana"},"application/vnd.api+json":{source:"iana",compressible:!0},"application/vnd.aplextor.warrp+json":{source:"iana",compressible:!0},"application/vnd.apothekende.reservation+json":{source:"iana",compressible:!0},"application/vnd.apple.installer+xml":{source:"iana",compressible:!0,extensions:["mpkg"]},"application/vnd.apple.keynote":{source:"iana",extensions:["key"]},"application/vnd.apple.mpegurl":{source:"iana",extensions:["m3u8"]},"application/vnd.apple.numbers":{source:"iana",extensions:["numbers"]},"application/vnd.apple.pages":{source:"iana",extensions:["pages"]},"application/vnd.apple.pkpass":{compressible:!1,extensions:["pkpass"]},"application/vnd.arastra.swi":{source:"iana"},"application/vnd.aristanetworks.swi":{source:"iana",extensions:["swi"]},"application/vnd.artisan+json":{source:"iana",compressible:!0},"application/vnd.artsquare":{source:"iana"},"application/vnd.astraea-software.iota":{source:"iana",extensions:["iota"]},"application/vnd.audiograph":{source:"iana",extensions:["aep"]},"application/vnd.autopackage":{source:"iana"},"application/vnd.avalon+json":{source:"iana",compressible:!0},"application/vnd.avistar+xml":{source:"iana",compressible:!0},"application/vnd.balsamiq.bmml+xml":{source:"iana",compressible:!0,extensions:["bmml"]},"application/vnd.balsamiq.bmpr":{source:"iana"},"application/vnd.banana-accounting":{source:"iana"},"application/vnd.bbf.usp.error":{source:"iana"},"application/vnd.bbf.usp.msg":{source:"iana"},"application/vnd.bbf.usp.msg+json":{source:"iana",compressible:!0},"application/vnd.bekitzur-stech+json":{source:"iana",compressible:!0},"application/vnd.bint.med-content":{source:"iana"},"application/vnd.biopax.rdf+xml":{source:"iana",compressible:!0},"application/vnd.blink-idb-value-wrapper":{source:"iana"},"application/vnd.blueice.multipass":{source:"iana",extensions:["mpm"]},"application/vnd.bluetooth.ep.oob":{source:"iana"},"application/vnd.bluetooth.le.oob":{source:"iana"},"application/vnd.bmi":{source:"iana",extensions:["bmi"]},"application/vnd.bpf":{source:"iana"},"application/vnd.bpf3":{source:"iana"},"application/vnd.businessobjects":{source:"iana",extensions:["rep"]},"application/vnd.byu.uapi+json":{source:"iana",compressible:!0},"application/vnd.cab-jscript":{source:"iana"},"application/vnd.canon-cpdl":{source:"iana"},"application/vnd.canon-lips":{source:"iana"},"application/vnd.capasystems-pg+json":{source:"iana",compressible:!0},"application/vnd.cendio.thinlinc.clientconf":{source:"iana"},"application/vnd.century-systems.tcp_stream":{source:"iana"},"application/vnd.chemdraw+xml":{source:"iana",compressible:!0,extensions:["cdxml"]},"application/vnd.chess-pgn":{source:"iana"},"application/vnd.chipnuts.karaoke-mmd":{source:"iana",extensions:["mmd"]},"application/vnd.ciedi":{source:"iana"},"application/vnd.cinderella":{source:"iana",extensions:["cdy"]},"application/vnd.cirpack.isdn-ext":{source:"iana"},"application/vnd.citationstyles.style+xml":{source:"iana",compressible:!0,extensions:["csl"]},"application/vnd.claymore":{source:"iana",extensions:["cla"]},"application/vnd.cloanto.rp9":{source:"iana",extensions:["rp9"]},"application/vnd.clonk.c4group":{source:"iana",extensions:["c4g","c4d","c4f","c4p","c4u"]},"application/vnd.cluetrust.cartomobile-config":{source:"iana",extensions:["c11amc"]},"application/vnd.cluetrust.cartomobile-config-pkg":{source:"iana",extensions:["c11amz"]},"application/vnd.coffeescript":{source:"iana"},"application/vnd.collabio.xodocuments.document":{source:"iana"},"application/vnd.collabio.xodocuments.document-template":{source:"iana"},"application/vnd.collabio.xodocuments.presentation":{source:"iana"},"application/vnd.collabio.xodocuments.presentation-template":{source:"iana"},"application/vnd.collabio.xodocuments.spreadsheet":{source:"iana"},"application/vnd.collabio.xodocuments.spreadsheet-template":{source:"iana"},"application/vnd.collection+json":{source:"iana",compressible:!0},"application/vnd.collection.doc+json":{source:"iana",compressible:!0},"application/vnd.collection.next+json":{source:"iana",compressible:!0},"application/vnd.comicbook+zip":{source:"iana",compressible:!1},"application/vnd.comicbook-rar":{source:"iana"},"application/vnd.commerce-battelle":{source:"iana"},"application/vnd.commonspace":{source:"iana",extensions:["csp"]},"application/vnd.contact.cmsg":{source:"iana",extensions:["cdbcmsg"]},"application/vnd.coreos.ignition+json":{source:"iana",compressible:!0},"application/vnd.cosmocaller":{source:"iana",extensions:["cmc"]},"application/vnd.crick.clicker":{source:"iana",extensions:["clkx"]},"application/vnd.crick.clicker.keyboard":{source:"iana",extensions:["clkk"]},"application/vnd.crick.clicker.palette":{source:"iana",extensions:["clkp"]},"application/vnd.crick.clicker.template":{source:"iana",extensions:["clkt"]},"application/vnd.crick.clicker.wordbank":{source:"iana",extensions:["clkw"]},"application/vnd.criticaltools.wbs+xml":{source:"iana",compressible:!0,extensions:["wbs"]},"application/vnd.cryptii.pipe+json":{source:"iana",compressible:!0},"application/vnd.crypto-shade-file":{source:"iana"},"application/vnd.cryptomator.encrypted":{source:"iana"},"application/vnd.cryptomator.vault":{source:"iana"},"application/vnd.ctc-posml":{source:"iana",extensions:["pml"]},"application/vnd.ctct.ws+xml":{source:"iana",compressible:!0},"application/vnd.cups-pdf":{source:"iana"},"application/vnd.cups-postscript":{source:"iana"},"application/vnd.cups-ppd":{source:"iana",extensions:["ppd"]},"application/vnd.cups-raster":{source:"iana"},"application/vnd.cups-raw":{source:"iana"},"application/vnd.curl":{source:"iana"},"application/vnd.curl.car":{source:"apache",extensions:["car"]},"application/vnd.curl.pcurl":{source:"apache",extensions:["pcurl"]},"application/vnd.cyan.dean.root+xml":{source:"iana",compressible:!0},"application/vnd.cybank":{source:"iana"},"application/vnd.cyclonedx+json":{source:"iana",compressible:!0},"application/vnd.cyclonedx+xml":{source:"iana",compressible:!0},"application/vnd.d2l.coursepackage1p0+zip":{source:"iana",compressible:!1},"application/vnd.d3m-dataset":{source:"iana"},"application/vnd.d3m-problem":{source:"iana"},"application/vnd.dart":{source:"iana",compressible:!0,extensions:["dart"]},"application/vnd.data-vision.rdz":{source:"iana",extensions:["rdz"]},"application/vnd.datapackage+json":{source:"iana",compressible:!0},"application/vnd.dataresource+json":{source:"iana",compressible:!0},"application/vnd.dbf":{source:"iana",extensions:["dbf"]},"application/vnd.debian.binary-package":{source:"iana"},"application/vnd.dece.data":{source:"iana",extensions:["uvf","uvvf","uvd","uvvd"]},"application/vnd.dece.ttml+xml":{source:"iana",compressible:!0,extensions:["uvt","uvvt"]},"application/vnd.dece.unspecified":{source:"iana",extensions:["uvx","uvvx"]},"application/vnd.dece.zip":{source:"iana",extensions:["uvz","uvvz"]},"application/vnd.denovo.fcselayout-link":{source:"iana",extensions:["fe_launch"]},"application/vnd.desmume.movie":{source:"iana"},"application/vnd.dir-bi.plate-dl-nosuffix":{source:"iana"},"application/vnd.dm.delegation+xml":{source:"iana",compressible:!0},"application/vnd.dna":{source:"iana",extensions:["dna"]},"application/vnd.document+json":{source:"iana",compressible:!0},"application/vnd.dolby.mlp":{source:"apache",extensions:["mlp"]},"application/vnd.dolby.mobile.1":{source:"iana"},"application/vnd.dolby.mobile.2":{source:"iana"},"application/vnd.doremir.scorecloud-binary-document":{source:"iana"},"application/vnd.dpgraph":{source:"iana",extensions:["dpg"]},"application/vnd.dreamfactory":{source:"iana",extensions:["dfac"]},"application/vnd.drive+json":{source:"iana",compressible:!0},"application/vnd.ds-keypoint":{source:"apache",extensions:["kpxx"]},"application/vnd.dtg.local":{source:"iana"},"application/vnd.dtg.local.flash":{source:"iana"},"application/vnd.dtg.local.html":{source:"iana"},"application/vnd.dvb.ait":{source:"iana",extensions:["ait"]},"application/vnd.dvb.dvbisl+xml":{source:"iana",compressible:!0},"application/vnd.dvb.dvbj":{source:"iana"},"application/vnd.dvb.esgcontainer":{source:"iana"},"application/vnd.dvb.ipdcdftnotifaccess":{source:"iana"},"application/vnd.dvb.ipdcesgaccess":{source:"iana"},"application/vnd.dvb.ipdcesgaccess2":{source:"iana"},"application/vnd.dvb.ipdcesgpdd":{source:"iana"},"application/vnd.dvb.ipdcroaming":{source:"iana"},"application/vnd.dvb.iptv.alfec-base":{source:"iana"},"application/vnd.dvb.iptv.alfec-enhancement":{source:"iana"},"application/vnd.dvb.notif-aggregate-root+xml":{source:"iana",compressible:!0},"application/vnd.dvb.notif-container+xml":{source:"iana",compressible:!0},"application/vnd.dvb.notif-generic+xml":{source:"iana",compressible:!0},"application/vnd.dvb.notif-ia-msglist+xml":{source:"iana",compressible:!0},"application/vnd.dvb.notif-ia-registration-request+xml":{source:"iana",compressible:!0},"application/vnd.dvb.notif-ia-registration-response+xml":{source:"iana",compressible:!0},"application/vnd.dvb.notif-init+xml":{source:"iana",compressible:!0},"application/vnd.dvb.pfr":{source:"iana"},"application/vnd.dvb.service":{source:"iana",extensions:["svc"]},"application/vnd.dxr":{source:"iana"},"application/vnd.dynageo":{source:"iana",extensions:["geo"]},"application/vnd.dzr":{source:"iana"},"application/vnd.easykaraoke.cdgdownload":{source:"iana"},"application/vnd.ecdis-update":{source:"iana"},"application/vnd.ecip.rlp":{source:"iana"},"application/vnd.eclipse.ditto+json":{source:"iana",compressible:!0},"application/vnd.ecowin.chart":{source:"iana",extensions:["mag"]},"application/vnd.ecowin.filerequest":{source:"iana"},"application/vnd.ecowin.fileupdate":{source:"iana"},"application/vnd.ecowin.series":{source:"iana"},"application/vnd.ecowin.seriesrequest":{source:"iana"},"application/vnd.ecowin.seriesupdate":{source:"iana"},"application/vnd.efi.img":{source:"iana"},"application/vnd.efi.iso":{source:"iana"},"application/vnd.emclient.accessrequest+xml":{source:"iana",compressible:!0},"application/vnd.enliven":{source:"iana",extensions:["nml"]},"application/vnd.enphase.envoy":{source:"iana"},"application/vnd.eprints.data+xml":{source:"iana",compressible:!0},"application/vnd.epson.esf":{source:"iana",extensions:["esf"]},"application/vnd.epson.msf":{source:"iana",extensions:["msf"]},"application/vnd.epson.quickanime":{source:"iana",extensions:["qam"]},"application/vnd.epson.salt":{source:"iana",extensions:["slt"]},"application/vnd.epson.ssf":{source:"iana",extensions:["ssf"]},"application/vnd.ericsson.quickcall":{source:"iana"},"application/vnd.espass-espass+zip":{source:"iana",compressible:!1},"application/vnd.eszigno3+xml":{source:"iana",compressible:!0,extensions:["es3","et3"]},"application/vnd.etsi.aoc+xml":{source:"iana",compressible:!0},"application/vnd.etsi.asic-e+zip":{source:"iana",compressible:!1},"application/vnd.etsi.asic-s+zip":{source:"iana",compressible:!1},"application/vnd.etsi.cug+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvcommand+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvdiscovery+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvprofile+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvsad-bc+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvsad-cod+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvsad-npvr+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvservice+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvsync+xml":{source:"iana",compressible:!0},"application/vnd.etsi.iptvueprofile+xml":{source:"iana",compressible:!0},"application/vnd.etsi.mcid+xml":{source:"iana",compressible:!0},"application/vnd.etsi.mheg5":{source:"iana"},"application/vnd.etsi.overload-control-policy-dataset+xml":{source:"iana",compressible:!0},"application/vnd.etsi.pstn+xml":{source:"iana",compressible:!0},"application/vnd.etsi.sci+xml":{source:"iana",compressible:!0},"application/vnd.etsi.simservs+xml":{source:"iana",compressible:!0},"application/vnd.etsi.timestamp-token":{source:"iana"},"application/vnd.etsi.tsl+xml":{source:"iana",compressible:!0},"application/vnd.etsi.tsl.der":{source:"iana"},"application/vnd.eu.kasparian.car+json":{source:"iana",compressible:!0},"application/vnd.eudora.data":{source:"iana"},"application/vnd.evolv.ecig.profile":{source:"iana"},"application/vnd.evolv.ecig.settings":{source:"iana"},"application/vnd.evolv.ecig.theme":{source:"iana"},"application/vnd.exstream-empower+zip":{source:"iana",compressible:!1},"application/vnd.exstream-package":{source:"iana"},"application/vnd.ezpix-album":{source:"iana",extensions:["ez2"]},"application/vnd.ezpix-package":{source:"iana",extensions:["ez3"]},"application/vnd.f-secure.mobile":{source:"iana"},"application/vnd.familysearch.gedcom+zip":{source:"iana",compressible:!1},"application/vnd.fastcopy-disk-image":{source:"iana"},"application/vnd.fdf":{source:"iana",extensions:["fdf"]},"application/vnd.fdsn.mseed":{source:"iana",extensions:["mseed"]},"application/vnd.fdsn.seed":{source:"iana",extensions:["seed","dataless"]},"application/vnd.ffsns":{source:"iana"},"application/vnd.ficlab.flb+zip":{source:"iana",compressible:!1},"application/vnd.filmit.zfc":{source:"iana"},"application/vnd.fints":{source:"iana"},"application/vnd.firemonkeys.cloudcell":{source:"iana"},"application/vnd.flographit":{source:"iana",extensions:["gph"]},"application/vnd.fluxtime.clip":{source:"iana",extensions:["ftc"]},"application/vnd.font-fontforge-sfd":{source:"iana"},"application/vnd.framemaker":{source:"iana",extensions:["fm","frame","maker","book"]},"application/vnd.frogans.fnc":{source:"iana",extensions:["fnc"]},"application/vnd.frogans.ltf":{source:"iana",extensions:["ltf"]},"application/vnd.fsc.weblaunch":{source:"iana",extensions:["fsc"]},"application/vnd.fujifilm.fb.docuworks":{source:"iana"},"application/vnd.fujifilm.fb.docuworks.binder":{source:"iana"},"application/vnd.fujifilm.fb.docuworks.container":{source:"iana"},"application/vnd.fujifilm.fb.jfi+xml":{source:"iana",compressible:!0},"application/vnd.fujitsu.oasys":{source:"iana",extensions:["oas"]},"application/vnd.fujitsu.oasys2":{source:"iana",extensions:["oa2"]},"application/vnd.fujitsu.oasys3":{source:"iana",extensions:["oa3"]},"application/vnd.fujitsu.oasysgp":{source:"iana",extensions:["fg5"]},"application/vnd.fujitsu.oasysprs":{source:"iana",extensions:["bh2"]},"application/vnd.fujixerox.art-ex":{source:"iana"},"application/vnd.fujixerox.art4":{source:"iana"},"application/vnd.fujixerox.ddd":{source:"iana",extensions:["ddd"]},"application/vnd.fujixerox.docuworks":{source:"iana",extensions:["xdw"]},"application/vnd.fujixerox.docuworks.binder":{source:"iana",extensions:["xbd"]},"application/vnd.fujixerox.docuworks.container":{source:"iana"},"application/vnd.fujixerox.hbpl":{source:"iana"},"application/vnd.fut-misnet":{source:"iana"},"application/vnd.futoin+cbor":{source:"iana"},"application/vnd.futoin+json":{source:"iana",compressible:!0},"application/vnd.fuzzysheet":{source:"iana",extensions:["fzs"]},"application/vnd.genomatix.tuxedo":{source:"iana",extensions:["txd"]},"application/vnd.gentics.grd+json":{source:"iana",compressible:!0},"application/vnd.geo+json":{source:"iana",compressible:!0},"application/vnd.geocube+xml":{source:"iana",compressible:!0},"application/vnd.geogebra.file":{source:"iana",extensions:["ggb"]},"application/vnd.geogebra.slides":{source:"iana"},"application/vnd.geogebra.tool":{source:"iana",extensions:["ggt"]},"application/vnd.geometry-explorer":{source:"iana",extensions:["gex","gre"]},"application/vnd.geonext":{source:"iana",extensions:["gxt"]},"application/vnd.geoplan":{source:"iana",extensions:["g2w"]},"application/vnd.geospace":{source:"iana",extensions:["g3w"]},"application/vnd.gerber":{source:"iana"},"application/vnd.globalplatform.card-content-mgt":{source:"iana"},"application/vnd.globalplatform.card-content-mgt-response":{source:"iana"},"application/vnd.gmx":{source:"iana",extensions:["gmx"]},"application/vnd.google-apps.document":{compressible:!1,extensions:["gdoc"]},"application/vnd.google-apps.presentation":{compressible:!1,extensions:["gslides"]},"application/vnd.google-apps.spreadsheet":{compressible:!1,extensions:["gsheet"]},"application/vnd.google-earth.kml+xml":{source:"iana",compressible:!0,extensions:["kml"]},"application/vnd.google-earth.kmz":{source:"iana",compressible:!1,extensions:["kmz"]},"application/vnd.gov.sk.e-form+xml":{source:"iana",compressible:!0},"application/vnd.gov.sk.e-form+zip":{source:"iana",compressible:!1},"application/vnd.gov.sk.xmldatacontainer+xml":{source:"iana",compressible:!0},"application/vnd.grafeq":{source:"iana",extensions:["gqf","gqs"]},"application/vnd.gridmp":{source:"iana"},"application/vnd.groove-account":{source:"iana",extensions:["gac"]},"application/vnd.groove-help":{source:"iana",extensions:["ghf"]},"application/vnd.groove-identity-message":{source:"iana",extensions:["gim"]},"application/vnd.groove-injector":{source:"iana",extensions:["grv"]},"application/vnd.groove-tool-message":{source:"iana",extensions:["gtm"]},"application/vnd.groove-tool-template":{source:"iana",extensions:["tpl"]},"application/vnd.groove-vcard":{source:"iana",extensions:["vcg"]},"application/vnd.hal+json":{source:"iana",compressible:!0},"application/vnd.hal+xml":{source:"iana",compressible:!0,extensions:["hal"]},"application/vnd.handheld-entertainment+xml":{source:"iana",compressible:!0,extensions:["zmm"]},"application/vnd.hbci":{source:"iana",extensions:["hbci"]},"application/vnd.hc+json":{source:"iana",compressible:!0},"application/vnd.hcl-bireports":{source:"iana"},"application/vnd.hdt":{source:"iana"},"application/vnd.heroku+json":{source:"iana",compressible:!0},"application/vnd.hhe.lesson-player":{source:"iana",extensions:["les"]},"application/vnd.hl7cda+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/vnd.hl7v2+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/vnd.hp-hpgl":{source:"iana",extensions:["hpgl"]},"application/vnd.hp-hpid":{source:"iana",extensions:["hpid"]},"application/vnd.hp-hps":{source:"iana",extensions:["hps"]},"application/vnd.hp-jlyt":{source:"iana",extensions:["jlt"]},"application/vnd.hp-pcl":{source:"iana",extensions:["pcl"]},"application/vnd.hp-pclxl":{source:"iana",extensions:["pclxl"]},"application/vnd.httphone":{source:"iana"},"application/vnd.hydrostatix.sof-data":{source:"iana",extensions:["sfd-hdstx"]},"application/vnd.hyper+json":{source:"iana",compressible:!0},"application/vnd.hyper-item+json":{source:"iana",compressible:!0},"application/vnd.hyperdrive+json":{source:"iana",compressible:!0},"application/vnd.hzn-3d-crossword":{source:"iana"},"application/vnd.ibm.afplinedata":{source:"iana"},"application/vnd.ibm.electronic-media":{source:"iana"},"application/vnd.ibm.minipay":{source:"iana",extensions:["mpy"]},"application/vnd.ibm.modcap":{source:"iana",extensions:["afp","listafp","list3820"]},"application/vnd.ibm.rights-management":{source:"iana",extensions:["irm"]},"application/vnd.ibm.secure-container":{source:"iana",extensions:["sc"]},"application/vnd.iccprofile":{source:"iana",extensions:["icc","icm"]},"application/vnd.ieee.1905":{source:"iana"},"application/vnd.igloader":{source:"iana",extensions:["igl"]},"application/vnd.imagemeter.folder+zip":{source:"iana",compressible:!1},"application/vnd.imagemeter.image+zip":{source:"iana",compressible:!1},"application/vnd.immervision-ivp":{source:"iana",extensions:["ivp"]},"application/vnd.immervision-ivu":{source:"iana",extensions:["ivu"]},"application/vnd.ims.imsccv1p1":{source:"iana"},"application/vnd.ims.imsccv1p2":{source:"iana"},"application/vnd.ims.imsccv1p3":{source:"iana"},"application/vnd.ims.lis.v2.result+json":{source:"iana",compressible:!0},"application/vnd.ims.lti.v2.toolconsumerprofile+json":{source:"iana",compressible:!0},"application/vnd.ims.lti.v2.toolproxy+json":{source:"iana",compressible:!0},"application/vnd.ims.lti.v2.toolproxy.id+json":{source:"iana",compressible:!0},"application/vnd.ims.lti.v2.toolsettings+json":{source:"iana",compressible:!0},"application/vnd.ims.lti.v2.toolsettings.simple+json":{source:"iana",compressible:!0},"application/vnd.informedcontrol.rms+xml":{source:"iana",compressible:!0},"application/vnd.informix-visionary":{source:"iana"},"application/vnd.infotech.project":{source:"iana"},"application/vnd.infotech.project+xml":{source:"iana",compressible:!0},"application/vnd.innopath.wamp.notification":{source:"iana"},"application/vnd.insors.igm":{source:"iana",extensions:["igm"]},"application/vnd.intercon.formnet":{source:"iana",extensions:["xpw","xpx"]},"application/vnd.intergeo":{source:"iana",extensions:["i2g"]},"application/vnd.intertrust.digibox":{source:"iana"},"application/vnd.intertrust.nncp":{source:"iana"},"application/vnd.intu.qbo":{source:"iana",extensions:["qbo"]},"application/vnd.intu.qfx":{source:"iana",extensions:["qfx"]},"application/vnd.iptc.g2.catalogitem+xml":{source:"iana",compressible:!0},"application/vnd.iptc.g2.conceptitem+xml":{source:"iana",compressible:!0},"application/vnd.iptc.g2.knowledgeitem+xml":{source:"iana",compressible:!0},"application/vnd.iptc.g2.newsitem+xml":{source:"iana",compressible:!0},"application/vnd.iptc.g2.newsmessage+xml":{source:"iana",compressible:!0},"application/vnd.iptc.g2.packageitem+xml":{source:"iana",compressible:!0},"application/vnd.iptc.g2.planningitem+xml":{source:"iana",compressible:!0},"application/vnd.ipunplugged.rcprofile":{source:"iana",extensions:["rcprofile"]},"application/vnd.irepository.package+xml":{source:"iana",compressible:!0,extensions:["irp"]},"application/vnd.is-xpr":{source:"iana",extensions:["xpr"]},"application/vnd.isac.fcs":{source:"iana",extensions:["fcs"]},"application/vnd.iso11783-10+zip":{source:"iana",compressible:!1},"application/vnd.jam":{source:"iana",extensions:["jam"]},"application/vnd.japannet-directory-service":{source:"iana"},"application/vnd.japannet-jpnstore-wakeup":{source:"iana"},"application/vnd.japannet-payment-wakeup":{source:"iana"},"application/vnd.japannet-registration":{source:"iana"},"application/vnd.japannet-registration-wakeup":{source:"iana"},"application/vnd.japannet-setstore-wakeup":{source:"iana"},"application/vnd.japannet-verification":{source:"iana"},"application/vnd.japannet-verification-wakeup":{source:"iana"},"application/vnd.jcp.javame.midlet-rms":{source:"iana",extensions:["rms"]},"application/vnd.jisp":{source:"iana",extensions:["jisp"]},"application/vnd.joost.joda-archive":{source:"iana",extensions:["joda"]},"application/vnd.jsk.isdn-ngn":{source:"iana"},"application/vnd.kahootz":{source:"iana",extensions:["ktz","ktr"]},"application/vnd.kde.karbon":{source:"iana",extensions:["karbon"]},"application/vnd.kde.kchart":{source:"iana",extensions:["chrt"]},"application/vnd.kde.kformula":{source:"iana",extensions:["kfo"]},"application/vnd.kde.kivio":{source:"iana",extensions:["flw"]},"application/vnd.kde.kontour":{source:"iana",extensions:["kon"]},"application/vnd.kde.kpresenter":{source:"iana",extensions:["kpr","kpt"]},"application/vnd.kde.kspread":{source:"iana",extensions:["ksp"]},"application/vnd.kde.kword":{source:"iana",extensions:["kwd","kwt"]},"application/vnd.kenameaapp":{source:"iana",extensions:["htke"]},"application/vnd.kidspiration":{source:"iana",extensions:["kia"]},"application/vnd.kinar":{source:"iana",extensions:["kne","knp"]},"application/vnd.koan":{source:"iana",extensions:["skp","skd","skt","skm"]},"application/vnd.kodak-descriptor":{source:"iana",extensions:["sse"]},"application/vnd.las":{source:"iana"},"application/vnd.las.las+json":{source:"iana",compressible:!0},"application/vnd.las.las+xml":{source:"iana",compressible:!0,extensions:["lasxml"]},"application/vnd.laszip":{source:"iana"},"application/vnd.leap+json":{source:"iana",compressible:!0},"application/vnd.liberty-request+xml":{source:"iana",compressible:!0},"application/vnd.llamagraphics.life-balance.desktop":{source:"iana",extensions:["lbd"]},"application/vnd.llamagraphics.life-balance.exchange+xml":{source:"iana",compressible:!0,extensions:["lbe"]},"application/vnd.logipipe.circuit+zip":{source:"iana",compressible:!1},"application/vnd.loom":{source:"iana"},"application/vnd.lotus-1-2-3":{source:"iana",extensions:["123"]},"application/vnd.lotus-approach":{source:"iana",extensions:["apr"]},"application/vnd.lotus-freelance":{source:"iana",extensions:["pre"]},"application/vnd.lotus-notes":{source:"iana",extensions:["nsf"]},"application/vnd.lotus-organizer":{source:"iana",extensions:["org"]},"application/vnd.lotus-screencam":{source:"iana",extensions:["scm"]},"application/vnd.lotus-wordpro":{source:"iana",extensions:["lwp"]},"application/vnd.macports.portpkg":{source:"iana",extensions:["portpkg"]},"application/vnd.mapbox-vector-tile":{source:"iana",extensions:["mvt"]},"application/vnd.marlin.drm.actiontoken+xml":{source:"iana",compressible:!0},"application/vnd.marlin.drm.conftoken+xml":{source:"iana",compressible:!0},"application/vnd.marlin.drm.license+xml":{source:"iana",compressible:!0},"application/vnd.marlin.drm.mdcf":{source:"iana"},"application/vnd.mason+json":{source:"iana",compressible:!0},"application/vnd.maxar.archive.3tz+zip":{source:"iana",compressible:!1},"application/vnd.maxmind.maxmind-db":{source:"iana"},"application/vnd.mcd":{source:"iana",extensions:["mcd"]},"application/vnd.medcalcdata":{source:"iana",extensions:["mc1"]},"application/vnd.mediastation.cdkey":{source:"iana",extensions:["cdkey"]},"application/vnd.meridian-slingshot":{source:"iana"},"application/vnd.mfer":{source:"iana",extensions:["mwf"]},"application/vnd.mfmp":{source:"iana",extensions:["mfm"]},"application/vnd.micro+json":{source:"iana",compressible:!0},"application/vnd.micrografx.flo":{source:"iana",extensions:["flo"]},"application/vnd.micrografx.igx":{source:"iana",extensions:["igx"]},"application/vnd.microsoft.portable-executable":{source:"iana"},"application/vnd.microsoft.windows.thumbnail-cache":{source:"iana"},"application/vnd.miele+json":{source:"iana",compressible:!0},"application/vnd.mif":{source:"iana",extensions:["mif"]},"application/vnd.minisoft-hp3000-save":{source:"iana"},"application/vnd.mitsubishi.misty-guard.trustweb":{source:"iana"},"application/vnd.mobius.daf":{source:"iana",extensions:["daf"]},"application/vnd.mobius.dis":{source:"iana",extensions:["dis"]},"application/vnd.mobius.mbk":{source:"iana",extensions:["mbk"]},"application/vnd.mobius.mqy":{source:"iana",extensions:["mqy"]},"application/vnd.mobius.msl":{source:"iana",extensions:["msl"]},"application/vnd.mobius.plc":{source:"iana",extensions:["plc"]},"application/vnd.mobius.txf":{source:"iana",extensions:["txf"]},"application/vnd.mophun.application":{source:"iana",extensions:["mpn"]},"application/vnd.mophun.certificate":{source:"iana",extensions:["mpc"]},"application/vnd.motorola.flexsuite":{source:"iana"},"application/vnd.motorola.flexsuite.adsi":{source:"iana"},"application/vnd.motorola.flexsuite.fis":{source:"iana"},"application/vnd.motorola.flexsuite.gotap":{source:"iana"},"application/vnd.motorola.flexsuite.kmr":{source:"iana"},"application/vnd.motorola.flexsuite.ttc":{source:"iana"},"application/vnd.motorola.flexsuite.wem":{source:"iana"},"application/vnd.motorola.iprm":{source:"iana"},"application/vnd.mozilla.xul+xml":{source:"iana",compressible:!0,extensions:["xul"]},"application/vnd.ms-3mfdocument":{source:"iana"},"application/vnd.ms-artgalry":{source:"iana",extensions:["cil"]},"application/vnd.ms-asf":{source:"iana"},"application/vnd.ms-cab-compressed":{source:"iana",extensions:["cab"]},"application/vnd.ms-color.iccprofile":{source:"apache"},"application/vnd.ms-excel":{source:"iana",compressible:!1,extensions:["xls","xlm","xla","xlc","xlt","xlw"]},"application/vnd.ms-excel.addin.macroenabled.12":{source:"iana",extensions:["xlam"]},"application/vnd.ms-excel.sheet.binary.macroenabled.12":{source:"iana",extensions:["xlsb"]},"application/vnd.ms-excel.sheet.macroenabled.12":{source:"iana",extensions:["xlsm"]},"application/vnd.ms-excel.template.macroenabled.12":{source:"iana",extensions:["xltm"]},"application/vnd.ms-fontobject":{source:"iana",compressible:!0,extensions:["eot"]},"application/vnd.ms-htmlhelp":{source:"iana",extensions:["chm"]},"application/vnd.ms-ims":{source:"iana",extensions:["ims"]},"application/vnd.ms-lrm":{source:"iana",extensions:["lrm"]},"application/vnd.ms-office.activex+xml":{source:"iana",compressible:!0},"application/vnd.ms-officetheme":{source:"iana",extensions:["thmx"]},"application/vnd.ms-opentype":{source:"apache",compressible:!0},"application/vnd.ms-outlook":{compressible:!1,extensions:["msg"]},"application/vnd.ms-package.obfuscated-opentype":{source:"apache"},"application/vnd.ms-pki.seccat":{source:"apache",extensions:["cat"]},"application/vnd.ms-pki.stl":{source:"apache",extensions:["stl"]},"application/vnd.ms-playready.initiator+xml":{source:"iana",compressible:!0},"application/vnd.ms-powerpoint":{source:"iana",compressible:!1,extensions:["ppt","pps","pot"]},"application/vnd.ms-powerpoint.addin.macroenabled.12":{source:"iana",extensions:["ppam"]},"application/vnd.ms-powerpoint.presentation.macroenabled.12":{source:"iana",extensions:["pptm"]},"application/vnd.ms-powerpoint.slide.macroenabled.12":{source:"iana",extensions:["sldm"]},"application/vnd.ms-powerpoint.slideshow.macroenabled.12":{source:"iana",extensions:["ppsm"]},"application/vnd.ms-powerpoint.template.macroenabled.12":{source:"iana",extensions:["potm"]},"application/vnd.ms-printdevicecapabilities+xml":{source:"iana",compressible:!0},"application/vnd.ms-printing.printticket+xml":{source:"apache",compressible:!0},"application/vnd.ms-printschematicket+xml":{source:"iana",compressible:!0},"application/vnd.ms-project":{source:"iana",extensions:["mpp","mpt"]},"application/vnd.ms-tnef":{source:"iana"},"application/vnd.ms-windows.devicepairing":{source:"iana"},"application/vnd.ms-windows.nwprinting.oob":{source:"iana"},"application/vnd.ms-windows.printerpairing":{source:"iana"},"application/vnd.ms-windows.wsd.oob":{source:"iana"},"application/vnd.ms-wmdrm.lic-chlg-req":{source:"iana"},"application/vnd.ms-wmdrm.lic-resp":{source:"iana"},"application/vnd.ms-wmdrm.meter-chlg-req":{source:"iana"},"application/vnd.ms-wmdrm.meter-resp":{source:"iana"},"application/vnd.ms-word.document.macroenabled.12":{source:"iana",extensions:["docm"]},"application/vnd.ms-word.template.macroenabled.12":{source:"iana",extensions:["dotm"]},"application/vnd.ms-works":{source:"iana",extensions:["wps","wks","wcm","wdb"]},"application/vnd.ms-wpl":{source:"iana",extensions:["wpl"]},"application/vnd.ms-xpsdocument":{source:"iana",compressible:!1,extensions:["xps"]},"application/vnd.msa-disk-image":{source:"iana"},"application/vnd.mseq":{source:"iana",extensions:["mseq"]},"application/vnd.msign":{source:"iana"},"application/vnd.multiad.creator":{source:"iana"},"application/vnd.multiad.creator.cif":{source:"iana"},"application/vnd.music-niff":{source:"iana"},"application/vnd.musician":{source:"iana",extensions:["mus"]},"application/vnd.muvee.style":{source:"iana",extensions:["msty"]},"application/vnd.mynfc":{source:"iana",extensions:["taglet"]},"application/vnd.nacamar.ybrid+json":{source:"iana",compressible:!0},"application/vnd.ncd.control":{source:"iana"},"application/vnd.ncd.reference":{source:"iana"},"application/vnd.nearst.inv+json":{source:"iana",compressible:!0},"application/vnd.nebumind.line":{source:"iana"},"application/vnd.nervana":{source:"iana"},"application/vnd.netfpx":{source:"iana"},"application/vnd.neurolanguage.nlu":{source:"iana",extensions:["nlu"]},"application/vnd.nimn":{source:"iana"},"application/vnd.nintendo.nitro.rom":{source:"iana"},"application/vnd.nintendo.snes.rom":{source:"iana"},"application/vnd.nitf":{source:"iana",extensions:["ntf","nitf"]},"application/vnd.noblenet-directory":{source:"iana",extensions:["nnd"]},"application/vnd.noblenet-sealer":{source:"iana",extensions:["nns"]},"application/vnd.noblenet-web":{source:"iana",extensions:["nnw"]},"application/vnd.nokia.catalogs":{source:"iana"},"application/vnd.nokia.conml+wbxml":{source:"iana"},"application/vnd.nokia.conml+xml":{source:"iana",compressible:!0},"application/vnd.nokia.iptv.config+xml":{source:"iana",compressible:!0},"application/vnd.nokia.isds-radio-presets":{source:"iana"},"application/vnd.nokia.landmark+wbxml":{source:"iana"},"application/vnd.nokia.landmark+xml":{source:"iana",compressible:!0},"application/vnd.nokia.landmarkcollection+xml":{source:"iana",compressible:!0},"application/vnd.nokia.n-gage.ac+xml":{source:"iana",compressible:!0,extensions:["ac"]},"application/vnd.nokia.n-gage.data":{source:"iana",extensions:["ngdat"]},"application/vnd.nokia.n-gage.symbian.install":{source:"iana",extensions:["n-gage"]},"application/vnd.nokia.ncd":{source:"iana"},"application/vnd.nokia.pcd+wbxml":{source:"iana"},"application/vnd.nokia.pcd+xml":{source:"iana",compressible:!0},"application/vnd.nokia.radio-preset":{source:"iana",extensions:["rpst"]},"application/vnd.nokia.radio-presets":{source:"iana",extensions:["rpss"]},"application/vnd.novadigm.edm":{source:"iana",extensions:["edm"]},"application/vnd.novadigm.edx":{source:"iana",extensions:["edx"]},"application/vnd.novadigm.ext":{source:"iana",extensions:["ext"]},"application/vnd.ntt-local.content-share":{source:"iana"},"application/vnd.ntt-local.file-transfer":{source:"iana"},"application/vnd.ntt-local.ogw_remote-access":{source:"iana"},"application/vnd.ntt-local.sip-ta_remote":{source:"iana"},"application/vnd.ntt-local.sip-ta_tcp_stream":{source:"iana"},"application/vnd.oasis.opendocument.chart":{source:"iana",extensions:["odc"]},"application/vnd.oasis.opendocument.chart-template":{source:"iana",extensions:["otc"]},"application/vnd.oasis.opendocument.database":{source:"iana",extensions:["odb"]},"application/vnd.oasis.opendocument.formula":{source:"iana",extensions:["odf"]},"application/vnd.oasis.opendocument.formula-template":{source:"iana",extensions:["odft"]},"application/vnd.oasis.opendocument.graphics":{source:"iana",compressible:!1,extensions:["odg"]},"application/vnd.oasis.opendocument.graphics-template":{source:"iana",extensions:["otg"]},"application/vnd.oasis.opendocument.image":{source:"iana",extensions:["odi"]},"application/vnd.oasis.opendocument.image-template":{source:"iana",extensions:["oti"]},"application/vnd.oasis.opendocument.presentation":{source:"iana",compressible:!1,extensions:["odp"]},"application/vnd.oasis.opendocument.presentation-template":{source:"iana",extensions:["otp"]},"application/vnd.oasis.opendocument.spreadsheet":{source:"iana",compressible:!1,extensions:["ods"]},"application/vnd.oasis.opendocument.spreadsheet-template":{source:"iana",extensions:["ots"]},"application/vnd.oasis.opendocument.text":{source:"iana",compressible:!1,extensions:["odt"]},"application/vnd.oasis.opendocument.text-master":{source:"iana",extensions:["odm"]},"application/vnd.oasis.opendocument.text-template":{source:"iana",extensions:["ott"]},"application/vnd.oasis.opendocument.text-web":{source:"iana",extensions:["oth"]},"application/vnd.obn":{source:"iana"},"application/vnd.ocf+cbor":{source:"iana"},"application/vnd.oci.image.manifest.v1+json":{source:"iana",compressible:!0},"application/vnd.oftn.l10n+json":{source:"iana",compressible:!0},"application/vnd.oipf.contentaccessdownload+xml":{source:"iana",compressible:!0},"application/vnd.oipf.contentaccessstreaming+xml":{source:"iana",compressible:!0},"application/vnd.oipf.cspg-hexbinary":{source:"iana"},"application/vnd.oipf.dae.svg+xml":{source:"iana",compressible:!0},"application/vnd.oipf.dae.xhtml+xml":{source:"iana",compressible:!0},"application/vnd.oipf.mippvcontrolmessage+xml":{source:"iana",compressible:!0},"application/vnd.oipf.pae.gem":{source:"iana"},"application/vnd.oipf.spdiscovery+xml":{source:"iana",compressible:!0},"application/vnd.oipf.spdlist+xml":{source:"iana",compressible:!0},"application/vnd.oipf.ueprofile+xml":{source:"iana",compressible:!0},"application/vnd.oipf.userprofile+xml":{source:"iana",compressible:!0},"application/vnd.olpc-sugar":{source:"iana",extensions:["xo"]},"application/vnd.oma-scws-config":{source:"iana"},"application/vnd.oma-scws-http-request":{source:"iana"},"application/vnd.oma-scws-http-response":{source:"iana"},"application/vnd.oma.bcast.associated-procedure-parameter+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.drm-trigger+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.imd+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.ltkm":{source:"iana"},"application/vnd.oma.bcast.notification+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.provisioningtrigger":{source:"iana"},"application/vnd.oma.bcast.sgboot":{source:"iana"},"application/vnd.oma.bcast.sgdd+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.sgdu":{source:"iana"},"application/vnd.oma.bcast.simple-symbol-container":{source:"iana"},"application/vnd.oma.bcast.smartcard-trigger+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.sprov+xml":{source:"iana",compressible:!0},"application/vnd.oma.bcast.stkm":{source:"iana"},"application/vnd.oma.cab-address-book+xml":{source:"iana",compressible:!0},"application/vnd.oma.cab-feature-handler+xml":{source:"iana",compressible:!0},"application/vnd.oma.cab-pcc+xml":{source:"iana",compressible:!0},"application/vnd.oma.cab-subs-invite+xml":{source:"iana",compressible:!0},"application/vnd.oma.cab-user-prefs+xml":{source:"iana",compressible:!0},"application/vnd.oma.dcd":{source:"iana"},"application/vnd.oma.dcdc":{source:"iana"},"application/vnd.oma.dd2+xml":{source:"iana",compressible:!0,extensions:["dd2"]},"application/vnd.oma.drm.risd+xml":{source:"iana",compressible:!0},"application/vnd.oma.group-usage-list+xml":{source:"iana",compressible:!0},"application/vnd.oma.lwm2m+cbor":{source:"iana"},"application/vnd.oma.lwm2m+json":{source:"iana",compressible:!0},"application/vnd.oma.lwm2m+tlv":{source:"iana"},"application/vnd.oma.pal+xml":{source:"iana",compressible:!0},"application/vnd.oma.poc.detailed-progress-report+xml":{source:"iana",compressible:!0},"application/vnd.oma.poc.final-report+xml":{source:"iana",compressible:!0},"application/vnd.oma.poc.groups+xml":{source:"iana",compressible:!0},"application/vnd.oma.poc.invocation-descriptor+xml":{source:"iana",compressible:!0},"application/vnd.oma.poc.optimized-progress-report+xml":{source:"iana",compressible:!0},"application/vnd.oma.push":{source:"iana"},"application/vnd.oma.scidm.messages+xml":{source:"iana",compressible:!0},"application/vnd.oma.xcap-directory+xml":{source:"iana",compressible:!0},"application/vnd.omads-email+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/vnd.omads-file+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/vnd.omads-folder+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/vnd.omaloc-supl-init":{source:"iana"},"application/vnd.onepager":{source:"iana"},"application/vnd.onepagertamp":{source:"iana"},"application/vnd.onepagertamx":{source:"iana"},"application/vnd.onepagertat":{source:"iana"},"application/vnd.onepagertatp":{source:"iana"},"application/vnd.onepagertatx":{source:"iana"},"application/vnd.openblox.game+xml":{source:"iana",compressible:!0,extensions:["obgx"]},"application/vnd.openblox.game-binary":{source:"iana"},"application/vnd.openeye.oeb":{source:"iana"},"application/vnd.openofficeorg.extension":{source:"apache",extensions:["oxt"]},"application/vnd.openstreetmap.data+xml":{source:"iana",compressible:!0,extensions:["osm"]},"application/vnd.opentimestamps.ots":{source:"iana"},"application/vnd.openxmlformats-officedocument.custom-properties+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.customxmlproperties+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawing+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawingml.chart+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.extended-properties+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.comments+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.presentation":{source:"iana",compressible:!1,extensions:["pptx"]},"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.slide":{source:"iana",extensions:["sldx"]},"application/vnd.openxmlformats-officedocument.presentationml.slide+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.slideshow":{source:"iana",extensions:["ppsx"]},"application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.tags+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.template":{source:"iana",extensions:["potx"]},"application/vnd.openxmlformats-officedocument.presentationml.template.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":{source:"iana",compressible:!1,extensions:["xlsx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.template":{source:"iana",extensions:["xltx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.theme+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.themeoverride+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.vmldrawing":{source:"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.document":{source:"iana",compressible:!1,extensions:["docx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.template":{source:"iana",extensions:["dotx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-package.core-properties+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml":{source:"iana",compressible:!0},"application/vnd.openxmlformats-package.relationships+xml":{source:"iana",compressible:!0},"application/vnd.oracle.resource+json":{source:"iana",compressible:!0},"application/vnd.orange.indata":{source:"iana"},"application/vnd.osa.netdeploy":{source:"iana"},"application/vnd.osgeo.mapguide.package":{source:"iana",extensions:["mgp"]},"application/vnd.osgi.bundle":{source:"iana"},"application/vnd.osgi.dp":{source:"iana",extensions:["dp"]},"application/vnd.osgi.subsystem":{source:"iana",extensions:["esa"]},"application/vnd.otps.ct-kip+xml":{source:"iana",compressible:!0},"application/vnd.oxli.countgraph":{source:"iana"},"application/vnd.pagerduty+json":{source:"iana",compressible:!0},"application/vnd.palm":{source:"iana",extensions:["pdb","pqa","oprc"]},"application/vnd.panoply":{source:"iana"},"application/vnd.paos.xml":{source:"iana"},"application/vnd.patentdive":{source:"iana"},"application/vnd.patientecommsdoc":{source:"iana"},"application/vnd.pawaafile":{source:"iana",extensions:["paw"]},"application/vnd.pcos":{source:"iana"},"application/vnd.pg.format":{source:"iana",extensions:["str"]},"application/vnd.pg.osasli":{source:"iana",extensions:["ei6"]},"application/vnd.piaccess.application-licence":{source:"iana"},"application/vnd.picsel":{source:"iana",extensions:["efif"]},"application/vnd.pmi.widget":{source:"iana",extensions:["wg"]},"application/vnd.poc.group-advertisement+xml":{source:"iana",compressible:!0},"application/vnd.pocketlearn":{source:"iana",extensions:["plf"]},"application/vnd.powerbuilder6":{source:"iana",extensions:["pbd"]},"application/vnd.powerbuilder6-s":{source:"iana"},"application/vnd.powerbuilder7":{source:"iana"},"application/vnd.powerbuilder7-s":{source:"iana"},"application/vnd.powerbuilder75":{source:"iana"},"application/vnd.powerbuilder75-s":{source:"iana"},"application/vnd.preminet":{source:"iana"},"application/vnd.previewsystems.box":{source:"iana",extensions:["box"]},"application/vnd.proteus.magazine":{source:"iana",extensions:["mgz"]},"application/vnd.psfs":{source:"iana"},"application/vnd.publishare-delta-tree":{source:"iana",extensions:["qps"]},"application/vnd.pvi.ptid1":{source:"iana",extensions:["ptid"]},"application/vnd.pwg-multiplexed":{source:"iana"},"application/vnd.pwg-xhtml-print+xml":{source:"iana",compressible:!0},"application/vnd.qualcomm.brew-app-res":{source:"iana"},"application/vnd.quarantainenet":{source:"iana"},"application/vnd.quark.quarkxpress":{source:"iana",extensions:["qxd","qxt","qwd","qwt","qxl","qxb"]},"application/vnd.quobject-quoxdocument":{source:"iana"},"application/vnd.radisys.moml+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-audit+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-audit-conf+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-audit-conn+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-audit-dialog+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-audit-stream+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-conf+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog-base+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog-fax-detect+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog-fax-sendrecv+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog-group+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog-speech+xml":{source:"iana",compressible:!0},"application/vnd.radisys.msml-dialog-transform+xml":{source:"iana",compressible:!0},"application/vnd.rainstor.data":{source:"iana"},"application/vnd.rapid":{source:"iana"},"application/vnd.rar":{source:"iana",extensions:["rar"]},"application/vnd.realvnc.bed":{source:"iana",extensions:["bed"]},"application/vnd.recordare.musicxml":{source:"iana",extensions:["mxl"]},"application/vnd.recordare.musicxml+xml":{source:"iana",compressible:!0,extensions:["musicxml"]},"application/vnd.renlearn.rlprint":{source:"iana"},"application/vnd.resilient.logic":{source:"iana"},"application/vnd.restful+json":{source:"iana",compressible:!0},"application/vnd.rig.cryptonote":{source:"iana",extensions:["cryptonote"]},"application/vnd.rim.cod":{source:"apache",extensions:["cod"]},"application/vnd.rn-realmedia":{source:"apache",extensions:["rm"]},"application/vnd.rn-realmedia-vbr":{source:"apache",extensions:["rmvb"]},"application/vnd.route66.link66+xml":{source:"iana",compressible:!0,extensions:["link66"]},"application/vnd.rs-274x":{source:"iana"},"application/vnd.ruckus.download":{source:"iana"},"application/vnd.s3sms":{source:"iana"},"application/vnd.sailingtracker.track":{source:"iana",extensions:["st"]},"application/vnd.sar":{source:"iana"},"application/vnd.sbm.cid":{source:"iana"},"application/vnd.sbm.mid2":{source:"iana"},"application/vnd.scribus":{source:"iana"},"application/vnd.sealed.3df":{source:"iana"},"application/vnd.sealed.csf":{source:"iana"},"application/vnd.sealed.doc":{source:"iana"},"application/vnd.sealed.eml":{source:"iana"},"application/vnd.sealed.mht":{source:"iana"},"application/vnd.sealed.net":{source:"iana"},"application/vnd.sealed.ppt":{source:"iana"},"application/vnd.sealed.tiff":{source:"iana"},"application/vnd.sealed.xls":{source:"iana"},"application/vnd.sealedmedia.softseal.html":{source:"iana"},"application/vnd.sealedmedia.softseal.pdf":{source:"iana"},"application/vnd.seemail":{source:"iana",extensions:["see"]},"application/vnd.seis+json":{source:"iana",compressible:!0},"application/vnd.sema":{source:"iana",extensions:["sema"]},"application/vnd.semd":{source:"iana",extensions:["semd"]},"application/vnd.semf":{source:"iana",extensions:["semf"]},"application/vnd.shade-save-file":{source:"iana"},"application/vnd.shana.informed.formdata":{source:"iana",extensions:["ifm"]},"application/vnd.shana.informed.formtemplate":{source:"iana",extensions:["itp"]},"application/vnd.shana.informed.interchange":{source:"iana",extensions:["iif"]},"application/vnd.shana.informed.package":{source:"iana",extensions:["ipk"]},"application/vnd.shootproof+json":{source:"iana",compressible:!0},"application/vnd.shopkick+json":{source:"iana",compressible:!0},"application/vnd.shp":{source:"iana"},"application/vnd.shx":{source:"iana"},"application/vnd.sigrok.session":{source:"iana"},"application/vnd.simtech-mindmapper":{source:"iana",extensions:["twd","twds"]},"application/vnd.siren+json":{source:"iana",compressible:!0},"application/vnd.smaf":{source:"iana",extensions:["mmf"]},"application/vnd.smart.notebook":{source:"iana"},"application/vnd.smart.teacher":{source:"iana",extensions:["teacher"]},"application/vnd.snesdev-page-table":{source:"iana"},"application/vnd.software602.filler.form+xml":{source:"iana",compressible:!0,extensions:["fo"]},"application/vnd.software602.filler.form-xml-zip":{source:"iana"},"application/vnd.solent.sdkm+xml":{source:"iana",compressible:!0,extensions:["sdkm","sdkd"]},"application/vnd.spotfire.dxp":{source:"iana",extensions:["dxp"]},"application/vnd.spotfire.sfs":{source:"iana",extensions:["sfs"]},"application/vnd.sqlite3":{source:"iana"},"application/vnd.sss-cod":{source:"iana"},"application/vnd.sss-dtf":{source:"iana"},"application/vnd.sss-ntf":{source:"iana"},"application/vnd.stardivision.calc":{source:"apache",extensions:["sdc"]},"application/vnd.stardivision.draw":{source:"apache",extensions:["sda"]},"application/vnd.stardivision.impress":{source:"apache",extensions:["sdd"]},"application/vnd.stardivision.math":{source:"apache",extensions:["smf"]},"application/vnd.stardivision.writer":{source:"apache",extensions:["sdw","vor"]},"application/vnd.stardivision.writer-global":{source:"apache",extensions:["sgl"]},"application/vnd.stepmania.package":{source:"iana",extensions:["smzip"]},"application/vnd.stepmania.stepchart":{source:"iana",extensions:["sm"]},"application/vnd.street-stream":{source:"iana"},"application/vnd.sun.wadl+xml":{source:"iana",compressible:!0,extensions:["wadl"]},"application/vnd.sun.xml.calc":{source:"apache",extensions:["sxc"]},"application/vnd.sun.xml.calc.template":{source:"apache",extensions:["stc"]},"application/vnd.sun.xml.draw":{source:"apache",extensions:["sxd"]},"application/vnd.sun.xml.draw.template":{source:"apache",extensions:["std"]},"application/vnd.sun.xml.impress":{source:"apache",extensions:["sxi"]},"application/vnd.sun.xml.impress.template":{source:"apache",extensions:["sti"]},"application/vnd.sun.xml.math":{source:"apache",extensions:["sxm"]},"application/vnd.sun.xml.writer":{source:"apache",extensions:["sxw"]},"application/vnd.sun.xml.writer.global":{source:"apache",extensions:["sxg"]},"application/vnd.sun.xml.writer.template":{source:"apache",extensions:["stw"]},"application/vnd.sus-calendar":{source:"iana",extensions:["sus","susp"]},"application/vnd.svd":{source:"iana",extensions:["svd"]},"application/vnd.swiftview-ics":{source:"iana"},"application/vnd.sycle+xml":{source:"iana",compressible:!0},"application/vnd.syft+json":{source:"iana",compressible:!0},"application/vnd.symbian.install":{source:"apache",extensions:["sis","sisx"]},"application/vnd.syncml+xml":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["xsm"]},"application/vnd.syncml.dm+wbxml":{source:"iana",charset:"UTF-8",extensions:["bdm"]},"application/vnd.syncml.dm+xml":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["xdm"]},"application/vnd.syncml.dm.notification":{source:"iana"},"application/vnd.syncml.dmddf+wbxml":{source:"iana"},"application/vnd.syncml.dmddf+xml":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["ddf"]},"application/vnd.syncml.dmtnds+wbxml":{source:"iana"},"application/vnd.syncml.dmtnds+xml":{source:"iana",charset:"UTF-8",compressible:!0},"application/vnd.syncml.ds.notification":{source:"iana"},"application/vnd.tableschema+json":{source:"iana",compressible:!0},"application/vnd.tao.intent-module-archive":{source:"iana",extensions:["tao"]},"application/vnd.tcpdump.pcap":{source:"iana",extensions:["pcap","cap","dmp"]},"application/vnd.think-cell.ppttc+json":{source:"iana",compressible:!0},"application/vnd.tmd.mediaflex.api+xml":{source:"iana",compressible:!0},"application/vnd.tml":{source:"iana"},"application/vnd.tmobile-livetv":{source:"iana",extensions:["tmo"]},"application/vnd.tri.onesource":{source:"iana"},"application/vnd.trid.tpt":{source:"iana",extensions:["tpt"]},"application/vnd.triscape.mxs":{source:"iana",extensions:["mxs"]},"application/vnd.trueapp":{source:"iana",extensions:["tra"]},"application/vnd.truedoc":{source:"iana"},"application/vnd.ubisoft.webplayer":{source:"iana"},"application/vnd.ufdl":{source:"iana",extensions:["ufd","ufdl"]},"application/vnd.uiq.theme":{source:"iana",extensions:["utz"]},"application/vnd.umajin":{source:"iana",extensions:["umj"]},"application/vnd.unity":{source:"iana",extensions:["unityweb"]},"application/vnd.uoml+xml":{source:"iana",compressible:!0,extensions:["uoml"]},"application/vnd.uplanet.alert":{source:"iana"},"application/vnd.uplanet.alert-wbxml":{source:"iana"},"application/vnd.uplanet.bearer-choice":{source:"iana"},"application/vnd.uplanet.bearer-choice-wbxml":{source:"iana"},"application/vnd.uplanet.cacheop":{source:"iana"},"application/vnd.uplanet.cacheop-wbxml":{source:"iana"},"application/vnd.uplanet.channel":{source:"iana"},"application/vnd.uplanet.channel-wbxml":{source:"iana"},"application/vnd.uplanet.list":{source:"iana"},"application/vnd.uplanet.list-wbxml":{source:"iana"},"application/vnd.uplanet.listcmd":{source:"iana"},"application/vnd.uplanet.listcmd-wbxml":{source:"iana"},"application/vnd.uplanet.signal":{source:"iana"},"application/vnd.uri-map":{source:"iana"},"application/vnd.valve.source.material":{source:"iana"},"application/vnd.vcx":{source:"iana",extensions:["vcx"]},"application/vnd.vd-study":{source:"iana"},"application/vnd.vectorworks":{source:"iana"},"application/vnd.vel+json":{source:"iana",compressible:!0},"application/vnd.verimatrix.vcas":{source:"iana"},"application/vnd.veritone.aion+json":{source:"iana",compressible:!0},"application/vnd.veryant.thin":{source:"iana"},"application/vnd.ves.encrypted":{source:"iana"},"application/vnd.vidsoft.vidconference":{source:"iana"},"application/vnd.visio":{source:"iana",extensions:["vsd","vst","vss","vsw"]},"application/vnd.visionary":{source:"iana",extensions:["vis"]},"application/vnd.vividence.scriptfile":{source:"iana"},"application/vnd.vsf":{source:"iana",extensions:["vsf"]},"application/vnd.wap.sic":{source:"iana"},"application/vnd.wap.slc":{source:"iana"},"application/vnd.wap.wbxml":{source:"iana",charset:"UTF-8",extensions:["wbxml"]},"application/vnd.wap.wmlc":{source:"iana",extensions:["wmlc"]},"application/vnd.wap.wmlscriptc":{source:"iana",extensions:["wmlsc"]},"application/vnd.webturbo":{source:"iana",extensions:["wtb"]},"application/vnd.wfa.dpp":{source:"iana"},"application/vnd.wfa.p2p":{source:"iana"},"application/vnd.wfa.wsc":{source:"iana"},"application/vnd.windows.devicepairing":{source:"iana"},"application/vnd.wmc":{source:"iana"},"application/vnd.wmf.bootstrap":{source:"iana"},"application/vnd.wolfram.mathematica":{source:"iana"},"application/vnd.wolfram.mathematica.package":{source:"iana"},"application/vnd.wolfram.player":{source:"iana",extensions:["nbp"]},"application/vnd.wordperfect":{source:"iana",extensions:["wpd"]},"application/vnd.wqd":{source:"iana",extensions:["wqd"]},"application/vnd.wrq-hp3000-labelled":{source:"iana"},"application/vnd.wt.stf":{source:"iana",extensions:["stf"]},"application/vnd.wv.csp+wbxml":{source:"iana"},"application/vnd.wv.csp+xml":{source:"iana",compressible:!0},"application/vnd.wv.ssp+xml":{source:"iana",compressible:!0},"application/vnd.xacml+json":{source:"iana",compressible:!0},"application/vnd.xara":{source:"iana",extensions:["xar"]},"application/vnd.xfdl":{source:"iana",extensions:["xfdl"]},"application/vnd.xfdl.webform":{source:"iana"},"application/vnd.xmi+xml":{source:"iana",compressible:!0},"application/vnd.xmpie.cpkg":{source:"iana"},"application/vnd.xmpie.dpkg":{source:"iana"},"application/vnd.xmpie.plan":{source:"iana"},"application/vnd.xmpie.ppkg":{source:"iana"},"application/vnd.xmpie.xlim":{source:"iana"},"application/vnd.yamaha.hv-dic":{source:"iana",extensions:["hvd"]},"application/vnd.yamaha.hv-script":{source:"iana",extensions:["hvs"]},"application/vnd.yamaha.hv-voice":{source:"iana",extensions:["hvp"]},"application/vnd.yamaha.openscoreformat":{source:"iana",extensions:["osf"]},"application/vnd.yamaha.openscoreformat.osfpvg+xml":{source:"iana",compressible:!0,extensions:["osfpvg"]},"application/vnd.yamaha.remote-setup":{source:"iana"},"application/vnd.yamaha.smaf-audio":{source:"iana",extensions:["saf"]},"application/vnd.yamaha.smaf-phrase":{source:"iana",extensions:["spf"]},"application/vnd.yamaha.through-ngn":{source:"iana"},"application/vnd.yamaha.tunnel-udpencap":{source:"iana"},"application/vnd.yaoweme":{source:"iana"},"application/vnd.yellowriver-custom-menu":{source:"iana",extensions:["cmp"]},"application/vnd.youtube.yt":{source:"iana"},"application/vnd.zul":{source:"iana",extensions:["zir","zirz"]},"application/vnd.zzazz.deck+xml":{source:"iana",compressible:!0,extensions:["zaz"]},"application/voicexml+xml":{source:"iana",compressible:!0,extensions:["vxml"]},"application/voucher-cms+json":{source:"iana",compressible:!0},"application/vq-rtcpxr":{source:"iana"},"application/wasm":{source:"iana",compressible:!0,extensions:["wasm"]},"application/watcherinfo+xml":{source:"iana",compressible:!0,extensions:["wif"]},"application/webpush-options+json":{source:"iana",compressible:!0},"application/whoispp-query":{source:"iana"},"application/whoispp-response":{source:"iana"},"application/widget":{source:"iana",extensions:["wgt"]},"application/winhlp":{source:"apache",extensions:["hlp"]},"application/wita":{source:"iana"},"application/wordperfect5.1":{source:"iana"},"application/wsdl+xml":{source:"iana",compressible:!0,extensions:["wsdl"]},"application/wspolicy+xml":{source:"iana",compressible:!0,extensions:["wspolicy"]},"application/x-7z-compressed":{source:"apache",compressible:!1,extensions:["7z"]},"application/x-abiword":{source:"apache",extensions:["abw"]},"application/x-ace-compressed":{source:"apache",extensions:["ace"]},"application/x-amf":{source:"apache"},"application/x-apple-diskimage":{source:"apache",extensions:["dmg"]},"application/x-arj":{compressible:!1,extensions:["arj"]},"application/x-authorware-bin":{source:"apache",extensions:["aab","x32","u32","vox"]},"application/x-authorware-map":{source:"apache",extensions:["aam"]},"application/x-authorware-seg":{source:"apache",extensions:["aas"]},"application/x-bcpio":{source:"apache",extensions:["bcpio"]},"application/x-bdoc":{compressible:!1,extensions:["bdoc"]},"application/x-bittorrent":{source:"apache",extensions:["torrent"]},"application/x-blorb":{source:"apache",extensions:["blb","blorb"]},"application/x-bzip":{source:"apache",compressible:!1,extensions:["bz"]},"application/x-bzip2":{source:"apache",compressible:!1,extensions:["bz2","boz"]},"application/x-cbr":{source:"apache",extensions:["cbr","cba","cbt","cbz","cb7"]},"application/x-cdlink":{source:"apache",extensions:["vcd"]},"application/x-cfs-compressed":{source:"apache",extensions:["cfs"]},"application/x-chat":{source:"apache",extensions:["chat"]},"application/x-chess-pgn":{source:"apache",extensions:["pgn"]},"application/x-chrome-extension":{extensions:["crx"]},"application/x-cocoa":{source:"nginx",extensions:["cco"]},"application/x-compress":{source:"apache"},"application/x-conference":{source:"apache",extensions:["nsc"]},"application/x-cpio":{source:"apache",extensions:["cpio"]},"application/x-csh":{source:"apache",extensions:["csh"]},"application/x-deb":{compressible:!1},"application/x-debian-package":{source:"apache",extensions:["deb","udeb"]},"application/x-dgc-compressed":{source:"apache",extensions:["dgc"]},"application/x-director":{source:"apache",extensions:["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"]},"application/x-doom":{source:"apache",extensions:["wad"]},"application/x-dtbncx+xml":{source:"apache",compressible:!0,extensions:["ncx"]},"application/x-dtbook+xml":{source:"apache",compressible:!0,extensions:["dtb"]},"application/x-dtbresource+xml":{source:"apache",compressible:!0,extensions:["res"]},"application/x-dvi":{source:"apache",compressible:!1,extensions:["dvi"]},"application/x-envoy":{source:"apache",extensions:["evy"]},"application/x-eva":{source:"apache",extensions:["eva"]},"application/x-font-bdf":{source:"apache",extensions:["bdf"]},"application/x-font-dos":{source:"apache"},"application/x-font-framemaker":{source:"apache"},"application/x-font-ghostscript":{source:"apache",extensions:["gsf"]},"application/x-font-libgrx":{source:"apache"},"application/x-font-linux-psf":{source:"apache",extensions:["psf"]},"application/x-font-pcf":{source:"apache",extensions:["pcf"]},"application/x-font-snf":{source:"apache",extensions:["snf"]},"application/x-font-speedo":{source:"apache"},"application/x-font-sunos-news":{source:"apache"},"application/x-font-type1":{source:"apache",extensions:["pfa","pfb","pfm","afm"]},"application/x-font-vfont":{source:"apache"},"application/x-freearc":{source:"apache",extensions:["arc"]},"application/x-futuresplash":{source:"apache",extensions:["spl"]},"application/x-gca-compressed":{source:"apache",extensions:["gca"]},"application/x-glulx":{source:"apache",extensions:["ulx"]},"application/x-gnumeric":{source:"apache",extensions:["gnumeric"]},"application/x-gramps-xml":{source:"apache",extensions:["gramps"]},"application/x-gtar":{source:"apache",extensions:["gtar"]},"application/x-gzip":{source:"apache"},"application/x-hdf":{source:"apache",extensions:["hdf"]},"application/x-httpd-php":{compressible:!0,extensions:["php"]},"application/x-install-instructions":{source:"apache",extensions:["install"]},"application/x-iso9660-image":{source:"apache",extensions:["iso"]},"application/x-iwork-keynote-sffkey":{extensions:["key"]},"application/x-iwork-numbers-sffnumbers":{extensions:["numbers"]},"application/x-iwork-pages-sffpages":{extensions:["pages"]},"application/x-java-archive-diff":{source:"nginx",extensions:["jardiff"]},"application/x-java-jnlp-file":{source:"apache",compressible:!1,extensions:["jnlp"]},"application/x-javascript":{compressible:!0},"application/x-keepass2":{extensions:["kdbx"]},"application/x-latex":{source:"apache",compressible:!1,extensions:["latex"]},"application/x-lua-bytecode":{extensions:["luac"]},"application/x-lzh-compressed":{source:"apache",extensions:["lzh","lha"]},"application/x-makeself":{source:"nginx",extensions:["run"]},"application/x-mie":{source:"apache",extensions:["mie"]},"application/x-mobipocket-ebook":{source:"apache",extensions:["prc","mobi"]},"application/x-mpegurl":{compressible:!1},"application/x-ms-application":{source:"apache",extensions:["application"]},"application/x-ms-shortcut":{source:"apache",extensions:["lnk"]},"application/x-ms-wmd":{source:"apache",extensions:["wmd"]},"application/x-ms-wmz":{source:"apache",extensions:["wmz"]},"application/x-ms-xbap":{source:"apache",extensions:["xbap"]},"application/x-msaccess":{source:"apache",extensions:["mdb"]},"application/x-msbinder":{source:"apache",extensions:["obd"]},"application/x-mscardfile":{source:"apache",extensions:["crd"]},"application/x-msclip":{source:"apache",extensions:["clp"]},"application/x-msdos-program":{extensions:["exe"]},"application/x-msdownload":{source:"apache",extensions:["exe","dll","com","bat","msi"]},"application/x-msmediaview":{source:"apache",extensions:["mvb","m13","m14"]},"application/x-msmetafile":{source:"apache",extensions:["wmf","wmz","emf","emz"]},"application/x-msmoney":{source:"apache",extensions:["mny"]},"application/x-mspublisher":{source:"apache",extensions:["pub"]},"application/x-msschedule":{source:"apache",extensions:["scd"]},"application/x-msterminal":{source:"apache",extensions:["trm"]},"application/x-mswrite":{source:"apache",extensions:["wri"]},"application/x-netcdf":{source:"apache",extensions:["nc","cdf"]},"application/x-ns-proxy-autoconfig":{compressible:!0,extensions:["pac"]},"application/x-nzb":{source:"apache",extensions:["nzb"]},"application/x-perl":{source:"nginx",extensions:["pl","pm"]},"application/x-pilot":{source:"nginx",extensions:["prc","pdb"]},"application/x-pkcs12":{source:"apache",compressible:!1,extensions:["p12","pfx"]},"application/x-pkcs7-certificates":{source:"apache",extensions:["p7b","spc"]},"application/x-pkcs7-certreqresp":{source:"apache",extensions:["p7r"]},"application/x-pki-message":{source:"iana"},"application/x-rar-compressed":{source:"apache",compressible:!1,extensions:["rar"]},"application/x-redhat-package-manager":{source:"nginx",extensions:["rpm"]},"application/x-research-info-systems":{source:"apache",extensions:["ris"]},"application/x-sea":{source:"nginx",extensions:["sea"]},"application/x-sh":{source:"apache",compressible:!0,extensions:["sh"]},"application/x-shar":{source:"apache",extensions:["shar"]},"application/x-shockwave-flash":{source:"apache",compressible:!1,extensions:["swf"]},"application/x-silverlight-app":{source:"apache",extensions:["xap"]},"application/x-sql":{source:"apache",extensions:["sql"]},"application/x-stuffit":{source:"apache",compressible:!1,extensions:["sit"]},"application/x-stuffitx":{source:"apache",extensions:["sitx"]},"application/x-subrip":{source:"apache",extensions:["srt"]},"application/x-sv4cpio":{source:"apache",extensions:["sv4cpio"]},"application/x-sv4crc":{source:"apache",extensions:["sv4crc"]},"application/x-t3vm-image":{source:"apache",extensions:["t3"]},"application/x-tads":{source:"apache",extensions:["gam"]},"application/x-tar":{source:"apache",compressible:!0,extensions:["tar"]},"application/x-tcl":{source:"apache",extensions:["tcl","tk"]},"application/x-tex":{source:"apache",extensions:["tex"]},"application/x-tex-tfm":{source:"apache",extensions:["tfm"]},"application/x-texinfo":{source:"apache",extensions:["texinfo","texi"]},"application/x-tgif":{source:"apache",extensions:["obj"]},"application/x-ustar":{source:"apache",extensions:["ustar"]},"application/x-virtualbox-hdd":{compressible:!0,extensions:["hdd"]},"application/x-virtualbox-ova":{compressible:!0,extensions:["ova"]},"application/x-virtualbox-ovf":{compressible:!0,extensions:["ovf"]},"application/x-virtualbox-vbox":{compressible:!0,extensions:["vbox"]},"application/x-virtualbox-vbox-extpack":{compressible:!1,extensions:["vbox-extpack"]},"application/x-virtualbox-vdi":{compressible:!0,extensions:["vdi"]},"application/x-virtualbox-vhd":{compressible:!0,extensions:["vhd"]},"application/x-virtualbox-vmdk":{compressible:!0,extensions:["vmdk"]},"application/x-wais-source":{source:"apache",extensions:["src"]},"application/x-web-app-manifest+json":{compressible:!0,extensions:["webapp"]},"application/x-www-form-urlencoded":{source:"iana",compressible:!0},"application/x-x509-ca-cert":{source:"iana",extensions:["der","crt","pem"]},"application/x-x509-ca-ra-cert":{source:"iana"},"application/x-x509-next-ca-cert":{source:"iana"},"application/x-xfig":{source:"apache",extensions:["fig"]},"application/x-xliff+xml":{source:"apache",compressible:!0,extensions:["xlf"]},"application/x-xpinstall":{source:"apache",compressible:!1,extensions:["xpi"]},"application/x-xz":{source:"apache",extensions:["xz"]},"application/x-zmachine":{source:"apache",extensions:["z1","z2","z3","z4","z5","z6","z7","z8"]},"application/x400-bp":{source:"iana"},"application/xacml+xml":{source:"iana",compressible:!0},"application/xaml+xml":{source:"apache",compressible:!0,extensions:["xaml"]},"application/xcap-att+xml":{source:"iana",compressible:!0,extensions:["xav"]},"application/xcap-caps+xml":{source:"iana",compressible:!0,extensions:["xca"]},"application/xcap-diff+xml":{source:"iana",compressible:!0,extensions:["xdf"]},"application/xcap-el+xml":{source:"iana",compressible:!0,extensions:["xel"]},"application/xcap-error+xml":{source:"iana",compressible:!0},"application/xcap-ns+xml":{source:"iana",compressible:!0,extensions:["xns"]},"application/xcon-conference-info+xml":{source:"iana",compressible:!0},"application/xcon-conference-info-diff+xml":{source:"iana",compressible:!0},"application/xenc+xml":{source:"iana",compressible:!0,extensions:["xenc"]},"application/xhtml+xml":{source:"iana",compressible:!0,extensions:["xhtml","xht"]},"application/xhtml-voice+xml":{source:"apache",compressible:!0},"application/xliff+xml":{source:"iana",compressible:!0,extensions:["xlf"]},"application/xml":{source:"iana",compressible:!0,extensions:["xml","xsl","xsd","rng"]},"application/xml-dtd":{source:"iana",compressible:!0,extensions:["dtd"]},"application/xml-external-parsed-entity":{source:"iana"},"application/xml-patch+xml":{source:"iana",compressible:!0},"application/xmpp+xml":{source:"iana",compressible:!0},"application/xop+xml":{source:"iana",compressible:!0,extensions:["xop"]},"application/xproc+xml":{source:"apache",compressible:!0,extensions:["xpl"]},"application/xslt+xml":{source:"iana",compressible:!0,extensions:["xsl","xslt"]},"application/xspf+xml":{source:"apache",compressible:!0,extensions:["xspf"]},"application/xv+xml":{source:"iana",compressible:!0,extensions:["mxml","xhvml","xvml","xvm"]},"application/yang":{source:"iana",extensions:["yang"]},"application/yang-data+json":{source:"iana",compressible:!0},"application/yang-data+xml":{source:"iana",compressible:!0},"application/yang-patch+json":{source:"iana",compressible:!0},"application/yang-patch+xml":{source:"iana",compressible:!0},"application/yin+xml":{source:"iana",compressible:!0,extensions:["yin"]},"application/zip":{source:"iana",compressible:!1,extensions:["zip"]},"application/zlib":{source:"iana"},"application/zstd":{source:"iana"},"audio/1d-interleaved-parityfec":{source:"iana"},"audio/32kadpcm":{source:"iana"},"audio/3gpp":{source:"iana",compressible:!1,extensions:["3gpp"]},"audio/3gpp2":{source:"iana"},"audio/aac":{source:"iana"},"audio/ac3":{source:"iana"},"audio/adpcm":{source:"apache",extensions:["adp"]},"audio/amr":{source:"iana",extensions:["amr"]},"audio/amr-wb":{source:"iana"},"audio/amr-wb+":{source:"iana"},"audio/aptx":{source:"iana"},"audio/asc":{source:"iana"},"audio/atrac-advanced-lossless":{source:"iana"},"audio/atrac-x":{source:"iana"},"audio/atrac3":{source:"iana"},"audio/basic":{source:"iana",compressible:!1,extensions:["au","snd"]},"audio/bv16":{source:"iana"},"audio/bv32":{source:"iana"},"audio/clearmode":{source:"iana"},"audio/cn":{source:"iana"},"audio/dat12":{source:"iana"},"audio/dls":{source:"iana"},"audio/dsr-es201108":{source:"iana"},"audio/dsr-es202050":{source:"iana"},"audio/dsr-es202211":{source:"iana"},"audio/dsr-es202212":{source:"iana"},"audio/dv":{source:"iana"},"audio/dvi4":{source:"iana"},"audio/eac3":{source:"iana"},"audio/encaprtp":{source:"iana"},"audio/evrc":{source:"iana"},"audio/evrc-qcp":{source:"iana"},"audio/evrc0":{source:"iana"},"audio/evrc1":{source:"iana"},"audio/evrcb":{source:"iana"},"audio/evrcb0":{source:"iana"},"audio/evrcb1":{source:"iana"},"audio/evrcnw":{source:"iana"},"audio/evrcnw0":{source:"iana"},"audio/evrcnw1":{source:"iana"},"audio/evrcwb":{source:"iana"},"audio/evrcwb0":{source:"iana"},"audio/evrcwb1":{source:"iana"},"audio/evs":{source:"iana"},"audio/flexfec":{source:"iana"},"audio/fwdred":{source:"iana"},"audio/g711-0":{source:"iana"},"audio/g719":{source:"iana"},"audio/g722":{source:"iana"},"audio/g7221":{source:"iana"},"audio/g723":{source:"iana"},"audio/g726-16":{source:"iana"},"audio/g726-24":{source:"iana"},"audio/g726-32":{source:"iana"},"audio/g726-40":{source:"iana"},"audio/g728":{source:"iana"},"audio/g729":{source:"iana"},"audio/g7291":{source:"iana"},"audio/g729d":{source:"iana"},"audio/g729e":{source:"iana"},"audio/gsm":{source:"iana"},"audio/gsm-efr":{source:"iana"},"audio/gsm-hr-08":{source:"iana"},"audio/ilbc":{source:"iana"},"audio/ip-mr_v2.5":{source:"iana"},"audio/isac":{source:"apache"},"audio/l16":{source:"iana"},"audio/l20":{source:"iana"},"audio/l24":{source:"iana",compressible:!1},"audio/l8":{source:"iana"},"audio/lpc":{source:"iana"},"audio/melp":{source:"iana"},"audio/melp1200":{source:"iana"},"audio/melp2400":{source:"iana"},"audio/melp600":{source:"iana"},"audio/mhas":{source:"iana"},"audio/midi":{source:"apache",extensions:["mid","midi","kar","rmi"]},"audio/mobile-xmf":{source:"iana",extensions:["mxmf"]},"audio/mp3":{compressible:!1,extensions:["mp3"]},"audio/mp4":{source:"iana",compressible:!1,extensions:["m4a","mp4a"]},"audio/mp4a-latm":{source:"iana"},"audio/mpa":{source:"iana"},"audio/mpa-robust":{source:"iana"},"audio/mpeg":{source:"iana",compressible:!1,extensions:["mpga","mp2","mp2a","mp3","m2a","m3a"]},"audio/mpeg4-generic":{source:"iana"},"audio/musepack":{source:"apache"},"audio/ogg":{source:"iana",compressible:!1,extensions:["oga","ogg","spx","opus"]},"audio/opus":{source:"iana"},"audio/parityfec":{source:"iana"},"audio/pcma":{source:"iana"},"audio/pcma-wb":{source:"iana"},"audio/pcmu":{source:"iana"},"audio/pcmu-wb":{source:"iana"},"audio/prs.sid":{source:"iana"},"audio/qcelp":{source:"iana"},"audio/raptorfec":{source:"iana"},"audio/red":{source:"iana"},"audio/rtp-enc-aescm128":{source:"iana"},"audio/rtp-midi":{source:"iana"},"audio/rtploopback":{source:"iana"},"audio/rtx":{source:"iana"},"audio/s3m":{source:"apache",extensions:["s3m"]},"audio/scip":{source:"iana"},"audio/silk":{source:"apache",extensions:["sil"]},"audio/smv":{source:"iana"},"audio/smv-qcp":{source:"iana"},"audio/smv0":{source:"iana"},"audio/sofa":{source:"iana"},"audio/sp-midi":{source:"iana"},"audio/speex":{source:"iana"},"audio/t140c":{source:"iana"},"audio/t38":{source:"iana"},"audio/telephone-event":{source:"iana"},"audio/tetra_acelp":{source:"iana"},"audio/tetra_acelp_bb":{source:"iana"},"audio/tone":{source:"iana"},"audio/tsvcis":{source:"iana"},"audio/uemclip":{source:"iana"},"audio/ulpfec":{source:"iana"},"audio/usac":{source:"iana"},"audio/vdvi":{source:"iana"},"audio/vmr-wb":{source:"iana"},"audio/vnd.3gpp.iufp":{source:"iana"},"audio/vnd.4sb":{source:"iana"},"audio/vnd.audiokoz":{source:"iana"},"audio/vnd.celp":{source:"iana"},"audio/vnd.cisco.nse":{source:"iana"},"audio/vnd.cmles.radio-events":{source:"iana"},"audio/vnd.cns.anp1":{source:"iana"},"audio/vnd.cns.inf1":{source:"iana"},"audio/vnd.dece.audio":{source:"iana",extensions:["uva","uvva"]},"audio/vnd.digital-winds":{source:"iana",extensions:["eol"]},"audio/vnd.dlna.adts":{source:"iana"},"audio/vnd.dolby.heaac.1":{source:"iana"},"audio/vnd.dolby.heaac.2":{source:"iana"},"audio/vnd.dolby.mlp":{source:"iana"},"audio/vnd.dolby.mps":{source:"iana"},"audio/vnd.dolby.pl2":{source:"iana"},"audio/vnd.dolby.pl2x":{source:"iana"},"audio/vnd.dolby.pl2z":{source:"iana"},"audio/vnd.dolby.pulse.1":{source:"iana"},"audio/vnd.dra":{source:"iana",extensions:["dra"]},"audio/vnd.dts":{source:"iana",extensions:["dts"]},"audio/vnd.dts.hd":{source:"iana",extensions:["dtshd"]},"audio/vnd.dts.uhd":{source:"iana"},"audio/vnd.dvb.file":{source:"iana"},"audio/vnd.everad.plj":{source:"iana"},"audio/vnd.hns.audio":{source:"iana"},"audio/vnd.lucent.voice":{source:"iana",extensions:["lvp"]},"audio/vnd.ms-playready.media.pya":{source:"iana",extensions:["pya"]},"audio/vnd.nokia.mobile-xmf":{source:"iana"},"audio/vnd.nortel.vbk":{source:"iana"},"audio/vnd.nuera.ecelp4800":{source:"iana",extensions:["ecelp4800"]},"audio/vnd.nuera.ecelp7470":{source:"iana",extensions:["ecelp7470"]},"audio/vnd.nuera.ecelp9600":{source:"iana",extensions:["ecelp9600"]},"audio/vnd.octel.sbc":{source:"iana"},"audio/vnd.presonus.multitrack":{source:"iana"},"audio/vnd.qcelp":{source:"iana"},"audio/vnd.rhetorex.32kadpcm":{source:"iana"},"audio/vnd.rip":{source:"iana",extensions:["rip"]},"audio/vnd.rn-realaudio":{compressible:!1},"audio/vnd.sealedmedia.softseal.mpeg":{source:"iana"},"audio/vnd.vmx.cvsd":{source:"iana"},"audio/vnd.wave":{compressible:!1},"audio/vorbis":{source:"iana",compressible:!1},"audio/vorbis-config":{source:"iana"},"audio/wav":{compressible:!1,extensions:["wav"]},"audio/wave":{compressible:!1,extensions:["wav"]},"audio/webm":{source:"apache",compressible:!1,extensions:["weba"]},"audio/x-aac":{source:"apache",compressible:!1,extensions:["aac"]},"audio/x-aiff":{source:"apache",extensions:["aif","aiff","aifc"]},"audio/x-caf":{source:"apache",compressible:!1,extensions:["caf"]},"audio/x-flac":{source:"apache",extensions:["flac"]},"audio/x-m4a":{source:"nginx",extensions:["m4a"]},"audio/x-matroska":{source:"apache",extensions:["mka"]},"audio/x-mpegurl":{source:"apache",extensions:["m3u"]},"audio/x-ms-wax":{source:"apache",extensions:["wax"]},"audio/x-ms-wma":{source:"apache",extensions:["wma"]},"audio/x-pn-realaudio":{source:"apache",extensions:["ram","ra"]},"audio/x-pn-realaudio-plugin":{source:"apache",extensions:["rmp"]},"audio/x-realaudio":{source:"nginx",extensions:["ra"]},"audio/x-tta":{source:"apache"},"audio/x-wav":{source:"apache",extensions:["wav"]},"audio/xm":{source:"apache",extensions:["xm"]},"chemical/x-cdx":{source:"apache",extensions:["cdx"]},"chemical/x-cif":{source:"apache",extensions:["cif"]},"chemical/x-cmdf":{source:"apache",extensions:["cmdf"]},"chemical/x-cml":{source:"apache",extensions:["cml"]},"chemical/x-csml":{source:"apache",extensions:["csml"]},"chemical/x-pdb":{source:"apache"},"chemical/x-xyz":{source:"apache",extensions:["xyz"]},"font/collection":{source:"iana",extensions:["ttc"]},"font/otf":{source:"iana",compressible:!0,extensions:["otf"]},"font/sfnt":{source:"iana"},"font/ttf":{source:"iana",compressible:!0,extensions:["ttf"]},"font/woff":{source:"iana",extensions:["woff"]},"font/woff2":{source:"iana",extensions:["woff2"]},"image/aces":{source:"iana",extensions:["exr"]},"image/apng":{compressible:!1,extensions:["apng"]},"image/avci":{source:"iana",extensions:["avci"]},"image/avcs":{source:"iana",extensions:["avcs"]},"image/avif":{source:"iana",compressible:!1,extensions:["avif"]},"image/bmp":{source:"iana",compressible:!0,extensions:["bmp"]},"image/cgm":{source:"iana",extensions:["cgm"]},"image/dicom-rle":{source:"iana",extensions:["drle"]},"image/emf":{source:"iana",extensions:["emf"]},"image/fits":{source:"iana",extensions:["fits"]},"image/g3fax":{source:"iana",extensions:["g3"]},"image/gif":{source:"iana",compressible:!1,extensions:["gif"]},"image/heic":{source:"iana",extensions:["heic"]},"image/heic-sequence":{source:"iana",extensions:["heics"]},"image/heif":{source:"iana",extensions:["heif"]},"image/heif-sequence":{source:"iana",extensions:["heifs"]},"image/hej2k":{source:"iana",extensions:["hej2"]},"image/hsj2":{source:"iana",extensions:["hsj2"]},"image/ief":{source:"iana",extensions:["ief"]},"image/jls":{source:"iana",extensions:["jls"]},"image/jp2":{source:"iana",compressible:!1,extensions:["jp2","jpg2"]},"image/jpeg":{source:"iana",compressible:!1,extensions:["jpeg","jpg","jpe"]},"image/jph":{source:"iana",extensions:["jph"]},"image/jphc":{source:"iana",extensions:["jhc"]},"image/jpm":{source:"iana",compressible:!1,extensions:["jpm"]},"image/jpx":{source:"iana",compressible:!1,extensions:["jpx","jpf"]},"image/jxr":{source:"iana",extensions:["jxr"]},"image/jxra":{source:"iana",extensions:["jxra"]},"image/jxrs":{source:"iana",extensions:["jxrs"]},"image/jxs":{source:"iana",extensions:["jxs"]},"image/jxsc":{source:"iana",extensions:["jxsc"]},"image/jxsi":{source:"iana",extensions:["jxsi"]},"image/jxss":{source:"iana",extensions:["jxss"]},"image/ktx":{source:"iana",extensions:["ktx"]},"image/ktx2":{source:"iana",extensions:["ktx2"]},"image/naplps":{source:"iana"},"image/pjpeg":{compressible:!1},"image/png":{source:"iana",compressible:!1,extensions:["png"]},"image/prs.btif":{source:"iana",extensions:["btif"]},"image/prs.pti":{source:"iana",extensions:["pti"]},"image/pwg-raster":{source:"iana"},"image/sgi":{source:"apache",extensions:["sgi"]},"image/svg+xml":{source:"iana",compressible:!0,extensions:["svg","svgz"]},"image/t38":{source:"iana",extensions:["t38"]},"image/tiff":{source:"iana",compressible:!1,extensions:["tif","tiff"]},"image/tiff-fx":{source:"iana",extensions:["tfx"]},"image/vnd.adobe.photoshop":{source:"iana",compressible:!0,extensions:["psd"]},"image/vnd.airzip.accelerator.azv":{source:"iana",extensions:["azv"]},"image/vnd.cns.inf2":{source:"iana"},"image/vnd.dece.graphic":{source:"iana",extensions:["uvi","uvvi","uvg","uvvg"]},"image/vnd.djvu":{source:"iana",extensions:["djvu","djv"]},"image/vnd.dvb.subtitle":{source:"iana",extensions:["sub"]},"image/vnd.dwg":{source:"iana",extensions:["dwg"]},"image/vnd.dxf":{source:"iana",extensions:["dxf"]},"image/vnd.fastbidsheet":{source:"iana",extensions:["fbs"]},"image/vnd.fpx":{source:"iana",extensions:["fpx"]},"image/vnd.fst":{source:"iana",extensions:["fst"]},"image/vnd.fujixerox.edmics-mmr":{source:"iana",extensions:["mmr"]},"image/vnd.fujixerox.edmics-rlc":{source:"iana",extensions:["rlc"]},"image/vnd.globalgraphics.pgb":{source:"iana"},"image/vnd.microsoft.icon":{source:"iana",compressible:!0,extensions:["ico"]},"image/vnd.mix":{source:"iana"},"image/vnd.mozilla.apng":{source:"iana"},"image/vnd.ms-dds":{compressible:!0,extensions:["dds"]},"image/vnd.ms-modi":{source:"iana",extensions:["mdi"]},"image/vnd.ms-photo":{source:"apache",extensions:["wdp"]},"image/vnd.net-fpx":{source:"iana",extensions:["npx"]},"image/vnd.pco.b16":{source:"iana",extensions:["b16"]},"image/vnd.radiance":{source:"iana"},"image/vnd.sealed.png":{source:"iana"},"image/vnd.sealedmedia.softseal.gif":{source:"iana"},"image/vnd.sealedmedia.softseal.jpg":{source:"iana"},"image/vnd.svf":{source:"iana"},"image/vnd.tencent.tap":{source:"iana",extensions:["tap"]},"image/vnd.valve.source.texture":{source:"iana",extensions:["vtf"]},"image/vnd.wap.wbmp":{source:"iana",extensions:["wbmp"]},"image/vnd.xiff":{source:"iana",extensions:["xif"]},"image/vnd.zbrush.pcx":{source:"iana",extensions:["pcx"]},"image/webp":{source:"apache",extensions:["webp"]},"image/wmf":{source:"iana",extensions:["wmf"]},"image/x-3ds":{source:"apache",extensions:["3ds"]},"image/x-cmu-raster":{source:"apache",extensions:["ras"]},"image/x-cmx":{source:"apache",extensions:["cmx"]},"image/x-freehand":{source:"apache",extensions:["fh","fhc","fh4","fh5","fh7"]},"image/x-icon":{source:"apache",compressible:!0,extensions:["ico"]},"image/x-jng":{source:"nginx",extensions:["jng"]},"image/x-mrsid-image":{source:"apache",extensions:["sid"]},"image/x-ms-bmp":{source:"nginx",compressible:!0,extensions:["bmp"]},"image/x-pcx":{source:"apache",extensions:["pcx"]},"image/x-pict":{source:"apache",extensions:["pic","pct"]},"image/x-portable-anymap":{source:"apache",extensions:["pnm"]},"image/x-portable-bitmap":{source:"apache",extensions:["pbm"]},"image/x-portable-graymap":{source:"apache",extensions:["pgm"]},"image/x-portable-pixmap":{source:"apache",extensions:["ppm"]},"image/x-rgb":{source:"apache",extensions:["rgb"]},"image/x-tga":{source:"apache",extensions:["tga"]},"image/x-xbitmap":{source:"apache",extensions:["xbm"]},"image/x-xcf":{compressible:!1},"image/x-xpixmap":{source:"apache",extensions:["xpm"]},"image/x-xwindowdump":{source:"apache",extensions:["xwd"]},"message/cpim":{source:"iana"},"message/delivery-status":{source:"iana"},"message/disposition-notification":{source:"iana",extensions:["disposition-notification"]},"message/external-body":{source:"iana"},"message/feedback-report":{source:"iana"},"message/global":{source:"iana",extensions:["u8msg"]},"message/global-delivery-status":{source:"iana",extensions:["u8dsn"]},"message/global-disposition-notification":{source:"iana",extensions:["u8mdn"]},"message/global-headers":{source:"iana",extensions:["u8hdr"]},"message/http":{source:"iana",compressible:!1},"message/imdn+xml":{source:"iana",compressible:!0},"message/news":{source:"iana"},"message/partial":{source:"iana",compressible:!1},"message/rfc822":{source:"iana",compressible:!0,extensions:["eml","mime"]},"message/s-http":{source:"iana"},"message/sip":{source:"iana"},"message/sipfrag":{source:"iana"},"message/tracking-status":{source:"iana"},"message/vnd.si.simp":{source:"iana"},"message/vnd.wfa.wsc":{source:"iana",extensions:["wsc"]},"model/3mf":{source:"iana",extensions:["3mf"]},"model/e57":{source:"iana"},"model/gltf+json":{source:"iana",compressible:!0,extensions:["gltf"]},"model/gltf-binary":{source:"iana",compressible:!0,extensions:["glb"]},"model/iges":{source:"iana",compressible:!1,extensions:["igs","iges"]},"model/mesh":{source:"iana",compressible:!1,extensions:["msh","mesh","silo"]},"model/mtl":{source:"iana",extensions:["mtl"]},"model/obj":{source:"iana",extensions:["obj"]},"model/step":{source:"iana"},"model/step+xml":{source:"iana",compressible:!0,extensions:["stpx"]},"model/step+zip":{source:"iana",compressible:!1,extensions:["stpz"]},"model/step-xml+zip":{source:"iana",compressible:!1,extensions:["stpxz"]},"model/stl":{source:"iana",extensions:["stl"]},"model/vnd.collada+xml":{source:"iana",compressible:!0,extensions:["dae"]},"model/vnd.dwf":{source:"iana",extensions:["dwf"]},"model/vnd.flatland.3dml":{source:"iana"},"model/vnd.gdl":{source:"iana",extensions:["gdl"]},"model/vnd.gs-gdl":{source:"apache"},"model/vnd.gs.gdl":{source:"iana"},"model/vnd.gtw":{source:"iana",extensions:["gtw"]},"model/vnd.moml+xml":{source:"iana",compressible:!0},"model/vnd.mts":{source:"iana",extensions:["mts"]},"model/vnd.opengex":{source:"iana",extensions:["ogex"]},"model/vnd.parasolid.transmit.binary":{source:"iana",extensions:["x_b"]},"model/vnd.parasolid.transmit.text":{source:"iana",extensions:["x_t"]},"model/vnd.pytha.pyox":{source:"iana"},"model/vnd.rosette.annotated-data-model":{source:"iana"},"model/vnd.sap.vds":{source:"iana",extensions:["vds"]},"model/vnd.usdz+zip":{source:"iana",compressible:!1,extensions:["usdz"]},"model/vnd.valve.source.compiled-map":{source:"iana",extensions:["bsp"]},"model/vnd.vtu":{source:"iana",extensions:["vtu"]},"model/vrml":{source:"iana",compressible:!1,extensions:["wrl","vrml"]},"model/x3d+binary":{source:"apache",compressible:!1,extensions:["x3db","x3dbz"]},"model/x3d+fastinfoset":{source:"iana",extensions:["x3db"]},"model/x3d+vrml":{source:"apache",compressible:!1,extensions:["x3dv","x3dvz"]},"model/x3d+xml":{source:"iana",compressible:!0,extensions:["x3d","x3dz"]},"model/x3d-vrml":{source:"iana",extensions:["x3dv"]},"multipart/alternative":{source:"iana",compressible:!1},"multipart/appledouble":{source:"iana"},"multipart/byteranges":{source:"iana"},"multipart/digest":{source:"iana"},"multipart/encrypted":{source:"iana",compressible:!1},"multipart/form-data":{source:"iana",compressible:!1},"multipart/header-set":{source:"iana"},"multipart/mixed":{source:"iana"},"multipart/multilingual":{source:"iana"},"multipart/parallel":{source:"iana"},"multipart/related":{source:"iana",compressible:!1},"multipart/report":{source:"iana"},"multipart/signed":{source:"iana",compressible:!1},"multipart/vnd.bint.med-plus":{source:"iana"},"multipart/voice-message":{source:"iana"},"multipart/x-mixed-replace":{source:"iana"},"text/1d-interleaved-parityfec":{source:"iana"},"text/cache-manifest":{source:"iana",compressible:!0,extensions:["appcache","manifest"]},"text/calendar":{source:"iana",extensions:["ics","ifb"]},"text/calender":{compressible:!0},"text/cmd":{compressible:!0},"text/coffeescript":{extensions:["coffee","litcoffee"]},"text/cql":{source:"iana"},"text/cql-expression":{source:"iana"},"text/cql-identifier":{source:"iana"},"text/css":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["css"]},"text/csv":{source:"iana",compressible:!0,extensions:["csv"]},"text/csv-schema":{source:"iana"},"text/directory":{source:"iana"},"text/dns":{source:"iana"},"text/ecmascript":{source:"iana"},"text/encaprtp":{source:"iana"},"text/enriched":{source:"iana"},"text/fhirpath":{source:"iana"},"text/flexfec":{source:"iana"},"text/fwdred":{source:"iana"},"text/gff3":{source:"iana"},"text/grammar-ref-list":{source:"iana"},"text/html":{source:"iana",compressible:!0,extensions:["html","htm","shtml"]},"text/jade":{extensions:["jade"]},"text/javascript":{source:"iana",compressible:!0},"text/jcr-cnd":{source:"iana"},"text/jsx":{compressible:!0,extensions:["jsx"]},"text/less":{compressible:!0,extensions:["less"]},"text/markdown":{source:"iana",compressible:!0,extensions:["markdown","md"]},"text/mathml":{source:"nginx",extensions:["mml"]},"text/mdx":{compressible:!0,extensions:["mdx"]},"text/mizar":{source:"iana"},"text/n3":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["n3"]},"text/parameters":{source:"iana",charset:"UTF-8"},"text/parityfec":{source:"iana"},"text/plain":{source:"iana",compressible:!0,extensions:["txt","text","conf","def","list","log","in","ini"]},"text/provenance-notation":{source:"iana",charset:"UTF-8"},"text/prs.fallenstein.rst":{source:"iana"},"text/prs.lines.tag":{source:"iana",extensions:["dsc"]},"text/prs.prop.logic":{source:"iana"},"text/raptorfec":{source:"iana"},"text/red":{source:"iana"},"text/rfc822-headers":{source:"iana"},"text/richtext":{source:"iana",compressible:!0,extensions:["rtx"]},"text/rtf":{source:"iana",compressible:!0,extensions:["rtf"]},"text/rtp-enc-aescm128":{source:"iana"},"text/rtploopback":{source:"iana"},"text/rtx":{source:"iana"},"text/sgml":{source:"iana",extensions:["sgml","sgm"]},"text/shaclc":{source:"iana"},"text/shex":{source:"iana",extensions:["shex"]},"text/slim":{extensions:["slim","slm"]},"text/spdx":{source:"iana",extensions:["spdx"]},"text/strings":{source:"iana"},"text/stylus":{extensions:["stylus","styl"]},"text/t140":{source:"iana"},"text/tab-separated-values":{source:"iana",compressible:!0,extensions:["tsv"]},"text/troff":{source:"iana",extensions:["t","tr","roff","man","me","ms"]},"text/turtle":{source:"iana",charset:"UTF-8",extensions:["ttl"]},"text/ulpfec":{source:"iana"},"text/uri-list":{source:"iana",compressible:!0,extensions:["uri","uris","urls"]},"text/vcard":{source:"iana",compressible:!0,extensions:["vcard"]},"text/vnd.a":{source:"iana"},"text/vnd.abc":{source:"iana"},"text/vnd.ascii-art":{source:"iana"},"text/vnd.curl":{source:"iana",extensions:["curl"]},"text/vnd.curl.dcurl":{source:"apache",extensions:["dcurl"]},"text/vnd.curl.mcurl":{source:"apache",extensions:["mcurl"]},"text/vnd.curl.scurl":{source:"apache",extensions:["scurl"]},"text/vnd.debian.copyright":{source:"iana",charset:"UTF-8"},"text/vnd.dmclientscript":{source:"iana"},"text/vnd.dvb.subtitle":{source:"iana",extensions:["sub"]},"text/vnd.esmertec.theme-descriptor":{source:"iana",charset:"UTF-8"},"text/vnd.familysearch.gedcom":{source:"iana",extensions:["ged"]},"text/vnd.ficlab.flt":{source:"iana"},"text/vnd.fly":{source:"iana",extensions:["fly"]},"text/vnd.fmi.flexstor":{source:"iana",extensions:["flx"]},"text/vnd.gml":{source:"iana"},"text/vnd.graphviz":{source:"iana",extensions:["gv"]},"text/vnd.hans":{source:"iana"},"text/vnd.hgl":{source:"iana"},"text/vnd.in3d.3dml":{source:"iana",extensions:["3dml"]},"text/vnd.in3d.spot":{source:"iana",extensions:["spot"]},"text/vnd.iptc.newsml":{source:"iana"},"text/vnd.iptc.nitf":{source:"iana"},"text/vnd.latex-z":{source:"iana"},"text/vnd.motorola.reflex":{source:"iana"},"text/vnd.ms-mediapackage":{source:"iana"},"text/vnd.net2phone.commcenter.command":{source:"iana"},"text/vnd.radisys.msml-basic-layout":{source:"iana"},"text/vnd.senx.warpscript":{source:"iana"},"text/vnd.si.uricatalogue":{source:"iana"},"text/vnd.sosi":{source:"iana"},"text/vnd.sun.j2me.app-descriptor":{source:"iana",charset:"UTF-8",extensions:["jad"]},"text/vnd.trolltech.linguist":{source:"iana",charset:"UTF-8"},"text/vnd.wap.si":{source:"iana"},"text/vnd.wap.sl":{source:"iana"},"text/vnd.wap.wml":{source:"iana",extensions:["wml"]},"text/vnd.wap.wmlscript":{source:"iana",extensions:["wmls"]},"text/vtt":{source:"iana",charset:"UTF-8",compressible:!0,extensions:["vtt"]},"text/x-asm":{source:"apache",extensions:["s","asm"]},"text/x-c":{source:"apache",extensions:["c","cc","cxx","cpp","h","hh","dic"]},"text/x-component":{source:"nginx",extensions:["htc"]},"text/x-fortran":{source:"apache",extensions:["f","for","f77","f90"]},"text/x-gwt-rpc":{compressible:!0},"text/x-handlebars-template":{extensions:["hbs"]},"text/x-java-source":{source:"apache",extensions:["java"]},"text/x-jquery-tmpl":{compressible:!0},"text/x-lua":{extensions:["lua"]},"text/x-markdown":{compressible:!0,extensions:["mkd"]},"text/x-nfo":{source:"apache",extensions:["nfo"]},"text/x-opml":{source:"apache",extensions:["opml"]},"text/x-org":{compressible:!0,extensions:["org"]},"text/x-pascal":{source:"apache",extensions:["p","pas"]},"text/x-processing":{compressible:!0,extensions:["pde"]},"text/x-sass":{extensions:["sass"]},"text/x-scss":{extensions:["scss"]},"text/x-setext":{source:"apache",extensions:["etx"]},"text/x-sfv":{source:"apache",extensions:["sfv"]},"text/x-suse-ymp":{compressible:!0,extensions:["ymp"]},"text/x-uuencode":{source:"apache",extensions:["uu"]},"text/x-vcalendar":{source:"apache",extensions:["vcs"]},"text/x-vcard":{source:"apache",extensions:["vcf"]},"text/xml":{source:"iana",compressible:!0,extensions:["xml"]},"text/xml-external-parsed-entity":{source:"iana"},"text/yaml":{compressible:!0,extensions:["yaml","yml"]},"video/1d-interleaved-parityfec":{source:"iana"},"video/3gpp":{source:"iana",extensions:["3gp","3gpp"]},"video/3gpp-tt":{source:"iana"},"video/3gpp2":{source:"iana",extensions:["3g2"]},"video/av1":{source:"iana"},"video/bmpeg":{source:"iana"},"video/bt656":{source:"iana"},"video/celb":{source:"iana"},"video/dv":{source:"iana"},"video/encaprtp":{source:"iana"},"video/ffv1":{source:"iana"},"video/flexfec":{source:"iana"},"video/h261":{source:"iana",extensions:["h261"]},"video/h263":{source:"iana",extensions:["h263"]},"video/h263-1998":{source:"iana"},"video/h263-2000":{source:"iana"},"video/h264":{source:"iana",extensions:["h264"]},"video/h264-rcdo":{source:"iana"},"video/h264-svc":{source:"iana"},"video/h265":{source:"iana"},"video/iso.segment":{source:"iana",extensions:["m4s"]},"video/jpeg":{source:"iana",extensions:["jpgv"]},"video/jpeg2000":{source:"iana"},"video/jpm":{source:"apache",extensions:["jpm","jpgm"]},"video/jxsv":{source:"iana"},"video/mj2":{source:"iana",extensions:["mj2","mjp2"]},"video/mp1s":{source:"iana"},"video/mp2p":{source:"iana"},"video/mp2t":{source:"iana",extensions:["ts"]},"video/mp4":{source:"iana",compressible:!1,extensions:["mp4","mp4v","mpg4"]},"video/mp4v-es":{source:"iana"},"video/mpeg":{source:"iana",compressible:!1,extensions:["mpeg","mpg","mpe","m1v","m2v"]},"video/mpeg4-generic":{source:"iana"},"video/mpv":{source:"iana"},"video/nv":{source:"iana"},"video/ogg":{source:"iana",compressible:!1,extensions:["ogv"]},"video/parityfec":{source:"iana"},"video/pointer":{source:"iana"},"video/quicktime":{source:"iana",compressible:!1,extensions:["qt","mov"]},"video/raptorfec":{source:"iana"},"video/raw":{source:"iana"},"video/rtp-enc-aescm128":{source:"iana"},"video/rtploopback":{source:"iana"},"video/rtx":{source:"iana"},"video/scip":{source:"iana"},"video/smpte291":{source:"iana"},"video/smpte292m":{source:"iana"},"video/ulpfec":{source:"iana"},"video/vc1":{source:"iana"},"video/vc2":{source:"iana"},"video/vnd.cctv":{source:"iana"},"video/vnd.dece.hd":{source:"iana",extensions:["uvh","uvvh"]},"video/vnd.dece.mobile":{source:"iana",extensions:["uvm","uvvm"]},"video/vnd.dece.mp4":{source:"iana"},"video/vnd.dece.pd":{source:"iana",extensions:["uvp","uvvp"]},"video/vnd.dece.sd":{source:"iana",extensions:["uvs","uvvs"]},"video/vnd.dece.video":{source:"iana",extensions:["uvv","uvvv"]},"video/vnd.directv.mpeg":{source:"iana"},"video/vnd.directv.mpeg-tts":{source:"iana"},"video/vnd.dlna.mpeg-tts":{source:"iana"},"video/vnd.dvb.file":{source:"iana",extensions:["dvb"]},"video/vnd.fvt":{source:"iana",extensions:["fvt"]},"video/vnd.hns.video":{source:"iana"},"video/vnd.iptvforum.1dparityfec-1010":{source:"iana"},"video/vnd.iptvforum.1dparityfec-2005":{source:"iana"},"video/vnd.iptvforum.2dparityfec-1010":{source:"iana"},"video/vnd.iptvforum.2dparityfec-2005":{source:"iana"},"video/vnd.iptvforum.ttsavc":{source:"iana"},"video/vnd.iptvforum.ttsmpeg2":{source:"iana"},"video/vnd.motorola.video":{source:"iana"},"video/vnd.motorola.videop":{source:"iana"},"video/vnd.mpegurl":{source:"iana",extensions:["mxu","m4u"]},"video/vnd.ms-playready.media.pyv":{source:"iana",extensions:["pyv"]},"video/vnd.nokia.interleaved-multimedia":{source:"iana"},"video/vnd.nokia.mp4vr":{source:"iana"},"video/vnd.nokia.videovoip":{source:"iana"},"video/vnd.objectvideo":{source:"iana"},"video/vnd.radgamettools.bink":{source:"iana"},"video/vnd.radgamettools.smacker":{source:"iana"},"video/vnd.sealed.mpeg1":{source:"iana"},"video/vnd.sealed.mpeg4":{source:"iana"},"video/vnd.sealed.swf":{source:"iana"},"video/vnd.sealedmedia.softseal.mov":{source:"iana"},"video/vnd.uvvu.mp4":{source:"iana",extensions:["uvu","uvvu"]},"video/vnd.vivo":{source:"iana",extensions:["viv"]},"video/vnd.youtube.yt":{source:"iana"},"video/vp8":{source:"iana"},"video/vp9":{source:"iana"},"video/webm":{source:"apache",compressible:!1,extensions:["webm"]},"video/x-f4v":{source:"apache",extensions:["f4v"]},"video/x-fli":{source:"apache",extensions:["fli"]},"video/x-flv":{source:"apache",compressible:!1,extensions:["flv"]},"video/x-m4v":{source:"apache",extensions:["m4v"]},"video/x-matroska":{source:"apache",compressible:!1,extensions:["mkv","mk3d","mks"]},"video/x-mng":{source:"apache",extensions:["mng"]},"video/x-ms-asf":{source:"apache",extensions:["asf","asx"]},"video/x-ms-vob":{source:"apache",extensions:["vob"]},"video/x-ms-wm":{source:"apache",extensions:["wm"]},"video/x-ms-wmv":{source:"apache",compressible:!1,extensions:["wmv"]},"video/x-ms-wmx":{source:"apache",extensions:["wmx"]},"video/x-ms-wvx":{source:"apache",extensions:["wvx"]},"video/x-msvideo":{source:"apache",extensions:["avi"]},"video/x-sgi-movie":{source:"apache",extensions:["movie"]},"video/x-smv":{source:"apache",extensions:["smv"]},"x-conference/x-cooltalk":{source:"apache",extensions:["ice"]},"x-shader/x-fragment":{compressible:!0},"x-shader/x-vertex":{compressible:!0}}});var cr=K((g1,sr)=>{sr.exports=or()});var Bt=K((x1,pr)=>{"use strict";function Pe(e){if(typeof e!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(e))}function lr(e,t){for(var n="",a=0,i=-1,r=0,o,s=0;s<=e.length;++s){if(s<e.length)o=e.charCodeAt(s);else{if(o===47)break;o=47}if(o===47){if(!(i===s-1||r===1))if(i!==s-1&&r===2){if(n.length<2||a!==2||n.charCodeAt(n.length-1)!==46||n.charCodeAt(n.length-2)!==46){if(n.length>2){var p=n.lastIndexOf("/");if(p!==n.length-1){p===-1?(n="",a=0):(n=n.slice(0,p),a=n.length-1-n.lastIndexOf("/")),i=s,r=0;continue}}else if(n.length===2||n.length===1){n="",a=0,i=s,r=0;continue}}t&&(n.length>0?n+="/..":n="..",a=2)}else n.length>0?n+="/"+e.slice(i+1,s):n=e.slice(i+1,s),a=s-i-1;i=s,r=0}else o===46&&r!==-1?++r:r=-1}return n}function xp(e,t){var n=t.dir||t.root,a=t.base||(t.name||"")+(t.ext||"");return n?n===t.root?n+a:n+e+a:a}var ct={resolve:function(){for(var t="",n=!1,a,i=arguments.length-1;i>=-1&&!n;i--){var r;i>=0?r=arguments[i]:(a===void 0&&(a=process.cwd()),r=a),Pe(r),r.length!==0&&(t=r+"/"+t,n=r.charCodeAt(0)===47)}return t=lr(t,!n),n?t.length>0?"/"+t:"/":t.length>0?t:"."},normalize:function(t){if(Pe(t),t.length===0)return".";var n=t.charCodeAt(0)===47,a=t.charCodeAt(t.length-1)===47;return t=lr(t,!n),t.length===0&&!n&&(t="."),t.length>0&&a&&(t+="/"),n?"/"+t:t},isAbsolute:function(t){return Pe(t),t.length>0&&t.charCodeAt(0)===47},join:function(){if(arguments.length===0)return".";for(var t,n=0;n<arguments.length;++n){var a=arguments[n];Pe(a),a.length>0&&(t===void 0?t=a:t+="/"+a)}return t===void 0?".":ct.normalize(t)},relative:function(t,n){if(Pe(t),Pe(n),t===n||(t=ct.resolve(t),n=ct.resolve(n),t===n))return"";for(var a=1;a<t.length&&t.charCodeAt(a)===47;++a);for(var i=t.length,r=i-a,o=1;o<n.length&&n.charCodeAt(o)===47;++o);for(var s=n.length,p=s-o,l=r<p?r:p,c=-1,u=0;u<=l;++u){if(u===l){if(p>l){if(n.charCodeAt(o+u)===47)return n.slice(o+u+1);if(u===0)return n.slice(o+u)}else r>l&&(t.charCodeAt(a+u)===47?c=u:u===0&&(c=0));break}var h=t.charCodeAt(a+u),f=n.charCodeAt(o+u);if(h!==f)break;h===47&&(c=u)}var g="";for(u=a+c+1;u<=i;++u)(u===i||t.charCodeAt(u)===47)&&(g.length===0?g+="..":g+="/..");return g.length>0?g+n.slice(o+c):(o+=c,n.charCodeAt(o)===47&&++o,n.slice(o))},_makeLong:function(t){return t},dirname:function(t){if(Pe(t),t.length===0)return".";for(var n=t.charCodeAt(0),a=n===47,i=-1,r=!0,o=t.length-1;o>=1;--o)if(n=t.charCodeAt(o),n===47){if(!r){i=o;break}}else r=!1;return i===-1?a?"/":".":a&&i===1?"//":t.slice(0,i)},basename:function(t,n){if(n!==void 0&&typeof n!="string")throw new TypeError('"ext" argument must be a string');Pe(t);var a=0,i=-1,r=!0,o;if(n!==void 0&&n.length>0&&n.length<=t.length){if(n.length===t.length&&n===t)return"";var s=n.length-1,p=-1;for(o=t.length-1;o>=0;--o){var l=t.charCodeAt(o);if(l===47){if(!r){a=o+1;break}}else p===-1&&(r=!1,p=o+1),s>=0&&(l===n.charCodeAt(s)?--s===-1&&(i=o):(s=-1,i=p))}return a===i?i=p:i===-1&&(i=t.length),t.slice(a,i)}else{for(o=t.length-1;o>=0;--o)if(t.charCodeAt(o)===47){if(!r){a=o+1;break}}else i===-1&&(r=!1,i=o+1);return i===-1?"":t.slice(a,i)}},extname:function(t){Pe(t);for(var n=-1,a=0,i=-1,r=!0,o=0,s=t.length-1;s>=0;--s){var p=t.charCodeAt(s);if(p===47){if(!r){a=s+1;break}continue}i===-1&&(r=!1,i=s+1),p===46?n===-1?n=s:o!==1&&(o=1):n!==-1&&(o=-1)}return n===-1||i===-1||o===0||o===1&&n===i-1&&n===a+1?"":t.slice(n,i)},format:function(t){if(t===null||typeof t!="object")throw new TypeError('The "pathObject" argument must be of type Object. Received type '+typeof t);return xp("/",t)},parse:function(t){Pe(t);var n={root:"",dir:"",base:"",ext:"",name:""};if(t.length===0)return n;var a=t.charCodeAt(0),i=a===47,r;i?(n.root="/",r=1):r=0;for(var o=-1,s=0,p=-1,l=!0,c=t.length-1,u=0;c>=r;--c){if(a=t.charCodeAt(c),a===47){if(!l){s=c+1;break}continue}p===-1&&(l=!1,p=c+1),a===46?o===-1?o=c:u!==1&&(u=1):o!==-1&&(u=-1)}return o===-1||p===-1||u===0||u===1&&o===p-1&&o===s+1?p!==-1&&(s===0&&i?n.base=n.name=t.slice(1,p):n.base=n.name=t.slice(s,p)):(s===0&&i?(n.name=t.slice(1,o),n.base=t.slice(1,p)):(n.name=t.slice(s,o),n.base=t.slice(s,p)),n.ext=t.slice(o,p)),s>0?n.dir=t.slice(0,s-1):i&&(n.dir="/"),n},sep:"/",delimiter:":",win32:null,posix:null};ct.posix=ct;pr.exports=ct});var fr=K(ye=>{"use strict";var pn=cr(),vp=Bt().extname,ur=/^\s*([^;\s]*)(?:;|\s|$)/,bp=/^text\//i;ye.charset=dr;ye.charsets={lookup:dr};ye.contentType=yp;ye.extension=_p;ye.extensions=Object.create(null);ye.lookup=kp;ye.types=Object.create(null);wp(ye.extensions,ye.types);function dr(e){if(!e||typeof e!="string")return!1;var t=ur.exec(e),n=t&&pn[t[1].toLowerCase()];return n&&n.charset?n.charset:t&&bp.test(t[1])?"UTF-8":!1}function yp(e){if(!e||typeof e!="string")return!1;var t=e.indexOf("/")===-1?ye.lookup(e):e;if(!t)return!1;if(t.indexOf("charset")===-1){var n=ye.charset(t);n&&(t+="; charset="+n.toLowerCase())}return t}function _p(e){if(!e||typeof e!="string")return!1;var t=ur.exec(e),n=t&&ye.extensions[t[1].toLowerCase()];return!n||!n.length?!1:n[0]}function kp(e){if(!e||typeof e!="string")return!1;var t=vp("x."+e).toLowerCase().substr(1);return t&&ye.types[t]||!1}function wp(e,t){var n=["nginx","apache",void 0,"iana"];Object.keys(pn).forEach(function(i){var r=pn[i],o=r.extensions;if(!(!o||!o.length)){e[i]=o;for(var s=0;s<o.length;s++){var p=o[s];if(t[p]){var l=n.indexOf(pn[t[p]].source),c=n.indexOf(r.source);if(t[p]!=="application/octet-stream"&&(l>c||l===c&&t[p].substr(0,12)==="application/"))continue}t[p]=i}}})}});var aa=K((b1,mr)=>{var Cp=typeof global=="object"&&global&&global.Object===Object&&global;mr.exports=Cp});var Ue=K((y1,hr)=>{var jp=aa(),Lp=typeof self=="object"&&self&&self.Object===Object&&self,Ip=jp||Lp||Function("return this")();hr.exports=Ip});var un=K((_1,gr)=>{var Sp=Ue(),Ap=Sp.Symbol;gr.exports=Ap});var vr=K((k1,xr)=>{function Mp(e,t){var n=-1,a=e.length;for(t||(t=Array(a));++n<a;)t[n]=e[n];return t}xr.exports=Mp});var kr=K((w1,_r)=>{var br=un(),yr=Object.prototype,Fp=yr.hasOwnProperty,Ep=yr.toString,Pt=br?br.toStringTag:void 0;function zp(e){var t=Fp.call(e,Pt),n=e[Pt];try{e[Pt]=void 0;var a=!0}catch{}var i=Ep.call(e);return a&&(t?e[Pt]=n:delete e[Pt]),i}_r.exports=zp});var Cr=K((C1,wr)=>{var Bp=Object.prototype,Pp=Bp.toString;function Tp(e){return Pp.call(e)}wr.exports=Tp});var lt=K((j1,Ir)=>{var jr=un(),Op=kr(),Np=Cr(),Dp="[object Null]",Wp="[object Undefined]",Lr=jr?jr.toStringTag:void 0;function Rp(e){return e==null?e===void 0?Wp:Dp:Lr&&Lr in Object(e)?Op(e):Np(e)}Ir.exports=Rp});var ia=K((L1,Sr)=>{function Up(e){var t=typeof e;return e!=null&&(t=="object"||t=="function")}Sr.exports=Up});var ra=K((I1,Ar)=>{var Vp=lt(),Hp=ia(),qp="[object AsyncFunction]",$p="[object Function]",Gp="[object GeneratorFunction]",Zp="[object Proxy]";function Kp(e){if(!Hp(e))return!1;var t=Vp(e);return t==$p||t==Gp||t==qp||t==Zp}Ar.exports=Kp});var Fr=K((S1,Mr)=>{var Yp=Ue(),Xp=Yp["__core-js_shared__"];Mr.exports=Xp});var Br=K((A1,zr)=>{var oa=Fr(),Er=function(){var e=/[^.]+$/.exec(oa&&oa.keys&&oa.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}();function Jp(e){return!!Er&&Er in e}zr.exports=Jp});var sa=K((M1,Pr)=>{var Qp=Function.prototype,eu=Qp.toString;function tu(e){if(e!=null){try{return eu.call(e)}catch{}try{return e+""}catch{}}return""}Pr.exports=tu});var Or=K((F1,Tr)=>{var nu=ra(),au=Br(),iu=ia(),ru=sa(),ou=/[\\^$.*+?()[\]{}|]/g,su=/^\[object .+?Constructor\]$/,cu=Function.prototype,lu=Object.prototype,pu=cu.toString,uu=lu.hasOwnProperty,du=RegExp("^"+pu.call(uu).replace(ou,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function fu(e){if(!iu(e)||au(e))return!1;var t=nu(e)?du:su;return t.test(ru(e))}Tr.exports=fu});var Dr=K((E1,Nr)=>{function mu(e,t){return e?.[t]}Nr.exports=mu});var pt=K((z1,Wr)=>{var hu=Or(),gu=Dr();function xu(e,t){var n=gu(e,t);return hu(n)?n:void 0}Wr.exports=xu});var Ur=K((B1,Rr)=>{var vu=pt(),bu=Ue(),yu=vu(bu,"DataView");Rr.exports=yu});var Hr=K((P1,Vr)=>{var _u=pt(),ku=Ue(),wu=_u(ku,"Map");Vr.exports=wu});var $r=K((T1,qr)=>{var Cu=pt(),ju=Ue(),Lu=Cu(ju,"Promise");qr.exports=Lu});var Zr=K((O1,Gr)=>{var Iu=pt(),Su=Ue(),Au=Iu(Su,"Set");Gr.exports=Au});var Yr=K((N1,Kr)=>{var Mu=pt(),Fu=Ue(),Eu=Mu(Fu,"WeakMap");Kr.exports=Eu});var io=K((D1,ao)=>{var ca=Ur(),la=Hr(),pa=$r(),ua=Zr(),da=Yr(),no=lt(),ut=sa(),Xr="[object Map]",zu="[object Object]",Jr="[object Promise]",Qr="[object Set]",eo="[object WeakMap]",to="[object DataView]",Bu=ut(ca),Pu=ut(la),Tu=ut(pa),Ou=ut(ua),Nu=ut(da),nt=no;(ca&&nt(new ca(new ArrayBuffer(1)))!=to||la&&nt(new la)!=Xr||pa&&nt(pa.resolve())!=Jr||ua&&nt(new ua)!=Qr||da&&nt(new da)!=eo)&&(nt=function(e){var t=no(e),n=t==zu?e.constructor:void 0,a=n?ut(n):"";if(a)switch(a){case Bu:return to;case Pu:return Xr;case Tu:return Jr;case Ou:return Qr;case Nu:return eo}return t});ao.exports=nt});var fa=K((W1,ro)=>{var Du=9007199254740991;function Wu(e){return typeof e=="number"&&e>-1&&e%1==0&&e<=Du}ro.exports=Wu});var ma=K((R1,oo)=>{var Ru=ra(),Uu=fa();function Vu(e){return e!=null&&Uu(e.length)&&!Ru(e)}oo.exports=Vu});var ha=K((U1,so)=>{var Hu=Array.isArray;so.exports=Hu});var Tt=K((V1,co)=>{function qu(e){return e!=null&&typeof e=="object"}co.exports=qu});var po=K((H1,lo)=>{var $u=lt(),Gu=ha(),Zu=Tt(),Ku="[object String]";function Yu(e){return typeof e=="string"||!Gu(e)&&Zu(e)&&$u(e)==Ku}lo.exports=Yu});var fo=K((q1,uo)=>{function Xu(e){for(var t,n=[];!(t=e.next()).done;)n.push(t.value);return n}uo.exports=Xu});var ho=K(($1,mo)=>{function Ju(e){var t=-1,n=Array(e.size);return e.forEach(function(a,i){n[++t]=[i,a]}),n}mo.exports=Ju});var xo=K((G1,go)=>{function Qu(e){var t=-1,n=Array(e.size);return e.forEach(function(a){n[++t]=a}),n}go.exports=Qu});var bo=K((Z1,vo)=>{function ed(e){return e.split("")}vo.exports=ed});var _o=K((K1,yo)=>{var td="\\ud800-\\udfff",nd="\\u0300-\\u036f",ad="\\ufe20-\\ufe2f",id="\\u20d0-\\u20ff",rd=nd+ad+id,od="\\ufe0e\\ufe0f",sd="\\u200d",cd=RegExp("["+sd+td+rd+od+"]");function ld(e){return cd.test(e)}yo.exports=ld});var Ao=K((Y1,So)=>{var ko="\\ud800-\\udfff",pd="\\u0300-\\u036f",ud="\\ufe20-\\ufe2f",dd="\\u20d0-\\u20ff",fd=pd+ud+dd,md="\\ufe0e\\ufe0f",hd="["+ko+"]",ga="["+fd+"]",xa="\\ud83c[\\udffb-\\udfff]",gd="(?:"+ga+"|"+xa+")",wo="[^"+ko+"]",Co="(?:\\ud83c[\\udde6-\\uddff]){2}",jo="[\\ud800-\\udbff][\\udc00-\\udfff]",xd="\\u200d",Lo=gd+"?",Io="["+md+"]?",vd="(?:"+xd+"(?:"+[wo,Co,jo].join("|")+")"+Io+Lo+")*",bd=Io+Lo+vd,yd="(?:"+[wo+ga+"?",ga,Co,jo,hd].join("|")+")",_d=RegExp(xa+"(?="+xa+")|"+yd+bd,"g");function kd(e){return e.match(_d)||[]}So.exports=kd});var Fo=K((X1,Mo)=>{var wd=bo(),Cd=_o(),jd=Ao();function Ld(e){return Cd(e)?jd(e):wd(e)}Mo.exports=Ld});var zo=K((J1,Eo)=>{function Id(e,t){for(var n=-1,a=e==null?0:e.length,i=Array(a);++n<a;)i[n]=t(e[n],n,e);return i}Eo.exports=Id});var Po=K((Q1,Bo)=>{var Sd=zo();function Ad(e,t){return Sd(t,function(n){return e[n]})}Bo.exports=Ad});var Oo=K((e2,To)=>{function Md(e,t){for(var n=-1,a=Array(e);++n<e;)a[n]=t(n);return a}To.exports=Md});var Do=K((t2,No)=>{var Fd=lt(),Ed=Tt(),zd="[object Arguments]";function Bd(e){return Ed(e)&&Fd(e)==zd}No.exports=Bd});var Vo=K((n2,Uo)=>{var Wo=Do(),Pd=Tt(),Ro=Object.prototype,Td=Ro.hasOwnProperty,Od=Ro.propertyIsEnumerable,Nd=Wo(function(){return arguments}())?Wo:function(e){return Pd(e)&&Td.call(e,"callee")&&!Od.call(e,"callee")};Uo.exports=Nd});var qo=K((a2,Ho)=>{function Dd(){return!1}Ho.exports=Dd});var Ko=K((Ot,dt)=>{var Wd=Ue(),Rd=qo(),Zo=typeof Ot=="object"&&Ot&&!Ot.nodeType&&Ot,$o=Zo&&typeof dt=="object"&&dt&&!dt.nodeType&&dt,Ud=$o&&$o.exports===Zo,Go=Ud?Wd.Buffer:void 0,Vd=Go?Go.isBuffer:void 0,Hd=Vd||Rd;dt.exports=Hd});var Xo=K((i2,Yo)=>{var qd=9007199254740991,$d=/^(?:0|[1-9]\d*)$/;function Gd(e,t){var n=typeof e;return t=t??qd,!!t&&(n=="number"||n!="symbol"&&$d.test(e))&&e>-1&&e%1==0&&e<t}Yo.exports=Gd});var Qo=K((r2,Jo)=>{var Zd=lt(),Kd=fa(),Yd=Tt(),Xd="[object Arguments]",Jd="[object Array]",Qd="[object Boolean]",ef="[object Date]",tf="[object Error]",nf="[object Function]",af="[object Map]",rf="[object Number]",of="[object Object]",sf="[object RegExp]",cf="[object Set]",lf="[object String]",pf="[object WeakMap]",uf="[object ArrayBuffer]",df="[object DataView]",ff="[object Float32Array]",mf="[object Float64Array]",hf="[object Int8Array]",gf="[object Int16Array]",xf="[object Int32Array]",vf="[object Uint8Array]",bf="[object Uint8ClampedArray]",yf="[object Uint16Array]",_f="[object Uint32Array]",pe={};pe[ff]=pe[mf]=pe[hf]=pe[gf]=pe[xf]=pe[vf]=pe[bf]=pe[yf]=pe[_f]=!0;pe[Xd]=pe[Jd]=pe[uf]=pe[Qd]=pe[df]=pe[ef]=pe[tf]=pe[nf]=pe[af]=pe[rf]=pe[of]=pe[sf]=pe[cf]=pe[lf]=pe[pf]=!1;function kf(e){return Yd(e)&&Kd(e.length)&&!!pe[Zd(e)]}Jo.exports=kf});var ts=K((o2,es)=>{function wf(e){return function(t){return e(t)}}es.exports=wf});var as=K((Nt,ft)=>{var Cf=aa(),ns=typeof Nt=="object"&&Nt&&!Nt.nodeType&&Nt,Dt=ns&&typeof ft=="object"&&ft&&!ft.nodeType&&ft,jf=Dt&&Dt.exports===ns,va=jf&&Cf.process,Lf=function(){try{var e=Dt&&Dt.require&&Dt.require("util").types;return e||va&&va.binding&&va.binding("util")}catch{}}();ft.exports=Lf});var ss=K((s2,os)=>{var If=Qo(),Sf=ts(),is=as(),rs=is&&is.isTypedArray,Af=rs?Sf(rs):If;os.exports=Af});var ls=K((c2,cs)=>{var Mf=Oo(),Ff=Vo(),Ef=ha(),zf=Ko(),Bf=Xo(),Pf=ss(),Tf=Object.prototype,Of=Tf.hasOwnProperty;function Nf(e,t){var n=Ef(e),a=!n&&Ff(e),i=!n&&!a&&zf(e),r=!n&&!a&&!i&&Pf(e),o=n||a||i||r,s=o?Mf(e.length,String):[],p=s.length;for(var l in e)(t||Of.call(e,l))&&!(o&&(l=="length"||i&&(l=="offset"||l=="parent")||r&&(l=="buffer"||l=="byteLength"||l=="byteOffset")||Bf(l,p)))&&s.push(l);return s}cs.exports=Nf});var us=K((l2,ps)=>{var Df=Object.prototype;function Wf(e){var t=e&&e.constructor,n=typeof t=="function"&&t.prototype||Df;return e===n}ps.exports=Wf});var fs=K((p2,ds)=>{function Rf(e,t){return function(n){return e(t(n))}}ds.exports=Rf});var hs=K((u2,ms)=>{var Uf=fs(),Vf=Uf(Object.keys,Object);ms.exports=Vf});var xs=K((d2,gs)=>{var Hf=us(),qf=hs(),$f=Object.prototype,Gf=$f.hasOwnProperty;function Zf(e){if(!Hf(e))return qf(e);var t=[];for(var n in Object(e))Gf.call(e,n)&&n!="constructor"&&t.push(n);return t}gs.exports=Zf});var bs=K((f2,vs)=>{var Kf=ls(),Yf=xs(),Xf=ma();function Jf(e){return Xf(e)?Kf(e):Yf(e)}vs.exports=Jf});var _s=K((m2,ys)=>{var Qf=Po(),em=bs();function tm(e){return e==null?[]:Qf(e,em(e))}ys.exports=tm});var Cs=K((h2,ws)=>{var ks=un(),nm=vr(),am=io(),im=ma(),rm=po(),om=fo(),sm=ho(),cm=xo(),lm=Fo(),pm=_s(),um="[object Map]",dm="[object Set]",ba=ks?ks.iterator:void 0;function fm(e){if(!e)return[];if(im(e))return rm(e)?lm(e):nm(e);if(ba&&e[ba])return om(e[ba]());var t=am(e),n=t==um?sm:t==dm?cm:pm;return n(e)}ws.exports=fm});var ya=K((g2,mm)=>{mm.exports={"100":"\u{1F4AF}","1234":"\u{1F522}",umbrella_with_rain_drops:"\u2614",coffee:"\u2615",aries:"\u2648",taurus:"\u2649",sagittarius:"\u2650",capricorn:"\u2651",aquarius:"\u2652",pisces:"\u2653",anchor:"\u2693",white_check_mark:"\u2705",sparkles:"\u2728",question:"\u2753",grey_question:"\u2754",grey_exclamation:"\u2755",exclamation:"\u2757",heavy_exclamation_mark:"\u2757",heavy_plus_sign:"\u2795",heavy_minus_sign:"\u2796",heavy_division_sign:"\u2797",hash:"#\uFE0F\u20E3",keycap_star:"*\uFE0F\u20E3",zero:"0\uFE0F\u20E3",one:"1\uFE0F\u20E3",two:"2\uFE0F\u20E3",three:"3\uFE0F\u20E3",four:"4\uFE0F\u20E3",five:"5\uFE0F\u20E3",six:"6\uFE0F\u20E3",seven:"7\uFE0F\u20E3",eight:"8\uFE0F\u20E3",nine:"9\uFE0F\u20E3",copyright:"\xA9\uFE0F",registered:"\xAE\uFE0F",mahjong:"\u{1F004}",black_joker:"\u{1F0CF}",a:"\u{1F170}\uFE0F",b:"\u{1F171}\uFE0F",o2:"\u{1F17E}\uFE0F",parking:"\u{1F17F}\uFE0F",ab:"\u{1F18E}",cl:"\u{1F191}",cool:"\u{1F192}",free:"\u{1F193}",id:"\u{1F194}",new:"\u{1F195}",ng:"\u{1F196}",ok:"\u{1F197}",sos:"\u{1F198}",up:"\u{1F199}",vs:"\u{1F19A}","flag-ac":"\u{1F1E6}\u{1F1E8}","flag-ad":"\u{1F1E6}\u{1F1E9}","flag-ae":"\u{1F1E6}\u{1F1EA}","flag-af":"\u{1F1E6}\u{1F1EB}","flag-ag":"\u{1F1E6}\u{1F1EC}","flag-ai":"\u{1F1E6}\u{1F1EE}","flag-al":"\u{1F1E6}\u{1F1F1}","flag-am":"\u{1F1E6}\u{1F1F2}","flag-ao":"\u{1F1E6}\u{1F1F4}","flag-aq":"\u{1F1E6}\u{1F1F6}","flag-ar":"\u{1F1E6}\u{1F1F7}","flag-as":"\u{1F1E6}\u{1F1F8}","flag-at":"\u{1F1E6}\u{1F1F9}","flag-au":"\u{1F1E6}\u{1F1FA}","flag-aw":"\u{1F1E6}\u{1F1FC}","flag-ax":"\u{1F1E6}\u{1F1FD}","flag-az":"\u{1F1E6}\u{1F1FF}","flag-ba":"\u{1F1E7}\u{1F1E6}","flag-bb":"\u{1F1E7}\u{1F1E7}","flag-bd":"\u{1F1E7}\u{1F1E9}","flag-be":"\u{1F1E7}\u{1F1EA}","flag-bf":"\u{1F1E7}\u{1F1EB}","flag-bg":"\u{1F1E7}\u{1F1EC}","flag-bh":"\u{1F1E7}\u{1F1ED}","flag-bi":"\u{1F1E7}\u{1F1EE}","flag-bj":"\u{1F1E7}\u{1F1EF}","flag-bl":"\u{1F1E7}\u{1F1F1}","flag-bm":"\u{1F1E7}\u{1F1F2}","flag-bn":"\u{1F1E7}\u{1F1F3}","flag-bo":"\u{1F1E7}\u{1F1F4}","flag-bq":"\u{1F1E7}\u{1F1F6}","flag-br":"\u{1F1E7}\u{1F1F7}","flag-bs":"\u{1F1E7}\u{1F1F8}","flag-bt":"\u{1F1E7}\u{1F1F9}","flag-bv":"\u{1F1E7}\u{1F1FB}","flag-bw":"\u{1F1E7}\u{1F1FC}","flag-by":"\u{1F1E7}\u{1F1FE}","flag-bz":"\u{1F1E7}\u{1F1FF}","flag-ca":"\u{1F1E8}\u{1F1E6}","flag-cc":"\u{1F1E8}\u{1F1E8}","flag-cd":"\u{1F1E8}\u{1F1E9}","flag-cf":"\u{1F1E8}\u{1F1EB}","flag-cg":"\u{1F1E8}\u{1F1EC}","flag-ch":"\u{1F1E8}\u{1F1ED}","flag-ci":"\u{1F1E8}\u{1F1EE}","flag-ck":"\u{1F1E8}\u{1F1F0}","flag-cl":"\u{1F1E8}\u{1F1F1}","flag-cm":"\u{1F1E8}\u{1F1F2}",cn:"\u{1F1E8}\u{1F1F3}","flag-cn":"\u{1F1E8}\u{1F1F3}","flag-co":"\u{1F1E8}\u{1F1F4}","flag-cp":"\u{1F1E8}\u{1F1F5}","flag-cr":"\u{1F1E8}\u{1F1F7}","flag-cu":"\u{1F1E8}\u{1F1FA}","flag-cv":"\u{1F1E8}\u{1F1FB}","flag-cw":"\u{1F1E8}\u{1F1FC}","flag-cx":"\u{1F1E8}\u{1F1FD}","flag-cy":"\u{1F1E8}\u{1F1FE}","flag-cz":"\u{1F1E8}\u{1F1FF}",de:"\u{1F1E9}\u{1F1EA}","flag-de":"\u{1F1E9}\u{1F1EA}","flag-dg":"\u{1F1E9}\u{1F1EC}","flag-dj":"\u{1F1E9}\u{1F1EF}","flag-dk":"\u{1F1E9}\u{1F1F0}","flag-dm":"\u{1F1E9}\u{1F1F2}","flag-do":"\u{1F1E9}\u{1F1F4}","flag-dz":"\u{1F1E9}\u{1F1FF}","flag-ea":"\u{1F1EA}\u{1F1E6}","flag-ec":"\u{1F1EA}\u{1F1E8}","flag-ee":"\u{1F1EA}\u{1F1EA}","flag-eg":"\u{1F1EA}\u{1F1EC}","flag-eh":"\u{1F1EA}\u{1F1ED}","flag-er":"\u{1F1EA}\u{1F1F7}",es:"\u{1F1EA}\u{1F1F8}","flag-es":"\u{1F1EA}\u{1F1F8}","flag-et":"\u{1F1EA}\u{1F1F9}","flag-eu":"\u{1F1EA}\u{1F1FA}","flag-fi":"\u{1F1EB}\u{1F1EE}","flag-fj":"\u{1F1EB}\u{1F1EF}","flag-fk":"\u{1F1EB}\u{1F1F0}","flag-fm":"\u{1F1EB}\u{1F1F2}","flag-fo":"\u{1F1EB}\u{1F1F4}",fr:"\u{1F1EB}\u{1F1F7}","flag-fr":"\u{1F1EB}\u{1F1F7}","flag-ga":"\u{1F1EC}\u{1F1E6}",gb:"\u{1F1EC}\u{1F1E7}",uk:"\u{1F1EC}\u{1F1E7}","flag-gb":"\u{1F1EC}\u{1F1E7}","flag-gd":"\u{1F1EC}\u{1F1E9}","flag-ge":"\u{1F1EC}\u{1F1EA}","flag-gf":"\u{1F1EC}\u{1F1EB}","flag-gg":"\u{1F1EC}\u{1F1EC}","flag-gh":"\u{1F1EC}\u{1F1ED}","flag-gi":"\u{1F1EC}\u{1F1EE}","flag-gl":"\u{1F1EC}\u{1F1F1}","flag-gm":"\u{1F1EC}\u{1F1F2}","flag-gn":"\u{1F1EC}\u{1F1F3}","flag-gp":"\u{1F1EC}\u{1F1F5}","flag-gq":"\u{1F1EC}\u{1F1F6}","flag-gr":"\u{1F1EC}\u{1F1F7}","flag-gs":"\u{1F1EC}\u{1F1F8}","flag-gt":"\u{1F1EC}\u{1F1F9}","flag-gu":"\u{1F1EC}\u{1F1FA}","flag-gw":"\u{1F1EC}\u{1F1FC}","flag-gy":"\u{1F1EC}\u{1F1FE}","flag-hk":"\u{1F1ED}\u{1F1F0}","flag-hm":"\u{1F1ED}\u{1F1F2}","flag-hn":"\u{1F1ED}\u{1F1F3}","flag-hr":"\u{1F1ED}\u{1F1F7}","flag-ht":"\u{1F1ED}\u{1F1F9}","flag-hu":"\u{1F1ED}\u{1F1FA}","flag-ic":"\u{1F1EE}\u{1F1E8}","flag-id":"\u{1F1EE}\u{1F1E9}","flag-ie":"\u{1F1EE}\u{1F1EA}","flag-il":"\u{1F1EE}\u{1F1F1}","flag-im":"\u{1F1EE}\u{1F1F2}","flag-in":"\u{1F1EE}\u{1F1F3}","flag-io":"\u{1F1EE}\u{1F1F4}","flag-iq":"\u{1F1EE}\u{1F1F6}","flag-ir":"\u{1F1EE}\u{1F1F7}","flag-is":"\u{1F1EE}\u{1F1F8}",it:"\u{1F1EE}\u{1F1F9}","flag-it":"\u{1F1EE}\u{1F1F9}","flag-je":"\u{1F1EF}\u{1F1EA}","flag-jm":"\u{1F1EF}\u{1F1F2}","flag-jo":"\u{1F1EF}\u{1F1F4}",jp:"\u{1F1EF}\u{1F1F5}","flag-jp":"\u{1F1EF}\u{1F1F5}","flag-ke":"\u{1F1F0}\u{1F1EA}","flag-kg":"\u{1F1F0}\u{1F1EC}","flag-kh":"\u{1F1F0}\u{1F1ED}","flag-ki":"\u{1F1F0}\u{1F1EE}","flag-km":"\u{1F1F0}\u{1F1F2}","flag-kn":"\u{1F1F0}\u{1F1F3}","flag-kp":"\u{1F1F0}\u{1F1F5}",kr:"\u{1F1F0}\u{1F1F7}","flag-kr":"\u{1F1F0}\u{1F1F7}","flag-kw":"\u{1F1F0}\u{1F1FC}","flag-ky":"\u{1F1F0}\u{1F1FE}","flag-kz":"\u{1F1F0}\u{1F1FF}","flag-la":"\u{1F1F1}\u{1F1E6}","flag-lb":"\u{1F1F1}\u{1F1E7}","flag-lc":"\u{1F1F1}\u{1F1E8}","flag-li":"\u{1F1F1}\u{1F1EE}","flag-lk":"\u{1F1F1}\u{1F1F0}","flag-lr":"\u{1F1F1}\u{1F1F7}","flag-ls":"\u{1F1F1}\u{1F1F8}","flag-lt":"\u{1F1F1}\u{1F1F9}","flag-lu":"\u{1F1F1}\u{1F1FA}","flag-lv":"\u{1F1F1}\u{1F1FB}","flag-ly":"\u{1F1F1}\u{1F1FE}","flag-ma":"\u{1F1F2}\u{1F1E6}","flag-mc":"\u{1F1F2}\u{1F1E8}","flag-md":"\u{1F1F2}\u{1F1E9}","flag-me":"\u{1F1F2}\u{1F1EA}","flag-mf":"\u{1F1F2}\u{1F1EB}","flag-mg":"\u{1F1F2}\u{1F1EC}","flag-mh":"\u{1F1F2}\u{1F1ED}","flag-mk":"\u{1F1F2}\u{1F1F0}","flag-ml":"\u{1F1F2}\u{1F1F1}","flag-mm":"\u{1F1F2}\u{1F1F2}","flag-mn":"\u{1F1F2}\u{1F1F3}","flag-mo":"\u{1F1F2}\u{1F1F4}","flag-mp":"\u{1F1F2}\u{1F1F5}","flag-mq":"\u{1F1F2}\u{1F1F6}","flag-mr":"\u{1F1F2}\u{1F1F7}","flag-ms":"\u{1F1F2}\u{1F1F8}","flag-mt":"\u{1F1F2}\u{1F1F9}","flag-mu":"\u{1F1F2}\u{1F1FA}","flag-mv":"\u{1F1F2}\u{1F1FB}","flag-mw":"\u{1F1F2}\u{1F1FC}","flag-mx":"\u{1F1F2}\u{1F1FD}","flag-my":"\u{1F1F2}\u{1F1FE}","flag-mz":"\u{1F1F2}\u{1F1FF}","flag-na":"\u{1F1F3}\u{1F1E6}","flag-nc":"\u{1F1F3}\u{1F1E8}","flag-ne":"\u{1F1F3}\u{1F1EA}","flag-nf":"\u{1F1F3}\u{1F1EB}","flag-ng":"\u{1F1F3}\u{1F1EC}","flag-ni":"\u{1F1F3}\u{1F1EE}","flag-nl":"\u{1F1F3}\u{1F1F1}","flag-no":"\u{1F1F3}\u{1F1F4}","flag-np":"\u{1F1F3}\u{1F1F5}","flag-nr":"\u{1F1F3}\u{1F1F7}","flag-nu":"\u{1F1F3}\u{1F1FA}","flag-nz":"\u{1F1F3}\u{1F1FF}","flag-om":"\u{1F1F4}\u{1F1F2}","flag-pa":"\u{1F1F5}\u{1F1E6}","flag-pe":"\u{1F1F5}\u{1F1EA}","flag-pf":"\u{1F1F5}\u{1F1EB}","flag-pg":"\u{1F1F5}\u{1F1EC}","flag-ph":"\u{1F1F5}\u{1F1ED}","flag-pk":"\u{1F1F5}\u{1F1F0}","flag-pl":"\u{1F1F5}\u{1F1F1}","flag-pm":"\u{1F1F5}\u{1F1F2}","flag-pn":"\u{1F1F5}\u{1F1F3}","flag-pr":"\u{1F1F5}\u{1F1F7}","flag-ps":"\u{1F1F5}\u{1F1F8}","flag-pt":"\u{1F1F5}\u{1F1F9}","flag-pw":"\u{1F1F5}\u{1F1FC}","flag-py":"\u{1F1F5}\u{1F1FE}","flag-qa":"\u{1F1F6}\u{1F1E6}","flag-re":"\u{1F1F7}\u{1F1EA}","flag-ro":"\u{1F1F7}\u{1F1F4}","flag-rs":"\u{1F1F7}\u{1F1F8}",ru:"\u{1F1F7}\u{1F1FA}","flag-ru":"\u{1F1F7}\u{1F1FA}","flag-rw":"\u{1F1F7}\u{1F1FC}","flag-sa":"\u{1F1F8}\u{1F1E6}","flag-sb":"\u{1F1F8}\u{1F1E7}","flag-sc":"\u{1F1F8}\u{1F1E8}","flag-sd":"\u{1F1F8}\u{1F1E9}","flag-se":"\u{1F1F8}\u{1F1EA}","flag-sg":"\u{1F1F8}\u{1F1EC}","flag-sh":"\u{1F1F8}\u{1F1ED}","flag-si":"\u{1F1F8}\u{1F1EE}","flag-sj":"\u{1F1F8}\u{1F1EF}","flag-sk":"\u{1F1F8}\u{1F1F0}","flag-sl":"\u{1F1F8}\u{1F1F1}","flag-sm":"\u{1F1F8}\u{1F1F2}","flag-sn":"\u{1F1F8}\u{1F1F3}","flag-so":"\u{1F1F8}\u{1F1F4}","flag-sr":"\u{1F1F8}\u{1F1F7}","flag-ss":"\u{1F1F8}\u{1F1F8}","flag-st":"\u{1F1F8}\u{1F1F9}","flag-sv":"\u{1F1F8}\u{1F1FB}","flag-sx":"\u{1F1F8}\u{1F1FD}","flag-sy":"\u{1F1F8}\u{1F1FE}","flag-sz":"\u{1F1F8}\u{1F1FF}","flag-ta":"\u{1F1F9}\u{1F1E6}","flag-tc":"\u{1F1F9}\u{1F1E8}","flag-td":"\u{1F1F9}\u{1F1E9}","flag-tf":"\u{1F1F9}\u{1F1EB}","flag-tg":"\u{1F1F9}\u{1F1EC}","flag-th":"\u{1F1F9}\u{1F1ED}","flag-tj":"\u{1F1F9}\u{1F1EF}","flag-tk":"\u{1F1F9}\u{1F1F0}","flag-tl":"\u{1F1F9}\u{1F1F1}","flag-tm":"\u{1F1F9}\u{1F1F2}","flag-tn":"\u{1F1F9}\u{1F1F3}","flag-to":"\u{1F1F9}\u{1F1F4}","flag-tr":"\u{1F1F9}\u{1F1F7}","flag-tt":"\u{1F1F9}\u{1F1F9}","flag-tv":"\u{1F1F9}\u{1F1FB}","flag-tw":"\u{1F1F9}\u{1F1FC}","flag-tz":"\u{1F1F9}\u{1F1FF}","flag-ua":"\u{1F1FA}\u{1F1E6}","flag-ug":"\u{1F1FA}\u{1F1EC}","flag-um":"\u{1F1FA}\u{1F1F2}","flag-un":"\u{1F1FA}\u{1F1F3}",us:"\u{1F1FA}\u{1F1F8}","flag-us":"\u{1F1FA}\u{1F1F8}","flag-uy":"\u{1F1FA}\u{1F1FE}","flag-uz":"\u{1F1FA}\u{1F1FF}","flag-va":"\u{1F1FB}\u{1F1E6}","flag-vc":"\u{1F1FB}\u{1F1E8}","flag-ve":"\u{1F1FB}\u{1F1EA}","flag-vg":"\u{1F1FB}\u{1F1EC}","flag-vi":"\u{1F1FB}\u{1F1EE}","flag-vn":"\u{1F1FB}\u{1F1F3}","flag-vu":"\u{1F1FB}\u{1F1FA}","flag-wf":"\u{1F1FC}\u{1F1EB}","flag-ws":"\u{1F1FC}\u{1F1F8}","flag-xk":"\u{1F1FD}\u{1F1F0}","flag-ye":"\u{1F1FE}\u{1F1EA}","flag-yt":"\u{1F1FE}\u{1F1F9}","flag-za":"\u{1F1FF}\u{1F1E6}","flag-zm":"\u{1F1FF}\u{1F1F2}","flag-zw":"\u{1F1FF}\u{1F1FC}",koko:"\u{1F201}",sa:"\u{1F202}\uFE0F",u7121:"\u{1F21A}",u6307:"\u{1F22F}",u7981:"\u{1F232}",u7a7a:"\u{1F233}",u5408:"\u{1F234}",u6e80:"\u{1F235}",u6709:"\u{1F236}",u6708:"\u{1F237}\uFE0F",u7533:"\u{1F238}",u5272:"\u{1F239}",u55b6:"\u{1F23A}",ideograph_advantage:"\u{1F250}",accept:"\u{1F251}",cyclone:"\u{1F300}",foggy:"\u{1F301}",closed_umbrella:"\u{1F302}",night_with_stars:"\u{1F303}",sunrise_over_mountains:"\u{1F304}",sunrise:"\u{1F305}",city_sunset:"\u{1F306}",city_sunrise:"\u{1F307}",rainbow:"\u{1F308}",bridge_at_night:"\u{1F309}",ocean:"\u{1F30A}",volcano:"\u{1F30B}",milky_way:"\u{1F30C}",earth_africa:"\u{1F30D}",earth_americas:"\u{1F30E}",earth_asia:"\u{1F30F}",globe_with_meridians:"\u{1F310}",new_moon:"\u{1F311}",waxing_crescent_moon:"\u{1F312}",first_quarter_moon:"\u{1F313}",moon:"\u{1F314}",waxing_gibbous_moon:"\u{1F314}",full_moon:"\u{1F315}",waning_gibbous_moon:"\u{1F316}",last_quarter_moon:"\u{1F317}",waning_crescent_moon:"\u{1F318}",crescent_moon:"\u{1F319}",new_moon_with_face:"\u{1F31A}",first_quarter_moon_with_face:"\u{1F31B}",last_quarter_moon_with_face:"\u{1F31C}",full_moon_with_face:"\u{1F31D}",sun_with_face:"\u{1F31E}",star2:"\u{1F31F}",stars:"\u{1F320}",thermometer:"\u{1F321}\uFE0F",mostly_sunny:"\u{1F324}\uFE0F",sun_small_cloud:"\u{1F324}\uFE0F",barely_sunny:"\u{1F325}\uFE0F",sun_behind_cloud:"\u{1F325}\uFE0F",partly_sunny_rain:"\u{1F326}\uFE0F",sun_behind_rain_cloud:"\u{1F326}\uFE0F",rain_cloud:"\u{1F327}\uFE0F",snow_cloud:"\u{1F328}\uFE0F",lightning:"\u{1F329}\uFE0F",lightning_cloud:"\u{1F329}\uFE0F",tornado:"\u{1F32A}\uFE0F",tornado_cloud:"\u{1F32A}\uFE0F",fog:"\u{1F32B}\uFE0F",wind_blowing_face:"\u{1F32C}\uFE0F",hotdog:"\u{1F32D}",taco:"\u{1F32E}",burrito:"\u{1F32F}",chestnut:"\u{1F330}",seedling:"\u{1F331}",evergreen_tree:"\u{1F332}",deciduous_tree:"\u{1F333}",palm_tree:"\u{1F334}",cactus:"\u{1F335}",hot_pepper:"\u{1F336}\uFE0F",tulip:"\u{1F337}",cherry_blossom:"\u{1F338}",rose:"\u{1F339}",hibiscus:"\u{1F33A}",sunflower:"\u{1F33B}",blossom:"\u{1F33C}",corn:"\u{1F33D}",ear_of_rice:"\u{1F33E}",herb:"\u{1F33F}",four_leaf_clover:"\u{1F340}",maple_leaf:"\u{1F341}",fallen_leaf:"\u{1F342}",leaves:"\u{1F343}",mushroom:"\u{1F344}",tomato:"\u{1F345}",eggplant:"\u{1F346}",grapes:"\u{1F347}",melon:"\u{1F348}",watermelon:"\u{1F349}",tangerine:"\u{1F34A}",lemon:"\u{1F34B}",banana:"\u{1F34C}",pineapple:"\u{1F34D}",apple:"\u{1F34E}",green_apple:"\u{1F34F}",pear:"\u{1F350}",peach:"\u{1F351}",cherries:"\u{1F352}",strawberry:"\u{1F353}",hamburger:"\u{1F354}",pizza:"\u{1F355}",meat_on_bone:"\u{1F356}",poultry_leg:"\u{1F357}",rice_cracker:"\u{1F358}",rice_ball:"\u{1F359}",rice:"\u{1F35A}",curry:"\u{1F35B}",ramen:"\u{1F35C}",spaghetti:"\u{1F35D}",bread:"\u{1F35E}",fries:"\u{1F35F}",sweet_potato:"\u{1F360}",dango:"\u{1F361}",oden:"\u{1F362}",sushi:"\u{1F363}",fried_shrimp:"\u{1F364}",fish_cake:"\u{1F365}",icecream:"\u{1F366}",shaved_ice:"\u{1F367}",ice_cream:"\u{1F368}",doughnut:"\u{1F369}",cookie:"\u{1F36A}",chocolate_bar:"\u{1F36B}",candy:"\u{1F36C}",lollipop:"\u{1F36D}",custard:"\u{1F36E}",honey_pot:"\u{1F36F}",cake:"\u{1F370}",bento:"\u{1F371}",stew:"\u{1F372}",fried_egg:"\u{1F373}",cooking:"\u{1F373}",fork_and_knife:"\u{1F374}",tea:"\u{1F375}",sake:"\u{1F376}",wine_glass:"\u{1F377}",cocktail:"\u{1F378}",tropical_drink:"\u{1F379}",beer:"\u{1F37A}",beers:"\u{1F37B}",baby_bottle:"\u{1F37C}",knife_fork_plate:"\u{1F37D}\uFE0F",champagne:"\u{1F37E}",popcorn:"\u{1F37F}",ribbon:"\u{1F380}",gift:"\u{1F381}",birthday:"\u{1F382}",jack_o_lantern:"\u{1F383}",christmas_tree:"\u{1F384}",santa:"\u{1F385}",fireworks:"\u{1F386}",sparkler:"\u{1F387}",balloon:"\u{1F388}",tada:"\u{1F389}",confetti_ball:"\u{1F38A}",tanabata_tree:"\u{1F38B}",crossed_flags:"\u{1F38C}",bamboo:"\u{1F38D}",dolls:"\u{1F38E}",flags:"\u{1F38F}",wind_chime:"\u{1F390}",rice_scene:"\u{1F391}",school_satchel:"\u{1F392}",mortar_board:"\u{1F393}",medal:"\u{1F396}\uFE0F",reminder_ribbon:"\u{1F397}\uFE0F",studio_microphone:"\u{1F399}\uFE0F",level_slider:"\u{1F39A}\uFE0F",control_knobs:"\u{1F39B}\uFE0F",film_frames:"\u{1F39E}\uFE0F",admission_tickets:"\u{1F39F}\uFE0F",carousel_horse:"\u{1F3A0}",ferris_wheel:"\u{1F3A1}",roller_coaster:"\u{1F3A2}",fishing_pole_and_fish:"\u{1F3A3}",microphone:"\u{1F3A4}",movie_camera:"\u{1F3A5}",cinema:"\u{1F3A6}",headphones:"\u{1F3A7}",art:"\u{1F3A8}",tophat:"\u{1F3A9}",circus_tent:"\u{1F3AA}",ticket:"\u{1F3AB}",clapper:"\u{1F3AC}",performing_arts:"\u{1F3AD}",video_game:"\u{1F3AE}",dart:"\u{1F3AF}",slot_machine:"\u{1F3B0}","8ball":"\u{1F3B1}",game_die:"\u{1F3B2}",bowling:"\u{1F3B3}",flower_playing_cards:"\u{1F3B4}",musical_note:"\u{1F3B5}",notes:"\u{1F3B6}",saxophone:"\u{1F3B7}",guitar:"\u{1F3B8}",musical_keyboard:"\u{1F3B9}",trumpet:"\u{1F3BA}",violin:"\u{1F3BB}",musical_score:"\u{1F3BC}",running_shirt_with_sash:"\u{1F3BD}",tennis:"\u{1F3BE}",ski:"\u{1F3BF}",basketball:"\u{1F3C0}",checkered_flag:"\u{1F3C1}",snowboarder:"\u{1F3C2}","woman-running":"\u{1F3C3}\u200D\u2640\uFE0F",running_woman:"\u{1F3C3}\u200D\u2640\uFE0F","man-running":"\u{1F3C3}\u200D\u2642\uFE0F",runner:"\u{1F3C3}\u200D\u2642\uFE0F",running:"\u{1F3C3}\u200D\u2642\uFE0F",running_man:"\u{1F3C3}\u200D\u2642\uFE0F","woman-surfing":"\u{1F3C4}\u200D\u2640\uFE0F",surfing_woman:"\u{1F3C4}\u200D\u2640\uFE0F","man-surfing":"\u{1F3C4}\u200D\u2642\uFE0F",surfer:"\u{1F3C4}\u200D\u2642\uFE0F",surfing_man:"\u{1F3C4}\u200D\u2642\uFE0F",sports_medal:"\u{1F3C5}",trophy:"\u{1F3C6}",horse_racing:"\u{1F3C7}",football:"\u{1F3C8}",rugby_football:"\u{1F3C9}","woman-swimming":"\u{1F3CA}\u200D\u2640\uFE0F",swimming_woman:"\u{1F3CA}\u200D\u2640\uFE0F","man-swimming":"\u{1F3CA}\u200D\u2642\uFE0F",swimmer:"\u{1F3CA}\u200D\u2642\uFE0F",swimming_man:"\u{1F3CA}\u200D\u2642\uFE0F","woman-lifting-weights":"\u{1F3CB}\uFE0F\u200D\u2640\uFE0F",weight_lifting_woman:"\u{1F3CB}\uFE0F\u200D\u2640\uFE0F","man-lifting-weights":"\u{1F3CB}\uFE0F\u200D\u2642\uFE0F",weight_lifter:"\u{1F3CB}\uFE0F\u200D\u2642\uFE0F",weight_lifting_man:"\u{1F3CB}\uFE0F\u200D\u2642\uFE0F","woman-golfing":"\u{1F3CC}\uFE0F\u200D\u2640\uFE0F",golfing_woman:"\u{1F3CC}\uFE0F\u200D\u2640\uFE0F","man-golfing":"\u{1F3CC}\uFE0F\u200D\u2642\uFE0F",golfer:"\u{1F3CC}\uFE0F\u200D\u2642\uFE0F",golfing_man:"\u{1F3CC}\uFE0F\u200D\u2642\uFE0F",racing_motorcycle:"\u{1F3CD}\uFE0F",racing_car:"\u{1F3CE}\uFE0F",cricket_bat_and_ball:"\u{1F3CF}",volleyball:"\u{1F3D0}",field_hockey_stick_and_ball:"\u{1F3D1}",ice_hockey_stick_and_puck:"\u{1F3D2}",table_tennis_paddle_and_ball:"\u{1F3D3}",snow_capped_mountain:"\u{1F3D4}\uFE0F",camping:"\u{1F3D5}\uFE0F",beach_with_umbrella:"\u{1F3D6}\uFE0F",building_construction:"\u{1F3D7}\uFE0F",house_buildings:"\u{1F3D8}\uFE0F",cityscape:"\u{1F3D9}\uFE0F",derelict_house_building:"\u{1F3DA}\uFE0F",classical_building:"\u{1F3DB}\uFE0F",desert:"\u{1F3DC}\uFE0F",desert_island:"\u{1F3DD}\uFE0F",national_park:"\u{1F3DE}\uFE0F",stadium:"\u{1F3DF}\uFE0F",house:"\u{1F3E0}",house_with_garden:"\u{1F3E1}",office:"\u{1F3E2}",post_office:"\u{1F3E3}",european_post_office:"\u{1F3E4}",hospital:"\u{1F3E5}",bank:"\u{1F3E6}",atm:"\u{1F3E7}",hotel:"\u{1F3E8}",love_hotel:"\u{1F3E9}",convenience_store:"\u{1F3EA}",school:"\u{1F3EB}",department_store:"\u{1F3EC}",factory:"\u{1F3ED}",izakaya_lantern:"\u{1F3EE}",lantern:"\u{1F3EE}",japanese_castle:"\u{1F3EF}",european_castle:"\u{1F3F0}","rainbow-flag":"\u{1F3F3}\uFE0F\u200D\u{1F308}",transgender_flag:"\u{1F3F3}\uFE0F\u200D\u26A7\uFE0F",waving_white_flag:"\u{1F3F3}\uFE0F",pirate_flag:"\u{1F3F4}\u200D\u2620\uFE0F","flag-england":"\u{1F3F4}\u{E0067}\u{E0062}\u{E0065}\u{E006E}\u{E0067}\u{E007F}","flag-scotland":"\u{1F3F4}\u{E0067}\u{E0062}\u{E0073}\u{E0063}\u{E0074}\u{E007F}","flag-wales":"\u{1F3F4}\u{E0067}\u{E0062}\u{E0077}\u{E006C}\u{E0073}\u{E007F}",waving_black_flag:"\u{1F3F4}",rosette:"\u{1F3F5}\uFE0F",label:"\u{1F3F7}\uFE0F",badminton_racquet_and_shuttlecock:"\u{1F3F8}",bow_and_arrow:"\u{1F3F9}",amphora:"\u{1F3FA}","skin-tone-2":"\u{1F3FB}","skin-tone-3":"\u{1F3FC}","skin-tone-4":"\u{1F3FD}","skin-tone-5":"\u{1F3FE}","skin-tone-6":"\u{1F3FF}",rat:"\u{1F400}",mouse2:"\u{1F401}",ox:"\u{1F402}",water_buffalo:"\u{1F403}",cow2:"\u{1F404}",tiger2:"\u{1F405}",leopard:"\u{1F406}",rabbit2:"\u{1F407}",black_cat:"\u{1F408}\u200D\u2B1B",cat2:"\u{1F408}",dragon:"\u{1F409}",crocodile:"\u{1F40A}",whale2:"\u{1F40B}",snail:"\u{1F40C}",snake:"\u{1F40D}",racehorse:"\u{1F40E}",ram:"\u{1F40F}",goat:"\u{1F410}",sheep:"\u{1F411}",monkey:"\u{1F412}",rooster:"\u{1F413}",chicken:"\u{1F414}",service_dog:"\u{1F415}\u200D\u{1F9BA}",dog2:"\u{1F415}",pig2:"\u{1F416}",boar:"\u{1F417}",elephant:"\u{1F418}",octopus:"\u{1F419}",shell:"\u{1F41A}",bug:"\u{1F41B}",ant:"\u{1F41C}",bee:"\u{1F41D}",honeybee:"\u{1F41D}",ladybug:"\u{1F41E}",lady_beetle:"\u{1F41E}",fish:"\u{1F41F}",tropical_fish:"\u{1F420}",blowfish:"\u{1F421}",turtle:"\u{1F422}",hatching_chick:"\u{1F423}",baby_chick:"\u{1F424}",hatched_chick:"\u{1F425}",bird:"\u{1F426}",penguin:"\u{1F427}",koala:"\u{1F428}",poodle:"\u{1F429}",dromedary_camel:"\u{1F42A}",camel:"\u{1F42B}",dolphin:"\u{1F42C}",flipper:"\u{1F42C}",mouse:"\u{1F42D}",cow:"\u{1F42E}",tiger:"\u{1F42F}",rabbit:"\u{1F430}",cat:"\u{1F431}",dragon_face:"\u{1F432}",whale:"\u{1F433}",horse:"\u{1F434}",monkey_face:"\u{1F435}",dog:"\u{1F436}",pig:"\u{1F437}",frog:"\u{1F438}",hamster:"\u{1F439}",wolf:"\u{1F43A}",polar_bear:"\u{1F43B}\u200D\u2744\uFE0F",bear:"\u{1F43B}",panda_face:"\u{1F43C}",pig_nose:"\u{1F43D}",feet:"\u{1F43E}",paw_prints:"\u{1F43E}",chipmunk:"\u{1F43F}\uFE0F",eyes:"\u{1F440}","eye-in-speech-bubble":"\u{1F441}\uFE0F\u200D\u{1F5E8}\uFE0F",eye:"\u{1F441}\uFE0F",ear:"\u{1F442}",nose:"\u{1F443}",lips:"\u{1F444}",tongue:"\u{1F445}",point_up_2:"\u{1F446}",point_down:"\u{1F447}",point_left:"\u{1F448}",point_right:"\u{1F449}",facepunch:"\u{1F44A}",punch:"\u{1F44A}",wave:"\u{1F44B}",ok_hand:"\u{1F44C}","+1":"\u{1F44D}",thumbsup:"\u{1F44D}","-1":"\u{1F44E}",thumbsdown:"\u{1F44E}",clap:"\u{1F44F}",open_hands:"\u{1F450}",crown:"\u{1F451}",womans_hat:"\u{1F452}",eyeglasses:"\u{1F453}",necktie:"\u{1F454}",shirt:"\u{1F455}",tshirt:"\u{1F455}",jeans:"\u{1F456}",dress:"\u{1F457}",kimono:"\u{1F458}",bikini:"\u{1F459}",womans_clothes:"\u{1F45A}",purse:"\u{1F45B}",handbag:"\u{1F45C}",pouch:"\u{1F45D}",mans_shoe:"\u{1F45E}",shoe:"\u{1F45E}",athletic_shoe:"\u{1F45F}",high_heel:"\u{1F460}",sandal:"\u{1F461}",boot:"\u{1F462}",footprints:"\u{1F463}",bust_in_silhouette:"\u{1F464}",busts_in_silhouette:"\u{1F465}",boy:"\u{1F466}",girl:"\u{1F467}","male-farmer":"\u{1F468}\u200D\u{1F33E}","male-cook":"\u{1F468}\u200D\u{1F373}",man_feeding_baby:"\u{1F468}\u200D\u{1F37C}","male-student":"\u{1F468}\u200D\u{1F393}","male-singer":"\u{1F468}\u200D\u{1F3A4}","male-artist":"\u{1F468}\u200D\u{1F3A8}","male-teacher":"\u{1F468}\u200D\u{1F3EB}","male-factory-worker":"\u{1F468}\u200D\u{1F3ED}","man-boy-boy":"\u{1F468}\u200D\u{1F466}\u200D\u{1F466}","man-boy":"\u{1F468}\u200D\u{1F466}","man-girl-boy":"\u{1F468}\u200D\u{1F467}\u200D\u{1F466}","man-girl-girl":"\u{1F468}\u200D\u{1F467}\u200D\u{1F467}","man-girl":"\u{1F468}\u200D\u{1F467}","man-man-boy":"\u{1F468}\u200D\u{1F468}\u200D\u{1F466}","man-man-boy-boy":"\u{1F468}\u200D\u{1F468}\u200D\u{1F466}\u200D\u{1F466}","man-man-girl":"\u{1F468}\u200D\u{1F468}\u200D\u{1F467}","man-man-girl-boy":"\u{1F468}\u200D\u{1F468}\u200D\u{1F467}\u200D\u{1F466}","man-man-girl-girl":"\u{1F468}\u200D\u{1F468}\u200D\u{1F467}\u200D\u{1F467}","man-woman-boy":"\u{1F468}\u200D\u{1F469}\u200D\u{1F466}",family:"\u{1F468}\u200D\u{1F469}\u200D\u{1F466}","man-woman-boy-boy":"\u{1F468}\u200D\u{1F469}\u200D\u{1F466}\u200D\u{1F466}","man-woman-girl":"\u{1F468}\u200D\u{1F469}\u200D\u{1F467}","man-woman-girl-boy":"\u{1F468}\u200D\u{1F469}\u200D\u{1F467}\u200D\u{1F466}","man-woman-girl-girl":"\u{1F468}\u200D\u{1F469}\u200D\u{1F467}\u200D\u{1F467}","male-technologist":"\u{1F468}\u200D\u{1F4BB}","male-office-worker":"\u{1F468}\u200D\u{1F4BC}","male-mechanic":"\u{1F468}\u200D\u{1F527}","male-scientist":"\u{1F468}\u200D\u{1F52C}","male-astronaut":"\u{1F468}\u200D\u{1F680}","male-firefighter":"\u{1F468}\u200D\u{1F692}",man_with_probing_cane:"\u{1F468}\u200D\u{1F9AF}",red_haired_man:"\u{1F468}\u200D\u{1F9B0}",curly_haired_man:"\u{1F468}\u200D\u{1F9B1}",bald_man:"\u{1F468}\u200D\u{1F9B2}",white_haired_man:"\u{1F468}\u200D\u{1F9B3}",man_in_motorized_wheelchair:"\u{1F468}\u200D\u{1F9BC}",man_in_manual_wheelchair:"\u{1F468}\u200D\u{1F9BD}","male-doctor":"\u{1F468}\u200D\u2695\uFE0F","male-judge":"\u{1F468}\u200D\u2696\uFE0F","male-pilot":"\u{1F468}\u200D\u2708\uFE0F","man-heart-man":"\u{1F468}\u200D\u2764\uFE0F\u200D\u{1F468}","man-kiss-man":"\u{1F468}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}",man:"\u{1F468}","female-farmer":"\u{1F469}\u200D\u{1F33E}","female-cook":"\u{1F469}\u200D\u{1F373}",woman_feeding_baby:"\u{1F469}\u200D\u{1F37C}","female-student":"\u{1F469}\u200D\u{1F393}","female-singer":"\u{1F469}\u200D\u{1F3A4}","female-artist":"\u{1F469}\u200D\u{1F3A8}","female-teacher":"\u{1F469}\u200D\u{1F3EB}","female-factory-worker":"\u{1F469}\u200D\u{1F3ED}","woman-boy-boy":"\u{1F469}\u200D\u{1F466}\u200D\u{1F466}","woman-boy":"\u{1F469}\u200D\u{1F466}","woman-girl-boy":"\u{1F469}\u200D\u{1F467}\u200D\u{1F466}","woman-girl-girl":"\u{1F469}\u200D\u{1F467}\u200D\u{1F467}","woman-girl":"\u{1F469}\u200D\u{1F467}","woman-woman-boy":"\u{1F469}\u200D\u{1F469}\u200D\u{1F466}","woman-woman-boy-boy":"\u{1F469}\u200D\u{1F469}\u200D\u{1F466}\u200D\u{1F466}","woman-woman-girl":"\u{1F469}\u200D\u{1F469}\u200D\u{1F467}","woman-woman-girl-boy":"\u{1F469}\u200D\u{1F469}\u200D\u{1F467}\u200D\u{1F466}","woman-woman-girl-girl":"\u{1F469}\u200D\u{1F469}\u200D\u{1F467}\u200D\u{1F467}","female-technologist":"\u{1F469}\u200D\u{1F4BB}","female-office-worker":"\u{1F469}\u200D\u{1F4BC}","female-mechanic":"\u{1F469}\u200D\u{1F527}","female-scientist":"\u{1F469}\u200D\u{1F52C}","female-astronaut":"\u{1F469}\u200D\u{1F680}","female-firefighter":"\u{1F469}\u200D\u{1F692}",woman_with_probing_cane:"\u{1F469}\u200D\u{1F9AF}",red_haired_woman:"\u{1F469}\u200D\u{1F9B0}",curly_haired_woman:"\u{1F469}\u200D\u{1F9B1}",bald_woman:"\u{1F469}\u200D\u{1F9B2}",white_haired_woman:"\u{1F469}\u200D\u{1F9B3}",woman_in_motorized_wheelchair:"\u{1F469}\u200D\u{1F9BC}",woman_in_manual_wheelchair:"\u{1F469}\u200D\u{1F9BD}","female-doctor":"\u{1F469}\u200D\u2695\uFE0F","female-judge":"\u{1F469}\u200D\u2696\uFE0F","female-pilot":"\u{1F469}\u200D\u2708\uFE0F","woman-heart-man":"\u{1F469}\u200D\u2764\uFE0F\u200D\u{1F468}","woman-heart-woman":"\u{1F469}\u200D\u2764\uFE0F\u200D\u{1F469}","woman-kiss-man":"\u{1F469}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F468}","woman-kiss-woman":"\u{1F469}\u200D\u2764\uFE0F\u200D\u{1F48B}\u200D\u{1F469}",woman:"\u{1F469}",man_and_woman_holding_hands:"\u{1F46B}",woman_and_man_holding_hands:"\u{1F46B}",couple:"\u{1F46B}",two_men_holding_hands:"\u{1F46C}",men_holding_hands:"\u{1F46C}",two_women_holding_hands:"\u{1F46D}",women_holding_hands:"\u{1F46D}","female-police-officer":"\u{1F46E}\u200D\u2640\uFE0F","male-police-officer":"\u{1F46E}\u200D\u2642\uFE0F",cop:"\u{1F46E}\u200D\u2642\uFE0F","women-with-bunny-ears-partying":"\u{1F46F}\u200D\u2640\uFE0F","woman-with-bunny-ears-partying":"\u{1F46F}\u200D\u2640\uFE0F",dancers:"\u{1F46F}\u200D\u2640\uFE0F","men-with-bunny-ears-partying":"\u{1F46F}\u200D\u2642\uFE0F","man-with-bunny-ears-partying":"\u{1F46F}\u200D\u2642\uFE0F",woman_with_veil:"\u{1F470}\u200D\u2640\uFE0F",man_with_veil:"\u{1F470}\u200D\u2642\uFE0F",bride_with_veil:"\u{1F470}","blond-haired-woman":"\u{1F471}\u200D\u2640\uFE0F","blond-haired-man":"\u{1F471}\u200D\u2642\uFE0F",person_with_blond_hair:"\u{1F471}\u200D\u2642\uFE0F",man_with_gua_pi_mao:"\u{1F472}","woman-wearing-turban":"\u{1F473}\u200D\u2640\uFE0F",woman_with_turban:"\u{1F473}\u200D\u2640\uFE0F","man-wearing-turban":"\u{1F473}\u200D\u2642\uFE0F",man_with_turban:"\u{1F473}\u200D\u2642\uFE0F",older_man:"\u{1F474}",older_woman:"\u{1F475}",baby:"\u{1F476}","female-construction-worker":"\u{1F477}\u200D\u2640\uFE0F","male-construction-worker":"\u{1F477}\u200D\u2642\uFE0F",construction_worker:"\u{1F477}\u200D\u2642\uFE0F",princess:"\u{1F478}",japanese_ogre:"\u{1F479}",japanese_goblin:"\u{1F47A}",ghost:"\u{1F47B}",angel:"\u{1F47C}",alien:"\u{1F47D}",space_invader:"\u{1F47E}",imp:"\u{1F47F}",skull:"\u{1F480}","woman-tipping-hand":"\u{1F481}\u200D\u2640\uFE0F",information_desk_person:"\u{1F481}\u200D\u2640\uFE0F",tipping_hand_woman:"\u{1F481}\u200D\u2640\uFE0F","man-tipping-hand":"\u{1F481}\u200D\u2642\uFE0F",tipping_hand_man:"\u{1F481}\u200D\u2642\uFE0F","female-guard":"\u{1F482}\u200D\u2640\uFE0F",guardswoman:"\u{1F482}\u200D\u2640\uFE0F","male-guard":"\u{1F482}\u200D\u2642\uFE0F",guardsman:"\u{1F482}\u200D\u2642\uFE0F",dancer:"\u{1F483}",lipstick:"\u{1F484}",nail_care:"\u{1F485}","woman-getting-massage":"\u{1F486}\u200D\u2640\uFE0F",massage:"\u{1F486}\u200D\u2640\uFE0F","man-getting-massage":"\u{1F486}\u200D\u2642\uFE0F","woman-getting-haircut":"\u{1F487}\u200D\u2640\uFE0F",haircut:"\u{1F487}\u200D\u2640\uFE0F","man-getting-haircut":"\u{1F487}\u200D\u2642\uFE0F",barber:"\u{1F488}",syringe:"\u{1F489}",pill:"\u{1F48A}",kiss:"\u{1F48B}",love_letter:"\u{1F48C}",ring:"\u{1F48D}",gem:"\u{1F48E}",couplekiss:"\u{1F48F}",bouquet:"\u{1F490}",couple_with_heart:"\u{1F491}",wedding:"\u{1F492}",heartbeat:"\u{1F493}",broken_heart:"\u{1F494}",two_hearts:"\u{1F495}",sparkling_heart:"\u{1F496}",heartpulse:"\u{1F497}",cupid:"\u{1F498}",blue_heart:"\u{1F499}",green_heart:"\u{1F49A}",yellow_heart:"\u{1F49B}",purple_heart:"\u{1F49C}",gift_heart:"\u{1F49D}",revolving_hearts:"\u{1F49E}",heart_decoration:"\u{1F49F}",diamond_shape_with_a_dot_inside:"\u{1F4A0}",bulb:"\u{1F4A1}",anger:"\u{1F4A2}",bomb:"\u{1F4A3}",zzz:"\u{1F4A4}",boom:"\u{1F4A5}",collision:"\u{1F4A5}",sweat_drops:"\u{1F4A6}",droplet:"\u{1F4A7}",dash:"\u{1F4A8}",hankey:"\u{1F4A9}",poop:"\u{1F4A9}",shit:"\u{1F4A9}",muscle:"\u{1F4AA}",dizzy:"\u{1F4AB}",speech_balloon:"\u{1F4AC}",thought_balloon:"\u{1F4AD}",white_flower:"\u{1F4AE}",moneybag:"\u{1F4B0}",currency_exchange:"\u{1F4B1}",heavy_dollar_sign:"\u{1F4B2}",credit_card:"\u{1F4B3}",yen:"\u{1F4B4}",dollar:"\u{1F4B5}",euro:"\u{1F4B6}",pound:"\u{1F4B7}",money_with_wings:"\u{1F4B8}",chart:"\u{1F4B9}",seat:"\u{1F4BA}",computer:"\u{1F4BB}",briefcase:"\u{1F4BC}",minidisc:"\u{1F4BD}",floppy_disk:"\u{1F4BE}",cd:"\u{1F4BF}",dvd:"\u{1F4C0}",file_folder:"\u{1F4C1}",open_file_folder:"\u{1F4C2}",page_with_curl:"\u{1F4C3}",page_facing_up:"\u{1F4C4}",date:"\u{1F4C5}",calendar:"\u{1F4C6}",card_index:"\u{1F4C7}",chart_with_upwards_trend:"\u{1F4C8}",chart_with_downwards_trend:"\u{1F4C9}",bar_chart:"\u{1F4CA}",clipboard:"\u{1F4CB}",pushpin:"\u{1F4CC}",round_pushpin:"\u{1F4CD}",paperclip:"\u{1F4CE}",straight_ruler:"\u{1F4CF}",triangular_ruler:"\u{1F4D0}",bookmark_tabs:"\u{1F4D1}",ledger:"\u{1F4D2}",notebook:"\u{1F4D3}",notebook_with_decorative_cover:"\u{1F4D4}",closed_book:"\u{1F4D5}",book:"\u{1F4D6}",open_book:"\u{1F4D6}",green_book:"\u{1F4D7}",blue_book:"\u{1F4D8}",orange_book:"\u{1F4D9}",books:"\u{1F4DA}",name_badge:"\u{1F4DB}",scroll:"\u{1F4DC}",memo:"\u{1F4DD}",pencil:"\u{1F4DD}",telephone_receiver:"\u{1F4DE}",pager:"\u{1F4DF}",fax:"\u{1F4E0}",satellite_antenna:"\u{1F4E1}",loudspeaker:"\u{1F4E2}",mega:"\u{1F4E3}",outbox_tray:"\u{1F4E4}",inbox_tray:"\u{1F4E5}",package:"\u{1F4E6}","e-mail":"\u{1F4E7}",incoming_envelope:"\u{1F4E8}",envelope_with_arrow:"\u{1F4E9}",mailbox_closed:"\u{1F4EA}",mailbox:"\u{1F4EB}",mailbox_with_mail:"\u{1F4EC}",mailbox_with_no_mail:"\u{1F4ED}",postbox:"\u{1F4EE}",postal_horn:"\u{1F4EF}",newspaper:"\u{1F4F0}",iphone:"\u{1F4F1}",calling:"\u{1F4F2}",vibration_mode:"\u{1F4F3}",mobile_phone_off:"\u{1F4F4}",no_mobile_phones:"\u{1F4F5}",signal_strength:"\u{1F4F6}",camera:"\u{1F4F7}",camera_with_flash:"\u{1F4F8}",video_camera:"\u{1F4F9}",tv:"\u{1F4FA}",radio:"\u{1F4FB}",vhs:"\u{1F4FC}",film_projector:"\u{1F4FD}\uFE0F",prayer_beads:"\u{1F4FF}",twisted_rightwards_arrows:"\u{1F500}",repeat:"\u{1F501}",repeat_one:"\u{1F502}",arrows_clockwise:"\u{1F503}",arrows_counterclockwise:"\u{1F504}",low_brightness:"\u{1F505}",high_brightness:"\u{1F506}",mute:"\u{1F507}",speaker:"\u{1F508}",sound:"\u{1F509}",loud_sound:"\u{1F50A}",battery:"\u{1F50B}",electric_plug:"\u{1F50C}",mag:"\u{1F50D}",mag_right:"\u{1F50E}",lock_with_ink_pen:"\u{1F50F}",closed_lock_with_key:"\u{1F510}",key:"\u{1F511}",lock:"\u{1F512}",unlock:"\u{1F513}",bell:"\u{1F514}",no_bell:"\u{1F515}",bookmark:"\u{1F516}",link:"\u{1F517}",radio_button:"\u{1F518}",back:"\u{1F519}",end:"\u{1F51A}",on:"\u{1F51B}",soon:"\u{1F51C}",top:"\u{1F51D}",underage:"\u{1F51E}",keycap_ten:"\u{1F51F}",capital_abcd:"\u{1F520}",abcd:"\u{1F521}",symbols:"\u{1F523}",abc:"\u{1F524}",fire:"\u{1F525}",flashlight:"\u{1F526}",wrench:"\u{1F527}",hammer:"\u{1F528}",nut_and_bolt:"\u{1F529}",hocho:"\u{1F52A}",knife:"\u{1F52A}",gun:"\u{1F52B}",microscope:"\u{1F52C}",telescope:"\u{1F52D}",crystal_ball:"\u{1F52E}",six_pointed_star:"\u{1F52F}",beginner:"\u{1F530}",trident:"\u{1F531}",black_square_button:"\u{1F532}",white_square_button:"\u{1F533}",red_circle:"\u{1F534}",large_blue_circle:"\u{1F535}",large_orange_diamond:"\u{1F536}",large_blue_diamond:"\u{1F537}",small_orange_diamond:"\u{1F538}",small_blue_diamond:"\u{1F539}",small_red_triangle:"\u{1F53A}",small_red_triangle_down:"\u{1F53B}",arrow_up_small:"\u{1F53C}",arrow_down_small:"\u{1F53D}",om_symbol:"\u{1F549}\uFE0F",dove_of_peace:"\u{1F54A}\uFE0F",kaaba:"\u{1F54B}",mosque:"\u{1F54C}",synagogue:"\u{1F54D}",menorah_with_nine_branches:"\u{1F54E}",clock1:"\u{1F550}",clock2:"\u{1F551}",clock3:"\u{1F552}",clock4:"\u{1F553}",clock5:"\u{1F554}",clock6:"\u{1F555}",clock7:"\u{1F556}",clock8:"\u{1F557}",clock9:"\u{1F558}",clock10:"\u{1F559}",clock11:"\u{1F55A}",clock12:"\u{1F55B}",clock130:"\u{1F55C}",clock230:"\u{1F55D}",clock330:"\u{1F55E}",clock430:"\u{1F55F}",clock530:"\u{1F560}",clock630:"\u{1F561}",clock730:"\u{1F562}",clock830:"\u{1F563}",clock930:"\u{1F564}",clock1030:"\u{1F565}",clock1130:"\u{1F566}",clock1230:"\u{1F567}",candle:"\u{1F56F}\uFE0F",mantelpiece_clock:"\u{1F570}\uFE0F",hole:"\u{1F573}\uFE0F",man_in_business_suit_levitating:"\u{1F574}\uFE0F","female-detective":"\u{1F575}\uFE0F\u200D\u2640\uFE0F","male-detective":"\u{1F575}\uFE0F\u200D\u2642\uFE0F",sleuth_or_spy:"\u{1F575}\uFE0F\u200D\u2642\uFE0F",dark_sunglasses:"\u{1F576}\uFE0F",spider:"\u{1F577}\uFE0F",spider_web:"\u{1F578}\uFE0F",joystick:"\u{1F579}\uFE0F",man_dancing:"\u{1F57A}",linked_paperclips:"\u{1F587}\uFE0F",lower_left_ballpoint_pen:"\u{1F58A}\uFE0F",lower_left_fountain_pen:"\u{1F58B}\uFE0F",lower_left_paintbrush:"\u{1F58C}\uFE0F",lower_left_crayon:"\u{1F58D}\uFE0F",raised_hand_with_fingers_splayed:"\u{1F590}\uFE0F",middle_finger:"\u{1F595}",reversed_hand_with_middle_finger_extended:"\u{1F595}","spock-hand":"\u{1F596}",black_heart:"\u{1F5A4}",desktop_computer:"\u{1F5A5}\uFE0F",printer:"\u{1F5A8}\uFE0F",three_button_mouse:"\u{1F5B1}\uFE0F",trackball:"\u{1F5B2}\uFE0F",frame_with_picture:"\u{1F5BC}\uFE0F",card_index_dividers:"\u{1F5C2}\uFE0F",card_file_box:"\u{1F5C3}\uFE0F",file_cabinet:"\u{1F5C4}\uFE0F",wastebasket:"\u{1F5D1}\uFE0F",spiral_note_pad:"\u{1F5D2}\uFE0F",spiral_calendar_pad:"\u{1F5D3}\uFE0F",compression:"\u{1F5DC}\uFE0F",old_key:"\u{1F5DD}\uFE0F",rolled_up_newspaper:"\u{1F5DE}\uFE0F",dagger_knife:"\u{1F5E1}\uFE0F",speaking_head_in_silhouette:"\u{1F5E3}\uFE0F",left_speech_bubble:"\u{1F5E8}\uFE0F",right_anger_bubble:"\u{1F5EF}\uFE0F",ballot_box_with_ballot:"\u{1F5F3}\uFE0F",world_map:"\u{1F5FA}\uFE0F",mount_fuji:"\u{1F5FB}",tokyo_tower:"\u{1F5FC}",statue_of_liberty:"\u{1F5FD}",japan:"\u{1F5FE}",moyai:"\u{1F5FF}",grinning:"\u{1F600}",grin:"\u{1F601}",joy:"\u{1F602}",smiley:"\u{1F603}",smile:"\u{1F604}",sweat_smile:"\u{1F605}",laughing:"\u{1F606}",satisfied:"\u{1F606}",innocent:"\u{1F607}",smiling_imp:"\u{1F608}",wink:"\u{1F609}",blush:"\u{1F60A}",yum:"\u{1F60B}",relieved:"\u{1F60C}",heart_eyes:"\u{1F60D}",sunglasses:"\u{1F60E}",smirk:"\u{1F60F}",neutral_face:"\u{1F610}",expressionless:"\u{1F611}",unamused:"\u{1F612}",sweat:"\u{1F613}",pensive:"\u{1F614}",confused:"\u{1F615}",confounded:"\u{1F616}",kissing:"\u{1F617}",kissing_heart:"\u{1F618}",kissing_smiling_eyes:"\u{1F619}",kissing_closed_eyes:"\u{1F61A}",stuck_out_tongue:"\u{1F61B}",stuck_out_tongue_winking_eye:"\u{1F61C}",stuck_out_tongue_closed_eyes:"\u{1F61D}",disappointed:"\u{1F61E}",worried:"\u{1F61F}",angry:"\u{1F620}",rage:"\u{1F621}",cry:"\u{1F622}",persevere:"\u{1F623}",triumph:"\u{1F624}",disappointed_relieved:"\u{1F625}",frowning:"\u{1F626}",anguished:"\u{1F627}",fearful:"\u{1F628}",weary:"\u{1F629}",sleepy:"\u{1F62A}",tired_face:"\u{1F62B}",grimacing:"\u{1F62C}",sob:"\u{1F62D}",face_exhaling:"\u{1F62E}\u200D\u{1F4A8}",open_mouth:"\u{1F62E}",hushed:"\u{1F62F}",cold_sweat:"\u{1F630}",scream:"\u{1F631}",astonished:"\u{1F632}",flushed:"\u{1F633}",sleeping:"\u{1F634}",face_with_spiral_eyes:"\u{1F635}\u200D\u{1F4AB}",dizzy_face:"\u{1F635}",face_in_clouds:"\u{1F636}\u200D\u{1F32B}\uFE0F",no_mouth:"\u{1F636}",mask:"\u{1F637}",smile_cat:"\u{1F638}",joy_cat:"\u{1F639}",smiley_cat:"\u{1F63A}",heart_eyes_cat:"\u{1F63B}",smirk_cat:"\u{1F63C}",kissing_cat:"\u{1F63D}",pouting_cat:"\u{1F63E}",crying_cat_face:"\u{1F63F}",scream_cat:"\u{1F640}",slightly_frowning_face:"\u{1F641}",slightly_smiling_face:"\u{1F642}",upside_down_face:"\u{1F643}",face_with_rolling_eyes:"\u{1F644}","woman-gesturing-no":"\u{1F645}\u200D\u2640\uFE0F",no_good:"\u{1F645}\u200D\u2640\uFE0F","man-gesturing-no":"\u{1F645}\u200D\u2642\uFE0F","woman-gesturing-ok":"\u{1F646}\u200D\u2640\uFE0F",ok_woman:"\u{1F646}\u200D\u2640\uFE0F","man-gesturing-ok":"\u{1F646}\u200D\u2642\uFE0F","woman-bowing":"\u{1F647}\u200D\u2640\uFE0F",bowing_woman:"\u{1F647}\u200D\u2640\uFE0F","man-bowing":"\u{1F647}\u200D\u2642\uFE0F",bow:"\u{1F647}\u200D\u2642\uFE0F",bowing_man:"\u{1F647}\u200D\u2642\uFE0F",see_no_evil:"\u{1F648}",hear_no_evil:"\u{1F649}",speak_no_evil:"\u{1F64A}","woman-raising-hand":"\u{1F64B}\u200D\u2640\uFE0F",raising_hand:"\u{1F64B}\u200D\u2640\uFE0F",raising_hand_woman:"\u{1F64B}\u200D\u2640\uFE0F","man-raising-hand":"\u{1F64B}\u200D\u2642\uFE0F",raising_hand_man:"\u{1F64B}\u200D\u2642\uFE0F",raised_hands:"\u{1F64C}","woman-frowning":"\u{1F64D}\u200D\u2640\uFE0F",person_frowning:"\u{1F64D}\u200D\u2640\uFE0F",frowning_woman:"\u{1F64D}\u200D\u2640\uFE0F","man-frowning":"\u{1F64D}\u200D\u2642\uFE0F",frowning_man:"\u{1F64D}\u200D\u2642\uFE0F","woman-pouting":"\u{1F64E}\u200D\u2640\uFE0F",person_with_pouting_face:"\u{1F64E}\u200D\u2640\uFE0F",pouting_woman:"\u{1F64E}\u200D\u2640\uFE0F","man-pouting":"\u{1F64E}\u200D\u2642\uFE0F",pouting_man:"\u{1F64E}\u200D\u2642\uFE0F",pray:"\u{1F64F}",rocket:"\u{1F680}",helicopter:"\u{1F681}",steam_locomotive:"\u{1F682}",railway_car:"\u{1F683}",bullettrain_side:"\u{1F684}",bullettrain_front:"\u{1F685}",train2:"\u{1F686}",metro:"\u{1F687}",light_rail:"\u{1F688}",station:"\u{1F689}",tram:"\u{1F68A}",train:"\u{1F68B}",bus:"\u{1F68C}",oncoming_bus:"\u{1F68D}",trolleybus:"\u{1F68E}",busstop:"\u{1F68F}",minibus:"\u{1F690}",ambulance:"\u{1F691}",fire_engine:"\u{1F692}",police_car:"\u{1F693}",oncoming_police_car:"\u{1F694}",taxi:"\u{1F695}",oncoming_taxi:"\u{1F696}",car:"\u{1F697}",red_car:"\u{1F697}",oncoming_automobile:"\u{1F698}",blue_car:"\u{1F699}",truck:"\u{1F69A}",articulated_lorry:"\u{1F69B}",tractor:"\u{1F69C}",monorail:"\u{1F69D}",mountain_railway:"\u{1F69E}",suspension_railway:"\u{1F69F}",mountain_cableway:"\u{1F6A0}",aerial_tramway:"\u{1F6A1}",ship:"\u{1F6A2}","woman-rowing-boat":"\u{1F6A3}\u200D\u2640\uFE0F",rowing_woman:"\u{1F6A3}\u200D\u2640\uFE0F","man-rowing-boat":"\u{1F6A3}\u200D\u2642\uFE0F",rowboat:"\u{1F6A3}\u200D\u2642\uFE0F",rowing_man:"\u{1F6A3}\u200D\u2642\uFE0F",speedboat:"\u{1F6A4}",traffic_light:"\u{1F6A5}",vertical_traffic_light:"\u{1F6A6}",construction:"\u{1F6A7}",rotating_light:"\u{1F6A8}",triangular_flag_on_post:"\u{1F6A9}",door:"\u{1F6AA}",no_entry_sign:"\u{1F6AB}",smoking:"\u{1F6AC}",no_smoking:"\u{1F6AD}",put_litter_in_its_place:"\u{1F6AE}",do_not_litter:"\u{1F6AF}",potable_water:"\u{1F6B0}","non-potable_water":"\u{1F6B1}",bike:"\u{1F6B2}",no_bicycles:"\u{1F6B3}","woman-biking":"\u{1F6B4}\u200D\u2640\uFE0F",biking_woman:"\u{1F6B4}\u200D\u2640\uFE0F","man-biking":"\u{1F6B4}\u200D\u2642\uFE0F",bicyclist:"\u{1F6B4}\u200D\u2642\uFE0F",biking_man:"\u{1F6B4}\u200D\u2642\uFE0F","woman-mountain-biking":"\u{1F6B5}\u200D\u2640\uFE0F",mountain_biking_woman:"\u{1F6B5}\u200D\u2640\uFE0F","man-mountain-biking":"\u{1F6B5}\u200D\u2642\uFE0F",mountain_bicyclist:"\u{1F6B5}\u200D\u2642\uFE0F",mountain_biking_man:"\u{1F6B5}\u200D\u2642\uFE0F","woman-walking":"\u{1F6B6}\u200D\u2640\uFE0F",walking_woman:"\u{1F6B6}\u200D\u2640\uFE0F","man-walking":"\u{1F6B6}\u200D\u2642\uFE0F",walking:"\u{1F6B6}\u200D\u2642\uFE0F",walking_man:"\u{1F6B6}\u200D\u2642\uFE0F",no_pedestrians:"\u{1F6B7}",children_crossing:"\u{1F6B8}",mens:"\u{1F6B9}",womens:"\u{1F6BA}",restroom:"\u{1F6BB}",baby_symbol:"\u{1F6BC}",toilet:"\u{1F6BD}",wc:"\u{1F6BE}",shower:"\u{1F6BF}",bath:"\u{1F6C0}",bathtub:"\u{1F6C1}",passport_control:"\u{1F6C2}",customs:"\u{1F6C3}",baggage_claim:"\u{1F6C4}",left_luggage:"\u{1F6C5}",couch_and_lamp:"\u{1F6CB}\uFE0F",sleeping_accommodation:"\u{1F6CC}",shopping_bags:"\u{1F6CD}\uFE0F",bellhop_bell:"\u{1F6CE}\uFE0F",bed:"\u{1F6CF}\uFE0F",place_of_worship:"\u{1F6D0}",octagonal_sign:"\u{1F6D1}",shopping_trolley:"\u{1F6D2}",hindu_temple:"\u{1F6D5}",hut:"\u{1F6D6}",elevator:"\u{1F6D7}",hammer_and_wrench:"\u{1F6E0}\uFE0F",shield:"\u{1F6E1}\uFE0F",oil_drum:"\u{1F6E2}\uFE0F",motorway:"\u{1F6E3}\uFE0F",railway_track:"\u{1F6E4}\uFE0F",motor_boat:"\u{1F6E5}\uFE0F",small_airplane:"\u{1F6E9}\uFE0F",airplane_departure:"\u{1F6EB}",airplane_arriving:"\u{1F6EC}",satellite:"\u{1F6F0}\uFE0F",passenger_ship:"\u{1F6F3}\uFE0F",scooter:"\u{1F6F4}",motor_scooter:"\u{1F6F5}",canoe:"\u{1F6F6}",sled:"\u{1F6F7}",flying_saucer:"\u{1F6F8}",skateboard:"\u{1F6F9}",auto_rickshaw:"\u{1F6FA}",pickup_truck:"\u{1F6FB}",roller_skate:"\u{1F6FC}",large_orange_circle:"\u{1F7E0}",large_yellow_circle:"\u{1F7E1}",large_green_circle:"\u{1F7E2}",large_purple_circle:"\u{1F7E3}",large_brown_circle:"\u{1F7E4}",large_red_square:"\u{1F7E5}",large_blue_square:"\u{1F7E6}",large_orange_square:"\u{1F7E7}",large_yellow_square:"\u{1F7E8}",large_green_square:"\u{1F7E9}",large_purple_square:"\u{1F7EA}",large_brown_square:"\u{1F7EB}",pinched_fingers:"\u{1F90C}",white_heart:"\u{1F90D}",brown_heart:"\u{1F90E}",pinching_hand:"\u{1F90F}",zipper_mouth_face:"\u{1F910}",money_mouth_face:"\u{1F911}",face_with_thermometer:"\u{1F912}",nerd_face:"\u{1F913}",thinking_face:"\u{1F914}",face_with_head_bandage:"\u{1F915}",robot_face:"\u{1F916}",hugging_face:"\u{1F917}",the_horns:"\u{1F918}",sign_of_the_horns:"\u{1F918}",call_me_hand:"\u{1F919}",raised_back_of_hand:"\u{1F91A}","left-facing_fist":"\u{1F91B}","right-facing_fist":"\u{1F91C}",handshake:"\u{1F91D}",crossed_fingers:"\u{1F91E}",hand_with_index_and_middle_fingers_crossed:"\u{1F91E}",i_love_you_hand_sign:"\u{1F91F}",face_with_cowboy_hat:"\u{1F920}",clown_face:"\u{1F921}",nauseated_face:"\u{1F922}",rolling_on_the_floor_laughing:"\u{1F923}",drooling_face:"\u{1F924}",lying_face:"\u{1F925}","woman-facepalming":"\u{1F926}\u200D\u2640\uFE0F","man-facepalming":"\u{1F926}\u200D\u2642\uFE0F",face_palm:"\u{1F926}",sneezing_face:"\u{1F927}",face_with_raised_eyebrow:"\u{1F928}",face_with_one_eyebrow_raised:"\u{1F928}","star-struck":"\u{1F929}",grinning_face_with_star_eyes:"\u{1F929}",zany_face:"\u{1F92A}",grinning_face_with_one_large_and_one_small_eye:"\u{1F92A}",shushing_face:"\u{1F92B}",face_with_finger_covering_closed_lips:"\u{1F92B}",face_with_symbols_on_mouth:"\u{1F92C}",serious_face_with_symbols_covering_mouth:"\u{1F92C}",face_with_hand_over_mouth:"\u{1F92D}",smiling_face_with_smiling_eyes_and_hand_covering_mouth:"\u{1F92D}",face_vomiting:"\u{1F92E}",face_with_open_mouth_vomiting:"\u{1F92E}",exploding_head:"\u{1F92F}",shocked_face_with_exploding_head:"\u{1F92F}",pregnant_woman:"\u{1F930}","breast-feeding":"\u{1F931}",palms_up_together:"\u{1F932}",selfie:"\u{1F933}",prince:"\u{1F934}",woman_in_tuxedo:"\u{1F935}\u200D\u2640\uFE0F",man_in_tuxedo:"\u{1F935}\u200D\u2642\uFE0F",person_in_tuxedo:"\u{1F935}",mrs_claus:"\u{1F936}",mother_christmas:"\u{1F936}","woman-shrugging":"\u{1F937}\u200D\u2640\uFE0F","man-shrugging":"\u{1F937}\u200D\u2642\uFE0F",shrug:"\u{1F937}","woman-cartwheeling":"\u{1F938}\u200D\u2640\uFE0F","man-cartwheeling":"\u{1F938}\u200D\u2642\uFE0F",person_doing_cartwheel:"\u{1F938}","woman-juggling":"\u{1F939}\u200D\u2640\uFE0F","man-juggling":"\u{1F939}\u200D\u2642\uFE0F",juggling:"\u{1F939}",fencer:"\u{1F93A}","woman-wrestling":"\u{1F93C}\u200D\u2640\uFE0F","man-wrestling":"\u{1F93C}\u200D\u2642\uFE0F",wrestlers:"\u{1F93C}","woman-playing-water-polo":"\u{1F93D}\u200D\u2640\uFE0F","man-playing-water-polo":"\u{1F93D}\u200D\u2642\uFE0F",water_polo:"\u{1F93D}","woman-playing-handball":"\u{1F93E}\u200D\u2640\uFE0F","man-playing-handball":"\u{1F93E}\u200D\u2642\uFE0F",handball:"\u{1F93E}",diving_mask:"\u{1F93F}",wilted_flower:"\u{1F940}",drum_with_drumsticks:"\u{1F941}",clinking_glasses:"\u{1F942}",tumbler_glass:"\u{1F943}",spoon:"\u{1F944}",goal_net:"\u{1F945}",first_place_medal:"\u{1F947}",second_place_medal:"\u{1F948}",third_place_medal:"\u{1F949}",boxing_glove:"\u{1F94A}",martial_arts_uniform:"\u{1F94B}",curling_stone:"\u{1F94C}",lacrosse:"\u{1F94D}",softball:"\u{1F94E}",flying_disc:"\u{1F94F}",croissant:"\u{1F950}",avocado:"\u{1F951}",cucumber:"\u{1F952}",bacon:"\u{1F953}",potato:"\u{1F954}",carrot:"\u{1F955}",baguette_bread:"\u{1F956}",green_salad:"\u{1F957}",shallow_pan_of_food:"\u{1F958}",stuffed_flatbread:"\u{1F959}",egg:"\u{1F95A}",glass_of_milk:"\u{1F95B}",peanuts:"\u{1F95C}",kiwifruit:"\u{1F95D}",pancakes:"\u{1F95E}",dumpling:"\u{1F95F}",fortune_cookie:"\u{1F960}",takeout_box:"\u{1F961}",chopsticks:"\u{1F962}",bowl_with_spoon:"\u{1F963}",cup_with_straw:"\u{1F964}",coconut:"\u{1F965}",broccoli:"\u{1F966}",pie:"\u{1F967}",pretzel:"\u{1F968}",cut_of_meat:"\u{1F969}",sandwich:"\u{1F96A}",canned_food:"\u{1F96B}",leafy_green:"\u{1F96C}",mango:"\u{1F96D}",moon_cake:"\u{1F96E}",bagel:"\u{1F96F}",smiling_face_with_3_hearts:"\u{1F970}",yawning_face:"\u{1F971}",smiling_face_with_tear:"\u{1F972}",partying_face:"\u{1F973}",woozy_face:"\u{1F974}",hot_face:"\u{1F975}",cold_face:"\u{1F976}",ninja:"\u{1F977}",disguised_face:"\u{1F978}",pleading_face:"\u{1F97A}",sari:"\u{1F97B}",lab_coat:"\u{1F97C}",goggles:"\u{1F97D}",hiking_boot:"\u{1F97E}",womans_flat_shoe:"\u{1F97F}",crab:"\u{1F980}",lion_face:"\u{1F981}",scorpion:"\u{1F982}",turkey:"\u{1F983}",unicorn_face:"\u{1F984}",eagle:"\u{1F985}",duck:"\u{1F986}",bat:"\u{1F987}",shark:"\u{1F988}",owl:"\u{1F989}",fox_face:"\u{1F98A}",butterfly:"\u{1F98B}",deer:"\u{1F98C}",gorilla:"\u{1F98D}",lizard:"\u{1F98E}",rhinoceros:"\u{1F98F}",shrimp:"\u{1F990}",squid:"\u{1F991}",giraffe_face:"\u{1F992}",zebra_face:"\u{1F993}",hedgehog:"\u{1F994}",sauropod:"\u{1F995}","t-rex":"\u{1F996}",cricket:"\u{1F997}",kangaroo:"\u{1F998}",llama:"\u{1F999}",peacock:"\u{1F99A}",hippopotamus:"\u{1F99B}",parrot:"\u{1F99C}",raccoon:"\u{1F99D}",lobster:"\u{1F99E}",mosquito:"\u{1F99F}",microbe:"\u{1F9A0}",badger:"\u{1F9A1}",swan:"\u{1F9A2}",mammoth:"\u{1F9A3}",dodo:"\u{1F9A4}",sloth:"\u{1F9A5}",otter:"\u{1F9A6}",orangutan:"\u{1F9A7}",skunk:"\u{1F9A8}",flamingo:"\u{1F9A9}",oyster:"\u{1F9AA}",beaver:"\u{1F9AB}",bison:"\u{1F9AC}",seal:"\u{1F9AD}",guide_dog:"\u{1F9AE}",probing_cane:"\u{1F9AF}",bone:"\u{1F9B4}",leg:"\u{1F9B5}",foot:"\u{1F9B6}",tooth:"\u{1F9B7}",female_superhero:"\u{1F9B8}\u200D\u2640\uFE0F",male_superhero:"\u{1F9B8}\u200D\u2642\uFE0F",superhero:"\u{1F9B8}",female_supervillain:"\u{1F9B9}\u200D\u2640\uFE0F",male_supervillain:"\u{1F9B9}\u200D\u2642\uFE0F",supervillain:"\u{1F9B9}",safety_vest:"\u{1F9BA}",ear_with_hearing_aid:"\u{1F9BB}",motorized_wheelchair:"\u{1F9BC}",manual_wheelchair:"\u{1F9BD}",mechanical_arm:"\u{1F9BE}",mechanical_leg:"\u{1F9BF}",cheese_wedge:"\u{1F9C0}",cupcake:"\u{1F9C1}",salt:"\u{1F9C2}",beverage_box:"\u{1F9C3}",garlic:"\u{1F9C4}",onion:"\u{1F9C5}",falafel:"\u{1F9C6}",waffle:"\u{1F9C7}",butter:"\u{1F9C8}",mate_drink:"\u{1F9C9}",ice_cube:"\u{1F9CA}",bubble_tea:"\u{1F9CB}",woman_standing:"\u{1F9CD}\u200D\u2640\uFE0F",man_standing:"\u{1F9CD}\u200D\u2642\uFE0F",standing_person:"\u{1F9CD}",woman_kneeling:"\u{1F9CE}\u200D\u2640\uFE0F",man_kneeling:"\u{1F9CE}\u200D\u2642\uFE0F",kneeling_person:"\u{1F9CE}",deaf_woman:"\u{1F9CF}\u200D\u2640\uFE0F",deaf_man:"\u{1F9CF}\u200D\u2642\uFE0F",deaf_person:"\u{1F9CF}",face_with_monocle:"\u{1F9D0}",farmer:"\u{1F9D1}\u200D\u{1F33E}",cook:"\u{1F9D1}\u200D\u{1F373}",person_feeding_baby:"\u{1F9D1}\u200D\u{1F37C}",mx_claus:"\u{1F9D1}\u200D\u{1F384}",student:"\u{1F9D1}\u200D\u{1F393}",singer:"\u{1F9D1}\u200D\u{1F3A4}",artist:"\u{1F9D1}\u200D\u{1F3A8}",teacher:"\u{1F9D1}\u200D\u{1F3EB}",factory_worker:"\u{1F9D1}\u200D\u{1F3ED}",technologist:"\u{1F9D1}\u200D\u{1F4BB}",office_worker:"\u{1F9D1}\u200D\u{1F4BC}",mechanic:"\u{1F9D1}\u200D\u{1F527}",scientist:"\u{1F9D1}\u200D\u{1F52C}",astronaut:"\u{1F9D1}\u200D\u{1F680}",firefighter:"\u{1F9D1}\u200D\u{1F692}",people_holding_hands:"\u{1F9D1}\u200D\u{1F91D}\u200D\u{1F9D1}",person_with_probing_cane:"\u{1F9D1}\u200D\u{1F9AF}",red_haired_person:"\u{1F9D1}\u200D\u{1F9B0}",curly_haired_person:"\u{1F9D1}\u200D\u{1F9B1}",bald_person:"\u{1F9D1}\u200D\u{1F9B2}",white_haired_person:"\u{1F9D1}\u200D\u{1F9B3}",person_in_motorized_wheelchair:"\u{1F9D1}\u200D\u{1F9BC}",person_in_manual_wheelchair:"\u{1F9D1}\u200D\u{1F9BD}",health_worker:"\u{1F9D1}\u200D\u2695\uFE0F",judge:"\u{1F9D1}\u200D\u2696\uFE0F",pilot:"\u{1F9D1}\u200D\u2708\uFE0F",adult:"\u{1F9D1}",child:"\u{1F9D2}",older_adult:"\u{1F9D3}",woman_with_beard:"\u{1F9D4}\u200D\u2640\uFE0F",man_with_beard:"\u{1F9D4}\u200D\u2642\uFE0F",bearded_person:"\u{1F9D4}",person_with_headscarf:"\u{1F9D5}",woman_in_steamy_room:"\u{1F9D6}\u200D\u2640\uFE0F",man_in_steamy_room:"\u{1F9D6}\u200D\u2642\uFE0F",person_in_steamy_room:"\u{1F9D6}\u200D\u2642\uFE0F",woman_climbing:"\u{1F9D7}\u200D\u2640\uFE0F",person_climbing:"\u{1F9D7}\u200D\u2640\uFE0F",man_climbing:"\u{1F9D7}\u200D\u2642\uFE0F",woman_in_lotus_position:"\u{1F9D8}\u200D\u2640\uFE0F",person_in_lotus_position:"\u{1F9D8}\u200D\u2640\uFE0F",man_in_lotus_position:"\u{1F9D8}\u200D\u2642\uFE0F",female_mage:"\u{1F9D9}\u200D\u2640\uFE0F",mage:"\u{1F9D9}\u200D\u2640\uFE0F",male_mage:"\u{1F9D9}\u200D\u2642\uFE0F",female_fairy:"\u{1F9DA}\u200D\u2640\uFE0F",fairy:"\u{1F9DA}\u200D\u2640\uFE0F",male_fairy:"\u{1F9DA}\u200D\u2642\uFE0F",female_vampire:"\u{1F9DB}\u200D\u2640\uFE0F",vampire:"\u{1F9DB}\u200D\u2640\uFE0F",male_vampire:"\u{1F9DB}\u200D\u2642\uFE0F",mermaid:"\u{1F9DC}\u200D\u2640\uFE0F",merman:"\u{1F9DC}\u200D\u2642\uFE0F",merperson:"\u{1F9DC}\u200D\u2642\uFE0F",female_elf:"\u{1F9DD}\u200D\u2640\uFE0F",male_elf:"\u{1F9DD}\u200D\u2642\uFE0F",elf:"\u{1F9DD}\u200D\u2642\uFE0F",female_genie:"\u{1F9DE}\u200D\u2640\uFE0F",male_genie:"\u{1F9DE}\u200D\u2642\uFE0F",genie:"\u{1F9DE}\u200D\u2642\uFE0F",female_zombie:"\u{1F9DF}\u200D\u2640\uFE0F",male_zombie:"\u{1F9DF}\u200D\u2642\uFE0F",zombie:"\u{1F9DF}\u200D\u2642\uFE0F",brain:"\u{1F9E0}",orange_heart:"\u{1F9E1}",billed_cap:"\u{1F9E2}",scarf:"\u{1F9E3}",gloves:"\u{1F9E4}",coat:"\u{1F9E5}",socks:"\u{1F9E6}",red_envelope:"\u{1F9E7}",firecracker:"\u{1F9E8}",jigsaw:"\u{1F9E9}",test_tube:"\u{1F9EA}",petri_dish:"\u{1F9EB}",dna:"\u{1F9EC}",compass:"\u{1F9ED}",abacus:"\u{1F9EE}",fire_extinguisher:"\u{1F9EF}",toolbox:"\u{1F9F0}",bricks:"\u{1F9F1}",magnet:"\u{1F9F2}",luggage:"\u{1F9F3}",lotion_bottle:"\u{1F9F4}",thread:"\u{1F9F5}",yarn:"\u{1F9F6}",safety_pin:"\u{1F9F7}",teddy_bear:"\u{1F9F8}",broom:"\u{1F9F9}",basket:"\u{1F9FA}",roll_of_paper:"\u{1F9FB}",soap:"\u{1F9FC}",sponge:"\u{1F9FD}",receipt:"\u{1F9FE}",nazar_amulet:"\u{1F9FF}",ballet_shoes:"\u{1FA70}","one-piece_swimsuit":"\u{1FA71}",briefs:"\u{1FA72}",shorts:"\u{1FA73}",thong_sandal:"\u{1FA74}",drop_of_blood:"\u{1FA78}",adhesive_bandage:"\u{1FA79}",stethoscope:"\u{1FA7A}","yo-yo":"\u{1FA80}",kite:"\u{1FA81}",parachute:"\u{1FA82}",boomerang:"\u{1FA83}",magic_wand:"\u{1FA84}",pinata:"\u{1FA85}",nesting_dolls:"\u{1FA86}",ringed_planet:"\u{1FA90}",chair:"\u{1FA91}",razor:"\u{1FA92}",axe:"\u{1FA93}",diya_lamp:"\u{1FA94}",banjo:"\u{1FA95}",military_helmet:"\u{1FA96}",accordion:"\u{1FA97}",long_drum:"\u{1FA98}",coin:"\u{1FA99}",carpentry_saw:"\u{1FA9A}",screwdriver:"\u{1FA9B}",ladder:"\u{1FA9C}",hook:"\u{1FA9D}",mirror:"\u{1FA9E}",window:"\u{1FA9F}",plunger:"\u{1FAA0}",sewing_needle:"\u{1FAA1}",knot:"\u{1FAA2}",bucket:"\u{1FAA3}",mouse_trap:"\u{1FAA4}",toothbrush:"\u{1FAA5}",headstone:"\u{1FAA6}",placard:"\u{1FAA7}",rock:"\u{1FAA8}",fly:"\u{1FAB0}",worm:"\u{1FAB1}",beetle:"\u{1FAB2}",cockroach:"\u{1FAB3}",potted_plant:"\u{1FAB4}",wood:"\u{1FAB5}",feather:"\u{1FAB6}",anatomical_heart:"\u{1FAC0}",lungs:"\u{1FAC1}",people_hugging:"\u{1FAC2}",blueberries:"\u{1FAD0}",bell_pepper:"\u{1FAD1}",olive:"\u{1FAD2}",flatbread:"\u{1FAD3}",tamale:"\u{1FAD4}",fondue:"\u{1FAD5}",teapot:"\u{1FAD6}",bangbang:"\u203C\uFE0F",interrobang:"\u2049\uFE0F",tm:"\u2122\uFE0F",information_source:"\u2139\uFE0F",left_right_arrow:"\u2194\uFE0F",arrow_up_down:"\u2195\uFE0F",arrow_upper_left:"\u2196\uFE0F",arrow_upper_right:"\u2197\uFE0F",arrow_lower_right:"\u2198\uFE0F",arrow_lower_left:"\u2199\uFE0F",leftwards_arrow_with_hook:"\u21A9\uFE0F",arrow_right_hook:"\u21AA\uFE0F",watch:"\u231A",hourglass:"\u231B",keyboard:"\u2328\uFE0F",eject:"\u23CF\uFE0F",fast_forward:"\u23E9",rewind:"\u23EA",arrow_double_up:"\u23EB",arrow_double_down:"\u23EC",black_right_pointing_double_triangle_with_vertical_bar:"\u23ED\uFE0F",black_left_pointing_double_triangle_with_vertical_bar:"\u23EE\uFE0F",black_right_pointing_triangle_with_double_vertical_bar:"\u23EF\uFE0F",alarm_clock:"\u23F0",stopwatch:"\u23F1\uFE0F",timer_clock:"\u23F2\uFE0F",hourglass_flowing_sand:"\u23F3",double_vertical_bar:"\u23F8\uFE0F",black_square_for_stop:"\u23F9\uFE0F",black_circle_for_record:"\u23FA\uFE0F",m:"\u24C2\uFE0F",black_small_square:"\u25AA\uFE0F",white_small_square:"\u25AB\uFE0F",arrow_forward:"\u25B6\uFE0F",arrow_backward:"\u25C0\uFE0F",white_medium_square:"\u25FB\uFE0F",black_medium_square:"\u25FC\uFE0F",white_medium_small_square:"\u25FD",black_medium_small_square:"\u25FE",sunny:"\u2600\uFE0F",cloud:"\u2601\uFE0F",umbrella:"\u2602\uFE0F",snowman:"\u2603\uFE0F",comet:"\u2604\uFE0F",phone:"\u260E\uFE0F",telephone:"\u260E\uFE0F",ballot_box_with_check:"\u2611\uFE0F",shamrock:"\u2618\uFE0F",point_up:"\u261D\uFE0F",skull_and_crossbones:"\u2620\uFE0F",radioactive_sign:"\u2622\uFE0F",biohazard_sign:"\u2623\uFE0F",orthodox_cross:"\u2626\uFE0F",star_and_crescent:"\u262A\uFE0F",peace_symbol:"\u262E\uFE0F",yin_yang:"\u262F\uFE0F",wheel_of_dharma:"\u2638\uFE0F",white_frowning_face:"\u2639\uFE0F",relaxed:"\u263A\uFE0F",female_sign:"\u2640\uFE0F",male_sign:"\u2642\uFE0F",gemini:"\u264A",cancer:"\u264B",leo:"\u264C",virgo:"\u264D",libra:"\u264E",scorpius:"\u264F",chess_pawn:"\u265F\uFE0F",spades:"\u2660\uFE0F",clubs:"\u2663\uFE0F",hearts:"\u2665\uFE0F",diamonds:"\u2666\uFE0F",hotsprings:"\u2668\uFE0F",recycle:"\u267B\uFE0F",infinity:"\u267E\uFE0F",wheelchair:"\u267F",hammer_and_pick:"\u2692\uFE0F",crossed_swords:"\u2694\uFE0F",medical_symbol:"\u2695\uFE0F",staff_of_aesculapius:"\u2695\uFE0F",scales:"\u2696\uFE0F",alembic:"\u2697\uFE0F",gear:"\u2699\uFE0F",atom_symbol:"\u269B\uFE0F",fleur_de_lis:"\u269C\uFE0F",warning:"\u26A0\uFE0F",zap:"\u26A1",transgender_symbol:"\u26A7\uFE0F",white_circle:"\u26AA",black_circle:"\u26AB",coffin:"\u26B0\uFE0F",funeral_urn:"\u26B1\uFE0F",soccer:"\u26BD",baseball:"\u26BE",snowman_without_snow:"\u26C4",partly_sunny:"\u26C5",thunder_cloud_and_rain:"\u26C8\uFE0F",ophiuchus:"\u26CE",pick:"\u26CF\uFE0F",helmet_with_white_cross:"\u26D1\uFE0F",chains:"\u26D3\uFE0F",no_entry:"\u26D4",shinto_shrine:"\u26E9\uFE0F",church:"\u26EA",mountain:"\u26F0\uFE0F",umbrella_on_ground:"\u26F1\uFE0F",fountain:"\u26F2",golf:"\u26F3",ferry:"\u26F4\uFE0F",boat:"\u26F5",sailboat:"\u26F5",skier:"\u26F7\uFE0F",ice_skate:"\u26F8\uFE0F","woman-bouncing-ball":"\u26F9\uFE0F\u200D\u2640\uFE0F","man-bouncing-ball":"\u26F9\uFE0F\u200D\u2642\uFE0F",person_with_ball:"\u26F9\uFE0F\u200D\u2642\uFE0F",tent:"\u26FA",fuelpump:"\u26FD",scissors:"\u2702\uFE0F",airplane:"\u2708\uFE0F",email:"\u2709\uFE0F",envelope:"\u2709\uFE0F",fist:"\u270A",hand:"\u270B",raised_hand:"\u270B",v:"\u270C\uFE0F",writing_hand:"\u270D\uFE0F",pencil2:"\u270F\uFE0F",black_nib:"\u2712\uFE0F",heavy_check_mark:"\u2714\uFE0F",heavy_multiplication_x:"\u2716\uFE0F",latin_cross:"\u271D\uFE0F",star_of_david:"\u2721\uFE0F",eight_spoked_asterisk:"\u2733\uFE0F",eight_pointed_black_star:"\u2734\uFE0F",snowflake:"\u2744\uFE0F",sparkle:"\u2747\uFE0F",x:"\u274C",negative_squared_cross_mark:"\u274E",heavy_heart_exclamation_mark_ornament:"\u2763\uFE0F",heart_on_fire:"\u2764\uFE0F\u200D\u{1F525}",mending_heart:"\u2764\uFE0F\u200D\u{1FA79}",heart:"\u2764\uFE0F",arrow_right:"\u27A1\uFE0F",curly_loop:"\u27B0",loop:"\u27BF",arrow_heading_up:"\u2934\uFE0F",arrow_heading_down:"\u2935\uFE0F",arrow_left:"\u2B05\uFE0F",arrow_up:"\u2B06\uFE0F",arrow_down:"\u2B07\uFE0F",black_large_square:"\u2B1B",white_large_square:"\u2B1C",star:"\u2B50",o:"\u2B55",wavy_dash:"\u3030\uFE0F",part_alternation_mark:"\u303D\uFE0F",congratulations:"\u3297\uFE0F",secret:"\u3299\uFE0F"}});var Ss=K((x2,Is)=>{var js=Cs(),Ve=ya(),hm=/:([a-zA-Z0-9_\-\+]+):/g,gm=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function mt(e){var t=e.indexOf(":");return t>-1?t===e.length-1?(e=e.substring(0,t),mt(e)):(e=e.substr(t+1),mt(e)):e}function Ls(e){return typeof e=="string"&&e.length>0?":"+e+":":e}function xm(e){return typeof e=="string"&&e[0]!==":"?Ls(e):e}var vm=String.fromCharCode(65039),bm=new RegExp(vm,"g");function ht(e){return e.replace(bm,"")}var _a=Object.keys(Ve).reduce(function(e,t){return e[ht(Ve[t])]=t,e},{}),ce={emoji:Ve};ce._get=function(t){return _a[ht(t)]?t:Ve.hasOwnProperty(t)?Ve[t]:xm(t)};ce.get=function(t){return t=mt(t),ce._get(t)};ce.find=function(t){return ce.findByName(t)||ce.findByCode(t)};ce.findByName=function(t){var n=mt(t),a=Ve[n];return a?{emoji:a,key:n}:void 0};ce.findByCode=function(t){var n=ht(t),a=_a[n];return a?{emoji:Ve[a],key:a}:void 0};ce.hasEmoji=function(t){return ce.hasEmojiByName(t)||ce.hasEmojiByCode(t)};ce.hasEmojiByName=function(t){var n=ce.findByName(t);return!!n&&n.key===mt(t)};ce.hasEmojiByCode=function(t){var n=ce.findByCode(t);return!!n&&ht(n.emoji)===ht(t)};ce.which=function(t,n){var a=ht(t),i=_a[a];return n?Ls(i):i};ce.emojify=function(t,n,a){return t?t.split(hm).map(function(r,o){if(o%2===0)return r;var s=ce._get(r),p=s.indexOf(":")>-1;return p&&typeof n=="function"?n(r):!p&&typeof a=="function"?a(s,r):s}).join(""):""};ce.random=function(){var t=Object.keys(Ve),n=Math.floor(Math.random()*t.length),a=t[n],i=ce._get(a);return{key:a,emoji:i}};ce.search=function(t){var n=Object.keys(Ve),a=mt(t),i=n.filter(function(r){return r.toString().indexOf(a)===0});return i.map(function(r){return{key:r,emoji:ce._get(r)}})};ce.unemojify=function(t){if(!t)return"";var n=js(t);return n.map(function(a){return ce.which(a,!0)||a}).join("")};ce.replace=function(t,n,a){if(!t)return"";var i=typeof n=="function"?n:function(){return n},r=js(t),o=r.map(function(s,p){var l=ce.findByCode(s);return l&&a&&r[p+1]===" "&&(r[p+1]=""),l?i(l):s}).join("");return a?o.replace(gm,""):o};ce.strip=function(t){return ce.replace(t,"",!0)};Is.exports=ce});var Wt=K((v2,As)=>{As.exports=Ss()});var fn=K((b2,dn)=>{(function(){"use strict";var e={}.hasOwnProperty;function t(){for(var n=[],a=0;a<arguments.length;a++){var i=arguments[a];if(!!i){var r=typeof i;if(r==="string"||r==="number")n.push(i);else if(Array.isArray(i)){if(i.length){var o=t.apply(null,i);o&&n.push(o)}}else if(r==="object")if(i.toString===Object.prototype.toString)for(var s in i)e.call(i,s)&&i[s]&&n.push(s);else n.push(i.toString())}}return n.join(" ")}typeof dn<"u"&&dn.exports?(t.default=t,dn.exports=t):typeof define=="function"&&typeof define.amd=="object"&&define.amd?define("classnames",[],function(){return t}):window.classNames=t})()});var Ia=K(yn=>{"use strict";Object.defineProperty(yn,"__esModule",{value:!0});function Ds(e,t){if(t)return e;throw new Error("Unhandled discriminated union member: "+JSON.stringify(e))}yn.assertNever=Ds;yn.default=Ds});var Js=K((Xs,Va)=>{(function(e){typeof Xs=="object"&&typeof Va<"u"?Va.exports=e():typeof define=="function"&&define.amd?define([],e):(typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:this).JSZip=e()})(function(){return function e(t,n,a){function i(s,p){if(!n[s]){if(!t[s]){var l=typeof require=="function"&&require;if(!p&&l)return l(s,!0);if(r)return r(s,!0);var c=new Error("Cannot find module '"+s+"'");throw c.code="MODULE_NOT_FOUND",c}var u=n[s]={exports:{}};t[s][0].call(u.exports,function(h){var f=t[s][1][h];return i(f||h)},u,u.exports,e,t,n,a)}return n[s].exports}for(var r=typeof require=="function"&&require,o=0;o<a.length;o++)i(a[o]);return i}({1:[function(e,t,n){"use strict";var a=e("./utils"),i=e("./support"),r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";n.encode=function(o){for(var s,p,l,c,u,h,f,g=[],x=0,b=o.length,_=b,C=a.getTypeOf(o)!=="string";x<o.length;)_=b-x,l=C?(s=o[x++],p=x<b?o[x++]:0,x<b?o[x++]:0):(s=o.charCodeAt(x++),p=x<b?o.charCodeAt(x++):0,x<b?o.charCodeAt(x++):0),c=s>>2,u=(3&s)<<4|p>>4,h=1<_?(15&p)<<2|l>>6:64,f=2<_?63&l:64,g.push(r.charAt(c)+r.charAt(u)+r.charAt(h)+r.charAt(f));return g.join("")},n.decode=function(o){var s,p,l,c,u,h,f=0,g=0,x="data:";if(o.substr(0,x.length)===x)throw new Error("Invalid base64 input, it looks like a data url.");var b,_=3*(o=o.replace(/[^A-Za-z0-9\+\/\=]/g,"")).length/4;if(o.charAt(o.length-1)===r.charAt(64)&&_--,o.charAt(o.length-2)===r.charAt(64)&&_--,_%1!=0)throw new Error("Invalid base64 input, bad content length.");for(b=i.uint8array?new Uint8Array(0|_):new Array(0|_);f<o.length;)s=r.indexOf(o.charAt(f++))<<2|(c=r.indexOf(o.charAt(f++)))>>4,p=(15&c)<<4|(u=r.indexOf(o.charAt(f++)))>>2,l=(3&u)<<6|(h=r.indexOf(o.charAt(f++))),b[g++]=s,u!==64&&(b[g++]=p),h!==64&&(b[g++]=l);return b}},{"./support":30,"./utils":32}],2:[function(e,t,n){"use strict";var a=e("./external"),i=e("./stream/DataWorker"),r=e("./stream/Crc32Probe"),o=e("./stream/DataLengthProbe");function s(p,l,c,u,h){this.compressedSize=p,this.uncompressedSize=l,this.crc32=c,this.compression=u,this.compressedContent=h}s.prototype={getContentWorker:function(){var p=new i(a.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new o("data_length")),l=this;return p.on("end",function(){if(this.streamInfo.data_length!==l.uncompressedSize)throw new Error("Bug : uncompressed data size mismatch")}),p},getCompressedWorker:function(){return new i(a.Promise.resolve(this.compressedContent)).withStreamInfo("compressedSize",this.compressedSize).withStreamInfo("uncompressedSize",this.uncompressedSize).withStreamInfo("crc32",this.crc32).withStreamInfo("compression",this.compression)}},s.createWorkerFrom=function(p,l,c){return p.pipe(new r).pipe(new o("uncompressedSize")).pipe(l.compressWorker(c)).pipe(new o("compressedSize")).withStreamInfo("compression",l)},t.exports=s},{"./external":6,"./stream/Crc32Probe":25,"./stream/DataLengthProbe":26,"./stream/DataWorker":27}],3:[function(e,t,n){"use strict";var a=e("./stream/GenericWorker");n.STORE={magic:"\0\0",compressWorker:function(i){return new a("STORE compression")},uncompressWorker:function(){return new a("STORE decompression")}},n.DEFLATE=e("./flate")},{"./flate":7,"./stream/GenericWorker":28}],4:[function(e,t,n){"use strict";var a=e("./utils"),i=function(){for(var r,o=[],s=0;s<256;s++){r=s;for(var p=0;p<8;p++)r=1&r?3988292384^r>>>1:r>>>1;o[s]=r}return o}();t.exports=function(r,o){return r!==void 0&&r.length?a.getTypeOf(r)!=="string"?function(s,p,l,c){var u=i,h=c+l;s^=-1;for(var f=c;f<h;f++)s=s>>>8^u[255&(s^p[f])];return-1^s}(0|o,r,r.length,0):function(s,p,l,c){var u=i,h=c+l;s^=-1;for(var f=c;f<h;f++)s=s>>>8^u[255&(s^p.charCodeAt(f))];return-1^s}(0|o,r,r.length,0):0}},{"./utils":32}],5:[function(e,t,n){"use strict";n.base64=!1,n.binary=!1,n.dir=!1,n.createFolders=!0,n.date=null,n.compression=null,n.compressionOptions=null,n.comment=null,n.unixPermissions=null,n.dosPermissions=null},{}],6:[function(e,t,n){"use strict";var a=null;a=typeof Promise<"u"?Promise:e("lie"),t.exports={Promise:a}},{lie:37}],7:[function(e,t,n){"use strict";var a=typeof Uint8Array<"u"&&typeof Uint16Array<"u"&&typeof Uint32Array<"u",i=e("pako"),r=e("./utils"),o=e("./stream/GenericWorker"),s=a?"uint8array":"array";function p(l,c){o.call(this,"FlateWorker/"+l),this._pako=null,this._pakoAction=l,this._pakoOptions=c,this.meta={}}n.magic="\b\0",r.inherits(p,o),p.prototype.processChunk=function(l){this.meta=l.meta,this._pako===null&&this._createPako(),this._pako.push(r.transformTo(s,l.data),!1)},p.prototype.flush=function(){o.prototype.flush.call(this),this._pako===null&&this._createPako(),this._pako.push([],!0)},p.prototype.cleanUp=function(){o.prototype.cleanUp.call(this),this._pako=null},p.prototype._createPako=function(){this._pako=new i[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var l=this;this._pako.onData=function(c){l.push({data:c,meta:l.meta})}},n.compressWorker=function(l){return new p("Deflate",l)},n.uncompressWorker=function(){return new p("Inflate",{})}},{"./stream/GenericWorker":28,"./utils":32,pako:38}],8:[function(e,t,n){"use strict";function a(u,h){var f,g="";for(f=0;f<h;f++)g+=String.fromCharCode(255&u),u>>>=8;return g}function i(u,h,f,g,x,b){var _,C,w=u.file,z=u.compression,F=b!==s.utf8encode,T=r.transformTo("string",b(w.name)),S=r.transformTo("string",s.utf8encode(w.name)),W=w.comment,Y=r.transformTo("string",b(W)),k=r.transformTo("string",s.utf8encode(W)),E=S.length!==w.name.length,m=k.length!==W.length,P="",J="",D="",ae=w.dir,R=w.date,te={crc32:0,compressedSize:0,uncompressedSize:0};h&&!f||(te.crc32=u.crc32,te.compressedSize=u.compressedSize,te.uncompressedSize=u.uncompressedSize);var A=0;h&&(A|=8),F||!E&&!m||(A|=2048);var I=0,ee=0;ae&&(I|=16),x==="UNIX"?(ee=798,I|=function(q,ue){var ve=q;return q||(ve=ue?16893:33204),(65535&ve)<<16}(w.unixPermissions,ae)):(ee=20,I|=function(q){return 63&(q||0)}(w.dosPermissions)),_=R.getUTCHours(),_<<=6,_|=R.getUTCMinutes(),_<<=5,_|=R.getUTCSeconds()/2,C=R.getUTCFullYear()-1980,C<<=4,C|=R.getUTCMonth()+1,C<<=5,C|=R.getUTCDate(),E&&(J=a(1,1)+a(p(T),4)+S,P+="up"+a(J.length,2)+J),m&&(D=a(1,1)+a(p(Y),4)+k,P+="uc"+a(D.length,2)+D);var G="";return G+=`
|
|
|
\0`,G+=a(A,2),G+=z.magic,G+=a(_,2),G+=a(C,2),G+=a(te.crc32,4),G+=a(te.compressedSize,4),G+=a(te.uncompressedSize,4),G+=a(T.length,2),G+=a(P.length,2),{fileRecord:l.LOCAL_FILE_HEADER+G+T+P,dirRecord:l.CENTRAL_FILE_HEADER+a(ee,2)+G+a(Y.length,2)+"\0\0\0\0"+a(I,4)+a(g,4)+T+P+Y}}var r=e("../utils"),o=e("../stream/GenericWorker"),s=e("../utf8"),p=e("../crc32"),l=e("../signature");function c(u,h,f,g){o.call(this,"ZipFileWorker"),this.bytesWritten=0,this.zipComment=h,this.zipPlatform=f,this.encodeFileName=g,this.streamFiles=u,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}r.inherits(c,o),c.prototype.push=function(u){var h=u.meta.percent||0,f=this.entriesCount,g=this._sources.length;this.accumulate?this.contentBuffer.push(u):(this.bytesWritten+=u.data.length,o.prototype.push.call(this,{data:u.data,meta:{currentFile:this.currentFile,percent:f?(h+100*(f-g-1))/f:100}}))},c.prototype.openedSource=function(u){this.currentSourceOffset=this.bytesWritten,this.currentFile=u.file.name;var h=this.streamFiles&&!u.file.dir;if(h){var f=i(u,h,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:f.fileRecord,meta:{percent:0}})}else this.accumulate=!0},c.prototype.closedSource=function(u){this.accumulate=!1;var h=this.streamFiles&&!u.file.dir,f=i(u,h,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(f.dirRecord),h)this.push({data:function(g){return l.DATA_DESCRIPTOR+a(g.crc32,4)+a(g.compressedSize,4)+a(g.uncompressedSize,4)}(u),meta:{percent:100}});else for(this.push({data:f.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},c.prototype.flush=function(){for(var u=this.bytesWritten,h=0;h<this.dirRecords.length;h++)this.push({data:this.dirRecords[h],meta:{percent:100}});var f=this.bytesWritten-u,g=function(x,b,_,C,w){var z=r.transformTo("string",w(C));return l.CENTRAL_DIRECTORY_END+"\0\0\0\0"+a(x,2)+a(x,2)+a(b,4)+a(_,4)+a(z.length,2)+z}(this.dirRecords.length,f,u,this.zipComment,this.encodeFileName);this.push({data:g,meta:{percent:100}})},c.prototype.prepareNextSource=function(){this.previous=this._sources.shift(),this.openedSource(this.previous.streamInfo),this.isPaused?this.previous.pause():this.previous.resume()},c.prototype.registerPrevious=function(u){this._sources.push(u);var h=this;return u.on("data",function(f){h.processChunk(f)}),u.on("end",function(){h.closedSource(h.previous.streamInfo),h._sources.length?h.prepareNextSource():h.end()}),u.on("error",function(f){h.error(f)}),this},c.prototype.resume=function(){return!!o.prototype.resume.call(this)&&(!this.previous&&this._sources.length?(this.prepareNextSource(),!0):this.previous||this._sources.length||this.generatedError?void 0:(this.end(),!0))},c.prototype.error=function(u){var h=this._sources;if(!o.prototype.error.call(this,u))return!1;for(var f=0;f<h.length;f++)try{h[f].error(u)}catch{}return!0},c.prototype.lock=function(){o.prototype.lock.call(this);for(var u=this._sources,h=0;h<u.length;h++)u[h].lock()},t.exports=c},{"../crc32":4,"../signature":23,"../stream/GenericWorker":28,"../utf8":31,"../utils":32}],9:[function(e,t,n){"use strict";var a=e("../compressions"),i=e("./ZipFileWorker");n.generateWorker=function(r,o,s){var p=new i(o.streamFiles,s,o.platform,o.encodeFileName),l=0;try{r.forEach(function(c,u){l++;var h=function(b,_){var C=b||_,w=a[C];if(!w)throw new Error(C+" is not a valid compression method !");return w}(u.options.compression,o.compression),f=u.options.compressionOptions||o.compressionOptions||{},g=u.dir,x=u.date;u._compressWorker(h,f).withStreamInfo("file",{name:c,dir:g,date:x,comment:u.comment||"",unixPermissions:u.unixPermissions,dosPermissions:u.dosPermissions}).pipe(p)}),p.entriesCount=l}catch(c){p.error(c)}return p}},{"../compressions":3,"./ZipFileWorker":8}],10:[function(e,t,n){"use strict";function a(){if(!(this instanceof a))return new a;if(arguments.length)throw new Error("The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide.");this.files=Object.create(null),this.comment=null,this.root="",this.clone=function(){var i=new a;for(var r in this)typeof this[r]!="function"&&(i[r]=this[r]);return i}}(a.prototype=e("./object")).loadAsync=e("./load"),a.support=e("./support"),a.defaults=e("./defaults"),a.version="3.10.0",a.loadAsync=function(i,r){return new a().loadAsync(i,r)},a.external=e("./external"),t.exports=a},{"./defaults":5,"./external":6,"./load":11,"./object":15,"./support":30}],11:[function(e,t,n){"use strict";var a=e("./utils"),i=e("./external"),r=e("./utf8"),o=e("./zipEntries"),s=e("./stream/Crc32Probe"),p=e("./nodejsUtils");function l(c){return new i.Promise(function(u,h){var f=c.decompressed.getContentWorker().pipe(new s);f.on("error",function(g){h(g)}).on("end",function(){f.streamInfo.crc32!==c.decompressed.crc32?h(new Error("Corrupted zip : CRC32 mismatch")):u()}).resume()})}t.exports=function(c,u){var h=this;return u=a.extend(u||{},{base64:!1,checkCRC32:!1,optimizedBinaryString:!1,createFolders:!1,decodeFileName:r.utf8decode}),p.isNode&&p.isStream(c)?i.Promise.reject(new Error("JSZip can't accept a stream when loading a zip file.")):a.prepareContent("the loaded zip file",c,!0,u.optimizedBinaryString,u.base64).then(function(f){var g=new o(u);return g.load(f),g}).then(function(f){var g=[i.Promise.resolve(f)],x=f.files;if(u.checkCRC32)for(var b=0;b<x.length;b++)g.push(l(x[b]));return i.Promise.all(g)}).then(function(f){for(var g=f.shift(),x=g.files,b=0;b<x.length;b++){var _=x[b],C=_.fileNameStr,w=a.resolve(_.fileNameStr);h.file(w,_.decompressed,{binary:!0,optimizedBinaryString:!0,date:_.date,dir:_.dir,comment:_.fileCommentStr.length?_.fileCommentStr:null,unixPermissions:_.unixPermissions,dosPermissions:_.dosPermissions,createFolders:u.createFolders}),_.dir||(h.file(w).unsafeOriginalName=C)}return g.zipComment.length&&(h.comment=g.zipComment),h})}},{"./external":6,"./nodejsUtils":14,"./stream/Crc32Probe":25,"./utf8":31,"./utils":32,"./zipEntries":33}],12:[function(e,t,n){"use strict";var a=e("../utils"),i=e("../stream/GenericWorker");function r(o,s){i.call(this,"Nodejs stream input adapter for "+o),this._upstreamEnded=!1,this._bindStream(s)}a.inherits(r,i),r.prototype._bindStream=function(o){var s=this;(this._stream=o).pause(),o.on("data",function(p){s.push({data:p,meta:{percent:0}})}).on("error",function(p){s.isPaused?this.generatedError=p:s.error(p)}).on("end",function(){s.isPaused?s._upstreamEnded=!0:s.end()})},r.prototype.pause=function(){return!!i.prototype.pause.call(this)&&(this._stream.pause(),!0)},r.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(this._upstreamEnded?this.end():this._stream.resume(),!0)},t.exports=r},{"../stream/GenericWorker":28,"../utils":32}],13:[function(e,t,n){"use strict";var a=e("readable-stream").Readable;function i(r,o,s){a.call(this,o),this._helper=r;var p=this;r.on("data",function(l,c){p.push(l)||p._helper.pause(),s&&s(c)}).on("error",function(l){p.emit("error",l)}).on("end",function(){p.push(null)})}e("../utils").inherits(i,a),i.prototype._read=function(){this._helper.resume()},t.exports=i},{"../utils":32,"readable-stream":16}],14:[function(e,t,n){"use strict";t.exports={isNode:typeof Buffer<"u",newBufferFrom:function(a,i){if(Buffer.from&&Buffer.from!==Uint8Array.from)return Buffer.from(a,i);if(typeof a=="number")throw new Error('The "data" argument must not be a number');return new Buffer(a,i)},allocBuffer:function(a){if(Buffer.alloc)return Buffer.alloc(a);var i=new Buffer(a);return i.fill(0),i},isBuffer:function(a){return Buffer.isBuffer(a)},isStream:function(a){return a&&typeof a.on=="function"&&typeof a.pause=="function"&&typeof a.resume=="function"}}},{}],15:[function(e,t,n){"use strict";function a(w,z,F){var T,S=r.getTypeOf(z),W=r.extend(F||{},p);W.date=W.date||new Date,W.compression!==null&&(W.compression=W.compression.toUpperCase()),typeof W.unixPermissions=="string"&&(W.unixPermissions=parseInt(W.unixPermissions,8)),W.unixPermissions&&16384&W.unixPermissions&&(W.dir=!0),W.dosPermissions&&16&W.dosPermissions&&(W.dir=!0),W.dir&&(w=x(w)),W.createFolders&&(T=g(w))&&b.call(this,T,!0);var Y=S==="string"&&W.binary===!1&&W.base64===!1;F&&F.binary!==void 0||(W.binary=!Y),(z instanceof l&&z.uncompressedSize===0||W.dir||!z||z.length===0)&&(W.base64=!1,W.binary=!0,z="",W.compression="STORE",S="string");var k=null;k=z instanceof l||z instanceof o?z:h.isNode&&h.isStream(z)?new f(w,z):r.prepareContent(w,z,W.binary,W.optimizedBinaryString,W.base64);var E=new c(w,k,W);this.files[w]=E}var i=e("./utf8"),r=e("./utils"),o=e("./stream/GenericWorker"),s=e("./stream/StreamHelper"),p=e("./defaults"),l=e("./compressedObject"),c=e("./zipObject"),u=e("./generate"),h=e("./nodejsUtils"),f=e("./nodejs/NodejsStreamInputAdapter"),g=function(w){w.slice(-1)==="/"&&(w=w.substring(0,w.length-1));var z=w.lastIndexOf("/");return 0<z?w.substring(0,z):""},x=function(w){return w.slice(-1)!=="/"&&(w+="/"),w},b=function(w,z){return z=z!==void 0?z:p.createFolders,w=x(w),this.files[w]||a.call(this,w,null,{dir:!0,createFolders:z}),this.files[w]};function _(w){return Object.prototype.toString.call(w)==="[object RegExp]"}var C={load:function(){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.")},forEach:function(w){var z,F,T;for(z in this.files)T=this.files[z],(F=z.slice(this.root.length,z.length))&&z.slice(0,this.root.length)===this.root&&w(F,T)},filter:function(w){var z=[];return this.forEach(function(F,T){w(F,T)&&z.push(T)}),z},file:function(w,z,F){if(arguments.length!==1)return w=this.root+w,a.call(this,w,z,F),this;if(_(w)){var T=w;return this.filter(function(W,Y){return!Y.dir&&T.test(W)})}var S=this.files[this.root+w];return S&&!S.dir?S:null},folder:function(w){if(!w)return this;if(_(w))return this.filter(function(S,W){return W.dir&&w.test(S)});var z=this.root+w,F=b.call(this,z),T=this.clone();return T.root=F.name,T},remove:function(w){w=this.root+w;var z=this.files[w];if(z||(w.slice(-1)!=="/"&&(w+="/"),z=this.files[w]),z&&!z.dir)delete this.files[w];else for(var F=this.filter(function(S,W){return W.name.slice(0,w.length)===w}),T=0;T<F.length;T++)delete this.files[F[T].name];return this},generate:function(w){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.")},generateInternalStream:function(w){var z,F={};try{if((F=r.extend(w||{},{streamFiles:!1,compression:"STORE",compressionOptions:null,type:"",platform:"DOS",comment:null,mimeType:"application/zip",encodeFileName:i.utf8encode})).type=F.type.toLowerCase(),F.compression=F.compression.toUpperCase(),F.type==="binarystring"&&(F.type="string"),!F.type)throw new Error("No output type specified.");r.checkSupport(F.type),F.platform!=="darwin"&&F.platform!=="freebsd"&&F.platform!=="linux"&&F.platform!=="sunos"||(F.platform="UNIX"),F.platform==="win32"&&(F.platform="DOS");var T=F.comment||this.comment||"";z=u.generateWorker(this,F,T)}catch(S){(z=new o("error")).error(S)}return new s(z,F.type||"string",F.mimeType)},generateAsync:function(w,z){return this.generateInternalStream(w).accumulate(z)},generateNodeStream:function(w,z){return(w=w||{}).type||(w.type="nodebuffer"),this.generateInternalStream(w).toNodejsStream(z)}};t.exports=C},{"./compressedObject":2,"./defaults":5,"./generate":9,"./nodejs/NodejsStreamInputAdapter":12,"./nodejsUtils":14,"./stream/GenericWorker":28,"./stream/StreamHelper":29,"./utf8":31,"./utils":32,"./zipObject":35}],16:[function(e,t,n){t.exports=e("stream")},{stream:void 0}],17:[function(e,t,n){"use strict";var a=e("./DataReader");function i(r){a.call(this,r);for(var o=0;o<this.data.length;o++)r[o]=255&r[o]}e("../utils").inherits(i,a),i.prototype.byteAt=function(r){return this.data[this.zero+r]},i.prototype.lastIndexOfSignature=function(r){for(var o=r.charCodeAt(0),s=r.charCodeAt(1),p=r.charCodeAt(2),l=r.charCodeAt(3),c=this.length-4;0<=c;--c)if(this.data[c]===o&&this.data[c+1]===s&&this.data[c+2]===p&&this.data[c+3]===l)return c-this.zero;return-1},i.prototype.readAndCheckSignature=function(r){var o=r.charCodeAt(0),s=r.charCodeAt(1),p=r.charCodeAt(2),l=r.charCodeAt(3),c=this.readData(4);return o===c[0]&&s===c[1]&&p===c[2]&&l===c[3]},i.prototype.readData=function(r){if(this.checkOffset(r),r===0)return[];var o=this.data.slice(this.zero+this.index,this.zero+this.index+r);return this.index+=r,o},t.exports=i},{"../utils":32,"./DataReader":18}],18:[function(e,t,n){"use strict";var a=e("../utils");function i(r){this.data=r,this.length=r.length,this.index=0,this.zero=0}i.prototype={checkOffset:function(r){this.checkIndex(this.index+r)},checkIndex:function(r){if(this.length<this.zero+r||r<0)throw new Error("End of data reached (data length = "+this.length+", asked index = "+r+"). Corrupted zip ?")},setIndex:function(r){this.checkIndex(r),this.index=r},skip:function(r){this.setIndex(this.index+r)},byteAt:function(r){},readInt:function(r){var o,s=0;for(this.checkOffset(r),o=this.index+r-1;o>=this.index;o--)s=(s<<8)+this.byteAt(o);return this.index+=r,s},readString:function(r){return a.transformTo("string",this.readData(r))},readData:function(r){},lastIndexOfSignature:function(r){},readAndCheckSignature:function(r){},readDate:function(){var r=this.readInt(4);return new Date(Date.UTC(1980+(r>>25&127),(r>>21&15)-1,r>>16&31,r>>11&31,r>>5&63,(31&r)<<1))}},t.exports=i},{"../utils":32}],19:[function(e,t,n){"use strict";var a=e("./Uint8ArrayReader");function i(r){a.call(this,r)}e("../utils").inherits(i,a),i.prototype.readData=function(r){this.checkOffset(r);var o=this.data.slice(this.zero+this.index,this.zero+this.index+r);return this.index+=r,o},t.exports=i},{"../utils":32,"./Uint8ArrayReader":21}],20:[function(e,t,n){"use strict";var a=e("./DataReader");function i(r){a.call(this,r)}e("../utils").inherits(i,a),i.prototype.byteAt=function(r){return this.data.charCodeAt(this.zero+r)},i.prototype.lastIndexOfSignature=function(r){return this.data.lastIndexOf(r)-this.zero},i.prototype.readAndCheckSignature=function(r){return r===this.readData(4)},i.prototype.readData=function(r){this.checkOffset(r);var o=this.data.slice(this.zero+this.index,this.zero+this.index+r);return this.index+=r,o},t.exports=i},{"../utils":32,"./DataReader":18}],21:[function(e,t,n){"use strict";var a=e("./ArrayReader");function i(r){a.call(this,r)}e("../utils").inherits(i,a),i.prototype.readData=function(r){if(this.checkOffset(r),r===0)return new Uint8Array(0);var o=this.data.subarray(this.zero+this.index,this.zero+this.index+r);return this.index+=r,o},t.exports=i},{"../utils":32,"./ArrayReader":17}],22:[function(e,t,n){"use strict";var a=e("../utils"),i=e("../support"),r=e("./ArrayReader"),o=e("./StringReader"),s=e("./NodeBufferReader"),p=e("./Uint8ArrayReader");t.exports=function(l){var c=a.getTypeOf(l);return a.checkSupport(c),c!=="string"||i.uint8array?c==="nodebuffer"?new s(l):i.uint8array?new p(a.transformTo("uint8array",l)):new r(a.transformTo("array",l)):new o(l)}},{"../support":30,"../utils":32,"./ArrayReader":17,"./NodeBufferReader":19,"./StringReader":20,"./Uint8ArrayReader":21}],23:[function(e,t,n){"use strict";n.LOCAL_FILE_HEADER="PK",n.CENTRAL_FILE_HEADER="PK",n.CENTRAL_DIRECTORY_END="PK",n.ZIP64_CENTRAL_DIRECTORY_LOCATOR="PK\x07",n.ZIP64_CENTRAL_DIRECTORY_END="PK",n.DATA_DESCRIPTOR="PK\x07\b"},{}],24:[function(e,t,n){"use strict";var a=e("./GenericWorker"),i=e("../utils");function r(o){a.call(this,"ConvertWorker to "+o),this.destType=o}i.inherits(r,a),r.prototype.processChunk=function(o){this.push({data:i.transformTo(this.destType,o.data),meta:o.meta})},t.exports=r},{"../utils":32,"./GenericWorker":28}],25:[function(e,t,n){"use strict";var a=e("./GenericWorker"),i=e("../crc32");function r(){a.call(this,"Crc32Probe"),this.withStreamInfo("crc32",0)}e("../utils").inherits(r,a),r.prototype.processChunk=function(o){this.streamInfo.crc32=i(o.data,this.streamInfo.crc32||0),this.push(o)},t.exports=r},{"../crc32":4,"../utils":32,"./GenericWorker":28}],26:[function(e,t,n){"use strict";var a=e("../utils"),i=e("./GenericWorker");function r(o){i.call(this,"DataLengthProbe for "+o),this.propName=o,this.withStreamInfo(o,0)}a.inherits(r,i),r.prototype.processChunk=function(o){if(o){var s=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=s+o.data.length}i.prototype.processChunk.call(this,o)},t.exports=r},{"../utils":32,"./GenericWorker":28}],27:[function(e,t,n){"use strict";var a=e("../utils"),i=e("./GenericWorker");function r(o){i.call(this,"DataWorker");var s=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type="",this._tickScheduled=!1,o.then(function(p){s.dataIsReady=!0,s.data=p,s.max=p&&p.length||0,s.type=a.getTypeOf(p),s.isPaused||s._tickAndRepeat()},function(p){s.error(p)})}a.inherits(r,i),r.prototype.cleanUp=function(){i.prototype.cleanUp.call(this),this.data=null},r.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,a.delay(this._tickAndRepeat,[],this)),!0)},r.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(a.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},r.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var o=null,s=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case"string":o=this.data.substring(this.index,s);break;case"uint8array":o=this.data.subarray(this.index,s);break;case"array":case"nodebuffer":o=this.data.slice(this.index,s)}return this.index=s,this.push({data:o,meta:{percent:this.max?this.index/this.max*100:0}})},t.exports=r},{"../utils":32,"./GenericWorker":28}],28:[function(e,t,n){"use strict";function a(i){this.name=i||"default",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}a.prototype={push:function(i){this.emit("data",i)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit("end"),this.cleanUp(),this.isFinished=!0}catch(i){this.emit("error",i)}return!0},error:function(i){return!this.isFinished&&(this.isPaused?this.generatedError=i:(this.isFinished=!0,this.emit("error",i),this.previous&&this.previous.error(i),this.cleanUp()),!0)},on:function(i,r){return this._listeners[i].push(r),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(i,r){if(this._listeners[i])for(var o=0;o<this._listeners[i].length;o++)this._listeners[i][o].call(this,r)},pipe:function(i){return i.registerPrevious(this)},registerPrevious:function(i){if(this.isLocked)throw new Error("The stream '"+this+"' has already been used.");this.streamInfo=i.streamInfo,this.mergeStreamInfo(),this.previous=i;var r=this;return i.on("data",function(o){r.processChunk(o)}),i.on("end",function(){r.end()}),i.on("error",function(o){r.error(o)}),this},pause:function(){return!this.isPaused&&!this.isFinished&&(this.isPaused=!0,this.previous&&this.previous.pause(),!0)},resume:function(){if(!this.isPaused||this.isFinished)return!1;var i=this.isPaused=!1;return this.generatedError&&(this.error(this.generatedError),i=!0),this.previous&&this.previous.resume(),!i},flush:function(){},processChunk:function(i){this.push(i)},withStreamInfo:function(i,r){return this.extraStreamInfo[i]=r,this.mergeStreamInfo(),this},mergeStreamInfo:function(){for(var i in this.extraStreamInfo)this.extraStreamInfo.hasOwnProperty(i)&&(this.streamInfo[i]=this.extraStreamInfo[i])},lock:function(){if(this.isLocked)throw new Error("The stream '"+this+"' has already been used.");this.isLocked=!0,this.previous&&this.previous.lock()},toString:function(){var i="Worker "+this.name;return this.previous?this.previous+" -> "+i:i}},t.exports=a},{}],29:[function(e,t,n){"use strict";var a=e("../utils"),i=e("./ConvertWorker"),r=e("./GenericWorker"),o=e("../base64"),s=e("../support"),p=e("../external"),l=null;if(s.nodestream)try{l=e("../nodejs/NodejsStreamOutputAdapter")}catch{}function c(h,f){return new p.Promise(function(g,x){var b=[],_=h._internalType,C=h._outputType,w=h._mimeType;h.on("data",function(z,F){b.push(z),f&&f(F)}).on("error",function(z){b=[],x(z)}).on("end",function(){try{var z=function(F,T,S){switch(F){case"blob":return a.newBlob(a.transformTo("arraybuffer",T),S);case"base64":return o.encode(T);default:return a.transformTo(F,T)}}(C,function(F,T){var S,W=0,Y=null,k=0;for(S=0;S<T.length;S++)k+=T[S].length;switch(F){case"string":return T.join("");case"array":return Array.prototype.concat.apply([],T);case"uint8array":for(Y=new Uint8Array(k),S=0;S<T.length;S++)Y.set(T[S],W),W+=T[S].length;return Y;case"nodebuffer":return Buffer.concat(T);default:throw new Error("concat : unsupported type '"+F+"'")}}(_,b),w);g(z)}catch(F){x(F)}b=[]}).resume()})}function u(h,f,g){var x=f;switch(f){case"blob":case"arraybuffer":x="uint8array";break;case"base64":x="string"}try{this._internalType=x,this._outputType=f,this._mimeType=g,a.checkSupport(x),this._worker=h.pipe(new i(x)),h.lock()}catch(b){this._worker=new r("error"),this._worker.error(b)}}u.prototype={accumulate:function(h){return c(this,h)},on:function(h,f){var g=this;return h==="data"?this._worker.on(h,function(x){f.call(g,x.data,x.meta)}):this._worker.on(h,function(){a.delay(f,arguments,g)}),this},resume:function(){return a.delay(this._worker.resume,[],this._worker),this},pause:function(){return this._worker.pause(),this},toNodejsStream:function(h){if(a.checkSupport("nodestream"),this._outputType!=="nodebuffer")throw new Error(this._outputType+" is not supported by this method");return new l(this,{objectMode:this._outputType!=="nodebuffer"},h)}},t.exports=u},{"../base64":1,"../external":6,"../nodejs/NodejsStreamOutputAdapter":13,"../support":30,"../utils":32,"./ConvertWorker":24,"./GenericWorker":28}],30:[function(e,t,n){"use strict";if(n.base64=!0,n.array=!0,n.string=!0,n.arraybuffer=typeof ArrayBuffer<"u"&&typeof Uint8Array<"u",n.nodebuffer=typeof Buffer<"u",n.uint8array=typeof Uint8Array<"u",typeof ArrayBuffer>"u")n.blob=!1;else{var a=new ArrayBuffer(0);try{n.blob=new Blob([a],{type:"application/zip"}).size===0}catch{try{var i=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);i.append(a),n.blob=i.getBlob("application/zip").size===0}catch{n.blob=!1}}}try{n.nodestream=!!e("readable-stream").Readable}catch{n.nodestream=!1}},{"readable-stream":16}],31:[function(e,t,n){"use strict";for(var a=e("./utils"),i=e("./support"),r=e("./nodejsUtils"),o=e("./stream/GenericWorker"),s=new Array(256),p=0;p<256;p++)s[p]=252<=p?6:248<=p?5:240<=p?4:224<=p?3:192<=p?2:1;s[254]=s[254]=1;function l(){o.call(this,"utf-8 decode"),this.leftOver=null}function c(){o.call(this,"utf-8 encode")}n.utf8encode=function(u){return i.nodebuffer?r.newBufferFrom(u,"utf-8"):function(h){var f,g,x,b,_,C=h.length,w=0;for(b=0;b<C;b++)(64512&(g=h.charCodeAt(b)))==55296&&b+1<C&&(64512&(x=h.charCodeAt(b+1)))==56320&&(g=65536+(g-55296<<10)+(x-56320),b++),w+=g<128?1:g<2048?2:g<65536?3:4;for(f=i.uint8array?new Uint8Array(w):new Array(w),b=_=0;_<w;b++)(64512&(g=h.charCodeAt(b)))==55296&&b+1<C&&(64512&(x=h.charCodeAt(b+1)))==56320&&(g=65536+(g-55296<<10)+(x-56320),b++),g<128?f[_++]=g:(g<2048?f[_++]=192|g>>>6:(g<65536?f[_++]=224|g>>>12:(f[_++]=240|g>>>18,f[_++]=128|g>>>12&63),f[_++]=128|g>>>6&63),f[_++]=128|63&g);return f}(u)},n.utf8decode=function(u){return i.nodebuffer?a.transformTo("nodebuffer",u).toString("utf-8"):function(h){var f,g,x,b,_=h.length,C=new Array(2*_);for(f=g=0;f<_;)if((x=h[f++])<128)C[g++]=x;else if(4<(b=s[x]))C[g++]=65533,f+=b-1;else{for(x&=b===2?31:b===3?15:7;1<b&&f<_;)x=x<<6|63&h[f++],b--;1<b?C[g++]=65533:x<65536?C[g++]=x:(x-=65536,C[g++]=55296|x>>10&1023,C[g++]=56320|1023&x)}return C.length!==g&&(C.subarray?C=C.subarray(0,g):C.length=g),a.applyFromCharCode(C)}(u=a.transformTo(i.uint8array?"uint8array":"array",u))},a.inherits(l,o),l.prototype.processChunk=function(u){var h=a.transformTo(i.uint8array?"uint8array":"array",u.data);if(this.leftOver&&this.leftOver.length){if(i.uint8array){var f=h;(h=new Uint8Array(f.length+this.leftOver.length)).set(this.leftOver,0),h.set(f,this.leftOver.length)}else h=this.leftOver.concat(h);this.leftOver=null}var g=function(b,_){var C;for((_=_||b.length)>b.length&&(_=b.length),C=_-1;0<=C&&(192&b[C])==128;)C--;return C<0||C===0?_:C+s[b[C]]>_?C:_}(h),x=h;g!==h.length&&(i.uint8array?(x=h.subarray(0,g),this.leftOver=h.subarray(g,h.length)):(x=h.slice(0,g),this.leftOver=h.slice(g,h.length))),this.push({data:n.utf8decode(x),meta:u.meta})},l.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:n.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},n.Utf8DecodeWorker=l,a.inherits(c,o),c.prototype.processChunk=function(u){this.push({data:n.utf8encode(u.data),meta:u.meta})},n.Utf8EncodeWorker=c},{"./nodejsUtils":14,"./stream/GenericWorker":28,"./support":30,"./utils":32}],32:[function(e,t,n){"use strict";var a=e("./support"),i=e("./base64"),r=e("./nodejsUtils"),o=e("./external");function s(f){return f}function p(f,g){for(var x=0;x<f.length;++x)g[x]=255&f.charCodeAt(x);return g}e("setimmediate"),n.newBlob=function(f,g){n.checkSupport("blob");try{return new Blob([f],{type:g})}catch{try{var x=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);return x.append(f),x.getBlob(g)}catch{throw new Error("Bug : can't construct the Blob.")}}};var l={stringifyByChunk:function(f,g,x){var b=[],_=0,C=f.length;if(C<=x)return String.fromCharCode.apply(null,f);for(;_<C;)g==="array"||g==="nodebuffer"?b.push(String.fromCharCode.apply(null,f.slice(_,Math.min(_+x,C)))):b.push(String.fromCharCode.apply(null,f.subarray(_,Math.min(_+x,C)))),_+=x;return b.join("")},stringifyByChar:function(f){for(var g="",x=0;x<f.length;x++)g+=String.fromCharCode(f[x]);return g},applyCanBeUsed:{uint8array:function(){try{return a.uint8array&&String.fromCharCode.apply(null,new Uint8Array(1)).length===1}catch{return!1}}(),nodebuffer:function(){try{return a.nodebuffer&&String.fromCharCode.apply(null,r.allocBuffer(1)).length===1}catch{return!1}}()}};function c(f){var g=65536,x=n.getTypeOf(f),b=!0;if(x==="uint8array"?b=l.applyCanBeUsed.uint8array:x==="nodebuffer"&&(b=l.applyCanBeUsed.nodebuffer),b)for(;1<g;)try{return l.stringifyByChunk(f,x,g)}catch{g=Math.floor(g/2)}return l.stringifyByChar(f)}function u(f,g){for(var x=0;x<f.length;x++)g[x]=f[x];return g}n.applyFromCharCode=c;var h={};h.string={string:s,array:function(f){return p(f,new Array(f.length))},arraybuffer:function(f){return h.string.uint8array(f).buffer},uint8array:function(f){return p(f,new Uint8Array(f.length))},nodebuffer:function(f){return p(f,r.allocBuffer(f.length))}},h.array={string:c,array:s,arraybuffer:function(f){return new Uint8Array(f).buffer},uint8array:function(f){return new Uint8Array(f)},nodebuffer:function(f){return r.newBufferFrom(f)}},h.arraybuffer={string:function(f){return c(new Uint8Array(f))},array:function(f){return u(new Uint8Array(f),new Array(f.byteLength))},arraybuffer:s,uint8array:function(f){return new Uint8Array(f)},nodebuffer:function(f){return r.newBufferFrom(new Uint8Array(f))}},h.uint8array={string:c,array:function(f){return u(f,new Array(f.length))},arraybuffer:function(f){return f.buffer},uint8array:s,nodebuffer:function(f){return r.newBufferFrom(f)}},h.nodebuffer={string:c,array:function(f){return u(f,new Array(f.length))},arraybuffer:function(f){return h.nodebuffer.uint8array(f).buffer},uint8array:function(f){return u(f,new Uint8Array(f.length))},nodebuffer:s},n.transformTo=function(f,g){if(g=g||"",!f)return g;n.checkSupport(f);var x=n.getTypeOf(g);return h[x][f](g)},n.resolve=function(f){for(var g=f.split("/"),x=[],b=0;b<g.length;b++){var _=g[b];_==="."||_===""&&b!==0&&b!==g.length-1||(_===".."?x.pop():x.push(_))}return x.join("/")},n.getTypeOf=function(f){return typeof f=="string"?"string":Object.prototype.toString.call(f)==="[object Array]"?"array":a.nodebuffer&&r.isBuffer(f)?"nodebuffer":a.uint8array&&f instanceof Uint8Array?"uint8array":a.arraybuffer&&f instanceof ArrayBuffer?"arraybuffer":void 0},n.checkSupport=function(f){if(!a[f.toLowerCase()])throw new Error(f+" is not supported by this platform")},n.MAX_VALUE_16BITS=65535,n.MAX_VALUE_32BITS=-1,n.pretty=function(f){var g,x,b="";for(x=0;x<(f||"").length;x++)b+="\\x"+((g=f.charCodeAt(x))<16?"0":"")+g.toString(16).toUpperCase();return b},n.delay=function(f,g,x){setImmediate(function(){f.apply(x||null,g||[])})},n.inherits=function(f,g){function x(){}x.prototype=g.prototype,f.prototype=new x},n.extend=function(){var f,g,x={};for(f=0;f<arguments.length;f++)for(g in arguments[f])arguments[f].hasOwnProperty(g)&&x[g]===void 0&&(x[g]=arguments[f][g]);return x},n.prepareContent=function(f,g,x,b,_){return o.Promise.resolve(g).then(function(C){return a.blob&&(C instanceof Blob||["[object File]","[object Blob]"].indexOf(Object.prototype.toString.call(C))!==-1)&&typeof FileReader<"u"?new o.Promise(function(w,z){var F=new FileReader;F.onload=function(T){w(T.target.result)},F.onerror=function(T){z(T.target.error)},F.readAsArrayBuffer(C)}):C}).then(function(C){var w=n.getTypeOf(C);return w?(w==="arraybuffer"?C=n.transformTo("uint8array",C):w==="string"&&(_?C=i.decode(C):x&&b!==!0&&(C=function(z){return p(z,a.uint8array?new Uint8Array(z.length):new Array(z.length))}(C))),C):o.Promise.reject(new Error("Can't read the data of '"+f+"'. Is it in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?"))})}},{"./base64":1,"./external":6,"./nodejsUtils":14,"./support":30,setimmediate:54}],33:[function(e,t,n){"use strict";var a=e("./reader/readerFor"),i=e("./utils"),r=e("./signature"),o=e("./zipEntry"),s=(e("./utf8"),e("./support"));function p(l){this.files=[],this.loadOptions=l}p.prototype={checkSignature:function(l){if(!this.reader.readAndCheckSignature(l)){this.reader.index-=4;var c=this.reader.readString(4);throw new Error("Corrupted zip or bug: unexpected signature ("+i.pretty(c)+", expected "+i.pretty(l)+")")}},isSignature:function(l,c){var u=this.reader.index;this.reader.setIndex(l);var h=this.reader.readString(4)===c;return this.reader.setIndex(u),h},readBlockEndOfCentral:function(){this.diskNumber=this.reader.readInt(2),this.diskWithCentralDirStart=this.reader.readInt(2),this.centralDirRecordsOnThisDisk=this.reader.readInt(2),this.centralDirRecords=this.reader.readInt(2),this.centralDirSize=this.reader.readInt(4),this.centralDirOffset=this.reader.readInt(4),this.zipCommentLength=this.reader.readInt(2);var l=this.reader.readData(this.zipCommentLength),c=s.uint8array?"uint8array":"array",u=i.transformTo(c,l);this.zipComment=this.loadOptions.decodeFileName(u)},readBlockZip64EndOfCentral:function(){this.zip64EndOfCentralSize=this.reader.readInt(8),this.reader.skip(4),this.diskNumber=this.reader.readInt(4),this.diskWithCentralDirStart=this.reader.readInt(4),this.centralDirRecordsOnThisDisk=this.reader.readInt(8),this.centralDirRecords=this.reader.readInt(8),this.centralDirSize=this.reader.readInt(8),this.centralDirOffset=this.reader.readInt(8),this.zip64ExtensibleData={};for(var l,c,u,h=this.zip64EndOfCentralSize-44;0<h;)l=this.reader.readInt(2),c=this.reader.readInt(4),u=this.reader.readData(c),this.zip64ExtensibleData[l]={id:l,length:c,value:u}},readBlockZip64EndOfCentralLocator:function(){if(this.diskWithZip64CentralDirStart=this.reader.readInt(4),this.relativeOffsetEndOfZip64CentralDir=this.reader.readInt(8),this.disksCount=this.reader.readInt(4),1<this.disksCount)throw new Error("Multi-volumes zip are not supported")},readLocalFiles:function(){var l,c;for(l=0;l<this.files.length;l++)c=this.files[l],this.reader.setIndex(c.localHeaderOffset),this.checkSignature(r.LOCAL_FILE_HEADER),c.readLocalPart(this.reader),c.handleUTF8(),c.processAttributes()},readCentralDir:function(){var l;for(this.reader.setIndex(this.centralDirOffset);this.reader.readAndCheckSignature(r.CENTRAL_FILE_HEADER);)(l=new o({zip64:this.zip64},this.loadOptions)).readCentralPart(this.reader),this.files.push(l);if(this.centralDirRecords!==this.files.length&&this.centralDirRecords!==0&&this.files.length===0)throw new Error("Corrupted zip or bug: expected "+this.centralDirRecords+" records in central dir, got "+this.files.length)},readEndOfCentral:function(){var l=this.reader.lastIndexOfSignature(r.CENTRAL_DIRECTORY_END);if(l<0)throw this.isSignature(0,r.LOCAL_FILE_HEADER)?new Error("Corrupted zip: can't find end of central directory"):new Error("Can't find end of central directory : is this a zip file ? If it is, see https://stuk.github.io/jszip/documentation/howto/read_zip.html");this.reader.setIndex(l);var c=l;if(this.checkSignature(r.CENTRAL_DIRECTORY_END),this.readBlockEndOfCentral(),this.diskNumber===i.MAX_VALUE_16BITS||this.diskWithCentralDirStart===i.MAX_VALUE_16BITS||this.centralDirRecordsOnThisDisk===i.MAX_VALUE_16BITS||this.centralDirRecords===i.MAX_VALUE_16BITS||this.centralDirSize===i.MAX_VALUE_32BITS||this.centralDirOffset===i.MAX_VALUE_32BITS){if(this.zip64=!0,(l=this.reader.lastIndexOfSignature(r.ZIP64_CENTRAL_DIRECTORY_LOCATOR))<0)throw new Error("Corrupted zip: can't find the ZIP64 end of central directory locator");if(this.reader.setIndex(l),this.checkSignature(r.ZIP64_CENTRAL_DIRECTORY_LOCATOR),this.readBlockZip64EndOfCentralLocator(),!this.isSignature(this.relativeOffsetEndOfZip64CentralDir,r.ZIP64_CENTRAL_DIRECTORY_END)&&(this.relativeOffsetEndOfZip64CentralDir=this.reader.lastIndexOfSignature(r.ZIP64_CENTRAL_DIRECTORY_END),this.relativeOffsetEndOfZip64CentralDir<0))throw new Error("Corrupted zip: can't find the ZIP64 end of central directory");this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir),this.checkSignature(r.ZIP64_CENTRAL_DIRECTORY_END),this.readBlockZip64EndOfCentral()}var u=this.centralDirOffset+this.centralDirSize;this.zip64&&(u+=20,u+=12+this.zip64EndOfCentralSize);var h=c-u;if(0<h)this.isSignature(c,r.CENTRAL_FILE_HEADER)||(this.reader.zero=h);else if(h<0)throw new Error("Corrupted zip: missing "+Math.abs(h)+" bytes.")},prepareReader:function(l){this.reader=a(l)},load:function(l){this.prepareReader(l),this.readEndOfCentral(),this.readCentralDir(),this.readLocalFiles()}},t.exports=p},{"./reader/readerFor":22,"./signature":23,"./support":30,"./utf8":31,"./utils":32,"./zipEntry":34}],34:[function(e,t,n){"use strict";var a=e("./reader/readerFor"),i=e("./utils"),r=e("./compressedObject"),o=e("./crc32"),s=e("./utf8"),p=e("./compressions"),l=e("./support");function c(u,h){this.options=u,this.loadOptions=h}c.prototype={isEncrypted:function(){return(1&this.bitFlag)==1},useUTF8:function(){return(2048&this.bitFlag)==2048},readLocalPart:function(u){var h,f;if(u.skip(22),this.fileNameLength=u.readInt(2),f=u.readInt(2),this.fileName=u.readData(this.fileNameLength),u.skip(f),this.compressedSize===-1||this.uncompressedSize===-1)throw new Error("Bug or corrupted zip : didn't get enough information from the central directory (compressedSize === -1 || uncompressedSize === -1)");if((h=function(g){for(var x in p)if(p.hasOwnProperty(x)&&p[x].magic===g)return p[x];return null}(this.compressionMethod))===null)throw new Error("Corrupted zip : compression "+i.pretty(this.compressionMethod)+" unknown (inner file : "+i.transformTo("string",this.fileName)+")");this.decompressed=new r(this.compressedSize,this.uncompressedSize,this.crc32,h,u.readData(this.compressedSize))},readCentralPart:function(u){this.versionMadeBy=u.readInt(2),u.skip(2),this.bitFlag=u.readInt(2),this.compressionMethod=u.readString(2),this.date=u.readDate(),this.crc32=u.readInt(4),this.compressedSize=u.readInt(4),this.uncompressedSize=u.readInt(4);var h=u.readInt(2);if(this.extraFieldsLength=u.readInt(2),this.fileCommentLength=u.readInt(2),this.diskNumberStart=u.readInt(2),this.internalFileAttributes=u.readInt(2),this.externalFileAttributes=u.readInt(4),this.localHeaderOffset=u.readInt(4),this.isEncrypted())throw new Error("Encrypted zip are not supported");u.skip(h),this.readExtraFields(u),this.parseZIP64ExtraField(u),this.fileComment=u.readData(this.fileCommentLength)},processAttributes:function(){this.unixPermissions=null,this.dosPermissions=null;var u=this.versionMadeBy>>8;this.dir=!!(16&this.externalFileAttributes),u==0&&(this.dosPermissions=63&this.externalFileAttributes),u==3&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||this.fileNameStr.slice(-1)!=="/"||(this.dir=!0)},parseZIP64ExtraField:function(u){if(this.extraFields[1]){var h=a(this.extraFields[1].value);this.uncompressedSize===i.MAX_VALUE_32BITS&&(this.uncompressedSize=h.readInt(8)),this.compressedSize===i.MAX_VALUE_32BITS&&(this.compressedSize=h.readInt(8)),this.localHeaderOffset===i.MAX_VALUE_32BITS&&(this.localHeaderOffset=h.readInt(8)),this.diskNumberStart===i.MAX_VALUE_32BITS&&(this.diskNumberStart=h.readInt(4))}},readExtraFields:function(u){var h,f,g,x=u.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});u.index+4<x;)h=u.readInt(2),f=u.readInt(2),g=u.readData(f),this.extraFields[h]={id:h,length:f,value:g};u.setIndex(x)},handleUTF8:function(){var u=l.uint8array?"uint8array":"array";if(this.useUTF8())this.fileNameStr=s.utf8decode(this.fileName),this.fileCommentStr=s.utf8decode(this.fileComment);else{var h=this.findExtraFieldUnicodePath();if(h!==null)this.fileNameStr=h;else{var f=i.transformTo(u,this.fileName);this.fileNameStr=this.loadOptions.decodeFileName(f)}var g=this.findExtraFieldUnicodeComment();if(g!==null)this.fileCommentStr=g;else{var x=i.transformTo(u,this.fileComment);this.fileCommentStr=this.loadOptions.decodeFileName(x)}}},findExtraFieldUnicodePath:function(){var u=this.extraFields[28789];if(u){var h=a(u.value);return h.readInt(1)!==1||o(this.fileName)!==h.readInt(4)?null:s.utf8decode(h.readData(u.length-5))}return null},findExtraFieldUnicodeComment:function(){var u=this.extraFields[25461];if(u){var h=a(u.value);return h.readInt(1)!==1||o(this.fileComment)!==h.readInt(4)?null:s.utf8decode(h.readData(u.length-5))}return null}},t.exports=c},{"./compressedObject":2,"./compressions":3,"./crc32":4,"./reader/readerFor":22,"./support":30,"./utf8":31,"./utils":32}],35:[function(e,t,n){"use strict";function a(h,f,g){this.name=h,this.dir=g.dir,this.date=g.date,this.comment=g.comment,this.unixPermissions=g.unixPermissions,this.dosPermissions=g.dosPermissions,this._data=f,this._dataBinary=g.binary,this.options={compression:g.compression,compressionOptions:g.compressionOptions}}var i=e("./stream/StreamHelper"),r=e("./stream/DataWorker"),o=e("./utf8"),s=e("./compressedObject"),p=e("./stream/GenericWorker");a.prototype={internalStream:function(h){var f=null,g="string";try{if(!h)throw new Error("No output type specified.");var x=(g=h.toLowerCase())==="string"||g==="text";g!=="binarystring"&&g!=="text"||(g="string"),f=this._decompressWorker();var b=!this._dataBinary;b&&!x&&(f=f.pipe(new o.Utf8EncodeWorker)),!b&&x&&(f=f.pipe(new o.Utf8DecodeWorker))}catch(_){(f=new p("error")).error(_)}return new i(f,g,"")},async:function(h,f){return this.internalStream(h).accumulate(f)},nodeStream:function(h,f){return this.internalStream(h||"nodebuffer").toNodejsStream(f)},_compressWorker:function(h,f){if(this._data instanceof s&&this._data.compression.magic===h.magic)return this._data.getCompressedWorker();var g=this._decompressWorker();return this._dataBinary||(g=g.pipe(new o.Utf8EncodeWorker)),s.createWorkerFrom(g,h,f)},_decompressWorker:function(){return this._data instanceof s?this._data.getContentWorker():this._data instanceof p?this._data:new r(this._data)}};for(var l=["asText","asBinary","asNodeBuffer","asUint8Array","asArrayBuffer"],c=function(){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.")},u=0;u<l.length;u++)a.prototype[l[u]]=c;t.exports=a},{"./compressedObject":2,"./stream/DataWorker":27,"./stream/GenericWorker":28,"./stream/StreamHelper":29,"./utf8":31}],36:[function(e,t,n){(function(a){"use strict";var i,r,o=a.MutationObserver||a.WebKitMutationObserver;if(o){var s=0,p=new o(h),l=a.document.createTextNode("");p.observe(l,{characterData:!0}),i=function(){l.data=s=++s%2}}else if(a.setImmediate||a.MessageChannel===void 0)i="document"in a&&"onreadystatechange"in a.document.createElement("script")?function(){var f=a.document.createElement("script");f.onreadystatechange=function(){h(),f.onreadystatechange=null,f.parentNode.removeChild(f),f=null},a.document.documentElement.appendChild(f)}:function(){setTimeout(h,0)};else{var c=new a.MessageChannel;c.port1.onmessage=h,i=function(){c.port2.postMessage(0)}}var u=[];function h(){var f,g;r=!0;for(var x=u.length;x;){for(g=u,u=[],f=-1;++f<x;)g[f]();x=u.length}r=!1}t.exports=function(f){u.push(f)!==1||r||i()}}).call(this,typeof global<"u"?global:typeof self<"u"?self:typeof window<"u"?window:{})},{}],37:[function(e,t,n){"use strict";var a=e("immediate");function i(){}var r={},o=["REJECTED"],s=["FULFILLED"],p=["PENDING"];function l(x){if(typeof x!="function")throw new TypeError("resolver must be a function");this.state=p,this.queue=[],this.outcome=void 0,x!==i&&f(this,x)}function c(x,b,_){this.promise=x,typeof b=="function"&&(this.onFulfilled=b,this.callFulfilled=this.otherCallFulfilled),typeof _=="function"&&(this.onRejected=_,this.callRejected=this.otherCallRejected)}function u(x,b,_){a(function(){var C;try{C=b(_)}catch(w){return r.reject(x,w)}C===x?r.reject(x,new TypeError("Cannot resolve promise with itself")):r.resolve(x,C)})}function h(x){var b=x&&x.then;if(x&&(typeof x=="object"||typeof x=="function")&&typeof b=="function")return function(){b.apply(x,arguments)}}function f(x,b){var _=!1;function C(F){_||(_=!0,r.reject(x,F))}function w(F){_||(_=!0,r.resolve(x,F))}var z=g(function(){b(w,C)});z.status==="error"&&C(z.value)}function g(x,b){var _={};try{_.value=x(b),_.status="success"}catch(C){_.status="error",_.value=C}return _}(t.exports=l).prototype.finally=function(x){if(typeof x!="function")return this;var b=this.constructor;return this.then(function(_){return b.resolve(x()).then(function(){return _})},function(_){return b.resolve(x()).then(function(){throw _})})},l.prototype.catch=function(x){return this.then(null,x)},l.prototype.then=function(x,b){if(typeof x!="function"&&this.state===s||typeof b!="function"&&this.state===o)return this;var _=new this.constructor(i);return this.state!==p?u(_,this.state===s?x:b,this.outcome):this.queue.push(new c(_,x,b)),_},c.prototype.callFulfilled=function(x){r.resolve(this.promise,x)},c.prototype.otherCallFulfilled=function(x){u(this.promise,this.onFulfilled,x)},c.prototype.callRejected=function(x){r.reject(this.promise,x)},c.prototype.otherCallRejected=function(x){u(this.promise,this.onRejected,x)},r.resolve=function(x,b){var _=g(h,b);if(_.status==="error")return r.reject(x,_.value);var C=_.value;if(C)f(x,C);else{x.state=s,x.outcome=b;for(var w=-1,z=x.queue.length;++w<z;)x.queue[w].callFulfilled(b)}return x},r.reject=function(x,b){x.state=o,x.outcome=b;for(var _=-1,C=x.queue.length;++_<C;)x.queue[_].callRejected(b);return x},l.resolve=function(x){return x instanceof this?x:r.resolve(new this(i),x)},l.reject=function(x){var b=new this(i);return r.reject(b,x)},l.all=function(x){var b=this;if(Object.prototype.toString.call(x)!=="[object Array]")return this.reject(new TypeError("must be an array"));var _=x.length,C=!1;if(!_)return this.resolve([]);for(var w=new Array(_),z=0,F=-1,T=new this(i);++F<_;)S(x[F],F);return T;function S(W,Y){b.resolve(W).then(function(k){w[Y]=k,++z!==_||C||(C=!0,r.resolve(T,w))},function(k){C||(C=!0,r.reject(T,k))})}},l.race=function(x){var b=this;if(Object.prototype.toString.call(x)!=="[object Array]")return this.reject(new TypeError("must be an array"));var _=x.length,C=!1;if(!_)return this.resolve([]);for(var w=-1,z=new this(i);++w<_;)F=x[w],b.resolve(F).then(function(T){C||(C=!0,r.resolve(z,T))},function(T){C||(C=!0,r.reject(z,T))});var F;return z}},{immediate:36}],38:[function(e,t,n){"use strict";var a={};(0,e("./lib/utils/common").assign)(a,e("./lib/deflate"),e("./lib/inflate"),e("./lib/zlib/constants")),t.exports=a},{"./lib/deflate":39,"./lib/inflate":40,"./lib/utils/common":41,"./lib/zlib/constants":44}],39:[function(e,t,n){"use strict";var a=e("./zlib/deflate"),i=e("./utils/common"),r=e("./utils/strings"),o=e("./zlib/messages"),s=e("./zlib/zstream"),p=Object.prototype.toString,l=0,c=-1,u=0,h=8;function f(x){if(!(this instanceof f))return new f(x);this.options=i.assign({level:c,method:h,chunkSize:16384,windowBits:15,memLevel:8,strategy:u,to:""},x||{});var b=this.options;b.raw&&0<b.windowBits?b.windowBits=-b.windowBits:b.gzip&&0<b.windowBits&&b.windowBits<16&&(b.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new s,this.strm.avail_out=0;var _=a.deflateInit2(this.strm,b.level,b.method,b.windowBits,b.memLevel,b.strategy);if(_!==l)throw new Error(o[_]);if(b.header&&a.deflateSetHeader(this.strm,b.header),b.dictionary){var C;if(C=typeof b.dictionary=="string"?r.string2buf(b.dictionary):p.call(b.dictionary)==="[object ArrayBuffer]"?new Uint8Array(b.dictionary):b.dictionary,(_=a.deflateSetDictionary(this.strm,C))!==l)throw new Error(o[_]);this._dict_set=!0}}function g(x,b){var _=new f(b);if(_.push(x,!0),_.err)throw _.msg||o[_.err];return _.result}f.prototype.push=function(x,b){var _,C,w=this.strm,z=this.options.chunkSize;if(this.ended)return!1;C=b===~~b?b:b===!0?4:0,typeof x=="string"?w.input=r.string2buf(x):p.call(x)==="[object ArrayBuffer]"?w.input=new Uint8Array(x):w.input=x,w.next_in=0,w.avail_in=w.input.length;do{if(w.avail_out===0&&(w.output=new i.Buf8(z),w.next_out=0,w.avail_out=z),(_=a.deflate(w,C))!==1&&_!==l)return this.onEnd(_),!(this.ended=!0);w.avail_out!==0&&(w.avail_in!==0||C!==4&&C!==2)||(this.options.to==="string"?this.onData(r.buf2binstring(i.shrinkBuf(w.output,w.next_out))):this.onData(i.shrinkBuf(w.output,w.next_out)))}while((0<w.avail_in||w.avail_out===0)&&_!==1);return C===4?(_=a.deflateEnd(this.strm),this.onEnd(_),this.ended=!0,_===l):C!==2||(this.onEnd(l),!(w.avail_out=0))},f.prototype.onData=function(x){this.chunks.push(x)},f.prototype.onEnd=function(x){x===l&&(this.options.to==="string"?this.result=this.chunks.join(""):this.result=i.flattenChunks(this.chunks)),this.chunks=[],this.err=x,this.msg=this.strm.msg},n.Deflate=f,n.deflate=g,n.deflateRaw=function(x,b){return(b=b||{}).raw=!0,g(x,b)},n.gzip=function(x,b){return(b=b||{}).gzip=!0,g(x,b)}},{"./utils/common":41,"./utils/strings":42,"./zlib/deflate":46,"./zlib/messages":51,"./zlib/zstream":53}],40:[function(e,t,n){"use strict";var a=e("./zlib/inflate"),i=e("./utils/common"),r=e("./utils/strings"),o=e("./zlib/constants"),s=e("./zlib/messages"),p=e("./zlib/zstream"),l=e("./zlib/gzheader"),c=Object.prototype.toString;function u(f){if(!(this instanceof u))return new u(f);this.options=i.assign({chunkSize:16384,windowBits:0,to:""},f||{});var g=this.options;g.raw&&0<=g.windowBits&&g.windowBits<16&&(g.windowBits=-g.windowBits,g.windowBits===0&&(g.windowBits=-15)),!(0<=g.windowBits&&g.windowBits<16)||f&&f.windowBits||(g.windowBits+=32),15<g.windowBits&&g.windowBits<48&&(15&g.windowBits)==0&&(g.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new p,this.strm.avail_out=0;var x=a.inflateInit2(this.strm,g.windowBits);if(x!==o.Z_OK)throw new Error(s[x]);this.header=new l,a.inflateGetHeader(this.strm,this.header)}function h(f,g){var x=new u(g);if(x.push(f,!0),x.err)throw x.msg||s[x.err];return x.result}u.prototype.push=function(f,g){var x,b,_,C,w,z,F=this.strm,T=this.options.chunkSize,S=this.options.dictionary,W=!1;if(this.ended)return!1;b=g===~~g?g:g===!0?o.Z_FINISH:o.Z_NO_FLUSH,typeof f=="string"?F.input=r.binstring2buf(f):c.call(f)==="[object ArrayBuffer]"?F.input=new Uint8Array(f):F.input=f,F.next_in=0,F.avail_in=F.input.length;do{if(F.avail_out===0&&(F.output=new i.Buf8(T),F.next_out=0,F.avail_out=T),(x=a.inflate(F,o.Z_NO_FLUSH))===o.Z_NEED_DICT&&S&&(z=typeof S=="string"?r.string2buf(S):c.call(S)==="[object ArrayBuffer]"?new Uint8Array(S):S,x=a.inflateSetDictionary(this.strm,z)),x===o.Z_BUF_ERROR&&W===!0&&(x=o.Z_OK,W=!1),x!==o.Z_STREAM_END&&x!==o.Z_OK)return this.onEnd(x),!(this.ended=!0);F.next_out&&(F.avail_out!==0&&x!==o.Z_STREAM_END&&(F.avail_in!==0||b!==o.Z_FINISH&&b!==o.Z_SYNC_FLUSH)||(this.options.to==="string"?(_=r.utf8border(F.output,F.next_out),C=F.next_out-_,w=r.buf2string(F.output,_),F.next_out=C,F.avail_out=T-C,C&&i.arraySet(F.output,F.output,_,C,0),this.onData(w)):this.onData(i.shrinkBuf(F.output,F.next_out)))),F.avail_in===0&&F.avail_out===0&&(W=!0)}while((0<F.avail_in||F.avail_out===0)&&x!==o.Z_STREAM_END);return x===o.Z_STREAM_END&&(b=o.Z_FINISH),b===o.Z_FINISH?(x=a.inflateEnd(this.strm),this.onEnd(x),this.ended=!0,x===o.Z_OK):b!==o.Z_SYNC_FLUSH||(this.onEnd(o.Z_OK),!(F.avail_out=0))},u.prototype.onData=function(f){this.chunks.push(f)},u.prototype.onEnd=function(f){f===o.Z_OK&&(this.options.to==="string"?this.result=this.chunks.join(""):this.result=i.flattenChunks(this.chunks)),this.chunks=[],this.err=f,this.msg=this.strm.msg},n.Inflate=u,n.inflate=h,n.inflateRaw=function(f,g){return(g=g||{}).raw=!0,h(f,g)},n.ungzip=h},{"./utils/common":41,"./utils/strings":42,"./zlib/constants":44,"./zlib/gzheader":47,"./zlib/inflate":49,"./zlib/messages":51,"./zlib/zstream":53}],41:[function(e,t,n){"use strict";var a=typeof Uint8Array<"u"&&typeof Uint16Array<"u"&&typeof Int32Array<"u";n.assign=function(o){for(var s=Array.prototype.slice.call(arguments,1);s.length;){var p=s.shift();if(p){if(typeof p!="object")throw new TypeError(p+"must be non-object");for(var l in p)p.hasOwnProperty(l)&&(o[l]=p[l])}}return o},n.shrinkBuf=function(o,s){return o.length===s?o:o.subarray?o.subarray(0,s):(o.length=s,o)};var i={arraySet:function(o,s,p,l,c){if(s.subarray&&o.subarray)o.set(s.subarray(p,p+l),c);else for(var u=0;u<l;u++)o[c+u]=s[p+u]},flattenChunks:function(o){var s,p,l,c,u,h;for(s=l=0,p=o.length;s<p;s++)l+=o[s].length;for(h=new Uint8Array(l),s=c=0,p=o.length;s<p;s++)u=o[s],h.set(u,c),c+=u.length;return h}},r={arraySet:function(o,s,p,l,c){for(var u=0;u<l;u++)o[c+u]=s[p+u]},flattenChunks:function(o){return[].concat.apply([],o)}};n.setTyped=function(o){o?(n.Buf8=Uint8Array,n.Buf16=Uint16Array,n.Buf32=Int32Array,n.assign(n,i)):(n.Buf8=Array,n.Buf16=Array,n.Buf32=Array,n.assign(n,r))},n.setTyped(a)},{}],42:[function(e,t,n){"use strict";var a=e("./common"),i=!0,r=!0;try{String.fromCharCode.apply(null,[0])}catch{i=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch{r=!1}for(var o=new a.Buf8(256),s=0;s<256;s++)o[s]=252<=s?6:248<=s?5:240<=s?4:224<=s?3:192<=s?2:1;function p(l,c){if(c<65537&&(l.subarray&&r||!l.subarray&&i))return String.fromCharCode.apply(null,a.shrinkBuf(l,c));for(var u="",h=0;h<c;h++)u+=String.fromCharCode(l[h]);return u}o[254]=o[254]=1,n.string2buf=function(l){var c,u,h,f,g,x=l.length,b=0;for(f=0;f<x;f++)(64512&(u=l.charCodeAt(f)))==55296&&f+1<x&&(64512&(h=l.charCodeAt(f+1)))==56320&&(u=65536+(u-55296<<10)+(h-56320),f++),b+=u<128?1:u<2048?2:u<65536?3:4;for(c=new a.Buf8(b),f=g=0;g<b;f++)(64512&(u=l.charCodeAt(f)))==55296&&f+1<x&&(64512&(h=l.charCodeAt(f+1)))==56320&&(u=65536+(u-55296<<10)+(h-56320),f++),u<128?c[g++]=u:(u<2048?c[g++]=192|u>>>6:(u<65536?c[g++]=224|u>>>12:(c[g++]=240|u>>>18,c[g++]=128|u>>>12&63),c[g++]=128|u>>>6&63),c[g++]=128|63&u);return c},n.buf2binstring=function(l){return p(l,l.length)},n.binstring2buf=function(l){for(var c=new a.Buf8(l.length),u=0,h=c.length;u<h;u++)c[u]=l.charCodeAt(u);return c},n.buf2string=function(l,c){var u,h,f,g,x=c||l.length,b=new Array(2*x);for(u=h=0;u<x;)if((f=l[u++])<128)b[h++]=f;else if(4<(g=o[f]))b[h++]=65533,u+=g-1;else{for(f&=g===2?31:g===3?15:7;1<g&&u<x;)f=f<<6|63&l[u++],g--;1<g?b[h++]=65533:f<65536?b[h++]=f:(f-=65536,b[h++]=55296|f>>10&1023,b[h++]=56320|1023&f)}return p(b,h)},n.utf8border=function(l,c){var u;for((c=c||l.length)>l.length&&(c=l.length),u=c-1;0<=u&&(192&l[u])==128;)u--;return u<0||u===0?c:u+o[l[u]]>c?u:c}},{"./common":41}],43:[function(e,t,n){"use strict";t.exports=function(a,i,r,o){for(var s=65535&a|0,p=a>>>16&65535|0,l=0;r!==0;){for(r-=l=2e3<r?2e3:r;p=p+(s=s+i[o++]|0)|0,--l;);s%=65521,p%=65521}return s|p<<16|0}},{}],44:[function(e,t,n){"use strict";t.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],45:[function(e,t,n){"use strict";var a=function(){for(var i,r=[],o=0;o<256;o++){i=o;for(var s=0;s<8;s++)i=1&i?3988292384^i>>>1:i>>>1;r[o]=i}return r}();t.exports=function(i,r,o,s){var p=a,l=s+o;i^=-1;for(var c=s;c<l;c++)i=i>>>8^p[255&(i^r[c])];return-1^i}},{}],46:[function(e,t,n){"use strict";var a,i=e("../utils/common"),r=e("./trees"),o=e("./adler32"),s=e("./crc32"),p=e("./messages"),l=0,c=4,u=0,h=-2,f=-1,g=4,x=2,b=8,_=9,C=286,w=30,z=19,F=2*C+1,T=15,S=3,W=258,Y=W+S+1,k=42,E=113,m=1,P=2,J=3,D=4;function ae(d,B){return d.msg=p[B],B}function R(d){return(d<<1)-(4<d?9:0)}function te(d){for(var B=d.length;0<=--B;)d[B]=0}function A(d){var B=d.state,M=B.pending;M>d.avail_out&&(M=d.avail_out),M!==0&&(i.arraySet(d.output,B.pending_buf,B.pending_out,M,d.next_out),d.next_out+=M,B.pending_out+=M,d.total_out+=M,d.avail_out-=M,B.pending-=M,B.pending===0&&(B.pending_out=0))}function I(d,B){r._tr_flush_block(d,0<=d.block_start?d.block_start:-1,d.strstart-d.block_start,B),d.block_start=d.strstart,A(d.strm)}function ee(d,B){d.pending_buf[d.pending++]=B}function G(d,B){d.pending_buf[d.pending++]=B>>>8&255,d.pending_buf[d.pending++]=255&B}function q(d,B){var M,y,v=d.max_chain_length,j=d.strstart,O=d.prev_length,N=d.nice_match,L=d.strstart>d.w_size-Y?d.strstart-(d.w_size-Y):0,U=d.window,Z=d.w_mask,V=d.prev,Q=d.strstart+W,le=U[j+O-1],re=U[j+O];d.prev_length>=d.good_match&&(v>>=2),N>d.lookahead&&(N=d.lookahead);do if(U[(M=B)+O]===re&&U[M+O-1]===le&&U[M]===U[j]&&U[++M]===U[j+1]){j+=2,M++;do;while(U[++j]===U[++M]&&U[++j]===U[++M]&&U[++j]===U[++M]&&U[++j]===U[++M]&&U[++j]===U[++M]&&U[++j]===U[++M]&&U[++j]===U[++M]&&U[++j]===U[++M]&&j<Q);if(y=W-(Q-j),j=Q-W,O<y){if(d.match_start=B,N<=(O=y))break;le=U[j+O-1],re=U[j+O]}}while((B=V[B&Z])>L&&--v!=0);return O<=d.lookahead?O:d.lookahead}function ue(d){var B,M,y,v,j,O,N,L,U,Z,V=d.w_size;do{if(v=d.window_size-d.lookahead-d.strstart,d.strstart>=V+(V-Y)){for(i.arraySet(d.window,d.window,V,V,0),d.match_start-=V,d.strstart-=V,d.block_start-=V,B=M=d.hash_size;y=d.head[--B],d.head[B]=V<=y?y-V:0,--M;);for(B=M=V;y=d.prev[--B],d.prev[B]=V<=y?y-V:0,--M;);v+=V}if(d.strm.avail_in===0)break;if(O=d.strm,N=d.window,L=d.strstart+d.lookahead,U=v,Z=void 0,Z=O.avail_in,U<Z&&(Z=U),M=Z===0?0:(O.avail_in-=Z,i.arraySet(N,O.input,O.next_in,Z,L),O.state.wrap===1?O.adler=o(O.adler,N,Z,L):O.state.wrap===2&&(O.adler=s(O.adler,N,Z,L)),O.next_in+=Z,O.total_in+=Z,Z),d.lookahead+=M,d.lookahead+d.insert>=S)for(j=d.strstart-d.insert,d.ins_h=d.window[j],d.ins_h=(d.ins_h<<d.hash_shift^d.window[j+1])&d.hash_mask;d.insert&&(d.ins_h=(d.ins_h<<d.hash_shift^d.window[j+S-1])&d.hash_mask,d.prev[j&d.w_mask]=d.head[d.ins_h],d.head[d.ins_h]=j,j++,d.insert--,!(d.lookahead+d.insert<S)););}while(d.lookahead<Y&&d.strm.avail_in!==0)}function ve(d,B){for(var M,y;;){if(d.lookahead<Y){if(ue(d),d.lookahead<Y&&B===l)return m;if(d.lookahead===0)break}if(M=0,d.lookahead>=S&&(d.ins_h=(d.ins_h<<d.hash_shift^d.window[d.strstart+S-1])&d.hash_mask,M=d.prev[d.strstart&d.w_mask]=d.head[d.ins_h],d.head[d.ins_h]=d.strstart),M!==0&&d.strstart-M<=d.w_size-Y&&(d.match_length=q(d,M)),d.match_length>=S)if(y=r._tr_tally(d,d.strstart-d.match_start,d.match_length-S),d.lookahead-=d.match_length,d.match_length<=d.max_lazy_match&&d.lookahead>=S){for(d.match_length--;d.strstart++,d.ins_h=(d.ins_h<<d.hash_shift^d.window[d.strstart+S-1])&d.hash_mask,M=d.prev[d.strstart&d.w_mask]=d.head[d.ins_h],d.head[d.ins_h]=d.strstart,--d.match_length!=0;);d.strstart++}else d.strstart+=d.match_length,d.match_length=0,d.ins_h=d.window[d.strstart],d.ins_h=(d.ins_h<<d.hash_shift^d.window[d.strstart+1])&d.hash_mask;else y=r._tr_tally(d,0,d.window[d.strstart]),d.lookahead--,d.strstart++;if(y&&(I(d,!1),d.strm.avail_out===0))return m}return d.insert=d.strstart<S-1?d.strstart:S-1,B===c?(I(d,!0),d.strm.avail_out===0?J:D):d.last_lit&&(I(d,!1),d.strm.avail_out===0)?m:P}function ie(d,B){for(var M,y,v;;){if(d.lookahead<Y){if(ue(d),d.lookahead<Y&&B===l)return m;if(d.lookahead===0)break}if(M=0,d.lookahead>=S&&(d.ins_h=(d.ins_h<<d.hash_shift^d.window[d.strstart+S-1])&d.hash_mask,M=d.prev[d.strstart&d.w_mask]=d.head[d.ins_h],d.head[d.ins_h]=d.strstart),d.prev_length=d.match_length,d.prev_match=d.match_start,d.match_length=S-1,M!==0&&d.prev_length<d.max_lazy_match&&d.strstart-M<=d.w_size-Y&&(d.match_length=q(d,M),d.match_length<=5&&(d.strategy===1||d.match_length===S&&4096<d.strstart-d.match_start)&&(d.match_length=S-1)),d.prev_length>=S&&d.match_length<=d.prev_length){for(v=d.strstart+d.lookahead-S,y=r._tr_tally(d,d.strstart-1-d.prev_match,d.prev_length-S),d.lookahead-=d.prev_length-1,d.prev_length-=2;++d.strstart<=v&&(d.ins_h=(d.ins_h<<d.hash_shift^d.window[d.strstart+S-1])&d.hash_mask,M=d.prev[d.strstart&d.w_mask]=d.head[d.ins_h],d.head[d.ins_h]=d.strstart),--d.prev_length!=0;);if(d.match_available=0,d.match_length=S-1,d.strstart++,y&&(I(d,!1),d.strm.avail_out===0))return m}else if(d.match_available){if((y=r._tr_tally(d,0,d.window[d.strstart-1]))&&I(d,!1),d.strstart++,d.lookahead--,d.strm.avail_out===0)return m}else d.match_available=1,d.strstart++,d.lookahead--}return d.match_available&&(y=r._tr_tally(d,0,d.window[d.strstart-1]),d.match_available=0),d.insert=d.strstart<S-1?d.strstart:S-1,B===c?(I(d,!0),d.strm.avail_out===0?J:D):d.last_lit&&(I(d,!1),d.strm.avail_out===0)?m:P}function oe(d,B,M,y,v){this.good_length=d,this.max_lazy=B,this.nice_length=M,this.max_chain=y,this.func=v}function he(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=b,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new i.Buf16(2*F),this.dyn_dtree=new i.Buf16(2*(2*w+1)),this.bl_tree=new i.Buf16(2*(2*z+1)),te(this.dyn_ltree),te(this.dyn_dtree),te(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new i.Buf16(T+1),this.heap=new i.Buf16(2*C+1),te(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new i.Buf16(2*C+1),te(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function de(d){var B;return d&&d.state?(d.total_in=d.total_out=0,d.data_type=x,(B=d.state).pending=0,B.pending_out=0,B.wrap<0&&(B.wrap=-B.wrap),B.status=B.wrap?k:E,d.adler=B.wrap===2?0:1,B.last_flush=l,r._tr_init(B),u):ae(d,h)}function ze(d){var B=de(d);return B===u&&function(M){M.window_size=2*M.w_size,te(M.head),M.max_lazy_match=a[M.level].max_lazy,M.good_match=a[M.level].good_length,M.nice_match=a[M.level].nice_length,M.max_chain_length=a[M.level].max_chain,M.strstart=0,M.block_start=0,M.lookahead=0,M.insert=0,M.match_length=M.prev_length=S-1,M.match_available=0,M.ins_h=0}(d.state),B}function Ae(d,B,M,y,v,j){if(!d)return h;var O=1;if(B===f&&(B=6),y<0?(O=0,y=-y):15<y&&(O=2,y-=16),v<1||_<v||M!==b||y<8||15<y||B<0||9<B||j<0||g<j)return ae(d,h);y===8&&(y=9);var N=new he;return(d.state=N).strm=d,N.wrap=O,N.gzhead=null,N.w_bits=y,N.w_size=1<<N.w_bits,N.w_mask=N.w_size-1,N.hash_bits=v+7,N.hash_size=1<<N.hash_bits,N.hash_mask=N.hash_size-1,N.hash_shift=~~((N.hash_bits+S-1)/S),N.window=new i.Buf8(2*N.w_size),N.head=new i.Buf16(N.hash_size),N.prev=new i.Buf16(N.w_size),N.lit_bufsize=1<<v+6,N.pending_buf_size=4*N.lit_bufsize,N.pending_buf=new i.Buf8(N.pending_buf_size),N.d_buf=1*N.lit_bufsize,N.l_buf=3*N.lit_bufsize,N.level=B,N.strategy=j,N.method=M,ze(d)}a=[new oe(0,0,0,0,function(d,B){var M=65535;for(M>d.pending_buf_size-5&&(M=d.pending_buf_size-5);;){if(d.lookahead<=1){if(ue(d),d.lookahead===0&&B===l)return m;if(d.lookahead===0)break}d.strstart+=d.lookahead,d.lookahead=0;var y=d.block_start+M;if((d.strstart===0||d.strstart>=y)&&(d.lookahead=d.strstart-y,d.strstart=y,I(d,!1),d.strm.avail_out===0)||d.strstart-d.block_start>=d.w_size-Y&&(I(d,!1),d.strm.avail_out===0))return m}return d.insert=0,B===c?(I(d,!0),d.strm.avail_out===0?J:D):(d.strstart>d.block_start&&(I(d,!1),d.strm.avail_out),m)}),new oe(4,4,8,4,ve),new oe(4,5,16,8,ve),new oe(4,6,32,32,ve),new oe(4,4,16,16,ie),new oe(8,16,32,32,ie),new oe(8,16,128,128,ie),new oe(8,32,128,256,ie),new oe(32,128,258,1024,ie),new oe(32,258,258,4096,ie)],n.deflateInit=function(d,B){return Ae(d,B,b,15,8,0)},n.deflateInit2=Ae,n.deflateReset=ze,n.deflateResetKeep=de,n.deflateSetHeader=function(d,B){return d&&d.state?d.state.wrap!==2?h:(d.state.gzhead=B,u):h},n.deflate=function(d,B){var M,y,v,j;if(!d||!d.state||5<B||B<0)return d?ae(d,h):h;if(y=d.state,!d.output||!d.input&&d.avail_in!==0||y.status===666&&B!==c)return ae(d,d.avail_out===0?-5:h);if(y.strm=d,M=y.last_flush,y.last_flush=B,y.status===k)if(y.wrap===2)d.adler=0,ee(y,31),ee(y,139),ee(y,8),y.gzhead?(ee(y,(y.gzhead.text?1:0)+(y.gzhead.hcrc?2:0)+(y.gzhead.extra?4:0)+(y.gzhead.name?8:0)+(y.gzhead.comment?16:0)),ee(y,255&y.gzhead.time),ee(y,y.gzhead.time>>8&255),ee(y,y.gzhead.time>>16&255),ee(y,y.gzhead.time>>24&255),ee(y,y.level===9?2:2<=y.strategy||y.level<2?4:0),ee(y,255&y.gzhead.os),y.gzhead.extra&&y.gzhead.extra.length&&(ee(y,255&y.gzhead.extra.length),ee(y,y.gzhead.extra.length>>8&255)),y.gzhead.hcrc&&(d.adler=s(d.adler,y.pending_buf,y.pending,0)),y.gzindex=0,y.status=69):(ee(y,0),ee(y,0),ee(y,0),ee(y,0),ee(y,0),ee(y,y.level===9?2:2<=y.strategy||y.level<2?4:0),ee(y,3),y.status=E);else{var O=b+(y.w_bits-8<<4)<<8;O|=(2<=y.strategy||y.level<2?0:y.level<6?1:y.level===6?2:3)<<6,y.strstart!==0&&(O|=32),O+=31-O%31,y.status=E,G(y,O),y.strstart!==0&&(G(y,d.adler>>>16),G(y,65535&d.adler)),d.adler=1}if(y.status===69)if(y.gzhead.extra){for(v=y.pending;y.gzindex<(65535&y.gzhead.extra.length)&&(y.pending!==y.pending_buf_size||(y.gzhead.hcrc&&y.pending>v&&(d.adler=s(d.adler,y.pending_buf,y.pending-v,v)),A(d),v=y.pending,y.pending!==y.pending_buf_size));)ee(y,255&y.gzhead.extra[y.gzindex]),y.gzindex++;y.gzhead.hcrc&&y.pending>v&&(d.adler=s(d.adler,y.pending_buf,y.pending-v,v)),y.gzindex===y.gzhead.extra.length&&(y.gzindex=0,y.status=73)}else y.status=73;if(y.status===73)if(y.gzhead.name){v=y.pending;do{if(y.pending===y.pending_buf_size&&(y.gzhead.hcrc&&y.pending>v&&(d.adler=s(d.adler,y.pending_buf,y.pending-v,v)),A(d),v=y.pending,y.pending===y.pending_buf_size)){j=1;break}j=y.gzindex<y.gzhead.name.length?255&y.gzhead.name.charCodeAt(y.gzindex++):0,ee(y,j)}while(j!==0);y.gzhead.hcrc&&y.pending>v&&(d.adler=s(d.adler,y.pending_buf,y.pending-v,v)),j===0&&(y.gzindex=0,y.status=91)}else y.status=91;if(y.status===91)if(y.gzhead.comment){v=y.pending;do{if(y.pending===y.pending_buf_size&&(y.gzhead.hcrc&&y.pending>v&&(d.adler=s(d.adler,y.pending_buf,y.pending-v,v)),A(d),v=y.pending,y.pending===y.pending_buf_size)){j=1;break}j=y.gzindex<y.gzhead.comment.length?255&y.gzhead.comment.charCodeAt(y.gzindex++):0,ee(y,j)}while(j!==0);y.gzhead.hcrc&&y.pending>v&&(d.adler=s(d.adler,y.pending_buf,y.pending-v,v)),j===0&&(y.status=103)}else y.status=103;if(y.status===103&&(y.gzhead.hcrc?(y.pending+2>y.pending_buf_size&&A(d),y.pending+2<=y.pending_buf_size&&(ee(y,255&d.adler),ee(y,d.adler>>8&255),d.adler=0,y.status=E)):y.status=E),y.pending!==0){if(A(d),d.avail_out===0)return y.last_flush=-1,u}else if(d.avail_in===0&&R(B)<=R(M)&&B!==c)return ae(d,-5);if(y.status===666&&d.avail_in!==0)return ae(d,-5);if(d.avail_in!==0||y.lookahead!==0||B!==l&&y.status!==666){var N=y.strategy===2?function(L,U){for(var Z;;){if(L.lookahead===0&&(ue(L),L.lookahead===0)){if(U===l)return m;break}if(L.match_length=0,Z=r._tr_tally(L,0,L.window[L.strstart]),L.lookahead--,L.strstart++,Z&&(I(L,!1),L.strm.avail_out===0))return m}return L.insert=0,U===c?(I(L,!0),L.strm.avail_out===0?J:D):L.last_lit&&(I(L,!1),L.strm.avail_out===0)?m:P}(y,B):y.strategy===3?function(L,U){for(var Z,V,Q,le,re=L.window;;){if(L.lookahead<=W){if(ue(L),L.lookahead<=W&&U===l)return m;if(L.lookahead===0)break}if(L.match_length=0,L.lookahead>=S&&0<L.strstart&&(V=re[Q=L.strstart-1])===re[++Q]&&V===re[++Q]&&V===re[++Q]){le=L.strstart+W;do;while(V===re[++Q]&&V===re[++Q]&&V===re[++Q]&&V===re[++Q]&&V===re[++Q]&&V===re[++Q]&&V===re[++Q]&&V===re[++Q]&&Q<le);L.match_length=W-(le-Q),L.match_length>L.lookahead&&(L.match_length=L.lookahead)}if(L.match_length>=S?(Z=r._tr_tally(L,1,L.match_length-S),L.lookahead-=L.match_length,L.strstart+=L.match_length,L.match_length=0):(Z=r._tr_tally(L,0,L.window[L.strstart]),L.lookahead--,L.strstart++),Z&&(I(L,!1),L.strm.avail_out===0))return m}return L.insert=0,U===c?(I(L,!0),L.strm.avail_out===0?J:D):L.last_lit&&(I(L,!1),L.strm.avail_out===0)?m:P}(y,B):a[y.level].func(y,B);if(N!==J&&N!==D||(y.status=666),N===m||N===J)return d.avail_out===0&&(y.last_flush=-1),u;if(N===P&&(B===1?r._tr_align(y):B!==5&&(r._tr_stored_block(y,0,0,!1),B===3&&(te(y.head),y.lookahead===0&&(y.strstart=0,y.block_start=0,y.insert=0))),A(d),d.avail_out===0))return y.last_flush=-1,u}return B!==c?u:y.wrap<=0?1:(y.wrap===2?(ee(y,255&d.adler),ee(y,d.adler>>8&255),ee(y,d.adler>>16&255),ee(y,d.adler>>24&255),ee(y,255&d.total_in),ee(y,d.total_in>>8&255),ee(y,d.total_in>>16&255),ee(y,d.total_in>>24&255)):(G(y,d.adler>>>16),G(y,65535&d.adler)),A(d),0<y.wrap&&(y.wrap=-y.wrap),y.pending!==0?u:1)},n.deflateEnd=function(d){var B;return d&&d.state?(B=d.state.status)!==k&&B!==69&&B!==73&&B!==91&&B!==103&&B!==E&&B!==666?ae(d,h):(d.state=null,B===E?ae(d,-3):u):h},n.deflateSetDictionary=function(d,B){var M,y,v,j,O,N,L,U,Z=B.length;if(!d||!d.state||(j=(M=d.state).wrap)===2||j===1&&M.status!==k||M.lookahead)return h;for(j===1&&(d.adler=o(d.adler,B,Z,0)),M.wrap=0,Z>=M.w_size&&(j===0&&(te(M.head),M.strstart=0,M.block_start=0,M.insert=0),U=new i.Buf8(M.w_size),i.arraySet(U,B,Z-M.w_size,M.w_size,0),B=U,Z=M.w_size),O=d.avail_in,N=d.next_in,L=d.input,d.avail_in=Z,d.next_in=0,d.input=B,ue(M);M.lookahead>=S;){for(y=M.strstart,v=M.lookahead-(S-1);M.ins_h=(M.ins_h<<M.hash_shift^M.window[y+S-1])&M.hash_mask,M.prev[y&M.w_mask]=M.head[M.ins_h],M.head[M.ins_h]=y,y++,--v;);M.strstart=y,M.lookahead=S-1,ue(M)}return M.strstart+=M.lookahead,M.block_start=M.strstart,M.insert=M.lookahead,M.lookahead=0,M.match_length=M.prev_length=S-1,M.match_available=0,d.next_in=N,d.input=L,d.avail_in=O,M.wrap=j,u},n.deflateInfo="pako deflate (from Nodeca project)"},{"../utils/common":41,"./adler32":43,"./crc32":45,"./messages":51,"./trees":52}],47:[function(e,t,n){"use strict";t.exports=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}},{}],48:[function(e,t,n){"use strict";t.exports=function(a,i){var r,o,s,p,l,c,u,h,f,g,x,b,_,C,w,z,F,T,S,W,Y,k,E,m,P;r=a.state,o=a.next_in,m=a.input,s=o+(a.avail_in-5),p=a.next_out,P=a.output,l=p-(i-a.avail_out),c=p+(a.avail_out-257),u=r.dmax,h=r.wsize,f=r.whave,g=r.wnext,x=r.window,b=r.hold,_=r.bits,C=r.lencode,w=r.distcode,z=(1<<r.lenbits)-1,F=(1<<r.distbits)-1;e:do{_<15&&(b+=m[o++]<<_,_+=8,b+=m[o++]<<_,_+=8),T=C[b&z];t:for(;;){if(b>>>=S=T>>>24,_-=S,(S=T>>>16&255)===0)P[p++]=65535&T;else{if(!(16&S)){if((64&S)==0){T=C[(65535&T)+(b&(1<<S)-1)];continue t}if(32&S){r.mode=12;break e}a.msg="invalid literal/length code",r.mode=30;break e}W=65535&T,(S&=15)&&(_<S&&(b+=m[o++]<<_,_+=8),W+=b&(1<<S)-1,b>>>=S,_-=S),_<15&&(b+=m[o++]<<_,_+=8,b+=m[o++]<<_,_+=8),T=w[b&F];n:for(;;){if(b>>>=S=T>>>24,_-=S,!(16&(S=T>>>16&255))){if((64&S)==0){T=w[(65535&T)+(b&(1<<S)-1)];continue n}a.msg="invalid distance code",r.mode=30;break e}if(Y=65535&T,_<(S&=15)&&(b+=m[o++]<<_,(_+=8)<S&&(b+=m[o++]<<_,_+=8)),u<(Y+=b&(1<<S)-1)){a.msg="invalid distance too far back",r.mode=30;break e}if(b>>>=S,_-=S,(S=p-l)<Y){if(f<(S=Y-S)&&r.sane){a.msg="invalid distance too far back",r.mode=30;break e}if(E=x,(k=0)===g){if(k+=h-S,S<W){for(W-=S;P[p++]=x[k++],--S;);k=p-Y,E=P}}else if(g<S){if(k+=h+g-S,(S-=g)<W){for(W-=S;P[p++]=x[k++],--S;);if(k=0,g<W){for(W-=S=g;P[p++]=x[k++],--S;);k=p-Y,E=P}}}else if(k+=g-S,S<W){for(W-=S;P[p++]=x[k++],--S;);k=p-Y,E=P}for(;2<W;)P[p++]=E[k++],P[p++]=E[k++],P[p++]=E[k++],W-=3;W&&(P[p++]=E[k++],1<W&&(P[p++]=E[k++]))}else{for(k=p-Y;P[p++]=P[k++],P[p++]=P[k++],P[p++]=P[k++],2<(W-=3););W&&(P[p++]=P[k++],1<W&&(P[p++]=P[k++]))}break}}break}}while(o<s&&p<c);o-=W=_>>3,b&=(1<<(_-=W<<3))-1,a.next_in=o,a.next_out=p,a.avail_in=o<s?s-o+5:5-(o-s),a.avail_out=p<c?c-p+257:257-(p-c),r.hold=b,r.bits=_}},{}],49:[function(e,t,n){"use strict";var a=e("../utils/common"),i=e("./adler32"),r=e("./crc32"),o=e("./inffast"),s=e("./inftrees"),p=1,l=2,c=0,u=-2,h=1,f=852,g=592;function x(k){return(k>>>24&255)+(k>>>8&65280)+((65280&k)<<8)+((255&k)<<24)}function b(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new a.Buf16(320),this.work=new a.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function _(k){var E;return k&&k.state?(E=k.state,k.total_in=k.total_out=E.total=0,k.msg="",E.wrap&&(k.adler=1&E.wrap),E.mode=h,E.last=0,E.havedict=0,E.dmax=32768,E.head=null,E.hold=0,E.bits=0,E.lencode=E.lendyn=new a.Buf32(f),E.distcode=E.distdyn=new a.Buf32(g),E.sane=1,E.back=-1,c):u}function C(k){var E;return k&&k.state?((E=k.state).wsize=0,E.whave=0,E.wnext=0,_(k)):u}function w(k,E){var m,P;return k&&k.state?(P=k.state,E<0?(m=0,E=-E):(m=1+(E>>4),E<48&&(E&=15)),E&&(E<8||15<E)?u:(P.window!==null&&P.wbits!==E&&(P.window=null),P.wrap=m,P.wbits=E,C(k))):u}function z(k,E){var m,P;return k?(P=new b,(k.state=P).window=null,(m=w(k,E))!==c&&(k.state=null),m):u}var F,T,S=!0;function W(k){if(S){var E;for(F=new a.Buf32(512),T=new a.Buf32(32),E=0;E<144;)k.lens[E++]=8;for(;E<256;)k.lens[E++]=9;for(;E<280;)k.lens[E++]=7;for(;E<288;)k.lens[E++]=8;for(s(p,k.lens,0,288,F,0,k.work,{bits:9}),E=0;E<32;)k.lens[E++]=5;s(l,k.lens,0,32,T,0,k.work,{bits:5}),S=!1}k.lencode=F,k.lenbits=9,k.distcode=T,k.distbits=5}function Y(k,E,m,P){var J,D=k.state;return D.window===null&&(D.wsize=1<<D.wbits,D.wnext=0,D.whave=0,D.window=new a.Buf8(D.wsize)),P>=D.wsize?(a.arraySet(D.window,E,m-D.wsize,D.wsize,0),D.wnext=0,D.whave=D.wsize):(P<(J=D.wsize-D.wnext)&&(J=P),a.arraySet(D.window,E,m-P,J,D.wnext),(P-=J)?(a.arraySet(D.window,E,m-P,P,0),D.wnext=P,D.whave=D.wsize):(D.wnext+=J,D.wnext===D.wsize&&(D.wnext=0),D.whave<D.wsize&&(D.whave+=J))),0}n.inflateReset=C,n.inflateReset2=w,n.inflateResetKeep=_,n.inflateInit=function(k){return z(k,15)},n.inflateInit2=z,n.inflate=function(k,E){var m,P,J,D,ae,R,te,A,I,ee,G,q,ue,ve,ie,oe,he,de,ze,Ae,d,B,M,y,v=0,j=new a.Buf8(4),O=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!k||!k.state||!k.output||!k.input&&k.avail_in!==0)return u;(m=k.state).mode===12&&(m.mode=13),ae=k.next_out,J=k.output,te=k.avail_out,D=k.next_in,P=k.input,R=k.avail_in,A=m.hold,I=m.bits,ee=R,G=te,B=c;e:for(;;)switch(m.mode){case h:if(m.wrap===0){m.mode=13;break}for(;I<16;){if(R===0)break e;R--,A+=P[D++]<<I,I+=8}if(2&m.wrap&&A===35615){j[m.check=0]=255&A,j[1]=A>>>8&255,m.check=r(m.check,j,2,0),I=A=0,m.mode=2;break}if(m.flags=0,m.head&&(m.head.done=!1),!(1&m.wrap)||(((255&A)<<8)+(A>>8))%31){k.msg="incorrect header check",m.mode=30;break}if((15&A)!=8){k.msg="unknown compression method",m.mode=30;break}if(I-=4,d=8+(15&(A>>>=4)),m.wbits===0)m.wbits=d;else if(d>m.wbits){k.msg="invalid window size",m.mode=30;break}m.dmax=1<<d,k.adler=m.check=1,m.mode=512&A?10:12,I=A=0;break;case 2:for(;I<16;){if(R===0)break e;R--,A+=P[D++]<<I,I+=8}if(m.flags=A,(255&m.flags)!=8){k.msg="unknown compression method",m.mode=30;break}if(57344&m.flags){k.msg="unknown header flags set",m.mode=30;break}m.head&&(m.head.text=A>>8&1),512&m.flags&&(j[0]=255&A,j[1]=A>>>8&255,m.check=r(m.check,j,2,0)),I=A=0,m.mode=3;case 3:for(;I<32;){if(R===0)break e;R--,A+=P[D++]<<I,I+=8}m.head&&(m.head.time=A),512&m.flags&&(j[0]=255&A,j[1]=A>>>8&255,j[2]=A>>>16&255,j[3]=A>>>24&255,m.check=r(m.check,j,4,0)),I=A=0,m.mode=4;case 4:for(;I<16;){if(R===0)break e;R--,A+=P[D++]<<I,I+=8}m.head&&(m.head.xflags=255&A,m.head.os=A>>8),512&m.flags&&(j[0]=255&A,j[1]=A>>>8&255,m.check=r(m.check,j,2,0)),I=A=0,m.mode=5;case 5:if(1024&m.flags){for(;I<16;){if(R===0)break e;R--,A+=P[D++]<<I,I+=8}m.length=A,m.head&&(m.head.extra_len=A),512&m.flags&&(j[0]=255&A,j[1]=A>>>8&255,m.check=r(m.check,j,2,0)),I=A=0}else m.head&&(m.head.extra=null);m.mode=6;case 6:if(1024&m.flags&&(R<(q=m.length)&&(q=R),q&&(m.head&&(d=m.head.extra_len-m.length,m.head.extra||(m.head.extra=new Array(m.head.extra_len)),a.arraySet(m.head.extra,P,D,q,d)),512&m.flags&&(m.check=r(m.check,P,q,D)),R-=q,D+=q,m.length-=q),m.length))break e;m.length=0,m.mode=7;case 7:if(2048&m.flags){if(R===0)break e;for(q=0;d=P[D+q++],m.head&&d&&m.length<65536&&(m.head.name+=String.fromCharCode(d)),d&&q<R;);if(512&m.flags&&(m.check=r(m.check,P,q,D)),R-=q,D+=q,d)break e}else m.head&&(m.head.name=null);m.length=0,m.mode=8;case 8:if(4096&m.flags){if(R===0)break e;for(q=0;d=P[D+q++],m.head&&d&&m.length<65536&&(m.head.comment+=String.fromCharCode(d)),d&&q<R;);if(512&m.flags&&(m.check=r(m.check,P,q,D)),R-=q,D+=q,d)break e}else m.head&&(m.head.comment=null);m.mode=9;case 9:if(512&m.flags){for(;I<16;){if(R===0)break e;R--,A+=P[D++]<<I,I+=8}if(A!==(65535&m.check)){k.msg="header crc mismatch",m.mode=30;break}I=A=0}m.head&&(m.head.hcrc=m.flags>>9&1,m.head.done=!0),k.adler=m.check=0,m.mode=12;break;case 10:for(;I<32;){if(R===0)break e;R--,A+=P[D++]<<I,I+=8}k.adler=m.check=x(A),I=A=0,m.mode=11;case 11:if(m.havedict===0)return k.next_out=ae,k.avail_out=te,k.next_in=D,k.avail_in=R,m.hold=A,m.bits=I,2;k.adler=m.check=1,m.mode=12;case 12:if(E===5||E===6)break e;case 13:if(m.last){A>>>=7&I,I-=7&I,m.mode=27;break}for(;I<3;){if(R===0)break e;R--,A+=P[D++]<<I,I+=8}switch(m.last=1&A,I-=1,3&(A>>>=1)){case 0:m.mode=14;break;case 1:if(W(m),m.mode=20,E!==6)break;A>>>=2,I-=2;break e;case 2:m.mode=17;break;case 3:k.msg="invalid block type",m.mode=30}A>>>=2,I-=2;break;case 14:for(A>>>=7&I,I-=7&I;I<32;){if(R===0)break e;R--,A+=P[D++]<<I,I+=8}if((65535&A)!=(A>>>16^65535)){k.msg="invalid stored block lengths",m.mode=30;break}if(m.length=65535&A,I=A=0,m.mode=15,E===6)break e;case 15:m.mode=16;case 16:if(q=m.length){if(R<q&&(q=R),te<q&&(q=te),q===0)break e;a.arraySet(J,P,D,q,ae),R-=q,D+=q,te-=q,ae+=q,m.length-=q;break}m.mode=12;break;case 17:for(;I<14;){if(R===0)break e;R--,A+=P[D++]<<I,I+=8}if(m.nlen=257+(31&A),A>>>=5,I-=5,m.ndist=1+(31&A),A>>>=5,I-=5,m.ncode=4+(15&A),A>>>=4,I-=4,286<m.nlen||30<m.ndist){k.msg="too many length or distance symbols",m.mode=30;break}m.have=0,m.mode=18;case 18:for(;m.have<m.ncode;){for(;I<3;){if(R===0)break e;R--,A+=P[D++]<<I,I+=8}m.lens[O[m.have++]]=7&A,A>>>=3,I-=3}for(;m.have<19;)m.lens[O[m.have++]]=0;if(m.lencode=m.lendyn,m.lenbits=7,M={bits:m.lenbits},B=s(0,m.lens,0,19,m.lencode,0,m.work,M),m.lenbits=M.bits,B){k.msg="invalid code lengths set",m.mode=30;break}m.have=0,m.mode=19;case 19:for(;m.have<m.nlen+m.ndist;){for(;oe=(v=m.lencode[A&(1<<m.lenbits)-1])>>>16&255,he=65535&v,!((ie=v>>>24)<=I);){if(R===0)break e;R--,A+=P[D++]<<I,I+=8}if(he<16)A>>>=ie,I-=ie,m.lens[m.have++]=he;else{if(he===16){for(y=ie+2;I<y;){if(R===0)break e;R--,A+=P[D++]<<I,I+=8}if(A>>>=ie,I-=ie,m.have===0){k.msg="invalid bit length repeat",m.mode=30;break}d=m.lens[m.have-1],q=3+(3&A),A>>>=2,I-=2}else if(he===17){for(y=ie+3;I<y;){if(R===0)break e;R--,A+=P[D++]<<I,I+=8}I-=ie,d=0,q=3+(7&(A>>>=ie)),A>>>=3,I-=3}else{for(y=ie+7;I<y;){if(R===0)break e;R--,A+=P[D++]<<I,I+=8}I-=ie,d=0,q=11+(127&(A>>>=ie)),A>>>=7,I-=7}if(m.have+q>m.nlen+m.ndist){k.msg="invalid bit length repeat",m.mode=30;break}for(;q--;)m.lens[m.have++]=d}}if(m.mode===30)break;if(m.lens[256]===0){k.msg="invalid code -- missing end-of-block",m.mode=30;break}if(m.lenbits=9,M={bits:m.lenbits},B=s(p,m.lens,0,m.nlen,m.lencode,0,m.work,M),m.lenbits=M.bits,B){k.msg="invalid literal/lengths set",m.mode=30;break}if(m.distbits=6,m.distcode=m.distdyn,M={bits:m.distbits},B=s(l,m.lens,m.nlen,m.ndist,m.distcode,0,m.work,M),m.distbits=M.bits,B){k.msg="invalid distances set",m.mode=30;break}if(m.mode=20,E===6)break e;case 20:m.mode=21;case 21:if(6<=R&&258<=te){k.next_out=ae,k.avail_out=te,k.next_in=D,k.avail_in=R,m.hold=A,m.bits=I,o(k,G),ae=k.next_out,J=k.output,te=k.avail_out,D=k.next_in,P=k.input,R=k.avail_in,A=m.hold,I=m.bits,m.mode===12&&(m.back=-1);break}for(m.back=0;oe=(v=m.lencode[A&(1<<m.lenbits)-1])>>>16&255,he=65535&v,!((ie=v>>>24)<=I);){if(R===0)break e;R--,A+=P[D++]<<I,I+=8}if(oe&&(240&oe)==0){for(de=ie,ze=oe,Ae=he;oe=(v=m.lencode[Ae+((A&(1<<de+ze)-1)>>de)])>>>16&255,he=65535&v,!(de+(ie=v>>>24)<=I);){if(R===0)break e;R--,A+=P[D++]<<I,I+=8}A>>>=de,I-=de,m.back+=de}if(A>>>=ie,I-=ie,m.back+=ie,m.length=he,oe===0){m.mode=26;break}if(32&oe){m.back=-1,m.mode=12;break}if(64&oe){k.msg="invalid literal/length code",m.mode=30;break}m.extra=15&oe,m.mode=22;case 22:if(m.extra){for(y=m.extra;I<y;){if(R===0)break e;R--,A+=P[D++]<<I,I+=8}m.length+=A&(1<<m.extra)-1,A>>>=m.extra,I-=m.extra,m.back+=m.extra}m.was=m.length,m.mode=23;case 23:for(;oe=(v=m.distcode[A&(1<<m.distbits)-1])>>>16&255,he=65535&v,!((ie=v>>>24)<=I);){if(R===0)break e;R--,A+=P[D++]<<I,I+=8}if((240&oe)==0){for(de=ie,ze=oe,Ae=he;oe=(v=m.distcode[Ae+((A&(1<<de+ze)-1)>>de)])>>>16&255,he=65535&v,!(de+(ie=v>>>24)<=I);){if(R===0)break e;R--,A+=P[D++]<<I,I+=8}A>>>=de,I-=de,m.back+=de}if(A>>>=ie,I-=ie,m.back+=ie,64&oe){k.msg="invalid distance code",m.mode=30;break}m.offset=he,m.extra=15&oe,m.mode=24;case 24:if(m.extra){for(y=m.extra;I<y;){if(R===0)break e;R--,A+=P[D++]<<I,I+=8}m.offset+=A&(1<<m.extra)-1,A>>>=m.extra,I-=m.extra,m.back+=m.extra}if(m.offset>m.dmax){k.msg="invalid distance too far back",m.mode=30;break}m.mode=25;case 25:if(te===0)break e;if(q=G-te,m.offset>q){if((q=m.offset-q)>m.whave&&m.sane){k.msg="invalid distance too far back",m.mode=30;break}ue=q>m.wnext?(q-=m.wnext,m.wsize-q):m.wnext-q,q>m.length&&(q=m.length),ve=m.window}else ve=J,ue=ae-m.offset,q=m.length;for(te<q&&(q=te),te-=q,m.length-=q;J[ae++]=ve[ue++],--q;);m.length===0&&(m.mode=21);break;case 26:if(te===0)break e;J[ae++]=m.length,te--,m.mode=21;break;case 27:if(m.wrap){for(;I<32;){if(R===0)break e;R--,A|=P[D++]<<I,I+=8}if(G-=te,k.total_out+=G,m.total+=G,G&&(k.adler=m.check=m.flags?r(m.check,J,G,ae-G):i(m.check,J,G,ae-G)),G=te,(m.flags?A:x(A))!==m.check){k.msg="incorrect data check",m.mode=30;break}I=A=0}m.mode=28;case 28:if(m.wrap&&m.flags){for(;I<32;){if(R===0)break e;R--,A+=P[D++]<<I,I+=8}if(A!==(4294967295&m.total)){k.msg="incorrect length check",m.mode=30;break}I=A=0}m.mode=29;case 29:B=1;break e;case 30:B=-3;break e;case 31:return-4;case 32:default:return u}return k.next_out=ae,k.avail_out=te,k.next_in=D,k.avail_in=R,m.hold=A,m.bits=I,(m.wsize||G!==k.avail_out&&m.mode<30&&(m.mode<27||E!==4))&&Y(k,k.output,k.next_out,G-k.avail_out)?(m.mode=31,-4):(ee-=k.avail_in,G-=k.avail_out,k.total_in+=ee,k.total_out+=G,m.total+=G,m.wrap&&G&&(k.adler=m.check=m.flags?r(m.check,J,G,k.next_out-G):i(m.check,J,G,k.next_out-G)),k.data_type=m.bits+(m.last?64:0)+(m.mode===12?128:0)+(m.mode===20||m.mode===15?256:0),(ee==0&&G===0||E===4)&&B===c&&(B=-5),B)},n.inflateEnd=function(k){if(!k||!k.state)return u;var E=k.state;return E.window&&(E.window=null),k.state=null,c},n.inflateGetHeader=function(k,E){var m;return k&&k.state?(2&(m=k.state).wrap)==0?u:((m.head=E).done=!1,c):u},n.inflateSetDictionary=function(k,E){var m,P=E.length;return k&&k.state?(m=k.state).wrap!==0&&m.mode!==11?u:m.mode===11&&i(1,E,P,0)!==m.check?-3:Y(k,E,P,P)?(m.mode=31,-4):(m.havedict=1,c):u},n.inflateInfo="pako inflate (from Nodeca project)"},{"../utils/common":41,"./adler32":43,"./crc32":45,"./inffast":48,"./inftrees":50}],50:[function(e,t,n){"use strict";var a=e("../utils/common"),i=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],r=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78],o=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0],s=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];t.exports=function(p,l,c,u,h,f,g,x){var b,_,C,w,z,F,T,S,W,Y=x.bits,k=0,E=0,m=0,P=0,J=0,D=0,ae=0,R=0,te=0,A=0,I=null,ee=0,G=new a.Buf16(16),q=new a.Buf16(16),ue=null,ve=0;for(k=0;k<=15;k++)G[k]=0;for(E=0;E<u;E++)G[l[c+E]]++;for(J=Y,P=15;1<=P&&G[P]===0;P--);if(P<J&&(J=P),P===0)return h[f++]=20971520,h[f++]=20971520,x.bits=1,0;for(m=1;m<P&&G[m]===0;m++);for(J<m&&(J=m),k=R=1;k<=15;k++)if(R<<=1,(R-=G[k])<0)return-1;if(0<R&&(p===0||P!==1))return-1;for(q[1]=0,k=1;k<15;k++)q[k+1]=q[k]+G[k];for(E=0;E<u;E++)l[c+E]!==0&&(g[q[l[c+E]]++]=E);if(F=p===0?(I=ue=g,19):p===1?(I=i,ee-=257,ue=r,ve-=257,256):(I=o,ue=s,-1),k=m,z=f,ae=E=A=0,C=-1,w=(te=1<<(D=J))-1,p===1&&852<te||p===2&&592<te)return 1;for(;;){for(T=k-ae,W=g[E]<F?(S=0,g[E]):g[E]>F?(S=ue[ve+g[E]],I[ee+g[E]]):(S=96,0),b=1<<k-ae,m=_=1<<D;h[z+(A>>ae)+(_-=b)]=T<<24|S<<16|W|0,_!==0;);for(b=1<<k-1;A&b;)b>>=1;if(b!==0?(A&=b-1,A+=b):A=0,E++,--G[k]==0){if(k===P)break;k=l[c+g[E]]}if(J<k&&(A&w)!==C){for(ae===0&&(ae=J),z+=m,R=1<<(D=k-ae);D+ae<P&&!((R-=G[D+ae])<=0);)D++,R<<=1;if(te+=1<<D,p===1&&852<te||p===2&&592<te)return 1;h[C=A&w]=J<<24|D<<16|z-f|0}}return A!==0&&(h[z+A]=k-ae<<24|64<<16|0),x.bits=J,0}},{"../utils/common":41}],51:[function(e,t,n){"use strict";t.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}},{}],52:[function(e,t,n){"use strict";var a=e("../utils/common"),i=0,r=1;function o(v){for(var j=v.length;0<=--j;)v[j]=0}var s=0,p=29,l=256,c=l+1+p,u=30,h=19,f=2*c+1,g=15,x=16,b=7,_=256,C=16,w=17,z=18,F=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],T=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],S=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],W=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],Y=new Array(2*(c+2));o(Y);var k=new Array(2*u);o(k);var E=new Array(512);o(E);var m=new Array(256);o(m);var P=new Array(p);o(P);var J,D,ae,R=new Array(u);function te(v,j,O,N,L){this.static_tree=v,this.extra_bits=j,this.extra_base=O,this.elems=N,this.max_length=L,this.has_stree=v&&v.length}function A(v,j){this.dyn_tree=v,this.max_code=0,this.stat_desc=j}function I(v){return v<256?E[v]:E[256+(v>>>7)]}function ee(v,j){v.pending_buf[v.pending++]=255&j,v.pending_buf[v.pending++]=j>>>8&255}function G(v,j,O){v.bi_valid>x-O?(v.bi_buf|=j<<v.bi_valid&65535,ee(v,v.bi_buf),v.bi_buf=j>>x-v.bi_valid,v.bi_valid+=O-x):(v.bi_buf|=j<<v.bi_valid&65535,v.bi_valid+=O)}function q(v,j,O){G(v,O[2*j],O[2*j+1])}function ue(v,j){for(var O=0;O|=1&v,v>>>=1,O<<=1,0<--j;);return O>>>1}function ve(v,j,O){var N,L,U=new Array(g+1),Z=0;for(N=1;N<=g;N++)U[N]=Z=Z+O[N-1]<<1;for(L=0;L<=j;L++){var V=v[2*L+1];V!==0&&(v[2*L]=ue(U[V]++,V))}}function ie(v){var j;for(j=0;j<c;j++)v.dyn_ltree[2*j]=0;for(j=0;j<u;j++)v.dyn_dtree[2*j]=0;for(j=0;j<h;j++)v.bl_tree[2*j]=0;v.dyn_ltree[2*_]=1,v.opt_len=v.static_len=0,v.last_lit=v.matches=0}function oe(v){8<v.bi_valid?ee(v,v.bi_buf):0<v.bi_valid&&(v.pending_buf[v.pending++]=v.bi_buf),v.bi_buf=0,v.bi_valid=0}function he(v,j,O,N){var L=2*j,U=2*O;return v[L]<v[U]||v[L]===v[U]&&N[j]<=N[O]}function de(v,j,O){for(var N=v.heap[O],L=O<<1;L<=v.heap_len&&(L<v.heap_len&&he(j,v.heap[L+1],v.heap[L],v.depth)&&L++,!he(j,N,v.heap[L],v.depth));)v.heap[O]=v.heap[L],O=L,L<<=1;v.heap[O]=N}function ze(v,j,O){var N,L,U,Z,V=0;if(v.last_lit!==0)for(;N=v.pending_buf[v.d_buf+2*V]<<8|v.pending_buf[v.d_buf+2*V+1],L=v.pending_buf[v.l_buf+V],V++,N===0?q(v,L,j):(q(v,(U=m[L])+l+1,j),(Z=F[U])!==0&&G(v,L-=P[U],Z),q(v,U=I(--N),O),(Z=T[U])!==0&&G(v,N-=R[U],Z)),V<v.last_lit;);q(v,_,j)}function Ae(v,j){var O,N,L,U=j.dyn_tree,Z=j.stat_desc.static_tree,V=j.stat_desc.has_stree,Q=j.stat_desc.elems,le=-1;for(v.heap_len=0,v.heap_max=f,O=0;O<Q;O++)U[2*O]!==0?(v.heap[++v.heap_len]=le=O,v.depth[O]=0):U[2*O+1]=0;for(;v.heap_len<2;)U[2*(L=v.heap[++v.heap_len]=le<2?++le:0)]=1,v.depth[L]=0,v.opt_len--,V&&(v.static_len-=Z[2*L+1]);for(j.max_code=le,O=v.heap_len>>1;1<=O;O--)de(v,U,O);for(L=Q;O=v.heap[1],v.heap[1]=v.heap[v.heap_len--],de(v,U,1),N=v.heap[1],v.heap[--v.heap_max]=O,v.heap[--v.heap_max]=N,U[2*L]=U[2*O]+U[2*N],v.depth[L]=(v.depth[O]>=v.depth[N]?v.depth[O]:v.depth[N])+1,U[2*O+1]=U[2*N+1]=L,v.heap[1]=L++,de(v,U,1),2<=v.heap_len;);v.heap[--v.heap_max]=v.heap[1],function(re,Ce){var Mt,Be,Ft,fe,rn,Qn,Re=Ce.dyn_tree,Gi=Ce.max_code,np=Ce.stat_desc.static_tree,ap=Ce.stat_desc.has_stree,ip=Ce.stat_desc.extra_bits,Zi=Ce.stat_desc.extra_base,Et=Ce.stat_desc.max_length,on=0;for(fe=0;fe<=g;fe++)re.bl_count[fe]=0;for(Re[2*re.heap[re.heap_max]+1]=0,Mt=re.heap_max+1;Mt<f;Mt++)Et<(fe=Re[2*Re[2*(Be=re.heap[Mt])+1]+1]+1)&&(fe=Et,on++),Re[2*Be+1]=fe,Gi<Be||(re.bl_count[fe]++,rn=0,Zi<=Be&&(rn=ip[Be-Zi]),Qn=Re[2*Be],re.opt_len+=Qn*(fe+rn),ap&&(re.static_len+=Qn*(np[2*Be+1]+rn)));if(on!==0){do{for(fe=Et-1;re.bl_count[fe]===0;)fe--;re.bl_count[fe]--,re.bl_count[fe+1]+=2,re.bl_count[Et]--,on-=2}while(0<on);for(fe=Et;fe!==0;fe--)for(Be=re.bl_count[fe];Be!==0;)Gi<(Ft=re.heap[--Mt])||(Re[2*Ft+1]!==fe&&(re.opt_len+=(fe-Re[2*Ft+1])*Re[2*Ft],Re[2*Ft+1]=fe),Be--)}}(v,j),ve(U,le,v.bl_count)}function d(v,j,O){var N,L,U=-1,Z=j[1],V=0,Q=7,le=4;for(Z===0&&(Q=138,le=3),j[2*(O+1)+1]=65535,N=0;N<=O;N++)L=Z,Z=j[2*(N+1)+1],++V<Q&&L===Z||(V<le?v.bl_tree[2*L]+=V:L!==0?(L!==U&&v.bl_tree[2*L]++,v.bl_tree[2*C]++):V<=10?v.bl_tree[2*w]++:v.bl_tree[2*z]++,U=L,le=(V=0)===Z?(Q=138,3):L===Z?(Q=6,3):(Q=7,4))}function B(v,j,O){var N,L,U=-1,Z=j[1],V=0,Q=7,le=4;for(Z===0&&(Q=138,le=3),N=0;N<=O;N++)if(L=Z,Z=j[2*(N+1)+1],!(++V<Q&&L===Z)){if(V<le)for(;q(v,L,v.bl_tree),--V!=0;);else L!==0?(L!==U&&(q(v,L,v.bl_tree),V--),q(v,C,v.bl_tree),G(v,V-3,2)):V<=10?(q(v,w,v.bl_tree),G(v,V-3,3)):(q(v,z,v.bl_tree),G(v,V-11,7));U=L,le=(V=0)===Z?(Q=138,3):L===Z?(Q=6,3):(Q=7,4)}}o(R);var M=!1;function y(v,j,O,N){G(v,(s<<1)+(N?1:0),3),function(L,U,Z,V){oe(L),V&&(ee(L,Z),ee(L,~Z)),a.arraySet(L.pending_buf,L.window,U,Z,L.pending),L.pending+=Z}(v,j,O,!0)}n._tr_init=function(v){M||(function(){var j,O,N,L,U,Z=new Array(g+1);for(L=N=0;L<p-1;L++)for(P[L]=N,j=0;j<1<<F[L];j++)m[N++]=L;for(m[N-1]=L,L=U=0;L<16;L++)for(R[L]=U,j=0;j<1<<T[L];j++)E[U++]=L;for(U>>=7;L<u;L++)for(R[L]=U<<7,j=0;j<1<<T[L]-7;j++)E[256+U++]=L;for(O=0;O<=g;O++)Z[O]=0;for(j=0;j<=143;)Y[2*j+1]=8,j++,Z[8]++;for(;j<=255;)Y[2*j+1]=9,j++,Z[9]++;for(;j<=279;)Y[2*j+1]=7,j++,Z[7]++;for(;j<=287;)Y[2*j+1]=8,j++,Z[8]++;for(ve(Y,c+1,Z),j=0;j<u;j++)k[2*j+1]=5,k[2*j]=ue(j,5);J=new te(Y,F,l+1,c,g),D=new te(k,T,0,u,g),ae=new te(new Array(0),S,0,h,b)}(),M=!0),v.l_desc=new A(v.dyn_ltree,J),v.d_desc=new A(v.dyn_dtree,D),v.bl_desc=new A(v.bl_tree,ae),v.bi_buf=0,v.bi_valid=0,ie(v)},n._tr_stored_block=y,n._tr_flush_block=function(v,j,O,N){var L,U,Z=0;0<v.level?(v.strm.data_type===2&&(v.strm.data_type=function(V){var Q,le=4093624447;for(Q=0;Q<=31;Q++,le>>>=1)if(1&le&&V.dyn_ltree[2*Q]!==0)return i;if(V.dyn_ltree[18]!==0||V.dyn_ltree[20]!==0||V.dyn_ltree[26]!==0)return r;for(Q=32;Q<l;Q++)if(V.dyn_ltree[2*Q]!==0)return r;return i}(v)),Ae(v,v.l_desc),Ae(v,v.d_desc),Z=function(V){var Q;for(d(V,V.dyn_ltree,V.l_desc.max_code),d(V,V.dyn_dtree,V.d_desc.max_code),Ae(V,V.bl_desc),Q=h-1;3<=Q&&V.bl_tree[2*W[Q]+1]===0;Q--);return V.opt_len+=3*(Q+1)+5+5+4,Q}(v),L=v.opt_len+3+7>>>3,(U=v.static_len+3+7>>>3)<=L&&(L=U)):L=U=O+5,O+4<=L&&j!==-1?y(v,j,O,N):v.strategy===4||U===L?(G(v,2+(N?1:0),3),ze(v,Y,k)):(G(v,4+(N?1:0),3),function(V,Q,le,re){var Ce;for(G(V,Q-257,5),G(V,le-1,5),G(V,re-4,4),Ce=0;Ce<re;Ce++)G(V,V.bl_tree[2*W[Ce]+1],3);B(V,V.dyn_ltree,Q-1),B(V,V.dyn_dtree,le-1)}(v,v.l_desc.max_code+1,v.d_desc.max_code+1,Z+1),ze(v,v.dyn_ltree,v.dyn_dtree)),ie(v),N&&oe(v)},n._tr_tally=function(v,j,O){return v.pending_buf[v.d_buf+2*v.last_lit]=j>>>8&255,v.pending_buf[v.d_buf+2*v.last_lit+1]=255&j,v.pending_buf[v.l_buf+v.last_lit]=255&O,v.last_lit++,j===0?v.dyn_ltree[2*O]++:(v.matches++,j--,v.dyn_ltree[2*(m[O]+l+1)]++,v.dyn_dtree[2*I(j)]++),v.last_lit===v.lit_bufsize-1},n._tr_align=function(v){G(v,2,3),q(v,_,Y),function(j){j.bi_valid===16?(ee(j,j.bi_buf),j.bi_buf=0,j.bi_valid=0):8<=j.bi_valid&&(j.pending_buf[j.pending++]=255&j.bi_buf,j.bi_buf>>=8,j.bi_valid-=8)}(v)}},{"../utils/common":41}],53:[function(e,t,n){"use strict";t.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(e,t,n){(function(a){(function(i,r){"use strict";if(!i.setImmediate){var o,s,p,l,c=1,u={},h=!1,f=i.document,g=Object.getPrototypeOf&&Object.getPrototypeOf(i);g=g&&g.setTimeout?g:i,o={}.toString.call(i.process)==="[object process]"?function(C){process.nextTick(function(){b(C)})}:function(){if(i.postMessage&&!i.importScripts){var C=!0,w=i.onmessage;return i.onmessage=function(){C=!1},i.postMessage("","*"),i.onmessage=w,C}}()?(l="setImmediate$"+Math.random()+"$",i.addEventListener?i.addEventListener("message",_,!1):i.attachEvent("onmessage",_),function(C){i.postMessage(l+C,"*")}):i.MessageChannel?((p=new MessageChannel).port1.onmessage=function(C){b(C.data)},function(C){p.port2.postMessage(C)}):f&&"onreadystatechange"in f.createElement("script")?(s=f.documentElement,function(C){var w=f.createElement("script");w.onreadystatechange=function(){b(C),w.onreadystatechange=null,s.removeChild(w),w=null},s.appendChild(w)}):function(C){setTimeout(b,0,C)},g.setImmediate=function(C){typeof C!="function"&&(C=new Function(""+C));for(var w=new Array(arguments.length-1),z=0;z<w.length;z++)w[z]=arguments[z+1];var F={callback:C,args:w};return u[c]=F,o(c),c++},g.clearImmediate=x}function x(C){delete u[C]}function b(C){if(h)setTimeout(b,0,C);else{var w=u[C];if(w){h=!0;try{(function(z){var F=z.callback,T=z.args;switch(T.length){case 0:F();break;case 1:F(T[0]);break;case 2:F(T[0],T[1]);break;case 3:F(T[0],T[1],T[2]);break;default:F.apply(r,T)}})(w)}finally{x(C),h=!1}}}}function _(C){C.source===i&&typeof C.data=="string"&&C.data.indexOf(l)===0&&b(+C.data.slice(l.length))}})(typeof self>"u"?a===void 0?this:a:self)}).call(this,typeof global<"u"?global:typeof self<"u"?self:typeof window<"u"?window:{})},{}]},{},[10])(10)})});var pc=K((Z2,lc)=>{lc.exports={aqua:/#00ffff(ff)?(?!\w)|#0ff(f)?(?!\w)/gi,azure:/#f0ffff(ff)?(?!\w)/gi,beige:/#f5f5dc(ff)?(?!\w)/gi,bisque:/#ffe4c4(ff)?(?!\w)/gi,black:/#000000(ff)?(?!\w)|#000(f)?(?!\w)/gi,blue:/#0000ff(ff)?(?!\w)|#00f(f)?(?!\w)/gi,brown:/#a52a2a(ff)?(?!\w)/gi,coral:/#ff7f50(ff)?(?!\w)/gi,cornsilk:/#fff8dc(ff)?(?!\w)/gi,crimson:/#dc143c(ff)?(?!\w)/gi,cyan:/#00ffff(ff)?(?!\w)|#0ff(f)?(?!\w)/gi,darkblue:/#00008b(ff)?(?!\w)/gi,darkcyan:/#008b8b(ff)?(?!\w)/gi,darkgrey:/#a9a9a9(ff)?(?!\w)/gi,darkred:/#8b0000(ff)?(?!\w)/gi,deeppink:/#ff1493(ff)?(?!\w)/gi,dimgrey:/#696969(ff)?(?!\w)/gi,gold:/#ffd700(ff)?(?!\w)/gi,green:/#008000(ff)?(?!\w)/gi,grey:/#808080(ff)?(?!\w)/gi,honeydew:/#f0fff0(ff)?(?!\w)/gi,hotpink:/#ff69b4(ff)?(?!\w)/gi,indigo:/#4b0082(ff)?(?!\w)/gi,ivory:/#fffff0(ff)?(?!\w)/gi,khaki:/#f0e68c(ff)?(?!\w)/gi,lavender:/#e6e6fa(ff)?(?!\w)/gi,lime:/#00ff00(ff)?(?!\w)|#0f0(f)?(?!\w)/gi,linen:/#faf0e6(ff)?(?!\w)/gi,maroon:/#800000(ff)?(?!\w)/gi,moccasin:/#ffe4b5(ff)?(?!\w)/gi,navy:/#000080(ff)?(?!\w)/gi,oldlace:/#fdf5e6(ff)?(?!\w)/gi,olive:/#808000(ff)?(?!\w)/gi,orange:/#ffa500(ff)?(?!\w)/gi,orchid:/#da70d6(ff)?(?!\w)/gi,peru:/#cd853f(ff)?(?!\w)/gi,pink:/#ffc0cb(ff)?(?!\w)/gi,plum:/#dda0dd(ff)?(?!\w)/gi,purple:/#800080(ff)?(?!\w)/gi,red:/#ff0000(ff)?(?!\w)|#f00(f)?(?!\w)/gi,salmon:/#fa8072(ff)?(?!\w)/gi,seagreen:/#2e8b57(ff)?(?!\w)/gi,seashell:/#fff5ee(ff)?(?!\w)/gi,sienna:/#a0522d(ff)?(?!\w)/gi,silver:/#c0c0c0(ff)?(?!\w)/gi,skyblue:/#87ceeb(ff)?(?!\w)/gi,snow:/#fffafa(ff)?(?!\w)/gi,tan:/#d2b48c(ff)?(?!\w)/gi,teal:/#008080(ff)?(?!\w)/gi,thistle:/#d8bfd8(ff)?(?!\w)/gi,tomato:/#ff6347(ff)?(?!\w)/gi,violet:/#ee82ee(ff)?(?!\w)/gi,wheat:/#f5deb3(ff)?(?!\w)/gi,white:/#ffffff(ff)?(?!\w)|#fff(f)?(?!\w)/gi}});var dc=K((K2,uc)=>{var Ga=pc(),Ka={whitespace:/\s+/g,urlHexPairs:/%[\dA-F]{2}/g,quotes:/"/g};function dh(e){return e.trim().replace(Ka.whitespace," ")}function fh(e){return encodeURIComponent(e).replace(Ka.urlHexPairs,hh)}function mh(e){return Object.keys(Ga).forEach(function(t){Ga[t].test(e)&&(e=e.replace(Ga[t],t))}),e}function hh(e){switch(e){case"%20":return" ";case"%3D":return"=";case"%3A":return":";case"%2F":return"/";default:return e.toLowerCase()}}function Za(e){if(typeof e!="string")throw new TypeError("Expected a string, but received "+typeof e);e.charCodeAt(0)===65279&&(e=e.slice(1));var t=mh(dh(e)).replace(Ka.quotes,"'");return"data:image/svg+xml,"+fh(t)}Za.toSrcset=function(t){return Za(t).replace(/ /g,"%20")};uc.exports=Za});var n1={};Xi(n1,{default:()=>Jn});module.exports=up(n1);var tp=require("obsidian");var st=require("@codemirror/view"),na=require("obsidian");var ln=require("@codemirror/view"),er=require("obsidian");var Qi=require("@codemirror/view"),tt=class extends Qi.WidgetType{constructor(n,a){super();this.id=n;this.plugin=a}eq(n){return n instanceof tt&&n.id===this.id}toDOM(n){let a=createSpan({cls:"cm-isc-icon",attr:{"aria-label":this.id.replace(/_/g," ")}});return this.plugin.packManager.getSVGIcon(this.id).then(i=>{i?(i.classList.forEach(r=>a.addClass(r)),a.replaceChildren(...i.childNodes)):a.append(`:${this.id}:`)}),a}ignoreEvent(){return!1}};var dp=(e,t)=>{let n=[],a=e.state.field(t.shortcodePosField);for(let{from:i,to:r}of e.visibleRanges)a.between(i,r,(o,s,{iconId:p})=>{n.push([p,o,s])});return ln.Decoration.set(n.map(([i,r,o])=>{let p={widget:new tt(i,t),side:-1,from:r,to:o};return e.state.field(er.editorLivePreviewField)?ln.Decoration.replace(p).range(r,o):ln.Decoration.widget(p).range(o)}),!0)},ta=dp;var tr=require("obsidian"),fp=(e,t,n,a)=>new tr.Menu().addItem(i=>i.setIcon("image-glyph").setTitle("Change Icon").onClick(()=>$(void 0,null,function*(){let r=yield n.api.getIconFromUser();!r||a.dispatch({changes:{from:e,to:t,insert:`:${r.id}:`}})}))).addItem(i=>i.setIcon("trash").setTitle("Delete Icon").onClick(()=>{a.dispatch({changes:{from:e,to:t,insert:""}})})),nr=fp;var mp=e=>{class t{constructor(i){this.plugin=e,this.decorations=ta(i,this.plugin)}update(i){let r=i.startState.field(na.editorLivePreviewField),o=i.state.field(na.editorLivePreviewField);(i.docChanged||i.viewportChanged||r!==o)&&(this.decorations=ta(i.view,e))}}return st.ViewPlugin.fromClass(t,{eventHandlers:{mousedown:n},decorations:a=>a.decorations,provide:a=>st.EditorView.atomicRanges.of(i=>{let r=i.plugin(a);return r?r.decorations:st.Decoration.none})});function n(a,i){let r=a.target;if(r.matchParent(".cm-isc-icon",i.contentDOM)){let o=i.posAtDOM(r),s=-1,p=-1;if(this.decorations.between(o-1,o+1,(l,c,u)=>{if(o>=l&&o<=c){l===c?(s=u.spec.from,p=u.spec.to):(s=l,p=c);return}}),s<0||p<0){console.error("no range found for",r);return}if(ar(0).then(()=>i.dispatch({selection:{anchor:s,head:p}})),a.button===0||a.button===1){let l=nr(s,p,e,i);ar(200).then(()=>l.showAtMouseEvent(a))}}}},ar=e=>new Promise(t=>setTimeout(t,e)),ir=mp;var hp=e=>{e.registerEditorExtension([e.shortcodePosField,ir(e)])},rr=hp;var Ps=require("@codemirror/language"),Ts=require("@codemirror/language"),bn=require("@codemirror/state"),Os=require("@codemirror/state");var mn=be(fr(),1),Fs=be(Wt(),1),Bs=be(fn(),1);var{toString:ym}=Object.prototype;function ka(e){return ym.call(e)==="[object RegExp]"}var Ms={global:"g",ignoreCase:"i",multiline:"m",dotAll:"s",sticky:"y",unicode:"u"};function wa(e,t={}){if(!ka(e))throw new TypeError("Expected a RegExp instance");let n=Object.keys(Ms).map(i=>(typeof t[i]=="boolean"?t[i]:e[i])?Ms[i]:"").join(""),a=new RegExp(t.source||e.source,n);return a.lastIndex=typeof t.lastIndex=="number"?t.lastIndex:e.lastIndex,a}var je=e=>{var t=e.indexOf(":");return t>-1?t===e.length-1?(e=e.substring(0,t),je(e)):(e=e.substring(t+1),je(e)):e},_m=/^([A-Za-z0-9]+?)_/,Ca=e=>{if(Fs.default.hasEmoji(e))return{pack:"emoji",name:e};let t=e.match(_m);if(!t)return console.error("No vaild pack id found in: ",e),null;let[n,a]=t;return{pack:a,name:e.substring(n.length)}},ja=e=>{let t=Ca(e);return t?`${t.pack}_${La(t.name)}`:(console.log("failed to rename icon: id %s invalid",e),null)},La=e=>e.trim().replace(/[ -]+/g,"_").replace(/\s+/g,"").toLocaleLowerCase(),hn=[".bmp",".png",".jpg",".jpeg",".gif",".svg",".webp"],Es=/^[\w-]+\.(?:bmp|png|jpg|jpeg|gif|svg|webp)$/,gn=/\.(?:bmp|png|jpg|jpeg|gif|svg|webp)$/,km=hn.map(e=>(0,mn.lookup)(e)),zs=e=>$(void 0,null,function*(){if(!e||e.length<=0)return null;let t=i=>$(void 0,null,function*(){return{name:i.name.replace(gn,""),ext:"."+(0,mn.extension)(i.type),data:yield i.arrayBuffer()}}),n=[];for(let i=0;i<e.length;i++){let r=e[i];km.includes(r.type)&&n.push(t(r))}let a=yield Promise.all(n);return a.length>0?a:null}),gt=/:\+1:|:-1:|:[\w-]+:/,Rt=e=>wa(e,{global:!0}),xt=e=>(0,Bs.default)(["isc-icon",`isc-${e.pack}`]);var wm=(e,t)=>xn(e,t[0])||xn(e,t[1]),xn=(e,t)=>e[0]<t&&e[1]>t,Cm=(e,t)=>{let n=xn(e,t[0])?e[0]:t[0],a=xn(e,t[1])?e[1]:t[1];return[n,a]},jm=e=>e.sort((t,n)=>t[0]-n[0]).reduce((t,n)=>{let a=t.findIndex(i=>wm(i,n));return a!==-1?t[a]=Cm(t[a],n):t.push(n),t},[]),vn=jm;var Ut=class extends bn.RangeValue{constructor(n){super();this.text=n}get iconId(){return je(this.text)}eq(n){return n instanceof Ut&&n.text===this.text}},Lm=["link-alias","comment","header","strong","em","strikethrough","quote","link","list-1","list-2","list-3","highlight","hmd-footref2","footref"],Im=["formatting","comment-start","comment-end"],Sm=e=>{let t=e.prop(Ts.tokenClassNodeProp);if(!t)return!1;let n=new Set(t==null?void 0:t.split(" "));return Im.every(a=>!n.has(a))&&Lm.some(a=>n.has(a))},Am=e=>{let t=(n,a,i,r)=>{let o=(p,l)=>{let c=n.doc.sliceString(p,l);if(!!c.trim())for(let{0:u,index:h}of c.matchAll(Rt(gt)))e.packManager.hasIcon(je(u))&&r(p+h,p+h+u.length,new Ut(u))},s=a;(0,Ps.syntaxTree)(n).iterate({from:a-1,to:i+1,enter:({type:p,from:l,to:c})=>{p.name!=="Document"&&(l!==s&&o(s,l),s=c,Sm(p)&&o(l,c))}}),s!==i&&o(s,i)};return Os.StateField.define({create:n=>{let a=new bn.RangeSetBuilder;return t(n,0,n.doc.length,a.add.bind(a)),a.finish()},update:(n,a)=>{if(!a.docChanged)return n;n=n.map(a.changes);let i=[];a.changes.iterChangedRanges((o,s,p,l)=>{i.push([a.state.doc.lineAt(p).number,a.state.doc.lineAt(l).number])});let r=[];for(let[o,s]of vn(i)){let{from:p}=a.state.doc.line(o),{to:l}=a.state.doc.line(s);n=n.update({filterFrom:p,filterTo:l,filter:()=>!1}),t(a.state,p,l,(c,u,h)=>{r.push(h.range(c,u))})}return n=n.update({add:r}),n}})},Ns=Am;var Vt=class{constructor(t){this.plugin=t;this.cache=new Map}get vault(){return this.plugin.app.vault}getIcon(t){return $(this,null,function*(){let n=yield this.vault.adapter.stat(t);if(!n||n.type!=="file")return null;if(this.cache.has(t)){let i=this.cache.get(t);if(i.ctime===n.ctime&&i.mtime===n.mtime&&i.size===n.size)return i.svg.cloneNode(!0)}return(yield this.readIntoCache(t,n)).cloneNode(!0)})}readIntoCache(t,n){return $(this,null,function*(){let a=DOMPurify.sanitize(yield this.vault.adapter.read(t)),i=new DOMParser().parseFromString(a,"image/svg+xml").documentElement;return this.cache.set(t,et(Me({},n),{svg:i})),i})}refresh(){let t=n=>$(this,null,function*(){let a=yield this.vault.adapter.stat(n);return!a||a.type!=="file"?this.cache.delete(n):yield this.readIntoCache(n,a),n});return Promise.allSettled([...this.cache.keys()].map(t))}clear(){this.cache.clear()}};var yc=be(Ia(),1);function He(e){return Array.isArray?Array.isArray(e):Gs(e)==="[object Array]"}var Mm=1/0;function Fm(e){if(typeof e=="string")return e;let t=e+"";return t=="0"&&1/e==-Mm?"-0":t}function Em(e){return e==null?"":Fm(e)}function Te(e){return typeof e=="string"}function qs(e){return typeof e=="number"}function zm(e){return e===!0||e===!1||Bm(e)&&Gs(e)=="[object Boolean]"}function $s(e){return typeof e=="object"}function Bm(e){return $s(e)&&e!==null}function ke(e){return e!=null}function Sa(e){return!e.trim().length}function Gs(e){return e==null?e===void 0?"[object Undefined]":"[object Null]":Object.prototype.toString.call(e)}var Pm="Incorrect 'index' type",Tm=e=>`Invalid value for key ${e}`,Om=e=>`Pattern length exceeds max of ${e}.`,Nm=e=>`Missing ${e} property in key`,Dm=e=>`Property 'weight' in key '${e}' must be a positive integer`,Ws=Object.prototype.hasOwnProperty,Aa=class{constructor(t){this._keys=[],this._keyMap={};let n=0;t.forEach(a=>{let i=Zs(a);n+=i.weight,this._keys.push(i),this._keyMap[i.id]=i,n+=i.weight}),this._keys.forEach(a=>{a.weight/=n})}get(t){return this._keyMap[t]}keys(){return this._keys}toJSON(){return JSON.stringify(this._keys)}};function Zs(e){let t=null,n=null,a=null,i=1,r=null;if(Te(e)||He(e))a=e,t=Rs(e),n=Ma(e);else{if(!Ws.call(e,"name"))throw new Error(Nm("name"));let o=e.name;if(a=o,Ws.call(e,"weight")&&(i=e.weight,i<=0))throw new Error(Dm(o));t=Rs(o),n=Ma(o),r=e.getFn}return{path:t,id:n,weight:i,src:a,getFn:r}}function Rs(e){return He(e)?e:e.split(".")}function Ma(e){return He(e)?e.join("."):e}function Wm(e,t){let n=[],a=!1,i=(r,o,s)=>{if(!!ke(r))if(!o[s])n.push(r);else{let p=o[s],l=r[p];if(!ke(l))return;if(s===o.length-1&&(Te(l)||qs(l)||zm(l)))n.push(Em(l));else if(He(l)){a=!0;for(let c=0,u=l.length;c<u;c+=1)i(l[c],o,s+1)}else o.length&&i(l,o,s+1)}};return i(e,Te(t)?t.split("."):t,0),a?n:n[0]}var Rm={includeMatches:!1,findAllMatches:!1,minMatchCharLength:1},Um={isCaseSensitive:!1,includeScore:!1,keys:[],shouldSort:!0,sortFn:(e,t)=>e.score===t.score?e.idx<t.idx?-1:1:e.score<t.score?-1:1},Vm={location:0,threshold:.6,distance:100},Hm={useExtendedSearch:!1,getFn:Wm,ignoreLocation:!1,ignoreFieldNorm:!1,fieldNormWeight:1},ne={...Um,...Rm,...Vm,...Hm},qm=/[^ ]+/g;function $m(e=1,t=3){let n=new Map,a=Math.pow(10,t);return{get(i){let r=i.match(qm).length;if(n.has(r))return n.get(r);let o=1/Math.pow(r,.5*e),s=parseFloat(Math.round(o*a)/a);return n.set(r,s),s},clear(){n.clear()}}}var Ht=class{constructor({getFn:t=ne.getFn,fieldNormWeight:n=ne.fieldNormWeight}={}){this.norm=$m(n,3),this.getFn=t,this.isCreated=!1,this.setIndexRecords()}setSources(t=[]){this.docs=t}setIndexRecords(t=[]){this.records=t}setKeys(t=[]){this.keys=t,this._keysMap={},t.forEach((n,a)=>{this._keysMap[n.id]=a})}create(){this.isCreated||!this.docs.length||(this.isCreated=!0,Te(this.docs[0])?this.docs.forEach((t,n)=>{this._addString(t,n)}):this.docs.forEach((t,n)=>{this._addObject(t,n)}),this.norm.clear())}add(t){let n=this.size();Te(t)?this._addString(t,n):this._addObject(t,n)}removeAt(t){this.records.splice(t,1);for(let n=t,a=this.size();n<a;n+=1)this.records[n].i-=1}getValueForItemAtKeyId(t,n){return t[this._keysMap[n]]}size(){return this.records.length}_addString(t,n){if(!ke(t)||Sa(t))return;let a={v:t,i:n,n:this.norm.get(t)};this.records.push(a)}_addObject(t,n){let a={i:n,$:{}};this.keys.forEach((i,r)=>{let o=i.getFn?i.getFn(t):this.getFn(t,i.path);if(!!ke(o)){if(He(o)){let s=[],p=[{nestedArrIndex:-1,value:o}];for(;p.length;){let{nestedArrIndex:l,value:c}=p.pop();if(!!ke(c))if(Te(c)&&!Sa(c)){let u={v:c,i:l,n:this.norm.get(c)};s.push(u)}else He(c)&&c.forEach((u,h)=>{p.push({nestedArrIndex:h,value:u})})}a.$[r]=s}else if(Te(o)&&!Sa(o)){let s={v:o,n:this.norm.get(o)};a.$[r]=s}}}),this.records.push(a)}toJSON(){return{keys:this.keys,records:this.records}}};function Ks(e,t,{getFn:n=ne.getFn,fieldNormWeight:a=ne.fieldNormWeight}={}){let i=new Ht({getFn:n,fieldNormWeight:a});return i.setKeys(e.map(Zs)),i.setSources(t),i.create(),i}function Gm(e,{getFn:t=ne.getFn,fieldNormWeight:n=ne.fieldNormWeight}={}){let{keys:a,records:i}=e,r=new Ht({getFn:t,fieldNormWeight:n});return r.setKeys(a),r.setIndexRecords(i),r}function _n(e,{errors:t=0,currentLocation:n=0,expectedLocation:a=0,distance:i=ne.distance,ignoreLocation:r=ne.ignoreLocation}={}){let o=t/e.length;if(r)return o;let s=Math.abs(a-n);return i?o+s/i:s?1:o}function Zm(e=[],t=ne.minMatchCharLength){let n=[],a=-1,i=-1,r=0;for(let o=e.length;r<o;r+=1){let s=e[r];s&&a===-1?a=r:!s&&a!==-1&&(i=r-1,i-a+1>=t&&n.push([a,i]),a=-1)}return e[r-1]&&r-a>=t&&n.push([a,r-1]),n}var at=32;function Km(e,t,n,{location:a=ne.location,distance:i=ne.distance,threshold:r=ne.threshold,findAllMatches:o=ne.findAllMatches,minMatchCharLength:s=ne.minMatchCharLength,includeMatches:p=ne.includeMatches,ignoreLocation:l=ne.ignoreLocation}={}){if(t.length>at)throw new Error(Om(at));let c=t.length,u=e.length,h=Math.max(0,Math.min(a,u)),f=r,g=h,x=s>1||p,b=x?Array(u):[],_;for(;(_=e.indexOf(t,g))>-1;){let S=_n(t,{currentLocation:_,expectedLocation:h,distance:i,ignoreLocation:l});if(f=Math.min(S,f),g=_+c,x){let W=0;for(;W<c;)b[_+W]=1,W+=1}}g=-1;let C=[],w=1,z=c+u,F=1<<c-1;for(let S=0;S<c;S+=1){let W=0,Y=z;for(;W<Y;)_n(t,{errors:S,currentLocation:h+Y,expectedLocation:h,distance:i,ignoreLocation:l})<=f?W=Y:z=Y,Y=Math.floor((z-W)/2+W);z=Y;let k=Math.max(1,h-Y+1),E=o?u:Math.min(h+Y,u)+c,m=Array(E+2);m[E+1]=(1<<S)-1;for(let J=E;J>=k;J-=1){let D=J-1,ae=n[e.charAt(D)];if(x&&(b[D]=+!!ae),m[J]=(m[J+1]<<1|1)&ae,S&&(m[J]|=(C[J+1]|C[J])<<1|1|C[J+1]),m[J]&F&&(w=_n(t,{errors:S,currentLocation:D,expectedLocation:h,distance:i,ignoreLocation:l}),w<=f)){if(f=w,g=D,g<=h)break;k=Math.max(1,2*h-g)}}if(_n(t,{errors:S+1,currentLocation:h,expectedLocation:h,distance:i,ignoreLocation:l})>f)break;C=m}let T={isMatch:g>=0,score:Math.max(.001,w)};if(x){let S=Zm(b,s);S.length?p&&(T.indices=S):T.isMatch=!1}return T}function Ym(e){let t={};for(let n=0,a=e.length;n<a;n+=1){let i=e.charAt(n);t[i]=(t[i]||0)|1<<a-n-1}return t}var kn=class{constructor(t,{location:n=ne.location,threshold:a=ne.threshold,distance:i=ne.distance,includeMatches:r=ne.includeMatches,findAllMatches:o=ne.findAllMatches,minMatchCharLength:s=ne.minMatchCharLength,isCaseSensitive:p=ne.isCaseSensitive,ignoreLocation:l=ne.ignoreLocation}={}){if(this.options={location:n,threshold:a,distance:i,includeMatches:r,findAllMatches:o,minMatchCharLength:s,isCaseSensitive:p,ignoreLocation:l},this.pattern=p?t:t.toLowerCase(),this.chunks=[],!this.pattern.length)return;let c=(h,f)=>{this.chunks.push({pattern:h,alphabet:Ym(h),startIndex:f})},u=this.pattern.length;if(u>at){let h=0,f=u%at,g=u-f;for(;h<g;)c(this.pattern.substr(h,at),h),h+=at;if(f){let x=u-at;c(this.pattern.substr(x),x)}}else c(this.pattern,0)}searchIn(t){let{isCaseSensitive:n,includeMatches:a}=this.options;if(n||(t=t.toLowerCase()),this.pattern===t){let g={isMatch:!0,score:0};return a&&(g.indices=[[0,t.length-1]]),g}let{location:i,distance:r,threshold:o,findAllMatches:s,minMatchCharLength:p,ignoreLocation:l}=this.options,c=[],u=0,h=!1;this.chunks.forEach(({pattern:g,alphabet:x,startIndex:b})=>{let{isMatch:_,score:C,indices:w}=Km(t,g,x,{location:i+b,distance:r,threshold:o,findAllMatches:s,minMatchCharLength:p,includeMatches:a,ignoreLocation:l});_&&(h=!0),u+=C,_&&w&&(c=[...c,...w])});let f={isMatch:h,score:h?u/this.chunks.length:1};return h&&a&&(f.indices=c),f}},Oe=class{constructor(t){this.pattern=t}static isMultiMatch(t){return Us(t,this.multiRegex)}static isSingleMatch(t){return Us(t,this.singleRegex)}search(){}};function Us(e,t){let n=e.match(t);return n?n[1]:null}var Fa=class extends Oe{constructor(t){super(t)}static get type(){return"exact"}static get multiRegex(){return/^="(.*)"$/}static get singleRegex(){return/^=(.*)$/}search(t){let n=t===this.pattern;return{isMatch:n,score:n?0:1,indices:[0,this.pattern.length-1]}}},Ea=class extends Oe{constructor(t){super(t)}static get type(){return"inverse-exact"}static get multiRegex(){return/^!"(.*)"$/}static get singleRegex(){return/^!(.*)$/}search(t){let a=t.indexOf(this.pattern)===-1;return{isMatch:a,score:a?0:1,indices:[0,t.length-1]}}},za=class extends Oe{constructor(t){super(t)}static get type(){return"prefix-exact"}static get multiRegex(){return/^\^"(.*)"$/}static get singleRegex(){return/^\^(.*)$/}search(t){let n=t.startsWith(this.pattern);return{isMatch:n,score:n?0:1,indices:[0,this.pattern.length-1]}}},Ba=class extends Oe{constructor(t){super(t)}static get type(){return"inverse-prefix-exact"}static get multiRegex(){return/^!\^"(.*)"$/}static get singleRegex(){return/^!\^(.*)$/}search(t){let n=!t.startsWith(this.pattern);return{isMatch:n,score:n?0:1,indices:[0,t.length-1]}}},Pa=class extends Oe{constructor(t){super(t)}static get type(){return"suffix-exact"}static get multiRegex(){return/^"(.*)"\$$/}static get singleRegex(){return/^(.*)\$$/}search(t){let n=t.endsWith(this.pattern);return{isMatch:n,score:n?0:1,indices:[t.length-this.pattern.length,t.length-1]}}},Ta=class extends Oe{constructor(t){super(t)}static get type(){return"inverse-suffix-exact"}static get multiRegex(){return/^!"(.*)"\$$/}static get singleRegex(){return/^!(.*)\$$/}search(t){let n=!t.endsWith(this.pattern);return{isMatch:n,score:n?0:1,indices:[0,t.length-1]}}},wn=class extends Oe{constructor(t,{location:n=ne.location,threshold:a=ne.threshold,distance:i=ne.distance,includeMatches:r=ne.includeMatches,findAllMatches:o=ne.findAllMatches,minMatchCharLength:s=ne.minMatchCharLength,isCaseSensitive:p=ne.isCaseSensitive,ignoreLocation:l=ne.ignoreLocation}={}){super(t),this._bitapSearch=new kn(t,{location:n,threshold:a,distance:i,includeMatches:r,findAllMatches:o,minMatchCharLength:s,isCaseSensitive:p,ignoreLocation:l})}static get type(){return"fuzzy"}static get multiRegex(){return/^"(.*)"$/}static get singleRegex(){return/^(.*)$/}search(t){return this._bitapSearch.searchIn(t)}},Cn=class extends Oe{constructor(t){super(t)}static get type(){return"include"}static get multiRegex(){return/^'"(.*)"$/}static get singleRegex(){return/^'(.*)$/}search(t){let n=0,a,i=[],r=this.pattern.length;for(;(a=t.indexOf(this.pattern,n))>-1;)n=a+r,i.push([a,n-1]);let o=!!i.length;return{isMatch:o,score:o?0:1,indices:i}}},Oa=[Fa,Cn,za,Ba,Ta,Pa,Ea,wn],Vs=Oa.length,Xm=/ +(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)/,Jm="|";function Qm(e,t={}){return e.split(Jm).map(n=>{let a=n.trim().split(Xm).filter(r=>r&&!!r.trim()),i=[];for(let r=0,o=a.length;r<o;r+=1){let s=a[r],p=!1,l=-1;for(;!p&&++l<Vs;){let c=Oa[l],u=c.isMultiMatch(s);u&&(i.push(new c(u,t)),p=!0)}if(!p)for(l=-1;++l<Vs;){let c=Oa[l],u=c.isSingleMatch(s);if(u){i.push(new c(u,t));break}}}return i})}var eh=new Set([wn.type,Cn.type]),Na=class{constructor(t,{isCaseSensitive:n=ne.isCaseSensitive,includeMatches:a=ne.includeMatches,minMatchCharLength:i=ne.minMatchCharLength,ignoreLocation:r=ne.ignoreLocation,findAllMatches:o=ne.findAllMatches,location:s=ne.location,threshold:p=ne.threshold,distance:l=ne.distance}={}){this.query=null,this.options={isCaseSensitive:n,includeMatches:a,minMatchCharLength:i,findAllMatches:o,ignoreLocation:r,location:s,threshold:p,distance:l},this.pattern=n?t:t.toLowerCase(),this.query=Qm(this.pattern,this.options)}static condition(t,n){return n.useExtendedSearch}searchIn(t){let n=this.query;if(!n)return{isMatch:!1,score:1};let{includeMatches:a,isCaseSensitive:i}=this.options;t=i?t:t.toLowerCase();let r=0,o=[],s=0;for(let p=0,l=n.length;p<l;p+=1){let c=n[p];o.length=0,r=0;for(let u=0,h=c.length;u<h;u+=1){let f=c[u],{isMatch:g,indices:x,score:b}=f.search(t);if(g){if(r+=1,s+=b,a){let _=f.constructor.type;eh.has(_)?o=[...o,...x]:o.push(x)}}else{s=0,r=0,o.length=0;break}}if(r){let u={isMatch:!0,score:s/r};return a&&(u.indices=o),u}}return{isMatch:!1,score:1}}},Da=[];function th(...e){Da.push(...e)}function Wa(e,t){for(let n=0,a=Da.length;n<a;n+=1){let i=Da[n];if(i.condition(e,t))return new i(e,t)}return new kn(e,t)}var jn={AND:"$and",OR:"$or"},Ra={PATH:"$path",PATTERN:"$val"},Ua=e=>!!(e[jn.AND]||e[jn.OR]),nh=e=>!!e[Ra.PATH],ah=e=>!He(e)&&$s(e)&&!Ua(e),Hs=e=>({[jn.AND]:Object.keys(e).map(t=>({[t]:e[t]}))});function Ys(e,t,{auto:n=!0}={}){let a=i=>{let r=Object.keys(i),o=nh(i);if(!o&&r.length>1&&!Ua(i))return a(Hs(i));if(ah(i)){let p=o?i[Ra.PATH]:r[0],l=o?i[Ra.PATTERN]:i[p];if(!Te(l))throw new Error(Tm(p));let c={keyId:Ma(p),pattern:l};return n&&(c.searcher=Wa(l,t)),c}let s={children:[],operator:r[0]};return r.forEach(p=>{let l=i[p];He(l)&&l.forEach(c=>{s.children.push(a(c))})}),s};return Ua(e)||(e=Hs(e)),a(e)}function ih(e,{ignoreFieldNorm:t=ne.ignoreFieldNorm}){e.forEach(n=>{let a=1;n.matches.forEach(({key:i,norm:r,score:o})=>{let s=i?i.weight:null;a*=Math.pow(o===0&&s?Number.EPSILON:o,(s||1)*(t?1:r))}),n.score=a})}function rh(e,t){let n=e.matches;t.matches=[],ke(n)&&n.forEach(a=>{if(!ke(a.indices)||!a.indices.length)return;let{indices:i,value:r}=a,o={indices:i,value:r};a.key&&(o.key=a.key.src),a.idx>-1&&(o.refIndex=a.idx),t.matches.push(o)})}function oh(e,t){t.score=e.score}function sh(e,t,{includeMatches:n=ne.includeMatches,includeScore:a=ne.includeScore}={}){let i=[];return n&&i.push(rh),a&&i.push(oh),e.map(r=>{let{idx:o}=r,s={item:t[o],refIndex:o};return i.length&&i.forEach(p=>{p(r,s)}),s})}var qe=class{constructor(t,n={},a){this.options={...ne,...n},this.options.useExtendedSearch,this._keyStore=new Aa(this.options.keys),this.setCollection(t,a)}setCollection(t,n){if(this._docs=t,n&&!(n instanceof Ht))throw new Error(Pm);this._myIndex=n||Ks(this.options.keys,this._docs,{getFn:this.options.getFn,fieldNormWeight:this.options.fieldNormWeight})}add(t){!ke(t)||(this._docs.push(t),this._myIndex.add(t))}remove(t=()=>!1){let n=[];for(let a=0,i=this._docs.length;a<i;a+=1){let r=this._docs[a];t(r,a)&&(this.removeAt(a),a-=1,i-=1,n.push(r))}return n}removeAt(t){this._docs.splice(t,1),this._myIndex.removeAt(t)}getIndex(){return this._myIndex}search(t,{limit:n=-1}={}){let{includeMatches:a,includeScore:i,shouldSort:r,sortFn:o,ignoreFieldNorm:s}=this.options,p=Te(t)?Te(this._docs[0])?this._searchStringList(t):this._searchObjectList(t):this._searchLogical(t);return ih(p,{ignoreFieldNorm:s}),r&&p.sort(o),qs(n)&&n>-1&&(p=p.slice(0,n)),sh(p,this._docs,{includeMatches:a,includeScore:i})}_searchStringList(t){let n=Wa(t,this.options),{records:a}=this._myIndex,i=[];return a.forEach(({v:r,i:o,n:s})=>{if(!ke(r))return;let{isMatch:p,score:l,indices:c}=n.searchIn(r);p&&i.push({item:r,idx:o,matches:[{score:l,value:r,norm:s,indices:c}]})}),i}_searchLogical(t){let n=Ys(t,this.options),a=(s,p,l)=>{if(!s.children){let{keyId:u,searcher:h}=s,f=this._findMatches({key:this._keyStore.get(u),value:this._myIndex.getValueForItemAtKeyId(p,u),searcher:h});return f&&f.length?[{idx:l,item:p,matches:f}]:[]}let c=[];for(let u=0,h=s.children.length;u<h;u+=1){let f=s.children[u],g=a(f,p,l);if(g.length)c.push(...g);else if(s.operator===jn.AND)return[]}return c},i=this._myIndex.records,r={},o=[];return i.forEach(({$:s,i:p})=>{if(ke(s)){let l=a(n,s,p);l.length&&(r[p]||(r[p]={idx:p,item:s,matches:[]},o.push(r[p])),l.forEach(({matches:c})=>{r[p].matches.push(...c)}))}}),o}_searchObjectList(t){let n=Wa(t,this.options),{keys:a,records:i}=this._myIndex,r=[];return i.forEach(({$:o,i:s})=>{if(!ke(o))return;let p=[];a.forEach((l,c)=>{p.push(...this._findMatches({key:l,value:o[c],searcher:n}))}),p.length&&r.push({idx:s,item:o,matches:p})}),r}_findMatches({key:t,value:n,searcher:a}){if(!ke(n))return[];let i=[];if(He(n))n.forEach(({v:r,i:o,n:s})=>{if(!ke(r))return;let{isMatch:p,score:l,indices:c}=a.searchIn(r);p&&i.push({score:l,key:t,value:r,idx:o,norm:s,indices:c})});else{let{v:r,n:o}=n,{isMatch:s,score:p,indices:l}=a.searchIn(r);s&&i.push({score:p,key:t,value:r,norm:o,indices:l})}return i}};qe.version="6.6.2";qe.createIndex=Ks;qe.parseIndex=Gm;qe.config=ne;qe.parseQuery=Ys;th(Na);var En=be(Js(),1),_c=be(Wt(),1),Fe=require("obsidian"),Le=be(Bt(),1);function qt(e,t){let n=In(e),a=In(t),i=n.pop(),r=a.pop(),o=Ha(n,a);return o!==0?o:i&&r?Ha(i.split("."),r.split(".")):i||r?i?-1:1:0}var ch=e=>typeof e=="string"&&/^[v\d]/.test(e)&&nc.test(e),Sn=(e,t,n)=>{ph(n);let a=qt(e,t);return ac[n].includes(a)},qa=(e,t)=>{let n=t.match(/^([<>=~^]+)/),a=n?n[1]:"=";if(a!=="^"&&a!=="~")return Sn(e,t,a);let[i,r,o]=In(e),[s,p,l]=In(t);return Ln(i,s)!==0?!1:a==="^"?Ha([r,o],[p,l])>=0:Ln(r,p)!==0?!1:Ln(o,l)>=0};qt.validate=ch;qt.compare=Sn;qt.sastisfies=qa;var nc=/^[v^~<>=]*?(\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+))?(?:-([\da-z\-]+(?:\.[\da-z\-]+)*))?(?:\+[\da-z\-]+(?:\.[\da-z\-]+)*)?)?)?$/i,In=e=>{if(typeof e!="string")throw new TypeError("Invalid argument expected string");let t=e.match(nc);if(!t)throw new Error(`Invalid argument not valid semver ('${e}' received)`);return t.shift(),t},Qs=e=>e==="*"||e==="x"||e==="X",ec=e=>{let t=parseInt(e,10);return isNaN(t)?e:t},lh=(e,t)=>typeof e!=typeof t?[String(e),String(t)]:[e,t],Ln=(e,t)=>{if(Qs(e)||Qs(t))return 0;let[n,a]=lh(ec(e),ec(t));return n>a?1:n<a?-1:0},Ha=(e,t)=>{for(let n=0;n<Math.max(e.length,t.length);n++){let a=Ln(e[n]||0,t[n]||0);if(a!==0)return a}return 0},ac={">":[1],">=":[0,1],"=":[0],"<=":[-1,0],"<":[-1]},tc=Object.keys(ac),ph=e=>{if(typeof e!="string")throw new TypeError(`Invalid operator type, expected string but got ${typeof e}`);if(tc.indexOf(e)===-1)throw new Error(`Invalid operator, expected one of ${tc.join("|")}`)};var $a=be(Wt(),1);var Fn=require("obsidian");var ic="isc",rc=(e,t)=>typeof e=="string"&&e.trim().length>0?t.search(e.replace(/^\+|\+$/g,"").split(/[+]/g)):t.getAllIds();function oc(e,t){return $(this,null,function*(){let{id:n,name:a}=e.item,{matches:i}=e,r=yield this.packManager.getSVGIcon(n);if(!r)throw new TypeError("Failed to get icon for key: "+n);t.addClass("mod-complex");let o=t.createDiv("suggestion-content").createDiv("suggestion-title");if(i){let s=i.length===1?i[0].key==="name"?i[0].indices:[]:vn(i.flatMap(p=>p.key==="name"?p.indices:[]));uh(o,a.replace(/[_-]/g," "),s)}else o.setText(a.replace(/[_-]/g," "));t.createDiv("suggestion-aux").createSpan("suggestion-flair",s=>s.appendChild(r))})}var An=class extends Fn.SuggestModal{constructor(n){super(n.app);this.plugin=n;this.renderSuggestion=oc;this.resolve=null;this.modalEl.addClass(ic)}get packManager(){return this.plugin.packManager}getSuggestions(n){return rc(n,this.packManager)}open(){return super.open(),new Promise(n=>{this.resolve=n})}onClose(){this.resolve&&(this.resolve(null),this.resolve=null)}onChooseSuggestion(n){}selectSuggestion(n,a){this.resolve&&(n!=null&&n.item?this.resolve(n.item):this.resolve(null),this.resolve=null),super.selectSuggestion(n,a)}},Mn=class extends Fn.EditorSuggest{constructor(n){super(n.app);this.plugin=n;this.renderSuggestion=oc;this.suggestEl.addClass(ic)}get packManager(){return this.plugin.packManager}onTrigger(n,a){if(!this.plugin.settings.suggester)return null;let i=a.getLine(n.line).substring(0,n.ch),r=this.plugin.settings.triggerWithTrailingSpace?" ":"",o=String.raw`(?:${r}:|::)([^:\s]+$)`,s=i.match(new RegExp(o,"i"));if(!s)return null;let p=s.input.substring(0,s.index).match(/:([^\s:]+$)/);return p&&this.packManager.hasIcon(p[1])?null:{end:n,start:{ch:s.index,line:n.line},query:s[1]}}getSuggestions(n){return rc(n.query,this.packManager)}selectSuggestion(n){if(!this.context)return;let{id:a,pack:i}=n.item;this.context.editor.replaceRange(this.plugin.settings.code2emoji&&i==="emoji"?this.packManager.getIcon(a,!0):`:${a}:`+(this.plugin.settings.spaceAfterSC?" ":""),this.context.start,this.context.end)}},uh=(e,t,n,a)=>{if(n){a===void 0&&(a=0);let i=0;for(let r=0;r<n.length&&i<t.length;r++){let o=n[r],s=o[0]+a,p=o[1]+a+1;if(!(p<=0)){if(s>=t.length)break;s<0&&(s=0),s!==i&&e.appendText(t.substring(i,s)),e.createSpan({cls:"suggestion-highlight",text:t.substring(s,p)}),i=p}}i<t.length&&e.appendText(t.substring(i))}else e.appendText(t)};var sc="iconsc:",cc=(e,t)=>({hasIcon:e.hasIcon.bind(e),getIcon:e.getIcon.bind(e),getIconData:e.getIconData.bind(e),getSVGIcon:e.getSVGIcon.bind(e),getIconFromUser:()=>new An(t).open(),isEmoji:$a.default.hasEmoji.bind($a.default),postProcessor:t.postProcessor.bind(t),version:{get current(){return t.manifest.version},compare:(n,a)=>Sn(t.manifest.version,a,n),satisfies:n=>qa(t.manifest.version,n)}});var hc=be(dc(),1),gc=be(ya(),1),Ja=require("obsidian");var Ya=["activity","airplay","alarm-check","alarm-clock-off","alarm-clock","alarm-minus","alarm-plus","album","alert-circle","alert-octagon","alert-triangle","align-center","align-justify","align-left","align-right","anchor","aperture","archive","arrow-big-down","arrow-big-left","arrow-big-right","arrow-big-up","arrow-down-circle","arrow-down-left","arrow-down-right","arrow-down","arrow-left-circle","arrow-left-right","arrow-left","arrow-right-circle","arrow-right","arrow-up-circle","arrow-up-left","arrow-up-right","arrow-up","asterisk","at-sign","award","axe","banknote","bar-chart-2","bar-chart","battery-charging","battery-full","battery-low","battery-medium","battery","beaker","bell-minus","bell-off","bell-plus","bell-ring","bell","bike","binary","bitcoin","bluetooth-connected","bluetooth-off","bluetooth-searching","bluetooth","bold","book-open","book","bookmark-minus","bookmark-plus","bookmark","bot","box-select","box","briefcase","brush","bug","building","bus","calculator","calendar","camera-off","camera","car","carrot","cast","check-circle-2","check-circle","check-square","check","chevron-down","chevron-first","chevron-last","chevron-left","chevron-right","chevron-up","chevrons-down-up","chevrons-down","chevrons-left","chevrons-right","chevrons-up-down","chevrons-up","chrome","circle-slashed","circle","clipboard-check","clipboard-copy","clipboard-list","clipboard-x","clipboard","clock-1","clock-10","clock-11","clock-12","clock-2","clock-3","clock-4","clock-5","clock-6","clock-7","clock-8","clock-9","clock","cloud-drizzle","cloud-fog","cloud-hail","cloud-lightning","cloud-moon","cloud-off","cloud-rain-wind","cloud-rain","cloud-snow","cloud-sun","cloud","cloudy","clover","code-2","code","codepen","codesandbox","coffee","coins","columns","command","compass","contact","contrast","cookie","copy","copyleft","copyright","corner-down-left","corner-down-right","corner-left-down","corner-left-up","corner-right-down","corner-right-up","corner-up-left","corner-up-right","cpu","credit-card","crop","cross","crosshair","crown","currency","database","delete","disc","divide-circle","divide-square","divide","dollar-sign","download-cloud","download","dribbble","droplet","droplets","drumstick","edit-2","edit-3","edit","egg","equal-not","equal","euro","expand","external-link","eye-off","eye","facebook","fast-forward","feather","figma","file-check-2","file-check","file-code","file-digit","file-input","file-minus-2","file-minus","file-output","file-plus-2","file-plus","file-search","file-text","file-x-2","file-x","file","files","film","filter","flag-triangle-left","flag-triangle-right","flag","flame","flashlight-off","flashlight","flask-conical","flask-round","folder-minus","folder-open","folder-plus","folder","form-input","forward","framer","frown","function-square","gamepad-2","gamepad","gauge","gavel","gem","ghost","gift","git-branch-plus","git-branch","git-commit","git-merge","git-pull-request","github","gitlab","glasses","globe-2","globe","grab","graduation-cap","grid","grip-horizontal","grip-vertical","hammer","hand-metal","hand","hard-drive","hard-hat","hash","haze","headphones","heart","help-circle","hexagon","highlighter","history","home","image-minus","image-off","image-plus","image","import","inbox","indent","indian-rupee","infinity","info","inspect","instagram","italic","japanese-yen","key","landmark","languages","laptop-2","laptop","lasso-select","lasso","layers","layout-dashboard","layout-grid","layout-list","layout-template","layout","library","life-buoy","lightbulb-off","lightbulb","link-2-off","link-2","link","linkedin","list-checks","list-minus","list-ordered","list-plus","list-x","list","list.txt","loader-2","loader","locate-fixed","locate","lock","log-in","log-out","mail","map-pin","map","maximize-2","maximize","megaphone","meh","menu","message-circle","message-square","mic-off","mic","minimize-2","minimize","minus-circle","minus-square","minus","monitor-off","monitor-speaker","monitor","moon","more-horizontal","more-vertical","mountain-snow","mountain","mouse-pointer-2","mouse-pointer-click","mouse-pointer","move-diagonal-2","move-diagonal","move-horizontal","move-vertical","move","music","navigation-2","navigation","network","octagon","option","outdent","package-check","package-minus","package-plus","package-search","package-x","package","palette","paperclip","pause-circle","pause-octagon","pause","pen-tool","pencil","percent","person-standing","phone-call","phone-forwarded","phone-incoming","phone-missed","phone-off","phone-outgoing","phone","pie-chart","piggy-bank","pin","pipette","plane","play-circle","play","plug-zap","plus-circle","plus-square","plus","pocket","podcast","pointer","pound-sterling","power-off","power","printer","qr-code","quote","radio-receiver","radio","redo","refresh-ccw","refresh-cw","regex","repeat-1","repeat","reply-all","reply","rewind","rocking-chair","rotate-ccw","rotate-cw","rss","ruler","russian-ruble","save","scale","scan-line","scan","scissors","screen-share-off","screen-share","search","send","separator-horizontal","separator-vertical","server-crash","server-off","server","settings-2","settings","share-2","share","sheet","shield-alert","shield-check","shield-close","shield-off","shield","shirt","shopping-bag","shopping-cart","shovel","shrink","shuffle","sidebar-close","sidebar-open","sidebar","sigma","signal-high","signal-low","signal-medium","signal-zero","signal","skip-back","skip-forward","skull","slack","slash","sliders","smartphone-charging","smartphone","smile","snowflake","sort-asc","sort-desc","speaker","sprout","square","star-half","star","stop-circle","strikethrough","subscript","sun","sunrise","sunset","superscript","swiss-franc","switch-camera","table","tablet","tag","target","tent","terminal-square","terminal","text-cursor-input","text-cursor","thermometer-snowflake","thermometer-sun","thermometer","thumbs-down","thumbs-up","ticket","timer-off","timer-reset","timer","toggle-left","toggle-right","tornado","trash-2","trash","trello","trending-down","trending-up","triangle","truck","tv-2","tv","twitch","twitter","type","umbrella","underline","undo","unlink-2","unlink","unlock","upload-cloud","upload","user-check","user-minus","user-plus","user-x","user","users","verified","vibrate","video-off","video","view","voicemail","volume-1","volume-2","volume-x","volume","wallet","wand","watch","webcam","wifi-off","wifi","wind","wrap-text","wrench","x-circle","x-octagon","x-square","x","youtube","zap-off","zap","zoom-in","zoom-out",""];var Xa=["logo-crystal","create-new","trash","search","right-triangle","document","folder","pencil","left-arrow","right-arrow","three-horizontal-bars","dot-network","audio-file","image-file","pdf-file","gear","documents","blocks","go-to-file","presentation","cross-in-box","microphone","microphone-filled","link","popup-open","checkmark","hashtag","left-arrow-with-tail","right-arrow-with-tail","up-arrow-with-tail","down-arrow-with-tail","lines-of-text","vertical-three-dots","pin","magnifying-glass","info","horizontal-split","vertical-split","calendar-with-checkmark","sheets-in-box","up-and-down-arrows","broken-link","cross","any-key","reset","star","crossed-star","dice","filled-pin","enter","help","vault","open-vault","paper-plane","bullet-list","uppercase-lowercase-a","star-list","expand-vertically","languages","switch","pane-layout","install","sync","check-in-circle","sync-small","check-small","paused","forward-arrow","stacked-levels","bracket-glyph","note-glyph","tag-glyph","price-tag-glyph","heading-glyph","bold-glyph","italic-glyph","strikethrough-glyph","highlight-glyph","code-glyph","quote-glyph","link-glyph","bullet-list-glyph","number-list-glyph","checkbox-glyph","undo-glyph","redo-glyph","up-chevron-glyph","down-chevron-glyph","left-chevron-glyph","right-chevron-glyph","percent-sign-glyph","keyboard-glyph","double-up-arrow-glyph","double-down-arrow-glyph","image-glyph","wrench-screwdriver-glyph","clock","plus-with-circle","minus-with-circle","indent-glyph","unindent-glyph","fullscreen","exit-fullscreen","cloud","run-command","compress-glyph","enlarge-glyph","scissors-glyph","up-curly-arrow-glyph","down-curly-arrow-glyph","plus-minus-glyph","links-going-out","links-coming-in","add-note-glyph","duplicate-glyph","clock-glyph","calendar-glyph","command-glyph","dice-glyph","file-explorer-glyph","graph-glyph","import-glyph","navigate-glyph","open-elsewhere-glyph","bullet-list-glyph","presentation-glyph","paper-plane-glyph","question-mark-glyph","restore-file-glyph","search-glyph","star-glyph","play-audio-glyph","stop-audio-glyph","tomorrow-glyph","wand-glyph","workspace-glyph","yesterday-glyph","box-glyph","merge-files-glyph","merge-files","two-blank-pages","scissors","paste","paste-text","split","select-all-text","wand","github-glyph","reading-glasses"];var vh=e=>e.replace(/-/g,"_"),Qa="luc",bh="obs",fc=e=>["class","height","width"].forEach(t=>{var n;return(n=e.firstElementChild)==null?void 0:n.removeAttribute(t)}),ei=class{constructor(t,n){this.pack=t;this.obsidianId=n;this.type="bulti-in";this.name=vh(n),this.id=`${t}_${this.name}`}get data(){var n;let t=createDiv();return(0,Ja.setIcon)(t,(this.pack===Qa?"lucide-":"")+this.obsidianId),fc(t),(n=t.firstElementChild)==null||n.setAttribute("xmlns","http://www.w3.org/2000/svg"),t.innerHTML}get dataUri(){return(0,hc.default)(this.data)}getDOM(t=!0){let n=createSpan({cls:xt(this)});return t?(n.addClass("isc-svg-icon"),(0,Ja.setIcon)(n,(this.pack===Qa?"lucide-":"")+this.obsidianId),fc(n)):(n.addClass("isc-img-icon"),n.createEl("img",{attr:{src:this.dataUri}})),n}},mc="emoji",yh=()=>{let e=new Map,t=[],n=[];for(let[a,i]of[[bh,Xa],[Qa,Ya]]){n.push(a);for(let r of i){let o=new ei(a,r);e.set(o.id,o),t.push(o)}}n.push(mc);for(let a of Object.keys(gc.default))t.push({pack:mc,id:a,name:a});return{packs:e,ids:t,packnames:n}},ti=yh(),ni=ti.packs,ai=ti.ids,vt=ti.packnames;var ii=be(Wt(),1);var it=class{constructor(t){this.name=t}get id(){return this.name}get pack(){return"emoji"}get type(){return"emoji"}get char(){return ii.default.get(this.name)}static getData(t){return ii.default.hasEmoji(t)?new it(t):null}getDOM(t=!0){return createSpan({cls:[xt(this),"isc-char-icon"],text:this.char})}};var xc=require("obsidian"),vc=be(Bt(),1);var Xe=class{constructor(t,n,a,i,r){this._id=t;this._name=n;this._pack=a;this.plugin=r;this.path=i.trim()}static getData(t,n,a){let i=Ca(t);return!i||i.pack==="emoji"?null:new Xe(t,i.name,i.pack,n,a)}get type(){return"file"}get vault(){return this.plugin.app.vault}get id(){return this._id}get pack(){return this._pack}get name(){return this._name}get ext(){return(0,vc.extname)(this.path)}get fsPath(){return this.vault.adapter instanceof xc.FileSystemAdapter?this.vault.adapter.getFullPath(this.path):null}get resourcePath(){return this.vault.adapter.getResourcePath(this.path)}get isSVG(){return this.ext===".svg"}getDOM(t=!0){let n=createSpan({cls:xt(this)});return t&&this.isSVG?(n.addClass("isc-svg-icon"),(()=>$(this,null,function*(){let a=yield this.plugin.fileIconCache.getIcon(this.path);return a?(this.fixFillColor(a),n.append(a)):console.error("failed to get icon data for",this.path),n}))()):(n.addClass("isc-img-icon"),n.createEl("img",{attr:{src:this.resourcePath}}),n)}fixFillColor(t){if(!!_h.includes(this.pack))for(let n of t.getElementsByTagName("path"))n.hasAttribute("fill")||n.setAttribute("fill","currentColor")}},_h=["fab","far","fas","rif","ril"];var bc=e=>!!e.ext;var kh="/icons.json",wh="icons",$t=class extends Fe.Events{constructor(n){super();this.plugin=n;this._customIcons=new Map;this._cutomsIconPacknames=new Set;this._loaded=!1;this._fuse=new qe(ai,{keys:["name","pack"],includeScore:!0,findAllMatches:!0,threshold:.5,shouldSort:!0,includeMatches:!0,useExtendedSearch:!0})}get vault(){return this.plugin.app.vault}renameIconFile(n,a,i){return $(this,null,function*(){let r=(0,Le.join)(this.customIconsDir,i+a),o=(0,Le.join)(this.customIconsDir,n+a);return yield this.vault.adapter.rename(o,r),r})}removeIconFile(n,a){let i=(0,Le.join)(this.customIconsDir,n+a);return this.vault.adapter.remove(i)}addIcon(n,a,i){return $(this,null,function*(){let r=(0,Le.join)(this.customIconsDir,n+a);return yield this.vault.adapter.writeBinary(r,i),r})}get customPacknames(){return[...this._cutomsIconPacknames]}get customIconsFilePath(){return(0,Fe.normalizePath)(this.plugin.manifest.dir+kh)}get customIconsDir(){return(0,Le.join)(this.vault.configDir,wh)}isPacknameExists(n){return vt.includes(n)||this._cutomsIconPacknames.has(n)}get enabledPacknames(){return[...vt,...this._cutomsIconPacknames].filter(n=>this.isPackEnabled(n))}hasIcon(n){return this._isBuiltIn(n)||this._customIcons.has(n)}_isBuiltIn(n){return _c.default.hasEmoji(n)||ni.has(n)}getIcon(n,a=!1){n=je(n);let i=this.getIconData(n);if(!i)return null;let r=()=>i.getDOM(!1);switch(i.type){case"emoji":return a?i.char:r();case"bulti-in":return a?i.dataUri:r();case"file":return a?i.resourcePath:r();default:(0,yc.default)(i)}}getSVGIcon(n,a=!1){return $(this,null,function*(){n=je(n);let i=this.getIconData(n);if(!i)return null;let r=()=>i.getDOM(!0);if(i.type==="emoji")return a?i.char:r();if(i.type==="bulti-in"||i.type==="file"&&i.isSVG){let o=yield r();return a?o.innerHTML:o}else return a?i.resourcePath:r()})}getIconData(n){n=je(n);let a;return(a=it.getData(n))||(a=ni.get(n))||(a=this._customIcons.get(n))?a:null}isPackEnabled(n){return n==="emoji"?!0:!this.plugin.settings.disabledPacks.has(n)}refreshPackNames(){this._cutomsIconPacknames.clear();for(let[,{pack:n}]of this._customIcons)this._cutomsIconPacknames.add(n)}loadIcons(){return $(this,null,function*(){if(this._loaded&&(this._fuse.setCollection([]),this._customIcons.clear(),this._cutomsIconPacknames.clear(),this._loaded=!1),!(yield this.vault.adapter.exists(this.customIconsDir))){yield this.vault.adapter.mkdir(this.customIconsDir);return}let n=yield this.vault.adapter.list(this.customIconsDir),a,i=n.files.map(r=>$(this,null,function*(){if(!gn.test(r))return;let o=(0,Le.basename)(r).replace(gn,""),s=Xe.getData(o,r,this.plugin);s?(this._customIcons.set(o,s),this._fuse.add(s)):console.warn("Failed to load icon data (raw value: %o) for id %s, skipping...",r,o)}));for(let r of yield Promise.allSettled(i))r.status==="rejected"&&console.error("Failed to load icon",r.reason);this._loaded=!0,this.refreshPackNames(),this.trigger("initialized",this.plugin.api)})}backupIcons(n){return $(this,null,function*(){let a=new En.default,i=yield this.vault.adapter.list(this.customIconsDir);for(let o of i.files)(!n||(0,Le.basename)(o).startsWith(n+"_"))&&a.file((0,Le.basename)(o),this.vault.adapter.readBinary(o));let r=`${n!=null?n:"custom-icons"}.zip`;yield this.vault.createBinary(r,yield a.generateAsync({type:"arraybuffer"})),Fe.Platform.isDesktopApp?this.plugin.app.openWithDefaultApp(""):new Fe.Notice(`icons have been saved to ${r}, enable 'Detect all file extension' in 'Files & Links' to visit it`)})}importIconsFromFileList(n,a=!1){return $(this,null,function*(){let i=[];for(let r=0;r<n.length;r++){let o=n[r];o.type==="application/zip"&&i.push(this.importIcons(o,a))}return Promise.allSettled(i)})}importIcons(n,a){return $(this,null,function*(){let i=n.name.replace(/\.zip$/,""),r;n instanceof File?r=yield En.default.loadAsync(n):r=yield En.default.loadAsync(n.data);let o=r.file(Es).map(p=>$(this,null,function*(){let{name:l}=p;a&&!l.startsWith(i+"_")&&(l=i+"_"+l);let c=this.getAvailableId(l),u=(0,Le.join)(this.customIconsDir,c);return(yield this.vault.adapter.exists(u))?Promise.reject(`icon ${c} already exists, skipping..`):(yield this.vault.adapter.writeBinary(u,yield p.async("arraybuffer")),c)})),s=(yield Promise.allSettled(o)).reduce((p,l)=>(l.status==="rejected"?console.error("Failed to import icon",l.reason):p.push(l.value),p),[]);return new Fe.Notice(s.length+" icons imported"),n.name})}addFromFiles(n,a){return $(this,null,function*(){let i=yield zs(a);if(!i){new Fe.Notice("No SVG file found in dropped items");return}if(vt.includes(n)){console.error("failed to add pack: pack name %s reserved",n);return}let r=i.reduce((s,{name:p,ext:l,data:c})=>{let u=ja(`${n}_${p}`);return u?(u=this.getAvailableId(u),this._customIcons.has(u)?(s.push(Promise.reject(`icon ${u} already exists, skipping..`)),s):(s.push((()=>$(this,null,function*(){try{let h=yield this.addIcon(u,l,c);this.set(u,new Xe(u,p,n,h,this.plugin),!1)}catch(h){throw new $e("add",u,h)}return u}))()),s)):(console.warn("failed to add icon: id %s invalid, skipping...",u),s)},[]),o=[];for(let s of yield Promise.allSettled(r))s.status==="rejected"?console.error("Failed to add icon, details: ",s.reason):o.push(s.value);this.refreshPackNames(),this.trigger("changed",this.plugin.api,o),new Fe.Notice(o.length.toString()+" icons added")})}deleteMultiple(...n){return $(this,null,function*(){this._fuse.remove(r=>bc(r)&&n.includes(r.id));let a=n.map(r=>$(this,null,function*(){let o=this._customIcons.get(r);if(!o)throw new $e("delete",r,"No icon found in _customIcons");this._customIcons.delete(r);try{yield this.removeIconFile(r,o.ext)}catch(s){throw new $e("delete",r,s)}})),i=!1;for(let r of yield Promise.allSettled(a))r.status==="rejected"?console.error("Failed to remove icon file, details: ",r.reason):i||(i=!0);i&&(this.refreshPackNames(),this.trigger("changed",this.plugin.api,n))})}filter(n){return $(this,null,function*(){let a=new Map;for(let[r,o]of this._customIcons)n(r,o)||(this._customIcons.delete(r),a.set(r,o.path));if(this._fuse.remove(r=>a.has(r.id)),a.size===0)return;this.refreshPackNames(),this.trigger("changed",this.plugin.api,[...a.keys()]);let i=[...a.values()].map(r=>$(this,null,function*(){try{yield this.vault.adapter.remove(r)}catch(o){throw new $e("delete",(0,Le.basename)(r),o)}}));for(let r of yield Promise.allSettled(i))r.status==="rejected"&&console.error("Failed to remove icon file, details: ",r.reason)})}rename(n,a){return $(this,null,function*(){if(this.hasIcon(a))return console.log("failed to rename icon: id %s already exists",a),null;let i=this._customIcons.get(n);if(!i)return console.log("failed to rename icon: id %s not found in custom icons",n),null;let r=ja(a);if(!r)return console.log("failed to rename icon: id %s invalid",n),null;try{i.path=yield this.renameIconFile(n,i.ext,a)}catch(o){throw new $e("rename",n,o,a)}return this.set(r,i,!1),this.delete(n,!1,!1),this.refreshPackNames(),this.trigger("changed",this.plugin.api,[n,a]),a})}star(n){return $(this,null,function*(){let a=n.replace(/_\d?$/,"");if(a===n)return console.log("failed to star icon: no suffix found for id %s",n),null;let i=this._customIcons.get(n);if(!i)return console.log("failed to star icon: id %s not found in custom icons",n),null;if(this._isBuiltIn(a))return console.log("failed to star icon: new id %s exists in built-in icons",a),null;try{let{ext:r}=i;if(this._customIcons.has(a)){let o=this._customIcons.get(a),{ext:s}=o;yield this.renameIconFile(a,s,a+"_temp"),i.path=yield this.renameIconFile(n,r,a),this.set(a,i,!1),o.path=yield this.renameIconFile(a+"_temp",s,n),this.set(n,o,!1)}else i.path=yield this.renameIconFile(n,r,a),this.set(a,i,!1),this.delete(n,!1,!1)}catch(r){new $e("rename",n,r,a)}return this.refreshPackNames(),this.trigger("changed",this.plugin.api,[n,a]),a})}getAvailableId(n){if(!this.hasIcon(n))return n;let a=1,i=`${n}_${a}`;for(;this.hasIcon(i);)i=`${n}_${++a}`;return`${n}_${a}`}set(n,a,i=!0){this._customIcons.get(n)!==a&&(this._customIcons.set(n,a),this._fuse.remove(r=>r.id===n),this._fuse.add(a),i&&(this.refreshPackNames(),this.trigger("changed",this.plugin.api,[n])))}delete(n,a=!0,i=!0){return $(this,null,function*(){let r=this._customIcons.get(n);if(!r)return!1;if(i)try{yield this.removeIconFile(n,r.ext)}catch(s){throw new $e("delete",n,s)}let o=this._customIcons.delete(n);return this._fuse.remove(s=>s.id===n),a&&(this.refreshPackNames(),this.trigger("changed",this.plugin.api,[n])),o})}clear(){return $(this,null,function*(){let n=(yield this.vault.adapter.list(this.customIconsDir)).files.map(a=>this.vault.adapter.remove(a));for(let a of yield Promise.allSettled(n))a.status==="rejected"&&console.error("Failed to remove icon file, details: ",a.reason);this._customIcons.clear(),this._fuse.remove(a=>!ai.includes(a)),this.refreshPackNames(),this.trigger("changed",this.plugin.api)})}search(n,a,i){let r=n.map(o=>({name:o}));return a=a!=null?a:this.enabledPacknames,r.push({$or:a.map(o=>({pack:`=${o}`}))}),this._fuse.search({$and:r},{limit:i!=null?i:20})}getAllIds(n,a){let i=(n!=null?n:this.enabledPacknames).map(r=>({pack:`=${r}`}));return this._fuse.search({$or:i},{limit:a!=null?a:20})}trigger(...n){let[a,...i]=n;super.trigger(a,...i),this.plugin.app.vault.trigger(sc+a,...i)}on(...n){return super.on(...n)}},$e=class extends Error{constructor(t,n,a,i){super(`Error while ${t} on ${n}${i?"=>"+i:""}: ${a instanceof Error?`${a.name}: ${a.message}`:a}`),console.error(`${t} on ${n}${i?"=>"+i:""}`,a),this.name="SaveIconError"}};var oi=require("obsidian"),Cc=be(Bt(),1);var kc=require("obsidian"),ri=class extends kc.Modal{constructor(n){super(n);this.buttonContainerEl=this.modalEl.createDiv("modal-button-container");this.resolve=null;this.containerEl.addClass("mod-confirmation"),this.addButton("mod-cta","OK",()=>this.resolve&&this.resolve(!0)),this.addCancelButton()}open(){return super.open(),new Promise(n=>this.resolve=n)}addButton(n,a,i){return this.buttonContainerEl.createEl("button",{cls:n,text:a}).addEventListener("click",r=>$(this,null,function*(){i&&(yield i(r)),this.close()})),this}onClose(){this.resolve&&this.resolve(!1)}addCancelButton(){return this.addButton("","Cancel",this.close.bind(this))}},wc=(e,t)=>{let n=new ri(t);return n.contentEl.setText(e),n.open()};var Ch=e=>$(void 0,null,function*(){let{vault:t}=e.app,n=yield t.readJson(e.packManager.customIconsFilePath),a=e.packManager.customIconsDir;(yield t.adapter.exists(a))||(yield t.adapter.mkdir(a)),yield Promise.allSettled(Object.entries(n).reduce((i,[r,o])=>{if(typeof r=="string"&&typeof o=="string"){let s=(0,Cc.join)(a,`${r}.svg`);i.push(t.create(s,o))}return i},[]))}),jh=e=>$(void 0,null,function*(){if((yield e.app.vault.adapter.exists(e.packManager.customIconsFilePath))&&!e.settings.isMigrated&&(yield wc("Found custom icons that have not been upgraded, update icons now?",e.app)))try{yield Ch(e),e.settings.isMigrated=!0,yield e.saveSettings(),new oi.Notice("Icon update complete, you can now find icon files in "+e.packManager.customIconsDir)}catch(n){new oi.Notice("Failed to update icons, check console for more details"),console.error(n)}}),jc=jh;var Lh=e=>(t,n)=>{for(let a of t.querySelectorAll(".callout")){let i=a.querySelector(".callout-title > .callout-icon"),r=new MutationObserver(o=>$(void 0,null,function*(){if(i.childElementCount>0)return;let s=Ih(i,"--callout-icon"),p=yield e.api.getSVGIcon(s);!p||(r.disconnect(),i.className+=" "+p.className,i.replaceChildren(...p.childNodes))}));r.observe(i,{childList:!0})}},Lc=Lh,Ih=(e,t,n)=>getComputedStyle(e,n).getPropertyValue(t).trim();var Sh=e=>{switch(e.nodeName){case"CODE":case"MJX-CONTAINER":return NodeFilter.FILTER_REJECT;case"#text":return e.nodeValue&>.test(e.nodeValue)?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_REJECT;default:return NodeFilter.FILTER_SKIP}},si=e=>{let t=a=>$(void 0,null,function*(){for(let i of[...a.wholeText.matchAll(Rt(gt))].sort((r,o)=>o.index-r.index).map(r=>({text:r[0],index:r.index})))yield n(a,i)}),n=(o,s)=>$(void 0,[o,s],function*(a,{text:i,index:r}){var l,c;let p=yield e.packManager.getSVGIcon(je(i));if(!p)return a;if(typeof p=="string")a.textContent&&(a.textContent=(l=a.textContent)==null?void 0:l.replace(i,p));else{let u=a.splitText(r);(c=u.parentElement)==null||c.insertBefore(p,u),u.textContent=u.wholeText.substring(i.length)}});return a=>{let i=document.createTreeWalker(a,NodeFilter.SHOW_ALL,{acceptNode:Sh}),r=i.currentNode;for(;r;){if(r.nodeType===3){let o=r;$(void 0,null,function*(){let s=[o];o.__PENDING__&&(yield o.__PENDING__,s=[...o.parentElement.childNodes].filter(l=>l instanceof Text));let p=Promise.all(s.map(t));o.__PENDING__=p,yield p,delete o.__PENDING__})}r=i.nextNode()}}},ci=e=>(t,n)=>t.replace(Rt(gt),a=>e.packManager.hasIcon(je(a))?n(a):a);var Ic=e=>{e.registerMarkdownPostProcessor(e._nodeProcessor),e.registerMarkdownPostProcessor(Lc(e))};var zn=class extends Error{},li=class extends zn{},pi=class extends zn{},Ah=(e,t=",")=>e.join(t),Mh={accept:"*",multiple:!1,strict:!1},ui=e=>{let{accept:t,multiple:n,strict:a}={...Mh,...e},i=zh({multiple:n,accept:Array.isArray(t)?Ah(t):t});return new Promise(r=>{i.onchange=()=>{r(Fh(i.files,n,a)),i.remove()},i.click()})},Fh=(e,t,n)=>new Promise((a,i)=>{if(!e)return i(new li);let r=Eh(e,t,n);if(!r)return i(new pi);a(r)}),Eh=(e,t,n)=>!t&&n?e.length===1?e[0]:null:e.length?e:null,zh=({accept:e,multiple:t})=>{let n=document.createElement("input");return n.type="file",n.multiple=t,n.accept=e,n};var me=require("obsidian");var Ol=be(Ia(),1),Nl=be(fn(),1),Vn=require("obsidian");var Kt,X,Ec,Bh,Gt,zc,Sc,Bc,Bn={},Pc=[],Ph=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;function Ge(e,t){for(var n in t)e[n]=t[n];return e}function Tc(e){var t=e.parentNode;t&&t.removeChild(e)}function Ee(e,t,n){var a,i,r,o={};for(r in t)r=="key"?a=t[r]:r=="ref"?i=t[r]:o[r]=t[r];if(arguments.length>2&&(o.children=arguments.length>3?Kt.call(arguments,2):n),typeof e=="function"&&e.defaultProps!=null)for(r in e.defaultProps)o[r]===void 0&&(o[r]=e.defaultProps[r]);return Zt(e,o,a,i,null)}function Zt(e,t,n,a,i){var r={type:e,props:t,key:n,ref:a,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:i??++Ec};return i==null&&X.vnode!=null&&X.vnode(r),r}function fi(){return{current:null}}function Ne(e){return e.children}function Ie(e,t){this.props=e,this.context=t}function bt(e,t){if(t==null)return e.__?bt(e.__,e.__.__k.indexOf(e)+1):null;for(var n;t<e.__k.length;t++)if((n=e.__k[t])!=null&&n.__e!=null)return n.__e;return typeof e.type=="function"?bt(e):null}function Oc(e){var t,n;if((e=e.__)!=null&&e.__c!=null){for(e.__e=e.__c.base=null,t=0;t<e.__k.length;t++)if((n=e.__k[t])!=null&&n.__e!=null){e.__e=e.__c.base=n.__e;break}return Oc(e)}}function di(e){(!e.__d&&(e.__d=!0)&&Gt.push(e)&&!Pn.__r++||Sc!==X.debounceRendering)&&((Sc=X.debounceRendering)||zc)(Pn)}function Pn(){for(var e;Pn.__r=Gt.length;)e=Gt.sort(function(t,n){return t.__v.__b-n.__v.__b}),Gt=[],e.some(function(t){var n,a,i,r,o,s;t.__d&&(o=(r=(n=t).__v).__e,(s=n.__P)&&(a=[],(i=Ge({},r)).__v=r.__v+1,mi(s,r,i,n.__n,s.ownerSVGElement!==void 0,r.__h!=null?[o]:null,a,o??bt(r),r.__h),Rc(a,r),r.__e!=o&&Oc(r)))})}function Nc(e,t,n,a,i,r,o,s,p,l){var c,u,h,f,g,x,b,_=a&&a.__k||Pc,C=_.length;for(n.__k=[],c=0;c<t.length;c++)if((f=n.__k[c]=(f=t[c])==null||typeof f=="boolean"?null:typeof f=="string"||typeof f=="number"||typeof f=="bigint"?Zt(null,f,null,null,f):Array.isArray(f)?Zt(Ne,{children:f},null,null,null):f.__b>0?Zt(f.type,f.props,f.key,null,f.__v):f)!=null){if(f.__=n,f.__b=n.__b+1,(h=_[c])===null||h&&f.key==h.key&&f.type===h.type)_[c]=void 0;else for(u=0;u<C;u++){if((h=_[u])&&f.key==h.key&&f.type===h.type){_[u]=void 0;break}h=null}mi(e,f,h=h||Bn,i,r,o,s,p,l),g=f.__e,(u=f.ref)&&h.ref!=u&&(b||(b=[]),h.ref&&b.push(h.ref,null,f),b.push(u,f.__c||g,f)),g!=null?(x==null&&(x=g),typeof f.type=="function"&&f.__k===h.__k?f.__d=p=Dc(f,p,e):p=Wc(e,f,h,_,g,p),typeof n.type=="function"&&(n.__d=p)):p&&h.__e==p&&p.parentNode!=e&&(p=bt(h))}for(n.__e=x,c=C;c--;)_[c]!=null&&(typeof n.type=="function"&&_[c].__e!=null&&_[c].__e==n.__d&&(n.__d=bt(a,c+1)),Vc(_[c],_[c]));if(b)for(c=0;c<b.length;c++)Uc(b[c],b[++c],b[++c])}function Dc(e,t,n){for(var a,i=e.__k,r=0;i&&r<i.length;r++)(a=i[r])&&(a.__=e,t=typeof a.type=="function"?Dc(a,t,n):Wc(n,a,a,i,a.__e,t));return t}function De(e,t){return t=t||[],e==null||typeof e=="boolean"||(Array.isArray(e)?e.some(function(n){De(n,t)}):t.push(e)),t}function Wc(e,t,n,a,i,r){var o,s,p;if(t.__d!==void 0)o=t.__d,t.__d=void 0;else if(n==null||i!=r||i.parentNode==null)e:if(r==null||r.parentNode!==e)e.appendChild(i),o=null;else{for(s=r,p=0;(s=s.nextSibling)&&p<a.length;p+=2)if(s==i)break e;e.insertBefore(i,r),o=r}return o!==void 0?o:i.nextSibling}function Th(e,t,n,a,i){var r;for(r in n)r==="children"||r==="key"||r in t||Tn(e,r,null,n[r],a);for(r in t)i&&typeof t[r]!="function"||r==="children"||r==="key"||r==="value"||r==="checked"||n[r]===t[r]||Tn(e,r,t[r],n[r],a)}function Ac(e,t,n){t[0]==="-"?e.setProperty(t,n):e[t]=n==null?"":typeof n!="number"||Ph.test(t)?n:n+"px"}function Tn(e,t,n,a,i){var r;e:if(t==="style")if(typeof n=="string")e.style.cssText=n;else{if(typeof a=="string"&&(e.style.cssText=a=""),a)for(t in a)n&&t in n||Ac(e.style,t,"");if(n)for(t in n)a&&n[t]===a[t]||Ac(e.style,t,n[t])}else if(t[0]==="o"&&t[1]==="n")r=t!==(t=t.replace(/Capture$/,"")),t=t.toLowerCase()in e?t.toLowerCase().slice(2):t.slice(2),e.l||(e.l={}),e.l[t+r]=n,n?a||e.addEventListener(t,r?Fc:Mc,r):e.removeEventListener(t,r?Fc:Mc,r);else if(t!=="dangerouslySetInnerHTML"){if(i)t=t.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if(t!=="href"&&t!=="list"&&t!=="form"&&t!=="tabIndex"&&t!=="download"&&t in e)try{e[t]=n??"";break e}catch{}typeof n=="function"||(n!=null&&(n!==!1||t[0]==="a"&&t[1]==="r")?e.setAttribute(t,n):e.removeAttribute(t))}}function Mc(e){this.l[e.type+!1](X.event?X.event(e):e)}function Fc(e){this.l[e.type+!0](X.event?X.event(e):e)}function mi(e,t,n,a,i,r,o,s,p){var l,c,u,h,f,g,x,b,_,C,w,z,F,T=t.type;if(t.constructor!==void 0)return null;n.__h!=null&&(p=n.__h,s=t.__e=n.__e,t.__h=null,r=[s]),(l=X.__b)&&l(t);try{e:if(typeof T=="function"){if(b=t.props,_=(l=T.contextType)&&a[l.__c],C=l?_?_.props.value:l.__:a,n.__c?x=(c=t.__c=n.__c).__=c.__E:("prototype"in T&&T.prototype.render?t.__c=c=new T(b,C):(t.__c=c=new Ie(b,C),c.constructor=T,c.render=Nh),_&&_.sub(c),c.props=b,c.state||(c.state={}),c.context=C,c.__n=a,u=c.__d=!0,c.__h=[]),c.__s==null&&(c.__s=c.state),T.getDerivedStateFromProps!=null&&(c.__s==c.state&&(c.__s=Ge({},c.__s)),Ge(c.__s,T.getDerivedStateFromProps(b,c.__s))),h=c.props,f=c.state,u)T.getDerivedStateFromProps==null&&c.componentWillMount!=null&&c.componentWillMount(),c.componentDidMount!=null&&c.__h.push(c.componentDidMount);else{if(T.getDerivedStateFromProps==null&&b!==h&&c.componentWillReceiveProps!=null&&c.componentWillReceiveProps(b,C),!c.__e&&c.shouldComponentUpdate!=null&&c.shouldComponentUpdate(b,c.__s,C)===!1||t.__v===n.__v){c.props=b,c.state=c.__s,t.__v!==n.__v&&(c.__d=!1),c.__v=t,t.__e=n.__e,t.__k=n.__k,t.__k.forEach(function(S){S&&(S.__=t)}),c.__h.length&&o.push(c);break e}c.componentWillUpdate!=null&&c.componentWillUpdate(b,c.__s,C),c.componentDidUpdate!=null&&c.__h.push(function(){c.componentDidUpdate(h,f,g)})}if(c.context=C,c.props=b,c.__v=t,c.__P=e,w=X.__r,z=0,"prototype"in T&&T.prototype.render)c.state=c.__s,c.__d=!1,w&&w(t),l=c.render(c.props,c.state,c.context);else do c.__d=!1,w&&w(t),l=c.render(c.props,c.state,c.context),c.state=c.__s;while(c.__d&&++z<25);c.state=c.__s,c.getChildContext!=null&&(a=Ge(Ge({},a),c.getChildContext())),u||c.getSnapshotBeforeUpdate==null||(g=c.getSnapshotBeforeUpdate(h,f)),F=l!=null&&l.type===Ne&&l.key==null?l.props.children:l,Nc(e,Array.isArray(F)?F:[F],t,n,a,i,r,o,s,p),c.base=t.__e,t.__h=null,c.__h.length&&o.push(c),x&&(c.__E=c.__=null),c.__e=!1}else r==null&&t.__v===n.__v?(t.__k=n.__k,t.__e=n.__e):t.__e=Oh(n.__e,t,n,a,i,r,o,p);(l=X.diffed)&&l(t)}catch(S){t.__v=null,(p||r!=null)&&(t.__e=s,t.__h=!!p,r[r.indexOf(s)]=null),X.__e(S,t,n)}}function Rc(e,t){X.__c&&X.__c(t,e),e.some(function(n){try{e=n.__h,n.__h=[],e.some(function(a){a.call(n)})}catch(a){X.__e(a,n.__v)}})}function Oh(e,t,n,a,i,r,o,s){var p,l,c,u=n.props,h=t.props,f=t.type,g=0;if(f==="svg"&&(i=!0),r!=null){for(;g<r.length;g++)if((p=r[g])&&"setAttribute"in p==!!f&&(f?p.localName===f:p.nodeType===3)){e=p,r[g]=null;break}}if(e==null){if(f===null)return document.createTextNode(h);e=i?document.createElementNS("http://www.w3.org/2000/svg",f):document.createElement(f,h.is&&h),r=null,s=!1}if(f===null)u===h||s&&e.data===h||(e.data=h);else{if(r=r&&Kt.call(e.childNodes),l=(u=n.props||Bn).dangerouslySetInnerHTML,c=h.dangerouslySetInnerHTML,!s){if(r!=null)for(u={},g=0;g<e.attributes.length;g++)u[e.attributes[g].name]=e.attributes[g].value;(c||l)&&(c&&(l&&c.__html==l.__html||c.__html===e.innerHTML)||(e.innerHTML=c&&c.__html||""))}if(Th(e,h,u,i,s),c)t.__k=[];else if(g=t.props.children,Nc(e,Array.isArray(g)?g:[g],t,n,a,i&&f!=="foreignObject",r,o,r?r[0]:n.__k&&bt(n,0),s),r!=null)for(g=r.length;g--;)r[g]!=null&&Tc(r[g]);s||("value"in h&&(g=h.value)!==void 0&&(g!==e.value||f==="progress"&&!g||f==="option"&&g!==u.value)&&Tn(e,"value",g,u.value,!1),"checked"in h&&(g=h.checked)!==void 0&&g!==e.checked&&Tn(e,"checked",g,u.checked,!1))}return e}function Uc(e,t,n){try{typeof e=="function"?e(t):e.current=t}catch(a){X.__e(a,n)}}function Vc(e,t,n){var a,i;if(X.unmount&&X.unmount(e),(a=e.ref)&&(a.current&&a.current!==e.__e||Uc(a,null,t)),(a=e.__c)!=null){if(a.componentWillUnmount)try{a.componentWillUnmount()}catch(r){X.__e(r,t)}a.base=a.__P=null}if(a=e.__k)for(i=0;i<a.length;i++)a[i]&&Vc(a[i],t,typeof e.type!="function");n||e.__e==null||Tc(e.__e),e.__e=e.__d=void 0}function Nh(e,t,n){return this.constructor(e,n)}function yt(e,t,n){var a,i,r;X.__&&X.__(e,t),i=(a=typeof n=="function")?null:n&&n.__k||t.__k,r=[],mi(t,e=(!a&&n||t).__k=Ee(Ne,null,[e]),i||Bn,Bn,t.ownerSVGElement!==void 0,!a&&n?[n]:i?null:t.firstChild?Kt.call(t.childNodes):null,r,!a&&n?n:i?i.__e:t.firstChild,a),Rc(r,e)}function hi(e,t){yt(e,t,hi)}function Hc(e,t,n){var a,i,r,o=Ge({},e.props);for(r in t)r=="key"?a=t[r]:r=="ref"?i=t[r]:o[r]=t[r];return arguments.length>2&&(o.children=arguments.length>3?Kt.call(arguments,2):n),Zt(e.type,o,a||e.key,i||e.ref,null)}function Yt(e,t){var n={__c:t="__cC"+Bc++,__:e,Consumer:function(a,i){return a.children(i)},Provider:function(a){var i,r;return this.getChildContext||(i=[],(r={})[t]=this,this.getChildContext=function(){return r},this.shouldComponentUpdate=function(o){this.props.value!==o.value&&i.some(di)},this.sub=function(o){i.push(o);var s=o.componentWillUnmount;o.componentWillUnmount=function(){i.splice(i.indexOf(o),1),s&&s.call(o)}}),a.children}};return n.Provider.__=n.Consumer.contextType=n}Kt=Pc.slice,X={__e:function(e,t,n,a){for(var i,r,o;t=t.__;)if((i=t.__c)&&!i.__)try{if((r=i.constructor)&&r.getDerivedStateFromError!=null&&(i.setState(r.getDerivedStateFromError(e)),o=i.__d),i.componentDidCatch!=null&&(i.componentDidCatch(e,a||{}),o=i.__d),o)return i.__E=i}catch(s){e=s}throw e}},Ec=0,Bh=function(e){return e!=null&&e.constructor===void 0},Ie.prototype.setState=function(e,t){var n;n=this.__s!=null&&this.__s!==this.state?this.__s:this.__s=Ge({},this.state),typeof e=="function"&&(e=e(Ge({},n),this.props)),e&&Ge(n,e),e!=null&&this.__v&&(t&&this.__h.push(t),di(this))},Ie.prototype.forceUpdate=function(e){this.__v&&(this.__e=!0,e&&this.__h.push(e),di(this))},Ie.prototype.render=Ne,Gt=[],zc=typeof Promise=="function"?Promise.prototype.then.bind(Promise.resolve()):setTimeout,Pn.__r=0,Bc=0;var kt,ge,gi,qc,_t=0,Jc=[],$c=X.__b,Gc=X.__r,Zc=X.diffed,Kc=X.__c,Yc=X.unmount;function Xt(e,t){X.__h&&X.__h(ge,e,_t||t),_t=0;var n=ge.__H||(ge.__H={__:[],__h:[]});return e>=n.__.length&&n.__.push({}),n.__[e]}function _e(e){return _t=1,Nn(nl,e)}function Nn(e,t,n){var a=Xt(kt++,2);return a.t=e,a.__c||(a.__=[n?n(t):nl(void 0,t),function(i){var r=a.t(a.__[0],i);a.__[0]!==r&&(a.__=[r,a.__[1]],a.__c.setState({}))}],a.__c=ge),a.__}function Je(e,t){var n=Xt(kt++,3);!X.__s&&bi(n.__H,t)&&(n.__=e,n.__H=t,ge.__H.__h.push(n))}function vi(e,t){var n=Xt(kt++,4);!X.__s&&bi(n.__H,t)&&(n.__=e,n.__H=t,ge.__h.push(n))}function Qc(e){return _t=5,Ze(function(){return{current:e}},[])}function el(e,t,n){_t=6,vi(function(){return typeof e=="function"?(e(t()),function(){return e(null)}):e?(e.current=t(),function(){return e.current=null}):void 0},n==null?n:n.concat(e))}function Ze(e,t){var n=Xt(kt++,7);return bi(n.__H,t)&&(n.__=e(),n.__H=t,n.__h=e),n.__}function rt(e,t){return _t=8,Ze(function(){return e},t)}function wt(e){var t=ge.context[e.__c],n=Xt(kt++,9);return n.c=e,t?(n.__==null&&(n.__=!0,t.sub(ge)),t.props.value):e.__}function tl(e,t){X.useDebugValue&&X.useDebugValue(t?t(e):e)}function Dh(){for(var e;e=Jc.shift();)if(e.__P)try{e.__H.__h.forEach(On),e.__H.__h.forEach(xi),e.__H.__h=[]}catch(t){e.__H.__h=[],X.__e(t,e.__v)}}X.__b=function(e){ge=null,$c&&$c(e)},X.__r=function(e){Gc&&Gc(e),kt=0;var t=(ge=e.__c).__H;t&&(gi===ge?(t.__h=[],ge.__h=[],t.__.forEach(function(n){n.__H&&(n.__H=void 0)})):(t.__h.forEach(On),t.__h.forEach(xi),t.__h=[])),gi=ge},X.diffed=function(e){Zc&&Zc(e);var t=e.__c;t&&t.__H&&t.__H.__h.length&&(Jc.push(t)!==1&&qc===X.requestAnimationFrame||((qc=X.requestAnimationFrame)||function(n){var a,i=function(){clearTimeout(r),Xc&&cancelAnimationFrame(a),setTimeout(n)},r=setTimeout(i,100);Xc&&(a=requestAnimationFrame(i))})(Dh)),ge=null,gi=null},X.__c=function(e,t){t.some(function(n){try{n.__h.forEach(On),n.__h=n.__h.filter(function(a){return!a.__||xi(a)})}catch(a){t.some(function(i){i.__h&&(i.__h=[])}),t=[],X.__e(a,n.__v)}}),Kc&&Kc(e,t)},X.unmount=function(e){Yc&&Yc(e);var t,n=e.__c;n&&n.__H&&(n.__H.__.forEach(function(a){try{On(a)}catch(i){t=i}}),t&&X.__e(t,n.__v))};var Xc=typeof requestAnimationFrame=="function";function On(e){var t=ge,n=e.__c;typeof n=="function"&&(e.__c=void 0,n()),ge=t}function xi(e){var t=ge;e.__c=e.__(),ge=t}function bi(e,t){return!e||e.length!==t.length||t.some(function(n,a){return n!==e[a]})}function nl(e,t){return typeof t=="function"?t(e):t}function ul(e,t){for(var n in t)e[n]=t[n];return e}function yi(e,t){for(var n in e)if(n!=="__source"&&!(n in t))return!0;for(var a in t)if(a!=="__source"&&e[a]!==t[a])return!0;return!1}function _i(e){this.props=e}function Wh(e,t){function n(i){var r=this.props.ref,o=r==i.ref;return!o&&r&&(r.call?r(null):r.current=null),t?!t(this.props,i)||!o:yi(this.props,i)}function a(i){return this.shouldComponentUpdate=n,Ee(e,i)}return a.displayName="Memo("+(e.displayName||e.name)+")",a.prototype.isReactComponent=!0,a.__f=!0,a}(_i.prototype=new Ie).isPureReactComponent=!0,_i.prototype.shouldComponentUpdate=function(e,t){return yi(this.props,e)||yi(this.state,t)};var al=X.__b;X.__b=function(e){e.type&&e.type.__f&&e.ref&&(e.props.ref=e.ref,e.ref=null),al&&al(e)};var Rh=typeof Symbol<"u"&&Symbol.for&&Symbol.for("react.forward_ref")||3911;function Uh(e){function t(n){var a=ul({},n);return delete a.ref,e(a,n.ref||null)}return t.$$typeof=Rh,t.render=t,t.prototype.isReactComponent=t.__f=!0,t.displayName="ForwardRef("+(e.displayName||e.name)+")",t}var il=function(e,t){return e==null?null:De(De(e).map(t))},Vh={map:il,forEach:il,count:function(e){return e?De(e).length:0},only:function(e){var t=De(e);if(t.length!==1)throw"Children.only";return t[0]},toArray:De},Hh=X.__e;X.__e=function(e,t,n,a){if(e.then){for(var i,r=t;r=r.__;)if((i=r.__c)&&i.__c)return t.__e==null&&(t.__e=n.__e,t.__k=n.__k),i.__c(e,t)}Hh(e,t,n,a)};var rl=X.unmount;function Dn(){this.__u=0,this.t=null,this.__b=null}function dl(e){var t=e.__.__c;return t&&t.__e&&t.__e(e)}function qh(e){var t,n,a;function i(r){if(t||(t=e()).then(function(o){n=o.default||o},function(o){a=o}),a)throw a;if(!n)throw t;return Ee(n,r)}return i.displayName="Lazy",i.__f=!0,i}function Jt(){this.u=null,this.o=null}X.unmount=function(e){var t=e.__c;t&&t.__R&&t.__R(),t&&e.__h===!0&&(e.type=null),rl&&rl(e)},(Dn.prototype=new Ie).__c=function(e,t){var n=t.__c,a=this;a.t==null&&(a.t=[]),a.t.push(n);var i=dl(a.__v),r=!1,o=function(){r||(r=!0,n.__R=null,i?i(s):s())};n.__R=o;var s=function(){if(!--a.__u){if(a.state.__e){var l=a.state.__e;a.__v.__k[0]=function u(h,f,g){return h&&(h.__v=null,h.__k=h.__k&&h.__k.map(function(x){return u(x,f,g)}),h.__c&&h.__c.__P===f&&(h.__e&&g.insertBefore(h.__e,h.__d),h.__c.__e=!0,h.__c.__P=g)),h}(l,l.__c.__P,l.__c.__O)}var c;for(a.setState({__e:a.__b=null});c=a.t.pop();)c.forceUpdate()}},p=t.__h===!0;a.__u++||p||a.setState({__e:a.__b=a.__v.__k[0]}),e.then(o,o)},Dn.prototype.componentWillUnmount=function(){this.t=[]},Dn.prototype.render=function(e,t){if(this.__b){if(this.__v.__k){var n=document.createElement("div"),a=this.__v.__k[0].__c;this.__v.__k[0]=function r(o,s,p){return o&&(o.__c&&o.__c.__H&&(o.__c.__H.__.forEach(function(l){typeof l.__c=="function"&&l.__c()}),o.__c.__H=null),(o=ul({},o)).__c!=null&&(o.__c.__P===p&&(o.__c.__P=s),o.__c=null),o.__k=o.__k&&o.__k.map(function(l){return r(l,s,p)})),o}(this.__b,n,a.__O=a.__P)}this.__b=null}var i=t.__e&&Ee(Ne,null,e.fallback);return i&&(i.__h=null),[Ee(Ne,null,t.__e?null:e.children),i]};var ol=function(e,t,n){if(++n[1]===n[0]&&e.o.delete(t),e.props.revealOrder&&(e.props.revealOrder[0]!=="t"||!e.o.size))for(n=e.u;n;){for(;n.length>3;)n.pop()();if(n[1]<n[0])break;e.u=n=n[2]}};function $h(e){return this.getChildContext=function(){return e.context},e.children}function Gh(e){var t=this,n=e.i;t.componentWillUnmount=function(){yt(null,t.l),t.l=null,t.i=null},t.i&&t.i!==n&&t.componentWillUnmount(),e.__v?(t.l||(t.i=n,t.l={nodeType:1,parentNode:n,childNodes:[],appendChild:function(a){this.childNodes.push(a),t.i.appendChild(a)},insertBefore:function(a,i){this.childNodes.push(a),t.i.appendChild(a)},removeChild:function(a){this.childNodes.splice(this.childNodes.indexOf(a)>>>1,1),t.i.removeChild(a)}}),yt(Ee($h,{context:t.context},e.__v),t.l)):t.l&&t.componentWillUnmount()}function Zh(e,t){var n=Ee(Gh,{__v:e,i:t});return n.containerInfo=t,n}(Jt.prototype=new Ie).__e=function(e){var t=this,n=dl(t.__v),a=t.o.get(e);return a[0]++,function(i){var r=function(){t.props.revealOrder?(a.push(i),ol(t,e,a)):i()};n?n(r):r()}},Jt.prototype.render=function(e){this.u=null,this.o=new Map;var t=De(e.children);e.revealOrder&&e.revealOrder[0]==="b"&&t.reverse();for(var n=t.length;n--;)this.o.set(t[n],this.u=[1,0,this.u]);return e.children},Jt.prototype.componentDidUpdate=Jt.prototype.componentDidMount=function(){var e=this;this.o.forEach(function(t,n){ol(e,n,t)})};var fl=typeof Symbol<"u"&&Symbol.for&&Symbol.for("react.element")||60103,Kh=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|marker(?!H|W|U)|overline|paint|stop|strikethrough|stroke|text(?!L)|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,Yh=typeof document<"u",Xh=function(e){return(typeof Symbol<"u"&&typeof Symbol()=="symbol"?/fil|che|rad/i:/fil|che|ra/i).test(e)};function Jh(e,t,n){return t.__k==null&&(t.textContent=""),yt(e,t),typeof n=="function"&&n(),e?e.__c:null}function Qh(e,t,n){return hi(e,t),typeof n=="function"&&n(),e?e.__c:null}Ie.prototype.isReactComponent={},["componentWillMount","componentWillReceiveProps","componentWillUpdate"].forEach(function(e){Object.defineProperty(Ie.prototype,e,{configurable:!0,get:function(){return this["UNSAFE_"+e]},set:function(t){Object.defineProperty(this,e,{configurable:!0,writable:!0,value:t})}})});var sl=X.event;function eg(){}function tg(){return this.cancelBubble}function ng(){return this.defaultPrevented}X.event=function(e){return sl&&(e=sl(e)),e.persist=eg,e.isPropagationStopped=tg,e.isDefaultPrevented=ng,e.nativeEvent=e};var ml,cl={configurable:!0,get:function(){return this.class}},ll=X.vnode;X.vnode=function(e){var t=e.type,n=e.props,a=n;if(typeof t=="string"){var i=t.indexOf("-")===-1;for(var r in a={},n){var o=n[r];Yh&&r==="children"&&t==="noscript"||r==="value"&&"defaultValue"in n&&o==null||(r==="defaultValue"&&"value"in n&&n.value==null?r="value":r==="download"&&o===!0?o="":/ondoubleclick/i.test(r)?r="ondblclick":/^onchange(textarea|input)/i.test(r+t)&&!Xh(n.type)?r="oninput":/^onfocus$/i.test(r)?r="onfocusin":/^onblur$/i.test(r)?r="onfocusout":/^on(Ani|Tra|Tou|BeforeInp|Compo)/.test(r)?r=r.toLowerCase():i&&Kh.test(r)?r=r.replace(/[A-Z0-9]/,"-$&").toLowerCase():o===null&&(o=void 0),/^oninput/i.test(r)&&(r=r.toLowerCase(),a[r]&&(r="oninputCapture")),a[r]=o)}t=="select"&&a.multiple&&Array.isArray(a.value)&&(a.value=De(n.children).forEach(function(s){s.props.selected=a.value.indexOf(s.props.value)!=-1})),t=="select"&&a.defaultValue!=null&&(a.value=De(n.children).forEach(function(s){s.props.selected=a.multiple?a.defaultValue.indexOf(s.props.value)!=-1:a.defaultValue==s.props.value})),e.props=a,n.class!=n.className&&(cl.enumerable="className"in n,n.className!=null&&(a.class=n.className),Object.defineProperty(a,"className",cl))}e.$$typeof=fl,ll&&ll(e)};var pl=X.__r;X.__r=function(e){pl&&pl(e),ml=e.__c};var ag={ReactCurrentDispatcher:{current:{readContext:function(e){return ml.__n[e.__c].props.value}}}};function ig(e){return Ee.bind(null,e)}function hl(e){return!!e&&e.$$typeof===fl}function rg(e){return hl(e)?Hc.apply(null,arguments):e}function og(e){return!!e.__k&&(yt(null,e),!0)}function sg(e){return e&&(e.base||e.nodeType===1&&e)||null}var cg=function(e,t){return e(t)},lg=function(e,t){return e(t)};var H={useState:_e,useReducer:Nn,useEffect:Je,useLayoutEffect:vi,useRef:Qc,useImperativeHandle:el,useMemo:Ze,useCallback:rt,useContext:wt,useDebugValue:tl,version:"17.0.2",Children:Vh,render:Jh,hydrate:Qh,unmountComponentAtNode:og,createPortal:Zh,createElement:Ee,createContext:Yt,createFactory:ig,cloneElement:rg,createRef:fi,Fragment:Ne,isValidElement:hl,findDOMNode:sg,Component:Ie,PureComponent:_i,memo:Wh,forwardRef:Uh,flushSync:lg,unstable_batchedUpdates:cg,StrictMode:Ne,Suspense:Dn,SuspenseList:Jt,lazy:qh,__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:ag};var ki={color:void 0,size:void 0,className:void 0,style:void 0,attr:void 0},wi=H.createContext&&H.createContext(ki);var Qe=function(){return Qe=Object.assign||function(e){for(var t,n=1,a=arguments.length;n<a;n++){t=arguments[n];for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i])}return e},Qe.apply(this,arguments)},pg=function(e,t){var n={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(n[a]=e[a]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,a=Object.getOwnPropertySymbols(e);i<a.length;i++)t.indexOf(a[i])<0&&Object.prototype.propertyIsEnumerable.call(e,a[i])&&(n[a[i]]=e[a[i]]);return n};function gl(e){return e&&e.map(function(t,n){return H.createElement(t.tag,Qe({key:n},t.attr),gl(t.child))})}function Ct(e){return function(t){return H.createElement(ug,Qe({attr:Qe({},e.attr)},t),gl(e.child))}}function ug(e){var t=function(n){var a=e.attr,i=e.size,r=e.title,o=pg(e,["attr","size","title"]),s=i||n.size||"1em",p;return n.className&&(p=n.className),e.className&&(p=(p?p+" ":"")+e.className),H.createElement("svg",Qe({stroke:"currentColor",fill:"currentColor",strokeWidth:"0"},n.attr,a,o,{className:p,style:Qe(Qe({color:e.color||n.color},n.style),e.style),height:s,width:s,xmlns:"http://www.w3.org/2000/svg"}),r&&H.createElement("title",null,r),e.children)};return wi!==void 0?H.createElement(wi.Consumer,null,function(n){return t(n)}):t(ki)}function xl(e){return Ct({tag:"svg",attr:{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},child:[{tag:"circle",attr:{cx:"12",cy:"8",r:"7"}},{tag:"polyline",attr:{points:"8.21 13.89 7 23 12 20 17 23 15.79 13.88"}}]})(e)}function vl(e){return Ct({tag:"svg",attr:{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},child:[{tag:"path",attr:{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"}},{tag:"polyline",attr:{points:"7 10 12 15 17 10"}},{tag:"line",attr:{x1:"12",y1:"15",x2:"12",y2:"3"}}]})(e)}function bl(e){return Ct({tag:"svg",attr:{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},child:[{tag:"path",attr:{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"}},{tag:"polyline",attr:{points:"15 3 21 3 21 9"}},{tag:"line",attr:{x1:"10",y1:"14",x2:"21",y2:"3"}}]})(e)}function yl(e){return Ct({tag:"svg",attr:{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},child:[{tag:"path",attr:{d:"M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"}},{tag:"polyline",attr:{points:"9 22 9 12 15 12 15 22"}}]})(e)}function Ci(e){return Ct({tag:"svg",attr:{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},child:[{tag:"rect",attr:{x:"3",y:"3",width:"18",height:"18",rx:"2",ry:"2"}},{tag:"circle",attr:{cx:"8.5",cy:"8.5",r:"1.5"}},{tag:"polyline",attr:{points:"21 15 16 10 5 21"}}]})(e)}var dg=typeof atob=="function";var ji=typeof Buffer=="function",_l=typeof TextDecoder=="function"?new TextDecoder:void 0,p0=typeof TextEncoder=="function"?new TextEncoder:void 0,fg="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",mg=Array.prototype.slice.call(fg),Wn=(e=>{let t={};return e.forEach((n,a)=>t[n]=a),t})(mg),hg=/^(?:[A-Za-z\d+\/]{4})*?(?:[A-Za-z\d+\/]{2}(?:==)?|[A-Za-z\d+\/]{3}=?)?$/,ot=String.fromCharCode.bind(String),kl=typeof Uint8Array.from=="function"?Uint8Array.from.bind(Uint8Array):(e,t=n=>n)=>new Uint8Array(Array.prototype.slice.call(e,0).map(t));var wl=e=>e.replace(/[^A-Za-z0-9\+\/]/g,"");var gg=/[\xC0-\xDF][\x80-\xBF]|[\xE0-\xEF][\x80-\xBF]{2}|[\xF0-\xF7][\x80-\xBF]{3}/g,xg=e=>{switch(e.length){case 4:var t=(7&e.charCodeAt(0))<<18|(63&e.charCodeAt(1))<<12|(63&e.charCodeAt(2))<<6|63&e.charCodeAt(3),n=t-65536;return ot((n>>>10)+55296)+ot((n&1023)+56320);case 3:return ot((15&e.charCodeAt(0))<<12|(63&e.charCodeAt(1))<<6|63&e.charCodeAt(2));default:return ot((31&e.charCodeAt(0))<<6|63&e.charCodeAt(1))}},vg=e=>e.replace(gg,xg),bg=e=>{if(e=e.replace(/\s+/g,""),!hg.test(e))throw new TypeError("malformed base64.");e+="==".slice(2-(e.length&3));let t,n="",a,i;for(let r=0;r<e.length;)t=Wn[e.charAt(r++)]<<18|Wn[e.charAt(r++)]<<12|(a=Wn[e.charAt(r++)])<<6|(i=Wn[e.charAt(r++)]),n+=a===64?ot(t>>16&255):i===64?ot(t>>16&255,t>>8&255):ot(t>>16&255,t>>8&255,t&255);return n},Cl=dg?e=>atob(wl(e)):ji?e=>Buffer.from(e,"base64").toString("binary"):bg,yg=ji?e=>kl(Buffer.from(e,"base64")):e=>kl(Cl(e),t=>t.charCodeAt(0));var _g=ji?e=>Buffer.from(e,"base64").toString("utf8"):_l?e=>_l.decode(yg(e)):e=>vg(Cl(e)),kg=e=>wl(e.replace(/[-_]/g,t=>t=="-"?"+":"/")),jl=e=>_g(kg(e));var Li=require("obsidian"),Ii=(e,t="master",n=!1)=>`https://${n?"raw.staticdn.net":"raw.githubusercontent.com"}/aidenlx/obsidian-icon-shortcodes/${t}/${e}`,Rn=class extends Error{constructor(n){super("GitHub: "+n.message);this.response=n}},Ll=(e="master")=>$(void 0,null,function*(){var a;let t=`https://api.github.com/repos/aidenlx/obsidian-icon-shortcodes/git/trees/${e}?recursive=1&${Date.now()}`,n=(yield(0,Li.requestUrl)({url:t})).json;if(Array.isArray(n.tree)){let i=(a=n.tree.find(r=>r.path==="assets/manifest.json"))==null?void 0:a.url;if(i)return yield wg(i);throw console.error(n),new Error("No manifest.json for icon pack found")}else throw new Rn(n)}),wg=e=>$(void 0,null,function*(){let t=(yield(0,Li.requestUrl)({url:e})).json;if(t.encoding&&t.content){if(t.encoding==="base64")return JSON.parse(jl(t.content));throw console.error(t),new TypeError("Unsupported encoding")}else throw new Rn(t)});var Si={};Xi(Si,{balls:()=>Sl,bars:()=>Al,blank:()=>Il,bubbles:()=>Ml,cubes:()=>Fl,cylon:()=>El,spin:()=>zl,spinningBubbles:()=>Bl,spokes:()=>Pl});var Il=`<svg class="icon-blank" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"></svg>
|
|
|
`;var Sl=`<svg class="icon-loading" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
|
|
|
<path transform="translate(-8 0)" d="M4 12 A4 4 0 0 0 4 20 A4 4 0 0 0 4 12">
|
|
|
<animateTransform attributeName="transform" type="translate" values="-8 0; 2 0; 2 0;" dur="0.8s" repeatCount="indefinite" begin="0" keytimes="0;.25;1" keySplines="0.2 0.2 0.4 0.8;0.2 0.6 0.4 0.8" calcMode="spline" />
|
|
|
</path>
|
|
|
<path transform="translate(2 0)" d="M4 12 A4 4 0 0 0 4 20 A4 4 0 0 0 4 12">
|
|
|
<animateTransform attributeName="transform" type="translate" values="2 0; 12 0; 12 0;" dur="0.8s" repeatCount="indefinite" begin="0" keytimes="0;.35;1" keySplines="0.2 0.2 0.4 0.8;0.2 0.6 0.4 0.8" calcMode="spline" />
|
|
|
</path>
|
|
|
<path transform="translate(12 0)" d="M4 12 A4 4 0 0 0 4 20 A4 4 0 0 0 4 12">
|
|
|
<animateTransform attributeName="transform" type="translate" values="12 0; 22 0; 22 0;" dur="0.8s" repeatCount="indefinite" begin="0" keytimes="0;.45;1" keySplines="0.2 0.2 0.4 0.8;0.2 0.6 0.4 0.8" calcMode="spline" />
|
|
|
</path>
|
|
|
<path transform="translate(24 0)" d="M4 12 A4 4 0 0 0 4 20 A4 4 0 0 0 4 12">
|
|
|
<animateTransform attributeName="transform" type="translate" values="22 0; 32 0; 32 0;" dur="0.8s" repeatCount="indefinite" begin="0" keytimes="0;.55;1" keySplines="0.2 0.2 0.4 0.8;0.2 0.6 0.4 0.8" calcMode="spline" />
|
|
|
</path>
|
|
|
</svg>
|
|
|
`;var Al=`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
|
|
|
<path transform="translate(2)" d="M0 12 V20 H4 V12z">
|
|
|
<animate attributeName="d" values="M0 12 V20 H4 V12z; M0 4 V28 H4 V4z; M0 12 V20 H4 V12z; M0 12 V20 H4 V12z" dur="1.2s" repeatCount="indefinite" begin="0" keytimes="0;.2;.5;1" keySplines="0.2 0.2 0.4 0.8;0.2 0.6 0.4 0.8;0.2 0.8 0.4 0.8" calcMode="spline" />
|
|
|
</path>
|
|
|
<path transform="translate(8)" d="M0 12 V20 H4 V12z">
|
|
|
<animate attributeName="d" values="M0 12 V20 H4 V12z; M0 4 V28 H4 V4z; M0 12 V20 H4 V12z; M0 12 V20 H4 V12z" dur="1.2s" repeatCount="indefinite" begin="0.2" keytimes="0;.2;.5;1" keySplines="0.2 0.2 0.4 0.8;0.2 0.6 0.4 0.8;0.2 0.8 0.4 0.8" calcMode="spline" />
|
|
|
</path>
|
|
|
<path transform="translate(14)" d="M0 12 V20 H4 V12z">
|
|
|
<animate attributeName="d" values="M0 12 V20 H4 V12z; M0 4 V28 H4 V4z; M0 12 V20 H4 V12z; M0 12 V20 H4 V12z" dur="1.2s" repeatCount="indefinite" begin="0.4" keytimes="0;.2;.5;1" keySplines="0.2 0.2 0.4 0.8;0.2 0.6 0.4 0.8;0.2 0.8 0.4 0.8" calcMode="spline" />
|
|
|
</path>
|
|
|
<path transform="translate(20)" d="M0 12 V20 H4 V12z">
|
|
|
<animate attributeName="d" values="M0 12 V20 H4 V12z; M0 4 V28 H4 V4z; M0 12 V20 H4 V12z; M0 12 V20 H4 V12z" dur="1.2s" repeatCount="indefinite" begin="0.6" keytimes="0;.2;.5;1" keySplines="0.2 0.2 0.4 0.8;0.2 0.6 0.4 0.8;0.2 0.8 0.4 0.8" calcMode="spline" />
|
|
|
</path>
|
|
|
<path transform="translate(26)" d="M0 12 V20 H4 V12z">
|
|
|
<animate attributeName="d" values="M0 12 V20 H4 V12z; M0 4 V28 H4 V4z; M0 12 V20 H4 V12z; M0 12 V20 H4 V12z" dur="1.2s" repeatCount="indefinite" begin="0.8" keytimes="0;.2;.5;1" keySplines="0.2 0.2 0.4 0.8;0.2 0.6 0.4 0.8;0.2 0.8 0.4 0.8" calcMode="spline" />
|
|
|
</path>
|
|
|
</svg>
|
|
|
`;var Ml=`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
|
|
|
<circle transform="translate(8 0)" cx="0" cy="16" r="0">
|
|
|
<animate attributeName="r" values="0; 4; 0; 0" dur="1.2s" repeatCount="indefinite" begin="0"
|
|
|
keytimes="0;0.2;0.7;1" keySplines="0.2 0.2 0.4 0.8;0.2 0.6 0.4 0.8;0.2 0.6 0.4 0.8" calcMode="spline" />
|
|
|
</circle>
|
|
|
<circle transform="translate(16 0)" cx="0" cy="16" r="0">
|
|
|
<animate attributeName="r" values="0; 4; 0; 0" dur="1.2s" repeatCount="indefinite" begin="0.3"
|
|
|
keytimes="0;0.2;0.7;1" keySplines="0.2 0.2 0.4 0.8;0.2 0.6 0.4 0.8;0.2 0.6 0.4 0.8" calcMode="spline" />
|
|
|
</circle>
|
|
|
<circle transform="translate(24 0)" cx="0" cy="16" r="0">
|
|
|
<animate attributeName="r" values="0; 4; 0; 0" dur="1.2s" repeatCount="indefinite" begin="0.6"
|
|
|
keytimes="0;0.2;0.7;1" keySplines="0.2 0.2 0.4 0.8;0.2 0.6 0.4 0.8;0.2 0.6 0.4 0.8" calcMode="spline" />
|
|
|
</circle>
|
|
|
</svg>
|
|
|
`;var Fl=`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
|
|
|
<path transform="translate(-8 0)" d="M0 12 V20 H8 V12z">
|
|
|
<animateTransform attributeName="transform" type="translate" values="-8 0; 2 0; 2 0;" dur="0.8s" repeatCount="indefinite" begin="0" keytimes="0;.25;1" keySplines="0.2 0.2 0.4 0.8;0.2 0.6 0.4 0.8" calcMode="spline" />
|
|
|
</path>
|
|
|
<path transform="translate(2 0)" d="M0 12 V20 H8 V12z">
|
|
|
<animateTransform attributeName="transform" type="translate" values="2 0; 12 0; 12 0;" dur="0.8s" repeatCount="indefinite" begin="0" keytimes="0;.35;1" keySplines="0.2 0.2 0.4 0.8;0.2 0.6 0.4 0.8" calcMode="spline" />
|
|
|
</path>
|
|
|
<path transform="translate(12 0)" d="M0 12 V20 H8 V12z">
|
|
|
<animateTransform attributeName="transform" type="translate" values="12 0; 22 0; 22 0;" dur="0.8s" repeatCount="indefinite" begin="0" keytimes="0;.45;1" keySplines="0.2 0.2 0.4 0.8;0.2 0.6 0.4 0.8" calcMode="spline" />
|
|
|
</path>
|
|
|
<path transform="translate(24 0)" d="M0 12 V20 H8 V12z">
|
|
|
<animateTransform attributeName="transform" type="translate" values="22 0; 32 0; 32 0;" dur="0.8s" repeatCount="indefinite" begin="0" keytimes="0;.55;1" keySplines="0.2 0.2 0.4 0.8;0.2 0.6 0.4 0.8" calcMode="spline" />
|
|
|
</path>
|
|
|
</svg>
|
|
|
`;var El=`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
|
|
|
<path transform="translate(0 0)" d="M0 12 V20 H4 V12z">
|
|
|
<animateTransform attributeName="transform" type="translate" values="0 0; 28 0; 0 0; 0 0" dur="1.5s" begin="0" repeatCount="indefinite" keytimes="0;0.3;0.6;1" keySplines="0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8" calcMode="spline" />
|
|
|
</path>
|
|
|
<path opacity="0.5" transform="translate(0 0)" d="M0 12 V20 H4 V12z">
|
|
|
<animateTransform attributeName="transform" type="translate" values="0 0; 28 0; 0 0; 0 0" dur="1.5s" begin="0.1s" repeatCount="indefinite" keytimes="0;0.3;0.6;1" keySplines="0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8" calcMode="spline" />
|
|
|
</path>
|
|
|
<path opacity="0.25" transform="translate(0 0)" d="M0 12 V20 H4 V12z">
|
|
|
<animateTransform attributeName="transform" type="translate" values="0 0; 28 0; 0 0; 0 0" dur="1.5s" begin="0.2s" repeatCount="indefinite" keytimes="0;0.3;0.6;1" keySplines="0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8" calcMode="spline" />
|
|
|
</path>
|
|
|
</svg>
|
|
|
`;var zl=`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
|
|
|
<path opacity=".25" d="M16 0 A16 16 0 0 0 16 32 A16 16 0 0 0 16 0 M16 4 A12 12 0 0 1 16 28 A12 12 0 0 1 16 4"/>
|
|
|
<path d="M16 0 A16 16 0 0 1 32 16 L28 16 A12 12 0 0 0 16 4z">
|
|
|
<animateTransform attributeName="transform" type="rotate" from="0 16 16" to="360 16 16" dur="0.8s" repeatCount="indefinite" />
|
|
|
</path>
|
|
|
</svg>
|
|
|
`;var Bl=`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
|
|
|
<circle cx="16" cy="3" r="0">
|
|
|
<animate attributeName="r" values="0;3;0;0" dur="1s" repeatCount="indefinite" begin="0" keySplines="0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8" calcMode="spline" />
|
|
|
</circle>
|
|
|
<circle transform="rotate(45 16 16)" cx="16" cy="3" r="0">
|
|
|
<animate attributeName="r" values="0;3;0;0" dur="1s" repeatCount="indefinite" begin="0.125s" keySplines="0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8" calcMode="spline" />
|
|
|
</circle>
|
|
|
<circle transform="rotate(90 16 16)" cx="16" cy="3" r="0">
|
|
|
<animate attributeName="r" values="0;3;0;0" dur="1s" repeatCount="indefinite" begin="0.25s" keySplines="0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8" calcMode="spline" />
|
|
|
</circle>
|
|
|
<circle transform="rotate(135 16 16)" cx="16" cy="3" r="0">
|
|
|
<animate attributeName="r" values="0;3;0;0" dur="1s" repeatCount="indefinite" begin="0.375s" keySplines="0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8" calcMode="spline" />
|
|
|
</circle>
|
|
|
<circle transform="rotate(180 16 16)" cx="16" cy="3" r="0">
|
|
|
<animate attributeName="r" values="0;3;0;0" dur="1s" repeatCount="indefinite" begin="0.5s" keySplines="0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8" calcMode="spline" />
|
|
|
</circle>
|
|
|
<circle transform="rotate(225 16 16)" cx="16" cy="3" r="0">
|
|
|
<animate attributeName="r" values="0;3;0;0" dur="1s" repeatCount="indefinite" begin="0.625s" keySplines="0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8" calcMode="spline" />
|
|
|
</circle>
|
|
|
<circle transform="rotate(270 16 16)" cx="16" cy="3" r="0">
|
|
|
<animate attributeName="r" values="0;3;0;0" dur="1s" repeatCount="indefinite" begin="0.75s" keySplines="0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8" calcMode="spline" />
|
|
|
</circle>
|
|
|
<circle transform="rotate(315 16 16)" cx="16" cy="3" r="0">
|
|
|
<animate attributeName="r" values="0;3;0;0" dur="1s" repeatCount="indefinite" begin="0.875s" keySplines="0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8" calcMode="spline" />
|
|
|
</circle>
|
|
|
<circle transform="rotate(180 16 16)" cx="16" cy="3" r="0">
|
|
|
<animate attributeName="r" values="0;3;0;0" dur="1s" repeatCount="indefinite" begin="0.5s" keySplines="0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8" calcMode="spline" />
|
|
|
</circle>
|
|
|
</svg>
|
|
|
`;var Pl=`<svg id="loading" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
|
|
|
<path opacity=".1" d="M14 0 H18 V8 H14 z" transform="rotate(0 16 16)">
|
|
|
<animate attributeName="opacity" from="1" to=".1" dur="1s" repeatCount="indefinite" begin="0"/>
|
|
|
</path>
|
|
|
<path opacity=".1" d="M14 0 H18 V8 H14 z" transform="rotate(45 16 16)">
|
|
|
<animate attributeName="opacity" from="1" to=".1" dur="1s" repeatCount="indefinite" begin="0.125s"/>
|
|
|
</path>
|
|
|
<path opacity=".1" d="M14 0 H18 V8 H14 z" transform="rotate(90 16 16)">
|
|
|
<animate attributeName="opacity" from="1" to=".1" dur="1s" repeatCount="indefinite" begin="0.25s"/>
|
|
|
</path>
|
|
|
<path opacity=".1" d="M14 0 H18 V8 H14 z" transform="rotate(135 16 16)">
|
|
|
<animate attributeName="opacity" from="1" to=".1" dur="1s" repeatCount="indefinite" begin="0.375s"/>
|
|
|
</path>
|
|
|
<path opacity=".1" d="M14 0 H18 V8 H14 z" transform="rotate(180 16 16)">
|
|
|
<animate attributeName="opacity" from="1" to=".1" dur="1s" repeatCount="indefinite" begin="0.5s"/>
|
|
|
</path>
|
|
|
<path opacity=".1" d="M14 0 H18 V8 H14 z" transform="rotate(225 16 16)">
|
|
|
<animate attributeName="opacity" from="1" to=".1" dur="1s" repeatCount="indefinite" begin="0.675s"/>
|
|
|
</path>
|
|
|
<path opacity=".1" d="M14 0 H18 V8 H14 z" transform="rotate(270 16 16)">
|
|
|
<animate attributeName="opacity" from="1" to=".1" dur="1s" repeatCount="indefinite" begin="0.75s"/>
|
|
|
</path>
|
|
|
<path opacity=".1" d="M14 0 H18 V8 H14 z" transform="rotate(315 16 16)">
|
|
|
<animate attributeName="opacity" from="1" to=".1" dur="1s" repeatCount="indefinite" begin="0.875s"/>
|
|
|
</path>
|
|
|
</svg>
|
|
|
`;var zg=o=>{var s=o,{color:e="var(--interactive-accent)",delay:t=0,type:n="balls",height:a=64,width:i=64}=s,r=cn(s,["color","delay","type","height","width"]);let[p,l]=_e(t>0);return Je(()=>{let u=-1;return p&&(u=window.setTimeout(()=>l(!1),t)),()=>clearTimeout(u)},[]),H.createElement("div",Me({style:{fill:e,height:a,width:i},dangerouslySetInnerHTML:{__html:Si[p?"blank":n]}},r))},Ai=zg;var Qt=class extends Vn.Modal{constructor(n){super(n.app);this.plugin=n;this.modalEl.addClass("mod-browser-packs")}onOpen(){H.render(H.createElement(Pg,{getIconPack:this.getIconPack.bind(this)}),this.contentEl)}onClose(){H.unmountComponentAtNode(this.contentEl)}getIconPack(n,a){return $(this,null,function*(){let i=(r=!1)=>$(this,null,function*(){let o=Ii(n,a,r),s=(yield(0,Vn.requestUrl)({url:o})).arrayBuffer;yield this.plugin.packManager.importIcons({name:o.split("/").pop(),data:s},!1)});try{yield i()}catch(r){console.error("switch to alternative link",r),yield i(!0)}})}},Bg=(e="master")=>$(void 0,null,function*(){let t=yield Ll(e),n=[];for(let a of t){let i=n.last();(i==null?void 0:i.series)===a.series?(i.styles.push(a),i.count+=a.count):n.push({homepage:a.homepage,description:a.description,series:a.series,license:a.license,styles:[a],count:a.count})}return n}),Pg=({getIconPack:e})=>{var a;let[t,n]=_e(null);return Je(()=>{Bg().then(n).catch(n)},[]),t===null?H.createElement("div",{className:"loading"},H.createElement(Ai,{type:"spin",className:"loading-indicator"}),H.createElement("div",null,"Loading Icon Pack List...")):Array.isArray(t)?H.createElement("div",{className:"icon-pack-list"},t.map(i=>H.createElement(Tg,{key:i.homepage,manifest:i,onDownload:r=>e(r)}))):(console.error(t),H.createElement("div",{className:"error"},"Failed to Load Icon Pack List:",H.createElement("div",{className:"mod-warning"},(a=t.message)!=null?a:t.toString())))},Tl="pack-manifest",Tg=({manifest:{series:e,styles:t,description:n,count:a,homepage:i,license:r},onDownload:o})=>{let s=rt(p=>`${Tl}-${p}`,[]);return H.createElement("div",{className:Tl},H.createElement("div",{className:s("title")},e),H.createElement("div",{className:s("details")},H.createElement("span",{className:s("license"),"aria-label":"License: "+r},H.createElement(xl,{size:"0.9em"})),H.createElement("span",{className:s("count"),"aria-label":`${a} icons in total`},H.createElement(Ci,{size:"0.9em"}),H.createElement("span",{className:"icon-text"},a))),H.createElement("div",{className:s("desc")},H.createElement("div",{className:s("homepage"),"aria-label":i,onClick:()=>window.open(i)},H.createElement(yl,null),H.createElement("a",{className:"icon-text"},"Home Page")),n),H.createElement("div",{className:"styles-list"},t.map(p=>H.createElement(Og,{key:p.bundleName,styleInfo:p,onDownload:o}))))},Dl="style-info",Un=(...e)=>(0,Nl.default)(Dl,...e),Og=({styleInfo:{count:e,packId:t,path:n,style:a},onDownload:i})=>{var p;let r=rt(l=>`${Dl}-${l}`,[]),[o,s]=_e({state:"display"});switch(o.state){case"display":return H.createElement("div",{className:Un()},H.createElement("div",{className:r("title")},a||"regular",H.createElement("span",{className:r("pack-id"),"aria-label":"Pack id used as shortcode prefix"},t)),H.createElement("div",{className:r("details")},H.createElement("div",{className:r("count"),"aria-label":`${e} icons in total`},H.createElement(Ci,{size:"0.9em"}),H.createElement("span",{className:"icon-text"},e))),H.createElement("div",{className:r("button-container")},H.createElement("button",{className:r("download"),onClick:()=>$(void 0,null,function*(){s({state:"downloading"});try{yield i(n),s({state:"done"}),console.log("done")}catch(l){console.error(l),s({state:"error",error:l})}}),"aria-label":"Download"},H.createElement(vl,null)),H.createElement("button",{"aria-label":"Download via Browser",onClick:()=>window.open(Ii(n))},H.createElement(bl,null))));case"downloading":return H.createElement("div",{className:Un("downloading")},H.createElement(Ai,{type:"bubbles",className:"loading-indicator"}),H.createElement("div",null,"Downloading..."));case"done":return H.createElement("div",{className:Un("done")},"Downloaded");case"error":return console.error(o.error),H.createElement("div",{className:Un("error")},"Failed to Download:",H.createElement("div",{className:"mod-warning"},o.error instanceof Error?o.error.message:(p=o.error)==null?void 0:p.toString()));default:(0,Ol.default)(o)}};function Se(e){for(var t=arguments.length,n=Array(t>1?t-1:0),a=1;a<t;a++)n[a-1]=arguments[a];if(!1)var i,r;throw Error("[Immer] minified error nr: "+e+(n.length?" "+n.map(function(o){return"'"+o+"'"}).join(","):"")+". Find the full error at: https://bit.ly/3cXEKWf")}function jt(e){return!!e&&!!e[se]}function Ye(e){return!!e&&(function(t){if(!t||typeof t!="object")return!1;var n=Object.getPrototypeOf(t);if(n===null)return!0;var a=Object.hasOwnProperty.call(n,"constructor")&&n.constructor;return a===Object||typeof a=="function"&&Function.toString.call(a)===$g}(e)||Array.isArray(e)||!!e[$l]||!!e.constructor[$l]||Ni(e)||Di(e))}function Lt(e,t,n){n===void 0&&(n=!1),It(e)===0?(n?Object.keys:Vi)(e).forEach(function(a){n&&typeof a=="symbol"||t(a,e[a],e)}):e.forEach(function(a,i){return t(i,a,e)})}function It(e){var t=e[se];return t?t.i>3?t.i-4:t.i:Array.isArray(e)?1:Ni(e)?2:Di(e)?3:0}function Bi(e,t){return It(e)===2?e.has(t):Object.prototype.hasOwnProperty.call(e,t)}function Ng(e,t){return It(e)===2?e.get(t):e[t]}function Gl(e,t,n){var a=It(e);a===2?e.set(t,n):a===3?(e.delete(t),e.add(n)):e[t]=n}function Dg(e,t){return e===t?e!==0||1/e==1/t:e!=e&&t!=t}function Ni(e){return Hg&&e instanceof Map}function Di(e){return qg&&e instanceof Set}function xe(e){return e.o||e.t}function Wi(e){if(Array.isArray(e))return Array.prototype.slice.call(e);var t=Gg(e);delete t[se];for(var n=Vi(t),a=0;a<n.length;a++){var i=n[a],r=t[i];r.writable===!1&&(r.writable=!0,r.configurable=!0),(r.get||r.set)&&(t[i]={configurable:!0,writable:!0,enumerable:r.enumerable,value:e[i]})}return Object.create(Object.getPrototypeOf(e),t)}function St(e,t){return t===void 0&&(t=!1),Ri(e)||jt(e)||!Ye(e)||(It(e)>1&&(e.set=e.add=e.clear=e.delete=Wg),Object.freeze(e),t&&Lt(e,function(n,a){return St(a,!0)},!0)),e}function Wg(){Se(2)}function Ri(e){return e==null||typeof e!="object"||Object.isFrozen(e)}function We(e){var t=Ti[e];return t||Se(18,e),t}function Rg(e,t){Ti[e]||(Ti[e]=t)}function qn(){return nn}function Mi(e,t){t&&(We("Patches"),e.u=[],e.s=[],e.v=t)}function $n(e){Pi(e),e.p.forEach(Ug),e.p=null}function Pi(e){e===nn&&(nn=e.l)}function Wl(e){return nn={p:[],l:nn,h:e,m:!0,_:0}}function Ug(e){var t=e[se];t.i===0||t.i===1?t.j():t.O=!0}function Fi(e,t){t._=t.p.length;var n=t.p[0],a=e!==void 0&&e!==n;return t.h.g||We("ES5").S(t,e,a),a?(n[se].P&&($n(t),Se(4)),Ye(e)&&(e=Gn(t,e),t.l||Zn(t,e)),t.u&&We("Patches").M(n[se].t,e,t.u,t.s)):e=Gn(t,n,[]),$n(t),t.u&&t.v(t.u,t.s),e!==Kl?e:void 0}function Gn(e,t,n){if(Ri(t))return t;var a=t[se];if(!a)return Lt(t,function(r,o){return Rl(e,a,t,r,o,n)},!0),t;if(a.A!==e)return t;if(!a.P)return Zn(e,a.t,!0),a.t;if(!a.I){a.I=!0,a.A._--;var i=a.i===4||a.i===5?a.o=Wi(a.k):a.o;Lt(a.i===3?new Set(i):i,function(r,o){return Rl(e,a,i,r,o,n)}),Zn(e,i,!1),n&&e.u&&We("Patches").R(a,n,e.u,e.s)}return a.o}function Rl(e,t,n,a,i,r){if(jt(i)){var o=Gn(e,i,r&&t&&t.i!==3&&!Bi(t.D,a)?r.concat(a):void 0);if(Gl(n,a,o),!jt(o))return;e.m=!1}if(Ye(i)&&!Ri(i)){if(!e.h.F&&e._<1)return;Gn(e,i),t&&t.A.l||Zn(e,i)}}function Zn(e,t,n){n===void 0&&(n=!1),e.h.F&&e.m&&St(t,n)}function Ei(e,t){var n=e[se];return(n?xe(n):e)[t]}function Ul(e,t){if(t in e)for(var n=Object.getPrototypeOf(e);n;){var a=Object.getOwnPropertyDescriptor(n,t);if(a)return a;n=Object.getPrototypeOf(n)}}function Ke(e){e.P||(e.P=!0,e.l&&Ke(e.l))}function zi(e){e.o||(e.o=Wi(e.t))}function tn(e,t,n){var a=Ni(t)?We("MapSet").N(t,n):Di(t)?We("MapSet").T(t,n):e.g?function(i,r){var o=Array.isArray(i),s={i:o?1:0,A:r?r.A:qn(),P:!1,I:!1,D:{},l:r,t:i,k:null,o:null,j:null,C:!1},p=s,l=Oi;o&&(p=[s],l=en);var c=Proxy.revocable(p,l),u=c.revoke,h=c.proxy;return s.k=h,s.j=u,h}(t,n):We("ES5").J(t,n);return(n?n.A:qn()).p.push(a),a}function Vg(e){return jt(e)||Se(22,e),function t(n){if(!Ye(n))return n;var a,i=n[se],r=It(n);if(i){if(!i.P&&(i.i<4||!We("ES5").K(i)))return i.t;i.I=!0,a=Vl(n,r),i.I=!1}else a=Vl(n,r);return Lt(a,function(o,s){i&&Ng(i.t,o)===s||Gl(a,o,t(s))}),r===3?new Set(a):a}(e)}function Vl(e,t){switch(t){case 2:return new Map(e);case 3:return Array.from(e)}return Wi(e)}function Zl(){function e(s,p){function l(){this.constructor=s}i(s,p),s.prototype=(l.prototype=p.prototype,new l)}function t(s){s.o||(s.D=new Map,s.o=new Map(s.t))}function n(s){s.o||(s.o=new Set,s.t.forEach(function(p){if(Ye(p)){var l=tn(s.A.h,p,s);s.p.set(p,l),s.o.add(l)}else s.o.add(p)}))}function a(s){s.O&&Se(3,JSON.stringify(xe(s)))}var i=function(s,p){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(l,c){l.__proto__=c}||function(l,c){for(var u in c)c.hasOwnProperty(u)&&(l[u]=c[u])})(s,p)},r=function(){function s(l,c){return this[se]={i:2,l:c,A:c?c.A:qn(),P:!1,I:!1,o:void 0,D:void 0,t:l,k:this,C:!1,O:!1},this}e(s,Map);var p=s.prototype;return Object.defineProperty(p,"size",{get:function(){return xe(this[se]).size}}),p.has=function(l){return xe(this[se]).has(l)},p.set=function(l,c){var u=this[se];return a(u),xe(u).has(l)&&xe(u).get(l)===c||(t(u),Ke(u),u.D.set(l,!0),u.o.set(l,c),u.D.set(l,!0)),this},p.delete=function(l){if(!this.has(l))return!1;var c=this[se];return a(c),t(c),Ke(c),c.t.has(l)?c.D.set(l,!1):c.D.delete(l),c.o.delete(l),!0},p.clear=function(){var l=this[se];a(l),xe(l).size&&(t(l),Ke(l),l.D=new Map,Lt(l.t,function(c){l.D.set(c,!1)}),l.o.clear())},p.forEach=function(l,c){var u=this;xe(this[se]).forEach(function(h,f){l.call(c,u.get(f),f,u)})},p.get=function(l){var c=this[se];a(c);var u=xe(c).get(l);if(c.I||!Ye(u)||u!==c.t.get(l))return u;var h=tn(c.A.h,u,c);return t(c),c.o.set(l,h),h},p.keys=function(){return xe(this[se]).keys()},p.values=function(){var l,c=this,u=this.keys();return(l={})[Hn]=function(){return c.values()},l.next=function(){var h=u.next();return h.done?h:{done:!1,value:c.get(h.value)}},l},p.entries=function(){var l,c=this,u=this.keys();return(l={})[Hn]=function(){return c.entries()},l.next=function(){var h=u.next();if(h.done)return h;var f=c.get(h.value);return{done:!1,value:[h.value,f]}},l},p[Hn]=function(){return this.entries()},s}(),o=function(){function s(l,c){return this[se]={i:3,l:c,A:c?c.A:qn(),P:!1,I:!1,o:void 0,t:l,k:this,p:new Map,O:!1,C:!1},this}e(s,Set);var p=s.prototype;return Object.defineProperty(p,"size",{get:function(){return xe(this[se]).size}}),p.has=function(l){var c=this[se];return a(c),c.o?!!c.o.has(l)||!(!c.p.has(l)||!c.o.has(c.p.get(l))):c.t.has(l)},p.add=function(l){var c=this[se];return a(c),this.has(l)||(n(c),Ke(c),c.o.add(l)),this},p.delete=function(l){if(!this.has(l))return!1;var c=this[se];return a(c),n(c),Ke(c),c.o.delete(l)||!!c.p.has(l)&&c.o.delete(c.p.get(l))},p.clear=function(){var l=this[se];a(l),xe(l).size&&(n(l),Ke(l),l.o.clear())},p.values=function(){var l=this[se];return a(l),n(l),l.o.values()},p.entries=function(){var l=this[se];return a(l),n(l),l.o.entries()},p.keys=function(){return this.values()},p[Hn]=function(){return this.values()},p.forEach=function(l,c){for(var u=this.values(),h=u.next();!h.done;)l.call(c,h.value,h.value,this),h=u.next()},s}();Rg("MapSet",{N:function(s,p){return new r(s,p)},T:function(s,p){return new o(s,p)}})}var Hl,nn,Ui=typeof Symbol<"u"&&typeof Symbol("x")=="symbol",Hg=typeof Map<"u",qg=typeof Set<"u",ql=typeof Proxy<"u"&&Proxy.revocable!==void 0&&typeof Reflect<"u",Kl=Ui?Symbol.for("immer-nothing"):((Hl={})["immer-nothing"]=!0,Hl),$l=Ui?Symbol.for("immer-draftable"):"__$immer_draftable",se=Ui?Symbol.for("immer-state"):"__$immer_state",Hn=typeof Symbol<"u"&&Symbol.iterator||"@@iterator";var $g=""+Object.prototype.constructor,Vi=typeof Reflect<"u"&&Reflect.ownKeys?Reflect.ownKeys:Object.getOwnPropertySymbols!==void 0?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:Object.getOwnPropertyNames,Gg=Object.getOwnPropertyDescriptors||function(e){var t={};return Vi(e).forEach(function(n){t[n]=Object.getOwnPropertyDescriptor(e,n)}),t},Ti={},Oi={get:function(e,t){if(t===se)return e;var n=xe(e);if(!Bi(n,t))return function(i,r,o){var s,p=Ul(r,o);return p?"value"in p?p.value:(s=p.get)===null||s===void 0?void 0:s.call(i.k):void 0}(e,n,t);var a=n[t];return e.I||!Ye(a)?a:a===Ei(e.t,t)?(zi(e),e.o[t]=tn(e.A.h,a,e)):a},has:function(e,t){return t in xe(e)},ownKeys:function(e){return Reflect.ownKeys(xe(e))},set:function(e,t,n){var a=Ul(xe(e),t);if(a?.set)return a.set.call(e.k,n),!0;if(!e.P){var i=Ei(xe(e),t),r=i?.[se];if(r&&r.t===n)return e.o[t]=n,e.D[t]=!1,!0;if(Dg(n,i)&&(n!==void 0||Bi(e.t,t)))return!0;zi(e),Ke(e)}return e.o[t]===n&&typeof n!="number"&&(n!==void 0||t in e.o)||(e.o[t]=n,e.D[t]=!0,!0)},deleteProperty:function(e,t){return Ei(e.t,t)!==void 0||t in e.t?(e.D[t]=!1,zi(e),Ke(e)):delete e.D[t],e.o&&delete e.o[t],!0},getOwnPropertyDescriptor:function(e,t){var n=xe(e),a=Reflect.getOwnPropertyDescriptor(n,t);return a&&{writable:!0,configurable:e.i!==1||t!=="length",enumerable:a.enumerable,value:n[t]}},defineProperty:function(){Se(11)},getPrototypeOf:function(e){return Object.getPrototypeOf(e.t)},setPrototypeOf:function(){Se(12)}},en={};Lt(Oi,function(e,t){en[e]=function(){return arguments[0]=arguments[0][0],t.apply(this,arguments)}}),en.deleteProperty=function(e,t){return en.set.call(this,e,t,void 0)},en.set=function(e,t,n){return Oi.set.call(this,e[0],t,n,e[0])};var Zg=function(){function e(n){var a=this;this.g=ql,this.F=!0,this.produce=function(i,r,o){if(typeof i=="function"&&typeof r!="function"){var s=r;r=i;var p=a;return function(x){var b=this;x===void 0&&(x=s);for(var _=arguments.length,C=Array(_>1?_-1:0),w=1;w<_;w++)C[w-1]=arguments[w];return p.produce(x,function(z){var F;return(F=r).call.apply(F,[b,z].concat(C))})}}var l;if(typeof r!="function"&&Se(6),o!==void 0&&typeof o!="function"&&Se(7),Ye(i)){var c=Wl(a),u=tn(a,i,void 0),h=!0;try{l=r(u),h=!1}finally{h?$n(c):Pi(c)}return typeof Promise<"u"&&l instanceof Promise?l.then(function(x){return Mi(c,o),Fi(x,c)},function(x){throw $n(c),x}):(Mi(c,o),Fi(l,c))}if(!i||typeof i!="object"){if((l=r(i))===void 0&&(l=i),l===Kl&&(l=void 0),a.F&&St(l,!0),o){var f=[],g=[];We("Patches").M(i,l,f,g),o(f,g)}return l}Se(21,i)},this.produceWithPatches=function(i,r){if(typeof i=="function")return function(l){for(var c=arguments.length,u=Array(c>1?c-1:0),h=1;h<c;h++)u[h-1]=arguments[h];return a.produceWithPatches(l,function(f){return i.apply(void 0,[f].concat(u))})};var o,s,p=a.produce(i,r,function(l,c){o=l,s=c});return typeof Promise<"u"&&p instanceof Promise?p.then(function(l){return[l,o,s]}):[p,o,s]},typeof n?.useProxies=="boolean"&&this.setUseProxies(n.useProxies),typeof n?.autoFreeze=="boolean"&&this.setAutoFreeze(n.autoFreeze)}var t=e.prototype;return t.createDraft=function(n){Ye(n)||Se(8),jt(n)&&(n=Vg(n));var a=Wl(this),i=tn(this,n,void 0);return i[se].C=!0,Pi(a),i},t.finishDraft=function(n,a){var i=n&&n[se],r=i.A;return Mi(r,a),Fi(void 0,r)},t.setAutoFreeze=function(n){this.F=n},t.setUseProxies=function(n){n&&!ql&&Se(20),this.g=n},t.applyPatches=function(n,a){var i;for(i=a.length-1;i>=0;i--){var r=a[i];if(r.path.length===0&&r.op==="replace"){n=r.value;break}}i>-1&&(a=a.slice(i+1));var o=We("Patches").$;return jt(n)?o(n,a):this.produce(n,function(s){return o(s,a)})},e}(),we=new Zg,Kg=we.produce,H0=we.produceWithPatches.bind(we),q0=we.setAutoFreeze.bind(we),$0=we.setUseProxies.bind(we),G0=we.applyPatches.bind(we),Z0=we.createDraft.bind(we),K0=we.finishDraft.bind(we),Yl=Kg;var Yn=require("obsidian");function Xl(e){var t=_e(function(){return St(typeof e=="function"?e():e,!0)}),n=t[1];return[t[0],rt(function(a){n(typeof a=="function"?Yl(a):St(a))},[])]}var qi=be(fn(),1),At=require("obsidian");var Yg=({iconInfo:e,updated:t})=>{let{packs:n,icons:a}=wt(Kn),{trash:i,pencil:r,star:o,checkmark:s}=a,[p,l]=_e(e.name.replace(/[-_]/g," ")),[c,u]=_e(!1),h=`${e.pack}_${La(p)}`,f=h===e.id||!n.hasIcon(h),g=Ze(()=>n.getIcon(e.id,!0),[e.id,t]),x=b=>$(void 0,null,function*(){let _=yield n.rename(e.id,b);_?(new At.Notice(`The icon is renamed to ${_}`),u(!1)):new At.Notice(`Failed to rename to ${p}, check log for details`)});return H.createElement("div",{className:"item"},H.createElement("div",{className:"icon"},H.createElement("img",{className:"isc-icon",src:g!=null?g:void 0})),H.createElement("div",{className:"name"},c?H.createElement(Xg,{className:(0,qi.default)({invalid:!f}),onChange:b=>l(b.target.value),value:p}):H.createElement("span",null,p)),H.createElement("div",{className:"buttons"},H.createElement(Hi,{btnType:"cta",icon:o,onClick:()=>$(void 0,null,function*(){let b;(b=yield n.star(e.id))&&new At.Notice(`${e.id} is now ${b}`)})}),H.createElement(Hi,{btnType:"cta",icon:c?s:r,onClick:()=>$(void 0,null,function*(){c?f?h!==e.id?yield x(h):u(!1):new At.Notice(`Unable to rename to ${p}, given id invalid`):u(!0)})}),H.createElement(Hi,{btnType:"warning",icon:i,onClick:()=>$(void 0,null,function*(){(yield n.delete(e.id))&&new At.Notice(`${e.id} is removed from the pack`)})})))},Jl=Yg,Hi=e=>{let i=e,{btnType:t,icon:n}=i,a=cn(i,["btnType","icon"]);return H.createElement("button",et(Me({},a),{className:(0,qi.default)({["mod-"+t]:!!t}),dangerouslySetInnerHTML:{__html:n}}))},Xg=e=>H.createElement("textarea",Me({spellCheck:"false",rows:2},e));Zl();var Jg=()=>{let e=createDiv(),t={};for(let n of["trash","pencil","star","checkmark"])e.empty(),(0,Yn.setIcon)(e,n,14),t[n]=e.innerHTML;return t},Kn=Yt(null),$i="%ALL%",an=class extends Yn.Modal{constructor(n,a){super(n.app);this.plugin=n;this.pack=a;this.titleEl.setText(`${a} Icons`),this.modalEl.addClasses(["isc-icon-manager","mod-community-theme"])}onOpen(){return $(this,null,function*(){this.contentEl.empty(),H.render(H.createElement(Kn.Provider,{value:{packs:this.plugin.packManager,icons:Jg()}},H.createElement(e1,{pack:this.pack})),this.contentEl)})}onClose(){H.unmountComponentAtNode(this.contentEl)}},Qg=(e,t)=>e.name.localeCompare(t.name),e1=({pack:e})=>{if(e==="emoji")throw new TypeError("Emoji not supported");let{packs:t}=wt(Kn),[n,a]=_e(""),[i,r]=Xl(new Map),o=Ze(()=>{let s=t.search(n?n.trim().split(" "):[],[e],1/0).map(({item:p})=>p);return n||s.sort(Qg),s},[n,e,i]);return Je(()=>{let s=t.on("changed",(p,l)=>r(c=>{l?l.forEach(u=>c.set(u,(c.get(u)||0)+1)):c.set($i,(c.get($i)||0)+1)}));return()=>t.offref(s)},[t]),H.createElement(H.Fragment,null,H.createElement("div",{className:"filter"},H.createElement("input",{type:"text",placeholder:"Filter",value:n,onChange:s=>a(s.target.value)})),H.createElement("div",{className:"icons"},o.map(s=>{var l,c;let p=((l=i.get(s.id))!=null?l:0)+((c=i.get($i))!=null?c:0);return H.createElement(Jl,{iconInfo:s,updated:p,key:s.id+p})})))};var Ql={code2emoji:!0,suggester:!0,disabledPacks:new Set(["obs"]),triggerWithTrailingSpace:!1,spaceAfterSC:!1,isMigrated:!1},Xn=class extends me.PluginSettingTab{constructor(n,a){super(n,a);this.plugin=a}display(){let{containerEl:n}=this;this.containerEl.empty(),new me.Setting(n).setHeading().setName("Icon Suggester"),new me.Setting(n).setDesc("If this is turned on, a Suggester will appear everytime you type :(or \uFF1A\uFF1A if full-width) followed by a letter. This will help you insert Emojis. ").addToggle(i=>{i.setValue(this.plugin.settings.suggester).onChange(r=>$(this,null,function*(){this.plugin.settings.suggester=r,yield this.plugin.saveSettings()}))}),new me.Setting(n).setName("Replace emoji shortcode with emoji character").setDesc("If this is turned on, emoji shortcodes will be immediately replaced by emoji after typing. Otherwise they are still stored as a shortcode and you only see the Emoji in Preview Mode.").addToggle(i=>{i.setValue(this.plugin.settings.code2emoji).onChange(r=>$(this,null,function*(){this.plugin.settings.code2emoji=r,yield this.plugin.saveSettings()}))}),new me.Setting(n).setName("Trigger with trailing space").setDesc("only trigger suggester if there is a trailing space before the colon").addToggle(i=>{i.setValue(this.plugin.settings.triggerWithTrailingSpace).onChange(r=>$(this,null,function*(){this.plugin.settings.triggerWithTrailingSpace=r,yield this.plugin.saveSettings()}))}),new me.Setting(n).setName("Add space after inserted shortcode").addToggle(i=>{i.setValue(this.plugin.settings.spaceAfterSC).onChange(r=>$(this,null,function*(){this.plugin.settings.spaceAfterSC=r,yield this.plugin.saveSettings()}))}),this.skipIconPack(),new me.Setting(n).setName("Icon Packs").setDesc("Browse and download icon packs").addButton(i=>i.setButtonText("Browser").onClick(()=>new Qt(this.plugin).open()));let a=createDiv({cls:["isc-settings-custom-icon","installed-plugins-container"]});new me.Setting(this.containerEl).setHeading().setName("Custom Icons").addExtraButton(i=>i.setIcon("sheets-in-box").setTooltip("Backup icons").onClick(()=>this.plugin.packManager.backupIcons())).addExtraButton(i=>i.setIcon("restore-file-glyph").setTooltip("Restore backup").onClick(()=>$(this,null,function*(){this.plugin.packManager.importIconsFromFileList(yield ui({multiple:!0,accept:".zip"}),!1),yield this.plugin.packManager.loadIcons(),this.manageCustomIcons(a)}))).addExtraButton(i=>i.setIcon("switch").setTooltip("Reload custom icons").onClick(()=>$(this,null,function*(){yield this.plugin.packManager.loadIcons(),this.manageCustomIcons(a),new me.Notice("Custom icons reloaded")}))).then(i=>me.Platform.isDesktopApp&&i.addExtraButton(r=>r.setIcon("folder").setTooltip("Open Icons Folder").onClick(()=>this.app.openWithDefaultApp(this.plugin.packManager.customIconsDir)))),this.containerEl.appendChild(a),this.manageCustomIcons(a)}_setDisabledPack(n,a){return a.addToggle(i=>{i.setValue(!this.plugin.settings.disabledPacks.has(n)).onChange(r=>$(this,null,function*(){r?this.plugin.settings.disabledPacks.delete(n):this.plugin.settings.disabledPacks.add(n),yield this.plugin.saveSettings()})),i.toggleEl.setAttr("aria-label",`Enable/Disable ${n} Icon Pack`)})}skipIconPack(){let{containerEl:n}=this,a=(i,r,o)=>this._setDisabledPack(i,new me.Setting(n).setName(r).setDesc(createFragment(o)));new me.Setting(this.containerEl).setHeading().setName("Icon Packs"),a("luc","Lucide",i=>i.createEl("a",{href:"https://lucide.dev",text:"official website"})),a("obs","Obsidian's built-in icons",i=>i.appendText("Obsidian's built-in icons are mostly used for UI components. "))}manageCustomIcons(n){n.hasChildNodes()&&n.empty();let a=i=>!/^[A-Za-z0-9]+$/.test(i)||this.plugin.packManager.isPacknameExists(i);new me.Setting(n).setName("Add new icon pack").setDesc("Reserved names: "+vt.join(", ")).then(i=>{let r=null,o=null;i.addText(s=>{s.setPlaceholder("Enter name").onChange(p=>{let l=a(p);s.inputEl.toggleClass("invalid",!!p&&l),r==null||r.setDisabled(l)}).then(p=>p.inputEl.addClass("isc-add-pack-input")),o=s}).addButton(s=>(s.setCta().setIcon("plus-with-circle").onClick(()=>{let p=o==null?void 0:o.getValue();if(!!p){if(a(p)){new me.Notice("This name is invalid.");return}this.addNewCustomIconEntry(p,n).settingEl.scrollIntoView(),o==null||o.setValue("")}}),r=s))}),this.plugin.packManager.customPacknames.forEach(i=>this.addNewCustomIconEntry(i,n))}addNewCustomIconEntry(n,a){let i=new me.Setting(a).setName(n).setDesc(createFragment(r=>{r.appendText("Drag files in to import custom icons"),r.createEl("br"),r.appendText("Supported format: "),hn.forEach((o,s,p)=>{r.createEl("code",{text:o}),p.length-1!==s&&r.appendText(", ")})})).addButton(r=>r.setIcon("sheets-in-box").setTooltip("Backup icons").onClick(()=>this.plugin.packManager.backupIcons(n))).addButton(r=>r.setIcon("go-to-file").setTooltip("select files to import").onClick(()=>$(this,null,function*(){return this.plugin.packManager.addFromFiles(n,yield ui({multiple:!0,accept:hn}))}))).addButton(r=>r.setIcon("trash").setTooltip("delete").setWarning().onClick(()=>{this.plugin.packManager.filter((o,s)=>s.pack!==n),a.removeChild(i.settingEl)})).addButton(r=>r.setIcon("popup-open").setTooltip("manage icons").setCta().onClick(()=>new an(this.plugin,n).open())).then(r=>t1(r.settingEl,o=>$(this,null,function*(){if(!o.dataTransfer){new me.Notice("Failed to get dropped items");return}this.plugin.packManager.addFromFiles(n,o.dataTransfer.files)})));return this._setDisabledPack(n,i),i}},t1=(e,t)=>{let n="dragover";e.addEventListener("dragover",a=>{a.preventDefault(),a.currentTarget.addClass(n)}),e.addEventListener("drop",a=>{a.preventDefault(),a.currentTarget.removeClass(n),t(a)}),e.addEventListener("dragleave",a=>{a.preventDefault(),a.currentTarget.removeClass(n)})};var ep="IconSCAPIv0",Jn=class extends tp.Plugin{constructor(){super(...arguments);this.settings=Ql;this.packManager=new $t(this);this._nodeProcessor=si(this);this._mdProcessor=ci(this);this.shortcodePosField=Ns(this);this.api=cc(this.packManager,this);this.fileIconCache=new Vt(this)}postProcessor(n,a){if(typeof n=="string"&&a)return this._mdProcessor(n,a);if(n instanceof HTMLElement)return this._nodeProcessor(n);throw new TypeError("Invalid args given to postProcessor")}onload(){return $(this,null,function*(){console.log("loading Icon Shortcodes"),yield this.loadSettings(),yield jc(this),yield this.packManager.loadIcons(),(window[ep]=this.api)&&this.register(()=>window[ep]=void 0),this.registerEditorSuggest(new Mn(this)),Ic(this),rr(this),this.addSettingTab(new Xn(this.app,this))})}loadSettings(){return $(this,null,function*(){let n=yield this.loadData();n&&(n.iconpack&&delete n.iconpack,this.settings=et(Me(Me({},this.settings),n),{disabledPacks:n.disabledPacks?new Set(n.disabledPacks):this.settings.disabledPacks}))})}saveSettings(){return $(this,null,function*(){yield this.saveData(et(Me({},this.settings),{disabledPacks:[...this.settings.disabledPacks]}))})}};
|
|
|
/*!
|
|
|
|
|
|
JSZip v3.10.0 - A JavaScript class for generating and reading zip files
|
|
|
<http://stuartk.com/jszip>
|
|
|
|
|
|
(c) 2009-2016 Stuart Knightley <stuart [at] stuartk.com>
|
|
|
Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/main/LICENSE.markdown.
|
|
|
|
|
|
JSZip uses the library pako released under the MIT license :
|
|
|
https://github.com/nodeca/pako/blob/main/LICENSE
|
|
|
*/
|
|
|
/*!
|
|
|
Copyright (c) 2018 Jed Watson.
|
|
|
Licensed under the MIT License (MIT), see
|
|
|
http://jedwatson.github.io/classnames
|
|
|
*/
|
|
|
/*!
|
|
|
* mime-db
|
|
|
* Copyright(c) 2014 Jonathan Ong
|
|
|
* Copyright(c) 2015-2022 Douglas Christopher Wilson
|
|
|
* MIT Licensed
|
|
|
*/
|
|
|
/*!
|
|
|
* mime-types
|
|
|
* Copyright(c) 2014 Jonathan Ong
|
|
|
* Copyright(c) 2015 Douglas Christopher Wilson
|
|
|
* MIT Licensed
|
|
|
*/
|
|
|
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21pbWUtZGJAMS41Mi4wL25vZGVfbW9kdWxlcy9taW1lLWRiL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9wYXRoLWJyb3dzZXJpZnlAMS4wLjEvbm9kZV9tb2R1bGVzL3BhdGgtYnJvd3NlcmlmeS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbWltZS10eXBlc0AyLjEuMzUvbm9kZV9tb2R1bGVzL21pbWUtdHlwZXMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaEA0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2ZyZWVHbG9iYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaEA0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3Jvb3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaEA0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1N5bWJvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29weUFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2hANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRSYXdUYWcuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaEA0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gvX29iamVjdFRvU3RyaW5nLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2hANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0VGFnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2hANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoL2lzT2JqZWN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2hANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoL2lzRnVuY3Rpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaEA0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NvcmVKc0RhdGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaEA0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzTWFza2VkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2hANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoL190b1NvdXJjZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzTmF0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2hANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRWYWx1ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0TmF0aXZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2hANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoL19EYXRhVmlldy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC9fTWFwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2hANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoL19Qcm9taXNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2hANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoL19TZXQuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaEA0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1dlYWtNYXAuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaEA0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFRhZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0xlbmd0aC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5TGlrZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2hANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoL2lzT2JqZWN0TGlrZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1N0cmluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC9faXRlcmF0b3JUb0FycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2hANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBUb0FycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2hANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRUb0FycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2hANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoL19hc2NpaVRvQXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaEA0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc1VuaWNvZGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaEA0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3VuaWNvZGVUb0FycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2hANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoL19zdHJpbmdUb0FycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2hANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheU1hcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVZhbHVlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVRpbWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2hANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNBcmd1bWVudHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaEA0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcmd1bWVudHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaEA0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gvc3R1YkZhbHNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2hANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQnVmZmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2hANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2hANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNUeXBlZEFycmF5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2hANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVW5hcnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaEA0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25vZGVVdGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2hANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoL2lzVHlwZWRBcnJheS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlMaWtlS2V5cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoQDQuMTcuMjEvbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNQcm90b3R5cGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaEA0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gvX292ZXJBcmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaEA0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25hdGl2ZUtleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaEA0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VLZXlzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2hANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoL2tleXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2xvZGFzaEA0LjE3LjIxL25vZGVfbW9kdWxlcy9sb2Rhc2gvdmFsdWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2hANC4xNy4yMS9ub2RlX21vZHVsZXMvbG9kYXNoL3RvQXJyYXkuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2dpdGh1Yi5jb20rcmh5c2Qrbm9kZS1lbW9qaUA0MTQwOGNiNTg1NzU5MGI2ZTk0MmQ0MDE1ODE0ZjI2YWQyN2JlOTY0L25vZGVfbW9kdWxlcy9ub2RlLWVtb2ppL2xpYi9lbW9qaS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZ2l0aHViLmNvbStyaHlzZCtub2RlLWVtb2ppQDQxNDA4Y2I1ODU3NTkwYjZlOTQyZDQwMTU4MTRmMjZhZDI3YmU5NjQvbm9kZV9tb2R1bGVzL25vZGUtZW1vamkvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NsYXNzbmFtZXNAMi4zLjEvbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2Fzc2VydC1uZXZlckAxLjIuMS9ub2RlX21vZHVsZXMvYXNzZXJ0LW5ldmVyL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9qc3ppcEAzLjEwLjAvbm9kZV9tb2R1bGVzL2pzemlwL2Rpc3QvanN6aXAubWluLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9taW5pLXN2Zy1kYXRhLXVyaUAxLjQuNC9ub2RlX21vZHVsZXMvbWluaS1zdmctZGF0YS11cmkvc2hvcnRlci1jc3MtY29sb3ItbmFtZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL21pbmktc3ZnLWRhdGEtdXJpQDEuNC40L25vZGVfbW9kdWxlcy9taW5pLXN2Zy1kYXRhLXVyaS9pbmRleC5qcyIsICIuLi9zcmMvaXNjLW1haW4udHMiLCAiLi4vc3JjL2ljb24taW4tZWRpdG9yL3ZpZXctcGx1Z2luLnRzIiwgIi4uL3NyYy9pY29uLWluLWVkaXRvci9kZWNvLnRzIiwgIi4uL3NyYy9pY29uLWluLWVkaXRvci93aWRnZXQudHMiLCAiLi4vc3JjL2ljb24taW4tZWRpdG9yL2dldC1tZW51LnRzIiwgIi4uL3NyYy9pY29uLWluLWVkaXRvci9pbmRleC50cyIsICIuLi9zcmMvaWNvbi1pbi1lZGl0b3Ivc3RhdGUudHMiLCAiLi4vc3JjL2ljb24tcGFja3MvdXRpbHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2lzLXJlZ2V4cEAzLjEuMC9ub2RlX21vZHVsZXMvaXMtcmVnZXhwL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jbG9uZS1yZWdleHBAMy4wLjAvbm9kZV9tb2R1bGVzL2Nsb25lLXJlZ2V4cC9pbmRleC5qcyIsICIuLi9zcmMvbW9kdWxlcy91bmlvbi50cyIsICIuLi9zcmMvaWNvbi1wYWNrcy9pY29uLWNhY2hlLnRzIiwgIi4uL3NyYy9pY29uLXBhY2tzL3BhY2stbWFuYWdlci50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZnVzZS5qc0A2LjYuMi9ub2RlX21vZHVsZXMvZnVzZS5qcy9kaXN0L2Z1c2UuZXNtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jb21wYXJlLXZlcnNpb25zQDQuMS4zL25vZGVfbW9kdWxlcy9jb21wYXJlLXZlcnNpb25zL2luZGV4Lm1qcyIsICIuLi9zcmMvdHlwaW5ncy9hcGkudHMiLCAiLi4vc3JjL21vZHVsZXMvc3VnZ2VzdGVyLnRzIiwgIi4uL3NyYy9pY29uLXBhY2tzL2J1aWx0LWlucy50cyIsICIuLi9zcmMvaWNvbi1wYWNrcy9lbW9qaS50cyIsICIuLi9zcmMvaWNvbi1wYWNrcy9maWxlLWljb24udHMiLCAiLi4vc3JjL2ljb24tcGFja3MvdHlwZXMudHMiLCAiLi4vc3JjL21vZHVsZXMvanNvbi10by1zdmcudHMiLCAiLi4vc3JjL21vZHVsZXMvZGlhbG9nLnRzIiwgIi4uL3NyYy9wb3N0LXBzL2NhbGxvdXQtaWNvbi50cyIsICIuLi9zcmMvcG9zdC1wcy90ZXh0LnRzIiwgIi4uL3NyYy9wb3N0LXBzL2luZGV4LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9maWxlLXNlbGVjdC1kaWFsb2dAMS41LjQvbm9kZV9tb2R1bGVzL2ZpbGUtc2VsZWN0LWRpYWxvZy9zcmMvZXJyb3IudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2ZpbGUtc2VsZWN0LWRpYWxvZ0AxLjUuNC9ub2RlX21vZHVsZXMvZmlsZS1zZWxlY3QtZGlhbG9nL3NyYy91dGlsLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9maWxlLXNlbGVjdC1kaWFsb2dAMS41LjQvbm9kZV9tb2R1bGVzL2ZpbGUtc2VsZWN0LWRpYWxvZy9zcmMvZmlsZS1kaWFsb2cudHMiLCAiLi4vc3JjL3NldHRpbmdzLnRzIiwgIi4uL3NyYy9jb21wb25lbnQvYnJvd3Nlci1wYWNrcy50c3giLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3ByZWFjdEAxMC44LjAvbm9kZV9tb2R1bGVzL3ByZWFjdC9zcmMvY29uc3RhbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9wcmVhY3RAMTAuOC4wL25vZGVfbW9kdWxlcy9wcmVhY3Qvc3JjL3V0aWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3ByZWFjdEAxMC44LjAvbm9kZV9tb2R1bGVzL3ByZWFjdC9zcmMvb3B0aW9ucy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcHJlYWN0QDEwLjguMC9ub2RlX21vZHVsZXMvcHJlYWN0L3NyYy9jcmVhdGUtZWxlbWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcHJlYWN0QDEwLjguMC9ub2RlX21vZHVsZXMvcHJlYWN0L3NyYy9jb21wb25lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3ByZWFjdEAxMC44LjAvbm9kZV9tb2R1bGVzL3ByZWFjdC9zcmMvY3JlYXRlLWNvbnRleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3ByZWFjdEAxMC44LjAvbm9kZV9tb2R1bGVzL3ByZWFjdC9zcmMvZGlmZi9jaGlsZHJlbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcHJlYWN0QDEwLjguMC9ub2RlX21vZHVsZXMvcHJlYWN0L3NyYy9kaWZmL3Byb3BzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9wcmVhY3RAMTAuOC4wL25vZGVfbW9kdWxlcy9wcmVhY3Qvc3JjL2RpZmYvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3ByZWFjdEAxMC44LjAvbm9kZV9tb2R1bGVzL3ByZWFjdC9zcmMvcmVuZGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9wcmVhY3RAMTAuOC4wL25vZGVfbW9kdWxlcy9wcmVhY3Qvc3JjL2Nsb25lLWVsZW1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3ByZWFjdEAxMC44LjAvbm9kZV9tb2R1bGVzL3ByZWFjdC9zcmMvZGlmZi9jYXRjaC1lcnJvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcHJlYWN0QDEwLjguMC9ub2RlX21vZHVsZXMvcHJlYWN0L2hvb2tzL3NyYy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcHJlYWN0QDEwLjguMC9ub2RlX21vZHVsZXMvcHJlYWN0L2NvbXBhdC9zcmMvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcHJlYWN0QDEwLjguMC9ub2RlX21vZHVsZXMvcHJlYWN0L2NvbXBhdC9zcmMvUHVyZUNvbXBvbmVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcHJlYWN0QDEwLjguMC9ub2RlX21vZHVsZXMvcHJlYWN0L2NvbXBhdC9zcmMvbWVtby5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcHJlYWN0QDEwLjguMC9ub2RlX21vZHVsZXMvcHJlYWN0L2NvbXBhdC9zcmMvZm9yd2FyZFJlZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcHJlYWN0QDEwLjguMC9ub2RlX21vZHVsZXMvcHJlYWN0L2NvbXBhdC9zcmMvQ2hpbGRyZW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3ByZWFjdEAxMC44LjAvbm9kZV9tb2R1bGVzL3ByZWFjdC9jb21wYXQvc3JjL3N1c3BlbnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9wcmVhY3RAMTAuOC4wL25vZGVfbW9kdWxlcy9wcmVhY3QvY29tcGF0L3NyYy9zdXNwZW5zZS1saXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9wcmVhY3RAMTAuOC4wL25vZGVfbW9kdWxlcy9wcmVhY3QvY29tcGF0L3NyYy9wb3J0YWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9wcmVhY3RAMTAuOC4wL25vZGVfbW9kdWxlcy9wcmVhY3QvY29tcGF0L3NyYy9yZW5kZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3ByZWFjdEAxMC44LjAvbm9kZV9tb2R1bGVzL3ByZWFjdC9jb21wYXQvc3JjL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yZWFjdC1pY29uc0A0LjQuMF9AcHJlYWN0K2NvbXBhdEAxNy4xLjEvbm9kZV9tb2R1bGVzL3JlYWN0LWljb25zL2xpYi9lc20vaWNvbkNvbnRleHQuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3JlYWN0LWljb25zQDQuNC4wX0BwcmVhY3QrY29tcGF0QDE3LjEuMS9ub2RlX21vZHVsZXMvcmVhY3QtaWNvbnMvbGliL2VzbS9pY29uQmFzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcmVhY3QtaWNvbnNANC40LjBfQHByZWFjdCtjb21wYXRAMTcuMS4xL25vZGVfbW9kdWxlcy9yZWFjdC1pY29ucy9maS9pbmRleC5lc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2pzLWJhc2U2NEAzLjcuMi9ub2RlX21vZHVsZXMvanMtYmFzZTY0L2Jhc2U2NC5tanMiLCAiLi4vc3JjL21vZHVsZXMvaWNvbi1wYWNrcy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vcmVhY3QtbG9hZGluZ0AyLjAuM19AcHJlYWN0K2NvbXBhdEAxNy4xLjEvbm9kZV9tb2R1bGVzL3JlYWN0LWxvYWRpbmcvbGliL3N2Zy9pbmRleC5qcyIsICIuLi9zcmMvY29tcG9uZW50L2xvYWRpbmcudHN4IiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9pbW1lckA5LjAuMTUvbm9kZV9tb2R1bGVzL2ltbWVyL3NyYy91dGlscy9lcnJvcnMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2ltbWVyQDkuMC4xNS9ub2RlX21vZHVsZXMvaW1tZXIvc3JjL3V0aWxzL2NvbW1vbi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vaW1tZXJAOS4wLjE1L25vZGVfbW9kdWxlcy9pbW1lci9zcmMvdXRpbHMvcGx1Z2lucy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vaW1tZXJAOS4wLjE1L25vZGVfbW9kdWxlcy9pbW1lci9zcmMvY29yZS9zY29wZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vaW1tZXJAOS4wLjE1L25vZGVfbW9kdWxlcy9pbW1lci9zcmMvY29yZS9maW5hbGl6ZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vaW1tZXJAOS4wLjE1L25vZGVfbW9kdWxlcy9pbW1lci9zcmMvY29yZS9wcm94eS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vaW1tZXJAOS4wLjE1L25vZGVfbW9kdWxlcy9pbW1lci9zcmMvY29yZS9pbW1lckNsYXNzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9pbW1lckA5LjAuMTUvbm9kZV9tb2R1bGVzL2ltbWVyL3NyYy9jb3JlL2N1cnJlbnQudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2ltbWVyQDkuMC4xNS9ub2RlX21vZHVsZXMvaW1tZXIvc3JjL3BsdWdpbnMvZXM1LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9pbW1lckA5LjAuMTUvbm9kZV9tb2R1bGVzL2ltbWVyL3NyYy9wbHVnaW5zL3BhdGNoZXMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2ltbWVyQDkuMC4xNS9ub2RlX21vZHVsZXMvaW1tZXIvc3JjL3BsdWdpbnMvbWFwc2V0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9pbW1lckA5LjAuMTUvbm9kZV9tb2R1bGVzL2ltbWVyL3NyYy9wbHVnaW5zL2FsbC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vaW1tZXJAOS4wLjE1L25vZGVfbW9kdWxlcy9pbW1lci9zcmMvaW1tZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2ltbWVyQDkuMC4xNS9ub2RlX21vZHVsZXMvaW1tZXIvc3JjL3V0aWxzL2Vudi50cyIsICIuLi9zcmMvY29tcG9uZW50L2ljb24tbWFuYWdlci50c3giLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VzZS1pbW1lckAwLjYuMF9rb3Y1d3R1bGY1Zzc1Z2x2N3QydWR2c256ZS9ub2RlX21vZHVsZXMvdXNlLWltbWVyL3NyYy9pbmRleC50cyIsICIuLi9zcmMvY29tcG9uZW50L2ljb24tcHJldmlldy50c3giXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qIVxuICogbWltZS1kYlxuICogQ29weXJpZ2h0KGMpIDIwMTQgSm9uYXRoYW4gT25nXG4gKiBDb3B5cmlnaHQoYykgMjAxNS0yMDIyIERvdWdsYXMgQ2hyaXN0b3BoZXIgV2lsc29uXG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4vKipcbiAqIE1vZHVsZSBleHBvcnRzLlxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9kYi5qc29uJylcbiIsICIvLyAncGF0aCcgbW9kdWxlIGV4dHJhY3RlZCBmcm9tIE5vZGUuanMgdjguMTEuMSAob25seSB0aGUgcG9zaXggcGFydClcbi8vIHRyYW5zcGxpdGVkIHdpdGggQmFiZWxcblxuLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gYXNzZXJ0UGF0aChwYXRoKSB7XG4gIGlmICh0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQYXRoIG11c3QgYmUgYSBzdHJpbmcuIFJlY2VpdmVkICcgKyBKU09OLnN0cmluZ2lmeShwYXRoKSk7XG4gIH1cbn1cblxuLy8gUmVzb2x2ZXMgLiBhbmQgLi4gZWxlbWVudHMgaW4gYSBwYXRoIHdpdGggZGlyZWN0b3J5IG5hbWVzXG5mdW5jdGlvbiBub3JtYWxpemVTdHJpbmdQb3NpeChwYXRoLCBhbGxvd0Fib3ZlUm9vdCkge1xuICB2YXIgcmVzID0gJyc7XG4gIHZhciBsYXN0U2VnbWVudExlbmd0aCA9IDA7XG4gIHZhciBsYXN0U2xhc2ggPSAtMTtcbiAgdmFyIGRvdHMgPSAwO1xuICB2YXIgY29kZTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPD0gcGF0aC5sZW5ndGg7ICsraSkge1xuICAgIGlmIChpIDwgcGF0aC5sZW5ndGgpXG4gICAgICBjb2RlID0gcGF0aC5jaGFyQ29kZUF0KGkpO1xuICAgIGVsc2UgaWYgKGNvZGUgPT09IDQ3IC8qLyovKVxuICAgICAgYnJlYWs7XG4gICAgZWxzZVxuICAgICAgY29kZSA9IDQ3IC8qLyovO1xuICAgIGlmIChjb2RlID09PSA0NyAvKi8qLykge1xuICAgICAgaWYgKGxhc3RTbGFzaCA9PT0gaSAtIDEgfHwgZG90cyA9PT0gMSkge1xuICAgICAgICAvLyBOT09QXG4gICAgICB9IGVsc2UgaWYgKGxhc3RTbGFzaCAhPT0gaSAtIDEgJiYgZG90cyA9PT0gMikge1xuICAgICAgICBpZiAocmVzLmxlbmd0aCA8IDIgfHwgbGFzdFNlZ21lbnRMZW5ndGggIT09IDIgfHwgcmVzLmNoYXJDb2RlQXQocmVzLmxlbmd0aCAtIDEpICE9PSA0NiAvKi4qLyB8fCByZXMuY2hhckNvZGVBdChyZXMubGVuZ3RoIC0gMikgIT09IDQ2IC8qLiovKSB7XG4gICAgICAgICAgaWYgKHJlcy5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgICB2YXIgbGFzdFNsYXNoSW5kZXggPSByZXMubGFzdEluZGV4T2YoJy8nKTtcbiAgICAgICAgICAgIGlmIChsYXN0U2xhc2hJbmRleCAhPT0gcmVzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgaWYgKGxhc3RTbGFzaEluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgICAgIHJlcyA9ICcnO1xuICAgICAgICAgICAgICAgIGxhc3RTZWdtZW50TGVuZ3RoID0gMDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXMgPSByZXMuc2xpY2UoMCwgbGFzdFNsYXNoSW5kZXgpO1xuICAgICAgICAgICAgICAgIGxhc3RTZWdtZW50TGVuZ3RoID0gcmVzLmxlbmd0aCAtIDEgLSByZXMubGFzdEluZGV4T2YoJy8nKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBsYXN0U2xhc2ggPSBpO1xuICAgICAgICAgICAgICBkb3RzID0gMDtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChyZXMubGVuZ3RoID09PSAyIHx8IHJlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHJlcyA9ICcnO1xuICAgICAgICAgICAgbGFzdFNlZ21lbnRMZW5ndGggPSAwO1xuICAgICAgICAgICAgbGFzdFNsYXNoID0gaTtcbiAgICAgICAgICAgIGRvdHMgPSAwO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChhbGxvd0Fib3ZlUm9vdCkge1xuICAgICAgICAgIGlmIChyZXMubGVuZ3RoID4gMClcbiAgICAgICAgICAgIHJlcyArPSAnLy4uJztcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICByZXMgPSAnLi4nO1xuICAgICAgICAgIGxhc3RTZWdtZW50TGVuZ3RoID0gMjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHJlcy5sZW5ndGggPiAwKVxuICAgICAgICAgIHJlcyArPSAnLycgKyBwYXRoLnNsaWNlKGxhc3RTbGFzaCArIDEsIGkpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgcmVzID0gcGF0aC5zbGljZShsYXN0U2xhc2ggKyAxLCBpKTtcbiAgICAgICAgbGFzdFNlZ21lbnRMZW5ndGggPSBpIC0gbGFzdFNsYXNoIC0gMTtcbiAgICAgIH1cbiAgICAgIGxhc3RTbGFzaCA9IGk7XG4gICAgICBkb3RzID0gMDtcbiAgICB9IGVsc2UgaWYgKGNvZGUgPT09IDQ2IC8qLiovICYmIGRvdHMgIT09IC0xKSB7XG4gICAgICArK2RvdHM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRvdHMgPSAtMTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cblxuZnVuY3Rpb24gX2Zvcm1hdChzZXAsIHBhdGhPYmplY3QpIHtcbiAgdmFyIGRpciA9IHBhdGhPYmplY3QuZGlyIHx8IHBhdGhPYmplY3Qucm9vdDtcbiAgdmFyIGJhc2UgPSBwYXRoT2JqZWN0LmJhc2UgfHwgKHBhdGhPYmplY3QubmFtZSB8fCAnJykgKyAocGF0aE9iamVjdC5leHQgfHwgJycpO1xuICBpZiAoIWRpcikge1xuICAgIHJldHVybiBiYXNlO1xuICB9XG4gIGlmIChkaXIgPT09IHBhdGhPYmplY3Qucm9vdCkge1xuICAgIHJldHVybiBkaXIgKyBiYXNlO1xuICB9XG4gIHJldHVybiBkaXIgKyBzZXAgKyBiYXNlO1xufVxuXG52YXIgcG9zaXggPSB7XG4gIC8vIHBhdGgucmVzb2x2ZShbZnJvbSAuLi5dLCB0bylcbiAgcmVzb2x2ZTogZnVuY3Rpb24gcmVzb2x2ZSgpIHtcbiAgICB2YXIgcmVzb2x2ZWRQYXRoID0gJyc7XG4gICAgdmFyIHJlc29sdmVkQWJzb2x1dGUgPSBmYWxzZTtcbiAgICB2YXIgY3dkO1xuXG4gICAgZm9yICh2YXIgaSA9IGFyZ3VtZW50cy5sZW5ndGggLSAxOyBpID49IC0xICYmICFyZXNvbHZlZEFic29sdXRlOyBpLS0pIHtcbiAgICAgIHZhciBwYXRoO1xuICAgICAgaWYgKGkgPj0gMClcbiAgICAgICAgcGF0aCA9IGFyZ3VtZW50c1tpXTtcbiAgICAgIGVsc2Uge1xuICAgICAgICBpZiAoY3dkID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgY3dkID0gcHJvY2Vzcy5jd2QoKTtcbiAgICAgICAgcGF0aCA9IGN3ZDtcbiAgICAgIH1cblxuICAgICAgYXNzZXJ0UGF0aChwYXRoKTtcblxuICAgICAgLy8gU2tpcCBlbXB0eSBlbnRyaWVzXG4gICAgICBpZiAocGF0aC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHJlc29sdmVkUGF0aCA9IHBhdGggKyAnLycgKyByZXNvbHZlZFBhdGg7XG4gICAgICByZXNvbHZlZEFic29sdXRlID0gcGF0aC5jaGFyQ29kZUF0KDApID09PSA0NyAvKi8qLztcbiAgICB9XG5cbiAgICAvLyBBdCB0aGlzIHBvaW50IHRoZSBwYXRoIHNob3VsZCBiZSByZXNvbHZlZCB0byBhIGZ1bGwgYWJzb2x1dGUgcGF0aCwgYnV0XG4gICAgLy8gaGFuZGxlIHJlbGF0aXZlIHBhdGhzIHRvIGJlIHNhZmUgKG1pZ2h0IGhhcHBlbiB3aGVuIHByb2Nlc3MuY3dkKCkgZmFpbHMpXG5cbiAgICAvLyBOb3JtYWxpemUgdGhlIHBhdGhcbiAgICByZXNvbHZlZFBhdGggPSBub3JtYWxpemVTdHJpbmdQb3NpeChyZXNvbHZlZFBhdGgsICFyZXNvbHZlZEFic29sdXRlKTtcblxuICAgIGlmIChyZXNvbHZlZEFic29sdXRlKSB7XG4gICAgICBpZiAocmVzb2x2ZWRQYXRoLmxlbmd0aCA+IDApXG4gICAgICAgIHJldHVybiAnLycgKyByZXNvbHZlZFBhdGg7XG4gICAgICBlbHNlXG4gICAgICAgIHJldHVybiAnLyc7XG4gICAgfSBlbHNlIGlmIChyZXNvbHZlZFBhdGgubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHJlc29sdmVkUGF0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICcuJztcbiAgICB9XG4gIH0sXG5cbiAgbm9ybWFsaXplOiBmdW5jdGlvbiBub3JtYWxpemUocGF0aCkge1xuICAgIGFzc2VydFBhdGgocGF0aCk7XG5cbiAgICBpZiAocGF0aC5sZW5ndGggPT09IDApIHJldHVybiAnLic7XG5cbiAgICB2YXIgaXNBYnNvbHV0ZSA9IHBhdGguY2hhckNvZGVBdCgwKSA9PT0gNDcgLyovKi87XG4gICAgdmFyIHRyYWlsaW5nU2VwYXJhdG9yID0gcGF0aC5jaGFyQ29kZUF0KHBhdGgubGVuZ3RoIC0gMSkgPT09IDQ3IC8qLyovO1xuXG4gICAgLy8gTm9ybWFsaXplIHRoZSBwYXRoXG4gICAgcGF0aCA9IG5vcm1hbGl6ZVN0cmluZ1Bvc2l4KHBhdGgsICFpc0Fic29sdXRlKTtcblxuICAgIGlmIChwYXRoLmxlbmd0aCA9PT0gMCAmJiAhaXNBYnNvbHV0ZSkgcGF0aCA9ICcuJztcbiAgICBpZiAocGF0aC5sZW5ndGggPiAwICYmIHRyYWlsaW5nU2VwYXJhdG9yKSBwYXRoICs9ICcvJztcblxuICAgIGlmIChpc0Fic29sdXRlKSByZXR1cm4gJy8nICsgcGF0aDtcbiAgICByZXR1cm4gcGF0aDtcbiAgfSxcblxuICBpc0Fic29sdXRlOiBmdW5jdGlvbiBpc0Fic29sdXRlKHBhdGgpIHtcbiAgICBhc3NlcnRQYXRoKHBhdGgpO1xuICAgIHJldHVybiBwYXRoLmxlbmd0aCA+IDAgJiYgcGF0aC5jaGFyQ29kZUF0KDApID09PSA0NyAvKi8qLztcbiAgfSxcblxuICBqb2luOiBmdW5jdGlvbiBqb2luKCkge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKVxuICAgICAgcmV0dXJuICcuJztcbiAgICB2YXIgam9pbmVkO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgKytpKSB7XG4gICAgICB2YXIgYXJnID0gYXJndW1lbnRzW2ldO1xuICAgICAgYXNzZXJ0UGF0aChhcmcpO1xuICAgICAgaWYgKGFyZy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGlmIChqb2luZWQgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICBqb2luZWQgPSBhcmc7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICBqb2luZWQgKz0gJy8nICsgYXJnO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoam9pbmVkID09PSB1bmRlZmluZWQpXG4gICAgICByZXR1cm4gJy4nO1xuICAgIHJldHVybiBwb3NpeC5ub3JtYWxpemUoam9pbmVkKTtcbiAgfSxcblxuICByZWxhdGl2ZTogZnVuY3Rpb24gcmVsYXRpdmUoZnJvbSwgdG8pIHtcbiAgICBhc3NlcnRQYXRoKGZyb20pO1xuICAgIGFzc2VydFBhdGgodG8pO1xuXG4gICAgaWYgKGZyb20gPT09IHRvKSByZXR1cm4gJyc7XG5cbiAgICBmcm9tID0gcG9zaXgucmVzb2x2ZShmcm9tKTtcbiAgICB0byA9IHBvc2l4LnJlc29sdmUodG8pO1xuXG4gICAgaWYgKGZyb20gPT09IHRvKSByZXR1cm4gJyc7XG5cbiAgICAvLyBUcmltIGFueSBsZWFkaW5nIGJhY2tzbGFzaGVzXG4gICAgdmFyIGZyb21TdGFydCA9IDE7XG4gICAgZm9yICg7IGZyb21TdGFydCA8IGZyb20ubGVuZ3RoOyArK2Zyb21TdGFydCkge1xuICAgICAgaWYgKGZyb20uY2hhckNvZGVBdChmcm9tU3RhcnQpICE9PSA0NyAvKi8qLylcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBmcm9tRW5kID0gZnJvbS5sZW5ndGg7XG4gICAgdmFyIGZyb21MZW4gPSBmcm9tRW5kIC0gZnJvbVN0YXJ0O1xuXG4gICAgLy8gVHJpbSBhbnkgbGVhZGluZyBiYWNrc2xhc2hlc1xuICAgIHZhciB0b1N0YXJ0ID0gMTtcbiAgICBmb3IgKDsgdG9TdGFydCA8IHRvLmxlbmd0aDsgKyt0b1N0YXJ0KSB7XG4gICAgICBpZiAodG8uY2hhckNvZGVBdCh0b1N0YXJ0KSAhPT0gNDcgLyovKi8pXG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgdG9FbmQgPSB0by5sZW5ndGg7XG4gICAgdmFyIHRvTGVuID0gdG9FbmQgLSB0b1N0YXJ0O1xuXG4gICAgLy8gQ29tcGFyZSBwYXRocyB0byBmaW5kIHRoZSBsb25nZXN0IGNvbW1vbiBwYXRoIGZyb20gcm9vdFxuICAgIHZhciBsZW5ndGggPSBmcm9tTGVuIDwgdG9MZW4gPyBmcm9tTGVuIDogdG9MZW47XG4gICAgdmFyIGxhc3RDb21tb25TZXAgPSAtMTtcbiAgICB2YXIgaSA9IDA7XG4gICAgZm9yICg7IGkgPD0gbGVuZ3RoOyArK2kpIHtcbiAgICAgIGlmIChpID09PSBsZW5ndGgpIHtcbiAgICAgICAgaWYgKHRvTGVuID4gbGVuZ3RoKSB7XG4gICAgICAgICAgaWYgKHRvLmNoYXJDb2RlQXQodG9TdGFydCArIGkpID09PSA0NyAvKi8qLykge1xuICAgICAgICAgICAgLy8gV2UgZ2V0IGhlcmUgaWYgYGZyb21gIGlzIHRoZSBleGFjdCBiYXNlIHBhdGggZm9yIGB0b2AuXG4gICAgICAgICAgICAvLyBGb3IgZXhhbXBsZTogZnJvbT0nL2Zvby9iYXInOyB0bz0nL2Zvby9iYXIvYmF6J1xuICAgICAgICAgICAgcmV0dXJuIHRvLnNsaWNlKHRvU3RhcnQgKyBpICsgMSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgICAvLyBXZSBnZXQgaGVyZSBpZiBgZnJvbWAgaXMgdGhlIHJvb3RcbiAgICAgICAgICAgIC8vIEZvciBleGFtcGxlOiBmcm9tPScvJzsgdG89Jy9mb28nXG4gICAgICAgICAgICByZXR1cm4gdG8uc2xpY2UodG9TdGFydCArIGkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChmcm9tTGVuID4gbGVuZ3RoKSB7XG4gICAgICAgICAgaWYgKGZyb20uY2hhckNvZGVBdChmcm9tU3RhcnQgKyBpKSA9PT0gNDcgLyovKi8pIHtcbiAgICAgICAgICAgIC8vIFdlIGdldCBoZXJlIGlmIGB0b2AgaXMgdGhlIGV4YWN0IGJhc2UgcGF0aCBmb3IgYGZyb21gLlxuICAgICAgICAgICAgLy8gRm9yIGV4YW1wbGU6IGZyb209Jy9mb28vYmFyL2Jheic7IHRvPScvZm9vL2JhcidcbiAgICAgICAgICAgIGxhc3RDb21tb25TZXAgPSBpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgICAgLy8gV2UgZ2V0IGhlcmUgaWYgYHRvYCBpcyB0aGUgcm9vdC5cbiAgICAgICAgICAgIC8vIEZvciBleGFtcGxlOiBmcm9tPScvZm9vJzsgdG89Jy8nXG4gICAgICAgICAgICBsYXN0Q29tbW9uU2VwID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICB2YXIgZnJvbUNvZGUgPSBmcm9tLmNoYXJDb2RlQXQoZnJvbVN0YXJ0ICsgaSk7XG4gICAgICB2YXIgdG9Db2RlID0gdG8uY2hhckNvZGVBdCh0b1N0YXJ0ICsgaSk7XG4gICAgICBpZiAoZnJvbUNvZGUgIT09IHRvQ29kZSlcbiAgICAgICAgYnJlYWs7XG4gICAgICBlbHNlIGlmIChmcm9tQ29kZSA9PT0gNDcgLyovKi8pXG4gICAgICAgIGxhc3RDb21tb25TZXAgPSBpO1xuICAgIH1cblxuICAgIHZhciBvdXQgPSAnJztcbiAgICAvLyBHZW5lcmF0ZSB0aGUgcmVsYXRpdmUgcGF0aCBiYXNlZCBvbiB0aGUgcGF0aCBkaWZmZXJlbmNlIGJldHdlZW4gYHRvYFxuICAgIC8vIGFuZCBgZnJvbWBcbiAgICBmb3IgKGkgPSBmcm9tU3RhcnQgKyBsYXN0Q29tbW9uU2VwICsgMTsgaSA8PSBmcm9tRW5kOyArK2kpIHtcbiAgICAgIGlmIChpID09PSBmcm9tRW5kIHx8IGZyb20uY2hhckNvZGVBdChpKSA9PT0gNDcgLyovKi8pIHtcbiAgICAgICAgaWYgKG91dC5sZW5ndGggPT09IDApXG4gICAgICAgICAgb3V0ICs9ICcuLic7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICBvdXQgKz0gJy8uLic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTGFzdGx5LCBhcHBlbmQgdGhlIHJlc3Qgb2YgdGhlIGRlc3RpbmF0aW9uIChgdG9gKSBwYXRoIHRoYXQgY29tZXMgYWZ0ZXJcbiAgICAvLyB0aGUgY29tbW9uIHBhdGggcGFydHNcbiAgICBpZiAob3V0Lmxlbmd0aCA+IDApXG4gICAgICByZXR1cm4gb3V0ICsgdG8uc2xpY2UodG9TdGFydCArIGxhc3RDb21tb25TZXApO1xuICAgIGVsc2Uge1xuICAgICAgdG9TdGFydCArPSBsYXN0Q29tbW9uU2VwO1xuICAgICAgaWYgKHRvLmNoYXJDb2RlQXQodG9TdGFydCkgPT09IDQ3IC8qLyovKVxuICAgICAgICArK3RvU3RhcnQ7XG4gICAgICByZXR1cm4gdG8uc2xpY2UodG9TdGFydCk7XG4gICAgfVxuICB9LFxuXG4gIF9tYWtlTG9uZzogZnVuY3Rpb24gX21ha2VMb25nKHBhdGgpIHtcbiAgICByZXR1cm4gcGF0aDtcbiAgfSxcblxuICBkaXJuYW1lOiBmdW5jdGlvbiBkaXJuYW1lKHBhdGgpIHtcbiAgICBhc3NlcnRQYXRoKHBhdGgpO1xuICAgIGlmIChwYXRoLmxlbmd0aCA9PT0gMCkgcmV0dXJuICcuJztcbiAgICB2YXIgY29kZSA9IHBhdGguY2hhckNvZGVBdCgwKTtcbiAgICB2YXIgaGFzUm9vdCA9IGNvZGUgPT09IDQ3IC8qLyovO1xuICAgIHZhciBlbmQgPSAtMTtcbiAgICB2YXIgbWF0Y2hlZFNsYXNoID0gdHJ1ZTtcbiAgICBmb3IgKHZhciBpID0gcGF0aC5sZW5ndGggLSAxOyBpID49IDE7IC0taSkge1xuICAgICAgY29kZSA9IHBhdGguY2hhckNvZGVBdChpKTtcbiAgICAgIGlmIChjb2RlID09PSA0NyAvKi8qLykge1xuICAgICAgICAgIGlmICghbWF0Y2hlZFNsYXNoKSB7XG4gICAgICAgICAgICBlbmQgPSBpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBXZSBzYXcgdGhlIGZpcnN0IG5vbi1wYXRoIHNlcGFyYXRvclxuICAgICAgICBtYXRjaGVkU2xhc2ggPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZW5kID09PSAtMSkgcmV0dXJuIGhhc1Jvb3QgPyAnLycgOiAnLic7XG4gICAgaWYgKGhhc1Jvb3QgJiYgZW5kID09PSAxKSByZXR1cm4gJy8vJztcbiAgICByZXR1cm4gcGF0aC5zbGljZSgwLCBlbmQpO1xuICB9LFxuXG4gIGJhc2VuYW1lOiBmdW5jdGlvbiBiYXNlbmFtZShwYXRoLCBleHQpIHtcbiAgICBpZiAoZXh0ICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGV4dCAhPT0gJ3N0cmluZycpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wiZXh0XCIgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZycpO1xuICAgIGFzc2VydFBhdGgocGF0aCk7XG5cbiAgICB2YXIgc3RhcnQgPSAwO1xuICAgIHZhciBlbmQgPSAtMTtcbiAgICB2YXIgbWF0Y2hlZFNsYXNoID0gdHJ1ZTtcbiAgICB2YXIgaTtcblxuICAgIGlmIChleHQgIT09IHVuZGVmaW5lZCAmJiBleHQubGVuZ3RoID4gMCAmJiBleHQubGVuZ3RoIDw9IHBhdGgubGVuZ3RoKSB7XG4gICAgICBpZiAoZXh0Lmxlbmd0aCA9PT0gcGF0aC5sZW5ndGggJiYgZXh0ID09PSBwYXRoKSByZXR1cm4gJyc7XG4gICAgICB2YXIgZXh0SWR4ID0gZXh0Lmxlbmd0aCAtIDE7XG4gICAgICB2YXIgZmlyc3ROb25TbGFzaEVuZCA9IC0xO1xuICAgICAgZm9yIChpID0gcGF0aC5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgY29kZSA9IHBhdGguY2hhckNvZGVBdChpKTtcbiAgICAgICAgaWYgKGNvZGUgPT09IDQ3IC8qLyovKSB7XG4gICAgICAgICAgICAvLyBJZiB3ZSByZWFjaGVkIGEgcGF0aCBzZXBhcmF0b3IgdGhhdCB3YXMgbm90IHBhcnQgb2YgYSBzZXQgb2YgcGF0aFxuICAgICAgICAgICAgLy8gc2VwYXJhdG9ycyBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcsIHN0b3Agbm93XG4gICAgICAgICAgICBpZiAoIW1hdGNoZWRTbGFzaCkge1xuICAgICAgICAgICAgICBzdGFydCA9IGkgKyAxO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChmaXJzdE5vblNsYXNoRW5kID09PSAtMSkge1xuICAgICAgICAgICAgLy8gV2Ugc2F3IHRoZSBmaXJzdCBub24tcGF0aCBzZXBhcmF0b3IsIHJlbWVtYmVyIHRoaXMgaW5kZXggaW4gY2FzZVxuICAgICAgICAgICAgLy8gd2UgbmVlZCBpdCBpZiB0aGUgZXh0ZW5zaW9uIGVuZHMgdXAgbm90IG1hdGNoaW5nXG4gICAgICAgICAgICBtYXRjaGVkU2xhc2ggPSBmYWxzZTtcbiAgICAgICAgICAgIGZpcnN0Tm9uU2xhc2hFbmQgPSBpICsgMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGV4dElkeCA+PSAwKSB7XG4gICAgICAgICAgICAvLyBUcnkgdG8gbWF0Y2ggdGhlIGV4cGxpY2l0IGV4dGVuc2lvblxuICAgICAgICAgICAgaWYgKGNvZGUgPT09IGV4dC5jaGFyQ29kZUF0KGV4dElkeCkpIHtcbiAgICAgICAgICAgICAgaWYgKC0tZXh0SWR4ID09PSAtMSkge1xuICAgICAgICAgICAgICAgIC8vIFdlIG1hdGNoZWQgdGhlIGV4dGVuc2lvbiwgc28gbWFyayB0aGlzIGFzIHRoZSBlbmQgb2Ygb3VyIHBhdGhcbiAgICAgICAgICAgICAgICAvLyBjb21wb25lbnRcbiAgICAgICAgICAgICAgICBlbmQgPSBpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBFeHRlbnNpb24gZG9lcyBub3QgbWF0Y2gsIHNvIG91ciByZXN1bHQgaXMgdGhlIGVudGlyZSBwYXRoXG4gICAgICAgICAgICAgIC8vIGNvbXBvbmVudFxuICAgICAgICAgICAgICBleHRJZHggPSAtMTtcbiAgICAgICAgICAgICAgZW5kID0gZmlyc3ROb25TbGFzaEVuZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIGVuZCA9IGZpcnN0Tm9uU2xhc2hFbmQ7ZWxzZSBpZiAoZW5kID09PSAtMSkgZW5kID0gcGF0aC5sZW5ndGg7XG4gICAgICByZXR1cm4gcGF0aC5zbGljZShzdGFydCwgZW5kKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChpID0gcGF0aC5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICBpZiAocGF0aC5jaGFyQ29kZUF0KGkpID09PSA0NyAvKi8qLykge1xuICAgICAgICAgICAgLy8gSWYgd2UgcmVhY2hlZCBhIHBhdGggc2VwYXJhdG9yIHRoYXQgd2FzIG5vdCBwYXJ0IG9mIGEgc2V0IG9mIHBhdGhcbiAgICAgICAgICAgIC8vIHNlcGFyYXRvcnMgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLCBzdG9wIG5vd1xuICAgICAgICAgICAgaWYgKCFtYXRjaGVkU2xhc2gpIHtcbiAgICAgICAgICAgICAgc3RhcnQgPSBpICsgMTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChlbmQgPT09IC0xKSB7XG4gICAgICAgICAgLy8gV2Ugc2F3IHRoZSBmaXJzdCBub24tcGF0aCBzZXBhcmF0b3IsIG1hcmsgdGhpcyBhcyB0aGUgZW5kIG9mIG91clxuICAgICAgICAgIC8vIHBhdGggY29tcG9uZW50XG4gICAgICAgICAgbWF0Y2hlZFNsYXNoID0gZmFsc2U7XG4gICAgICAgICAgZW5kID0gaSArIDE7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGVuZCA9PT0gLTEpIHJldHVybiAnJztcbiAgICAgIHJldHVybiBwYXRoLnNsaWNlKHN0YXJ0LCBlbmQpO1xuICAgIH1cbiAgfSxcblxuICBleHRuYW1lOiBmdW5jdGlvbiBleHRuYW1lKHBhdGgpIHtcbiAgICBhc3NlcnRQYXRoKHBhdGgpO1xuICAgIHZhciBzdGFydERvdCA9IC0xO1xuICAgIHZhciBzdGFydFBhcnQgPSAwO1xuICAgIHZhciBlbmQgPSAtMTtcbiAgICB2YXIgbWF0Y2hlZFNsYXNoID0gdHJ1ZTtcbiAgICAvLyBUcmFjayB0aGUgc3RhdGUgb2YgY2hhcmFjdGVycyAoaWYgYW55KSB3ZSBzZWUgYmVmb3JlIG91ciBmaXJzdCBkb3QgYW5kXG4gICAgLy8gYWZ0ZXIgYW55IHBhdGggc2VwYXJhdG9yIHdlIGZpbmRcbiAgICB2YXIgcHJlRG90U3RhdGUgPSAwO1xuICAgIGZvciAodmFyIGkgPSBwYXRoLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICB2YXIgY29kZSA9IHBhdGguY2hhckNvZGVBdChpKTtcbiAgICAgIGlmIChjb2RlID09PSA0NyAvKi8qLykge1xuICAgICAgICAgIC8vIElmIHdlIHJlYWNoZWQgYSBwYXRoIHNlcGFyYXRvciB0aGF0IHdhcyBub3QgcGFydCBvZiBhIHNldCBvZiBwYXRoXG4gICAgICAgICAgLy8gc2VwYXJhdG9ycyBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcsIHN0b3Agbm93XG4gICAgICAgICAgaWYgKCFtYXRjaGVkU2xhc2gpIHtcbiAgICAgICAgICAgIHN0YXJ0UGFydCA9IGkgKyAxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICBpZiAoZW5kID09PSAtMSkge1xuICAgICAgICAvLyBXZSBzYXcgdGhlIGZpcnN0IG5vbi1wYXRoIHNlcGFyYXRvciwgbWFyayB0aGlzIGFzIHRoZSBlbmQgb2Ygb3VyXG4gICAgICAgIC8vIGV4dGVuc2lvblxuICAgICAgICBtYXRjaGVkU2xhc2ggPSBmYWxzZTtcbiAgICAgICAgZW5kID0gaSArIDE7XG4gICAgICB9XG4gICAgICBpZiAoY29kZSA9PT0gNDYgLyouKi8pIHtcbiAgICAgICAgICAvLyBJZiB0aGlzIGlzIG91ciBmaXJzdCBkb3QsIG1hcmsgaXQgYXMgdGhlIHN0YXJ0IG9mIG91ciBleHRlbnNpb25cbiAgICAgICAgICBpZiAoc3RhcnREb3QgPT09IC0xKVxuICAgICAgICAgICAgc3RhcnREb3QgPSBpO1xuICAgICAgICAgIGVsc2UgaWYgKHByZURvdFN0YXRlICE9PSAxKVxuICAgICAgICAgICAgcHJlRG90U3RhdGUgPSAxO1xuICAgICAgfSBlbHNlIGlmIChzdGFydERvdCAhPT0gLTEpIHtcbiAgICAgICAgLy8gV2Ugc2F3IGEgbm9uLWRvdCBhbmQgbm9uLXBhdGggc2VwYXJhdG9yIGJlZm9yZSBvdXIgZG90LCBzbyB3ZSBzaG91bGRcbiAgICAgICAgLy8gaGF2ZSBhIGdvb2QgY2hhbmNlIGF0IGhhdmluZyBhIG5vbi1lbXB0eSBleHRlbnNpb25cbiAgICAgICAgcHJlRG90U3RhdGUgPSAtMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3RhcnREb3QgPT09IC0xIHx8IGVuZCA9PT0gLTEgfHxcbiAgICAgICAgLy8gV2Ugc2F3IGEgbm9uLWRvdCBjaGFyYWN0ZXIgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBkb3RcbiAgICAgICAgcHJlRG90U3RhdGUgPT09IDAgfHxcbiAgICAgICAgLy8gVGhlIChyaWdodC1tb3N0KSB0cmltbWVkIHBhdGggY29tcG9uZW50IGlzIGV4YWN0bHkgJy4uJ1xuICAgICAgICBwcmVEb3RTdGF0ZSA9PT0gMSAmJiBzdGFydERvdCA9PT0gZW5kIC0gMSAmJiBzdGFydERvdCA9PT0gc3RhcnRQYXJ0ICsgMSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gcGF0aC5zbGljZShzdGFydERvdCwgZW5kKTtcbiAgfSxcblxuICBmb3JtYXQ6IGZ1bmN0aW9uIGZvcm1hdChwYXRoT2JqZWN0KSB7XG4gICAgaWYgKHBhdGhPYmplY3QgPT09IG51bGwgfHwgdHlwZW9mIHBhdGhPYmplY3QgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJwYXRoT2JqZWN0XCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIHBhdGhPYmplY3QpO1xuICAgIH1cbiAgICByZXR1cm4gX2Zvcm1hdCgnLycsIHBhdGhPYmplY3QpO1xuICB9LFxuXG4gIHBhcnNlOiBmdW5jdGlvbiBwYXJzZShwYXRoKSB7XG4gICAgYXNzZXJ0UGF0aChwYXRoKTtcblxuICAgIHZhciByZXQgPSB7IHJvb3Q6ICcnLCBkaXI6ICcnLCBiYXNlOiAnJywgZXh0OiAnJywgbmFtZTogJycgfTtcbiAgICBpZiAocGF0aC5sZW5ndGggPT09IDApIHJldHVybiByZXQ7XG4gICAgdmFyIGNvZGUgPSBwYXRoLmNoYXJDb2RlQXQoMCk7XG4gICAgdmFyIGlzQWJzb2x1dGUgPSBjb2RlID09PSA0NyAvKi8qLztcbiAgICB2YXIgc3RhcnQ7XG4gICAgaWYgKGlzQWJzb2x1dGUpIHtcbiAgICAgIHJldC5yb290ID0gJy8nO1xuICAgICAgc3RhcnQgPSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGFydCA9IDA7XG4gICAgfVxuICAgIHZhciBzdGFydERvdCA9IC0xO1xuICAgIHZhciBzdGFydFBhcnQgPSAwO1xuICAgIHZhciBlbmQgPSAtMTtcbiAgICB2YXIgbWF0Y2hlZFNsYXNoID0gdHJ1ZTtcbiAgICB2YXIgaSA9IHBhdGgubGVuZ3RoIC0gMTtcblxuICAgIC8vIFRyYWNrIHRoZSBzdGF0ZSBvZiBjaGFyYWN0ZXJzIChpZiBhbnkpIHdlIHNlZSBiZWZvcmUgb3VyIGZpcnN0IGRvdCBhbmRcbiAgICAvLyBhZnRlciBhbnkgcGF0aCBzZXBhcmF0b3Igd2UgZmluZFxuICAgIHZhciBwcmVEb3RTdGF0ZSA9IDA7XG5cbiAgICAvLyBHZXQgbm9uLWRpciBpbmZvXG4gICAgZm9yICg7IGkgPj0gc3RhcnQ7IC0taSkge1xuICAgICAgY29kZSA9IHBhdGguY2hhckNvZGVBdChpKTtcbiAgICAgIGlmIChjb2RlID09PSA0NyAvKi8qLykge1xuICAgICAgICAgIC8vIElmIHdlIHJlYWNoZWQgYSBwYXRoIHNlcGFyYXRvciB0aGF0IHdhcyBub3QgcGFydCBvZiBhIHNldCBvZiBwYXRoXG4gICAgICAgICAgLy8gc2VwYXJhdG9ycyBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcsIHN0b3Agbm93XG4gICAgICAgICAgaWYgKCFtYXRjaGVkU2xhc2gpIHtcbiAgICAgICAgICAgIHN0YXJ0UGFydCA9IGkgKyAxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICBpZiAoZW5kID09PSAtMSkge1xuICAgICAgICAvLyBXZSBzYXcgdGhlIGZpcnN0IG5vbi1wYXRoIHNlcGFyYXRvciwgbWFyayB0aGlzIGFzIHRoZSBlbmQgb2Ygb3VyXG4gICAgICAgIC8vIGV4dGVuc2lvblxuICAgICAgICBtYXRjaGVkU2xhc2ggPSBmYWxzZTtcbiAgICAgICAgZW5kID0gaSArIDE7XG4gICAgICB9XG4gICAgICBpZiAoY29kZSA9PT0gNDYgLyouKi8pIHtcbiAgICAgICAgICAvLyBJZiB0aGlzIGlzIG91ciBmaXJzdCBkb3QsIG1hcmsgaXQgYXMgdGhlIHN0YXJ0IG9mIG91ciBleHRlbnNpb25cbiAgICAgICAgICBpZiAoc3RhcnREb3QgPT09IC0xKSBzdGFydERvdCA9IGk7ZWxzZSBpZiAocHJlRG90U3RhdGUgIT09IDEpIHByZURvdFN0YXRlID0gMTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGFydERvdCAhPT0gLTEpIHtcbiAgICAgICAgLy8gV2Ugc2F3IGEgbm9uLWRvdCBhbmQgbm9uLXBhdGggc2VwYXJhdG9yIGJlZm9yZSBvdXIgZG90LCBzbyB3ZSBzaG91bGRcbiAgICAgICAgLy8gaGF2ZSBhIGdvb2QgY2hhbmNlIGF0IGhhdmluZyBhIG5vbi1lbXB0eSBleHRlbnNpb25cbiAgICAgICAgcHJlRG90U3RhdGUgPSAtMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3RhcnREb3QgPT09IC0xIHx8IGVuZCA9PT0gLTEgfHxcbiAgICAvLyBXZSBzYXcgYSBub24tZG90IGNoYXJhY3RlciBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIGRvdFxuICAgIHByZURvdFN0YXRlID09PSAwIHx8XG4gICAgLy8gVGhlIChyaWdodC1tb3N0KSB0cmltbWVkIHBhdGggY29tcG9uZW50IGlzIGV4YWN0bHkgJy4uJ1xuICAgIHByZURvdFN0YXRlID09PSAxICYmIHN0YXJ0RG90ID09PSBlbmQgLSAxICYmIHN0YXJ0RG90ID09PSBzdGFydFBhcnQgKyAxKSB7XG4gICAgICBpZiAoZW5kICE9PSAtMSkge1xuICAgICAgICBpZiAoc3RhcnRQYXJ0ID09PSAwICYmIGlzQWJzb2x1dGUpIHJldC5iYXNlID0gcmV0Lm5hbWUgPSBwYXRoLnNsaWNlKDEsIGVuZCk7ZWxzZSByZXQuYmFzZSA9IHJldC5uYW1lID0gcGF0aC5zbGljZShzdGFydFBhcnQsIGVuZCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChzdGFydFBhcnQgPT09IDAgJiYgaXNBYnNvbHV0ZSkge1xuICAgICAgICByZXQubmFtZSA9IHBhdGguc2xpY2UoMSwgc3RhcnREb3QpO1xuICAgICAgICByZXQuYmFzZSA9IHBhdGguc2xpY2UoMSwgZW5kKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldC5uYW1lID0gcGF0aC5zbGljZShzdGFydFBhcnQsIHN0YXJ0RG90KTtcbiAgICAgICAgcmV0LmJhc2UgPSBwYXRoLnNsaWNlKHN0YXJ0UGFydCwgZW5kKTtcbiAgICAgIH1cbiAgICAgIHJldC5leHQgPSBwYXRoLnNsaWNlKHN0YXJ0RG90LCBlbmQpO1xuICAgIH1cblxuICAgIGlmIChzdGFydFBhcnQgPiAwKSByZXQuZGlyID0gcGF0aC5zbGljZSgwLCBzdGFydFBhcnQgLSAxKTtlbHNlIGlmIChpc0Fic29sdXRlKSByZXQuZGlyID0gJy8nO1xuXG4gICAgcmV0dXJuIHJldDtcbiAgfSxcblxuICBzZXA6ICcvJyxcbiAgZGVsaW1pdGVyOiAnOicsXG4gIHdpbjMyOiBudWxsLFxuICBwb3NpeDogbnVsbFxufTtcblxucG9zaXgucG9zaXggPSBwb3NpeDtcblxubW9kdWxlLmV4cG9ydHMgPSBwb3NpeDtcbiIsICIvKiFcbiAqIG1pbWUtdHlwZXNcbiAqIENvcHlyaWdodChjKSAyMDE0IEpvbmF0aGFuIE9uZ1xuICogQ29weXJpZ2h0KGMpIDIwMTUgRG91Z2xhcyBDaHJpc3RvcGhlciBXaWxzb25cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbid1c2Ugc3RyaWN0J1xuXG4vKipcbiAqIE1vZHVsZSBkZXBlbmRlbmNpZXMuXG4gKiBAcHJpdmF0ZVxuICovXG5cbnZhciBkYiA9IHJlcXVpcmUoJ21pbWUtZGInKVxudmFyIGV4dG5hbWUgPSByZXF1aXJlKCdwYXRoJykuZXh0bmFtZVxuXG4vKipcbiAqIE1vZHVsZSB2YXJpYWJsZXMuXG4gKiBAcHJpdmF0ZVxuICovXG5cbnZhciBFWFRSQUNUX1RZUEVfUkVHRVhQID0gL15cXHMqKFteO1xcc10qKSg/Ojt8XFxzfCQpL1xudmFyIFRFWFRfVFlQRV9SRUdFWFAgPSAvXnRleHRcXC8vaVxuXG4vKipcbiAqIE1vZHVsZSBleHBvcnRzLlxuICogQHB1YmxpY1xuICovXG5cbmV4cG9ydHMuY2hhcnNldCA9IGNoYXJzZXRcbmV4cG9ydHMuY2hhcnNldHMgPSB7IGxvb2t1cDogY2hhcnNldCB9XG5leHBvcnRzLmNvbnRlbnRUeXBlID0gY29udGVudFR5cGVcbmV4cG9ydHMuZXh0ZW5zaW9uID0gZXh0ZW5zaW9uXG5leHBvcnRzLmV4dGVuc2lvbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpXG5leHBvcnRzLmxvb2t1cCA9IGxvb2t1cFxuZXhwb3J0cy50eXBlcyA9IE9iamVjdC5jcmVhdGUobnVsbClcblxuLy8gUG9wdWxhdGUgdGhlIGV4dGVuc2lvbnMvdHlwZXMgbWFwc1xucG9wdWxhdGVNYXBzKGV4cG9ydHMuZXh0ZW5zaW9ucywgZXhwb3J0cy50eXBlcylcblxuLyoqXG4gKiBHZXQgdGhlIGRlZmF1bHQgY2hhcnNldCBmb3IgYSBNSU1FIHR5cGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEByZXR1cm4ge2Jvb2xlYW58c3RyaW5nfVxuICovXG5cbmZ1bmN0aW9uIGNoYXJzZXQgKHR5cGUpIHtcbiAgaWYgKCF0eXBlIHx8IHR5cGVvZiB0eXBlICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gVE9ETzogdXNlIG1lZGlhLXR5cGVyXG4gIHZhciBtYXRjaCA9IEVYVFJBQ1RfVFlQRV9SRUdFWFAuZXhlYyh0eXBlKVxuICB2YXIgbWltZSA9IG1hdGNoICYmIGRiW21hdGNoWzFdLnRvTG93ZXJDYXNlKCldXG5cbiAgaWYgKG1pbWUgJiYgbWltZS5jaGFyc2V0KSB7XG4gICAgcmV0dXJuIG1pbWUuY2hhcnNldFxuICB9XG5cbiAgLy8gZGVmYXVsdCB0ZXh0LyogdG8gdXRmLThcbiAgaWYgKG1hdGNoICYmIFRFWFRfVFlQRV9SRUdFWFAudGVzdChtYXRjaFsxXSkpIHtcbiAgICByZXR1cm4gJ1VURi04J1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8qKlxuICogQ3JlYXRlIGEgZnVsbCBDb250ZW50LVR5cGUgaGVhZGVyIGdpdmVuIGEgTUlNRSB0eXBlIG9yIGV4dGVuc2lvbi5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKiBAcmV0dXJuIHtib29sZWFufHN0cmluZ31cbiAqL1xuXG5mdW5jdGlvbiBjb250ZW50VHlwZSAoc3RyKSB7XG4gIC8vIFRPRE86IHNob3VsZCB0aGlzIGV2ZW4gYmUgaW4gdGhpcyBtb2R1bGU/XG4gIGlmICghc3RyIHx8IHR5cGVvZiBzdHIgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICB2YXIgbWltZSA9IHN0ci5pbmRleE9mKCcvJykgPT09IC0xXG4gICAgPyBleHBvcnRzLmxvb2t1cChzdHIpXG4gICAgOiBzdHJcblxuICBpZiAoIW1pbWUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8vIFRPRE86IHVzZSBjb250ZW50LXR5cGUgb3Igb3RoZXIgbW9kdWxlXG4gIGlmIChtaW1lLmluZGV4T2YoJ2NoYXJzZXQnKSA9PT0gLTEpIHtcbiAgICB2YXIgY2hhcnNldCA9IGV4cG9ydHMuY2hhcnNldChtaW1lKVxuICAgIGlmIChjaGFyc2V0KSBtaW1lICs9ICc7IGNoYXJzZXQ9JyArIGNoYXJzZXQudG9Mb3dlckNhc2UoKVxuICB9XG5cbiAgcmV0dXJuIG1pbWVcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGRlZmF1bHQgZXh0ZW5zaW9uIGZvciBhIE1JTUUgdHlwZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHJldHVybiB7Ym9vbGVhbnxzdHJpbmd9XG4gKi9cblxuZnVuY3Rpb24gZXh0ZW5zaW9uICh0eXBlKSB7XG4gIGlmICghdHlwZSB8fCB0eXBlb2YgdHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8vIFRPRE86IHVzZSBtZWRpYS10eXBlclxuICB2YXIgbWF0Y2ggPSBFWFRSQUNUX1RZUEVfUkVHRVhQLmV4ZWModHlwZSlcblxuICAvLyBnZXQgZXh0ZW5zaW9uc1xuICB2YXIgZXh0cyA9IG1hdGNoICYmIGV4cG9ydHMuZXh0ZW5zaW9uc1ttYXRjaFsxXS50b0xvd2VyQ2FzZSgpXVxuXG4gIGlmICghZXh0cyB8fCAhZXh0cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHJldHVybiBleHRzWzBdXG59XG5cbi8qKlxuICogTG9va3VwIHRoZSBNSU1FIHR5cGUgZm9yIGEgZmlsZSBwYXRoL2V4dGVuc2lvbi5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICogQHJldHVybiB7Ym9vbGVhbnxzdHJpbmd9XG4gKi9cblxuZnVuY3Rpb24gbG9va3VwIChwYXRoKSB7XG4gIGlmICghcGF0aCB8fCB0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8vIGdldCB0aGUgZXh0ZW5zaW9uIChcImV4dFwiIG9yIFwiLmV4dFwiIG9yIGZ1bGwgcGF0aClcbiAgdmFyIGV4dGVuc2lvbiA9IGV4dG5hbWUoJ3guJyArIHBhdGgpXG4gICAgLnRvTG93ZXJDYXNlKClcbiAgICAuc3Vic3RyKDEpXG5cbiAgaWYgKCFleHRlbnNpb24pIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHJldHVybiBleHBvcnRzLnR5cGVzW2V4dGVuc2lvbl0gfHwgZmFsc2Vcbn1cblxuLyoqXG4gKiBQb3B1bGF0ZSB0aGUgZXh0ZW5zaW9ucyBhbmQgdHlwZXMgbWFwcy5cbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gcG9wdWxhdGVNYXBzIChleHRlbnNpb25zLCB0eXBlcykge1xuICAvLyBzb3VyY2UgcHJlZmVyZW5jZSAobGVhc3QgLT4gbW9zdClcbiAgdmFyIHByZWZlcmVuY2UgPSBbJ25naW54JywgJ2FwYWNoZScsIHVuZGVmaW5lZCwgJ2lhbmEnXVxuXG4gIE9iamVjdC5rZXlzKGRiKS5mb3JFYWNoKGZ1bmN0aW9uIGZvckVhY2hNaW1lVHlwZSAodHlwZSkge1xuICAgIHZhciBtaW1lID0gZGJbdHlwZV1cbiAgICB2YXIgZXh0cyA9IG1pbWUuZXh0ZW5zaW9uc1xuXG4gICAgaWYgKCFleHRzIHx8ICFleHRzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gbWltZSAtPiBleHRlbnNpb25zXG4gICAgZXh0ZW5zaW9uc1t0eXBlXSA9IGV4dHNcblxuICAgIC8vIGV4dGVuc2lvbiAtPiBtaW1lXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZXh0ZW5zaW9uID0gZXh0c1tpXVxuXG4gICAgICBpZiAodHlwZXNbZXh0ZW5zaW9uXSkge1xuICAgICAgICB2YXIgZnJvbSA9IHByZWZlcmVuY2UuaW5kZXhPZihkYlt0eXBlc1tleHRlbnNpb25dXS5zb3VyY2UpXG4gICAgICAgIHZhciB0byA9IHByZWZlcmVuY2UuaW5kZXhPZihtaW1lLnNvdXJjZSlcblxuICAgICAgICBpZiAodHlwZXNbZXh0ZW5zaW9uXSAhPT0gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScgJiZcbiAgICAgICAgICAoZnJvbSA+IHRvIHx8IChmcm9tID09PSB0byAmJiB0eXBlc1tleHRlbnNpb25dLnN1YnN0cigwLCAxMikgPT09ICdhcHBsaWNhdGlvbi8nKSkpIHtcbiAgICAgICAgICAvLyBza2lwIHRoZSByZW1hcHBpbmdcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIHNldCB0aGUgZXh0ZW5zaW9uIC0+IG1pbWVcbiAgICAgIHR5cGVzW2V4dGVuc2lvbl0gPSB0eXBlXG4gICAgfVxuICB9KVxufVxuIiwgIi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZ2xvYmFsYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsICYmIGdsb2JhbC5PYmplY3QgPT09IE9iamVjdCAmJiBnbG9iYWw7XG5cbm1vZHVsZS5leHBvcnRzID0gZnJlZUdsb2JhbDtcbiIsICJ2YXIgZnJlZUdsb2JhbCA9IHJlcXVpcmUoJy4vX2ZyZWVHbG9iYWwnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBzZWxmYC4gKi9cbnZhciBmcmVlU2VsZiA9IHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYgJiYgc2VsZi5PYmplY3QgPT09IE9iamVjdCAmJiBzZWxmO1xuXG4vKiogVXNlZCBhcyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdC4gKi9cbnZhciByb290ID0gZnJlZUdsb2JhbCB8fCBmcmVlU2VsZiB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJvb3Q7XG4iLCAidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIFN5bWJvbCA9IHJvb3QuU3ltYm9sO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN5bWJvbDtcbiIsICIvKipcbiAqIENvcGllcyB0aGUgdmFsdWVzIG9mIGBzb3VyY2VgIHRvIGBhcnJheWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IHNvdXJjZSBUaGUgYXJyYXkgdG8gY29weSB2YWx1ZXMgZnJvbS5cbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheT1bXV0gVGhlIGFycmF5IHRvIGNvcHkgdmFsdWVzIHRvLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGNvcHlBcnJheShzb3VyY2UsIGFycmF5KSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gc291cmNlLmxlbmd0aDtcblxuICBhcnJheSB8fCAoYXJyYXkgPSBBcnJheShsZW5ndGgpKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBhcnJheVtpbmRleF0gPSBzb3VyY2VbaW5kZXhdO1xuICB9XG4gIHJldHVybiBhcnJheTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb3B5QXJyYXk7XG4iLCAidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlR2V0VGFnYCB3aGljaCBpZ25vcmVzIGBTeW1ib2wudG9TdHJpbmdUYWdgIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSByYXcgYHRvU3RyaW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gZ2V0UmF3VGFnKHZhbHVlKSB7XG4gIHZhciBpc093biA9IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIHN5bVRvU3RyaW5nVGFnKSxcbiAgICAgIHRhZyA9IHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcblxuICB0cnkge1xuICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHVuZGVmaW5lZDtcbiAgICB2YXIgdW5tYXNrZWQgPSB0cnVlO1xuICB9IGNhdGNoIChlKSB7fVxuXG4gIHZhciByZXN1bHQgPSBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgaWYgKHVubWFza2VkKSB7XG4gICAgaWYgKGlzT3duKSB7XG4gICAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB0YWc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0UmF3VGFnO1xuIiwgIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKlxuICogVXNlZCB0byByZXNvbHZlIHRoZVxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBvZiB2YWx1ZXMuXG4gKi9cbnZhciBuYXRpdmVPYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcgdXNpbmcgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gb2JqZWN0VG9TdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG9iamVjdFRvU3RyaW5nO1xuIiwgInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKSxcbiAgICBnZXRSYXdUYWcgPSByZXF1aXJlKCcuL19nZXRSYXdUYWcnKSxcbiAgICBvYmplY3RUb1N0cmluZyA9IHJlcXVpcmUoJy4vX29iamVjdFRvU3RyaW5nJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBudWxsVGFnID0gJ1tvYmplY3QgTnVsbF0nLFxuICAgIHVuZGVmaW5lZFRhZyA9ICdbb2JqZWN0IFVuZGVmaW5lZF0nO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1Ub1N0cmluZ1RhZyA9IFN5bWJvbCA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2V0VGFnYCB3aXRob3V0IGZhbGxiYWNrcyBmb3IgYnVnZ3kgZW52aXJvbm1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGJhc2VHZXRUYWcodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZFRhZyA6IG51bGxUYWc7XG4gIH1cbiAgcmV0dXJuIChzeW1Ub1N0cmluZ1RhZyAmJiBzeW1Ub1N0cmluZ1RhZyBpbiBPYmplY3QodmFsdWUpKVxuICAgID8gZ2V0UmF3VGFnKHZhbHVlKVxuICAgIDogb2JqZWN0VG9TdHJpbmcodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VHZXRUYWc7XG4iLCAiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyB0aGVcbiAqIFtsYW5ndWFnZSB0eXBlXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtZWNtYXNjcmlwdC1sYW5ndWFnZS10eXBlcylcbiAqIG9mIGBPYmplY3RgLiAoZS5nLiBhcnJheXMsIGZ1bmN0aW9ucywgb2JqZWN0cywgcmVnZXhlcywgYG5ldyBOdW1iZXIoMClgLCBhbmQgYG5ldyBTdHJpbmcoJycpYClcbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdCh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmICh0eXBlID09ICdvYmplY3QnIHx8IHR5cGUgPT0gJ2Z1bmN0aW9uJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNPYmplY3Q7XG4iLCAidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0Jyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhc3luY1RhZyA9ICdbb2JqZWN0IEFzeW5jRnVuY3Rpb25dJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBnZW5UYWcgPSAnW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0nLFxuICAgIHByb3h5VGFnID0gJ1tvYmplY3QgUHJveHldJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYEZ1bmN0aW9uYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBmdW5jdGlvbiwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oXyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0Z1bmN0aW9uKC9hYmMvKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gVGhlIHVzZSBvZiBgT2JqZWN0I3RvU3RyaW5nYCBhdm9pZHMgaXNzdWVzIHdpdGggdGhlIGB0eXBlb2ZgIG9wZXJhdG9yXG4gIC8vIGluIFNhZmFyaSA5IHdoaWNoIHJldHVybnMgJ29iamVjdCcgZm9yIHR5cGVkIGFycmF5cyBhbmQgb3RoZXIgY29uc3RydWN0b3JzLlxuICB2YXIgdGFnID0gYmFzZUdldFRhZyh2YWx1ZSk7XG4gIHJldHVybiB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnIHx8IHRhZyA9PSBhc3luY1RhZyB8fCB0YWcgPT0gcHJveHlUYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGdW5jdGlvbjtcbiIsICJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG92ZXJyZWFjaGluZyBjb3JlLWpzIHNoaW1zLiAqL1xudmFyIGNvcmVKc0RhdGEgPSByb290WydfX2NvcmUtanNfc2hhcmVkX18nXTtcblxubW9kdWxlLmV4cG9ydHMgPSBjb3JlSnNEYXRhO1xuIiwgInZhciBjb3JlSnNEYXRhID0gcmVxdWlyZSgnLi9fY29yZUpzRGF0YScpO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgbWV0aG9kcyBtYXNxdWVyYWRpbmcgYXMgbmF0aXZlLiAqL1xudmFyIG1hc2tTcmNLZXkgPSAoZnVuY3Rpb24oKSB7XG4gIHZhciB1aWQgPSAvW14uXSskLy5leGVjKGNvcmVKc0RhdGEgJiYgY29yZUpzRGF0YS5rZXlzICYmIGNvcmVKc0RhdGEua2V5cy5JRV9QUk9UTyB8fCAnJyk7XG4gIHJldHVybiB1aWQgPyAoJ1N5bWJvbChzcmMpXzEuJyArIHVpZCkgOiAnJztcbn0oKSk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBmdW5jYCBoYXMgaXRzIHNvdXJjZSBtYXNrZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBmdW5jYCBpcyBtYXNrZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNNYXNrZWQoZnVuYykge1xuICByZXR1cm4gISFtYXNrU3JjS2V5ICYmIChtYXNrU3JjS2V5IGluIGZ1bmMpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTWFza2VkO1xuIiwgIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYGZ1bmNgIHRvIGl0cyBzb3VyY2UgY29kZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHNvdXJjZSBjb2RlLlxuICovXG5mdW5jdGlvbiB0b1NvdXJjZShmdW5jKSB7XG4gIGlmIChmdW5jICE9IG51bGwpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZ1bmNUb1N0cmluZy5jYWxsKGZ1bmMpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoZnVuYyArICcnKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICB9XG4gIHJldHVybiAnJztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b1NvdXJjZTtcbiIsICJ2YXIgaXNGdW5jdGlvbiA9IHJlcXVpcmUoJy4vaXNGdW5jdGlvbicpLFxuICAgIGlzTWFza2VkID0gcmVxdWlyZSgnLi9faXNNYXNrZWQnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKSxcbiAgICB0b1NvdXJjZSA9IHJlcXVpcmUoJy4vX3RvU291cmNlJyk7XG5cbi8qKlxuICogVXNlZCB0byBtYXRjaCBgUmVnRXhwYFxuICogW3N5bnRheCBjaGFyYWN0ZXJzXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wYXR0ZXJucykuXG4gKi9cbnZhciByZVJlZ0V4cENoYXIgPSAvW1xcXFxeJC4qKz8oKVtcXF17fXxdL2c7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBob3N0IGNvbnN0cnVjdG9ycyAoU2FmYXJpKS4gKi9cbnZhciByZUlzSG9zdEN0b3IgPSAvXlxcW29iamVjdCAuKz9Db25zdHJ1Y3RvclxcXSQvO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGlmIGEgbWV0aG9kIGlzIG5hdGl2ZS4gKi9cbnZhciByZUlzTmF0aXZlID0gUmVnRXhwKCdeJyArXG4gIGZ1bmNUb1N0cmluZy5jYWxsKGhhc093blByb3BlcnR5KS5yZXBsYWNlKHJlUmVnRXhwQ2hhciwgJ1xcXFwkJicpXG4gIC5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcXFxcKCl8IGZvciAuKz8oPz1cXFxcXFxdKS9nLCAnJDEuKj8nKSArICckJ1xuKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc05hdGl2ZWAgd2l0aG91dCBiYWQgc2hpbSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBuYXRpdmUgZnVuY3Rpb24sXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNOYXRpdmUodmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkgfHwgaXNNYXNrZWQodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBwYXR0ZXJuID0gaXNGdW5jdGlvbih2YWx1ZSkgPyByZUlzTmF0aXZlIDogcmVJc0hvc3RDdG9yO1xuICByZXR1cm4gcGF0dGVybi50ZXN0KHRvU291cmNlKHZhbHVlKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzTmF0aXZlO1xuIiwgIi8qKlxuICogR2V0cyB0aGUgdmFsdWUgYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGdldFZhbHVlKG9iamVjdCwga2V5KSB7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFZhbHVlO1xuIiwgInZhciBiYXNlSXNOYXRpdmUgPSByZXF1aXJlKCcuL19iYXNlSXNOYXRpdmUnKSxcbiAgICBnZXRWYWx1ZSA9IHJlcXVpcmUoJy4vX2dldFZhbHVlJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgbmF0aXZlIGZ1bmN0aW9uIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIG1ldGhvZCB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZnVuY3Rpb24gaWYgaXQncyBuYXRpdmUsIGVsc2UgYHVuZGVmaW5lZGAuXG4gKi9cbmZ1bmN0aW9uIGdldE5hdGl2ZShvYmplY3QsIGtleSkge1xuICB2YXIgdmFsdWUgPSBnZXRWYWx1ZShvYmplY3QsIGtleSk7XG4gIHJldHVybiBiYXNlSXNOYXRpdmUodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0TmF0aXZlO1xuIiwgInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgRGF0YVZpZXcgPSBnZXROYXRpdmUocm9vdCwgJ0RhdGFWaWV3Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gRGF0YVZpZXc7XG4iLCAidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBNYXAgPSBnZXROYXRpdmUocm9vdCwgJ01hcCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hcDtcbiIsICJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIFByb21pc2UgPSBnZXROYXRpdmUocm9vdCwgJ1Byb21pc2UnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBQcm9taXNlO1xuIiwgInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgU2V0ID0gZ2V0TmF0aXZlKHJvb3QsICdTZXQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTZXQ7XG4iLCAidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBXZWFrTWFwID0gZ2V0TmF0aXZlKHJvb3QsICdXZWFrTWFwJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gV2Vha01hcDtcbiIsICJ2YXIgRGF0YVZpZXcgPSByZXF1aXJlKCcuL19EYXRhVmlldycpLFxuICAgIE1hcCA9IHJlcXVpcmUoJy4vX01hcCcpLFxuICAgIFByb21pc2UgPSByZXF1aXJlKCcuL19Qcm9taXNlJyksXG4gICAgU2V0ID0gcmVxdWlyZSgnLi9fU2V0JyksXG4gICAgV2Vha01hcCA9IHJlcXVpcmUoJy4vX1dlYWtNYXAnKSxcbiAgICBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIHRvU291cmNlID0gcmVxdWlyZSgnLi9fdG9Tb3VyY2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nLFxuICAgIHByb21pc2VUYWcgPSAnW29iamVjdCBQcm9taXNlXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxudmFyIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1hcHMsIHNldHMsIGFuZCB3ZWFrbWFwcy4gKi9cbnZhciBkYXRhVmlld0N0b3JTdHJpbmcgPSB0b1NvdXJjZShEYXRhVmlldyksXG4gICAgbWFwQ3RvclN0cmluZyA9IHRvU291cmNlKE1hcCksXG4gICAgcHJvbWlzZUN0b3JTdHJpbmcgPSB0b1NvdXJjZShQcm9taXNlKSxcbiAgICBzZXRDdG9yU3RyaW5nID0gdG9Tb3VyY2UoU2V0KSxcbiAgICB3ZWFrTWFwQ3RvclN0cmluZyA9IHRvU291cmNlKFdlYWtNYXApO1xuXG4vKipcbiAqIEdldHMgdGhlIGB0b1N0cmluZ1RhZ2Agb2YgYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxuICovXG52YXIgZ2V0VGFnID0gYmFzZUdldFRhZztcblxuLy8gRmFsbGJhY2sgZm9yIGRhdGEgdmlld3MsIG1hcHMsIHNldHMsIGFuZCB3ZWFrIG1hcHMgaW4gSUUgMTEgYW5kIHByb21pc2VzIGluIE5vZGUuanMgPCA2LlxuaWYgKChEYXRhVmlldyAmJiBnZXRUYWcobmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcigxKSkpICE9IGRhdGFWaWV3VGFnKSB8fFxuICAgIChNYXAgJiYgZ2V0VGFnKG5ldyBNYXApICE9IG1hcFRhZykgfHxcbiAgICAoUHJvbWlzZSAmJiBnZXRUYWcoUHJvbWlzZS5yZXNvbHZlKCkpICE9IHByb21pc2VUYWcpIHx8XG4gICAgKFNldCAmJiBnZXRUYWcobmV3IFNldCkgIT0gc2V0VGFnKSB8fFxuICAgIChXZWFrTWFwICYmIGdldFRhZyhuZXcgV2Vha01hcCkgIT0gd2Vha01hcFRhZykpIHtcbiAgZ2V0VGFnID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICB2YXIgcmVzdWx0ID0gYmFzZUdldFRhZyh2YWx1ZSksXG4gICAgICAgIEN0b3IgPSByZXN1bHQgPT0gb2JqZWN0VGFnID8gdmFsdWUuY29uc3RydWN0b3IgOiB1bmRlZmluZWQsXG4gICAgICAgIGN0b3JTdHJpbmcgPSBDdG9yID8gdG9Tb3VyY2UoQ3RvcikgOiAnJztcblxuICAgIGlmIChjdG9yU3RyaW5nKSB7XG4gICAgICBzd2l0Y2ggKGN0b3JTdHJpbmcpIHtcbiAgICAgICAgY2FzZSBkYXRhVmlld0N0b3JTdHJpbmc6IHJldHVybiBkYXRhVmlld1RhZztcbiAgICAgICAgY2FzZSBtYXBDdG9yU3RyaW5nOiByZXR1cm4gbWFwVGFnO1xuICAgICAgICBjYXNlIHByb21pc2VDdG9yU3RyaW5nOiByZXR1cm4gcHJvbWlzZVRhZztcbiAgICAgICAgY2FzZSBzZXRDdG9yU3RyaW5nOiByZXR1cm4gc2V0VGFnO1xuICAgICAgICBjYXNlIHdlYWtNYXBDdG9yU3RyaW5nOiByZXR1cm4gd2Vha01hcFRhZztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRUYWc7XG4iLCAiLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGxlbmd0aC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgbG9vc2VseSBiYXNlZCBvblxuICogW2BUb0xlbmd0aGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXRvbGVuZ3RoKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGxlbmd0aCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzTGVuZ3RoKDMpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNMZW5ndGgoTnVtYmVyLk1JTl9WQUxVRSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNMZW5ndGgoSW5maW5pdHkpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzTGVuZ3RoKCczJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0xlbmd0aCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdudW1iZXInICYmXG4gICAgdmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8PSBNQVhfU0FGRV9JTlRFR0VSO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTGVuZ3RoO1xuIiwgInZhciBpc0Z1bmN0aW9uID0gcmVxdWlyZSgnLi9pc0Z1bmN0aW9uJyksXG4gICAgaXNMZW5ndGggPSByZXF1aXJlKCcuL2lzTGVuZ3RoJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZS4gQSB2YWx1ZSBpcyBjb25zaWRlcmVkIGFycmF5LWxpa2UgaWYgaXQnc1xuICogbm90IGEgZnVuY3Rpb24gYW5kIGhhcyBhIGB2YWx1ZS5sZW5ndGhgIHRoYXQncyBhbiBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiBvclxuICogZXF1YWwgdG8gYDBgIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYE51bWJlci5NQVhfU0FGRV9JTlRFR0VSYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoJ2FiYycpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIGlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkgJiYgIWlzRnVuY3Rpb24odmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJyYXlMaWtlO1xuIiwgIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhbiBgQXJyYXlgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXkoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXkoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheSgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJyYXk7XG4iLCAiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZS4gQSB2YWx1ZSBpcyBvYmplY3QtbGlrZSBpZiBpdCdzIG5vdCBgbnVsbGBcbiAqIGFuZCBoYXMgYSBgdHlwZW9mYCByZXN1bHQgb2YgXCJvYmplY3RcIi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBvYmplY3QtbGlrZSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZSh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0TGlrZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNPYmplY3RMaWtlO1xuIiwgInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXSc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTdHJpbmdgIHByaW1pdGl2ZSBvciBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzdHJpbmcsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1N0cmluZygnYWJjJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1N0cmluZygxKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHxcbiAgICAoIWlzQXJyYXkodmFsdWUpICYmIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gc3RyaW5nVGFnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1N0cmluZztcbiIsICIvKipcbiAqIENvbnZlcnRzIGBpdGVyYXRvcmAgdG8gYW4gYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBpdGVyYXRvciBUaGUgaXRlcmF0b3IgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY29udmVydGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBpdGVyYXRvclRvQXJyYXkoaXRlcmF0b3IpIHtcbiAgdmFyIGRhdGEsXG4gICAgICByZXN1bHQgPSBbXTtcblxuICB3aGlsZSAoIShkYXRhID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgcmVzdWx0LnB1c2goZGF0YS52YWx1ZSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpdGVyYXRvclRvQXJyYXk7XG4iLCAiLyoqXG4gKiBDb252ZXJ0cyBgbWFwYCB0byBpdHMga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUga2V5LXZhbHVlIHBhaXJzLlxuICovXG5mdW5jdGlvbiBtYXBUb0FycmF5KG1hcCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KG1hcC5zaXplKTtcblxuICBtYXAuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgcmVzdWx0WysraW5kZXhdID0gW2tleSwgdmFsdWVdO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBUb0FycmF5O1xuIiwgIi8qKlxuICogQ29udmVydHMgYHNldGAgdG8gYW4gYXJyYXkgb2YgaXRzIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNldCBUaGUgc2V0IHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gc2V0VG9BcnJheShzZXQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShzZXQuc2l6ZSk7XG5cbiAgc2V0LmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXN1bHRbKytpbmRleF0gPSB2YWx1ZTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0VG9BcnJheTtcbiIsICIvKipcbiAqIENvbnZlcnRzIGFuIEFTQ0lJIGBzdHJpbmdgIHRvIGFuIGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY29udmVydGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBhc2NpaVRvQXJyYXkoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcuc3BsaXQoJycpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFzY2lpVG9BcnJheTtcbiIsICIvKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgY2hhcmFjdGVyIGNsYXNzZXMuICovXG52YXIgcnNBc3RyYWxSYW5nZSA9ICdcXFxcdWQ4MDAtXFxcXHVkZmZmJyxcbiAgICByc0NvbWJvTWFya3NSYW5nZSA9ICdcXFxcdTAzMDAtXFxcXHUwMzZmJyxcbiAgICByZUNvbWJvSGFsZk1hcmtzUmFuZ2UgPSAnXFxcXHVmZTIwLVxcXFx1ZmUyZicsXG4gICAgcnNDb21ib1N5bWJvbHNSYW5nZSA9ICdcXFxcdTIwZDAtXFxcXHUyMGZmJyxcbiAgICByc0NvbWJvUmFuZ2UgPSByc0NvbWJvTWFya3NSYW5nZSArIHJlQ29tYm9IYWxmTWFya3NSYW5nZSArIHJzQ29tYm9TeW1ib2xzUmFuZ2UsXG4gICAgcnNWYXJSYW5nZSA9ICdcXFxcdWZlMGVcXFxcdWZlMGYnO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgY2FwdHVyZSBncm91cHMuICovXG52YXIgcnNaV0ogPSAnXFxcXHUyMDBkJztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IHN0cmluZ3Mgd2l0aCBbemVyby13aWR0aCBqb2luZXJzIG9yIGNvZGUgcG9pbnRzIGZyb20gdGhlIGFzdHJhbCBwbGFuZXNdKGh0dHA6Ly9lZXYuZWUvYmxvZy8yMDE1LzA5LzEyL2RhcmstY29ybmVycy1vZi11bmljb2RlLykuICovXG52YXIgcmVIYXNVbmljb2RlID0gUmVnRXhwKCdbJyArIHJzWldKICsgcnNBc3RyYWxSYW5nZSAgKyByc0NvbWJvUmFuZ2UgKyByc1ZhclJhbmdlICsgJ10nKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHN0cmluZ2AgY29udGFpbnMgVW5pY29kZSBzeW1ib2xzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhIHN5bWJvbCBpcyBmb3VuZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBoYXNVbmljb2RlKHN0cmluZykge1xuICByZXR1cm4gcmVIYXNVbmljb2RlLnRlc3Qoc3RyaW5nKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNVbmljb2RlO1xuIiwgIi8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSBjaGFyYWN0ZXIgY2xhc3Nlcy4gKi9cbnZhciByc0FzdHJhbFJhbmdlID0gJ1xcXFx1ZDgwMC1cXFxcdWRmZmYnLFxuICAgIHJzQ29tYm9NYXJrc1JhbmdlID0gJ1xcXFx1MDMwMC1cXFxcdTAzNmYnLFxuICAgIHJlQ29tYm9IYWxmTWFya3NSYW5nZSA9ICdcXFxcdWZlMjAtXFxcXHVmZTJmJyxcbiAgICByc0NvbWJvU3ltYm9sc1JhbmdlID0gJ1xcXFx1MjBkMC1cXFxcdTIwZmYnLFxuICAgIHJzQ29tYm9SYW5nZSA9IHJzQ29tYm9NYXJrc1JhbmdlICsgcmVDb21ib0hhbGZNYXJrc1JhbmdlICsgcnNDb21ib1N5bWJvbHNSYW5nZSxcbiAgICByc1ZhclJhbmdlID0gJ1xcXFx1ZmUwZVxcXFx1ZmUwZic7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSBjYXB0dXJlIGdyb3Vwcy4gKi9cbnZhciByc0FzdHJhbCA9ICdbJyArIHJzQXN0cmFsUmFuZ2UgKyAnXScsXG4gICAgcnNDb21ibyA9ICdbJyArIHJzQ29tYm9SYW5nZSArICddJyxcbiAgICByc0ZpdHogPSAnXFxcXHVkODNjW1xcXFx1ZGZmYi1cXFxcdWRmZmZdJyxcbiAgICByc01vZGlmaWVyID0gJyg/OicgKyByc0NvbWJvICsgJ3wnICsgcnNGaXR6ICsgJyknLFxuICAgIHJzTm9uQXN0cmFsID0gJ1teJyArIHJzQXN0cmFsUmFuZ2UgKyAnXScsXG4gICAgcnNSZWdpb25hbCA9ICcoPzpcXFxcdWQ4M2NbXFxcXHVkZGU2LVxcXFx1ZGRmZl0pezJ9JyxcbiAgICByc1N1cnJQYWlyID0gJ1tcXFxcdWQ4MDAtXFxcXHVkYmZmXVtcXFxcdWRjMDAtXFxcXHVkZmZmXScsXG4gICAgcnNaV0ogPSAnXFxcXHUyMDBkJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSB1bmljb2RlIHJlZ2V4ZXMuICovXG52YXIgcmVPcHRNb2QgPSByc01vZGlmaWVyICsgJz8nLFxuICAgIHJzT3B0VmFyID0gJ1snICsgcnNWYXJSYW5nZSArICddPycsXG4gICAgcnNPcHRKb2luID0gJyg/OicgKyByc1pXSiArICcoPzonICsgW3JzTm9uQXN0cmFsLCByc1JlZ2lvbmFsLCByc1N1cnJQYWlyXS5qb2luKCd8JykgKyAnKScgKyByc09wdFZhciArIHJlT3B0TW9kICsgJykqJyxcbiAgICByc1NlcSA9IHJzT3B0VmFyICsgcmVPcHRNb2QgKyByc09wdEpvaW4sXG4gICAgcnNTeW1ib2wgPSAnKD86JyArIFtyc05vbkFzdHJhbCArIHJzQ29tYm8gKyAnPycsIHJzQ29tYm8sIHJzUmVnaW9uYWwsIHJzU3VyclBhaXIsIHJzQXN0cmFsXS5qb2luKCd8JykgKyAnKSc7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIFtzdHJpbmcgc3ltYm9sc10oaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtdW5pY29kZSkuICovXG52YXIgcmVVbmljb2RlID0gUmVnRXhwKHJzRml0eiArICcoPz0nICsgcnNGaXR6ICsgJyl8JyArIHJzU3ltYm9sICsgcnNTZXEsICdnJyk7XG5cbi8qKlxuICogQ29udmVydHMgYSBVbmljb2RlIGBzdHJpbmdgIHRvIGFuIGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY29udmVydGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiB1bmljb2RlVG9BcnJheShzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZy5tYXRjaChyZVVuaWNvZGUpIHx8IFtdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHVuaWNvZGVUb0FycmF5O1xuIiwgInZhciBhc2NpaVRvQXJyYXkgPSByZXF1aXJlKCcuL19hc2NpaVRvQXJyYXknKSxcbiAgICBoYXNVbmljb2RlID0gcmVxdWlyZSgnLi9faGFzVW5pY29kZScpLFxuICAgIHVuaWNvZGVUb0FycmF5ID0gcmVxdWlyZSgnLi9fdW5pY29kZVRvQXJyYXknKTtcblxuLyoqXG4gKiBDb252ZXJ0cyBgc3RyaW5nYCB0byBhbiBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gc3RyaW5nVG9BcnJheShzdHJpbmcpIHtcbiAgcmV0dXJuIGhhc1VuaWNvZGUoc3RyaW5nKVxuICAgID8gdW5pY29kZVRvQXJyYXkoc3RyaW5nKVxuICAgIDogYXNjaWlUb0FycmF5KHN0cmluZyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RyaW5nVG9BcnJheTtcbiIsICIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5tYXBgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZVxuICogc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IG1hcHBlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlNYXAoYXJyYXksIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5TWFwO1xuIiwgInZhciBhcnJheU1hcCA9IHJlcXVpcmUoJy4vX2FycmF5TWFwJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udmFsdWVzYCBhbmQgYF8udmFsdWVzSW5gIHdoaWNoIGNyZWF0ZXMgYW5cbiAqIGFycmF5IG9mIGBvYmplY3RgIHByb3BlcnR5IHZhbHVlcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBwcm9wZXJ0eSBuYW1lc1xuICogb2YgYHByb3BzYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheX0gcHJvcHMgVGhlIHByb3BlcnR5IG5hbWVzIHRvIGdldCB2YWx1ZXMgZm9yLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBiYXNlVmFsdWVzKG9iamVjdCwgcHJvcHMpIHtcbiAgcmV0dXJuIGFycmF5TWFwKHByb3BzLCBmdW5jdGlvbihrZXkpIHtcbiAgICByZXR1cm4gb2JqZWN0W2tleV07XG4gIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VWYWx1ZXM7XG4iLCAiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50aW1lc2Agd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzXG4gKiBvciBtYXggYXJyYXkgbGVuZ3RoIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiB0aW1lcyB0byBpbnZva2UgYGl0ZXJhdGVlYC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHJlc3VsdHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VUaW1lcyhuLCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KG4pO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbikge1xuICAgIHJlc3VsdFtpbmRleF0gPSBpdGVyYXRlZShpbmRleCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVGltZXM7XG4iLCAidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0FyZ3VtZW50c2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LFxuICovXG5mdW5jdGlvbiBiYXNlSXNBcmd1bWVudHModmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gYXJnc1RhZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNBcmd1bWVudHM7XG4iLCAidmFyIGJhc2VJc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vX2Jhc2VJc0FyZ3VtZW50cycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGFuIGBhcmd1bWVudHNgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FyZ3VtZW50cyA9IGJhc2VJc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA/IGJhc2VJc0FyZ3VtZW50cyA6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdjYWxsZWUnKSAmJlxuICAgICFwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHZhbHVlLCAnY2FsbGVlJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJndW1lbnRzO1xuIiwgIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyBgZmFsc2VgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4xMy4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50aW1lcygyLCBfLnN0dWJGYWxzZSk7XG4gKiAvLyA9PiBbZmFsc2UsIGZhbHNlXVxuICovXG5mdW5jdGlvbiBzdHViRmFsc2UoKSB7XG4gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHViRmFsc2U7XG4iLCAidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290JyksXG4gICAgc3R1YkZhbHNlID0gcmVxdWlyZSgnLi9zdHViRmFsc2UnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcblxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBCdWZmZXIgPSBtb2R1bGVFeHBvcnRzID8gcm9vdC5CdWZmZXIgOiB1bmRlZmluZWQ7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVJc0J1ZmZlciA9IEJ1ZmZlciA/IEJ1ZmZlci5pc0J1ZmZlciA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIGJ1ZmZlci5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMy4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGJ1ZmZlciwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQnVmZmVyKG5ldyBCdWZmZXIoMikpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNCdWZmZXIobmV3IFVpbnQ4QXJyYXkoMikpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQnVmZmVyID0gbmF0aXZlSXNCdWZmZXIgfHwgc3R1YkZhbHNlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQnVmZmVyO1xuIiwgIi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgdW5zaWduZWQgaW50ZWdlciB2YWx1ZXMuICovXG52YXIgcmVJc1VpbnQgPSAvXig/OjB8WzEtOV1cXGQqKSQvO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBpbmRleC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aD1NQVhfU0FGRV9JTlRFR0VSXSBUaGUgdXBwZXIgYm91bmRzIG9mIGEgdmFsaWQgaW5kZXguXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGluZGV4LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzSW5kZXgodmFsdWUsIGxlbmd0aCkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgbGVuZ3RoID0gbGVuZ3RoID09IG51bGwgPyBNQVhfU0FGRV9JTlRFR0VSIDogbGVuZ3RoO1xuXG4gIHJldHVybiAhIWxlbmd0aCAmJlxuICAgICh0eXBlID09ICdudW1iZXInIHx8XG4gICAgICAodHlwZSAhPSAnc3ltYm9sJyAmJiByZUlzVWludC50ZXN0KHZhbHVlKSkpICYmXG4gICAgICAgICh2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDwgbGVuZ3RoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0luZGV4O1xuIiwgInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzTGVuZ3RoID0gcmVxdWlyZSgnLi9pc0xlbmd0aCcpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XScsXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgIGZsb2F0NjRUYWcgPSAnW29iamVjdCBGbG9hdDY0QXJyYXldJyxcbiAgICBpbnQ4VGFnID0gJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgaW50MzJUYWcgPSAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgdWludDhUYWcgPSAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICB1aW50MTZUYWcgPSAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgIHVpbnQzMlRhZyA9ICdbb2JqZWN0IFVpbnQzMkFycmF5XSc7XG5cbi8qKiBVc2VkIHRvIGlkZW50aWZ5IGB0b1N0cmluZ1RhZ2AgdmFsdWVzIG9mIHR5cGVkIGFycmF5cy4gKi9cbnZhciB0eXBlZEFycmF5VGFncyA9IHt9O1xudHlwZWRBcnJheVRhZ3NbZmxvYXQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1tmbG9hdDY0VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQ4VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2ludDE2VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50OFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDhDbGFtcGVkVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQxNlRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDMyVGFnXSA9IHRydWU7XG50eXBlZEFycmF5VGFnc1thcmdzVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2FycmF5VGFnXSA9XG50eXBlZEFycmF5VGFnc1thcnJheUJ1ZmZlclRhZ10gPSB0eXBlZEFycmF5VGFnc1tib29sVGFnXSA9XG50eXBlZEFycmF5VGFnc1tkYXRhVmlld1RhZ10gPSB0eXBlZEFycmF5VGFnc1tkYXRlVGFnXSA9XG50eXBlZEFycmF5VGFnc1tlcnJvclRhZ10gPSB0eXBlZEFycmF5VGFnc1tmdW5jVGFnXSA9XG50eXBlZEFycmF5VGFnc1ttYXBUYWddID0gdHlwZWRBcnJheVRhZ3NbbnVtYmVyVGFnXSA9XG50eXBlZEFycmF5VGFnc1tvYmplY3RUYWddID0gdHlwZWRBcnJheVRhZ3NbcmVnZXhwVGFnXSA9XG50eXBlZEFycmF5VGFnc1tzZXRUYWddID0gdHlwZWRBcnJheVRhZ3Nbc3RyaW5nVGFnXSA9XG50eXBlZEFycmF5VGFnc1t3ZWFrTWFwVGFnXSA9IGZhbHNlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzVHlwZWRBcnJheWAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNUeXBlZEFycmF5KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmXG4gICAgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhIXR5cGVkQXJyYXlUYWdzW2Jhc2VHZXRUYWcodmFsdWUpXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNUeXBlZEFycmF5O1xuIiwgIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5hcnlgIHdpdGhvdXQgc3VwcG9ydCBmb3Igc3RvcmluZyBtZXRhZGF0YS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2FwIGFyZ3VtZW50cyBmb3IuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VVbmFyeShmdW5jKSB7XG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiBmdW5jKHZhbHVlKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVW5hcnk7XG4iLCAidmFyIGZyZWVHbG9iYWwgPSByZXF1aXJlKCcuL19mcmVlR2xvYmFsJyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBwcm9jZXNzYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZVByb2Nlc3MgPSBtb2R1bGVFeHBvcnRzICYmIGZyZWVHbG9iYWwucHJvY2VzcztcblxuLyoqIFVzZWQgdG8gYWNjZXNzIGZhc3RlciBOb2RlLmpzIGhlbHBlcnMuICovXG52YXIgbm9kZVV0aWwgPSAoZnVuY3Rpb24oKSB7XG4gIHRyeSB7XG4gICAgLy8gVXNlIGB1dGlsLnR5cGVzYCBmb3IgTm9kZS5qcyAxMCsuXG4gICAgdmFyIHR5cGVzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLnJlcXVpcmUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlKCd1dGlsJykudHlwZXM7XG5cbiAgICBpZiAodHlwZXMpIHtcbiAgICAgIHJldHVybiB0eXBlcztcbiAgICB9XG5cbiAgICAvLyBMZWdhY3kgYHByb2Nlc3MuYmluZGluZygndXRpbCcpYCBmb3IgTm9kZS5qcyA8IDEwLlxuICAgIHJldHVybiBmcmVlUHJvY2VzcyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nICYmIGZyZWVQcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKTtcbiAgfSBjYXRjaCAoZSkge31cbn0oKSk7XG5cbm1vZHVsZS5leHBvcnRzID0gbm9kZVV0aWw7XG4iLCAidmFyIGJhc2VJc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL19iYXNlSXNUeXBlZEFycmF5JyksXG4gICAgYmFzZVVuYXJ5ID0gcmVxdWlyZSgnLi9fYmFzZVVuYXJ5JyksXG4gICAgbm9kZVV0aWwgPSByZXF1aXJlKCcuL19ub2RlVXRpbCcpO1xuXG4vKiBOb2RlLmpzIGhlbHBlciByZWZlcmVuY2VzLiAqL1xudmFyIG5vZGVJc1R5cGVkQXJyYXkgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc1R5cGVkQXJyYXk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIHR5cGVkIGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1R5cGVkQXJyYXkobmV3IFVpbnQ4QXJyYXkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNUeXBlZEFycmF5KFtdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc1R5cGVkQXJyYXkgPSBub2RlSXNUeXBlZEFycmF5ID8gYmFzZVVuYXJ5KG5vZGVJc1R5cGVkQXJyYXkpIDogYmFzZUlzVHlwZWRBcnJheTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc1R5cGVkQXJyYXk7XG4iLCAidmFyIGJhc2VUaW1lcyA9IHJlcXVpcmUoJy4vX2Jhc2VUaW1lcycpLFxuICAgIGlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9pc0FyZ3VtZW50cycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0J1ZmZlciA9IHJlcXVpcmUoJy4vaXNCdWZmZXInKSxcbiAgICBpc0luZGV4ID0gcmVxdWlyZSgnLi9faXNJbmRleCcpLFxuICAgIGlzVHlwZWRBcnJheSA9IHJlcXVpcmUoJy4vaXNUeXBlZEFycmF5Jyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiB0aGUgYXJyYXktbGlrZSBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5oZXJpdGVkIFNwZWNpZnkgcmV0dXJuaW5nIGluaGVyaXRlZCBwcm9wZXJ0eSBuYW1lcy5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGFycmF5TGlrZUtleXModmFsdWUsIGluaGVyaXRlZCkge1xuICB2YXIgaXNBcnIgPSBpc0FycmF5KHZhbHVlKSxcbiAgICAgIGlzQXJnID0gIWlzQXJyICYmIGlzQXJndW1lbnRzKHZhbHVlKSxcbiAgICAgIGlzQnVmZiA9ICFpc0FyciAmJiAhaXNBcmcgJiYgaXNCdWZmZXIodmFsdWUpLFxuICAgICAgaXNUeXBlID0gIWlzQXJyICYmICFpc0FyZyAmJiAhaXNCdWZmICYmIGlzVHlwZWRBcnJheSh2YWx1ZSksXG4gICAgICBza2lwSW5kZXhlcyA9IGlzQXJyIHx8IGlzQXJnIHx8IGlzQnVmZiB8fCBpc1R5cGUsXG4gICAgICByZXN1bHQgPSBza2lwSW5kZXhlcyA/IGJhc2VUaW1lcyh2YWx1ZS5sZW5ndGgsIFN0cmluZykgOiBbXSxcbiAgICAgIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7XG5cbiAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgaWYgKChpbmhlcml0ZWQgfHwgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwga2V5KSkgJiZcbiAgICAgICAgIShza2lwSW5kZXhlcyAmJiAoXG4gICAgICAgICAgIC8vIFNhZmFyaSA5IGhhcyBlbnVtZXJhYmxlIGBhcmd1bWVudHMubGVuZ3RoYCBpbiBzdHJpY3QgbW9kZS5cbiAgICAgICAgICAga2V5ID09ICdsZW5ndGgnIHx8XG4gICAgICAgICAgIC8vIE5vZGUuanMgMC4xMCBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiBidWZmZXJzLlxuICAgICAgICAgICAoaXNCdWZmICYmIChrZXkgPT0gJ29mZnNldCcgfHwga2V5ID09ICdwYXJlbnQnKSkgfHxcbiAgICAgICAgICAgLy8gUGhhbnRvbUpTIDIgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gdHlwZWQgYXJyYXlzLlxuICAgICAgICAgICAoaXNUeXBlICYmIChrZXkgPT0gJ2J1ZmZlcicgfHwga2V5ID09ICdieXRlTGVuZ3RoJyB8fCBrZXkgPT0gJ2J5dGVPZmZzZXQnKSkgfHxcbiAgICAgICAgICAgLy8gU2tpcCBpbmRleCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICBpc0luZGV4KGtleSwgbGVuZ3RoKVxuICAgICAgICApKSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUxpa2VLZXlzO1xuIiwgIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGEgcHJvdG90eXBlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3RvdHlwZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc1Byb3RvdHlwZSh2YWx1ZSkge1xuICB2YXIgQ3RvciA9IHZhbHVlICYmIHZhbHVlLmNvbnN0cnVjdG9yLFxuICAgICAgcHJvdG8gPSAodHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yLnByb3RvdHlwZSkgfHwgb2JqZWN0UHJvdG87XG5cbiAgcmV0dXJuIHZhbHVlID09PSBwcm90bztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1Byb3RvdHlwZTtcbiIsICIvKipcbiAqIENyZWF0ZXMgYSB1bmFyeSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggaXRzIGFyZ3VtZW50IHRyYW5zZm9ybWVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNmb3JtIFRoZSBhcmd1bWVudCB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlckFyZyhmdW5jLCB0cmFuc2Zvcm0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiBmdW5jKHRyYW5zZm9ybShhcmcpKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvdmVyQXJnO1xuIiwgInZhciBvdmVyQXJnID0gcmVxdWlyZSgnLi9fb3ZlckFyZycpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlS2V5cyA9IG92ZXJBcmcoT2JqZWN0LmtleXMsIE9iamVjdCk7XG5cbm1vZHVsZS5leHBvcnRzID0gbmF0aXZlS2V5cztcbiIsICJ2YXIgaXNQcm90b3R5cGUgPSByZXF1aXJlKCcuL19pc1Byb3RvdHlwZScpLFxuICAgIG5hdGl2ZUtleXMgPSByZXF1aXJlKCcuL19uYXRpdmVLZXlzJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ua2V5c2Agd2hpY2ggZG9lc24ndCB0cmVhdCBzcGFyc2UgYXJyYXlzIGFzIGRlbnNlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBiYXNlS2V5cyhvYmplY3QpIHtcbiAgaWYgKCFpc1Byb3RvdHlwZShvYmplY3QpKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUtleXMob2JqZWN0KTtcbiAgfVxuICB2YXIgcmVzdWx0ID0gW107XG4gIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSAmJiBrZXkgIT0gJ2NvbnN0cnVjdG9yJykge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlS2V5cztcbiIsICJ2YXIgYXJyYXlMaWtlS2V5cyA9IHJlcXVpcmUoJy4vX2FycmF5TGlrZUtleXMnKSxcbiAgICBiYXNlS2V5cyA9IHJlcXVpcmUoJy4vX2Jhc2VLZXlzJyksXG4gICAgaXNBcnJheUxpa2UgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYG9iamVjdGAuXG4gKlxuICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuIFNlZSB0aGVcbiAqIFtFUyBzcGVjXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3Qua2V5cylcbiAqIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy5rZXlzKG5ldyBGb28pO1xuICogLy8gPT4gWydhJywgJ2InXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICpcbiAqIF8ua2V5cygnaGknKTtcbiAqIC8vID0+IFsnMCcsICcxJ11cbiAqL1xuZnVuY3Rpb24ga2V5cyhvYmplY3QpIHtcbiAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iamVjdCkgPyBhcnJheUxpa2VLZXlzKG9iamVjdCkgOiBiYXNlS2V5cyhvYmplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGtleXM7XG4iLCAidmFyIGJhc2VWYWx1ZXMgPSByZXF1aXJlKCcuL19iYXNlVmFsdWVzJyksXG4gICAga2V5cyA9IHJlcXVpcmUoJy4va2V5cycpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0eSB2YWx1ZXMgb2YgYG9iamVjdGAuXG4gKlxuICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSB2YWx1ZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8udmFsdWVzKG5ldyBGb28pO1xuICogLy8gPT4gWzEsIDJdIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gKlxuICogXy52YWx1ZXMoJ2hpJyk7XG4gKiAvLyA9PiBbJ2gnLCAnaSddXG4gKi9cbmZ1bmN0aW9uIHZhbHVlcyhvYmplY3QpIHtcbiAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gW10gOiBiYXNlVmFsdWVzKG9iamVjdCwga2V5cyhvYmplY3QpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB2YWx1ZXM7XG4iLCAidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpLFxuICAgIGNvcHlBcnJheSA9IHJlcXVpcmUoJy4vX2NvcHlBcnJheScpLFxuICAgIGdldFRhZyA9IHJlcXVpcmUoJy4vX2dldFRhZycpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpLFxuICAgIGlzU3RyaW5nID0gcmVxdWlyZSgnLi9pc1N0cmluZycpLFxuICAgIGl0ZXJhdG9yVG9BcnJheSA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9yVG9BcnJheScpLFxuICAgIG1hcFRvQXJyYXkgPSByZXF1aXJlKCcuL19tYXBUb0FycmF5JyksXG4gICAgc2V0VG9BcnJheSA9IHJlcXVpcmUoJy4vX3NldFRvQXJyYXknKSxcbiAgICBzdHJpbmdUb0FycmF5ID0gcmVxdWlyZSgnLi9fc3RyaW5nVG9BcnJheScpLFxuICAgIHZhbHVlcyA9IHJlcXVpcmUoJy4vdmFsdWVzJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltSXRlcmF0b3IgPSBTeW1ib2wgPyBTeW1ib2wuaXRlcmF0b3IgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhbiBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY29udmVydGVkIGFycmF5LlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvQXJyYXkoeyAnYSc6IDEsICdiJzogMiB9KTtcbiAqIC8vID0+IFsxLCAyXVxuICpcbiAqIF8udG9BcnJheSgnYWJjJyk7XG4gKiAvLyA9PiBbJ2EnLCAnYicsICdjJ11cbiAqXG4gKiBfLnRvQXJyYXkoMSk7XG4gKiAvLyA9PiBbXVxuICpcbiAqIF8udG9BcnJheShudWxsKTtcbiAqIC8vID0+IFtdXG4gKi9cbmZ1bmN0aW9uIHRvQXJyYXkodmFsdWUpIHtcbiAgaWYgKCF2YWx1ZSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBpZiAoaXNBcnJheUxpa2UodmFsdWUpKSB7XG4gICAgcmV0dXJuIGlzU3RyaW5nKHZhbHVlKSA/IHN0cmluZ1RvQXJyYXkodmFsdWUpIDogY29weUFycmF5KHZhbHVlKTtcbiAgfVxuICBpZiAoc3ltSXRlcmF0b3IgJiYgdmFsdWVbc3ltSXRlcmF0b3JdKSB7XG4gICAgcmV0dXJuIGl0ZXJhdG9yVG9BcnJheSh2YWx1ZVtzeW1JdGVyYXRvcl0oKSk7XG4gIH1cbiAgdmFyIHRhZyA9IGdldFRhZyh2YWx1ZSksXG4gICAgICBmdW5jID0gdGFnID09IG1hcFRhZyA/IG1hcFRvQXJyYXkgOiAodGFnID09IHNldFRhZyA/IHNldFRvQXJyYXkgOiB2YWx1ZXMpO1xuXG4gIHJldHVybiBmdW5jKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b0FycmF5O1xuIiwgIi8qanNsaW50IG5vZGU6IHRydWUqL1xudmFyIHRvQXJyYXkgPSByZXF1aXJlKCdsb2Rhc2gvdG9BcnJheScpO1xudmFyIGVtb2ppQnlOYW1lID0gcmVxdWlyZSgnLi9lbW9qaS5qc29uJyk7XG5cblwidXNlIHN0cmljdFwiO1xuXG4vKipcbiAqIHJlZ2V4IHRvIHBhcnNlIGVtb2ppIGluIGEgc3RyaW5nIC0gZmluZHMgZW1vamksIGUuZy4gOmNvZmZlZTpcbiAqL1xudmFyIGVtb2ppTmFtZVJlZ2V4ID0gLzooW2EtekEtWjAtOV9cXC1cXCtdKyk6L2c7XG5cbi8qKlxuICogcmVnZXggdG8gdHJpbSB3aGl0ZXNwYWNlXG4gKiB1c2UgaW5zdGVhZCBvZiBTdHJpbmcucHJvdG90eXBlLnRyaW0oKSBmb3IgSUU4IHN1cHBvcnRcbiAqL1xudmFyIHRyaW1TcGFjZVJlZ2V4ID0gL15bXFxzXFx1RkVGRlxceEEwXSt8W1xcc1xcdUZFRkZcXHhBMF0rJC9nO1xuXG4vKipcbiAqIFJlbW92ZXMgY29sb25zIG9uIGVpdGhlciBzaWRlXG4gKiBvZiB0aGUgc3RyaW5nIGlmIHByZXNlbnRcbiAqIEBwYXJhbSAge3N0cmluZ30gc3RyXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIHN0cmlwQ29sb25zIChzdHIpIHtcbiAgdmFyIGNvbG9uSW5kZXggPSBzdHIuaW5kZXhPZignOicpO1xuICBpZiAoY29sb25JbmRleCA+IC0xKSB7XG4gICAgLy8gOmVtb2ppOiAoaHR0cDovL3d3dy5lbW9qaS1jaGVhdC1zaGVldC5jb20vKVxuICAgIGlmIChjb2xvbkluZGV4ID09PSBzdHIubGVuZ3RoIC0gMSkge1xuICAgICAgc3RyID0gc3RyLnN1YnN0cmluZygwLCBjb2xvbkluZGV4KTtcbiAgICAgIHJldHVybiBzdHJpcENvbG9ucyhzdHIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHIgPSBzdHIuc3Vic3RyKGNvbG9uSW5kZXggKyAxKTtcbiAgICAgIHJldHVybiBzdHJpcENvbG9ucyhzdHIpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdHI7XG59XG5cbi8qKlxuICogQWRkcyBjb2xvbnMgdG8gZWl0aGVyIHNpZGVcbiAqIG9mIHRoZSBzdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gd3JhcENvbG9ucyAoc3RyKSB7XG4gIHJldHVybiAodHlwZW9mIHN0ciA9PT0gJ3N0cmluZycgJiYgc3RyLmxlbmd0aCA+IDApID8gJzonICsgc3RyICsgJzonIDogc3RyO1xufVxuXG4vKipcbiAqIEVuc3VyZSB0aGF0IHRoZSB3b3JkIGlzIHdyYXBwZWQgaW4gY29sb25zXG4gKiBieSBvbmx5IGFkZGluZyB0aGVtLCBpZiB0aGV5IGFyZSBub3QgdGhlcmUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGVuc3VyZUNvbG9ucyAoc3RyKSB7XG4gIHJldHVybiAodHlwZW9mIHN0ciA9PT0gJ3N0cmluZycgJiYgc3RyWzBdICE9PSAnOicpID8gd3JhcENvbG9ucyhzdHIpIDogc3RyO1xufVxuXG4vLyBOb24gc3BhY2luZyBtYXJrLCBzb21lIGVtb3RpY29ucyBoYXZlIHRoZW0uIEl0J3MgdGhlICdWYXJpYW50IEZvcm0nLFxuLy8gd2hpY2ggcHJvdmlkZXMgbW9yZSBpbmZvcm1hdGlvbiBzbyB0aGF0IGVtb3RpY29ucyBjYW4gYmUgcmVuZGVyZWQgYXNcbi8vIG1vcmUgY29sb3JmdWwgZ3JhcGhpY3MuIEZFMEUgaXMgYSB1bmljb2RlIHRleHQgdmVyc2lvbiwgd2hlcmUgYXMgRkUwRlxuLy8gc2hvdWxkIGJlIHJlbmRlcmVkIGFzIGEgZ3JhcGhpY2FsIHZlcnNpb24uIFRoZSBjb2RlIGdyYWNlZnVsbHkgZGVncmFkZXMuXG52YXIgTk9OX1NQQUNJTkdfTUFSSyA9IFN0cmluZy5mcm9tQ2hhckNvZGUoNjUwMzkpOyAvLyA2NTAzOSAtICdcdUZFMEYnIC0gMHhGRTBGO1xudmFyIG5vblNwYWNpbmdSZWdleCA9IG5ldyBSZWdFeHAoTk9OX1NQQUNJTkdfTUFSSywgJ2cnKVxuXG4vLyBSZW1vdmUgdGhlIG5vbi1zcGFjaW5nLW1hcmsgZnJvbSB0aGUgY29kZSwgbmV2ZXIgc2VuZCBhIHN0cmlwcGVkIHZlcnNpb25cbi8vIHRvIHRoZSBjbGllbnQsIGFzIGl0IGtpbGxzIGdyYXBoaWNhbCBlbW90aWNvbnMuXG5mdW5jdGlvbiBzdHJpcE5TQiAoY29kZSkge1xuICByZXR1cm4gY29kZS5yZXBsYWNlKG5vblNwYWNpbmdSZWdleCwgJycpO1xufTtcblxuLy8gUmV2ZXJzZWQgaGFzaCB0YWJsZSwgd2hlcmUgYXMgZW1vamlCeU5hbWUgY29udGFpbnMgYSB7IGhlYXJ0OiAnXHUyNzY0JyB9XG4vLyBkaWN0aW9uYXJ5IGVtb2ppQnlDb2RlIGNvbnRhaW5zIHsgXHUyNzY0OiAnaGVhcnQnIH0uIFRoZSBjb2RlcyBhcmUgbm9ybWFsaXplZFxuLy8gdG8gdGhlIHRleHQgdmVyc2lvbi5cbnZhciBlbW9qaUJ5Q29kZSA9IE9iamVjdC5rZXlzKGVtb2ppQnlOYW1lKS5yZWR1Y2UoZnVuY3Rpb24oaCxrKSB7XG4gIGhbc3RyaXBOU0IoZW1vamlCeU5hbWVba10pXSA9IGs7XG4gIHJldHVybiBoO1xufSwge30pO1xuXG4vKipcbiAqIEVtb2ppIG5hbWVzcGFjZVxuICovXG52YXIgRW1vamkgPSB7XG4gIGVtb2ppOiBlbW9qaUJ5TmFtZSxcbn07XG5cbi8qKlxuICogZ2V0IGVtb2ppIGNvZGUgZnJvbSBuYW1lLiByZXR1cm4gZW1vamkgY29kZSBiYWNrIGlmIGNvZGUgaXMgcGFzc2VkIGluLlxuICogQHBhcmFtICB7c3RyaW5nfSBlbW9qaVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5FbW9qaS5fZ2V0ID0gZnVuY3Rpb24gX2dldCAoZW1vamkpIHtcbiAgaWYgKGVtb2ppQnlDb2RlW3N0cmlwTlNCKGVtb2ppKV0pIHtcbiAgICByZXR1cm4gZW1vamk7XG4gIH0gZWxzZSBpZiAoZW1vamlCeU5hbWUuaGFzT3duUHJvcGVydHkoZW1vamkpKSB7XG4gICAgcmV0dXJuIGVtb2ppQnlOYW1lW2Vtb2ppXTtcbiAgfVxuXG4gIHJldHVybiBlbnN1cmVDb2xvbnMoZW1vamkpO1xufTtcblxuLyoqXG4gKiBnZXQgZW1vamkgY29kZSBmcm9tIDplbW9qaTogc3RyaW5nIG9yIG5hbWVcbiAqIEBwYXJhbSAge3N0cmluZ30gZW1vamlcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuRW1vamkuZ2V0ID0gZnVuY3Rpb24gZ2V0IChlbW9qaSkge1xuICBlbW9qaSA9IHN0cmlwQ29sb25zKGVtb2ppKTtcblxuICByZXR1cm4gRW1vamkuX2dldChlbW9qaSk7XG59O1xuXG4vKipcbiAqIGZpbmQgdGhlIGVtb2ppIGJ5IGVpdGhlciBjb2RlIG9yIG5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lT3JDb2RlIFRoZSBlbW9qaSB0byBmaW5kLCBlaXRoZXIgYGNvZmZlZWAsIGA6Y29mZmVlOmAgb3IgYFx1MjYxNWA7XG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbkVtb2ppLmZpbmQgPSBmdW5jdGlvbiBmaW5kIChuYW1lT3JDb2RlKSB7XG4gIHJldHVybiBFbW9qaS5maW5kQnlOYW1lKG5hbWVPckNvZGUpIHx8IEVtb2ppLmZpbmRCeUNvZGUobmFtZU9yQ29kZSk7XG59O1xuXG4vKipcbiAqIGZpbmQgdGhlIGVtb2ppIGJ5IG5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIFRoZSBlbW9qaSB0byBmaW5kIGVpdGhlciBgY29mZmVlYCBvciBgOmNvZmZlZTpgO1xuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5FbW9qaS5maW5kQnlOYW1lID0gZnVuY3Rpb24gZmluZEJ5TmFtZSAobmFtZSkge1xuICB2YXIgc3RyaXBwZWQgPSBzdHJpcENvbG9ucyhuYW1lKTtcbiAgdmFyIGVtb2ppID0gZW1vamlCeU5hbWVbc3RyaXBwZWRdO1xuXG4gIHJldHVybiBlbW9qaSA/ICh7IGVtb2ppOiBlbW9qaSwga2V5OiBzdHJpcHBlZCB9KSA6IHVuZGVmaW5lZDtcbn07XG5cbi8qKlxuICogZmluZCB0aGUgZW1vamkgYnkgY29kZSAoZW1vamkpXG4gKiBAcGFyYW0ge3N0cmluZ30gY29kZSBUaGUgZW1vamkgdG8gZmluZDsgZm9yIGV4YW1wbGUgYFx1MjYxNWAgb3IgYFx1MjYxNGBcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuRW1vamkuZmluZEJ5Q29kZSA9IGZ1bmN0aW9uIGZpbmRCeUNvZGUgKGNvZGUpIHtcbiAgdmFyIHN0cmlwcGVkID0gc3RyaXBOU0IoY29kZSk7XG4gIHZhciBuYW1lID0gZW1vamlCeUNvZGVbc3RyaXBwZWRdO1xuXG4gIC8vIGxvb2t1cCBlbW9qaSB0byBlbnN1cmUgdGhlIFZhcmlhbnQgRm9ybSBpcyByZXR1cm5lZFxuICByZXR1cm4gbmFtZSA/ICh7IGVtb2ppOiBlbW9qaUJ5TmFtZVtuYW1lXSwga2V5OiBuYW1lIH0pIDogdW5kZWZpbmVkO1xufTtcblxuXG4vKipcbiAqIENoZWNrIGlmIGFuIGVtb2ppIGlzIGtub3duIGJ5IHRoaXMgbGlicmFyeVxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVPckNvZGUgVGhlIGVtb2ppIHRvIHZhbGlkYXRlLCBlaXRoZXIgYGNvZmZlZWAsIGA6Y29mZmVlOmAgb3IgYFx1MjYxNWA7XG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbkVtb2ppLmhhc0Vtb2ppID0gZnVuY3Rpb24gaGFzRW1vamkgKG5hbWVPckNvZGUpIHtcbiAgcmV0dXJuIEVtb2ppLmhhc0Vtb2ppQnlOYW1lKG5hbWVPckNvZGUpIHx8IEVtb2ppLmhhc0Vtb2ppQnlDb2RlKG5hbWVPckNvZGUpO1xufTtcblxuLyoqXG4gKiBDaGVjayBpZiBhbiBlbW9qaSB3aXRoIGdpdmVuIG5hbWUgaXMga25vd24gYnkgdGhpcyBsaWJyYXJ5XG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBUaGUgZW1vamkgdG8gdmFsaWRhdGUgZWl0aGVyIGBjb2ZmZWVgIG9yIGA6Y29mZmVlOmA7XG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbkVtb2ppLmhhc0Vtb2ppQnlOYW1lID0gZnVuY3Rpb24gaGFzRW1vamlCeU5hbWUgKG5hbWUpIHtcbiAgdmFyIHJlc3VsdCA9IEVtb2ppLmZpbmRCeU5hbWUobmFtZSk7XG4gIHJldHVybiAhIXJlc3VsdCAmJiByZXN1bHQua2V5ID09PSBzdHJpcENvbG9ucyhuYW1lKTtcbn07XG5cbi8qKlxuICogQ2hlY2sgaWYgYSBnaXZlbiBlbW9qaSBpcyBrbm93biBieSB0aGlzIGxpYnJhcnlcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2RlIFRoZSBlbW9qaSB0byB2YWxpZGF0ZTsgZm9yIGV4YW1wbGUgYFx1MjYxNWAgb3IgYFx1MjYxNGBcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuRW1vamkuaGFzRW1vamlCeUNvZGUgPSBmdW5jdGlvbiBoYXNFbW9qaUJ5Q29kZSAoY29kZSkge1xuICB2YXIgcmVzdWx0ID0gRW1vamkuZmluZEJ5Q29kZShjb2RlKTtcbiAgcmV0dXJuICEhcmVzdWx0ICYmIHN0cmlwTlNCKHJlc3VsdC5lbW9qaSkgPT09IHN0cmlwTlNCKGNvZGUpO1xufTtcblxuLyoqXG4gKiBnZXQgZW1vamkgbmFtZSBmcm9tIGNvZGVcbiAqIEBwYXJhbSAge3N0cmluZ30gZW1vamlcbiAqIEBwYXJhbSAge2Jvb2xlYW59IGluY2x1ZGVDb2xvbnMgc2hvdWxkIHRoZSByZXN1bHQgaW5jbHVkZSB0aGUgOjpcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuRW1vamkud2hpY2ggPSBmdW5jdGlvbiB3aGljaCAoZW1vamlfY29kZSwgaW5jbHVkZUNvbG9ucykge1xuICB2YXIgY29kZSA9IHN0cmlwTlNCKGVtb2ppX2NvZGUpO1xuICB2YXIgd29yZCA9IGVtb2ppQnlDb2RlW2NvZGVdO1xuXG4gIHJldHVybiBpbmNsdWRlQ29sb25zID8gd3JhcENvbG9ucyh3b3JkKSA6IHdvcmQ7XG59O1xuXG4vKipcbiAqIGVtb2ppZnkgYSBzdHJpbmcgKHJlcGxhY2UgOmVtb2ppOiB3aXRoIGFuIGVtb2ppKVxuICogQHBhcmFtICB7c3RyaW5nfSBzdHJcbiAqIEBwYXJhbSAge2Z1bmN0aW9ufSBvbl9taXNzaW5nIChnZXRzIGVtb2ppIG5hbWUgd2l0aG91dCA6OiBhbmQgcmV0dXJucyBhIHByb3BlciBlbW9qaSBpZiBubyBlbW9qaSB3YXMgZm91bmQpXG4gKiBAcGFyYW0gIHtmdW5jdGlvbn0gZm9ybWF0ICh3cmFwIHRoZSByZXR1cm5lZCBlbW9qaSBpbiBhIGN1c3RvbSBlbGVtZW50KVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5FbW9qaS5lbW9qaWZ5ID0gZnVuY3Rpb24gZW1vamlmeSAoc3RyLCBvbl9taXNzaW5nLCBmb3JtYXQpIHtcbiAgaWYgKCFzdHIpIHJldHVybiAnJztcblxuICByZXR1cm4gc3RyLnNwbGl0KGVtb2ppTmFtZVJlZ2V4KSAvLyBwYXJzZSBlbW9qaSB2aWEgcmVnZXhcbiAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gcGFyc2VFbW9qaShzLCBpKSB7XG4gICAgICAgICAgICAgIC8vIGV2ZXJ5IHNlY29uZCBlbGVtZW50IGlzIGFuIGVtb2ppLCBlLmcuIFwidGVzdCA6ZmFzdF9mb3J3YXJkOlwiIC0+IFsgXCJ0ZXN0IFwiLCBcImZhc3RfZm9yd2FyZFwiIF1cbiAgICAgICAgICAgICAgaWYgKGkgJSAyID09PSAwKSByZXR1cm4gcztcbiAgICAgICAgICAgICAgdmFyIGVtb2ppID0gRW1vamkuX2dldChzKTtcbiAgICAgICAgICAgICAgdmFyIGlzTWlzc2luZyA9IGVtb2ppLmluZGV4T2YoJzonKSA+IC0xO1xuXG4gICAgICAgICAgICAgIGlmIChpc01pc3NpbmcgJiYgdHlwZW9mIG9uX21pc3NpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb25fbWlzc2luZyhzKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICghaXNNaXNzaW5nICYmIHR5cGVvZiBmb3JtYXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZm9ybWF0KGVtb2ppLCBzKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiBlbW9qaTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuam9pbignJykgLy8gY29udmVydCBiYWNrIHRvIHN0cmluZ1xuICA7XG59O1xuXG4vKipcbiAqIHJldHVybiBhIHJhbmRvbSBlbW9qaVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5FbW9qaS5yYW5kb20gPSBmdW5jdGlvbiByYW5kb20gKCkge1xuICB2YXIgZW1vamlLZXlzID0gT2JqZWN0LmtleXMoZW1vamlCeU5hbWUpO1xuICB2YXIgcmFuZG9tSW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBlbW9qaUtleXMubGVuZ3RoKTtcbiAgdmFyIGtleSA9IGVtb2ppS2V5c1tyYW5kb21JbmRleF07XG4gIHZhciBlbW9qaSA9IEVtb2ppLl9nZXQoa2V5KTtcbiAgcmV0dXJuIHsga2V5OiBrZXksIGVtb2ppOiBlbW9qaSB9O1xufVxuXG4vKipcbiAqICByZXR1cm4gYW4gY29sbGVjdGlvbiBvZiBwb3RlbnRpYWwgZW1vamkgbWF0Y2hlc1xuICogIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAqICBAcmV0dXJuIHtBcnJheS48T2JqZWN0Pn1cbiAqL1xuRW1vamkuc2VhcmNoID0gZnVuY3Rpb24gc2VhcmNoIChzdHIpIHtcbiAgdmFyIGVtb2ppS2V5cyA9IE9iamVjdC5rZXlzKGVtb2ppQnlOYW1lKTtcbiAgdmFyIG1hdGNoZXIgPSBzdHJpcENvbG9ucyhzdHIpXG4gIHZhciBtYXRjaGluZ0tleXMgPSBlbW9qaUtleXMuZmlsdGVyKGZ1bmN0aW9uKGtleSkge1xuICAgIHJldHVybiBrZXkudG9TdHJpbmcoKS5pbmRleE9mKG1hdGNoZXIpID09PSAwO1xuICB9KTtcbiAgcmV0dXJuIG1hdGNoaW5nS2V5cy5tYXAoZnVuY3Rpb24oa2V5KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGtleToga2V5LFxuICAgICAgZW1vamk6IEVtb2ppLl9nZXQoa2V5KSxcbiAgICB9O1xuICB9KTtcbn1cblxuLyoqXG4gKiB1bmVtb2ppZnkgYSBzdHJpbmcgKHJlcGxhY2UgZW1vamkgd2l0aCA6ZW1vamk6KVxuICogQHBhcmFtICB7c3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuRW1vamkudW5lbW9qaWZ5ID0gZnVuY3Rpb24gdW5lbW9qaWZ5IChzdHIpIHtcbiAgaWYgKCFzdHIpIHJldHVybiAnJztcbiAgdmFyIHdvcmRzID0gdG9BcnJheShzdHIpO1xuXG4gIHJldHVybiB3b3Jkcy5tYXAoZnVuY3Rpb24od29yZCkge1xuICAgIHJldHVybiBFbW9qaS53aGljaCh3b3JkLCB0cnVlKSB8fCB3b3JkO1xuICB9KS5qb2luKCcnKTtcbn07XG5cbi8qKlxuICogcmVwbGFjZSBlbW9qaXMgd2l0aCByZXBsYWNlbWVudCB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICogQHBhcmFtIHtmdW5jdGlvbnxzdHJpbmd9IHRoZSBzdHJpbmcgb3IgY2FsbGJhY2sgZnVuY3Rpb24gdG8gcmVwbGFjZSB0aGUgZW1vamkgd2l0aFxuICogQHBhcmFtIHtib29sZWFufSBzaG91bGQgdHJhaWxpbmcgd2hpdGVzcGFjZXMgYmUgY2xlYW5lZD8gRGVmYXVsdHMgZmFsc2VcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuRW1vamkucmVwbGFjZSA9IGZ1bmN0aW9uIHJlcGxhY2UgKHN0ciwgcmVwbGFjZW1lbnQsIGNsZWFuU3BhY2VzKSB7XG4gIGlmICghc3RyKSByZXR1cm4gJyc7XG5cbiAgdmFyIHJlcGxhY2UgPSB0eXBlb2YgcmVwbGFjZW1lbnQgPT09ICdmdW5jdGlvbicgPyByZXBsYWNlbWVudCA6IGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVwbGFjZW1lbnQ7IH07XG4gIHZhciB3b3JkcyA9IHRvQXJyYXkoc3RyKTtcblxuICB2YXIgcmVwbGFjZWQgPSB3b3Jkcy5tYXAoZnVuY3Rpb24od29yZCwgaWR4KSB7XG4gICAgdmFyIGVtb2ppID0gRW1vamkuZmluZEJ5Q29kZSh3b3JkKTtcblxuICAgIGlmIChlbW9qaSAmJiBjbGVhblNwYWNlcyAmJiB3b3Jkc1tpZHggKyAxXSA9PT0gJyAnKSB7XG4gICAgICB3b3Jkc1tpZHggKyAxXSA9ICcnO1xuICAgIH1cblxuICAgIHJldHVybiBlbW9qaSA/IHJlcGxhY2UoZW1vamkpIDogd29yZDtcbiAgfSkuam9pbignJyk7XG5cbiAgcmV0dXJuIGNsZWFuU3BhY2VzID8gcmVwbGFjZWQucmVwbGFjZSh0cmltU3BhY2VSZWdleCwgJycpIDogcmVwbGFjZWQ7XG59O1xuXG5cbi8qKlxuICogcmVtb3ZlIGFsbCBlbW9qaXMgZnJvbSBhIHN0cmluZ1xuICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5FbW9qaS5zdHJpcCA9IGZ1bmN0aW9uIHN0cmlwIChzdHIpIHtcbiAgcmV0dXJuIEVtb2ppLnJlcGxhY2Uoc3RyLCAnJywgdHJ1ZSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEVtb2ppO1xuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9saWIvZW1vamknKTsiLCAiLyohXG4gIENvcHlyaWdodCAoYykgMjAxOCBKZWQgV2F0c29uLlxuICBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKE1JVCksIHNlZVxuICBodHRwOi8vamVkd2F0c29uLmdpdGh1Yi5pby9jbGFzc25hbWVzXG4qL1xuLyogZ2xvYmFsIGRlZmluZSAqL1xuXG4oZnVuY3Rpb24gKCkge1xuXHQndXNlIHN0cmljdCc7XG5cblx0dmFyIGhhc093biA9IHt9Lmhhc093blByb3BlcnR5O1xuXG5cdGZ1bmN0aW9uIGNsYXNzTmFtZXMoKSB7XG5cdFx0dmFyIGNsYXNzZXMgPSBbXTtcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgYXJnID0gYXJndW1lbnRzW2ldO1xuXHRcdFx0aWYgKCFhcmcpIGNvbnRpbnVlO1xuXG5cdFx0XHR2YXIgYXJnVHlwZSA9IHR5cGVvZiBhcmc7XG5cblx0XHRcdGlmIChhcmdUeXBlID09PSAnc3RyaW5nJyB8fCBhcmdUeXBlID09PSAnbnVtYmVyJykge1xuXHRcdFx0XHRjbGFzc2VzLnB1c2goYXJnKTtcblx0XHRcdH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG5cdFx0XHRcdGlmIChhcmcubGVuZ3RoKSB7XG5cdFx0XHRcdFx0dmFyIGlubmVyID0gY2xhc3NOYW1lcy5hcHBseShudWxsLCBhcmcpO1xuXHRcdFx0XHRcdGlmIChpbm5lcikge1xuXHRcdFx0XHRcdFx0Y2xhc3Nlcy5wdXNoKGlubmVyKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoYXJnVHlwZSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0aWYgKGFyZy50b1N0cmluZyA9PT0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZykge1xuXHRcdFx0XHRcdGZvciAodmFyIGtleSBpbiBhcmcpIHtcblx0XHRcdFx0XHRcdGlmIChoYXNPd24uY2FsbChhcmcsIGtleSkgJiYgYXJnW2tleV0pIHtcblx0XHRcdFx0XHRcdFx0Y2xhc3Nlcy5wdXNoKGtleSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNsYXNzZXMucHVzaChhcmcudG9TdHJpbmcoKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gY2xhc3Nlcy5qb2luKCcgJyk7XG5cdH1cblxuXHRpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcblx0XHRjbGFzc05hbWVzLmRlZmF1bHQgPSBjbGFzc05hbWVzO1xuXHRcdG1vZHVsZS5leHBvcnRzID0gY2xhc3NOYW1lcztcblx0fSBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBkZWZpbmUuYW1kID09PSAnb2JqZWN0JyAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gcmVnaXN0ZXIgYXMgJ2NsYXNzbmFtZXMnLCBjb25zaXN0ZW50IHdpdGggbnBtIHBhY2thZ2UgbmFtZVxuXHRcdGRlZmluZSgnY2xhc3NuYW1lcycsIFtdLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXR1cm4gY2xhc3NOYW1lcztcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHR3aW5kb3cuY2xhc3NOYW1lcyA9IGNsYXNzTmFtZXM7XG5cdH1cbn0oKSk7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiBmb3IgZXhoYXVzdGl2ZSBjaGVja3Mgb2YgZGlzY3JpbWluYXRlZCB1bmlvbnMuXG4gKiBodHRwczovL2Jhc2FyYXQuZ2l0Ym9va3MuaW8vdHlwZXNjcmlwdC9kb2NzL3R5cGVzL2Rpc2NyaW1pbmF0ZWQtdW5pb25zLmh0bWxcbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqICAgIHR5cGUgQSA9IHt0eXBlOiAnYSd9O1xuICogICAgdHlwZSBCID0ge3R5cGU6ICdiJ307XG4gKiAgICB0eXBlIFVuaW9uID0gQSB8IEI7XG4gKlxuICogICAgZnVuY3Rpb24gZG9Tb21ldGhpbmcoYXJnOiBVbmlvbikge1xuICogICAgICBpZiAoYXJnLnR5cGUgPT09ICdhJykge1xuICogICAgICAgIHJldHVybiBzb21ldGhpbmc7XG4gKiAgICAgIH1cbiAqXG4gKiAgICAgIGlmIChhcmcudHlwZSA9PT0gJ2InKSB7XG4gKiAgICAgICAgcmV0dXJuIHNvbWV0aGluZ0Vsc2U7XG4gKiAgICAgIH1cbiAqXG4gKiAgICAgIC8vIFRTIHdpbGwgZXJyb3IgaWYgdGhlcmUgYXJlIG90aGVyIHR5cGVzIGluIHRoZSB1bmlvblxuICogICAgICAvLyBXaWxsIHRocm93IGFuIEVycm9yIHdoZW4gY2FsbGVkIGF0IHJ1bnRpbWUuXG4gKiAgICAgIC8vIFVzZSBgYXNzZXJ0TmV2ZXIoYXJnLCB0cnVlKWAgaW5zdGVhZCB0byBmYWlsIHNpbGVudGx5LlxuICogICAgICByZXR1cm4gYXNzZXJ0TmV2ZXIoYXJnKTtcbiAqICAgIH1cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0TmV2ZXIodmFsdWUsIG5vVGhyb3cpIHtcbiAgICBpZiAobm9UaHJvdykge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihcIlVuaGFuZGxlZCBkaXNjcmltaW5hdGVkIHVuaW9uIG1lbWJlcjogXCIgKyBKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xufVxuZXhwb3J0cy5hc3NlcnROZXZlciA9IGFzc2VydE5ldmVyO1xuZXhwb3J0cy5kZWZhdWx0ID0gYXNzZXJ0TmV2ZXI7XG4iLCAiLyohXG5cbkpTWmlwIHYzLjEwLjAgLSBBIEphdmFTY3JpcHQgY2xhc3MgZm9yIGdlbmVyYXRpbmcgYW5kIHJlYWRpbmcgemlwIGZpbGVzXG48aHR0cDovL3N0dWFydGsuY29tL2pzemlwPlxuXG4oYykgMjAwOS0yMDE2IFN0dWFydCBLbmlnaHRsZXkgPHN0dWFydCBbYXRdIHN0dWFydGsuY29tPlxuRHVhbCBsaWNlbmNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2Ugb3IgR1BMdjMuIFNlZSBodHRwczovL3Jhdy5naXRodWIuY29tL1N0dWsvanN6aXAvbWFpbi9MSUNFTlNFLm1hcmtkb3duLlxuXG5KU1ppcCB1c2VzIHRoZSBsaWJyYXJ5IHBha28gcmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIDpcbmh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlY2EvcGFrby9ibG9iL21haW4vTElDRU5TRVxuKi9cblxuIWZ1bmN0aW9uKGUpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlKW1vZHVsZS5leHBvcnRzPWUoKTtlbHNlIGlmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZClkZWZpbmUoW10sZSk7ZWxzZXsoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGY/c2VsZjp0aGlzKS5KU1ppcD1lKCl9fShmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBzKGEsbyxoKXtmdW5jdGlvbiB1KHIsZSl7aWYoIW9bcl0pe2lmKCFhW3JdKXt2YXIgdD1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFlJiZ0KXJldHVybiB0KHIsITApO2lmKGwpcmV0dXJuIGwociwhMCk7dmFyIG49bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIityK1wiJ1wiKTt0aHJvdyBuLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsbn12YXIgaT1vW3JdPXtleHBvcnRzOnt9fTthW3JdWzBdLmNhbGwoaS5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciB0PWFbcl1bMV1bZV07cmV0dXJuIHUodHx8ZSl9LGksaS5leHBvcnRzLHMsYSxvLGgpfXJldHVybiBvW3JdLmV4cG9ydHN9Zm9yKHZhciBsPVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsZT0wO2U8aC5sZW5ndGg7ZSsrKXUoaFtlXSk7cmV0dXJuIHV9KHsxOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGQ9ZShcIi4vdXRpbHNcIiksYz1lKFwiLi9zdXBwb3J0XCIpLHA9XCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPVwiO3IuZW5jb2RlPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyLG4saSxzLGEsbyxoPVtdLHU9MCxsPWUubGVuZ3RoLGY9bCxjPVwic3RyaW5nXCIhPT1kLmdldFR5cGVPZihlKTt1PGUubGVuZ3RoOylmPWwtdSxuPWM/KHQ9ZVt1KytdLHI9dTxsP2VbdSsrXTowLHU8bD9lW3UrK106MCk6KHQ9ZS5jaGFyQ29kZUF0KHUrKykscj11PGw/ZS5jaGFyQ29kZUF0KHUrKyk6MCx1PGw/ZS5jaGFyQ29kZUF0KHUrKyk6MCksaT10Pj4yLHM9KDMmdCk8PDR8cj4+NCxhPTE8Zj8oMTUmcik8PDJ8bj4+Njo2NCxvPTI8Zj82MyZuOjY0LGgucHVzaChwLmNoYXJBdChpKStwLmNoYXJBdChzKStwLmNoYXJBdChhKStwLmNoYXJBdChvKSk7cmV0dXJuIGguam9pbihcIlwiKX0sci5kZWNvZGU9ZnVuY3Rpb24oZSl7dmFyIHQscixuLGkscyxhLG89MCxoPTAsdT1cImRhdGE6XCI7aWYoZS5zdWJzdHIoMCx1Lmxlbmd0aCk9PT11KXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgYmFzZTY0IGlucHV0LCBpdCBsb29rcyBsaWtlIGEgZGF0YSB1cmwuXCIpO3ZhciBsLGY9MyooZT1lLnJlcGxhY2UoL1teQS1aYS16MC05XFwrXFwvXFw9XS9nLFwiXCIpKS5sZW5ndGgvNDtpZihlLmNoYXJBdChlLmxlbmd0aC0xKT09PXAuY2hhckF0KDY0KSYmZi0tLGUuY2hhckF0KGUubGVuZ3RoLTIpPT09cC5jaGFyQXQoNjQpJiZmLS0sZiUxIT0wKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgYmFzZTY0IGlucHV0LCBiYWQgY29udGVudCBsZW5ndGguXCIpO2ZvcihsPWMudWludDhhcnJheT9uZXcgVWludDhBcnJheSgwfGYpOm5ldyBBcnJheSgwfGYpO288ZS5sZW5ndGg7KXQ9cC5pbmRleE9mKGUuY2hhckF0KG8rKykpPDwyfChpPXAuaW5kZXhPZihlLmNoYXJBdChvKyspKSk+PjQscj0oMTUmaSk8PDR8KHM9cC5pbmRleE9mKGUuY2hhckF0KG8rKykpKT4+MixuPSgzJnMpPDw2fChhPXAuaW5kZXhPZihlLmNoYXJBdChvKyspKSksbFtoKytdPXQsNjQhPT1zJiYobFtoKytdPXIpLDY0IT09YSYmKGxbaCsrXT1uKTtyZXR1cm4gbH19LHtcIi4vc3VwcG9ydFwiOjMwLFwiLi91dGlsc1wiOjMyfV0sMjpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCIuL2V4dGVybmFsXCIpLGk9ZShcIi4vc3RyZWFtL0RhdGFXb3JrZXJcIikscz1lKFwiLi9zdHJlYW0vQ3JjMzJQcm9iZVwiKSxhPWUoXCIuL3N0cmVhbS9EYXRhTGVuZ3RoUHJvYmVcIik7ZnVuY3Rpb24gbyhlLHQscixuLGkpe3RoaXMuY29tcHJlc3NlZFNpemU9ZSx0aGlzLnVuY29tcHJlc3NlZFNpemU9dCx0aGlzLmNyYzMyPXIsdGhpcy5jb21wcmVzc2lvbj1uLHRoaXMuY29tcHJlc3NlZENvbnRlbnQ9aX1vLnByb3RvdHlwZT17Z2V0Q29udGVudFdvcmtlcjpmdW5jdGlvbigpe3ZhciBlPW5ldyBpKG4uUHJvbWlzZS5yZXNvbHZlKHRoaXMuY29tcHJlc3NlZENvbnRlbnQpKS5waXBlKHRoaXMuY29tcHJlc3Npb24udW5jb21wcmVzc1dvcmtlcigpKS5waXBlKG5ldyBhKFwiZGF0YV9sZW5ndGhcIikpLHQ9dGhpcztyZXR1cm4gZS5vbihcImVuZFwiLGZ1bmN0aW9uKCl7aWYodGhpcy5zdHJlYW1JbmZvLmRhdGFfbGVuZ3RoIT09dC51bmNvbXByZXNzZWRTaXplKXRocm93IG5ldyBFcnJvcihcIkJ1ZyA6IHVuY29tcHJlc3NlZCBkYXRhIHNpemUgbWlzbWF0Y2hcIil9KSxlfSxnZXRDb21wcmVzc2VkV29ya2VyOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBpKG4uUHJvbWlzZS5yZXNvbHZlKHRoaXMuY29tcHJlc3NlZENvbnRlbnQpKS53aXRoU3RyZWFtSW5mbyhcImNvbXByZXNzZWRTaXplXCIsdGhpcy5jb21wcmVzc2VkU2l6ZSkud2l0aFN0cmVhbUluZm8oXCJ1bmNvbXByZXNzZWRTaXplXCIsdGhpcy51bmNvbXByZXNzZWRTaXplKS53aXRoU3RyZWFtSW5mbyhcImNyYzMyXCIsdGhpcy5jcmMzMikud2l0aFN0cmVhbUluZm8oXCJjb21wcmVzc2lvblwiLHRoaXMuY29tcHJlc3Npb24pfX0sby5jcmVhdGVXb3JrZXJGcm9tPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZS5waXBlKG5ldyBzKS5waXBlKG5ldyBhKFwidW5jb21wcmVzc2VkU2l6ZVwiKSkucGlwZSh0LmNvbXByZXNzV29ya2VyKHIpKS5waXBlKG5ldyBhKFwiY29tcHJlc3NlZFNpemVcIikpLndpdGhTdHJlYW1JbmZvKFwiY29tcHJlc3Npb25cIix0KX0sdC5leHBvcnRzPW99LHtcIi4vZXh0ZXJuYWxcIjo2LFwiLi9zdHJlYW0vQ3JjMzJQcm9iZVwiOjI1LFwiLi9zdHJlYW0vRGF0YUxlbmd0aFByb2JlXCI6MjYsXCIuL3N0cmVhbS9EYXRhV29ya2VyXCI6Mjd9XSwzOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcIi4vc3RyZWFtL0dlbmVyaWNXb3JrZXJcIik7ci5TVE9SRT17bWFnaWM6XCJcXDBcXDBcIixjb21wcmVzc1dvcmtlcjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IG4oXCJTVE9SRSBjb21wcmVzc2lvblwiKX0sdW5jb21wcmVzc1dvcmtlcjpmdW5jdGlvbigpe3JldHVybiBuZXcgbihcIlNUT1JFIGRlY29tcHJlc3Npb25cIil9fSxyLkRFRkxBVEU9ZShcIi4vZmxhdGVcIil9LHtcIi4vZmxhdGVcIjo3LFwiLi9zdHJlYW0vR2VuZXJpY1dvcmtlclwiOjI4fV0sNDpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCIuL3V0aWxzXCIpO3ZhciBvPWZ1bmN0aW9uKCl7Zm9yKHZhciBlLHQ9W10scj0wO3I8MjU2O3IrKyl7ZT1yO2Zvcih2YXIgbj0wO248ODtuKyspZT0xJmU/Mzk4ODI5MjM4NF5lPj4+MTplPj4+MTt0W3JdPWV9cmV0dXJuIHR9KCk7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMCE9PWUmJmUubGVuZ3RoP1wic3RyaW5nXCIhPT1uLmdldFR5cGVPZihlKT9mdW5jdGlvbihlLHQscixuKXt2YXIgaT1vLHM9bityO2VePS0xO2Zvcih2YXIgYT1uO2E8czthKyspZT1lPj4+OF5pWzI1NSYoZV50W2FdKV07cmV0dXJuLTFeZX0oMHx0LGUsZS5sZW5ndGgsMCk6ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGk9byxzPW4rcjtlXj0tMTtmb3IodmFyIGE9bjthPHM7YSsrKWU9ZT4+PjheaVsyNTUmKGVedC5jaGFyQ29kZUF0KGEpKV07cmV0dXJuLTFeZX0oMHx0LGUsZS5sZW5ndGgsMCk6MH19LHtcIi4vdXRpbHNcIjozMn1dLDU6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtyLmJhc2U2ND0hMSxyLmJpbmFyeT0hMSxyLmRpcj0hMSxyLmNyZWF0ZUZvbGRlcnM9ITAsci5kYXRlPW51bGwsci5jb21wcmVzc2lvbj1udWxsLHIuY29tcHJlc3Npb25PcHRpb25zPW51bGwsci5jb21tZW50PW51bGwsci51bml4UGVybWlzc2lvbnM9bnVsbCxyLmRvc1Blcm1pc3Npb25zPW51bGx9LHt9XSw2OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49bnVsbDtuPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBQcm9taXNlP1Byb21pc2U6ZShcImxpZVwiKSx0LmV4cG9ydHM9e1Byb21pc2U6bn19LHtsaWU6Mzd9XSw3OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFVpbnQ4QXJyYXkmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBVaW50MTZBcnJheSYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFVpbnQzMkFycmF5LGk9ZShcInBha29cIikscz1lKFwiLi91dGlsc1wiKSxhPWUoXCIuL3N0cmVhbS9HZW5lcmljV29ya2VyXCIpLG89bj9cInVpbnQ4YXJyYXlcIjpcImFycmF5XCI7ZnVuY3Rpb24gaChlLHQpe2EuY2FsbCh0aGlzLFwiRmxhdGVXb3JrZXIvXCIrZSksdGhpcy5fcGFrbz1udWxsLHRoaXMuX3Bha29BY3Rpb249ZSx0aGlzLl9wYWtvT3B0aW9ucz10LHRoaXMubWV0YT17fX1yLm1hZ2ljPVwiXFxiXFwwXCIscy5pbmhlcml0cyhoLGEpLGgucHJvdG90eXBlLnByb2Nlc3NDaHVuaz1mdW5jdGlvbihlKXt0aGlzLm1ldGE9ZS5tZXRhLG51bGw9PT10aGlzLl9wYWtvJiZ0aGlzLl9jcmVhdGVQYWtvKCksdGhpcy5fcGFrby5wdXNoKHMudHJhbnNmb3JtVG8obyxlLmRhdGEpLCExKX0saC5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24oKXthLnByb3RvdHlwZS5mbHVzaC5jYWxsKHRoaXMpLG51bGw9PT10aGlzLl9wYWtvJiZ0aGlzLl9jcmVhdGVQYWtvKCksdGhpcy5fcGFrby5wdXNoKFtdLCEwKX0saC5wcm90b3R5cGUuY2xlYW5VcD1mdW5jdGlvbigpe2EucHJvdG90eXBlLmNsZWFuVXAuY2FsbCh0aGlzKSx0aGlzLl9wYWtvPW51bGx9LGgucHJvdG90eXBlLl9jcmVhdGVQYWtvPWZ1bmN0aW9uKCl7dGhpcy5fcGFrbz1uZXcgaVt0aGlzLl9wYWtvQWN0aW9uXSh7cmF3OiEwLGxldmVsOnRoaXMuX3Bha29PcHRpb25zLmxldmVsfHwtMX0pO3ZhciB0PXRoaXM7dGhpcy5fcGFrby5vbkRhdGE9ZnVuY3Rpb24oZSl7dC5wdXNoKHtkYXRhOmUsbWV0YTp0Lm1ldGF9KX19LHIuY29tcHJlc3NXb3JrZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBoKFwiRGVmbGF0ZVwiLGUpfSxyLnVuY29tcHJlc3NXb3JrZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGgoXCJJbmZsYXRlXCIse30pfX0se1wiLi9zdHJlYW0vR2VuZXJpY1dvcmtlclwiOjI4LFwiLi91dGlsc1wiOjMyLHBha286Mzh9XSw4OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gQShlLHQpe3ZhciByLG49XCJcIjtmb3Iocj0wO3I8dDtyKyspbis9U3RyaW5nLmZyb21DaGFyQ29kZSgyNTUmZSksZT4+Pj04O3JldHVybiBufWZ1bmN0aW9uIG4oZSx0LHIsbixpLHMpe3ZhciBhLG8saD1lLmZpbGUsdT1lLmNvbXByZXNzaW9uLGw9cyE9PU8udXRmOGVuY29kZSxmPUkudHJhbnNmb3JtVG8oXCJzdHJpbmdcIixzKGgubmFtZSkpLGM9SS50cmFuc2Zvcm1UbyhcInN0cmluZ1wiLE8udXRmOGVuY29kZShoLm5hbWUpKSxkPWguY29tbWVudCxwPUkudHJhbnNmb3JtVG8oXCJzdHJpbmdcIixzKGQpKSxtPUkudHJhbnNmb3JtVG8oXCJzdHJpbmdcIixPLnV0ZjhlbmNvZGUoZCkpLF89Yy5sZW5ndGghPT1oLm5hbWUubGVuZ3RoLGc9bS5sZW5ndGghPT1kLmxlbmd0aCxiPVwiXCIsdj1cIlwiLHk9XCJcIix3PWguZGlyLGs9aC5kYXRlLHg9e2NyYzMyOjAsY29tcHJlc3NlZFNpemU6MCx1bmNvbXByZXNzZWRTaXplOjB9O3QmJiFyfHwoeC5jcmMzMj1lLmNyYzMyLHguY29tcHJlc3NlZFNpemU9ZS5jb21wcmVzc2VkU2l6ZSx4LnVuY29tcHJlc3NlZFNpemU9ZS51bmNvbXByZXNzZWRTaXplKTt2YXIgUz0wO3QmJihTfD04KSxsfHwhXyYmIWd8fChTfD0yMDQ4KTt2YXIgej0wLEM9MDt3JiYoenw9MTYpLFwiVU5JWFwiPT09aT8oQz03OTgsenw9ZnVuY3Rpb24oZSx0KXt2YXIgcj1lO3JldHVybiBlfHwocj10PzE2ODkzOjMzMjA0KSwoNjU1MzUmcik8PDE2fShoLnVuaXhQZXJtaXNzaW9ucyx3KSk6KEM9MjAsenw9ZnVuY3Rpb24oZSl7cmV0dXJuIDYzJihlfHwwKX0oaC5kb3NQZXJtaXNzaW9ucykpLGE9ay5nZXRVVENIb3VycygpLGE8PD02LGF8PWsuZ2V0VVRDTWludXRlcygpLGE8PD01LGF8PWsuZ2V0VVRDU2Vjb25kcygpLzIsbz1rLmdldFVUQ0Z1bGxZZWFyKCktMTk4MCxvPDw9NCxvfD1rLmdldFVUQ01vbnRoKCkrMSxvPDw9NSxvfD1rLmdldFVUQ0RhdGUoKSxfJiYodj1BKDEsMSkrQShCKGYpLDQpK2MsYis9XCJ1cFwiK0Eodi5sZW5ndGgsMikrdiksZyYmKHk9QSgxLDEpK0EoQihwKSw0KSttLGIrPVwidWNcIitBKHkubGVuZ3RoLDIpK3kpO3ZhciBFPVwiXCI7cmV0dXJuIEUrPVwiXFxuXFwwXCIsRSs9QShTLDIpLEUrPXUubWFnaWMsRSs9QShhLDIpLEUrPUEobywyKSxFKz1BKHguY3JjMzIsNCksRSs9QSh4LmNvbXByZXNzZWRTaXplLDQpLEUrPUEoeC51bmNvbXByZXNzZWRTaXplLDQpLEUrPUEoZi5sZW5ndGgsMiksRSs9QShiLmxlbmd0aCwyKSx7ZmlsZVJlY29yZDpSLkxPQ0FMX0ZJTEVfSEVBREVSK0UrZitiLGRpclJlY29yZDpSLkNFTlRSQUxfRklMRV9IRUFERVIrQShDLDIpK0UrQShwLmxlbmd0aCwyKStcIlxcMFxcMFxcMFxcMFwiK0Eoeiw0KStBKG4sNCkrZitiK3B9fXZhciBJPWUoXCIuLi91dGlsc1wiKSxpPWUoXCIuLi9zdHJlYW0vR2VuZXJpY1dvcmtlclwiKSxPPWUoXCIuLi91dGY4XCIpLEI9ZShcIi4uL2NyYzMyXCIpLFI9ZShcIi4uL3NpZ25hdHVyZVwiKTtmdW5jdGlvbiBzKGUsdCxyLG4pe2kuY2FsbCh0aGlzLFwiWmlwRmlsZVdvcmtlclwiKSx0aGlzLmJ5dGVzV3JpdHRlbj0wLHRoaXMuemlwQ29tbWVudD10LHRoaXMuemlwUGxhdGZvcm09cix0aGlzLmVuY29kZUZpbGVOYW1lPW4sdGhpcy5zdHJlYW1GaWxlcz1lLHRoaXMuYWNjdW11bGF0ZT0hMSx0aGlzLmNvbnRlbnRCdWZmZXI9W10sdGhpcy5kaXJSZWNvcmRzPVtdLHRoaXMuY3VycmVudFNvdXJjZU9mZnNldD0wLHRoaXMuZW50cmllc0NvdW50PTAsdGhpcy5jdXJyZW50RmlsZT1udWxsLHRoaXMuX3NvdXJjZXM9W119SS5pbmhlcml0cyhzLGkpLHMucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5tZXRhLnBlcmNlbnR8fDAscj10aGlzLmVudHJpZXNDb3VudCxuPXRoaXMuX3NvdXJjZXMubGVuZ3RoO3RoaXMuYWNjdW11bGF0ZT90aGlzLmNvbnRlbnRCdWZmZXIucHVzaChlKToodGhpcy5ieXRlc1dyaXR0ZW4rPWUuZGF0YS5sZW5ndGgsaS5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMse2RhdGE6ZS5kYXRhLG1ldGE6e2N1cnJlbnRGaWxlOnRoaXMuY3VycmVudEZpbGUscGVyY2VudDpyPyh0KzEwMCooci1uLTEpKS9yOjEwMH19KSl9LHMucHJvdG90eXBlLm9wZW5lZFNvdXJjZT1mdW5jdGlvbihlKXt0aGlzLmN1cnJlbnRTb3VyY2VPZmZzZXQ9dGhpcy5ieXRlc1dyaXR0ZW4sdGhpcy5jdXJyZW50RmlsZT1lLmZpbGUubmFtZTt2YXIgdD10aGlzLnN0cmVhbUZpbGVzJiYhZS5maWxlLmRpcjtpZih0KXt2YXIgcj1uKGUsdCwhMSx0aGlzLmN1cnJlbnRTb3VyY2VPZmZzZXQsdGhpcy56aXBQbGF0Zm9ybSx0aGlzLmVuY29kZUZpbGVOYW1lKTt0aGlzLnB1c2goe2RhdGE6ci5maWxlUmVjb3JkLG1ldGE6e3BlcmNlbnQ6MH19KX1lbHNlIHRoaXMuYWNjdW11bGF0ZT0hMH0scy5wcm90b3R5cGUuY2xvc2VkU291cmNlPWZ1bmN0aW9uKGUpe3RoaXMuYWNjdW11bGF0ZT0hMTt2YXIgdD10aGlzLnN0cmVhbUZpbGVzJiYhZS5maWxlLmRpcixyPW4oZSx0LCEwLHRoaXMuY3VycmVudFNvdXJjZU9mZnNldCx0aGlzLnppcFBsYXRmb3JtLHRoaXMuZW5jb2RlRmlsZU5hbWUpO2lmKHRoaXMuZGlyUmVjb3Jkcy5wdXNoKHIuZGlyUmVjb3JkKSx0KXRoaXMucHVzaCh7ZGF0YTpmdW5jdGlvbihlKXtyZXR1cm4gUi5EQVRBX0RFU0NSSVBUT1IrQShlLmNyYzMyLDQpK0EoZS5jb21wcmVzc2VkU2l6ZSw0KStBKGUudW5jb21wcmVzc2VkU2l6ZSw0KX0oZSksbWV0YTp7cGVyY2VudDoxMDB9fSk7ZWxzZSBmb3IodGhpcy5wdXNoKHtkYXRhOnIuZmlsZVJlY29yZCxtZXRhOntwZXJjZW50OjB9fSk7dGhpcy5jb250ZW50QnVmZmVyLmxlbmd0aDspdGhpcy5wdXNoKHRoaXMuY29udGVudEJ1ZmZlci5zaGlmdCgpKTt0aGlzLmN1cnJlbnRGaWxlPW51bGx9LHMucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuYnl0ZXNXcml0dGVuLHQ9MDt0PHRoaXMuZGlyUmVjb3Jkcy5sZW5ndGg7dCsrKXRoaXMucHVzaCh7ZGF0YTp0aGlzLmRpclJlY29yZHNbdF0sbWV0YTp7cGVyY2VudDoxMDB9fSk7dmFyIHI9dGhpcy5ieXRlc1dyaXR0ZW4tZSxuPWZ1bmN0aW9uKGUsdCxyLG4saSl7dmFyIHM9SS50cmFuc2Zvcm1UbyhcInN0cmluZ1wiLGkobikpO3JldHVybiBSLkNFTlRSQUxfRElSRUNUT1JZX0VORCtcIlxcMFxcMFxcMFxcMFwiK0EoZSwyKStBKGUsMikrQSh0LDQpK0Eociw0KStBKHMubGVuZ3RoLDIpK3N9KHRoaXMuZGlyUmVjb3Jkcy5sZW5ndGgscixlLHRoaXMuemlwQ29tbWVudCx0aGlzLmVuY29kZUZpbGVOYW1lKTt0aGlzLnB1c2goe2RhdGE6bixtZXRhOntwZXJjZW50OjEwMH19KX0scy5wcm90b3R5cGUucHJlcGFyZU5leHRTb3VyY2U9ZnVuY3Rpb24oKXt0aGlzLnByZXZpb3VzPXRoaXMuX3NvdXJjZXMuc2hpZnQoKSx0aGlzLm9wZW5lZFNvdXJjZSh0aGlzLnByZXZpb3VzLnN0cmVhbUluZm8pLHRoaXMuaXNQYXVzZWQ/dGhpcy5wcmV2aW91cy5wYXVzZSgpOnRoaXMucHJldmlvdXMucmVzdW1lKCl9LHMucHJvdG90eXBlLnJlZ2lzdGVyUHJldmlvdXM9ZnVuY3Rpb24oZSl7dGhpcy5fc291cmNlcy5wdXNoKGUpO3ZhciB0PXRoaXM7cmV0dXJuIGUub24oXCJkYXRhXCIsZnVuY3Rpb24oZSl7dC5wcm9jZXNzQ2h1bmsoZSl9KSxlLm9uKFwiZW5kXCIsZnVuY3Rpb24oKXt0LmNsb3NlZFNvdXJjZSh0LnByZXZpb3VzLnN0cmVhbUluZm8pLHQuX3NvdXJjZXMubGVuZ3RoP3QucHJlcGFyZU5leHRTb3VyY2UoKTp0LmVuZCgpfSksZS5vbihcImVycm9yXCIsZnVuY3Rpb24oZSl7dC5lcnJvcihlKX0pLHRoaXN9LHMucHJvdG90eXBlLnJlc3VtZT1mdW5jdGlvbigpe3JldHVybiEhaS5wcm90b3R5cGUucmVzdW1lLmNhbGwodGhpcykmJighdGhpcy5wcmV2aW91cyYmdGhpcy5fc291cmNlcy5sZW5ndGg/KHRoaXMucHJlcGFyZU5leHRTb3VyY2UoKSwhMCk6dGhpcy5wcmV2aW91c3x8dGhpcy5fc291cmNlcy5sZW5ndGh8fHRoaXMuZ2VuZXJhdGVkRXJyb3I/dm9pZCAwOih0aGlzLmVuZCgpLCEwKSl9LHMucHJvdG90eXBlLmVycm9yPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX3NvdXJjZXM7aWYoIWkucHJvdG90eXBlLmVycm9yLmNhbGwodGhpcyxlKSlyZXR1cm4hMTtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl0cnl7dFtyXS5lcnJvcihlKX1jYXRjaChlKXt9cmV0dXJuITB9LHMucHJvdG90eXBlLmxvY2s9ZnVuY3Rpb24oKXtpLnByb3RvdHlwZS5sb2NrLmNhbGwodGhpcyk7Zm9yKHZhciBlPXRoaXMuX3NvdXJjZXMsdD0wO3Q8ZS5sZW5ndGg7dCsrKWVbdF0ubG9jaygpfSx0LmV4cG9ydHM9c30se1wiLi4vY3JjMzJcIjo0LFwiLi4vc2lnbmF0dXJlXCI6MjMsXCIuLi9zdHJlYW0vR2VuZXJpY1dvcmtlclwiOjI4LFwiLi4vdXRmOFwiOjMxLFwiLi4vdXRpbHNcIjozMn1dLDk6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgdT1lKFwiLi4vY29tcHJlc3Npb25zXCIpLG49ZShcIi4vWmlwRmlsZVdvcmtlclwiKTtyLmdlbmVyYXRlV29ya2VyPWZ1bmN0aW9uKGUsYSx0KXt2YXIgbz1uZXcgbihhLnN0cmVhbUZpbGVzLHQsYS5wbGF0Zm9ybSxhLmVuY29kZUZpbGVOYW1lKSxoPTA7dHJ5e2UuZm9yRWFjaChmdW5jdGlvbihlLHQpe2grKzt2YXIgcj1mdW5jdGlvbihlLHQpe3ZhciByPWV8fHQsbj11W3JdO2lmKCFuKXRocm93IG5ldyBFcnJvcihyK1wiIGlzIG5vdCBhIHZhbGlkIGNvbXByZXNzaW9uIG1ldGhvZCAhXCIpO3JldHVybiBufSh0Lm9wdGlvbnMuY29tcHJlc3Npb24sYS5jb21wcmVzc2lvbiksbj10Lm9wdGlvbnMuY29tcHJlc3Npb25PcHRpb25zfHxhLmNvbXByZXNzaW9uT3B0aW9uc3x8e30saT10LmRpcixzPXQuZGF0ZTt0Ll9jb21wcmVzc1dvcmtlcihyLG4pLndpdGhTdHJlYW1JbmZvKFwiZmlsZVwiLHtuYW1lOmUsZGlyOmksZGF0ZTpzLGNvbW1lbnQ6dC5jb21tZW50fHxcIlwiLHVuaXhQZXJtaXNzaW9uczp0LnVuaXhQZXJtaXNzaW9ucyxkb3NQZXJtaXNzaW9uczp0LmRvc1Blcm1pc3Npb25zfSkucGlwZShvKX0pLG8uZW50cmllc0NvdW50PWh9Y2F0Y2goZSl7by5lcnJvcihlKX1yZXR1cm4gb319LHtcIi4uL2NvbXByZXNzaW9uc1wiOjMsXCIuL1ppcEZpbGVXb3JrZXJcIjo4fV0sMTA6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgbikpcmV0dXJuIG5ldyBuO2lmKGFyZ3VtZW50cy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiVGhlIGNvbnN0cnVjdG9yIHdpdGggcGFyYW1ldGVycyBoYXMgYmVlbiByZW1vdmVkIGluIEpTWmlwIDMuMCwgcGxlYXNlIGNoZWNrIHRoZSB1cGdyYWRlIGd1aWRlLlwiKTt0aGlzLmZpbGVzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5jb21tZW50PW51bGwsdGhpcy5yb290PVwiXCIsdGhpcy5jbG9uZT1mdW5jdGlvbigpe3ZhciBlPW5ldyBuO2Zvcih2YXIgdCBpbiB0aGlzKVwiZnVuY3Rpb25cIiE9dHlwZW9mIHRoaXNbdF0mJihlW3RdPXRoaXNbdF0pO3JldHVybiBlfX0obi5wcm90b3R5cGU9ZShcIi4vb2JqZWN0XCIpKS5sb2FkQXN5bmM9ZShcIi4vbG9hZFwiKSxuLnN1cHBvcnQ9ZShcIi4vc3VwcG9ydFwiKSxuLmRlZmF1bHRzPWUoXCIuL2RlZmF1bHRzXCIpLG4udmVyc2lvbj1cIjMuMTAuMFwiLG4ubG9hZEFzeW5jPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKG5ldyBuKS5sb2FkQXN5bmMoZSx0KX0sbi5leHRlcm5hbD1lKFwiLi9leHRlcm5hbFwiKSx0LmV4cG9ydHM9bn0se1wiLi9kZWZhdWx0c1wiOjUsXCIuL2V4dGVybmFsXCI6NixcIi4vbG9hZFwiOjExLFwiLi9vYmplY3RcIjoxNSxcIi4vc3VwcG9ydFwiOjMwfV0sMTE6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgdT1lKFwiLi91dGlsc1wiKSxpPWUoXCIuL2V4dGVybmFsXCIpLG49ZShcIi4vdXRmOFwiKSxzPWUoXCIuL3ppcEVudHJpZXNcIiksYT1lKFwiLi9zdHJlYW0vQ3JjMzJQcm9iZVwiKSxsPWUoXCIuL25vZGVqc1V0aWxzXCIpO2Z1bmN0aW9uIGYobil7cmV0dXJuIG5ldyBpLlByb21pc2UoZnVuY3Rpb24oZSx0KXt2YXIgcj1uLmRlY29tcHJlc3NlZC5nZXRDb250ZW50V29ya2VyKCkucGlwZShuZXcgYSk7ci5vbihcImVycm9yXCIsZnVuY3Rpb24oZSl7dChlKX0pLm9uKFwiZW5kXCIsZnVuY3Rpb24oKXtyLnN0cmVhbUluZm8uY3JjMzIhPT1uLmRlY29tcHJlc3NlZC5jcmMzMj90KG5ldyBFcnJvcihcIkNvcnJ1cHRlZCB6aXAgOiBDUkMzMiBtaXNtYXRjaFwiKSk6ZSgpfSkucmVzdW1lKCl9KX10LmV4cG9ydHM9ZnVuY3Rpb24oZSxvKXt2YXIgaD10aGlzO3JldHVybiBvPXUuZXh0ZW5kKG98fHt9LHtiYXNlNjQ6ITEsY2hlY2tDUkMzMjohMSxvcHRpbWl6ZWRCaW5hcnlTdHJpbmc6ITEsY3JlYXRlRm9sZGVyczohMSxkZWNvZGVGaWxlTmFtZTpuLnV0ZjhkZWNvZGV9KSxsLmlzTm9kZSYmbC5pc1N0cmVhbShlKT9pLlByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkpTWmlwIGNhbid0IGFjY2VwdCBhIHN0cmVhbSB3aGVuIGxvYWRpbmcgYSB6aXAgZmlsZS5cIikpOnUucHJlcGFyZUNvbnRlbnQoXCJ0aGUgbG9hZGVkIHppcCBmaWxlXCIsZSwhMCxvLm9wdGltaXplZEJpbmFyeVN0cmluZyxvLmJhc2U2NCkudGhlbihmdW5jdGlvbihlKXt2YXIgdD1uZXcgcyhvKTtyZXR1cm4gdC5sb2FkKGUpLHR9KS50aGVuKGZ1bmN0aW9uKGUpe3ZhciB0PVtpLlByb21pc2UucmVzb2x2ZShlKV0scj1lLmZpbGVzO2lmKG8uY2hlY2tDUkMzMilmb3IodmFyIG49MDtuPHIubGVuZ3RoO24rKyl0LnB1c2goZihyW25dKSk7cmV0dXJuIGkuUHJvbWlzZS5hbGwodCl9KS50aGVuKGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLnNoaWZ0KCkscj10LmZpbGVzLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXSxzPWkuZmlsZU5hbWVTdHIsYT11LnJlc29sdmUoaS5maWxlTmFtZVN0cik7aC5maWxlKGEsaS5kZWNvbXByZXNzZWQse2JpbmFyeTohMCxvcHRpbWl6ZWRCaW5hcnlTdHJpbmc6ITAsZGF0ZTppLmRhdGUsZGlyOmkuZGlyLGNvbW1lbnQ6aS5maWxlQ29tbWVudFN0ci5sZW5ndGg/aS5maWxlQ29tbWVudFN0cjpudWxsLHVuaXhQZXJtaXNzaW9uczppLnVuaXhQZXJtaXNzaW9ucyxkb3NQZXJtaXNzaW9uczppLmRvc1Blcm1pc3Npb25zLGNyZWF0ZUZvbGRlcnM6by5jcmVhdGVGb2xkZXJzfSksaS5kaXJ8fChoLmZpbGUoYSkudW5zYWZlT3JpZ2luYWxOYW1lPXMpfXJldHVybiB0LnppcENvbW1lbnQubGVuZ3RoJiYoaC5jb21tZW50PXQuemlwQ29tbWVudCksaH0pfX0se1wiLi9leHRlcm5hbFwiOjYsXCIuL25vZGVqc1V0aWxzXCI6MTQsXCIuL3N0cmVhbS9DcmMzMlByb2JlXCI6MjUsXCIuL3V0ZjhcIjozMSxcIi4vdXRpbHNcIjozMixcIi4vemlwRW50cmllc1wiOjMzfV0sMTI6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi4vdXRpbHNcIiksaT1lKFwiLi4vc3RyZWFtL0dlbmVyaWNXb3JrZXJcIik7ZnVuY3Rpb24gcyhlLHQpe2kuY2FsbCh0aGlzLFwiTm9kZWpzIHN0cmVhbSBpbnB1dCBhZGFwdGVyIGZvciBcIitlKSx0aGlzLl91cHN0cmVhbUVuZGVkPSExLHRoaXMuX2JpbmRTdHJlYW0odCl9bi5pbmhlcml0cyhzLGkpLHMucHJvdG90eXBlLl9iaW5kU3RyZWFtPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7KHRoaXMuX3N0cmVhbT1lKS5wYXVzZSgpLGUub24oXCJkYXRhXCIsZnVuY3Rpb24oZSl7dC5wdXNoKHtkYXRhOmUsbWV0YTp7cGVyY2VudDowfX0pfSkub24oXCJlcnJvclwiLGZ1bmN0aW9uKGUpe3QuaXNQYXVzZWQ/dGhpcy5nZW5lcmF0ZWRFcnJvcj1lOnQuZXJyb3IoZSl9KS5vbihcImVuZFwiLGZ1bmN0aW9uKCl7dC5pc1BhdXNlZD90Ll91cHN0cmVhbUVuZGVkPSEwOnQuZW5kKCl9KX0scy5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXtyZXR1cm4hIWkucHJvdG90eXBlLnBhdXNlLmNhbGwodGhpcykmJih0aGlzLl9zdHJlYW0ucGF1c2UoKSwhMCl9LHMucHJvdG90eXBlLnJlc3VtZT1mdW5jdGlvbigpe3JldHVybiEhaS5wcm90b3R5cGUucmVzdW1lLmNhbGwodGhpcykmJih0aGlzLl91cHN0cmVhbUVuZGVkP3RoaXMuZW5kKCk6dGhpcy5fc3RyZWFtLnJlc3VtZSgpLCEwKX0sdC5leHBvcnRzPXN9LHtcIi4uL3N0cmVhbS9HZW5lcmljV29ya2VyXCI6MjgsXCIuLi91dGlsc1wiOjMyfV0sMTM6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgaT1lKFwicmVhZGFibGUtc3RyZWFtXCIpLlJlYWRhYmxlO2Z1bmN0aW9uIG4oZSx0LHIpe2kuY2FsbCh0aGlzLHQpLHRoaXMuX2hlbHBlcj1lO3ZhciBuPXRoaXM7ZS5vbihcImRhdGFcIixmdW5jdGlvbihlLHQpe24ucHVzaChlKXx8bi5faGVscGVyLnBhdXNlKCksciYmcih0KX0pLm9uKFwiZXJyb3JcIixmdW5jdGlvbihlKXtuLmVtaXQoXCJlcnJvclwiLGUpfSkub24oXCJlbmRcIixmdW5jdGlvbigpe24ucHVzaChudWxsKX0pfWUoXCIuLi91dGlsc1wiKS5pbmhlcml0cyhuLGkpLG4ucHJvdG90eXBlLl9yZWFkPWZ1bmN0aW9uKCl7dGhpcy5faGVscGVyLnJlc3VtZSgpfSx0LmV4cG9ydHM9bn0se1wiLi4vdXRpbHNcIjozMixcInJlYWRhYmxlLXN0cmVhbVwiOjE2fV0sMTQ6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt0LmV4cG9ydHM9e2lzTm9kZTpcInVuZGVmaW5lZFwiIT10eXBlb2YgQnVmZmVyLG5ld0J1ZmZlckZyb206ZnVuY3Rpb24oZSx0KXtpZihCdWZmZXIuZnJvbSYmQnVmZmVyLmZyb20hPT1VaW50OEFycmF5LmZyb20pcmV0dXJuIEJ1ZmZlci5mcm9tKGUsdCk7aWYoXCJudW1iZXJcIj09dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCdUaGUgXCJkYXRhXCIgYXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXInKTtyZXR1cm4gbmV3IEJ1ZmZlcihlLHQpfSxhbGxvY0J1ZmZlcjpmdW5jdGlvbihlKXtpZihCdWZmZXIuYWxsb2MpcmV0dXJuIEJ1ZmZlci5hbGxvYyhlKTt2YXIgdD1uZXcgQnVmZmVyKGUpO3JldHVybiB0LmZpbGwoMCksdH0saXNCdWZmZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihlKX0saXNTdHJlYW06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGUub24mJlwiZnVuY3Rpb25cIj09dHlwZW9mIGUucGF1c2UmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGUucmVzdW1lfX19LHt9XSwxNTpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIHMoZSx0LHIpe3ZhciBuLGk9dS5nZXRUeXBlT2YodCkscz11LmV4dGVuZChyfHx7fSxmKTtzLmRhdGU9cy5kYXRlfHxuZXcgRGF0ZSxudWxsIT09cy5jb21wcmVzc2lvbiYmKHMuY29tcHJlc3Npb249cy5jb21wcmVzc2lvbi50b1VwcGVyQ2FzZSgpKSxcInN0cmluZ1wiPT10eXBlb2Ygcy51bml4UGVybWlzc2lvbnMmJihzLnVuaXhQZXJtaXNzaW9ucz1wYXJzZUludChzLnVuaXhQZXJtaXNzaW9ucyw4KSkscy51bml4UGVybWlzc2lvbnMmJjE2Mzg0JnMudW5peFBlcm1pc3Npb25zJiYocy5kaXI9ITApLHMuZG9zUGVybWlzc2lvbnMmJjE2JnMuZG9zUGVybWlzc2lvbnMmJihzLmRpcj0hMCkscy5kaXImJihlPWcoZSkpLHMuY3JlYXRlRm9sZGVycyYmKG49XyhlKSkmJmIuY2FsbCh0aGlzLG4sITApO3ZhciBhPVwic3RyaW5nXCI9PT1pJiYhMT09PXMuYmluYXJ5JiYhMT09PXMuYmFzZTY0O3ImJnZvaWQgMCE9PXIuYmluYXJ5fHwocy5iaW5hcnk9IWEpLCh0IGluc3RhbmNlb2YgYyYmMD09PXQudW5jb21wcmVzc2VkU2l6ZXx8cy5kaXJ8fCF0fHwwPT09dC5sZW5ndGgpJiYocy5iYXNlNjQ9ITEscy5iaW5hcnk9ITAsdD1cIlwiLHMuY29tcHJlc3Npb249XCJTVE9SRVwiLGk9XCJzdHJpbmdcIik7dmFyIG89bnVsbDtvPXQgaW5zdGFuY2VvZiBjfHx0IGluc3RhbmNlb2YgbD90OnAuaXNOb2RlJiZwLmlzU3RyZWFtKHQpP25ldyBtKGUsdCk6dS5wcmVwYXJlQ29udGVudChlLHQscy5iaW5hcnkscy5vcHRpbWl6ZWRCaW5hcnlTdHJpbmcscy5iYXNlNjQpO3ZhciBoPW5ldyBkKGUsbyxzKTt0aGlzLmZpbGVzW2VdPWh9dmFyIGk9ZShcIi4vdXRmOFwiKSx1PWUoXCIuL3V0aWxzXCIpLGw9ZShcIi4vc3RyZWFtL0dlbmVyaWNXb3JrZXJcIiksYT1lKFwiLi9zdHJlYW0vU3RyZWFtSGVscGVyXCIpLGY9ZShcIi4vZGVmYXVsdHNcIiksYz1lKFwiLi9jb21wcmVzc2VkT2JqZWN0XCIpLGQ9ZShcIi4vemlwT2JqZWN0XCIpLG89ZShcIi4vZ2VuZXJhdGVcIikscD1lKFwiLi9ub2RlanNVdGlsc1wiKSxtPWUoXCIuL25vZGVqcy9Ob2RlanNTdHJlYW1JbnB1dEFkYXB0ZXJcIiksXz1mdW5jdGlvbihlKXtcIi9cIj09PWUuc2xpY2UoLTEpJiYoZT1lLnN1YnN0cmluZygwLGUubGVuZ3RoLTEpKTt2YXIgdD1lLmxhc3RJbmRleE9mKFwiL1wiKTtyZXR1cm4gMDx0P2Uuc3Vic3RyaW5nKDAsdCk6XCJcIn0sZz1mdW5jdGlvbihlKXtyZXR1cm5cIi9cIiE9PWUuc2xpY2UoLTEpJiYoZSs9XCIvXCIpLGV9LGI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD12b2lkIDAhPT10P3Q6Zi5jcmVhdGVGb2xkZXJzLGU9ZyhlKSx0aGlzLmZpbGVzW2VdfHxzLmNhbGwodGhpcyxlLG51bGwse2RpcjohMCxjcmVhdGVGb2xkZXJzOnR9KSx0aGlzLmZpbGVzW2VdfTtmdW5jdGlvbiBoKGUpe3JldHVyblwiW29iamVjdCBSZWdFeHBdXCI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSl9dmFyIG49e2xvYWQ6ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIG1ldGhvZCBoYXMgYmVlbiByZW1vdmVkIGluIEpTWmlwIDMuMCwgcGxlYXNlIGNoZWNrIHRoZSB1cGdyYWRlIGd1aWRlLlwiKX0sZm9yRWFjaDpmdW5jdGlvbihlKXt2YXIgdCxyLG47Zm9yKHQgaW4gdGhpcy5maWxlcyluPXRoaXMuZmlsZXNbdF0sKHI9dC5zbGljZSh0aGlzLnJvb3QubGVuZ3RoLHQubGVuZ3RoKSkmJnQuc2xpY2UoMCx0aGlzLnJvb3QubGVuZ3RoKT09PXRoaXMucm9vdCYmZShyLG4pfSxmaWx0ZXI6ZnVuY3Rpb24ocil7dmFyIG49W107cmV0dXJuIHRoaXMuZm9yRWFjaChmdW5jdGlvbihlLHQpe3IoZSx0KSYmbi5wdXNoKHQpfSksbn0sZmlsZTpmdW5jdGlvbihlLHQscil7aWYoMSE9PWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGU9dGhpcy5yb290K2Uscy5jYWxsKHRoaXMsZSx0LHIpLHRoaXM7aWYoaChlKSl7dmFyIG49ZTtyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oZSx0KXtyZXR1cm4hdC5kaXImJm4udGVzdChlKX0pfXZhciBpPXRoaXMuZmlsZXNbdGhpcy5yb290K2VdO3JldHVybiBpJiYhaS5kaXI/aTpudWxsfSxmb2xkZXI6ZnVuY3Rpb24ocil7aWYoIXIpcmV0dXJuIHRoaXM7aWYoaChyKSlyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5kaXImJnIudGVzdChlKX0pO3ZhciBlPXRoaXMucm9vdCtyLHQ9Yi5jYWxsKHRoaXMsZSksbj10aGlzLmNsb25lKCk7cmV0dXJuIG4ucm9vdD10Lm5hbWUsbn0scmVtb3ZlOmZ1bmN0aW9uKHIpe3I9dGhpcy5yb290K3I7dmFyIGU9dGhpcy5maWxlc1tyXTtpZihlfHwoXCIvXCIhPT1yLnNsaWNlKC0xKSYmKHIrPVwiL1wiKSxlPXRoaXMuZmlsZXNbcl0pLGUmJiFlLmRpcilkZWxldGUgdGhpcy5maWxlc1tyXTtlbHNlIGZvcih2YXIgdD10aGlzLmZpbHRlcihmdW5jdGlvbihlLHQpe3JldHVybiB0Lm5hbWUuc2xpY2UoMCxyLmxlbmd0aCk9PT1yfSksbj0wO248dC5sZW5ndGg7bisrKWRlbGV0ZSB0aGlzLmZpbGVzW3Rbbl0ubmFtZV07cmV0dXJuIHRoaXN9LGdlbmVyYXRlOmZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcihcIlRoaXMgbWV0aG9kIGhhcyBiZWVuIHJlbW92ZWQgaW4gSlNaaXAgMy4wLCBwbGVhc2UgY2hlY2sgdGhlIHVwZ3JhZGUgZ3VpZGUuXCIpfSxnZW5lcmF0ZUludGVybmFsU3RyZWFtOmZ1bmN0aW9uKGUpe3ZhciB0LHI9e307dHJ5e2lmKChyPXUuZXh0ZW5kKGV8fHt9LHtzdHJlYW1GaWxlczohMSxjb21wcmVzc2lvbjpcIlNUT1JFXCIsY29tcHJlc3Npb25PcHRpb25zOm51bGwsdHlwZTpcIlwiLHBsYXRmb3JtOlwiRE9TXCIsY29tbWVudDpudWxsLG1pbWVUeXBlOlwiYXBwbGljYXRpb24vemlwXCIsZW5jb2RlRmlsZU5hbWU6aS51dGY4ZW5jb2RlfSkpLnR5cGU9ci50eXBlLnRvTG93ZXJDYXNlKCksci5jb21wcmVzc2lvbj1yLmNvbXByZXNzaW9uLnRvVXBwZXJDYXNlKCksXCJiaW5hcnlzdHJpbmdcIj09PXIudHlwZSYmKHIudHlwZT1cInN0cmluZ1wiKSwhci50eXBlKXRocm93IG5ldyBFcnJvcihcIk5vIG91dHB1dCB0eXBlIHNwZWNpZmllZC5cIik7dS5jaGVja1N1cHBvcnQoci50eXBlKSxcImRhcndpblwiIT09ci5wbGF0Zm9ybSYmXCJmcmVlYnNkXCIhPT1yLnBsYXRmb3JtJiZcImxpbnV4XCIhPT1yLnBsYXRmb3JtJiZcInN1bm9zXCIhPT1yLnBsYXRmb3JtfHwoci5wbGF0Zm9ybT1cIlVOSVhcIiksXCJ3aW4zMlwiPT09ci5wbGF0Zm9ybSYmKHIucGxhdGZvcm09XCJET1NcIik7dmFyIG49ci5jb21tZW50fHx0aGlzLmNvbW1lbnR8fFwiXCI7dD1vLmdlbmVyYXRlV29ya2VyKHRoaXMscixuKX1jYXRjaChlKXsodD1uZXcgbChcImVycm9yXCIpKS5lcnJvcihlKX1yZXR1cm4gbmV3IGEodCxyLnR5cGV8fFwic3RyaW5nXCIsci5taW1lVHlwZSl9LGdlbmVyYXRlQXN5bmM6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5nZW5lcmF0ZUludGVybmFsU3RyZWFtKGUpLmFjY3VtdWxhdGUodCl9LGdlbmVyYXRlTm9kZVN0cmVhbTpmdW5jdGlvbihlLHQpe3JldHVybihlPWV8fHt9KS50eXBlfHwoZS50eXBlPVwibm9kZWJ1ZmZlclwiKSx0aGlzLmdlbmVyYXRlSW50ZXJuYWxTdHJlYW0oZSkudG9Ob2RlanNTdHJlYW0odCl9fTt0LmV4cG9ydHM9bn0se1wiLi9jb21wcmVzc2VkT2JqZWN0XCI6MixcIi4vZGVmYXVsdHNcIjo1LFwiLi9nZW5lcmF0ZVwiOjksXCIuL25vZGVqcy9Ob2RlanNTdHJlYW1JbnB1dEFkYXB0ZXJcIjoxMixcIi4vbm9kZWpzVXRpbHNcIjoxNCxcIi4vc3RyZWFtL0dlbmVyaWNXb3JrZXJcIjoyOCxcIi4vc3RyZWFtL1N0cmVhbUhlbHBlclwiOjI5LFwiLi91dGY4XCI6MzEsXCIuL3V0aWxzXCI6MzIsXCIuL3ppcE9iamVjdFwiOjM1fV0sMTY6W2Z1bmN0aW9uKGUsdCxyKXt0LmV4cG9ydHM9ZShcInN0cmVhbVwiKX0se3N0cmVhbTp2b2lkIDB9XSwxNzpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCIuL0RhdGFSZWFkZXJcIik7ZnVuY3Rpb24gaShlKXtuLmNhbGwodGhpcyxlKTtmb3IodmFyIHQ9MDt0PHRoaXMuZGF0YS5sZW5ndGg7dCsrKWVbdF09MjU1JmVbdF19ZShcIi4uL3V0aWxzXCIpLmluaGVyaXRzKGksbiksaS5wcm90b3R5cGUuYnl0ZUF0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmRhdGFbdGhpcy56ZXJvK2VdfSxpLnByb3RvdHlwZS5sYXN0SW5kZXhPZlNpZ25hdHVyZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS5jaGFyQ29kZUF0KDApLHI9ZS5jaGFyQ29kZUF0KDEpLG49ZS5jaGFyQ29kZUF0KDIpLGk9ZS5jaGFyQ29kZUF0KDMpLHM9dGhpcy5sZW5ndGgtNDswPD1zOy0tcylpZih0aGlzLmRhdGFbc109PT10JiZ0aGlzLmRhdGFbcysxXT09PXImJnRoaXMuZGF0YVtzKzJdPT09biYmdGhpcy5kYXRhW3MrM109PT1pKXJldHVybiBzLXRoaXMuemVybztyZXR1cm4tMX0saS5wcm90b3R5cGUucmVhZEFuZENoZWNrU2lnbmF0dXJlPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY2hhckNvZGVBdCgwKSxyPWUuY2hhckNvZGVBdCgxKSxuPWUuY2hhckNvZGVBdCgyKSxpPWUuY2hhckNvZGVBdCgzKSxzPXRoaXMucmVhZERhdGEoNCk7cmV0dXJuIHQ9PT1zWzBdJiZyPT09c1sxXSYmbj09PXNbMl0mJmk9PT1zWzNdfSxpLnByb3RvdHlwZS5yZWFkRGF0YT1mdW5jdGlvbihlKXtpZih0aGlzLmNoZWNrT2Zmc2V0KGUpLDA9PT1lKXJldHVybltdO3ZhciB0PXRoaXMuZGF0YS5zbGljZSh0aGlzLnplcm8rdGhpcy5pbmRleCx0aGlzLnplcm8rdGhpcy5pbmRleCtlKTtyZXR1cm4gdGhpcy5pbmRleCs9ZSx0fSx0LmV4cG9ydHM9aX0se1wiLi4vdXRpbHNcIjozMixcIi4vRGF0YVJlYWRlclwiOjE4fV0sMTg6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi4vdXRpbHNcIik7ZnVuY3Rpb24gaShlKXt0aGlzLmRhdGE9ZSx0aGlzLmxlbmd0aD1lLmxlbmd0aCx0aGlzLmluZGV4PTAsdGhpcy56ZXJvPTB9aS5wcm90b3R5cGU9e2NoZWNrT2Zmc2V0OmZ1bmN0aW9uKGUpe3RoaXMuY2hlY2tJbmRleCh0aGlzLmluZGV4K2UpfSxjaGVja0luZGV4OmZ1bmN0aW9uKGUpe2lmKHRoaXMubGVuZ3RoPHRoaXMuemVybytlfHxlPDApdGhyb3cgbmV3IEVycm9yKFwiRW5kIG9mIGRhdGEgcmVhY2hlZCAoZGF0YSBsZW5ndGggPSBcIit0aGlzLmxlbmd0aCtcIiwgYXNrZWQgaW5kZXggPSBcIitlK1wiKS4gQ29ycnVwdGVkIHppcCA/XCIpfSxzZXRJbmRleDpmdW5jdGlvbihlKXt0aGlzLmNoZWNrSW5kZXgoZSksdGhpcy5pbmRleD1lfSxza2lwOmZ1bmN0aW9uKGUpe3RoaXMuc2V0SW5kZXgodGhpcy5pbmRleCtlKX0sYnl0ZUF0OmZ1bmN0aW9uKGUpe30scmVhZEludDpmdW5jdGlvbihlKXt2YXIgdCxyPTA7Zm9yKHRoaXMuY2hlY2tPZmZzZXQoZSksdD10aGlzLmluZGV4K2UtMTt0Pj10aGlzLmluZGV4O3QtLSlyPShyPDw4KSt0aGlzLmJ5dGVBdCh0KTtyZXR1cm4gdGhpcy5pbmRleCs9ZSxyfSxyZWFkU3RyaW5nOmZ1bmN0aW9uKGUpe3JldHVybiBuLnRyYW5zZm9ybVRvKFwic3RyaW5nXCIsdGhpcy5yZWFkRGF0YShlKSl9LHJlYWREYXRhOmZ1bmN0aW9uKGUpe30sbGFzdEluZGV4T2ZTaWduYXR1cmU6ZnVuY3Rpb24oZSl7fSxyZWFkQW5kQ2hlY2tTaWduYXR1cmU6ZnVuY3Rpb24oZSl7fSxyZWFkRGF0ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucmVhZEludCg0KTtyZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMoMTk4MCsoZT4+MjUmMTI3KSwoZT4+MjEmMTUpLTEsZT4+MTYmMzEsZT4+MTEmMzEsZT4+NSY2MywoMzEmZSk8PDEpKX19LHQuZXhwb3J0cz1pfSx7XCIuLi91dGlsc1wiOjMyfV0sMTk6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi9VaW50OEFycmF5UmVhZGVyXCIpO2Z1bmN0aW9uIGkoZSl7bi5jYWxsKHRoaXMsZSl9ZShcIi4uL3V0aWxzXCIpLmluaGVyaXRzKGksbiksaS5wcm90b3R5cGUucmVhZERhdGE9ZnVuY3Rpb24oZSl7dGhpcy5jaGVja09mZnNldChlKTt2YXIgdD10aGlzLmRhdGEuc2xpY2UodGhpcy56ZXJvK3RoaXMuaW5kZXgsdGhpcy56ZXJvK3RoaXMuaW5kZXgrZSk7cmV0dXJuIHRoaXMuaW5kZXgrPWUsdH0sdC5leHBvcnRzPWl9LHtcIi4uL3V0aWxzXCI6MzIsXCIuL1VpbnQ4QXJyYXlSZWFkZXJcIjoyMX1dLDIwOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcIi4vRGF0YVJlYWRlclwiKTtmdW5jdGlvbiBpKGUpe24uY2FsbCh0aGlzLGUpfWUoXCIuLi91dGlsc1wiKS5pbmhlcml0cyhpLG4pLGkucHJvdG90eXBlLmJ5dGVBdD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5kYXRhLmNoYXJDb2RlQXQodGhpcy56ZXJvK2UpfSxpLnByb3RvdHlwZS5sYXN0SW5kZXhPZlNpZ25hdHVyZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5kYXRhLmxhc3RJbmRleE9mKGUpLXRoaXMuemVyb30saS5wcm90b3R5cGUucmVhZEFuZENoZWNrU2lnbmF0dXJlPWZ1bmN0aW9uKGUpe3JldHVybiBlPT09dGhpcy5yZWFkRGF0YSg0KX0saS5wcm90b3R5cGUucmVhZERhdGE9ZnVuY3Rpb24oZSl7dGhpcy5jaGVja09mZnNldChlKTt2YXIgdD10aGlzLmRhdGEuc2xpY2UodGhpcy56ZXJvK3RoaXMuaW5kZXgsdGhpcy56ZXJvK3RoaXMuaW5kZXgrZSk7cmV0dXJuIHRoaXMuaW5kZXgrPWUsdH0sdC5leHBvcnRzPWl9LHtcIi4uL3V0aWxzXCI6MzIsXCIuL0RhdGFSZWFkZXJcIjoxOH1dLDIxOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcIi4vQXJyYXlSZWFkZXJcIik7ZnVuY3Rpb24gaShlKXtuLmNhbGwodGhpcyxlKX1lKFwiLi4vdXRpbHNcIikuaW5oZXJpdHMoaSxuKSxpLnByb3RvdHlwZS5yZWFkRGF0YT1mdW5jdGlvbihlKXtpZih0aGlzLmNoZWNrT2Zmc2V0KGUpLDA9PT1lKXJldHVybiBuZXcgVWludDhBcnJheSgwKTt2YXIgdD10aGlzLmRhdGEuc3ViYXJyYXkodGhpcy56ZXJvK3RoaXMuaW5kZXgsdGhpcy56ZXJvK3RoaXMuaW5kZXgrZSk7cmV0dXJuIHRoaXMuaW5kZXgrPWUsdH0sdC5leHBvcnRzPWl9LHtcIi4uL3V0aWxzXCI6MzIsXCIuL0FycmF5UmVhZGVyXCI6MTd9XSwyMjpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCIuLi91dGlsc1wiKSxpPWUoXCIuLi9zdXBwb3J0XCIpLHM9ZShcIi4vQXJyYXlSZWFkZXJcIiksYT1lKFwiLi9TdHJpbmdSZWFkZXJcIiksbz1lKFwiLi9Ob2RlQnVmZmVyUmVhZGVyXCIpLGg9ZShcIi4vVWludDhBcnJheVJlYWRlclwiKTt0LmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9bi5nZXRUeXBlT2YoZSk7cmV0dXJuIG4uY2hlY2tTdXBwb3J0KHQpLFwic3RyaW5nXCIhPT10fHxpLnVpbnQ4YXJyYXk/XCJub2RlYnVmZmVyXCI9PT10P25ldyBvKGUpOmkudWludDhhcnJheT9uZXcgaChuLnRyYW5zZm9ybVRvKFwidWludDhhcnJheVwiLGUpKTpuZXcgcyhuLnRyYW5zZm9ybVRvKFwiYXJyYXlcIixlKSk6bmV3IGEoZSl9fSx7XCIuLi9zdXBwb3J0XCI6MzAsXCIuLi91dGlsc1wiOjMyLFwiLi9BcnJheVJlYWRlclwiOjE3LFwiLi9Ob2RlQnVmZmVyUmVhZGVyXCI6MTksXCIuL1N0cmluZ1JlYWRlclwiOjIwLFwiLi9VaW50OEFycmF5UmVhZGVyXCI6MjF9XSwyMzpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3IuTE9DQUxfRklMRV9IRUFERVI9XCJQS1x1MDAwM1x1MDAwNFwiLHIuQ0VOVFJBTF9GSUxFX0hFQURFUj1cIlBLXHUwMDAxXHUwMDAyXCIsci5DRU5UUkFMX0RJUkVDVE9SWV9FTkQ9XCJQS1x1MDAwNVx1MDAwNlwiLHIuWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfTE9DQVRPUj1cIlBLXHUwMDA2XHUwMDA3XCIsci5aSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9FTkQ9XCJQS1x1MDAwNlx1MDAwNlwiLHIuREFUQV9ERVNDUklQVE9SPVwiUEtcdTAwMDdcXGJcIn0se31dLDI0OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcIi4vR2VuZXJpY1dvcmtlclwiKSxpPWUoXCIuLi91dGlsc1wiKTtmdW5jdGlvbiBzKGUpe24uY2FsbCh0aGlzLFwiQ29udmVydFdvcmtlciB0byBcIitlKSx0aGlzLmRlc3RUeXBlPWV9aS5pbmhlcml0cyhzLG4pLHMucHJvdG90eXBlLnByb2Nlc3NDaHVuaz1mdW5jdGlvbihlKXt0aGlzLnB1c2goe2RhdGE6aS50cmFuc2Zvcm1Ubyh0aGlzLmRlc3RUeXBlLGUuZGF0YSksbWV0YTplLm1ldGF9KX0sdC5leHBvcnRzPXN9LHtcIi4uL3V0aWxzXCI6MzIsXCIuL0dlbmVyaWNXb3JrZXJcIjoyOH1dLDI1OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZShcIi4vR2VuZXJpY1dvcmtlclwiKSxpPWUoXCIuLi9jcmMzMlwiKTtmdW5jdGlvbiBzKCl7bi5jYWxsKHRoaXMsXCJDcmMzMlByb2JlXCIpLHRoaXMud2l0aFN0cmVhbUluZm8oXCJjcmMzMlwiLDApfWUoXCIuLi91dGlsc1wiKS5pbmhlcml0cyhzLG4pLHMucHJvdG90eXBlLnByb2Nlc3NDaHVuaz1mdW5jdGlvbihlKXt0aGlzLnN0cmVhbUluZm8uY3JjMzI9aShlLmRhdGEsdGhpcy5zdHJlYW1JbmZvLmNyYzMyfHwwKSx0aGlzLnB1c2goZSl9LHQuZXhwb3J0cz1zfSx7XCIuLi9jcmMzMlwiOjQsXCIuLi91dGlsc1wiOjMyLFwiLi9HZW5lcmljV29ya2VyXCI6Mjh9XSwyNjpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCIuLi91dGlsc1wiKSxpPWUoXCIuL0dlbmVyaWNXb3JrZXJcIik7ZnVuY3Rpb24gcyhlKXtpLmNhbGwodGhpcyxcIkRhdGFMZW5ndGhQcm9iZSBmb3IgXCIrZSksdGhpcy5wcm9wTmFtZT1lLHRoaXMud2l0aFN0cmVhbUluZm8oZSwwKX1uLmluaGVyaXRzKHMsaSkscy5wcm90b3R5cGUucHJvY2Vzc0NodW5rPWZ1bmN0aW9uKGUpe2lmKGUpe3ZhciB0PXRoaXMuc3RyZWFtSW5mb1t0aGlzLnByb3BOYW1lXXx8MDt0aGlzLnN0cmVhbUluZm9bdGhpcy5wcm9wTmFtZV09dCtlLmRhdGEubGVuZ3RofWkucHJvdG90eXBlLnByb2Nlc3NDaHVuay5jYWxsKHRoaXMsZSl9LHQuZXhwb3J0cz1zfSx7XCIuLi91dGlsc1wiOjMyLFwiLi9HZW5lcmljV29ya2VyXCI6Mjh9XSwyNzpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWUoXCIuLi91dGlsc1wiKSxpPWUoXCIuL0dlbmVyaWNXb3JrZXJcIik7ZnVuY3Rpb24gcyhlKXtpLmNhbGwodGhpcyxcIkRhdGFXb3JrZXJcIik7dmFyIHQ9dGhpczt0aGlzLmRhdGFJc1JlYWR5PSExLHRoaXMuaW5kZXg9MCx0aGlzLm1heD0wLHRoaXMuZGF0YT1udWxsLHRoaXMudHlwZT1cIlwiLHRoaXMuX3RpY2tTY2hlZHVsZWQ9ITEsZS50aGVuKGZ1bmN0aW9uKGUpe3QuZGF0YUlzUmVhZHk9ITAsdC5kYXRhPWUsdC5tYXg9ZSYmZS5sZW5ndGh8fDAsdC50eXBlPW4uZ2V0VHlwZU9mKGUpLHQuaXNQYXVzZWR8fHQuX3RpY2tBbmRSZXBlYXQoKX0sZnVuY3Rpb24oZSl7dC5lcnJvcihlKX0pfW4uaW5oZXJpdHMocyxpKSxzLnByb3RvdHlwZS5jbGVhblVwPWZ1bmN0aW9uKCl7aS5wcm90b3R5cGUuY2xlYW5VcC5jYWxsKHRoaXMpLHRoaXMuZGF0YT1udWxsfSxzLnByb3RvdHlwZS5yZXN1bWU9ZnVuY3Rpb24oKXtyZXR1cm4hIWkucHJvdG90eXBlLnJlc3VtZS5jYWxsKHRoaXMpJiYoIXRoaXMuX3RpY2tTY2hlZHVsZWQmJnRoaXMuZGF0YUlzUmVhZHkmJih0aGlzLl90aWNrU2NoZWR1bGVkPSEwLG4uZGVsYXkodGhpcy5fdGlja0FuZFJlcGVhdCxbXSx0aGlzKSksITApfSxzLnByb3RvdHlwZS5fdGlja0FuZFJlcGVhdD1mdW5jdGlvbigpe3RoaXMuX3RpY2tTY2hlZHVsZWQ9ITEsdGhpcy5pc1BhdXNlZHx8dGhpcy5pc0ZpbmlzaGVkfHwodGhpcy5fdGljaygpLHRoaXMuaXNGaW5pc2hlZHx8KG4uZGVsYXkodGhpcy5fdGlja0FuZFJlcGVhdCxbXSx0aGlzKSx0aGlzLl90aWNrU2NoZWR1bGVkPSEwKSl9LHMucHJvdG90eXBlLl90aWNrPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1BhdXNlZHx8dGhpcy5pc0ZpbmlzaGVkKXJldHVybiExO3ZhciBlPW51bGwsdD1NYXRoLm1pbih0aGlzLm1heCx0aGlzLmluZGV4KzE2Mzg0KTtpZih0aGlzLmluZGV4Pj10aGlzLm1heClyZXR1cm4gdGhpcy5lbmQoKTtzd2l0Y2godGhpcy50eXBlKXtjYXNlXCJzdHJpbmdcIjplPXRoaXMuZGF0YS5zdWJzdHJpbmcodGhpcy5pbmRleCx0KTticmVhaztjYXNlXCJ1aW50OGFycmF5XCI6ZT10aGlzLmRhdGEuc3ViYXJyYXkodGhpcy5pbmRleCx0KTticmVhaztjYXNlXCJhcnJheVwiOmNhc2VcIm5vZGVidWZmZXJcIjplPXRoaXMuZGF0YS5zbGljZSh0aGlzLmluZGV4LHQpfXJldHVybiB0aGlzLmluZGV4PXQsdGhpcy5wdXNoKHtkYXRhOmUsbWV0YTp7cGVyY2VudDp0aGlzLm1heD90aGlzLmluZGV4L3RoaXMubWF4KjEwMDowfX0pfSx0LmV4cG9ydHM9c30se1wiLi4vdXRpbHNcIjozMixcIi4vR2VuZXJpY1dvcmtlclwiOjI4fV0sMjg6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKGUpe3RoaXMubmFtZT1lfHxcImRlZmF1bHRcIix0aGlzLnN0cmVhbUluZm89e30sdGhpcy5nZW5lcmF0ZWRFcnJvcj1udWxsLHRoaXMuZXh0cmFTdHJlYW1JbmZvPXt9LHRoaXMuaXNQYXVzZWQ9ITAsdGhpcy5pc0ZpbmlzaGVkPSExLHRoaXMuaXNMb2NrZWQ9ITEsdGhpcy5fbGlzdGVuZXJzPXtkYXRhOltdLGVuZDpbXSxlcnJvcjpbXX0sdGhpcy5wcmV2aW91cz1udWxsfW4ucHJvdG90eXBlPXtwdXNoOmZ1bmN0aW9uKGUpe3RoaXMuZW1pdChcImRhdGFcIixlKX0sZW5kOmZ1bmN0aW9uKCl7aWYodGhpcy5pc0ZpbmlzaGVkKXJldHVybiExO3RoaXMuZmx1c2goKTt0cnl7dGhpcy5lbWl0KFwiZW5kXCIpLHRoaXMuY2xlYW5VcCgpLHRoaXMuaXNGaW5pc2hlZD0hMH1jYXRjaChlKXt0aGlzLmVtaXQoXCJlcnJvclwiLGUpfXJldHVybiEwfSxlcnJvcjpmdW5jdGlvbihlKXtyZXR1cm4hdGhpcy5pc0ZpbmlzaGVkJiYodGhpcy5pc1BhdXNlZD90aGlzLmdlbmVyYXRlZEVycm9yPWU6KHRoaXMuaXNGaW5pc2hlZD0hMCx0aGlzLmVtaXQoXCJlcnJvclwiLGUpLHRoaXMucHJldmlvdXMmJnRoaXMucHJldmlvdXMuZXJyb3IoZSksdGhpcy5jbGVhblVwKCkpLCEwKX0sb246ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fbGlzdGVuZXJzW2VdLnB1c2godCksdGhpc30sY2xlYW5VcDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtSW5mbz10aGlzLmdlbmVyYXRlZEVycm9yPXRoaXMuZXh0cmFTdHJlYW1JbmZvPW51bGwsdGhpcy5fbGlzdGVuZXJzPVtdfSxlbWl0OmZ1bmN0aW9uKGUsdCl7aWYodGhpcy5fbGlzdGVuZXJzW2VdKWZvcih2YXIgcj0wO3I8dGhpcy5fbGlzdGVuZXJzW2VdLmxlbmd0aDtyKyspdGhpcy5fbGlzdGVuZXJzW2VdW3JdLmNhbGwodGhpcyx0KX0scGlwZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZWdpc3RlclByZXZpb3VzKHRoaXMpfSxyZWdpc3RlclByZXZpb3VzOmZ1bmN0aW9uKGUpe2lmKHRoaXMuaXNMb2NrZWQpdGhyb3cgbmV3IEVycm9yKFwiVGhlIHN0cmVhbSAnXCIrdGhpcytcIicgaGFzIGFscmVhZHkgYmVlbiB1c2VkLlwiKTt0aGlzLnN0cmVhbUluZm89ZS5zdHJlYW1JbmZvLHRoaXMubWVyZ2VTdHJlYW1JbmZvKCksdGhpcy5wcmV2aW91cz1lO3ZhciB0PXRoaXM7cmV0dXJuIGUub24oXCJkYXRhXCIsZnVuY3Rpb24oZSl7dC5wcm9jZXNzQ2h1bmsoZSl9KSxlLm9uKFwiZW5kXCIsZnVuY3Rpb24oKXt0LmVuZCgpfSksZS5vbihcImVycm9yXCIsZnVuY3Rpb24oZSl7dC5lcnJvcihlKX0pLHRoaXN9LHBhdXNlOmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuaXNQYXVzZWQmJiF0aGlzLmlzRmluaXNoZWQmJih0aGlzLmlzUGF1c2VkPSEwLHRoaXMucHJldmlvdXMmJnRoaXMucHJldmlvdXMucGF1c2UoKSwhMCl9LHJlc3VtZTpmdW5jdGlvbigpe2lmKCF0aGlzLmlzUGF1c2VkfHx0aGlzLmlzRmluaXNoZWQpcmV0dXJuITE7dmFyIGU9dGhpcy5pc1BhdXNlZD0hMTtyZXR1cm4gdGhpcy5nZW5lcmF0ZWRFcnJvciYmKHRoaXMuZXJyb3IodGhpcy5nZW5lcmF0ZWRFcnJvciksZT0hMCksdGhpcy5wcmV2aW91cyYmdGhpcy5wcmV2aW91cy5yZXN1bWUoKSwhZX0sZmx1c2g6ZnVuY3Rpb24oKXt9LHByb2Nlc3NDaHVuazpmdW5jdGlvbihlKXt0aGlzLnB1c2goZSl9LHdpdGhTdHJlYW1JbmZvOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuZXh0cmFTdHJlYW1JbmZvW2VdPXQsdGhpcy5tZXJnZVN0cmVhbUluZm8oKSx0aGlzfSxtZXJnZVN0cmVhbUluZm86ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gdGhpcy5leHRyYVN0cmVhbUluZm8pdGhpcy5leHRyYVN0cmVhbUluZm8uaGFzT3duUHJvcGVydHkoZSkmJih0aGlzLnN0cmVhbUluZm9bZV09dGhpcy5leHRyYVN0cmVhbUluZm9bZV0pfSxsb2NrOmZ1bmN0aW9uKCl7aWYodGhpcy5pc0xvY2tlZCl0aHJvdyBuZXcgRXJyb3IoXCJUaGUgc3RyZWFtICdcIit0aGlzK1wiJyBoYXMgYWxyZWFkeSBiZWVuIHVzZWQuXCIpO3RoaXMuaXNMb2NrZWQ9ITAsdGhpcy5wcmV2aW91cyYmdGhpcy5wcmV2aW91cy5sb2NrKCl9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7dmFyIGU9XCJXb3JrZXIgXCIrdGhpcy5uYW1lO3JldHVybiB0aGlzLnByZXZpb3VzP3RoaXMucHJldmlvdXMrXCIgLT4gXCIrZTplfX0sdC5leHBvcnRzPW59LHt9XSwyOTpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBoPWUoXCIuLi91dGlsc1wiKSxpPWUoXCIuL0NvbnZlcnRXb3JrZXJcIikscz1lKFwiLi9HZW5lcmljV29ya2VyXCIpLHU9ZShcIi4uL2Jhc2U2NFwiKSxuPWUoXCIuLi9zdXBwb3J0XCIpLGE9ZShcIi4uL2V4dGVybmFsXCIpLG89bnVsbDtpZihuLm5vZGVzdHJlYW0pdHJ5e289ZShcIi4uL25vZGVqcy9Ob2RlanNTdHJlYW1PdXRwdXRBZGFwdGVyXCIpfWNhdGNoKGUpe31mdW5jdGlvbiBsKGUsbyl7cmV0dXJuIG5ldyBhLlByb21pc2UoZnVuY3Rpb24odCxyKXt2YXIgbj1bXSxpPWUuX2ludGVybmFsVHlwZSxzPWUuX291dHB1dFR5cGUsYT1lLl9taW1lVHlwZTtlLm9uKFwiZGF0YVwiLGZ1bmN0aW9uKGUsdCl7bi5wdXNoKGUpLG8mJm8odCl9KS5vbihcImVycm9yXCIsZnVuY3Rpb24oZSl7bj1bXSxyKGUpfSkub24oXCJlbmRcIixmdW5jdGlvbigpe3RyeXt2YXIgZT1mdW5jdGlvbihlLHQscil7c3dpdGNoKGUpe2Nhc2VcImJsb2JcIjpyZXR1cm4gaC5uZXdCbG9iKGgudHJhbnNmb3JtVG8oXCJhcnJheWJ1ZmZlclwiLHQpLHIpO2Nhc2VcImJhc2U2NFwiOnJldHVybiB1LmVuY29kZSh0KTtkZWZhdWx0OnJldHVybiBoLnRyYW5zZm9ybVRvKGUsdCl9fShzLGZ1bmN0aW9uKGUsdCl7dmFyIHIsbj0wLGk9bnVsbCxzPTA7Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKylzKz10W3JdLmxlbmd0aDtzd2l0Y2goZSl7Y2FzZVwic3RyaW5nXCI6cmV0dXJuIHQuam9pbihcIlwiKTtjYXNlXCJhcnJheVwiOnJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLHQpO2Nhc2VcInVpbnQ4YXJyYXlcIjpmb3IoaT1uZXcgVWludDhBcnJheShzKSxyPTA7cjx0Lmxlbmd0aDtyKyspaS5zZXQodFtyXSxuKSxuKz10W3JdLmxlbmd0aDtyZXR1cm4gaTtjYXNlXCJub2RlYnVmZmVyXCI6cmV0dXJuIEJ1ZmZlci5jb25jYXQodCk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJjb25jYXQgOiB1bnN1cHBvcnRlZCB0eXBlICdcIitlK1wiJ1wiKX19KGksbiksYSk7dChlKX1jYXRjaChlKXtyKGUpfW49W119KS5yZXN1bWUoKX0pfWZ1bmN0aW9uIGYoZSx0LHIpe3ZhciBuPXQ7c3dpdGNoKHQpe2Nhc2VcImJsb2JcIjpjYXNlXCJhcnJheWJ1ZmZlclwiOm49XCJ1aW50OGFycmF5XCI7YnJlYWs7Y2FzZVwiYmFzZTY0XCI6bj1cInN0cmluZ1wifXRyeXt0aGlzLl9pbnRlcm5hbFR5cGU9bix0aGlzLl9vdXRwdXRUeXBlPXQsdGhpcy5fbWltZVR5cGU9cixoLmNoZWNrU3VwcG9ydChuKSx0aGlzLl93b3JrZXI9ZS5waXBlKG5ldyBpKG4pKSxlLmxvY2soKX1jYXRjaChlKXt0aGlzLl93b3JrZXI9bmV3IHMoXCJlcnJvclwiKSx0aGlzLl93b3JrZXIuZXJyb3IoZSl9fWYucHJvdG90eXBlPXthY2N1bXVsYXRlOmZ1bmN0aW9uKGUpe3JldHVybiBsKHRoaXMsZSl9LG9uOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcztyZXR1cm5cImRhdGFcIj09PWU/dGhpcy5fd29ya2VyLm9uKGUsZnVuY3Rpb24oZSl7dC5jYWxsKHIsZS5kYXRhLGUubWV0YSl9KTp0aGlzLl93b3JrZXIub24oZSxmdW5jdGlvbigpe2guZGVsYXkodCxhcmd1bWVudHMscil9KSx0aGlzfSxyZXN1bWU6ZnVuY3Rpb24oKXtyZXR1cm4gaC5kZWxheSh0aGlzLl93b3JrZXIucmVzdW1lLFtdLHRoaXMuX3dvcmtlciksdGhpc30scGF1c2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd29ya2VyLnBhdXNlKCksdGhpc30sdG9Ob2RlanNTdHJlYW06ZnVuY3Rpb24oZSl7aWYoaC5jaGVja1N1cHBvcnQoXCJub2Rlc3RyZWFtXCIpLFwibm9kZWJ1ZmZlclwiIT09dGhpcy5fb3V0cHV0VHlwZSl0aHJvdyBuZXcgRXJyb3IodGhpcy5fb3V0cHV0VHlwZStcIiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgbWV0aG9kXCIpO3JldHVybiBuZXcgbyh0aGlzLHtvYmplY3RNb2RlOlwibm9kZWJ1ZmZlclwiIT09dGhpcy5fb3V0cHV0VHlwZX0sZSl9fSx0LmV4cG9ydHM9Zn0se1wiLi4vYmFzZTY0XCI6MSxcIi4uL2V4dGVybmFsXCI6NixcIi4uL25vZGVqcy9Ob2RlanNTdHJlYW1PdXRwdXRBZGFwdGVyXCI6MTMsXCIuLi9zdXBwb3J0XCI6MzAsXCIuLi91dGlsc1wiOjMyLFwiLi9Db252ZXJ0V29ya2VyXCI6MjQsXCIuL0dlbmVyaWNXb3JrZXJcIjoyOH1dLDMwOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7aWYoci5iYXNlNjQ9ITAsci5hcnJheT0hMCxyLnN0cmluZz0hMCxyLmFycmF5YnVmZmVyPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFVpbnQ4QXJyYXksci5ub2RlYnVmZmVyPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBCdWZmZXIsci51aW50OGFycmF5PVwidW5kZWZpbmVkXCIhPXR5cGVvZiBVaW50OEFycmF5LFwidW5kZWZpbmVkXCI9PXR5cGVvZiBBcnJheUJ1ZmZlcilyLmJsb2I9ITE7ZWxzZXt2YXIgbj1uZXcgQXJyYXlCdWZmZXIoMCk7dHJ5e3IuYmxvYj0wPT09bmV3IEJsb2IoW25dLHt0eXBlOlwiYXBwbGljYXRpb24vemlwXCJ9KS5zaXplfWNhdGNoKGUpe3RyeXt2YXIgaT1uZXcoc2VsZi5CbG9iQnVpbGRlcnx8c2VsZi5XZWJLaXRCbG9iQnVpbGRlcnx8c2VsZi5Nb3pCbG9iQnVpbGRlcnx8c2VsZi5NU0Jsb2JCdWlsZGVyKTtpLmFwcGVuZChuKSxyLmJsb2I9MD09PWkuZ2V0QmxvYihcImFwcGxpY2F0aW9uL3ppcFwiKS5zaXplfWNhdGNoKGUpe3IuYmxvYj0hMX19fXRyeXtyLm5vZGVzdHJlYW09ISFlKFwicmVhZGFibGUtc3RyZWFtXCIpLlJlYWRhYmxlfWNhdGNoKGUpe3Iubm9kZXN0cmVhbT0hMX19LHtcInJlYWRhYmxlLXN0cmVhbVwiOjE2fV0sMzE6W2Z1bmN0aW9uKGUsdCxzKXtcInVzZSBzdHJpY3RcIjtmb3IodmFyIG89ZShcIi4vdXRpbHNcIiksaD1lKFwiLi9zdXBwb3J0XCIpLHI9ZShcIi4vbm9kZWpzVXRpbHNcIiksbj1lKFwiLi9zdHJlYW0vR2VuZXJpY1dvcmtlclwiKSx1PW5ldyBBcnJheSgyNTYpLGk9MDtpPDI1NjtpKyspdVtpXT0yNTI8PWk/NjoyNDg8PWk/NToyNDA8PWk/NDoyMjQ8PWk/MzoxOTI8PWk/MjoxO3VbMjU0XT11WzI1NF09MTtmdW5jdGlvbiBhKCl7bi5jYWxsKHRoaXMsXCJ1dGYtOCBkZWNvZGVcIiksdGhpcy5sZWZ0T3Zlcj1udWxsfWZ1bmN0aW9uIGwoKXtuLmNhbGwodGhpcyxcInV0Zi04IGVuY29kZVwiKX1zLnV0ZjhlbmNvZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGgubm9kZWJ1ZmZlcj9yLm5ld0J1ZmZlckZyb20oZSxcInV0Zi04XCIpOmZ1bmN0aW9uKGUpe3ZhciB0LHIsbixpLHMsYT1lLmxlbmd0aCxvPTA7Zm9yKGk9MDtpPGE7aSsrKTU1Mjk2PT0oNjQ1MTImKHI9ZS5jaGFyQ29kZUF0KGkpKSkmJmkrMTxhJiY1NjMyMD09KDY0NTEyJihuPWUuY2hhckNvZGVBdChpKzEpKSkmJihyPTY1NTM2KyhyLTU1Mjk2PDwxMCkrKG4tNTYzMjApLGkrKyksbys9cjwxMjg/MTpyPDIwNDg/MjpyPDY1NTM2PzM6NDtmb3IodD1oLnVpbnQ4YXJyYXk/bmV3IFVpbnQ4QXJyYXkobyk6bmV3IEFycmF5KG8pLGk9cz0wO3M8bztpKyspNTUyOTY9PSg2NDUxMiYocj1lLmNoYXJDb2RlQXQoaSkpKSYmaSsxPGEmJjU2MzIwPT0oNjQ1MTImKG49ZS5jaGFyQ29kZUF0KGkrMSkpKSYmKHI9NjU1MzYrKHItNTUyOTY8PDEwKSsobi01NjMyMCksaSsrKSxyPDEyOD90W3MrK109cjoocjwyMDQ4P3RbcysrXT0xOTJ8cj4+PjY6KHI8NjU1MzY/dFtzKytdPTIyNHxyPj4+MTI6KHRbcysrXT0yNDB8cj4+PjE4LHRbcysrXT0xMjh8cj4+PjEyJjYzKSx0W3MrK109MTI4fHI+Pj42JjYzKSx0W3MrK109MTI4fDYzJnIpO3JldHVybiB0fShlKX0scy51dGY4ZGVjb2RlPWZ1bmN0aW9uKGUpe3JldHVybiBoLm5vZGVidWZmZXI/by50cmFuc2Zvcm1UbyhcIm5vZGVidWZmZXJcIixlKS50b1N0cmluZyhcInV0Zi04XCIpOmZ1bmN0aW9uKGUpe3ZhciB0LHIsbixpLHM9ZS5sZW5ndGgsYT1uZXcgQXJyYXkoMipzKTtmb3IodD1yPTA7dDxzOylpZigobj1lW3QrK10pPDEyOClhW3IrK109bjtlbHNlIGlmKDQ8KGk9dVtuXSkpYVtyKytdPTY1NTMzLHQrPWktMTtlbHNle2ZvcihuJj0yPT09aT8zMTozPT09aT8xNTo3OzE8aSYmdDxzOyluPW48PDZ8NjMmZVt0KytdLGktLTsxPGk/YVtyKytdPTY1NTMzOm48NjU1MzY/YVtyKytdPW46KG4tPTY1NTM2LGFbcisrXT01NTI5NnxuPj4xMCYxMDIzLGFbcisrXT01NjMyMHwxMDIzJm4pfXJldHVybiBhLmxlbmd0aCE9PXImJihhLnN1YmFycmF5P2E9YS5zdWJhcnJheSgwLHIpOmEubGVuZ3RoPXIpLG8uYXBwbHlGcm9tQ2hhckNvZGUoYSl9KGU9by50cmFuc2Zvcm1UbyhoLnVpbnQ4YXJyYXk/XCJ1aW50OGFycmF5XCI6XCJhcnJheVwiLGUpKX0sby5pbmhlcml0cyhhLG4pLGEucHJvdG90eXBlLnByb2Nlc3NDaHVuaz1mdW5jdGlvbihlKXt2YXIgdD1vLnRyYW5zZm9ybVRvKGgudWludDhhcnJheT9cInVpbnQ4YXJyYXlcIjpcImFycmF5XCIsZS5kYXRhKTtpZih0aGlzLmxlZnRPdmVyJiZ0aGlzLmxlZnRPdmVyLmxlbmd0aCl7aWYoaC51aW50OGFycmF5KXt2YXIgcj10Oyh0PW5ldyBVaW50OEFycmF5KHIubGVuZ3RoK3RoaXMubGVmdE92ZXIubGVuZ3RoKSkuc2V0KHRoaXMubGVmdE92ZXIsMCksdC5zZXQocix0aGlzLmxlZnRPdmVyLmxlbmd0aCl9ZWxzZSB0PXRoaXMubGVmdE92ZXIuY29uY2F0KHQpO3RoaXMubGVmdE92ZXI9bnVsbH12YXIgbj1mdW5jdGlvbihlLHQpe3ZhciByO2ZvcigodD10fHxlLmxlbmd0aCk+ZS5sZW5ndGgmJih0PWUubGVuZ3RoKSxyPXQtMTswPD1yJiYxMjg9PSgxOTImZVtyXSk7KXItLTtyZXR1cm4gcjwwP3Q6MD09PXI/dDpyK3VbZVtyXV0+dD9yOnR9KHQpLGk9dDtuIT09dC5sZW5ndGgmJihoLnVpbnQ4YXJyYXk/KGk9dC5zdWJhcnJheSgwLG4pLHRoaXMubGVmdE92ZXI9dC5zdWJhcnJheShuLHQubGVuZ3RoKSk6KGk9dC5zbGljZSgwLG4pLHRoaXMubGVmdE92ZXI9dC5zbGljZShuLHQubGVuZ3RoKSkpLHRoaXMucHVzaCh7ZGF0YTpzLnV0ZjhkZWNvZGUoaSksbWV0YTplLm1ldGF9KX0sYS5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24oKXt0aGlzLmxlZnRPdmVyJiZ0aGlzLmxlZnRPdmVyLmxlbmd0aCYmKHRoaXMucHVzaCh7ZGF0YTpzLnV0ZjhkZWNvZGUodGhpcy5sZWZ0T3ZlciksbWV0YTp7fX0pLHRoaXMubGVmdE92ZXI9bnVsbCl9LHMuVXRmOERlY29kZVdvcmtlcj1hLG8uaW5oZXJpdHMobCxuKSxsLnByb3RvdHlwZS5wcm9jZXNzQ2h1bms9ZnVuY3Rpb24oZSl7dGhpcy5wdXNoKHtkYXRhOnMudXRmOGVuY29kZShlLmRhdGEpLG1ldGE6ZS5tZXRhfSl9LHMuVXRmOEVuY29kZVdvcmtlcj1sfSx7XCIuL25vZGVqc1V0aWxzXCI6MTQsXCIuL3N0cmVhbS9HZW5lcmljV29ya2VyXCI6MjgsXCIuL3N1cHBvcnRcIjozMCxcIi4vdXRpbHNcIjozMn1dLDMyOltmdW5jdGlvbihlLHQsYSl7XCJ1c2Ugc3RyaWN0XCI7dmFyIG89ZShcIi4vc3VwcG9ydFwiKSxoPWUoXCIuL2Jhc2U2NFwiKSxyPWUoXCIuL25vZGVqc1V0aWxzXCIpLHU9ZShcIi4vZXh0ZXJuYWxcIik7ZnVuY3Rpb24gbihlKXtyZXR1cm4gZX1mdW5jdGlvbiBsKGUsdCl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDsrK3IpdFtyXT0yNTUmZS5jaGFyQ29kZUF0KHIpO3JldHVybiB0fWUoXCJzZXRpbW1lZGlhdGVcIiksYS5uZXdCbG9iPWZ1bmN0aW9uKHQscil7YS5jaGVja1N1cHBvcnQoXCJibG9iXCIpO3RyeXtyZXR1cm4gbmV3IEJsb2IoW3RdLHt0eXBlOnJ9KX1jYXRjaChlKXt0cnl7dmFyIG49bmV3KHNlbGYuQmxvYkJ1aWxkZXJ8fHNlbGYuV2ViS2l0QmxvYkJ1aWxkZXJ8fHNlbGYuTW96QmxvYkJ1aWxkZXJ8fHNlbGYuTVNCbG9iQnVpbGRlcik7cmV0dXJuIG4uYXBwZW5kKHQpLG4uZ2V0QmxvYihyKX1jYXRjaChlKXt0aHJvdyBuZXcgRXJyb3IoXCJCdWcgOiBjYW4ndCBjb25zdHJ1Y3QgdGhlIEJsb2IuXCIpfX19O3ZhciBpPXtzdHJpbmdpZnlCeUNodW5rOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1bXSxpPTAscz1lLmxlbmd0aDtpZihzPD1yKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsZSk7Zm9yKDtpPHM7KVwiYXJyYXlcIj09PXR8fFwibm9kZWJ1ZmZlclwiPT09dD9uLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLGUuc2xpY2UoaSxNYXRoLm1pbihpK3IscykpKSk6bi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxlLnN1YmFycmF5KGksTWF0aC5taW4oaStyLHMpKSkpLGkrPXI7cmV0dXJuIG4uam9pbihcIlwiKX0sc3RyaW5naWZ5QnlDaGFyOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1cIlwiLHI9MDtyPGUubGVuZ3RoO3IrKyl0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKGVbcl0pO3JldHVybiB0fSxhcHBseUNhbkJlVXNlZDp7dWludDhhcnJheTpmdW5jdGlvbigpe3RyeXtyZXR1cm4gby51aW50OGFycmF5JiYxPT09U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLG5ldyBVaW50OEFycmF5KDEpKS5sZW5ndGh9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLG5vZGVidWZmZXI6ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIG8ubm9kZWJ1ZmZlciYmMT09PVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxyLmFsbG9jQnVmZmVyKDEpKS5sZW5ndGh9Y2F0Y2goZSl7cmV0dXJuITF9fSgpfX07ZnVuY3Rpb24gcyhlKXt2YXIgdD02NTUzNixyPWEuZ2V0VHlwZU9mKGUpLG49ITA7aWYoXCJ1aW50OGFycmF5XCI9PT1yP249aS5hcHBseUNhbkJlVXNlZC51aW50OGFycmF5Olwibm9kZWJ1ZmZlclwiPT09ciYmKG49aS5hcHBseUNhbkJlVXNlZC5ub2RlYnVmZmVyKSxuKWZvcig7MTx0Oyl0cnl7cmV0dXJuIGkuc3RyaW5naWZ5QnlDaHVuayhlLHIsdCl9Y2F0Y2goZSl7dD1NYXRoLmZsb29yKHQvMil9cmV0dXJuIGkuc3RyaW5naWZ5QnlDaGFyKGUpfWZ1bmN0aW9uIGYoZSx0KXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl0W3JdPWVbcl07cmV0dXJuIHR9YS5hcHBseUZyb21DaGFyQ29kZT1zO3ZhciBjPXt9O2Muc3RyaW5nPXtzdHJpbmc6bixhcnJheTpmdW5jdGlvbihlKXtyZXR1cm4gbChlLG5ldyBBcnJheShlLmxlbmd0aCkpfSxhcnJheWJ1ZmZlcjpmdW5jdGlvbihlKXtyZXR1cm4gYy5zdHJpbmcudWludDhhcnJheShlKS5idWZmZXJ9LHVpbnQ4YXJyYXk6ZnVuY3Rpb24oZSl7cmV0dXJuIGwoZSxuZXcgVWludDhBcnJheShlLmxlbmd0aCkpfSxub2RlYnVmZmVyOmZ1bmN0aW9uKGUpe3JldHVybiBsKGUsci5hbGxvY0J1ZmZlcihlLmxlbmd0aCkpfX0sYy5hcnJheT17c3RyaW5nOnMsYXJyYXk6bixhcnJheWJ1ZmZlcjpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZSkuYnVmZmVyfSx1aW50OGFycmF5OmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgVWludDhBcnJheShlKX0sbm9kZWJ1ZmZlcjpmdW5jdGlvbihlKXtyZXR1cm4gci5uZXdCdWZmZXJGcm9tKGUpfX0sYy5hcnJheWJ1ZmZlcj17c3RyaW5nOmZ1bmN0aW9uKGUpe3JldHVybiBzKG5ldyBVaW50OEFycmF5KGUpKX0sYXJyYXk6ZnVuY3Rpb24oZSl7cmV0dXJuIGYobmV3IFVpbnQ4QXJyYXkoZSksbmV3IEFycmF5KGUuYnl0ZUxlbmd0aCkpfSxhcnJheWJ1ZmZlcjpuLHVpbnQ4YXJyYXk6ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBVaW50OEFycmF5KGUpfSxub2RlYnVmZmVyOmZ1bmN0aW9uKGUpe3JldHVybiByLm5ld0J1ZmZlckZyb20obmV3IFVpbnQ4QXJyYXkoZSkpfX0sYy51aW50OGFycmF5PXtzdHJpbmc6cyxhcnJheTpmdW5jdGlvbihlKXtyZXR1cm4gZihlLG5ldyBBcnJheShlLmxlbmd0aCkpfSxhcnJheWJ1ZmZlcjpmdW5jdGlvbihlKXtyZXR1cm4gZS5idWZmZXJ9LHVpbnQ4YXJyYXk6bixub2RlYnVmZmVyOmZ1bmN0aW9uKGUpe3JldHVybiByLm5ld0J1ZmZlckZyb20oZSl9fSxjLm5vZGVidWZmZXI9e3N0cmluZzpzLGFycmF5OmZ1bmN0aW9uKGUpe3JldHVybiBmKGUsbmV3IEFycmF5KGUubGVuZ3RoKSl9LGFycmF5YnVmZmVyOmZ1bmN0aW9uKGUpe3JldHVybiBjLm5vZGVidWZmZXIudWludDhhcnJheShlKS5idWZmZXJ9LHVpbnQ4YXJyYXk6ZnVuY3Rpb24oZSl7cmV0dXJuIGYoZSxuZXcgVWludDhBcnJheShlLmxlbmd0aCkpfSxub2RlYnVmZmVyOm59LGEudHJhbnNmb3JtVG89ZnVuY3Rpb24oZSx0KXtpZih0PXR8fFwiXCIsIWUpcmV0dXJuIHQ7YS5jaGVja1N1cHBvcnQoZSk7dmFyIHI9YS5nZXRUeXBlT2YodCk7cmV0dXJuIGNbcl1bZV0odCl9LGEucmVzb2x2ZT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS5zcGxpdChcIi9cIikscj1bXSxuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPXRbbl07XCIuXCI9PT1pfHxcIlwiPT09aSYmMCE9PW4mJm4hPT10Lmxlbmd0aC0xfHwoXCIuLlwiPT09aT9yLnBvcCgpOnIucHVzaChpKSl9cmV0dXJuIHIuam9pbihcIi9cIil9LGEuZ2V0VHlwZU9mPWZ1bmN0aW9uKGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlP1wic3RyaW5nXCI6XCJbb2JqZWN0IEFycmF5XVwiPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpP1wiYXJyYXlcIjpvLm5vZGVidWZmZXImJnIuaXNCdWZmZXIoZSk/XCJub2RlYnVmZmVyXCI6by51aW50OGFycmF5JiZlIGluc3RhbmNlb2YgVWludDhBcnJheT9cInVpbnQ4YXJyYXlcIjpvLmFycmF5YnVmZmVyJiZlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXI/XCJhcnJheWJ1ZmZlclwiOnZvaWQgMH0sYS5jaGVja1N1cHBvcnQ9ZnVuY3Rpb24oZSl7aWYoIW9bZS50b0xvd2VyQ2FzZSgpXSl0aHJvdyBuZXcgRXJyb3IoZStcIiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgcGxhdGZvcm1cIil9LGEuTUFYX1ZBTFVFXzE2QklUUz02NTUzNSxhLk1BWF9WQUxVRV8zMkJJVFM9LTEsYS5wcmV0dHk9ZnVuY3Rpb24oZSl7dmFyIHQscixuPVwiXCI7Zm9yKHI9MDtyPChlfHxcIlwiKS5sZW5ndGg7cisrKW4rPVwiXFxcXHhcIisoKHQ9ZS5jaGFyQ29kZUF0KHIpKTwxNj9cIjBcIjpcIlwiKSt0LnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO3JldHVybiBufSxhLmRlbGF5PWZ1bmN0aW9uKGUsdCxyKXtzZXRJbW1lZGlhdGUoZnVuY3Rpb24oKXtlLmFwcGx5KHJ8fG51bGwsdHx8W10pfSl9LGEuaW5oZXJpdHM9ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiByKCl7fXIucHJvdG90eXBlPXQucHJvdG90eXBlLGUucHJvdG90eXBlPW5ldyByfSxhLmV4dGVuZD1mdW5jdGlvbigpe3ZhciBlLHQscj17fTtmb3IoZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspZm9yKHQgaW4gYXJndW1lbnRzW2VdKWFyZ3VtZW50c1tlXS5oYXNPd25Qcm9wZXJ0eSh0KSYmdm9pZCAwPT09clt0XSYmKHJbdF09YXJndW1lbnRzW2VdW3RdKTtyZXR1cm4gcn0sYS5wcmVwYXJlQ29udGVudD1mdW5jdGlvbihyLGUsbixpLHMpe3JldHVybiB1LlByb21pc2UucmVzb2x2ZShlKS50aGVuKGZ1bmN0aW9uKG4pe3JldHVybiBvLmJsb2ImJihuIGluc3RhbmNlb2YgQmxvYnx8LTEhPT1bXCJbb2JqZWN0IEZpbGVdXCIsXCJbb2JqZWN0IEJsb2JdXCJdLmluZGV4T2YoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG4pKSkmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBGaWxlUmVhZGVyP25ldyB1LlByb21pc2UoZnVuY3Rpb24odCxyKXt2YXIgZT1uZXcgRmlsZVJlYWRlcjtlLm9ubG9hZD1mdW5jdGlvbihlKXt0KGUudGFyZ2V0LnJlc3VsdCl9LGUub25lcnJvcj1mdW5jdGlvbihlKXtyKGUudGFyZ2V0LmVycm9yKX0sZS5yZWFkQXNBcnJheUJ1ZmZlcihuKX0pOm59KS50aGVuKGZ1bmN0aW9uKGUpe3ZhciB0PWEuZ2V0VHlwZU9mKGUpO3JldHVybiB0PyhcImFycmF5YnVmZmVyXCI9PT10P2U9YS50cmFuc2Zvcm1UbyhcInVpbnQ4YXJyYXlcIixlKTpcInN0cmluZ1wiPT09dCYmKHM/ZT1oLmRlY29kZShlKTpuJiYhMCE9PWkmJihlPWZ1bmN0aW9uKGUpe3JldHVybiBsKGUsby51aW50OGFycmF5P25ldyBVaW50OEFycmF5KGUubGVuZ3RoKTpuZXcgQXJyYXkoZS5sZW5ndGgpKX0oZSkpKSxlKTp1LlByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkNhbid0IHJlYWQgdGhlIGRhdGEgb2YgJ1wiK3IrXCInLiBJcyBpdCBpbiBhIHN1cHBvcnRlZCBKYXZhU2NyaXB0IHR5cGUgKFN0cmluZywgQmxvYiwgQXJyYXlCdWZmZXIsIGV0YykgP1wiKSl9KX19LHtcIi4vYmFzZTY0XCI6MSxcIi4vZXh0ZXJuYWxcIjo2LFwiLi9ub2RlanNVdGlsc1wiOjE0LFwiLi9zdXBwb3J0XCI6MzAsc2V0aW1tZWRpYXRlOjU0fV0sMzM6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi9yZWFkZXIvcmVhZGVyRm9yXCIpLGk9ZShcIi4vdXRpbHNcIikscz1lKFwiLi9zaWduYXR1cmVcIiksYT1lKFwiLi96aXBFbnRyeVwiKSxvPShlKFwiLi91dGY4XCIpLGUoXCIuL3N1cHBvcnRcIikpO2Z1bmN0aW9uIGgoZSl7dGhpcy5maWxlcz1bXSx0aGlzLmxvYWRPcHRpb25zPWV9aC5wcm90b3R5cGU9e2NoZWNrU2lnbmF0dXJlOmZ1bmN0aW9uKGUpe2lmKCF0aGlzLnJlYWRlci5yZWFkQW5kQ2hlY2tTaWduYXR1cmUoZSkpe3RoaXMucmVhZGVyLmluZGV4LT00O3ZhciB0PXRoaXMucmVhZGVyLnJlYWRTdHJpbmcoNCk7dGhyb3cgbmV3IEVycm9yKFwiQ29ycnVwdGVkIHppcCBvciBidWc6IHVuZXhwZWN0ZWQgc2lnbmF0dXJlIChcIitpLnByZXR0eSh0KStcIiwgZXhwZWN0ZWQgXCIraS5wcmV0dHkoZSkrXCIpXCIpfX0saXNTaWduYXR1cmU6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLnJlYWRlci5pbmRleDt0aGlzLnJlYWRlci5zZXRJbmRleChlKTt2YXIgbj10aGlzLnJlYWRlci5yZWFkU3RyaW5nKDQpPT09dDtyZXR1cm4gdGhpcy5yZWFkZXIuc2V0SW5kZXgociksbn0scmVhZEJsb2NrRW5kT2ZDZW50cmFsOmZ1bmN0aW9uKCl7dGhpcy5kaXNrTnVtYmVyPXRoaXMucmVhZGVyLnJlYWRJbnQoMiksdGhpcy5kaXNrV2l0aENlbnRyYWxEaXJTdGFydD10aGlzLnJlYWRlci5yZWFkSW50KDIpLHRoaXMuY2VudHJhbERpclJlY29yZHNPblRoaXNEaXNrPXRoaXMucmVhZGVyLnJlYWRJbnQoMiksdGhpcy5jZW50cmFsRGlyUmVjb3Jkcz10aGlzLnJlYWRlci5yZWFkSW50KDIpLHRoaXMuY2VudHJhbERpclNpemU9dGhpcy5yZWFkZXIucmVhZEludCg0KSx0aGlzLmNlbnRyYWxEaXJPZmZzZXQ9dGhpcy5yZWFkZXIucmVhZEludCg0KSx0aGlzLnppcENvbW1lbnRMZW5ndGg9dGhpcy5yZWFkZXIucmVhZEludCgyKTt2YXIgZT10aGlzLnJlYWRlci5yZWFkRGF0YSh0aGlzLnppcENvbW1lbnRMZW5ndGgpLHQ9by51aW50OGFycmF5P1widWludDhhcnJheVwiOlwiYXJyYXlcIixyPWkudHJhbnNmb3JtVG8odCxlKTt0aGlzLnppcENvbW1lbnQ9dGhpcy5sb2FkT3B0aW9ucy5kZWNvZGVGaWxlTmFtZShyKX0scmVhZEJsb2NrWmlwNjRFbmRPZkNlbnRyYWw6ZnVuY3Rpb24oKXt0aGlzLnppcDY0RW5kT2ZDZW50cmFsU2l6ZT10aGlzLnJlYWRlci5yZWFkSW50KDgpLHRoaXMucmVhZGVyLnNraXAoNCksdGhpcy5kaXNrTnVtYmVyPXRoaXMucmVhZGVyLnJlYWRJbnQoNCksdGhpcy5kaXNrV2l0aENlbnRyYWxEaXJTdGFydD10aGlzLnJlYWRlci5yZWFkSW50KDQpLHRoaXMuY2VudHJhbERpclJlY29yZHNPblRoaXNEaXNrPXRoaXMucmVhZGVyLnJlYWRJbnQoOCksdGhpcy5jZW50cmFsRGlyUmVjb3Jkcz10aGlzLnJlYWRlci5yZWFkSW50KDgpLHRoaXMuY2VudHJhbERpclNpemU9dGhpcy5yZWFkZXIucmVhZEludCg4KSx0aGlzLmNlbnRyYWxEaXJPZmZzZXQ9dGhpcy5yZWFkZXIucmVhZEludCg4KSx0aGlzLnppcDY0RXh0ZW5zaWJsZURhdGE9e307Zm9yKHZhciBlLHQscixuPXRoaXMuemlwNjRFbmRPZkNlbnRyYWxTaXplLTQ0OzA8bjspZT10aGlzLnJlYWRlci5yZWFkSW50KDIpLHQ9dGhpcy5yZWFkZXIucmVhZEludCg0KSxyPXRoaXMucmVhZGVyLnJlYWREYXRhKHQpLHRoaXMuemlwNjRFeHRlbnNpYmxlRGF0YVtlXT17aWQ6ZSxsZW5ndGg6dCx2YWx1ZTpyfX0scmVhZEJsb2NrWmlwNjRFbmRPZkNlbnRyYWxMb2NhdG9yOmZ1bmN0aW9uKCl7aWYodGhpcy5kaXNrV2l0aFppcDY0Q2VudHJhbERpclN0YXJ0PXRoaXMucmVhZGVyLnJlYWRJbnQoNCksdGhpcy5yZWxhdGl2ZU9mZnNldEVuZE9mWmlwNjRDZW50cmFsRGlyPXRoaXMucmVhZGVyLnJlYWRJbnQoOCksdGhpcy5kaXNrc0NvdW50PXRoaXMucmVhZGVyLnJlYWRJbnQoNCksMTx0aGlzLmRpc2tzQ291bnQpdGhyb3cgbmV3IEVycm9yKFwiTXVsdGktdm9sdW1lcyB6aXAgYXJlIG5vdCBzdXBwb3J0ZWRcIil9LHJlYWRMb2NhbEZpbGVzOmZ1bmN0aW9uKCl7dmFyIGUsdDtmb3IoZT0wO2U8dGhpcy5maWxlcy5sZW5ndGg7ZSsrKXQ9dGhpcy5maWxlc1tlXSx0aGlzLnJlYWRlci5zZXRJbmRleCh0LmxvY2FsSGVhZGVyT2Zmc2V0KSx0aGlzLmNoZWNrU2lnbmF0dXJlKHMuTE9DQUxfRklMRV9IRUFERVIpLHQucmVhZExvY2FsUGFydCh0aGlzLnJlYWRlciksdC5oYW5kbGVVVEY4KCksdC5wcm9jZXNzQXR0cmlidXRlcygpfSxyZWFkQ2VudHJhbERpcjpmdW5jdGlvbigpe3ZhciBlO2Zvcih0aGlzLnJlYWRlci5zZXRJbmRleCh0aGlzLmNlbnRyYWxEaXJPZmZzZXQpO3RoaXMucmVhZGVyLnJlYWRBbmRDaGVja1NpZ25hdHVyZShzLkNFTlRSQUxfRklMRV9IRUFERVIpOykoZT1uZXcgYSh7emlwNjQ6dGhpcy56aXA2NH0sdGhpcy5sb2FkT3B0aW9ucykpLnJlYWRDZW50cmFsUGFydCh0aGlzLnJlYWRlciksdGhpcy5maWxlcy5wdXNoKGUpO2lmKHRoaXMuY2VudHJhbERpclJlY29yZHMhPT10aGlzLmZpbGVzLmxlbmd0aCYmMCE9PXRoaXMuY2VudHJhbERpclJlY29yZHMmJjA9PT10aGlzLmZpbGVzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJDb3JydXB0ZWQgemlwIG9yIGJ1ZzogZXhwZWN0ZWQgXCIrdGhpcy5jZW50cmFsRGlyUmVjb3JkcytcIiByZWNvcmRzIGluIGNlbnRyYWwgZGlyLCBnb3QgXCIrdGhpcy5maWxlcy5sZW5ndGgpfSxyZWFkRW5kT2ZDZW50cmFsOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5yZWFkZXIubGFzdEluZGV4T2ZTaWduYXR1cmUocy5DRU5UUkFMX0RJUkVDVE9SWV9FTkQpO2lmKGU8MCl0aHJvdyF0aGlzLmlzU2lnbmF0dXJlKDAscy5MT0NBTF9GSUxFX0hFQURFUik/bmV3IEVycm9yKFwiQ2FuJ3QgZmluZCBlbmQgb2YgY2VudHJhbCBkaXJlY3RvcnkgOiBpcyB0aGlzIGEgemlwIGZpbGUgPyBJZiBpdCBpcywgc2VlIGh0dHBzOi8vc3R1ay5naXRodWIuaW8vanN6aXAvZG9jdW1lbnRhdGlvbi9ob3d0by9yZWFkX3ppcC5odG1sXCIpOm5ldyBFcnJvcihcIkNvcnJ1cHRlZCB6aXA6IGNhbid0IGZpbmQgZW5kIG9mIGNlbnRyYWwgZGlyZWN0b3J5XCIpO3RoaXMucmVhZGVyLnNldEluZGV4KGUpO3ZhciB0PWU7aWYodGhpcy5jaGVja1NpZ25hdHVyZShzLkNFTlRSQUxfRElSRUNUT1JZX0VORCksdGhpcy5yZWFkQmxvY2tFbmRPZkNlbnRyYWwoKSx0aGlzLmRpc2tOdW1iZXI9PT1pLk1BWF9WQUxVRV8xNkJJVFN8fHRoaXMuZGlza1dpdGhDZW50cmFsRGlyU3RhcnQ9PT1pLk1BWF9WQUxVRV8xNkJJVFN8fHRoaXMuY2VudHJhbERpclJlY29yZHNPblRoaXNEaXNrPT09aS5NQVhfVkFMVUVfMTZCSVRTfHx0aGlzLmNlbnRyYWxEaXJSZWNvcmRzPT09aS5NQVhfVkFMVUVfMTZCSVRTfHx0aGlzLmNlbnRyYWxEaXJTaXplPT09aS5NQVhfVkFMVUVfMzJCSVRTfHx0aGlzLmNlbnRyYWxEaXJPZmZzZXQ9PT1pLk1BWF9WQUxVRV8zMkJJVFMpe2lmKHRoaXMuemlwNjQ9ITAsKGU9dGhpcy5yZWFkZXIubGFzdEluZGV4T2ZTaWduYXR1cmUocy5aSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9MT0NBVE9SKSk8MCl0aHJvdyBuZXcgRXJyb3IoXCJDb3JydXB0ZWQgemlwOiBjYW4ndCBmaW5kIHRoZSBaSVA2NCBlbmQgb2YgY2VudHJhbCBkaXJlY3RvcnkgbG9jYXRvclwiKTtpZih0aGlzLnJlYWRlci5zZXRJbmRleChlKSx0aGlzLmNoZWNrU2lnbmF0dXJlKHMuWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfTE9DQVRPUiksdGhpcy5yZWFkQmxvY2taaXA2NEVuZE9mQ2VudHJhbExvY2F0b3IoKSwhdGhpcy5pc1NpZ25hdHVyZSh0aGlzLnJlbGF0aXZlT2Zmc2V0RW5kT2ZaaXA2NENlbnRyYWxEaXIscy5aSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9FTkQpJiYodGhpcy5yZWxhdGl2ZU9mZnNldEVuZE9mWmlwNjRDZW50cmFsRGlyPXRoaXMucmVhZGVyLmxhc3RJbmRleE9mU2lnbmF0dXJlKHMuWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfRU5EKSx0aGlzLnJlbGF0aXZlT2Zmc2V0RW5kT2ZaaXA2NENlbnRyYWxEaXI8MCkpdGhyb3cgbmV3IEVycm9yKFwiQ29ycnVwdGVkIHppcDogY2FuJ3QgZmluZCB0aGUgWklQNjQgZW5kIG9mIGNlbnRyYWwgZGlyZWN0b3J5XCIpO3RoaXMucmVhZGVyLnNldEluZGV4KHRoaXMucmVsYXRpdmVPZmZzZXRFbmRPZlppcDY0Q2VudHJhbERpciksdGhpcy5jaGVja1NpZ25hdHVyZShzLlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0VORCksdGhpcy5yZWFkQmxvY2taaXA2NEVuZE9mQ2VudHJhbCgpfXZhciByPXRoaXMuY2VudHJhbERpck9mZnNldCt0aGlzLmNlbnRyYWxEaXJTaXplO3RoaXMuemlwNjQmJihyKz0yMCxyKz0xMit0aGlzLnppcDY0RW5kT2ZDZW50cmFsU2l6ZSk7dmFyIG49dC1yO2lmKDA8bil0aGlzLmlzU2lnbmF0dXJlKHQscy5DRU5UUkFMX0ZJTEVfSEVBREVSKXx8KHRoaXMucmVhZGVyLnplcm89bik7ZWxzZSBpZihuPDApdGhyb3cgbmV3IEVycm9yKFwiQ29ycnVwdGVkIHppcDogbWlzc2luZyBcIitNYXRoLmFicyhuKStcIiBieXRlcy5cIil9LHByZXBhcmVSZWFkZXI6ZnVuY3Rpb24oZSl7dGhpcy5yZWFkZXI9bihlKX0sbG9hZDpmdW5jdGlvbihlKXt0aGlzLnByZXBhcmVSZWFkZXIoZSksdGhpcy5yZWFkRW5kT2ZDZW50cmFsKCksdGhpcy5yZWFkQ2VudHJhbERpcigpLHRoaXMucmVhZExvY2FsRmlsZXMoKX19LHQuZXhwb3J0cz1ofSx7XCIuL3JlYWRlci9yZWFkZXJGb3JcIjoyMixcIi4vc2lnbmF0dXJlXCI6MjMsXCIuL3N1cHBvcnRcIjozMCxcIi4vdXRmOFwiOjMxLFwiLi91dGlsc1wiOjMyLFwiLi96aXBFbnRyeVwiOjM0fV0sMzQ6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lKFwiLi9yZWFkZXIvcmVhZGVyRm9yXCIpLHM9ZShcIi4vdXRpbHNcIiksaT1lKFwiLi9jb21wcmVzc2VkT2JqZWN0XCIpLGE9ZShcIi4vY3JjMzJcIiksbz1lKFwiLi91dGY4XCIpLGg9ZShcIi4vY29tcHJlc3Npb25zXCIpLHU9ZShcIi4vc3VwcG9ydFwiKTtmdW5jdGlvbiBsKGUsdCl7dGhpcy5vcHRpb25zPWUsdGhpcy5sb2FkT3B0aW9ucz10fWwucHJvdG90eXBlPXtpc0VuY3J5cHRlZDpmdW5jdGlvbigpe3JldHVybiAxPT0oMSZ0aGlzLmJpdEZsYWcpfSx1c2VVVEY4OmZ1bmN0aW9uKCl7cmV0dXJuIDIwNDg9PSgyMDQ4JnRoaXMuYml0RmxhZyl9LHJlYWRMb2NhbFBhcnQ6ZnVuY3Rpb24oZSl7dmFyIHQscjtpZihlLnNraXAoMjIpLHRoaXMuZmlsZU5hbWVMZW5ndGg9ZS5yZWFkSW50KDIpLHI9ZS5yZWFkSW50KDIpLHRoaXMuZmlsZU5hbWU9ZS5yZWFkRGF0YSh0aGlzLmZpbGVOYW1lTGVuZ3RoKSxlLnNraXAociksLTE9PT10aGlzLmNvbXByZXNzZWRTaXplfHwtMT09PXRoaXMudW5jb21wcmVzc2VkU2l6ZSl0aHJvdyBuZXcgRXJyb3IoXCJCdWcgb3IgY29ycnVwdGVkIHppcCA6IGRpZG4ndCBnZXQgZW5vdWdoIGluZm9ybWF0aW9uIGZyb20gdGhlIGNlbnRyYWwgZGlyZWN0b3J5IChjb21wcmVzc2VkU2l6ZSA9PT0gLTEgfHwgdW5jb21wcmVzc2VkU2l6ZSA9PT0gLTEpXCIpO2lmKG51bGw9PT0odD1mdW5jdGlvbihlKXtmb3IodmFyIHQgaW4gaClpZihoLmhhc093blByb3BlcnR5KHQpJiZoW3RdLm1hZ2ljPT09ZSlyZXR1cm4gaFt0XTtyZXR1cm4gbnVsbH0odGhpcy5jb21wcmVzc2lvbk1ldGhvZCkpKXRocm93IG5ldyBFcnJvcihcIkNvcnJ1cHRlZCB6aXAgOiBjb21wcmVzc2lvbiBcIitzLnByZXR0eSh0aGlzLmNvbXByZXNzaW9uTWV0aG9kKStcIiB1bmtub3duIChpbm5lciBmaWxlIDogXCIrcy50cmFuc2Zvcm1UbyhcInN0cmluZ1wiLHRoaXMuZmlsZU5hbWUpK1wiKVwiKTt0aGlzLmRlY29tcHJlc3NlZD1uZXcgaSh0aGlzLmNvbXByZXNzZWRTaXplLHRoaXMudW5jb21wcmVzc2VkU2l6ZSx0aGlzLmNyYzMyLHQsZS5yZWFkRGF0YSh0aGlzLmNvbXByZXNzZWRTaXplKSl9LHJlYWRDZW50cmFsUGFydDpmdW5jdGlvbihlKXt0aGlzLnZlcnNpb25NYWRlQnk9ZS5yZWFkSW50KDIpLGUuc2tpcCgyKSx0aGlzLmJpdEZsYWc9ZS5yZWFkSW50KDIpLHRoaXMuY29tcHJlc3Npb25NZXRob2Q9ZS5yZWFkU3RyaW5nKDIpLHRoaXMuZGF0ZT1lLnJlYWREYXRlKCksdGhpcy5jcmMzMj1lLnJlYWRJbnQoNCksdGhpcy5jb21wcmVzc2VkU2l6ZT1lLnJlYWRJbnQoNCksdGhpcy51bmNvbXByZXNzZWRTaXplPWUucmVhZEludCg0KTt2YXIgdD1lLnJlYWRJbnQoMik7aWYodGhpcy5leHRyYUZpZWxkc0xlbmd0aD1lLnJlYWRJbnQoMiksdGhpcy5maWxlQ29tbWVudExlbmd0aD1lLnJlYWRJbnQoMiksdGhpcy5kaXNrTnVtYmVyU3RhcnQ9ZS5yZWFkSW50KDIpLHRoaXMuaW50ZXJuYWxGaWxlQXR0cmlidXRlcz1lLnJlYWRJbnQoMiksdGhpcy5leHRlcm5hbEZpbGVBdHRyaWJ1dGVzPWUucmVhZEludCg0KSx0aGlzLmxvY2FsSGVhZGVyT2Zmc2V0PWUucmVhZEludCg0KSx0aGlzLmlzRW5jcnlwdGVkKCkpdGhyb3cgbmV3IEVycm9yKFwiRW5jcnlwdGVkIHppcCBhcmUgbm90IHN1cHBvcnRlZFwiKTtlLnNraXAodCksdGhpcy5yZWFkRXh0cmFGaWVsZHMoZSksdGhpcy5wYXJzZVpJUDY0RXh0cmFGaWVsZChlKSx0aGlzLmZpbGVDb21tZW50PWUucmVhZERhdGEodGhpcy5maWxlQ29tbWVudExlbmd0aCl9LHByb2Nlc3NBdHRyaWJ1dGVzOmZ1bmN0aW9uKCl7dGhpcy51bml4UGVybWlzc2lvbnM9bnVsbCx0aGlzLmRvc1Blcm1pc3Npb25zPW51bGw7dmFyIGU9dGhpcy52ZXJzaW9uTWFkZUJ5Pj44O3RoaXMuZGlyPSEhKDE2JnRoaXMuZXh0ZXJuYWxGaWxlQXR0cmlidXRlcyksMD09ZSYmKHRoaXMuZG9zUGVybWlzc2lvbnM9NjMmdGhpcy5leHRlcm5hbEZpbGVBdHRyaWJ1dGVzKSwzPT1lJiYodGhpcy51bml4UGVybWlzc2lvbnM9dGhpcy5leHRlcm5hbEZpbGVBdHRyaWJ1dGVzPj4xNiY2NTUzNSksdGhpcy5kaXJ8fFwiL1wiIT09dGhpcy5maWxlTmFtZVN0ci5zbGljZSgtMSl8fCh0aGlzLmRpcj0hMCl9LHBhcnNlWklQNjRFeHRyYUZpZWxkOmZ1bmN0aW9uKGUpe2lmKHRoaXMuZXh0cmFGaWVsZHNbMV0pe3ZhciB0PW4odGhpcy5leHRyYUZpZWxkc1sxXS52YWx1ZSk7dGhpcy51bmNvbXByZXNzZWRTaXplPT09cy5NQVhfVkFMVUVfMzJCSVRTJiYodGhpcy51bmNvbXByZXNzZWRTaXplPXQucmVhZEludCg4KSksdGhpcy5jb21wcmVzc2VkU2l6ZT09PXMuTUFYX1ZBTFVFXzMyQklUUyYmKHRoaXMuY29tcHJlc3NlZFNpemU9dC5yZWFkSW50KDgpKSx0aGlzLmxvY2FsSGVhZGVyT2Zmc2V0PT09cy5NQVhfVkFMVUVfMzJCSVRTJiYodGhpcy5sb2NhbEhlYWRlck9mZnNldD10LnJlYWRJbnQoOCkpLHRoaXMuZGlza051bWJlclN0YXJ0PT09cy5NQVhfVkFMVUVfMzJCSVRTJiYodGhpcy5kaXNrTnVtYmVyU3RhcnQ9dC5yZWFkSW50KDQpKX19LHJlYWRFeHRyYUZpZWxkczpmdW5jdGlvbihlKXt2YXIgdCxyLG4saT1lLmluZGV4K3RoaXMuZXh0cmFGaWVsZHNMZW5ndGg7Zm9yKHRoaXMuZXh0cmFGaWVsZHN8fCh0aGlzLmV4dHJhRmllbGRzPXt9KTtlLmluZGV4KzQ8aTspdD1lLnJlYWRJbnQoMikscj1lLnJlYWRJbnQoMiksbj1lLnJlYWREYXRhKHIpLHRoaXMuZXh0cmFGaWVsZHNbdF09e2lkOnQsbGVuZ3RoOnIsdmFsdWU6bn07ZS5zZXRJbmRleChpKX0saGFuZGxlVVRGODpmdW5jdGlvbigpe3ZhciBlPXUudWludDhhcnJheT9cInVpbnQ4YXJyYXlcIjpcImFycmF5XCI7aWYodGhpcy51c2VVVEY4KCkpdGhpcy5maWxlTmFtZVN0cj1vLnV0ZjhkZWNvZGUodGhpcy5maWxlTmFtZSksdGhpcy5maWxlQ29tbWVudFN0cj1vLnV0ZjhkZWNvZGUodGhpcy5maWxlQ29tbWVudCk7ZWxzZXt2YXIgdD10aGlzLmZpbmRFeHRyYUZpZWxkVW5pY29kZVBhdGgoKTtpZihudWxsIT09dCl0aGlzLmZpbGVOYW1lU3RyPXQ7ZWxzZXt2YXIgcj1zLnRyYW5zZm9ybVRvKGUsdGhpcy5maWxlTmFtZSk7dGhpcy5maWxlTmFtZVN0cj10aGlzLmxvYWRPcHRpb25zLmRlY29kZUZpbGVOYW1lKHIpfXZhciBuPXRoaXMuZmluZEV4dHJhRmllbGRVbmljb2RlQ29tbWVudCgpO2lmKG51bGwhPT1uKXRoaXMuZmlsZUNvbW1lbnRTdHI9bjtlbHNle3ZhciBpPXMudHJhbnNmb3JtVG8oZSx0aGlzLmZpbGVDb21tZW50KTt0aGlzLmZpbGVDb21tZW50U3RyPXRoaXMubG9hZE9wdGlvbnMuZGVjb2RlRmlsZU5hbWUoaSl9fX0sZmluZEV4dHJhRmllbGRVbmljb2RlUGF0aDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZXh0cmFGaWVsZHNbMjg3ODldO2lmKGUpe3ZhciB0PW4oZS52YWx1ZSk7cmV0dXJuIDEhPT10LnJlYWRJbnQoMSk/bnVsbDphKHRoaXMuZmlsZU5hbWUpIT09dC5yZWFkSW50KDQpP251bGw6by51dGY4ZGVjb2RlKHQucmVhZERhdGEoZS5sZW5ndGgtNSkpfXJldHVybiBudWxsfSxmaW5kRXh0cmFGaWVsZFVuaWNvZGVDb21tZW50OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5leHRyYUZpZWxkc1syNTQ2MV07aWYoZSl7dmFyIHQ9bihlLnZhbHVlKTtyZXR1cm4gMSE9PXQucmVhZEludCgxKT9udWxsOmEodGhpcy5maWxlQ29tbWVudCkhPT10LnJlYWRJbnQoNCk/bnVsbDpvLnV0ZjhkZWNvZGUodC5yZWFkRGF0YShlLmxlbmd0aC01KSl9cmV0dXJuIG51bGx9fSx0LmV4cG9ydHM9bH0se1wiLi9jb21wcmVzc2VkT2JqZWN0XCI6MixcIi4vY29tcHJlc3Npb25zXCI6MyxcIi4vY3JjMzJcIjo0LFwiLi9yZWFkZXIvcmVhZGVyRm9yXCI6MjIsXCIuL3N1cHBvcnRcIjozMCxcIi4vdXRmOFwiOjMxLFwiLi91dGlsc1wiOjMyfV0sMzU6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKGUsdCxyKXt0aGlzLm5hbWU9ZSx0aGlzLmRpcj1yLmRpcix0aGlzLmRhdGU9ci5kYXRlLHRoaXMuY29tbWVudD1yLmNvbW1lbnQsdGhpcy51bml4UGVybWlzc2lvbnM9ci51bml4UGVybWlzc2lvbnMsdGhpcy5kb3NQZXJtaXNzaW9ucz1yLmRvc1Blcm1pc3Npb25zLHRoaXMuX2RhdGE9dCx0aGlzLl9kYXRhQmluYXJ5PXIuYmluYXJ5LHRoaXMub3B0aW9ucz17Y29tcHJlc3Npb246ci5jb21wcmVzc2lvbixjb21wcmVzc2lvbk9wdGlvbnM6ci5jb21wcmVzc2lvbk9wdGlvbnN9fXZhciBzPWUoXCIuL3N0cmVhbS9TdHJlYW1IZWxwZXJcIiksaT1lKFwiLi9zdHJlYW0vRGF0YVdvcmtlclwiKSxhPWUoXCIuL3V0ZjhcIiksbz1lKFwiLi9jb21wcmVzc2VkT2JqZWN0XCIpLGg9ZShcIi4vc3RyZWFtL0dlbmVyaWNXb3JrZXJcIik7bi5wcm90b3R5cGU9e2ludGVybmFsU3RyZWFtOmZ1bmN0aW9uKGUpe3ZhciB0PW51bGwscj1cInN0cmluZ1wiO3RyeXtpZighZSl0aHJvdyBuZXcgRXJyb3IoXCJObyBvdXRwdXQgdHlwZSBzcGVjaWZpZWQuXCIpO3ZhciBuPVwic3RyaW5nXCI9PT0ocj1lLnRvTG93ZXJDYXNlKCkpfHxcInRleHRcIj09PXI7XCJiaW5hcnlzdHJpbmdcIiE9PXImJlwidGV4dFwiIT09cnx8KHI9XCJzdHJpbmdcIiksdD10aGlzLl9kZWNvbXByZXNzV29ya2VyKCk7dmFyIGk9IXRoaXMuX2RhdGFCaW5hcnk7aSYmIW4mJih0PXQucGlwZShuZXcgYS5VdGY4RW5jb2RlV29ya2VyKSksIWkmJm4mJih0PXQucGlwZShuZXcgYS5VdGY4RGVjb2RlV29ya2VyKSl9Y2F0Y2goZSl7KHQ9bmV3IGgoXCJlcnJvclwiKSkuZXJyb3IoZSl9cmV0dXJuIG5ldyBzKHQscixcIlwiKX0sYXN5bmM6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5pbnRlcm5hbFN0cmVhbShlKS5hY2N1bXVsYXRlKHQpfSxub2RlU3RyZWFtOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuaW50ZXJuYWxTdHJlYW0oZXx8XCJub2RlYnVmZmVyXCIpLnRvTm9kZWpzU3RyZWFtKHQpfSxfY29tcHJlc3NXb3JrZXI6ZnVuY3Rpb24oZSx0KXtpZih0aGlzLl9kYXRhIGluc3RhbmNlb2YgbyYmdGhpcy5fZGF0YS5jb21wcmVzc2lvbi5tYWdpYz09PWUubWFnaWMpcmV0dXJuIHRoaXMuX2RhdGEuZ2V0Q29tcHJlc3NlZFdvcmtlcigpO3ZhciByPXRoaXMuX2RlY29tcHJlc3NXb3JrZXIoKTtyZXR1cm4gdGhpcy5fZGF0YUJpbmFyeXx8KHI9ci5waXBlKG5ldyBhLlV0ZjhFbmNvZGVXb3JrZXIpKSxvLmNyZWF0ZVdvcmtlckZyb20ocixlLHQpfSxfZGVjb21wcmVzc1dvcmtlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kYXRhIGluc3RhbmNlb2Ygbz90aGlzLl9kYXRhLmdldENvbnRlbnRXb3JrZXIoKTp0aGlzLl9kYXRhIGluc3RhbmNlb2YgaD90aGlzLl9kYXRhOm5ldyBpKHRoaXMuX2RhdGEpfX07Zm9yKHZhciB1PVtcImFzVGV4dFwiLFwiYXNCaW5hcnlcIixcImFzTm9kZUJ1ZmZlclwiLFwiYXNVaW50OEFycmF5XCIsXCJhc0FycmF5QnVmZmVyXCJdLGw9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIG1ldGhvZCBoYXMgYmVlbiByZW1vdmVkIGluIEpTWmlwIDMuMCwgcGxlYXNlIGNoZWNrIHRoZSB1cGdyYWRlIGd1aWRlLlwiKX0sZj0wO2Y8dS5sZW5ndGg7ZisrKW4ucHJvdG90eXBlW3VbZl1dPWw7dC5leHBvcnRzPW59LHtcIi4vY29tcHJlc3NlZE9iamVjdFwiOjIsXCIuL3N0cmVhbS9EYXRhV29ya2VyXCI6MjcsXCIuL3N0cmVhbS9HZW5lcmljV29ya2VyXCI6MjgsXCIuL3N0cmVhbS9TdHJlYW1IZWxwZXJcIjoyOSxcIi4vdXRmOFwiOjMxfV0sMzY6W2Z1bmN0aW9uKGUsbCx0KXsoZnVuY3Rpb24odCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHIsbixlPXQuTXV0YXRpb25PYnNlcnZlcnx8dC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO2lmKGUpe3ZhciBpPTAscz1uZXcgZSh1KSxhPXQuZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXCJcIik7cy5vYnNlcnZlKGEse2NoYXJhY3RlckRhdGE6ITB9KSxyPWZ1bmN0aW9uKCl7YS5kYXRhPWk9KytpJTJ9fWVsc2UgaWYodC5zZXRJbW1lZGlhdGV8fHZvaWQgMD09PXQuTWVzc2FnZUNoYW5uZWwpcj1cImRvY3VtZW50XCJpbiB0JiZcIm9ucmVhZHlzdGF0ZWNoYW5nZVwiaW4gdC5kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpP2Z1bmN0aW9uKCl7dmFyIGU9dC5kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO2Uub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7dSgpLGUub25yZWFkeXN0YXRlY2hhbmdlPW51bGwsZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGUpLGU9bnVsbH0sdC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoZSl9OmZ1bmN0aW9uKCl7c2V0VGltZW91dCh1LDApfTtlbHNle3ZhciBvPW5ldyB0Lk1lc3NhZ2VDaGFubmVsO28ucG9ydDEub25tZXNzYWdlPXUscj1mdW5jdGlvbigpe28ucG9ydDIucG9zdE1lc3NhZ2UoMCl9fXZhciBoPVtdO2Z1bmN0aW9uIHUoKXt2YXIgZSx0O249ITA7Zm9yKHZhciByPWgubGVuZ3RoO3I7KXtmb3IodD1oLGg9W10sZT0tMTsrK2U8cjspdFtlXSgpO3I9aC5sZW5ndGh9bj0hMX1sLmV4cG9ydHM9ZnVuY3Rpb24oZSl7MSE9PWgucHVzaChlKXx8bnx8cigpfX0pLmNhbGwodGhpcyxcInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmOlwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0se31dLDM3OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGk9ZShcImltbWVkaWF0ZVwiKTtmdW5jdGlvbiB1KCl7fXZhciBsPXt9LHM9W1wiUkVKRUNURURcIl0sYT1bXCJGVUxGSUxMRURcIl0sbj1bXCJQRU5ESU5HXCJdO2Z1bmN0aW9uIG8oZSl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwicmVzb2x2ZXIgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO3RoaXMuc3RhdGU9bix0aGlzLnF1ZXVlPVtdLHRoaXMub3V0Y29tZT12b2lkIDAsZSE9PXUmJmQodGhpcyxlKX1mdW5jdGlvbiBoKGUsdCxyKXt0aGlzLnByb21pc2U9ZSxcImZ1bmN0aW9uXCI9PXR5cGVvZiB0JiYodGhpcy5vbkZ1bGZpbGxlZD10LHRoaXMuY2FsbEZ1bGZpbGxlZD10aGlzLm90aGVyQ2FsbEZ1bGZpbGxlZCksXCJmdW5jdGlvblwiPT10eXBlb2YgciYmKHRoaXMub25SZWplY3RlZD1yLHRoaXMuY2FsbFJlamVjdGVkPXRoaXMub3RoZXJDYWxsUmVqZWN0ZWQpfWZ1bmN0aW9uIGYodCxyLG4pe2koZnVuY3Rpb24oKXt2YXIgZTt0cnl7ZT1yKG4pfWNhdGNoKGUpe3JldHVybiBsLnJlamVjdCh0LGUpfWU9PT10P2wucmVqZWN0KHQsbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZXNvbHZlIHByb21pc2Ugd2l0aCBpdHNlbGZcIikpOmwucmVzb2x2ZSh0LGUpfSl9ZnVuY3Rpb24gYyhlKXt2YXIgdD1lJiZlLnRoZW47aWYoZSYmKFwib2JqZWN0XCI9PXR5cGVvZiBlfHxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlKSYmXCJmdW5jdGlvblwiPT10eXBlb2YgdClyZXR1cm4gZnVuY3Rpb24oKXt0LmFwcGx5KGUsYXJndW1lbnRzKX19ZnVuY3Rpb24gZCh0LGUpe3ZhciByPSExO2Z1bmN0aW9uIG4oZSl7cnx8KHI9ITAsbC5yZWplY3QodCxlKSl9ZnVuY3Rpb24gaShlKXtyfHwocj0hMCxsLnJlc29sdmUodCxlKSl9dmFyIHM9cChmdW5jdGlvbigpe2UoaSxuKX0pO1wiZXJyb3JcIj09PXMuc3RhdHVzJiZuKHMudmFsdWUpfWZ1bmN0aW9uIHAoZSx0KXt2YXIgcj17fTt0cnl7ci52YWx1ZT1lKHQpLHIuc3RhdHVzPVwic3VjY2Vzc1wifWNhdGNoKGUpe3Iuc3RhdHVzPVwiZXJyb3JcIixyLnZhbHVlPWV9cmV0dXJuIHJ9KHQuZXhwb3J0cz1vKS5wcm90b3R5cGUuZmluYWxseT1mdW5jdGlvbih0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0KXJldHVybiB0aGlzO3ZhciByPXRoaXMuY29uc3RydWN0b3I7cmV0dXJuIHRoaXMudGhlbihmdW5jdGlvbihlKXtyZXR1cm4gci5yZXNvbHZlKHQoKSkudGhlbihmdW5jdGlvbigpe3JldHVybiBlfSl9LGZ1bmN0aW9uKGUpe3JldHVybiByLnJlc29sdmUodCgpKS50aGVuKGZ1bmN0aW9uKCl7dGhyb3cgZX0pfSl9LG8ucHJvdG90eXBlLmNhdGNoPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnRoZW4obnVsbCxlKX0sby5wcm90b3R5cGUudGhlbj1mdW5jdGlvbihlLHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUmJnRoaXMuc3RhdGU9PT1hfHxcImZ1bmN0aW9uXCIhPXR5cGVvZiB0JiZ0aGlzLnN0YXRlPT09cylyZXR1cm4gdGhpczt2YXIgcj1uZXcgdGhpcy5jb25zdHJ1Y3Rvcih1KTt0aGlzLnN0YXRlIT09bj9mKHIsdGhpcy5zdGF0ZT09PWE/ZTp0LHRoaXMub3V0Y29tZSk6dGhpcy5xdWV1ZS5wdXNoKG5ldyBoKHIsZSx0KSk7cmV0dXJuIHJ9LGgucHJvdG90eXBlLmNhbGxGdWxmaWxsZWQ9ZnVuY3Rpb24oZSl7bC5yZXNvbHZlKHRoaXMucHJvbWlzZSxlKX0saC5wcm90b3R5cGUub3RoZXJDYWxsRnVsZmlsbGVkPWZ1bmN0aW9uKGUpe2YodGhpcy5wcm9taXNlLHRoaXMub25GdWxmaWxsZWQsZSl9LGgucHJvdG90eXBlLmNhbGxSZWplY3RlZD1mdW5jdGlvbihlKXtsLnJlamVjdCh0aGlzLnByb21pc2UsZSl9LGgucHJvdG90eXBlLm90aGVyQ2FsbFJlamVjdGVkPWZ1bmN0aW9uKGUpe2YodGhpcy5wcm9taXNlLHRoaXMub25SZWplY3RlZCxlKX0sbC5yZXNvbHZlPWZ1bmN0aW9uKGUsdCl7dmFyIHI9cChjLHQpO2lmKFwiZXJyb3JcIj09PXIuc3RhdHVzKXJldHVybiBsLnJlamVjdChlLHIudmFsdWUpO3ZhciBuPXIudmFsdWU7aWYobilkKGUsbik7ZWxzZXtlLnN0YXRlPWEsZS5vdXRjb21lPXQ7Zm9yKHZhciBpPS0xLHM9ZS5xdWV1ZS5sZW5ndGg7KytpPHM7KWUucXVldWVbaV0uY2FsbEZ1bGZpbGxlZCh0KX1yZXR1cm4gZX0sbC5yZWplY3Q9ZnVuY3Rpb24oZSx0KXtlLnN0YXRlPXMsZS5vdXRjb21lPXQ7Zm9yKHZhciByPS0xLG49ZS5xdWV1ZS5sZW5ndGg7KytyPG47KWUucXVldWVbcl0uY2FsbFJlamVjdGVkKHQpO3JldHVybiBlfSxvLnJlc29sdmU9ZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIHRoaXMpcmV0dXJuIGU7cmV0dXJuIGwucmVzb2x2ZShuZXcgdGhpcyh1KSxlKX0sby5yZWplY3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHRoaXModSk7cmV0dXJuIGwucmVqZWN0KHQsZSl9LG8uYWxsPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXM7aWYoXCJbb2JqZWN0IEFycmF5XVwiIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpKXJldHVybiB0aGlzLnJlamVjdChuZXcgVHlwZUVycm9yKFwibXVzdCBiZSBhbiBhcnJheVwiKSk7dmFyIG49ZS5sZW5ndGgsaT0hMTtpZighbilyZXR1cm4gdGhpcy5yZXNvbHZlKFtdKTt2YXIgcz1uZXcgQXJyYXkobiksYT0wLHQ9LTEsbz1uZXcgdGhpcyh1KTtmb3IoOysrdDxuOyloKGVbdF0sdCk7cmV0dXJuIG87ZnVuY3Rpb24gaChlLHQpe3IucmVzb2x2ZShlKS50aGVuKGZ1bmN0aW9uKGUpe3NbdF09ZSwrK2EhPT1ufHxpfHwoaT0hMCxsLnJlc29sdmUobyxzKSl9LGZ1bmN0aW9uKGUpe2l8fChpPSEwLGwucmVqZWN0KG8sZSkpfSl9fSxvLnJhY2U9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztpZihcIltvYmplY3QgQXJyYXldXCIhPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkpcmV0dXJuIHRoaXMucmVqZWN0KG5ldyBUeXBlRXJyb3IoXCJtdXN0IGJlIGFuIGFycmF5XCIpKTt2YXIgcj1lLmxlbmd0aCxuPSExO2lmKCFyKXJldHVybiB0aGlzLnJlc29sdmUoW10pO3ZhciBpPS0xLHM9bmV3IHRoaXModSk7Zm9yKDsrK2k8cjspYT1lW2ldLHQucmVzb2x2ZShhKS50aGVuKGZ1bmN0aW9uKGUpe258fChuPSEwLGwucmVzb2x2ZShzLGUpKX0sZnVuY3Rpb24oZSl7bnx8KG49ITAsbC5yZWplY3QocyxlKSl9KTt2YXIgYTtyZXR1cm4gc319LHtpbW1lZGlhdGU6MzZ9XSwzODpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXt9OygwLGUoXCIuL2xpYi91dGlscy9jb21tb25cIikuYXNzaWduKShuLGUoXCIuL2xpYi9kZWZsYXRlXCIpLGUoXCIuL2xpYi9pbmZsYXRlXCIpLGUoXCIuL2xpYi96bGliL2NvbnN0YW50c1wiKSksdC5leHBvcnRzPW59LHtcIi4vbGliL2RlZmxhdGVcIjozOSxcIi4vbGliL2luZmxhdGVcIjo0MCxcIi4vbGliL3V0aWxzL2NvbW1vblwiOjQxLFwiLi9saWIvemxpYi9jb25zdGFudHNcIjo0NH1dLDM5OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGE9ZShcIi4vemxpYi9kZWZsYXRlXCIpLG89ZShcIi4vdXRpbHMvY29tbW9uXCIpLGg9ZShcIi4vdXRpbHMvc3RyaW5nc1wiKSxpPWUoXCIuL3psaWIvbWVzc2FnZXNcIikscz1lKFwiLi96bGliL3pzdHJlYW1cIiksdT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLGw9MCxmPS0xLGM9MCxkPTg7ZnVuY3Rpb24gcChlKXtpZighKHRoaXMgaW5zdGFuY2VvZiBwKSlyZXR1cm4gbmV3IHAoZSk7dGhpcy5vcHRpb25zPW8uYXNzaWduKHtsZXZlbDpmLG1ldGhvZDpkLGNodW5rU2l6ZToxNjM4NCx3aW5kb3dCaXRzOjE1LG1lbUxldmVsOjgsc3RyYXRlZ3k6Yyx0bzpcIlwifSxlfHx7fSk7dmFyIHQ9dGhpcy5vcHRpb25zO3QucmF3JiYwPHQud2luZG93Qml0cz90LndpbmRvd0JpdHM9LXQud2luZG93Qml0czp0Lmd6aXAmJjA8dC53aW5kb3dCaXRzJiZ0LndpbmRvd0JpdHM8MTYmJih0LndpbmRvd0JpdHMrPTE2KSx0aGlzLmVycj0wLHRoaXMubXNnPVwiXCIsdGhpcy5lbmRlZD0hMSx0aGlzLmNodW5rcz1bXSx0aGlzLnN0cm09bmV3IHMsdGhpcy5zdHJtLmF2YWlsX291dD0wO3ZhciByPWEuZGVmbGF0ZUluaXQyKHRoaXMuc3RybSx0LmxldmVsLHQubWV0aG9kLHQud2luZG93Qml0cyx0Lm1lbUxldmVsLHQuc3RyYXRlZ3kpO2lmKHIhPT1sKXRocm93IG5ldyBFcnJvcihpW3JdKTtpZih0LmhlYWRlciYmYS5kZWZsYXRlU2V0SGVhZGVyKHRoaXMuc3RybSx0LmhlYWRlciksdC5kaWN0aW9uYXJ5KXt2YXIgbjtpZihuPVwic3RyaW5nXCI9PXR5cGVvZiB0LmRpY3Rpb25hcnk/aC5zdHJpbmcyYnVmKHQuZGljdGlvbmFyeSk6XCJbb2JqZWN0IEFycmF5QnVmZmVyXVwiPT09dS5jYWxsKHQuZGljdGlvbmFyeSk/bmV3IFVpbnQ4QXJyYXkodC5kaWN0aW9uYXJ5KTp0LmRpY3Rpb25hcnksKHI9YS5kZWZsYXRlU2V0RGljdGlvbmFyeSh0aGlzLnN0cm0sbikpIT09bCl0aHJvdyBuZXcgRXJyb3IoaVtyXSk7dGhpcy5fZGljdF9zZXQ9ITB9fWZ1bmN0aW9uIG4oZSx0KXt2YXIgcj1uZXcgcCh0KTtpZihyLnB1c2goZSwhMCksci5lcnIpdGhyb3cgci5tc2d8fGlbci5lcnJdO3JldHVybiByLnJlc3VsdH1wLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbixpPXRoaXMuc3RybSxzPXRoaXMub3B0aW9ucy5jaHVua1NpemU7aWYodGhpcy5lbmRlZClyZXR1cm4hMTtuPXQ9PT1+fnQ/dDohMD09PXQ/NDowLFwic3RyaW5nXCI9PXR5cGVvZiBlP2kuaW5wdXQ9aC5zdHJpbmcyYnVmKGUpOlwiW29iamVjdCBBcnJheUJ1ZmZlcl1cIj09PXUuY2FsbChlKT9pLmlucHV0PW5ldyBVaW50OEFycmF5KGUpOmkuaW5wdXQ9ZSxpLm5leHRfaW49MCxpLmF2YWlsX2luPWkuaW5wdXQubGVuZ3RoO2Rve2lmKDA9PT1pLmF2YWlsX291dCYmKGkub3V0cHV0PW5ldyBvLkJ1ZjgocyksaS5uZXh0X291dD0wLGkuYXZhaWxfb3V0PXMpLDEhPT0ocj1hLmRlZmxhdGUoaSxuKSkmJnIhPT1sKXJldHVybiB0aGlzLm9uRW5kKHIpLCEodGhpcy5lbmRlZD0hMCk7MCE9PWkuYXZhaWxfb3V0JiYoMCE9PWkuYXZhaWxfaW58fDQhPT1uJiYyIT09bil8fChcInN0cmluZ1wiPT09dGhpcy5vcHRpb25zLnRvP3RoaXMub25EYXRhKGguYnVmMmJpbnN0cmluZyhvLnNocmlua0J1ZihpLm91dHB1dCxpLm5leHRfb3V0KSkpOnRoaXMub25EYXRhKG8uc2hyaW5rQnVmKGkub3V0cHV0LGkubmV4dF9vdXQpKSl9d2hpbGUoKDA8aS5hdmFpbF9pbnx8MD09PWkuYXZhaWxfb3V0KSYmMSE9PXIpO3JldHVybiA0PT09bj8ocj1hLmRlZmxhdGVFbmQodGhpcy5zdHJtKSx0aGlzLm9uRW5kKHIpLHRoaXMuZW5kZWQ9ITAscj09PWwpOjIhPT1ufHwodGhpcy5vbkVuZChsKSwhKGkuYXZhaWxfb3V0PTApKX0scC5wcm90b3R5cGUub25EYXRhPWZ1bmN0aW9uKGUpe3RoaXMuY2h1bmtzLnB1c2goZSl9LHAucHJvdG90eXBlLm9uRW5kPWZ1bmN0aW9uKGUpe2U9PT1sJiYoXCJzdHJpbmdcIj09PXRoaXMub3B0aW9ucy50bz90aGlzLnJlc3VsdD10aGlzLmNodW5rcy5qb2luKFwiXCIpOnRoaXMucmVzdWx0PW8uZmxhdHRlbkNodW5rcyh0aGlzLmNodW5rcykpLHRoaXMuY2h1bmtzPVtdLHRoaXMuZXJyPWUsdGhpcy5tc2c9dGhpcy5zdHJtLm1zZ30sci5EZWZsYXRlPXAsci5kZWZsYXRlPW4sci5kZWZsYXRlUmF3PWZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQ9dHx8e30pLnJhdz0hMCxuKGUsdCl9LHIuZ3ppcD1mdW5jdGlvbihlLHQpe3JldHVybih0PXR8fHt9KS5nemlwPSEwLG4oZSx0KX19LHtcIi4vdXRpbHMvY29tbW9uXCI6NDEsXCIuL3V0aWxzL3N0cmluZ3NcIjo0MixcIi4vemxpYi9kZWZsYXRlXCI6NDYsXCIuL3psaWIvbWVzc2FnZXNcIjo1MSxcIi4vemxpYi96c3RyZWFtXCI6NTN9XSw0MDpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBjPWUoXCIuL3psaWIvaW5mbGF0ZVwiKSxkPWUoXCIuL3V0aWxzL2NvbW1vblwiKSxwPWUoXCIuL3V0aWxzL3N0cmluZ3NcIiksbT1lKFwiLi96bGliL2NvbnN0YW50c1wiKSxuPWUoXCIuL3psaWIvbWVzc2FnZXNcIiksaT1lKFwiLi96bGliL3pzdHJlYW1cIikscz1lKFwiLi96bGliL2d6aGVhZGVyXCIpLF89T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztmdW5jdGlvbiBhKGUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIGEpKXJldHVybiBuZXcgYShlKTt0aGlzLm9wdGlvbnM9ZC5hc3NpZ24oe2NodW5rU2l6ZToxNjM4NCx3aW5kb3dCaXRzOjAsdG86XCJcIn0sZXx8e30pO3ZhciB0PXRoaXMub3B0aW9uczt0LnJhdyYmMDw9dC53aW5kb3dCaXRzJiZ0LndpbmRvd0JpdHM8MTYmJih0LndpbmRvd0JpdHM9LXQud2luZG93Qml0cywwPT09dC53aW5kb3dCaXRzJiYodC53aW5kb3dCaXRzPS0xNSkpLCEoMDw9dC53aW5kb3dCaXRzJiZ0LndpbmRvd0JpdHM8MTYpfHxlJiZlLndpbmRvd0JpdHN8fCh0LndpbmRvd0JpdHMrPTMyKSwxNTx0LndpbmRvd0JpdHMmJnQud2luZG93Qml0czw0OCYmMD09KDE1JnQud2luZG93Qml0cykmJih0LndpbmRvd0JpdHN8PTE1KSx0aGlzLmVycj0wLHRoaXMubXNnPVwiXCIsdGhpcy5lbmRlZD0hMSx0aGlzLmNodW5rcz1bXSx0aGlzLnN0cm09bmV3IGksdGhpcy5zdHJtLmF2YWlsX291dD0wO3ZhciByPWMuaW5mbGF0ZUluaXQyKHRoaXMuc3RybSx0LndpbmRvd0JpdHMpO2lmKHIhPT1tLlpfT0spdGhyb3cgbmV3IEVycm9yKG5bcl0pO3RoaXMuaGVhZGVyPW5ldyBzLGMuaW5mbGF0ZUdldEhlYWRlcih0aGlzLnN0cm0sdGhpcy5oZWFkZXIpfWZ1bmN0aW9uIG8oZSx0KXt2YXIgcj1uZXcgYSh0KTtpZihyLnB1c2goZSwhMCksci5lcnIpdGhyb3cgci5tc2d8fG5bci5lcnJdO3JldHVybiByLnJlc3VsdH1hLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbixpLHMsYSxvLGg9dGhpcy5zdHJtLHU9dGhpcy5vcHRpb25zLmNodW5rU2l6ZSxsPXRoaXMub3B0aW9ucy5kaWN0aW9uYXJ5LGY9ITE7aWYodGhpcy5lbmRlZClyZXR1cm4hMTtuPXQ9PT1+fnQ/dDohMD09PXQ/bS5aX0ZJTklTSDptLlpfTk9fRkxVU0gsXCJzdHJpbmdcIj09dHlwZW9mIGU/aC5pbnB1dD1wLmJpbnN0cmluZzJidWYoZSk6XCJbb2JqZWN0IEFycmF5QnVmZmVyXVwiPT09Xy5jYWxsKGUpP2guaW5wdXQ9bmV3IFVpbnQ4QXJyYXkoZSk6aC5pbnB1dD1lLGgubmV4dF9pbj0wLGguYXZhaWxfaW49aC5pbnB1dC5sZW5ndGg7ZG97aWYoMD09PWguYXZhaWxfb3V0JiYoaC5vdXRwdXQ9bmV3IGQuQnVmOCh1KSxoLm5leHRfb3V0PTAsaC5hdmFpbF9vdXQ9dSksKHI9Yy5pbmZsYXRlKGgsbS5aX05PX0ZMVVNIKSk9PT1tLlpfTkVFRF9ESUNUJiZsJiYobz1cInN0cmluZ1wiPT10eXBlb2YgbD9wLnN0cmluZzJidWYobCk6XCJbb2JqZWN0IEFycmF5QnVmZmVyXVwiPT09Xy5jYWxsKGwpP25ldyBVaW50OEFycmF5KGwpOmwscj1jLmluZmxhdGVTZXREaWN0aW9uYXJ5KHRoaXMuc3RybSxvKSkscj09PW0uWl9CVUZfRVJST1ImJiEwPT09ZiYmKHI9bS5aX09LLGY9ITEpLHIhPT1tLlpfU1RSRUFNX0VORCYmciE9PW0uWl9PSylyZXR1cm4gdGhpcy5vbkVuZChyKSwhKHRoaXMuZW5kZWQ9ITApO2gubmV4dF9vdXQmJigwIT09aC5hdmFpbF9vdXQmJnIhPT1tLlpfU1RSRUFNX0VORCYmKDAhPT1oLmF2YWlsX2lufHxuIT09bS5aX0ZJTklTSCYmbiE9PW0uWl9TWU5DX0ZMVVNIKXx8KFwic3RyaW5nXCI9PT10aGlzLm9wdGlvbnMudG8/KGk9cC51dGY4Ym9yZGVyKGgub3V0cHV0LGgubmV4dF9vdXQpLHM9aC5uZXh0X291dC1pLGE9cC5idWYyc3RyaW5nKGgub3V0cHV0LGkpLGgubmV4dF9vdXQ9cyxoLmF2YWlsX291dD11LXMscyYmZC5hcnJheVNldChoLm91dHB1dCxoLm91dHB1dCxpLHMsMCksdGhpcy5vbkRhdGEoYSkpOnRoaXMub25EYXRhKGQuc2hyaW5rQnVmKGgub3V0cHV0LGgubmV4dF9vdXQpKSkpLDA9PT1oLmF2YWlsX2luJiYwPT09aC5hdmFpbF9vdXQmJihmPSEwKX13aGlsZSgoMDxoLmF2YWlsX2lufHwwPT09aC5hdmFpbF9vdXQpJiZyIT09bS5aX1NUUkVBTV9FTkQpO3JldHVybiByPT09bS5aX1NUUkVBTV9FTkQmJihuPW0uWl9GSU5JU0gpLG49PT1tLlpfRklOSVNIPyhyPWMuaW5mbGF0ZUVuZCh0aGlzLnN0cm0pLHRoaXMub25FbmQociksdGhpcy5lbmRlZD0hMCxyPT09bS5aX09LKTpuIT09bS5aX1NZTkNfRkxVU0h8fCh0aGlzLm9uRW5kKG0uWl9PSyksIShoLmF2YWlsX291dD0wKSl9LGEucHJvdG90eXBlLm9uRGF0YT1mdW5jdGlvbihlKXt0aGlzLmNodW5rcy5wdXNoKGUpfSxhLnByb3RvdHlwZS5vbkVuZD1mdW5jdGlvbihlKXtlPT09bS5aX09LJiYoXCJzdHJpbmdcIj09PXRoaXMub3B0aW9ucy50bz90aGlzLnJlc3VsdD10aGlzLmNodW5rcy5qb2luKFwiXCIpOnRoaXMucmVzdWx0PWQuZmxhdHRlbkNodW5rcyh0aGlzLmNodW5rcykpLHRoaXMuY2h1bmtzPVtdLHRoaXMuZXJyPWUsdGhpcy5tc2c9dGhpcy5zdHJtLm1zZ30sci5JbmZsYXRlPWEsci5pbmZsYXRlPW8sci5pbmZsYXRlUmF3PWZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQ9dHx8e30pLnJhdz0hMCxvKGUsdCl9LHIudW5nemlwPW99LHtcIi4vdXRpbHMvY29tbW9uXCI6NDEsXCIuL3V0aWxzL3N0cmluZ3NcIjo0MixcIi4vemxpYi9jb25zdGFudHNcIjo0NCxcIi4vemxpYi9nemhlYWRlclwiOjQ3LFwiLi96bGliL2luZmxhdGVcIjo0OSxcIi4vemxpYi9tZXNzYWdlc1wiOjUxLFwiLi96bGliL3pzdHJlYW1cIjo1M31dLDQxOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFVpbnQ4QXJyYXkmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBVaW50MTZBcnJheSYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIEludDMyQXJyYXk7ci5hc3NpZ249ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTt0Lmxlbmd0aDspe3ZhciByPXQuc2hpZnQoKTtpZihyKXtpZihcIm9iamVjdFwiIT10eXBlb2Ygcil0aHJvdyBuZXcgVHlwZUVycm9yKHIrXCJtdXN0IGJlIG5vbi1vYmplY3RcIik7Zm9yKHZhciBuIGluIHIpci5oYXNPd25Qcm9wZXJ0eShuKSYmKGVbbl09cltuXSl9fXJldHVybiBlfSxyLnNocmlua0J1Zj1mdW5jdGlvbihlLHQpe3JldHVybiBlLmxlbmd0aD09PXQ/ZTplLnN1YmFycmF5P2Uuc3ViYXJyYXkoMCx0KTooZS5sZW5ndGg9dCxlKX07dmFyIGk9e2FycmF5U2V0OmZ1bmN0aW9uKGUsdCxyLG4saSl7aWYodC5zdWJhcnJheSYmZS5zdWJhcnJheSllLnNldCh0LnN1YmFycmF5KHIscituKSxpKTtlbHNlIGZvcih2YXIgcz0wO3M8bjtzKyspZVtpK3NdPXRbcitzXX0sZmxhdHRlbkNodW5rczpmdW5jdGlvbihlKXt2YXIgdCxyLG4saSxzLGE7Zm9yKHQ9bj0wLHI9ZS5sZW5ndGg7dDxyO3QrKyluKz1lW3RdLmxlbmd0aDtmb3IoYT1uZXcgVWludDhBcnJheShuKSx0PWk9MCxyPWUubGVuZ3RoO3Q8cjt0Kyspcz1lW3RdLGEuc2V0KHMsaSksaSs9cy5sZW5ndGg7cmV0dXJuIGF9fSxzPXthcnJheVNldDpmdW5jdGlvbihlLHQscixuLGkpe2Zvcih2YXIgcz0wO3M8bjtzKyspZVtpK3NdPXRbcitzXX0sZmxhdHRlbkNodW5rczpmdW5jdGlvbihlKXtyZXR1cm5bXS5jb25jYXQuYXBwbHkoW10sZSl9fTtyLnNldFR5cGVkPWZ1bmN0aW9uKGUpe2U/KHIuQnVmOD1VaW50OEFycmF5LHIuQnVmMTY9VWludDE2QXJyYXksci5CdWYzMj1JbnQzMkFycmF5LHIuYXNzaWduKHIsaSkpOihyLkJ1Zjg9QXJyYXksci5CdWYxNj1BcnJheSxyLkJ1ZjMyPUFycmF5LHIuYXNzaWduKHIscykpfSxyLnNldFR5cGVkKG4pfSx7fV0sNDI6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgaD1lKFwiLi9jb21tb25cIiksaT0hMCxzPSEwO3RyeXtTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsWzBdKX1jYXRjaChlKXtpPSExfXRyeXtTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsbmV3IFVpbnQ4QXJyYXkoMSkpfWNhdGNoKGUpe3M9ITF9Zm9yKHZhciB1PW5ldyBoLkJ1ZjgoMjU2KSxuPTA7bjwyNTY7bisrKXVbbl09MjUyPD1uPzY6MjQ4PD1uPzU6MjQwPD1uPzQ6MjI0PD1uPzM6MTkyPD1uPzI6MTtmdW5jdGlvbiBsKGUsdCl7aWYodDw2NTUzNyYmKGUuc3ViYXJyYXkmJnN8fCFlLnN1YmFycmF5JiZpKSlyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLGguc2hyaW5rQnVmKGUsdCkpO2Zvcih2YXIgcj1cIlwiLG49MDtuPHQ7bisrKXIrPVN0cmluZy5mcm9tQ2hhckNvZGUoZVtuXSk7cmV0dXJuIHJ9dVsyNTRdPXVbMjU0XT0xLHIuc3RyaW5nMmJ1Zj1mdW5jdGlvbihlKXt2YXIgdCxyLG4saSxzLGE9ZS5sZW5ndGgsbz0wO2ZvcihpPTA7aTxhO2krKyk1NTI5Nj09KDY0NTEyJihyPWUuY2hhckNvZGVBdChpKSkpJiZpKzE8YSYmNTYzMjA9PSg2NDUxMiYobj1lLmNoYXJDb2RlQXQoaSsxKSkpJiYocj02NTUzNisoci01NTI5Njw8MTApKyhuLTU2MzIwKSxpKyspLG8rPXI8MTI4PzE6cjwyMDQ4PzI6cjw2NTUzNj8zOjQ7Zm9yKHQ9bmV3IGguQnVmOChvKSxpPXM9MDtzPG87aSsrKTU1Mjk2PT0oNjQ1MTImKHI9ZS5jaGFyQ29kZUF0KGkpKSkmJmkrMTxhJiY1NjMyMD09KDY0NTEyJihuPWUuY2hhckNvZGVBdChpKzEpKSkmJihyPTY1NTM2KyhyLTU1Mjk2PDwxMCkrKG4tNTYzMjApLGkrKykscjwxMjg/dFtzKytdPXI6KHI8MjA0OD90W3MrK109MTkyfHI+Pj42OihyPDY1NTM2P3RbcysrXT0yMjR8cj4+PjEyOih0W3MrK109MjQwfHI+Pj4xOCx0W3MrK109MTI4fHI+Pj4xMiY2MyksdFtzKytdPTEyOHxyPj4+NiY2MyksdFtzKytdPTEyOHw2MyZyKTtyZXR1cm4gdH0sci5idWYyYmluc3RyaW5nPWZ1bmN0aW9uKGUpe3JldHVybiBsKGUsZS5sZW5ndGgpfSxyLmJpbnN0cmluZzJidWY9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PW5ldyBoLkJ1ZjgoZS5sZW5ndGgpLHI9MCxuPXQubGVuZ3RoO3I8bjtyKyspdFtyXT1lLmNoYXJDb2RlQXQocik7cmV0dXJuIHR9LHIuYnVmMnN0cmluZz1mdW5jdGlvbihlLHQpe3ZhciByLG4saSxzLGE9dHx8ZS5sZW5ndGgsbz1uZXcgQXJyYXkoMiphKTtmb3Iocj1uPTA7cjxhOylpZigoaT1lW3IrK10pPDEyOClvW24rK109aTtlbHNlIGlmKDQ8KHM9dVtpXSkpb1tuKytdPTY1NTMzLHIrPXMtMTtlbHNle2ZvcihpJj0yPT09cz8zMTozPT09cz8xNTo3OzE8cyYmcjxhOylpPWk8PDZ8NjMmZVtyKytdLHMtLTsxPHM/b1tuKytdPTY1NTMzOmk8NjU1MzY/b1tuKytdPWk6KGktPTY1NTM2LG9bbisrXT01NTI5NnxpPj4xMCYxMDIzLG9bbisrXT01NjMyMHwxMDIzJmkpfXJldHVybiBsKG8sbil9LHIudXRmOGJvcmRlcj1mdW5jdGlvbihlLHQpe3ZhciByO2ZvcigodD10fHxlLmxlbmd0aCk+ZS5sZW5ndGgmJih0PWUubGVuZ3RoKSxyPXQtMTswPD1yJiYxMjg9PSgxOTImZVtyXSk7KXItLTtyZXR1cm4gcjwwP3Q6MD09PXI/dDpyK3VbZVtyXV0+dD9yOnR9fSx7XCIuL2NvbW1vblwiOjQxfV0sNDM6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt0LmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIsbil7Zm9yKHZhciBpPTY1NTM1JmV8MCxzPWU+Pj4xNiY2NTUzNXwwLGE9MDswIT09cjspe2ZvcihyLT1hPTJlMzxyPzJlMzpyO3M9cysoaT1pK3RbbisrXXwwKXwwLC0tYTspO2klPTY1NTIxLHMlPTY1NTIxfXJldHVybiBpfHM8PDE2fDB9fSx7fV0sNDQ6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt0LmV4cG9ydHM9e1pfTk9fRkxVU0g6MCxaX1BBUlRJQUxfRkxVU0g6MSxaX1NZTkNfRkxVU0g6MixaX0ZVTExfRkxVU0g6MyxaX0ZJTklTSDo0LFpfQkxPQ0s6NSxaX1RSRUVTOjYsWl9PSzowLFpfU1RSRUFNX0VORDoxLFpfTkVFRF9ESUNUOjIsWl9FUlJOTzotMSxaX1NUUkVBTV9FUlJPUjotMixaX0RBVEFfRVJST1I6LTMsWl9CVUZfRVJST1I6LTUsWl9OT19DT01QUkVTU0lPTjowLFpfQkVTVF9TUEVFRDoxLFpfQkVTVF9DT01QUkVTU0lPTjo5LFpfREVGQVVMVF9DT01QUkVTU0lPTjotMSxaX0ZJTFRFUkVEOjEsWl9IVUZGTUFOX09OTFk6MixaX1JMRTozLFpfRklYRUQ6NCxaX0RFRkFVTFRfU1RSQVRFR1k6MCxaX0JJTkFSWTowLFpfVEVYVDoxLFpfVU5LTk9XTjoyLFpfREVGTEFURUQ6OH19LHt9XSw0NTpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBvPWZ1bmN0aW9uKCl7Zm9yKHZhciBlLHQ9W10scj0wO3I8MjU2O3IrKyl7ZT1yO2Zvcih2YXIgbj0wO248ODtuKyspZT0xJmU/Mzk4ODI5MjM4NF5lPj4+MTplPj4+MTt0W3JdPWV9cmV0dXJuIHR9KCk7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBpPW8scz1uK3I7ZV49LTE7Zm9yKHZhciBhPW47YTxzO2ErKyllPWU+Pj44XmlbMjU1JihlXnRbYV0pXTtyZXR1cm4tMV5lfX0se31dLDQ2OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGgsYz1lKFwiLi4vdXRpbHMvY29tbW9uXCIpLHU9ZShcIi4vdHJlZXNcIiksZD1lKFwiLi9hZGxlcjMyXCIpLHA9ZShcIi4vY3JjMzJcIiksbj1lKFwiLi9tZXNzYWdlc1wiKSxsPTAsZj00LG09MCxfPS0yLGc9LTEsYj00LGk9Mix2PTgseT05LHM9Mjg2LGE9MzAsbz0xOSx3PTIqcysxLGs9MTUseD0zLFM9MjU4LHo9Uyt4KzEsQz00MixFPTExMyxBPTEsST0yLE89MyxCPTQ7ZnVuY3Rpb24gUihlLHQpe3JldHVybiBlLm1zZz1uW3RdLHR9ZnVuY3Rpb24gVChlKXtyZXR1cm4oZTw8MSktKDQ8ZT85OjApfWZ1bmN0aW9uIEQoZSl7Zm9yKHZhciB0PWUubGVuZ3RoOzA8PS0tdDspZVt0XT0wfWZ1bmN0aW9uIEYoZSl7dmFyIHQ9ZS5zdGF0ZSxyPXQucGVuZGluZztyPmUuYXZhaWxfb3V0JiYocj1lLmF2YWlsX291dCksMCE9PXImJihjLmFycmF5U2V0KGUub3V0cHV0LHQucGVuZGluZ19idWYsdC5wZW5kaW5nX291dCxyLGUubmV4dF9vdXQpLGUubmV4dF9vdXQrPXIsdC5wZW5kaW5nX291dCs9cixlLnRvdGFsX291dCs9cixlLmF2YWlsX291dC09cix0LnBlbmRpbmctPXIsMD09PXQucGVuZGluZyYmKHQucGVuZGluZ19vdXQ9MCkpfWZ1bmN0aW9uIE4oZSx0KXt1Ll90cl9mbHVzaF9ibG9jayhlLDA8PWUuYmxvY2tfc3RhcnQ/ZS5ibG9ja19zdGFydDotMSxlLnN0cnN0YXJ0LWUuYmxvY2tfc3RhcnQsdCksZS5ibG9ja19zdGFydD1lLnN0cnN0YXJ0LEYoZS5zdHJtKX1mdW5jdGlvbiBVKGUsdCl7ZS5wZW5kaW5nX2J1ZltlLnBlbmRpbmcrK109dH1mdW5jdGlvbiBQKGUsdCl7ZS5wZW5kaW5nX2J1ZltlLnBlbmRpbmcrK109dD4+PjgmMjU1LGUucGVuZGluZ19idWZbZS5wZW5kaW5nKytdPTI1NSZ0fWZ1bmN0aW9uIEwoZSx0KXt2YXIgcixuLGk9ZS5tYXhfY2hhaW5fbGVuZ3RoLHM9ZS5zdHJzdGFydCxhPWUucHJldl9sZW5ndGgsbz1lLm5pY2VfbWF0Y2gsaD1lLnN0cnN0YXJ0PmUud19zaXplLXo/ZS5zdHJzdGFydC0oZS53X3NpemUteik6MCx1PWUud2luZG93LGw9ZS53X21hc2ssZj1lLnByZXYsYz1lLnN0cnN0YXJ0K1MsZD11W3MrYS0xXSxwPXVbcythXTtlLnByZXZfbGVuZ3RoPj1lLmdvb2RfbWF0Y2gmJihpPj49Miksbz5lLmxvb2thaGVhZCYmKG89ZS5sb29rYWhlYWQpO2Rve2lmKHVbKHI9dCkrYV09PT1wJiZ1W3IrYS0xXT09PWQmJnVbcl09PT11W3NdJiZ1Wysrcl09PT11W3MrMV0pe3MrPTIscisrO2Rve313aGlsZSh1Wysrc109PT11Wysrcl0mJnVbKytzXT09PXVbKytyXSYmdVsrK3NdPT09dVsrK3JdJiZ1Wysrc109PT11Wysrcl0mJnVbKytzXT09PXVbKytyXSYmdVsrK3NdPT09dVsrK3JdJiZ1Wysrc109PT11Wysrcl0mJnVbKytzXT09PXVbKytyXSYmczxjKTtpZihuPVMtKGMtcykscz1jLVMsYTxuKXtpZihlLm1hdGNoX3N0YXJ0PXQsbzw9KGE9bikpYnJlYWs7ZD11W3MrYS0xXSxwPXVbcythXX19fXdoaWxlKCh0PWZbdCZsXSk+aCYmMCE9LS1pKTtyZXR1cm4gYTw9ZS5sb29rYWhlYWQ/YTplLmxvb2thaGVhZH1mdW5jdGlvbiBqKGUpe3ZhciB0LHIsbixpLHMsYSxvLGgsdSxsLGY9ZS53X3NpemU7ZG97aWYoaT1lLndpbmRvd19zaXplLWUubG9va2FoZWFkLWUuc3Ryc3RhcnQsZS5zdHJzdGFydD49ZisoZi16KSl7Zm9yKGMuYXJyYXlTZXQoZS53aW5kb3csZS53aW5kb3csZixmLDApLGUubWF0Y2hfc3RhcnQtPWYsZS5zdHJzdGFydC09ZixlLmJsb2NrX3N0YXJ0LT1mLHQ9cj1lLmhhc2hfc2l6ZTtuPWUuaGVhZFstLXRdLGUuaGVhZFt0XT1mPD1uP24tZjowLC0tcjspO2Zvcih0PXI9ZjtuPWUucHJldlstLXRdLGUucHJldlt0XT1mPD1uP24tZjowLC0tcjspO2krPWZ9aWYoMD09PWUuc3RybS5hdmFpbF9pbilicmVhaztpZihhPWUuc3RybSxvPWUud2luZG93LGg9ZS5zdHJzdGFydCtlLmxvb2thaGVhZCx1PWksbD12b2lkIDAsbD1hLmF2YWlsX2luLHU8bCYmKGw9dSkscj0wPT09bD8wOihhLmF2YWlsX2luLT1sLGMuYXJyYXlTZXQobyxhLmlucHV0LGEubmV4dF9pbixsLGgpLDE9PT1hLnN0YXRlLndyYXA/YS5hZGxlcj1kKGEuYWRsZXIsbyxsLGgpOjI9PT1hLnN0YXRlLndyYXAmJihhLmFkbGVyPXAoYS5hZGxlcixvLGwsaCkpLGEubmV4dF9pbis9bCxhLnRvdGFsX2luKz1sLGwpLGUubG9va2FoZWFkKz1yLGUubG9va2FoZWFkK2UuaW5zZXJ0Pj14KWZvcihzPWUuc3Ryc3RhcnQtZS5pbnNlcnQsZS5pbnNfaD1lLndpbmRvd1tzXSxlLmluc19oPShlLmluc19oPDxlLmhhc2hfc2hpZnReZS53aW5kb3dbcysxXSkmZS5oYXNoX21hc2s7ZS5pbnNlcnQmJihlLmluc19oPShlLmluc19oPDxlLmhhc2hfc2hpZnReZS53aW5kb3dbcyt4LTFdKSZlLmhhc2hfbWFzayxlLnByZXZbcyZlLndfbWFza109ZS5oZWFkW2UuaW5zX2hdLGUuaGVhZFtlLmluc19oXT1zLHMrKyxlLmluc2VydC0tLCEoZS5sb29rYWhlYWQrZS5pbnNlcnQ8eCkpOyk7fXdoaWxlKGUubG9va2FoZWFkPHomJjAhPT1lLnN0cm0uYXZhaWxfaW4pfWZ1bmN0aW9uIFooZSx0KXtmb3IodmFyIHIsbjs7KXtpZihlLmxvb2thaGVhZDx6KXtpZihqKGUpLGUubG9va2FoZWFkPHomJnQ9PT1sKXJldHVybiBBO2lmKDA9PT1lLmxvb2thaGVhZClicmVha31pZihyPTAsZS5sb29rYWhlYWQ+PXgmJihlLmluc19oPShlLmluc19oPDxlLmhhc2hfc2hpZnReZS53aW5kb3dbZS5zdHJzdGFydCt4LTFdKSZlLmhhc2hfbWFzayxyPWUucHJldltlLnN0cnN0YXJ0JmUud19tYXNrXT1lLmhlYWRbZS5pbnNfaF0sZS5oZWFkW2UuaW5zX2hdPWUuc3Ryc3RhcnQpLDAhPT1yJiZlLnN0cnN0YXJ0LXI8PWUud19zaXplLXomJihlLm1hdGNoX2xlbmd0aD1MKGUscikpLGUubWF0Y2hfbGVuZ3RoPj14KWlmKG49dS5fdHJfdGFsbHkoZSxlLnN0cnN0YXJ0LWUubWF0Y2hfc3RhcnQsZS5tYXRjaF9sZW5ndGgteCksZS5sb29rYWhlYWQtPWUubWF0Y2hfbGVuZ3RoLGUubWF0Y2hfbGVuZ3RoPD1lLm1heF9sYXp5X21hdGNoJiZlLmxvb2thaGVhZD49eCl7Zm9yKGUubWF0Y2hfbGVuZ3RoLS07ZS5zdHJzdGFydCsrLGUuaW5zX2g9KGUuaW5zX2g8PGUuaGFzaF9zaGlmdF5lLndpbmRvd1tlLnN0cnN0YXJ0K3gtMV0pJmUuaGFzaF9tYXNrLHI9ZS5wcmV2W2Uuc3Ryc3RhcnQmZS53X21hc2tdPWUuaGVhZFtlLmluc19oXSxlLmhlYWRbZS5pbnNfaF09ZS5zdHJzdGFydCwwIT0tLWUubWF0Y2hfbGVuZ3RoOyk7ZS5zdHJzdGFydCsrfWVsc2UgZS5zdHJzdGFydCs9ZS5tYXRjaF9sZW5ndGgsZS5tYXRjaF9sZW5ndGg9MCxlLmluc19oPWUud2luZG93W2Uuc3Ryc3RhcnRdLGUuaW5zX2g9KGUuaW5zX2g8PGUuaGFzaF9zaGlmdF5lLndpbmRvd1tlLnN0cnN0YXJ0KzFdKSZlLmhhc2hfbWFzaztlbHNlIG49dS5fdHJfdGFsbHkoZSwwLGUud2luZG93W2Uuc3Ryc3RhcnRdKSxlLmxvb2thaGVhZC0tLGUuc3Ryc3RhcnQrKztpZihuJiYoTihlLCExKSwwPT09ZS5zdHJtLmF2YWlsX291dCkpcmV0dXJuIEF9cmV0dXJuIGUuaW5zZXJ0PWUuc3Ryc3RhcnQ8eC0xP2Uuc3Ryc3RhcnQ6eC0xLHQ9PT1mPyhOKGUsITApLDA9PT1lLnN0cm0uYXZhaWxfb3V0P086Qik6ZS5sYXN0X2xpdCYmKE4oZSwhMSksMD09PWUuc3RybS5hdmFpbF9vdXQpP0E6SX1mdW5jdGlvbiBXKGUsdCl7Zm9yKHZhciByLG4saTs7KXtpZihlLmxvb2thaGVhZDx6KXtpZihqKGUpLGUubG9va2FoZWFkPHomJnQ9PT1sKXJldHVybiBBO2lmKDA9PT1lLmxvb2thaGVhZClicmVha31pZihyPTAsZS5sb29rYWhlYWQ+PXgmJihlLmluc19oPShlLmluc19oPDxlLmhhc2hfc2hpZnReZS53aW5kb3dbZS5zdHJzdGFydCt4LTFdKSZlLmhhc2hfbWFzayxyPWUucHJldltlLnN0cnN0YXJ0JmUud19tYXNrXT1lLmhlYWRbZS5pbnNfaF0sZS5oZWFkW2UuaW5zX2hdPWUuc3Ryc3RhcnQpLGUucHJldl9sZW5ndGg9ZS5tYXRjaF9sZW5ndGgsZS5wcmV2X21hdGNoPWUubWF0Y2hfc3RhcnQsZS5tYXRjaF9sZW5ndGg9eC0xLDAhPT1yJiZlLnByZXZfbGVuZ3RoPGUubWF4X2xhenlfbWF0Y2gmJmUuc3Ryc3RhcnQtcjw9ZS53X3NpemUteiYmKGUubWF0Y2hfbGVuZ3RoPUwoZSxyKSxlLm1hdGNoX2xlbmd0aDw9NSYmKDE9PT1lLnN0cmF0ZWd5fHxlLm1hdGNoX2xlbmd0aD09PXgmJjQwOTY8ZS5zdHJzdGFydC1lLm1hdGNoX3N0YXJ0KSYmKGUubWF0Y2hfbGVuZ3RoPXgtMSkpLGUucHJldl9sZW5ndGg+PXgmJmUubWF0Y2hfbGVuZ3RoPD1lLnByZXZfbGVuZ3RoKXtmb3IoaT1lLnN0cnN0YXJ0K2UubG9va2FoZWFkLXgsbj11Ll90cl90YWxseShlLGUuc3Ryc3RhcnQtMS1lLnByZXZfbWF0Y2gsZS5wcmV2X2xlbmd0aC14KSxlLmxvb2thaGVhZC09ZS5wcmV2X2xlbmd0aC0xLGUucHJldl9sZW5ndGgtPTI7KytlLnN0cnN0YXJ0PD1pJiYoZS5pbnNfaD0oZS5pbnNfaDw8ZS5oYXNoX3NoaWZ0XmUud2luZG93W2Uuc3Ryc3RhcnQreC0xXSkmZS5oYXNoX21hc2sscj1lLnByZXZbZS5zdHJzdGFydCZlLndfbWFza109ZS5oZWFkW2UuaW5zX2hdLGUuaGVhZFtlLmluc19oXT1lLnN0cnN0YXJ0KSwwIT0tLWUucHJldl9sZW5ndGg7KTtpZihlLm1hdGNoX2F2YWlsYWJsZT0wLGUubWF0Y2hfbGVuZ3RoPXgtMSxlLnN0cnN0YXJ0KyssbiYmKE4oZSwhMSksMD09PWUuc3RybS5hdmFpbF9vdXQpKXJldHVybiBBfWVsc2UgaWYoZS5tYXRjaF9hdmFpbGFibGUpe2lmKChuPXUuX3RyX3RhbGx5KGUsMCxlLndpbmRvd1tlLnN0cnN0YXJ0LTFdKSkmJk4oZSwhMSksZS5zdHJzdGFydCsrLGUubG9va2FoZWFkLS0sMD09PWUuc3RybS5hdmFpbF9vdXQpcmV0dXJuIEF9ZWxzZSBlLm1hdGNoX2F2YWlsYWJsZT0xLGUuc3Ryc3RhcnQrKyxlLmxvb2thaGVhZC0tfXJldHVybiBlLm1hdGNoX2F2YWlsYWJsZSYmKG49dS5fdHJfdGFsbHkoZSwwLGUud2luZG93W2Uuc3Ryc3RhcnQtMV0pLGUubWF0Y2hfYXZhaWxhYmxlPTApLGUuaW5zZXJ0PWUuc3Ryc3RhcnQ8eC0xP2Uuc3Ryc3RhcnQ6eC0xLHQ9PT1mPyhOKGUsITApLDA9PT1lLnN0cm0uYXZhaWxfb3V0P086Qik6ZS5sYXN0X2xpdCYmKE4oZSwhMSksMD09PWUuc3RybS5hdmFpbF9vdXQpP0E6SX1mdW5jdGlvbiBNKGUsdCxyLG4saSl7dGhpcy5nb29kX2xlbmd0aD1lLHRoaXMubWF4X2xhenk9dCx0aGlzLm5pY2VfbGVuZ3RoPXIsdGhpcy5tYXhfY2hhaW49bix0aGlzLmZ1bmM9aX1mdW5jdGlvbiBIKCl7dGhpcy5zdHJtPW51bGwsdGhpcy5zdGF0dXM9MCx0aGlzLnBlbmRpbmdfYnVmPW51bGwsdGhpcy5wZW5kaW5nX2J1Zl9zaXplPTAsdGhpcy5wZW5kaW5nX291dD0wLHRoaXMucGVuZGluZz0wLHRoaXMud3JhcD0wLHRoaXMuZ3poZWFkPW51bGwsdGhpcy5nemluZGV4PTAsdGhpcy5tZXRob2Q9dix0aGlzLmxhc3RfZmx1c2g9LTEsdGhpcy53X3NpemU9MCx0aGlzLndfYml0cz0wLHRoaXMud19tYXNrPTAsdGhpcy53aW5kb3c9bnVsbCx0aGlzLndpbmRvd19zaXplPTAsdGhpcy5wcmV2PW51bGwsdGhpcy5oZWFkPW51bGwsdGhpcy5pbnNfaD0wLHRoaXMuaGFzaF9zaXplPTAsdGhpcy5oYXNoX2JpdHM9MCx0aGlzLmhhc2hfbWFzaz0wLHRoaXMuaGFzaF9zaGlmdD0wLHRoaXMuYmxvY2tfc3RhcnQ9MCx0aGlzLm1hdGNoX2xlbmd0aD0wLHRoaXMucHJldl9tYXRjaD0wLHRoaXMubWF0Y2hfYXZhaWxhYmxlPTAsdGhpcy5zdHJzdGFydD0wLHRoaXMubWF0Y2hfc3RhcnQ9MCx0aGlzLmxvb2thaGVhZD0wLHRoaXMucHJldl9sZW5ndGg9MCx0aGlzLm1heF9jaGFpbl9sZW5ndGg9MCx0aGlzLm1heF9sYXp5X21hdGNoPTAsdGhpcy5sZXZlbD0wLHRoaXMuc3RyYXRlZ3k9MCx0aGlzLmdvb2RfbWF0Y2g9MCx0aGlzLm5pY2VfbWF0Y2g9MCx0aGlzLmR5bl9sdHJlZT1uZXcgYy5CdWYxNigyKncpLHRoaXMuZHluX2R0cmVlPW5ldyBjLkJ1ZjE2KDIqKDIqYSsxKSksdGhpcy5ibF90cmVlPW5ldyBjLkJ1ZjE2KDIqKDIqbysxKSksRCh0aGlzLmR5bl9sdHJlZSksRCh0aGlzLmR5bl9kdHJlZSksRCh0aGlzLmJsX3RyZWUpLHRoaXMubF9kZXNjPW51bGwsdGhpcy5kX2Rlc2M9bnVsbCx0aGlzLmJsX2Rlc2M9bnVsbCx0aGlzLmJsX2NvdW50PW5ldyBjLkJ1ZjE2KGsrMSksdGhpcy5oZWFwPW5ldyBjLkJ1ZjE2KDIqcysxKSxEKHRoaXMuaGVhcCksdGhpcy5oZWFwX2xlbj0wLHRoaXMuaGVhcF9tYXg9MCx0aGlzLmRlcHRoPW5ldyBjLkJ1ZjE2KDIqcysxKSxEKHRoaXMuZGVwdGgpLHRoaXMubF9idWY9MCx0aGlzLmxpdF9idWZzaXplPTAsdGhpcy5sYXN0X2xpdD0wLHRoaXMuZF9idWY9MCx0aGlzLm9wdF9sZW49MCx0aGlzLnN0YXRpY19sZW49MCx0aGlzLm1hdGNoZXM9MCx0aGlzLmluc2VydD0wLHRoaXMuYmlfYnVmPTAsdGhpcy5iaV92YWxpZD0wfWZ1bmN0aW9uIEcoZSl7dmFyIHQ7cmV0dXJuIGUmJmUuc3RhdGU/KGUudG90YWxfaW49ZS50b3RhbF9vdXQ9MCxlLmRhdGFfdHlwZT1pLCh0PWUuc3RhdGUpLnBlbmRpbmc9MCx0LnBlbmRpbmdfb3V0PTAsdC53cmFwPDAmJih0LndyYXA9LXQud3JhcCksdC5zdGF0dXM9dC53cmFwP0M6RSxlLmFkbGVyPTI9PT10LndyYXA/MDoxLHQubGFzdF9mbHVzaD1sLHUuX3RyX2luaXQodCksbSk6UihlLF8pfWZ1bmN0aW9uIEsoZSl7dmFyIHQ9RyhlKTtyZXR1cm4gdD09PW0mJmZ1bmN0aW9uKGUpe2Uud2luZG93X3NpemU9MiplLndfc2l6ZSxEKGUuaGVhZCksZS5tYXhfbGF6eV9tYXRjaD1oW2UubGV2ZWxdLm1heF9sYXp5LGUuZ29vZF9tYXRjaD1oW2UubGV2ZWxdLmdvb2RfbGVuZ3RoLGUubmljZV9tYXRjaD1oW2UubGV2ZWxdLm5pY2VfbGVuZ3RoLGUubWF4X2NoYWluX2xlbmd0aD1oW2UubGV2ZWxdLm1heF9jaGFpbixlLnN0cnN0YXJ0PTAsZS5ibG9ja19zdGFydD0wLGUubG9va2FoZWFkPTAsZS5pbnNlcnQ9MCxlLm1hdGNoX2xlbmd0aD1lLnByZXZfbGVuZ3RoPXgtMSxlLm1hdGNoX2F2YWlsYWJsZT0wLGUuaW5zX2g9MH0oZS5zdGF0ZSksdH1mdW5jdGlvbiBZKGUsdCxyLG4saSxzKXtpZighZSlyZXR1cm4gXzt2YXIgYT0xO2lmKHQ9PT1nJiYodD02KSxuPDA/KGE9MCxuPS1uKToxNTxuJiYoYT0yLG4tPTE2KSxpPDF8fHk8aXx8ciE9PXZ8fG48OHx8MTU8bnx8dDwwfHw5PHR8fHM8MHx8YjxzKXJldHVybiBSKGUsXyk7OD09PW4mJihuPTkpO3ZhciBvPW5ldyBIO3JldHVybihlLnN0YXRlPW8pLnN0cm09ZSxvLndyYXA9YSxvLmd6aGVhZD1udWxsLG8ud19iaXRzPW4sby53X3NpemU9MTw8by53X2JpdHMsby53X21hc2s9by53X3NpemUtMSxvLmhhc2hfYml0cz1pKzcsby5oYXNoX3NpemU9MTw8by5oYXNoX2JpdHMsby5oYXNoX21hc2s9by5oYXNoX3NpemUtMSxvLmhhc2hfc2hpZnQ9fn4oKG8uaGFzaF9iaXRzK3gtMSkveCksby53aW5kb3c9bmV3IGMuQnVmOCgyKm8ud19zaXplKSxvLmhlYWQ9bmV3IGMuQnVmMTYoby5oYXNoX3NpemUpLG8ucHJldj1uZXcgYy5CdWYxNihvLndfc2l6ZSksby5saXRfYnVmc2l6ZT0xPDxpKzYsby5wZW5kaW5nX2J1Zl9zaXplPTQqby5saXRfYnVmc2l6ZSxvLnBlbmRpbmdfYnVmPW5ldyBjLkJ1Zjgoby5wZW5kaW5nX2J1Zl9zaXplKSxvLmRfYnVmPTEqby5saXRfYnVmc2l6ZSxvLmxfYnVmPTMqby5saXRfYnVmc2l6ZSxvLmxldmVsPXQsby5zdHJhdGVneT1zLG8ubWV0aG9kPXIsSyhlKX1oPVtuZXcgTSgwLDAsMCwwLGZ1bmN0aW9uKGUsdCl7dmFyIHI9NjU1MzU7Zm9yKHI+ZS5wZW5kaW5nX2J1Zl9zaXplLTUmJihyPWUucGVuZGluZ19idWZfc2l6ZS01KTs7KXtpZihlLmxvb2thaGVhZDw9MSl7aWYoaihlKSwwPT09ZS5sb29rYWhlYWQmJnQ9PT1sKXJldHVybiBBO2lmKDA9PT1lLmxvb2thaGVhZClicmVha31lLnN0cnN0YXJ0Kz1lLmxvb2thaGVhZCxlLmxvb2thaGVhZD0wO3ZhciBuPWUuYmxvY2tfc3RhcnQrcjtpZigoMD09PWUuc3Ryc3RhcnR8fGUuc3Ryc3RhcnQ+PW4pJiYoZS5sb29rYWhlYWQ9ZS5zdHJzdGFydC1uLGUuc3Ryc3RhcnQ9bixOKGUsITEpLDA9PT1lLnN0cm0uYXZhaWxfb3V0KSlyZXR1cm4gQTtpZihlLnN0cnN0YXJ0LWUuYmxvY2tfc3RhcnQ+PWUud19zaXplLXomJihOKGUsITEpLDA9PT1lLnN0cm0uYXZhaWxfb3V0KSlyZXR1cm4gQX1yZXR1cm4gZS5pbnNlcnQ9MCx0PT09Zj8oTihlLCEwKSwwPT09ZS5zdHJtLmF2YWlsX291dD9POkIpOihlLnN0cnN0YXJ0PmUuYmxvY2tfc3RhcnQmJihOKGUsITEpLGUuc3RybS5hdmFpbF9vdXQpLEEpfSksbmV3IE0oNCw0LDgsNCxaKSxuZXcgTSg0LDUsMTYsOCxaKSxuZXcgTSg0LDYsMzIsMzIsWiksbmV3IE0oNCw0LDE2LDE2LFcpLG5ldyBNKDgsMTYsMzIsMzIsVyksbmV3IE0oOCwxNiwxMjgsMTI4LFcpLG5ldyBNKDgsMzIsMTI4LDI1NixXKSxuZXcgTSgzMiwxMjgsMjU4LDEwMjQsVyksbmV3IE0oMzIsMjU4LDI1OCw0MDk2LFcpXSxyLmRlZmxhdGVJbml0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIFkoZSx0LHYsMTUsOCwwKX0sci5kZWZsYXRlSW5pdDI9WSxyLmRlZmxhdGVSZXNldD1LLHIuZGVmbGF0ZVJlc2V0S2VlcD1HLHIuZGVmbGF0ZVNldEhlYWRlcj1mdW5jdGlvbihlLHQpe3JldHVybiBlJiZlLnN0YXRlPzIhPT1lLnN0YXRlLndyYXA/XzooZS5zdGF0ZS5nemhlYWQ9dCxtKTpffSxyLmRlZmxhdGU9ZnVuY3Rpb24oZSx0KXt2YXIgcixuLGkscztpZighZXx8IWUuc3RhdGV8fDU8dHx8dDwwKXJldHVybiBlP1IoZSxfKTpfO2lmKG49ZS5zdGF0ZSwhZS5vdXRwdXR8fCFlLmlucHV0JiYwIT09ZS5hdmFpbF9pbnx8NjY2PT09bi5zdGF0dXMmJnQhPT1mKXJldHVybiBSKGUsMD09PWUuYXZhaWxfb3V0Py01Ol8pO2lmKG4uc3RybT1lLHI9bi5sYXN0X2ZsdXNoLG4ubGFzdF9mbHVzaD10LG4uc3RhdHVzPT09QylpZigyPT09bi53cmFwKWUuYWRsZXI9MCxVKG4sMzEpLFUobiwxMzkpLFUobiw4KSxuLmd6aGVhZD8oVShuLChuLmd6aGVhZC50ZXh0PzE6MCkrKG4uZ3poZWFkLmhjcmM/MjowKSsobi5nemhlYWQuZXh0cmE/NDowKSsobi5nemhlYWQubmFtZT84OjApKyhuLmd6aGVhZC5jb21tZW50PzE2OjApKSxVKG4sMjU1Jm4uZ3poZWFkLnRpbWUpLFUobixuLmd6aGVhZC50aW1lPj44JjI1NSksVShuLG4uZ3poZWFkLnRpbWU+PjE2JjI1NSksVShuLG4uZ3poZWFkLnRpbWU+PjI0JjI1NSksVShuLDk9PT1uLmxldmVsPzI6Mjw9bi5zdHJhdGVneXx8bi5sZXZlbDwyPzQ6MCksVShuLDI1NSZuLmd6aGVhZC5vcyksbi5nemhlYWQuZXh0cmEmJm4uZ3poZWFkLmV4dHJhLmxlbmd0aCYmKFUobiwyNTUmbi5nemhlYWQuZXh0cmEubGVuZ3RoKSxVKG4sbi5nemhlYWQuZXh0cmEubGVuZ3RoPj44JjI1NSkpLG4uZ3poZWFkLmhjcmMmJihlLmFkbGVyPXAoZS5hZGxlcixuLnBlbmRpbmdfYnVmLG4ucGVuZGluZywwKSksbi5nemluZGV4PTAsbi5zdGF0dXM9NjkpOihVKG4sMCksVShuLDApLFUobiwwKSxVKG4sMCksVShuLDApLFUobiw5PT09bi5sZXZlbD8yOjI8PW4uc3RyYXRlZ3l8fG4ubGV2ZWw8Mj80OjApLFUobiwzKSxuLnN0YXR1cz1FKTtlbHNle3ZhciBhPXYrKG4ud19iaXRzLTg8PDQpPDw4O2F8PSgyPD1uLnN0cmF0ZWd5fHxuLmxldmVsPDI/MDpuLmxldmVsPDY/MTo2PT09bi5sZXZlbD8yOjMpPDw2LDAhPT1uLnN0cnN0YXJ0JiYoYXw9MzIpLGErPTMxLWElMzEsbi5zdGF0dXM9RSxQKG4sYSksMCE9PW4uc3Ryc3RhcnQmJihQKG4sZS5hZGxlcj4+PjE2KSxQKG4sNjU1MzUmZS5hZGxlcikpLGUuYWRsZXI9MX1pZig2OT09PW4uc3RhdHVzKWlmKG4uZ3poZWFkLmV4dHJhKXtmb3IoaT1uLnBlbmRpbmc7bi5nemluZGV4PCg2NTUzNSZuLmd6aGVhZC5leHRyYS5sZW5ndGgpJiYobi5wZW5kaW5nIT09bi5wZW5kaW5nX2J1Zl9zaXplfHwobi5nemhlYWQuaGNyYyYmbi5wZW5kaW5nPmkmJihlLmFkbGVyPXAoZS5hZGxlcixuLnBlbmRpbmdfYnVmLG4ucGVuZGluZy1pLGkpKSxGKGUpLGk9bi5wZW5kaW5nLG4ucGVuZGluZyE9PW4ucGVuZGluZ19idWZfc2l6ZSkpOylVKG4sMjU1Jm4uZ3poZWFkLmV4dHJhW24uZ3ppbmRleF0pLG4uZ3ppbmRleCsrO24uZ3poZWFkLmhjcmMmJm4ucGVuZGluZz5pJiYoZS5hZGxlcj1wKGUuYWRsZXIsbi5wZW5kaW5nX2J1ZixuLnBlbmRpbmctaSxpKSksbi5nemluZGV4PT09bi5nemhlYWQuZXh0cmEubGVuZ3RoJiYobi5nemluZGV4PTAsbi5zdGF0dXM9NzMpfWVsc2Ugbi5zdGF0dXM9NzM7aWYoNzM9PT1uLnN0YXR1cylpZihuLmd6aGVhZC5uYW1lKXtpPW4ucGVuZGluZztkb3tpZihuLnBlbmRpbmc9PT1uLnBlbmRpbmdfYnVmX3NpemUmJihuLmd6aGVhZC5oY3JjJiZuLnBlbmRpbmc+aSYmKGUuYWRsZXI9cChlLmFkbGVyLG4ucGVuZGluZ19idWYsbi5wZW5kaW5nLWksaSkpLEYoZSksaT1uLnBlbmRpbmcsbi5wZW5kaW5nPT09bi5wZW5kaW5nX2J1Zl9zaXplKSl7cz0xO2JyZWFrfXM9bi5nemluZGV4PG4uZ3poZWFkLm5hbWUubGVuZ3RoPzI1NSZuLmd6aGVhZC5uYW1lLmNoYXJDb2RlQXQobi5nemluZGV4KyspOjAsVShuLHMpfXdoaWxlKDAhPT1zKTtuLmd6aGVhZC5oY3JjJiZuLnBlbmRpbmc+aSYmKGUuYWRsZXI9cChlLmFkbGVyLG4ucGVuZGluZ19idWYsbi5wZW5kaW5nLWksaSkpLDA9PT1zJiYobi5nemluZGV4PTAsbi5zdGF0dXM9OTEpfWVsc2Ugbi5zdGF0dXM9OTE7aWYoOTE9PT1uLnN0YXR1cylpZihuLmd6aGVhZC5jb21tZW50KXtpPW4ucGVuZGluZztkb3tpZihuLnBlbmRpbmc9PT1uLnBlbmRpbmdfYnVmX3NpemUmJihuLmd6aGVhZC5oY3JjJiZuLnBlbmRpbmc+aSYmKGUuYWRsZXI9cChlLmFkbGVyLG4ucGVuZGluZ19idWYsbi5wZW5kaW5nLWksaSkpLEYoZSksaT1uLnBlbmRpbmcsbi5wZW5kaW5nPT09bi5wZW5kaW5nX2J1Zl9zaXplKSl7cz0xO2JyZWFrfXM9bi5nemluZGV4PG4uZ3poZWFkLmNvbW1lbnQubGVuZ3RoPzI1NSZuLmd6aGVhZC5jb21tZW50LmNoYXJDb2RlQXQobi5nemluZGV4KyspOjAsVShuLHMpfXdoaWxlKDAhPT1zKTtuLmd6aGVhZC5oY3JjJiZuLnBlbmRpbmc+aSYmKGUuYWRsZXI9cChlLmFkbGVyLG4ucGVuZGluZ19idWYsbi5wZW5kaW5nLWksaSkpLDA9PT1zJiYobi5zdGF0dXM9MTAzKX1lbHNlIG4uc3RhdHVzPTEwMztpZigxMDM9PT1uLnN0YXR1cyYmKG4uZ3poZWFkLmhjcmM/KG4ucGVuZGluZysyPm4ucGVuZGluZ19idWZfc2l6ZSYmRihlKSxuLnBlbmRpbmcrMjw9bi5wZW5kaW5nX2J1Zl9zaXplJiYoVShuLDI1NSZlLmFkbGVyKSxVKG4sZS5hZGxlcj4+OCYyNTUpLGUuYWRsZXI9MCxuLnN0YXR1cz1FKSk6bi5zdGF0dXM9RSksMCE9PW4ucGVuZGluZyl7aWYoRihlKSwwPT09ZS5hdmFpbF9vdXQpcmV0dXJuIG4ubGFzdF9mbHVzaD0tMSxtfWVsc2UgaWYoMD09PWUuYXZhaWxfaW4mJlQodCk8PVQocikmJnQhPT1mKXJldHVybiBSKGUsLTUpO2lmKDY2Nj09PW4uc3RhdHVzJiYwIT09ZS5hdmFpbF9pbilyZXR1cm4gUihlLC01KTtpZigwIT09ZS5hdmFpbF9pbnx8MCE9PW4ubG9va2FoZWFkfHx0IT09bCYmNjY2IT09bi5zdGF0dXMpe3ZhciBvPTI9PT1uLnN0cmF0ZWd5P2Z1bmN0aW9uKGUsdCl7Zm9yKHZhciByOzspe2lmKDA9PT1lLmxvb2thaGVhZCYmKGooZSksMD09PWUubG9va2FoZWFkKSl7aWYodD09PWwpcmV0dXJuIEE7YnJlYWt9aWYoZS5tYXRjaF9sZW5ndGg9MCxyPXUuX3RyX3RhbGx5KGUsMCxlLndpbmRvd1tlLnN0cnN0YXJ0XSksZS5sb29rYWhlYWQtLSxlLnN0cnN0YXJ0KyssciYmKE4oZSwhMSksMD09PWUuc3RybS5hdmFpbF9vdXQpKXJldHVybiBBfXJldHVybiBlLmluc2VydD0wLHQ9PT1mPyhOKGUsITApLDA9PT1lLnN0cm0uYXZhaWxfb3V0P086Qik6ZS5sYXN0X2xpdCYmKE4oZSwhMSksMD09PWUuc3RybS5hdmFpbF9vdXQpP0E6SX0obix0KTozPT09bi5zdHJhdGVneT9mdW5jdGlvbihlLHQpe2Zvcih2YXIgcixuLGkscyxhPWUud2luZG93Ozspe2lmKGUubG9va2FoZWFkPD1TKXtpZihqKGUpLGUubG9va2FoZWFkPD1TJiZ0PT09bClyZXR1cm4gQTtpZigwPT09ZS5sb29rYWhlYWQpYnJlYWt9aWYoZS5tYXRjaF9sZW5ndGg9MCxlLmxvb2thaGVhZD49eCYmMDxlLnN0cnN0YXJ0JiYobj1hW2k9ZS5zdHJzdGFydC0xXSk9PT1hWysraV0mJm49PT1hWysraV0mJm49PT1hWysraV0pe3M9ZS5zdHJzdGFydCtTO2Rve313aGlsZShuPT09YVsrK2ldJiZuPT09YVsrK2ldJiZuPT09YVsrK2ldJiZuPT09YVsrK2ldJiZuPT09YVsrK2ldJiZuPT09YVsrK2ldJiZuPT09YVsrK2ldJiZuPT09YVsrK2ldJiZpPHMpO2UubWF0Y2hfbGVuZ3RoPVMtKHMtaSksZS5tYXRjaF9sZW5ndGg+ZS5sb29rYWhlYWQmJihlLm1hdGNoX2xlbmd0aD1lLmxvb2thaGVhZCl9aWYoZS5tYXRjaF9sZW5ndGg+PXg/KHI9dS5fdHJfdGFsbHkoZSwxLGUubWF0Y2hfbGVuZ3RoLXgpLGUubG9va2FoZWFkLT1lLm1hdGNoX2xlbmd0aCxlLnN0cnN0YXJ0Kz1lLm1hdGNoX2xlbmd0aCxlLm1hdGNoX2xlbmd0aD0wKToocj11Ll90cl90YWxseShlLDAsZS53aW5kb3dbZS5zdHJzdGFydF0pLGUubG9va2FoZWFkLS0sZS5zdHJzdGFydCsrKSxyJiYoTihlLCExKSwwPT09ZS5zdHJtLmF2YWlsX291dCkpcmV0dXJuIEF9cmV0dXJuIGUuaW5zZXJ0PTAsdD09PWY/KE4oZSwhMCksMD09PWUuc3RybS5hdmFpbF9vdXQ/TzpCKTplLmxhc3RfbGl0JiYoTihlLCExKSwwPT09ZS5zdHJtLmF2YWlsX291dCk/QTpJfShuLHQpOmhbbi5sZXZlbF0uZnVuYyhuLHQpO2lmKG8hPT1PJiZvIT09Qnx8KG4uc3RhdHVzPTY2Niksbz09PUF8fG89PT1PKXJldHVybiAwPT09ZS5hdmFpbF9vdXQmJihuLmxhc3RfZmx1c2g9LTEpLG07aWYobz09PUkmJigxPT09dD91Ll90cl9hbGlnbihuKTo1IT09dCYmKHUuX3RyX3N0b3JlZF9ibG9jayhuLDAsMCwhMSksMz09PXQmJihEKG4uaGVhZCksMD09PW4ubG9va2FoZWFkJiYobi5zdHJzdGFydD0wLG4uYmxvY2tfc3RhcnQ9MCxuLmluc2VydD0wKSkpLEYoZSksMD09PWUuYXZhaWxfb3V0KSlyZXR1cm4gbi5sYXN0X2ZsdXNoPS0xLG19cmV0dXJuIHQhPT1mP206bi53cmFwPD0wPzE6KDI9PT1uLndyYXA/KFUobiwyNTUmZS5hZGxlciksVShuLGUuYWRsZXI+PjgmMjU1KSxVKG4sZS5hZGxlcj4+MTYmMjU1KSxVKG4sZS5hZGxlcj4+MjQmMjU1KSxVKG4sMjU1JmUudG90YWxfaW4pLFUobixlLnRvdGFsX2luPj44JjI1NSksVShuLGUudG90YWxfaW4+PjE2JjI1NSksVShuLGUudG90YWxfaW4+PjI0JjI1NSkpOihQKG4sZS5hZGxlcj4+PjE2KSxQKG4sNjU1MzUmZS5hZGxlcikpLEYoZSksMDxuLndyYXAmJihuLndyYXA9LW4ud3JhcCksMCE9PW4ucGVuZGluZz9tOjEpfSxyLmRlZmxhdGVFbmQ9ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIGUmJmUuc3RhdGU/KHQ9ZS5zdGF0ZS5zdGF0dXMpIT09QyYmNjkhPT10JiY3MyE9PXQmJjkxIT09dCYmMTAzIT09dCYmdCE9PUUmJjY2NiE9PXQ/UihlLF8pOihlLnN0YXRlPW51bGwsdD09PUU/UihlLC0zKTptKTpffSxyLmRlZmxhdGVTZXREaWN0aW9uYXJ5PWZ1bmN0aW9uKGUsdCl7dmFyIHIsbixpLHMsYSxvLGgsdSxsPXQubGVuZ3RoO2lmKCFlfHwhZS5zdGF0ZSlyZXR1cm4gXztpZigyPT09KHM9KHI9ZS5zdGF0ZSkud3JhcCl8fDE9PT1zJiZyLnN0YXR1cyE9PUN8fHIubG9va2FoZWFkKXJldHVybiBfO2ZvcigxPT09cyYmKGUuYWRsZXI9ZChlLmFkbGVyLHQsbCwwKSksci53cmFwPTAsbD49ci53X3NpemUmJigwPT09cyYmKEQoci5oZWFkKSxyLnN0cnN0YXJ0PTAsci5ibG9ja19zdGFydD0wLHIuaW5zZXJ0PTApLHU9bmV3IGMuQnVmOChyLndfc2l6ZSksYy5hcnJheVNldCh1LHQsbC1yLndfc2l6ZSxyLndfc2l6ZSwwKSx0PXUsbD1yLndfc2l6ZSksYT1lLmF2YWlsX2luLG89ZS5uZXh0X2luLGg9ZS5pbnB1dCxlLmF2YWlsX2luPWwsZS5uZXh0X2luPTAsZS5pbnB1dD10LGoocik7ci5sb29rYWhlYWQ+PXg7KXtmb3Iobj1yLnN0cnN0YXJ0LGk9ci5sb29rYWhlYWQtKHgtMSk7ci5pbnNfaD0oci5pbnNfaDw8ci5oYXNoX3NoaWZ0XnIud2luZG93W24reC0xXSkmci5oYXNoX21hc2ssci5wcmV2W24mci53X21hc2tdPXIuaGVhZFtyLmluc19oXSxyLmhlYWRbci5pbnNfaF09bixuKyssLS1pOyk7ci5zdHJzdGFydD1uLHIubG9va2FoZWFkPXgtMSxqKHIpfXJldHVybiByLnN0cnN0YXJ0Kz1yLmxvb2thaGVhZCxyLmJsb2NrX3N0YXJ0PXIuc3Ryc3RhcnQsci5pbnNlcnQ9ci5sb29rYWhlYWQsci5sb29rYWhlYWQ9MCxyLm1hdGNoX2xlbmd0aD1yLnByZXZfbGVuZ3RoPXgtMSxyLm1hdGNoX2F2YWlsYWJsZT0wLGUubmV4dF9pbj1vLGUuaW5wdXQ9aCxlLmF2YWlsX2luPWEsci53cmFwPXMsbX0sci5kZWZsYXRlSW5mbz1cInBha28gZGVmbGF0ZSAoZnJvbSBOb2RlY2EgcHJvamVjdClcIn0se1wiLi4vdXRpbHMvY29tbW9uXCI6NDEsXCIuL2FkbGVyMzJcIjo0MyxcIi4vY3JjMzJcIjo0NSxcIi4vbWVzc2FnZXNcIjo1MSxcIi4vdHJlZXNcIjo1Mn1dLDQ3OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dC5leHBvcnRzPWZ1bmN0aW9uKCl7dGhpcy50ZXh0PTAsdGhpcy50aW1lPTAsdGhpcy54ZmxhZ3M9MCx0aGlzLm9zPTAsdGhpcy5leHRyYT1udWxsLHRoaXMuZXh0cmFfbGVuPTAsdGhpcy5uYW1lPVwiXCIsdGhpcy5jb21tZW50PVwiXCIsdGhpcy5oY3JjPTAsdGhpcy5kb25lPSExfX0se31dLDQ4OltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dC5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbixpLHMsYSxvLGgsdSxsLGYsYyxkLHAsbSxfLGcsYix2LHksdyxrLHgsUyx6LEM7cj1lLnN0YXRlLG49ZS5uZXh0X2luLHo9ZS5pbnB1dCxpPW4rKGUuYXZhaWxfaW4tNSkscz1lLm5leHRfb3V0LEM9ZS5vdXRwdXQsYT1zLSh0LWUuYXZhaWxfb3V0KSxvPXMrKGUuYXZhaWxfb3V0LTI1NyksaD1yLmRtYXgsdT1yLndzaXplLGw9ci53aGF2ZSxmPXIud25leHQsYz1yLndpbmRvdyxkPXIuaG9sZCxwPXIuYml0cyxtPXIubGVuY29kZSxfPXIuZGlzdGNvZGUsZz0oMTw8ci5sZW5iaXRzKS0xLGI9KDE8PHIuZGlzdGJpdHMpLTE7ZTpkb3twPDE1JiYoZCs9eltuKytdPDxwLHArPTgsZCs9eltuKytdPDxwLHArPTgpLHY9bVtkJmddO3Q6Zm9yKDs7KXtpZihkPj4+PXk9dj4+PjI0LHAtPXksMD09PSh5PXY+Pj4xNiYyNTUpKUNbcysrXT02NTUzNSZ2O2Vsc2V7aWYoISgxNiZ5KSl7aWYoMD09KDY0JnkpKXt2PW1bKDY1NTM1JnYpKyhkJigxPDx5KS0xKV07Y29udGludWUgdH1pZigzMiZ5KXtyLm1vZGU9MTI7YnJlYWsgZX1lLm1zZz1cImludmFsaWQgbGl0ZXJhbC9sZW5ndGggY29kZVwiLHIubW9kZT0zMDticmVhayBlfXc9NjU1MzUmdiwoeSY9MTUpJiYocDx5JiYoZCs9eltuKytdPDxwLHArPTgpLHcrPWQmKDE8PHkpLTEsZD4+Pj15LHAtPXkpLHA8MTUmJihkKz16W24rK108PHAscCs9OCxkKz16W24rK108PHAscCs9OCksdj1fW2QmYl07cjpmb3IoOzspe2lmKGQ+Pj49eT12Pj4+MjQscC09eSwhKDE2Jih5PXY+Pj4xNiYyNTUpKSl7aWYoMD09KDY0JnkpKXt2PV9bKDY1NTM1JnYpKyhkJigxPDx5KS0xKV07Y29udGludWUgcn1lLm1zZz1cImludmFsaWQgZGlzdGFuY2UgY29kZVwiLHIubW9kZT0zMDticmVhayBlfWlmKGs9NjU1MzUmdixwPCh5Jj0xNSkmJihkKz16W24rK108PHAsKHArPTgpPHkmJihkKz16W24rK108PHAscCs9OCkpLGg8KGsrPWQmKDE8PHkpLTEpKXtlLm1zZz1cImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrXCIsci5tb2RlPTMwO2JyZWFrIGV9aWYoZD4+Pj15LHAtPXksKHk9cy1hKTxrKXtpZihsPCh5PWsteSkmJnIuc2FuZSl7ZS5tc2c9XCJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFja1wiLHIubW9kZT0zMDticmVhayBlfWlmKFM9YywoeD0wKT09PWYpe2lmKHgrPXUteSx5PHcpe2Zvcih3LT15O0NbcysrXT1jW3grK10sLS15Oyk7eD1zLWssUz1DfX1lbHNlIGlmKGY8eSl7aWYoeCs9dStmLXksKHktPWYpPHcpe2Zvcih3LT15O0NbcysrXT1jW3grK10sLS15Oyk7aWYoeD0wLGY8dyl7Zm9yKHctPXk9ZjtDW3MrK109Y1t4KytdLC0teTspO3g9cy1rLFM9Q319fWVsc2UgaWYoeCs9Zi15LHk8dyl7Zm9yKHctPXk7Q1tzKytdPWNbeCsrXSwtLXk7KTt4PXMtayxTPUN9Zm9yKDsyPHc7KUNbcysrXT1TW3grK10sQ1tzKytdPVNbeCsrXSxDW3MrK109U1t4KytdLHctPTM7dyYmKENbcysrXT1TW3grK10sMTx3JiYoQ1tzKytdPVNbeCsrXSkpfWVsc2V7Zm9yKHg9cy1rO0NbcysrXT1DW3grK10sQ1tzKytdPUNbeCsrXSxDW3MrK109Q1t4KytdLDI8KHctPTMpOyk7dyYmKENbcysrXT1DW3grK10sMTx3JiYoQ1tzKytdPUNbeCsrXSkpfWJyZWFrfX1icmVha319d2hpbGUobjxpJiZzPG8pO24tPXc9cD4+MyxkJj0oMTw8KHAtPXc8PDMpKS0xLGUubmV4dF9pbj1uLGUubmV4dF9vdXQ9cyxlLmF2YWlsX2luPW48aT9pLW4rNTo1LShuLWkpLGUuYXZhaWxfb3V0PXM8bz9vLXMrMjU3OjI1Ny0ocy1vKSxyLmhvbGQ9ZCxyLmJpdHM9cH19LHt9XSw0OTpbZnVuY3Rpb24oZSx0LHIpe1widXNlIHN0cmljdFwiO3ZhciBJPWUoXCIuLi91dGlscy9jb21tb25cIiksTz1lKFwiLi9hZGxlcjMyXCIpLEI9ZShcIi4vY3JjMzJcIiksUj1lKFwiLi9pbmZmYXN0XCIpLFQ9ZShcIi4vaW5mdHJlZXNcIiksRD0xLEY9MixOPTAsVT0tMixQPTEsbj04NTIsaT01OTI7ZnVuY3Rpb24gTChlKXtyZXR1cm4oZT4+PjI0JjI1NSkrKGU+Pj44JjY1MjgwKSsoKDY1MjgwJmUpPDw4KSsoKDI1NSZlKTw8MjQpfWZ1bmN0aW9uIHMoKXt0aGlzLm1vZGU9MCx0aGlzLmxhc3Q9ITEsdGhpcy53cmFwPTAsdGhpcy5oYXZlZGljdD0hMSx0aGlzLmZsYWdzPTAsdGhpcy5kbWF4PTAsdGhpcy5jaGVjaz0wLHRoaXMudG90YWw9MCx0aGlzLmhlYWQ9bnVsbCx0aGlzLndiaXRzPTAsdGhpcy53c2l6ZT0wLHRoaXMud2hhdmU9MCx0aGlzLnduZXh0PTAsdGhpcy53aW5kb3c9bnVsbCx0aGlzLmhvbGQ9MCx0aGlzLmJpdHM9MCx0aGlzLmxlbmd0aD0wLHRoaXMub2Zmc2V0PTAsdGhpcy5leHRyYT0wLHRoaXMubGVuY29kZT1udWxsLHRoaXMuZGlzdGNvZGU9bnVsbCx0aGlzLmxlbmJpdHM9MCx0aGlzLmRpc3RiaXRzPTAsdGhpcy5uY29kZT0wLHRoaXMubmxlbj0wLHRoaXMubmRpc3Q9MCx0aGlzLmhhdmU9MCx0aGlzLm5leHQ9bnVsbCx0aGlzLmxlbnM9bmV3IEkuQnVmMTYoMzIwKSx0aGlzLndvcms9bmV3IEkuQnVmMTYoMjg4KSx0aGlzLmxlbmR5bj1udWxsLHRoaXMuZGlzdGR5bj1udWxsLHRoaXMuc2FuZT0wLHRoaXMuYmFjaz0wLHRoaXMud2FzPTB9ZnVuY3Rpb24gYShlKXt2YXIgdDtyZXR1cm4gZSYmZS5zdGF0ZT8odD1lLnN0YXRlLGUudG90YWxfaW49ZS50b3RhbF9vdXQ9dC50b3RhbD0wLGUubXNnPVwiXCIsdC53cmFwJiYoZS5hZGxlcj0xJnQud3JhcCksdC5tb2RlPVAsdC5sYXN0PTAsdC5oYXZlZGljdD0wLHQuZG1heD0zMjc2OCx0LmhlYWQ9bnVsbCx0LmhvbGQ9MCx0LmJpdHM9MCx0LmxlbmNvZGU9dC5sZW5keW49bmV3IEkuQnVmMzIobiksdC5kaXN0Y29kZT10LmRpc3RkeW49bmV3IEkuQnVmMzIoaSksdC5zYW5lPTEsdC5iYWNrPS0xLE4pOlV9ZnVuY3Rpb24gbyhlKXt2YXIgdDtyZXR1cm4gZSYmZS5zdGF0ZT8oKHQ9ZS5zdGF0ZSkud3NpemU9MCx0LndoYXZlPTAsdC53bmV4dD0wLGEoZSkpOlV9ZnVuY3Rpb24gaChlLHQpe3ZhciByLG47cmV0dXJuIGUmJmUuc3RhdGU/KG49ZS5zdGF0ZSx0PDA/KHI9MCx0PS10KToocj0xKyh0Pj40KSx0PDQ4JiYodCY9MTUpKSx0JiYodDw4fHwxNTx0KT9VOihudWxsIT09bi53aW5kb3cmJm4ud2JpdHMhPT10JiYobi53aW5kb3c9bnVsbCksbi53cmFwPXIsbi53Yml0cz10LG8oZSkpKTpVfWZ1bmN0aW9uIHUoZSx0KXt2YXIgcixuO3JldHVybiBlPyhuPW5ldyBzLChlLnN0YXRlPW4pLndpbmRvdz1udWxsLChyPWgoZSx0KSkhPT1OJiYoZS5zdGF0ZT1udWxsKSxyKTpVfXZhciBsLGYsYz0hMDtmdW5jdGlvbiBqKGUpe2lmKGMpe3ZhciB0O2ZvcihsPW5ldyBJLkJ1ZjMyKDUxMiksZj1uZXcgSS5CdWYzMigzMiksdD0wO3Q8MTQ0OyllLmxlbnNbdCsrXT04O2Zvcig7dDwyNTY7KWUubGVuc1t0KytdPTk7Zm9yKDt0PDI4MDspZS5sZW5zW3QrK109Nztmb3IoO3Q8Mjg4OyllLmxlbnNbdCsrXT04O2ZvcihUKEQsZS5sZW5zLDAsMjg4LGwsMCxlLndvcmsse2JpdHM6OX0pLHQ9MDt0PDMyOyllLmxlbnNbdCsrXT01O1QoRixlLmxlbnMsMCwzMixmLDAsZS53b3JrLHtiaXRzOjV9KSxjPSExfWUubGVuY29kZT1sLGUubGVuYml0cz05LGUuZGlzdGNvZGU9ZixlLmRpc3RiaXRzPTV9ZnVuY3Rpb24gWihlLHQscixuKXt2YXIgaSxzPWUuc3RhdGU7cmV0dXJuIG51bGw9PT1zLndpbmRvdyYmKHMud3NpemU9MTw8cy53Yml0cyxzLnduZXh0PTAscy53aGF2ZT0wLHMud2luZG93PW5ldyBJLkJ1Zjgocy53c2l6ZSkpLG4+PXMud3NpemU/KEkuYXJyYXlTZXQocy53aW5kb3csdCxyLXMud3NpemUscy53c2l6ZSwwKSxzLnduZXh0PTAscy53aGF2ZT1zLndzaXplKToobjwoaT1zLndzaXplLXMud25leHQpJiYoaT1uKSxJLmFycmF5U2V0KHMud2luZG93LHQsci1uLGkscy53bmV4dCksKG4tPWkpPyhJLmFycmF5U2V0KHMud2luZG93LHQsci1uLG4sMCkscy53bmV4dD1uLHMud2hhdmU9cy53c2l6ZSk6KHMud25leHQrPWkscy53bmV4dD09PXMud3NpemUmJihzLnduZXh0PTApLHMud2hhdmU8cy53c2l6ZSYmKHMud2hhdmUrPWkpKSksMH1yLmluZmxhdGVSZXNldD1vLHIuaW5mbGF0ZVJlc2V0Mj1oLHIuaW5mbGF0ZVJlc2V0S2VlcD1hLHIuaW5mbGF0ZUluaXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHUoZSwxNSl9LHIuaW5mbGF0ZUluaXQyPXUsci5pbmZsYXRlPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbixpLHMsYSxvLGgsdSxsLGYsYyxkLHAsbSxfLGcsYix2LHksdyxrLHgsUyx6LEM9MCxFPW5ldyBJLkJ1ZjgoNCksQT1bMTYsMTcsMTgsMCw4LDcsOSw2LDEwLDUsMTEsNCwxMiwzLDEzLDIsMTQsMSwxNV07aWYoIWV8fCFlLnN0YXRlfHwhZS5vdXRwdXR8fCFlLmlucHV0JiYwIT09ZS5hdmFpbF9pbilyZXR1cm4gVTsxMj09PShyPWUuc3RhdGUpLm1vZGUmJihyLm1vZGU9MTMpLGE9ZS5uZXh0X291dCxpPWUub3V0cHV0LGg9ZS5hdmFpbF9vdXQscz1lLm5leHRfaW4sbj1lLmlucHV0LG89ZS5hdmFpbF9pbix1PXIuaG9sZCxsPXIuYml0cyxmPW8sYz1oLHg9TjtlOmZvcig7Oylzd2l0Y2goci5tb2RlKXtjYXNlIFA6aWYoMD09PXIud3JhcCl7ci5tb2RlPTEzO2JyZWFrfWZvcig7bDwxNjspe2lmKDA9PT1vKWJyZWFrIGU7by0tLHUrPW5bcysrXTw8bCxsKz04fWlmKDImci53cmFwJiYzNTYxNT09PXUpe0Vbci5jaGVjaz0wXT0yNTUmdSxFWzFdPXU+Pj44JjI1NSxyLmNoZWNrPUIoci5jaGVjayxFLDIsMCksbD11PTAsci5tb2RlPTI7YnJlYWt9aWYoci5mbGFncz0wLHIuaGVhZCYmKHIuaGVhZC5kb25lPSExKSwhKDEmci53cmFwKXx8KCgoMjU1JnUpPDw4KSsodT4+OCkpJTMxKXtlLm1zZz1cImluY29ycmVjdCBoZWFkZXIgY2hlY2tcIixyLm1vZGU9MzA7YnJlYWt9aWYoOCE9KDE1JnUpKXtlLm1zZz1cInVua25vd24gY29tcHJlc3Npb24gbWV0aG9kXCIsci5tb2RlPTMwO2JyZWFrfWlmKGwtPTQsaz04KygxNSYodT4+Pj00KSksMD09PXIud2JpdHMpci53Yml0cz1rO2Vsc2UgaWYoaz5yLndiaXRzKXtlLm1zZz1cImludmFsaWQgd2luZG93IHNpemVcIixyLm1vZGU9MzA7YnJlYWt9ci5kbWF4PTE8PGssZS5hZGxlcj1yLmNoZWNrPTEsci5tb2RlPTUxMiZ1PzEwOjEyLGw9dT0wO2JyZWFrO2Nhc2UgMjpmb3IoO2w8MTY7KXtpZigwPT09bylicmVhayBlO28tLSx1Kz1uW3MrK108PGwsbCs9OH1pZihyLmZsYWdzPXUsOCE9KDI1NSZyLmZsYWdzKSl7ZS5tc2c9XCJ1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZFwiLHIubW9kZT0zMDticmVha31pZig1NzM0NCZyLmZsYWdzKXtlLm1zZz1cInVua25vd24gaGVhZGVyIGZsYWdzIHNldFwiLHIubW9kZT0zMDticmVha31yLmhlYWQmJihyLmhlYWQudGV4dD11Pj44JjEpLDUxMiZyLmZsYWdzJiYoRVswXT0yNTUmdSxFWzFdPXU+Pj44JjI1NSxyLmNoZWNrPUIoci5jaGVjayxFLDIsMCkpLGw9dT0wLHIubW9kZT0zO2Nhc2UgMzpmb3IoO2w8MzI7KXtpZigwPT09bylicmVhayBlO28tLSx1Kz1uW3MrK108PGwsbCs9OH1yLmhlYWQmJihyLmhlYWQudGltZT11KSw1MTImci5mbGFncyYmKEVbMF09MjU1JnUsRVsxXT11Pj4+OCYyNTUsRVsyXT11Pj4+MTYmMjU1LEVbM109dT4+PjI0JjI1NSxyLmNoZWNrPUIoci5jaGVjayxFLDQsMCkpLGw9dT0wLHIubW9kZT00O2Nhc2UgNDpmb3IoO2w8MTY7KXtpZigwPT09bylicmVhayBlO28tLSx1Kz1uW3MrK108PGwsbCs9OH1yLmhlYWQmJihyLmhlYWQueGZsYWdzPTI1NSZ1LHIuaGVhZC5vcz11Pj44KSw1MTImci5mbGFncyYmKEVbMF09MjU1JnUsRVsxXT11Pj4+OCYyNTUsci5jaGVjaz1CKHIuY2hlY2ssRSwyLDApKSxsPXU9MCxyLm1vZGU9NTtjYXNlIDU6aWYoMTAyNCZyLmZsYWdzKXtmb3IoO2w8MTY7KXtpZigwPT09bylicmVhayBlO28tLSx1Kz1uW3MrK108PGwsbCs9OH1yLmxlbmd0aD11LHIuaGVhZCYmKHIuaGVhZC5leHRyYV9sZW49dSksNTEyJnIuZmxhZ3MmJihFWzBdPTI1NSZ1LEVbMV09dT4+PjgmMjU1LHIuY2hlY2s9QihyLmNoZWNrLEUsMiwwKSksbD11PTB9ZWxzZSByLmhlYWQmJihyLmhlYWQuZXh0cmE9bnVsbCk7ci5tb2RlPTY7Y2FzZSA2OmlmKDEwMjQmci5mbGFncyYmKG88KGQ9ci5sZW5ndGgpJiYoZD1vKSxkJiYoci5oZWFkJiYoaz1yLmhlYWQuZXh0cmFfbGVuLXIubGVuZ3RoLHIuaGVhZC5leHRyYXx8KHIuaGVhZC5leHRyYT1uZXcgQXJyYXkoci5oZWFkLmV4dHJhX2xlbikpLEkuYXJyYXlTZXQoci5oZWFkLmV4dHJhLG4scyxkLGspKSw1MTImci5mbGFncyYmKHIuY2hlY2s9QihyLmNoZWNrLG4sZCxzKSksby09ZCxzKz1kLHIubGVuZ3RoLT1kKSxyLmxlbmd0aCkpYnJlYWsgZTtyLmxlbmd0aD0wLHIubW9kZT03O2Nhc2UgNzppZigyMDQ4JnIuZmxhZ3Mpe2lmKDA9PT1vKWJyZWFrIGU7Zm9yKGQ9MDtrPW5bcytkKytdLHIuaGVhZCYmayYmci5sZW5ndGg8NjU1MzYmJihyLmhlYWQubmFtZSs9U3RyaW5nLmZyb21DaGFyQ29kZShrKSksayYmZDxvOyk7aWYoNTEyJnIuZmxhZ3MmJihyLmNoZWNrPUIoci5jaGVjayxuLGQscykpLG8tPWQscys9ZCxrKWJyZWFrIGV9ZWxzZSByLmhlYWQmJihyLmhlYWQubmFtZT1udWxsKTtyLmxlbmd0aD0wLHIubW9kZT04O2Nhc2UgODppZig0MDk2JnIuZmxhZ3Mpe2lmKDA9PT1vKWJyZWFrIGU7Zm9yKGQ9MDtrPW5bcytkKytdLHIuaGVhZCYmayYmci5sZW5ndGg8NjU1MzYmJihyLmhlYWQuY29tbWVudCs9U3RyaW5nLmZyb21DaGFyQ29kZShrKSksayYmZDxvOyk7aWYoNTEyJnIuZmxhZ3MmJihyLmNoZWNrPUIoci5jaGVjayxuLGQscykpLG8tPWQscys9ZCxrKWJyZWFrIGV9ZWxzZSByLmhlYWQmJihyLmhlYWQuY29tbWVudD1udWxsKTtyLm1vZGU9OTtjYXNlIDk6aWYoNTEyJnIuZmxhZ3Mpe2Zvcig7bDwxNjspe2lmKDA9PT1vKWJyZWFrIGU7by0tLHUrPW5bcysrXTw8bCxsKz04fWlmKHUhPT0oNjU1MzUmci5jaGVjaykpe2UubXNnPVwiaGVhZGVyIGNyYyBtaXNtYXRjaFwiLHIubW9kZT0zMDticmVha31sPXU9MH1yLmhlYWQmJihyLmhlYWQuaGNyYz1yLmZsYWdzPj45JjEsci5oZWFkLmRvbmU9ITApLGUuYWRsZXI9ci5jaGVjaz0wLHIubW9kZT0xMjticmVhaztjYXNlIDEwOmZvcig7bDwzMjspe2lmKDA9PT1vKWJyZWFrIGU7by0tLHUrPW5bcysrXTw8bCxsKz04fWUuYWRsZXI9ci5jaGVjaz1MKHUpLGw9dT0wLHIubW9kZT0xMTtjYXNlIDExOmlmKDA9PT1yLmhhdmVkaWN0KXJldHVybiBlLm5leHRfb3V0PWEsZS5hdmFpbF9vdXQ9aCxlLm5leHRfaW49cyxlLmF2YWlsX2luPW8sci5ob2xkPXUsci5iaXRzPWwsMjtlLmFkbGVyPXIuY2hlY2s9MSxyLm1vZGU9MTI7Y2FzZSAxMjppZig1PT09dHx8Nj09PXQpYnJlYWsgZTtjYXNlIDEzOmlmKHIubGFzdCl7dT4+Pj03JmwsbC09NyZsLHIubW9kZT0yNzticmVha31mb3IoO2w8Mzspe2lmKDA9PT1vKWJyZWFrIGU7by0tLHUrPW5bcysrXTw8bCxsKz04fXN3aXRjaChyLmxhc3Q9MSZ1LGwtPTEsMyYodT4+Pj0xKSl7Y2FzZSAwOnIubW9kZT0xNDticmVhaztjYXNlIDE6aWYoaihyKSxyLm1vZGU9MjAsNiE9PXQpYnJlYWs7dT4+Pj0yLGwtPTI7YnJlYWsgZTtjYXNlIDI6ci5tb2RlPTE3O2JyZWFrO2Nhc2UgMzplLm1zZz1cImludmFsaWQgYmxvY2sgdHlwZVwiLHIubW9kZT0zMH11Pj4+PTIsbC09MjticmVhaztjYXNlIDE0OmZvcih1Pj4+PTcmbCxsLT03Jmw7bDwzMjspe2lmKDA9PT1vKWJyZWFrIGU7by0tLHUrPW5bcysrXTw8bCxsKz04fWlmKCg2NTUzNSZ1KSE9KHU+Pj4xNl42NTUzNSkpe2UubXNnPVwiaW52YWxpZCBzdG9yZWQgYmxvY2sgbGVuZ3Roc1wiLHIubW9kZT0zMDticmVha31pZihyLmxlbmd0aD02NTUzNSZ1LGw9dT0wLHIubW9kZT0xNSw2PT09dClicmVhayBlO2Nhc2UgMTU6ci5tb2RlPTE2O2Nhc2UgMTY6aWYoZD1yLmxlbmd0aCl7aWYobzxkJiYoZD1vKSxoPGQmJihkPWgpLDA9PT1kKWJyZWFrIGU7SS5hcnJheVNldChpLG4scyxkLGEpLG8tPWQscys9ZCxoLT1kLGErPWQsci5sZW5ndGgtPWQ7YnJlYWt9ci5tb2RlPTEyO2JyZWFrO2Nhc2UgMTc6Zm9yKDtsPDE0Oyl7aWYoMD09PW8pYnJlYWsgZTtvLS0sdSs9bltzKytdPDxsLGwrPTh9aWYoci5ubGVuPTI1NysoMzEmdSksdT4+Pj01LGwtPTUsci5uZGlzdD0xKygzMSZ1KSx1Pj4+PTUsbC09NSxyLm5jb2RlPTQrKDE1JnUpLHU+Pj49NCxsLT00LDI4NjxyLm5sZW58fDMwPHIubmRpc3Qpe2UubXNnPVwidG9vIG1hbnkgbGVuZ3RoIG9yIGRpc3RhbmNlIHN5bWJvbHNcIixyLm1vZGU9MzA7YnJlYWt9ci5oYXZlPTAsci5tb2RlPTE4O2Nhc2UgMTg6Zm9yKDtyLmhhdmU8ci5uY29kZTspe2Zvcig7bDwzOyl7aWYoMD09PW8pYnJlYWsgZTtvLS0sdSs9bltzKytdPDxsLGwrPTh9ci5sZW5zW0Fbci5oYXZlKytdXT03JnUsdT4+Pj0zLGwtPTN9Zm9yKDtyLmhhdmU8MTk7KXIubGVuc1tBW3IuaGF2ZSsrXV09MDtpZihyLmxlbmNvZGU9ci5sZW5keW4sci5sZW5iaXRzPTcsUz17Yml0czpyLmxlbmJpdHN9LHg9VCgwLHIubGVucywwLDE5LHIubGVuY29kZSwwLHIud29yayxTKSxyLmxlbmJpdHM9Uy5iaXRzLHgpe2UubXNnPVwiaW52YWxpZCBjb2RlIGxlbmd0aHMgc2V0XCIsci5tb2RlPTMwO2JyZWFrfXIuaGF2ZT0wLHIubW9kZT0xOTtjYXNlIDE5OmZvcig7ci5oYXZlPHIubmxlbityLm5kaXN0Oyl7Zm9yKDtnPShDPXIubGVuY29kZVt1JigxPDxyLmxlbmJpdHMpLTFdKT4+PjE2JjI1NSxiPTY1NTM1JkMsISgoXz1DPj4+MjQpPD1sKTspe2lmKDA9PT1vKWJyZWFrIGU7by0tLHUrPW5bcysrXTw8bCxsKz04fWlmKGI8MTYpdT4+Pj1fLGwtPV8sci5sZW5zW3IuaGF2ZSsrXT1iO2Vsc2V7aWYoMTY9PT1iKXtmb3Ioej1fKzI7bDx6Oyl7aWYoMD09PW8pYnJlYWsgZTtvLS0sdSs9bltzKytdPDxsLGwrPTh9aWYodT4+Pj1fLGwtPV8sMD09PXIuaGF2ZSl7ZS5tc2c9XCJpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0XCIsci5tb2RlPTMwO2JyZWFrfWs9ci5sZW5zW3IuaGF2ZS0xXSxkPTMrKDMmdSksdT4+Pj0yLGwtPTJ9ZWxzZSBpZigxNz09PWIpe2Zvcih6PV8rMztsPHo7KXtpZigwPT09bylicmVhayBlO28tLSx1Kz1uW3MrK108PGwsbCs9OH1sLT1fLGs9MCxkPTMrKDcmKHU+Pj49XykpLHU+Pj49MyxsLT0zfWVsc2V7Zm9yKHo9Xys3O2w8ejspe2lmKDA9PT1vKWJyZWFrIGU7by0tLHUrPW5bcysrXTw8bCxsKz04fWwtPV8saz0wLGQ9MTErKDEyNyYodT4+Pj1fKSksdT4+Pj03LGwtPTd9aWYoci5oYXZlK2Q+ci5ubGVuK3IubmRpc3Qpe2UubXNnPVwiaW52YWxpZCBiaXQgbGVuZ3RoIHJlcGVhdFwiLHIubW9kZT0zMDticmVha31mb3IoO2QtLTspci5sZW5zW3IuaGF2ZSsrXT1rfX1pZigzMD09PXIubW9kZSlicmVhaztpZigwPT09ci5sZW5zWzI1Nl0pe2UubXNnPVwiaW52YWxpZCBjb2RlIC0tIG1pc3NpbmcgZW5kLW9mLWJsb2NrXCIsci5tb2RlPTMwO2JyZWFrfWlmKHIubGVuYml0cz05LFM9e2JpdHM6ci5sZW5iaXRzfSx4PVQoRCxyLmxlbnMsMCxyLm5sZW4sci5sZW5jb2RlLDAsci53b3JrLFMpLHIubGVuYml0cz1TLmJpdHMseCl7ZS5tc2c9XCJpbnZhbGlkIGxpdGVyYWwvbGVuZ3RocyBzZXRcIixyLm1vZGU9MzA7YnJlYWt9aWYoci5kaXN0Yml0cz02LHIuZGlzdGNvZGU9ci5kaXN0ZHluLFM9e2JpdHM6ci5kaXN0Yml0c30seD1UKEYsci5sZW5zLHIubmxlbixyLm5kaXN0LHIuZGlzdGNvZGUsMCxyLndvcmssUyksci5kaXN0Yml0cz1TLmJpdHMseCl7ZS5tc2c9XCJpbnZhbGlkIGRpc3RhbmNlcyBzZXRcIixyLm1vZGU9MzA7YnJlYWt9aWYoci5tb2RlPTIwLDY9PT10KWJyZWFrIGU7Y2FzZSAyMDpyLm1vZGU9MjE7Y2FzZSAyMTppZig2PD1vJiYyNTg8PWgpe2UubmV4dF9vdXQ9YSxlLmF2YWlsX291dD1oLGUubmV4dF9pbj1zLGUuYXZhaWxfaW49byxyLmhvbGQ9dSxyLmJpdHM9bCxSKGUsYyksYT1lLm5leHRfb3V0LGk9ZS5vdXRwdXQsaD1lLmF2YWlsX291dCxzPWUubmV4dF9pbixuPWUuaW5wdXQsbz1lLmF2YWlsX2luLHU9ci5ob2xkLGw9ci5iaXRzLDEyPT09ci5tb2RlJiYoci5iYWNrPS0xKTticmVha31mb3Ioci5iYWNrPTA7Zz0oQz1yLmxlbmNvZGVbdSYoMTw8ci5sZW5iaXRzKS0xXSk+Pj4xNiYyNTUsYj02NTUzNSZDLCEoKF89Qz4+PjI0KTw9bCk7KXtpZigwPT09bylicmVhayBlO28tLSx1Kz1uW3MrK108PGwsbCs9OH1pZihnJiYwPT0oMjQwJmcpKXtmb3Iodj1fLHk9Zyx3PWI7Zz0oQz1yLmxlbmNvZGVbdysoKHUmKDE8PHYreSktMSk+PnYpXSk+Pj4xNiYyNTUsYj02NTUzNSZDLCEodisoXz1DPj4+MjQpPD1sKTspe2lmKDA9PT1vKWJyZWFrIGU7by0tLHUrPW5bcysrXTw8bCxsKz04fXU+Pj49dixsLT12LHIuYmFjays9dn1pZih1Pj4+PV8sbC09XyxyLmJhY2srPV8sci5sZW5ndGg9YiwwPT09Zyl7ci5tb2RlPTI2O2JyZWFrfWlmKDMyJmcpe3IuYmFjaz0tMSxyLm1vZGU9MTI7YnJlYWt9aWYoNjQmZyl7ZS5tc2c9XCJpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGVcIixyLm1vZGU9MzA7YnJlYWt9ci5leHRyYT0xNSZnLHIubW9kZT0yMjtjYXNlIDIyOmlmKHIuZXh0cmEpe2Zvcih6PXIuZXh0cmE7bDx6Oyl7aWYoMD09PW8pYnJlYWsgZTtvLS0sdSs9bltzKytdPDxsLGwrPTh9ci5sZW5ndGgrPXUmKDE8PHIuZXh0cmEpLTEsdT4+Pj1yLmV4dHJhLGwtPXIuZXh0cmEsci5iYWNrKz1yLmV4dHJhfXIud2FzPXIubGVuZ3RoLHIubW9kZT0yMztjYXNlIDIzOmZvcig7Zz0oQz1yLmRpc3Rjb2RlW3UmKDE8PHIuZGlzdGJpdHMpLTFdKT4+PjE2JjI1NSxiPTY1NTM1JkMsISgoXz1DPj4+MjQpPD1sKTspe2lmKDA9PT1vKWJyZWFrIGU7by0tLHUrPW5bcysrXTw8bCxsKz04fWlmKDA9PSgyNDAmZykpe2Zvcih2PV8seT1nLHc9YjtnPShDPXIuZGlzdGNvZGVbdysoKHUmKDE8PHYreSktMSk+PnYpXSk+Pj4xNiYyNTUsYj02NTUzNSZDLCEodisoXz1DPj4+MjQpPD1sKTspe2lmKDA9PT1vKWJyZWFrIGU7by0tLHUrPW5bcysrXTw8bCxsKz04fXU+Pj49dixsLT12LHIuYmFjays9dn1pZih1Pj4+PV8sbC09XyxyLmJhY2srPV8sNjQmZyl7ZS5tc2c9XCJpbnZhbGlkIGRpc3RhbmNlIGNvZGVcIixyLm1vZGU9MzA7YnJlYWt9ci5vZmZzZXQ9YixyLmV4dHJhPTE1Jmcsci5tb2RlPTI0O2Nhc2UgMjQ6aWYoci5leHRyYSl7Zm9yKHo9ci5leHRyYTtsPHo7KXtpZigwPT09bylicmVhayBlO28tLSx1Kz1uW3MrK108PGwsbCs9OH1yLm9mZnNldCs9dSYoMTw8ci5leHRyYSktMSx1Pj4+PXIuZXh0cmEsbC09ci5leHRyYSxyLmJhY2srPXIuZXh0cmF9aWYoci5vZmZzZXQ+ci5kbWF4KXtlLm1zZz1cImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrXCIsci5tb2RlPTMwO2JyZWFrfXIubW9kZT0yNTtjYXNlIDI1OmlmKDA9PT1oKWJyZWFrIGU7aWYoZD1jLWgsci5vZmZzZXQ+ZCl7aWYoKGQ9ci5vZmZzZXQtZCk+ci53aGF2ZSYmci5zYW5lKXtlLm1zZz1cImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrXCIsci5tb2RlPTMwO2JyZWFrfXA9ZD5yLnduZXh0PyhkLT1yLnduZXh0LHIud3NpemUtZCk6ci53bmV4dC1kLGQ+ci5sZW5ndGgmJihkPXIubGVuZ3RoKSxtPXIud2luZG93fWVsc2UgbT1pLHA9YS1yLm9mZnNldCxkPXIubGVuZ3RoO2ZvcihoPGQmJihkPWgpLGgtPWQsci5sZW5ndGgtPWQ7aVthKytdPW1bcCsrXSwtLWQ7KTswPT09ci5sZW5ndGgmJihyLm1vZGU9MjEpO2JyZWFrO2Nhc2UgMjY6aWYoMD09PWgpYnJlYWsgZTtpW2ErK109ci5sZW5ndGgsaC0tLHIubW9kZT0yMTticmVhaztjYXNlIDI3OmlmKHIud3JhcCl7Zm9yKDtsPDMyOyl7aWYoMD09PW8pYnJlYWsgZTtvLS0sdXw9bltzKytdPDxsLGwrPTh9aWYoYy09aCxlLnRvdGFsX291dCs9YyxyLnRvdGFsKz1jLGMmJihlLmFkbGVyPXIuY2hlY2s9ci5mbGFncz9CKHIuY2hlY2ssaSxjLGEtYyk6TyhyLmNoZWNrLGksYyxhLWMpKSxjPWgsKHIuZmxhZ3M/dTpMKHUpKSE9PXIuY2hlY2spe2UubXNnPVwiaW5jb3JyZWN0IGRhdGEgY2hlY2tcIixyLm1vZGU9MzA7YnJlYWt9bD11PTB9ci5tb2RlPTI4O2Nhc2UgMjg6aWYoci53cmFwJiZyLmZsYWdzKXtmb3IoO2w8MzI7KXtpZigwPT09bylicmVhayBlO28tLSx1Kz1uW3MrK108PGwsbCs9OH1pZih1IT09KDQyOTQ5NjcyOTUmci50b3RhbCkpe2UubXNnPVwiaW5jb3JyZWN0IGxlbmd0aCBjaGVja1wiLHIubW9kZT0zMDticmVha31sPXU9MH1yLm1vZGU9Mjk7Y2FzZSAyOTp4PTE7YnJlYWsgZTtjYXNlIDMwOng9LTM7YnJlYWsgZTtjYXNlIDMxOnJldHVybi00O2Nhc2UgMzI6ZGVmYXVsdDpyZXR1cm4gVX1yZXR1cm4gZS5uZXh0X291dD1hLGUuYXZhaWxfb3V0PWgsZS5uZXh0X2luPXMsZS5hdmFpbF9pbj1vLHIuaG9sZD11LHIuYml0cz1sLChyLndzaXplfHxjIT09ZS5hdmFpbF9vdXQmJnIubW9kZTwzMCYmKHIubW9kZTwyN3x8NCE9PXQpKSYmWihlLGUub3V0cHV0LGUubmV4dF9vdXQsYy1lLmF2YWlsX291dCk/KHIubW9kZT0zMSwtNCk6KGYtPWUuYXZhaWxfaW4sYy09ZS5hdmFpbF9vdXQsZS50b3RhbF9pbis9ZixlLnRvdGFsX291dCs9YyxyLnRvdGFsKz1jLHIud3JhcCYmYyYmKGUuYWRsZXI9ci5jaGVjaz1yLmZsYWdzP0Ioci5jaGVjayxpLGMsZS5uZXh0X291dC1jKTpPKHIuY2hlY2ssaSxjLGUubmV4dF9vdXQtYykpLGUuZGF0YV90eXBlPXIuYml0cysoci5sYXN0PzY0OjApKygxMj09PXIubW9kZT8xMjg6MCkrKDIwPT09ci5tb2RlfHwxNT09PXIubW9kZT8yNTY6MCksKDA9PWYmJjA9PT1jfHw0PT09dCkmJng9PT1OJiYoeD0tNSkseCl9LHIuaW5mbGF0ZUVuZD1mdW5jdGlvbihlKXtpZighZXx8IWUuc3RhdGUpcmV0dXJuIFU7dmFyIHQ9ZS5zdGF0ZTtyZXR1cm4gdC53aW5kb3cmJih0LndpbmRvdz1udWxsKSxlLnN0YXRlPW51bGwsTn0sci5pbmZsYXRlR2V0SGVhZGVyPWZ1bmN0aW9uKGUsdCl7dmFyIHI7cmV0dXJuIGUmJmUuc3RhdGU/MD09KDImKHI9ZS5zdGF0ZSkud3JhcCk/VTooKHIuaGVhZD10KS5kb25lPSExLE4pOlV9LHIuaW5mbGF0ZVNldERpY3Rpb25hcnk9ZnVuY3Rpb24oZSx0KXt2YXIgcixuPXQubGVuZ3RoO3JldHVybiBlJiZlLnN0YXRlPzAhPT0ocj1lLnN0YXRlKS53cmFwJiYxMSE9PXIubW9kZT9VOjExPT09ci5tb2RlJiZPKDEsdCxuLDApIT09ci5jaGVjaz8tMzpaKGUsdCxuLG4pPyhyLm1vZGU9MzEsLTQpOihyLmhhdmVkaWN0PTEsTik6VX0sci5pbmZsYXRlSW5mbz1cInBha28gaW5mbGF0ZSAoZnJvbSBOb2RlY2EgcHJvamVjdClcIn0se1wiLi4vdXRpbHMvY29tbW9uXCI6NDEsXCIuL2FkbGVyMzJcIjo0MyxcIi4vY3JjMzJcIjo0NSxcIi4vaW5mZmFzdFwiOjQ4LFwiLi9pbmZ0cmVlc1wiOjUwfV0sNTA6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt2YXIgRD1lKFwiLi4vdXRpbHMvY29tbW9uXCIpLEY9WzMsNCw1LDYsNyw4LDksMTAsMTEsMTMsMTUsMTcsMTksMjMsMjcsMzEsMzUsNDMsNTEsNTksNjcsODMsOTksMTE1LDEzMSwxNjMsMTk1LDIyNywyNTgsMCwwXSxOPVsxNiwxNiwxNiwxNiwxNiwxNiwxNiwxNiwxNywxNywxNywxNywxOCwxOCwxOCwxOCwxOSwxOSwxOSwxOSwyMCwyMCwyMCwyMCwyMSwyMSwyMSwyMSwxNiw3Miw3OF0sVT1bMSwyLDMsNCw1LDcsOSwxMywxNywyNSwzMyw0OSw2NSw5NywxMjksMTkzLDI1NywzODUsNTEzLDc2OSwxMDI1LDE1MzcsMjA0OSwzMDczLDQwOTcsNjE0NSw4MTkzLDEyMjg5LDE2Mzg1LDI0NTc3LDAsMF0sUD1bMTYsMTYsMTYsMTYsMTcsMTcsMTgsMTgsMTksMTksMjAsMjAsMjEsMjEsMjIsMjIsMjMsMjMsMjQsMjQsMjUsMjUsMjYsMjYsMjcsMjcsMjgsMjgsMjksMjksNjQsNjRdO3QuZXhwb3J0cz1mdW5jdGlvbihlLHQscixuLGkscyxhLG8pe3ZhciBoLHUsbCxmLGMsZCxwLG0sXyxnPW8uYml0cyxiPTAsdj0wLHk9MCx3PTAsaz0wLHg9MCxTPTAsej0wLEM9MCxFPTAsQT1udWxsLEk9MCxPPW5ldyBELkJ1ZjE2KDE2KSxCPW5ldyBELkJ1ZjE2KDE2KSxSPW51bGwsVD0wO2ZvcihiPTA7Yjw9MTU7YisrKU9bYl09MDtmb3Iodj0wO3Y8bjt2KyspT1t0W3Irdl1dKys7Zm9yKGs9Zyx3PTE1OzE8PXcmJjA9PT1PW3ddO3ctLSk7aWYodzxrJiYoaz13KSwwPT09dylyZXR1cm4gaVtzKytdPTIwOTcxNTIwLGlbcysrXT0yMDk3MTUyMCxvLmJpdHM9MSwwO2Zvcih5PTE7eTx3JiYwPT09T1t5XTt5KyspO2ZvcihrPHkmJihrPXkpLGI9ej0xO2I8PTE1O2IrKylpZih6PDw9MSwoei09T1tiXSk8MClyZXR1cm4tMTtpZigwPHomJigwPT09ZXx8MSE9PXcpKXJldHVybi0xO2ZvcihCWzFdPTAsYj0xO2I8MTU7YisrKUJbYisxXT1CW2JdK09bYl07Zm9yKHY9MDt2PG47disrKTAhPT10W3Irdl0mJihhW0JbdFtyK3ZdXSsrXT12KTtpZihkPTA9PT1lPyhBPVI9YSwxOSk6MT09PWU/KEE9RixJLT0yNTcsUj1OLFQtPTI1NywyNTYpOihBPVUsUj1QLC0xKSxiPXksYz1zLFM9dj1FPTAsbD0tMSxmPShDPTE8PCh4PWspKS0xLDE9PT1lJiY4NTI8Q3x8Mj09PWUmJjU5MjxDKXJldHVybiAxO2Zvcig7Oyl7Zm9yKHA9Yi1TLF89YVt2XTxkPyhtPTAsYVt2XSk6YVt2XT5kPyhtPVJbVCthW3ZdXSxBW0krYVt2XV0pOihtPTk2LDApLGg9MTw8Yi1TLHk9dT0xPDx4O2lbYysoRT4+UykrKHUtPWgpXT1wPDwyNHxtPDwxNnxffDAsMCE9PXU7KTtmb3IoaD0xPDxiLTE7RSZoOyloPj49MTtpZigwIT09aD8oRSY9aC0xLEUrPWgpOkU9MCx2KyssMD09LS1PW2JdKXtpZihiPT09dylicmVhaztiPXRbcithW3ZdXX1pZihrPGImJihFJmYpIT09bCl7Zm9yKDA9PT1TJiYoUz1rKSxjKz15LHo9MTw8KHg9Yi1TKTt4K1M8dyYmISgoei09T1t4K1NdKTw9MCk7KXgrKyx6PDw9MTtpZihDKz0xPDx4LDE9PT1lJiY4NTI8Q3x8Mj09PWUmJjU5MjxDKXJldHVybiAxO2lbbD1FJmZdPWs8PDI0fHg8PDE2fGMtc3wwfX1yZXR1cm4gMCE9PUUmJihpW2MrRV09Yi1TPDwyNHw2NDw8MTZ8MCksby5iaXRzPWssMH19LHtcIi4uL3V0aWxzL2NvbW1vblwiOjQxfV0sNTE6W2Z1bmN0aW9uKGUsdCxyKXtcInVzZSBzdHJpY3RcIjt0LmV4cG9ydHM9ezI6XCJuZWVkIGRpY3Rpb25hcnlcIiwxOlwic3RyZWFtIGVuZFwiLDA6XCJcIixcIi0xXCI6XCJmaWxlIGVycm9yXCIsXCItMlwiOlwic3RyZWFtIGVycm9yXCIsXCItM1wiOlwiZGF0YSBlcnJvclwiLFwiLTRcIjpcImluc3VmZmljaWVudCBtZW1vcnlcIixcIi01XCI6XCJidWZmZXIgZXJyb3JcIixcIi02XCI6XCJpbmNvbXBhdGlibGUgdmVyc2lvblwifX0se31dLDUyOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIGk9ZShcIi4uL3V0aWxzL2NvbW1vblwiKSxvPTAsaD0xO2Z1bmN0aW9uIG4oZSl7Zm9yKHZhciB0PWUubGVuZ3RoOzA8PS0tdDspZVt0XT0wfXZhciBzPTAsYT0yOSx1PTI1NixsPXUrMSthLGY9MzAsYz0xOSxfPTIqbCsxLGc9MTUsZD0xNixwPTcsbT0yNTYsYj0xNix2PTE3LHk9MTgsdz1bMCwwLDAsMCwwLDAsMCwwLDEsMSwxLDEsMiwyLDIsMiwzLDMsMywzLDQsNCw0LDQsNSw1LDUsNSwwXSxrPVswLDAsMCwwLDEsMSwyLDIsMywzLDQsNCw1LDUsNiw2LDcsNyw4LDgsOSw5LDEwLDEwLDExLDExLDEyLDEyLDEzLDEzXSx4PVswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMyw3XSxTPVsxNiwxNywxOCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1XSx6PW5ldyBBcnJheSgyKihsKzIpKTtuKHopO3ZhciBDPW5ldyBBcnJheSgyKmYpO24oQyk7dmFyIEU9bmV3IEFycmF5KDUxMik7bihFKTt2YXIgQT1uZXcgQXJyYXkoMjU2KTtuKEEpO3ZhciBJPW5ldyBBcnJheShhKTtuKEkpO3ZhciBPLEIsUixUPW5ldyBBcnJheShmKTtmdW5jdGlvbiBEKGUsdCxyLG4saSl7dGhpcy5zdGF0aWNfdHJlZT1lLHRoaXMuZXh0cmFfYml0cz10LHRoaXMuZXh0cmFfYmFzZT1yLHRoaXMuZWxlbXM9bix0aGlzLm1heF9sZW5ndGg9aSx0aGlzLmhhc19zdHJlZT1lJiZlLmxlbmd0aH1mdW5jdGlvbiBGKGUsdCl7dGhpcy5keW5fdHJlZT1lLHRoaXMubWF4X2NvZGU9MCx0aGlzLnN0YXRfZGVzYz10fWZ1bmN0aW9uIE4oZSl7cmV0dXJuIGU8MjU2P0VbZV06RVsyNTYrKGU+Pj43KV19ZnVuY3Rpb24gVShlLHQpe2UucGVuZGluZ19idWZbZS5wZW5kaW5nKytdPTI1NSZ0LGUucGVuZGluZ19idWZbZS5wZW5kaW5nKytdPXQ+Pj44JjI1NX1mdW5jdGlvbiBQKGUsdCxyKXtlLmJpX3ZhbGlkPmQtcj8oZS5iaV9idWZ8PXQ8PGUuYmlfdmFsaWQmNjU1MzUsVShlLGUuYmlfYnVmKSxlLmJpX2J1Zj10Pj5kLWUuYmlfdmFsaWQsZS5iaV92YWxpZCs9ci1kKTooZS5iaV9idWZ8PXQ8PGUuYmlfdmFsaWQmNjU1MzUsZS5iaV92YWxpZCs9cil9ZnVuY3Rpb24gTChlLHQscil7UChlLHJbMip0XSxyWzIqdCsxXSl9ZnVuY3Rpb24gaihlLHQpe2Zvcih2YXIgcj0wO3J8PTEmZSxlPj4+PTEscjw8PTEsMDwtLXQ7KTtyZXR1cm4gcj4+PjF9ZnVuY3Rpb24gWihlLHQscil7dmFyIG4saSxzPW5ldyBBcnJheShnKzEpLGE9MDtmb3Iobj0xO248PWc7bisrKXNbbl09YT1hK3Jbbi0xXTw8MTtmb3IoaT0wO2k8PXQ7aSsrKXt2YXIgbz1lWzIqaSsxXTswIT09byYmKGVbMippXT1qKHNbb10rKyxvKSl9fWZ1bmN0aW9uIFcoZSl7dmFyIHQ7Zm9yKHQ9MDt0PGw7dCsrKWUuZHluX2x0cmVlWzIqdF09MDtmb3IodD0wO3Q8Zjt0KyspZS5keW5fZHRyZWVbMip0XT0wO2Zvcih0PTA7dDxjO3QrKyllLmJsX3RyZWVbMip0XT0wO2UuZHluX2x0cmVlWzIqbV09MSxlLm9wdF9sZW49ZS5zdGF0aWNfbGVuPTAsZS5sYXN0X2xpdD1lLm1hdGNoZXM9MH1mdW5jdGlvbiBNKGUpezg8ZS5iaV92YWxpZD9VKGUsZS5iaV9idWYpOjA8ZS5iaV92YWxpZCYmKGUucGVuZGluZ19idWZbZS5wZW5kaW5nKytdPWUuYmlfYnVmKSxlLmJpX2J1Zj0wLGUuYmlfdmFsaWQ9MH1mdW5jdGlvbiBIKGUsdCxyLG4pe3ZhciBpPTIqdCxzPTIqcjtyZXR1cm4gZVtpXTxlW3NdfHxlW2ldPT09ZVtzXSYmblt0XTw9bltyXX1mdW5jdGlvbiBHKGUsdCxyKXtmb3IodmFyIG49ZS5oZWFwW3JdLGk9cjw8MTtpPD1lLmhlYXBfbGVuJiYoaTxlLmhlYXBfbGVuJiZIKHQsZS5oZWFwW2krMV0sZS5oZWFwW2ldLGUuZGVwdGgpJiZpKyssIUgodCxuLGUuaGVhcFtpXSxlLmRlcHRoKSk7KWUuaGVhcFtyXT1lLmhlYXBbaV0scj1pLGk8PD0xO2UuaGVhcFtyXT1ufWZ1bmN0aW9uIEsoZSx0LHIpe3ZhciBuLGkscyxhLG89MDtpZigwIT09ZS5sYXN0X2xpdClmb3IoO249ZS5wZW5kaW5nX2J1ZltlLmRfYnVmKzIqb108PDh8ZS5wZW5kaW5nX2J1ZltlLmRfYnVmKzIqbysxXSxpPWUucGVuZGluZ19idWZbZS5sX2J1ZitvXSxvKyssMD09PW4/TChlLGksdCk6KEwoZSwocz1BW2ldKSt1KzEsdCksMCE9PShhPXdbc10pJiZQKGUsaS09SVtzXSxhKSxMKGUscz1OKC0tbiksciksMCE9PShhPWtbc10pJiZQKGUsbi09VFtzXSxhKSksbzxlLmxhc3RfbGl0Oyk7TChlLG0sdCl9ZnVuY3Rpb24gWShlLHQpe3ZhciByLG4saSxzPXQuZHluX3RyZWUsYT10LnN0YXRfZGVzYy5zdGF0aWNfdHJlZSxvPXQuc3RhdF9kZXNjLmhhc19zdHJlZSxoPXQuc3RhdF9kZXNjLmVsZW1zLHU9LTE7Zm9yKGUuaGVhcF9sZW49MCxlLmhlYXBfbWF4PV8scj0wO3I8aDtyKyspMCE9PXNbMipyXT8oZS5oZWFwWysrZS5oZWFwX2xlbl09dT1yLGUuZGVwdGhbcl09MCk6c1syKnIrMV09MDtmb3IoO2UuaGVhcF9sZW48Mjspc1syKihpPWUuaGVhcFsrK2UuaGVhcF9sZW5dPXU8Mj8rK3U6MCldPTEsZS5kZXB0aFtpXT0wLGUub3B0X2xlbi0tLG8mJihlLnN0YXRpY19sZW4tPWFbMippKzFdKTtmb3IodC5tYXhfY29kZT11LHI9ZS5oZWFwX2xlbj4+MTsxPD1yO3ItLSlHKGUscyxyKTtmb3IoaT1oO3I9ZS5oZWFwWzFdLGUuaGVhcFsxXT1lLmhlYXBbZS5oZWFwX2xlbi0tXSxHKGUscywxKSxuPWUuaGVhcFsxXSxlLmhlYXBbLS1lLmhlYXBfbWF4XT1yLGUuaGVhcFstLWUuaGVhcF9tYXhdPW4sc1syKmldPXNbMipyXStzWzIqbl0sZS5kZXB0aFtpXT0oZS5kZXB0aFtyXT49ZS5kZXB0aFtuXT9lLmRlcHRoW3JdOmUuZGVwdGhbbl0pKzEsc1syKnIrMV09c1syKm4rMV09aSxlLmhlYXBbMV09aSsrLEcoZSxzLDEpLDI8PWUuaGVhcF9sZW47KTtlLmhlYXBbLS1lLmhlYXBfbWF4XT1lLmhlYXBbMV0sZnVuY3Rpb24oZSx0KXt2YXIgcixuLGkscyxhLG8saD10LmR5bl90cmVlLHU9dC5tYXhfY29kZSxsPXQuc3RhdF9kZXNjLnN0YXRpY190cmVlLGY9dC5zdGF0X2Rlc2MuaGFzX3N0cmVlLGM9dC5zdGF0X2Rlc2MuZXh0cmFfYml0cyxkPXQuc3RhdF9kZXNjLmV4dHJhX2Jhc2UscD10LnN0YXRfZGVzYy5tYXhfbGVuZ3RoLG09MDtmb3Iocz0wO3M8PWc7cysrKWUuYmxfY291bnRbc109MDtmb3IoaFsyKmUuaGVhcFtlLmhlYXBfbWF4XSsxXT0wLHI9ZS5oZWFwX21heCsxO3I8XztyKyspcDwocz1oWzIqaFsyKihuPWUuaGVhcFtyXSkrMV0rMV0rMSkmJihzPXAsbSsrKSxoWzIqbisxXT1zLHU8bnx8KGUuYmxfY291bnRbc10rKyxhPTAsZDw9biYmKGE9Y1tuLWRdKSxvPWhbMipuXSxlLm9wdF9sZW4rPW8qKHMrYSksZiYmKGUuc3RhdGljX2xlbis9byoobFsyKm4rMV0rYSkpKTtpZigwIT09bSl7ZG97Zm9yKHM9cC0xOzA9PT1lLmJsX2NvdW50W3NdOylzLS07ZS5ibF9jb3VudFtzXS0tLGUuYmxfY291bnRbcysxXSs9MixlLmJsX2NvdW50W3BdLS0sbS09Mn13aGlsZSgwPG0pO2ZvcihzPXA7MCE9PXM7cy0tKWZvcihuPWUuYmxfY291bnRbc107MCE9PW47KXU8KGk9ZS5oZWFwWy0tcl0pfHwoaFsyKmkrMV0hPT1zJiYoZS5vcHRfbGVuKz0ocy1oWzIqaSsxXSkqaFsyKmldLGhbMippKzFdPXMpLG4tLSl9fShlLHQpLFoocyx1LGUuYmxfY291bnQpfWZ1bmN0aW9uIFgoZSx0LHIpe3ZhciBuLGkscz0tMSxhPXRbMV0sbz0wLGg9Nyx1PTQ7Zm9yKDA9PT1hJiYoaD0xMzgsdT0zKSx0WzIqKHIrMSkrMV09NjU1MzUsbj0wO248PXI7bisrKWk9YSxhPXRbMioobisxKSsxXSwrK288aCYmaT09PWF8fChvPHU/ZS5ibF90cmVlWzIqaV0rPW86MCE9PWk/KGkhPT1zJiZlLmJsX3RyZWVbMippXSsrLGUuYmxfdHJlZVsyKmJdKyspOm88PTEwP2UuYmxfdHJlZVsyKnZdKys6ZS5ibF90cmVlWzIqeV0rKyxzPWksdT0obz0wKT09PWE/KGg9MTM4LDMpOmk9PT1hPyhoPTYsMyk6KGg9Nyw0KSl9ZnVuY3Rpb24gVihlLHQscil7dmFyIG4saSxzPS0xLGE9dFsxXSxvPTAsaD03LHU9NDtmb3IoMD09PWEmJihoPTEzOCx1PTMpLG49MDtuPD1yO24rKylpZihpPWEsYT10WzIqKG4rMSkrMV0sISgrK288aCYmaT09PWEpKXtpZihvPHUpZm9yKDtMKGUsaSxlLmJsX3RyZWUpLDAhPS0tbzspO2Vsc2UgMCE9PWk/KGkhPT1zJiYoTChlLGksZS5ibF90cmVlKSxvLS0pLEwoZSxiLGUuYmxfdHJlZSksUChlLG8tMywyKSk6bzw9MTA/KEwoZSx2LGUuYmxfdHJlZSksUChlLG8tMywzKSk6KEwoZSx5LGUuYmxfdHJlZSksUChlLG8tMTEsNykpO3M9aSx1PShvPTApPT09YT8oaD0xMzgsMyk6aT09PWE/KGg9NiwzKTooaD03LDQpfX1uKFQpO3ZhciBxPSExO2Z1bmN0aW9uIEooZSx0LHIsbil7UChlLChzPDwxKSsobj8xOjApLDMpLGZ1bmN0aW9uKGUsdCxyLG4pe00oZSksbiYmKFUoZSxyKSxVKGUsfnIpKSxpLmFycmF5U2V0KGUucGVuZGluZ19idWYsZS53aW5kb3csdCxyLGUucGVuZGluZyksZS5wZW5kaW5nKz1yfShlLHQsciwhMCl9ci5fdHJfaW5pdD1mdW5jdGlvbihlKXtxfHwoZnVuY3Rpb24oKXt2YXIgZSx0LHIsbixpLHM9bmV3IEFycmF5KGcrMSk7Zm9yKG49cj0wO248YS0xO24rKylmb3IoSVtuXT1yLGU9MDtlPDE8PHdbbl07ZSsrKUFbcisrXT1uO2ZvcihBW3ItMV09bixuPWk9MDtuPDE2O24rKylmb3IoVFtuXT1pLGU9MDtlPDE8PGtbbl07ZSsrKUVbaSsrXT1uO2ZvcihpPj49NztuPGY7bisrKWZvcihUW25dPWk8PDcsZT0wO2U8MTw8a1tuXS03O2UrKylFWzI1NitpKytdPW47Zm9yKHQ9MDt0PD1nO3QrKylzW3RdPTA7Zm9yKGU9MDtlPD0xNDM7KXpbMiplKzFdPTgsZSsrLHNbOF0rKztmb3IoO2U8PTI1NTspelsyKmUrMV09OSxlKyssc1s5XSsrO2Zvcig7ZTw9Mjc5Oyl6WzIqZSsxXT03LGUrKyxzWzddKys7Zm9yKDtlPD0yODc7KXpbMiplKzFdPTgsZSsrLHNbOF0rKztmb3IoWih6LGwrMSxzKSxlPTA7ZTxmO2UrKylDWzIqZSsxXT01LENbMiplXT1qKGUsNSk7Tz1uZXcgRCh6LHcsdSsxLGwsZyksQj1uZXcgRChDLGssMCxmLGcpLFI9bmV3IEQobmV3IEFycmF5KDApLHgsMCxjLHApfSgpLHE9ITApLGUubF9kZXNjPW5ldyBGKGUuZHluX2x0cmVlLE8pLGUuZF9kZXNjPW5ldyBGKGUuZHluX2R0cmVlLEIpLGUuYmxfZGVzYz1uZXcgRihlLmJsX3RyZWUsUiksZS5iaV9idWY9MCxlLmJpX3ZhbGlkPTAsVyhlKX0sci5fdHJfc3RvcmVkX2Jsb2NrPUosci5fdHJfZmx1c2hfYmxvY2s9ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGkscyxhPTA7MDxlLmxldmVsPygyPT09ZS5zdHJtLmRhdGFfdHlwZSYmKGUuc3RybS5kYXRhX3R5cGU9ZnVuY3Rpb24oZSl7dmFyIHQscj00MDkzNjI0NDQ3O2Zvcih0PTA7dDw9MzE7dCsrLHI+Pj49MSlpZigxJnImJjAhPT1lLmR5bl9sdHJlZVsyKnRdKXJldHVybiBvO2lmKDAhPT1lLmR5bl9sdHJlZVsxOF18fDAhPT1lLmR5bl9sdHJlZVsyMF18fDAhPT1lLmR5bl9sdHJlZVsyNl0pcmV0dXJuIGg7Zm9yKHQ9MzI7dDx1O3QrKylpZigwIT09ZS5keW5fbHRyZWVbMip0XSlyZXR1cm4gaDtyZXR1cm4gb30oZSkpLFkoZSxlLmxfZGVzYyksWShlLGUuZF9kZXNjKSxhPWZ1bmN0aW9uKGUpe3ZhciB0O2ZvcihYKGUsZS5keW5fbHRyZWUsZS5sX2Rlc2MubWF4X2NvZGUpLFgoZSxlLmR5bl9kdHJlZSxlLmRfZGVzYy5tYXhfY29kZSksWShlLGUuYmxfZGVzYyksdD1jLTE7Mzw9dCYmMD09PWUuYmxfdHJlZVsyKlNbdF0rMV07dC0tKTtyZXR1cm4gZS5vcHRfbGVuKz0zKih0KzEpKzUrNSs0LHR9KGUpLGk9ZS5vcHRfbGVuKzMrNz4+PjMsKHM9ZS5zdGF0aWNfbGVuKzMrNz4+PjMpPD1pJiYoaT1zKSk6aT1zPXIrNSxyKzQ8PWkmJi0xIT09dD9KKGUsdCxyLG4pOjQ9PT1lLnN0cmF0ZWd5fHxzPT09aT8oUChlLDIrKG4/MTowKSwzKSxLKGUseixDKSk6KFAoZSw0KyhuPzE6MCksMyksZnVuY3Rpb24oZSx0LHIsbil7dmFyIGk7Zm9yKFAoZSx0LTI1Nyw1KSxQKGUsci0xLDUpLFAoZSxuLTQsNCksaT0wO2k8bjtpKyspUChlLGUuYmxfdHJlZVsyKlNbaV0rMV0sMyk7VihlLGUuZHluX2x0cmVlLHQtMSksVihlLGUuZHluX2R0cmVlLHItMSl9KGUsZS5sX2Rlc2MubWF4X2NvZGUrMSxlLmRfZGVzYy5tYXhfY29kZSsxLGErMSksSyhlLGUuZHluX2x0cmVlLGUuZHluX2R0cmVlKSksVyhlKSxuJiZNKGUpfSxyLl90cl90YWxseT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGUucGVuZGluZ19idWZbZS5kX2J1ZisyKmUubGFzdF9saXRdPXQ+Pj44JjI1NSxlLnBlbmRpbmdfYnVmW2UuZF9idWYrMiplLmxhc3RfbGl0KzFdPTI1NSZ0LGUucGVuZGluZ19idWZbZS5sX2J1ZitlLmxhc3RfbGl0XT0yNTUmcixlLmxhc3RfbGl0KyssMD09PXQ/ZS5keW5fbHRyZWVbMipyXSsrOihlLm1hdGNoZXMrKyx0LS0sZS5keW5fbHRyZWVbMiooQVtyXSt1KzEpXSsrLGUuZHluX2R0cmVlWzIqTih0KV0rKyksZS5sYXN0X2xpdD09PWUubGl0X2J1ZnNpemUtMX0sci5fdHJfYWxpZ249ZnVuY3Rpb24oZSl7UChlLDIsMyksTChlLG0seiksZnVuY3Rpb24oZSl7MTY9PT1lLmJpX3ZhbGlkPyhVKGUsZS5iaV9idWYpLGUuYmlfYnVmPTAsZS5iaV92YWxpZD0wKTo4PD1lLmJpX3ZhbGlkJiYoZS5wZW5kaW5nX2J1ZltlLnBlbmRpbmcrK109MjU1JmUuYmlfYnVmLGUuYmlfYnVmPj49OCxlLmJpX3ZhbGlkLT04KX0oZSl9fSx7XCIuLi91dGlscy9jb21tb25cIjo0MX1dLDUzOltmdW5jdGlvbihlLHQscil7XCJ1c2Ugc3RyaWN0XCI7dC5leHBvcnRzPWZ1bmN0aW9uKCl7dGhpcy5pbnB1dD1udWxsLHRoaXMubmV4dF9pbj0wLHRoaXMuYXZhaWxfaW49MCx0aGlzLnRvdGFsX2luPTAsdGhpcy5vdXRwdXQ9bnVsbCx0aGlzLm5leHRfb3V0PTAsdGhpcy5hdmFpbF9vdXQ9MCx0aGlzLnRvdGFsX291dD0wLHRoaXMubXNnPVwiXCIsdGhpcy5zdGF0ZT1udWxsLHRoaXMuZGF0YV90eXBlPTIsdGhpcy5hZGxlcj0wfX0se31dLDU0OltmdW5jdGlvbihlLHQscil7KGZ1bmN0aW9uKGUpeyFmdW5jdGlvbihyLG4pe1widXNlIHN0cmljdFwiO2lmKCFyLnNldEltbWVkaWF0ZSl7dmFyIGkscyx0LGEsbz0xLGg9e30sdT0hMSxsPXIuZG9jdW1lbnQsZT1PYmplY3QuZ2V0UHJvdG90eXBlT2YmJk9iamVjdC5nZXRQcm90b3R5cGVPZihyKTtlPWUmJmUuc2V0VGltZW91dD9lOnIsaT1cIltvYmplY3QgcHJvY2Vzc11cIj09PXt9LnRvU3RyaW5nLmNhbGwoci5wcm9jZXNzKT9mdW5jdGlvbihlKXtwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uKCl7YyhlKX0pfTpmdW5jdGlvbigpe2lmKHIucG9zdE1lc3NhZ2UmJiFyLmltcG9ydFNjcmlwdHMpe3ZhciBlPSEwLHQ9ci5vbm1lc3NhZ2U7cmV0dXJuIHIub25tZXNzYWdlPWZ1bmN0aW9uKCl7ZT0hMX0sci5wb3N0TWVzc2FnZShcIlwiLFwiKlwiKSxyLm9ubWVzc2FnZT10LGV9fSgpPyhhPVwic2V0SW1tZWRpYXRlJFwiK01hdGgucmFuZG9tKCkrXCIkXCIsci5hZGRFdmVudExpc3RlbmVyP3IuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIixkLCExKTpyLmF0dGFjaEV2ZW50KFwib25tZXNzYWdlXCIsZCksZnVuY3Rpb24oZSl7ci5wb3N0TWVzc2FnZShhK2UsXCIqXCIpfSk6ci5NZXNzYWdlQ2hhbm5lbD8oKHQ9bmV3IE1lc3NhZ2VDaGFubmVsKS5wb3J0MS5vbm1lc3NhZ2U9ZnVuY3Rpb24oZSl7YyhlLmRhdGEpfSxmdW5jdGlvbihlKXt0LnBvcnQyLnBvc3RNZXNzYWdlKGUpfSk6bCYmXCJvbnJlYWR5c3RhdGVjaGFuZ2VcImluIGwuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKT8ocz1sLmRvY3VtZW50RWxlbWVudCxmdW5jdGlvbihlKXt2YXIgdD1sLmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7dC5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXtjKGUpLHQub25yZWFkeXN0YXRlY2hhbmdlPW51bGwscy5yZW1vdmVDaGlsZCh0KSx0PW51bGx9LHMuYXBwZW5kQ2hpbGQodCl9KTpmdW5jdGlvbihlKXtzZXRUaW1lb3V0KGMsMCxlKX0sZS5zZXRJbW1lZGlhdGU9ZnVuY3Rpb24oZSl7XCJmdW5jdGlvblwiIT10eXBlb2YgZSYmKGU9bmV3IEZ1bmN0aW9uKFwiXCIrZSkpO2Zvcih2YXIgdD1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aC0xKSxyPTA7cjx0Lmxlbmd0aDtyKyspdFtyXT1hcmd1bWVudHNbcisxXTt2YXIgbj17Y2FsbGJhY2s6ZSxhcmdzOnR9O3JldHVybiBoW29dPW4saShvKSxvKyt9LGUuY2xlYXJJbW1lZGlhdGU9Zn1mdW5jdGlvbiBmKGUpe2RlbGV0ZSBoW2VdfWZ1bmN0aW9uIGMoZSl7aWYodSlzZXRUaW1lb3V0KGMsMCxlKTtlbHNle3ZhciB0PWhbZV07aWYodCl7dT0hMDt0cnl7IWZ1bmN0aW9uKGUpe3ZhciB0PWUuY2FsbGJhY2sscj1lLmFyZ3M7c3dpdGNoKHIubGVuZ3RoKXtjYXNlIDA6dCgpO2JyZWFrO2Nhc2UgMTp0KHJbMF0pO2JyZWFrO2Nhc2UgMjp0KHJbMF0sclsxXSk7YnJlYWs7Y2FzZSAzOnQoclswXSxyWzFdLHJbMl0pO2JyZWFrO2RlZmF1bHQ6dC5hcHBseShuLHIpfX0odCl9ZmluYWxseXtmKGUpLHU9ITF9fX19ZnVuY3Rpb24gZChlKXtlLnNvdXJjZT09PXImJlwic3RyaW5nXCI9PXR5cGVvZiBlLmRhdGEmJjA9PT1lLmRhdGEuaW5kZXhPZihhKSYmYygrZS5kYXRhLnNsaWNlKGEubGVuZ3RoKSl9fShcInVuZGVmaW5lZFwiPT10eXBlb2Ygc2VsZj92b2lkIDA9PT1lP3RoaXM6ZTpzZWxmKX0pLmNhbGwodGhpcyxcInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmOlwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0se31dfSx7fSxbMTBdKSgxMCl9KTsiLCAibW9kdWxlLmV4cG9ydHMgPSB7XG4gIGFxdWE6IC8jMDBmZmZmKGZmKT8oPyFcXHcpfCMwZmYoZik/KD8hXFx3KS9naSxcbiAgYXp1cmU6IC8jZjBmZmZmKGZmKT8oPyFcXHcpL2dpLFxuICBiZWlnZTogLyNmNWY1ZGMoZmYpPyg/IVxcdykvZ2ksXG4gIGJpc3F1ZTogLyNmZmU0YzQoZmYpPyg/IVxcdykvZ2ksXG4gIGJsYWNrOiAvIzAwMDAwMChmZik/KD8hXFx3KXwjMDAwKGYpPyg/IVxcdykvZ2ksXG4gIGJsdWU6IC8jMDAwMGZmKGZmKT8oPyFcXHcpfCMwMGYoZik/KD8hXFx3KS9naSxcbiAgYnJvd246IC8jYTUyYTJhKGZmKT8oPyFcXHcpL2dpLFxuICBjb3JhbDogLyNmZjdmNTAoZmYpPyg/IVxcdykvZ2ksXG4gIGNvcm5zaWxrOiAvI2ZmZjhkYyhmZik/KD8hXFx3KS9naSxcbiAgY3JpbXNvbjogLyNkYzE0M2MoZmYpPyg/IVxcdykvZ2ksXG4gIGN5YW46IC8jMDBmZmZmKGZmKT8oPyFcXHcpfCMwZmYoZik/KD8hXFx3KS9naSxcbiAgZGFya2JsdWU6IC8jMDAwMDhiKGZmKT8oPyFcXHcpL2dpLFxuICBkYXJrY3lhbjogLyMwMDhiOGIoZmYpPyg/IVxcdykvZ2ksXG4gIGRhcmtncmV5OiAvI2E5YTlhOShmZik/KD8hXFx3KS9naSxcbiAgZGFya3JlZDogLyM4YjAwMDAoZmYpPyg/IVxcdykvZ2ksXG4gIGRlZXBwaW5rOiAvI2ZmMTQ5MyhmZik/KD8hXFx3KS9naSxcbiAgZGltZ3JleTogLyM2OTY5NjkoZmYpPyg/IVxcdykvZ2ksXG4gIGdvbGQ6IC8jZmZkNzAwKGZmKT8oPyFcXHcpL2dpLFxuICBncmVlbjogLyMwMDgwMDAoZmYpPyg/IVxcdykvZ2ksXG4gIGdyZXk6IC8jODA4MDgwKGZmKT8oPyFcXHcpL2dpLFxuICBob25leWRldzogLyNmMGZmZjAoZmYpPyg/IVxcdykvZ2ksXG4gIGhvdHBpbms6IC8jZmY2OWI0KGZmKT8oPyFcXHcpL2dpLFxuICBpbmRpZ286IC8jNGIwMDgyKGZmKT8oPyFcXHcpL2dpLFxuICBpdm9yeTogLyNmZmZmZjAoZmYpPyg/IVxcdykvZ2ksXG4gIGtoYWtpOiAvI2YwZTY4YyhmZik/KD8hXFx3KS9naSxcbiAgbGF2ZW5kZXI6IC8jZTZlNmZhKGZmKT8oPyFcXHcpL2dpLFxuICBsaW1lOiAvIzAwZmYwMChmZik/KD8hXFx3KXwjMGYwKGYpPyg/IVxcdykvZ2ksXG4gIGxpbmVuOiAvI2ZhZjBlNihmZik/KD8hXFx3KS9naSxcbiAgbWFyb29uOiAvIzgwMDAwMChmZik/KD8hXFx3KS9naSxcbiAgbW9jY2FzaW46IC8jZmZlNGI1KGZmKT8oPyFcXHcpL2dpLFxuICBuYXZ5OiAvIzAwMDA4MChmZik/KD8hXFx3KS9naSxcbiAgb2xkbGFjZTogLyNmZGY1ZTYoZmYpPyg/IVxcdykvZ2ksXG4gIG9saXZlOiAvIzgwODAwMChmZik/KD8hXFx3KS9naSxcbiAgb3JhbmdlOiAvI2ZmYTUwMChmZik/KD8hXFx3KS9naSxcbiAgb3JjaGlkOiAvI2RhNzBkNihmZik/KD8hXFx3KS9naSxcbiAgcGVydTogLyNjZDg1M2YoZmYpPyg/IVxcdykvZ2ksXG4gIHBpbms6IC8jZmZjMGNiKGZmKT8oPyFcXHcpL2dpLFxuICBwbHVtOiAvI2RkYTBkZChmZik/KD8hXFx3KS9naSxcbiAgcHVycGxlOiAvIzgwMDA4MChmZik/KD8hXFx3KS9naSxcbiAgcmVkOiAvI2ZmMDAwMChmZik/KD8hXFx3KXwjZjAwKGYpPyg/IVxcdykvZ2ksXG4gIHNhbG1vbjogLyNmYTgwNzIoZmYpPyg/IVxcdykvZ2ksXG4gIHNlYWdyZWVuOiAvIzJlOGI1NyhmZik/KD8hXFx3KS9naSxcbiAgc2Vhc2hlbGw6IC8jZmZmNWVlKGZmKT8oPyFcXHcpL2dpLFxuICBzaWVubmE6IC8jYTA1MjJkKGZmKT8oPyFcXHcpL2dpLFxuICBzaWx2ZXI6IC8jYzBjMGMwKGZmKT8oPyFcXHcpL2dpLFxuICBza3libHVlOiAvIzg3Y2VlYihmZik/KD8hXFx3KS9naSxcbiAgc25vdzogLyNmZmZhZmEoZmYpPyg/IVxcdykvZ2ksXG4gIHRhbjogLyNkMmI0OGMoZmYpPyg/IVxcdykvZ2ksXG4gIHRlYWw6IC8jMDA4MDgwKGZmKT8oPyFcXHcpL2dpLFxuICB0aGlzdGxlOiAvI2Q4YmZkOChmZik/KD8hXFx3KS9naSxcbiAgdG9tYXRvOiAvI2ZmNjM0NyhmZik/KD8hXFx3KS9naSxcbiAgdmlvbGV0OiAvI2VlODJlZShmZik/KD8hXFx3KS9naSxcbiAgd2hlYXQ6IC8jZjVkZWIzKGZmKT8oPyFcXHcpL2dpLFxuICB3aGl0ZTogLyNmZmZmZmYoZmYpPyg/IVxcdyl8I2ZmZihmKT8oPyFcXHcpL2dpLFxufTtcbiIsICJ2YXIgc2hvcnRlck5hbWVzID0gcmVxdWlyZSgnLi9zaG9ydGVyLWNzcy1jb2xvci1uYW1lcycpO1xudmFyIFJFR0VYID0ge1xuICB3aGl0ZXNwYWNlOiAvXFxzKy9nLFxuICB1cmxIZXhQYWlyczogLyVbXFxkQS1GXXsyfS9nLFxuICBxdW90ZXM6IC9cIi9nLFxufVxuXG5mdW5jdGlvbiBjb2xsYXBzZVdoaXRlc3BhY2Uoc3RyKSB7XG4gIHJldHVybiBzdHIudHJpbSgpLnJlcGxhY2UoUkVHRVgud2hpdGVzcGFjZSwgJyAnKTtcbn1cblxuZnVuY3Rpb24gZGF0YVVSSVBheWxvYWQoc3RyaW5nKSB7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5nKVxuICAgIC5yZXBsYWNlKFJFR0VYLnVybEhleFBhaXJzLCBzcGVjaWFsSGV4RW5jb2RlKTtcbn1cblxuLy8gYCNgIGdldHMgY29udmVydGVkIHRvIGAlMjNgLCBzbyBxdWl0ZSBhIGZldyBDU1MgbmFtZWQgY29sb3JzIGFyZSBzaG9ydGVyIHRoYW5cbi8vIHRoZWlyIGVxdWl2YWxlbnQgVVJMLWVuY29kZWQgaGV4IGNvZGVzLlxuZnVuY3Rpb24gY29sb3JDb2RlVG9TaG9ydGVyTmFtZXMoc3RyaW5nKSB7XG4gIE9iamVjdC5rZXlzKHNob3J0ZXJOYW1lcykuZm9yRWFjaChmdW5jdGlvbihrZXkpIHtcbiAgICBpZiAoc2hvcnRlck5hbWVzW2tleV0udGVzdChzdHJpbmcpKSB7XG4gICAgICBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShzaG9ydGVyTmFtZXNba2V5XSwga2V5KTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIHNwZWNpYWxIZXhFbmNvZGUobWF0Y2gpIHtcbiAgc3dpdGNoIChtYXRjaCkgeyAvLyBCcm93c2VycyB0b2xlcmF0ZSB0aGVzZSBjaGFyYWN0ZXJzLCBhbmQgdGhleSdyZSBmcmVxdWVudFxuICAgIGNhc2UgJyUyMCc6IHJldHVybiAnICc7XG4gICAgY2FzZSAnJTNEJzogcmV0dXJuICc9JztcbiAgICBjYXNlICclM0EnOiByZXR1cm4gJzonO1xuICAgIGNhc2UgJyUyRic6IHJldHVybiAnLyc7XG4gICAgZGVmYXVsdDogcmV0dXJuIG1hdGNoLnRvTG93ZXJDYXNlKCk7IC8vIGNvbXByZXNzZXMgYmV0dGVyXG4gIH1cbn1cblxuZnVuY3Rpb24gc3ZnVG9UaW55RGF0YVVyaShzdmdTdHJpbmcpIHtcbiAgaWYgKHR5cGVvZiBzdmdTdHJpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgYSBzdHJpbmcsIGJ1dCByZWNlaXZlZCAnICsgdHlwZW9mIHN2Z1N0cmluZyk7XG4gIH1cbiAgLy8gU3RyaXAgdGhlIEJ5dGUtT3JkZXIgTWFyayBpZiB0aGUgU1ZHIGhhcyBvbmVcbiAgaWYgKHN2Z1N0cmluZy5jaGFyQ29kZUF0KDApID09PSAweGZlZmYpIHsgc3ZnU3RyaW5nID0gc3ZnU3RyaW5nLnNsaWNlKDEpIH1cblxuICB2YXIgYm9keSA9IGNvbG9yQ29kZVRvU2hvcnRlck5hbWVzKGNvbGxhcHNlV2hpdGVzcGFjZShzdmdTdHJpbmcpKVxuICAgIC5yZXBsYWNlKFJFR0VYLnF1b3RlcywgXCInXCIpO1xuICByZXR1cm4gJ2RhdGE6aW1hZ2Uvc3ZnK3htbCwnICsgZGF0YVVSSVBheWxvYWQoYm9keSk7XG59XG5cbnN2Z1RvVGlueURhdGFVcmkudG9TcmNzZXQgPSBmdW5jdGlvbiB0b1NyY3NldChzdmdTdHJpbmcpIHtcbiAgcmV0dXJuIHN2Z1RvVGlueURhdGFVcmkoc3ZnU3RyaW5nKS5yZXBsYWNlKC8gL2csICclMjAnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdmdUb1RpbnlEYXRhVXJpO1xuIiwgImltcG9ydCB7IFBsdWdpbiwgc2V0SWNvbiB9IGZyb20gXCJvYnNpZGlhblwiO1xuXG5pbXBvcnQgYnVpbGRJY29uUGx1Z2luIGZyb20gXCIuL2ljb24taW4tZWRpdG9yXCI7XG5pbXBvcnQgdHlwZSB7IFNob3J0Y29kZVBvc0ZpZWxkIH0gZnJvbSBcIi4vaWNvbi1pbi1lZGl0b3Ivc3RhdGVcIjtcbmltcG9ydCBnZXRTaG9ydGNvZGVQb3NGaWVsZCBmcm9tIFwiLi9pY29uLWluLWVkaXRvci9zdGF0ZVwiO1xuaW1wb3J0IEZpbGVJY29uQ2FjaGUgZnJvbSBcIi4vaWNvbi1wYWNrcy9pY29uLWNhY2hlXCI7XG5pbXBvcnQgUGFja01hbmFnZXIgZnJvbSBcIi4vaWNvbi1wYWNrcy9wYWNrLW1hbmFnZXJcIjtcbmltcG9ydCB0cnlVcGRhdGVJY29ucyBmcm9tIFwiLi9tb2R1bGVzL2pzb24tdG8tc3ZnXCI7XG5pbXBvcnQgeyBFbW9qaVN1Z2dlc3RlciB9IGZyb20gXCIuL21vZHVsZXMvc3VnZ2VzdGVyXCI7XG5pbXBvcnQgeyBnZXRNRFBvc3RQcm9jZXNzb3IsIGdldE5vZGVQb3N0UHJvY2Vzc29yIH0gZnJvbSBcIi4vcG9zdC1wc1wiO1xuaW1wb3J0IHsgc2V0dXBQb3N0UHJvY2Vzc29ycyB9IGZyb20gXCIuL3Bvc3QtcHNcIjtcbmltcG9ydCB7IERFRkFVTFRfU0VUVElOR1MsIEljb25TQ1NldHRpbmdzLCBJY29uU0NTZXR0aW5nVGFiIH0gZnJvbSBcIi4vc2V0dGluZ3NcIjtcbmltcG9ydCB7IGdldEFwaSB9IGZyb20gXCIuL3R5cGluZ3MvYXBpXCI7XG5pbXBvcnQgQVBJLCB7IEFQSV9OQU1FIH0gZnJvbSBcIi4vdHlwaW5ncy9hcGlcIjtcblxuY29uc3QgQVBJX05BTUU6IEFQSV9OQU1FIGV4dGVuZHMga2V5b2YgdHlwZW9mIHdpbmRvdyA/IEFQSV9OQU1FIDogbmV2ZXIgPVxuICBcIkljb25TQ0FQSXYwXCIgYXMgY29uc3Q7IC8vIHRoaXMgbGluZSB3aWxsIHRocm93IGVycm9yIGlmIG5hbWUgb3V0IG9mIHN5bmNcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSWNvblNDIGV4dGVuZHMgUGx1Z2luIHtcbiAgc2V0dGluZ3M6IEljb25TQ1NldHRpbmdzID0gREVGQVVMVF9TRVRUSU5HUztcblxuICBwYWNrTWFuYWdlciA9IG5ldyBQYWNrTWFuYWdlcih0aGlzKTtcblxuICBfbm9kZVByb2Nlc3NvciA9IGdldE5vZGVQb3N0UHJvY2Vzc29yKHRoaXMpO1xuICBfbWRQcm9jZXNzb3IgPSBnZXRNRFBvc3RQcm9jZXNzb3IodGhpcyk7XG5cbiAgc2hvcnRjb2RlUG9zRmllbGQ6IFNob3J0Y29kZVBvc0ZpZWxkID0gZ2V0U2hvcnRjb2RlUG9zRmllbGQodGhpcyk7XG5cbiAgcG9zdFByb2Nlc3NvcihpbnB1dDogc3RyaW5nLCByZXBsYWNlcjogKHNob3J0Y29kZTogc3RyaW5nKSA9PiBzdHJpbmcpOiBzdHJpbmc7XG4gIHBvc3RQcm9jZXNzb3IoaW5wdXQ6IEhUTUxFbGVtZW50KTogdm9pZDtcbiAgcG9zdFByb2Nlc3NvcihcbiAgICBpbnB1dDogSFRNTEVsZW1lbnQgfCBzdHJpbmcsXG4gICAgcmVwbGFjZXI/OiAoc2hvcnRjb2RlOiBzdHJpbmcpID0+IHN0cmluZyxcbiAgKTogc3RyaW5nIHwgdm9pZCB7XG4gICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJzdHJpbmdcIiAmJiByZXBsYWNlcikge1xuICAgICAgcmV0dXJuIHRoaXMuX21kUHJvY2Vzc29yKGlucHV0LCByZXBsYWNlcik7XG4gICAgfSBlbHNlIGlmIChpbnB1dCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgICByZXR1cm4gdGhpcy5fbm9kZVByb2Nlc3NvcihpbnB1dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGFyZ3MgZ2l2ZW4gdG8gcG9zdFByb2Nlc3NvclwiKTtcbiAgICB9XG4gIH1cblxuICBhcGkgPSBnZXRBcGkodGhpcy5wYWNrTWFuYWdlciwgdGhpcyk7XG4gIGZpbGVJY29uQ2FjaGUgPSBuZXcgRmlsZUljb25DYWNoZSh0aGlzKTtcblxuICBhc3luYyBvbmxvYWQoKSB7XG4gICAgY29uc29sZS5sb2coXCJsb2FkaW5nIEljb24gU2hvcnRjb2Rlc1wiKTtcblxuICAgIGF3YWl0IHRoaXMubG9hZFNldHRpbmdzKCk7XG4gICAgYXdhaXQgdHJ5VXBkYXRlSWNvbnModGhpcyk7XG4gICAgYXdhaXQgdGhpcy5wYWNrTWFuYWdlci5sb2FkSWNvbnMoKTtcblxuICAgICh3aW5kb3dbQVBJX05BTUVdID0gdGhpcy5hcGkpICYmXG4gICAgICB0aGlzLnJlZ2lzdGVyKCgpID0+ICh3aW5kb3dbQVBJX05BTUVdID0gdW5kZWZpbmVkKSk7XG5cbiAgICB0aGlzLnJlZ2lzdGVyRWRpdG9yU3VnZ2VzdChuZXcgRW1vamlTdWdnZXN0ZXIodGhpcykpO1xuICAgIHNldHVwUG9zdFByb2Nlc3NvcnModGhpcyk7XG4gICAgYnVpbGRJY29uUGx1Z2luKHRoaXMpO1xuXG4gICAgdGhpcy5hZGRTZXR0aW5nVGFiKG5ldyBJY29uU0NTZXR0aW5nVGFiKHRoaXMuYXBwLCB0aGlzKSk7XG4gIH1cblxuICAvLyBvbnVubG9hZCgpIHtcbiAgLy8gICBjb25zb2xlLmxvZyhcInVubG9hZGluZyBJY29uIFNob3J0Y29kZXNcIik7XG4gIC8vIH1cblxuICBhc3luYyBsb2FkU2V0dGluZ3MoKSB7XG4gICAgbGV0IGxvYWRlZCA9IChhd2FpdCB0aGlzLmxvYWREYXRhKCkpIGFzIEljb25TQ1NldHRpbmdzIHwgdW5kZWZpbmVkO1xuICAgIGlmIChsb2FkZWQpIHtcbiAgICAgIGlmICgobG9hZGVkIGFzIGFueSkuaWNvbnBhY2spIHtcbiAgICAgICAgZGVsZXRlIChsb2FkZWQgYXMgYW55KVtcImljb25wYWNrXCJdO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXR0aW5ncyA9IHtcbiAgICAgICAgLi4udGhpcy5zZXR0aW5ncyxcbiAgICAgICAgLi4ubG9hZGVkLFxuICAgICAgICBkaXNhYmxlZFBhY2tzOiBsb2FkZWQuZGlzYWJsZWRQYWNrc1xuICAgICAgICAgID8gbmV3IFNldChsb2FkZWQuZGlzYWJsZWRQYWNrcylcbiAgICAgICAgICA6IHRoaXMuc2V0dGluZ3MuZGlzYWJsZWRQYWNrcyxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2F2ZVNldHRpbmdzKCkge1xuICAgIGF3YWl0IHRoaXMuc2F2ZURhdGEoe1xuICAgICAgLi4udGhpcy5zZXR0aW5ncyxcbiAgICAgIGRpc2FibGVkUGFja3M6IFsuLi50aGlzLnNldHRpbmdzLmRpc2FibGVkUGFja3NdLFxuICAgIH0pO1xuICB9XG59XG4iLCAiaW1wb3J0IHtcbiAgRGVjb3JhdGlvbixcbiAgRGVjb3JhdGlvblNldCxcbiAgRWRpdG9yVmlldyxcbiAgVmlld1BsdWdpbixcbiAgVmlld1VwZGF0ZSxcbn0gZnJvbSBcIkBjb2RlbWlycm9yL3ZpZXdcIjtcbmltcG9ydCB7IGVkaXRvckxpdmVQcmV2aWV3RmllbGQgfSBmcm9tIFwib2JzaWRpYW5cIjtcblxuaW1wb3J0IHR5cGUgSWNvblNDIGZyb20gXCIuLi9pc2MtbWFpblwiO1xuaW1wb3J0IGljb25zIGZyb20gXCIuL2RlY29cIjtcbmltcG9ydCBnZXRNZW51IGZyb20gXCIuL2dldC1tZW51XCI7XG5cbmludGVyZmFjZSBJY29uUGx1Z2luIHtcbiAgY29uc3RydWN0b3IodmlldzogRWRpdG9yVmlldyk6IEljb25QbHVnaW47XG4gIHVwZGF0ZSh1cGRhdGU6IFZpZXdVcGRhdGUpOiB2b2lkO1xufVxuXG5jb25zdCBnZXRJY29uTGl2ZVByZXZpZXdQbHVnaW4gPSAocGx1Z2luOiBJY29uU0MpOiBWaWV3UGx1Z2luPEljb25QbHVnaW4+ID0+IHtcbiAgY2xhc3MgSWNvblBsdWdpbiB7XG4gICAgZGVjb3JhdGlvbnM6IERlY29yYXRpb25TZXQ7XG4gICAgcGx1Z2luOiBJY29uU0M7XG5cbiAgICBjb25zdHJ1Y3Rvcih2aWV3OiBFZGl0b3JWaWV3KSB7XG4gICAgICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcbiAgICAgIHRoaXMuZGVjb3JhdGlvbnMgPSBpY29ucyh2aWV3LCB0aGlzLnBsdWdpbik7XG4gICAgfVxuXG4gICAgdXBkYXRlKHVwZGF0ZTogVmlld1VwZGF0ZSkge1xuICAgICAgY29uc3QgcHJldk1vZGUgPSB1cGRhdGUuc3RhcnRTdGF0ZS5maWVsZChlZGl0b3JMaXZlUHJldmlld0ZpZWxkKSxcbiAgICAgICAgY3Vyck1vZGUgPSB1cGRhdGUuc3RhdGUuZmllbGQoZWRpdG9yTGl2ZVByZXZpZXdGaWVsZCk7XG4gICAgICBpZiAoXG4gICAgICAgIHVwZGF0ZS5kb2NDaGFuZ2VkIHx8XG4gICAgICAgIHVwZGF0ZS52aWV3cG9ydENoYW5nZWQgfHxcbiAgICAgICAgcHJldk1vZGUgIT09IGN1cnJNb2RlXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5kZWNvcmF0aW9ucyA9IGljb25zKHVwZGF0ZS52aWV3LCBwbHVnaW4pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBWaWV3UGx1Z2luLmZyb21DbGFzcyhJY29uUGx1Z2luLCB7XG4gICAgZXZlbnRIYW5kbGVyczoge1xuICAgICAgbW91c2Vkb3duOiBJY29uQ2xpY2tIYW5kbGVyLFxuICAgIH0sXG4gICAgZGVjb3JhdGlvbnM6ICh2KSA9PiB2LmRlY29yYXRpb25zLFxuICAgIHByb3ZpZGU6IChwbHVnaW4pID0+XG4gICAgICBFZGl0b3JWaWV3LmF0b21pY1Jhbmdlcy5vZigodmlldykgPT4ge1xuICAgICAgICBsZXQgdmFsdWUgPSB2aWV3LnBsdWdpbihwbHVnaW4pO1xuICAgICAgICByZXR1cm4gdmFsdWUgPyB2YWx1ZS5kZWNvcmF0aW9ucyA6IERlY29yYXRpb24ubm9uZTtcbiAgICAgIH0pLFxuICB9KTtcbiAgLyogZXNsaW50LWRpc2FibGUgcHJlZmVyLWFycm93L3ByZWZlci1hcnJvdy1mdW5jdGlvbnMgKi9cbiAgZnVuY3Rpb24gSWNvbkNsaWNrSGFuZGxlcihcbiAgICB0aGlzOiBJY29uUGx1Z2luLFxuICAgIGV2dDogTW91c2VFdmVudCxcbiAgICB2aWV3OiBFZGl0b3JWaWV3LFxuICApIHtcbiAgICBsZXQgdGFyZ2V0ID0gZXZ0LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICBpZiAodGFyZ2V0Lm1hdGNoUGFyZW50KFwiLmNtLWlzYy1pY29uXCIsIHZpZXcuY29udGVudERPTSkpIHtcbiAgICAgIGNvbnN0IGVsRnJvbSA9IHZpZXcucG9zQXRET00odGFyZ2V0KTtcbiAgICAgIGxldCBhbmNob3I6IG51bWJlciA9IC0xLFxuICAgICAgICBoZWFkOiBudW1iZXIgPSAtMTtcbiAgICAgIHRoaXMuZGVjb3JhdGlvbnMuYmV0d2VlbihlbEZyb20gLSAxLCBlbEZyb20gKyAxLCAoZnJvbSwgdG8sIHZhbHVlKSA9PiB7XG4gICAgICAgIGlmIChlbEZyb20gPj0gZnJvbSAmJiBlbEZyb20gPD0gdG8pIHtcbiAgICAgICAgICBpZiAoZnJvbSA9PT0gdG8pIHtcbiAgICAgICAgICAgIGFuY2hvciA9IHZhbHVlLnNwZWMuZnJvbTtcbiAgICAgICAgICAgIGhlYWQgPSB2YWx1ZS5zcGVjLnRvO1xuICAgICAgICAgIH0gZWxzZSAoYW5jaG9yID0gZnJvbSksIChoZWFkID0gdG8pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAoYW5jaG9yIDwgMCB8fCBoZWFkIDwgMCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwibm8gcmFuZ2UgZm91bmQgZm9yXCIsIHRhcmdldCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHdhaXQoMCkudGhlbigoKSA9PiB2aWV3LmRpc3BhdGNoKHsgc2VsZWN0aW9uOiB7IGFuY2hvciwgaGVhZCB9IH0pKTtcbiAgICAgIGlmIChldnQuYnV0dG9uID09PSAwIHx8IGV2dC5idXR0b24gPT09IDEpIHtcbiAgICAgICAgY29uc3QgbWVudSA9IGdldE1lbnUoYW5jaG9yLCBoZWFkLCBwbHVnaW4sIHZpZXcpO1xuICAgICAgICB3YWl0KDIwMCkudGhlbigoKSA9PiBtZW51LnNob3dBdE1vdXNlRXZlbnQoZXZ0KSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG5jb25zdCB3YWl0ID0gKG1zOiBudW1iZXIpID0+IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG5leHBvcnQgZGVmYXVsdCBnZXRJY29uTGl2ZVByZXZpZXdQbHVnaW47XG4iLCAiaW1wb3J0IHR5cGUgeyBFZGl0b3JWaWV3IH0gZnJvbSBcIkBjb2RlbWlycm9yL3ZpZXdcIjtcbmltcG9ydCB7IERlY29yYXRpb24gfSBmcm9tIFwiQGNvZGVtaXJyb3Ivdmlld1wiO1xuaW1wb3J0IHsgZWRpdG9yTGl2ZVByZXZpZXdGaWVsZCB9IGZyb20gXCJvYnNpZGlhblwiO1xuXG5pbXBvcnQgdHlwZSBJY29uU0MgZnJvbSBcIi4uL2lzYy1tYWluXCI7XG5pbXBvcnQgSWNvbldpZGdldCBmcm9tIFwiLi93aWRnZXRcIjtcblxuY29uc3QgaWNvbnMgPSAodmlldzogRWRpdG9yVmlldywgcGx1Z2luOiBJY29uU0MpID0+IHtcbiAgbGV0IHJhbmdlczogW2ljb25JZDogc3RyaW5nLCBmcm9tOiBudW1iZXIsIHRvOiBudW1iZXJdW10gPSBbXTtcbiAgY29uc3QgU0NJbmZvID0gdmlldy5zdGF0ZS5maWVsZChwbHVnaW4uc2hvcnRjb2RlUG9zRmllbGQpO1xuICBmb3IgKGxldCB7IGZyb20sIHRvIH0gb2Ygdmlldy52aXNpYmxlUmFuZ2VzKSB7XG4gICAgU0NJbmZvLmJldHdlZW4oZnJvbSwgdG8sIChmcm9tLCB0bywgeyBpY29uSWQgfSkgPT4ge1xuICAgICAgcmFuZ2VzLnB1c2goW2ljb25JZCwgZnJvbSwgdG9dKTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gRGVjb3JhdGlvbi5zZXQoXG4gICAgcmFuZ2VzLm1hcCgoW2ljb25JZCwgZnJvbSwgdG9dKSA9PiB7XG4gICAgICBjb25zdCB3aWRnZXQgPSBuZXcgSWNvbldpZGdldChpY29uSWQsIHBsdWdpbik7XG4gICAgICBjb25zdCBzcGVjID0geyB3aWRnZXQsIHNpZGU6IC0xLCBmcm9tLCB0byB9O1xuICAgICAgaWYgKHZpZXcuc3RhdGUuZmllbGQoZWRpdG9yTGl2ZVByZXZpZXdGaWVsZCkpIHtcbiAgICAgICAgcmV0dXJuIERlY29yYXRpb24ucmVwbGFjZShzcGVjKS5yYW5nZShmcm9tLCB0byk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gRGVjb3JhdGlvbi53aWRnZXQoc3BlYykucmFuZ2UodG8pO1xuICAgICAgfVxuICAgIH0pLFxuICAgIHRydWUsXG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBpY29ucztcbiIsICJpbXBvcnQgdHlwZSB7IEVkaXRvclZpZXcgfSBmcm9tIFwiQGNvZGVtaXJyb3Ivdmlld1wiO1xuaW1wb3J0IHsgV2lkZ2V0VHlwZSB9IGZyb20gXCJAY29kZW1pcnJvci92aWV3XCI7XG5pbXBvcnQgY2xzIGZyb20gXCJjbGFzc25hbWVzXCI7XG5cbmltcG9ydCB0eXBlIEljb25TQyBmcm9tIFwiLi4vaXNjLW1haW5cIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEljb25XaWRnZXQgZXh0ZW5kcyBXaWRnZXRUeXBlIHtcbiAgY29uc3RydWN0b3IocHVibGljIGlkOiBzdHJpbmcsIHB1YmxpYyBwbHVnaW46IEljb25TQykge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBlcShvdGhlcjogSWNvbldpZGdldCkge1xuICAgIHJldHVybiBvdGhlciBpbnN0YW5jZW9mIEljb25XaWRnZXQgJiYgb3RoZXIuaWQgPT09IHRoaXMuaWQ7XG4gIH1cblxuICB0b0RPTSh2aWV3OiBFZGl0b3JWaWV3KSB7XG4gICAgbGV0IHdyYXAgPSBjcmVhdGVTcGFuKHtcbiAgICAgIGNsczogXCJjbS1pc2MtaWNvblwiLFxuICAgICAgYXR0cjogeyBcImFyaWEtbGFiZWxcIjogdGhpcy5pZC5yZXBsYWNlKC9fL2csIFwiIFwiKSB9LFxuICAgIH0pO1xuXG4gICAgdGhpcy5wbHVnaW4ucGFja01hbmFnZXIuZ2V0U1ZHSWNvbih0aGlzLmlkKS50aGVuKChzcGFuKSA9PiB7XG4gICAgICBpZiAoIXNwYW4pIHtcbiAgICAgICAgd3JhcC5hcHBlbmQoYDoke3RoaXMuaWR9OmApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3Bhbi5jbGFzc0xpc3QuZm9yRWFjaCgoY2xzKSA9PiB3cmFwLmFkZENsYXNzKGNscykpO1xuICAgICAgICB3cmFwLnJlcGxhY2VDaGlsZHJlbiguLi5zcGFuLmNoaWxkTm9kZXMpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB3cmFwO1xuICB9XG5cbiAgaWdub3JlRXZlbnQoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgRWRpdG9yVmlldyB9IGZyb20gXCJAY29kZW1pcnJvci92aWV3XCI7XG5pbXBvcnQgeyBNZW51IH0gZnJvbSBcIm9ic2lkaWFuXCI7XG5cbmltcG9ydCBJY29uU0MgZnJvbSBcIi4uL2lzYy1tYWluXCI7XG5cbmNvbnN0IGdldE1lbnUgPSAoXG4gIHN0YXJ0OiBudW1iZXIsXG4gIGVuZDogbnVtYmVyLFxuICBwbHVnaW46IEljb25TQyxcbiAgdmlldzogRWRpdG9yVmlldyxcbikgPT4ge1xuICByZXR1cm4gbmV3IE1lbnUoKVxuICAgIC5hZGRJdGVtKChpdGVtKSA9PlxuICAgICAgaXRlbVxuICAgICAgICAuc2V0SWNvbihcImltYWdlLWdseXBoXCIpXG4gICAgICAgIC5zZXRUaXRsZShcIkNoYW5nZSBJY29uXCIpXG4gICAgICAgIC5vbkNsaWNrKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCBpY29uID0gYXdhaXQgcGx1Z2luLmFwaS5nZXRJY29uRnJvbVVzZXIoKTtcbiAgICAgICAgICBpZiAoIWljb24pIHJldHVybjtcbiAgICAgICAgICB2aWV3LmRpc3BhdGNoKHtcbiAgICAgICAgICAgIGNoYW5nZXM6IHsgZnJvbTogc3RhcnQsIHRvOiBlbmQsIGluc2VydDogYDoke2ljb24uaWR9OmAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSksXG4gICAgKVxuICAgIC5hZGRJdGVtKChpdGVtKSA9PlxuICAgICAgaXRlbVxuICAgICAgICAuc2V0SWNvbihcInRyYXNoXCIpXG4gICAgICAgIC5zZXRUaXRsZShcIkRlbGV0ZSBJY29uXCIpXG4gICAgICAgIC5vbkNsaWNrKCgpID0+IHtcbiAgICAgICAgICB2aWV3LmRpc3BhdGNoKHtcbiAgICAgICAgICAgIGNoYW5nZXM6IHsgZnJvbTogc3RhcnQsIHRvOiBlbmQsIGluc2VydDogXCJcIiB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KSxcbiAgICApO1xufTtcbmV4cG9ydCBkZWZhdWx0IGdldE1lbnU7XG4iLCAiaW1wb3J0IHR5cGUgSWNvblNDIGZyb20gXCIuLi9pc2MtbWFpblwiO1xuaW1wb3J0IGdldEljb25MaXZlUHJldmlld1BsdWdpbiBmcm9tIFwiLi92aWV3LXBsdWdpblwiO1xuXG5jb25zdCBzZXR1cEljb25QbHVnaW4gPSAocGx1Z2luOiBJY29uU0MpID0+IHtcbiAgcGx1Z2luLnJlZ2lzdGVyRWRpdG9yRXh0ZW5zaW9uKFtcbiAgICBwbHVnaW4uc2hvcnRjb2RlUG9zRmllbGQsXG4gICAgZ2V0SWNvbkxpdmVQcmV2aWV3UGx1Z2luKHBsdWdpbiksXG4gIF0pO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgc2V0dXBJY29uUGx1Z2luO1xuIiwgImltcG9ydCB7IHN5bnRheFRyZWUgfSBmcm9tIFwiQGNvZGVtaXJyb3IvbGFuZ3VhZ2VcIjtcbmltcG9ydCB7IHRva2VuQ2xhc3NOb2RlUHJvcCB9IGZyb20gXCJAY29kZW1pcnJvci9sYW5ndWFnZVwiO1xuaW1wb3J0IHtcbiAgUmFuZ2UsXG4gIFJhbmdlU2V0LFxuICBSYW5nZVNldEJ1aWxkZXIsXG4gIFJhbmdlVmFsdWUsXG59IGZyb20gXCJAY29kZW1pcnJvci9zdGF0ZVwiO1xuaW1wb3J0IHsgRWRpdG9yU3RhdGUsIFN0YXRlRmllbGQgfSBmcm9tIFwiQGNvZGVtaXJyb3Ivc3RhdGVcIjtcbmltcG9ydCB0eXBlIHsgTm9kZVR5cGUgfSBmcm9tIFwiQGxlemVyL2NvbW1vblwiO1xuXG5pbXBvcnQge1xuICBnZXRHbG9iYWxSZWdleHAsXG4gIFJFX1NIT1JUQ09ERSxcbiAgc3RyaXBDb2xvbnMsXG59IGZyb20gXCIuLi9pY29uLXBhY2tzL3V0aWxzXCI7XG5pbXBvcnQgdHlwZSBJY29uU0MgZnJvbSBcIi4uL2lzYy1tYWluXCI7XG5pbXBvcnQgVW5pb25SYW5nZXMgZnJvbSBcIi4uL21vZHVsZXMvdW5pb25cIjtcblxuY2xhc3MgU2hvcnRjb2RlUG9zIGV4dGVuZHMgUmFuZ2VWYWx1ZSB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB0ZXh0OiBzdHJpbmcpIHtcbiAgICBzdXBlcigpO1xuICB9XG4gIGdldCBpY29uSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3RyaXBDb2xvbnModGhpcy50ZXh0KTtcbiAgfVxuICBlcShvdGhlcjogUmFuZ2VWYWx1ZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBvdGhlciBpbnN0YW5jZW9mIFNob3J0Y29kZVBvcyAmJiBvdGhlci50ZXh0ID09PSB0aGlzLnRleHQ7XG4gIH1cbn1cblxuY29uc3QgYWxsb3dlZFR5cGVzID0gW1xuICBcImxpbmstYWxpYXNcIixcbiAgXCJjb21tZW50XCIsXG4gIFwiaGVhZGVyXCIsXG4gIFwic3Ryb25nXCIsXG4gIFwiZW1cIixcbiAgXCJzdHJpa2V0aHJvdWdoXCIsXG4gIFwicXVvdGVcIixcbiAgXCJsaW5rXCIsXG4gIFwibGlzdC0xXCIsXG4gIFwibGlzdC0yXCIsXG4gIFwibGlzdC0zXCIsXG4gIFwiaGlnaGxpZ2h0XCIsXG4gIFwiaG1kLWZvb3RyZWYyXCIsXG4gIFwiZm9vdHJlZlwiLFxuXTtcbmNvbnN0IGV4Y2x1ZGVUeXBlcyA9IFtcImZvcm1hdHRpbmdcIiwgXCJjb21tZW50LXN0YXJ0XCIsIFwiY29tbWVudC1lbmRcIl07XG5jb25zdCBzaG91bGROb2RlSGF2ZUljb24gPSAodHlwZTogTm9kZVR5cGUpID0+IHtcbiAgY29uc3Qgbm9kZVByb3BzID0gdHlwZS5wcm9wKHRva2VuQ2xhc3NOb2RlUHJvcCk7XG4gIGlmICghbm9kZVByb3BzKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHByb3BzID0gbmV3IFNldChub2RlUHJvcHM/LnNwbGl0KFwiIFwiKSk7XG4gIHJldHVybiAoXG4gICAgZXhjbHVkZVR5cGVzLmV2ZXJ5KCh0KSA9PiAhcHJvcHMuaGFzKHQpKSAmJlxuICAgIGFsbG93ZWRUeXBlcy5zb21lKCh0KSA9PiBwcm9wcy5oYXModCkpXG4gICk7XG59O1xuXG5jb25zdCBnZXRTaG9ydGNvZGVQb3NGaWVsZCA9IChwbHVnaW46IEljb25TQykgPT4ge1xuICBjb25zdCBnZXRTaG9ydGNvZGVSYW5nZXMgPSAoXG4gICAgc3RhdGU6IEVkaXRvclN0YXRlLFxuICAgIGZyb206IG51bWJlcixcbiAgICB0bzogbnVtYmVyLFxuICAgIGFkZFRvUmFuZ2VBcnI6IChmcm9tOiBudW1iZXIsIHRvOiBudW1iZXIsIHZhbHVlOiBTaG9ydGNvZGVQb3MpID0+IHZvaWQsXG4gICkgPT4ge1xuICAgIGNvbnN0IHNhdmVSYW5nZSA9IChmcm9tOiBudW1iZXIsIHRvOiBudW1iZXIpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IHRleHQgPSBzdGF0ZS5kb2Muc2xpY2VTdHJpbmcoZnJvbSwgdG8pO1xuICAgICAgaWYgKCF0ZXh0LnRyaW0oKSkgcmV0dXJuO1xuICAgICAgZm9yIChjb25zdCB7IDA6IHJhd0NvZGUsIGluZGV4OiBvZmZzZXQgfSBvZiB0ZXh0Lm1hdGNoQWxsKFxuICAgICAgICBnZXRHbG9iYWxSZWdleHAoUkVfU0hPUlRDT0RFKSxcbiAgICAgICkpIHtcbiAgICAgICAgaWYgKHBsdWdpbi5wYWNrTWFuYWdlci5oYXNJY29uKHN0cmlwQ29sb25zKHJhd0NvZGUpKSkge1xuICAgICAgICAgIGFkZFRvUmFuZ2VBcnIoXG4gICAgICAgICAgICBmcm9tICsgb2Zmc2V0ISxcbiAgICAgICAgICAgIGZyb20gKyBvZmZzZXQhICsgcmF3Q29kZS5sZW5ndGgsXG4gICAgICAgICAgICBuZXcgU2hvcnRjb2RlUG9zKHJhd0NvZGUpLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGxldCBwcmV2VG8gPSBmcm9tO1xuICAgIHN5bnRheFRyZWUoc3RhdGUpLml0ZXJhdGUoe1xuICAgICAgZnJvbTogZnJvbSAtIDEsXG4gICAgICB0bzogdG8gKyAxLFxuICAgICAgZW50ZXI6ICh7IHR5cGUsIGZyb20sIHRvIH0pID0+IHtcbiAgICAgICAgaWYgKHR5cGUubmFtZSA9PT0gXCJEb2N1bWVudFwiKSByZXR1cm47XG4gICAgICAgIGlmIChmcm9tICE9PSBwcmV2VG8pIHNhdmVSYW5nZShwcmV2VG8sIGZyb20pO1xuICAgICAgICBwcmV2VG8gPSB0bztcbiAgICAgICAgaWYgKHNob3VsZE5vZGVIYXZlSWNvbih0eXBlKSkge1xuICAgICAgICAgIHNhdmVSYW5nZShmcm9tLCB0byk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSk7XG4gICAgaWYgKHByZXZUbyAhPT0gdG8pIHNhdmVSYW5nZShwcmV2VG8sIHRvKTtcbiAgfTtcbiAgcmV0dXJuIFN0YXRlRmllbGQuZGVmaW5lPFJhbmdlU2V0PFNob3J0Y29kZVBvcz4+KHtcbiAgICBjcmVhdGU6IChzdGF0ZSkgPT4ge1xuICAgICAgbGV0IHJhbmdlc2V0ID0gbmV3IFJhbmdlU2V0QnVpbGRlcjxTaG9ydGNvZGVQb3M+KCk7XG4gICAgICBnZXRTaG9ydGNvZGVSYW5nZXMoXG4gICAgICAgIHN0YXRlLFxuICAgICAgICAwLFxuICAgICAgICBzdGF0ZS5kb2MubGVuZ3RoLFxuICAgICAgICByYW5nZXNldC5hZGQuYmluZChyYW5nZXNldCksXG4gICAgICApO1xuICAgICAgcmV0dXJuIHJhbmdlc2V0LmZpbmlzaCgpO1xuICAgIH0sXG4gICAgdXBkYXRlOiAocmFuZ2VzZXQsIHRyKSA9PiB7XG4gICAgICBpZiAoIXRyLmRvY0NoYW5nZWQpIHJldHVybiByYW5nZXNldDtcbiAgICAgIHJhbmdlc2V0ID0gcmFuZ2VzZXQubWFwKHRyLmNoYW5nZXMpO1xuICAgICAgbGV0IGNoYW5nZWRMaW5lczogW2xpbmVTdGFydDogbnVtYmVyLCBsaW5lRW5kOiBudW1iZXJdW10gPSBbXTtcbiAgICAgIHRyLmNoYW5nZXMuaXRlckNoYW5nZWRSYW5nZXMoKF9mLCBfdCwgZnJvbSwgdG8pID0+IHtcbiAgICAgICAgLy8gbGluZXMgdGhhdCBoYXZlIGNoYW5nZWRcbiAgICAgICAgY2hhbmdlZExpbmVzLnB1c2goW1xuICAgICAgICAgIHRyLnN0YXRlLmRvYy5saW5lQXQoZnJvbSkubnVtYmVyLFxuICAgICAgICAgIHRyLnN0YXRlLmRvYy5saW5lQXQodG8pLm51bWJlcixcbiAgICAgICAgXSk7XG4gICAgICB9KTtcbiAgICAgIGxldCBuZXdTaG9ydGNvZGVSYW5nZXM6IFJhbmdlPFNob3J0Y29kZVBvcz5bXSA9IFtdO1xuICAgICAgZm9yIChjb25zdCBbc3RhcnQsIGVuZF0gb2YgVW5pb25SYW5nZXMoY2hhbmdlZExpbmVzKSkge1xuICAgICAgICBjb25zdCB7IGZyb20gfSA9IHRyLnN0YXRlLmRvYy5saW5lKHN0YXJ0KSxcbiAgICAgICAgICB7IHRvIH0gPSB0ci5zdGF0ZS5kb2MubGluZShlbmQpO1xuICAgICAgICAvLyBmaWx0ZXIgb3V0IHNob3J0Y29kZSBwb3MgaW4gY3VycmVudCBsaW5lIHJhbmdlXG4gICAgICAgIHJhbmdlc2V0ID0gcmFuZ2VzZXQudXBkYXRlKHtcbiAgICAgICAgICBmaWx0ZXJGcm9tOiBmcm9tLFxuICAgICAgICAgIGZpbHRlclRvOiB0byxcbiAgICAgICAgICBmaWx0ZXI6ICgpID0+IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gcmVjb21wdXRlIHNob3J0Y29kZSBwb3MgaW4gY3VycmVudCBsaW5lIHJhbmdlXG4gICAgICAgIGdldFNob3J0Y29kZVJhbmdlcyh0ci5zdGF0ZSwgZnJvbSwgdG8sIChmcm9tLCB0bywgdmFsdWUpID0+IHtcbiAgICAgICAgICBuZXdTaG9ydGNvZGVSYW5nZXMucHVzaCh2YWx1ZS5yYW5nZShmcm9tLCB0bykpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJhbmdlc2V0ID0gcmFuZ2VzZXQudXBkYXRlKHsgYWRkOiBuZXdTaG9ydGNvZGVSYW5nZXMgfSk7XG4gICAgICByZXR1cm4gcmFuZ2VzZXQ7XG4gICAgfSxcbiAgfSk7XG59O1xuZXhwb3J0IHR5cGUgU2hvcnRjb2RlUG9zRmllbGQgPSBTdGF0ZUZpZWxkPFJhbmdlU2V0PFNob3J0Y29kZVBvcz4+O1xuXG5leHBvcnQgZGVmYXVsdCBnZXRTaG9ydGNvZGVQb3NGaWVsZDtcbiIsICJpbXBvcnQgeyBleHRlbnNpb24sIGxvb2t1cCB9IGZyb20gXCJtaW1lLXR5cGVzXCI7XG5pbXBvcnQgZW1vamkgZnJvbSBcIm5vZGUtZW1vamlcIjtcbmltcG9ydCB7IGV4dG5hbWUgfSBmcm9tIFwicGF0aFwiO1xuXG5pbXBvcnQgeyBGaWxlSWNvbkluZm8sIEljb25JbmZvIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuZXhwb3J0IHR5cGUgRW50cmllc0Zyb21SZWNvcmQ8VD4gPSBba2V5OiBrZXlvZiBULCB2YWx1ZTogVFtrZXlvZiBUXV1bXTtcblxuZXhwb3J0IGNvbnN0IE9ianRvRW50cmllcyA9IDxUIGV4dGVuZHMgT2JqZWN0PihvYmo6IFQpID0+XG4gIE9iamVjdC5lbnRyaWVzKG9iaikgYXMgRW50cmllc0Zyb21SZWNvcmQ8VD47XG5cbi8qKlxuICogUmVtb3ZlcyBjb2xvbnMgb24gZWl0aGVyIHNpZGVcbiAqIG9mIHRoZSBzdHJpbmcgaWYgcHJlc2VudFxuICogQHBhcmFtICB7c3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuXG5leHBvcnQgY29uc3Qgc3RyaXBDb2xvbnMgPSAoc3RyOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICB2YXIgY29sb25JbmRleCA9IHN0ci5pbmRleE9mKFwiOlwiKTtcbiAgaWYgKGNvbG9uSW5kZXggPiAtMSkge1xuICAgIC8vIDplbW9qaTogKGh0dHA6Ly93d3cuZW1vamktY2hlYXQtc2hlZXQuY29tLylcbiAgICBpZiAoY29sb25JbmRleCA9PT0gc3RyLmxlbmd0aCAtIDEpIHtcbiAgICAgIHN0ciA9IHN0ci5zdWJzdHJpbmcoMCwgY29sb25JbmRleCk7XG4gICAgICByZXR1cm4gc3RyaXBDb2xvbnMoc3RyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RyID0gc3RyLnN1YnN0cmluZyhjb2xvbkluZGV4ICsgMSk7XG4gICAgICByZXR1cm4gc3RyaXBDb2xvbnMoc3RyKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RyO1xufTtcblxuZXhwb3J0IGNvbnN0IFBhY2tQcmVmaXhQYXR0ZXJuID0gL14oW0EtWmEtejAtOV0rPylfLztcblxuZXhwb3J0IGNvbnN0IGdldFBhY2tuTmFtZUZyb21JZCA9IChcbiAgaWQ6IHN0cmluZyxcbik6IHsgcGFjazogc3RyaW5nOyBuYW1lOiBzdHJpbmcgfSB8IG51bGwgPT4ge1xuICBpZiAoZW1vamkuaGFzRW1vamkoaWQpKSByZXR1cm4geyBwYWNrOiBcImVtb2ppXCIsIG5hbWU6IGlkIH07XG4gIGNvbnN0IG1hdGNoID0gaWQubWF0Y2goUGFja1ByZWZpeFBhdHRlcm4pO1xuICBpZiAoIW1hdGNoKSB7XG4gICAgY29uc29sZS5lcnJvcihcIk5vIHZhaWxkIHBhY2sgaWQgZm91bmQgaW46IFwiLCBpZCk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgW3N0ciwgcGFja25hbWVdID0gbWF0Y2g7XG4gIHJldHVybiB7IHBhY2s6IHBhY2tuYW1lLCBuYW1lOiBpZC5zdWJzdHJpbmcoc3RyLmxlbmd0aCkgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBzYW5pdGl6ZUlkID0gKGlkOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsID0+IHtcbiAgY29uc3QgcmVzdWx0ID0gZ2V0UGFja25OYW1lRnJvbUlkKGlkKTtcbiAgaWYgKCFyZXN1bHQpIHtcbiAgICBjb25zb2xlLmxvZyhcImZhaWxlZCB0byByZW5hbWUgaWNvbjogaWQgJXMgaW52YWxpZFwiLCBpZCk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIGAke3Jlc3VsdC5wYWNrfV8ke3Nhbml0aXplTmFtZShyZXN1bHQubmFtZSl9YDtcbn07XG5leHBvcnQgY29uc3Qgc2FuaXRpemVOYW1lID0gKG5hbWU6IHN0cmluZyk6IHN0cmluZyA9PlxuICBuYW1lLnRyaW0oKS5yZXBsYWNlKC9bIC1dKy9nLCBcIl9cIikucmVwbGFjZSgvXFxzKy9nLCBcIlwiKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuXG5leHBvcnQgY29uc3QgU3VwcG9ydGVkSWNvbkV4dCA9IFtcbiAgXCIuYm1wXCIsXG4gIFwiLnBuZ1wiLFxuICBcIi5qcGdcIixcbiAgXCIuanBlZ1wiLFxuICBcIi5naWZcIixcbiAgXCIuc3ZnXCIsXG4gIFwiLndlYnBcIixcbl0gYXMgY29uc3Q7XG5leHBvcnQgY29uc3QgaWNvbkZpbGVQYXR0ZXJuID0gL15bXFx3LV0rXFwuKD86Ym1wfHBuZ3xqcGd8anBlZ3xnaWZ8c3ZnfHdlYnApJC87XG5leHBvcnQgY29uc3QgZXh0UGF0dGVybiA9IC9cXC4oPzpibXB8cG5nfGpwZ3xqcGVnfGdpZnxzdmd8d2VicCkkLztcbmNvbnN0IG1pbWVzID0gU3VwcG9ydGVkSWNvbkV4dC5tYXAoKGV4dCkgPT4gbG9va3VwKGV4dCkpO1xuZXhwb3J0IGNvbnN0IGdldEljb25zRnJvbUZpbGVMaXN0ID0gYXN5bmMgKFxuICBsaXN0OiBGaWxlTGlzdCB8IG51bGwgfCB1bmRlZmluZWQsXG4pOiBQcm9taXNlPHsgbmFtZTogc3RyaW5nOyBleHQ6IHN0cmluZzsgZGF0YTogQXJyYXlCdWZmZXIgfVtdIHwgbnVsbD4gPT4ge1xuICBpZiAoIWxpc3QgfHwgbGlzdC5sZW5ndGggPD0gMCkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IGdldEljb24gPSBhc3luYyAoZmlsZTogRmlsZSkgPT4gKHtcbiAgICBuYW1lOiBmaWxlLm5hbWUucmVwbGFjZShleHRQYXR0ZXJuLCBcIlwiKSxcbiAgICBleHQ6IFwiLlwiICsgKGV4dGVuc2lvbihmaWxlLnR5cGUpIGFzIHN0cmluZyksXG4gICAgZGF0YTogYXdhaXQgZmlsZS5hcnJheUJ1ZmZlcigpLFxuICB9KTtcbiAgbGV0IHByb21pc2VzID0gW10gYXMgUmV0dXJuVHlwZTx0eXBlb2YgZ2V0SWNvbj5bXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgZmlsZSA9IGxpc3RbaV07XG4gICAgaWYgKG1pbWVzLmluY2x1ZGVzKGZpbGUudHlwZSkpIHtcbiAgICAgIHByb21pc2VzLnB1c2goZ2V0SWNvbihmaWxlKSk7XG4gICAgfVxuICB9XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcbiAgcmV0dXJuIHJlc3VsdC5sZW5ndGggPiAwID8gcmVzdWx0IDogbnVsbDtcbn07XG5cbmltcG9ydCBjbGFzc05hbWVzIGZyb20gXCJjbGFzc25hbWVzXCI7XG5pbXBvcnQgY2xvbmVSZWdleHAgZnJvbSBcImNsb25lLXJlZ2V4cFwiO1xuXG5pbXBvcnQgSWNvblNDIGZyb20gXCIuLi9pc2MtbWFpblwiO1xuXG5leHBvcnQgY29uc3QgUkVfU0hPUlRDT0RFID0gLzpcXCsxOnw6LTE6fDpbXFx3LV0rOi87XG5leHBvcnQgY29uc3QgZ2V0R2xvYmFsUmVnZXhwID0gKHBhdHRlcm46IFJlZ0V4cCkgPT5cbiAgY2xvbmVSZWdleHAocGF0dGVybiwgeyBnbG9iYWw6IHRydWUgfSk7XG5cbmV4cG9ydCBjb25zdCBnZXRDbHNGb3JJY29uID0gKGljb246IEljb25JbmZvKSA9PlxuICBjbGFzc05hbWVzKFtcImlzYy1pY29uXCIsIGBpc2MtJHtpY29uLnBhY2t9YF0pO1xuIiwgImNvbnN0IHt0b1N0cmluZ30gPSBPYmplY3QucHJvdG90eXBlO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc1JlZ2V4cCh2YWx1ZSkge1xuXHRyZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IFJlZ0V4cF0nO1xufVxuIiwgImltcG9ydCBpc1JlZ2V4cCBmcm9tICdpcy1yZWdleHAnO1xuXG5jb25zdCBmbGFnTWFwID0ge1xuXHRnbG9iYWw6ICdnJyxcblx0aWdub3JlQ2FzZTogJ2knLFxuXHRtdWx0aWxpbmU6ICdtJyxcblx0ZG90QWxsOiAncycsXG5cdHN0aWNreTogJ3knLFxuXHR1bmljb2RlOiAndSdcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNsb25lZFJlZ2V4cChyZWdleHAsIG9wdGlvbnMgPSB7fSkge1xuXHRpZiAoIWlzUmVnZXhwKHJlZ2V4cCkpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBhIFJlZ0V4cCBpbnN0YW5jZScpO1xuXHR9XG5cblx0Y29uc3QgZmxhZ3MgPSBPYmplY3Qua2V5cyhmbGFnTWFwKS5tYXAoZmxhZyA9PiAoXG5cdFx0KHR5cGVvZiBvcHRpb25zW2ZsYWddID09PSAnYm9vbGVhbicgPyBvcHRpb25zW2ZsYWddIDogcmVnZXhwW2ZsYWddKSA/IGZsYWdNYXBbZmxhZ10gOiAnJ1xuXHQpKS5qb2luKCcnKTtcblxuXHRjb25zdCBjbG9uZWRSZWdleHAgPSBuZXcgUmVnRXhwKG9wdGlvbnMuc291cmNlIHx8IHJlZ2V4cC5zb3VyY2UsIGZsYWdzKTtcblxuXHRjbG9uZWRSZWdleHAubGFzdEluZGV4ID0gdHlwZW9mIG9wdGlvbnMubGFzdEluZGV4ID09PSAnbnVtYmVyJyA/XG5cdFx0b3B0aW9ucy5sYXN0SW5kZXggOlxuXHRcdHJlZ2V4cC5sYXN0SW5kZXg7XG5cblx0cmV0dXJuIGNsb25lZFJlZ2V4cDtcbn1cbiIsICJ0eXBlIFBvc1JhbmdlID0gW3N0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyXTtcblxuY29uc3QgaXNSYW5nZU92ZXJsYXAgPSAoYTogUG9zUmFuZ2UsIGI6IFBvc1JhbmdlKSA9PlxuICBpc1dpdGhpblJhbmdlKGEsIGJbMF0pIHx8IGlzV2l0aGluUmFuZ2UoYSwgYlsxXSk7XG5jb25zdCBpc1dpdGhpblJhbmdlID0gKHI6IFBvc1JhbmdlLCBwb3M6IG51bWJlcikgPT4gclswXSA8IHBvcyAmJiByWzFdID4gcG9zO1xuXG5jb25zdCBtZXJnZVJhbmdlcyA9IChhOiBQb3NSYW5nZSwgYjogUG9zUmFuZ2UpID0+IHtcbiAgY29uc3Qgc3RhcnQgPSBpc1dpdGhpblJhbmdlKGEsIGJbMF0pID8gYVswXSA6IGJbMF0sXG4gICAgZW5kID0gaXNXaXRoaW5SYW5nZShhLCBiWzFdKSA/IGFbMV0gOiBiWzFdO1xuICByZXR1cm4gW3N0YXJ0LCBlbmRdIGFzIFBvc1JhbmdlO1xufTtcblxuY29uc3QgVW5pb25SYW5nZXMgPSAocmFuZ2VzOiBQb3NSYW5nZVtdKSA9PlxuICByYW5nZXNcbiAgICAuc29ydCgoYSwgYikgPT4gYVswXSAtIGJbMF0pXG4gICAgLnJlZHVjZSgoYXJyLCByYW5nZSkgPT4ge1xuICAgICAgbGV0IGluZGV4ID0gYXJyLmZpbmRJbmRleCgocmFuZ2VUb0NoZWNrKSA9PlxuICAgICAgICBpc1JhbmdlT3ZlcmxhcChyYW5nZVRvQ2hlY2ssIHJhbmdlKSxcbiAgICAgICk7XG4gICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgIGFycltpbmRleF0gPSBtZXJnZVJhbmdlcyhhcnJbaW5kZXhdLCByYW5nZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhcnIucHVzaChyYW5nZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYXJyO1xuICAgIH0sIFtdIGFzIFBvc1JhbmdlW10pO1xuXG5leHBvcnQgZGVmYXVsdCBVbmlvblJhbmdlcztcbiIsICJpbXBvcnQgeyBTdGF0IH0gZnJvbSBcIm9ic2lkaWFuXCI7XG5cbmltcG9ydCB0eXBlIEljb25TQyBmcm9tIFwiLi4vaXNjLW1haW5cIjtcblxuZGVjbGFyZSBnbG9iYWwge1xuICBjb25zdCBET01QdXJpZnk6IHR5cGVvZiBpbXBvcnQoXCJkb21wdXJpZnlcIik7XG59XG5cbmludGVyZmFjZSBJY29uQ2FjaGUge1xuICBjdGltZTogbnVtYmVyO1xuICBtdGltZTogbnVtYmVyO1xuICBzaXplOiBudW1iZXI7XG4gIHN2ZzogU1ZHRWxlbWVudDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmlsZUljb25DYWNoZSB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBwbHVnaW46IEljb25TQykge31cbiAgcHJpdmF0ZSBnZXQgdmF1bHQoKSB7XG4gICAgcmV0dXJuIHRoaXMucGx1Z2luLmFwcC52YXVsdDtcbiAgfVxuICBwcml2YXRlIGNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIEljb25DYWNoZT4oKTtcbiAgYXN5bmMgZ2V0SWNvbihub3JtYWxpemVkUGF0aDogc3RyaW5nKTogUHJvbWlzZTxTVkdFbGVtZW50IHwgbnVsbD4ge1xuICAgIGNvbnN0IHN0YXQgPSBhd2FpdCB0aGlzLnZhdWx0LmFkYXB0ZXIuc3RhdChub3JtYWxpemVkUGF0aCk7XG4gICAgaWYgKCFzdGF0IHx8IHN0YXQudHlwZSAhPT0gXCJmaWxlXCIpIHJldHVybiBudWxsO1xuICAgIGlmICh0aGlzLmNhY2hlLmhhcyhub3JtYWxpemVkUGF0aCkpIHtcbiAgICAgIGNvbnN0IGNhY2hlID0gdGhpcy5jYWNoZS5nZXQobm9ybWFsaXplZFBhdGgpITtcbiAgICAgIGlmIChcbiAgICAgICAgY2FjaGUuY3RpbWUgPT09IHN0YXQuY3RpbWUgJiZcbiAgICAgICAgY2FjaGUubXRpbWUgPT09IHN0YXQubXRpbWUgJiZcbiAgICAgICAgY2FjaGUuc2l6ZSA9PT0gc3RhdC5zaXplXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIGNhY2hlLnN2Zy5jbG9uZU5vZGUodHJ1ZSkgYXMgU1ZHRWxlbWVudDtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgc3ZnID0gYXdhaXQgdGhpcy5yZWFkSW50b0NhY2hlKG5vcm1hbGl6ZWRQYXRoLCBzdGF0KTtcbiAgICByZXR1cm4gc3ZnLmNsb25lTm9kZSh0cnVlKSBhcyBTVkdFbGVtZW50O1xuICB9XG4gIHByaXZhdGUgYXN5bmMgcmVhZEludG9DYWNoZShcbiAgICBub3JtYWxpemVkUGF0aDogc3RyaW5nLFxuICAgIHN0YXQ6IFN0YXQsXG4gICk6IFByb21pc2U8U1ZHRWxlbWVudD4ge1xuICAgIGNvbnN0IGRhdGEgPSBET01QdXJpZnkuc2FuaXRpemUoXG4gICAgICAgIGF3YWl0IHRoaXMudmF1bHQuYWRhcHRlci5yZWFkKG5vcm1hbGl6ZWRQYXRoKSxcbiAgICAgICksXG4gICAgICBzdmcgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKGRhdGEsIFwiaW1hZ2Uvc3ZnK3htbFwiKVxuICAgICAgICAuZG9jdW1lbnRFbGVtZW50IGFzIHVua25vd24gYXMgU1ZHRWxlbWVudDtcbiAgICB0aGlzLmNhY2hlLnNldChub3JtYWxpemVkUGF0aCwgeyAuLi5zdGF0LCBzdmcgfSk7XG4gICAgcmV0dXJuIHN2ZztcbiAgfVxuICByZWZyZXNoKCkge1xuICAgIGNvbnN0IHJlZnJlc2ggPSBhc3luYyAocGF0aDogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBzdGF0ID0gYXdhaXQgdGhpcy52YXVsdC5hZGFwdGVyLnN0YXQocGF0aCk7XG4gICAgICBpZiAoIXN0YXQgfHwgc3RhdC50eXBlICE9PSBcImZpbGVcIikge1xuICAgICAgICB0aGlzLmNhY2hlLmRlbGV0ZShwYXRoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IHRoaXMucmVhZEludG9DYWNoZShwYXRoLCBzdGF0KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwYXRoO1xuICAgIH07XG4gICAgcmV0dXJuIFByb21pc2UuYWxsU2V0dGxlZChbLi4udGhpcy5jYWNoZS5rZXlzKCldLm1hcChyZWZyZXNoKSk7XG4gIH1cbiAgY2xlYXIoKSB7XG4gICAgdGhpcy5jYWNoZS5jbGVhcigpO1xuICB9XG59XG4iLCAiaW1wb3J0IFwiLi9pY29uLmxlc3NcIjtcblxuaW1wb3J0IGFzc2VydE5ldmVyIGZyb20gXCJhc3NlcnQtbmV2ZXJcIjtcbmltcG9ydCBGdXNlIGZyb20gXCJmdXNlLmpzXCI7XG5pbXBvcnQgSlNaaXAgZnJvbSBcImpzemlwXCI7XG5pbXBvcnQgZW1vamkgZnJvbSBcIm5vZGUtZW1vamlcIjtcbmltcG9ydCB7IEV2ZW50UmVmLCBFdmVudHMsIG5vcm1hbGl6ZVBhdGgsIE5vdGljZSwgUGxhdGZvcm0gfSBmcm9tIFwib2JzaWRpYW5cIjtcbmltcG9ydCB7IGJhc2VuYW1lLCBqb2luIH0gZnJvbSBcInBhdGhcIjtcblxuaW1wb3J0IEljb25TQyBmcm9tIFwiLi4vaXNjLW1haW5cIjtcbmltcG9ydCB7IGV2dFByZWZpeCwgUE1FdmVudHMgfSBmcm9tIFwiLi4vdHlwaW5ncy9hcGlcIjtcbmltcG9ydCB7XG4gIEJ1aWx0SW5JY29uSWRzLFxuICBCdWlsdEluSWNvblBhY2tuYW1lcyxcbiAgQnVpbHRJblNWR0ljb25QYWNrcyxcbn0gZnJvbSBcIi4vYnVpbHQtaW5zXCI7XG5pbXBvcnQgRW1vamlJY29uRGF0YSBmcm9tIFwiLi9lbW9qaVwiO1xuaW1wb3J0IEZpbGVJY29uRGF0YSBmcm9tIFwiLi9maWxlLWljb25cIjtcbmltcG9ydCB7IEJ1bHRpSW5JY29uRGF0YSwgSWNvbkRhdGEsIEljb25JbmZvLCBpc0ZpbGVJY29uSW5mbyB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQge1xuICBleHRQYXR0ZXJuLFxuICBnZXRJY29uc0Zyb21GaWxlTGlzdCxcbiAgaWNvbkZpbGVQYXR0ZXJuLFxuICBzYW5pdGl6ZUlkLFxuICBzdHJpcENvbG9ucyxcbn0gZnJvbSBcIi4vdXRpbHNcIjtcblxuY29uc3QgQ1VTVE9NX0lDT05fUEFUSCA9IFwiL2ljb25zLmpzb25cIjtcbmNvbnN0IENVU1RPTV9JQ09OX0RJUiA9IFwiaWNvbnNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFja01hbmFnZXIgZXh0ZW5kcyBFdmVudHMge1xuICBwcml2YXRlIF9jdXN0b21JY29ucyA9IG5ldyBNYXA8c3RyaW5nLCBGaWxlSWNvbkRhdGE+KCk7XG4gIHByaXZhdGUgX2N1dG9tc0ljb25QYWNrbmFtZXM6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpO1xuICBnZXQgdmF1bHQoKSB7XG4gICAgcmV0dXJuIHRoaXMucGx1Z2luLmFwcC52YXVsdDtcbiAgfVxuICBhc3luYyByZW5hbWVJY29uRmlsZShcbiAgICBpZDogc3RyaW5nLFxuICAgIGV4dDogc3RyaW5nLFxuICAgIG5ld0lkOiBzdHJpbmcsXG4gICk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgbmV3UGF0aCA9IGpvaW4odGhpcy5jdXN0b21JY29uc0RpciwgbmV3SWQgKyBleHQpLFxuICAgICAgcGF0aCA9IGpvaW4odGhpcy5jdXN0b21JY29uc0RpciwgaWQgKyBleHQpO1xuICAgIGF3YWl0IHRoaXMudmF1bHQuYWRhcHRlci5yZW5hbWUocGF0aCwgbmV3UGF0aCk7XG4gICAgcmV0dXJuIG5ld1BhdGg7XG4gIH1cbiAgcmVtb3ZlSWNvbkZpbGUoaWQ6IHN0cmluZywgZXh0OiBzdHJpbmcpIHtcbiAgICBjb25zdCBwYXRoID0gam9pbih0aGlzLmN1c3RvbUljb25zRGlyLCBpZCArIGV4dCk7XG4gICAgcmV0dXJuIHRoaXMudmF1bHQuYWRhcHRlci5yZW1vdmUocGF0aCk7XG4gIH1cbiAgYXN5bmMgYWRkSWNvbihpZDogc3RyaW5nLCBleHQ6IHN0cmluZywgZGF0YTogQXJyYXlCdWZmZXIpIHtcbiAgICBjb25zdCBwYXRoID0gam9pbih0aGlzLmN1c3RvbUljb25zRGlyLCBpZCArIGV4dCk7XG4gICAgYXdhaXQgdGhpcy52YXVsdC5hZGFwdGVyLndyaXRlQmluYXJ5KHBhdGgsIGRhdGEpO1xuICAgIHJldHVybiBwYXRoO1xuICB9XG4gIGdldCBjdXN0b21QYWNrbmFtZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbLi4udGhpcy5fY3V0b21zSWNvblBhY2tuYW1lc107XG4gIH1cbiAgZ2V0IGN1c3RvbUljb25zRmlsZVBhdGgoKSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZVBhdGgodGhpcy5wbHVnaW4ubWFuaWZlc3QuZGlyICsgQ1VTVE9NX0lDT05fUEFUSCk7XG4gIH1cbiAgZ2V0IGN1c3RvbUljb25zRGlyKCkge1xuICAgIHJldHVybiBqb2luKHRoaXMudmF1bHQuY29uZmlnRGlyLCBDVVNUT01fSUNPTl9ESVIpO1xuICB9XG4gIGlzUGFja25hbWVFeGlzdHMocGFja25hbWU6IHN0cmluZykge1xuICAgIHJldHVybiAoXG4gICAgICBCdWlsdEluSWNvblBhY2tuYW1lcy5pbmNsdWRlcyhwYWNrbmFtZSkgfHxcbiAgICAgIHRoaXMuX2N1dG9tc0ljb25QYWNrbmFtZXMuaGFzKHBhY2tuYW1lKVxuICAgICk7XG4gIH1cbiAgZ2V0IGVuYWJsZWRQYWNrbmFtZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbLi4uQnVpbHRJbkljb25QYWNrbmFtZXMsIC4uLnRoaXMuX2N1dG9tc0ljb25QYWNrbmFtZXNdLmZpbHRlcihcbiAgICAgIChwYWNrKSA9PiB0aGlzLmlzUGFja0VuYWJsZWQocGFjayksXG4gICAgKTtcbiAgfVxuXG4gIGhhc0ljb24oaWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc0J1aWx0SW4oaWQpIHx8IHRoaXMuX2N1c3RvbUljb25zLmhhcyhpZCk7XG4gIH1cbiAgcHJpdmF0ZSBfaXNCdWlsdEluKGlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZW1vamkuaGFzRW1vamkoaWQpIHx8IEJ1aWx0SW5TVkdJY29uUGFja3MuaGFzKGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gaWQgYWNjZXB0IHNob3J0Y29kZSB3aXRoIGNvbG9uc1xuICAgKiBAcGFyYW0gcmF3IGlmIGdpdmVuLCByZXR1cm4gcmVzb3VyY2UgcGF0aCB0byBpY29uIGZpbGUgaW5zdGVhZCBvZiBpbWcgZWxlbWVudFxuICAgKi9cbiAgZ2V0SWNvbihpZDogc3RyaW5nLCByYXc6IHRydWUpOiBzdHJpbmcgfCBudWxsO1xuICBnZXRJY29uKGlkOiBzdHJpbmcsIHJhdz86IGZhbHNlKTogSFRNTFNwYW5FbGVtZW50IHwgbnVsbDtcbiAgZ2V0SWNvbihpZDogc3RyaW5nLCByYXcgPSBmYWxzZSk6IHN0cmluZyB8IEhUTUxTcGFuRWxlbWVudCB8IG51bGwge1xuICAgIGlkID0gc3RyaXBDb2xvbnMoaWQpO1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmdldEljb25EYXRhKGlkKTtcbiAgICBpZiAoIWRhdGEpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IGdldERPTSA9ICgpID0+IGRhdGEuZ2V0RE9NKGZhbHNlKTtcbiAgICBzd2l0Y2ggKGRhdGEudHlwZSkge1xuICAgICAgY2FzZSBcImVtb2ppXCI6XG4gICAgICAgIHJldHVybiByYXcgPyBkYXRhLmNoYXIgOiBnZXRET00oKTtcbiAgICAgIGNhc2UgXCJidWx0aS1pblwiOlxuICAgICAgICByZXR1cm4gcmF3ID8gZGF0YS5kYXRhVXJpIDogZ2V0RE9NKCk7XG4gICAgICBjYXNlIFwiZmlsZVwiOlxuICAgICAgICByZXR1cm4gcmF3ID8gZGF0YS5yZXNvdXJjZVBhdGggOiBnZXRET00oKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydE5ldmVyKGRhdGEpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldFNWR0ljb24oaWQ6IHN0cmluZywgcmF3OiB0cnVlKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPjtcbiAgYXN5bmMgZ2V0U1ZHSWNvbihpZDogc3RyaW5nLCByYXc/OiBmYWxzZSk6IFByb21pc2U8SFRNTFNwYW5FbGVtZW50IHwgbnVsbD47XG4gIGFzeW5jIGdldFNWR0ljb24oXG4gICAgaWQ6IHN0cmluZyxcbiAgICByYXcgPSBmYWxzZSxcbiAgKTogUHJvbWlzZTxzdHJpbmcgfCBIVE1MU3BhbkVsZW1lbnQgfCBudWxsPiB7XG4gICAgaWQgPSBzdHJpcENvbG9ucyhpZCk7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuZ2V0SWNvbkRhdGEoaWQpO1xuICAgIGlmICghZGF0YSkgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgZ2V0RE9NID0gKCkgPT4gZGF0YS5nZXRET00odHJ1ZSk7XG4gICAgaWYgKGRhdGEudHlwZSA9PT0gXCJlbW9qaVwiKSB7XG4gICAgICByZXR1cm4gcmF3ID8gZGF0YS5jaGFyIDogZ2V0RE9NKCk7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIGRhdGEudHlwZSA9PT0gXCJidWx0aS1pblwiIHx8XG4gICAgICAoZGF0YS50eXBlID09PSBcImZpbGVcIiAmJiBkYXRhLmlzU1ZHKVxuICAgICkge1xuICAgICAgY29uc3QgZWwgPSBhd2FpdCBnZXRET00oKTtcbiAgICAgIHJldHVybiByYXcgPyBlbC5pbm5lckhUTUwgOiBlbDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHJhdyA/IGRhdGEucmVzb3VyY2VQYXRoIDogZ2V0RE9NKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0SWNvbkRhdGEoaWQ6IHN0cmluZyk6IEljb25EYXRhIHwgbnVsbCB7XG4gICAgaWQgPSBzdHJpcENvbG9ucyhpZCk7XG4gICAgbGV0IGRhdGE6IEljb25EYXRhIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICBpZiAoXG4gICAgICAoZGF0YSA9IEVtb2ppSWNvbkRhdGEuZ2V0RGF0YShpZCkpIHx8XG4gICAgICAoZGF0YSA9IEJ1aWx0SW5TVkdJY29uUGFja3MuZ2V0KGlkKSkgfHxcbiAgICAgIChkYXRhID0gdGhpcy5fY3VzdG9tSWNvbnMuZ2V0KGlkKSlcbiAgICApIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0gZWxzZSByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlzUGFja0VuYWJsZWQocGFjazogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKHBhY2sgPT09IFwiZW1vamlcIikgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuICF0aGlzLnBsdWdpbi5zZXR0aW5ncy5kaXNhYmxlZFBhY2tzLmhhcyhwYWNrKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVmcmVzaFBhY2tOYW1lcygpIHtcbiAgICB0aGlzLl9jdXRvbXNJY29uUGFja25hbWVzLmNsZWFyKCk7XG4gICAgZm9yIChjb25zdCBbLCB7IHBhY2sgfV0gb2YgdGhpcy5fY3VzdG9tSWNvbnMpIHtcbiAgICAgIHRoaXMuX2N1dG9tc0ljb25QYWNrbmFtZXMuYWRkKHBhY2spO1xuICAgIH1cbiAgfVxuICBjb25zdHJ1Y3RvcihwdWJsaWMgcGx1Z2luOiBJY29uU0MpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBfbG9hZGVkID0gZmFsc2U7XG4gIGFzeW5jIGxvYWRJY29ucygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fbG9hZGVkKSB7XG4gICAgICB0aGlzLl9mdXNlLnNldENvbGxlY3Rpb24oW10pO1xuICAgICAgdGhpcy5fY3VzdG9tSWNvbnMuY2xlYXIoKTtcbiAgICAgIHRoaXMuX2N1dG9tc0ljb25QYWNrbmFtZXMuY2xlYXIoKTtcbiAgICAgIHRoaXMuX2xvYWRlZCA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIShhd2FpdCB0aGlzLnZhdWx0LmFkYXB0ZXIuZXhpc3RzKHRoaXMuY3VzdG9tSWNvbnNEaXIpKSkge1xuICAgICAgYXdhaXQgdGhpcy52YXVsdC5hZGFwdGVyLm1rZGlyKHRoaXMuY3VzdG9tSWNvbnNEaXIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpY29ubGlzdCA9IGF3YWl0IHRoaXMudmF1bHQuYWRhcHRlci5saXN0KHRoaXMuY3VzdG9tSWNvbnNEaXIpO1xuXG4gICAgbGV0IGluZm87XG4gICAgY29uc3QgcXVldWUgPSBpY29ubGlzdC5maWxlcy5tYXAoYXN5bmMgKHBhdGgpID0+IHtcbiAgICAgIGlmICghZXh0UGF0dGVybi50ZXN0KHBhdGgpKSByZXR1cm47XG4gICAgICBjb25zdCBpZCA9IGJhc2VuYW1lKHBhdGgpLnJlcGxhY2UoZXh0UGF0dGVybiwgXCJcIik7XG4gICAgICBjb25zdCBpY29uID0gRmlsZUljb25EYXRhLmdldERhdGEoaWQsIHBhdGgsIHRoaXMucGx1Z2luKTtcbiAgICAgIGlmICghaWNvbikge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgXCJGYWlsZWQgdG8gbG9hZCBpY29uIGRhdGEgKHJhdyB2YWx1ZTogJW8pIGZvciBpZCAlcywgc2tpcHBpbmcuLi5cIixcbiAgICAgICAgICBwYXRoLFxuICAgICAgICAgIGlkLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fY3VzdG9tSWNvbnMuc2V0KGlkLCBpY29uKTtcbiAgICAgICAgdGhpcy5fZnVzZS5hZGQoaWNvbik7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZm9yIChjb25zdCByZXN1bHQgb2YgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKHF1ZXVlKSkge1xuICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFwicmVqZWN0ZWRcIilcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkZhaWxlZCB0byBsb2FkIGljb25cIiwgcmVzdWx0LnJlYXNvbik7XG4gICAgfVxuICAgIHRoaXMuX2xvYWRlZCA9IHRydWU7XG4gICAgdGhpcy5yZWZyZXNoUGFja05hbWVzKCk7XG4gICAgdGhpcy50cmlnZ2VyKFwiaW5pdGlhbGl6ZWRcIiwgdGhpcy5wbHVnaW4uYXBpKTtcbiAgfVxuICBhc3luYyBiYWNrdXBJY29ucyhwYWNrPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbGV0IHppcCA9IG5ldyBKU1ppcCgpO1xuICAgIGNvbnN0IGljb25saXN0ID0gYXdhaXQgdGhpcy52YXVsdC5hZGFwdGVyLmxpc3QodGhpcy5jdXN0b21JY29uc0Rpcik7XG4gICAgZm9yIChjb25zdCBmaWxlcGF0aCBvZiBpY29ubGlzdC5maWxlcykge1xuICAgICAgaWYgKCFwYWNrIHx8IGJhc2VuYW1lKGZpbGVwYXRoKS5zdGFydHNXaXRoKHBhY2sgKyBcIl9cIikpIHtcbiAgICAgICAgemlwLmZpbGUoYmFzZW5hbWUoZmlsZXBhdGgpLCB0aGlzLnZhdWx0LmFkYXB0ZXIucmVhZEJpbmFyeShmaWxlcGF0aCkpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBiYWtGaWxlUGF0aCA9IGAke3BhY2sgPz8gXCJjdXN0b20taWNvbnNcIn0uemlwYDtcbiAgICBhd2FpdCB0aGlzLnZhdWx0LmNyZWF0ZUJpbmFyeShcbiAgICAgIGJha0ZpbGVQYXRoLFxuICAgICAgYXdhaXQgemlwLmdlbmVyYXRlQXN5bmMoeyB0eXBlOiBcImFycmF5YnVmZmVyXCIgfSksXG4gICAgKTtcbiAgICBpZiAoUGxhdGZvcm0uaXNEZXNrdG9wQXBwKSB7XG4gICAgICAvLyBvcGVuIHZhdWx0IGRpciBpbiBleHBsb3JlclxuICAgICAgdGhpcy5wbHVnaW4uYXBwLm9wZW5XaXRoRGVmYXVsdEFwcChcIlwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3IE5vdGljZShcbiAgICAgICAgYGljb25zIGhhdmUgYmVlbiBzYXZlZCB0byAke2Jha0ZpbGVQYXRofSwgYCArXG4gICAgICAgICAgXCJlbmFibGUgJ0RldGVjdCBhbGwgZmlsZSBleHRlbnNpb24nIGluICdGaWxlcyAmIExpbmtzJyB0byB2aXNpdCBpdFwiLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBpbXBvcnRJY29uc0Zyb21GaWxlTGlzdChsaXN0OiBGaWxlTGlzdCwgemlwTmFtZUFzUGFjayA9IGZhbHNlKSB7XG4gICAgbGV0IHF1ZXVlID0gW10gYXMgUHJvbWlzZTxzdHJpbmc+W107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBmaWxlID0gbGlzdFtpXTtcbiAgICAgIGlmIChmaWxlLnR5cGUgIT09IFwiYXBwbGljYXRpb24vemlwXCIpIGNvbnRpbnVlO1xuICAgICAgcXVldWUucHVzaCh0aGlzLmltcG9ydEljb25zKGZpbGUsIHppcE5hbWVBc1BhY2spKTtcbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UuYWxsU2V0dGxlZChxdWV1ZSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGZpbGVzXG4gICAqIEBwYXJhbSB6aXBOYW1lQXNQYWNrIGlmIHRydWUsIHVzZSB6aXAgZmlsZW5hbWUgYXMgcGFjayBuYW1lOyBvdGhlcndpc2UsIGdldCBwYWNrIG5hbWUgZnJvbSBlYWNoIGljb24ncyBpZFxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgYXN5bmMgaW1wb3J0SWNvbnMoXG4gICAgZmlsZTogRmlsZSB8IHsgbmFtZTogc3RyaW5nOyBkYXRhOiBBcnJheUJ1ZmZlciB9LFxuICAgIHppcE5hbWVBc1BhY2s6IGJvb2xlYW4sXG4gICk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgcGFja05hbWVGcm9tWmlwID0gZmlsZS5uYW1lLnJlcGxhY2UoL1xcLnppcCQvLCBcIlwiKTtcbiAgICBsZXQgemlwO1xuICAgIGlmIChmaWxlIGluc3RhbmNlb2YgRmlsZSkge1xuICAgICAgemlwID0gYXdhaXQgSlNaaXAubG9hZEFzeW5jKGZpbGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB6aXAgPSBhd2FpdCBKU1ppcC5sb2FkQXN5bmMoZmlsZS5kYXRhKTtcbiAgICB9XG4gICAgY29uc3QgcXVldWUgPSB6aXAuZmlsZShpY29uRmlsZVBhdHRlcm4pLm1hcChhc3luYyAoZmlsZSkgPT4ge1xuICAgICAgbGV0IHsgbmFtZSB9ID0gZmlsZTtcbiAgICAgIGlmICh6aXBOYW1lQXNQYWNrICYmICFuYW1lLnN0YXJ0c1dpdGgocGFja05hbWVGcm9tWmlwICsgXCJfXCIpKVxuICAgICAgICBuYW1lID0gcGFja05hbWVGcm9tWmlwICsgXCJfXCIgKyBuYW1lO1xuICAgICAgY29uc3QgaWQgPSB0aGlzLmdldEF2YWlsYWJsZUlkKG5hbWUpO1xuICAgICAgY29uc3Qgd3JpdGVUbyA9IGpvaW4odGhpcy5jdXN0b21JY29uc0RpciwgaWQpO1xuICAgICAgaWYgKGF3YWl0IHRoaXMudmF1bHQuYWRhcHRlci5leGlzdHMod3JpdGVUbykpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGBpY29uICR7aWR9IGFscmVhZHkgZXhpc3RzLCBza2lwcGluZy4uYCk7XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLnZhdWx0LmFkYXB0ZXIud3JpdGVCaW5hcnkoXG4gICAgICAgIHdyaXRlVG8sXG4gICAgICAgIGF3YWl0IGZpbGUuYXN5bmMoXCJhcnJheWJ1ZmZlclwiKSxcbiAgICAgICk7XG4gICAgICByZXR1cm4gaWQ7XG4gICAgfSk7XG4gICAgY29uc3QgYWRkZWRJY29ucyA9IChhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQocXVldWUpKS5yZWR1Y2UoXG4gICAgICAoYXJyLCByZXN1bHQpID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFwicmVqZWN0ZWRcIikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgdG8gaW1wb3J0IGljb25cIiwgcmVzdWx0LnJlYXNvbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXJyLnB1c2gocmVzdWx0LnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXJyO1xuICAgICAgfSxcbiAgICAgIFtdIGFzIHN0cmluZ1tdLFxuICAgICk7XG4gICAgbmV3IE5vdGljZShhZGRlZEljb25zLmxlbmd0aCArIFwiIGljb25zIGltcG9ydGVkXCIpO1xuICAgIHJldHVybiBmaWxlLm5hbWU7XG4gIH1cblxuICBhc3luYyBhZGRGcm9tRmlsZXMocGFjazogc3RyaW5nLCBmaWxlczogRmlsZUxpc3QpIHtcbiAgICBjb25zdCBpY29ucyA9IGF3YWl0IGdldEljb25zRnJvbUZpbGVMaXN0KGZpbGVzKTtcbiAgICBpZiAoIWljb25zKSB7XG4gICAgICBuZXcgTm90aWNlKFwiTm8gU1ZHIGZpbGUgZm91bmQgaW4gZHJvcHBlZCBpdGVtc1wiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoQnVpbHRJbkljb25QYWNrbmFtZXMuaW5jbHVkZXMocGFjaykpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJmYWlsZWQgdG8gYWRkIHBhY2s6IHBhY2sgbmFtZSAlcyByZXNlcnZlZFwiLCBwYWNrKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgd3JpdGVRdWV1ZSA9IGljb25zLnJlZHVjZSgoYXJyLCB7IG5hbWUsIGV4dCwgZGF0YSB9KSA9PiB7XG4gICAgICBsZXQgaWQgPSBzYW5pdGl6ZUlkKGAke3BhY2t9XyR7bmFtZX1gKTtcbiAgICAgIGlmICghaWQpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiZmFpbGVkIHRvIGFkZCBpY29uOiBpZCAlcyBpbnZhbGlkLCBza2lwcGluZy4uLlwiLCBpZCk7XG4gICAgICAgIHJldHVybiBhcnI7XG4gICAgICB9XG4gICAgICBpZCA9IHRoaXMuZ2V0QXZhaWxhYmxlSWQoaWQpO1xuICAgICAgaWYgKHRoaXMuX2N1c3RvbUljb25zLmhhcyhpZCkpIHtcbiAgICAgICAgYXJyLnB1c2goUHJvbWlzZS5yZWplY3QoYGljb24gJHtpZH0gYWxyZWFkeSBleGlzdHMsIHNraXBwaW5nLi5gKSk7XG4gICAgICAgIHJldHVybiBhcnI7XG4gICAgICB9XG4gICAgICBhcnIucHVzaChcbiAgICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcGF0aCA9IGF3YWl0IHRoaXMuYWRkSWNvbihpZCwgZXh0LCBkYXRhKTtcbiAgICAgICAgICAgIHRoaXMuc2V0KFxuICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgbmV3IEZpbGVJY29uRGF0YShpZCwgbmFtZSwgcGFjaywgcGF0aCwgdGhpcy5wbHVnaW4pLFxuICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBJY29uRmlsZU9wRXJyb3IoXCJhZGRcIiwgaWQsIGVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGlkO1xuICAgICAgICB9KSgpLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBhcnI7XG4gICAgfSwgW10gYXMgUHJvbWlzZTxzdHJpbmc+W10pO1xuICAgIGxldCBhZGRlZElkcyA9IFtdIGFzIHN0cmluZ1tdO1xuICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZCh3cml0ZVF1ZXVlKSkge1xuICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFwicmVqZWN0ZWRcIikge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIGFkZCBpY29uLCBkZXRhaWxzOiBcIiwgcmVzdWx0LnJlYXNvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhZGRlZElkcy5wdXNoKHJlc3VsdC52YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucmVmcmVzaFBhY2tOYW1lcygpO1xuICAgIHRoaXMudHJpZ2dlcihcImNoYW5nZWRcIiwgdGhpcy5wbHVnaW4uYXBpLCBhZGRlZElkcyk7XG4gICAgbmV3IE5vdGljZShhZGRlZElkcy5sZW5ndGgudG9TdHJpbmcoKSArIFwiIGljb25zIGFkZGVkXCIpO1xuICB9XG4gIGFzeW5jIGRlbGV0ZU11bHRpcGxlKC4uLmlkczogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLl9mdXNlLnJlbW92ZSgoaWNvbikgPT4gaXNGaWxlSWNvbkluZm8oaWNvbikgJiYgaWRzLmluY2x1ZGVzKGljb24uaWQpKTtcbiAgICBjb25zdCBxdWV1ZSA9IGlkcy5tYXAoYXN5bmMgKGlkKSA9PiB7XG4gICAgICBjb25zdCBpbmZvID0gdGhpcy5fY3VzdG9tSWNvbnMuZ2V0KGlkKTtcbiAgICAgIGlmICghaW5mbylcbiAgICAgICAgdGhyb3cgbmV3IEljb25GaWxlT3BFcnJvcihcbiAgICAgICAgICBcImRlbGV0ZVwiLFxuICAgICAgICAgIGlkLFxuICAgICAgICAgIFwiTm8gaWNvbiBmb3VuZCBpbiBfY3VzdG9tSWNvbnNcIixcbiAgICAgICAgKTtcbiAgICAgIHRoaXMuX2N1c3RvbUljb25zLmRlbGV0ZShpZCk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLnJlbW92ZUljb25GaWxlKGlkLCBpbmZvLmV4dCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aHJvdyBuZXcgSWNvbkZpbGVPcEVycm9yKFwiZGVsZXRlXCIsIGlkLCBlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gICAgbGV0IGNoYW5nZWQgPSBmYWxzZTtcbiAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQocXVldWUpKSB7XG4gICAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gXCJyZWplY3RlZFwiKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgdG8gcmVtb3ZlIGljb24gZmlsZSwgZGV0YWlsczogXCIsIHJlc3VsdC5yZWFzb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hhbmdlZCB8fCAoY2hhbmdlZCA9IHRydWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY2hhbmdlZCkge1xuICAgICAgdGhpcy5yZWZyZXNoUGFja05hbWVzKCk7XG4gICAgICB0aGlzLnRyaWdnZXIoXCJjaGFuZ2VkXCIsIHRoaXMucGx1Z2luLmFwaSwgaWRzKTtcbiAgICB9XG4gIH1cbiAgYXN5bmMgZmlsdGVyKFxuICAgIHByZWRpY2F0ZTogKGtleTogc3RyaW5nLCB2YWx1ZTogT21pdDxGaWxlSWNvbkRhdGEsIFwiaWRcIj4pID0+IGJvb2xlYW4sXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIGlkIC0gcGF0aCBtYXBcbiAgICBsZXQgSWNvbnNUb0RlbGV0ZSA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gICAgZm9yIChjb25zdCBbaWQsIGRhdGFdIG9mIHRoaXMuX2N1c3RvbUljb25zKSB7XG4gICAgICBpZiAoIXByZWRpY2F0ZShpZCwgZGF0YSkpIHtcbiAgICAgICAgdGhpcy5fY3VzdG9tSWNvbnMuZGVsZXRlKGlkKTtcbiAgICAgICAgSWNvbnNUb0RlbGV0ZS5zZXQoaWQsIGRhdGEucGF0aCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX2Z1c2UucmVtb3ZlKChpY29uKSA9PiBJY29uc1RvRGVsZXRlLmhhcyhpY29uLmlkKSk7XG4gICAgaWYgKEljb25zVG9EZWxldGUuc2l6ZSA9PT0gMCkgcmV0dXJuO1xuICAgIHRoaXMucmVmcmVzaFBhY2tOYW1lcygpO1xuICAgIHRoaXMudHJpZ2dlcihcImNoYW5nZWRcIiwgdGhpcy5wbHVnaW4uYXBpLCBbLi4uSWNvbnNUb0RlbGV0ZS5rZXlzKCldKTtcbiAgICBjb25zdCBxdWV1ZSA9IFsuLi5JY29uc1RvRGVsZXRlLnZhbHVlcygpXS5tYXAoYXN5bmMgKHBhdGgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMudmF1bHQuYWRhcHRlci5yZW1vdmUocGF0aCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aHJvdyBuZXcgSWNvbkZpbGVPcEVycm9yKFwiZGVsZXRlXCIsIGJhc2VuYW1lKHBhdGgpLCBlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZm9yIChjb25zdCByZXN1bHQgb2YgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKHF1ZXVlKSkge1xuICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFwicmVqZWN0ZWRcIikge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIHJlbW92ZSBpY29uIGZpbGUsIGRldGFpbHM6IFwiLCByZXN1bHQucmVhc29uKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgYXN5bmMgcmVuYW1lKGlkOiBzdHJpbmcsIG5ld0lkOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcbiAgICBpZiAodGhpcy5oYXNJY29uKG5ld0lkKSkge1xuICAgICAgY29uc29sZS5sb2coXCJmYWlsZWQgdG8gcmVuYW1lIGljb246IGlkICVzIGFscmVhZHkgZXhpc3RzXCIsIG5ld0lkKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBsZXQgaW5mbyA9IHRoaXMuX2N1c3RvbUljb25zLmdldChpZCk7XG4gICAgaWYgKCFpbmZvKSB7XG4gICAgICBjb25zb2xlLmxvZyhcImZhaWxlZCB0byByZW5hbWUgaWNvbjogaWQgJXMgbm90IGZvdW5kIGluIGN1c3RvbSBpY29uc1wiLCBpZCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgcmVuYW1lVG8gPSBzYW5pdGl6ZUlkKG5ld0lkKTtcbiAgICBpZiAoIXJlbmFtZVRvKSB7XG4gICAgICBjb25zb2xlLmxvZyhcImZhaWxlZCB0byByZW5hbWUgaWNvbjogaWQgJXMgaW52YWxpZFwiLCBpZCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGluZm8ucGF0aCA9IGF3YWl0IHRoaXMucmVuYW1lSWNvbkZpbGUoaWQsIGluZm8uZXh0LCBuZXdJZCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBJY29uRmlsZU9wRXJyb3IoXCJyZW5hbWVcIiwgaWQsIGVycm9yLCBuZXdJZCk7XG4gICAgfVxuICAgIHRoaXMuc2V0KHJlbmFtZVRvLCBpbmZvLCBmYWxzZSk7XG4gICAgdGhpcy5kZWxldGUoaWQsIGZhbHNlLCBmYWxzZSk7XG4gICAgdGhpcy5yZWZyZXNoUGFja05hbWVzKCk7XG4gICAgdGhpcy50cmlnZ2VyKFwiY2hhbmdlZFwiLCB0aGlzLnBsdWdpbi5hcGksIFtpZCwgbmV3SWRdKTtcbiAgICByZXR1cm4gbmV3SWQ7XG4gIH1cbiAgYXN5bmMgc3RhcihpZDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgY29uc3QgdGFyZ2V0SWQgPSBpZC5yZXBsYWNlKC9fXFxkPyQvLCBcIlwiKTtcbiAgICBpZiAodGFyZ2V0SWQgPT09IGlkKSB7XG4gICAgICBjb25zb2xlLmxvZyhcImZhaWxlZCB0byBzdGFyIGljb246IG5vIHN1ZmZpeCBmb3VuZCBmb3IgaWQgJXNcIiwgaWQpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IGluZm8gPSB0aGlzLl9jdXN0b21JY29ucy5nZXQoaWQpO1xuICAgIGlmICghaW5mbykge1xuICAgICAgY29uc29sZS5sb2coXCJmYWlsZWQgdG8gc3RhciBpY29uOiBpZCAlcyBub3QgZm91bmQgaW4gY3VzdG9tIGljb25zXCIsIGlkKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAodGhpcy5faXNCdWlsdEluKHRhcmdldElkKSkge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIFwiZmFpbGVkIHRvIHN0YXIgaWNvbjogbmV3IGlkICVzIGV4aXN0cyBpbiBidWlsdC1pbiBpY29uc1wiLFxuICAgICAgICB0YXJnZXRJZCxcbiAgICAgICk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBleHQgfSA9IGluZm87XG4gICAgICBpZiAodGhpcy5fY3VzdG9tSWNvbnMuaGFzKHRhcmdldElkKSkge1xuICAgICAgICBjb25zdCB0ZW1wID0gdGhpcy5fY3VzdG9tSWNvbnMuZ2V0KHRhcmdldElkKSBhcyBGaWxlSWNvbkRhdGEsXG4gICAgICAgICAgeyBleHQ6IHRhcmdldEV4dCB9ID0gdGVtcDtcbiAgICAgICAgYXdhaXQgdGhpcy5yZW5hbWVJY29uRmlsZSh0YXJnZXRJZCwgdGFyZ2V0RXh0LCB0YXJnZXRJZCArIFwiX3RlbXBcIik7XG4gICAgICAgIGluZm8ucGF0aCA9IGF3YWl0IHRoaXMucmVuYW1lSWNvbkZpbGUoaWQsIGV4dCwgdGFyZ2V0SWQpO1xuICAgICAgICB0aGlzLnNldCh0YXJnZXRJZCwgaW5mbywgZmFsc2UpO1xuICAgICAgICB0ZW1wLnBhdGggPSBhd2FpdCB0aGlzLnJlbmFtZUljb25GaWxlKFxuICAgICAgICAgIHRhcmdldElkICsgXCJfdGVtcFwiLFxuICAgICAgICAgIHRhcmdldEV4dCxcbiAgICAgICAgICBpZCxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zZXQoaWQsIHRlbXAsIGZhbHNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGluZm8ucGF0aCA9IGF3YWl0IHRoaXMucmVuYW1lSWNvbkZpbGUoaWQsIGV4dCwgdGFyZ2V0SWQpO1xuICAgICAgICB0aGlzLnNldCh0YXJnZXRJZCwgaW5mbywgZmFsc2UpO1xuICAgICAgICB0aGlzLmRlbGV0ZShpZCwgZmFsc2UsIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbmV3IEljb25GaWxlT3BFcnJvcihcInJlbmFtZVwiLCBpZCwgZXJyb3IsIHRhcmdldElkKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlZnJlc2hQYWNrTmFtZXMoKTtcbiAgICB0aGlzLnRyaWdnZXIoXCJjaGFuZ2VkXCIsIHRoaXMucGx1Z2luLmFwaSwgW2lkLCB0YXJnZXRJZF0pO1xuICAgIHJldHVybiB0YXJnZXRJZDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QXZhaWxhYmxlSWQoaWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLmhhc0ljb24oaWQpKSByZXR1cm4gaWQ7XG4gICAgbGV0IGkgPSAxLFxuICAgICAgbmV3SWQgPSBgJHtpZH1fJHtpfWA7XG4gICAgd2hpbGUgKHRoaXMuaGFzSWNvbihuZXdJZCkpIHtcbiAgICAgIG5ld0lkID0gYCR7aWR9XyR7KytpfWA7XG4gICAgfVxuICAgIHJldHVybiBgJHtpZH1fJHtpfWA7XG4gIH1cblxuICAvKiogc2V0IGluZm8gaW4gZGF0YWJhc2UsIG5vIGZpbGUgY2hhbmdlcyAqL1xuICBzZXQoaWQ6IHN0cmluZywgaW5mbzogRmlsZUljb25EYXRhLCByZWZyZXNoID0gdHJ1ZSk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9jdXN0b21JY29ucy5nZXQoaWQpID09PSBpbmZvKSByZXR1cm47XG4gICAgdGhpcy5fY3VzdG9tSWNvbnMuc2V0KGlkLCBpbmZvKTtcbiAgICB0aGlzLl9mdXNlLnJlbW92ZSgoaWNvbikgPT4gaWNvbi5pZCA9PT0gaWQpO1xuICAgIHRoaXMuX2Z1c2UuYWRkKGluZm8pO1xuICAgIGlmIChyZWZyZXNoKSB7XG4gICAgICB0aGlzLnJlZnJlc2hQYWNrTmFtZXMoKTtcbiAgICAgIHRoaXMudHJpZ2dlcihcImNoYW5nZWRcIiwgdGhpcy5wbHVnaW4uYXBpLCBbaWRdKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBkZWxldGUoXG4gICAgaWQ6IHN0cmluZyxcbiAgICByZWZyZXNoID0gdHJ1ZSxcbiAgICBkZWxldGVGaWxlID0gdHJ1ZSxcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgaW5mbyA9IHRoaXMuX2N1c3RvbUljb25zLmdldChpZCk7XG4gICAgaWYgKCFpbmZvKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGRlbGV0ZUZpbGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMucmVtb3ZlSWNvbkZpbGUoaWQsIGluZm8uZXh0KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRocm93IG5ldyBJY29uRmlsZU9wRXJyb3IoXCJkZWxldGVcIiwgaWQsIGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5fY3VzdG9tSWNvbnMuZGVsZXRlKGlkKTtcbiAgICB0aGlzLl9mdXNlLnJlbW92ZSgoaWNvbikgPT4gaWNvbi5pZCA9PT0gaWQpO1xuICAgIGlmIChyZWZyZXNoKSB7XG4gICAgICB0aGlzLnJlZnJlc2hQYWNrTmFtZXMoKTtcbiAgICAgIHRoaXMudHJpZ2dlcihcImNoYW5nZWRcIiwgdGhpcy5wbHVnaW4uYXBpLCBbaWRdKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBhc3luYyBjbGVhcigpIHtcbiAgICBjb25zdCBxdWV1ZSA9IChcbiAgICAgIGF3YWl0IHRoaXMudmF1bHQuYWRhcHRlci5saXN0KHRoaXMuY3VzdG9tSWNvbnNEaXIpXG4gICAgKS5maWxlcy5tYXAoKHBhdGgpID0+IHRoaXMudmF1bHQuYWRhcHRlci5yZW1vdmUocGF0aCkpO1xuICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChxdWV1ZSkpIHtcbiAgICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSBcInJlamVjdGVkXCIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkZhaWxlZCB0byByZW1vdmUgaWNvbiBmaWxlLCBkZXRhaWxzOiBcIiwgcmVzdWx0LnJlYXNvbik7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX2N1c3RvbUljb25zLmNsZWFyKCk7XG4gICAgdGhpcy5fZnVzZS5yZW1vdmUoKGlkKSA9PiAhQnVpbHRJbkljb25JZHMuaW5jbHVkZXMoaWQpKTtcbiAgICB0aGlzLnJlZnJlc2hQYWNrTmFtZXMoKTtcbiAgICB0aGlzLnRyaWdnZXIoXCJjaGFuZ2VkXCIsIHRoaXMucGx1Z2luLmFwaSk7XG4gIH1cblxuICBwcml2YXRlIF9mdXNlID0gbmV3IEZ1c2U8SWNvbkluZm8+KEJ1aWx0SW5JY29uSWRzLCB7XG4gICAga2V5czogW1wibmFtZVwiLCBcInBhY2tcIl0sXG4gICAgaW5jbHVkZVNjb3JlOiB0cnVlLFxuICAgIC8vIGlnbm9yZUxvY2F0aW9uOiB0cnVlLFxuICAgIGZpbmRBbGxNYXRjaGVzOiB0cnVlLFxuICAgIHRocmVzaG9sZDogMC41LFxuICAgIHNob3VsZFNvcnQ6IHRydWUsXG4gICAgaW5jbHVkZU1hdGNoZXM6IHRydWUsXG4gICAgdXNlRXh0ZW5kZWRTZWFyY2g6IHRydWUsXG4gIH0pO1xuICBzZWFyY2gocXVlcnk6IHN0cmluZ1tdLCBwYWNrcz86IHN0cmluZ1tdLCBsaW1pdD86IG51bWJlcikge1xuICAgIGxldCBleHAgPSBxdWVyeS5tYXA8RnVzZS5FeHByZXNzaW9uPigocykgPT4gKHsgbmFtZTogcyB9KSk7XG4gICAgcGFja3MgPSBwYWNrcyA/PyB0aGlzLmVuYWJsZWRQYWNrbmFtZXM7XG4gICAgZXhwLnB1c2goeyAkb3I6IHBhY2tzLm1hcCgocCkgPT4gKHsgcGFjazogYD0ke3B9YCB9KSkgfSk7XG4gICAgcmV0dXJuIHRoaXMuX2Z1c2Uuc2VhcmNoKHsgJGFuZDogZXhwIH0sIHsgbGltaXQ6IGxpbWl0ID8/IDIwIH0pO1xuICB9XG4gIGdldEFsbElkcyhwYWNrcz86IHN0cmluZ1tdLCBsaW1pdD86IG51bWJlcikge1xuICAgIGxldCBleHAgPSAocGFja3MgPz8gdGhpcy5lbmFibGVkUGFja25hbWVzKS5tYXAoKHApID0+ICh7XG4gICAgICBwYWNrOiBgPSR7cH1gLFxuICAgIH0pKTtcbiAgICByZXR1cm4gdGhpcy5fZnVzZS5zZWFyY2goeyAkb3I6IGV4cCB9LCB7IGxpbWl0OiBsaW1pdCA/PyAyMCB9KTtcbiAgfVxuXG4gIHRyaWdnZXIoLi4uYXJnczogUE1FdmVudHMpOiB2b2lkIHtcbiAgICBjb25zdCBbbmFtZSwgLi4ucmVzdF0gPSBhcmdzO1xuICAgIHN1cGVyLnRyaWdnZXIobmFtZSwgLi4ucmVzdCk7XG4gICAgdGhpcy5wbHVnaW4uYXBwLnZhdWx0LnRyaWdnZXIoZXZ0UHJlZml4ICsgbmFtZSwgLi4ucmVzdCk7XG4gIH1cbiAgb24oLi4uYXJnczogT25BcmdzPFBNRXZlbnRzPik6IEV2ZW50UmVmIHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgcmV0dXJuIHN1cGVyLm9uKC4uLmFyZ3MpO1xuICB9XG59XG5cbnR5cGUgT25BcmdzPFQ+ID0gVCBleHRlbmRzIFtpbmZlciBBLCAuLi5pbmZlciBCXVxuICA/IEEgZXh0ZW5kcyBzdHJpbmdcbiAgICA/IFtuYW1lOiBBLCBjYWxsYmFjazogKC4uLmFyZ3M6IEIpID0+IGFueV1cbiAgICA6IG5ldmVyXG4gIDogbmV2ZXI7XG5cbmNsYXNzIEljb25GaWxlT3BFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3Iob3A6IHN0cmluZywgaWQ6IHN0cmluZywgc3JjRXJyOiBhbnksIG5ld0lkPzogc3RyaW5nKSB7XG4gICAgc3VwZXIoXG4gICAgICBgRXJyb3Igd2hpbGUgJHtvcH0gb24gJHtpZH0ke25ld0lkID8gXCI9PlwiICsgbmV3SWQgOiBcIlwifTogJHtcbiAgICAgICAgc3JjRXJyIGluc3RhbmNlb2YgRXJyb3IgPyBgJHtzcmNFcnIubmFtZX06ICR7c3JjRXJyLm1lc3NhZ2V9YCA6IHNyY0VyclxuICAgICAgfWAsXG4gICAgKTtcbiAgICBjb25zb2xlLmVycm9yKGAke29wfSBvbiAke2lkfSR7bmV3SWQgPyBcIj0+XCIgKyBuZXdJZCA6IFwiXCJ9YCwgc3JjRXJyKTtcbiAgICB0aGlzLm5hbWUgPSBcIlNhdmVJY29uRXJyb3JcIjtcbiAgfVxufVxuIiwgIi8qKlxuICogRnVzZS5qcyB2Ni42LjIgLSBMaWdodHdlaWdodCBmdXp6eS1zZWFyY2ggKGh0dHA6Ly9mdXNlanMuaW8pXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDIyIEtpcm8gUmlzayAoaHR0cDovL2tpcm8ubWUpXG4gKiBBbGwgUmlnaHRzIFJlc2VydmVkLiBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAyLjBcbiAqXG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqL1xuXG5mdW5jdGlvbiBpc0FycmF5KHZhbHVlKSB7XG4gIHJldHVybiAhQXJyYXkuaXNBcnJheVxuICAgID8gZ2V0VGFnKHZhbHVlKSA9PT0gJ1tvYmplY3QgQXJyYXldJ1xuICAgIDogQXJyYXkuaXNBcnJheSh2YWx1ZSlcbn1cblxuLy8gQWRhcHRlZCBmcm9tOiBodHRwczovL2dpdGh1Yi5jb20vbG9kYXNoL2xvZGFzaC9ibG9iL21hc3Rlci8uaW50ZXJuYWwvYmFzZVRvU3RyaW5nLmpzXG5jb25zdCBJTkZJTklUWSA9IDEgLyAwO1xuZnVuY3Rpb24gYmFzZVRvU3RyaW5nKHZhbHVlKSB7XG4gIC8vIEV4aXQgZWFybHkgZm9yIHN0cmluZ3MgdG8gYXZvaWQgYSBwZXJmb3JtYW5jZSBoaXQgaW4gc29tZSBlbnZpcm9ubWVudHMuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuICBsZXQgcmVzdWx0ID0gdmFsdWUgKyAnJztcbiAgcmV0dXJuIHJlc3VsdCA9PSAnMCcgJiYgMSAvIHZhbHVlID09IC1JTkZJTklUWSA/ICctMCcgOiByZXN1bHRcbn1cblxuZnVuY3Rpb24gdG9TdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09IG51bGwgPyAnJyA6IGJhc2VUb1N0cmluZyh2YWx1ZSlcbn1cblxuZnVuY3Rpb24gaXNTdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZydcbn1cblxuZnVuY3Rpb24gaXNOdW1iZXIodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcidcbn1cblxuLy8gQWRhcHRlZCBmcm9tOiBodHRwczovL2dpdGh1Yi5jb20vbG9kYXNoL2xvZGFzaC9ibG9iL21hc3Rlci9pc0Jvb2xlYW4uanNcbmZ1bmN0aW9uIGlzQm9vbGVhbih2YWx1ZSkge1xuICByZXR1cm4gKFxuICAgIHZhbHVlID09PSB0cnVlIHx8XG4gICAgdmFsdWUgPT09IGZhbHNlIHx8XG4gICAgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgZ2V0VGFnKHZhbHVlKSA9PSAnW29iamVjdCBCb29sZWFuXScpXG4gIClcbn1cblxuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCdcbn1cblxuLy8gQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UuXG5mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KHZhbHVlKSAmJiB2YWx1ZSAhPT0gbnVsbFxufVxuXG5mdW5jdGlvbiBpc0RlZmluZWQodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGxcbn1cblxuZnVuY3Rpb24gaXNCbGFuayh2YWx1ZSkge1xuICByZXR1cm4gIXZhbHVlLnRyaW0oKS5sZW5ndGhcbn1cblxuLy8gR2V0cyB0aGUgYHRvU3RyaW5nVGFnYCBvZiBgdmFsdWVgLlxuLy8gQWRhcHRlZCBmcm9tOiBodHRwczovL2dpdGh1Yi5jb20vbG9kYXNoL2xvZGFzaC9ibG9iL21hc3Rlci8uaW50ZXJuYWwvZ2V0VGFnLmpzXG5mdW5jdGlvbiBnZXRUYWcodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09IG51bGxcbiAgICA/IHZhbHVlID09PSB1bmRlZmluZWRcbiAgICAgID8gJ1tvYmplY3QgVW5kZWZpbmVkXSdcbiAgICAgIDogJ1tvYmplY3QgTnVsbF0nXG4gICAgOiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpXG59XG5cbmNvbnN0IEVYVEVOREVEX1NFQVJDSF9VTkFWQUlMQUJMRSA9ICdFeHRlbmRlZCBzZWFyY2ggaXMgbm90IGF2YWlsYWJsZSc7XG5cbmNvbnN0IElOQ09SUkVDVF9JTkRFWF9UWVBFID0gXCJJbmNvcnJlY3QgJ2luZGV4JyB0eXBlXCI7XG5cbmNvbnN0IExPR0lDQUxfU0VBUkNIX0lOVkFMSURfUVVFUllfRk9SX0tFWSA9IChrZXkpID0+XG4gIGBJbnZhbGlkIHZhbHVlIGZvciBrZXkgJHtrZXl9YDtcblxuY29uc3QgUEFUVEVSTl9MRU5HVEhfVE9PX0xBUkdFID0gKG1heCkgPT5cbiAgYFBhdHRlcm4gbGVuZ3RoIGV4Y2VlZHMgbWF4IG9mICR7bWF4fS5gO1xuXG5jb25zdCBNSVNTSU5HX0tFWV9QUk9QRVJUWSA9IChuYW1lKSA9PiBgTWlzc2luZyAke25hbWV9IHByb3BlcnR5IGluIGtleWA7XG5cbmNvbnN0IElOVkFMSURfS0VZX1dFSUdIVF9WQUxVRSA9IChrZXkpID0+XG4gIGBQcm9wZXJ0eSAnd2VpZ2h0JyBpbiBrZXkgJyR7a2V5fScgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXJgO1xuXG5jb25zdCBoYXNPd24gPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG5jbGFzcyBLZXlTdG9yZSB7XG4gIGNvbnN0cnVjdG9yKGtleXMpIHtcbiAgICB0aGlzLl9rZXlzID0gW107XG4gICAgdGhpcy5fa2V5TWFwID0ge307XG5cbiAgICBsZXQgdG90YWxXZWlnaHQgPSAwO1xuXG4gICAga2V5cy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIGxldCBvYmogPSBjcmVhdGVLZXkoa2V5KTtcblxuICAgICAgdG90YWxXZWlnaHQgKz0gb2JqLndlaWdodDtcblxuICAgICAgdGhpcy5fa2V5cy5wdXNoKG9iaik7XG4gICAgICB0aGlzLl9rZXlNYXBbb2JqLmlkXSA9IG9iajtcblxuICAgICAgdG90YWxXZWlnaHQgKz0gb2JqLndlaWdodDtcbiAgICB9KTtcblxuICAgIC8vIE5vcm1hbGl6ZSB3ZWlnaHRzIHNvIHRoYXQgdGhlaXIgc3VtIGlzIGVxdWFsIHRvIDFcbiAgICB0aGlzLl9rZXlzLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAga2V5LndlaWdodCAvPSB0b3RhbFdlaWdodDtcbiAgICB9KTtcbiAgfVxuICBnZXQoa2V5SWQpIHtcbiAgICByZXR1cm4gdGhpcy5fa2V5TWFwW2tleUlkXVxuICB9XG4gIGtleXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2tleXNcbiAgfVxuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMuX2tleXMpXG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlS2V5KGtleSkge1xuICBsZXQgcGF0aCA9IG51bGw7XG4gIGxldCBpZCA9IG51bGw7XG4gIGxldCBzcmMgPSBudWxsO1xuICBsZXQgd2VpZ2h0ID0gMTtcbiAgbGV0IGdldEZuID0gbnVsbDtcblxuICBpZiAoaXNTdHJpbmcoa2V5KSB8fCBpc0FycmF5KGtleSkpIHtcbiAgICBzcmMgPSBrZXk7XG4gICAgcGF0aCA9IGNyZWF0ZUtleVBhdGgoa2V5KTtcbiAgICBpZCA9IGNyZWF0ZUtleUlkKGtleSk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKCFoYXNPd24uY2FsbChrZXksICduYW1lJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihNSVNTSU5HX0tFWV9QUk9QRVJUWSgnbmFtZScpKVxuICAgIH1cblxuICAgIGNvbnN0IG5hbWUgPSBrZXkubmFtZTtcbiAgICBzcmMgPSBuYW1lO1xuXG4gICAgaWYgKGhhc093bi5jYWxsKGtleSwgJ3dlaWdodCcpKSB7XG4gICAgICB3ZWlnaHQgPSBrZXkud2VpZ2h0O1xuXG4gICAgICBpZiAod2VpZ2h0IDw9IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKElOVkFMSURfS0VZX1dFSUdIVF9WQUxVRShuYW1lKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwYXRoID0gY3JlYXRlS2V5UGF0aChuYW1lKTtcbiAgICBpZCA9IGNyZWF0ZUtleUlkKG5hbWUpO1xuICAgIGdldEZuID0ga2V5LmdldEZuO1xuICB9XG5cbiAgcmV0dXJuIHsgcGF0aCwgaWQsIHdlaWdodCwgc3JjLCBnZXRGbiB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUtleVBhdGgoa2V5KSB7XG4gIHJldHVybiBpc0FycmF5KGtleSkgPyBrZXkgOiBrZXkuc3BsaXQoJy4nKVxufVxuXG5mdW5jdGlvbiBjcmVhdGVLZXlJZChrZXkpIHtcbiAgcmV0dXJuIGlzQXJyYXkoa2V5KSA/IGtleS5qb2luKCcuJykgOiBrZXlcbn1cblxuZnVuY3Rpb24gZ2V0KG9iaiwgcGF0aCkge1xuICBsZXQgbGlzdCA9IFtdO1xuICBsZXQgYXJyID0gZmFsc2U7XG5cbiAgY29uc3QgZGVlcEdldCA9IChvYmosIHBhdGgsIGluZGV4KSA9PiB7XG4gICAgaWYgKCFpc0RlZmluZWQob2JqKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmICghcGF0aFtpbmRleF0pIHtcbiAgICAgIC8vIElmIHRoZXJlJ3Mgbm8gcGF0aCBsZWZ0LCB3ZSd2ZSBhcnJpdmVkIGF0IHRoZSBvYmplY3Qgd2UgY2FyZSBhYm91dC5cbiAgICAgIGxpc3QucHVzaChvYmopO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQga2V5ID0gcGF0aFtpbmRleF07XG5cbiAgICAgIGNvbnN0IHZhbHVlID0gb2JqW2tleV07XG5cbiAgICAgIGlmICghaXNEZWZpbmVkKHZhbHVlKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gSWYgd2UncmUgYXQgdGhlIGxhc3QgdmFsdWUgaW4gdGhlIHBhdGgsIGFuZCBpZiBpdCdzIGEgc3RyaW5nL251bWJlci9ib29sLFxuICAgICAgLy8gYWRkIGl0IHRvIHRoZSBsaXN0XG4gICAgICBpZiAoXG4gICAgICAgIGluZGV4ID09PSBwYXRoLmxlbmd0aCAtIDEgJiZcbiAgICAgICAgKGlzU3RyaW5nKHZhbHVlKSB8fCBpc051bWJlcih2YWx1ZSkgfHwgaXNCb29sZWFuKHZhbHVlKSlcbiAgICAgICkge1xuICAgICAgICBsaXN0LnB1c2godG9TdHJpbmcodmFsdWUpKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgYXJyID0gdHJ1ZTtcbiAgICAgICAgLy8gU2VhcmNoIGVhY2ggaXRlbSBpbiB0aGUgYXJyYXkuXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB2YWx1ZS5sZW5ndGg7IGkgPCBsZW47IGkgKz0gMSkge1xuICAgICAgICAgIGRlZXBHZXQodmFsdWVbaV0sIHBhdGgsIGluZGV4ICsgMSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAocGF0aC5sZW5ndGgpIHtcbiAgICAgICAgLy8gQW4gb2JqZWN0LiBSZWN1cnNlIGZ1cnRoZXIuXG4gICAgICAgIGRlZXBHZXQodmFsdWUsIHBhdGgsIGluZGV4ICsgMSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIC8vIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IChzaW5jZSBwYXRoIHVzZWQgdG8gYmUgYSBzdHJpbmcpXG4gIGRlZXBHZXQob2JqLCBpc1N0cmluZyhwYXRoKSA/IHBhdGguc3BsaXQoJy4nKSA6IHBhdGgsIDApO1xuXG4gIHJldHVybiBhcnIgPyBsaXN0IDogbGlzdFswXVxufVxuXG5jb25zdCBNYXRjaE9wdGlvbnMgPSB7XG4gIC8vIFdoZXRoZXIgdGhlIG1hdGNoZXMgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSByZXN1bHQgc2V0LiBXaGVuIGB0cnVlYCwgZWFjaCByZWNvcmQgaW4gdGhlIHJlc3VsdFxuICAvLyBzZXQgd2lsbCBpbmNsdWRlIHRoZSBpbmRpY2VzIG9mIHRoZSBtYXRjaGVkIGNoYXJhY3RlcnMuXG4gIC8vIFRoZXNlIGNhbiBjb25zZXF1ZW50bHkgYmUgdXNlZCBmb3IgaGlnaGxpZ2h0aW5nIHB1cnBvc2VzLlxuICBpbmNsdWRlTWF0Y2hlczogZmFsc2UsXG4gIC8vIFdoZW4gYHRydWVgLCB0aGUgbWF0Y2hpbmcgZnVuY3Rpb24gd2lsbCBjb250aW51ZSB0byB0aGUgZW5kIG9mIGEgc2VhcmNoIHBhdHRlcm4gZXZlbiBpZlxuICAvLyBhIHBlcmZlY3QgbWF0Y2ggaGFzIGFscmVhZHkgYmVlbiBsb2NhdGVkIGluIHRoZSBzdHJpbmcuXG4gIGZpbmRBbGxNYXRjaGVzOiBmYWxzZSxcbiAgLy8gTWluaW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyB0aGF0IG11c3QgYmUgbWF0Y2hlZCBiZWZvcmUgYSByZXN1bHQgaXMgY29uc2lkZXJlZCBhIG1hdGNoXG4gIG1pbk1hdGNoQ2hhckxlbmd0aDogMVxufTtcblxuY29uc3QgQmFzaWNPcHRpb25zID0ge1xuICAvLyBXaGVuIGB0cnVlYCwgdGhlIGFsZ29yaXRobSBjb250aW51ZXMgc2VhcmNoaW5nIHRvIHRoZSBlbmQgb2YgdGhlIGlucHV0IGV2ZW4gaWYgYSBwZXJmZWN0XG4gIC8vIG1hdGNoIGlzIGZvdW5kIGJlZm9yZSB0aGUgZW5kIG9mIHRoZSBzYW1lIGlucHV0LlxuICBpc0Nhc2VTZW5zaXRpdmU6IGZhbHNlLFxuICAvLyBXaGVuIHRydWUsIHRoZSBtYXRjaGluZyBmdW5jdGlvbiB3aWxsIGNvbnRpbnVlIHRvIHRoZSBlbmQgb2YgYSBzZWFyY2ggcGF0dGVybiBldmVuIGlmXG4gIGluY2x1ZGVTY29yZTogZmFsc2UsXG4gIC8vIExpc3Qgb2YgcHJvcGVydGllcyB0aGF0IHdpbGwgYmUgc2VhcmNoZWQuIFRoaXMgYWxzbyBzdXBwb3J0cyBuZXN0ZWQgcHJvcGVydGllcy5cbiAga2V5czogW10sXG4gIC8vIFdoZXRoZXIgdG8gc29ydCB0aGUgcmVzdWx0IGxpc3QsIGJ5IHNjb3JlXG4gIHNob3VsZFNvcnQ6IHRydWUsXG4gIC8vIERlZmF1bHQgc29ydCBmdW5jdGlvbjogc29ydCBieSBhc2NlbmRpbmcgc2NvcmUsIGFzY2VuZGluZyBpbmRleFxuICBzb3J0Rm46IChhLCBiKSA9PlxuICAgIGEuc2NvcmUgPT09IGIuc2NvcmUgPyAoYS5pZHggPCBiLmlkeCA/IC0xIDogMSkgOiBhLnNjb3JlIDwgYi5zY29yZSA/IC0xIDogMVxufTtcblxuY29uc3QgRnV6enlPcHRpb25zID0ge1xuICAvLyBBcHByb3hpbWF0ZWx5IHdoZXJlIGluIHRoZSB0ZXh0IGlzIHRoZSBwYXR0ZXJuIGV4cGVjdGVkIHRvIGJlIGZvdW5kP1xuICBsb2NhdGlvbjogMCxcbiAgLy8gQXQgd2hhdCBwb2ludCBkb2VzIHRoZSBtYXRjaCBhbGdvcml0aG0gZ2l2ZSB1cC4gQSB0aHJlc2hvbGQgb2YgJzAuMCcgcmVxdWlyZXMgYSBwZXJmZWN0IG1hdGNoXG4gIC8vIChvZiBib3RoIGxldHRlcnMgYW5kIGxvY2F0aW9uKSwgYSB0aHJlc2hvbGQgb2YgJzEuMCcgd291bGQgbWF0Y2ggYW55dGhpbmcuXG4gIHRocmVzaG9sZDogMC42LFxuICAvLyBEZXRlcm1pbmVzIGhvdyBjbG9zZSB0aGUgbWF0Y2ggbXVzdCBiZSB0byB0aGUgZnV6enkgbG9jYXRpb24gKHNwZWNpZmllZCBhYm92ZSkuXG4gIC8vIEFuIGV4YWN0IGxldHRlciBtYXRjaCB3aGljaCBpcyAnZGlzdGFuY2UnIGNoYXJhY3RlcnMgYXdheSBmcm9tIHRoZSBmdXp6eSBsb2NhdGlvblxuICAvLyB3b3VsZCBzY29yZSBhcyBhIGNvbXBsZXRlIG1pc21hdGNoLiBBIGRpc3RhbmNlIG9mICcwJyByZXF1aXJlcyB0aGUgbWF0Y2ggYmUgYXRcbiAgLy8gdGhlIGV4YWN0IGxvY2F0aW9uIHNwZWNpZmllZCwgYSB0aHJlc2hvbGQgb2YgJzEwMDAnIHdvdWxkIHJlcXVpcmUgYSBwZXJmZWN0IG1hdGNoXG4gIC8vIHRvIGJlIHdpdGhpbiA4MDAgY2hhcmFjdGVycyBvZiB0aGUgZnV6enkgbG9jYXRpb24gdG8gYmUgZm91bmQgdXNpbmcgYSAwLjggdGhyZXNob2xkLlxuICBkaXN0YW5jZTogMTAwXG59O1xuXG5jb25zdCBBZHZhbmNlZE9wdGlvbnMgPSB7XG4gIC8vIFdoZW4gYHRydWVgLCBpdCBlbmFibGVzIHRoZSB1c2Ugb2YgdW5peC1saWtlIHNlYXJjaCBjb21tYW5kc1xuICB1c2VFeHRlbmRlZFNlYXJjaDogZmFsc2UsXG4gIC8vIFRoZSBnZXQgZnVuY3Rpb24gdG8gdXNlIHdoZW4gZmV0Y2hpbmcgYW4gb2JqZWN0J3MgcHJvcGVydGllcy5cbiAgLy8gVGhlIGRlZmF1bHQgd2lsbCBzZWFyY2ggbmVzdGVkIHBhdGhzICppZSBmb28uYmFyLmJheipcbiAgZ2V0Rm46IGdldCxcbiAgLy8gV2hlbiBgdHJ1ZWAsIHNlYXJjaCB3aWxsIGlnbm9yZSBgbG9jYXRpb25gIGFuZCBgZGlzdGFuY2VgLCBzbyBpdCB3b24ndCBtYXR0ZXJcbiAgLy8gd2hlcmUgaW4gdGhlIHN0cmluZyB0aGUgcGF0dGVybiBhcHBlYXJzLlxuICAvLyBNb3JlIGluZm86IGh0dHBzOi8vZnVzZWpzLmlvL2NvbmNlcHRzL3Njb3JpbmctdGhlb3J5Lmh0bWwjZnV6emluZXNzLXNjb3JlXG4gIGlnbm9yZUxvY2F0aW9uOiBmYWxzZSxcbiAgLy8gV2hlbiBgdHJ1ZWAsIHRoZSBjYWxjdWxhdGlvbiBmb3IgdGhlIHJlbGV2YW5jZSBzY29yZSAodXNlZCBmb3Igc29ydGluZykgd2lsbFxuICAvLyBpZ25vcmUgdGhlIGZpZWxkLWxlbmd0aCBub3JtLlxuICAvLyBNb3JlIGluZm86IGh0dHBzOi8vZnVzZWpzLmlvL2NvbmNlcHRzL3Njb3JpbmctdGhlb3J5Lmh0bWwjZmllbGQtbGVuZ3RoLW5vcm1cbiAgaWdub3JlRmllbGROb3JtOiBmYWxzZSxcbiAgLy8gVGhlIHdlaWdodCB0byBkZXRlcm1pbmUgaG93IG11Y2ggZmllbGQgbGVuZ3RoIG5vcm0gZWZmZWN0cyBzY29yaW5nLlxuICBmaWVsZE5vcm1XZWlnaHQ6IDFcbn07XG5cbnZhciBDb25maWcgPSB7XG4gIC4uLkJhc2ljT3B0aW9ucyxcbiAgLi4uTWF0Y2hPcHRpb25zLFxuICAuLi5GdXp6eU9wdGlvbnMsXG4gIC4uLkFkdmFuY2VkT3B0aW9uc1xufTtcblxuY29uc3QgU1BBQ0UgPSAvW14gXSsvZztcblxuLy8gRmllbGQtbGVuZ3RoIG5vcm06IHRoZSBzaG9ydGVyIHRoZSBmaWVsZCwgdGhlIGhpZ2hlciB0aGUgd2VpZ2h0LlxuLy8gU2V0IHRvIDMgZGVjaW1hbHMgdG8gcmVkdWNlIGluZGV4IHNpemUuXG5mdW5jdGlvbiBub3JtKHdlaWdodCA9IDEsIG1hbnRpc3NhID0gMykge1xuICBjb25zdCBjYWNoZSA9IG5ldyBNYXAoKTtcbiAgY29uc3QgbSA9IE1hdGgucG93KDEwLCBtYW50aXNzYSk7XG5cbiAgcmV0dXJuIHtcbiAgICBnZXQodmFsdWUpIHtcbiAgICAgIGNvbnN0IG51bVRva2VucyA9IHZhbHVlLm1hdGNoKFNQQUNFKS5sZW5ndGg7XG5cbiAgICAgIGlmIChjYWNoZS5oYXMobnVtVG9rZW5zKSkge1xuICAgICAgICByZXR1cm4gY2FjaGUuZ2V0KG51bVRva2VucylcbiAgICAgIH1cblxuICAgICAgLy8gRGVmYXVsdCBmdW5jdGlvbiBpcyAxL3NxcnQoeCksIHdlaWdodCBtYWtlcyB0aGF0IHZhcmlhYmxlXG4gICAgICBjb25zdCBub3JtID0gMSAvIE1hdGgucG93KG51bVRva2VucywgMC41ICogd2VpZ2h0KTtcblxuICAgICAgLy8gSW4gcGxhY2Ugb2YgYHRvRml4ZWQobWFudGlzc2EpYCwgZm9yIGZhc3RlciBjb21wdXRhdGlvblxuICAgICAgY29uc3QgbiA9IHBhcnNlRmxvYXQoTWF0aC5yb3VuZChub3JtICogbSkgLyBtKTtcblxuICAgICAgY2FjaGUuc2V0KG51bVRva2Vucywgbik7XG5cbiAgICAgIHJldHVybiBuXG4gICAgfSxcbiAgICBjbGVhcigpIHtcbiAgICAgIGNhY2hlLmNsZWFyKCk7XG4gICAgfVxuICB9XG59XG5cbmNsYXNzIEZ1c2VJbmRleCB7XG4gIGNvbnN0cnVjdG9yKHtcbiAgICBnZXRGbiA9IENvbmZpZy5nZXRGbixcbiAgICBmaWVsZE5vcm1XZWlnaHQgPSBDb25maWcuZmllbGROb3JtV2VpZ2h0XG4gIH0gPSB7fSkge1xuICAgIHRoaXMubm9ybSA9IG5vcm0oZmllbGROb3JtV2VpZ2h0LCAzKTtcbiAgICB0aGlzLmdldEZuID0gZ2V0Rm47XG4gICAgdGhpcy5pc0NyZWF0ZWQgPSBmYWxzZTtcblxuICAgIHRoaXMuc2V0SW5kZXhSZWNvcmRzKCk7XG4gIH1cbiAgc2V0U291cmNlcyhkb2NzID0gW10pIHtcbiAgICB0aGlzLmRvY3MgPSBkb2NzO1xuICB9XG4gIHNldEluZGV4UmVjb3JkcyhyZWNvcmRzID0gW10pIHtcbiAgICB0aGlzLnJlY29yZHMgPSByZWNvcmRzO1xuICB9XG4gIHNldEtleXMoa2V5cyA9IFtdKSB7XG4gICAgdGhpcy5rZXlzID0ga2V5cztcbiAgICB0aGlzLl9rZXlzTWFwID0ge307XG4gICAga2V5cy5mb3JFYWNoKChrZXksIGlkeCkgPT4ge1xuICAgICAgdGhpcy5fa2V5c01hcFtrZXkuaWRdID0gaWR4O1xuICAgIH0pO1xuICB9XG4gIGNyZWF0ZSgpIHtcbiAgICBpZiAodGhpcy5pc0NyZWF0ZWQgfHwgIXRoaXMuZG9jcy5sZW5ndGgpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuaXNDcmVhdGVkID0gdHJ1ZTtcblxuICAgIC8vIExpc3QgaXMgQXJyYXk8U3RyaW5nPlxuICAgIGlmIChpc1N0cmluZyh0aGlzLmRvY3NbMF0pKSB7XG4gICAgICB0aGlzLmRvY3MuZm9yRWFjaCgoZG9jLCBkb2NJbmRleCkgPT4ge1xuICAgICAgICB0aGlzLl9hZGRTdHJpbmcoZG9jLCBkb2NJbmRleCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTGlzdCBpcyBBcnJheTxPYmplY3Q+XG4gICAgICB0aGlzLmRvY3MuZm9yRWFjaCgoZG9jLCBkb2NJbmRleCkgPT4ge1xuICAgICAgICB0aGlzLl9hZGRPYmplY3QoZG9jLCBkb2NJbmRleCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLm5vcm0uY2xlYXIoKTtcbiAgfVxuICAvLyBBZGRzIGEgZG9jIHRvIHRoZSBlbmQgb2YgdGhlIGluZGV4XG4gIGFkZChkb2MpIHtcbiAgICBjb25zdCBpZHggPSB0aGlzLnNpemUoKTtcblxuICAgIGlmIChpc1N0cmluZyhkb2MpKSB7XG4gICAgICB0aGlzLl9hZGRTdHJpbmcoZG9jLCBpZHgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9hZGRPYmplY3QoZG9jLCBpZHgpO1xuICAgIH1cbiAgfVxuICAvLyBSZW1vdmVzIHRoZSBkb2MgYXQgdGhlIHNwZWNpZmllZCBpbmRleCBvZiB0aGUgaW5kZXhcbiAgcmVtb3ZlQXQoaWR4KSB7XG4gICAgdGhpcy5yZWNvcmRzLnNwbGljZShpZHgsIDEpO1xuXG4gICAgLy8gQ2hhbmdlIHJlZiBpbmRleCBvZiBldmVyeSBzdWJzcXVlbnQgZG9jXG4gICAgZm9yIChsZXQgaSA9IGlkeCwgbGVuID0gdGhpcy5zaXplKCk7IGkgPCBsZW47IGkgKz0gMSkge1xuICAgICAgdGhpcy5yZWNvcmRzW2ldLmkgLT0gMTtcbiAgICB9XG4gIH1cbiAgZ2V0VmFsdWVGb3JJdGVtQXRLZXlJZChpdGVtLCBrZXlJZCkge1xuICAgIHJldHVybiBpdGVtW3RoaXMuX2tleXNNYXBba2V5SWRdXVxuICB9XG4gIHNpemUoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVjb3Jkcy5sZW5ndGhcbiAgfVxuICBfYWRkU3RyaW5nKGRvYywgZG9jSW5kZXgpIHtcbiAgICBpZiAoIWlzRGVmaW5lZChkb2MpIHx8IGlzQmxhbmsoZG9jKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgbGV0IHJlY29yZCA9IHtcbiAgICAgIHY6IGRvYyxcbiAgICAgIGk6IGRvY0luZGV4LFxuICAgICAgbjogdGhpcy5ub3JtLmdldChkb2MpXG4gICAgfTtcblxuICAgIHRoaXMucmVjb3Jkcy5wdXNoKHJlY29yZCk7XG4gIH1cbiAgX2FkZE9iamVjdChkb2MsIGRvY0luZGV4KSB7XG4gICAgbGV0IHJlY29yZCA9IHsgaTogZG9jSW5kZXgsICQ6IHt9IH07XG5cbiAgICAvLyBJdGVyYXRlIG92ZXIgZXZlcnkga2V5IChpLmUsIHBhdGgpLCBhbmQgZmV0Y2ggdGhlIHZhbHVlIGF0IHRoYXQga2V5XG4gICAgdGhpcy5rZXlzLmZvckVhY2goKGtleSwga2V5SW5kZXgpID0+IHtcbiAgICAgIGxldCB2YWx1ZSA9IGtleS5nZXRGbiA/IGtleS5nZXRGbihkb2MpIDogdGhpcy5nZXRGbihkb2MsIGtleS5wYXRoKTtcblxuICAgICAgaWYgKCFpc0RlZmluZWQodmFsdWUpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgbGV0IHN1YlJlY29yZHMgPSBbXTtcbiAgICAgICAgY29uc3Qgc3RhY2sgPSBbeyBuZXN0ZWRBcnJJbmRleDogLTEsIHZhbHVlIH1dO1xuXG4gICAgICAgIHdoaWxlIChzdGFjay5sZW5ndGgpIHtcbiAgICAgICAgICBjb25zdCB7IG5lc3RlZEFyckluZGV4LCB2YWx1ZSB9ID0gc3RhY2sucG9wKCk7XG5cbiAgICAgICAgICBpZiAoIWlzRGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGlzU3RyaW5nKHZhbHVlKSAmJiAhaXNCbGFuayh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGxldCBzdWJSZWNvcmQgPSB7XG4gICAgICAgICAgICAgIHY6IHZhbHVlLFxuICAgICAgICAgICAgICBpOiBuZXN0ZWRBcnJJbmRleCxcbiAgICAgICAgICAgICAgbjogdGhpcy5ub3JtLmdldCh2YWx1ZSlcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHN1YlJlY29yZHMucHVzaChzdWJSZWNvcmQpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbHVlLmZvckVhY2goKGl0ZW0sIGspID0+IHtcbiAgICAgICAgICAgICAgc3RhY2sucHVzaCh7XG4gICAgICAgICAgICAgICAgbmVzdGVkQXJySW5kZXg6IGssXG4gICAgICAgICAgICAgICAgdmFsdWU6IGl0ZW1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2UgO1xuICAgICAgICB9XG4gICAgICAgIHJlY29yZC4kW2tleUluZGV4XSA9IHN1YlJlY29yZHM7XG4gICAgICB9IGVsc2UgaWYgKGlzU3RyaW5nKHZhbHVlKSAmJiAhaXNCbGFuayh2YWx1ZSkpIHtcbiAgICAgICAgbGV0IHN1YlJlY29yZCA9IHtcbiAgICAgICAgICB2OiB2YWx1ZSxcbiAgICAgICAgICBuOiB0aGlzLm5vcm0uZ2V0KHZhbHVlKVxuICAgICAgICB9O1xuXG4gICAgICAgIHJlY29yZC4kW2tleUluZGV4XSA9IHN1YlJlY29yZDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMucmVjb3Jkcy5wdXNoKHJlY29yZCk7XG4gIH1cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB7XG4gICAgICBrZXlzOiB0aGlzLmtleXMsXG4gICAgICByZWNvcmRzOiB0aGlzLnJlY29yZHNcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlSW5kZXgoXG4gIGtleXMsXG4gIGRvY3MsXG4gIHsgZ2V0Rm4gPSBDb25maWcuZ2V0Rm4sIGZpZWxkTm9ybVdlaWdodCA9IENvbmZpZy5maWVsZE5vcm1XZWlnaHQgfSA9IHt9XG4pIHtcbiAgY29uc3QgbXlJbmRleCA9IG5ldyBGdXNlSW5kZXgoeyBnZXRGbiwgZmllbGROb3JtV2VpZ2h0IH0pO1xuICBteUluZGV4LnNldEtleXMoa2V5cy5tYXAoY3JlYXRlS2V5KSk7XG4gIG15SW5kZXguc2V0U291cmNlcyhkb2NzKTtcbiAgbXlJbmRleC5jcmVhdGUoKTtcbiAgcmV0dXJuIG15SW5kZXhcbn1cblxuZnVuY3Rpb24gcGFyc2VJbmRleChcbiAgZGF0YSxcbiAgeyBnZXRGbiA9IENvbmZpZy5nZXRGbiwgZmllbGROb3JtV2VpZ2h0ID0gQ29uZmlnLmZpZWxkTm9ybVdlaWdodCB9ID0ge31cbikge1xuICBjb25zdCB7IGtleXMsIHJlY29yZHMgfSA9IGRhdGE7XG4gIGNvbnN0IG15SW5kZXggPSBuZXcgRnVzZUluZGV4KHsgZ2V0Rm4sIGZpZWxkTm9ybVdlaWdodCB9KTtcbiAgbXlJbmRleC5zZXRLZXlzKGtleXMpO1xuICBteUluZGV4LnNldEluZGV4UmVjb3JkcyhyZWNvcmRzKTtcbiAgcmV0dXJuIG15SW5kZXhcbn1cblxuZnVuY3Rpb24gY29tcHV0ZVNjb3JlJDEoXG4gIHBhdHRlcm4sXG4gIHtcbiAgICBlcnJvcnMgPSAwLFxuICAgIGN1cnJlbnRMb2NhdGlvbiA9IDAsXG4gICAgZXhwZWN0ZWRMb2NhdGlvbiA9IDAsXG4gICAgZGlzdGFuY2UgPSBDb25maWcuZGlzdGFuY2UsXG4gICAgaWdub3JlTG9jYXRpb24gPSBDb25maWcuaWdub3JlTG9jYXRpb25cbiAgfSA9IHt9XG4pIHtcbiAgY29uc3QgYWNjdXJhY3kgPSBlcnJvcnMgLyBwYXR0ZXJuLmxlbmd0aDtcblxuICBpZiAoaWdub3JlTG9jYXRpb24pIHtcbiAgICByZXR1cm4gYWNjdXJhY3lcbiAgfVxuXG4gIGNvbnN0IHByb3hpbWl0eSA9IE1hdGguYWJzKGV4cGVjdGVkTG9jYXRpb24gLSBjdXJyZW50TG9jYXRpb24pO1xuXG4gIGlmICghZGlzdGFuY2UpIHtcbiAgICAvLyBEb2RnZSBkaXZpZGUgYnkgemVybyBlcnJvci5cbiAgICByZXR1cm4gcHJveGltaXR5ID8gMS4wIDogYWNjdXJhY3lcbiAgfVxuXG4gIHJldHVybiBhY2N1cmFjeSArIHByb3hpbWl0eSAvIGRpc3RhbmNlXG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRNYXNrVG9JbmRpY2VzKFxuICBtYXRjaG1hc2sgPSBbXSxcbiAgbWluTWF0Y2hDaGFyTGVuZ3RoID0gQ29uZmlnLm1pbk1hdGNoQ2hhckxlbmd0aFxuKSB7XG4gIGxldCBpbmRpY2VzID0gW107XG4gIGxldCBzdGFydCA9IC0xO1xuICBsZXQgZW5kID0gLTE7XG4gIGxldCBpID0gMDtcblxuICBmb3IgKGxldCBsZW4gPSBtYXRjaG1hc2subGVuZ3RoOyBpIDwgbGVuOyBpICs9IDEpIHtcbiAgICBsZXQgbWF0Y2ggPSBtYXRjaG1hc2tbaV07XG4gICAgaWYgKG1hdGNoICYmIHN0YXJ0ID09PSAtMSkge1xuICAgICAgc3RhcnQgPSBpO1xuICAgIH0gZWxzZSBpZiAoIW1hdGNoICYmIHN0YXJ0ICE9PSAtMSkge1xuICAgICAgZW5kID0gaSAtIDE7XG4gICAgICBpZiAoZW5kIC0gc3RhcnQgKyAxID49IG1pbk1hdGNoQ2hhckxlbmd0aCkge1xuICAgICAgICBpbmRpY2VzLnB1c2goW3N0YXJ0LCBlbmRdKTtcbiAgICAgIH1cbiAgICAgIHN0YXJ0ID0gLTE7XG4gICAgfVxuICB9XG5cbiAgLy8gKGktMSAtIHN0YXJ0KSArIDEgPT4gaSAtIHN0YXJ0XG4gIGlmIChtYXRjaG1hc2tbaSAtIDFdICYmIGkgLSBzdGFydCA+PSBtaW5NYXRjaENoYXJMZW5ndGgpIHtcbiAgICBpbmRpY2VzLnB1c2goW3N0YXJ0LCBpIC0gMV0pO1xuICB9XG5cbiAgcmV0dXJuIGluZGljZXNcbn1cblxuLy8gTWFjaGluZSB3b3JkIHNpemVcbmNvbnN0IE1BWF9CSVRTID0gMzI7XG5cbmZ1bmN0aW9uIHNlYXJjaChcbiAgdGV4dCxcbiAgcGF0dGVybixcbiAgcGF0dGVybkFscGhhYmV0LFxuICB7XG4gICAgbG9jYXRpb24gPSBDb25maWcubG9jYXRpb24sXG4gICAgZGlzdGFuY2UgPSBDb25maWcuZGlzdGFuY2UsXG4gICAgdGhyZXNob2xkID0gQ29uZmlnLnRocmVzaG9sZCxcbiAgICBmaW5kQWxsTWF0Y2hlcyA9IENvbmZpZy5maW5kQWxsTWF0Y2hlcyxcbiAgICBtaW5NYXRjaENoYXJMZW5ndGggPSBDb25maWcubWluTWF0Y2hDaGFyTGVuZ3RoLFxuICAgIGluY2x1ZGVNYXRjaGVzID0gQ29uZmlnLmluY2x1ZGVNYXRjaGVzLFxuICAgIGlnbm9yZUxvY2F0aW9uID0gQ29uZmlnLmlnbm9yZUxvY2F0aW9uXG4gIH0gPSB7fVxuKSB7XG4gIGlmIChwYXR0ZXJuLmxlbmd0aCA+IE1BWF9CSVRTKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFBBVFRFUk5fTEVOR1RIX1RPT19MQVJHRShNQVhfQklUUykpXG4gIH1cblxuICBjb25zdCBwYXR0ZXJuTGVuID0gcGF0dGVybi5sZW5ndGg7XG4gIC8vIFNldCBzdGFydGluZyBsb2NhdGlvbiBhdCBiZWdpbm5pbmcgdGV4dCBhbmQgaW5pdGlhbGl6ZSB0aGUgYWxwaGFiZXQuXG4gIGNvbnN0IHRleHRMZW4gPSB0ZXh0Lmxlbmd0aDtcbiAgLy8gSGFuZGxlIHRoZSBjYXNlIHdoZW4gbG9jYXRpb24gPiB0ZXh0Lmxlbmd0aFxuICBjb25zdCBleHBlY3RlZExvY2F0aW9uID0gTWF0aC5tYXgoMCwgTWF0aC5taW4obG9jYXRpb24sIHRleHRMZW4pKTtcbiAgLy8gSGlnaGVzdCBzY29yZSBiZXlvbmQgd2hpY2ggd2UgZ2l2ZSB1cC5cbiAgbGV0IGN1cnJlbnRUaHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIC8vIElzIHRoZXJlIGEgbmVhcmJ5IGV4YWN0IG1hdGNoPyAoc3BlZWR1cClcbiAgbGV0IGJlc3RMb2NhdGlvbiA9IGV4cGVjdGVkTG9jYXRpb247XG5cbiAgLy8gUGVyZm9ybWFuY2U6IG9ubHkgY29tcHV0ZXIgbWF0Y2hlcyB3aGVuIHRoZSBtaW5NYXRjaENoYXJMZW5ndGggPiAxXG4gIC8vIE9SIGlmIGBpbmNsdWRlTWF0Y2hlc2AgaXMgdHJ1ZS5cbiAgY29uc3QgY29tcHV0ZU1hdGNoZXMgPSBtaW5NYXRjaENoYXJMZW5ndGggPiAxIHx8IGluY2x1ZGVNYXRjaGVzO1xuICAvLyBBIG1hc2sgb2YgdGhlIG1hdGNoZXMsIHVzZWQgZm9yIGJ1aWxkaW5nIHRoZSBpbmRpY2VzXG4gIGNvbnN0IG1hdGNoTWFzayA9IGNvbXB1dGVNYXRjaGVzID8gQXJyYXkodGV4dExlbikgOiBbXTtcblxuICBsZXQgaW5kZXg7XG5cbiAgLy8gR2V0IGFsbCBleGFjdCBtYXRjaGVzLCBoZXJlIGZvciBzcGVlZCB1cFxuICB3aGlsZSAoKGluZGV4ID0gdGV4dC5pbmRleE9mKHBhdHRlcm4sIGJlc3RMb2NhdGlvbikpID4gLTEpIHtcbiAgICBsZXQgc2NvcmUgPSBjb21wdXRlU2NvcmUkMShwYXR0ZXJuLCB7XG4gICAgICBjdXJyZW50TG9jYXRpb246IGluZGV4LFxuICAgICAgZXhwZWN0ZWRMb2NhdGlvbixcbiAgICAgIGRpc3RhbmNlLFxuICAgICAgaWdub3JlTG9jYXRpb25cbiAgICB9KTtcblxuICAgIGN1cnJlbnRUaHJlc2hvbGQgPSBNYXRoLm1pbihzY29yZSwgY3VycmVudFRocmVzaG9sZCk7XG4gICAgYmVzdExvY2F0aW9uID0gaW5kZXggKyBwYXR0ZXJuTGVuO1xuXG4gICAgaWYgKGNvbXB1dGVNYXRjaGVzKSB7XG4gICAgICBsZXQgaSA9IDA7XG4gICAgICB3aGlsZSAoaSA8IHBhdHRlcm5MZW4pIHtcbiAgICAgICAgbWF0Y2hNYXNrW2luZGV4ICsgaV0gPSAxO1xuICAgICAgICBpICs9IDE7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gUmVzZXQgdGhlIGJlc3QgbG9jYXRpb25cbiAgYmVzdExvY2F0aW9uID0gLTE7XG5cbiAgbGV0IGxhc3RCaXRBcnIgPSBbXTtcbiAgbGV0IGZpbmFsU2NvcmUgPSAxO1xuICBsZXQgYmluTWF4ID0gcGF0dGVybkxlbiArIHRleHRMZW47XG5cbiAgY29uc3QgbWFzayA9IDEgPDwgKHBhdHRlcm5MZW4gLSAxKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdHRlcm5MZW47IGkgKz0gMSkge1xuICAgIC8vIFNjYW4gZm9yIHRoZSBiZXN0IG1hdGNoOyBlYWNoIGl0ZXJhdGlvbiBhbGxvd3MgZm9yIG9uZSBtb3JlIGVycm9yLlxuICAgIC8vIFJ1biBhIGJpbmFyeSBzZWFyY2ggdG8gZGV0ZXJtaW5lIGhvdyBmYXIgZnJvbSB0aGUgbWF0Y2ggbG9jYXRpb24gd2UgY2FuIHN0cmF5XG4gICAgLy8gYXQgdGhpcyBlcnJvciBsZXZlbC5cbiAgICBsZXQgYmluTWluID0gMDtcbiAgICBsZXQgYmluTWlkID0gYmluTWF4O1xuXG4gICAgd2hpbGUgKGJpbk1pbiA8IGJpbk1pZCkge1xuICAgICAgY29uc3Qgc2NvcmUgPSBjb21wdXRlU2NvcmUkMShwYXR0ZXJuLCB7XG4gICAgICAgIGVycm9yczogaSxcbiAgICAgICAgY3VycmVudExvY2F0aW9uOiBleHBlY3RlZExvY2F0aW9uICsgYmluTWlkLFxuICAgICAgICBleHBlY3RlZExvY2F0aW9uLFxuICAgICAgICBkaXN0YW5jZSxcbiAgICAgICAgaWdub3JlTG9jYXRpb25cbiAgICAgIH0pO1xuXG4gICAgICBpZiAoc2NvcmUgPD0gY3VycmVudFRocmVzaG9sZCkge1xuICAgICAgICBiaW5NaW4gPSBiaW5NaWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiaW5NYXggPSBiaW5NaWQ7XG4gICAgICB9XG5cbiAgICAgIGJpbk1pZCA9IE1hdGguZmxvb3IoKGJpbk1heCAtIGJpbk1pbikgLyAyICsgYmluTWluKTtcbiAgICB9XG5cbiAgICAvLyBVc2UgdGhlIHJlc3VsdCBmcm9tIHRoaXMgaXRlcmF0aW9uIGFzIHRoZSBtYXhpbXVtIGZvciB0aGUgbmV4dC5cbiAgICBiaW5NYXggPSBiaW5NaWQ7XG5cbiAgICBsZXQgc3RhcnQgPSBNYXRoLm1heCgxLCBleHBlY3RlZExvY2F0aW9uIC0gYmluTWlkICsgMSk7XG4gICAgbGV0IGZpbmlzaCA9IGZpbmRBbGxNYXRjaGVzXG4gICAgICA/IHRleHRMZW5cbiAgICAgIDogTWF0aC5taW4oZXhwZWN0ZWRMb2NhdGlvbiArIGJpbk1pZCwgdGV4dExlbikgKyBwYXR0ZXJuTGVuO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSB0aGUgYml0IGFycmF5XG4gICAgbGV0IGJpdEFyciA9IEFycmF5KGZpbmlzaCArIDIpO1xuXG4gICAgYml0QXJyW2ZpbmlzaCArIDFdID0gKDEgPDwgaSkgLSAxO1xuXG4gICAgZm9yIChsZXQgaiA9IGZpbmlzaDsgaiA+PSBzdGFydDsgaiAtPSAxKSB7XG4gICAgICBsZXQgY3VycmVudExvY2F0aW9uID0gaiAtIDE7XG4gICAgICBsZXQgY2hhck1hdGNoID0gcGF0dGVybkFscGhhYmV0W3RleHQuY2hhckF0KGN1cnJlbnRMb2NhdGlvbildO1xuXG4gICAgICBpZiAoY29tcHV0ZU1hdGNoZXMpIHtcbiAgICAgICAgLy8gU3BlZWQgdXA6IHF1aWNrIGJvb2wgdG8gaW50IGNvbnZlcnNpb24gKGkuZSwgYGNoYXJNYXRjaCA/IDEgOiAwYClcbiAgICAgICAgbWF0Y2hNYXNrW2N1cnJlbnRMb2NhdGlvbl0gPSArISFjaGFyTWF0Y2g7XG4gICAgICB9XG5cbiAgICAgIC8vIEZpcnN0IHBhc3M6IGV4YWN0IG1hdGNoXG4gICAgICBiaXRBcnJbal0gPSAoKGJpdEFycltqICsgMV0gPDwgMSkgfCAxKSAmIGNoYXJNYXRjaDtcblxuICAgICAgLy8gU3Vic2VxdWVudCBwYXNzZXM6IGZ1enp5IG1hdGNoXG4gICAgICBpZiAoaSkge1xuICAgICAgICBiaXRBcnJbal0gfD1cbiAgICAgICAgICAoKGxhc3RCaXRBcnJbaiArIDFdIHwgbGFzdEJpdEFycltqXSkgPDwgMSkgfCAxIHwgbGFzdEJpdEFycltqICsgMV07XG4gICAgICB9XG5cbiAgICAgIGlmIChiaXRBcnJbal0gJiBtYXNrKSB7XG4gICAgICAgIGZpbmFsU2NvcmUgPSBjb21wdXRlU2NvcmUkMShwYXR0ZXJuLCB7XG4gICAgICAgICAgZXJyb3JzOiBpLFxuICAgICAgICAgIGN1cnJlbnRMb2NhdGlvbixcbiAgICAgICAgICBleHBlY3RlZExvY2F0aW9uLFxuICAgICAgICAgIGRpc3RhbmNlLFxuICAgICAgICAgIGlnbm9yZUxvY2F0aW9uXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFRoaXMgbWF0Y2ggd2lsbCBhbG1vc3QgY2VydGFpbmx5IGJlIGJldHRlciB0aGFuIGFueSBleGlzdGluZyBtYXRjaC5cbiAgICAgICAgLy8gQnV0IGNoZWNrIGFueXdheS5cbiAgICAgICAgaWYgKGZpbmFsU2NvcmUgPD0gY3VycmVudFRocmVzaG9sZCkge1xuICAgICAgICAgIC8vIEluZGVlZCBpdCBpc1xuICAgICAgICAgIGN1cnJlbnRUaHJlc2hvbGQgPSBmaW5hbFNjb3JlO1xuICAgICAgICAgIGJlc3RMb2NhdGlvbiA9IGN1cnJlbnRMb2NhdGlvbjtcblxuICAgICAgICAgIC8vIEFscmVhZHkgcGFzc2VkIGBsb2NgLCBkb3duaGlsbCBmcm9tIGhlcmUgb24gaW4uXG4gICAgICAgICAgaWYgKGJlc3RMb2NhdGlvbiA8PSBleHBlY3RlZExvY2F0aW9uKSB7XG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFdoZW4gcGFzc2luZyBgYmVzdExvY2F0aW9uYCwgZG9uJ3QgZXhjZWVkIG91ciBjdXJyZW50IGRpc3RhbmNlIGZyb20gYGV4cGVjdGVkTG9jYXRpb25gLlxuICAgICAgICAgIHN0YXJ0ID0gTWF0aC5tYXgoMSwgMiAqIGV4cGVjdGVkTG9jYXRpb24gLSBiZXN0TG9jYXRpb24pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTm8gaG9wZSBmb3IgYSAoYmV0dGVyKSBtYXRjaCBhdCBncmVhdGVyIGVycm9yIGxldmVscy5cbiAgICBjb25zdCBzY29yZSA9IGNvbXB1dGVTY29yZSQxKHBhdHRlcm4sIHtcbiAgICAgIGVycm9yczogaSArIDEsXG4gICAgICBjdXJyZW50TG9jYXRpb246IGV4cGVjdGVkTG9jYXRpb24sXG4gICAgICBleHBlY3RlZExvY2F0aW9uLFxuICAgICAgZGlzdGFuY2UsXG4gICAgICBpZ25vcmVMb2NhdGlvblxuICAgIH0pO1xuXG4gICAgaWYgKHNjb3JlID4gY3VycmVudFRocmVzaG9sZCkge1xuICAgICAgYnJlYWtcbiAgICB9XG5cbiAgICBsYXN0Qml0QXJyID0gYml0QXJyO1xuICB9XG5cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIGlzTWF0Y2g6IGJlc3RMb2NhdGlvbiA+PSAwLFxuICAgIC8vIENvdW50IGV4YWN0IG1hdGNoZXMgKHRob3NlIHdpdGggYSBzY29yZSBvZiAwKSB0byBiZSBcImFsbW9zdFwiIGV4YWN0XG4gICAgc2NvcmU6IE1hdGgubWF4KDAuMDAxLCBmaW5hbFNjb3JlKVxuICB9O1xuXG4gIGlmIChjb21wdXRlTWF0Y2hlcykge1xuICAgIGNvbnN0IGluZGljZXMgPSBjb252ZXJ0TWFza1RvSW5kaWNlcyhtYXRjaE1hc2ssIG1pbk1hdGNoQ2hhckxlbmd0aCk7XG4gICAgaWYgKCFpbmRpY2VzLmxlbmd0aCkge1xuICAgICAgcmVzdWx0LmlzTWF0Y2ggPSBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKGluY2x1ZGVNYXRjaGVzKSB7XG4gICAgICByZXN1bHQuaW5kaWNlcyA9IGluZGljZXM7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG5mdW5jdGlvbiBjcmVhdGVQYXR0ZXJuQWxwaGFiZXQocGF0dGVybikge1xuICBsZXQgbWFzayA9IHt9O1xuXG4gIGZvciAobGV0IGkgPSAwLCBsZW4gPSBwYXR0ZXJuLmxlbmd0aDsgaSA8IGxlbjsgaSArPSAxKSB7XG4gICAgY29uc3QgY2hhciA9IHBhdHRlcm4uY2hhckF0KGkpO1xuICAgIG1hc2tbY2hhcl0gPSAobWFza1tjaGFyXSB8fCAwKSB8ICgxIDw8IChsZW4gLSBpIC0gMSkpO1xuICB9XG5cbiAgcmV0dXJuIG1hc2tcbn1cblxuY2xhc3MgQml0YXBTZWFyY2gge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwYXR0ZXJuLFxuICAgIHtcbiAgICAgIGxvY2F0aW9uID0gQ29uZmlnLmxvY2F0aW9uLFxuICAgICAgdGhyZXNob2xkID0gQ29uZmlnLnRocmVzaG9sZCxcbiAgICAgIGRpc3RhbmNlID0gQ29uZmlnLmRpc3RhbmNlLFxuICAgICAgaW5jbHVkZU1hdGNoZXMgPSBDb25maWcuaW5jbHVkZU1hdGNoZXMsXG4gICAgICBmaW5kQWxsTWF0Y2hlcyA9IENvbmZpZy5maW5kQWxsTWF0Y2hlcyxcbiAgICAgIG1pbk1hdGNoQ2hhckxlbmd0aCA9IENvbmZpZy5taW5NYXRjaENoYXJMZW5ndGgsXG4gICAgICBpc0Nhc2VTZW5zaXRpdmUgPSBDb25maWcuaXNDYXNlU2Vuc2l0aXZlLFxuICAgICAgaWdub3JlTG9jYXRpb24gPSBDb25maWcuaWdub3JlTG9jYXRpb25cbiAgICB9ID0ge31cbiAgKSB7XG4gICAgdGhpcy5vcHRpb25zID0ge1xuICAgICAgbG9jYXRpb24sXG4gICAgICB0aHJlc2hvbGQsXG4gICAgICBkaXN0YW5jZSxcbiAgICAgIGluY2x1ZGVNYXRjaGVzLFxuICAgICAgZmluZEFsbE1hdGNoZXMsXG4gICAgICBtaW5NYXRjaENoYXJMZW5ndGgsXG4gICAgICBpc0Nhc2VTZW5zaXRpdmUsXG4gICAgICBpZ25vcmVMb2NhdGlvblxuICAgIH07XG5cbiAgICB0aGlzLnBhdHRlcm4gPSBpc0Nhc2VTZW5zaXRpdmUgPyBwYXR0ZXJuIDogcGF0dGVybi50b0xvd2VyQ2FzZSgpO1xuXG4gICAgdGhpcy5jaHVua3MgPSBbXTtcblxuICAgIGlmICghdGhpcy5wYXR0ZXJuLmxlbmd0aCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgYWRkQ2h1bmsgPSAocGF0dGVybiwgc3RhcnRJbmRleCkgPT4ge1xuICAgICAgdGhpcy5jaHVua3MucHVzaCh7XG4gICAgICAgIHBhdHRlcm4sXG4gICAgICAgIGFscGhhYmV0OiBjcmVhdGVQYXR0ZXJuQWxwaGFiZXQocGF0dGVybiksXG4gICAgICAgIHN0YXJ0SW5kZXhcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBsZW4gPSB0aGlzLnBhdHRlcm4ubGVuZ3RoO1xuXG4gICAgaWYgKGxlbiA+IE1BWF9CSVRTKSB7XG4gICAgICBsZXQgaSA9IDA7XG4gICAgICBjb25zdCByZW1haW5kZXIgPSBsZW4gJSBNQVhfQklUUztcbiAgICAgIGNvbnN0IGVuZCA9IGxlbiAtIHJlbWFpbmRlcjtcblxuICAgICAgd2hpbGUgKGkgPCBlbmQpIHtcbiAgICAgICAgYWRkQ2h1bmsodGhpcy5wYXR0ZXJuLnN1YnN0cihpLCBNQVhfQklUUyksIGkpO1xuICAgICAgICBpICs9IE1BWF9CSVRTO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVtYWluZGVyKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBsZW4gLSBNQVhfQklUUztcbiAgICAgICAgYWRkQ2h1bmsodGhpcy5wYXR0ZXJuLnN1YnN0cihzdGFydEluZGV4KSwgc3RhcnRJbmRleCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGFkZENodW5rKHRoaXMucGF0dGVybiwgMCk7XG4gICAgfVxuICB9XG5cbiAgc2VhcmNoSW4odGV4dCkge1xuICAgIGNvbnN0IHsgaXNDYXNlU2Vuc2l0aXZlLCBpbmNsdWRlTWF0Y2hlcyB9ID0gdGhpcy5vcHRpb25zO1xuXG4gICAgaWYgKCFpc0Nhc2VTZW5zaXRpdmUpIHtcbiAgICAgIHRleHQgPSB0ZXh0LnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuXG4gICAgLy8gRXhhY3QgbWF0Y2hcbiAgICBpZiAodGhpcy5wYXR0ZXJuID09PSB0ZXh0KSB7XG4gICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICBpc01hdGNoOiB0cnVlLFxuICAgICAgICBzY29yZTogMFxuICAgICAgfTtcblxuICAgICAgaWYgKGluY2x1ZGVNYXRjaGVzKSB7XG4gICAgICAgIHJlc3VsdC5pbmRpY2VzID0gW1swLCB0ZXh0Lmxlbmd0aCAtIDFdXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH1cblxuICAgIC8vIE90aGVyd2lzZSwgdXNlIEJpdGFwIGFsZ29yaXRobVxuICAgIGNvbnN0IHtcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgZGlzdGFuY2UsXG4gICAgICB0aHJlc2hvbGQsXG4gICAgICBmaW5kQWxsTWF0Y2hlcyxcbiAgICAgIG1pbk1hdGNoQ2hhckxlbmd0aCxcbiAgICAgIGlnbm9yZUxvY2F0aW9uXG4gICAgfSA9IHRoaXMub3B0aW9ucztcblxuICAgIGxldCBhbGxJbmRpY2VzID0gW107XG4gICAgbGV0IHRvdGFsU2NvcmUgPSAwO1xuICAgIGxldCBoYXNNYXRjaGVzID0gZmFsc2U7XG5cbiAgICB0aGlzLmNodW5rcy5mb3JFYWNoKCh7IHBhdHRlcm4sIGFscGhhYmV0LCBzdGFydEluZGV4IH0pID0+IHtcbiAgICAgIGNvbnN0IHsgaXNNYXRjaCwgc2NvcmUsIGluZGljZXMgfSA9IHNlYXJjaCh0ZXh0LCBwYXR0ZXJuLCBhbHBoYWJldCwge1xuICAgICAgICBsb2NhdGlvbjogbG9jYXRpb24gKyBzdGFydEluZGV4LFxuICAgICAgICBkaXN0YW5jZSxcbiAgICAgICAgdGhyZXNob2xkLFxuICAgICAgICBmaW5kQWxsTWF0Y2hlcyxcbiAgICAgICAgbWluTWF0Y2hDaGFyTGVuZ3RoLFxuICAgICAgICBpbmNsdWRlTWF0Y2hlcyxcbiAgICAgICAgaWdub3JlTG9jYXRpb25cbiAgICAgIH0pO1xuXG4gICAgICBpZiAoaXNNYXRjaCkge1xuICAgICAgICBoYXNNYXRjaGVzID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgdG90YWxTY29yZSArPSBzY29yZTtcblxuICAgICAgaWYgKGlzTWF0Y2ggJiYgaW5kaWNlcykge1xuICAgICAgICBhbGxJbmRpY2VzID0gWy4uLmFsbEluZGljZXMsIC4uLmluZGljZXNdO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgIGlzTWF0Y2g6IGhhc01hdGNoZXMsXG4gICAgICBzY29yZTogaGFzTWF0Y2hlcyA/IHRvdGFsU2NvcmUgLyB0aGlzLmNodW5rcy5sZW5ndGggOiAxXG4gICAgfTtcblxuICAgIGlmIChoYXNNYXRjaGVzICYmIGluY2x1ZGVNYXRjaGVzKSB7XG4gICAgICByZXN1bHQuaW5kaWNlcyA9IGFsbEluZGljZXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG59XG5cbmNsYXNzIEJhc2VNYXRjaCB7XG4gIGNvbnN0cnVjdG9yKHBhdHRlcm4pIHtcbiAgICB0aGlzLnBhdHRlcm4gPSBwYXR0ZXJuO1xuICB9XG4gIHN0YXRpYyBpc011bHRpTWF0Y2gocGF0dGVybikge1xuICAgIHJldHVybiBnZXRNYXRjaChwYXR0ZXJuLCB0aGlzLm11bHRpUmVnZXgpXG4gIH1cbiAgc3RhdGljIGlzU2luZ2xlTWF0Y2gocGF0dGVybikge1xuICAgIHJldHVybiBnZXRNYXRjaChwYXR0ZXJuLCB0aGlzLnNpbmdsZVJlZ2V4KVxuICB9XG4gIHNlYXJjaCgvKnRleHQqLykge31cbn1cblxuZnVuY3Rpb24gZ2V0TWF0Y2gocGF0dGVybiwgZXhwKSB7XG4gIGNvbnN0IG1hdGNoZXMgPSBwYXR0ZXJuLm1hdGNoKGV4cCk7XG4gIHJldHVybiBtYXRjaGVzID8gbWF0Y2hlc1sxXSA6IG51bGxcbn1cblxuLy8gVG9rZW46ICdmaWxlXG5cbmNsYXNzIEV4YWN0TWF0Y2ggZXh0ZW5kcyBCYXNlTWF0Y2gge1xuICBjb25zdHJ1Y3RvcihwYXR0ZXJuKSB7XG4gICAgc3VwZXIocGF0dGVybik7XG4gIH1cbiAgc3RhdGljIGdldCB0eXBlKCkge1xuICAgIHJldHVybiAnZXhhY3QnXG4gIH1cbiAgc3RhdGljIGdldCBtdWx0aVJlZ2V4KCkge1xuICAgIHJldHVybiAvXj1cIiguKilcIiQvXG4gIH1cbiAgc3RhdGljIGdldCBzaW5nbGVSZWdleCgpIHtcbiAgICByZXR1cm4gL149KC4qKSQvXG4gIH1cbiAgc2VhcmNoKHRleHQpIHtcbiAgICBjb25zdCBpc01hdGNoID0gdGV4dCA9PT0gdGhpcy5wYXR0ZXJuO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlzTWF0Y2gsXG4gICAgICBzY29yZTogaXNNYXRjaCA/IDAgOiAxLFxuICAgICAgaW5kaWNlczogWzAsIHRoaXMucGF0dGVybi5sZW5ndGggLSAxXVxuICAgIH1cbiAgfVxufVxuXG4vLyBUb2tlbjogIWZpcmVcblxuY2xhc3MgSW52ZXJzZUV4YWN0TWF0Y2ggZXh0ZW5kcyBCYXNlTWF0Y2gge1xuICBjb25zdHJ1Y3RvcihwYXR0ZXJuKSB7XG4gICAgc3VwZXIocGF0dGVybik7XG4gIH1cbiAgc3RhdGljIGdldCB0eXBlKCkge1xuICAgIHJldHVybiAnaW52ZXJzZS1leGFjdCdcbiAgfVxuICBzdGF0aWMgZ2V0IG11bHRpUmVnZXgoKSB7XG4gICAgcmV0dXJuIC9eIVwiKC4qKVwiJC9cbiAgfVxuICBzdGF0aWMgZ2V0IHNpbmdsZVJlZ2V4KCkge1xuICAgIHJldHVybiAvXiEoLiopJC9cbiAgfVxuICBzZWFyY2godGV4dCkge1xuICAgIGNvbnN0IGluZGV4ID0gdGV4dC5pbmRleE9mKHRoaXMucGF0dGVybik7XG4gICAgY29uc3QgaXNNYXRjaCA9IGluZGV4ID09PSAtMTtcblxuICAgIHJldHVybiB7XG4gICAgICBpc01hdGNoLFxuICAgICAgc2NvcmU6IGlzTWF0Y2ggPyAwIDogMSxcbiAgICAgIGluZGljZXM6IFswLCB0ZXh0Lmxlbmd0aCAtIDFdXG4gICAgfVxuICB9XG59XG5cbi8vIFRva2VuOiBeZmlsZVxuXG5jbGFzcyBQcmVmaXhFeGFjdE1hdGNoIGV4dGVuZHMgQmFzZU1hdGNoIHtcbiAgY29uc3RydWN0b3IocGF0dGVybikge1xuICAgIHN1cGVyKHBhdHRlcm4pO1xuICB9XG4gIHN0YXRpYyBnZXQgdHlwZSgpIHtcbiAgICByZXR1cm4gJ3ByZWZpeC1leGFjdCdcbiAgfVxuICBzdGF0aWMgZ2V0IG11bHRpUmVnZXgoKSB7XG4gICAgcmV0dXJuIC9eXFxeXCIoLiopXCIkL1xuICB9XG4gIHN0YXRpYyBnZXQgc2luZ2xlUmVnZXgoKSB7XG4gICAgcmV0dXJuIC9eXFxeKC4qKSQvXG4gIH1cbiAgc2VhcmNoKHRleHQpIHtcbiAgICBjb25zdCBpc01hdGNoID0gdGV4dC5zdGFydHNXaXRoKHRoaXMucGF0dGVybik7XG5cbiAgICByZXR1cm4ge1xuICAgICAgaXNNYXRjaCxcbiAgICAgIHNjb3JlOiBpc01hdGNoID8gMCA6IDEsXG4gICAgICBpbmRpY2VzOiBbMCwgdGhpcy5wYXR0ZXJuLmxlbmd0aCAtIDFdXG4gICAgfVxuICB9XG59XG5cbi8vIFRva2VuOiAhXmZpcmVcblxuY2xhc3MgSW52ZXJzZVByZWZpeEV4YWN0TWF0Y2ggZXh0ZW5kcyBCYXNlTWF0Y2gge1xuICBjb25zdHJ1Y3RvcihwYXR0ZXJuKSB7XG4gICAgc3VwZXIocGF0dGVybik7XG4gIH1cbiAgc3RhdGljIGdldCB0eXBlKCkge1xuICAgIHJldHVybiAnaW52ZXJzZS1wcmVmaXgtZXhhY3QnXG4gIH1cbiAgc3RhdGljIGdldCBtdWx0aVJlZ2V4KCkge1xuICAgIHJldHVybiAvXiFcXF5cIiguKilcIiQvXG4gIH1cbiAgc3RhdGljIGdldCBzaW5nbGVSZWdleCgpIHtcbiAgICByZXR1cm4gL14hXFxeKC4qKSQvXG4gIH1cbiAgc2VhcmNoKHRleHQpIHtcbiAgICBjb25zdCBpc01hdGNoID0gIXRleHQuc3RhcnRzV2l0aCh0aGlzLnBhdHRlcm4pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlzTWF0Y2gsXG4gICAgICBzY29yZTogaXNNYXRjaCA/IDAgOiAxLFxuICAgICAgaW5kaWNlczogWzAsIHRleHQubGVuZ3RoIC0gMV1cbiAgICB9XG4gIH1cbn1cblxuLy8gVG9rZW46IC5maWxlJFxuXG5jbGFzcyBTdWZmaXhFeGFjdE1hdGNoIGV4dGVuZHMgQmFzZU1hdGNoIHtcbiAgY29uc3RydWN0b3IocGF0dGVybikge1xuICAgIHN1cGVyKHBhdHRlcm4pO1xuICB9XG4gIHN0YXRpYyBnZXQgdHlwZSgpIHtcbiAgICByZXR1cm4gJ3N1ZmZpeC1leGFjdCdcbiAgfVxuICBzdGF0aWMgZ2V0IG11bHRpUmVnZXgoKSB7XG4gICAgcmV0dXJuIC9eXCIoLiopXCJcXCQkL1xuICB9XG4gIHN0YXRpYyBnZXQgc2luZ2xlUmVnZXgoKSB7XG4gICAgcmV0dXJuIC9eKC4qKVxcJCQvXG4gIH1cbiAgc2VhcmNoKHRleHQpIHtcbiAgICBjb25zdCBpc01hdGNoID0gdGV4dC5lbmRzV2l0aCh0aGlzLnBhdHRlcm4pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlzTWF0Y2gsXG4gICAgICBzY29yZTogaXNNYXRjaCA/IDAgOiAxLFxuICAgICAgaW5kaWNlczogW3RleHQubGVuZ3RoIC0gdGhpcy5wYXR0ZXJuLmxlbmd0aCwgdGV4dC5sZW5ndGggLSAxXVxuICAgIH1cbiAgfVxufVxuXG4vLyBUb2tlbjogIS5maWxlJFxuXG5jbGFzcyBJbnZlcnNlU3VmZml4RXhhY3RNYXRjaCBleHRlbmRzIEJhc2VNYXRjaCB7XG4gIGNvbnN0cnVjdG9yKHBhdHRlcm4pIHtcbiAgICBzdXBlcihwYXR0ZXJuKTtcbiAgfVxuICBzdGF0aWMgZ2V0IHR5cGUoKSB7XG4gICAgcmV0dXJuICdpbnZlcnNlLXN1ZmZpeC1leGFjdCdcbiAgfVxuICBzdGF0aWMgZ2V0IG11bHRpUmVnZXgoKSB7XG4gICAgcmV0dXJuIC9eIVwiKC4qKVwiXFwkJC9cbiAgfVxuICBzdGF0aWMgZ2V0IHNpbmdsZVJlZ2V4KCkge1xuICAgIHJldHVybiAvXiEoLiopXFwkJC9cbiAgfVxuICBzZWFyY2godGV4dCkge1xuICAgIGNvbnN0IGlzTWF0Y2ggPSAhdGV4dC5lbmRzV2l0aCh0aGlzLnBhdHRlcm4pO1xuICAgIHJldHVybiB7XG4gICAgICBpc01hdGNoLFxuICAgICAgc2NvcmU6IGlzTWF0Y2ggPyAwIDogMSxcbiAgICAgIGluZGljZXM6IFswLCB0ZXh0Lmxlbmd0aCAtIDFdXG4gICAgfVxuICB9XG59XG5cbmNsYXNzIEZ1enp5TWF0Y2ggZXh0ZW5kcyBCYXNlTWF0Y2gge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwYXR0ZXJuLFxuICAgIHtcbiAgICAgIGxvY2F0aW9uID0gQ29uZmlnLmxvY2F0aW9uLFxuICAgICAgdGhyZXNob2xkID0gQ29uZmlnLnRocmVzaG9sZCxcbiAgICAgIGRpc3RhbmNlID0gQ29uZmlnLmRpc3RhbmNlLFxuICAgICAgaW5jbHVkZU1hdGNoZXMgPSBDb25maWcuaW5jbHVkZU1hdGNoZXMsXG4gICAgICBmaW5kQWxsTWF0Y2hlcyA9IENvbmZpZy5maW5kQWxsTWF0Y2hlcyxcbiAgICAgIG1pbk1hdGNoQ2hhckxlbmd0aCA9IENvbmZpZy5taW5NYXRjaENoYXJMZW5ndGgsXG4gICAgICBpc0Nhc2VTZW5zaXRpdmUgPSBDb25maWcuaXNDYXNlU2Vuc2l0aXZlLFxuICAgICAgaWdub3JlTG9jYXRpb24gPSBDb25maWcuaWdub3JlTG9jYXRpb25cbiAgICB9ID0ge31cbiAgKSB7XG4gICAgc3VwZXIocGF0dGVybik7XG4gICAgdGhpcy5fYml0YXBTZWFyY2ggPSBuZXcgQml0YXBTZWFyY2gocGF0dGVybiwge1xuICAgICAgbG9jYXRpb24sXG4gICAgICB0aHJlc2hvbGQsXG4gICAgICBkaXN0YW5jZSxcbiAgICAgIGluY2x1ZGVNYXRjaGVzLFxuICAgICAgZmluZEFsbE1hdGNoZXMsXG4gICAgICBtaW5NYXRjaENoYXJMZW5ndGgsXG4gICAgICBpc0Nhc2VTZW5zaXRpdmUsXG4gICAgICBpZ25vcmVMb2NhdGlvblxuICAgIH0pO1xuICB9XG4gIHN0YXRpYyBnZXQgdHlwZSgpIHtcbiAgICByZXR1cm4gJ2Z1enp5J1xuICB9XG4gIHN0YXRpYyBnZXQgbXVsdGlSZWdleCgpIHtcbiAgICByZXR1cm4gL15cIiguKilcIiQvXG4gIH1cbiAgc3RhdGljIGdldCBzaW5nbGVSZWdleCgpIHtcbiAgICByZXR1cm4gL14oLiopJC9cbiAgfVxuICBzZWFyY2godGV4dCkge1xuICAgIHJldHVybiB0aGlzLl9iaXRhcFNlYXJjaC5zZWFyY2hJbih0ZXh0KVxuICB9XG59XG5cbi8vIFRva2VuOiAnZmlsZVxuXG5jbGFzcyBJbmNsdWRlTWF0Y2ggZXh0ZW5kcyBCYXNlTWF0Y2gge1xuICBjb25zdHJ1Y3RvcihwYXR0ZXJuKSB7XG4gICAgc3VwZXIocGF0dGVybik7XG4gIH1cbiAgc3RhdGljIGdldCB0eXBlKCkge1xuICAgIHJldHVybiAnaW5jbHVkZSdcbiAgfVxuICBzdGF0aWMgZ2V0IG11bHRpUmVnZXgoKSB7XG4gICAgcmV0dXJuIC9eJ1wiKC4qKVwiJC9cbiAgfVxuICBzdGF0aWMgZ2V0IHNpbmdsZVJlZ2V4KCkge1xuICAgIHJldHVybiAvXicoLiopJC9cbiAgfVxuICBzZWFyY2godGV4dCkge1xuICAgIGxldCBsb2NhdGlvbiA9IDA7XG4gICAgbGV0IGluZGV4O1xuXG4gICAgY29uc3QgaW5kaWNlcyA9IFtdO1xuICAgIGNvbnN0IHBhdHRlcm5MZW4gPSB0aGlzLnBhdHRlcm4ubGVuZ3RoO1xuXG4gICAgLy8gR2V0IGFsbCBleGFjdCBtYXRjaGVzXG4gICAgd2hpbGUgKChpbmRleCA9IHRleHQuaW5kZXhPZih0aGlzLnBhdHRlcm4sIGxvY2F0aW9uKSkgPiAtMSkge1xuICAgICAgbG9jYXRpb24gPSBpbmRleCArIHBhdHRlcm5MZW47XG4gICAgICBpbmRpY2VzLnB1c2goW2luZGV4LCBsb2NhdGlvbiAtIDFdKTtcbiAgICB9XG5cbiAgICBjb25zdCBpc01hdGNoID0gISFpbmRpY2VzLmxlbmd0aDtcblxuICAgIHJldHVybiB7XG4gICAgICBpc01hdGNoLFxuICAgICAgc2NvcmU6IGlzTWF0Y2ggPyAwIDogMSxcbiAgICAgIGluZGljZXNcbiAgICB9XG4gIH1cbn1cblxuLy8gXHUyNzU3T3JkZXIgaXMgaW1wb3J0YW50LiBETyBOT1QgQ0hBTkdFLlxuY29uc3Qgc2VhcmNoZXJzID0gW1xuICBFeGFjdE1hdGNoLFxuICBJbmNsdWRlTWF0Y2gsXG4gIFByZWZpeEV4YWN0TWF0Y2gsXG4gIEludmVyc2VQcmVmaXhFeGFjdE1hdGNoLFxuICBJbnZlcnNlU3VmZml4RXhhY3RNYXRjaCxcbiAgU3VmZml4RXhhY3RNYXRjaCxcbiAgSW52ZXJzZUV4YWN0TWF0Y2gsXG4gIEZ1enp5TWF0Y2hcbl07XG5cbmNvbnN0IHNlYXJjaGVyc0xlbiA9IHNlYXJjaGVycy5sZW5ndGg7XG5cbi8vIFJlZ2V4IHRvIHNwbGl0IGJ5IHNwYWNlcywgYnV0IGtlZXAgYW55dGhpbmcgaW4gcXVvdGVzIHRvZ2V0aGVyXG5jb25zdCBTUEFDRV9SRSA9IC8gKyg/PSg/OlteXFxcIl0qXFxcIlteXFxcIl0qXFxcIikqW15cXFwiXSokKS87XG5jb25zdCBPUl9UT0tFTiA9ICd8JztcblxuLy8gUmV0dXJuIGEgMkQgYXJyYXkgcmVwcmVzZW50YXRpb24gb2YgdGhlIHF1ZXJ5LCBmb3Igc2ltcGxlciBwYXJzaW5nLlxuLy8gRXhhbXBsZTpcbi8vIFwiXmNvcmUgZ28kIHwgcmIkIHwgcHkkIHh5JFwiID0+IFtbXCJeY29yZVwiLCBcImdvJFwiXSwgW1wicmIkXCJdLCBbXCJweSRcIiwgXCJ4eSRcIl1dXG5mdW5jdGlvbiBwYXJzZVF1ZXJ5KHBhdHRlcm4sIG9wdGlvbnMgPSB7fSkge1xuICByZXR1cm4gcGF0dGVybi5zcGxpdChPUl9UT0tFTikubWFwKChpdGVtKSA9PiB7XG4gICAgbGV0IHF1ZXJ5ID0gaXRlbVxuICAgICAgLnRyaW0oKVxuICAgICAgLnNwbGl0KFNQQUNFX1JFKVxuICAgICAgLmZpbHRlcigoaXRlbSkgPT4gaXRlbSAmJiAhIWl0ZW0udHJpbSgpKTtcblxuICAgIGxldCByZXN1bHRzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHF1ZXJ5Lmxlbmd0aDsgaSA8IGxlbjsgaSArPSAxKSB7XG4gICAgICBjb25zdCBxdWVyeUl0ZW0gPSBxdWVyeVtpXTtcblxuICAgICAgLy8gMS4gSGFuZGxlIG11bHRpcGxlIHF1ZXJ5IG1hdGNoIChpLmUsIG9uY2UgdGhhdCBhcmUgcXVvdGVkLCBsaWtlIGBcImhlbGxvIHdvcmxkXCJgKVxuICAgICAgbGV0IGZvdW5kID0gZmFsc2U7XG4gICAgICBsZXQgaWR4ID0gLTE7XG4gICAgICB3aGlsZSAoIWZvdW5kICYmICsraWR4IDwgc2VhcmNoZXJzTGVuKSB7XG4gICAgICAgIGNvbnN0IHNlYXJjaGVyID0gc2VhcmNoZXJzW2lkeF07XG4gICAgICAgIGxldCB0b2tlbiA9IHNlYXJjaGVyLmlzTXVsdGlNYXRjaChxdWVyeUl0ZW0pO1xuICAgICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgICByZXN1bHRzLnB1c2gobmV3IHNlYXJjaGVyKHRva2VuLCBvcHRpb25zKSk7XG4gICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyAyLiBIYW5kbGUgc2luZ2xlIHF1ZXJ5IG1hdGNoZXMgKGkuZSwgb25jZSB0aGF0IGFyZSAqbm90KiBxdW90ZWQpXG4gICAgICBpZHggPSAtMTtcbiAgICAgIHdoaWxlICgrK2lkeCA8IHNlYXJjaGVyc0xlbikge1xuICAgICAgICBjb25zdCBzZWFyY2hlciA9IHNlYXJjaGVyc1tpZHhdO1xuICAgICAgICBsZXQgdG9rZW4gPSBzZWFyY2hlci5pc1NpbmdsZU1hdGNoKHF1ZXJ5SXRlbSk7XG4gICAgICAgIGlmICh0b2tlbikge1xuICAgICAgICAgIHJlc3VsdHMucHVzaChuZXcgc2VhcmNoZXIodG9rZW4sIG9wdGlvbnMpKTtcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdHNcbiAgfSlcbn1cblxuLy8gVGhlc2UgZXh0ZW5kZWQgbWF0Y2hlcnMgY2FuIHJldHVybiBhbiBhcnJheSBvZiBtYXRjaGVzLCBhcyBvcHBvc2VkXG4vLyB0byBhIHNpbmdsIG1hdGNoXG5jb25zdCBNdWx0aU1hdGNoU2V0ID0gbmV3IFNldChbRnV6enlNYXRjaC50eXBlLCBJbmNsdWRlTWF0Y2gudHlwZV0pO1xuXG4vKipcbiAqIENvbW1hbmQtbGlrZSBzZWFyY2hpbmdcbiAqID09PT09PT09PT09PT09PT09PT09PT1cbiAqXG4gKiBHaXZlbiBtdWx0aXBsZSBzZWFyY2ggdGVybXMgZGVsaW1pdGVkIGJ5IHNwYWNlcy5lLmcuIGBeanNjcmlwdCAucHl0aG9uJCBydWJ5ICFqYXZhYCxcbiAqIHNlYXJjaCBpbiBhIGdpdmVuIHRleHQuXG4gKlxuICogU2VhcmNoIHN5bnRheDpcbiAqXG4gKiB8IFRva2VuICAgICAgIHwgTWF0Y2ggdHlwZSAgICAgICAgICAgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8IC0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8XG4gKiB8IGBqc2NyaXB0YCAgIHwgZnV6enktbWF0Y2ggICAgICAgICAgICAgICAgfCBJdGVtcyB0aGF0IGZ1enp5IG1hdGNoIGBqc2NyaXB0YCAgICAgICB8XG4gKiB8IGA9c2NoZW1lYCAgIHwgZXhhY3QtbWF0Y2ggICAgICAgICAgICAgICAgfCBJdGVtcyB0aGF0IGFyZSBgc2NoZW1lYCAgICAgICAgICAgICAgICB8XG4gKiB8IGAncHl0aG9uYCAgIHwgaW5jbHVkZS1tYXRjaCAgICAgICAgICAgICAgfCBJdGVtcyB0aGF0IGluY2x1ZGUgYHB5dGhvbmAgICAgICAgICAgICB8XG4gKiB8IGAhcnVieWAgICAgIHwgaW52ZXJzZS1leGFjdC1tYXRjaCAgICAgICAgfCBJdGVtcyB0aGF0IGRvIG5vdCBpbmNsdWRlIGBydWJ5YCAgICAgICB8XG4gKiB8IGBeamF2YWAgICAgIHwgcHJlZml4LWV4YWN0LW1hdGNoICAgICAgICAgfCBJdGVtcyB0aGF0IHN0YXJ0IHdpdGggYGphdmFgICAgICAgICAgICB8XG4gKiB8IGAhXmVhcmxhbmdgIHwgaW52ZXJzZS1wcmVmaXgtZXhhY3QtbWF0Y2ggfCBJdGVtcyB0aGF0IGRvIG5vdCBzdGFydCB3aXRoIGBlYXJsYW5nYCB8XG4gKiB8IGAuanMkYCAgICAgIHwgc3VmZml4LWV4YWN0LW1hdGNoICAgICAgICAgfCBJdGVtcyB0aGF0IGVuZCB3aXRoIGAuanNgICAgICAgICAgICAgICB8XG4gKiB8IGAhLmdvJGAgICAgIHwgaW52ZXJzZS1zdWZmaXgtZXhhY3QtbWF0Y2ggfCBJdGVtcyB0aGF0IGRvIG5vdCBlbmQgd2l0aCBgLmdvYCAgICAgICB8XG4gKlxuICogQSBzaW5nbGUgcGlwZSBjaGFyYWN0ZXIgYWN0cyBhcyBhbiBPUiBvcGVyYXRvci4gRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmdcbiAqIHF1ZXJ5IG1hdGNoZXMgZW50cmllcyB0aGF0IHN0YXJ0IHdpdGggYGNvcmVgIGFuZCBlbmQgd2l0aCBlaXRoZXJgZ29gLCBgcmJgLFxuICogb3JgcHlgLlxuICpcbiAqIGBgYFxuICogXmNvcmUgZ28kIHwgcmIkIHwgcHkkXG4gKiBgYGBcbiAqL1xuY2xhc3MgRXh0ZW5kZWRTZWFyY2gge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwYXR0ZXJuLFxuICAgIHtcbiAgICAgIGlzQ2FzZVNlbnNpdGl2ZSA9IENvbmZpZy5pc0Nhc2VTZW5zaXRpdmUsXG4gICAgICBpbmNsdWRlTWF0Y2hlcyA9IENvbmZpZy5pbmNsdWRlTWF0Y2hlcyxcbiAgICAgIG1pbk1hdGNoQ2hhckxlbmd0aCA9IENvbmZpZy5taW5NYXRjaENoYXJMZW5ndGgsXG4gICAgICBpZ25vcmVMb2NhdGlvbiA9IENvbmZpZy5pZ25vcmVMb2NhdGlvbixcbiAgICAgIGZpbmRBbGxNYXRjaGVzID0gQ29uZmlnLmZpbmRBbGxNYXRjaGVzLFxuICAgICAgbG9jYXRpb24gPSBDb25maWcubG9jYXRpb24sXG4gICAgICB0aHJlc2hvbGQgPSBDb25maWcudGhyZXNob2xkLFxuICAgICAgZGlzdGFuY2UgPSBDb25maWcuZGlzdGFuY2VcbiAgICB9ID0ge31cbiAgKSB7XG4gICAgdGhpcy5xdWVyeSA9IG51bGw7XG4gICAgdGhpcy5vcHRpb25zID0ge1xuICAgICAgaXNDYXNlU2Vuc2l0aXZlLFxuICAgICAgaW5jbHVkZU1hdGNoZXMsXG4gICAgICBtaW5NYXRjaENoYXJMZW5ndGgsXG4gICAgICBmaW5kQWxsTWF0Y2hlcyxcbiAgICAgIGlnbm9yZUxvY2F0aW9uLFxuICAgICAgbG9jYXRpb24sXG4gICAgICB0aHJlc2hvbGQsXG4gICAgICBkaXN0YW5jZVxuICAgIH07XG5cbiAgICB0aGlzLnBhdHRlcm4gPSBpc0Nhc2VTZW5zaXRpdmUgPyBwYXR0ZXJuIDogcGF0dGVybi50b0xvd2VyQ2FzZSgpO1xuICAgIHRoaXMucXVlcnkgPSBwYXJzZVF1ZXJ5KHRoaXMucGF0dGVybiwgdGhpcy5vcHRpb25zKTtcbiAgfVxuXG4gIHN0YXRpYyBjb25kaXRpb24oXywgb3B0aW9ucykge1xuICAgIHJldHVybiBvcHRpb25zLnVzZUV4dGVuZGVkU2VhcmNoXG4gIH1cblxuICBzZWFyY2hJbih0ZXh0KSB7XG4gICAgY29uc3QgcXVlcnkgPSB0aGlzLnF1ZXJ5O1xuXG4gICAgaWYgKCFxdWVyeSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNNYXRjaDogZmFsc2UsXG4gICAgICAgIHNjb3JlOiAxXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgeyBpbmNsdWRlTWF0Y2hlcywgaXNDYXNlU2Vuc2l0aXZlIH0gPSB0aGlzLm9wdGlvbnM7XG5cbiAgICB0ZXh0ID0gaXNDYXNlU2Vuc2l0aXZlID8gdGV4dCA6IHRleHQudG9Mb3dlckNhc2UoKTtcblxuICAgIGxldCBudW1NYXRjaGVzID0gMDtcbiAgICBsZXQgYWxsSW5kaWNlcyA9IFtdO1xuICAgIGxldCB0b3RhbFNjb3JlID0gMDtcblxuICAgIC8vIE9Sc1xuICAgIGZvciAobGV0IGkgPSAwLCBxTGVuID0gcXVlcnkubGVuZ3RoOyBpIDwgcUxlbjsgaSArPSAxKSB7XG4gICAgICBjb25zdCBzZWFyY2hlcnMgPSBxdWVyeVtpXTtcblxuICAgICAgLy8gUmVzZXQgaW5kaWNlc1xuICAgICAgYWxsSW5kaWNlcy5sZW5ndGggPSAwO1xuICAgICAgbnVtTWF0Y2hlcyA9IDA7XG5cbiAgICAgIC8vIEFORHNcbiAgICAgIGZvciAobGV0IGogPSAwLCBwTGVuID0gc2VhcmNoZXJzLmxlbmd0aDsgaiA8IHBMZW47IGogKz0gMSkge1xuICAgICAgICBjb25zdCBzZWFyY2hlciA9IHNlYXJjaGVyc1tqXTtcbiAgICAgICAgY29uc3QgeyBpc01hdGNoLCBpbmRpY2VzLCBzY29yZSB9ID0gc2VhcmNoZXIuc2VhcmNoKHRleHQpO1xuXG4gICAgICAgIGlmIChpc01hdGNoKSB7XG4gICAgICAgICAgbnVtTWF0Y2hlcyArPSAxO1xuICAgICAgICAgIHRvdGFsU2NvcmUgKz0gc2NvcmU7XG4gICAgICAgICAgaWYgKGluY2x1ZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICBjb25zdCB0eXBlID0gc2VhcmNoZXIuY29uc3RydWN0b3IudHlwZTtcbiAgICAgICAgICAgIGlmIChNdWx0aU1hdGNoU2V0Lmhhcyh0eXBlKSkge1xuICAgICAgICAgICAgICBhbGxJbmRpY2VzID0gWy4uLmFsbEluZGljZXMsIC4uLmluZGljZXNdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgYWxsSW5kaWNlcy5wdXNoKGluZGljZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0b3RhbFNjb3JlID0gMDtcbiAgICAgICAgICBudW1NYXRjaGVzID0gMDtcbiAgICAgICAgICBhbGxJbmRpY2VzLmxlbmd0aCA9IDA7XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBPUiBjb25kaXRpb24sIHNvIGlmIFRSVUUsIHJldHVyblxuICAgICAgaWYgKG51bU1hdGNoZXMpIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgICBpc01hdGNoOiB0cnVlLFxuICAgICAgICAgIHNjb3JlOiB0b3RhbFNjb3JlIC8gbnVtTWF0Y2hlc1xuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChpbmNsdWRlTWF0Y2hlcykge1xuICAgICAgICAgIHJlc3VsdC5pbmRpY2VzID0gYWxsSW5kaWNlcztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBOb3RoaW5nIHdhcyBtYXRjaGVkXG4gICAgcmV0dXJuIHtcbiAgICAgIGlzTWF0Y2g6IGZhbHNlLFxuICAgICAgc2NvcmU6IDFcbiAgICB9XG4gIH1cbn1cblxuY29uc3QgcmVnaXN0ZXJlZFNlYXJjaGVycyA9IFtdO1xuXG5mdW5jdGlvbiByZWdpc3RlciguLi5hcmdzKSB7XG4gIHJlZ2lzdGVyZWRTZWFyY2hlcnMucHVzaCguLi5hcmdzKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlU2VhcmNoZXIocGF0dGVybiwgb3B0aW9ucykge1xuICBmb3IgKGxldCBpID0gMCwgbGVuID0gcmVnaXN0ZXJlZFNlYXJjaGVycy5sZW5ndGg7IGkgPCBsZW47IGkgKz0gMSkge1xuICAgIGxldCBzZWFyY2hlckNsYXNzID0gcmVnaXN0ZXJlZFNlYXJjaGVyc1tpXTtcbiAgICBpZiAoc2VhcmNoZXJDbGFzcy5jb25kaXRpb24ocGF0dGVybiwgb3B0aW9ucykpIHtcbiAgICAgIHJldHVybiBuZXcgc2VhcmNoZXJDbGFzcyhwYXR0ZXJuLCBvcHRpb25zKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgQml0YXBTZWFyY2gocGF0dGVybiwgb3B0aW9ucylcbn1cblxuY29uc3QgTG9naWNhbE9wZXJhdG9yID0ge1xuICBBTkQ6ICckYW5kJyxcbiAgT1I6ICckb3InXG59O1xuXG5jb25zdCBLZXlUeXBlID0ge1xuICBQQVRIOiAnJHBhdGgnLFxuICBQQVRURVJOOiAnJHZhbCdcbn07XG5cbmNvbnN0IGlzRXhwcmVzc2lvbiA9IChxdWVyeSkgPT5cbiAgISEocXVlcnlbTG9naWNhbE9wZXJhdG9yLkFORF0gfHwgcXVlcnlbTG9naWNhbE9wZXJhdG9yLk9SXSk7XG5cbmNvbnN0IGlzUGF0aCA9IChxdWVyeSkgPT4gISFxdWVyeVtLZXlUeXBlLlBBVEhdO1xuXG5jb25zdCBpc0xlYWYgPSAocXVlcnkpID0+XG4gICFpc0FycmF5KHF1ZXJ5KSAmJiBpc09iamVjdChxdWVyeSkgJiYgIWlzRXhwcmVzc2lvbihxdWVyeSk7XG5cbmNvbnN0IGNvbnZlcnRUb0V4cGxpY2l0ID0gKHF1ZXJ5KSA9PiAoe1xuICBbTG9naWNhbE9wZXJhdG9yLkFORF06IE9iamVjdC5rZXlzKHF1ZXJ5KS5tYXAoKGtleSkgPT4gKHtcbiAgICBba2V5XTogcXVlcnlba2V5XVxuICB9KSlcbn0pO1xuXG4vLyBXaGVuIGBhdXRvYCBpcyBgdHJ1ZWAsIHRoZSBwYXJzZSBmdW5jdGlvbiB3aWxsIGluZmVyIGFuZCBpbml0aWFsaXplIGFuZCBhZGRcbi8vIHRoZSBhcHByb3ByaWF0ZSBgU2VhcmNoZXJgIGluc3RhbmNlXG5mdW5jdGlvbiBwYXJzZShxdWVyeSwgb3B0aW9ucywgeyBhdXRvID0gdHJ1ZSB9ID0ge30pIHtcbiAgY29uc3QgbmV4dCA9IChxdWVyeSkgPT4ge1xuICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMocXVlcnkpO1xuXG4gICAgY29uc3QgaXNRdWVyeVBhdGggPSBpc1BhdGgocXVlcnkpO1xuXG4gICAgaWYgKCFpc1F1ZXJ5UGF0aCAmJiBrZXlzLmxlbmd0aCA+IDEgJiYgIWlzRXhwcmVzc2lvbihxdWVyeSkpIHtcbiAgICAgIHJldHVybiBuZXh0KGNvbnZlcnRUb0V4cGxpY2l0KHF1ZXJ5KSlcbiAgICB9XG5cbiAgICBpZiAoaXNMZWFmKHF1ZXJ5KSkge1xuICAgICAgY29uc3Qga2V5ID0gaXNRdWVyeVBhdGggPyBxdWVyeVtLZXlUeXBlLlBBVEhdIDoga2V5c1swXTtcblxuICAgICAgY29uc3QgcGF0dGVybiA9IGlzUXVlcnlQYXRoID8gcXVlcnlbS2V5VHlwZS5QQVRURVJOXSA6IHF1ZXJ5W2tleV07XG5cbiAgICAgIGlmICghaXNTdHJpbmcocGF0dGVybikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKExPR0lDQUxfU0VBUkNIX0lOVkFMSURfUVVFUllfRk9SX0tFWShrZXkpKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBvYmogPSB7XG4gICAgICAgIGtleUlkOiBjcmVhdGVLZXlJZChrZXkpLFxuICAgICAgICBwYXR0ZXJuXG4gICAgICB9O1xuXG4gICAgICBpZiAoYXV0bykge1xuICAgICAgICBvYmouc2VhcmNoZXIgPSBjcmVhdGVTZWFyY2hlcihwYXR0ZXJuLCBvcHRpb25zKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9ialxuICAgIH1cblxuICAgIGxldCBub2RlID0ge1xuICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgb3BlcmF0b3I6IGtleXNbMF1cbiAgICB9O1xuXG4gICAga2V5cy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gcXVlcnlba2V5XTtcblxuICAgICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHZhbHVlLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICBub2RlLmNoaWxkcmVuLnB1c2gobmV4dChpdGVtKSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5vZGVcbiAgfTtcblxuICBpZiAoIWlzRXhwcmVzc2lvbihxdWVyeSkpIHtcbiAgICBxdWVyeSA9IGNvbnZlcnRUb0V4cGxpY2l0KHF1ZXJ5KTtcbiAgfVxuXG4gIHJldHVybiBuZXh0KHF1ZXJ5KVxufVxuXG4vLyBQcmFjdGljYWwgc2NvcmluZyBmdW5jdGlvblxuZnVuY3Rpb24gY29tcHV0ZVNjb3JlKFxuICByZXN1bHRzLFxuICB7IGlnbm9yZUZpZWxkTm9ybSA9IENvbmZpZy5pZ25vcmVGaWVsZE5vcm0gfVxuKSB7XG4gIHJlc3VsdHMuZm9yRWFjaCgocmVzdWx0KSA9PiB7XG4gICAgbGV0IHRvdGFsU2NvcmUgPSAxO1xuXG4gICAgcmVzdWx0Lm1hdGNoZXMuZm9yRWFjaCgoeyBrZXksIG5vcm0sIHNjb3JlIH0pID0+IHtcbiAgICAgIGNvbnN0IHdlaWdodCA9IGtleSA/IGtleS53ZWlnaHQgOiBudWxsO1xuXG4gICAgICB0b3RhbFNjb3JlICo9IE1hdGgucG93KFxuICAgICAgICBzY29yZSA9PT0gMCAmJiB3ZWlnaHQgPyBOdW1iZXIuRVBTSUxPTiA6IHNjb3JlLFxuICAgICAgICAod2VpZ2h0IHx8IDEpICogKGlnbm9yZUZpZWxkTm9ybSA/IDEgOiBub3JtKVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIHJlc3VsdC5zY29yZSA9IHRvdGFsU2NvcmU7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1NYXRjaGVzKHJlc3VsdCwgZGF0YSkge1xuICBjb25zdCBtYXRjaGVzID0gcmVzdWx0Lm1hdGNoZXM7XG4gIGRhdGEubWF0Y2hlcyA9IFtdO1xuXG4gIGlmICghaXNEZWZpbmVkKG1hdGNoZXMpKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBtYXRjaGVzLmZvckVhY2goKG1hdGNoKSA9PiB7XG4gICAgaWYgKCFpc0RlZmluZWQobWF0Y2guaW5kaWNlcykgfHwgIW1hdGNoLmluZGljZXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCB7IGluZGljZXMsIHZhbHVlIH0gPSBtYXRjaDtcblxuICAgIGxldCBvYmogPSB7XG4gICAgICBpbmRpY2VzLFxuICAgICAgdmFsdWVcbiAgICB9O1xuXG4gICAgaWYgKG1hdGNoLmtleSkge1xuICAgICAgb2JqLmtleSA9IG1hdGNoLmtleS5zcmM7XG4gICAgfVxuXG4gICAgaWYgKG1hdGNoLmlkeCA+IC0xKSB7XG4gICAgICBvYmoucmVmSW5kZXggPSBtYXRjaC5pZHg7XG4gICAgfVxuXG4gICAgZGF0YS5tYXRjaGVzLnB1c2gob2JqKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybVNjb3JlKHJlc3VsdCwgZGF0YSkge1xuICBkYXRhLnNjb3JlID0gcmVzdWx0LnNjb3JlO1xufVxuXG5mdW5jdGlvbiBmb3JtYXQoXG4gIHJlc3VsdHMsXG4gIGRvY3MsXG4gIHtcbiAgICBpbmNsdWRlTWF0Y2hlcyA9IENvbmZpZy5pbmNsdWRlTWF0Y2hlcyxcbiAgICBpbmNsdWRlU2NvcmUgPSBDb25maWcuaW5jbHVkZVNjb3JlXG4gIH0gPSB7fVxuKSB7XG4gIGNvbnN0IHRyYW5zZm9ybWVycyA9IFtdO1xuXG4gIGlmIChpbmNsdWRlTWF0Y2hlcykgdHJhbnNmb3JtZXJzLnB1c2godHJhbnNmb3JtTWF0Y2hlcyk7XG4gIGlmIChpbmNsdWRlU2NvcmUpIHRyYW5zZm9ybWVycy5wdXNoKHRyYW5zZm9ybVNjb3JlKTtcblxuICByZXR1cm4gcmVzdWx0cy5tYXAoKHJlc3VsdCkgPT4ge1xuICAgIGNvbnN0IHsgaWR4IH0gPSByZXN1bHQ7XG5cbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgaXRlbTogZG9jc1tpZHhdLFxuICAgICAgcmVmSW5kZXg6IGlkeFxuICAgIH07XG5cbiAgICBpZiAodHJhbnNmb3JtZXJzLmxlbmd0aCkge1xuICAgICAgdHJhbnNmb3JtZXJzLmZvckVhY2goKHRyYW5zZm9ybWVyKSA9PiB7XG4gICAgICAgIHRyYW5zZm9ybWVyKHJlc3VsdCwgZGF0YSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YVxuICB9KVxufVxuXG5jbGFzcyBGdXNlIHtcbiAgY29uc3RydWN0b3IoZG9jcywgb3B0aW9ucyA9IHt9LCBpbmRleCkge1xuICAgIHRoaXMub3B0aW9ucyA9IHsgLi4uQ29uZmlnLCAuLi5vcHRpb25zIH07XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLm9wdGlvbnMudXNlRXh0ZW5kZWRTZWFyY2ggJiZcbiAgICAgICF0cnVlXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoRVhURU5ERURfU0VBUkNIX1VOQVZBSUxBQkxFKVxuICAgIH1cblxuICAgIHRoaXMuX2tleVN0b3JlID0gbmV3IEtleVN0b3JlKHRoaXMub3B0aW9ucy5rZXlzKTtcblxuICAgIHRoaXMuc2V0Q29sbGVjdGlvbihkb2NzLCBpbmRleCk7XG4gIH1cblxuICBzZXRDb2xsZWN0aW9uKGRvY3MsIGluZGV4KSB7XG4gICAgdGhpcy5fZG9jcyA9IGRvY3M7XG5cbiAgICBpZiAoaW5kZXggJiYgIShpbmRleCBpbnN0YW5jZW9mIEZ1c2VJbmRleCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihJTkNPUlJFQ1RfSU5ERVhfVFlQRSlcbiAgICB9XG5cbiAgICB0aGlzLl9teUluZGV4ID1cbiAgICAgIGluZGV4IHx8XG4gICAgICBjcmVhdGVJbmRleCh0aGlzLm9wdGlvbnMua2V5cywgdGhpcy5fZG9jcywge1xuICAgICAgICBnZXRGbjogdGhpcy5vcHRpb25zLmdldEZuLFxuICAgICAgICBmaWVsZE5vcm1XZWlnaHQ6IHRoaXMub3B0aW9ucy5maWVsZE5vcm1XZWlnaHRcbiAgICAgIH0pO1xuICB9XG5cbiAgYWRkKGRvYykge1xuICAgIGlmICghaXNEZWZpbmVkKGRvYykpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX2RvY3MucHVzaChkb2MpO1xuICAgIHRoaXMuX215SW5kZXguYWRkKGRvYyk7XG4gIH1cblxuICByZW1vdmUocHJlZGljYXRlID0gKC8qIGRvYywgaWR4ICovKSA9PiBmYWxzZSkge1xuICAgIGNvbnN0IHJlc3VsdHMgPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB0aGlzLl9kb2NzLmxlbmd0aDsgaSA8IGxlbjsgaSArPSAxKSB7XG4gICAgICBjb25zdCBkb2MgPSB0aGlzLl9kb2NzW2ldO1xuICAgICAgaWYgKHByZWRpY2F0ZShkb2MsIGkpKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlQXQoaSk7XG4gICAgICAgIGkgLT0gMTtcbiAgICAgICAgbGVuIC09IDE7XG5cbiAgICAgICAgcmVzdWx0cy5wdXNoKGRvYyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdHNcbiAgfVxuXG4gIHJlbW92ZUF0KGlkeCkge1xuICAgIHRoaXMuX2RvY3Muc3BsaWNlKGlkeCwgMSk7XG4gICAgdGhpcy5fbXlJbmRleC5yZW1vdmVBdChpZHgpO1xuICB9XG5cbiAgZ2V0SW5kZXgoKSB7XG4gICAgcmV0dXJuIHRoaXMuX215SW5kZXhcbiAgfVxuXG4gIHNlYXJjaChxdWVyeSwgeyBsaW1pdCA9IC0xIH0gPSB7fSkge1xuICAgIGNvbnN0IHtcbiAgICAgIGluY2x1ZGVNYXRjaGVzLFxuICAgICAgaW5jbHVkZVNjb3JlLFxuICAgICAgc2hvdWxkU29ydCxcbiAgICAgIHNvcnRGbixcbiAgICAgIGlnbm9yZUZpZWxkTm9ybVxuICAgIH0gPSB0aGlzLm9wdGlvbnM7XG5cbiAgICBsZXQgcmVzdWx0cyA9IGlzU3RyaW5nKHF1ZXJ5KVxuICAgICAgPyBpc1N0cmluZyh0aGlzLl9kb2NzWzBdKVxuICAgICAgICA/IHRoaXMuX3NlYXJjaFN0cmluZ0xpc3QocXVlcnkpXG4gICAgICAgIDogdGhpcy5fc2VhcmNoT2JqZWN0TGlzdChxdWVyeSlcbiAgICAgIDogdGhpcy5fc2VhcmNoTG9naWNhbChxdWVyeSk7XG5cbiAgICBjb21wdXRlU2NvcmUocmVzdWx0cywgeyBpZ25vcmVGaWVsZE5vcm0gfSk7XG5cbiAgICBpZiAoc2hvdWxkU29ydCkge1xuICAgICAgcmVzdWx0cy5zb3J0KHNvcnRGbik7XG4gICAgfVxuXG4gICAgaWYgKGlzTnVtYmVyKGxpbWl0KSAmJiBsaW1pdCA+IC0xKSB7XG4gICAgICByZXN1bHRzID0gcmVzdWx0cy5zbGljZSgwLCBsaW1pdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvcm1hdChyZXN1bHRzLCB0aGlzLl9kb2NzLCB7XG4gICAgICBpbmNsdWRlTWF0Y2hlcyxcbiAgICAgIGluY2x1ZGVTY29yZVxuICAgIH0pXG4gIH1cblxuICBfc2VhcmNoU3RyaW5nTGlzdChxdWVyeSkge1xuICAgIGNvbnN0IHNlYXJjaGVyID0gY3JlYXRlU2VhcmNoZXIocXVlcnksIHRoaXMub3B0aW9ucyk7XG4gICAgY29uc3QgeyByZWNvcmRzIH0gPSB0aGlzLl9teUluZGV4O1xuICAgIGNvbnN0IHJlc3VsdHMgPSBbXTtcblxuICAgIC8vIEl0ZXJhdGUgb3ZlciBldmVyeSBzdHJpbmcgaW4gdGhlIGluZGV4XG4gICAgcmVjb3Jkcy5mb3JFYWNoKCh7IHY6IHRleHQsIGk6IGlkeCwgbjogbm9ybSB9KSA9PiB7XG4gICAgICBpZiAoIWlzRGVmaW5lZCh0ZXh0KSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBpc01hdGNoLCBzY29yZSwgaW5kaWNlcyB9ID0gc2VhcmNoZXIuc2VhcmNoSW4odGV4dCk7XG5cbiAgICAgIGlmIChpc01hdGNoKSB7XG4gICAgICAgIHJlc3VsdHMucHVzaCh7XG4gICAgICAgICAgaXRlbTogdGV4dCxcbiAgICAgICAgICBpZHgsXG4gICAgICAgICAgbWF0Y2hlczogW3sgc2NvcmUsIHZhbHVlOiB0ZXh0LCBub3JtLCBpbmRpY2VzIH1dXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3VsdHNcbiAgfVxuXG4gIF9zZWFyY2hMb2dpY2FsKHF1ZXJ5KSB7XG5cbiAgICBjb25zdCBleHByZXNzaW9uID0gcGFyc2UocXVlcnksIHRoaXMub3B0aW9ucyk7XG5cbiAgICBjb25zdCBldmFsdWF0ZSA9IChub2RlLCBpdGVtLCBpZHgpID0+IHtcbiAgICAgIGlmICghbm9kZS5jaGlsZHJlbikge1xuICAgICAgICBjb25zdCB7IGtleUlkLCBzZWFyY2hlciB9ID0gbm9kZTtcblxuICAgICAgICBjb25zdCBtYXRjaGVzID0gdGhpcy5fZmluZE1hdGNoZXMoe1xuICAgICAgICAgIGtleTogdGhpcy5fa2V5U3RvcmUuZ2V0KGtleUlkKSxcbiAgICAgICAgICB2YWx1ZTogdGhpcy5fbXlJbmRleC5nZXRWYWx1ZUZvckl0ZW1BdEtleUlkKGl0ZW0sIGtleUlkKSxcbiAgICAgICAgICBzZWFyY2hlclxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAobWF0Y2hlcyAmJiBtYXRjaGVzLmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlkeCxcbiAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgbWF0Y2hlc1xuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbXVxuICAgICAgfVxuXG4gICAgICBjb25zdCByZXMgPSBbXTtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBub2RlLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGxlbjsgaSArPSAxKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkID0gbm9kZS5jaGlsZHJlbltpXTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZXZhbHVhdGUoY2hpbGQsIGl0ZW0sIGlkeCk7XG4gICAgICAgIGlmIChyZXN1bHQubGVuZ3RoKSB7XG4gICAgICAgICAgcmVzLnB1c2goLi4ucmVzdWx0KTtcbiAgICAgICAgfSBlbHNlIGlmIChub2RlLm9wZXJhdG9yID09PSBMb2dpY2FsT3BlcmF0b3IuQU5EKSB7XG4gICAgICAgICAgcmV0dXJuIFtdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNcbiAgICB9O1xuXG4gICAgY29uc3QgcmVjb3JkcyA9IHRoaXMuX215SW5kZXgucmVjb3JkcztcbiAgICBjb25zdCByZXN1bHRNYXAgPSB7fTtcbiAgICBjb25zdCByZXN1bHRzID0gW107XG5cbiAgICByZWNvcmRzLmZvckVhY2goKHsgJDogaXRlbSwgaTogaWR4IH0pID0+IHtcbiAgICAgIGlmIChpc0RlZmluZWQoaXRlbSkpIHtcbiAgICAgICAgbGV0IGV4cFJlc3VsdHMgPSBldmFsdWF0ZShleHByZXNzaW9uLCBpdGVtLCBpZHgpO1xuXG4gICAgICAgIGlmIChleHBSZXN1bHRzLmxlbmd0aCkge1xuICAgICAgICAgIC8vIERlZHVwZSB3aGVuIGFkZGluZ1xuICAgICAgICAgIGlmICghcmVzdWx0TWFwW2lkeF0pIHtcbiAgICAgICAgICAgIHJlc3VsdE1hcFtpZHhdID0geyBpZHgsIGl0ZW0sIG1hdGNoZXM6IFtdIH07XG4gICAgICAgICAgICByZXN1bHRzLnB1c2gocmVzdWx0TWFwW2lkeF0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBleHBSZXN1bHRzLmZvckVhY2goKHsgbWF0Y2hlcyB9KSA9PiB7XG4gICAgICAgICAgICByZXN1bHRNYXBbaWR4XS5tYXRjaGVzLnB1c2goLi4ubWF0Y2hlcyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHRzXG4gIH1cblxuICBfc2VhcmNoT2JqZWN0TGlzdChxdWVyeSkge1xuICAgIGNvbnN0IHNlYXJjaGVyID0gY3JlYXRlU2VhcmNoZXIocXVlcnksIHRoaXMub3B0aW9ucyk7XG4gICAgY29uc3QgeyBrZXlzLCByZWNvcmRzIH0gPSB0aGlzLl9teUluZGV4O1xuICAgIGNvbnN0IHJlc3VsdHMgPSBbXTtcblxuICAgIC8vIExpc3QgaXMgQXJyYXk8T2JqZWN0PlxuICAgIHJlY29yZHMuZm9yRWFjaCgoeyAkOiBpdGVtLCBpOiBpZHggfSkgPT4ge1xuICAgICAgaWYgKCFpc0RlZmluZWQoaXRlbSkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGxldCBtYXRjaGVzID0gW107XG5cbiAgICAgIC8vIEl0ZXJhdGUgb3ZlciBldmVyeSBrZXkgKGkuZSwgcGF0aCksIGFuZCBmZXRjaCB0aGUgdmFsdWUgYXQgdGhhdCBrZXlcbiAgICAgIGtleXMuZm9yRWFjaCgoa2V5LCBrZXlJbmRleCkgPT4ge1xuICAgICAgICBtYXRjaGVzLnB1c2goXG4gICAgICAgICAgLi4udGhpcy5fZmluZE1hdGNoZXMoe1xuICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgdmFsdWU6IGl0ZW1ba2V5SW5kZXhdLFxuICAgICAgICAgICAgc2VhcmNoZXJcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChtYXRjaGVzLmxlbmd0aCkge1xuICAgICAgICByZXN1bHRzLnB1c2goe1xuICAgICAgICAgIGlkeCxcbiAgICAgICAgICBpdGVtLFxuICAgICAgICAgIG1hdGNoZXNcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVzdWx0c1xuICB9XG4gIF9maW5kTWF0Y2hlcyh7IGtleSwgdmFsdWUsIHNlYXJjaGVyIH0pIHtcbiAgICBpZiAoIWlzRGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBbXVxuICAgIH1cblxuICAgIGxldCBtYXRjaGVzID0gW107XG5cbiAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHZhbHVlLmZvckVhY2goKHsgdjogdGV4dCwgaTogaWR4LCBuOiBub3JtIH0pID0+IHtcbiAgICAgICAgaWYgKCFpc0RlZmluZWQodGV4dCkpIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgaXNNYXRjaCwgc2NvcmUsIGluZGljZXMgfSA9IHNlYXJjaGVyLnNlYXJjaEluKHRleHQpO1xuXG4gICAgICAgIGlmIChpc01hdGNoKSB7XG4gICAgICAgICAgbWF0Y2hlcy5wdXNoKHtcbiAgICAgICAgICAgIHNjb3JlLFxuICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgdmFsdWU6IHRleHQsXG4gICAgICAgICAgICBpZHgsXG4gICAgICAgICAgICBub3JtLFxuICAgICAgICAgICAgaW5kaWNlc1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgeyB2OiB0ZXh0LCBuOiBub3JtIH0gPSB2YWx1ZTtcblxuICAgICAgY29uc3QgeyBpc01hdGNoLCBzY29yZSwgaW5kaWNlcyB9ID0gc2VhcmNoZXIuc2VhcmNoSW4odGV4dCk7XG5cbiAgICAgIGlmIChpc01hdGNoKSB7XG4gICAgICAgIG1hdGNoZXMucHVzaCh7IHNjb3JlLCBrZXksIHZhbHVlOiB0ZXh0LCBub3JtLCBpbmRpY2VzIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXRjaGVzXG4gIH1cbn1cblxuRnVzZS52ZXJzaW9uID0gJzYuNi4yJztcbkZ1c2UuY3JlYXRlSW5kZXggPSBjcmVhdGVJbmRleDtcbkZ1c2UucGFyc2VJbmRleCA9IHBhcnNlSW5kZXg7XG5GdXNlLmNvbmZpZyA9IENvbmZpZztcblxue1xuICBGdXNlLnBhcnNlUXVlcnkgPSBwYXJzZTtcbn1cblxue1xuICByZWdpc3RlcihFeHRlbmRlZFNlYXJjaCk7XG59XG5cbmV4cG9ydCB7IEZ1c2UgYXMgZGVmYXVsdCB9O1xuIiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbXBhcmVWZXJzaW9ucyh2MSwgdjIpIHtcbiAgLy8gdmFsaWRhdGUgaW5wdXQgYW5kIHNwbGl0IGludG8gc2VnbWVudHNcbiAgY29uc3QgbjEgPSB2YWxpZGF0ZUFuZFBhcnNlKHYxKTtcbiAgY29uc3QgbjIgPSB2YWxpZGF0ZUFuZFBhcnNlKHYyKTtcblxuICAvLyBwb3Agb2ZmIHRoZSBwYXRjaFxuICBjb25zdCBwMSA9IG4xLnBvcCgpO1xuICBjb25zdCBwMiA9IG4yLnBvcCgpO1xuXG4gIC8vIHZhbGlkYXRlIG51bWJlcnNcbiAgY29uc3QgciA9IGNvbXBhcmVTZWdtZW50cyhuMSwgbjIpO1xuICBpZiAociAhPT0gMCkgcmV0dXJuIHI7XG5cbiAgLy8gdmFsaWRhdGUgcHJlLXJlbGVhc2VcbiAgaWYgKHAxICYmIHAyKSB7XG4gICAgcmV0dXJuIGNvbXBhcmVTZWdtZW50cyhwMS5zcGxpdCgnLicpLCBwMi5zcGxpdCgnLicpKTtcbiAgfSBlbHNlIGlmIChwMSB8fCBwMikge1xuICAgIHJldHVybiBwMSA/IC0xIDogMTtcbiAgfVxuXG4gIHJldHVybiAwO1xufVxuXG5leHBvcnQgY29uc3QgdmFsaWRhdGUgPSAodikgPT5cbiAgdHlwZW9mIHYgPT09ICdzdHJpbmcnICYmIC9eW3ZcXGRdLy50ZXN0KHYpICYmIHNlbXZlci50ZXN0KHYpO1xuXG5leHBvcnQgY29uc3QgY29tcGFyZSA9ICh2MSwgdjIsIG9wZXJhdG9yKSA9PiB7XG4gIC8vIHZhbGlkYXRlIGlucHV0IG9wZXJhdG9yXG4gIGFzc2VydFZhbGlkT3BlcmF0b3Iob3BlcmF0b3IpO1xuXG4gIC8vIHNpbmNlIHJlc3VsdCBvZiBjb21wYXJlVmVyc2lvbnMgY2FuIG9ubHkgYmUgLTEgb3IgMCBvciAxXG4gIC8vIGEgc2ltcGxlIG1hcCBjYW4gYmUgdXNlZCB0byByZXBsYWNlIHN3aXRjaFxuICBjb25zdCByZXMgPSBjb21wYXJlVmVyc2lvbnModjEsIHYyKTtcblxuICByZXR1cm4gb3BlcmF0b3JSZXNNYXBbb3BlcmF0b3JdLmluY2x1ZGVzKHJlcyk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2F0aXNmaWVzID0gKHYsIHIpID0+IHtcbiAgLy8gaWYgbm8gcmFuZ2Ugb3BlcmF0b3IgdGhlbiBcIj1cIlxuICBjb25zdCBtID0gci5tYXRjaCgvXihbPD49fl5dKykvKTtcbiAgY29uc3Qgb3AgPSBtID8gbVsxXSA6ICc9JztcblxuICAvLyBpZiBndC9sdC9lcSB0aGVuIG9wZXJhdG9yIGNvbXBhcmVcbiAgaWYgKG9wICE9PSAnXicgJiYgb3AgIT09ICd+JykgcmV0dXJuIGNvbXBhcmUodiwgciwgb3ApO1xuXG4gIC8vIGVsc2UgcmFuZ2Ugb2YgZWl0aGVyIFwiflwiIG9yIFwiXlwiIGlzIGFzc3VtZWRcbiAgY29uc3QgW3YxLCB2MiwgdjNdID0gdmFsaWRhdGVBbmRQYXJzZSh2KTtcbiAgY29uc3QgW3IxLCByMiwgcjNdID0gdmFsaWRhdGVBbmRQYXJzZShyKTtcbiAgaWYgKGNvbXBhcmVTdHJpbmdzKHYxLCByMSkgIT09IDApIHJldHVybiBmYWxzZTtcbiAgaWYgKG9wID09PSAnXicpIHtcbiAgICByZXR1cm4gY29tcGFyZVNlZ21lbnRzKFt2MiwgdjNdLCBbcjIsIHIzXSkgPj0gMDtcbiAgfVxuICBpZiAoY29tcGFyZVN0cmluZ3ModjIsIHIyKSAhPT0gMCkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gY29tcGFyZVN0cmluZ3ModjMsIHIzKSA+PSAwO1xufTtcblxuLy8gZXhwb3J0IENKUyBzdHlsZSBmb3IgcGFyaXR5XG5jb21wYXJlVmVyc2lvbnMudmFsaWRhdGUgPSB2YWxpZGF0ZTtcbmNvbXBhcmVWZXJzaW9ucy5jb21wYXJlID0gY29tcGFyZTtcbmNvbXBhcmVWZXJzaW9ucy5zYXN0aXNmaWVzID0gc2F0aXNmaWVzO1xuXG5jb25zdCBzZW12ZXIgPVxuICAvXlt2Xn48Pj1dKj8oXFxkKykoPzpcXC4oW3gqXXxcXGQrKSg/OlxcLihbeCpdfFxcZCspKD86XFwuKFt4Kl18XFxkKykpPyg/Oi0oW1xcZGEtelxcLV0rKD86XFwuW1xcZGEtelxcLV0rKSopKT8oPzpcXCtbXFxkYS16XFwtXSsoPzpcXC5bXFxkYS16XFwtXSspKik/KT8pPyQvaTtcblxuY29uc3QgdmFsaWRhdGVBbmRQYXJzZSA9ICh2KSA9PiB7XG4gIGlmICh0eXBlb2YgdiAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGFyZ3VtZW50IGV4cGVjdGVkIHN0cmluZycpO1xuICB9XG4gIGNvbnN0IG1hdGNoID0gdi5tYXRjaChzZW12ZXIpO1xuICBpZiAoIW1hdGNoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGFyZ3VtZW50IG5vdCB2YWxpZCBzZW12ZXIgKCcke3Z9JyByZWNlaXZlZClgKTtcbiAgfVxuICBtYXRjaC5zaGlmdCgpO1xuICByZXR1cm4gbWF0Y2g7XG59O1xuXG5jb25zdCBpc1dpbGRjYXJkID0gKHMpID0+IHMgPT09ICcqJyB8fCBzID09PSAneCcgfHwgcyA9PT0gJ1gnO1xuXG5jb25zdCB0cnlQYXJzZSA9ICh2KSA9PiB7XG4gIGNvbnN0IG4gPSBwYXJzZUludCh2LCAxMCk7XG4gIHJldHVybiBpc05hTihuKSA/IHYgOiBuO1xufTtcblxuY29uc3QgZm9yY2VUeXBlID0gKGEsIGIpID0+XG4gIHR5cGVvZiBhICE9PSB0eXBlb2YgYiA/IFtTdHJpbmcoYSksIFN0cmluZyhiKV0gOiBbYSwgYl07XG5cbmNvbnN0IGNvbXBhcmVTdHJpbmdzID0gKGEsIGIpID0+IHtcbiAgaWYgKGlzV2lsZGNhcmQoYSkgfHwgaXNXaWxkY2FyZChiKSkgcmV0dXJuIDA7XG4gIGNvbnN0IFthcCwgYnBdID0gZm9yY2VUeXBlKHRyeVBhcnNlKGEpLCB0cnlQYXJzZShiKSk7XG4gIGlmIChhcCA+IGJwKSByZXR1cm4gMTtcbiAgaWYgKGFwIDwgYnApIHJldHVybiAtMTtcbiAgcmV0dXJuIDA7XG59O1xuXG5jb25zdCBjb21wYXJlU2VnbWVudHMgPSAoYSwgYikgPT4ge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IE1hdGgubWF4KGEubGVuZ3RoLCBiLmxlbmd0aCk7IGkrKykge1xuICAgIGNvbnN0IHIgPSBjb21wYXJlU3RyaW5ncyhhW2ldIHx8IDAsIGJbaV0gfHwgMCk7XG4gICAgaWYgKHIgIT09IDApIHJldHVybiByO1xuICB9XG4gIHJldHVybiAwO1xufTtcblxuY29uc3Qgb3BlcmF0b3JSZXNNYXAgPSB7XG4gICc+JzogWzFdLFxuICAnPj0nOiBbMCwgMV0sXG4gICc9JzogWzBdLFxuICAnPD0nOiBbLTEsIDBdLFxuICAnPCc6IFstMV0sXG59O1xuXG5jb25zdCBhbGxvd2VkT3BlcmF0b3JzID0gT2JqZWN0LmtleXMob3BlcmF0b3JSZXNNYXApO1xuXG5jb25zdCBhc3NlcnRWYWxpZE9wZXJhdG9yID0gKG9wKSA9PiB7XG4gIGlmICh0eXBlb2Ygb3AgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgIGBJbnZhbGlkIG9wZXJhdG9yIHR5cGUsIGV4cGVjdGVkIHN0cmluZyBidXQgZ290ICR7dHlwZW9mIG9wfWBcbiAgICApO1xuICB9XG4gIGlmIChhbGxvd2VkT3BlcmF0b3JzLmluZGV4T2Yob3ApID09PSAtMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBJbnZhbGlkIG9wZXJhdG9yLCBleHBlY3RlZCBvbmUgb2YgJHthbGxvd2VkT3BlcmF0b3JzLmpvaW4oJ3wnKX1gXG4gICAgKTtcbiAgfVxufTtcbiIsICJpbXBvcnQgY29tcGFyZVZlcnNpb25zLCB7IGNvbXBhcmUsIHNhdGlzZmllcyB9IGZyb20gXCJjb21wYXJlLXZlcnNpb25zXCI7XG5pbXBvcnQgZW1vamkgZnJvbSBcIm5vZGUtZW1vamlcIjtcblxuaW1wb3J0IFBhY2tNYW5hZ2VyIGZyb20gXCIuLi9pY29uLXBhY2tzL3BhY2stbWFuYWdlclwiO1xuaW1wb3J0IHsgSWNvbkRhdGEsIEljb25JbmZvIH0gZnJvbSBcIi4uL2ljb24tcGFja3MvdHlwZXNcIjtcbmltcG9ydCBJY29uU0MgZnJvbSBcIi4uL2lzYy1tYWluXCI7XG5pbXBvcnQgeyBFbW9qaVN1Z2dlc3Rlck1vZGFsIH0gZnJvbSBcIi4uL21vZHVsZXMvc3VnZ2VzdGVyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGludGVyZmFjZSBJY29uU0NBUEkge1xuICBoYXNJY29uOiAoaWQ6IHN0cmluZykgPT4gYm9vbGVhbjtcblxuICAvKipcbiAgICogQHBhcmFtIGlkIGFjY2VwdCBzaG9ydGNvZGUgd2l0aCBjb2xvbnNcbiAgICogQHBhcmFtIHJhdyBpZiB0cnVlLCByZXR1cm4gc3RyaW5nIChlbW9qaSkgb3IgZGF0YSB1cmkvcmVzb3VyY2UgcGF0aCBpbnN0ZWFkIG9mIHNwYW4gZWxlbWVudFxuICAgKiBAcmV0dXJucyBzdHJpbmcgKGVtb2ppKSBvciBkYXRhIHVyaS9yZXNvdXJjZSBwYXRoIChpY29ucyk7IG51bGwgaWYgZ2l2ZW4gaWQgaXMgbm90IGZvdW5kXG4gICAqL1xuICBnZXRJY29uKGlkOiBzdHJpbmcsIHJhdzogdHJ1ZSk6IHN0cmluZyB8IG51bGw7XG4gIC8qKlxuICAgKiBAcGFyYW0gaWQgYWNjZXB0IHNob3J0Y29kZSB3aXRoIGNvbG9uc1xuICAgKiBAcGFyYW0gcmF3IGlmIHRydWUsIHJldHVybiBzdmcgZGF0YSB1cmkgaW5zdGVhZCBvZiBzcGFuIGVsZW1lbnRcbiAgICogQHJldHVybnMgc3BhbiBlbGVtZW50IGNvbnRhaW5pbmcgdGhlIGljb24gc3RyaW5nKGVtb2ppKSBvciBpbWcgZWxlbWVudDsgbnVsbCBpZiBnaXZlbiBpZCBpcyBub3QgZm91bmRcbiAgICovXG4gIGdldEljb24oaWQ6IHN0cmluZywgcmF3PzogZmFsc2UpOiBIVE1MU3BhbkVsZW1lbnQgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBnZXQgcmF3IHN2ZyBjb250ZW50IG9mIGljb24gd2hlbiBhdmFpbGFibGVcbiAgICogQHBhcmFtIGlkIGFjY2VwdCBzaG9ydGNvZGUgd2l0aCBjb2xvbnNcbiAgICogQHBhcmFtIHJhdyBpZiB0cnVlLCByZXR1cm4gc3ZnIGNvbnRlbnQgKHdoZW4gZ2l2ZW4gc3ZnIGljb24pIC8gIGluc3RlYWQgb2Ygc3BhbiBlbGVtZW50XG4gICAqIEByZXR1cm5zIHN0cmluZyAoZW1vamkpIG9yIHN2ZyBjb250ZW50IChzdmcgaWNvbikgb3IgcmVzb3VyY2UgcGF0aCAoYml0bWFwIGljb24pOyBudWxsIGlmIGdpdmVuIGlkIGlzIG5vdCBmb3VuZFxuICAgKi9cbiAgZ2V0U1ZHSWNvbihpZDogc3RyaW5nLCByYXc6IHRydWUpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+O1xuICAvKipcbiAgICogZ2V0IGlubGluZSBzdmcgdmVyc2lvbiBvZiBpY29uIHdoZW4gYXZhaWxhYmxlXG4gICAqIEBwYXJhbSBpZCBhY2NlcHQgc2hvcnRjb2RlIHdpdGggY29sb25zXG4gICAqIEBwYXJhbSByYXcgaWYgdHJ1ZSwgcmV0dXJuIHN0cmluZyAoZW1vamkpIG9yIHN2ZyBjb250ZW50IChzdmcgaWNvbikgb3IgcmVzb3VyY2UgcGF0aCAoYml0bWFwIGljb24pIGluc3RlYWQgb2Ygc3BhbiBlbGVtZW50XG4gICAqIEByZXR1cm5zIHNwYW4gZWxlbWVudCBjb250YWluaW5nIHRoZSBlbW9qaSBzdHJpbmcgb3Igc3ZnIGVsZW1lbnQgKHN2ZyBpY29uKSBvciBpbWcgZWxlbWVudCAoYml0bWFwIGljb24pOyBudWxsIGlmIGdpdmVuIGlkIGlzIG5vdCBmb3VuZFxuICAgKi9cbiAgZ2V0U1ZHSWNvbihpZDogc3RyaW5nLCByYXc/OiBmYWxzZSk6IFByb21pc2U8SFRNTFNwYW5FbGVtZW50IHwgbnVsbD47XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBpZCBhY2NlcHQgc2hvcnRjb2RlIHdpdGggY29sb25zXG4gICAqIEByZXR1cm5zIGZ1bGwgZGF0YSAoaW5jbHVkaW5nIGNoYXJhY3Rlci9wYXRoL3N2ZyBjb250ZW50IGRlcGVuZGluZyBvbiBzcGVjaWZpYyB0eXBlKSBhYm91dCBpY29uXG4gICAqIGlmIGdpdmVuIGlkIGlzIGZvdW5kOyBudWxsIGlmIGdpdmVuIGlkIGlzIG5vdCBmb3VuZFxuICAgKi9cbiAgZ2V0SWNvbkRhdGEoaWQ6IHN0cmluZyk6IEljb25EYXRhIHwgbnVsbDtcblxuICAvKipcbiAgICogUHJvbXB0IHVzZXIgZm9yIGljb24sIGF2YWlsYWJsZSBzaW5jZSB2MC42LjFcbiAgICogQHJldHVybnMgaWNvbiBpbmZvIGluY2x1ZGluZyBpZCBpZiB1c2VyIGNob29zZSBvbmU7IG51bGwgaWYgdXNlciBjYW5jZWxcbiAgICovXG4gIGdldEljb25Gcm9tVXNlcigpOiBQcm9taXNlPEljb25JbmZvIHwgbnVsbD47XG5cbiAgaXNFbW9qaTogKHN0cjogc3RyaW5nKSA9PiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAcGFyYW0gcmVwbGFjZXIgdGFrZXMgYSB2YWlsZCBhbmQgZXhpc3RpbmcgOnNob3J0Y29kZTogYW5kIHJldHVybnMgYSBzdHJpbmdcbiAgICovXG4gIHBvc3RQcm9jZXNzb3IoaW5wdXQ6IHN0cmluZywgcmVwbGFjZXI6IChzaG9ydGNvZGU6IHN0cmluZykgPT4gc3RyaW5nKTogc3RyaW5nO1xuICBwb3N0UHJvY2Vzc29yKGlucHV0OiBIVE1MRWxlbWVudCk6IHZvaWQ7XG5cbiAgdmVyc2lvbjoge1xuICAgIGN1cnJlbnQ6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBDb21wYXJlIFtzZW12ZXJdKGh0dHBzOi8vc2VtdmVyLm9yZy8pIHZlcnNpb24gc3RyaW5ncyB1c2luZyB0aGUgc3BlY2lmaWVkIG9wZXJhdG9yLlxuICAgICAqXG4gICAgICogQHBhcmFtIHZlclRvQ29tcGFyZSB2ZXJzaW9uIHRvIGNvbXBhcmVcbiAgICAgKiBAcGFyYW0gb3BlcmF0b3IgQWxsb3dlZCBhcml0aG1ldGljIG9wZXJhdG9yIHRvIHVzZVxuICAgICAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgY29tcGFyaXNvbiBiZXR3ZWVuIHRoZSB2ZXJUb0NvbXBhcmUgYW5kIHRoZSBjdXJyZW50IHZlcnNpb24gc2F0aXNmaWVzIHRoZSBvcGVyYXRvciwgYGZhbHNlYCBvdGhlcndpc2UuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYFxuICAgICAqIGN1cnJWZXIgPSAnMTAuMS4xJztcbiAgICAgKiBjb21wYXJlKCc8JywgJzEwLjIuMicpOyAvLyByZXR1cm4gdHJ1ZVxuICAgICAqIGNvbXBhcmUoJzw9JywgJzEwLjIuMicpOyAvLyByZXR1cm4gdHJ1ZVxuICAgICAqIGNvbXBhcmUoJz49JyAnMTAuMi4yJyk7IC8vIHJldHVybiBmYWxzZVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGNvbXBhcmUoXG4gICAgICBvcGVyYXRvcjogY29tcGFyZVZlcnNpb25zLkNvbXBhcmVPcGVyYXRvcixcbiAgICAgIHZlclRvQ29tcGFyZTogc3RyaW5nLFxuICAgICk6IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogTWF0Y2ggW25wbSBzZW12ZXJdKGh0dHBzOi8vZG9jcy5ucG1qcy5jb20vY2xpL3Y2L3VzaW5nLW5wbS9zZW12ZXIpIHZlcnNpb24gcmFuZ2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmFuZ2UgUmFuZ2UgcGF0dGVybiBmb3IgdmVyc2lvblxuICAgICAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgY3VycmVudCB2ZXJzaW9uIG51bWJlciBpcyB3aXRoaW4gdGhlIHJhbmdlLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgXG4gICAgICogY3VyclZlciA9ICcxLjEuMCc7XG4gICAgICogc2F0aXNmaWVzKCdeMS4wLjAnKTsgLy8gcmV0dXJuIHRydWVcbiAgICAgKiBzYXRpc2ZpZXMoJ34xLjAuMCcpOyAvLyByZXR1cm4gZmFsc2VcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBzYXRpc2ZpZXMocmFuZ2U6IHN0cmluZyk6IGJvb2xlYW47XG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCBldnRQcmVmaXggPSBcImljb25zYzpcIiBhcyBjb25zdDtcbmV4cG9ydCB0eXBlIFBNRXZlbnRzID1cbiAgfCBbbmFtZTogXCJjaGFuZ2VkXCIsIGFwaTogSWNvblNDQVBJLCBhZmZlY3RlZD86IHN0cmluZ1tdXVxuICB8IFtuYW1lOiBcImluaXRpYWxpemVkXCIsIGFwaTogSWNvblNDQVBJXTtcblxuZGVjbGFyZSBnbG9iYWwge1xuICAvLyBNdXN0IHVzZSB2YXIsIG5vIGNvbnN0L2xldFxuICB2YXIgSWNvblNDQVBJdjA6IEljb25TQ0FQSSB8IHVuZGVmaW5lZDtcbn1cbmV4cG9ydCB0eXBlIEFQSV9OQU1FID0gXCJJY29uU0NBUEl2MFwiO1xuXG5leHBvcnQgY29uc3QgZ2V0QXBpID0gKFxuICBwYWNrTWFuYWdlcjogUGFja01hbmFnZXIsXG4gIHBsdWdpbjogSWNvblNDLFxuKTogSWNvblNDQVBJID0+ICh7XG4gIGhhc0ljb246IHBhY2tNYW5hZ2VyLmhhc0ljb24uYmluZChwYWNrTWFuYWdlciksXG4gIGdldEljb246IHBhY2tNYW5hZ2VyLmdldEljb24uYmluZChwYWNrTWFuYWdlciksXG4gIGdldEljb25EYXRhOiBwYWNrTWFuYWdlci5nZXRJY29uRGF0YS5iaW5kKHBhY2tNYW5hZ2VyKSxcbiAgZ2V0U1ZHSWNvbjogcGFja01hbmFnZXIuZ2V0U1ZHSWNvbi5iaW5kKHBhY2tNYW5hZ2VyKSxcbiAgZ2V0SWNvbkZyb21Vc2VyOiAoKSA9PiBuZXcgRW1vamlTdWdnZXN0ZXJNb2RhbChwbHVnaW4pLm9wZW4oKSxcbiAgaXNFbW9qaTogZW1vamkuaGFzRW1vamkuYmluZChlbW9qaSksXG4gIHBvc3RQcm9jZXNzb3I6IHBsdWdpbi5wb3N0UHJvY2Vzc29yLmJpbmQocGx1Z2luKSxcbiAgdmVyc2lvbjoge1xuICAgIGdldCBjdXJyZW50KCkge1xuICAgICAgcmV0dXJuIHBsdWdpbi5tYW5pZmVzdC52ZXJzaW9uO1xuICAgIH0sXG4gICAgY29tcGFyZTogKG9wLCB2ZXIpID0+IGNvbXBhcmUocGx1Z2luLm1hbmlmZXN0LnZlcnNpb24sIHZlciwgb3ApLFxuICAgIHNhdGlzZmllczogKHJhbmdlKSA9PiBzYXRpc2ZpZXMocGx1Z2luLm1hbmlmZXN0LnZlcnNpb24sIHJhbmdlKSxcbiAgfSxcbn0pO1xuIiwgImltcG9ydCBGdXNlIGZyb20gXCJmdXNlLmpzXCI7XG5pbXBvcnQge1xuICBFZGl0b3IsXG4gIEVkaXRvclBvc2l0aW9uLFxuICBFZGl0b3JTdWdnZXN0LFxuICBFZGl0b3JTdWdnZXN0Q29udGV4dCxcbiAgRWRpdG9yU3VnZ2VzdFRyaWdnZXJJbmZvLFxuICBTdWdnZXN0TW9kYWwsXG59IGZyb20gXCJvYnNpZGlhblwiO1xuXG5pbXBvcnQgUGFja01hbmFnZXIgZnJvbSBcIi4uL2ljb24tcGFja3MvcGFjay1tYW5hZ2VyXCI7XG5pbXBvcnQgeyBGdXp6eU1hdGNoLCBJY29uSW5mbyB9IGZyb20gXCIuLi9pY29uLXBhY2tzL3R5cGVzXCI7XG5pbXBvcnQgSWNvblNDIGZyb20gXCIuLi9pc2MtbWFpblwiO1xuaW1wb3J0IFVuaW9uUmFuZ2VzIGZyb20gXCIuL3VuaW9uXCI7XG5cbmNvbnN0IENMQVNTX0lEID0gXCJpc2NcIjtcblxuaW50ZXJmYWNlIFN1Z2dlc3RlckJhc2Uge1xuICBwYWNrTWFuYWdlcjogUGFja01hbmFnZXI7XG59XG5jb25zdCBnZXRTdWdnZXN0aW9ucyA9IChpbnB1dDogc3RyaW5nLCBwYWNrTWFuYWdlcjogUGFja01hbmFnZXIpID0+IHtcbiAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJzdHJpbmdcIiAmJiBpbnB1dC50cmltKCkubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBwYWNrTWFuYWdlci5zZWFyY2goaW5wdXQucmVwbGFjZSgvXlxcK3xcXCskL2csIFwiXCIpLnNwbGl0KC9bK10vZykpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBwYWNrTWFuYWdlci5nZXRBbGxJZHMoKTtcbiAgfVxufTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItYXJyb3cvcHJlZmVyLWFycm93LWZ1bmN0aW9uc1xuYXN5bmMgZnVuY3Rpb24gcmVuZGVyU3VnZ2VzdGlvbihcbiAgdGhpczogU3VnZ2VzdGVyQmFzZSxcbiAgc3VnZ2VzdGlvbjogRnV6enlNYXRjaDxJY29uSW5mbz4sXG4gIGVsOiBIVE1MRWxlbWVudCxcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IGlkLCBuYW1lIH0gPSBzdWdnZXN0aW9uLml0ZW0sXG4gICAgeyBtYXRjaGVzIH0gPSBzdWdnZXN0aW9uLFxuICAgIGljb25FbCA9IGF3YWl0IHRoaXMucGFja01hbmFnZXIuZ2V0U1ZHSWNvbihpZCk7XG4gIGlmICghaWNvbkVsKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGdldCBpY29uIGZvciBrZXk6IFwiICsgaWQpO1xuXG4gIGVsLmFkZENsYXNzKFwibW9kLWNvbXBsZXhcIik7XG5cbiAgY29uc3Qgc2hvcnRjb2RlID0gZWxcbiAgICAuY3JlYXRlRGl2KFwic3VnZ2VzdGlvbi1jb250ZW50XCIpXG4gICAgLmNyZWF0ZURpdihcInN1Z2dlc3Rpb24tdGl0bGVcIik7XG5cbiAgaWYgKG1hdGNoZXMpIHtcbiAgICBjb25zdCBpbmRpY2VzID1cbiAgICAgIG1hdGNoZXMubGVuZ3RoID09PSAxXG4gICAgICAgID8gbWF0Y2hlc1swXS5rZXkgPT09IFwibmFtZVwiXG4gICAgICAgICAgPyBtYXRjaGVzWzBdLmluZGljZXNcbiAgICAgICAgICA6IFtdXG4gICAgICAgIDogVW5pb25SYW5nZXMoXG4gICAgICAgICAgICBtYXRjaGVzLmZsYXRNYXAoKG0pID0+IChtLmtleSA9PT0gXCJuYW1lXCIgPyBtLmluZGljZXMgOiBbXSkpLFxuICAgICAgICAgICk7XG4gICAgcmVuZGVyTWF0Y2hlcyhzaG9ydGNvZGUsIG5hbWUucmVwbGFjZSgvW18tXS9nLCBcIiBcIiksIGluZGljZXMpO1xuICB9IGVsc2Uge1xuICAgIHNob3J0Y29kZS5zZXRUZXh0KG5hbWUucmVwbGFjZSgvW18tXS9nLCBcIiBcIikpO1xuICB9XG4gIGVsLmNyZWF0ZURpdihcInN1Z2dlc3Rpb24tYXV4XCIpLmNyZWF0ZVNwYW4oXCJzdWdnZXN0aW9uLWZsYWlyXCIsIChlbCkgPT5cbiAgICBlbC5hcHBlbmRDaGlsZChpY29uRWwpLFxuICApO1xufVxuXG5leHBvcnQgY2xhc3MgRW1vamlTdWdnZXN0ZXJNb2RhbFxuICBleHRlbmRzIFN1Z2dlc3RNb2RhbDxGdXp6eU1hdGNoPEljb25JbmZvPj5cbiAgaW1wbGVtZW50cyBTdWdnZXN0ZXJCYXNlXG57XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBwbHVnaW46IEljb25TQykge1xuICAgIHN1cGVyKHBsdWdpbi5hcHApO1xuICAgIHRoaXMubW9kYWxFbC5hZGRDbGFzcyhDTEFTU19JRCk7XG4gIH1cbiAgZ2V0IHBhY2tNYW5hZ2VyKCkge1xuICAgIHJldHVybiB0aGlzLnBsdWdpbi5wYWNrTWFuYWdlcjtcbiAgfVxuXG4gIGdldFN1Z2dlc3Rpb25zKGlucHV0OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gZ2V0U3VnZ2VzdGlvbnMoaW5wdXQsIHRoaXMucGFja01hbmFnZXIpO1xuICB9XG4gIHJlbmRlclN1Z2dlc3Rpb24gPSByZW5kZXJTdWdnZXN0aW9uO1xuXG4gIC8vIFByb21pc2lmeSB0aGUgbW9kYWxcbiAgcmVzb2x2ZTogKCh2YWx1ZTogSWNvbkluZm8gfCBudWxsKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuICBvcGVuKCk6IFByb21pc2U8SWNvbkluZm8gfCBudWxsPiB7XG4gICAgc3VwZXIub3BlbigpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgdGhpcy5yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICB9KTtcbiAgfVxuICBvbkNsb3NlKCkge1xuICAgIGlmICh0aGlzLnJlc29sdmUpIHtcbiAgICAgIHRoaXMucmVzb2x2ZShudWxsKTtcbiAgICAgIHRoaXMucmVzb2x2ZSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgb25DaG9vc2VTdWdnZXN0aW9uKHN1Z2dlc3Rpb246IEZ1enp5TWF0Y2g8SWNvbkluZm8+KTogdm9pZCB7XG4gICAgLy8gY29uc29sZS5sb2coc3VnZ2VzdGlvbik7XG4gIH1cbiAgc2VsZWN0U3VnZ2VzdGlvbihcbiAgICB2YWx1ZTogRnV6enlNYXRjaDxJY29uSW5mbz4gfCBudWxsLFxuICAgIGV2dDogTW91c2VFdmVudCB8IEtleWJvYXJkRXZlbnQsXG4gICk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlc29sdmUpIHtcbiAgICAgIGlmICh2YWx1ZT8uaXRlbSkge1xuICAgICAgICB0aGlzLnJlc29sdmUodmFsdWUuaXRlbSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlc29sdmUobnVsbCk7XG4gICAgICB9XG4gICAgICB0aGlzLnJlc29sdmUgPSBudWxsO1xuICAgIH1cblxuICAgIHN1cGVyLnNlbGVjdFN1Z2dlc3Rpb24odmFsdWUgYXMgYW55LCBldnQpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFbW9qaVN1Z2dlc3RlclxuICBleHRlbmRzIEVkaXRvclN1Z2dlc3Q8RnV6enlNYXRjaDxJY29uSW5mbz4+XG4gIGltcGxlbWVudHMgU3VnZ2VzdGVyQmFzZVxue1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcGx1Z2luOiBJY29uU0MpIHtcbiAgICBzdXBlcihwbHVnaW4uYXBwKTtcbiAgICB0aGlzLnN1Z2dlc3RFbC5hZGRDbGFzcyhDTEFTU19JRCk7XG4gIH1cblxuICBnZXQgcGFja01hbmFnZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMucGx1Z2luLnBhY2tNYW5hZ2VyO1xuICB9XG5cbiAgb25UcmlnZ2VyKFxuICAgIGN1cnNvcjogRWRpdG9yUG9zaXRpb24sXG4gICAgZWRpdG9yOiBFZGl0b3IsXG4gICk6IEVkaXRvclN1Z2dlc3RUcmlnZ2VySW5mbyB8IG51bGwge1xuICAgIGlmICghdGhpcy5wbHVnaW4uc2V0dGluZ3Muc3VnZ2VzdGVyKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBzdWIgPSBlZGl0b3IuZ2V0TGluZShjdXJzb3IubGluZSkuc3Vic3RyaW5nKDAsIGN1cnNvci5jaCk7XG4gICAgY29uc3QgdHJhaWxpbmdTcGFjZSA9IHRoaXMucGx1Z2luLnNldHRpbmdzLnRyaWdnZXJXaXRoVHJhaWxpbmdTcGFjZVxuICAgICAgPyBcIiBcIlxuICAgICAgOiBcIlwiO1xuICAgIGxldCBwYXR0ZXJuID0gU3RyaW5nLnJhd2AoPzoke3RyYWlsaW5nU3BhY2V9OnxcdUZGMUFcdUZGMUEpKFteOlxcc10rJClgO1xuICAgIGNvbnN0IG1hdGNoID0gc3ViLm1hdGNoKG5ldyBSZWdFeHAocGF0dGVybiwgXCJpXCIpKTtcbiAgICBpZiAoIW1hdGNoKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBwcmV2U0MgPSAobWF0Y2guaW5wdXQgYXMgc3RyaW5nKVxuICAgICAgLnN1YnN0cmluZygwLCBtYXRjaC5pbmRleClcbiAgICAgIC5tYXRjaCgvOihbXlxcczpdKyQpLyk7XG4gICAgaWYgKHByZXZTQyAmJiB0aGlzLnBhY2tNYW5hZ2VyLmhhc0ljb24ocHJldlNDWzFdKSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVuZDogY3Vyc29yLFxuICAgICAgc3RhcnQ6IHtcbiAgICAgICAgY2g6IG1hdGNoLmluZGV4IGFzIG51bWJlcixcbiAgICAgICAgbGluZTogY3Vyc29yLmxpbmUsXG4gICAgICB9LFxuICAgICAgcXVlcnk6IG1hdGNoWzFdLFxuICAgIH07XG4gIH1cblxuICBnZXRTdWdnZXN0aW9ucyhjb250ZXh0OiBFZGl0b3JTdWdnZXN0Q29udGV4dCkge1xuICAgIHJldHVybiBnZXRTdWdnZXN0aW9ucyhjb250ZXh0LnF1ZXJ5LCB0aGlzLnBhY2tNYW5hZ2VyKTtcbiAgfVxuXG4gIHJlbmRlclN1Z2dlc3Rpb24gPSByZW5kZXJTdWdnZXN0aW9uO1xuICBzZWxlY3RTdWdnZXN0aW9uKHN1Z2dlc3Rpb246IEZ1enp5TWF0Y2g8SWNvbkluZm8+KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNvbnRleHQpIHJldHVybjtcbiAgICBjb25zdCB7IGlkLCBwYWNrIH0gPSBzdWdnZXN0aW9uLml0ZW07XG4gICAgdGhpcy5jb250ZXh0LmVkaXRvci5yZXBsYWNlUmFuZ2UoXG4gICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5jb2RlMmVtb2ppICYmIHBhY2sgPT09IFwiZW1vamlcIlxuICAgICAgICA/ICh0aGlzLnBhY2tNYW5hZ2VyLmdldEljb24oaWQsIHRydWUpIGFzIHN0cmluZylcbiAgICAgICAgOiBgOiR7aWR9OmAgKyAodGhpcy5wbHVnaW4uc2V0dGluZ3Muc3BhY2VBZnRlclNDID8gXCIgXCIgOiBcIlwiKSxcbiAgICAgIHRoaXMuY29udGV4dC5zdGFydCxcbiAgICAgIHRoaXMuY29udGV4dC5lbmQsXG4gICAgKTtcbiAgfVxufVxuXG5jb25zdCByZW5kZXJNYXRjaGVzID0gKFxuICBlbDogSFRNTEVsZW1lbnQsXG4gIHRleHQ6IHN0cmluZyxcbiAgaW5kaWNlcz86IHJlYWRvbmx5IEZ1c2UuUmFuZ2VUdXBsZVtdLFxuICBvZmZzZXQ/OiBudW1iZXIsXG4pID0+IHtcbiAgaWYgKGluZGljZXMpIHtcbiAgICBpZiAob2Zmc2V0ID09PSB1bmRlZmluZWQpIG9mZnNldCA9IDA7XG4gICAgbGV0IHRleHRJbmRleCA9IDA7XG4gICAgZm9yIChcbiAgICAgIGxldCByYW5nZUluZGV4ID0gMDtcbiAgICAgIHJhbmdlSW5kZXggPCBpbmRpY2VzLmxlbmd0aCAmJiB0ZXh0SW5kZXggPCB0ZXh0Lmxlbmd0aDtcbiAgICAgIHJhbmdlSW5kZXgrK1xuICAgICkge1xuICAgICAgbGV0IHJhbmdlID0gaW5kaWNlc1tyYW5nZUluZGV4XSxcbiAgICAgICAgc3RhcnQgPSByYW5nZVswXSArIG9mZnNldCxcbiAgICAgICAgZW5kID0gcmFuZ2VbMV0gKyBvZmZzZXQgKyAxOyAvLyBwYXRjaCBmb3IgRnVzZS5SYW5nZVR1cGxlXG4gICAgICBpZiAoIShlbmQgPD0gMCkpIHtcbiAgICAgICAgaWYgKHN0YXJ0ID49IHRleHQubGVuZ3RoKSBicmVhaztcbiAgICAgICAgaWYgKHN0YXJ0IDwgMCkgc3RhcnQgPSAwO1xuICAgICAgICBpZiAoc3RhcnQgIT09IHRleHRJbmRleClcbiAgICAgICAgICBlbC5hcHBlbmRUZXh0KHRleHQuc3Vic3RyaW5nKHRleHRJbmRleCwgc3RhcnQpKTtcbiAgICAgICAgZWwuY3JlYXRlU3Bhbih7XG4gICAgICAgICAgY2xzOiBcInN1Z2dlc3Rpb24taGlnaGxpZ2h0XCIsXG4gICAgICAgICAgdGV4dDogdGV4dC5zdWJzdHJpbmcoc3RhcnQsIGVuZCksXG4gICAgICAgIH0pO1xuICAgICAgICB0ZXh0SW5kZXggPSBlbmQ7XG4gICAgICB9XG4gICAgfVxuICAgIHRleHRJbmRleCA8IHRleHQubGVuZ3RoICYmIGVsLmFwcGVuZFRleHQodGV4dC5zdWJzdHJpbmcodGV4dEluZGV4KSk7XG4gIH0gZWxzZSBlbC5hcHBlbmRUZXh0KHRleHQpO1xufTtcbiIsICJpbXBvcnQgc3ZnMnVyaSBmcm9tIFwibWluaS1zdmctZGF0YS11cmlcIjtcbmltcG9ydCBlbW9qaUJ5TmFtZSBmcm9tIFwibm9kZS1lbW9qaS9saWIvZW1vamkuanNvblwiO1xuaW1wb3J0IHsgc2V0SWNvbiB9IGZyb20gXCJvYnNpZGlhblwiO1xuXG5pbXBvcnQgeyBMdWNpZGVJY29uLCBPYnNpZGlhbkljb24gfSBmcm9tIFwiLi4vaWNvbnNcIjtcbmltcG9ydCB7IEJ1bHRpSW5JY29uRGF0YSBhcyBCdWx0aUluSWNvbkRhdGFUeXBlLCBJY29uSW5mbyB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBnZXRDbHNGb3JJY29uIH0gZnJvbSBcIi4vdXRpbHNcIjtcblxuY29uc3Qga2Fib2JUb1NuYWtlID0gKG5hbWU6IHN0cmluZykgPT4gbmFtZS5yZXBsYWNlKC8tL2csIFwiX1wiKTtcblxuY29uc3QgTHVjaWRlUGFja05hbWUgPSBcImx1Y1wiLFxuICBPYnNpZGlhblBhY2tOYW1lID0gXCJvYnNcIjtcblxuZXhwb3J0IHR5cGUgU1ZHUGFja25hbWVzID0gdHlwZW9mIEx1Y2lkZVBhY2tOYW1lIHwgdHlwZW9mIE9ic2lkaWFuUGFja05hbWU7XG5cbmNvbnN0IHJlbW92ZUJ1bHRpSW5JY29uQXR0cnMgPSAoZWw6IEhUTUxFbGVtZW50KSA9PlxuICBbXCJjbGFzc1wiLCBcImhlaWdodFwiLCBcIndpZHRoXCJdLmZvckVhY2goKGspID0+XG4gICAgZWwuZmlyc3RFbGVtZW50Q2hpbGQ/LnJlbW92ZUF0dHJpYnV0ZShrKSxcbiAgKTtcbmNsYXNzIEJ1bHRpSW5JY29uRGF0YSBpbXBsZW1lbnRzIEJ1bHRpSW5JY29uRGF0YVR5cGUge1xuICBwdWJsaWMgdHlwZSA9IFwiYnVsdGktaW5cIiBhcyBjb25zdDtcbiAgcHVibGljIG5hbWU6IHN0cmluZztcbiAgLyoqIGljb24gc2hvcnRjb2RlICovXG4gIHB1YmxpYyBpZDogc3RyaW5nO1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcGFjazogc3RyaW5nLCBwcml2YXRlIG9ic2lkaWFuSWQ6IHN0cmluZykge1xuICAgIHRoaXMubmFtZSA9IGthYm9iVG9TbmFrZShvYnNpZGlhbklkKTtcbiAgICB0aGlzLmlkID0gYCR7cGFja31fJHt0aGlzLm5hbWV9YDtcbiAgfVxuICBwdWJsaWMgZ2V0IGRhdGEoKSB7XG4gICAgY29uc3QgZWwgPSBjcmVhdGVEaXYoKTtcbiAgICBzZXRJY29uKFxuICAgICAgZWwsXG4gICAgICAodGhpcy5wYWNrID09PSBMdWNpZGVQYWNrTmFtZSA/IFwibHVjaWRlLVwiIDogXCJcIikgKyB0aGlzLm9ic2lkaWFuSWQsXG4gICAgKTtcbiAgICByZW1vdmVCdWx0aUluSWNvbkF0dHJzKGVsKTtcbiAgICBlbC5maXJzdEVsZW1lbnRDaGlsZD8uc2V0QXR0cmlidXRlKFwieG1sbnNcIiwgXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiKTtcbiAgICByZXR1cm4gZWwuaW5uZXJIVE1MO1xuICB9XG4gIHB1YmxpYyBnZXQgZGF0YVVyaSgpIHtcbiAgICByZXR1cm4gc3ZnMnVyaSh0aGlzLmRhdGEpO1xuICB9XG4gIHB1YmxpYyBnZXRET00oc3ZnID0gdHJ1ZSk6IEhUTUxTcGFuRWxlbWVudCB7XG4gICAgY29uc3QgZWwgPSBjcmVhdGVTcGFuKHsgY2xzOiBnZXRDbHNGb3JJY29uKHRoaXMpIH0pO1xuICAgIGlmIChzdmcpIHtcbiAgICAgIGVsLmFkZENsYXNzKFwiaXNjLXN2Zy1pY29uXCIpO1xuICAgICAgc2V0SWNvbihcbiAgICAgICAgZWwsXG4gICAgICAgICh0aGlzLnBhY2sgPT09IEx1Y2lkZVBhY2tOYW1lID8gXCJsdWNpZGUtXCIgOiBcIlwiKSArIHRoaXMub2JzaWRpYW5JZCxcbiAgICAgICk7XG4gICAgICByZW1vdmVCdWx0aUluSWNvbkF0dHJzKGVsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWwuYWRkQ2xhc3MoXCJpc2MtaW1nLWljb25cIik7XG4gICAgICBlbC5jcmVhdGVFbChcImltZ1wiLCB7IGF0dHI6IHsgc3JjOiB0aGlzLmRhdGFVcmkgfSB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGVsO1xuICB9XG59XG5cbmNvbnN0IEVNT0pJX1BBQ0tfTkFNRSA9IFwiZW1vamlcIjtcbmNvbnN0IGdldEJ1aWx0SW5zID0gKCk6IHtcbiAgcGFja3M6IFJlYWRvbmx5TWFwPHN0cmluZywgQnVsdGlJbkljb25EYXRhPjtcbiAgaWRzOiBSZWFkb25seUFycmF5PEljb25JbmZvPjtcbiAgcGFja25hbWVzOiBSZWFkb25seUFycmF5PHN0cmluZz47XG59ID0+IHtcbiAgbGV0IHBhY2tzID0gbmV3IE1hcDxzdHJpbmcsIEJ1bHRpSW5JY29uRGF0YT4oKSxcbiAgICBpZHMgPSBbXSBhcyBJY29uSW5mb1tdLFxuICAgIHBhY2tuYW1lcyA9IFtdIGFzIHN0cmluZ1tdO1xuXG4gIGZvciAoY29uc3QgW3BhY2ssIGljb25zXSBvZiBbXG4gICAgW09ic2lkaWFuUGFja05hbWUsIE9ic2lkaWFuSWNvbl0sXG4gICAgW0x1Y2lkZVBhY2tOYW1lLCBMdWNpZGVJY29uXSxcbiAgXSBhcyBjb25zdCkge1xuICAgIHBhY2tuYW1lcy5wdXNoKHBhY2spO1xuICAgIGZvciAoY29uc3Qgb2JzaWRpYW5JZCBvZiBpY29ucykge1xuICAgICAgY29uc3QgaWNvbiA9IG5ldyBCdWx0aUluSWNvbkRhdGEocGFjaywgb2JzaWRpYW5JZCk7XG4gICAgICBwYWNrcy5zZXQoaWNvbi5pZCwgaWNvbik7XG4gICAgICBpZHMucHVzaChpY29uKTtcbiAgICB9XG4gIH1cbiAgcGFja25hbWVzLnB1c2goRU1PSklfUEFDS19OQU1FKTtcbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoZW1vamlCeU5hbWUpKSB7XG4gICAgaWRzLnB1c2goeyBwYWNrOiBFTU9KSV9QQUNLX05BTUUsIGlkOiBrZXksIG5hbWU6IGtleSB9KTtcbiAgfVxuICByZXR1cm4geyBwYWNrcywgaWRzLCBwYWNrbmFtZXMgfTtcbn07XG5cbmNvbnN0IHJlc3VsdCA9IGdldEJ1aWx0SW5zKCk7XG5leHBvcnQgY29uc3QgQnVpbHRJblNWR0ljb25QYWNrcyA9IHJlc3VsdC5wYWNrcztcbmV4cG9ydCBjb25zdCBCdWlsdEluSWNvbklkcyA9IHJlc3VsdC5pZHM7XG5leHBvcnQgY29uc3QgQnVpbHRJbkljb25QYWNrbmFtZXMgPSByZXN1bHQucGFja25hbWVzO1xuIiwgImltcG9ydCBlbW9qaSBmcm9tIFwibm9kZS1lbW9qaVwiO1xuXG5pbXBvcnQgdHlwZSB7IEVtb2ppSWNvbkRhdGEgYXMgRW1vamlJY29uRGF0YVR5cGUgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgZ2V0Q2xzRm9ySWNvbiB9IGZyb20gXCIuL3V0aWxzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVtb2ppSWNvbkRhdGEgaW1wbGVtZW50cyBFbW9qaUljb25EYXRhVHlwZSB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcpIHt9XG4gIHB1YmxpYyBnZXQgaWQoKSB7XG4gICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgfVxuICBwdWJsaWMgZ2V0IHBhY2soKSB7XG4gICAgcmV0dXJuIFwiZW1vamlcIiBhcyBjb25zdDtcbiAgfVxuICBwdWJsaWMgZ2V0IHR5cGUoKSB7XG4gICAgcmV0dXJuIFwiZW1vamlcIiBhcyBjb25zdDtcbiAgfVxuICBwdWJsaWMgZ2V0IGNoYXIoKSB7XG4gICAgcmV0dXJuIGVtb2ppLmdldCh0aGlzLm5hbWUpO1xuICB9XG5cbiAgc3RhdGljIGdldERhdGEobmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKGVtb2ppLmhhc0Vtb2ppKG5hbWUpKSB7XG4gICAgICByZXR1cm4gbmV3IEVtb2ppSWNvbkRhdGEobmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRET00oc3ZnID0gdHJ1ZSkge1xuICAgIHJldHVybiBjcmVhdGVTcGFuKHtcbiAgICAgIGNsczogW2dldENsc0Zvckljb24odGhpcyksIFwiaXNjLWNoYXItaWNvblwiXSxcbiAgICAgIHRleHQ6IHRoaXMuY2hhcixcbiAgICB9KTtcbiAgfVxufVxuIiwgImltcG9ydCB7IEZpbGVTeXN0ZW1BZGFwdGVyIH0gZnJvbSBcIm9ic2lkaWFuXCI7XG5pbXBvcnQgeyBleHRuYW1lIH0gZnJvbSBcInBhdGhcIjtcblxuaW1wb3J0IEljb25TQyBmcm9tIFwiLi4vaXNjLW1haW5cIjtcbmltcG9ydCB7IEZpbGVJY29uRGF0YSBhcyBGaWxlSWNvbkRhdGFUeXBlIH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IGdldENsc0Zvckljb24sIGdldFBhY2tuTmFtZUZyb21JZCB9IGZyb20gXCIuL3V0aWxzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZpbGVJY29uRGF0YSBpbXBsZW1lbnRzIEZpbGVJY29uRGF0YVR5cGUge1xuICBzdGF0aWMgZ2V0RGF0YShcbiAgICBpZDogc3RyaW5nLFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBwbHVnaW46IEljb25TQyxcbiAgKTogRmlsZUljb25EYXRhIHwgbnVsbCB7XG4gICAgY29uc3QgcmVzdWx0ID0gZ2V0UGFja25OYW1lRnJvbUlkKGlkKTtcbiAgICBpZiAoIXJlc3VsdCB8fCByZXN1bHQucGFjayA9PT0gXCJlbW9qaVwiKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gbmV3IEZpbGVJY29uRGF0YShpZCwgcmVzdWx0Lm5hbWUsIHJlc3VsdC5wYWNrLCBwYXRoLCBwbHVnaW4pO1xuICB9XG5cbiAgcHVibGljIGdldCB0eXBlKCkge1xuICAgIHJldHVybiBcImZpbGVcIiBhcyBjb25zdDtcbiAgfVxuICBwdWJsaWMgcGF0aDogc3RyaW5nO1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9pZDogc3RyaW5nLFxuICAgIHByaXZhdGUgX25hbWU6IHN0cmluZyxcbiAgICBwcml2YXRlIF9wYWNrOiBzdHJpbmcsXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIHByaXZhdGUgcGx1Z2luOiBJY29uU0MsXG4gICkge1xuICAgIHRoaXMucGF0aCA9IHBhdGgudHJpbSgpO1xuICB9XG4gIHByaXZhdGUgZ2V0IHZhdWx0KCkge1xuICAgIHJldHVybiB0aGlzLnBsdWdpbi5hcHAudmF1bHQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlkKCkge1xuICAgIHJldHVybiB0aGlzLl9pZDtcbiAgfVxuICBwdWJsaWMgZ2V0IHBhY2soKSB7XG4gICAgcmV0dXJuIHRoaXMuX3BhY2s7XG4gIH1cbiAgcHVibGljIGdldCBuYW1lKCkge1xuICAgIHJldHVybiB0aGlzLl9uYW1lO1xuICB9XG4gIHB1YmxpYyBnZXQgZXh0KCkge1xuICAgIHJldHVybiBleHRuYW1lKHRoaXMucGF0aCk7XG4gIH1cbiAgcHVibGljIGdldCBmc1BhdGgoKSB7XG4gICAgaWYgKHRoaXMudmF1bHQuYWRhcHRlciBpbnN0YW5jZW9mIEZpbGVTeXN0ZW1BZGFwdGVyKSB7XG4gICAgICByZXR1cm4gdGhpcy52YXVsdC5hZGFwdGVyLmdldEZ1bGxQYXRoKHRoaXMucGF0aCk7XG4gICAgfSBlbHNlIHJldHVybiBudWxsO1xuICB9XG4gIHB1YmxpYyBnZXQgcmVzb3VyY2VQYXRoKCkge1xuICAgIHJldHVybiB0aGlzLnZhdWx0LmFkYXB0ZXIuZ2V0UmVzb3VyY2VQYXRoKHRoaXMucGF0aCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzU1ZHKCkge1xuICAgIHJldHVybiB0aGlzLmV4dCA9PT0gXCIuc3ZnXCI7XG4gIH1cbiAgcHVibGljIGdldERPTShzdmc6IHRydWUpOiBQcm9taXNlPEhUTUxTcGFuRWxlbWVudD47XG4gIHB1YmxpYyBnZXRET00oc3ZnOiBmYWxzZSk6IEhUTUxTcGFuRWxlbWVudDtcbiAgcHVibGljIGdldERPTShzdmcgPSB0cnVlKTogUHJvbWlzZTxIVE1MU3BhbkVsZW1lbnQ+IHwgSFRNTFNwYW5FbGVtZW50IHtcbiAgICBjb25zdCBlbCA9IGNyZWF0ZVNwYW4oeyBjbHM6IGdldENsc0Zvckljb24odGhpcykgfSk7XG4gICAgaWYgKHN2ZyAmJiB0aGlzLmlzU1ZHKSB7XG4gICAgICBlbC5hZGRDbGFzcyhcImlzYy1zdmctaWNvblwiKTtcbiAgICAgIHJldHVybiAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBzdmdFbCA9IGF3YWl0IHRoaXMucGx1Z2luLmZpbGVJY29uQ2FjaGUuZ2V0SWNvbih0aGlzLnBhdGgpO1xuICAgICAgICBpZiAoc3ZnRWwpIHtcbiAgICAgICAgICB0aGlzLmZpeEZpbGxDb2xvcihzdmdFbCk7XG4gICAgICAgICAgZWwuYXBwZW5kKHN2Z0VsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFwiZmFpbGVkIHRvIGdldCBpY29uIGRhdGEgZm9yXCIsIHRoaXMucGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVsO1xuICAgICAgfSkoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWwuYWRkQ2xhc3MoXCJpc2MtaW1nLWljb25cIik7XG4gICAgICBlbC5jcmVhdGVFbChcImltZ1wiLCB7IGF0dHI6IHsgc3JjOiB0aGlzLnJlc291cmNlUGF0aCB9IH0pO1xuICAgICAgcmV0dXJuIGVsO1xuICAgIH1cbiAgfVxuXG4gIGZpeEZpbGxDb2xvcihzdmc6IFNWR0VsZW1lbnQpOiB2b2lkIHtcbiAgICBpZiAoIXBhY2tUb1BhdGNoLmluY2x1ZGVzKHRoaXMucGFjaykpIHJldHVybjtcbiAgICBmb3IgKGNvbnN0IHBhdGhFbCBvZiBzdmcuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJwYXRoXCIpKSB7XG4gICAgICBpZiAoIXBhdGhFbC5oYXNBdHRyaWJ1dGUoXCJmaWxsXCIpKSB7XG4gICAgICAgIHBhdGhFbC5zZXRBdHRyaWJ1dGUoXCJmaWxsXCIsIFwiY3VycmVudENvbG9yXCIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuY29uc3QgcGFja1RvUGF0Y2ggPSBbXCJmYWJcIiwgXCJmYXJcIiwgXCJmYXNcIiwgXCJyaWZcIiwgXCJyaWxcIl07XG4iLCAiaW1wb3J0IEZ1c2UgZnJvbSBcImZ1c2UuanNcIjtcblxuaW50ZXJmYWNlIEljb25CYXNpY0luZm8ge1xuICBwYWNrOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgSWNvbkluZm8gPSBGaWxlSWNvbkluZm8gfCBFbW9qaUljb25JbmZvIHwgQnVsdGlJbkljb25JbmZvO1xuZXhwb3J0IHR5cGUgSWNvbkRhdGEgPSBGaWxlSWNvbkRhdGEgfCBFbW9qaUljb25EYXRhIHwgQnVsdGlJbkljb25EYXRhO1xuXG50eXBlIHdpdGhJZCA9IHsgaWQ6IHN0cmluZyB9O1xuXG50eXBlIEVtb2ppSWNvbkluZm8gPSBJY29uQmFzaWNJbmZvICYgeyBwYWNrOiBcImVtb2ppXCIgfSAmIHdpdGhJZDtcbmV4cG9ydCB0eXBlIEVtb2ppSWNvbkRhdGEgPSBFbW9qaUljb25JbmZvICZcbiAgSWNvbkJhc2ljRGF0YSAmIHsgY2hhcjogc3RyaW5nOyB0eXBlOiBcImVtb2ppXCIgfTtcblxudHlwZSBGaWxlQmFzaWNJbmZvID0gSWNvbkJhc2ljSW5mbyAmIHtcbiAgLyoqIHBhdGggcmVsYXRpdmUgdG8gdmF1bHQgKi9cbiAgcGF0aDogc3RyaW5nO1xuICAvKiogd2l0aCBkb3QgKi9cbiAgZXh0OiBzdHJpbmc7XG59O1xuXG50eXBlIEljb25CYXNpY0RhdGEgPSB7XG4gIGdldERPTShzdmc6IHRydWUpOiBIVE1MU3BhbkVsZW1lbnQgfCBQcm9taXNlPEhUTUxTcGFuRWxlbWVudD47XG4gIGdldERPTShzdmc/OiBmYWxzZSk6IEhUTUxTcGFuRWxlbWVudDtcbn07XG5cbmV4cG9ydCB0eXBlIEZpbGVJY29uSW5mbyA9IEZpbGVCYXNpY0luZm8gJiB3aXRoSWQ7XG5leHBvcnQgdHlwZSBGaWxlSWNvbkRhdGEgPSBGaWxlQmFzaWNJbmZvICZcbiAgSWNvbkJhc2ljRGF0YSAmIHtcbiAgICAvKiogcmVhbCBwYXRoIGluIGZpbGUgc3lzdGVtLCBudWxsIGlmIG5vdCBpbiBEZXNrdG9wICovXG4gICAgZnNQYXRoOiBzdHJpbmcgfCBudWxsO1xuICAgIC8qKiByZXNvdXJjZSBwYXRoIHRvIGljb24gZmlsZSAqL1xuICAgIHJlc291cmNlUGF0aDogc3RyaW5nO1xuICAgIHR5cGU6IFwiZmlsZVwiO1xuICAgIGlzU1ZHOiBib29sZWFuO1xuICB9O1xuZXhwb3J0IGNvbnN0IGlzRmlsZUljb25JbmZvID0gKGlkOiBJY29uSW5mbyk6IGlkIGlzIEZpbGVJY29uSW5mbyA9PlxuICAhIShpZCBhcyBGaWxlSWNvbkluZm8pLmV4dDtcblxuZXhwb3J0IHR5cGUgQnVsdGlJbkljb25JbmZvID0gSWNvbkJhc2ljSW5mbyAmIHdpdGhJZDtcbmV4cG9ydCB0eXBlIEJ1bHRpSW5JY29uRGF0YSA9IEljb25CYXNpY0luZm8gJlxuICBJY29uQmFzaWNEYXRhICYge1xuICAgIC8qKiBkYXRhIHVyaSBvZiBzdmcgaWNvbiAqL1xuICAgIGRhdGFVcmk6IHN0cmluZztcbiAgICAvKiogc3ZnIGljb24gcmF3IGNvbnRlbnQgKi9cbiAgICBkYXRhOiBzdHJpbmc7XG4gICAgdHlwZTogXCJidWx0aS1pblwiO1xuICB9O1xuXG5leHBvcnQgdHlwZSBGdXp6eU1hdGNoPFQ+ID0gRnVzZS5GdXNlUmVzdWx0PFQ+O1xuIiwgImltcG9ydCB7IE5vdGljZSwgVEZpbGUgfSBmcm9tIFwib2JzaWRpYW5cIjtcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwicGF0aFwiO1xuXG5pbXBvcnQgSWNvblNDIGZyb20gXCIuLi9pc2MtbWFpblwiO1xuaW1wb3J0IHsgY29uZmlybSB9IGZyb20gXCIuL2RpYWxvZ1wiO1xuXG5jb25zdCBqc29uVG9TdmcgPSBhc3luYyAocGx1Z2luOiBJY29uU0MpID0+IHtcbiAgY29uc3QgeyB2YXVsdCB9ID0gcGx1Z2luLmFwcDtcbiAgY29uc3QgZGF0YSA9IChhd2FpdCB2YXVsdC5yZWFkSnNvbihcbiAgICBwbHVnaW4ucGFja01hbmFnZXIuY3VzdG9tSWNvbnNGaWxlUGF0aCxcbiAgKSkgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgbGV0IHBhdGggPSBwbHVnaW4ucGFja01hbmFnZXIuY3VzdG9tSWNvbnNEaXI7XG4gIGlmICghKGF3YWl0IHZhdWx0LmFkYXB0ZXIuZXhpc3RzKHBhdGgpKSkge1xuICAgIGF3YWl0IHZhdWx0LmFkYXB0ZXIubWtkaXIocGF0aCk7XG4gIH1cbiAgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFxuICAgIE9iamVjdC5lbnRyaWVzKGRhdGEpLnJlZHVjZSgoYXJyLCBbaWQsIHN2Z10pID0+IHtcbiAgICAgIGlmICh0eXBlb2YgaWQgPT09IFwic3RyaW5nXCIgJiYgdHlwZW9mIHN2ZyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBjb25zdCBmaWxlUGF0aCA9IGpvaW4ocGF0aCwgYCR7aWR9LnN2Z2ApO1xuICAgICAgICBhcnIucHVzaCh2YXVsdC5jcmVhdGUoZmlsZVBhdGgsIHN2ZykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFycjtcbiAgICB9LCBbXSBhcyBQcm9taXNlPFRGaWxlPltdKSxcbiAgKTtcbn07XG5cbmNvbnN0IHRyeVVwZGF0ZUljb25zID0gYXN5bmMgKHBsdWdpbjogSWNvblNDKSA9PiB7XG4gIGlmIChcbiAgICAoYXdhaXQgcGx1Z2luLmFwcC52YXVsdC5hZGFwdGVyLmV4aXN0cyhcbiAgICAgIHBsdWdpbi5wYWNrTWFuYWdlci5jdXN0b21JY29uc0ZpbGVQYXRoLFxuICAgICkpICYmXG4gICAgIXBsdWdpbi5zZXR0aW5ncy5pc01pZ3JhdGVkXG4gICkge1xuICAgIGNvbnN0IG1lc3NhZ2UgPVxuICAgICAgXCJGb3VuZCBjdXN0b20gaWNvbnMgdGhhdCBoYXZlIG5vdCBiZWVuIHVwZ3JhZGVkLCB1cGRhdGUgaWNvbnMgbm93P1wiO1xuICAgIGlmIChhd2FpdCBjb25maXJtKG1lc3NhZ2UsIHBsdWdpbi5hcHApKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBqc29uVG9TdmcocGx1Z2luKTtcbiAgICAgICAgcGx1Z2luLnNldHRpbmdzLmlzTWlncmF0ZWQgPSB0cnVlO1xuICAgICAgICBhd2FpdCBwbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG4gICAgICAgIG5ldyBOb3RpY2UoXG4gICAgICAgICAgXCJJY29uIHVwZGF0ZSBjb21wbGV0ZSwgeW91IGNhbiBub3cgZmluZCBpY29uIGZpbGVzIGluIFwiICtcbiAgICAgICAgICAgIHBsdWdpbi5wYWNrTWFuYWdlci5jdXN0b21JY29uc0RpcixcbiAgICAgICAgKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIG5ldyBOb3RpY2UoXCJGYWlsZWQgdG8gdXBkYXRlIGljb25zLCBjaGVjayBjb25zb2xlIGZvciBtb3JlIGRldGFpbHNcIik7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgdHJ5VXBkYXRlSWNvbnM7XG4iLCAiaW1wb3J0IHsgQXBwLCBNb2RhbCB9IGZyb20gXCJvYnNpZGlhblwiO1xuXG50eXBlIFByb21pc2VWYWw8VCA9IHZvaWQ+ID0gVCB8IFByb21pc2VMaWtlPFQ+O1xuXG5jbGFzcyBDb25maXJtTW9kYWwgZXh0ZW5kcyBNb2RhbCB7XG4gIGJ1dHRvbkNvbnRhaW5lckVsID0gdGhpcy5tb2RhbEVsLmNyZWF0ZURpdihcIm1vZGFsLWJ1dHRvbi1jb250YWluZXJcIik7XG4gIHByaXZhdGUgcmVzb2x2ZTogKCh2YWx1ZTogUHJvbWlzZVZhbDxib29sZWFuPikgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcbiAgY29uc3RydWN0b3IoYXBwOiBBcHApIHtcbiAgICBzdXBlcihhcHApO1xuICAgIHRoaXMuY29udGFpbmVyRWwuYWRkQ2xhc3MoXCJtb2QtY29uZmlybWF0aW9uXCIpO1xuICAgIHRoaXMuYWRkQnV0dG9uKFwibW9kLWN0YVwiLCBcIk9LXCIsICgpID0+IHRoaXMucmVzb2x2ZSAmJiB0aGlzLnJlc29sdmUodHJ1ZSkpO1xuICAgIHRoaXMuYWRkQ2FuY2VsQnV0dG9uKCk7XG4gIH1cbiAgb3BlbigpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBzdXBlci5vcGVuKCk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiAodGhpcy5yZXNvbHZlID0gcmVzb2x2ZSkpO1xuICB9XG4gIGFkZEJ1dHRvbihcbiAgICBjbHM6IHN0cmluZyB8IHN0cmluZ1tdLFxuICAgIHRleHQ6IHN0cmluZyxcbiAgICBjYWxsYmFjaz86IChldnQ6IE1vdXNlRXZlbnQpID0+IGFueSxcbiAgKSB7XG4gICAgdGhpcy5idXR0b25Db250YWluZXJFbFxuICAgICAgLmNyZWF0ZUVsKFwiYnV0dG9uXCIsIHsgY2xzLCB0ZXh0IH0pXG4gICAgICAuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGFzeW5jIChldnQpID0+IHtcbiAgICAgICAgY2FsbGJhY2sgJiYgKGF3YWl0IGNhbGxiYWNrKGV2dCkpO1xuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBvbkNsb3NlKCkge1xuICAgIHRoaXMucmVzb2x2ZSAmJiB0aGlzLnJlc29sdmUoZmFsc2UpO1xuICB9XG5cbiAgYWRkQ2FuY2VsQnV0dG9uKCkge1xuICAgIHJldHVybiB0aGlzLmFkZEJ1dHRvbihcIlwiLCBcIkNhbmNlbFwiLCB0aGlzLmNsb3NlLmJpbmQodGhpcykpO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBjb25maXJtID0gKG1lc3NhZ2U6IHN0cmluZyB8IERvY3VtZW50RnJhZ21lbnQsIGFwcDogQXBwKSA9PiB7XG4gIGNvbnN0IG1vZGFsID0gbmV3IENvbmZpcm1Nb2RhbChhcHApO1xuICBtb2RhbC5jb250ZW50RWwuc2V0VGV4dChtZXNzYWdlKTtcbiAgcmV0dXJuIG1vZGFsLm9wZW4oKTtcbn07XG4iLCAiaW1wb3J0IHsgTWFya2Rvd25Qb3N0UHJvY2Vzc29yIH0gZnJvbSBcIm9ic2lkaWFuXCI7XG5cbmltcG9ydCB0eXBlIEljb25TQyBmcm9tIFwiLi4vaXNjLW1haW5cIjtcblxuY29uc3QgZ2V0Q2FsbG91dEljb25Qb3N0UHJvY2Vzc29yID1cbiAgKHBsdWdpbjogSWNvblNDKTogTWFya2Rvd25Qb3N0UHJvY2Vzc29yID0+XG4gIChlbCwgY3R4KSA9PiB7XG4gICAgZm9yIChjb25zdCBjYWxsb3V0RWwgb2YgZWwucXVlcnlTZWxlY3RvckFsbChcIi5jYWxsb3V0XCIpKSB7XG4gICAgICBjb25zdCBpY29uRWwgPSBjYWxsb3V0RWwucXVlcnlTZWxlY3RvcihcbiAgICAgICAgXCIuY2FsbG91dC10aXRsZSA+IC5jYWxsb3V0LWljb25cIixcbiAgICAgICkhIGFzIEhUTUxFbGVtZW50O1xuICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihhc3luYyAobSkgPT4ge1xuICAgICAgICBpZiAoaWNvbkVsLmNoaWxkRWxlbWVudENvdW50ID4gMCkgcmV0dXJuO1xuICAgICAgICBjb25zdCBpZCA9IGdldENzc1Byb3BlcnR5VmFsdWUoaWNvbkVsLCBcIi0tY2FsbG91dC1pY29uXCIpLFxuICAgICAgICAgIGljb24gPSBhd2FpdCBwbHVnaW4uYXBpLmdldFNWR0ljb24oaWQpO1xuICAgICAgICBpZiAoIWljb24pIHJldHVybjtcbiAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgICBpY29uRWwuY2xhc3NOYW1lICs9IFwiIFwiICsgaWNvbi5jbGFzc05hbWU7XG4gICAgICAgIGljb25FbC5yZXBsYWNlQ2hpbGRyZW4oLi4uaWNvbi5jaGlsZE5vZGVzKTtcbiAgICAgIH0pO1xuICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShpY29uRWwsIHsgY2hpbGRMaXN0OiB0cnVlIH0pO1xuICAgIH1cbiAgfTtcbmV4cG9ydCBkZWZhdWx0IGdldENhbGxvdXRJY29uUG9zdFByb2Nlc3NvcjtcblxuY29uc3QgZ2V0Q3NzUHJvcGVydHlWYWx1ZSA9IChcbiAgZWw6IEhUTUxFbGVtZW50LFxuICBwcm9wOiBzdHJpbmcsXG4gIHBzZXVkb0VsPzogc3RyaW5nIHwgbnVsbCxcbikgPT4gZ2V0Q29tcHV0ZWRTdHlsZShlbCwgcHNldWRvRWwpLmdldFByb3BlcnR5VmFsdWUocHJvcCkudHJpbSgpO1xuIiwgImltcG9ydCB7XG4gIGdldEdsb2JhbFJlZ2V4cCxcbiAgUkVfU0hPUlRDT0RFLFxuICBzdHJpcENvbG9ucyxcbn0gZnJvbSBcIi4uL2ljb24tcGFja3MvdXRpbHNcIjtcbmltcG9ydCBJY29uU0MgZnJvbSBcIi4uL2lzYy1tYWluXCI7XG5cbmNvbnN0IGFjY2VwdE5vZGUgPSAobm9kZTogTm9kZSk6IG51bWJlciA9PiB7XG4gIHN3aXRjaCAobm9kZS5ub2RlTmFtZSkge1xuICAgIGNhc2UgXCJDT0RFXCI6XG4gICAgY2FzZSBcIk1KWC1DT05UQUlORVJcIjpcbiAgICAgIHJldHVybiBOb2RlRmlsdGVyLkZJTFRFUl9SRUpFQ1Q7XG4gICAgY2FzZSBcIiN0ZXh0XCI6IHtcbiAgICAgIGlmIChub2RlLm5vZGVWYWx1ZSAmJiBSRV9TSE9SVENPREUudGVzdChub2RlLm5vZGVWYWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIE5vZGVGaWx0ZXIuRklMVEVSX0FDQ0VQVDtcbiAgICAgIH0gZWxzZSByZXR1cm4gTm9kZUZpbHRlci5GSUxURVJfUkVKRUNUO1xuICAgIH1cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIE5vZGVGaWx0ZXIuRklMVEVSX1NLSVA7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXROb2RlUG9zdFByb2Nlc3NvciA9IChcbiAgcGx1Z2luOiBJY29uU0MsXG4pOiAoKGVsOiBIVE1MRWxlbWVudCkgPT4gdm9pZCkgPT4ge1xuICBjb25zdCBzY1JlcGxhY2UgPSBhc3luYyAodGV4dDogVGV4dCkgPT4ge1xuICAgIGZvciAoY29uc3QgY29kZSBvZiBbXG4gICAgICAuLi50ZXh0Lndob2xlVGV4dC5tYXRjaEFsbChnZXRHbG9iYWxSZWdleHAoUkVfU0hPUlRDT0RFKSksXG4gICAgXVxuICAgICAgLnNvcnQoKGEsIGIpID0+IChiLmluZGV4IGFzIG51bWJlcikgLSAoYS5pbmRleCBhcyBudW1iZXIpKVxuICAgICAgLm1hcCgoYXJyKSA9PiAoeyB0ZXh0OiBhcnJbMF0sIGluZGV4OiBhcnIuaW5kZXghIH0pKSkge1xuICAgICAgYXdhaXQgaW5zZXJ0RWxUb1RleHQodGV4dCwgY29kZSk7XG4gICAgfVxuICB9O1xuICBjb25zdCBpbnNlcnRFbFRvVGV4dCA9IGFzeW5jIChcbiAgICB0ZXh0OiBUZXh0LFxuICAgIHsgdGV4dDogcGF0dGVybiwgaW5kZXggfTogeyB0ZXh0OiBzdHJpbmc7IGluZGV4OiBudW1iZXIgfSxcbiAgKSA9PiB7XG4gICAgY29uc3QgaWNvbiA9IGF3YWl0IHBsdWdpbi5wYWNrTWFuYWdlci5nZXRTVkdJY29uKHN0cmlwQ29sb25zKHBhdHRlcm4pKTtcbiAgICBpZiAoIWljb24pIHJldHVybiB0ZXh0O1xuICAgIGlmICh0eXBlb2YgaWNvbiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgdGV4dC50ZXh0Q29udGVudCAmJlxuICAgICAgICAodGV4dC50ZXh0Q29udGVudCA9IHRleHQudGV4dENvbnRlbnQ/LnJlcGxhY2UocGF0dGVybiwgaWNvbikpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB0b1JlcGxhY2UgPSB0ZXh0LnNwbGl0VGV4dChpbmRleCk7XG4gICAgICB0b1JlcGxhY2UucGFyZW50RWxlbWVudD8uaW5zZXJ0QmVmb3JlKGljb24sIHRvUmVwbGFjZSk7XG4gICAgICB0b1JlcGxhY2UudGV4dENvbnRlbnQgPSB0b1JlcGxhY2Uud2hvbGVUZXh0LnN1YnN0cmluZyhwYXR0ZXJuLmxlbmd0aCk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiAoZWw6IEhUTUxFbGVtZW50KSA9PiB7XG4gICAgY29uc3Qgd2Fsa2VyID0gZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihlbCwgTm9kZUZpbHRlci5TSE9XX0FMTCwge1xuICAgICAgYWNjZXB0Tm9kZSxcbiAgICB9KTtcbiAgICBsZXQgY3VycmVudE5vZGU6IE5vZGUgfCBudWxsID0gd2Fsa2VyLmN1cnJlbnROb2RlO1xuICAgIHdoaWxlIChjdXJyZW50Tm9kZSkge1xuICAgICAgaWYgKGN1cnJlbnROb2RlLm5vZGVUeXBlID09PSAzKSB7XG4gICAgICAgIGNvbnN0IHRleHQgPSBjdXJyZW50Tm9kZSBhcyBUZXh0ICYgeyBfX1BFTkRJTkdfXz86IFByb21pc2U8YW55PiB9O1xuICAgICAgICAvLyBkb24ndCB3YWl0IGZvciBuZXcgbm9kZSB0byBiZSBpbnNlcnRlZFxuICAgICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGxldCB0ZXh0Tm9kZXMgPSBbdGV4dF07XG4gICAgICAgICAgaWYgKHRleHQuX19QRU5ESU5HX18pIHtcbiAgICAgICAgICAgIC8vIHdhaXQgZm9yIHByZXZvdXMgcG9zdCBwcm9jZXNzb3IgdG8gZmluaXNoXG4gICAgICAgICAgICBhd2FpdCB0ZXh0Ll9fUEVORElOR19fO1xuICAgICAgICAgICAgLy8gcmVzY2FuIGZvciBuZXcgdGV4dCBub2Rlc1xuICAgICAgICAgICAgdGV4dE5vZGVzID0gWy4uLnRleHQucGFyZW50RWxlbWVudCEuY2hpbGROb2Rlc10uZmlsdGVyKFxuICAgICAgICAgICAgICAobik6IG4gaXMgVGV4dCA9PiBuIGluc3RhbmNlb2YgVGV4dCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHBlbmRpbmcgPSBQcm9taXNlLmFsbCh0ZXh0Tm9kZXMubWFwKHNjUmVwbGFjZSkpO1xuICAgICAgICAgIC8vIHNhdmUgcHJvbWlzZSB0byBfX1BFTkRJTkdfXyB0byBub3RpZnkgb3RoZXIgYXN5bmMgcG9zdCBwcm9jZXNzb3JcbiAgICAgICAgICB0ZXh0Ll9fUEVORElOR19fID0gcGVuZGluZztcbiAgICAgICAgICBhd2FpdCBwZW5kaW5nO1xuICAgICAgICAgIGRlbGV0ZSB0ZXh0Ll9fUEVORElOR19fO1xuICAgICAgICB9KSgpO1xuICAgICAgfVxuICAgICAgY3VycmVudE5vZGUgPSB3YWxrZXIubmV4dE5vZGUoKTtcbiAgICB9XG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0TURQb3N0UHJvY2Vzc29yID1cbiAgKHBsdWdpbjogSWNvblNDKSA9PiAoc3RyOiBzdHJpbmcsIHJlcGxhY2VyOiAoc2hvcnRjb2RlOiBzdHJpbmcpID0+IHN0cmluZykgPT5cbiAgICBzdHIucmVwbGFjZShnZXRHbG9iYWxSZWdleHAoUkVfU0hPUlRDT0RFKSwgKGNvZGUpID0+IHtcbiAgICAgIGlmIChwbHVnaW4ucGFja01hbmFnZXIuaGFzSWNvbihzdHJpcENvbG9ucyhjb2RlKSkpIHtcbiAgICAgICAgcmV0dXJuIHJlcGxhY2VyKGNvZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGNvZGU7XG4gICAgICB9XG4gICAgfSk7XG4iLCAiaW1wb3J0IHR5cGUgSWNvblNDIGZyb20gXCIuLi9pc2MtbWFpblwiO1xuaW1wb3J0IGdldENhbGxvdXRJY29uUG9zdFByb2Nlc3NvciBmcm9tIFwiLi9jYWxsb3V0LWljb25cIjtcbmltcG9ydCB7IGdldE1EUG9zdFByb2Nlc3NvciwgZ2V0Tm9kZVBvc3RQcm9jZXNzb3IgfSBmcm9tIFwiLi90ZXh0XCI7XG5cbmNvbnN0IHNldHVwUG9zdFByb2Nlc3NvcnMgPSAocGx1Z2luOiBJY29uU0MpID0+IHtcbiAgcGx1Z2luLnJlZ2lzdGVyTWFya2Rvd25Qb3N0UHJvY2Vzc29yKHBsdWdpbi5fbm9kZVByb2Nlc3Nvcik7XG4gIHBsdWdpbi5yZWdpc3Rlck1hcmtkb3duUG9zdFByb2Nlc3NvcihnZXRDYWxsb3V0SWNvblBvc3RQcm9jZXNzb3IocGx1Z2luKSk7XG59O1xuXG5leHBvcnQgeyBnZXRNRFBvc3RQcm9jZXNzb3IsIGdldE5vZGVQb3N0UHJvY2Vzc29yLCBzZXR1cFBvc3RQcm9jZXNzb3JzIH07XG4iLCAiY2xhc3MgQmFzZUVycm9yIGV4dGVuZHMgRXJyb3Ige31cblxuZXhwb3J0IGNsYXNzIE5vdFJlY2VpdmVGaWxlTGlzdCBleHRlbmRzIEJhc2VFcnJvciB7fVxuXG5leHBvcnQgY2xhc3MgVW5rbm93bkVycm9yIGV4dGVuZHMgQmFzZUVycm9yIHt9XG4iLCAiZXhwb3J0IGNvbnN0IGpvaW5BcnJheVN0cmluZyA9IChcbiAgYXJyOiBzdHJpbmdbXSxcbiAgc2VwYXJhdG9yOiBzdHJpbmcgPSAnLCdcbik6IHN0cmluZyA9PiBhcnIuam9pbihzZXBhcmF0b3IpXG4iLCAiaW1wb3J0IHsgVW5rbm93bkVycm9yLCBOb3RSZWNlaXZlRmlsZUxpc3QgfSBmcm9tICcuL2Vycm9yJ1xuaW1wb3J0IHsgam9pbkFycmF5U3RyaW5nIH0gZnJvbSAnLi91dGlsJ1xuY29uc3QgREVGQVVMVF9QQVJBTUVURVJTOiBQYXJhbWV0ZXJzID0ge1xuICBhY2NlcHQ6ICcqJyxcbiAgbXVsdGlwbGU6IGZhbHNlLFxuICBzdHJpY3Q6IGZhbHNlXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFyYW1ldGVyczxcbiAgVCBleHRlbmRzIGJvb2xlYW4gPSBmYWxzZSxcbiAgVSBleHRlbmRzIGJvb2xlYW4gPSBmYWxzZVxuPiB7XG4gIGFjY2VwdDogc3RyaW5nIHwgc3RyaW5nW11cbiAgbXVsdGlwbGU6IFRcbiAgc3RyaWN0OiBVXG59XG5cbnR5cGUgUGlja0ZpbGU8XG4gIFQgZXh0ZW5kcyBib29sZWFuID0gZmFsc2UsXG4gIFUgZXh0ZW5kcyBib29sZWFuID0gZmFsc2Vcbj4gPSBUIGV4dGVuZHMgZmFsc2UgPyAoVSBleHRlbmRzIHRydWUgPyBGaWxlIDogRmlsZUxpc3QpIDogRmlsZUxpc3RcblxuLyoqXG4gKiBDYWxsIGZpbGUgc2VsZWN0IGRpYWxvZyBwcm9ncmFtbWF0aWNhbGx5LlxuICogQHBhcmFtIHtvYmplY3R9IFtwYXJhbWV0ZXJzXSBvcHRpb25hbFxuICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2UgPEZpbGUgfCBGaWxlTGlzdD4gaWYgc3RyaWN0IGlzIGZhbHNlLCByZXR1cm4gRmlsZUxpc3Qgb2JqZWN0LCBpZiBtdWx0aXBsZSBpcyBmYWxzZSBhbmQgc3RyaWN0IGlzIHRydWUgcmV0dXJuIEZpbGUgb2JqZWN0XG4gKi9cbmV4cG9ydCBjb25zdCBmaWxlRGlhbG9nID0gPFxuICBUIGV4dGVuZHMgYm9vbGVhbiA9IGZhbHNlLFxuICBVIGV4dGVuZHMgYm9vbGVhbiA9IGZhbHNlXG4+KFxuICBwYXJhbWV0ZXJzPzogUGFydGlhbDxQYXJhbWV0ZXJzPFQsIFU+PlxuKTogUHJvbWlzZTxQaWNrRmlsZTxULCBVPj4gPT4ge1xuICBjb25zdCB7IGFjY2VwdCwgbXVsdGlwbGUsIHN0cmljdCB9ID0geyAuLi5ERUZBVUxUX1BBUkFNRVRFUlMsIC4uLnBhcmFtZXRlcnMgfVxuICBjb25zdCBpbnB1dCA9IGNyZWF0ZUZpbGVJbnB1dEVsZW1lbnQoe1xuICAgIG11bHRpcGxlLFxuICAgIGFjY2VwdDogQXJyYXkuaXNBcnJheShhY2NlcHQpID8gam9pbkFycmF5U3RyaW5nKGFjY2VwdCkgOiBhY2NlcHRcbiAgfSlcbiAgcmV0dXJuIG5ldyBQcm9taXNlPFBpY2tGaWxlPFQsIFU+PigocmVzb2x2ZSkgPT4ge1xuICAgIGlucHV0Lm9uY2hhbmdlID0gKCkgPT4ge1xuICAgICAgcmVzb2x2ZShyZXNvbHZlcihpbnB1dC5maWxlcywgbXVsdGlwbGUgYXMgVCwgc3RyaWN0IGFzIFUpKVxuICAgICAgaW5wdXQucmVtb3ZlKClcbiAgICB9XG4gICAgaW5wdXQuY2xpY2soKVxuICB9KVxufVxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZXIgPSA8VCBleHRlbmRzIGJvb2xlYW4sIFUgZXh0ZW5kcyBib29sZWFuPihcbiAgZmlsZUxpc3Q6IEhUTUxJbnB1dEVsZW1lbnRbJ2ZpbGVzJ10sXG4gIG11bHRpcGxlOiBULFxuICBzdHJpY3Q6IFVcbikgPT4ge1xuICByZXR1cm4gbmV3IFByb21pc2U8UGlja0ZpbGU8VCwgVT4+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBpZiAoIWZpbGVMaXN0KSByZXR1cm4gcmVqZWN0KG5ldyBOb3RSZWNlaXZlRmlsZUxpc3QoKSlcbiAgICBjb25zdCBmaWxlID0gZ2V0RmlsZUxpc3RPYmooZmlsZUxpc3QsIG11bHRpcGxlLCBzdHJpY3QpXG4gICAgaWYgKCFmaWxlKSByZXR1cm4gcmVqZWN0KG5ldyBVbmtub3duRXJyb3IoKSlcblxuICAgIHJlc29sdmUoZmlsZSlcbiAgfSlcbn1cblxuZXhwb3J0IGNvbnN0IGdldEZpbGVMaXN0T2JqID0gPFQgZXh0ZW5kcyBib29sZWFuLCBVIGV4dGVuZHMgYm9vbGVhbj4oXG4gIGZpbGVzOiBOb25OdWxsYWJsZTxIVE1MSW5wdXRFbGVtZW50WydmaWxlcyddPixcbiAgbXVsdGlwbGU6IFQsXG4gIHN0cmljdDogVVxuKTogUGlja0ZpbGU8VCwgVT4gfCBudWxsID0+IHtcbiAgaWYgKCFtdWx0aXBsZSAmJiBzdHJpY3QpIHtcbiAgICBpZiAoZmlsZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICByZXR1cm4gPFBpY2tGaWxlPFQsIFU+PmZpbGVzWzBdXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICB9IGVsc2UgaWYgKGZpbGVzLmxlbmd0aCkge1xuICAgIHJldHVybiA8UGlja0ZpbGU8VCwgVT4+ZmlsZXNcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG59XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVGaWxlSW5wdXRFbGVtZW50ID0gKHtcbiAgYWNjZXB0LFxuICBtdWx0aXBsZVxufTogUGljazxIVE1MSW5wdXRFbGVtZW50LCAnYWNjZXB0JyB8ICdtdWx0aXBsZSc+KTogSFRNTElucHV0RWxlbWVudCA9PiB7XG4gIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKVxuICBpbnB1dC50eXBlID0gJ2ZpbGUnXG4gIGlucHV0Lm11bHRpcGxlID0gbXVsdGlwbGVcbiAgaW5wdXQuYWNjZXB0ID0gYWNjZXB0XG4gIHJldHVybiBpbnB1dFxufVxuIiwgImltcG9ydCBcInNldHRpbmdzLmxlc3NcIjtcbmltcG9ydCBcImludmFsaWQubGVzc1wiO1xuXG5pbXBvcnQgeyBmaWxlRGlhbG9nIH0gZnJvbSBcImZpbGUtc2VsZWN0LWRpYWxvZ1wiO1xuaW1wb3J0IHtcbiAgQXBwLFxuICBCdXR0b25Db21wb25lbnQsXG4gIE5vdGljZSxcbiAgUGxhdGZvcm0sXG4gIFBsdWdpblNldHRpbmdUYWIsXG4gIFNldHRpbmcsXG4gIFRleHRDb21wb25lbnQsXG59IGZyb20gXCJvYnNpZGlhblwiO1xuXG5pbXBvcnQgQnJvd3NlclBhY2tzIGZyb20gXCIuL2NvbXBvbmVudC9icm93c2VyLXBhY2tzXCI7XG5pbXBvcnQgSWNvbk1hbmFnZXIgZnJvbSBcIi4vY29tcG9uZW50L2ljb24tbWFuYWdlclwiO1xuaW1wb3J0IHsgQnVpbHRJbkljb25QYWNrbmFtZXMsIFNWR1BhY2tuYW1lcyB9IGZyb20gXCIuL2ljb24tcGFja3MvYnVpbHQtaW5zXCI7XG5pbXBvcnQgeyBTdXBwb3J0ZWRJY29uRXh0IH0gZnJvbSBcIi4vaWNvbi1wYWNrcy91dGlsc1wiO1xuaW1wb3J0IEljb25TQyBmcm9tIFwiLi9pc2MtbWFpblwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEljb25TQ1NldHRpbmdzIHtcbiAgY29kZTJlbW9qaTogYm9vbGVhbjtcbiAgc3VnZ2VzdGVyOiBib29sZWFuO1xuICBkaXNhYmxlZFBhY2tzOiBTZXQ8c3RyaW5nPjtcbiAgc3BhY2VBZnRlclNDOiBib29sZWFuO1xuICB0cmlnZ2VyV2l0aFRyYWlsaW5nU3BhY2U6IGJvb2xlYW47XG4gIGlzTWlncmF0ZWQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1NFVFRJTkdTOiBJY29uU0NTZXR0aW5ncyA9IHtcbiAgY29kZTJlbW9qaTogdHJ1ZSxcbiAgc3VnZ2VzdGVyOiB0cnVlLFxuICBkaXNhYmxlZFBhY2tzOiBuZXcgU2V0KFtcIm9ic1wiXSksXG4gIHRyaWdnZXJXaXRoVHJhaWxpbmdTcGFjZTogZmFsc2UsXG4gIHNwYWNlQWZ0ZXJTQzogZmFsc2UsXG4gIGlzTWlncmF0ZWQ6IGZhbHNlLFxufTtcblxuZXhwb3J0IGNsYXNzIEljb25TQ1NldHRpbmdUYWIgZXh0ZW5kcyBQbHVnaW5TZXR0aW5nVGFiIHtcbiAgcGx1Z2luOiBJY29uU0M7XG5cbiAgY29uc3RydWN0b3IoYXBwOiBBcHAsIHBsdWdpbjogSWNvblNDKSB7XG4gICAgc3VwZXIoYXBwLCBwbHVnaW4pO1xuICAgIHRoaXMucGx1Z2luID0gcGx1Z2luO1xuICB9XG5cbiAgZGlzcGxheSgpOiB2b2lkIHtcbiAgICBjb25zdCB7IGNvbnRhaW5lckVsIH0gPSB0aGlzO1xuXG4gICAgdGhpcy5jb250YWluZXJFbC5lbXB0eSgpO1xuXG4gICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpLnNldEhlYWRpbmcoKS5zZXROYW1lKFwiSWNvbiBTdWdnZXN0ZXJcIik7XG4gICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG4gICAgICAuc2V0RGVzYyhcbiAgICAgICAgXCJJZiB0aGlzIGlzIHR1cm5lZCBvbiwgYSBTdWdnZXN0ZXIgd2lsbCBhcHBlYXIgZXZlcnl0aW1lIHlvdSB0eXBlIDoob3IgXHVGRjFBXHVGRjFBIGlmIGZ1bGwtd2lkdGgpIGZvbGxvd2VkIGJ5IGEgbGV0dGVyLiBUaGlzIHdpbGwgaGVscCB5b3UgaW5zZXJ0IEVtb2ppcy4gXCIsXG4gICAgICApXG4gICAgICAuYWRkVG9nZ2xlKChjYikgPT4ge1xuICAgICAgICBjYi5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5zdWdnZXN0ZXIpLm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLnN1Z2dlc3RlciA9IHZhbHVlO1xuICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuICAgICAgLnNldE5hbWUoXCJSZXBsYWNlIGVtb2ppIHNob3J0Y29kZSB3aXRoIGVtb2ppIGNoYXJhY3RlclwiKVxuICAgICAgLnNldERlc2MoXG4gICAgICAgIFwiSWYgdGhpcyBpcyB0dXJuZWQgb24sIGVtb2ppIHNob3J0Y29kZXMgd2lsbCBiZSBpbW1lZGlhdGVseSByZXBsYWNlZCBieSBlbW9qaSBhZnRlciB0eXBpbmcuIFwiICtcbiAgICAgICAgICBcIk90aGVyd2lzZSB0aGV5IGFyZSBzdGlsbCBzdG9yZWQgYXMgYSBzaG9ydGNvZGUgYW5kIHlvdSBvbmx5IHNlZSB0aGUgRW1vamkgaW4gUHJldmlldyBNb2RlLlwiLFxuICAgICAgKVxuICAgICAgLmFkZFRvZ2dsZSgoY2IpID0+IHtcbiAgICAgICAgY2Iuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuY29kZTJlbW9qaSkub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MuY29kZTJlbW9qaSA9IHZhbHVlO1xuICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuICAgICAgLnNldE5hbWUoXCJUcmlnZ2VyIHdpdGggdHJhaWxpbmcgc3BhY2VcIilcbiAgICAgIC5zZXREZXNjKFxuICAgICAgICBcIm9ubHkgdHJpZ2dlciBzdWdnZXN0ZXIgaWYgdGhlcmUgaXMgYSB0cmFpbGluZyBzcGFjZSBiZWZvcmUgdGhlIGNvbG9uXCIsXG4gICAgICApXG4gICAgICAuYWRkVG9nZ2xlKChjYikgPT4ge1xuICAgICAgICBjYi5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy50cmlnZ2VyV2l0aFRyYWlsaW5nU3BhY2UpLm9uQ2hhbmdlKFxuICAgICAgICAgIGFzeW5jICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MudHJpZ2dlcldpdGhUcmFpbGluZ1NwYWNlID0gdmFsdWU7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG4gICAgICAuc2V0TmFtZShcIkFkZCBzcGFjZSBhZnRlciBpbnNlcnRlZCBzaG9ydGNvZGVcIilcbiAgICAgIC5hZGRUb2dnbGUoKGNiKSA9PiB7XG4gICAgICAgIGNiLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnNwYWNlQWZ0ZXJTQykub25DaGFuZ2UoXG4gICAgICAgICAgYXN5bmMgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5zcGFjZUFmdGVyU0MgPSB2YWx1ZTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuc2tpcEljb25QYWNrKCk7XG4gICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG4gICAgICAuc2V0TmFtZShcIkljb24gUGFja3NcIilcbiAgICAgIC5zZXREZXNjKFwiQnJvd3NlIGFuZCBkb3dubG9hZCBpY29uIHBhY2tzXCIpXG4gICAgICAuYWRkQnV0dG9uKChidG4pID0+XG4gICAgICAgIGJ0blxuICAgICAgICAgIC5zZXRCdXR0b25UZXh0KFwiQnJvd3NlclwiKVxuICAgICAgICAgIC5vbkNsaWNrKCgpID0+IG5ldyBCcm93c2VyUGFja3ModGhpcy5wbHVnaW4pLm9wZW4oKSksXG4gICAgICApO1xuXG4gICAgLy8gY3VzdG9tIGljb24gbWFuYWdlIHNlY3Rpb25cbiAgICBjb25zdCBtYW5hZ2VyQ29udGFpbmVyID0gY3JlYXRlRGl2KHtcbiAgICAgIGNsczogW1wiaXNjLXNldHRpbmdzLWN1c3RvbS1pY29uXCIsIFwiaW5zdGFsbGVkLXBsdWdpbnMtY29udGFpbmVyXCJdLFxuICAgIH0pO1xuICAgIG5ldyBTZXR0aW5nKHRoaXMuY29udGFpbmVyRWwpXG4gICAgICAuc2V0SGVhZGluZygpXG4gICAgICAuc2V0TmFtZShcIkN1c3RvbSBJY29uc1wiKVxuICAgICAgLmFkZEV4dHJhQnV0dG9uKChidG4pID0+XG4gICAgICAgIGJ0blxuICAgICAgICAgIC5zZXRJY29uKFwic2hlZXRzLWluLWJveFwiKVxuICAgICAgICAgIC5zZXRUb29sdGlwKFwiQmFja3VwIGljb25zXCIpXG4gICAgICAgICAgLm9uQ2xpY2soKCkgPT4gdGhpcy5wbHVnaW4ucGFja01hbmFnZXIuYmFja3VwSWNvbnMoKSksXG4gICAgICApXG4gICAgICAuYWRkRXh0cmFCdXR0b24oKGJ0bikgPT5cbiAgICAgICAgYnRuXG4gICAgICAgICAgLnNldEljb24oXCJyZXN0b3JlLWZpbGUtZ2x5cGhcIilcbiAgICAgICAgICAuc2V0VG9vbHRpcChcIlJlc3RvcmUgYmFja3VwXCIpXG4gICAgICAgICAgLm9uQ2xpY2soYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5wbHVnaW4ucGFja01hbmFnZXIuaW1wb3J0SWNvbnNGcm9tRmlsZUxpc3QoXG4gICAgICAgICAgICAgIGF3YWl0IGZpbGVEaWFsb2coeyBtdWx0aXBsZTogdHJ1ZSwgYWNjZXB0OiBcIi56aXBcIiB9KSxcbiAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4ucGFja01hbmFnZXIubG9hZEljb25zKCk7XG4gICAgICAgICAgICB0aGlzLm1hbmFnZUN1c3RvbUljb25zKG1hbmFnZXJDb250YWluZXIpO1xuICAgICAgICAgIH0pLFxuICAgICAgKVxuICAgICAgLmFkZEV4dHJhQnV0dG9uKChidG4pID0+XG4gICAgICAgIGJ0blxuICAgICAgICAgIC5zZXRJY29uKFwic3dpdGNoXCIpXG4gICAgICAgICAgLnNldFRvb2x0aXAoXCJSZWxvYWQgY3VzdG9tIGljb25zXCIpXG4gICAgICAgICAgLm9uQ2xpY2soYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4ucGFja01hbmFnZXIubG9hZEljb25zKCk7XG4gICAgICAgICAgICB0aGlzLm1hbmFnZUN1c3RvbUljb25zKG1hbmFnZXJDb250YWluZXIpO1xuICAgICAgICAgICAgbmV3IE5vdGljZShcIkN1c3RvbSBpY29ucyByZWxvYWRlZFwiKTtcbiAgICAgICAgICB9KSxcbiAgICAgIClcbiAgICAgIC50aGVuKFxuICAgICAgICAocykgPT5cbiAgICAgICAgICBQbGF0Zm9ybS5pc0Rlc2t0b3BBcHAgJiZcbiAgICAgICAgICBzLmFkZEV4dHJhQnV0dG9uKChidG4pID0+XG4gICAgICAgICAgICBidG5cbiAgICAgICAgICAgICAgLnNldEljb24oXCJmb2xkZXJcIilcbiAgICAgICAgICAgICAgLnNldFRvb2x0aXAoXCJPcGVuIEljb25zIEZvbGRlclwiKVxuICAgICAgICAgICAgICAub25DbGljaygoKSA9PlxuICAgICAgICAgICAgICAgIHRoaXMuYXBwLm9wZW5XaXRoRGVmYXVsdEFwcChcbiAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luLnBhY2tNYW5hZ2VyLmN1c3RvbUljb25zRGlyLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgKSxcbiAgICAgICk7XG4gICAgdGhpcy5jb250YWluZXJFbC5hcHBlbmRDaGlsZChtYW5hZ2VyQ29udGFpbmVyKTtcbiAgICB0aGlzLm1hbmFnZUN1c3RvbUljb25zKG1hbmFnZXJDb250YWluZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0RGlzYWJsZWRQYWNrKHRhcmdldDogc3RyaW5nLCBzZXR0aW5nOiBTZXR0aW5nKSB7XG4gICAgcmV0dXJuIHNldHRpbmcuYWRkVG9nZ2xlKChjYikgPT4ge1xuICAgICAgY2Iuc2V0VmFsdWUoIXRoaXMucGx1Z2luLnNldHRpbmdzLmRpc2FibGVkUGFja3MuaGFzKHRhcmdldCkpLm9uQ2hhbmdlKFxuICAgICAgICBhc3luYyAodmFsdWUpID0+IHtcbiAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmRpc2FibGVkUGFja3MuZGVsZXRlKHRhcmdldCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmRpc2FibGVkUGFja3MuYWRkKHRhcmdldCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuICAgICAgICB9LFxuICAgICAgKTtcbiAgICAgIGNiLnRvZ2dsZUVsLnNldEF0dHIoXCJhcmlhLWxhYmVsXCIsIGBFbmFibGUvRGlzYWJsZSAke3RhcmdldH0gSWNvbiBQYWNrYCk7XG4gICAgfSk7XG4gIH1cbiAgc2tpcEljb25QYWNrKCk6IHZvaWQge1xuICAgIGNvbnN0IHsgY29udGFpbmVyRWwgfSA9IHRoaXM7XG5cbiAgICBjb25zdCBnZXRTZXR0aW5nID0gKFxuICAgICAgcGFjazogU1ZHUGFja25hbWVzLFxuICAgICAgbmFtZTogc3RyaW5nLFxuICAgICAgZ2V0RGVzYz86IChlbDogRG9jdW1lbnRGcmFnbWVudCkgPT4gdm9pZCxcbiAgICApID0+XG4gICAgICB0aGlzLl9zZXREaXNhYmxlZFBhY2soXG4gICAgICAgIHBhY2ssXG4gICAgICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKS5zZXROYW1lKG5hbWUpLnNldERlc2MoY3JlYXRlRnJhZ21lbnQoZ2V0RGVzYykpLFxuICAgICAgKTtcblxuICAgIG5ldyBTZXR0aW5nKHRoaXMuY29udGFpbmVyRWwpLnNldEhlYWRpbmcoKS5zZXROYW1lKFwiSWNvbiBQYWNrc1wiKTtcblxuICAgIGdldFNldHRpbmcoXCJsdWNcIiwgXCJMdWNpZGVcIiwgKGVsKSA9PlxuICAgICAgZWwuY3JlYXRlRWwoXCJhXCIsIHtcbiAgICAgICAgaHJlZjogXCJodHRwczovL2x1Y2lkZS5kZXZcIixcbiAgICAgICAgdGV4dDogXCJvZmZpY2lhbCB3ZWJzaXRlXCIsXG4gICAgICB9KSxcbiAgICApO1xuICAgIGdldFNldHRpbmcoXCJvYnNcIiwgXCJPYnNpZGlhbidzIGJ1aWx0LWluIGljb25zXCIsIChlbCkgPT5cbiAgICAgIGVsLmFwcGVuZFRleHQoXG4gICAgICAgIFwiT2JzaWRpYW4ncyBidWlsdC1pbiBpY29ucyBhcmUgbW9zdGx5IHVzZWQgZm9yIFVJIGNvbXBvbmVudHMuIFwiLFxuICAgICAgKSxcbiAgICApO1xuICB9XG5cbiAgbWFuYWdlQ3VzdG9tSWNvbnMoY29udGFpbmVyRWw6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgaWYgKGNvbnRhaW5lckVsLmhhc0NoaWxkTm9kZXMoKSkgY29udGFpbmVyRWwuZW1wdHkoKTtcblxuICAgIGNvbnN0IGlzUGFja25hbWVJbnZhbGlkID0gKG5hbWU6IHN0cmluZykgPT5cbiAgICAgICEvXltBLVphLXowLTldKyQvLnRlc3QobmFtZSkgfHxcbiAgICAgIHRoaXMucGx1Z2luLnBhY2tNYW5hZ2VyLmlzUGFja25hbWVFeGlzdHMobmFtZSk7XG4gICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG4gICAgICAuc2V0TmFtZShcIkFkZCBuZXcgaWNvbiBwYWNrXCIpXG4gICAgICAuc2V0RGVzYyhcIlJlc2VydmVkIG5hbWVzOiBcIiArIEJ1aWx0SW5JY29uUGFja25hbWVzLmpvaW4oXCIsIFwiKSlcbiAgICAgIC50aGVuKChzKSA9PiB7XG4gICAgICAgIGxldCBidXR0b246IEJ1dHRvbkNvbXBvbmVudCB8IG51bGwgPSBudWxsLFxuICAgICAgICAgIGlucHV0OiBUZXh0Q29tcG9uZW50IHwgbnVsbCA9IG51bGw7XG4gICAgICAgIHMuYWRkVGV4dCgodHh0KSA9PiB7XG4gICAgICAgICAgdHh0XG4gICAgICAgICAgICAuc2V0UGxhY2Vob2xkZXIoXCJFbnRlciBuYW1lXCIpXG4gICAgICAgICAgICAub25DaGFuZ2UoKG5hbWUpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgaXNJbnZhbGlkID0gaXNQYWNrbmFtZUludmFsaWQobmFtZSk7XG4gICAgICAgICAgICAgIHR4dC5pbnB1dEVsLnRvZ2dsZUNsYXNzKFwiaW52YWxpZFwiLCAhIW5hbWUgJiYgaXNJbnZhbGlkKTtcbiAgICAgICAgICAgICAgYnV0dG9uPy5zZXREaXNhYmxlZChpc0ludmFsaWQpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC50aGVuKCh0eHQpID0+IHR4dC5pbnB1dEVsLmFkZENsYXNzKFwiaXNjLWFkZC1wYWNrLWlucHV0XCIpKSxcbiAgICAgICAgICAgIChpbnB1dCA9IHR4dCk7XG4gICAgICAgIH0pLmFkZEJ1dHRvbihcbiAgICAgICAgICAoYnRuKSA9PiAoXG4gICAgICAgICAgICBidG5cbiAgICAgICAgICAgICAgLnNldEN0YSgpXG4gICAgICAgICAgICAgIC5zZXRJY29uKFwicGx1cy13aXRoLWNpcmNsZVwiKVxuICAgICAgICAgICAgICAub25DbGljaygoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFja05hbWUgPSBpbnB1dD8uZ2V0VmFsdWUoKTtcbiAgICAgICAgICAgICAgICBpZiAoIXBhY2tOYW1lKSByZXR1cm47XG4gICAgICAgICAgICAgICAgaWYgKGlzUGFja25hbWVJbnZhbGlkKHBhY2tOYW1lKSkge1xuICAgICAgICAgICAgICAgICAgbmV3IE5vdGljZShcIlRoaXMgbmFtZSBpcyBpbnZhbGlkLlwiKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5hZGROZXdDdXN0b21JY29uRW50cnkoXG4gICAgICAgICAgICAgICAgICBwYWNrTmFtZSxcbiAgICAgICAgICAgICAgICAgIGNvbnRhaW5lckVsLFxuICAgICAgICAgICAgICAgICkuc2V0dGluZ0VsLnNjcm9sbEludG9WaWV3KCk7XG4gICAgICAgICAgICAgICAgaW5wdXQ/LnNldFZhbHVlKFwiXCIpO1xuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIChidXR0b24gPSBidG4pXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5wbHVnaW4ucGFja01hbmFnZXIuY3VzdG9tUGFja25hbWVzLmZvckVhY2goKHBhY2spID0+XG4gICAgICB0aGlzLmFkZE5ld0N1c3RvbUljb25FbnRyeShwYWNrLCBjb250YWluZXJFbCksXG4gICAgKTtcbiAgfVxuICBhZGROZXdDdXN0b21JY29uRW50cnkocGFjazogc3RyaW5nLCBjb250YWluZXJFbDogSFRNTEVsZW1lbnQpIHtcbiAgICBjb25zdCBzZXR0aW5nID0gbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG4gICAgICAuc2V0TmFtZShwYWNrKVxuICAgICAgLnNldERlc2MoXG4gICAgICAgIGNyZWF0ZUZyYWdtZW50KChlbCkgPT4ge1xuICAgICAgICAgIGVsLmFwcGVuZFRleHQoXCJEcmFnIGZpbGVzIGluIHRvIGltcG9ydCBjdXN0b20gaWNvbnNcIik7XG4gICAgICAgICAgZWwuY3JlYXRlRWwoXCJiclwiKTtcbiAgICAgICAgICBlbC5hcHBlbmRUZXh0KFwiU3VwcG9ydGVkIGZvcm1hdDogXCIpO1xuICAgICAgICAgIFN1cHBvcnRlZEljb25FeHQuZm9yRWFjaCgoZXh0LCBpbmRleCwgYXJyKSA9PiB7XG4gICAgICAgICAgICBlbC5jcmVhdGVFbChcImNvZGVcIiwgeyB0ZXh0OiBleHQgfSk7XG4gICAgICAgICAgICBpZiAoYXJyLmxlbmd0aCAtIDEgIT09IGluZGV4KSBlbC5hcHBlbmRUZXh0KFwiLCBcIik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pLFxuICAgICAgKVxuICAgICAgLmFkZEJ1dHRvbigoYnRuKSA9PlxuICAgICAgICBidG5cbiAgICAgICAgICAuc2V0SWNvbihcInNoZWV0cy1pbi1ib3hcIilcbiAgICAgICAgICAuc2V0VG9vbHRpcChcIkJhY2t1cCBpY29uc1wiKVxuICAgICAgICAgIC5vbkNsaWNrKCgpID0+IHRoaXMucGx1Z2luLnBhY2tNYW5hZ2VyLmJhY2t1cEljb25zKHBhY2spKSxcbiAgICAgIClcbiAgICAgIC5hZGRCdXR0b24oKGJ0bikgPT5cbiAgICAgICAgYnRuXG4gICAgICAgICAgLnNldEljb24oXCJnby10by1maWxlXCIpXG4gICAgICAgICAgLnNldFRvb2x0aXAoXCJzZWxlY3QgZmlsZXMgdG8gaW1wb3J0XCIpXG4gICAgICAgICAgLm9uQ2xpY2soYXN5bmMgKCkgPT5cbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnBhY2tNYW5hZ2VyLmFkZEZyb21GaWxlcyhcbiAgICAgICAgICAgICAgcGFjayxcbiAgICAgICAgICAgICAgYXdhaXQgZmlsZURpYWxvZyh7XG4gICAgICAgICAgICAgICAgbXVsdGlwbGU6IHRydWUsXG4gICAgICAgICAgICAgICAgYWNjZXB0OiBTdXBwb3J0ZWRJY29uRXh0IGFzIGFueSxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApLFxuICAgICAgICAgICksXG4gICAgICApXG4gICAgICAuYWRkQnV0dG9uKChidG4pID0+XG4gICAgICAgIGJ0blxuICAgICAgICAgIC5zZXRJY29uKFwidHJhc2hcIilcbiAgICAgICAgICAuc2V0VG9vbHRpcChcImRlbGV0ZVwiKVxuICAgICAgICAgIC5zZXRXYXJuaW5nKClcbiAgICAgICAgICAub25DbGljaygoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5wYWNrTWFuYWdlci5maWx0ZXIoKGssIHYpID0+IHYucGFjayAhPT0gcGFjayk7XG4gICAgICAgICAgICBjb250YWluZXJFbC5yZW1vdmVDaGlsZChzZXR0aW5nLnNldHRpbmdFbCk7XG4gICAgICAgICAgfSksXG4gICAgICApXG4gICAgICAuYWRkQnV0dG9uKChidG4pID0+XG4gICAgICAgIGJ0blxuICAgICAgICAgIC5zZXRJY29uKFwicG9wdXAtb3BlblwiKVxuICAgICAgICAgIC5zZXRUb29sdGlwKFwibWFuYWdlIGljb25zXCIpXG4gICAgICAgICAgLnNldEN0YSgpXG4gICAgICAgICAgLm9uQ2xpY2soKCkgPT4gbmV3IEljb25NYW5hZ2VyKHRoaXMucGx1Z2luLCBwYWNrKS5vcGVuKCkpLFxuICAgICAgKVxuICAgICAgLnRoZW4oKHMpID0+XG4gICAgICAgIHNldHVwRG5kKHMuc2V0dGluZ0VsLCBhc3luYyAoZXZ0KSA9PiB7XG4gICAgICAgICAgaWYgKCFldnQuZGF0YVRyYW5zZmVyKSB7XG4gICAgICAgICAgICBuZXcgTm90aWNlKFwiRmFpbGVkIHRvIGdldCBkcm9wcGVkIGl0ZW1zXCIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnBsdWdpbi5wYWNrTWFuYWdlci5hZGRGcm9tRmlsZXMocGFjaywgZXZ0LmRhdGFUcmFuc2Zlci5maWxlcyk7XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB0aGlzLl9zZXREaXNhYmxlZFBhY2socGFjaywgc2V0dGluZyk7XG4gICAgcmV0dXJuIHNldHRpbmc7XG4gIH1cbn1cblxuY29uc3Qgc2V0dXBEbmQgPSAoZWw6IEhUTUxFbGVtZW50LCBkcm9wcGVkSGFuZGxlcjogKGV2dDogRHJhZ0V2ZW50KSA9PiBhbnkpID0+IHtcbiAgY29uc3QgZHJhZ292ZXJDbGFzcyA9IFwiZHJhZ292ZXJcIjtcbiAgZWwuYWRkRXZlbnRMaXN0ZW5lcihcImRyYWdvdmVyXCIsIChldnQpID0+IHtcbiAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAoZXZ0LmN1cnJlbnRUYXJnZXQgYXMgSFRNTEVsZW1lbnQpLmFkZENsYXNzKGRyYWdvdmVyQ2xhc3MpO1xuICB9KTtcbiAgZWwuYWRkRXZlbnRMaXN0ZW5lcihcImRyb3BcIiwgKGV2dCkgPT4ge1xuICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIChldnQuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudCkucmVtb3ZlQ2xhc3MoZHJhZ292ZXJDbGFzcyk7XG4gICAgZHJvcHBlZEhhbmRsZXIoZXZ0KTtcbiAgfSk7XG4gIGVsLmFkZEV2ZW50TGlzdGVuZXIoXCJkcmFnbGVhdmVcIiwgKGV2dCkgPT4ge1xuICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIChldnQuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudCkucmVtb3ZlQ2xhc3MoZHJhZ292ZXJDbGFzcyk7XG4gIH0pO1xufTtcbiIsICJpbXBvcnQgXCIuL2Jyb3dzZXItcGFja3MubGVzc1wiO1xuXG5pbXBvcnQgYXNzZXJ0TmV2ZXIgZnJvbSBcImFzc2VydC1uZXZlclwiO1xuaW1wb3J0IGNscyBmcm9tIFwiY2xhc3NuYW1lc1wiO1xuaW1wb3J0IHsgTW9kYWwsIHJlcXVlc3RVcmwgfSBmcm9tIFwib2JzaWRpYW5cIjtcbmltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcbmltcG9ydCB7XG4gIEZpQXdhcmQsXG4gIEZpRG93bmxvYWQsXG4gIEZpRXh0ZXJuYWxMaW5rLFxuICBGaUhvbWUsXG4gIEZpSW1hZ2UsXG59IGZyb20gXCJyZWFjdC1pY29ucy9maVwiO1xuXG5pbXBvcnQgSWNvblNDIGZyb20gXCIuLi9pc2MtbWFpblwiO1xuaW1wb3J0IHtcbiAgZ2V0SWNvblBhY2tCdW5kbGVVcmwsXG4gIGdldE1hbmlmZXN0VmlhQVBJLFxuICBJY29uUGFja01hbmlmZXN0UmF3LFxufSBmcm9tIFwiLi4vbW9kdWxlcy9pY29uLXBhY2tzXCI7XG5pbXBvcnQgTG9hZGluZyBmcm9tIFwiLi9sb2FkaW5nXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJyb3dzZXJQYWNrcyBleHRlbmRzIE1vZGFsIHtcbiAgY29uc3RydWN0b3IocHVibGljIHBsdWdpbjogSWNvblNDKSB7XG4gICAgc3VwZXIocGx1Z2luLmFwcCk7XG4gICAgdGhpcy5tb2RhbEVsLmFkZENsYXNzKFwibW9kLWJyb3dzZXItcGFja3NcIik7XG4gIH1cbiAgb25PcGVuKCk6IHZvaWQge1xuICAgIFJlYWN0RE9NLnJlbmRlcihcbiAgICAgIDxCcm93c2VyUGFja1ZpZXcgZ2V0SWNvblBhY2s9e3RoaXMuZ2V0SWNvblBhY2suYmluZCh0aGlzKX0gLz4sXG4gICAgICB0aGlzLmNvbnRlbnRFbCxcbiAgICApO1xuICB9XG4gIG9uQ2xvc2UoKTogdm9pZCB7XG4gICAgUmVhY3RET00udW5tb3VudENvbXBvbmVudEF0Tm9kZSh0aGlzLmNvbnRlbnRFbCk7XG4gIH1cblxuICBhc3luYyBnZXRJY29uUGFjayhwYXRoOiBzdHJpbmcsIGJyYW5jaD86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGRvd25sb2FkID0gYXN5bmMgKGFsdCA9IGZhbHNlKSA9PiB7XG4gICAgICBjb25zdCB1cmwgPSBnZXRJY29uUGFja0J1bmRsZVVybChwYXRoLCBicmFuY2gsIGFsdCksXG4gICAgICAgIHppcCA9IChhd2FpdCByZXF1ZXN0VXJsKHsgdXJsIH0pKS5hcnJheUJ1ZmZlcjtcbiAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnBhY2tNYW5hZ2VyLmltcG9ydEljb25zKFxuICAgICAgICB7IG5hbWU6IHVybC5zcGxpdChcIi9cIikucG9wKCkhLCBkYXRhOiB6aXAgfSxcbiAgICAgICAgZmFsc2UsXG4gICAgICApO1xuICAgIH07XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGRvd25sb2FkKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJzd2l0Y2ggdG8gYWx0ZXJuYXRpdmUgbGlua1wiLCBlcnJvcik7XG4gICAgICBhd2FpdCBkb3dubG9hZCh0cnVlKTtcbiAgICB9XG4gIH1cbn1cblxudHlwZSBjb21tb25LZXlzID0gXCJzZXJpZXNcIiB8IFwiZGVzY3JpcHRpb25cIiB8IFwiaG9tZXBhZ2VcIiB8IFwibGljZW5zZVwiO1xudHlwZSBTdHlsZUluZm8gPSBPbWl0PEljb25QYWNrTWFuaWZlc3RSYXcsIGNvbW1vbktleXM+O1xudHlwZSBJY29uUGFja01hbmlmZXN0ID0gUGljazxJY29uUGFja01hbmlmZXN0UmF3LCBjb21tb25LZXlzPiAmXG4gIFJlY29yZDxcInN0eWxlc1wiLCBTdHlsZUluZm9bXT4gJlxuICBSZWNvcmQ8XCJjb3VudFwiLCBudW1iZXI+O1xuXG5jb25zdCBnZXRNYW5pZmVzdExpc3QgPSBhc3luYyAoXG4gIGJyYW5jaCA9IFwibWFzdGVyXCIsXG4pOiBQcm9taXNlPEljb25QYWNrTWFuaWZlc3RbXT4gPT4ge1xuICBjb25zdCByYXdMaXN0ID0gKGF3YWl0IGdldE1hbmlmZXN0VmlhQVBJKGJyYW5jaCkpIGFzIEljb25QYWNrTWFuaWZlc3RSYXdbXTtcbiAgbGV0IGxpc3Q6IEljb25QYWNrTWFuaWZlc3RbXSA9IFtdO1xuICBmb3IgKGNvbnN0IG1hbmlmZXN0IG9mIHJhd0xpc3QpIHtcbiAgICBsZXQgbGFzdCA9IGxpc3QubGFzdCgpO1xuICAgIGlmIChsYXN0Py5zZXJpZXMgPT09IG1hbmlmZXN0LnNlcmllcykge1xuICAgICAgbGFzdC5zdHlsZXMucHVzaChtYW5pZmVzdCk7XG4gICAgICBsYXN0LmNvdW50ICs9IG1hbmlmZXN0LmNvdW50O1xuICAgIH0gZWxzZSB7XG4gICAgICBsaXN0LnB1c2goe1xuICAgICAgICBob21lcGFnZTogbWFuaWZlc3QuaG9tZXBhZ2UsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBtYW5pZmVzdC5kZXNjcmlwdGlvbixcbiAgICAgICAgc2VyaWVzOiBtYW5pZmVzdC5zZXJpZXMsXG4gICAgICAgIGxpY2Vuc2U6IG1hbmlmZXN0LmxpY2Vuc2UsXG4gICAgICAgIHN0eWxlczogW21hbmlmZXN0XSxcbiAgICAgICAgY291bnQ6IG1hbmlmZXN0LmNvdW50LFxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBsaXN0O1xufTtcblxuY29uc3QgQnJvd3NlclBhY2tWaWV3ID0gKHtcbiAgZ2V0SWNvblBhY2ssXG59OiB7XG4gIGdldEljb25QYWNrOiAocGF0aDogc3RyaW5nLCBicmFuY2g/OiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG59KSA9PiB7XG4gIGNvbnN0IFttYW5pZmVzdExpc3QsIHNldE1hbmlmZXN0TGlzdF0gPSB1c2VTdGF0ZTxcbiAgICBJY29uUGFja01hbmlmZXN0W10gfCBudWxsIHwgRXJyb3JcbiAgPihudWxsKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBnZXRNYW5pZmVzdExpc3QoKS50aGVuKHNldE1hbmlmZXN0TGlzdCkuY2F0Y2goc2V0TWFuaWZlc3RMaXN0KTtcbiAgfSwgW10pO1xuICBpZiAobWFuaWZlc3RMaXN0ID09PSBudWxsKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibG9hZGluZ1wiPlxuICAgICAgICA8TG9hZGluZyB0eXBlPVwic3BpblwiIGNsYXNzTmFtZT1cImxvYWRpbmctaW5kaWNhdG9yXCIgLz5cbiAgICAgICAgPGRpdj5Mb2FkaW5nIEljb24gUGFjayBMaXN0Li4uPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkobWFuaWZlc3RMaXN0KSkge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImljb24tcGFjay1saXN0XCI+XG4gICAgICAgIHttYW5pZmVzdExpc3QubWFwKChtYW5pZmVzdCkgPT4gKFxuICAgICAgICAgIDxJY29uUGFja01hbmlmZXN0XG4gICAgICAgICAgICBrZXk9e21hbmlmZXN0LmhvbWVwYWdlfVxuICAgICAgICAgICAgbWFuaWZlc3Q9e21hbmlmZXN0fVxuICAgICAgICAgICAgb25Eb3dubG9hZD17KHBhdGgpID0+IGdldEljb25QYWNrKHBhdGgpfVxuICAgICAgICAgIC8+XG4gICAgICAgICkpfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zb2xlLmVycm9yKG1hbmlmZXN0TGlzdCk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZXJyb3JcIj5cbiAgICAgICAgRmFpbGVkIHRvIExvYWQgSWNvbiBQYWNrIExpc3Q6XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibW9kLXdhcm5pbmdcIj5cbiAgICAgICAgICB7bWFuaWZlc3RMaXN0Lm1lc3NhZ2UgPz8gbWFuaWZlc3RMaXN0LnRvU3RyaW5nKCl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufTtcblxuaW50ZXJmYWNlIE1hbmlmZXN0RXJyb3JTdGF0ZSB7XG4gIHN0YXRlOiBcImVycm9yXCI7XG4gIGVycm9yOiB1bmtub3duO1xufVxudHlwZSBNYW5pZmVzdFN0YXRlID1cbiAgfCBNYW5pZmVzdEVycm9yU3RhdGVcbiAgfCBSZWNvcmQ8XCJzdGF0ZVwiLCBcImRpc3BsYXlcIiB8IFwiZG93bmxvYWRpbmdcIiB8IFwiZG9uZVwiPjtcblxuY29uc3QgUGFja01hbmlmZXN0Q2xhc3MgPSBcInBhY2stbWFuaWZlc3RcIjtcbmNvbnN0IEljb25QYWNrTWFuaWZlc3QgPSAoe1xuICBtYW5pZmVzdDogeyBzZXJpZXMsIHN0eWxlcywgZGVzY3JpcHRpb24sIGNvdW50LCBob21lcGFnZSwgbGljZW5zZSB9LFxuICBvbkRvd25sb2FkLFxufToge1xuICBtYW5pZmVzdDogSWNvblBhY2tNYW5pZmVzdDtcbiAgb25Eb3dubG9hZDogKHBhdGg6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcbn0pID0+IHtcbiAgY29uc3QgZ2V0U3ViQ2xhc3MgPSB1c2VDYWxsYmFjayhcbiAgICAoY2xhc3NOYW1lOiBzdHJpbmcpID0+IGAke1BhY2tNYW5pZmVzdENsYXNzfS0ke2NsYXNzTmFtZX1gLFxuICAgIFtdLFxuICApO1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtQYWNrTWFuaWZlc3RDbGFzc30+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Z2V0U3ViQ2xhc3MoXCJ0aXRsZVwiKX0+e3Nlcmllc308L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtnZXRTdWJDbGFzcyhcImRldGFpbHNcIil9PlxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzTmFtZT17Z2V0U3ViQ2xhc3MoXCJsaWNlbnNlXCIpfVxuICAgICAgICAgIGFyaWEtbGFiZWw9e1wiTGljZW5zZTogXCIgKyBsaWNlbnNlfVxuICAgICAgICA+XG4gICAgICAgICAgPEZpQXdhcmQgc2l6ZT1cIjAuOWVtXCIgLz5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzTmFtZT17Z2V0U3ViQ2xhc3MoXCJjb3VudFwiKX1cbiAgICAgICAgICBhcmlhLWxhYmVsPXtgJHtjb3VudH0gaWNvbnMgaW4gdG90YWxgfVxuICAgICAgICA+XG4gICAgICAgICAgPEZpSW1hZ2Ugc2l6ZT1cIjAuOWVtXCIgLz5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e1wiaWNvbi10ZXh0XCJ9Pntjb3VudH08L3NwYW4+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e2dldFN1YkNsYXNzKFwiZGVzY1wiKX0+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e2dldFN1YkNsYXNzKFwiaG9tZXBhZ2VcIil9XG4gICAgICAgICAgYXJpYS1sYWJlbD17aG9tZXBhZ2V9XG4gICAgICAgICAgb25DbGljaz17KCkgPT4gd2luZG93Lm9wZW4oaG9tZXBhZ2UpfVxuICAgICAgICA+XG4gICAgICAgICAgPEZpSG9tZSAvPlxuICAgICAgICAgIDxhIGNsYXNzTmFtZT17XCJpY29uLXRleHRcIn0+SG9tZSBQYWdlPC9hPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge2Rlc2NyaXB0aW9ufVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInN0eWxlcy1saXN0XCI+XG4gICAgICAgIHtzdHlsZXMubWFwKChzdHlsZSkgPT4gKFxuICAgICAgICAgIDxJY29uUGFja1N0eWxlXG4gICAgICAgICAgICBrZXk9e3N0eWxlLmJ1bmRsZU5hbWV9XG4gICAgICAgICAgICBzdHlsZUluZm89e3N0eWxlfVxuICAgICAgICAgICAgb25Eb3dubG9hZD17b25Eb3dubG9hZH1cbiAgICAgICAgICAvPlxuICAgICAgICApKX1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufTtcblxuY29uc3QgU3R5bGVJbmZvQ2xhc3MgPSBcInN0eWxlLWluZm9cIixcbiAgZ2V0U3R5bGVJbmZvQ2xhc3MgPSAoLi4uY2xhc3Nlczogc3RyaW5nW10pID0+IGNscyhTdHlsZUluZm9DbGFzcywgLi4uY2xhc3Nlcyk7XG5jb25zdCBJY29uUGFja1N0eWxlID0gKHtcbiAgc3R5bGVJbmZvOiB7IGNvdW50LCBwYWNrSWQsIHBhdGgsIHN0eWxlIH0sXG4gIG9uRG93bmxvYWQsXG59OiB7XG4gIHN0eWxlSW5mbzogU3R5bGVJbmZvO1xuICBvbkRvd25sb2FkOiAocGF0aDogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+O1xufSkgPT4ge1xuICBjb25zdCBnZXRTdWJDbGFzcyA9IHVzZUNhbGxiYWNrKFxuICAgIChjbGFzc05hbWU6IHN0cmluZykgPT4gYCR7U3R5bGVJbmZvQ2xhc3N9LSR7Y2xhc3NOYW1lfWAsXG4gICAgW10sXG4gICk7XG4gIGNvbnN0IFtzdGF0ZSwgc2V0U3RhdGVdID0gdXNlU3RhdGU8TWFuaWZlc3RTdGF0ZT4oeyBzdGF0ZTogXCJkaXNwbGF5XCIgfSk7XG4gIHN3aXRjaCAoc3RhdGUuc3RhdGUpIHtcbiAgICBjYXNlIFwiZGlzcGxheVwiOlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2dldFN0eWxlSW5mb0NsYXNzKCl9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtnZXRTdWJDbGFzcyhcInRpdGxlXCIpfT5cbiAgICAgICAgICAgIHtzdHlsZSA/IHN0eWxlIDogXCJyZWd1bGFyXCJ9XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2dldFN1YkNsYXNzKFwicGFjay1pZFwiKX1cbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlBhY2sgaWQgdXNlZCBhcyBzaG9ydGNvZGUgcHJlZml4XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3BhY2tJZH1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtnZXRTdWJDbGFzcyhcImRldGFpbHNcIil9PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2dldFN1YkNsYXNzKFwiY291bnRcIil9XG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9e2Ake2NvdW50fSBpY29ucyBpbiB0b3RhbGB9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxGaUltYWdlIHNpemU9XCIwLjllbVwiIC8+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17XCJpY29uLXRleHRcIn0+e2NvdW50fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtnZXRTdWJDbGFzcyhcImJ1dHRvbi1jb250YWluZXJcIil9PlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2dldFN1YkNsYXNzKFwiZG93bmxvYWRcIil9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9e2FzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICBzZXRTdGF0ZSh7IHN0YXRlOiBcImRvd25sb2FkaW5nXCIgfSk7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIGF3YWl0IG9uRG93bmxvYWQocGF0aCk7XG4gICAgICAgICAgICAgICAgICBzZXRTdGF0ZSh7IHN0YXRlOiBcImRvbmVcIiB9KTtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZG9uZVwiKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICAgICAgICBzZXRTdGF0ZSh7IHN0YXRlOiBcImVycm9yXCIsIGVycm9yIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkRvd25sb2FkXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPEZpRG93bmxvYWQgLz5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiRG93bmxvYWQgdmlhIEJyb3dzZXJcIlxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB3aW5kb3cub3BlbihnZXRJY29uUGFja0J1bmRsZVVybChwYXRoKSl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxGaUV4dGVybmFsTGluayAvPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICBjYXNlIFwiZG93bmxvYWRpbmdcIjpcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtnZXRTdHlsZUluZm9DbGFzcyhcImRvd25sb2FkaW5nXCIpfT5cbiAgICAgICAgICA8TG9hZGluZyB0eXBlPVwiYnViYmxlc1wiIGNsYXNzTmFtZT1cImxvYWRpbmctaW5kaWNhdG9yXCIgLz5cbiAgICAgICAgICA8ZGl2PkRvd25sb2FkaW5nLi4uPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICBjYXNlIFwiZG9uZVwiOlxuICAgICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXtnZXRTdHlsZUluZm9DbGFzcyhcImRvbmVcIil9PkRvd25sb2FkZWQ8L2Rpdj47XG4gICAgY2FzZSBcImVycm9yXCI6XG4gICAgICBjb25zb2xlLmVycm9yKHN0YXRlLmVycm9yKTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtnZXRTdHlsZUluZm9DbGFzcyhcImVycm9yXCIpfT5cbiAgICAgICAgICBGYWlsZWQgdG8gRG93bmxvYWQ6XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtb2Qtd2FybmluZ1wiPlxuICAgICAgICAgICAge3N0YXRlLmVycm9yIGluc3RhbmNlb2YgRXJyb3JcbiAgICAgICAgICAgICAgPyBzdGF0ZS5lcnJvci5tZXNzYWdlXG4gICAgICAgICAgICAgIDogKHN0YXRlLmVycm9yIGFzIGFueSk/LnRvU3RyaW5nKCl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICBkZWZhdWx0OlxuICAgICAgYXNzZXJ0TmV2ZXIoc3RhdGUpO1xuICB9XG59O1xuIiwgImV4cG9ydCBjb25zdCBFTVBUWV9PQkogPSB7fTtcbmV4cG9ydCBjb25zdCBFTVBUWV9BUlIgPSBbXTtcbmV4cG9ydCBjb25zdCBJU19OT05fRElNRU5TSU9OQUwgPSAvYWNpdHxleCg/OnN8Z3xufHB8JCl8cnBofGdyaWR8b3dzfG1uY3xudHd8aW5lW2NoXXx6b298Xm9yZHxpdGVyYS9pO1xuIiwgImltcG9ydCB7IEVNUFRZX0FSUiB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuXG4vKipcbiAqIEFzc2lnbiBwcm9wZXJ0aWVzIGZyb20gYHByb3BzYCB0byBgb2JqYFxuICogQHRlbXBsYXRlIE8sIFAgVGhlIG9iaiBhbmQgcHJvcHMgdHlwZXNcbiAqIEBwYXJhbSB7T30gb2JqIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIHRvXG4gKiBAcGFyYW0ge1B9IHByb3BzIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIGZyb21cbiAqIEByZXR1cm5zIHtPICYgUH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzc2lnbihvYmosIHByb3BzKSB7XG5cdC8vIEB0cy1pZ25vcmUgV2UgY2hhbmdlIHRoZSB0eXBlIG9mIGBvYmpgIHRvIGJlIGBPICYgUGBcblx0Zm9yIChsZXQgaSBpbiBwcm9wcykgb2JqW2ldID0gcHJvcHNbaV07XG5cdHJldHVybiAvKiogQHR5cGUge08gJiBQfSAqLyAob2JqKTtcbn1cblxuLyoqXG4gKiBSZW1vdmUgYSBjaGlsZCBub2RlIGZyb20gaXRzIHBhcmVudCBpZiBhdHRhY2hlZC4gVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yXG4gKiBJRTExIHdoaWNoIGRvZXNuJ3Qgc3VwcG9ydCBgRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlKClgLiBVc2luZyB0aGlzIGZ1bmN0aW9uXG4gKiBpcyBzbWFsbGVyIHRoYW4gaW5jbHVkaW5nIGEgZGVkaWNhdGVkIHBvbHlmaWxsLlxuICogQHBhcmFtIHtOb2RlfSBub2RlIFRoZSBub2RlIHRvIHJlbW92ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlTm9kZShub2RlKSB7XG5cdGxldCBwYXJlbnROb2RlID0gbm9kZS5wYXJlbnROb2RlO1xuXHRpZiAocGFyZW50Tm9kZSkgcGFyZW50Tm9kZS5yZW1vdmVDaGlsZChub2RlKTtcbn1cblxuZXhwb3J0IGNvbnN0IHNsaWNlID0gRU1QVFlfQVJSLnNsaWNlO1xuIiwgImltcG9ydCB7IF9jYXRjaEVycm9yIH0gZnJvbSAnLi9kaWZmL2NhdGNoLWVycm9yJztcblxuLyoqXG4gKiBUaGUgYG9wdGlvbmAgb2JqZWN0IGNhbiBwb3RlbnRpYWxseSBjb250YWluIGNhbGxiYWNrIGZ1bmN0aW9uc1xuICogdGhhdCBhcmUgY2FsbGVkIGR1cmluZyB2YXJpb3VzIHN0YWdlcyBvZiBvdXIgcmVuZGVyZXIuIFRoaXMgaXMgdGhlXG4gKiBmb3VuZGF0aW9uIG9uIHdoaWNoIGFsbCBvdXIgYWRkb25zIGxpa2UgYHByZWFjdC9kZWJ1Z2AsIGBwcmVhY3QvY29tcGF0YCxcbiAqIGFuZCBgcHJlYWN0L2hvb2tzYCBhcmUgYmFzZWQgb24uIFNlZSB0aGUgYE9wdGlvbnNgIHR5cGUgaW4gYGludGVybmFsLmQudHNgXG4gKiBmb3IgYSBmdWxsIGxpc3Qgb2YgYXZhaWxhYmxlIG9wdGlvbiBob29rcyAobW9zdCBlZGl0b3JzL0lERXMgYWxsb3cgeW91IHRvXG4gKiBjdHJsK2NsaWNrIG9yIGNtZCtjbGljayBvbiBtYWMgdGhlIHR5cGUgZGVmaW5pdGlvbiBiZWxvdykuXG4gKiBAdHlwZSB7aW1wb3J0KCcuL2ludGVybmFsJykuT3B0aW9uc31cbiAqL1xuY29uc3Qgb3B0aW9ucyA9IHtcblx0X2NhdGNoRXJyb3Jcbn07XG5cbmV4cG9ydCBkZWZhdWx0IG9wdGlvbnM7XG4iLCAiaW1wb3J0IHsgc2xpY2UgfSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IG9wdGlvbnMgZnJvbSAnLi9vcHRpb25zJztcblxubGV0IHZub2RlSWQgPSAwO1xuXG4vKipcbiAqIENyZWF0ZSBhbiB2aXJ0dWFsIG5vZGUgKHVzZWQgZm9yIEpTWClcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL2ludGVybmFsJykuVk5vZGVbXCJ0eXBlXCJdfSB0eXBlIFRoZSBub2RlIG5hbWUgb3IgQ29tcG9uZW50XG4gKiBjb25zdHJ1Y3RvciBmb3IgdGhpcyB2aXJ0dWFsIG5vZGVcbiAqIEBwYXJhbSB7b2JqZWN0IHwgbnVsbCB8IHVuZGVmaW5lZH0gW3Byb3BzXSBUaGUgcHJvcGVydGllcyBvZiB0aGUgdmlydHVhbCBub2RlXG4gKiBAcGFyYW0ge0FycmF5PGltcG9ydCgnLicpLkNvbXBvbmVudENoaWxkcmVuPn0gW2NoaWxkcmVuXSBUaGUgY2hpbGRyZW4gb2YgdGhlIHZpcnR1YWwgbm9kZVxuICogQHJldHVybnMge2ltcG9ydCgnLi9pbnRlcm5hbCcpLlZOb2RlfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRWxlbWVudCh0eXBlLCBwcm9wcywgY2hpbGRyZW4pIHtcblx0bGV0IG5vcm1hbGl6ZWRQcm9wcyA9IHt9LFxuXHRcdGtleSxcblx0XHRyZWYsXG5cdFx0aTtcblx0Zm9yIChpIGluIHByb3BzKSB7XG5cdFx0aWYgKGkgPT0gJ2tleScpIGtleSA9IHByb3BzW2ldO1xuXHRcdGVsc2UgaWYgKGkgPT0gJ3JlZicpIHJlZiA9IHByb3BzW2ldO1xuXHRcdGVsc2Ugbm9ybWFsaXplZFByb3BzW2ldID0gcHJvcHNbaV07XG5cdH1cblxuXHRpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDIpIHtcblx0XHRub3JtYWxpemVkUHJvcHMuY2hpbGRyZW4gPVxuXHRcdFx0YXJndW1lbnRzLmxlbmd0aCA+IDMgPyBzbGljZS5jYWxsKGFyZ3VtZW50cywgMikgOiBjaGlsZHJlbjtcblx0fVxuXG5cdC8vIElmIGEgQ29tcG9uZW50IFZOb2RlLCBjaGVjayBmb3IgYW5kIGFwcGx5IGRlZmF1bHRQcm9wc1xuXHQvLyBOb3RlOiB0eXBlIG1heSBiZSB1bmRlZmluZWQgaW4gZGV2ZWxvcG1lbnQsIG11c3QgbmV2ZXIgZXJyb3IgaGVyZS5cblx0aWYgKHR5cGVvZiB0eXBlID09ICdmdW5jdGlvbicgJiYgdHlwZS5kZWZhdWx0UHJvcHMgIT0gbnVsbCkge1xuXHRcdGZvciAoaSBpbiB0eXBlLmRlZmF1bHRQcm9wcykge1xuXHRcdFx0aWYgKG5vcm1hbGl6ZWRQcm9wc1tpXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdG5vcm1hbGl6ZWRQcm9wc1tpXSA9IHR5cGUuZGVmYXVsdFByb3BzW2ldO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBjcmVhdGVWTm9kZSh0eXBlLCBub3JtYWxpemVkUHJvcHMsIGtleSwgcmVmLCBudWxsKTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBWTm9kZSAodXNlZCBpbnRlcm5hbGx5IGJ5IFByZWFjdClcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL2ludGVybmFsJykuVk5vZGVbXCJ0eXBlXCJdfSB0eXBlIFRoZSBub2RlIG5hbWUgb3IgQ29tcG9uZW50XG4gKiBDb25zdHJ1Y3RvciBmb3IgdGhpcyB2aXJ0dWFsIG5vZGVcbiAqIEBwYXJhbSB7b2JqZWN0IHwgc3RyaW5nIHwgbnVtYmVyIHwgbnVsbH0gcHJvcHMgVGhlIHByb3BlcnRpZXMgb2YgdGhpcyB2aXJ0dWFsIG5vZGUuXG4gKiBJZiB0aGlzIHZpcnR1YWwgbm9kZSByZXByZXNlbnRzIGEgdGV4dCBub2RlLCB0aGlzIGlzIHRoZSB0ZXh0IG9mIHRoZSBub2RlIChzdHJpbmcgb3IgbnVtYmVyKS5cbiAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyIHwgbnVsbH0ga2V5IFRoZSBrZXkgZm9yIHRoaXMgdmlydHVhbCBub2RlLCB1c2VkIHdoZW5cbiAqIGRpZmZpbmcgaXQgYWdhaW5zdCBpdHMgY2hpbGRyZW5cbiAqIEBwYXJhbSB7aW1wb3J0KCcuL2ludGVybmFsJykuVk5vZGVbXCJyZWZcIl19IHJlZiBUaGUgcmVmIHByb3BlcnR5IHRoYXQgd2lsbFxuICogcmVjZWl2ZSBhIHJlZmVyZW5jZSB0byBpdHMgY3JlYXRlZCBjaGlsZFxuICogQHJldHVybnMge2ltcG9ydCgnLi9pbnRlcm5hbCcpLlZOb2RlfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVk5vZGUodHlwZSwgcHJvcHMsIGtleSwgcmVmLCBvcmlnaW5hbCkge1xuXHQvLyBWOCBzZWVtcyB0byBiZSBiZXR0ZXIgYXQgZGV0ZWN0aW5nIHR5cGUgc2hhcGVzIGlmIHRoZSBvYmplY3QgaXMgYWxsb2NhdGVkIGZyb20gdGhlIHNhbWUgY2FsbCBzaXRlXG5cdC8vIERvIG5vdCBpbmxpbmUgaW50byBjcmVhdGVFbGVtZW50IGFuZCBjb2VyY2VUb1ZOb2RlIVxuXHRjb25zdCB2bm9kZSA9IHtcblx0XHR0eXBlLFxuXHRcdHByb3BzLFxuXHRcdGtleSxcblx0XHRyZWYsXG5cdFx0X2NoaWxkcmVuOiBudWxsLFxuXHRcdF9wYXJlbnQ6IG51bGwsXG5cdFx0X2RlcHRoOiAwLFxuXHRcdF9kb206IG51bGwsXG5cdFx0Ly8gX25leHREb20gbXVzdCBiZSBpbml0aWFsaXplZCB0byB1bmRlZmluZWQgYi9jIGl0IHdpbGwgZXZlbnR1YWxseVxuXHRcdC8vIGJlIHNldCB0byBkb20ubmV4dFNpYmxpbmcgd2hpY2ggY2FuIHJldHVybiBgbnVsbGAgYW5kIGl0IGlzIGltcG9ydGFudFxuXHRcdC8vIHRvIGJlIGFibGUgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBhbiB1bmluaXRpYWxpemVkIF9uZXh0RG9tIGFuZFxuXHRcdC8vIGEgX25leHREb20gdGhhdCBoYXMgYmVlbiBzZXQgdG8gYG51bGxgXG5cdFx0X25leHREb206IHVuZGVmaW5lZCxcblx0XHRfY29tcG9uZW50OiBudWxsLFxuXHRcdF9oeWRyYXRpbmc6IG51bGwsXG5cdFx0Y29uc3RydWN0b3I6IHVuZGVmaW5lZCxcblx0XHRfb3JpZ2luYWw6IG9yaWdpbmFsID09IG51bGwgPyArK3Zub2RlSWQgOiBvcmlnaW5hbFxuXHR9O1xuXG5cdC8vIE9ubHkgaW52b2tlIHRoZSB2bm9kZSBob29rIGlmIHRoaXMgd2FzICpub3QqIGEgZGlyZWN0IGNvcHk6XG5cdGlmIChvcmlnaW5hbCA9PSBudWxsICYmIG9wdGlvbnMudm5vZGUgIT0gbnVsbCkgb3B0aW9ucy52bm9kZSh2bm9kZSk7XG5cblx0cmV0dXJuIHZub2RlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVmKCkge1xuXHRyZXR1cm4geyBjdXJyZW50OiBudWxsIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBGcmFnbWVudChwcm9wcykge1xuXHRyZXR1cm4gcHJvcHMuY2hpbGRyZW47XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYSB0aGUgYXJndW1lbnQgaXMgYSB2YWxpZCBQcmVhY3QgVk5vZGUuXG4gKiBAcGFyYW0geyp9IHZub2RlXG4gKiBAcmV0dXJucyB7dm5vZGUgaXMgaW1wb3J0KCcuL2ludGVybmFsJykuVk5vZGV9XG4gKi9cbmV4cG9ydCBjb25zdCBpc1ZhbGlkRWxlbWVudCA9IHZub2RlID0+XG5cdHZub2RlICE9IG51bGwgJiYgdm5vZGUuY29uc3RydWN0b3IgPT09IHVuZGVmaW5lZDtcbiIsICJpbXBvcnQgeyBhc3NpZ24gfSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IHsgZGlmZiwgY29tbWl0Um9vdCB9IGZyb20gJy4vZGlmZi9pbmRleCc7XG5pbXBvcnQgb3B0aW9ucyBmcm9tICcuL29wdGlvbnMnO1xuaW1wb3J0IHsgRnJhZ21lbnQgfSBmcm9tICcuL2NyZWF0ZS1lbGVtZW50JztcblxuLyoqXG4gKiBCYXNlIENvbXBvbmVudCBjbGFzcy4gUHJvdmlkZXMgYHNldFN0YXRlKClgIGFuZCBgZm9yY2VVcGRhdGUoKWAsIHdoaWNoXG4gKiB0cmlnZ2VyIHJlbmRlcmluZ1xuICogQHBhcmFtIHtvYmplY3R9IHByb3BzIFRoZSBpbml0aWFsIGNvbXBvbmVudCBwcm9wc1xuICogQHBhcmFtIHtvYmplY3R9IGNvbnRleHQgVGhlIGluaXRpYWwgY29udGV4dCBmcm9tIHBhcmVudCBjb21wb25lbnRzJ1xuICogZ2V0Q2hpbGRDb250ZXh0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBDb21wb25lbnQocHJvcHMsIGNvbnRleHQpIHtcblx0dGhpcy5wcm9wcyA9IHByb3BzO1xuXHR0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xufVxuXG4vKipcbiAqIFVwZGF0ZSBjb21wb25lbnQgc3RhdGUgYW5kIHNjaGVkdWxlIGEgcmUtcmVuZGVyLlxuICogQHRoaXMge2ltcG9ydCgnLi9pbnRlcm5hbCcpLkNvbXBvbmVudH1cbiAqIEBwYXJhbSB7b2JqZWN0IHwgKChzOiBvYmplY3QsIHA6IG9iamVjdCkgPT4gb2JqZWN0KX0gdXBkYXRlIEEgaGFzaCBvZiBzdGF0ZVxuICogcHJvcGVydGllcyB0byB1cGRhdGUgd2l0aCBuZXcgdmFsdWVzIG9yIGEgZnVuY3Rpb24gdGhhdCBnaXZlbiB0aGUgY3VycmVudFxuICogc3RhdGUgYW5kIHByb3BzIHJldHVybnMgYSBuZXcgcGFydGlhbCBzdGF0ZVxuICogQHBhcmFtIHsoKSA9PiB2b2lkfSBbY2FsbGJhY2tdIEEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIG9uY2UgY29tcG9uZW50IHN0YXRlIGlzXG4gKiB1cGRhdGVkXG4gKi9cbkNvbXBvbmVudC5wcm90b3R5cGUuc2V0U3RhdGUgPSBmdW5jdGlvbih1cGRhdGUsIGNhbGxiYWNrKSB7XG5cdC8vIG9ubHkgY2xvbmUgc3RhdGUgd2hlbiBjb3B5aW5nIHRvIG5leHRTdGF0ZSB0aGUgZmlyc3QgdGltZS5cblx0bGV0IHM7XG5cdGlmICh0aGlzLl9uZXh0U3RhdGUgIT0gbnVsbCAmJiB0aGlzLl9uZXh0U3RhdGUgIT09IHRoaXMuc3RhdGUpIHtcblx0XHRzID0gdGhpcy5fbmV4dFN0YXRlO1xuXHR9IGVsc2Uge1xuXHRcdHMgPSB0aGlzLl9uZXh0U3RhdGUgPSBhc3NpZ24oe30sIHRoaXMuc3RhdGUpO1xuXHR9XG5cblx0aWYgKHR5cGVvZiB1cGRhdGUgPT0gJ2Z1bmN0aW9uJykge1xuXHRcdC8vIFNvbWUgbGlicmFyaWVzIGxpa2UgYGltbWVyYCBtYXJrIHRoZSBjdXJyZW50IHN0YXRlIGFzIHJlYWRvbmx5LFxuXHRcdC8vIHByZXZlbnRpbmcgdXMgZnJvbSBtdXRhdGluZyBpdCwgc28gd2UgbmVlZCB0byBjbG9uZSBpdC4gU2VlICMyNzE2XG5cdFx0dXBkYXRlID0gdXBkYXRlKGFzc2lnbih7fSwgcyksIHRoaXMucHJvcHMpO1xuXHR9XG5cblx0aWYgKHVwZGF0ZSkge1xuXHRcdGFzc2lnbihzLCB1cGRhdGUpO1xuXHR9XG5cblx0Ly8gU2tpcCB1cGRhdGUgaWYgdXBkYXRlciBmdW5jdGlvbiByZXR1cm5lZCBudWxsXG5cdGlmICh1cGRhdGUgPT0gbnVsbCkgcmV0dXJuO1xuXG5cdGlmICh0aGlzLl92bm9kZSkge1xuXHRcdGlmIChjYWxsYmFjaykgdGhpcy5fcmVuZGVyQ2FsbGJhY2tzLnB1c2goY2FsbGJhY2spO1xuXHRcdGVucXVldWVSZW5kZXIodGhpcyk7XG5cdH1cbn07XG5cbi8qKlxuICogSW1tZWRpYXRlbHkgcGVyZm9ybSBhIHN5bmNocm9ub3VzIHJlLXJlbmRlciBvZiB0aGUgY29tcG9uZW50XG4gKiBAdGhpcyB7aW1wb3J0KCcuL2ludGVybmFsJykuQ29tcG9uZW50fVxuICogQHBhcmFtIHsoKSA9PiB2b2lkfSBbY2FsbGJhY2tdIEEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGFmdGVyIGNvbXBvbmVudCBpc1xuICogcmUtcmVuZGVyZWRcbiAqL1xuQ29tcG9uZW50LnByb3RvdHlwZS5mb3JjZVVwZGF0ZSA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG5cdGlmICh0aGlzLl92bm9kZSkge1xuXHRcdC8vIFNldCByZW5kZXIgbW9kZSBzbyB0aGF0IHdlIGNhbiBkaWZmZXJlbnRpYXRlIHdoZXJlIHRoZSByZW5kZXIgcmVxdWVzdFxuXHRcdC8vIGlzIGNvbWluZyBmcm9tLiBXZSBuZWVkIHRoaXMgYmVjYXVzZSBmb3JjZVVwZGF0ZSBzaG91bGQgbmV2ZXIgY2FsbFxuXHRcdC8vIHNob3VsZENvbXBvbmVudFVwZGF0ZVxuXHRcdHRoaXMuX2ZvcmNlID0gdHJ1ZTtcblx0XHRpZiAoY2FsbGJhY2spIHRoaXMuX3JlbmRlckNhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTtcblx0XHRlbnF1ZXVlUmVuZGVyKHRoaXMpO1xuXHR9XG59O1xuXG4vKipcbiAqIEFjY2VwdHMgYHByb3BzYCBhbmQgYHN0YXRlYCwgYW5kIHJldHVybnMgYSBuZXcgVmlydHVhbCBET00gdHJlZSB0byBidWlsZC5cbiAqIFZpcnR1YWwgRE9NIGlzIGdlbmVyYWxseSBjb25zdHJ1Y3RlZCB2aWEgW0pTWF0oaHR0cDovL2phc29uZm9ybWF0LmNvbS93dGYtaXMtanN4KS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wcyBQcm9wcyAoZWc6IEpTWCBhdHRyaWJ1dGVzKSByZWNlaXZlZCBmcm9tIHBhcmVudFxuICogZWxlbWVudC9jb21wb25lbnRcbiAqIEBwYXJhbSB7b2JqZWN0fSBzdGF0ZSBUaGUgY29tcG9uZW50J3MgY3VycmVudCBzdGF0ZVxuICogQHBhcmFtIHtvYmplY3R9IGNvbnRleHQgQ29udGV4dCBvYmplY3QsIGFzIHJldHVybmVkIGJ5IHRoZSBuZWFyZXN0XG4gKiBhbmNlc3RvcidzIGBnZXRDaGlsZENvbnRleHQoKWBcbiAqIEByZXR1cm5zIHtpbXBvcnQoJy4vaW5kZXgnKS5Db21wb25lbnRDaGlsZHJlbiB8IHZvaWR9XG4gKi9cbkNvbXBvbmVudC5wcm90b3R5cGUucmVuZGVyID0gRnJhZ21lbnQ7XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5WTm9kZX0gdm5vZGVcbiAqIEBwYXJhbSB7bnVtYmVyIHwgbnVsbH0gW2NoaWxkSW5kZXhdXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREb21TaWJsaW5nKHZub2RlLCBjaGlsZEluZGV4KSB7XG5cdGlmIChjaGlsZEluZGV4ID09IG51bGwpIHtcblx0XHQvLyBVc2UgY2hpbGRJbmRleD09bnVsbCBhcyBhIHNpZ25hbCB0byByZXN1bWUgdGhlIHNlYXJjaCBmcm9tIHRoZSB2bm9kZSdzIHNpYmxpbmdcblx0XHRyZXR1cm4gdm5vZGUuX3BhcmVudFxuXHRcdFx0PyBnZXREb21TaWJsaW5nKHZub2RlLl9wYXJlbnQsIHZub2RlLl9wYXJlbnQuX2NoaWxkcmVuLmluZGV4T2Yodm5vZGUpICsgMSlcblx0XHRcdDogbnVsbDtcblx0fVxuXG5cdGxldCBzaWJsaW5nO1xuXHRmb3IgKDsgY2hpbGRJbmRleCA8IHZub2RlLl9jaGlsZHJlbi5sZW5ndGg7IGNoaWxkSW5kZXgrKykge1xuXHRcdHNpYmxpbmcgPSB2bm9kZS5fY2hpbGRyZW5bY2hpbGRJbmRleF07XG5cblx0XHRpZiAoc2libGluZyAhPSBudWxsICYmIHNpYmxpbmcuX2RvbSAhPSBudWxsKSB7XG5cdFx0XHQvLyBTaW5jZSB1cGRhdGVQYXJlbnREb21Qb2ludGVycyBrZWVwcyBfZG9tIHBvaW50ZXIgY29ycmVjdCxcblx0XHRcdC8vIHdlIGNhbiByZWx5IG9uIF9kb20gdG8gdGVsbCB1cyBpZiB0aGlzIHN1YnRyZWUgY29udGFpbnMgYVxuXHRcdFx0Ly8gcmVuZGVyZWQgRE9NIG5vZGUsIGFuZCB3aGF0IHRoZSBmaXJzdCByZW5kZXJlZCBET00gbm9kZSBpc1xuXHRcdFx0cmV0dXJuIHNpYmxpbmcuX2RvbTtcblx0XHR9XG5cdH1cblxuXHQvLyBJZiB3ZSBnZXQgaGVyZSwgd2UgaGF2ZSBub3QgZm91bmQgYSBET00gbm9kZSBpbiB0aGlzIHZub2RlJ3MgY2hpbGRyZW4uXG5cdC8vIFdlIG11c3QgcmVzdW1lIGZyb20gdGhpcyB2bm9kZSdzIHNpYmxpbmcgKGluIGl0J3MgcGFyZW50IF9jaGlsZHJlbiBhcnJheSlcblx0Ly8gT25seSBjbGltYiB1cCBhbmQgc2VhcmNoIHRoZSBwYXJlbnQgaWYgd2UgYXJlbid0IHNlYXJjaGluZyB0aHJvdWdoIGEgRE9NXG5cdC8vIFZOb2RlIChtZWFuaW5nIHdlIHJlYWNoZWQgdGhlIERPTSBwYXJlbnQgb2YgdGhlIG9yaWdpbmFsIHZub2RlIHRoYXQgYmVnYW5cblx0Ly8gdGhlIHNlYXJjaClcblx0cmV0dXJuIHR5cGVvZiB2bm9kZS50eXBlID09ICdmdW5jdGlvbicgPyBnZXREb21TaWJsaW5nKHZub2RlKSA6IG51bGw7XG59XG5cbi8qKlxuICogVHJpZ2dlciBpbi1wbGFjZSByZS1yZW5kZXJpbmcgb2YgYSBjb21wb25lbnQuXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbnRlcm5hbCcpLkNvbXBvbmVudH0gY29tcG9uZW50IFRoZSBjb21wb25lbnQgdG8gcmVyZW5kZXJcbiAqL1xuZnVuY3Rpb24gcmVuZGVyQ29tcG9uZW50KGNvbXBvbmVudCkge1xuXHRsZXQgdm5vZGUgPSBjb21wb25lbnQuX3Zub2RlLFxuXHRcdG9sZERvbSA9IHZub2RlLl9kb20sXG5cdFx0cGFyZW50RG9tID0gY29tcG9uZW50Ll9wYXJlbnREb207XG5cblx0aWYgKHBhcmVudERvbSkge1xuXHRcdGxldCBjb21taXRRdWV1ZSA9IFtdO1xuXHRcdGNvbnN0IG9sZFZOb2RlID0gYXNzaWduKHt9LCB2bm9kZSk7XG5cdFx0b2xkVk5vZGUuX29yaWdpbmFsID0gdm5vZGUuX29yaWdpbmFsICsgMTtcblxuXHRcdGRpZmYoXG5cdFx0XHRwYXJlbnREb20sXG5cdFx0XHR2bm9kZSxcblx0XHRcdG9sZFZOb2RlLFxuXHRcdFx0Y29tcG9uZW50Ll9nbG9iYWxDb250ZXh0LFxuXHRcdFx0cGFyZW50RG9tLm93bmVyU1ZHRWxlbWVudCAhPT0gdW5kZWZpbmVkLFxuXHRcdFx0dm5vZGUuX2h5ZHJhdGluZyAhPSBudWxsID8gW29sZERvbV0gOiBudWxsLFxuXHRcdFx0Y29tbWl0UXVldWUsXG5cdFx0XHRvbGREb20gPT0gbnVsbCA/IGdldERvbVNpYmxpbmcodm5vZGUpIDogb2xkRG9tLFxuXHRcdFx0dm5vZGUuX2h5ZHJhdGluZ1xuXHRcdCk7XG5cdFx0Y29tbWl0Um9vdChjb21taXRRdWV1ZSwgdm5vZGUpO1xuXG5cdFx0aWYgKHZub2RlLl9kb20gIT0gb2xkRG9tKSB7XG5cdFx0XHR1cGRhdGVQYXJlbnREb21Qb2ludGVycyh2bm9kZSk7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5WTm9kZX0gdm5vZGVcbiAqL1xuZnVuY3Rpb24gdXBkYXRlUGFyZW50RG9tUG9pbnRlcnModm5vZGUpIHtcblx0aWYgKCh2bm9kZSA9IHZub2RlLl9wYXJlbnQpICE9IG51bGwgJiYgdm5vZGUuX2NvbXBvbmVudCAhPSBudWxsKSB7XG5cdFx0dm5vZGUuX2RvbSA9IHZub2RlLl9jb21wb25lbnQuYmFzZSA9IG51bGw7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB2bm9kZS5fY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcblx0XHRcdGxldCBjaGlsZCA9IHZub2RlLl9jaGlsZHJlbltpXTtcblx0XHRcdGlmIChjaGlsZCAhPSBudWxsICYmIGNoaWxkLl9kb20gIT0gbnVsbCkge1xuXHRcdFx0XHR2bm9kZS5fZG9tID0gdm5vZGUuX2NvbXBvbmVudC5iYXNlID0gY2hpbGQuX2RvbTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHVwZGF0ZVBhcmVudERvbVBvaW50ZXJzKHZub2RlKTtcblx0fVxufVxuXG4vKipcbiAqIFRoZSByZW5kZXIgcXVldWVcbiAqIEB0eXBlIHtBcnJheTxpbXBvcnQoJy4vaW50ZXJuYWwnKS5Db21wb25lbnQ+fVxuICovXG5sZXQgcmVyZW5kZXJRdWV1ZSA9IFtdO1xuXG4vKipcbiAqIEFzeW5jaHJvbm91c2x5IHNjaGVkdWxlIGEgY2FsbGJhY2tcbiAqIEB0eXBlIHsoY2I6ICgpID0+IHZvaWQpID0+IHZvaWR9XG4gKi9cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4vLyBOb3RlIHRoZSBmb2xsb3dpbmcgbGluZSBpc24ndCB0cmVlLXNoYWtlbiBieSByb2xsdXAgY3V6IG9mIHJvbGx1cC9yb2xsdXAjMjU2NlxuY29uc3QgZGVmZXIgPVxuXHR0eXBlb2YgUHJvbWlzZSA9PSAnZnVuY3Rpb24nXG5cdFx0PyBQcm9taXNlLnByb3RvdHlwZS50aGVuLmJpbmQoUHJvbWlzZS5yZXNvbHZlKCkpXG5cdFx0OiBzZXRUaW1lb3V0O1xuXG4vKlxuICogVGhlIHZhbHVlIG9mIGBDb21wb25lbnQuZGVib3VuY2VgIG11c3QgYXN5bmNocm9ub3VzbHkgaW52b2tlIHRoZSBwYXNzZWQgaW4gY2FsbGJhY2suIEl0IGlzXG4gKiBpbXBvcnRhbnQgdGhhdCBjb250cmlidXRvcnMgdG8gUHJlYWN0IGNhbiBjb25zaXN0ZW50bHkgcmVhc29uIGFib3V0IHdoYXQgY2FsbHMgdG8gYHNldFN0YXRlYCwgZXRjLlxuICogZG8sIGFuZCB3aGVuIHRoZWlyIGVmZmVjdHMgd2lsbCBiZSBhcHBsaWVkLiBTZWUgdGhlIGxpbmtzIGJlbG93IGZvciBzb21lIGZ1cnRoZXIgcmVhZGluZyBvbiBkZXNpZ25pbmdcbiAqIGFzeW5jaHJvbm91cyBBUElzLlxuICogKiBbRGVzaWduaW5nIEFQSXMgZm9yIEFzeW5jaHJvbnldKGh0dHBzOi8vYmxvZy5penMubWUvMjAxMy8wOC9kZXNpZ25pbmctYXBpcy1mb3ItYXN5bmNocm9ueSlcbiAqICogW0NhbGxiYWNrcyBzeW5jaHJvbm91cyBhbmQgYXN5bmNocm9ub3VzXShodHRwczovL2Jsb2cub21ldGVyLmNvbS8yMDExLzA3LzI0L2NhbGxiYWNrcy1zeW5jaHJvbm91cy1hbmQtYXN5bmNocm9ub3VzLylcbiAqL1xuXG5sZXQgcHJldkRlYm91bmNlO1xuXG4vKipcbiAqIEVucXVldWUgYSByZXJlbmRlciBvZiBhIGNvbXBvbmVudFxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5Db21wb25lbnR9IGMgVGhlIGNvbXBvbmVudCB0byByZXJlbmRlclxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5xdWV1ZVJlbmRlcihjKSB7XG5cdGlmIChcblx0XHQoIWMuX2RpcnR5ICYmXG5cdFx0XHQoYy5fZGlydHkgPSB0cnVlKSAmJlxuXHRcdFx0cmVyZW5kZXJRdWV1ZS5wdXNoKGMpICYmXG5cdFx0XHQhcHJvY2Vzcy5fcmVyZW5kZXJDb3VudCsrKSB8fFxuXHRcdHByZXZEZWJvdW5jZSAhPT0gb3B0aW9ucy5kZWJvdW5jZVJlbmRlcmluZ1xuXHQpIHtcblx0XHRwcmV2RGVib3VuY2UgPSBvcHRpb25zLmRlYm91bmNlUmVuZGVyaW5nO1xuXHRcdChwcmV2RGVib3VuY2UgfHwgZGVmZXIpKHByb2Nlc3MpO1xuXHR9XG59XG5cbi8qKiBGbHVzaCB0aGUgcmVuZGVyIHF1ZXVlIGJ5IHJlcmVuZGVyaW5nIGFsbCBxdWV1ZWQgY29tcG9uZW50cyAqL1xuZnVuY3Rpb24gcHJvY2VzcygpIHtcblx0bGV0IHF1ZXVlO1xuXHR3aGlsZSAoKHByb2Nlc3MuX3JlcmVuZGVyQ291bnQgPSByZXJlbmRlclF1ZXVlLmxlbmd0aCkpIHtcblx0XHRxdWV1ZSA9IHJlcmVuZGVyUXVldWUuc29ydCgoYSwgYikgPT4gYS5fdm5vZGUuX2RlcHRoIC0gYi5fdm5vZGUuX2RlcHRoKTtcblx0XHRyZXJlbmRlclF1ZXVlID0gW107XG5cdFx0Ly8gRG9uJ3QgdXBkYXRlIGByZW5kZXJDb3VudGAgeWV0LiBLZWVwIGl0cyB2YWx1ZSBub24temVybyB0byBwcmV2ZW50IHVubmVjZXNzYXJ5XG5cdFx0Ly8gcHJvY2VzcygpIGNhbGxzIGZyb20gZ2V0dGluZyBzY2hlZHVsZWQgd2hpbGUgYHF1ZXVlYCBpcyBzdGlsbCBiZWluZyBjb25zdW1lZC5cblx0XHRxdWV1ZS5zb21lKGMgPT4ge1xuXHRcdFx0aWYgKGMuX2RpcnR5KSByZW5kZXJDb21wb25lbnQoYyk7XG5cdFx0fSk7XG5cdH1cbn1cbnByb2Nlc3MuX3JlcmVuZGVyQ291bnQgPSAwO1xuIiwgImltcG9ydCB7IGVucXVldWVSZW5kZXIgfSBmcm9tICcuL2NvbXBvbmVudCc7XG5cbmV4cG9ydCBsZXQgaSA9IDA7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb250ZXh0KGRlZmF1bHRWYWx1ZSwgY29udGV4dElkKSB7XG5cdGNvbnRleHRJZCA9ICdfX2NDJyArIGkrKztcblxuXHRjb25zdCBjb250ZXh0ID0ge1xuXHRcdF9pZDogY29udGV4dElkLFxuXHRcdF9kZWZhdWx0VmFsdWU6IGRlZmF1bHRWYWx1ZSxcblx0XHQvKiogQHR5cGUge2ltcG9ydCgnLi9pbnRlcm5hbCcpLkZ1bmN0aW9uQ29tcG9uZW50fSAqL1xuXHRcdENvbnN1bWVyKHByb3BzLCBjb250ZXh0VmFsdWUpIHtcblx0XHRcdC8vIHJldHVybiBwcm9wcy5jaGlsZHJlbihcblx0XHRcdC8vIFx0Y29udGV4dFtjb250ZXh0SWRdID8gY29udGV4dFtjb250ZXh0SWRdLnByb3BzLnZhbHVlIDogZGVmYXVsdFZhbHVlXG5cdFx0XHQvLyApO1xuXHRcdFx0cmV0dXJuIHByb3BzLmNoaWxkcmVuKGNvbnRleHRWYWx1ZSk7XG5cdFx0fSxcblx0XHQvKiogQHR5cGUge2ltcG9ydCgnLi9pbnRlcm5hbCcpLkZ1bmN0aW9uQ29tcG9uZW50fSAqL1xuXHRcdFByb3ZpZGVyKHByb3BzKSB7XG5cdFx0XHRpZiAoIXRoaXMuZ2V0Q2hpbGRDb250ZXh0KSB7XG5cdFx0XHRcdGxldCBzdWJzID0gW107XG5cdFx0XHRcdGxldCBjdHggPSB7fTtcblx0XHRcdFx0Y3R4W2NvbnRleHRJZF0gPSB0aGlzO1xuXG5cdFx0XHRcdHRoaXMuZ2V0Q2hpbGRDb250ZXh0ID0gKCkgPT4gY3R4O1xuXG5cdFx0XHRcdHRoaXMuc2hvdWxkQ29tcG9uZW50VXBkYXRlID0gZnVuY3Rpb24oX3Byb3BzKSB7XG5cdFx0XHRcdFx0aWYgKHRoaXMucHJvcHMudmFsdWUgIT09IF9wcm9wcy52YWx1ZSkge1xuXHRcdFx0XHRcdFx0Ly8gSSB0aGluayB0aGUgZm9yY2VkIHZhbHVlIHByb3BhZ2F0aW9uIGhlcmUgd2FzIG9ubHkgbmVlZGVkIHdoZW4gYG9wdGlvbnMuZGVib3VuY2VSZW5kZXJpbmdgIHdhcyBiZWluZyBieXBhc3NlZDpcblx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wcmVhY3Rqcy9wcmVhY3QvY29tbWl0LzRkMzM5ZmI4MDNiZWEwOWU5ZjE5OGFiZjM4Y2ExYmY4ZWE0Yjc3NzEjZGlmZi01NDY4MmNlMzgwOTM1YTcxN2U0MWI4YmZjNTQ3MzdmNlIzNThcblx0XHRcdFx0XHRcdC8vIEluIHRob3NlIGNhc2VzIHRob3VnaCwgZXZlbiB3aXRoIHRoZSB2YWx1ZSBjb3JyZWN0ZWQsIHdlJ3JlIGRvdWJsZS1yZW5kZXJpbmcgYWxsIG5vZGVzLlxuXHRcdFx0XHRcdFx0Ly8gSXQgbWlnaHQgYmUgYmV0dGVyIHRvIGp1c3QgdGVsbCBmb2xrcyBub3QgdG8gdXNlIGZvcmNlLXN5bmMgbW9kZS5cblx0XHRcdFx0XHRcdC8vIEN1cnJlbnRseSwgdXNpbmcgYHVzZUNvbnRleHQoKWAgaW4gYSBjbGFzcyBjb21wb25lbnQgd2lsbCBvdmVyd3JpdGUgaXRzIGB0aGlzLmNvbnRleHRgIHZhbHVlLlxuXHRcdFx0XHRcdFx0Ly8gc3Vicy5zb21lKGMgPT4ge1xuXHRcdFx0XHRcdFx0Ly8gXHRjLmNvbnRleHQgPSBfcHJvcHMudmFsdWU7XG5cdFx0XHRcdFx0XHQvLyBcdGVucXVldWVSZW5kZXIoYyk7XG5cdFx0XHRcdFx0XHQvLyB9KTtcblxuXHRcdFx0XHRcdFx0Ly8gc3Vicy5zb21lKGMgPT4ge1xuXHRcdFx0XHRcdFx0Ly8gXHRjLmNvbnRleHRbY29udGV4dElkXSA9IF9wcm9wcy52YWx1ZTtcblx0XHRcdFx0XHRcdC8vIFx0ZW5xdWV1ZVJlbmRlcihjKTtcblx0XHRcdFx0XHRcdC8vIH0pO1xuXHRcdFx0XHRcdFx0c3Vicy5zb21lKGVucXVldWVSZW5kZXIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblxuXHRcdFx0XHR0aGlzLnN1YiA9IGMgPT4ge1xuXHRcdFx0XHRcdHN1YnMucHVzaChjKTtcblx0XHRcdFx0XHRsZXQgb2xkID0gYy5jb21wb25lbnRXaWxsVW5tb3VudDtcblx0XHRcdFx0XHRjLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gKCkgPT4ge1xuXHRcdFx0XHRcdFx0c3Vicy5zcGxpY2Uoc3Vicy5pbmRleE9mKGMpLCAxKTtcblx0XHRcdFx0XHRcdGlmIChvbGQpIG9sZC5jYWxsKGMpO1xuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBwcm9wcy5jaGlsZHJlbjtcblx0XHR9XG5cdH07XG5cblx0Ly8gRGV2dG9vbHMgbmVlZHMgYWNjZXNzIHRvIHRoZSBjb250ZXh0IG9iamVjdCB3aGVuIGl0XG5cdC8vIGVuY291bnRlcnMgYSBQcm92aWRlci4gVGhpcyBpcyBuZWNlc3NhcnkgdG8gc3VwcG9ydFxuXHQvLyBzZXR0aW5nIGBkaXNwbGF5TmFtZWAgb24gdGhlIGNvbnRleHQgb2JqZWN0IGluc3RlYWRcblx0Ly8gb2Ygb24gdGhlIGNvbXBvbmVudCBpdHNlbGYuIFNlZTpcblx0Ly8gaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL2NvbnRleHQuaHRtbCNjb250ZXh0ZGlzcGxheW5hbWVcblxuXHRyZXR1cm4gKGNvbnRleHQuUHJvdmlkZXIuX2NvbnRleHRSZWYgPSBjb250ZXh0LkNvbnN1bWVyLmNvbnRleHRUeXBlID0gY29udGV4dCk7XG59XG4iLCAiaW1wb3J0IHsgZGlmZiwgdW5tb3VudCwgYXBwbHlSZWYgfSBmcm9tICcuL2luZGV4JztcbmltcG9ydCB7IGNyZWF0ZVZOb2RlLCBGcmFnbWVudCB9IGZyb20gJy4uL2NyZWF0ZS1lbGVtZW50JztcbmltcG9ydCB7IEVNUFRZX09CSiwgRU1QVFlfQVJSIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IGdldERvbVNpYmxpbmcgfSBmcm9tICcuLi9jb21wb25lbnQnO1xuXG4vKipcbiAqIERpZmYgdGhlIGNoaWxkcmVuIG9mIGEgdmlydHVhbCBub2RlXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi4vaW50ZXJuYWwnKS5QcmVhY3RFbGVtZW50fSBwYXJlbnREb20gVGhlIERPTSBlbGVtZW50IHdob3NlXG4gKiBjaGlsZHJlbiBhcmUgYmVpbmcgZGlmZmVkXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi4vaW50ZXJuYWwnKS5Db21wb25lbnRDaGlsZHJlbltdfSByZW5kZXJSZXN1bHRcbiAqIEBwYXJhbSB7aW1wb3J0KCcuLi9pbnRlcm5hbCcpLlZOb2RlfSBuZXdQYXJlbnRWTm9kZSBUaGUgbmV3IHZpcnR1YWxcbiAqIG5vZGUgd2hvc2UgY2hpbGRyZW4gc2hvdWxkIGJlIGRpZmYnZWQgYWdhaW5zdCBvbGRQYXJlbnRWTm9kZVxuICogQHBhcmFtIHtpbXBvcnQoJy4uL2ludGVybmFsJykuVk5vZGV9IG9sZFBhcmVudFZOb2RlIFRoZSBvbGQgdmlydHVhbFxuICogbm9kZSB3aG9zZSBjaGlsZHJlbiBzaG91bGQgYmUgZGlmZidlZCBhZ2FpbnN0IG5ld1BhcmVudFZOb2RlXG4gKiBAcGFyYW0ge29iamVjdH0gZ2xvYmFsQ29udGV4dCBUaGUgY3VycmVudCBjb250ZXh0IG9iamVjdCAtIG1vZGlmaWVkIGJ5IGdldENoaWxkQ29udGV4dFxuICogQHBhcmFtIHtib29sZWFufSBpc1N2ZyBXaGV0aGVyIG9yIG5vdCB0aGlzIERPTSBub2RlIGlzIGFuIFNWRyBub2RlXG4gKiBAcGFyYW0ge0FycmF5PGltcG9ydCgnLi4vaW50ZXJuYWwnKS5QcmVhY3RFbGVtZW50Pn0gZXhjZXNzRG9tQ2hpbGRyZW5cbiAqIEBwYXJhbSB7QXJyYXk8aW1wb3J0KCcuLi9pbnRlcm5hbCcpLkNvbXBvbmVudD59IGNvbW1pdFF1ZXVlIExpc3Qgb2YgY29tcG9uZW50c1xuICogd2hpY2ggaGF2ZSBjYWxsYmFja3MgdG8gaW52b2tlIGluIGNvbW1pdFJvb3RcbiAqIEBwYXJhbSB7aW1wb3J0KCcuLi9pbnRlcm5hbCcpLlByZWFjdEVsZW1lbnR9IG9sZERvbSBUaGUgY3VycmVudCBhdHRhY2hlZCBET01cbiAqIGVsZW1lbnQgYW55IG5ldyBkb20gZWxlbWVudHMgc2hvdWxkIGJlIHBsYWNlZCBhcm91bmQuIExpa2VseSBgbnVsbGAgb24gZmlyc3RcbiAqIHJlbmRlciAoZXhjZXB0IHdoZW4gaHlkcmF0aW5nKS4gQ2FuIGJlIGEgc2libGluZyBET00gZWxlbWVudCB3aGVuIGRpZmZpbmdcbiAqIEZyYWdtZW50cyB0aGF0IGhhdmUgc2libGluZ3MuIEluIG1vc3QgY2FzZXMsIGl0IHN0YXJ0cyBvdXQgYXMgYG9sZENoaWxkcmVuWzBdLl9kb21gLlxuICogQHBhcmFtIHtib29sZWFufSBpc0h5ZHJhdGluZyBXaGV0aGVyIG9yIG5vdCB3ZSBhcmUgaW4gaHlkcmF0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaWZmQ2hpbGRyZW4oXG5cdHBhcmVudERvbSxcblx0cmVuZGVyUmVzdWx0LFxuXHRuZXdQYXJlbnRWTm9kZSxcblx0b2xkUGFyZW50Vk5vZGUsXG5cdGdsb2JhbENvbnRleHQsXG5cdGlzU3ZnLFxuXHRleGNlc3NEb21DaGlsZHJlbixcblx0Y29tbWl0UXVldWUsXG5cdG9sZERvbSxcblx0aXNIeWRyYXRpbmdcbikge1xuXHRsZXQgaSwgaiwgb2xkVk5vZGUsIGNoaWxkVk5vZGUsIG5ld0RvbSwgZmlyc3RDaGlsZERvbSwgcmVmcztcblxuXHQvLyBUaGlzIGlzIGEgY29tcHJlc3Npb24gb2Ygb2xkUGFyZW50Vk5vZGUhPW51bGwgJiYgb2xkUGFyZW50Vk5vZGUgIT0gRU1QVFlfT0JKICYmIG9sZFBhcmVudFZOb2RlLl9jaGlsZHJlbiB8fCBFTVBUWV9BUlJcblx0Ly8gYXMgRU1QVFlfT0JKLl9jaGlsZHJlbiBzaG91bGQgYmUgYHVuZGVmaW5lZGAuXG5cdGxldCBvbGRDaGlsZHJlbiA9IChvbGRQYXJlbnRWTm9kZSAmJiBvbGRQYXJlbnRWTm9kZS5fY2hpbGRyZW4pIHx8IEVNUFRZX0FSUjtcblxuXHRsZXQgb2xkQ2hpbGRyZW5MZW5ndGggPSBvbGRDaGlsZHJlbi5sZW5ndGg7XG5cblx0bmV3UGFyZW50Vk5vZGUuX2NoaWxkcmVuID0gW107XG5cdGZvciAoaSA9IDA7IGkgPCByZW5kZXJSZXN1bHQubGVuZ3RoOyBpKyspIHtcblx0XHRjaGlsZFZOb2RlID0gcmVuZGVyUmVzdWx0W2ldO1xuXG5cdFx0aWYgKGNoaWxkVk5vZGUgPT0gbnVsbCB8fCB0eXBlb2YgY2hpbGRWTm9kZSA9PSAnYm9vbGVhbicpIHtcblx0XHRcdGNoaWxkVk5vZGUgPSBuZXdQYXJlbnRWTm9kZS5fY2hpbGRyZW5baV0gPSBudWxsO1xuXHRcdH1cblx0XHQvLyBJZiB0aGlzIG5ld1ZOb2RlIGlzIGJlaW5nIHJldXNlZCAoZS5nLiA8ZGl2PntyZXVzZX17cmV1c2V9PC9kaXY+KSBpbiB0aGUgc2FtZSBkaWZmLFxuXHRcdC8vIG9yIHdlIGFyZSByZW5kZXJpbmcgYSBjb21wb25lbnQgKGUuZy4gc2V0U3RhdGUpIGNvcHkgdGhlIG9sZFZOb2RlcyBzbyBpdCBjYW4gaGF2ZVxuXHRcdC8vIGl0J3Mgb3duIERPTSAmIGV0Yy4gcG9pbnRlcnNcblx0XHRlbHNlIGlmIChcblx0XHRcdHR5cGVvZiBjaGlsZFZOb2RlID09ICdzdHJpbmcnIHx8XG5cdFx0XHR0eXBlb2YgY2hpbGRWTm9kZSA9PSAnbnVtYmVyJyB8fFxuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZhbGlkLXR5cGVvZlxuXHRcdFx0dHlwZW9mIGNoaWxkVk5vZGUgPT0gJ2JpZ2ludCdcblx0XHQpIHtcblx0XHRcdGNoaWxkVk5vZGUgPSBuZXdQYXJlbnRWTm9kZS5fY2hpbGRyZW5baV0gPSBjcmVhdGVWTm9kZShcblx0XHRcdFx0bnVsbCxcblx0XHRcdFx0Y2hpbGRWTm9kZSxcblx0XHRcdFx0bnVsbCxcblx0XHRcdFx0bnVsbCxcblx0XHRcdFx0Y2hpbGRWTm9kZVxuXHRcdFx0KTtcblx0XHR9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGRWTm9kZSkpIHtcblx0XHRcdGNoaWxkVk5vZGUgPSBuZXdQYXJlbnRWTm9kZS5fY2hpbGRyZW5baV0gPSBjcmVhdGVWTm9kZShcblx0XHRcdFx0RnJhZ21lbnQsXG5cdFx0XHRcdHsgY2hpbGRyZW46IGNoaWxkVk5vZGUgfSxcblx0XHRcdFx0bnVsbCxcblx0XHRcdFx0bnVsbCxcblx0XHRcdFx0bnVsbFxuXHRcdFx0KTtcblx0XHR9IGVsc2UgaWYgKGNoaWxkVk5vZGUuX2RlcHRoID4gMCkge1xuXHRcdFx0Ly8gVk5vZGUgaXMgYWxyZWFkeSBpbiB1c2UsIGNsb25lIGl0LiBUaGlzIGNhbiBoYXBwZW4gaW4gdGhlIGZvbGxvd2luZ1xuXHRcdFx0Ly8gc2NlbmFyaW86XG5cdFx0XHQvLyAgIGNvbnN0IHJldXNlID0gPGRpdiAvPlxuXHRcdFx0Ly8gICA8ZGl2PntyZXVzZX08c3BhbiAvPntyZXVzZX08L2Rpdj5cblx0XHRcdGNoaWxkVk5vZGUgPSBuZXdQYXJlbnRWTm9kZS5fY2hpbGRyZW5baV0gPSBjcmVhdGVWTm9kZShcblx0XHRcdFx0Y2hpbGRWTm9kZS50eXBlLFxuXHRcdFx0XHRjaGlsZFZOb2RlLnByb3BzLFxuXHRcdFx0XHRjaGlsZFZOb2RlLmtleSxcblx0XHRcdFx0bnVsbCxcblx0XHRcdFx0Y2hpbGRWTm9kZS5fb3JpZ2luYWxcblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNoaWxkVk5vZGUgPSBuZXdQYXJlbnRWTm9kZS5fY2hpbGRyZW5baV0gPSBjaGlsZFZOb2RlO1xuXHRcdH1cblxuXHRcdC8vIFRlcnNlciByZW1vdmVzIHRoZSBgY29udGludWVgIGhlcmUgYW5kIHdyYXBzIHRoZSBsb29wIGJvZHlcblx0XHQvLyBpbiBhIGBpZiAoY2hpbGRWTm9kZSkgeyAuLi4gfSBjb25kaXRpb25cblx0XHRpZiAoY2hpbGRWTm9kZSA9PSBudWxsKSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRjaGlsZFZOb2RlLl9wYXJlbnQgPSBuZXdQYXJlbnRWTm9kZTtcblx0XHRjaGlsZFZOb2RlLl9kZXB0aCA9IG5ld1BhcmVudFZOb2RlLl9kZXB0aCArIDE7XG5cblx0XHQvLyBDaGVjayBpZiB3ZSBmaW5kIGEgY29ycmVzcG9uZGluZyBlbGVtZW50IGluIG9sZENoaWxkcmVuLlxuXHRcdC8vIElmIGZvdW5kLCBkZWxldGUgdGhlIGFycmF5IGl0ZW0gYnkgc2V0dGluZyB0byBgdW5kZWZpbmVkYC5cblx0XHQvLyBXZSB1c2UgYHVuZGVmaW5lZGAsIGFzIGBudWxsYCBpcyByZXNlcnZlZCBmb3IgZW1wdHkgcGxhY2Vob2xkZXJzXG5cdFx0Ly8gKGhvbGVzKS5cblx0XHRvbGRWTm9kZSA9IG9sZENoaWxkcmVuW2ldO1xuXG5cdFx0aWYgKFxuXHRcdFx0b2xkVk5vZGUgPT09IG51bGwgfHxcblx0XHRcdChvbGRWTm9kZSAmJlxuXHRcdFx0XHRjaGlsZFZOb2RlLmtleSA9PSBvbGRWTm9kZS5rZXkgJiZcblx0XHRcdFx0Y2hpbGRWTm9kZS50eXBlID09PSBvbGRWTm9kZS50eXBlKVxuXHRcdCkge1xuXHRcdFx0b2xkQ2hpbGRyZW5baV0gPSB1bmRlZmluZWQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIEVpdGhlciBvbGRWTm9kZSA9PT0gdW5kZWZpbmVkIG9yIG9sZENoaWxkcmVuTGVuZ3RoID4gMCxcblx0XHRcdC8vIHNvIGFmdGVyIHRoaXMgbG9vcCBvbGRWTm9kZSA9PSBudWxsIG9yIG9sZFZOb2RlIGlzIGEgdmFsaWQgdmFsdWUuXG5cdFx0XHRmb3IgKGogPSAwOyBqIDwgb2xkQ2hpbGRyZW5MZW5ndGg7IGorKykge1xuXHRcdFx0XHRvbGRWTm9kZSA9IG9sZENoaWxkcmVuW2pdO1xuXHRcdFx0XHQvLyBJZiBjaGlsZFZOb2RlIGlzIHVua2V5ZWQsIHdlIG9ubHkgbWF0Y2ggc2ltaWxhcmx5IHVua2V5ZWQgbm9kZXMsIG90aGVyd2lzZSB3ZSBtYXRjaCBieSBrZXkuXG5cdFx0XHRcdC8vIFdlIGFsd2F5cyBtYXRjaCBieSB0eXBlIChpbiBlaXRoZXIgY2FzZSkuXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRvbGRWTm9kZSAmJlxuXHRcdFx0XHRcdGNoaWxkVk5vZGUua2V5ID09IG9sZFZOb2RlLmtleSAmJlxuXHRcdFx0XHRcdGNoaWxkVk5vZGUudHlwZSA9PT0gb2xkVk5vZGUudHlwZVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRvbGRDaGlsZHJlbltqXSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0XHRvbGRWTm9kZSA9IG51bGw7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0b2xkVk5vZGUgPSBvbGRWTm9kZSB8fCBFTVBUWV9PQko7XG5cblx0XHQvLyBNb3JwaCB0aGUgb2xkIGVsZW1lbnQgaW50byB0aGUgbmV3IG9uZSwgYnV0IGRvbid0IGFwcGVuZCBpdCB0byB0aGUgZG9tIHlldFxuXHRcdGRpZmYoXG5cdFx0XHRwYXJlbnREb20sXG5cdFx0XHRjaGlsZFZOb2RlLFxuXHRcdFx0b2xkVk5vZGUsXG5cdFx0XHRnbG9iYWxDb250ZXh0LFxuXHRcdFx0aXNTdmcsXG5cdFx0XHRleGNlc3NEb21DaGlsZHJlbixcblx0XHRcdGNvbW1pdFF1ZXVlLFxuXHRcdFx0b2xkRG9tLFxuXHRcdFx0aXNIeWRyYXRpbmdcblx0XHQpO1xuXG5cdFx0bmV3RG9tID0gY2hpbGRWTm9kZS5fZG9tO1xuXG5cdFx0aWYgKChqID0gY2hpbGRWTm9kZS5yZWYpICYmIG9sZFZOb2RlLnJlZiAhPSBqKSB7XG5cdFx0XHRpZiAoIXJlZnMpIHJlZnMgPSBbXTtcblx0XHRcdGlmIChvbGRWTm9kZS5yZWYpIHJlZnMucHVzaChvbGRWTm9kZS5yZWYsIG51bGwsIGNoaWxkVk5vZGUpO1xuXHRcdFx0cmVmcy5wdXNoKGosIGNoaWxkVk5vZGUuX2NvbXBvbmVudCB8fCBuZXdEb20sIGNoaWxkVk5vZGUpO1xuXHRcdH1cblxuXHRcdGlmIChuZXdEb20gIT0gbnVsbCkge1xuXHRcdFx0aWYgKGZpcnN0Q2hpbGREb20gPT0gbnVsbCkge1xuXHRcdFx0XHRmaXJzdENoaWxkRG9tID0gbmV3RG9tO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoXG5cdFx0XHRcdHR5cGVvZiBjaGlsZFZOb2RlLnR5cGUgPT0gJ2Z1bmN0aW9uJyAmJlxuXHRcdFx0XHRjaGlsZFZOb2RlLl9jaGlsZHJlbiA9PT0gb2xkVk5vZGUuX2NoaWxkcmVuXG5cdFx0XHQpIHtcblx0XHRcdFx0Y2hpbGRWTm9kZS5fbmV4dERvbSA9IG9sZERvbSA9IHJlb3JkZXJDaGlsZHJlbihcblx0XHRcdFx0XHRjaGlsZFZOb2RlLFxuXHRcdFx0XHRcdG9sZERvbSxcblx0XHRcdFx0XHRwYXJlbnREb21cblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9sZERvbSA9IHBsYWNlQ2hpbGQoXG5cdFx0XHRcdFx0cGFyZW50RG9tLFxuXHRcdFx0XHRcdGNoaWxkVk5vZGUsXG5cdFx0XHRcdFx0b2xkVk5vZGUsXG5cdFx0XHRcdFx0b2xkQ2hpbGRyZW4sXG5cdFx0XHRcdFx0bmV3RG9tLFxuXHRcdFx0XHRcdG9sZERvbVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodHlwZW9mIG5ld1BhcmVudFZOb2RlLnR5cGUgPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHQvLyBCZWNhdXNlIHRoZSBuZXdQYXJlbnRWTm9kZSBpcyBGcmFnbWVudC1saWtlLCB3ZSBuZWVkIHRvIHNldCBpdCdzXG5cdFx0XHRcdC8vIF9uZXh0RG9tIHByb3BlcnR5IHRvIHRoZSBuZXh0U2libGluZyBvZiBpdHMgbGFzdCBjaGlsZCBET00gbm9kZS5cblx0XHRcdFx0Ly9cblx0XHRcdFx0Ly8gYG9sZERvbWAgY29udGFpbnMgdGhlIGNvcnJlY3QgdmFsdWUgaGVyZSBiZWNhdXNlIGlmIHRoZSBsYXN0IGNoaWxkXG5cdFx0XHRcdC8vIGlzIGEgRnJhZ21lbnQtbGlrZSwgdGhlbiBvbGREb20gaGFzIGFscmVhZHkgYmVlbiBzZXQgdG8gdGhhdCBjaGlsZCdzIF9uZXh0RG9tLlxuXHRcdFx0XHQvLyBJZiB0aGUgbGFzdCBjaGlsZCBpcyBhIERPTSBWTm9kZSwgdGhlbiBvbGREb20gd2lsbCBiZSBzZXQgdG8gdGhhdCBET01cblx0XHRcdFx0Ly8gbm9kZSdzIG5leHRTaWJsaW5nLlxuXHRcdFx0XHRuZXdQYXJlbnRWTm9kZS5fbmV4dERvbSA9IG9sZERvbTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0b2xkRG9tICYmXG5cdFx0XHRvbGRWTm9kZS5fZG9tID09IG9sZERvbSAmJlxuXHRcdFx0b2xkRG9tLnBhcmVudE5vZGUgIT0gcGFyZW50RG9tXG5cdFx0KSB7XG5cdFx0XHQvLyBUaGUgYWJvdmUgY29uZGl0aW9uIGlzIHRvIGhhbmRsZSBudWxsIHBsYWNlaG9sZGVycy4gU2VlIHRlc3QgaW4gcGxhY2Vob2xkZXIudGVzdC5qczpcblx0XHRcdC8vIGBlZmZpY2llbnRseSByZXBsYWNlIG51bGwgcGxhY2Vob2xkZXJzIGluIHBhcmVudCByZXJlbmRlcnNgXG5cdFx0XHRvbGREb20gPSBnZXREb21TaWJsaW5nKG9sZFZOb2RlKTtcblx0XHR9XG5cdH1cblxuXHRuZXdQYXJlbnRWTm9kZS5fZG9tID0gZmlyc3RDaGlsZERvbTtcblxuXHQvLyBSZW1vdmUgcmVtYWluaW5nIG9sZENoaWxkcmVuIGlmIHRoZXJlIGFyZSBhbnkuXG5cdGZvciAoaSA9IG9sZENoaWxkcmVuTGVuZ3RoOyBpLS07ICkge1xuXHRcdGlmIChvbGRDaGlsZHJlbltpXSAhPSBudWxsKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdHR5cGVvZiBuZXdQYXJlbnRWTm9kZS50eXBlID09ICdmdW5jdGlvbicgJiZcblx0XHRcdFx0b2xkQ2hpbGRyZW5baV0uX2RvbSAhPSBudWxsICYmXG5cdFx0XHRcdG9sZENoaWxkcmVuW2ldLl9kb20gPT0gbmV3UGFyZW50Vk5vZGUuX25leHREb21cblx0XHRcdCkge1xuXHRcdFx0XHQvLyBJZiB0aGUgbmV3UGFyZW50Vk5vZGUuX19uZXh0RG9tIHBvaW50cyB0byBhIGRvbSBub2RlIHRoYXQgaXMgYWJvdXQgdG9cblx0XHRcdFx0Ly8gYmUgdW5tb3VudGVkLCB0aGVuIGdldCB0aGUgbmV4dCBzaWJsaW5nIG9mIHRoYXQgdm5vZGUgYW5kIHNldFxuXHRcdFx0XHQvLyBfbmV4dERvbSB0byBpdFxuXHRcdFx0XHRuZXdQYXJlbnRWTm9kZS5fbmV4dERvbSA9IGdldERvbVNpYmxpbmcob2xkUGFyZW50Vk5vZGUsIGkgKyAxKTtcblx0XHRcdH1cblxuXHRcdFx0dW5tb3VudChvbGRDaGlsZHJlbltpXSwgb2xkQ2hpbGRyZW5baV0pO1xuXHRcdH1cblx0fVxuXG5cdC8vIFNldCByZWZzIG9ubHkgYWZ0ZXIgdW5tb3VudFxuXHRpZiAocmVmcykge1xuXHRcdGZvciAoaSA9IDA7IGkgPCByZWZzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRhcHBseVJlZihyZWZzW2ldLCByZWZzWysraV0sIHJlZnNbKytpXSk7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIHJlb3JkZXJDaGlsZHJlbihjaGlsZFZOb2RlLCBvbGREb20sIHBhcmVudERvbSkge1xuXHQvLyBOb3RlOiBWTm9kZXMgaW4gbmVzdGVkIHN1c3BlbmRlZCB0cmVlcyBtYXkgYmUgbWlzc2luZyBfY2hpbGRyZW4uXG5cdGxldCBjID0gY2hpbGRWTm9kZS5fY2hpbGRyZW47XG5cdGxldCB0bXAgPSAwO1xuXHRmb3IgKDsgYyAmJiB0bXAgPCBjLmxlbmd0aDsgdG1wKyspIHtcblx0XHRsZXQgdm5vZGUgPSBjW3RtcF07XG5cdFx0aWYgKHZub2RlKSB7XG5cdFx0XHQvLyBXZSB0eXBpY2FsbHkgZW50ZXIgdGhpcyBjb2RlIHBhdGggb24gc0NVIGJhaWxvdXQsIHdoZXJlIHdlIGNvcHlcblx0XHRcdC8vIG9sZFZOb2RlLl9jaGlsZHJlbiB0byBuZXdWTm9kZS5fY2hpbGRyZW4uIElmIHRoYXQgaXMgdGhlIGNhc2UsIHdlIG5lZWRcblx0XHRcdC8vIHRvIHVwZGF0ZSB0aGUgb2xkIGNoaWxkcmVuJ3MgX3BhcmVudCBwb2ludGVyIHRvIHBvaW50IHRvIHRoZSBuZXdWTm9kZVxuXHRcdFx0Ly8gKGNoaWxkVk5vZGUgaGVyZSkuXG5cdFx0XHR2bm9kZS5fcGFyZW50ID0gY2hpbGRWTm9kZTtcblxuXHRcdFx0aWYgKHR5cGVvZiB2bm9kZS50eXBlID09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0b2xkRG9tID0gcmVvcmRlckNoaWxkcmVuKHZub2RlLCBvbGREb20sIHBhcmVudERvbSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvbGREb20gPSBwbGFjZUNoaWxkKFxuXHRcdFx0XHRcdHBhcmVudERvbSxcblx0XHRcdFx0XHR2bm9kZSxcblx0XHRcdFx0XHR2bm9kZSxcblx0XHRcdFx0XHRjLFxuXHRcdFx0XHRcdHZub2RlLl9kb20sXG5cdFx0XHRcdFx0b2xkRG9tXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG9sZERvbTtcbn1cblxuLyoqXG4gKiBGbGF0dGVuIGFuZCBsb29wIHRocm91Z2ggdGhlIGNoaWxkcmVuIG9mIGEgdmlydHVhbCBub2RlXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi4vaW5kZXgnKS5Db21wb25lbnRDaGlsZHJlbn0gY2hpbGRyZW4gVGhlIHVuZmxhdHRlbmVkXG4gKiBjaGlsZHJlbiBvZiBhIHZpcnR1YWwgbm9kZVxuICogQHJldHVybnMge2ltcG9ydCgnLi4vaW50ZXJuYWwnKS5WTm9kZVtdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9DaGlsZEFycmF5KGNoaWxkcmVuLCBvdXQpIHtcblx0b3V0ID0gb3V0IHx8IFtdO1xuXHRpZiAoY2hpbGRyZW4gPT0gbnVsbCB8fCB0eXBlb2YgY2hpbGRyZW4gPT0gJ2Jvb2xlYW4nKSB7XG5cdH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcblx0XHRjaGlsZHJlbi5zb21lKGNoaWxkID0+IHtcblx0XHRcdHRvQ2hpbGRBcnJheShjaGlsZCwgb3V0KTtcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRvdXQucHVzaChjaGlsZHJlbik7XG5cdH1cblx0cmV0dXJuIG91dDtcbn1cblxuZnVuY3Rpb24gcGxhY2VDaGlsZChcblx0cGFyZW50RG9tLFxuXHRjaGlsZFZOb2RlLFxuXHRvbGRWTm9kZSxcblx0b2xkQ2hpbGRyZW4sXG5cdG5ld0RvbSxcblx0b2xkRG9tXG4pIHtcblx0bGV0IG5leHREb207XG5cdGlmIChjaGlsZFZOb2RlLl9uZXh0RG9tICE9PSB1bmRlZmluZWQpIHtcblx0XHQvLyBPbmx5IEZyYWdtZW50cyBvciBjb21wb25lbnRzIHRoYXQgcmV0dXJuIEZyYWdtZW50IGxpa2UgVk5vZGVzIHdpbGxcblx0XHQvLyBoYXZlIGEgbm9uLXVuZGVmaW5lZCBfbmV4dERvbS4gQ29udGludWUgdGhlIGRpZmYgZnJvbSB0aGUgc2libGluZ1xuXHRcdC8vIG9mIGxhc3QgRE9NIGNoaWxkIG9mIHRoaXMgY2hpbGQgVk5vZGVcblx0XHRuZXh0RG9tID0gY2hpbGRWTm9kZS5fbmV4dERvbTtcblxuXHRcdC8vIEVhZ2VybHkgY2xlYW51cCBfbmV4dERvbS4gV2UgZG9uJ3QgbmVlZCB0byBwZXJzaXN0IHRoZSB2YWx1ZSBiZWNhdXNlXG5cdFx0Ly8gaXQgaXMgb25seSB1c2VkIGJ5IGBkaWZmQ2hpbGRyZW5gIHRvIGRldGVybWluZSB3aGVyZSB0byByZXN1bWUgdGhlIGRpZmYgYWZ0ZXJcblx0XHQvLyBkaWZmaW5nIENvbXBvbmVudHMgYW5kIEZyYWdtZW50cy4gT25jZSB3ZSBzdG9yZSBpdCB0aGUgbmV4dERPTSBsb2NhbCB2YXIsIHdlXG5cdFx0Ly8gY2FuIGNsZWFuIHVwIHRoZSBwcm9wZXJ0eVxuXHRcdGNoaWxkVk5vZGUuX25leHREb20gPSB1bmRlZmluZWQ7XG5cdH0gZWxzZSBpZiAoXG5cdFx0b2xkVk5vZGUgPT0gbnVsbCB8fFxuXHRcdG5ld0RvbSAhPSBvbGREb20gfHxcblx0XHRuZXdEb20ucGFyZW50Tm9kZSA9PSBudWxsXG5cdCkge1xuXHRcdG91dGVyOiBpZiAob2xkRG9tID09IG51bGwgfHwgb2xkRG9tLnBhcmVudE5vZGUgIT09IHBhcmVudERvbSkge1xuXHRcdFx0cGFyZW50RG9tLmFwcGVuZENoaWxkKG5ld0RvbSk7XG5cdFx0XHRuZXh0RG9tID0gbnVsbDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gYGo8b2xkQ2hpbGRyZW5MZW5ndGg7IGorPTJgIGlzIGFuIGFsdGVybmF0aXZlIHRvIGBqKys8b2xkQ2hpbGRyZW5MZW5ndGgvMmBcblx0XHRcdGZvciAoXG5cdFx0XHRcdGxldCBzaWJEb20gPSBvbGREb20sIGogPSAwO1xuXHRcdFx0XHQoc2liRG9tID0gc2liRG9tLm5leHRTaWJsaW5nKSAmJiBqIDwgb2xkQ2hpbGRyZW4ubGVuZ3RoO1xuXHRcdFx0XHRqICs9IDJcblx0XHRcdCkge1xuXHRcdFx0XHRpZiAoc2liRG9tID09IG5ld0RvbSkge1xuXHRcdFx0XHRcdGJyZWFrIG91dGVyO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRwYXJlbnREb20uaW5zZXJ0QmVmb3JlKG5ld0RvbSwgb2xkRG9tKTtcblx0XHRcdG5leHREb20gPSBvbGREb207XG5cdFx0fVxuXHR9XG5cblx0Ly8gSWYgd2UgaGF2ZSBwcmUtY2FsY3VsYXRlZCB0aGUgbmV4dERPTSBub2RlLCB1c2UgaXQuIEVsc2UgY2FsY3VsYXRlIGl0IG5vd1xuXHQvLyBTdHJpY3RseSBjaGVjayBmb3IgYHVuZGVmaW5lZGAgaGVyZSBjdXogYG51bGxgIGlzIGEgdmFsaWQgdmFsdWUgb2YgYG5leHREb21gLlxuXHQvLyBTZWUgbW9yZSBkZXRhaWwgaW4gY3JlYXRlLWVsZW1lbnQuanM6Y3JlYXRlVk5vZGVcblx0aWYgKG5leHREb20gIT09IHVuZGVmaW5lZCkge1xuXHRcdG9sZERvbSA9IG5leHREb207XG5cdH0gZWxzZSB7XG5cdFx0b2xkRG9tID0gbmV3RG9tLm5leHRTaWJsaW5nO1xuXHR9XG5cblx0cmV0dXJuIG9sZERvbTtcbn1cbiIsICJpbXBvcnQgeyBJU19OT05fRElNRU5TSU9OQUwgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IG9wdGlvbnMgZnJvbSAnLi4vb3B0aW9ucyc7XG5cbi8qKlxuICogRGlmZiB0aGUgb2xkIGFuZCBuZXcgcHJvcGVydGllcyBvZiBhIFZOb2RlIGFuZCBhcHBseSBjaGFuZ2VzIHRvIHRoZSBET00gbm9kZVxuICogQHBhcmFtIHtpbXBvcnQoJy4uL2ludGVybmFsJykuUHJlYWN0RWxlbWVudH0gZG9tIFRoZSBET00gbm9kZSB0byBhcHBseVxuICogY2hhbmdlcyB0b1xuICogQHBhcmFtIHtvYmplY3R9IG5ld1Byb3BzIFRoZSBuZXcgcHJvcHNcbiAqIEBwYXJhbSB7b2JqZWN0fSBvbGRQcm9wcyBUaGUgb2xkIHByb3BzXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzU3ZnIFdoZXRoZXIgb3Igbm90IHRoaXMgbm9kZSBpcyBhbiBTVkcgbm9kZVxuICogQHBhcmFtIHtib29sZWFufSBoeWRyYXRlIFdoZXRoZXIgb3Igbm90IHdlIGFyZSBpbiBoeWRyYXRpb24gbW9kZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGlmZlByb3BzKGRvbSwgbmV3UHJvcHMsIG9sZFByb3BzLCBpc1N2ZywgaHlkcmF0ZSkge1xuXHRsZXQgaTtcblxuXHRmb3IgKGkgaW4gb2xkUHJvcHMpIHtcblx0XHRpZiAoaSAhPT0gJ2NoaWxkcmVuJyAmJiBpICE9PSAna2V5JyAmJiAhKGkgaW4gbmV3UHJvcHMpKSB7XG5cdFx0XHRzZXRQcm9wZXJ0eShkb20sIGksIG51bGwsIG9sZFByb3BzW2ldLCBpc1N2Zyk7XG5cdFx0fVxuXHR9XG5cblx0Zm9yIChpIGluIG5ld1Byb3BzKSB7XG5cdFx0aWYgKFxuXHRcdFx0KCFoeWRyYXRlIHx8IHR5cGVvZiBuZXdQcm9wc1tpXSA9PSAnZnVuY3Rpb24nKSAmJlxuXHRcdFx0aSAhPT0gJ2NoaWxkcmVuJyAmJlxuXHRcdFx0aSAhPT0gJ2tleScgJiZcblx0XHRcdGkgIT09ICd2YWx1ZScgJiZcblx0XHRcdGkgIT09ICdjaGVja2VkJyAmJlxuXHRcdFx0b2xkUHJvcHNbaV0gIT09IG5ld1Byb3BzW2ldXG5cdFx0KSB7XG5cdFx0XHRzZXRQcm9wZXJ0eShkb20sIGksIG5ld1Byb3BzW2ldLCBvbGRQcm9wc1tpXSwgaXNTdmcpO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBzZXRTdHlsZShzdHlsZSwga2V5LCB2YWx1ZSkge1xuXHRpZiAoa2V5WzBdID09PSAnLScpIHtcblx0XHRzdHlsZS5zZXRQcm9wZXJ0eShrZXksIHZhbHVlKTtcblx0fSBlbHNlIGlmICh2YWx1ZSA9PSBudWxsKSB7XG5cdFx0c3R5bGVba2V5XSA9ICcnO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSAhPSAnbnVtYmVyJyB8fCBJU19OT05fRElNRU5TSU9OQUwudGVzdChrZXkpKSB7XG5cdFx0c3R5bGVba2V5XSA9IHZhbHVlO1xuXHR9IGVsc2Uge1xuXHRcdHN0eWxlW2tleV0gPSB2YWx1ZSArICdweCc7XG5cdH1cbn1cblxuLyoqXG4gKiBTZXQgYSBwcm9wZXJ0eSB2YWx1ZSBvbiBhIERPTSBub2RlXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi4vaW50ZXJuYWwnKS5QcmVhY3RFbGVtZW50fSBkb20gVGhlIERPTSBub2RlIHRvIG1vZGlmeVxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIHNldFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0IHRoZSBwcm9wZXJ0eSB0b1xuICogQHBhcmFtIHsqfSBvbGRWYWx1ZSBUaGUgb2xkIHZhbHVlIHRoZSBwcm9wZXJ0eSBoYWRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNTdmcgV2hldGhlciBvciBub3QgdGhpcyBET00gbm9kZSBpcyBhbiBTVkcgbm9kZSBvciBub3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldFByb3BlcnR5KGRvbSwgbmFtZSwgdmFsdWUsIG9sZFZhbHVlLCBpc1N2Zykge1xuXHRsZXQgdXNlQ2FwdHVyZTtcblxuXHRvOiBpZiAobmFtZSA9PT0gJ3N0eWxlJykge1xuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycpIHtcblx0XHRcdGRvbS5zdHlsZS5jc3NUZXh0ID0gdmFsdWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICh0eXBlb2Ygb2xkVmFsdWUgPT0gJ3N0cmluZycpIHtcblx0XHRcdFx0ZG9tLnN0eWxlLmNzc1RleHQgPSBvbGRWYWx1ZSA9ICcnO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAob2xkVmFsdWUpIHtcblx0XHRcdFx0Zm9yIChuYW1lIGluIG9sZFZhbHVlKSB7XG5cdFx0XHRcdFx0aWYgKCEodmFsdWUgJiYgbmFtZSBpbiB2YWx1ZSkpIHtcblx0XHRcdFx0XHRcdHNldFN0eWxlKGRvbS5zdHlsZSwgbmFtZSwgJycpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAodmFsdWUpIHtcblx0XHRcdFx0Zm9yIChuYW1lIGluIHZhbHVlKSB7XG5cdFx0XHRcdFx0aWYgKCFvbGRWYWx1ZSB8fCB2YWx1ZVtuYW1lXSAhPT0gb2xkVmFsdWVbbmFtZV0pIHtcblx0XHRcdFx0XHRcdHNldFN0eWxlKGRvbS5zdHlsZSwgbmFtZSwgdmFsdWVbbmFtZV0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHQvLyBCZW5jaG1hcmsgZm9yIGNvbXBhcmlzb246IGh0dHBzOi8vZXNiZW5jaC5jb20vYmVuY2gvNTc0Yzk1NGJkYjk2NWI5YTAwOTY1YWM2XG5cdGVsc2UgaWYgKG5hbWVbMF0gPT09ICdvJyAmJiBuYW1lWzFdID09PSAnbicpIHtcblx0XHR1c2VDYXB0dXJlID0gbmFtZSAhPT0gKG5hbWUgPSBuYW1lLnJlcGxhY2UoL0NhcHR1cmUkLywgJycpKTtcblxuXHRcdC8vIEluZmVyIGNvcnJlY3QgY2FzaW5nIGZvciBET00gYnVpbHQtaW4gZXZlbnRzOlxuXHRcdGlmIChuYW1lLnRvTG93ZXJDYXNlKCkgaW4gZG9tKSBuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpLnNsaWNlKDIpO1xuXHRcdGVsc2UgbmFtZSA9IG5hbWUuc2xpY2UoMik7XG5cblx0XHRpZiAoIWRvbS5fbGlzdGVuZXJzKSBkb20uX2xpc3RlbmVycyA9IHt9O1xuXHRcdGRvbS5fbGlzdGVuZXJzW25hbWUgKyB1c2VDYXB0dXJlXSA9IHZhbHVlO1xuXG5cdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHRpZiAoIW9sZFZhbHVlKSB7XG5cdFx0XHRcdGNvbnN0IGhhbmRsZXIgPSB1c2VDYXB0dXJlID8gZXZlbnRQcm94eUNhcHR1cmUgOiBldmVudFByb3h5O1xuXHRcdFx0XHRkb20uYWRkRXZlbnRMaXN0ZW5lcihuYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgaGFuZGxlciA9IHVzZUNhcHR1cmUgPyBldmVudFByb3h5Q2FwdHVyZSA6IGV2ZW50UHJveHk7XG5cdFx0XHRkb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihuYW1lLCBoYW5kbGVyLCB1c2VDYXB0dXJlKTtcblx0XHR9XG5cdH0gZWxzZSBpZiAobmFtZSAhPT0gJ2Rhbmdlcm91c2x5U2V0SW5uZXJIVE1MJykge1xuXHRcdGlmIChpc1N2Zykge1xuXHRcdFx0Ly8gTm9ybWFsaXplIGluY29ycmVjdCBwcm9wIHVzYWdlIGZvciBTVkc6XG5cdFx0XHQvLyAtIHhsaW5rOmhyZWYgLyB4bGlua0hyZWYgLS0+IGhyZWYgKHhsaW5rOmhyZWYgd2FzIHJlbW92ZWQgZnJvbSBTVkcgYW5kIGlzbid0IG5lZWRlZClcblx0XHRcdC8vIC0gY2xhc3NOYW1lIC0tPiBjbGFzc1xuXHRcdFx0bmFtZSA9IG5hbWUucmVwbGFjZSgveGxpbmsoSHw6aCkvLCAnaCcpLnJlcGxhY2UoL3NOYW1lJC8sICdzJyk7XG5cdFx0fSBlbHNlIGlmIChcblx0XHRcdG5hbWUgIT09ICdocmVmJyAmJlxuXHRcdFx0bmFtZSAhPT0gJ2xpc3QnICYmXG5cdFx0XHRuYW1lICE9PSAnZm9ybScgJiZcblx0XHRcdC8vIERlZmF1bHQgdmFsdWUgaW4gYnJvd3NlcnMgaXMgYC0xYCBhbmQgYW4gZW1wdHkgc3RyaW5nIGlzXG5cdFx0XHQvLyBjYXN0IHRvIGAwYCBpbnN0ZWFkXG5cdFx0XHRuYW1lICE9PSAndGFiSW5kZXgnICYmXG5cdFx0XHRuYW1lICE9PSAnZG93bmxvYWQnICYmXG5cdFx0XHRuYW1lIGluIGRvbVxuXHRcdCkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0ZG9tW25hbWVdID0gdmFsdWUgPT0gbnVsbCA/ICcnIDogdmFsdWU7XG5cdFx0XHRcdC8vIGxhYmVsbGVkIGJyZWFrIGlzIDFiIHNtYWxsZXIgaGVyZSB0aGFuIGEgcmV0dXJuIHN0YXRlbWVudCAoc29ycnkpXG5cdFx0XHRcdGJyZWFrIG87XG5cdFx0XHR9IGNhdGNoIChlKSB7fVxuXHRcdH1cblxuXHRcdC8vIEFSSUEtYXR0cmlidXRlcyBoYXZlIGEgZGlmZmVyZW50IG5vdGlvbiBvZiBib29sZWFuIHZhbHVlcy5cblx0XHQvLyBUaGUgdmFsdWUgYGZhbHNlYCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgYXR0cmlidXRlIG5vdFxuXHRcdC8vIGV4aXN0aW5nIG9uIHRoZSBET00sIHNvIHdlIGNhbid0IHJlbW92ZSBpdC4gRm9yIG5vbi1ib29sZWFuXG5cdFx0Ly8gQVJJQS1hdHRyaWJ1dGVzIHdlIGNvdWxkIHRyZWF0IGZhbHNlIGFzIGEgcmVtb3ZhbCwgYnV0IHRoZVxuXHRcdC8vIGFtb3VudCBvZiBleGNlcHRpb25zIHdvdWxkIGNvc3QgdXMgdG9vIG1hbnkgYnl0ZXMuIE9uIHRvcCBvZlxuXHRcdC8vIHRoYXQgb3RoZXIgVkRPTSBmcmFtZXdvcmtzIGFsc28gYWx3YXlzIHN0cmluZ2lmeSBgZmFsc2VgLlxuXG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0Ly8gbmV2ZXIgc2VyaWFsaXplIGZ1bmN0aW9ucyBhcyBhdHRyaWJ1dGUgdmFsdWVzXG5cdFx0fSBlbHNlIGlmIChcblx0XHRcdHZhbHVlICE9IG51bGwgJiZcblx0XHRcdCh2YWx1ZSAhPT0gZmFsc2UgfHwgKG5hbWVbMF0gPT09ICdhJyAmJiBuYW1lWzFdID09PSAncicpKVxuXHRcdCkge1xuXHRcdFx0ZG9tLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRvbS5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogUHJveHkgYW4gZXZlbnQgdG8gaG9va2VkIGV2ZW50IGhhbmRsZXJzXG4gKiBAcGFyYW0ge0V2ZW50fSBlIFRoZSBldmVudCBvYmplY3QgZnJvbSB0aGUgYnJvd3NlclxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZXZlbnRQcm94eShlKSB7XG5cdHRoaXMuX2xpc3RlbmVyc1tlLnR5cGUgKyBmYWxzZV0ob3B0aW9ucy5ldmVudCA/IG9wdGlvbnMuZXZlbnQoZSkgOiBlKTtcbn1cblxuZnVuY3Rpb24gZXZlbnRQcm94eUNhcHR1cmUoZSkge1xuXHR0aGlzLl9saXN0ZW5lcnNbZS50eXBlICsgdHJ1ZV0ob3B0aW9ucy5ldmVudCA/IG9wdGlvbnMuZXZlbnQoZSkgOiBlKTtcbn1cbiIsICJpbXBvcnQgeyBFTVBUWV9PQkogfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBnZXREb21TaWJsaW5nIH0gZnJvbSAnLi4vY29tcG9uZW50JztcbmltcG9ydCB7IEZyYWdtZW50IH0gZnJvbSAnLi4vY3JlYXRlLWVsZW1lbnQnO1xuaW1wb3J0IHsgZGlmZkNoaWxkcmVuIH0gZnJvbSAnLi9jaGlsZHJlbic7XG5pbXBvcnQgeyBkaWZmUHJvcHMsIHNldFByb3BlcnR5IH0gZnJvbSAnLi9wcm9wcyc7XG5pbXBvcnQgeyBhc3NpZ24sIHJlbW92ZU5vZGUsIHNsaWNlIH0gZnJvbSAnLi4vdXRpbCc7XG5pbXBvcnQgb3B0aW9ucyBmcm9tICcuLi9vcHRpb25zJztcblxuLyoqXG4gKiBEaWZmIHR3byB2aXJ0dWFsIG5vZGVzIGFuZCBhcHBseSBwcm9wZXIgY2hhbmdlcyB0byB0aGUgRE9NXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi4vaW50ZXJuYWwnKS5QcmVhY3RFbGVtZW50fSBwYXJlbnREb20gVGhlIHBhcmVudCBvZiB0aGUgRE9NIGVsZW1lbnRcbiAqIEBwYXJhbSB7aW1wb3J0KCcuLi9pbnRlcm5hbCcpLlZOb2RlfSBuZXdWTm9kZSBUaGUgbmV3IHZpcnR1YWwgbm9kZVxuICogQHBhcmFtIHtpbXBvcnQoJy4uL2ludGVybmFsJykuVk5vZGV9IG9sZFZOb2RlIFRoZSBvbGQgdmlydHVhbCBub2RlXG4gKiBAcGFyYW0ge29iamVjdH0gZ2xvYmFsQ29udGV4dCBUaGUgY3VycmVudCBjb250ZXh0IG9iamVjdC4gTW9kaWZpZWQgYnkgZ2V0Q2hpbGRDb250ZXh0XG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzU3ZnIFdoZXRoZXIgb3Igbm90IHRoaXMgZWxlbWVudCBpcyBhbiBTVkcgbm9kZVxuICogQHBhcmFtIHtBcnJheTxpbXBvcnQoJy4uL2ludGVybmFsJykuUHJlYWN0RWxlbWVudD59IGV4Y2Vzc0RvbUNoaWxkcmVuXG4gKiBAcGFyYW0ge0FycmF5PGltcG9ydCgnLi4vaW50ZXJuYWwnKS5Db21wb25lbnQ+fSBjb21taXRRdWV1ZSBMaXN0IG9mIGNvbXBvbmVudHNcbiAqIHdoaWNoIGhhdmUgY2FsbGJhY2tzIHRvIGludm9rZSBpbiBjb21taXRSb290XG4gKiBAcGFyYW0ge2ltcG9ydCgnLi4vaW50ZXJuYWwnKS5QcmVhY3RFbGVtZW50fSBvbGREb20gVGhlIGN1cnJlbnQgYXR0YWNoZWQgRE9NXG4gKiBlbGVtZW50IGFueSBuZXcgZG9tIGVsZW1lbnRzIHNob3VsZCBiZSBwbGFjZWQgYXJvdW5kLiBMaWtlbHkgYG51bGxgIG9uIGZpcnN0XG4gKiByZW5kZXIgKGV4Y2VwdCB3aGVuIGh5ZHJhdGluZykuIENhbiBiZSBhIHNpYmxpbmcgRE9NIGVsZW1lbnQgd2hlbiBkaWZmaW5nXG4gKiBGcmFnbWVudHMgdGhhdCBoYXZlIHNpYmxpbmdzLiBJbiBtb3N0IGNhc2VzLCBpdCBzdGFydHMgb3V0IGFzIGBvbGRDaGlsZHJlblswXS5fZG9tYC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzSHlkcmF0aW5nXSBXaGV0aGVyIG9yIG5vdCB3ZSBhcmUgaW4gaHlkcmF0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaWZmKFxuXHRwYXJlbnREb20sXG5cdG5ld1ZOb2RlLFxuXHRvbGRWTm9kZSxcblx0Z2xvYmFsQ29udGV4dCxcblx0aXNTdmcsXG5cdGV4Y2Vzc0RvbUNoaWxkcmVuLFxuXHRjb21taXRRdWV1ZSxcblx0b2xkRG9tLFxuXHRpc0h5ZHJhdGluZ1xuKSB7XG5cdGxldCB0bXAsXG5cdFx0bmV3VHlwZSA9IG5ld1ZOb2RlLnR5cGU7XG5cblx0Ly8gV2hlbiBwYXNzaW5nIHRocm91Z2ggY3JlYXRlRWxlbWVudCBpdCBhc3NpZ25zIHRoZSBvYmplY3Rcblx0Ly8gY29uc3RydWN0b3IgYXMgdW5kZWZpbmVkLiBUaGlzIHRvIHByZXZlbnQgSlNPTi1pbmplY3Rpb24uXG5cdGlmIChuZXdWTm9kZS5jb25zdHJ1Y3RvciAhPT0gdW5kZWZpbmVkKSByZXR1cm4gbnVsbDtcblxuXHQvLyBJZiB0aGUgcHJldmlvdXMgZGlmZiBiYWlsZWQgb3V0LCByZXN1bWUgY3JlYXRpbmcvaHlkcmF0aW5nLlxuXHRpZiAob2xkVk5vZGUuX2h5ZHJhdGluZyAhPSBudWxsKSB7XG5cdFx0aXNIeWRyYXRpbmcgPSBvbGRWTm9kZS5faHlkcmF0aW5nO1xuXHRcdG9sZERvbSA9IG5ld1ZOb2RlLl9kb20gPSBvbGRWTm9kZS5fZG9tO1xuXHRcdC8vIGlmIHdlIHJlc3VtZSwgd2Ugd2FudCB0aGUgdHJlZSB0byBiZSBcInVubG9ja2VkXCJcblx0XHRuZXdWTm9kZS5faHlkcmF0aW5nID0gbnVsbDtcblx0XHRleGNlc3NEb21DaGlsZHJlbiA9IFtvbGREb21dO1xuXHR9XG5cblx0aWYgKCh0bXAgPSBvcHRpb25zLl9kaWZmKSkgdG1wKG5ld1ZOb2RlKTtcblxuXHR0cnkge1xuXHRcdG91dGVyOiBpZiAodHlwZW9mIG5ld1R5cGUgPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0bGV0IGMsIGlzTmV3LCBvbGRQcm9wcywgb2xkU3RhdGUsIHNuYXBzaG90LCBjbGVhclByb2Nlc3NpbmdFeGNlcHRpb247XG5cdFx0XHRsZXQgbmV3UHJvcHMgPSBuZXdWTm9kZS5wcm9wcztcblxuXHRcdFx0Ly8gTmVjZXNzYXJ5IGZvciBjcmVhdGVDb250ZXh0IGFwaS4gU2V0dGluZyB0aGlzIHByb3BlcnR5IHdpbGwgcGFzc1xuXHRcdFx0Ly8gdGhlIGNvbnRleHQgdmFsdWUgYXMgYHRoaXMuY29udGV4dGAganVzdCBmb3IgdGhpcyBjb21wb25lbnQuXG5cdFx0XHR0bXAgPSBuZXdUeXBlLmNvbnRleHRUeXBlO1xuXHRcdFx0bGV0IHByb3ZpZGVyID0gdG1wICYmIGdsb2JhbENvbnRleHRbdG1wLl9pZF07XG5cdFx0XHRsZXQgY29tcG9uZW50Q29udGV4dCA9IHRtcFxuXHRcdFx0XHQ/IHByb3ZpZGVyXG5cdFx0XHRcdFx0PyBwcm92aWRlci5wcm9wcy52YWx1ZVxuXHRcdFx0XHRcdDogdG1wLl9kZWZhdWx0VmFsdWVcblx0XHRcdFx0OiBnbG9iYWxDb250ZXh0O1xuXG5cdFx0XHQvLyBHZXQgY29tcG9uZW50IGFuZCBzZXQgaXQgdG8gYGNgXG5cdFx0XHRpZiAob2xkVk5vZGUuX2NvbXBvbmVudCkge1xuXHRcdFx0XHRjID0gbmV3Vk5vZGUuX2NvbXBvbmVudCA9IG9sZFZOb2RlLl9jb21wb25lbnQ7XG5cdFx0XHRcdGNsZWFyUHJvY2Vzc2luZ0V4Y2VwdGlvbiA9IGMuX3Byb2Nlc3NpbmdFeGNlcHRpb24gPSBjLl9wZW5kaW5nRXJyb3I7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBJbnN0YW50aWF0ZSB0aGUgbmV3IGNvbXBvbmVudFxuXHRcdFx0XHRpZiAoJ3Byb3RvdHlwZScgaW4gbmV3VHlwZSAmJiBuZXdUeXBlLnByb3RvdHlwZS5yZW5kZXIpIHtcblx0XHRcdFx0XHQvLyBAdHMtaWdub3JlIFRoZSBjaGVjayBhYm92ZSB2ZXJpZmllcyB0aGF0IG5ld1R5cGUgaXMgc3VwcG9zZSB0byBiZSBjb25zdHJ1Y3RlZFxuXHRcdFx0XHRcdG5ld1ZOb2RlLl9jb21wb25lbnQgPSBjID0gbmV3IG5ld1R5cGUobmV3UHJvcHMsIGNvbXBvbmVudENvbnRleHQpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5ldy1jYXBcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBAdHMtaWdub3JlIFRydXN0IG1lLCBDb21wb25lbnQgaW1wbGVtZW50cyB0aGUgaW50ZXJmYWNlIHdlIHdhbnRcblx0XHRcdFx0XHRuZXdWTm9kZS5fY29tcG9uZW50ID0gYyA9IG5ldyBDb21wb25lbnQobmV3UHJvcHMsIGNvbXBvbmVudENvbnRleHQpO1xuXHRcdFx0XHRcdGMuY29uc3RydWN0b3IgPSBuZXdUeXBlO1xuXHRcdFx0XHRcdGMucmVuZGVyID0gZG9SZW5kZXI7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHByb3ZpZGVyKSBwcm92aWRlci5zdWIoYyk7XG5cblx0XHRcdFx0Yy5wcm9wcyA9IG5ld1Byb3BzO1xuXHRcdFx0XHRpZiAoIWMuc3RhdGUpIGMuc3RhdGUgPSB7fTtcblx0XHRcdFx0Yy5jb250ZXh0ID0gY29tcG9uZW50Q29udGV4dDtcblx0XHRcdFx0Yy5fZ2xvYmFsQ29udGV4dCA9IGdsb2JhbENvbnRleHQ7XG5cdFx0XHRcdGlzTmV3ID0gYy5fZGlydHkgPSB0cnVlO1xuXHRcdFx0XHRjLl9yZW5kZXJDYWxsYmFja3MgPSBbXTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSW52b2tlIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wc1xuXHRcdFx0aWYgKGMuX25leHRTdGF0ZSA9PSBudWxsKSB7XG5cdFx0XHRcdGMuX25leHRTdGF0ZSA9IGMuc3RhdGU7XG5cdFx0XHR9XG5cdFx0XHRpZiAobmV3VHlwZS5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgIT0gbnVsbCkge1xuXHRcdFx0XHRpZiAoYy5fbmV4dFN0YXRlID09IGMuc3RhdGUpIHtcblx0XHRcdFx0XHRjLl9uZXh0U3RhdGUgPSBhc3NpZ24oe30sIGMuX25leHRTdGF0ZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRhc3NpZ24oXG5cdFx0XHRcdFx0Yy5fbmV4dFN0YXRlLFxuXHRcdFx0XHRcdG5ld1R5cGUuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5ld1Byb3BzLCBjLl9uZXh0U3RhdGUpXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdG9sZFByb3BzID0gYy5wcm9wcztcblx0XHRcdG9sZFN0YXRlID0gYy5zdGF0ZTtcblxuXHRcdFx0Ly8gSW52b2tlIHByZS1yZW5kZXIgbGlmZWN5Y2xlIG1ldGhvZHNcblx0XHRcdGlmIChpc05ldykge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0bmV3VHlwZS5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT0gbnVsbCAmJlxuXHRcdFx0XHRcdGMuY29tcG9uZW50V2lsbE1vdW50ICE9IG51bGxcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0Yy5jb21wb25lbnRXaWxsTW91bnQoKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChjLmNvbXBvbmVudERpZE1vdW50ICE9IG51bGwpIHtcblx0XHRcdFx0XHRjLl9yZW5kZXJDYWxsYmFja3MucHVzaChjLmNvbXBvbmVudERpZE1vdW50KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdG5ld1R5cGUuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09IG51bGwgJiZcblx0XHRcdFx0XHRuZXdQcm9wcyAhPT0gb2xkUHJvcHMgJiZcblx0XHRcdFx0XHRjLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgIT0gbnVsbFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRjLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV3UHJvcHMsIGNvbXBvbmVudENvbnRleHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdCghYy5fZm9yY2UgJiZcblx0XHRcdFx0XHRcdGMuc2hvdWxkQ29tcG9uZW50VXBkYXRlICE9IG51bGwgJiZcblx0XHRcdFx0XHRcdGMuc2hvdWxkQ29tcG9uZW50VXBkYXRlKFxuXHRcdFx0XHRcdFx0XHRuZXdQcm9wcyxcblx0XHRcdFx0XHRcdFx0Yy5fbmV4dFN0YXRlLFxuXHRcdFx0XHRcdFx0XHRjb21wb25lbnRDb250ZXh0XG5cdFx0XHRcdFx0XHQpID09PSBmYWxzZSkgfHxcblx0XHRcdFx0XHRuZXdWTm9kZS5fb3JpZ2luYWwgPT09IG9sZFZOb2RlLl9vcmlnaW5hbFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRjLnByb3BzID0gbmV3UHJvcHM7XG5cdFx0XHRcdFx0Yy5zdGF0ZSA9IGMuX25leHRTdGF0ZTtcblx0XHRcdFx0XHQvLyBNb3JlIGluZm8gYWJvdXQgdGhpcyBoZXJlOiBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9Kb3ZpRGVDcm9vY2svYmVjNWYyY2U5MzU0NGQyZTYwNzBlZjhlMDAzNmU0ZThcblx0XHRcdFx0XHRpZiAobmV3Vk5vZGUuX29yaWdpbmFsICE9PSBvbGRWTm9kZS5fb3JpZ2luYWwpIGMuX2RpcnR5ID0gZmFsc2U7XG5cdFx0XHRcdFx0Yy5fdm5vZGUgPSBuZXdWTm9kZTtcblx0XHRcdFx0XHRuZXdWTm9kZS5fZG9tID0gb2xkVk5vZGUuX2RvbTtcblx0XHRcdFx0XHRuZXdWTm9kZS5fY2hpbGRyZW4gPSBvbGRWTm9kZS5fY2hpbGRyZW47XG5cdFx0XHRcdFx0bmV3Vk5vZGUuX2NoaWxkcmVuLmZvckVhY2godm5vZGUgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKHZub2RlKSB2bm9kZS5fcGFyZW50ID0gbmV3Vk5vZGU7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0aWYgKGMuX3JlbmRlckNhbGxiYWNrcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdGNvbW1pdFF1ZXVlLnB1c2goYyk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0YnJlYWsgb3V0ZXI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoYy5jb21wb25lbnRXaWxsVXBkYXRlICE9IG51bGwpIHtcblx0XHRcdFx0XHRjLmNvbXBvbmVudFdpbGxVcGRhdGUobmV3UHJvcHMsIGMuX25leHRTdGF0ZSwgY29tcG9uZW50Q29udGV4dCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoYy5jb21wb25lbnREaWRVcGRhdGUgIT0gbnVsbCkge1xuXHRcdFx0XHRcdGMuX3JlbmRlckNhbGxiYWNrcy5wdXNoKCgpID0+IHtcblx0XHRcdFx0XHRcdGMuY29tcG9uZW50RGlkVXBkYXRlKG9sZFByb3BzLCBvbGRTdGF0ZSwgc25hcHNob3QpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGMuY29udGV4dCA9IGNvbXBvbmVudENvbnRleHQ7XG5cdFx0XHRjLnByb3BzID0gbmV3UHJvcHM7XG5cdFx0XHRjLl92bm9kZSA9IG5ld1ZOb2RlO1xuXHRcdFx0Yy5fcGFyZW50RG9tID0gcGFyZW50RG9tO1xuXG5cdFx0XHRsZXQgcmVuZGVySG9vayA9IG9wdGlvbnMuX3JlbmRlcixcblx0XHRcdFx0Y291bnQgPSAwO1xuXHRcdFx0aWYgKCdwcm90b3R5cGUnIGluIG5ld1R5cGUgJiYgbmV3VHlwZS5wcm90b3R5cGUucmVuZGVyKSB7XG5cdFx0XHRcdGMuc3RhdGUgPSBjLl9uZXh0U3RhdGU7XG5cdFx0XHRcdGMuX2RpcnR5ID0gZmFsc2U7XG5cblx0XHRcdFx0aWYgKHJlbmRlckhvb2spIHJlbmRlckhvb2sobmV3Vk5vZGUpO1xuXG5cdFx0XHRcdHRtcCA9IGMucmVuZGVyKGMucHJvcHMsIGMuc3RhdGUsIGMuY29udGV4dCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkbyB7XG5cdFx0XHRcdFx0Yy5fZGlydHkgPSBmYWxzZTtcblx0XHRcdFx0XHRpZiAocmVuZGVySG9vaykgcmVuZGVySG9vayhuZXdWTm9kZSk7XG5cblx0XHRcdFx0XHR0bXAgPSBjLnJlbmRlcihjLnByb3BzLCBjLnN0YXRlLCBjLmNvbnRleHQpO1xuXG5cdFx0XHRcdFx0Ly8gSGFuZGxlIHNldFN0YXRlIGNhbGxlZCBpbiByZW5kZXIsIHNlZSAjMjU1M1xuXHRcdFx0XHRcdGMuc3RhdGUgPSBjLl9uZXh0U3RhdGU7XG5cdFx0XHRcdH0gd2hpbGUgKGMuX2RpcnR5ICYmICsrY291bnQgPCAyNSk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEhhbmRsZSBzZXRTdGF0ZSBjYWxsZWQgaW4gcmVuZGVyLCBzZWUgIzI1NTNcblx0XHRcdGMuc3RhdGUgPSBjLl9uZXh0U3RhdGU7XG5cblx0XHRcdGlmIChjLmdldENoaWxkQ29udGV4dCAhPSBudWxsKSB7XG5cdFx0XHRcdGdsb2JhbENvbnRleHQgPSBhc3NpZ24oYXNzaWduKHt9LCBnbG9iYWxDb250ZXh0KSwgYy5nZXRDaGlsZENvbnRleHQoKSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICghaXNOZXcgJiYgYy5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSAhPSBudWxsKSB7XG5cdFx0XHRcdHNuYXBzaG90ID0gYy5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZShvbGRQcm9wcywgb2xkU3RhdGUpO1xuXHRcdFx0fVxuXG5cdFx0XHRsZXQgaXNUb3BMZXZlbEZyYWdtZW50ID1cblx0XHRcdFx0dG1wICE9IG51bGwgJiYgdG1wLnR5cGUgPT09IEZyYWdtZW50ICYmIHRtcC5rZXkgPT0gbnVsbDtcblx0XHRcdGxldCByZW5kZXJSZXN1bHQgPSBpc1RvcExldmVsRnJhZ21lbnQgPyB0bXAucHJvcHMuY2hpbGRyZW4gOiB0bXA7XG5cblx0XHRcdGRpZmZDaGlsZHJlbihcblx0XHRcdFx0cGFyZW50RG9tLFxuXHRcdFx0XHRBcnJheS5pc0FycmF5KHJlbmRlclJlc3VsdCkgPyByZW5kZXJSZXN1bHQgOiBbcmVuZGVyUmVzdWx0XSxcblx0XHRcdFx0bmV3Vk5vZGUsXG5cdFx0XHRcdG9sZFZOb2RlLFxuXHRcdFx0XHRnbG9iYWxDb250ZXh0LFxuXHRcdFx0XHRpc1N2Zyxcblx0XHRcdFx0ZXhjZXNzRG9tQ2hpbGRyZW4sXG5cdFx0XHRcdGNvbW1pdFF1ZXVlLFxuXHRcdFx0XHRvbGREb20sXG5cdFx0XHRcdGlzSHlkcmF0aW5nXG5cdFx0XHQpO1xuXG5cdFx0XHRjLmJhc2UgPSBuZXdWTm9kZS5fZG9tO1xuXG5cdFx0XHQvLyBXZSBzdWNjZXNzZnVsbHkgcmVuZGVyZWQgdGhpcyBWTm9kZSwgdW5zZXQgYW55IHN0b3JlZCBoeWRyYXRpb24vYmFpbG91dCBzdGF0ZTpcblx0XHRcdG5ld1ZOb2RlLl9oeWRyYXRpbmcgPSBudWxsO1xuXG5cdFx0XHRpZiAoYy5fcmVuZGVyQ2FsbGJhY2tzLmxlbmd0aCkge1xuXHRcdFx0XHRjb21taXRRdWV1ZS5wdXNoKGMpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoY2xlYXJQcm9jZXNzaW5nRXhjZXB0aW9uKSB7XG5cdFx0XHRcdGMuX3BlbmRpbmdFcnJvciA9IGMuX3Byb2Nlc3NpbmdFeGNlcHRpb24gPSBudWxsO1xuXHRcdFx0fVxuXG5cdFx0XHRjLl9mb3JjZSA9IGZhbHNlO1xuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRleGNlc3NEb21DaGlsZHJlbiA9PSBudWxsICYmXG5cdFx0XHRuZXdWTm9kZS5fb3JpZ2luYWwgPT09IG9sZFZOb2RlLl9vcmlnaW5hbFxuXHRcdCkge1xuXHRcdFx0bmV3Vk5vZGUuX2NoaWxkcmVuID0gb2xkVk5vZGUuX2NoaWxkcmVuO1xuXHRcdFx0bmV3Vk5vZGUuX2RvbSA9IG9sZFZOb2RlLl9kb207XG5cdFx0fSBlbHNlIHtcblx0XHRcdG5ld1ZOb2RlLl9kb20gPSBkaWZmRWxlbWVudE5vZGVzKFxuXHRcdFx0XHRvbGRWTm9kZS5fZG9tLFxuXHRcdFx0XHRuZXdWTm9kZSxcblx0XHRcdFx0b2xkVk5vZGUsXG5cdFx0XHRcdGdsb2JhbENvbnRleHQsXG5cdFx0XHRcdGlzU3ZnLFxuXHRcdFx0XHRleGNlc3NEb21DaGlsZHJlbixcblx0XHRcdFx0Y29tbWl0UXVldWUsXG5cdFx0XHRcdGlzSHlkcmF0aW5nXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGlmICgodG1wID0gb3B0aW9ucy5kaWZmZWQpKSB0bXAobmV3Vk5vZGUpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0bmV3Vk5vZGUuX29yaWdpbmFsID0gbnVsbDtcblx0XHQvLyBpZiBoeWRyYXRpbmcgb3IgY3JlYXRpbmcgaW5pdGlhbCB0cmVlLCBiYWlsb3V0IHByZXNlcnZlcyBET006XG5cdFx0aWYgKGlzSHlkcmF0aW5nIHx8IGV4Y2Vzc0RvbUNoaWxkcmVuICE9IG51bGwpIHtcblx0XHRcdG5ld1ZOb2RlLl9kb20gPSBvbGREb207XG5cdFx0XHRuZXdWTm9kZS5faHlkcmF0aW5nID0gISFpc0h5ZHJhdGluZztcblx0XHRcdGV4Y2Vzc0RvbUNoaWxkcmVuW2V4Y2Vzc0RvbUNoaWxkcmVuLmluZGV4T2Yob2xkRG9tKV0gPSBudWxsO1xuXHRcdFx0Ly8gXiBjb3VsZCBwb3NzaWJseSBiZSBzaW1wbGlmaWVkIHRvOlxuXHRcdFx0Ly8gZXhjZXNzRG9tQ2hpbGRyZW4ubGVuZ3RoID0gMDtcblx0XHR9XG5cdFx0b3B0aW9ucy5fY2F0Y2hFcnJvcihlLCBuZXdWTm9kZSwgb2xkVk5vZGUpO1xuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtBcnJheTxpbXBvcnQoJy4uL2ludGVybmFsJykuQ29tcG9uZW50Pn0gY29tbWl0UXVldWUgTGlzdCBvZiBjb21wb25lbnRzXG4gKiB3aGljaCBoYXZlIGNhbGxiYWNrcyB0byBpbnZva2UgaW4gY29tbWl0Um9vdFxuICogQHBhcmFtIHtpbXBvcnQoJy4uL2ludGVybmFsJykuVk5vZGV9IHJvb3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbW1pdFJvb3QoY29tbWl0UXVldWUsIHJvb3QpIHtcblx0aWYgKG9wdGlvbnMuX2NvbW1pdCkgb3B0aW9ucy5fY29tbWl0KHJvb3QsIGNvbW1pdFF1ZXVlKTtcblxuXHRjb21taXRRdWV1ZS5zb21lKGMgPT4ge1xuXHRcdHRyeSB7XG5cdFx0XHQvLyBAdHMtaWdub3JlIFJldXNlIHRoZSBjb21taXRRdWV1ZSB2YXJpYWJsZSBoZXJlIHNvIHRoZSB0eXBlIGNoYW5nZXNcblx0XHRcdGNvbW1pdFF1ZXVlID0gYy5fcmVuZGVyQ2FsbGJhY2tzO1xuXHRcdFx0Yy5fcmVuZGVyQ2FsbGJhY2tzID0gW107XG5cdFx0XHRjb21taXRRdWV1ZS5zb21lKGNiID0+IHtcblx0XHRcdFx0Ly8gQHRzLWlnbm9yZSBTZWUgYWJvdmUgdHMtaWdub3JlIG9uIGNvbW1pdFF1ZXVlXG5cdFx0XHRcdGNiLmNhbGwoYyk7XG5cdFx0XHR9KTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRvcHRpb25zLl9jYXRjaEVycm9yKGUsIGMuX3Zub2RlKTtcblx0XHR9XG5cdH0pO1xufVxuXG4vKipcbiAqIERpZmYgdHdvIHZpcnR1YWwgbm9kZXMgcmVwcmVzZW50aW5nIERPTSBlbGVtZW50XG4gKiBAcGFyYW0ge2ltcG9ydCgnLi4vaW50ZXJuYWwnKS5QcmVhY3RFbGVtZW50fSBkb20gVGhlIERPTSBlbGVtZW50IHJlcHJlc2VudGluZ1xuICogdGhlIHZpcnR1YWwgbm9kZXMgYmVpbmcgZGlmZmVkXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi4vaW50ZXJuYWwnKS5WTm9kZX0gbmV3Vk5vZGUgVGhlIG5ldyB2aXJ0dWFsIG5vZGVcbiAqIEBwYXJhbSB7aW1wb3J0KCcuLi9pbnRlcm5hbCcpLlZOb2RlfSBvbGRWTm9kZSBUaGUgb2xkIHZpcnR1YWwgbm9kZVxuICogQHBhcmFtIHtvYmplY3R9IGdsb2JhbENvbnRleHQgVGhlIGN1cnJlbnQgY29udGV4dCBvYmplY3RcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNTdmcgV2hldGhlciBvciBub3QgdGhpcyBET00gbm9kZSBpcyBhbiBTVkcgbm9kZVxuICogQHBhcmFtIHsqfSBleGNlc3NEb21DaGlsZHJlblxuICogQHBhcmFtIHtBcnJheTxpbXBvcnQoJy4uL2ludGVybmFsJykuQ29tcG9uZW50Pn0gY29tbWl0UXVldWUgTGlzdCBvZiBjb21wb25lbnRzXG4gKiB3aGljaCBoYXZlIGNhbGxiYWNrcyB0byBpbnZva2UgaW4gY29tbWl0Um9vdFxuICogQHBhcmFtIHtib29sZWFufSBpc0h5ZHJhdGluZyBXaGV0aGVyIG9yIG5vdCB3ZSBhcmUgaW4gaHlkcmF0aW9uXG4gKiBAcmV0dXJucyB7aW1wb3J0KCcuLi9pbnRlcm5hbCcpLlByZWFjdEVsZW1lbnR9XG4gKi9cbmZ1bmN0aW9uIGRpZmZFbGVtZW50Tm9kZXMoXG5cdGRvbSxcblx0bmV3Vk5vZGUsXG5cdG9sZFZOb2RlLFxuXHRnbG9iYWxDb250ZXh0LFxuXHRpc1N2Zyxcblx0ZXhjZXNzRG9tQ2hpbGRyZW4sXG5cdGNvbW1pdFF1ZXVlLFxuXHRpc0h5ZHJhdGluZ1xuKSB7XG5cdGxldCBvbGRQcm9wcyA9IG9sZFZOb2RlLnByb3BzO1xuXHRsZXQgbmV3UHJvcHMgPSBuZXdWTm9kZS5wcm9wcztcblx0bGV0IG5vZGVUeXBlID0gbmV3Vk5vZGUudHlwZTtcblx0bGV0IGkgPSAwO1xuXG5cdC8vIFRyYWNrcyBlbnRlcmluZyBhbmQgZXhpdGluZyBTVkcgbmFtZXNwYWNlIHdoZW4gZGVzY2VuZGluZyB0aHJvdWdoIHRoZSB0cmVlLlxuXHRpZiAobm9kZVR5cGUgPT09ICdzdmcnKSBpc1N2ZyA9IHRydWU7XG5cblx0aWYgKGV4Y2Vzc0RvbUNoaWxkcmVuICE9IG51bGwpIHtcblx0XHRmb3IgKDsgaSA8IGV4Y2Vzc0RvbUNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRjb25zdCBjaGlsZCA9IGV4Y2Vzc0RvbUNoaWxkcmVuW2ldO1xuXG5cdFx0XHQvLyBpZiBuZXdWTm9kZSBtYXRjaGVzIGFuIGVsZW1lbnQgaW4gZXhjZXNzRG9tQ2hpbGRyZW4gb3IgdGhlIGBkb21gXG5cdFx0XHQvLyBhcmd1bWVudCBtYXRjaGVzIGFuIGVsZW1lbnQgaW4gZXhjZXNzRG9tQ2hpbGRyZW4sIHJlbW92ZSBpdCBmcm9tXG5cdFx0XHQvLyBleGNlc3NEb21DaGlsZHJlbiBzbyBpdCBpc24ndCBsYXRlciByZW1vdmVkIGluIGRpZmZDaGlsZHJlblxuXHRcdFx0aWYgKFxuXHRcdFx0XHRjaGlsZCAmJlxuXHRcdFx0XHQnc2V0QXR0cmlidXRlJyBpbiBjaGlsZCA9PT0gISFub2RlVHlwZSAmJlxuXHRcdFx0XHQobm9kZVR5cGUgPyBjaGlsZC5sb2NhbE5hbWUgPT09IG5vZGVUeXBlIDogY2hpbGQubm9kZVR5cGUgPT09IDMpXG5cdFx0XHQpIHtcblx0XHRcdFx0ZG9tID0gY2hpbGQ7XG5cdFx0XHRcdGV4Y2Vzc0RvbUNoaWxkcmVuW2ldID0gbnVsbDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYgKGRvbSA9PSBudWxsKSB7XG5cdFx0aWYgKG5vZGVUeXBlID09PSBudWxsKSB7XG5cdFx0XHQvLyBAdHMtaWdub3JlIGNyZWF0ZVRleHROb2RlIHJldHVybnMgVGV4dCwgd2UgZXhwZWN0IFByZWFjdEVsZW1lbnRcblx0XHRcdHJldHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShuZXdQcm9wcyk7XG5cdFx0fVxuXG5cdFx0aWYgKGlzU3ZnKSB7XG5cdFx0XHRkb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXG5cdFx0XHRcdCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsXG5cdFx0XHRcdC8vIEB0cy1pZ25vcmUgV2Uga25vdyBgbmV3Vk5vZGUudHlwZWAgaXMgYSBzdHJpbmdcblx0XHRcdFx0bm9kZVR5cGVcblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRvbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXG5cdFx0XHRcdC8vIEB0cy1pZ25vcmUgV2Uga25vdyBgbmV3Vk5vZGUudHlwZWAgaXMgYSBzdHJpbmdcblx0XHRcdFx0bm9kZVR5cGUsXG5cdFx0XHRcdG5ld1Byb3BzLmlzICYmIG5ld1Byb3BzXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdC8vIHdlIGNyZWF0ZWQgYSBuZXcgcGFyZW50LCBzbyBub25lIG9mIHRoZSBwcmV2aW91c2x5IGF0dGFjaGVkIGNoaWxkcmVuIGNhbiBiZSByZXVzZWQ6XG5cdFx0ZXhjZXNzRG9tQ2hpbGRyZW4gPSBudWxsO1xuXHRcdC8vIHdlIGFyZSBjcmVhdGluZyBhIG5ldyBub2RlLCBzbyB3ZSBjYW4gYXNzdW1lIHRoaXMgaXMgYSBuZXcgc3VidHJlZSAoaW4gY2FzZSB3ZSBhcmUgaHlkcmF0aW5nKSwgdGhpcyBkZW9wdHMgdGhlIGh5ZHJhdGVcblx0XHRpc0h5ZHJhdGluZyA9IGZhbHNlO1xuXHR9XG5cblx0aWYgKG5vZGVUeXBlID09PSBudWxsKSB7XG5cdFx0Ly8gRHVyaW5nIGh5ZHJhdGlvbiwgd2Ugc3RpbGwgaGF2ZSB0byBzcGxpdCBtZXJnZWQgdGV4dCBmcm9tIFNTUidkIEhUTUwuXG5cdFx0aWYgKG9sZFByb3BzICE9PSBuZXdQcm9wcyAmJiAoIWlzSHlkcmF0aW5nIHx8IGRvbS5kYXRhICE9PSBuZXdQcm9wcykpIHtcblx0XHRcdGRvbS5kYXRhID0gbmV3UHJvcHM7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIElmIGV4Y2Vzc0RvbUNoaWxkcmVuIHdhcyBub3QgbnVsbCwgcmVwb3B1bGF0ZSBpdCB3aXRoIHRoZSBjdXJyZW50IGVsZW1lbnQncyBjaGlsZHJlbjpcblx0XHRleGNlc3NEb21DaGlsZHJlbiA9IGV4Y2Vzc0RvbUNoaWxkcmVuICYmIHNsaWNlLmNhbGwoZG9tLmNoaWxkTm9kZXMpO1xuXG5cdFx0b2xkUHJvcHMgPSBvbGRWTm9kZS5wcm9wcyB8fCBFTVBUWV9PQko7XG5cblx0XHRsZXQgb2xkSHRtbCA9IG9sZFByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MO1xuXHRcdGxldCBuZXdIdG1sID0gbmV3UHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw7XG5cblx0XHQvLyBEdXJpbmcgaHlkcmF0aW9uLCBwcm9wcyBhcmUgbm90IGRpZmZlZCBhdCBhbGwgKGluY2x1ZGluZyBkYW5nZXJvdXNseVNldElubmVySFRNTClcblx0XHQvLyBAVE9ETyB3ZSBzaG91bGQgd2FybiBpbiBkZWJ1ZyBtb2RlIHdoZW4gcHJvcHMgZG9uJ3QgbWF0Y2ggaGVyZS5cblx0XHRpZiAoIWlzSHlkcmF0aW5nKSB7XG5cdFx0XHQvLyBCdXQsIGlmIHdlIGFyZSBpbiBhIHNpdHVhdGlvbiB3aGVyZSB3ZSBhcmUgdXNpbmcgZXhpc3RpbmcgRE9NIChlLmcuIHJlcGxhY2VOb2RlKVxuXHRcdFx0Ly8gd2Ugc2hvdWxkIHJlYWQgdGhlIGV4aXN0aW5nIERPTSBhdHRyaWJ1dGVzIHRvIGRpZmYgdGhlbVxuXHRcdFx0aWYgKGV4Y2Vzc0RvbUNoaWxkcmVuICE9IG51bGwpIHtcblx0XHRcdFx0b2xkUHJvcHMgPSB7fTtcblx0XHRcdFx0Zm9yIChpID0gMDsgaSA8IGRvbS5hdHRyaWJ1dGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0b2xkUHJvcHNbZG9tLmF0dHJpYnV0ZXNbaV0ubmFtZV0gPSBkb20uYXR0cmlidXRlc1tpXS52YWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAobmV3SHRtbCB8fCBvbGRIdG1sKSB7XG5cdFx0XHRcdC8vIEF2b2lkIHJlLWFwcGx5aW5nIHRoZSBzYW1lICdfX2h0bWwnIGlmIGl0IGRpZCBub3QgY2hhbmdlZCBiZXR3ZWVuIHJlLXJlbmRlclxuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0IW5ld0h0bWwgfHxcblx0XHRcdFx0XHQoKCFvbGRIdG1sIHx8IG5ld0h0bWwuX19odG1sICE9IG9sZEh0bWwuX19odG1sKSAmJlxuXHRcdFx0XHRcdFx0bmV3SHRtbC5fX2h0bWwgIT09IGRvbS5pbm5lckhUTUwpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGRvbS5pbm5lckhUTUwgPSAobmV3SHRtbCAmJiBuZXdIdG1sLl9faHRtbCkgfHwgJyc7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRkaWZmUHJvcHMoZG9tLCBuZXdQcm9wcywgb2xkUHJvcHMsIGlzU3ZnLCBpc0h5ZHJhdGluZyk7XG5cblx0XHQvLyBJZiB0aGUgbmV3IHZub2RlIGRpZG4ndCBoYXZlIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MLCBkaWZmIGl0cyBjaGlsZHJlblxuXHRcdGlmIChuZXdIdG1sKSB7XG5cdFx0XHRuZXdWTm9kZS5fY2hpbGRyZW4gPSBbXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aSA9IG5ld1ZOb2RlLnByb3BzLmNoaWxkcmVuO1xuXHRcdFx0ZGlmZkNoaWxkcmVuKFxuXHRcdFx0XHRkb20sXG5cdFx0XHRcdEFycmF5LmlzQXJyYXkoaSkgPyBpIDogW2ldLFxuXHRcdFx0XHRuZXdWTm9kZSxcblx0XHRcdFx0b2xkVk5vZGUsXG5cdFx0XHRcdGdsb2JhbENvbnRleHQsXG5cdFx0XHRcdGlzU3ZnICYmIG5vZGVUeXBlICE9PSAnZm9yZWlnbk9iamVjdCcsXG5cdFx0XHRcdGV4Y2Vzc0RvbUNoaWxkcmVuLFxuXHRcdFx0XHRjb21taXRRdWV1ZSxcblx0XHRcdFx0ZXhjZXNzRG9tQ2hpbGRyZW5cblx0XHRcdFx0XHQ/IGV4Y2Vzc0RvbUNoaWxkcmVuWzBdXG5cdFx0XHRcdFx0OiBvbGRWTm9kZS5fY2hpbGRyZW4gJiYgZ2V0RG9tU2libGluZyhvbGRWTm9kZSwgMCksXG5cdFx0XHRcdGlzSHlkcmF0aW5nXG5cdFx0XHQpO1xuXG5cdFx0XHQvLyBSZW1vdmUgY2hpbGRyZW4gdGhhdCBhcmUgbm90IHBhcnQgb2YgYW55IHZub2RlLlxuXHRcdFx0aWYgKGV4Y2Vzc0RvbUNoaWxkcmVuICE9IG51bGwpIHtcblx0XHRcdFx0Zm9yIChpID0gZXhjZXNzRG9tQ2hpbGRyZW4ubGVuZ3RoOyBpLS07ICkge1xuXHRcdFx0XHRcdGlmIChleGNlc3NEb21DaGlsZHJlbltpXSAhPSBudWxsKSByZW1vdmVOb2RlKGV4Y2Vzc0RvbUNoaWxkcmVuW2ldKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIChhcyBhYm92ZSwgZG9uJ3QgZGlmZiBwcm9wcyBkdXJpbmcgaHlkcmF0aW9uKVxuXHRcdGlmICghaXNIeWRyYXRpbmcpIHtcblx0XHRcdGlmIChcblx0XHRcdFx0J3ZhbHVlJyBpbiBuZXdQcm9wcyAmJlxuXHRcdFx0XHQoaSA9IG5ld1Byb3BzLnZhbHVlKSAhPT0gdW5kZWZpbmVkICYmXG5cdFx0XHRcdC8vICMyNzU2IEZvciB0aGUgPHByb2dyZXNzPi1lbGVtZW50IHRoZSBpbml0aWFsIHZhbHVlIGlzIDAsXG5cdFx0XHRcdC8vIGRlc3BpdGUgdGhlIGF0dHJpYnV0ZSBub3QgYmVpbmcgcHJlc2VudC4gV2hlbiB0aGUgYXR0cmlidXRlXG5cdFx0XHRcdC8vIGlzIG1pc3NpbmcgdGhlIHByb2dyZXNzIGJhciBpcyB0cmVhdGVkIGFzIGluZGV0ZXJtaW5hdGUuXG5cdFx0XHRcdC8vIFRvIGZpeCB0aGF0IHdlJ2xsIGFsd2F5cyB1cGRhdGUgaXQgd2hlbiBpdCBpcyAwIGZvciBwcm9ncmVzcyBlbGVtZW50c1xuXHRcdFx0XHQoaSAhPT0gZG9tLnZhbHVlIHx8XG5cdFx0XHRcdFx0KG5vZGVUeXBlID09PSAncHJvZ3Jlc3MnICYmICFpKSB8fFxuXHRcdFx0XHRcdC8vIFRoaXMgaXMgb25seSBmb3IgSUUgMTEgdG8gZml4IDxzZWxlY3Q+IHZhbHVlIG5vdCBiZWluZyB1cGRhdGVkLlxuXHRcdFx0XHRcdC8vIFRvIGF2b2lkIGEgc3RhbGUgc2VsZWN0IHZhbHVlIHdlIG5lZWQgdG8gc2V0IHRoZSBvcHRpb24udmFsdWVcblx0XHRcdFx0XHQvLyBhZ2Fpbiwgd2hpY2ggdHJpZ2dlcnMgSUUxMSB0byByZS1ldmFsdWF0ZSB0aGUgc2VsZWN0IHZhbHVlXG5cdFx0XHRcdFx0KG5vZGVUeXBlID09PSAnb3B0aW9uJyAmJiBpICE9PSBvbGRQcm9wcy52YWx1ZSkpXG5cdFx0XHQpIHtcblx0XHRcdFx0c2V0UHJvcGVydHkoZG9tLCAndmFsdWUnLCBpLCBvbGRQcm9wcy52YWx1ZSwgZmFsc2UpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKFxuXHRcdFx0XHQnY2hlY2tlZCcgaW4gbmV3UHJvcHMgJiZcblx0XHRcdFx0KGkgPSBuZXdQcm9wcy5jaGVja2VkKSAhPT0gdW5kZWZpbmVkICYmXG5cdFx0XHRcdGkgIT09IGRvbS5jaGVja2VkXG5cdFx0XHQpIHtcblx0XHRcdFx0c2V0UHJvcGVydHkoZG9tLCAnY2hlY2tlZCcsIGksIG9sZFByb3BzLmNoZWNrZWQsIGZhbHNlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZG9tO1xufVxuXG4vKipcbiAqIEludm9rZSBvciB1cGRhdGUgYSByZWYsIGRlcGVuZGluZyBvbiB3aGV0aGVyIGl0IGlzIGEgZnVuY3Rpb24gb3Igb2JqZWN0IHJlZi5cbiAqIEBwYXJhbSB7b2JqZWN0fGZ1bmN0aW9ufSByZWZcbiAqIEBwYXJhbSB7YW55fSB2YWx1ZVxuICogQHBhcmFtIHtpbXBvcnQoJy4uL2ludGVybmFsJykuVk5vZGV9IHZub2RlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBseVJlZihyZWYsIHZhbHVlLCB2bm9kZSkge1xuXHR0cnkge1xuXHRcdGlmICh0eXBlb2YgcmVmID09ICdmdW5jdGlvbicpIHJlZih2YWx1ZSk7XG5cdFx0ZWxzZSByZWYuY3VycmVudCA9IHZhbHVlO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0b3B0aW9ucy5fY2F0Y2hFcnJvcihlLCB2bm9kZSk7XG5cdH1cbn1cblxuLyoqXG4gKiBVbm1vdW50IGEgdmlydHVhbCBub2RlIGZyb20gdGhlIHRyZWUgYW5kIGFwcGx5IERPTSBjaGFuZ2VzXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi4vaW50ZXJuYWwnKS5WTm9kZX0gdm5vZGUgVGhlIHZpcnR1YWwgbm9kZSB0byB1bm1vdW50XG4gKiBAcGFyYW0ge2ltcG9ydCgnLi4vaW50ZXJuYWwnKS5WTm9kZX0gcGFyZW50Vk5vZGUgVGhlIHBhcmVudCBvZiB0aGUgVk5vZGUgdGhhdFxuICogaW5pdGlhdGVkIHRoZSB1bm1vdW50XG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtza2lwUmVtb3ZlXSBGbGFnIHRoYXQgaW5kaWNhdGVzIHRoYXQgYSBwYXJlbnQgbm9kZSBvZiB0aGVcbiAqIGN1cnJlbnQgZWxlbWVudCBpcyBhbHJlYWR5IGRldGFjaGVkIGZyb20gdGhlIERPTS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVubW91bnQodm5vZGUsIHBhcmVudFZOb2RlLCBza2lwUmVtb3ZlKSB7XG5cdGxldCByO1xuXHRpZiAob3B0aW9ucy51bm1vdW50KSBvcHRpb25zLnVubW91bnQodm5vZGUpO1xuXG5cdGlmICgociA9IHZub2RlLnJlZikpIHtcblx0XHRpZiAoIXIuY3VycmVudCB8fCByLmN1cnJlbnQgPT09IHZub2RlLl9kb20pIGFwcGx5UmVmKHIsIG51bGwsIHBhcmVudFZOb2RlKTtcblx0fVxuXG5cdGlmICgociA9IHZub2RlLl9jb21wb25lbnQpICE9IG51bGwpIHtcblx0XHRpZiAoci5jb21wb25lbnRXaWxsVW5tb3VudCkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0ci5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRvcHRpb25zLl9jYXRjaEVycm9yKGUsIHBhcmVudFZOb2RlKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyLmJhc2UgPSByLl9wYXJlbnREb20gPSBudWxsO1xuXHR9XG5cblx0aWYgKChyID0gdm5vZGUuX2NoaWxkcmVuKSkge1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgci5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYgKHJbaV0pIHtcblx0XHRcdFx0dW5tb3VudChyW2ldLCBwYXJlbnRWTm9kZSwgdHlwZW9mIHZub2RlLnR5cGUgIT0gJ2Z1bmN0aW9uJyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYgKCFza2lwUmVtb3ZlICYmIHZub2RlLl9kb20gIT0gbnVsbCkgcmVtb3ZlTm9kZSh2bm9kZS5fZG9tKTtcblxuXHQvLyBNdXN0IGJlIHNldCB0byBgdW5kZWZpbmVkYCB0byBwcm9wZXJseSBjbGVhbiB1cCBgX25leHREb21gXG5cdC8vIGZvciB3aGljaCBgbnVsbGAgaXMgYSB2YWxpZCB2YWx1ZS4gU2VlIGNvbW1lbnQgaW4gYGNyZWF0ZS1lbGVtZW50LmpzYFxuXHR2bm9kZS5fZG9tID0gdm5vZGUuX25leHREb20gPSB1bmRlZmluZWQ7XG59XG5cbi8qKiBUaGUgYC5yZW5kZXIoKWAgbWV0aG9kIGZvciBhIFBGQyBiYWNraW5nIGluc3RhbmNlLiAqL1xuZnVuY3Rpb24gZG9SZW5kZXIocHJvcHMsIHN0YXRlLCBjb250ZXh0KSB7XG5cdHJldHVybiB0aGlzLmNvbnN0cnVjdG9yKHByb3BzLCBjb250ZXh0KTtcbn1cbiIsICJpbXBvcnQgeyBFTVBUWV9PQkogfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBjb21taXRSb290LCBkaWZmIH0gZnJvbSAnLi9kaWZmL2luZGV4JztcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnQsIEZyYWdtZW50IH0gZnJvbSAnLi9jcmVhdGUtZWxlbWVudCc7XG5pbXBvcnQgb3B0aW9ucyBmcm9tICcuL29wdGlvbnMnO1xuaW1wb3J0IHsgc2xpY2UgfSBmcm9tICcuL3V0aWwnO1xuXG4vKipcbiAqIFJlbmRlciBhIFByZWFjdCB2aXJ0dWFsIG5vZGUgaW50byBhIERPTSBlbGVtZW50XG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbnRlcm5hbCcpLkNvbXBvbmVudENoaWxkfSB2bm9kZSBUaGUgdmlydHVhbCBub2RlIHRvIHJlbmRlclxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5QcmVhY3RFbGVtZW50fSBwYXJlbnREb20gVGhlIERPTSBlbGVtZW50IHRvXG4gKiByZW5kZXIgaW50b1xuICogQHBhcmFtIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5QcmVhY3RFbGVtZW50IHwgb2JqZWN0fSBbcmVwbGFjZU5vZGVdIE9wdGlvbmFsOiBBdHRlbXB0IHRvIHJlLXVzZSBhblxuICogZXhpc3RpbmcgRE9NIHRyZWUgcm9vdGVkIGF0IGByZXBsYWNlTm9kZWBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlcih2bm9kZSwgcGFyZW50RG9tLCByZXBsYWNlTm9kZSkge1xuXHRpZiAob3B0aW9ucy5fcm9vdCkgb3B0aW9ucy5fcm9vdCh2bm9kZSwgcGFyZW50RG9tKTtcblxuXHQvLyBXZSBhYnVzZSB0aGUgYHJlcGxhY2VOb2RlYCBwYXJhbWV0ZXIgaW4gYGh5ZHJhdGUoKWAgdG8gc2lnbmFsIGlmIHdlIGFyZSBpblxuXHQvLyBoeWRyYXRpb24gbW9kZSBvciBub3QgYnkgcGFzc2luZyB0aGUgYGh5ZHJhdGVgIGZ1bmN0aW9uIGluc3RlYWQgb2YgYSBET01cblx0Ly8gZWxlbWVudC4uXG5cdGxldCBpc0h5ZHJhdGluZyA9IHR5cGVvZiByZXBsYWNlTm9kZSA9PT0gJ2Z1bmN0aW9uJztcblxuXHQvLyBUbyBiZSBhYmxlIHRvIHN1cHBvcnQgY2FsbGluZyBgcmVuZGVyKClgIG11bHRpcGxlIHRpbWVzIG9uIHRoZSBzYW1lXG5cdC8vIERPTSBub2RlLCB3ZSBuZWVkIHRvIG9idGFpbiBhIHJlZmVyZW5jZSB0byB0aGUgcHJldmlvdXMgdHJlZS4gV2UgZG9cblx0Ly8gdGhpcyBieSBhc3NpZ25pbmcgYSBuZXcgYF9jaGlsZHJlbmAgcHJvcGVydHkgdG8gRE9NIG5vZGVzIHdoaWNoIHBvaW50c1xuXHQvLyB0byB0aGUgbGFzdCByZW5kZXJlZCB0cmVlLiBCeSBkZWZhdWx0IHRoaXMgcHJvcGVydHkgaXMgbm90IHByZXNlbnQsIHdoaWNoXG5cdC8vIG1lYW5zIHRoYXQgd2UgYXJlIG1vdW50aW5nIGEgbmV3IHRyZWUgZm9yIHRoZSBmaXJzdCB0aW1lLlxuXHRsZXQgb2xkVk5vZGUgPSBpc0h5ZHJhdGluZ1xuXHRcdD8gbnVsbFxuXHRcdDogKHJlcGxhY2VOb2RlICYmIHJlcGxhY2VOb2RlLl9jaGlsZHJlbikgfHwgcGFyZW50RG9tLl9jaGlsZHJlbjtcblxuXHR2bm9kZSA9IChcblx0XHQoIWlzSHlkcmF0aW5nICYmIHJlcGxhY2VOb2RlKSB8fFxuXHRcdHBhcmVudERvbVxuXHQpLl9jaGlsZHJlbiA9IGNyZWF0ZUVsZW1lbnQoRnJhZ21lbnQsIG51bGwsIFt2bm9kZV0pO1xuXG5cdC8vIExpc3Qgb2YgZWZmZWN0cyB0aGF0IG5lZWQgdG8gYmUgY2FsbGVkIGFmdGVyIGRpZmZpbmcuXG5cdGxldCBjb21taXRRdWV1ZSA9IFtdO1xuXHRkaWZmKFxuXHRcdHBhcmVudERvbSxcblx0XHQvLyBEZXRlcm1pbmUgdGhlIG5ldyB2bm9kZSB0cmVlIGFuZCBzdG9yZSBpdCBvbiB0aGUgRE9NIGVsZW1lbnQgb25cblx0XHQvLyBvdXIgY3VzdG9tIGBfY2hpbGRyZW5gIHByb3BlcnR5LlxuXHRcdHZub2RlLFxuXHRcdG9sZFZOb2RlIHx8IEVNUFRZX09CSixcblx0XHRFTVBUWV9PQkosXG5cdFx0cGFyZW50RG9tLm93bmVyU1ZHRWxlbWVudCAhPT0gdW5kZWZpbmVkLFxuXHRcdCFpc0h5ZHJhdGluZyAmJiByZXBsYWNlTm9kZVxuXHRcdFx0PyBbcmVwbGFjZU5vZGVdXG5cdFx0XHQ6IG9sZFZOb2RlXG5cdFx0XHQ/IG51bGxcblx0XHRcdDogcGFyZW50RG9tLmZpcnN0Q2hpbGRcblx0XHRcdD8gc2xpY2UuY2FsbChwYXJlbnREb20uY2hpbGROb2Rlcylcblx0XHRcdDogbnVsbCxcblx0XHRjb21taXRRdWV1ZSxcblx0XHQhaXNIeWRyYXRpbmcgJiYgcmVwbGFjZU5vZGVcblx0XHRcdD8gcmVwbGFjZU5vZGVcblx0XHRcdDogb2xkVk5vZGVcblx0XHRcdD8gb2xkVk5vZGUuX2RvbVxuXHRcdFx0OiBwYXJlbnREb20uZmlyc3RDaGlsZCxcblx0XHRpc0h5ZHJhdGluZ1xuXHQpO1xuXG5cdC8vIEZsdXNoIGFsbCBxdWV1ZWQgZWZmZWN0c1xuXHRjb21taXRSb290KGNvbW1pdFF1ZXVlLCB2bm9kZSk7XG59XG5cbi8qKlxuICogVXBkYXRlIGFuIGV4aXN0aW5nIERPTSBlbGVtZW50IHdpdGggZGF0YSBmcm9tIGEgUHJlYWN0IHZpcnR1YWwgbm9kZVxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5Db21wb25lbnRDaGlsZH0gdm5vZGUgVGhlIHZpcnR1YWwgbm9kZSB0byByZW5kZXJcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL2ludGVybmFsJykuUHJlYWN0RWxlbWVudH0gcGFyZW50RG9tIFRoZSBET00gZWxlbWVudCB0b1xuICogdXBkYXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoeWRyYXRlKHZub2RlLCBwYXJlbnREb20pIHtcblx0cmVuZGVyKHZub2RlLCBwYXJlbnREb20sIGh5ZHJhdGUpO1xufVxuIiwgImltcG9ydCB7IGFzc2lnbiwgc2xpY2UgfSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IHsgY3JlYXRlVk5vZGUgfSBmcm9tICcuL2NyZWF0ZS1lbGVtZW50JztcblxuLyoqXG4gKiBDbG9uZXMgdGhlIGdpdmVuIFZOb2RlLCBvcHRpb25hbGx5IGFkZGluZyBhdHRyaWJ1dGVzL3Byb3BzIGFuZCByZXBsYWNpbmcgaXRzIGNoaWxkcmVuLlxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5WTm9kZX0gdm5vZGUgVGhlIHZpcnR1YWwgRE9NIGVsZW1lbnQgdG8gY2xvbmVcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wcyBBdHRyaWJ1dGVzL3Byb3BzIHRvIGFkZCB3aGVuIGNsb25pbmdcbiAqIEBwYXJhbSB7QXJyYXk8aW1wb3J0KCcuL2ludGVybmFsJykuQ29tcG9uZW50Q2hpbGRyZW4+fSByZXN0IEFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyB3aWxsIGJlIHVzZWQgYXMgcmVwbGFjZW1lbnQgY2hpbGRyZW4uXG4gKiBAcmV0dXJucyB7aW1wb3J0KCcuL2ludGVybmFsJykuVk5vZGV9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbG9uZUVsZW1lbnQodm5vZGUsIHByb3BzLCBjaGlsZHJlbikge1xuXHRsZXQgbm9ybWFsaXplZFByb3BzID0gYXNzaWduKHt9LCB2bm9kZS5wcm9wcyksXG5cdFx0a2V5LFxuXHRcdHJlZixcblx0XHRpO1xuXHRmb3IgKGkgaW4gcHJvcHMpIHtcblx0XHRpZiAoaSA9PSAna2V5Jykga2V5ID0gcHJvcHNbaV07XG5cdFx0ZWxzZSBpZiAoaSA9PSAncmVmJykgcmVmID0gcHJvcHNbaV07XG5cdFx0ZWxzZSBub3JtYWxpemVkUHJvcHNbaV0gPSBwcm9wc1tpXTtcblx0fVxuXG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMikge1xuXHRcdG5vcm1hbGl6ZWRQcm9wcy5jaGlsZHJlbiA9XG5cdFx0XHRhcmd1bWVudHMubGVuZ3RoID4gMyA/IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKSA6IGNoaWxkcmVuO1xuXHR9XG5cblx0cmV0dXJuIGNyZWF0ZVZOb2RlKFxuXHRcdHZub2RlLnR5cGUsXG5cdFx0bm9ybWFsaXplZFByb3BzLFxuXHRcdGtleSB8fCB2bm9kZS5rZXksXG5cdFx0cmVmIHx8IHZub2RlLnJlZixcblx0XHRudWxsXG5cdCk7XG59XG4iLCAiLyoqXG4gKiBGaW5kIHRoZSBjbG9zZXN0IGVycm9yIGJvdW5kYXJ5IHRvIGEgdGhyb3duIGVycm9yIGFuZCBjYWxsIGl0XG4gKiBAcGFyYW0ge29iamVjdH0gZXJyb3IgVGhlIHRocm93biB2YWx1ZVxuICogQHBhcmFtIHtpbXBvcnQoJy4uL2ludGVybmFsJykuVk5vZGV9IHZub2RlIFRoZSB2bm9kZSB0aGF0IHRocmV3XG4gKiB0aGUgZXJyb3IgdGhhdCB3YXMgY2F1Z2h0IChleGNlcHQgZm9yIHVubW91bnRpbmcgd2hlbiB0aGlzIHBhcmFtZXRlclxuICogaXMgdGhlIGhpZ2hlc3QgcGFyZW50IHRoYXQgd2FzIGJlaW5nIHVubW91bnRlZClcbiAqIEBwYXJhbSB7aW1wb3J0KCcuLi9pbnRlcm5hbCcpLlZOb2RlfSBbb2xkVk5vZGVdXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi4vaW50ZXJuYWwnKS5FcnJvckluZm99IFtlcnJvckluZm9dXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBfY2F0Y2hFcnJvcihlcnJvciwgdm5vZGUsIG9sZFZOb2RlLCBlcnJvckluZm8pIHtcblx0LyoqIEB0eXBlIHtpbXBvcnQoJy4uL2ludGVybmFsJykuQ29tcG9uZW50fSAqL1xuXHRsZXQgY29tcG9uZW50LCBjdG9yLCBoYW5kbGVkO1xuXG5cdGZvciAoOyAodm5vZGUgPSB2bm9kZS5fcGFyZW50KTsgKSB7XG5cdFx0aWYgKChjb21wb25lbnQgPSB2bm9kZS5fY29tcG9uZW50KSAmJiAhY29tcG9uZW50Ll9wcm9jZXNzaW5nRXhjZXB0aW9uKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjdG9yID0gY29tcG9uZW50LmNvbnN0cnVjdG9yO1xuXG5cdFx0XHRcdGlmIChjdG9yICYmIGN0b3IuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yICE9IG51bGwpIHtcblx0XHRcdFx0XHRjb21wb25lbnQuc2V0U3RhdGUoY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IoZXJyb3IpKTtcblx0XHRcdFx0XHRoYW5kbGVkID0gY29tcG9uZW50Ll9kaXJ0eTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChjb21wb25lbnQuY29tcG9uZW50RGlkQ2F0Y2ggIT0gbnVsbCkge1xuXHRcdFx0XHRcdGNvbXBvbmVudC5jb21wb25lbnREaWRDYXRjaChlcnJvciwgZXJyb3JJbmZvIHx8IHt9KTtcblx0XHRcdFx0XHRoYW5kbGVkID0gY29tcG9uZW50Ll9kaXJ0eTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFRoaXMgaXMgYW4gZXJyb3IgYm91bmRhcnkuIE1hcmsgaXQgYXMgaGF2aW5nIGJhaWxlZCBvdXQsIGFuZCB3aGV0aGVyIGl0IHdhcyBtaWQtaHlkcmF0aW9uLlxuXHRcdFx0XHRpZiAoaGFuZGxlZCkge1xuXHRcdFx0XHRcdHJldHVybiAoY29tcG9uZW50Ll9wZW5kaW5nRXJyb3IgPSBjb21wb25lbnQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdGVycm9yID0gZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHR0aHJvdyBlcnJvcjtcbn1cbiIsICJpbXBvcnQgeyBvcHRpb25zIH0gZnJvbSAncHJlYWN0JztcblxuLyoqIEB0eXBlIHtudW1iZXJ9ICovXG5sZXQgY3VycmVudEluZGV4O1xuXG4vKiogQHR5cGUge2ltcG9ydCgnLi9pbnRlcm5hbCcpLkNvbXBvbmVudH0gKi9cbmxldCBjdXJyZW50Q29tcG9uZW50O1xuXG4vKiogQHR5cGUge2ltcG9ydCgnLi9pbnRlcm5hbCcpLkNvbXBvbmVudH0gKi9cbmxldCBwcmV2aW91c0NvbXBvbmVudDtcblxuLyoqIEB0eXBlIHtudW1iZXJ9ICovXG5sZXQgY3VycmVudEhvb2sgPSAwO1xuXG4vKiogQHR5cGUge0FycmF5PGltcG9ydCgnLi9pbnRlcm5hbCcpLkNvbXBvbmVudD59ICovXG5sZXQgYWZ0ZXJQYWludEVmZmVjdHMgPSBbXTtcblxubGV0IG9sZEJlZm9yZURpZmYgPSBvcHRpb25zLl9kaWZmO1xubGV0IG9sZEJlZm9yZVJlbmRlciA9IG9wdGlvbnMuX3JlbmRlcjtcbmxldCBvbGRBZnRlckRpZmYgPSBvcHRpb25zLmRpZmZlZDtcbmxldCBvbGRDb21taXQgPSBvcHRpb25zLl9jb21taXQ7XG5sZXQgb2xkQmVmb3JlVW5tb3VudCA9IG9wdGlvbnMudW5tb3VudDtcblxuY29uc3QgUkFGX1RJTUVPVVQgPSAxMDA7XG5sZXQgcHJldlJhZjtcblxub3B0aW9ucy5fZGlmZiA9IHZub2RlID0+IHtcblx0Y3VycmVudENvbXBvbmVudCA9IG51bGw7XG5cdGlmIChvbGRCZWZvcmVEaWZmKSBvbGRCZWZvcmVEaWZmKHZub2RlKTtcbn07XG5cbm9wdGlvbnMuX3JlbmRlciA9IHZub2RlID0+IHtcblx0aWYgKG9sZEJlZm9yZVJlbmRlcikgb2xkQmVmb3JlUmVuZGVyKHZub2RlKTtcblxuXHRjdXJyZW50Q29tcG9uZW50ID0gdm5vZGUuX2NvbXBvbmVudDtcblx0Y3VycmVudEluZGV4ID0gMDtcblxuXHRjb25zdCBob29rcyA9IGN1cnJlbnRDb21wb25lbnQuX19ob29rcztcblx0aWYgKGhvb2tzKSB7XG5cdFx0aWYgKHByZXZpb3VzQ29tcG9uZW50ID09PSBjdXJyZW50Q29tcG9uZW50KSB7XG5cdFx0XHRob29rcy5fcGVuZGluZ0VmZmVjdHMgPSBbXTtcblx0XHRcdGN1cnJlbnRDb21wb25lbnQuX3JlbmRlckNhbGxiYWNrcyA9IFtdO1xuXHRcdFx0aG9va3MuX2xpc3QuZm9yRWFjaChob29rSXRlbSA9PiB7XG5cdFx0XHRcdGlmIChob29rSXRlbS5fYXJncykgaG9va0l0ZW0uX2FyZ3MgPSB1bmRlZmluZWQ7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aG9va3MuX3BlbmRpbmdFZmZlY3RzLmZvckVhY2goaW52b2tlQ2xlYW51cCk7XG5cdFx0XHRob29rcy5fcGVuZGluZ0VmZmVjdHMuZm9yRWFjaChpbnZva2VFZmZlY3QpO1xuXHRcdFx0aG9va3MuX3BlbmRpbmdFZmZlY3RzID0gW107XG5cdFx0fVxuXHR9XG5cdHByZXZpb3VzQ29tcG9uZW50ID0gY3VycmVudENvbXBvbmVudDtcbn07XG5cbm9wdGlvbnMuZGlmZmVkID0gdm5vZGUgPT4ge1xuXHRpZiAob2xkQWZ0ZXJEaWZmKSBvbGRBZnRlckRpZmYodm5vZGUpO1xuXG5cdGNvbnN0IGMgPSB2bm9kZS5fY29tcG9uZW50O1xuXHRpZiAoYyAmJiBjLl9faG9va3MgJiYgYy5fX2hvb2tzLl9wZW5kaW5nRWZmZWN0cy5sZW5ndGgpIHtcblx0XHRhZnRlclBhaW50KGFmdGVyUGFpbnRFZmZlY3RzLnB1c2goYykpO1xuXHR9XG5cdGN1cnJlbnRDb21wb25lbnQgPSBudWxsO1xuXHRwcmV2aW91c0NvbXBvbmVudCA9IG51bGw7XG59O1xuXG5vcHRpb25zLl9jb21taXQgPSAodm5vZGUsIGNvbW1pdFF1ZXVlKSA9PiB7XG5cdGNvbW1pdFF1ZXVlLnNvbWUoY29tcG9uZW50ID0+IHtcblx0XHR0cnkge1xuXHRcdFx0Y29tcG9uZW50Ll9yZW5kZXJDYWxsYmFja3MuZm9yRWFjaChpbnZva2VDbGVhbnVwKTtcblx0XHRcdGNvbXBvbmVudC5fcmVuZGVyQ2FsbGJhY2tzID0gY29tcG9uZW50Ll9yZW5kZXJDYWxsYmFja3MuZmlsdGVyKGNiID0+XG5cdFx0XHRcdGNiLl92YWx1ZSA/IGludm9rZUVmZmVjdChjYikgOiB0cnVlXG5cdFx0XHQpO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdGNvbW1pdFF1ZXVlLnNvbWUoYyA9PiB7XG5cdFx0XHRcdGlmIChjLl9yZW5kZXJDYWxsYmFja3MpIGMuX3JlbmRlckNhbGxiYWNrcyA9IFtdO1xuXHRcdFx0fSk7XG5cdFx0XHRjb21taXRRdWV1ZSA9IFtdO1xuXHRcdFx0b3B0aW9ucy5fY2F0Y2hFcnJvcihlLCBjb21wb25lbnQuX3Zub2RlKTtcblx0XHR9XG5cdH0pO1xuXG5cdGlmIChvbGRDb21taXQpIG9sZENvbW1pdCh2bm9kZSwgY29tbWl0UXVldWUpO1xufTtcblxub3B0aW9ucy51bm1vdW50ID0gdm5vZGUgPT4ge1xuXHRpZiAob2xkQmVmb3JlVW5tb3VudCkgb2xkQmVmb3JlVW5tb3VudCh2bm9kZSk7XG5cblx0Y29uc3QgYyA9IHZub2RlLl9jb21wb25lbnQ7XG5cdGlmIChjICYmIGMuX19ob29rcykge1xuXHRcdGxldCBoYXNFcnJvcmVkO1xuXHRcdGMuX19ob29rcy5fbGlzdC5mb3JFYWNoKHMgPT4ge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aW52b2tlQ2xlYW51cChzKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0aGFzRXJyb3JlZCA9IGU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0aWYgKGhhc0Vycm9yZWQpIG9wdGlvbnMuX2NhdGNoRXJyb3IoaGFzRXJyb3JlZCwgYy5fdm5vZGUpO1xuXHR9XG59O1xuXG4vKipcbiAqIEdldCBhIGhvb2sncyBzdGF0ZSBmcm9tIHRoZSBjdXJyZW50Q29tcG9uZW50XG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXggVGhlIGluZGV4IG9mIHRoZSBob29rIHRvIGdldFxuICogQHBhcmFtIHtudW1iZXJ9IHR5cGUgVGhlIGluZGV4IG9mIHRoZSBob29rIHRvIGdldFxuICogQHJldHVybnMge2FueX1cbiAqL1xuZnVuY3Rpb24gZ2V0SG9va1N0YXRlKGluZGV4LCB0eXBlKSB7XG5cdGlmIChvcHRpb25zLl9ob29rKSB7XG5cdFx0b3B0aW9ucy5faG9vayhjdXJyZW50Q29tcG9uZW50LCBpbmRleCwgY3VycmVudEhvb2sgfHwgdHlwZSk7XG5cdH1cblx0Y3VycmVudEhvb2sgPSAwO1xuXG5cdC8vIExhcmdlbHkgaW5zcGlyZWQgYnk6XG5cdC8vICogaHR0cHM6Ly9naXRodWIuY29tL21pY2hhZWwta2xlaW4vZnVuY3kuanMvYmxvYi9mNmJlNzM0NjhlNmVjNDZiMGZmNWFhM2NjNGM5YmFmNzJhMjkwMjVhL3NyYy9ob29rcy9jb3JlX2hvb2tzLm1qc1xuXHQvLyAqIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNoYWVsLWtsZWluL2Z1bmN5LmpzL2Jsb2IvNjUwYmVhYTU4YzQzYzMzYTc0ODIwYTNjOThiM2M3MDc5Y2YyZTMzMy9zcmMvcmVuZGVyZXIubWpzXG5cdC8vIE90aGVyIGltcGxlbWVudGF0aW9ucyB0byBsb29rIGF0OlxuXHQvLyAqIGh0dHBzOi8vY29kZXNhbmRib3guaW8vcy9tbm94MDVxcDhcblx0Y29uc3QgaG9va3MgPVxuXHRcdGN1cnJlbnRDb21wb25lbnQuX19ob29rcyB8fFxuXHRcdChjdXJyZW50Q29tcG9uZW50Ll9faG9va3MgPSB7XG5cdFx0XHRfbGlzdDogW10sXG5cdFx0XHRfcGVuZGluZ0VmZmVjdHM6IFtdXG5cdFx0fSk7XG5cblx0aWYgKGluZGV4ID49IGhvb2tzLl9saXN0Lmxlbmd0aCkge1xuXHRcdGhvb2tzLl9saXN0LnB1c2goe30pO1xuXHR9XG5cdHJldHVybiBob29rcy5fbGlzdFtpbmRleF07XG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW5kZXgnKS5TdGF0ZVVwZGF0ZXI8YW55Pn0gW2luaXRpYWxTdGF0ZV1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVN0YXRlKGluaXRpYWxTdGF0ZSkge1xuXHRjdXJyZW50SG9vayA9IDE7XG5cdHJldHVybiB1c2VSZWR1Y2VyKGludm9rZU9yUmV0dXJuLCBpbml0aWFsU3RhdGUpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL2luZGV4JykuUmVkdWNlcjxhbnksIGFueT59IHJlZHVjZXJcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL2luZGV4JykuU3RhdGVVcGRhdGVyPGFueT59IGluaXRpYWxTdGF0ZVxuICogQHBhcmFtIHsoaW5pdGlhbFN0YXRlOiBhbnkpID0+IHZvaWR9IFtpbml0XVxuICogQHJldHVybnMge1sgYW55LCAoc3RhdGU6IGFueSkgPT4gdm9pZCBdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlUmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsU3RhdGUsIGluaXQpIHtcblx0LyoqIEB0eXBlIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5SZWR1Y2VySG9va1N0YXRlfSAqL1xuXHRjb25zdCBob29rU3RhdGUgPSBnZXRIb29rU3RhdGUoY3VycmVudEluZGV4KyssIDIpO1xuXHRob29rU3RhdGUuX3JlZHVjZXIgPSByZWR1Y2VyO1xuXHRpZiAoIWhvb2tTdGF0ZS5fY29tcG9uZW50KSB7XG5cdFx0aG9va1N0YXRlLl92YWx1ZSA9IFtcblx0XHRcdCFpbml0ID8gaW52b2tlT3JSZXR1cm4odW5kZWZpbmVkLCBpbml0aWFsU3RhdGUpIDogaW5pdChpbml0aWFsU3RhdGUpLFxuXG5cdFx0XHRhY3Rpb24gPT4ge1xuXHRcdFx0XHRjb25zdCBuZXh0VmFsdWUgPSBob29rU3RhdGUuX3JlZHVjZXIoaG9va1N0YXRlLl92YWx1ZVswXSwgYWN0aW9uKTtcblx0XHRcdFx0aWYgKGhvb2tTdGF0ZS5fdmFsdWVbMF0gIT09IG5leHRWYWx1ZSkge1xuXHRcdFx0XHRcdGhvb2tTdGF0ZS5fdmFsdWUgPSBbbmV4dFZhbHVlLCBob29rU3RhdGUuX3ZhbHVlWzFdXTtcblx0XHRcdFx0XHRob29rU3RhdGUuX2NvbXBvbmVudC5zZXRTdGF0ZSh7fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRdO1xuXG5cdFx0aG9va1N0YXRlLl9jb21wb25lbnQgPSBjdXJyZW50Q29tcG9uZW50O1xuXHR9XG5cblx0cmV0dXJuIGhvb2tTdGF0ZS5fdmFsdWU7XG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5FZmZlY3R9IGNhbGxiYWNrXG4gKiBAcGFyYW0ge2FueVtdfSBhcmdzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VFZmZlY3QoY2FsbGJhY2ssIGFyZ3MpIHtcblx0LyoqIEB0eXBlIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5FZmZlY3RIb29rU3RhdGV9ICovXG5cdGNvbnN0IHN0YXRlID0gZ2V0SG9va1N0YXRlKGN1cnJlbnRJbmRleCsrLCAzKTtcblx0aWYgKCFvcHRpb25zLl9za2lwRWZmZWN0cyAmJiBhcmdzQ2hhbmdlZChzdGF0ZS5fYXJncywgYXJncykpIHtcblx0XHRzdGF0ZS5fdmFsdWUgPSBjYWxsYmFjaztcblx0XHRzdGF0ZS5fYXJncyA9IGFyZ3M7XG5cblx0XHRjdXJyZW50Q29tcG9uZW50Ll9faG9va3MuX3BlbmRpbmdFZmZlY3RzLnB1c2goc3RhdGUpO1xuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5FZmZlY3R9IGNhbGxiYWNrXG4gKiBAcGFyYW0ge2FueVtdfSBhcmdzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VMYXlvdXRFZmZlY3QoY2FsbGJhY2ssIGFyZ3MpIHtcblx0LyoqIEB0eXBlIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5FZmZlY3RIb29rU3RhdGV9ICovXG5cdGNvbnN0IHN0YXRlID0gZ2V0SG9va1N0YXRlKGN1cnJlbnRJbmRleCsrLCA0KTtcblx0aWYgKCFvcHRpb25zLl9za2lwRWZmZWN0cyAmJiBhcmdzQ2hhbmdlZChzdGF0ZS5fYXJncywgYXJncykpIHtcblx0XHRzdGF0ZS5fdmFsdWUgPSBjYWxsYmFjaztcblx0XHRzdGF0ZS5fYXJncyA9IGFyZ3M7XG5cblx0XHRjdXJyZW50Q29tcG9uZW50Ll9yZW5kZXJDYWxsYmFja3MucHVzaChzdGF0ZSk7XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVJlZihpbml0aWFsVmFsdWUpIHtcblx0Y3VycmVudEhvb2sgPSA1O1xuXHRyZXR1cm4gdXNlTWVtbygoKSA9PiAoeyBjdXJyZW50OiBpbml0aWFsVmFsdWUgfSksIFtdKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gcmVmXG4gKiBAcGFyYW0geygpID0+IG9iamVjdH0gY3JlYXRlSGFuZGxlXG4gKiBAcGFyYW0ge2FueVtdfSBhcmdzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlSGFuZGxlLCBhcmdzKSB7XG5cdGN1cnJlbnRIb29rID0gNjtcblx0dXNlTGF5b3V0RWZmZWN0KFxuXHRcdCgpID0+IHtcblx0XHRcdGlmICh0eXBlb2YgcmVmID09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0cmVmKGNyZWF0ZUhhbmRsZSgpKTtcblx0XHRcdFx0cmV0dXJuICgpID0+IHJlZihudWxsKTtcblx0XHRcdH0gZWxzZSBpZiAocmVmKSB7XG5cdFx0XHRcdHJlZi5jdXJyZW50ID0gY3JlYXRlSGFuZGxlKCk7XG5cdFx0XHRcdHJldHVybiAoKSA9PiAocmVmLmN1cnJlbnQgPSBudWxsKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdGFyZ3MgPT0gbnVsbCA/IGFyZ3MgOiBhcmdzLmNvbmNhdChyZWYpXG5cdCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHsoKSA9PiBhbnl9IGZhY3RvcnlcbiAqIEBwYXJhbSB7YW55W119IGFyZ3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZU1lbW8oZmFjdG9yeSwgYXJncykge1xuXHQvKiogQHR5cGUge2ltcG9ydCgnLi9pbnRlcm5hbCcpLk1lbW9Ib29rU3RhdGV9ICovXG5cdGNvbnN0IHN0YXRlID0gZ2V0SG9va1N0YXRlKGN1cnJlbnRJbmRleCsrLCA3KTtcblx0aWYgKGFyZ3NDaGFuZ2VkKHN0YXRlLl9hcmdzLCBhcmdzKSkge1xuXHRcdHN0YXRlLl92YWx1ZSA9IGZhY3RvcnkoKTtcblx0XHRzdGF0ZS5fYXJncyA9IGFyZ3M7XG5cdFx0c3RhdGUuX2ZhY3RvcnkgPSBmYWN0b3J5O1xuXHR9XG5cblx0cmV0dXJuIHN0YXRlLl92YWx1ZTtcbn1cblxuLyoqXG4gKiBAcGFyYW0geygpID0+IHZvaWR9IGNhbGxiYWNrXG4gKiBAcGFyYW0ge2FueVtdfSBhcmdzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VDYWxsYmFjayhjYWxsYmFjaywgYXJncykge1xuXHRjdXJyZW50SG9vayA9IDg7XG5cdHJldHVybiB1c2VNZW1vKCgpID0+IGNhbGxiYWNrLCBhcmdzKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbnRlcm5hbCcpLlByZWFjdENvbnRleHR9IGNvbnRleHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUNvbnRleHQoY29udGV4dCkge1xuXHRjb25zdCBwcm92aWRlciA9IGN1cnJlbnRDb21wb25lbnQuY29udGV4dFtjb250ZXh0Ll9pZF07XG5cdC8vIFdlIGNvdWxkIHNraXAgdGhpcyBjYWxsIGhlcmUsIGJ1dCB0aGFuIHdlJ2Qgbm90IGNhbGxcblx0Ly8gYG9wdGlvbnMuX2hvb2tgLiBXZSBuZWVkIHRvIGRvIHRoYXQgaW4gb3JkZXIgdG8gbWFrZVxuXHQvLyB0aGUgZGV2dG9vbHMgYXdhcmUgb2YgdGhpcyBob29rLlxuXHQvKiogQHR5cGUge2ltcG9ydCgnLi9pbnRlcm5hbCcpLkNvbnRleHRIb29rU3RhdGV9ICovXG5cdGNvbnN0IHN0YXRlID0gZ2V0SG9va1N0YXRlKGN1cnJlbnRJbmRleCsrLCA5KTtcblx0Ly8gVGhlIGRldnRvb2xzIG5lZWRzIGFjY2VzcyB0byB0aGUgY29udGV4dCBvYmplY3QgdG9cblx0Ly8gYmUgYWJsZSB0byBwdWxsIG9mIHRoZSBkZWZhdWx0IHZhbHVlIHdoZW4gbm8gcHJvdmlkZXJcblx0Ly8gaXMgcHJlc2VudCBpbiB0aGUgdHJlZS5cblx0c3RhdGUuX2NvbnRleHQgPSBjb250ZXh0O1xuXHRpZiAoIXByb3ZpZGVyKSByZXR1cm4gY29udGV4dC5fZGVmYXVsdFZhbHVlO1xuXHQvLyBUaGlzIGlzIHByb2JhYmx5IG5vdCBzYWZlIHRvIGNvbnZlcnQgdG8gXCIhXCJcblx0aWYgKHN0YXRlLl92YWx1ZSA9PSBudWxsKSB7XG5cdFx0c3RhdGUuX3ZhbHVlID0gdHJ1ZTtcblx0XHRwcm92aWRlci5zdWIoY3VycmVudENvbXBvbmVudCk7XG5cdH1cblx0cmV0dXJuIHByb3ZpZGVyLnByb3BzLnZhbHVlO1xufVxuXG4vKipcbiAqIERpc3BsYXkgYSBjdXN0b20gbGFiZWwgZm9yIGEgY3VzdG9tIGhvb2sgZm9yIHRoZSBkZXZ0b29scyBwYW5lbFxuICogQHR5cGUgezxUPih2YWx1ZTogVCwgY2I/OiAodmFsdWU6IFQpID0+IHN0cmluZyB8IG51bWJlcikgPT4gdm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZURlYnVnVmFsdWUodmFsdWUsIGZvcm1hdHRlcikge1xuXHRpZiAob3B0aW9ucy51c2VEZWJ1Z1ZhbHVlKSB7XG5cdFx0b3B0aW9ucy51c2VEZWJ1Z1ZhbHVlKGZvcm1hdHRlciA/IGZvcm1hdHRlcih2YWx1ZSkgOiB2YWx1ZSk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0geyhlcnJvcjogYW55KSA9PiB2b2lkfSBjYlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlRXJyb3JCb3VuZGFyeShjYikge1xuXHQvKiogQHR5cGUge2ltcG9ydCgnLi9pbnRlcm5hbCcpLkVycm9yQm91bmRhcnlIb29rU3RhdGV9ICovXG5cdGNvbnN0IHN0YXRlID0gZ2V0SG9va1N0YXRlKGN1cnJlbnRJbmRleCsrLCAxMCk7XG5cdGNvbnN0IGVyclN0YXRlID0gdXNlU3RhdGUoKTtcblx0c3RhdGUuX3ZhbHVlID0gY2I7XG5cdGlmICghY3VycmVudENvbXBvbmVudC5jb21wb25lbnREaWRDYXRjaCkge1xuXHRcdGN1cnJlbnRDb21wb25lbnQuY29tcG9uZW50RGlkQ2F0Y2ggPSBlcnIgPT4ge1xuXHRcdFx0aWYgKHN0YXRlLl92YWx1ZSkgc3RhdGUuX3ZhbHVlKGVycik7XG5cdFx0XHRlcnJTdGF0ZVsxXShlcnIpO1xuXHRcdH07XG5cdH1cblx0cmV0dXJuIFtcblx0XHRlcnJTdGF0ZVswXSxcblx0XHQoKSA9PiB7XG5cdFx0XHRlcnJTdGF0ZVsxXSh1bmRlZmluZWQpO1xuXHRcdH1cblx0XTtcbn1cblxuLyoqXG4gKiBBZnRlciBwYWludCBlZmZlY3RzIGNvbnN1bWVyLlxuICovXG5mdW5jdGlvbiBmbHVzaEFmdGVyUGFpbnRFZmZlY3RzKCkge1xuXHRsZXQgY29tcG9uZW50O1xuXHR3aGlsZSAoKGNvbXBvbmVudCA9IGFmdGVyUGFpbnRFZmZlY3RzLnNoaWZ0KCkpKSB7XG5cdFx0aWYgKCFjb21wb25lbnQuX3BhcmVudERvbSkgY29udGludWU7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbXBvbmVudC5fX2hvb2tzLl9wZW5kaW5nRWZmZWN0cy5mb3JFYWNoKGludm9rZUNsZWFudXApO1xuXHRcdFx0Y29tcG9uZW50Ll9faG9va3MuX3BlbmRpbmdFZmZlY3RzLmZvckVhY2goaW52b2tlRWZmZWN0KTtcblx0XHRcdGNvbXBvbmVudC5fX2hvb2tzLl9wZW5kaW5nRWZmZWN0cyA9IFtdO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdGNvbXBvbmVudC5fX2hvb2tzLl9wZW5kaW5nRWZmZWN0cyA9IFtdO1xuXHRcdFx0b3B0aW9ucy5fY2F0Y2hFcnJvcihlLCBjb21wb25lbnQuX3Zub2RlKTtcblx0XHR9XG5cdH1cbn1cblxubGV0IEhBU19SQUYgPSB0eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lID09ICdmdW5jdGlvbic7XG5cbi8qKlxuICogU2NoZWR1bGUgYSBjYWxsYmFjayB0byBiZSBpbnZva2VkIGFmdGVyIHRoZSBicm93c2VyIGhhcyBhIGNoYW5jZSB0byBwYWludCBhIG5ldyBmcmFtZS5cbiAqIERvIHRoaXMgYnkgY29tYmluaW5nIHJlcXVlc3RBbmltYXRpb25GcmFtZSAockFGKSArIHNldFRpbWVvdXQgdG8gaW52b2tlIGEgY2FsbGJhY2sgYWZ0ZXJcbiAqIHRoZSBuZXh0IGJyb3dzZXIgZnJhbWUuXG4gKlxuICogQWxzbywgc2NoZWR1bGUgYSB0aW1lb3V0IGluIHBhcmFsbGVsIHRvIHRoZSB0aGUgckFGIHRvIGVuc3VyZSB0aGUgY2FsbGJhY2sgaXMgaW52b2tlZFxuICogZXZlbiBpZiBSQUYgZG9lc24ndCBmaXJlIChmb3IgZXhhbXBsZSBpZiB0aGUgYnJvd3NlciB0YWIgaXMgbm90IHZpc2libGUpXG4gKlxuICogQHBhcmFtIHsoKSA9PiB2b2lkfSBjYWxsYmFja1xuICovXG5mdW5jdGlvbiBhZnRlck5leHRGcmFtZShjYWxsYmFjaykge1xuXHRjb25zdCBkb25lID0gKCkgPT4ge1xuXHRcdGNsZWFyVGltZW91dCh0aW1lb3V0KTtcblx0XHRpZiAoSEFTX1JBRikgY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmKTtcblx0XHRzZXRUaW1lb3V0KGNhbGxiYWNrKTtcblx0fTtcblx0Y29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoZG9uZSwgUkFGX1RJTUVPVVQpO1xuXG5cdGxldCByYWY7XG5cdGlmIChIQVNfUkFGKSB7XG5cdFx0cmFmID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGRvbmUpO1xuXHR9XG59XG5cbi8vIE5vdGU6IGlmIHNvbWVvbmUgdXNlZCBvcHRpb25zLmRlYm91bmNlUmVuZGVyaW5nID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lLFxuLy8gdGhlbiBlZmZlY3RzIHdpbGwgQUxXQVlTIHJ1biBvbiB0aGUgTkVYVCBmcmFtZSBpbnN0ZWFkIG9mIHRoZSBjdXJyZW50IG9uZSwgaW5jdXJyaW5nIGEgfjE2bXMgZGVsYXkuXG4vLyBQZXJoYXBzIHRoaXMgaXMgbm90IHN1Y2ggYSBiaWcgZGVhbC5cbi8qKlxuICogU2NoZWR1bGUgYWZ0ZXJQYWludEVmZmVjdHMgZmx1c2ggYWZ0ZXIgdGhlIGJyb3dzZXIgcGFpbnRzXG4gKiBAcGFyYW0ge251bWJlcn0gbmV3UXVldWVMZW5ndGhcbiAqL1xuZnVuY3Rpb24gYWZ0ZXJQYWludChuZXdRdWV1ZUxlbmd0aCkge1xuXHRpZiAobmV3UXVldWVMZW5ndGggPT09IDEgfHwgcHJldlJhZiAhPT0gb3B0aW9ucy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHtcblx0XHRwcmV2UmFmID0gb3B0aW9ucy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU7XG5cdFx0KHByZXZSYWYgfHwgYWZ0ZXJOZXh0RnJhbWUpKGZsdXNoQWZ0ZXJQYWludEVmZmVjdHMpO1xuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5FZmZlY3RIb29rU3RhdGV9IGhvb2tcbiAqL1xuZnVuY3Rpb24gaW52b2tlQ2xlYW51cChob29rKSB7XG5cdC8vIEEgaG9vayBjbGVhbnVwIGNhbiBpbnRyb2R1Y2UgYSBjYWxsIHRvIHJlbmRlciB3aGljaCBjcmVhdGVzIGEgbmV3IHJvb3QsIHRoaXMgd2lsbCBjYWxsIG9wdGlvbnMudm5vZGVcblx0Ly8gYW5kIG1vdmUgdGhlIGN1cnJlbnRDb21wb25lbnQgYXdheS5cblx0Y29uc3QgY29tcCA9IGN1cnJlbnRDb21wb25lbnQ7XG5cdGxldCBjbGVhbnVwID0gaG9vay5fY2xlYW51cDtcblx0aWYgKHR5cGVvZiBjbGVhbnVwID09ICdmdW5jdGlvbicpIHtcblx0XHRob29rLl9jbGVhbnVwID0gdW5kZWZpbmVkO1xuXHRcdGNsZWFudXAoKTtcblx0fVxuXHRjdXJyZW50Q29tcG9uZW50ID0gY29tcDtcbn1cblxuLyoqXG4gKiBJbnZva2UgYSBIb29rJ3MgZWZmZWN0XG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbnRlcm5hbCcpLkVmZmVjdEhvb2tTdGF0ZX0gaG9va1xuICovXG5mdW5jdGlvbiBpbnZva2VFZmZlY3QoaG9vaykge1xuXHQvLyBBIGhvb2sgY2FsbCBjYW4gaW50cm9kdWNlIGEgY2FsbCB0byByZW5kZXIgd2hpY2ggY3JlYXRlcyBhIG5ldyByb290LCB0aGlzIHdpbGwgY2FsbCBvcHRpb25zLnZub2RlXG5cdC8vIGFuZCBtb3ZlIHRoZSBjdXJyZW50Q29tcG9uZW50IGF3YXkuXG5cdGNvbnN0IGNvbXAgPSBjdXJyZW50Q29tcG9uZW50O1xuXHRob29rLl9jbGVhbnVwID0gaG9vay5fdmFsdWUoKTtcblx0Y3VycmVudENvbXBvbmVudCA9IGNvbXA7XG59XG5cbi8qKlxuICogQHBhcmFtIHthbnlbXX0gb2xkQXJnc1xuICogQHBhcmFtIHthbnlbXX0gbmV3QXJnc1xuICovXG5mdW5jdGlvbiBhcmdzQ2hhbmdlZChvbGRBcmdzLCBuZXdBcmdzKSB7XG5cdHJldHVybiAoXG5cdFx0IW9sZEFyZ3MgfHxcblx0XHRvbGRBcmdzLmxlbmd0aCAhPT0gbmV3QXJncy5sZW5ndGggfHxcblx0XHRuZXdBcmdzLnNvbWUoKGFyZywgaW5kZXgpID0+IGFyZyAhPT0gb2xkQXJnc1tpbmRleF0pXG5cdCk7XG59XG5cbmZ1bmN0aW9uIGludm9rZU9yUmV0dXJuKGFyZywgZikge1xuXHRyZXR1cm4gdHlwZW9mIGYgPT0gJ2Z1bmN0aW9uJyA/IGYoYXJnKSA6IGY7XG59XG4iLCAiLyoqXG4gKiBBc3NpZ24gcHJvcGVydGllcyBmcm9tIGBwcm9wc2AgdG8gYG9iamBcbiAqIEB0ZW1wbGF0ZSBPLCBQIFRoZSBvYmogYW5kIHByb3BzIHR5cGVzXG4gKiBAcGFyYW0ge099IG9iaiBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyB0b1xuICogQHBhcmFtIHtQfSBwcm9wcyBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tXG4gKiBAcmV0dXJucyB7TyAmIFB9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NpZ24ob2JqLCBwcm9wcykge1xuXHRmb3IgKGxldCBpIGluIHByb3BzKSBvYmpbaV0gPSBwcm9wc1tpXTtcblx0cmV0dXJuIC8qKiBAdHlwZSB7TyAmIFB9ICovIChvYmopO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIHR3byBvYmplY3RzIGhhdmUgYSBkaWZmZXJlbnQgc2hhcGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBhXG4gKiBAcGFyYW0ge29iamVjdH0gYlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaGFsbG93RGlmZmVycyhhLCBiKSB7XG5cdGZvciAobGV0IGkgaW4gYSkgaWYgKGkgIT09ICdfX3NvdXJjZScgJiYgIShpIGluIGIpKSByZXR1cm4gdHJ1ZTtcblx0Zm9yIChsZXQgaSBpbiBiKSBpZiAoaSAhPT0gJ19fc291cmNlJyAmJiBhW2ldICE9PSBiW2ldKSByZXR1cm4gdHJ1ZTtcblx0cmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlTm9kZShub2RlKSB7XG5cdGxldCBwYXJlbnROb2RlID0gbm9kZS5wYXJlbnROb2RlO1xuXHRpZiAocGFyZW50Tm9kZSkgcGFyZW50Tm9kZS5yZW1vdmVDaGlsZChub2RlKTtcbn1cbiIsICJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdwcmVhY3QnO1xuaW1wb3J0IHsgc2hhbGxvd0RpZmZlcnMgfSBmcm9tICcuL3V0aWwnO1xuXG4vKipcbiAqIENvbXBvbmVudCBjbGFzcyB3aXRoIGEgcHJlZGVmaW5lZCBgc2hvdWxkQ29tcG9uZW50VXBkYXRlYCBpbXBsZW1lbnRhdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gUHVyZUNvbXBvbmVudChwKSB7XG5cdHRoaXMucHJvcHMgPSBwO1xufVxuUHVyZUNvbXBvbmVudC5wcm90b3R5cGUgPSBuZXcgQ29tcG9uZW50KCk7XG4vLyBTb21lIHRoaXJkLXBhcnR5IGxpYnJhcmllcyBjaGVjayBpZiB0aGlzIHByb3BlcnR5IGlzIHByZXNlbnRcblB1cmVDb21wb25lbnQucHJvdG90eXBlLmlzUHVyZVJlYWN0Q29tcG9uZW50ID0gdHJ1ZTtcblB1cmVDb21wb25lbnQucHJvdG90eXBlLnNob3VsZENvbXBvbmVudFVwZGF0ZSA9IGZ1bmN0aW9uKHByb3BzLCBzdGF0ZSkge1xuXHRyZXR1cm4gc2hhbGxvd0RpZmZlcnModGhpcy5wcm9wcywgcHJvcHMpIHx8IHNoYWxsb3dEaWZmZXJzKHRoaXMuc3RhdGUsIHN0YXRlKTtcbn07XG4iLCAiaW1wb3J0IHsgY3JlYXRlRWxlbWVudCB9IGZyb20gJ3ByZWFjdCc7XG5pbXBvcnQgeyBzaGFsbG93RGlmZmVycyB9IGZyb20gJy4vdXRpbCc7XG5cbi8qKlxuICogTWVtb2l6ZSBhIGNvbXBvbmVudCwgc28gdGhhdCBpdCBvbmx5IHVwZGF0ZXMgd2hlbiB0aGUgcHJvcHMgYWN0dWFsbHkgaGF2ZVxuICogY2hhbmdlZC4gVGhpcyB3YXMgcHJldmlvdXNseSBrbm93biBhcyBgUmVhY3QucHVyZWAuXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbnRlcm5hbCcpLkZ1bmN0aW9uQ29tcG9uZW50fSBjIGZ1bmN0aW9uYWwgY29tcG9uZW50XG4gKiBAcGFyYW0geyhwcmV2OiBvYmplY3QsIG5leHQ6IG9iamVjdCkgPT4gYm9vbGVhbn0gW2NvbXBhcmVyXSBDdXN0b20gZXF1YWxpdHkgZnVuY3Rpb25cbiAqIEByZXR1cm5zIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5GdW5jdGlvbkNvbXBvbmVudH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lbW8oYywgY29tcGFyZXIpIHtcblx0ZnVuY3Rpb24gc2hvdWxkVXBkYXRlKG5leHRQcm9wcykge1xuXHRcdGxldCByZWYgPSB0aGlzLnByb3BzLnJlZjtcblx0XHRsZXQgdXBkYXRlUmVmID0gcmVmID09IG5leHRQcm9wcy5yZWY7XG5cdFx0aWYgKCF1cGRhdGVSZWYgJiYgcmVmKSB7XG5cdFx0XHRyZWYuY2FsbCA/IHJlZihudWxsKSA6IChyZWYuY3VycmVudCA9IG51bGwpO1xuXHRcdH1cblxuXHRcdGlmICghY29tcGFyZXIpIHtcblx0XHRcdHJldHVybiBzaGFsbG93RGlmZmVycyh0aGlzLnByb3BzLCBuZXh0UHJvcHMpO1xuXHRcdH1cblxuXHRcdHJldHVybiAhY29tcGFyZXIodGhpcy5wcm9wcywgbmV4dFByb3BzKSB8fCAhdXBkYXRlUmVmO1xuXHR9XG5cblx0ZnVuY3Rpb24gTWVtb2VkKHByb3BzKSB7XG5cdFx0dGhpcy5zaG91bGRDb21wb25lbnRVcGRhdGUgPSBzaG91bGRVcGRhdGU7XG5cdFx0cmV0dXJuIGNyZWF0ZUVsZW1lbnQoYywgcHJvcHMpO1xuXHR9XG5cdE1lbW9lZC5kaXNwbGF5TmFtZSA9ICdNZW1vKCcgKyAoYy5kaXNwbGF5TmFtZSB8fCBjLm5hbWUpICsgJyknO1xuXHRNZW1vZWQucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQgPSB0cnVlO1xuXHRNZW1vZWQuX2ZvcndhcmRlZCA9IHRydWU7XG5cdHJldHVybiBNZW1vZWQ7XG59XG4iLCAiaW1wb3J0IHsgb3B0aW9ucyB9IGZyb20gJ3ByZWFjdCc7XG5pbXBvcnQgeyBhc3NpZ24gfSBmcm9tICcuL3V0aWwnO1xuXG5sZXQgb2xkRGlmZkhvb2sgPSBvcHRpb25zLl9kaWZmO1xub3B0aW9ucy5fZGlmZiA9IHZub2RlID0+IHtcblx0aWYgKHZub2RlLnR5cGUgJiYgdm5vZGUudHlwZS5fZm9yd2FyZGVkICYmIHZub2RlLnJlZikge1xuXHRcdHZub2RlLnByb3BzLnJlZiA9IHZub2RlLnJlZjtcblx0XHR2bm9kZS5yZWYgPSBudWxsO1xuXHR9XG5cdGlmIChvbGREaWZmSG9vaykgb2xkRGlmZkhvb2sodm5vZGUpO1xufTtcblxuZXhwb3J0IGNvbnN0IFJFQUNUX0ZPUldBUkRfU1lNQk9MID1cblx0KHR5cGVvZiBTeW1ib2wgIT0gJ3VuZGVmaW5lZCcgJiZcblx0XHRTeW1ib2wuZm9yICYmXG5cdFx0U3ltYm9sLmZvcigncmVhY3QuZm9yd2FyZF9yZWYnKSkgfHxcblx0MHhmNDc7XG5cbi8qKlxuICogUGFzcyByZWYgZG93biB0byBhIGNoaWxkLiBUaGlzIGlzIG1haW5seSB1c2VkIGluIGxpYnJhcmllcyB3aXRoIEhPQ3MgdGhhdFxuICogd3JhcCBjb21wb25lbnRzLiBVc2luZyBgZm9yd2FyZFJlZmAgdGhlcmUgaXMgYW4gZWFzeSB3YXkgdG8gZ2V0IGEgcmVmZXJlbmNlXG4gKiBvZiB0aGUgd3JhcHBlZCBjb21wb25lbnQgaW5zdGVhZCBvZiBvbmUgb2YgdGhlIHdyYXBwZXIgaXRzZWxmLlxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW5kZXgnKS5Gb3J3YXJkRm59IGZuXG4gKiBAcmV0dXJucyB7aW1wb3J0KCcuL2ludGVybmFsJykuRnVuY3Rpb25Db21wb25lbnR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3J3YXJkUmVmKGZuKSB7XG5cdGZ1bmN0aW9uIEZvcndhcmRlZChwcm9wcykge1xuXHRcdGxldCBjbG9uZSA9IGFzc2lnbih7fSwgcHJvcHMpO1xuXHRcdGRlbGV0ZSBjbG9uZS5yZWY7XG5cdFx0cmV0dXJuIGZuKGNsb25lLCBwcm9wcy5yZWYgfHwgbnVsbCk7XG5cdH1cblxuXHQvLyBtb2J4LXJlYWN0IGNoZWNrcyBmb3IgdGhpcyBiZWluZyBwcmVzZW50XG5cdEZvcndhcmRlZC4kJHR5cGVvZiA9IFJFQUNUX0ZPUldBUkRfU1lNQk9MO1xuXHQvLyBtb2J4LXJlYWN0IGhlYXZpbHkgcmVsaWVzIG9uIGltcGxlbWVudGF0aW9uIGRldGFpbHMuXG5cdC8vIEl0IGV4cGVjdHMgYW4gb2JqZWN0IGhlcmUgd2l0aCBhIGByZW5kZXJgIHByb3BlcnR5LFxuXHQvLyBhbmQgcHJvdG90eXBlLnJlbmRlciB3aWxsIGZhaWwuIFdpdGhvdXQgdGhpc1xuXHQvLyBtb2J4LXJlYWN0IHRocm93cy5cblx0Rm9yd2FyZGVkLnJlbmRlciA9IEZvcndhcmRlZDtcblxuXHRGb3J3YXJkZWQucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQgPSBGb3J3YXJkZWQuX2ZvcndhcmRlZCA9IHRydWU7XG5cdEZvcndhcmRlZC5kaXNwbGF5TmFtZSA9ICdGb3J3YXJkUmVmKCcgKyAoZm4uZGlzcGxheU5hbWUgfHwgZm4ubmFtZSkgKyAnKSc7XG5cdHJldHVybiBGb3J3YXJkZWQ7XG59XG4iLCAiaW1wb3J0IHsgdG9DaGlsZEFycmF5IH0gZnJvbSAncHJlYWN0JztcblxuY29uc3QgbWFwRm4gPSAoY2hpbGRyZW4sIGZuKSA9PiB7XG5cdGlmIChjaGlsZHJlbiA9PSBudWxsKSByZXR1cm4gbnVsbDtcblx0cmV0dXJuIHRvQ2hpbGRBcnJheSh0b0NoaWxkQXJyYXkoY2hpbGRyZW4pLm1hcChmbikpO1xufTtcblxuLy8gVGhpcyBBUEkgaXMgY29tcGxldGVseSB1bm5lY2Vzc2FyeSBmb3IgUHJlYWN0LCBzbyBpdCdzIGJhc2ljYWxseSBwYXNzdGhyb3VnaC5cbmV4cG9ydCBjb25zdCBDaGlsZHJlbiA9IHtcblx0bWFwOiBtYXBGbixcblx0Zm9yRWFjaDogbWFwRm4sXG5cdGNvdW50KGNoaWxkcmVuKSB7XG5cdFx0cmV0dXJuIGNoaWxkcmVuID8gdG9DaGlsZEFycmF5KGNoaWxkcmVuKS5sZW5ndGggOiAwO1xuXHR9LFxuXHRvbmx5KGNoaWxkcmVuKSB7XG5cdFx0Y29uc3Qgbm9ybWFsaXplZCA9IHRvQ2hpbGRBcnJheShjaGlsZHJlbik7XG5cdFx0aWYgKG5vcm1hbGl6ZWQubGVuZ3RoICE9PSAxKSB0aHJvdyAnQ2hpbGRyZW4ub25seSc7XG5cdFx0cmV0dXJuIG5vcm1hbGl6ZWRbMF07XG5cdH0sXG5cdHRvQXJyYXk6IHRvQ2hpbGRBcnJheVxufTtcbiIsICJpbXBvcnQgeyBDb21wb25lbnQsIGNyZWF0ZUVsZW1lbnQsIG9wdGlvbnMsIEZyYWdtZW50IH0gZnJvbSAncHJlYWN0JztcbmltcG9ydCB7IGFzc2lnbiB9IGZyb20gJy4vdXRpbCc7XG5cbmNvbnN0IG9sZENhdGNoRXJyb3IgPSBvcHRpb25zLl9jYXRjaEVycm9yO1xub3B0aW9ucy5fY2F0Y2hFcnJvciA9IGZ1bmN0aW9uKGVycm9yLCBuZXdWTm9kZSwgb2xkVk5vZGUsIGVycm9ySW5mbykge1xuXHRpZiAoZXJyb3IudGhlbikge1xuXHRcdC8qKiBAdHlwZSB7aW1wb3J0KCcuL2ludGVybmFsJykuQ29tcG9uZW50fSAqL1xuXHRcdGxldCBjb21wb25lbnQ7XG5cdFx0bGV0IHZub2RlID0gbmV3Vk5vZGU7XG5cblx0XHRmb3IgKDsgKHZub2RlID0gdm5vZGUuX3BhcmVudCk7ICkge1xuXHRcdFx0aWYgKChjb21wb25lbnQgPSB2bm9kZS5fY29tcG9uZW50KSAmJiBjb21wb25lbnQuX2NoaWxkRGlkU3VzcGVuZCkge1xuXHRcdFx0XHRpZiAobmV3Vk5vZGUuX2RvbSA9PSBudWxsKSB7XG5cdFx0XHRcdFx0bmV3Vk5vZGUuX2RvbSA9IG9sZFZOb2RlLl9kb207XG5cdFx0XHRcdFx0bmV3Vk5vZGUuX2NoaWxkcmVuID0gb2xkVk5vZGUuX2NoaWxkcmVuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIERvbid0IGNhbGwgb2xkQ2F0Y2hFcnJvciBpZiB3ZSBmb3VuZCBhIFN1c3BlbnNlXG5cdFx0XHRcdHJldHVybiBjb21wb25lbnQuX2NoaWxkRGlkU3VzcGVuZChlcnJvciwgbmV3Vk5vZGUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRvbGRDYXRjaEVycm9yKGVycm9yLCBuZXdWTm9kZSwgb2xkVk5vZGUsIGVycm9ySW5mbyk7XG59O1xuXG5jb25zdCBvbGRVbm1vdW50ID0gb3B0aW9ucy51bm1vdW50O1xub3B0aW9ucy51bm1vdW50ID0gZnVuY3Rpb24odm5vZGUpIHtcblx0LyoqIEB0eXBlIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5Db21wb25lbnR9ICovXG5cdGNvbnN0IGNvbXBvbmVudCA9IHZub2RlLl9jb21wb25lbnQ7XG5cdGlmIChjb21wb25lbnQgJiYgY29tcG9uZW50Ll9vblJlc29sdmUpIHtcblx0XHRjb21wb25lbnQuX29uUmVzb2x2ZSgpO1xuXHR9XG5cblx0Ly8gaWYgdGhlIGNvbXBvbmVudCBpcyBzdGlsbCBoeWRyYXRpbmdcblx0Ly8gbW9zdCBsaWtlbHkgaXQgaXMgYmVjYXVzZSB0aGUgY29tcG9uZW50IGlzIHN1c3BlbmRlZFxuXHQvLyB3ZSBzZXQgdGhlIHZub2RlLnR5cGUgYXMgYG51bGxgIHNvIHRoYXQgaXQgaXMgbm90IGEgdHlwZW9mIGZ1bmN0aW9uXG5cdC8vIHNvIHRoZSB1bm1vdW50IHdpbGwgcmVtb3ZlIHRoZSB2bm9kZS5fZG9tXG5cdGlmIChjb21wb25lbnQgJiYgdm5vZGUuX2h5ZHJhdGluZyA9PT0gdHJ1ZSkge1xuXHRcdHZub2RlLnR5cGUgPSBudWxsO1xuXHR9XG5cblx0aWYgKG9sZFVubW91bnQpIG9sZFVubW91bnQodm5vZGUpO1xufTtcblxuZnVuY3Rpb24gZGV0YWNoZWRDbG9uZSh2bm9kZSwgZGV0YWNoZWRQYXJlbnQsIHBhcmVudERvbSkge1xuXHRpZiAodm5vZGUpIHtcblx0XHRpZiAodm5vZGUuX2NvbXBvbmVudCAmJiB2bm9kZS5fY29tcG9uZW50Ll9faG9va3MpIHtcblx0XHRcdHZub2RlLl9jb21wb25lbnQuX19ob29rcy5fbGlzdC5mb3JFYWNoKGVmZmVjdCA9PiB7XG5cdFx0XHRcdGlmICh0eXBlb2YgZWZmZWN0Ll9jbGVhbnVwID09ICdmdW5jdGlvbicpIGVmZmVjdC5fY2xlYW51cCgpO1xuXHRcdFx0fSk7XG5cblx0XHRcdHZub2RlLl9jb21wb25lbnQuX19ob29rcyA9IG51bGw7XG5cdFx0fVxuXG5cdFx0dm5vZGUgPSBhc3NpZ24oe30sIHZub2RlKTtcblx0XHRpZiAodm5vZGUuX2NvbXBvbmVudCAhPSBudWxsKSB7XG5cdFx0XHRpZiAodm5vZGUuX2NvbXBvbmVudC5fcGFyZW50RG9tID09PSBwYXJlbnREb20pIHtcblx0XHRcdFx0dm5vZGUuX2NvbXBvbmVudC5fcGFyZW50RG9tID0gZGV0YWNoZWRQYXJlbnQ7XG5cdFx0XHR9XG5cdFx0XHR2bm9kZS5fY29tcG9uZW50ID0gbnVsbDtcblx0XHR9XG5cblx0XHR2bm9kZS5fY2hpbGRyZW4gPVxuXHRcdFx0dm5vZGUuX2NoaWxkcmVuICYmXG5cdFx0XHR2bm9kZS5fY2hpbGRyZW4ubWFwKGNoaWxkID0+XG5cdFx0XHRcdGRldGFjaGVkQ2xvbmUoY2hpbGQsIGRldGFjaGVkUGFyZW50LCBwYXJlbnREb20pXG5cdFx0XHQpO1xuXHR9XG5cblx0cmV0dXJuIHZub2RlO1xufVxuXG5mdW5jdGlvbiByZW1vdmVPcmlnaW5hbCh2bm9kZSwgZGV0YWNoZWRQYXJlbnQsIG9yaWdpbmFsUGFyZW50KSB7XG5cdGlmICh2bm9kZSkge1xuXHRcdHZub2RlLl9vcmlnaW5hbCA9IG51bGw7XG5cdFx0dm5vZGUuX2NoaWxkcmVuID1cblx0XHRcdHZub2RlLl9jaGlsZHJlbiAmJlxuXHRcdFx0dm5vZGUuX2NoaWxkcmVuLm1hcChjaGlsZCA9PlxuXHRcdFx0XHRyZW1vdmVPcmlnaW5hbChjaGlsZCwgZGV0YWNoZWRQYXJlbnQsIG9yaWdpbmFsUGFyZW50KVxuXHRcdFx0KTtcblxuXHRcdGlmICh2bm9kZS5fY29tcG9uZW50KSB7XG5cdFx0XHRpZiAodm5vZGUuX2NvbXBvbmVudC5fcGFyZW50RG9tID09PSBkZXRhY2hlZFBhcmVudCkge1xuXHRcdFx0XHRpZiAodm5vZGUuX2RvbSkge1xuXHRcdFx0XHRcdG9yaWdpbmFsUGFyZW50Lmluc2VydEJlZm9yZSh2bm9kZS5fZG9tLCB2bm9kZS5fbmV4dERvbSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dm5vZGUuX2NvbXBvbmVudC5fZm9yY2UgPSB0cnVlO1xuXHRcdFx0XHR2bm9kZS5fY29tcG9uZW50Ll9wYXJlbnREb20gPSBvcmlnaW5hbFBhcmVudDtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdm5vZGU7XG59XG5cbi8vIGhhdmluZyBjdXN0b20gaW5oZXJpdGFuY2UgaW5zdGVhZCBvZiBhIGNsYXNzIGhlcmUgc2F2ZXMgYSBsb3Qgb2YgYnl0ZXNcbmV4cG9ydCBmdW5jdGlvbiBTdXNwZW5zZSgpIHtcblx0Ly8gd2UgZG8gbm90IGNhbGwgc3VwZXIgaGVyZSB0byBnb2xmIHNvbWUgYnl0ZXMuLi5cblx0dGhpcy5fcGVuZGluZ1N1c3BlbnNpb25Db3VudCA9IDA7XG5cdHRoaXMuX3N1c3BlbmRlcnMgPSBudWxsO1xuXHR0aGlzLl9kZXRhY2hPbk5leHRSZW5kZXIgPSBudWxsO1xufVxuXG4vLyBUaGluZ3Mgd2UgZG8gaGVyZSB0byBzYXZlIHNvbWUgYnl0ZXMgYnV0IGFyZSBub3QgcHJvcGVyIEpTIGluaGVyaXRhbmNlOlxuLy8gLSBjYWxsIGBuZXcgQ29tcG9uZW50KClgIGFzIHRoZSBwcm90b3R5cGVcbi8vIC0gZG8gbm90IHNldCBgU3VzcGVuc2UucHJvdG90eXBlLmNvbnN0cnVjdG9yYCB0byBgU3VzcGVuc2VgXG5TdXNwZW5zZS5wcm90b3R5cGUgPSBuZXcgQ29tcG9uZW50KCk7XG5cbi8qKlxuICogQHRoaXMge2ltcG9ydCgnLi9pbnRlcm5hbCcpLlN1c3BlbnNlQ29tcG9uZW50fVxuICogQHBhcmFtIHtQcm9taXNlfSBwcm9taXNlIFRoZSB0aHJvd24gcHJvbWlzZVxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5WTm9kZTxhbnksIGFueT59IHN1c3BlbmRpbmdWTm9kZSBUaGUgc3VzcGVuZGluZyBjb21wb25lbnRcbiAqL1xuU3VzcGVuc2UucHJvdG90eXBlLl9jaGlsZERpZFN1c3BlbmQgPSBmdW5jdGlvbihwcm9taXNlLCBzdXNwZW5kaW5nVk5vZGUpIHtcblx0Y29uc3Qgc3VzcGVuZGluZ0NvbXBvbmVudCA9IHN1c3BlbmRpbmdWTm9kZS5fY29tcG9uZW50O1xuXG5cdC8qKiBAdHlwZSB7aW1wb3J0KCcuL2ludGVybmFsJykuU3VzcGVuc2VDb21wb25lbnR9ICovXG5cdGNvbnN0IGMgPSB0aGlzO1xuXG5cdGlmIChjLl9zdXNwZW5kZXJzID09IG51bGwpIHtcblx0XHRjLl9zdXNwZW5kZXJzID0gW107XG5cdH1cblx0Yy5fc3VzcGVuZGVycy5wdXNoKHN1c3BlbmRpbmdDb21wb25lbnQpO1xuXG5cdGNvbnN0IHJlc29sdmUgPSBzdXNwZW5kZWQoYy5fdm5vZGUpO1xuXG5cdGxldCByZXNvbHZlZCA9IGZhbHNlO1xuXHRjb25zdCBvblJlc29sdmVkID0gKCkgPT4ge1xuXHRcdGlmIChyZXNvbHZlZCkgcmV0dXJuO1xuXG5cdFx0cmVzb2x2ZWQgPSB0cnVlO1xuXHRcdHN1c3BlbmRpbmdDb21wb25lbnQuX29uUmVzb2x2ZSA9IG51bGw7XG5cblx0XHRpZiAocmVzb2x2ZSkge1xuXHRcdFx0cmVzb2x2ZShvblN1c3BlbnNpb25Db21wbGV0ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9uU3VzcGVuc2lvbkNvbXBsZXRlKCk7XG5cdFx0fVxuXHR9O1xuXG5cdHN1c3BlbmRpbmdDb21wb25lbnQuX29uUmVzb2x2ZSA9IG9uUmVzb2x2ZWQ7XG5cblx0Y29uc3Qgb25TdXNwZW5zaW9uQ29tcGxldGUgPSAoKSA9PiB7XG5cdFx0aWYgKCEtLWMuX3BlbmRpbmdTdXNwZW5zaW9uQ291bnQpIHtcblx0XHRcdC8vIElmIHRoZSBzdXNwZW5zaW9uIHdhcyBkdXJpbmcgaHlkcmF0aW9uIHdlIGRvbid0IG5lZWQgdG8gcmVzdG9yZSB0aGVcblx0XHRcdC8vIHN1c3BlbmRlZCBjaGlsZHJlbiBpbnRvIHRoZSBfY2hpbGRyZW4gYXJyYXlcblx0XHRcdGlmIChjLnN0YXRlLl9zdXNwZW5kZWQpIHtcblx0XHRcdFx0Y29uc3Qgc3VzcGVuZGVkVk5vZGUgPSBjLnN0YXRlLl9zdXNwZW5kZWQ7XG5cdFx0XHRcdGMuX3Zub2RlLl9jaGlsZHJlblswXSA9IHJlbW92ZU9yaWdpbmFsKFxuXHRcdFx0XHRcdHN1c3BlbmRlZFZOb2RlLFxuXHRcdFx0XHRcdHN1c3BlbmRlZFZOb2RlLl9jb21wb25lbnQuX3BhcmVudERvbSxcblx0XHRcdFx0XHRzdXNwZW5kZWRWTm9kZS5fY29tcG9uZW50Ll9vcmlnaW5hbFBhcmVudERvbVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHRjLnNldFN0YXRlKHsgX3N1c3BlbmRlZDogKGMuX2RldGFjaE9uTmV4dFJlbmRlciA9IG51bGwpIH0pO1xuXG5cdFx0XHRsZXQgc3VzcGVuZGVkO1xuXHRcdFx0d2hpbGUgKChzdXNwZW5kZWQgPSBjLl9zdXNwZW5kZXJzLnBvcCgpKSkge1xuXHRcdFx0XHRzdXNwZW5kZWQuZm9yY2VVcGRhdGUoKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0LyoqXG5cdCAqIFdlIGRvIG5vdCBzZXQgYHN1c3BlbmRlZDogdHJ1ZWAgZHVyaW5nIGh5ZHJhdGlvbiBiZWNhdXNlIHdlIHdhbnQgdGhlIGFjdHVhbCBtYXJrdXBcblx0ICogdG8gcmVtYWluIG9uIHNjcmVlbiBhbmQgaHlkcmF0ZSBpdCB3aGVuIHRoZSBzdXNwZW5zZSBhY3R1YWxseSBnZXRzIHJlc29sdmVkLlxuXHQgKiBXaGlsZSBpbiBub24taHlkcmF0aW9uIGNhc2VzIHRoZSB1c3VhbCBmYWxsYmFjayAtPiBjb21wb25lbnQgZmxvdyB3b3VsZCBvY2NvdXIuXG5cdCAqL1xuXHRjb25zdCB3YXNIeWRyYXRpbmcgPSBzdXNwZW5kaW5nVk5vZGUuX2h5ZHJhdGluZyA9PT0gdHJ1ZTtcblx0aWYgKCFjLl9wZW5kaW5nU3VzcGVuc2lvbkNvdW50KysgJiYgIXdhc0h5ZHJhdGluZykge1xuXHRcdGMuc2V0U3RhdGUoeyBfc3VzcGVuZGVkOiAoYy5fZGV0YWNoT25OZXh0UmVuZGVyID0gYy5fdm5vZGUuX2NoaWxkcmVuWzBdKSB9KTtcblx0fVxuXHRwcm9taXNlLnRoZW4ob25SZXNvbHZlZCwgb25SZXNvbHZlZCk7XG59O1xuXG5TdXNwZW5zZS5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbigpIHtcblx0dGhpcy5fc3VzcGVuZGVycyA9IFtdO1xufTtcblxuLyoqXG4gKiBAdGhpcyB7aW1wb3J0KCcuL2ludGVybmFsJykuU3VzcGVuc2VDb21wb25lbnR9XG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbnRlcm5hbCcpLlN1c3BlbnNlQ29tcG9uZW50W1wicHJvcHNcIl19IHByb3BzXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbnRlcm5hbCcpLlN1c3BlbnNlU3RhdGV9IHN0YXRlXG4gKi9cblN1c3BlbnNlLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbihwcm9wcywgc3RhdGUpIHtcblx0aWYgKHRoaXMuX2RldGFjaE9uTmV4dFJlbmRlcikge1xuXHRcdC8vIFdoZW4gdGhlIFN1c3BlbnNlJ3MgX3Zub2RlIHdhcyBjcmVhdGVkIGJ5IGEgY2FsbCB0byBjcmVhdGVWTm9kZVxuXHRcdC8vIChpLmUuIGR1ZSB0byBhIHNldFN0YXRlIGZ1cnRoZXIgdXAgaW4gdGhlIHRyZWUpXG5cdFx0Ly8gaXQncyBfY2hpbGRyZW4gcHJvcCBpcyBudWxsLCBpbiB0aGlzIGNhc2Ugd2UgXCJmb3JnZXRcIiBhYm91dCB0aGUgcGFya2VkIHZub2RlcyB0byBkZXRhY2hcblx0XHRpZiAodGhpcy5fdm5vZGUuX2NoaWxkcmVuKSB7XG5cdFx0XHRjb25zdCBkZXRhY2hlZFBhcmVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXHRcdFx0Y29uc3QgZGV0YWNoZWRDb21wb25lbnQgPSB0aGlzLl92bm9kZS5fY2hpbGRyZW5bMF0uX2NvbXBvbmVudDtcblx0XHRcdHRoaXMuX3Zub2RlLl9jaGlsZHJlblswXSA9IGRldGFjaGVkQ2xvbmUoXG5cdFx0XHRcdHRoaXMuX2RldGFjaE9uTmV4dFJlbmRlcixcblx0XHRcdFx0ZGV0YWNoZWRQYXJlbnQsXG5cdFx0XHRcdChkZXRhY2hlZENvbXBvbmVudC5fb3JpZ2luYWxQYXJlbnREb20gPSBkZXRhY2hlZENvbXBvbmVudC5fcGFyZW50RG9tKVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHR0aGlzLl9kZXRhY2hPbk5leHRSZW5kZXIgPSBudWxsO1xuXHR9XG5cblx0Ly8gV3JhcCBmYWxsYmFjayB0cmVlIGluIGEgVk5vZGUgdGhhdCBwcmV2ZW50cyBpdHNlbGYgZnJvbSBiZWluZyBtYXJrZWQgYXMgYWJvcnRpbmcgbWlkLWh5ZHJhdGlvbjpcblx0LyoqIEB0eXBlIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5WTm9kZX0gKi9cblx0Y29uc3QgZmFsbGJhY2sgPVxuXHRcdHN0YXRlLl9zdXNwZW5kZWQgJiYgY3JlYXRlRWxlbWVudChGcmFnbWVudCwgbnVsbCwgcHJvcHMuZmFsbGJhY2spO1xuXHRpZiAoZmFsbGJhY2spIGZhbGxiYWNrLl9oeWRyYXRpbmcgPSBudWxsO1xuXG5cdHJldHVybiBbXG5cdFx0Y3JlYXRlRWxlbWVudChGcmFnbWVudCwgbnVsbCwgc3RhdGUuX3N1c3BlbmRlZCA/IG51bGwgOiBwcm9wcy5jaGlsZHJlbiksXG5cdFx0ZmFsbGJhY2tcblx0XTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIGFuZCBjYWxscyB0aGUgcGFyZW50IGNvbXBvbmVudCdzIF9zdXNwZW5kZWQgbWV0aG9kLCBwYXNzaW5nIGluIHRoZVxuICogc3VzcGVuZGVkIHZub2RlLiBUaGlzIGlzIGEgd2F5IGZvciBhIHBhcmVudCAoZS5nLiBTdXNwZW5zZUxpc3QpIHRvIGdldCBub3RpZmllZFxuICogdGhhdCBvbmUgb2YgaXRzIGNoaWxkcmVuL2Rlc2NlbmRhbnRzIHN1c3BlbmRlZC5cbiAqXG4gKiBUaGUgcGFyZW50IE1BWSByZXR1cm4gYSBjYWxsYmFjay4gVGhlIGNhbGxiYWNrIHdpbGwgZ2V0IGNhbGxlZCB3aGVuIHRoZVxuICogc3VzcGVuc2lvbiByZXNvbHZlcywgbm90aWZ5aW5nIHRoZSBwYXJlbnQgb2YgdGhlIGZhY3QuXG4gKiBNb3Jlb3ZlciwgdGhlIGNhbGxiYWNrIGdldHMgZnVuY3Rpb24gYHVuc3VzcGVuZGAgYXMgYSBwYXJhbWV0ZXIuIFRoZSByZXNvbHZlZFxuICogY2hpbGQgZGVzY2VuZGFudCB3aWxsIG5vdCBhY3R1YWxseSBnZXQgdW5zdXNwZW5kZWQgdW50aWwgYHVuc3VzcGVuZGAgZ2V0cyBjYWxsZWQuXG4gKiBUaGlzIGlzIGEgd2F5IGZvciB0aGUgcGFyZW50IHRvIGRlbGF5IHVuc3VzcGVuZGluZy5cbiAqXG4gKiBJZiB0aGUgcGFyZW50IGRvZXMgbm90IHJldHVybiBhIGNhbGxiYWNrIHRoZW4gdGhlIHJlc29sdmVkIHZub2RlXG4gKiBnZXRzIHVuc3VzcGVuZGVkIGltbWVkaWF0ZWx5IHdoZW4gaXQgcmVzb2x2ZXMuXG4gKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5WTm9kZX0gdm5vZGVcbiAqIEByZXR1cm5zIHsoKHVuc3VzcGVuZDogKCkgPT4gdm9pZCkgPT4gdm9pZCk/fVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3VzcGVuZGVkKHZub2RlKSB7XG5cdC8qKiBAdHlwZSB7aW1wb3J0KCcuL2ludGVybmFsJykuQ29tcG9uZW50fSAqL1xuXHRsZXQgY29tcG9uZW50ID0gdm5vZGUuX3BhcmVudC5fY29tcG9uZW50O1xuXHRyZXR1cm4gY29tcG9uZW50ICYmIGNvbXBvbmVudC5fc3VzcGVuZGVkICYmIGNvbXBvbmVudC5fc3VzcGVuZGVkKHZub2RlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhenkobG9hZGVyKSB7XG5cdGxldCBwcm9tO1xuXHRsZXQgY29tcG9uZW50O1xuXHRsZXQgZXJyb3I7XG5cblx0ZnVuY3Rpb24gTGF6eShwcm9wcykge1xuXHRcdGlmICghcHJvbSkge1xuXHRcdFx0cHJvbSA9IGxvYWRlcigpO1xuXHRcdFx0cHJvbS50aGVuKFxuXHRcdFx0XHRleHBvcnRzID0+IHtcblx0XHRcdFx0XHRjb21wb25lbnQgPSBleHBvcnRzLmRlZmF1bHQgfHwgZXhwb3J0cztcblx0XHRcdFx0fSxcblx0XHRcdFx0ZSA9PiB7XG5cdFx0XHRcdFx0ZXJyb3IgPSBlO1xuXHRcdFx0XHR9XG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGlmIChlcnJvcikge1xuXHRcdFx0dGhyb3cgZXJyb3I7XG5cdFx0fVxuXG5cdFx0aWYgKCFjb21wb25lbnQpIHtcblx0XHRcdHRocm93IHByb207XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNyZWF0ZUVsZW1lbnQoY29tcG9uZW50LCBwcm9wcyk7XG5cdH1cblxuXHRMYXp5LmRpc3BsYXlOYW1lID0gJ0xhenknO1xuXHRMYXp5Ll9mb3J3YXJkZWQgPSB0cnVlO1xuXHRyZXR1cm4gTGF6eTtcbn1cbiIsICJpbXBvcnQgeyBDb21wb25lbnQsIHRvQ2hpbGRBcnJheSB9IGZyb20gJ3ByZWFjdCc7XG5pbXBvcnQgeyBzdXNwZW5kZWQgfSBmcm9tICcuL3N1c3BlbnNlLmpzJztcblxuLy8gSW5kZXhlcyB0byBsaW5rZWQgbGlzdCBub2RlcyAobm9kZXMgYXJlIHN0b3JlZCBhcyBhcnJheXMgdG8gc2F2ZSBieXRlcykuXG5jb25zdCBTVVNQRU5ERURfQ09VTlQgPSAwO1xuY29uc3QgUkVTT0xWRURfQ09VTlQgPSAxO1xuY29uc3QgTkVYVF9OT0RFID0gMjtcblxuLy8gSGF2aW5nIGN1c3RvbSBpbmhlcml0YW5jZSBpbnN0ZWFkIG9mIGEgY2xhc3MgaGVyZSBzYXZlcyBhIGxvdCBvZiBieXRlcy5cbmV4cG9ydCBmdW5jdGlvbiBTdXNwZW5zZUxpc3QoKSB7XG5cdHRoaXMuX25leHQgPSBudWxsO1xuXHR0aGlzLl9tYXAgPSBudWxsO1xufVxuXG4vLyBNYXJrIG9uZSBvZiBjaGlsZCdzIGVhcmxpZXIgc3VzcGVuc2lvbnMgYXMgcmVzb2x2ZWQuXG4vLyBTb21lIHBlbmRpbmcgY2FsbGJhY2tzIG1heSBiZWNvbWUgY2FsbGFibGUgZHVlIHRvIHRoaXNcbi8vIChlLmcuIHRoZSBsYXN0IHN1c3BlbmRlZCBkZXNjZW5kYW50IGdldHMgcmVzb2x2ZWQgd2hlblxuLy8gcmV2ZWFsT3JkZXIgPT09ICd0b2dldGhlcicpLiBQcm9jZXNzIHRob3NlIGNhbGxiYWNrcyBhcyB3ZWxsLlxuY29uc3QgcmVzb2x2ZSA9IChsaXN0LCBjaGlsZCwgbm9kZSkgPT4ge1xuXHRpZiAoKytub2RlW1JFU09MVkVEX0NPVU5UXSA9PT0gbm9kZVtTVVNQRU5ERURfQ09VTlRdKSB7XG5cdFx0Ly8gVGhlIG51bWJlciBhIGNoaWxkIChvciBhbnkgb2YgaXRzIGRlc2NlbmRhbnRzKSBoYXMgYmVlbiBzdXNwZW5kZWRcblx0XHQvLyBtYXRjaGVzIHRoZSBudW1iZXIgb2YgdGltZXMgaXQncyBiZWVuIHJlc29sdmVkLiBUaGVyZWZvcmUgd2Vcblx0XHQvLyBtYXJrIHRoZSBjaGlsZCBhcyBjb21wbGV0ZWx5IHJlc29sdmVkIGJ5IGRlbGV0aW5nIGl0IGZyb20gLl9tYXAuXG5cdFx0Ly8gVGhpcyBpcyB1c2VkIHRvIGZpZ3VyZSBvdXQgd2hlbiAqYWxsKiBjaGlsZHJlbiBoYXZlIGJlZW4gY29tcGxldGVseVxuXHRcdC8vIHJlc29sdmVkIHdoZW4gcmV2ZWFsT3JkZXIgaXMgJ3RvZ2V0aGVyJy5cblx0XHRsaXN0Ll9tYXAuZGVsZXRlKGNoaWxkKTtcblx0fVxuXG5cdC8vIElmIHJldmVhbE9yZGVyIGlzIGZhbHN5IHRoZW4gd2UgY2FuIGRvIGFuIGVhcmx5IGV4aXQsIGFzIHRoZVxuXHQvLyBjYWxsYmFja3Mgd29uJ3QgZ2V0IHF1ZXVlZCBpbiB0aGUgbm9kZSBhbnl3YXkuXG5cdC8vIElmIHJldmVhbE9yZGVyIGlzICd0b2dldGhlcicgdGhlbiBhbHNvIGRvIGFuIGVhcmx5IGV4aXRcblx0Ly8gaWYgYWxsIHN1c3BlbmRlZCBkZXNjZW5kYW50cyBoYXZlIG5vdCB5ZXQgYmVlbiByZXNvbHZlZC5cblx0aWYgKFxuXHRcdCFsaXN0LnByb3BzLnJldmVhbE9yZGVyIHx8XG5cdFx0KGxpc3QucHJvcHMucmV2ZWFsT3JkZXJbMF0gPT09ICd0JyAmJiBsaXN0Ll9tYXAuc2l6ZSlcblx0KSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gV2FsayB0aGUgY3VycmVudGx5IHN1c3BlbmRlZCBjaGlsZHJlbiBpbiBvcmRlciwgY2FsbGluZyB0aGVpclxuXHQvLyBzdG9yZWQgY2FsbGJhY2tzIG9uIHRoZSB3YXkuIFN0b3AgaWYgd2UgZW5jb3VudGVyIGEgY2hpbGQgdGhhdFxuXHQvLyBoYXMgbm90IGJlZW4gY29tcGxldGVseSByZXNvbHZlZCB5ZXQuXG5cdG5vZGUgPSBsaXN0Ll9uZXh0O1xuXHR3aGlsZSAobm9kZSkge1xuXHRcdHdoaWxlIChub2RlLmxlbmd0aCA+IDMpIHtcblx0XHRcdG5vZGUucG9wKCkoKTtcblx0XHR9XG5cdFx0aWYgKG5vZGVbUkVTT0xWRURfQ09VTlRdIDwgbm9kZVtTVVNQRU5ERURfQ09VTlRdKSB7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cdFx0bGlzdC5fbmV4dCA9IG5vZGUgPSBub2RlW05FWFRfTk9ERV07XG5cdH1cbn07XG5cbi8vIFRoaW5ncyB3ZSBkbyBoZXJlIHRvIHNhdmUgc29tZSBieXRlcyBidXQgYXJlIG5vdCBwcm9wZXIgSlMgaW5oZXJpdGFuY2U6XG4vLyAtIGNhbGwgYG5ldyBDb21wb25lbnQoKWAgYXMgdGhlIHByb3RvdHlwZVxuLy8gLSBkbyBub3Qgc2V0IGBTdXNwZW5zZS5wcm90b3R5cGUuY29uc3RydWN0b3JgIHRvIGBTdXNwZW5zZWBcblN1c3BlbnNlTGlzdC5wcm90b3R5cGUgPSBuZXcgQ29tcG9uZW50KCk7XG5cblN1c3BlbnNlTGlzdC5wcm90b3R5cGUuX3N1c3BlbmRlZCA9IGZ1bmN0aW9uKGNoaWxkKSB7XG5cdGNvbnN0IGxpc3QgPSB0aGlzO1xuXHRjb25zdCBkZWxlZ2F0ZWQgPSBzdXNwZW5kZWQobGlzdC5fdm5vZGUpO1xuXG5cdGxldCBub2RlID0gbGlzdC5fbWFwLmdldChjaGlsZCk7XG5cdG5vZGVbU1VTUEVOREVEX0NPVU5UXSsrO1xuXG5cdHJldHVybiB1bnN1c3BlbmQgPT4ge1xuXHRcdGNvbnN0IHdyYXBwZWRVbnN1c3BlbmQgPSAoKSA9PiB7XG5cdFx0XHRpZiAoIWxpc3QucHJvcHMucmV2ZWFsT3JkZXIpIHtcblx0XHRcdFx0Ly8gU3BlY2lhbCBjYXNlIHRoZSB1bmRlZmluZWQgKGZhbHN5KSByZXZlYWxPcmRlciwgYXMgdGhlcmVcblx0XHRcdFx0Ly8gaXMgbm8gbmVlZCB0byBjb29yZGluYXRlIGEgc3BlY2lmaWMgb3JkZXIgb3IgdW5zdXNwZW5kcy5cblx0XHRcdFx0dW5zdXNwZW5kKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRub2RlLnB1c2godW5zdXNwZW5kKTtcblx0XHRcdFx0cmVzb2x2ZShsaXN0LCBjaGlsZCwgbm9kZSk7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRpZiAoZGVsZWdhdGVkKSB7XG5cdFx0XHRkZWxlZ2F0ZWQod3JhcHBlZFVuc3VzcGVuZCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHdyYXBwZWRVbnN1c3BlbmQoKTtcblx0XHR9XG5cdH07XG59O1xuXG5TdXNwZW5zZUxpc3QucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uKHByb3BzKSB7XG5cdHRoaXMuX25leHQgPSBudWxsO1xuXHR0aGlzLl9tYXAgPSBuZXcgTWFwKCk7XG5cblx0Y29uc3QgY2hpbGRyZW4gPSB0b0NoaWxkQXJyYXkocHJvcHMuY2hpbGRyZW4pO1xuXHRpZiAocHJvcHMucmV2ZWFsT3JkZXIgJiYgcHJvcHMucmV2ZWFsT3JkZXJbMF0gPT09ICdiJykge1xuXHRcdC8vIElmIG9yZGVyID09PSAnYmFja3dhcmRzJyAob3IsIHdlbGwsIGFueXRoaW5nIHN0YXJ0aW5nIHdpdGggYSAnYicpXG5cdFx0Ly8gdGhlbiBmbGlwIHRoZSBjaGlsZCBsaXN0IGFyb3VuZCBzbyB0aGF0IHRoZSBsYXN0IGNoaWxkIHdpbGwgYmVcblx0XHQvLyB0aGUgZmlyc3QgaW4gdGhlIGxpbmtlZCBsaXN0LlxuXHRcdGNoaWxkcmVuLnJldmVyc2UoKTtcblx0fVxuXHQvLyBCdWlsZCB0aGUgbGlua2VkIGxpc3QuIEl0ZXJhdGUgdGhyb3VnaCB0aGUgY2hpbGRyZW4gaW4gcmV2ZXJzZSBvcmRlclxuXHQvLyBzbyB0aGF0IGBfbmV4dGAgcG9pbnRzIHRvIHRoZSBmaXJzdCBsaW5rZWQgbGlzdCBub2RlIHRvIGJlIHJlc29sdmVkLlxuXHRmb3IgKGxldCBpID0gY2hpbGRyZW4ubGVuZ3RoOyBpLS07ICkge1xuXHRcdC8vIENyZWF0ZSBhIG5ldyBsaW5rZWQgbGlzdCBub2RlIGFzIGFuIGFycmF5IG9mIGZvcm06XG5cdFx0Ly8gXHRbc3VzcGVuZGVkX2NvdW50LCByZXNvbHZlZF9jb3VudCwgbmV4dF9ub2RlXVxuXHRcdC8vIHdoZXJlIHN1c3BlbmRlZF9jb3VudCBhbmQgcmVzb2x2ZWRfY291bnQgYXJlIG51bWVyaWMgY291bnRlcnMgZm9yXG5cdFx0Ly8ga2VlcGluZyB0cmFjayBob3cgbWFueSB0aW1lcyBhIG5vZGUgaGFzIGJlZW4gc3VzcGVuZGVkIGFuZCByZXNvbHZlZC5cblx0XHQvL1xuXHRcdC8vIE5vdGUgdGhhdCBzdXNwZW5kZWRfY291bnQgc3RhcnRzIGZyb20gMSBpbnN0ZWFkIG9mIDAsIHNvIHdlIGNhbiBibG9ja1xuXHRcdC8vIHByb2Nlc3NpbmcgY2FsbGJhY2tzIHVudGlsIGNvbXBvbmVudERpZE1vdW50IGhhcyBiZWVuIGNhbGxlZC4gSW4gYSBzZW5zZVxuXHRcdC8vIG5vZGUgaXMgc3VzcGVuZGVkIGF0IGxlYXN0IHVudGlsIGNvbXBvbmVudERpZE1vdW50IGdldHMgY2FsbGVkIVxuXHRcdC8vXG5cdFx0Ly8gUGVuZGluZyBjYWxsYmFja3MgYXJlIGFkZGVkIHRvIHRoZSBlbmQgb2YgdGhlIG5vZGU6XG5cdFx0Ly8gXHRbc3VzcGVuZGVkX2NvdW50LCByZXNvbHZlZF9jb3VudCwgbmV4dF9ub2RlLCBjYWxsYmFja18wLCBjYWxsYmFja18xLCAuLi5dXG5cdFx0dGhpcy5fbWFwLnNldChjaGlsZHJlbltpXSwgKHRoaXMuX25leHQgPSBbMSwgMCwgdGhpcy5fbmV4dF0pKTtcblx0fVxuXHRyZXR1cm4gcHJvcHMuY2hpbGRyZW47XG59O1xuXG5TdXNwZW5zZUxpc3QucHJvdG90eXBlLmNvbXBvbmVudERpZFVwZGF0ZSA9IFN1c3BlbnNlTGlzdC5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbigpIHtcblx0Ly8gSXRlcmF0ZSB0aHJvdWdoIGFsbCBjaGlsZHJlbiBhZnRlciBtb3VudGluZyBmb3IgdHdvIHJlYXNvbnM6XG5cdC8vIDEuIEFzIGVhY2ggbm9kZVtTVVNQRU5ERURfQ09VTlRdIHN0YXJ0cyBmcm9tIDEsIHRoaXMgaXRlcmF0aW9uIGluY3JlYXNlc1xuXHQvLyAgICBlYWNoIG5vZGVbUkVMRUFTRURfQ09VTlRdIGJ5IDEsIHRoZXJlZm9yZSBiYWxhbmNpbmcgdGhlIGNvdW50ZXJzLlxuXHQvLyAgICBUaGUgbm9kZXMgY2FuIG5vdyBiZSBjb21wbGV0ZWx5IGNvbnN1bWVkIGZyb20gdGhlIGxpbmtlZCBsaXN0LlxuXHQvLyAyLiBIYW5kbGUgbm9kZXMgdGhhdCBtaWdodCBoYXZlIGdvdHRlbiByZXNvbHZlZCBiZXR3ZWVuIHJlbmRlciBhbmRcblx0Ly8gICAgY29tcG9uZW50RGlkTW91bnQuXG5cdHRoaXMuX21hcC5mb3JFYWNoKChub2RlLCBjaGlsZCkgPT4ge1xuXHRcdHJlc29sdmUodGhpcywgY2hpbGQsIG5vZGUpO1xuXHR9KTtcbn07XG4iLCAiaW1wb3J0IHsgY3JlYXRlRWxlbWVudCwgcmVuZGVyIH0gZnJvbSAncHJlYWN0JztcblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi4vLi4vc3JjL2luZGV4JykuUmVuZGVyYWJsZVByb3BzPHsgY29udGV4dDogYW55IH0+fSBwcm9wc1xuICovXG5mdW5jdGlvbiBDb250ZXh0UHJvdmlkZXIocHJvcHMpIHtcblx0dGhpcy5nZXRDaGlsZENvbnRleHQgPSAoKSA9PiBwcm9wcy5jb250ZXh0O1xuXHRyZXR1cm4gcHJvcHMuY2hpbGRyZW47XG59XG5cbi8qKlxuICogUG9ydGFsIGNvbXBvbmVudFxuICogQHRoaXMge2ltcG9ydCgnLi9pbnRlcm5hbCcpLkNvbXBvbmVudH1cbiAqIEBwYXJhbSB7b2JqZWN0IHwgbnVsbCB8IHVuZGVmaW5lZH0gcHJvcHNcbiAqXG4gKiBUT0RPOiB1c2UgY3JlYXRlUm9vdCgpIGluc3RlYWQgb2YgZmFrZSByb290XG4gKi9cbmZ1bmN0aW9uIFBvcnRhbChwcm9wcykge1xuXHRjb25zdCBfdGhpcyA9IHRoaXM7XG5cdGxldCBjb250YWluZXIgPSBwcm9wcy5fY29udGFpbmVyO1xuXG5cdF90aGlzLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gZnVuY3Rpb24oKSB7XG5cdFx0cmVuZGVyKG51bGwsIF90aGlzLl90ZW1wKTtcblx0XHRfdGhpcy5fdGVtcCA9IG51bGw7XG5cdFx0X3RoaXMuX2NvbnRhaW5lciA9IG51bGw7XG5cdH07XG5cblx0Ly8gV2hlbiB3ZSBjaGFuZ2UgY29udGFpbmVyIHdlIHNob3VsZCBjbGVhciBvdXIgb2xkIGNvbnRhaW5lciBhbmRcblx0Ly8gaW5kaWNhdGUgYSBuZXcgbW91bnQuXG5cdGlmIChfdGhpcy5fY29udGFpbmVyICYmIF90aGlzLl9jb250YWluZXIgIT09IGNvbnRhaW5lcikge1xuXHRcdF90aGlzLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG5cdH1cblxuXHQvLyBXaGVuIHByb3BzLnZub2RlIGlzIHVuZGVmaW5lZC9mYWxzZS9udWxsIHdlIGFyZSBkZWFsaW5nIHdpdGggc29tZSBraW5kIG9mXG5cdC8vIGNvbmRpdGlvbmFsIHZub2RlLiBUaGlzIHNob3VsZCBub3QgdHJpZ2dlciBhIHJlbmRlci5cblx0aWYgKHByb3BzLl92bm9kZSkge1xuXHRcdGlmICghX3RoaXMuX3RlbXApIHtcblx0XHRcdF90aGlzLl9jb250YWluZXIgPSBjb250YWluZXI7XG5cblx0XHRcdC8vIENyZWF0ZSBhIGZha2UgRE9NIHBhcmVudCBub2RlIHRoYXQgbWFuYWdlcyBhIHN1YnNldCBvZiBgY29udGFpbmVyYCdzIGNoaWxkcmVuOlxuXHRcdFx0X3RoaXMuX3RlbXAgPSB7XG5cdFx0XHRcdG5vZGVUeXBlOiAxLFxuXHRcdFx0XHRwYXJlbnROb2RlOiBjb250YWluZXIsXG5cdFx0XHRcdGNoaWxkTm9kZXM6IFtdLFxuXHRcdFx0XHRhcHBlbmRDaGlsZChjaGlsZCkge1xuXHRcdFx0XHRcdHRoaXMuY2hpbGROb2Rlcy5wdXNoKGNoaWxkKTtcblx0XHRcdFx0XHRfdGhpcy5fY29udGFpbmVyLmFwcGVuZENoaWxkKGNoaWxkKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0aW5zZXJ0QmVmb3JlKGNoaWxkLCBiZWZvcmUpIHtcblx0XHRcdFx0XHR0aGlzLmNoaWxkTm9kZXMucHVzaChjaGlsZCk7XG5cdFx0XHRcdFx0X3RoaXMuX2NvbnRhaW5lci5hcHBlbmRDaGlsZChjaGlsZCk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHJlbW92ZUNoaWxkKGNoaWxkKSB7XG5cdFx0XHRcdFx0dGhpcy5jaGlsZE5vZGVzLnNwbGljZSh0aGlzLmNoaWxkTm9kZXMuaW5kZXhPZihjaGlsZCkgPj4+IDEsIDEpO1xuXHRcdFx0XHRcdF90aGlzLl9jb250YWluZXIucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdC8vIFJlbmRlciBvdXIgd3JhcHBpbmcgZWxlbWVudCBpbnRvIHRlbXAuXG5cdFx0cmVuZGVyKFxuXHRcdFx0Y3JlYXRlRWxlbWVudChDb250ZXh0UHJvdmlkZXIsIHsgY29udGV4dDogX3RoaXMuY29udGV4dCB9LCBwcm9wcy5fdm5vZGUpLFxuXHRcdFx0X3RoaXMuX3RlbXBcblx0XHQpO1xuXHR9XG5cdC8vIFdoZW4gd2UgY29tZSBmcm9tIGEgY29uZGl0aW9uYWwgcmVuZGVyLCBvbiBhIG1vdW50ZWRcblx0Ly8gcG9ydGFsIHdlIHNob3VsZCBjbGVhciB0aGUgRE9NLlxuXHRlbHNlIGlmIChfdGhpcy5fdGVtcCkge1xuXHRcdF90aGlzLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG5cdH1cbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBgUG9ydGFsYCB0byBjb250aW51ZSByZW5kZXJpbmcgdGhlIHZub2RlIHRyZWUgYXQgYSBkaWZmZXJlbnQgRE9NIG5vZGVcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL2ludGVybmFsJykuVk5vZGV9IHZub2RlIFRoZSB2bm9kZSB0byByZW5kZXJcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL2ludGVybmFsJykuUHJlYWN0RWxlbWVudH0gY29udGFpbmVyIFRoZSBET00gbm9kZSB0byBjb250aW51ZSByZW5kZXJpbmcgaW4gdG8uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQb3J0YWwodm5vZGUsIGNvbnRhaW5lcikge1xuXHRjb25zdCBlbCA9IGNyZWF0ZUVsZW1lbnQoUG9ydGFsLCB7IF92bm9kZTogdm5vZGUsIF9jb250YWluZXI6IGNvbnRhaW5lciB9KTtcblx0ZWwuY29udGFpbmVySW5mbyA9IGNvbnRhaW5lcjtcblx0cmV0dXJuIGVsO1xufVxuIiwgImltcG9ydCB7XG5cdHJlbmRlciBhcyBwcmVhY3RSZW5kZXIsXG5cdGh5ZHJhdGUgYXMgcHJlYWN0SHlkcmF0ZSxcblx0b3B0aW9ucyxcblx0dG9DaGlsZEFycmF5LFxuXHRDb21wb25lbnRcbn0gZnJvbSAncHJlYWN0JztcblxuZXhwb3J0IGNvbnN0IFJFQUNUX0VMRU1FTlRfVFlQRSA9XG5cdCh0eXBlb2YgU3ltYm9sICE9ICd1bmRlZmluZWQnICYmIFN5bWJvbC5mb3IgJiYgU3ltYm9sLmZvcigncmVhY3QuZWxlbWVudCcpKSB8fFxuXHQweGVhYzc7XG5cbmNvbnN0IENBTUVMX1BST1BTID0gL14oPzphY2NlbnR8YWxpZ25tZW50fGFyYWJpY3xiYXNlbGluZXxjYXB8Y2xpcCg/IVBhdGhVKXxjb2xvcnxkb21pbmFudHxmaWxsfGZsb29kfGZvbnR8Z2x5cGgoPyFSKXxob3JpenxtYXJrZXIoPyFIfFd8VSl8b3ZlcmxpbmV8cGFpbnR8c3RvcHxzdHJpa2V0aHJvdWdofHN0cm9rZXx0ZXh0KD8hTCl8dW5kZXJsaW5lfHVuaWNvZGV8dW5pdHN8dnx2ZWN0b3J8dmVydHx3b3JkfHdyaXRpbmd8eCg/IUMpKVtBLVpdLztcblxuY29uc3QgSVNfRE9NID0gdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJztcblxuLy8gSW5wdXQgdHlwZXMgZm9yIHdoaWNoIG9uY2hhbmdlIHNob3VsZCBub3QgYmUgY29udmVydGVkIHRvIG9uaW5wdXQuXG4vLyB0eXBlPVwiZmlsZXxjaGVja2JveHxyYWRpb1wiLCBwbHVzIFwicmFuZ2VcIiBpbiBJRTExLlxuLy8gKElFMTEgZG9lc24ndCBzdXBwb3J0IFN5bWJvbCwgd2hpY2ggd2UgdXNlIGhlcmUgdG8gdHVybiBgcmFkYCBpbnRvIGByYWAgd2hpY2ggbWF0Y2hlcyBcInJhbmdlXCIpXG5jb25zdCBvbkNoYW5nZUlucHV0VHlwZSA9IHR5cGUgPT5cblx0KHR5cGVvZiBTeW1ib2wgIT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIFN5bWJvbCgpID09ICdzeW1ib2wnXG5cdFx0PyAvZmlsfGNoZXxyYWQvaVxuXHRcdDogL2ZpbHxjaGV8cmEvaVxuXHQpLnRlc3QodHlwZSk7XG5cbi8vIFNvbWUgbGlicmFyaWVzIGxpa2UgYHJlYWN0LXZpcnR1YWxpemVkYCBleHBsaWNpdGx5IGNoZWNrIGZvciB0aGlzLlxuQ29tcG9uZW50LnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50ID0ge307XG5cbi8vIGBVTlNBRkVfKmAgbGlmZWN5Y2xlIGhvb2tzXG4vLyBQcmVhY3Qgb25seSBldmVyIGludm9rZXMgdGhlIHVucHJlZml4ZWQgbWV0aG9kcy5cbi8vIEhlcmUgd2UgcHJvdmlkZSBhIGJhc2UgXCJmYWxsYmFja1wiIGltcGxlbWVudGF0aW9uIHRoYXQgY2FsbHMgYW55IGRlZmluZWQgVU5TQUZFXyBwcmVmaXhlZCBtZXRob2QuXG4vLyAtIElmIGEgY29tcG9uZW50IGRlZmluZXMgaXRzIG93biBgY29tcG9uZW50RGlkTW91bnQoKWAgKGluY2x1ZGluZyB2aWEgZGVmaW5lUHJvcGVydHkpLCB1c2UgdGhhdC5cbi8vIC0gSWYgYSBjb21wb25lbnQgZGVmaW5lcyBgVU5TQUZFX2NvbXBvbmVudERpZE1vdW50KClgLCBgY29tcG9uZW50RGlkTW91bnRgIGlzIHRoZSBhbGlhcyBnZXR0ZXIvc2V0dGVyLlxuLy8gLSBJZiBhbnl0aGluZyBhc3NpZ25zIHRvIGFuIGBVTlNBRkVfKmAgcHJvcGVydHksIHRoZSBhc3NpZ25tZW50IGlzIGZvcndhcmRlZCB0byB0aGUgdW5wcmVmaXhlZCBwcm9wZXJ0eS5cbi8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vcHJlYWN0anMvcHJlYWN0L2lzc3Vlcy8xOTQxXG5bXG5cdCdjb21wb25lbnRXaWxsTW91bnQnLFxuXHQnY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcycsXG5cdCdjb21wb25lbnRXaWxsVXBkYXRlJ1xuXS5mb3JFYWNoKGtleSA9PiB7XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb21wb25lbnQucHJvdG90eXBlLCBrZXksIHtcblx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0Z2V0KCkge1xuXHRcdFx0cmV0dXJuIHRoaXNbJ1VOU0FGRV8nICsga2V5XTtcblx0XHR9LFxuXHRcdHNldCh2KSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywga2V5LCB7XG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0d3JpdGFibGU6IHRydWUsXG5cdFx0XHRcdHZhbHVlOiB2XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0pO1xufSk7XG5cbi8qKlxuICogUHJveHkgcmVuZGVyKCkgc2luY2UgUmVhY3QgcmV0dXJucyBhIENvbXBvbmVudCByZWZlcmVuY2UuXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbnRlcm5hbCcpLlZOb2RlfSB2bm9kZSBWTm9kZSB0cmVlIHRvIHJlbmRlclxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5QcmVhY3RFbGVtZW50fSBwYXJlbnQgRE9NIG5vZGUgdG8gcmVuZGVyIHZub2RlIHRyZWUgaW50b1xuICogQHBhcmFtIHsoKSA9PiB2b2lkfSBbY2FsbGJhY2tdIE9wdGlvbmFsIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgcmVuZGVyaW5nXG4gKiBAcmV0dXJucyB7aW1wb3J0KCcuL2ludGVybmFsJykuQ29tcG9uZW50IHwgbnVsbH0gVGhlIHJvb3QgY29tcG9uZW50IHJlZmVyZW5jZSBvciBudWxsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXIodm5vZGUsIHBhcmVudCwgY2FsbGJhY2spIHtcblx0Ly8gUmVhY3QgZGVzdHJveXMgYW55IGV4aXN0aW5nIERPTSBub2Rlcywgc2VlICMxNzI3XG5cdC8vIC4uLmJ1dCBvbmx5IG9uIHRoZSBmaXJzdCByZW5kZXIsIHNlZSAjMTgyOFxuXHRpZiAocGFyZW50Ll9jaGlsZHJlbiA9PSBudWxsKSB7XG5cdFx0cGFyZW50LnRleHRDb250ZW50ID0gJyc7XG5cdH1cblxuXHRwcmVhY3RSZW5kZXIodm5vZGUsIHBhcmVudCk7XG5cdGlmICh0eXBlb2YgY2FsbGJhY2sgPT0gJ2Z1bmN0aW9uJykgY2FsbGJhY2soKTtcblxuXHRyZXR1cm4gdm5vZGUgPyB2bm9kZS5fY29tcG9uZW50IDogbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh5ZHJhdGUodm5vZGUsIHBhcmVudCwgY2FsbGJhY2spIHtcblx0cHJlYWN0SHlkcmF0ZSh2bm9kZSwgcGFyZW50KTtcblx0aWYgKHR5cGVvZiBjYWxsYmFjayA9PSAnZnVuY3Rpb24nKSBjYWxsYmFjaygpO1xuXG5cdHJldHVybiB2bm9kZSA/IHZub2RlLl9jb21wb25lbnQgOiBudWxsO1xufVxuXG5sZXQgb2xkRXZlbnRIb29rID0gb3B0aW9ucy5ldmVudDtcbm9wdGlvbnMuZXZlbnQgPSBlID0+IHtcblx0aWYgKG9sZEV2ZW50SG9vaykgZSA9IG9sZEV2ZW50SG9vayhlKTtcblx0ZS5wZXJzaXN0ID0gZW1wdHk7XG5cdGUuaXNQcm9wYWdhdGlvblN0b3BwZWQgPSBpc1Byb3BhZ2F0aW9uU3RvcHBlZDtcblx0ZS5pc0RlZmF1bHRQcmV2ZW50ZWQgPSBpc0RlZmF1bHRQcmV2ZW50ZWQ7XG5cdHJldHVybiAoZS5uYXRpdmVFdmVudCA9IGUpO1xufTtcblxuZnVuY3Rpb24gZW1wdHkoKSB7fVxuXG5mdW5jdGlvbiBpc1Byb3BhZ2F0aW9uU3RvcHBlZCgpIHtcblx0cmV0dXJuIHRoaXMuY2FuY2VsQnViYmxlO1xufVxuXG5mdW5jdGlvbiBpc0RlZmF1bHRQcmV2ZW50ZWQoKSB7XG5cdHJldHVybiB0aGlzLmRlZmF1bHRQcmV2ZW50ZWQ7XG59XG5cbmxldCBjbGFzc05hbWVEZXNjcmlwdG9yID0ge1xuXHRjb25maWd1cmFibGU6IHRydWUsXG5cdGdldCgpIHtcblx0XHRyZXR1cm4gdGhpcy5jbGFzcztcblx0fVxufTtcblxubGV0IG9sZFZOb2RlSG9vayA9IG9wdGlvbnMudm5vZGU7XG5vcHRpb25zLnZub2RlID0gdm5vZGUgPT4ge1xuXHRsZXQgdHlwZSA9IHZub2RlLnR5cGU7XG5cdGxldCBwcm9wcyA9IHZub2RlLnByb3BzO1xuXHRsZXQgbm9ybWFsaXplZFByb3BzID0gcHJvcHM7XG5cblx0Ly8gb25seSBub3JtYWxpemUgcHJvcHMgb24gRWxlbWVudCBub2Rlc1xuXHRpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG5cdFx0Y29uc3Qgbm9uQ3VzdG9tRWxlbWVudCA9IHR5cGUuaW5kZXhPZignLScpID09PSAtMTtcblx0XHRub3JtYWxpemVkUHJvcHMgPSB7fTtcblxuXHRcdGZvciAobGV0IGkgaW4gcHJvcHMpIHtcblx0XHRcdGxldCB2YWx1ZSA9IHByb3BzW2ldO1xuXG5cdFx0XHRpZiAoSVNfRE9NICYmIGkgPT09ICdjaGlsZHJlbicgJiYgdHlwZSA9PT0gJ25vc2NyaXB0Jykge1xuXHRcdFx0XHQvLyBFbXVsYXRlIFJlYWN0J3MgYmVoYXZpb3Igb2Ygbm90IHJlbmRlcmluZyB0aGUgY29udGVudHMgb2Ygbm9zY3JpcHQgdGFncyBvbiB0aGUgY2xpZW50LlxuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH0gZWxzZSBpZiAoaSA9PT0gJ3ZhbHVlJyAmJiAnZGVmYXVsdFZhbHVlJyBpbiBwcm9wcyAmJiB2YWx1ZSA9PSBudWxsKSB7XG5cdFx0XHRcdC8vIFNraXAgYXBwbHlpbmcgdmFsdWUgaWYgaXQgaXMgbnVsbC91bmRlZmluZWQgYW5kIHdlIGFscmVhZHkgc2V0XG5cdFx0XHRcdC8vIGEgZGVmYXVsdCB2YWx1ZVxuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdGkgPT09ICdkZWZhdWx0VmFsdWUnICYmXG5cdFx0XHRcdCd2YWx1ZScgaW4gcHJvcHMgJiZcblx0XHRcdFx0cHJvcHMudmFsdWUgPT0gbnVsbFxuXHRcdFx0KSB7XG5cdFx0XHRcdC8vIGBkZWZhdWx0VmFsdWVgIGlzIHRyZWF0ZWQgYXMgYSBmYWxsYmFjayBgdmFsdWVgIHdoZW4gYSB2YWx1ZSBwcm9wIGlzIHByZXNlbnQgYnV0IG51bGwvdW5kZWZpbmVkLlxuXHRcdFx0XHQvLyBgZGVmYXVsdFZhbHVlYCBmb3IgRWxlbWVudHMgd2l0aCBubyB2YWx1ZSBwcm9wIGlzIHRoZSBzYW1lIGFzIHRoZSBET00gZGVmYXVsdFZhbHVlIHByb3BlcnR5LlxuXHRcdFx0XHRpID0gJ3ZhbHVlJztcblx0XHRcdH0gZWxzZSBpZiAoaSA9PT0gJ2Rvd25sb2FkJyAmJiB2YWx1ZSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHQvLyBDYWxsaW5nIGBzZXRBdHRyaWJ1dGVgIHdpdGggYSB0cnV0aHkgdmFsdWUgd2lsbCBsZWFkIHRvIGl0IGJlaW5nXG5cdFx0XHRcdC8vIHBhc3NlZCBhcyBhIHN0cmluZ2lmaWVkIHZhbHVlLCBlLmcuIGBkb3dubG9hZD1cInRydWVcImAuIFJlYWN0XG5cdFx0XHRcdC8vIGNvbnZlcnRzIGl0IHRvIGFuIGVtcHR5IHN0cmluZyBpbnN0ZWFkLCBvdGhlcndpc2UgdGhlIGF0dHJpYnV0ZVxuXHRcdFx0XHQvLyB2YWx1ZSB3aWxsIGJlIHVzZWQgYXMgdGhlIGZpbGUgbmFtZSBhbmQgdGhlIGZpbGUgd2lsbCBiZSBjYWxsZWRcblx0XHRcdFx0Ly8gXCJ0cnVlXCIgdXBvbiBkb3dubG9hZGluZyBpdC5cblx0XHRcdFx0dmFsdWUgPSAnJztcblx0XHRcdH0gZWxzZSBpZiAoL29uZG91YmxlY2xpY2svaS50ZXN0KGkpKSB7XG5cdFx0XHRcdGkgPSAnb25kYmxjbGljayc7XG5cdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHQvXm9uY2hhbmdlKHRleHRhcmVhfGlucHV0KS9pLnRlc3QoaSArIHR5cGUpICYmXG5cdFx0XHRcdCFvbkNoYW5nZUlucHV0VHlwZShwcm9wcy50eXBlKVxuXHRcdFx0KSB7XG5cdFx0XHRcdGkgPSAnb25pbnB1dCc7XG5cdFx0XHR9IGVsc2UgaWYgKC9eb25mb2N1cyQvaS50ZXN0KGkpKSB7XG5cdFx0XHRcdGkgPSAnb25mb2N1c2luJztcblx0XHRcdH0gZWxzZSBpZiAoL15vbmJsdXIkL2kudGVzdChpKSkge1xuXHRcdFx0XHRpID0gJ29uZm9jdXNvdXQnO1xuXHRcdFx0fSBlbHNlIGlmICgvXm9uKEFuaXxUcmF8VG91fEJlZm9yZUlucHxDb21wbykvLnRlc3QoaSkpIHtcblx0XHRcdFx0aSA9IGkudG9Mb3dlckNhc2UoKTtcblx0XHRcdH0gZWxzZSBpZiAobm9uQ3VzdG9tRWxlbWVudCAmJiBDQU1FTF9QUk9QUy50ZXN0KGkpKSB7XG5cdFx0XHRcdGkgPSBpLnJlcGxhY2UoL1tBLVowLTldLywgJy0kJicpLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHR9IGVsc2UgaWYgKHZhbHVlID09PSBudWxsKSB7XG5cdFx0XHRcdHZhbHVlID0gdW5kZWZpbmVkO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBBZGQgc3VwcG9ydCBmb3Igb25JbnB1dCBhbmQgb25DaGFuZ2UsIHNlZSAjMzU2MVxuXHRcdFx0Ly8gaWYgd2UgaGF2ZSBhbiBvbmlucHV0IHByb3AgYWxyZWFkeSBjaGFuZ2UgaXQgdG8gb25pbnB1dENhcHR1cmVcblx0XHRcdGlmICgvXm9uaW5wdXQvaS50ZXN0KGkpKSB7XG5cdFx0XHRcdGkgPSBpLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdGlmIChub3JtYWxpemVkUHJvcHNbaV0pIHtcblx0XHRcdFx0XHRpID0gJ29uaW5wdXRDYXB0dXJlJztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRub3JtYWxpemVkUHJvcHNbaV0gPSB2YWx1ZTtcblx0XHR9XG5cblx0XHQvLyBBZGQgc3VwcG9ydCBmb3IgYXJyYXkgc2VsZWN0IHZhbHVlczogPHNlbGVjdCBtdWx0aXBsZSB2YWx1ZT17W119IC8+XG5cdFx0aWYgKFxuXHRcdFx0dHlwZSA9PSAnc2VsZWN0JyAmJlxuXHRcdFx0bm9ybWFsaXplZFByb3BzLm11bHRpcGxlICYmXG5cdFx0XHRBcnJheS5pc0FycmF5KG5vcm1hbGl6ZWRQcm9wcy52YWx1ZSlcblx0XHQpIHtcblx0XHRcdC8vIGZvckVhY2goKSBhbHdheXMgcmV0dXJucyB1bmRlZmluZWQsIHdoaWNoIHdlIGFidXNlIGhlcmUgdG8gdW5zZXQgdGhlIHZhbHVlIHByb3AuXG5cdFx0XHRub3JtYWxpemVkUHJvcHMudmFsdWUgPSB0b0NoaWxkQXJyYXkocHJvcHMuY2hpbGRyZW4pLmZvckVhY2goY2hpbGQgPT4ge1xuXHRcdFx0XHRjaGlsZC5wcm9wcy5zZWxlY3RlZCA9XG5cdFx0XHRcdFx0bm9ybWFsaXplZFByb3BzLnZhbHVlLmluZGV4T2YoY2hpbGQucHJvcHMudmFsdWUpICE9IC0xO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0Ly8gQWRkaW5nIHN1cHBvcnQgZm9yIGRlZmF1bHRWYWx1ZSBpbiBzZWxlY3QgdGFnXG5cdFx0aWYgKHR5cGUgPT0gJ3NlbGVjdCcgJiYgbm9ybWFsaXplZFByb3BzLmRlZmF1bHRWYWx1ZSAhPSBudWxsKSB7XG5cdFx0XHRub3JtYWxpemVkUHJvcHMudmFsdWUgPSB0b0NoaWxkQXJyYXkocHJvcHMuY2hpbGRyZW4pLmZvckVhY2goY2hpbGQgPT4ge1xuXHRcdFx0XHRpZiAobm9ybWFsaXplZFByb3BzLm11bHRpcGxlKSB7XG5cdFx0XHRcdFx0Y2hpbGQucHJvcHMuc2VsZWN0ZWQgPVxuXHRcdFx0XHRcdFx0bm9ybWFsaXplZFByb3BzLmRlZmF1bHRWYWx1ZS5pbmRleE9mKGNoaWxkLnByb3BzLnZhbHVlKSAhPSAtMTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjaGlsZC5wcm9wcy5zZWxlY3RlZCA9XG5cdFx0XHRcdFx0XHRub3JtYWxpemVkUHJvcHMuZGVmYXVsdFZhbHVlID09IGNoaWxkLnByb3BzLnZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHR2bm9kZS5wcm9wcyA9IG5vcm1hbGl6ZWRQcm9wcztcblxuXHRcdGlmIChwcm9wcy5jbGFzcyAhPSBwcm9wcy5jbGFzc05hbWUpIHtcblx0XHRcdGNsYXNzTmFtZURlc2NyaXB0b3IuZW51bWVyYWJsZSA9ICdjbGFzc05hbWUnIGluIHByb3BzO1xuXHRcdFx0aWYgKHByb3BzLmNsYXNzTmFtZSAhPSBudWxsKSBub3JtYWxpemVkUHJvcHMuY2xhc3MgPSBwcm9wcy5jbGFzc05hbWU7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobm9ybWFsaXplZFByb3BzLCAnY2xhc3NOYW1lJywgY2xhc3NOYW1lRGVzY3JpcHRvcik7XG5cdFx0fVxuXHR9XG5cblx0dm5vZGUuJCR0eXBlb2YgPSBSRUFDVF9FTEVNRU5UX1RZUEU7XG5cblx0aWYgKG9sZFZOb2RlSG9vaykgb2xkVk5vZGVIb29rKHZub2RlKTtcbn07XG5cbi8vIE9ubHkgbmVlZGVkIGZvciByZWFjdC1yZWxheVxubGV0IGN1cnJlbnRDb21wb25lbnQ7XG5jb25zdCBvbGRCZWZvcmVSZW5kZXIgPSBvcHRpb25zLl9yZW5kZXI7XG5vcHRpb25zLl9yZW5kZXIgPSBmdW5jdGlvbih2bm9kZSkge1xuXHRpZiAob2xkQmVmb3JlUmVuZGVyKSB7XG5cdFx0b2xkQmVmb3JlUmVuZGVyKHZub2RlKTtcblx0fVxuXHRjdXJyZW50Q29tcG9uZW50ID0gdm5vZGUuX2NvbXBvbmVudDtcbn07XG5cbi8vIFRoaXMgaXMgYSB2ZXJ5IHZlcnkgcHJpdmF0ZSBpbnRlcm5hbCBmdW5jdGlvbiBmb3IgUmVhY3QgaXRcbi8vIGlzIHVzZWQgdG8gc29ydC1vZiBkbyBydW50aW1lIGRlcGVuZGVuY3kgaW5qZWN0aW9uLiBTbyBmYXJcbi8vIG9ubHkgYHJlYWN0LXJlbGF5YCBtYWtlcyB1c2Ugb2YgaXQuIEl0IHVzZXMgaXQgdG8gcmVhZCB0aGVcbi8vIGNvbnRleHQgdmFsdWUuXG5leHBvcnQgY29uc3QgX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQgPSB7XG5cdFJlYWN0Q3VycmVudERpc3BhdGNoZXI6IHtcblx0XHRjdXJyZW50OiB7XG5cdFx0XHRyZWFkQ29udGV4dChjb250ZXh0KSB7XG5cdFx0XHRcdHJldHVybiBjdXJyZW50Q29tcG9uZW50Ll9nbG9iYWxDb250ZXh0W2NvbnRleHQuX2lkXS5wcm9wcy52YWx1ZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG4iLCAiaW1wb3J0IHtcblx0Y3JlYXRlRWxlbWVudCxcblx0cmVuZGVyIGFzIHByZWFjdFJlbmRlcixcblx0Y2xvbmVFbGVtZW50IGFzIHByZWFjdENsb25lRWxlbWVudCxcblx0Y3JlYXRlUmVmLFxuXHRDb21wb25lbnQsXG5cdGNyZWF0ZUNvbnRleHQsXG5cdEZyYWdtZW50XG59IGZyb20gJ3ByZWFjdCc7XG5pbXBvcnQge1xuXHR1c2VTdGF0ZSxcblx0dXNlUmVkdWNlcixcblx0dXNlRWZmZWN0LFxuXHR1c2VMYXlvdXRFZmZlY3QsXG5cdHVzZVJlZixcblx0dXNlSW1wZXJhdGl2ZUhhbmRsZSxcblx0dXNlTWVtbyxcblx0dXNlQ2FsbGJhY2ssXG5cdHVzZUNvbnRleHQsXG5cdHVzZURlYnVnVmFsdWVcbn0gZnJvbSAncHJlYWN0L2hvb2tzJztcbmltcG9ydCB7IFB1cmVDb21wb25lbnQgfSBmcm9tICcuL1B1cmVDb21wb25lbnQnO1xuaW1wb3J0IHsgbWVtbyB9IGZyb20gJy4vbWVtbyc7XG5pbXBvcnQgeyBmb3J3YXJkUmVmIH0gZnJvbSAnLi9mb3J3YXJkUmVmJztcbmltcG9ydCB7IENoaWxkcmVuIH0gZnJvbSAnLi9DaGlsZHJlbic7XG5pbXBvcnQgeyBTdXNwZW5zZSwgbGF6eSB9IGZyb20gJy4vc3VzcGVuc2UnO1xuaW1wb3J0IHsgU3VzcGVuc2VMaXN0IH0gZnJvbSAnLi9zdXNwZW5zZS1saXN0JztcbmltcG9ydCB7IGNyZWF0ZVBvcnRhbCB9IGZyb20gJy4vcG9ydGFscyc7XG5pbXBvcnQge1xuXHRoeWRyYXRlLFxuXHRyZW5kZXIsXG5cdFJFQUNUX0VMRU1FTlRfVFlQRSxcblx0X19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRURcbn0gZnJvbSAnLi9yZW5kZXInO1xuXG5jb25zdCB2ZXJzaW9uID0gJzE3LjAuMic7IC8vIHRyaWNrIGxpYnJhcmllcyB0byB0aGluayB3ZSBhcmUgcmVhY3RcblxuLyoqXG4gKiBMZWdhY3kgdmVyc2lvbiBvZiBjcmVhdGVFbGVtZW50LlxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5WTm9kZVtcInR5cGVcIl19IHR5cGUgVGhlIG5vZGUgbmFtZSBvciBDb21wb25lbnQgY29uc3RydWN0b3JcbiAqL1xuZnVuY3Rpb24gY3JlYXRlRmFjdG9yeSh0eXBlKSB7XG5cdHJldHVybiBjcmVhdGVFbGVtZW50LmJpbmQobnVsbCwgdHlwZSk7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIHBhc3NlZCBlbGVtZW50IGlzIGEgdmFsaWQgKHApcmVhY3Qgbm9kZS5cbiAqIEBwYXJhbSB7Kn0gZWxlbWVudCBUaGUgZWxlbWVudCB0byBjaGVja1xuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50KGVsZW1lbnQpIHtcblx0cmV0dXJuICEhZWxlbWVudCAmJiBlbGVtZW50LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEU7XG59XG5cbi8qKlxuICogV3JhcCBgY2xvbmVFbGVtZW50YCB0byBhYm9ydCBpZiB0aGUgcGFzc2VkIGVsZW1lbnQgaXMgbm90IGEgdmFsaWQgZWxlbWVudCBhbmQgYXBwbHlcbiAqIGFsbCB2bm9kZSBub3JtYWxpemF0aW9ucy5cbiAqIEBwYXJhbSB7aW1wb3J0KCcuL2ludGVybmFsJykuVk5vZGV9IGVsZW1lbnQgVGhlIHZub2RlIHRvIGNsb25lXG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHMgUHJvcHMgdG8gYWRkIHdoZW4gY2xvbmluZ1xuICogQHBhcmFtIHtBcnJheTxpbXBvcnQoJy4vaW50ZXJuYWwnKS5Db21wb25lbnRDaGlsZHJlbj59IHJlc3QgT3B0aW9uYWwgY29tcG9uZW50IGNoaWxkcmVuXG4gKi9cbmZ1bmN0aW9uIGNsb25lRWxlbWVudChlbGVtZW50KSB7XG5cdGlmICghaXNWYWxpZEVsZW1lbnQoZWxlbWVudCkpIHJldHVybiBlbGVtZW50O1xuXHRyZXR1cm4gcHJlYWN0Q2xvbmVFbGVtZW50LmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG59XG5cbi8qKlxuICogUmVtb3ZlIGEgY29tcG9uZW50IHRyZWUgZnJvbSB0aGUgRE9NLCBpbmNsdWRpbmcgc3RhdGUgYW5kIGV2ZW50IGhhbmRsZXJzLlxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5QcmVhY3RFbGVtZW50fSBjb250YWluZXJcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiB1bm1vdW50Q29tcG9uZW50QXROb2RlKGNvbnRhaW5lcikge1xuXHRpZiAoY29udGFpbmVyLl9jaGlsZHJlbikge1xuXHRcdHByZWFjdFJlbmRlcihudWxsLCBjb250YWluZXIpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIG1hdGNoaW5nIERPTSBub2RlIGZvciBhIGNvbXBvbmVudFxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW50ZXJuYWwnKS5Db21wb25lbnR9IGNvbXBvbmVudFxuICogQHJldHVybnMge2ltcG9ydCgnLi9pbnRlcm5hbCcpLlByZWFjdEVsZW1lbnQgfCBudWxsfVxuICovXG5mdW5jdGlvbiBmaW5kRE9NTm9kZShjb21wb25lbnQpIHtcblx0cmV0dXJuIChcblx0XHQoY29tcG9uZW50ICYmXG5cdFx0XHQoY29tcG9uZW50LmJhc2UgfHwgKGNvbXBvbmVudC5ub2RlVHlwZSA9PT0gMSAmJiBjb21wb25lbnQpKSkgfHxcblx0XHRudWxsXG5cdCk7XG59XG5cbi8qKlxuICogRGVwcmVjYXRlZCB3YXkgdG8gY29udHJvbCBiYXRjaGVkIHJlbmRlcmluZyBpbnNpZGUgdGhlIHJlY29uY2lsZXIsIGJ1dCB3ZVxuICogYWxyZWFkeSBzY2hlZHVsZSBpbiBiYXRjaGVzIGluc2lkZSBvdXIgcmVuZGVyaW5nIGNvZGVcbiAqIEB0ZW1wbGF0ZSBBcmdcbiAqIEBwYXJhbSB7KGFyZzogQXJnKSA9PiB2b2lkfSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IHRyaWdnZXJzIHRoZSB1cGRhdGVkXG4gKiBAcGFyYW0ge0FyZ30gW2FyZ10gT3B0aW9uYWwgYXJndW1lbnQgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIHRoZSBjYWxsYmFja1xuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2FtZWxjYXNlXG5jb25zdCB1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyA9IChjYWxsYmFjaywgYXJnKSA9PiBjYWxsYmFjayhhcmcpO1xuXG4vKipcbiAqIEluIFJlYWN0LCBgZmx1c2hTeW5jYCBmbHVzaGVzIHRoZSBlbnRpcmUgdHJlZSBhbmQgZm9yY2VzIGEgcmVyZW5kZXIuIEl0J3NcbiAqIGltcGxtZW50ZWQgaGVyZSBhcyBhIG5vLW9wLlxuICogQHRlbXBsYXRlIEFyZ1xuICogQHRlbXBsYXRlIFJlc3VsdFxuICogQHBhcmFtIHsoYXJnOiBBcmcpID0+IFJlc3VsdH0gY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBydW5zIGJlZm9yZSB0aGUgZmx1c2hcbiAqIEBwYXJhbSB7QXJnfSBbYXJnXSBPcHRpb25hbCBhcnVnbWVudCB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrXG4gKiBAcmV0dXJuc1xuICovXG5jb25zdCBmbHVzaFN5bmMgPSAoY2FsbGJhY2ssIGFyZykgPT4gY2FsbGJhY2soYXJnKTtcblxuLyoqXG4gKiBTdHJpY3QgTW9kZSBpcyBub3QgaW1wbGVtZW50ZWQgaW4gUHJlYWN0LCBzbyB3ZSBwcm92aWRlIGEgc3RhbmQtaW4gZm9yIGl0XG4gKiB0aGF0IGp1c3QgcmVuZGVycyBpdHMgY2hpbGRyZW4gd2l0aG91dCBpbXBvc2luZyBhbnkgcmVzdHJpY3Rpb25zLlxuICovXG5jb25zdCBTdHJpY3RNb2RlID0gRnJhZ21lbnQ7XG5cbmV4cG9ydCAqIGZyb20gJ3ByZWFjdC9ob29rcyc7XG5leHBvcnQge1xuXHR2ZXJzaW9uLFxuXHRDaGlsZHJlbixcblx0cmVuZGVyLFxuXHRoeWRyYXRlLFxuXHR1bm1vdW50Q29tcG9uZW50QXROb2RlLFxuXHRjcmVhdGVQb3J0YWwsXG5cdGNyZWF0ZUVsZW1lbnQsXG5cdGNyZWF0ZUNvbnRleHQsXG5cdGNyZWF0ZUZhY3RvcnksXG5cdGNsb25lRWxlbWVudCxcblx0Y3JlYXRlUmVmLFxuXHRGcmFnbWVudCxcblx0aXNWYWxpZEVsZW1lbnQsXG5cdGZpbmRET01Ob2RlLFxuXHRDb21wb25lbnQsXG5cdFB1cmVDb21wb25lbnQsXG5cdG1lbW8sXG5cdGZvcndhcmRSZWYsXG5cdGZsdXNoU3luYyxcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNhbWVsY2FzZVxuXHR1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyxcblx0U3RyaWN0TW9kZSxcblx0U3VzcGVuc2UsXG5cdFN1c3BlbnNlTGlzdCxcblx0bGF6eSxcblx0X19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRURcbn07XG5cbi8vIFJlYWN0IGNvcGllcyB0aGUgbmFtZWQgZXhwb3J0cyB0byB0aGUgZGVmYXVsdCBvbmUuXG5leHBvcnQgZGVmYXVsdCB7XG5cdHVzZVN0YXRlLFxuXHR1c2VSZWR1Y2VyLFxuXHR1c2VFZmZlY3QsXG5cdHVzZUxheW91dEVmZmVjdCxcblx0dXNlUmVmLFxuXHR1c2VJbXBlcmF0aXZlSGFuZGxlLFxuXHR1c2VNZW1vLFxuXHR1c2VDYWxsYmFjayxcblx0dXNlQ29udGV4dCxcblx0dXNlRGVidWdWYWx1ZSxcblx0dmVyc2lvbixcblx0Q2hpbGRyZW4sXG5cdHJlbmRlcixcblx0aHlkcmF0ZSxcblx0dW5tb3VudENvbXBvbmVudEF0Tm9kZSxcblx0Y3JlYXRlUG9ydGFsLFxuXHRjcmVhdGVFbGVtZW50LFxuXHRjcmVhdGVDb250ZXh0LFxuXHRjcmVhdGVGYWN0b3J5LFxuXHRjbG9uZUVsZW1lbnQsXG5cdGNyZWF0ZVJlZixcblx0RnJhZ21lbnQsXG5cdGlzVmFsaWRFbGVtZW50LFxuXHRmaW5kRE9NTm9kZSxcblx0Q29tcG9uZW50LFxuXHRQdXJlQ29tcG9uZW50LFxuXHRtZW1vLFxuXHRmb3J3YXJkUmVmLFxuXHRmbHVzaFN5bmMsXG5cdHVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzLFxuXHRTdHJpY3RNb2RlLFxuXHRTdXNwZW5zZSxcblx0U3VzcGVuc2VMaXN0LFxuXHRsYXp5LFxuXHRfX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRFxufTtcbiIsICJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuZXhwb3J0IHZhciBEZWZhdWx0Q29udGV4dCA9IHtcbiAgY29sb3I6IHVuZGVmaW5lZCxcbiAgc2l6ZTogdW5kZWZpbmVkLFxuICBjbGFzc05hbWU6IHVuZGVmaW5lZCxcbiAgc3R5bGU6IHVuZGVmaW5lZCxcbiAgYXR0cjogdW5kZWZpbmVkXG59O1xuZXhwb3J0IHZhciBJY29uQ29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQgJiYgUmVhY3QuY3JlYXRlQ29udGV4dChEZWZhdWx0Q29udGV4dCk7IiwgInZhciBfX2Fzc2lnbiA9IHRoaXMgJiYgdGhpcy5fX2Fzc2lnbiB8fCBmdW5jdGlvbiAoKSB7XG4gIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodCkge1xuICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcblxuICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdDtcbiAgfTtcblxuICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG5cbnZhciBfX3Jlc3QgPSB0aGlzICYmIHRoaXMuX19yZXN0IHx8IGZ1bmN0aW9uIChzLCBlKSB7XG4gIHZhciB0ID0ge307XG5cbiAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApIHRbcF0gPSBzW3BdO1xuXG4gIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIikgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xuICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSkgdFtwW2ldXSA9IHNbcFtpXV07XG4gIH1cbiAgcmV0dXJuIHQ7XG59O1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgSWNvbkNvbnRleHQsIERlZmF1bHRDb250ZXh0IH0gZnJvbSAnLi9pY29uQ29udGV4dCc7XG5cbmZ1bmN0aW9uIFRyZWUyRWxlbWVudCh0cmVlKSB7XG4gIHJldHVybiB0cmVlICYmIHRyZWUubWFwKGZ1bmN0aW9uIChub2RlLCBpKSB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQobm9kZS50YWcsIF9fYXNzaWduKHtcbiAgICAgIGtleTogaVxuICAgIH0sIG5vZGUuYXR0ciksIFRyZWUyRWxlbWVudChub2RlLmNoaWxkKSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gR2VuSWNvbihkYXRhKSB7XG4gIHJldHVybiBmdW5jdGlvbiAocHJvcHMpIHtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChJY29uQmFzZSwgX19hc3NpZ24oe1xuICAgICAgYXR0cjogX19hc3NpZ24oe30sIGRhdGEuYXR0cilcbiAgICB9LCBwcm9wcyksIFRyZWUyRWxlbWVudChkYXRhLmNoaWxkKSk7XG4gIH07XG59XG5leHBvcnQgZnVuY3Rpb24gSWNvbkJhc2UocHJvcHMpIHtcbiAgdmFyIGVsZW0gPSBmdW5jdGlvbiAoY29uZikge1xuICAgIHZhciBhdHRyID0gcHJvcHMuYXR0cixcbiAgICAgICAgc2l6ZSA9IHByb3BzLnNpemUsXG4gICAgICAgIHRpdGxlID0gcHJvcHMudGl0bGUsXG4gICAgICAgIHN2Z1Byb3BzID0gX19yZXN0KHByb3BzLCBbXCJhdHRyXCIsIFwic2l6ZVwiLCBcInRpdGxlXCJdKTtcblxuICAgIHZhciBjb21wdXRlZFNpemUgPSBzaXplIHx8IGNvbmYuc2l6ZSB8fCBcIjFlbVwiO1xuICAgIHZhciBjbGFzc05hbWU7XG4gICAgaWYgKGNvbmYuY2xhc3NOYW1lKSBjbGFzc05hbWUgPSBjb25mLmNsYXNzTmFtZTtcbiAgICBpZiAocHJvcHMuY2xhc3NOYW1lKSBjbGFzc05hbWUgPSAoY2xhc3NOYW1lID8gY2xhc3NOYW1lICsgJyAnIDogJycpICsgcHJvcHMuY2xhc3NOYW1lO1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9fYXNzaWduKHtcbiAgICAgIHN0cm9rZTogXCJjdXJyZW50Q29sb3JcIixcbiAgICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgICBzdHJva2VXaWR0aDogXCIwXCJcbiAgICB9LCBjb25mLmF0dHIsIGF0dHIsIHN2Z1Byb3BzLCB7XG4gICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZSxcbiAgICAgIHN0eWxlOiBfX2Fzc2lnbihfX2Fzc2lnbih7XG4gICAgICAgIGNvbG9yOiBwcm9wcy5jb2xvciB8fCBjb25mLmNvbG9yXG4gICAgICB9LCBjb25mLnN0eWxlKSwgcHJvcHMuc3R5bGUpLFxuICAgICAgaGVpZ2h0OiBjb21wdXRlZFNpemUsXG4gICAgICB3aWR0aDogY29tcHV0ZWRTaXplLFxuICAgICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgIH0pLCB0aXRsZSAmJiBSZWFjdC5jcmVhdGVFbGVtZW50KFwidGl0bGVcIiwgbnVsbCwgdGl0bGUpLCBwcm9wcy5jaGlsZHJlbik7XG4gIH07XG5cbiAgcmV0dXJuIEljb25Db250ZXh0ICE9PSB1bmRlZmluZWQgPyBSZWFjdC5jcmVhdGVFbGVtZW50KEljb25Db250ZXh0LkNvbnN1bWVyLCBudWxsLCBmdW5jdGlvbiAoY29uZikge1xuICAgIHJldHVybiBlbGVtKGNvbmYpO1xuICB9KSA6IGVsZW0oRGVmYXVsdENvbnRleHQpO1xufSIsICIvLyBUSElTIEZJTEUgSVMgQVVUTyBHRU5FUkFURURcbmltcG9ydCB7IEdlbkljb24gfSBmcm9tICcuLi9saWInO1xuZXhwb3J0IGZ1bmN0aW9uIEZpQWN0aXZpdHkgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcInBvbHlsaW5lXCIsXCJhdHRyXCI6e1wicG9pbnRzXCI6XCIyMiAxMiAxOCAxMiAxNSAyMSA5IDMgNiAxMiAyIDEyXCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpQWlycGxheSAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk01IDE3SDRhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoMTZhMiAyIDAgMCAxIDIgMnYxMGEyIDIgMCAwIDEtMiAyaC0xXCJ9fSx7XCJ0YWdcIjpcInBvbHlnb25cIixcImF0dHJcIjp7XCJwb2ludHNcIjpcIjEyIDE1IDE3IDIxIDcgMjEgMTIgMTVcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlBbGVydENpcmNsZSAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwiY2lyY2xlXCIsXCJhdHRyXCI6e1wiY3hcIjpcIjEyXCIsXCJjeVwiOlwiMTJcIixcInJcIjpcIjEwXCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMTJcIixcInkxXCI6XCI4XCIsXCJ4MlwiOlwiMTJcIixcInkyXCI6XCIxMlwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjEyXCIsXCJ5MVwiOlwiMTZcIixcIngyXCI6XCIxMi4wMVwiLFwieTJcIjpcIjE2XCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpQWxlcnRPY3RhZ29uIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJwb2x5Z29uXCIsXCJhdHRyXCI6e1wicG9pbnRzXCI6XCI3Ljg2IDIgMTYuMTQgMiAyMiA3Ljg2IDIyIDE2LjE0IDE2LjE0IDIyIDcuODYgMjIgMiAxNi4xNCAyIDcuODYgNy44NiAyXCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMTJcIixcInkxXCI6XCI4XCIsXCJ4MlwiOlwiMTJcIixcInkyXCI6XCIxMlwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjEyXCIsXCJ5MVwiOlwiMTZcIixcIngyXCI6XCIxMi4wMVwiLFwieTJcIjpcIjE2XCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpQWxlcnRUcmlhbmdsZSAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk0xMC4yOSAzLjg2TDEuODIgMThhMiAyIDAgMCAwIDEuNzEgM2gxNi45NGEyIDIgMCAwIDAgMS43MS0zTDEzLjcxIDMuODZhMiAyIDAgMCAwLTMuNDIgMHpcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIxMlwiLFwieTFcIjpcIjlcIixcIngyXCI6XCIxMlwiLFwieTJcIjpcIjEzXCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMTJcIixcInkxXCI6XCIxN1wiLFwieDJcIjpcIjEyLjAxXCIsXCJ5MlwiOlwiMTdcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlBbGlnbkNlbnRlciAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIxOFwiLFwieTFcIjpcIjEwXCIsXCJ4MlwiOlwiNlwiLFwieTJcIjpcIjEwXCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMjFcIixcInkxXCI6XCI2XCIsXCJ4MlwiOlwiM1wiLFwieTJcIjpcIjZcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIyMVwiLFwieTFcIjpcIjE0XCIsXCJ4MlwiOlwiM1wiLFwieTJcIjpcIjE0XCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMThcIixcInkxXCI6XCIxOFwiLFwieDJcIjpcIjZcIixcInkyXCI6XCIxOFwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaUFsaWduSnVzdGlmeSAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIyMVwiLFwieTFcIjpcIjEwXCIsXCJ4MlwiOlwiM1wiLFwieTJcIjpcIjEwXCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMjFcIixcInkxXCI6XCI2XCIsXCJ4MlwiOlwiM1wiLFwieTJcIjpcIjZcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIyMVwiLFwieTFcIjpcIjE0XCIsXCJ4MlwiOlwiM1wiLFwieTJcIjpcIjE0XCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMjFcIixcInkxXCI6XCIxOFwiLFwieDJcIjpcIjNcIixcInkyXCI6XCIxOFwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaUFsaWduTGVmdCAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIxN1wiLFwieTFcIjpcIjEwXCIsXCJ4MlwiOlwiM1wiLFwieTJcIjpcIjEwXCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMjFcIixcInkxXCI6XCI2XCIsXCJ4MlwiOlwiM1wiLFwieTJcIjpcIjZcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIyMVwiLFwieTFcIjpcIjE0XCIsXCJ4MlwiOlwiM1wiLFwieTJcIjpcIjE0XCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMTdcIixcInkxXCI6XCIxOFwiLFwieDJcIjpcIjNcIixcInkyXCI6XCIxOFwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaUFsaWduUmlnaHQgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMjFcIixcInkxXCI6XCIxMFwiLFwieDJcIjpcIjdcIixcInkyXCI6XCIxMFwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjIxXCIsXCJ5MVwiOlwiNlwiLFwieDJcIjpcIjNcIixcInkyXCI6XCI2XCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMjFcIixcInkxXCI6XCIxNFwiLFwieDJcIjpcIjNcIixcInkyXCI6XCIxNFwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjIxXCIsXCJ5MVwiOlwiMThcIixcIngyXCI6XCI3XCIsXCJ5MlwiOlwiMThcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlBbmNob3IgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcImNpcmNsZVwiLFwiYXR0clwiOntcImN4XCI6XCIxMlwiLFwiY3lcIjpcIjVcIixcInJcIjpcIjNcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIxMlwiLFwieTFcIjpcIjIyXCIsXCJ4MlwiOlwiMTJcIixcInkyXCI6XCI4XCJ9fSx7XCJ0YWdcIjpcInBhdGhcIixcImF0dHJcIjp7XCJkXCI6XCJNNSAxMkgyYTEwIDEwIDAgMCAwIDIwIDBoLTNcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlBcGVydHVyZSAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwiY2lyY2xlXCIsXCJhdHRyXCI6e1wiY3hcIjpcIjEyXCIsXCJjeVwiOlwiMTJcIixcInJcIjpcIjEwXCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMTQuMzFcIixcInkxXCI6XCI4XCIsXCJ4MlwiOlwiMjAuMDVcIixcInkyXCI6XCIxNy45NFwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjkuNjlcIixcInkxXCI6XCI4XCIsXCJ4MlwiOlwiMjEuMTdcIixcInkyXCI6XCI4XCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiNy4zOFwiLFwieTFcIjpcIjEyXCIsXCJ4MlwiOlwiMTMuMTJcIixcInkyXCI6XCIyLjA2XCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiOS42OVwiLFwieTFcIjpcIjE2XCIsXCJ4MlwiOlwiMy45NVwiLFwieTJcIjpcIjYuMDZcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIxNC4zMVwiLFwieTFcIjpcIjE2XCIsXCJ4MlwiOlwiMi44M1wiLFwieTJcIjpcIjE2XCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMTYuNjJcIixcInkxXCI6XCIxMlwiLFwieDJcIjpcIjEwLjg4XCIsXCJ5MlwiOlwiMjEuOTRcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlBcmNoaXZlIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJwb2x5bGluZVwiLFwiYXR0clwiOntcInBvaW50c1wiOlwiMjEgOCAyMSAyMSAzIDIxIDMgOFwifX0se1widGFnXCI6XCJyZWN0XCIsXCJhdHRyXCI6e1wieFwiOlwiMVwiLFwieVwiOlwiM1wiLFwid2lkdGhcIjpcIjIyXCIsXCJoZWlnaHRcIjpcIjVcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIxMFwiLFwieTFcIjpcIjEyXCIsXCJ4MlwiOlwiMTRcIixcInkyXCI6XCIxMlwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaUFycm93RG93bkNpcmNsZSAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwiY2lyY2xlXCIsXCJhdHRyXCI6e1wiY3hcIjpcIjEyXCIsXCJjeVwiOlwiMTJcIixcInJcIjpcIjEwXCJ9fSx7XCJ0YWdcIjpcInBvbHlsaW5lXCIsXCJhdHRyXCI6e1wicG9pbnRzXCI6XCI4IDEyIDEyIDE2IDE2IDEyXCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMTJcIixcInkxXCI6XCI4XCIsXCJ4MlwiOlwiMTJcIixcInkyXCI6XCIxNlwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaUFycm93RG93bkxlZnQgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMTdcIixcInkxXCI6XCI3XCIsXCJ4MlwiOlwiN1wiLFwieTJcIjpcIjE3XCJ9fSx7XCJ0YWdcIjpcInBvbHlsaW5lXCIsXCJhdHRyXCI6e1wicG9pbnRzXCI6XCIxNyAxNyA3IDE3IDcgN1wifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaUFycm93RG93blJpZ2h0IChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjdcIixcInkxXCI6XCI3XCIsXCJ4MlwiOlwiMTdcIixcInkyXCI6XCIxN1wifX0se1widGFnXCI6XCJwb2x5bGluZVwiLFwiYXR0clwiOntcInBvaW50c1wiOlwiMTcgNyAxNyAxNyA3IDE3XCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpQXJyb3dEb3duIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjEyXCIsXCJ5MVwiOlwiNVwiLFwieDJcIjpcIjEyXCIsXCJ5MlwiOlwiMTlcIn19LHtcInRhZ1wiOlwicG9seWxpbmVcIixcImF0dHJcIjp7XCJwb2ludHNcIjpcIjE5IDEyIDEyIDE5IDUgMTJcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlBcnJvd0xlZnRDaXJjbGUgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcImNpcmNsZVwiLFwiYXR0clwiOntcImN4XCI6XCIxMlwiLFwiY3lcIjpcIjEyXCIsXCJyXCI6XCIxMFwifX0se1widGFnXCI6XCJwb2x5bGluZVwiLFwiYXR0clwiOntcInBvaW50c1wiOlwiMTIgOCA4IDEyIDEyIDE2XCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMTZcIixcInkxXCI6XCIxMlwiLFwieDJcIjpcIjhcIixcInkyXCI6XCIxMlwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaUFycm93TGVmdCAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIxOVwiLFwieTFcIjpcIjEyXCIsXCJ4MlwiOlwiNVwiLFwieTJcIjpcIjEyXCJ9fSx7XCJ0YWdcIjpcInBvbHlsaW5lXCIsXCJhdHRyXCI6e1wicG9pbnRzXCI6XCIxMiAxOSA1IDEyIDEyIDVcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlBcnJvd1JpZ2h0Q2lyY2xlIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJjaXJjbGVcIixcImF0dHJcIjp7XCJjeFwiOlwiMTJcIixcImN5XCI6XCIxMlwiLFwiclwiOlwiMTBcIn19LHtcInRhZ1wiOlwicG9seWxpbmVcIixcImF0dHJcIjp7XCJwb2ludHNcIjpcIjEyIDE2IDE2IDEyIDEyIDhcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCI4XCIsXCJ5MVwiOlwiMTJcIixcIngyXCI6XCIxNlwiLFwieTJcIjpcIjEyXCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpQXJyb3dSaWdodCAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCI1XCIsXCJ5MVwiOlwiMTJcIixcIngyXCI6XCIxOVwiLFwieTJcIjpcIjEyXCJ9fSx7XCJ0YWdcIjpcInBvbHlsaW5lXCIsXCJhdHRyXCI6e1wicG9pbnRzXCI6XCIxMiA1IDE5IDEyIDEyIDE5XCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpQXJyb3dVcENpcmNsZSAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwiY2lyY2xlXCIsXCJhdHRyXCI6e1wiY3hcIjpcIjEyXCIsXCJjeVwiOlwiMTJcIixcInJcIjpcIjEwXCJ9fSx7XCJ0YWdcIjpcInBvbHlsaW5lXCIsXCJhdHRyXCI6e1wicG9pbnRzXCI6XCIxNiAxMiAxMiA4IDggMTJcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIxMlwiLFwieTFcIjpcIjE2XCIsXCJ4MlwiOlwiMTJcIixcInkyXCI6XCI4XCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpQXJyb3dVcExlZnQgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMTdcIixcInkxXCI6XCIxN1wiLFwieDJcIjpcIjdcIixcInkyXCI6XCI3XCJ9fSx7XCJ0YWdcIjpcInBvbHlsaW5lXCIsXCJhdHRyXCI6e1wicG9pbnRzXCI6XCI3IDE3IDcgNyAxNyA3XCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpQXJyb3dVcFJpZ2h0IChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjdcIixcInkxXCI6XCIxN1wiLFwieDJcIjpcIjE3XCIsXCJ5MlwiOlwiN1wifX0se1widGFnXCI6XCJwb2x5bGluZVwiLFwiYXR0clwiOntcInBvaW50c1wiOlwiNyA3IDE3IDcgMTcgMTdcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlBcnJvd1VwIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjEyXCIsXCJ5MVwiOlwiMTlcIixcIngyXCI6XCIxMlwiLFwieTJcIjpcIjVcIn19LHtcInRhZ1wiOlwicG9seWxpbmVcIixcImF0dHJcIjp7XCJwb2ludHNcIjpcIjUgMTIgMTIgNSAxOSAxMlwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaUF0U2lnbiAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwiY2lyY2xlXCIsXCJhdHRyXCI6e1wiY3hcIjpcIjEyXCIsXCJjeVwiOlwiMTJcIixcInJcIjpcIjRcIn19LHtcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk0xNiA4djVhMyAzIDAgMCAwIDYgMHYtMWExMCAxMCAwIDEgMC0zLjkyIDcuOTRcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlBd2FyZCAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwiY2lyY2xlXCIsXCJhdHRyXCI6e1wiY3hcIjpcIjEyXCIsXCJjeVwiOlwiOFwiLFwiclwiOlwiN1wifX0se1widGFnXCI6XCJwb2x5bGluZVwiLFwiYXR0clwiOntcInBvaW50c1wiOlwiOC4yMSAxMy44OSA3IDIzIDEyIDIwIDE3IDIzIDE1Ljc5IDEzLjg4XCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpQmFyQ2hhcnQyIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjE4XCIsXCJ5MVwiOlwiMjBcIixcIngyXCI6XCIxOFwiLFwieTJcIjpcIjEwXCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMTJcIixcInkxXCI6XCIyMFwiLFwieDJcIjpcIjEyXCIsXCJ5MlwiOlwiNFwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjZcIixcInkxXCI6XCIyMFwiLFwieDJcIjpcIjZcIixcInkyXCI6XCIxNFwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaUJhckNoYXJ0IChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjEyXCIsXCJ5MVwiOlwiMjBcIixcIngyXCI6XCIxMlwiLFwieTJcIjpcIjEwXCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMThcIixcInkxXCI6XCIyMFwiLFwieDJcIjpcIjE4XCIsXCJ5MlwiOlwiNFwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjZcIixcInkxXCI6XCIyMFwiLFwieDJcIjpcIjZcIixcInkyXCI6XCIxNlwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaUJhdHRlcnlDaGFyZ2luZyAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk01IDE4SDNhMiAyIDAgMCAxLTItMlY4YTIgMiAwIDAgMSAyLTJoMy4xOU0xNSA2aDJhMiAyIDAgMCAxIDIgMnY4YTIgMiAwIDAgMS0yIDJoLTMuMTlcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIyM1wiLFwieTFcIjpcIjEzXCIsXCJ4MlwiOlwiMjNcIixcInkyXCI6XCIxMVwifX0se1widGFnXCI6XCJwb2x5bGluZVwiLFwiYXR0clwiOntcInBvaW50c1wiOlwiMTEgNiA3IDEyIDEzIDEyIDkgMThcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlCYXR0ZXJ5IChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJyZWN0XCIsXCJhdHRyXCI6e1wieFwiOlwiMVwiLFwieVwiOlwiNlwiLFwid2lkdGhcIjpcIjE4XCIsXCJoZWlnaHRcIjpcIjEyXCIsXCJyeFwiOlwiMlwiLFwicnlcIjpcIjJcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIyM1wiLFwieTFcIjpcIjEzXCIsXCJ4MlwiOlwiMjNcIixcInkyXCI6XCIxMVwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaUJlbGxPZmYgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcInBhdGhcIixcImF0dHJcIjp7XCJkXCI6XCJNMTMuNzMgMjFhMiAyIDAgMCAxLTMuNDYgMFwifX0se1widGFnXCI6XCJwYXRoXCIsXCJhdHRyXCI6e1wiZFwiOlwiTTE4LjYzIDEzQTE3Ljg5IDE3Ljg5IDAgMCAxIDE4IDhcIn19LHtcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk02LjI2IDYuMjZBNS44NiA1Ljg2IDAgMCAwIDYgOGMwIDctMyA5LTMgOWgxNFwifX0se1widGFnXCI6XCJwYXRoXCIsXCJhdHRyXCI6e1wiZFwiOlwiTTE4IDhhNiA2IDAgMCAwLTkuMzMtNVwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjFcIixcInkxXCI6XCIxXCIsXCJ4MlwiOlwiMjNcIixcInkyXCI6XCIyM1wifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaUJlbGwgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcInBhdGhcIixcImF0dHJcIjp7XCJkXCI6XCJNMTggOEE2IDYgMCAwIDAgNiA4YzAgNy0zIDktMyA5aDE4cy0zLTItMy05XCJ9fSx7XCJ0YWdcIjpcInBhdGhcIixcImF0dHJcIjp7XCJkXCI6XCJNMTMuNzMgMjFhMiAyIDAgMCAxLTMuNDYgMFwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaUJsdWV0b290aCAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicG9seWxpbmVcIixcImF0dHJcIjp7XCJwb2ludHNcIjpcIjYuNSA2LjUgMTcuNSAxNy41IDEyIDIzIDEyIDEgMTcuNSA2LjUgNi41IDE3LjVcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlCb2xkIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJwYXRoXCIsXCJhdHRyXCI6e1wiZFwiOlwiTTYgNGg4YTQgNCAwIDAgMSA0IDQgNCA0IDAgMCAxLTQgNEg2elwifX0se1widGFnXCI6XCJwYXRoXCIsXCJhdHRyXCI6e1wiZFwiOlwiTTYgMTJoOWE0IDQgMCAwIDEgNCA0IDQgNCAwIDAgMS00IDRINnpcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlCb29rT3BlbiAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk0yIDNoNmE0IDQgMCAwIDEgNCA0djE0YTMgMyAwIDAgMC0zLTNIMnpcIn19LHtcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk0yMiAzaC02YTQgNCAwIDAgMC00IDR2MTRhMyAzIDAgMCAxIDMtM2g3elwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaUJvb2sgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcInBhdGhcIixcImF0dHJcIjp7XCJkXCI6XCJNNCAxOS41QTIuNSAyLjUgMCAwIDEgNi41IDE3SDIwXCJ9fSx7XCJ0YWdcIjpcInBhdGhcIixcImF0dHJcIjp7XCJkXCI6XCJNNi41IDJIMjB2MjBINi41QTIuNSAyLjUgMCAwIDEgNCAxOS41di0xNUEyLjUgMi41IDAgMCAxIDYuNSAyelwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaUJvb2ttYXJrIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJwYXRoXCIsXCJhdHRyXCI6e1wiZFwiOlwiTTE5IDIxbC03LTUtNyA1VjVhMiAyIDAgMCAxIDItMmgxMGEyIDIgMCAwIDEgMiAyelwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaUJveCAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk0yMSAxNlY4YTIgMiAwIDAgMC0xLTEuNzNsLTctNGEyIDIgMCAwIDAtMiAwbC03IDRBMiAyIDAgMCAwIDMgOHY4YTIgMiAwIDAgMCAxIDEuNzNsNyA0YTIgMiAwIDAgMCAyIDBsNy00QTIgMiAwIDAgMCAyMSAxNnpcIn19LHtcInRhZ1wiOlwicG9seWxpbmVcIixcImF0dHJcIjp7XCJwb2ludHNcIjpcIjMuMjcgNi45NiAxMiAxMi4wMSAyMC43MyA2Ljk2XCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMTJcIixcInkxXCI6XCIyMi4wOFwiLFwieDJcIjpcIjEyXCIsXCJ5MlwiOlwiMTJcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlCcmllZmNhc2UgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcInJlY3RcIixcImF0dHJcIjp7XCJ4XCI6XCIyXCIsXCJ5XCI6XCI3XCIsXCJ3aWR0aFwiOlwiMjBcIixcImhlaWdodFwiOlwiMTRcIixcInJ4XCI6XCIyXCIsXCJyeVwiOlwiMlwifX0se1widGFnXCI6XCJwYXRoXCIsXCJhdHRyXCI6e1wiZFwiOlwiTTE2IDIxVjVhMiAyIDAgMCAwLTItMmgtNGEyIDIgMCAwIDAtMiAydjE2XCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpQ2FsZW5kYXIgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcInJlY3RcIixcImF0dHJcIjp7XCJ4XCI6XCIzXCIsXCJ5XCI6XCI0XCIsXCJ3aWR0aFwiOlwiMThcIixcImhlaWdodFwiOlwiMThcIixcInJ4XCI6XCIyXCIsXCJyeVwiOlwiMlwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjE2XCIsXCJ5MVwiOlwiMlwiLFwieDJcIjpcIjE2XCIsXCJ5MlwiOlwiNlwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjhcIixcInkxXCI6XCIyXCIsXCJ4MlwiOlwiOFwiLFwieTJcIjpcIjZcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIzXCIsXCJ5MVwiOlwiMTBcIixcIngyXCI6XCIyMVwiLFwieTJcIjpcIjEwXCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpQ2FtZXJhT2ZmIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjFcIixcInkxXCI6XCIxXCIsXCJ4MlwiOlwiMjNcIixcInkyXCI6XCIyM1wifX0se1widGFnXCI6XCJwYXRoXCIsXCJhdHRyXCI6e1wiZFwiOlwiTTIxIDIxSDNhMiAyIDAgMCAxLTItMlY4YTIgMiAwIDAgMSAyLTJoM20zLTNoNmwyIDNoNGEyIDIgMCAwIDEgMiAydjkuMzRtLTcuNzItMi4wNmE0IDQgMCAxIDEtNS41Ni01LjU2XCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpQ2FtZXJhIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJwYXRoXCIsXCJhdHRyXCI6e1wiZFwiOlwiTTIzIDE5YTIgMiAwIDAgMS0yIDJIM2EyIDIgMCAwIDEtMi0yVjhhMiAyIDAgMCAxIDItMmg0bDItM2g2bDIgM2g0YTIgMiAwIDAgMSAyIDJ6XCJ9fSx7XCJ0YWdcIjpcImNpcmNsZVwiLFwiYXR0clwiOntcImN4XCI6XCIxMlwiLFwiY3lcIjpcIjEzXCIsXCJyXCI6XCI0XCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpQ2FzdCAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk0yIDE2LjFBNSA1IDAgMCAxIDUuOSAyME0yIDEyLjA1QTkgOSAwIDAgMSA5Ljk1IDIwTTIgOFY2YTIgMiAwIDAgMSAyLTJoMTZhMiAyIDAgMCAxIDIgMnYxMmEyIDIgMCAwIDEtMiAyaC02XCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMlwiLFwieTFcIjpcIjIwXCIsXCJ4MlwiOlwiMi4wMVwiLFwieTJcIjpcIjIwXCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpQ2hlY2tDaXJjbGUgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcInBhdGhcIixcImF0dHJcIjp7XCJkXCI6XCJNMjIgMTEuMDhWMTJhMTAgMTAgMCAxIDEtNS45My05LjE0XCJ9fSx7XCJ0YWdcIjpcInBvbHlsaW5lXCIsXCJhdHRyXCI6e1wicG9pbnRzXCI6XCIyMiA0IDEyIDE0LjAxIDkgMTEuMDFcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlDaGVja1NxdWFyZSAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicG9seWxpbmVcIixcImF0dHJcIjp7XCJwb2ludHNcIjpcIjkgMTEgMTIgMTQgMjIgNFwifX0se1widGFnXCI6XCJwYXRoXCIsXCJhdHRyXCI6e1wiZFwiOlwiTTIxIDEydjdhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDExXCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpQ2hlY2sgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcInBvbHlsaW5lXCIsXCJhdHRyXCI6e1wicG9pbnRzXCI6XCIyMCA2IDkgMTcgNCAxMlwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaUNoZXZyb25Eb3duIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJwb2x5bGluZVwiLFwiYXR0clwiOntcInBvaW50c1wiOlwiNiA5IDEyIDE1IDE4IDlcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlDaGV2cm9uTGVmdCAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicG9seWxpbmVcIixcImF0dHJcIjp7XCJwb2ludHNcIjpcIjE1IDE4IDkgMTIgMTUgNlwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaUNoZXZyb25SaWdodCAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicG9seWxpbmVcIixcImF0dHJcIjp7XCJwb2ludHNcIjpcIjkgMTggMTUgMTIgOSA2XCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpQ2hldnJvblVwIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJwb2x5bGluZVwiLFwiYXR0clwiOntcInBvaW50c1wiOlwiMTggMTUgMTIgOSA2IDE1XCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpQ2hldnJvbnNEb3duIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJwb2x5bGluZVwiLFwiYXR0clwiOntcInBvaW50c1wiOlwiNyAxMyAxMiAxOCAxNyAxM1wifX0se1widGFnXCI6XCJwb2x5bGluZVwiLFwiYXR0clwiOntcInBvaW50c1wiOlwiNyA2IDEyIDExIDE3IDZcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlDaGV2cm9uc0xlZnQgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcInBvbHlsaW5lXCIsXCJhdHRyXCI6e1wicG9pbnRzXCI6XCIxMSAxNyA2IDEyIDExIDdcIn19LHtcInRhZ1wiOlwicG9seWxpbmVcIixcImF0dHJcIjp7XCJwb2ludHNcIjpcIjE4IDE3IDEzIDEyIDE4IDdcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlDaGV2cm9uc1JpZ2h0IChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJwb2x5bGluZVwiLFwiYXR0clwiOntcInBvaW50c1wiOlwiMTMgMTcgMTggMTIgMTMgN1wifX0se1widGFnXCI6XCJwb2x5bGluZVwiLFwiYXR0clwiOntcInBvaW50c1wiOlwiNiAxNyAxMSAxMiA2IDdcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlDaGV2cm9uc1VwIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJwb2x5bGluZVwiLFwiYXR0clwiOntcInBvaW50c1wiOlwiMTcgMTEgMTIgNiA3IDExXCJ9fSx7XCJ0YWdcIjpcInBvbHlsaW5lXCIsXCJhdHRyXCI6e1wicG9pbnRzXCI6XCIxNyAxOCAxMiAxMyA3IDE4XCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpQ2hyb21lIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJjaXJjbGVcIixcImF0dHJcIjp7XCJjeFwiOlwiMTJcIixcImN5XCI6XCIxMlwiLFwiclwiOlwiMTBcIn19LHtcInRhZ1wiOlwiY2lyY2xlXCIsXCJhdHRyXCI6e1wiY3hcIjpcIjEyXCIsXCJjeVwiOlwiMTJcIixcInJcIjpcIjRcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIyMS4xN1wiLFwieTFcIjpcIjhcIixcIngyXCI6XCIxMlwiLFwieTJcIjpcIjhcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIzLjk1XCIsXCJ5MVwiOlwiNi4wNlwiLFwieDJcIjpcIjguNTRcIixcInkyXCI6XCIxNFwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjEwLjg4XCIsXCJ5MVwiOlwiMjEuOTRcIixcIngyXCI6XCIxNS40NlwiLFwieTJcIjpcIjE0XCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpQ2lyY2xlIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJjaXJjbGVcIixcImF0dHJcIjp7XCJjeFwiOlwiMTJcIixcImN5XCI6XCIxMlwiLFwiclwiOlwiMTBcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlDbGlwYm9hcmQgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcInBhdGhcIixcImF0dHJcIjp7XCJkXCI6XCJNMTYgNGgyYTIgMiAwIDAgMSAyIDJ2MTRhMiAyIDAgMCAxLTIgMkg2YTIgMiAwIDAgMS0yLTJWNmEyIDIgMCAwIDEgMi0yaDJcIn19LHtcInRhZ1wiOlwicmVjdFwiLFwiYXR0clwiOntcInhcIjpcIjhcIixcInlcIjpcIjJcIixcIndpZHRoXCI6XCI4XCIsXCJoZWlnaHRcIjpcIjRcIixcInJ4XCI6XCIxXCIsXCJyeVwiOlwiMVwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaUNsb2NrIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJjaXJjbGVcIixcImF0dHJcIjp7XCJjeFwiOlwiMTJcIixcImN5XCI6XCIxMlwiLFwiclwiOlwiMTBcIn19LHtcInRhZ1wiOlwicG9seWxpbmVcIixcImF0dHJcIjp7XCJwb2ludHNcIjpcIjEyIDYgMTIgMTIgMTYgMTRcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlDbG91ZERyaXp6bGUgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiOFwiLFwieTFcIjpcIjE5XCIsXCJ4MlwiOlwiOFwiLFwieTJcIjpcIjIxXCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiOFwiLFwieTFcIjpcIjEzXCIsXCJ4MlwiOlwiOFwiLFwieTJcIjpcIjE1XCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMTZcIixcInkxXCI6XCIxOVwiLFwieDJcIjpcIjE2XCIsXCJ5MlwiOlwiMjFcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIxNlwiLFwieTFcIjpcIjEzXCIsXCJ4MlwiOlwiMTZcIixcInkyXCI6XCIxNVwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjEyXCIsXCJ5MVwiOlwiMjFcIixcIngyXCI6XCIxMlwiLFwieTJcIjpcIjIzXCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMTJcIixcInkxXCI6XCIxNVwiLFwieDJcIjpcIjEyXCIsXCJ5MlwiOlwiMTdcIn19LHtcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk0yMCAxNi41OEE1IDUgMCAwIDAgMTggN2gtMS4yNkE4IDggMCAxIDAgNCAxNS4yNVwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaUNsb3VkTGlnaHRuaW5nIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJwYXRoXCIsXCJhdHRyXCI6e1wiZFwiOlwiTTE5IDE2LjlBNSA1IDAgMCAwIDE4IDdoLTEuMjZhOCA4IDAgMSAwLTExLjYyIDlcIn19LHtcInRhZ1wiOlwicG9seWxpbmVcIixcImF0dHJcIjp7XCJwb2ludHNcIjpcIjEzIDExIDkgMTcgMTUgMTcgMTEgMjNcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlDbG91ZE9mZiAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk0yMi42MSAxNi45NUE1IDUgMCAwIDAgMTggMTBoLTEuMjZhOCA4IDAgMCAwLTcuMDUtNk01IDVhOCA4IDAgMCAwIDQgMTVoOWE1IDUgMCAwIDAgMS43LS4zXCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMVwiLFwieTFcIjpcIjFcIixcIngyXCI6XCIyM1wiLFwieTJcIjpcIjIzXCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpQ2xvdWRSYWluIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjE2XCIsXCJ5MVwiOlwiMTNcIixcIngyXCI6XCIxNlwiLFwieTJcIjpcIjIxXCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiOFwiLFwieTFcIjpcIjEzXCIsXCJ4MlwiOlwiOFwiLFwieTJcIjpcIjIxXCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMTJcIixcInkxXCI6XCIxNVwiLFwieDJcIjpcIjEyXCIsXCJ5MlwiOlwiMjNcIn19LHtcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk0yMCAxNi41OEE1IDUgMCAwIDAgMTggN2gtMS4yNkE4IDggMCAxIDAgNCAxNS4yNVwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaUNsb3VkU25vdyAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk0yMCAxNy41OEE1IDUgMCAwIDAgMTggOGgtMS4yNkE4IDggMCAxIDAgNCAxNi4yNVwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjhcIixcInkxXCI6XCIxNlwiLFwieDJcIjpcIjguMDFcIixcInkyXCI6XCIxNlwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjhcIixcInkxXCI6XCIyMFwiLFwieDJcIjpcIjguMDFcIixcInkyXCI6XCIyMFwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjEyXCIsXCJ5MVwiOlwiMThcIixcIngyXCI6XCIxMi4wMVwiLFwieTJcIjpcIjE4XCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMTJcIixcInkxXCI6XCIyMlwiLFwieDJcIjpcIjEyLjAxXCIsXCJ5MlwiOlwiMjJcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIxNlwiLFwieTFcIjpcIjE2XCIsXCJ4MlwiOlwiMTYuMDFcIixcInkyXCI6XCIxNlwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjE2XCIsXCJ5MVwiOlwiMjBcIixcIngyXCI6XCIxNi4wMVwiLFwieTJcIjpcIjIwXCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpQ2xvdWQgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcInBhdGhcIixcImF0dHJcIjp7XCJkXCI6XCJNMTggMTBoLTEuMjZBOCA4IDAgMSAwIDkgMjBoOWE1IDUgMCAwIDAgMC0xMHpcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlDb2RlIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJwb2x5bGluZVwiLFwiYXR0clwiOntcInBvaW50c1wiOlwiMTYgMTggMjIgMTIgMTYgNlwifX0se1widGFnXCI6XCJwb2x5bGluZVwiLFwiYXR0clwiOntcInBvaW50c1wiOlwiOCA2IDIgMTIgOCAxOFwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaUNvZGVwZW4gKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcInBvbHlnb25cIixcImF0dHJcIjp7XCJwb2ludHNcIjpcIjEyIDIgMjIgOC41IDIyIDE1LjUgMTIgMjIgMiAxNS41IDIgOC41IDEyIDJcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIxMlwiLFwieTFcIjpcIjIyXCIsXCJ4MlwiOlwiMTJcIixcInkyXCI6XCIxNS41XCJ9fSx7XCJ0YWdcIjpcInBvbHlsaW5lXCIsXCJhdHRyXCI6e1wicG9pbnRzXCI6XCIyMiA4LjUgMTIgMTUuNSAyIDguNVwifX0se1widGFnXCI6XCJwb2x5bGluZVwiLFwiYXR0clwiOntcInBvaW50c1wiOlwiMiAxNS41IDEyIDguNSAyMiAxNS41XCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMTJcIixcInkxXCI6XCIyXCIsXCJ4MlwiOlwiMTJcIixcInkyXCI6XCI4LjVcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlDb2Rlc2FuZGJveCAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk0yMSAxNlY4YTIgMiAwIDAgMC0xLTEuNzNsLTctNGEyIDIgMCAwIDAtMiAwbC03IDRBMiAyIDAgMCAwIDMgOHY4YTIgMiAwIDAgMCAxIDEuNzNsNyA0YTIgMiAwIDAgMCAyIDBsNy00QTIgMiAwIDAgMCAyMSAxNnpcIn19LHtcInRhZ1wiOlwicG9seWxpbmVcIixcImF0dHJcIjp7XCJwb2ludHNcIjpcIjcuNSA0LjIxIDEyIDYuODEgMTYuNSA0LjIxXCJ9fSx7XCJ0YWdcIjpcInBvbHlsaW5lXCIsXCJhdHRyXCI6e1wicG9pbnRzXCI6XCI3LjUgMTkuNzkgNy41IDE0LjYgMyAxMlwifX0se1widGFnXCI6XCJwb2x5bGluZVwiLFwiYXR0clwiOntcInBvaW50c1wiOlwiMjEgMTIgMTYuNSAxNC42IDE2LjUgMTkuNzlcIn19LHtcInRhZ1wiOlwicG9seWxpbmVcIixcImF0dHJcIjp7XCJwb2ludHNcIjpcIjMuMjcgNi45NiAxMiAxMi4wMSAyMC43MyA2Ljk2XCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMTJcIixcInkxXCI6XCIyMi4wOFwiLFwieDJcIjpcIjEyXCIsXCJ5MlwiOlwiMTJcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlDb2ZmZWUgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcInBhdGhcIixcImF0dHJcIjp7XCJkXCI6XCJNMTggOGgxYTQgNCAwIDAgMSAwIDhoLTFcIn19LHtcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk0yIDhoMTZ2OWE0IDQgMCAwIDEtNCA0SDZhNCA0IDAgMCAxLTQtNFY4elwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjZcIixcInkxXCI6XCIxXCIsXCJ4MlwiOlwiNlwiLFwieTJcIjpcIjRcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIxMFwiLFwieTFcIjpcIjFcIixcIngyXCI6XCIxMFwiLFwieTJcIjpcIjRcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIxNFwiLFwieTFcIjpcIjFcIixcIngyXCI6XCIxNFwiLFwieTJcIjpcIjRcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlDb2x1bW5zIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJwYXRoXCIsXCJhdHRyXCI6e1wiZFwiOlwiTTEyIDNoN2EyIDIgMCAwIDEgMiAydjE0YTIgMiAwIDAgMS0yIDJoLTdtMC0xOEg1YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmg3bTAtMTh2MThcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlDb21tYW5kIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJwYXRoXCIsXCJhdHRyXCI6e1wiZFwiOlwiTTE4IDNhMyAzIDAgMCAwLTMgM3YxMmEzIDMgMCAwIDAgMyAzIDMgMyAwIDAgMCAzLTMgMyAzIDAgMCAwLTMtM0g2YTMgMyAwIDAgMC0zIDMgMyAzIDAgMCAwIDMgMyAzIDMgMCAwIDAgMy0zVjZhMyAzIDAgMCAwLTMtMyAzIDMgMCAwIDAtMyAzIDMgMyAwIDAgMCAzIDNoMTJhMyAzIDAgMCAwIDMtMyAzIDMgMCAwIDAtMy0zelwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaUNvbXBhc3MgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcImNpcmNsZVwiLFwiYXR0clwiOntcImN4XCI6XCIxMlwiLFwiY3lcIjpcIjEyXCIsXCJyXCI6XCIxMFwifX0se1widGFnXCI6XCJwb2x5Z29uXCIsXCJhdHRyXCI6e1wicG9pbnRzXCI6XCIxNi4yNCA3Ljc2IDE0LjEyIDE0LjEyIDcuNzYgMTYuMjQgOS44OCA5Ljg4IDE2LjI0IDcuNzZcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlDb3B5IChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJyZWN0XCIsXCJhdHRyXCI6e1wieFwiOlwiOVwiLFwieVwiOlwiOVwiLFwid2lkdGhcIjpcIjEzXCIsXCJoZWlnaHRcIjpcIjEzXCIsXCJyeFwiOlwiMlwiLFwicnlcIjpcIjJcIn19LHtcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk01IDE1SDRhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoOWEyIDIgMCAwIDEgMiAydjFcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlDb3JuZXJEb3duTGVmdCAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicG9seWxpbmVcIixcImF0dHJcIjp7XCJwb2ludHNcIjpcIjkgMTAgNCAxNSA5IDIwXCJ9fSx7XCJ0YWdcIjpcInBhdGhcIixcImF0dHJcIjp7XCJkXCI6XCJNMjAgNHY3YTQgNCAwIDAgMS00IDRINFwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaUNvcm5lckRvd25SaWdodCAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicG9seWxpbmVcIixcImF0dHJcIjp7XCJwb2ludHNcIjpcIjE1IDEwIDIwIDE1IDE1IDIwXCJ9fSx7XCJ0YWdcIjpcInBhdGhcIixcImF0dHJcIjp7XCJkXCI6XCJNNCA0djdhNCA0IDAgMCAwIDQgNGgxMlwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaUNvcm5lckxlZnREb3duIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJwb2x5bGluZVwiLFwiYXR0clwiOntcInBvaW50c1wiOlwiMTQgMTUgOSAyMCA0IDE1XCJ9fSx7XCJ0YWdcIjpcInBhdGhcIixcImF0dHJcIjp7XCJkXCI6XCJNMjAgNGgtN2E0IDQgMCAwIDAtNCA0djEyXCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpQ29ybmVyTGVmdFVwIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJwb2x5bGluZVwiLFwiYXR0clwiOntcInBvaW50c1wiOlwiMTQgOSA5IDQgNCA5XCJ9fSx7XCJ0YWdcIjpcInBhdGhcIixcImF0dHJcIjp7XCJkXCI6XCJNMjAgMjBoLTdhNCA0IDAgMCAxLTQtNFY0XCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpQ29ybmVyUmlnaHREb3duIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJwb2x5bGluZVwiLFwiYXR0clwiOntcInBvaW50c1wiOlwiMTAgMTUgMTUgMjAgMjAgMTVcIn19LHtcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk00IDRoN2E0IDQgMCAwIDEgNCA0djEyXCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpQ29ybmVyUmlnaHRVcCAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicG9seWxpbmVcIixcImF0dHJcIjp7XCJwb2ludHNcIjpcIjEwIDkgMTUgNCAyMCA5XCJ9fSx7XCJ0YWdcIjpcInBhdGhcIixcImF0dHJcIjp7XCJkXCI6XCJNNCAyMGg3YTQgNCAwIDAgMCA0LTRWNFwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaUNvcm5lclVwTGVmdCAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicG9seWxpbmVcIixcImF0dHJcIjp7XCJwb2ludHNcIjpcIjkgMTQgNCA5IDkgNFwifX0se1widGFnXCI6XCJwYXRoXCIsXCJhdHRyXCI6e1wiZFwiOlwiTTIwIDIwdi03YTQgNCAwIDAgMC00LTRINFwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaUNvcm5lclVwUmlnaHQgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcInBvbHlsaW5lXCIsXCJhdHRyXCI6e1wicG9pbnRzXCI6XCIxNSAxNCAyMCA5IDE1IDRcIn19LHtcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk00IDIwdi03YTQgNCAwIDAgMSA0LTRoMTJcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlDcHUgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcInJlY3RcIixcImF0dHJcIjp7XCJ4XCI6XCI0XCIsXCJ5XCI6XCI0XCIsXCJ3aWR0aFwiOlwiMTZcIixcImhlaWdodFwiOlwiMTZcIixcInJ4XCI6XCIyXCIsXCJyeVwiOlwiMlwifX0se1widGFnXCI6XCJyZWN0XCIsXCJhdHRyXCI6e1wieFwiOlwiOVwiLFwieVwiOlwiOVwiLFwid2lkdGhcIjpcIjZcIixcImhlaWdodFwiOlwiNlwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjlcIixcInkxXCI6XCIxXCIsXCJ4MlwiOlwiOVwiLFwieTJcIjpcIjRcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIxNVwiLFwieTFcIjpcIjFcIixcIngyXCI6XCIxNVwiLFwieTJcIjpcIjRcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCI5XCIsXCJ5MVwiOlwiMjBcIixcIngyXCI6XCI5XCIsXCJ5MlwiOlwiMjNcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIxNVwiLFwieTFcIjpcIjIwXCIsXCJ4MlwiOlwiMTVcIixcInkyXCI6XCIyM1wifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjIwXCIsXCJ5MVwiOlwiOVwiLFwieDJcIjpcIjIzXCIsXCJ5MlwiOlwiOVwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjIwXCIsXCJ5MVwiOlwiMTRcIixcIngyXCI6XCIyM1wiLFwieTJcIjpcIjE0XCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMVwiLFwieTFcIjpcIjlcIixcIngyXCI6XCI0XCIsXCJ5MlwiOlwiOVwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjFcIixcInkxXCI6XCIxNFwiLFwieDJcIjpcIjRcIixcInkyXCI6XCIxNFwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaUNyZWRpdENhcmQgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcInJlY3RcIixcImF0dHJcIjp7XCJ4XCI6XCIxXCIsXCJ5XCI6XCI0XCIsXCJ3aWR0aFwiOlwiMjJcIixcImhlaWdodFwiOlwiMTZcIixcInJ4XCI6XCIyXCIsXCJyeVwiOlwiMlwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjFcIixcInkxXCI6XCIxMFwiLFwieDJcIjpcIjIzXCIsXCJ5MlwiOlwiMTBcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlDcm9wIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJwYXRoXCIsXCJhdHRyXCI6e1wiZFwiOlwiTTYuMTMgMUw2IDE2YTIgMiAwIDAgMCAyIDJoMTVcIn19LHtcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk0xIDYuMTNMMTYgNmEyIDIgMCAwIDEgMiAydjE1XCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpQ3Jvc3NoYWlyIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJjaXJjbGVcIixcImF0dHJcIjp7XCJjeFwiOlwiMTJcIixcImN5XCI6XCIxMlwiLFwiclwiOlwiMTBcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIyMlwiLFwieTFcIjpcIjEyXCIsXCJ4MlwiOlwiMThcIixcInkyXCI6XCIxMlwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjZcIixcInkxXCI6XCIxMlwiLFwieDJcIjpcIjJcIixcInkyXCI6XCIxMlwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjEyXCIsXCJ5MVwiOlwiNlwiLFwieDJcIjpcIjEyXCIsXCJ5MlwiOlwiMlwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjEyXCIsXCJ5MVwiOlwiMjJcIixcIngyXCI6XCIxMlwiLFwieTJcIjpcIjE4XCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpRGF0YWJhc2UgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcImVsbGlwc2VcIixcImF0dHJcIjp7XCJjeFwiOlwiMTJcIixcImN5XCI6XCI1XCIsXCJyeFwiOlwiOVwiLFwicnlcIjpcIjNcIn19LHtcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk0yMSAxMmMwIDEuNjYtNCAzLTkgM3MtOS0xLjM0LTktM1wifX0se1widGFnXCI6XCJwYXRoXCIsXCJhdHRyXCI6e1wiZFwiOlwiTTMgNXYxNGMwIDEuNjYgNCAzIDkgM3M5LTEuMzQgOS0zVjVcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlEZWxldGUgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcInBhdGhcIixcImF0dHJcIjp7XCJkXCI6XCJNMjEgNEg4bC03IDggNyA4aDEzYTIgMiAwIDAgMCAyLTJWNmEyIDIgMCAwIDAtMi0yelwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjE4XCIsXCJ5MVwiOlwiOVwiLFwieDJcIjpcIjEyXCIsXCJ5MlwiOlwiMTVcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIxMlwiLFwieTFcIjpcIjlcIixcIngyXCI6XCIxOFwiLFwieTJcIjpcIjE1XCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpRGlzYyAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwiY2lyY2xlXCIsXCJhdHRyXCI6e1wiY3hcIjpcIjEyXCIsXCJjeVwiOlwiMTJcIixcInJcIjpcIjEwXCJ9fSx7XCJ0YWdcIjpcImNpcmNsZVwiLFwiYXR0clwiOntcImN4XCI6XCIxMlwiLFwiY3lcIjpcIjEyXCIsXCJyXCI6XCIzXCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpRGl2aWRlQ2lyY2xlIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjhcIixcInkxXCI6XCIxMlwiLFwieDJcIjpcIjE2XCIsXCJ5MlwiOlwiMTJcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIxMlwiLFwieTFcIjpcIjE2XCIsXCJ4MlwiOlwiMTJcIixcInkyXCI6XCIxNlwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjEyXCIsXCJ5MVwiOlwiOFwiLFwieDJcIjpcIjEyXCIsXCJ5MlwiOlwiOFwifX0se1widGFnXCI6XCJjaXJjbGVcIixcImF0dHJcIjp7XCJjeFwiOlwiMTJcIixcImN5XCI6XCIxMlwiLFwiclwiOlwiMTBcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlEaXZpZGVTcXVhcmUgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcInJlY3RcIixcImF0dHJcIjp7XCJ4XCI6XCIzXCIsXCJ5XCI6XCIzXCIsXCJ3aWR0aFwiOlwiMThcIixcImhlaWdodFwiOlwiMThcIixcInJ4XCI6XCIyXCIsXCJyeVwiOlwiMlwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjhcIixcInkxXCI6XCIxMlwiLFwieDJcIjpcIjE2XCIsXCJ5MlwiOlwiMTJcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIxMlwiLFwieTFcIjpcIjE2XCIsXCJ4MlwiOlwiMTJcIixcInkyXCI6XCIxNlwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjEyXCIsXCJ5MVwiOlwiOFwiLFwieDJcIjpcIjEyXCIsXCJ5MlwiOlwiOFwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaURpdmlkZSAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwiY2lyY2xlXCIsXCJhdHRyXCI6e1wiY3hcIjpcIjEyXCIsXCJjeVwiOlwiNlwiLFwiclwiOlwiMlwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjVcIixcInkxXCI6XCIxMlwiLFwieDJcIjpcIjE5XCIsXCJ5MlwiOlwiMTJcIn19LHtcInRhZ1wiOlwiY2lyY2xlXCIsXCJhdHRyXCI6e1wiY3hcIjpcIjEyXCIsXCJjeVwiOlwiMThcIixcInJcIjpcIjJcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlEb2xsYXJTaWduIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjEyXCIsXCJ5MVwiOlwiMVwiLFwieDJcIjpcIjEyXCIsXCJ5MlwiOlwiMjNcIn19LHtcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk0xNyA1SDkuNWEzLjUgMy41IDAgMCAwIDAgN2g1YTMuNSAzLjUgMCAwIDEgMCA3SDZcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlEb3dubG9hZENsb3VkIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJwb2x5bGluZVwiLFwiYXR0clwiOntcInBvaW50c1wiOlwiOCAxNyAxMiAyMSAxNiAxN1wifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjEyXCIsXCJ5MVwiOlwiMTJcIixcIngyXCI6XCIxMlwiLFwieTJcIjpcIjIxXCJ9fSx7XCJ0YWdcIjpcInBhdGhcIixcImF0dHJcIjp7XCJkXCI6XCJNMjAuODggMTguMDlBNSA1IDAgMCAwIDE4IDloLTEuMjZBOCA4IDAgMSAwIDMgMTYuMjlcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlEb3dubG9hZCAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk0yMSAxNXY0YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0ydi00XCJ9fSx7XCJ0YWdcIjpcInBvbHlsaW5lXCIsXCJhdHRyXCI6e1wicG9pbnRzXCI6XCI3IDEwIDEyIDE1IDE3IDEwXCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMTJcIixcInkxXCI6XCIxNVwiLFwieDJcIjpcIjEyXCIsXCJ5MlwiOlwiM1wifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaURyaWJiYmxlIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJjaXJjbGVcIixcImF0dHJcIjp7XCJjeFwiOlwiMTJcIixcImN5XCI6XCIxMlwiLFwiclwiOlwiMTBcIn19LHtcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk04LjU2IDIuNzVjNC4zNyA2LjAzIDYuMDIgOS40MiA4LjAzIDE3LjcybTIuNTQtMTUuMzhjLTMuNzIgNC4zNS04Ljk0IDUuNjYtMTYuODggNS44NW0xOS41IDEuOWMtMy41LS45My02LjYzLS44Mi04Ljk0IDAtMi41OC45Mi01LjAxIDIuODYtNy40NCA2LjMyXCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpRHJvcGxldCAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk0xMiAyLjY5bDUuNjYgNS42NmE4IDggMCAxIDEtMTEuMzEgMHpcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlFZGl0MiAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk0xNyAzYTIuODI4IDIuODI4IDAgMSAxIDQgNEw3LjUgMjAuNSAyIDIybDEuNS01LjVMMTcgM3pcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlFZGl0MyAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk0xMiAyMGg5XCJ9fSx7XCJ0YWdcIjpcInBhdGhcIixcImF0dHJcIjp7XCJkXCI6XCJNMTYuNSAzLjVhMi4xMjEgMi4xMjEgMCAwIDEgMyAzTDcgMTlsLTQgMSAxLTRMMTYuNSAzLjV6XCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpRWRpdCAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk0xMSA0SDRhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDE0YTIgMiAwIDAgMCAyLTJ2LTdcIn19LHtcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk0xOC41IDIuNWEyLjEyMSAyLjEyMSAwIDAgMSAzIDNMMTIgMTVsLTQgMSAxLTQgOS41LTkuNXpcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlFeHRlcm5hbExpbmsgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcInBhdGhcIixcImF0dHJcIjp7XCJkXCI6XCJNMTggMTN2NmEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMlY4YTIgMiAwIDAgMSAyLTJoNlwifX0se1widGFnXCI6XCJwb2x5bGluZVwiLFwiYXR0clwiOntcInBvaW50c1wiOlwiMTUgMyAyMSAzIDIxIDlcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIxMFwiLFwieTFcIjpcIjE0XCIsXCJ4MlwiOlwiMjFcIixcInkyXCI6XCIzXCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpRXllT2ZmIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJwYXRoXCIsXCJhdHRyXCI6e1wiZFwiOlwiTTE3Ljk0IDE3Ljk0QTEwLjA3IDEwLjA3IDAgMCAxIDEyIDIwYy03IDAtMTEtOC0xMS04YTE4LjQ1IDE4LjQ1IDAgMCAxIDUuMDYtNS45NE05LjkgNC4yNEE5LjEyIDkuMTIgMCAwIDEgMTIgNGM3IDAgMTEgOCAxMSA4YTE4LjUgMTguNSAwIDAgMS0yLjE2IDMuMTltLTYuNzItMS4wN2EzIDMgMCAxIDEtNC4yNC00LjI0XCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMVwiLFwieTFcIjpcIjFcIixcIngyXCI6XCIyM1wiLFwieTJcIjpcIjIzXCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpRXllIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJwYXRoXCIsXCJhdHRyXCI6e1wiZFwiOlwiTTEgMTJzNC04IDExLTggMTEgOCAxMSA4LTQgOC0xMSA4LTExLTgtMTEtOHpcIn19LHtcInRhZ1wiOlwiY2lyY2xlXCIsXCJhdHRyXCI6e1wiY3hcIjpcIjEyXCIsXCJjeVwiOlwiMTJcIixcInJcIjpcIjNcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlGYWNlYm9vayAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk0xOCAyaC0zYTUgNSAwIDAgMC01IDV2M0g3djRoM3Y4aDR2LThoM2wxLTRoLTRWN2ExIDEgMCAwIDEgMS0xaDN6XCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpRmFzdEZvcndhcmQgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcInBvbHlnb25cIixcImF0dHJcIjp7XCJwb2ludHNcIjpcIjEzIDE5IDIyIDEyIDEzIDUgMTMgMTlcIn19LHtcInRhZ1wiOlwicG9seWdvblwiLFwiYXR0clwiOntcInBvaW50c1wiOlwiMiAxOSAxMSAxMiAyIDUgMiAxOVwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaUZlYXRoZXIgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcInBhdGhcIixcImF0dHJcIjp7XCJkXCI6XCJNMjAuMjQgMTIuMjRhNiA2IDAgMCAwLTguNDktOC40OUw1IDEwLjVWMTloOC41elwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjE2XCIsXCJ5MVwiOlwiOFwiLFwieDJcIjpcIjJcIixcInkyXCI6XCIyMlwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjE3LjVcIixcInkxXCI6XCIxNVwiLFwieDJcIjpcIjlcIixcInkyXCI6XCIxNVwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaUZpZ21hIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJwYXRoXCIsXCJhdHRyXCI6e1wiZFwiOlwiTTUgNS41QTMuNSAzLjUgMCAwIDEgOC41IDJIMTJ2N0g4LjVBMy41IDMuNSAwIDAgMSA1IDUuNXpcIn19LHtcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk0xMiAyaDMuNWEzLjUgMy41IDAgMSAxIDAgN0gxMlYyelwifX0se1widGFnXCI6XCJwYXRoXCIsXCJhdHRyXCI6e1wiZFwiOlwiTTEyIDEyLjVhMy41IDMuNSAwIDEgMSA3IDAgMy41IDMuNSAwIDEgMS03IDB6XCJ9fSx7XCJ0YWdcIjpcInBhdGhcIixcImF0dHJcIjp7XCJkXCI6XCJNNSAxOS41QTMuNSAzLjUgMCAwIDEgOC41IDE2SDEydjMuNWEzLjUgMy41IDAgMSAxLTcgMHpcIn19LHtcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk01IDEyLjVBMy41IDMuNSAwIDAgMSA4LjUgOUgxMnY3SDguNUEzLjUgMy41IDAgMCAxIDUgMTIuNXpcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlGaWxlTWludXMgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcInBhdGhcIixcImF0dHJcIjp7XCJkXCI6XCJNMTQgMkg2YTIgMiAwIDAgMC0yIDJ2MTZhMiAyIDAgMCAwIDIgMmgxMmEyIDIgMCAwIDAgMi0yVjh6XCJ9fSx7XCJ0YWdcIjpcInBvbHlsaW5lXCIsXCJhdHRyXCI6e1wicG9pbnRzXCI6XCIxNCAyIDE0IDggMjAgOFwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjlcIixcInkxXCI6XCIxNVwiLFwieDJcIjpcIjE1XCIsXCJ5MlwiOlwiMTVcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlGaWxlUGx1cyAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk0xNCAySDZhMiAyIDAgMCAwLTIgMnYxNmEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJWOHpcIn19LHtcInRhZ1wiOlwicG9seWxpbmVcIixcImF0dHJcIjp7XCJwb2ludHNcIjpcIjE0IDIgMTQgOCAyMCA4XCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMTJcIixcInkxXCI6XCIxOFwiLFwieDJcIjpcIjEyXCIsXCJ5MlwiOlwiMTJcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCI5XCIsXCJ5MVwiOlwiMTVcIixcIngyXCI6XCIxNVwiLFwieTJcIjpcIjE1XCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpRmlsZVRleHQgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcInBhdGhcIixcImF0dHJcIjp7XCJkXCI6XCJNMTQgMkg2YTIgMiAwIDAgMC0yIDJ2MTZhMiAyIDAgMCAwIDIgMmgxMmEyIDIgMCAwIDAgMi0yVjh6XCJ9fSx7XCJ0YWdcIjpcInBvbHlsaW5lXCIsXCJhdHRyXCI6e1wicG9pbnRzXCI6XCIxNCAyIDE0IDggMjAgOFwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjE2XCIsXCJ5MVwiOlwiMTNcIixcIngyXCI6XCI4XCIsXCJ5MlwiOlwiMTNcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIxNlwiLFwieTFcIjpcIjE3XCIsXCJ4MlwiOlwiOFwiLFwieTJcIjpcIjE3XCJ9fSx7XCJ0YWdcIjpcInBvbHlsaW5lXCIsXCJhdHRyXCI6e1wicG9pbnRzXCI6XCIxMCA5IDkgOSA4IDlcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlGaWxlIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJwYXRoXCIsXCJhdHRyXCI6e1wiZFwiOlwiTTEzIDJINmEyIDIgMCAwIDAtMiAydjE2YTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDItMlY5elwifX0se1widGFnXCI6XCJwb2x5bGluZVwiLFwiYXR0clwiOntcInBvaW50c1wiOlwiMTMgMiAxMyA5IDIwIDlcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlGaWxtIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJyZWN0XCIsXCJhdHRyXCI6e1wieFwiOlwiMlwiLFwieVwiOlwiMlwiLFwid2lkdGhcIjpcIjIwXCIsXCJoZWlnaHRcIjpcIjIwXCIsXCJyeFwiOlwiMi4xOFwiLFwicnlcIjpcIjIuMThcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCI3XCIsXCJ5MVwiOlwiMlwiLFwieDJcIjpcIjdcIixcInkyXCI6XCIyMlwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjE3XCIsXCJ5MVwiOlwiMlwiLFwieDJcIjpcIjE3XCIsXCJ5MlwiOlwiMjJcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIyXCIsXCJ5MVwiOlwiMTJcIixcIngyXCI6XCIyMlwiLFwieTJcIjpcIjEyXCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMlwiLFwieTFcIjpcIjdcIixcIngyXCI6XCI3XCIsXCJ5MlwiOlwiN1wifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjJcIixcInkxXCI6XCIxN1wiLFwieDJcIjpcIjdcIixcInkyXCI6XCIxN1wifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjE3XCIsXCJ5MVwiOlwiMTdcIixcIngyXCI6XCIyMlwiLFwieTJcIjpcIjE3XCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMTdcIixcInkxXCI6XCI3XCIsXCJ4MlwiOlwiMjJcIixcInkyXCI6XCI3XCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpRmlsdGVyIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJwb2x5Z29uXCIsXCJhdHRyXCI6e1wicG9pbnRzXCI6XCIyMiAzIDIgMyAxMCAxMi40NiAxMCAxOSAxNCAyMSAxNCAxMi40NiAyMiAzXCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpRmxhZyAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk00IDE1czEtMSA0LTEgNSAyIDggMiA0LTEgNC0xVjNzLTEgMS00IDEtNS0yLTgtMi00IDEtNCAxelwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjRcIixcInkxXCI6XCIyMlwiLFwieDJcIjpcIjRcIixcInkyXCI6XCIxNVwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaUZvbGRlck1pbnVzIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJwYXRoXCIsXCJhdHRyXCI6e1wiZFwiOlwiTTIyIDE5YTIgMiAwIDAgMS0yIDJINGEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmg1bDIgM2g5YTIgMiAwIDAgMSAyIDJ6XCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiOVwiLFwieTFcIjpcIjE0XCIsXCJ4MlwiOlwiMTVcIixcInkyXCI6XCIxNFwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaUZvbGRlclBsdXMgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcInBhdGhcIixcImF0dHJcIjp7XCJkXCI6XCJNMjIgMTlhMiAyIDAgMCAxLTIgMkg0YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDVsMiAzaDlhMiAyIDAgMCAxIDIgMnpcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIxMlwiLFwieTFcIjpcIjExXCIsXCJ4MlwiOlwiMTJcIixcInkyXCI6XCIxN1wifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjlcIixcInkxXCI6XCIxNFwiLFwieDJcIjpcIjE1XCIsXCJ5MlwiOlwiMTRcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlGb2xkZXIgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcInBhdGhcIixcImF0dHJcIjp7XCJkXCI6XCJNMjIgMTlhMiAyIDAgMCAxLTIgMkg0YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDVsMiAzaDlhMiAyIDAgMCAxIDIgMnpcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlGcmFtZXIgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcInBhdGhcIixcImF0dHJcIjp7XCJkXCI6XCJNNSAxNlY5aDE0VjJINWwxNCAxNGgtN20tNyAwbDcgN3YtN20tNyAwaDdcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlGcm93biAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwiY2lyY2xlXCIsXCJhdHRyXCI6e1wiY3hcIjpcIjEyXCIsXCJjeVwiOlwiMTJcIixcInJcIjpcIjEwXCJ9fSx7XCJ0YWdcIjpcInBhdGhcIixcImF0dHJcIjp7XCJkXCI6XCJNMTYgMTZzLTEuNS0yLTQtMi00IDItNCAyXCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiOVwiLFwieTFcIjpcIjlcIixcIngyXCI6XCI5LjAxXCIsXCJ5MlwiOlwiOVwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjE1XCIsXCJ5MVwiOlwiOVwiLFwieDJcIjpcIjE1LjAxXCIsXCJ5MlwiOlwiOVwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaUdpZnQgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcInBvbHlsaW5lXCIsXCJhdHRyXCI6e1wicG9pbnRzXCI6XCIyMCAxMiAyMCAyMiA0IDIyIDQgMTJcIn19LHtcInRhZ1wiOlwicmVjdFwiLFwiYXR0clwiOntcInhcIjpcIjJcIixcInlcIjpcIjdcIixcIndpZHRoXCI6XCIyMFwiLFwiaGVpZ2h0XCI6XCI1XCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMTJcIixcInkxXCI6XCIyMlwiLFwieDJcIjpcIjEyXCIsXCJ5MlwiOlwiN1wifX0se1widGFnXCI6XCJwYXRoXCIsXCJhdHRyXCI6e1wiZFwiOlwiTTEyIDdINy41YTIuNSAyLjUgMCAwIDEgMC01QzExIDIgMTIgNyAxMiA3elwifX0se1widGFnXCI6XCJwYXRoXCIsXCJhdHRyXCI6e1wiZFwiOlwiTTEyIDdoNC41YTIuNSAyLjUgMCAwIDAgMC01QzEzIDIgMTIgNyAxMiA3elwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaUdpdEJyYW5jaCAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCI2XCIsXCJ5MVwiOlwiM1wiLFwieDJcIjpcIjZcIixcInkyXCI6XCIxNVwifX0se1widGFnXCI6XCJjaXJjbGVcIixcImF0dHJcIjp7XCJjeFwiOlwiMThcIixcImN5XCI6XCI2XCIsXCJyXCI6XCIzXCJ9fSx7XCJ0YWdcIjpcImNpcmNsZVwiLFwiYXR0clwiOntcImN4XCI6XCI2XCIsXCJjeVwiOlwiMThcIixcInJcIjpcIjNcIn19LHtcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk0xOCA5YTkgOSAwIDAgMS05IDlcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlHaXRDb21taXQgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcImNpcmNsZVwiLFwiYXR0clwiOntcImN4XCI6XCIxMlwiLFwiY3lcIjpcIjEyXCIsXCJyXCI6XCI0XCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMS4wNVwiLFwieTFcIjpcIjEyXCIsXCJ4MlwiOlwiN1wiLFwieTJcIjpcIjEyXCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMTcuMDFcIixcInkxXCI6XCIxMlwiLFwieDJcIjpcIjIyLjk2XCIsXCJ5MlwiOlwiMTJcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlHaXRNZXJnZSAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwiY2lyY2xlXCIsXCJhdHRyXCI6e1wiY3hcIjpcIjE4XCIsXCJjeVwiOlwiMThcIixcInJcIjpcIjNcIn19LHtcInRhZ1wiOlwiY2lyY2xlXCIsXCJhdHRyXCI6e1wiY3hcIjpcIjZcIixcImN5XCI6XCI2XCIsXCJyXCI6XCIzXCJ9fSx7XCJ0YWdcIjpcInBhdGhcIixcImF0dHJcIjp7XCJkXCI6XCJNNiAyMVY5YTkgOSAwIDAgMCA5IDlcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlHaXRQdWxsUmVxdWVzdCAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwiY2lyY2xlXCIsXCJhdHRyXCI6e1wiY3hcIjpcIjE4XCIsXCJjeVwiOlwiMThcIixcInJcIjpcIjNcIn19LHtcInRhZ1wiOlwiY2lyY2xlXCIsXCJhdHRyXCI6e1wiY3hcIjpcIjZcIixcImN5XCI6XCI2XCIsXCJyXCI6XCIzXCJ9fSx7XCJ0YWdcIjpcInBhdGhcIixcImF0dHJcIjp7XCJkXCI6XCJNMTMgNmgzYTIgMiAwIDAgMSAyIDJ2N1wifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjZcIixcInkxXCI6XCI5XCIsXCJ4MlwiOlwiNlwiLFwieTJcIjpcIjIxXCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpR2l0aHViIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJwYXRoXCIsXCJhdHRyXCI6e1wiZFwiOlwiTTkgMTljLTUgMS41LTUtMi41LTctM20xNCA2di0zLjg3YTMuMzcgMy4zNyAwIDAgMC0uOTQtMi42MWMzLjE0LS4zNSA2LjQ0LTEuNTQgNi40NC03QTUuNDQgNS40NCAwIDAgMCAyMCA0Ljc3IDUuMDcgNS4wNyAwIDAgMCAxOS45MSAxUzE4LjczLjY1IDE2IDIuNDhhMTMuMzggMTMuMzggMCAwIDAtNyAwQzYuMjcuNjUgNS4wOSAxIDUuMDkgMUE1LjA3IDUuMDcgMCAwIDAgNSA0Ljc3YTUuNDQgNS40NCAwIDAgMC0xLjUgMy43OGMwIDUuNDIgMy4zIDYuNjEgNi40NCA3QTMuMzcgMy4zNyAwIDAgMCA5IDE4LjEzVjIyXCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpR2l0bGFiIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJwYXRoXCIsXCJhdHRyXCI6e1wiZFwiOlwiTTIyLjY1IDE0LjM5TDEyIDIyLjEzIDEuMzUgMTQuMzlhLjg0Ljg0IDAgMCAxLS4zLS45NGwxLjIyLTMuNzggMi40NC03LjUxQS40Mi40MiAwIDAgMSA0LjgyIDJhLjQzLjQzIDAgMCAxIC41OCAwIC40Mi40MiAwIDAgMSAuMTEuMThsMi40NCA3LjQ5aDguMWwyLjQ0LTcuNTFBLjQyLjQyIDAgMCAxIDE4LjYgMmEuNDMuNDMgMCAwIDEgLjU4IDAgLjQyLjQyIDAgMCAxIC4xMS4xOGwyLjQ0IDcuNTFMMjMgMTMuNDVhLjg0Ljg0IDAgMCAxLS4zNS45NHpcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlHbG9iZSAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwiY2lyY2xlXCIsXCJhdHRyXCI6e1wiY3hcIjpcIjEyXCIsXCJjeVwiOlwiMTJcIixcInJcIjpcIjEwXCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMlwiLFwieTFcIjpcIjEyXCIsXCJ4MlwiOlwiMjJcIixcInkyXCI6XCIxMlwifX0se1widGFnXCI6XCJwYXRoXCIsXCJhdHRyXCI6e1wiZFwiOlwiTTEyIDJhMTUuMyAxNS4zIDAgMCAxIDQgMTAgMTUuMyAxNS4zIDAgMCAxLTQgMTAgMTUuMyAxNS4zIDAgMCAxLTQtMTAgMTUuMyAxNS4zIDAgMCAxIDQtMTB6XCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpR3JpZCAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicmVjdFwiLFwiYXR0clwiOntcInhcIjpcIjNcIixcInlcIjpcIjNcIixcIndpZHRoXCI6XCI3XCIsXCJoZWlnaHRcIjpcIjdcIn19LHtcInRhZ1wiOlwicmVjdFwiLFwiYXR0clwiOntcInhcIjpcIjE0XCIsXCJ5XCI6XCIzXCIsXCJ3aWR0aFwiOlwiN1wiLFwiaGVpZ2h0XCI6XCI3XCJ9fSx7XCJ0YWdcIjpcInJlY3RcIixcImF0dHJcIjp7XCJ4XCI6XCIxNFwiLFwieVwiOlwiMTRcIixcIndpZHRoXCI6XCI3XCIsXCJoZWlnaHRcIjpcIjdcIn19LHtcInRhZ1wiOlwicmVjdFwiLFwiYXR0clwiOntcInhcIjpcIjNcIixcInlcIjpcIjE0XCIsXCJ3aWR0aFwiOlwiN1wiLFwiaGVpZ2h0XCI6XCI3XCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpSGFyZERyaXZlIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjIyXCIsXCJ5MVwiOlwiMTJcIixcIngyXCI6XCIyXCIsXCJ5MlwiOlwiMTJcIn19LHtcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk01LjQ1IDUuMTFMMiAxMnY2YTIgMiAwIDAgMCAyIDJoMTZhMiAyIDAgMCAwIDItMnYtNmwtMy40NS02Ljg5QTIgMiAwIDAgMCAxNi43NiA0SDcuMjRhMiAyIDAgMCAwLTEuNzkgMS4xMXpcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCI2XCIsXCJ5MVwiOlwiMTZcIixcIngyXCI6XCI2LjAxXCIsXCJ5MlwiOlwiMTZcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIxMFwiLFwieTFcIjpcIjE2XCIsXCJ4MlwiOlwiMTAuMDFcIixcInkyXCI6XCIxNlwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaUhhc2ggKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiNFwiLFwieTFcIjpcIjlcIixcIngyXCI6XCIyMFwiLFwieTJcIjpcIjlcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCI0XCIsXCJ5MVwiOlwiMTVcIixcIngyXCI6XCIyMFwiLFwieTJcIjpcIjE1XCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMTBcIixcInkxXCI6XCIzXCIsXCJ4MlwiOlwiOFwiLFwieTJcIjpcIjIxXCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMTZcIixcInkxXCI6XCIzXCIsXCJ4MlwiOlwiMTRcIixcInkyXCI6XCIyMVwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaUhlYWRwaG9uZXMgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcInBhdGhcIixcImF0dHJcIjp7XCJkXCI6XCJNMyAxOHYtNmE5IDkgMCAwIDEgMTggMHY2XCJ9fSx7XCJ0YWdcIjpcInBhdGhcIixcImF0dHJcIjp7XCJkXCI6XCJNMjEgMTlhMiAyIDAgMCAxLTIgMmgtMWEyIDIgMCAwIDEtMi0ydi0zYTIgMiAwIDAgMSAyLTJoM3pNMyAxOWEyIDIgMCAwIDAgMiAyaDFhMiAyIDAgMCAwIDItMnYtM2EyIDIgMCAwIDAtMi0ySDN6XCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpSGVhcnQgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcInBhdGhcIixcImF0dHJcIjp7XCJkXCI6XCJNMjAuODQgNC42MWE1LjUgNS41IDAgMCAwLTcuNzggMEwxMiA1LjY3bC0xLjA2LTEuMDZhNS41IDUuNSAwIDAgMC03Ljc4IDcuNzhsMS4wNiAxLjA2TDEyIDIxLjIzbDcuNzgtNy43OCAxLjA2LTEuMDZhNS41IDUuNSAwIDAgMCAwLTcuNzh6XCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpSGVscENpcmNsZSAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwiY2lyY2xlXCIsXCJhdHRyXCI6e1wiY3hcIjpcIjEyXCIsXCJjeVwiOlwiMTJcIixcInJcIjpcIjEwXCJ9fSx7XCJ0YWdcIjpcInBhdGhcIixcImF0dHJcIjp7XCJkXCI6XCJNOS4wOSA5YTMgMyAwIDAgMSA1LjgzIDFjMCAyLTMgMy0zIDNcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIxMlwiLFwieTFcIjpcIjE3XCIsXCJ4MlwiOlwiMTIuMDFcIixcInkyXCI6XCIxN1wifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaUhleGFnb24gKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcInBhdGhcIixcImF0dHJcIjp7XCJkXCI6XCJNMjEgMTZWOGEyIDIgMCAwIDAtMS0xLjczbC03LTRhMiAyIDAgMCAwLTIgMGwtNyA0QTIgMiAwIDAgMCAzIDh2OGEyIDIgMCAwIDAgMSAxLjczbDcgNGEyIDIgMCAwIDAgMiAwbDctNEEyIDIgMCAwIDAgMjEgMTZ6XCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpSG9tZSAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk0zIDlsOS03IDkgN3YxMWEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnpcIn19LHtcInRhZ1wiOlwicG9seWxpbmVcIixcImF0dHJcIjp7XCJwb2ludHNcIjpcIjkgMjIgOSAxMiAxNSAxMiAxNSAyMlwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaUltYWdlIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJyZWN0XCIsXCJhdHRyXCI6e1wieFwiOlwiM1wiLFwieVwiOlwiM1wiLFwid2lkdGhcIjpcIjE4XCIsXCJoZWlnaHRcIjpcIjE4XCIsXCJyeFwiOlwiMlwiLFwicnlcIjpcIjJcIn19LHtcInRhZ1wiOlwiY2lyY2xlXCIsXCJhdHRyXCI6e1wiY3hcIjpcIjguNVwiLFwiY3lcIjpcIjguNVwiLFwiclwiOlwiMS41XCJ9fSx7XCJ0YWdcIjpcInBvbHlsaW5lXCIsXCJhdHRyXCI6e1wicG9pbnRzXCI6XCIyMSAxNSAxNiAxMCA1IDIxXCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpSW5ib3ggKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcInBvbHlsaW5lXCIsXCJhdHRyXCI6e1wicG9pbnRzXCI6XCIyMiAxMiAxNiAxMiAxNCAxNSAxMCAxNSA4IDEyIDIgMTJcIn19LHtcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk01LjQ1IDUuMTFMMiAxMnY2YTIgMiAwIDAgMCAyIDJoMTZhMiAyIDAgMCAwIDItMnYtNmwtMy40NS02Ljg5QTIgMiAwIDAgMCAxNi43NiA0SDcuMjRhMiAyIDAgMCAwLTEuNzkgMS4xMXpcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlJbmZvIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJjaXJjbGVcIixcImF0dHJcIjp7XCJjeFwiOlwiMTJcIixcImN5XCI6XCIxMlwiLFwiclwiOlwiMTBcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIxMlwiLFwieTFcIjpcIjE2XCIsXCJ4MlwiOlwiMTJcIixcInkyXCI6XCIxMlwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjEyXCIsXCJ5MVwiOlwiOFwiLFwieDJcIjpcIjEyLjAxXCIsXCJ5MlwiOlwiOFwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaUluc3RhZ3JhbSAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicmVjdFwiLFwiYXR0clwiOntcInhcIjpcIjJcIixcInlcIjpcIjJcIixcIndpZHRoXCI6XCIyMFwiLFwiaGVpZ2h0XCI6XCIyMFwiLFwicnhcIjpcIjVcIixcInJ5XCI6XCI1XCJ9fSx7XCJ0YWdcIjpcInBhdGhcIixcImF0dHJcIjp7XCJkXCI6XCJNMTYgMTEuMzdBNCA0IDAgMSAxIDEyLjYzIDggNCA0IDAgMCAxIDE2IDExLjM3elwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjE3LjVcIixcInkxXCI6XCI2LjVcIixcIngyXCI6XCIxNy41MVwiLFwieTJcIjpcIjYuNVwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaUl0YWxpYyAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIxOVwiLFwieTFcIjpcIjRcIixcIngyXCI6XCIxMFwiLFwieTJcIjpcIjRcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIxNFwiLFwieTFcIjpcIjIwXCIsXCJ4MlwiOlwiNVwiLFwieTJcIjpcIjIwXCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMTVcIixcInkxXCI6XCI0XCIsXCJ4MlwiOlwiOVwiLFwieTJcIjpcIjIwXCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpS2V5IChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJwYXRoXCIsXCJhdHRyXCI6e1wiZFwiOlwiTTIxIDJsLTIgMm0tNy42MSA3LjYxYTUuNSA1LjUgMCAxIDEtNy43NzggNy43NzggNS41IDUuNSAwIDAgMSA3Ljc3Ny03Ljc3N3ptMCAwTDE1LjUgNy41bTAgMGwzIDNMMjIgN2wtMy0zbS0zLjUgMy41TDE5IDRcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlMYXllcnMgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcInBvbHlnb25cIixcImF0dHJcIjp7XCJwb2ludHNcIjpcIjEyIDIgMiA3IDEyIDEyIDIyIDcgMTIgMlwifX0se1widGFnXCI6XCJwb2x5bGluZVwiLFwiYXR0clwiOntcInBvaW50c1wiOlwiMiAxNyAxMiAyMiAyMiAxN1wifX0se1widGFnXCI6XCJwb2x5bGluZVwiLFwiYXR0clwiOntcInBvaW50c1wiOlwiMiAxMiAxMiAxNyAyMiAxMlwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaUxheW91dCAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicmVjdFwiLFwiYXR0clwiOntcInhcIjpcIjNcIixcInlcIjpcIjNcIixcIndpZHRoXCI6XCIxOFwiLFwiaGVpZ2h0XCI6XCIxOFwiLFwicnhcIjpcIjJcIixcInJ5XCI6XCIyXCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiM1wiLFwieTFcIjpcIjlcIixcIngyXCI6XCIyMVwiLFwieTJcIjpcIjlcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCI5XCIsXCJ5MVwiOlwiMjFcIixcIngyXCI6XCI5XCIsXCJ5MlwiOlwiOVwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaUxpZmVCdW95IChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJjaXJjbGVcIixcImF0dHJcIjp7XCJjeFwiOlwiMTJcIixcImN5XCI6XCIxMlwiLFwiclwiOlwiMTBcIn19LHtcInRhZ1wiOlwiY2lyY2xlXCIsXCJhdHRyXCI6e1wiY3hcIjpcIjEyXCIsXCJjeVwiOlwiMTJcIixcInJcIjpcIjRcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCI0LjkzXCIsXCJ5MVwiOlwiNC45M1wiLFwieDJcIjpcIjkuMTdcIixcInkyXCI6XCI5LjE3XCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMTQuODNcIixcInkxXCI6XCIxNC44M1wiLFwieDJcIjpcIjE5LjA3XCIsXCJ5MlwiOlwiMTkuMDdcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIxNC44M1wiLFwieTFcIjpcIjkuMTdcIixcIngyXCI6XCIxOS4wN1wiLFwieTJcIjpcIjQuOTNcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIxNC44M1wiLFwieTFcIjpcIjkuMTdcIixcIngyXCI6XCIxOC4zNlwiLFwieTJcIjpcIjUuNjRcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCI0LjkzXCIsXCJ5MVwiOlwiMTkuMDdcIixcIngyXCI6XCI5LjE3XCIsXCJ5MlwiOlwiMTQuODNcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlMaW5rMiAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk0xNSA3aDNhNSA1IDAgMCAxIDUgNSA1IDUgMCAwIDEtNSA1aC0zbS02IDBINmE1IDUgMCAwIDEtNS01IDUgNSAwIDAgMSA1LTVoM1wifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjhcIixcInkxXCI6XCIxMlwiLFwieDJcIjpcIjE2XCIsXCJ5MlwiOlwiMTJcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlMaW5rIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJwYXRoXCIsXCJhdHRyXCI6e1wiZFwiOlwiTTEwIDEzYTUgNSAwIDAgMCA3LjU0LjU0bDMtM2E1IDUgMCAwIDAtNy4wNy03LjA3bC0xLjcyIDEuNzFcIn19LHtcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk0xNCAxMWE1IDUgMCAwIDAtNy41NC0uNTRsLTMgM2E1IDUgMCAwIDAgNy4wNyA3LjA3bDEuNzEtMS43MVwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaUxpbmtlZGluIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJwYXRoXCIsXCJhdHRyXCI6e1wiZFwiOlwiTTE2IDhhNiA2IDAgMCAxIDYgNnY3aC00di03YTIgMiAwIDAgMC0yLTIgMiAyIDAgMCAwLTIgMnY3aC00di03YTYgNiAwIDAgMSA2LTZ6XCJ9fSx7XCJ0YWdcIjpcInJlY3RcIixcImF0dHJcIjp7XCJ4XCI6XCIyXCIsXCJ5XCI6XCI5XCIsXCJ3aWR0aFwiOlwiNFwiLFwiaGVpZ2h0XCI6XCIxMlwifX0se1widGFnXCI6XCJjaXJjbGVcIixcImF0dHJcIjp7XCJjeFwiOlwiNFwiLFwiY3lcIjpcIjRcIixcInJcIjpcIjJcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlMaXN0IChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjhcIixcInkxXCI6XCI2XCIsXCJ4MlwiOlwiMjFcIixcInkyXCI6XCI2XCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiOFwiLFwieTFcIjpcIjEyXCIsXCJ4MlwiOlwiMjFcIixcInkyXCI6XCIxMlwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjhcIixcInkxXCI6XCIxOFwiLFwieDJcIjpcIjIxXCIsXCJ5MlwiOlwiMThcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIzXCIsXCJ5MVwiOlwiNlwiLFwieDJcIjpcIjMuMDFcIixcInkyXCI6XCI2XCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiM1wiLFwieTFcIjpcIjEyXCIsXCJ4MlwiOlwiMy4wMVwiLFwieTJcIjpcIjEyXCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiM1wiLFwieTFcIjpcIjE4XCIsXCJ4MlwiOlwiMy4wMVwiLFwieTJcIjpcIjE4XCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpTG9hZGVyIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjEyXCIsXCJ5MVwiOlwiMlwiLFwieDJcIjpcIjEyXCIsXCJ5MlwiOlwiNlwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjEyXCIsXCJ5MVwiOlwiMThcIixcIngyXCI6XCIxMlwiLFwieTJcIjpcIjIyXCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiNC45M1wiLFwieTFcIjpcIjQuOTNcIixcIngyXCI6XCI3Ljc2XCIsXCJ5MlwiOlwiNy43NlwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjE2LjI0XCIsXCJ5MVwiOlwiMTYuMjRcIixcIngyXCI6XCIxOS4wN1wiLFwieTJcIjpcIjE5LjA3XCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMlwiLFwieTFcIjpcIjEyXCIsXCJ4MlwiOlwiNlwiLFwieTJcIjpcIjEyXCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMThcIixcInkxXCI6XCIxMlwiLFwieDJcIjpcIjIyXCIsXCJ5MlwiOlwiMTJcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCI0LjkzXCIsXCJ5MVwiOlwiMTkuMDdcIixcIngyXCI6XCI3Ljc2XCIsXCJ5MlwiOlwiMTYuMjRcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIxNi4yNFwiLFwieTFcIjpcIjcuNzZcIixcIngyXCI6XCIxOS4wN1wiLFwieTJcIjpcIjQuOTNcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlMb2NrIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJyZWN0XCIsXCJhdHRyXCI6e1wieFwiOlwiM1wiLFwieVwiOlwiMTFcIixcIndpZHRoXCI6XCIxOFwiLFwiaGVpZ2h0XCI6XCIxMVwiLFwicnhcIjpcIjJcIixcInJ5XCI6XCIyXCJ9fSx7XCJ0YWdcIjpcInBhdGhcIixcImF0dHJcIjp7XCJkXCI6XCJNNyAxMVY3YTUgNSAwIDAgMSAxMCAwdjRcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlMb2dJbiAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk0xNSAzaDRhMiAyIDAgMCAxIDIgMnYxNGEyIDIgMCAwIDEtMiAyaC00XCJ9fSx7XCJ0YWdcIjpcInBvbHlsaW5lXCIsXCJhdHRyXCI6e1wicG9pbnRzXCI6XCIxMCAxNyAxNSAxMiAxMCA3XCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMTVcIixcInkxXCI6XCIxMlwiLFwieDJcIjpcIjNcIixcInkyXCI6XCIxMlwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaUxvZ091dCAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk05IDIxSDVhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoNFwifX0se1widGFnXCI6XCJwb2x5bGluZVwiLFwiYXR0clwiOntcInBvaW50c1wiOlwiMTYgMTcgMjEgMTIgMTYgN1wifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjIxXCIsXCJ5MVwiOlwiMTJcIixcIngyXCI6XCI5XCIsXCJ5MlwiOlwiMTJcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlNYWlsIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJwYXRoXCIsXCJhdHRyXCI6e1wiZFwiOlwiTTQgNGgxNmMxLjEgMCAyIC45IDIgMnYxMmMwIDEuMS0uOSAyLTIgMkg0Yy0xLjEgMC0yLS45LTItMlY2YzAtMS4xLjktMiAyLTJ6XCJ9fSx7XCJ0YWdcIjpcInBvbHlsaW5lXCIsXCJhdHRyXCI6e1wicG9pbnRzXCI6XCIyMiw2IDEyLDEzIDIsNlwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaU1hcFBpbiAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk0yMSAxMGMwIDctOSAxMy05IDEzcy05LTYtOS0xM2E5IDkgMCAwIDEgMTggMHpcIn19LHtcInRhZ1wiOlwiY2lyY2xlXCIsXCJhdHRyXCI6e1wiY3hcIjpcIjEyXCIsXCJjeVwiOlwiMTBcIixcInJcIjpcIjNcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlNYXAgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcInBvbHlnb25cIixcImF0dHJcIjp7XCJwb2ludHNcIjpcIjEgNiAxIDIyIDggMTggMTYgMjIgMjMgMTggMjMgMiAxNiA2IDggMiAxIDZcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCI4XCIsXCJ5MVwiOlwiMlwiLFwieDJcIjpcIjhcIixcInkyXCI6XCIxOFwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjE2XCIsXCJ5MVwiOlwiNlwiLFwieDJcIjpcIjE2XCIsXCJ5MlwiOlwiMjJcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlNYXhpbWl6ZTIgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcInBvbHlsaW5lXCIsXCJhdHRyXCI6e1wicG9pbnRzXCI6XCIxNSAzIDIxIDMgMjEgOVwifX0se1widGFnXCI6XCJwb2x5bGluZVwiLFwiYXR0clwiOntcInBvaW50c1wiOlwiOSAyMSAzIDIxIDMgMTVcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIyMVwiLFwieTFcIjpcIjNcIixcIngyXCI6XCIxNFwiLFwieTJcIjpcIjEwXCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiM1wiLFwieTFcIjpcIjIxXCIsXCJ4MlwiOlwiMTBcIixcInkyXCI6XCIxNFwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaU1heGltaXplIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJwYXRoXCIsXCJhdHRyXCI6e1wiZFwiOlwiTTggM0g1YTIgMiAwIDAgMC0yIDJ2M20xOCAwVjVhMiAyIDAgMCAwLTItMmgtM20wIDE4aDNhMiAyIDAgMCAwIDItMnYtM00zIDE2djNhMiAyIDAgMCAwIDIgMmgzXCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpTWVoIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJjaXJjbGVcIixcImF0dHJcIjp7XCJjeFwiOlwiMTJcIixcImN5XCI6XCIxMlwiLFwiclwiOlwiMTBcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCI4XCIsXCJ5MVwiOlwiMTVcIixcIngyXCI6XCIxNlwiLFwieTJcIjpcIjE1XCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiOVwiLFwieTFcIjpcIjlcIixcIngyXCI6XCI5LjAxXCIsXCJ5MlwiOlwiOVwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjE1XCIsXCJ5MVwiOlwiOVwiLFwieDJcIjpcIjE1LjAxXCIsXCJ5MlwiOlwiOVwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaU1lbnUgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiM1wiLFwieTFcIjpcIjEyXCIsXCJ4MlwiOlwiMjFcIixcInkyXCI6XCIxMlwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjNcIixcInkxXCI6XCI2XCIsXCJ4MlwiOlwiMjFcIixcInkyXCI6XCI2XCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiM1wiLFwieTFcIjpcIjE4XCIsXCJ4MlwiOlwiMjFcIixcInkyXCI6XCIxOFwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaU1lc3NhZ2VDaXJjbGUgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcInBhdGhcIixcImF0dHJcIjp7XCJkXCI6XCJNMjEgMTEuNWE4LjM4IDguMzggMCAwIDEtLjkgMy44IDguNSA4LjUgMCAwIDEtNy42IDQuNyA4LjM4IDguMzggMCAwIDEtMy44LS45TDMgMjFsMS45LTUuN2E4LjM4IDguMzggMCAwIDEtLjktMy44IDguNSA4LjUgMCAwIDEgNC43LTcuNiA4LjM4IDguMzggMCAwIDEgMy44LS45aC41YTguNDggOC40OCAwIDAgMSA4IDh2LjV6XCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpTWVzc2FnZVNxdWFyZSAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk0yMSAxNWEyIDIgMCAwIDEtMiAySDdsLTQgNFY1YTIgMiAwIDAgMSAyLTJoMTRhMiAyIDAgMCAxIDIgMnpcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlNaWNPZmYgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMVwiLFwieTFcIjpcIjFcIixcIngyXCI6XCIyM1wiLFwieTJcIjpcIjIzXCJ9fSx7XCJ0YWdcIjpcInBhdGhcIixcImF0dHJcIjp7XCJkXCI6XCJNOSA5djNhMyAzIDAgMCAwIDUuMTIgMi4xMk0xNSA5LjM0VjRhMyAzIDAgMCAwLTUuOTQtLjZcIn19LHtcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk0xNyAxNi45NUE3IDcgMCAwIDEgNSAxMnYtMm0xNCAwdjJhNyA3IDAgMCAxLS4xMSAxLjIzXCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMTJcIixcInkxXCI6XCIxOVwiLFwieDJcIjpcIjEyXCIsXCJ5MlwiOlwiMjNcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCI4XCIsXCJ5MVwiOlwiMjNcIixcIngyXCI6XCIxNlwiLFwieTJcIjpcIjIzXCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpTWljIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJwYXRoXCIsXCJhdHRyXCI6e1wiZFwiOlwiTTEyIDFhMyAzIDAgMCAwLTMgM3Y4YTMgMyAwIDAgMCA2IDBWNGEzIDMgMCAwIDAtMy0zelwifX0se1widGFnXCI6XCJwYXRoXCIsXCJhdHRyXCI6e1wiZFwiOlwiTTE5IDEwdjJhNyA3IDAgMCAxLTE0IDB2LTJcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIxMlwiLFwieTFcIjpcIjE5XCIsXCJ4MlwiOlwiMTJcIixcInkyXCI6XCIyM1wifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjhcIixcInkxXCI6XCIyM1wiLFwieDJcIjpcIjE2XCIsXCJ5MlwiOlwiMjNcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlNaW5pbWl6ZTIgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcInBvbHlsaW5lXCIsXCJhdHRyXCI6e1wicG9pbnRzXCI6XCI0IDE0IDEwIDE0IDEwIDIwXCJ9fSx7XCJ0YWdcIjpcInBvbHlsaW5lXCIsXCJhdHRyXCI6e1wicG9pbnRzXCI6XCIyMCAxMCAxNCAxMCAxNCA0XCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMTRcIixcInkxXCI6XCIxMFwiLFwieDJcIjpcIjIxXCIsXCJ5MlwiOlwiM1wifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjNcIixcInkxXCI6XCIyMVwiLFwieDJcIjpcIjEwXCIsXCJ5MlwiOlwiMTRcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlNaW5pbWl6ZSAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk04IDN2M2EyIDIgMCAwIDEtMiAySDNtMTggMGgtM2EyIDIgMCAwIDEtMi0yVjNtMCAxOHYtM2EyIDIgMCAwIDEgMi0yaDNNMyAxNmgzYTIgMiAwIDAgMSAyIDJ2M1wifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaU1pbnVzQ2lyY2xlIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJjaXJjbGVcIixcImF0dHJcIjp7XCJjeFwiOlwiMTJcIixcImN5XCI6XCIxMlwiLFwiclwiOlwiMTBcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCI4XCIsXCJ5MVwiOlwiMTJcIixcIngyXCI6XCIxNlwiLFwieTJcIjpcIjEyXCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpTWludXNTcXVhcmUgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcInJlY3RcIixcImF0dHJcIjp7XCJ4XCI6XCIzXCIsXCJ5XCI6XCIzXCIsXCJ3aWR0aFwiOlwiMThcIixcImhlaWdodFwiOlwiMThcIixcInJ4XCI6XCIyXCIsXCJyeVwiOlwiMlwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjhcIixcInkxXCI6XCIxMlwiLFwieDJcIjpcIjE2XCIsXCJ5MlwiOlwiMTJcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlNaW51cyAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCI1XCIsXCJ5MVwiOlwiMTJcIixcIngyXCI6XCIxOVwiLFwieTJcIjpcIjEyXCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpTW9uaXRvciAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicmVjdFwiLFwiYXR0clwiOntcInhcIjpcIjJcIixcInlcIjpcIjNcIixcIndpZHRoXCI6XCIyMFwiLFwiaGVpZ2h0XCI6XCIxNFwiLFwicnhcIjpcIjJcIixcInJ5XCI6XCIyXCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiOFwiLFwieTFcIjpcIjIxXCIsXCJ4MlwiOlwiMTZcIixcInkyXCI6XCIyMVwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjEyXCIsXCJ5MVwiOlwiMTdcIixcIngyXCI6XCIxMlwiLFwieTJcIjpcIjIxXCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpTW9vbiAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk0yMSAxMi43OUE5IDkgMCAxIDEgMTEuMjEgMyA3IDcgMCAwIDAgMjEgMTIuNzl6XCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpTW9yZUhvcml6b250YWwgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcImNpcmNsZVwiLFwiYXR0clwiOntcImN4XCI6XCIxMlwiLFwiY3lcIjpcIjEyXCIsXCJyXCI6XCIxXCJ9fSx7XCJ0YWdcIjpcImNpcmNsZVwiLFwiYXR0clwiOntcImN4XCI6XCIxOVwiLFwiY3lcIjpcIjEyXCIsXCJyXCI6XCIxXCJ9fSx7XCJ0YWdcIjpcImNpcmNsZVwiLFwiYXR0clwiOntcImN4XCI6XCI1XCIsXCJjeVwiOlwiMTJcIixcInJcIjpcIjFcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlNb3JlVmVydGljYWwgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcImNpcmNsZVwiLFwiYXR0clwiOntcImN4XCI6XCIxMlwiLFwiY3lcIjpcIjEyXCIsXCJyXCI6XCIxXCJ9fSx7XCJ0YWdcIjpcImNpcmNsZVwiLFwiYXR0clwiOntcImN4XCI6XCIxMlwiLFwiY3lcIjpcIjVcIixcInJcIjpcIjFcIn19LHtcInRhZ1wiOlwiY2lyY2xlXCIsXCJhdHRyXCI6e1wiY3hcIjpcIjEyXCIsXCJjeVwiOlwiMTlcIixcInJcIjpcIjFcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlNb3VzZVBvaW50ZXIgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcInBhdGhcIixcImF0dHJcIjp7XCJkXCI6XCJNMyAzbDcuMDcgMTYuOTcgMi41MS03LjM5IDcuMzktMi41MUwzIDN6XCJ9fSx7XCJ0YWdcIjpcInBhdGhcIixcImF0dHJcIjp7XCJkXCI6XCJNMTMgMTNsNiA2XCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpTW92ZSAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicG9seWxpbmVcIixcImF0dHJcIjp7XCJwb2ludHNcIjpcIjUgOSAyIDEyIDUgMTVcIn19LHtcInRhZ1wiOlwicG9seWxpbmVcIixcImF0dHJcIjp7XCJwb2ludHNcIjpcIjkgNSAxMiAyIDE1IDVcIn19LHtcInRhZ1wiOlwicG9seWxpbmVcIixcImF0dHJcIjp7XCJwb2ludHNcIjpcIjE1IDE5IDEyIDIyIDkgMTlcIn19LHtcInRhZ1wiOlwicG9seWxpbmVcIixcImF0dHJcIjp7XCJwb2ludHNcIjpcIjE5IDkgMjIgMTIgMTkgMTVcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIyXCIsXCJ5MVwiOlwiMTJcIixcIngyXCI6XCIyMlwiLFwieTJcIjpcIjEyXCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMTJcIixcInkxXCI6XCIyXCIsXCJ4MlwiOlwiMTJcIixcInkyXCI6XCIyMlwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaU11c2ljIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJwYXRoXCIsXCJhdHRyXCI6e1wiZFwiOlwiTTkgMThWNWwxMi0ydjEzXCJ9fSx7XCJ0YWdcIjpcImNpcmNsZVwiLFwiYXR0clwiOntcImN4XCI6XCI2XCIsXCJjeVwiOlwiMThcIixcInJcIjpcIjNcIn19LHtcInRhZ1wiOlwiY2lyY2xlXCIsXCJhdHRyXCI6e1wiY3hcIjpcIjE4XCIsXCJjeVwiOlwiMTZcIixcInJcIjpcIjNcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlOYXZpZ2F0aW9uMiAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicG9seWdvblwiLFwiYXR0clwiOntcInBvaW50c1wiOlwiMTIgMiAxOSAyMSAxMiAxNyA1IDIxIDEyIDJcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlOYXZpZ2F0aW9uIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJwb2x5Z29uXCIsXCJhdHRyXCI6e1wicG9pbnRzXCI6XCIzIDExIDIyIDIgMTMgMjEgMTEgMTMgMyAxMVwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaU9jdGFnb24gKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcInBvbHlnb25cIixcImF0dHJcIjp7XCJwb2ludHNcIjpcIjcuODYgMiAxNi4xNCAyIDIyIDcuODYgMjIgMTYuMTQgMTYuMTQgMjIgNy44NiAyMiAyIDE2LjE0IDIgNy44NiA3Ljg2IDJcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlQYWNrYWdlIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjE2LjVcIixcInkxXCI6XCI5LjRcIixcIngyXCI6XCI3LjVcIixcInkyXCI6XCI0LjIxXCJ9fSx7XCJ0YWdcIjpcInBhdGhcIixcImF0dHJcIjp7XCJkXCI6XCJNMjEgMTZWOGEyIDIgMCAwIDAtMS0xLjczbC03LTRhMiAyIDAgMCAwLTIgMGwtNyA0QTIgMiAwIDAgMCAzIDh2OGEyIDIgMCAwIDAgMSAxLjczbDcgNGEyIDIgMCAwIDAgMiAwbDctNEEyIDIgMCAwIDAgMjEgMTZ6XCJ9fSx7XCJ0YWdcIjpcInBvbHlsaW5lXCIsXCJhdHRyXCI6e1wicG9pbnRzXCI6XCIzLjI3IDYuOTYgMTIgMTIuMDEgMjAuNzMgNi45NlwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjEyXCIsXCJ5MVwiOlwiMjIuMDhcIixcIngyXCI6XCIxMlwiLFwieTJcIjpcIjEyXCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpUGFwZXJjbGlwIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJwYXRoXCIsXCJhdHRyXCI6e1wiZFwiOlwiTTIxLjQ0IDExLjA1bC05LjE5IDkuMTlhNiA2IDAgMCAxLTguNDktOC40OWw5LjE5LTkuMTlhNCA0IDAgMCAxIDUuNjYgNS42NmwtOS4yIDkuMTlhMiAyIDAgMCAxLTIuODMtMi44M2w4LjQ5LTguNDhcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlQYXVzZUNpcmNsZSAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwiY2lyY2xlXCIsXCJhdHRyXCI6e1wiY3hcIjpcIjEyXCIsXCJjeVwiOlwiMTJcIixcInJcIjpcIjEwXCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMTBcIixcInkxXCI6XCIxNVwiLFwieDJcIjpcIjEwXCIsXCJ5MlwiOlwiOVwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjE0XCIsXCJ5MVwiOlwiMTVcIixcIngyXCI6XCIxNFwiLFwieTJcIjpcIjlcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlQYXVzZSAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicmVjdFwiLFwiYXR0clwiOntcInhcIjpcIjZcIixcInlcIjpcIjRcIixcIndpZHRoXCI6XCI0XCIsXCJoZWlnaHRcIjpcIjE2XCJ9fSx7XCJ0YWdcIjpcInJlY3RcIixcImF0dHJcIjp7XCJ4XCI6XCIxNFwiLFwieVwiOlwiNFwiLFwid2lkdGhcIjpcIjRcIixcImhlaWdodFwiOlwiMTZcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlQZW5Ub29sIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJwYXRoXCIsXCJhdHRyXCI6e1wiZFwiOlwiTTEyIDE5bDctNyAzIDMtNyA3LTMtM3pcIn19LHtcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk0xOCAxM2wtMS41LTcuNUwyIDJsMy41IDE0LjVMMTMgMThsNS01elwifX0se1widGFnXCI6XCJwYXRoXCIsXCJhdHRyXCI6e1wiZFwiOlwiTTIgMmw3LjU4NiA3LjU4NlwifX0se1widGFnXCI6XCJjaXJjbGVcIixcImF0dHJcIjp7XCJjeFwiOlwiMTFcIixcImN5XCI6XCIxMVwiLFwiclwiOlwiMlwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaVBlcmNlbnQgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMTlcIixcInkxXCI6XCI1XCIsXCJ4MlwiOlwiNVwiLFwieTJcIjpcIjE5XCJ9fSx7XCJ0YWdcIjpcImNpcmNsZVwiLFwiYXR0clwiOntcImN4XCI6XCI2LjVcIixcImN5XCI6XCI2LjVcIixcInJcIjpcIjIuNVwifX0se1widGFnXCI6XCJjaXJjbGVcIixcImF0dHJcIjp7XCJjeFwiOlwiMTcuNVwiLFwiY3lcIjpcIjE3LjVcIixcInJcIjpcIjIuNVwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaVBob25lQ2FsbCAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk0xNS4wNSA1QTUgNSAwIDAgMSAxOSA4Ljk1TTE1LjA1IDFBOSA5IDAgMCAxIDIzIDguOTRtLTEgNy45OHYzYTIgMiAwIDAgMS0yLjE4IDIgMTkuNzkgMTkuNzkgMCAwIDEtOC42My0zLjA3IDE5LjUgMTkuNSAwIDAgMS02LTYgMTkuNzkgMTkuNzkgMCAwIDEtMy4wNy04LjY3QTIgMiAwIDAgMSA0LjExIDJoM2EyIDIgMCAwIDEgMiAxLjcyIDEyLjg0IDEyLjg0IDAgMCAwIC43IDIuODEgMiAyIDAgMCAxLS40NSAyLjExTDguMDkgOS45MWExNiAxNiAwIDAgMCA2IDZsMS4yNy0xLjI3YTIgMiAwIDAgMSAyLjExLS40NSAxMi44NCAxMi44NCAwIDAgMCAyLjgxLjdBMiAyIDAgMCAxIDIyIDE2LjkyelwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaVBob25lRm9yd2FyZGVkIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJwb2x5bGluZVwiLFwiYXR0clwiOntcInBvaW50c1wiOlwiMTkgMSAyMyA1IDE5IDlcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIxNVwiLFwieTFcIjpcIjVcIixcIngyXCI6XCIyM1wiLFwieTJcIjpcIjVcIn19LHtcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk0yMiAxNi45MnYzYTIgMiAwIDAgMS0yLjE4IDIgMTkuNzkgMTkuNzkgMCAwIDEtOC42My0zLjA3IDE5LjUgMTkuNSAwIDAgMS02LTYgMTkuNzkgMTkuNzkgMCAwIDEtMy4wNy04LjY3QTIgMiAwIDAgMSA0LjExIDJoM2EyIDIgMCAwIDEgMiAxLjcyIDEyLjg0IDEyLjg0IDAgMCAwIC43IDIuODEgMiAyIDAgMCAxLS40NSAyLjExTDguMDkgOS45MWExNiAxNiAwIDAgMCA2IDZsMS4yNy0xLjI3YTIgMiAwIDAgMSAyLjExLS40NSAxMi44NCAxMi44NCAwIDAgMCAyLjgxLjdBMiAyIDAgMCAxIDIyIDE2LjkyelwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaVBob25lSW5jb21pbmcgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcInBvbHlsaW5lXCIsXCJhdHRyXCI6e1wicG9pbnRzXCI6XCIxNiAyIDE2IDggMjIgOFwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjIzXCIsXCJ5MVwiOlwiMVwiLFwieDJcIjpcIjE2XCIsXCJ5MlwiOlwiOFwifX0se1widGFnXCI6XCJwYXRoXCIsXCJhdHRyXCI6e1wiZFwiOlwiTTIyIDE2LjkydjNhMiAyIDAgMCAxLTIuMTggMiAxOS43OSAxOS43OSAwIDAgMS04LjYzLTMuMDcgMTkuNSAxOS41IDAgMCAxLTYtNiAxOS43OSAxOS43OSAwIDAgMS0zLjA3LTguNjdBMiAyIDAgMCAxIDQuMTEgMmgzYTIgMiAwIDAgMSAyIDEuNzIgMTIuODQgMTIuODQgMCAwIDAgLjcgMi44MSAyIDIgMCAwIDEtLjQ1IDIuMTFMOC4wOSA5LjkxYTE2IDE2IDAgMCAwIDYgNmwxLjI3LTEuMjdhMiAyIDAgMCAxIDIuMTEtLjQ1IDEyLjg0IDEyLjg0IDAgMCAwIDIuODEuN0EyIDIgMCAwIDEgMjIgMTYuOTJ6XCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpUGhvbmVNaXNzZWQgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMjNcIixcInkxXCI6XCIxXCIsXCJ4MlwiOlwiMTdcIixcInkyXCI6XCI3XCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMTdcIixcInkxXCI6XCIxXCIsXCJ4MlwiOlwiMjNcIixcInkyXCI6XCI3XCJ9fSx7XCJ0YWdcIjpcInBhdGhcIixcImF0dHJcIjp7XCJkXCI6XCJNMjIgMTYuOTJ2M2EyIDIgMCAwIDEtMi4xOCAyIDE5Ljc5IDE5Ljc5IDAgMCAxLTguNjMtMy4wNyAxOS41IDE5LjUgMCAwIDEtNi02IDE5Ljc5IDE5Ljc5IDAgMCAxLTMuMDctOC42N0EyIDIgMCAwIDEgNC4xMSAyaDNhMiAyIDAgMCAxIDIgMS43MiAxMi44NCAxMi44NCAwIDAgMCAuNyAyLjgxIDIgMiAwIDAgMS0uNDUgMi4xMUw4LjA5IDkuOTFhMTYgMTYgMCAwIDAgNiA2bDEuMjctMS4yN2EyIDIgMCAwIDEgMi4xMS0uNDUgMTIuODQgMTIuODQgMCAwIDAgMi44MS43QTIgMiAwIDAgMSAyMiAxNi45MnpcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlQaG9uZU9mZiAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk0xMC42OCAxMy4zMWExNiAxNiAwIDAgMCAzLjQxIDIuNmwxLjI3LTEuMjdhMiAyIDAgMCAxIDIuMTEtLjQ1IDEyLjg0IDEyLjg0IDAgMCAwIDIuODEuNyAyIDIgMCAwIDEgMS43MiAydjNhMiAyIDAgMCAxLTIuMTggMiAxOS43OSAxOS43OSAwIDAgMS04LjYzLTMuMDcgMTkuNDIgMTkuNDIgMCAwIDEtMy4zMy0yLjY3bS0yLjY3LTMuMzRhMTkuNzkgMTkuNzkgMCAwIDEtMy4wNy04LjYzQTIgMiAwIDAgMSA0LjExIDJoM2EyIDIgMCAwIDEgMiAxLjcyIDEyLjg0IDEyLjg0IDAgMCAwIC43IDIuODEgMiAyIDAgMCAxLS40NSAyLjExTDguMDkgOS45MVwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjIzXCIsXCJ5MVwiOlwiMVwiLFwieDJcIjpcIjFcIixcInkyXCI6XCIyM1wifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaVBob25lT3V0Z29pbmcgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcInBvbHlsaW5lXCIsXCJhdHRyXCI6e1wicG9pbnRzXCI6XCIyMyA3IDIzIDEgMTcgMVwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjE2XCIsXCJ5MVwiOlwiOFwiLFwieDJcIjpcIjIzXCIsXCJ5MlwiOlwiMVwifX0se1widGFnXCI6XCJwYXRoXCIsXCJhdHRyXCI6e1wiZFwiOlwiTTIyIDE2LjkydjNhMiAyIDAgMCAxLTIuMTggMiAxOS43OSAxOS43OSAwIDAgMS04LjYzLTMuMDcgMTkuNSAxOS41IDAgMCAxLTYtNiAxOS43OSAxOS43OSAwIDAgMS0zLjA3LTguNjdBMiAyIDAgMCAxIDQuMTEgMmgzYTIgMiAwIDAgMSAyIDEuNzIgMTIuODQgMTIuODQgMCAwIDAgLjcgMi44MSAyIDIgMCAwIDEtLjQ1IDIuMTFMOC4wOSA5LjkxYTE2IDE2IDAgMCAwIDYgNmwxLjI3LTEuMjdhMiAyIDAgMCAxIDIuMTEtLjQ1IDEyLjg0IDEyLjg0IDAgMCAwIDIuODEuN0EyIDIgMCAwIDEgMjIgMTYuOTJ6XCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpUGhvbmUgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcInBhdGhcIixcImF0dHJcIjp7XCJkXCI6XCJNMjIgMTYuOTJ2M2EyIDIgMCAwIDEtMi4xOCAyIDE5Ljc5IDE5Ljc5IDAgMCAxLTguNjMtMy4wNyAxOS41IDE5LjUgMCAwIDEtNi02IDE5Ljc5IDE5Ljc5IDAgMCAxLTMuMDctOC42N0EyIDIgMCAwIDEgNC4xMSAyaDNhMiAyIDAgMCAxIDIgMS43MiAxMi44NCAxMi44NCAwIDAgMCAuNyAyLjgxIDIgMiAwIDAgMS0uNDUgMi4xMUw4LjA5IDkuOTFhMTYgMTYgMCAwIDAgNiA2bDEuMjctMS4yN2EyIDIgMCAwIDEgMi4xMS0uNDUgMTIuODQgMTIuODQgMCAwIDAgMi44MS43QTIgMiAwIDAgMSAyMiAxNi45MnpcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlQaWVDaGFydCAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk0yMS4yMSAxNS44OUExMCAxMCAwIDEgMSA4IDIuODNcIn19LHtcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk0yMiAxMkExMCAxMCAwIDAgMCAxMiAydjEwelwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaVBsYXlDaXJjbGUgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcImNpcmNsZVwiLFwiYXR0clwiOntcImN4XCI6XCIxMlwiLFwiY3lcIjpcIjEyXCIsXCJyXCI6XCIxMFwifX0se1widGFnXCI6XCJwb2x5Z29uXCIsXCJhdHRyXCI6e1wicG9pbnRzXCI6XCIxMCA4IDE2IDEyIDEwIDE2IDEwIDhcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlQbGF5IChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJwb2x5Z29uXCIsXCJhdHRyXCI6e1wicG9pbnRzXCI6XCI1IDMgMTkgMTIgNSAyMSA1IDNcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlQbHVzQ2lyY2xlIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJjaXJjbGVcIixcImF0dHJcIjp7XCJjeFwiOlwiMTJcIixcImN5XCI6XCIxMlwiLFwiclwiOlwiMTBcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIxMlwiLFwieTFcIjpcIjhcIixcIngyXCI6XCIxMlwiLFwieTJcIjpcIjE2XCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiOFwiLFwieTFcIjpcIjEyXCIsXCJ4MlwiOlwiMTZcIixcInkyXCI6XCIxMlwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaVBsdXNTcXVhcmUgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcInJlY3RcIixcImF0dHJcIjp7XCJ4XCI6XCIzXCIsXCJ5XCI6XCIzXCIsXCJ3aWR0aFwiOlwiMThcIixcImhlaWdodFwiOlwiMThcIixcInJ4XCI6XCIyXCIsXCJyeVwiOlwiMlwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjEyXCIsXCJ5MVwiOlwiOFwiLFwieDJcIjpcIjEyXCIsXCJ5MlwiOlwiMTZcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCI4XCIsXCJ5MVwiOlwiMTJcIixcIngyXCI6XCIxNlwiLFwieTJcIjpcIjEyXCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpUGx1cyAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIxMlwiLFwieTFcIjpcIjVcIixcIngyXCI6XCIxMlwiLFwieTJcIjpcIjE5XCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiNVwiLFwieTFcIjpcIjEyXCIsXCJ4MlwiOlwiMTlcIixcInkyXCI6XCIxMlwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaVBvY2tldCAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk00IDNoMTZhMiAyIDAgMCAxIDIgMnY2YTEwIDEwIDAgMCAxLTEwIDEwQTEwIDEwIDAgMCAxIDIgMTFWNWEyIDIgMCAwIDEgMi0yelwifX0se1widGFnXCI6XCJwb2x5bGluZVwiLFwiYXR0clwiOntcInBvaW50c1wiOlwiOCAxMCAxMiAxNCAxNiAxMFwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaVBvd2VyIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJwYXRoXCIsXCJhdHRyXCI6e1wiZFwiOlwiTTE4LjM2IDYuNjRhOSA5IDAgMSAxLTEyLjczIDBcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIxMlwiLFwieTFcIjpcIjJcIixcIngyXCI6XCIxMlwiLFwieTJcIjpcIjEyXCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpUHJpbnRlciAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicG9seWxpbmVcIixcImF0dHJcIjp7XCJwb2ludHNcIjpcIjYgOSA2IDIgMTggMiAxOCA5XCJ9fSx7XCJ0YWdcIjpcInBhdGhcIixcImF0dHJcIjp7XCJkXCI6XCJNNiAxOEg0YTIgMiAwIDAgMS0yLTJ2LTVhMiAyIDAgMCAxIDItMmgxNmEyIDIgMCAwIDEgMiAydjVhMiAyIDAgMCAxLTIgMmgtMlwifX0se1widGFnXCI6XCJyZWN0XCIsXCJhdHRyXCI6e1wieFwiOlwiNlwiLFwieVwiOlwiMTRcIixcIndpZHRoXCI6XCIxMlwiLFwiaGVpZ2h0XCI6XCI4XCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpUmFkaW8gKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcImNpcmNsZVwiLFwiYXR0clwiOntcImN4XCI6XCIxMlwiLFwiY3lcIjpcIjEyXCIsXCJyXCI6XCIyXCJ9fSx7XCJ0YWdcIjpcInBhdGhcIixcImF0dHJcIjp7XCJkXCI6XCJNMTYuMjQgNy43NmE2IDYgMCAwIDEgMCA4LjQ5bS04LjQ4LS4wMWE2IDYgMCAwIDEgMC04LjQ5bTExLjMxLTIuODJhMTAgMTAgMCAwIDEgMCAxNC4xNG0tMTQuMTQgMGExMCAxMCAwIDAgMSAwLTE0LjE0XCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpUmVmcmVzaENjdyAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicG9seWxpbmVcIixcImF0dHJcIjp7XCJwb2ludHNcIjpcIjEgNCAxIDEwIDcgMTBcIn19LHtcInRhZ1wiOlwicG9seWxpbmVcIixcImF0dHJcIjp7XCJwb2ludHNcIjpcIjIzIDIwIDIzIDE0IDE3IDE0XCJ9fSx7XCJ0YWdcIjpcInBhdGhcIixcImF0dHJcIjp7XCJkXCI6XCJNMjAuNDkgOUE5IDkgMCAwIDAgNS42NCA1LjY0TDEgMTBtMjIgNGwtNC42NCA0LjM2QTkgOSAwIDAgMSAzLjUxIDE1XCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpUmVmcmVzaEN3IChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJwb2x5bGluZVwiLFwiYXR0clwiOntcInBvaW50c1wiOlwiMjMgNCAyMyAxMCAxNyAxMFwifX0se1widGFnXCI6XCJwb2x5bGluZVwiLFwiYXR0clwiOntcInBvaW50c1wiOlwiMSAyMCAxIDE0IDcgMTRcIn19LHtcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk0zLjUxIDlhOSA5IDAgMCAxIDE0Ljg1LTMuMzZMMjMgMTBNMSAxNGw0LjY0IDQuMzZBOSA5IDAgMCAwIDIwLjQ5IDE1XCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpUmVwZWF0IChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJwb2x5bGluZVwiLFwiYXR0clwiOntcInBvaW50c1wiOlwiMTcgMSAyMSA1IDE3IDlcIn19LHtcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk0zIDExVjlhNCA0IDAgMCAxIDQtNGgxNFwifX0se1widGFnXCI6XCJwb2x5bGluZVwiLFwiYXR0clwiOntcInBvaW50c1wiOlwiNyAyMyAzIDE5IDcgMTVcIn19LHtcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk0yMSAxM3YyYTQgNCAwIDAgMS00IDRIM1wifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaVJld2luZCAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicG9seWdvblwiLFwiYXR0clwiOntcInBvaW50c1wiOlwiMTEgMTkgMiAxMiAxMSA1IDExIDE5XCJ9fSx7XCJ0YWdcIjpcInBvbHlnb25cIixcImF0dHJcIjp7XCJwb2ludHNcIjpcIjIyIDE5IDEzIDEyIDIyIDUgMjIgMTlcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlSb3RhdGVDY3cgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcInBvbHlsaW5lXCIsXCJhdHRyXCI6e1wicG9pbnRzXCI6XCIxIDQgMSAxMCA3IDEwXCJ9fSx7XCJ0YWdcIjpcInBhdGhcIixcImF0dHJcIjp7XCJkXCI6XCJNMy41MSAxNWE5IDkgMCAxIDAgMi4xMy05LjM2TDEgMTBcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlSb3RhdGVDdyAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicG9seWxpbmVcIixcImF0dHJcIjp7XCJwb2ludHNcIjpcIjIzIDQgMjMgMTAgMTcgMTBcIn19LHtcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk0yMC40OSAxNWE5IDkgMCAxIDEtMi4xMi05LjM2TDIzIDEwXCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpUnNzIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJwYXRoXCIsXCJhdHRyXCI6e1wiZFwiOlwiTTQgMTFhOSA5IDAgMCAxIDkgOVwifX0se1widGFnXCI6XCJwYXRoXCIsXCJhdHRyXCI6e1wiZFwiOlwiTTQgNGExNiAxNiAwIDAgMSAxNiAxNlwifX0se1widGFnXCI6XCJjaXJjbGVcIixcImF0dHJcIjp7XCJjeFwiOlwiNVwiLFwiY3lcIjpcIjE5XCIsXCJyXCI6XCIxXCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpU2F2ZSAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk0xOSAyMUg1YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDExbDUgNXYxMWEyIDIgMCAwIDEtMiAyelwifX0se1widGFnXCI6XCJwb2x5bGluZVwiLFwiYXR0clwiOntcInBvaW50c1wiOlwiMTcgMjEgMTcgMTMgNyAxMyA3IDIxXCJ9fSx7XCJ0YWdcIjpcInBvbHlsaW5lXCIsXCJhdHRyXCI6e1wicG9pbnRzXCI6XCI3IDMgNyA4IDE1IDhcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlTY2lzc29ycyAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwiY2lyY2xlXCIsXCJhdHRyXCI6e1wiY3hcIjpcIjZcIixcImN5XCI6XCI2XCIsXCJyXCI6XCIzXCJ9fSx7XCJ0YWdcIjpcImNpcmNsZVwiLFwiYXR0clwiOntcImN4XCI6XCI2XCIsXCJjeVwiOlwiMThcIixcInJcIjpcIjNcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIyMFwiLFwieTFcIjpcIjRcIixcIngyXCI6XCI4LjEyXCIsXCJ5MlwiOlwiMTUuODhcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIxNC40N1wiLFwieTFcIjpcIjE0LjQ4XCIsXCJ4MlwiOlwiMjBcIixcInkyXCI6XCIyMFwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjguMTJcIixcInkxXCI6XCI4LjEyXCIsXCJ4MlwiOlwiMTJcIixcInkyXCI6XCIxMlwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaVNlYXJjaCAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwiY2lyY2xlXCIsXCJhdHRyXCI6e1wiY3hcIjpcIjExXCIsXCJjeVwiOlwiMTFcIixcInJcIjpcIjhcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIyMVwiLFwieTFcIjpcIjIxXCIsXCJ4MlwiOlwiMTYuNjVcIixcInkyXCI6XCIxNi42NVwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaVNlbmQgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMjJcIixcInkxXCI6XCIyXCIsXCJ4MlwiOlwiMTFcIixcInkyXCI6XCIxM1wifX0se1widGFnXCI6XCJwb2x5Z29uXCIsXCJhdHRyXCI6e1wicG9pbnRzXCI6XCIyMiAyIDE1IDIyIDExIDEzIDIgOSAyMiAyXCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpU2VydmVyIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJyZWN0XCIsXCJhdHRyXCI6e1wieFwiOlwiMlwiLFwieVwiOlwiMlwiLFwid2lkdGhcIjpcIjIwXCIsXCJoZWlnaHRcIjpcIjhcIixcInJ4XCI6XCIyXCIsXCJyeVwiOlwiMlwifX0se1widGFnXCI6XCJyZWN0XCIsXCJhdHRyXCI6e1wieFwiOlwiMlwiLFwieVwiOlwiMTRcIixcIndpZHRoXCI6XCIyMFwiLFwiaGVpZ2h0XCI6XCI4XCIsXCJyeFwiOlwiMlwiLFwicnlcIjpcIjJcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCI2XCIsXCJ5MVwiOlwiNlwiLFwieDJcIjpcIjYuMDFcIixcInkyXCI6XCI2XCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiNlwiLFwieTFcIjpcIjE4XCIsXCJ4MlwiOlwiNi4wMVwiLFwieTJcIjpcIjE4XCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpU2V0dGluZ3MgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcImNpcmNsZVwiLFwiYXR0clwiOntcImN4XCI6XCIxMlwiLFwiY3lcIjpcIjEyXCIsXCJyXCI6XCIzXCJ9fSx7XCJ0YWdcIjpcInBhdGhcIixcImF0dHJcIjp7XCJkXCI6XCJNMTkuNCAxNWExLjY1IDEuNjUgMCAwIDAgLjMzIDEuODJsLjA2LjA2YTIgMiAwIDAgMSAwIDIuODMgMiAyIDAgMCAxLTIuODMgMGwtLjA2LS4wNmExLjY1IDEuNjUgMCAwIDAtMS44Mi0uMzMgMS42NSAxLjY1IDAgMCAwLTEgMS41MVYyMWEyIDIgMCAwIDEtMiAyIDIgMiAwIDAgMS0yLTJ2LS4wOUExLjY1IDEuNjUgMCAwIDAgOSAxOS40YTEuNjUgMS42NSAwIDAgMC0xLjgyLjMzbC0uMDYuMDZhMiAyIDAgMCAxLTIuODMgMCAyIDIgMCAwIDEgMC0yLjgzbC4wNi0uMDZhMS42NSAxLjY1IDAgMCAwIC4zMy0xLjgyIDEuNjUgMS42NSAwIDAgMC0xLjUxLTFIM2EyIDIgMCAwIDEtMi0yIDIgMiAwIDAgMSAyLTJoLjA5QTEuNjUgMS42NSAwIDAgMCA0LjYgOWExLjY1IDEuNjUgMCAwIDAtLjMzLTEuODJsLS4wNi0uMDZhMiAyIDAgMCAxIDAtMi44MyAyIDIgMCAwIDEgMi44MyAwbC4wNi4wNmExLjY1IDEuNjUgMCAwIDAgMS44Mi4zM0g5YTEuNjUgMS42NSAwIDAgMCAxLTEuNTFWM2EyIDIgMCAwIDEgMi0yIDIgMiAwIDAgMSAyIDJ2LjA5YTEuNjUgMS42NSAwIDAgMCAxIDEuNTEgMS42NSAxLjY1IDAgMCAwIDEuODItLjMzbC4wNi0uMDZhMiAyIDAgMCAxIDIuODMgMCAyIDIgMCAwIDEgMCAyLjgzbC0uMDYuMDZhMS42NSAxLjY1IDAgMCAwLS4zMyAxLjgyVjlhMS42NSAxLjY1IDAgMCAwIDEuNTEgMUgyMWEyIDIgMCAwIDEgMiAyIDIgMiAwIDAgMS0yIDJoLS4wOWExLjY1IDEuNjUgMCAwIDAtMS41MSAxelwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaVNoYXJlMiAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwiY2lyY2xlXCIsXCJhdHRyXCI6e1wiY3hcIjpcIjE4XCIsXCJjeVwiOlwiNVwiLFwiclwiOlwiM1wifX0se1widGFnXCI6XCJjaXJjbGVcIixcImF0dHJcIjp7XCJjeFwiOlwiNlwiLFwiY3lcIjpcIjEyXCIsXCJyXCI6XCIzXCJ9fSx7XCJ0YWdcIjpcImNpcmNsZVwiLFwiYXR0clwiOntcImN4XCI6XCIxOFwiLFwiY3lcIjpcIjE5XCIsXCJyXCI6XCIzXCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiOC41OVwiLFwieTFcIjpcIjEzLjUxXCIsXCJ4MlwiOlwiMTUuNDJcIixcInkyXCI6XCIxNy40OVwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjE1LjQxXCIsXCJ5MVwiOlwiNi41MVwiLFwieDJcIjpcIjguNTlcIixcInkyXCI6XCIxMC40OVwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaVNoYXJlIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJwYXRoXCIsXCJhdHRyXCI6e1wiZFwiOlwiTTQgMTJ2OGEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJ2LThcIn19LHtcInRhZ1wiOlwicG9seWxpbmVcIixcImF0dHJcIjp7XCJwb2ludHNcIjpcIjE2IDYgMTIgMiA4IDZcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIxMlwiLFwieTFcIjpcIjJcIixcIngyXCI6XCIxMlwiLFwieTJcIjpcIjE1XCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpU2hpZWxkT2ZmIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJwYXRoXCIsXCJhdHRyXCI6e1wiZFwiOlwiTTE5LjY5IDE0YTYuOSA2LjkgMCAwIDAgLjMxLTJWNWwtOC0zLTMuMTYgMS4xOFwifX0se1widGFnXCI6XCJwYXRoXCIsXCJhdHRyXCI6e1wiZFwiOlwiTTQuNzMgNC43M0w0IDV2N2MwIDYgOCAxMCA4IDEwYTIwLjI5IDIwLjI5IDAgMCAwIDUuNjItNC4zOFwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjFcIixcInkxXCI6XCIxXCIsXCJ4MlwiOlwiMjNcIixcInkyXCI6XCIyM1wifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaVNoaWVsZCAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk0xMiAyMnM4LTQgOC0xMFY1bC04LTMtOCAzdjdjMCA2IDggMTAgOCAxMHpcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlTaG9wcGluZ0JhZyAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk02IDJMMyA2djE0YTIgMiAwIDAgMCAyIDJoMTRhMiAyIDAgMCAwIDItMlY2bC0zLTR6XCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiM1wiLFwieTFcIjpcIjZcIixcIngyXCI6XCIyMVwiLFwieTJcIjpcIjZcIn19LHtcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk0xNiAxMGE0IDQgMCAwIDEtOCAwXCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpU2hvcHBpbmdDYXJ0IChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJjaXJjbGVcIixcImF0dHJcIjp7XCJjeFwiOlwiOVwiLFwiY3lcIjpcIjIxXCIsXCJyXCI6XCIxXCJ9fSx7XCJ0YWdcIjpcImNpcmNsZVwiLFwiYXR0clwiOntcImN4XCI6XCIyMFwiLFwiY3lcIjpcIjIxXCIsXCJyXCI6XCIxXCJ9fSx7XCJ0YWdcIjpcInBhdGhcIixcImF0dHJcIjp7XCJkXCI6XCJNMSAxaDRsMi42OCAxMy4zOWEyIDIgMCAwIDAgMiAxLjYxaDkuNzJhMiAyIDAgMCAwIDItMS42MUwyMyA2SDZcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlTaHVmZmxlIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJwb2x5bGluZVwiLFwiYXR0clwiOntcInBvaW50c1wiOlwiMTYgMyAyMSAzIDIxIDhcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCI0XCIsXCJ5MVwiOlwiMjBcIixcIngyXCI6XCIyMVwiLFwieTJcIjpcIjNcIn19LHtcInRhZ1wiOlwicG9seWxpbmVcIixcImF0dHJcIjp7XCJwb2ludHNcIjpcIjIxIDE2IDIxIDIxIDE2IDIxXCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMTVcIixcInkxXCI6XCIxNVwiLFwieDJcIjpcIjIxXCIsXCJ5MlwiOlwiMjFcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCI0XCIsXCJ5MVwiOlwiNFwiLFwieDJcIjpcIjlcIixcInkyXCI6XCI5XCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpU2lkZWJhciAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicmVjdFwiLFwiYXR0clwiOntcInhcIjpcIjNcIixcInlcIjpcIjNcIixcIndpZHRoXCI6XCIxOFwiLFwiaGVpZ2h0XCI6XCIxOFwiLFwicnhcIjpcIjJcIixcInJ5XCI6XCIyXCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiOVwiLFwieTFcIjpcIjNcIixcIngyXCI6XCI5XCIsXCJ5MlwiOlwiMjFcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlTa2lwQmFjayAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicG9seWdvblwiLFwiYXR0clwiOntcInBvaW50c1wiOlwiMTkgMjAgOSAxMiAxOSA0IDE5IDIwXCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiNVwiLFwieTFcIjpcIjE5XCIsXCJ4MlwiOlwiNVwiLFwieTJcIjpcIjVcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlTa2lwRm9yd2FyZCAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicG9seWdvblwiLFwiYXR0clwiOntcInBvaW50c1wiOlwiNSA0IDE1IDEyIDUgMjAgNSA0XCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMTlcIixcInkxXCI6XCI1XCIsXCJ4MlwiOlwiMTlcIixcInkyXCI6XCIxOVwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaVNsYWNrIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJwYXRoXCIsXCJhdHRyXCI6e1wiZFwiOlwiTTE0LjUgMTBjLS44MyAwLTEuNS0uNjctMS41LTEuNXYtNWMwLS44My42Ny0xLjUgMS41LTEuNXMxLjUuNjcgMS41IDEuNXY1YzAgLjgzLS42NyAxLjUtMS41IDEuNXpcIn19LHtcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk0yMC41IDEwSDE5VjguNWMwLS44My42Ny0xLjUgMS41LTEuNXMxLjUuNjcgMS41IDEuNS0uNjcgMS41LTEuNSAxLjV6XCJ9fSx7XCJ0YWdcIjpcInBhdGhcIixcImF0dHJcIjp7XCJkXCI6XCJNOS41IDE0Yy44MyAwIDEuNS42NyAxLjUgMS41djVjMCAuODMtLjY3IDEuNS0xLjUgMS41UzggMjEuMzMgOCAyMC41di01YzAtLjgzLjY3LTEuNSAxLjUtMS41elwifX0se1widGFnXCI6XCJwYXRoXCIsXCJhdHRyXCI6e1wiZFwiOlwiTTMuNSAxNEg1djEuNWMwIC44My0uNjcgMS41LTEuNSAxLjVTMiAxNi4zMyAyIDE1LjUgMi42NyAxNCAzLjUgMTR6XCJ9fSx7XCJ0YWdcIjpcInBhdGhcIixcImF0dHJcIjp7XCJkXCI6XCJNMTQgMTQuNWMwLS44My42Ny0xLjUgMS41LTEuNWg1Yy44MyAwIDEuNS42NyAxLjUgMS41cy0uNjcgMS41LTEuNSAxLjVoLTVjLS44MyAwLTEuNS0uNjctMS41LTEuNXpcIn19LHtcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk0xNS41IDE5SDE0djEuNWMwIC44My42NyAxLjUgMS41IDEuNXMxLjUtLjY3IDEuNS0xLjUtLjY3LTEuNS0xLjUtMS41elwifX0se1widGFnXCI6XCJwYXRoXCIsXCJhdHRyXCI6e1wiZFwiOlwiTTEwIDkuNUMxMCA4LjY3IDkuMzMgOCA4LjUgOGgtNUMyLjY3IDggMiA4LjY3IDIgOS41UzIuNjcgMTEgMy41IDExaDVjLjgzIDAgMS41LS42NyAxLjUtMS41elwifX0se1widGFnXCI6XCJwYXRoXCIsXCJhdHRyXCI6e1wiZFwiOlwiTTguNSA1SDEwVjMuNUMxMCAyLjY3IDkuMzMgMiA4LjUgMlM3IDIuNjcgNyAzLjUgNy42NyA1IDguNSA1elwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaVNsYXNoIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJjaXJjbGVcIixcImF0dHJcIjp7XCJjeFwiOlwiMTJcIixcImN5XCI6XCIxMlwiLFwiclwiOlwiMTBcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCI0LjkzXCIsXCJ5MVwiOlwiNC45M1wiLFwieDJcIjpcIjE5LjA3XCIsXCJ5MlwiOlwiMTkuMDdcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlTbGlkZXJzIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjRcIixcInkxXCI6XCIyMVwiLFwieDJcIjpcIjRcIixcInkyXCI6XCIxNFwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjRcIixcInkxXCI6XCIxMFwiLFwieDJcIjpcIjRcIixcInkyXCI6XCIzXCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMTJcIixcInkxXCI6XCIyMVwiLFwieDJcIjpcIjEyXCIsXCJ5MlwiOlwiMTJcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIxMlwiLFwieTFcIjpcIjhcIixcIngyXCI6XCIxMlwiLFwieTJcIjpcIjNcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIyMFwiLFwieTFcIjpcIjIxXCIsXCJ4MlwiOlwiMjBcIixcInkyXCI6XCIxNlwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjIwXCIsXCJ5MVwiOlwiMTJcIixcIngyXCI6XCIyMFwiLFwieTJcIjpcIjNcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIxXCIsXCJ5MVwiOlwiMTRcIixcIngyXCI6XCI3XCIsXCJ5MlwiOlwiMTRcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCI5XCIsXCJ5MVwiOlwiOFwiLFwieDJcIjpcIjE1XCIsXCJ5MlwiOlwiOFwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjE3XCIsXCJ5MVwiOlwiMTZcIixcIngyXCI6XCIyM1wiLFwieTJcIjpcIjE2XCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpU21hcnRwaG9uZSAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicmVjdFwiLFwiYXR0clwiOntcInhcIjpcIjVcIixcInlcIjpcIjJcIixcIndpZHRoXCI6XCIxNFwiLFwiaGVpZ2h0XCI6XCIyMFwiLFwicnhcIjpcIjJcIixcInJ5XCI6XCIyXCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMTJcIixcInkxXCI6XCIxOFwiLFwieDJcIjpcIjEyLjAxXCIsXCJ5MlwiOlwiMThcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlTbWlsZSAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwiY2lyY2xlXCIsXCJhdHRyXCI6e1wiY3hcIjpcIjEyXCIsXCJjeVwiOlwiMTJcIixcInJcIjpcIjEwXCJ9fSx7XCJ0YWdcIjpcInBhdGhcIixcImF0dHJcIjp7XCJkXCI6XCJNOCAxNHMxLjUgMiA0IDIgNC0yIDQtMlwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjlcIixcInkxXCI6XCI5XCIsXCJ4MlwiOlwiOS4wMVwiLFwieTJcIjpcIjlcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIxNVwiLFwieTFcIjpcIjlcIixcIngyXCI6XCIxNS4wMVwiLFwieTJcIjpcIjlcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlTcGVha2VyIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJyZWN0XCIsXCJhdHRyXCI6e1wieFwiOlwiNFwiLFwieVwiOlwiMlwiLFwid2lkdGhcIjpcIjE2XCIsXCJoZWlnaHRcIjpcIjIwXCIsXCJyeFwiOlwiMlwiLFwicnlcIjpcIjJcIn19LHtcInRhZ1wiOlwiY2lyY2xlXCIsXCJhdHRyXCI6e1wiY3hcIjpcIjEyXCIsXCJjeVwiOlwiMTRcIixcInJcIjpcIjRcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIxMlwiLFwieTFcIjpcIjZcIixcIngyXCI6XCIxMi4wMVwiLFwieTJcIjpcIjZcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlTcXVhcmUgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcInJlY3RcIixcImF0dHJcIjp7XCJ4XCI6XCIzXCIsXCJ5XCI6XCIzXCIsXCJ3aWR0aFwiOlwiMThcIixcImhlaWdodFwiOlwiMThcIixcInJ4XCI6XCIyXCIsXCJyeVwiOlwiMlwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaVN0YXIgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcInBvbHlnb25cIixcImF0dHJcIjp7XCJwb2ludHNcIjpcIjEyIDIgMTUuMDkgOC4yNiAyMiA5LjI3IDE3IDE0LjE0IDE4LjE4IDIxLjAyIDEyIDE3Ljc3IDUuODIgMjEuMDIgNyAxNC4xNCAyIDkuMjcgOC45MSA4LjI2IDEyIDJcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlTdG9wQ2lyY2xlIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJjaXJjbGVcIixcImF0dHJcIjp7XCJjeFwiOlwiMTJcIixcImN5XCI6XCIxMlwiLFwiclwiOlwiMTBcIn19LHtcInRhZ1wiOlwicmVjdFwiLFwiYXR0clwiOntcInhcIjpcIjlcIixcInlcIjpcIjlcIixcIndpZHRoXCI6XCI2XCIsXCJoZWlnaHRcIjpcIjZcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlTdW4gKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcImNpcmNsZVwiLFwiYXR0clwiOntcImN4XCI6XCIxMlwiLFwiY3lcIjpcIjEyXCIsXCJyXCI6XCI1XCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMTJcIixcInkxXCI6XCIxXCIsXCJ4MlwiOlwiMTJcIixcInkyXCI6XCIzXCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMTJcIixcInkxXCI6XCIyMVwiLFwieDJcIjpcIjEyXCIsXCJ5MlwiOlwiMjNcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCI0LjIyXCIsXCJ5MVwiOlwiNC4yMlwiLFwieDJcIjpcIjUuNjRcIixcInkyXCI6XCI1LjY0XCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMTguMzZcIixcInkxXCI6XCIxOC4zNlwiLFwieDJcIjpcIjE5Ljc4XCIsXCJ5MlwiOlwiMTkuNzhcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIxXCIsXCJ5MVwiOlwiMTJcIixcIngyXCI6XCIzXCIsXCJ5MlwiOlwiMTJcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIyMVwiLFwieTFcIjpcIjEyXCIsXCJ4MlwiOlwiMjNcIixcInkyXCI6XCIxMlwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjQuMjJcIixcInkxXCI6XCIxOS43OFwiLFwieDJcIjpcIjUuNjRcIixcInkyXCI6XCIxOC4zNlwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjE4LjM2XCIsXCJ5MVwiOlwiNS42NFwiLFwieDJcIjpcIjE5Ljc4XCIsXCJ5MlwiOlwiNC4yMlwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaVN1bnJpc2UgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcInBhdGhcIixcImF0dHJcIjp7XCJkXCI6XCJNMTcgMThhNSA1IDAgMCAwLTEwIDBcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIxMlwiLFwieTFcIjpcIjJcIixcIngyXCI6XCIxMlwiLFwieTJcIjpcIjlcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCI0LjIyXCIsXCJ5MVwiOlwiMTAuMjJcIixcIngyXCI6XCI1LjY0XCIsXCJ5MlwiOlwiMTEuNjRcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIxXCIsXCJ5MVwiOlwiMThcIixcIngyXCI6XCIzXCIsXCJ5MlwiOlwiMThcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIyMVwiLFwieTFcIjpcIjE4XCIsXCJ4MlwiOlwiMjNcIixcInkyXCI6XCIxOFwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjE4LjM2XCIsXCJ5MVwiOlwiMTEuNjRcIixcIngyXCI6XCIxOS43OFwiLFwieTJcIjpcIjEwLjIyXCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMjNcIixcInkxXCI6XCIyMlwiLFwieDJcIjpcIjFcIixcInkyXCI6XCIyMlwifX0se1widGFnXCI6XCJwb2x5bGluZVwiLFwiYXR0clwiOntcInBvaW50c1wiOlwiOCA2IDEyIDIgMTYgNlwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaVN1bnNldCAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk0xNyAxOGE1IDUgMCAwIDAtMTAgMFwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjEyXCIsXCJ5MVwiOlwiOVwiLFwieDJcIjpcIjEyXCIsXCJ5MlwiOlwiMlwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjQuMjJcIixcInkxXCI6XCIxMC4yMlwiLFwieDJcIjpcIjUuNjRcIixcInkyXCI6XCIxMS42NFwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjFcIixcInkxXCI6XCIxOFwiLFwieDJcIjpcIjNcIixcInkyXCI6XCIxOFwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjIxXCIsXCJ5MVwiOlwiMThcIixcIngyXCI6XCIyM1wiLFwieTJcIjpcIjE4XCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMTguMzZcIixcInkxXCI6XCIxMS42NFwiLFwieDJcIjpcIjE5Ljc4XCIsXCJ5MlwiOlwiMTAuMjJcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIyM1wiLFwieTFcIjpcIjIyXCIsXCJ4MlwiOlwiMVwiLFwieTJcIjpcIjIyXCJ9fSx7XCJ0YWdcIjpcInBvbHlsaW5lXCIsXCJhdHRyXCI6e1wicG9pbnRzXCI6XCIxNiA1IDEyIDkgOCA1XCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpVGFibGV0IChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJyZWN0XCIsXCJhdHRyXCI6e1wieFwiOlwiNFwiLFwieVwiOlwiMlwiLFwid2lkdGhcIjpcIjE2XCIsXCJoZWlnaHRcIjpcIjIwXCIsXCJyeFwiOlwiMlwiLFwicnlcIjpcIjJcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIxMlwiLFwieTFcIjpcIjE4XCIsXCJ4MlwiOlwiMTIuMDFcIixcInkyXCI6XCIxOFwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaVRhZyAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk0yMC41OSAxMy40MWwtNy4xNyA3LjE3YTIgMiAwIDAgMS0yLjgzIDBMMiAxMlYyaDEwbDguNTkgOC41OWEyIDIgMCAwIDEgMCAyLjgyelwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjdcIixcInkxXCI6XCI3XCIsXCJ4MlwiOlwiNy4wMVwiLFwieTJcIjpcIjdcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlUYXJnZXQgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcImNpcmNsZVwiLFwiYXR0clwiOntcImN4XCI6XCIxMlwiLFwiY3lcIjpcIjEyXCIsXCJyXCI6XCIxMFwifX0se1widGFnXCI6XCJjaXJjbGVcIixcImF0dHJcIjp7XCJjeFwiOlwiMTJcIixcImN5XCI6XCIxMlwiLFwiclwiOlwiNlwifX0se1widGFnXCI6XCJjaXJjbGVcIixcImF0dHJcIjp7XCJjeFwiOlwiMTJcIixcImN5XCI6XCIxMlwiLFwiclwiOlwiMlwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaVRlcm1pbmFsIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJwb2x5bGluZVwiLFwiYXR0clwiOntcInBvaW50c1wiOlwiNCAxNyAxMCAxMSA0IDVcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIxMlwiLFwieTFcIjpcIjE5XCIsXCJ4MlwiOlwiMjBcIixcInkyXCI6XCIxOVwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaVRoZXJtb21ldGVyIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJwYXRoXCIsXCJhdHRyXCI6e1wiZFwiOlwiTTE0IDE0Ljc2VjMuNWEyLjUgMi41IDAgMCAwLTUgMHYxMS4yNmE0LjUgNC41IDAgMSAwIDUgMHpcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlUaHVtYnNEb3duIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJwYXRoXCIsXCJhdHRyXCI6e1wiZFwiOlwiTTEwIDE1djRhMyAzIDAgMCAwIDMgM2w0LTlWMkg1LjcyYTIgMiAwIDAgMC0yIDEuN2wtMS4zOCA5YTIgMiAwIDAgMCAyIDIuM3ptNy0xM2gyLjY3QTIuMzEgMi4zMSAwIDAgMSAyMiA0djdhMi4zMSAyLjMxIDAgMCAxLTIuMzMgMkgxN1wifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaVRodW1ic1VwIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJwYXRoXCIsXCJhdHRyXCI6e1wiZFwiOlwiTTE0IDlWNWEzIDMgMCAwIDAtMy0zbC00IDl2MTFoMTEuMjhhMiAyIDAgMCAwIDItMS43bDEuMzgtOWEyIDIgMCAwIDAtMi0yLjN6TTcgMjJINGEyIDIgMCAwIDEtMi0ydi03YTIgMiAwIDAgMSAyLTJoM1wifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaVRvZ2dsZUxlZnQgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcInJlY3RcIixcImF0dHJcIjp7XCJ4XCI6XCIxXCIsXCJ5XCI6XCI1XCIsXCJ3aWR0aFwiOlwiMjJcIixcImhlaWdodFwiOlwiMTRcIixcInJ4XCI6XCI3XCIsXCJyeVwiOlwiN1wifX0se1widGFnXCI6XCJjaXJjbGVcIixcImF0dHJcIjp7XCJjeFwiOlwiOFwiLFwiY3lcIjpcIjEyXCIsXCJyXCI6XCIzXCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpVG9nZ2xlUmlnaHQgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcInJlY3RcIixcImF0dHJcIjp7XCJ4XCI6XCIxXCIsXCJ5XCI6XCI1XCIsXCJ3aWR0aFwiOlwiMjJcIixcImhlaWdodFwiOlwiMTRcIixcInJ4XCI6XCI3XCIsXCJyeVwiOlwiN1wifX0se1widGFnXCI6XCJjaXJjbGVcIixcImF0dHJcIjp7XCJjeFwiOlwiMTZcIixcImN5XCI6XCIxMlwiLFwiclwiOlwiM1wifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaVRvb2wgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcInBhdGhcIixcImF0dHJcIjp7XCJkXCI6XCJNMTQuNyA2LjNhMSAxIDAgMCAwIDAgMS40bDEuNiAxLjZhMSAxIDAgMCAwIDEuNCAwbDMuNzctMy43N2E2IDYgMCAwIDEtNy45NCA3Ljk0bC02LjkxIDYuOTFhMi4xMiAyLjEyIDAgMCAxLTMtM2w2LjkxLTYuOTFhNiA2IDAgMCAxIDcuOTQtNy45NGwtMy43NiAzLjc2elwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaVRyYXNoMiAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicG9seWxpbmVcIixcImF0dHJcIjp7XCJwb2ludHNcIjpcIjMgNiA1IDYgMjEgNlwifX0se1widGFnXCI6XCJwYXRoXCIsXCJhdHRyXCI6e1wiZFwiOlwiTTE5IDZ2MTRhMiAyIDAgMCAxLTIgMkg3YTIgMiAwIDAgMS0yLTJWNm0zIDBWNGEyIDIgMCAwIDEgMi0yaDRhMiAyIDAgMCAxIDIgMnYyXCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMTBcIixcInkxXCI6XCIxMVwiLFwieDJcIjpcIjEwXCIsXCJ5MlwiOlwiMTdcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIxNFwiLFwieTFcIjpcIjExXCIsXCJ4MlwiOlwiMTRcIixcInkyXCI6XCIxN1wifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaVRyYXNoIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJwb2x5bGluZVwiLFwiYXR0clwiOntcInBvaW50c1wiOlwiMyA2IDUgNiAyMSA2XCJ9fSx7XCJ0YWdcIjpcInBhdGhcIixcImF0dHJcIjp7XCJkXCI6XCJNMTkgNnYxNGEyIDIgMCAwIDEtMiAySDdhMiAyIDAgMCAxLTItMlY2bTMgMFY0YTIgMiAwIDAgMSAyLTJoNGEyIDIgMCAwIDEgMiAydjJcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlUcmVsbG8gKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcInJlY3RcIixcImF0dHJcIjp7XCJ4XCI6XCIzXCIsXCJ5XCI6XCIzXCIsXCJ3aWR0aFwiOlwiMThcIixcImhlaWdodFwiOlwiMThcIixcInJ4XCI6XCIyXCIsXCJyeVwiOlwiMlwifX0se1widGFnXCI6XCJyZWN0XCIsXCJhdHRyXCI6e1wieFwiOlwiN1wiLFwieVwiOlwiN1wiLFwid2lkdGhcIjpcIjNcIixcImhlaWdodFwiOlwiOVwifX0se1widGFnXCI6XCJyZWN0XCIsXCJhdHRyXCI6e1wieFwiOlwiMTRcIixcInlcIjpcIjdcIixcIndpZHRoXCI6XCIzXCIsXCJoZWlnaHRcIjpcIjVcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlUcmVuZGluZ0Rvd24gKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcInBvbHlsaW5lXCIsXCJhdHRyXCI6e1wicG9pbnRzXCI6XCIyMyAxOCAxMy41IDguNSA4LjUgMTMuNSAxIDZcIn19LHtcInRhZ1wiOlwicG9seWxpbmVcIixcImF0dHJcIjp7XCJwb2ludHNcIjpcIjE3IDE4IDIzIDE4IDIzIDEyXCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpVHJlbmRpbmdVcCAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicG9seWxpbmVcIixcImF0dHJcIjp7XCJwb2ludHNcIjpcIjIzIDYgMTMuNSAxNS41IDguNSAxMC41IDEgMThcIn19LHtcInRhZ1wiOlwicG9seWxpbmVcIixcImF0dHJcIjp7XCJwb2ludHNcIjpcIjE3IDYgMjMgNiAyMyAxMlwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaVRyaWFuZ2xlIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJwYXRoXCIsXCJhdHRyXCI6e1wiZFwiOlwiTTEwLjI5IDMuODZMMS44MiAxOGEyIDIgMCAwIDAgMS43MSAzaDE2Ljk0YTIgMiAwIDAgMCAxLjcxLTNMMTMuNzEgMy44NmEyIDIgMCAwIDAtMy40MiAwelwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaVRydWNrIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJyZWN0XCIsXCJhdHRyXCI6e1wieFwiOlwiMVwiLFwieVwiOlwiM1wiLFwid2lkdGhcIjpcIjE1XCIsXCJoZWlnaHRcIjpcIjEzXCJ9fSx7XCJ0YWdcIjpcInBvbHlnb25cIixcImF0dHJcIjp7XCJwb2ludHNcIjpcIjE2IDggMjAgOCAyMyAxMSAyMyAxNiAxNiAxNiAxNiA4XCJ9fSx7XCJ0YWdcIjpcImNpcmNsZVwiLFwiYXR0clwiOntcImN4XCI6XCI1LjVcIixcImN5XCI6XCIxOC41XCIsXCJyXCI6XCIyLjVcIn19LHtcInRhZ1wiOlwiY2lyY2xlXCIsXCJhdHRyXCI6e1wiY3hcIjpcIjE4LjVcIixcImN5XCI6XCIxOC41XCIsXCJyXCI6XCIyLjVcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlUdiAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicmVjdFwiLFwiYXR0clwiOntcInhcIjpcIjJcIixcInlcIjpcIjdcIixcIndpZHRoXCI6XCIyMFwiLFwiaGVpZ2h0XCI6XCIxNVwiLFwicnhcIjpcIjJcIixcInJ5XCI6XCIyXCJ9fSx7XCJ0YWdcIjpcInBvbHlsaW5lXCIsXCJhdHRyXCI6e1wicG9pbnRzXCI6XCIxNyAyIDEyIDcgNyAyXCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpVHdpdGNoIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJwYXRoXCIsXCJhdHRyXCI6e1wiZFwiOlwiTTIxIDJIM3YxNmg1djRsNC00aDVsNC00VjJ6bS0xMCA5VjdtNSA0VjdcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlUd2l0dGVyIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJwYXRoXCIsXCJhdHRyXCI6e1wiZFwiOlwiTTIzIDNhMTAuOSAxMC45IDAgMCAxLTMuMTQgMS41MyA0LjQ4IDQuNDggMCAwIDAtNy44NiAzdjFBMTAuNjYgMTAuNjYgMCAwIDEgMyA0cy00IDkgNSAxM2ExMS42NCAxMS42NCAwIDAgMS03IDJjOSA1IDIwIDAgMjAtMTEuNWE0LjUgNC41IDAgMCAwLS4wOC0uODNBNy43MiA3LjcyIDAgMCAwIDIzIDN6XCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpVHlwZSAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicG9seWxpbmVcIixcImF0dHJcIjp7XCJwb2ludHNcIjpcIjQgNyA0IDQgMjAgNCAyMCA3XCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiOVwiLFwieTFcIjpcIjIwXCIsXCJ4MlwiOlwiMTVcIixcInkyXCI6XCIyMFwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjEyXCIsXCJ5MVwiOlwiNFwiLFwieDJcIjpcIjEyXCIsXCJ5MlwiOlwiMjBcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlVbWJyZWxsYSAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk0yMyAxMmExMS4wNSAxMS4wNSAwIDAgMC0yMiAwem0tNSA3YTMgMyAwIDAgMS02IDB2LTdcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlVbmRlcmxpbmUgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcInBhdGhcIixcImF0dHJcIjp7XCJkXCI6XCJNNiAzdjdhNiA2IDAgMCAwIDYgNiA2IDYgMCAwIDAgNi02VjNcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCI0XCIsXCJ5MVwiOlwiMjFcIixcIngyXCI6XCIyMFwiLFwieTJcIjpcIjIxXCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpVW5sb2NrIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJyZWN0XCIsXCJhdHRyXCI6e1wieFwiOlwiM1wiLFwieVwiOlwiMTFcIixcIndpZHRoXCI6XCIxOFwiLFwiaGVpZ2h0XCI6XCIxMVwiLFwicnhcIjpcIjJcIixcInJ5XCI6XCIyXCJ9fSx7XCJ0YWdcIjpcInBhdGhcIixcImF0dHJcIjp7XCJkXCI6XCJNNyAxMVY3YTUgNSAwIDAgMSA5LjktMVwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaVVwbG9hZENsb3VkIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJwb2x5bGluZVwiLFwiYXR0clwiOntcInBvaW50c1wiOlwiMTYgMTYgMTIgMTIgOCAxNlwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjEyXCIsXCJ5MVwiOlwiMTJcIixcIngyXCI6XCIxMlwiLFwieTJcIjpcIjIxXCJ9fSx7XCJ0YWdcIjpcInBhdGhcIixcImF0dHJcIjp7XCJkXCI6XCJNMjAuMzkgMTguMzlBNSA1IDAgMCAwIDE4IDloLTEuMjZBOCA4IDAgMSAwIDMgMTYuM1wifX0se1widGFnXCI6XCJwb2x5bGluZVwiLFwiYXR0clwiOntcInBvaW50c1wiOlwiMTYgMTYgMTIgMTIgOCAxNlwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaVVwbG9hZCAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk0yMSAxNXY0YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0ydi00XCJ9fSx7XCJ0YWdcIjpcInBvbHlsaW5lXCIsXCJhdHRyXCI6e1wicG9pbnRzXCI6XCIxNyA4IDEyIDMgNyA4XCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMTJcIixcInkxXCI6XCIzXCIsXCJ4MlwiOlwiMTJcIixcInkyXCI6XCIxNVwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaVVzZXJDaGVjayAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk0xNiAyMXYtMmE0IDQgMCAwIDAtNC00SDVhNCA0IDAgMCAwLTQgNHYyXCJ9fSx7XCJ0YWdcIjpcImNpcmNsZVwiLFwiYXR0clwiOntcImN4XCI6XCI4LjVcIixcImN5XCI6XCI3XCIsXCJyXCI6XCI0XCJ9fSx7XCJ0YWdcIjpcInBvbHlsaW5lXCIsXCJhdHRyXCI6e1wicG9pbnRzXCI6XCIxNyAxMSAxOSAxMyAyMyA5XCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpVXNlck1pbnVzIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJwYXRoXCIsXCJhdHRyXCI6e1wiZFwiOlwiTTE2IDIxdi0yYTQgNCAwIDAgMC00LTRINWE0IDQgMCAwIDAtNCA0djJcIn19LHtcInRhZ1wiOlwiY2lyY2xlXCIsXCJhdHRyXCI6e1wiY3hcIjpcIjguNVwiLFwiY3lcIjpcIjdcIixcInJcIjpcIjRcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIyM1wiLFwieTFcIjpcIjExXCIsXCJ4MlwiOlwiMTdcIixcInkyXCI6XCIxMVwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaVVzZXJQbHVzIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJwYXRoXCIsXCJhdHRyXCI6e1wiZFwiOlwiTTE2IDIxdi0yYTQgNCAwIDAgMC00LTRINWE0IDQgMCAwIDAtNCA0djJcIn19LHtcInRhZ1wiOlwiY2lyY2xlXCIsXCJhdHRyXCI6e1wiY3hcIjpcIjguNVwiLFwiY3lcIjpcIjdcIixcInJcIjpcIjRcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIyMFwiLFwieTFcIjpcIjhcIixcIngyXCI6XCIyMFwiLFwieTJcIjpcIjE0XCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMjNcIixcInkxXCI6XCIxMVwiLFwieDJcIjpcIjE3XCIsXCJ5MlwiOlwiMTFcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlVc2VyWCAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk0xNiAyMXYtMmE0IDQgMCAwIDAtNC00SDVhNCA0IDAgMCAwLTQgNHYyXCJ9fSx7XCJ0YWdcIjpcImNpcmNsZVwiLFwiYXR0clwiOntcImN4XCI6XCI4LjVcIixcImN5XCI6XCI3XCIsXCJyXCI6XCI0XCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMThcIixcInkxXCI6XCI4XCIsXCJ4MlwiOlwiMjNcIixcInkyXCI6XCIxM1wifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjIzXCIsXCJ5MVwiOlwiOFwiLFwieDJcIjpcIjE4XCIsXCJ5MlwiOlwiMTNcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlVc2VyIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJwYXRoXCIsXCJhdHRyXCI6e1wiZFwiOlwiTTIwIDIxdi0yYTQgNCAwIDAgMC00LTRIOGE0IDQgMCAwIDAtNCA0djJcIn19LHtcInRhZ1wiOlwiY2lyY2xlXCIsXCJhdHRyXCI6e1wiY3hcIjpcIjEyXCIsXCJjeVwiOlwiN1wiLFwiclwiOlwiNFwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaVVzZXJzIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJwYXRoXCIsXCJhdHRyXCI6e1wiZFwiOlwiTTE3IDIxdi0yYTQgNCAwIDAgMC00LTRINWE0IDQgMCAwIDAtNCA0djJcIn19LHtcInRhZ1wiOlwiY2lyY2xlXCIsXCJhdHRyXCI6e1wiY3hcIjpcIjlcIixcImN5XCI6XCI3XCIsXCJyXCI6XCI0XCJ9fSx7XCJ0YWdcIjpcInBhdGhcIixcImF0dHJcIjp7XCJkXCI6XCJNMjMgMjF2LTJhNCA0IDAgMCAwLTMtMy44N1wifX0se1widGFnXCI6XCJwYXRoXCIsXCJhdHRyXCI6e1wiZFwiOlwiTTE2IDMuMTNhNCA0IDAgMCAxIDAgNy43NVwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaVZpZGVvT2ZmIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJwYXRoXCIsXCJhdHRyXCI6e1wiZFwiOlwiTTE2IDE2djFhMiAyIDAgMCAxLTIgMkgzYTIgMiAwIDAgMS0yLTJWN2EyIDIgMCAwIDEgMi0yaDJtNS42NiAwSDE0YTIgMiAwIDAgMSAyIDJ2My4zNGwxIDFMMjMgN3YxMFwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjFcIixcInkxXCI6XCIxXCIsXCJ4MlwiOlwiMjNcIixcInkyXCI6XCIyM1wifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaVZpZGVvIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJwb2x5Z29uXCIsXCJhdHRyXCI6e1wicG9pbnRzXCI6XCIyMyA3IDE2IDEyIDIzIDE3IDIzIDdcIn19LHtcInRhZ1wiOlwicmVjdFwiLFwiYXR0clwiOntcInhcIjpcIjFcIixcInlcIjpcIjVcIixcIndpZHRoXCI6XCIxNVwiLFwiaGVpZ2h0XCI6XCIxNFwiLFwicnhcIjpcIjJcIixcInJ5XCI6XCIyXCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpVm9pY2VtYWlsIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJjaXJjbGVcIixcImF0dHJcIjp7XCJjeFwiOlwiNS41XCIsXCJjeVwiOlwiMTEuNVwiLFwiclwiOlwiNC41XCJ9fSx7XCJ0YWdcIjpcImNpcmNsZVwiLFwiYXR0clwiOntcImN4XCI6XCIxOC41XCIsXCJjeVwiOlwiMTEuNVwiLFwiclwiOlwiNC41XCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiNS41XCIsXCJ5MVwiOlwiMTZcIixcIngyXCI6XCIxOC41XCIsXCJ5MlwiOlwiMTZcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlWb2x1bWUxIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJwb2x5Z29uXCIsXCJhdHRyXCI6e1wicG9pbnRzXCI6XCIxMSA1IDYgOSAyIDkgMiAxNSA2IDE1IDExIDE5IDExIDVcIn19LHtcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk0xNS41NCA4LjQ2YTUgNSAwIDAgMSAwIDcuMDdcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlWb2x1bWUyIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJwb2x5Z29uXCIsXCJhdHRyXCI6e1wicG9pbnRzXCI6XCIxMSA1IDYgOSAyIDkgMiAxNSA2IDE1IDExIDE5IDExIDVcIn19LHtcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk0xOS4wNyA0LjkzYTEwIDEwIDAgMCAxIDAgMTQuMTRNMTUuNTQgOC40NmE1IDUgMCAwIDEgMCA3LjA3XCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpVm9sdW1lWCAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicG9seWdvblwiLFwiYXR0clwiOntcInBvaW50c1wiOlwiMTEgNSA2IDkgMiA5IDIgMTUgNiAxNSAxMSAxOSAxMSA1XCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMjNcIixcInkxXCI6XCI5XCIsXCJ4MlwiOlwiMTdcIixcInkyXCI6XCIxNVwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjE3XCIsXCJ5MVwiOlwiOVwiLFwieDJcIjpcIjIzXCIsXCJ5MlwiOlwiMTVcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlWb2x1bWUgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcInBvbHlnb25cIixcImF0dHJcIjp7XCJwb2ludHNcIjpcIjExIDUgNiA5IDIgOSAyIDE1IDYgMTUgMTEgMTkgMTEgNVwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaVdhdGNoIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJjaXJjbGVcIixcImF0dHJcIjp7XCJjeFwiOlwiMTJcIixcImN5XCI6XCIxMlwiLFwiclwiOlwiN1wifX0se1widGFnXCI6XCJwb2x5bGluZVwiLFwiYXR0clwiOntcInBvaW50c1wiOlwiMTIgOSAxMiAxMiAxMy41IDEzLjVcIn19LHtcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk0xNi41MSAxNy4zNWwtLjM1IDMuODNhMiAyIDAgMCAxLTIgMS44Mkg5LjgzYTIgMiAwIDAgMS0yLTEuODJsLS4zNS0zLjgzbS4wMS0xMC43bC4zNS0zLjgzQTIgMiAwIDAgMSA5LjgzIDFoNC4zNWEyIDIgMCAwIDEgMiAxLjgybC4zNSAzLjgzXCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpV2lmaU9mZiAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIxXCIsXCJ5MVwiOlwiMVwiLFwieDJcIjpcIjIzXCIsXCJ5MlwiOlwiMjNcIn19LHtcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk0xNi43MiAxMS4wNkExMC45NCAxMC45NCAwIDAgMSAxOSAxMi41NVwifX0se1widGFnXCI6XCJwYXRoXCIsXCJhdHRyXCI6e1wiZFwiOlwiTTUgMTIuNTVhMTAuOTQgMTAuOTQgMCAwIDEgNS4xNy0yLjM5XCJ9fSx7XCJ0YWdcIjpcInBhdGhcIixcImF0dHJcIjp7XCJkXCI6XCJNMTAuNzEgNS4wNUExNiAxNiAwIDAgMSAyMi41OCA5XCJ9fSx7XCJ0YWdcIjpcInBhdGhcIixcImF0dHJcIjp7XCJkXCI6XCJNMS40MiA5YTE1LjkxIDE1LjkxIDAgMCAxIDQuNy0yLjg4XCJ9fSx7XCJ0YWdcIjpcInBhdGhcIixcImF0dHJcIjp7XCJkXCI6XCJNOC41MyAxNi4xMWE2IDYgMCAwIDEgNi45NSAwXCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMTJcIixcInkxXCI6XCIyMFwiLFwieDJcIjpcIjEyLjAxXCIsXCJ5MlwiOlwiMjBcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlXaWZpIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJwYXRoXCIsXCJhdHRyXCI6e1wiZFwiOlwiTTUgMTIuNTVhMTEgMTEgMCAwIDEgMTQuMDggMFwifX0se1widGFnXCI6XCJwYXRoXCIsXCJhdHRyXCI6e1wiZFwiOlwiTTEuNDIgOWExNiAxNiAwIDAgMSAyMS4xNiAwXCJ9fSx7XCJ0YWdcIjpcInBhdGhcIixcImF0dHJcIjp7XCJkXCI6XCJNOC41MyAxNi4xMWE2IDYgMCAwIDEgNi45NSAwXCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMTJcIixcInkxXCI6XCIyMFwiLFwieDJcIjpcIjEyLjAxXCIsXCJ5MlwiOlwiMjBcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlXaW5kIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJwYXRoXCIsXCJhdHRyXCI6e1wiZFwiOlwiTTkuNTkgNC41OUEyIDIgMCAxIDEgMTEgOEgybTEwLjU5IDExLjQxQTIgMiAwIDEgMCAxNCAxNkgybTE1LjczLTguMjdBMi41IDIuNSAwIDEgMSAxOS41IDEySDJcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlYQ2lyY2xlIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJjaXJjbGVcIixcImF0dHJcIjp7XCJjeFwiOlwiMTJcIixcImN5XCI6XCIxMlwiLFwiclwiOlwiMTBcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIxNVwiLFwieTFcIjpcIjlcIixcIngyXCI6XCI5XCIsXCJ5MlwiOlwiMTVcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCI5XCIsXCJ5MVwiOlwiOVwiLFwieDJcIjpcIjE1XCIsXCJ5MlwiOlwiMTVcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlYT2N0YWdvbiAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicG9seWdvblwiLFwiYXR0clwiOntcInBvaW50c1wiOlwiNy44NiAyIDE2LjE0IDIgMjIgNy44NiAyMiAxNi4xNCAxNi4xNCAyMiA3Ljg2IDIyIDIgMTYuMTQgMiA3Ljg2IDcuODYgMlwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjE1XCIsXCJ5MVwiOlwiOVwiLFwieDJcIjpcIjlcIixcInkyXCI6XCIxNVwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjlcIixcInkxXCI6XCI5XCIsXCJ4MlwiOlwiMTVcIixcInkyXCI6XCIxNVwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaVhTcXVhcmUgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcInJlY3RcIixcImF0dHJcIjp7XCJ4XCI6XCIzXCIsXCJ5XCI6XCIzXCIsXCJ3aWR0aFwiOlwiMThcIixcImhlaWdodFwiOlwiMThcIixcInJ4XCI6XCIyXCIsXCJyeVwiOlwiMlwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjlcIixcInkxXCI6XCI5XCIsXCJ4MlwiOlwiMTVcIixcInkyXCI6XCIxNVwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjE1XCIsXCJ5MVwiOlwiOVwiLFwieDJcIjpcIjlcIixcInkyXCI6XCIxNVwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaVggKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMThcIixcInkxXCI6XCI2XCIsXCJ4MlwiOlwiNlwiLFwieTJcIjpcIjE4XCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiNlwiLFwieTFcIjpcIjZcIixcIngyXCI6XCIxOFwiLFwieTJcIjpcIjE4XCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpWW91dHViZSAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicGF0aFwiLFwiYXR0clwiOntcImRcIjpcIk0yMi41NCA2LjQyYTIuNzggMi43OCAwIDAgMC0xLjk0LTJDMTguODggNCAxMiA0IDEyIDRzLTYuODggMC04LjYuNDZhMi43OCAyLjc4IDAgMCAwLTEuOTQgMkEyOSAyOSAwIDAgMCAxIDExLjc1YTI5IDI5IDAgMCAwIC40NiA1LjMzQTIuNzggMi43OCAwIDAgMCAzLjQgMTljMS43Mi40NiA4LjYuNDYgOC42LjQ2czYuODggMCA4LjYtLjQ2YTIuNzggMi43OCAwIDAgMCAxLjk0LTIgMjkgMjkgMCAwIDAgLjQ2LTUuMjUgMjkgMjkgMCAwIDAtLjQ2LTUuMzN6XCJ9fSx7XCJ0YWdcIjpcInBvbHlnb25cIixcImF0dHJcIjp7XCJwb2ludHNcIjpcIjkuNzUgMTUuMDIgMTUuNSAxMS43NSA5Ljc1IDguNDggOS43NSAxNS4wMlwifX1dfSkocHJvcHMpO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBGaVphcE9mZiAocHJvcHMpIHtcbiAgcmV0dXJuIEdlbkljb24oe1widGFnXCI6XCJzdmdcIixcImF0dHJcIjp7XCJ2aWV3Qm94XCI6XCIwIDAgMjQgMjRcIixcImZpbGxcIjpcIm5vbmVcIixcInN0cm9rZVwiOlwiY3VycmVudENvbG9yXCIsXCJzdHJva2VXaWR0aFwiOlwiMlwiLFwic3Ryb2tlTGluZWNhcFwiOlwicm91bmRcIixcInN0cm9rZUxpbmVqb2luXCI6XCJyb3VuZFwifSxcImNoaWxkXCI6W3tcInRhZ1wiOlwicG9seWxpbmVcIixcImF0dHJcIjp7XCJwb2ludHNcIjpcIjEyLjQxIDYuNzUgMTMgMiAxMC41NyA0LjkyXCJ9fSx7XCJ0YWdcIjpcInBvbHlsaW5lXCIsXCJhdHRyXCI6e1wicG9pbnRzXCI6XCIxOC41NyAxMi45MSAyMSAxMCAxNS42NiAxMFwifX0se1widGFnXCI6XCJwb2x5bGluZVwiLFwiYXR0clwiOntcInBvaW50c1wiOlwiOCA4IDMgMTQgMTIgMTQgMTEgMjIgMTYgMTZcIn19LHtcInRhZ1wiOlwibGluZVwiLFwiYXR0clwiOntcIngxXCI6XCIxXCIsXCJ5MVwiOlwiMVwiLFwieDJcIjpcIjIzXCIsXCJ5MlwiOlwiMjNcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlaYXAgKHByb3BzKSB7XG4gIHJldHVybiBHZW5JY29uKHtcInRhZ1wiOlwic3ZnXCIsXCJhdHRyXCI6e1widmlld0JveFwiOlwiMCAwIDI0IDI0XCIsXCJmaWxsXCI6XCJub25lXCIsXCJzdHJva2VcIjpcImN1cnJlbnRDb2xvclwiLFwic3Ryb2tlV2lkdGhcIjpcIjJcIixcInN0cm9rZUxpbmVjYXBcIjpcInJvdW5kXCIsXCJzdHJva2VMaW5lam9pblwiOlwicm91bmRcIn0sXCJjaGlsZFwiOlt7XCJ0YWdcIjpcInBvbHlnb25cIixcImF0dHJcIjp7XCJwb2ludHNcIjpcIjEzIDIgMyAxNCAxMiAxNCAxMSAyMiAyMSAxMCAxMiAxMCAxMyAyXCJ9fV19KShwcm9wcyk7XG59O1xuZXhwb3J0IGZ1bmN0aW9uIEZpWm9vbUluIChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJjaXJjbGVcIixcImF0dHJcIjp7XCJjeFwiOlwiMTFcIixcImN5XCI6XCIxMVwiLFwiclwiOlwiOFwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjIxXCIsXCJ5MVwiOlwiMjFcIixcIngyXCI6XCIxNi42NVwiLFwieTJcIjpcIjE2LjY1XCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiMTFcIixcInkxXCI6XCI4XCIsXCJ4MlwiOlwiMTFcIixcInkyXCI6XCIxNFwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjhcIixcInkxXCI6XCIxMVwiLFwieDJcIjpcIjE0XCIsXCJ5MlwiOlwiMTFcIn19XX0pKHByb3BzKTtcbn07XG5leHBvcnQgZnVuY3Rpb24gRmlab29tT3V0IChwcm9wcykge1xuICByZXR1cm4gR2VuSWNvbih7XCJ0YWdcIjpcInN2Z1wiLFwiYXR0clwiOntcInZpZXdCb3hcIjpcIjAgMCAyNCAyNFwiLFwiZmlsbFwiOlwibm9uZVwiLFwic3Ryb2tlXCI6XCJjdXJyZW50Q29sb3JcIixcInN0cm9rZVdpZHRoXCI6XCIyXCIsXCJzdHJva2VMaW5lY2FwXCI6XCJyb3VuZFwiLFwic3Ryb2tlTGluZWpvaW5cIjpcInJvdW5kXCJ9LFwiY2hpbGRcIjpbe1widGFnXCI6XCJjaXJjbGVcIixcImF0dHJcIjp7XCJjeFwiOlwiMTFcIixcImN5XCI6XCIxMVwiLFwiclwiOlwiOFwifX0se1widGFnXCI6XCJsaW5lXCIsXCJhdHRyXCI6e1wieDFcIjpcIjIxXCIsXCJ5MVwiOlwiMjFcIixcIngyXCI6XCIxNi42NVwiLFwieTJcIjpcIjE2LjY1XCJ9fSx7XCJ0YWdcIjpcImxpbmVcIixcImF0dHJcIjp7XCJ4MVwiOlwiOFwiLFwieTFcIjpcIjExXCIsXCJ4MlwiOlwiMTRcIixcInkyXCI6XCIxMVwifX1dfSkocHJvcHMpO1xufTtcbiIsICIvKipcbiAqICBiYXNlNjQudHNcbiAqXG4gKiAgTGljZW5zZWQgdW5kZXIgdGhlIEJTRCAzLUNsYXVzZSBMaWNlbnNlLlxuICogICAgaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICpcbiAqICBSZWZlcmVuY2VzOlxuICogICAgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9CYXNlNjRcbiAqXG4gKiBAYXV0aG9yIERhbiBLb2dhaSAoaHR0cHM6Ly9naXRodWIuY29tL2RhbmtvZ2FpKVxuICovXG5jb25zdCB2ZXJzaW9uID0gJzMuNy4yJztcbi8qKlxuICogQGRlcHJlY2F0ZWQgdXNlIGxvd2VyY2FzZSBgdmVyc2lvbmAuXG4gKi9cbmNvbnN0IFZFUlNJT04gPSB2ZXJzaW9uO1xuY29uc3QgX2hhc2F0b2IgPSB0eXBlb2YgYXRvYiA9PT0gJ2Z1bmN0aW9uJztcbmNvbnN0IF9oYXNidG9hID0gdHlwZW9mIGJ0b2EgPT09ICdmdW5jdGlvbic7XG5jb25zdCBfaGFzQnVmZmVyID0gdHlwZW9mIEJ1ZmZlciA9PT0gJ2Z1bmN0aW9uJztcbmNvbnN0IF9URCA9IHR5cGVvZiBUZXh0RGVjb2RlciA9PT0gJ2Z1bmN0aW9uJyA/IG5ldyBUZXh0RGVjb2RlcigpIDogdW5kZWZpbmVkO1xuY29uc3QgX1RFID0gdHlwZW9mIFRleHRFbmNvZGVyID09PSAnZnVuY3Rpb24nID8gbmV3IFRleHRFbmNvZGVyKCkgOiB1bmRlZmluZWQ7XG5jb25zdCBiNjRjaCA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSc7XG5jb25zdCBiNjRjaHMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChiNjRjaCk7XG5jb25zdCBiNjR0YWIgPSAoKGEpID0+IHtcbiAgICBsZXQgdGFiID0ge307XG4gICAgYS5mb3JFYWNoKChjLCBpKSA9PiB0YWJbY10gPSBpKTtcbiAgICByZXR1cm4gdGFiO1xufSkoYjY0Y2hzKTtcbmNvbnN0IGI2NHJlID0gL14oPzpbQS1aYS16XFxkK1xcL117NH0pKj8oPzpbQS1aYS16XFxkK1xcL117Mn0oPzo9PSk/fFtBLVphLXpcXGQrXFwvXXszfT0/KT8kLztcbmNvbnN0IF9mcm9tQ0MgPSBTdHJpbmcuZnJvbUNoYXJDb2RlLmJpbmQoU3RyaW5nKTtcbmNvbnN0IF9VOEFmcm9tID0gdHlwZW9mIFVpbnQ4QXJyYXkuZnJvbSA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gVWludDhBcnJheS5mcm9tLmJpbmQoVWludDhBcnJheSlcbiAgICA6IChpdCwgZm4gPSAoeCkgPT4geCkgPT4gbmV3IFVpbnQ4QXJyYXkoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoaXQsIDApLm1hcChmbikpO1xuY29uc3QgX21rVXJpU2FmZSA9IChzcmMpID0+IHNyY1xuICAgIC5yZXBsYWNlKC89L2csICcnKS5yZXBsYWNlKC9bK1xcL10vZywgKG0wKSA9PiBtMCA9PSAnKycgPyAnLScgOiAnXycpO1xuY29uc3QgX3RpZHlCNjQgPSAocykgPT4gcy5yZXBsYWNlKC9bXkEtWmEtejAtOVxcK1xcL10vZywgJycpO1xuLyoqXG4gKiBwb2x5ZmlsbCB2ZXJzaW9uIG9mIGBidG9hYFxuICovXG5jb25zdCBidG9hUG9seWZpbGwgPSAoYmluKSA9PiB7XG4gICAgLy8gY29uc29sZS5sb2coJ3BvbHlmaWxsZWQnKTtcbiAgICBsZXQgdTMyLCBjMCwgYzEsIGMyLCBhc2MgPSAnJztcbiAgICBjb25zdCBwYWQgPSBiaW4ubGVuZ3RoICUgMztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJpbi5sZW5ndGg7KSB7XG4gICAgICAgIGlmICgoYzAgPSBiaW4uY2hhckNvZGVBdChpKyspKSA+IDI1NSB8fFxuICAgICAgICAgICAgKGMxID0gYmluLmNoYXJDb2RlQXQoaSsrKSkgPiAyNTUgfHxcbiAgICAgICAgICAgIChjMiA9IGJpbi5jaGFyQ29kZUF0KGkrKykpID4gMjU1KVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBjaGFyYWN0ZXIgZm91bmQnKTtcbiAgICAgICAgdTMyID0gKGMwIDw8IDE2KSB8IChjMSA8PCA4KSB8IGMyO1xuICAgICAgICBhc2MgKz0gYjY0Y2hzW3UzMiA+PiAxOCAmIDYzXVxuICAgICAgICAgICAgKyBiNjRjaHNbdTMyID4+IDEyICYgNjNdXG4gICAgICAgICAgICArIGI2NGNoc1t1MzIgPj4gNiAmIDYzXVxuICAgICAgICAgICAgKyBiNjRjaHNbdTMyICYgNjNdO1xuICAgIH1cbiAgICByZXR1cm4gcGFkID8gYXNjLnNsaWNlKDAsIHBhZCAtIDMpICsgXCI9PT1cIi5zdWJzdHJpbmcocGFkKSA6IGFzYztcbn07XG4vKipcbiAqIGRvZXMgd2hhdCBgd2luZG93LmJ0b2FgIG9mIHdlYiBicm93c2VycyBkby5cbiAqIEBwYXJhbSB7U3RyaW5nfSBiaW4gYmluYXJ5IHN0cmluZ1xuICogQHJldHVybnMge3N0cmluZ30gQmFzZTY0LWVuY29kZWQgc3RyaW5nXG4gKi9cbmNvbnN0IF9idG9hID0gX2hhc2J0b2EgPyAoYmluKSA9PiBidG9hKGJpbilcbiAgICA6IF9oYXNCdWZmZXIgPyAoYmluKSA9PiBCdWZmZXIuZnJvbShiaW4sICdiaW5hcnknKS50b1N0cmluZygnYmFzZTY0JylcbiAgICAgICAgOiBidG9hUG9seWZpbGw7XG5jb25zdCBfZnJvbVVpbnQ4QXJyYXkgPSBfaGFzQnVmZmVyXG4gICAgPyAodThhKSA9PiBCdWZmZXIuZnJvbSh1OGEpLnRvU3RyaW5nKCdiYXNlNjQnKVxuICAgIDogKHU4YSkgPT4ge1xuICAgICAgICAvLyBjZi4gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTI3MTAwMDEvaG93LXRvLWNvbnZlcnQtdWludDgtYXJyYXktdG8tYmFzZTY0LWVuY29kZWQtc3RyaW5nLzEyNzEzMzI2IzEyNzEzMzI2XG4gICAgICAgIGNvbnN0IG1heGFyZ3MgPSAweDEwMDA7XG4gICAgICAgIGxldCBzdHJzID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gdThhLmxlbmd0aDsgaSA8IGw7IGkgKz0gbWF4YXJncykge1xuICAgICAgICAgICAgc3Rycy5wdXNoKF9mcm9tQ0MuYXBwbHkobnVsbCwgdThhLnN1YmFycmF5KGksIGkgKyBtYXhhcmdzKSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfYnRvYShzdHJzLmpvaW4oJycpKTtcbiAgICB9O1xuLyoqXG4gKiBjb252ZXJ0cyBhIFVpbnQ4QXJyYXkgdG8gYSBCYXNlNjQgc3RyaW5nLlxuICogQHBhcmFtIHtib29sZWFufSBbdXJsc2FmZV0gVVJMLWFuZC1maWxlbmFtZS1zYWZlIGEgbGEgUkZDNDY0OCBcdTAwQTc1XG4gKiBAcmV0dXJucyB7c3RyaW5nfSBCYXNlNjQgc3RyaW5nXG4gKi9cbmNvbnN0IGZyb21VaW50OEFycmF5ID0gKHU4YSwgdXJsc2FmZSA9IGZhbHNlKSA9PiB1cmxzYWZlID8gX21rVXJpU2FmZShfZnJvbVVpbnQ4QXJyYXkodThhKSkgOiBfZnJvbVVpbnQ4QXJyYXkodThhKTtcbi8vIFRoaXMgdHJpY2sgaXMgZm91bmQgYnJva2VuIGh0dHBzOi8vZ2l0aHViLmNvbS9kYW5rb2dhaS9qcy1iYXNlNjQvaXNzdWVzLzEzMFxuLy8gY29uc3QgdXRvYiA9IChzcmM6IHN0cmluZykgPT4gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KHNyYykpO1xuLy8gcmV2ZXJ0aW5nIGdvb2Qgb2xkIGZhdGlvbmVkIHJlZ2V4cFxuY29uc3QgY2JfdXRvYiA9IChjKSA9PiB7XG4gICAgaWYgKGMubGVuZ3RoIDwgMikge1xuICAgICAgICB2YXIgY2MgPSBjLmNoYXJDb2RlQXQoMCk7XG4gICAgICAgIHJldHVybiBjYyA8IDB4ODAgPyBjXG4gICAgICAgICAgICA6IGNjIDwgMHg4MDAgPyAoX2Zyb21DQygweGMwIHwgKGNjID4+PiA2KSlcbiAgICAgICAgICAgICAgICArIF9mcm9tQ0MoMHg4MCB8IChjYyAmIDB4M2YpKSlcbiAgICAgICAgICAgICAgICA6IChfZnJvbUNDKDB4ZTAgfCAoKGNjID4+PiAxMikgJiAweDBmKSlcbiAgICAgICAgICAgICAgICAgICAgKyBfZnJvbUNDKDB4ODAgfCAoKGNjID4+PiA2KSAmIDB4M2YpKVxuICAgICAgICAgICAgICAgICAgICArIF9mcm9tQ0MoMHg4MCB8IChjYyAmIDB4M2YpKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB2YXIgY2MgPSAweDEwMDAwXG4gICAgICAgICAgICArIChjLmNoYXJDb2RlQXQoMCkgLSAweEQ4MDApICogMHg0MDBcbiAgICAgICAgICAgICsgKGMuY2hhckNvZGVBdCgxKSAtIDB4REMwMCk7XG4gICAgICAgIHJldHVybiAoX2Zyb21DQygweGYwIHwgKChjYyA+Pj4gMTgpICYgMHgwNykpXG4gICAgICAgICAgICArIF9mcm9tQ0MoMHg4MCB8ICgoY2MgPj4+IDEyKSAmIDB4M2YpKVxuICAgICAgICAgICAgKyBfZnJvbUNDKDB4ODAgfCAoKGNjID4+PiA2KSAmIDB4M2YpKVxuICAgICAgICAgICAgKyBfZnJvbUNDKDB4ODAgfCAoY2MgJiAweDNmKSkpO1xuICAgIH1cbn07XG5jb25zdCByZV91dG9iID0gL1tcXHVEODAwLVxcdURCRkZdW1xcdURDMDAtXFx1REZGRkZdfFteXFx4MDAtXFx4N0ZdL2c7XG4vKipcbiAqIEBkZXByZWNhdGVkIHNob3VsZCBoYXZlIGJlZW4gaW50ZXJuYWwgdXNlIG9ubHkuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3JjIFVURi04IHN0cmluZ1xuICogQHJldHVybnMge3N0cmluZ30gVVRGLTE2IHN0cmluZ1xuICovXG5jb25zdCB1dG9iID0gKHUpID0+IHUucmVwbGFjZShyZV91dG9iLCBjYl91dG9iKTtcbi8vXG5jb25zdCBfZW5jb2RlID0gX2hhc0J1ZmZlclxuICAgID8gKHMpID0+IEJ1ZmZlci5mcm9tKHMsICd1dGY4JykudG9TdHJpbmcoJ2Jhc2U2NCcpXG4gICAgOiBfVEVcbiAgICAgICAgPyAocykgPT4gX2Zyb21VaW50OEFycmF5KF9URS5lbmNvZGUocykpXG4gICAgICAgIDogKHMpID0+IF9idG9hKHV0b2IocykpO1xuLyoqXG4gKiBjb252ZXJ0cyBhIFVURi04LWVuY29kZWQgc3RyaW5nIHRvIGEgQmFzZTY0IHN0cmluZy5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3VybHNhZmVdIGlmIGB0cnVlYCBtYWtlIHRoZSByZXN1bHQgVVJMLXNhZmVcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEJhc2U2NCBzdHJpbmdcbiAqL1xuY29uc3QgZW5jb2RlID0gKHNyYywgdXJsc2FmZSA9IGZhbHNlKSA9PiB1cmxzYWZlXG4gICAgPyBfbWtVcmlTYWZlKF9lbmNvZGUoc3JjKSlcbiAgICA6IF9lbmNvZGUoc3JjKTtcbi8qKlxuICogY29udmVydHMgYSBVVEYtOC1lbmNvZGVkIHN0cmluZyB0byBVUkwtc2FmZSBCYXNlNjQgUkZDNDY0OCBcdTAwQTc1LlxuICogQHJldHVybnMge3N0cmluZ30gQmFzZTY0IHN0cmluZ1xuICovXG5jb25zdCBlbmNvZGVVUkkgPSAoc3JjKSA9PiBlbmNvZGUoc3JjLCB0cnVlKTtcbi8vIFRoaXMgdHJpY2sgaXMgZm91bmQgYnJva2VuIGh0dHBzOi8vZ2l0aHViLmNvbS9kYW5rb2dhaS9qcy1iYXNlNjQvaXNzdWVzLzEzMFxuLy8gY29uc3QgYnRvdSA9IChzcmM6IHN0cmluZykgPT4gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZShzcmMpKTtcbi8vIHJldmVydGluZyBnb29kIG9sZCBmYXRpb25lZCByZWdleHBcbmNvbnN0IHJlX2J0b3UgPSAvW1xceEMwLVxceERGXVtcXHg4MC1cXHhCRl18W1xceEUwLVxceEVGXVtcXHg4MC1cXHhCRl17Mn18W1xceEYwLVxceEY3XVtcXHg4MC1cXHhCRl17M30vZztcbmNvbnN0IGNiX2J0b3UgPSAoY2NjYykgPT4ge1xuICAgIHN3aXRjaCAoY2NjYy5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgdmFyIGNwID0gKCgweDA3ICYgY2NjYy5jaGFyQ29kZUF0KDApKSA8PCAxOClcbiAgICAgICAgICAgICAgICB8ICgoMHgzZiAmIGNjY2MuY2hhckNvZGVBdCgxKSkgPDwgMTIpXG4gICAgICAgICAgICAgICAgfCAoKDB4M2YgJiBjY2NjLmNoYXJDb2RlQXQoMikpIDw8IDYpXG4gICAgICAgICAgICAgICAgfCAoMHgzZiAmIGNjY2MuY2hhckNvZGVBdCgzKSksIG9mZnNldCA9IGNwIC0gMHgxMDAwMDtcbiAgICAgICAgICAgIHJldHVybiAoX2Zyb21DQygob2Zmc2V0ID4+PiAxMCkgKyAweEQ4MDApXG4gICAgICAgICAgICAgICAgKyBfZnJvbUNDKChvZmZzZXQgJiAweDNGRikgKyAweERDMDApKTtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgcmV0dXJuIF9mcm9tQ0MoKCgweDBmICYgY2NjYy5jaGFyQ29kZUF0KDApKSA8PCAxMilcbiAgICAgICAgICAgICAgICB8ICgoMHgzZiAmIGNjY2MuY2hhckNvZGVBdCgxKSkgPDwgNilcbiAgICAgICAgICAgICAgICB8ICgweDNmICYgY2NjYy5jaGFyQ29kZUF0KDIpKSk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gX2Zyb21DQygoKDB4MWYgJiBjY2NjLmNoYXJDb2RlQXQoMCkpIDw8IDYpXG4gICAgICAgICAgICAgICAgfCAoMHgzZiAmIGNjY2MuY2hhckNvZGVBdCgxKSkpO1xuICAgIH1cbn07XG4vKipcbiAqIEBkZXByZWNhdGVkIHNob3VsZCBoYXZlIGJlZW4gaW50ZXJuYWwgdXNlIG9ubHkuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3JjIFVURi0xNiBzdHJpbmdcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFVURi04IHN0cmluZ1xuICovXG5jb25zdCBidG91ID0gKGIpID0+IGIucmVwbGFjZShyZV9idG91LCBjYl9idG91KTtcbi8qKlxuICogcG9seWZpbGwgdmVyc2lvbiBvZiBgYXRvYmBcbiAqL1xuY29uc3QgYXRvYlBvbHlmaWxsID0gKGFzYykgPT4ge1xuICAgIC8vIGNvbnNvbGUubG9nKCdwb2x5ZmlsbGVkJyk7XG4gICAgYXNjID0gYXNjLnJlcGxhY2UoL1xccysvZywgJycpO1xuICAgIGlmICghYjY0cmUudGVzdChhc2MpKVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdtYWxmb3JtZWQgYmFzZTY0LicpO1xuICAgIGFzYyArPSAnPT0nLnNsaWNlKDIgLSAoYXNjLmxlbmd0aCAmIDMpKTtcbiAgICBsZXQgdTI0LCBiaW4gPSAnJywgcjEsIHIyO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXNjLmxlbmd0aDspIHtcbiAgICAgICAgdTI0ID0gYjY0dGFiW2FzYy5jaGFyQXQoaSsrKV0gPDwgMThcbiAgICAgICAgICAgIHwgYjY0dGFiW2FzYy5jaGFyQXQoaSsrKV0gPDwgMTJcbiAgICAgICAgICAgIHwgKHIxID0gYjY0dGFiW2FzYy5jaGFyQXQoaSsrKV0pIDw8IDZcbiAgICAgICAgICAgIHwgKHIyID0gYjY0dGFiW2FzYy5jaGFyQXQoaSsrKV0pO1xuICAgICAgICBiaW4gKz0gcjEgPT09IDY0ID8gX2Zyb21DQyh1MjQgPj4gMTYgJiAyNTUpXG4gICAgICAgICAgICA6IHIyID09PSA2NCA/IF9mcm9tQ0ModTI0ID4+IDE2ICYgMjU1LCB1MjQgPj4gOCAmIDI1NSlcbiAgICAgICAgICAgICAgICA6IF9mcm9tQ0ModTI0ID4+IDE2ICYgMjU1LCB1MjQgPj4gOCAmIDI1NSwgdTI0ICYgMjU1KTtcbiAgICB9XG4gICAgcmV0dXJuIGJpbjtcbn07XG4vKipcbiAqIGRvZXMgd2hhdCBgd2luZG93LmF0b2JgIG9mIHdlYiBicm93c2VycyBkby5cbiAqIEBwYXJhbSB7U3RyaW5nfSBhc2MgQmFzZTY0LWVuY29kZWQgc3RyaW5nXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBiaW5hcnkgc3RyaW5nXG4gKi9cbmNvbnN0IF9hdG9iID0gX2hhc2F0b2IgPyAoYXNjKSA9PiBhdG9iKF90aWR5QjY0KGFzYykpXG4gICAgOiBfaGFzQnVmZmVyID8gKGFzYykgPT4gQnVmZmVyLmZyb20oYXNjLCAnYmFzZTY0JykudG9TdHJpbmcoJ2JpbmFyeScpXG4gICAgICAgIDogYXRvYlBvbHlmaWxsO1xuLy9cbmNvbnN0IF90b1VpbnQ4QXJyYXkgPSBfaGFzQnVmZmVyXG4gICAgPyAoYSkgPT4gX1U4QWZyb20oQnVmZmVyLmZyb20oYSwgJ2Jhc2U2NCcpKVxuICAgIDogKGEpID0+IF9VOEFmcm9tKF9hdG9iKGEpLCBjID0+IGMuY2hhckNvZGVBdCgwKSk7XG4vKipcbiAqIGNvbnZlcnRzIGEgQmFzZTY0IHN0cmluZyB0byBhIFVpbnQ4QXJyYXkuXG4gKi9cbmNvbnN0IHRvVWludDhBcnJheSA9IChhKSA9PiBfdG9VaW50OEFycmF5KF91blVSSShhKSk7XG4vL1xuY29uc3QgX2RlY29kZSA9IF9oYXNCdWZmZXJcbiAgICA/IChhKSA9PiBCdWZmZXIuZnJvbShhLCAnYmFzZTY0JykudG9TdHJpbmcoJ3V0ZjgnKVxuICAgIDogX1REXG4gICAgICAgID8gKGEpID0+IF9URC5kZWNvZGUoX3RvVWludDhBcnJheShhKSlcbiAgICAgICAgOiAoYSkgPT4gYnRvdShfYXRvYihhKSk7XG5jb25zdCBfdW5VUkkgPSAoYSkgPT4gX3RpZHlCNjQoYS5yZXBsYWNlKC9bLV9dL2csIChtMCkgPT4gbTAgPT0gJy0nID8gJysnIDogJy8nKSk7XG4vKipcbiAqIGNvbnZlcnRzIGEgQmFzZTY0IHN0cmluZyB0byBhIFVURi04IHN0cmluZy5cbiAqIEBwYXJhbSB7U3RyaW5nfSBzcmMgQmFzZTY0IHN0cmluZy4gIEJvdGggbm9ybWFsIGFuZCBVUkwtc2FmZSBhcmUgc3VwcG9ydGVkXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBVVEYtOCBzdHJpbmdcbiAqL1xuY29uc3QgZGVjb2RlID0gKHNyYykgPT4gX2RlY29kZShfdW5VUkkoc3JjKSk7XG4vKipcbiAqIGNoZWNrIGlmIGEgdmFsdWUgaXMgYSB2YWxpZCBCYXNlNjQgc3RyaW5nXG4gKiBAcGFyYW0ge1N0cmluZ30gc3JjIGEgdmFsdWUgdG8gY2hlY2tcbiAgKi9cbmNvbnN0IGlzVmFsaWQgPSAoc3JjKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBzcmMgIT09ICdzdHJpbmcnKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgcyA9IHNyYy5yZXBsYWNlKC9cXHMrL2csICcnKS5yZXBsYWNlKC89ezAsMn0kLywgJycpO1xuICAgIHJldHVybiAhL1teXFxzMC05YS16QS1aXFwrL10vLnRlc3QocykgfHwgIS9bXlxcczAtOWEtekEtWlxcLV9dLy50ZXN0KHMpO1xufTtcbi8vXG5jb25zdCBfbm9FbnVtID0gKHYpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZTogdiwgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWVcbiAgICB9O1xufTtcbi8qKlxuICogZXh0ZW5kIFN0cmluZy5wcm90b3R5cGUgd2l0aCByZWxldmFudCBtZXRob2RzXG4gKi9cbmNvbnN0IGV4dGVuZFN0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBfYWRkID0gKG5hbWUsIGJvZHkpID0+IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdHJpbmcucHJvdG90eXBlLCBuYW1lLCBfbm9FbnVtKGJvZHkpKTtcbiAgICBfYWRkKCdmcm9tQmFzZTY0JywgZnVuY3Rpb24gKCkgeyByZXR1cm4gZGVjb2RlKHRoaXMpOyB9KTtcbiAgICBfYWRkKCd0b0Jhc2U2NCcsIGZ1bmN0aW9uICh1cmxzYWZlKSB7IHJldHVybiBlbmNvZGUodGhpcywgdXJsc2FmZSk7IH0pO1xuICAgIF9hZGQoJ3RvQmFzZTY0VVJJJywgZnVuY3Rpb24gKCkgeyByZXR1cm4gZW5jb2RlKHRoaXMsIHRydWUpOyB9KTtcbiAgICBfYWRkKCd0b0Jhc2U2NFVSTCcsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGVuY29kZSh0aGlzLCB0cnVlKTsgfSk7XG4gICAgX2FkZCgndG9VaW50OEFycmF5JywgZnVuY3Rpb24gKCkgeyByZXR1cm4gdG9VaW50OEFycmF5KHRoaXMpOyB9KTtcbn07XG4vKipcbiAqIGV4dGVuZCBVaW50OEFycmF5LnByb3RvdHlwZSB3aXRoIHJlbGV2YW50IG1ldGhvZHNcbiAqL1xuY29uc3QgZXh0ZW5kVWludDhBcnJheSA9IGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBfYWRkID0gKG5hbWUsIGJvZHkpID0+IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShVaW50OEFycmF5LnByb3RvdHlwZSwgbmFtZSwgX25vRW51bShib2R5KSk7XG4gICAgX2FkZCgndG9CYXNlNjQnLCBmdW5jdGlvbiAodXJsc2FmZSkgeyByZXR1cm4gZnJvbVVpbnQ4QXJyYXkodGhpcywgdXJsc2FmZSk7IH0pO1xuICAgIF9hZGQoJ3RvQmFzZTY0VVJJJywgZnVuY3Rpb24gKCkgeyByZXR1cm4gZnJvbVVpbnQ4QXJyYXkodGhpcywgdHJ1ZSk7IH0pO1xuICAgIF9hZGQoJ3RvQmFzZTY0VVJMJywgZnVuY3Rpb24gKCkgeyByZXR1cm4gZnJvbVVpbnQ4QXJyYXkodGhpcywgdHJ1ZSk7IH0pO1xufTtcbi8qKlxuICogZXh0ZW5kIEJ1aWx0aW4gcHJvdG90eXBlcyB3aXRoIHJlbGV2YW50IG1ldGhvZHNcbiAqL1xuY29uc3QgZXh0ZW5kQnVpbHRpbnMgPSAoKSA9PiB7XG4gICAgZXh0ZW5kU3RyaW5nKCk7XG4gICAgZXh0ZW5kVWludDhBcnJheSgpO1xufTtcbmNvbnN0IGdCYXNlNjQgPSB7XG4gICAgdmVyc2lvbjogdmVyc2lvbixcbiAgICBWRVJTSU9OOiBWRVJTSU9OLFxuICAgIGF0b2I6IF9hdG9iLFxuICAgIGF0b2JQb2x5ZmlsbDogYXRvYlBvbHlmaWxsLFxuICAgIGJ0b2E6IF9idG9hLFxuICAgIGJ0b2FQb2x5ZmlsbDogYnRvYVBvbHlmaWxsLFxuICAgIGZyb21CYXNlNjQ6IGRlY29kZSxcbiAgICB0b0Jhc2U2NDogZW5jb2RlLFxuICAgIGVuY29kZTogZW5jb2RlLFxuICAgIGVuY29kZVVSSTogZW5jb2RlVVJJLFxuICAgIGVuY29kZVVSTDogZW5jb2RlVVJJLFxuICAgIHV0b2I6IHV0b2IsXG4gICAgYnRvdTogYnRvdSxcbiAgICBkZWNvZGU6IGRlY29kZSxcbiAgICBpc1ZhbGlkOiBpc1ZhbGlkLFxuICAgIGZyb21VaW50OEFycmF5OiBmcm9tVWludDhBcnJheSxcbiAgICB0b1VpbnQ4QXJyYXk6IHRvVWludDhBcnJheSxcbiAgICBleHRlbmRTdHJpbmc6IGV4dGVuZFN0cmluZyxcbiAgICBleHRlbmRVaW50OEFycmF5OiBleHRlbmRVaW50OEFycmF5LFxuICAgIGV4dGVuZEJ1aWx0aW5zOiBleHRlbmRCdWlsdGlucyxcbn07XG4vLyBtYWtlY2pzOkNVVCAvL1xuZXhwb3J0IHsgdmVyc2lvbiB9O1xuZXhwb3J0IHsgVkVSU0lPTiB9O1xuZXhwb3J0IHsgX2F0b2IgYXMgYXRvYiB9O1xuZXhwb3J0IHsgYXRvYlBvbHlmaWxsIH07XG5leHBvcnQgeyBfYnRvYSBhcyBidG9hIH07XG5leHBvcnQgeyBidG9hUG9seWZpbGwgfTtcbmV4cG9ydCB7IGRlY29kZSBhcyBmcm9tQmFzZTY0IH07XG5leHBvcnQgeyBlbmNvZGUgYXMgdG9CYXNlNjQgfTtcbmV4cG9ydCB7IHV0b2IgfTtcbmV4cG9ydCB7IGVuY29kZSB9O1xuZXhwb3J0IHsgZW5jb2RlVVJJIH07XG5leHBvcnQgeyBlbmNvZGVVUkkgYXMgZW5jb2RlVVJMIH07XG5leHBvcnQgeyBidG91IH07XG5leHBvcnQgeyBkZWNvZGUgfTtcbmV4cG9ydCB7IGlzVmFsaWQgfTtcbmV4cG9ydCB7IGZyb21VaW50OEFycmF5IH07XG5leHBvcnQgeyB0b1VpbnQ4QXJyYXkgfTtcbmV4cG9ydCB7IGV4dGVuZFN0cmluZyB9O1xuZXhwb3J0IHsgZXh0ZW5kVWludDhBcnJheSB9O1xuZXhwb3J0IHsgZXh0ZW5kQnVpbHRpbnMgfTtcbi8vIGFuZCBmaW5hbGx5LFxuZXhwb3J0IHsgZ0Jhc2U2NCBhcyBCYXNlNjQgfTtcbiIsICJpbXBvcnQgeyBkZWNvZGUgfSBmcm9tIFwianMtYmFzZTY0XCI7XG5pbXBvcnQgeyByZXF1ZXN0VXJsIH0gZnJvbSBcIm9ic2lkaWFuXCI7XG5cbmV4cG9ydCBjb25zdCBnZXRJY29uUGFja0J1bmRsZVVybCA9IChcbiAgcGF0aDogc3RyaW5nLFxuICBicmFuY2ggPSBcIm1hc3RlclwiLFxuICBhbHQgPSBmYWxzZSxcbikgPT5cbiAgYGh0dHBzOi8vJHtcbiAgICBhbHQgPyBcInJhdy5zdGF0aWNkbi5uZXRcIiA6IFwicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbVwiXG4gIH0vYWlkZW5seC9vYnNpZGlhbi1pY29uLXNob3J0Y29kZXMvJHticmFuY2h9LyR7cGF0aH1gO1xuXG5leHBvcnQgaW50ZXJmYWNlIEljb25QYWNrTWFuaWZlc3RSYXcge1xuICBwYXRoOiBzdHJpbmc7XG4gIGNvdW50OiBudW1iZXI7XG4gIHNlcmllczogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBsaWNlbnNlOiBzdHJpbmc7XG4gIGJ1bmRsZU5hbWU6IHN0cmluZztcbiAgcGFja0lkOiBzdHJpbmc7XG4gIGhvbWVwYWdlOiBzdHJpbmc7XG4gIHN0eWxlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBHaXRIdWJFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IocHVibGljIHJlc3BvbnNlOiB7IG1lc3NhZ2U6IHN0cmluZyB9KSB7XG4gICAgc3VwZXIoXCJHaXRIdWI6IFwiICsgcmVzcG9uc2UubWVzc2FnZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGdldE1hbmlmZXN0VmlhQVBJID0gYXN5bmMgKGJyYW5jaCA9IFwibWFzdGVyXCIpID0+IHtcbiAgY29uc3QgdXJsID0gYGh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYWlkZW5seC9vYnNpZGlhbi1pY29uLXNob3J0Y29kZXMvZ2l0L3RyZWVzLyR7YnJhbmNofT9yZWN1cnNpdmU9MSYke0RhdGUubm93KCl9YDtcbiAgY29uc3QgcmVzcG9uc2UgPSAoYXdhaXQgcmVxdWVzdFVybCh7IHVybCB9KSkuanNvbjtcbiAgaWYgKEFycmF5LmlzQXJyYXkocmVzcG9uc2UudHJlZSkpIHtcbiAgICBjb25zdCBtYW5pZmVzdFVybCA9IHJlc3BvbnNlLnRyZWUuZmluZChcbiAgICAgIChpdGVtOiBhbnkpID0+IGl0ZW0ucGF0aCA9PT0gXCJhc3NldHMvbWFuaWZlc3QuanNvblwiLFxuICAgICk/LnVybDtcbiAgICBpZiAoIW1hbmlmZXN0VXJsKSB7XG4gICAgICBjb25zb2xlLmVycm9yKHJlc3BvbnNlKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIG1hbmlmZXN0Lmpzb24gZm9yIGljb24gcGFjayBmb3VuZFwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGF3YWl0IGdldEpTT05mcm9tQmxvYlVybChtYW5pZmVzdFVybCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBHaXRIdWJFcnJvcihyZXNwb25zZSk7XG4gIH1cbn07XG5cbmNvbnN0IGdldEpTT05mcm9tQmxvYlVybCA9IGFzeW5jIChcbiAgbWFuaWZlc3RVcmw6IHN0cmluZyxcbik6IFByb21pc2U8SWNvblBhY2tNYW5pZmVzdFJhd1tdPiA9PiB7XG4gIGNvbnN0IHJlc3BvbnNlID0gKGF3YWl0IHJlcXVlc3RVcmwoeyB1cmw6IG1hbmlmZXN0VXJsIH0pKS5qc29uO1xuICBpZiAocmVzcG9uc2UuZW5jb2RpbmcgJiYgcmVzcG9uc2UuY29udGVudCkge1xuICAgIGlmIChyZXNwb25zZS5lbmNvZGluZyA9PT0gXCJiYXNlNjRcIikge1xuICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZGVjb2RlKHJlc3BvbnNlLmNvbnRlbnQpKSBhcyBJY29uUGFja01hbmlmZXN0UmF3W107XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IocmVzcG9uc2UpO1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVuc3VwcG9ydGVkIGVuY29kaW5nXCIpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgR2l0SHViRXJyb3IocmVzcG9uc2UpO1xuICB9XG59O1xuIiwgImV4cG9ydCB7IGRlZmF1bHQgYXMgYmxhbmsgfSBmcm9tICcuL2JsYW5rLnN2Zyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGJhbGxzIH0gZnJvbSAnLi9sb2FkaW5nLWJhbGxzLnN2Zyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGJhcnMgfSBmcm9tICcuL2xvYWRpbmctYmFycy5zdmcnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBidWJibGVzIH0gZnJvbSAnLi9sb2FkaW5nLWJ1YmJsZXMuc3ZnJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY3ViZXMgfSBmcm9tICcuL2xvYWRpbmctY3ViZXMuc3ZnJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY3lsb24gfSBmcm9tICcuL2xvYWRpbmctY3lsb24uc3ZnJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc3BpbiB9IGZyb20gJy4vbG9hZGluZy1zcGluLnN2Zyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHNwaW5uaW5nQnViYmxlcyB9IGZyb20gJy4vbG9hZGluZy1zcGlubmluZy1idWJibGVzLnN2Zyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHNwb2tlcyB9IGZyb20gJy4vbG9hZGluZy1zcG9rZXMuc3ZnJztcbiIsICJpbXBvcnQgdHlwZSB7IEhUTUxQcm9wcyB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCAqIGFzIHN2Z1NvdXJjZXMgZnJvbSBcInJlYWN0LWxvYWRpbmcvbGliL3N2Z1wiO1xuXG50eXBlIExvYWRpbmdUeXBlID1cbiAgfCBcImJsYW5rXCJcbiAgfCBcImJhbGxzXCJcbiAgfCBcImJhcnNcIlxuICB8IFwiYnViYmxlc1wiXG4gIHwgXCJjdWJlc1wiXG4gIHwgXCJjeWxvblwiXG4gIHwgXCJzcGluXCJcbiAgfCBcInNwaW5uaW5nQnViYmxlc1wiXG4gIHwgXCJzcG9rZXNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBMb2FkaW5nUHJvcHMgZXh0ZW5kcyBIVE1MUHJvcHM8SFRNTERpdkVsZW1lbnQ+IHtcbiAgY29sb3I/OiBzdHJpbmc7XG4gIC8qKiBpbiBtaWxpc2Vjb25kICovXG4gIGRlbGF5PzogbnVtYmVyO1xuICB0eXBlPzogTG9hZGluZ1R5cGU7XG4gIGhlaWdodD86IHN0cmluZyB8IG51bWJlcjtcbiAgd2lkdGg/OiBzdHJpbmcgfCBudW1iZXI7XG59XG5cbmNvbnN0IExvYWRpbmcgPSAoe1xuICBjb2xvciA9IFwidmFyKC0taW50ZXJhY3RpdmUtYWNjZW50KVwiLFxuICBkZWxheSA9IDAsXG4gIHR5cGUgPSBcImJhbGxzXCIsXG4gIGhlaWdodCA9IDY0LFxuICB3aWR0aCA9IDY0LFxuICAuLi5yZXN0UHJvcHNcbn06IExvYWRpbmdQcm9wcykgPT4ge1xuICBjb25zdCBbZGVsYXllZCwgc2V0RGVsYXllZF0gPSB1c2VTdGF0ZShkZWxheSA+IDApO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGxldCB0aW1lb3V0ID0gLTE7XG4gICAgaWYgKGRlbGF5ZWQpIHtcbiAgICAgIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiBzZXREZWxheWVkKGZhbHNlKSwgZGVsYXkpO1xuICAgIH1cbiAgICByZXR1cm4gKCkgPT4gY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICB9LCBbXSk7XG4gIGNvbnN0IHNlbGVjdGVkVHlwZSA9IGRlbGF5ZWQgPyBcImJsYW5rXCIgOiB0eXBlO1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIHN0eWxlPXt7XG4gICAgICAgIGZpbGw6IGNvbG9yLFxuICAgICAgICBoZWlnaHQsXG4gICAgICAgIHdpZHRoLFxuICAgICAgfX1cbiAgICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7IF9faHRtbDogc3ZnU291cmNlc1tzZWxlY3RlZFR5cGVdIH19XG4gICAgICB7Li4ucmVzdFByb3BzfVxuICAgIC8+XG4gICk7XG59O1xuZXhwb3J0IGRlZmF1bHQgTG9hZGluZztcbiIsICJjb25zdCBlcnJvcnMgPSB7XG5cdDA6IFwiSWxsZWdhbCBzdGF0ZVwiLFxuXHQxOiBcIkltbWVyIGRyYWZ0cyBjYW5ub3QgaGF2ZSBjb21wdXRlZCBwcm9wZXJ0aWVzXCIsXG5cdDI6IFwiVGhpcyBvYmplY3QgaGFzIGJlZW4gZnJvemVuIGFuZCBzaG91bGQgbm90IGJlIG11dGF0ZWRcIixcblx0MyhkYXRhOiBhbnkpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0XCJDYW5ub3QgdXNlIGEgcHJveHkgdGhhdCBoYXMgYmVlbiByZXZva2VkLiBEaWQgeW91IHBhc3MgYW4gb2JqZWN0IGZyb20gaW5zaWRlIGFuIGltbWVyIGZ1bmN0aW9uIHRvIGFuIGFzeW5jIHByb2Nlc3M/IFwiICtcblx0XHRcdGRhdGFcblx0XHQpXG5cdH0sXG5cdDQ6IFwiQW4gaW1tZXIgcHJvZHVjZXIgcmV0dXJuZWQgYSBuZXcgdmFsdWUgKmFuZCogbW9kaWZpZWQgaXRzIGRyYWZ0LiBFaXRoZXIgcmV0dXJuIGEgbmV3IHZhbHVlICpvciogbW9kaWZ5IHRoZSBkcmFmdC5cIixcblx0NTogXCJJbW1lciBmb3JiaWRzIGNpcmN1bGFyIHJlZmVyZW5jZXNcIixcblx0NjogXCJUaGUgZmlyc3Qgb3Igc2Vjb25kIGFyZ3VtZW50IHRvIGBwcm9kdWNlYCBtdXN0IGJlIGEgZnVuY3Rpb25cIixcblx0NzogXCJUaGUgdGhpcmQgYXJndW1lbnQgdG8gYHByb2R1Y2VgIG11c3QgYmUgYSBmdW5jdGlvbiBvciB1bmRlZmluZWRcIixcblx0ODogXCJGaXJzdCBhcmd1bWVudCB0byBgY3JlYXRlRHJhZnRgIG11c3QgYmUgYSBwbGFpbiBvYmplY3QsIGFuIGFycmF5LCBvciBhbiBpbW1lcmFibGUgb2JqZWN0XCIsXG5cdDk6IFwiRmlyc3QgYXJndW1lbnQgdG8gYGZpbmlzaERyYWZ0YCBtdXN0IGJlIGEgZHJhZnQgcmV0dXJuZWQgYnkgYGNyZWF0ZURyYWZ0YFwiLFxuXHQxMDogXCJUaGUgZ2l2ZW4gZHJhZnQgaXMgYWxyZWFkeSBmaW5hbGl6ZWRcIixcblx0MTE6IFwiT2JqZWN0LmRlZmluZVByb3BlcnR5KCkgY2Fubm90IGJlIHVzZWQgb24gYW4gSW1tZXIgZHJhZnRcIixcblx0MTI6IFwiT2JqZWN0LnNldFByb3RvdHlwZU9mKCkgY2Fubm90IGJlIHVzZWQgb24gYW4gSW1tZXIgZHJhZnRcIixcblx0MTM6IFwiSW1tZXIgb25seSBzdXBwb3J0cyBkZWxldGluZyBhcnJheSBpbmRpY2VzXCIsXG5cdDE0OiBcIkltbWVyIG9ubHkgc3VwcG9ydHMgc2V0dGluZyBhcnJheSBpbmRpY2VzIGFuZCB0aGUgJ2xlbmd0aCcgcHJvcGVydHlcIixcblx0MTUocGF0aDogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIFwiQ2Fubm90IGFwcGx5IHBhdGNoLCBwYXRoIGRvZXNuJ3QgcmVzb2x2ZTogXCIgKyBwYXRoXG5cdH0sXG5cdDE2OiAnU2V0cyBjYW5ub3QgaGF2ZSBcInJlcGxhY2VcIiBwYXRjaGVzLicsXG5cdDE3KG9wOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gXCJVbnN1cHBvcnRlZCBwYXRjaCBvcGVyYXRpb246IFwiICsgb3Bcblx0fSxcblx0MTgocGx1Z2luOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gYFRoZSBwbHVnaW4gZm9yICcke3BsdWdpbn0nIGhhcyBub3QgYmVlbiBsb2FkZWQgaW50byBJbW1lci4gVG8gZW5hYmxlIHRoZSBwbHVnaW4sIGltcG9ydCBhbmQgY2FsbCBcXGBlbmFibGUke3BsdWdpbn0oKVxcYCB3aGVuIGluaXRpYWxpemluZyB5b3VyIGFwcGxpY2F0aW9uLmBcblx0fSxcblx0MjA6IFwiQ2Fubm90IHVzZSBwcm94aWVzIGlmIFByb3h5LCBQcm94eS5yZXZvY2FibGUgb3IgUmVmbGVjdCBhcmUgbm90IGF2YWlsYWJsZVwiLFxuXHQyMSh0aGluZzogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIGBwcm9kdWNlIGNhbiBvbmx5IGJlIGNhbGxlZCBvbiB0aGluZ3MgdGhhdCBhcmUgZHJhZnRhYmxlOiBwbGFpbiBvYmplY3RzLCBhcnJheXMsIE1hcCwgU2V0IG9yIGNsYXNzZXMgdGhhdCBhcmUgbWFya2VkIHdpdGggJ1tpbW1lcmFibGVdOiB0cnVlJy4gR290ICcke3RoaW5nfSdgXG5cdH0sXG5cdDIyKHRoaW5nOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gYCdjdXJyZW50JyBleHBlY3RzIGEgZHJhZnQsIGdvdDogJHt0aGluZ31gXG5cdH0sXG5cdDIzKHRoaW5nOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gYCdvcmlnaW5hbCcgZXhwZWN0cyBhIGRyYWZ0LCBnb3Q6ICR7dGhpbmd9YFxuXHR9LFxuXHQyNDogXCJQYXRjaGluZyByZXNlcnZlZCBhdHRyaWJ1dGVzIGxpa2UgX19wcm90b19fLCBwcm90b3R5cGUgYW5kIGNvbnN0cnVjdG9yIGlzIG5vdCBhbGxvd2VkXCJcbn0gYXMgY29uc3RcblxuZXhwb3J0IGZ1bmN0aW9uIGRpZShlcnJvcjoga2V5b2YgdHlwZW9mIGVycm9ycywgLi4uYXJnczogYW55W10pOiBuZXZlciB7XG5cdGlmIChfX0RFVl9fKSB7XG5cdFx0Y29uc3QgZSA9IGVycm9yc1tlcnJvcl1cblx0XHRjb25zdCBtc2cgPSAhZVxuXHRcdFx0PyBcInVua25vd24gZXJyb3IgbnI6IFwiICsgZXJyb3Jcblx0XHRcdDogdHlwZW9mIGUgPT09IFwiZnVuY3Rpb25cIlxuXHRcdFx0PyBlLmFwcGx5KG51bGwsIGFyZ3MgYXMgYW55KVxuXHRcdFx0OiBlXG5cdFx0dGhyb3cgbmV3IEVycm9yKGBbSW1tZXJdICR7bXNnfWApXG5cdH1cblx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdGBbSW1tZXJdIG1pbmlmaWVkIGVycm9yIG5yOiAke2Vycm9yfSR7XG5cdFx0XHRhcmdzLmxlbmd0aCA/IFwiIFwiICsgYXJncy5tYXAocyA9PiBgJyR7c30nYCkuam9pbihcIixcIikgOiBcIlwiXG5cdFx0fS4gRmluZCB0aGUgZnVsbCBlcnJvciBhdDogaHR0cHM6Ly9iaXQubHkvM2NYRUtXZmBcblx0KVxufVxuIiwgImltcG9ydCB7XG5cdERSQUZUX1NUQVRFLFxuXHREUkFGVEFCTEUsXG5cdGhhc1NldCxcblx0T2JqZWN0aXNoLFxuXHREcmFmdGVkLFxuXHRBbnlPYmplY3QsXG5cdEFueU1hcCxcblx0QW55U2V0LFxuXHRJbW1lclN0YXRlLFxuXHRoYXNNYXAsXG5cdEFyY2h0eXBlLFxuXHRkaWVcbn0gZnJvbSBcIi4uL2ludGVybmFsXCJcblxuLyoqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgYW4gSW1tZXIgZHJhZnQgKi9cbi8qI19fUFVSRV9fKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0RyYWZ0KHZhbHVlOiBhbnkpOiBib29sZWFuIHtcblx0cmV0dXJuICEhdmFsdWUgJiYgISF2YWx1ZVtEUkFGVF9TVEFURV1cbn1cblxuLyoqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gdmFsdWUgY2FuIGJlIGRyYWZ0ZWQgYnkgSW1tZXIgKi9cbi8qI19fUFVSRV9fKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0RyYWZ0YWJsZSh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG5cdGlmICghdmFsdWUpIHJldHVybiBmYWxzZVxuXHRyZXR1cm4gKFxuXHRcdGlzUGxhaW5PYmplY3QodmFsdWUpIHx8XG5cdFx0QXJyYXkuaXNBcnJheSh2YWx1ZSkgfHxcblx0XHQhIXZhbHVlW0RSQUZUQUJMRV0gfHxcblx0XHQhIXZhbHVlLmNvbnN0cnVjdG9yW0RSQUZUQUJMRV0gfHxcblx0XHRpc01hcCh2YWx1ZSkgfHxcblx0XHRpc1NldCh2YWx1ZSlcblx0KVxufVxuXG5jb25zdCBvYmplY3RDdG9yU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvci50b1N0cmluZygpXG4vKiNfX1BVUkVfXyovXG5leHBvcnQgZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG5cdGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiKSByZXR1cm4gZmFsc2Vcblx0Y29uc3QgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpXG5cdGlmIChwcm90byA9PT0gbnVsbCkge1xuXHRcdHJldHVybiB0cnVlXG5cdH1cblx0Y29uc3QgQ3RvciA9XG5cdFx0T2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwocHJvdG8sIFwiY29uc3RydWN0b3JcIikgJiYgcHJvdG8uY29uc3RydWN0b3JcblxuXHRpZiAoQ3RvciA9PT0gT2JqZWN0KSByZXR1cm4gdHJ1ZVxuXG5cdHJldHVybiAoXG5cdFx0dHlwZW9mIEN0b3IgPT0gXCJmdW5jdGlvblwiICYmXG5cdFx0RnVuY3Rpb24udG9TdHJpbmcuY2FsbChDdG9yKSA9PT0gb2JqZWN0Q3RvclN0cmluZ1xuXHQpXG59XG5cbi8qKiBHZXQgdGhlIHVuZGVybHlpbmcgb2JqZWN0IHRoYXQgaXMgcmVwcmVzZW50ZWQgYnkgdGhlIGdpdmVuIGRyYWZ0ICovXG4vKiNfX1BVUkVfXyovXG5leHBvcnQgZnVuY3Rpb24gb3JpZ2luYWw8VD4odmFsdWU6IFQpOiBUIHwgdW5kZWZpbmVkXG5leHBvcnQgZnVuY3Rpb24gb3JpZ2luYWwodmFsdWU6IERyYWZ0ZWQ8YW55Pik6IGFueSB7XG5cdGlmICghaXNEcmFmdCh2YWx1ZSkpIGRpZSgyMywgdmFsdWUpXG5cdHJldHVybiB2YWx1ZVtEUkFGVF9TVEFURV0uYmFzZV9cbn1cblxuLyojX19QVVJFX18qL1xuZXhwb3J0IGNvbnN0IG93bktleXM6ICh0YXJnZXQ6IEFueU9iamVjdCkgPT4gUHJvcGVydHlLZXlbXSA9XG5cdHR5cGVvZiBSZWZsZWN0ICE9PSBcInVuZGVmaW5lZFwiICYmIFJlZmxlY3Qub3duS2V5c1xuXHRcdD8gUmVmbGVjdC5vd25LZXlzXG5cdFx0OiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAhPT0gXCJ1bmRlZmluZWRcIlxuXHRcdD8gb2JqID0+XG5cdFx0XHRcdE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaikuY29uY2F0KFxuXHRcdFx0XHRcdE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqKSBhcyBhbnlcblx0XHRcdFx0KVxuXHRcdDogLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNcblxuZXhwb3J0IGNvbnN0IGdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPVxuXHRPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyB8fFxuXHRmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHRhcmdldDogYW55KSB7XG5cdFx0Ly8gUG9seWZpbGwgbmVlZGVkIGZvciBIZXJtZXMgYW5kIElFLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2hlcm1lcy9pc3N1ZXMvMjc0XG5cdFx0Y29uc3QgcmVzOiBhbnkgPSB7fVxuXHRcdG93bktleXModGFyZ2V0KS5mb3JFYWNoKGtleSA9PiB7XG5cdFx0XHRyZXNba2V5XSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpXG5cdFx0fSlcblx0XHRyZXR1cm4gcmVzXG5cdH1cblxuZXhwb3J0IGZ1bmN0aW9uIGVhY2g8VCBleHRlbmRzIE9iamVjdGlzaD4oXG5cdG9iajogVCxcblx0aXRlcjogKGtleTogc3RyaW5nIHwgbnVtYmVyLCB2YWx1ZTogYW55LCBzb3VyY2U6IFQpID0+IHZvaWQsXG5cdGVudW1lcmFibGVPbmx5PzogYm9vbGVhblxuKTogdm9pZFxuZXhwb3J0IGZ1bmN0aW9uIGVhY2gob2JqOiBhbnksIGl0ZXI6IGFueSwgZW51bWVyYWJsZU9ubHkgPSBmYWxzZSkge1xuXHRpZiAoZ2V0QXJjaHR5cGUob2JqKSA9PT0gQXJjaHR5cGUuT2JqZWN0KSB7XG5cdFx0OyhlbnVtZXJhYmxlT25seSA/IE9iamVjdC5rZXlzIDogb3duS2V5cykob2JqKS5mb3JFYWNoKGtleSA9PiB7XG5cdFx0XHRpZiAoIWVudW1lcmFibGVPbmx5IHx8IHR5cGVvZiBrZXkgIT09IFwic3ltYm9sXCIpIGl0ZXIoa2V5LCBvYmpba2V5XSwgb2JqKVxuXHRcdH0pXG5cdH0gZWxzZSB7XG5cdFx0b2JqLmZvckVhY2goKGVudHJ5OiBhbnksIGluZGV4OiBhbnkpID0+IGl0ZXIoaW5kZXgsIGVudHJ5LCBvYmopKVxuXHR9XG59XG5cbi8qI19fUFVSRV9fKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBcmNodHlwZSh0aGluZzogYW55KTogQXJjaHR5cGUge1xuXHQvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXHRjb25zdCBzdGF0ZTogdW5kZWZpbmVkIHwgSW1tZXJTdGF0ZSA9IHRoaW5nW0RSQUZUX1NUQVRFXVxuXHRyZXR1cm4gc3RhdGVcblx0XHQ/IHN0YXRlLnR5cGVfID4gM1xuXHRcdFx0PyBzdGF0ZS50eXBlXyAtIDQgLy8gY2F1c2UgT2JqZWN0IGFuZCBBcnJheSBtYXAgYmFjayBmcm9tIDQgYW5kIDVcblx0XHRcdDogKHN0YXRlLnR5cGVfIGFzIGFueSkgLy8gb3RoZXJzIGFyZSB0aGUgc2FtZVxuXHRcdDogQXJyYXkuaXNBcnJheSh0aGluZylcblx0XHQ/IEFyY2h0eXBlLkFycmF5XG5cdFx0OiBpc01hcCh0aGluZylcblx0XHQ/IEFyY2h0eXBlLk1hcFxuXHRcdDogaXNTZXQodGhpbmcpXG5cdFx0PyBBcmNodHlwZS5TZXRcblx0XHQ6IEFyY2h0eXBlLk9iamVjdFxufVxuXG4vKiNfX1BVUkVfXyovXG5leHBvcnQgZnVuY3Rpb24gaGFzKHRoaW5nOiBhbnksIHByb3A6IFByb3BlcnR5S2V5KTogYm9vbGVhbiB7XG5cdHJldHVybiBnZXRBcmNodHlwZSh0aGluZykgPT09IEFyY2h0eXBlLk1hcFxuXHRcdD8gdGhpbmcuaGFzKHByb3ApXG5cdFx0OiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpbmcsIHByb3ApXG59XG5cbi8qI19fUFVSRV9fKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXQodGhpbmc6IEFueU1hcCB8IEFueU9iamVjdCwgcHJvcDogUHJvcGVydHlLZXkpOiBhbnkge1xuXHQvLyBAdHMtaWdub3JlXG5cdHJldHVybiBnZXRBcmNodHlwZSh0aGluZykgPT09IEFyY2h0eXBlLk1hcCA/IHRoaW5nLmdldChwcm9wKSA6IHRoaW5nW3Byb3BdXG59XG5cbi8qI19fUFVSRV9fKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXQodGhpbmc6IGFueSwgcHJvcE9yT2xkVmFsdWU6IFByb3BlcnR5S2V5LCB2YWx1ZTogYW55KSB7XG5cdGNvbnN0IHQgPSBnZXRBcmNodHlwZSh0aGluZylcblx0aWYgKHQgPT09IEFyY2h0eXBlLk1hcCkgdGhpbmcuc2V0KHByb3BPck9sZFZhbHVlLCB2YWx1ZSlcblx0ZWxzZSBpZiAodCA9PT0gQXJjaHR5cGUuU2V0KSB7XG5cdFx0dGhpbmcuZGVsZXRlKHByb3BPck9sZFZhbHVlKVxuXHRcdHRoaW5nLmFkZCh2YWx1ZSlcblx0fSBlbHNlIHRoaW5nW3Byb3BPck9sZFZhbHVlXSA9IHZhbHVlXG59XG5cbi8qI19fUFVSRV9fKi9cbmV4cG9ydCBmdW5jdGlvbiBpcyh4OiBhbnksIHk6IGFueSk6IGJvb2xlYW4ge1xuXHQvLyBGcm9tOiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmJqcy9ibG9iL2M2OTkwNGE1MTFiOTAwMjY2OTM1MTY4MjIzMDYzZGQ4NzcyZGZjNDAvcGFja2FnZXMvZmJqcy9zcmMvY29yZS9zaGFsbG93RXF1YWwuanNcblx0aWYgKHggPT09IHkpIHtcblx0XHRyZXR1cm4geCAhPT0gMCB8fCAxIC8geCA9PT0gMSAvIHlcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4geCAhPT0geCAmJiB5ICE9PSB5XG5cdH1cbn1cblxuLyojX19QVVJFX18qL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTWFwKHRhcmdldDogYW55KTogdGFyZ2V0IGlzIEFueU1hcCB7XG5cdHJldHVybiBoYXNNYXAgJiYgdGFyZ2V0IGluc3RhbmNlb2YgTWFwXG59XG5cbi8qI19fUFVSRV9fKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1NldCh0YXJnZXQ6IGFueSk6IHRhcmdldCBpcyBBbnlTZXQge1xuXHRyZXR1cm4gaGFzU2V0ICYmIHRhcmdldCBpbnN0YW5jZW9mIFNldFxufVxuLyojX19QVVJFX18qL1xuZXhwb3J0IGZ1bmN0aW9uIGxhdGVzdChzdGF0ZTogSW1tZXJTdGF0ZSk6IGFueSB7XG5cdHJldHVybiBzdGF0ZS5jb3B5XyB8fCBzdGF0ZS5iYXNlX1xufVxuXG4vKiNfX1BVUkVfXyovXG5leHBvcnQgZnVuY3Rpb24gc2hhbGxvd0NvcHkoYmFzZTogYW55KSB7XG5cdGlmIChBcnJheS5pc0FycmF5KGJhc2UpKSByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYmFzZSlcblx0Y29uc3QgZGVzY3JpcHRvcnMgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGJhc2UpXG5cdGRlbGV0ZSBkZXNjcmlwdG9yc1tEUkFGVF9TVEFURSBhcyBhbnldXG5cdGxldCBrZXlzID0gb3duS2V5cyhkZXNjcmlwdG9ycylcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y29uc3Qga2V5OiBhbnkgPSBrZXlzW2ldXG5cdFx0Y29uc3QgZGVzYyA9IGRlc2NyaXB0b3JzW2tleV1cblx0XHRpZiAoZGVzYy53cml0YWJsZSA9PT0gZmFsc2UpIHtcblx0XHRcdGRlc2Mud3JpdGFibGUgPSB0cnVlXG5cdFx0XHRkZXNjLmNvbmZpZ3VyYWJsZSA9IHRydWVcblx0XHR9XG5cdFx0Ly8gbGlrZSBvYmplY3QuYXNzaWduLCB3ZSB3aWxsIHJlYWQgYW55IF9vd25fLCBnZXQvc2V0IGFjY2Vzc29ycy4gVGhpcyBoZWxwcyBpbiBkZWFsaW5nXG5cdFx0Ly8gd2l0aCBsaWJyYXJpZXMgdGhhdCB0cmFwIHZhbHVlcywgbGlrZSBtb2J4IG9yIHZ1ZVxuXHRcdC8vIHVubGlrZSBvYmplY3QuYXNzaWduLCBub24tZW51bWVyYWJsZXMgd2lsbCBiZSBjb3BpZWQgYXMgd2VsbFxuXHRcdGlmIChkZXNjLmdldCB8fCBkZXNjLnNldClcblx0XHRcdGRlc2NyaXB0b3JzW2tleV0gPSB7XG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0d3JpdGFibGU6IHRydWUsIC8vIGNvdWxkIGxpdmUgd2l0aCAhIWRlc2Muc2V0IGFzIHdlbGwgaGVyZS4uLlxuXHRcdFx0XHRlbnVtZXJhYmxlOiBkZXNjLmVudW1lcmFibGUsXG5cdFx0XHRcdHZhbHVlOiBiYXNlW2tleV1cblx0XHRcdH1cblx0fVxuXHRyZXR1cm4gT2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YoYmFzZSksIGRlc2NyaXB0b3JzKVxufVxuXG4vKipcbiAqIEZyZWV6ZXMgZHJhZnRhYmxlIG9iamVjdHMuIFJldHVybnMgdGhlIG9yaWdpbmFsIG9iamVjdC5cbiAqIEJ5IGRlZmF1bHQgZnJlZXplcyBzaGFsbG93bHksIGJ1dCBpZiB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIGB0cnVlYCBpdCB3aWxsIGZyZWV6ZSByZWN1cnNpdmVseS5cbiAqXG4gKiBAcGFyYW0gb2JqXG4gKiBAcGFyYW0gZGVlcFxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJlZXplPFQ+KG9iajogVCwgZGVlcD86IGJvb2xlYW4pOiBUXG5leHBvcnQgZnVuY3Rpb24gZnJlZXplPFQ+KG9iajogYW55LCBkZWVwOiBib29sZWFuID0gZmFsc2UpOiBUIHtcblx0aWYgKGlzRnJvemVuKG9iaikgfHwgaXNEcmFmdChvYmopIHx8ICFpc0RyYWZ0YWJsZShvYmopKSByZXR1cm4gb2JqXG5cdGlmIChnZXRBcmNodHlwZShvYmopID4gMSAvKiBNYXAgb3IgU2V0ICovKSB7XG5cdFx0b2JqLnNldCA9IG9iai5hZGQgPSBvYmouY2xlYXIgPSBvYmouZGVsZXRlID0gZG9udE11dGF0ZUZyb3plbkNvbGxlY3Rpb25zIGFzIGFueVxuXHR9XG5cdE9iamVjdC5mcmVlemUob2JqKVxuXHRpZiAoZGVlcCkgZWFjaChvYmosIChrZXksIHZhbHVlKSA9PiBmcmVlemUodmFsdWUsIHRydWUpLCB0cnVlKVxuXHRyZXR1cm4gb2JqXG59XG5cbmZ1bmN0aW9uIGRvbnRNdXRhdGVGcm96ZW5Db2xsZWN0aW9ucygpIHtcblx0ZGllKDIpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Zyb3plbihvYmo6IGFueSk6IGJvb2xlYW4ge1xuXHRpZiAob2JqID09IG51bGwgfHwgdHlwZW9mIG9iaiAhPT0gXCJvYmplY3RcIikgcmV0dXJuIHRydWVcblx0Ly8gU2VlICM2MDAsIElFIGRpZXMgb24gbm9uLW9iamVjdHMgaW4gT2JqZWN0LmlzRnJvemVuXG5cdHJldHVybiBPYmplY3QuaXNGcm96ZW4ob2JqKVxufVxuIiwgImltcG9ydCB7XG5cdEltbWVyU3RhdGUsXG5cdFBhdGNoLFxuXHRJbW1lclNjb3BlLFxuXHREcmFmdGVkLFxuXHRBbnlPYmplY3QsXG5cdEltbWVyQmFzZVN0YXRlLFxuXHRBbnlNYXAsXG5cdEFueVNldCxcblx0UHJveHlUeXBlLFxuXHRkaWVcbn0gZnJvbSBcIi4uL2ludGVybmFsXCJcblxuLyoqIFBsdWdpbiB1dGlsaXRpZXMgKi9cbmNvbnN0IHBsdWdpbnM6IHtcblx0UGF0Y2hlcz86IHtcblx0XHRnZW5lcmF0ZVBhdGNoZXNfKFxuXHRcdFx0c3RhdGU6IEltbWVyU3RhdGUsXG5cdFx0XHRiYXNlUGF0aDogUGF0Y2hQYXRoLFxuXHRcdFx0cGF0Y2hlczogUGF0Y2hbXSxcblx0XHRcdGludmVyc2VQYXRjaGVzOiBQYXRjaFtdXG5cdFx0KTogdm9pZFxuXHRcdGdlbmVyYXRlUmVwbGFjZW1lbnRQYXRjaGVzXyhcblx0XHRcdGJhc2U6IGFueSxcblx0XHRcdHJlcGxhY2VtZW50OiBhbnksXG5cdFx0XHRwYXRjaGVzOiBQYXRjaFtdLFxuXHRcdFx0aW52ZXJzZVBhdGNoZXM6IFBhdGNoW11cblx0XHQpOiB2b2lkXG5cdFx0YXBwbHlQYXRjaGVzXzxUPihkcmFmdDogVCwgcGF0Y2hlczogUGF0Y2hbXSk6IFRcblx0fVxuXHRFUzU/OiB7XG5cdFx0d2lsbEZpbmFsaXplRVM1XyhzY29wZTogSW1tZXJTY29wZSwgcmVzdWx0OiBhbnksIGlzUmVwbGFjZWQ6IGJvb2xlYW4pOiB2b2lkXG5cdFx0Y3JlYXRlRVM1UHJveHlfPFQ+KFxuXHRcdFx0YmFzZTogVCxcblx0XHRcdHBhcmVudD86IEltbWVyU3RhdGVcblx0XHQpOiBEcmFmdGVkPFQsIEVTNU9iamVjdFN0YXRlIHwgRVM1QXJyYXlTdGF0ZT5cblx0XHRoYXNDaGFuZ2VzXyhzdGF0ZTogRVM1QXJyYXlTdGF0ZSB8IEVTNU9iamVjdFN0YXRlKTogYm9vbGVhblxuXHR9XG5cdE1hcFNldD86IHtcblx0XHRwcm94eU1hcF88VCBleHRlbmRzIEFueU1hcD4odGFyZ2V0OiBULCBwYXJlbnQ/OiBJbW1lclN0YXRlKTogVFxuXHRcdHByb3h5U2V0XzxUIGV4dGVuZHMgQW55U2V0Pih0YXJnZXQ6IFQsIHBhcmVudD86IEltbWVyU3RhdGUpOiBUXG5cdH1cbn0gPSB7fVxuXG50eXBlIFBsdWdpbnMgPSB0eXBlb2YgcGx1Z2luc1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGx1Z2luPEsgZXh0ZW5kcyBrZXlvZiBQbHVnaW5zPihcblx0cGx1Z2luS2V5OiBLXG4pOiBFeGNsdWRlPFBsdWdpbnNbS10sIHVuZGVmaW5lZD4ge1xuXHRjb25zdCBwbHVnaW4gPSBwbHVnaW5zW3BsdWdpbktleV1cblx0aWYgKCFwbHVnaW4pIHtcblx0XHRkaWUoMTgsIHBsdWdpbktleSlcblx0fVxuXHQvLyBAdHMtaWdub3JlXG5cdHJldHVybiBwbHVnaW5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRQbHVnaW48SyBleHRlbmRzIGtleW9mIFBsdWdpbnM+KFxuXHRwbHVnaW5LZXk6IEssXG5cdGltcGxlbWVudGF0aW9uOiBQbHVnaW5zW0tdXG4pOiB2b2lkIHtcblx0aWYgKCFwbHVnaW5zW3BsdWdpbktleV0pIHBsdWdpbnNbcGx1Z2luS2V5XSA9IGltcGxlbWVudGF0aW9uXG59XG5cbi8qKiBFUzUgUGx1Z2luICovXG5cbmludGVyZmFjZSBFUzVCYXNlU3RhdGUgZXh0ZW5kcyBJbW1lckJhc2VTdGF0ZSB7XG5cdGFzc2lnbmVkXzoge1trZXk6IHN0cmluZ106IGFueX1cblx0cGFyZW50Xz86IEltbWVyU3RhdGVcblx0cmV2b2tlZF86IGJvb2xlYW5cbn1cblxuZXhwb3J0IGludGVyZmFjZSBFUzVPYmplY3RTdGF0ZSBleHRlbmRzIEVTNUJhc2VTdGF0ZSB7XG5cdHR5cGVfOiBQcm94eVR5cGUuRVM1T2JqZWN0XG5cdGRyYWZ0XzogRHJhZnRlZDxBbnlPYmplY3QsIEVTNU9iamVjdFN0YXRlPlxuXHRiYXNlXzogQW55T2JqZWN0XG5cdGNvcHlfOiBBbnlPYmplY3QgfCBudWxsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRVM1QXJyYXlTdGF0ZSBleHRlbmRzIEVTNUJhc2VTdGF0ZSB7XG5cdHR5cGVfOiBQcm94eVR5cGUuRVM1QXJyYXlcblx0ZHJhZnRfOiBEcmFmdGVkPEFueU9iamVjdCwgRVM1QXJyYXlTdGF0ZT5cblx0YmFzZV86IGFueVxuXHRjb3B5XzogYW55XG59XG5cbi8qKiBNYXAgLyBTZXQgcGx1Z2luICovXG5cbmV4cG9ydCBpbnRlcmZhY2UgTWFwU3RhdGUgZXh0ZW5kcyBJbW1lckJhc2VTdGF0ZSB7XG5cdHR5cGVfOiBQcm94eVR5cGUuTWFwXG5cdGNvcHlfOiBBbnlNYXAgfCB1bmRlZmluZWRcblx0YXNzaWduZWRfOiBNYXA8YW55LCBib29sZWFuPiB8IHVuZGVmaW5lZFxuXHRiYXNlXzogQW55TWFwXG5cdHJldm9rZWRfOiBib29sZWFuXG5cdGRyYWZ0XzogRHJhZnRlZDxBbnlNYXAsIE1hcFN0YXRlPlxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNldFN0YXRlIGV4dGVuZHMgSW1tZXJCYXNlU3RhdGUge1xuXHR0eXBlXzogUHJveHlUeXBlLlNldFxuXHRjb3B5XzogQW55U2V0IHwgdW5kZWZpbmVkXG5cdGJhc2VfOiBBbnlTZXRcblx0ZHJhZnRzXzogTWFwPGFueSwgRHJhZnRlZD4gLy8gbWFwcyB0aGUgb3JpZ2luYWwgdmFsdWUgdG8gdGhlIGRyYWZ0IHZhbHVlIGluIHRoZSBuZXcgc2V0XG5cdHJldm9rZWRfOiBib29sZWFuXG5cdGRyYWZ0XzogRHJhZnRlZDxBbnlTZXQsIFNldFN0YXRlPlxufVxuXG4vKiogUGF0Y2hlcyBwbHVnaW4gKi9cblxuZXhwb3J0IHR5cGUgUGF0Y2hQYXRoID0gKHN0cmluZyB8IG51bWJlcilbXVxuIiwgImltcG9ydCB7XG5cdFBhdGNoLFxuXHRQYXRjaExpc3RlbmVyLFxuXHREcmFmdGVkLFxuXHRJbW1lcixcblx0RFJBRlRfU1RBVEUsXG5cdEltbWVyU3RhdGUsXG5cdFByb3h5VHlwZSxcblx0Z2V0UGx1Z2luXG59IGZyb20gXCIuLi9pbnRlcm5hbFwiXG5pbXBvcnQge2RpZX0gZnJvbSBcIi4uL3V0aWxzL2Vycm9yc1wiXG5cbi8qKiBFYWNoIHNjb3BlIHJlcHJlc2VudHMgYSBgcHJvZHVjZWAgY2FsbC4gKi9cblxuZXhwb3J0IGludGVyZmFjZSBJbW1lclNjb3BlIHtcblx0cGF0Y2hlc18/OiBQYXRjaFtdXG5cdGludmVyc2VQYXRjaGVzXz86IFBhdGNoW11cblx0Y2FuQXV0b0ZyZWV6ZV86IGJvb2xlYW5cblx0ZHJhZnRzXzogYW55W11cblx0cGFyZW50Xz86IEltbWVyU2NvcGVcblx0cGF0Y2hMaXN0ZW5lcl8/OiBQYXRjaExpc3RlbmVyXG5cdGltbWVyXzogSW1tZXJcblx0dW5maW5hbGl6ZWREcmFmdHNfOiBudW1iZXJcbn1cblxubGV0IGN1cnJlbnRTY29wZTogSW1tZXJTY29wZSB8IHVuZGVmaW5lZFxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VycmVudFNjb3BlKCkge1xuXHRpZiAoX19ERVZfXyAmJiAhY3VycmVudFNjb3BlKSBkaWUoMClcblx0cmV0dXJuIGN1cnJlbnRTY29wZSFcbn1cblxuZnVuY3Rpb24gY3JlYXRlU2NvcGUoXG5cdHBhcmVudF86IEltbWVyU2NvcGUgfCB1bmRlZmluZWQsXG5cdGltbWVyXzogSW1tZXJcbik6IEltbWVyU2NvcGUge1xuXHRyZXR1cm4ge1xuXHRcdGRyYWZ0c186IFtdLFxuXHRcdHBhcmVudF8sXG5cdFx0aW1tZXJfLFxuXHRcdC8vIFdoZW5ldmVyIHRoZSBtb2RpZmllZCBkcmFmdCBjb250YWlucyBhIGRyYWZ0IGZyb20gYW5vdGhlciBzY29wZSwgd2Vcblx0XHQvLyBuZWVkIHRvIHByZXZlbnQgYXV0by1mcmVlemluZyBzbyB0aGUgdW5vd25lZCBkcmFmdCBjYW4gYmUgZmluYWxpemVkLlxuXHRcdGNhbkF1dG9GcmVlemVfOiB0cnVlLFxuXHRcdHVuZmluYWxpemVkRHJhZnRzXzogMFxuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VQYXRjaGVzSW5TY29wZShcblx0c2NvcGU6IEltbWVyU2NvcGUsXG5cdHBhdGNoTGlzdGVuZXI/OiBQYXRjaExpc3RlbmVyXG4pIHtcblx0aWYgKHBhdGNoTGlzdGVuZXIpIHtcblx0XHRnZXRQbHVnaW4oXCJQYXRjaGVzXCIpIC8vIGFzc2VydCB3ZSBoYXZlIHRoZSBwbHVnaW5cblx0XHRzY29wZS5wYXRjaGVzXyA9IFtdXG5cdFx0c2NvcGUuaW52ZXJzZVBhdGNoZXNfID0gW11cblx0XHRzY29wZS5wYXRjaExpc3RlbmVyXyA9IHBhdGNoTGlzdGVuZXJcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmV2b2tlU2NvcGUoc2NvcGU6IEltbWVyU2NvcGUpIHtcblx0bGVhdmVTY29wZShzY29wZSlcblx0c2NvcGUuZHJhZnRzXy5mb3JFYWNoKHJldm9rZURyYWZ0KVxuXHQvLyBAdHMtaWdub3JlXG5cdHNjb3BlLmRyYWZ0c18gPSBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZWF2ZVNjb3BlKHNjb3BlOiBJbW1lclNjb3BlKSB7XG5cdGlmIChzY29wZSA9PT0gY3VycmVudFNjb3BlKSB7XG5cdFx0Y3VycmVudFNjb3BlID0gc2NvcGUucGFyZW50X1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnRlclNjb3BlKGltbWVyOiBJbW1lcikge1xuXHRyZXR1cm4gKGN1cnJlbnRTY29wZSA9IGNyZWF0ZVNjb3BlKGN1cnJlbnRTY29wZSwgaW1tZXIpKVxufVxuXG5mdW5jdGlvbiByZXZva2VEcmFmdChkcmFmdDogRHJhZnRlZCkge1xuXHRjb25zdCBzdGF0ZTogSW1tZXJTdGF0ZSA9IGRyYWZ0W0RSQUZUX1NUQVRFXVxuXHRpZiAoXG5cdFx0c3RhdGUudHlwZV8gPT09IFByb3h5VHlwZS5Qcm94eU9iamVjdCB8fFxuXHRcdHN0YXRlLnR5cGVfID09PSBQcm94eVR5cGUuUHJveHlBcnJheVxuXHQpXG5cdFx0c3RhdGUucmV2b2tlXygpXG5cdGVsc2Ugc3RhdGUucmV2b2tlZF8gPSB0cnVlXG59XG4iLCAiaW1wb3J0IHtcblx0SW1tZXJTY29wZSxcblx0RFJBRlRfU1RBVEUsXG5cdGlzRHJhZnRhYmxlLFxuXHROT1RISU5HLFxuXHRQYXRjaFBhdGgsXG5cdGVhY2gsXG5cdGhhcyxcblx0ZnJlZXplLFxuXHRJbW1lclN0YXRlLFxuXHRpc0RyYWZ0LFxuXHRTZXRTdGF0ZSxcblx0c2V0LFxuXHRQcm94eVR5cGUsXG5cdGdldFBsdWdpbixcblx0ZGllLFxuXHRyZXZva2VTY29wZSxcblx0aXNGcm96ZW4sXG5cdHNoYWxsb3dDb3B5XG59IGZyb20gXCIuLi9pbnRlcm5hbFwiXG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzUmVzdWx0KHJlc3VsdDogYW55LCBzY29wZTogSW1tZXJTY29wZSkge1xuXHRzY29wZS51bmZpbmFsaXplZERyYWZ0c18gPSBzY29wZS5kcmFmdHNfLmxlbmd0aFxuXHRjb25zdCBiYXNlRHJhZnQgPSBzY29wZS5kcmFmdHNfIVswXVxuXHRjb25zdCBpc1JlcGxhY2VkID0gcmVzdWx0ICE9PSB1bmRlZmluZWQgJiYgcmVzdWx0ICE9PSBiYXNlRHJhZnRcblx0aWYgKCFzY29wZS5pbW1lcl8udXNlUHJveGllc18pXG5cdFx0Z2V0UGx1Z2luKFwiRVM1XCIpLndpbGxGaW5hbGl6ZUVTNV8oc2NvcGUsIHJlc3VsdCwgaXNSZXBsYWNlZClcblx0aWYgKGlzUmVwbGFjZWQpIHtcblx0XHRpZiAoYmFzZURyYWZ0W0RSQUZUX1NUQVRFXS5tb2RpZmllZF8pIHtcblx0XHRcdHJldm9rZVNjb3BlKHNjb3BlKVxuXHRcdFx0ZGllKDQpXG5cdFx0fVxuXHRcdGlmIChpc0RyYWZ0YWJsZShyZXN1bHQpKSB7XG5cdFx0XHQvLyBGaW5hbGl6ZSB0aGUgcmVzdWx0IGluIGNhc2UgaXQgY29udGFpbnMgKG9yIGlzKSBhIHN1YnNldCBvZiB0aGUgZHJhZnQuXG5cdFx0XHRyZXN1bHQgPSBmaW5hbGl6ZShzY29wZSwgcmVzdWx0KVxuXHRcdFx0aWYgKCFzY29wZS5wYXJlbnRfKSBtYXliZUZyZWV6ZShzY29wZSwgcmVzdWx0KVxuXHRcdH1cblx0XHRpZiAoc2NvcGUucGF0Y2hlc18pIHtcblx0XHRcdGdldFBsdWdpbihcIlBhdGNoZXNcIikuZ2VuZXJhdGVSZXBsYWNlbWVudFBhdGNoZXNfKFxuXHRcdFx0XHRiYXNlRHJhZnRbRFJBRlRfU1RBVEVdLmJhc2VfLFxuXHRcdFx0XHRyZXN1bHQsXG5cdFx0XHRcdHNjb3BlLnBhdGNoZXNfLFxuXHRcdFx0XHRzY29wZS5pbnZlcnNlUGF0Y2hlc18hXG5cdFx0XHQpXG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIEZpbmFsaXplIHRoZSBiYXNlIGRyYWZ0LlxuXHRcdHJlc3VsdCA9IGZpbmFsaXplKHNjb3BlLCBiYXNlRHJhZnQsIFtdKVxuXHR9XG5cdHJldm9rZVNjb3BlKHNjb3BlKVxuXHRpZiAoc2NvcGUucGF0Y2hlc18pIHtcblx0XHRzY29wZS5wYXRjaExpc3RlbmVyXyEoc2NvcGUucGF0Y2hlc18sIHNjb3BlLmludmVyc2VQYXRjaGVzXyEpXG5cdH1cblx0cmV0dXJuIHJlc3VsdCAhPT0gTk9USElORyA/IHJlc3VsdCA6IHVuZGVmaW5lZFxufVxuXG5mdW5jdGlvbiBmaW5hbGl6ZShyb290U2NvcGU6IEltbWVyU2NvcGUsIHZhbHVlOiBhbnksIHBhdGg/OiBQYXRjaFBhdGgpIHtcblx0Ly8gRG9uJ3QgcmVjdXJzZSBpbiB0aG8gcmVjdXJzaXZlIGRhdGEgc3RydWN0dXJlc1xuXHRpZiAoaXNGcm96ZW4odmFsdWUpKSByZXR1cm4gdmFsdWVcblxuXHRjb25zdCBzdGF0ZTogSW1tZXJTdGF0ZSA9IHZhbHVlW0RSQUZUX1NUQVRFXVxuXHQvLyBBIHBsYWluIG9iamVjdCwgbWlnaHQgbmVlZCBmcmVlemluZywgbWlnaHQgY29udGFpbiBkcmFmdHNcblx0aWYgKCFzdGF0ZSkge1xuXHRcdGVhY2goXG5cdFx0XHR2YWx1ZSxcblx0XHRcdChrZXksIGNoaWxkVmFsdWUpID0+XG5cdFx0XHRcdGZpbmFsaXplUHJvcGVydHkocm9vdFNjb3BlLCBzdGF0ZSwgdmFsdWUsIGtleSwgY2hpbGRWYWx1ZSwgcGF0aCksXG5cdFx0XHR0cnVlIC8vIFNlZSAjNTkwLCBkb24ndCByZWN1cnNlIGludG8gbm9uLWVudW1lcmFibGUgb2Ygbm9uIGRyYWZ0ZWQgb2JqZWN0c1xuXHRcdClcblx0XHRyZXR1cm4gdmFsdWVcblx0fVxuXHQvLyBOZXZlciBmaW5hbGl6ZSBkcmFmdHMgb3duZWQgYnkgYW5vdGhlciBzY29wZS5cblx0aWYgKHN0YXRlLnNjb3BlXyAhPT0gcm9vdFNjb3BlKSByZXR1cm4gdmFsdWVcblx0Ly8gVW5tb2RpZmllZCBkcmFmdCwgcmV0dXJuIHRoZSAoZnJvemVuKSBvcmlnaW5hbFxuXHRpZiAoIXN0YXRlLm1vZGlmaWVkXykge1xuXHRcdG1heWJlRnJlZXplKHJvb3RTY29wZSwgc3RhdGUuYmFzZV8sIHRydWUpXG5cdFx0cmV0dXJuIHN0YXRlLmJhc2VfXG5cdH1cblx0Ly8gTm90IGZpbmFsaXplZCB5ZXQsIGxldCdzIGRvIHRoYXQgbm93XG5cdGlmICghc3RhdGUuZmluYWxpemVkXykge1xuXHRcdHN0YXRlLmZpbmFsaXplZF8gPSB0cnVlXG5cdFx0c3RhdGUuc2NvcGVfLnVuZmluYWxpemVkRHJhZnRzXy0tXG5cdFx0Y29uc3QgcmVzdWx0ID1cblx0XHRcdC8vIEZvciBFUzUsIGNyZWF0ZSBhIGdvb2QgY29weSBmcm9tIHRoZSBkcmFmdCBmaXJzdCwgd2l0aCBhZGRlZCBrZXlzIGFuZCB3aXRob3V0IGRlbGV0ZWQga2V5cy5cblx0XHRcdHN0YXRlLnR5cGVfID09PSBQcm94eVR5cGUuRVM1T2JqZWN0IHx8IHN0YXRlLnR5cGVfID09PSBQcm94eVR5cGUuRVM1QXJyYXlcblx0XHRcdFx0PyAoc3RhdGUuY29weV8gPSBzaGFsbG93Q29weShzdGF0ZS5kcmFmdF8pKVxuXHRcdFx0XHQ6IHN0YXRlLmNvcHlfXG5cdFx0Ly8gRmluYWxpemUgYWxsIGNoaWxkcmVuIG9mIHRoZSBjb3B5XG5cdFx0Ly8gRm9yIHNldHMgd2UgY2xvbmUgYmVmb3JlIGl0ZXJhdGluZywgb3RoZXJ3aXNlIHdlIGNhbiBnZXQgaW4gZW5kbGVzcyBsb29wIGR1ZSB0byBtb2RpZnlpbmcgZHVyaW5nIGl0ZXJhdGlvbiwgc2VlICM2Mjhcblx0XHQvLyBBbHRob3VnaCB0aGUgb3JpZ2luYWwgdGVzdCBjYXNlIGRvZXNuJ3Qgc2VlbSB2YWxpZCBhbnl3YXksIHNvIGlmIHRoaXMgaW4gdGhlIHdheSB3ZSBjYW4gdHVybiB0aGUgbmV4dCBsaW5lXG5cdFx0Ly8gYmFjayB0byBlYWNoKHJlc3VsdCwgLi4uLilcblx0XHRlYWNoKFxuXHRcdFx0c3RhdGUudHlwZV8gPT09IFByb3h5VHlwZS5TZXQgPyBuZXcgU2V0KHJlc3VsdCkgOiByZXN1bHQsXG5cdFx0XHQoa2V5LCBjaGlsZFZhbHVlKSA9PlxuXHRcdFx0XHRmaW5hbGl6ZVByb3BlcnR5KHJvb3RTY29wZSwgc3RhdGUsIHJlc3VsdCwga2V5LCBjaGlsZFZhbHVlLCBwYXRoKVxuXHRcdClcblx0XHQvLyBldmVyeXRoaW5nIGluc2lkZSBpcyBmcm96ZW4sIHdlIGNhbiBmcmVlemUgaGVyZVxuXHRcdG1heWJlRnJlZXplKHJvb3RTY29wZSwgcmVzdWx0LCBmYWxzZSlcblx0XHQvLyBmaXJzdCB0aW1lIGZpbmFsaXppbmcsIGxldCdzIGNyZWF0ZSB0aG9zZSBwYXRjaGVzXG5cdFx0aWYgKHBhdGggJiYgcm9vdFNjb3BlLnBhdGNoZXNfKSB7XG5cdFx0XHRnZXRQbHVnaW4oXCJQYXRjaGVzXCIpLmdlbmVyYXRlUGF0Y2hlc18oXG5cdFx0XHRcdHN0YXRlLFxuXHRcdFx0XHRwYXRoLFxuXHRcdFx0XHRyb290U2NvcGUucGF0Y2hlc18sXG5cdFx0XHRcdHJvb3RTY29wZS5pbnZlcnNlUGF0Y2hlc18hXG5cdFx0XHQpXG5cdFx0fVxuXHR9XG5cdHJldHVybiBzdGF0ZS5jb3B5X1xufVxuXG5mdW5jdGlvbiBmaW5hbGl6ZVByb3BlcnR5KFxuXHRyb290U2NvcGU6IEltbWVyU2NvcGUsXG5cdHBhcmVudFN0YXRlOiB1bmRlZmluZWQgfCBJbW1lclN0YXRlLFxuXHR0YXJnZXRPYmplY3Q6IGFueSxcblx0cHJvcDogc3RyaW5nIHwgbnVtYmVyLFxuXHRjaGlsZFZhbHVlOiBhbnksXG5cdHJvb3RQYXRoPzogUGF0Y2hQYXRoXG4pIHtcblx0aWYgKF9fREVWX18gJiYgY2hpbGRWYWx1ZSA9PT0gdGFyZ2V0T2JqZWN0KSBkaWUoNSlcblx0aWYgKGlzRHJhZnQoY2hpbGRWYWx1ZSkpIHtcblx0XHRjb25zdCBwYXRoID1cblx0XHRcdHJvb3RQYXRoICYmXG5cdFx0XHRwYXJlbnRTdGF0ZSAmJlxuXHRcdFx0cGFyZW50U3RhdGUhLnR5cGVfICE9PSBQcm94eVR5cGUuU2V0ICYmIC8vIFNldCBvYmplY3RzIGFyZSBhdG9taWMgc2luY2UgdGhleSBoYXZlIG5vIGtleXMuXG5cdFx0XHQhaGFzKChwYXJlbnRTdGF0ZSBhcyBFeGNsdWRlPEltbWVyU3RhdGUsIFNldFN0YXRlPikuYXNzaWduZWRfISwgcHJvcCkgLy8gU2tpcCBkZWVwIHBhdGNoZXMgZm9yIGFzc2lnbmVkIGtleXMuXG5cdFx0XHRcdD8gcm9vdFBhdGghLmNvbmNhdChwcm9wKVxuXHRcdFx0XHQ6IHVuZGVmaW5lZFxuXHRcdC8vIERyYWZ0cyBvd25lZCBieSBgc2NvcGVgIGFyZSBmaW5hbGl6ZWQgaGVyZS5cblx0XHRjb25zdCByZXMgPSBmaW5hbGl6ZShyb290U2NvcGUsIGNoaWxkVmFsdWUsIHBhdGgpXG5cdFx0c2V0KHRhcmdldE9iamVjdCwgcHJvcCwgcmVzKVxuXHRcdC8vIERyYWZ0cyBmcm9tIGFub3RoZXIgc2NvcGUgbXVzdCBwcmV2ZW50ZWQgdG8gYmUgZnJvemVuXG5cdFx0Ly8gaWYgd2UgZ290IGEgZHJhZnQgYmFjayBmcm9tIGZpbmFsaXplLCB3ZSdyZSBpbiBhIG5lc3RlZCBwcm9kdWNlIGFuZCBzaG91bGRuJ3QgZnJlZXplXG5cdFx0aWYgKGlzRHJhZnQocmVzKSkge1xuXHRcdFx0cm9vdFNjb3BlLmNhbkF1dG9GcmVlemVfID0gZmFsc2Vcblx0XHR9IGVsc2UgcmV0dXJuXG5cdH1cblx0Ly8gU2VhcmNoIG5ldyBvYmplY3RzIGZvciB1bmZpbmFsaXplZCBkcmFmdHMuIEZyb3plbiBvYmplY3RzIHNob3VsZCBuZXZlciBjb250YWluIGRyYWZ0cy5cblx0aWYgKGlzRHJhZnRhYmxlKGNoaWxkVmFsdWUpICYmICFpc0Zyb3plbihjaGlsZFZhbHVlKSkge1xuXHRcdGlmICghcm9vdFNjb3BlLmltbWVyXy5hdXRvRnJlZXplXyAmJiByb290U2NvcGUudW5maW5hbGl6ZWREcmFmdHNfIDwgMSkge1xuXHRcdFx0Ly8gb3B0aW1pemF0aW9uOiBpZiBhbiBvYmplY3QgaXMgbm90IGEgZHJhZnQsIGFuZCB3ZSBkb24ndCBoYXZlIHRvXG5cdFx0XHQvLyBkZWVwZnJlZXplIGV2ZXJ5dGhpbmcsIGFuZCB3ZSBhcmUgc3VyZSB0aGF0IG5vIGRyYWZ0cyBhcmUgbGVmdCBpbiB0aGUgcmVtYWluaW5nIG9iamVjdFxuXHRcdFx0Ly8gY2F1c2Ugd2Ugc2F3IGFuZCBmaW5hbGl6ZWQgYWxsIGRyYWZ0cyBhbHJlYWR5OyB3ZSBjYW4gc3RvcCB2aXNpdGluZyB0aGUgcmVzdCBvZiB0aGUgdHJlZS5cblx0XHRcdC8vIFRoaXMgYmVuZWZpdHMgZXNwZWNpYWxseSBhZGRpbmcgbGFyZ2UgZGF0YSB0cmVlJ3Mgd2l0aG91dCBmdXJ0aGVyIHByb2Nlc3NpbmcuXG5cdFx0XHQvLyBTZWUgYWRkLWRhdGEuanMgcGVyZiB0ZXN0XG5cdFx0XHRyZXR1cm5cblx0XHR9XG5cdFx0ZmluYWxpemUocm9vdFNjb3BlLCBjaGlsZFZhbHVlKVxuXHRcdC8vIGltbWVyIGRlZXAgZnJlZXplcyBwbGFpbiBvYmplY3RzLCBzbyBpZiB0aGVyZSBpcyBubyBwYXJlbnQgc3RhdGUsIHdlIGZyZWV6ZSBhcyB3ZWxsXG5cdFx0aWYgKCFwYXJlbnRTdGF0ZSB8fCAhcGFyZW50U3RhdGUuc2NvcGVfLnBhcmVudF8pXG5cdFx0XHRtYXliZUZyZWV6ZShyb290U2NvcGUsIGNoaWxkVmFsdWUpXG5cdH1cbn1cblxuZnVuY3Rpb24gbWF5YmVGcmVlemUoc2NvcGU6IEltbWVyU2NvcGUsIHZhbHVlOiBhbnksIGRlZXAgPSBmYWxzZSkge1xuXHRpZiAoc2NvcGUuaW1tZXJfLmF1dG9GcmVlemVfICYmIHNjb3BlLmNhbkF1dG9GcmVlemVfKSB7XG5cdFx0ZnJlZXplKHZhbHVlLCBkZWVwKVxuXHR9XG59XG4iLCAiaW1wb3J0IHtcblx0ZWFjaCxcblx0aGFzLFxuXHRpcyxcblx0aXNEcmFmdGFibGUsXG5cdHNoYWxsb3dDb3B5LFxuXHRsYXRlc3QsXG5cdEltbWVyQmFzZVN0YXRlLFxuXHRJbW1lclN0YXRlLFxuXHREcmFmdGVkLFxuXHRBbnlPYmplY3QsXG5cdEFueUFycmF5LFxuXHRPYmplY3Rpc2gsXG5cdGdldEN1cnJlbnRTY29wZSxcblx0RFJBRlRfU1RBVEUsXG5cdGRpZSxcblx0Y3JlYXRlUHJveHksXG5cdFByb3h5VHlwZVxufSBmcm9tIFwiLi4vaW50ZXJuYWxcIlxuXG5pbnRlcmZhY2UgUHJveHlCYXNlU3RhdGUgZXh0ZW5kcyBJbW1lckJhc2VTdGF0ZSB7XG5cdGFzc2lnbmVkXzoge1xuXHRcdFtwcm9wZXJ0eTogc3RyaW5nXTogYm9vbGVhblxuXHR9XG5cdHBhcmVudF8/OiBJbW1lclN0YXRlXG5cdHJldm9rZV8oKTogdm9pZFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb3h5T2JqZWN0U3RhdGUgZXh0ZW5kcyBQcm94eUJhc2VTdGF0ZSB7XG5cdHR5cGVfOiBQcm94eVR5cGUuUHJveHlPYmplY3Rcblx0YmFzZV86IGFueVxuXHRjb3B5XzogYW55XG5cdGRyYWZ0XzogRHJhZnRlZDxBbnlPYmplY3QsIFByb3h5T2JqZWN0U3RhdGU+XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJveHlBcnJheVN0YXRlIGV4dGVuZHMgUHJveHlCYXNlU3RhdGUge1xuXHR0eXBlXzogUHJveHlUeXBlLlByb3h5QXJyYXlcblx0YmFzZV86IEFueUFycmF5XG5cdGNvcHlfOiBBbnlBcnJheSB8IG51bGxcblx0ZHJhZnRfOiBEcmFmdGVkPEFueUFycmF5LCBQcm94eUFycmF5U3RhdGU+XG59XG5cbnR5cGUgUHJveHlTdGF0ZSA9IFByb3h5T2JqZWN0U3RhdGUgfCBQcm94eUFycmF5U3RhdGVcblxuLyoqXG4gKiBSZXR1cm5zIGEgbmV3IGRyYWZ0IG9mIHRoZSBgYmFzZWAgb2JqZWN0LlxuICpcbiAqIFRoZSBzZWNvbmQgYXJndW1lbnQgaXMgdGhlIHBhcmVudCBkcmFmdC1zdGF0ZSAodXNlZCBpbnRlcm5hbGx5KS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVByb3h5UHJveHk8VCBleHRlbmRzIE9iamVjdGlzaD4oXG5cdGJhc2U6IFQsXG5cdHBhcmVudD86IEltbWVyU3RhdGVcbik6IERyYWZ0ZWQ8VCwgUHJveHlTdGF0ZT4ge1xuXHRjb25zdCBpc0FycmF5ID0gQXJyYXkuaXNBcnJheShiYXNlKVxuXHRjb25zdCBzdGF0ZTogUHJveHlTdGF0ZSA9IHtcblx0XHR0eXBlXzogaXNBcnJheSA/IFByb3h5VHlwZS5Qcm94eUFycmF5IDogKFByb3h5VHlwZS5Qcm94eU9iamVjdCBhcyBhbnkpLFxuXHRcdC8vIFRyYWNrIHdoaWNoIHByb2R1Y2UgY2FsbCB0aGlzIGlzIGFzc29jaWF0ZWQgd2l0aC5cblx0XHRzY29wZV86IHBhcmVudCA/IHBhcmVudC5zY29wZV8gOiBnZXRDdXJyZW50U2NvcGUoKSEsXG5cdFx0Ly8gVHJ1ZSBmb3IgYm90aCBzaGFsbG93IGFuZCBkZWVwIGNoYW5nZXMuXG5cdFx0bW9kaWZpZWRfOiBmYWxzZSxcblx0XHQvLyBVc2VkIGR1cmluZyBmaW5hbGl6YXRpb24uXG5cdFx0ZmluYWxpemVkXzogZmFsc2UsXG5cdFx0Ly8gVHJhY2sgd2hpY2ggcHJvcGVydGllcyBoYXZlIGJlZW4gYXNzaWduZWQgKHRydWUpIG9yIGRlbGV0ZWQgKGZhbHNlKS5cblx0XHRhc3NpZ25lZF86IHt9LFxuXHRcdC8vIFRoZSBwYXJlbnQgZHJhZnQgc3RhdGUuXG5cdFx0cGFyZW50XzogcGFyZW50LFxuXHRcdC8vIFRoZSBiYXNlIHN0YXRlLlxuXHRcdGJhc2VfOiBiYXNlLFxuXHRcdC8vIFRoZSBiYXNlIHByb3h5LlxuXHRcdGRyYWZ0XzogbnVsbCBhcyBhbnksIC8vIHNldCBiZWxvd1xuXHRcdC8vIFRoZSBiYXNlIGNvcHkgd2l0aCBhbnkgdXBkYXRlZCB2YWx1ZXMuXG5cdFx0Y29weV86IG51bGwsXG5cdFx0Ly8gQ2FsbGVkIGJ5IHRoZSBgcHJvZHVjZWAgZnVuY3Rpb24uXG5cdFx0cmV2b2tlXzogbnVsbCBhcyBhbnksXG5cdFx0aXNNYW51YWxfOiBmYWxzZVxuXHR9XG5cblx0Ly8gdGhlIHRyYXBzIG11c3QgdGFyZ2V0IHNvbWV0aGluZywgYSBiaXQgbGlrZSB0aGUgJ3JlYWwnIGJhc2UuXG5cdC8vIGJ1dCBhbHNvLCB3ZSBuZWVkIHRvIGJlIGFibGUgdG8gZGV0ZXJtaW5lIGZyb20gdGhlIHRhcmdldCB3aGF0IHRoZSByZWxldmFudCBzdGF0ZSBpc1xuXHQvLyAodG8gYXZvaWQgY3JlYXRpbmcgdHJhcHMgcGVyIGluc3RhbmNlIHRvIGNhcHR1cmUgdGhlIHN0YXRlIGluIGNsb3N1cmUsXG5cdC8vIGFuZCB0byBhdm9pZCBjcmVhdGluZyB3ZWlyZCBoaWRkZW4gcHJvcGVydGllcyBhcyB3ZWxsKVxuXHQvLyBTbyB0aGUgdHJpY2sgaXMgdG8gdXNlICdzdGF0ZScgYXMgdGhlIGFjdHVhbCAndGFyZ2V0JyEgKGFuZCBtYWtlIHN1cmUgd2UgaW50ZXJjZXB0IGV2ZXJ5dGhpbmcpXG5cdC8vIE5vdGUgdGhhdCBpbiB0aGUgY2FzZSBvZiBhbiBhcnJheSwgd2UgcHV0IHRoZSBzdGF0ZSBpbiBhbiBhcnJheSB0byBoYXZlIGJldHRlciBSZWZsZWN0IGRlZmF1bHRzIG9vdGJcblx0bGV0IHRhcmdldDogVCA9IHN0YXRlIGFzIGFueVxuXHRsZXQgdHJhcHM6IFByb3h5SGFuZGxlcjxvYmplY3QgfCBBcnJheTxhbnk+PiA9IG9iamVjdFRyYXBzXG5cdGlmIChpc0FycmF5KSB7XG5cdFx0dGFyZ2V0ID0gW3N0YXRlXSBhcyBhbnlcblx0XHR0cmFwcyA9IGFycmF5VHJhcHNcblx0fVxuXG5cdGNvbnN0IHtyZXZva2UsIHByb3h5fSA9IFByb3h5LnJldm9jYWJsZSh0YXJnZXQsIHRyYXBzKVxuXHRzdGF0ZS5kcmFmdF8gPSBwcm94eSBhcyBhbnlcblx0c3RhdGUucmV2b2tlXyA9IHJldm9rZVxuXHRyZXR1cm4gcHJveHkgYXMgYW55XG59XG5cbi8qKlxuICogT2JqZWN0IGRyYWZ0c1xuICovXG5leHBvcnQgY29uc3Qgb2JqZWN0VHJhcHM6IFByb3h5SGFuZGxlcjxQcm94eVN0YXRlPiA9IHtcblx0Z2V0KHN0YXRlLCBwcm9wKSB7XG5cdFx0aWYgKHByb3AgPT09IERSQUZUX1NUQVRFKSByZXR1cm4gc3RhdGVcblxuXHRcdGNvbnN0IHNvdXJjZSA9IGxhdGVzdChzdGF0ZSlcblx0XHRpZiAoIWhhcyhzb3VyY2UsIHByb3ApKSB7XG5cdFx0XHQvLyBub24tZXhpc3Rpbmcgb3Igbm9uLW93biBwcm9wZXJ0eS4uLlxuXHRcdFx0cmV0dXJuIHJlYWRQcm9wRnJvbVByb3RvKHN0YXRlLCBzb3VyY2UsIHByb3ApXG5cdFx0fVxuXHRcdGNvbnN0IHZhbHVlID0gc291cmNlW3Byb3BdXG5cdFx0aWYgKHN0YXRlLmZpbmFsaXplZF8gfHwgIWlzRHJhZnRhYmxlKHZhbHVlKSkge1xuXHRcdFx0cmV0dXJuIHZhbHVlXG5cdFx0fVxuXHRcdC8vIENoZWNrIGZvciBleGlzdGluZyBkcmFmdCBpbiBtb2RpZmllZCBzdGF0ZS5cblx0XHQvLyBBc3NpZ25lZCB2YWx1ZXMgYXJlIG5ldmVyIGRyYWZ0ZWQuIFRoaXMgY2F0Y2hlcyBhbnkgZHJhZnRzIHdlIGNyZWF0ZWQsIHRvby5cblx0XHRpZiAodmFsdWUgPT09IHBlZWsoc3RhdGUuYmFzZV8sIHByb3ApKSB7XG5cdFx0XHRwcmVwYXJlQ29weShzdGF0ZSlcblx0XHRcdHJldHVybiAoc3RhdGUuY29weV8hW3Byb3AgYXMgYW55XSA9IGNyZWF0ZVByb3h5KFxuXHRcdFx0XHRzdGF0ZS5zY29wZV8uaW1tZXJfLFxuXHRcdFx0XHR2YWx1ZSxcblx0XHRcdFx0c3RhdGVcblx0XHRcdCkpXG5cdFx0fVxuXHRcdHJldHVybiB2YWx1ZVxuXHR9LFxuXHRoYXMoc3RhdGUsIHByb3ApIHtcblx0XHRyZXR1cm4gcHJvcCBpbiBsYXRlc3Qoc3RhdGUpXG5cdH0sXG5cdG93bktleXMoc3RhdGUpIHtcblx0XHRyZXR1cm4gUmVmbGVjdC5vd25LZXlzKGxhdGVzdChzdGF0ZSkpXG5cdH0sXG5cdHNldChcblx0XHRzdGF0ZTogUHJveHlPYmplY3RTdGF0ZSxcblx0XHRwcm9wOiBzdHJpbmcgLyogc3RyaWN0bHkgbm90LCBidXQgaGVscHMgVFMgKi8sXG5cdFx0dmFsdWVcblx0KSB7XG5cdFx0Y29uc3QgZGVzYyA9IGdldERlc2NyaXB0b3JGcm9tUHJvdG8obGF0ZXN0KHN0YXRlKSwgcHJvcClcblx0XHRpZiAoZGVzYz8uc2V0KSB7XG5cdFx0XHQvLyBzcGVjaWFsIGNhc2U6IGlmIHRoaXMgd3JpdGUgaXMgY2FwdHVyZWQgYnkgYSBzZXR0ZXIsIHdlIGhhdmVcblx0XHRcdC8vIHRvIHRyaWdnZXIgaXQgd2l0aCB0aGUgY29ycmVjdCBjb250ZXh0XG5cdFx0XHRkZXNjLnNldC5jYWxsKHN0YXRlLmRyYWZ0XywgdmFsdWUpXG5cdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdH1cblx0XHRpZiAoIXN0YXRlLm1vZGlmaWVkXykge1xuXHRcdFx0Ly8gdGhlIGxhc3QgY2hlY2sgaXMgYmVjYXVzZSB3ZSBuZWVkIHRvIGJlIGFibGUgdG8gZGlzdGluZ3Vpc2ggc2V0dGluZyBhIG5vbi1leGlzdGluZyB0byB1bmRlZmluZWQgKHdoaWNoIGlzIGEgY2hhbmdlKVxuXHRcdFx0Ly8gZnJvbSBzZXR0aW5nIGFuIGV4aXN0aW5nIHByb3BlcnR5IHdpdGggdmFsdWUgdW5kZWZpbmVkIHRvIHVuZGVmaW5lZCAod2hpY2ggaXMgbm90IGEgY2hhbmdlKVxuXHRcdFx0Y29uc3QgY3VycmVudCA9IHBlZWsobGF0ZXN0KHN0YXRlKSwgcHJvcClcblx0XHRcdC8vIHNwZWNpYWwgY2FzZSwgaWYgd2UgYXNzaWduaW5nIHRoZSBvcmlnaW5hbCB2YWx1ZSB0byBhIGRyYWZ0LCB3ZSBjYW4gaWdub3JlIHRoZSBhc3NpZ25tZW50XG5cdFx0XHRjb25zdCBjdXJyZW50U3RhdGU6IFByb3h5T2JqZWN0U3RhdGUgPSBjdXJyZW50Py5bRFJBRlRfU1RBVEVdXG5cdFx0XHRpZiAoY3VycmVudFN0YXRlICYmIGN1cnJlbnRTdGF0ZS5iYXNlXyA9PT0gdmFsdWUpIHtcblx0XHRcdFx0c3RhdGUuY29weV8hW3Byb3BdID0gdmFsdWVcblx0XHRcdFx0c3RhdGUuYXNzaWduZWRfW3Byb3BdID0gZmFsc2Vcblx0XHRcdFx0cmV0dXJuIHRydWVcblx0XHRcdH1cblx0XHRcdGlmIChpcyh2YWx1ZSwgY3VycmVudCkgJiYgKHZhbHVlICE9PSB1bmRlZmluZWQgfHwgaGFzKHN0YXRlLmJhc2VfLCBwcm9wKSkpXG5cdFx0XHRcdHJldHVybiB0cnVlXG5cdFx0XHRwcmVwYXJlQ29weShzdGF0ZSlcblx0XHRcdG1hcmtDaGFuZ2VkKHN0YXRlKVxuXHRcdH1cblxuXHRcdGlmIChcblx0XHRcdHN0YXRlLmNvcHlfIVtwcm9wXSA9PT0gdmFsdWUgJiZcblx0XHRcdC8vIHNwZWNpYWwgY2FzZTogTmFOXG5cdFx0XHR0eXBlb2YgdmFsdWUgIT09IFwibnVtYmVyXCIgJiZcblx0XHRcdC8vIHNwZWNpYWwgY2FzZTogaGFuZGxlIG5ldyBwcm9wcyB3aXRoIHZhbHVlICd1bmRlZmluZWQnXG5cdFx0XHQodmFsdWUgIT09IHVuZGVmaW5lZCB8fCBwcm9wIGluIHN0YXRlLmNvcHlfKVxuXHRcdClcblx0XHRcdHJldHVybiB0cnVlXG5cblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0c3RhdGUuY29weV8hW3Byb3BdID0gdmFsdWVcblx0XHRzdGF0ZS5hc3NpZ25lZF9bcHJvcF0gPSB0cnVlXG5cdFx0cmV0dXJuIHRydWVcblx0fSxcblx0ZGVsZXRlUHJvcGVydHkoc3RhdGUsIHByb3A6IHN0cmluZykge1xuXHRcdC8vIFRoZSBgdW5kZWZpbmVkYCBjaGVjayBpcyBhIGZhc3QgcGF0aCBmb3IgcHJlLWV4aXN0aW5nIGtleXMuXG5cdFx0aWYgKHBlZWsoc3RhdGUuYmFzZV8sIHByb3ApICE9PSB1bmRlZmluZWQgfHwgcHJvcCBpbiBzdGF0ZS5iYXNlXykge1xuXHRcdFx0c3RhdGUuYXNzaWduZWRfW3Byb3BdID0gZmFsc2Vcblx0XHRcdHByZXBhcmVDb3B5KHN0YXRlKVxuXHRcdFx0bWFya0NoYW5nZWQoc3RhdGUpXG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGlmIGFuIG9yaWdpbmFsbHkgbm90IGFzc2lnbmVkIHByb3BlcnR5IHdhcyBkZWxldGVkXG5cdFx0XHRkZWxldGUgc3RhdGUuYXNzaWduZWRfW3Byb3BdXG5cdFx0fVxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRpZiAoc3RhdGUuY29weV8pIGRlbGV0ZSBzdGF0ZS5jb3B5X1twcm9wXVxuXHRcdHJldHVybiB0cnVlXG5cdH0sXG5cdC8vIE5vdGU6IFdlIG5ldmVyIGNvZXJjZSBgZGVzYy52YWx1ZWAgaW50byBhbiBJbW1lciBkcmFmdCwgYmVjYXVzZSB3ZSBjYW4ndCBtYWtlXG5cdC8vIHRoZSBzYW1lIGd1YXJhbnRlZSBpbiBFUzUgbW9kZS5cblx0Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHN0YXRlLCBwcm9wKSB7XG5cdFx0Y29uc3Qgb3duZXIgPSBsYXRlc3Qoc3RhdGUpXG5cdFx0Y29uc3QgZGVzYyA9IFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG93bmVyLCBwcm9wKVxuXHRcdGlmICghZGVzYykgcmV0dXJuIGRlc2Ncblx0XHRyZXR1cm4ge1xuXHRcdFx0d3JpdGFibGU6IHRydWUsXG5cdFx0XHRjb25maWd1cmFibGU6IHN0YXRlLnR5cGVfICE9PSBQcm94eVR5cGUuUHJveHlBcnJheSB8fCBwcm9wICE9PSBcImxlbmd0aFwiLFxuXHRcdFx0ZW51bWVyYWJsZTogZGVzYy5lbnVtZXJhYmxlLFxuXHRcdFx0dmFsdWU6IG93bmVyW3Byb3BdXG5cdFx0fVxuXHR9LFxuXHRkZWZpbmVQcm9wZXJ0eSgpIHtcblx0XHRkaWUoMTEpXG5cdH0sXG5cdGdldFByb3RvdHlwZU9mKHN0YXRlKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihzdGF0ZS5iYXNlXylcblx0fSxcblx0c2V0UHJvdG90eXBlT2YoKSB7XG5cdFx0ZGllKDEyKVxuXHR9XG59XG5cbi8qKlxuICogQXJyYXkgZHJhZnRzXG4gKi9cblxuY29uc3QgYXJyYXlUcmFwczogUHJveHlIYW5kbGVyPFtQcm94eUFycmF5U3RhdGVdPiA9IHt9XG5lYWNoKG9iamVjdFRyYXBzLCAoa2V5LCBmbikgPT4ge1xuXHQvLyBAdHMtaWdub3JlXG5cdGFycmF5VHJhcHNba2V5XSA9IGZ1bmN0aW9uKCkge1xuXHRcdGFyZ3VtZW50c1swXSA9IGFyZ3VtZW50c1swXVswXVxuXHRcdHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG5cdH1cbn0pXG5hcnJheVRyYXBzLmRlbGV0ZVByb3BlcnR5ID0gZnVuY3Rpb24oc3RhdGUsIHByb3ApIHtcblx0aWYgKF9fREVWX18gJiYgaXNOYU4ocGFyc2VJbnQocHJvcCBhcyBhbnkpKSkgZGllKDEzKVxuXHQvLyBAdHMtaWdub3JlXG5cdHJldHVybiBhcnJheVRyYXBzLnNldCEuY2FsbCh0aGlzLCBzdGF0ZSwgcHJvcCwgdW5kZWZpbmVkKVxufVxuYXJyYXlUcmFwcy5zZXQgPSBmdW5jdGlvbihzdGF0ZSwgcHJvcCwgdmFsdWUpIHtcblx0aWYgKF9fREVWX18gJiYgcHJvcCAhPT0gXCJsZW5ndGhcIiAmJiBpc05hTihwYXJzZUludChwcm9wIGFzIGFueSkpKSBkaWUoMTQpXG5cdHJldHVybiBvYmplY3RUcmFwcy5zZXQhLmNhbGwodGhpcywgc3RhdGVbMF0sIHByb3AsIHZhbHVlLCBzdGF0ZVswXSlcbn1cblxuLy8gQWNjZXNzIGEgcHJvcGVydHkgd2l0aG91dCBjcmVhdGluZyBhbiBJbW1lciBkcmFmdC5cbmZ1bmN0aW9uIHBlZWsoZHJhZnQ6IERyYWZ0ZWQsIHByb3A6IFByb3BlcnR5S2V5KSB7XG5cdGNvbnN0IHN0YXRlID0gZHJhZnRbRFJBRlRfU1RBVEVdXG5cdGNvbnN0IHNvdXJjZSA9IHN0YXRlID8gbGF0ZXN0KHN0YXRlKSA6IGRyYWZ0XG5cdHJldHVybiBzb3VyY2VbcHJvcF1cbn1cblxuZnVuY3Rpb24gcmVhZFByb3BGcm9tUHJvdG8oc3RhdGU6IEltbWVyU3RhdGUsIHNvdXJjZTogYW55LCBwcm9wOiBQcm9wZXJ0eUtleSkge1xuXHRjb25zdCBkZXNjID0gZ2V0RGVzY3JpcHRvckZyb21Qcm90byhzb3VyY2UsIHByb3ApXG5cdHJldHVybiBkZXNjXG5cdFx0PyBgdmFsdWVgIGluIGRlc2Ncblx0XHRcdD8gZGVzYy52YWx1ZVxuXHRcdFx0OiAvLyBUaGlzIGlzIGEgdmVyeSBzcGVjaWFsIGNhc2UsIGlmIHRoZSBwcm9wIGlzIGEgZ2V0dGVyIGRlZmluZWQgYnkgdGhlXG5cdFx0XHQgIC8vIHByb3RvdHlwZSwgd2Ugc2hvdWxkIGludm9rZSBpdCB3aXRoIHRoZSBkcmFmdCBhcyBjb250ZXh0IVxuXHRcdFx0ICBkZXNjLmdldD8uY2FsbChzdGF0ZS5kcmFmdF8pXG5cdFx0OiB1bmRlZmluZWRcbn1cblxuZnVuY3Rpb24gZ2V0RGVzY3JpcHRvckZyb21Qcm90byhcblx0c291cmNlOiBhbnksXG5cdHByb3A6IFByb3BlcnR5S2V5XG4pOiBQcm9wZXJ0eURlc2NyaXB0b3IgfCB1bmRlZmluZWQge1xuXHQvLyAnaW4nIGNoZWNrcyBwcm90byFcblx0aWYgKCEocHJvcCBpbiBzb3VyY2UpKSByZXR1cm4gdW5kZWZpbmVkXG5cdGxldCBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihzb3VyY2UpXG5cdHdoaWxlIChwcm90bykge1xuXHRcdGNvbnN0IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3RvLCBwcm9wKVxuXHRcdGlmIChkZXNjKSByZXR1cm4gZGVzY1xuXHRcdHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvKVxuXHR9XG5cdHJldHVybiB1bmRlZmluZWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hcmtDaGFuZ2VkKHN0YXRlOiBJbW1lclN0YXRlKSB7XG5cdGlmICghc3RhdGUubW9kaWZpZWRfKSB7XG5cdFx0c3RhdGUubW9kaWZpZWRfID0gdHJ1ZVxuXHRcdGlmIChzdGF0ZS5wYXJlbnRfKSB7XG5cdFx0XHRtYXJrQ2hhbmdlZChzdGF0ZS5wYXJlbnRfKVxuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlcGFyZUNvcHkoc3RhdGU6IHtiYXNlXzogYW55OyBjb3B5XzogYW55fSkge1xuXHRpZiAoIXN0YXRlLmNvcHlfKSB7XG5cdFx0c3RhdGUuY29weV8gPSBzaGFsbG93Q29weShzdGF0ZS5iYXNlXylcblx0fVxufVxuIiwgImltcG9ydCB7XG5cdElQcm9kdWNlV2l0aFBhdGNoZXMsXG5cdElQcm9kdWNlLFxuXHRJbW1lclN0YXRlLFxuXHREcmFmdGVkLFxuXHRpc0RyYWZ0YWJsZSxcblx0cHJvY2Vzc1Jlc3VsdCxcblx0UGF0Y2gsXG5cdE9iamVjdGlzaCxcblx0RFJBRlRfU1RBVEUsXG5cdERyYWZ0LFxuXHRQYXRjaExpc3RlbmVyLFxuXHRpc0RyYWZ0LFxuXHRpc01hcCxcblx0aXNTZXQsXG5cdGNyZWF0ZVByb3h5UHJveHksXG5cdGdldFBsdWdpbixcblx0ZGllLFxuXHRoYXNQcm94aWVzLFxuXHRlbnRlclNjb3BlLFxuXHRyZXZva2VTY29wZSxcblx0bGVhdmVTY29wZSxcblx0dXNlUGF0Y2hlc0luU2NvcGUsXG5cdGdldEN1cnJlbnRTY29wZSxcblx0Tk9USElORyxcblx0ZnJlZXplLFxuXHRjdXJyZW50XG59IGZyb20gXCIuLi9pbnRlcm5hbFwiXG5cbmludGVyZmFjZSBQcm9kdWNlcnNGbnMge1xuXHRwcm9kdWNlOiBJUHJvZHVjZVxuXHRwcm9kdWNlV2l0aFBhdGNoZXM6IElQcm9kdWNlV2l0aFBhdGNoZXNcbn1cblxuZXhwb3J0IGNsYXNzIEltbWVyIGltcGxlbWVudHMgUHJvZHVjZXJzRm5zIHtcblx0dXNlUHJveGllc186IGJvb2xlYW4gPSBoYXNQcm94aWVzXG5cblx0YXV0b0ZyZWV6ZV86IGJvb2xlYW4gPSB0cnVlXG5cblx0Y29uc3RydWN0b3IoY29uZmlnPzoge3VzZVByb3hpZXM/OiBib29sZWFuOyBhdXRvRnJlZXplPzogYm9vbGVhbn0pIHtcblx0XHRpZiAodHlwZW9mIGNvbmZpZz8udXNlUHJveGllcyA9PT0gXCJib29sZWFuXCIpXG5cdFx0XHR0aGlzLnNldFVzZVByb3hpZXMoY29uZmlnIS51c2VQcm94aWVzKVxuXHRcdGlmICh0eXBlb2YgY29uZmlnPy5hdXRvRnJlZXplID09PSBcImJvb2xlYW5cIilcblx0XHRcdHRoaXMuc2V0QXV0b0ZyZWV6ZShjb25maWchLmF1dG9GcmVlemUpXG5cdH1cblxuXHQvKipcblx0ICogVGhlIGBwcm9kdWNlYCBmdW5jdGlvbiB0YWtlcyBhIHZhbHVlIGFuZCBhIFwicmVjaXBlIGZ1bmN0aW9uXCIgKHdob3NlXG5cdCAqIHJldHVybiB2YWx1ZSBvZnRlbiBkZXBlbmRzIG9uIHRoZSBiYXNlIHN0YXRlKS4gVGhlIHJlY2lwZSBmdW5jdGlvbiBpc1xuXHQgKiBmcmVlIHRvIG11dGF0ZSBpdHMgZmlyc3QgYXJndW1lbnQgaG93ZXZlciBpdCB3YW50cy4gQWxsIG11dGF0aW9ucyBhcmVcblx0ICogb25seSBldmVyIGFwcGxpZWQgdG8gYSBfX2NvcHlfXyBvZiB0aGUgYmFzZSBzdGF0ZS5cblx0ICpcblx0ICogUGFzcyBvbmx5IGEgZnVuY3Rpb24gdG8gY3JlYXRlIGEgXCJjdXJyaWVkIHByb2R1Y2VyXCIgd2hpY2ggcmVsaWV2ZXMgeW91XG5cdCAqIGZyb20gcGFzc2luZyB0aGUgcmVjaXBlIGZ1bmN0aW9uIGV2ZXJ5IHRpbWUuXG5cdCAqXG5cdCAqIE9ubHkgcGxhaW4gb2JqZWN0cyBhbmQgYXJyYXlzIGFyZSBtYWRlIG11dGFibGUuIEFsbCBvdGhlciBvYmplY3RzIGFyZVxuXHQgKiBjb25zaWRlcmVkIHVuY29weWFibGUuXG5cdCAqXG5cdCAqIE5vdGU6IFRoaXMgZnVuY3Rpb24gaXMgX19ib3VuZF9fIHRvIGl0cyBgSW1tZXJgIGluc3RhbmNlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge2FueX0gYmFzZSAtIHRoZSBpbml0aWFsIHN0YXRlXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IHByb2R1Y2VyIC0gZnVuY3Rpb24gdGhhdCByZWNlaXZlcyBhIHByb3h5IG9mIHRoZSBiYXNlIHN0YXRlIGFzIGZpcnN0IGFyZ3VtZW50IGFuZCB3aGljaCBjYW4gYmUgZnJlZWx5IG1vZGlmaWVkXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IHBhdGNoTGlzdGVuZXIgLSBvcHRpb25hbCBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIHdpdGggYWxsIHRoZSBwYXRjaGVzIHByb2R1Y2VkIGhlcmVcblx0ICogQHJldHVybnMge2FueX0gYSBuZXcgc3RhdGUsIG9yIHRoZSBpbml0aWFsIHN0YXRlIGlmIG5vdGhpbmcgd2FzIG1vZGlmaWVkXG5cdCAqL1xuXHRwcm9kdWNlOiBJUHJvZHVjZSA9IChiYXNlOiBhbnksIHJlY2lwZT86IGFueSwgcGF0Y2hMaXN0ZW5lcj86IGFueSkgPT4ge1xuXHRcdC8vIGN1cnJpZWQgaW52b2NhdGlvblxuXHRcdGlmICh0eXBlb2YgYmFzZSA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiByZWNpcGUgIT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0Y29uc3QgZGVmYXVsdEJhc2UgPSByZWNpcGVcblx0XHRcdHJlY2lwZSA9IGJhc2VcblxuXHRcdFx0Y29uc3Qgc2VsZiA9IHRoaXNcblx0XHRcdHJldHVybiBmdW5jdGlvbiBjdXJyaWVkUHJvZHVjZShcblx0XHRcdFx0dGhpczogYW55LFxuXHRcdFx0XHRiYXNlID0gZGVmYXVsdEJhc2UsXG5cdFx0XHRcdC4uLmFyZ3M6IGFueVtdXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIHNlbGYucHJvZHVjZShiYXNlLCAoZHJhZnQ6IERyYWZ0ZWQpID0+IHJlY2lwZS5jYWxsKHRoaXMsIGRyYWZ0LCAuLi5hcmdzKSkgLy8gcHJldHRpZXItaWdub3JlXG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiByZWNpcGUgIT09IFwiZnVuY3Rpb25cIikgZGllKDYpXG5cdFx0aWYgKHBhdGNoTGlzdGVuZXIgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgcGF0Y2hMaXN0ZW5lciAhPT0gXCJmdW5jdGlvblwiKVxuXHRcdFx0ZGllKDcpXG5cblx0XHRsZXQgcmVzdWx0XG5cblx0XHQvLyBPbmx5IHBsYWluIG9iamVjdHMsIGFycmF5cywgYW5kIFwiaW1tZXJhYmxlIGNsYXNzZXNcIiBhcmUgZHJhZnRlZC5cblx0XHRpZiAoaXNEcmFmdGFibGUoYmFzZSkpIHtcblx0XHRcdGNvbnN0IHNjb3BlID0gZW50ZXJTY29wZSh0aGlzKVxuXHRcdFx0Y29uc3QgcHJveHkgPSBjcmVhdGVQcm94eSh0aGlzLCBiYXNlLCB1bmRlZmluZWQpXG5cdFx0XHRsZXQgaGFzRXJyb3IgPSB0cnVlXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRyZXN1bHQgPSByZWNpcGUocHJveHkpXG5cdFx0XHRcdGhhc0Vycm9yID0gZmFsc2Vcblx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdC8vIGZpbmFsbHkgaW5zdGVhZCBvZiBjYXRjaCArIHJldGhyb3cgYmV0dGVyIHByZXNlcnZlcyBvcmlnaW5hbCBzdGFja1xuXHRcdFx0XHRpZiAoaGFzRXJyb3IpIHJldm9rZVNjb3BlKHNjb3BlKVxuXHRcdFx0XHRlbHNlIGxlYXZlU2NvcGUoc2NvcGUpXG5cdFx0XHR9XG5cdFx0XHRpZiAodHlwZW9mIFByb21pc2UgIT09IFwidW5kZWZpbmVkXCIgJiYgcmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0LnRoZW4oXG5cdFx0XHRcdFx0cmVzdWx0ID0+IHtcblx0XHRcdFx0XHRcdHVzZVBhdGNoZXNJblNjb3BlKHNjb3BlLCBwYXRjaExpc3RlbmVyKVxuXHRcdFx0XHRcdFx0cmV0dXJuIHByb2Nlc3NSZXN1bHQocmVzdWx0LCBzY29wZSlcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGVycm9yID0+IHtcblx0XHRcdFx0XHRcdHJldm9rZVNjb3BlKHNjb3BlKVxuXHRcdFx0XHRcdFx0dGhyb3cgZXJyb3Jcblx0XHRcdFx0XHR9XG5cdFx0XHRcdClcblx0XHRcdH1cblx0XHRcdHVzZVBhdGNoZXNJblNjb3BlKHNjb3BlLCBwYXRjaExpc3RlbmVyKVxuXHRcdFx0cmV0dXJuIHByb2Nlc3NSZXN1bHQocmVzdWx0LCBzY29wZSlcblx0XHR9IGVsc2UgaWYgKCFiYXNlIHx8IHR5cGVvZiBiYXNlICE9PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRyZXN1bHQgPSByZWNpcGUoYmFzZSlcblx0XHRcdGlmIChyZXN1bHQgPT09IHVuZGVmaW5lZCkgcmVzdWx0ID0gYmFzZVxuXHRcdFx0aWYgKHJlc3VsdCA9PT0gTk9USElORykgcmVzdWx0ID0gdW5kZWZpbmVkXG5cdFx0XHRpZiAodGhpcy5hdXRvRnJlZXplXykgZnJlZXplKHJlc3VsdCwgdHJ1ZSlcblx0XHRcdGlmIChwYXRjaExpc3RlbmVyKSB7XG5cdFx0XHRcdGNvbnN0IHA6IFBhdGNoW10gPSBbXVxuXHRcdFx0XHRjb25zdCBpcDogUGF0Y2hbXSA9IFtdXG5cdFx0XHRcdGdldFBsdWdpbihcIlBhdGNoZXNcIikuZ2VuZXJhdGVSZXBsYWNlbWVudFBhdGNoZXNfKGJhc2UsIHJlc3VsdCwgcCwgaXApXG5cdFx0XHRcdHBhdGNoTGlzdGVuZXIocCwgaXApXG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzdWx0XG5cdFx0fSBlbHNlIGRpZSgyMSwgYmFzZSlcblx0fVxuXG5cdHByb2R1Y2VXaXRoUGF0Y2hlczogSVByb2R1Y2VXaXRoUGF0Y2hlcyA9IChcblx0XHRhcmcxOiBhbnksXG5cdFx0YXJnMj86IGFueSxcblx0XHRhcmczPzogYW55XG5cdCk6IGFueSA9PiB7XG5cdFx0aWYgKHR5cGVvZiBhcmcxID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdHJldHVybiAoc3RhdGU6IGFueSwgLi4uYXJnczogYW55W10pID0+XG5cdFx0XHRcdHRoaXMucHJvZHVjZVdpdGhQYXRjaGVzKHN0YXRlLCAoZHJhZnQ6IGFueSkgPT4gYXJnMShkcmFmdCwgLi4uYXJncykpXG5cdFx0fVxuXG5cdFx0bGV0IHBhdGNoZXM6IFBhdGNoW10sIGludmVyc2VQYXRjaGVzOiBQYXRjaFtdXG5cdFx0Y29uc3QgcmVzdWx0ID0gdGhpcy5wcm9kdWNlKGFyZzEsIGFyZzIsIChwOiBQYXRjaFtdLCBpcDogUGF0Y2hbXSkgPT4ge1xuXHRcdFx0cGF0Y2hlcyA9IHBcblx0XHRcdGludmVyc2VQYXRjaGVzID0gaXBcblx0XHR9KVxuXG5cdFx0aWYgKHR5cGVvZiBQcm9taXNlICE9PSBcInVuZGVmaW5lZFwiICYmIHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcblx0XHRcdHJldHVybiByZXN1bHQudGhlbihuZXh0U3RhdGUgPT4gW25leHRTdGF0ZSwgcGF0Y2hlcyEsIGludmVyc2VQYXRjaGVzIV0pXG5cdFx0fVxuXHRcdHJldHVybiBbcmVzdWx0LCBwYXRjaGVzISwgaW52ZXJzZVBhdGNoZXMhXVxuXHR9XG5cblx0Y3JlYXRlRHJhZnQ8VCBleHRlbmRzIE9iamVjdGlzaD4oYmFzZTogVCk6IERyYWZ0PFQ+IHtcblx0XHRpZiAoIWlzRHJhZnRhYmxlKGJhc2UpKSBkaWUoOClcblx0XHRpZiAoaXNEcmFmdChiYXNlKSkgYmFzZSA9IGN1cnJlbnQoYmFzZSlcblx0XHRjb25zdCBzY29wZSA9IGVudGVyU2NvcGUodGhpcylcblx0XHRjb25zdCBwcm94eSA9IGNyZWF0ZVByb3h5KHRoaXMsIGJhc2UsIHVuZGVmaW5lZClcblx0XHRwcm94eVtEUkFGVF9TVEFURV0uaXNNYW51YWxfID0gdHJ1ZVxuXHRcdGxlYXZlU2NvcGUoc2NvcGUpXG5cdFx0cmV0dXJuIHByb3h5IGFzIGFueVxuXHR9XG5cblx0ZmluaXNoRHJhZnQ8RCBleHRlbmRzIERyYWZ0PGFueT4+KFxuXHRcdGRyYWZ0OiBELFxuXHRcdHBhdGNoTGlzdGVuZXI/OiBQYXRjaExpc3RlbmVyXG5cdCk6IEQgZXh0ZW5kcyBEcmFmdDxpbmZlciBUPiA/IFQgOiBuZXZlciB7XG5cdFx0Y29uc3Qgc3RhdGU6IEltbWVyU3RhdGUgPSBkcmFmdCAmJiAoZHJhZnQgYXMgYW55KVtEUkFGVF9TVEFURV1cblx0XHRpZiAoX19ERVZfXykge1xuXHRcdFx0aWYgKCFzdGF0ZSB8fCAhc3RhdGUuaXNNYW51YWxfKSBkaWUoOSlcblx0XHRcdGlmIChzdGF0ZS5maW5hbGl6ZWRfKSBkaWUoMTApXG5cdFx0fVxuXHRcdGNvbnN0IHtzY29wZV86IHNjb3BlfSA9IHN0YXRlXG5cdFx0dXNlUGF0Y2hlc0luU2NvcGUoc2NvcGUsIHBhdGNoTGlzdGVuZXIpXG5cdFx0cmV0dXJuIHByb2Nlc3NSZXN1bHQodW5kZWZpbmVkLCBzY29wZSlcblx0fVxuXG5cdC8qKlxuXHQgKiBQYXNzIHRydWUgdG8gYXV0b21hdGljYWxseSBmcmVlemUgYWxsIGNvcGllcyBjcmVhdGVkIGJ5IEltbWVyLlxuXHQgKlxuXHQgKiBCeSBkZWZhdWx0LCBhdXRvLWZyZWV6aW5nIGlzIGVuYWJsZWQuXG5cdCAqL1xuXHRzZXRBdXRvRnJlZXplKHZhbHVlOiBib29sZWFuKSB7XG5cdFx0dGhpcy5hdXRvRnJlZXplXyA9IHZhbHVlXG5cdH1cblxuXHQvKipcblx0ICogUGFzcyB0cnVlIHRvIHVzZSB0aGUgRVMyMDE1IGBQcm94eWAgY2xhc3Mgd2hlbiBjcmVhdGluZyBkcmFmdHMsIHdoaWNoIGlzXG5cdCAqIGFsd2F5cyBmYXN0ZXIgdGhhbiB1c2luZyBFUzUgcHJveGllcy5cblx0ICpcblx0ICogQnkgZGVmYXVsdCwgZmVhdHVyZSBkZXRlY3Rpb24gaXMgdXNlZCwgc28gY2FsbGluZyB0aGlzIGlzIHJhcmVseSBuZWNlc3NhcnkuXG5cdCAqL1xuXHRzZXRVc2VQcm94aWVzKHZhbHVlOiBib29sZWFuKSB7XG5cdFx0aWYgKHZhbHVlICYmICFoYXNQcm94aWVzKSB7XG5cdFx0XHRkaWUoMjApXG5cdFx0fVxuXHRcdHRoaXMudXNlUHJveGllc18gPSB2YWx1ZVxuXHR9XG5cblx0YXBwbHlQYXRjaGVzPFQgZXh0ZW5kcyBPYmplY3Rpc2g+KGJhc2U6IFQsIHBhdGNoZXM6IFBhdGNoW10pOiBUIHtcblx0XHQvLyBJZiBhIHBhdGNoIHJlcGxhY2VzIHRoZSBlbnRpcmUgc3RhdGUsIHRha2UgdGhhdCByZXBsYWNlbWVudCBhcyBiYXNlXG5cdFx0Ly8gYmVmb3JlIGFwcGx5aW5nIHBhdGNoZXNcblx0XHRsZXQgaTogbnVtYmVyXG5cdFx0Zm9yIChpID0gcGF0Y2hlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuXHRcdFx0Y29uc3QgcGF0Y2ggPSBwYXRjaGVzW2ldXG5cdFx0XHRpZiAocGF0Y2gucGF0aC5sZW5ndGggPT09IDAgJiYgcGF0Y2gub3AgPT09IFwicmVwbGFjZVwiKSB7XG5cdFx0XHRcdGJhc2UgPSBwYXRjaC52YWx1ZVxuXHRcdFx0XHRicmVha1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvLyBJZiB0aGVyZSB3YXMgYSBwYXRjaCB0aGF0IHJlcGxhY2VkIHRoZSBlbnRpcmUgc3RhdGUsIHN0YXJ0IGZyb20gdGhlXG5cdFx0Ly8gcGF0Y2ggYWZ0ZXIgdGhhdC5cblx0XHRpZiAoaSA+IC0xKSB7XG5cdFx0XHRwYXRjaGVzID0gcGF0Y2hlcy5zbGljZShpICsgMSlcblx0XHR9XG5cblx0XHRjb25zdCBhcHBseVBhdGNoZXNJbXBsID0gZ2V0UGx1Z2luKFwiUGF0Y2hlc1wiKS5hcHBseVBhdGNoZXNfXG5cdFx0aWYgKGlzRHJhZnQoYmFzZSkpIHtcblx0XHRcdC8vIE4uQjogbmV2ZXIgaGl0cyBpZiBzb21lIHBhdGNoIGEgcmVwbGFjZW1lbnQsIHBhdGNoZXMgYXJlIG5ldmVyIGRyYWZ0c1xuXHRcdFx0cmV0dXJuIGFwcGx5UGF0Y2hlc0ltcGwoYmFzZSwgcGF0Y2hlcylcblx0XHR9XG5cdFx0Ly8gT3RoZXJ3aXNlLCBwcm9kdWNlIGEgY29weSBvZiB0aGUgYmFzZSBzdGF0ZS5cblx0XHRyZXR1cm4gdGhpcy5wcm9kdWNlKGJhc2UsIChkcmFmdDogRHJhZnRlZCkgPT5cblx0XHRcdGFwcGx5UGF0Y2hlc0ltcGwoZHJhZnQsIHBhdGNoZXMpXG5cdFx0KVxuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQcm94eTxUIGV4dGVuZHMgT2JqZWN0aXNoPihcblx0aW1tZXI6IEltbWVyLFxuXHR2YWx1ZTogVCxcblx0cGFyZW50PzogSW1tZXJTdGF0ZVxuKTogRHJhZnRlZDxULCBJbW1lclN0YXRlPiB7XG5cdC8vIHByZWNvbmRpdGlvbjogY3JlYXRlUHJveHkgc2hvdWxkIGJlIGd1YXJkZWQgYnkgaXNEcmFmdGFibGUsIHNvIHdlIGtub3cgd2UgY2FuIHNhZmVseSBkcmFmdFxuXHRjb25zdCBkcmFmdDogRHJhZnRlZCA9IGlzTWFwKHZhbHVlKVxuXHRcdD8gZ2V0UGx1Z2luKFwiTWFwU2V0XCIpLnByb3h5TWFwXyh2YWx1ZSwgcGFyZW50KVxuXHRcdDogaXNTZXQodmFsdWUpXG5cdFx0PyBnZXRQbHVnaW4oXCJNYXBTZXRcIikucHJveHlTZXRfKHZhbHVlLCBwYXJlbnQpXG5cdFx0OiBpbW1lci51c2VQcm94aWVzX1xuXHRcdD8gY3JlYXRlUHJveHlQcm94eSh2YWx1ZSwgcGFyZW50KVxuXHRcdDogZ2V0UGx1Z2luKFwiRVM1XCIpLmNyZWF0ZUVTNVByb3h5Xyh2YWx1ZSwgcGFyZW50KVxuXG5cdGNvbnN0IHNjb3BlID0gcGFyZW50ID8gcGFyZW50LnNjb3BlXyA6IGdldEN1cnJlbnRTY29wZSgpXG5cdHNjb3BlLmRyYWZ0c18ucHVzaChkcmFmdClcblx0cmV0dXJuIGRyYWZ0XG59XG4iLCAiaW1wb3J0IHtcblx0ZGllLFxuXHRpc0RyYWZ0LFxuXHRzaGFsbG93Q29weSxcblx0ZWFjaCxcblx0RFJBRlRfU1RBVEUsXG5cdGdldCxcblx0c2V0LFxuXHRJbW1lclN0YXRlLFxuXHRpc0RyYWZ0YWJsZSxcblx0QXJjaHR5cGUsXG5cdGdldEFyY2h0eXBlLFxuXHRnZXRQbHVnaW5cbn0gZnJvbSBcIi4uL2ludGVybmFsXCJcblxuLyoqIFRha2VzIGEgc25hcHNob3Qgb2YgdGhlIGN1cnJlbnQgc3RhdGUgb2YgYSBkcmFmdCBhbmQgZmluYWxpemVzIGl0IChidXQgd2l0aG91dCBmcmVlemluZykuIFRoaXMgaXMgYSBncmVhdCB1dGlsaXR5IHRvIHByaW50IHRoZSBjdXJyZW50IHN0YXRlIGR1cmluZyBkZWJ1Z2dpbmcgKG5vIFByb3hpZXMgaW4gdGhlIHdheSkuIFRoZSBvdXRwdXQgb2YgY3VycmVudCBjYW4gYWxzbyBiZSBzYWZlbHkgbGVha2VkIG91dHNpZGUgdGhlIHByb2R1Y2VyLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGN1cnJlbnQ8VD4odmFsdWU6IFQpOiBUXG5leHBvcnQgZnVuY3Rpb24gY3VycmVudCh2YWx1ZTogYW55KTogYW55IHtcblx0aWYgKCFpc0RyYWZ0KHZhbHVlKSkgZGllKDIyLCB2YWx1ZSlcblx0cmV0dXJuIGN1cnJlbnRJbXBsKHZhbHVlKVxufVxuXG5mdW5jdGlvbiBjdXJyZW50SW1wbCh2YWx1ZTogYW55KTogYW55IHtcblx0aWYgKCFpc0RyYWZ0YWJsZSh2YWx1ZSkpIHJldHVybiB2YWx1ZVxuXHRjb25zdCBzdGF0ZTogSW1tZXJTdGF0ZSB8IHVuZGVmaW5lZCA9IHZhbHVlW0RSQUZUX1NUQVRFXVxuXHRsZXQgY29weTogYW55XG5cdGNvbnN0IGFyY2hUeXBlID0gZ2V0QXJjaHR5cGUodmFsdWUpXG5cdGlmIChzdGF0ZSkge1xuXHRcdGlmIChcblx0XHRcdCFzdGF0ZS5tb2RpZmllZF8gJiZcblx0XHRcdChzdGF0ZS50eXBlXyA8IDQgfHwgIWdldFBsdWdpbihcIkVTNVwiKS5oYXNDaGFuZ2VzXyhzdGF0ZSBhcyBhbnkpKVxuXHRcdClcblx0XHRcdHJldHVybiBzdGF0ZS5iYXNlX1xuXHRcdC8vIE9wdGltaXphdGlvbjogYXZvaWQgZ2VuZXJhdGluZyBuZXcgZHJhZnRzIGR1cmluZyBjb3B5aW5nXG5cdFx0c3RhdGUuZmluYWxpemVkXyA9IHRydWVcblx0XHRjb3B5ID0gY29weUhlbHBlcih2YWx1ZSwgYXJjaFR5cGUpXG5cdFx0c3RhdGUuZmluYWxpemVkXyA9IGZhbHNlXG5cdH0gZWxzZSB7XG5cdFx0Y29weSA9IGNvcHlIZWxwZXIodmFsdWUsIGFyY2hUeXBlKVxuXHR9XG5cblx0ZWFjaChjb3B5LCAoa2V5LCBjaGlsZFZhbHVlKSA9PiB7XG5cdFx0aWYgKHN0YXRlICYmIGdldChzdGF0ZS5iYXNlXywga2V5KSA9PT0gY2hpbGRWYWx1ZSkgcmV0dXJuIC8vIG5vIG5lZWQgdG8gY29weSBvciBzZWFyY2ggaW4gc29tZXRoaW5nIHRoYXQgZGlkbid0IGNoYW5nZVxuXHRcdHNldChjb3B5LCBrZXksIGN1cnJlbnRJbXBsKGNoaWxkVmFsdWUpKVxuXHR9KVxuXHQvLyBJbiB0aGUgZnV0dXJlLCB3ZSBtaWdodCBjb25zaWRlciBmcmVlemluZyBoZXJlLCBiYXNlZCBvbiB0aGUgY3VycmVudCBzZXR0aW5nc1xuXHRyZXR1cm4gYXJjaFR5cGUgPT09IEFyY2h0eXBlLlNldCA/IG5ldyBTZXQoY29weSkgOiBjb3B5XG59XG5cbmZ1bmN0aW9uIGNvcHlIZWxwZXIodmFsdWU6IGFueSwgYXJjaFR5cGU6IG51bWJlcik6IGFueSB7XG5cdC8vIGNyZWF0ZXMgYSBzaGFsbG93IGNvcHksIGV2ZW4gaWYgaXQgaXMgYSBtYXAgb3Igc2V0XG5cdHN3aXRjaCAoYXJjaFR5cGUpIHtcblx0XHRjYXNlIEFyY2h0eXBlLk1hcDpcblx0XHRcdHJldHVybiBuZXcgTWFwKHZhbHVlKVxuXHRcdGNhc2UgQXJjaHR5cGUuU2V0OlxuXHRcdFx0Ly8gU2V0IHdpbGwgYmUgY2xvbmVkIGFzIGFycmF5IHRlbXBvcmFyaWx5LCBzbyB0aGF0IHdlIGNhbiByZXBsYWNlIGluZGl2aWR1YWwgaXRlbXNcblx0XHRcdHJldHVybiBBcnJheS5mcm9tKHZhbHVlKVxuXHR9XG5cdHJldHVybiBzaGFsbG93Q29weSh2YWx1ZSlcbn1cbiIsICJpbXBvcnQge1xuXHRJbW1lclN0YXRlLFxuXHREcmFmdGVkLFxuXHRFUzVBcnJheVN0YXRlLFxuXHRFUzVPYmplY3RTdGF0ZSxcblx0ZWFjaCxcblx0aGFzLFxuXHRpc0RyYWZ0LFxuXHRsYXRlc3QsXG5cdERSQUZUX1NUQVRFLFxuXHRpcyxcblx0bG9hZFBsdWdpbixcblx0SW1tZXJTY29wZSxcblx0UHJveHlUeXBlLFxuXHRnZXRDdXJyZW50U2NvcGUsXG5cdGRpZSxcblx0bWFya0NoYW5nZWQsXG5cdG9iamVjdFRyYXBzLFxuXHRvd25LZXlzLFxuXHRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzXG59IGZyb20gXCIuLi9pbnRlcm5hbFwiXG5cbnR5cGUgRVM1U3RhdGUgPSBFUzVBcnJheVN0YXRlIHwgRVM1T2JqZWN0U3RhdGVcblxuZXhwb3J0IGZ1bmN0aW9uIGVuYWJsZUVTNSgpIHtcblx0ZnVuY3Rpb24gd2lsbEZpbmFsaXplRVM1Xyhcblx0XHRzY29wZTogSW1tZXJTY29wZSxcblx0XHRyZXN1bHQ6IGFueSxcblx0XHRpc1JlcGxhY2VkOiBib29sZWFuXG5cdCkge1xuXHRcdGlmICghaXNSZXBsYWNlZCkge1xuXHRcdFx0aWYgKHNjb3BlLnBhdGNoZXNfKSB7XG5cdFx0XHRcdG1hcmtDaGFuZ2VzUmVjdXJzaXZlbHkoc2NvcGUuZHJhZnRzXyFbMF0pXG5cdFx0XHR9XG5cdFx0XHQvLyBUaGlzIGlzIGZhc3RlciB3aGVuIHdlIGRvbid0IGNhcmUgYWJvdXQgd2hpY2ggYXR0cmlidXRlcyBjaGFuZ2VkLlxuXHRcdFx0bWFya0NoYW5nZXNTd2VlcChzY29wZS5kcmFmdHNfKVxuXHRcdH1cblx0XHQvLyBXaGVuIGEgY2hpbGQgZHJhZnQgaXMgcmV0dXJuZWQsIGxvb2sgZm9yIGNoYW5nZXMuXG5cdFx0ZWxzZSBpZiAoXG5cdFx0XHRpc0RyYWZ0KHJlc3VsdCkgJiZcblx0XHRcdChyZXN1bHRbRFJBRlRfU1RBVEVdIGFzIEVTNVN0YXRlKS5zY29wZV8gPT09IHNjb3BlXG5cdFx0KSB7XG5cdFx0XHRtYXJrQ2hhbmdlc1N3ZWVwKHNjb3BlLmRyYWZ0c18pXG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gY3JlYXRlRVM1RHJhZnQoaXNBcnJheTogYm9vbGVhbiwgYmFzZTogYW55KSB7XG5cdFx0aWYgKGlzQXJyYXkpIHtcblx0XHRcdGNvbnN0IGRyYWZ0ID0gbmV3IEFycmF5KGJhc2UubGVuZ3RoKVxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBiYXNlLmxlbmd0aDsgaSsrKVxuXHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZHJhZnQsIFwiXCIgKyBpLCBwcm94eVByb3BlcnR5KGksIHRydWUpKVxuXHRcdFx0cmV0dXJuIGRyYWZ0XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IGRlc2NyaXB0b3JzID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhiYXNlKVxuXHRcdFx0ZGVsZXRlIGRlc2NyaXB0b3JzW0RSQUZUX1NUQVRFIGFzIGFueV1cblx0XHRcdGNvbnN0IGtleXMgPSBvd25LZXlzKGRlc2NyaXB0b3JzKVxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGNvbnN0IGtleTogYW55ID0ga2V5c1tpXVxuXHRcdFx0XHRkZXNjcmlwdG9yc1trZXldID0gcHJveHlQcm9wZXJ0eShcblx0XHRcdFx0XHRrZXksXG5cdFx0XHRcdFx0aXNBcnJheSB8fCAhIWRlc2NyaXB0b3JzW2tleV0uZW51bWVyYWJsZVxuXHRcdFx0XHQpXG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gT2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YoYmFzZSksIGRlc2NyaXB0b3JzKVxuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIGNyZWF0ZUVTNVByb3h5XzxUPihcblx0XHRiYXNlOiBULFxuXHRcdHBhcmVudD86IEltbWVyU3RhdGVcblx0KTogRHJhZnRlZDxULCBFUzVPYmplY3RTdGF0ZSB8IEVTNUFycmF5U3RhdGU+IHtcblx0XHRjb25zdCBpc0FycmF5ID0gQXJyYXkuaXNBcnJheShiYXNlKVxuXHRcdGNvbnN0IGRyYWZ0ID0gY3JlYXRlRVM1RHJhZnQoaXNBcnJheSwgYmFzZSlcblxuXHRcdGNvbnN0IHN0YXRlOiBFUzVPYmplY3RTdGF0ZSB8IEVTNUFycmF5U3RhdGUgPSB7XG5cdFx0XHR0eXBlXzogaXNBcnJheSA/IFByb3h5VHlwZS5FUzVBcnJheSA6IChQcm94eVR5cGUuRVM1T2JqZWN0IGFzIGFueSksXG5cdFx0XHRzY29wZV86IHBhcmVudCA/IHBhcmVudC5zY29wZV8gOiBnZXRDdXJyZW50U2NvcGUoKSxcblx0XHRcdG1vZGlmaWVkXzogZmFsc2UsXG5cdFx0XHRmaW5hbGl6ZWRfOiBmYWxzZSxcblx0XHRcdGFzc2lnbmVkXzoge30sXG5cdFx0XHRwYXJlbnRfOiBwYXJlbnQsXG5cdFx0XHQvLyBiYXNlIGlzIHRoZSBvYmplY3Qgd2UgYXJlIGRyYWZ0aW5nXG5cdFx0XHRiYXNlXzogYmFzZSxcblx0XHRcdC8vIGRyYWZ0IGlzIHRoZSBkcmFmdCBvYmplY3QgaXRzZWxmLCB0aGF0IHRyYXBzIGFsbCByZWFkcyBhbmQgcmVhZHMgZnJvbSBlaXRoZXIgdGhlIGJhc2UgKGlmIHVubW9kaWZpZWQpIG9yIGNvcHkgKGlmIG1vZGlmaWVkKVxuXHRcdFx0ZHJhZnRfOiBkcmFmdCxcblx0XHRcdGNvcHlfOiBudWxsLFxuXHRcdFx0cmV2b2tlZF86IGZhbHNlLFxuXHRcdFx0aXNNYW51YWxfOiBmYWxzZVxuXHRcdH1cblxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkcmFmdCwgRFJBRlRfU1RBVEUsIHtcblx0XHRcdHZhbHVlOiBzdGF0ZSxcblx0XHRcdC8vIGVudW1lcmFibGU6IGZhbHNlIDwtIHRoZSBkZWZhdWx0XG5cdFx0XHR3cml0YWJsZTogdHJ1ZVxuXHRcdH0pXG5cdFx0cmV0dXJuIGRyYWZ0XG5cdH1cblxuXHQvLyBwcm9wZXJ0eSBkZXNjcmlwdG9ycyBhcmUgcmVjeWNsZWQgdG8gbWFrZSBzdXJlIHdlIGRvbid0IGNyZWF0ZSBhIGdldCBhbmQgc2V0IGNsb3N1cmUgcGVyIHByb3BlcnR5LFxuXHQvLyBidXQgc2hhcmUgdGhlbSBhbGwgaW5zdGVhZFxuXHRjb25zdCBkZXNjcmlwdG9yczoge1twcm9wOiBzdHJpbmddOiBQcm9wZXJ0eURlc2NyaXB0b3J9ID0ge31cblxuXHRmdW5jdGlvbiBwcm94eVByb3BlcnR5KFxuXHRcdHByb3A6IHN0cmluZyB8IG51bWJlcixcblx0XHRlbnVtZXJhYmxlOiBib29sZWFuXG5cdCk6IFByb3BlcnR5RGVzY3JpcHRvciB7XG5cdFx0bGV0IGRlc2MgPSBkZXNjcmlwdG9yc1twcm9wXVxuXHRcdGlmIChkZXNjKSB7XG5cdFx0XHRkZXNjLmVudW1lcmFibGUgPSBlbnVtZXJhYmxlXG5cdFx0fSBlbHNlIHtcblx0XHRcdGRlc2NyaXB0b3JzW3Byb3BdID0gZGVzYyA9IHtcblx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRlbnVtZXJhYmxlLFxuXHRcdFx0XHRnZXQodGhpczogYW55KSB7XG5cdFx0XHRcdFx0Y29uc3Qgc3RhdGUgPSB0aGlzW0RSQUZUX1NUQVRFXVxuXHRcdFx0XHRcdGlmIChfX0RFVl9fKSBhc3NlcnRVbnJldm9rZWQoc3RhdGUpXG5cdFx0XHRcdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdFx0XHRcdHJldHVybiBvYmplY3RUcmFwcy5nZXQoc3RhdGUsIHByb3ApXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHNldCh0aGlzOiBhbnksIHZhbHVlKSB7XG5cdFx0XHRcdFx0Y29uc3Qgc3RhdGUgPSB0aGlzW0RSQUZUX1NUQVRFXVxuXHRcdFx0XHRcdGlmIChfX0RFVl9fKSBhc3NlcnRVbnJldm9rZWQoc3RhdGUpXG5cdFx0XHRcdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdFx0XHRcdG9iamVjdFRyYXBzLnNldChzdGF0ZSwgcHJvcCwgdmFsdWUpXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGRlc2Ncblx0fVxuXG5cdC8vIFRoaXMgbG9va3MgZXhwZW5zaXZlLCBidXQgb25seSBwcm94aWVzIGFyZSB2aXNpdGVkLCBhbmQgb25seSBvYmplY3RzIHdpdGhvdXQga25vd24gY2hhbmdlcyBhcmUgc2Nhbm5lZC5cblx0ZnVuY3Rpb24gbWFya0NoYW5nZXNTd2VlcChkcmFmdHM6IERyYWZ0ZWQ8YW55LCBJbW1lclN0YXRlPltdKSB7XG5cdFx0Ly8gVGhlIG5hdHVyYWwgb3JkZXIgb2YgZHJhZnRzIGluIHRoZSBgc2NvcGVgIGFycmF5IGlzIGJhc2VkIG9uIHdoZW4gdGhleVxuXHRcdC8vIHdlcmUgYWNjZXNzZWQuIEJ5IHByb2Nlc3NpbmcgZHJhZnRzIGluIHJldmVyc2UgbmF0dXJhbCBvcmRlciwgd2UgaGF2ZSBhXG5cdFx0Ly8gYmV0dGVyIGNoYW5jZSBvZiBwcm9jZXNzaW5nIGxlYWYgbm9kZXMgZmlyc3QuIFdoZW4gYSBsZWFmIG5vZGUgaXMga25vd24gdG9cblx0XHQvLyBoYXZlIGNoYW5nZWQsIHdlIGNhbiBhdm9pZCBhbnkgdHJhdmVyc2FsIG9mIGl0cyBhbmNlc3RvciBub2Rlcy5cblx0XHRmb3IgKGxldCBpID0gZHJhZnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG5cdFx0XHRjb25zdCBzdGF0ZTogRVM1U3RhdGUgPSBkcmFmdHNbaV1bRFJBRlRfU1RBVEVdXG5cdFx0XHRpZiAoIXN0YXRlLm1vZGlmaWVkXykge1xuXHRcdFx0XHRzd2l0Y2ggKHN0YXRlLnR5cGVfKSB7XG5cdFx0XHRcdFx0Y2FzZSBQcm94eVR5cGUuRVM1QXJyYXk6XG5cdFx0XHRcdFx0XHRpZiAoaGFzQXJyYXlDaGFuZ2VzKHN0YXRlKSkgbWFya0NoYW5nZWQoc3RhdGUpXG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdGNhc2UgUHJveHlUeXBlLkVTNU9iamVjdDpcblx0XHRcdFx0XHRcdGlmIChoYXNPYmplY3RDaGFuZ2VzKHN0YXRlKSkgbWFya0NoYW5nZWQoc3RhdGUpXG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gbWFya0NoYW5nZXNSZWN1cnNpdmVseShvYmplY3Q6IGFueSkge1xuXHRcdGlmICghb2JqZWN0IHx8IHR5cGVvZiBvYmplY3QgIT09IFwib2JqZWN0XCIpIHJldHVyblxuXHRcdGNvbnN0IHN0YXRlOiBFUzVTdGF0ZSB8IHVuZGVmaW5lZCA9IG9iamVjdFtEUkFGVF9TVEFURV1cblx0XHRpZiAoIXN0YXRlKSByZXR1cm5cblx0XHRjb25zdCB7YmFzZV8sIGRyYWZ0XywgYXNzaWduZWRfLCB0eXBlX30gPSBzdGF0ZVxuXHRcdGlmICh0eXBlXyA9PT0gUHJveHlUeXBlLkVTNU9iamVjdCkge1xuXHRcdFx0Ly8gTG9vayBmb3IgYWRkZWQga2V5cy5cblx0XHRcdC8vIHByb2JhYmx5IHRoZXJlIGlzIGEgZmFzdGVyIHdheSB0byBkZXRlY3QgY2hhbmdlcywgYXMgc3dlZXAgKyByZWN1cnNlIHNlZW1zIHRvIGRvIHNvbWVcblx0XHRcdC8vIHVubmVjZXNzYXJ5IHdvcmsuXG5cdFx0XHQvLyBhbHNvOiBwcm9iYWJseSB3ZSBjYW4gc3RvcmUgdGhlIGluZm9ybWF0aW9uIHdlIGRldGVjdCBoZXJlLCB0byBzcGVlZCB1cCB0cmVlIGZpbmFsaXphdGlvbiFcblx0XHRcdGVhY2goZHJhZnRfLCBrZXkgPT4ge1xuXHRcdFx0XHRpZiAoKGtleSBhcyBhbnkpID09PSBEUkFGVF9TVEFURSkgcmV0dXJuXG5cdFx0XHRcdC8vIFRoZSBgdW5kZWZpbmVkYCBjaGVjayBpcyBhIGZhc3QgcGF0aCBmb3IgcHJlLWV4aXN0aW5nIGtleXMuXG5cdFx0XHRcdGlmICgoYmFzZV8gYXMgYW55KVtrZXldID09PSB1bmRlZmluZWQgJiYgIWhhcyhiYXNlXywga2V5KSkge1xuXHRcdFx0XHRcdGFzc2lnbmVkX1trZXldID0gdHJ1ZVxuXHRcdFx0XHRcdG1hcmtDaGFuZ2VkKHN0YXRlKVxuXHRcdFx0XHR9IGVsc2UgaWYgKCFhc3NpZ25lZF9ba2V5XSkge1xuXHRcdFx0XHRcdC8vIE9ubHkgdW50b3VjaGVkIHByb3BlcnRpZXMgdHJpZ2dlciByZWN1cnNpb24uXG5cdFx0XHRcdFx0bWFya0NoYW5nZXNSZWN1cnNpdmVseShkcmFmdF9ba2V5XSlcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdC8vIExvb2sgZm9yIHJlbW92ZWQga2V5cy5cblx0XHRcdGVhY2goYmFzZV8sIGtleSA9PiB7XG5cdFx0XHRcdC8vIFRoZSBgdW5kZWZpbmVkYCBjaGVjayBpcyBhIGZhc3QgcGF0aCBmb3IgcHJlLWV4aXN0aW5nIGtleXMuXG5cdFx0XHRcdGlmIChkcmFmdF9ba2V5XSA9PT0gdW5kZWZpbmVkICYmICFoYXMoZHJhZnRfLCBrZXkpKSB7XG5cdFx0XHRcdFx0YXNzaWduZWRfW2tleV0gPSBmYWxzZVxuXHRcdFx0XHRcdG1hcmtDaGFuZ2VkKHN0YXRlKVxuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdH0gZWxzZSBpZiAodHlwZV8gPT09IFByb3h5VHlwZS5FUzVBcnJheSkge1xuXHRcdFx0aWYgKGhhc0FycmF5Q2hhbmdlcyhzdGF0ZSBhcyBFUzVBcnJheVN0YXRlKSkge1xuXHRcdFx0XHRtYXJrQ2hhbmdlZChzdGF0ZSlcblx0XHRcdFx0YXNzaWduZWRfLmxlbmd0aCA9IHRydWVcblx0XHRcdH1cblxuXHRcdFx0aWYgKGRyYWZ0Xy5sZW5ndGggPCBiYXNlXy5sZW5ndGgpIHtcblx0XHRcdFx0Zm9yIChsZXQgaSA9IGRyYWZ0Xy5sZW5ndGg7IGkgPCBiYXNlXy5sZW5ndGg7IGkrKykgYXNzaWduZWRfW2ldID0gZmFsc2Vcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZvciAobGV0IGkgPSBiYXNlXy5sZW5ndGg7IGkgPCBkcmFmdF8ubGVuZ3RoOyBpKyspIGFzc2lnbmVkX1tpXSA9IHRydWVcblx0XHRcdH1cblxuXHRcdFx0Ly8gTWluaW11bSBjb3VudCBpcyBlbm91Z2gsIHRoZSBvdGhlciBwYXJ0cyBoYXMgYmVlbiBwcm9jZXNzZWQuXG5cdFx0XHRjb25zdCBtaW4gPSBNYXRoLm1pbihkcmFmdF8ubGVuZ3RoLCBiYXNlXy5sZW5ndGgpXG5cblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbWluOyBpKyspIHtcblx0XHRcdFx0Ly8gT25seSB1bnRvdWNoZWQgaW5kaWNlcyB0cmlnZ2VyIHJlY3Vyc2lvbi5cblx0XHRcdFx0aWYgKCFkcmFmdF8uaGFzT3duUHJvcGVydHkoaSkpIHtcblx0XHRcdFx0XHRhc3NpZ25lZF9baV0gPSB0cnVlXG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGFzc2lnbmVkX1tpXSA9PT0gdW5kZWZpbmVkKSBtYXJrQ2hhbmdlc1JlY3Vyc2l2ZWx5KGRyYWZ0X1tpXSlcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBoYXNPYmplY3RDaGFuZ2VzKHN0YXRlOiBFUzVPYmplY3RTdGF0ZSkge1xuXHRcdGNvbnN0IHtiYXNlXywgZHJhZnRffSA9IHN0YXRlXG5cblx0XHQvLyBTZWFyY2ggZm9yIGFkZGVkIGtleXMgYW5kIGNoYW5nZWQga2V5cy4gU3RhcnQgYXQgdGhlIGJhY2ssIGJlY2F1c2Vcblx0XHQvLyBub24tbnVtZXJpYyBrZXlzIGFyZSBvcmRlcmVkIGJ5IHRpbWUgb2YgZGVmaW5pdGlvbiBvbiB0aGUgb2JqZWN0LlxuXHRcdGNvbnN0IGtleXMgPSBvd25LZXlzKGRyYWZ0Xylcblx0XHRmb3IgKGxldCBpID0ga2V5cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuXHRcdFx0Y29uc3Qga2V5OiBhbnkgPSBrZXlzW2ldXG5cdFx0XHRpZiAoa2V5ID09PSBEUkFGVF9TVEFURSkgY29udGludWVcblx0XHRcdGNvbnN0IGJhc2VWYWx1ZSA9IGJhc2VfW2tleV1cblx0XHRcdC8vIFRoZSBgdW5kZWZpbmVkYCBjaGVjayBpcyBhIGZhc3QgcGF0aCBmb3IgcHJlLWV4aXN0aW5nIGtleXMuXG5cdFx0XHRpZiAoYmFzZVZhbHVlID09PSB1bmRlZmluZWQgJiYgIWhhcyhiYXNlXywga2V5KSkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdFx0fVxuXHRcdFx0Ly8gT25jZSBhIGJhc2Uga2V5IGlzIGRlbGV0ZWQsIGZ1dHVyZSBjaGFuZ2VzIGdvIHVuZGV0ZWN0ZWQsIGJlY2F1c2UgaXRzXG5cdFx0XHQvLyBkZXNjcmlwdG9yIGlzIGVyYXNlZC4gVGhpcyBicmFuY2ggZGV0ZWN0cyBhbnkgbWlzc2VkIGNoYW5nZXMuXG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0Y29uc3QgdmFsdWUgPSBkcmFmdF9ba2V5XVxuXHRcdFx0XHRjb25zdCBzdGF0ZTogSW1tZXJTdGF0ZSA9IHZhbHVlICYmIHZhbHVlW0RSQUZUX1NUQVRFXVxuXHRcdFx0XHRpZiAoc3RhdGUgPyBzdGF0ZS5iYXNlXyAhPT0gYmFzZVZhbHVlIDogIWlzKHZhbHVlLCBiYXNlVmFsdWUpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWVcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEF0IHRoaXMgcG9pbnQsIG5vIGtleXMgd2VyZSBhZGRlZCBvciBjaGFuZ2VkLlxuXHRcdC8vIENvbXBhcmUga2V5IGNvdW50IHRvIGRldGVybWluZSBpZiBrZXlzIHdlcmUgZGVsZXRlZC5cblx0XHRjb25zdCBiYXNlSXNEcmFmdCA9ICEhYmFzZV9bRFJBRlRfU1RBVEUgYXMgYW55XVxuXHRcdHJldHVybiBrZXlzLmxlbmd0aCAhPT0gb3duS2V5cyhiYXNlXykubGVuZ3RoICsgKGJhc2VJc0RyYWZ0ID8gMCA6IDEpIC8vICsgMSB0byBjb3JyZWN0IGZvciBEUkFGVF9TVEFURVxuXHR9XG5cblx0ZnVuY3Rpb24gaGFzQXJyYXlDaGFuZ2VzKHN0YXRlOiBFUzVBcnJheVN0YXRlKSB7XG5cdFx0Y29uc3Qge2RyYWZ0X30gPSBzdGF0ZVxuXHRcdGlmIChkcmFmdF8ubGVuZ3RoICE9PSBzdGF0ZS5iYXNlXy5sZW5ndGgpIHJldHVybiB0cnVlXG5cdFx0Ly8gU2VlICMxMTZcblx0XHQvLyBJZiB3ZSBmaXJzdCBzaG9ydGVuIHRoZSBsZW5ndGgsIG91ciBhcnJheSBpbnRlcmNlcHRvcnMgd2lsbCBiZSByZW1vdmVkLlxuXHRcdC8vIElmIGFmdGVyIHRoYXQgbmV3IGl0ZW1zIGFyZSBhZGRlZCwgcmVzdWx0IGluIHRoZSBzYW1lIG9yaWdpbmFsIGxlbmd0aCxcblx0XHQvLyB0aG9zZSBsYXN0IGl0ZW1zIHdpbGwgaGF2ZSBubyBpbnRlcmNlcHRpbmcgcHJvcGVydHkuXG5cdFx0Ly8gU28gaWYgdGhlcmUgaXMgbm8gb3duIGRlc2NyaXB0b3Igb24gdGhlIGxhc3QgcG9zaXRpb24sIHdlIGtub3cgdGhhdCBpdGVtcyB3ZXJlIHJlbW92ZWQgYW5kIGFkZGVkXG5cdFx0Ly8gTi5CLjogc3BsaWNlLCB1bnNoaWZ0LCBldGMgb25seSBzaGlmdCB2YWx1ZXMgYXJvdW5kLCBidXQgbm90IHByb3AgZGVzY3JpcHRvcnMsIHNvIHdlIG9ubHkgaGF2ZSB0byBjaGVja1xuXHRcdC8vIHRoZSBsYXN0IG9uZVxuXHRcdC8vIGxhc3QgZGVzY3JpcHRvciBjYW4gYmUgbm90IGEgdHJhcCwgaWYgdGhlIGFycmF5IHdhcyBleHRlbmRlZFxuXHRcdGNvbnN0IGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxuXHRcdFx0ZHJhZnRfLFxuXHRcdFx0ZHJhZnRfLmxlbmd0aCAtIDFcblx0XHQpXG5cdFx0Ly8gZGVzY3JpcHRvciBjYW4gYmUgbnVsbCwgYnV0IG9ubHkgZm9yIG5ld2x5IGNyZWF0ZWQgc3BhcnNlIGFycmF5cywgZWcuIG5ldyBBcnJheSgxMClcblx0XHRpZiAoZGVzY3JpcHRvciAmJiAhZGVzY3JpcHRvci5nZXQpIHJldHVybiB0cnVlXG5cdFx0Ly8gaWYgd2UgbWlzcyBhIHByb3BlcnR5LCBpdCBoYXMgYmVlbiBkZWxldGVkLCBzbyBhcnJheSBwcm9ib2JhbHkgY2hhbmdlZFxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgZHJhZnRfLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAoIWRyYWZ0Xy5oYXNPd25Qcm9wZXJ0eShpKSkgcmV0dXJuIHRydWVcblx0XHR9XG5cdFx0Ly8gRm9yIGFsbCBvdGhlciBjYXNlcywgd2UgZG9uJ3QgaGF2ZSB0byBjb21wYXJlLCBhcyB0aGV5IHdvdWxkIGhhdmUgYmVlbiBwaWNrZWQgdXAgYnkgdGhlIGluZGV4IHNldHRlcnNcblx0XHRyZXR1cm4gZmFsc2Vcblx0fVxuXG5cdGZ1bmN0aW9uIGhhc0NoYW5nZXNfKHN0YXRlOiBFUzVTdGF0ZSkge1xuXHRcdHJldHVybiBzdGF0ZS50eXBlXyA9PT0gUHJveHlUeXBlLkVTNU9iamVjdFxuXHRcdFx0PyBoYXNPYmplY3RDaGFuZ2VzKHN0YXRlKVxuXHRcdFx0OiBoYXNBcnJheUNoYW5nZXMoc3RhdGUpXG5cdH1cblxuXHRmdW5jdGlvbiBhc3NlcnRVbnJldm9rZWQoc3RhdGU6IGFueSAvKkVTNVN0YXRlIHwgTWFwU3RhdGUgfCBTZXRTdGF0ZSovKSB7XG5cdFx0aWYgKHN0YXRlLnJldm9rZWRfKSBkaWUoMywgSlNPTi5zdHJpbmdpZnkobGF0ZXN0KHN0YXRlKSkpXG5cdH1cblxuXHRsb2FkUGx1Z2luKFwiRVM1XCIsIHtcblx0XHRjcmVhdGVFUzVQcm94eV8sXG5cdFx0d2lsbEZpbmFsaXplRVM1Xyxcblx0XHRoYXNDaGFuZ2VzX1xuXHR9KVxufVxuIiwgImltcG9ydCB7aW1tZXJhYmxlfSBmcm9tIFwiLi4vaW1tZXJcIlxuaW1wb3J0IHtcblx0SW1tZXJTdGF0ZSxcblx0UGF0Y2gsXG5cdFNldFN0YXRlLFxuXHRFUzVBcnJheVN0YXRlLFxuXHRQcm94eUFycmF5U3RhdGUsXG5cdE1hcFN0YXRlLFxuXHRFUzVPYmplY3RTdGF0ZSxcblx0UHJveHlPYmplY3RTdGF0ZSxcblx0UGF0Y2hQYXRoLFxuXHRnZXQsXG5cdGVhY2gsXG5cdGhhcyxcblx0Z2V0QXJjaHR5cGUsXG5cdGlzU2V0LFxuXHRpc01hcCxcblx0bG9hZFBsdWdpbixcblx0UHJveHlUeXBlLFxuXHRBcmNodHlwZSxcblx0ZGllLFxuXHRpc0RyYWZ0LFxuXHRpc0RyYWZ0YWJsZSxcblx0Tk9USElOR1xufSBmcm9tIFwiLi4vaW50ZXJuYWxcIlxuXG5leHBvcnQgZnVuY3Rpb24gZW5hYmxlUGF0Y2hlcygpIHtcblx0Y29uc3QgUkVQTEFDRSA9IFwicmVwbGFjZVwiXG5cdGNvbnN0IEFERCA9IFwiYWRkXCJcblx0Y29uc3QgUkVNT1ZFID0gXCJyZW1vdmVcIlxuXG5cdGZ1bmN0aW9uIGdlbmVyYXRlUGF0Y2hlc18oXG5cdFx0c3RhdGU6IEltbWVyU3RhdGUsXG5cdFx0YmFzZVBhdGg6IFBhdGNoUGF0aCxcblx0XHRwYXRjaGVzOiBQYXRjaFtdLFxuXHRcdGludmVyc2VQYXRjaGVzOiBQYXRjaFtdXG5cdCk6IHZvaWQge1xuXHRcdHN3aXRjaCAoc3RhdGUudHlwZV8pIHtcblx0XHRcdGNhc2UgUHJveHlUeXBlLlByb3h5T2JqZWN0OlxuXHRcdFx0Y2FzZSBQcm94eVR5cGUuRVM1T2JqZWN0OlxuXHRcdFx0Y2FzZSBQcm94eVR5cGUuTWFwOlxuXHRcdFx0XHRyZXR1cm4gZ2VuZXJhdGVQYXRjaGVzRnJvbUFzc2lnbmVkKFxuXHRcdFx0XHRcdHN0YXRlLFxuXHRcdFx0XHRcdGJhc2VQYXRoLFxuXHRcdFx0XHRcdHBhdGNoZXMsXG5cdFx0XHRcdFx0aW52ZXJzZVBhdGNoZXNcblx0XHRcdFx0KVxuXHRcdFx0Y2FzZSBQcm94eVR5cGUuRVM1QXJyYXk6XG5cdFx0XHRjYXNlIFByb3h5VHlwZS5Qcm94eUFycmF5OlxuXHRcdFx0XHRyZXR1cm4gZ2VuZXJhdGVBcnJheVBhdGNoZXMoc3RhdGUsIGJhc2VQYXRoLCBwYXRjaGVzLCBpbnZlcnNlUGF0Y2hlcylcblx0XHRcdGNhc2UgUHJveHlUeXBlLlNldDpcblx0XHRcdFx0cmV0dXJuIGdlbmVyYXRlU2V0UGF0Y2hlcyhcblx0XHRcdFx0XHQoc3RhdGUgYXMgYW55KSBhcyBTZXRTdGF0ZSxcblx0XHRcdFx0XHRiYXNlUGF0aCxcblx0XHRcdFx0XHRwYXRjaGVzLFxuXHRcdFx0XHRcdGludmVyc2VQYXRjaGVzXG5cdFx0XHRcdClcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBnZW5lcmF0ZUFycmF5UGF0Y2hlcyhcblx0XHRzdGF0ZTogRVM1QXJyYXlTdGF0ZSB8IFByb3h5QXJyYXlTdGF0ZSxcblx0XHRiYXNlUGF0aDogUGF0Y2hQYXRoLFxuXHRcdHBhdGNoZXM6IFBhdGNoW10sXG5cdFx0aW52ZXJzZVBhdGNoZXM6IFBhdGNoW11cblx0KSB7XG5cdFx0bGV0IHtiYXNlXywgYXNzaWduZWRffSA9IHN0YXRlXG5cdFx0bGV0IGNvcHlfID0gc3RhdGUuY29weV8hXG5cblx0XHQvLyBSZWR1Y2UgY29tcGxleGl0eSBieSBlbnN1cmluZyBgYmFzZWAgaXMgbmV2ZXIgbG9uZ2VyLlxuXHRcdGlmIChjb3B5Xy5sZW5ndGggPCBiYXNlXy5sZW5ndGgpIHtcblx0XHRcdC8vIEB0cy1pZ25vcmVcblx0XHRcdDtbYmFzZV8sIGNvcHlfXSA9IFtjb3B5XywgYmFzZV9dXG5cdFx0XHQ7W3BhdGNoZXMsIGludmVyc2VQYXRjaGVzXSA9IFtpbnZlcnNlUGF0Y2hlcywgcGF0Y2hlc11cblx0XHR9XG5cblx0XHQvLyBQcm9jZXNzIHJlcGxhY2VkIGluZGljZXMuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBiYXNlXy5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYgKGFzc2lnbmVkX1tpXSAmJiBjb3B5X1tpXSAhPT0gYmFzZV9baV0pIHtcblx0XHRcdFx0Y29uc3QgcGF0aCA9IGJhc2VQYXRoLmNvbmNhdChbaV0pXG5cdFx0XHRcdHBhdGNoZXMucHVzaCh7XG5cdFx0XHRcdFx0b3A6IFJFUExBQ0UsXG5cdFx0XHRcdFx0cGF0aCxcblx0XHRcdFx0XHQvLyBOZWVkIHRvIG1heWJlIGNsb25lIGl0LCBhcyBpdCBjYW4gaW4gZmFjdCBiZSB0aGUgb3JpZ2luYWwgdmFsdWVcblx0XHRcdFx0XHQvLyBkdWUgdG8gdGhlIGJhc2UvY29weSBpbnZlcnNpb24gYXQgdGhlIHN0YXJ0IG9mIHRoaXMgZnVuY3Rpb25cblx0XHRcdFx0XHR2YWx1ZTogY2xvbmVQYXRjaFZhbHVlSWZOZWVkZWQoY29weV9baV0pXG5cdFx0XHRcdH0pXG5cdFx0XHRcdGludmVyc2VQYXRjaGVzLnB1c2goe1xuXHRcdFx0XHRcdG9wOiBSRVBMQUNFLFxuXHRcdFx0XHRcdHBhdGgsXG5cdFx0XHRcdFx0dmFsdWU6IGNsb25lUGF0Y2hWYWx1ZUlmTmVlZGVkKGJhc2VfW2ldKVxuXHRcdFx0XHR9KVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFByb2Nlc3MgYWRkZWQgaW5kaWNlcy5cblx0XHRmb3IgKGxldCBpID0gYmFzZV8ubGVuZ3RoOyBpIDwgY29weV8ubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IHBhdGggPSBiYXNlUGF0aC5jb25jYXQoW2ldKVxuXHRcdFx0cGF0Y2hlcy5wdXNoKHtcblx0XHRcdFx0b3A6IEFERCxcblx0XHRcdFx0cGF0aCxcblx0XHRcdFx0Ly8gTmVlZCB0byBtYXliZSBjbG9uZSBpdCwgYXMgaXQgY2FuIGluIGZhY3QgYmUgdGhlIG9yaWdpbmFsIHZhbHVlXG5cdFx0XHRcdC8vIGR1ZSB0byB0aGUgYmFzZS9jb3B5IGludmVyc2lvbiBhdCB0aGUgc3RhcnQgb2YgdGhpcyBmdW5jdGlvblxuXHRcdFx0XHR2YWx1ZTogY2xvbmVQYXRjaFZhbHVlSWZOZWVkZWQoY29weV9baV0pXG5cdFx0XHR9KVxuXHRcdH1cblx0XHRpZiAoYmFzZV8ubGVuZ3RoIDwgY29weV8ubGVuZ3RoKSB7XG5cdFx0XHRpbnZlcnNlUGF0Y2hlcy5wdXNoKHtcblx0XHRcdFx0b3A6IFJFUExBQ0UsXG5cdFx0XHRcdHBhdGg6IGJhc2VQYXRoLmNvbmNhdChbXCJsZW5ndGhcIl0pLFxuXHRcdFx0XHR2YWx1ZTogYmFzZV8ubGVuZ3RoXG5cdFx0XHR9KVxuXHRcdH1cblx0fVxuXG5cdC8vIFRoaXMgaXMgdXNlZCBmb3IgYm90aCBNYXAgb2JqZWN0cyBhbmQgbm9ybWFsIG9iamVjdHMuXG5cdGZ1bmN0aW9uIGdlbmVyYXRlUGF0Y2hlc0Zyb21Bc3NpZ25lZChcblx0XHRzdGF0ZTogTWFwU3RhdGUgfCBFUzVPYmplY3RTdGF0ZSB8IFByb3h5T2JqZWN0U3RhdGUsXG5cdFx0YmFzZVBhdGg6IFBhdGNoUGF0aCxcblx0XHRwYXRjaGVzOiBQYXRjaFtdLFxuXHRcdGludmVyc2VQYXRjaGVzOiBQYXRjaFtdXG5cdCkge1xuXHRcdGNvbnN0IHtiYXNlXywgY29weV99ID0gc3RhdGVcblx0XHRlYWNoKHN0YXRlLmFzc2lnbmVkXyEsIChrZXksIGFzc2lnbmVkVmFsdWUpID0+IHtcblx0XHRcdGNvbnN0IG9yaWdWYWx1ZSA9IGdldChiYXNlXywga2V5KVxuXHRcdFx0Y29uc3QgdmFsdWUgPSBnZXQoY29weV8hLCBrZXkpXG5cdFx0XHRjb25zdCBvcCA9ICFhc3NpZ25lZFZhbHVlID8gUkVNT1ZFIDogaGFzKGJhc2VfLCBrZXkpID8gUkVQTEFDRSA6IEFERFxuXHRcdFx0aWYgKG9yaWdWYWx1ZSA9PT0gdmFsdWUgJiYgb3AgPT09IFJFUExBQ0UpIHJldHVyblxuXHRcdFx0Y29uc3QgcGF0aCA9IGJhc2VQYXRoLmNvbmNhdChrZXkgYXMgYW55KVxuXHRcdFx0cGF0Y2hlcy5wdXNoKG9wID09PSBSRU1PVkUgPyB7b3AsIHBhdGh9IDoge29wLCBwYXRoLCB2YWx1ZX0pXG5cdFx0XHRpbnZlcnNlUGF0Y2hlcy5wdXNoKFxuXHRcdFx0XHRvcCA9PT0gQUREXG5cdFx0XHRcdFx0PyB7b3A6IFJFTU9WRSwgcGF0aH1cblx0XHRcdFx0XHQ6IG9wID09PSBSRU1PVkVcblx0XHRcdFx0XHQ/IHtvcDogQURELCBwYXRoLCB2YWx1ZTogY2xvbmVQYXRjaFZhbHVlSWZOZWVkZWQob3JpZ1ZhbHVlKX1cblx0XHRcdFx0XHQ6IHtvcDogUkVQTEFDRSwgcGF0aCwgdmFsdWU6IGNsb25lUGF0Y2hWYWx1ZUlmTmVlZGVkKG9yaWdWYWx1ZSl9XG5cdFx0XHQpXG5cdFx0fSlcblx0fVxuXG5cdGZ1bmN0aW9uIGdlbmVyYXRlU2V0UGF0Y2hlcyhcblx0XHRzdGF0ZTogU2V0U3RhdGUsXG5cdFx0YmFzZVBhdGg6IFBhdGNoUGF0aCxcblx0XHRwYXRjaGVzOiBQYXRjaFtdLFxuXHRcdGludmVyc2VQYXRjaGVzOiBQYXRjaFtdXG5cdCkge1xuXHRcdGxldCB7YmFzZV8sIGNvcHlffSA9IHN0YXRlXG5cblx0XHRsZXQgaSA9IDBcblx0XHRiYXNlXy5mb3JFYWNoKCh2YWx1ZTogYW55KSA9PiB7XG5cdFx0XHRpZiAoIWNvcHlfIS5oYXModmFsdWUpKSB7XG5cdFx0XHRcdGNvbnN0IHBhdGggPSBiYXNlUGF0aC5jb25jYXQoW2ldKVxuXHRcdFx0XHRwYXRjaGVzLnB1c2goe1xuXHRcdFx0XHRcdG9wOiBSRU1PVkUsXG5cdFx0XHRcdFx0cGF0aCxcblx0XHRcdFx0XHR2YWx1ZVxuXHRcdFx0XHR9KVxuXHRcdFx0XHRpbnZlcnNlUGF0Y2hlcy51bnNoaWZ0KHtcblx0XHRcdFx0XHRvcDogQURELFxuXHRcdFx0XHRcdHBhdGgsXG5cdFx0XHRcdFx0dmFsdWVcblx0XHRcdFx0fSlcblx0XHRcdH1cblx0XHRcdGkrK1xuXHRcdH0pXG5cdFx0aSA9IDBcblx0XHRjb3B5XyEuZm9yRWFjaCgodmFsdWU6IGFueSkgPT4ge1xuXHRcdFx0aWYgKCFiYXNlXy5oYXModmFsdWUpKSB7XG5cdFx0XHRcdGNvbnN0IHBhdGggPSBiYXNlUGF0aC5jb25jYXQoW2ldKVxuXHRcdFx0XHRwYXRjaGVzLnB1c2goe1xuXHRcdFx0XHRcdG9wOiBBREQsXG5cdFx0XHRcdFx0cGF0aCxcblx0XHRcdFx0XHR2YWx1ZVxuXHRcdFx0XHR9KVxuXHRcdFx0XHRpbnZlcnNlUGF0Y2hlcy51bnNoaWZ0KHtcblx0XHRcdFx0XHRvcDogUkVNT1ZFLFxuXHRcdFx0XHRcdHBhdGgsXG5cdFx0XHRcdFx0dmFsdWVcblx0XHRcdFx0fSlcblx0XHRcdH1cblx0XHRcdGkrK1xuXHRcdH0pXG5cdH1cblxuXHRmdW5jdGlvbiBnZW5lcmF0ZVJlcGxhY2VtZW50UGF0Y2hlc18oXG5cdFx0YmFzZVZhbHVlOiBhbnksXG5cdFx0cmVwbGFjZW1lbnQ6IGFueSxcblx0XHRwYXRjaGVzOiBQYXRjaFtdLFxuXHRcdGludmVyc2VQYXRjaGVzOiBQYXRjaFtdXG5cdCk6IHZvaWQge1xuXHRcdHBhdGNoZXMucHVzaCh7XG5cdFx0XHRvcDogUkVQTEFDRSxcblx0XHRcdHBhdGg6IFtdLFxuXHRcdFx0dmFsdWU6IHJlcGxhY2VtZW50ID09PSBOT1RISU5HID8gdW5kZWZpbmVkIDogcmVwbGFjZW1lbnRcblx0XHR9KVxuXHRcdGludmVyc2VQYXRjaGVzLnB1c2goe1xuXHRcdFx0b3A6IFJFUExBQ0UsXG5cdFx0XHRwYXRoOiBbXSxcblx0XHRcdHZhbHVlOiBiYXNlVmFsdWVcblx0XHR9KVxuXHR9XG5cblx0ZnVuY3Rpb24gYXBwbHlQYXRjaGVzXzxUPihkcmFmdDogVCwgcGF0Y2hlczogUGF0Y2hbXSk6IFQge1xuXHRcdHBhdGNoZXMuZm9yRWFjaChwYXRjaCA9PiB7XG5cdFx0XHRjb25zdCB7cGF0aCwgb3B9ID0gcGF0Y2hcblxuXHRcdFx0bGV0IGJhc2U6IGFueSA9IGRyYWZ0XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoIC0gMTsgaSsrKSB7XG5cdFx0XHRcdGNvbnN0IHBhcmVudFR5cGUgPSBnZXRBcmNodHlwZShiYXNlKVxuXHRcdFx0XHRjb25zdCBwID0gXCJcIiArIHBhdGhbaV1cblx0XHRcdFx0Ly8gU2VlICM3MzgsIGF2b2lkIHByb3RvdHlwZSBwb2xsdXRpb25cblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdChwYXJlbnRUeXBlID09PSBBcmNodHlwZS5PYmplY3QgfHwgcGFyZW50VHlwZSA9PT0gQXJjaHR5cGUuQXJyYXkpICYmXG5cdFx0XHRcdFx0KHAgPT09IFwiX19wcm90b19fXCIgfHwgcCA9PT0gXCJjb25zdHJ1Y3RvclwiKVxuXHRcdFx0XHQpXG5cdFx0XHRcdFx0ZGllKDI0KVxuXHRcdFx0XHRpZiAodHlwZW9mIGJhc2UgPT09IFwiZnVuY3Rpb25cIiAmJiBwID09PSBcInByb3RvdHlwZVwiKSBkaWUoMjQpXG5cdFx0XHRcdGJhc2UgPSBnZXQoYmFzZSwgcClcblx0XHRcdFx0aWYgKHR5cGVvZiBiYXNlICE9PSBcIm9iamVjdFwiKSBkaWUoMTUsIHBhdGguam9pbihcIi9cIikpXG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHR5cGUgPSBnZXRBcmNodHlwZShiYXNlKVxuXHRcdFx0Y29uc3QgdmFsdWUgPSBkZWVwQ2xvbmVQYXRjaFZhbHVlKHBhdGNoLnZhbHVlKSAvLyB1c2VkIHRvIGNsb25lIHBhdGNoIHRvIGVuc3VyZSBvcmlnaW5hbCBwYXRjaCBpcyBub3QgbW9kaWZpZWQsIHNlZSAjNDExXG5cdFx0XHRjb25zdCBrZXkgPSBwYXRoW3BhdGgubGVuZ3RoIC0gMV1cblx0XHRcdHN3aXRjaCAob3ApIHtcblx0XHRcdFx0Y2FzZSBSRVBMQUNFOlxuXHRcdFx0XHRcdHN3aXRjaCAodHlwZSkge1xuXHRcdFx0XHRcdFx0Y2FzZSBBcmNodHlwZS5NYXA6XG5cdFx0XHRcdFx0XHRcdHJldHVybiBiYXNlLnNldChrZXksIHZhbHVlKVxuXHRcdFx0XHRcdFx0LyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblx0XHRcdFx0XHRcdGNhc2UgQXJjaHR5cGUuU2V0OlxuXHRcdFx0XHRcdFx0XHRkaWUoMTYpXG5cdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHQvLyBpZiB2YWx1ZSBpcyBhbiBvYmplY3QsIHRoZW4gaXQncyBhc3NpZ25lZCBieSByZWZlcmVuY2Vcblx0XHRcdFx0XHRcdFx0Ly8gaW4gdGhlIGZvbGxvd2luZyBhZGQgb3IgcmVtb3ZlIG9wcywgdGhlIHZhbHVlIGZpZWxkIGluc2lkZSB0aGUgcGF0Y2ggd2lsbCBhbHNvIGJlIG1vZGlmeWVkXG5cdFx0XHRcdFx0XHRcdC8vIHNvIHdlIHVzZSB2YWx1ZSBmcm9tIHRoZSBjbG9uZWQgcGF0Y2hcblx0XHRcdFx0XHRcdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gKGJhc2Vba2V5XSA9IHZhbHVlKVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0Y2FzZSBBREQ6XG5cdFx0XHRcdFx0c3dpdGNoICh0eXBlKSB7XG5cdFx0XHRcdFx0XHRjYXNlIEFyY2h0eXBlLkFycmF5OlxuXHRcdFx0XHRcdFx0XHRyZXR1cm4ga2V5ID09PSBcIi1cIlxuXHRcdFx0XHRcdFx0XHRcdD8gYmFzZS5wdXNoKHZhbHVlKVxuXHRcdFx0XHRcdFx0XHRcdDogYmFzZS5zcGxpY2Uoa2V5IGFzIGFueSwgMCwgdmFsdWUpXG5cdFx0XHRcdFx0XHRjYXNlIEFyY2h0eXBlLk1hcDpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGJhc2Uuc2V0KGtleSwgdmFsdWUpXG5cdFx0XHRcdFx0XHRjYXNlIEFyY2h0eXBlLlNldDpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGJhc2UuYWRkKHZhbHVlKVxuXHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIChiYXNlW2tleV0gPSB2YWx1ZSlcblx0XHRcdFx0XHR9XG5cdFx0XHRcdGNhc2UgUkVNT1ZFOlxuXHRcdFx0XHRcdHN3aXRjaCAodHlwZSkge1xuXHRcdFx0XHRcdFx0Y2FzZSBBcmNodHlwZS5BcnJheTpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGJhc2Uuc3BsaWNlKGtleSBhcyBhbnksIDEpXG5cdFx0XHRcdFx0XHRjYXNlIEFyY2h0eXBlLk1hcDpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGJhc2UuZGVsZXRlKGtleSlcblx0XHRcdFx0XHRcdGNhc2UgQXJjaHR5cGUuU2V0OlxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYmFzZS5kZWxldGUocGF0Y2gudmFsdWUpXG5cdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gZGVsZXRlIGJhc2Vba2V5XVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRkaWUoMTcsIG9wKVxuXHRcdFx0fVxuXHRcdH0pXG5cblx0XHRyZXR1cm4gZHJhZnRcblx0fVxuXG5cdC8vIG9wdGltaXplOiB0aGlzIGlzIHF1aXRlIGEgcGVyZm9ybWFuY2UgaGl0LCBjYW4gd2UgZGV0ZWN0IGludGVsbGlnZW50bHkgd2hlbiBpdCBpcyBuZWVkZWQ/XG5cdC8vIEUuZy4gYXV0by1kcmFmdCB3aGVuIG5ldyBvYmplY3RzIGZyb20gb3V0c2lkZSBhcmUgYXNzaWduZWQgYW5kIG1vZGlmaWVkP1xuXHQvLyAoU2VlIGZhaWxpbmcgdGVzdCB3aGVuIGRlZXBDbG9uZSBqdXN0IHJldHVybnMgb2JqKVxuXHRmdW5jdGlvbiBkZWVwQ2xvbmVQYXRjaFZhbHVlPFQ+KG9iajogVCk6IFRcblx0ZnVuY3Rpb24gZGVlcENsb25lUGF0Y2hWYWx1ZShvYmo6IGFueSkge1xuXHRcdGlmICghaXNEcmFmdGFibGUob2JqKSkgcmV0dXJuIG9ialxuXHRcdGlmIChBcnJheS5pc0FycmF5KG9iaikpIHJldHVybiBvYmoubWFwKGRlZXBDbG9uZVBhdGNoVmFsdWUpXG5cdFx0aWYgKGlzTWFwKG9iaikpXG5cdFx0XHRyZXR1cm4gbmV3IE1hcChcblx0XHRcdFx0QXJyYXkuZnJvbShvYmouZW50cmllcygpKS5tYXAoKFtrLCB2XSkgPT4gW2ssIGRlZXBDbG9uZVBhdGNoVmFsdWUodildKVxuXHRcdFx0KVxuXHRcdGlmIChpc1NldChvYmopKSByZXR1cm4gbmV3IFNldChBcnJheS5mcm9tKG9iaikubWFwKGRlZXBDbG9uZVBhdGNoVmFsdWUpKVxuXHRcdGNvbnN0IGNsb25lZCA9IE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iaikpXG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gb2JqKSBjbG9uZWRba2V5XSA9IGRlZXBDbG9uZVBhdGNoVmFsdWUob2JqW2tleV0pXG5cdFx0aWYgKGhhcyhvYmosIGltbWVyYWJsZSkpIGNsb25lZFtpbW1lcmFibGVdID0gb2JqW2ltbWVyYWJsZV1cblx0XHRyZXR1cm4gY2xvbmVkXG5cdH1cblxuXHRmdW5jdGlvbiBjbG9uZVBhdGNoVmFsdWVJZk5lZWRlZDxUPihvYmo6IFQpOiBUIHtcblx0XHRpZiAoaXNEcmFmdChvYmopKSB7XG5cdFx0XHRyZXR1cm4gZGVlcENsb25lUGF0Y2hWYWx1ZShvYmopXG5cdFx0fSBlbHNlIHJldHVybiBvYmpcblx0fVxuXG5cdGxvYWRQbHVnaW4oXCJQYXRjaGVzXCIsIHtcblx0XHRhcHBseVBhdGNoZXNfLFxuXHRcdGdlbmVyYXRlUGF0Y2hlc18sXG5cdFx0Z2VuZXJhdGVSZXBsYWNlbWVudFBhdGNoZXNfXG5cdH0pXG59XG4iLCAiLy8gdHlwZXMgb25seSFcbmltcG9ydCB7XG5cdEltbWVyU3RhdGUsXG5cdEFueU1hcCxcblx0QW55U2V0LFxuXHRNYXBTdGF0ZSxcblx0U2V0U3RhdGUsXG5cdERSQUZUX1NUQVRFLFxuXHRnZXRDdXJyZW50U2NvcGUsXG5cdGxhdGVzdCxcblx0aXRlcmF0b3JTeW1ib2wsXG5cdGlzRHJhZnRhYmxlLFxuXHRjcmVhdGVQcm94eSxcblx0bG9hZFBsdWdpbixcblx0bWFya0NoYW5nZWQsXG5cdFByb3h5VHlwZSxcblx0ZGllLFxuXHRlYWNoXG59IGZyb20gXCIuLi9pbnRlcm5hbFwiXG5cbmV4cG9ydCBmdW5jdGlvbiBlbmFibGVNYXBTZXQoKSB7XG5cdC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cdHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZDogYW55LCBiOiBhbnkpOiBhbnkge1xuXHRcdGV4dGVuZFN0YXRpY3MgPVxuXHRcdFx0T2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG5cdFx0XHQoe19fcHJvdG9fXzogW119IGluc3RhbmNlb2YgQXJyYXkgJiZcblx0XHRcdFx0ZnVuY3Rpb24oZCwgYikge1xuXHRcdFx0XHRcdGQuX19wcm90b19fID0gYlxuXHRcdFx0XHR9KSB8fFxuXHRcdFx0ZnVuY3Rpb24oZCwgYikge1xuXHRcdFx0XHRmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXVxuXHRcdFx0fVxuXHRcdHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpXG5cdH1cblxuXHQvLyBVZ2x5IGhhY2sgdG8gcmVzb2x2ZSAjNTAyIGFuZCBpbmhlcml0IGJ1aWx0IGluIE1hcCAvIFNldFxuXHRmdW5jdGlvbiBfX2V4dGVuZHMoZDogYW55LCBiOiBhbnkpOiBhbnkge1xuXHRcdGV4dGVuZFN0YXRpY3MoZCwgYilcblx0XHRmdW5jdGlvbiBfXyh0aGlzOiBhbnkpOiBhbnkge1xuXHRcdFx0dGhpcy5jb25zdHJ1Y3RvciA9IGRcblx0XHR9XG5cdFx0ZC5wcm90b3R5cGUgPVxuXHRcdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdFx0KChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSksIG5ldyBfXygpKVxuXHR9XG5cblx0Y29uc3QgRHJhZnRNYXAgPSAoZnVuY3Rpb24oX3N1cGVyKSB7XG5cdFx0X19leHRlbmRzKERyYWZ0TWFwLCBfc3VwZXIpXG5cdFx0Ly8gQ3JlYXRlIGNsYXNzIG1hbnVhbGx5LCBjYXVzZSAjNTAyXG5cdFx0ZnVuY3Rpb24gRHJhZnRNYXAodGhpczogYW55LCB0YXJnZXQ6IEFueU1hcCwgcGFyZW50PzogSW1tZXJTdGF0ZSk6IGFueSB7XG5cdFx0XHR0aGlzW0RSQUZUX1NUQVRFXSA9IHtcblx0XHRcdFx0dHlwZV86IFByb3h5VHlwZS5NYXAsXG5cdFx0XHRcdHBhcmVudF86IHBhcmVudCxcblx0XHRcdFx0c2NvcGVfOiBwYXJlbnQgPyBwYXJlbnQuc2NvcGVfIDogZ2V0Q3VycmVudFNjb3BlKCkhLFxuXHRcdFx0XHRtb2RpZmllZF86IGZhbHNlLFxuXHRcdFx0XHRmaW5hbGl6ZWRfOiBmYWxzZSxcblx0XHRcdFx0Y29weV86IHVuZGVmaW5lZCxcblx0XHRcdFx0YXNzaWduZWRfOiB1bmRlZmluZWQsXG5cdFx0XHRcdGJhc2VfOiB0YXJnZXQsXG5cdFx0XHRcdGRyYWZ0XzogdGhpcyBhcyBhbnksXG5cdFx0XHRcdGlzTWFudWFsXzogZmFsc2UsXG5cdFx0XHRcdHJldm9rZWRfOiBmYWxzZVxuXHRcdFx0fSBhcyBNYXBTdGF0ZVxuXHRcdFx0cmV0dXJuIHRoaXNcblx0XHR9XG5cdFx0Y29uc3QgcCA9IERyYWZ0TWFwLnByb3RvdHlwZVxuXG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHAsIFwic2l6ZVwiLCB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gbGF0ZXN0KHRoaXNbRFJBRlRfU1RBVEVdKS5zaXplXG5cdFx0XHR9XG5cdFx0XHQvLyBlbnVtZXJhYmxlOiBmYWxzZSxcblx0XHRcdC8vIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuXHRcdH0pXG5cblx0XHRwLmhhcyA9IGZ1bmN0aW9uKGtleTogYW55KTogYm9vbGVhbiB7XG5cdFx0XHRyZXR1cm4gbGF0ZXN0KHRoaXNbRFJBRlRfU1RBVEVdKS5oYXMoa2V5KVxuXHRcdH1cblxuXHRcdHAuc2V0ID0gZnVuY3Rpb24oa2V5OiBhbnksIHZhbHVlOiBhbnkpIHtcblx0XHRcdGNvbnN0IHN0YXRlOiBNYXBTdGF0ZSA9IHRoaXNbRFJBRlRfU1RBVEVdXG5cdFx0XHRhc3NlcnRVbnJldm9rZWQoc3RhdGUpXG5cdFx0XHRpZiAoIWxhdGVzdChzdGF0ZSkuaGFzKGtleSkgfHwgbGF0ZXN0KHN0YXRlKS5nZXQoa2V5KSAhPT0gdmFsdWUpIHtcblx0XHRcdFx0cHJlcGFyZU1hcENvcHkoc3RhdGUpXG5cdFx0XHRcdG1hcmtDaGFuZ2VkKHN0YXRlKVxuXHRcdFx0XHRzdGF0ZS5hc3NpZ25lZF8hLnNldChrZXksIHRydWUpXG5cdFx0XHRcdHN0YXRlLmNvcHlfIS5zZXQoa2V5LCB2YWx1ZSlcblx0XHRcdFx0c3RhdGUuYXNzaWduZWRfIS5zZXQoa2V5LCB0cnVlKVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXNcblx0XHR9XG5cblx0XHRwLmRlbGV0ZSA9IGZ1bmN0aW9uKGtleTogYW55KTogYm9vbGVhbiB7XG5cdFx0XHRpZiAoIXRoaXMuaGFzKGtleSkpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHN0YXRlOiBNYXBTdGF0ZSA9IHRoaXNbRFJBRlRfU1RBVEVdXG5cdFx0XHRhc3NlcnRVbnJldm9rZWQoc3RhdGUpXG5cdFx0XHRwcmVwYXJlTWFwQ29weShzdGF0ZSlcblx0XHRcdG1hcmtDaGFuZ2VkKHN0YXRlKVxuXHRcdFx0aWYgKHN0YXRlLmJhc2VfLmhhcyhrZXkpKSB7XG5cdFx0XHRcdHN0YXRlLmFzc2lnbmVkXyEuc2V0KGtleSwgZmFsc2UpXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzdGF0ZS5hc3NpZ25lZF8hLmRlbGV0ZShrZXkpXG5cdFx0XHR9XG5cdFx0XHRzdGF0ZS5jb3B5XyEuZGVsZXRlKGtleSlcblx0XHRcdHJldHVybiB0cnVlXG5cdFx0fVxuXG5cdFx0cC5jbGVhciA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29uc3Qgc3RhdGU6IE1hcFN0YXRlID0gdGhpc1tEUkFGVF9TVEFURV1cblx0XHRcdGFzc2VydFVucmV2b2tlZChzdGF0ZSlcblx0XHRcdGlmIChsYXRlc3Qoc3RhdGUpLnNpemUpIHtcblx0XHRcdFx0cHJlcGFyZU1hcENvcHkoc3RhdGUpXG5cdFx0XHRcdG1hcmtDaGFuZ2VkKHN0YXRlKVxuXHRcdFx0XHRzdGF0ZS5hc3NpZ25lZF8gPSBuZXcgTWFwKClcblx0XHRcdFx0ZWFjaChzdGF0ZS5iYXNlXywga2V5ID0+IHtcblx0XHRcdFx0XHRzdGF0ZS5hc3NpZ25lZF8hLnNldChrZXksIGZhbHNlKVxuXHRcdFx0XHR9KVxuXHRcdFx0XHRzdGF0ZS5jb3B5XyEuY2xlYXIoKVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHAuZm9yRWFjaCA9IGZ1bmN0aW9uKFxuXHRcdFx0Y2I6ICh2YWx1ZTogYW55LCBrZXk6IGFueSwgc2VsZjogYW55KSA9PiB2b2lkLFxuXHRcdFx0dGhpc0FyZz86IGFueVxuXHRcdCkge1xuXHRcdFx0Y29uc3Qgc3RhdGU6IE1hcFN0YXRlID0gdGhpc1tEUkFGVF9TVEFURV1cblx0XHRcdGxhdGVzdChzdGF0ZSkuZm9yRWFjaCgoX3ZhbHVlOiBhbnksIGtleTogYW55LCBfbWFwOiBhbnkpID0+IHtcblx0XHRcdFx0Y2IuY2FsbCh0aGlzQXJnLCB0aGlzLmdldChrZXkpLCBrZXksIHRoaXMpXG5cdFx0XHR9KVxuXHRcdH1cblxuXHRcdHAuZ2V0ID0gZnVuY3Rpb24oa2V5OiBhbnkpOiBhbnkge1xuXHRcdFx0Y29uc3Qgc3RhdGU6IE1hcFN0YXRlID0gdGhpc1tEUkFGVF9TVEFURV1cblx0XHRcdGFzc2VydFVucmV2b2tlZChzdGF0ZSlcblx0XHRcdGNvbnN0IHZhbHVlID0gbGF0ZXN0KHN0YXRlKS5nZXQoa2V5KVxuXHRcdFx0aWYgKHN0YXRlLmZpbmFsaXplZF8gfHwgIWlzRHJhZnRhYmxlKHZhbHVlKSkge1xuXHRcdFx0XHRyZXR1cm4gdmFsdWVcblx0XHRcdH1cblx0XHRcdGlmICh2YWx1ZSAhPT0gc3RhdGUuYmFzZV8uZ2V0KGtleSkpIHtcblx0XHRcdFx0cmV0dXJuIHZhbHVlIC8vIGVpdGhlciBhbHJlYWR5IGRyYWZ0ZWQgb3IgcmVhc3NpZ25lZFxuXHRcdFx0fVxuXHRcdFx0Ly8gZGVzcGl0ZSB3aGF0IGl0IGxvb2tzLCB0aGlzIGNyZWF0ZXMgYSBkcmFmdCBvbmx5IG9uY2UsIHNlZSBhYm92ZSBjb25kaXRpb25cblx0XHRcdGNvbnN0IGRyYWZ0ID0gY3JlYXRlUHJveHkoc3RhdGUuc2NvcGVfLmltbWVyXywgdmFsdWUsIHN0YXRlKVxuXHRcdFx0cHJlcGFyZU1hcENvcHkoc3RhdGUpXG5cdFx0XHRzdGF0ZS5jb3B5XyEuc2V0KGtleSwgZHJhZnQpXG5cdFx0XHRyZXR1cm4gZHJhZnRcblx0XHR9XG5cblx0XHRwLmtleXMgPSBmdW5jdGlvbigpOiBJdGVyYWJsZUl0ZXJhdG9yPGFueT4ge1xuXHRcdFx0cmV0dXJuIGxhdGVzdCh0aGlzW0RSQUZUX1NUQVRFXSkua2V5cygpXG5cdFx0fVxuXG5cdFx0cC52YWx1ZXMgPSBmdW5jdGlvbigpOiBJdGVyYWJsZUl0ZXJhdG9yPGFueT4ge1xuXHRcdFx0Y29uc3QgaXRlcmF0b3IgPSB0aGlzLmtleXMoKVxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0W2l0ZXJhdG9yU3ltYm9sXTogKCkgPT4gdGhpcy52YWx1ZXMoKSxcblx0XHRcdFx0bmV4dDogKCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHIgPSBpdGVyYXRvci5uZXh0KClcblx0XHRcdFx0XHQvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXHRcdFx0XHRcdGlmIChyLmRvbmUpIHJldHVybiByXG5cdFx0XHRcdFx0Y29uc3QgdmFsdWUgPSB0aGlzLmdldChyLnZhbHVlKVxuXHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRkb25lOiBmYWxzZSxcblx0XHRcdFx0XHRcdHZhbHVlXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGFzIGFueVxuXHRcdH1cblxuXHRcdHAuZW50cmllcyA9IGZ1bmN0aW9uKCk6IEl0ZXJhYmxlSXRlcmF0b3I8W2FueSwgYW55XT4ge1xuXHRcdFx0Y29uc3QgaXRlcmF0b3IgPSB0aGlzLmtleXMoKVxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0W2l0ZXJhdG9yU3ltYm9sXTogKCkgPT4gdGhpcy5lbnRyaWVzKCksXG5cdFx0XHRcdG5leHQ6ICgpID0+IHtcblx0XHRcdFx0XHRjb25zdCByID0gaXRlcmF0b3IubmV4dCgpXG5cdFx0XHRcdFx0LyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblx0XHRcdFx0XHRpZiAoci5kb25lKSByZXR1cm4gclxuXHRcdFx0XHRcdGNvbnN0IHZhbHVlID0gdGhpcy5nZXQoci52YWx1ZSlcblx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0ZG9uZTogZmFsc2UsXG5cdFx0XHRcdFx0XHR2YWx1ZTogW3IudmFsdWUsIHZhbHVlXVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBhcyBhbnlcblx0XHR9XG5cblx0XHRwW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZW50cmllcygpXG5cdFx0fVxuXG5cdFx0cmV0dXJuIERyYWZ0TWFwXG5cdH0pKE1hcClcblxuXHRmdW5jdGlvbiBwcm94eU1hcF88VCBleHRlbmRzIEFueU1hcD4odGFyZ2V0OiBULCBwYXJlbnQ/OiBJbW1lclN0YXRlKTogVCB7XG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdHJldHVybiBuZXcgRHJhZnRNYXAodGFyZ2V0LCBwYXJlbnQpXG5cdH1cblxuXHRmdW5jdGlvbiBwcmVwYXJlTWFwQ29weShzdGF0ZTogTWFwU3RhdGUpIHtcblx0XHRpZiAoIXN0YXRlLmNvcHlfKSB7XG5cdFx0XHRzdGF0ZS5hc3NpZ25lZF8gPSBuZXcgTWFwKClcblx0XHRcdHN0YXRlLmNvcHlfID0gbmV3IE1hcChzdGF0ZS5iYXNlXylcblx0XHR9XG5cdH1cblxuXHRjb25zdCBEcmFmdFNldCA9IChmdW5jdGlvbihfc3VwZXIpIHtcblx0XHRfX2V4dGVuZHMoRHJhZnRTZXQsIF9zdXBlcilcblx0XHQvLyBDcmVhdGUgY2xhc3MgbWFudWFsbHksIGNhdXNlICM1MDJcblx0XHRmdW5jdGlvbiBEcmFmdFNldCh0aGlzOiBhbnksIHRhcmdldDogQW55U2V0LCBwYXJlbnQ/OiBJbW1lclN0YXRlKSB7XG5cdFx0XHR0aGlzW0RSQUZUX1NUQVRFXSA9IHtcblx0XHRcdFx0dHlwZV86IFByb3h5VHlwZS5TZXQsXG5cdFx0XHRcdHBhcmVudF86IHBhcmVudCxcblx0XHRcdFx0c2NvcGVfOiBwYXJlbnQgPyBwYXJlbnQuc2NvcGVfIDogZ2V0Q3VycmVudFNjb3BlKCkhLFxuXHRcdFx0XHRtb2RpZmllZF86IGZhbHNlLFxuXHRcdFx0XHRmaW5hbGl6ZWRfOiBmYWxzZSxcblx0XHRcdFx0Y29weV86IHVuZGVmaW5lZCxcblx0XHRcdFx0YmFzZV86IHRhcmdldCxcblx0XHRcdFx0ZHJhZnRfOiB0aGlzLFxuXHRcdFx0XHRkcmFmdHNfOiBuZXcgTWFwKCksXG5cdFx0XHRcdHJldm9rZWRfOiBmYWxzZSxcblx0XHRcdFx0aXNNYW51YWxfOiBmYWxzZVxuXHRcdFx0fSBhcyBTZXRTdGF0ZVxuXHRcdFx0cmV0dXJuIHRoaXNcblx0XHR9XG5cdFx0Y29uc3QgcCA9IERyYWZ0U2V0LnByb3RvdHlwZVxuXG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHAsIFwic2l6ZVwiLCB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gbGF0ZXN0KHRoaXNbRFJBRlRfU1RBVEVdKS5zaXplXG5cdFx0XHR9XG5cdFx0XHQvLyBlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdH0pXG5cblx0XHRwLmhhcyA9IGZ1bmN0aW9uKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcblx0XHRcdGNvbnN0IHN0YXRlOiBTZXRTdGF0ZSA9IHRoaXNbRFJBRlRfU1RBVEVdXG5cdFx0XHRhc3NlcnRVbnJldm9rZWQoc3RhdGUpXG5cdFx0XHQvLyBiaXQgb2YgdHJpY2tlcnkgaGVyZSwgdG8gYmUgYWJsZSB0byByZWNvZ25pemUgYm90aCB0aGUgdmFsdWUsIGFuZCB0aGUgZHJhZnQgb2YgaXRzIHZhbHVlXG5cdFx0XHRpZiAoIXN0YXRlLmNvcHlfKSB7XG5cdFx0XHRcdHJldHVybiBzdGF0ZS5iYXNlXy5oYXModmFsdWUpXG5cdFx0XHR9XG5cdFx0XHRpZiAoc3RhdGUuY29weV8uaGFzKHZhbHVlKSkgcmV0dXJuIHRydWVcblx0XHRcdGlmIChzdGF0ZS5kcmFmdHNfLmhhcyh2YWx1ZSkgJiYgc3RhdGUuY29weV8uaGFzKHN0YXRlLmRyYWZ0c18uZ2V0KHZhbHVlKSkpXG5cdFx0XHRcdHJldHVybiB0cnVlXG5cdFx0XHRyZXR1cm4gZmFsc2Vcblx0XHR9XG5cblx0XHRwLmFkZCA9IGZ1bmN0aW9uKHZhbHVlOiBhbnkpOiBhbnkge1xuXHRcdFx0Y29uc3Qgc3RhdGU6IFNldFN0YXRlID0gdGhpc1tEUkFGVF9TVEFURV1cblx0XHRcdGFzc2VydFVucmV2b2tlZChzdGF0ZSlcblx0XHRcdGlmICghdGhpcy5oYXModmFsdWUpKSB7XG5cdFx0XHRcdHByZXBhcmVTZXRDb3B5KHN0YXRlKVxuXHRcdFx0XHRtYXJrQ2hhbmdlZChzdGF0ZSlcblx0XHRcdFx0c3RhdGUuY29weV8hLmFkZCh2YWx1ZSlcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzXG5cdFx0fVxuXG5cdFx0cC5kZWxldGUgPSBmdW5jdGlvbih2YWx1ZTogYW55KTogYW55IHtcblx0XHRcdGlmICghdGhpcy5oYXModmFsdWUpKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZVxuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBzdGF0ZTogU2V0U3RhdGUgPSB0aGlzW0RSQUZUX1NUQVRFXVxuXHRcdFx0YXNzZXJ0VW5yZXZva2VkKHN0YXRlKVxuXHRcdFx0cHJlcGFyZVNldENvcHkoc3RhdGUpXG5cdFx0XHRtYXJrQ2hhbmdlZChzdGF0ZSlcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdHN0YXRlLmNvcHlfIS5kZWxldGUodmFsdWUpIHx8XG5cdFx0XHRcdChzdGF0ZS5kcmFmdHNfLmhhcyh2YWx1ZSlcblx0XHRcdFx0XHQ/IHN0YXRlLmNvcHlfIS5kZWxldGUoc3RhdGUuZHJhZnRzXy5nZXQodmFsdWUpKVxuXHRcdFx0XHRcdDogLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gZmFsc2UpXG5cdFx0XHQpXG5cdFx0fVxuXG5cdFx0cC5jbGVhciA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29uc3Qgc3RhdGU6IFNldFN0YXRlID0gdGhpc1tEUkFGVF9TVEFURV1cblx0XHRcdGFzc2VydFVucmV2b2tlZChzdGF0ZSlcblx0XHRcdGlmIChsYXRlc3Qoc3RhdGUpLnNpemUpIHtcblx0XHRcdFx0cHJlcGFyZVNldENvcHkoc3RhdGUpXG5cdFx0XHRcdG1hcmtDaGFuZ2VkKHN0YXRlKVxuXHRcdFx0XHRzdGF0ZS5jb3B5XyEuY2xlYXIoKVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHAudmFsdWVzID0gZnVuY3Rpb24oKTogSXRlcmFibGVJdGVyYXRvcjxhbnk+IHtcblx0XHRcdGNvbnN0IHN0YXRlOiBTZXRTdGF0ZSA9IHRoaXNbRFJBRlRfU1RBVEVdXG5cdFx0XHRhc3NlcnRVbnJldm9rZWQoc3RhdGUpXG5cdFx0XHRwcmVwYXJlU2V0Q29weShzdGF0ZSlcblx0XHRcdHJldHVybiBzdGF0ZS5jb3B5XyEudmFsdWVzKClcblx0XHR9XG5cblx0XHRwLmVudHJpZXMgPSBmdW5jdGlvbiBlbnRyaWVzKCk6IEl0ZXJhYmxlSXRlcmF0b3I8W2FueSwgYW55XT4ge1xuXHRcdFx0Y29uc3Qgc3RhdGU6IFNldFN0YXRlID0gdGhpc1tEUkFGVF9TVEFURV1cblx0XHRcdGFzc2VydFVucmV2b2tlZChzdGF0ZSlcblx0XHRcdHByZXBhcmVTZXRDb3B5KHN0YXRlKVxuXHRcdFx0cmV0dXJuIHN0YXRlLmNvcHlfIS5lbnRyaWVzKClcblx0XHR9XG5cblx0XHRwLmtleXMgPSBmdW5jdGlvbigpOiBJdGVyYWJsZUl0ZXJhdG9yPGFueT4ge1xuXHRcdFx0cmV0dXJuIHRoaXMudmFsdWVzKClcblx0XHR9XG5cblx0XHRwW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHRoaXMudmFsdWVzKClcblx0XHR9XG5cblx0XHRwLmZvckVhY2ggPSBmdW5jdGlvbiBmb3JFYWNoKGNiOiBhbnksIHRoaXNBcmc/OiBhbnkpIHtcblx0XHRcdGNvbnN0IGl0ZXJhdG9yID0gdGhpcy52YWx1ZXMoKVxuXHRcdFx0bGV0IHJlc3VsdCA9IGl0ZXJhdG9yLm5leHQoKVxuXHRcdFx0d2hpbGUgKCFyZXN1bHQuZG9uZSkge1xuXHRcdFx0XHRjYi5jYWxsKHRoaXNBcmcsIHJlc3VsdC52YWx1ZSwgcmVzdWx0LnZhbHVlLCB0aGlzKVxuXHRcdFx0XHRyZXN1bHQgPSBpdGVyYXRvci5uZXh0KClcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gRHJhZnRTZXRcblx0fSkoU2V0KVxuXG5cdGZ1bmN0aW9uIHByb3h5U2V0XzxUIGV4dGVuZHMgQW55U2V0Pih0YXJnZXQ6IFQsIHBhcmVudD86IEltbWVyU3RhdGUpOiBUIHtcblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0cmV0dXJuIG5ldyBEcmFmdFNldCh0YXJnZXQsIHBhcmVudClcblx0fVxuXG5cdGZ1bmN0aW9uIHByZXBhcmVTZXRDb3B5KHN0YXRlOiBTZXRTdGF0ZSkge1xuXHRcdGlmICghc3RhdGUuY29weV8pIHtcblx0XHRcdC8vIGNyZWF0ZSBkcmFmdHMgZm9yIGFsbCBlbnRyaWVzIHRvIHByZXNlcnZlIGluc2VydGlvbiBvcmRlclxuXHRcdFx0c3RhdGUuY29weV8gPSBuZXcgU2V0KClcblx0XHRcdHN0YXRlLmJhc2VfLmZvckVhY2godmFsdWUgPT4ge1xuXHRcdFx0XHRpZiAoaXNEcmFmdGFibGUodmFsdWUpKSB7XG5cdFx0XHRcdFx0Y29uc3QgZHJhZnQgPSBjcmVhdGVQcm94eShzdGF0ZS5zY29wZV8uaW1tZXJfLCB2YWx1ZSwgc3RhdGUpXG5cdFx0XHRcdFx0c3RhdGUuZHJhZnRzXy5zZXQodmFsdWUsIGRyYWZ0KVxuXHRcdFx0XHRcdHN0YXRlLmNvcHlfIS5hZGQoZHJhZnQpXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c3RhdGUuY29weV8hLmFkZCh2YWx1ZSlcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBhc3NlcnRVbnJldm9rZWQoc3RhdGU6IGFueSAvKkVTNVN0YXRlIHwgTWFwU3RhdGUgfCBTZXRTdGF0ZSovKSB7XG5cdFx0aWYgKHN0YXRlLnJldm9rZWRfKSBkaWUoMywgSlNPTi5zdHJpbmdpZnkobGF0ZXN0KHN0YXRlKSkpXG5cdH1cblxuXHRsb2FkUGx1Z2luKFwiTWFwU2V0XCIsIHtwcm94eU1hcF8sIHByb3h5U2V0X30pXG59XG4iLCAiaW1wb3J0IHtlbmFibGVFUzV9IGZyb20gXCIuL2VzNVwiXG5pbXBvcnQge2VuYWJsZU1hcFNldH0gZnJvbSBcIi4vbWFwc2V0XCJcbmltcG9ydCB7ZW5hYmxlUGF0Y2hlc30gZnJvbSBcIi4vcGF0Y2hlc1wiXG5cbmV4cG9ydCBmdW5jdGlvbiBlbmFibGVBbGxQbHVnaW5zKCkge1xuXHRlbmFibGVFUzUoKVxuXHRlbmFibGVNYXBTZXQoKVxuXHRlbmFibGVQYXRjaGVzKClcbn1cbiIsICJpbXBvcnQge1xuXHRJUHJvZHVjZSxcblx0SVByb2R1Y2VXaXRoUGF0Y2hlcyxcblx0SW1tZXIsXG5cdERyYWZ0LFxuXHRJbW11dGFibGVcbn0gZnJvbSBcIi4vaW50ZXJuYWxcIlxuXG5leHBvcnQge1xuXHREcmFmdCxcblx0SW1tdXRhYmxlLFxuXHRQYXRjaCxcblx0UGF0Y2hMaXN0ZW5lcixcblx0b3JpZ2luYWwsXG5cdGN1cnJlbnQsXG5cdGlzRHJhZnQsXG5cdGlzRHJhZnRhYmxlLFxuXHROT1RISU5HIGFzIG5vdGhpbmcsXG5cdERSQUZUQUJMRSBhcyBpbW1lcmFibGUsXG5cdGZyZWV6ZVxufSBmcm9tIFwiLi9pbnRlcm5hbFwiXG5cbmNvbnN0IGltbWVyID0gbmV3IEltbWVyKClcblxuLyoqXG4gKiBUaGUgYHByb2R1Y2VgIGZ1bmN0aW9uIHRha2VzIGEgdmFsdWUgYW5kIGEgXCJyZWNpcGUgZnVuY3Rpb25cIiAod2hvc2VcbiAqIHJldHVybiB2YWx1ZSBvZnRlbiBkZXBlbmRzIG9uIHRoZSBiYXNlIHN0YXRlKS4gVGhlIHJlY2lwZSBmdW5jdGlvbiBpc1xuICogZnJlZSB0byBtdXRhdGUgaXRzIGZpcnN0IGFyZ3VtZW50IGhvd2V2ZXIgaXQgd2FudHMuIEFsbCBtdXRhdGlvbnMgYXJlXG4gKiBvbmx5IGV2ZXIgYXBwbGllZCB0byBhIF9fY29weV9fIG9mIHRoZSBiYXNlIHN0YXRlLlxuICpcbiAqIFBhc3Mgb25seSBhIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIFwiY3VycmllZCBwcm9kdWNlclwiIHdoaWNoIHJlbGlldmVzIHlvdVxuICogZnJvbSBwYXNzaW5nIHRoZSByZWNpcGUgZnVuY3Rpb24gZXZlcnkgdGltZS5cbiAqXG4gKiBPbmx5IHBsYWluIG9iamVjdHMgYW5kIGFycmF5cyBhcmUgbWFkZSBtdXRhYmxlLiBBbGwgb3RoZXIgb2JqZWN0cyBhcmVcbiAqIGNvbnNpZGVyZWQgdW5jb3B5YWJsZS5cbiAqXG4gKiBOb3RlOiBUaGlzIGZ1bmN0aW9uIGlzIF9fYm91bmRfXyB0byBpdHMgYEltbWVyYCBpbnN0YW5jZS5cbiAqXG4gKiBAcGFyYW0ge2FueX0gYmFzZSAtIHRoZSBpbml0aWFsIHN0YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcm9kdWNlciAtIGZ1bmN0aW9uIHRoYXQgcmVjZWl2ZXMgYSBwcm94eSBvZiB0aGUgYmFzZSBzdGF0ZSBhcyBmaXJzdCBhcmd1bWVudCBhbmQgd2hpY2ggY2FuIGJlIGZyZWVseSBtb2RpZmllZFxuICogQHBhcmFtIHtGdW5jdGlvbn0gcGF0Y2hMaXN0ZW5lciAtIG9wdGlvbmFsIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2l0aCBhbGwgdGhlIHBhdGNoZXMgcHJvZHVjZWQgaGVyZVxuICogQHJldHVybnMge2FueX0gYSBuZXcgc3RhdGUsIG9yIHRoZSBpbml0aWFsIHN0YXRlIGlmIG5vdGhpbmcgd2FzIG1vZGlmaWVkXG4gKi9cbmV4cG9ydCBjb25zdCBwcm9kdWNlOiBJUHJvZHVjZSA9IGltbWVyLnByb2R1Y2VcbmV4cG9ydCBkZWZhdWx0IHByb2R1Y2VcblxuLyoqXG4gKiBMaWtlIGBwcm9kdWNlYCwgYnV0IGBwcm9kdWNlV2l0aFBhdGNoZXNgIGFsd2F5cyByZXR1cm5zIGEgdHVwbGVcbiAqIFtuZXh0U3RhdGUsIHBhdGNoZXMsIGludmVyc2VQYXRjaGVzXSAoaW5zdGVhZCBvZiBqdXN0IHRoZSBuZXh0IHN0YXRlKVxuICovXG5leHBvcnQgY29uc3QgcHJvZHVjZVdpdGhQYXRjaGVzOiBJUHJvZHVjZVdpdGhQYXRjaGVzID0gaW1tZXIucHJvZHVjZVdpdGhQYXRjaGVzLmJpbmQoXG5cdGltbWVyXG4pXG5cbi8qKlxuICogUGFzcyB0cnVlIHRvIGF1dG9tYXRpY2FsbHkgZnJlZXplIGFsbCBjb3BpZXMgY3JlYXRlZCBieSBJbW1lci5cbiAqXG4gKiBBbHdheXMgZnJlZXplIGJ5IGRlZmF1bHQsIGV2ZW4gaW4gcHJvZHVjdGlvbiBtb2RlXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRBdXRvRnJlZXplID0gaW1tZXIuc2V0QXV0b0ZyZWV6ZS5iaW5kKGltbWVyKVxuXG4vKipcbiAqIFBhc3MgdHJ1ZSB0byB1c2UgdGhlIEVTMjAxNSBgUHJveHlgIGNsYXNzIHdoZW4gY3JlYXRpbmcgZHJhZnRzLCB3aGljaCBpc1xuICogYWx3YXlzIGZhc3RlciB0aGFuIHVzaW5nIEVTNSBwcm94aWVzLlxuICpcbiAqIEJ5IGRlZmF1bHQsIGZlYXR1cmUgZGV0ZWN0aW9uIGlzIHVzZWQsIHNvIGNhbGxpbmcgdGhpcyBpcyByYXJlbHkgbmVjZXNzYXJ5LlxuICovXG5leHBvcnQgY29uc3Qgc2V0VXNlUHJveGllcyA9IGltbWVyLnNldFVzZVByb3hpZXMuYmluZChpbW1lcilcblxuLyoqXG4gKiBBcHBseSBhbiBhcnJheSBvZiBJbW1lciBwYXRjaGVzIHRvIHRoZSBmaXJzdCBhcmd1bWVudC5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGEgcHJvZHVjZXIsIHdoaWNoIG1lYW5zIGNvcHktb24td3JpdGUgaXMgaW4gZWZmZWN0LlxuICovXG5leHBvcnQgY29uc3QgYXBwbHlQYXRjaGVzID0gaW1tZXIuYXBwbHlQYXRjaGVzLmJpbmQoaW1tZXIpXG5cbi8qKlxuICogQ3JlYXRlIGFuIEltbWVyIGRyYWZ0IGZyb20gdGhlIGdpdmVuIGJhc2Ugc3RhdGUsIHdoaWNoIG1heSBiZSBhIGRyYWZ0IGl0c2VsZi5cbiAqIFRoZSBkcmFmdCBjYW4gYmUgbW9kaWZpZWQgdW50aWwgeW91IGZpbmFsaXplIGl0IHdpdGggdGhlIGBmaW5pc2hEcmFmdGAgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVEcmFmdCA9IGltbWVyLmNyZWF0ZURyYWZ0LmJpbmQoaW1tZXIpXG5cbi8qKlxuICogRmluYWxpemUgYW4gSW1tZXIgZHJhZnQgZnJvbSBhIGBjcmVhdGVEcmFmdGAgY2FsbCwgcmV0dXJuaW5nIHRoZSBiYXNlIHN0YXRlXG4gKiAoaWYgbm8gY2hhbmdlcyB3ZXJlIG1hZGUpIG9yIGEgbW9kaWZpZWQgY29weS4gVGhlIGRyYWZ0IG11c3QgKm5vdCogYmVcbiAqIG11dGF0ZWQgYWZ0ZXJ3YXJkcy5cbiAqXG4gKiBQYXNzIGEgZnVuY3Rpb24gYXMgdGhlIDJuZCBhcmd1bWVudCB0byBnZW5lcmF0ZSBJbW1lciBwYXRjaGVzIGJhc2VkIG9uIHRoZVxuICogY2hhbmdlcyB0aGF0IHdlcmUgbWFkZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGZpbmlzaERyYWZ0ID0gaW1tZXIuZmluaXNoRHJhZnQuYmluZChpbW1lcilcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGEgbm8tb3AsIGJ1dCBjYW4gYmUgdXNlZCB0byBjYXN0IGFuIGltbXV0YWJsZSB0eXBlXG4gKiB0byBhbiBkcmFmdCB0eXBlIGFuZCBtYWtlIFR5cGVTY3JpcHQgaGFwcHlcbiAqXG4gKiBAcGFyYW0gdmFsdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhc3REcmFmdDxUPih2YWx1ZTogVCk6IERyYWZ0PFQ+IHtcblx0cmV0dXJuIHZhbHVlIGFzIGFueVxufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgYSBuby1vcCwgYnV0IGNhbiBiZSB1c2VkIHRvIGNhc3QgYSBtdXRhYmxlIHR5cGVcbiAqIHRvIGFuIGltbXV0YWJsZSB0eXBlIGFuZCBtYWtlIFR5cGVTY3JpcHQgaGFwcHlcbiAqIEBwYXJhbSB2YWx1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FzdEltbXV0YWJsZTxUPih2YWx1ZTogVCk6IEltbXV0YWJsZTxUPiB7XG5cdHJldHVybiB2YWx1ZSBhcyBhbnlcbn1cblxuZXhwb3J0IHtJbW1lcn1cblxuZXhwb3J0IHtlbmFibGVFUzV9IGZyb20gXCIuL3BsdWdpbnMvZXM1XCJcbmV4cG9ydCB7ZW5hYmxlUGF0Y2hlc30gZnJvbSBcIi4vcGx1Z2lucy9wYXRjaGVzXCJcbmV4cG9ydCB7ZW5hYmxlTWFwU2V0fSBmcm9tIFwiLi9wbHVnaW5zL21hcHNldFwiXG5leHBvcnQge2VuYWJsZUFsbFBsdWdpbnN9IGZyb20gXCIuL3BsdWdpbnMvYWxsXCJcbiIsICIvLyBTaG91bGQgYmUgbm8gaW1wb3J0cyBoZXJlIVxuXG4vLyBTb21lIHRoaW5ncyB0aGF0IHNob3VsZCBiZSBldmFsdWF0ZWQgYmVmb3JlIGFsbCBlbHNlLi4uXG5cbi8vIFdlIG9ubHkgd2FudCB0byBrbm93IGlmIG5vbi1wb2x5ZmlsbGVkIHN5bWJvbHMgYXJlIGF2YWlsYWJsZVxuY29uc3QgaGFzU3ltYm9sID1cblx0dHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgU3ltYm9sKFwieFwiKSA9PT0gXCJzeW1ib2xcIlxuZXhwb3J0IGNvbnN0IGhhc01hcCA9IHR5cGVvZiBNYXAgIT09IFwidW5kZWZpbmVkXCJcbmV4cG9ydCBjb25zdCBoYXNTZXQgPSB0eXBlb2YgU2V0ICE9PSBcInVuZGVmaW5lZFwiXG5leHBvcnQgY29uc3QgaGFzUHJveGllcyA9XG5cdHR5cGVvZiBQcm94eSAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuXHR0eXBlb2YgUHJveHkucmV2b2NhYmxlICE9PSBcInVuZGVmaW5lZFwiICYmXG5cdHR5cGVvZiBSZWZsZWN0ICE9PSBcInVuZGVmaW5lZFwiXG5cbi8qKlxuICogVGhlIHNlbnRpbmVsIHZhbHVlIHJldHVybmVkIGJ5IHByb2R1Y2VycyB0byByZXBsYWNlIHRoZSBkcmFmdCB3aXRoIHVuZGVmaW5lZC5cbiAqL1xuZXhwb3J0IGNvbnN0IE5PVEhJTkc6IE5vdGhpbmcgPSBoYXNTeW1ib2xcblx0PyBTeW1ib2wuZm9yKFwiaW1tZXItbm90aGluZ1wiKVxuXHQ6ICh7W1wiaW1tZXItbm90aGluZ1wiXTogdHJ1ZX0gYXMgYW55KVxuXG4vKipcbiAqIFRvIGxldCBJbW1lciB0cmVhdCB5b3VyIGNsYXNzIGluc3RhbmNlcyBhcyBwbGFpbiBpbW11dGFibGUgb2JqZWN0c1xuICogKGFsYmVpdCB3aXRoIGEgY3VzdG9tIHByb3RvdHlwZSksIHlvdSBtdXN0IGRlZmluZSBlaXRoZXIgYW4gaW5zdGFuY2UgcHJvcGVydHlcbiAqIG9yIGEgc3RhdGljIHByb3BlcnR5IG9uIGVhY2ggb2YgeW91ciBjdXN0b20gY2xhc3Nlcy5cbiAqXG4gKiBPdGhlcndpc2UsIHlvdXIgY2xhc3MgaW5zdGFuY2Ugd2lsbCBuZXZlciBiZSBkcmFmdGVkLCB3aGljaCBtZWFucyBpdCB3b24ndCBiZVxuICogc2FmZSB0byBtdXRhdGUgaW4gYSBwcm9kdWNlIGNhbGxiYWNrLlxuICovXG5leHBvcnQgY29uc3QgRFJBRlRBQkxFOiB1bmlxdWUgc3ltYm9sID0gaGFzU3ltYm9sXG5cdD8gU3ltYm9sLmZvcihcImltbWVyLWRyYWZ0YWJsZVwiKVxuXHQ6IChcIl9fJGltbWVyX2RyYWZ0YWJsZVwiIGFzIGFueSlcblxuZXhwb3J0IGNvbnN0IERSQUZUX1NUQVRFOiB1bmlxdWUgc3ltYm9sID0gaGFzU3ltYm9sXG5cdD8gU3ltYm9sLmZvcihcImltbWVyLXN0YXRlXCIpXG5cdDogKFwiX18kaW1tZXJfc3RhdGVcIiBhcyBhbnkpXG5cbi8vIEV2ZW4gYSBwb2x5ZmlsbGVkIFN5bWJvbCBtaWdodCBwcm92aWRlIFN5bWJvbC5pdGVyYXRvclxuZXhwb3J0IGNvbnN0IGl0ZXJhdG9yU3ltYm9sOiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID1cblx0KHR5cGVvZiBTeW1ib2wgIT0gXCJ1bmRlZmluZWRcIiAmJiBTeW1ib2wuaXRlcmF0b3IpIHx8IChcIkBAaXRlcmF0b3JcIiBhcyBhbnkpXG5cbi8qKiBVc2UgYSBjbGFzcyB0eXBlIGZvciBgbm90aGluZ2Agc28gaXRzIHR5cGUgaXMgdW5pcXVlICovXG5leHBvcnQgY2xhc3MgTm90aGluZyB7XG5cdC8vIFRoaXMgbGV0cyB1cyBkbyBgRXhjbHVkZTxULCBOb3RoaW5nPmBcblx0Ly8gQHRzLWlnbm9yZVxuXHRwcml2YXRlIF8hOiB1bmlxdWUgc3ltYm9sXG59XG4iLCAiaW1wb3J0IFwiLi9pY29uLW1hbmFnZXIubGVzc1wiO1xuXG5pbXBvcnQgeyBlbmFibGVNYXBTZXQgfSBmcm9tIFwiaW1tZXJcIjtcbmltcG9ydCB7IE1vZGFsLCBzZXRJY29uIH0gZnJvbSBcIm9ic2lkaWFuXCI7XG5pbXBvcnQgUmVhY3QsIHtcbiAgY3JlYXRlQ29udGV4dCxcbiAgdXNlQ29udGV4dCxcbiAgdXNlRWZmZWN0LFxuICB1c2VNZW1vLFxuICB1c2VTdGF0ZSxcbn0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IHsgdXNlSW1tZXIgfSBmcm9tIFwidXNlLWltbWVyXCI7XG5cbmltcG9ydCBQYWNrTWFuYWdlciBmcm9tIFwiLi4vaWNvbi1wYWNrcy9wYWNrLW1hbmFnZXJcIjtcbmltcG9ydCB7IEZpbGVJY29uSW5mbywgSWNvbkluZm8gfSBmcm9tIFwiLi4vaWNvbi1wYWNrcy90eXBlc1wiO1xuaW1wb3J0IEljb25TQyBmcm9tIFwiLi4vaXNjLW1haW5cIjtcbmltcG9ydCBJY29uUHJldmlldyBmcm9tIFwiLi9pY29uLXByZXZpZXdcIjtcblxuZW5hYmxlTWFwU2V0KCk7XG5cbnR5cGUgaWNvbnMgPSBSZWNvcmQ8XCJ0cmFzaFwiIHwgXCJwZW5jaWxcIiB8IFwic3RhclwiIHwgXCJjaGVja21hcmtcIiwgc3RyaW5nPjtcbmNvbnN0IGdldEljb25zID0gKCk6IGljb25zID0+IHtcbiAgY29uc3QgdGVtcEVsID0gY3JlYXRlRGl2KCksXG4gICAgcmV0dXJuczogUGFydGlhbDxpY29ucz4gPSB7fTtcbiAgZm9yIChjb25zdCBpY29uIG9mIFtcInRyYXNoXCIsIFwicGVuY2lsXCIsIFwic3RhclwiLCBcImNoZWNrbWFya1wiXSBhcyBjb25zdCkge1xuICAgIHRlbXBFbC5lbXB0eSgpO1xuICAgIHNldEljb24odGVtcEVsLCBpY29uLCAxNCk7XG4gICAgcmV0dXJuc1tpY29uXSA9IHRlbXBFbC5pbm5lckhUTUw7XG4gIH1cbiAgcmV0dXJuIHJldHVybnMgYXMgaWNvbnM7XG59O1xuXG5leHBvcnQgY29uc3QgQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8eyBwYWNrczogUGFja01hbmFnZXI7IGljb25zOiBpY29ucyB9PihcbiAgbnVsbCBhcyBhbnksXG4pO1xuXG5jb25zdCBBTExfVVBEQVRFX0tFWSA9IFwiJUFMTCVcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSWNvbk1hbmFnZXIgZXh0ZW5kcyBNb2RhbCB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBwbHVnaW46IEljb25TQywgcHVibGljIHBhY2s6IHN0cmluZykge1xuICAgIHN1cGVyKHBsdWdpbi5hcHApO1xuICAgIHRoaXMudGl0bGVFbC5zZXRUZXh0KGAke3BhY2t9IEljb25zYCk7XG4gICAgdGhpcy5tb2RhbEVsLmFkZENsYXNzZXMoW1wiaXNjLWljb24tbWFuYWdlclwiLCBcIm1vZC1jb21tdW5pdHktdGhlbWVcIl0pO1xuICB9XG5cbiAgYXN5bmMgb25PcGVuKCkge1xuICAgIHRoaXMuY29udGVudEVsLmVtcHR5KCk7XG4gICAgUmVhY3RET00ucmVuZGVyKFxuICAgICAgPENvbnRleHQuUHJvdmlkZXJcbiAgICAgICAgdmFsdWU9e3sgcGFja3M6IHRoaXMucGx1Z2luLnBhY2tNYW5hZ2VyLCBpY29uczogZ2V0SWNvbnMoKSB9fVxuICAgICAgPlxuICAgICAgICA8SWNvbnMgcGFjaz17dGhpcy5wYWNrfSAvPlxuICAgICAgPC9Db250ZXh0LlByb3ZpZGVyPixcbiAgICAgIHRoaXMuY29udGVudEVsLFxuICAgICk7XG4gIH1cbiAgb25DbG9zZSgpIHtcbiAgICBSZWFjdERPTS51bm1vdW50Q29tcG9uZW50QXROb2RlKHRoaXMuY29udGVudEVsKTtcbiAgfVxufVxuY29uc3QgY29tcGFyZUljb25JZCA9IChhOiBJY29uSW5mbywgYjogSWNvbkluZm8pOiBudW1iZXIgPT5cbiAgYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKTtcbmNvbnN0IEljb25zID0gKHsgcGFjayB9OiB7IHBhY2s6IHN0cmluZyB9KSA9PiB7XG4gIGlmIChwYWNrID09PSBcImVtb2ppXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJFbW9qaSBub3Qgc3VwcG9ydGVkXCIpO1xuXG4gIGNvbnN0IHsgcGFja3MgfSA9IHVzZUNvbnRleHQoQ29udGV4dCk7XG4gIGNvbnN0IFtmaWx0ZXIsIHNldEZpbHRlcl0gPSB1c2VTdGF0ZShcIlwiKTtcbiAgY29uc3QgW2FmZmVjdGVkLCBzZXRBZmZlY3RlZF0gPSB1c2VJbW1lcihuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpKTtcbiAgY29uc3QgaWRzID0gdXNlTWVtbyhcbiAgICAoKSA9PiB7XG4gICAgICBsZXQgYXJyID0gcGFja3NcbiAgICAgICAgLnNlYXJjaChmaWx0ZXIgPyBmaWx0ZXIudHJpbSgpLnNwbGl0KFwiIFwiKSA6IFtdLCBbcGFja10sIEluZmluaXR5KVxuICAgICAgICAvLyBhZGQgYW4gdXBkYXRlZCBwcm9wZXJ0eSB0byBmb3JjZSBhbiBpY29uIHVwZGF0ZSBpbnRlcm5hbGx5XG4gICAgICAgIC5tYXAoKHsgaXRlbSB9KSA9PiBpdGVtIGFzIEZpbGVJY29uSW5mbyk7XG4gICAgICBpZiAoIWZpbHRlcikgYXJyLnNvcnQoY29tcGFyZUljb25JZCk7XG4gICAgICByZXR1cm4gYXJyO1xuICAgIH0sXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICAgIFtmaWx0ZXIsIHBhY2ssIGFmZmVjdGVkXSxcbiAgKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBldmVudFJlZiA9IHBhY2tzLm9uKFwiY2hhbmdlZFwiLCAoX2FwaSwgYWZmZWN0ZWQpID0+XG4gICAgICBzZXRBZmZlY3RlZCgoZHJhZnQpID0+IHtcbiAgICAgICAgaWYgKGFmZmVjdGVkKVxuICAgICAgICAgIGFmZmVjdGVkLmZvckVhY2goKGlkOiBzdHJpbmcpID0+XG4gICAgICAgICAgICBkcmFmdC5zZXQoaWQsIChkcmFmdC5nZXQoaWQpIHx8IDApICsgMSksXG4gICAgICAgICAgKTtcbiAgICAgICAgZWxzZSBkcmFmdC5zZXQoQUxMX1VQREFURV9LRVksIChkcmFmdC5nZXQoQUxMX1VQREFURV9LRVkpIHx8IDApICsgMSk7XG4gICAgICB9KSxcbiAgICApO1xuICAgIHJldHVybiAoKSA9PiBwYWNrcy5vZmZyZWYoZXZlbnRSZWYpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgW3BhY2tzXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmaWx0ZXJcIj5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRmlsdGVyXCJcbiAgICAgICAgICB2YWx1ZT17ZmlsdGVyfVxuICAgICAgICAgIG9uQ2hhbmdlPXsoZXZ0KSA9PiBzZXRGaWx0ZXIoZXZ0LnRhcmdldC52YWx1ZSl9XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaWNvbnNcIj5cbiAgICAgICAge2lkcy5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgICBjb25zdCB1cGRhdGVkID1cbiAgICAgICAgICAgIChhZmZlY3RlZC5nZXQoaXRlbS5pZCkgPz8gMCkgKyAoYWZmZWN0ZWQuZ2V0KEFMTF9VUERBVEVfS0VZKSA/PyAwKTtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPEljb25QcmV2aWV3XG4gICAgICAgICAgICAgIGljb25JbmZvPXtpdGVtfVxuICAgICAgICAgICAgICB1cGRhdGVkPXt1cGRhdGVkfVxuICAgICAgICAgICAgICBrZXk9e2l0ZW0uaWQgKyB1cGRhdGVkfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApO1xuICAgICAgICB9KX1cbiAgICAgIDwvZGl2PlxuICAgIDwvPlxuICApO1xufTtcbiIsICJpbXBvcnQgcHJvZHVjZSwgeyBEcmFmdCwgbm90aGluZywgZnJlZXplIH0gZnJvbSBcImltbWVyXCI7XG5pbXBvcnQgeyB1c2VTdGF0ZSwgdXNlUmVkdWNlciwgdXNlQ2FsbGJhY2ssIHVzZU1lbW8sIERpc3BhdGNoIH0gZnJvbSBcInJlYWN0XCI7XG5cbmV4cG9ydCB0eXBlIFJlZHVjZXI8UyA9IGFueSwgQSA9IGFueT4gPSAoXG4gIGRyYWZ0U3RhdGU6IERyYWZ0PFM+LFxuICBhY3Rpb246IEFcbikgPT4gdm9pZCB8IChTIGV4dGVuZHMgdW5kZWZpbmVkID8gdHlwZW9mIG5vdGhpbmcgOiBTKTtcbmV4cG9ydCB0eXBlIERyYWZ0RnVuY3Rpb248Uz4gPSAoZHJhZnQ6IERyYWZ0PFM+KSA9PiB2b2lkO1xuZXhwb3J0IHR5cGUgVXBkYXRlcjxTPiA9IChhcmc6IFMgfCBEcmFmdEZ1bmN0aW9uPFM+KSA9PiB2b2lkO1xuZXhwb3J0IHR5cGUgSW1tZXJIb29rPFM+ID0gW1MsIFVwZGF0ZXI8Uz5dO1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUltbWVyPFMgPSBhbnk+KGluaXRpYWxWYWx1ZTogUyB8ICgoKSA9PiBTKSk6IEltbWVySG9vazxTPjtcblxuZXhwb3J0IGZ1bmN0aW9uIHVzZUltbWVyKGluaXRpYWxWYWx1ZTogYW55KSB7XG4gIGNvbnN0IFt2YWwsIHVwZGF0ZVZhbHVlXSA9IHVzZVN0YXRlKCgpID0+XG4gICAgZnJlZXplKFxuICAgICAgdHlwZW9mIGluaXRpYWxWYWx1ZSA9PT0gXCJmdW5jdGlvblwiID8gaW5pdGlhbFZhbHVlKCkgOiBpbml0aWFsVmFsdWUsXG4gICAgICB0cnVlXG4gICAgKVxuICApO1xuICByZXR1cm4gW1xuICAgIHZhbCxcbiAgICB1c2VDYWxsYmFjaygodXBkYXRlcikgPT4ge1xuICAgICAgaWYgKHR5cGVvZiB1cGRhdGVyID09PSBcImZ1bmN0aW9uXCIpIHVwZGF0ZVZhbHVlKHByb2R1Y2UodXBkYXRlcikpO1xuICAgICAgZWxzZSB1cGRhdGVWYWx1ZShmcmVlemUodXBkYXRlcikpO1xuICAgIH0sIFtdKSxcbiAgXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZUltbWVyUmVkdWNlcjxTID0gYW55LCBBID0gYW55PihcbiAgcmVkdWNlcjogUmVkdWNlcjxTLCBBPixcbiAgaW5pdGlhbFN0YXRlOiBTLFxuICBpbml0aWFsQWN0aW9uPzogKGluaXRpYWw6IGFueSkgPT4gU1xuKTogW1MsIERpc3BhdGNoPEE+XTtcbmV4cG9ydCBmdW5jdGlvbiB1c2VJbW1lclJlZHVjZXIoXG4gIHJlZHVjZXI6IGFueSxcbiAgaW5pdGlhbFN0YXRlOiBhbnksXG4gIGluaXRpYWxBY3Rpb246IGFueVxuKSB7XG4gIGNvbnN0IGNhY2hlZFJlZHVjZXIgPSB1c2VNZW1vKCgpID0+IHByb2R1Y2UocmVkdWNlciksIFtyZWR1Y2VyXSk7XG4gIHJldHVybiB1c2VSZWR1Y2VyKGNhY2hlZFJlZHVjZXIsIGluaXRpYWxTdGF0ZSBhcyBhbnksIGluaXRpYWxBY3Rpb24pO1xufVxuIiwgImltcG9ydCBcIi4uL2ludmFsaWQubGVzc1wiO1xuXG5pbXBvcnQgY2xzIGZyb20gXCJjbGFzc25hbWVzXCI7XG5pbXBvcnQgeyBOb3RpY2UgfSBmcm9tIFwib2JzaWRpYW5cIjtcbmltcG9ydCBSZWFjdCwge1xuICBIVE1MQXR0cmlidXRlcyxcbiAgVGV4dGFyZWFIVE1MQXR0cmlidXRlcyxcbiAgdXNlQ29udGV4dCxcbiAgdXNlTWVtbyxcbiAgdXNlU3RhdGUsXG59IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgeyBGaWxlSWNvbkluZm8gfSBmcm9tIFwiLi4vaWNvbi1wYWNrcy90eXBlc1wiO1xuaW1wb3J0IHsgc2FuaXRpemVOYW1lIH0gZnJvbSBcIi4uL2ljb24tcGFja3MvdXRpbHNcIjtcbmltcG9ydCB7IENvbnRleHQgfSBmcm9tIFwiLi9pY29uLW1hbmFnZXJcIjtcblxuaW50ZXJmYWNlIEljb25QcmV2aWV3UHJvcHMge1xuICBpY29uSW5mbzogRmlsZUljb25JbmZvO1xuICB1cGRhdGVkOiBudW1iZXI7XG59XG5cbmNvbnN0IEljb25QcmV2aWV3ID0gKHsgaWNvbkluZm8sIHVwZGF0ZWQgfTogSWNvblByZXZpZXdQcm9wcykgPT4ge1xuICBjb25zdCB7IHBhY2tzLCBpY29ucyB9ID0gdXNlQ29udGV4dChDb250ZXh0KSxcbiAgICB7IHRyYXNoLCBwZW5jaWwsIHN0YXIsIGNoZWNrbWFyayB9ID0gaWNvbnM7XG5cbiAgY29uc3QgW2lucHV0LCBzZXRJbnB1dF0gPSB1c2VTdGF0ZShpY29uSW5mby5uYW1lLnJlcGxhY2UoL1stX10vZywgXCIgXCIpKSxcbiAgICBbaXNFZGl0aW5nLCBzZXRJc0VkaXRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gIGNvbnN0IGlucHV0SWQgPSBgJHtpY29uSW5mby5wYWNrfV8ke3Nhbml0aXplTmFtZShpbnB1dCl9YCxcbiAgICBpc0lucHV0VmFpbGQgPSBpbnB1dElkID09PSBpY29uSW5mby5pZCB8fCAhcGFja3MuaGFzSWNvbihpbnB1dElkKTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIGNvbnN0IGljb25TcmMgPSB1c2VNZW1vKFxuICAgICgpID0+IHBhY2tzLmdldEljb24oaWNvbkluZm8uaWQsIHRydWUpLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgICBbaWNvbkluZm8uaWQsIHVwZGF0ZWRdLFxuICApO1xuICBjb25zdCByZW5hbWVJY29uID0gYXN5bmMgKHJlbmFtZVRvOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBuZXdOYW1lID0gYXdhaXQgcGFja3MucmVuYW1lKGljb25JbmZvLmlkLCByZW5hbWVUbyk7XG4gICAgaWYgKCFuZXdOYW1lKVxuICAgICAgbmV3IE5vdGljZShgRmFpbGVkIHRvIHJlbmFtZSB0byAke2lucHV0fSwgY2hlY2sgbG9nIGZvciBkZXRhaWxzYCk7XG4gICAgZWxzZSB7XG4gICAgICBuZXcgTm90aWNlKGBUaGUgaWNvbiBpcyByZW5hbWVkIHRvICR7bmV3TmFtZX1gKTtcbiAgICAgIHNldElzRWRpdGluZyhmYWxzZSk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJpdGVtXCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImljb25cIj5cbiAgICAgICAgPGltZyBjbGFzc05hbWU9XCJpc2MtaWNvblwiIHNyYz17aWNvblNyYyA/PyB1bmRlZmluZWR9IC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibmFtZVwiPlxuICAgICAgICB7aXNFZGl0aW5nID8gKFxuICAgICAgICAgIDxUZXh0XG4gICAgICAgICAgICBjbGFzc05hbWU9e2Nscyh7IGludmFsaWQ6ICFpc0lucHV0VmFpbGQgfSl9XG4gICAgICAgICAgICBvbkNoYW5nZT17KGV2dCkgPT4gc2V0SW5wdXQoZXZ0LnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICB2YWx1ZT17aW5wdXR9XG4gICAgICAgICAgLz5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8c3Bhbj57aW5wdXR9PC9zcGFuPlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImJ1dHRvbnNcIj5cbiAgICAgICAgPE9iQnV0dG9uXG4gICAgICAgICAgYnRuVHlwZT1cImN0YVwiXG4gICAgICAgICAgaWNvbj17c3Rhcn1cbiAgICAgICAgICBvbkNsaWNrPXthc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbmV3TmFtZTtcbiAgICAgICAgICAgIGlmICgobmV3TmFtZSA9IGF3YWl0IHBhY2tzLnN0YXIoaWNvbkluZm8uaWQpKSkge1xuICAgICAgICAgICAgICBuZXcgTm90aWNlKGAke2ljb25JbmZvLmlkfSBpcyBub3cgJHtuZXdOYW1lfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgICAgIDxPYkJ1dHRvblxuICAgICAgICAgIGJ0blR5cGU9XCJjdGFcIlxuICAgICAgICAgIGljb249e2lzRWRpdGluZyA/IGNoZWNrbWFyayA6IHBlbmNpbH1cbiAgICAgICAgICBvbkNsaWNrPXthc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNFZGl0aW5nKSB7XG4gICAgICAgICAgICAgIGlmIChpc0lucHV0VmFpbGQpIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXRJZCAhPT0gaWNvbkluZm8uaWQpIHtcbiAgICAgICAgICAgICAgICAgIGF3YWl0IHJlbmFtZUljb24oaW5wdXRJZCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHNldElzRWRpdGluZyhmYWxzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG5ldyBOb3RpY2UoYFVuYWJsZSB0byByZW5hbWUgdG8gJHtpbnB1dH0sIGdpdmVuIGlkIGludmFsaWRgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2V0SXNFZGl0aW5nKHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgICAgIDxPYkJ1dHRvblxuICAgICAgICAgIGJ0blR5cGU9XCJ3YXJuaW5nXCJcbiAgICAgICAgICBpY29uPXt0cmFzaH1cbiAgICAgICAgICBvbkNsaWNrPXthc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoYXdhaXQgcGFja3MuZGVsZXRlKGljb25JbmZvLmlkKSkge1xuICAgICAgICAgICAgICBuZXcgTm90aWNlKGAke2ljb25JbmZvLmlkfSBpcyByZW1vdmVkIGZyb20gdGhlIHBhY2tgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBJY29uUHJldmlldztcblxuY29uc3QgT2JCdXR0b24gPSAoXG4gIHByb3BzOiBIVE1MQXR0cmlidXRlczxIVE1MQnV0dG9uRWxlbWVudD4gJiB7XG4gICAgYnRuVHlwZT86IFwid2FybmluZ1wiIHwgXCJjdGFcIjtcbiAgICBpbnZhbGlkPzogYm9vbGVhbjtcbiAgICBpY29uOiBzdHJpbmc7XG4gIH0sXG4pID0+IHtcbiAgY29uc3QgeyBidG5UeXBlLCBpY29uLCAuLi5yZXN0IH0gPSBwcm9wcztcbiAgcmV0dXJuIChcbiAgICA8YnV0dG9uXG4gICAgICB7Li4ucmVzdH1cbiAgICAgIGNsYXNzTmFtZT17Y2xzKHsgW1wibW9kLVwiICsgYnRuVHlwZV06ICEhYnRuVHlwZSB9KX1cbiAgICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7IF9faHRtbDogaWNvbiB9fVxuICAgIC8+XG4gICk7XG59O1xuXG5jb25zdCBUZXh0ID0gKFxuICBwcm9wczogUGljazxcbiAgICBUZXh0YXJlYUhUTUxBdHRyaWJ1dGVzPEhUTUxUZXh0QXJlYUVsZW1lbnQ+LFxuICAgIFwib25DaGFuZ2VcIiB8IFwidmFsdWVcIiB8IFwiY2xhc3NOYW1lXCJcbiAgPixcbikgPT4gPHRleHRhcmVhIHNwZWxsQ2hlY2s9XCJmYWxzZVwiIHJvd3M9ezJ9IHsuLi5wcm9wc30gLz47XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7OzswMHRJQUFBLG1CQVdBLEdBQU8sUUFBVSxPQ1hqQixnQ0EwQkEsWUFBb0IsRUFBTSxDQUN4QixHQUFJLE1BQU8sSUFBUyxTQUNsQixLQUFNLElBQUksV0FBVSxtQ0FBcUMsS0FBSyxVQUFVLENBQUksQ0FBQyxDQUVqRixDQUdBLFlBQThCLEVBQU0sRUFBZ0IsQ0FNbEQsT0FMSSxHQUFNLEdBQ04sRUFBb0IsRUFDcEIsRUFBWSxHQUNaLEVBQU8sRUFDUCxFQUNLLEVBQUksRUFBRyxHQUFLLEVBQUssT0FBUSxFQUFFLEVBQUcsQ0FDckMsR0FBSSxFQUFJLEVBQUssT0FDWCxFQUFPLEVBQUssV0FBVyxDQUFDLE1BQ3JCLElBQUksSUFBUyxHQUNoQixNQUVBLEVBQU8sR0FDVCxHQUFJLElBQVMsR0FBVSxDQUNyQixHQUFJLE1BQWMsRUFBSSxHQUFLLElBQVMsR0FFN0IsR0FBSSxJQUFjLEVBQUksR0FBSyxJQUFTLEVBQUcsQ0FDNUMsR0FBSSxFQUFJLE9BQVMsR0FBSyxJQUFzQixHQUFLLEVBQUksV0FBVyxFQUFJLE9BQVMsQ0FBQyxJQUFNLElBQVksRUFBSSxXQUFXLEVBQUksT0FBUyxDQUFDLElBQU0sSUFDakksR0FBSSxFQUFJLE9BQVMsRUFBRyxDQUNsQixHQUFJLEdBQWlCLEVBQUksWUFBWSxHQUFHLEVBQ3hDLEdBQUksSUFBbUIsRUFBSSxPQUFTLEVBQUcsQ0FDckMsQUFBSSxJQUFtQixHQUNyQixHQUFNLEdBQ04s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TUFBTyxHQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTyxHQUFFLEdBQUcsT0FBTyxDQUFDLE9BQVEsR0FBRSxBQUFZLE1BQU8sVUFBbkIsWUFBNEIsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU8sRUFBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxhQUFhLEdBQUksR0FBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsb0VBQW9FLEVBQUUsT0FBTyxTQUFTLEVBQUUsQ0FBQyxPQUFRLEdBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEFBQVcsRUFBRSxVQUFVLENBQUMsSUFBeEIsU0FBMEIsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFHLEdBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssR0FBSSxHQUFFLEVBQUUsV0FBVyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxXQUFXLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFdBQVcsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRyxHQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUcsSUFBRyxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRSxNQUFPLEdBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFLE9BQU8sU0FBUyxFQUFFLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsUUFBUSxHQUFHLEVBQUUsT0FBTyxFQUFFLEVBQUUsTUFBTSxJQUFJLEVBQUUsS0FBTSxJQUFJLE9BQU0saURBQWlELEVBQUUsR0FBSSxHQUFFLEVBQUUsRUFBRyxHQUFFLEVBQUUsUUFBUSxzQkFBc0IsRUFBRSxHQUFHLE9BQU8sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEdBQUcsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxHQUFHLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBTSxJQUFJLE9BQU0sMkNBQTJDLEVBQUUsSUFBSSxFQUFFLEVBQUUsV0FBVyxHQUFJLFlBQVcsRUFBRSxDQUFDLEVBQUUsR0FBSSxPQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsT0FBTyxHQUFHLENBQUMsR0FBRyxFQUFHLEdBQUUsRUFBRSxRQUFRLEVBQUUsT0FBTyxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUcsSUFBRyxJQUFJLEVBQUcsR0FBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRyxHQUFFLElBQUksRUFBRyxHQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQUFBSyxJQUFMLElBQVMsR0FBRSxLQUFLLEdBQUcsQUFBSyxJQUFMLElBQVMsR0FBRSxLQUFLLEdBQUcsTUFBTyxFQUFDLENBQUMsRUFBRSxDQUFDLFlBQVksR0FBRyxVQUFVLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxFQUFFLENBQUMsYUFBYSxHQUFJLEdBQUUsRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLHFCQUFxQixF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Q0FBQyxLQUFLLEtBQUssRUFBRSxLQUFLLEFBQU8sS0FBSyxRQUFaLE1BQW1CLEtBQUssWUFBWSxFQUFFLEtBQUssTUFBTSxLQUFLLEVBQUUsWUFBWSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsVUFBVSxNQUFNLFVBQVUsQ0FBQyxFQUFFLFVBQVUsTUFBTSxLQUFLLElBQUksRUFBRSxBQUFPLEtBQUssUUFBWixNQUFtQixLQUFLLFlBQVksRUFBRSxLQUFLLE1BQU0sS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxVQUFVLFFBQVEsVUFBVSxDQUFDLEVBQUUsVUFBVSxRQUFRLEtBQUssSUFBSSxFQUFFLEtBQUssTUFBTSxJQUFJLEVBQUUsRUFBRSxVQUFVLFlBQVksVUFBVSxDQUFDLEtBQUssTUFBTSxHQUFJLEdBQUUsS0FBSyxhQUFhLENBQUMsSUFBSSxHQUFHLE1BQU0sS0FBSyxhQUFhLE9BQU8sRUFBRSxDQUFDLEVBQUUsR0FBSSxHQUFFLEtBQUssS0FBSyxNQUFNLE9BQU8sU0FBUyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxlQUFlLFNBQVMsRUFBRSxDQUFDLE1BQU8sSUFBSSxHQUFFLFVBQVUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxpQkFBaUIsVUFBVSxDQUFDLE1BQU8sSUFBSSxHQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMseUJBQXlCLEdBQUcsVUFBVSxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLFNBQVMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxhQUFhLFdBQVcsRUFBRSxFQUFFLENBQUMsR0FBSSxHQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxHQUFHLE9BQU8sYUFBYSxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTyxFQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxFQUFFLFlBQVksU0FBUyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLFlBQVksU0FBUyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsWUFBWSxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLFlBQVksU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLE9BQU8sRUFBRSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxLQUFLLEdBQUUsQ0FBQyxNQUFNLEVBQUUsZUFBZSxFQUFFLGlCQUFpQixDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUksSUFBRSxNQUFNLEVBQUUsTUFBTSxHQUFFLGVBQWUsRUFBRSxlQUFlLEdBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEdBQUksR0FBRSxFQUFFLEdBQUksSUFBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBSSxJQUFHLE1BQU0sR0FBSSxHQUFFLEVBQUUsR0FBRSxFQUFFLElBQUksSUFBRyxJQUFJLEFBQVMsSUFBVCxPQUFZLElBQUUsSUFBSSxHQUFHLFNBQVMsRUFBRSxHQUFFLENBQUMsR0FBSSxJQUFFLEVBQUUsTUFBTyxJQUFJLElBQUUsR0FBRSxNQUFNLE9BQVEsT0FBTSxLQUFJLEVBQUUsRUFBRSxFQUFFLGdCQUFnQixFQUFDLEdBQUksSUFBRSxHQUFHLEdBQUcsU0FBUyxFQUFFLENBQUMsTUFBTyxJQUFJLElBQUcsRUFBRSxFQUFFLEVBQUUsY0FBYyxHQUFHLEVBQUUsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxjQUFjLEVBQUUsRUFBRSxFQUFFLEVBQUUsZUFBZSxFQUFFLEtBQUssSUFBSSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxHQUFJLEdBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsS0FBSyxFQUFFLEVBQUUsT0FBTyxDQUFDLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsS0FBSyxFQUFFLEVBQUUsT0FBTyxDQUFDLEVBQUUsR0FBRyxHQUFJLEdBQUUsR0FBRyxNQUFPLElBQUc7QUFBQSxJQUFPLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsTUFBTSxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFFLE1BQU0sQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFFLGVBQWUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFFLGlCQUFpQixDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsT0FBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsa0JBQWtCLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxvQkFBb0IsRUFBRSxHQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLENBQUMsRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBSSxHQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSx5QkFBeUIsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssS0FBSyxlQUFlLEVBQUUsS0FBSyxhQUFhLEVBQUUsS0FBSyxXQUFXLEVBQUUsS0FBSyxZQUFZLEVBQUUsS0FBSyxlQUFlLEVBQUUsS0FBSyxZQUFZLEVBQUUsS0FBSyxXQUFXLEdBQUcsS0FBSyxjQUFjLENBQUMsRUFBRSxLQUFLLFdBQVcsQ0FBQyxFQUFFLEtBQUssb0JBQW9CLEVBQUUsS0FBSyxhQUFhLEVBQUUsS0FBSyxZQUFZLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFLFVBQVUsS0FBSyxTQUFTLEVBQUUsQ0FBQyxHQUFJLEdBQUUsRUFBRSxLQUFLLFNBQVMsRUFBRSxFQUFFLEtBQUssYUFBYSxFQUFFLEtBQUssU0FBUyxPQUFPLEtBQUssV0FBVyxLQUFLLGNBQWMsS0FBSyxDQUFDLEVBQUcsTUFBSyxjQUFjLEVBQUUsS0FBSyxPQUFPLEVBQUUsVUFBVSxLQUFLLEtBQUssS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLEtBQUssQ0FBQyxZQUFZLEtBQUssWUFBWSxRQUFRLEVBQUcsR0FBRSxJQUFLLEdBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsVUFBVSxhQUFhLFNBQVMsRUFBRSxDQUFDLEtBQUssb0JBQW9CLEtBQUssYUFBYSxLQUFLLFlBQVksRUFBRSxLQUFLLEtBQUssR0FBSSxHQUFFLEtBQUssYUFBYSxDQUFDLEVBQUUsS0FBSyxJQUFJLEdBQUcsRUFBRSxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEtBQUssb0JBQW9CLEtBQUssWUFBWSxLQUFLLGNBQWMsRUFBRSxLQUFLLEtBQUssQ0FBQyxLQUFLLEVBQUUsV0FBVyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQU0sTUFBSyxXQUFXLEVBQUUsRUFBRSxFQUFFLFVBQVUsYUFBYSxTQUFTLEVBQUUsQ0FBQyxLQUFLLFdBQVcsR0FBRyxHQUFJLEdBQUUsS0FBSyxhQUFhLENBQUMsRUFBRSxLQUFLLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEtBQUssb0JBQW9CLEtBQUssWUFBWSxLQUFLLGNBQWMsRUFBRSxHQUFHLEtBQUssV0FBVyxLQUFLLEVBQUUsU0FBUyxFQUFFLEVBQUUsS0FBSyxLQUFLLENBQUMsS0FBSyxTQUFTLEVBQUUsQ0FBQyxNQUFPLEdBQUUsZ0JBQWdCLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsZUFBZSxDQUFDLEVBQUUsRUFBRSxFQUFFLGlCQUFpQixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsTUFBTyxLQUFJLEtBQUssS0FBSyxDQUFDLEtBQUssRUFBRSxXQUFXLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxjQUFjLFFBQVEsS0FBSyxLQUFLLEtBQUssY0FBYyxNQUFNLENBQUMsRUFBRSxLQUFLLFlBQVksSUFBSSxFQUFFLEVBQUUsVUFBVSxNQUFNLFVBQVUsQ0FBQyxPQUFRLEdBQUUsS0FBSyxhQUFhLEVBQUUsRUFBRSxFQUFFLEtBQUssV0FBVyxPQUFPLElBQUksS0FBSyxLQUFLLENBQUMsS0FBSyxLQUFLLFdBQVcsR0FBRyxLQUFLLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUksR0FBRSxLQUFLLGFBQWEsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBSSxHQUFFLEVBQUUsWUFBWSxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsTUFBTyxHQUFFLHNCQUFzQixXQUFXLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLFdBQVcsT0FBTyxFQUFFLEVBQUUsS0FBSyxXQUFXLEtBQUssY0FBYyxFQUFFLEtBQUssS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxVQUFVLGtCQUFrQixVQUFVLENBQUMsS0FBSyxTQUFTLEtBQUssU0FBUyxNQUFNLEVBQUUsS0FBSyxhQUFhLEtBQUssU0FBUyxVQUFVLEVBQUUsS0FBSyxTQUFTLEtBQUssU0FBUyxNQUFNLEVBQUUsS0FBSyxTQUFTLE9BQU8sQ0FBQyxFQUFFLEVBQUUsVUFBVSxpQkFBaUIsU0FBUyxFQUFFLENBQUMsS0FBSyxTQUFTLEtBQUssQ0FBQyxFQUFFLEdBQUksR0FBRSxLQUFLLE1BQU8sR0FBRSxHQUFHLE9BQU8sU0FBUyxFQUFFLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLE1BQU0sVUFBVSxDQUFDLEVBQUUsYUFBYSxFQUFFLFNBQVMsVUFBVSxFQUFFLEVBQUUsU0FBUyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxRQUFRLFNBQVMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLFVBQVUsT0FBTyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxVQUFVLE9BQU8sS0FBSyxJQUFJLEdBQUksRUFBQyxLQUFLLFVBQVUsS0FBSyxTQUFTLE9BQVEsTUFBSyxrQkFBa0IsRUFBRSxJQUFJLEtBQUssVUFBVSxLQUFLLFNBQVMsUUFBUSxLQUFLLGVBQWUsT0FBUSxNQUFLLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxVQUFVLE1BQU0sU0FBUyxFQUFFLENBQUMsR0FBSSxHQUFFLEtBQUssU0FBUyxHQUFHLENBQUMsRUFBRSxVQUFVLE1BQU0sS0FBSyxLQUFLLENBQUMsRUFBRSxNQUFNLEdBQUcsT0FBUSxHQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxHQUFHLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLE1BQUMsQ0FBUyxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsVUFBVSxLQUFLLFVBQVUsQ0FBQyxFQUFFLFVBQVUsS0FBSyxLQUFLLElBQUksRUFBRSxPQUFRLEdBQUUsS0FBSyxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLGVBQWUsR0FBRywwQkFBMEIsR0FBRyxVQUFVLEdBQUcsV0FBVyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsU0FBUyxFQUFFLEVBQUUsRUFBRSxDQUFDLGFBQWEsR0FBSSxHQUFFLEVBQUUsaUJBQWlCLEVBQUUsRUFBRSxFQUFFLGlCQUFpQixFQUFFLEVBQUUsZUFBZSxTQUFTLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBSSxHQUFFLEdBQUksR0FBRSxFQUFFLFlBQVksRUFBRSxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLFFBQVEsU0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEdBQUksR0FBRSxTQUFTLEVBQUUsRUFBRSxDQUFDLEdBQUksR0FBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxDQUFDLEVBQUUsS0FBTSxJQUFJLE9BQU0sRUFBRSxzQ0FBc0MsRUFBRSxNQUFPLEVBQUMsRUFBRSxFQUFFLFFBQVEsWUFBWSxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsUUFBUSxvQkFBb0IsRUFBRSxvQkFBb0IsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxFQUFFLGVBQWUsT0FBTyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxTQUFTLEdBQUcsZ0JBQWdCLEVBQUUsZ0JBQWdCLGVBQWUsRUFBRSxjQUFjLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxhQUFhLENBQUMsT0FBTyxFQUFOLENBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU8sRUFBQyxDQUFDLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLFNBQVMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxhQUFhLFlBQVksQ0FBQyxHQUFHLENBQUUsZ0JBQWdCLElBQUcsTUFBTyxJQUFJLEdBQUUsR0FBRyxVQUFVLE9BQU8sS0FBTSxJQUFJLE9BQU0sZ0dBQWdHLEVBQUUsS0FBSyxNQUFNLE9BQU8sT0FBTyxJQUFJLEVBQUUsS0FBSyxRQUFRLEtBQUssS0FBSyxLQUFLLEdBQUcsS0FBSyxNQUFNLFVBQVUsQ0FBQyxHQUFJLEdBQUUsR0FBSSxHQUFFLE9BQVEsS0FBSyxNQUFLLEFBQVksTUFBTyxNQUFLLElBQXhCLFlBQTZCLEdBQUUsR0FBRyxLQUFLLElBQUksTUFBTyxFQUFDLENBQUMsQ0FBQyxBQUFDLEdBQUUsVUFBVSxFQUFFLFVBQVUsR0FBRyxVQUFVLEVBQUUsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsRUFBRSxRQUFRLFNBQVMsRUFBRSxVQUFVLFNBQVMsRUFBRSxFQUFFLENBQUMsTUFBTyxJQUFJLEtBQUcsVUFBVSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLGFBQWEsRUFBRSxTQUFTLEdBQUcsV0FBVyxHQUFHLFlBQVksRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLFNBQVMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxhQUFhLEdBQUksR0FBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLGNBQWMsRUFBRSxFQUFFLEVBQUUscUJBQXFCLEVBQUUsRUFBRSxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsQ0FBQyxNQUFPLElBQUksR0FBRSxRQUFRLFNBQVMsRUFBRSxFQUFFLENBQUMsR0FBSSxHQUFFLEVBQUUsYUFBYSxpQkFBaUIsRUFBRSxLQUFLLEdBQUksRUFBQyxFQUFFLEVBQUUsR0FBRyxRQUFRLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLE1BQU0sVUFBVSxDQUFDLEVBQUUsV0FBVyxRQUFRLEVBQUUsYUFBYSxNQUFNLEVBQUUsR0FBSSxPQUFNLGdDQUFnQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLFNBQVMsRUFBRSxFQUFFLENBQUMsR0FBSSxHQUFFLEtBQUssTUFBTyxHQUFFLEVBQUUsT0FBTyxHQUFHLENBQUMsRUFBRSxDQUFDLE9BQU8sR0FBRyxXQUFXLEdBQUcsc0JBQXNCLEdBQUcsY0FBYyxHQUFHLGVBQWUsRUFBRSxVQUFVLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsRUFBRSxFQUFFLFFBQVEsT0FBTyxHQUFJLE9BQU0sc0RBQXNELENBQUMsRUFBRSxFQUFFLGVBQWUsc0JBQXNCLEVBQUUsR0FBRyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sRUFBRSxLQUFLLFNBQVMsRUFBRSxDQUFDLEdBQUksR0FBRSxHQUFJLEdBQUUsQ0FBQyxFQUFFLE1BQU8sR0FBRSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLFNBQVMsRUFBRSxDQUFDLEdBQUksR0FBRSxDQUFDLEVBQUUsUUFBUSxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxNQUFNLEdBQUcsRUFBRSxXQUFXLE9BQVEsR0FBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxNQUFPLEdBQUUsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLEVBQUUsQ0FBQyxPQUFRLEdBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxHQUFJLEdBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxZQUFZLEVBQUUsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsYUFBYSxDQUFDLE9BQU8sR0FBRyxzQkFBc0IsR0FBRyxLQUFLLEVBQUUsS0FBSyxJQUFJLEVBQUUsSUFBSSxRQUFRLEVBQUUsZUFBZSxPQUFPLEVBQUUsZUFBZSxLQUFLLGdCQUFnQixFQUFFLGdCQUFnQixlQUFlLEVBQUUsZUFBZSxjQUFjLEVBQUUsYUFBYSxDQUFDLEVBQUUsRUFBRSxLQUFNLEdBQUUsS0FBSyxDQUFDLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQyxNQUFPLEdBQUUsV0FBVyxRQUFTLEdBQUUsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLGdCQUFnQixHQUFHLHNCQUFzQixHQUFHLFNBQVMsR0FBRyxVQUFVLEdBQUcsZUFBZSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsU0FBUyxFQUFFLEVBQUUsRUFBRSxDQUFDLGFBQWEsR0FBSSxHQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSx5QkFBeUIsRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxLQUFLLG1DQUFtQyxDQUFDLEVBQUUsS0FBSyxlQUFlLEdBQUcsS0FBSyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFLFVBQVUsWUFBWSxTQUFTLEVBQUUsQ0FBQyxHQUFJLEdBQUUsS0FBSyxBQUFDLE1BQUssUUFBUSxHQUFHLE1BQU0sRUFBRSxFQUFFLEdBQUcsT0FBTyxTQUFTLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxRQUFRLFNBQVMsRUFBRSxDQUFDLEVBQUUsU0FBUyxLQUFLLGVBQWUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLE1BQU0sVUFBVSxDQUFDLEVBQUUsU0FBUyxFQUFFLGVBQWUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLFVBQVUsTUFBTSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxVQUFVLE1BQU0sS0FBSyxJQUFJLEdBQUksTUFBSyxRQUFRLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxVQUFVLE9BQU8sVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsVUFBVSxPQUFPLEtBQUssSUFBSSxHQUFJLE1BQUssZUFBZSxLQUFLLElBQUksRUFBRSxLQUFLLFFBQVEsT0FBTyxFQUFFLEdBQUcsRUFBRSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsMEJBQTBCLEdBQUcsV0FBVyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsU0FBUyxFQUFFLEVBQUUsRUFBRSxDQUFDLGFBQWEsR0FBSSxHQUFFLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxXQUFXLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxLQUFLLEtBQUssQ0FBQyxFQUFFLEtBQUssUUFBUSxFQUFFLEdBQUksR0FBRSxLQUFLLEVBQUUsR0FBRyxPQUFPLFNBQVMsRUFBRSxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLFFBQVEsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsUUFBUSxTQUFTLEVBQUUsQ0FBQyxFQUFFLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsTUFBTSxVQUFVLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsVUFBVSxNQUFNLFVBQVUsQ0FBQyxLQUFLLFFBQVEsT0FBTyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLFdBQVcsR0FBRyxrQkFBa0IsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLFNBQVMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxhQUFhLEVB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QUcsRUFBRSxNQUFPLEdBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsTUFBTSxBQUFNLEdBQUUsTUFBTSxFQUFFLElBQWhCLEtBQW9CLElBQUcsS0FBSyxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxDQUFDLE1BQU8sR0FBRSxBQUFTLElBQVQsT0FBVyxFQUFFLEVBQUUsY0FBYyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssTUFBTSxJQUFJLEVBQUUsS0FBSyxLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUksR0FBRyxjQUFjLENBQUMsQ0FBQyxFQUFFLEtBQUssTUFBTSxFQUFFLEVBQUUsV0FBVyxFQUFFLENBQUMsTUFBTSxBQUFvQixRQUFPLFVBQVUsU0FBUyxLQUFLLENBQUMsSUFBcEQsaUJBQXFELENBQUMsR0FBSSxHQUFFLENBQUMsS0FBSyxVQUFVLENBQUMsS0FBTSxJQUFJLE9BQU0sNEVBQTRFLENBQUMsRUFBRSxRQUFRLFNBQVMsRUFBRSxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUUsSUFBSSxJQUFLLE1BQUssTUFBTSxFQUFFLEtBQUssTUFBTSxHQUFJLEdBQUUsRUFBRSxNQUFNLEtBQUssS0FBSyxPQUFPLEVBQUUsTUFBTSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssS0FBSyxNQUFNLElBQUksS0FBSyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxPQUFPLFNBQVMsRUFBRSxDQUFDLEdBQUksR0FBRSxDQUFDLEVBQUUsTUFBTyxNQUFLLFFBQVEsU0FBUyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLFNBQVMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEFBQUksVUFBVSxTQUFkLEVBQXFCLE1BQU8sR0FBRSxLQUFLLEtBQUssRUFBRSxFQUFFLEtBQUssS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUksR0FBRSxFQUFFLE1BQU8sTUFBSyxPQUFPLFNBQVMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUksR0FBRSxLQUFLLE1BQU0sS0FBSyxLQUFLLEdBQUcsTUFBTyxJQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTyxNQUFLLEdBQUcsRUFBRSxDQUFDLEVBQUUsTUFBTyxNQUFLLE9BQU8sU0FBUyxFQUFFLEVBQUUsQ0FBQyxNQUFPLEdBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFJLEdBQUUsS0FBSyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssS0FBSyxDQUFDLEVBQUUsRUFBRSxLQUFLLE1BQU0sRUFBRSxNQUFPLEdBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFLE9BQU8sU0FBUyxFQUFFLENBQUMsRUFBRSxLQUFLLEtBQUssRUFBRSxHQUFJLEdBQUUsS0FBSyxNQUFNLEdBQUcsR0FBRyxHQUFJLENBQU0sRUFBRSxNQUFNLEVBQUUsSUFBaEIsS0FBb0IsSUFBRyxLQUFLLEVBQUUsS0FBSyxNQUFNLElBQUksR0FBRyxDQUFDLEVBQUUsSUFBSSxNQUFPLE1BQUssTUFBTSxPQUFRLFFBQVEsR0FBRSxLQUFLLE9BQU8sU0FBUyxFQUFFLEVBQUUsQ0FBQyxNQUFPLEdBQUUsS0FBSyxNQUFNLEVBQUUsRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksTUFBTyxNQUFLLE1BQU0sRUFBRSxHQUFHLE1BQU0sTUFBTyxLQUFJLEVBQUUsU0FBUyxTQUFTLEVBQUUsQ0FBQyxLQUFNLElBQUksT0FBTSw0RUFBNEUsQ0FBQyxFQUFFLHVCQUF1QixTQUFTLEVBQUUsQ0FBQyxHQUFJLEdBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUksR0FBRSxFQUFFLE9BQU8sR0FBRyxDQUFDLEVBQUUsQ0FBQyxZQUFZLEdBQUcsWUFBWSxRQUFRLG1CQUFtQixLQUFLLEtBQUssR0FBRyxTQUFTLE1BQU0sUUFBUSxLQUFLLFNBQVMsa0JBQWtCLGVBQWUsRUFBRSxVQUFVLENBQUMsR0FBRyxLQUFLLEVBQUUsS0FBSyxZQUFZLEVBQUUsRUFBRSxZQUFZLEVBQUUsWUFBWSxZQUFZLEVBQUUsQUFBaUIsRUFBRSxPQUFuQixnQkFBMEIsR0FBRSxLQUFLLFVBQVUsQ0FBQyxFQUFFLEtBQUssS0FBTSxJQUFJLE9BQU0sMkJBQTJCLEVBQUUsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLEFBQVcsRUFBRSxXQUFiLFVBQXVCLEFBQVksRUFBRSxXQUFkLFdBQXdCLEFBQVUsRUFBRSxXQUFaLFNBQXNCLEFBQVUsRUFBRSxXQUFaLFNBQXVCLEdBQUUsU0FBUyxRQUFRLEFBQVUsRUFBRSxXQUFaLFNBQXVCLEdBQUUsU0FBUyxPQUFPLEdBQUksR0FBRSxFQUFFLFNBQVMsS0FBSyxTQUFTLEdBQUcsRUFBRSxFQUFFLGVBQWUsS0FBSyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQU4sQ0FBUyxBQUFDLEdBQUUsR0FBSSxHQUFFLE9BQU8sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU8sSUFBSSxHQUFFLEVBQUUsRUFBRSxNQUFNLFNBQVMsRUFBRSxRQUFRLENBQUMsRUFBRSxjQUFjLFNBQVMsRUFBRSxFQUFFLENBQUMsTUFBTyxNQUFLLHVCQUF1QixDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsRUFBRSxtQkFBbUIsU0FBUyxFQUFFLEVBQUUsQ0FBQyxNQUFPLEdBQUUsR0FBRyxDQUFDLEdBQUcsTUFBTyxHQUFFLEtBQUssY0FBYyxLQUFLLHVCQUF1QixDQUFDLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxxQkFBcUIsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLG9DQUFvQyxHQUFHLGdCQUFnQixHQUFHLHlCQUF5QixHQUFHLHdCQUF3QixHQUFHLFNBQVMsR0FBRyxVQUFVLEdBQUcsY0FBYyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsU0FBUyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsT0FBTyxNQUFNLENBQUMsRUFBRSxHQUFHLENBQUMsU0FBUyxFQUFFLEVBQUUsRUFBRSxDQUFDLGFBQWEsR0FBSSxHQUFFLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsS0FBSyxLQUFLLENBQUMsRUFBRSxPQUFRLEdBQUUsRUFBRSxFQUFFLEtBQUssS0FBSyxPQUFPLElBQUksRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFLFVBQVUsT0FBTyxTQUFTLEVBQUUsQ0FBQyxNQUFPLE1BQUssS0FBSyxLQUFLLEtBQUssRUFBRSxFQUFFLEVBQUUsVUFBVSxxQkFBcUIsU0FBUyxFQUFFLENBQUMsT0FBUSxHQUFFLEVBQUUsV0FBVyxDQUFDLEVBQUUsRUFBRSxFQUFFLFdBQVcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxXQUFXLENBQUMsRUFBRSxFQUFFLEVBQUUsV0FBVyxDQUFDLEVBQUUsRUFBRSxLQUFLLE9BQU8sRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsS0FBSyxLQUFLLEtBQUssR0FBRyxLQUFLLEtBQUssRUFBRSxLQUFLLEdBQUcsS0FBSyxLQUFLLEVBQUUsS0FBSyxHQUFHLEtBQUssS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFPLEdBQUUsS0FBSyxLQUFLLE1BQU0sRUFBRSxFQUFFLEVBQUUsVUFBVSxzQkFBc0IsU0FBUyxFQUFFLENBQUMsR0FBSSxHQUFFLEVBQUUsV0FBVyxDQUFDLEVBQUUsRUFBRSxFQUFFLFdBQVcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxXQUFXLENBQUMsRUFBRSxFQUFFLEVBQUUsV0FBVyxDQUFDLEVBQUUsRUFBRSxLQUFLLFNBQVMsQ0FBQyxFQUFFLE1BQU8sS0FBSSxFQUFFLElBQUksSUFBSSxFQUFFLElBQUksSUFBSSxFQUFFLElBQUksSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLFVBQVUsU0FBUyxTQUFTLEVBQUUsQ0FBQyxHQUFHLEtBQUssWUFBWSxDQUFDLEVBQUUsQUFBSSxJQUFKLEVBQU0sTUFBTSxDQUFDLEVBQUUsR0FBSSxHQUFFLEtBQUssS0FBSyxNQUFNLEtBQUssS0FBSyxLQUFLLE1BQU0sS0FBSyxLQUFLLEtBQUssTUFBTSxDQUFDLEVBQUUsTUFBTyxNQUFLLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLFdBQVcsR0FBRyxlQUFlLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxTQUFTLEVBQUUsRUFBRSxFQUFFLENBQUMsYUFBYSxHQUFJLEdBQUUsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLENBQUMsS0FBSyxLQUFLLEVBQUUsS0FBSyxPQUFPLEVBQUUsT0FBTyxLQUFLLE1BQU0sRUFBRSxLQUFLLEtBQUssQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLFlBQVksU0FBUyxFQUFFLENBQUMsS0FBSyxXQUFXLEtBQUssTUFBTSxDQUFDLENBQUMsRUFBRSxXQUFXLFNBQVMsRUFBRSxDQUFDLEdBQUcsS0FBSyxPQUFPLEtBQUssS0FBSyxHQUFHLEVBQUUsRUFBRSxLQUFNLElBQUksT0FBTSxzQ0FBc0MsS0FBSyxPQUFPLG1CQUFtQixFQUFFLG9CQUFvQixDQUFDLEVBQUUsU0FBUyxTQUFTLEVBQUUsQ0FBQyxLQUFLLFdBQVcsQ0FBQyxFQUFFLEtBQUssTUFBTSxDQUFDLEVBQUUsS0FBSyxTQUFTLEVBQUUsQ0FBQyxLQUFLLFNBQVMsS0FBSyxNQUFNLENBQUMsQ0FBQyxFQUFFLE9BQU8sU0FBUyxFQUFFLENBQUMsRUFBRSxRQUFRLFNBQVMsRUFBRSxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUUsSUFBSSxLQUFLLFlBQVksQ0FBQyxFQUFFLEVBQUUsS0FBSyxNQUFNLEVBQUUsRUFBRSxHQUFHLEtBQUssTUFBTSxJQUFJLEVBQUcsSUFBRyxHQUFHLEtBQUssT0FBTyxDQUFDLEVBQUUsTUFBTyxNQUFLLE9BQU8sRUFBRSxDQUFDLEVBQUUsV0FBVyxTQUFTLEVBQUUsQ0FBQyxNQUFPLEdBQUUsWUFBWSxTQUFTLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsU0FBUyxFQUFFLENBQUMsRUFBRSxxQkFBcUIsU0FBUyxFQUFFLENBQUMsRUFBRSxzQkFBc0IsU0FBUyxFQUFFLENBQUMsRUFBRSxTQUFTLFVBQVUsQ0FBQyxHQUFJLEdBQUUsS0FBSyxRQUFRLENBQUMsRUFBRSxNQUFPLElBQUksTUFBSyxLQUFLLElBQUksS0FBTSxJQUFHLEdBQUcsS0FBTSxJQUFHLEdBQUcsSUFBSSxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFJLElBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLFNBQVMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxhQUFhLEdBQUksR0FBRSxFQUFFLG9CQUFvQixFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRSxVQUFVLFNBQVMsU0FBUyxFQUFFLENBQUMsS0FBSyxZQUFZLENBQUMsRUFBRSxHQUFJLEdBQUUsS0FBSyxLQUFLLE1BQU0sS0FBSyxLQUFLLEtBQUssTUFBTSxLQUFLLEtBQUssS0FBSyxNQUFNLENBQUMsRUFBRSxNQUFPLE1BQUssT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsV0FBVyxHQUFHLHFCQUFxQixFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsU0FBUyxFQUFFLEVBQUUsRUFBRSxDQUFDLGFBQWEsR0FBSSxHQUFFLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRSxVQUFVLE9BQU8sU0FBUyxFQUFFLENBQUMsTUFBTyxNQUFLLEtBQUssV0FBVyxLQUFLLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxVQUFVLHFCQUFxQixTQUFTLEVBQUUsQ0FBQyxNQUFPLE1BQUssS0FBSyxZQUFZLENBQUMsRUFBRSxLQUFLLElBQUksRUFBRSxFQUFFLFVBQVUsc0JBQXNCLFNBQVMsRUFBRSxDQUFDLE1BQU8sS0FBSSxLQUFLLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxVQUFVLFNBQVMsU0FBUyxFQUFFLENBQUMsS0FBSyxZQUFZLENBQUMsRUFBRSxHQUFJLEdBQUUsS0FBSyxLQUFLLE1BQU0sS0FBSyxLQUFLLEtBQUssTUFBTSxLQUFLLEtBQUssS0FBSyxNQUFNLENBQUMsRUFBRSxNQUFPLE1BQUssT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsV0FBVyxHQUFHLGVBQWUsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLFNBQVMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxhQUFhLEdBQUksR0FBRSxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsVUFBVSxTQUFTLFNBQVMsRUFBRSxDQUFDLEdBQUcsS0FBSyxZQUFZLENBQUMsRUFBRSxBQUFJLElBQUosRUFBTSxNQUFPLElBQUksWUFBVyxDQUFDLEVBQUUsR0FBSSxHQUFFLEtBQUssS0FBSyxTQUFTLEtBQUssS0FBSyxLQUFLLE1BQU0sS0FBSyxLQUFLLEtBQUssTUFBTSxDQUFDLEVBQUUsTUFBTyxNQUFLLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLFdBQVcsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLFNBQVMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxhQUFhLEdBQUksR0FBRSxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxlQUFlLEVBQUUsRUFBRSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxvQkFBb0IsRUFBRSxFQUFFLEVBQUUsb0JBQW9CLEVBQUUsRUFBRSxRQUFRLFNBQVMsRUFBRSxDQUFDLEdBQUksR0FBRSxFQUFFLFVBQVUsQ0FBQyxFQUFFLE1BQU8sR0FBRSxhQUFhLENBQUMsRUFBRSxBQUFXLElBQVgsVUFBYyxFQUFFLFdBQVcsQUFBZSxJQUFmLGFBQWlCLEdBQUksR0FBRSxDQUFDLEVBQUUsRUFBRSxXQUFXLEdBQUksR0FBRSxFQUFFLFlBQVksYUFBYSxDQUFDLENBQUMsRUFBRSxHQUFJLEdBQUUsRUFBRSxZQUFZLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBSSxHQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxhQUFhLEdBQUcsV0FBVyxHQUFHLGdCQUFnQixHQUFHLHFCQUFxQixHQUFHLGlCQUFpQixHQUFHLHFCQUFxQixFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsU0FBUyxFQUFFLEVBQUUsRUFBRSxDQUFDLGFBQWEsRUFBRSxrQkFBa0IsT0FBTyxFQUFFLG9CQUFvQixPQUFPLEVBQUUsc0JBQXNCLE9BQU8sRUFBRSxnQ0FBZ0MsVUFBTyxFQUFFLDRCQUE0QixPQUFPLEVBQUUsZ0JBQWdCLFVBQU8sRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsU0FBUyxFQUFFLEVBQUUsRUFBRSxDQUFDLGFBQWEsR0FBSSxHQUFFLEVBQUUsaUJBQWlCLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLEtBQUssS0FBSyxvQkFBb0IsQ0FBQyxFQUFFLEtBQUssU0FBUyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsVUFBVSxhQUFhLFNBQVMsRUFBRSxDQUFDLEtBQUssS0FBSyxDQUFDLEtBQUssRUFBRSxZQUFZLEtBQUssU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsV0FBVyxHQUFHLGtCQUFrQixFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsU0FBUyxFQUFFLEVBQUUsRUFBRSxDQUFDLGFBQWEsR0FBSSxHQUFFLEVBQUUsaUJBQWlCLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxZQUFZLENBQUMsRUFBRSxLQUFLLEtBQUssWUFBWSxFQUFFLEtBQUssZUFBZSxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRSxVQUFVLGFBQWEsU0FBUyxFQUFFLENBQUMsS0FBSyxXQUFXLE1BQU0sRUFBRSxFQUFFLEtBQUssS0FBSyxXQUFXLE9BQU8sQ0FBQyxFQUFFLEtBQUssS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLFdBQVcsR0FBRyxrQkFBa0IsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLFNBQVMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxhQUFhLEdBQUksR0FBRSxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxLQUFLLEtBQUssdUJBQXVCLENBQUMsRUFBRSxLQUFLLFNBQVMsRUFBRSxLQUFLLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRSxVQUFVLGFBQWEsU0FBUyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBSSxHQUFFLEtBQUssV0FBVyxLQUFLLFdBQVcsRUFBRSxLQUFLLFdBQVcsS0FBSyxVQUFVLEVBQUUsRUFBRSxLQUFLLE1BQU0sQ0FBQyxFQUFFLFVBQVUsYUFBYSxLQUFLLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLFdBQVcsR0FBRyxrQkFBa0IsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLFNBQVMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxhQUFhLEdBQUksR0FBRSxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxLQUFLLEtBQUssWUFBWSxFQUFFLEdBQUksR0FBRSxLQUFLLEtBQUssWUFBWSxHQUFHLEtBQUssTUFBTSxFQUFFLEtBQUssSUFBSSxFQUFFLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxHQUFHLEtBQUssZUFBZSxHQUFHLEVBQUUsS0FBSyxTQUFTLEVBQUUsQ0FBQyxFQUFFLFlBQVksR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEtBQUssRUFBRSxVQUFVLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxlQUFlLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFLFVBQVUsUUFBUSxVQUFVLENBQUMsRUFBRSxVQUFVLFFBQVEsS0FBSyxJQUFJLEVBQUUsS0FBSyxLQUFLLElBQUksRUFBRSxFQUFFLFVBQVUsT0FBTyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxVQUFVLE9BQU8sS0FBSyxJQUFJLEdBQUksRUFBQyxLQUFLLGdCQUFnQixLQUFLLGFBQWMsTUFBSyxlQUFlLEdBQUcsRUFBRSxNQUFNLEtBQUssZUFBZSxDQUFDLEVBQUUsSUFBSSxHQUFHLEdBQUcsRUFBRSxFQUFFLFVBQVUsZUFBZSxVQUFVLENBQUMsS0FBSyxlQUFlLEdBQUcsS0FBSyxVQUFVLEtBQUssWUFBYSxNQUFLLE1BQU0sRUFBRSxLQUFLLFlBQWEsR0FBRSxNQUFNLEtBQUssZUFBZSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssZUFBZSxJQUFJLEVBQUUsRUFBRSxVQUFVLE1BQU0sVUFBVSxDQUFDLEdBQUcsS0FBSyxVQUFVLEtBQUssV0FBVyxNQUFNLEdBQUcsR0FBSSxHQUFFLEtBQUssRUFBRSxLQUFLLElBQUksS0FBSyxJQUFJLEtBQUssTUFBTSxLQUFLLEVBQUUsR0FBRyxLQUFLLE9BQU8sS0FBSyxJQUFJLE1BQU8sTUFBSyxJQUFJLEVBQUUsT0FBTyxLQUFLLFVBQVUsU0FBUyxFQUFFLEtBQUssS0FBSyxVQUFVLEtBQUssTUFBTSxDQUFDLEVBQUUsVUFBVSxhQUFhLEVBQUUsS0FBSyxLQUFLLFNBQVMsS0FBSyxNQUFNLENBQUMsRUFBRSxVQUFVLFlBQVksYUFBYSxFQUFFLEtBQUssS0FBSyxNQUFNLEtBQUssTUFBTSxDQUFDLEVBQUUsTUFBTyxNQUFLLE1BQU0sRUFBRSxLQUFLLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLFFBQVEsS0FBSyxJQUFJLEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLFdBQVcsR0FBRyxrQkFBa0IsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLFNBQVMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxhQUFhLFdBQVcsRUFBRSxDQUFDLEtBQUssS0FBSyxHQUFHLFVBQVUsS0FBSyxXQUFXLENBQUMsRUFBRSxLQUFLLGVBQWUsS0FBSyxLQUFLLGdCQUFnQixDQUFDLEVBQUUsS0FBSyxTQUFTLEdBQUcsS0FBSyxXQUFXLEdBQUcsS0FBSyxTQUFTLEdBQUcsS0FBSyxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLFNBQVMsSUFBSSxDQUFDLEVBQUUsVUFBVSxDQUFDLEtBQUssU0FBUyxFQUFFLENBQUMsS0FBSyxLQUFLLE9BQU8sQ0FBQyxDQUFDLEVBQUUsSUFBSSxVQUFVLENBQUMsR0FBRyxLQUFLLFdBQVcsTUFBTSxHQUFHLEtBQUssTUFBTSxFQUFFLEdBQUcsQ0FBQyxLQUFLLEtBQUssS0FBSyxFQUFFLEtBQUssUUFBUSxFQUFFLEtBQUssV0FBVyxFQUFFLE9BQU8sRUFBTixDQUFTLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLE1BQU0sU0FBUyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssWUFBYSxNQUFLLFNBQVMsS0FBSyxlQUFlLEVBQUcsTUFBSyxXQUFXLEdBQUcsS0FBSyxLQUFLLFFBQVEsQ0FBQyxFQUFFLEtBQUssVUFBVSxLQUFLLFNBQVMsTUFBTSxDQUFDLEVBQUUsS0FBSyxRQUFRLEdBQUcsR0FBRyxFQUFFLEdBQUcsU0FBUyxFQUFFLEVBQUUsQ0FBQyxNQUFPLE1BQUssV0FBVyxHQUFHLEtBQUssQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLFVBQVUsQ0FBQyxLQUFLLFdBQVcsS0FBSyxlQUFlLEtBQUssZ0JBQWdCLEtBQUssS0FBSyxXQUFXLENBQUMsQ0FBQyxFQUFFLEtBQUssU0FBUyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEtBQUssV0FBVyxHQUFHLE9BQVEsR0FBRSxFQUFFLEVBQUUsS0FBSyxXQUFXLEdBQUcsT0FBTyxJQUFJLEtBQUssV0FBVyxHQUFHLEdBQUcsS0FBSyxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssU0FBUyxFQUFFLENBQUMsTUFBTyxHQUFFLGlCQUFpQixJQUFJLENBQUMsRUFBRSxpQkFBaUIsU0FBUyxFQUFFLENBQUMsR0FBRyxLQUFLLFNBQVMsS0FBTSxJQUFJLE9BQU0sZUFBZSxLQUFLLDBCQUEwQixFQUFFLEtBQUssV0FBVyxFQUFFLFdBQVcsS0FBSyxnQkFBZ0IsRUFBRSxLQUFLLFNBQVMsRUFBRSxHQUFJLEdBQUUsS0FBSyxNQUFPLEdBQUUsR0FBRyxPQUFPLFNBQVMsRUFBRSxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxNQUFNLFVBQVUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLFFBQVEsU0FBUyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLFVBQVUsQ0FBQyxLQUFLLFlBQWEsTUFBSyxTQUFTLEdBQUcsS0FBSyxVQUFVLEtBQUssU0FBUyxNQUFNLEVBQUUsR0FBRyxFQUFFLE9BQU8sVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLFVBQVUsS0FBSyxXQUFXLE1BQU0sR0FBRyxHQUFJLEdBQUUsS0FBSyxTQUFTLEdBQUcsTUFBTyxNQUFLLGdCQUFpQixNQUFLLE1BQU0sS0FBSyxjQUFjLEVBQUUsRUFBRSxJQUFJLEtBQUssVUFBVSxLQUFLLFNBQVMsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLE1BQU0sVUFBVSxDQUFDLEVBQUUsYUFBYSxTQUFTLEVBQUUsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLEVBQUUsZUFBZSxTQUFTLEVBQUUsRUFBRSxDQUFDLE1BQU8sTUFBSyxnQkFBZ0IsR0FBRyxFQUFFLEtBQUssZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixVQUFVLENBQUMsT0FBUSxLQUFLLE1BQUssZ0JBQWdCLEtBQUssZ0JBQWdCLGVBQWUsQ0FBQyxHQUFJLE1BQUssV0FBVyxHQUFHLEtBQUssZ0JBQWdCLEdBQUcsRUFBRSxLQUFLLFVBQVUsQ0FBQyxHQUFHLEtBQUssU0FBUyxLQUFNLElBQUksT0FBTSxlQUFlLEtBQUssMEJBQTBCLEVBQUUsS0FBSyxTQUFTLEdBQUcsS0FBSyxVQUFVLEtBQUssU0FBUyxLQUFLLENBQUMsRUFBRSxTQUFTLFVBQVUsQ0FBQyxHQUFJLEdBQUUsVUFBVSxLQUFLLEtBQUssTUFBTyxNQUFLLFNBQVMsS0FBSyxTQUFTLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxTQUFTLEVBQUUsRUFBRSxFQUFFLENBQUMsYUFBYSxHQUFJLEdBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLGlCQUFpQixFQUFFLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLGFBQWEsRUFBRSxFQUFFLEtBQUssR0FBRyxFQUFFLFdBQVcsR0FBRyxDQUFDLEVBQUUsRUFBRSxxQ0FBcUMsQ0FBQyxNQUFDLENBQVMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLE1BQU8sSUFBSSxHQUFFLFFBQVEsU0FBUyxFQUFFLEVBQUUsQ0FBQyxHQUFJLEdBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxjQUFjLEVBQUUsRUFBRSxZQUFZLEVBQUUsRUFBRSxVQUFVLEVBQUUsR0FBRyxPQUFPLFNBQVMsRUFBRSxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLFFBQVEsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsTUFBTSxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUksR0FBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxPQUFPLE9BQU8sTUFBTyxHQUFFLFFBQVEsRUFBRSxZQUFZLGNBQWMsQ0FBQyxFQUFFLENBQUMsTUFBTSxTQUFTLE1BQU8sR0FBRSxPQUFPLENBQUMsVUFBVSxNQUFPLEdBQUUsWUFBWSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FBQyxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxHQUFHLEVBQUUsR0FBRyxPQUFPLE9BQU8sT0FBTyxTQUFTLE1BQU8sR0FBRSxLQUFLLEVBQUUsTUFBTSxRQUFRLE1BQU8sT0FBTSxVQUFVLE9BQU8sTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLGFBQWEsSUFBSSxFQUFFLEdBQUksWUFBVyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsT0FBTyxNQUFPLE9BQU0sYUFBYSxNQUFPLFFBQU8sT0FBTyxDQUFDLFVBQVUsS0FBTSxJQUFJLE9BQU0sOEJBQThCLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBTixDQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBSSxHQUFFLEVBQUUsT0FBTyxPQUFPLFdBQVcsY0FBYyxFQUFFLGFBQWEsVUFBVSxTQUFTLEVBQUUsU0FBUyxHQUFHLENBQUMsS0FBSyxjQUFjLEVBQUUsS0FBSyxZQUFZLEVBQUUsS0FBSyxVQUFVLEVBQUUsRUFBRSxhQUFhLENBQUMsRUFBRSxLQUFLLFFBQVEsRUFBRSxLQUFLLEdBQUksR0FBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQU4sQ0FBUyxLQUFLLFFBQVEsR0FBSSxHQUFFLE9BQU8sRUFBRSxLQUFLLFFBQVEsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLFdBQVcsU0FBUyxFQUFFLENBQUMsTUFBTyxHQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxTQUFTLEVBQUUsRUFBRSxDQUFDLEdBQUksR0FBRSxLQUFLLE1BQU0sQUFBUyxLQUFULE9BQVcsS0FBSyxRQUFRLEdBQUcsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssUUFBUSxHQUFHLEVBQUUsVUFBVSxDQUFDLEVBQUUsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxVQUFVLENBQUMsTUFBTyxHQUFFLE1BQU0sS0FBSyxRQUFRLE9BQU8sQ0FBQyxFQUFFLEtBQUssT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFVBQVUsQ0FBQyxNQUFPLE1BQUssUUFBUSxNQUFNLEVBQUUsSUFBSSxFQUFFLGVBQWUsU0FBUyxFQUFFLENBQUMsR0FBRyxFQUFFLGFBQWEsWUFBWSxFQUFFLEFBQWUsS0FBSyxjQUFwQixhQUFnQyxLQUFNLElBQUksT0FBTSxLQUFLLFlBQVksa0NBQWtDLEVBQUUsTUFBTyxJQUFJLEdBQUUsS0FBSyxDQUFDLFdBQVcsQUFBZSxLQUFLLGNBQXBCLFlBQStCLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLGNBQWMsRUFBRSxzQ0FBc0MsR0FBRyxhQUFhLEdBQUcsV0FBVyxHQUFHLGtCQUFrQixHQUFHLGtCQUFrQixFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsU0FBUyxFQUFFLEVBQUUsRUFBRSxDQUFDLGFBQWEsR0FBRyxFQUFFLE9BQU8sR0FBRyxFQUFFLE1BQU0sR0FBRyxFQUFFLE9BQU8sR0FBRyxFQUFFLFlBQVksQUFBYSxNQUFPLGFBQXBCLEtBQWlDLEFBQWEsTUFBTyxZQUFwQixJQUErQixFQUFFLFdBQVcsQUFBYSxNQUFPLFFBQXBCLElBQTJCLEVBQUUsV0FBVyxBQUFhLE1BQU8sWUFBcEIsSUFBK0IsQUFBYSxNQUFPLGFBQXBCLElBQWdDLEVBQUUsS0FBSyxPQUFPLENBQUMsR0FBSSxHQUFFLEdBQUksYUFBWSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsS0FBSyxBQUFJLEdBQUksTUFBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssaUJBQWlCLENBQUMsRUFBRSxPQUEzQyxDQUErQyxNQUFDLENBQVMsR0FBRyxDQUFDLEdBQUksR0FBRSxHQUFJLE1BQUssYUFBYSxLQUFLLG1CQUFtQixLQUFLLGdCQUFnQixLQUFLLGVBQWUsRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFLEtBQUssQUFBSSxFQUFFLFFBQVEsaUJBQWlCLEVBQUUsT0FBakMsQ0FBcUMsTUFBQyxDQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxNQUFDLENBQVMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxTQUFTLEVBQUUsRUFBRSxFQUFFLENBQUMsYUFBYSxPQUFRLEdBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsZUFBZSxFQUFFLEVBQUUsRUFBRSx3QkFBd0IsRUFBRSxFQUFFLEdBQUksT0FBTSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxJQUFJLEVBQUUsR0FBRyxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxZQUFZLENBQUMsRUFBRSxLQUFLLEtBQUssY0FBYyxFQUFFLEtBQUssU0FBUyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsS0FBSyxLQUFLLGNBQWMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxTQUFTLEVBQUUsQ0FBQyxNQUFPLEdBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEFBQVEsT0FBTyxHQUFFLEVBQUUsV0FBVyxDQUFDLEtBQS9CLE9BQW9DLEVBQUUsRUFBRSxHQUFHLEFBQVEsT0FBTyxHQUFFLEVBQUUsV0FBVyxFQUFFLENBQUMsS0FBakMsT0FBdUMsR0FBRSxNQUFPLEdBQUUsT0FBTyxJQUFLLEdBQUUsT0FBTyxLQUFLLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxXQUFXLEdBQUksWUFBVyxDQUFDLEVBQUUsR0FBSSxPQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxBQUFRLE9BQU8sR0FBRSxFQUFFLFdBQVcsQ0FBQyxLQUEvQixPQUFvQyxFQUFFLEVBQUUsR0FBRyxBQUFRLE9BQU8sR0FBRSxFQUFFLFdBQVcsRUFBRSxDQUFDLEtBQWpDLE9BQXVDLEdBQUUsTUFBTyxHQUFFLE9BQU8sSUFBSyxHQUFFLE9BQU8sS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUcsR0FBRSxLQUFLLEVBQUUsS0FBSyxJQUFJLElBQUksRUFBRyxHQUFFLE1BQU0sRUFBRSxLQUFLLElBQUksSUFBSSxHQUFJLEdBQUUsS0FBSyxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLEdBQUcsSUFBSSxFQUFFLEtBQUssSUFBSSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssSUFBSSxHQUFHLEdBQUcsTUFBTyxFQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxXQUFXLFNBQVMsRUFBRSxDQUFDLE1BQU8sR0FBRSxXQUFXLEVBQUUsWUFBWSxhQUFhLENBQUMsRUFBRSxTQUFTLE9BQU8sRUFBRSxTQUFTLEVBQUUsQ0FBQyxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxHQUFJLE9BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBSSxHQUFFLEVBQUUsTUFBTSxJQUFJLEVBQUUsS0FBSyxVQUFVLEVBQUcsR0FBRSxFQUFFLElBQUksRUFBRSxLQUFLLE1BQU0sR0FBRyxFQUFFLE1BQU0sQ0FBQyxJQUFJLEdBQUcsQUFBSSxJQUFKLEVBQU0sR0FBRyxBQUFJLElBQUosRUFBTSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsS0FBSyxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUcsSUFBRyxNQUFNLEVBQUUsS0FBSyxNQUFNLEdBQUcsR0FBRyxLQUFLLEVBQUUsS0FBSyxNQUFNLEtBQUssRUFBRSxDQUFDLE1BQU8sR0FBRSxTQUFTLEdBQUksR0FBRSxTQUFTLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsT0FBTyxHQUFHLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsV0FBVyxhQUFhLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRSxVQUFVLGFBQWEsU0FBUyxFQUFFLENBQUMsR0FBSSxHQUFFLEVBQUUsWUFBWSxFQUFFLFdBQVcsYUFBYSxRQUFRLEVBQUUsSUFBSSxFQUFFLEdBQUcsS0FBSyxVQUFVLEtBQUssU0FBUyxPQUFPLENBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxHQUFJLEdBQUUsRUFBRSxBQUFDLEdBQUUsR0FBSSxZQUFXLEVBQUUsT0FBTyxLQUFLLFNBQVMsTUFBTSxHQUFHLElBQUksS0FBSyxTQUFTLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLFNBQVMsTUFBTSxDQUFDLEtBQU0sR0FBRSxLQUFLLFNBQVMsT0FBTyxDQUFDLEVBQUUsS0FBSyxTQUFTLElBQUksQ0FBQyxHQUFJLEdBQUUsU0FBUyxFQUFFLEVBQUUsQ0FBQyxHQUFJLEdBQUUsSUFBSyxHQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsUUFBUyxHQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsQUFBTSxLQUFJLEVBQUUsS0FBWixLQUFpQixJQUFJLE1BQU8sR0FBRSxHQUFJLEFBQUksSUFBSixFQUFGLEVBQVUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVMsR0FBRSxXQUFZLEdBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLEtBQUssU0FBUyxFQUFFLFNBQVMsRUFBRSxFQUFFLE1BQU0sR0FBSSxHQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxLQUFLLFNBQVMsRUFBRSxNQUFNLEVBQUUsRUFBRSxNQUFNLElBQUksS0FBSyxLQUFLLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsVUFBVSxNQUFNLFVBQVUsQ0FBQyxLQUFLLFVBQVUsS0FBSyxTQUFTLFFBQVMsTUFBSyxLQUFLLENBQUMsS0FBSyxFQUFFLFdBQVcsS0FBSyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssU0FBUyxLQUFLLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRSxVQUFVLGFBQWEsU0FBUyxFQUFFLENBQUMsS0FBSyxLQUFLLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLEdBQUcseUJBQXlCLEdBQUcsWUFBWSxHQUFHLFVBQVUsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLFNBQVMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxhQUFhLEdBQUksR0FBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxlQUFlLEVBQUUsRUFBRSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsQ0FBQyxNQUFPLEVBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLE9BQVEsR0FBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLFdBQVcsQ0FBQyxFQUFFLE1BQU8sRUFBQyxDQUFDLEVBQUUsY0FBYyxFQUFFLEVBQUUsUUFBUSxTQUFTLEVBQUUsRUFBRSxDQUFDLEVBQUUsYUFBYSxNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU8sSUFBSSxNQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFDLENBQVMsR0FBRyxDQUFDLEdBQUksR0FB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Q0FBQyxDQUFDLEVBQUUsV0FBVyxTQUFTLEVBQUUsQ0FBQyxNQUFPLEdBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsWUFBWSxDQUFDLE9BQU8sU0FBUyxFQUFFLENBQUMsTUFBTyxHQUFFLEdBQUksWUFBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sU0FBUyxFQUFFLENBQUMsTUFBTyxHQUFFLEdBQUksWUFBVyxDQUFDLEVBQUUsR0FBSSxPQUFNLEVBQUUsVUFBVSxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsV0FBVyxTQUFTLEVBQUUsQ0FBQyxNQUFPLElBQUksWUFBVyxDQUFDLENBQUMsRUFBRSxXQUFXLFNBQVMsRUFBRSxDQUFDLE1BQU8sR0FBRSxjQUFjLEdBQUksWUFBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxXQUFXLENBQUMsT0FBTyxFQUFFLE1BQU0sU0FBUyxFQUFFLENBQUMsTUFBTyxHQUFFLEVBQUUsR0FBSSxPQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxZQUFZLFNBQVMsRUFBRSxDQUFDLE1BQU8sR0FBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLFdBQVcsU0FBUyxFQUFFLENBQUMsTUFBTyxHQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLFdBQVcsQ0FBQyxPQUFPLEVBQUUsTUFBTSxTQUFTLEVBQUUsQ0FBQyxNQUFPLEdBQUUsRUFBRSxHQUFJLE9BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFLFlBQVksU0FBUyxFQUFFLENBQUMsTUFBTyxHQUFFLFdBQVcsV0FBVyxDQUFDLEVBQUUsTUFBTSxFQUFFLFdBQVcsU0FBUyxFQUFFLENBQUMsTUFBTyxHQUFFLEVBQUUsR0FBSSxZQUFXLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxFQUFFLFlBQVksU0FBUyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxNQUFPLEdBQUUsRUFBRSxhQUFhLENBQUMsRUFBRSxHQUFJLEdBQUUsRUFBRSxVQUFVLENBQUMsRUFBRSxNQUFPLEdBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsUUFBUSxTQUFTLEVBQUUsQ0FBQyxPQUFRLEdBQUUsRUFBRSxNQUFNLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sSUFBSSxDQUFDLEdBQUksR0FBRSxFQUFFLEdBQUcsQUFBTSxJQUFOLEtBQVMsQUFBSyxJQUFMLElBQVEsQUFBSSxJQUFKLEdBQU8sSUFBSSxFQUFFLE9BQU8sR0FBSSxDQUFPLElBQVAsS0FBUyxFQUFFLElBQUksRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsTUFBTyxHQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsRUFBRSxVQUFVLFNBQVMsRUFBRSxDQUFDLE1BQU0sQUFBVSxPQUFPLElBQWpCLFNBQW1CLFNBQVMsQUFBbUIsT0FBTyxVQUFVLFNBQVMsS0FBSyxDQUFDLElBQW5ELGlCQUFxRCxRQUFRLEVBQUUsWUFBWSxFQUFFLFNBQVMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxZQUFZLFlBQWEsWUFBVyxhQUFhLEVBQUUsYUFBYSxZQUFhLGFBQVksY0FBYyxNQUFNLEVBQUUsRUFBRSxhQUFhLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsWUFBWSxHQUFHLEtBQU0sSUFBSSxPQUFNLEVBQUUsb0NBQW9DLENBQUMsRUFBRSxFQUFFLGlCQUFpQixNQUFNLEVBQUUsaUJBQWlCLEdBQUcsRUFBRSxPQUFPLFNBQVMsRUFBRSxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxFQUFHLElBQUcsSUFBSSxPQUFPLElBQUksR0FBRyxNQUFRLElBQUUsRUFBRSxXQUFXLENBQUMsR0FBRyxHQUFHLElBQUksSUFBSSxFQUFFLFNBQVMsRUFBRSxFQUFFLFlBQVksRUFBRSxNQUFPLEVBQUMsRUFBRSxFQUFFLE1BQU0sU0FBUyxFQUFFLEVBQUUsRUFBRSxDQUFDLGFBQWEsVUFBVSxDQUFDLEVBQUUsTUFBTSxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLFNBQVMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxHQUFJLEVBQUMsRUFBRSxFQUFFLE9BQU8sVUFBVSxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsVUFBVSxPQUFPLElBQUksSUFBSSxJQUFLLFdBQVUsR0FBRyxVQUFVLEdBQUcsZUFBZSxDQUFDLEdBQUcsQUFBUyxFQUFFLEtBQVgsUUFBZ0IsR0FBRSxHQUFHLFVBQVUsR0FBRyxJQUFJLE1BQU8sRUFBQyxFQUFFLEVBQUUsZUFBZSxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLE1BQU8sR0FBRSxRQUFRLFFBQVEsQ0FBQyxFQUFFLEtBQUssU0FBUyxFQUFFLENBQUMsTUFBTyxHQUFFLE1BQU8sYUFBYSxPQUFNLEFBQUssQ0FBQyxnQkFBZ0IsZUFBZSxFQUFFLFFBQVEsT0FBTyxVQUFVLFNBQVMsS0FBSyxDQUFDLENBQUMsSUFBaEYsS0FBb0YsQUFBYSxNQUFPLFlBQXBCLElBQStCLEdBQUksR0FBRSxRQUFRLFNBQVMsRUFBRSxFQUFFLENBQUMsR0FBSSxHQUFFLEdBQUksWUFBVyxFQUFFLE9BQU8sU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFLE9BQU8sTUFBTSxDQUFDLEVBQUUsRUFBRSxRQUFRLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRSxPQUFPLEtBQUssQ0FBQyxFQUFFLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLEVBQUUsQ0FBQyxHQUFJLEdBQUUsRUFBRSxVQUFVLENBQUMsRUFBRSxNQUFPLEdBQUcsQ0FBZ0IsSUFBaEIsY0FBa0IsRUFBRSxFQUFFLFlBQVksYUFBYSxDQUFDLEVBQUUsQUFBVyxJQUFYLFVBQWUsR0FBRSxFQUFFLEVBQUUsT0FBTyxD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QUFDLEdBQUksR0FBRSxHQUFHLFdBQVcsRUFBRSxDQUFDLEdBQUksR0FBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLEdBQUksR0FBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUksR0FBRSxFQUFFLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxBQUFVLEVBQUUsU0FBWixTQUFvQixFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxHQUFJLEdBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxPQUFPLFNBQVMsT0FBTyxFQUFOLENBQVMsRUFBRSxPQUFPLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxNQUFPLEVBQUMsQ0FBQyxBQUFDLEdBQUUsUUFBUSxHQUFHLFVBQVUsUUFBUSxTQUFTLEVBQUUsQ0FBQyxHQUFHLEFBQVksTUFBTyxJQUFuQixXQUFxQixNQUFPLE1BQUssR0FBSSxHQUFFLEtBQUssWUFBWSxNQUFPLE1BQUssS0FBSyxTQUFTLEVBQUUsQ0FBQyxNQUFPLEdBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxLQUFLLFVBQVUsQ0FBQyxNQUFPLEVBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsTUFBTyxHQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsS0FBSyxVQUFVLENBQUMsS0FBTSxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLFVBQVUsTUFBTSxTQUFTLEVBQUUsQ0FBQyxNQUFPLE1BQUssS0FBSyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsVUFBVSxLQUFLLFNBQVMsRUFBRSxFQUFFLENBQUMsR0FBRyxBQUFZLE1BQU8sSUFBbkIsWUFBc0IsS0FBSyxRQUFRLEdBQUcsQUFBWSxNQUFPLElBQW5CLFlBQXNCLEtBQUssUUFBUSxFQUFFLE1BQU8sTUFBSyxHQUFJLEdBQUUsR0FBSSxNQUFLLFlBQVksQ0FBQyxFQUFFLFlBQUssUUFBUSxFQUFFLEVBQUUsRUFBRSxLQUFLLFFBQVEsRUFBRSxFQUFFLEVBQUUsS0FBSyxPQUFPLEVBQUUsS0FBSyxNQUFNLEtBQUssR0FBSSxHQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBUyxDQUFDLEVBQUUsRUFBRSxVQUFVLGNBQWMsU0FBUyxFQUFFLENBQUMsRUFBRSxRQUFRLEtBQUssUUFBUSxDQUFDLENBQUMsRUFBRSxFQUFFLFVBQVUsbUJBQW1CLFNBQVMsRUFBRSxDQUFDLEVBQUUsS0FBSyxRQUFRLEtBQUssWUFBWSxDQUFDLENBQUMsRUFBRSxFQUFFLFVBQVUsYUFBYSxTQUFTLEVBQUUsQ0FBQyxFQUFFLE9BQU8sS0FBSyxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsVUFBVSxrQkFBa0IsU0FBUyxFQUFFLENBQUMsRUFBRSxLQUFLLFFBQVEsS0FBSyxXQUFXLENBQUMsQ0FBQyxFQUFFLEVBQUUsUUFBUSxTQUFTLEVBQUUsRUFBRSxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQUFBVSxFQUFFLFNBQVosUUFBbUIsTUFBTyxHQUFFLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFJLEdBQUUsRUFBRSxNQUFNLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxRQUFRLEVBQUUsT0FBUSxHQUFFLEdBQUcsRUFBRSxFQUFFLE1BQU0sT0FBTyxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLE1BQU8sRUFBQyxFQUFFLEVBQUUsT0FBTyxTQUFTLEVBQUUsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQVEsR0FBRSxHQUFHLEVBQUUsRUFBRSxNQUFNLE9BQU8sRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLEdBQUcsYUFBYSxDQUFDLEVBQUUsTUFBTyxFQUFDLEVBQUUsRUFBRSxRQUFRLFNBQVMsRUFBRSxDQUFDLE1BQUcsYUFBYSxNQUFZLEVBQVMsRUFBRSxRQUFRLEdBQUksTUFBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxPQUFPLFNBQVMsRUFBRSxDQUFDLEdBQUksR0FBRSxHQUFJLE1BQUssQ0FBQyxFQUFFLE1BQU8sR0FBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLFNBQVMsRUFBRSxDQUFDLEdBQUksR0FBRSxLQUFLLEdBQUcsQUFBbUIsT0FBTyxVQUFVLFNBQVMsS0FBSyxDQUFDLElBQW5ELGlCQUFxRCxNQUFPLE1BQUssT0FBTyxHQUFJLFdBQVUsa0JBQWtCLENBQUMsRUFBRSxHQUFJLEdBQUUsRUFBRSxPQUFPLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxNQUFPLE1BQUssUUFBUSxDQUFDLENBQUMsRUFBNEMsT0FBdEMsR0FBRSxHQUFJLE9BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFJLE1BQUssQ0FBQyxFQUFPLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxNQUFPLEdBQUUsV0FBVyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxFQUFFLEtBQUssU0FBUyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLEdBQUcsR0FBSSxHQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsR0FBSSxHQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLFNBQVMsRUFBRSxDQUFDLEdBQUksR0FBRSxLQUFLLEdBQUcsQUFBbUIsT0FBTyxVQUFVLFNBQVMsS0FBSyxDQUFDLElBQW5ELGlCQUFxRCxNQUFPLE1BQUssT0FBTyxHQUFJLFdBQVUsa0JBQWtCLENBQUMsRUFBRSxHQUFJLEdBQUUsRUFBRSxPQUFPLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxNQUFPLE1BQUssUUFBUSxDQUFDLENBQUMsRUFBeUIsT0FBbkIsR0FBRSxHQUFHLEVBQUUsR0FBSSxNQUFLLENBQUMsRUFBTyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxFQUFFLEtBQUssU0FBUyxFQUFFLENBQUMsR0FBSSxHQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsR0FBSSxHQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFJLEdBQUUsTUFBTyxFQUFDLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLFNBQVMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxhQUFhLEdBQUksR0FBRSxDQUFDLEVBQUUsQUFBQyxBQVpodWlELEdBWWt1aUQsRUFBRSxvQkFBb0IsRUFBRSxRQUFRLEVBQUUsRUFBRSxlQUFlLEVBQUUsRUFBRSxlQUFlLEVBQUUsRUFBRSxzQkFBc0IsQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsR0FBRyxxQkFBcUIsR0FBRyx1QkFBdUIsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLFNBQVMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxhQUFhLEdBQUksR0FBRSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsRUFBRSxFQUFFLGlCQUFpQixFQUFFLEVBQUUsRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLE9BQU8sVUFBVSxTQUFTLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUUsZ0JBQWdCLElBQUcsTUFBTyxJQUFJLEdBQUUsQ0FBQyxFQUFFLEtBQUssUUFBUSxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLFVBQVUsTUFBTSxXQUFXLEdBQUcsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUksR0FBRSxLQUFLLFFBQVEsRUFBRSxLQUFLLEVBQUUsRUFBRSxXQUFXLEVBQUUsV0FBVyxDQUFDLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxFQUFFLFlBQVksRUFBRSxXQUFXLElBQUssR0FBRSxZQUFZLElBQUksS0FBSyxJQUFJLEVBQUUsS0FBSyxJQUFJLEdBQUcsS0FBSyxNQUFNLEdBQUcsS0FBSyxPQUFPLENBQUMsRUFBRSxLQUFLLEtBQUssR0FBSSxHQUFFLEtBQUssS0FBSyxVQUFVLEVBQUUsR0FBSSxHQUFFLEVBQUUsYUFBYSxLQUFLLEtBQUssRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEdBQUcsSUFBSSxFQUFFLEtBQU0sSUFBSSxPQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEtBQUssS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFLFdBQVcsQ0FBQyxHQUFJLEdBQUUsR0FBRyxFQUFFLEFBQVUsTUFBTyxHQUFFLFlBQW5CLFNBQThCLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxBQUF5QixFQUFFLEtBQUssRUFBRSxVQUFVLElBQTVDLHVCQUE4QyxHQUFJLFlBQVcsRUFBRSxVQUFVLEVBQUUsRUFBRSxXQUFZLEdBQUUsRUFBRSxxQkFBcUIsS0FBSyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQU0sSUFBSSxPQUFNLEVBQUUsRUFBRSxFQUFFLEtBQUssVUFBVSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLEdBQUksR0FBRSxHQUFJLEdBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxLQUFNLEdBQUUsS0FBSyxFQUFFLEVBQUUsS0FBSyxNQUFPLEdBQUUsTUFBTSxDQUFDLEVBQUUsVUFBVSxLQUFLLFNBQVMsRUFBRSxFQUFFLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRSxLQUFLLEtBQUssRUFB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QUFFLEdBQUksR0FBRSxLQUFLLFFBQVEsRUFBRSxLQUFLLEdBQUcsRUFBRSxZQUFZLEVBQUUsV0FBVyxJQUFLLEdBQUUsV0FBVyxDQUFDLEVBQUUsV0FBVyxBQUFJLEVBQUUsYUFBTixHQUFtQixHQUFFLFdBQVcsTUFBTSxDQUFFLElBQUcsRUFBRSxZQUFZLEVBQUUsV0FBVyxLQUFLLEdBQUcsRUFBRSxZQUFhLEdBQUUsWUFBWSxJQUFJLEdBQUcsRUFBRSxZQUFZLEVBQUUsV0FBVyxJQUFJLEFBQUksSUFBRyxFQUFFLGFBQVQsR0FBdUIsR0FBRSxZQUFZLElBQUksS0FBSyxJQUFJLEVBQUUsS0FBSyxJQUFJLEdBQUcsS0FBSyxNQUFNLEdBQUcsS0FBSyxPQUFPLENBQUMsRUFBRSxLQUFLLEtBQUssR0FBSSxHQUFFLEtBQUssS0FBSyxVQUFVLEVBQUUsR0FBSSxHQUFFLEVBQUUsYUFBYSxLQUFLLEtBQUssRUFBRSxVQUFVLEVBQUUsR0FBRyxJQUFJLEVBQUUsS0FBSyxLQUFNLElBQUksT0FBTSxFQUFFLEVBQUUsRUFBRSxLQUFLLE9BQU8sR0FBSSxHQUFFLEVBQUUsaUJBQWlCLEtBQUssS0FBSyxLQUFLLE1BQU0sQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsR0FBSSxHQUFFLEdBQUksR0FBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEtBQU0sR0FBRSxLQUFLLEVBQUUsRUFBRSxLQUFLLE1BQU8sR0FBRSxNQUFNLENBQUMsRUFBRSxVQUFVLEtBQUssU0FBUyxFQUFFLEVBQUUsQ0FBQyxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxLQUFLLEVBQUUsS0FBSyxRQUFRLFVBQVUsRUFBRSxLQUFLLFFBQVEsV0FBVyxFQUFFLEdBQUcsR0FBRyxLQUFLLE1BQU0sTUFBTSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLEFBQUssSUFBTCxHQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsQUFBVSxNQUFPLElB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RSxHQUFHLEVBQUUsT0FBTyxNQUFPLEVBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxTQUFTLFNBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBUSxHQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxjQUFjLFNBQVMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLFNBQVMsU0FBUyxFQUFFLENBQUMsRUFBRyxHQUFFLEtBQUssV0FBVyxFQUFFLE1BQU0sWUFBWSxFQUFFLE1BQU0sV0FBVyxFQUFFLE9BQU8sRUFBRSxDQUFDLEdBQUksR0FBRSxLQUFLLE1BQU0sRUFBRSxNQUFNLE1BQU0sRUFBRSxNQUFNLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxTQUFTLEVBQUUsRUFBRSxFQUFFLENBQUMsYUFBYSxHQUFJLEdBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsT0FBTyxhQUFhLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQUMsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsT0FBTyxhQUFhLE1BQU0sS0FBSyxHQUFJLFlBQVcsQ0FBQyxDQUFDLENBQUMsTUFBQyxDQUFTLEVBQUUsRUFBRSxDQUFDLE9BQVEsR0FBRSxHQUFJLEdBQUUsS0FBSyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxJQUFJLEVBQUUsR0FBRyxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLE9BQVEsR0FBRSxVQUFVLEdBQUcsQ0FBQyxFQUFFLFVBQVUsR0FBRyxNQUFPLFFBQU8sYUFBYSxNQUFNLEtBQUssRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLEVBQUUsT0FBUSxHQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEdBQUcsT0FBTyxhQUFhLEVBQUUsRUFBRSxFQUFFLE1BQU8sRUFBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLFdBQVcsU0FBUyxFQUFFLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEFBQVEsT0FBTyxHQUFFLEVBQUUsV0FBVyxDQUFDLEtBQS9CLE9BQW9DLEVBQUUsRUFBRSxHQUFHLEFBQVEsT0FBTyxHQUFFLEVBQUUsV0FBVyxFQUFFLENBQUMsS0FBakMsT0FBdUMsR0FBRSxNQUFPLEdBQUUsT0FBTyxJQUFLLEdBQUUsT0FBTyxLQUFLLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBSSxHQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEFBQVEsT0FBTyxHQUFFLEVBQUUsV0FBVyxDQUFDLEtBQS9CLE9BQW9DLEVBQUUsRUFBRSxHQUFHLEFBQVEsT0FBTyxHQUFFLEVBQUUsV0FBVyxFQUFFLENBQUMsS0FBakMsT0FBdUMsR0FBRSxNQUFPLEdBQUUsT0FBTyxJQUFLLEdBQUUsT0FBTyxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRyxHQUFFLEtBQUssRUFBRSxLQUFLLElBQUksSUFBSSxFQUFHLEdBQUUsTUFBTSxFQUFFLEtBQUssSUFBSSxJQUFJLEdBQUksR0FBRSxLQUFLLElBQUksSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLElBQUksR0FBRyxJQUFJLEVBQUUsS0FBSyxJQUFJLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxJQUFJLEdBQUcsR0FBRyxNQUFPLEVBQUMsRUFBRSxFQUFFLGNBQWMsU0FBUyxFQUFFLENBQUMsTUFBTyxHQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLGNBQWMsU0FBUyxFQUFFLENBQUMsT0FBUSxHQUFFLEdBQUksR0FBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxXQUFXLENBQUMsRUFBRSxNQUFPLEVBQUMsRUFBRSxFQUFFLFdBQVcsU0FBUyxFQUFFLEVBQUUsQ0FBQyxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLEdBQUksT0FBTSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFJLEdBQUUsRUFBRSxNQUFNLElBQUksRUFBRSxLQUFLLFVBQVUsRUFBRyxHQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssTUFBTSxHQUFHLEVBQUUsTUFBTSxDQUFDLElBQUksR0FBRyxBQUFJLElBQUosRUFBTSxHQUFHLEFBQUksSUFBSixFQUFNLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLElBQUksRUFBRSxFQUFFLEVBQUUsS0FBSyxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRyxJQUFHLE1BQU0sRUFBRSxLQUFLLE1BQU0sR0FBRyxHQUFHLEtBQUssRUFBRSxLQUFLLE1BQU0sS0FBSyxFQUFFLENBQUMsTUFBTyxHQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxXQUFXLFNBQVMsRUFBRSxFQUFFLENBQUMsR0FBSSxHQUFFLElBQUssR0FBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLFFBQVMsR0FBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEFBQU0sS0FBSSxFQUFFLEtBQVosS0FBaUIsSUFBSSxNQUFPLEdBQUUsR0FBSSxBQUFJLElBQUosRUFBRixFQUFVLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsU0FBUyxFQUFFLEVBQUUsRUFBRSxDQUFDLGFBQWEsRUFBRSxRQUFRLFNBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLE9BQVEsR0FBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLElBQUksR0FBRyxNQUFNLEVBQUUsRUFBRSxFQUFFLEFBQUksSUFBSixHQUFPLENBQUMsSUFBSSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUcsR0FBRSxFQUFFLEVBQUUsS0FBSyxHQUFHLEVBQUUsRUFBRSxHQUFHLENBQUMsR0FBRyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU8sR0FBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLFNBQVMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxhQUFhLEVBQUUsUUFBUSxDQUFDLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLFFBQVEsR0FBRyxlQUFlLEdBQUcsYUFBYSxHQUFHLFlBQVksR0FBRyxpQkFBaUIsRUFBRSxhQUFhLEVBQUUsbUJBQW1CLEVBQUUsc0JBQXNCLEdBQUcsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLG1CQUFtQixFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLFNBQVMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxhQUFhLEdBQUksR0FBRSxVQUFVLENBQUMsT0FBUSxHQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksSUFBSSxDQUFDLEVBQUUsRUFBRSxPQUFRLEdBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxXQUFXLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxNQUFPLEVBQUMsRUFBRSxFQUFFLEVBQUUsUUFBUSxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsT0FBUSxHQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFLLEdBQUUsRUFBRSxLQUFLLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsU0FBUyxFQUFFLEVBQUUsRUFBRSxDQUFDLGFBQWEsR0FBSSxHQUFFLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxZQUFXLEVBQUUsRUFBRSxDQUFDLE1BQU8sR0FBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsTUFBTyxJQUFHLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLFlBQVcsRUFBRSxDQUFDLE9BQVEsR0FBRSxFQUFFLE9BQU8sR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxHQUFJLEdBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxXQUFZLEdBQUUsRUFBRSxXQUFXLEFBQUksSUFBSixHQUFRLEdBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsYUFBYSxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsU0FBUyxFQUFFLEFBQUksRUFBRSxVQUFOLEdBQWdCLEdBQUUsWUFBWSxHQUFHLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsWUFBWSxHQUFHLEVBQUUsU0FBUyxFQUFFLFlBQVksQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLFlBQVcsRUFBRSxFQUFFLENBQUMsRUFBRSxZQUFZLEVBQUUsV0FBVyxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFlBQVksRUFBRSxXQUFXLElBQUksRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLFdBQVcsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxZQUFZLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEVBQUUsU0FBVSxHQUFFLE9BQU8sR0FBRyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxhQUFhLEVBQUUsWUFBYSxLQUFJLEdBQUcsRUFBRSxFQUFFLFdBQVksR0FBRSxFQUFFLFdBQVcsRUFBRyxJQUFHLEVBQUcsR0FBRSxHQUFHLEtBQUssSUFBRyxFQUFFLEVBQUUsRUFBRSxLQUFLLElBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsT0FBUSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUcsR0FBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsR0FBSSxHQUFFLEdBQUcsTUFBTSxHQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLE9BQVMsR0FBRSxFQUFFLEVBQUUsSUFBSSxHQUFHLEFBQUcsRUFBRSxHQUFMLEdBQVEsTUFBTyxJQUFHLEVBQUUsVUFBVSxFQUFFLEVBQUUsU0FBUyxDQUFDLFlBQVcsRUFBRSxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFHLEdBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLGFBQWEsRUFBRSxFQUFFLFVBQVUsRUFBRSxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQUFBSSxFQUFFLEtBQUssV0FBWCxFQUFvQixNQUFNLEdBQUcsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLFNBQVMsRUFBRSxHQUFJLEdBQUUsR0FBRyxFQUFFLEFBQUksSUFBSixFQUFNLEVBQUcsR0FBRSxVQUFVLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxBQUFJLEVBQUUsTUFBTSxPQUFaLEVBQWlCLEVBQUUsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEFBQUksRUFBRSxNQUFNLE9BQVosR0FBbUIsR0FBRSxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxHQUFHLEVBQUUsTUFBTyxHQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsUUFBUyxHQUFFLE1BQU8sR0FBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFFLEdBQUUsVUFBVSxFQUFFLE9BQU8sS0FBSyxDQUFDLE9BQU8sRUFBRSxVQUFVLEdBQUcsQUFBSSxFQUFFLEtBQUssV0FBWCxFQUFvQixDQUFDLFlBQVcsRUFBRSxFQUFFLENBQUMsT0FBUSxHQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsVUFBVSxFQUFFLENBQUMsR0FBRyxHQUFFLENBQUMsRUFBRSxFQUFFLFVBQVUsR0FBRyxJQUFJLEVBQUUsTUFBTyxHQUFFLEdBQUcsQUFBSSxFQUFFLFlBQU4sRUFBZ0IsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsV0FBVyxHQUFJLEdBQUUsTUFBTyxHQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLFVBQVUsQUFBSSxJQUFKLEdBQU8sRUFBRSxTQUFTLEdBQUcsRUFBRSxPQUFPLEdBQUksR0FBRSxhQUFhLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxjQUFjLEVBQUUsR0FBRyxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxhQUFhLENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxDQUFDLElBQUksRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLE1BQU8sR0FBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxTQUFTLEFBQUcsRUFBRSxFQUFFLGNBQVAsR0FBcUIsQ0FBQyxFQUFFLFVBQVUsS0FBTSxHQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTyxHQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLFNBQVMsSUFBSSxFQUFFLGNBQWUsR0FBRSxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxFQUFFLFlBQVksRUFBRSxXQUFXLEdBQUcsR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLEFBQUksRUFBRSxLQUFLLFlBQVgsR0FBc0IsTUFBTyxFQUFDLENBQUMsTUFBTyxHQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRyxHQUFFLEVBQUUsRUFBRSxFQUFFLEFBQUksRUFBRSxLQUFLLFlBQVgsRUFBcUIsRUFBRSxHQUFHLEVBQUUsVUFBVyxHQUFFLEVBQUUsRUFBRSxFQUFFLEFBQUksRUFBRSxLQUFLLFlBQVgsR0FBc0IsRUFBRSxDQUFDLENBQUMsWUFBVyxFQUFFLEVBQUUsQ0FBQyxPQUFRLEdBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLFVBQVUsRUFBRSxDQUFDLEdBQUcsR0FBRSxDQUFDLEVBQUUsRUFBRSxVQUFVLEdBQUcsSUFBSSxFQUFFLE1BQU8sR0FBRSxHQUFHLEFBQUksRUFBRSxZQUFOLEVBQWdCLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLFdBQVcsR0FBSSxHQUFFLE1BQU8sR0FBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxFQUFFLEFBQUksSUFBSixHQUFPLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLFNBQVMsR0FBRyxFQUFFLE9BQU8sR0FBSSxHQUFFLGFBQWEsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLGNBQWMsR0FBSSxDQUFJLEVBQUUsV0FBTixHQUFnQixFQUFFLGVBQWUsR0FBRyxLQUFLLEVBQUUsU0FBUyxFQUFFLGNBQWUsR0FBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLGFBQWEsR0FBRyxFQUFFLGNBQWMsRUFBRSxZQUFZLENBQUMsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsV0FBVyxFQUFFLFlBQVksQ0FBQyxFQUFFLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsVUFBVSxHQUFJLEdBQUUsTUFBTyxHQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLFVBQVUsQUFBRyxFQUFFLEVBQUUsYUFBUCxHQUFvQixDQUFDLEdBQUcsRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsV0FBVyxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsQUFBSSxFQUFFLEtBQUssWUFBWCxHQUFzQixNQUFPLEVBQUMsU0FBUyxFQUFFLGlCQUFpQixHQUFJLEdBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLFlBQVksQUFBSSxFQUFFLEtBQUssWUFBWCxFQUFxQixNQUFPLE9BQU8sR0FBRSxnQkFBZ0IsRUFBRSxFQUFFLFdBQVcsRUFBRSxXQUFXLENBQUMsTUFBTyxHQUFFLGlCQUFrQixHQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxnQkFBZ0IsR0FBRyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRyxHQUFFLEVBQUUsRUFBRSxFQUFFLEFBQUksRUFBRSxLQUFLLFlBQVgsRUFBcUIsRUFBRSxHQUFHLEVBQUUsVUFBVyxHQUFFLEVBQUUsRUFBRSxFQUFFLEFBQUksRUFBRSxLQUFLLFlBQVgsR0FBc0IsRUFBRSxDQUFDLENBQUMsWUFBVyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxLQUFLLFlBQVksRUFBRSxLQUFLLFNBQVMsRUFBRSxLQUFLLFlBQVksRUFBRSxLQUFLLFVBQVUsRUFBRSxLQUFLLEtBQUssQ0FBQyxDQUFDLGFBQVksQ0FBQyxLQUFLLEtBQUssS0FBSyxLQUFLLE9BQU8sRUFBRSxLQUFLLFlBQVksS0FBSyxLQUFLLGlCQUFpQixFQUFFLEtBQUssWUFBWSxFQUFFLEtBQUssUUFBUSxFQUFFLEtBQUssS0FBSyxFQUFFLEtBQUssT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLEtBQUssT0FBTyxFQUFFLEtBQUssV0FBVyxHQUFHLEtBQUssT0FBTyxFQUFFLEtBQUssT0FBTyxFQUFFLEtBQUssT0FBTyxFQUFFLEtBQUssT0FBTyxLQUFLLEtBQUssWUFBWSxFQUFFLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssTUFBTSxFQUFFLEtBQUssVUFBVSxFQUFFLEtBQUssVUFBVSxFQUFFLEtBQUssVUFBVSxFQUFFLEtBQUssV0FBVyxFQUFFLEtBQUssWUFBWSxFQUFFLEtBQUssYUFBYSxFQUFFLEtBQUssV0FBVyxFQUFFLEtBQUssZ0JBQWdCLEVBQUUsS0FBSyxTQUFTLEVBQUUsS0FBSyxZQUFZLEVBQUUsS0FBSyxVQUFVLEVBQUUsS0FBSyxZQUFZLEVBQUUsS0FBSyxpQkFBaUIsRUFBRSxLQUFLLGVBQWUsRUFBRSxLQUFLLE1BQU0sRUFBRSxLQUFLLFNBQVMsRUFBRSxLQUFLLFdBQVcsRUFBRSxLQUFLLFdBQVcsRUFBRSxLQUFLLFVBQVUsR0FBSSxHQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsS0FBSyxVQUFVLEdBQUksR0FBRSxNQUFNLEVBQUcsR0FBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLFFBQVEsR0FBSSxHQUFFLE1BQU0sRUFBRyxHQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUUsS0FBSyxTQUFTLEVBQUUsR0FBRSxLQUFLLFNBQVMsRUFBRSxHQUFFLEtBQUssT0FBTyxFQUFFLEtBQUssT0FBTyxLQUFLLEtBQUssT0FBTyxLQUFLLEtBQUssUUFBUSxLQUFLLEtBQUssU0FBUyxHQUFJLEdBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxLQUFLLEtBQUssR0FBSSxHQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFFLEtBQUssSUFBSSxFQUFFLEtBQUssU0FBUyxFQUFFLEtBQUssU0FBUyxFQUFFLEtBQUssTUFBTSxHQUFJLEdBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUUsS0FBSyxLQUFLLEVBQUUsS0FBSyxNQUFNLEVBQUUsS0FBSyxZQUFZLEVBQUUsS0FBSyxTQUFTLEVBQUUsS0FBSyxNQUFNLEVBQUUsS0FBSyxRQUFRLEVBQUUsS0FBSyxXQUFXLEVBQUUsS0FBSyxRQUFRLEVBQUUsS0FBSyxPQUFPLEVBQUUsS0FBSyxPQUFPLEVBQUUsS0FBSyxTQUFTLENBQUMsQ0FBQyxZQUFXLEVBQUUsQ0FBQyxHQUFJLEdBQUUsTUFBTyxJQUFHLEVBQUUsTUFBTyxHQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsRUFBRSxVQUFVLEVBQUcsR0FBRSxFQUFFLE9BQU8sUUFBUSxFQUFFLEVBQUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxHQUFJLEdBQUUsS0FBSyxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLE1BQU0sQUFBSSxFQUFFLE9BQU4sRUFBVyxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxTQUFTLENBQUMsRUFBRSxHQUFHLEdBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxZQUFXLEVBQUUsQ0FBQyxHQUFJLEdBQUUsR0FBRSxDQUFDLEVBQUUsTUFBTyxLQUFJLEdBQUcsU0FBUyxFQUFFLENBQUMsRUFBRSxZQUFZLEVBQUUsRUFBRSxPQUFPLEdBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxlQUFlLEVBQUUsRUFBRSxPQUFPLFNBQVMsRUFBRSxXQUFXLEVBQUUsRUFBRSxPQUFPLFlBQVksRUFBRSxXQUFXLEVBQUUsRUFBRSxPQUFPLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxFQUFFLE9BQU8sVUFBVSxFQUFFLFNBQVMsRUFBRSxFQUFFLFlBQVksRUFBRSxFQUFFLFVBQVUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLFlBQVcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFPLEdBQUUsR0FBSSxHQUFFLEVBQUUsR0FBRyxJQUFJLEdBQUksR0FBRSxHQUFHLEVBQUUsRUFBRyxHQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFJLEdBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsTUFBTyxJQUFFLEVBQUUsQ0FBQyxFQUFFLEFBQUksSUFBSixHQUFRLEdBQUUsR0FBRyxHQUFJLEdBQUUsR0FBSSxJQUFFLE1BQU8sR0FBRSxNQUFNLEdBQUcsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsT0FBTyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUUsT0FBTyxHQUFHLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLFVBQVUsR0FBRyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUcsSUFBRSxVQUFVLEVBQUUsR0FBRyxHQUFHLEVBQUUsT0FBTyxHQUFJLEdBQUUsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsS0FBSyxHQUFJLEdBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxFQUFFLEtBQUssR0FBSSxHQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsRUFBRSxZQUFZLEdBQUcsRUFBRSxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsRUFBRSxZQUFZLEVBQUUsWUFBWSxHQUFJLEdBQUUsS0FBSyxFQUFFLGdCQUFnQixFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxPQUFPLEVBQUUsR0FBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBSSxJQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FBQyxHQUFJLEdBQUUsTUFBTSxJQUFJLEVBQUUsRUFBRSxpQkFBaUIsR0FBSSxHQUFFLEVBQUUsaUJBQWlCLEtBQUssQ0FBQyxHQUFHLEVBQUUsV0FBVyxFQUFFLENBQUMsR0FBRyxHQUFFLENBQUMsRUFBRSxBQUFJLEVBQUUsWUFBTixHQUFpQixJQUFJLEVBQUUsTUFBTyxHQUFFLEdBQUcsQUFBSSxFQUFFLFlBQU4sRUFBZ0IsS0FBSyxDQUFDLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsR0FBSSxHQUFFLEVBQUUsWUFBWSxFQUFvSCxHQUE5RyxDQUFJLEVBQUUsV0FBTixHQUFnQixFQUFFLFVBQVUsSUFBSyxHQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxBQUFJLEVBQUUsS0FBSyxZQUFYLElBQWtDLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxPQUFPLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxBQUFJLEVBQUUsS0FBSyxZQUFYLEdBQXNCLE1BQU8sRUFBQyxDQUFDLE1BQU8sR0FBRSxPQUFPLEVBQUUsSUFBSSxFQUFHLEdBQUUsRUFBRSxFQUFFLEVBQUUsQUFBSSxFQUFFLEtBQUssWUFBWCxFQUFxQixFQUFFLEdBQUksR0FBRSxTQUFTLEVBQUUsYUFBYyxHQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxXQUFXLEVBQUUsQ0FBQyxFQUFFLEdBQUksSUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUMsRUFBRSxHQUFJLElBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFDLEVBQUUsR0FBSSxJQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBQyxFQUFFLEdBQUksSUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUMsRUFBRSxHQUFJLElBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFDLEVBQUUsR0FBSSxJQUFFLEVBQUUsR0FBRyxJQUFJLElBQUksRUFBQyxFQUFFLEdBQUksSUFBRSxFQUFFLEdBQUcsSUFBSSxJQUFJLEVBQUMsRUFBRSxHQUFJLElBQUUsR0FBRyxJQUFJLElBQUksS0FBSyxFQUFDLEVBQUUsR0FBSSxJQUFFLEdBQUcsSUFBSSxJQUFJLEtBQUssRUFBQyxDQUFDLEVBQUUsRUFBRSxZQUFZLFNBQVMsRUFBRSxFQUFFLENBQUMsTUFBTyxJQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLGFBQWEsR0FBRSxFQUFFLGFBQWEsR0FBRSxFQUFFLGlCQUFpQixHQUFFLEVBQUUsaUJBQWlCLFNBQVMsRUFBRSxFQUFFLENBQUMsTUFBTyxJQUFHLEVBQUUsTUFBTSxBQUFJLEVBQUUsTUFBTSxPQUFaLEVBQWlCLEVBQUcsR0FBRSxNQUFNLE9BQU8sRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLFFBQVEsU0FBUyxFQUFFLEVBQUUsQ0FBQyxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsRUFBRSxNQUFPLEdBQUUsR0FBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLFFBQVEsQ0FBQyxFQUFFLE9BQU8sQUFBSSxFQUFFLFdBQU4sR0FBZ0IsQUFBTSxFQUFFLFNBQVIsS0FBZ0IsSUFBSSxFQUFFLE1BQU8sSUFBRSxFQUFFLEFBQUksRUFBRSxZQUFOLEVBQWdCLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxBQUFJLEVBQUUsT0FBTixFQUFXLEVBQUUsTUFBTSxFQUFFLEdBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRSxFQUFFLEdBQUcsRUFBRSxHQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsT0FBUSxJQUFFLEVBQUcsR0FBRSxPQUFPLEtBQUssRUFBRSxHQUFJLEdBQUUsT0FBTyxLQUFLLEVBQUUsR0FBSSxHQUFFLE9BQU8sTUFBTSxFQUFFLEdBQUksR0FBRSxPQUFPLEtBQUssRUFBRSxHQUFJLEdBQUUsT0FBTyxRQUFRLEdBQUcsRUFBRSxFQUFFLEdBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxJQUFJLEVBQUUsR0FBRSxFQUFFLEVBQUUsT0FBTyxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUUsRUFBRSxFQUFFLE9BQU8sTUFBTSxHQUFHLEdBQUcsRUFBRSxHQUFFLEVBQUUsRUFBRSxPQUFPLE1BQU0sR0FBRyxHQUFHLEVBQUUsR0FBRSxFQUFFLEFBQUksRUFBRSxRQUFOLEVBQVksRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsT0FBTyxPQUFPLEVBQUUsT0FBTyxNQUFNLFFBQVMsSUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLE1BQU0sTUFBTSxFQUFFLEdBQUUsRUFBRSxFQUFFLE9BQU8sTUFBTSxRQUFRLEVBQUUsR0FBRyxHQUFHLEVBQUUsT0FBTyxNQUFPLEdBQUUsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxRQUFRLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLE9BQU8sSUFBSyxJQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRSxFQUFFLENBQUMsRUFBRSxHQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRSxFQUFFLEFBQUksRUFBRSxRQUFOLEVBQVksRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsT0FBTyxPQUFPLENBQUMsR0FBSSxHQUFFLEVBQUcsR0FBRSxPQUFPLEdBQUcsSUFBSSxFQUFFLEdBQUksSUFBRyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEFBQUksRUFBRSxRQUFOLEVBQVksRUFBRSxJQUFJLEVBQUUsQUFBSSxFQUFFLFdBQU4sR0FBaUIsSUFBRyxJQUFJLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxBQUFJLEVBQUUsV0FBTixHQUFpQixHQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQUFBSyxFQUFFLFNBQVAsR0FBYyxHQUFHLEVBQUUsT0FBTyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVMsT0FBTSxFQUFFLE9BQU8sTUFBTSxTQUFVLEdBQUUsVUFBVSxFQUFFLGtCQUFtQixHQUFFLE9BQU8sTUFBTSxFQUFFLFFBQVEsR0FBSSxHQUFFLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxvQkFBb0IsR0FBRSxFQUFFLElBQUksRUFBRSxPQUFPLE1BQU0sRUFBRSxRQUFRLEVBQUUsRUFBRSxVQUFVLEVBQUUsT0FBTyxNQUFNLEVBQUUsUUFBUSxHQUFJLEdBQUUsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsQ0FBQyxHQUFHLEVBQUUsVUFBVSxFQUFFLE9BQU8sTUFBTSxRQUFTLEdBQUUsUUFBUSxFQUFFLEVBQUUsT0FBTyxHQUFHLEtBQU0sR0FBRSxPQUFPLEdBQUcsR0FBRyxBQUFLLEVBQUUsU0FBUCxHQUFjLEdBQUcsRUFBRSxPQUFPLEtBQUssQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsR0FBRyxFQUFFLFVBQVUsRUFBRSxrQkFBbUIsR0FBRSxPQUFPLE1BQU0sRUFBRSxRQUFRLEdBQUksR0FBRSxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsa0JBQWtCLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sS0FBSyxPQUFPLElBQUksRUFBRSxPQUFPLEtBQUssV0FBVyxFQUFFLFNBQVMsRUFBRSxFQUFFLEdBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxBQUFJLElBQUosR0FBTyxFQUFFLE9BQU8sTUFBTSxFQUFFLFFBQVEsR0FBSSxHQUFFLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLENBQUMsR0FBRyxBQUFJLElBQUosR0FBUSxHQUFFLFFBQVEsRUFBRSxFQUFFLE9BQU8sR0FBRyxLQUFNLEdBQUUsT0FBTyxHQUFHLEdBQUcsQUFBSyxFQUFFLFNBQVAsR0FBYyxHQUFHLEVBQUUsT0FBTyxRQUFRLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLEdBQUcsRUFBRSxVQUFVLEVBQUUsa0JBQW1CLEdBQUUsT0FBTyxNQUFNLEVBQUUsUUFBUSxHQUFJLEdBQUUsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxR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QUUsSUFBSSxFQUFFLEFBQUksRUFBRSxZQUFOLEdBQWtCLEdBQUUsU0FBUyxFQUFFLEVBQUUsWUFBWSxFQUFFLEVBQUUsT0FBTyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEFBQUksRUFBRSxZQUFOLEdBQWlCLE1BQU8sR0FBRSxXQUFXLEdBQUcsQ0FBQyxDQUFDLE1BQU8sS0FBSSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRyxDQUFJLEVBQUUsT0FBTixFQUFZLElBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRSxFQUFFLEVBQUUsT0FBTyxHQUFHLEdBQUcsRUFBRSxHQUFFLEVBQUUsRUFBRSxPQUFPLEdBQUcsR0FBRyxFQUFFLEdBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEdBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsR0FBRSxFQUFFLEVBQUUsVUFBVSxHQUFHLEdBQUcsRUFBRSxHQUFFLEVBQUUsRUFBRSxVQUFVLEdBQUcsR0FBRyxHQUFJLEdBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxNQUFPLEdBQUUsS0FBSyxDQUFDLEVBQUUsTUFBTSxBQUFJLEVBQUUsVUFBTixFQUFjLEVBQUUsRUFBRSxFQUFFLEVBQUUsV0FBVyxTQUFTLEVBQUUsQ0FBQyxHQUFJLEdBQUUsTUFBTyxJQUFHLEVBQUUsTUFBTyxHQUFFLEVBQUUsTUFBTSxVQUFVLEdBQUcsQUFBSyxJQUFMLElBQVEsQUFBSyxJQUFMLElBQVEsQUFBSyxJQUFMLElBQVEsQUFBTSxJQUFOLEtBQVMsSUFBSSxHQUFHLEFBQU0sSUFBTixJQUFRLEdBQUUsRUFBRSxDQUFDLEVBQUcsR0FBRSxNQUFNLEtBQUssSUFBSSxFQUFFLEdBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxxQkFBcUIsU0FBUyxFQUFFLEVBQUUsQ0FBQyxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBZ0MsR0FBdEIsQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFrQixBQUFLLEdBQUcsR0FBRSxFQUFFLE9BQU8sUUFBbkIsR0FBMEIsQUFBSSxJQUFKLEdBQU8sRUFBRSxTQUFTLEdBQUcsRUFBRSxVQUFVLE1BQU8sR0FBRSxJQUFJLEFBQUksSUFBSixHQUFRLEdBQUUsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxRQUFTLENBQUksSUFBSixHQUFRLElBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxZQUFZLEVBQUUsRUFBRSxPQUFPLEdBQUcsRUFBRSxHQUFJLEdBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLEdBQUUsQ0FBQyxFQUFFLEVBQUUsV0FBVyxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsVUFBVyxHQUFFLEdBQUcsRUFBRSxNQUFPLEdBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLFNBQVMsRUFBRSxFQUFFLFVBQVUsRUFBRSxFQUFFLEdBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTyxHQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFLFlBQVksb0NBQW9DLEVBQUUsQ0FBQyxrQkFBa0IsR0FBRyxZQUFZLEdBQUcsVUFBVSxHQUFHLGFBQWEsR0FBRyxVQUFVLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxTQUFTLEVBQUUsRUFBRSxFQUFFLENBQUMsYUFBYSxFQUFFLFFBQVEsVUFBVSxDQUFDLEtBQUssS0FBSyxFQUFFLEtBQUssS0FBSyxFQUFFLEtBQUssT0FBTyxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssTUFBTSxLQUFLLEtBQUssVUFBVSxFQUFFLEtBQUssS0FBSyxHQUFHLEtBQUssUUFBUSxHQUFHLEtBQUssS0FBSyxFQUFFLEtBQUssS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsU0FBUyxFQUFFLEVBQUUsRUFBRSxDQUFDLGFBQWEsRUFBRSxRQUFRLFNBQVMsRUFBRSxFQUFFLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRyxHQUFFLFNBQVMsR0FBRyxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUcsR0FBRSxFQUFFLFdBQVcsRUFBRSxFQUFHLEdBQUUsVUFBVSxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxTQUFTLEVBQUcsSUFBRyxFQUFFLFNBQVMsRUFBRSxFQUFHLElBQUcsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFLLElBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRyxLQUFLLEVBQUUsSUFBSSxHQUFHLEdBQUcsRUFBRSxBQUFLLEdBQUUsSUFBSSxHQUFHLE9BQWQsRUFBbUIsRUFBRSxLQUFLLE1BQU0sTUFBTSxDQUFDLEdBQUcsQ0FBRSxJQUFHLEdBQUcsQ0FBQyxHQUFHLEFBQUksSUFBRyxJQUFQLEVBQVUsQ0FBQyxFQUFFLEVBQUcsT0FBTSxHQUFJLEdBQUcsSUFBRyxHQUFHLElBQUksVUFBVSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLEdBQUcsT0FBTyxDQUFDLEVBQUUsSUFBSSw4QkFBOEIsRUFBRSxLQUFLLEdBQUcsT0FBTyxDQUFDLEVBQUUsTUFBTSxFQUFHLElBQUcsS0FBTSxHQUFFLEdBQUksSUFBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFHLElBQUcsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEdBQUcsRUFBRSxJQUFLLElBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRyxLQUFLLEVBQUUsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFFLElBQUksR0FBRSxJQUFJLEdBQUcsTUFBTSxDQUFDLEdBQUcsQUFBSSxJQUFHLElBQVAsRUFBVSxDQUFDLEVBQUUsRUFBRyxPQUFNLEdBQUksR0FBRyxJQUFHLEdBQUcsSUFBSSxVQUFVLENBQUMsRUFBRSxJQUFJLHdCQUF3QixFQUFFLEtBQUssR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFHLElBQUcsS0FBTSxJQUFHLEVBQUUsTUFBTSxFQUFHLElBQUcsR0FBRyxHQUFJLElBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLEVBQUcsSUFBRyxFQUFHLElBQUcsR0FBRyxHQUFHLENBQUMsRUFBRSxJQUFJLGdDQUFnQyxFQUFFLEtBQUssR0FBRyxPQUFPLENBQUMsR0FBRyxLQUFLLEVBQUUsR0FBRyxFQUFHLEdBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUcsR0FBRSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxJQUFJLGdDQUFnQyxFQUFFLEtBQUssR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUcsR0FBRSxLQUFLLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEdBQUcsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxVQUFVLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUcsSUFBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEdBQUcsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksR0FBRyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksR0FBRyxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssR0FBRyxFQUFFLEdBQUksR0FBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUksR0FBRSxLQUFLLEVBQUUsTUFBTSxLQUFLLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFHLElBQUcsSUFBSSxDQUFDLEdBQUksR0FBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUksR0FBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFJLElBQUksSUFBRyxHQUFHLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUcsR0FBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksSUFBSyxHQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxTQUFTLEVBQUUsRUFBRSxFQUFFLENBQUMsYUFBYSxHQUFJLEdBQUUsRUFBRSxpQkFBaUIsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxXQUFXLEVBQUUsQ0FBQyxNQUFPLEtBQUksR0FBRyxLQUFNLEtBQUksRUFBRSxPQUFTLFFBQU0sSUFBSSxHQUFLLE1BQUksSUFBSSxHQUFHLENBQUMsWUFBWSxDQUFDLEtBQUssS0FBSyxFQUFFLEtBQUssS0FBSyxHQUFHLEtBQUssS0FBSyxFQUFFLEtBQUssU0FBUyxHQUFHLEtBQUssTUFBTSxFQUFFLEtBQUssS0FBSyxFQUFFLEtBQUssTUFBTSxFQUFFLEtBQUssTUFBTSxFQUFFLEtBQUssS0FBSyxLQUFLLEtBQUssTUFBTSxFQUFFLEtBQUssTUFBTSxFQUFFLEtBQUssTUFBTSxFQUFFLEtBQUssTUFBTSxFQUFFLEtBQUssT0FBTyxLQUFLLEtBQUssS0FBSyxFQUFFLEtBQUssS0FBSyxFQUFFLEtBQUssT0FBTyxFQUFFLEtBQUssT0FBTyxFQUFFLEtBQUssTUFBTSxFQUFFLEtBQUssUUFBUSxLQUFLLEtBQUssU0FBUyxLQUFLLEtBQUssUUFBUSxFQUFFLEtBQUssU0FBUyxFQUFFLEtBQUssTUFBTSxFQUFFLEtBQUssS0FBSyxFQUFFLEtBQUssTUFBTSxFQUFFLEtBQUssS0FBSyxFQUFFLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxHQUFJLEdBQUUsTUFBTSxHQUFHLEVBQUUsS0FBSyxLQUFLLEdBQUksR0FBRSxNQUFNLEdBQUcsRUFBRSxLQUFLLE9BQU8sS0FBSyxLQUFLLFFBQVEsS0FBSyxLQUFLLEtBQUssRUFBRSxLQUFLLEtBQUssRUFBRSxLQUFLLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLEdBQUksR0FBRSxNQUFPLElBQUcsRUFBRSxNQUFPLEdBQUUsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsRUFBRSxJQUFJLEdBQUcsRUFBRSxNQUFPLEdBQUUsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEtBQUssTUFBTSxFQUFFLEtBQUssS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLEdBQUksR0FBRSxNQUFNLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxRQUFRLEdBQUksR0FBRSxNQUFNLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxHQUFJLEdBQUUsTUFBTyxJQUFHLEVBQUUsTUFBUSxJQUFFLEVBQUUsT0FBTyxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsR0FBSSxHQUFFLEVBQUUsTUFBTyxJQUFHLEVBQUUsTUFBTyxHQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUcsR0FBRSxFQUFFLEVBQUUsQ0FBQyxHQUFJLEdBQUUsRUFBRyxJQUFHLEdBQUcsRUFBRSxJQUFLLElBQUcsS0FBSyxHQUFJLEdBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRyxDQUFPLEVBQUUsU0FBVCxNQUFpQixFQUFFLFFBQVEsR0FBSSxHQUFFLE9BQU8sTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxHQUFJLEdBQUUsRUFBRSxNQUFPLEdBQUcsR0FBRSxHQUFJLEdBQUcsR0FBRSxNQUFNLEdBQUcsT0FBTyxLQUFNLEdBQUUsRUFBRSxFQUFFLENBQUMsS0FBSyxHQUFJLEdBQUUsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUUsR0FBRyxXQUFXLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFJLEdBQUUsSUFBSSxFQUFFLEdBQUksR0FBRSxNQUFNLEdBQUcsRUFBRSxFQUFFLEdBQUksR0FBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFJLEdBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTyxBQUFPLEdBQUUsU0FBVCxNQUFrQixHQUFFLE1BQU0sR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxPQUFPLEdBQUksR0FBRSxLQUFLLEVBQUUsS0FBSyxHQUFHLEdBQUcsRUFBRSxNQUFPLEdBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLE9BQVEsR0FBRyxHQUFFLEVBQUUsTUFBTSxFQUFFLFFBQVMsR0FBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRyxJQUFHLEdBQUksR0FBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxPQUFRLEdBQUUsT0FBTyxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQVEsR0FBRSxNQUFNLEdBQUcsRUFBRSxNQUFNLEVBQUUsT0FBUSxHQUFFLE9BQU8sS0FBSyxDQUFDLENBQUMsRUFBRSxhQUFhLEVBQUUsRUFBRSxjQUFjLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxFQUFFLFlBQVksU0FBUyxFQUFFLENBQUMsTUFBTyxHQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxhQUFhLEVBQUUsRUFBRSxRQUFRLFNBQVMsRUFBRSxFQUFFLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUUsRUFBRSxHQUFFLEVBQUUsRUFBRSxHQUFFLEVBQUUsRUFBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFJLEdBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsT0FBTyxDQUFDLEVBQUUsUUFBUSxDQUFDLEVBQUUsT0FBTyxBQUFJLEVBQUUsV0FBTixFQUFlLE1BQU8sR0FBRSxBQUFNLEdBQUUsRUFBRSxPQUFPLE9BQWpCLElBQXdCLEdBQUUsS0FBSyxJQUFJLEdBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxPQUFPLEdBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxLQUFLLEdBQUUsRUFBRSxFQUFFLEdBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxPQUFPLEVBQUUsVUFBVyxHQUFFLEdBQUcsQUFBSSxFQUFFLE9BQU4sRUFBVyxDQUFDLEVBQUUsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQUFBSSxJQUFKLEVBQU0sUUFBUSxJQUFJLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsTUFBTSxBQUFRLElBQVIsTUFBVSxDQUFDLEVBQUUsRUFBRSxNQUFNLEdBQUcsSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLE1BQU8sR0FBRSxLQUFLLEtBQUssSUFBSSxDQUFFLEdBQUUsRUFBRSxPQUFVLE9BQUksSUFBSSxHQUFJLElBQUcsSUFBSSxHQUFHLENBQUMsRUFBRSxJQUFJLHlCQUF5QixFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsR0FBRyxBQUFJLElBQUcsSUFBUCxFQUFVLENBQUMsRUFBRSxJQUFJLDZCQUE2QixFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFHLElBQUksTUFBSyxJQUFJLEFBQUksRUFBRSxRQUFOLEVBQVksRUFBRSxNQUFNLFVBQVUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLElBQUksc0JBQXNCLEVBQUUsS0FBSyxHQUFHLEtBQUssQ0FBQyxFQUFFLEtBQUssR0FBRyxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFFLEtBQUssSUFBSSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxVQUFXLEdBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLEFBQUksSUFBSixFQUFNLFFBQVEsSUFBSSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsQUFBSSxLQUFJLEVBQUUsUUFBVixFQUFpQixDQUFDLEVBQUUsSUFBSSw2QkFBNkIsRUFBRSxLQUFLLEdBQUcsS0FBSyxDQUFDLEdBQUcsTUFBTSxFQUFFLE1BQU0sQ0FBQyxFQUFFLElBQUksMkJBQTJCLEVBQUUsS0FBSyxHQUFHLEtBQUssQ0FBQyxFQUFFLE1BQU8sR0FBRSxLQUFLLEtBQUssR0FBRyxFQUFFLEdBQUcsSUFBSSxFQUFFLE9BQVEsR0FBRSxHQUFHLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLE1BQU8sR0FBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQUFBSSxJQUFKLEVBQU0sUUFBUSxJQUFJLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxNQUFPLEdBQUUsS0FBSyxLQUFLLEdBQUcsSUFBSSxFQUFFLE9BQVEsR0FBRSxHQUFHLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssTUFBTyxHQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxBQUFJLElBQUosRUFBTSxRQUFRLElBQUksR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLE1BQU8sR0FBRSxLQUFLLE9BQU8sSUFBSSxFQUFFLEVBQUUsS0FBSyxHQUFHLEdBQUcsR0FBRyxJQUFJLEVBQUUsT0FBUSxHQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssTUFBTyxHQUFFLEdBQUcsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQUFBSSxJQUFKLEVBQU0sUUFBUSxJQUFJLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxNQUFPLEdBQUUsS0FBSyxVQUFVLEdBQUcsSUFBSSxFQUFFLE9BQVEsR0FBRSxHQUFHLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsS0FBTSxHQUFFLE1BQU8sR0FBRSxLQUFLLE1BQU0sTUFBTSxFQUFFLEtBQUssTUFBTyxHQUFFLEdBQUcsS0FBSyxFQUFFLE9BQVEsR0FBRyxHQUFFLEVBQUUsU0FBVSxHQUFFLEdBQUcsR0FBSSxHQUFFLE1BQU8sR0FBRSxFQUFFLEtBQUssVUFBVSxFQUFFLE9BQU8sRUFBRSxLQUFLLE9BQVEsR0FBRSxLQUFLLE1BQU0sR0FBSSxPQUFNLEVBQUUsS0FBSyxTQUFTLEdBQUcsRUFBRSxTQUFTLEVBQUUsS0FBSyxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJLEVBQUUsT0FBUSxHQUFFLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsUUFBUSxHQUFHLEVBQUUsUUFBUSxRQUFRLEVBQUUsT0FBTyxFQUFFLEVBQUUsS0FBSyxNQUFPLEdBQUUsR0FBRyxLQUFLLEVBQUUsTUFBTSxDQUFDLEdBQUcsQUFBSSxJQUFKLEVBQU0sUUFBUSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxHQUFHLEVBQUUsT0FBTyxPQUFRLEdBQUUsS0FBSyxNQUFNLE9BQU8sYUFBYSxDQUFDLEdBQUcsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksRUFBRSxPQUFRLEdBQUUsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxPQUFPLEtBQU0sR0FBRSxNQUFPLEdBQUUsS0FBSyxLQUFLLE1BQU0sRUFBRSxPQUFPLEVBQUUsRUFBRSxLQUFLLE1BQU8sR0FBRSxHQUFHLEtBQUssRUFBRSxNQUFNLENBQUMsR0FBRyxBQUFJLElBQUosRUFBTSxRQUFRLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLEdBQUcsRUFBRSxPQUFPLE9BQVEsR0FBRSxLQUFLLFNBQVMsT0FBTyxhQUFhLENBQUMsR0FBRyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxFQUFFLE9BQVEsR0FBRSxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLE9BQU8sS0FBTSxHQUFFLE1BQU8sR0FBRSxLQUFLLFFBQVEsTUFBTSxFQUFFLEtBQUssTUFBTyxHQUFFLEdBQUcsSUFBSSxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQUFBSSxJQUFKLEVBQU0sUUFBUSxJQUFJLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFLLE9BQU0sRUFBRSxPQUFPLENBQUMsRUFBRSxJQUFJLHNCQUFzQixFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLE1BQU8sR0FBRSxLQUFLLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEtBQUssS0FBSyxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFFLEtBQUssR0FBRyxVQUFXLElBQUcsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLEFBQUksSUFBSixFQUFNLFFBQVEsSUFBSSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLE9BQVEsSUFBRyxHQUFHLEFBQUksRUFBRSxXQUFOLEVBQWUsTUFBTyxHQUFFLFNBQVMsR0FBRSxFQUFFLFVBQVUsR0FBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFFLEtBQUssT0FBUSxJQUFHLEdBQUcsQUFBSSxJQUFKLEdBQU8sQUFBSSxJQUFKLEVBQU0sWUFBYSxJQUFHLEdBQUcsRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsR0FBRyxBQUFJLElBQUosRUFBTSxRQUFRLElBQUksR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUcsTUFBSyxRQUFTLEdBQUUsRUFBRSxLQUFLLEdBQUcsVUFBVyxHQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxLQUFLLEdBQUcsQUFBSSxJQUFKLEVBQU0sTUFBTSxLQUFLLEVBQUUsR0FBRyxFQUFFLFlBQWEsR0FBRSxFQUFFLEtBQUssR0FBRyxVQUFXLEdBQUUsRUFBRSxJQUFJLHFCQUFxQixFQUFFLEtBQUssR0FBRyxLQUFLLEVBQUUsR0FBRyxFQUFFLFVBQVcsSUFBRyxJQUFJLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsQUFBSSxJQUFKLEVBQU0sUUFBUSxJQUFJLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBSSxPQUFNLElBQUssS0FBSSxHQUFHLE9BQU8sQ0FBQyxFQUFFLElBQUksK0JBQStCLEVBQUUsS0FBSyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsT0FBTyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLEdBQUcsQUFBSSxJQUFKLEVBQU0sWUFBYSxJQUFHLEVBQUUsS0FBSyxPQUFRLElBQUcsR0FBRyxFQUFFLEVBQUUsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFJLEdBQUUsR0FBRyxHQUFFLEdBQUksR0FBRSxJQUFHLEFBQUksSUFBSixFQUFNLFFBQVEsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBRyxFQUFFLElBQUcsRUFBRSxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRSxLQUFLLEdBQUcsVUFBVyxJQUFHLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxBQUFJLElBQUosRUFBTSxRQUFRLElBQUksR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxJQUFLLElBQUcsR0FBRyxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsTUFBTSxFQUFHLElBQUcsR0FBRyxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsTUFBTSxFQUFHLElBQUcsR0FBRyxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLEdBQUcsRUFBRSxNQUFNLENBQUMsRUFBRSxJQUFJLHNDQUFzQyxFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxLQUFLLE9BQVEsSUFBRyxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLEdBQUcsQUFBSSxJQUFKLEVBQU0sUUFBUSxJQUFJLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSwyQkFBMkIsRUFBRSxLQUFLLEdBQUcsS0FBSyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsS0FBSyxPQUFRLElBQUcsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssR0FBRyxHQUFFLEVBQUUsUUFBUSxFQUFHLElBQUcsRUFBRSxTQUFTLE1BQU0sR0FBRyxJQUFJLEdBQUUsTUFBTSxFQUFFLENBQUcsS0FBRSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQUFBSSxJQUFKLEVBQU0sUUFBUSxJQUFJLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFFLEdBQUcsS0FBSyxHQUFFLEdBQUcsR0FBRSxFQUFFLEtBQUssRUFBRSxRQUFRLE9BQU0sQ0FBQyxHQUFHLEFBQUssS0FBTCxHQUFPLENBQUMsSUFBSSxFQUFFLEdBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEFBQUksSUFBSixFQUFNLFFBQVEsSUFBSSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFFLEdBQUcsR0FBRSxBQUFJLEVBQUUsT0FBTixFQUFXLENBQUMsRUFBRSxJQUFJLDRCQUE0QixFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEdBQUcsRUFBRSxFQUFHLEdBQUUsR0FBRyxLQUFLLEVBQUUsR0FBRyxDQUFDLFNBQVMsQUFBSyxLQUFMLEdBQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLEdBQUcsQUFBSSxJQUFKLEVBQU0sUUFBUSxJQUFJLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUcsR0FBRyxNQUFLLEtBQUksS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEdBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEFBQUksSUFBSixFQUFNLFFBQVEsSUFBSSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRSxFQUFFLEVBQUUsRUFBRSxHQUFJLEtBQUssTUFBSyxLQUFJLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxFQUFFLElBQUksNEJBQTRCLEVBQUUsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLEtBQUssRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEFBQUssRUFBRSxPQUFQLEdBQVksTUFBTSxHQUFHLEFBQUksRUFBRSxLQUFLLE9BQVgsRUFBZ0IsQ0FBQyxFQUFFLElBQUksdUNBQXVDLEVBQUUsS0FBSyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSw4QkFBOEIsRUFBRSxLQUFLLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSx3QkFBd0IsRUFBRSxLQUFLLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxLQUFLLEdBQUcsQUFBSSxJQUFKLEVBQU0sWUFBYSxJQUFHLEVBQUUsS0FBSyxPQUFRLElBQUcsR0FBRyxHQUFHLEdBQUcsS0FBSyxHQUFFLENBQUMsRUFBRSxTQUFTLEdBQUUsRUFBRSxVQUFVLEdBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsT0FBTyxHQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsS0FBSyxBQUFLLEVBQUUsT0FBUCxJQUFjLEdBQUUsS0FBSyxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsR0FBRSxFQUFFLFFBQVEsRUFBRyxJQUFHLEVBQUUsU0FBUyxNQUFNLEdBQUcsSUFBSSxHQUFFLE1BQU0sRUFBRSxDQUFHLEtBQUUsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLEFBQUksSUFBSixFQUFNLFFBQVEsSUFBSSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBRyxBQUFJLEtBQUksS0FBUixFQUFXLENBQUMsSUFBSSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFHLEdBQUUsRUFBRSxRQUFRLEdBQUksSUFBRyxJQUFHLEdBQUUsSUFBRyxJQUFJLFFBQU8sR0FBRyxJQUFJLEdBQUUsTUFBTSxFQUFFLENBQUUsSUFBRyxJQUFFLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxBQUFJLElBQUosRUFBTSxRQUFRLElBQUksR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUUsR0FBRyxHQUFFLEVBQUUsTUFBTSxFQUFDLENBQUMsR0FBRyxLQUFLLEdBQUUsR0FBRyxHQUFFLEVBQUUsTUFBTSxHQUFFLEVBQUUsT0FBTyxHQUFFLEFBQUksS0FBSixFQUFNLENBQUMsRUFBRSxLQUFLLEdBQUcsS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFFLENBQUMsRUFBRSxLQUFLLEdBQUcsRUFBRSxLQUFLLEdBQUcsS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFFLENBQUMsRUFBRSxJQUFJLDhCQUE4QixFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsRUFBRSxNQUFNLEdBQUcsR0FBRSxFQUFFLEtBQUssT0FBUSxJQUFHLEdBQUcsRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEFBQUksSUFBSixFQUFNLFFBQVEsSUFBSSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFHLElBQUcsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLE9BQVEsSUFBRyxLQUFLLEdBQUcsR0FBRSxFQUFFLFNBQVMsRUFBRyxJQUFHLEVBQUUsVUFBVSxNQUFNLEdBQUcsSUFBSSxHQUFFLE1BQU0sRUFBRSxDQUFHLEtBQUUsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLEFBQUksSUFBSixFQUFNLFFBQVEsSUFBSSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQUFBSSxLQUFJLEtBQVIsRUFBVyxDQUFDLElBQUksR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRyxHQUFFLEVBQUUsU0FBUyxHQUFJLElBQUcsSUFBRyxHQUFFLElBQUcsSUFBSSxRQUFPLEdBQUcsSUFBSSxHQUFFLE1BQU0sRUFBRSxDQUFFLElBQUcsSUFBRSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQUFBSSxJQUFKLEVBQU0sUUFBUSxJQUFJLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFFLEdBQUcsR0FBRSxFQUFFLE1BQU0sRUFBQyxDQUFDLEdBQUcsS0FBSyxHQUFFLEdBQUcsR0FBRSxFQUFFLE1BQU0sR0FBRSxHQUFHLEdBQUUsQ0FBQyxFQUFFLElBQUksd0JBQXdCLEVBQUUsS0FBSyxHQUFHLEtBQUssQ0FBQyxFQUFFLE9BQU8sR0FBRSxFQUFFLE1BQU0sR0FBRyxHQUFFLEVBQUUsS0FBSyxPQUFRLElBQUcsR0FBRyxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsQUFBSSxJQUFKLEVBQU0sUUFBUSxJQUFJLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUcsSUFBRyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsRUFBRSxJQUFJLGdDQUFnQyxFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsRUFBRSxLQUFLLE9BQVEsSUFBRyxHQUFHLEFBQUksS0FBSixFQUFNLFFBQVEsR0FBRyxFQUFFLEVBQUUsR0FBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLEdBQUksR0FBRSxFQUFFLE9BQU8sR0FBRyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsRUFBRSxJQUFJLGdDQUFnQyxFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsR0FBRSxFQUFFLEVBQUUsTUFBTyxJQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsUUFBUyxHQUFFLEVBQUUsUUFBUSxHQUFFLEVBQUUsTUFBTSxLQUFNLElBQUUsRUFBRSxHQUFFLEdBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFPLElBQUksR0FBRSxHQUFJLEdBQUUsSUFBRyxJQUFHLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxNQUFLLEdBQUUsTUFBSyxFQUFFLEdBQUcsQ0FBQyxBQUFJLEVBQUUsU0FBTixHQUFlLEdBQUUsS0FBSyxJQUFJLFVBQVcsSUFBRyxHQUFHLEFBQUksS0FBSixFQUFNLFFBQVEsRUFBRSxNQUFLLEVBQUUsT0FBTyxLQUFJLEVBQUUsS0FBSyxHQUFHLFVBQVcsSUFBRyxHQUFHLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxBQUFJLElBQUosRUFBTSxRQUFRLElBQUksR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLE9BQU8sRUFBRSxHQUFJLEdBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEVBQUUsSUFBSSx1QkFBdUIsRUFBRSxLQUFLLEdBQUcsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLE9BQVEsSUFBRyxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQUFBSSxJQUFKLEVBQU0sUUFBUSxJQUFJLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFLLFlBQVcsRUFBRSxPQUFPLENBQUMsRUFBRSxJQUFJLHlCQUF5QixFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssT0FBUSxJQUFHLEVBQUUsRUFBRSxZQUFhLElBQUcsRUFBRSxHQUFHLFlBQWEsSUFBRyxNQUFNLE9BQVEsWUFBVyxNQUFPLEdBQUUsTUFBTyxHQUFFLFNBQVMsR0FBRSxFQUFFLFVBQVUsR0FBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRyxHQUFFLE9BQU8sSUFBSSxFQUFFLFdBQVcsRUFBRSxLQUFLLElBQUssR0FBRSxLQUFLLElBQUksQUFBSSxJQUFKLEtBQVMsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxFQUFFLFNBQVMsRUFBRyxHQUFFLEtBQUssR0FBRyxJQUFLLEtBQUcsRUFBRSxTQUFTLEdBQUcsRUFBRSxVQUFVLEVBQUUsVUFBVSxHQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsTUFBTSxHQUFJLEdBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLFNBQVMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLFNBQVMsQ0FBQyxHQUFHLEVBQUUsVUFBVSxFQUFFLEtBQU0sR0FBRSxLQUFLLEdBQUcsR0FBSSxDQUFLLEVBQUUsT0FBUCxHQUFZLElBQUksR0FBSSxDQUFLLEVBQUUsT0FBUCxJQUFhLEFBQUssRUFBRSxPQUFQLEdBQVksSUFBSSxHQUFJLENBQUcsSUFBSCxHQUFNLEFBQUksSUFBSixHQUFPLEFBQUksSUFBSixJQUFRLElBQUksR0FBSSxHQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsV0FBVyxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxNQUFPLEdBQUUsR0FBSSxHQUFFLEVBQUUsTUFBTSxNQUFPLEdBQUUsUUFBUyxHQUFFLE9BQU8sTUFBTSxFQUFFLE1BQU0sS0FBSyxDQUFDLEVBQUUsRUFBRSxpQkFBaUIsU0FBUyxFQUFFLEVBQUUsQ0FBQyxHQUFJLEdBQUUsTUFBTyxJQUFHLEVBQUUsTUFBTSxBQUFJLEdBQUcsR0FBRSxFQUFFLE9BQU8sT0FBbEIsRUFBd0IsRUFBSSxJQUFFLEtBQUssR0FBRyxLQUFLLEdBQUcsR0FBRyxDQUFDLEVBQUUsRUFBRSxxQkFBcUIsU0FBUyxFQUFFLEVBQUUsQ0FBQyxHQUFJLEdBQUUsRUFBRSxFQUFFLE9BQU8sTUFBTyxJQUFHLEVBQUUsTUFBTSxBQUFLLEdBQUUsRUFBRSxPQUFPLE9BQWhCLEdBQXNCLEFBQUssRUFBRSxPQUFQLEdBQVksRUFBRSxBQUFLLEVBQUUsT0FBUCxJQUFhLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFHLEdBQUUsS0FBSyxHQUFHLElBQUssR0FBRSxTQUFTLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxZQUFZLG9DQUFvQyxFQUFFLENBQUMsa0JBQWtCLEdBQUcsWUFBWSxHQUFHLFVBQVUsR0FBRyxZQUFZLEdBQUcsYUFBYSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsU0FBUyxFQUFFLEVBQUUsRUFBRSxDQUFDLGFBQWEsR0FBSSxHQUFFLEVBQUUsaUJBQWlCLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLEtBQUssS0FBSyxNQUFNLE1BQU0sTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxRQUFRLFNBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLEdBQUUsRUFBRSxFQUFFLEdBQUksR0FBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUksR0FBRSxNQUFNLEVBQUUsRUFBRSxHQUFFLEtBQUssR0FBRSxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsR0FBRyxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLE1BQU0sSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsR0FBRyxBQUFJLEVBQUUsS0FBTixFQUFTLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBSSxHQUFFLEdBQUcsQUFBSSxJQUFKLEVBQU0sTUFBTyxHQUFFLEtBQUssU0FBUyxFQUFFLEtBQUssU0FBUyxFQUFFLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsR0FBRyxBQUFJLEVBQUUsS0FBTixFQUFTLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBSSxHQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLElBQUksR0FBRyxJQUFJLEVBQUcsSUFBRyxFQUFFLElBQUksRUFBRSxNQUFNLEdBQUcsR0FBRyxFQUFFLEdBQUksQ0FBSSxJQUFKLEdBQU8sQUFBSSxJQUFKLEdBQU8sTUFBTSxHQUFHLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksQUFBSSxFQUFFLEVBQUUsS0FBUixHQUFhLEdBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxHQUFHLEdBQUcsRUFBRSxBQUFJLElBQUosRUFBTyxHQUFFLEdBQUUsRUFBRSxJQUFJLEFBQUksSUFBSixFQUFPLEdBQUUsRUFBRSxJQUFHLElBQUksR0FBRSxFQUFFLElBQUcsSUFBSSxLQUFNLEdBQUUsRUFBRSxHQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUcsSUFBRSxHQUFJLEdBQUUsSUFBSSxFQUFFLEFBQUksSUFBSixHQUFPLElBQUksSUFBRyxBQUFJLElBQUosR0FBTyxJQUFJLEdBQUUsTUFBTyxHQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUcsR0FBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRyxHQUFFLEdBQUUsR0FBRSxFQUFFLElBQUksRUFBRSxHQUFFLEVBQUUsS0FBTSxHQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFHLElBQUcsSUFBSSxJQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLEVBQUUsQUFBSSxJQUFKLEdBQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxHQUFHLEFBQUksSUFBSixFQUFPLElBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsSUFBSSxBQUFHLEVBQUUsRUFBRSxJQUFQLEVBQVUsQ0FBQyxHQUFHLElBQUksRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFJLEdBQUUsS0FBSyxFQUFFLENBQUMsSUFBSSxBQUFJLEtBQUosR0FBUSxJQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBSSxHQUFFLEVBQUUsSUFBRyxFQUFFLEdBQUUsR0FBRyxDQUFHLEtBQUcsRUFBRSxFQUFFLE1BQUssSUFBSSxJQUFJLElBQUksRUFBRSxHQUFHLElBQUcsR0FBRyxFQUFFLEFBQUksSUFBSixHQUFPLElBQUksSUFBRyxBQUFJLElBQUosR0FBTyxJQUFJLEdBQUUsTUFBTyxHQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTyxBQUFJLEtBQUosR0FBUSxHQUFFLEVBQUUsR0FBRyxFQUFFLElBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLGtCQUFrQixFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsU0FBUyxFQUFFLEVBQUUsRUFBRSxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsRUFBRSxrQkFBa0IsRUFBRSxhQUFhLEVBQUUsR0FBRyxLQUFLLGFBQWEsS0FBSyxlQUFlLEtBQUssYUFBYSxLQUFLLHNCQUFzQixLQUFLLGVBQWUsS0FBSyxzQkFBc0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxTQUFTLEVBQUUsRUFBRSxFQUFFLENBQUMsYUFBYSxHQUFJLEdBQUUsRUFBRSxpQkFBaUIsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxDQUFDLE9BQVEsR0FBRSxFQUFFLE9BQU8sR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFJLEdBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBSSxPQUFNLEVBQUcsR0FBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBSSxHQUFFLEdBQUksT0FBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFJLEdBQUUsR0FBSSxPQUFNLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFJLEdBQUUsR0FBSSxPQUFNLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFJLEdBQUUsR0FBSSxPQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFJLEdBQUUsRUFBRSxHQUFFLEVBQUUsR0FBSSxPQUFNLENBQUMsRUFBRSxZQUFXLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEtBQUssWUFBWSxFQUFFLEtBQUssV0FBVyxFQUFFLEtBQUssV0FBVyxFQUFFLEtBQUssTUFBTSxFQUFFLEtBQUssV0FBVyxFQUFFLEtBQUssVUFBVSxHQUFHLEVBQUUsTUFBTSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsS0FBSyxTQUFTLEVBQUUsS0FBSyxTQUFTLEVBQUUsS0FBSyxVQUFVLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxNQUFPLEdBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFLLEtBQUksR0FBRyxDQUFDLFlBQVcsRUFBRSxFQUFFLENBQUMsRUFBRSxZQUFZLEVBQUUsV0FBVyxJQUFJLEVBQUUsRUFBRSxZQUFZLEVBQUUsV0FBVyxJQUFJLEVBQUUsR0FBRyxDQUFDLFdBQVcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxFQUFHLEdBQUUsUUFBUSxHQUFHLEVBQUUsU0FBUyxNQUFNLEdBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLE9BQU8sR0FBRyxFQUFFLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxHQUFJLEdBQUUsUUFBUSxHQUFHLEVBQUUsU0FBUyxNQUFNLEVBQUUsVUFBVSxFQUFFLENBQUMsV0FBVyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxZQUFXLEVBQUUsRUFBRSxDQUFDLE9BQVEsR0FBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxNQUFPLEtBQUksQ0FBQyxDQUFDLFlBQVcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFJLEdBQUUsRUFBRSxFQUFFLEdBQUksT0FBTSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsQUFBSSxJQUFKLEdBQVEsR0FBRSxFQUFFLEdBQUcsR0FBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxZQUFXLEVBQUUsQ0FBQyxHQUFJLEdBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQyxZQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQUUsU0FBUyxHQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLFVBQVcsR0FBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQyxZQUFXLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU8sR0FBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxZQUFXLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBUSxHQUFFLEVBQUUsS0FBSyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxVQUFXLEdBQUUsRUFBRSxVQUFVLEdBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxHQUFHLEVBQUUsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssSUFBSSxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxZQUFXLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEFBQUksRUFBRSxXQUFOLEVBQWUsS0FBSyxFQUFFLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsWUFBWSxFQUFFLE1BQU0sR0FBRyxJQUFJLEFBQUksSUFBSixFQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRyxHQUFFLEVBQUcsR0FBRSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxBQUFLLEdBQUUsRUFBRSxNQUFULEdBQWMsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxBQUFLLEdBQUUsRUFBRSxNQUFULEdBQWMsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsVUFBVSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVcsRUFBRSxFQUFFLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsVUFBVSxZQUFZLEVBQUUsRUFBRSxVQUFVLFVBQVUsRUFBRSxFQUFFLFVBQVUsTUFBTSxHQUFFLEdBQUcsSUFBSSxFQUFFLFNBQVMsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksQUFBSSxFQUFFLEVBQUUsS0FBUixFQUFZLEdBQUUsS0FBSyxFQUFFLEVBQUUsVUFBVSxHQUFFLEVBQUUsRUFBRSxNQUFNLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLFNBQVMsR0FBRyxFQUFFLEVBQUcsR0FBRSxFQUFFLEtBQUssRUFBRSxFQUFFLFVBQVUsR0FBRSxFQUFFLEVBQUUsR0FBRSxJQUFJLEVBQUUsRUFBRSxNQUFNLEdBQUcsRUFBRSxFQUFFLFVBQVUsR0FBSSxHQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsSUFBSSxJQUFJLEVBQUUsU0FBUyxHQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLEdBQUcsRUFBRSxLQUFLLEdBQUcsRUFBRSxLQUFLLEVBQUUsWUFBWSxHQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLFVBQVUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sR0FBSSxHQUFFLE1BQU0sSUFBSSxFQUFFLE1BQU0sR0FBRyxFQUFFLE1BQU0sR0FBRyxFQUFFLE1BQU0sSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsS0FBSyxHQUFHLElBQUksR0FBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxVQUFVLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxVQUFVLEVBQUUsS0FBSyxHQUFHLFNBQVMsR0FBRSxHQUFFLENBQUMsR0FBSSxJQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsU0FBUyxHQUFFLEdBQUUsU0FBUyxHQUFFLEdBQUUsVUFBVSxZQUFZLEdBQUUsR0FBRSxVQUFVLFVBQVUsR0FBRSxHQUFFLFVBQVUsV0FBVyxHQUFFLEdBQUUsVUFBVSxXQUFXLEdBQUUsR0FBRSxVQUFVLFdBQVcsR0FBRSxFQUFFLElBQUksR0FBRSxFQUFFLElBQUcsRUFBRSxLQUFJLEdBQUUsU0FBUyxJQUFHLEVBQUUsSUFBSSxHQUFFLEVBQUUsR0FBRSxLQUFLLEdBQUUsVUFBVSxHQUFHLEVBQUUsR0FBRSxHQUFFLFNBQVMsRUFBRSxHQUFFLEVBQUUsS0FBSSxHQUFHLElBQUUsR0FBRSxFQUFFLEdBQUUsRUFBRyxJQUFFLEdBQUUsS0FBSyxLQUFJLEdBQUcsR0FBRyxJQUFLLElBQUUsR0FBRSxNQUFLLEdBQUUsRUFBRSxHQUFFLEdBQUcsR0FBRSxHQUFFLElBQUksSUFBRSxTQUFTLE1BQUssR0FBRSxFQUFFLElBQUcsSUFBSSxJQUFFLEdBQUUsR0FBRSxLQUFJLEdBQUUsR0FBRSxFQUFFLElBQUcsR0FBRSxTQUFTLEdBQUcsSUFBRSxJQUFHLElBQUksSUFBRSxZQUFZLEdBQUcsSUFBRSxFQUFFLEdBQUUsR0FBRyxNQUFLLEdBQUcsQUFBSSxLQUFKLEVBQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxHQUFFLEdBQUUsRUFBRSxBQUFJLEdBQUUsU0FBUyxNQUFmLEdBQW1CLEtBQUksR0FBRSxTQUFTLE1BQUssR0FBRSxTQUFTLEdBQUUsSUFBSSxFQUFFLEdBQUUsU0FBUyxNQUFLLElBQUcsQ0FBQyxPQUFPLEVBQUUsSUFBRyxJQUFJLEdBQUUsR0FBRSxBQUFJLEtBQUosRUFBTSxLQUFJLElBQUksR0FBRSxHQUFFLFNBQVMsSUFBRyxBQUFJLEtBQUosR0FBTyxHQUFHLElBQUUsR0FBRSxLQUFLLEVBQUUsTUFBTSxJQUFFLEVBQUUsR0FBRSxLQUFLLElBQUksSUFBRSxTQUFVLElBQUUsR0FBRSxFQUFFLEdBQUUsSUFBSSxHQUFFLEVBQUUsSUFBRyxHQUFFLEVBQUUsR0FBRSxHQUFHLElBQUcsS0FBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRSxFQUFFLEdBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRSxFQUFFLElBQUksQUFBSSxJQUFKLEdBQVEsR0FBRSxJQUFJLEdBQUUsR0FBRyxFQUFFLEVBQUcsR0FBRSxHQUFHLEdBQUcsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFHLEdBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLElBQUksR0FBSSxHQUFFLEdBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEFBQUksSUFBSixFQUFPLEtBQUksR0FBRyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sR0FBRyxHQUFHLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxHQUFFLEtBQUssRUFBRyxHQUFFLElBQUksR0FBRyxJQUFJLEVBQUcsR0FBRSxFQUFFLEdBQUksR0FBRSxFQUFFLEdBQUcsQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBSSxHQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRSxFQUFFLElBQUksQUFBSSxJQUFKLEdBQVEsR0FBRSxJQUFJLEdBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUcsR0FBRSxHQUFHLEdBQUcsQ0FBRSxHQUFFLEVBQUUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEFBQUcsRUFBRSxHQUFMLEdBQVEsS0FBTSxBQUFJLEtBQUosRUFBTyxLQUFJLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRSxLQUFLLEVBQUcsR0FBRSxJQUFJLEdBQUcsSUFBSSxFQUFHLEdBQUUsRUFBRSxHQUFJLEdBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFJLEdBQUUsR0FBRyxXQUFXLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUcsSUFBRyxHQUFJLEdBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFFLENBQUMsRUFBRSxHQUFJLElBQUUsRUFBRSxDQUFDLEVBQUUsR0FBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLFNBQVMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsU0FBUyxTQUFTLEVBQUUsQ0FBQyxHQUFJLFdBQVUsQ0FBQyxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUksT0FBTSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsSUFBSSxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksSUFBSSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsS0FBSyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssS0FBSyxHQUFHLEtBQUssRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLEtBQUssR0FBRyxLQUFLLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxLQUFLLEdBQUcsS0FBSyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssSUFBSSxHQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFJLElBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUksSUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFFLEdBQUksSUFBRSxHQUFJLE9BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxHQUFJLEdBQUUsRUFBRSxVQUFVLENBQUMsRUFBRSxFQUFFLE9BQU8sR0FBSSxHQUFFLEVBQUUsVUFBVSxDQUFDLEVBQUUsRUFBRSxRQUFRLEdBQUksR0FBRSxFQUFFLFFBQVEsRUFBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxFQUFFLGdCQUFnQixTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFJLEdBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU8sQ0FBSSxFQUFFLEtBQUssWUFBWCxHQUF1QixHQUFFLEtBQUssVUFBVSxTQUFTLEVBQUUsQ0FBQyxHQUFJLEdBQUUsR0FBRSxXQUFXLElBQUksRUFBRSxFQUFFLEdBQUcsR0FBRyxJQUFJLE1BQUssRUFBRSxHQUFHLEVBQUUsSUFBRyxBQUFJLEVBQUUsVUFBVSxFQUFFLEtBQWxCLEVBQXFCLE1BQU8sR0FBRSxHQUFHLEFBQUksRUFBRSxVQUFVLE1BQWhCLEdBQXFCLEFBQUksRUFBRSxVQUFVLE1BQWhCLEdBQXFCLEFBQUksRUFBRSxVQUFVLE1BQWhCLEVBQW9CLE1BQU8sR0FBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsSUFBSSxHQUFHLEFBQUksRUFBRSxVQUFVLEVBQUUsS0FBbEIsRUFBcUIsTUFBTyxHQUFFLE1BQU8sRUFBQyxFQUFFLENBQUMsR0FBRyxHQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsR0FBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsR0FBSSxHQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLE9BQU8sUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxPQUFPLFFBQVEsRUFBRSxHQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEFBQUksRUFBRSxRQUFRLEVBQUUsRUFBRSxHQUFHLEtBQXJCLEVBQXdCLElBQUksQ0FBQyxNQUFPLEdBQUUsU0FBUyxFQUFHLEdBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFHLEdBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxJQUFJLEdBQUksR0FBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsQUFBSyxJQUFMLEdBQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQUFBSSxFQUFFLFdBQU4sR0FBZ0IsSUFBSSxFQUFHLEdBQUUsRUFBRSxFQUFHLEdBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUcsR0FBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLFNBQVMsRUFBRSxFQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUksSUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUUsRUFBRSxHQUFFLEdBQUUsS0FBSSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxJQUFHLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsVUFBVSxHQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxPQUFPLFNBQVMsRUFBRSxFQUFFLE9BQU8sU0FBUyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxTQUFTLEdBQUcsR0FBRSxDQUFDLEVBQUUsR0FBRyxHQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsVUFBVSxTQUFTLEVBQUUsRUFBRSxFQUFFLENBQUMsTUFBTyxHQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsRUFBRSxVQUFVLElBQUksRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxFQUFFLFNBQVMsR0FBRyxJQUFJLEVBQUUsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFVBQVUsSUFBSSxFQUFFLEVBQUUsV0FBVyxBQUFJLElBQUosRUFBTSxFQUFFLFVBQVUsRUFBRSxLQUFNLEdBQUUsVUFBVSxJQUFJLEVBQUUsVUFBVSxFQUFHLEdBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsWUFBWSxDQUFDLEVBQUUsRUFBRSxVQUFVLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsQUFBSyxFQUFFLFdBQVAsR0FBaUIsSUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsU0FBUyxHQUFHLEdBQUcsRUFBRSxVQUFXLEdBQUUsWUFBWSxFQUFFLFdBQVcsSUFBSSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxTQUFTLEVBQUUsRUFBRSxFQUFFLENBQUMsYUFBYSxFQUFFLFFBQVEsVUFBVSxDQUFDLEtBQUssTUFBTSxLQUFLLEtBQUssUUFBUSxFQUFFLEtBQUssU0FBUyxFQUFFLEtBQUssU0FBUyxFQUFFLEtBQUssT0FBTyxLQUFLLEtBQUssU0FBUyxFQUFFLEtBQUssVUFBVSxFQUFFLEtBQUssVUFBVSxFQUFFLEtBQUssSUFBSSxHQUFHLEtBQUssTUFBTSxLQUFLLEtBQUssVUFBVSxFQUFFLEtBQUssTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsU0FBUyxFQUFFLEVBQUUsRUFBRSxDQUFDLEFBQUMsVUFBUyxFQUFFLENBQUMsQUFBQyxVQUFTLEVBQUUsRUFBRSxDQUFDLGFBQWEsR0FBRyxDQUFDLEVBQUUsYUFBYSxDQUFDLEdBQUksR0FBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxTQUFTLEVBQUUsT0FBTyxnQkFBZ0IsT0FBTyxlQUFlLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLEFBQXFCLENBQUMsRUFBRSxTQUFTLEtBQUssRUFBRSxPQUFPLElBQS9DLG1CQUFpRCxTQUFTLEVBQUUsQ0FBQyxRQUFRLFNBQVMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsYUFBYSxDQUFDLEVBQUUsY0FBYyxDQUFDLEdBQUksR0FBRSxHQUFHLEVBQUUsRUFBRSxVQUFVLE1BQU8sR0FBRSxVQUFVLFVBQVUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLFlBQVksR0FBRyxHQUFHLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRyxHQUFFLGdCQUFnQixLQUFLLE9BQU8sRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLFVBQVUsRUFBRSxFQUFFLEVBQUUsRUFBRSxZQUFZLFlBQVksQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsWUFBWSxFQUFFLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxlQUFpQixJQUFFLEdBQUksaUJBQWdCLE1BQU0sVUFBVSxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxNQUFNLFlBQVksQ0FBQyxDQUFDLEdBQUcsR0FBRyxzQkFBdUIsR0FBRSxjQUFjLFFBQVEsRUFBRyxHQUFFLEVBQUUsZ0JBQWdCLFNBQVMsRUFBRSxDQUFDLEdBQUksR0FBRSxFQUFFLGNBQWMsUUFBUSxFQUFFLEVBQUUsbUJBQW1CLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLG1CQUFtQixLQUFLLEVBQUUsWUFBWSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxZQUFZLENBQUMsQ0FBQyxHQUFHLFNBQVMsRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsYUFBYSxTQUFTLEVBQUUsQ0FBQyxBQUFZLE1BQU8sSUFBbkIsWUFBdUIsR0FBRSxHQUFJLFVBQVMsR0FBRyxDQUFDLEdBQUcsT0FBUSxHQUFFLEdBQUksT0FBTSxVQUFVLE9BQU8sQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxJQUFJLEVBQUUsR0FBRyxVQUFVLEVBQUUsR0FBRyxHQUFJLEdBQUUsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLEVBQUUsTUFBTyxHQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxlQUFlLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxNQUFPLEdBQUUsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFJLEdBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQUFBQyxVQUFTLEVBQUUsQ0FBQyxHQUFJLEdBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxLQUFLLE9BQU8sRUFBRSxZQUFhLEdBQUUsRUFBRSxFQUFFLFVBQVcsR0FBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFVBQVcsR0FBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxVQUFXLEdBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEdBQUUsQ0FBQyxDQUFDLFFBQUMsQ0FBUSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUs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
|