@hagicode/cli 0.1.0-dev.50.1.674e23d → 0.1.0-dev.52.1.13cffe6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunks/{main-BHYpWMTH.js → main-BjVumWEX.js} +29 -29
- package/dist/cli.js +1 -1
- package/dist/main.js +1 -1
- package/package.json +1 -1
- package/resources/saga/manifest.json +1 -1
- package/skills/hagi/references/local-development.md +11 -6
- package/skills/hagi/references/saga.md +1 -1
- package/skills/hagi/references/validation.md +1 -1
- /package/resources/saga/{.gitignore → install/gitignore.template} +0 -0
|
@@ -23,7 +23,7 @@ Expecting one of '${p.join("', '")}'`);return this._lifeCycleHooks[d]?this._life
|
|
|
23
23
|
`),this.outputHelp({error:!0}));const p=m||{},g=p.exitCode||1,f=p.code||"commander.error";this._exit(g,f,d)}_parseOptionsEnv(){this.options.forEach(d=>{if(d.envVar&&d.envVar in r.env){const m=d.attributeName();(this.getOptionValue(m)===void 0||["default","config","env"].includes(this.getOptionValueSource(m)))&&(d.required||d.optional?this.emit(`optionEnv:${d.name()}`,r.env[d.envVar]):this.emit(`optionEnv:${d.name()}`))}})}_parseOptionsImplied(){const d=new A(this.options),m=p=>this.getOptionValue(p)!==void 0&&!["default","implied"].includes(this.getOptionValueSource(p));this.options.filter(p=>p.implied!==void 0&&m(p.attributeName())&&d.valueFromOption(this.getOptionValue(p.attributeName()),p)).forEach(p=>{Object.keys(p.implied).filter(g=>!m(g)).forEach(g=>{this.setOptionValueWithSource(g,p.implied[g],"implied")})})}missingArgument(d){const m=`error: missing required argument '${d}'`;this.error(m,{code:"commander.missingArgument"})}optionMissingArgument(d){const m=`error: option '${d.flags}' argument missing`;this.error(m,{code:"commander.optionMissingArgument"})}missingMandatoryOptionValue(d){const m=`error: required option '${d.flags}' not specified`;this.error(m,{code:"commander.missingMandatoryOptionValue"})}_conflictingOption(d,m){const p=V=>{const B=V.attributeName(),K=this.getOptionValue(B),O=this.options.find(L=>L.negate&&B===L.attributeName()),F=this.options.find(L=>!L.negate&&B===L.attributeName());return O&&(O.presetArg===void 0&&K===!1||O.presetArg!==void 0&&K===O.presetArg)?O:F||V},g=V=>{const B=p(V),K=B.attributeName();return this.getOptionValueSource(K)==="env"?`environment variable '${B.envVar}'`:`option '${B.flags}'`},f=`error: ${g(d)} cannot be used with ${g(m)}`;this.error(f,{code:"commander.conflictingOption"})}unknownOption(d){if(this._allowUnknownOption)return;let m="";if(d.startsWith("--")&&this._showSuggestionAfterError){let g=[],f=this;do{const V=f.createHelp().visibleOptions(f).filter(B=>B.long).map(B=>B.long);g=g.concat(V),f=f.parent}while(f&&!f._enablePositionalOptions);m=Z(d,g)}const p=`error: unknown option '${d}'${m}`;this.error(p,{code:"commander.unknownOption"})}_excessArguments(d){if(this._allowExcessArguments)return;const m=this.registeredArguments.length,p=m===1?"":"s",g=`error: too many arguments${this.parent?` for '${this.name()}'`:""}. Expected ${m} argument${p} but got ${d.length}.`;this.error(g,{code:"commander.excessArguments"})}unknownCommand(){const d=this.args[0];let m="";if(this._showSuggestionAfterError){const g=[];this.createHelp().visibleCommands(this).forEach(f=>{g.push(f.name()),f.alias()&&g.push(f.alias())}),m=Z(d,g)}const p=`error: unknown command '${d}'${m}`;this.error(p,{code:"commander.unknownCommand"})}version(d,m,p){if(d===void 0)return this._version;this._version=d,m=m||"-V, --version",p=p||"output the version number";const g=this.createOption(m,p);return this._versionOptionName=g.attributeName(),this._registerOption(g),this.on("option:"+g.name(),()=>{this._outputConfiguration.writeOut(`${d}
|
|
24
24
|
`),this._exit(0,"commander.version",d)}),this}description(d,m){return d===void 0&&m===void 0?this._description:(this._description=d,m&&(this._argsDescription=m),this)}summary(d){return d===void 0?this._summary:(this._summary=d,this)}alias(d){if(d===void 0)return this._aliases[0];let m=this;if(this.commands.length!==0&&this.commands[this.commands.length-1]._executableHandler&&(m=this.commands[this.commands.length-1]),d===m._name)throw new Error("Command alias can't be the same as its name");const p=this.parent?._findCommand(d);if(p){const g=[p.name()].concat(p.aliases()).join("|");throw new Error(`cannot add alias '${d}' to command '${this.name()}' as already have command '${g}'`)}return m._aliases.push(d),this}aliases(d){return d===void 0?this._aliases:(d.forEach(m=>this.alias(m)),this)}usage(d){if(d===void 0){if(this._usage)return this._usage;const m=this.registeredArguments.map(p=>s(p));return[].concat(this.options.length||this._helpOption!==null?"[options]":[],this.commands.length?"[command]":[],this.registeredArguments.length?m:[]).join(" ")}return this._usage=d,this}name(d){return d===void 0?this._name:(this._name=d,this)}helpGroup(d){return d===void 0?this._helpGroupHeading??"":(this._helpGroupHeading=d,this)}commandsGroup(d){return d===void 0?this._defaultCommandGroup??"":(this._defaultCommandGroup=d,this)}optionsGroup(d){return d===void 0?this._defaultOptionGroup??"":(this._defaultOptionGroup=d,this)}_initOptionGroup(d){this._defaultOptionGroup&&!d.helpGroupHeading&&d.helpGroup(this._defaultOptionGroup)}_initCommandGroup(d){this._defaultCommandGroup&&!d.helpGroup()&&d.helpGroup(this._defaultCommandGroup)}nameFromFilename(d){return this._name=o.basename(d,o.extname(d)),this}executableDir(d){return d===void 0?this._executableDir:(this._executableDir=d,this)}helpInformation(d){const m=this.createHelp(),p=this._getOutputContext(d);m.prepareContext({error:p.error,helpWidth:p.helpWidth,outputHasColors:p.hasColors});const g=m.formatHelp(this,m);return p.hasColors?g:this._outputConfiguration.stripColor(g)}_getOutputContext(d){d=d||{};const m=!!d.error;let p,g,f;return m?(p=B=>this._outputConfiguration.writeErr(B),g=this._outputConfiguration.getErrHasColors(),f=this._outputConfiguration.getErrHelpWidth()):(p=B=>this._outputConfiguration.writeOut(B),g=this._outputConfiguration.getOutHasColors(),f=this._outputConfiguration.getOutHelpWidth()),{error:m,write:B=>(g||(B=this._outputConfiguration.stripColor(B)),p(B)),hasColors:g,helpWidth:f}}outputHelp(d){let m;typeof d=="function"&&(m=d,d=void 0);const p=this._getOutputContext(d),g={error:p.error,write:p.write,command:this};this._getCommandAndAncestors().reverse().forEach(V=>V.emit("beforeAllHelp",g)),this.emit("beforeHelp",g);let f=this.helpInformation({error:p.error});if(m&&(f=m(f),typeof f!="string"&&!Buffer.isBuffer(f)))throw new Error("outputHelp callback must return a string or a Buffer");p.write(f),this._getHelpOption()?.long&&this.emit(this._getHelpOption().long),this.emit("afterHelp",g),this._getCommandAndAncestors().forEach(V=>V.emit("afterAllHelp",g))}helpOption(d,m){return typeof d=="boolean"?(d?(this._helpOption===null&&(this._helpOption=void 0),this._defaultOptionGroup&&this._initOptionGroup(this._getHelpOption())):this._helpOption=null,this):(this._helpOption=this.createOption(d??"-h, --help",m??"display help for command"),(d||m)&&this._initOptionGroup(this._helpOption),this)}_getHelpOption(){return this._helpOption===void 0&&this.helpOption(void 0,void 0),this._helpOption}addHelpOption(d){return this._helpOption=d,this._initOptionGroup(d),this}help(d){this.outputHelp(d);let m=Number(r.exitCode??0);m===0&&d&&typeof d!="function"&&d.error&&(m=1),this._exit(m,"commander.help","(outputHelp)")}addHelpText(d,m){const p=["beforeAll","before","after","afterAll"];if(!p.includes(d))throw new Error(`Unexpected value for position to addHelpText.
|
|
25
25
|
Expecting one of '${p.join("', '")}'`);const g=`${d}Help`;return this.on(g,f=>{let V;typeof m=="function"?V=m({error:f.error,command:f.command}):V=m,V&&f.write(`${V}
|
|
26
|
-
`)}),this}_outputHelpIfRequested(d){const m=this._getHelpOption();m&&d.find(p=>m.is(p))&&(this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)"))}};function S(J){return J.map(d=>{if(!d.startsWith("--inspect"))return d;let m,p="127.0.0.1",g="9229",f;return(f=d.match(/^(--inspect(-brk)?)$/))!==null?m=f[1]:(f=d.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null?(m=f[1],/^\d+$/.test(f[3])?g=f[3]:p=f[3]):(f=d.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null&&(m=f[1],p=f[3],g=f[4]),m&&g!=="0"?`${m}=${p}:${parseInt(g)+1}`:d})}function X(){if(r.env.NO_COLOR||r.env.FORCE_COLOR==="0"||r.env.FORCE_COLOR==="false")return!1;if(r.env.FORCE_COLOR||r.env.CLICOLOR_FORCE!==void 0)return!0}e.Command=G,e.useColor=X})),Dl=ot((e=>{var{Argument:t}=Zo(),{Command:n}=Ol(),{CommanderError:o,InvalidArgumentError:a}=Rn(),{Help:r}=ri(),{Option:i}=ii();e.program=new n,e.createCommand=s=>new n(s),e.createOption=(s,l)=>new i(s,l),e.createArgument=(s,l)=>new t(s,l),e.Command=n,e.Option=i,e.Argument=t,e.Help=r,e.CommanderError=o,e.InvalidArgumentError=a,e.InvalidOptionArgumentError=a})),_l=at(Dl(),1),{program:
|
|
26
|
+
`)}),this}_outputHelpIfRequested(d){const m=this._getHelpOption();m&&d.find(p=>m.is(p))&&(this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)"))}};function S(J){return J.map(d=>{if(!d.startsWith("--inspect"))return d;let m,p="127.0.0.1",g="9229",f;return(f=d.match(/^(--inspect(-brk)?)$/))!==null?m=f[1]:(f=d.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null?(m=f[1],/^\d+$/.test(f[3])?g=f[3]:p=f[3]):(f=d.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null&&(m=f[1],p=f[3],g=f[4]),m&&g!=="0"?`${m}=${p}:${parseInt(g)+1}`:d})}function X(){if(r.env.NO_COLOR||r.env.FORCE_COLOR==="0"||r.env.FORCE_COLOR==="false")return!1;if(r.env.FORCE_COLOR||r.env.CLICOLOR_FORCE!==void 0)return!0}e.Command=G,e.useColor=X})),Dl=ot((e=>{var{Argument:t}=Zo(),{Command:n}=Ol(),{CommanderError:o,InvalidArgumentError:a}=Rn(),{Help:r}=ri(),{Option:i}=ii();e.program=new n,e.createCommand=s=>new n(s),e.createOption=(s,l)=>new i(s,l),e.createArgument=(s,l)=>new t(s,l),e.Command=n,e.Option=i,e.Argument=t,e.Help=r,e.CommanderError=o,e.InvalidArgumentError=a,e.InvalidOptionArgumentError=a})),_l=at(Dl(),1),{program:mZ,createCommand:hZ,createArgument:bZ,createOption:gZ,CommanderError:$l,InvalidArgumentError:pZ,InvalidOptionArgumentError:AZ,Command:Pl,Argument:fZ,Option:Ve,Help:ZZ}=_l.default;function li(e){return e.replace(/\s+/g," ").trim()}function ie(e,t){const n=t.map(r=>e.map(i=>li(i.value(r)))),o=e.map((r,i)=>{const s=n.map(l=>l[i].length);return Math.max(r.header.length,...s)}),a=r=>r.map((i,s)=>i.padEnd(o[s])).join(" ").trimEnd();return[a(e.map(r=>r.header)),a(o.map(r=>"-".repeat(r))),...n.map(a)].join(`
|
|
27
27
|
`)}function q(e){const t=e.filter(([,o])=>o!==void 0&&o!==""),n=Math.max(...t.map(([o])=>o.length));return`${t.map(([o,a])=>`${o.padEnd(n)} ${li(a??"")}`).join(`
|
|
28
28
|
`)}
|
|
29
29
|
`}function ql(e){const t=Math.max(0,Math.round(e/1e3)),n=Math.floor(t/3600),o=Math.floor(t%3600/60);return n>0?`${n}h ${o}m`:o>0?`${o}m ${t%60}s`:`${t}s`}function ut(e,t){if(!e)return;if(!t)return e;const n=Date.parse(e)-Date.parse(t);return Number.isNaN(n)?e:`${e} (${n>=0?"in":"ago"} ${ql(Math.abs(n))})`}function Dt(e,t){if(!e)return;const n=ut(e.earliestAt,t),o=ut(e.latestAt,t);return n&&o?`between ${n} and ${o}`:n?`from ${n}`:o?`by ${o}`:void 0}function ci(e){return e.holder?`${e.holder.ownerId}${e.holder.label?` (${e.holder.label})`:""}`:void 0}function va(e){return`--lock-id ${e.lockId} --owner ${e.ownerId}`}function pt(e,t="status"){const n=e.serverTime,o=`Lock ${e.lockId}: ${e.status} as ${e.ownerId} (myTurn: ${e.myTurn?"yes":"no"})`;if(e.status==="Holding"){const a=[o,q([["Epoch",String(e.epoch)],["Valid until",ut(e.leaseExpiresAt,n)?`${ut(e.leaseExpiresAt,n)} unless a heartbeat renews it`:void 0],["Hard cap",ut(e.maxHoldExpiresAt,n)?`${ut(e.maxHoldExpiresAt,n)}; the lock is taken back then even with heartbeats`:void 0],["Check in",Dt(e.checkInWindow,n)],["Queue length",e.queueLength>0?String(e.queueLength):void 0]]).trimEnd(),`Next: start the heartbeat watcher before any work: hagi agent lock heartbeat ${va(e)} --epoch ${e.epoch}`];return t==="acquire"&&a.push("If you acquired this lock before, that first acquire is still valid: same epoch, the hard cap did not restart and the lease was not refreshed. Only the heartbeat renews the lease."),`${a.join(`
|
|
@@ -55,7 +55,7 @@ ${ie([{header:"LOCK",value:t=>t.lockId},{header:"HOLDER",value:t=>t.holderOwnerI
|
|
|
55
55
|
`):n.message,errorCode:Et(n.body,"errorCode")??n.code,correlationId:Et(n.body,"correlationId"),details:n.body}}return e.code===E.Canceled?{exitCode:P.UNKNOWN,message:"The request was cancelled."}:Yr(e.rawMessage,t)}return e instanceof Error?Oo(e.message)?Yr(e.message,t):{exitCode:P.UNKNOWN,message:e.message}:{exitCode:P.UNKNOWN,message:String(e)}}function km(e){const t=Mo(e)?.errors;return Array.isArray(t)?t.flatMap(n=>{const o=Et(n,"field"),a=Et(n,"message");return o&&a?[` - ${o}: ${a}`]:[]}):[]}function Um(e){const t=Mo(e)?.fieldErrors;return Array.isArray(t)?t.flatMap(n=>{const o=Et(n,"field"),a=Et(n,"message");return o&&a?[` - ${o}: ${a}`]:[]}):[]}function vs(e,t={}){if(t.json)return`${JSON.stringify({error:{message:e.message,status:e.status,exitCode:e.exitCode,errorCode:e.errorCode,correlationId:e.correlationId,details:e.details}},null,2)}
|
|
56
56
|
`;const n=[e.status?`status=${e.status}`:void 0,e.errorCode?`errorCode=${e.errorCode}`:void 0,e.correlationId?`correlationId=${e.correlationId}`:void 0].filter(Boolean),o=n.length>0?` (${n.join(", ")})`:"";return[`${e.message}${o}`,...km(e.details)].join(`
|
|
57
57
|
`)+`
|
|
58
|
-
`}var Jm="--base-url",xm="HAGI_API_BASE_URL";function Ee(e){const t=e?.trim();return t||void 0}function Do(e=process.env){return(0,R.join)(Ee(e.XDG_CONFIG_HOME)??(0,R.join)((0,Tl.homedir)(),".config"),"hagi","config.json")}function Ws(e){const t=Do(e);let n;try{n=(0,Y.readFileSync)(t,"utf8")}catch(a){if(a.code==="ENOENT")return;throw new N(`Cannot read CLI config file ${t}: ${a instanceof Error?a.message:String(a)}`)}let o;try{o=JSON.parse(n)}catch{throw new N(`CLI config file ${t} is not valid JSON.`)}return o&&typeof o=="object"&&!Array.isArray(o)?o:{}}function Km(e=process.env){const t=Ws(e)?.baseUrl;return typeof t=="string"?Ee(t):void 0}function zm(e=process.env){const t=Ws(e)?.steer;if(t===void 0||typeof t=="boolean")return t;throw new N(`CLI config file ${Do(e)} has a "steer" value that is not true or false.`)}function Lm(e={},t=process.env){const n=Ee(e.baseUrl)??Ee(t.HAGI_API_BASE_URL)??Km(t);if(!n)throw new N(`No backend base URL is configured. Set ${Jm} <url>, the ${xm} environment variable, or "baseUrl" in ${Do(t)}.`);return{baseUrl:n,token:Ee(e.token)??Ee(t.HAGI_API_TOKEN),lang:Ee(e.lang)??Ee(t.HAGI_API_LANG)}}var jt;function jm(e={},t=process.env){return jt=Lm(e,t),jt}function ys(){if(!jt)throw new N("The backend connection is not configured. Resolve the API runtime before calling the backend.");return jt}function Hm(){return Ee(jt?.baseUrl)}var se=oe("CiFoYWdpY29kZS9wcm9qZWN0L3YxL3Byb2plY3QucHJvdG8SE2hhZ2ljb2RlLnByb2plY3QudjEiSwoUQ3JlYXRlUHJvamVjdFJlcXVlc3QSMwoEYm9keRgBIAEoCzIlLmhhZ2ljb2RlLnByb2plY3QudjEuQ3JlYXRlUHJvamVjdER0byJIChVDcmVhdGVQcm9qZWN0UmVzcG9uc2USLwoGcmVzdWx0GAEgASgLMh8uaGFnaWNvZGUucHJvamVjdC52MS5Qcm9qZWN0RHRvIhoKGENyZWF0ZURlbW9Qcm9qZWN0UmVxdWVzdCJMChlDcmVhdGVEZW1vUHJvamVjdFJlc3BvbnNlEi8KBnJlc3VsdBgBIAEoCzIfLmhhZ2ljb2RlLnByb2plY3QudjEuUHJvamVjdER0byJXChRVcGRhdGVQcm9qZWN0UmVxdWVzdBIKCgJpZBgBIAEoCRIzCgRib2R5GAIgASgLMiUuaGFnaWNvZGUucHJvamVjdC52MS5VcGRhdGVQcm9qZWN0RHRvIkgKFVVwZGF0ZVByb2plY3RSZXNwb25zZRIvCgZyZXN1bHQYASABKAsyHy5oYWdpY29kZS5wcm9qZWN0LnYxLlByb2plY3REdG8iIgoURGVsZXRlUHJvamVjdFJlcXVlc3QSCgoCaWQYASABKAkiFwoVRGVsZXRlUHJvamVjdFJlc3BvbnNlIkUKHkdldFByb2plY3RTdGFuZGFyZFdvcmRzUmVxdWVzdBISCgpwcm9qZWN0X2lkGAEgASgJEg8KB3JlZnJlc2gYAiABKAgiZwofR2V0UHJvamVjdFN0YW5kYXJkV29yZHNSZXNwb25zZRJECgZyZXN1bHQYASABKAsyNC5oYWdpY29kZS5wcm9qZWN0LnYxLlByb2plY3RTdGFuZGFyZFdvcmRzUmVzcG9uc2VEdG8iPgooR2V0UHJvamVjdFN0YW5kYXJkV29yZHNNYW5hZ2VtZW50UmVxdWVzdBISCgpwcm9qZWN0X2lkGAEgASgJInsKKUdldFByb2plY3RTdGFuZGFyZFdvcmRzTWFuYWdlbWVudFJlc3BvbnNlEk4KBnJlc3VsdBgBIAEoCzI+LmhhZ2ljb2RlLnByb2plY3QudjEuUHJvamVjdFN0YW5kYXJkV29yZHNNYW5hZ2VtZW50RG9jdW1lbnREdG8ikAEKKVNhdmVQcm9qZWN0U3RhbmRhcmRXb3Jkc01hbmFnZW1lbnRSZXF1ZXN0EhIKCnByb2plY3RfaWQYASABKAkSTwoEYm9keRgCIAEoCzJBLmhhZ2ljb2RlLnByb2plY3QudjEuU2F2ZVByb2plY3RTdGFuZGFyZFdvcmRzTWFuYWdlbWVudFJlcXVlc3REdG8ifAoqU2F2ZVByb2plY3RTdGFuZGFyZFdvcmRzTWFuYWdlbWVudFJlc3BvbnNlEk4KBnJlc3VsdBgBIAEoCzI+LmhhZ2ljb2RlLnByb2plY3QudjEuUHJvamVjdFN0YW5kYXJkV29yZHNNYW5hZ2VtZW50RG9jdW1lbnREdG8iMwodR2V0TW9ub1NwZWNzTWFuYWdlbWVudFJlcXVlc3QSEgoKcHJvamVjdF9pZBgBIAEoCSJdCh5HZXRNb25vU3BlY3NNYW5hZ2VtZW50UmVzcG9uc2USOwoGcmVzdWx0GAEgASgLMisuaGFnaWNvZGUucHJvamVjdC52MS5Nb25vU3BlY3NNYW5hZ2VtZW50RHRvIiwKFlJlbG9hZE1vbm9TcGVjc1JlcXVlc3QSEgoKcHJvamVjdF9pZBgBIAEoCSJWChdSZWxvYWRNb25vU3BlY3NSZXNwb25zZRI7CgZyZXN1bHQYASABKAsyKy5oYWdpY29kZS5wcm9qZWN0LnYxLk1vbm9TcGVjc01hbmFnZW1lbnREdG8igAEKIUNsb25lTW9ub1NwZWNzUmVwb3NpdG9yaWVzUmVxdWVzdBISCgpwcm9qZWN0X2lkGAEgASgJEkcKBGJvZHkYAiABKAsyOS5oYWdpY29kZS5wcm9qZWN0LnYxLk1vbm9TcGVjc0Nsb25lUmVwb3NpdG9yaWVzUmVxdWVzdER0byJwCiJDbG9uZU1vbm9TcGVjc1JlcG9zaXRvcmllc1Jlc3BvbnNlEkoKBnJlc3VsdBgBIAEoCzI6LmhhZ2ljb2RlLnByb2plY3QudjEuTW9ub1NwZWNzQ2xvbmVSZXBvc2l0b3JpZXNSZXNwb25zZUR0byJpCihSZW1vdmVNb25vU3BlY3NSZXBvc2l0b3J5Q2hlY2tvdXRSZXF1ZXN0EhIKCnByb2plY3RfaWQYASABKAkSEQoEcGF0aBgCIAEoCUgAiAEBEg0KBWZvcmNlGAMgASgIQgcKBV9wYXRoInQKKVJlbW92ZU1vbm9TcGVjc1JlcG9zaXRvcnlDaGVja291dFJlc3BvbnNlEkcKBnJlc3VsdBgBIAEoCzI3LmhhZ2ljb2RlLnByb2plY3QudjEuTW9ub1NwZWNzUmVtb3ZlQ2hlY2tvdXRSZXNwb25zZUR0byIwChpJbml0aWFsaXplTW9ub1NwZWNzUmVxdWVzdBISCgpwcm9qZWN0X2lkGAEgASgJIloKG0luaXRpYWxpemVNb25vU3BlY3NSZXNwb25zZRI7CgZyZXN1bHQYASABKAsyKy5oYWdpY29kZS5wcm9qZWN0LnYxLk1vbm9TcGVjc01hbmFnZW1lbnREdG8ifgogVXBkYXRlTW9ub1NwZWNzTWFuYWdlbWVudFJlcXVlc3QSEgoKcHJvamVjdF9pZBgBIAEoCRJGCgRib2R5GAIgASgLMjguaGFnaWNvZGUucHJvamVjdC52MS5VcGRhdGVNb25vU3BlY3NNYW5hZ2VtZW50UmVxdWVzdER0byJgCiFVcGRhdGVNb25vU3BlY3NNYW5hZ2VtZW50UmVzcG9uc2USOwoGcmVzdWx0GAEgASgLMisuaGFnaWNvZGUucHJvamVjdC52MS5Nb25vU3BlY3NNYW5hZ2VtZW50RHRvImcKH0dldFByb2plY3REZXNpZ25Eb2N1bWVudFJlcXVlc3QSEgoKcHJvamVjdF9pZBgBIAEoCRIcCg9yZXBvc2l0b3J5X3BhdGgYAiABKAlIAIgBAUISChBfcmVwb3NpdG9yeV9wYXRoImEKIEdldFByb2plY3REZXNpZ25Eb2N1bWVudFJlc3BvbnNlEj0KBnJlc3VsdBgBIAEoCzItLmhhZ2ljb2RlLnByb2plY3QudjEuUHJvamVjdERlc2lnbkRvY3VtZW50RHRvIoABCiBTYXZlUHJvamVjdERlc2lnbkRvY3VtZW50UmVxdWVzdBISCgpwcm9qZWN0X2lkGAEgASgJEkgKBGJvZHkYAiABKAsyOi5oYWdpY29kZS5wcm9qZWN0LnYxLlVwZGF0ZVByb2plY3REZXNpZ25Eb2N1bWVudFJlcXVlc3REdG8ibAohU2F2ZVByb2plY3REZXNpZ25Eb2N1bWVudFJlc3BvbnNlEkcKBnJlc3VsdBgBIAEoCzI3LmhhZ2ljb2RlLnByb2plY3QudjEuU2F2ZVByb2plY3REZXNpZ25Eb2N1bWVudFJlc3VsdER0byI2CiBHZXRQcm9qZWN0RGVzaWduU2l0ZUluZGV4UmVxdWVzdBISCgpwcm9qZWN0X2lkGAEgASgJImMKIUdldFByb2plY3REZXNpZ25TaXRlSW5kZXhSZXNwb25zZRI+CgZyZXN1bHQYASABKAsyLi5oYWdpY29kZS5wcm9qZWN0LnYxLlByb2plY3REZXNpZ25TaXRlSW5kZXhEdG8iRwojR2V0UHJvamVjdERlc2lnblNpdGVEb2N1bWVudFJlcXVlc3QSEgoKcHJvamVjdF9pZBgBIAEoCRIMCgRzbHVnGAIgASgJImkKJEdldFByb2plY3REZXNpZ25TaXRlRG9jdW1lbnRSZXNwb25zZRJBCgZyZXN1bHQYASABKAsyMS5oYWdpY29kZS5wcm9qZWN0LnYxLlByb2plY3REZXNpZ25TaXRlRG9jdW1lbnREdG8ieQocVmFsaWRhdGVQcm9qZWN0QnJhbmNoUmVxdWVzdBISCgpwcm9qZWN0X2lkGAEgASgJEhMKC2JyYW5jaF9uYW1lGAIgASgJEhwKD3JlcG9zaXRvcnlfcGF0aBgDIAEoCUgAiAEBQhIKEF9yZXBvc2l0b3J5X3BhdGgiYQodVmFsaWRhdGVQcm9qZWN0QnJhbmNoUmVzcG9uc2USQAoGcmVzdWx0GAEgASgLMjAuaGFnaWNvZGUucHJvamVjdC52MS5CcmFuY2hWYWxpZGF0aW9uUmVzcG9uc2VEdG8iKgoaVmFsaWRhdGVQcm9qZWN0UGF0aFJlcXVlc3QSDAoEcGF0aBgBIAEoCSJdChtWYWxpZGF0ZVByb2plY3RQYXRoUmVzcG9uc2USPgoGcmVzdWx0GAEgASgLMi4uaGFnaWNvZGUucHJvamVjdC52MS5QYXRoVmFsaWRhdGlvblJlc3BvbnNlRHRvIlcKGlNjYW5HaXRSZXBvc2l0b3JpZXNSZXF1ZXN0EjkKBGJvZHkYASABKAsyKy5oYWdpY29kZS5wcm9qZWN0LnYxLlNjYW5HaXRSZXBvc1JlcXVlc3REdG8iWwobU2NhbkdpdFJlcG9zaXRvcmllc1Jlc3BvbnNlEjwKBnJlc3VsdBgBIAEoCzIsLmhhZ2ljb2RlLnByb2plY3QudjEuU2NhbkdpdFJlcG9zUmVzcG9uc2VEdG8iYAoeVmFsaWRhdGVNb25vU3BlY3NDb25maWdSZXF1ZXN0Ej4KBGJvZHkYASABKAsyMC5oYWdpY29kZS5wcm9qZWN0LnYxLlZhbGlkYXRlTW9ub1NwZWNzUmVxdWVzdER0byJkCh9WYWxpZGF0ZU1vbm9TcGVjc0NvbmZpZ1Jlc3BvbnNlEkEKBnJlc3VsdBgBIAEoCzIxLmhhZ2ljb2RlLnByb2plY3QudjEuVmFsaWRhdGVNb25vU3BlY3NSZXNwb25zZUR0byItChdHZXRQcm9qZWN0VmF1bHRzUmVxdWVzdBISCgpwcm9qZWN0X2lkGAEgASgJIlUKGEdldFByb2plY3RWYXVsdHNSZXNwb25zZRI5CgZyZXN1bHQYASABKAsyKS5oYWdpY29kZS5wcm9qZWN0LnYxLlZhdWx0TGlzdFJlc3BvbnNlRHRvIqABCh5PcGVuUHJvamVjdEluQ29kZVNlcnZlclJlcXVlc3QSEgoKcHJvamVjdF9pZBgBIAEoCRInChpjdXJyZW50X2ludGVyZmFjZV9sYW5ndWFnZRgCIAEoCUgAiAEBEhUKCHN1Yl9wYXRoGAMgASgJSAGIAQFCHQobX2N1cnJlbnRfaW50ZXJmYWNlX2xhbmd1YWdlQgsKCV9zdWJfcGF0aCJlCh9PcGVuUHJvamVjdEluQ29kZVNlcnZlclJlc3BvbnNlEkIKBnJlc3VsdBgBIAEoCzIyLmhhZ2ljb2RlLnByb2plY3QudjEuVnNDb2RlU2VydmVyTGF1bmNoUmVzcG9uc2VEdG8iNQofR2V0UHJvamVjdEdpdFdhdGNoU3RhdHVzUmVxdWVzdBISCgpwcm9qZWN0X2lkGAEgASgJIl4KIEdldFByb2plY3RHaXRXYXRjaFN0YXR1c1Jlc3BvbnNlEjoKBnJlc3VsdBgBIAEoCzIqLmhhZ2ljb2RlLnByb2plY3QudjEuUHJvamVjdEdpdFdhdGNoU3RhdHVzIkAKDlN1YlJlcG9JbmZvRHRvEgwKBG5hbWUYASABKAkSDAoEcGF0aBgCIAEoCRISCgpoYXNfYWdlbnRzGAMgASgIIvEDCgpQcm9qZWN0RHRvEgoKAmlkGAEgASgJEgwKBG5hbWUYAiABKAkSDAoEcGF0aBgDIAEoCRIYCgtkZXNjcmlwdGlvbhgEIAEoCUgAiAEBEjEKDWNyZWF0aW9uX3RpbWUYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEjoKFmxhc3RfbW9kaWZpY2F0aW9uX3RpbWUYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEhUKDWlzX21vbm9fc3BlY3MYByABKAgSHwoSbW9ub19zcGVjc192ZXJzaW9uGAggASgJSAGIAQESJgoZbW9ub19zcGVjc19yZXBvX2RpcmVjdG9yeRgJIAEoCUgCiAEBEisKHm1vbm9fc3BlY3NfY29tbWl0X3doZW5fYXJjaGl2ZRgKIAEoCEgDiAEBEj0KEHN1Yl9yZXBvc2l0b3JpZXMYCyADKAsyIy5oYWdpY29kZS5wcm9qZWN0LnYxLlN1YlJlcG9JbmZvRHRvQg4KDF9kZXNjcmlwdGlvbkIVChNfbW9ub19zcGVjc192ZXJzaW9uQhwKGl9tb25vX3NwZWNzX3JlcG9fZGlyZWN0b3J5QiEKH19tb25vX3NwZWNzX2NvbW1pdF93aGVuX2FyY2hpdmUiWAoQQ3JlYXRlUHJvamVjdER0bxIMCgRuYW1lGAEgASgJEgwKBHBhdGgYAiABKAkSGAoLZGVzY3JpcHRpb24YAyABKAlIAIgBAUIOCgxfZGVzY3JpcHRpb24iWAoQVXBkYXRlUHJvamVjdER0bxIMCgRuYW1lGAEgASgJEgwKBHBhdGgYAiABKAkSGAoLZGVzY3JpcHRpb24YAyABKAlIAIgBAUIOCgxfZGVzY3JpcHRpb24i5gIKG1Byb2plY3RTdGFuZGFyZFdvcmRHcm91cER0bxIKCgJpZBgBIAEoCRINCgVsYWJlbBgCIAEoCRIWCglwYXJlbnRfaWQYAyABKAlIAIgBARIPCgdlbmFibGVkGAQgASgIEg0KBW9yZGVyGAUgASgFEhMKC3NvdXJjZV90eXBlGAYgASgJEhwKFHNvdXJjZV9yZWxhdGl2ZV9wYXRoGAcgASgJEgwKBHRhZ3MYCCADKAkSFQoIbGFuZ3VhZ2UYCSABKAlIAYgBARJQCghtZXRhZGF0YRgKIAMoCzI+LmhhZ2ljb2RlLnByb2plY3QudjEuUHJvamVjdFN0YW5kYXJkV29yZEdyb3VwRHRvLk1ldGFkYXRhRW50cnkaLwoNTWV0YWRhdGFFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBQgwKCl9wYXJlbnRfaWRCCwoJX2xhbmd1YWdlIu0CChxQcm9qZWN0U3RhbmRhcmRXb3JkUGhyYXNlRHRvEhAKCGdyb3VwX2lkGAEgASgJEgsKA2tleRgCIAEoCRINCgVsYWJlbBgDIAEoCRIWCg5zdWJtaXR0ZWRfdGV4dBgEIAEoCRIPCgdlbmFibGVkGAUgASgIEg0KBW9yZGVyGAYgASgFEhMKC3NvdXJjZV90eXBlGAcgASgJEhwKFHNvdXJjZV9yZWxhdGl2ZV9wYXRoGAggASgJEgwKBHRhZ3MYCSADKAkSFQoIbGFuZ3VhZ2UYCiABKAlIAIgBARJRCghtZXRhZGF0YRgLIAMoCzI/LmhhZ2ljb2RlLnByb2plY3QudjEuUHJvamVjdFN0YW5kYXJkV29yZFBocmFzZUR0by5NZXRhZGF0YUVudHJ5Gi8KDU1ldGFkYXRhRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4AUILCglfbGFuZ3VhZ2UinAEKHFByb2plY3RTdGFuZGFyZFdvcmRTb3VyY2VEdG8SDAoEdHlwZRgBIAEoCRIVCg1yZWxhdGl2ZV9wYXRoGAIgASgJEhEKCWZ1bGxfcGF0aBgDIAEoCRIOCgZleGlzdHMYBCABKAgSNAoQbGFzdF9tb2RpZmllZF9hdBgFIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAiygEKIVByb2plY3RTdGFuZGFyZFdvcmRzRGlhZ25vc3RpY0R0bxIQCghzZXZlcml0eRgBIAEoCRIMCgRjb2RlGAIgASgJEg8KB21lc3NhZ2UYAyABKAkSGAoLc291cmNlX3R5cGUYBCABKAlIAIgBARIaCg1yZWxhdGl2ZV9wYXRoGAUgASgJSAGIAQESEgoFZmllbGQYBiABKAlIAogBAUIOCgxfc291cmNlX3R5cGVCEAoOX3JlbGF0aXZlX3BhdGhCCAoGX2ZpZWxkIr0DCh9Qcm9qZWN0U3RhbmRhcmRXb3Jkc1Jlc3BvbnNlRHRvEhYKDnNjaGVtYV92ZXJzaW9uGAEgASgJEhIKCnByb2plY3RfaWQYAiABKAkSFAoMcHJvamVjdF9yb290GAMgASgJEi0KCWxvYWRlZF9hdBgEIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASEgoKZnJvbV9jYWNoZRgFIAEoCBJCCgdzb3VyY2VzGAYgAygLMjEuaGFnaWNvZGUucHJvamVjdC52MS5Qcm9qZWN0U3RhbmRhcmRXb3JkU291cmNlRHRvEkAKBmdyb3VwcxgHIAMoCzIwLmhhZ2ljb2RlLnByb2plY3QudjEuUHJvamVjdFN0YW5kYXJkV29yZEdyb3VwRHRvEkIKB3BocmFzZXMYCCADKAsyMS5oYWdpY29kZS5wcm9qZWN0LnYxLlByb2plY3RTdGFuZGFyZFdvcmRQaHJhc2VEdG8SSwoLZGlhZ25vc3RpY3MYCSADKAsyNi5oYWdpY29kZS5wcm9qZWN0LnYxLlByb2plY3RTdGFuZGFyZFdvcmRzRGlhZ25vc3RpY0R0byK6AgolUHJvamVjdFN0YW5kYXJkV29yZHNFZGl0YWJsZVBocmFzZUR0bxILCgNrZXkYASABKAkSDQoFbGFiZWwYAiABKAkSFgoOc3VibWl0dGVkX3RleHQYAyABKAkSDwoHZW5hYmxlZBgEIAEoCBINCgVvcmRlchgFIAEoBRIMCgR0YWdzGAYgAygJEhUKCGxhbmd1YWdlGAcgASgJSACIAQESWgoIbWV0YWRhdGEYCCADKAsySC5oYWdpY29kZS5wcm9qZWN0LnYxLlByb2plY3RTdGFuZGFyZFdvcmRzRWRpdGFibGVQaHJhc2VEdG8uTWV0YWRhdGFFbnRyeRovCg1NZXRhZGF0YUVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAFCCwoJX2xhbmd1YWdlIpIDCiRQcm9qZWN0U3RhbmRhcmRXb3Jkc0VkaXRhYmxlR3JvdXBEdG8SCgoCaWQYASABKAkSDQoFbGFiZWwYAiABKAkSFgoJcGFyZW50X2lkGAMgASgJSACIAQESDwoHZW5hYmxlZBgEIAEoCBINCgVvcmRlchgFIAEoBRIMCgR0YWdzGAYgAygJEhUKCGxhbmd1YWdlGAcgASgJSAGIAQESWQoIbWV0YWRhdGEYCCADKAsyRy5oYWdpY29kZS5wcm9qZWN0LnYxLlByb2plY3RTdGFuZGFyZFdvcmRzRWRpdGFibGVHcm91cER0by5NZXRhZGF0YUVudHJ5EksKB3BocmFzZXMYCSADKAsyOi5oYWdpY29kZS5wcm9qZWN0LnYxLlByb2plY3RTdGFuZGFyZFdvcmRzRWRpdGFibGVQaHJhc2VEdG8aLwoNTWV0YWRhdGFFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBQgwKCl9wYXJlbnRfaWRCCwoJX2xhbmd1YWdlIsQBCiVQcm9qZWN0U3RhbmRhcmRXb3Jkc092ZXJsYXlTdW1tYXJ5RHRvEhMKC3NvdXJjZV90eXBlGAEgASgJEhUKDXJlbGF0aXZlX3BhdGgYAiABKAkSDgoGZXhpc3RzGAMgASgIEhMKC2dyb3VwX2NvdW50GAQgASgFEhQKDHBocmFzZV9jb3VudBgFIAEoBRI0ChBsYXN0X21vZGlmaWVkX2F0GAYgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCLWAQokUHJvamVjdFN0YW5kYXJkV29yZHNTb3VyY2VWZXJzaW9uRHRvEhYKDnNjaGVtYV92ZXJzaW9uGAEgASgJEhMKC3NvdXJjZV90eXBlGAIgASgJEhUKDXJlbGF0aXZlX3BhdGgYAyABKAkSEQoJZnVsbF9wYXRoGAQgASgJEg4KBmV4aXN0cxgFIAEoCBI0ChBsYXN0X21vZGlmaWVkX2F0GAYgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIRCglzaWduYXR1cmUYByABKAkilgEKIVByb2plY3RTdGFuZGFyZFdvcmRzU3RhdGlzdGljc0R0bxITCgtncm91cF9jb3VudBgBIAEoBRIUCgxwaHJhc2VfY291bnQYAiABKAUSHAoUZGlzYWJsZWRfZW50cnlfY291bnQYAyABKAUSEQoJdGFnX2NvdW50GAQgASgFEhUKDXNvdXJjZV9zdGF0dXMYBSABKAki8wQKKVByb2plY3RTdGFuZGFyZFdvcmRzTWFuYWdlbWVudERvY3VtZW50RHRvEhYKDnNjaGVtYV92ZXJzaW9uGAEgASgJEhIKCnByb2plY3RfaWQYAiABKAkSFAoMcHJvamVjdF9yb290GAMgASgJEi0KCWxvYWRlZF9hdBgEIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASSQoGZ3JvdXBzGAUgAygLMjkuaGFnaWNvZGUucHJvamVjdC52MS5Qcm9qZWN0U3RhbmRhcmRXb3Jkc0VkaXRhYmxlR3JvdXBEdG8SQgoHc291cmNlcxgGIAMoCzIxLmhhZ2ljb2RlLnByb2plY3QudjEuUHJvamVjdFN0YW5kYXJkV29yZFNvdXJjZUR0bxJaChZ1c2VyX292ZXJsYXlfc3VtbWFyaWVzGAcgAygLMjouaGFnaWNvZGUucHJvamVjdC52MS5Qcm9qZWN0U3RhbmRhcmRXb3Jkc092ZXJsYXlTdW1tYXJ5RHRvEkoKCnN0YXRpc3RpY3MYCCABKAsyNi5oYWdpY29kZS5wcm9qZWN0LnYxLlByb2plY3RTdGFuZGFyZFdvcmRzU3RhdGlzdGljc0R0bxJRCg5zb3VyY2VfdmVyc2lvbhgJIAEoCzI5LmhhZ2ljb2RlLnByb2plY3QudjEuUHJvamVjdFN0YW5kYXJkV29yZHNTb3VyY2VWZXJzaW9uRHRvEksKC2RpYWdub3N0aWNzGAogAygLMjYuaGFnaWNvZGUucHJvamVjdC52MS5Qcm9qZWN0U3RhbmRhcmRXb3Jkc0RpYWdub3N0aWNEdG8i5AEKLFNhdmVQcm9qZWN0U3RhbmRhcmRXb3Jkc01hbmFnZW1lbnRSZXF1ZXN0RHRvEhYKDnNjaGVtYV92ZXJzaW9uGAEgASgJEkkKBmdyb3VwcxgCIAMoCzI5LmhhZ2ljb2RlLnByb2plY3QudjEuUHJvamVjdFN0YW5kYXJkV29yZHNFZGl0YWJsZUdyb3VwRHRvElEKDnNvdXJjZV92ZXJzaW9uGAMgASgLMjkuaGFnaWNvZGUucHJvamVjdC52MS5Qcm9qZWN0U3RhbmRhcmRXb3Jkc1NvdXJjZVZlcnNpb25EdG8iVQojTW9ub1NwZWNzTWFuYWdlbWVudE1ldGFkYXRhRW50cnlEdG8SCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJEhIKCnZhbHVlX2tpbmQYAyABKAki5gQKIE1vbm9TcGVjc01hbmFnZW1lbnRSZXBvc2l0b3J5RHRvEgwKBG5hbWUYASABKAkSEQoEY29kZRgCIAEoCUgAiAEBEgwKBHBhdGgYAyABKAkSEAoDdXJsGAQgASgJSAGIAQESGQoMZGlzcGxheV9uYW1lGAUgASgJSAKIAQESEQoEdHlwZRgGIAEoCUgDiAEBEhEKBGljb24YByABKAlIBIgBARIQCghvcHRpb25hbBgIIAEoCBIMCgR0YWdzGAkgAygJEkoKCG1ldGFkYXRhGAogAygLMjguaGFnaWNvZGUucHJvamVjdC52MS5Nb25vU3BlY3NNYW5hZ2VtZW50TWV0YWRhdGFFbnRyeUR0bxIZChFpc192YWxpZF9naXRfcmVwbxgLIAEoCBITCgZicmFuY2gYDCABKAlIBYgBARIfChdoYXNfdW5jb21taXR0ZWRfY2hhbmdlcxgNIAEoCBIdChV1bnB1c2hlZF9jb21taXRfY291bnQYDiABKAUSGwoTaGFzX3RyYWNraW5nX2JyYW5jaBgPIAEoCBI1Cg90cmFja2luZ19icmFuY2gYECABKAsyHC5nb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWUSEwoLYWhlYWRfY291bnQYESABKAUSFAoMYmVoaW5kX2NvdW50GBIgASgFEhcKCnN5bmNfc3RhdGUYEyABKAlIBogBAUIHCgVfY29kZUIGCgRfdXJsQg8KDV9kaXNwbGF5X25hbWVCBwoFX3R5cGVCBwoFX2ljb25CCQoHX2JyYW5jaEINCgtfc3luY19zdGF0ZSKiAgoWTW9ub1NwZWNzTWFuYWdlbWVudER0bxIPCgd2ZXJzaW9uGAEgASgJEhYKDnJlcG9fZGlyZWN0b3J5GAIgASgJEhMKC2NvbmZpZ19wYXRoGAMgASgJEhsKE2NvbW1pdF93aGVuX2FyY2hpdmUYBCABKAgSFAoMeWFtbF9wcmV2aWV3GAUgASgJEksKDHJlcG9zaXRvcmllcxgGIAMoCzI1LmhhZ2ljb2RlLnByb2plY3QudjEuTW9ub1NwZWNzTWFuYWdlbWVudFJlcG9zaXRvcnlEdG8SSgoIbWV0YWRhdGEYByADKAsyOC5oYWdpY29kZS5wcm9qZWN0LnYxLk1vbm9TcGVjc01hbmFnZW1lbnRNZXRhZGF0YUVudHJ5RHRvImMKIU1vbm9TcGVjc0Nsb25lUmVwb3NpdG9yeVJlc3VsdER0bxIMCgRwYXRoGAEgASgJEg4KBnN0YXR1cxgCIAEoCRIUCgdtZXNzYWdlGAMgASgJSACIAQFCCgoIX21lc3NhZ2UicAolTW9ub1NwZWNzQ2xvbmVSZXBvc2l0b3JpZXNSZXNwb25zZUR0bxJHCgdyZXN1bHRzGAEgAygLMjYuaGFnaWNvZGUucHJvamVjdC52MS5Nb25vU3BlY3NDbG9uZVJlcG9zaXRvcnlSZXN1bHREdG8iTwokTW9ub1NwZWNzQ2xvbmVSZXBvc2l0b3JpZXNSZXF1ZXN0RHRvEg0KBXBhdGhzGAEgAygJEhgKEGluY2x1ZGVfb3B0aW9uYWwYAiABKAgiZQoiTW9ub1NwZWNzUmVtb3ZlQ2hlY2tvdXRSZXNwb25zZUR0bxIMCgRwYXRoGAEgASgJEg8KB3JlbW92ZWQYAiABKAgSFAoHbWVzc2FnZRgDIAEoCUgAiAEBQgoKCF9tZXNzYWdlIoQCCiNVcGRhdGVNb25vU3BlY3NNYW5hZ2VtZW50UmVxdWVzdER0bxIPCgd2ZXJzaW9uGAEgASgJEhYKDnJlcG9fZGlyZWN0b3J5GAIgASgJEhsKE2NvbW1pdF93aGVuX2FyY2hpdmUYAyABKAgSSwoMcmVwb3NpdG9yaWVzGAQgAygLMjUuaGFnaWNvZGUucHJvamVjdC52MS5Nb25vU3BlY3NNYW5hZ2VtZW50UmVwb3NpdG9yeUR0bxJKCghtZXRhZGF0YRgFIAMoCzI4LmhhZ2ljb2RlLnByb2plY3QudjEuTW9ub1NwZWNzTWFuYWdlbWVudE1ldGFkYXRhRW50cnlEdG8inQEKGFByb2plY3REZXNpZ25Eb2N1bWVudER0bxIMCgRwYXRoGAEgASgJEhwKD3JlcG9zaXRvcnlfcGF0aBgCIAEoCUgAiAEBEg8KB2NvbnRlbnQYAyABKAkSDgoGZXhpc3RzGAQgASgIEhQKB3ZlcnNpb24YBSABKAlIAYgBAUISChBfcmVwb3NpdG9yeV9wYXRoQgoKCF92ZXJzaW9uIoYBCiJTYXZlUHJvamVjdERlc2lnbkRvY3VtZW50UmVzdWx0RHRvEgwKBHBhdGgYASABKAkSHAoPcmVwb3NpdG9yeV9wYXRoGAIgASgJSACIAQESDwoHY3JlYXRlZBgDIAEoCBIPCgd2ZXJzaW9uGAQgASgJQhIKEF9yZXBvc2l0b3J5X3BhdGgingEKJVVwZGF0ZVByb2plY3REZXNpZ25Eb2N1bWVudFJlcXVlc3REdG8SHAoPcmVwb3NpdG9yeV9wYXRoGAEgASgJSACIAQESDwoHY29udGVudBgCIAEoCRIdChBleHBlY3RlZF92ZXJzaW9uGAMgASgJSAGIAQFCEgoQX3JlcG9zaXRvcnlfcGF0aEITChFfZXhwZWN0ZWRfdmVyc2lvbiLAAQoeUHJvamVjdERlc2lnblNpdGVJbmRleEVudHJ5RHRvEgwKBHNsdWcYASABKAkSDQoFdGl0bGUYAiABKAkSDwoHc3VtbWFyeRgDIAEoCRISCgpkZXRhaWxfdXJsGAQgASgJEhsKE2Rlc2lnbl9kb3dubG9hZF91cmwYBSABKAkSHwoXcHJldmlld19saWdodF9pbWFnZV91cmwYBiABKAkSHgoWcHJldmlld19kYXJrX2ltYWdlX3VybBgHIAEoCSK+AgoZUHJvamVjdERlc2lnblNpdGVJbmRleER0bxITCgtjYXRhbG9nX3VybBgBIAEoCRIVCg1zb3VyY2Vfc3RhdHVzGAIgASgJEhMKC2VudHJ5X2NvdW50GAMgASgFEkQKB2VudHJpZXMYBCADKAsyMy5oYWdpY29kZS5wcm9qZWN0LnYxLlByb2plY3REZXNpZ25TaXRlSW5kZXhFbnRyeUR0bxIaCg1jYWNoZV9jb250cm9sGAUgASgJSACIAQESEgoFZV90YWcYBiABKAlIAYgBARIaCg1sYXN0X21vZGlmaWVkGAcgASgJSAKIAQESFAoHZXhwaXJlcxgIIAEoCUgDiAEBQhAKDl9jYWNoZV9jb250cm9sQggKBl9lX3RhZ0IQCg5fbGFzdF9tb2RpZmllZEIKCghfZXhwaXJlcyKZAgocUHJvamVjdERlc2lnblNpdGVEb2N1bWVudER0bxIMCgRzbHVnGAEgASgJEg0KBXRpdGxlGAIgASgJEg8KB2NvbnRlbnQYAyABKAkSEgoKZGV0YWlsX3VybBgEIAEoCRIbChNkZXNpZ25fZG93bmxvYWRfdXJsGAUgASgJEhoKDWNhY2hlX2NvbnRyb2wYBiABKAlIAIgBARISCgVlX3RhZxgHIAEoCUgBiAEBEhoKDWxhc3RfbW9kaWZpZWQYCCABKAlIAogBARIUCgdleHBpcmVzGAkgASgJSAOIAQFCEAoOX2NhY2hlX2NvbnRyb2xCCAoGX2VfdGFnQhAKDl9sYXN0X21vZGlmaWVkQgoKCF9leHBpcmVzImoKG0JyYW5jaFZhbGlkYXRpb25SZXNwb25zZUR0bxIOCgZleGlzdHMYASABKAgSEAoIaXNfdmFsaWQYAiABKAgSFAoMaXNfYXZhaWxhYmxlGAMgASgIEhMKC2JyYW5jaF9uYW1lGAQgASgJIogDChlQYXRoVmFsaWRhdGlvblJlc3BvbnNlRHRvEhAKCGlzX3ZhbGlkGAEgASgIEg4KBnN0YXR1cxgCIAEoCRIPCgdtZXNzYWdlGAMgASgJEhYKCXBhdGhfdHlwZRgEIAEoCUgAiAEBEiIKFWhhc19tb25vX3NwZWNzX2NvbmZpZxgFIAEoCEgBiAEBEiMKFm1vbm9fc3BlY3NfY29uZmlnX3BhdGgYBiABKAlIAogBARImChltb25vX3NwZWNzX3JlcG9fZGlyZWN0b3J5GAcgASgJSAOIAQESKwoebW9ub19zcGVjc19jb21taXRfd2hlbl9hcmNoaXZlGAggASgISASIAQFCDAoKX3BhdGhfdHlwZUIYChZfaGFzX21vbm9fc3BlY3NfY29uZmlnQhkKF19tb25vX3NwZWNzX2NvbmZpZ19wYXRoQhwKGl9tb25vX3NwZWNzX3JlcG9fZGlyZWN0b3J5QiEKH19tb25vX3NwZWNzX2NvbW1pdF93aGVuX2FyY2hpdmUiVgoKR2l0UmVwb0R0bxIMCgRuYW1lGAEgASgJEgwKBHBhdGgYAiABKAkSFQoNcmVsYXRpdmVfcGF0aBgDIAEoCRIVCg1pc19tb25vX3NwZWNzGAQgASgIIqQBChdTY2FuR2l0UmVwb3NSZXNwb25zZUR0bxI1CgxyZXBvc2l0b3JpZXMYASADKAsyHy5oYWdpY29kZS5wcm9qZWN0LnYxLkdpdFJlcG9EdG8SEwoLdG90YWxfY291bnQYAiABKAUSDwoHc3VjY2VzcxgDIAEoCBIaCg1lcnJvcl9tZXNzYWdlGAQgASgJSACIAQFCEAoOX2Vycm9yX21lc3NhZ2UijwEKFlNjYW5HaXRSZXBvc1JlcXVlc3REdG8SEQoJcm9vdF9wYXRoGAEgASgJEhEKCW1heF9kZXB0aBgCIAEoBRIWCg5leGNsdWRlX2hpZGRlbhgDIAEoCBIdChVtYXhfZm9sZGVyc19wZXJfbGV2ZWwYBCABKAUSGAoQZXhjbHVkZV9wYXR0ZXJucxgFIAMoCSJEChlNb25vU3BlY3NDb25maWdEZXRhaWxzRHRvEg8KB3ZlcnNpb24YASABKAkSFgoOcmVwb19kaXJlY3RvcnkYAiABKAkikgEKHFZhbGlkYXRlTW9ub1NwZWNzUmVzcG9uc2VEdG8SEAoIaXNfdmFsaWQYASABKAgSPgoGY29uZmlnGAIgASgLMi4uaGFnaWNvZGUucHJvamVjdC52MS5Nb25vU3BlY3NDb25maWdEZXRhaWxzRHRvEhAKCHdhcm5pbmdzGAMgAygJEg4KBmVycm9ycxgEIAMoCSIzChtWYWxpZGF0ZU1vbm9TcGVjc1JlcXVlc3REdG8SFAoMcHJvamVjdF9wYXRoGAEgASgJInwKG1ZhdWx0Qm9vdHN0cmFwRGlhZ25vc3RpY0R0bxIQCghzZXZlcml0eRgBIAEoCRIMCgRjb2RlGAIgASgJEg8KB21lc3NhZ2UYAyABKAkSGgoNcmVsYXRpdmVfcGF0aBgEIAEoCUgAiAEBQhAKDl9yZWxhdGl2ZV9wYXRoIt8CCgxWYXVsdEl0ZW1EdG8SCgoCaWQYASABKAkSDAoEbmFtZRgCIAEoCRIMCgR0eXBlGAMgASgJEhUKDXBoeXNpY2FsX3BhdGgYBCABKAkSFAoHZ2l0X3VybBgFIAEoCUgAiAEBEjIKDmNyZWF0ZWRfYXRfdXRjGAYgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIyCg51cGRhdGVkX2F0X3V0YxgHIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASTwoVYm9vdHN0cmFwX2RpYWdub3N0aWNzGAggAygLMjAuaGFnaWNvZGUucHJvamVjdC52MS5WYXVsdEJvb3RzdHJhcERpYWdub3N0aWNEdG8SDQoFc2NvcGUYCSABKAkSFwoKcHJvamVjdF9pZBgKIAEoCUgBiAEBQgoKCF9naXRfdXJsQg0KC19wcm9qZWN0X2lkIn4KFFZhdWx0TGlzdFJlc3BvbnNlRHRvEjQKEGdlbmVyYXRlZF9hdF91dGMYASABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEjAKBWl0ZW1zGAIgAygLMiEuaGFnaWNvZGUucHJvamVjdC52MS5WYXVsdEl0ZW1EdG8inwQKHFZzQ29kZVNlcnZlclJ1bnRpbWVTdGF0dXNEdG8SDgoGc3RhdHVzGAEgASgJEhsKE2FjdGl2ZV9jYXBhYmlsaXRpZXMYAiADKAkSEQoEaG9zdBgDIAEoCUgAiAEBEhwKD2NvbmZpZ3VyZWRfcG9ydBgEIAEoBUgBiAEBEhsKDmVmZmVjdGl2ZV9wb3J0GAUgASgFSAKIAQESFQoIYmFzZV91cmwYBiABKAlIA4gBARIWCglhdXRoX21vZGUYByABKAlIBIgBARITCgZzb3VyY2UYCCABKAlIBYgBARIVCg1zb3VyY2VfbG9ja2VkGAkgASgIEhIKCmhhc19zZWNyZXQYCiABKAgSGgoNc2VjcmV0X3NvdXJjZRgLIAEoCUgGiAEBEjkKFWxhc3RfYXR0ZW1wdGVkX2F0X3V0YxgMIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASFwoKbGFzdF9lcnJvchgNIAEoCUgHiAEBEhsKDnN0YXR1c19tZXNzYWdlGA4gASgJSAiIAQFCBwoFX2hvc3RCEgoQX2NvbmZpZ3VyZWRfcG9ydEIRCg9fZWZmZWN0aXZlX3BvcnRCCwoJX2Jhc2VfdXJsQgwKCl9hdXRoX21vZGVCCQoHX3NvdXJjZUIQCg5fc2VjcmV0X3NvdXJjZUINCgtfbGFzdF9lcnJvckIRCg9fc3RhdHVzX21lc3NhZ2UinAIKHVZzQ29kZVNlcnZlckxhdW5jaFJlc3BvbnNlRHRvEhIKCmxhdW5jaF91cmwYASABKAkSHQoQY29ubmVjdGlvbl90b2tlbhgCIAEoCUgAiAEBEhEKCW9wZW5fbW9kZRgDIAEoCRJCCgdydW50aW1lGAQgASgLMjEuaGFnaWNvZGUucHJvamVjdC52MS5Wc0NvZGVTZXJ2ZXJSdW50aW1lU3RhdHVzRHRvEhgKC2luc3RhbmNlX2lkGAUgASgJSAGIAQESMgoOZXhwaXJlc19hdF91dGMYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQhMKEV9jb25uZWN0aW9uX3Rva2VuQg4KDF9pbnN0YW5jZV9pZCKXAgoVUHJvamVjdEdpdFdhdGNoU3RhdHVzEh4KFm1vbml0b3JlZF9yZXBvc2l0b3JpZXMYASADKAkSNAoQbGFzdF9zY2FuX2F0X3V0YxgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASNAoQbmV4dF9zY2FuX2F0X3V0YxgDIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASGAoQcmVwb3NpdG9yeV9jb3VudBgEIAEoBRISCgppc19ydW5uaW5nGAUgASgIEiIKGm1heF9tb25pdG9yZWRfcmVwb3NpdG9yaWVzGAYgASgFEiAKGGdpdF9hdXRvX3JlZnJlc2hfZW5hYmxlZBgHIAEoCDL1GAoOUHJvamVjdFNlcnZpY2USZgoNQ3JlYXRlUHJvamVjdBIpLmhhZ2ljb2RlLnByb2plY3QudjEuQ3JlYXRlUHJvamVjdFJlcXVlc3QaKi5oYWdpY29kZS5wcm9qZWN0LnYxLkNyZWF0ZVByb2plY3RSZXNwb25zZRJyChFDcmVhdGVEZW1vUHJvamVjdBItLmhhZ2ljb2RlLnByb2plY3QudjEuQ3JlYXRlRGVtb1Byb2plY3RSZXF1ZXN0Gi4uaGFnaWNvZGUucHJvamVjdC52MS5DcmVhdGVEZW1vUHJvamVjdFJlc3BvbnNlEmYKDVVwZGF0ZVByb2plY3QSKS5oYWdpY29kZS5wcm9qZWN0LnYxLlVwZGF0ZVByb2plY3RSZXF1ZXN0GiouaGFnaWNvZGUucHJvamVjdC52MS5VcGRhdGVQcm9qZWN0UmVzcG9uc2USZgoNRGVsZXRlUHJvamVjdBIpLmhhZ2ljb2RlLnByb2plY3QudjEuRGVsZXRlUHJvamVjdFJlcXVlc3QaKi5oYWdpY29kZS5wcm9qZWN0LnYxLkRlbGV0ZVByb2plY3RSZXNwb25zZRKEAQoXR2V0UHJvamVjdFN0YW5kYXJkV29yZHMSMy5oYWdpY29kZS5wcm9qZWN0LnYxLkdldFByb2plY3RTdGFuZGFyZFdvcmRzUmVxdWVzdBo0LmhhZ2ljb2RlLnByb2plY3QudjEuR2V0UHJvamVjdFN0YW5kYXJkV29yZHNSZXNwb25zZRKiAQohR2V0UHJvamVjdFN0YW5kYXJkV29yZHNNYW5hZ2VtZW50Ej0uaGFnaWNvZGUucHJvamVjdC52MS5HZXRQcm9qZWN0U3RhbmRhcmRXb3Jkc01hbmFnZW1lbnRSZXF1ZXN0Gj4uaGFnaWNvZGUucHJvamVjdC52MS5HZXRQcm9qZWN0U3RhbmRhcmRXb3Jkc01hbmFnZW1lbnRSZXNwb25zZRKlAQoiU2F2ZVByb2plY3RTdGFuZGFyZFdvcmRzTWFuYWdlbWVudBI+LmhhZ2ljb2RlLnByb2plY3QudjEuU2F2ZVByb2plY3RTdGFuZGFyZFdvcmRzTWFuYWdlbWVudFJlcXVlc3QaPy5oYWdpY29kZS5wcm9qZWN0LnYxLlNhdmVQcm9qZWN0U3RhbmRhcmRXb3Jkc01hbmFnZW1lbnRSZXNwb25zZRKBAQoWR2V0TW9ub1NwZWNzTWFuYWdlbWVudBIyLmhhZ2ljb2RlLnByb2plY3QudjEuR2V0TW9ub1NwZWNzTWFuYWdlbWVudFJlcXVlc3QaMy5oYWdpY29kZS5wcm9qZWN0LnYxLkdldE1vbm9TcGVjc01hbmFnZW1lbnRSZXNwb25zZRJsCg9SZWxvYWRNb25vU3BlY3MSKy5oYWdpY29kZS5wcm9qZWN0LnYxLlJlbG9hZE1vbm9TcGVjc1JlcXVlc3QaLC5oYWdpY29kZS5wcm9qZWN0LnYxLlJlbG9hZE1vbm9TcGVjc1Jlc3BvbnNlEo0BChpDbG9uZU1vbm9TcGVjc1JlcG9zaXRvcmllcxI2LmhhZ2ljb2RlLnByb2plY3QudjEuQ2xvbmVNb25vU3BlY3NSZXBvc2l0b3JpZXNSZXF1ZXN0GjcuaGFnaWNvZGUucHJvamVjdC52MS5DbG9uZU1vbm9TcGVjc1JlcG9zaXRvcmllc1Jlc3BvbnNlEqIBCiFSZW1vdmVNb25vU3BlY3NSZXBvc2l0b3J5Q2hlY2tvdXQSPS5oYWdpY29kZS5wcm9qZWN0LnYxLlJlbW92ZU1vbm9TcGVjc1JlcG9zaXRvcnlDaGVja291dFJlcXVlc3QaPi5oYWdpY29kZS5wcm9qZWN0LnYxLlJlbW92ZU1vbm9TcGVjc1JlcG9zaXRvcnlDaGVja291dFJlc3BvbnNlEngKE0luaXRpYWxpemVNb25vU3BlY3MSLy5oYWdpY29kZS5wcm9qZWN0LnYxLkluaXRpYWxpemVNb25vU3BlY3NSZXF1ZXN0GjAuaGFnaWNvZGUucHJvamVjdC52MS5Jbml0aWFsaXplTW9ub1NwZWNzUmVzcG9uc2USigEKGVVwZGF0ZU1vbm9TcGVjc01hbmFnZW1lbnQSNS5oYWdpY29kZS5wcm9qZWN0LnYxLlVwZGF0ZU1vbm9TcGVjc01hbmFnZW1lbnRSZXF1ZXN0GjYuaGFnaWNvZGUucHJvamVjdC52MS5VcGRhdGVNb25vU3BlY3NNYW5hZ2VtZW50UmVzcG9uc2UShwEKGEdldFByb2plY3REZXNpZ25Eb2N1bWVudBI0LmhhZ2ljb2RlLnByb2plY3QudjEuR2V0UHJvamVjdERlc2lnbkRvY3VtZW50UmVxdWVzdBo1LmhhZ2ljb2RlLnByb2plY3QudjEuR2V0UHJvamVjdERlc2lnbkRvY3VtZW50UmVzcG9uc2USigEKGVNhdmVQcm9qZWN0RGVzaWduRG9jdW1lbnQSNS5oYWdpY29kZS5wcm9qZWN0LnYxLlNhdmVQcm9qZWN0RGVzaWduRG9jdW1lbnRSZXF1ZXN0GjYuaGFnaWNvZGUucHJvamVjdC52MS5TYXZlUHJvamVjdERlc2lnbkRvY3VtZW50UmVzcG9uc2USigEKGUdldFByb2plY3REZXNpZ25TaXRlSW5kZXgSNS5oYWdpY29kZS5wcm9qZWN0LnYxLkdldFByb2plY3REZXNpZ25TaXRlSW5kZXhSZXF1ZXN0GjYuaGFnaWNvZGUucHJvamVjdC52MS5HZXRQcm9qZWN0RGVzaWduU2l0ZUluZGV4UmVzcG9uc2USkwEKHEdldFByb2plY3REZXNpZ25TaXRlRG9jdW1lbnQSOC5oYWdpY29kZS5wcm9qZWN0LnYxLkdldFByb2plY3REZXNpZ25TaXRlRG9jdW1lbnRSZXF1ZXN0GjkuaGFnaWNvZGUucHJvamVjdC52MS5HZXRQcm9qZWN0RGVzaWduU2l0ZURvY3VtZW50UmVzcG9uc2USfgoVVmFsaWRhdGVQcm9qZWN0QnJhbmNoEjEuaGFnaWNvZGUucHJvamVjdC52MS5WYWxpZGF0ZVByb2plY3RCcmFuY2hSZXF1ZXN0GjIuaGFnaWNvZGUucHJvamVjdC52MS5WYWxpZGF0ZVByb2plY3RCcmFuY2hSZXNwb25zZRJ4ChNWYWxpZGF0ZVByb2plY3RQYXRoEi8uaGFnaWNvZGUucHJvamVjdC52MS5WYWxpZGF0ZVByb2plY3RQYXRoUmVxdWVzdBowLmhhZ2ljb2RlLnByb2plY3QudjEuVmFsaWRhdGVQcm9qZWN0UGF0aFJlc3BvbnNlEngKE1NjYW5HaXRSZXBvc2l0b3JpZXMSLy5oYWdpY29kZS5wcm9qZWN0LnYxLlNjYW5HaXRSZXBvc2l0b3JpZXNSZXF1ZXN0GjAuaGFnaWNvZGUucHJvamVjdC52MS5TY2FuR2l0UmVwb3NpdG9yaWVzUmVzcG9uc2UShAEKF1ZhbGlkYXRlTW9ub1NwZWNzQ29uZmlnEjMuaGFnaWNvZGUucHJvamVjdC52MS5WYWxpZGF0ZU1vbm9TcGVjc0NvbmZpZ1JlcXVlc3QaNC5oYWdpY29kZS5wcm9qZWN0LnYxLlZhbGlkYXRlTW9ub1NwZWNzQ29uZmlnUmVzcG9uc2USbwoQR2V0UHJvamVjdFZhdWx0cxIsLmhhZ2ljb2RlLnByb2plY3QudjEuR2V0UHJvamVjdFZhdWx0c1JlcXVlc3QaLS5oYWdpY29kZS5wcm9qZWN0LnYxLkdldFByb2plY3RWYXVsdHNSZXNwb25zZRKEAQoXT3BlblByb2plY3RJbkNvZGVTZXJ2ZXISMy5oYWdpY29kZS5wcm9qZWN0LnYxLk9wZW5Qcm9qZWN0SW5Db2RlU2VydmVyUmVxdWVzdBo0LmhhZ2ljb2RlLnByb2plY3QudjEuT3BlblByb2plY3RJbkNvZGVTZXJ2ZXJSZXNwb25zZRKHAQoYR2V0UHJvamVjdEdpdFdhdGNoU3RhdHVzEjQuaGFnaWNvZGUucHJvamVjdC52MS5HZXRQcm9qZWN0R2l0V2F0Y2hTdGF0dXNSZXF1ZXN0GjUuaGFnaWNvZGUucHJvamVjdC52MS5HZXRQcm9qZWN0R2l0V2F0Y2hTdGF0dXNSZXNwb25zZUIpqgImUENvZGUuSHR0cEFwaS5HcnBjQ29udHJhY3RzLlByb2plY3QuVjFiBnByb3RvMw",[Ne,_i]),Tm=v(se,1),Qm=v(se,5),Mm=v(se,15),Om=v(se,17),Dm=v(se,19),_m=v(se,21),$m=v(se,23),Pm=v(se,25),qm=v(se,41),eh=v(se,50),th=v(se,51),nh=v(se,69),oh=v(se,71),ah=v(se,85),rh=We(se,0),Je=oe("Ch9oYWdpY29kZS9wcm9qZWN0L3YxL3ZhdWx0LnByb3RvEhNoYWdpY29kZS5wcm9qZWN0LnYxIhMKEUxpc3RWYXVsdHNSZXF1ZXN0Ik8KEkxpc3RWYXVsdHNSZXNwb25zZRI5CgZyZXN1bHQYASABKAsyKS5oYWdpY29kZS5wcm9qZWN0LnYxLlZhdWx0TGlzdFJlc3BvbnNlRHRvIk4KEkNyZWF0ZVZhdWx0UmVxdWVzdBI4CgRib2R5GAEgASgLMiouaGFnaWNvZGUucHJvamVjdC52MS5DcmVhdGVWYXVsdFJlcXVlc3REdG8iSAoTQ3JlYXRlVmF1bHRSZXNwb25zZRIxCgZyZXN1bHQYASABKAsyIS5oYWdpY29kZS5wcm9qZWN0LnYxLlZhdWx0SXRlbUR0byJaChJVcGRhdGVWYXVsdFJlcXVlc3QSCgoCaWQYASABKAkSOAoEYm9keRgCIAEoCzIqLmhhZ2ljb2RlLnByb2plY3QudjEuVXBkYXRlVmF1bHRSZXF1ZXN0RHRvIkgKE1VwZGF0ZVZhdWx0UmVzcG9uc2USMQoGcmVzdWx0GAEgASgLMiEuaGFnaWNvZGUucHJvamVjdC52MS5WYXVsdEl0ZW1EdG8iPAoSRGVsZXRlVmF1bHRSZXF1ZXN0EgoKAmlkGAEgASgJEhoKEmRlbGV0ZV9sb2NhbF9maWxlcxgCIAEoCCJSChNEZWxldGVWYXVsdFJlc3BvbnNlEjsKBnJlc3VsdBgBIAEoCzIrLmhhZ2ljb2RlLnByb2plY3QudjEuRGVsZXRlVmF1bHRSZXNwb25zZUR0byI+ChRHZXRWYXVsdEZpbGVzUmVxdWVzdBIKCgJpZBgBIAEoCRIRCgRwYXRoGAIgASgJSACIAQFCBwoFX3BhdGgiVgoVR2V0VmF1bHRGaWxlc1Jlc3BvbnNlEj0KBnJlc3VsdBgBIAEoCzItLmhhZ2ljb2RlLnByb2plY3QudjEuVmF1bHRGaWxlTGlzdFJlc3BvbnNlRHRvIjYKGkdldFZhdWx0RmlsZVByZXZpZXdSZXF1ZXN0EgoKAmlkGAEgASgJEgwKBHBhdGgYAiABKAkiXwobR2V0VmF1bHRGaWxlUHJldmlld1Jlc3BvbnNlEkAKBnJlc3VsdBgBIAEoCzIwLmhhZ2ljb2RlLnByb2plY3QudjEuVmF1bHRGaWxlUHJldmlld1Jlc3BvbnNlRHRvIo4BChxPcGVuVmF1bHRJbkNvZGVTZXJ2ZXJSZXF1ZXN0EgoKAmlkGAEgASgJEhEKBHBhdGgYAiABKAlIAIgBARInChpjdXJyZW50X2ludGVyZmFjZV9sYW5ndWFnZRgDIAEoCUgBiAEBQgcKBV9wYXRoQh0KG19jdXJyZW50X2ludGVyZmFjZV9sYW5ndWFnZSJjCh1PcGVuVmF1bHRJbkNvZGVTZXJ2ZXJSZXNwb25zZRJCCgZyZXN1bHQYASABKAsyMi5oYWdpY29kZS5wcm9qZWN0LnYxLlZzQ29kZVNlcnZlckxhdW5jaFJlc3BvbnNlRHRvImwKFUNyZWF0ZVZhdWx0UmVxdWVzdER0bxIMCgRuYW1lGAEgASgJEgwKBHR5cGUYAiABKAkSFQoNcGh5c2ljYWxfcGF0aBgDIAEoCRIUCgdnaXRfdXJsGAQgASgJSACIAQFCCgoIX2dpdF91cmwibAoVVXBkYXRlVmF1bHRSZXF1ZXN0RHRvEgwKBG5hbWUYASABKAkSDAoEdHlwZRgCIAEoCRIVCg1waHlzaWNhbF9wYXRoGAMgASgJEhQKB2dpdF91cmwYBCABKAlIAIgBAUIKCghfZ2l0X3VybCKdAQoWRGVsZXRlVmF1bHRSZXNwb25zZUR0bxIKCgJpZBgBIAEoCRIPCgdkZWxldGVkGAIgASgIEiQKHGRlbGV0ZV9sb2NhbF9maWxlc19yZXF1ZXN0ZWQYAyABKAgSIwobbG9jYWxfZmlsZXNfZGVsZXRpb25fc3RhdHVzGAQgASgJEhsKE2xvY2FsX2ZpbGVzX2RlbGV0ZWQYBSABKAgizAEKEVZhdWx0RmlsZUVudHJ5RHRvEhUKDXJlbGF0aXZlX3BhdGgYASABKAkSEQoJZmlsZV9uYW1lGAIgASgJEhQKDGlzX2RpcmVjdG9yeRgDIAEoCBIRCglleHRlbnNpb24YBCABKAkSEgoKc2l6ZV9ieXRlcxgFIAEoAxI1ChFsYXN0X21vZGlmaWVkX3V0YxgGIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASGQoRcHJldmlld19zdXBwb3J0ZWQYByABKAgimAIKGFZhdWx0RmlsZUxpc3RSZXNwb25zZUR0bxIQCgh2YXVsdF9pZBgBIAEoCRISCgp2YXVsdF9uYW1lGAIgASgJEhUKDXBoeXNpY2FsX3BhdGgYAyABKAkSDgoGc3RhdHVzGAQgASgJEhcKCmVycm9yX2NvZGUYBSABKAlIAIgBARIUCgdtZXNzYWdlGAYgASgJSAGIAQESFAoMaXNfdHJ1bmNhdGVkGAcgASgIEhgKEHRvdGFsX2ZpbGVfY291bnQYCCABKAUSNQoFaXRlbXMYCSADKAsyJi5oYWdpY29kZS5wcm9qZWN0LnYxLlZhdWx0RmlsZUVudHJ5RHRvQg0KC19lcnJvcl9jb2RlQgoKCF9tZXNzYWdlIpQDChtWYXVsdEZpbGVQcmV2aWV3UmVzcG9uc2VEdG8SEAoIdmF1bHRfaWQYASABKAkSEgoKdmF1bHRfbmFtZRgCIAEoCRIVCg1waHlzaWNhbF9wYXRoGAMgASgJEhUKDXJlbGF0aXZlX3BhdGgYBCABKAkSEQoJZmlsZV9uYW1lGAUgASgJEhEKCWV4dGVuc2lvbhgGIAEoCRISCgpzaXplX2J5dGVzGAcgASgDEjUKEWxhc3RfbW9kaWZpZWRfdXRjGAggASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIOCgZzdGF0dXMYCSABKAkSFwoKZXJyb3JfY29kZRgKIAEoCUgAiAEBEhQKB21lc3NhZ2UYCyABKAlIAYgBARIZChFwcmV2aWV3X3N1cHBvcnRlZBgMIAEoCBIZChFjb250ZW50X3RydW5jYXRlZBgNIAEoCBIUCgdjb250ZW50GA4gASgJSAKIAQFCDQoLX2Vycm9yX2NvZGVCCgoIX21lc3NhZ2VCCgoIX2NvbnRlbnQy9QUKDFZhdWx0U2VydmljZRJdCgpMaXN0VmF1bHRzEiYuaGFnaWNvZGUucHJvamVjdC52MS5MaXN0VmF1bHRzUmVxdWVzdBonLmhhZ2ljb2RlLnByb2plY3QudjEuTGlzdFZhdWx0c1Jlc3BvbnNlEmAKC0NyZWF0ZVZhdWx0EicuaGFnaWNvZGUucHJvamVjdC52MS5DcmVhdGVWYXVsdFJlcXVlc3QaKC5oYWdpY29kZS5wcm9qZWN0LnYxLkNyZWF0ZVZhdWx0UmVzcG9uc2USYAoLVXBkYXRlVmF1bHQSJy5oYWdpY29kZS5wcm9qZWN0LnYxLlVwZGF0ZVZhdWx0UmVxdWVzdBooLmhhZ2ljb2RlLnByb2plY3QudjEuVXBkYXRlVmF1bHRSZXNwb25zZRJgCgtEZWxldGVWYXVsdBInLmhhZ2ljb2RlLnByb2plY3QudjEuRGVsZXRlVmF1bHRSZXF1ZXN0GiguaGFnaWNvZGUucHJvamVjdC52MS5EZWxldGVWYXVsdFJlc3BvbnNlEmYKDUdldFZhdWx0RmlsZXMSKS5oYWdpY29kZS5wcm9qZWN0LnYxLkdldFZhdWx0RmlsZXNSZXF1ZXN0GiouaGFnaWNvZGUucHJvamVjdC52MS5HZXRWYXVsdEZpbGVzUmVzcG9uc2USeAoTR2V0VmF1bHRGaWxlUHJldmlldxIvLmhhZ2ljb2RlLnByb2plY3QudjEuR2V0VmF1bHRGaWxlUHJldmlld1JlcXVlc3QaMC5oYWdpY29kZS5wcm9qZWN0LnYxLkdldFZhdWx0RmlsZVByZXZpZXdSZXNwb25zZRJ+ChVPcGVuVmF1bHRJbkNvZGVTZXJ2ZXISMS5oYWdpY29kZS5wcm9qZWN0LnYxLk9wZW5WYXVsdEluQ29kZVNlcnZlclJlcXVlc3QaMi5oYWdpY29kZS5wcm9qZWN0LnYxLk9wZW5WYXVsdEluQ29kZVNlcnZlclJlc3BvbnNlQimqAiZQQ29kZS5IdHRwQXBpLkdycGNDb250cmFjdHMuUHJvamVjdC5WMWIGcHJvdG8z",[Ne,se]),ih=v(Je,1),sh=v(Je,3),lh=v(Je,5),ch=v(Je,7),dh=v(Je,9),uh=v(Je,11),mh=v(Je,14),hh=v(Je,15),bh=We(Je,0),Qe=oe("CitoYWdpY29kZS9jb21tdW5pdHkvdjEvc2NoZWR1bGVkX3BsYW5zLnByb3RvEhVoYWdpY29kZS5jb21tdW5pdHkudjEiQwoZTGlzdFNjaGVkdWxlZFBsYW5zUmVxdWVzdBIXCgpwcm9qZWN0X2lkGAEgASgJSACIAQFCDQoLX3Byb2plY3RfaWQiWgoaTGlzdFNjaGVkdWxlZFBsYW5zUmVzcG9uc2USPAoGcmVzdWx0GAEgAygLMiwuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlNjaGVkdWxlZFBsYW5SZXNwb25zZSIlChdHZXRTY2hlZHVsZWRQbGFuUmVxdWVzdBIKCgJpZBgBIAEoCSJYChhHZXRTY2hlZHVsZWRQbGFuUmVzcG9uc2USPAoGcmVzdWx0GAEgASgLMiwuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlNjaGVkdWxlZFBsYW5SZXNwb25zZSI2CiBMaXN0U2NoZWR1bGVkUGxhblByb2JsZW1zUmVxdWVzdBISCgpwcm9qZWN0X2lkGAEgASgJIm0KIUxpc3RTY2hlZHVsZWRQbGFuUHJvYmxlbXNSZXNwb25zZRJICgZyZXN1bHQYASADKAsyOC5oYWdpY29kZS5jb21tdW5pdHkudjEuU2NoZWR1bGVkUGxhbkRlZmluaXRpb25Qcm9ibGVtRHRvIvMBCiNMaXN0U2NoZWR1bGVkUGxhbk9jY3VycmVuY2VzUmVxdWVzdBIYCgtyYW5nZV9zdGFydBgBIAEoCUgAiAEBEhYKCXJhbmdlX2VuZBgCIAEoCUgBiAEBEh4KEWRpc3BsYXlfdGltZV96b25lGAMgASgJSAKIAQESEwoGY3Vyc29yGAQgASgJSAOIAQESFwoKcHJvamVjdF9pZBgFIAEoCUgEiAEBQg4KDF9yYW5nZV9zdGFydEIMCgpfcmFuZ2VfZW5kQhQKEl9kaXNwbGF5X3RpbWVfem9uZUIJCgdfY3Vyc29yQg0KC19wcm9qZWN0X2lkInIKJExpc3RTY2hlZHVsZWRQbGFuT2NjdXJyZW5jZXNSZXNwb25zZRJKCgZyZXN1bHQYASABKAsyOi5oYWdpY29kZS5jb21tdW5pdHkudjEuU2NoZWR1bGVkUGxhbk9jY3VycmVuY2VQYWdlUmVzcG9uc2UiWwoaQ3JlYXRlU2NoZWR1bGVkUGxhblJlcXVlc3QSPQoEYm9keRgBIAEoCzIvLmhhZ2ljb2RlLmNvbW11bml0eS52MS5TY2hlZHVsZWRQbGFuU2F2ZVJlcXVlc3QiWwobQ3JlYXRlU2NoZWR1bGVkUGxhblJlc3BvbnNlEjwKBnJlc3VsdBgBIAEoCzIsLmhhZ2ljb2RlLmNvbW11bml0eS52MS5TY2hlZHVsZWRQbGFuUmVzcG9uc2UiZwoaVXBkYXRlU2NoZWR1bGVkUGxhblJlcXVlc3QSCgoCaWQYASABKAkSPQoEYm9keRgCIAEoCzIvLmhhZ2ljb2RlLmNvbW11bml0eS52MS5TY2hlZHVsZWRQbGFuU2F2ZVJlcXVlc3QiWwobVXBkYXRlU2NoZWR1bGVkUGxhblJlc3BvbnNlEjwKBnJlc3VsdBgBIAEoCzIsLmhhZ2ljb2RlLmNvbW11bml0eS52MS5TY2hlZHVsZWRQbGFuUmVzcG9uc2UiKAoaRGVsZXRlU2NoZWR1bGVkUGxhblJlcXVlc3QSCgoCaWQYASABKAkiHQobRGVsZXRlU2NoZWR1bGVkUGxhblJlc3BvbnNlInkKIkVkaXRTY2hlZHVsZWRQbGFuT2NjdXJyZW5jZVJlcXVlc3QSCgoCaWQYASABKAkSRwoEYm9keRgCIAEoCzI5LmhhZ2ljb2RlLmNvbW11bml0eS52MS5TY2hlZHVsZWRQbGFuT2NjdXJyZW5jZUVkaXRSZXF1ZXN0ImMKI0VkaXRTY2hlZHVsZWRQbGFuT2NjdXJyZW5jZVJlc3BvbnNlEjwKBnJlc3VsdBgBIAEoCzIsLmhhZ2ljb2RlLmNvbW11bml0eS52MS5TY2hlZHVsZWRQbGFuUmVzcG9uc2UiYAokRGVsZXRlU2NoZWR1bGVkUGxhbk9jY3VycmVuY2VSZXF1ZXN0EgoKAmlkGAEgASgJEhoKDW9jY3VycmVuY2VfYXQYAiABKAlIAIgBAUIQCg5fb2NjdXJyZW5jZV9hdCJlCiVEZWxldGVTY2hlZHVsZWRQbGFuT2NjdXJyZW5jZVJlc3BvbnNlEjwKBnJlc3VsdBgBIAEoCzIsLmhhZ2ljb2RlLmNvbW11bml0eS52MS5TY2hlZHVsZWRQbGFuUmVzcG9uc2UiJQoXUnVuU2NoZWR1bGVkUGxhblJlcXVlc3QSCgoCaWQYASABKAkiVQoYUnVuU2NoZWR1bGVkUGxhblJlc3BvbnNlEjkKBnJlc3VsdBgBIAEoCzIpLmhhZ2ljb2RlLmNvbW11bml0eS52MS5TZXNzaW9uUmVzcG9uc2VEdG8iJwoZU3RhcnRTY2hlZHVsZWRQbGFuUmVxdWVzdBIKCgJpZBgBIAEoCSJgChpTdGFydFNjaGVkdWxlZFBsYW5SZXNwb25zZRJCCgZyZXN1bHQYASABKAsyMi5oYWdpY29kZS5jb21tdW5pdHkudjEuU2NoZWR1bGVkUGxhblJ1bkFjY2VwdGVkRHRvIjUKJ0NvbmZpcm1TY2hlZHVsZWRQbGFuUXVvdGFUcmlnZ2VyUmVxdWVzdBIKCgJpZBgBIAEoCSJuCihDb25maXJtU2NoZWR1bGVkUGxhblF1b3RhVHJpZ2dlclJlc3BvbnNlEkIKBnJlc3VsdBgBIAEoCzIyLmhhZ2ljb2RlLmNvbW11bml0eS52MS5TY2hlZHVsZWRQbGFuUnVuQWNjZXB0ZWREdG8iNAomQ2FuY2VsU2NoZWR1bGVkUGxhblF1b3RhVHJpZ2dlclJlcXVlc3QSCgoCaWQYASABKAkiZwonQ2FuY2VsU2NoZWR1bGVkUGxhblF1b3RhVHJpZ2dlclJlc3BvbnNlEjwKBnJlc3VsdBgBIAEoCzIsLmhhZ2ljb2RlLmNvbW11bml0eS52MS5TY2hlZHVsZWRQbGFuUmVzcG9uc2UiKAoVU2NoZWR1bGVkUGxhbkFnZW50RHRvEg8KB2hlcm9faWQYASABKAkiawoZU2NoZWR1bGVkUGxhbkFnZW50UG9vbER0bxIQCghzdHJhdGVneRgBIAEoCRI8CgZhZ2VudHMYAiADKAsyLC5oYWdpY29kZS5jb21tdW5pdHkudjEuU2NoZWR1bGVkUGxhbkFnZW50RHRvIuABCidTY2hlZHVsZWRQbGFuT2NjdXJyZW5jZU92ZXJyaWRlUmVzcG9uc2USKgoGcnVuX2F0GAEgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIRCgRuYW1lGAIgASgJSACIAQESRAoKYWdlbnRfcG9vbBgDIAEoCzIwLmhhZ2ljb2RlLmNvbW11bml0eS52MS5TY2hlZHVsZWRQbGFuQWdlbnRQb29sRHRvEicKB3BheWxvYWQYBCABKAsyFi5nb29nbGUucHJvdG9idWYuVmFsdWVCBwoFX25hbWUi4wEKHlNjaGVkdWxlZFBsYW5FeGNlcHRpb25SZXNwb25zZRIvCgtvcmlnaW5hbF9hdBgBIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASDAoEa2luZBgCIAEoCRJQCghvdmVycmlkZRgDIAEoCzI+LmhhZ2ljb2RlLmNvbW11bml0eS52MS5TY2hlZHVsZWRQbGFuT2NjdXJyZW5jZU92ZXJyaWRlUmVzcG9uc2USHAoPaW5wdXRfZmlsZV9wYXRoGAQgASgJSACIAQFCEgoQX2lucHV0X2ZpbGVfcGF0aCI4ChZTY2hlZHVsZWRQbGFuUmVwZWF0RHRvEgwKBHJ1bGUYASABKAkSEAoId2Vla2RheXMYAiADKAkiiAIKGlNjaGVkdWxlZFBsYW5RdW90YVJlc2V0RHRvEhMKBndpbmRvdxgBIAEoCUgAiAEBEiIKFW1pbl9yZW1haW5pbmdfcGVyY2VudBgCIAEoBUgBiAEBEiUKGG1heF9taW51dGVzX2JlZm9yZV9yZXNldBgDIAEoBUgCiAEBEigKG3JlcXVpcmVfbWFudWFsX2NvbmZpcm1hdGlvbhgEIAEoCEgDiAEBQgkKB193aW5kb3dCGAoWX21pbl9yZW1haW5pbmdfcGVyY2VudEIbChlfbWF4X21pbnV0ZXNfYmVmb3JlX3Jlc2V0Qh4KHF9yZXF1aXJlX21hbnVhbF9jb25maXJtYXRpb24i9wIKGFNjaGVkdWxlZFBsYW5TY2hlZHVsZUR0bxIMCgRtb2RlGAEgASgJEioKBnJ1bl9hdBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASFgoJdGltZV96b25lGAMgASgJSACIAQESFwoKc3RhcnRfZGF0ZRgEIAEoCUgBiAEBEhUKCGVuZF9kYXRlGAUgASgJSAKIAQESGAoLdGltZV9vZl9kYXkYBiABKAlIA4gBARI9CgZyZXBlYXQYByABKAsyLS5oYWdpY29kZS5jb21tdW5pdHkudjEuU2NoZWR1bGVkUGxhblJlcGVhdER0bxJGCgtxdW90YV9yZXNldBgIIAEoCzIxLmhhZ2ljb2RlLmNvbW11bml0eS52MS5TY2hlZHVsZWRQbGFuUXVvdGFSZXNldER0b0IMCgpfdGltZV96b25lQg0KC19zdGFydF9kYXRlQgsKCV9lbmRfZGF0ZUIOCgxfdGltZV9vZl9kYXki0AYKFVNjaGVkdWxlZFBsYW5SZXNwb25zZRIKCgJpZBgBIAEoCRIMCgR0eXBlGAIgASgJEg0KBXNjb3BlGAMgASgJEhIKCnByb2plY3RfaWQYBCABKAkSIQoUZGVmaW5pdGlvbl9maWxlX3BhdGgYBSABKAlIAIgBARIMCgRuYW1lGAYgASgJEg8KB2VuYWJsZWQYByABKAgSEQoEaWNvbhgIIAEoCUgBiAEBEhIKBWNvbG9yGAkgASgJSAKIAQESLgoKY3JlYXRlZF9hdBgKIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLgoKdXBkYXRlZF9hdBgLIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASQQoIc2NoZWR1bGUYDCABKAsyLy5oYWdpY29kZS5jb21tdW5pdHkudjEuU2NoZWR1bGVkUGxhblNjaGVkdWxlRHRvEkQKCmFnZW50X3Bvb2wYDSABKAsyMC5oYWdpY29kZS5jb21tdW5pdHkudjEuU2NoZWR1bGVkUGxhbkFnZW50UG9vbER0bxInCgdwYXlsb2FkGA4gASgLMhYuZ29vZ2xlLnByb3RvYnVmLlZhbHVlEg0KBXN0YXRlGA8gASgJEi8KC25leHRfcnVuX2F0GBAgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBJJCgpleGNlcHRpb25zGBEgAygLMjUuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlNjaGVkdWxlZFBsYW5FeGNlcHRpb25SZXNwb25zZRIcCg9pbnB1dF9maWxlX3BhdGgYEiABKAlIA4gBARI7ChdsYXN0X3RyaWdnZXJlZF9yZXNldF9hdBgTIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASWQoVcGVuZGluZ19xdW90YV90cmlnZ2VyGBQgASgLMjouaGFnaWNvZGUuY29tbXVuaXR5LnYxLlNjaGVkdWxlZFBsYW5QZW5kaW5nUXVvdGFUcmlnZ2VyRHRvQhcKFV9kZWZpbml0aW9uX2ZpbGVfcGF0aEIHCgVfaWNvbkIICgZfY29sb3JCEgoQX2lucHV0X2ZpbGVfcGF0aCKJAQojU2NoZWR1bGVkUGxhblBlbmRpbmdRdW90YVRyaWdnZXJEdG8SLQoJcmFpc2VkX2F0GAEgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIzCg93aW5kb3dfcmVzZXRfYXQYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIkcKIVNjaGVkdWxlZFBsYW5EZWZpbml0aW9uUHJvYmxlbUR0bxIRCglmaWxlX3BhdGgYASABKAkSDwoHbWVzc2FnZRgCIAEoCSLTAQofU2NoZWR1bGVkUGxhblJlY3VycmVuY2VSZXNwb25zZRIMCgRtb2RlGAEgASgJEhEKBHJ1bGUYAiABKAlIAIgBARIQCgh3ZWVrZGF5cxgDIAMoCRIXCgpzdGFydF9kYXRlGAQgASgJSAGIAQESFQoIZW5kX2RhdGUYBSABKAlIAogBARIYCgt0aW1lX29mX2RheRgGIAEoCUgDiAEBQgcKBV9ydWxlQg0KC19zdGFydF9kYXRlQgsKCV9lbmRfZGF0ZUIOCgxfdGltZV9vZl9kYXki6gMKH1NjaGVkdWxlZFBsYW5PY2N1cnJlbmNlUmVzcG9uc2USDwoHcGxhbl9pZBgBIAEoCRISCgpwcm9qZWN0X2lkGAIgASgJEjEKDW9jY3VycmVuY2VfYXQYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEgwKBG5hbWUYBCABKAkSDAoEdHlwZRgFIAEoCRIPCgdlbmFibGVkGAYgASgIEhEKBGljb24YByABKAlIAIgBARISCgVjb2xvchgIIAEoCUgBiAEBEg0KBXN0YXRlGAkgASgJEh8KEnNjaGVkdWxlX3RpbWVfem9uZRgKIAEoCUgCiAEBEkoKCnJlY3VycmVuY2UYCyABKAsyNi5oYWdpY29kZS5jb21tdW5pdHkudjEuU2NoZWR1bGVkUGxhblJlY3VycmVuY2VSZXNwb25zZRIvCgtuZXh0X3J1bl9hdBgMIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLwoLb3JpZ2luYWxfYXQYDSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEhMKC2lzX21vZGlmaWVkGA4gASgIQgcKBV9pY29uQggKBl9jb2xvckIVChNfc2NoZWR1bGVfdGltZV96b25lIpMCCiNTY2hlZHVsZWRQbGFuT2NjdXJyZW5jZVBhZ2VSZXNwb25zZRIvCgtyYW5nZV9zdGFydBgBIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLQoJcmFuZ2VfZW5kGAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIZChFkaXNwbGF5X3RpbWVfem9uZRgDIAEoCRJHCgdlbnRyaWVzGAQgAygLMjYuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlNjaGVkdWxlZFBsYW5PY2N1cnJlbmNlUmVzcG9uc2USGAoLbmV4dF9jdXJzb3IYBSABKAlIAIgBAUIOCgxfbmV4dF9jdXJzb3Ii0QIKGFNjaGVkdWxlZFBsYW5TYXZlUmVxdWVzdBIMCgR0eXBlGAEgASgJEhIKBXNjb3BlGAIgASgJSACIAQESDAoEbmFtZRgDIAEoCRIPCgdlbmFibGVkGAQgASgIEhEKBGljb24YBSABKAlIAYgBARISCgVjb2xvchgGIAEoCUgCiAEBEkEKCHNjaGVkdWxlGAcgASgLMi8uaGFnaWNvZGUuY29tbXVuaXR5LnYxLlNjaGVkdWxlZFBsYW5TY2hlZHVsZUR0bxJECgphZ2VudF9wb29sGAggASgLMjAuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlNjaGVkdWxlZFBsYW5BZ2VudFBvb2xEdG8SJwoHcGF5bG9hZBgJIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZUIICgZfc2NvcGVCBwoFX2ljb25CCAoGX2NvbG9yIo4CCiJTY2hlZHVsZWRQbGFuT2NjdXJyZW5jZUVkaXRSZXF1ZXN0EjEKDW9jY3VycmVuY2VfYXQYASABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEioKBnJ1bl9hdBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASEQoEbmFtZRgDIAEoCUgAiAEBEkQKCmFnZW50X3Bvb2wYBCABKAsyMC5oYWdpY29kZS5jb21tdW5pdHkudjEuU2NoZWR1bGVkUGxhbkFnZW50UG9vbER0bxInCgdwYXlsb2FkGAUgASgLMhYuZ29vZ2xlLnByb3RvYnVmLlZhbHVlQgcKBV9uYW1lIs4DChJDaGF0SGVyb1N1bW1hcnlEdG8SDwoHaGVyb19pZBgBIAEoCRIMCgRuYW1lGAIgASgJEhgKC2Rlc2NyaXB0aW9uGAMgASgJSACIAQESEQoEaWNvbhgEIAEoCUgBiAEBEhUKDWV4ZWN1dG9yX3R5cGUYBSABKAkSGQoMYWdlbnRfY2xpX2lkGAYgASgJSAKIAQESGwoOYWdlbnRfY2xpX25hbWUYByABKAlIA4gBARIbCg5hZ2VudF9jbGlfaWNvbhgIIAEoCUgEiAEBEhUKCG1vZGVsX2lkGAkgASgJSAWIAQESFwoKbW9kZWxfbmFtZRgKIAEoCUgGiAEBEhcKCm1vZGVsX2ljb24YCyABKAlIB4gBARIiChVzZWNvbmRhcnlfbW9kZWxfbGFiZWwYDCABKAlICIgBAUIOCgxfZGVzY3JpcHRpb25CBwoFX2ljb25CDwoNX2FnZW50X2NsaV9pZEIRCg9fYWdlbnRfY2xpX25hbWVCEQoPX2FnZW50X2NsaV9pY29uQgsKCV9tb2RlbF9pZEINCgtfbW9kZWxfbmFtZUINCgtfbW9kZWxfaWNvbkIYChZfc2Vjb25kYXJ5X21vZGVsX2xhYmVsIjgKFE9wZW5TcGVjVGFza1Byb2dyZXNzEhEKCWNvbXBsZXRlZBgBIAEoBRINCgV0b3RhbBgCIAEoBSKAAgoQT3BlblNwZWNGaWxlSW5mbxIRCglmaWxlX25hbWUYASABKAkSFQoNcmVsYXRpdmVfcGF0aBgCIAEoCRIOCgZleGlzdHMYAyABKAgSEQoJZmlsZV90eXBlGAQgASgJEhMKC2lzX3JlcXVpcmVkGAUgASgIEhMKC2lzX2FyY2hpdmVkGAYgASgIEjEKDWFyY2hpdmVkX2RhdGUYByABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEkIKDXRhc2tfcHJvZ3Jlc3MYCCABKAsyKy5oYWdpY29kZS5jb21tdW5pdHkudjEuT3BlblNwZWNUYXNrUHJvZ3Jlc3MiXgoRT3BlblNwZWNGaWxlc0luZm8SEQoJYmFzZV9wYXRoGAEgASgJEjYKBWZpbGVzGAIgAygLMicuaGFnaWNvZGUuY29tbXVuaXR5LnYxLk9wZW5TcGVjRmlsZUluZm8izAEKFlF1ZXVlTWVzc2FnZVN1bW1hcnlEdG8SDQoFaW5kZXgYASABKAUSDAoEbW9kZRgCIAEoBRItCglxdWV1ZWRfYXQYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEhcKD2NvbnRlbnRfcHJldmlldxgEIAEoCRIhChRleGVjdXRpb25fbWVzc2FnZV9pZBgFIAEoCUgAiAEBEhEKCWNhbl9zdGVlchgGIAEoCEIXChVfZXhlY3V0aW9uX21lc3NhZ2VfaWQigAEKFlNlc3Npb25Ob3RpZmljYXRpb25EdG8SDAoEa2luZBgBIAEoCRIvCgtvYnNlcnZlZF9hdBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASJwoHcGF5bG9hZBgDIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZSLtAQoWU2Vzc2lvblVzYWdlU3VtbWFyeUR0bxIaCg1wcm9tcHRfdG9rZW5zGAEgASgFSACIAQESIQoUY2FjaGVkX3Byb21wdF90b2tlbnMYAiABKAVIAYgBARIeChFjb21wbGV0aW9uX3Rva2VucxgDIAEoBUgCiAEBEjMKD2xhc3RfdXBkYXRlZF9hdBgEIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCEAoOX3Byb21wdF90b2tlbnNCFwoVX2NhY2hlZF9wcm9tcHRfdG9rZW5zQhQKEl9jb21wbGV0aW9uX3Rva2VucyJfChRTdGFnZUV4ZWN1dG9ySW5mb0R0bxIVCg1wcm92aWRlcl90eXBlGAEgASgJEjAKDGxhc3RfdXBkYXRlZBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAivAIKFVN0YWdlSGVyb1NlbGVjdGlvbkR0bxIRCglzdGFnZV9rZXkYASABKAkSEgoKc2NyaXB0X2tleRgCIAEoCRIVCg1zY2VuYXJpb19uYW1lGAMgASgJEhQKB2hlcm9faWQYBCABKAlIAIgBARIWCgloZXJvX25hbWUYBSABKAlIAYgBARIWCgloZXJvX2ljb24YBiABKAlIAogBARIVCg1leGVjdXRvcl90eXBlGAcgASgJEhUKDXVzZWRfZmFsbGJhY2sYCCABKAgSGAoQc2VsZWN0aW9uX3NvdXJjZRgJIAEoCRIvCgtzZWxlY3RlZF9hdBgKIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCCgoIX2hlcm9faWRCDAoKX2hlcm9fbmFtZUIMCgpfaGVyb19pY29uIrcLChJTZXNzaW9uUmVzcG9uc2VEdG8SEgoKc2Vzc2lvbl9pZBgBIAEoCRINCgV0aXRsZRgCIAEoCRIYCgtkZXNjcmlwdGlvbhgDIAEoCUgAiAEBEhwKD2NoaWVmX2NvbXBsYWludBgEIAEoCUgBiAEBEgwKBGNvZGUYBSABKAUSDAoEdHlwZRgGIAEoCRIOCgZzdGF0dXMYByABKAkSEQoJaXNfYWN0aXZlGAggASgIEjIKDmxhc3RfYWN0aXZlX2F0GAkgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBISCgpwcm9qZWN0X2lkGAogASgJEhQKDHByb2plY3RfbmFtZRgLIAEoCRIUCgxwcm9qZWN0X3BhdGgYDCABKAkSGgoNcHJvcG9zYWxfbmFtZRgNIAEoCUgCiAEBEkEKD29wZW5fc3BlY19maWxlcxgOIAEoCzIoLmhhZ2ljb2RlLmNvbW11bml0eS52MS5PcGVuU3BlY0ZpbGVzSW5mbxIdChVwZW5kaW5nX21lc3NhZ2VfY291bnQYDyABKAUSRQoOcXVldWVfbWVzc2FnZXMYECADKAsyLS5oYWdpY29kZS5jb21tdW5pdHkudjEuUXVldWVNZXNzYWdlU3VtbWFyeUR0bxIeChF3b3JraW5nX2RpcmVjdG9yeRgRIAEoCUgDiAEBEhUKCG1ldGFkYXRhGBIgASgJSASIAQESHwoSY2hhdF9leGVjdXRvcl90eXBlGBMgASgJSAWIAQESPAoJY2hhdF9oZXJvGBQgASgLMikuaGFnaWNvZGUuY29tbXVuaXR5LnYxLkNoYXRIZXJvU3VtbWFyeUR0bxJbChJzdGFnZV9leGVjdXRvcl9tYXAYFSADKAsyPy5oYWdpY29kZS5jb21tdW5pdHkudjEuU2Vzc2lvblJlc3BvbnNlRHRvLlN0YWdlRXhlY3V0b3JNYXBFbnRyeRJmChhzdGFnZV9oZXJvX3NlbGVjdGlvbl9tYXAYFiADKAsyRC5oYWdpY29kZS5jb21tdW5pdHkudjEuU2Vzc2lvblJlc3BvbnNlRHRvLlN0YWdlSGVyb1NlbGVjdGlvbk1hcEVudHJ5EiAKE3J1bnRpbWVfbW9kZWxfbGFiZWwYFyABKAlIBogBARI5ChVwcm9jZXNzaW5nX3N0YXJ0ZWRfYXQYGCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEkQKDXNlc3Npb25fdXNhZ2UYGSABKAsyLS5oYWdpY29kZS5jb21tdW5pdHkudjEuU2Vzc2lvblVzYWdlU3VtbWFyeUR0bxIcCg9wcmV2aW91c19zdGF0dXMYGiABKAlIB4gBARJECg1ub3RpZmljYXRpb25zGBsgAygLMi0uaGFnaWNvZGUuY29tbXVuaXR5LnYxLlNlc3Npb25Ob3RpZmljYXRpb25EdG8aZAoVU3RhZ2VFeGVjdXRvck1hcEVudHJ5EgsKA2tleRgBIAEoCRI6CgV2YWx1ZRgCIAEoCzIrLmhhZ2ljb2RlLmNvbW11bml0eS52MS5TdGFnZUV4ZWN1dG9ySW5mb0R0bzoCOAEaagoaU3RhZ2VIZXJvU2VsZWN0aW9uTWFwRW50cnkSCwoDa2V5GAEgASgJEjsKBXZhbHVlGAIgASgLMiwuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlN0YWdlSGVyb1NlbGVjdGlvbkR0bzoCOAFCDgoMX2Rlc2NyaXB0aW9uQhIKEF9jaGllZl9jb21wbGFpbnRCEAoOX3Byb3Bvc2FsX25hbWVCFAoSX3dvcmtpbmdfZGlyZWN0b3J5QgsKCV9tZXRhZGF0YUIVChNfY2hhdF9leGVjdXRvcl90eXBlQhYKFF9ydW50aW1lX21vZGVsX2xhYmVsQhIKEF9wcmV2aW91c19zdGF0dXMiLgobU2NoZWR1bGVkUGxhblJ1bkFjY2VwdGVkRHRvEg8KB3BsYW5faWQYASABKAkymQ4KFVNjaGVkdWxlZFBsYW5zU2VydmljZRJ5ChJMaXN0U2NoZWR1bGVkUGxhbnMSMC5oYWdpY29kZS5jb21tdW5pdHkudjEuTGlzdFNjaGVkdWxlZFBsYW5zUmVxdWVzdBoxLmhhZ2ljb2RlLmNvbW11bml0eS52MS5MaXN0U2NoZWR1bGVkUGxhbnNSZXNwb25zZRJzChBHZXRTY2hlZHVsZWRQbGFuEi4uaGFnaWNvZGUuY29tbXVuaXR5LnYxLkdldFNjaGVkdWxlZFBsYW5SZXF1ZXN0Gi8uaGFnaWNvZGUuY29tbXVuaXR5LnYxLkdldFNjaGVkdWxlZFBsYW5SZXNwb25zZRKOAQoZTGlzdFNjaGVkdWxlZFBsYW5Qcm9ibGVtcxI3LmhhZ2ljb2RlLmNvbW11bml0eS52MS5MaXN0U2NoZWR1bGVkUGxhblByb2JsZW1zUmVxdWVzdBo4LmhhZ2ljb2RlLmNvbW11bml0eS52MS5MaXN0U2NoZWR1bGVkUGxhblByb2JsZW1zUmVzcG9uc2USlwEKHExpc3RTY2hlZHVsZWRQbGFuT2NjdXJyZW5jZXMSOi5oYWdpY29kZS5jb21tdW5pdHkudjEuTGlzdFNjaGVkdWxlZFBsYW5PY2N1cnJlbmNlc1JlcXVlc3QaOy5oYWdpY29kZS5jb21tdW5pdHkudjEuTGlzdFNjaGVkdWxlZFBsYW5PY2N1cnJlbmNlc1Jlc3BvbnNlEnwKE0NyZWF0ZVNjaGVkdWxlZFBsYW4SMS5oYWdpY29kZS5jb21tdW5pdHkudjEuQ3JlYXRlU2NoZWR1bGVkUGxhblJlcXVlc3QaMi5oYWdpY29kZS5jb21tdW5pdHkudjEuQ3JlYXRlU2NoZWR1bGVkUGxhblJlc3BvbnNlEnwKE1VwZGF0ZVNjaGVkdWxlZFBsYW4SMS5oYWdpY29kZS5jb21tdW5pdHkudjEuVXBkYXRlU2NoZWR1bGVkUGxhblJlcXVlc3QaMi5oYWdpY29kZS5jb21tdW5pdHkudjEuVXBkYXRlU2NoZWR1bGVkUGxhblJlc3BvbnNlEnwKE0RlbGV0ZVNjaGVkdWxlZFBsYW4SMS5oYWdpY29kZS5jb21tdW5pdHkudjEuRGVsZXRlU2NoZWR1bGVkUGxhblJlcXVlc3QaMi5oYWdpY29kZS5jb21tdW5pdHkudjEuRGVsZXRlU2NoZWR1bGVkUGxhblJlc3BvbnNlEpQBChtFZGl0U2NoZWR1bGVkUGxhbk9jY3VycmVuY2USOS5oYWdpY29kZS5jb21tdW5pdHkudjEuRWRpdFNjaGVkdWxlZFBsYW5PY2N1cnJlbmNlUmVxdWVzdBo6LmhhZ2ljb2RlLmNvbW11bml0eS52MS5FZGl0U2NoZWR1bGVkUGxhbk9jY3VycmVuY2VSZXNwb25zZRKaAQodRGVsZXRlU2NoZWR1bGVkUGxhbk9jY3VycmVuY2USOy5oYWdpY29kZS5jb21tdW5pdHkudjEuRGVsZXRlU2NoZWR1bGVkUGxhbk9jY3VycmVuY2VSZXF1ZXN0GjwuaGFnaWNvZGUuY29tbXVuaXR5LnYxLkRlbGV0ZVNjaGVkdWxlZFBsYW5PY2N1cnJlbmNlUmVzcG9uc2UScwoQUnVuU2NoZWR1bGVkUGxhbhIuLmhhZ2ljb2RlLmNvbW11bml0eS52MS5SdW5TY2hlZHVsZWRQbGFuUmVxdWVzdBovLmhhZ2ljb2RlLmNvbW11bml0eS52MS5SdW5TY2hlZHVsZWRQbGFuUmVzcG9uc2USeQoSU3RhcnRTY2hlZHVsZWRQbGFuEjAuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlN0YXJ0U2NoZWR1bGVkUGxhblJlcXVlc3QaMS5oYWdpY29kZS5jb21tdW5pdHkudjEuU3RhcnRTY2hlZHVsZWRQbGFuUmVzcG9uc2USowEKIENvbmZpcm1TY2hlZHVsZWRQbGFuUXVvdGFUcmlnZ2VyEj4uaGFnaWNvZGUuY29tbXVuaXR5LnYxLkNvbmZpcm1TY2hlZHVsZWRQbGFuUXVvdGFUcmlnZ2VyUmVxdWVzdBo/LmhhZ2ljb2RlLmNvbW11bml0eS52MS5Db25maXJtU2NoZWR1bGVkUGxhblF1b3RhVHJpZ2dlclJlc3BvbnNlEqABCh9DYW5jZWxTY2hlZHVsZWRQbGFuUXVvdGFUcmlnZ2VyEj0uaGFnaWNvZGUuY29tbXVuaXR5LnYxLkNhbmNlbFNjaGVkdWxlZFBsYW5RdW90YVRyaWdnZXJSZXF1ZXN0Gj4uaGFnaWNvZGUuY29tbXVuaXR5LnYxLkNhbmNlbFNjaGVkdWxlZFBsYW5RdW90YVRyaWdnZXJSZXNwb25zZUIrqgIoUENvZGUuSHR0cEFwaS5HcnBjQ29udHJhY3RzLkNvbW11bml0eS5WMWIGcHJvdG8z",[Ue,Ne]),gh=v(Qe,1),ph=v(Qe,3),Ah=v(Qe,9),fh=v(Qe,11),Zh=v(Qe,19),Rh=v(Qe,21),Xr=v(Qe,39),Eh=We(Qe,0),Vh=oe("Ci1oYWdpY29kZS9jb21tdW5pdHkvdjEvY29tbXVuaXR5X3ByZXNldHMucHJvdG8SFWhhZ2ljb2RlLmNvbW11bml0eS52MSIdChtMaXN0Q29tbXVuaXR5UHJlc2V0c1JlcXVlc3QiYwocTGlzdENvbW11bml0eVByZXNldHNSZXNwb25zZRJDCgZyZXN1bHQYASABKAsyMy5oYWdpY29kZS5jb21tdW5pdHkudjEuTG9jYWxIYWdpVGFza0xpc3RSZXNwb25zZUR0byJmCh1JbnN0YWxsQ29tbXVuaXR5UHJlc2V0UmVxdWVzdBJFCgRib2R5GAEgASgLMjcuaGFnaWNvZGUuY29tbXVuaXR5LnYxLkNvbW11bml0eVByZXNldEluc3RhbGxSZXF1ZXN0RHRvImwKHkluc3RhbGxDb21tdW5pdHlQcmVzZXRSZXNwb25zZRJKCgZyZXN1bHQYASABKAsyOi5oYWdpY29kZS5jb21tdW5pdHkudjEuQ29tbXVuaXR5UHJlc2V0T3BlcmF0aW9uUmVzcG9uc2VEdG8ifAogU2V0Q29tbXVuaXR5UHJlc2V0RW5hYmxlZFJlcXVlc3QSEQoJcHJlc2V0X2lkGAEgASgJEkUKBGJvZHkYAiABKAsyNy5oYWdpY29kZS5jb21tdW5pdHkudjEuQ29tbXVuaXR5UHJlc2V0RW5hYmxlZFJlcXVlc3REdG8ibwohU2V0Q29tbXVuaXR5UHJlc2V0RW5hYmxlZFJlc3BvbnNlEkoKBnJlc3VsdBgBIAEoCzI6LmhhZ2ljb2RlLmNvbW11bml0eS52MS5Db21tdW5pdHlQcmVzZXRPcGVyYXRpb25SZXNwb25zZUR0byI0Ch9Vbmluc3RhbGxDb21tdW5pdHlQcmVzZXRSZXF1ZXN0EhEKCXByZXNldF9pZBgBIAEoCSJuCiBVbmluc3RhbGxDb21tdW5pdHlQcmVzZXRSZXNwb25zZRJKCgZyZXN1bHQYASABKAsyOi5oYWdpY29kZS5jb21tdW5pdHkudjEuQ29tbXVuaXR5UHJlc2V0T3BlcmF0aW9uUmVzcG9uc2VEdG8iIAoeUmVmcmVzaENvbW11bml0eVByZXNldHNSZXF1ZXN0IiEKH1JlZnJlc2hDb21tdW5pdHlQcmVzZXRzUmVzcG9uc2UihwEKFkNvbW11bml0eVByZXNldFJpc2tEdG8SGQoRZGVjbGFyZXNfY29tbWFuZHMYASABKAgSFwoPZGVjbGFyZXNfc2tpbGxzGAIgASgIEhYKDmRlY2xhcmVzX2hvb2tzGAMgASgIEiEKGWRlY2xhcmVzX2NsaV9yZXF1aXJlbWVudHMYBCABKAgi2QQKGExvY2FsSGFnaVRhc2tMaXN0SXRlbUR0bxIRCglwcmVzZXRfaWQYASABKAkSFAoMZGlzcGxheV9uYW1lGAIgASgJEg8KB3ZlcnNpb24YAyABKAkSEwoLc291cmNlX2tpbmQYBCABKAkSGQoRaW5zdGFsbGF0aW9uX2tpbmQYBSABKAkSFwoPbWFuYWdlbWVudF9raW5kGAYgASgJEiAKGGlzX3Nlc3Npb25fY3JlYXRpb25fb25seRgHIAEoCBIPCgdlbmFibGVkGAggASgIEhQKDGlzX3JlbW92YWJsZRgJIAEoCBIRCglwdWJsaXNoZXIYCiABKAkSHQoQc291cmNlX3JlZmVyZW5jZRgLIAEoCUgAiAEBEhsKDmFyY2hpdmVfc2hhMjU2GAwgASgJSAGIAQESNAoQaW5zdGFsbGVkX2F0X3V0YxgNIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASGgoScmVsYXRpdmVfZGlyZWN0b3J5GA4gASgJEhgKC2Rlc2NyaXB0aW9uGA8gASgJSAKIAQESPAoFcmlza3MYECABKAsyLS5oYWdpY29kZS5jb21tdW5pdHkudjEuQ29tbXVuaXR5UHJlc2V0Umlza0R0bxIWCglzb3VyY2VfaWQYESABKAlIA4gBARIRCgRpY29uGBIgASgJSASIAQFCEwoRX3NvdXJjZV9yZWZlcmVuY2VCEQoPX2FyY2hpdmVfc2hhMjU2Qg4KDF9kZXNjcmlwdGlvbkIMCgpfc291cmNlX2lkQgcKBV9pY29uIloKHVByZXNldFRhc2tQbHVnaW5EaWFnbm9zdGljRHRvEgwKBGNvZGUYASABKAkSDwoHbWVzc2FnZRgCIAEoCRIRCgRwYXRoGAMgASgJSACIAQFCBwoFX3BhdGgiqQEKHExvY2FsSGFnaVRhc2tMaXN0UmVzcG9uc2VEdG8SPgoFaXRlbXMYASADKAsyLy5oYWdpY29kZS5jb21tdW5pdHkudjEuTG9jYWxIYWdpVGFza0xpc3RJdGVtRHRvEkkKC2RpYWdub3N0aWNzGAIgAygLMjQuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlByZXNldFRhc2tQbHVnaW5EaWFnbm9zdGljRHRvIqwDCh5Db21tdW5pdHlQcmVzZXRJbnN0YWxsYXRpb25EdG8SEQoJcHJlc2V0X2lkGAEgASgJEhYKCW5hbWVzcGFjZRgCIAEoCUgAiAEBEg8KB3ZlcnNpb24YAyABKAkSEQoJcHVibGlzaGVyGAQgASgJEh0KEHNvdXJjZV9yZWZlcmVuY2UYBSABKAlIAYgBARIWCg5hcmNoaXZlX3NoYTI1NhgGIAEoCRI0ChBpbnN0YWxsZWRfYXRfdXRjGAcgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIaChJyZWxhdGl2ZV9kaXJlY3RvcnkYCCABKAkSDwoHZW5hYmxlZBgJIAEoCBI8CgVyaXNrcxgKIAEoCzItLmhhZ2ljb2RlLmNvbW11bml0eS52MS5Db21tdW5pdHlQcmVzZXRSaXNrRHRvEhYKCXNvdXJjZV9pZBgLIAEoCUgCiAEBEhEKBGljb24YDCABKAlIA4gBAUIMCgpfbmFtZXNwYWNlQhMKEV9zb3VyY2VfcmVmZXJlbmNlQgwKCl9zb3VyY2VfaWRCBwoFX2ljb24ilAIKI0NvbW11bml0eVByZXNldE9wZXJhdGlvblJlc3BvbnNlRHRvEhEKCXN1Y2NlZWRlZBgBIAEoCBIWCglwcmVzZXRfaWQYAiABKAlIAIgBARISCgVlcnJvchgDIAEoCUgBiAEBEksKDGluc3RhbGxhdGlvbhgEIAEoCzI1LmhhZ2ljb2RlLmNvbW11bml0eS52MS5Db21tdW5pdHlQcmVzZXRJbnN0YWxsYXRpb25EdG8SSQoLZGlhZ25vc3RpY3MYBSADKAsyNC5oYWdpY29kZS5jb21tdW5pdHkudjEuUHJlc2V0VGFza1BsdWdpbkRpYWdub3N0aWNEdG9CDAoKX3ByZXNldF9pZEIICgZfZXJyb3IisgIKIENvbW11bml0eVByZXNldEluc3RhbGxSZXF1ZXN0RHRvEhYKDmFyY2hpdmVfYmFzZTY0GAEgASgJEh8KEmV4cGVjdGVkX3ByZXNldF9pZBgCIAEoCUgAiAEBEh0KEGV4cGVjdGVkX3ZlcnNpb24YAyABKAlIAYgBARIcCg9leHBlY3RlZF9zaGEyNTYYBCABKAlIAogBARIWCglwdWJsaXNoZXIYBSABKAlIA4gBARIdChBzb3VyY2VfcmVmZXJlbmNlGAYgASgJSASIAQFCFQoTX2V4cGVjdGVkX3ByZXNldF9pZEITChFfZXhwZWN0ZWRfdmVyc2lvbkISChBfZXhwZWN0ZWRfc2hhMjU2QgwKCl9wdWJsaXNoZXJCEwoRX3NvdXJjZV9yZWZlcmVuY2UiMwogQ29tbXVuaXR5UHJlc2V0RW5hYmxlZFJlcXVlc3REdG8SDwoHZW5hYmxlZBgBIAEoCDLMBQoXQ29tbXVuaXR5UHJlc2V0c1NlcnZpY2USfwoUTGlzdENvbW11bml0eVByZXNldHMSMi5oYWdpY29kZS5jb21tdW5pdHkudjEuTGlzdENvbW11bml0eVByZXNldHNSZXF1ZXN0GjMuaGFnaWNvZGUuY29tbXVuaXR5LnYxLkxpc3RDb21tdW5pdHlQcmVzZXRzUmVzcG9uc2UShQEKFkluc3RhbGxDb21tdW5pdHlQcmVzZXQSNC5oYWdpY29kZS5jb21tdW5pdHkudjEuSW5zdGFsbENvbW11bml0eVByZXNldFJlcXVlc3QaNS5oYWdpY29kZS5jb21tdW5pdHkudjEuSW5zdGFsbENvbW11bml0eVByZXNldFJlc3BvbnNlEo4BChlTZXRDb21tdW5pdHlQcmVzZXRFbmFibGVkEjcuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlNldENvbW11bml0eVByZXNldEVuYWJsZWRSZXF1ZXN0GjguaGFnaWNvZGUuY29tbXVuaXR5LnYxLlNldENvbW11bml0eVByZXNldEVuYWJsZWRSZXNwb25zZRKLAQoYVW5pbnN0YWxsQ29tbXVuaXR5UHJlc2V0EjYuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlVuaW5zdGFsbENvbW11bml0eVByZXNldFJlcXVlc3QaNy5oYWdpY29kZS5jb21tdW5pdHkudjEuVW5pbnN0YWxsQ29tbXVuaXR5UHJlc2V0UmVzcG9uc2USiAEKF1JlZnJlc2hDb21tdW5pdHlQcmVzZXRzEjUuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlJlZnJlc2hDb21tdW5pdHlQcmVzZXRzUmVxdWVzdBo2LmhhZ2ljb2RlLmNvbW11bml0eS52MS5SZWZyZXNoQ29tbXVuaXR5UHJlc2V0c1Jlc3BvbnNlQiuqAihQQ29kZS5IdHRwQXBpLkdycGNDb250cmFjdHMuQ29tbXVuaXR5LlYxYgZwcm90bzM",[Ne]),_o=oe("CihoYWdpY29kZS9jb21tdW5pdHkvdjEvcHJlc2V0X3Rhc2tzLnByb3RvEhVoYWdpY29kZS5jb21tdW5pdHkudjEiHQobR2V0UHJlc2V0VGFza0NhdGFsb2dSZXF1ZXN0ImMKHEdldFByZXNldFRhc2tDYXRhbG9nUmVzcG9uc2USQwoGcmVzdWx0GAEgASgLMjMuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlByZXNldFRhc2tDYXRhbG9nUmVzcG9uc2VEdG8ibwoiQ2hlY2tQcmVzZXRUYXNrUmVxdWlyZW1lbnRzUmVxdWVzdBJJCgRib2R5GAEgASgLMjsuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlByZXNldFRhc2tSZXF1aXJlbWVudENoZWNrUmVxdWVzdER0byJzCiNDaGVja1ByZXNldFRhc2tSZXF1aXJlbWVudHNSZXNwb25zZRJMCgZyZXN1bHQYASABKAsyPC5oYWdpY29kZS5jb21tdW5pdHkudjEuUHJlc2V0VGFza1JlcXVpcmVtZW50Q2hlY2tSZXNwb25zZUR0byIeChxMaXN0UHJlc2V0VGFza1NjaGVtYXNSZXF1ZXN0ImIKHUxpc3RQcmVzZXRUYXNrU2NoZW1hc1Jlc3BvbnNlEkEKBnJlc3VsdBgBIAMoCzIxLmhhZ2ljb2RlLmNvbW11bml0eS52MS5QcmVzZXRUYXNrU2NoZW1hU3VtbWFyeUR0byI0ChpHZXRQcmVzZXRUYXNrU2NoZW1hUmVxdWVzdBIWCg5wcmVzZXRfdGFza19pZBgBIAEoCSJhChtHZXRQcmVzZXRUYXNrU2NoZW1hUmVzcG9uc2USQgoGcmVzdWx0GAEgASgLMjIuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlByZXNldFRhc2tDcmVhdGlvblNjaGVtYUR0byLKAQogUHJlc2V0VGFza0NhdGFsb2dEaXNhYmxlZEl0ZW1EdG8SCgoCaWQYASABKAkSEAoIZ3JvdXBfaWQYAiABKAkSEwoLc291cmNlX2tpbmQYAyABKAkSDgoGc3RhdHVzGAQgASgJEhgKEHBsdWdpbl9yb290X3BhdGgYBSABKAkSSQoLZGlhZ25vc3RpY3MYBiADKAsyNC5oYWdpY29kZS5jb21tdW5pdHkudjEuUHJlc2V0VGFza1BsdWdpbkRpYWdub3N0aWNEdG8iPQodUHJlc2V0VGFza0FnZW50UmVxdWlyZW1lbnREdG8SDAoEbW9kZRgBIAEoCRIOCgZhZ2VudHMYAiADKAki6gEKFFByZXNldFRhc2tDb21tYW5kRHRvEgoKAmlkGAEgASgJEhAKCGdyb3VwX2lkGAIgASgJEg0KBWxhYmVsGAMgASgJEhMKC2Rlc2NyaXB0aW9uGAQgASgJEhIKBXNraWxsGAUgASgJSACIAQESEAoDdXJsGAYgASgJSAGIAQESFgoJZG9jc19zbHVnGAcgASgJSAKIAQESHQoQcHJlbHVkZV90ZW1wbGF0ZRgIIAEoCUgDiAEBQggKBl9za2lsbEIGCgRfdXJsQgwKCl9kb2NzX3NsdWdCEwoRX3ByZWx1ZGVfdGVtcGxhdGUiNgoZUHJlc2V0VGFza0NvbW1hbmRHcm91cER0bxIKCgJpZBgBIAEoCRINCgV0aXRsZRgCIAEoCSLMAQobUHJlc2V0VGFza0NvbW1hbmRDYXRhbG9nRHRvEhQKDHBhcmFtZXRlcl9pZBgBIAEoCRIWCg5zZWxlY3Rpb25fbW9kZRgCIAEoCRJACgZncm91cHMYAyADKAsyMC5oYWdpY29kZS5jb21tdW5pdHkudjEuUHJlc2V0VGFza0NvbW1hbmRHcm91cER0bxI9Cghjb21tYW5kcxgEIAMoCzIrLmhhZ2ljb2RlLmNvbW11bml0eS52MS5QcmVzZXRUYXNrQ29tbWFuZER0byJWChpQcmVzZXRUYXNrQ29tcGF0aWJpbGl0eUR0bxIOCgZsZWdhY3kYASABKAkSDwoHYmluZGluZxgCIAEoCRIXCg9kaWFnbm9zdGljX2NvZGUYAyABKAkidAoWUHJlc2V0VGFza0V4ZWN1dGlvbkR0bxIWCg5zY2hlbWFfdmVyc2lvbhgBIAEoCRIQCghzdHJhdGVneRgCIAEoCRIcCg9leHRlbnNpb25fcG9pbnQYAyABKAlIAIgBAUISChBfZXh0ZW5zaW9uX3BvaW50Ip8CChlQcmVzZXRUYXNrSW5wdXRCaW5kaW5nRHRvEg0KBWlucHV0GAEgASgJEh0KEHByb21wdF9wYXJhbWV0ZXIYAiABKAlIAIgBARIZCgxtZXRhZGF0YV9rZXkYAyABKAlIAYgBARIQCghyZXF1aXJlZBgEIAEoCBIVCghwcm9kdWNlchgFIAEoCUgCiAEBEhcKCnZhbHVlX3R5cGUYBiABKAlIA4gBARIWCgl0cmFuc2Zvcm0YByABKAlIBIgBARIPCgdhbGlhc2VzGAggAygJQhMKEV9wcm9tcHRfcGFyYW1ldGVyQg8KDV9tZXRhZGF0YV9rZXlCCwoJX3Byb2R1Y2VyQg0KC192YWx1ZV90eXBlQgwKCl90cmFuc2Zvcm0iOAoYUHJlc2V0VGFza0ZpZWxkT3B0aW9uRHRvEg0KBXZhbHVlGAEgASgJEg0KBWxhYmVsGAIgASgJIt4DCiBQcmVzZXRUYXNrRmllbGRDb21wb25lbnRQcm9wc0R0bxIgChN0YXJnZXRfc2VsZWN0aW9uX2lkGAEgASgJSACIAQESFwoKZW1wdHlfdGV4dBgCIAEoCUgBiAEBEiMKFmFsbG93X291dHB1dF9zZWxlY3Rpb24YAyABKAhIAogBARIlChhyZXF1aXJlX291dHB1dF9zZWxlY3Rpb24YBCABKAhIA4gBARIYCgtlbXB0eV90aXRsZRgFIAEoCUgEiAEBEh4KEWVtcHR5X2Rlc2NyaXB0aW9uGAYgASgJSAWIAQESHQoQcmVxdWlyZWRfbWVzc2FnZRgHIAEoCUgGiAEBEkAKB29wdGlvbnMYCCADKAsyLy5oYWdpY29kZS5jb21tdW5pdHkudjEuUHJlc2V0VGFza0ZpZWxkT3B0aW9uRHRvQhYKFF90YXJnZXRfc2VsZWN0aW9uX2lkQg0KC19lbXB0eV90ZXh0QhkKF19hbGxvd19vdXRwdXRfc2VsZWN0aW9uQhsKGV9yZXF1aXJlX291dHB1dF9zZWxlY3Rpb25CDgoMX2VtcHR5X3RpdGxlQhQKEl9lbXB0eV9kZXNjcmlwdGlvbkITChFfcmVxdWlyZWRfbWVzc2FnZSL3AgoXUHJlc2V0VGFza1BhbmVsRmllbGREdG8SCgoCaWQYASABKAkSEAoIcmVuZGVyZXIYAiABKAkSEgoKaW5wdXRfdHlwZRgDIAEoCRISCgp2YWx1ZV90eXBlGAQgASgJEhIKBWxhYmVsGAUgASgJSACIAQESEQoEaGludBgGIAEoCUgBiAEBEhgKC3BsYWNlaG9sZGVyGAcgASgJSAKIAQESEAoIcmVxdWlyZWQYCCABKAgSEwoGb3V0cHV0GAkgASgJSAOIAQESGwoOc2VsZWN0aW9uX21vZGUYCiABKAlIBIgBARJQCg9jb21wb25lbnRfcHJvcHMYCyABKAsyNy5oYWdpY29kZS5jb21tdW5pdHkudjEuUHJlc2V0VGFza0ZpZWxkQ29tcG9uZW50UHJvcHNEdG9CCAoGX2xhYmVsQgcKBV9oaW50Qg4KDF9wbGFjZWhvbGRlckIJCgdfb3V0cHV0QhEKD19zZWxlY3Rpb25fbW9kZSJ3ChlQcmVzZXRUYXNrUGFuZWxTZWN0aW9uRHRvEgoKAmlkGAEgASgJEg4KBmxheW91dBgCIAEoCRI+CgZmaWVsZHMYAyADKAsyLi5oYWdpY29kZS5jb21tdW5pdHkudjEuUHJlc2V0VGFza1BhbmVsRmllbGREdG8iyQEKIVByZXNldFRhc2tQcm9tcHRWYXJpYW50U3VtbWFyeUR0bxIKCgJpZBgBIAEoCRJSCgVtYXRjaBgCIAMoCzJDLmhhZ2ljb2RlLmNvbW11bml0eS52MS5QcmVzZXRUYXNrUHJvbXB0VmFyaWFudFN1bW1hcnlEdG8uTWF0Y2hFbnRyeRpECgpNYXRjaEVudHJ5EgsKA2tleRgBIAEoCRIlCgV2YWx1ZRgCIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZToCOAEi/gEKIlByZXNldFRhc2tQcm9tcHRTdHJhdGVneVN1bW1hcnlEdG8SDAoEdHlwZRgBIAEoCRIWCg5kZWZhdWx0X2xvY2FsZRgCIAEoCRIZChFzdXBwb3J0ZWRfbG9jYWxlcxgDIAMoCRIRCglzZWxlY3RvcnMYBCADKAkSSgoIdmFyaWFudHMYBSADKAsyOC5oYWdpY29kZS5jb21tdW5pdHkudjEuUHJlc2V0VGFza1Byb21wdFZhcmlhbnRTdW1tYXJ5RHRvEiAKE2ZhbGxiYWNrX3ZhcmlhbnRfaWQYBiABKAlIAIgBAUIWChRfZmFsbGJhY2tfdmFyaWFudF9pZCJFChhQcmVzZXRUYXNrUmVxdWlyZW1lbnREdG8SDAoEdHlwZRgBIAEoCRIMCgRuYW1lGAIgASgJEg0KBW5hbWVzGAMgAygJIqoDCh5QcmVzZXRUYXNrU2NlbmVSZWdpc3RyYXRpb25EdG8SEQoJc2NlbmVfa2V5GAEgASgJEg0KBXRpdGxlGAIgASgJEg8KB3N1bW1hcnkYAyABKAkSYQoPdGl0bGVfYnlfbG9jYWxlGAQgAygLMkguaGFnaWNvZGUuY29tbXVuaXR5LnYxLlByZXNldFRhc2tTY2VuZVJlZ2lzdHJhdGlvbkR0by5UaXRsZUJ5TG9jYWxlRW50cnkSZQoRc3VtbWFyeV9ieV9sb2NhbGUYBSADKAsySi5oYWdpY29kZS5jb21tdW5pdHkudjEuUHJlc2V0VGFza1NjZW5lUmVnaXN0cmF0aW9uRHRvLlN1bW1hcnlCeUxvY2FsZUVudHJ5Eh0KFWJhY2tncm91bmRfaW1hZ2Vfc2xvdBgGIAEoBRo0ChJUaXRsZUJ5TG9jYWxlRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ARo2ChRTdW1tYXJ5QnlMb2NhbGVFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBIo8BChJQcmVzZXRUYXNrU2NlbmVEdG8SEAoIcHJvdmlkZXIYASABKAkSGQoRZGVmYXVsdF9zY2VuZV9rZXkYAiABKAkSTAoNcmVnaXN0cmF0aW9ucxgDIAMoCzI1LmhhZ2ljb2RlLmNvbW11bml0eS52MS5QcmVzZXRUYXNrU2NlbmVSZWdpc3RyYXRpb25EdG8ivAEKHFByZXNldFRhc2tUYXJnZXRTZWxlY3Rpb25EdG8SCgoCaWQYASABKAkSDAoEa2luZBgCIAEoCRIWCg5zZWxlY3Rpb25fbW9kZRgDIAEoCRIcChRhbGxvd2VkX2FjY2Vzc190eXBlcxgEIAMoCRIOCgZvdXRwdXQYBSABKAkSGQoMc2NvcGVfc291cmNlGAYgASgJSACIAQESEAoIcmVxdWlyZWQYByABKAhCDwoNX3Njb3BlX3NvdXJjZSKBCQoYUHJlc2V0VGFza0NhdGFsb2dJdGVtRHRvEgoKAmlkGAEgASgJEhAKCGdyb3VwX2lkGAIgASgJEhMKC3NvdXJjZV9raW5kGAMgASgJEg8KB3ZlcnNpb24YBCABKAkSEQoEaWNvbhgFIAEoCUgAiAEBEhQKDGRpc3BsYXlfbmFtZRgGIAEoCRINCgV0aXRsZRgHIAEoCRITCgtkZXNjcmlwdGlvbhgIIAEoCRIVCg1kZWZhdWx0X3RpdGxlGAkgASgJEhQKDHN1Ym1pdF9sYWJlbBgKIAEoCRIYChBzdWJtaXR0aW5nX2xhYmVsGAsgASgJEhsKE2RlZmF1bHRfdGFyZ2V0X3R5cGUYDCABKAkSGwoTYWxsb3dfaGVyb19vdmVycmlkZRgNIAEoCBISCgpzb3J0X29yZGVyGA4gASgFEhkKEXN1cHBvcnRlZF9sb2NhbGVzGA8gAygJEkIKCHNlY3Rpb25zGBAgAygLMjAuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlByZXNldFRhc2tQYW5lbFNlY3Rpb25EdG8SSwoPY29tbWFuZF9jYXRhbG9nGBEgASgLMjIuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlByZXNldFRhc2tDb21tYW5kQ2F0YWxvZ0R0bxJOChF0YXJnZXRfc2VsZWN0aW9ucxgSIAMoCzIzLmhhZ2ljb2RlLmNvbW11bml0eS52MS5QcmVzZXRUYXNrVGFyZ2V0U2VsZWN0aW9uRHRvEk8KEWFnZW50X3JlcXVpcmVtZW50GBMgASgLMjQuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlByZXNldFRhc2tBZ2VudFJlcXVpcmVtZW50RHRvEkUKDHJlcXVpcmVtZW50cxgUIAMoCzIvLmhhZ2ljb2RlLmNvbW11bml0eS52MS5QcmVzZXRUYXNrUmVxdWlyZW1lbnREdG8SUgoPcHJvbXB0X3N0cmF0ZWd5GBUgASgLMjkuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlByZXNldFRhc2tQcm9tcHRTdHJhdGVneVN1bW1hcnlEdG8SQAoJZXhlY3V0aW9uGBYgASgLMi0uaGFnaWNvZGUuY29tbXVuaXR5LnYxLlByZXNldFRhc2tFeGVjdXRpb25EdG8SSAoNY29tcGF0aWJpbGl0eRgXIAMoCzIxLmhhZ2ljb2RlLmNvbW11bml0eS52MS5QcmVzZXRUYXNrQ29tcGF0aWJpbGl0eUR0bxJICg5pbnB1dF9iaW5kaW5ncxgYIAMoCzIwLmhhZ2ljb2RlLmNvbW11bml0eS52MS5QcmVzZXRUYXNrSW5wdXRCaW5kaW5nRHRvEjgKBXNjZW5lGBkgASgLMikuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlByZXNldFRhc2tTY2VuZUR0bxIjChZzZXJ2ZXJfZGVjaWRlZF9oZXJvX2lkGBogASgJSAGIAQFCBwoFX2ljb25CGQoXX3NlcnZlcl9kZWNpZGVkX2hlcm9faWQirwEKHFByZXNldFRhc2tDYXRhbG9nUmVzcG9uc2VEdG8SPgoFaXRlbXMYASADKAsyLy5oYWdpY29kZS5jb21tdW5pdHkudjEuUHJlc2V0VGFza0NhdGFsb2dJdGVtRHRvEk8KDmRpc2FibGVkX2l0ZW1zGAIgAygLMjcuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlByZXNldFRhc2tDYXRhbG9nRGlzYWJsZWRJdGVtRHRvIkgKJ1ByZXNldFRhc2tSZXF1aXJlbWVudENoZWNrRGlhZ25vc3RpY0R0bxIMCgRjb2RlGAEgASgJEg8KB21lc3NhZ2UYAiABKAkitQEKIVByZXNldFRhc2tSZXF1aXJlbWVudENoZWNrSXRlbUR0bxIMCgR0eXBlGAEgASgJEgwKBG5hbWUYAiABKAkSDgoGcGFzc2VkGAMgASgIEg8KB21lc3NhZ2UYBCABKAkSUwoLZGlhZ25vc3RpY3MYBSADKAsyPi5oYWdpY29kZS5jb21tdW5pdHkudjEuUHJlc2V0VGFza1JlcXVpcmVtZW50Q2hlY2tEaWFnbm9zdGljRHRvIqMBCiVQcmVzZXRUYXNrUmVxdWlyZW1lbnRDaGVja1Jlc3BvbnNlRHRvEhYKDnByZXNldF90YXNrX2lkGAEgASgJEhIKCmFsbF9wYXNzZWQYAiABKAgSTgoMcmVxdWlyZW1lbnRzGAMgAygLMjguaGFnaWNvZGUuY29tbXVuaXR5LnYxLlByZXNldFRhc2tSZXF1aXJlbWVudENoZWNrSXRlbUR0byI+CiRQcmVzZXRUYXNrUmVxdWlyZW1lbnRDaGVja1JlcXVlc3REdG8SFgoOcHJlc2V0X3Rhc2tfaWQYASABKAkiygEKGlByZXNldFRhc2tTY2hlbWFTdW1tYXJ5RHRvEgoKAmlkGAEgASgJEhAKCGdyb3VwX2lkGAIgASgJEhMKC3NvdXJjZV9raW5kGAMgASgJEg8KB3ZlcnNpb24YBCABKAkSDQoFdGl0bGUYBSABKAkSEwoLZGVzY3JpcHRpb24YBiABKAkSFAoMdGFyZ2V0X2NvdW50GAcgASgFEhUKDWNvbW1hbmRfY291bnQYCCABKAUSFwoPcGFyYW1ldGVyX2NvdW50GAkgASgFIngKGlByZXNldFRhc2tTY2hlbWFDb21tYW5kRHRvEgoKAmlkGAEgASgJEhAKCGdyb3VwX2lkGAIgASgJEg0KBWxhYmVsGAMgASgJEhMKC2Rlc2NyaXB0aW9uGAQgASgJEhAKA3VybBgFIAEoCUgAiAEBQgYKBF91cmwi0gEKG1ByZXNldFRhc2tTY2hlbWFDb21tYW5kc0R0bxIUCgxwYXJhbWV0ZXJfaWQYASABKAkSFgoOc2VsZWN0aW9uX21vZGUYAiABKAkSQAoGZ3JvdXBzGAMgAygLMjAuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlByZXNldFRhc2tDb21tYW5kR3JvdXBEdG8SQwoIY29tbWFuZHMYBCADKAsyMS5oYWdpY29kZS5jb21tdW5pdHkudjEuUHJlc2V0VGFza1NjaGVtYUNvbW1hbmREdG8iOwoYUHJlc2V0VGFza1NjaGVtYUFsaWFzRHRvEgsKA2tleRgBIAEoCRISCgpkZXByZWNhdGVkGAIgASgIIrQCChxQcmVzZXRUYXNrU2NoZW1hUGFyYW1ldGVyRHRvEgsKA2tleRgBIAEoCRIOCgZvcmlnaW4YAiABKAkSFQoIcHJvZHVjZXIYAyABKAlIAIgBARISCgp2YWx1ZV90eXBlGAQgASgJEhAKCHJlcXVpcmVkGAUgASgIEg0KBWxhYmVsGAYgASgJEhEKBGhpbnQYByABKAlIAYgBARJACgdvcHRpb25zGAggAygLMi8uaGFnaWNvZGUuY29tbXVuaXR5LnYxLlByZXNldFRhc2tGaWVsZE9wdGlvbkR0bxJACgdhbGlhc2VzGAkgAygLMi8uaGFnaWNvZGUuY29tbXVuaXR5LnYxLlByZXNldFRhc2tTY2hlbWFBbGlhc0R0b0ILCglfcHJvZHVjZXJCBwoFX2hpbnQihwEKGlByZXNldFRhc2tTY2hlbWFSZXF1ZXN0RHRvEg4KBm1ldGhvZBgBIAEoCRIMCgRwYXRoGAIgASgJEhwKFHByZXNldF90YXNrX2lkX2ZpZWxkGAMgASgJEhQKDGxvY2FsZV9maWVsZBgEIAEoCRIXCg9yZXF1aXJlZF9maWVsZHMYBSADKAkieAokUHJlc2V0VGFza1NjaGVtYVNjZW5lUmVnaXN0cmF0aW9uRHRvEhEKCXNjZW5lX2tleRgBIAEoCRINCgV0aXRsZRgCIAEoCRIPCgdzdW1tYXJ5GAMgASgJEh0KFWJhY2tncm91bmRfaW1hZ2Vfc2xvdBgEIAEoBSKcAQoZUHJlc2V0VGFza1NjaGVtYVNjZW5lc0R0bxIQCghwcm92aWRlchgBIAEoCRIZChFkZWZhdWx0X3NjZW5lX2tleRgCIAEoCRJSCg1yZWdpc3RyYXRpb25zGAMgAygLMjsuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlByZXNldFRhc2tTY2hlbWFTY2VuZVJlZ2lzdHJhdGlvbkR0byL0AQoZUHJlc2V0VGFza1NjaGVtYVRhcmdldER0bxIKCgJpZBgBIAEoCRIMCgRraW5kGAIgASgJEhYKDnNlbGVjdGlvbl9tb2RlGAMgASgJEhAKCHJlcXVpcmVkGAQgASgIEhwKFGFsbG93ZWRfYWNjZXNzX3R5cGVzGAUgAygJEhkKDHNjb3BlX3NvdXJjZRgGIAEoCUgAiAEBEhMKC3JlcXVlc3Rfa2V5GAcgASgJEh4KEXNjb3BlX3JlcXVlc3Rfa2V5GAggASgJSAGIAQFCDwoNX3Njb3BlX3NvdXJjZUIUChJfc2NvcGVfcmVxdWVzdF9rZXkiegoYUHJlc2V0VGFza1NjaGVtYVNjb3BlRHRvEhsKE2RlZmF1bHRfdGFyZ2V0X3R5cGUYASABKAkSQQoHdGFyZ2V0cxgCIAMoCzIwLmhhZ2ljb2RlLmNvbW11bml0eS52MS5QcmVzZXRUYXNrU2NoZW1hVGFyZ2V0RHRvIuMEChtQcmVzZXRUYXNrQ3JlYXRpb25TY2hlbWFEdG8SCgoCaWQYASABKAkSDwoHdmVyc2lvbhgCIAEoCRIOCgZsb2NhbGUYAyABKAkSDQoFdGl0bGUYBCABKAkSEwoLZGVzY3JpcHRpb24YBSABKAkSPgoFc2NvcGUYBiABKAsyLy5oYWdpY29kZS5jb21tdW5pdHkudjEuUHJlc2V0VGFza1NjaGVtYVNjb3BlRHRvEkQKCGNvbW1hbmRzGAcgASgLMjIuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlByZXNldFRhc2tTY2hlbWFDb21tYW5kc0R0bxJHCgpwYXJhbWV0ZXJzGAggAygLMjMuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlByZXNldFRhc2tTY2hlbWFQYXJhbWV0ZXJEdG8SRQoMcmVxdWlyZW1lbnRzGAkgAygLMi8uaGFnaWNvZGUuY29tbXVuaXR5LnYxLlByZXNldFRhc2tSZXF1aXJlbWVudER0bxJACgZzY2VuZXMYCiABKAsyMC5oYWdpY29kZS5jb21tdW5pdHkudjEuUHJlc2V0VGFza1NjaGVtYVNjZW5lc0R0bxJCCgdyZXF1ZXN0GAsgASgLMjEuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlByZXNldFRhc2tTY2hlbWFSZXF1ZXN0RHRvEi0KDGlucHV0X3NjaGVtYRgMIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSKAoHZXhhbXBsZRgNIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QyrwQKElByZXNldFRhc2tzU2VydmljZRJ/ChRHZXRQcmVzZXRUYXNrQ2F0YWxvZxIyLmhhZ2ljb2RlLmNvbW11bml0eS52MS5HZXRQcmVzZXRUYXNrQ2F0YWxvZ1JlcXVlc3QaMy5oYWdpY29kZS5jb21tdW5pdHkudjEuR2V0UHJlc2V0VGFza0NhdGFsb2dSZXNwb25zZRKUAQobQ2hlY2tQcmVzZXRUYXNrUmVxdWlyZW1lbnRzEjkuaGFnaWNvZGUuY29tbXVuaXR5LnYxLkNoZWNrUHJlc2V0VGFza1JlcXVpcmVtZW50c1JlcXVlc3QaOi5oYWdpY29kZS5jb21tdW5pdHkudjEuQ2hlY2tQcmVzZXRUYXNrUmVxdWlyZW1lbnRzUmVzcG9uc2USggEKFUxpc3RQcmVzZXRUYXNrU2NoZW1hcxIzLmhhZ2ljb2RlLmNvbW11bml0eS52MS5MaXN0UHJlc2V0VGFza1NjaGVtYXNSZXF1ZXN0GjQuaGFnaWNvZGUuY29tbXVuaXR5LnYxLkxpc3RQcmVzZXRUYXNrU2NoZW1hc1Jlc3BvbnNlEnwKE0dldFByZXNldFRhc2tTY2hlbWESMS5oYWdpY29kZS5jb21tdW5pdHkudjEuR2V0UHJlc2V0VGFza1NjaGVtYVJlcXVlc3QaMi5oYWdpY29kZS5jb21tdW5pdHkudjEuR2V0UHJlc2V0VGFza1NjaGVtYVJlc3BvbnNlQiuqAihQQ29kZS5IdHRwQXBpLkdycGNDb250cmFjdHMuQ29tbXVuaXR5LlYxYgZwcm90bzM",[Ue,Vh]),Gh=v(_o,5),Sh=v(_o,7),Nh=We(_o,0),ae=oe("CiloYWdpY29kZS9jb21tdW5pdHkvdjEvc2tpbGxfZ2FsbGVyeS5wcm90bxIVaGFnaWNvZGUuY29tbXVuaXR5LnYxIhcKFUdldExvY2FsU2tpbGxzUmVxdWVzdCJfChZHZXRMb2NhbFNraWxsc1Jlc3BvbnNlEkUKBnJlc3VsdBgBIAEoCzI1LmhhZ2ljb2RlLmNvbW11bml0eS52MS5Mb2NhbFNraWxsSW52ZW50b3J5UmVzcG9uc2VEdG8iLAocR2V0QnVpbHRJblNraWxsRGV0YWlsUmVxdWVzdBIMCgRzbHVnGAEgASgJIl0KHUdldEJ1aWx0SW5Ta2lsbERldGFpbFJlc3BvbnNlEjwKBnJlc3VsdBgBIAEoCzIsLmhhZ2ljb2RlLmNvbW11bml0eS52MS5CdWlsdEluU2tpbGxEZXRhaWxEdG8iYAoaVW5pbnN0YWxsTG9jYWxTa2lsbFJlcXVlc3QSQgoEYm9keRgBIAEoCzI0LmhhZ2ljb2RlLmNvbW11bml0eS52MS5Vbmluc3RhbGxMb2NhbFNraWxsUmVxdWVzdER0byJiChtVbmluc3RhbGxMb2NhbFNraWxsUmVzcG9uc2USQwoGcmVzdWx0GAEgASgLMjMuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlVuaW5zdGFsbExvY2FsU2tpbGxSZXN1bHREdG8icAoiU2V0QnVpbHRJblNraWxsQXZhaWxhYmlsaXR5UmVxdWVzdBJKCgRib2R5GAEgASgLMjwuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlNldEJ1aWx0SW5Ta2lsbEF2YWlsYWJpbGl0eVJlcXVlc3REdG8icgojU2V0QnVpbHRJblNraWxsQXZhaWxhYmlsaXR5UmVzcG9uc2USSwoGcmVzdWx0GAEgASgLMjsuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlNldEJ1aWx0SW5Ta2lsbEF2YWlsYWJpbGl0eVJlc3VsdER0byI2ChZHZXRTa2lsbEdhbGxlcnlSZXF1ZXN0EhIKBXF1ZXJ5GAEgASgJSACIAQFCCAoGX3F1ZXJ5IlkKF0dldFNraWxsR2FsbGVyeVJlc3BvbnNlEj4KBnJlc3VsdBgBIAEoCzIuLmhhZ2ljb2RlLmNvbW11bml0eS52MS5Ta2lsbEdhbGxlcnlSZXNwb25zZUR0byI6ChxHZXRTa2lsbEdhbGxlcnlEZXRhaWxSZXF1ZXN0EgoKAmlkGAEgASgJEg4KBnNvdXJjZRgCIAEoCSJdCh1HZXRTa2lsbEdhbGxlcnlEZXRhaWxSZXNwb25zZRI8CgZyZXN1bHQYASABKAsyLC5oYWdpY29kZS5jb21tdW5pdHkudjEuU2tpbGxHYWxsZXJ5RGV0YWlsRHRvIjkKG0dldFNraWxsR2FsbGVyeUF1ZGl0UmVxdWVzdBIKCgJpZBgBIAEoCRIOCgZzb3VyY2UYAiABKAkiWwocR2V0U2tpbGxHYWxsZXJ5QXVkaXRSZXNwb25zZRI7CgZyZXN1bHQYASABKAsyKy5oYWdpY29kZS5jb21tdW5pdHkudjEuU2tpbGxHYWxsZXJ5QXVkaXREdG8itAEKHFNraWxsR2FsbGVyeUF1ZGl0UHJvdmlkZXJEdG8SEAoIcHJvdmlkZXIYASABKAkSEQoEcmlzaxgCIAEoCUgAiAEBEhMKBmFsZXJ0cxgDIAEoBUgBiAEBEhIKBXNjb3JlGAQgASgFSAKIAQESGAoLYW5hbHl6ZWRfYXQYBSABKAlIA4gBAUIHCgVfcmlza0IJCgdfYWxlcnRzQggKBl9zY29yZUIOCgxfYW5hbHl6ZWRfYXQijgEKFFNraWxsR2FsbGVyeUF1ZGl0RHRvEgoKAmlkGAEgASgJEg4KBnNvdXJjZRgCIAEoCRISCgpza2lsbF9zbHVnGAMgASgJEkYKCXByb3ZpZGVycxgEIAMoCzIzLmhhZ2ljb2RlLmNvbW11bml0eS52MS5Ta2lsbEdhbGxlcnlBdWRpdFByb3ZpZGVyRHRvIkIKJEdldFNraWxsR2FsbGVyeUluc3RhbGxDb250ZXh0UmVxdWVzdBIKCgJpZBgBIAEoCRIOCgZzb3VyY2UYAiABKAkibQolR2V0U2tpbGxHYWxsZXJ5SW5zdGFsbENvbnRleHRSZXNwb25zZRJECgZyZXN1bHQYASABKAsyNC5oYWdpY29kZS5jb21tdW5pdHkudjEuU2tpbGxHYWxsZXJ5SW5zdGFsbENvbnRleHREdG8iIQofR2V0VHJ1c3RlZFNraWxsUHJvdmlkZXJzUmVxdWVzdCJuCiBHZXRUcnVzdGVkU2tpbGxQcm92aWRlcnNSZXNwb25zZRJKCgZyZXN1bHQYASABKAsyOi5oYWdpY29kZS5jb21tdW5pdHkudjEuVHJ1c3RlZFNraWxsUHJvdmlkZXJMaXN0UmVzcG9uc2VEdG8ibgohVXBzZXJ0VHJ1c3RlZFNraWxsUHJvdmlkZXJSZXF1ZXN0EkkKBGJvZHkYASABKAsyOy5oYWdpY29kZS5jb21tdW5pdHkudjEuVXBzZXJ0VHJ1c3RlZFNraWxsUHJvdmlkZXJSZXF1ZXN0RHRvInAKIlVwc2VydFRydXN0ZWRTa2lsbFByb3ZpZGVyUmVzcG9uc2USSgoGcmVzdWx0GAEgASgLMjouaGFnaWNvZGUuY29tbXVuaXR5LnYxLlRydXN0ZWRTa2lsbFByb3ZpZGVyTGlzdFJlc3BvbnNlRHRvIm4KIURlbGV0ZVRydXN0ZWRTa2lsbFByb3ZpZGVyUmVxdWVzdBJJCgRib2R5GAEgASgLMjsuaGFnaWNvZGUuY29tbXVuaXR5LnYxLkRlbGV0ZVRydXN0ZWRTa2lsbFByb3ZpZGVyUmVxdWVzdER0byJwCiJEZWxldGVUcnVzdGVkU2tpbGxQcm92aWRlclJlc3BvbnNlEkoKBnJlc3VsdBgBIAEoCzI6LmhhZ2ljb2RlLmNvbW11bml0eS52MS5UcnVzdGVkU2tpbGxQcm92aWRlckxpc3RSZXNwb25zZUR0byIjCiFSZXNldFRydXN0ZWRTa2lsbFByb3ZpZGVyc1JlcXVlc3QicAoiUmVzZXRUcnVzdGVkU2tpbGxQcm92aWRlcnNSZXNwb25zZRJKCgZyZXN1bHQYASABKAsyOi5oYWdpY29kZS5jb21tdW5pdHkudjEuVHJ1c3RlZFNraWxsUHJvdmlkZXJMaXN0UmVzcG9uc2VEdG8iUgoTSW5zdGFsbFNraWxsUmVxdWVzdBI7CgRib2R5GAEgASgLMi0uaGFnaWNvZGUuY29tbXVuaXR5LnYxLkluc3RhbGxTa2lsbFJlcXVlc3REdG8iVAoUSW5zdGFsbFNraWxsUmVzcG9uc2USPAoGcmVzdWx0GAEgASgLMiwuaGFnaWNvZGUuY29tbXVuaXR5LnYxLkluc3RhbGxTa2lsbFJlc3VsdER0byL3AQoYTG9jYWxTa2lsbEJ1aWx0SW5JbmZvRHRvEg8KB2VuYWJsZWQYASABKAgSFAoHdmVyc2lvbhgCIAEoCUgAiAEBEhMKBnNvdXJjZRgDIAEoCUgBiAEBEhcKCnJlcG9zaXRvcnkYBCABKAlIAogBARIQCgNyZWYYBSABKAlIA4gBARIRCgRwYXRoGAYgASgJSASIAQESGQoMY29udGVudF9oYXNoGAcgASgJSAWIAQFCCgoIX3ZlcnNpb25CCQoHX3NvdXJjZUINCgtfcmVwb3NpdG9yeUIGCgRfcmVmQgcKBV9wYXRoQg8KDV9jb250ZW50X2hhc2givAIKI0xvY2FsU2tpbGxNYW5hZ2VkSW5zdGFsbE1ldGFkYXRhRHRvEhYKDnNjaGVtYV92ZXJzaW9uGAEgASgFEhAKCHNraWxsX2lkGAIgASgJEg4KBnNvdXJjZRgDIAEoCRISCgpza2lsbF9zbHVnGAQgASgJEhQKB3ZlcnNpb24YBSABKAlIAIgBARIhChRub3JtYWxpemVkX3NraWxsX2tleRgGIAEoCUgBiAEBEh4KEWluc3RhbGxfcmVmZXJlbmNlGAcgASgJSAKIAQESMwoPcmVjb3JkZWRfYXRfdXRjGAggASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEIKCghfdmVyc2lvbkIXChVfbm9ybWFsaXplZF9za2lsbF9rZXlCFAoSX2luc3RhbGxfcmVmZXJlbmNlIosCChFMb2NhbFNraWxsSXRlbUR0bxIKCgJpZBgBIAEoCRIMCgRuYW1lGAIgASgJEg0KBXNjb3BlGAMgASgJEgwKBHBhdGgYBCABKAkSDgoGYWdlbnRzGAUgAygJElwKGG1hbmFnZWRfaW5zdGFsbF9tZXRhZGF0YRgGIAEoCzI6LmhhZ2ljb2RlLmNvbW11bml0eS52MS5Mb2NhbFNraWxsTWFuYWdlZEluc3RhbGxNZXRhZGF0YUR0bxIOCgZvcmlnaW4YByABKAkSQQoIYnVpbHRfaW4YCCABKAsyLy5oYWdpY29kZS5jb21tdW5pdHkudjEuTG9jYWxTa2lsbEJ1aWx0SW5JbmZvRHRvIo8BCh5Mb2NhbFNraWxsSW52ZW50b3J5UmVzcG9uc2VEdG8SNAoQZ2VuZXJhdGVkX2F0X3V0YxgBIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASNwoFaXRlbXMYAiADKAsyKC5oYWdpY29kZS5jb21tdW5pdHkudjEuTG9jYWxTa2lsbEl0ZW1EdG8isQEKG0J1aWx0SW5Ta2lsbERldGFpbFNvdXJjZUR0bxIRCgR0eXBlGAEgASgJSACIAQESFwoKcmVwb3NpdG9yeRgCIAEoCUgBiAEBEhAKA3JlZhgDIAEoCUgCiAEBEhEKBHBhdGgYBCABKAlIA4gBARIQCgN1cmwYBSABKAlIBIgBAUIHCgVfdHlwZUINCgtfcmVwb3NpdG9yeUIGCgRfcmVmQgcKBV9wYXRoQgYKBF91cmwiPAoYQnVpbHRJblNraWxsRmlsZUVudHJ5RHRvEgwKBHBhdGgYASABKAkSEgoKc2l6ZV9ieXRlcxgCIAEoAyI5ChtCdWlsdEluU2tpbGxNZXRhZGF0YVBhaXJEdG8SCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJIo4EChVCdWlsdEluU2tpbGxEZXRhaWxEdG8SDAoEc2x1ZxgBIAEoCRIMCgRuYW1lGAIgASgJEhMKC2Rlc2NyaXB0aW9uGAMgASgJEhQKB3ZlcnNpb24YBCABKAlIAIgBARIPCgdlbmFibGVkGAUgASgIEkQKCG1ldGFkYXRhGAYgAygLMjIuaGFnaWNvZGUuY29tbXVuaXR5LnYxLkJ1aWx0SW5Ta2lsbE1ldGFkYXRhUGFpckR0bxJCCgZzb3VyY2UYByABKAsyMi5oYWdpY29kZS5jb21tdW5pdHkudjEuQnVpbHRJblNraWxsRGV0YWlsU291cmNlRHRvEhkKDGNvbnRlbnRfaGFzaBgIIAEoCUgBiAEBEj4KBWZpbGVzGAkgAygLMi8uaGFnaWNvZGUuY29tbXVuaXR5LnYxLkJ1aWx0SW5Ta2lsbEZpbGVFbnRyeUR0bxISCgpmaWxlX2NvdW50GAogASgFEhgKEHRvdGFsX3NpemVfYnl0ZXMYCyABKAMSFwoPZmlsZXNfdHJ1bmNhdGVkGAwgASgIEhUKDWxpY2Vuc2VfZmlsZXMYDSADKAkSDAoEYm9keRgOIAEoCRIWCg5ib2R5X3RydW5jYXRlZBgPIAEoCBIXCg9ib2R5X3NpemVfYnl0ZXMYECABKANCCgoIX3ZlcnNpb25CDwoNX2NvbnRlbnRfaGFzaCLXAQocVW5pbnN0YWxsTG9jYWxTa2lsbFJlc3VsdER0bxISCgpza2lsbF9uYW1lGAEgASgJEg4KBnN0YXR1cxgCIAEoCRIZCgx1c2VyX21lc3NhZ2UYAyABKAlIAIgBARIfChJkaWFnbm9zdGljX21lc3NhZ2UYBCABKAlIAYgBARIvCgtvY2N1cnJlZF9hdBgFIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCDwoNX3VzZXJfbWVzc2FnZUIVChNfZGlhZ25vc3RpY19tZXNzYWdlIjMKHVVuaW5zdGFsbExvY2FsU2tpbGxSZXF1ZXN0RHRvEhIKCnNraWxsX25hbWUYASABKAkivAEKJFNldEJ1aWx0SW5Ta2lsbEF2YWlsYWJpbGl0eVJlc3VsdER0bxIMCgRzbHVnGAEgASgJEg8KB2VuYWJsZWQYAiABKAgSEQoJc3VjY2VlZGVkGAMgASgIEhkKDHVzZXJfbWVzc2FnZRgEIAEoCUgAiAEBEh8KEmRpYWdub3N0aWNfbWVzc2FnZRgFIAEoCUgBiAEBQg8KDV91c2VyX21lc3NhZ2VCFQoTX2RpYWdub3N0aWNfbWVzc2FnZSJGCiVTZXRCdWlsdEluU2tpbGxBdmFpbGFiaWxpdHlSZXF1ZXN0RHRvEgwKBHNsdWcYASABKAkSDwoHZW5hYmxlZBgCIAEoCCKlAgoiU2tpbGxHYWxsZXJ5UmVwb3NpdG9yeURpc2NvdmVyeUR0bxIMCgRtb2RlGAEgASgJEhwKD3JlcXVlc3RlZF9xdWVyeRgCIAEoCUgAiAEBEh4KEW5vcm1hbGl6ZWRfc291cmNlGAMgASgJSAGIAQESGwoOcmVwb3NpdG9yeV91cmwYBCABKAlIAogBARIPCgdvdXRjb21lGAUgASgJEhcKCmVycm9yX2NvZGUYBiABKAlIA4gBARIUCgdtZXNzYWdlGAcgASgJSASIAQFCEgoQX3JlcXVlc3RlZF9xdWVyeUIUChJfbm9ybWFsaXplZF9zb3VyY2VCEQoPX3JlcG9zaXRvcnlfdXJsQg0KC19lcnJvcl9jb2RlQgoKCF9tZXNzYWdlIuYBCiNUcnVzdGVkU2tpbGxQcm92aWRlclRydXN0U3VtbWFyeUR0bxITCgtwcm92aWRlcl9pZBgBIAEoCRIUCgxkaXNwbGF5X25hbWUYAiABKAkSEwoLYmFkZ2VfbGFiZWwYAyABKAkSHgoRbWF0Y2hlZF9ydWxlX3R5cGUYBCABKAlIAIgBARIfChJtYXRjaGVkX3J1bGVfdmFsdWUYBSABKAlIAYgBARIRCglpc19wcmVzZXQYBiABKAhCFAoSX21hdGNoZWRfcnVsZV90eXBlQhUKE19tYXRjaGVkX3J1bGVfdmFsdWUiwwEKFFNraWxsR2FsbGVyeVNraWxsRHRvEgoKAmlkGAEgASgJEgwKBG5hbWUYAiABKAkSDgoGc291cmNlGAMgASgJEhAKCGluc3RhbGxzGAQgASgFEhkKEWlzX3RydXN0ZWRfc291cmNlGAUgASgIElQKEHRydXN0ZWRfcHJvdmlkZXIYBiABKAsyOi5oYWdpY29kZS5jb21tdW5pdHkudjEuVHJ1c3RlZFNraWxsUHJvdmlkZXJUcnVzdFN1bW1hcnlEdG8i5AEKF1NraWxsR2FsbGVyeVJlc3BvbnNlRHRvEjQKEGdlbmVyYXRlZF9hdF91dGMYASABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEjoKBWl0ZW1zGAIgAygLMisuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlNraWxsR2FsbGVyeVNraWxsRHRvElcKFHJlcG9zaXRvcnlfZGlzY292ZXJ5GAMgASgLMjkuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlNraWxsR2FsbGVyeVJlcG9zaXRvcnlEaXNjb3ZlcnlEdG8i7AUKFVNraWxsR2FsbGVyeURldGFpbER0bxIKCgJpZBgBIAEoCRIOCgZzb3VyY2UYAiABKAkSEgoKc2tpbGxfc2x1ZxgDIAEoCRIYCgtkZXNjcmlwdGlvbhgEIAEoCUgAiAEBEhwKD3JlcG9zaXRvcnlfbmFtZRgFIAEoCUgBiAEBEiEKFHJlcG9zaXRvcnlfZnVsbF9uYW1lGAYgASgJSAKIAQESGwoOcmVwb3NpdG9yeV91cmwYByABKAlIA4gBARImChlyZXBvc2l0b3J5X2RlZmF1bHRfYnJhbmNoGAggASgJSASIAQESHwoScmVwb3NpdG9yeV9wcml2YXRlGAkgASgISAWIAQESFgoOaXNfaW5zdGFsbGFibGUYCiABKAgSGQoRaXNfdHJ1c3RlZF9zb3VyY2UYCyABKAgSVAoQdHJ1c3RlZF9wcm92aWRlchgMIAEoCzI6LmhhZ2ljb2RlLmNvbW11bml0eS52MS5UcnVzdGVkU2tpbGxQcm92aWRlclRydXN0U3VtbWFyeUR0bxIeChFpbnN0YWxsX3JlZmVyZW5jZRgNIAEoCUgGiAEBEiQKF2luc3RhbGxfY29tbWFuZF9wcmV2aWV3GA4gASgJSAeIAQESHAoPaW5zdGFsbF92ZXJzaW9uGA8gASgJSAiIAQESGQoMaW5zdGFsbF9oaW50GBAgASgJSAmIAQFCDgoMX2Rlc2NyaXB0aW9uQhIKEF9yZXBvc2l0b3J5X25hbWVCFwoVX3JlcG9zaXRvcnlfZnVsbF9uYW1lQhEKD19yZXBvc2l0b3J5X3VybEIcChpfcmVwb3NpdG9yeV9kZWZhdWx0X2JyYW5jaEIVChNfcmVwb3NpdG9yeV9wcml2YXRlQhQKEl9pbnN0YWxsX3JlZmVyZW5jZUIaChhfaW5zdGFsbF9jb21tYW5kX3ByZXZpZXdCEgoQX2luc3RhbGxfdmVyc2lvbkIPCg1faW5zdGFsbF9oaW50Iq4DCh1Ta2lsbEdhbGxlcnlJbnN0YWxsQ29udGV4dER0bxIKCgJpZBgBIAEoCRIOCgZzb3VyY2UYAiABKAkSEgoKc2tpbGxfc2x1ZxgDIAEoCRIWCg5pc19pbnN0YWxsYWJsZRgEIAEoCBIZChFpc190cnVzdGVkX3NvdXJjZRgFIAEoCBJUChB0cnVzdGVkX3Byb3ZpZGVyGAYgASgLMjouaGFnaWNvZGUuY29tbXVuaXR5LnYxLlRydXN0ZWRTa2lsbFByb3ZpZGVyVHJ1c3RTdW1tYXJ5RHRvEh4KEWluc3RhbGxfcmVmZXJlbmNlGAcgASgJSACIAQESJAoXaW5zdGFsbF9jb21tYW5kX3ByZXZpZXcYCCABKAlIAYgBARIcCg9pbnN0YWxsX3ZlcnNpb24YCSABKAlIAogBARIZCgxpbnN0YWxsX2hpbnQYCiABKAlIA4gBAUIUChJfaW5zdGFsbF9yZWZlcmVuY2VCGgoYX2luc3RhbGxfY29tbWFuZF9wcmV2aWV3QhIKEF9pbnN0YWxsX3ZlcnNpb25CDwoNX2luc3RhbGxfaGludCJFCiBUcnVzdGVkU2tpbGxQcm92aWRlck1hdGNoUnVsZUR0bxISCgptYXRjaF90eXBlGAEgASgJEg0KBXZhbHVlGAIgASgJIo8CChdUcnVzdGVkU2tpbGxQcm92aWRlckR0bxITCgtwcm92aWRlcl9pZBgBIAEoCRIUCgxkaXNwbGF5X25hbWUYAiABKAkSEwoLYmFkZ2VfbGFiZWwYAyABKAkSEQoJaXNfcHJlc2V0GAQgASgIEhIKCmlzX2VuYWJsZWQYBSABKAgSEgoKc29ydF9vcmRlchgGIAEoBRISCgpydWxlX2NvdW50GAcgASgFEhcKD3NvdXJjZV9leGFtcGxlcxgIIAMoCRJMCgttYXRjaF9ydWxlcxgJIAMoCzI3LmhhZ2ljb2RlLmNvbW11bml0eS52MS5UcnVzdGVkU2tpbGxQcm92aWRlck1hdGNoUnVsZUR0byKrAQojVHJ1c3RlZFNraWxsUHJvdmlkZXJMaXN0UmVzcG9uc2VEdG8SNAoQZ2VuZXJhdGVkX2F0X3V0YxgBIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASDwoHdmVyc2lvbhgCIAEoBRI9CgVpdGVtcxgDIAMoCzIuLmhhZ2ljb2RlLmNvbW11bml0eS52MS5UcnVzdGVkU2tpbGxQcm92aWRlckR0byLxAQokVXBzZXJ0VHJ1c3RlZFNraWxsUHJvdmlkZXJSZXF1ZXN0RHRvEhMKC3Byb3ZpZGVyX2lkGAEgASgJEhQKDGRpc3BsYXlfbmFtZRgCIAEoCRIYCgtiYWRnZV9sYWJlbBgDIAEoCUgAiAEBEhIKCmlzX2VuYWJsZWQYBCABKAgSEgoKc29ydF9vcmRlchgFIAEoBRJMCgttYXRjaF9ydWxlcxgGIAMoCzI3LmhhZ2ljb2RlLmNvbW11bml0eS52MS5UcnVzdGVkU2tpbGxQcm92aWRlck1hdGNoUnVsZUR0b0IOCgxfYmFkZ2VfbGFiZWwiOwokRGVsZXRlVHJ1c3RlZFNraWxsUHJvdmlkZXJSZXF1ZXN0RHRvEhMKC3Byb3ZpZGVyX2lkGAEgASgJIrgDChVJbnN0YWxsU2tpbGxSZXN1bHREdG8SEAoIc2tpbGxfaWQYASABKAkSDgoGc291cmNlGAIgASgJEhIKCnNraWxsX3NsdWcYAyABKAkSIQoUbm9ybWFsaXplZF9za2lsbF9rZXkYBCABKAlIAIgBARIeChFpbnN0YWxsX3JlZmVyZW5jZRgFIAEoCUgBiAEBEhwKD2NvbW1hbmRfcHJldmlldxgGIAEoCUgCiAEBEhQKB3ZlcnNpb24YByABKAlIA4gBARIOCgZzdGF0dXMYCCABKAkSGQoMdXNlcl9tZXNzYWdlGAkgASgJSASIAQESHwoSZGlhZ25vc3RpY19tZXNzYWdlGAogASgJSAWIAQESLwoLb2NjdXJyZWRfYXQYCyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQhcKFV9ub3JtYWxpemVkX3NraWxsX2tleUIUChJfaW5zdGFsbF9yZWZlcmVuY2VCEgoQX2NvbW1hbmRfcHJldmlld0IKCghfdmVyc2lvbkIPCg1fdXNlcl9tZXNzYWdlQhUKE19kaWFnbm9zdGljX21lc3NhZ2UiagoWSW5zdGFsbFNraWxsUmVxdWVzdER0bxIKCgJpZBgBIAEoCRIOCgZzb3VyY2UYAiABKAkSEgoKc2tpbGxfc2x1ZxgDIAEoCRIUCgd2ZXJzaW9uGAQgASgJSACIAQFCCgoIX3ZlcnNpb24iGwoZTGlzdFVzZXJTa2lsbEJhc2VzUmVxdWVzdCJfChpMaXN0VXNlclNraWxsQmFzZXNSZXNwb25zZRJBCgZyZXN1bHQYASABKAsyMS5oYWdpY29kZS5jb21tdW5pdHkudjEuVXNlclNraWxsQmFzZUxpc3RSZXN1bHREdG8iWgoXQWRkVXNlclNraWxsQmFzZVJlcXVlc3QSPwoEYm9keRgBIAEoCzIxLmhhZ2ljb2RlLmNvbW11bml0eS52MS5BZGRVc2VyU2tpbGxCYXNlUmVxdWVzdER0byJZChhBZGRVc2VyU2tpbGxCYXNlUmVzcG9uc2USPQoGcmVzdWx0GAEgASgLMi0uaGFnaWNvZGUuY29tbXVuaXR5LnYxLlVzZXJTa2lsbEJhc2VSZXN1bHREdG8iLQoaUmVtb3ZlVXNlclNraWxsQmFzZVJlcXVlc3QSDwoHYmFzZV9pZBgBIAEoCSJiChtSZW1vdmVVc2VyU2tpbGxCYXNlUmVzcG9uc2USQwoGcmVzdWx0GAEgASgLMjMuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlJlbW92ZVVzZXJTa2lsbEJhc2VSZXN1bHREdG8iLQoaUmVzY2FuVXNlclNraWxsQmFzZVJlcXVlc3QSDwoHYmFzZV9pZBgBIAEoCSJcChtSZXNjYW5Vc2VyU2tpbGxCYXNlUmVzcG9uc2USPQoGcmVzdWx0GAEgASgLMi0uaGFnaWNvZGUuY29tbXVuaXR5LnYxLlVzZXJTa2lsbEJhc2VSZXN1bHREdG8iYAoaU2V0VXNlclNraWxsRW5hYmxlZFJlcXVlc3QSQgoEYm9keRgBIAEoCzI0LmhhZ2ljb2RlLmNvbW11bml0eS52MS5TZXRVc2VyU2tpbGxFbmFibGVkUmVxdWVzdER0byJiChtTZXRVc2VyU2tpbGxFbmFibGVkUmVzcG9uc2USQwoGcmVzdWx0GAEgASgLMjMuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlNldFVzZXJTa2lsbEVuYWJsZWRSZXN1bHREdG8i+AEKEFVzZXJTa2lsbEJhc2VEdG8SCgoCaWQYASABKAkSDQoFbGFiZWwYAiABKAkSDAoEcGF0aBgDIAEoCRIOCgZzdGF0dXMYBCABKAkSGgoNc3RhdHVzX3JlYXNvbhgFIAEoCUgAiAEBEhsKDnN0YXR1c19tZXNzYWdlGAYgASgJSAGIAQESMwoGc2tpbGxzGAcgAygLMiMuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlVzZXJTa2lsbER0bxIYChBza2lsbHNfdHJ1bmNhdGVkGAggASgIQhAKDl9zdGF0dXNfcmVhc29uQhEKD19zdGF0dXNfbWVzc2FnZSL9AQoMVXNlclNraWxsRHRvEgwKBHNsdWcYASABKAkSDAoEbmFtZRgCIAEoCRIYCgtkZXNjcmlwdGlvbhgDIAEoCUgAiAEBEg8KB2VuYWJsZWQYBCABKAgSDgoGc3RhdHVzGAUgASgJEhsKDmNvbmZsaWN0c193aXRoGAYgASgJSAGIAQESPAoIcHJvYmxlbXMYByADKAsyKi5oYWdpY29kZS5jb21tdW5pdHkudjEuVXNlclNraWxsUHJvYmxlbUR0bxIKCgJpZBgIIAEoCRIMCgRwYXRoGAkgASgJQg4KDF9kZXNjcmlwdGlvbkIRCg9fY29uZmxpY3RzX3dpdGgiNAoTVXNlclNraWxsUHJvYmxlbUR0bxIMCgRjb2RlGAEgASgJEg8KB21lc3NhZ2UYAiABKAkiSAoaQWRkVXNlclNraWxsQmFzZVJlcXVlc3REdG8SDAoEcGF0aBgBIAEoCRISCgVsYWJlbBgCIAEoCUgAiAEBQggKBl9sYWJlbCKTAQoaVXNlclNraWxsQmFzZUxpc3RSZXN1bHREdG8SEQoJc3VjY2VlZGVkGAEgASgIEhkKDHVzZXJfbWVzc2FnZRgCIAEoCUgAiAEBEjYKBWJhc2VzGAMgAygLMicuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlVzZXJTa2lsbEJhc2VEdG9CDwoNX3VzZXJfbWVzc2FnZSKOAQoWVXNlclNraWxsQmFzZVJlc3VsdER0bxIRCglzdWNjZWVkZWQYASABKAgSGQoMdXNlcl9tZXNzYWdlGAIgASgJSACIAQESNQoEYmFzZRgDIAEoCzInLmhhZ2ljb2RlLmNvbW11bml0eS52MS5Vc2VyU2tpbGxCYXNlRHRvQg8KDV91c2VyX21lc3NhZ2UibgocUmVtb3ZlVXNlclNraWxsQmFzZVJlc3VsdER0bxIRCglzdWNjZWVkZWQYASABKAgSGQoMdXNlcl9tZXNzYWdlGAIgASgJSACIAQESDwoHYmFzZV9pZBgDIAEoCUIPCg1fdXNlcl9tZXNzYWdlIlUKHVNldFVzZXJTa2lsbEVuYWJsZWRSZXF1ZXN0RHRvEg8KB2Jhc2VfaWQYASABKAkSEgoKc2tpbGxfc2x1ZxgCIAEoCRIPCgdlbmFibGVkGAMgASgIIpMBChxTZXRVc2VyU2tpbGxFbmFibGVkUmVzdWx0RHRvEhEKCXN1Y2NlZWRlZBgBIAEoCBIZCgx1c2VyX21lc3NhZ2UYAiABKAlIAIgBARIPCgdiYXNlX2lkGAMgASgJEhIKCnNraWxsX3NsdWcYBCABKAkSDwoHZW5hYmxlZBgFIAEoCEIPCg1fdXNlcl9tZXNzYWdlMtASChNTa2lsbEdhbGxlcnlTZXJ2aWNlEm0KDkdldExvY2FsU2tpbGxzEiwuaGFnaWNvZGUuY29tbXVuaXR5LnYxLkdldExvY2FsU2tpbGxzUmVxdWVzdBotLmhhZ2ljb2RlLmNvbW11bml0eS52MS5HZXRMb2NhbFNraWxsc1Jlc3BvbnNlEoIBChVHZXRCdWlsdEluU2tpbGxEZXRhaWwSMy5oYWdpY29kZS5jb21tdW5pdHkudjEuR2V0QnVpbHRJblNraWxsRGV0YWlsUmVxdWVzdBo0LmhhZ2ljb2RlLmNvbW11bml0eS52MS5HZXRCdWlsdEluU2tpbGxEZXRhaWxSZXNwb25zZRJ8ChNVbmluc3RhbGxMb2NhbFNraWxsEjEuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlVuaW5zdGFsbExvY2FsU2tpbGxSZXF1ZXN0GjIuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlVuaW5zdGFsbExvY2FsU2tpbGxSZXNwb25zZRKUAQobU2V0QnVpbHRJblNraWxsQXZhaWxhYmlsaXR5EjkuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlNldEJ1aWx0SW5Ta2lsbEF2YWlsYWJpbGl0eVJlcXVlc3QaOi5oYWdpY29kZS5jb21tdW5pdHkudjEuU2V0QnVpbHRJblNraWxsQXZhaWxhYmlsaXR5UmVzcG9uc2UScAoPR2V0U2tpbGxHYWxsZXJ5Ei0uaGFnaWNvZGUuY29tbXVuaXR5LnYxLkdldFNraWxsR2FsbGVyeVJlcXVlc3QaLi5oYWdpY29kZS5jb21tdW5pdHkudjEuR2V0U2tpbGxHYWxsZXJ5UmVzcG9uc2USggEKFUdldFNraWxsR2FsbGVyeURldGFpbBIzLmhhZ2ljb2RlLmNvbW11bml0eS52MS5HZXRTa2lsbEdhbGxlcnlEZXRhaWxSZXF1ZXN0GjQuaGFnaWNvZGUuY29tbXVuaXR5LnYxLkdldFNraWxsR2FsbGVyeURldGFpbFJlc3BvbnNlEn8KFEdldFNraWxsR2FsbGVyeUF1ZGl0EjIuaGFnaWNvZGUuY29tbXVuaXR5LnYxLkdldFNraWxsR2FsbGVyeUF1ZGl0UmVxdWVzdBozLmhhZ2ljb2RlLmNvbW11bml0eS52MS5HZXRTa2lsbEdhbGxlcnlBdWRpdFJlc3BvbnNlEpoBCh1HZXRTa2lsbEdhbGxlcnlJbnN0YWxsQ29udGV4dBI7LmhhZ2ljb2RlLmNvbW11bml0eS52MS5HZXRTa2lsbEdhbGxlcnlJbnN0YWxsQ29udGV4dFJlcXVlc3QaPC5oYWdpY29kZS5jb21tdW5pdHkudjEuR2V0U2tpbGxHYWxsZXJ5SW5zdGFsbENvbnRleHRSZXNwb25zZRKLAQoYR2V0VHJ1c3RlZFNraWxsUHJvdmlkZXJzEjYuaGFnaWNvZGUuY29tbXVuaXR5LnYxLkdldFRydXN0ZWRTa2lsbFByb3ZpZGVyc1JlcXVlc3QaNy5oYWdpY29kZS5jb21tdW5pdHkudjEuR2V0VHJ1c3RlZFNraWxsUHJvdmlkZXJzUmVzcG9uc2USkQEKGlVwc2VydFRydXN0ZWRTa2lsbFByb3ZpZGVyEjguaGFnaWNvZGUuY29tbXVuaXR5LnYxLlVwc2VydFRydXN0ZWRTa2lsbFByb3ZpZGVyUmVxdWVzdBo5LmhhZ2ljb2RlLmNvbW11bml0eS52MS5VcHNlcnRUcnVzdGVkU2tpbGxQcm92aWRlclJlc3BvbnNlEpEBChpEZWxldGVUcnVzdGVkU2tpbGxQcm92aWRlchI4LmhhZ2ljb2RlLmNvbW11bml0eS52MS5EZWxldGVUcnVzdGVkU2tpbGxQcm92aWRlclJlcXVlc3QaOS5oYWdpY29kZS5jb21tdW5pdHkudjEuRGVsZXRlVHJ1c3RlZFNraWxsUHJvdmlkZXJSZXNwb25zZRKRAQoaUmVzZXRUcnVzdGVkU2tpbGxQcm92aWRlcnMSOC5oYWdpY29kZS5jb21tdW5pdHkudjEuUmVzZXRUcnVzdGVkU2tpbGxQcm92aWRlcnNSZXF1ZXN0GjkuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlJlc2V0VHJ1c3RlZFNraWxsUHJvdmlkZXJzUmVzcG9uc2USZwoMSW5zdGFsbFNraWxsEiouaGFnaWNvZGUuY29tbXVuaXR5LnYxLkluc3RhbGxTa2lsbFJlcXVlc3QaKy5oYWdpY29kZS5jb21tdW5pdHkudjEuSW5zdGFsbFNraWxsUmVzcG9uc2USeQoSTGlzdFVzZXJTa2lsbEJhc2VzEjAuaGFnaWNvZGUuY29tbXVuaXR5LnYxLkxpc3RVc2VyU2tpbGxCYXNlc1JlcXVlc3QaMS5oYWdpY29kZS5jb21tdW5pdHkudjEuTGlzdFVzZXJTa2lsbEJhc2VzUmVzcG9uc2UScwoQQWRkVXNlclNraWxsQmFzZRIuLmhhZ2ljb2RlLmNvbW11bml0eS52MS5BZGRVc2VyU2tpbGxCYXNlUmVxdWVzdBovLmhhZ2ljb2RlLmNvbW11bml0eS52MS5BZGRVc2VyU2tpbGxCYXNlUmVzcG9uc2USfAoTUmVtb3ZlVXNlclNraWxsQmFzZRIxLmhhZ2ljb2RlLmNvbW11bml0eS52MS5SZW1vdmVVc2VyU2tpbGxCYXNlUmVxdWVzdBoyLmhhZ2ljb2RlLmNvbW11bml0eS52MS5SZW1vdmVVc2VyU2tpbGxCYXNlUmVzcG9uc2USfAoTUmVzY2FuVXNlclNraWxsQmFzZRIxLmhhZ2ljb2RlLmNvbW11bml0eS52MS5SZXNjYW5Vc2VyU2tpbGxCYXNlUmVxdWVzdBoyLmhhZ2ljb2RlLmNvbW11bml0eS52MS5SZXNjYW5Vc2VyU2tpbGxCYXNlUmVzcG9uc2USfAoTU2V0VXNlclNraWxsRW5hYmxlZBIxLmhhZ2ljb2RlLmNvbW11bml0eS52MS5TZXRVc2VyU2tpbGxFbmFibGVkUmVxdWVzdBoyLmhhZ2ljb2RlLmNvbW11bml0eS52MS5TZXRVc2VyU2tpbGxFbmFibGVkUmVzcG9uc2VCK6oCKFBDb2RlLkh0dHBBcGkuR3JwY0NvbnRyYWN0cy5Db21tdW5pdHkuVjFiBnByb3RvMw",[Ne]),vh=v(ae,1),Wh=v(ae,5),yh=v(ae,7),Ih=v(ae,9),Yh=v(ae,11),Xh=v(ae,13),Bh=v(ae,19),Ch=v(ae,21),Fh=v(ae,23),wh=v(ae,25),kh=v(ae,27),Uh=v(ae,37),Jh=v(ae,39),xh=v(ae,49),Kh=v(ae,50),zh=v(ae,52),Lh=We(ae,0),Is=oe("CiVoYWdpY29kZS9wbGF0Zm9ybS92MS9zdGF0aXN0aWNzLnByb3RvEhRoYWdpY29kZS5wbGF0Zm9ybS52MSJ1ChhHZXRBZ2dyZWdhdGVkRGF0YVJlcXVlc3QSFQoNZm9yY2VfcmVmcmVzaBgBIAEoCBIlChhnaXRfYXV0b19yZWZyZXNoX2VuYWJsZWQYAiABKAhIAIgBAUIbChlfZ2l0X2F1dG9fcmVmcmVzaF9lbmFibGVkIl0KGUdldEFnZ3JlZ2F0ZWREYXRhUmVzcG9uc2USQAoGcmVzdWx0GAEgASgLMjAuaGFnaWNvZGUucGxhdGZvcm0udjEuRGF0YUFnZ3JlZ2F0aW9uUmVzcG9uc2VEdG8iHQobR2V0VG9rZW5Nb25pdG9yVXNhZ2VSZXF1ZXN0ImIKHEdldFRva2VuTW9uaXRvclVzYWdlUmVzcG9uc2USQgoGcmVzdWx0GAEgASgLMjIuaGFnaWNvZGUucGxhdGZvcm0udjEuVG9rZW5Nb25pdG9yVXNhZ2VTbmFwc2hvdER0byK/AQodR2V0VG9rZW5Nb25pdG9ySGlzdG9yeVJlcXVlc3QSKAoEZnJvbRgBIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASJgoCdG8YAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEhYKCXBhZ2Vfc2l6ZRgDIAEoBUgAiAEBEhcKCnBhZ2VfdG9rZW4YBCABKAlIAYgBAUIMCgpfcGFnZV9zaXplQg0KC19wYWdlX3Rva2VuImIKHkdldFRva2VuTW9uaXRvckhpc3RvcnlSZXNwb25zZRJACgZyZXN1bHQYASABKAsyMC5oYWdpY29kZS5wbGF0Zm9ybS52MS5Ub2tlbk1vbml0b3JIaXN0b3J5UGFnZUR0byKTAQoaVG9rZW5Nb25pdG9ySGlzdG9yeVBhZ2VEdG8SQwoHc2FtcGxlcxgBIAMoCzIyLmhhZ2ljb2RlLnBsYXRmb3JtLnYxLlRva2VuTW9uaXRvckhpc3RvcnlTYW1wbGVEdG8SHAoPbmV4dF9wYWdlX3Rva2VuGAIgASgJSACIAQFCEgoQX25leHRfcGFnZV90b2tlbiKhAwocVG9rZW5Nb25pdG9ySGlzdG9yeVNhbXBsZUR0bxIzCg9vYnNlcnZlZF9hdF91dGMYASABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEg4KBnNvdXJjZRgCIAEoCRIOCgZzdGF0dXMYAyABKAkSGwoOZmFpbHVyZV9yZWFzb24YBCABKAlIAIgBARIVCghkYXRlX2tleRgFIAEoCUgBiAEBEhkKDHRvdGFsX3Rva2VucxgGIAEoA0gCiAEBEhUKCGNvc3RfdXNkGAcgASgBSAOIAQESQwoHcGVyaW9kcxgIIAMoCzIyLmhhZ2ljb2RlLnBsYXRmb3JtLnYxLlRva2VuTW9uaXRvckhpc3RvcnlQZXJpb2REdG8SQwoHd2luZG93cxgJIAMoCzIyLmhhZ2ljb2RlLnBsYXRmb3JtLnYxLlRva2VuTW9uaXRvckhpc3RvcnlXaW5kb3dEdG9CEQoPX2ZhaWx1cmVfcmVhc29uQgsKCV9kYXRlX2tleUIPCg1fdG90YWxfdG9rZW5zQgsKCV9jb3N0X3VzZCKOAwocVG9rZW5Nb25pdG9ySGlzdG9yeVBlcmlvZER0bxIOCgZwZXJpb2QYASABKAkSFAoMdG90YWxfdG9rZW5zGAIgASgDEhAKCGNvc3RfdXNkGAMgASgBEh4KEWNhY2hlX3JlYWRfdG9rZW5zGAQgASgDSACIAQESHwoSY2FjaGVfd3JpdGVfdG9rZW5zGAUgASgDSAGIAQESGgoNb3V0cHV0X3Rva2VucxgGIAEoA0gCiAEBEhkKDHRpbWVkX3Rva2VucxgHIAEoA0gDiAEBEiAKE3RpbWVkX291dHB1dF90b2tlbnMYCCABKANIBIgBARIeChF0aW1lZF9kdXJhdGlvbl9tcxgJIAEoA0gFiAEBQhQKEl9jYWNoZV9yZWFkX3Rva2Vuc0IVChNfY2FjaGVfd3JpdGVfdG9rZW5zQhAKDl9vdXRwdXRfdG9rZW5zQg8KDV90aW1lZF90b2tlbnNCFgoUX3RpbWVkX291dHB1dF90b2tlbnNCFAoSX3RpbWVkX2R1cmF0aW9uX21zIp0DChxUb2tlbk1vbml0b3JIaXN0b3J5V2luZG93RHRvEhAKCHByb3ZpZGVyGAEgASgJEhcKCnBsYW5fbGFiZWwYAiABKAlIAIgBARIXCg9wcm92aWRlcl9zdGF0dXMYAyABKAkSDAoEa2luZBgEIAEoCRISCgVsYWJlbBgFIAEoCUgBiAEBEhsKDndpbmRvd19taW51dGVzGAYgASgFSAKIAQESGQoMdXNlZF9wZXJjZW50GAcgASgBSAOIAQESHgoRcmVtYWluaW5nX3BlcmNlbnQYCCABKAFIBIgBARIxCg1yZXNldHNfYXRfdXRjGAkgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBI5ChVzb3VyY2VfdXBkYXRlZF9hdF91dGMYCiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQg0KC19wbGFuX2xhYmVsQggKBl9sYWJlbEIRCg9fd2luZG93X21pbnV0ZXNCDwoNX3VzZWRfcGVyY2VudEIUChJfcmVtYWluaW5nX3BlcmNlbnQidQohR2V0VG9rZW5Nb25pdG9ySG91cmx5VXNhZ2VSZXF1ZXN0EigKBGZyb20YASABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEiYKAnRvGAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCJmCiJHZXRUb2tlbk1vbml0b3JIb3VybHlVc2FnZVJlc3BvbnNlEkAKBnJlc3VsdBgBIAMoCzIwLmhhZ2ljb2RlLnBsYXRmb3JtLnYxLlRva2VuTW9uaXRvckhvdXJseVVzYWdlRHRvItcCChpUb2tlbk1vbml0b3JIb3VybHlVc2FnZUR0bxIyCg5ob3VyX3N0YXJ0X3V0YxgBIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASGgoSdXRjX29mZnNldF9taW51dGVzGAIgASgFEg4KBnRva2VucxgDIAEoAxIQCghjb3N0X3VzZBgEIAEoARIaCg1vdXRwdXRfdG9rZW5zGAUgASgDSACIAQESHgoRY2FjaGVfcmVhZF90b2tlbnMYBiABKANIAYgBARIfChJjYWNoZV93cml0ZV90b2tlbnMYByABKANIAogBARIYChBvYnNlcnZlZF9zZWNvbmRzGAggASgFEhEKCWVzdGltYXRlZBgJIAEoCEIQCg5fb3V0cHV0X3Rva2Vuc0IUChJfY2FjaGVfcmVhZF90b2tlbnNCFQoTX2NhY2hlX3dyaXRlX3Rva2VucyIlCiNHZXRUb2tlblRocm91Z2hwdXRTdGF0aXN0aWNzUmVxdWVzdCJgCiRHZXRUb2tlblRocm91Z2hwdXRTdGF0aXN0aWNzUmVzcG9uc2USOAoGcmVzdWx0GAEgASgLMiguaGFnaWNvZGUucGxhdGZvcm0udjEuVG9rZW5UaHJvdWdocHV0RHRvIkQKIEdldFRva2VuVGhyb3VnaHB1dEhpc3RvcnlSZXF1ZXN0EhQKB21pbnV0ZXMYASABKAVIAIgBAUIKCghfbWludXRlcyJiCiFHZXRUb2tlblRocm91Z2hwdXRIaXN0b3J5UmVzcG9uc2USPQoGcmVzdWx0GAEgAygLMi0uaGFnaWNvZGUucGxhdGZvcm0udjEuVG9rZW5UaHJvdWdocHV0U25hcHNob3QiOAoaR2V0SGVyb0JhdHRsZVJlcG9ydFJlcXVlc3QSEQoEZGF0ZRgBIAEoCUgAiAEBQgcKBV9kYXRlIlgKG0dldEhlcm9CYXR0bGVSZXBvcnRSZXNwb25zZRI5CgZyZXN1bHQYASABKAsyKS5oYWdpY29kZS5wbGF0Zm9ybS52MS5IZXJvQmF0dGxlUmVwb3J0RHRvIkAKIEdldEhhZ2lwb3dlckhpc3RvcnlSZXBvcnRSZXF1ZXN0EhIKBXJhbmdlGAEgASgJSACIAQFCCAoGX3JhbmdlImcKIUdldEhhZ2lwb3dlckhpc3RvcnlSZXBvcnRSZXNwb25zZRJCCgZyZXN1bHQYASABKAsyMi5oYWdpY29kZS5wbGF0Zm9ybS52MS5IYWdpcG93ZXJTdGF0aXN0aWNzUmVwb3J0RHRvIuwCChxHZXRIaXN0b3JpY2FsVGltZWxpbmVSZXF1ZXN0EhgKC2VudGl0eV90eXBlGAEgASgJSACIAQESFgoJZW50aXR5X2lkGAIgASgJSAGIAQESFwoKcHJvamVjdF9pZBgDIAEoCUgCiAEBEhcKCnNlc3Npb25faWQYBCABKAlIA4gBARIzCg9yYW5nZV9zdGFydF91dGMYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEjEKDXJhbmdlX2VuZF91dGMYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEhMKBmN1cnNvchgHIAEoCUgEiAEBEhYKCXBhZ2Vfc2l6ZRgIIAEoBUgFiAEBQg4KDF9lbnRpdHlfdHlwZUIMCgpfZW50aXR5X2lkQg0KC19wcm9qZWN0X2lkQg0KC19zZXNzaW9uX2lkQgkKB19jdXJzb3JCDAoKX3BhZ2Vfc2l6ZSJpCh1HZXRIaXN0b3JpY2FsVGltZWxpbmVSZXNwb25zZRJICgZyZXN1bHQYASABKAsyOC5oYWdpY29kZS5wbGF0Zm9ybS52MS5IaXN0b3JpY2FsVGltZWxpbmVRdWVyeVJlc3BvbnNlRHRvIiUKI0dldEhpc3RvcmljYWxUaW1lbGluZVNhbXBsZXNSZXF1ZXN0InIKJEdldEhpc3RvcmljYWxUaW1lbGluZVNhbXBsZXNSZXNwb25zZRJKCgZyZXN1bHQYASABKAsyOi5oYWdpY29kZS5wbGF0Zm9ybS52MS5IaXN0b3JpY2FsVGltZWxpbmVTYW1wbGVzUmVzcG9uc2VEdG8iqgEKFkFnZ3JlZ2F0aW9uTWV0YWRhdGFEdG8SLQoJdGltZXN0YW1wGAEgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIWCg50b3RhbF9wcm9qZWN0cxgCIAEoBRIaChJ0b3RhbF9yZXBvc2l0b3JpZXMYAyABKAUSFwoPZmFpbGVkX3Byb2plY3RzGAQgASgFEhQKDGhhc19mYWlsdXJlcxgFIAEoCCKyBQoYUmVwb3NpdG9yeUFnZ3JlZ2F0aW9uRHRvEhEKBGNvZGUYASABKAlIAIgBARIMCgRuYW1lGAIgASgJEgwKBHBhdGgYAyABKAkSFQoNcmVsYXRpdmVfcGF0aBgEIAEoCRIUCgxkaXNwbGF5X25hbWUYBSABKAkSEQoEdHlwZRgGIAEoCUgBiAEBEgwKBHRhZ3MYByADKAkSEQoEaWNvbhgIIAEoCUgCiAEBEhAKA3VybBgJIAEoCUgDiAEBEhgKEGNvbGxhcHNlX3RvX21vcmUYCiABKAgSGQoRaXNfdmFsaWRfZ2l0X3JlcG8YCyABKAgSHAoUZ2l0X3N0YXR1c19hdmFpbGFibGUYDCABKAgSEwoGYnJhbmNoGA0gASgJSASIAQESHwoXaGFzX3VuY29tbWl0dGVkX2NoYW5nZXMYDiABKAgSHQoVdW5wdXNoZWRfY29tbWl0X2NvdW50GA8gASgFEhsKE2hhc190cmFja2luZ19icmFuY2gYECABKAgSNQoPdHJhY2tpbmdfYnJhbmNoGBEgASgLMhwuZ29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlEhMKC2FoZWFkX2NvdW50GBIgASgFEhQKDGJlaGluZF9jb3VudBgTIAEoBRIXCgpzeW5jX3N0YXRlGBQgASgJSAWIAQESEwoLaXNfb3B0aW9uYWwYFSABKAgSFAoMaXNfc2FuaXRpemVkGBYgASgIEhsKE3Nhbml0aXphdGlvbl9yZWFzb24YFyABKAkSGAoQaGFzX25hbWVfd2FybmluZxgYIAEoCBIVCg1uYW1lX3dhcm5pbmdzGBkgAygJQgcKBV9jb2RlQgcKBV90eXBlQgcKBV9pY29uQgYKBF91cmxCCQoHX2JyYW5jaEINCgtfc3luY19zdGF0ZSK6BAoVUHJvamVjdEFnZ3JlZ2F0aW9uRHRvEgoKAmlkGAEgASgJEgwKBG5hbWUYAiABKAkSDAoEcGF0aBgDIAEoCRIYCgtkZXNjcmlwdGlvbhgEIAEoCUgAiAEBEhUKDWlzX21vbm9fc3BlY3MYBSABKAgSHwoSbW9ub19zcGVjc192ZXJzaW9uGAYgASgJSAGIAQESJgoZbW9ub19zcGVjc19yZXBvX2RpcmVjdG9yeRgHIAEoCUgCiAEBEisKHm1vbm9fc3BlY3NfY29tbWl0X3doZW5fYXJjaGl2ZRgIIAEoCEgDiAEBEkQKDHJlcG9zaXRvcmllcxgJIAMoCzIuLmhhZ2ljb2RlLnBsYXRmb3JtLnYxLlJlcG9zaXRvcnlBZ2dyZWdhdGlvbkR0bxJBCh1naXRfc25hcHNob3RfcmVmcmVzaGVkX2F0X3V0YxgKIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASIQoZZ2l0X3NuYXBzaG90X3NlcnZlZF9zdGFsZRgLIAEoCBIrCgVlcnJvchgMIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZRIRCgloYXNfZXJyb3IYDSABKAhCDgoMX2Rlc2NyaXB0aW9uQhUKE19tb25vX3NwZWNzX3ZlcnNpb25CHAoaX21vbm9fc3BlY3NfcmVwb19kaXJlY3RvcnlCIQofX21vbm9fc3BlY3NfY29tbWl0X3doZW5fYXJjaGl2ZSKbAQoaRGF0YUFnZ3JlZ2F0aW9uUmVzcG9uc2VEdG8SPQoIcHJvamVjdHMYASADKAsyKy5oYWdpY29kZS5wbGF0Zm9ybS52MS5Qcm9qZWN0QWdncmVnYXRpb25EdG8SPgoIbWV0YWRhdGEYAiABKAsyLC5oYWdpY29kZS5wbGF0Zm9ybS52MS5BZ2dyZWdhdGlvbk1ldGFkYXRhRHRvIqkDChxUb2tlbk1vbml0b3JVc2FnZVNuYXBzaG90RHRvEg4KBnN0YXR1cxgBIAEoCRIOCgZzb3VyY2UYAiABKAkSGwoOZmFpbHVyZV9yZWFzb24YAyABKAlIAIgBARIVCghkYXRlX2tleRgEIAEoCUgBiAEBEhkKDHRvdGFsX3Rva2VucxgFIAEoA0gCiAEBEhUKCGNvc3RfdXNkGAYgASgBSAOIAQESLwoLcmVhZF9hdF91dGMYByABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEhgKEHNuYXBzaG90X3ZlcnNpb24YCCABKAMSOwoGbGltaXRzGAkgASgLMisuaGFnaWNvZGUucGxhdGZvcm0udjEuVG9rZW5Nb25pdG9yTGltaXRzRHRvEj0KB3BlcmlvZHMYCiABKAsyLC5oYWdpY29kZS5wbGF0Zm9ybS52MS5Ub2tlbk1vbml0b3JQZXJpb2RzRHRvQhEKD19mYWlsdXJlX3JlYXNvbkILCglfZGF0ZV9rZXlCDwoNX3RvdGFsX3Rva2Vuc0ILCglfY29zdF91c2QiugEKFVRva2VuTW9uaXRvckxpbWl0c0R0bxIyCg51cGRhdGVkX2F0X3V0YxgBIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASFwoKcmVmcmVzaF9tcxgCIAEoBUgAiAEBEkUKCXByb3ZpZGVycxgDIAMoCzIyLmhhZ2ljb2RlLnBsYXRmb3JtLnYxLlRva2VuTW9uaXRvckxpbWl0UHJvdmlkZXJEdG9CDQoLX3JlZnJlc2hfbXMi0wIKHFRva2VuTW9uaXRvckxpbWl0UHJvdmlkZXJEdG8SEAoIcHJvdmlkZXIYASABKAkSDgoGc3RhdHVzGAIgASgJEhcKCnBsYW5fbGFiZWwYAyABKAlIAIgBARIyCg51cGRhdGVkX2F0X3V0YxgEIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASQQoHd2luZG93cxgFIAMoCzIwLmhhZ2ljb2RlLnBsYXRmb3JtLnYxLlRva2VuTW9uaXRvckxpbWl0V2luZG93RHRvEhgKC2JhbGFuY2VfdXNkGAYgASgBSAGIAQESSAoNcmVzZXRfY3JlZGl0cxgHIAEoCzIxLmhhZ2ljb2RlLnBsYXRmb3JtLnYxLlRva2VuTW9uaXRvclJlc2V0Q3JlZGl0c0R0b0INCgtfcGxhbl9sYWJlbEIOCgxfYmFsYW5jZV91c2Qi9QMKGlRva2VuTW9uaXRvckxpbWl0V2luZG93RHRvEgwKBGtpbmQYASABKAkSEgoFbGFiZWwYAiABKAlIAIgBARIZCgx1c2VkX3BlcmNlbnQYAyABKAFIAYgBARIeChFyZW1haW5pbmdfcGVyY2VudBgEIAEoAUgCiAEBEhEKBHVzZWQYBSABKAFIA4gBARISCgVsaW1pdBgGIAEoAUgEiAEBEhYKCXJlbWFpbmluZxgHIAEoAUgFiAEBEhUKCGN1cnJlbmN5GAggASgJSAaIAQESMQoNcmVzZXRzX2F0X3V0YxgJIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASGwoOd2luZG93X21pbnV0ZXMYCiABKAVIB4gBARIeChFyZXNldF9kZXNjcmlwdGlvbhgLIAEoCUgIiAEBEhoKDW1ldGVyX3Zpc2libGUYDCABKAhICYgBAUIICgZfbGFiZWxCDwoNX3VzZWRfcGVyY2VudEIUChJfcmVtYWluaW5nX3BlcmNlbnRCBwoFX3VzZWRCCAoGX2xpbWl0QgwKCl9yZW1haW5pbmdCCwoJX2N1cnJlbmN5QhEKD193aW5kb3dfbWludXRlc0IUChJfcmVzZXRfZGVzY3JpcHRpb25CEAoOX21ldGVyX3Zpc2libGUivQEKG1Rva2VuTW9uaXRvclJlc2V0Q3JlZGl0c0R0bxIcCg9hdmFpbGFibGVfY291bnQYASABKAVIAIgBARI3ChNuZXh0X2V4cGlyZXNfYXRfdXRjGAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIzCg9leHBpcmF0aW9uc191dGMYAyADKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQhIKEF9hdmFpbGFibGVfY291bnQizwEKFlRva2VuTW9uaXRvclBlcmlvZHNEdG8SOgoFdG9kYXkYASABKAsyKy5oYWdpY29kZS5wbGF0Zm9ybS52MS5Ub2tlbk1vbml0b3JQZXJpb2REdG8SOgoFbW9udGgYAiABKAsyKy5oYWdpY29kZS5wbGF0Zm9ybS52MS5Ub2tlbk1vbml0b3JQZXJpb2REdG8SPQoIYWxsX3RpbWUYAyABKAsyKy5oYWdpY29kZS5wbGF0Zm9ybS52MS5Ub2tlbk1vbml0b3JQZXJpb2REdG8iigQKFVRva2VuTW9uaXRvclBlcmlvZER0bxIUCgx0b3RhbF90b2tlbnMYASABKAMSEAoIY29zdF91c2QYAiABKAESHgoRY2FjaGVfcmVhZF90b2tlbnMYAyABKANIAIgBARIfChJjYWNoZV93cml0ZV90b2tlbnMYBCABKANIAYgBARIaCg1vdXRwdXRfdG9rZW5zGAUgASgDSAKIAQESGQoMdGltZWRfdG9rZW5zGAYgASgDSAOIAQESIAoTdGltZWRfb3V0cHV0X3Rva2VucxgHIAEoA0gEiAEBEh4KEXRpbWVkX2R1cmF0aW9uX21zGAggASgDSAWIAQESTQoMY2FwYWJpbGl0aWVzGAkgASgLMjcuaGFnaWNvZGUucGxhdGZvcm0udjEuVG9rZW5Nb25pdG9yUGVyaW9kQ2FwYWJpbGl0aWVzRHRvEkIKB2NsaWVudHMYCiADKAsyMS5oYWdpY29kZS5wbGF0Zm9ybS52MS5Ub2tlbk1vbml0b3JQZXJpb2RDbGllbnREdG9CFAoSX2NhY2hlX3JlYWRfdG9rZW5zQhUKE19jYWNoZV93cml0ZV90b2tlbnNCEAoOX291dHB1dF90b2tlbnNCDwoNX3RpbWVkX3Rva2Vuc0IWChRfdGltZWRfb3V0cHV0X3Rva2Vuc0IUChJfdGltZWRfZHVyYXRpb25fbXMifwohVG9rZW5Nb25pdG9yUGVyaW9kQ2FwYWJpbGl0aWVzRHRvEh0KEHRva2VuX2NvbXBvbmVudHMYASABKAhIAIgBARIXCgp0aHJvdWdocHV0GAIgASgISAGIAQFCEwoRX3Rva2VuX2NvbXBvbmVudHNCDQoLX3Rocm91Z2hwdXQiTwobVG9rZW5Nb25pdG9yUGVyaW9kQ2xpZW50RHRvEg4KBmNsaWVudBgBIAEoCRIOCgZ0b2tlbnMYAiABKAMSEAoIY29zdF91c2QYAyABKAEi2AIKElRva2VuVGhyb3VnaHB1dER0bxIfChdpbnB1dF90b2tlbnNfcGVyX21pbnV0ZRgBIAEoBRIgChhvdXRwdXRfdG9rZW5zX3Blcl9taW51dGUYAiABKAUSGgoSdG90YWxfaW5wdXRfdG9rZW5zGAMgASgDEhsKE3RvdGFsX291dHB1dF90b2tlbnMYBCABKAMSMAoMbGFzdF91cGRhdGVkGAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBInCh9yZWd1bGFyX2lucHV0X3Rva2Vuc19wZXJfbWludXRlGAYgASgFEiUKHWNhY2hlX2lucHV0X3Rva2Vuc19wZXJfbWludXRlGAcgASgFEiIKGnRvdGFsX3JlZ3VsYXJfaW5wdXRfdG9rZW5zGAggASgDEiAKGHRvdGFsX2NhY2hlX2lucHV0X3Rva2VucxgJIAEoAyKvAQoXVG9rZW5UaHJvdWdocHV0U25hcHNob3QSLQoJdGltZXN0YW1wGAEgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIUCgxpbnB1dF90b2tlbnMYAiABKAUSFQoNb3V0cHV0X3Rva2VucxgDIAEoBRIcChRyZWd1bGFyX2lucHV0X3Rva2VucxgEIAEoBRIaChJjYWNoZV9pbnB1dF90b2tlbnMYBSABKAUi4AEKLEhlcm9CYXR0bGVSZXBvcnRMYXRlc3RVbmxvY2tlZEFjaGlldmVtZW50RHRvEhUKDWNhbm9uaWNhbF9rZXkYASABKAkSEAoIbmFtZV9rZXkYAiABKAkSEwoLc291cmNlX2tpbmQYAyABKAkSMwoPdW5sb2NrZWRfYXRfdXRjGAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIWCg5wcm9ncmVzc19hZnRlchgFIAEoBRIOCgZ0YXJnZXQYBiABKAUSFQoNcmV3YXJkX2Ftb3VudBgHIAEoAyK7AQopSGVyb0JhdHRsZVJlcG9ydFBlbmRpbmdBY2hpZXZlbWVudEhpbnREdG8SFQoNY2Fub25pY2FsX2tleRgBIAEoCRIQCghuYW1lX2tleRgCIAEoCRIRCglnb2FsX3R5cGUYAyABKAkSEAoIcHJvZ3Jlc3MYBCABKAUSDgoGdGFyZ2V0GAUgASgFEhcKD3JlbWFpbmluZ19jb3VudBgGIAEoBRIXCg9jb21wbGV0aW9uX3JhdGUYByABKAEivQIKJUhlcm9CYXR0bGVSZXBvcnRBY2hpZXZlbWVudFN1bW1hcnlEdG8SGAoQaGFzX2FyY2hpdmVfZGF0YRgBIAEoCBIXCg9jb21wbGV0ZWRfY291bnQYAiABKAUSEwoLdG90YWxfY291bnQYAyABKAUSFwoPY29tcGxldGlvbl9yYXRlGAQgASgBElsKD2xhdGVzdF91bmxvY2tlZBgFIAEoCzJCLmhhZ2ljb2RlLnBsYXRmb3JtLnYxLkhlcm9CYXR0bGVSZXBvcnRMYXRlc3RVbmxvY2tlZEFjaGlldmVtZW50RHRvElYKDXBlbmRpbmdfaGludHMYBiADKAsyPy5oYWdpY29kZS5wbGF0Zm9ybS52MS5IZXJvQmF0dGxlUmVwb3J0UGVuZGluZ0FjaGlldmVtZW50SGludER0byL0AgojSGVyb0JhdHRsZVJlcG9ydEhpZ2hsaWdodFNlc3Npb25EdG8SEgoKc2Vzc2lvbl9pZBgBIAEoCRISCgV0aXRsZRgCIAEoCUgAiAEBEhkKDHNlc3Npb25fY29kZRgDIAEoCUgBiAEBEhkKDHNlc3Npb25fdHlwZRgEIAEoCUgCiAEBEhoKDXByb3Bvc2FsX25hbWUYBSABKAlIA4gBARIWCg5hY3Rpdml0eV9jb3VudBgGIAEoBRIiChpjb21wbGV0ZWRfYXNzaXN0YW5jZV9jb3VudBgHIAEoBRIfChdwcm9wb3NhbF9leGVjdXRlZF9jb3VudBgIIAEoBRI4ChRsYXN0X2FjdGl2aXR5X2F0X3V0YxgJIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCCAoGX3RpdGxlQg8KDV9zZXNzaW9uX2NvZGVCDwoNX3Nlc3Npb25fdHlwZUIQCg5fcHJvcG9zYWxfbmFtZSKnAwoiSGVyb0JhdHRsZVJlcG9ydEFjdGl2aXR5U3VtbWFyeUR0bxIdChVzZXNzaW9uX2NyZWF0ZWRfY291bnQYASABKAUSIgoaY2hhdF9zZXNzaW9uX2NyZWF0ZWRfY291bnQYAiABKAUSJgoecHJvcG9zYWxfc2Vzc2lvbl9jcmVhdGVkX2NvdW50GAMgASgFEhYKDnByb3Bvc2FsX2NvdW50GAQgASgFEiAKGHByb3Bvc2FsX2dlbmVyYXRlZF9jb3VudBgFIAEoBRIfChdwcm9wb3NhbF9leGVjdXRlZF9jb3VudBgGIAEoBRIfChdwcm9wb3NhbF9hcmNoaXZlZF9jb3VudBgHIAEoBRIiChphc3Npc3RhbmNlX2NvbXBsZXRlZF9jb3VudBgIIAEoBRIfChdhc3Npc3RhbmNlX2ZhaWxlZF9jb3VudBgJIAEoBRJVChJoaWdobGlnaHRfc2Vzc2lvbnMYCiADKAsyOS5oYWdpY29kZS5wbGF0Zm9ybS52MS5IZXJvQmF0dGxlUmVwb3J0SGlnaGxpZ2h0U2Vzc2lvbkR0byJGCiNIZXJvQmF0dGxlUmVwb3J0Q29tcGFyaXNvbk1ldHJpY0R0bxIQCghwcmV2aW91cxgBIAEoAxINCgVkZWx0YRgCIAEoAyK8BQodSGVyb0JhdHRsZVJlcG9ydENvbXBhcmlzb25EdG8SGAoQaGFzX3ByZXZpb3VzX2RheRgBIAEoCBIaCg1wcmV2aW91c19kYXRlGAIgASgJSACIAQESVAoRYWN0aXZlX2hlcm9fY291bnQYAyABKAsyOS5oYWdpY29kZS5wbGF0Zm9ybS52MS5IZXJvQmF0dGxlUmVwb3J0Q29tcGFyaXNvbk1ldHJpY0R0bxJSCg9leGVjdXRpb25fY291bnQYBCABKAsyOS5oYWdpY29kZS5wbGF0Zm9ybS52MS5IZXJvQmF0dGxlUmVwb3J0Q29tcGFyaXNvbk1ldHJpY0R0bxJSCg90b29sX2NhbGxfY291bnQYBSABKAsyOS5oYWdpY29kZS5wbGF0Zm9ybS52MS5IZXJvQmF0dGxlUmVwb3J0Q29tcGFyaXNvbk1ldHJpY0R0bxJPCgx0b3RhbF90b2tlbnMYBiABKAsyOS5oYWdpY29kZS5wbGF0Zm9ybS52MS5IZXJvQmF0dGxlUmVwb3J0Q29tcGFyaXNvbk1ldHJpY0R0bxJYChVzZXNzaW9uX2NyZWF0ZWRfY291bnQYByABKAsyOS5oYWdpY29kZS5wbGF0Zm9ybS52MS5IZXJvQmF0dGxlUmVwb3J0Q29tcGFyaXNvbk1ldHJpY0R0bxJRCg5wcm9wb3NhbF9jb3VudBgIIAEoCzI5LmhhZ2ljb2RlLnBsYXRmb3JtLnYxLkhlcm9CYXR0bGVSZXBvcnRDb21wYXJpc29uTWV0cmljRHRvElcKFGhhZ2lwb3dlcl9uZXRfY2hhbmdlGAkgASgLMjkuaGFnaWNvZGUucGxhdGZvcm0udjEuSGVyb0JhdHRsZVJlcG9ydENvbXBhcmlzb25NZXRyaWNEdG9CEAoOX3ByZXZpb3VzX2RhdGUixgEKG0hlcm9CYXR0bGVSZXBvcnRFeGVjdXRvckR0bxIVCg1leGVjdXRvcl90eXBlGAEgASgJEhIKCmhlcm9fY291bnQYAiABKAUSGQoRYWN0aXZlX2hlcm9fY291bnQYAyABKAUSFwoPZXhlY3V0aW9uX2NvdW50GAQgASgFEhcKD3Rvb2xfY2FsbF9jb3VudBgFIAEoBRIUCgx0b3RhbF90b2tlbnMYBiABKAMSGQoRdG90YWxfZHVyYXRpb25fbXMYByABKAMiuAEKIUhlcm9CYXR0bGVSZXBvcnRIYWdpcG93ZXJQb2ludER0bxI1ChFidWNrZXRfbWludXRlX3V0YxgBIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASDwoHYmFsYW5jZRgCIAEoAxIVCg10b3RhbF9iYWxhbmNlGAMgASgDEiEKGWFjY3VtdWxhdGVkX3RvdGFsX2JhbGFuY2UYBCABKAMSEQoJaXNfZmlsbGVkGAUgASgIItwDChxIZXJvQmF0dGxlUmVwb3J0SGFnaXBvd2VyRHRvEjMKD3JhbmdlX3N0YXJ0X3V0YxgBIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASMQoNcmFuZ2VfZW5kX3V0YxgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASFgoOYnVja2V0X21pbnV0ZXMYAyABKAUSFwoPaGFzX2ZpbGxlZF9nYXBzGAQgASgIEhwKFGhhc19yZWNvcmRlZF9oaXN0b3J5GAUgASgIEh4KFmN1cnJlbnRfcHVibGljX2JhbGFuY2UYBiABKAMSHQoVY3VycmVudF90b3RhbF9iYWxhbmNlGAcgASgDEikKIWN1cnJlbnRfYWNjdW11bGF0ZWRfdG90YWxfYmFsYW5jZRgIIAEoAxISCgpuZXRfY2hhbmdlGAkgASgDEjcKE2xhc3RfdXBkYXRlZF9hdF91dGMYCiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEk4KDXB1YmxpY19zZXJpZXMYCyADKAsyNy5oYWdpY29kZS5wbGF0Zm9ybS52MS5IZXJvQmF0dGxlUmVwb3J0SGFnaXBvd2VyUG9pbnREdG8iiQQKF0hlcm9CYXR0bGVSZXBvcnRIZXJvRHRvEg8KB2hlcm9faWQYASABKAkSEQoJaGVyb19uYW1lGAIgASgJEhYKCWhlcm9faWNvbhgDIAEoCUgAiAEBEhUKDWV4ZWN1dG9yX3R5cGUYBCABKAkSEgoFbW9kZWwYBSABKAlIAYgBARIYCgtkZXNjcmlwdGlvbhgGIAEoCUgCiAEBEgwKBHJhbmsYByABKAUSDgoGc3RhdHVzGAggASgJEg0KBWdyYWRlGAkgASgJEhQKDGJhdHRsZV9zY29yZRgKIAEoBRIXCg9leGVjdXRpb25fY291bnQYCyABKAUSFwoPdG9vbF9jYWxsX2NvdW50GAwgASgFEhQKDGlucHV0X3Rva2VucxgNIAEoAxIaChJjYWNoZV9pbnB1dF90b2tlbnMYDiABKAMSFQoNb3V0cHV0X3Rva2VucxgPIAEoAxIbChNjYWNoZV9vdXRwdXRfdG9rZW5zGBAgASgDEhQKDHRvdGFsX3Rva2VucxgRIAEoAxIZChF0b3RhbF9kdXJhdGlvbl9tcxgSIAEoAxI5ChVsYXN0X2NvbXBsZXRlZF9hdF91dGMYEyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQgwKCl9oZXJvX2ljb25CCAoGX21vZGVsQg4KDF9kZXNjcmlwdGlvbiKAAgoiSGVyb0JhdHRsZVJlcG9ydFByb2plY3RBY3Rpdml0eUR0bxISCgpwcm9qZWN0X2lkGAEgASgJEhEKBG5hbWUYAiABKAlIAIgBARIWCg5hY3Rpdml0eV9jb3VudBgDIAEoBRIdChVzZXNzaW9uX2NyZWF0ZWRfY291bnQYBCABKAUSFgoOcHJvcG9zYWxfY291bnQYBSABKAUSIgoaYXNzaXN0YW5jZV9jb21wbGV0ZWRfY291bnQYBiABKAUSHwoXYXNzaXN0YW5jZV9mYWlsZWRfY291bnQYByABKAUSFgoOYWN0aXZpdHlfc2hhcmUYCCABKAFCBwoFX25hbWUi+gEKIUhlcm9CYXR0bGVSZXBvcnRQcm9qZWN0UHJvZmlsZUR0bxIQCghoYXNfZGF0YRgBIAEoCBIdChVwcm9qZWN0X2NyZWF0ZWRfY291bnQYAiABKAMSHQoVc2Vzc2lvbl9jcmVhdGVkX2NvdW50GAMgASgDEiAKGHByb3Bvc2FsX2dlbmVyYXRlZF9jb3VudBgEIAEoAxIfChdwcm9wb3NhbF9leGVjdXRlZF9jb3VudBgFIAEoAxITCgt0b2tlbl90b3RhbBgGIAEoAxItCglhc19vZl91dGMYByABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIo0CChtIZXJvQmF0dGxlUmVwb3J0UHJvamVjdHNEdG8SGwoTdG90YWxfcHJvamVjdF9jb3VudBgBIAEoBRIcChRhY3RpdmVfcHJvamVjdF9jb3VudBgCIAEoBRIZChFuZXdfcHJvamVjdF9jb3VudBgDIAEoBRJOCgx0b3BfcHJvamVjdHMYBCADKAsyOC5oYWdpY29kZS5wbGF0Zm9ybS52MS5IZXJvQmF0dGxlUmVwb3J0UHJvamVjdEFjdGl2aXR5RHRvEkgKB3Byb2ZpbGUYBSABKAsyNy5oYWdpY29kZS5wbGF0Zm9ybS52MS5IZXJvQmF0dGxlUmVwb3J0UHJvamVjdFByb2ZpbGVEdG8irQIKFkhlcm9CYXR0bGVSZXBvcnRNdnBEdG8SDwoHaGVyb19pZBgBIAEoCRIRCgloZXJvX25hbWUYAiABKAkSFgoJaGVyb19pY29uGAMgASgJSACIAQESFQoNZXhlY3V0b3JfdHlwZRgEIAEoCRISCgVtb2RlbBgFIAEoCUgBiAEBEgwKBHJhbmsYBiABKAUSFAoMYmF0dGxlX3Njb3JlGAcgASgFEg0KBWdyYWRlGAggASgJEhcKD2V4ZWN1dGlvbl9jb3VudBgJIAEoBRIXCg90b29sX2NhbGxfY291bnQYCiABKAUSFAoMdG90YWxfdG9rZW5zGAsgASgDEhkKEXRvdGFsX2R1cmF0aW9uX21zGAwgASgDQgwKCl9oZXJvX2ljb25CCAoGX21vZGVsItkCChpIZXJvQmF0dGxlUmVwb3J0U3VtbWFyeUR0bxIYChB0b3RhbF9oZXJvX2NvdW50GAEgASgFEhkKEWFjdGl2ZV9oZXJvX2NvdW50GAIgASgFEhoKEnRvdGFsX2JhdHRsZV9zY29yZRgDIAEoBRIYChB0b3RhbF90b29sX2NhbGxzGAQgASgFEhQKDHRvdGFsX3Rva2VucxgFIAEoAxIZChF0b3RhbF9kdXJhdGlvbl9tcxgGIAEoAxIUCgxpbnB1dF90b2tlbnMYByABKAMSGgoSY2FjaGVfaW5wdXRfdG9rZW5zGAggASgDEhUKDW91dHB1dF90b2tlbnMYCSABKAMSGwoTY2FjaGVfb3V0cHV0X3Rva2VucxgKIAEoAxI5CgNtdnAYCyABKAsyLC5oYWdpY29kZS5wbGF0Zm9ybS52MS5IZXJvQmF0dGxlUmVwb3J0TXZwRHRvIqYGChNIZXJvQmF0dGxlUmVwb3J0RHRvEhMKC3JlcG9ydF9kYXRlGAEgASgJEjQKEGdlbmVyYXRlZF9hdF91dGMYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEhQKDHRpbWVfem9uZV9pZBgDIAEoCRI1ChFjb3ZlcmVkX3N0YXJ0X3V0YxgEIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASMwoPY292ZXJlZF9lbmRfdXRjGAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBJFCgloYWdpcG93ZXIYBiABKAsyMi5oYWdpY29kZS5wbGF0Zm9ybS52MS5IZXJvQmF0dGxlUmVwb3J0SGFnaXBvd2VyRHRvEkEKB3N1bW1hcnkYByABKAsyMC5oYWdpY29kZS5wbGF0Zm9ybS52MS5IZXJvQmF0dGxlUmVwb3J0U3VtbWFyeUR0bxJRCgxhY2hpZXZlbWVudHMYCCABKAsyOy5oYWdpY29kZS5wbGF0Zm9ybS52MS5IZXJvQmF0dGxlUmVwb3J0QWNoaWV2ZW1lbnRTdW1tYXJ5RHRvElIKEGFjdGl2aXR5X3N1bW1hcnkYCSABKAsyOC5oYWdpY29kZS5wbGF0Zm9ybS52MS5IZXJvQmF0dGxlUmVwb3J0QWN0aXZpdHlTdW1tYXJ5RHRvEkcKCmNvbXBhcmlzb24YCiABKAsyMy5oYWdpY29kZS5wbGF0Zm9ybS52MS5IZXJvQmF0dGxlUmVwb3J0Q29tcGFyaXNvbkR0bxJECglleGVjdXRvcnMYCyADKAsyMS5oYWdpY29kZS5wbGF0Zm9ybS52MS5IZXJvQmF0dGxlUmVwb3J0RXhlY3V0b3JEdG8SQwoIcHJvamVjdHMYDCABKAsyMS5oYWdpY29kZS5wbGF0Zm9ybS52MS5IZXJvQmF0dGxlUmVwb3J0UHJvamVjdHNEdG8SPQoGaGVyb2VzGA0gAygLMi0uaGFnaWNvZGUucGxhdGZvcm0udjEuSGVyb0JhdHRsZVJlcG9ydEhlcm9EdG8itQEKHkhhZ2lwb3dlclB1YmxpY0hpc3RvcnlQb2ludER0bxI1ChFidWNrZXRfbWludXRlX3V0YxgBIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASDwoHYmFsYW5jZRgCIAEoAxIVCg10b3RhbF9iYWxhbmNlGAMgASgDEiEKGWFjY3VtdWxhdGVkX3RvdGFsX2JhbGFuY2UYBCABKAMSEQoJaXNfZmlsbGVkGAUgASgIItcBCh5IYWdpcG93ZXJTdGF0aXN0aWNzTWV0YWRhdGFEdG8SMwoPcmFuZ2Vfc3RhcnRfdXRjGAEgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIxCg1yYW5nZV9lbmRfdXRjGAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIWCg5idWNrZXRfbWludXRlcxgDIAEoBRIXCg9oYXNfZmlsbGVkX2dhcHMYBCABKAgSHAoUaGFzX3JlY29yZGVkX2hpc3RvcnkYBSABKAgi1gEKHUhhZ2lwb3dlclN0YXRpc3RpY3NTdW1tYXJ5RHRvEh4KFmN1cnJlbnRfcHVibGljX2JhbGFuY2UYASABKAMSHQoVY3VycmVudF90b3RhbF9iYWxhbmNlGAIgASgDEikKIWN1cnJlbnRfYWNjdW11bGF0ZWRfdG90YWxfYmFsYW5jZRgDIAEoAxISCgpuZXRfY2hhbmdlGAQgASgDEjcKE2xhc3RfdXBkYXRlZF9hdF91dGMYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIogCChxIYWdpcG93ZXJTdGF0aXN0aWNzUmVwb3J0RHRvEg0KBXJhbmdlGAEgASgJEkYKCG1ldGFkYXRhGAIgASgLMjQuaGFnaWNvZGUucGxhdGZvcm0udjEuSGFnaXBvd2VyU3RhdGlzdGljc01ldGFkYXRhRHRvEkQKB3N1bW1hcnkYAyABKAsyMy5oYWdpY29kZS5wbGF0Zm9ybS52MS5IYWdpcG93ZXJTdGF0aXN0aWNzU3VtbWFyeUR0bxJLCg1wdWJsaWNfc2VyaWVzGAQgAygLMjQuaGFnaWNvZGUucGxhdGZvcm0udjEuSGFnaXBvd2VyUHVibGljSGlzdG9yeVBvaW50RHRvIrsDChpIaXN0b3JpY2FsVGltZWxpbmVFdmVudER0bxIQCghldmVudF9pZBgBIAEoCRIzCg9vY2N1cnJlZF9hdF91dGMYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEjIKDmNyZWF0ZWRfYXRfdXRjGAMgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBITCgtlbnRpdHlfdHlwZRgEIAEoCRIRCgllbnRpdHlfaWQYBSABKAkSFwoKcHJvamVjdF9pZBgGIAEoCUgAiAEBEhcKCnNlc3Npb25faWQYByABKAlIAYgBARIMCgRjb2RlGAggASgJEigKCG1ldGFkYXRhGAkgASgLMhYuZ29vZ2xlLnByb3RvYnVmLlZhbHVlEhMKBnNvdXJjZRgKIAEoCUgCiAEBEhUKCGFjdG9yX2lkGAsgASgJSAOIAQESGwoOY29ycmVsYXRpb25faWQYDCABKAlIBIgBAUINCgtfcHJvamVjdF9pZEINCgtfc2Vzc2lvbl9pZEIJCgdfc291cmNlQgsKCV9hY3Rvcl9pZEIRCg9fY29ycmVsYXRpb25faWQiiAEKH0hpc3RvcmljYWxUaW1lbGluZVBhZ2luYXRpb25EdG8SEQoJcGFnZV9zaXplGAEgASgFEhYKDnJldHVybmVkX2NvdW50GAIgASgFEhAKCGhhc19tb3JlGAMgASgIEhgKC25leHRfY3Vyc29yGAQgASgJSACIAQFCDgoMX25leHRfY3Vyc29yIrABCiJIaXN0b3JpY2FsVGltZWxpbmVRdWVyeVJlc3BvbnNlRHRvEj8KBWl0ZW1zGAEgAygLMjAuaGFnaWNvZGUucGxhdGZvcm0udjEuSGlzdG9yaWNhbFRpbWVsaW5lRXZlbnREdG8SSQoKcGFnaW5hdGlvbhgCIAEoCzI1LmhhZ2ljb2RlLnBsYXRmb3JtLnYxLkhpc3RvcmljYWxUaW1lbGluZVBhZ2luYXRpb25EdG8imwMKIEhpc3RvcmljYWxUaW1lbGluZUV2ZW50U2FtcGxlRHRvEhMKC2VudGl0eV90eXBlGAEgASgJEgwKBGNvZGUYAiABKAkSGAoQc2FtcGxlX2VudGl0eV9pZBgDIAEoCRIeChFzYW1wbGVfcHJvamVjdF9pZBgEIAEoCUgAiAEBEh4KEXNhbXBsZV9zZXNzaW9uX2lkGAUgASgJSAGIAQESGgoNc2FtcGxlX3NvdXJjZRgGIAEoCUgCiAEBEhwKD3NhbXBsZV9hY3Rvcl9pZBgHIAEoCUgDiAEBEiIKFXNhbXBsZV9jb3JyZWxhdGlvbl9pZBgIIAEoCUgEiAEBEjAKEG1ldGFkYXRhX2V4YW1wbGUYCSABKAsyFi5nb29nbGUucHJvdG9idWYuVmFsdWVCFAoSX3NhbXBsZV9wcm9qZWN0X2lkQhQKEl9zYW1wbGVfc2Vzc2lvbl9pZEIQCg5fc2FtcGxlX3NvdXJjZUISChBfc2FtcGxlX2FjdG9yX2lkQhgKFl9zYW1wbGVfY29ycmVsYXRpb25faWQibQokSGlzdG9yaWNhbFRpbWVsaW5lU2FtcGxlc1Jlc3BvbnNlRHRvEkUKBWl0ZW1zGAEgAygLMjYuaGFnaWNvZGUucGxhdGZvcm0udjEuSGlzdG9yaWNhbFRpbWVsaW5lRXZlbnRTYW1wbGVEdG8y7QoKEVN0YXRpc3RpY3NTZXJ2aWNlEnQKEUdldEFnZ3JlZ2F0ZWREYXRhEi4uaGFnaWNvZGUucGxhdGZvcm0udjEuR2V0QWdncmVnYXRlZERhdGFSZXF1ZXN0Gi8uaGFnaWNvZGUucGxhdGZvcm0udjEuR2V0QWdncmVnYXRlZERhdGFSZXNwb25zZRJ9ChRHZXRUb2tlbk1vbml0b3JVc2FnZRIxLmhhZ2ljb2RlLnBsYXRmb3JtLnYxLkdldFRva2VuTW9uaXRvclVzYWdlUmVxdWVzdBoyLmhhZ2ljb2RlLnBsYXRmb3JtLnYxLkdldFRva2VuTW9uaXRvclVzYWdlUmVzcG9uc2USgwEKFkdldFRva2VuTW9uaXRvckhpc3RvcnkSMy5oYWdpY29kZS5wbGF0Zm9ybS52MS5HZXRUb2tlbk1vbml0b3JIaXN0b3J5UmVxdWVzdBo0LmhhZ2ljb2RlLnBsYXRmb3JtLnYxLkdldFRva2VuTW9uaXRvckhpc3RvcnlSZXNwb25zZRKPAQoaR2V0VG9rZW5Nb25pdG9ySG91cmx5VXNhZ2USNy5oYWdpY29kZS5wbGF0Zm9ybS52MS5HZXRUb2tlbk1vbml0b3JIb3VybHlVc2FnZVJlcXVlc3QaOC5oYWdpY29kZS5wbGF0Zm9ybS52MS5HZXRUb2tlbk1vbml0b3JIb3VybHlVc2FnZVJlc3BvbnNlEpUBChxHZXRUb2tlblRocm91Z2hwdXRTdGF0aXN0aWNzEjkuaGFnaWNvZGUucGxhdGZvcm0udjEuR2V0VG9rZW5UaHJvdWdocHV0U3RhdGlzdGljc1JlcXVlc3QaOi5oYWdpY29kZS5wbGF0Zm9ybS52MS5HZXRUb2tlblRocm91Z2hwdXRTdGF0aXN0aWNzUmVzcG9uc2USjAEKGUdldFRva2VuVGhyb3VnaHB1dEhpc3RvcnkSNi5oYWdpY29kZS5wbGF0Zm9ybS52MS5HZXRUb2tlblRocm91Z2hwdXRIaXN0b3J5UmVxdWVzdBo3LmhhZ2ljb2RlLnBsYXRmb3JtLnYxLkdldFRva2VuVGhyb3VnaHB1dEhpc3RvcnlSZXNwb25zZRJ6ChNHZXRIZXJvQmF0dGxlUmVwb3J0EjAuaGFnaWNvZGUucGxhdGZvcm0udjEuR2V0SGVyb0JhdHRsZVJlcG9ydFJlcXVlc3QaMS5oYWdpY29kZS5wbGF0Zm9ybS52MS5HZXRIZXJvQmF0dGxlUmVwb3J0UmVzcG9uc2USjAEKGUdldEhhZ2lwb3dlckhpc3RvcnlSZXBvcnQSNi5oYWdpY29kZS5wbGF0Zm9ybS52MS5HZXRIYWdpcG93ZXJIaXN0b3J5UmVwb3J0UmVxdWVzdBo3LmhhZ2ljb2RlLnBsYXRmb3JtLnYxLkdldEhhZ2lwb3dlckhpc3RvcnlSZXBvcnRSZXNwb25zZRKAAQoVR2V0SGlzdG9yaWNhbFRpbWVsaW5lEjIuaGFnaWNvZGUucGxhdGZvcm0udjEuR2V0SGlzdG9yaWNhbFRpbWVsaW5lUmVxdWVzdBozLmhhZ2ljb2RlLnBsYXRmb3JtLnYxLkdldEhpc3RvcmljYWxUaW1lbGluZVJlc3BvbnNlEpUBChxHZXRIaXN0b3JpY2FsVGltZWxpbmVTYW1wbGVzEjkuaGFnaWNvZGUucGxhdGZvcm0udjEuR2V0SGlzdG9yaWNhbFRpbWVsaW5lU2FtcGxlc1JlcXVlc3QaOi5oYWdpY29kZS5wbGF0Zm9ybS52MS5HZXRIaXN0b3JpY2FsVGltZWxpbmVTYW1wbGVzUmVzcG9uc2VCKqoCJ1BDb2RlLkh0dHBBcGkuR3JwY0NvbnRyYWN0cy5QbGF0Zm9ybS5WMWIGcHJvdG8z",[Ue,Ne,_i]),jh=v(Is,1),Hh=We(Is,0),de=oe("CiJoYWdpY29kZS9zZXNzaW9uL3YxL3Nlc3Npb25zLnByb3RvEhNoYWdpY29kZS5zZXNzaW9uLnYxIlUKFk9wZW5DaGF0U2Vzc2lvblJlcXVlc3QSOwoEYm9keRgBIAEoCzItLmhhZ2ljb2RlLnNlc3Npb24udjEuQ3JlYXRlQ2hhdFNlc3Npb25SZXF1ZXN0IlIKF09wZW5DaGF0U2Vzc2lvblJlc3BvbnNlEjcKBnJlc3VsdBgBIAEoCzInLmhhZ2ljb2RlLnNlc3Npb24udjEuU2Vzc2lvblJlc3BvbnNlRHRvIk0KEk9wZW5TZXNzaW9uUmVxdWVzdBI3CgRib2R5GAEgASgLMikuaGFnaWNvZGUuc2Vzc2lvbi52MS5DcmVhdGVTZXNzaW9uUmVxdWVzdCJOChNPcGVuU2Vzc2lvblJlc3BvbnNlEjcKBnJlc3VsdBgBIAEoCzInLmhhZ2ljb2RlLnNlc3Npb24udjEuU2Vzc2lvblJlc3BvbnNlRHRvIicKEUdldFNlc3Npb25SZXF1ZXN0EhIKCnNlc3Npb25faWQYASABKAkiTQoSR2V0U2Vzc2lvblJlc3BvbnNlEjcKBnJlc3VsdBgBIAEoCzInLmhhZ2ljb2RlLnNlc3Npb24udjEuU2Vzc2lvblJlc3BvbnNlRHRvImEKElNhdmVTZXNzaW9uUmVxdWVzdBISCgpzZXNzaW9uX2lkGAEgASgJEjcKBGJvZHkYAiABKAsyKS5oYWdpY29kZS5zZXNzaW9uLnYxLlVwZGF0ZVNlc3Npb25SZXF1ZXN0Ik4KE1NhdmVTZXNzaW9uUmVzcG9uc2USNwoGcmVzdWx0GAEgASgLMicuaGFnaWNvZGUuc2Vzc2lvbi52MS5TZXNzaW9uUmVzcG9uc2VEdG8izAEKE0xpc3RTZXNzaW9uc1JlcXVlc3QSEQoEdHlwZRgBIAEoCUgAiAEBEhgKC2FjdGl2ZV9vbmx5GAIgASgISAGIAQESHQoQaW5jbHVkZV9hcmNoaXZlZBgDIAEoCEgCiAEBEhcKCnByb2plY3RfaWQYBCABKAlIA4gBARITCgtwcm9qZWN0X2lkcxgFIAMoCUIHCgVfdHlwZUIOCgxfYWN0aXZlX29ubHlCEwoRX2luY2x1ZGVfYXJjaGl2ZWRCDQoLX3Byb2plY3RfaWQiUwoUTGlzdFNlc3Npb25zUmVzcG9uc2USOwoGcmVzdWx0GAEgASgLMisuaGFnaWNvZGUuc2Vzc2lvbi52MS5TZXNzaW9uTGlzdFJlc3BvbnNlRHRvIkAKFERlbGV0ZVNlc3Npb25SZXF1ZXN0EhIKCnNlc3Npb25faWQYASABKAkSFAoMZGVsZXRlX2ZpbGVzGAIgASgIIlYKFURlbGV0ZVNlc3Npb25SZXNwb25zZRI9CgZyZXN1bHQYASABKAsyLS5oYWdpY29kZS5zZXNzaW9uLnYxLlNpbXBsZU1lc3NhZ2VSZXNwb25zZUR0byIvChlBcmNoaXZlQ2hhdFNlc3Npb25SZXF1ZXN0EhIKCnNlc3Npb25faWQYASABKAkiWwoaQXJjaGl2ZUNoYXRTZXNzaW9uUmVzcG9uc2USPQoGcmVzdWx0GAEgASgLMi0uaGFnaWNvZGUuc2Vzc2lvbi52MS5TaW1wbGVNZXNzYWdlUmVzcG9uc2VEdG8idAoZU3dpdGNoU3RvcHBlZEFnZW50UmVxdWVzdBISCgpzZXNzaW9uX2lkGAEgASgJEkMKBGJvZHkYAiABKAsyNS5oYWdpY29kZS5zZXNzaW9uLnYxLlN3aXRjaFN0b3BwZWRTZXNzaW9uQWdlbnRSZXF1ZXN0IlUKGlN3aXRjaFN0b3BwZWRBZ2VudFJlc3BvbnNlEjcKBnJlc3VsdBgBIAEoCzInLmhhZ2ljb2RlLnNlc3Npb24udjEuU2Vzc2lvblJlc3BvbnNlRHRvIl4KG1N0YXJ0SGFnaVRhc2tTZXNzaW9uUmVxdWVzdBI/CgRib2R5GAEgASgLMjEuaGFnaWNvZGUuc2Vzc2lvbi52MS5DcmVhdGVIYWdpVGFza1Nlc3Npb25SZXF1ZXN0IlcKHFN0YXJ0SGFnaVRhc2tTZXNzaW9uUmVzcG9uc2USNwoGcmVzdWx0GAEgASgLMicuaGFnaWNvZGUuc2Vzc2lvbi52MS5TZXNzaW9uUmVzcG9uc2VEdG8iZAohU3RhcnRMZWdhY3lIYWdpVGFza1Nlc3Npb25SZXF1ZXN0Ej8KBGJvZHkYASABKAsyMS5oYWdpY29kZS5zZXNzaW9uLnYxLkNyZWF0ZUhhZ2lUYXNrU2Vzc2lvblJlcXVlc3QiXQoiU3RhcnRMZWdhY3lIYWdpVGFza1Nlc3Npb25SZXNwb25zZRI3CgZyZXN1bHQYASABKAsyJy5oYWdpY29kZS5zZXNzaW9uLnYxLlNlc3Npb25SZXNwb25zZUR0byLOAwoSQ2hhdEhlcm9TdW1tYXJ5RHRvEg8KB2hlcm9faWQYASABKAkSDAoEbmFtZRgCIAEoCRIYCgtkZXNjcmlwdGlvbhgDIAEoCUgAiAEBEhEKBGljb24YBCABKAlIAYgBARIVCg1leGVjdXRvcl90eXBlGAUgASgJEhkKDGFnZW50X2NsaV9pZBgGIAEoCUgCiAEBEhsKDmFnZW50X2NsaV9uYW1lGAcgASgJSAOIAQESGwoOYWdlbnRfY2xpX2ljb24YCCABKAlIBIgBARIVCghtb2RlbF9pZBgJIAEoCUgFiAEBEhcKCm1vZGVsX25hbWUYCiABKAlIBogBARIXCgptb2RlbF9pY29uGAsgASgJSAeIAQESIgoVc2Vjb25kYXJ5X21vZGVsX2xhYmVsGAwgASgJSAiIAQFCDgoMX2Rlc2NyaXB0aW9uQgcKBV9pY29uQg8KDV9hZ2VudF9jbGlfaWRCEQoPX2FnZW50X2NsaV9uYW1lQhEKD19hZ2VudF9jbGlfaWNvbkILCglfbW9kZWxfaWRCDQoLX21vZGVsX25hbWVCDQoLX21vZGVsX2ljb25CGAoWX3NlY29uZGFyeV9tb2RlbF9sYWJlbCI4ChRPcGVuU3BlY1Rhc2tQcm9ncmVzcxIRCgljb21wbGV0ZWQYASABKAUSDQoFdG90YWwYAiABKAUi/gEKEE9wZW5TcGVjRmlsZUluZm8SEQoJZmlsZV9uYW1lGAEgASgJEhUKDXJlbGF0aXZlX3BhdGgYAiABKAkSDgoGZXhpc3RzGAMgASgIEhEKCWZpbGVfdHlwZRgEIAEoCRITCgtpc19yZXF1aXJlZBgFIAEoCBITCgtpc19hcmNoaXZlZBgGIAEoCBIxCg1hcmNoaXZlZF9kYXRlGAcgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBJACg10YXNrX3Byb2dyZXNzGAggASgLMikuaGFnaWNvZGUuc2Vzc2lvbi52MS5PcGVuU3BlY1Rhc2tQcm9ncmVzcyJcChFPcGVuU3BlY0ZpbGVzSW5mbxIRCgliYXNlX3BhdGgYASABKAkSNAoFZmlsZXMYAiADKAsyJS5oYWdpY29kZS5zZXNzaW9uLnYxLk9wZW5TcGVjRmlsZUluZm8i3gIKFlF1ZXVlTWVzc2FnZVN1bW1hcnlEdG8SDQoFaW5kZXgYASABKAUSDAoEbW9kZRgCIAEoBRItCglxdWV1ZWRfYXQYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEhcKD2NvbnRlbnRfcHJldmlldxgEIAEoCRIhChRleGVjdXRpb25fbWVzc2FnZV9pZBgFIAEoCUgAiAEBEhEKCWNhbl9zdGVlchgGIAEoCBIWCglzY2hlZHVsZWQYByABKAhIAYgBARIuCgpkdWVfYXRfdXRjGAggASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIhChRzY2hlZHVsZWRfbWVzc2FnZV9pZBgJIAEoCUgCiAEBQhcKFV9leGVjdXRpb25fbWVzc2FnZV9pZEIMCgpfc2NoZWR1bGVkQhcKFV9zY2hlZHVsZWRfbWVzc2FnZV9pZCKAAQoWU2Vzc2lvbk5vdGlmaWNhdGlvbkR0bxIMCgRraW5kGAEgASgJEi8KC29ic2VydmVkX2F0GAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBInCgdwYXlsb2FkGAMgASgLMhYuZ29vZ2xlLnByb3RvYnVmLlZhbHVlIu0BChZTZXNzaW9uVXNhZ2VTdW1tYXJ5RHRvEhoKDXByb21wdF90b2tlbnMYASABKAVIAIgBARIhChRjYWNoZWRfcHJvbXB0X3Rva2VucxgCIAEoBUgBiAEBEh4KEWNvbXBsZXRpb25fdG9rZW5zGAMgASgFSAKIAQESMwoPbGFzdF91cGRhdGVkX2F0GAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEIQCg5fcHJvbXB0X3Rva2Vuc0IXChVfY2FjaGVkX3Byb21wdF90b2tlbnNCFAoSX2NvbXBsZXRpb25fdG9rZW5zIl8KFFN0YWdlRXhlY3V0b3JJbmZvRHRvEhUKDXByb3ZpZGVyX3R5cGUYASABKAkSMAoMbGFzdF91cGRhdGVkGAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCK8AgoVU3RhZ2VIZXJvU2VsZWN0aW9uRHRvEhEKCXN0YWdlX2tleRgBIAEoCRISCgpzY3JpcHRfa2V5GAIgASgJEhUKDXNjZW5hcmlvX25hbWUYAyABKAkSFAoHaGVyb19pZBgEIAEoCUgAiAEBEhYKCWhlcm9fbmFtZRgFIAEoCUgBiAEBEhYKCWhlcm9faWNvbhgGIAEoCUgCiAEBEhUKDWV4ZWN1dG9yX3R5cGUYByABKAkSFQoNdXNlZF9mYWxsYmFjaxgIIAEoCBIYChBzZWxlY3Rpb25fc291cmNlGAkgASgJEi8KC3NlbGVjdGVkX2F0GAogASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEIKCghfaGVyb19pZEIMCgpfaGVyb19uYW1lQgwKCl9oZXJvX2ljb24i9QwKElNlc3Npb25SZXNwb25zZUR0bxISCgpzZXNzaW9uX2lkGAEgASgJEg0KBXRpdGxlGAIgASgJEhgKC2Rlc2NyaXB0aW9uGAMgASgJSACIAQESHAoPY2hpZWZfY29tcGxhaW50GAQgASgJSAGIAQESDAoEY29kZRgFIAEoBRIMCgR0eXBlGAYgASgJEg4KBnN0YXR1cxgHIAEoCRIRCglpc19hY3RpdmUYCCABKAgSMgoObGFzdF9hY3RpdmVfYXQYCSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEhIKCnByb2plY3RfaWQYCiABKAkSFAoMcHJvamVjdF9uYW1lGAsgASgJEhQKDHByb2plY3RfcGF0aBgMIAEoCRIaCg1wcm9wb3NhbF9uYW1lGA0gASgJSAKIAQESPwoPb3Blbl9zcGVjX2ZpbGVzGA4gASgLMiYuaGFnaWNvZGUuc2Vzc2lvbi52MS5PcGVuU3BlY0ZpbGVzSW5mbxIdChVwZW5kaW5nX21lc3NhZ2VfY291bnQYDyABKAUSQwoOcXVldWVfbWVzc2FnZXMYECADKAsyKy5oYWdpY29kZS5zZXNzaW9uLnYxLlF1ZXVlTWVzc2FnZVN1bW1hcnlEdG8SHgoRd29ya2luZ19kaXJlY3RvcnkYESABKAlIA4gBARIVCghtZXRhZGF0YRgSIAEoCUgEiAEBEh8KEmNoYXRfZXhlY3V0b3JfdHlwZRgTIAEoCUgFiAEBEjoKCWNoYXRfaGVybxgUIAEoCzInLmhhZ2ljb2RlLnNlc3Npb24udjEuQ2hhdEhlcm9TdW1tYXJ5RHRvElkKEnN0YWdlX2V4ZWN1dG9yX21hcBgVIAMoCzI9LmhhZ2ljb2RlLnNlc3Npb24udjEuU2Vzc2lvblJlc3BvbnNlRHRvLlN0YWdlRXhlY3V0b3JNYXBFbnRyeRJkChhzdGFnZV9oZXJvX3NlbGVjdGlvbl9tYXAYFiADKAsyQi5oYWdpY29kZS5zZXNzaW9uLnYxLlNlc3Npb25SZXNwb25zZUR0by5TdGFnZUhlcm9TZWxlY3Rpb25NYXBFbnRyeRIgChNydW50aW1lX21vZGVsX2xhYmVsGBcgASgJSAaIAQESOQoVcHJvY2Vzc2luZ19zdGFydGVkX2F0GBggASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBJCCg1zZXNzaW9uX3VzYWdlGBkgASgLMisuaGFnaWNvZGUuc2Vzc2lvbi52MS5TZXNzaW9uVXNhZ2VTdW1tYXJ5RHRvEhwKD3ByZXZpb3VzX3N0YXR1cxgaIAEoCUgHiAEBEkIKDW5vdGlmaWNhdGlvbnMYGyADKAsyKy5oYWdpY29kZS5zZXNzaW9uLnYxLlNlc3Npb25Ob3RpZmljYXRpb25EdG8SRwoSc2NoZWR1bGVkX21lc3NhZ2VzGBwgAygLMisuaGFnaWNvZGUuc2Vzc2lvbi52MS5RdWV1ZU1lc3NhZ2VTdW1tYXJ5RHRvElAKDXVzZXJfbWV0YWRhdGEYHSADKAsyOS5oYWdpY29kZS5zZXNzaW9uLnYxLlNlc3Npb25SZXNwb25zZUR0by5Vc2VyTWV0YWRhdGFFbnRyeRpiChVTdGFnZUV4ZWN1dG9yTWFwRW50cnkSCwoDa2V5GAEgASgJEjgKBXZhbHVlGAIgASgLMikuaGFnaWNvZGUuc2Vzc2lvbi52MS5TdGFnZUV4ZWN1dG9ySW5mb0R0bzoCOAEaaAoaU3RhZ2VIZXJvU2VsZWN0aW9uTWFwRW50cnkSCwoDa2V5GAEgASgJEjkKBXZhbHVlGAIgASgLMiouaGFnaWNvZGUuc2Vzc2lvbi52MS5TdGFnZUhlcm9TZWxlY3Rpb25EdG86AjgBGjMKEVVzZXJNZXRhZGF0YUVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAFCDgoMX2Rlc2NyaXB0aW9uQhIKEF9jaGllZl9jb21wbGFpbnRCEAoOX3Byb3Bvc2FsX25hbWVCFAoSX3dvcmtpbmdfZGlyZWN0b3J5QgsKCV9tZXRhZGF0YUIVChNfY2hhdF9leGVjdXRvcl90eXBlQhYKFF9ydW50aW1lX21vZGVsX2xhYmVsQhIKEF9wcmV2aW91c19zdGF0dXMi+QEKGENyZWF0ZUNoYXRTZXNzaW9uUmVxdWVzdBINCgV0aXRsZRgBIAEoCRISCgpwcm9qZWN0X2lkGAIgASgJEhgKEGlzX2RlZmF1bHRfdGl0bGUYAyABKAgSFAoHaGVyb19pZBgEIAEoCUgAiAEBEk0KCG1ldGFkYXRhGAUgAygLMjsuaGFnaWNvZGUuc2Vzc2lvbi52MS5DcmVhdGVDaGF0U2Vzc2lvblJlcXVlc3QuTWV0YWRhdGFFbnRyeRovCg1NZXRhZGF0YUVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAFCCgoIX2hlcm9faWQivgIKEFBhdGhSZWZlcmVuY2VEdG8SCgoCaWQYASABKAkSDgoGc291cmNlGAIgASgJEhUKDWRpc3BsYXlfdmFsdWUYAyABKAkSFQoNcGh5c2ljYWxfcGF0aBgEIAEoCRINCgVzdGFydBgFIAEoBRILCgNlbmQYBiABKAUSFgoJZW50aXR5X2lkGAcgASgJSACIAQESFwoKcHJvamVjdF9pZBgIIAEoCUgBiAEBEkUKCG1ldGFkYXRhGAkgAygLMjMuaGFnaWNvZGUuc2Vzc2lvbi52MS5QYXRoUmVmZXJlbmNlRHRvLk1ldGFkYXRhRW50cnkaLwoNTWV0YWRhdGFFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBQgwKCl9lbnRpdHlfaWRCDQoLX3Byb2plY3RfaWQi+wEKGVNlc3Npb25NZXNzYWdlSW1hZ2VSZWZEdG8SEgoKc2Vzc2lvbl9pZBgBIAEoCRIQCghpbWFnZV9pZBgCIAEoCRIWCg5oYWdpX2ltYWdlX3VybBgDIAEoCRIYCgtwcmV2aWV3X3VybBgEIAEoCUgAiAEBEhYKCWZpbGVfbmFtZRgFIAEoCUgBiAEBEhkKDGNvbnRlbnRfdHlwZRgGIAEoCUgCiAEBEhYKCWZpbGVfc2l6ZRgHIAEoA0gDiAEBQg4KDF9wcmV2aWV3X3VybEIMCgpfZmlsZV9uYW1lQg8KDV9jb250ZW50X3R5cGVCDAoKX2ZpbGVfc2l6ZSJ+ChlUYXJnZXRQcm9qZWN0UmVmZXJlbmNlRHRvEhIKCnByb2plY3RfaWQYASABKAkSDAoEbmFtZRgCIAEoCRIVCg1waHlzaWNhbF9wYXRoGAMgASgJEhgKC2FjY2Vzc190eXBlGAQgASgJSACIAQFCDgoMX2FjY2Vzc190eXBlIocBChNUYXJnZXRSZXBvc2l0b3J5RHRvEgwKBHBhdGgYASABKAkSDAoEbmFtZRgCIAEoCRIZCgxkaXNwbGF5X25hbWUYAyABKAlIAIgBARIYCgthY2Nlc3NfdHlwZRgEIAEoCUgBiAEBQg8KDV9kaXNwbGF5X25hbWVCDgoMX2FjY2Vzc190eXBlIj0KGFRhcmdldFJlcG9zaXRvcnlTY29wZUR0bxIMCgRtb2RlGAEgASgJEhMKC2FjY2Vzc190eXBlGAIgASgJIpEGChRDcmVhdGVTZXNzaW9uUmVxdWVzdBINCgV0aXRsZRgBIAEoCRIcCg9jaGllZl9jb21wbGFpbnQYAiABKAlIAIgBARIlChhvcmlnaW5hbF9jaGllZl9jb21wbGFpbnQYAyABKAlIAYgBARJIChBkcmFmdF9pbWFnZV9yZWZzGAQgAygLMi4uaGFnaWNvZGUuc2Vzc2lvbi52MS5TZXNzaW9uTWVzc2FnZUltYWdlUmVmRHRvEhEKBHR5cGUYBSABKAlIAogBARISCgpwcm9qZWN0X2lkGAYgASgJEkUKE3RhcmdldF9yZXBvc2l0b3JpZXMYByADKAsyKC5oYWdpY29kZS5zZXNzaW9uLnYxLlRhcmdldFJlcG9zaXRvcnlEdG8STgoXdGFyZ2V0X3JlcG9zaXRvcnlfc2NvcGUYCCABKAsyLS5oYWdpY29kZS5zZXNzaW9uLnYxLlRhcmdldFJlcG9zaXRvcnlTY29wZUR0bxJHCg90YXJnZXRfcHJvamVjdHMYCSADKAsyLi5oYWdpY29kZS5zZXNzaW9uLnYxLlRhcmdldFByb2plY3RSZWZlcmVuY2VEdG8SPgoPcGF0aF9yZWZlcmVuY2VzGAogAygLMiUuaGFnaWNvZGUuc2Vzc2lvbi52MS5QYXRoUmVmZXJlbmNlRHRvEhgKEGlzX2RlZmF1bHRfdGl0bGUYCyABKAgSJgoZcHJvcG9zYWxfY29udGVudF9sYW5ndWFnZRgMIAEoCUgDiAEBEkkKCG1ldGFkYXRhGA0gAygLMjcuaGFnaWNvZGUuc2Vzc2lvbi52MS5DcmVhdGVTZXNzaW9uUmVxdWVzdC5NZXRhZGF0YUVudHJ5Gi8KDU1ldGFkYXRhRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4AUISChBfY2hpZWZfY29tcGxhaW50QhsKGV9vcmlnaW5hbF9jaGllZl9jb21wbGFpbnRCBwoFX3R5cGVCHAoaX3Byb3Bvc2FsX2NvbnRlbnRfbGFuZ3VhZ2UikwEKFFVwZGF0ZVNlc3Npb25SZXF1ZXN0Eg0KBXRpdGxlGAEgASgJEhgKC2Rlc2NyaXB0aW9uGAIgASgJSACIAQESEwoGc3RhdHVzGAMgASgJSAGIAQESFQoIbWV0YWRhdGEYBCABKAlIAogBAUIOCgxfZGVzY3JpcHRpb25CCQoHX3N0YXR1c0ILCglfbWV0YWRhdGEiUwoWU2Vzc2lvbkxpc3RSZXNwb25zZUR0bxI5CghzZXNzaW9ucxgBIAMoCzInLmhhZ2ljb2RlLnNlc3Npb24udjEuU2Vzc2lvblJlc3BvbnNlRHRvIisKGFNpbXBsZU1lc3NhZ2VSZXNwb25zZUR0bxIPCgdtZXNzYWdlGAEgASgJIjMKIFN3aXRjaFN0b3BwZWRTZXNzaW9uQWdlbnRSZXF1ZXN0Eg8KB2hlcm9faWQYASABKAki6wgKHENyZWF0ZUhhZ2lUYXNrU2Vzc2lvblJlcXVlc3QSDQoFdGl0bGUYASABKAkSGAoQaXNfZGVmYXVsdF90aXRsZRgCIAEoCBISCgpwcm9qZWN0X2lkGAMgASgJEhYKCXByb21wdF9pZBgEIAEoCUgAiAEBEhQKB21lc3NhZ2UYBSABKAlIAYgBARJIChBkcmFmdF9pbWFnZV9yZWZzGAYgAygLMi4uaGFnaWNvZGUuc2Vzc2lvbi52MS5TZXNzaW9uTWVzc2FnZUltYWdlUmVmRHRvEhwKD3JlcG9zaXRvcnlfcGF0aBgHIAEoCUgCiAEBEhgKC3RhcmdldF90eXBlGAggASgJSAOIAQESFQoIdmF1bHRfaWQYCSABKAlIBIgBARIcCg9vdXRwdXRfdmF1bHRfaWQYCiABKAlIBYgBARIbChNyZWZlcmVuY2VfdmF1bHRfaWRzGAsgAygJEhoKEmVkaXRhYmxlX3ZhdWx0X2lkcxgMIAMoCRJHCg90YXJnZXRfcHJvamVjdHMYDSADKAsyLi5oYWdpY29kZS5zZXNzaW9uLnYxLlRhcmdldFByb2plY3RSZWZlcmVuY2VEdG8SHwoScmVzZWFyY2hfZGlyZWN0aW9uGA4gASgJSAaIAQESGwoOcHJlc2V0X3Rhc2tfaWQYDyABKAlIB4gBARIfChJwcmVzZXRfdGFza19sb2NhbGUYECABKAlICIgBARIxChFwcmVzZXRfdGFza19pbnB1dBgRIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZRIXCg9yZXBvc2l0b3J5X3VybHMYEiADKAkSEwoLcHJvamVjdF9pZHMYEyADKAkSEQoJbmVlZF9wdXNoGBQgASgIEiQKF3B1bGxfcmViYXNlX2JlZm9yZV9wdXNoGBUgASgISAmIAQESHwoSdGFyZ2V0X2JyYW5jaF9tb2RlGBYgASgJSAqIAQESHwoSdGFyZ2V0X2JyYW5jaF9uYW1lGBcgASgJSAuIAQESFwoKc2NyaXB0X2tleRgYIAEoCUgMiAEBEhQKB2hlcm9faWQYGSABKAlIDYgBARIgChNoZXJvX3NlbGVjdGlvbl9tb2RlGBogASgJSA6IAQFCDAoKX3Byb21wdF9pZEIKCghfbWVzc2FnZUISChBfcmVwb3NpdG9yeV9wYXRoQg4KDF90YXJnZXRfdHlwZUILCglfdmF1bHRfaWRCEgoQX291dHB1dF92YXVsdF9pZEIVChNfcmVzZWFyY2hfZGlyZWN0aW9uQhEKD19wcmVzZXRfdGFza19pZEIVChNfcHJlc2V0X3Rhc2tfbG9jYWxlQhoKGF9wdWxsX3JlYmFzZV9iZWZvcmVfcHVzaEIVChNfdGFyZ2V0X2JyYW5jaF9tb2RlQhUKE190YXJnZXRfYnJhbmNoX25hbWVCDQoLX3NjcmlwdF9rZXlCCgoIX2hlcm9faWRCFgoUX2hlcm9fc2VsZWN0aW9uX21vZGUy6ggKD1Nlc3Npb25zU2VydmljZRJsCg9PcGVuQ2hhdFNlc3Npb24SKy5oYWdpY29kZS5zZXNzaW9uLnYxLk9wZW5DaGF0U2Vzc2lvblJlcXVlc3QaLC5oYWdpY29kZS5zZXNzaW9uLnYxLk9wZW5DaGF0U2Vzc2lvblJlc3BvbnNlEmAKC09wZW5TZXNzaW9uEicuaGFnaWNvZGUuc2Vzc2lvbi52MS5PcGVuU2Vzc2lvblJlcXVlc3QaKC5oYWdpY29kZS5zZXNzaW9uLnYxLk9wZW5TZXNzaW9uUmVzcG9uc2USXQoKR2V0U2Vzc2lvbhImLmhhZ2ljb2RlLnNlc3Npb24udjEuR2V0U2Vzc2lvblJlcXVlc3QaJy5oYWdpY29kZS5zZXNzaW9uLnYxLkdldFNlc3Npb25SZXNwb25zZRJgCgtTYXZlU2Vzc2lvbhInLmhhZ2ljb2RlLnNlc3Npb24udjEuU2F2ZVNlc3Npb25SZXF1ZXN0GiguaGFnaWNvZGUuc2Vzc2lvbi52MS5TYXZlU2Vzc2lvblJlc3BvbnNlEmMKDExpc3RTZXNzaW9ucxIoLmhhZ2ljb2RlLnNlc3Npb24udjEuTGlzdFNlc3Npb25zUmVxdWVzdBopLmhhZ2ljb2RlLnNlc3Npb24udjEuTGlzdFNlc3Npb25zUmVzcG9uc2USZgoNRGVsZXRlU2Vzc2lvbhIpLmhhZ2ljb2RlLnNlc3Npb24udjEuRGVsZXRlU2Vzc2lvblJlcXVlc3QaKi5oYWdpY29kZS5zZXNzaW9uLnYxLkRlbGV0ZVNlc3Npb25SZXNwb25zZRJ1ChJBcmNoaXZlQ2hhdFNlc3Npb24SLi5oYWdpY29kZS5zZXNzaW9uLnYxLkFyY2hpdmVDaGF0U2Vzc2lvblJlcXVlc3QaLy5oYWdpY29kZS5zZXNzaW9uLnYxLkFyY2hpdmVDaGF0U2Vzc2lvblJlc3BvbnNlEnUKElN3aXRjaFN0b3BwZWRBZ2VudBIuLmhhZ2ljb2RlLnNlc3Npb24udjEuU3dpdGNoU3RvcHBlZEFnZW50UmVxdWVzdBovLmhhZ2ljb2RlLnNlc3Npb24udjEuU3dpdGNoU3RvcHBlZEFnZW50UmVzcG9uc2USewoUU3RhcnRIYWdpVGFza1Nlc3Npb24SMC5oYWdpY29kZS5zZXNzaW9uLnYxLlN0YXJ0SGFnaVRhc2tTZXNzaW9uUmVxdWVzdBoxLmhhZ2ljb2RlLnNlc3Npb24udjEuU3RhcnRIYWdpVGFza1Nlc3Npb25SZXNwb25zZRKNAQoaU3RhcnRMZWdhY3lIYWdpVGFza1Nlc3Npb24SNi5oYWdpY29kZS5zZXNzaW9uLnYxLlN0YXJ0TGVnYWN5SGFnaVRhc2tTZXNzaW9uUmVxdWVzdBo3LmhhZ2ljb2RlLnNlc3Npb24udjEuU3RhcnRMZWdhY3lIYWdpVGFza1Nlc3Npb25SZXNwb25zZUIpqgImUENvZGUuSHR0cEFwaS5HcnBjQ29udHJhY3RzLlNlc3Npb24uVjFiBnByb3RvMw",[Ue,Ne]),Th=v(de,1),Qh=v(de,3),Mh=v(de,5),Oh=v(de,7),Dh=v(de,9),_h=v(de,11),$h=v(de,13),Ph=v(de,17),qh=v(de,30),eb=v(de,36),tb=v(de,37),nb=v(de,41),ob=We(de,0),Me=oe("CitoYWdpY29kZS9zZXNzaW9uL3YxL3Nlc3Npb25fbWVzc2FnaW5nLnByb3RvEhNoYWdpY29kZS5zZXNzaW9uLnYxIr0BChlHZXRTZXNzaW9uTWVzc2FnZXNSZXF1ZXN0EhIKCnNlc3Npb25faWQYASABKAkSEQoEcGFnZRgCIAEoBUgAiAEBEhYKCXBhZ2Vfc2l6ZRgDIAEoBUgBiAEBEhoKDWhpc3Rvcnlfc2NvcGUYBCABKAlIAogBARISCgVvcmRlchgFIAEoCUgDiAEBQgcKBV9wYWdlQgwKCl9wYWdlX3NpemVCEAoOX2hpc3Rvcnlfc2NvcGVCCAoGX29yZGVyIlkKGkdldFNlc3Npb25NZXNzYWdlc1Jlc3BvbnNlEjsKBnJlc3VsdBgBIAEoCzIrLmhhZ2ljb2RlLnNlc3Npb24udjEuTWVzc2FnZUxpc3RSZXNwb25zZUR0byIqChRDYW5jZWxTZXNzaW9uUmVxdWVzdBISCgpzZXNzaW9uX2lkGAEgASgJIlYKFUNhbmNlbFNlc3Npb25SZXNwb25zZRI9CgZyZXN1bHQYASABKAsyLS5oYWdpY29kZS5zZXNzaW9uLnYxLkNhbmNlbFNlc3Npb25SZXNwb25zZUR0byI3CiFHZXRTZXNzaW9uUHJvY2Vzc2luZ1N0YXR1c1JlcXVlc3QSEgoKc2Vzc2lvbl9pZBgBIAEoCSJeCiJHZXRTZXNzaW9uUHJvY2Vzc2luZ1N0YXR1c1Jlc3BvbnNlEjgKBnJlc3VsdBgBIAEoCzIoLmhhZ2ljb2RlLnNlc3Npb24udjEuUHJvY2Vzc2luZ1N0YXR1c0R0byJGChtDYW5jZWxQZW5kaW5nTWVzc2FnZVJlcXVlc3QSEgoKc2Vzc2lvbl9pZBgBIAEoCRITCgtxdWV1ZV9pbmRleBgCIAEoBSJcChxDYW5jZWxQZW5kaW5nTWVzc2FnZVJlc3BvbnNlEjwKBnJlc3VsdBgBIAEoCzIsLmhhZ2ljb2RlLnNlc3Npb24udjEuQ2FuY2VsUGVuZGluZ01lc3NhZ2VEdG8iUQodQ2FuY2VsU2NoZWR1bGVkTWVzc2FnZVJlcXVlc3QSEgoKc2Vzc2lvbl9pZBgBIAEoCRIcChRzY2hlZHVsZWRfbWVzc2FnZV9pZBgCIAEoCSJgCh5DYW5jZWxTY2hlZHVsZWRNZXNzYWdlUmVzcG9uc2USPgoGcmVzdWx0GAEgASgLMi4uaGFnaWNvZGUuc2Vzc2lvbi52MS5DYW5jZWxTY2hlZHVsZWRNZXNzYWdlRHRvImQKE1N0ZWVyU2Vzc2lvblJlcXVlc3QSEgoKc2Vzc2lvbl9pZBgBIAEoCRI5CgRib2R5GAIgASgLMisuaGFnaWNvZGUuc2Vzc2lvbi52MS5TZXNzaW9uU3RlZXJSZXF1ZXN0RHRvIlQKFFN0ZWVyU2Vzc2lvblJlc3BvbnNlEjwKBnJlc3VsdBgBIAEoCzIsLmhhZ2ljb2RlLnNlc3Npb24udjEuU2Vzc2lvblN0ZWVyUmVzcG9uc2VEdG8ihQEKGVN0ZWVyUXVldWVkTWVzc2FnZVJlcXVlc3QSEgoKc2Vzc2lvbl9pZBgBIAEoCRITCgtxdWV1ZV9pbmRleBgCIAEoBRI/CgRib2R5GAMgASgLMjEuaGFnaWNvZGUuc2Vzc2lvbi52MS5RdWV1ZWRNZXNzYWdlU3RlZXJSZXF1ZXN0RHRvImAKGlN0ZWVyUXVldWVkTWVzc2FnZVJlc3BvbnNlEkIKBnJlc3VsdBgBIAEoCzIyLmhhZ2ljb2RlLnNlc3Npb24udjEuUXVldWVkTWVzc2FnZVN0ZWVyUmVzcG9uc2VEdG8iZgoZUG9zdFNlc3Npb25NZXNzYWdlUmVxdWVzdBISCgpzZXNzaW9uX2lkGAEgASgJEjUKBGJvZHkYAiABKAsyJy5oYWdpY29kZS5zZXNzaW9uLnYxLlBvc3RNZXNzYWdlUmVxdWVzdCJZChpQb3N0U2Vzc2lvbk1lc3NhZ2VSZXNwb25zZRI7CgZyZXN1bHQYASABKAsyKy5oYWdpY29kZS5zZXNzaW9uLnYxLlBvc3RNZXNzYWdlUmVzcG9uc2VEdG8iYAoqR2V0Q29udmVydFRvUHJvcG9zYWxIYWdpU2tpbGxQcm9tcHRSZXF1ZXN0EhIKCnNlc3Npb25faWQYASABKAkSEwoGbG9jYWxlGAIgASgJSACIAQFCCQoHX2xvY2FsZSJ/CitHZXRDb252ZXJ0VG9Qcm9wb3NhbEhhZ2lTa2lsbFByb21wdFJlc3BvbnNlElAKBnJlc3VsdBgBIAEoCzJALmhhZ2ljb2RlLnNlc3Npb24udjEuQ29udmVydFRvUHJvcG9zYWxIYWdpU2tpbGxQcm9tcHRSZXNwb25zZUR0byJxCh9TdWJtaXRTZXNzaW9uQW5ub3RhdGlvbnNSZXF1ZXN0EhIKCnNlc3Npb25faWQYASABKAkSOgoEYm9keRgCIAEoCzIsLmhhZ2ljb2RlLnNlc3Npb24udjEuQW5ub3RhdGlvblN1Ym1pc3Npb25EdG8iaAogU3VibWl0U2Vzc2lvbkFubm90YXRpb25zUmVzcG9uc2USRAoGcmVzdWx0GAEgASgLMjQuaGFnaWNvZGUuc2Vzc2lvbi52MS5Bbm5vdGF0aW9uU3VibWlzc2lvblJlc3BvbnNlRHRvIvoBChZNZXNzYWdlSGVyb1NuYXBzaG90RHRvEhQKB2hlcm9faWQYASABKAlIAIgBARIWCgloZXJvX25hbWUYAiABKAlIAYgBARIWCgloZXJvX2ljb24YAyABKAlIAogBARIaCg1leGVjdXRvcl90eXBlGAQgASgJSAOIAQESEwoGc291cmNlGAUgASgJSASIAQESFgoJc3RhZ2Vfa2V5GAYgASgJSAWIAQFCCgoIX2hlcm9faWRCDAoKX2hlcm9fbmFtZUIMCgpfaGVyb19pY29uQhAKDl9leGVjdXRvcl90eXBlQgkKB19zb3VyY2VCDAoKX3N0YWdlX2tleSJSChxNZXNzYWdlVXNlclF1ZXN0aW9uQW5zd2VyRHRvEhAKCHF1ZXN0aW9uGAEgASgJEg4KBnZhbHVlcxgCIAMoCRIQCghyZWplY3RlZBgDIAEoCCJCChxNZXNzYWdlVXNlclF1ZXN0aW9uT3B0aW9uRHRvEg0KBWxhYmVsGAEgASgJEhMKC2Rlc2NyaXB0aW9uGAIgASgJIsgBChpNZXNzYWdlVXNlclF1ZXN0aW9uSXRlbUR0bxIQCghxdWVzdGlvbhgBIAEoCRIOCgZoZWFkZXIYAiABKAkSFAoMbXVsdGlfc2VsZWN0GAMgASgIEkIKB29wdGlvbnMYBCADKAsyMS5oYWdpY29kZS5zZXNzaW9uLnYxLk1lc3NhZ2VVc2VyUXVlc3Rpb25PcHRpb25EdG8SGwoTYWxsb3dfY3VzdG9tX2Fuc3dlchgFIAEoCBIRCglpc19zZWNyZXQYBiABKAgiWgocTWVzc2FnZVVzZXJRdWVzdGlvbkxpbWl0c0R0bxIZChFtYXhfYW5zd2VyX2xlbmd0aBgBIAEoBRIfChdtYXhfdmFsdWVzX3Blcl9xdWVzdGlvbhgCIAEoBSLYAgoWTWVzc2FnZVVzZXJRdWVzdGlvbkR0bxITCgtxdWVzdGlvbl9pZBgBIAEoCRITCgZydW5faWQYAiABKAlIAIgBARINCgVzdGF0ZRgDIAEoCRJCCglxdWVzdGlvbnMYBCADKAsyLy5oYWdpY29kZS5zZXNzaW9uLnYxLk1lc3NhZ2VVc2VyUXVlc3Rpb25JdGVtRHRvEkIKB2Fuc3dlcnMYBSADKAsyMS5oYWdpY29kZS5zZXNzaW9uLnYxLk1lc3NhZ2VVc2VyUXVlc3Rpb25BbnN3ZXJEdG8SLwoLYW5zd2VyZWRfYXQYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEkEKBmxpbWl0cxgHIAEoCzIxLmhhZ2ljb2RlLnNlc3Npb24udjEuTWVzc2FnZVVzZXJRdWVzdGlvbkxpbWl0c0R0b0IJCgdfcnVuX2lkIo4EChJNZXNzYWdlUmVzcG9uc2VEdG8SCgoCaWQYASABKAkSEgoKc2Vzc2lvbl9pZBgCIAEoCRIMCgR0eXBlGAMgASgJEgwKBG1vZGUYBCABKAkSLQoJdGltZXN0YW1wGAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIxCg1jcmVhdGlvbl90aW1lGAYgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIuCg5jb250ZW50X2Jsb2NrcxgHIAMoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZRISCgVtb2RlbBgIIAEoCUgAiAEBEhUKCHByb3ZpZGVyGAkgASgJSAGIAQESQgoNaGVyb19zbmFwc2hvdBgKIAEoCzIrLmhhZ2ljb2RlLnNlc3Npb24udjEuTWVzc2FnZUhlcm9TbmFwc2hvdER0bxJCCg11c2VyX3F1ZXN0aW9uGAsgASgLMisuaGFnaWNvZGUuc2Vzc2lvbi52MS5NZXNzYWdlVXNlclF1ZXN0aW9uRHRvEhgKC3N0ZWVyX3N0YXRlGAwgASgJSAKIAQESHwoScGFyZW50X3Rvb2xfdXNlX2lkGA0gASgJSAOIAQFCCAoGX21vZGVsQgsKCV9wcm92aWRlckIOCgxfc3RlZXJfc3RhdGVCFQoTX3BhcmVudF90b29sX3VzZV9pZCKyAQoWTWVzc2FnZUxpc3RSZXNwb25zZUR0bxISCgpzZXNzaW9uX2lkGAEgASgJEgwKBHBhZ2UYAiABKAUSEQoJcGFnZV9zaXplGAMgASgFEhMKC3RvdGFsX2NvdW50GAQgASgFEhMKC3RvdGFsX3BhZ2VzGAUgASgFEjkKCG1lc3NhZ2VzGAYgAygLMicuaGFnaWNvZGUuc2Vzc2lvbi52MS5NZXNzYWdlUmVzcG9uc2VEdG8ikAEKGENhbmNlbFNlc3Npb25SZXNwb25zZUR0bxISCgpzZXNzaW9uX2lkGAEgASgJEg4KBnN0YXR1cxgCIAEoCRIwCgxjYW5jZWxsZWRfYXQYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEhMKBnJ1bl9pZBgEIAEoCUgAiAEBQgkKB19ydW5faWQiyAIKE1Byb2Nlc3NpbmdTdGF0dXNEdG8SEgoKc2Vzc2lvbl9pZBgBIAEoCRIVCg1pc19wcm9jZXNzaW5nGAIgASgIEhwKFHF1ZXVlZF9tZXNzYWdlX2NvdW50GAMgASgFEkMKDnF1ZXVlX21lc3NhZ2VzGAQgAygLMisuaGFnaWNvZGUuc2Vzc2lvbi52MS5RdWV1ZU1lc3NhZ2VTdW1tYXJ5RHRvEjkKFXByb2Nlc3Npbmdfc3RhcnRlZF9hdBgFIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASRwoSc2NoZWR1bGVkX21lc3NhZ2VzGAYgAygLMisuaGFnaWNvZGUuc2Vzc2lvbi52MS5RdWV1ZU1lc3NhZ2VTdW1tYXJ5RHRvEh8KF3NjaGVkdWxlZF9tZXNzYWdlX2NvdW50GAcgASgFIj0KFENhbmNlbGxlZE1lc3NhZ2VJbmZvEgwKBG1vZGUYASABKAkSFwoPY29udGVudF9wcmV2aWV3GAIgASgJIpIBChlDYW5jZWxTY2hlZHVsZWRNZXNzYWdlRHRvEhIKCnNlc3Npb25faWQYASABKAkSDwoHc3VjY2VzcxgCIAEoCBIcChRzY2hlZHVsZWRfbWVzc2FnZV9pZBgDIAEoCRIhChlyZW1haW5pbmdfc2NoZWR1bGVkX2NvdW50GAQgASgFEg8KB21lc3NhZ2UYBSABKAkiwwEKF0NhbmNlbFBlbmRpbmdNZXNzYWdlRHRvEhIKCnNlc3Npb25faWQYASABKAkSDwoHc3VjY2VzcxgCIAEoCBITCgtxdWV1ZV9pbmRleBgDIAEoBRIXCg9yZW1haW5pbmdfY291bnQYBCABKAUSDwoHbWVzc2FnZRgFIAEoCRJEChFjYW5jZWxsZWRfbWVzc2FnZRgGIAEoCzIpLmhhZ2ljb2RlLnNlc3Npb24udjEuQ2FuY2VsbGVkTWVzc2FnZUluZm8iUgoXU2Vzc2lvblN0ZWVyUmVzcG9uc2VEdG8SDwoHb3V0Y29tZRgBIAEoCRIXCgptZXNzYWdlX2lkGAIgASgJSACIAQFCDQoLX21lc3NhZ2VfaWQiKQoWU2Vzc2lvblN0ZWVyUmVxdWVzdER0bxIPCgdjb250ZW50GAEgASgJIjAKHVF1ZXVlZE1lc3NhZ2VTdGVlclJlc3BvbnNlRHRvEg8KB291dGNvbWUYASABKAkiPAocUXVldWVkTWVzc2FnZVN0ZWVyUmVxdWVzdER0bxIcChRleGVjdXRpb25fbWVzc2FnZV9pZBgBIAEoCSKVAQoWUG9zdE1lc3NhZ2VSZXNwb25zZUR0bxIPCgdtZXNzYWdlGAEgASgJEiEKFHNjaGVkdWxlZF9tZXNzYWdlX2lkGAIgASgJSACIAQESLgoKZHVlX2F0X3V0YxgDIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCFwoVX3NjaGVkdWxlZF9tZXNzYWdlX2lkIu0BChJQb3N0TWVzc2FnZVJlcXVlc3QSDwoHY29udGVudBgBIAEoCRIMCgRtb2RlGAIgASgJEkIKCmltYWdlX3JlZnMYAyADKAsyLi5oYWdpY29kZS5zZXNzaW9uLnYxLlNlc3Npb25NZXNzYWdlSW1hZ2VSZWZEdG8SPgoPcGF0aF9yZWZlcmVuY2VzGAQgAygLMiUuaGFnaWNvZGUuc2Vzc2lvbi52MS5QYXRoUmVmZXJlbmNlRHRvEjQKEHNjaGVkdWxlZF9hdF91dGMYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIl4KK0NvbnZlcnRUb1Byb3Bvc2FsSGFnaVNraWxsUHJvbXB0UmVzcG9uc2VEdG8SDwoHb3V0Y29tZRgBIAEoCRITCgZwcm9tcHQYAiABKAlIAIgBAUIJCgdfcHJvbXB0ImAKH0Fubm90YXRpb25TdWJtaXNzaW9uUmVzcG9uc2VEdG8SDwoHbWVzc2FnZRgBIAEoCRIYChBhbm5vdGF0aW9uX2NvdW50GAIgASgFEhIKCmZpbGVfY291bnQYAyABKAUiygEKEkJsb2NrQW5ub3RhdGlvbkR0bxIZChFzdGFydF9saW5lX251bWJlchgBIAEoBRIXCg9lbmRfbGluZV9udW1iZXIYAiABKAUSGAoQb3JpZ2luYWxfY29udGVudBgDIAEoCRISCgpibG9ja190eXBlGAQgASgJEhcKD2Fubm90YXRpb25fdGV4dBgFIAEoCRItCgl0aW1lc3RhbXAYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEgoKAmlkGAcgASgJIq8BChFGaWxlQW5ub3RhdGlvbkR0bxIRCglmaWxlX25hbWUYASABKAkSEQoJZmlsZV9wYXRoGAIgASgJEkIKEWJsb2NrX2Fubm90YXRpb25zGAMgAygLMicuaGFnaWNvZGUuc2Vzc2lvbi52MS5CbG9ja0Fubm90YXRpb25EdG8SHAoPZmlsZV9hbm5vdGF0aW9uGAQgASgJSACIAQFCEgoQX2ZpbGVfYW5ub3RhdGlvbiLfAQoXQW5ub3RhdGlvblN1Ym1pc3Npb25EdG8SEgoKc2Vzc2lvbl9pZBgBIAEoCRI1CgVmaWxlcxgCIAMoCzImLmhhZ2ljb2RlLnNlc3Npb24udjEuRmlsZUFubm90YXRpb25EdG8SGQoRdG90YWxfYW5ub3RhdGlvbnMYAyABKAUSMAoMc3VibWl0dGVkX2F0GAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIaCg1nbG9iYWxfcHJvbXB0GAUgASgJSACIAQFCEAoOX2dsb2JhbF9wcm9tcHQykQoKF1Nlc3Npb25NZXNzYWdpbmdTZXJ2aWNlEnUKEkdldFNlc3Npb25NZXNzYWdlcxIuLmhhZ2ljb2RlLnNlc3Npb24udjEuR2V0U2Vzc2lvbk1lc3NhZ2VzUmVxdWVzdBovLmhhZ2ljb2RlLnNlc3Npb24udjEuR2V0U2Vzc2lvbk1lc3NhZ2VzUmVzcG9uc2USZgoNQ2FuY2VsU2Vzc2lvbhIpLmhhZ2ljb2RlLnNlc3Npb24udjEuQ2FuY2VsU2Vzc2lvblJlcXVlc3QaKi5oYWdpY29kZS5zZXNzaW9uLnYxLkNhbmNlbFNlc3Npb25SZXNwb25zZRKNAQoaR2V0U2Vzc2lvblByb2Nlc3NpbmdTdGF0dXMSNi5oYWdpY29kZS5zZXNzaW9uLnYxLkdldFNlc3Npb25Qcm9jZXNzaW5nU3RhdHVzUmVxdWVzdBo3LmhhZ2ljb2RlLnNlc3Npb24udjEuR2V0U2Vzc2lvblByb2Nlc3NpbmdTdGF0dXNSZXNwb25zZRJ7ChRDYW5jZWxQZW5kaW5nTWVzc2FnZRIwLmhhZ2ljb2RlLnNlc3Npb24udjEuQ2FuY2VsUGVuZGluZ01lc3NhZ2VSZXF1ZXN0GjEuaGFnaWNvZGUuc2Vzc2lvbi52MS5DYW5jZWxQZW5kaW5nTWVzc2FnZVJlc3BvbnNlEoEBChZDYW5jZWxTY2hlZHVsZWRNZXNzYWdlEjIuaGFnaWNvZGUuc2Vzc2lvbi52MS5DYW5jZWxTY2hlZHVsZWRNZXNzYWdlUmVxdWVzdBozLmhhZ2ljb2RlLnNlc3Npb24udjEuQ2FuY2VsU2NoZWR1bGVkTWVzc2FnZVJlc3BvbnNlEmMKDFN0ZWVyU2Vzc2lvbhIoLmhhZ2ljb2RlLnNlc3Npb24udjEuU3RlZXJTZXNzaW9uUmVxdWVzdBopLmhhZ2ljb2RlLnNlc3Npb24udjEuU3RlZXJTZXNzaW9uUmVzcG9uc2USdQoSU3RlZXJRdWV1ZWRNZXNzYWdlEi4uaGFnaWNvZGUuc2Vzc2lvbi52MS5TdGVlclF1ZXVlZE1lc3NhZ2VSZXF1ZXN0Gi8uaGFnaWNvZGUuc2Vzc2lvbi52MS5TdGVlclF1ZXVlZE1lc3NhZ2VSZXNwb25zZRJ1ChJQb3N0U2Vzc2lvbk1lc3NhZ2USLi5oYWdpY29kZS5zZXNzaW9uLnYxLlBvc3RTZXNzaW9uTWVzc2FnZVJlcXVlc3QaLy5oYWdpY29kZS5zZXNzaW9uLnYxLlBvc3RTZXNzaW9uTWVzc2FnZVJlc3BvbnNlEqgBCiNHZXRDb252ZXJ0VG9Qcm9wb3NhbEhhZ2lTa2lsbFByb21wdBI/LmhhZ2ljb2RlLnNlc3Npb24udjEuR2V0Q29udmVydFRvUHJvcG9zYWxIYWdpU2tpbGxQcm9tcHRSZXF1ZXN0GkAuaGFnaWNvZGUuc2Vzc2lvbi52MS5HZXRDb252ZXJ0VG9Qcm9wb3NhbEhhZ2lTa2lsbFByb21wdFJlc3BvbnNlEocBChhTdWJtaXRTZXNzaW9uQW5ub3RhdGlvbnMSNC5oYWdpY29kZS5zZXNzaW9uLnYxLlN1Ym1pdFNlc3Npb25Bbm5vdGF0aW9uc1JlcXVlc3QaNS5oYWdpY29kZS5zZXNzaW9uLnYxLlN1Ym1pdFNlc3Npb25Bbm5vdGF0aW9uc1Jlc3BvbnNlQimqAiZQQ29kZS5IdHRwQXBpLkdycGNDb250cmFjdHMuU2Vzc2lvbi5WMWIGcHJvdG8z",[Ue,Ne,de]),ab=v(Me,1),rb=v(Me,11),ib=v(Me,15),sb=v(Me,19),lb=v(Me,34),cb=v(Me,38),db=v(Me,43),ub=We(Me,0),Ie=oe("CipoYWdpY29kZS9zZXNzaW9uL3YxL3Nlc3Npb25fcHJvcG9zYWwucHJvdG8SE2hhZ2ljb2RlLnNlc3Npb24udjEiOAoiTGlzdFVubGlua2VkT3BlblNwZWNDaGFuZ2VzUmVxdWVzdBISCgpwcm9qZWN0X2lkGAEgASgJInIKI0xpc3RVbmxpbmtlZE9wZW5TcGVjQ2hhbmdlc1Jlc3BvbnNlEksKBnJlc3VsdBgBIAEoCzI7LmhhZ2ljb2RlLnNlc3Npb24udjEuVW5saW5rZWRPcGVuU3BlY0NoYW5nZXNMaXN0UmVzcG9uc2VEdG8ijQIKGVVubGlua2VkT3BlblNwZWNDaGFuZ2VEdG8SDAoEbmFtZRgBIAEoCRINCgV0aXRsZRgCIAEoCRIPCgdzdW1tYXJ5GAMgASgJEhwKD3Rhc2tzX2NvbXBsZXRlZBgEIAEoBUgAiAEBEhgKC3Rhc2tzX3RvdGFsGAUgASgFSAGIAQESGQoRaGFzX3Byb3Bvc2FsX2ZpbGUYBiABKAgSDQoFZmlsZXMYByADKAkSIgoVbm90X2ltcG9ydGFibGVfcmVhc29uGAggASgJSAKIAQFCEgoQX3Rhc2tzX2NvbXBsZXRlZEIOCgxfdGFza3NfdG90YWxCGAoWX25vdF9pbXBvcnRhYmxlX3JlYXNvbiJpCiZVbmxpbmtlZE9wZW5TcGVjQ2hhbmdlc0xpc3RSZXNwb25zZUR0bxI/CgdjaGFuZ2VzGAEgAygLMi4uaGFnaWNvZGUuc2Vzc2lvbi52MS5VbmxpbmtlZE9wZW5TcGVjQ2hhbmdlRHRvIjkKI0NvdW50VW5saW5rZWRPcGVuU3BlY0NoYW5nZXNSZXF1ZXN0EhIKCnByb2plY3RfaWQYASABKAkiawokQ291bnRVbmxpbmtlZE9wZW5TcGVjQ2hhbmdlc1Jlc3BvbnNlEkMKBnJlc3VsdBgBIAEoCzIzLmhhZ2ljb2RlLnNlc3Npb24udjEuVW5saW5rZWRPcGVuU3BlY0NoYW5nZUNvdW50RHRvIi8KHlVubGlua2VkT3BlblNwZWNDaGFuZ2VDb3VudER0bxINCgVjb3VudBgBIAEoBSJiCiRHZXRVbmxpbmtlZE9wZW5TcGVjQ2hhbmdlRmlsZVJlcXVlc3QSEgoKcHJvamVjdF9pZBgBIAEoCRITCgtjaGFuZ2VfbmFtZRgCIAEoCRIRCglmaWxlX3BhdGgYAyABKAkiawolR2V0VW5saW5rZWRPcGVuU3BlY0NoYW5nZUZpbGVSZXNwb25zZRJCCgZyZXN1bHQYASABKAsyMi5oYWdpY29kZS5zZXNzaW9uLnYxLlVubGlua2VkT3BlblNwZWNDaGFuZ2VGaWxlRHRvIkMKHVVubGlua2VkT3BlblNwZWNDaGFuZ2VGaWxlRHRvEhEKCWZpbGVfcGF0aBgBIAEoCRIPCgdjb250ZW50GAIgASgJIkgKHEltcG9ydE9wZW5TcGVjQ2hhbmdlc1JlcXVlc3QSEgoKcHJvamVjdF9pZBgBIAEoCRIUCgxjaGFuZ2VfbmFtZXMYAiADKAkiZAodSW1wb3J0T3BlblNwZWNDaGFuZ2VzUmVzcG9uc2USQwoGcmVzdWx0GAEgASgLMjMuaGFnaWNvZGUuc2Vzc2lvbi52MS5JbXBvcnRPcGVuU3BlY0NoYW5nZXNSZXN1bHREdG8iZAoeSW1wb3J0T3BlblNwZWNDaGFuZ2VzUmVzdWx0RHRvEkIKB3Jlc3VsdHMYASADKAsyMS5oYWdpY29kZS5zZXNzaW9uLnYxLkltcG9ydE9wZW5TcGVjQ2hhbmdlRW50cnlEdG8imAEKHEltcG9ydE9wZW5TcGVjQ2hhbmdlRW50cnlEdG8SDAoEbmFtZRgBIAEoCRIOCgZzdGF0dXMYAiABKAkSOAoHc2Vzc2lvbhgDIAEoCzInLmhhZ2ljb2RlLnNlc3Npb24udjEuU2Vzc2lvblJlc3BvbnNlRHRvEhQKB21lc3NhZ2UYBCABKAlIAIgBAUIKCghfbWVzc2FnZSJwCh5PcHRpbWl6ZVNlc3Npb25Qcm9wb3NhbFJlcXVlc3QSEgoKc2Vzc2lvbl9pZBgBIAEoCRI6CgRib2R5GAIgASgLMiwuaGFnaWNvZGUuc2Vzc2lvbi52MS5PcHRpbWl6ZVByb3Bvc2FsUmVxdWVzdCJtCh9PcHRpbWl6ZVNlc3Npb25Qcm9wb3NhbFJlc3BvbnNlEkoKBnJlc3VsdBgBIAEoCzI6LmhhZ2ljb2RlLnNlc3Npb24udjEuUHJvcG9zYWxPcHRpbWl6YXRpb25CdW5kbGVSZXNwb25zZUR0byJsChdHZW5lcmF0ZVByb3Bvc2FsUmVxdWVzdBISCgpzZXNzaW9uX2lkGAEgASgJEj0KBGJvZHkYAiABKAsyLy5oYWdpY29kZS5zZXNzaW9uLnYxLkdlbmVyYXRlUHJvcG9zYWxSZXF1ZXN0RHRvIlkKGEdlbmVyYXRlUHJvcG9zYWxSZXNwb25zZRI9CgZyZXN1bHQYASABKAsyLS5oYWdpY29kZS5zZXNzaW9uLnYxLlNpbXBsZU1lc3NhZ2VSZXNwb25zZUR0byJoChVBcmNoaXZlU2Vzc2lvblJlcXVlc3QSEgoKc2Vzc2lvbl9pZBgBIAEoCRI7CgRib2R5GAIgASgLMi0uaGFnaWNvZGUuc2Vzc2lvbi52MS5BcmNoaXZlU2Vzc2lvblJlcXVlc3REdG8iUQoWQXJjaGl2ZVNlc3Npb25SZXNwb25zZRI3CgZyZXN1bHQYASABKAsyJy5oYWdpY29kZS5zZXNzaW9uLnYxLlNlc3Npb25SZXNwb25zZUR0byJqChZFeGVjdXRlUHJvcG9zYWxSZXF1ZXN0EhIKCnNlc3Npb25faWQYASABKAkSPAoEYm9keRgCIAEoCzIuLmhhZ2ljb2RlLnNlc3Npb24udjEuRXhlY3V0ZVByb3Bvc2FsUmVxdWVzdER0byJYChdFeGVjdXRlUHJvcG9zYWxSZXNwb25zZRI9CgZyZXN1bHQYASABKAsyLS5oYWdpY29kZS5zZXNzaW9uLnYxLlNpbXBsZU1lc3NhZ2VSZXNwb25zZUR0byIsChZDb21wbGV0ZVNlc3Npb25SZXF1ZXN0EhIKCnNlc3Npb25faWQYASABKAkiUgoXQ29tcGxldGVTZXNzaW9uUmVzcG9uc2USNwoGcmVzdWx0GAEgASgLMicuaGFnaWNvZGUuc2Vzc2lvbi52MS5TZXNzaW9uUmVzcG9uc2VEdG8iMwodVmFsaWRhdGVTZXNzaW9uRXhlY3V0ZVJlcXVlc3QSEgoKc2Vzc2lvbl9pZBgBIAEoCSJaCh5WYWxpZGF0ZVNlc3Npb25FeGVjdXRlUmVzcG9uc2USOAoGcmVzdWx0GAEgASgLMiguaGFnaWNvZGUuc2Vzc2lvbi52MS5WYWxpZGF0aW9uUmVzdWx0RHRvIjEKG1ZhbGlkYXRlU2Vzc2lvblN0YXJ0UmVxdWVzdBISCgpzZXNzaW9uX2lkGAEgASgJIlgKHFZhbGlkYXRlU2Vzc2lvblN0YXJ0UmVzcG9uc2USOAoGcmVzdWx0GAEgASgLMiguaGFnaWNvZGUuc2Vzc2lvbi52MS5WYWxpZGF0aW9uUmVzdWx0RHRvIjMKHVZhbGlkYXRlU2Vzc2lvbkFyY2hpdmVSZXF1ZXN0EhIKCnNlc3Npb25faWQYASABKAkiWgoeVmFsaWRhdGVTZXNzaW9uQXJjaGl2ZVJlc3BvbnNlEjgKBnJlc3VsdBgBIAEoCzIoLmhhZ2ljb2RlLnNlc3Npb24udjEuVmFsaWRhdGlvblJlc3VsdER0byJyCiFQcm9wb3NhbE9wdGltaXphdGlvbkRpYWdub3N0aWNEdG8SDAoEY29kZRgBIAEoCRIQCghzZXZlcml0eRgCIAEoCRIPCgdtZXNzYWdlGAMgASgJEhIKBWZpZWxkGAQgASgJSACIAQFCCAoGX2ZpZWxkIo4BCi1Qcm9wb3NhbE9wdGltaXphdGlvbkJ1bmRsZVZhbGlkYXRpb25SZXN1bHREdG8SEAoIaXNfdmFsaWQYASABKAgSSwoLZGlhZ25vc3RpY3MYAiADKAsyNi5oYWdpY29kZS5zZXNzaW9uLnYxLlByb3Bvc2FsT3B0aW1pemF0aW9uRGlhZ25vc3RpY0R0byLcAwonUHJvcG9zYWxPcHRpbWl6YXRpb25TY2VuYXJpb1NldHRpbmdzRHRvEhcKCnNjcmlwdF9rZXkYASABKAlIAIgBARIdChBzZWxlY3RlZF9oZXJvX2lkGAIgASgJSAGIAQESHAoPY2FwdGFpbl9oZXJvX2lkGAMgASgJSAKIAQESFgoJcm9zdGVyX2lkGAQgASgJSAOIAQESawoQZXh0ZW5zaW9uX2ZpZWxkcxgFIAMoCzJRLmhhZ2ljb2RlLnNlc3Npb24udjEuUHJvcG9zYWxPcHRpbWl6YXRpb25TY2VuYXJpb1NldHRpbmdzRHRvLkV4dGVuc2lvbkZpZWxkc0VudHJ5EhYKCXN0YWdlX2tleRgGIAEoCUgEiAEBEh0KEHNlbGVjdGlvbl9zb3VyY2UYByABKAlIBYgBARo2ChRFeHRlbnNpb25GaWVsZHNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBQg0KC19zY3JpcHRfa2V5QhMKEV9zZWxlY3RlZF9oZXJvX2lkQhIKEF9jYXB0YWluX2hlcm9faWRCDAoKX3Jvc3Rlcl9pZEIMCgpfc3RhZ2Vfa2V5QhMKEV9zZWxlY3Rpb25fc291cmNlIr4DCiNQcm9wb3NhbE9wdGltaXphdGlvbkJ1bmRsZVJlc3VsdER0bxIcCg9vcHRpbWl6ZWRfdGl0bGUYASABKAlIAIgBARIoChtvcHRpbWl6ZWRfcHJvcG9zYWxfbWFya2Rvd24YAiABKAlIAYgBARIfChdvcHRpbWl6ZWRfcHJvcG9zYWxfbmFtZRgDIAEoCRIdChVvcHRpbWl6ZWRfZGVzY3JpcHRpb24YBCABKAkSVwoRc2NlbmFyaW9fc2V0dGluZ3MYBSABKAsyPC5oYWdpY29kZS5zZXNzaW9uLnYxLlByb3Bvc2FsT3B0aW1pemF0aW9uU2NlbmFyaW9TZXR0aW5nc0R0bxJWCgp2YWxpZGF0aW9uGAYgASgLMkIuaGFnaWNvZGUuc2Vzc2lvbi52MS5Qcm9wb3NhbE9wdGltaXphdGlvbkJ1bmRsZVZhbGlkYXRpb25SZXN1bHREdG8SGQoMcmF3X3Jlc3BvbnNlGAcgASgJSAKIAQFCEgoQX29wdGltaXplZF90aXRsZUIeChxfb3B0aW1pemVkX3Byb3Bvc2FsX21hcmtkb3duQg8KDV9yYXdfcmVzcG9uc2Ui0ggKJFByb3Bvc2FsT3B0aW1pemF0aW9uQnVuZGxlU3VtbWFyeUR0bxIbChNyZXF1ZXN0X2ZpbmdlcnByaW50GAEgASgJEjQKEGdlbmVyYXRlZF9hdF91dGMYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEg4KBnNvdXJjZRgDIAEoCRIVCg1hcHBsaWVkX3RpdGxlGAQgASgJEh0KFWFwcGxpZWRfcHJvcG9zYWxfbmFtZRgFIAEoCRIgChhwcm9wb3NhbF9kcmFmdF9hdmFpbGFibGUYBiABKAgSIAoYc2NlbmFyaW9fc2V0dGluZ3Nfc3RhdHVzGAcgASgJEhoKEmFwcGxpZWRfdGl0bGVfbW9kZRgIIAEoCRIQCghpc192YWxpZBgJIAEoCBJLCgtkaWFnbm9zdGljcxgKIAMoCzI2LmhhZ2ljb2RlLnNlc3Npb24udjEuUHJvcG9zYWxPcHRpbWl6YXRpb25EaWFnbm9zdGljRHRvEiYKGW9wdGltaXplZF90aXRsZV9jYW5kaWRhdGUYCyABKAlIAIgBARIjChZwcm9wb3NhbF9kcmFmdF9wcmV2aWV3GAwgASgJSAGIAQESGgoNYXJ0aWZhY3RfcGF0aBgNIAEoCUgCiAEBEhsKDmNvcnJlbGF0aW9uX2lkGA4gASgJSAOIAQESHQoQcmVzb2x2ZWRfaGVyb19pZBgPIAEoCUgEiAEBEh8KEnJlc29sdmVkX2hlcm9fbmFtZRgQIAEoCUgFiAEBEh8KEnJlc29sdmVkX2hlcm9faWNvbhgRIAEoCUgGiAEBEigKG3Jlc29sdmVkX2hlcm9fZXhlY3V0b3JfdHlwZRgSIAEoCUgHiAEBEiIKFWhlcm9fc2VsZWN0aW9uX3NvdXJjZRgTIAEoCUgIiAEBEiMKFmhlcm9fcm91dGluZ19zdGFnZV9rZXkYFCABKAlICYgBARIkChdoZXJvX3JvdXRpbmdfc2NyaXB0X2tleRgVIAEoCUgKiAEBEiQKF29wdGltaXphdGlvbl9jZXNzaW9uX2lkGBYgASgJSAuIAQFCHAoaX29wdGltaXplZF90aXRsZV9jYW5kaWRhdGVCGQoXX3Byb3Bvc2FsX2RyYWZ0X3ByZXZpZXdCEAoOX2FydGlmYWN0X3BhdGhCEQoPX2NvcnJlbGF0aW9uX2lkQhMKEV9yZXNvbHZlZF9oZXJvX2lkQhUKE19yZXNvbHZlZF9oZXJvX25hbWVCFQoTX3Jlc29sdmVkX2hlcm9faWNvbkIeChxfcmVzb2x2ZWRfaGVyb19leGVjdXRvcl90eXBlQhgKFl9oZXJvX3NlbGVjdGlvbl9zb3VyY2VCGQoXX2hlcm9fcm91dGluZ19zdGFnZV9rZXlCGgoYX2hlcm9fcm91dGluZ19zY3JpcHRfa2V5QhoKGF9vcHRpbWl6YXRpb25fY2Vzc2lvbl9pZCLVAQolUHJvcG9zYWxPcHRpbWl6YXRpb25CdW5kbGVSZXNwb25zZUR0bxJICgZyZXN1bHQYASABKAsyOC5oYWdpY29kZS5zZXNzaW9uLnYxLlByb3Bvc2FsT3B0aW1pemF0aW9uQnVuZGxlUmVzdWx0RHRvEkoKB3N1bW1hcnkYAiABKAsyOS5oYWdpY29kZS5zZXNzaW9uLnYxLlByb3Bvc2FsT3B0aW1pemF0aW9uQnVuZGxlU3VtbWFyeUR0bxIWCg5jb3JyZWxhdGlvbl9pZBgDIAEoCSKJAwoXT3B0aW1pemVQcm9wb3NhbFJlcXVlc3QSEwoLZGVzY3JpcHRpb24YASABKAkSJgoZcHJvcG9zYWxfY29udGVudF9sYW5ndWFnZRgCIAEoCUgAiAEBEiMKFm9wdGltaXphdGlvbl9kaXJlY3Rpb24YAyABKAlIAYgBARISCgV0aXRsZRgEIAEoCUgCiAEBEhgKEGlzX2RlZmF1bHRfdGl0bGUYBSABKAgSJQoYb3JpZ2luYWxfY2hpZWZfY29tcGxhaW50GAYgASgJSAOIAQESVwoRc2NlbmFyaW9fc2V0dGluZ3MYByABKAsyPC5oYWdpY29kZS5zZXNzaW9uLnYxLlByb3Bvc2FsT3B0aW1pemF0aW9uU2NlbmFyaW9TZXR0aW5nc0R0b0IcChpfcHJvcG9zYWxfY29udGVudF9sYW5ndWFnZUIZChdfb3B0aW1pemF0aW9uX2RpcmVjdGlvbkIICgZfdGl0bGVCGwoZX29yaWdpbmFsX2NoaWVmX2NvbXBsYWludCJFChpQbGFubmluZ0RpcmVjdGlvbk9wdGlvbkR0bxIPCgJpZBgBIAEoCUgAiAEBEg8KB2VuYWJsZWQYAiABKAhCBQoDX2lkIowCChpHZW5lcmF0ZVByb3Bvc2FsUmVxdWVzdER0bxIgChNlbmFibGVfZXhwbG9yZV9tb2RlGAEgASgISACIAQESTAoTcGxhbm5pbmdfZGlyZWN0aW9ucxgCIAMoCzIvLmhhZ2ljb2RlLnNlc3Npb24udjEuUGxhbm5pbmdEaXJlY3Rpb25PcHRpb25EdG8SJgoZcHJvcG9zYWxfY29udGVudF9sYW5ndWFnZRgDIAEoCUgBiAEBEhQKB2hlcm9faWQYBCABKAlIAogBAUIWChRfZW5hYmxlX2V4cGxvcmVfbW9kZUIcChpfcHJvcG9zYWxfY29udGVudF9sYW5ndWFnZUIKCghfaGVyb19pZCI8ChhBcmNoaXZlU2Vzc2lvblJlcXVlc3REdG8SFAoHaGVyb19pZBgBIAEoCUgAiAEBQgoKCF9oZXJvX2lkIj0KGUV4ZWN1dGVQcm9wb3NhbFJlcXVlc3REdG8SFAoHaGVyb19pZBgBIAEoCUgAiAEBQgoKCF9oZXJvX2lkIlcKC0NvbmZsaWN0RHRvEgwKBHR5cGUYASABKAkSEQoJZW50aXR5X2lkGAIgASgJEhMKC2Rlc2NyaXB0aW9uGAMgASgJEhIKCnJlc29sdXRpb24YBCABKAkiawoSVmFsaWRhdGlvbklzc3VlRHRvEgwKBGNvZGUYASABKAkSDwoHbWVzc2FnZRgCIAEoCRIQCghzZXZlcml0eRgDIAEoCRIWCgllbnRpdHlfaWQYBCABKAlIAIgBAUIMCgpfZW50aXR5X2lkIoUBChRWYWxpZGF0aW9uU3VtbWFyeUR0bxIVCg1wcm9qZWN0X2NvdW50GAEgASgFEhUKDXNlc3Npb25fY291bnQYAiABKAUSHwoXZHVwbGljYXRlX3Byb2plY3RfY291bnQYAyABKAUSHgoWb3JwaGFuZWRfc2Vzc2lvbl9jb3VudBgEIAEoBSKMAgoTVmFsaWRhdGlvblJlc3VsdER0bxIQCghpc192YWxpZBgBIAEoCBI5Cgh3YXJuaW5ncxgCIAMoCzInLmhhZ2ljb2RlLnNlc3Npb24udjEuVmFsaWRhdGlvbklzc3VlRHRvEjcKBmVycm9ycxgDIAMoCzInLmhhZ2ljb2RlLnNlc3Npb24udjEuVmFsaWRhdGlvbklzc3VlRHRvEjMKCWNvbmZsaWN0cxgEIAMoCzIgLmhhZ2ljb2RlLnNlc3Npb24udjEuQ29uZmxpY3REdG8SOgoHc3VtbWFyeRgFIAEoCzIpLmhhZ2ljb2RlLnNlc3Npb24udjEuVmFsaWRhdGlvblN1bW1hcnlEdG8yngwKFlNlc3Npb25Qcm9wb3NhbFNlcnZpY2UShAEKF09wdGltaXplU2Vzc2lvblByb3Bvc2FsEjMuaGFnaWNvZGUuc2Vzc2lvbi52MS5PcHRpbWl6ZVNlc3Npb25Qcm9wb3NhbFJlcXVlc3QaNC5oYWdpY29kZS5zZXNzaW9uLnYxLk9wdGltaXplU2Vzc2lvblByb3Bvc2FsUmVzcG9uc2USbwoQR2VuZXJhdGVQcm9wb3NhbBIsLmhhZ2ljb2RlLnNlc3Npb24udjEuR2VuZXJhdGVQcm9wb3NhbFJlcXVlc3QaLS5oYWdpY29kZS5zZXNzaW9uLnYxLkdlbmVyYXRlUHJvcG9zYWxSZXNwb25zZRJpCg5BcmNoaXZlU2Vzc2lvbhIqLmhhZ2ljb2RlLnNlc3Npb24udjEuQXJjaGl2ZVNlc3Npb25SZXF1ZXN0GisuaGFnaWNvZGUuc2Vzc2lvbi52MS5BcmNoaXZlU2Vzc2lvblJlc3BvbnNlEmwKD0V4ZWN1dGVQcm9wb3NhbBIrLmhhZ2ljb2RlLnNlc3Npb24udjEuRXhlY3V0ZVByb3Bvc2FsUmVxdWVzdBosLmhhZ2ljb2RlLnNlc3Npb24udjEuRXhlY3V0ZVByb3Bvc2FsUmVzcG9uc2USbAoPQ29tcGxldGVTZXNzaW9uEisuaGFnaWNvZGUuc2Vzc2lvbi52MS5Db21wbGV0ZVNlc3Npb25SZXF1ZXN0GiwuaGFnaWNvZGUuc2Vzc2lvbi52MS5Db21wbGV0ZVNlc3Npb25SZXNwb25zZRKBAQoWVmFsaWRhdGVTZXNzaW9uRXhlY3V0ZRIyLmhhZ2ljb2RlLnNlc3Npb24udjEuVmFsaWRhdGVTZXNzaW9uRXhlY3V0ZVJlcXVlc3QaMy5oYWdpY29kZS5zZXNzaW9uLnYxLlZhbGlkYXRlU2Vzc2lvbkV4ZWN1dGVSZXNwb25zZRJ7ChRWYWxpZGF0ZVNlc3Npb25TdGFydBIwLmhhZ2ljb2RlLnNlc3Npb24udjEuVmFsaWRhdGVTZXNzaW9uU3RhcnRSZXF1ZXN0GjEuaGFnaWNvZGUuc2Vzc2lvbi52MS5WYWxpZGF0ZVNlc3Npb25TdGFydFJlc3BvbnNlEoEBChZWYWxpZGF0ZVNlc3Npb25BcmNoaXZlEjIuaGFnaWNvZGUuc2Vzc2lvbi52MS5WYWxpZGF0ZVNlc3Npb25BcmNoaXZlUmVxdWVzdBozLmhhZ2ljb2RlLnNlc3Npb24udjEuVmFsaWRhdGVTZXNzaW9uQXJjaGl2ZVJlc3BvbnNlEpABChtMaXN0VW5saW5rZWRPcGVuU3BlY0NoYW5nZXMSNy5oYWdpY29kZS5zZXNzaW9uLnYxLkxpc3RVbmxpbmtlZE9wZW5TcGVjQ2hhbmdlc1JlcXVlc3QaOC5oYWdpY29kZS5zZXNzaW9uLnYxLkxpc3RVbmxpbmtlZE9wZW5TcGVjQ2hhbmdlc1Jlc3BvbnNlEpMBChxDb3VudFVubGlua2VkT3BlblNwZWNDaGFuZ2VzEjguaGFnaWNvZGUuc2Vzc2lvbi52MS5Db3VudFVubGlua2VkT3BlblNwZWNDaGFuZ2VzUmVxdWVzdBo5LmhhZ2ljb2RlLnNlc3Npb24udjEuQ291bnRVbmxpbmtlZE9wZW5TcGVjQ2hhbmdlc1Jlc3BvbnNlEpYBCh1HZXRVbmxpbmtlZE9wZW5TcGVjQ2hhbmdlRmlsZRI5LmhhZ2ljb2RlLnNlc3Npb24udjEuR2V0VW5saW5rZWRPcGVuU3BlY0NoYW5nZUZpbGVSZXF1ZXN0GjouaGFnaWNvZGUuc2Vzc2lvbi52MS5HZXRVbmxpbmtlZE9wZW5TcGVjQ2hhbmdlRmlsZVJlc3BvbnNlEn4KFUltcG9ydE9wZW5TcGVjQ2hhbmdlcxIxLmhhZ2ljb2RlLnNlc3Npb24udjEuSW1wb3J0T3BlblNwZWNDaGFuZ2VzUmVxdWVzdBoyLmhhZ2ljb2RlLnNlc3Npb24udjEuSW1wb3J0T3BlblNwZWNDaGFuZ2VzUmVzcG9uc2VCKaoCJlBDb2RlLkh0dHBBcGkuR3JwY0NvbnRyYWN0cy5TZXNzaW9uLlYxYgZwcm90bzM",[Ne,de]),mb=v(Ie,15),hb=v(Ie,17),bb=v(Ie,19),gb=v(Ie,21),pb=v(Ie,23),Ab=v(Ie,36),fb=v(Ie,38),Zb=v(Ie,39),Rb=v(Ie,40),Eb=We(Ie,0),Vb=oe("CixoYWdpY29kZS9jb29yZGluYXRpb24vdjEvcmVzb3VyY2VfbG9jay5wcm90bxIYaGFnaWNvZGUuY29vcmRpbmF0aW9uLnYxIuMFCgpMb2NrU3RhdHVzEg8KB2xvY2tfaWQYASABKAkSEAoIb3duZXJfaWQYAiABKAkSDgoGc3RhdHVzGAMgASgJEhAKCHBvc2l0aW9uGAQgASgFEg0KBWVwb2NoGAUgASgDEjQKEGxlYXNlX2V4cGlyZXNfYXQYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEjcKE21heF9ob2xkX2V4cGlyZXNfYXQYByABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEhcKD2hvbGRlcl9vd25lcl9pZBgIIAEoCRIUCgxob2xkZXJfbGFiZWwYCSABKAkSFAoMcXVldWVfbGVuZ3RoGAogASgFEiIKGnN1Z2dlc3RlZF9wb2xsX2ludGVydmFsX21zGAsgASgFEicKH3N1Z2dlc3RlZF9oZWFydGJlYXRfaW50ZXJ2YWxfbXMYDCABKAUSLwoLc2VydmVyX3RpbWUYDSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEiEKGXJlcXVpc2l0aW9uZWRfYnlfb3duZXJfaWQYDiABKAkSGgoScmVxdWlzaXRpb25fcmVhc29uGA8gASgJEjQKEHJlcXVpc2l0aW9uZWRfYXQYECABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEjgKFGNoZWNrX2luX2VhcmxpZXN0X2F0GBEgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBI2ChJjaGVja19pbl9sYXRlc3RfYXQYEiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEjQKEHR1cm5fZWFybGllc3RfYXQYEyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEjIKDnR1cm5fbGF0ZXN0X2F0GBQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCKrAQoSQWNxdWlyZUxvY2tSZXF1ZXN0Eg8KB2xvY2tfaWQYASABKAkSEAoIb3duZXJfaWQYAiABKAkSGgoNbGVhc2Vfc2Vjb25kcxgDIAEoBUgAiAEBEhIKBWxhYmVsGAQgASgJSAGIAQESFwoKc2Vzc2lvbl9pZBgFIAEoCUgCiAEBQhAKDl9sZWFzZV9zZWNvbmRzQggKBl9sYWJlbEINCgtfc2Vzc2lvbl9pZCJLChNBY3F1aXJlTG9ja1Jlc3BvbnNlEjQKBnJlc3VsdBgBIAEoCzIkLmhhZ2ljb2RlLmNvb3JkaW5hdGlvbi52MS5Mb2NrU3RhdHVzImUKFEdldExvY2tTdGF0dXNSZXF1ZXN0Eg8KB2xvY2tfaWQYASABKAkSEAoIb3duZXJfaWQYAiABKAkSGQoMd2FpdF9zZWNvbmRzGAMgASgFSACIAQFCDwoNX3dhaXRfc2Vjb25kcyJNChVHZXRMb2NrU3RhdHVzUmVzcG9uc2USNAoGcmVzdWx0GAEgASgLMiQuaGFnaWNvZGUuY29vcmRpbmF0aW9uLnYxLkxvY2tTdGF0dXMigQEKEFJlbmV3TG9ja1JlcXVlc3QSDwoHbG9ja19pZBgBIAEoCRIQCghvd25lcl9pZBgCIAEoCRIaCg1sZWFzZV9zZWNvbmRzGAMgASgFSACIAQESEgoFZXBvY2gYBCABKANIAYgBAUIQCg5fbGVhc2Vfc2Vjb25kc0IICgZfZXBvY2giSQoRUmVuZXdMb2NrUmVzcG9uc2USNAoGcmVzdWx0GAEgASgLMiQuaGFnaWNvZGUuY29vcmRpbmF0aW9uLnYxLkxvY2tTdGF0dXMiVQoSUmVsZWFzZUxvY2tSZXF1ZXN0Eg8KB2xvY2tfaWQYASABKAkSEAoIb3duZXJfaWQYAiABKAkSEgoFZXBvY2gYAyABKANIAIgBAUIICgZfZXBvY2giWQoTUmVsZWFzZUxvY2tSZXNwb25zZRIQCghyZWxlYXNlZBgBIAEoCBIXCg9wcmV2aW91c19zdGF0dXMYAiABKAkSFwoPaG9sZGVyX293bmVyX2lkGAMgASgJIpEBChZSZXF1aXNpdGlvbkxvY2tSZXF1ZXN0Eg8KB2xvY2tfaWQYASABKAkSEAoIb3duZXJfaWQYAiABKAkSDgoGcmVhc29uGAMgASgJEhIKBWxhYmVsGAQgASgJSACIAQESFwoKc2Vzc2lvbl9pZBgFIAEoCUgBiAEBQggKBl9sYWJlbEINCgtfc2Vzc2lvbl9pZCJPChdSZXF1aXNpdGlvbkxvY2tSZXNwb25zZRI0CgZyZXN1bHQYASABKAsyJC5oYWdpY29kZS5jb29yZGluYXRpb24udjEuTG9ja1N0YXR1cyIyChBMaXN0TG9ja3NSZXF1ZXN0EhMKBnByZWZpeBgBIAEoCUgAiAEBQgkKB19wcmVmaXgiSQoRTGlzdExvY2tzUmVzcG9uc2USNAoFbG9ja3MYASADKAsyJS5oYWdpY29kZS5jb29yZGluYXRpb24udjEuTG9ja1N1bW1hcnki3QEKC0xvY2tTdW1tYXJ5Eg8KB2xvY2tfaWQYASABKAkSFwoPaG9sZGVyX293bmVyX2lkGAIgASgJEhQKDGhvbGRlcl9sYWJlbBgDIAEoCRINCgVlcG9jaBgEIAEoAxI0ChBsZWFzZV9leHBpcmVzX2F0GAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIzCg9ob2xkX3N0YXJ0ZWRfYXQYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEhQKDHF1ZXVlX2xlbmd0aBgHIAEoBTKjBQoTUmVzb3VyY2VMb2NrU2VydmljZRJqCgtBY3F1aXJlTG9jaxIsLmhhZ2ljb2RlLmNvb3JkaW5hdGlvbi52MS5BY3F1aXJlTG9ja1JlcXVlc3QaLS5oYWdpY29kZS5jb29yZGluYXRpb24udjEuQWNxdWlyZUxvY2tSZXNwb25zZRJwCg1HZXRMb2NrU3RhdHVzEi4uaGFnaWNvZGUuY29vcmRpbmF0aW9uLnYxLkdldExvY2tTdGF0dXNSZXF1ZXN0Gi8uaGFnaWNvZGUuY29vcmRpbmF0aW9uLnYxLkdldExvY2tTdGF0dXNSZXNwb25zZRJkCglSZW5ld0xvY2sSKi5oYWdpY29kZS5jb29yZGluYXRpb24udjEuUmVuZXdMb2NrUmVxdWVzdBorLmhhZ2ljb2RlLmNvb3JkaW5hdGlvbi52MS5SZW5ld0xvY2tSZXNwb25zZRJqCgtSZWxlYXNlTG9jaxIsLmhhZ2ljb2RlLmNvb3JkaW5hdGlvbi52MS5SZWxlYXNlTG9ja1JlcXVlc3QaLS5oYWdpY29kZS5jb29yZGluYXRpb24udjEuUmVsZWFzZUxvY2tSZXNwb25zZRJ2Cg9SZXF1aXNpdGlvbkxvY2sSMC5oYWdpY29kZS5jb29yZGluYXRpb24udjEuUmVxdWlzaXRpb25Mb2NrUmVxdWVzdBoxLmhhZ2ljb2RlLmNvb3JkaW5hdGlvbi52MS5SZXF1aXNpdGlvbkxvY2tSZXNwb25zZRJkCglMaXN0TG9ja3MSKi5oYWdpY29kZS5jb29yZGluYXRpb24udjEuTGlzdExvY2tzUmVxdWVzdBorLmhhZ2ljb2RlLmNvb3JkaW5hdGlvbi52MS5MaXN0TG9ja3NSZXNwb25zZUIuqgIrUENvZGUuSHR0cEFwaS5HcnBjQ29udHJhY3RzLkNvb3JkaW5hdGlvbi5WMWIGcHJvdG8z",[Ne]),Gb=We(Vb,0),Hn=new Set([b.INT64,b.UINT64,b.SINT64,b.FIXED64,b.SFIXED64]),Ys=e=>e.typeName.startsWith("google.protobuf.");function Tn(e){if(typeof e!="string")return e;const t=Number(e);return Number.isSafeInteger(t)?t:e}function un(e,t){if(t==null||typeof t!="object"||Array.isArray(t)||Ys(e))return t;const n=t;for(const o of e.fields){const a=n[o.jsonName];a!==void 0&&(n[o.jsonName]=Sb(o,a))}return n}function Sb(e,t){switch(e.fieldKind){case"scalar":return Hn.has(e.scalar)?Tn(t):t;case"message":return un(e.message,t);case"list":return Array.isArray(t)?e.listKind==="scalar"?Hn.has(e.scalar)?t.map(Tn):t:e.listKind==="message"?t.map(n=>un(e.message,n)):t:t;case"map":{if(t===null||typeof t!="object"||Array.isArray(t))return t;const n=t;for(const o of Object.keys(n))e.mapKind==="scalar"&&Hn.has(e.scalar)?n[o]=Tn(n[o]):e.mapKind==="message"&&(n[o]=un(e.message,n[o]));return n}default:return t}}function Nb(e,t){return un(e,es(e,t,{alwaysEmitImplicit:!0}))}function vb(e,t){return Nb(e,t).result}function mn(e,t,n=0){if(t===null||typeof t!="object"||Array.isArray(t)||Ys(e)||n>8)return t;const o=t;for(const a of e.fields){const r=o[a.jsonName];if(!(r===null||typeof r!="object")){if(a.fieldKind==="message")mn(a.message,r,n+1);else if(a.fieldKind==="list"&&a.listKind==="message"&&Array.isArray(r))r.forEach(i=>mn(a.message,i,n+1));else if(a.fieldKind==="map"&&!Array.isArray(r)){const i=r;for(const s of Object.keys(i)){const l=i[s];a.mapKind==="scalar"&&a.scalar===b.STRING?l===null?delete i[s]:(typeof l=="number"||typeof l=="boolean")&&(i[s]=String(l)):a.mapKind==="message"&&mn(a.message,l,n+1)}}}}return t}function D(e,t){return is(e,t===void 0?t:mn(e,JSON.parse(JSON.stringify(t))),{ignoreUnknownFields:!0})}function Br(e,t){const n=Zs(e);if(n)throw t.forEach((o,a)=>{n.metadata.append(a,o)}),n;if(!t.has("Grpc-Status")&&!e.has("Grpc-Status"))throw new C("protocol error: missing status",E.Internal)}function Wb(e,t,n,o){var a,r;const i=new Headers(n??{});i.set(bm,e?Em:Vm),i.set(Rm,"1");const s=(r=(a=i.get("User-Agent"))!==null&&a!==void 0?a:i.get("X-User-Agent"))!==null&&r!==void 0?r:"connect-es/2.2.0";return i.set(Zm,s),o&&i.set(fm,s),t!==void 0&&i.set(pm,`${t}m`),i}function Cr(e,t,n,o,a,r){const i=Wb(e,t,n,r);return a!=null&&i.set(As,a.name),o.length>0&&i.set(gm,o.map(s=>s.name).join(",")),i}function yb(e){switch(e){case 400:return E.Internal;case 401:return E.Unauthenticated;case 403:return E.PermissionDenied;case 404:return E.Unimplemented;case 429:return E.Unavailable;case 502:return E.Unavailable;case 503:return E.Unavailable;case 504:return E.Unavailable;default:return E.Unknown}}function Ib(e,t){var n;if(e>=200&&e<300)return{foundStatus:t.has(fs),headerError:Zs(t)};throw new C(decodeURIComponent((n=t.get("Grpc-Message"))!==null&&n!==void 0?n:`HTTP ${e}`),yb(e),t)}function Fr(e,t,n){const{foundStatus:o,headerError:a}=Ib(t,n);let r;const i=n.get(As);if(i!==null&&i.toLowerCase()!=="identity"&&(r=e.find(s=>s.name===i),!r))throw new C(`unsupported response encoding "${i}"`,E.Internal,n);return{foundStatus:o,compression:r,headerError:a}}var wr=function(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t=e[Symbol.asyncIterator],n;return t?t.call(e):(e=typeof __values=="function"?__values(e):e[Symbol.iterator](),n={},o("next"),o("throw"),o("return"),n[Symbol.asyncIterator]=function(){return this},n);function o(r){n[r]=e[r]&&function(i){return new Promise(function(s,l){i=e[r](i),a(s,l,i.done,i.value)})}}function a(r,i,s,l){Promise.resolve(l).then(function(c){r({value:c,done:s})},i)}},ze=function(e){return this instanceof ze?(this.v=e,this):new ze(e)},Yb=function(e,t,n){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var o=n.apply(e,t||[]),a,r=[];return a=Object.create((typeof AsyncIterator=="function"?AsyncIterator:Object).prototype),s("next"),s("throw"),s("return",i),a[Symbol.asyncIterator]=function(){return this},a;function i(Z){return function(G){return Promise.resolve(G).then(Z,h)}}function s(Z,G){o[Z]&&(a[Z]=function(S){return new Promise(function(X,J){r.push([Z,S,X,J])>1||l(Z,S)})},G&&(a[Z]=G(a[Z])))}function l(Z,G){try{c(o[Z](G))}catch(S){A(r[0][3],S)}}function c(Z){Z.value instanceof ze?Promise.resolve(Z.value.v).then(u,h):A(r[0][2],Z)}function u(Z){l("next",Z)}function h(Z){l("throw",Z)}function A(Z,G){Z(G),r.shift(),r.length&&l(r[0][0],r[0][1])}};function Xb(e){return{async unary(t,n,o,a,r,i){const s=vr(t,e.binaryOptions,e.jsonOptions,e);return o=o===void 0?e.defaultTimeoutMs:o<=0?void 0:o,await Wm({interceptors:e.interceptors,signal:n,timeoutMs:o,req:{stream:!1,service:t.parent,method:t,requestMethod:"POST",url:Nr(e.baseUrl,t),header:Cr(e.useBinaryFormat,o,a,e.acceptCompression,e.sendCompression,!0),contextValues:i??Gr(),message:r},next:async l=>{const c=await e.httpClient({url:l.url,method:l.requestMethod,header:l.header,signal:l.signal,body:dn(bs([l.message]),Ar(s.getI(e.useBinaryFormat)),Zr(e.sendCompression,e.compressMinBytes),Er(),{propagateDownStreamError:!0})}),{compression:u,headerError:h}=Fr(e.acceptCompression,c.status,c.header),{trailer:A,message:Z}=await tm(c.body,Vr(e.readMaxBytes),Rr(u??null,e.readMaxBytes),fr(s.getO(e.useBinaryFormat),128,Sr()),async G=>{var S,X,J,d;let m,p;try{for(var g=!0,f=wr(G),V;V=await f.next(),S=V.done,!S;g=!0){d=V.value,g=!1;const B=d;if(B.end){if(p!==void 0)throw new C("protocol error: received extra trailer",E.Unimplemented);p=B.value}else{if(m!==void 0)throw new C("protocol error: received extra output message for unary method",E.Unimplemented);m=B.value}}}catch(B){X={error:B}}finally{try{!g&&!S&&(J=f.return)&&await J.call(f)}finally{if(X)throw X.error}}return{trailer:p,message:m}},{propagateDownStreamError:!1});if(A===void 0)throw h??new C("protocol error: missing trailer",c.header.has("Grpc-Status")?E.Unimplemented:E.Unknown);if(Br(A,c.header),Z===void 0)throw new C("protocol error: missing output message for unary method",A.has("Grpc-Status")?E.Unimplemented:E.Unknown);return{stream:!1,service:t.parent,method:t,header:c.header,message:Z,trailer:A}}})},async stream(t,n,o,a,r,i){const s=vr(t,e.binaryOptions,e.jsonOptions,e);return o=o===void 0?e.defaultTimeoutMs:o<=0?void 0:o,ym({interceptors:e.interceptors,signal:n,timeoutMs:o,req:{stream:!0,service:t.parent,method:t,requestMethod:"POST",url:Nr(e.baseUrl,t),header:Cr(e.useBinaryFormat,o,a,e.acceptCompression,e.sendCompression,!0),contextValues:i??Gr(),message:r},next:async l=>{const c=await e.httpClient({url:l.url,method:l.requestMethod,header:l.header,signal:l.signal,body:dn(l.message,Ar(s.getI(e.useBinaryFormat)),Zr(e.sendCompression,e.compressMinBytes),Er(),{propagateDownStreamError:!0})}),{compression:u,foundStatus:h,headerError:A}=Fr(e.acceptCompression,c.status,c.header);if(A)throw A;const Z=Object.assign(Object.assign({},l),{header:c.header,trailer:new Headers,message:dn(c.body,Vr(e.readMaxBytes),Rr(u??null,e.readMaxBytes),fr(s.getO(e.useBinaryFormat),128,Sr()),function(G){return Yb(this,arguments,function*(){var S,X,J,d;if(h){if((yield ze(G[Symbol.asyncIterator]().next())).done!==!0)throw new C("protocol error: extra data for trailers-only",E.InvalidArgument);return yield ze(void 0)}let m=!1;try{for(var p=!0,g=wr(G),f;f=yield ze(g.next()),S=f.done,!S;p=!0){d=f.value,p=!1;const V=d;if(V.end){if(m)throw new C("protocol error: received extra trailer",E.InvalidArgument);m=!0,Br(V.value,c.header),V.value.forEach((B,K)=>Z.trailer.set(K,B));continue}if(m)throw new C("protocol error: received extra message after trailer",E.InvalidArgument);yield yield ze(V.value)}}catch(V){X={error:V}}finally{try{!p&&!S&&(J=g.return)&&(yield ze(J.call(g)))}finally{if(X)throw X.error}}if(!m)throw new C("protocol error: missing trailer",E.Internal)})},{propagateDownStreamError:!0})});return Z}})}}}function Wn(e){let t=E.Internal;const n=$o(e).map(yn);n.some(a=>a.code=="ERR_STREAM_WRITE_AFTER_END")||n.some(a=>a.code=="ERR_STREAM_DESTROYED"||a.code=="ERR_HTTP2_INVALID_STREAM"||a.code=="ECONNRESET")?t=E.Aborted:n.some(a=>a.code=="ETIMEDOUT"||a.code=="ENOTFOUND"||a.code=="EAI_AGAIN"||a.code=="ECONNREFUSED")&&(t=E.Unavailable);const o=C.from(e,t);return o!==e&&(o.cause=e),o}function $o(e){const t=[];for(;!(!(e instanceof Error)||t.includes(e)||(t.push(e),!("cause"in e)));)e=e.cause;return t}function yn(e){const t={};return e instanceof Error&&("code"in e&&typeof e.code=="string"&&(t.code=e.code),"syscall"in e&&typeof e.syscall=="string"&&(t.syscall=e.syscall)),t}function Bb(e){switch(e){case $.PROTOCOL_ERROR:case $.INTERNAL_ERROR:case $.FLOW_CONTROL_ERROR:case $.SETTINGS_TIMEOUT:case $.FRAME_SIZE_ERROR:case $.COMPRESSION_ERROR:case $.CONNECT_ERROR:return new C(`http/2 stream closed with error code ${$[e]} (0x${e.toString(16)})`,E.Internal);case $.REFUSED_STREAM:return new C(`http/2 stream closed with error code ${$[e]} (0x${e.toString(16)})`,E.Unavailable);case $.CANCEL:return new C(`http/2 stream closed with error code ${$[e]} (0x${e.toString(16)})`,E.Canceled);case $.ENHANCE_YOUR_CALM:return new C(`http/2 stream closed with error code ${$[e]} (0x${e.toString(16)})`,E.ResourceExhausted);case $.INADEQUATE_SECURITY:return new C(`http/2 stream closed with error code ${$[e]} (0x${e.toString(16)})`,E.PermissionDenied);case $.HTTP_1_1_REQUIRED:return new C(`http/2 stream closed with error code ${$[e]} (0x${e.toString(16)})`,E.PermissionDenied);default:break}}var $;(function(e){e[e.PROTOCOL_ERROR=1]="PROTOCOL_ERROR",e[e.INTERNAL_ERROR=2]="INTERNAL_ERROR",e[e.FLOW_CONTROL_ERROR=3]="FLOW_CONTROL_ERROR",e[e.SETTINGS_TIMEOUT=4]="SETTINGS_TIMEOUT",e[e.STREAM_CLOSED=5]="STREAM_CLOSED",e[e.FRAME_SIZE_ERROR=6]="FRAME_SIZE_ERROR",e[e.REFUSED_STREAM=7]="REFUSED_STREAM",e[e.CANCEL=8]="CANCEL",e[e.COMPRESSION_ERROR=9]="COMPRESSION_ERROR",e[e.CONNECT_ERROR=10]="CONNECT_ERROR",e[e.ENHANCE_YOUR_CALM=11]="ENHANCE_YOUR_CALM",e[e.INADEQUATE_SECURITY=12]="INADEQUATE_SECURITY",e[e.HTTP_1_1_REQUIRED=13]="HTTP_1_1_REQUIRED"})($||($={}));var Cb=(0,Zn.promisify)(gt.gzip),Fb=(0,Zn.promisify)(gt.gunzip),wb=(0,Zn.promisify)(gt.brotliCompress),kb=(0,Zn.promisify)(gt.brotliDecompress),Ub={name:"gzip",compress(e){return gn(Cb(e,{}))},decompress(e,t){return e.length==0?Promise.resolve(new Uint8Array(0)):gn(Xs(Fb(e,{maxOutputLength:t}),t))}},Jb={name:"br",compress(e){return gn(wb(e,{}))},decompress(e,t){return e.length==0?Promise.resolve(new Uint8Array(0)):gn(Xs(kb(e,{maxOutputLength:t}),t))}};function gn(e){return e.then(t=>t.buffer instanceof ArrayBuffer?t:new Uint8Array(t))}function Xs(e,t){return e.catch(n=>{var o;const a=yn(n);let r=E.Internal,i="decompression failed";switch(a.code){case"ERR_BUFFER_TOO_LARGE":r=E.ResourceExhausted,i=`message is larger than configured readMaxBytes ${t} after decompression`;break;case"Z_DATA_ERROR":case"ERR_PADDING_2":r=E.InvalidArgument;break;default:!((o=a.code)===null||o===void 0)&&o.startsWith("ERR__ERROR_FORMAT_")&&(r=E.InvalidArgument);break}return Promise.reject(new C(i,r,void 0,void 0,n))})}function In(e){const t=new Headers;for(const[n,o]of Object.entries(e))if(!n.startsWith(":")&&o!==void 0)if(typeof o=="string")t.append(n,o);else if(typeof o=="number")t.append(n,String(o));else for(const a of o)t.append(n,a);return t}function Bs(e,t){if(e===void 0&&t===void 0)return;const n=Object.create(null);if(t!==void 0)if(Array.isArray(t))for(let o=0;o+1<t.length;o+=2){const a=t[o],r=t[o+1];Array.isArray(n[a])?n[a].push(r):typeof n[a]=="string"?n[a]=[n[a],r]:n[a]=r}else for(const[o,a]of Object.entries(t))Array.isArray(a)?n[o]=a.concat():a!==void 0&&(n[o]=a);if(e!==void 0)if(Array.isArray(e))for(const[o,a]of e)Qn(n,o,a);else if("forEach"in e)typeof e.forEach=="function"&&e.forEach((o,a)=>{Qn(n,a,o)});else for(const[o,a]of Object.entries(e))Qn(n,o,a);return n}function Qn(e,t,n){t=t.toLowerCase();const o=e[t];Array.isArray(o)?o.push(n):o===void 0?e[t]=n:e[t]=[o.toString(),n]}var Cs=class{state(){return this.s.t=="ready"?this.verifying!==void 0?"verifying":this.s.streamCount()>0?"open":"idle":this.s.t}error(){if(this.s.t=="error")return this.s.reason}constructor(e,t,n){var o,a,r,i;this.s=co(),this.shuttingDown=[],this.authority=new URL(e).origin,this.http2SessionOptions=n,this.options={pingIntervalMs:(o=t?.pingIntervalMs)!==null&&o!==void 0?o:Number.POSITIVE_INFINITY,pingTimeoutMs:(a=t?.pingTimeoutMs)!==null&&a!==void 0?a:1e3*15,pingIdleConnection:(r=t?.pingIdleConnection)!==null&&r!==void 0?r:!1,idleConnectionTimeoutMs:(i=t?.idleConnectionTimeoutMs)!==null&&i!==void 0?i:1e3*60*15}}async connect(){try{return(await this.gotoReady()).streamCount()>0?"open":"idle"}catch{return"error"}}async request(e,t,n,o){for(;;){const a=await this.gotoReady();try{const r=a.conn.request(Object.assign(Object.assign({},n),{":method":e,":path":t}),o);return a.registerRequest(r),r}catch(r){if(a.conn.closed||a.conn.destroyed)continue;throw r}}}notifyResponseByteRead(e){this.s.t=="ready"&&this.s.responseByteRead(e);for(const t of this.shuttingDown)t.responseByteRead(e)}abort(e){var t,n,o;const a=e??new C("connection aborted",E.Canceled);(n=(t=this.s).abort)===null||n===void 0||n.call(t,a);for(const r of this.shuttingDown)(o=r.abort)===null||o===void 0||o.call(r,a);this.setState(qt(a))}async gotoReady(){for(this.s.t=="ready"?this.s.isShuttingDown()||this.s.conn.closed||this.s.conn.destroyed?this.setState(Mn(this.authority,this.http2SessionOptions)):this.s.requiresVerify()&&await this.verify(this.s):(this.s.t=="closed"||this.s.t=="error")&&this.setState(Mn(this.authority,this.http2SessionOptions));this.s.t!=="ready";){if(this.s.t==="error")throw this.s.reason;this.s.t==="connecting"&&await this.s.conn}return this.s}setState(e){var t,n;if((n=(t=this.s).onExitState)===null||n===void 0||n.call(t),this.s.t=="ready"&&this.s.isShuttingDown()){const o=this.s;this.shuttingDown.push(o),o.onClose=o.onError=()=>{const a=this.shuttingDown.indexOf(o);a!==-1&&this.shuttingDown.splice(a,1)}}switch(e.t){case"connecting":e.conn.then(o=>{this.setState(Kb(o,this.options))},o=>{this.setState(qt(o))});break;case"ready":e.onClose=()=>this.setState(co()),e.onError=o=>this.setState(qt(o));break;case"closed":break;case"error":break}this.s=e}verify(e){return this.verifying!==void 0?this.verifying:(this.verifying=e.verify().then(t=>{t||this.setState(Mn(this.authority,this.http2SessionOptions))},t=>{this.setState(qt(t))}).finally(()=>{this.verifying=void 0}),this.verifying)}};function co(){return{t:"closed"}}function xb(e){return{t:"error",reason:e}}function qt(e){return e instanceof C&&C.from(e).code==E.Canceled?co():xb(e)}function Mn(e,t){let n,o;const a=new Promise((c,u)=>{n=c,o=u}),r=Re.connect(e,t);r.on("connect",i),r.on("error",s);function i(){n?.(r),l()}function s(c){o?.(Wn(c)),l()}function l(){r.off("connect",i),r.off("error",s)}return{t:"connecting",conn:a,abort(c){r.destroyed||r.destroy(void 0,Re.constants.NGHTTP2_CANCEL),o?.(c)},onExitState(){l()}}}function Kb(e,t){zb(e),e.unref();let n=Date.now(),o=0,a,r,i=!1,s=!1,l;S();const c={t:"ready",conn:e,streamCount(){return o},requiresVerify(){return Date.now()-n>t.pingIntervalMs},isShuttingDown(){return i},onClose:void 0,onError:void 0,registerRequest(g){o++,o==1&&(e.ref(),u(),G()),g.once("response",()=>{n=Date.now(),u()}),g.once("close",()=>{o--,o==0&&(e.unref(),u(),S())})},responseByteRead(g){g.session===e&&(e.closed||e.destroyed||o<=0||(n=Date.now(),u()))},verify(){return e.ref(),new Promise(g=>{const f=()=>{g(!1)};Z(()=>{o==0&&e.unref(),e.off("error",f),e.off("close",f),g(!0)}),e.once("error",f),e.once("close",f)})},abort(g){e.destroyed||(e.once("error",()=>{}),e.destroy(g,Re.constants.NGHTTP2_CANCEL))},onExitState(){c.isShuttingDown()||(p(),this.onError=void 0,this.onClose=void 0)}};function u(){h(),(o>0||t.pingIdleConnection)&&(a=On(A,t.pingIntervalMs))}function h(){clearTimeout(a),clearTimeout(r)}function A(){Z(u)}function Z(g){clearTimeout(r),r=On(()=>{e.destroy(new C("PING timed out",E.Unavailable),Re.constants.NGHTTP2_CANCEL)},t.pingTimeoutMs),e.ping((f,V)=>{if(clearTimeout(r),f===null){if(V>t.pingTimeoutMs){e.destroy(new C("PING timed out",E.Unavailable),Re.constants.NGHTTP2_CANCEL);return}n=Date.now(),g()}})}function G(){clearTimeout(l)}function S(){l=On(X,t.idleConnectionTimeoutMs)}function X(){e.close(),d()}function J(g,f,V){if(g===Re.constants.NGHTTP2_NO_ERROR&&o===0){e.destroy(new C("received GOAWAY without any open streams",E.Canceled),Re.constants.NGHTTP2_NO_ERROR);return}i=!0;const B=Buffer.from("too_many_pings","ascii");V?.equals(B)&&(t.pingIntervalMs=t.pingIntervalMs*2,s=!0)}function d(){var g;p(),(g=c.onClose)===null||g===void 0||g.call(c)}function m(g){var f,V;if(p(),s){const B=new C(`http/2 connection closed with error code ENHANCE_YOUR_CALM (0x${Re.constants.NGHTTP2_ENHANCE_YOUR_CALM.toString(16)}), too_many_pings, doubled the interval`,E.ResourceExhausted);(f=c.onError)===null||f===void 0||f.call(c,B)}else(V=c.onError)===null||V===void 0||V.call(c,Wn(g))}function p(){h(),G(),e.off("error",m),e.off("close",d),e.off("goaway",J)}return e.on("error",m),e.on("close",d),e.on("goaway",J),c}function On(e,t){if(!(t>2147483647))return setTimeout(e,t).unref()}function zb(e){if(e.connecting)throw new C("expected open session, but it is connecting",E.Internal);if(e.destroyed)throw new C("expected open session, but it is destroyed",E.Internal);if(e.closed)throw new C("expected open session, but it is closed",E.Internal)}function kr(e){var t;return e.httpVersion=="1.1"?Lb(e.nodeOptions):jb((t=e.sessionProvider)!==null&&t!==void 0?t:(n=>new Cs(n)))}function Lb(e){return async function(n){const o=ws(n.signal);return new Promise((a,r)=>{o.onError(i=>{r(i)}),Hb(o,n.url,Object.assign(Object.assign({},e),{headers:Bs(n.header,e?.headers),method:n.method}),i=>{Fs(n,i,o),i.on("response",s=>{var l;s.on("error",o.error),o.onError(u=>s.destroy(u));const c=new Headers;a({status:(l=s.statusCode)!==null&&l!==void 0?l:0,header:In(s.headers),body:Tb(o,s,c),trailer:c})})})})}}function jb(e){return function(n){const o=ws(n.signal),a=e(n.url);return new Promise((r,i)=>{o.onError(s=>{i(s)}),Qb(o,a,n.url,n.method,Bs(n.header),{},s=>{Fs(n,s,o),s.on("response",l=>{var c;r({status:(c=l[":status"])!==null&&c!==void 0?c:0,header:In(l),body:Ob(o,s,a),trailer:Mb(s)})})})})}}function Hb(e,t,n,o){let a;new URL(t).protocol.startsWith("https")?a=qn.request(t,n):a=Pn.request(t,n),e.onError(r=>a.destroy(r)),a.flushHeaders(),a.on("error",e.error),a.on("socket",function(i){function s(){i.off("connect",s),o(a)}i.readyState==="open"?o(a):i.on("connect",s)})}function Tb(e,t,n){const o=t[Symbol.asyncIterator]();return{[Symbol.asyncIterator](){return{async next(){const a=await e.race(o.next());return a.done===!0&&(In(t.trailers).forEach((r,i)=>{n.set(i,r)}),e.close()),a},throw(a){throw e.error(a),a}}}}}function Qb(e,t,n,o,a,r,i){const s=new URL(n);if(s.origin!==t.authority){const l=`cannot make a request to ${s.origin}: the http2 session is connected to ${t.authority}`;e.error(new C(l,E.Internal));return}t.request(o,s.pathname+s.search,a,{}).then(l=>{e.onError(c=>{if(l.closed)return;const u=c.code==E.Canceled?$.CANCEL:$.INTERNAL_ERROR;return new Promise(h=>l.close(u,h))}),l.on("error",function(u){l.writableEnded&&$o(u).map(yn).some(h=>h.code=="ERR_STREAM_WRITE_AFTER_END")||e.error(u)}),l.on("close",function(){const u=Bb(l.rstCode);u&&e.error(u)}),i(l)},l=>{e.error(l)})}function Mb(e){const t=new Headers;return e.on("trailers",n=>{In(n).forEach((o,a)=>{t.set(a,o)})}),t}function Ob(e,t,n){const o=t[Symbol.asyncIterator]();return{[Symbol.asyncIterator](){return{async next(){const a=await e.race(o.next());return a.done===!0&&e.close(),n?.notifyResponseByteRead(t),a},throw(a){throw e.error(a),a}}}}}async function Fs(e,t,n){if(e.body===void 0){await new Promise(a=>t.end(a));return}const o=e.body[Symbol.asyncIterator]();return new Promise(a=>{r();function r(){n.isClosed()||o.next().then(i=>{if(i.done===!0){t.end(a);return}t.write(i.value,"binary",s=>{if(s==null){r();return}o.throw!==void 0&&o.throw(Wn(s)).catch(()=>{}),!(t.writableEnded&&$o(s).map(yn).some(l=>l.code=="ERR_STREAM_WRITE_AFTER_END"))&&n.error(s)})},i=>{n.error(i)})}})}function ws(e){let t,n=!1,o,a=[];const r={error(l){if(!n){n=!0,o=l instanceof C?l:Wn(l),t?.(o);for(const c of a)c(o);i()}},close(){n||(n=!0,t&&t(new C("sentinel completed early",E.Internal)),i())},isClosed(){return n},onError(l){n?o!==void 0&&l(o):a.push(l)},race(l){let c;const u=new Promise((h,A)=>{c=h,t=A});return l.then(h=>{c?.(h)},h=>{t?.(h)}),n&&t?.(o??new C("sentinel completed early",E.Internal)),u}};function i(){e&&e.removeEventListener("abort",s),a=[],t=void 0}function s(){r.error(Lt(this))}return e&&(e.addEventListener("abort",s),e.aborted&&r.error(Lt(e))),r}function Db(e){var t,n,o,a;let r;if(e.httpVersion=="2"){let i;e.sessionManager?i=e.sessionManager:i=new Cs(e.baseUrl,{pingIntervalMs:e.pingIntervalMs,pingIdleConnection:e.pingIdleConnection,pingTimeoutMs:e.pingTimeoutMs,idleConnectionTimeoutMs:e.idleConnectionTimeoutMs},e.nodeOptions),r=kr({httpVersion:"2",sessionProvider:()=>i})}else r=kr({httpVersion:"1.1",nodeOptions:e.nodeOptions});return Object.assign(Object.assign(Object.assign({},e),{httpClient:r,useBinaryFormat:(t=e.useBinaryFormat)!==null&&t!==void 0?t:!0,interceptors:(n=e.interceptors)!==null&&n!==void 0?n:[],sendCompression:(o=e.sendCompression)!==null&&o!==void 0?o:null,acceptCompression:(a=e.acceptCompression)!==null&&a!==void 0?a:[Ub,Jb]}),Mu(e.readMaxBytes,e.writeMaxBytes,e.compressMinBytes))}function _b(e){return Xb(Db(e))}function $b(e){return`cli/${e??"unknown"}`}var Pb=$b("0.1.0-dev.50.1.674e23d"),qb="/grpc";function eg(e){return`${e.replace(/\/+$/,"")}${qb}`}var tg=e=>async t=>{const{token:n,lang:o}=ys();return t.header.set("X-Hagi-Client",Pb),n&&t.header.set("Authorization",`Bearer ${n}`),o&&t.header.set("Accept-Language",o),e(t)},en;function Ye(){const e=eg(ys().baseUrl);return(!en||en.baseUrl!==e)&&(en={baseUrl:e,transport:_b({baseUrl:e,httpVersion:"1.1",useBinaryFormat:!0,interceptors:[tg]})}),en.transport}function Le(e){return e?Ud(e).toISOString():null}function pn(e){return e.length>0?e:null}function Ur(e,t){const n={earliestAt:Le(e),latestAt:Le(t)};return n.earliestAt||n.latestAt?n:null}function tn(e){return{lockId:e.lockId,ownerId:e.ownerId,status:e.status,myTurn:e.status==="Holding",position:e.position,epoch:Number(e.epoch),leaseExpiresAt:Le(e.leaseExpiresAt),maxHoldExpiresAt:Le(e.maxHoldExpiresAt),holder:e.holderOwnerId.length>0?{ownerId:e.holderOwnerId,label:pn(e.holderLabel)}:null,queueLength:e.queueLength,suggestedPollIntervalMs:e.suggestedPollIntervalMs,suggestedHeartbeatIntervalMs:e.suggestedHeartbeatIntervalMs,serverTime:Le(e.serverTime),requisition:e.requisitionedByOwnerId.length>0?{byOwnerId:e.requisitionedByOwnerId,reason:e.requisitionReason,at:Le(e.requisitionedAt)}:null,checkInWindow:Ur(e.checkInEarliestAt,e.checkInLatestAt),turnWindow:Ur(e.turnEarliestAt,e.turnLatestAt)}}function ng(e){return{lockId:e.lockId,holderOwnerId:pn(e.holderOwnerId),holderLabel:pn(e.holderLabel),epoch:Number(e.epoch),leaseExpiresAt:Le(e.leaseExpiresAt),holdStartedAt:Le(e.holdStartedAt),queueLength:e.queueLength}}function og(e){return e.locks.map(ng)}var Ze=()=>ve(rh,Ye()),lt=()=>ve(bh,Ye()),De=()=>ve(Eh,Ye()),Jr=()=>ve(Nh,Ye()),he=()=>ve(Lh,Ye()),ag=()=>ve(Hh,Ye()),xe=()=>ve(ob,Ye()),nn=()=>ve(ub,Ye()),Ct=()=>ve(Eb,Ye()),ct=()=>ve(Gb,Ye());async function w(e,t){return vb(e,await t)}function rg(){return{listSessions:async e=>w(Dh,xe().listSessions({type:e.type,activeOnly:e.activeOnly,includeArchived:e.includeArchived,projectId:e.projectId,projectIds:e.projectIds??[]})),getSession:async e=>w(Mh,xe().getSession({sessionId:e})),getSessionMessages:async(e,t={})=>w(ab,nn().getSessionMessages({sessionId:e,page:t.page,pageSize:t.pageSize,historyScope:t.historyScope,order:t.order})),createProposalSession:async e=>w(Qh,xe().openSession({body:D(eb,e)})),createChatSession:async e=>w(Th,xe().openChatSession({body:D(qh,e)})),createHagiTaskSession:async e=>w(Ph,xe().startHagiTaskSession({body:D(nb,e)})),listHagiTaskSchemas:async()=>w(Gh,Jr().listPresetTaskSchemas({})),getHagiTaskSchema:async e=>w(Sh,Jr().getPresetTaskSchema({presetTaskId:e})),updateSession:async(e,t)=>w(Oh,xe().saveSession({sessionId:e,body:D(tb,t)})),deleteSession:async(e,t)=>w(_h,xe().deleteSession({sessionId:e,deleteFiles:t??!1})),sendMessage:async(e,t)=>w(ib,nn().postSessionMessage({sessionId:e,body:D(cb,t)})),steerSession:async(e,t)=>w(rb,nn().steerSession({sessionId:e,body:D(lb,t)})),optimizeProposal:async(e,t)=>w(mb,Ct().optimizeSessionProposal({sessionId:e,body:D(Ab,t)})),generateProposal:async(e,t)=>w(hb,Ct().generateProposal({sessionId:e,body:D(fb,t)})),executeProposal:async(e,t)=>w(gb,Ct().executeProposal({sessionId:e,body:D(Rb,t??{})})),archiveProposal:async(e,t)=>w(bb,Ct().archiveSession({sessionId:e,body:D(Zb,t??{})})),completeProposal:async e=>w(pb,Ct().completeSession({sessionId:e})),submitAnnotations:async(e,t)=>w(sb,nn().submitSessionAnnotations({sessionId:e,body:D(db,t)})),listProjects:async()=>w(jh,ag().getAggregatedData({forceRefresh:!1})),createProject:async e=>w(Tm,Ze().createProject({body:D(eh,e)})),updateProject:async(e,t)=>w(Qm,Ze().updateProject({id:e,body:D(th,t)})),deleteProject:async e=>{await Ze().deleteProject({id:e})},getMonoSpecsManagement:async e=>w(Mm,Ze().getMonoSpecsManagement({projectId:e})),saveMonoSpecsManagement:async(e,t)=>w(Pm,Ze().updateMonoSpecsManagement({projectId:e,body:D(oh,t)})),initializeMonoSpecsManagement:async e=>w($m,Ze().initializeMonoSpecs({projectId:e})),reloadMonoSpecsManagement:async e=>w(Om,Ze().reloadMonoSpecs({projectId:e})),validateMonoSpecs:async e=>w(qm,Ze().validateMonoSpecsConfig({body:D(ah,e)})),cloneMonoSpecsRepositories:async(e,t)=>w(Dm,Ze().cloneMonoSpecsRepositories({projectId:e,body:D(nh,t)})),removeMonoSpecsRepositoryCheckout:async(e,t,n)=>w(_m,Ze().removeMonoSpecsRepositoryCheckout({projectId:e,path:t,force:n})),listPlans:async()=>w(gh,De().listScheduledPlans({})),getPlan:async e=>w(ph,De().getScheduledPlan({id:e})),createPlan:async e=>w(Ah,De().createScheduledPlan({body:D(Xr,e)})),updatePlan:async(e,t)=>w(fh,De().updateScheduledPlan({id:e,body:D(Xr,t)})),deletePlan:async e=>{await De().deleteScheduledPlan({id:e})},runPlan:async e=>w(Zh,De().runScheduledPlan({id:e})),startPlan:async e=>w(Rh,De().startScheduledPlan({id:e})),listVaults:async()=>w(ih,lt().listVaults({})),createVault:async e=>w(sh,lt().createVault({body:D(mh,e)})),updateVault:async(e,t)=>w(lh,lt().updateVault({id:e,body:D(hh,t)})),deleteVault:async(e,t)=>w(ch,lt().deleteVault({id:e,deleteLocalFiles:t??!1})),listVaultFiles:async(e,t)=>w(dh,lt().getVaultFiles({id:e,path:t})),previewVaultFile:async(e,t)=>w(uh,lt().getVaultFilePreview({id:e,path:t})),archiveChat:async e=>w($h,xe().archiveChatSession({sessionId:e})),listLocalSkills:async()=>w(vh,he().getLocalSkills({})),uninstallLocalSkill:async e=>w(Wh,he().uninstallLocalSkill({body:D(Uh,e)})),setBuiltInSkillAvailability:async e=>w(yh,he().setBuiltInSkillAvailability({body:D(Jh,e)})),searchSkillGallery:async e=>w(Ih,he().getSkillGallery({query:e})),getSkillGalleryDetail:async(e,t)=>w(Yh,he().getSkillGalleryDetail({id:e,source:t})),getSkillGalleryAudit:async(e,t)=>w(Xh,he().getSkillGalleryAudit({id:e,source:t})),installGallerySkill:async e=>w(kh,he().installSkill({body:D(zh,e)})),listTrustedSkillProviders:async()=>w(Bh,he().getTrustedSkillProviders({})),upsertTrustedSkillProvider:async e=>w(Ch,he().upsertTrustedSkillProvider({body:D(xh,e)})),deleteTrustedSkillProvider:async e=>w(Fh,he().deleteTrustedSkillProvider({body:D(Kh,e)})),resetTrustedSkillProviders:async()=>w(wh,he().resetTrustedSkillProviders({})),acquireLock:async e=>tn((await ct().acquireLock({lockId:e.lockId,ownerId:e.ownerId,leaseSeconds:e.leaseSeconds,label:e.label,sessionId:e.sessionId})).result),getLockStatus:async(e,t)=>tn((await ct().getLockStatus({lockId:e.lockId,ownerId:e.ownerId,waitSeconds:e.waitSeconds},{signal:t})).result),renewLock:async(e,t)=>tn((await ct().renewLock({lockId:e.lockId,ownerId:e.ownerId,leaseSeconds:e.leaseSeconds,epoch:e.epoch===void 0?void 0:BigInt(e.epoch)},{signal:t})).result),releaseLock:async e=>{const t=await ct().releaseLock({lockId:e.lockId,ownerId:e.ownerId,epoch:e.epoch===void 0?void 0:BigInt(e.epoch)});return{lockId:e.lockId,ownerId:e.ownerId,released:t.released,previousStatus:t.previousStatus,holderOwnerId:pn(t.holderOwnerId)}},requisitionLock:async e=>tn((await ct().requisitionLock({lockId:e.lockId,ownerId:e.ownerId,reason:e.reason,label:e.label,sessionId:e.sessionId})).result),listLocks:async e=>og(await ct().listLocks({prefix:e}))}}function ks(e){return process.on("SIGINT",e),process.on("SIGTERM",e),()=>{process.off("SIGINT",e),process.off("SIGTERM",e)}}function Po(e){return new Promise(t=>{setTimeout(t,e)})}function k(e){const t=e?.trim();return t||void 0}function x(e,t){const n=k(e);if(!n)throw new N(`${t} is required.`);return n}function uo(e){const t=e?.map(n=>k(n)).filter(Boolean);return t&&t.length>0?t:void 0}function Us(e=process.env,t={stdout:n=>{process.stdout.write(n)},stderr:n=>{process.stderr.write(n)}}){return{api:rg(),env:e,io:t,sleep:Po}}function ig(e){return e.option("--base-url <url>",'Backend API base URL. Overrides HAGI_API_BASE_URL and the "baseUrl" config file entry.').option("--token <token>","Bearer token for backend API calls. Overrides HAGI_API_TOKEN.").option("--lang <lang>","Accept-Language value for backend API calls. Overrides HAGI_API_LANG.")}function y(e){return e.option("--json","Emit deterministic JSON instead of human-readable text.")}function I(e,t){const n=e.optsWithGlobals();return{api:t.api,env:t.env,io:t.io,outputJson:n.json===!0,runtime:jm({baseUrl:n.baseUrl,token:n.token,lang:n.lang},t.env)}}var sg=5e3,lg=1e3,cg=1e4;function Js(e){return Math.min(lg*2**Math.max(0,e-1),cg)}async function mo(e,t,n){if(!n){await e.sleep(t);return}if(n.aborted)return;let o=()=>{};const a=new Promise(r=>{o=r,n.addEventListener("abort",o,{once:!0})});try{await Promise.race([e.sleep(t),a])}finally{n.removeEventListener("abort",o)}}function dg(e,t){return e.position!==t.position||e.holder?.ownerId!==t.holder?.ownerId}async function ug(e){const{read:t,clock:n,signal:o}=e,a=n.now(),r=e.timeoutSeconds*1e3;let i=e.initial,s=0,l=0;const c=u=>({outcome:u,status:i,polls:s,elapsedSeconds:Math.round((n.now()-a)/100)/10});for(;;){if(o?.aborted)return c("cancelled");const u=r-(n.now()-a);if(u<=0)return c("timeout");const h=Math.min(20,Math.max(1,Math.ceil(u/1e3))),A=n.now();let Z;try{Z=await t(h,o)}catch(X){if(o?.aborted)return c("cancelled");if(!Ss(X))throw X;l+=1,await mo(n,Math.min(Js(l),u),o);continue}l=0,s+=1;const G=i;if(i=Z,Z.status==="Holding")return c("holding");if(Z.status!=="Queued")return c("lost");const S=dg(G,Z);if(S&&e.onChange?.(Z),!S&&n.now()-A<1e3){const X=Z.suggestedPollIntervalMs>0?Z.suggestedPollIntervalMs:sg;await mo(n,Math.min(X,Math.max(0,r-(n.now()-a))),o)}}}var mg="HAGI_LOCK_OWNER",hg="HAGI_SESSION_ID";function bt(e){const t=e?.trim();return t||void 0}function bg(e,t){const n=bt(e)??bt(t.HAGI_LOCK_OWNER)??bt(t.HAGI_SESSION_ID);if(!n)throw new N(`No lock owner. Pass your own session ID as --owner <session-id>, or set ${mg} (or ${hg}). The CLI does not invent an owner ID.`);return n}function gg(e){const t=bt(e.lockId),n=bt(e.server),o=bt(e.game);if(t&&(n||o))throw new N("Use either --lock-id or the pair --server and --game, not both.");if(t)return t;if(n&&o)return`${n}/${o}`;throw n||o?new N("--server and --game must be given together."):new N("A lock is required: pass --lock-id <id>, or --server <name> and --game <name>.")}function St(e){return e.option("--lock-id <id>","Lock to use, for example eu-1/duckov. Alternative to --server and --game.").option("--server <name>","Server name; with --game, the lock is <server>/<game>.").option("--game <name>","Game name; with --server, the lock is <server>/<game>.").option("--owner <id>","Owner ID: your own session ID. Defaults to HAGI_LOCK_OWNER, then HAGI_SESSION_ID.")}function Nt(e,t){return{lockId:gg(e),ownerId:bg(e.owner,t)}}function Vt(e,t,n){if(e===void 0)return;const o=e.trim();if(!/^\d+$/.test(o))throw new N(`${t} must be a whole number of seconds.`);const a=Number(o);if(a<n)throw new N(`${t} must be ${n} second${n===1?"":"s"} or more.`);return a}function qo(e){if(e!==void 0){if(!/^\d+$/.test(e.trim()))throw new N("--epoch must be a whole number, the epoch an acquire printed.");return Number(e.trim())}}async function vt(e){try{return await e()}catch(t){throw Gs(t)??t}}function xs(e){return{now:e.now??Date.now,sleep:e.sleep??Po}}function pg(e,t){St(y(e.command("acquire").description("Take the lock or join its queue. Without --wait: one call, exit 0 for Holding and Queued. With --wait: wait for the turn, exit 0 only when Holding. There is no force option."))).option("--wait","Keep waiting in the queue (long-poll) until you hold the lock. Run it as a continuous watcher.").option("--timeout <seconds>","With --wait: give up after this many seconds (default 900), release the queue entry, exit code 31.").option("--lease-seconds <n>","Requested lease length in seconds (the backend clamps it to 30 to 600).").option("--label <text>","Short label shown to others as the holder (at most 200 characters).").action(async function(o){if(!o.wait&&o.timeout!==void 0)throw new N("--timeout needs --wait.");const a=o.wait?Vt(o.timeout,"--timeout",1)??900:void 0,r=Vt(o.leaseSeconds,"--lease-seconds",1),i=I(this,t),s=Nt(o,i.env),l=await vt(()=>i.api.acquireLock({...s,leaseSeconds:r,label:k(o.label)})),c=S=>i.io.stdout(i.outputJson?W(S):pt(S,"acquire"));if(a===void 0||l.status==="Holding"){c(l);return}if(l.status!=="Queued")throw c(l),new et(`Owner ${s.ownerId} neither holds nor queues for lock ${s.lockId} (${l.status}).`,{reported:!0});i.outputJson||c(l);const u=new AbortController,h=(t.onInterrupt??ks)(()=>u.abort());let A;try{A=await ug({initial:l,read:(S,X)=>i.api.getLockStatus({...s,waitSeconds:S},X),timeoutSeconds:a,clock:xs(t),signal:u.signal,onChange:S=>{i.outputJson||i.io.stdout(ec(S))}})}finally{h()}let Z;(A.outcome==="timeout"||A.outcome==="cancelled")&&(Z=await i.api.releaseLock(s).then(()=>!0,()=>!1));const G={outcome:A.outcome,polls:A.polls,elapsedSeconds:A.elapsedSeconds,released:Z};switch(i.outputJson?i.io.stdout(W({...A.status,wait:G})):i.io.stdout(A.outcome==="holding"?pt(A.status,"status"):tc(A,Z)),A.outcome){case"timeout":throw new Qo(`Timed out after ${A.elapsedSeconds}s waiting for lock ${s.lockId}; last status ${A.status.status}.`);case"cancelled":throw new U(`Interrupted while waiting for lock ${s.lockId}; the lock was not acquired.`);case"lost":throw new et(`The queue entry for lock ${s.lockId} was dropped (${A.status.status}).`,{reported:!0});default:}})}var Ag=6e4,xr=[30*6e4,5*6e4],wt="Stop using the resource now.";function Kr(e,t){switch(t.status){case"Requisitioned":{const n=t.requisition;return`Lock ${e} LOST: requisitioned by ${n?.byOwnerId??"another owner"}${n?.at?` at ${n.at}`:""}, reason: ${n?.reason??"not given"}. ${wt}`}case"Expired":return`Lock ${e} LOST: the lease expired or the hard cap passed. ${wt}`;case"Queued":return`Lock ${e} LOST: this owner is queued at position ${t.position}, not holding. ${wt}`;default:return`Lock ${e} LOST: the backend has no hold for this owner (${t.status}). ${wt}`}}function zr(e,t,n){if(!t)return null;const o=Date.parse(t),a=n?Date.parse(n):NaN;return Number.isNaN(a)?o:e.now()+(o-a)}async function fg(e){const{lockId:t,ownerId:n,api:o,clock:a,signal:r}=e;let i=e.epoch,s=e.intervalSeconds===void 0?void 0:e.intervalSeconds*1e3,l=!1,c=0,u=a.now(),h=null,A=null;const Z=new Set;let G=0,S=null,X=!1,J=!1;const d=(p,g,f)=>e.emit({kind:p,message:g,errorCode:f}),m=()=>{if(A===null)return;const p=xr.filter(f=>!Z.has(f)&&a.now()>=A-f);if(p.length===0)return;p.forEach(f=>Z.add(f));const g=Math.min(...p)/6e4;d("cap-warning",`Lock ${t}: the hard cap (${new Date(A).toISOString()}) is about ${g} minutes away. The lock is taken back at the cap even while heartbeating: finish and release before then.`)};for(;;){if(r.aborted)return{outcome:"stopped",beats:c};let p=u;if(A!==null)for(const f of xr)Z.has(f)||(p=Math.min(p,A-f));if(p>a.now()&&(await mo(a,p-a.now(),r),r.aborted))return{outcome:"stopped",beats:c};if(m(),a.now()<u)continue;let g;try{if(i===void 0){const f=await o.getLockStatus({lockId:t,ownerId:n},r);if(f.status!=="Holding"){const V=`Refusing to start: owner ${n} does not hold lock ${t}. ${Kr(t,f)}`;return d("refused",V),{outcome:"refused",message:V,beats:c}}i=f.epoch}g=await o.renewLock({lockId:t,ownerId:n,epoch:i,leaseSeconds:e.leaseSeconds},r)}catch(f){if(r.aborted)return{outcome:"stopped",beats:c};const V=Gs(f);if(V){const K=`Lock ${t} LOST: ${V.message}${/stop using/i.test(V.message)?"":` ${wt}`}`;return d("lost",K,V.errorCode),{outcome:"lost",message:K,beats:c}}if(!Ss(f))throw f;G+=1;const B=a.now();S??=B,!X&&B-S>=Ag&&(X=!0,d("outage",`Backend unreachable for ${Math.round((B-S)/1e3)}s; still retrying. The lock is only lost when the backend says so, but it is released after the lease runs out.`)),!J&&h!==null&&B>=h&&(J=!0,d("maybe-lost",`Lock ${t} may already be lost: the last known lease deadline passed during the outage.`)),u=a.now()+Js(G);continue}if(g.status!=="Holding"){const f=Kr(t,g);return d("lost",f),{outcome:"lost",message:f,beats:c}}c+=1,S!==null&&(X&&d("recovered",`Backend reachable again after ${Math.round((a.now()-S)/1e3)}s; heartbeat resumed.`),S=null,X=!1,J=!1),G=0,h=zr(a,g.leaseExpiresAt,g.serverTime),A=zr(a,g.maxHoldExpiresAt,g.serverTime)??A,s??=g.suggestedHeartbeatIntervalMs>0?g.suggestedHeartbeatIntervalMs:120*1e3,l?e.verbose&&d("beat",`Heartbeat ok: valid until ${g.leaseExpiresAt??"unknown"}, hard cap ${g.maxHoldExpiresAt??"unknown"}.`):(l=!0,d("started",`Heartbeat started for lock ${t} as ${n} (epoch ${g.epoch}): renewing every ${s/1e3}s, valid until ${g.leaseExpiresAt??"unknown"}, hard cap ${g.maxHoldExpiresAt??"unknown"}. Quiet unless something needs you.`)),u=a.now()+s}}function Zg(e,t){St(y(e.command("heartbeat").description("Keep a held lock alive: renew now and then every interval. Long-running and quiet on success; run it under a watcher. Exit code 32 when the lock is lost. Stopping it (SIGINT or SIGTERM) exits 0 and does not release."))).option("--epoch <n>","Epoch of your grant. Without it, the epoch of the first status read is used, and only while you hold the lock.").option("--interval <seconds>","Seconds between renewals (default: the interval the backend suggests, 120).").option("--lease-seconds <n>","Requested lease length in seconds on every renewal (the backend clamps it to 30 to 600).").option("--verbose","Also print one line per successful renewal.").action(async function(o){const a=qo(o.epoch),r=Vt(o.interval,"--interval",1),i=Vt(o.leaseSeconds,"--lease-seconds",1),s=I(this,t),l=Nt(o,s.env),c=new AbortController,u=(t.onInterrupt??ks)(()=>c.abort());try{const h=await fg({...l,epoch:a,intervalSeconds:r,leaseSeconds:i,verbose:o.verbose===!0,api:s.api,clock:xs(t),signal:c.signal,emit:A=>{s.io.stdout(s.outputJson?`${JSON.stringify({event:A.kind,...l,message:A.message,errorCode:A.errorCode})}
|
|
58
|
+
`}var Jm="--base-url",xm="HAGI_API_BASE_URL";function Ee(e){const t=e?.trim();return t||void 0}function Do(e=process.env){return(0,R.join)(Ee(e.XDG_CONFIG_HOME)??(0,R.join)((0,Tl.homedir)(),".config"),"hagi","config.json")}function Ws(e){const t=Do(e);let n;try{n=(0,Y.readFileSync)(t,"utf8")}catch(a){if(a.code==="ENOENT")return;throw new N(`Cannot read CLI config file ${t}: ${a instanceof Error?a.message:String(a)}`)}let o;try{o=JSON.parse(n)}catch{throw new N(`CLI config file ${t} is not valid JSON.`)}return o&&typeof o=="object"&&!Array.isArray(o)?o:{}}function Km(e=process.env){const t=Ws(e)?.baseUrl;return typeof t=="string"?Ee(t):void 0}function zm(e=process.env){const t=Ws(e)?.steer;if(t===void 0||typeof t=="boolean")return t;throw new N(`CLI config file ${Do(e)} has a "steer" value that is not true or false.`)}function Lm(e={},t=process.env){const n=Ee(e.baseUrl)??Ee(t.HAGI_API_BASE_URL)??Km(t);if(!n)throw new N(`No backend base URL is configured. Set ${Jm} <url>, the ${xm} environment variable, or "baseUrl" in ${Do(t)}.`);return{baseUrl:n,token:Ee(e.token)??Ee(t.HAGI_API_TOKEN),lang:Ee(e.lang)??Ee(t.HAGI_API_LANG)}}var jt;function jm(e={},t=process.env){return jt=Lm(e,t),jt}function ys(){if(!jt)throw new N("The backend connection is not configured. Resolve the API runtime before calling the backend.");return jt}function Hm(){return Ee(jt?.baseUrl)}var se=oe("CiFoYWdpY29kZS9wcm9qZWN0L3YxL3Byb2plY3QucHJvdG8SE2hhZ2ljb2RlLnByb2plY3QudjEiSwoUQ3JlYXRlUHJvamVjdFJlcXVlc3QSMwoEYm9keRgBIAEoCzIlLmhhZ2ljb2RlLnByb2plY3QudjEuQ3JlYXRlUHJvamVjdER0byJIChVDcmVhdGVQcm9qZWN0UmVzcG9uc2USLwoGcmVzdWx0GAEgASgLMh8uaGFnaWNvZGUucHJvamVjdC52MS5Qcm9qZWN0RHRvIhoKGENyZWF0ZURlbW9Qcm9qZWN0UmVxdWVzdCJMChlDcmVhdGVEZW1vUHJvamVjdFJlc3BvbnNlEi8KBnJlc3VsdBgBIAEoCzIfLmhhZ2ljb2RlLnByb2plY3QudjEuUHJvamVjdER0byJXChRVcGRhdGVQcm9qZWN0UmVxdWVzdBIKCgJpZBgBIAEoCRIzCgRib2R5GAIgASgLMiUuaGFnaWNvZGUucHJvamVjdC52MS5VcGRhdGVQcm9qZWN0RHRvIkgKFVVwZGF0ZVByb2plY3RSZXNwb25zZRIvCgZyZXN1bHQYASABKAsyHy5oYWdpY29kZS5wcm9qZWN0LnYxLlByb2plY3REdG8iIgoURGVsZXRlUHJvamVjdFJlcXVlc3QSCgoCaWQYASABKAkiFwoVRGVsZXRlUHJvamVjdFJlc3BvbnNlIkUKHkdldFByb2plY3RTdGFuZGFyZFdvcmRzUmVxdWVzdBISCgpwcm9qZWN0X2lkGAEgASgJEg8KB3JlZnJlc2gYAiABKAgiZwofR2V0UHJvamVjdFN0YW5kYXJkV29yZHNSZXNwb25zZRJECgZyZXN1bHQYASABKAsyNC5oYWdpY29kZS5wcm9qZWN0LnYxLlByb2plY3RTdGFuZGFyZFdvcmRzUmVzcG9uc2VEdG8iPgooR2V0UHJvamVjdFN0YW5kYXJkV29yZHNNYW5hZ2VtZW50UmVxdWVzdBISCgpwcm9qZWN0X2lkGAEgASgJInsKKUdldFByb2plY3RTdGFuZGFyZFdvcmRzTWFuYWdlbWVudFJlc3BvbnNlEk4KBnJlc3VsdBgBIAEoCzI+LmhhZ2ljb2RlLnByb2plY3QudjEuUHJvamVjdFN0YW5kYXJkV29yZHNNYW5hZ2VtZW50RG9jdW1lbnREdG8ikAEKKVNhdmVQcm9qZWN0U3RhbmRhcmRXb3Jkc01hbmFnZW1lbnRSZXF1ZXN0EhIKCnByb2plY3RfaWQYASABKAkSTwoEYm9keRgCIAEoCzJBLmhhZ2ljb2RlLnByb2plY3QudjEuU2F2ZVByb2plY3RTdGFuZGFyZFdvcmRzTWFuYWdlbWVudFJlcXVlc3REdG8ifAoqU2F2ZVByb2plY3RTdGFuZGFyZFdvcmRzTWFuYWdlbWVudFJlc3BvbnNlEk4KBnJlc3VsdBgBIAEoCzI+LmhhZ2ljb2RlLnByb2plY3QudjEuUHJvamVjdFN0YW5kYXJkV29yZHNNYW5hZ2VtZW50RG9jdW1lbnREdG8iMwodR2V0TW9ub1NwZWNzTWFuYWdlbWVudFJlcXVlc3QSEgoKcHJvamVjdF9pZBgBIAEoCSJdCh5HZXRNb25vU3BlY3NNYW5hZ2VtZW50UmVzcG9uc2USOwoGcmVzdWx0GAEgASgLMisuaGFnaWNvZGUucHJvamVjdC52MS5Nb25vU3BlY3NNYW5hZ2VtZW50RHRvIiwKFlJlbG9hZE1vbm9TcGVjc1JlcXVlc3QSEgoKcHJvamVjdF9pZBgBIAEoCSJWChdSZWxvYWRNb25vU3BlY3NSZXNwb25zZRI7CgZyZXN1bHQYASABKAsyKy5oYWdpY29kZS5wcm9qZWN0LnYxLk1vbm9TcGVjc01hbmFnZW1lbnREdG8igAEKIUNsb25lTW9ub1NwZWNzUmVwb3NpdG9yaWVzUmVxdWVzdBISCgpwcm9qZWN0X2lkGAEgASgJEkcKBGJvZHkYAiABKAsyOS5oYWdpY29kZS5wcm9qZWN0LnYxLk1vbm9TcGVjc0Nsb25lUmVwb3NpdG9yaWVzUmVxdWVzdER0byJwCiJDbG9uZU1vbm9TcGVjc1JlcG9zaXRvcmllc1Jlc3BvbnNlEkoKBnJlc3VsdBgBIAEoCzI6LmhhZ2ljb2RlLnByb2plY3QudjEuTW9ub1NwZWNzQ2xvbmVSZXBvc2l0b3JpZXNSZXNwb25zZUR0byJpCihSZW1vdmVNb25vU3BlY3NSZXBvc2l0b3J5Q2hlY2tvdXRSZXF1ZXN0EhIKCnByb2plY3RfaWQYASABKAkSEQoEcGF0aBgCIAEoCUgAiAEBEg0KBWZvcmNlGAMgASgIQgcKBV9wYXRoInQKKVJlbW92ZU1vbm9TcGVjc1JlcG9zaXRvcnlDaGVja291dFJlc3BvbnNlEkcKBnJlc3VsdBgBIAEoCzI3LmhhZ2ljb2RlLnByb2plY3QudjEuTW9ub1NwZWNzUmVtb3ZlQ2hlY2tvdXRSZXNwb25zZUR0byIwChpJbml0aWFsaXplTW9ub1NwZWNzUmVxdWVzdBISCgpwcm9qZWN0X2lkGAEgASgJIloKG0luaXRpYWxpemVNb25vU3BlY3NSZXNwb25zZRI7CgZyZXN1bHQYASABKAsyKy5oYWdpY29kZS5wcm9qZWN0LnYxLk1vbm9TcGVjc01hbmFnZW1lbnREdG8ifgogVXBkYXRlTW9ub1NwZWNzTWFuYWdlbWVudFJlcXVlc3QSEgoKcHJvamVjdF9pZBgBIAEoCRJGCgRib2R5GAIgASgLMjguaGFnaWNvZGUucHJvamVjdC52MS5VcGRhdGVNb25vU3BlY3NNYW5hZ2VtZW50UmVxdWVzdER0byJgCiFVcGRhdGVNb25vU3BlY3NNYW5hZ2VtZW50UmVzcG9uc2USOwoGcmVzdWx0GAEgASgLMisuaGFnaWNvZGUucHJvamVjdC52MS5Nb25vU3BlY3NNYW5hZ2VtZW50RHRvImcKH0dldFByb2plY3REZXNpZ25Eb2N1bWVudFJlcXVlc3QSEgoKcHJvamVjdF9pZBgBIAEoCRIcCg9yZXBvc2l0b3J5X3BhdGgYAiABKAlIAIgBAUISChBfcmVwb3NpdG9yeV9wYXRoImEKIEdldFByb2plY3REZXNpZ25Eb2N1bWVudFJlc3BvbnNlEj0KBnJlc3VsdBgBIAEoCzItLmhhZ2ljb2RlLnByb2plY3QudjEuUHJvamVjdERlc2lnbkRvY3VtZW50RHRvIoABCiBTYXZlUHJvamVjdERlc2lnbkRvY3VtZW50UmVxdWVzdBISCgpwcm9qZWN0X2lkGAEgASgJEkgKBGJvZHkYAiABKAsyOi5oYWdpY29kZS5wcm9qZWN0LnYxLlVwZGF0ZVByb2plY3REZXNpZ25Eb2N1bWVudFJlcXVlc3REdG8ibAohU2F2ZVByb2plY3REZXNpZ25Eb2N1bWVudFJlc3BvbnNlEkcKBnJlc3VsdBgBIAEoCzI3LmhhZ2ljb2RlLnByb2plY3QudjEuU2F2ZVByb2plY3REZXNpZ25Eb2N1bWVudFJlc3VsdER0byI2CiBHZXRQcm9qZWN0RGVzaWduU2l0ZUluZGV4UmVxdWVzdBISCgpwcm9qZWN0X2lkGAEgASgJImMKIUdldFByb2plY3REZXNpZ25TaXRlSW5kZXhSZXNwb25zZRI+CgZyZXN1bHQYASABKAsyLi5oYWdpY29kZS5wcm9qZWN0LnYxLlByb2plY3REZXNpZ25TaXRlSW5kZXhEdG8iRwojR2V0UHJvamVjdERlc2lnblNpdGVEb2N1bWVudFJlcXVlc3QSEgoKcHJvamVjdF9pZBgBIAEoCRIMCgRzbHVnGAIgASgJImkKJEdldFByb2plY3REZXNpZ25TaXRlRG9jdW1lbnRSZXNwb25zZRJBCgZyZXN1bHQYASABKAsyMS5oYWdpY29kZS5wcm9qZWN0LnYxLlByb2plY3REZXNpZ25TaXRlRG9jdW1lbnREdG8ieQocVmFsaWRhdGVQcm9qZWN0QnJhbmNoUmVxdWVzdBISCgpwcm9qZWN0X2lkGAEgASgJEhMKC2JyYW5jaF9uYW1lGAIgASgJEhwKD3JlcG9zaXRvcnlfcGF0aBgDIAEoCUgAiAEBQhIKEF9yZXBvc2l0b3J5X3BhdGgiYQodVmFsaWRhdGVQcm9qZWN0QnJhbmNoUmVzcG9uc2USQAoGcmVzdWx0GAEgASgLMjAuaGFnaWNvZGUucHJvamVjdC52MS5CcmFuY2hWYWxpZGF0aW9uUmVzcG9uc2VEdG8iKgoaVmFsaWRhdGVQcm9qZWN0UGF0aFJlcXVlc3QSDAoEcGF0aBgBIAEoCSJdChtWYWxpZGF0ZVByb2plY3RQYXRoUmVzcG9uc2USPgoGcmVzdWx0GAEgASgLMi4uaGFnaWNvZGUucHJvamVjdC52MS5QYXRoVmFsaWRhdGlvblJlc3BvbnNlRHRvIlcKGlNjYW5HaXRSZXBvc2l0b3JpZXNSZXF1ZXN0EjkKBGJvZHkYASABKAsyKy5oYWdpY29kZS5wcm9qZWN0LnYxLlNjYW5HaXRSZXBvc1JlcXVlc3REdG8iWwobU2NhbkdpdFJlcG9zaXRvcmllc1Jlc3BvbnNlEjwKBnJlc3VsdBgBIAEoCzIsLmhhZ2ljb2RlLnByb2plY3QudjEuU2NhbkdpdFJlcG9zUmVzcG9uc2VEdG8iYAoeVmFsaWRhdGVNb25vU3BlY3NDb25maWdSZXF1ZXN0Ej4KBGJvZHkYASABKAsyMC5oYWdpY29kZS5wcm9qZWN0LnYxLlZhbGlkYXRlTW9ub1NwZWNzUmVxdWVzdER0byJkCh9WYWxpZGF0ZU1vbm9TcGVjc0NvbmZpZ1Jlc3BvbnNlEkEKBnJlc3VsdBgBIAEoCzIxLmhhZ2ljb2RlLnByb2plY3QudjEuVmFsaWRhdGVNb25vU3BlY3NSZXNwb25zZUR0byItChdHZXRQcm9qZWN0VmF1bHRzUmVxdWVzdBISCgpwcm9qZWN0X2lkGAEgASgJIlUKGEdldFByb2plY3RWYXVsdHNSZXNwb25zZRI5CgZyZXN1bHQYASABKAsyKS5oYWdpY29kZS5wcm9qZWN0LnYxLlZhdWx0TGlzdFJlc3BvbnNlRHRvIqABCh5PcGVuUHJvamVjdEluQ29kZVNlcnZlclJlcXVlc3QSEgoKcHJvamVjdF9pZBgBIAEoCRInChpjdXJyZW50X2ludGVyZmFjZV9sYW5ndWFnZRgCIAEoCUgAiAEBEhUKCHN1Yl9wYXRoGAMgASgJSAGIAQFCHQobX2N1cnJlbnRfaW50ZXJmYWNlX2xhbmd1YWdlQgsKCV9zdWJfcGF0aCJlCh9PcGVuUHJvamVjdEluQ29kZVNlcnZlclJlc3BvbnNlEkIKBnJlc3VsdBgBIAEoCzIyLmhhZ2ljb2RlLnByb2plY3QudjEuVnNDb2RlU2VydmVyTGF1bmNoUmVzcG9uc2VEdG8iNQofR2V0UHJvamVjdEdpdFdhdGNoU3RhdHVzUmVxdWVzdBISCgpwcm9qZWN0X2lkGAEgASgJIl4KIEdldFByb2plY3RHaXRXYXRjaFN0YXR1c1Jlc3BvbnNlEjoKBnJlc3VsdBgBIAEoCzIqLmhhZ2ljb2RlLnByb2plY3QudjEuUHJvamVjdEdpdFdhdGNoU3RhdHVzIkAKDlN1YlJlcG9JbmZvRHRvEgwKBG5hbWUYASABKAkSDAoEcGF0aBgCIAEoCRISCgpoYXNfYWdlbnRzGAMgASgIIvEDCgpQcm9qZWN0RHRvEgoKAmlkGAEgASgJEgwKBG5hbWUYAiABKAkSDAoEcGF0aBgDIAEoCRIYCgtkZXNjcmlwdGlvbhgEIAEoCUgAiAEBEjEKDWNyZWF0aW9uX3RpbWUYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEjoKFmxhc3RfbW9kaWZpY2F0aW9uX3RpbWUYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEhUKDWlzX21vbm9fc3BlY3MYByABKAgSHwoSbW9ub19zcGVjc192ZXJzaW9uGAggASgJSAGIAQESJgoZbW9ub19zcGVjc19yZXBvX2RpcmVjdG9yeRgJIAEoCUgCiAEBEisKHm1vbm9fc3BlY3NfY29tbWl0X3doZW5fYXJjaGl2ZRgKIAEoCEgDiAEBEj0KEHN1Yl9yZXBvc2l0b3JpZXMYCyADKAsyIy5oYWdpY29kZS5wcm9qZWN0LnYxLlN1YlJlcG9JbmZvRHRvQg4KDF9kZXNjcmlwdGlvbkIVChNfbW9ub19zcGVjc192ZXJzaW9uQhwKGl9tb25vX3NwZWNzX3JlcG9fZGlyZWN0b3J5QiEKH19tb25vX3NwZWNzX2NvbW1pdF93aGVuX2FyY2hpdmUiWAoQQ3JlYXRlUHJvamVjdER0bxIMCgRuYW1lGAEgASgJEgwKBHBhdGgYAiABKAkSGAoLZGVzY3JpcHRpb24YAyABKAlIAIgBAUIOCgxfZGVzY3JpcHRpb24iWAoQVXBkYXRlUHJvamVjdER0bxIMCgRuYW1lGAEgASgJEgwKBHBhdGgYAiABKAkSGAoLZGVzY3JpcHRpb24YAyABKAlIAIgBAUIOCgxfZGVzY3JpcHRpb24i5gIKG1Byb2plY3RTdGFuZGFyZFdvcmRHcm91cER0bxIKCgJpZBgBIAEoCRINCgVsYWJlbBgCIAEoCRIWCglwYXJlbnRfaWQYAyABKAlIAIgBARIPCgdlbmFibGVkGAQgASgIEg0KBW9yZGVyGAUgASgFEhMKC3NvdXJjZV90eXBlGAYgASgJEhwKFHNvdXJjZV9yZWxhdGl2ZV9wYXRoGAcgASgJEgwKBHRhZ3MYCCADKAkSFQoIbGFuZ3VhZ2UYCSABKAlIAYgBARJQCghtZXRhZGF0YRgKIAMoCzI+LmhhZ2ljb2RlLnByb2plY3QudjEuUHJvamVjdFN0YW5kYXJkV29yZEdyb3VwRHRvLk1ldGFkYXRhRW50cnkaLwoNTWV0YWRhdGFFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBQgwKCl9wYXJlbnRfaWRCCwoJX2xhbmd1YWdlIu0CChxQcm9qZWN0U3RhbmRhcmRXb3JkUGhyYXNlRHRvEhAKCGdyb3VwX2lkGAEgASgJEgsKA2tleRgCIAEoCRINCgVsYWJlbBgDIAEoCRIWCg5zdWJtaXR0ZWRfdGV4dBgEIAEoCRIPCgdlbmFibGVkGAUgASgIEg0KBW9yZGVyGAYgASgFEhMKC3NvdXJjZV90eXBlGAcgASgJEhwKFHNvdXJjZV9yZWxhdGl2ZV9wYXRoGAggASgJEgwKBHRhZ3MYCSADKAkSFQoIbGFuZ3VhZ2UYCiABKAlIAIgBARJRCghtZXRhZGF0YRgLIAMoCzI/LmhhZ2ljb2RlLnByb2plY3QudjEuUHJvamVjdFN0YW5kYXJkV29yZFBocmFzZUR0by5NZXRhZGF0YUVudHJ5Gi8KDU1ldGFkYXRhRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4AUILCglfbGFuZ3VhZ2UinAEKHFByb2plY3RTdGFuZGFyZFdvcmRTb3VyY2VEdG8SDAoEdHlwZRgBIAEoCRIVCg1yZWxhdGl2ZV9wYXRoGAIgASgJEhEKCWZ1bGxfcGF0aBgDIAEoCRIOCgZleGlzdHMYBCABKAgSNAoQbGFzdF9tb2RpZmllZF9hdBgFIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAiygEKIVByb2plY3RTdGFuZGFyZFdvcmRzRGlhZ25vc3RpY0R0bxIQCghzZXZlcml0eRgBIAEoCRIMCgRjb2RlGAIgASgJEg8KB21lc3NhZ2UYAyABKAkSGAoLc291cmNlX3R5cGUYBCABKAlIAIgBARIaCg1yZWxhdGl2ZV9wYXRoGAUgASgJSAGIAQESEgoFZmllbGQYBiABKAlIAogBAUIOCgxfc291cmNlX3R5cGVCEAoOX3JlbGF0aXZlX3BhdGhCCAoGX2ZpZWxkIr0DCh9Qcm9qZWN0U3RhbmRhcmRXb3Jkc1Jlc3BvbnNlRHRvEhYKDnNjaGVtYV92ZXJzaW9uGAEgASgJEhIKCnByb2plY3RfaWQYAiABKAkSFAoMcHJvamVjdF9yb290GAMgASgJEi0KCWxvYWRlZF9hdBgEIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASEgoKZnJvbV9jYWNoZRgFIAEoCBJCCgdzb3VyY2VzGAYgAygLMjEuaGFnaWNvZGUucHJvamVjdC52MS5Qcm9qZWN0U3RhbmRhcmRXb3JkU291cmNlRHRvEkAKBmdyb3VwcxgHIAMoCzIwLmhhZ2ljb2RlLnByb2plY3QudjEuUHJvamVjdFN0YW5kYXJkV29yZEdyb3VwRHRvEkIKB3BocmFzZXMYCCADKAsyMS5oYWdpY29kZS5wcm9qZWN0LnYxLlByb2plY3RTdGFuZGFyZFdvcmRQaHJhc2VEdG8SSwoLZGlhZ25vc3RpY3MYCSADKAsyNi5oYWdpY29kZS5wcm9qZWN0LnYxLlByb2plY3RTdGFuZGFyZFdvcmRzRGlhZ25vc3RpY0R0byK6AgolUHJvamVjdFN0YW5kYXJkV29yZHNFZGl0YWJsZVBocmFzZUR0bxILCgNrZXkYASABKAkSDQoFbGFiZWwYAiABKAkSFgoOc3VibWl0dGVkX3RleHQYAyABKAkSDwoHZW5hYmxlZBgEIAEoCBINCgVvcmRlchgFIAEoBRIMCgR0YWdzGAYgAygJEhUKCGxhbmd1YWdlGAcgASgJSACIAQESWgoIbWV0YWRhdGEYCCADKAsySC5oYWdpY29kZS5wcm9qZWN0LnYxLlByb2plY3RTdGFuZGFyZFdvcmRzRWRpdGFibGVQaHJhc2VEdG8uTWV0YWRhdGFFbnRyeRovCg1NZXRhZGF0YUVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAFCCwoJX2xhbmd1YWdlIpIDCiRQcm9qZWN0U3RhbmRhcmRXb3Jkc0VkaXRhYmxlR3JvdXBEdG8SCgoCaWQYASABKAkSDQoFbGFiZWwYAiABKAkSFgoJcGFyZW50X2lkGAMgASgJSACIAQESDwoHZW5hYmxlZBgEIAEoCBINCgVvcmRlchgFIAEoBRIMCgR0YWdzGAYgAygJEhUKCGxhbmd1YWdlGAcgASgJSAGIAQESWQoIbWV0YWRhdGEYCCADKAsyRy5oYWdpY29kZS5wcm9qZWN0LnYxLlByb2plY3RTdGFuZGFyZFdvcmRzRWRpdGFibGVHcm91cER0by5NZXRhZGF0YUVudHJ5EksKB3BocmFzZXMYCSADKAsyOi5oYWdpY29kZS5wcm9qZWN0LnYxLlByb2plY3RTdGFuZGFyZFdvcmRzRWRpdGFibGVQaHJhc2VEdG8aLwoNTWV0YWRhdGFFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBQgwKCl9wYXJlbnRfaWRCCwoJX2xhbmd1YWdlIsQBCiVQcm9qZWN0U3RhbmRhcmRXb3Jkc092ZXJsYXlTdW1tYXJ5RHRvEhMKC3NvdXJjZV90eXBlGAEgASgJEhUKDXJlbGF0aXZlX3BhdGgYAiABKAkSDgoGZXhpc3RzGAMgASgIEhMKC2dyb3VwX2NvdW50GAQgASgFEhQKDHBocmFzZV9jb3VudBgFIAEoBRI0ChBsYXN0X21vZGlmaWVkX2F0GAYgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCLWAQokUHJvamVjdFN0YW5kYXJkV29yZHNTb3VyY2VWZXJzaW9uRHRvEhYKDnNjaGVtYV92ZXJzaW9uGAEgASgJEhMKC3NvdXJjZV90eXBlGAIgASgJEhUKDXJlbGF0aXZlX3BhdGgYAyABKAkSEQoJZnVsbF9wYXRoGAQgASgJEg4KBmV4aXN0cxgFIAEoCBI0ChBsYXN0X21vZGlmaWVkX2F0GAYgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIRCglzaWduYXR1cmUYByABKAkilgEKIVByb2plY3RTdGFuZGFyZFdvcmRzU3RhdGlzdGljc0R0bxITCgtncm91cF9jb3VudBgBIAEoBRIUCgxwaHJhc2VfY291bnQYAiABKAUSHAoUZGlzYWJsZWRfZW50cnlfY291bnQYAyABKAUSEQoJdGFnX2NvdW50GAQgASgFEhUKDXNvdXJjZV9zdGF0dXMYBSABKAki8wQKKVByb2plY3RTdGFuZGFyZFdvcmRzTWFuYWdlbWVudERvY3VtZW50RHRvEhYKDnNjaGVtYV92ZXJzaW9uGAEgASgJEhIKCnByb2plY3RfaWQYAiABKAkSFAoMcHJvamVjdF9yb290GAMgASgJEi0KCWxvYWRlZF9hdBgEIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASSQoGZ3JvdXBzGAUgAygLMjkuaGFnaWNvZGUucHJvamVjdC52MS5Qcm9qZWN0U3RhbmRhcmRXb3Jkc0VkaXRhYmxlR3JvdXBEdG8SQgoHc291cmNlcxgGIAMoCzIxLmhhZ2ljb2RlLnByb2plY3QudjEuUHJvamVjdFN0YW5kYXJkV29yZFNvdXJjZUR0bxJaChZ1c2VyX292ZXJsYXlfc3VtbWFyaWVzGAcgAygLMjouaGFnaWNvZGUucHJvamVjdC52MS5Qcm9qZWN0U3RhbmRhcmRXb3Jkc092ZXJsYXlTdW1tYXJ5RHRvEkoKCnN0YXRpc3RpY3MYCCABKAsyNi5oYWdpY29kZS5wcm9qZWN0LnYxLlByb2plY3RTdGFuZGFyZFdvcmRzU3RhdGlzdGljc0R0bxJRCg5zb3VyY2VfdmVyc2lvbhgJIAEoCzI5LmhhZ2ljb2RlLnByb2plY3QudjEuUHJvamVjdFN0YW5kYXJkV29yZHNTb3VyY2VWZXJzaW9uRHRvEksKC2RpYWdub3N0aWNzGAogAygLMjYuaGFnaWNvZGUucHJvamVjdC52MS5Qcm9qZWN0U3RhbmRhcmRXb3Jkc0RpYWdub3N0aWNEdG8i5AEKLFNhdmVQcm9qZWN0U3RhbmRhcmRXb3Jkc01hbmFnZW1lbnRSZXF1ZXN0RHRvEhYKDnNjaGVtYV92ZXJzaW9uGAEgASgJEkkKBmdyb3VwcxgCIAMoCzI5LmhhZ2ljb2RlLnByb2plY3QudjEuUHJvamVjdFN0YW5kYXJkV29yZHNFZGl0YWJsZUdyb3VwRHRvElEKDnNvdXJjZV92ZXJzaW9uGAMgASgLMjkuaGFnaWNvZGUucHJvamVjdC52MS5Qcm9qZWN0U3RhbmRhcmRXb3Jkc1NvdXJjZVZlcnNpb25EdG8iVQojTW9ub1NwZWNzTWFuYWdlbWVudE1ldGFkYXRhRW50cnlEdG8SCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJEhIKCnZhbHVlX2tpbmQYAyABKAki5gQKIE1vbm9TcGVjc01hbmFnZW1lbnRSZXBvc2l0b3J5RHRvEgwKBG5hbWUYASABKAkSEQoEY29kZRgCIAEoCUgAiAEBEgwKBHBhdGgYAyABKAkSEAoDdXJsGAQgASgJSAGIAQESGQoMZGlzcGxheV9uYW1lGAUgASgJSAKIAQESEQoEdHlwZRgGIAEoCUgDiAEBEhEKBGljb24YByABKAlIBIgBARIQCghvcHRpb25hbBgIIAEoCBIMCgR0YWdzGAkgAygJEkoKCG1ldGFkYXRhGAogAygLMjguaGFnaWNvZGUucHJvamVjdC52MS5Nb25vU3BlY3NNYW5hZ2VtZW50TWV0YWRhdGFFbnRyeUR0bxIZChFpc192YWxpZF9naXRfcmVwbxgLIAEoCBITCgZicmFuY2gYDCABKAlIBYgBARIfChdoYXNfdW5jb21taXR0ZWRfY2hhbmdlcxgNIAEoCBIdChV1bnB1c2hlZF9jb21taXRfY291bnQYDiABKAUSGwoTaGFzX3RyYWNraW5nX2JyYW5jaBgPIAEoCBI1Cg90cmFja2luZ19icmFuY2gYECABKAsyHC5nb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWUSEwoLYWhlYWRfY291bnQYESABKAUSFAoMYmVoaW5kX2NvdW50GBIgASgFEhcKCnN5bmNfc3RhdGUYEyABKAlIBogBAUIHCgVfY29kZUIGCgRfdXJsQg8KDV9kaXNwbGF5X25hbWVCBwoFX3R5cGVCBwoFX2ljb25CCQoHX2JyYW5jaEINCgtfc3luY19zdGF0ZSKiAgoWTW9ub1NwZWNzTWFuYWdlbWVudER0bxIPCgd2ZXJzaW9uGAEgASgJEhYKDnJlcG9fZGlyZWN0b3J5GAIgASgJEhMKC2NvbmZpZ19wYXRoGAMgASgJEhsKE2NvbW1pdF93aGVuX2FyY2hpdmUYBCABKAgSFAoMeWFtbF9wcmV2aWV3GAUgASgJEksKDHJlcG9zaXRvcmllcxgGIAMoCzI1LmhhZ2ljb2RlLnByb2plY3QudjEuTW9ub1NwZWNzTWFuYWdlbWVudFJlcG9zaXRvcnlEdG8SSgoIbWV0YWRhdGEYByADKAsyOC5oYWdpY29kZS5wcm9qZWN0LnYxLk1vbm9TcGVjc01hbmFnZW1lbnRNZXRhZGF0YUVudHJ5RHRvImMKIU1vbm9TcGVjc0Nsb25lUmVwb3NpdG9yeVJlc3VsdER0bxIMCgRwYXRoGAEgASgJEg4KBnN0YXR1cxgCIAEoCRIUCgdtZXNzYWdlGAMgASgJSACIAQFCCgoIX21lc3NhZ2UicAolTW9ub1NwZWNzQ2xvbmVSZXBvc2l0b3JpZXNSZXNwb25zZUR0bxJHCgdyZXN1bHRzGAEgAygLMjYuaGFnaWNvZGUucHJvamVjdC52MS5Nb25vU3BlY3NDbG9uZVJlcG9zaXRvcnlSZXN1bHREdG8iTwokTW9ub1NwZWNzQ2xvbmVSZXBvc2l0b3JpZXNSZXF1ZXN0RHRvEg0KBXBhdGhzGAEgAygJEhgKEGluY2x1ZGVfb3B0aW9uYWwYAiABKAgiZQoiTW9ub1NwZWNzUmVtb3ZlQ2hlY2tvdXRSZXNwb25zZUR0bxIMCgRwYXRoGAEgASgJEg8KB3JlbW92ZWQYAiABKAgSFAoHbWVzc2FnZRgDIAEoCUgAiAEBQgoKCF9tZXNzYWdlIoQCCiNVcGRhdGVNb25vU3BlY3NNYW5hZ2VtZW50UmVxdWVzdER0bxIPCgd2ZXJzaW9uGAEgASgJEhYKDnJlcG9fZGlyZWN0b3J5GAIgASgJEhsKE2NvbW1pdF93aGVuX2FyY2hpdmUYAyABKAgSSwoMcmVwb3NpdG9yaWVzGAQgAygLMjUuaGFnaWNvZGUucHJvamVjdC52MS5Nb25vU3BlY3NNYW5hZ2VtZW50UmVwb3NpdG9yeUR0bxJKCghtZXRhZGF0YRgFIAMoCzI4LmhhZ2ljb2RlLnByb2plY3QudjEuTW9ub1NwZWNzTWFuYWdlbWVudE1ldGFkYXRhRW50cnlEdG8inQEKGFByb2plY3REZXNpZ25Eb2N1bWVudER0bxIMCgRwYXRoGAEgASgJEhwKD3JlcG9zaXRvcnlfcGF0aBgCIAEoCUgAiAEBEg8KB2NvbnRlbnQYAyABKAkSDgoGZXhpc3RzGAQgASgIEhQKB3ZlcnNpb24YBSABKAlIAYgBAUISChBfcmVwb3NpdG9yeV9wYXRoQgoKCF92ZXJzaW9uIoYBCiJTYXZlUHJvamVjdERlc2lnbkRvY3VtZW50UmVzdWx0RHRvEgwKBHBhdGgYASABKAkSHAoPcmVwb3NpdG9yeV9wYXRoGAIgASgJSACIAQESDwoHY3JlYXRlZBgDIAEoCBIPCgd2ZXJzaW9uGAQgASgJQhIKEF9yZXBvc2l0b3J5X3BhdGgingEKJVVwZGF0ZVByb2plY3REZXNpZ25Eb2N1bWVudFJlcXVlc3REdG8SHAoPcmVwb3NpdG9yeV9wYXRoGAEgASgJSACIAQESDwoHY29udGVudBgCIAEoCRIdChBleHBlY3RlZF92ZXJzaW9uGAMgASgJSAGIAQFCEgoQX3JlcG9zaXRvcnlfcGF0aEITChFfZXhwZWN0ZWRfdmVyc2lvbiLAAQoeUHJvamVjdERlc2lnblNpdGVJbmRleEVudHJ5RHRvEgwKBHNsdWcYASABKAkSDQoFdGl0bGUYAiABKAkSDwoHc3VtbWFyeRgDIAEoCRISCgpkZXRhaWxfdXJsGAQgASgJEhsKE2Rlc2lnbl9kb3dubG9hZF91cmwYBSABKAkSHwoXcHJldmlld19saWdodF9pbWFnZV91cmwYBiABKAkSHgoWcHJldmlld19kYXJrX2ltYWdlX3VybBgHIAEoCSK+AgoZUHJvamVjdERlc2lnblNpdGVJbmRleER0bxITCgtjYXRhbG9nX3VybBgBIAEoCRIVCg1zb3VyY2Vfc3RhdHVzGAIgASgJEhMKC2VudHJ5X2NvdW50GAMgASgFEkQKB2VudHJpZXMYBCADKAsyMy5oYWdpY29kZS5wcm9qZWN0LnYxLlByb2plY3REZXNpZ25TaXRlSW5kZXhFbnRyeUR0bxIaCg1jYWNoZV9jb250cm9sGAUgASgJSACIAQESEgoFZV90YWcYBiABKAlIAYgBARIaCg1sYXN0X21vZGlmaWVkGAcgASgJSAKIAQESFAoHZXhwaXJlcxgIIAEoCUgDiAEBQhAKDl9jYWNoZV9jb250cm9sQggKBl9lX3RhZ0IQCg5fbGFzdF9tb2RpZmllZEIKCghfZXhwaXJlcyKZAgocUHJvamVjdERlc2lnblNpdGVEb2N1bWVudER0bxIMCgRzbHVnGAEgASgJEg0KBXRpdGxlGAIgASgJEg8KB2NvbnRlbnQYAyABKAkSEgoKZGV0YWlsX3VybBgEIAEoCRIbChNkZXNpZ25fZG93bmxvYWRfdXJsGAUgASgJEhoKDWNhY2hlX2NvbnRyb2wYBiABKAlIAIgBARISCgVlX3RhZxgHIAEoCUgBiAEBEhoKDWxhc3RfbW9kaWZpZWQYCCABKAlIAogBARIUCgdleHBpcmVzGAkgASgJSAOIAQFCEAoOX2NhY2hlX2NvbnRyb2xCCAoGX2VfdGFnQhAKDl9sYXN0X21vZGlmaWVkQgoKCF9leHBpcmVzImoKG0JyYW5jaFZhbGlkYXRpb25SZXNwb25zZUR0bxIOCgZleGlzdHMYASABKAgSEAoIaXNfdmFsaWQYAiABKAgSFAoMaXNfYXZhaWxhYmxlGAMgASgIEhMKC2JyYW5jaF9uYW1lGAQgASgJIogDChlQYXRoVmFsaWRhdGlvblJlc3BvbnNlRHRvEhAKCGlzX3ZhbGlkGAEgASgIEg4KBnN0YXR1cxgCIAEoCRIPCgdtZXNzYWdlGAMgASgJEhYKCXBhdGhfdHlwZRgEIAEoCUgAiAEBEiIKFWhhc19tb25vX3NwZWNzX2NvbmZpZxgFIAEoCEgBiAEBEiMKFm1vbm9fc3BlY3NfY29uZmlnX3BhdGgYBiABKAlIAogBARImChltb25vX3NwZWNzX3JlcG9fZGlyZWN0b3J5GAcgASgJSAOIAQESKwoebW9ub19zcGVjc19jb21taXRfd2hlbl9hcmNoaXZlGAggASgISASIAQFCDAoKX3BhdGhfdHlwZUIYChZfaGFzX21vbm9fc3BlY3NfY29uZmlnQhkKF19tb25vX3NwZWNzX2NvbmZpZ19wYXRoQhwKGl9tb25vX3NwZWNzX3JlcG9fZGlyZWN0b3J5QiEKH19tb25vX3NwZWNzX2NvbW1pdF93aGVuX2FyY2hpdmUiVgoKR2l0UmVwb0R0bxIMCgRuYW1lGAEgASgJEgwKBHBhdGgYAiABKAkSFQoNcmVsYXRpdmVfcGF0aBgDIAEoCRIVCg1pc19tb25vX3NwZWNzGAQgASgIIqQBChdTY2FuR2l0UmVwb3NSZXNwb25zZUR0bxI1CgxyZXBvc2l0b3JpZXMYASADKAsyHy5oYWdpY29kZS5wcm9qZWN0LnYxLkdpdFJlcG9EdG8SEwoLdG90YWxfY291bnQYAiABKAUSDwoHc3VjY2VzcxgDIAEoCBIaCg1lcnJvcl9tZXNzYWdlGAQgASgJSACIAQFCEAoOX2Vycm9yX21lc3NhZ2UijwEKFlNjYW5HaXRSZXBvc1JlcXVlc3REdG8SEQoJcm9vdF9wYXRoGAEgASgJEhEKCW1heF9kZXB0aBgCIAEoBRIWCg5leGNsdWRlX2hpZGRlbhgDIAEoCBIdChVtYXhfZm9sZGVyc19wZXJfbGV2ZWwYBCABKAUSGAoQZXhjbHVkZV9wYXR0ZXJucxgFIAMoCSJEChlNb25vU3BlY3NDb25maWdEZXRhaWxzRHRvEg8KB3ZlcnNpb24YASABKAkSFgoOcmVwb19kaXJlY3RvcnkYAiABKAkikgEKHFZhbGlkYXRlTW9ub1NwZWNzUmVzcG9uc2VEdG8SEAoIaXNfdmFsaWQYASABKAgSPgoGY29uZmlnGAIgASgLMi4uaGFnaWNvZGUucHJvamVjdC52MS5Nb25vU3BlY3NDb25maWdEZXRhaWxzRHRvEhAKCHdhcm5pbmdzGAMgAygJEg4KBmVycm9ycxgEIAMoCSIzChtWYWxpZGF0ZU1vbm9TcGVjc1JlcXVlc3REdG8SFAoMcHJvamVjdF9wYXRoGAEgASgJInwKG1ZhdWx0Qm9vdHN0cmFwRGlhZ25vc3RpY0R0bxIQCghzZXZlcml0eRgBIAEoCRIMCgRjb2RlGAIgASgJEg8KB21lc3NhZ2UYAyABKAkSGgoNcmVsYXRpdmVfcGF0aBgEIAEoCUgAiAEBQhAKDl9yZWxhdGl2ZV9wYXRoIt8CCgxWYXVsdEl0ZW1EdG8SCgoCaWQYASABKAkSDAoEbmFtZRgCIAEoCRIMCgR0eXBlGAMgASgJEhUKDXBoeXNpY2FsX3BhdGgYBCABKAkSFAoHZ2l0X3VybBgFIAEoCUgAiAEBEjIKDmNyZWF0ZWRfYXRfdXRjGAYgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIyCg51cGRhdGVkX2F0X3V0YxgHIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASTwoVYm9vdHN0cmFwX2RpYWdub3N0aWNzGAggAygLMjAuaGFnaWNvZGUucHJvamVjdC52MS5WYXVsdEJvb3RzdHJhcERpYWdub3N0aWNEdG8SDQoFc2NvcGUYCSABKAkSFwoKcHJvamVjdF9pZBgKIAEoCUgBiAEBQgoKCF9naXRfdXJsQg0KC19wcm9qZWN0X2lkIn4KFFZhdWx0TGlzdFJlc3BvbnNlRHRvEjQKEGdlbmVyYXRlZF9hdF91dGMYASABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEjAKBWl0ZW1zGAIgAygLMiEuaGFnaWNvZGUucHJvamVjdC52MS5WYXVsdEl0ZW1EdG8inwQKHFZzQ29kZVNlcnZlclJ1bnRpbWVTdGF0dXNEdG8SDgoGc3RhdHVzGAEgASgJEhsKE2FjdGl2ZV9jYXBhYmlsaXRpZXMYAiADKAkSEQoEaG9zdBgDIAEoCUgAiAEBEhwKD2NvbmZpZ3VyZWRfcG9ydBgEIAEoBUgBiAEBEhsKDmVmZmVjdGl2ZV9wb3J0GAUgASgFSAKIAQESFQoIYmFzZV91cmwYBiABKAlIA4gBARIWCglhdXRoX21vZGUYByABKAlIBIgBARITCgZzb3VyY2UYCCABKAlIBYgBARIVCg1zb3VyY2VfbG9ja2VkGAkgASgIEhIKCmhhc19zZWNyZXQYCiABKAgSGgoNc2VjcmV0X3NvdXJjZRgLIAEoCUgGiAEBEjkKFWxhc3RfYXR0ZW1wdGVkX2F0X3V0YxgMIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASFwoKbGFzdF9lcnJvchgNIAEoCUgHiAEBEhsKDnN0YXR1c19tZXNzYWdlGA4gASgJSAiIAQFCBwoFX2hvc3RCEgoQX2NvbmZpZ3VyZWRfcG9ydEIRCg9fZWZmZWN0aXZlX3BvcnRCCwoJX2Jhc2VfdXJsQgwKCl9hdXRoX21vZGVCCQoHX3NvdXJjZUIQCg5fc2VjcmV0X3NvdXJjZUINCgtfbGFzdF9lcnJvckIRCg9fc3RhdHVzX21lc3NhZ2UinAIKHVZzQ29kZVNlcnZlckxhdW5jaFJlc3BvbnNlRHRvEhIKCmxhdW5jaF91cmwYASABKAkSHQoQY29ubmVjdGlvbl90b2tlbhgCIAEoCUgAiAEBEhEKCW9wZW5fbW9kZRgDIAEoCRJCCgdydW50aW1lGAQgASgLMjEuaGFnaWNvZGUucHJvamVjdC52MS5Wc0NvZGVTZXJ2ZXJSdW50aW1lU3RhdHVzRHRvEhgKC2luc3RhbmNlX2lkGAUgASgJSAGIAQESMgoOZXhwaXJlc19hdF91dGMYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQhMKEV9jb25uZWN0aW9uX3Rva2VuQg4KDF9pbnN0YW5jZV9pZCKXAgoVUHJvamVjdEdpdFdhdGNoU3RhdHVzEh4KFm1vbml0b3JlZF9yZXBvc2l0b3JpZXMYASADKAkSNAoQbGFzdF9zY2FuX2F0X3V0YxgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASNAoQbmV4dF9zY2FuX2F0X3V0YxgDIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASGAoQcmVwb3NpdG9yeV9jb3VudBgEIAEoBRISCgppc19ydW5uaW5nGAUgASgIEiIKGm1heF9tb25pdG9yZWRfcmVwb3NpdG9yaWVzGAYgASgFEiAKGGdpdF9hdXRvX3JlZnJlc2hfZW5hYmxlZBgHIAEoCDL1GAoOUHJvamVjdFNlcnZpY2USZgoNQ3JlYXRlUHJvamVjdBIpLmhhZ2ljb2RlLnByb2plY3QudjEuQ3JlYXRlUHJvamVjdFJlcXVlc3QaKi5oYWdpY29kZS5wcm9qZWN0LnYxLkNyZWF0ZVByb2plY3RSZXNwb25zZRJyChFDcmVhdGVEZW1vUHJvamVjdBItLmhhZ2ljb2RlLnByb2plY3QudjEuQ3JlYXRlRGVtb1Byb2plY3RSZXF1ZXN0Gi4uaGFnaWNvZGUucHJvamVjdC52MS5DcmVhdGVEZW1vUHJvamVjdFJlc3BvbnNlEmYKDVVwZGF0ZVByb2plY3QSKS5oYWdpY29kZS5wcm9qZWN0LnYxLlVwZGF0ZVByb2plY3RSZXF1ZXN0GiouaGFnaWNvZGUucHJvamVjdC52MS5VcGRhdGVQcm9qZWN0UmVzcG9uc2USZgoNRGVsZXRlUHJvamVjdBIpLmhhZ2ljb2RlLnByb2plY3QudjEuRGVsZXRlUHJvamVjdFJlcXVlc3QaKi5oYWdpY29kZS5wcm9qZWN0LnYxLkRlbGV0ZVByb2plY3RSZXNwb25zZRKEAQoXR2V0UHJvamVjdFN0YW5kYXJkV29yZHMSMy5oYWdpY29kZS5wcm9qZWN0LnYxLkdldFByb2plY3RTdGFuZGFyZFdvcmRzUmVxdWVzdBo0LmhhZ2ljb2RlLnByb2plY3QudjEuR2V0UHJvamVjdFN0YW5kYXJkV29yZHNSZXNwb25zZRKiAQohR2V0UHJvamVjdFN0YW5kYXJkV29yZHNNYW5hZ2VtZW50Ej0uaGFnaWNvZGUucHJvamVjdC52MS5HZXRQcm9qZWN0U3RhbmRhcmRXb3Jkc01hbmFnZW1lbnRSZXF1ZXN0Gj4uaGFnaWNvZGUucHJvamVjdC52MS5HZXRQcm9qZWN0U3RhbmRhcmRXb3Jkc01hbmFnZW1lbnRSZXNwb25zZRKlAQoiU2F2ZVByb2plY3RTdGFuZGFyZFdvcmRzTWFuYWdlbWVudBI+LmhhZ2ljb2RlLnByb2plY3QudjEuU2F2ZVByb2plY3RTdGFuZGFyZFdvcmRzTWFuYWdlbWVudFJlcXVlc3QaPy5oYWdpY29kZS5wcm9qZWN0LnYxLlNhdmVQcm9qZWN0U3RhbmRhcmRXb3Jkc01hbmFnZW1lbnRSZXNwb25zZRKBAQoWR2V0TW9ub1NwZWNzTWFuYWdlbWVudBIyLmhhZ2ljb2RlLnByb2plY3QudjEuR2V0TW9ub1NwZWNzTWFuYWdlbWVudFJlcXVlc3QaMy5oYWdpY29kZS5wcm9qZWN0LnYxLkdldE1vbm9TcGVjc01hbmFnZW1lbnRSZXNwb25zZRJsCg9SZWxvYWRNb25vU3BlY3MSKy5oYWdpY29kZS5wcm9qZWN0LnYxLlJlbG9hZE1vbm9TcGVjc1JlcXVlc3QaLC5oYWdpY29kZS5wcm9qZWN0LnYxLlJlbG9hZE1vbm9TcGVjc1Jlc3BvbnNlEo0BChpDbG9uZU1vbm9TcGVjc1JlcG9zaXRvcmllcxI2LmhhZ2ljb2RlLnByb2plY3QudjEuQ2xvbmVNb25vU3BlY3NSZXBvc2l0b3JpZXNSZXF1ZXN0GjcuaGFnaWNvZGUucHJvamVjdC52MS5DbG9uZU1vbm9TcGVjc1JlcG9zaXRvcmllc1Jlc3BvbnNlEqIBCiFSZW1vdmVNb25vU3BlY3NSZXBvc2l0b3J5Q2hlY2tvdXQSPS5oYWdpY29kZS5wcm9qZWN0LnYxLlJlbW92ZU1vbm9TcGVjc1JlcG9zaXRvcnlDaGVja291dFJlcXVlc3QaPi5oYWdpY29kZS5wcm9qZWN0LnYxLlJlbW92ZU1vbm9TcGVjc1JlcG9zaXRvcnlDaGVja291dFJlc3BvbnNlEngKE0luaXRpYWxpemVNb25vU3BlY3MSLy5oYWdpY29kZS5wcm9qZWN0LnYxLkluaXRpYWxpemVNb25vU3BlY3NSZXF1ZXN0GjAuaGFnaWNvZGUucHJvamVjdC52MS5Jbml0aWFsaXplTW9ub1NwZWNzUmVzcG9uc2USigEKGVVwZGF0ZU1vbm9TcGVjc01hbmFnZW1lbnQSNS5oYWdpY29kZS5wcm9qZWN0LnYxLlVwZGF0ZU1vbm9TcGVjc01hbmFnZW1lbnRSZXF1ZXN0GjYuaGFnaWNvZGUucHJvamVjdC52MS5VcGRhdGVNb25vU3BlY3NNYW5hZ2VtZW50UmVzcG9uc2UShwEKGEdldFByb2plY3REZXNpZ25Eb2N1bWVudBI0LmhhZ2ljb2RlLnByb2plY3QudjEuR2V0UHJvamVjdERlc2lnbkRvY3VtZW50UmVxdWVzdBo1LmhhZ2ljb2RlLnByb2plY3QudjEuR2V0UHJvamVjdERlc2lnbkRvY3VtZW50UmVzcG9uc2USigEKGVNhdmVQcm9qZWN0RGVzaWduRG9jdW1lbnQSNS5oYWdpY29kZS5wcm9qZWN0LnYxLlNhdmVQcm9qZWN0RGVzaWduRG9jdW1lbnRSZXF1ZXN0GjYuaGFnaWNvZGUucHJvamVjdC52MS5TYXZlUHJvamVjdERlc2lnbkRvY3VtZW50UmVzcG9uc2USigEKGUdldFByb2plY3REZXNpZ25TaXRlSW5kZXgSNS5oYWdpY29kZS5wcm9qZWN0LnYxLkdldFByb2plY3REZXNpZ25TaXRlSW5kZXhSZXF1ZXN0GjYuaGFnaWNvZGUucHJvamVjdC52MS5HZXRQcm9qZWN0RGVzaWduU2l0ZUluZGV4UmVzcG9uc2USkwEKHEdldFByb2plY3REZXNpZ25TaXRlRG9jdW1lbnQSOC5oYWdpY29kZS5wcm9qZWN0LnYxLkdldFByb2plY3REZXNpZ25TaXRlRG9jdW1lbnRSZXF1ZXN0GjkuaGFnaWNvZGUucHJvamVjdC52MS5HZXRQcm9qZWN0RGVzaWduU2l0ZURvY3VtZW50UmVzcG9uc2USfgoVVmFsaWRhdGVQcm9qZWN0QnJhbmNoEjEuaGFnaWNvZGUucHJvamVjdC52MS5WYWxpZGF0ZVByb2plY3RCcmFuY2hSZXF1ZXN0GjIuaGFnaWNvZGUucHJvamVjdC52MS5WYWxpZGF0ZVByb2plY3RCcmFuY2hSZXNwb25zZRJ4ChNWYWxpZGF0ZVByb2plY3RQYXRoEi8uaGFnaWNvZGUucHJvamVjdC52MS5WYWxpZGF0ZVByb2plY3RQYXRoUmVxdWVzdBowLmhhZ2ljb2RlLnByb2plY3QudjEuVmFsaWRhdGVQcm9qZWN0UGF0aFJlc3BvbnNlEngKE1NjYW5HaXRSZXBvc2l0b3JpZXMSLy5oYWdpY29kZS5wcm9qZWN0LnYxLlNjYW5HaXRSZXBvc2l0b3JpZXNSZXF1ZXN0GjAuaGFnaWNvZGUucHJvamVjdC52MS5TY2FuR2l0UmVwb3NpdG9yaWVzUmVzcG9uc2UShAEKF1ZhbGlkYXRlTW9ub1NwZWNzQ29uZmlnEjMuaGFnaWNvZGUucHJvamVjdC52MS5WYWxpZGF0ZU1vbm9TcGVjc0NvbmZpZ1JlcXVlc3QaNC5oYWdpY29kZS5wcm9qZWN0LnYxLlZhbGlkYXRlTW9ub1NwZWNzQ29uZmlnUmVzcG9uc2USbwoQR2V0UHJvamVjdFZhdWx0cxIsLmhhZ2ljb2RlLnByb2plY3QudjEuR2V0UHJvamVjdFZhdWx0c1JlcXVlc3QaLS5oYWdpY29kZS5wcm9qZWN0LnYxLkdldFByb2plY3RWYXVsdHNSZXNwb25zZRKEAQoXT3BlblByb2plY3RJbkNvZGVTZXJ2ZXISMy5oYWdpY29kZS5wcm9qZWN0LnYxLk9wZW5Qcm9qZWN0SW5Db2RlU2VydmVyUmVxdWVzdBo0LmhhZ2ljb2RlLnByb2plY3QudjEuT3BlblByb2plY3RJbkNvZGVTZXJ2ZXJSZXNwb25zZRKHAQoYR2V0UHJvamVjdEdpdFdhdGNoU3RhdHVzEjQuaGFnaWNvZGUucHJvamVjdC52MS5HZXRQcm9qZWN0R2l0V2F0Y2hTdGF0dXNSZXF1ZXN0GjUuaGFnaWNvZGUucHJvamVjdC52MS5HZXRQcm9qZWN0R2l0V2F0Y2hTdGF0dXNSZXNwb25zZUIpqgImUENvZGUuSHR0cEFwaS5HcnBjQ29udHJhY3RzLlByb2plY3QuVjFiBnByb3RvMw",[Ne,_i]),Tm=v(se,1),Qm=v(se,5),Mm=v(se,15),Om=v(se,17),Dm=v(se,19),_m=v(se,21),$m=v(se,23),Pm=v(se,25),qm=v(se,41),eh=v(se,50),th=v(se,51),nh=v(se,69),oh=v(se,71),ah=v(se,85),rh=We(se,0),Je=oe("Ch9oYWdpY29kZS9wcm9qZWN0L3YxL3ZhdWx0LnByb3RvEhNoYWdpY29kZS5wcm9qZWN0LnYxIhMKEUxpc3RWYXVsdHNSZXF1ZXN0Ik8KEkxpc3RWYXVsdHNSZXNwb25zZRI5CgZyZXN1bHQYASABKAsyKS5oYWdpY29kZS5wcm9qZWN0LnYxLlZhdWx0TGlzdFJlc3BvbnNlRHRvIk4KEkNyZWF0ZVZhdWx0UmVxdWVzdBI4CgRib2R5GAEgASgLMiouaGFnaWNvZGUucHJvamVjdC52MS5DcmVhdGVWYXVsdFJlcXVlc3REdG8iSAoTQ3JlYXRlVmF1bHRSZXNwb25zZRIxCgZyZXN1bHQYASABKAsyIS5oYWdpY29kZS5wcm9qZWN0LnYxLlZhdWx0SXRlbUR0byJaChJVcGRhdGVWYXVsdFJlcXVlc3QSCgoCaWQYASABKAkSOAoEYm9keRgCIAEoCzIqLmhhZ2ljb2RlLnByb2plY3QudjEuVXBkYXRlVmF1bHRSZXF1ZXN0RHRvIkgKE1VwZGF0ZVZhdWx0UmVzcG9uc2USMQoGcmVzdWx0GAEgASgLMiEuaGFnaWNvZGUucHJvamVjdC52MS5WYXVsdEl0ZW1EdG8iPAoSRGVsZXRlVmF1bHRSZXF1ZXN0EgoKAmlkGAEgASgJEhoKEmRlbGV0ZV9sb2NhbF9maWxlcxgCIAEoCCJSChNEZWxldGVWYXVsdFJlc3BvbnNlEjsKBnJlc3VsdBgBIAEoCzIrLmhhZ2ljb2RlLnByb2plY3QudjEuRGVsZXRlVmF1bHRSZXNwb25zZUR0byI+ChRHZXRWYXVsdEZpbGVzUmVxdWVzdBIKCgJpZBgBIAEoCRIRCgRwYXRoGAIgASgJSACIAQFCBwoFX3BhdGgiVgoVR2V0VmF1bHRGaWxlc1Jlc3BvbnNlEj0KBnJlc3VsdBgBIAEoCzItLmhhZ2ljb2RlLnByb2plY3QudjEuVmF1bHRGaWxlTGlzdFJlc3BvbnNlRHRvIjYKGkdldFZhdWx0RmlsZVByZXZpZXdSZXF1ZXN0EgoKAmlkGAEgASgJEgwKBHBhdGgYAiABKAkiXwobR2V0VmF1bHRGaWxlUHJldmlld1Jlc3BvbnNlEkAKBnJlc3VsdBgBIAEoCzIwLmhhZ2ljb2RlLnByb2plY3QudjEuVmF1bHRGaWxlUHJldmlld1Jlc3BvbnNlRHRvIo4BChxPcGVuVmF1bHRJbkNvZGVTZXJ2ZXJSZXF1ZXN0EgoKAmlkGAEgASgJEhEKBHBhdGgYAiABKAlIAIgBARInChpjdXJyZW50X2ludGVyZmFjZV9sYW5ndWFnZRgDIAEoCUgBiAEBQgcKBV9wYXRoQh0KG19jdXJyZW50X2ludGVyZmFjZV9sYW5ndWFnZSJjCh1PcGVuVmF1bHRJbkNvZGVTZXJ2ZXJSZXNwb25zZRJCCgZyZXN1bHQYASABKAsyMi5oYWdpY29kZS5wcm9qZWN0LnYxLlZzQ29kZVNlcnZlckxhdW5jaFJlc3BvbnNlRHRvImwKFUNyZWF0ZVZhdWx0UmVxdWVzdER0bxIMCgRuYW1lGAEgASgJEgwKBHR5cGUYAiABKAkSFQoNcGh5c2ljYWxfcGF0aBgDIAEoCRIUCgdnaXRfdXJsGAQgASgJSACIAQFCCgoIX2dpdF91cmwibAoVVXBkYXRlVmF1bHRSZXF1ZXN0RHRvEgwKBG5hbWUYASABKAkSDAoEdHlwZRgCIAEoCRIVCg1waHlzaWNhbF9wYXRoGAMgASgJEhQKB2dpdF91cmwYBCABKAlIAIgBAUIKCghfZ2l0X3VybCKdAQoWRGVsZXRlVmF1bHRSZXNwb25zZUR0bxIKCgJpZBgBIAEoCRIPCgdkZWxldGVkGAIgASgIEiQKHGRlbGV0ZV9sb2NhbF9maWxlc19yZXF1ZXN0ZWQYAyABKAgSIwobbG9jYWxfZmlsZXNfZGVsZXRpb25fc3RhdHVzGAQgASgJEhsKE2xvY2FsX2ZpbGVzX2RlbGV0ZWQYBSABKAgizAEKEVZhdWx0RmlsZUVudHJ5RHRvEhUKDXJlbGF0aXZlX3BhdGgYASABKAkSEQoJZmlsZV9uYW1lGAIgASgJEhQKDGlzX2RpcmVjdG9yeRgDIAEoCBIRCglleHRlbnNpb24YBCABKAkSEgoKc2l6ZV9ieXRlcxgFIAEoAxI1ChFsYXN0X21vZGlmaWVkX3V0YxgGIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASGQoRcHJldmlld19zdXBwb3J0ZWQYByABKAgimAIKGFZhdWx0RmlsZUxpc3RSZXNwb25zZUR0bxIQCgh2YXVsdF9pZBgBIAEoCRISCgp2YXVsdF9uYW1lGAIgASgJEhUKDXBoeXNpY2FsX3BhdGgYAyABKAkSDgoGc3RhdHVzGAQgASgJEhcKCmVycm9yX2NvZGUYBSABKAlIAIgBARIUCgdtZXNzYWdlGAYgASgJSAGIAQESFAoMaXNfdHJ1bmNhdGVkGAcgASgIEhgKEHRvdGFsX2ZpbGVfY291bnQYCCABKAUSNQoFaXRlbXMYCSADKAsyJi5oYWdpY29kZS5wcm9qZWN0LnYxLlZhdWx0RmlsZUVudHJ5RHRvQg0KC19lcnJvcl9jb2RlQgoKCF9tZXNzYWdlIpQDChtWYXVsdEZpbGVQcmV2aWV3UmVzcG9uc2VEdG8SEAoIdmF1bHRfaWQYASABKAkSEgoKdmF1bHRfbmFtZRgCIAEoCRIVCg1waHlzaWNhbF9wYXRoGAMgASgJEhUKDXJlbGF0aXZlX3BhdGgYBCABKAkSEQoJZmlsZV9uYW1lGAUgASgJEhEKCWV4dGVuc2lvbhgGIAEoCRISCgpzaXplX2J5dGVzGAcgASgDEjUKEWxhc3RfbW9kaWZpZWRfdXRjGAggASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIOCgZzdGF0dXMYCSABKAkSFwoKZXJyb3JfY29kZRgKIAEoCUgAiAEBEhQKB21lc3NhZ2UYCyABKAlIAYgBARIZChFwcmV2aWV3X3N1cHBvcnRlZBgMIAEoCBIZChFjb250ZW50X3RydW5jYXRlZBgNIAEoCBIUCgdjb250ZW50GA4gASgJSAKIAQFCDQoLX2Vycm9yX2NvZGVCCgoIX21lc3NhZ2VCCgoIX2NvbnRlbnQy9QUKDFZhdWx0U2VydmljZRJdCgpMaXN0VmF1bHRzEiYuaGFnaWNvZGUucHJvamVjdC52MS5MaXN0VmF1bHRzUmVxdWVzdBonLmhhZ2ljb2RlLnByb2plY3QudjEuTGlzdFZhdWx0c1Jlc3BvbnNlEmAKC0NyZWF0ZVZhdWx0EicuaGFnaWNvZGUucHJvamVjdC52MS5DcmVhdGVWYXVsdFJlcXVlc3QaKC5oYWdpY29kZS5wcm9qZWN0LnYxLkNyZWF0ZVZhdWx0UmVzcG9uc2USYAoLVXBkYXRlVmF1bHQSJy5oYWdpY29kZS5wcm9qZWN0LnYxLlVwZGF0ZVZhdWx0UmVxdWVzdBooLmhhZ2ljb2RlLnByb2plY3QudjEuVXBkYXRlVmF1bHRSZXNwb25zZRJgCgtEZWxldGVWYXVsdBInLmhhZ2ljb2RlLnByb2plY3QudjEuRGVsZXRlVmF1bHRSZXF1ZXN0GiguaGFnaWNvZGUucHJvamVjdC52MS5EZWxldGVWYXVsdFJlc3BvbnNlEmYKDUdldFZhdWx0RmlsZXMSKS5oYWdpY29kZS5wcm9qZWN0LnYxLkdldFZhdWx0RmlsZXNSZXF1ZXN0GiouaGFnaWNvZGUucHJvamVjdC52MS5HZXRWYXVsdEZpbGVzUmVzcG9uc2USeAoTR2V0VmF1bHRGaWxlUHJldmlldxIvLmhhZ2ljb2RlLnByb2plY3QudjEuR2V0VmF1bHRGaWxlUHJldmlld1JlcXVlc3QaMC5oYWdpY29kZS5wcm9qZWN0LnYxLkdldFZhdWx0RmlsZVByZXZpZXdSZXNwb25zZRJ+ChVPcGVuVmF1bHRJbkNvZGVTZXJ2ZXISMS5oYWdpY29kZS5wcm9qZWN0LnYxLk9wZW5WYXVsdEluQ29kZVNlcnZlclJlcXVlc3QaMi5oYWdpY29kZS5wcm9qZWN0LnYxLk9wZW5WYXVsdEluQ29kZVNlcnZlclJlc3BvbnNlQimqAiZQQ29kZS5IdHRwQXBpLkdycGNDb250cmFjdHMuUHJvamVjdC5WMWIGcHJvdG8z",[Ne,se]),ih=v(Je,1),sh=v(Je,3),lh=v(Je,5),ch=v(Je,7),dh=v(Je,9),uh=v(Je,11),mh=v(Je,14),hh=v(Je,15),bh=We(Je,0),Qe=oe("CitoYWdpY29kZS9jb21tdW5pdHkvdjEvc2NoZWR1bGVkX3BsYW5zLnByb3RvEhVoYWdpY29kZS5jb21tdW5pdHkudjEiQwoZTGlzdFNjaGVkdWxlZFBsYW5zUmVxdWVzdBIXCgpwcm9qZWN0X2lkGAEgASgJSACIAQFCDQoLX3Byb2plY3RfaWQiWgoaTGlzdFNjaGVkdWxlZFBsYW5zUmVzcG9uc2USPAoGcmVzdWx0GAEgAygLMiwuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlNjaGVkdWxlZFBsYW5SZXNwb25zZSIlChdHZXRTY2hlZHVsZWRQbGFuUmVxdWVzdBIKCgJpZBgBIAEoCSJYChhHZXRTY2hlZHVsZWRQbGFuUmVzcG9uc2USPAoGcmVzdWx0GAEgASgLMiwuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlNjaGVkdWxlZFBsYW5SZXNwb25zZSI2CiBMaXN0U2NoZWR1bGVkUGxhblByb2JsZW1zUmVxdWVzdBISCgpwcm9qZWN0X2lkGAEgASgJIm0KIUxpc3RTY2hlZHVsZWRQbGFuUHJvYmxlbXNSZXNwb25zZRJICgZyZXN1bHQYASADKAsyOC5oYWdpY29kZS5jb21tdW5pdHkudjEuU2NoZWR1bGVkUGxhbkRlZmluaXRpb25Qcm9ibGVtRHRvIvMBCiNMaXN0U2NoZWR1bGVkUGxhbk9jY3VycmVuY2VzUmVxdWVzdBIYCgtyYW5nZV9zdGFydBgBIAEoCUgAiAEBEhYKCXJhbmdlX2VuZBgCIAEoCUgBiAEBEh4KEWRpc3BsYXlfdGltZV96b25lGAMgASgJSAKIAQESEwoGY3Vyc29yGAQgASgJSAOIAQESFwoKcHJvamVjdF9pZBgFIAEoCUgEiAEBQg4KDF9yYW5nZV9zdGFydEIMCgpfcmFuZ2VfZW5kQhQKEl9kaXNwbGF5X3RpbWVfem9uZUIJCgdfY3Vyc29yQg0KC19wcm9qZWN0X2lkInIKJExpc3RTY2hlZHVsZWRQbGFuT2NjdXJyZW5jZXNSZXNwb25zZRJKCgZyZXN1bHQYASABKAsyOi5oYWdpY29kZS5jb21tdW5pdHkudjEuU2NoZWR1bGVkUGxhbk9jY3VycmVuY2VQYWdlUmVzcG9uc2UiWwoaQ3JlYXRlU2NoZWR1bGVkUGxhblJlcXVlc3QSPQoEYm9keRgBIAEoCzIvLmhhZ2ljb2RlLmNvbW11bml0eS52MS5TY2hlZHVsZWRQbGFuU2F2ZVJlcXVlc3QiWwobQ3JlYXRlU2NoZWR1bGVkUGxhblJlc3BvbnNlEjwKBnJlc3VsdBgBIAEoCzIsLmhhZ2ljb2RlLmNvbW11bml0eS52MS5TY2hlZHVsZWRQbGFuUmVzcG9uc2UiZwoaVXBkYXRlU2NoZWR1bGVkUGxhblJlcXVlc3QSCgoCaWQYASABKAkSPQoEYm9keRgCIAEoCzIvLmhhZ2ljb2RlLmNvbW11bml0eS52MS5TY2hlZHVsZWRQbGFuU2F2ZVJlcXVlc3QiWwobVXBkYXRlU2NoZWR1bGVkUGxhblJlc3BvbnNlEjwKBnJlc3VsdBgBIAEoCzIsLmhhZ2ljb2RlLmNvbW11bml0eS52MS5TY2hlZHVsZWRQbGFuUmVzcG9uc2UiKAoaRGVsZXRlU2NoZWR1bGVkUGxhblJlcXVlc3QSCgoCaWQYASABKAkiHQobRGVsZXRlU2NoZWR1bGVkUGxhblJlc3BvbnNlInkKIkVkaXRTY2hlZHVsZWRQbGFuT2NjdXJyZW5jZVJlcXVlc3QSCgoCaWQYASABKAkSRwoEYm9keRgCIAEoCzI5LmhhZ2ljb2RlLmNvbW11bml0eS52MS5TY2hlZHVsZWRQbGFuT2NjdXJyZW5jZUVkaXRSZXF1ZXN0ImMKI0VkaXRTY2hlZHVsZWRQbGFuT2NjdXJyZW5jZVJlc3BvbnNlEjwKBnJlc3VsdBgBIAEoCzIsLmhhZ2ljb2RlLmNvbW11bml0eS52MS5TY2hlZHVsZWRQbGFuUmVzcG9uc2UiYAokRGVsZXRlU2NoZWR1bGVkUGxhbk9jY3VycmVuY2VSZXF1ZXN0EgoKAmlkGAEgASgJEhoKDW9jY3VycmVuY2VfYXQYAiABKAlIAIgBAUIQCg5fb2NjdXJyZW5jZV9hdCJlCiVEZWxldGVTY2hlZHVsZWRQbGFuT2NjdXJyZW5jZVJlc3BvbnNlEjwKBnJlc3VsdBgBIAEoCzIsLmhhZ2ljb2RlLmNvbW11bml0eS52MS5TY2hlZHVsZWRQbGFuUmVzcG9uc2UiJQoXUnVuU2NoZWR1bGVkUGxhblJlcXVlc3QSCgoCaWQYASABKAkiVQoYUnVuU2NoZWR1bGVkUGxhblJlc3BvbnNlEjkKBnJlc3VsdBgBIAEoCzIpLmhhZ2ljb2RlLmNvbW11bml0eS52MS5TZXNzaW9uUmVzcG9uc2VEdG8iJwoZU3RhcnRTY2hlZHVsZWRQbGFuUmVxdWVzdBIKCgJpZBgBIAEoCSJgChpTdGFydFNjaGVkdWxlZFBsYW5SZXNwb25zZRJCCgZyZXN1bHQYASABKAsyMi5oYWdpY29kZS5jb21tdW5pdHkudjEuU2NoZWR1bGVkUGxhblJ1bkFjY2VwdGVkRHRvIjUKJ0NvbmZpcm1TY2hlZHVsZWRQbGFuUXVvdGFUcmlnZ2VyUmVxdWVzdBIKCgJpZBgBIAEoCSJuCihDb25maXJtU2NoZWR1bGVkUGxhblF1b3RhVHJpZ2dlclJlc3BvbnNlEkIKBnJlc3VsdBgBIAEoCzIyLmhhZ2ljb2RlLmNvbW11bml0eS52MS5TY2hlZHVsZWRQbGFuUnVuQWNjZXB0ZWREdG8iNAomQ2FuY2VsU2NoZWR1bGVkUGxhblF1b3RhVHJpZ2dlclJlcXVlc3QSCgoCaWQYASABKAkiZwonQ2FuY2VsU2NoZWR1bGVkUGxhblF1b3RhVHJpZ2dlclJlc3BvbnNlEjwKBnJlc3VsdBgBIAEoCzIsLmhhZ2ljb2RlLmNvbW11bml0eS52MS5TY2hlZHVsZWRQbGFuUmVzcG9uc2UiKAoVU2NoZWR1bGVkUGxhbkFnZW50RHRvEg8KB2hlcm9faWQYASABKAkiawoZU2NoZWR1bGVkUGxhbkFnZW50UG9vbER0bxIQCghzdHJhdGVneRgBIAEoCRI8CgZhZ2VudHMYAiADKAsyLC5oYWdpY29kZS5jb21tdW5pdHkudjEuU2NoZWR1bGVkUGxhbkFnZW50RHRvIuABCidTY2hlZHVsZWRQbGFuT2NjdXJyZW5jZU92ZXJyaWRlUmVzcG9uc2USKgoGcnVuX2F0GAEgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIRCgRuYW1lGAIgASgJSACIAQESRAoKYWdlbnRfcG9vbBgDIAEoCzIwLmhhZ2ljb2RlLmNvbW11bml0eS52MS5TY2hlZHVsZWRQbGFuQWdlbnRQb29sRHRvEicKB3BheWxvYWQYBCABKAsyFi5nb29nbGUucHJvdG9idWYuVmFsdWVCBwoFX25hbWUi4wEKHlNjaGVkdWxlZFBsYW5FeGNlcHRpb25SZXNwb25zZRIvCgtvcmlnaW5hbF9hdBgBIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASDAoEa2luZBgCIAEoCRJQCghvdmVycmlkZRgDIAEoCzI+LmhhZ2ljb2RlLmNvbW11bml0eS52MS5TY2hlZHVsZWRQbGFuT2NjdXJyZW5jZU92ZXJyaWRlUmVzcG9uc2USHAoPaW5wdXRfZmlsZV9wYXRoGAQgASgJSACIAQFCEgoQX2lucHV0X2ZpbGVfcGF0aCI4ChZTY2hlZHVsZWRQbGFuUmVwZWF0RHRvEgwKBHJ1bGUYASABKAkSEAoId2Vla2RheXMYAiADKAkiiAIKGlNjaGVkdWxlZFBsYW5RdW90YVJlc2V0RHRvEhMKBndpbmRvdxgBIAEoCUgAiAEBEiIKFW1pbl9yZW1haW5pbmdfcGVyY2VudBgCIAEoBUgBiAEBEiUKGG1heF9taW51dGVzX2JlZm9yZV9yZXNldBgDIAEoBUgCiAEBEigKG3JlcXVpcmVfbWFudWFsX2NvbmZpcm1hdGlvbhgEIAEoCEgDiAEBQgkKB193aW5kb3dCGAoWX21pbl9yZW1haW5pbmdfcGVyY2VudEIbChlfbWF4X21pbnV0ZXNfYmVmb3JlX3Jlc2V0Qh4KHF9yZXF1aXJlX21hbnVhbF9jb25maXJtYXRpb24i9wIKGFNjaGVkdWxlZFBsYW5TY2hlZHVsZUR0bxIMCgRtb2RlGAEgASgJEioKBnJ1bl9hdBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASFgoJdGltZV96b25lGAMgASgJSACIAQESFwoKc3RhcnRfZGF0ZRgEIAEoCUgBiAEBEhUKCGVuZF9kYXRlGAUgASgJSAKIAQESGAoLdGltZV9vZl9kYXkYBiABKAlIA4gBARI9CgZyZXBlYXQYByABKAsyLS5oYWdpY29kZS5jb21tdW5pdHkudjEuU2NoZWR1bGVkUGxhblJlcGVhdER0bxJGCgtxdW90YV9yZXNldBgIIAEoCzIxLmhhZ2ljb2RlLmNvbW11bml0eS52MS5TY2hlZHVsZWRQbGFuUXVvdGFSZXNldER0b0IMCgpfdGltZV96b25lQg0KC19zdGFydF9kYXRlQgsKCV9lbmRfZGF0ZUIOCgxfdGltZV9vZl9kYXki0AYKFVNjaGVkdWxlZFBsYW5SZXNwb25zZRIKCgJpZBgBIAEoCRIMCgR0eXBlGAIgASgJEg0KBXNjb3BlGAMgASgJEhIKCnByb2plY3RfaWQYBCABKAkSIQoUZGVmaW5pdGlvbl9maWxlX3BhdGgYBSABKAlIAIgBARIMCgRuYW1lGAYgASgJEg8KB2VuYWJsZWQYByABKAgSEQoEaWNvbhgIIAEoCUgBiAEBEhIKBWNvbG9yGAkgASgJSAKIAQESLgoKY3JlYXRlZF9hdBgKIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLgoKdXBkYXRlZF9hdBgLIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASQQoIc2NoZWR1bGUYDCABKAsyLy5oYWdpY29kZS5jb21tdW5pdHkudjEuU2NoZWR1bGVkUGxhblNjaGVkdWxlRHRvEkQKCmFnZW50X3Bvb2wYDSABKAsyMC5oYWdpY29kZS5jb21tdW5pdHkudjEuU2NoZWR1bGVkUGxhbkFnZW50UG9vbER0bxInCgdwYXlsb2FkGA4gASgLMhYuZ29vZ2xlLnByb3RvYnVmLlZhbHVlEg0KBXN0YXRlGA8gASgJEi8KC25leHRfcnVuX2F0GBAgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBJJCgpleGNlcHRpb25zGBEgAygLMjUuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlNjaGVkdWxlZFBsYW5FeGNlcHRpb25SZXNwb25zZRIcCg9pbnB1dF9maWxlX3BhdGgYEiABKAlIA4gBARI7ChdsYXN0X3RyaWdnZXJlZF9yZXNldF9hdBgTIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASWQoVcGVuZGluZ19xdW90YV90cmlnZ2VyGBQgASgLMjouaGFnaWNvZGUuY29tbXVuaXR5LnYxLlNjaGVkdWxlZFBsYW5QZW5kaW5nUXVvdGFUcmlnZ2VyRHRvQhcKFV9kZWZpbml0aW9uX2ZpbGVfcGF0aEIHCgVfaWNvbkIICgZfY29sb3JCEgoQX2lucHV0X2ZpbGVfcGF0aCKJAQojU2NoZWR1bGVkUGxhblBlbmRpbmdRdW90YVRyaWdnZXJEdG8SLQoJcmFpc2VkX2F0GAEgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIzCg93aW5kb3dfcmVzZXRfYXQYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIkcKIVNjaGVkdWxlZFBsYW5EZWZpbml0aW9uUHJvYmxlbUR0bxIRCglmaWxlX3BhdGgYASABKAkSDwoHbWVzc2FnZRgCIAEoCSLTAQofU2NoZWR1bGVkUGxhblJlY3VycmVuY2VSZXNwb25zZRIMCgRtb2RlGAEgASgJEhEKBHJ1bGUYAiABKAlIAIgBARIQCgh3ZWVrZGF5cxgDIAMoCRIXCgpzdGFydF9kYXRlGAQgASgJSAGIAQESFQoIZW5kX2RhdGUYBSABKAlIAogBARIYCgt0aW1lX29mX2RheRgGIAEoCUgDiAEBQgcKBV9ydWxlQg0KC19zdGFydF9kYXRlQgsKCV9lbmRfZGF0ZUIOCgxfdGltZV9vZl9kYXki6gMKH1NjaGVkdWxlZFBsYW5PY2N1cnJlbmNlUmVzcG9uc2USDwoHcGxhbl9pZBgBIAEoCRISCgpwcm9qZWN0X2lkGAIgASgJEjEKDW9jY3VycmVuY2VfYXQYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEgwKBG5hbWUYBCABKAkSDAoEdHlwZRgFIAEoCRIPCgdlbmFibGVkGAYgASgIEhEKBGljb24YByABKAlIAIgBARISCgVjb2xvchgIIAEoCUgBiAEBEg0KBXN0YXRlGAkgASgJEh8KEnNjaGVkdWxlX3RpbWVfem9uZRgKIAEoCUgCiAEBEkoKCnJlY3VycmVuY2UYCyABKAsyNi5oYWdpY29kZS5jb21tdW5pdHkudjEuU2NoZWR1bGVkUGxhblJlY3VycmVuY2VSZXNwb25zZRIvCgtuZXh0X3J1bl9hdBgMIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLwoLb3JpZ2luYWxfYXQYDSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEhMKC2lzX21vZGlmaWVkGA4gASgIQgcKBV9pY29uQggKBl9jb2xvckIVChNfc2NoZWR1bGVfdGltZV96b25lIpMCCiNTY2hlZHVsZWRQbGFuT2NjdXJyZW5jZVBhZ2VSZXNwb25zZRIvCgtyYW5nZV9zdGFydBgBIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLQoJcmFuZ2VfZW5kGAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIZChFkaXNwbGF5X3RpbWVfem9uZRgDIAEoCRJHCgdlbnRyaWVzGAQgAygLMjYuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlNjaGVkdWxlZFBsYW5PY2N1cnJlbmNlUmVzcG9uc2USGAoLbmV4dF9jdXJzb3IYBSABKAlIAIgBAUIOCgxfbmV4dF9jdXJzb3Ii0QIKGFNjaGVkdWxlZFBsYW5TYXZlUmVxdWVzdBIMCgR0eXBlGAEgASgJEhIKBXNjb3BlGAIgASgJSACIAQESDAoEbmFtZRgDIAEoCRIPCgdlbmFibGVkGAQgASgIEhEKBGljb24YBSABKAlIAYgBARISCgVjb2xvchgGIAEoCUgCiAEBEkEKCHNjaGVkdWxlGAcgASgLMi8uaGFnaWNvZGUuY29tbXVuaXR5LnYxLlNjaGVkdWxlZFBsYW5TY2hlZHVsZUR0bxJECgphZ2VudF9wb29sGAggASgLMjAuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlNjaGVkdWxlZFBsYW5BZ2VudFBvb2xEdG8SJwoHcGF5bG9hZBgJIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZUIICgZfc2NvcGVCBwoFX2ljb25CCAoGX2NvbG9yIo4CCiJTY2hlZHVsZWRQbGFuT2NjdXJyZW5jZUVkaXRSZXF1ZXN0EjEKDW9jY3VycmVuY2VfYXQYASABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEioKBnJ1bl9hdBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASEQoEbmFtZRgDIAEoCUgAiAEBEkQKCmFnZW50X3Bvb2wYBCABKAsyMC5oYWdpY29kZS5jb21tdW5pdHkudjEuU2NoZWR1bGVkUGxhbkFnZW50UG9vbER0bxInCgdwYXlsb2FkGAUgASgLMhYuZ29vZ2xlLnByb3RvYnVmLlZhbHVlQgcKBV9uYW1lIs4DChJDaGF0SGVyb1N1bW1hcnlEdG8SDwoHaGVyb19pZBgBIAEoCRIMCgRuYW1lGAIgASgJEhgKC2Rlc2NyaXB0aW9uGAMgASgJSACIAQESEQoEaWNvbhgEIAEoCUgBiAEBEhUKDWV4ZWN1dG9yX3R5cGUYBSABKAkSGQoMYWdlbnRfY2xpX2lkGAYgASgJSAKIAQESGwoOYWdlbnRfY2xpX25hbWUYByABKAlIA4gBARIbCg5hZ2VudF9jbGlfaWNvbhgIIAEoCUgEiAEBEhUKCG1vZGVsX2lkGAkgASgJSAWIAQESFwoKbW9kZWxfbmFtZRgKIAEoCUgGiAEBEhcKCm1vZGVsX2ljb24YCyABKAlIB4gBARIiChVzZWNvbmRhcnlfbW9kZWxfbGFiZWwYDCABKAlICIgBAUIOCgxfZGVzY3JpcHRpb25CBwoFX2ljb25CDwoNX2FnZW50X2NsaV9pZEIRCg9fYWdlbnRfY2xpX25hbWVCEQoPX2FnZW50X2NsaV9pY29uQgsKCV9tb2RlbF9pZEINCgtfbW9kZWxfbmFtZUINCgtfbW9kZWxfaWNvbkIYChZfc2Vjb25kYXJ5X21vZGVsX2xhYmVsIjgKFE9wZW5TcGVjVGFza1Byb2dyZXNzEhEKCWNvbXBsZXRlZBgBIAEoBRINCgV0b3RhbBgCIAEoBSKAAgoQT3BlblNwZWNGaWxlSW5mbxIRCglmaWxlX25hbWUYASABKAkSFQoNcmVsYXRpdmVfcGF0aBgCIAEoCRIOCgZleGlzdHMYAyABKAgSEQoJZmlsZV90eXBlGAQgASgJEhMKC2lzX3JlcXVpcmVkGAUgASgIEhMKC2lzX2FyY2hpdmVkGAYgASgIEjEKDWFyY2hpdmVkX2RhdGUYByABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEkIKDXRhc2tfcHJvZ3Jlc3MYCCABKAsyKy5oYWdpY29kZS5jb21tdW5pdHkudjEuT3BlblNwZWNUYXNrUHJvZ3Jlc3MiXgoRT3BlblNwZWNGaWxlc0luZm8SEQoJYmFzZV9wYXRoGAEgASgJEjYKBWZpbGVzGAIgAygLMicuaGFnaWNvZGUuY29tbXVuaXR5LnYxLk9wZW5TcGVjRmlsZUluZm8izAEKFlF1ZXVlTWVzc2FnZVN1bW1hcnlEdG8SDQoFaW5kZXgYASABKAUSDAoEbW9kZRgCIAEoBRItCglxdWV1ZWRfYXQYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEhcKD2NvbnRlbnRfcHJldmlldxgEIAEoCRIhChRleGVjdXRpb25fbWVzc2FnZV9pZBgFIAEoCUgAiAEBEhEKCWNhbl9zdGVlchgGIAEoCEIXChVfZXhlY3V0aW9uX21lc3NhZ2VfaWQigAEKFlNlc3Npb25Ob3RpZmljYXRpb25EdG8SDAoEa2luZBgBIAEoCRIvCgtvYnNlcnZlZF9hdBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASJwoHcGF5bG9hZBgDIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZSLtAQoWU2Vzc2lvblVzYWdlU3VtbWFyeUR0bxIaCg1wcm9tcHRfdG9rZW5zGAEgASgFSACIAQESIQoUY2FjaGVkX3Byb21wdF90b2tlbnMYAiABKAVIAYgBARIeChFjb21wbGV0aW9uX3Rva2VucxgDIAEoBUgCiAEBEjMKD2xhc3RfdXBkYXRlZF9hdBgEIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCEAoOX3Byb21wdF90b2tlbnNCFwoVX2NhY2hlZF9wcm9tcHRfdG9rZW5zQhQKEl9jb21wbGV0aW9uX3Rva2VucyJfChRTdGFnZUV4ZWN1dG9ySW5mb0R0bxIVCg1wcm92aWRlcl90eXBlGAEgASgJEjAKDGxhc3RfdXBkYXRlZBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAivAIKFVN0YWdlSGVyb1NlbGVjdGlvbkR0bxIRCglzdGFnZV9rZXkYASABKAkSEgoKc2NyaXB0X2tleRgCIAEoCRIVCg1zY2VuYXJpb19uYW1lGAMgASgJEhQKB2hlcm9faWQYBCABKAlIAIgBARIWCgloZXJvX25hbWUYBSABKAlIAYgBARIWCgloZXJvX2ljb24YBiABKAlIAogBARIVCg1leGVjdXRvcl90eXBlGAcgASgJEhUKDXVzZWRfZmFsbGJhY2sYCCABKAgSGAoQc2VsZWN0aW9uX3NvdXJjZRgJIAEoCRIvCgtzZWxlY3RlZF9hdBgKIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCCgoIX2hlcm9faWRCDAoKX2hlcm9fbmFtZUIMCgpfaGVyb19pY29uIrcLChJTZXNzaW9uUmVzcG9uc2VEdG8SEgoKc2Vzc2lvbl9pZBgBIAEoCRINCgV0aXRsZRgCIAEoCRIYCgtkZXNjcmlwdGlvbhgDIAEoCUgAiAEBEhwKD2NoaWVmX2NvbXBsYWludBgEIAEoCUgBiAEBEgwKBGNvZGUYBSABKAUSDAoEdHlwZRgGIAEoCRIOCgZzdGF0dXMYByABKAkSEQoJaXNfYWN0aXZlGAggASgIEjIKDmxhc3RfYWN0aXZlX2F0GAkgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBISCgpwcm9qZWN0X2lkGAogASgJEhQKDHByb2plY3RfbmFtZRgLIAEoCRIUCgxwcm9qZWN0X3BhdGgYDCABKAkSGgoNcHJvcG9zYWxfbmFtZRgNIAEoCUgCiAEBEkEKD29wZW5fc3BlY19maWxlcxgOIAEoCzIoLmhhZ2ljb2RlLmNvbW11bml0eS52MS5PcGVuU3BlY0ZpbGVzSW5mbxIdChVwZW5kaW5nX21lc3NhZ2VfY291bnQYDyABKAUSRQoOcXVldWVfbWVzc2FnZXMYECADKAsyLS5oYWdpY29kZS5jb21tdW5pdHkudjEuUXVldWVNZXNzYWdlU3VtbWFyeUR0bxIeChF3b3JraW5nX2RpcmVjdG9yeRgRIAEoCUgDiAEBEhUKCG1ldGFkYXRhGBIgASgJSASIAQESHwoSY2hhdF9leGVjdXRvcl90eXBlGBMgASgJSAWIAQESPAoJY2hhdF9oZXJvGBQgASgLMikuaGFnaWNvZGUuY29tbXVuaXR5LnYxLkNoYXRIZXJvU3VtbWFyeUR0bxJbChJzdGFnZV9leGVjdXRvcl9tYXAYFSADKAsyPy5oYWdpY29kZS5jb21tdW5pdHkudjEuU2Vzc2lvblJlc3BvbnNlRHRvLlN0YWdlRXhlY3V0b3JNYXBFbnRyeRJmChhzdGFnZV9oZXJvX3NlbGVjdGlvbl9tYXAYFiADKAsyRC5oYWdpY29kZS5jb21tdW5pdHkudjEuU2Vzc2lvblJlc3BvbnNlRHRvLlN0YWdlSGVyb1NlbGVjdGlvbk1hcEVudHJ5EiAKE3J1bnRpbWVfbW9kZWxfbGFiZWwYFyABKAlIBogBARI5ChVwcm9jZXNzaW5nX3N0YXJ0ZWRfYXQYGCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEkQKDXNlc3Npb25fdXNhZ2UYGSABKAsyLS5oYWdpY29kZS5jb21tdW5pdHkudjEuU2Vzc2lvblVzYWdlU3VtbWFyeUR0bxIcCg9wcmV2aW91c19zdGF0dXMYGiABKAlIB4gBARJECg1ub3RpZmljYXRpb25zGBsgAygLMi0uaGFnaWNvZGUuY29tbXVuaXR5LnYxLlNlc3Npb25Ob3RpZmljYXRpb25EdG8aZAoVU3RhZ2VFeGVjdXRvck1hcEVudHJ5EgsKA2tleRgBIAEoCRI6CgV2YWx1ZRgCIAEoCzIrLmhhZ2ljb2RlLmNvbW11bml0eS52MS5TdGFnZUV4ZWN1dG9ySW5mb0R0bzoCOAEaagoaU3RhZ2VIZXJvU2VsZWN0aW9uTWFwRW50cnkSCwoDa2V5GAEgASgJEjsKBXZhbHVlGAIgASgLMiwuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlN0YWdlSGVyb1NlbGVjdGlvbkR0bzoCOAFCDgoMX2Rlc2NyaXB0aW9uQhIKEF9jaGllZl9jb21wbGFpbnRCEAoOX3Byb3Bvc2FsX25hbWVCFAoSX3dvcmtpbmdfZGlyZWN0b3J5QgsKCV9tZXRhZGF0YUIVChNfY2hhdF9leGVjdXRvcl90eXBlQhYKFF9ydW50aW1lX21vZGVsX2xhYmVsQhIKEF9wcmV2aW91c19zdGF0dXMiLgobU2NoZWR1bGVkUGxhblJ1bkFjY2VwdGVkRHRvEg8KB3BsYW5faWQYASABKAkymQ4KFVNjaGVkdWxlZFBsYW5zU2VydmljZRJ5ChJMaXN0U2NoZWR1bGVkUGxhbnMSMC5oYWdpY29kZS5jb21tdW5pdHkudjEuTGlzdFNjaGVkdWxlZFBsYW5zUmVxdWVzdBoxLmhhZ2ljb2RlLmNvbW11bml0eS52MS5MaXN0U2NoZWR1bGVkUGxhbnNSZXNwb25zZRJzChBHZXRTY2hlZHVsZWRQbGFuEi4uaGFnaWNvZGUuY29tbXVuaXR5LnYxLkdldFNjaGVkdWxlZFBsYW5SZXF1ZXN0Gi8uaGFnaWNvZGUuY29tbXVuaXR5LnYxLkdldFNjaGVkdWxlZFBsYW5SZXNwb25zZRKOAQoZTGlzdFNjaGVkdWxlZFBsYW5Qcm9ibGVtcxI3LmhhZ2ljb2RlLmNvbW11bml0eS52MS5MaXN0U2NoZWR1bGVkUGxhblByb2JsZW1zUmVxdWVzdBo4LmhhZ2ljb2RlLmNvbW11bml0eS52MS5MaXN0U2NoZWR1bGVkUGxhblByb2JsZW1zUmVzcG9uc2USlwEKHExpc3RTY2hlZHVsZWRQbGFuT2NjdXJyZW5jZXMSOi5oYWdpY29kZS5jb21tdW5pdHkudjEuTGlzdFNjaGVkdWxlZFBsYW5PY2N1cnJlbmNlc1JlcXVlc3QaOy5oYWdpY29kZS5jb21tdW5pdHkudjEuTGlzdFNjaGVkdWxlZFBsYW5PY2N1cnJlbmNlc1Jlc3BvbnNlEnwKE0NyZWF0ZVNjaGVkdWxlZFBsYW4SMS5oYWdpY29kZS5jb21tdW5pdHkudjEuQ3JlYXRlU2NoZWR1bGVkUGxhblJlcXVlc3QaMi5oYWdpY29kZS5jb21tdW5pdHkudjEuQ3JlYXRlU2NoZWR1bGVkUGxhblJlc3BvbnNlEnwKE1VwZGF0ZVNjaGVkdWxlZFBsYW4SMS5oYWdpY29kZS5jb21tdW5pdHkudjEuVXBkYXRlU2NoZWR1bGVkUGxhblJlcXVlc3QaMi5oYWdpY29kZS5jb21tdW5pdHkudjEuVXBkYXRlU2NoZWR1bGVkUGxhblJlc3BvbnNlEnwKE0RlbGV0ZVNjaGVkdWxlZFBsYW4SMS5oYWdpY29kZS5jb21tdW5pdHkudjEuRGVsZXRlU2NoZWR1bGVkUGxhblJlcXVlc3QaMi5oYWdpY29kZS5jb21tdW5pdHkudjEuRGVsZXRlU2NoZWR1bGVkUGxhblJlc3BvbnNlEpQBChtFZGl0U2NoZWR1bGVkUGxhbk9jY3VycmVuY2USOS5oYWdpY29kZS5jb21tdW5pdHkudjEuRWRpdFNjaGVkdWxlZFBsYW5PY2N1cnJlbmNlUmVxdWVzdBo6LmhhZ2ljb2RlLmNvbW11bml0eS52MS5FZGl0U2NoZWR1bGVkUGxhbk9jY3VycmVuY2VSZXNwb25zZRKaAQodRGVsZXRlU2NoZWR1bGVkUGxhbk9jY3VycmVuY2USOy5oYWdpY29kZS5jb21tdW5pdHkudjEuRGVsZXRlU2NoZWR1bGVkUGxhbk9jY3VycmVuY2VSZXF1ZXN0GjwuaGFnaWNvZGUuY29tbXVuaXR5LnYxLkRlbGV0ZVNjaGVkdWxlZFBsYW5PY2N1cnJlbmNlUmVzcG9uc2UScwoQUnVuU2NoZWR1bGVkUGxhbhIuLmhhZ2ljb2RlLmNvbW11bml0eS52MS5SdW5TY2hlZHVsZWRQbGFuUmVxdWVzdBovLmhhZ2ljb2RlLmNvbW11bml0eS52MS5SdW5TY2hlZHVsZWRQbGFuUmVzcG9uc2USeQoSU3RhcnRTY2hlZHVsZWRQbGFuEjAuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlN0YXJ0U2NoZWR1bGVkUGxhblJlcXVlc3QaMS5oYWdpY29kZS5jb21tdW5pdHkudjEuU3RhcnRTY2hlZHVsZWRQbGFuUmVzcG9uc2USowEKIENvbmZpcm1TY2hlZHVsZWRQbGFuUXVvdGFUcmlnZ2VyEj4uaGFnaWNvZGUuY29tbXVuaXR5LnYxLkNvbmZpcm1TY2hlZHVsZWRQbGFuUXVvdGFUcmlnZ2VyUmVxdWVzdBo/LmhhZ2ljb2RlLmNvbW11bml0eS52MS5Db25maXJtU2NoZWR1bGVkUGxhblF1b3RhVHJpZ2dlclJlc3BvbnNlEqABCh9DYW5jZWxTY2hlZHVsZWRQbGFuUXVvdGFUcmlnZ2VyEj0uaGFnaWNvZGUuY29tbXVuaXR5LnYxLkNhbmNlbFNjaGVkdWxlZFBsYW5RdW90YVRyaWdnZXJSZXF1ZXN0Gj4uaGFnaWNvZGUuY29tbXVuaXR5LnYxLkNhbmNlbFNjaGVkdWxlZFBsYW5RdW90YVRyaWdnZXJSZXNwb25zZUIrqgIoUENvZGUuSHR0cEFwaS5HcnBjQ29udHJhY3RzLkNvbW11bml0eS5WMWIGcHJvdG8z",[Ue,Ne]),gh=v(Qe,1),ph=v(Qe,3),Ah=v(Qe,9),fh=v(Qe,11),Zh=v(Qe,19),Rh=v(Qe,21),Xr=v(Qe,39),Eh=We(Qe,0),Vh=oe("Ci1oYWdpY29kZS9jb21tdW5pdHkvdjEvY29tbXVuaXR5X3ByZXNldHMucHJvdG8SFWhhZ2ljb2RlLmNvbW11bml0eS52MSIdChtMaXN0Q29tbXVuaXR5UHJlc2V0c1JlcXVlc3QiYwocTGlzdENvbW11bml0eVByZXNldHNSZXNwb25zZRJDCgZyZXN1bHQYASABKAsyMy5oYWdpY29kZS5jb21tdW5pdHkudjEuTG9jYWxIYWdpVGFza0xpc3RSZXNwb25zZUR0byJmCh1JbnN0YWxsQ29tbXVuaXR5UHJlc2V0UmVxdWVzdBJFCgRib2R5GAEgASgLMjcuaGFnaWNvZGUuY29tbXVuaXR5LnYxLkNvbW11bml0eVByZXNldEluc3RhbGxSZXF1ZXN0RHRvImwKHkluc3RhbGxDb21tdW5pdHlQcmVzZXRSZXNwb25zZRJKCgZyZXN1bHQYASABKAsyOi5oYWdpY29kZS5jb21tdW5pdHkudjEuQ29tbXVuaXR5UHJlc2V0T3BlcmF0aW9uUmVzcG9uc2VEdG8ifAogU2V0Q29tbXVuaXR5UHJlc2V0RW5hYmxlZFJlcXVlc3QSEQoJcHJlc2V0X2lkGAEgASgJEkUKBGJvZHkYAiABKAsyNy5oYWdpY29kZS5jb21tdW5pdHkudjEuQ29tbXVuaXR5UHJlc2V0RW5hYmxlZFJlcXVlc3REdG8ibwohU2V0Q29tbXVuaXR5UHJlc2V0RW5hYmxlZFJlc3BvbnNlEkoKBnJlc3VsdBgBIAEoCzI6LmhhZ2ljb2RlLmNvbW11bml0eS52MS5Db21tdW5pdHlQcmVzZXRPcGVyYXRpb25SZXNwb25zZUR0byI0Ch9Vbmluc3RhbGxDb21tdW5pdHlQcmVzZXRSZXF1ZXN0EhEKCXByZXNldF9pZBgBIAEoCSJuCiBVbmluc3RhbGxDb21tdW5pdHlQcmVzZXRSZXNwb25zZRJKCgZyZXN1bHQYASABKAsyOi5oYWdpY29kZS5jb21tdW5pdHkudjEuQ29tbXVuaXR5UHJlc2V0T3BlcmF0aW9uUmVzcG9uc2VEdG8iIAoeUmVmcmVzaENvbW11bml0eVByZXNldHNSZXF1ZXN0IiEKH1JlZnJlc2hDb21tdW5pdHlQcmVzZXRzUmVzcG9uc2UihwEKFkNvbW11bml0eVByZXNldFJpc2tEdG8SGQoRZGVjbGFyZXNfY29tbWFuZHMYASABKAgSFwoPZGVjbGFyZXNfc2tpbGxzGAIgASgIEhYKDmRlY2xhcmVzX2hvb2tzGAMgASgIEiEKGWRlY2xhcmVzX2NsaV9yZXF1aXJlbWVudHMYBCABKAgi2QQKGExvY2FsSGFnaVRhc2tMaXN0SXRlbUR0bxIRCglwcmVzZXRfaWQYASABKAkSFAoMZGlzcGxheV9uYW1lGAIgASgJEg8KB3ZlcnNpb24YAyABKAkSEwoLc291cmNlX2tpbmQYBCABKAkSGQoRaW5zdGFsbGF0aW9uX2tpbmQYBSABKAkSFwoPbWFuYWdlbWVudF9raW5kGAYgASgJEiAKGGlzX3Nlc3Npb25fY3JlYXRpb25fb25seRgHIAEoCBIPCgdlbmFibGVkGAggASgIEhQKDGlzX3JlbW92YWJsZRgJIAEoCBIRCglwdWJsaXNoZXIYCiABKAkSHQoQc291cmNlX3JlZmVyZW5jZRgLIAEoCUgAiAEBEhsKDmFyY2hpdmVfc2hhMjU2GAwgASgJSAGIAQESNAoQaW5zdGFsbGVkX2F0X3V0YxgNIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASGgoScmVsYXRpdmVfZGlyZWN0b3J5GA4gASgJEhgKC2Rlc2NyaXB0aW9uGA8gASgJSAKIAQESPAoFcmlza3MYECABKAsyLS5oYWdpY29kZS5jb21tdW5pdHkudjEuQ29tbXVuaXR5UHJlc2V0Umlza0R0bxIWCglzb3VyY2VfaWQYESABKAlIA4gBARIRCgRpY29uGBIgASgJSASIAQFCEwoRX3NvdXJjZV9yZWZlcmVuY2VCEQoPX2FyY2hpdmVfc2hhMjU2Qg4KDF9kZXNjcmlwdGlvbkIMCgpfc291cmNlX2lkQgcKBV9pY29uIloKHVByZXNldFRhc2tQbHVnaW5EaWFnbm9zdGljRHRvEgwKBGNvZGUYASABKAkSDwoHbWVzc2FnZRgCIAEoCRIRCgRwYXRoGAMgASgJSACIAQFCBwoFX3BhdGgiqQEKHExvY2FsSGFnaVRhc2tMaXN0UmVzcG9uc2VEdG8SPgoFaXRlbXMYASADKAsyLy5oYWdpY29kZS5jb21tdW5pdHkudjEuTG9jYWxIYWdpVGFza0xpc3RJdGVtRHRvEkkKC2RpYWdub3N0aWNzGAIgAygLMjQuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlByZXNldFRhc2tQbHVnaW5EaWFnbm9zdGljRHRvIqwDCh5Db21tdW5pdHlQcmVzZXRJbnN0YWxsYXRpb25EdG8SEQoJcHJlc2V0X2lkGAEgASgJEhYKCW5hbWVzcGFjZRgCIAEoCUgAiAEBEg8KB3ZlcnNpb24YAyABKAkSEQoJcHVibGlzaGVyGAQgASgJEh0KEHNvdXJjZV9yZWZlcmVuY2UYBSABKAlIAYgBARIWCg5hcmNoaXZlX3NoYTI1NhgGIAEoCRI0ChBpbnN0YWxsZWRfYXRfdXRjGAcgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIaChJyZWxhdGl2ZV9kaXJlY3RvcnkYCCABKAkSDwoHZW5hYmxlZBgJIAEoCBI8CgVyaXNrcxgKIAEoCzItLmhhZ2ljb2RlLmNvbW11bml0eS52MS5Db21tdW5pdHlQcmVzZXRSaXNrRHRvEhYKCXNvdXJjZV9pZBgLIAEoCUgCiAEBEhEKBGljb24YDCABKAlIA4gBAUIMCgpfbmFtZXNwYWNlQhMKEV9zb3VyY2VfcmVmZXJlbmNlQgwKCl9zb3VyY2VfaWRCBwoFX2ljb24ilAIKI0NvbW11bml0eVByZXNldE9wZXJhdGlvblJlc3BvbnNlRHRvEhEKCXN1Y2NlZWRlZBgBIAEoCBIWCglwcmVzZXRfaWQYAiABKAlIAIgBARISCgVlcnJvchgDIAEoCUgBiAEBEksKDGluc3RhbGxhdGlvbhgEIAEoCzI1LmhhZ2ljb2RlLmNvbW11bml0eS52MS5Db21tdW5pdHlQcmVzZXRJbnN0YWxsYXRpb25EdG8SSQoLZGlhZ25vc3RpY3MYBSADKAsyNC5oYWdpY29kZS5jb21tdW5pdHkudjEuUHJlc2V0VGFza1BsdWdpbkRpYWdub3N0aWNEdG9CDAoKX3ByZXNldF9pZEIICgZfZXJyb3IisgIKIENvbW11bml0eVByZXNldEluc3RhbGxSZXF1ZXN0RHRvEhYKDmFyY2hpdmVfYmFzZTY0GAEgASgJEh8KEmV4cGVjdGVkX3ByZXNldF9pZBgCIAEoCUgAiAEBEh0KEGV4cGVjdGVkX3ZlcnNpb24YAyABKAlIAYgBARIcCg9leHBlY3RlZF9zaGEyNTYYBCABKAlIAogBARIWCglwdWJsaXNoZXIYBSABKAlIA4gBARIdChBzb3VyY2VfcmVmZXJlbmNlGAYgASgJSASIAQFCFQoTX2V4cGVjdGVkX3ByZXNldF9pZEITChFfZXhwZWN0ZWRfdmVyc2lvbkISChBfZXhwZWN0ZWRfc2hhMjU2QgwKCl9wdWJsaXNoZXJCEwoRX3NvdXJjZV9yZWZlcmVuY2UiMwogQ29tbXVuaXR5UHJlc2V0RW5hYmxlZFJlcXVlc3REdG8SDwoHZW5hYmxlZBgBIAEoCDLMBQoXQ29tbXVuaXR5UHJlc2V0c1NlcnZpY2USfwoUTGlzdENvbW11bml0eVByZXNldHMSMi5oYWdpY29kZS5jb21tdW5pdHkudjEuTGlzdENvbW11bml0eVByZXNldHNSZXF1ZXN0GjMuaGFnaWNvZGUuY29tbXVuaXR5LnYxLkxpc3RDb21tdW5pdHlQcmVzZXRzUmVzcG9uc2UShQEKFkluc3RhbGxDb21tdW5pdHlQcmVzZXQSNC5oYWdpY29kZS5jb21tdW5pdHkudjEuSW5zdGFsbENvbW11bml0eVByZXNldFJlcXVlc3QaNS5oYWdpY29kZS5jb21tdW5pdHkudjEuSW5zdGFsbENvbW11bml0eVByZXNldFJlc3BvbnNlEo4BChlTZXRDb21tdW5pdHlQcmVzZXRFbmFibGVkEjcuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlNldENvbW11bml0eVByZXNldEVuYWJsZWRSZXF1ZXN0GjguaGFnaWNvZGUuY29tbXVuaXR5LnYxLlNldENvbW11bml0eVByZXNldEVuYWJsZWRSZXNwb25zZRKLAQoYVW5pbnN0YWxsQ29tbXVuaXR5UHJlc2V0EjYuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlVuaW5zdGFsbENvbW11bml0eVByZXNldFJlcXVlc3QaNy5oYWdpY29kZS5jb21tdW5pdHkudjEuVW5pbnN0YWxsQ29tbXVuaXR5UHJlc2V0UmVzcG9uc2USiAEKF1JlZnJlc2hDb21tdW5pdHlQcmVzZXRzEjUuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlJlZnJlc2hDb21tdW5pdHlQcmVzZXRzUmVxdWVzdBo2LmhhZ2ljb2RlLmNvbW11bml0eS52MS5SZWZyZXNoQ29tbXVuaXR5UHJlc2V0c1Jlc3BvbnNlQiuqAihQQ29kZS5IdHRwQXBpLkdycGNDb250cmFjdHMuQ29tbXVuaXR5LlYxYgZwcm90bzM",[Ne]),_o=oe("CihoYWdpY29kZS9jb21tdW5pdHkvdjEvcHJlc2V0X3Rhc2tzLnByb3RvEhVoYWdpY29kZS5jb21tdW5pdHkudjEiHQobR2V0UHJlc2V0VGFza0NhdGFsb2dSZXF1ZXN0ImMKHEdldFByZXNldFRhc2tDYXRhbG9nUmVzcG9uc2USQwoGcmVzdWx0GAEgASgLMjMuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlByZXNldFRhc2tDYXRhbG9nUmVzcG9uc2VEdG8ibwoiQ2hlY2tQcmVzZXRUYXNrUmVxdWlyZW1lbnRzUmVxdWVzdBJJCgRib2R5GAEgASgLMjsuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlByZXNldFRhc2tSZXF1aXJlbWVudENoZWNrUmVxdWVzdER0byJzCiNDaGVja1ByZXNldFRhc2tSZXF1aXJlbWVudHNSZXNwb25zZRJMCgZyZXN1bHQYASABKAsyPC5oYWdpY29kZS5jb21tdW5pdHkudjEuUHJlc2V0VGFza1JlcXVpcmVtZW50Q2hlY2tSZXNwb25zZUR0byIeChxMaXN0UHJlc2V0VGFza1NjaGVtYXNSZXF1ZXN0ImIKHUxpc3RQcmVzZXRUYXNrU2NoZW1hc1Jlc3BvbnNlEkEKBnJlc3VsdBgBIAMoCzIxLmhhZ2ljb2RlLmNvbW11bml0eS52MS5QcmVzZXRUYXNrU2NoZW1hU3VtbWFyeUR0byI0ChpHZXRQcmVzZXRUYXNrU2NoZW1hUmVxdWVzdBIWCg5wcmVzZXRfdGFza19pZBgBIAEoCSJhChtHZXRQcmVzZXRUYXNrU2NoZW1hUmVzcG9uc2USQgoGcmVzdWx0GAEgASgLMjIuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlByZXNldFRhc2tDcmVhdGlvblNjaGVtYUR0byLKAQogUHJlc2V0VGFza0NhdGFsb2dEaXNhYmxlZEl0ZW1EdG8SCgoCaWQYASABKAkSEAoIZ3JvdXBfaWQYAiABKAkSEwoLc291cmNlX2tpbmQYAyABKAkSDgoGc3RhdHVzGAQgASgJEhgKEHBsdWdpbl9yb290X3BhdGgYBSABKAkSSQoLZGlhZ25vc3RpY3MYBiADKAsyNC5oYWdpY29kZS5jb21tdW5pdHkudjEuUHJlc2V0VGFza1BsdWdpbkRpYWdub3N0aWNEdG8iPQodUHJlc2V0VGFza0FnZW50UmVxdWlyZW1lbnREdG8SDAoEbW9kZRgBIAEoCRIOCgZhZ2VudHMYAiADKAki6gEKFFByZXNldFRhc2tDb21tYW5kRHRvEgoKAmlkGAEgASgJEhAKCGdyb3VwX2lkGAIgASgJEg0KBWxhYmVsGAMgASgJEhMKC2Rlc2NyaXB0aW9uGAQgASgJEhIKBXNraWxsGAUgASgJSACIAQESEAoDdXJsGAYgASgJSAGIAQESFgoJZG9jc19zbHVnGAcgASgJSAKIAQESHQoQcHJlbHVkZV90ZW1wbGF0ZRgIIAEoCUgDiAEBQggKBl9za2lsbEIGCgRfdXJsQgwKCl9kb2NzX3NsdWdCEwoRX3ByZWx1ZGVfdGVtcGxhdGUiNgoZUHJlc2V0VGFza0NvbW1hbmRHcm91cER0bxIKCgJpZBgBIAEoCRINCgV0aXRsZRgCIAEoCSLMAQobUHJlc2V0VGFza0NvbW1hbmRDYXRhbG9nRHRvEhQKDHBhcmFtZXRlcl9pZBgBIAEoCRIWCg5zZWxlY3Rpb25fbW9kZRgCIAEoCRJACgZncm91cHMYAyADKAsyMC5oYWdpY29kZS5jb21tdW5pdHkudjEuUHJlc2V0VGFza0NvbW1hbmRHcm91cER0bxI9Cghjb21tYW5kcxgEIAMoCzIrLmhhZ2ljb2RlLmNvbW11bml0eS52MS5QcmVzZXRUYXNrQ29tbWFuZER0byJWChpQcmVzZXRUYXNrQ29tcGF0aWJpbGl0eUR0bxIOCgZsZWdhY3kYASABKAkSDwoHYmluZGluZxgCIAEoCRIXCg9kaWFnbm9zdGljX2NvZGUYAyABKAkidAoWUHJlc2V0VGFza0V4ZWN1dGlvbkR0bxIWCg5zY2hlbWFfdmVyc2lvbhgBIAEoCRIQCghzdHJhdGVneRgCIAEoCRIcCg9leHRlbnNpb25fcG9pbnQYAyABKAlIAIgBAUISChBfZXh0ZW5zaW9uX3BvaW50Ip8CChlQcmVzZXRUYXNrSW5wdXRCaW5kaW5nRHRvEg0KBWlucHV0GAEgASgJEh0KEHByb21wdF9wYXJhbWV0ZXIYAiABKAlIAIgBARIZCgxtZXRhZGF0YV9rZXkYAyABKAlIAYgBARIQCghyZXF1aXJlZBgEIAEoCBIVCghwcm9kdWNlchgFIAEoCUgCiAEBEhcKCnZhbHVlX3R5cGUYBiABKAlIA4gBARIWCgl0cmFuc2Zvcm0YByABKAlIBIgBARIPCgdhbGlhc2VzGAggAygJQhMKEV9wcm9tcHRfcGFyYW1ldGVyQg8KDV9tZXRhZGF0YV9rZXlCCwoJX3Byb2R1Y2VyQg0KC192YWx1ZV90eXBlQgwKCl90cmFuc2Zvcm0iOAoYUHJlc2V0VGFza0ZpZWxkT3B0aW9uRHRvEg0KBXZhbHVlGAEgASgJEg0KBWxhYmVsGAIgASgJIt4DCiBQcmVzZXRUYXNrRmllbGRDb21wb25lbnRQcm9wc0R0bxIgChN0YXJnZXRfc2VsZWN0aW9uX2lkGAEgASgJSACIAQESFwoKZW1wdHlfdGV4dBgCIAEoCUgBiAEBEiMKFmFsbG93X291dHB1dF9zZWxlY3Rpb24YAyABKAhIAogBARIlChhyZXF1aXJlX291dHB1dF9zZWxlY3Rpb24YBCABKAhIA4gBARIYCgtlbXB0eV90aXRsZRgFIAEoCUgEiAEBEh4KEWVtcHR5X2Rlc2NyaXB0aW9uGAYgASgJSAWIAQESHQoQcmVxdWlyZWRfbWVzc2FnZRgHIAEoCUgGiAEBEkAKB29wdGlvbnMYCCADKAsyLy5oYWdpY29kZS5jb21tdW5pdHkudjEuUHJlc2V0VGFza0ZpZWxkT3B0aW9uRHRvQhYKFF90YXJnZXRfc2VsZWN0aW9uX2lkQg0KC19lbXB0eV90ZXh0QhkKF19hbGxvd19vdXRwdXRfc2VsZWN0aW9uQhsKGV9yZXF1aXJlX291dHB1dF9zZWxlY3Rpb25CDgoMX2VtcHR5X3RpdGxlQhQKEl9lbXB0eV9kZXNjcmlwdGlvbkITChFfcmVxdWlyZWRfbWVzc2FnZSL3AgoXUHJlc2V0VGFza1BhbmVsRmllbGREdG8SCgoCaWQYASABKAkSEAoIcmVuZGVyZXIYAiABKAkSEgoKaW5wdXRfdHlwZRgDIAEoCRISCgp2YWx1ZV90eXBlGAQgASgJEhIKBWxhYmVsGAUgASgJSACIAQESEQoEaGludBgGIAEoCUgBiAEBEhgKC3BsYWNlaG9sZGVyGAcgASgJSAKIAQESEAoIcmVxdWlyZWQYCCABKAgSEwoGb3V0cHV0GAkgASgJSAOIAQESGwoOc2VsZWN0aW9uX21vZGUYCiABKAlIBIgBARJQCg9jb21wb25lbnRfcHJvcHMYCyABKAsyNy5oYWdpY29kZS5jb21tdW5pdHkudjEuUHJlc2V0VGFza0ZpZWxkQ29tcG9uZW50UHJvcHNEdG9CCAoGX2xhYmVsQgcKBV9oaW50Qg4KDF9wbGFjZWhvbGRlckIJCgdfb3V0cHV0QhEKD19zZWxlY3Rpb25fbW9kZSJ3ChlQcmVzZXRUYXNrUGFuZWxTZWN0aW9uRHRvEgoKAmlkGAEgASgJEg4KBmxheW91dBgCIAEoCRI+CgZmaWVsZHMYAyADKAsyLi5oYWdpY29kZS5jb21tdW5pdHkudjEuUHJlc2V0VGFza1BhbmVsRmllbGREdG8iyQEKIVByZXNldFRhc2tQcm9tcHRWYXJpYW50U3VtbWFyeUR0bxIKCgJpZBgBIAEoCRJSCgVtYXRjaBgCIAMoCzJDLmhhZ2ljb2RlLmNvbW11bml0eS52MS5QcmVzZXRUYXNrUHJvbXB0VmFyaWFudFN1bW1hcnlEdG8uTWF0Y2hFbnRyeRpECgpNYXRjaEVudHJ5EgsKA2tleRgBIAEoCRIlCgV2YWx1ZRgCIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZToCOAEi/gEKIlByZXNldFRhc2tQcm9tcHRTdHJhdGVneVN1bW1hcnlEdG8SDAoEdHlwZRgBIAEoCRIWCg5kZWZhdWx0X2xvY2FsZRgCIAEoCRIZChFzdXBwb3J0ZWRfbG9jYWxlcxgDIAMoCRIRCglzZWxlY3RvcnMYBCADKAkSSgoIdmFyaWFudHMYBSADKAsyOC5oYWdpY29kZS5jb21tdW5pdHkudjEuUHJlc2V0VGFza1Byb21wdFZhcmlhbnRTdW1tYXJ5RHRvEiAKE2ZhbGxiYWNrX3ZhcmlhbnRfaWQYBiABKAlIAIgBAUIWChRfZmFsbGJhY2tfdmFyaWFudF9pZCJFChhQcmVzZXRUYXNrUmVxdWlyZW1lbnREdG8SDAoEdHlwZRgBIAEoCRIMCgRuYW1lGAIgASgJEg0KBW5hbWVzGAMgAygJIqoDCh5QcmVzZXRUYXNrU2NlbmVSZWdpc3RyYXRpb25EdG8SEQoJc2NlbmVfa2V5GAEgASgJEg0KBXRpdGxlGAIgASgJEg8KB3N1bW1hcnkYAyABKAkSYQoPdGl0bGVfYnlfbG9jYWxlGAQgAygLMkguaGFnaWNvZGUuY29tbXVuaXR5LnYxLlByZXNldFRhc2tTY2VuZVJlZ2lzdHJhdGlvbkR0by5UaXRsZUJ5TG9jYWxlRW50cnkSZQoRc3VtbWFyeV9ieV9sb2NhbGUYBSADKAsySi5oYWdpY29kZS5jb21tdW5pdHkudjEuUHJlc2V0VGFza1NjZW5lUmVnaXN0cmF0aW9uRHRvLlN1bW1hcnlCeUxvY2FsZUVudHJ5Eh0KFWJhY2tncm91bmRfaW1hZ2Vfc2xvdBgGIAEoBRo0ChJUaXRsZUJ5TG9jYWxlRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ARo2ChRTdW1tYXJ5QnlMb2NhbGVFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBIo8BChJQcmVzZXRUYXNrU2NlbmVEdG8SEAoIcHJvdmlkZXIYASABKAkSGQoRZGVmYXVsdF9zY2VuZV9rZXkYAiABKAkSTAoNcmVnaXN0cmF0aW9ucxgDIAMoCzI1LmhhZ2ljb2RlLmNvbW11bml0eS52MS5QcmVzZXRUYXNrU2NlbmVSZWdpc3RyYXRpb25EdG8ivAEKHFByZXNldFRhc2tUYXJnZXRTZWxlY3Rpb25EdG8SCgoCaWQYASABKAkSDAoEa2luZBgCIAEoCRIWCg5zZWxlY3Rpb25fbW9kZRgDIAEoCRIcChRhbGxvd2VkX2FjY2Vzc190eXBlcxgEIAMoCRIOCgZvdXRwdXQYBSABKAkSGQoMc2NvcGVfc291cmNlGAYgASgJSACIAQESEAoIcmVxdWlyZWQYByABKAhCDwoNX3Njb3BlX3NvdXJjZSKBCQoYUHJlc2V0VGFza0NhdGFsb2dJdGVtRHRvEgoKAmlkGAEgASgJEhAKCGdyb3VwX2lkGAIgASgJEhMKC3NvdXJjZV9raW5kGAMgASgJEg8KB3ZlcnNpb24YBCABKAkSEQoEaWNvbhgFIAEoCUgAiAEBEhQKDGRpc3BsYXlfbmFtZRgGIAEoCRINCgV0aXRsZRgHIAEoCRITCgtkZXNjcmlwdGlvbhgIIAEoCRIVCg1kZWZhdWx0X3RpdGxlGAkgASgJEhQKDHN1Ym1pdF9sYWJlbBgKIAEoCRIYChBzdWJtaXR0aW5nX2xhYmVsGAsgASgJEhsKE2RlZmF1bHRfdGFyZ2V0X3R5cGUYDCABKAkSGwoTYWxsb3dfaGVyb19vdmVycmlkZRgNIAEoCBISCgpzb3J0X29yZGVyGA4gASgFEhkKEXN1cHBvcnRlZF9sb2NhbGVzGA8gAygJEkIKCHNlY3Rpb25zGBAgAygLMjAuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlByZXNldFRhc2tQYW5lbFNlY3Rpb25EdG8SSwoPY29tbWFuZF9jYXRhbG9nGBEgASgLMjIuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlByZXNldFRhc2tDb21tYW5kQ2F0YWxvZ0R0bxJOChF0YXJnZXRfc2VsZWN0aW9ucxgSIAMoCzIzLmhhZ2ljb2RlLmNvbW11bml0eS52MS5QcmVzZXRUYXNrVGFyZ2V0U2VsZWN0aW9uRHRvEk8KEWFnZW50X3JlcXVpcmVtZW50GBMgASgLMjQuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlByZXNldFRhc2tBZ2VudFJlcXVpcmVtZW50RHRvEkUKDHJlcXVpcmVtZW50cxgUIAMoCzIvLmhhZ2ljb2RlLmNvbW11bml0eS52MS5QcmVzZXRUYXNrUmVxdWlyZW1lbnREdG8SUgoPcHJvbXB0X3N0cmF0ZWd5GBUgASgLMjkuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlByZXNldFRhc2tQcm9tcHRTdHJhdGVneVN1bW1hcnlEdG8SQAoJZXhlY3V0aW9uGBYgASgLMi0uaGFnaWNvZGUuY29tbXVuaXR5LnYxLlByZXNldFRhc2tFeGVjdXRpb25EdG8SSAoNY29tcGF0aWJpbGl0eRgXIAMoCzIxLmhhZ2ljb2RlLmNvbW11bml0eS52MS5QcmVzZXRUYXNrQ29tcGF0aWJpbGl0eUR0bxJICg5pbnB1dF9iaW5kaW5ncxgYIAMoCzIwLmhhZ2ljb2RlLmNvbW11bml0eS52MS5QcmVzZXRUYXNrSW5wdXRCaW5kaW5nRHRvEjgKBXNjZW5lGBkgASgLMikuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlByZXNldFRhc2tTY2VuZUR0bxIjChZzZXJ2ZXJfZGVjaWRlZF9oZXJvX2lkGBogASgJSAGIAQFCBwoFX2ljb25CGQoXX3NlcnZlcl9kZWNpZGVkX2hlcm9faWQirwEKHFByZXNldFRhc2tDYXRhbG9nUmVzcG9uc2VEdG8SPgoFaXRlbXMYASADKAsyLy5oYWdpY29kZS5jb21tdW5pdHkudjEuUHJlc2V0VGFza0NhdGFsb2dJdGVtRHRvEk8KDmRpc2FibGVkX2l0ZW1zGAIgAygLMjcuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlByZXNldFRhc2tDYXRhbG9nRGlzYWJsZWRJdGVtRHRvIkgKJ1ByZXNldFRhc2tSZXF1aXJlbWVudENoZWNrRGlhZ25vc3RpY0R0bxIMCgRjb2RlGAEgASgJEg8KB21lc3NhZ2UYAiABKAkitQEKIVByZXNldFRhc2tSZXF1aXJlbWVudENoZWNrSXRlbUR0bxIMCgR0eXBlGAEgASgJEgwKBG5hbWUYAiABKAkSDgoGcGFzc2VkGAMgASgIEg8KB21lc3NhZ2UYBCABKAkSUwoLZGlhZ25vc3RpY3MYBSADKAsyPi5oYWdpY29kZS5jb21tdW5pdHkudjEuUHJlc2V0VGFza1JlcXVpcmVtZW50Q2hlY2tEaWFnbm9zdGljRHRvIqMBCiVQcmVzZXRUYXNrUmVxdWlyZW1lbnRDaGVja1Jlc3BvbnNlRHRvEhYKDnByZXNldF90YXNrX2lkGAEgASgJEhIKCmFsbF9wYXNzZWQYAiABKAgSTgoMcmVxdWlyZW1lbnRzGAMgAygLMjguaGFnaWNvZGUuY29tbXVuaXR5LnYxLlByZXNldFRhc2tSZXF1aXJlbWVudENoZWNrSXRlbUR0byI+CiRQcmVzZXRUYXNrUmVxdWlyZW1lbnRDaGVja1JlcXVlc3REdG8SFgoOcHJlc2V0X3Rhc2tfaWQYASABKAkiygEKGlByZXNldFRhc2tTY2hlbWFTdW1tYXJ5RHRvEgoKAmlkGAEgASgJEhAKCGdyb3VwX2lkGAIgASgJEhMKC3NvdXJjZV9raW5kGAMgASgJEg8KB3ZlcnNpb24YBCABKAkSDQoFdGl0bGUYBSABKAkSEwoLZGVzY3JpcHRpb24YBiABKAkSFAoMdGFyZ2V0X2NvdW50GAcgASgFEhUKDWNvbW1hbmRfY291bnQYCCABKAUSFwoPcGFyYW1ldGVyX2NvdW50GAkgASgFIngKGlByZXNldFRhc2tTY2hlbWFDb21tYW5kRHRvEgoKAmlkGAEgASgJEhAKCGdyb3VwX2lkGAIgASgJEg0KBWxhYmVsGAMgASgJEhMKC2Rlc2NyaXB0aW9uGAQgASgJEhAKA3VybBgFIAEoCUgAiAEBQgYKBF91cmwi0gEKG1ByZXNldFRhc2tTY2hlbWFDb21tYW5kc0R0bxIUCgxwYXJhbWV0ZXJfaWQYASABKAkSFgoOc2VsZWN0aW9uX21vZGUYAiABKAkSQAoGZ3JvdXBzGAMgAygLMjAuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlByZXNldFRhc2tDb21tYW5kR3JvdXBEdG8SQwoIY29tbWFuZHMYBCADKAsyMS5oYWdpY29kZS5jb21tdW5pdHkudjEuUHJlc2V0VGFza1NjaGVtYUNvbW1hbmREdG8iOwoYUHJlc2V0VGFza1NjaGVtYUFsaWFzRHRvEgsKA2tleRgBIAEoCRISCgpkZXByZWNhdGVkGAIgASgIIrQCChxQcmVzZXRUYXNrU2NoZW1hUGFyYW1ldGVyRHRvEgsKA2tleRgBIAEoCRIOCgZvcmlnaW4YAiABKAkSFQoIcHJvZHVjZXIYAyABKAlIAIgBARISCgp2YWx1ZV90eXBlGAQgASgJEhAKCHJlcXVpcmVkGAUgASgIEg0KBWxhYmVsGAYgASgJEhEKBGhpbnQYByABKAlIAYgBARJACgdvcHRpb25zGAggAygLMi8uaGFnaWNvZGUuY29tbXVuaXR5LnYxLlByZXNldFRhc2tGaWVsZE9wdGlvbkR0bxJACgdhbGlhc2VzGAkgAygLMi8uaGFnaWNvZGUuY29tbXVuaXR5LnYxLlByZXNldFRhc2tTY2hlbWFBbGlhc0R0b0ILCglfcHJvZHVjZXJCBwoFX2hpbnQihwEKGlByZXNldFRhc2tTY2hlbWFSZXF1ZXN0RHRvEg4KBm1ldGhvZBgBIAEoCRIMCgRwYXRoGAIgASgJEhwKFHByZXNldF90YXNrX2lkX2ZpZWxkGAMgASgJEhQKDGxvY2FsZV9maWVsZBgEIAEoCRIXCg9yZXF1aXJlZF9maWVsZHMYBSADKAkieAokUHJlc2V0VGFza1NjaGVtYVNjZW5lUmVnaXN0cmF0aW9uRHRvEhEKCXNjZW5lX2tleRgBIAEoCRINCgV0aXRsZRgCIAEoCRIPCgdzdW1tYXJ5GAMgASgJEh0KFWJhY2tncm91bmRfaW1hZ2Vfc2xvdBgEIAEoBSKcAQoZUHJlc2V0VGFza1NjaGVtYVNjZW5lc0R0bxIQCghwcm92aWRlchgBIAEoCRIZChFkZWZhdWx0X3NjZW5lX2tleRgCIAEoCRJSCg1yZWdpc3RyYXRpb25zGAMgAygLMjsuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlByZXNldFRhc2tTY2hlbWFTY2VuZVJlZ2lzdHJhdGlvbkR0byL0AQoZUHJlc2V0VGFza1NjaGVtYVRhcmdldER0bxIKCgJpZBgBIAEoCRIMCgRraW5kGAIgASgJEhYKDnNlbGVjdGlvbl9tb2RlGAMgASgJEhAKCHJlcXVpcmVkGAQgASgIEhwKFGFsbG93ZWRfYWNjZXNzX3R5cGVzGAUgAygJEhkKDHNjb3BlX3NvdXJjZRgGIAEoCUgAiAEBEhMKC3JlcXVlc3Rfa2V5GAcgASgJEh4KEXNjb3BlX3JlcXVlc3Rfa2V5GAggASgJSAGIAQFCDwoNX3Njb3BlX3NvdXJjZUIUChJfc2NvcGVfcmVxdWVzdF9rZXkiegoYUHJlc2V0VGFza1NjaGVtYVNjb3BlRHRvEhsKE2RlZmF1bHRfdGFyZ2V0X3R5cGUYASABKAkSQQoHdGFyZ2V0cxgCIAMoCzIwLmhhZ2ljb2RlLmNvbW11bml0eS52MS5QcmVzZXRUYXNrU2NoZW1hVGFyZ2V0RHRvIuMEChtQcmVzZXRUYXNrQ3JlYXRpb25TY2hlbWFEdG8SCgoCaWQYASABKAkSDwoHdmVyc2lvbhgCIAEoCRIOCgZsb2NhbGUYAyABKAkSDQoFdGl0bGUYBCABKAkSEwoLZGVzY3JpcHRpb24YBSABKAkSPgoFc2NvcGUYBiABKAsyLy5oYWdpY29kZS5jb21tdW5pdHkudjEuUHJlc2V0VGFza1NjaGVtYVNjb3BlRHRvEkQKCGNvbW1hbmRzGAcgASgLMjIuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlByZXNldFRhc2tTY2hlbWFDb21tYW5kc0R0bxJHCgpwYXJhbWV0ZXJzGAggAygLMjMuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlByZXNldFRhc2tTY2hlbWFQYXJhbWV0ZXJEdG8SRQoMcmVxdWlyZW1lbnRzGAkgAygLMi8uaGFnaWNvZGUuY29tbXVuaXR5LnYxLlByZXNldFRhc2tSZXF1aXJlbWVudER0bxJACgZzY2VuZXMYCiABKAsyMC5oYWdpY29kZS5jb21tdW5pdHkudjEuUHJlc2V0VGFza1NjaGVtYVNjZW5lc0R0bxJCCgdyZXF1ZXN0GAsgASgLMjEuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlByZXNldFRhc2tTY2hlbWFSZXF1ZXN0RHRvEi0KDGlucHV0X3NjaGVtYRgMIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSKAoHZXhhbXBsZRgNIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QyrwQKElByZXNldFRhc2tzU2VydmljZRJ/ChRHZXRQcmVzZXRUYXNrQ2F0YWxvZxIyLmhhZ2ljb2RlLmNvbW11bml0eS52MS5HZXRQcmVzZXRUYXNrQ2F0YWxvZ1JlcXVlc3QaMy5oYWdpY29kZS5jb21tdW5pdHkudjEuR2V0UHJlc2V0VGFza0NhdGFsb2dSZXNwb25zZRKUAQobQ2hlY2tQcmVzZXRUYXNrUmVxdWlyZW1lbnRzEjkuaGFnaWNvZGUuY29tbXVuaXR5LnYxLkNoZWNrUHJlc2V0VGFza1JlcXVpcmVtZW50c1JlcXVlc3QaOi5oYWdpY29kZS5jb21tdW5pdHkudjEuQ2hlY2tQcmVzZXRUYXNrUmVxdWlyZW1lbnRzUmVzcG9uc2USggEKFUxpc3RQcmVzZXRUYXNrU2NoZW1hcxIzLmhhZ2ljb2RlLmNvbW11bml0eS52MS5MaXN0UHJlc2V0VGFza1NjaGVtYXNSZXF1ZXN0GjQuaGFnaWNvZGUuY29tbXVuaXR5LnYxLkxpc3RQcmVzZXRUYXNrU2NoZW1hc1Jlc3BvbnNlEnwKE0dldFByZXNldFRhc2tTY2hlbWESMS5oYWdpY29kZS5jb21tdW5pdHkudjEuR2V0UHJlc2V0VGFza1NjaGVtYVJlcXVlc3QaMi5oYWdpY29kZS5jb21tdW5pdHkudjEuR2V0UHJlc2V0VGFza1NjaGVtYVJlc3BvbnNlQiuqAihQQ29kZS5IdHRwQXBpLkdycGNDb250cmFjdHMuQ29tbXVuaXR5LlYxYgZwcm90bzM",[Ue,Vh]),Gh=v(_o,5),Sh=v(_o,7),Nh=We(_o,0),ae=oe("CiloYWdpY29kZS9jb21tdW5pdHkvdjEvc2tpbGxfZ2FsbGVyeS5wcm90bxIVaGFnaWNvZGUuY29tbXVuaXR5LnYxIhcKFUdldExvY2FsU2tpbGxzUmVxdWVzdCJfChZHZXRMb2NhbFNraWxsc1Jlc3BvbnNlEkUKBnJlc3VsdBgBIAEoCzI1LmhhZ2ljb2RlLmNvbW11bml0eS52MS5Mb2NhbFNraWxsSW52ZW50b3J5UmVzcG9uc2VEdG8iLAocR2V0QnVpbHRJblNraWxsRGV0YWlsUmVxdWVzdBIMCgRzbHVnGAEgASgJIl0KHUdldEJ1aWx0SW5Ta2lsbERldGFpbFJlc3BvbnNlEjwKBnJlc3VsdBgBIAEoCzIsLmhhZ2ljb2RlLmNvbW11bml0eS52MS5CdWlsdEluU2tpbGxEZXRhaWxEdG8iYAoaVW5pbnN0YWxsTG9jYWxTa2lsbFJlcXVlc3QSQgoEYm9keRgBIAEoCzI0LmhhZ2ljb2RlLmNvbW11bml0eS52MS5Vbmluc3RhbGxMb2NhbFNraWxsUmVxdWVzdER0byJiChtVbmluc3RhbGxMb2NhbFNraWxsUmVzcG9uc2USQwoGcmVzdWx0GAEgASgLMjMuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlVuaW5zdGFsbExvY2FsU2tpbGxSZXN1bHREdG8icAoiU2V0QnVpbHRJblNraWxsQXZhaWxhYmlsaXR5UmVxdWVzdBJKCgRib2R5GAEgASgLMjwuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlNldEJ1aWx0SW5Ta2lsbEF2YWlsYWJpbGl0eVJlcXVlc3REdG8icgojU2V0QnVpbHRJblNraWxsQXZhaWxhYmlsaXR5UmVzcG9uc2USSwoGcmVzdWx0GAEgASgLMjsuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlNldEJ1aWx0SW5Ta2lsbEF2YWlsYWJpbGl0eVJlc3VsdER0byI2ChZHZXRTa2lsbEdhbGxlcnlSZXF1ZXN0EhIKBXF1ZXJ5GAEgASgJSACIAQFCCAoGX3F1ZXJ5IlkKF0dldFNraWxsR2FsbGVyeVJlc3BvbnNlEj4KBnJlc3VsdBgBIAEoCzIuLmhhZ2ljb2RlLmNvbW11bml0eS52MS5Ta2lsbEdhbGxlcnlSZXNwb25zZUR0byI6ChxHZXRTa2lsbEdhbGxlcnlEZXRhaWxSZXF1ZXN0EgoKAmlkGAEgASgJEg4KBnNvdXJjZRgCIAEoCSJdCh1HZXRTa2lsbEdhbGxlcnlEZXRhaWxSZXNwb25zZRI8CgZyZXN1bHQYASABKAsyLC5oYWdpY29kZS5jb21tdW5pdHkudjEuU2tpbGxHYWxsZXJ5RGV0YWlsRHRvIjkKG0dldFNraWxsR2FsbGVyeUF1ZGl0UmVxdWVzdBIKCgJpZBgBIAEoCRIOCgZzb3VyY2UYAiABKAkiWwocR2V0U2tpbGxHYWxsZXJ5QXVkaXRSZXNwb25zZRI7CgZyZXN1bHQYASABKAsyKy5oYWdpY29kZS5jb21tdW5pdHkudjEuU2tpbGxHYWxsZXJ5QXVkaXREdG8itAEKHFNraWxsR2FsbGVyeUF1ZGl0UHJvdmlkZXJEdG8SEAoIcHJvdmlkZXIYASABKAkSEQoEcmlzaxgCIAEoCUgAiAEBEhMKBmFsZXJ0cxgDIAEoBUgBiAEBEhIKBXNjb3JlGAQgASgFSAKIAQESGAoLYW5hbHl6ZWRfYXQYBSABKAlIA4gBAUIHCgVfcmlza0IJCgdfYWxlcnRzQggKBl9zY29yZUIOCgxfYW5hbHl6ZWRfYXQijgEKFFNraWxsR2FsbGVyeUF1ZGl0RHRvEgoKAmlkGAEgASgJEg4KBnNvdXJjZRgCIAEoCRISCgpza2lsbF9zbHVnGAMgASgJEkYKCXByb3ZpZGVycxgEIAMoCzIzLmhhZ2ljb2RlLmNvbW11bml0eS52MS5Ta2lsbEdhbGxlcnlBdWRpdFByb3ZpZGVyRHRvIkIKJEdldFNraWxsR2FsbGVyeUluc3RhbGxDb250ZXh0UmVxdWVzdBIKCgJpZBgBIAEoCRIOCgZzb3VyY2UYAiABKAkibQolR2V0U2tpbGxHYWxsZXJ5SW5zdGFsbENvbnRleHRSZXNwb25zZRJECgZyZXN1bHQYASABKAsyNC5oYWdpY29kZS5jb21tdW5pdHkudjEuU2tpbGxHYWxsZXJ5SW5zdGFsbENvbnRleHREdG8iIQofR2V0VHJ1c3RlZFNraWxsUHJvdmlkZXJzUmVxdWVzdCJuCiBHZXRUcnVzdGVkU2tpbGxQcm92aWRlcnNSZXNwb25zZRJKCgZyZXN1bHQYASABKAsyOi5oYWdpY29kZS5jb21tdW5pdHkudjEuVHJ1c3RlZFNraWxsUHJvdmlkZXJMaXN0UmVzcG9uc2VEdG8ibgohVXBzZXJ0VHJ1c3RlZFNraWxsUHJvdmlkZXJSZXF1ZXN0EkkKBGJvZHkYASABKAsyOy5oYWdpY29kZS5jb21tdW5pdHkudjEuVXBzZXJ0VHJ1c3RlZFNraWxsUHJvdmlkZXJSZXF1ZXN0RHRvInAKIlVwc2VydFRydXN0ZWRTa2lsbFByb3ZpZGVyUmVzcG9uc2USSgoGcmVzdWx0GAEgASgLMjouaGFnaWNvZGUuY29tbXVuaXR5LnYxLlRydXN0ZWRTa2lsbFByb3ZpZGVyTGlzdFJlc3BvbnNlRHRvIm4KIURlbGV0ZVRydXN0ZWRTa2lsbFByb3ZpZGVyUmVxdWVzdBJJCgRib2R5GAEgASgLMjsuaGFnaWNvZGUuY29tbXVuaXR5LnYxLkRlbGV0ZVRydXN0ZWRTa2lsbFByb3ZpZGVyUmVxdWVzdER0byJwCiJEZWxldGVUcnVzdGVkU2tpbGxQcm92aWRlclJlc3BvbnNlEkoKBnJlc3VsdBgBIAEoCzI6LmhhZ2ljb2RlLmNvbW11bml0eS52MS5UcnVzdGVkU2tpbGxQcm92aWRlckxpc3RSZXNwb25zZUR0byIjCiFSZXNldFRydXN0ZWRTa2lsbFByb3ZpZGVyc1JlcXVlc3QicAoiUmVzZXRUcnVzdGVkU2tpbGxQcm92aWRlcnNSZXNwb25zZRJKCgZyZXN1bHQYASABKAsyOi5oYWdpY29kZS5jb21tdW5pdHkudjEuVHJ1c3RlZFNraWxsUHJvdmlkZXJMaXN0UmVzcG9uc2VEdG8iUgoTSW5zdGFsbFNraWxsUmVxdWVzdBI7CgRib2R5GAEgASgLMi0uaGFnaWNvZGUuY29tbXVuaXR5LnYxLkluc3RhbGxTa2lsbFJlcXVlc3REdG8iVAoUSW5zdGFsbFNraWxsUmVzcG9uc2USPAoGcmVzdWx0GAEgASgLMiwuaGFnaWNvZGUuY29tbXVuaXR5LnYxLkluc3RhbGxTa2lsbFJlc3VsdER0byL3AQoYTG9jYWxTa2lsbEJ1aWx0SW5JbmZvRHRvEg8KB2VuYWJsZWQYASABKAgSFAoHdmVyc2lvbhgCIAEoCUgAiAEBEhMKBnNvdXJjZRgDIAEoCUgBiAEBEhcKCnJlcG9zaXRvcnkYBCABKAlIAogBARIQCgNyZWYYBSABKAlIA4gBARIRCgRwYXRoGAYgASgJSASIAQESGQoMY29udGVudF9oYXNoGAcgASgJSAWIAQFCCgoIX3ZlcnNpb25CCQoHX3NvdXJjZUINCgtfcmVwb3NpdG9yeUIGCgRfcmVmQgcKBV9wYXRoQg8KDV9jb250ZW50X2hhc2givAIKI0xvY2FsU2tpbGxNYW5hZ2VkSW5zdGFsbE1ldGFkYXRhRHRvEhYKDnNjaGVtYV92ZXJzaW9uGAEgASgFEhAKCHNraWxsX2lkGAIgASgJEg4KBnNvdXJjZRgDIAEoCRISCgpza2lsbF9zbHVnGAQgASgJEhQKB3ZlcnNpb24YBSABKAlIAIgBARIhChRub3JtYWxpemVkX3NraWxsX2tleRgGIAEoCUgBiAEBEh4KEWluc3RhbGxfcmVmZXJlbmNlGAcgASgJSAKIAQESMwoPcmVjb3JkZWRfYXRfdXRjGAggASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEIKCghfdmVyc2lvbkIXChVfbm9ybWFsaXplZF9za2lsbF9rZXlCFAoSX2luc3RhbGxfcmVmZXJlbmNlIosCChFMb2NhbFNraWxsSXRlbUR0bxIKCgJpZBgBIAEoCRIMCgRuYW1lGAIgASgJEg0KBXNjb3BlGAMgASgJEgwKBHBhdGgYBCABKAkSDgoGYWdlbnRzGAUgAygJElwKGG1hbmFnZWRfaW5zdGFsbF9tZXRhZGF0YRgGIAEoCzI6LmhhZ2ljb2RlLmNvbW11bml0eS52MS5Mb2NhbFNraWxsTWFuYWdlZEluc3RhbGxNZXRhZGF0YUR0bxIOCgZvcmlnaW4YByABKAkSQQoIYnVpbHRfaW4YCCABKAsyLy5oYWdpY29kZS5jb21tdW5pdHkudjEuTG9jYWxTa2lsbEJ1aWx0SW5JbmZvRHRvIo8BCh5Mb2NhbFNraWxsSW52ZW50b3J5UmVzcG9uc2VEdG8SNAoQZ2VuZXJhdGVkX2F0X3V0YxgBIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASNwoFaXRlbXMYAiADKAsyKC5oYWdpY29kZS5jb21tdW5pdHkudjEuTG9jYWxTa2lsbEl0ZW1EdG8isQEKG0J1aWx0SW5Ta2lsbERldGFpbFNvdXJjZUR0bxIRCgR0eXBlGAEgASgJSACIAQESFwoKcmVwb3NpdG9yeRgCIAEoCUgBiAEBEhAKA3JlZhgDIAEoCUgCiAEBEhEKBHBhdGgYBCABKAlIA4gBARIQCgN1cmwYBSABKAlIBIgBAUIHCgVfdHlwZUINCgtfcmVwb3NpdG9yeUIGCgRfcmVmQgcKBV9wYXRoQgYKBF91cmwiPAoYQnVpbHRJblNraWxsRmlsZUVudHJ5RHRvEgwKBHBhdGgYASABKAkSEgoKc2l6ZV9ieXRlcxgCIAEoAyI5ChtCdWlsdEluU2tpbGxNZXRhZGF0YVBhaXJEdG8SCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJIo4EChVCdWlsdEluU2tpbGxEZXRhaWxEdG8SDAoEc2x1ZxgBIAEoCRIMCgRuYW1lGAIgASgJEhMKC2Rlc2NyaXB0aW9uGAMgASgJEhQKB3ZlcnNpb24YBCABKAlIAIgBARIPCgdlbmFibGVkGAUgASgIEkQKCG1ldGFkYXRhGAYgAygLMjIuaGFnaWNvZGUuY29tbXVuaXR5LnYxLkJ1aWx0SW5Ta2lsbE1ldGFkYXRhUGFpckR0bxJCCgZzb3VyY2UYByABKAsyMi5oYWdpY29kZS5jb21tdW5pdHkudjEuQnVpbHRJblNraWxsRGV0YWlsU291cmNlRHRvEhkKDGNvbnRlbnRfaGFzaBgIIAEoCUgBiAEBEj4KBWZpbGVzGAkgAygLMi8uaGFnaWNvZGUuY29tbXVuaXR5LnYxLkJ1aWx0SW5Ta2lsbEZpbGVFbnRyeUR0bxISCgpmaWxlX2NvdW50GAogASgFEhgKEHRvdGFsX3NpemVfYnl0ZXMYCyABKAMSFwoPZmlsZXNfdHJ1bmNhdGVkGAwgASgIEhUKDWxpY2Vuc2VfZmlsZXMYDSADKAkSDAoEYm9keRgOIAEoCRIWCg5ib2R5X3RydW5jYXRlZBgPIAEoCBIXCg9ib2R5X3NpemVfYnl0ZXMYECABKANCCgoIX3ZlcnNpb25CDwoNX2NvbnRlbnRfaGFzaCLXAQocVW5pbnN0YWxsTG9jYWxTa2lsbFJlc3VsdER0bxISCgpza2lsbF9uYW1lGAEgASgJEg4KBnN0YXR1cxgCIAEoCRIZCgx1c2VyX21lc3NhZ2UYAyABKAlIAIgBARIfChJkaWFnbm9zdGljX21lc3NhZ2UYBCABKAlIAYgBARIvCgtvY2N1cnJlZF9hdBgFIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCDwoNX3VzZXJfbWVzc2FnZUIVChNfZGlhZ25vc3RpY19tZXNzYWdlIjMKHVVuaW5zdGFsbExvY2FsU2tpbGxSZXF1ZXN0RHRvEhIKCnNraWxsX25hbWUYASABKAkivAEKJFNldEJ1aWx0SW5Ta2lsbEF2YWlsYWJpbGl0eVJlc3VsdER0bxIMCgRzbHVnGAEgASgJEg8KB2VuYWJsZWQYAiABKAgSEQoJc3VjY2VlZGVkGAMgASgIEhkKDHVzZXJfbWVzc2FnZRgEIAEoCUgAiAEBEh8KEmRpYWdub3N0aWNfbWVzc2FnZRgFIAEoCUgBiAEBQg8KDV91c2VyX21lc3NhZ2VCFQoTX2RpYWdub3N0aWNfbWVzc2FnZSJGCiVTZXRCdWlsdEluU2tpbGxBdmFpbGFiaWxpdHlSZXF1ZXN0RHRvEgwKBHNsdWcYASABKAkSDwoHZW5hYmxlZBgCIAEoCCKlAgoiU2tpbGxHYWxsZXJ5UmVwb3NpdG9yeURpc2NvdmVyeUR0bxIMCgRtb2RlGAEgASgJEhwKD3JlcXVlc3RlZF9xdWVyeRgCIAEoCUgAiAEBEh4KEW5vcm1hbGl6ZWRfc291cmNlGAMgASgJSAGIAQESGwoOcmVwb3NpdG9yeV91cmwYBCABKAlIAogBARIPCgdvdXRjb21lGAUgASgJEhcKCmVycm9yX2NvZGUYBiABKAlIA4gBARIUCgdtZXNzYWdlGAcgASgJSASIAQFCEgoQX3JlcXVlc3RlZF9xdWVyeUIUChJfbm9ybWFsaXplZF9zb3VyY2VCEQoPX3JlcG9zaXRvcnlfdXJsQg0KC19lcnJvcl9jb2RlQgoKCF9tZXNzYWdlIuYBCiNUcnVzdGVkU2tpbGxQcm92aWRlclRydXN0U3VtbWFyeUR0bxITCgtwcm92aWRlcl9pZBgBIAEoCRIUCgxkaXNwbGF5X25hbWUYAiABKAkSEwoLYmFkZ2VfbGFiZWwYAyABKAkSHgoRbWF0Y2hlZF9ydWxlX3R5cGUYBCABKAlIAIgBARIfChJtYXRjaGVkX3J1bGVfdmFsdWUYBSABKAlIAYgBARIRCglpc19wcmVzZXQYBiABKAhCFAoSX21hdGNoZWRfcnVsZV90eXBlQhUKE19tYXRjaGVkX3J1bGVfdmFsdWUiwwEKFFNraWxsR2FsbGVyeVNraWxsRHRvEgoKAmlkGAEgASgJEgwKBG5hbWUYAiABKAkSDgoGc291cmNlGAMgASgJEhAKCGluc3RhbGxzGAQgASgFEhkKEWlzX3RydXN0ZWRfc291cmNlGAUgASgIElQKEHRydXN0ZWRfcHJvdmlkZXIYBiABKAsyOi5oYWdpY29kZS5jb21tdW5pdHkudjEuVHJ1c3RlZFNraWxsUHJvdmlkZXJUcnVzdFN1bW1hcnlEdG8i5AEKF1NraWxsR2FsbGVyeVJlc3BvbnNlRHRvEjQKEGdlbmVyYXRlZF9hdF91dGMYASABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEjoKBWl0ZW1zGAIgAygLMisuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlNraWxsR2FsbGVyeVNraWxsRHRvElcKFHJlcG9zaXRvcnlfZGlzY292ZXJ5GAMgASgLMjkuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlNraWxsR2FsbGVyeVJlcG9zaXRvcnlEaXNjb3ZlcnlEdG8i7AUKFVNraWxsR2FsbGVyeURldGFpbER0bxIKCgJpZBgBIAEoCRIOCgZzb3VyY2UYAiABKAkSEgoKc2tpbGxfc2x1ZxgDIAEoCRIYCgtkZXNjcmlwdGlvbhgEIAEoCUgAiAEBEhwKD3JlcG9zaXRvcnlfbmFtZRgFIAEoCUgBiAEBEiEKFHJlcG9zaXRvcnlfZnVsbF9uYW1lGAYgASgJSAKIAQESGwoOcmVwb3NpdG9yeV91cmwYByABKAlIA4gBARImChlyZXBvc2l0b3J5X2RlZmF1bHRfYnJhbmNoGAggASgJSASIAQESHwoScmVwb3NpdG9yeV9wcml2YXRlGAkgASgISAWIAQESFgoOaXNfaW5zdGFsbGFibGUYCiABKAgSGQoRaXNfdHJ1c3RlZF9zb3VyY2UYCyABKAgSVAoQdHJ1c3RlZF9wcm92aWRlchgMIAEoCzI6LmhhZ2ljb2RlLmNvbW11bml0eS52MS5UcnVzdGVkU2tpbGxQcm92aWRlclRydXN0U3VtbWFyeUR0bxIeChFpbnN0YWxsX3JlZmVyZW5jZRgNIAEoCUgGiAEBEiQKF2luc3RhbGxfY29tbWFuZF9wcmV2aWV3GA4gASgJSAeIAQESHAoPaW5zdGFsbF92ZXJzaW9uGA8gASgJSAiIAQESGQoMaW5zdGFsbF9oaW50GBAgASgJSAmIAQFCDgoMX2Rlc2NyaXB0aW9uQhIKEF9yZXBvc2l0b3J5X25hbWVCFwoVX3JlcG9zaXRvcnlfZnVsbF9uYW1lQhEKD19yZXBvc2l0b3J5X3VybEIcChpfcmVwb3NpdG9yeV9kZWZhdWx0X2JyYW5jaEIVChNfcmVwb3NpdG9yeV9wcml2YXRlQhQKEl9pbnN0YWxsX3JlZmVyZW5jZUIaChhfaW5zdGFsbF9jb21tYW5kX3ByZXZpZXdCEgoQX2luc3RhbGxfdmVyc2lvbkIPCg1faW5zdGFsbF9oaW50Iq4DCh1Ta2lsbEdhbGxlcnlJbnN0YWxsQ29udGV4dER0bxIKCgJpZBgBIAEoCRIOCgZzb3VyY2UYAiABKAkSEgoKc2tpbGxfc2x1ZxgDIAEoCRIWCg5pc19pbnN0YWxsYWJsZRgEIAEoCBIZChFpc190cnVzdGVkX3NvdXJjZRgFIAEoCBJUChB0cnVzdGVkX3Byb3ZpZGVyGAYgASgLMjouaGFnaWNvZGUuY29tbXVuaXR5LnYxLlRydXN0ZWRTa2lsbFByb3ZpZGVyVHJ1c3RTdW1tYXJ5RHRvEh4KEWluc3RhbGxfcmVmZXJlbmNlGAcgASgJSACIAQESJAoXaW5zdGFsbF9jb21tYW5kX3ByZXZpZXcYCCABKAlIAYgBARIcCg9pbnN0YWxsX3ZlcnNpb24YCSABKAlIAogBARIZCgxpbnN0YWxsX2hpbnQYCiABKAlIA4gBAUIUChJfaW5zdGFsbF9yZWZlcmVuY2VCGgoYX2luc3RhbGxfY29tbWFuZF9wcmV2aWV3QhIKEF9pbnN0YWxsX3ZlcnNpb25CDwoNX2luc3RhbGxfaGludCJFCiBUcnVzdGVkU2tpbGxQcm92aWRlck1hdGNoUnVsZUR0bxISCgptYXRjaF90eXBlGAEgASgJEg0KBXZhbHVlGAIgASgJIo8CChdUcnVzdGVkU2tpbGxQcm92aWRlckR0bxITCgtwcm92aWRlcl9pZBgBIAEoCRIUCgxkaXNwbGF5X25hbWUYAiABKAkSEwoLYmFkZ2VfbGFiZWwYAyABKAkSEQoJaXNfcHJlc2V0GAQgASgIEhIKCmlzX2VuYWJsZWQYBSABKAgSEgoKc29ydF9vcmRlchgGIAEoBRISCgpydWxlX2NvdW50GAcgASgFEhcKD3NvdXJjZV9leGFtcGxlcxgIIAMoCRJMCgttYXRjaF9ydWxlcxgJIAMoCzI3LmhhZ2ljb2RlLmNvbW11bml0eS52MS5UcnVzdGVkU2tpbGxQcm92aWRlck1hdGNoUnVsZUR0byKrAQojVHJ1c3RlZFNraWxsUHJvdmlkZXJMaXN0UmVzcG9uc2VEdG8SNAoQZ2VuZXJhdGVkX2F0X3V0YxgBIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASDwoHdmVyc2lvbhgCIAEoBRI9CgVpdGVtcxgDIAMoCzIuLmhhZ2ljb2RlLmNvbW11bml0eS52MS5UcnVzdGVkU2tpbGxQcm92aWRlckR0byLxAQokVXBzZXJ0VHJ1c3RlZFNraWxsUHJvdmlkZXJSZXF1ZXN0RHRvEhMKC3Byb3ZpZGVyX2lkGAEgASgJEhQKDGRpc3BsYXlfbmFtZRgCIAEoCRIYCgtiYWRnZV9sYWJlbBgDIAEoCUgAiAEBEhIKCmlzX2VuYWJsZWQYBCABKAgSEgoKc29ydF9vcmRlchgFIAEoBRJMCgttYXRjaF9ydWxlcxgGIAMoCzI3LmhhZ2ljb2RlLmNvbW11bml0eS52MS5UcnVzdGVkU2tpbGxQcm92aWRlck1hdGNoUnVsZUR0b0IOCgxfYmFkZ2VfbGFiZWwiOwokRGVsZXRlVHJ1c3RlZFNraWxsUHJvdmlkZXJSZXF1ZXN0RHRvEhMKC3Byb3ZpZGVyX2lkGAEgASgJIrgDChVJbnN0YWxsU2tpbGxSZXN1bHREdG8SEAoIc2tpbGxfaWQYASABKAkSDgoGc291cmNlGAIgASgJEhIKCnNraWxsX3NsdWcYAyABKAkSIQoUbm9ybWFsaXplZF9za2lsbF9rZXkYBCABKAlIAIgBARIeChFpbnN0YWxsX3JlZmVyZW5jZRgFIAEoCUgBiAEBEhwKD2NvbW1hbmRfcHJldmlldxgGIAEoCUgCiAEBEhQKB3ZlcnNpb24YByABKAlIA4gBARIOCgZzdGF0dXMYCCABKAkSGQoMdXNlcl9tZXNzYWdlGAkgASgJSASIAQESHwoSZGlhZ25vc3RpY19tZXNzYWdlGAogASgJSAWIAQESLwoLb2NjdXJyZWRfYXQYCyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQhcKFV9ub3JtYWxpemVkX3NraWxsX2tleUIUChJfaW5zdGFsbF9yZWZlcmVuY2VCEgoQX2NvbW1hbmRfcHJldmlld0IKCghfdmVyc2lvbkIPCg1fdXNlcl9tZXNzYWdlQhUKE19kaWFnbm9zdGljX21lc3NhZ2UiagoWSW5zdGFsbFNraWxsUmVxdWVzdER0bxIKCgJpZBgBIAEoCRIOCgZzb3VyY2UYAiABKAkSEgoKc2tpbGxfc2x1ZxgDIAEoCRIUCgd2ZXJzaW9uGAQgASgJSACIAQFCCgoIX3ZlcnNpb24iGwoZTGlzdFVzZXJTa2lsbEJhc2VzUmVxdWVzdCJfChpMaXN0VXNlclNraWxsQmFzZXNSZXNwb25zZRJBCgZyZXN1bHQYASABKAsyMS5oYWdpY29kZS5jb21tdW5pdHkudjEuVXNlclNraWxsQmFzZUxpc3RSZXN1bHREdG8iWgoXQWRkVXNlclNraWxsQmFzZVJlcXVlc3QSPwoEYm9keRgBIAEoCzIxLmhhZ2ljb2RlLmNvbW11bml0eS52MS5BZGRVc2VyU2tpbGxCYXNlUmVxdWVzdER0byJZChhBZGRVc2VyU2tpbGxCYXNlUmVzcG9uc2USPQoGcmVzdWx0GAEgASgLMi0uaGFnaWNvZGUuY29tbXVuaXR5LnYxLlVzZXJTa2lsbEJhc2VSZXN1bHREdG8iLQoaUmVtb3ZlVXNlclNraWxsQmFzZVJlcXVlc3QSDwoHYmFzZV9pZBgBIAEoCSJiChtSZW1vdmVVc2VyU2tpbGxCYXNlUmVzcG9uc2USQwoGcmVzdWx0GAEgASgLMjMuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlJlbW92ZVVzZXJTa2lsbEJhc2VSZXN1bHREdG8iLQoaUmVzY2FuVXNlclNraWxsQmFzZVJlcXVlc3QSDwoHYmFzZV9pZBgBIAEoCSJcChtSZXNjYW5Vc2VyU2tpbGxCYXNlUmVzcG9uc2USPQoGcmVzdWx0GAEgASgLMi0uaGFnaWNvZGUuY29tbXVuaXR5LnYxLlVzZXJTa2lsbEJhc2VSZXN1bHREdG8iYAoaU2V0VXNlclNraWxsRW5hYmxlZFJlcXVlc3QSQgoEYm9keRgBIAEoCzI0LmhhZ2ljb2RlLmNvbW11bml0eS52MS5TZXRVc2VyU2tpbGxFbmFibGVkUmVxdWVzdER0byJiChtTZXRVc2VyU2tpbGxFbmFibGVkUmVzcG9uc2USQwoGcmVzdWx0GAEgASgLMjMuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlNldFVzZXJTa2lsbEVuYWJsZWRSZXN1bHREdG8i+AEKEFVzZXJTa2lsbEJhc2VEdG8SCgoCaWQYASABKAkSDQoFbGFiZWwYAiABKAkSDAoEcGF0aBgDIAEoCRIOCgZzdGF0dXMYBCABKAkSGgoNc3RhdHVzX3JlYXNvbhgFIAEoCUgAiAEBEhsKDnN0YXR1c19tZXNzYWdlGAYgASgJSAGIAQESMwoGc2tpbGxzGAcgAygLMiMuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlVzZXJTa2lsbER0bxIYChBza2lsbHNfdHJ1bmNhdGVkGAggASgIQhAKDl9zdGF0dXNfcmVhc29uQhEKD19zdGF0dXNfbWVzc2FnZSL9AQoMVXNlclNraWxsRHRvEgwKBHNsdWcYASABKAkSDAoEbmFtZRgCIAEoCRIYCgtkZXNjcmlwdGlvbhgDIAEoCUgAiAEBEg8KB2VuYWJsZWQYBCABKAgSDgoGc3RhdHVzGAUgASgJEhsKDmNvbmZsaWN0c193aXRoGAYgASgJSAGIAQESPAoIcHJvYmxlbXMYByADKAsyKi5oYWdpY29kZS5jb21tdW5pdHkudjEuVXNlclNraWxsUHJvYmxlbUR0bxIKCgJpZBgIIAEoCRIMCgRwYXRoGAkgASgJQg4KDF9kZXNjcmlwdGlvbkIRCg9fY29uZmxpY3RzX3dpdGgiNAoTVXNlclNraWxsUHJvYmxlbUR0bxIMCgRjb2RlGAEgASgJEg8KB21lc3NhZ2UYAiABKAkiSAoaQWRkVXNlclNraWxsQmFzZVJlcXVlc3REdG8SDAoEcGF0aBgBIAEoCRISCgVsYWJlbBgCIAEoCUgAiAEBQggKBl9sYWJlbCKTAQoaVXNlclNraWxsQmFzZUxpc3RSZXN1bHREdG8SEQoJc3VjY2VlZGVkGAEgASgIEhkKDHVzZXJfbWVzc2FnZRgCIAEoCUgAiAEBEjYKBWJhc2VzGAMgAygLMicuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlVzZXJTa2lsbEJhc2VEdG9CDwoNX3VzZXJfbWVzc2FnZSKOAQoWVXNlclNraWxsQmFzZVJlc3VsdER0bxIRCglzdWNjZWVkZWQYASABKAgSGQoMdXNlcl9tZXNzYWdlGAIgASgJSACIAQESNQoEYmFzZRgDIAEoCzInLmhhZ2ljb2RlLmNvbW11bml0eS52MS5Vc2VyU2tpbGxCYXNlRHRvQg8KDV91c2VyX21lc3NhZ2UibgocUmVtb3ZlVXNlclNraWxsQmFzZVJlc3VsdER0bxIRCglzdWNjZWVkZWQYASABKAgSGQoMdXNlcl9tZXNzYWdlGAIgASgJSACIAQESDwoHYmFzZV9pZBgDIAEoCUIPCg1fdXNlcl9tZXNzYWdlIlUKHVNldFVzZXJTa2lsbEVuYWJsZWRSZXF1ZXN0RHRvEg8KB2Jhc2VfaWQYASABKAkSEgoKc2tpbGxfc2x1ZxgCIAEoCRIPCgdlbmFibGVkGAMgASgIIpMBChxTZXRVc2VyU2tpbGxFbmFibGVkUmVzdWx0RHRvEhEKCXN1Y2NlZWRlZBgBIAEoCBIZCgx1c2VyX21lc3NhZ2UYAiABKAlIAIgBARIPCgdiYXNlX2lkGAMgASgJEhIKCnNraWxsX3NsdWcYBCABKAkSDwoHZW5hYmxlZBgFIAEoCEIPCg1fdXNlcl9tZXNzYWdlMtASChNTa2lsbEdhbGxlcnlTZXJ2aWNlEm0KDkdldExvY2FsU2tpbGxzEiwuaGFnaWNvZGUuY29tbXVuaXR5LnYxLkdldExvY2FsU2tpbGxzUmVxdWVzdBotLmhhZ2ljb2RlLmNvbW11bml0eS52MS5HZXRMb2NhbFNraWxsc1Jlc3BvbnNlEoIBChVHZXRCdWlsdEluU2tpbGxEZXRhaWwSMy5oYWdpY29kZS5jb21tdW5pdHkudjEuR2V0QnVpbHRJblNraWxsRGV0YWlsUmVxdWVzdBo0LmhhZ2ljb2RlLmNvbW11bml0eS52MS5HZXRCdWlsdEluU2tpbGxEZXRhaWxSZXNwb25zZRJ8ChNVbmluc3RhbGxMb2NhbFNraWxsEjEuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlVuaW5zdGFsbExvY2FsU2tpbGxSZXF1ZXN0GjIuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlVuaW5zdGFsbExvY2FsU2tpbGxSZXNwb25zZRKUAQobU2V0QnVpbHRJblNraWxsQXZhaWxhYmlsaXR5EjkuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlNldEJ1aWx0SW5Ta2lsbEF2YWlsYWJpbGl0eVJlcXVlc3QaOi5oYWdpY29kZS5jb21tdW5pdHkudjEuU2V0QnVpbHRJblNraWxsQXZhaWxhYmlsaXR5UmVzcG9uc2UScAoPR2V0U2tpbGxHYWxsZXJ5Ei0uaGFnaWNvZGUuY29tbXVuaXR5LnYxLkdldFNraWxsR2FsbGVyeVJlcXVlc3QaLi5oYWdpY29kZS5jb21tdW5pdHkudjEuR2V0U2tpbGxHYWxsZXJ5UmVzcG9uc2USggEKFUdldFNraWxsR2FsbGVyeURldGFpbBIzLmhhZ2ljb2RlLmNvbW11bml0eS52MS5HZXRTa2lsbEdhbGxlcnlEZXRhaWxSZXF1ZXN0GjQuaGFnaWNvZGUuY29tbXVuaXR5LnYxLkdldFNraWxsR2FsbGVyeURldGFpbFJlc3BvbnNlEn8KFEdldFNraWxsR2FsbGVyeUF1ZGl0EjIuaGFnaWNvZGUuY29tbXVuaXR5LnYxLkdldFNraWxsR2FsbGVyeUF1ZGl0UmVxdWVzdBozLmhhZ2ljb2RlLmNvbW11bml0eS52MS5HZXRTa2lsbEdhbGxlcnlBdWRpdFJlc3BvbnNlEpoBCh1HZXRTa2lsbEdhbGxlcnlJbnN0YWxsQ29udGV4dBI7LmhhZ2ljb2RlLmNvbW11bml0eS52MS5HZXRTa2lsbEdhbGxlcnlJbnN0YWxsQ29udGV4dFJlcXVlc3QaPC5oYWdpY29kZS5jb21tdW5pdHkudjEuR2V0U2tpbGxHYWxsZXJ5SW5zdGFsbENvbnRleHRSZXNwb25zZRKLAQoYR2V0VHJ1c3RlZFNraWxsUHJvdmlkZXJzEjYuaGFnaWNvZGUuY29tbXVuaXR5LnYxLkdldFRydXN0ZWRTa2lsbFByb3ZpZGVyc1JlcXVlc3QaNy5oYWdpY29kZS5jb21tdW5pdHkudjEuR2V0VHJ1c3RlZFNraWxsUHJvdmlkZXJzUmVzcG9uc2USkQEKGlVwc2VydFRydXN0ZWRTa2lsbFByb3ZpZGVyEjguaGFnaWNvZGUuY29tbXVuaXR5LnYxLlVwc2VydFRydXN0ZWRTa2lsbFByb3ZpZGVyUmVxdWVzdBo5LmhhZ2ljb2RlLmNvbW11bml0eS52MS5VcHNlcnRUcnVzdGVkU2tpbGxQcm92aWRlclJlc3BvbnNlEpEBChpEZWxldGVUcnVzdGVkU2tpbGxQcm92aWRlchI4LmhhZ2ljb2RlLmNvbW11bml0eS52MS5EZWxldGVUcnVzdGVkU2tpbGxQcm92aWRlclJlcXVlc3QaOS5oYWdpY29kZS5jb21tdW5pdHkudjEuRGVsZXRlVHJ1c3RlZFNraWxsUHJvdmlkZXJSZXNwb25zZRKRAQoaUmVzZXRUcnVzdGVkU2tpbGxQcm92aWRlcnMSOC5oYWdpY29kZS5jb21tdW5pdHkudjEuUmVzZXRUcnVzdGVkU2tpbGxQcm92aWRlcnNSZXF1ZXN0GjkuaGFnaWNvZGUuY29tbXVuaXR5LnYxLlJlc2V0VHJ1c3RlZFNraWxsUHJvdmlkZXJzUmVzcG9uc2USZwoMSW5zdGFsbFNraWxsEiouaGFnaWNvZGUuY29tbXVuaXR5LnYxLkluc3RhbGxTa2lsbFJlcXVlc3QaKy5oYWdpY29kZS5jb21tdW5pdHkudjEuSW5zdGFsbFNraWxsUmVzcG9uc2USeQoSTGlzdFVzZXJTa2lsbEJhc2VzEjAuaGFnaWNvZGUuY29tbXVuaXR5LnYxLkxpc3RVc2VyU2tpbGxCYXNlc1JlcXVlc3QaMS5oYWdpY29kZS5jb21tdW5pdHkudjEuTGlzdFVzZXJTa2lsbEJhc2VzUmVzcG9uc2UScwoQQWRkVXNlclNraWxsQmFzZRIuLmhhZ2ljb2RlLmNvbW11bml0eS52MS5BZGRVc2VyU2tpbGxCYXNlUmVxdWVzdBovLmhhZ2ljb2RlLmNvbW11bml0eS52MS5BZGRVc2VyU2tpbGxCYXNlUmVzcG9uc2USfAoTUmVtb3ZlVXNlclNraWxsQmFzZRIxLmhhZ2ljb2RlLmNvbW11bml0eS52MS5SZW1vdmVVc2VyU2tpbGxCYXNlUmVxdWVzdBoyLmhhZ2ljb2RlLmNvbW11bml0eS52MS5SZW1vdmVVc2VyU2tpbGxCYXNlUmVzcG9uc2USfAoTUmVzY2FuVXNlclNraWxsQmFzZRIxLmhhZ2ljb2RlLmNvbW11bml0eS52MS5SZXNjYW5Vc2VyU2tpbGxCYXNlUmVxdWVzdBoyLmhhZ2ljb2RlLmNvbW11bml0eS52MS5SZXNjYW5Vc2VyU2tpbGxCYXNlUmVzcG9uc2USfAoTU2V0VXNlclNraWxsRW5hYmxlZBIxLmhhZ2ljb2RlLmNvbW11bml0eS52MS5TZXRVc2VyU2tpbGxFbmFibGVkUmVxdWVzdBoyLmhhZ2ljb2RlLmNvbW11bml0eS52MS5TZXRVc2VyU2tpbGxFbmFibGVkUmVzcG9uc2VCK6oCKFBDb2RlLkh0dHBBcGkuR3JwY0NvbnRyYWN0cy5Db21tdW5pdHkuVjFiBnByb3RvMw",[Ne]),vh=v(ae,1),Wh=v(ae,5),yh=v(ae,7),Ih=v(ae,9),Yh=v(ae,11),Xh=v(ae,13),Bh=v(ae,19),Ch=v(ae,21),Fh=v(ae,23),wh=v(ae,25),kh=v(ae,27),Uh=v(ae,37),Jh=v(ae,39),xh=v(ae,49),Kh=v(ae,50),zh=v(ae,52),Lh=We(ae,0),Is=oe("CiVoYWdpY29kZS9wbGF0Zm9ybS92MS9zdGF0aXN0aWNzLnByb3RvEhRoYWdpY29kZS5wbGF0Zm9ybS52MSJ1ChhHZXRBZ2dyZWdhdGVkRGF0YVJlcXVlc3QSFQoNZm9yY2VfcmVmcmVzaBgBIAEoCBIlChhnaXRfYXV0b19yZWZyZXNoX2VuYWJsZWQYAiABKAhIAIgBAUIbChlfZ2l0X2F1dG9fcmVmcmVzaF9lbmFibGVkIl0KGUdldEFnZ3JlZ2F0ZWREYXRhUmVzcG9uc2USQAoGcmVzdWx0GAEgASgLMjAuaGFnaWNvZGUucGxhdGZvcm0udjEuRGF0YUFnZ3JlZ2F0aW9uUmVzcG9uc2VEdG8iHQobR2V0VG9rZW5Nb25pdG9yVXNhZ2VSZXF1ZXN0ImIKHEdldFRva2VuTW9uaXRvclVzYWdlUmVzcG9uc2USQgoGcmVzdWx0GAEgASgLMjIuaGFnaWNvZGUucGxhdGZvcm0udjEuVG9rZW5Nb25pdG9yVXNhZ2VTbmFwc2hvdER0byK/AQodR2V0VG9rZW5Nb25pdG9ySGlzdG9yeVJlcXVlc3QSKAoEZnJvbRgBIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASJgoCdG8YAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEhYKCXBhZ2Vfc2l6ZRgDIAEoBUgAiAEBEhcKCnBhZ2VfdG9rZW4YBCABKAlIAYgBAUIMCgpfcGFnZV9zaXplQg0KC19wYWdlX3Rva2VuImIKHkdldFRva2VuTW9uaXRvckhpc3RvcnlSZXNwb25zZRJACgZyZXN1bHQYASABKAsyMC5oYWdpY29kZS5wbGF0Zm9ybS52MS5Ub2tlbk1vbml0b3JIaXN0b3J5UGFnZUR0byKTAQoaVG9rZW5Nb25pdG9ySGlzdG9yeVBhZ2VEdG8SQwoHc2FtcGxlcxgBIAMoCzIyLmhhZ2ljb2RlLnBsYXRmb3JtLnYxLlRva2VuTW9uaXRvckhpc3RvcnlTYW1wbGVEdG8SHAoPbmV4dF9wYWdlX3Rva2VuGAIgASgJSACIAQFCEgoQX25leHRfcGFnZV90b2tlbiKhAwocVG9rZW5Nb25pdG9ySGlzdG9yeVNhbXBsZUR0bxIzCg9vYnNlcnZlZF9hdF91dGMYASABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEg4KBnNvdXJjZRgCIAEoCRIOCgZzdGF0dXMYAyABKAkSGwoOZmFpbHVyZV9yZWFzb24YBCABKAlIAIgBARIVCghkYXRlX2tleRgFIAEoCUgBiAEBEhkKDHRvdGFsX3Rva2VucxgGIAEoA0gCiAEBEhUKCGNvc3RfdXNkGAcgASgBSAOIAQESQwoHcGVyaW9kcxgIIAMoCzIyLmhhZ2ljb2RlLnBsYXRmb3JtLnYxLlRva2VuTW9uaXRvckhpc3RvcnlQZXJpb2REdG8SQwoHd2luZG93cxgJIAMoCzIyLmhhZ2ljb2RlLnBsYXRmb3JtLnYxLlRva2VuTW9uaXRvckhpc3RvcnlXaW5kb3dEdG9CEQoPX2ZhaWx1cmVfcmVhc29uQgsKCV9kYXRlX2tleUIPCg1fdG90YWxfdG9rZW5zQgsKCV9jb3N0X3VzZCKOAwocVG9rZW5Nb25pdG9ySGlzdG9yeVBlcmlvZER0bxIOCgZwZXJpb2QYASABKAkSFAoMdG90YWxfdG9rZW5zGAIgASgDEhAKCGNvc3RfdXNkGAMgASgBEh4KEWNhY2hlX3JlYWRfdG9rZW5zGAQgASgDSACIAQESHwoSY2FjaGVfd3JpdGVfdG9rZW5zGAUgASgDSAGIAQESGgoNb3V0cHV0X3Rva2VucxgGIAEoA0gCiAEBEhkKDHRpbWVkX3Rva2VucxgHIAEoA0gDiAEBEiAKE3RpbWVkX291dHB1dF90b2tlbnMYCCABKANIBIgBARIeChF0aW1lZF9kdXJhdGlvbl9tcxgJIAEoA0gFiAEBQhQKEl9jYWNoZV9yZWFkX3Rva2Vuc0IVChNfY2FjaGVfd3JpdGVfdG9rZW5zQhAKDl9vdXRwdXRfdG9rZW5zQg8KDV90aW1lZF90b2tlbnNCFgoUX3RpbWVkX291dHB1dF90b2tlbnNCFAoSX3RpbWVkX2R1cmF0aW9uX21zIp0DChxUb2tlbk1vbml0b3JIaXN0b3J5V2luZG93RHRvEhAKCHByb3ZpZGVyGAEgASgJEhcKCnBsYW5fbGFiZWwYAiABKAlIAIgBARIXCg9wcm92aWRlcl9zdGF0dXMYAyABKAkSDAoEa2luZBgEIAEoCRISCgVsYWJlbBgFIAEoCUgBiAEBEhsKDndpbmRvd19taW51dGVzGAYgASgFSAKIAQESGQoMdXNlZF9wZXJjZW50GAcgASgBSAOIAQESHgoRcmVtYWluaW5nX3BlcmNlbnQYCCABKAFIBIgBARIxCg1yZXNldHNfYXRfdXRjGAkgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBI5ChVzb3VyY2VfdXBkYXRlZF9hdF91dGMYCiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQg0KC19wbGFuX2xhYmVsQggKBl9sYWJlbEIRCg9fd2luZG93X21pbnV0ZXNCDwoNX3VzZWRfcGVyY2VudEIUChJfcmVtYWluaW5nX3BlcmNlbnQidQohR2V0VG9rZW5Nb25pdG9ySG91cmx5VXNhZ2VSZXF1ZXN0EigKBGZyb20YASABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEiYKAnRvGAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCJmCiJHZXRUb2tlbk1vbml0b3JIb3VybHlVc2FnZVJlc3BvbnNlEkAKBnJlc3VsdBgBIAMoCzIwLmhhZ2ljb2RlLnBsYXRmb3JtLnYxLlRva2VuTW9uaXRvckhvdXJseVVzYWdlRHRvItcCChpUb2tlbk1vbml0b3JIb3VybHlVc2FnZUR0bxIyCg5ob3VyX3N0YXJ0X3V0YxgBIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASGgoSdXRjX29mZnNldF9taW51dGVzGAIgASgFEg4KBnRva2VucxgDIAEoAxIQCghjb3N0X3VzZBgEIAEoARIaCg1vdXRwdXRfdG9rZW5zGAUgASgDSACIAQESHgoRY2FjaGVfcmVhZF90b2tlbnMYBiABKANIAYgBARIfChJjYWNoZV93cml0ZV90b2tlbnMYByABKANIAogBARIYChBvYnNlcnZlZF9zZWNvbmRzGAggASgFEhEKCWVzdGltYXRlZBgJIAEoCEIQCg5fb3V0cHV0X3Rva2Vuc0IUChJfY2FjaGVfcmVhZF90b2tlbnNCFQoTX2NhY2hlX3dyaXRlX3Rva2VucyIlCiNHZXRUb2tlblRocm91Z2hwdXRTdGF0aXN0aWNzUmVxdWVzdCJgCiRHZXRUb2tlblRocm91Z2hwdXRTdGF0aXN0aWNzUmVzcG9uc2USOAoGcmVzdWx0GAEgASgLMiguaGFnaWNvZGUucGxhdGZvcm0udjEuVG9rZW5UaHJvdWdocHV0RHRvIkQKIEdldFRva2VuVGhyb3VnaHB1dEhpc3RvcnlSZXF1ZXN0EhQKB21pbnV0ZXMYASABKAVIAIgBAUIKCghfbWludXRlcyJiCiFHZXRUb2tlblRocm91Z2hwdXRIaXN0b3J5UmVzcG9uc2USPQoGcmVzdWx0GAEgAygLMi0uaGFnaWNvZGUucGxhdGZvcm0udjEuVG9rZW5UaHJvdWdocHV0U25hcHNob3QiOAoaR2V0SGVyb0JhdHRsZVJlcG9ydFJlcXVlc3QSEQoEZGF0ZRgBIAEoCUgAiAEBQgcKBV9kYXRlIlgKG0dldEhlcm9CYXR0bGVSZXBvcnRSZXNwb25zZRI5CgZyZXN1bHQYASABKAsyKS5oYWdpY29kZS5wbGF0Zm9ybS52MS5IZXJvQmF0dGxlUmVwb3J0RHRvIkAKIEdldEhhZ2lwb3dlckhpc3RvcnlSZXBvcnRSZXF1ZXN0EhIKBXJhbmdlGAEgASgJSACIAQFCCAoGX3JhbmdlImcKIUdldEhhZ2lwb3dlckhpc3RvcnlSZXBvcnRSZXNwb25zZRJCCgZyZXN1bHQYASABKAsyMi5oYWdpY29kZS5wbGF0Zm9ybS52MS5IYWdpcG93ZXJTdGF0aXN0aWNzUmVwb3J0RHRvIuwCChxHZXRIaXN0b3JpY2FsVGltZWxpbmVSZXF1ZXN0EhgKC2VudGl0eV90eXBlGAEgASgJSACIAQESFgoJZW50aXR5X2lkGAIgASgJSAGIAQESFwoKcHJvamVjdF9pZBgDIAEoCUgCiAEBEhcKCnNlc3Npb25faWQYBCABKAlIA4gBARIzCg9yYW5nZV9zdGFydF91dGMYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEjEKDXJhbmdlX2VuZF91dGMYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEhMKBmN1cnNvchgHIAEoCUgEiAEBEhYKCXBhZ2Vfc2l6ZRgIIAEoBUgFiAEBQg4KDF9lbnRpdHlfdHlwZUIMCgpfZW50aXR5X2lkQg0KC19wcm9qZWN0X2lkQg0KC19zZXNzaW9uX2lkQgkKB19jdXJzb3JCDAoKX3BhZ2Vfc2l6ZSJpCh1HZXRIaXN0b3JpY2FsVGltZWxpbmVSZXNwb25zZRJICgZyZXN1bHQYASABKAsyOC5oYWdpY29kZS5wbGF0Zm9ybS52MS5IaXN0b3JpY2FsVGltZWxpbmVRdWVyeVJlc3BvbnNlRHRvIiUKI0dldEhpc3RvcmljYWxUaW1lbGluZVNhbXBsZXNSZXF1ZXN0InIKJEdldEhpc3RvcmljYWxUaW1lbGluZVNhbXBsZXNSZXNwb25zZRJKCgZyZXN1bHQYASABKAsyOi5oYWdpY29kZS5wbGF0Zm9ybS52MS5IaXN0b3JpY2FsVGltZWxpbmVTYW1wbGVzUmVzcG9uc2VEdG8iqgEKFkFnZ3JlZ2F0aW9uTWV0YWRhdGFEdG8SLQoJdGltZXN0YW1wGAEgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIWCg50b3RhbF9wcm9qZWN0cxgCIAEoBRIaChJ0b3RhbF9yZXBvc2l0b3JpZXMYAyABKAUSFwoPZmFpbGVkX3Byb2plY3RzGAQgASgFEhQKDGhhc19mYWlsdXJlcxgFIAEoCCKyBQoYUmVwb3NpdG9yeUFnZ3JlZ2F0aW9uRHRvEhEKBGNvZGUYASABKAlIAIgBARIMCgRuYW1lGAIgASgJEgwKBHBhdGgYAyABKAkSFQoNcmVsYXRpdmVfcGF0aBgEIAEoCRIUCgxkaXNwbGF5X25hbWUYBSABKAkSEQoEdHlwZRgGIAEoCUgBiAEBEgwKBHRhZ3MYByADKAkSEQoEaWNvbhgIIAEoCUgCiAEBEhAKA3VybBgJIAEoCUgDiAEBEhgKEGNvbGxhcHNlX3RvX21vcmUYCiABKAgSGQoRaXNfdmFsaWRfZ2l0X3JlcG8YCyABKAgSHAoUZ2l0X3N0YXR1c19hdmFpbGFibGUYDCABKAgSEwoGYnJhbmNoGA0gASgJSASIAQESHwoXaGFzX3VuY29tbWl0dGVkX2NoYW5nZXMYDiABKAgSHQoVdW5wdXNoZWRfY29tbWl0X2NvdW50GA8gASgFEhsKE2hhc190cmFja2luZ19icmFuY2gYECABKAgSNQoPdHJhY2tpbmdfYnJhbmNoGBEgASgLMhwuZ29vZ2xlLnByb3RvYnVmLlN0cmluZ1ZhbHVlEhMKC2FoZWFkX2NvdW50GBIgASgFEhQKDGJlaGluZF9jb3VudBgTIAEoBRIXCgpzeW5jX3N0YXRlGBQgASgJSAWIAQESEwoLaXNfb3B0aW9uYWwYFSABKAgSFAoMaXNfc2FuaXRpemVkGBYgASgIEhsKE3Nhbml0aXphdGlvbl9yZWFzb24YFyABKAkSGAoQaGFzX25hbWVfd2FybmluZxgYIAEoCBIVCg1uYW1lX3dhcm5pbmdzGBkgAygJQgcKBV9jb2RlQgcKBV90eXBlQgcKBV9pY29uQgYKBF91cmxCCQoHX2JyYW5jaEINCgtfc3luY19zdGF0ZSK6BAoVUHJvamVjdEFnZ3JlZ2F0aW9uRHRvEgoKAmlkGAEgASgJEgwKBG5hbWUYAiABKAkSDAoEcGF0aBgDIAEoCRIYCgtkZXNjcmlwdGlvbhgEIAEoCUgAiAEBEhUKDWlzX21vbm9fc3BlY3MYBSABKAgSHwoSbW9ub19zcGVjc192ZXJzaW9uGAYgASgJSAGIAQESJgoZbW9ub19zcGVjc19yZXBvX2RpcmVjdG9yeRgHIAEoCUgCiAEBEisKHm1vbm9fc3BlY3NfY29tbWl0X3doZW5fYXJjaGl2ZRgIIAEoCEgDiAEBEkQKDHJlcG9zaXRvcmllcxgJIAMoCzIuLmhhZ2ljb2RlLnBsYXRmb3JtLnYxLlJlcG9zaXRvcnlBZ2dyZWdhdGlvbkR0bxJBCh1naXRfc25hcHNob3RfcmVmcmVzaGVkX2F0X3V0YxgKIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASIQoZZ2l0X3NuYXBzaG90X3NlcnZlZF9zdGFsZRgLIAEoCBIrCgVlcnJvchgMIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZRIRCgloYXNfZXJyb3IYDSABKAhCDgoMX2Rlc2NyaXB0aW9uQhUKE19tb25vX3NwZWNzX3ZlcnNpb25CHAoaX21vbm9fc3BlY3NfcmVwb19kaXJlY3RvcnlCIQofX21vbm9fc3BlY3NfY29tbWl0X3doZW5fYXJjaGl2ZSKbAQoaRGF0YUFnZ3JlZ2F0aW9uUmVzcG9uc2VEdG8SPQoIcHJvamVjdHMYASADKAsyKy5oYWdpY29kZS5wbGF0Zm9ybS52MS5Qcm9qZWN0QWdncmVnYXRpb25EdG8SPgoIbWV0YWRhdGEYAiABKAsyLC5oYWdpY29kZS5wbGF0Zm9ybS52MS5BZ2dyZWdhdGlvbk1ldGFkYXRhRHRvIqkDChxUb2tlbk1vbml0b3JVc2FnZVNuYXBzaG90RHRvEg4KBnN0YXR1cxgBIAEoCRIOCgZzb3VyY2UYAiABKAkSGwoOZmFpbHVyZV9yZWFzb24YAyABKAlIAIgBARIVCghkYXRlX2tleRgEIAEoCUgBiAEBEhkKDHRvdGFsX3Rva2VucxgFIAEoA0gCiAEBEhUKCGNvc3RfdXNkGAYgASgBSAOIAQESLwoLcmVhZF9hdF91dGMYByABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEhgKEHNuYXBzaG90X3ZlcnNpb24YCCABKAMSOwoGbGltaXRzGAkgASgLMisuaGFnaWNvZGUucGxhdGZvcm0udjEuVG9rZW5Nb25pdG9yTGltaXRzRHRvEj0KB3BlcmlvZHMYCiABKAsyLC5oYWdpY29kZS5wbGF0Zm9ybS52MS5Ub2tlbk1vbml0b3JQZXJpb2RzRHRvQhEKD19mYWlsdXJlX3JlYXNvbkILCglfZGF0ZV9rZXlCDwoNX3RvdGFsX3Rva2Vuc0ILCglfY29zdF91c2QiugEKFVRva2VuTW9uaXRvckxpbWl0c0R0bxIyCg51cGRhdGVkX2F0X3V0YxgBIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASFwoKcmVmcmVzaF9tcxgCIAEoBUgAiAEBEkUKCXByb3ZpZGVycxgDIAMoCzIyLmhhZ2ljb2RlLnBsYXRmb3JtLnYxLlRva2VuTW9uaXRvckxpbWl0UHJvdmlkZXJEdG9CDQoLX3JlZnJlc2hfbXMi0wIKHFRva2VuTW9uaXRvckxpbWl0UHJvdmlkZXJEdG8SEAoIcHJvdmlkZXIYASABKAkSDgoGc3RhdHVzGAIgASgJEhcKCnBsYW5fbGFiZWwYAyABKAlIAIgBARIyCg51cGRhdGVkX2F0X3V0YxgEIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASQQoHd2luZG93cxgFIAMoCzIwLmhhZ2ljb2RlLnBsYXRmb3JtLnYxLlRva2VuTW9uaXRvckxpbWl0V2luZG93RHRvEhgKC2JhbGFuY2VfdXNkGAYgASgBSAGIAQESSAoNcmVzZXRfY3JlZGl0cxgHIAEoCzIxLmhhZ2ljb2RlLnBsYXRmb3JtLnYxLlRva2VuTW9uaXRvclJlc2V0Q3JlZGl0c0R0b0INCgtfcGxhbl9sYWJlbEIOCgxfYmFsYW5jZV91c2Qi9QMKGlRva2VuTW9uaXRvckxpbWl0V2luZG93RHRvEgwKBGtpbmQYASABKAkSEgoFbGFiZWwYAiABKAlIAIgBARIZCgx1c2VkX3BlcmNlbnQYAyABKAFIAYgBARIeChFyZW1haW5pbmdfcGVyY2VudBgEIAEoAUgCiAEBEhEKBHVzZWQYBSABKAFIA4gBARISCgVsaW1pdBgGIAEoAUgEiAEBEhYKCXJlbWFpbmluZxgHIAEoAUgFiAEBEhUKCGN1cnJlbmN5GAggASgJSAaIAQESMQoNcmVzZXRzX2F0X3V0YxgJIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASGwoOd2luZG93X21pbnV0ZXMYCiABKAVIB4gBARIeChFyZXNldF9kZXNjcmlwdGlvbhgLIAEoCUgIiAEBEhoKDW1ldGVyX3Zpc2libGUYDCABKAhICYgBAUIICgZfbGFiZWxCDwoNX3VzZWRfcGVyY2VudEIUChJfcmVtYWluaW5nX3BlcmNlbnRCBwoFX3VzZWRCCAoGX2xpbWl0QgwKCl9yZW1haW5pbmdCCwoJX2N1cnJlbmN5QhEKD193aW5kb3dfbWludXRlc0IUChJfcmVzZXRfZGVzY3JpcHRpb25CEAoOX21ldGVyX3Zpc2libGUivQEKG1Rva2VuTW9uaXRvclJlc2V0Q3JlZGl0c0R0bxIcCg9hdmFpbGFibGVfY291bnQYASABKAVIAIgBARI3ChNuZXh0X2V4cGlyZXNfYXRfdXRjGAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIzCg9leHBpcmF0aW9uc191dGMYAyADKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQhIKEF9hdmFpbGFibGVfY291bnQizwEKFlRva2VuTW9uaXRvclBlcmlvZHNEdG8SOgoFdG9kYXkYASABKAsyKy5oYWdpY29kZS5wbGF0Zm9ybS52MS5Ub2tlbk1vbml0b3JQZXJpb2REdG8SOgoFbW9udGgYAiABKAsyKy5oYWdpY29kZS5wbGF0Zm9ybS52MS5Ub2tlbk1vbml0b3JQZXJpb2REdG8SPQoIYWxsX3RpbWUYAyABKAsyKy5oYWdpY29kZS5wbGF0Zm9ybS52MS5Ub2tlbk1vbml0b3JQZXJpb2REdG8iigQKFVRva2VuTW9uaXRvclBlcmlvZER0bxIUCgx0b3RhbF90b2tlbnMYASABKAMSEAoIY29zdF91c2QYAiABKAESHgoRY2FjaGVfcmVhZF90b2tlbnMYAyABKANIAIgBARIfChJjYWNoZV93cml0ZV90b2tlbnMYBCABKANIAYgBARIaCg1vdXRwdXRfdG9rZW5zGAUgASgDSAKIAQESGQoMdGltZWRfdG9rZW5zGAYgASgDSAOIAQESIAoTdGltZWRfb3V0cHV0X3Rva2VucxgHIAEoA0gEiAEBEh4KEXRpbWVkX2R1cmF0aW9uX21zGAggASgDSAWIAQESTQoMY2FwYWJpbGl0aWVzGAkgASgLMjcuaGFnaWNvZGUucGxhdGZvcm0udjEuVG9rZW5Nb25pdG9yUGVyaW9kQ2FwYWJpbGl0aWVzRHRvEkIKB2NsaWVudHMYCiADKAsyMS5oYWdpY29kZS5wbGF0Zm9ybS52MS5Ub2tlbk1vbml0b3JQZXJpb2RDbGllbnREdG9CFAoSX2NhY2hlX3JlYWRfdG9rZW5zQhUKE19jYWNoZV93cml0ZV90b2tlbnNCEAoOX291dHB1dF90b2tlbnNCDwoNX3RpbWVkX3Rva2Vuc0IWChRfdGltZWRfb3V0cHV0X3Rva2Vuc0IUChJfdGltZWRfZHVyYXRpb25fbXMifwohVG9rZW5Nb25pdG9yUGVyaW9kQ2FwYWJpbGl0aWVzRHRvEh0KEHRva2VuX2NvbXBvbmVudHMYASABKAhIAIgBARIXCgp0aHJvdWdocHV0GAIgASgISAGIAQFCEwoRX3Rva2VuX2NvbXBvbmVudHNCDQoLX3Rocm91Z2hwdXQiTwobVG9rZW5Nb25pdG9yUGVyaW9kQ2xpZW50RHRvEg4KBmNsaWVudBgBIAEoCRIOCgZ0b2tlbnMYAiABKAMSEAoIY29zdF91c2QYAyABKAEi2AIKElRva2VuVGhyb3VnaHB1dER0bxIfChdpbnB1dF90b2tlbnNfcGVyX21pbnV0ZRgBIAEoBRIgChhvdXRwdXRfdG9rZW5zX3Blcl9taW51dGUYAiABKAUSGgoSdG90YWxfaW5wdXRfdG9rZW5zGAMgASgDEhsKE3RvdGFsX291dHB1dF90b2tlbnMYBCABKAMSMAoMbGFzdF91cGRhdGVkGAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBInCh9yZWd1bGFyX2lucHV0X3Rva2Vuc19wZXJfbWludXRlGAYgASgFEiUKHWNhY2hlX2lucHV0X3Rva2Vuc19wZXJfbWludXRlGAcgASgFEiIKGnRvdGFsX3JlZ3VsYXJfaW5wdXRfdG9rZW5zGAggASgDEiAKGHRvdGFsX2NhY2hlX2lucHV0X3Rva2VucxgJIAEoAyKvAQoXVG9rZW5UaHJvdWdocHV0U25hcHNob3QSLQoJdGltZXN0YW1wGAEgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIUCgxpbnB1dF90b2tlbnMYAiABKAUSFQoNb3V0cHV0X3Rva2VucxgDIAEoBRIcChRyZWd1bGFyX2lucHV0X3Rva2VucxgEIAEoBRIaChJjYWNoZV9pbnB1dF90b2tlbnMYBSABKAUi4AEKLEhlcm9CYXR0bGVSZXBvcnRMYXRlc3RVbmxvY2tlZEFjaGlldmVtZW50RHRvEhUKDWNhbm9uaWNhbF9rZXkYASABKAkSEAoIbmFtZV9rZXkYAiABKAkSEwoLc291cmNlX2tpbmQYAyABKAkSMwoPdW5sb2NrZWRfYXRfdXRjGAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIWCg5wcm9ncmVzc19hZnRlchgFIAEoBRIOCgZ0YXJnZXQYBiABKAUSFQoNcmV3YXJkX2Ftb3VudBgHIAEoAyK7AQopSGVyb0JhdHRsZVJlcG9ydFBlbmRpbmdBY2hpZXZlbWVudEhpbnREdG8SFQoNY2Fub25pY2FsX2tleRgBIAEoCRIQCghuYW1lX2tleRgCIAEoCRIRCglnb2FsX3R5cGUYAyABKAkSEAoIcHJvZ3Jlc3MYBCABKAUSDgoGdGFyZ2V0GAUgASgFEhcKD3JlbWFpbmluZ19jb3VudBgGIAEoBRIXCg9jb21wbGV0aW9uX3JhdGUYByABKAEivQIKJUhlcm9CYXR0bGVSZXBvcnRBY2hpZXZlbWVudFN1bW1hcnlEdG8SGAoQaGFzX2FyY2hpdmVfZGF0YRgBIAEoCBIXCg9jb21wbGV0ZWRfY291bnQYAiABKAUSEwoLdG90YWxfY291bnQYAyABKAUSFwoPY29tcGxldGlvbl9yYXRlGAQgASgBElsKD2xhdGVzdF91bmxvY2tlZBgFIAEoCzJCLmhhZ2ljb2RlLnBsYXRmb3JtLnYxLkhlcm9CYXR0bGVSZXBvcnRMYXRlc3RVbmxvY2tlZEFjaGlldmVtZW50RHRvElYKDXBlbmRpbmdfaGludHMYBiADKAsyPy5oYWdpY29kZS5wbGF0Zm9ybS52MS5IZXJvQmF0dGxlUmVwb3J0UGVuZGluZ0FjaGlldmVtZW50SGludER0byL0AgojSGVyb0JhdHRsZVJlcG9ydEhpZ2hsaWdodFNlc3Npb25EdG8SEgoKc2Vzc2lvbl9pZBgBIAEoCRISCgV0aXRsZRgCIAEoCUgAiAEBEhkKDHNlc3Npb25fY29kZRgDIAEoCUgBiAEBEhkKDHNlc3Npb25fdHlwZRgEIAEoCUgCiAEBEhoKDXByb3Bvc2FsX25hbWUYBSABKAlIA4gBARIWCg5hY3Rpdml0eV9jb3VudBgGIAEoBRIiChpjb21wbGV0ZWRfYXNzaXN0YW5jZV9jb3VudBgHIAEoBRIfChdwcm9wb3NhbF9leGVjdXRlZF9jb3VudBgIIAEoBRI4ChRsYXN0X2FjdGl2aXR5X2F0X3V0YxgJIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCCAoGX3RpdGxlQg8KDV9zZXNzaW9uX2NvZGVCDwoNX3Nlc3Npb25fdHlwZUIQCg5fcHJvcG9zYWxfbmFtZSKnAwoiSGVyb0JhdHRsZVJlcG9ydEFjdGl2aXR5U3VtbWFyeUR0bxIdChVzZXNzaW9uX2NyZWF0ZWRfY291bnQYASABKAUSIgoaY2hhdF9zZXNzaW9uX2NyZWF0ZWRfY291bnQYAiABKAUSJgoecHJvcG9zYWxfc2Vzc2lvbl9jcmVhdGVkX2NvdW50GAMgASgFEhYKDnByb3Bvc2FsX2NvdW50GAQgASgFEiAKGHByb3Bvc2FsX2dlbmVyYXRlZF9jb3VudBgFIAEoBRIfChdwcm9wb3NhbF9leGVjdXRlZF9jb3VudBgGIAEoBRIfChdwcm9wb3NhbF9hcmNoaXZlZF9jb3VudBgHIAEoBRIiChphc3Npc3RhbmNlX2NvbXBsZXRlZF9jb3VudBgIIAEoBRIfChdhc3Npc3RhbmNlX2ZhaWxlZF9jb3VudBgJIAEoBRJVChJoaWdobGlnaHRfc2Vzc2lvbnMYCiADKAsyOS5oYWdpY29kZS5wbGF0Zm9ybS52MS5IZXJvQmF0dGxlUmVwb3J0SGlnaGxpZ2h0U2Vzc2lvbkR0byJGCiNIZXJvQmF0dGxlUmVwb3J0Q29tcGFyaXNvbk1ldHJpY0R0bxIQCghwcmV2aW91cxgBIAEoAxINCgVkZWx0YRgCIAEoAyK8BQodSGVyb0JhdHRsZVJlcG9ydENvbXBhcmlzb25EdG8SGAoQaGFzX3ByZXZpb3VzX2RheRgBIAEoCBIaCg1wcmV2aW91c19kYXRlGAIgASgJSACIAQESVAoRYWN0aXZlX2hlcm9fY291bnQYAyABKAsyOS5oYWdpY29kZS5wbGF0Zm9ybS52MS5IZXJvQmF0dGxlUmVwb3J0Q29tcGFyaXNvbk1ldHJpY0R0bxJSCg9leGVjdXRpb25fY291bnQYBCABKAsyOS5oYWdpY29kZS5wbGF0Zm9ybS52MS5IZXJvQmF0dGxlUmVwb3J0Q29tcGFyaXNvbk1ldHJpY0R0bxJSCg90b29sX2NhbGxfY291bnQYBSABKAsyOS5oYWdpY29kZS5wbGF0Zm9ybS52MS5IZXJvQmF0dGxlUmVwb3J0Q29tcGFyaXNvbk1ldHJpY0R0bxJPCgx0b3RhbF90b2tlbnMYBiABKAsyOS5oYWdpY29kZS5wbGF0Zm9ybS52MS5IZXJvQmF0dGxlUmVwb3J0Q29tcGFyaXNvbk1ldHJpY0R0bxJYChVzZXNzaW9uX2NyZWF0ZWRfY291bnQYByABKAsyOS5oYWdpY29kZS5wbGF0Zm9ybS52MS5IZXJvQmF0dGxlUmVwb3J0Q29tcGFyaXNvbk1ldHJpY0R0bxJRCg5wcm9wb3NhbF9jb3VudBgIIAEoCzI5LmhhZ2ljb2RlLnBsYXRmb3JtLnYxLkhlcm9CYXR0bGVSZXBvcnRDb21wYXJpc29uTWV0cmljRHRvElcKFGhhZ2lwb3dlcl9uZXRfY2hhbmdlGAkgASgLMjkuaGFnaWNvZGUucGxhdGZvcm0udjEuSGVyb0JhdHRsZVJlcG9ydENvbXBhcmlzb25NZXRyaWNEdG9CEAoOX3ByZXZpb3VzX2RhdGUixgEKG0hlcm9CYXR0bGVSZXBvcnRFeGVjdXRvckR0bxIVCg1leGVjdXRvcl90eXBlGAEgASgJEhIKCmhlcm9fY291bnQYAiABKAUSGQoRYWN0aXZlX2hlcm9fY291bnQYAyABKAUSFwoPZXhlY3V0aW9uX2NvdW50GAQgASgFEhcKD3Rvb2xfY2FsbF9jb3VudBgFIAEoBRIUCgx0b3RhbF90b2tlbnMYBiABKAMSGQoRdG90YWxfZHVyYXRpb25fbXMYByABKAMiuAEKIUhlcm9CYXR0bGVSZXBvcnRIYWdpcG93ZXJQb2ludER0bxI1ChFidWNrZXRfbWludXRlX3V0YxgBIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASDwoHYmFsYW5jZRgCIAEoAxIVCg10b3RhbF9iYWxhbmNlGAMgASgDEiEKGWFjY3VtdWxhdGVkX3RvdGFsX2JhbGFuY2UYBCABKAMSEQoJaXNfZmlsbGVkGAUgASgIItwDChxIZXJvQmF0dGxlUmVwb3J0SGFnaXBvd2VyRHRvEjMKD3JhbmdlX3N0YXJ0X3V0YxgBIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASMQoNcmFuZ2VfZW5kX3V0YxgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASFgoOYnVja2V0X21pbnV0ZXMYAyABKAUSFwoPaGFzX2ZpbGxlZF9nYXBzGAQgASgIEhwKFGhhc19yZWNvcmRlZF9oaXN0b3J5GAUgASgIEh4KFmN1cnJlbnRfcHVibGljX2JhbGFuY2UYBiABKAMSHQoVY3VycmVudF90b3RhbF9iYWxhbmNlGAcgASgDEikKIWN1cnJlbnRfYWNjdW11bGF0ZWRfdG90YWxfYmFsYW5jZRgIIAEoAxISCgpuZXRfY2hhbmdlGAkgASgDEjcKE2xhc3RfdXBkYXRlZF9hdF91dGMYCiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEk4KDXB1YmxpY19zZXJpZXMYCyADKAsyNy5oYWdpY29kZS5wbGF0Zm9ybS52MS5IZXJvQmF0dGxlUmVwb3J0SGFnaXBvd2VyUG9pbnREdG8iiQQKF0hlcm9CYXR0bGVSZXBvcnRIZXJvRHRvEg8KB2hlcm9faWQYASABKAkSEQoJaGVyb19uYW1lGAIgASgJEhYKCWhlcm9faWNvbhgDIAEoCUgAiAEBEhUKDWV4ZWN1dG9yX3R5cGUYBCABKAkSEgoFbW9kZWwYBSABKAlIAYgBARIYCgtkZXNjcmlwdGlvbhgGIAEoCUgCiAEBEgwKBHJhbmsYByABKAUSDgoGc3RhdHVzGAggASgJEg0KBWdyYWRlGAkgASgJEhQKDGJhdHRsZV9zY29yZRgKIAEoBRIXCg9leGVjdXRpb25fY291bnQYCyABKAUSFwoPdG9vbF9jYWxsX2NvdW50GAwgASgFEhQKDGlucHV0X3Rva2VucxgNIAEoAxIaChJjYWNoZV9pbnB1dF90b2tlbnMYDiABKAMSFQoNb3V0cHV0X3Rva2VucxgPIAEoAxIbChNjYWNoZV9vdXRwdXRfdG9rZW5zGBAgASgDEhQKDHRvdGFsX3Rva2VucxgRIAEoAxIZChF0b3RhbF9kdXJhdGlvbl9tcxgSIAEoAxI5ChVsYXN0X2NvbXBsZXRlZF9hdF91dGMYEyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQgwKCl9oZXJvX2ljb25CCAoGX21vZGVsQg4KDF9kZXNjcmlwdGlvbiKAAgoiSGVyb0JhdHRsZVJlcG9ydFByb2plY3RBY3Rpdml0eUR0bxISCgpwcm9qZWN0X2lkGAEgASgJEhEKBG5hbWUYAiABKAlIAIgBARIWCg5hY3Rpdml0eV9jb3VudBgDIAEoBRIdChVzZXNzaW9uX2NyZWF0ZWRfY291bnQYBCABKAUSFgoOcHJvcG9zYWxfY291bnQYBSABKAUSIgoaYXNzaXN0YW5jZV9jb21wbGV0ZWRfY291bnQYBiABKAUSHwoXYXNzaXN0YW5jZV9mYWlsZWRfY291bnQYByABKAUSFgoOYWN0aXZpdHlfc2hhcmUYCCABKAFCBwoFX25hbWUi+gEKIUhlcm9CYXR0bGVSZXBvcnRQcm9qZWN0UHJvZmlsZUR0bxIQCghoYXNfZGF0YRgBIAEoCBIdChVwcm9qZWN0X2NyZWF0ZWRfY291bnQYAiABKAMSHQoVc2Vzc2lvbl9jcmVhdGVkX2NvdW50GAMgASgDEiAKGHByb3Bvc2FsX2dlbmVyYXRlZF9jb3VudBgEIAEoAxIfChdwcm9wb3NhbF9leGVjdXRlZF9jb3VudBgFIAEoAxITCgt0b2tlbl90b3RhbBgGIAEoAxItCglhc19vZl91dGMYByABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIo0CChtIZXJvQmF0dGxlUmVwb3J0UHJvamVjdHNEdG8SGwoTdG90YWxfcHJvamVjdF9jb3VudBgBIAEoBRIcChRhY3RpdmVfcHJvamVjdF9jb3VudBgCIAEoBRIZChFuZXdfcHJvamVjdF9jb3VudBgDIAEoBRJOCgx0b3BfcHJvamVjdHMYBCADKAsyOC5oYWdpY29kZS5wbGF0Zm9ybS52MS5IZXJvQmF0dGxlUmVwb3J0UHJvamVjdEFjdGl2aXR5RHRvEkgKB3Byb2ZpbGUYBSABKAsyNy5oYWdpY29kZS5wbGF0Zm9ybS52MS5IZXJvQmF0dGxlUmVwb3J0UHJvamVjdFByb2ZpbGVEdG8irQIKFkhlcm9CYXR0bGVSZXBvcnRNdnBEdG8SDwoHaGVyb19pZBgBIAEoCRIRCgloZXJvX25hbWUYAiABKAkSFgoJaGVyb19pY29uGAMgASgJSACIAQESFQoNZXhlY3V0b3JfdHlwZRgEIAEoCRISCgVtb2RlbBgFIAEoCUgBiAEBEgwKBHJhbmsYBiABKAUSFAoMYmF0dGxlX3Njb3JlGAcgASgFEg0KBWdyYWRlGAggASgJEhcKD2V4ZWN1dGlvbl9jb3VudBgJIAEoBRIXCg90b29sX2NhbGxfY291bnQYCiABKAUSFAoMdG90YWxfdG9rZW5zGAsgASgDEhkKEXRvdGFsX2R1cmF0aW9uX21zGAwgASgDQgwKCl9oZXJvX2ljb25CCAoGX21vZGVsItkCChpIZXJvQmF0dGxlUmVwb3J0U3VtbWFyeUR0bxIYChB0b3RhbF9oZXJvX2NvdW50GAEgASgFEhkKEWFjdGl2ZV9oZXJvX2NvdW50GAIgASgFEhoKEnRvdGFsX2JhdHRsZV9zY29yZRgDIAEoBRIYChB0b3RhbF90b29sX2NhbGxzGAQgASgFEhQKDHRvdGFsX3Rva2VucxgFIAEoAxIZChF0b3RhbF9kdXJhdGlvbl9tcxgGIAEoAxIUCgxpbnB1dF90b2tlbnMYByABKAMSGgoSY2FjaGVfaW5wdXRfdG9rZW5zGAggASgDEhUKDW91dHB1dF90b2tlbnMYCSABKAMSGwoTY2FjaGVfb3V0cHV0X3Rva2VucxgKIAEoAxI5CgNtdnAYCyABKAsyLC5oYWdpY29kZS5wbGF0Zm9ybS52MS5IZXJvQmF0dGxlUmVwb3J0TXZwRHRvIqYGChNIZXJvQmF0dGxlUmVwb3J0RHRvEhMKC3JlcG9ydF9kYXRlGAEgASgJEjQKEGdlbmVyYXRlZF9hdF91dGMYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEhQKDHRpbWVfem9uZV9pZBgDIAEoCRI1ChFjb3ZlcmVkX3N0YXJ0X3V0YxgEIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASMwoPY292ZXJlZF9lbmRfdXRjGAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBJFCgloYWdpcG93ZXIYBiABKAsyMi5oYWdpY29kZS5wbGF0Zm9ybS52MS5IZXJvQmF0dGxlUmVwb3J0SGFnaXBvd2VyRHRvEkEKB3N1bW1hcnkYByABKAsyMC5oYWdpY29kZS5wbGF0Zm9ybS52MS5IZXJvQmF0dGxlUmVwb3J0U3VtbWFyeUR0bxJRCgxhY2hpZXZlbWVudHMYCCABKAsyOy5oYWdpY29kZS5wbGF0Zm9ybS52MS5IZXJvQmF0dGxlUmVwb3J0QWNoaWV2ZW1lbnRTdW1tYXJ5RHRvElIKEGFjdGl2aXR5X3N1bW1hcnkYCSABKAsyOC5oYWdpY29kZS5wbGF0Zm9ybS52MS5IZXJvQmF0dGxlUmVwb3J0QWN0aXZpdHlTdW1tYXJ5RHRvEkcKCmNvbXBhcmlzb24YCiABKAsyMy5oYWdpY29kZS5wbGF0Zm9ybS52MS5IZXJvQmF0dGxlUmVwb3J0Q29tcGFyaXNvbkR0bxJECglleGVjdXRvcnMYCyADKAsyMS5oYWdpY29kZS5wbGF0Zm9ybS52MS5IZXJvQmF0dGxlUmVwb3J0RXhlY3V0b3JEdG8SQwoIcHJvamVjdHMYDCABKAsyMS5oYWdpY29kZS5wbGF0Zm9ybS52MS5IZXJvQmF0dGxlUmVwb3J0UHJvamVjdHNEdG8SPQoGaGVyb2VzGA0gAygLMi0uaGFnaWNvZGUucGxhdGZvcm0udjEuSGVyb0JhdHRsZVJlcG9ydEhlcm9EdG8itQEKHkhhZ2lwb3dlclB1YmxpY0hpc3RvcnlQb2ludER0bxI1ChFidWNrZXRfbWludXRlX3V0YxgBIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASDwoHYmFsYW5jZRgCIAEoAxIVCg10b3RhbF9iYWxhbmNlGAMgASgDEiEKGWFjY3VtdWxhdGVkX3RvdGFsX2JhbGFuY2UYBCABKAMSEQoJaXNfZmlsbGVkGAUgASgIItcBCh5IYWdpcG93ZXJTdGF0aXN0aWNzTWV0YWRhdGFEdG8SMwoPcmFuZ2Vfc3RhcnRfdXRjGAEgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIxCg1yYW5nZV9lbmRfdXRjGAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIWCg5idWNrZXRfbWludXRlcxgDIAEoBRIXCg9oYXNfZmlsbGVkX2dhcHMYBCABKAgSHAoUaGFzX3JlY29yZGVkX2hpc3RvcnkYBSABKAgi1gEKHUhhZ2lwb3dlclN0YXRpc3RpY3NTdW1tYXJ5RHRvEh4KFmN1cnJlbnRfcHVibGljX2JhbGFuY2UYASABKAMSHQoVY3VycmVudF90b3RhbF9iYWxhbmNlGAIgASgDEikKIWN1cnJlbnRfYWNjdW11bGF0ZWRfdG90YWxfYmFsYW5jZRgDIAEoAxISCgpuZXRfY2hhbmdlGAQgASgDEjcKE2xhc3RfdXBkYXRlZF9hdF91dGMYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIogCChxIYWdpcG93ZXJTdGF0aXN0aWNzUmVwb3J0RHRvEg0KBXJhbmdlGAEgASgJEkYKCG1ldGFkYXRhGAIgASgLMjQuaGFnaWNvZGUucGxhdGZvcm0udjEuSGFnaXBvd2VyU3RhdGlzdGljc01ldGFkYXRhRHRvEkQKB3N1bW1hcnkYAyABKAsyMy5oYWdpY29kZS5wbGF0Zm9ybS52MS5IYWdpcG93ZXJTdGF0aXN0aWNzU3VtbWFyeUR0bxJLCg1wdWJsaWNfc2VyaWVzGAQgAygLMjQuaGFnaWNvZGUucGxhdGZvcm0udjEuSGFnaXBvd2VyUHVibGljSGlzdG9yeVBvaW50RHRvIrsDChpIaXN0b3JpY2FsVGltZWxpbmVFdmVudER0bxIQCghldmVudF9pZBgBIAEoCRIzCg9vY2N1cnJlZF9hdF91dGMYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEjIKDmNyZWF0ZWRfYXRfdXRjGAMgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBITCgtlbnRpdHlfdHlwZRgEIAEoCRIRCgllbnRpdHlfaWQYBSABKAkSFwoKcHJvamVjdF9pZBgGIAEoCUgAiAEBEhcKCnNlc3Npb25faWQYByABKAlIAYgBARIMCgRjb2RlGAggASgJEigKCG1ldGFkYXRhGAkgASgLMhYuZ29vZ2xlLnByb3RvYnVmLlZhbHVlEhMKBnNvdXJjZRgKIAEoCUgCiAEBEhUKCGFjdG9yX2lkGAsgASgJSAOIAQESGwoOY29ycmVsYXRpb25faWQYDCABKAlIBIgBAUINCgtfcHJvamVjdF9pZEINCgtfc2Vzc2lvbl9pZEIJCgdfc291cmNlQgsKCV9hY3Rvcl9pZEIRCg9fY29ycmVsYXRpb25faWQiiAEKH0hpc3RvcmljYWxUaW1lbGluZVBhZ2luYXRpb25EdG8SEQoJcGFnZV9zaXplGAEgASgFEhYKDnJldHVybmVkX2NvdW50GAIgASgFEhAKCGhhc19tb3JlGAMgASgIEhgKC25leHRfY3Vyc29yGAQgASgJSACIAQFCDgoMX25leHRfY3Vyc29yIrABCiJIaXN0b3JpY2FsVGltZWxpbmVRdWVyeVJlc3BvbnNlRHRvEj8KBWl0ZW1zGAEgAygLMjAuaGFnaWNvZGUucGxhdGZvcm0udjEuSGlzdG9yaWNhbFRpbWVsaW5lRXZlbnREdG8SSQoKcGFnaW5hdGlvbhgCIAEoCzI1LmhhZ2ljb2RlLnBsYXRmb3JtLnYxLkhpc3RvcmljYWxUaW1lbGluZVBhZ2luYXRpb25EdG8imwMKIEhpc3RvcmljYWxUaW1lbGluZUV2ZW50U2FtcGxlRHRvEhMKC2VudGl0eV90eXBlGAEgASgJEgwKBGNvZGUYAiABKAkSGAoQc2FtcGxlX2VudGl0eV9pZBgDIAEoCRIeChFzYW1wbGVfcHJvamVjdF9pZBgEIAEoCUgAiAEBEh4KEXNhbXBsZV9zZXNzaW9uX2lkGAUgASgJSAGIAQESGgoNc2FtcGxlX3NvdXJjZRgGIAEoCUgCiAEBEhwKD3NhbXBsZV9hY3Rvcl9pZBgHIAEoCUgDiAEBEiIKFXNhbXBsZV9jb3JyZWxhdGlvbl9pZBgIIAEoCUgEiAEBEjAKEG1ldGFkYXRhX2V4YW1wbGUYCSABKAsyFi5nb29nbGUucHJvdG9idWYuVmFsdWVCFAoSX3NhbXBsZV9wcm9qZWN0X2lkQhQKEl9zYW1wbGVfc2Vzc2lvbl9pZEIQCg5fc2FtcGxlX3NvdXJjZUISChBfc2FtcGxlX2FjdG9yX2lkQhgKFl9zYW1wbGVfY29ycmVsYXRpb25faWQibQokSGlzdG9yaWNhbFRpbWVsaW5lU2FtcGxlc1Jlc3BvbnNlRHRvEkUKBWl0ZW1zGAEgAygLMjYuaGFnaWNvZGUucGxhdGZvcm0udjEuSGlzdG9yaWNhbFRpbWVsaW5lRXZlbnRTYW1wbGVEdG8y7QoKEVN0YXRpc3RpY3NTZXJ2aWNlEnQKEUdldEFnZ3JlZ2F0ZWREYXRhEi4uaGFnaWNvZGUucGxhdGZvcm0udjEuR2V0QWdncmVnYXRlZERhdGFSZXF1ZXN0Gi8uaGFnaWNvZGUucGxhdGZvcm0udjEuR2V0QWdncmVnYXRlZERhdGFSZXNwb25zZRJ9ChRHZXRUb2tlbk1vbml0b3JVc2FnZRIxLmhhZ2ljb2RlLnBsYXRmb3JtLnYxLkdldFRva2VuTW9uaXRvclVzYWdlUmVxdWVzdBoyLmhhZ2ljb2RlLnBsYXRmb3JtLnYxLkdldFRva2VuTW9uaXRvclVzYWdlUmVzcG9uc2USgwEKFkdldFRva2VuTW9uaXRvckhpc3RvcnkSMy5oYWdpY29kZS5wbGF0Zm9ybS52MS5HZXRUb2tlbk1vbml0b3JIaXN0b3J5UmVxdWVzdBo0LmhhZ2ljb2RlLnBsYXRmb3JtLnYxLkdldFRva2VuTW9uaXRvckhpc3RvcnlSZXNwb25zZRKPAQoaR2V0VG9rZW5Nb25pdG9ySG91cmx5VXNhZ2USNy5oYWdpY29kZS5wbGF0Zm9ybS52MS5HZXRUb2tlbk1vbml0b3JIb3VybHlVc2FnZVJlcXVlc3QaOC5oYWdpY29kZS5wbGF0Zm9ybS52MS5HZXRUb2tlbk1vbml0b3JIb3VybHlVc2FnZVJlc3BvbnNlEpUBChxHZXRUb2tlblRocm91Z2hwdXRTdGF0aXN0aWNzEjkuaGFnaWNvZGUucGxhdGZvcm0udjEuR2V0VG9rZW5UaHJvdWdocHV0U3RhdGlzdGljc1JlcXVlc3QaOi5oYWdpY29kZS5wbGF0Zm9ybS52MS5HZXRUb2tlblRocm91Z2hwdXRTdGF0aXN0aWNzUmVzcG9uc2USjAEKGUdldFRva2VuVGhyb3VnaHB1dEhpc3RvcnkSNi5oYWdpY29kZS5wbGF0Zm9ybS52MS5HZXRUb2tlblRocm91Z2hwdXRIaXN0b3J5UmVxdWVzdBo3LmhhZ2ljb2RlLnBsYXRmb3JtLnYxLkdldFRva2VuVGhyb3VnaHB1dEhpc3RvcnlSZXNwb25zZRJ6ChNHZXRIZXJvQmF0dGxlUmVwb3J0EjAuaGFnaWNvZGUucGxhdGZvcm0udjEuR2V0SGVyb0JhdHRsZVJlcG9ydFJlcXVlc3QaMS5oYWdpY29kZS5wbGF0Zm9ybS52MS5HZXRIZXJvQmF0dGxlUmVwb3J0UmVzcG9uc2USjAEKGUdldEhhZ2lwb3dlckhpc3RvcnlSZXBvcnQSNi5oYWdpY29kZS5wbGF0Zm9ybS52MS5HZXRIYWdpcG93ZXJIaXN0b3J5UmVwb3J0UmVxdWVzdBo3LmhhZ2ljb2RlLnBsYXRmb3JtLnYxLkdldEhhZ2lwb3dlckhpc3RvcnlSZXBvcnRSZXNwb25zZRKAAQoVR2V0SGlzdG9yaWNhbFRpbWVsaW5lEjIuaGFnaWNvZGUucGxhdGZvcm0udjEuR2V0SGlzdG9yaWNhbFRpbWVsaW5lUmVxdWVzdBozLmhhZ2ljb2RlLnBsYXRmb3JtLnYxLkdldEhpc3RvcmljYWxUaW1lbGluZVJlc3BvbnNlEpUBChxHZXRIaXN0b3JpY2FsVGltZWxpbmVTYW1wbGVzEjkuaGFnaWNvZGUucGxhdGZvcm0udjEuR2V0SGlzdG9yaWNhbFRpbWVsaW5lU2FtcGxlc1JlcXVlc3QaOi5oYWdpY29kZS5wbGF0Zm9ybS52MS5HZXRIaXN0b3JpY2FsVGltZWxpbmVTYW1wbGVzUmVzcG9uc2VCKqoCJ1BDb2RlLkh0dHBBcGkuR3JwY0NvbnRyYWN0cy5QbGF0Zm9ybS5WMWIGcHJvdG8z",[Ue,Ne,_i]),jh=v(Is,1),Hh=We(Is,0),de=oe("CiJoYWdpY29kZS9zZXNzaW9uL3YxL3Nlc3Npb25zLnByb3RvEhNoYWdpY29kZS5zZXNzaW9uLnYxIlUKFk9wZW5DaGF0U2Vzc2lvblJlcXVlc3QSOwoEYm9keRgBIAEoCzItLmhhZ2ljb2RlLnNlc3Npb24udjEuQ3JlYXRlQ2hhdFNlc3Npb25SZXF1ZXN0IlIKF09wZW5DaGF0U2Vzc2lvblJlc3BvbnNlEjcKBnJlc3VsdBgBIAEoCzInLmhhZ2ljb2RlLnNlc3Npb24udjEuU2Vzc2lvblJlc3BvbnNlRHRvIk0KEk9wZW5TZXNzaW9uUmVxdWVzdBI3CgRib2R5GAEgASgLMikuaGFnaWNvZGUuc2Vzc2lvbi52MS5DcmVhdGVTZXNzaW9uUmVxdWVzdCJOChNPcGVuU2Vzc2lvblJlc3BvbnNlEjcKBnJlc3VsdBgBIAEoCzInLmhhZ2ljb2RlLnNlc3Npb24udjEuU2Vzc2lvblJlc3BvbnNlRHRvIicKEUdldFNlc3Npb25SZXF1ZXN0EhIKCnNlc3Npb25faWQYASABKAkiTQoSR2V0U2Vzc2lvblJlc3BvbnNlEjcKBnJlc3VsdBgBIAEoCzInLmhhZ2ljb2RlLnNlc3Npb24udjEuU2Vzc2lvblJlc3BvbnNlRHRvImEKElNhdmVTZXNzaW9uUmVxdWVzdBISCgpzZXNzaW9uX2lkGAEgASgJEjcKBGJvZHkYAiABKAsyKS5oYWdpY29kZS5zZXNzaW9uLnYxLlVwZGF0ZVNlc3Npb25SZXF1ZXN0Ik4KE1NhdmVTZXNzaW9uUmVzcG9uc2USNwoGcmVzdWx0GAEgASgLMicuaGFnaWNvZGUuc2Vzc2lvbi52MS5TZXNzaW9uUmVzcG9uc2VEdG8izAEKE0xpc3RTZXNzaW9uc1JlcXVlc3QSEQoEdHlwZRgBIAEoCUgAiAEBEhgKC2FjdGl2ZV9vbmx5GAIgASgISAGIAQESHQoQaW5jbHVkZV9hcmNoaXZlZBgDIAEoCEgCiAEBEhcKCnByb2plY3RfaWQYBCABKAlIA4gBARITCgtwcm9qZWN0X2lkcxgFIAMoCUIHCgVfdHlwZUIOCgxfYWN0aXZlX29ubHlCEwoRX2luY2x1ZGVfYXJjaGl2ZWRCDQoLX3Byb2plY3RfaWQiUwoUTGlzdFNlc3Npb25zUmVzcG9uc2USOwoGcmVzdWx0GAEgASgLMisuaGFnaWNvZGUuc2Vzc2lvbi52MS5TZXNzaW9uTGlzdFJlc3BvbnNlRHRvIkAKFERlbGV0ZVNlc3Npb25SZXF1ZXN0EhIKCnNlc3Npb25faWQYASABKAkSFAoMZGVsZXRlX2ZpbGVzGAIgASgIIlYKFURlbGV0ZVNlc3Npb25SZXNwb25zZRI9CgZyZXN1bHQYASABKAsyLS5oYWdpY29kZS5zZXNzaW9uLnYxLlNpbXBsZU1lc3NhZ2VSZXNwb25zZUR0byIvChlBcmNoaXZlQ2hhdFNlc3Npb25SZXF1ZXN0EhIKCnNlc3Npb25faWQYASABKAkiWwoaQXJjaGl2ZUNoYXRTZXNzaW9uUmVzcG9uc2USPQoGcmVzdWx0GAEgASgLMi0uaGFnaWNvZGUuc2Vzc2lvbi52MS5TaW1wbGVNZXNzYWdlUmVzcG9uc2VEdG8idAoZU3dpdGNoU3RvcHBlZEFnZW50UmVxdWVzdBISCgpzZXNzaW9uX2lkGAEgASgJEkMKBGJvZHkYAiABKAsyNS5oYWdpY29kZS5zZXNzaW9uLnYxLlN3aXRjaFN0b3BwZWRTZXNzaW9uQWdlbnRSZXF1ZXN0IlUKGlN3aXRjaFN0b3BwZWRBZ2VudFJlc3BvbnNlEjcKBnJlc3VsdBgBIAEoCzInLmhhZ2ljb2RlLnNlc3Npb24udjEuU2Vzc2lvblJlc3BvbnNlRHRvIl4KG1N0YXJ0SGFnaVRhc2tTZXNzaW9uUmVxdWVzdBI/CgRib2R5GAEgASgLMjEuaGFnaWNvZGUuc2Vzc2lvbi52MS5DcmVhdGVIYWdpVGFza1Nlc3Npb25SZXF1ZXN0IlcKHFN0YXJ0SGFnaVRhc2tTZXNzaW9uUmVzcG9uc2USNwoGcmVzdWx0GAEgASgLMicuaGFnaWNvZGUuc2Vzc2lvbi52MS5TZXNzaW9uUmVzcG9uc2VEdG8iZAohU3RhcnRMZWdhY3lIYWdpVGFza1Nlc3Npb25SZXF1ZXN0Ej8KBGJvZHkYASABKAsyMS5oYWdpY29kZS5zZXNzaW9uLnYxLkNyZWF0ZUhhZ2lUYXNrU2Vzc2lvblJlcXVlc3QiXQoiU3RhcnRMZWdhY3lIYWdpVGFza1Nlc3Npb25SZXNwb25zZRI3CgZyZXN1bHQYASABKAsyJy5oYWdpY29kZS5zZXNzaW9uLnYxLlNlc3Npb25SZXNwb25zZUR0byLOAwoSQ2hhdEhlcm9TdW1tYXJ5RHRvEg8KB2hlcm9faWQYASABKAkSDAoEbmFtZRgCIAEoCRIYCgtkZXNjcmlwdGlvbhgDIAEoCUgAiAEBEhEKBGljb24YBCABKAlIAYgBARIVCg1leGVjdXRvcl90eXBlGAUgASgJEhkKDGFnZW50X2NsaV9pZBgGIAEoCUgCiAEBEhsKDmFnZW50X2NsaV9uYW1lGAcgASgJSAOIAQESGwoOYWdlbnRfY2xpX2ljb24YCCABKAlIBIgBARIVCghtb2RlbF9pZBgJIAEoCUgFiAEBEhcKCm1vZGVsX25hbWUYCiABKAlIBogBARIXCgptb2RlbF9pY29uGAsgASgJSAeIAQESIgoVc2Vjb25kYXJ5X21vZGVsX2xhYmVsGAwgASgJSAiIAQFCDgoMX2Rlc2NyaXB0aW9uQgcKBV9pY29uQg8KDV9hZ2VudF9jbGlfaWRCEQoPX2FnZW50X2NsaV9uYW1lQhEKD19hZ2VudF9jbGlfaWNvbkILCglfbW9kZWxfaWRCDQoLX21vZGVsX25hbWVCDQoLX21vZGVsX2ljb25CGAoWX3NlY29uZGFyeV9tb2RlbF9sYWJlbCI4ChRPcGVuU3BlY1Rhc2tQcm9ncmVzcxIRCgljb21wbGV0ZWQYASABKAUSDQoFdG90YWwYAiABKAUi/gEKEE9wZW5TcGVjRmlsZUluZm8SEQoJZmlsZV9uYW1lGAEgASgJEhUKDXJlbGF0aXZlX3BhdGgYAiABKAkSDgoGZXhpc3RzGAMgASgIEhEKCWZpbGVfdHlwZRgEIAEoCRITCgtpc19yZXF1aXJlZBgFIAEoCBITCgtpc19hcmNoaXZlZBgGIAEoCBIxCg1hcmNoaXZlZF9kYXRlGAcgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBJACg10YXNrX3Byb2dyZXNzGAggASgLMikuaGFnaWNvZGUuc2Vzc2lvbi52MS5PcGVuU3BlY1Rhc2tQcm9ncmVzcyJcChFPcGVuU3BlY0ZpbGVzSW5mbxIRCgliYXNlX3BhdGgYASABKAkSNAoFZmlsZXMYAiADKAsyJS5oYWdpY29kZS5zZXNzaW9uLnYxLk9wZW5TcGVjRmlsZUluZm8i3gIKFlF1ZXVlTWVzc2FnZVN1bW1hcnlEdG8SDQoFaW5kZXgYASABKAUSDAoEbW9kZRgCIAEoBRItCglxdWV1ZWRfYXQYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEhcKD2NvbnRlbnRfcHJldmlldxgEIAEoCRIhChRleGVjdXRpb25fbWVzc2FnZV9pZBgFIAEoCUgAiAEBEhEKCWNhbl9zdGVlchgGIAEoCBIWCglzY2hlZHVsZWQYByABKAhIAYgBARIuCgpkdWVfYXRfdXRjGAggASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIhChRzY2hlZHVsZWRfbWVzc2FnZV9pZBgJIAEoCUgCiAEBQhcKFV9leGVjdXRpb25fbWVzc2FnZV9pZEIMCgpfc2NoZWR1bGVkQhcKFV9zY2hlZHVsZWRfbWVzc2FnZV9pZCKAAQoWU2Vzc2lvbk5vdGlmaWNhdGlvbkR0bxIMCgRraW5kGAEgASgJEi8KC29ic2VydmVkX2F0GAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBInCgdwYXlsb2FkGAMgASgLMhYuZ29vZ2xlLnByb3RvYnVmLlZhbHVlIu0BChZTZXNzaW9uVXNhZ2VTdW1tYXJ5RHRvEhoKDXByb21wdF90b2tlbnMYASABKAVIAIgBARIhChRjYWNoZWRfcHJvbXB0X3Rva2VucxgCIAEoBUgBiAEBEh4KEWNvbXBsZXRpb25fdG9rZW5zGAMgASgFSAKIAQESMwoPbGFzdF91cGRhdGVkX2F0GAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEIQCg5fcHJvbXB0X3Rva2Vuc0IXChVfY2FjaGVkX3Byb21wdF90b2tlbnNCFAoSX2NvbXBsZXRpb25fdG9rZW5zIl8KFFN0YWdlRXhlY3V0b3JJbmZvRHRvEhUKDXByb3ZpZGVyX3R5cGUYASABKAkSMAoMbGFzdF91cGRhdGVkGAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCK8AgoVU3RhZ2VIZXJvU2VsZWN0aW9uRHRvEhEKCXN0YWdlX2tleRgBIAEoCRISCgpzY3JpcHRfa2V5GAIgASgJEhUKDXNjZW5hcmlvX25hbWUYAyABKAkSFAoHaGVyb19pZBgEIAEoCUgAiAEBEhYKCWhlcm9fbmFtZRgFIAEoCUgBiAEBEhYKCWhlcm9faWNvbhgGIAEoCUgCiAEBEhUKDWV4ZWN1dG9yX3R5cGUYByABKAkSFQoNdXNlZF9mYWxsYmFjaxgIIAEoCBIYChBzZWxlY3Rpb25fc291cmNlGAkgASgJEi8KC3NlbGVjdGVkX2F0GAogASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEIKCghfaGVyb19pZEIMCgpfaGVyb19uYW1lQgwKCl9oZXJvX2ljb24i9QwKElNlc3Npb25SZXNwb25zZUR0bxISCgpzZXNzaW9uX2lkGAEgASgJEg0KBXRpdGxlGAIgASgJEhgKC2Rlc2NyaXB0aW9uGAMgASgJSACIAQESHAoPY2hpZWZfY29tcGxhaW50GAQgASgJSAGIAQESDAoEY29kZRgFIAEoBRIMCgR0eXBlGAYgASgJEg4KBnN0YXR1cxgHIAEoCRIRCglpc19hY3RpdmUYCCABKAgSMgoObGFzdF9hY3RpdmVfYXQYCSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEhIKCnByb2plY3RfaWQYCiABKAkSFAoMcHJvamVjdF9uYW1lGAsgASgJEhQKDHByb2plY3RfcGF0aBgMIAEoCRIaCg1wcm9wb3NhbF9uYW1lGA0gASgJSAKIAQESPwoPb3Blbl9zcGVjX2ZpbGVzGA4gASgLMiYuaGFnaWNvZGUuc2Vzc2lvbi52MS5PcGVuU3BlY0ZpbGVzSW5mbxIdChVwZW5kaW5nX21lc3NhZ2VfY291bnQYDyABKAUSQwoOcXVldWVfbWVzc2FnZXMYECADKAsyKy5oYWdpY29kZS5zZXNzaW9uLnYxLlF1ZXVlTWVzc2FnZVN1bW1hcnlEdG8SHgoRd29ya2luZ19kaXJlY3RvcnkYESABKAlIA4gBARIVCghtZXRhZGF0YRgSIAEoCUgEiAEBEh8KEmNoYXRfZXhlY3V0b3JfdHlwZRgTIAEoCUgFiAEBEjoKCWNoYXRfaGVybxgUIAEoCzInLmhhZ2ljb2RlLnNlc3Npb24udjEuQ2hhdEhlcm9TdW1tYXJ5RHRvElkKEnN0YWdlX2V4ZWN1dG9yX21hcBgVIAMoCzI9LmhhZ2ljb2RlLnNlc3Npb24udjEuU2Vzc2lvblJlc3BvbnNlRHRvLlN0YWdlRXhlY3V0b3JNYXBFbnRyeRJkChhzdGFnZV9oZXJvX3NlbGVjdGlvbl9tYXAYFiADKAsyQi5oYWdpY29kZS5zZXNzaW9uLnYxLlNlc3Npb25SZXNwb25zZUR0by5TdGFnZUhlcm9TZWxlY3Rpb25NYXBFbnRyeRIgChNydW50aW1lX21vZGVsX2xhYmVsGBcgASgJSAaIAQESOQoVcHJvY2Vzc2luZ19zdGFydGVkX2F0GBggASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBJCCg1zZXNzaW9uX3VzYWdlGBkgASgLMisuaGFnaWNvZGUuc2Vzc2lvbi52MS5TZXNzaW9uVXNhZ2VTdW1tYXJ5RHRvEhwKD3ByZXZpb3VzX3N0YXR1cxgaIAEoCUgHiAEBEkIKDW5vdGlmaWNhdGlvbnMYGyADKAsyKy5oYWdpY29kZS5zZXNzaW9uLnYxLlNlc3Npb25Ob3RpZmljYXRpb25EdG8SRwoSc2NoZWR1bGVkX21lc3NhZ2VzGBwgAygLMisuaGFnaWNvZGUuc2Vzc2lvbi52MS5RdWV1ZU1lc3NhZ2VTdW1tYXJ5RHRvElAKDXVzZXJfbWV0YWRhdGEYHSADKAsyOS5oYWdpY29kZS5zZXNzaW9uLnYxLlNlc3Npb25SZXNwb25zZUR0by5Vc2VyTWV0YWRhdGFFbnRyeRpiChVTdGFnZUV4ZWN1dG9yTWFwRW50cnkSCwoDa2V5GAEgASgJEjgKBXZhbHVlGAIgASgLMikuaGFnaWNvZGUuc2Vzc2lvbi52MS5TdGFnZUV4ZWN1dG9ySW5mb0R0bzoCOAEaaAoaU3RhZ2VIZXJvU2VsZWN0aW9uTWFwRW50cnkSCwoDa2V5GAEgASgJEjkKBXZhbHVlGAIgASgLMiouaGFnaWNvZGUuc2Vzc2lvbi52MS5TdGFnZUhlcm9TZWxlY3Rpb25EdG86AjgBGjMKEVVzZXJNZXRhZGF0YUVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAFCDgoMX2Rlc2NyaXB0aW9uQhIKEF9jaGllZl9jb21wbGFpbnRCEAoOX3Byb3Bvc2FsX25hbWVCFAoSX3dvcmtpbmdfZGlyZWN0b3J5QgsKCV9tZXRhZGF0YUIVChNfY2hhdF9leGVjdXRvcl90eXBlQhYKFF9ydW50aW1lX21vZGVsX2xhYmVsQhIKEF9wcmV2aW91c19zdGF0dXMi+QEKGENyZWF0ZUNoYXRTZXNzaW9uUmVxdWVzdBINCgV0aXRsZRgBIAEoCRISCgpwcm9qZWN0X2lkGAIgASgJEhgKEGlzX2RlZmF1bHRfdGl0bGUYAyABKAgSFAoHaGVyb19pZBgEIAEoCUgAiAEBEk0KCG1ldGFkYXRhGAUgAygLMjsuaGFnaWNvZGUuc2Vzc2lvbi52MS5DcmVhdGVDaGF0U2Vzc2lvblJlcXVlc3QuTWV0YWRhdGFFbnRyeRovCg1NZXRhZGF0YUVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAFCCgoIX2hlcm9faWQivgIKEFBhdGhSZWZlcmVuY2VEdG8SCgoCaWQYASABKAkSDgoGc291cmNlGAIgASgJEhUKDWRpc3BsYXlfdmFsdWUYAyABKAkSFQoNcGh5c2ljYWxfcGF0aBgEIAEoCRINCgVzdGFydBgFIAEoBRILCgNlbmQYBiABKAUSFgoJZW50aXR5X2lkGAcgASgJSACIAQESFwoKcHJvamVjdF9pZBgIIAEoCUgBiAEBEkUKCG1ldGFkYXRhGAkgAygLMjMuaGFnaWNvZGUuc2Vzc2lvbi52MS5QYXRoUmVmZXJlbmNlRHRvLk1ldGFkYXRhRW50cnkaLwoNTWV0YWRhdGFFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBQgwKCl9lbnRpdHlfaWRCDQoLX3Byb2plY3RfaWQi+wEKGVNlc3Npb25NZXNzYWdlSW1hZ2VSZWZEdG8SEgoKc2Vzc2lvbl9pZBgBIAEoCRIQCghpbWFnZV9pZBgCIAEoCRIWCg5oYWdpX2ltYWdlX3VybBgDIAEoCRIYCgtwcmV2aWV3X3VybBgEIAEoCUgAiAEBEhYKCWZpbGVfbmFtZRgFIAEoCUgBiAEBEhkKDGNvbnRlbnRfdHlwZRgGIAEoCUgCiAEBEhYKCWZpbGVfc2l6ZRgHIAEoA0gDiAEBQg4KDF9wcmV2aWV3X3VybEIMCgpfZmlsZV9uYW1lQg8KDV9jb250ZW50X3R5cGVCDAoKX2ZpbGVfc2l6ZSJ+ChlUYXJnZXRQcm9qZWN0UmVmZXJlbmNlRHRvEhIKCnByb2plY3RfaWQYASABKAkSDAoEbmFtZRgCIAEoCRIVCg1waHlzaWNhbF9wYXRoGAMgASgJEhgKC2FjY2Vzc190eXBlGAQgASgJSACIAQFCDgoMX2FjY2Vzc190eXBlIocBChNUYXJnZXRSZXBvc2l0b3J5RHRvEgwKBHBhdGgYASABKAkSDAoEbmFtZRgCIAEoCRIZCgxkaXNwbGF5X25hbWUYAyABKAlIAIgBARIYCgthY2Nlc3NfdHlwZRgEIAEoCUgBiAEBQg8KDV9kaXNwbGF5X25hbWVCDgoMX2FjY2Vzc190eXBlIj0KGFRhcmdldFJlcG9zaXRvcnlTY29wZUR0bxIMCgRtb2RlGAEgASgJEhMKC2FjY2Vzc190eXBlGAIgASgJIpEGChRDcmVhdGVTZXNzaW9uUmVxdWVzdBINCgV0aXRsZRgBIAEoCRIcCg9jaGllZl9jb21wbGFpbnQYAiABKAlIAIgBARIlChhvcmlnaW5hbF9jaGllZl9jb21wbGFpbnQYAyABKAlIAYgBARJIChBkcmFmdF9pbWFnZV9yZWZzGAQgAygLMi4uaGFnaWNvZGUuc2Vzc2lvbi52MS5TZXNzaW9uTWVzc2FnZUltYWdlUmVmRHRvEhEKBHR5cGUYBSABKAlIAogBARISCgpwcm9qZWN0X2lkGAYgASgJEkUKE3RhcmdldF9yZXBvc2l0b3JpZXMYByADKAsyKC5oYWdpY29kZS5zZXNzaW9uLnYxLlRhcmdldFJlcG9zaXRvcnlEdG8STgoXdGFyZ2V0X3JlcG9zaXRvcnlfc2NvcGUYCCABKAsyLS5oYWdpY29kZS5zZXNzaW9uLnYxLlRhcmdldFJlcG9zaXRvcnlTY29wZUR0bxJHCg90YXJnZXRfcHJvamVjdHMYCSADKAsyLi5oYWdpY29kZS5zZXNzaW9uLnYxLlRhcmdldFByb2plY3RSZWZlcmVuY2VEdG8SPgoPcGF0aF9yZWZlcmVuY2VzGAogAygLMiUuaGFnaWNvZGUuc2Vzc2lvbi52MS5QYXRoUmVmZXJlbmNlRHRvEhgKEGlzX2RlZmF1bHRfdGl0bGUYCyABKAgSJgoZcHJvcG9zYWxfY29udGVudF9sYW5ndWFnZRgMIAEoCUgDiAEBEkkKCG1ldGFkYXRhGA0gAygLMjcuaGFnaWNvZGUuc2Vzc2lvbi52MS5DcmVhdGVTZXNzaW9uUmVxdWVzdC5NZXRhZGF0YUVudHJ5Gi8KDU1ldGFkYXRhRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4AUISChBfY2hpZWZfY29tcGxhaW50QhsKGV9vcmlnaW5hbF9jaGllZl9jb21wbGFpbnRCBwoFX3R5cGVCHAoaX3Byb3Bvc2FsX2NvbnRlbnRfbGFuZ3VhZ2UikwEKFFVwZGF0ZVNlc3Npb25SZXF1ZXN0Eg0KBXRpdGxlGAEgASgJEhgKC2Rlc2NyaXB0aW9uGAIgASgJSACIAQESEwoGc3RhdHVzGAMgASgJSAGIAQESFQoIbWV0YWRhdGEYBCABKAlIAogBAUIOCgxfZGVzY3JpcHRpb25CCQoHX3N0YXR1c0ILCglfbWV0YWRhdGEiUwoWU2Vzc2lvbkxpc3RSZXNwb25zZUR0bxI5CghzZXNzaW9ucxgBIAMoCzInLmhhZ2ljb2RlLnNlc3Npb24udjEuU2Vzc2lvblJlc3BvbnNlRHRvIisKGFNpbXBsZU1lc3NhZ2VSZXNwb25zZUR0bxIPCgdtZXNzYWdlGAEgASgJIjMKIFN3aXRjaFN0b3BwZWRTZXNzaW9uQWdlbnRSZXF1ZXN0Eg8KB2hlcm9faWQYASABKAki6wgKHENyZWF0ZUhhZ2lUYXNrU2Vzc2lvblJlcXVlc3QSDQoFdGl0bGUYASABKAkSGAoQaXNfZGVmYXVsdF90aXRsZRgCIAEoCBISCgpwcm9qZWN0X2lkGAMgASgJEhYKCXByb21wdF9pZBgEIAEoCUgAiAEBEhQKB21lc3NhZ2UYBSABKAlIAYgBARJIChBkcmFmdF9pbWFnZV9yZWZzGAYgAygLMi4uaGFnaWNvZGUuc2Vzc2lvbi52MS5TZXNzaW9uTWVzc2FnZUltYWdlUmVmRHRvEhwKD3JlcG9zaXRvcnlfcGF0aBgHIAEoCUgCiAEBEhgKC3RhcmdldF90eXBlGAggASgJSAOIAQESFQoIdmF1bHRfaWQYCSABKAlIBIgBARIcCg9vdXRwdXRfdmF1bHRfaWQYCiABKAlIBYgBARIbChNyZWZlcmVuY2VfdmF1bHRfaWRzGAsgAygJEhoKEmVkaXRhYmxlX3ZhdWx0X2lkcxgMIAMoCRJHCg90YXJnZXRfcHJvamVjdHMYDSADKAsyLi5oYWdpY29kZS5zZXNzaW9uLnYxLlRhcmdldFByb2plY3RSZWZlcmVuY2VEdG8SHwoScmVzZWFyY2hfZGlyZWN0aW9uGA4gASgJSAaIAQESGwoOcHJlc2V0X3Rhc2tfaWQYDyABKAlIB4gBARIfChJwcmVzZXRfdGFza19sb2NhbGUYECABKAlICIgBARIxChFwcmVzZXRfdGFza19pbnB1dBgRIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZRIXCg9yZXBvc2l0b3J5X3VybHMYEiADKAkSEwoLcHJvamVjdF9pZHMYEyADKAkSEQoJbmVlZF9wdXNoGBQgASgIEiQKF3B1bGxfcmViYXNlX2JlZm9yZV9wdXNoGBUgASgISAmIAQESHwoSdGFyZ2V0X2JyYW5jaF9tb2RlGBYgASgJSAqIAQESHwoSdGFyZ2V0X2JyYW5jaF9uYW1lGBcgASgJSAuIAQESFwoKc2NyaXB0X2tleRgYIAEoCUgMiAEBEhQKB2hlcm9faWQYGSABKAlIDYgBARIgChNoZXJvX3NlbGVjdGlvbl9tb2RlGBogASgJSA6IAQFCDAoKX3Byb21wdF9pZEIKCghfbWVzc2FnZUISChBfcmVwb3NpdG9yeV9wYXRoQg4KDF90YXJnZXRfdHlwZUILCglfdmF1bHRfaWRCEgoQX291dHB1dF92YXVsdF9pZEIVChNfcmVzZWFyY2hfZGlyZWN0aW9uQhEKD19wcmVzZXRfdGFza19pZEIVChNfcHJlc2V0X3Rhc2tfbG9jYWxlQhoKGF9wdWxsX3JlYmFzZV9iZWZvcmVfcHVzaEIVChNfdGFyZ2V0X2JyYW5jaF9tb2RlQhUKE190YXJnZXRfYnJhbmNoX25hbWVCDQoLX3NjcmlwdF9rZXlCCgoIX2hlcm9faWRCFgoUX2hlcm9fc2VsZWN0aW9uX21vZGUy6ggKD1Nlc3Npb25zU2VydmljZRJsCg9PcGVuQ2hhdFNlc3Npb24SKy5oYWdpY29kZS5zZXNzaW9uLnYxLk9wZW5DaGF0U2Vzc2lvblJlcXVlc3QaLC5oYWdpY29kZS5zZXNzaW9uLnYxLk9wZW5DaGF0U2Vzc2lvblJlc3BvbnNlEmAKC09wZW5TZXNzaW9uEicuaGFnaWNvZGUuc2Vzc2lvbi52MS5PcGVuU2Vzc2lvblJlcXVlc3QaKC5oYWdpY29kZS5zZXNzaW9uLnYxLk9wZW5TZXNzaW9uUmVzcG9uc2USXQoKR2V0U2Vzc2lvbhImLmhhZ2ljb2RlLnNlc3Npb24udjEuR2V0U2Vzc2lvblJlcXVlc3QaJy5oYWdpY29kZS5zZXNzaW9uLnYxLkdldFNlc3Npb25SZXNwb25zZRJgCgtTYXZlU2Vzc2lvbhInLmhhZ2ljb2RlLnNlc3Npb24udjEuU2F2ZVNlc3Npb25SZXF1ZXN0GiguaGFnaWNvZGUuc2Vzc2lvbi52MS5TYXZlU2Vzc2lvblJlc3BvbnNlEmMKDExpc3RTZXNzaW9ucxIoLmhhZ2ljb2RlLnNlc3Npb24udjEuTGlzdFNlc3Npb25zUmVxdWVzdBopLmhhZ2ljb2RlLnNlc3Npb24udjEuTGlzdFNlc3Npb25zUmVzcG9uc2USZgoNRGVsZXRlU2Vzc2lvbhIpLmhhZ2ljb2RlLnNlc3Npb24udjEuRGVsZXRlU2Vzc2lvblJlcXVlc3QaKi5oYWdpY29kZS5zZXNzaW9uLnYxLkRlbGV0ZVNlc3Npb25SZXNwb25zZRJ1ChJBcmNoaXZlQ2hhdFNlc3Npb24SLi5oYWdpY29kZS5zZXNzaW9uLnYxLkFyY2hpdmVDaGF0U2Vzc2lvblJlcXVlc3QaLy5oYWdpY29kZS5zZXNzaW9uLnYxLkFyY2hpdmVDaGF0U2Vzc2lvblJlc3BvbnNlEnUKElN3aXRjaFN0b3BwZWRBZ2VudBIuLmhhZ2ljb2RlLnNlc3Npb24udjEuU3dpdGNoU3RvcHBlZEFnZW50UmVxdWVzdBovLmhhZ2ljb2RlLnNlc3Npb24udjEuU3dpdGNoU3RvcHBlZEFnZW50UmVzcG9uc2USewoUU3RhcnRIYWdpVGFza1Nlc3Npb24SMC5oYWdpY29kZS5zZXNzaW9uLnYxLlN0YXJ0SGFnaVRhc2tTZXNzaW9uUmVxdWVzdBoxLmhhZ2ljb2RlLnNlc3Npb24udjEuU3RhcnRIYWdpVGFza1Nlc3Npb25SZXNwb25zZRKNAQoaU3RhcnRMZWdhY3lIYWdpVGFza1Nlc3Npb24SNi5oYWdpY29kZS5zZXNzaW9uLnYxLlN0YXJ0TGVnYWN5SGFnaVRhc2tTZXNzaW9uUmVxdWVzdBo3LmhhZ2ljb2RlLnNlc3Npb24udjEuU3RhcnRMZWdhY3lIYWdpVGFza1Nlc3Npb25SZXNwb25zZUIpqgImUENvZGUuSHR0cEFwaS5HcnBjQ29udHJhY3RzLlNlc3Npb24uVjFiBnByb3RvMw",[Ue,Ne]),Th=v(de,1),Qh=v(de,3),Mh=v(de,5),Oh=v(de,7),Dh=v(de,9),_h=v(de,11),$h=v(de,13),Ph=v(de,17),qh=v(de,30),eb=v(de,36),tb=v(de,37),nb=v(de,41),ob=We(de,0),Me=oe("CitoYWdpY29kZS9zZXNzaW9uL3YxL3Nlc3Npb25fbWVzc2FnaW5nLnByb3RvEhNoYWdpY29kZS5zZXNzaW9uLnYxIr0BChlHZXRTZXNzaW9uTWVzc2FnZXNSZXF1ZXN0EhIKCnNlc3Npb25faWQYASABKAkSEQoEcGFnZRgCIAEoBUgAiAEBEhYKCXBhZ2Vfc2l6ZRgDIAEoBUgBiAEBEhoKDWhpc3Rvcnlfc2NvcGUYBCABKAlIAogBARISCgVvcmRlchgFIAEoCUgDiAEBQgcKBV9wYWdlQgwKCl9wYWdlX3NpemVCEAoOX2hpc3Rvcnlfc2NvcGVCCAoGX29yZGVyIlkKGkdldFNlc3Npb25NZXNzYWdlc1Jlc3BvbnNlEjsKBnJlc3VsdBgBIAEoCzIrLmhhZ2ljb2RlLnNlc3Npb24udjEuTWVzc2FnZUxpc3RSZXNwb25zZUR0byIqChRDYW5jZWxTZXNzaW9uUmVxdWVzdBISCgpzZXNzaW9uX2lkGAEgASgJIlYKFUNhbmNlbFNlc3Npb25SZXNwb25zZRI9CgZyZXN1bHQYASABKAsyLS5oYWdpY29kZS5zZXNzaW9uLnYxLkNhbmNlbFNlc3Npb25SZXNwb25zZUR0byI3CiFHZXRTZXNzaW9uUHJvY2Vzc2luZ1N0YXR1c1JlcXVlc3QSEgoKc2Vzc2lvbl9pZBgBIAEoCSJeCiJHZXRTZXNzaW9uUHJvY2Vzc2luZ1N0YXR1c1Jlc3BvbnNlEjgKBnJlc3VsdBgBIAEoCzIoLmhhZ2ljb2RlLnNlc3Npb24udjEuUHJvY2Vzc2luZ1N0YXR1c0R0byJGChtDYW5jZWxQZW5kaW5nTWVzc2FnZVJlcXVlc3QSEgoKc2Vzc2lvbl9pZBgBIAEoCRITCgtxdWV1ZV9pbmRleBgCIAEoBSJcChxDYW5jZWxQZW5kaW5nTWVzc2FnZVJlc3BvbnNlEjwKBnJlc3VsdBgBIAEoCzIsLmhhZ2ljb2RlLnNlc3Npb24udjEuQ2FuY2VsUGVuZGluZ01lc3NhZ2VEdG8iUQodQ2FuY2VsU2NoZWR1bGVkTWVzc2FnZVJlcXVlc3QSEgoKc2Vzc2lvbl9pZBgBIAEoCRIcChRzY2hlZHVsZWRfbWVzc2FnZV9pZBgCIAEoCSJgCh5DYW5jZWxTY2hlZHVsZWRNZXNzYWdlUmVzcG9uc2USPgoGcmVzdWx0GAEgASgLMi4uaGFnaWNvZGUuc2Vzc2lvbi52MS5DYW5jZWxTY2hlZHVsZWRNZXNzYWdlRHRvImQKE1N0ZWVyU2Vzc2lvblJlcXVlc3QSEgoKc2Vzc2lvbl9pZBgBIAEoCRI5CgRib2R5GAIgASgLMisuaGFnaWNvZGUuc2Vzc2lvbi52MS5TZXNzaW9uU3RlZXJSZXF1ZXN0RHRvIlQKFFN0ZWVyU2Vzc2lvblJlc3BvbnNlEjwKBnJlc3VsdBgBIAEoCzIsLmhhZ2ljb2RlLnNlc3Npb24udjEuU2Vzc2lvblN0ZWVyUmVzcG9uc2VEdG8ihQEKGVN0ZWVyUXVldWVkTWVzc2FnZVJlcXVlc3QSEgoKc2Vzc2lvbl9pZBgBIAEoCRITCgtxdWV1ZV9pbmRleBgCIAEoBRI/CgRib2R5GAMgASgLMjEuaGFnaWNvZGUuc2Vzc2lvbi52MS5RdWV1ZWRNZXNzYWdlU3RlZXJSZXF1ZXN0RHRvImAKGlN0ZWVyUXVldWVkTWVzc2FnZVJlc3BvbnNlEkIKBnJlc3VsdBgBIAEoCzIyLmhhZ2ljb2RlLnNlc3Npb24udjEuUXVldWVkTWVzc2FnZVN0ZWVyUmVzcG9uc2VEdG8iZgoZUG9zdFNlc3Npb25NZXNzYWdlUmVxdWVzdBISCgpzZXNzaW9uX2lkGAEgASgJEjUKBGJvZHkYAiABKAsyJy5oYWdpY29kZS5zZXNzaW9uLnYxLlBvc3RNZXNzYWdlUmVxdWVzdCJZChpQb3N0U2Vzc2lvbk1lc3NhZ2VSZXNwb25zZRI7CgZyZXN1bHQYASABKAsyKy5oYWdpY29kZS5zZXNzaW9uLnYxLlBvc3RNZXNzYWdlUmVzcG9uc2VEdG8iYAoqR2V0Q29udmVydFRvUHJvcG9zYWxIYWdpU2tpbGxQcm9tcHRSZXF1ZXN0EhIKCnNlc3Npb25faWQYASABKAkSEwoGbG9jYWxlGAIgASgJSACIAQFCCQoHX2xvY2FsZSJ/CitHZXRDb252ZXJ0VG9Qcm9wb3NhbEhhZ2lTa2lsbFByb21wdFJlc3BvbnNlElAKBnJlc3VsdBgBIAEoCzJALmhhZ2ljb2RlLnNlc3Npb24udjEuQ29udmVydFRvUHJvcG9zYWxIYWdpU2tpbGxQcm9tcHRSZXNwb25zZUR0byJxCh9TdWJtaXRTZXNzaW9uQW5ub3RhdGlvbnNSZXF1ZXN0EhIKCnNlc3Npb25faWQYASABKAkSOgoEYm9keRgCIAEoCzIsLmhhZ2ljb2RlLnNlc3Npb24udjEuQW5ub3RhdGlvblN1Ym1pc3Npb25EdG8iaAogU3VibWl0U2Vzc2lvbkFubm90YXRpb25zUmVzcG9uc2USRAoGcmVzdWx0GAEgASgLMjQuaGFnaWNvZGUuc2Vzc2lvbi52MS5Bbm5vdGF0aW9uU3VibWlzc2lvblJlc3BvbnNlRHRvIvoBChZNZXNzYWdlSGVyb1NuYXBzaG90RHRvEhQKB2hlcm9faWQYASABKAlIAIgBARIWCgloZXJvX25hbWUYAiABKAlIAYgBARIWCgloZXJvX2ljb24YAyABKAlIAogBARIaCg1leGVjdXRvcl90eXBlGAQgASgJSAOIAQESEwoGc291cmNlGAUgASgJSASIAQESFgoJc3RhZ2Vfa2V5GAYgASgJSAWIAQFCCgoIX2hlcm9faWRCDAoKX2hlcm9fbmFtZUIMCgpfaGVyb19pY29uQhAKDl9leGVjdXRvcl90eXBlQgkKB19zb3VyY2VCDAoKX3N0YWdlX2tleSJSChxNZXNzYWdlVXNlclF1ZXN0aW9uQW5zd2VyRHRvEhAKCHF1ZXN0aW9uGAEgASgJEg4KBnZhbHVlcxgCIAMoCRIQCghyZWplY3RlZBgDIAEoCCJCChxNZXNzYWdlVXNlclF1ZXN0aW9uT3B0aW9uRHRvEg0KBWxhYmVsGAEgASgJEhMKC2Rlc2NyaXB0aW9uGAIgASgJIsgBChpNZXNzYWdlVXNlclF1ZXN0aW9uSXRlbUR0bxIQCghxdWVzdGlvbhgBIAEoCRIOCgZoZWFkZXIYAiABKAkSFAoMbXVsdGlfc2VsZWN0GAMgASgIEkIKB29wdGlvbnMYBCADKAsyMS5oYWdpY29kZS5zZXNzaW9uLnYxLk1lc3NhZ2VVc2VyUXVlc3Rpb25PcHRpb25EdG8SGwoTYWxsb3dfY3VzdG9tX2Fuc3dlchgFIAEoCBIRCglpc19zZWNyZXQYBiABKAgiWgocTWVzc2FnZVVzZXJRdWVzdGlvbkxpbWl0c0R0bxIZChFtYXhfYW5zd2VyX2xlbmd0aBgBIAEoBRIfChdtYXhfdmFsdWVzX3Blcl9xdWVzdGlvbhgCIAEoBSLYAgoWTWVzc2FnZVVzZXJRdWVzdGlvbkR0bxITCgtxdWVzdGlvbl9pZBgBIAEoCRITCgZydW5faWQYAiABKAlIAIgBARINCgVzdGF0ZRgDIAEoCRJCCglxdWVzdGlvbnMYBCADKAsyLy5oYWdpY29kZS5zZXNzaW9uLnYxLk1lc3NhZ2VVc2VyUXVlc3Rpb25JdGVtRHRvEkIKB2Fuc3dlcnMYBSADKAsyMS5oYWdpY29kZS5zZXNzaW9uLnYxLk1lc3NhZ2VVc2VyUXVlc3Rpb25BbnN3ZXJEdG8SLwoLYW5zd2VyZWRfYXQYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEkEKBmxpbWl0cxgHIAEoCzIxLmhhZ2ljb2RlLnNlc3Npb24udjEuTWVzc2FnZVVzZXJRdWVzdGlvbkxpbWl0c0R0b0IJCgdfcnVuX2lkIo4EChJNZXNzYWdlUmVzcG9uc2VEdG8SCgoCaWQYASABKAkSEgoKc2Vzc2lvbl9pZBgCIAEoCRIMCgR0eXBlGAMgASgJEgwKBG1vZGUYBCABKAkSLQoJdGltZXN0YW1wGAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIxCg1jcmVhdGlvbl90aW1lGAYgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIuCg5jb250ZW50X2Jsb2NrcxgHIAMoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZRISCgVtb2RlbBgIIAEoCUgAiAEBEhUKCHByb3ZpZGVyGAkgASgJSAGIAQESQgoNaGVyb19zbmFwc2hvdBgKIAEoCzIrLmhhZ2ljb2RlLnNlc3Npb24udjEuTWVzc2FnZUhlcm9TbmFwc2hvdER0bxJCCg11c2VyX3F1ZXN0aW9uGAsgASgLMisuaGFnaWNvZGUuc2Vzc2lvbi52MS5NZXNzYWdlVXNlclF1ZXN0aW9uRHRvEhgKC3N0ZWVyX3N0YXRlGAwgASgJSAKIAQESHwoScGFyZW50X3Rvb2xfdXNlX2lkGA0gASgJSAOIAQFCCAoGX21vZGVsQgsKCV9wcm92aWRlckIOCgxfc3RlZXJfc3RhdGVCFQoTX3BhcmVudF90b29sX3VzZV9pZCKyAQoWTWVzc2FnZUxpc3RSZXNwb25zZUR0bxISCgpzZXNzaW9uX2lkGAEgASgJEgwKBHBhZ2UYAiABKAUSEQoJcGFnZV9zaXplGAMgASgFEhMKC3RvdGFsX2NvdW50GAQgASgFEhMKC3RvdGFsX3BhZ2VzGAUgASgFEjkKCG1lc3NhZ2VzGAYgAygLMicuaGFnaWNvZGUuc2Vzc2lvbi52MS5NZXNzYWdlUmVzcG9uc2VEdG8ikAEKGENhbmNlbFNlc3Npb25SZXNwb25zZUR0bxISCgpzZXNzaW9uX2lkGAEgASgJEg4KBnN0YXR1cxgCIAEoCRIwCgxjYW5jZWxsZWRfYXQYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEhMKBnJ1bl9pZBgEIAEoCUgAiAEBQgkKB19ydW5faWQiyAIKE1Byb2Nlc3NpbmdTdGF0dXNEdG8SEgoKc2Vzc2lvbl9pZBgBIAEoCRIVCg1pc19wcm9jZXNzaW5nGAIgASgIEhwKFHF1ZXVlZF9tZXNzYWdlX2NvdW50GAMgASgFEkMKDnF1ZXVlX21lc3NhZ2VzGAQgAygLMisuaGFnaWNvZGUuc2Vzc2lvbi52MS5RdWV1ZU1lc3NhZ2VTdW1tYXJ5RHRvEjkKFXByb2Nlc3Npbmdfc3RhcnRlZF9hdBgFIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASRwoSc2NoZWR1bGVkX21lc3NhZ2VzGAYgAygLMisuaGFnaWNvZGUuc2Vzc2lvbi52MS5RdWV1ZU1lc3NhZ2VTdW1tYXJ5RHRvEh8KF3NjaGVkdWxlZF9tZXNzYWdlX2NvdW50GAcgASgFIj0KFENhbmNlbGxlZE1lc3NhZ2VJbmZvEgwKBG1vZGUYASABKAkSFwoPY29udGVudF9wcmV2aWV3GAIgASgJIpIBChlDYW5jZWxTY2hlZHVsZWRNZXNzYWdlRHRvEhIKCnNlc3Npb25faWQYASABKAkSDwoHc3VjY2VzcxgCIAEoCBIcChRzY2hlZHVsZWRfbWVzc2FnZV9pZBgDIAEoCRIhChlyZW1haW5pbmdfc2NoZWR1bGVkX2NvdW50GAQgASgFEg8KB21lc3NhZ2UYBSABKAkiwwEKF0NhbmNlbFBlbmRpbmdNZXNzYWdlRHRvEhIKCnNlc3Npb25faWQYASABKAkSDwoHc3VjY2VzcxgCIAEoCBITCgtxdWV1ZV9pbmRleBgDIAEoBRIXCg9yZW1haW5pbmdfY291bnQYBCABKAUSDwoHbWVzc2FnZRgFIAEoCRJEChFjYW5jZWxsZWRfbWVzc2FnZRgGIAEoCzIpLmhhZ2ljb2RlLnNlc3Npb24udjEuQ2FuY2VsbGVkTWVzc2FnZUluZm8iUgoXU2Vzc2lvblN0ZWVyUmVzcG9uc2VEdG8SDwoHb3V0Y29tZRgBIAEoCRIXCgptZXNzYWdlX2lkGAIgASgJSACIAQFCDQoLX21lc3NhZ2VfaWQiKQoWU2Vzc2lvblN0ZWVyUmVxdWVzdER0bxIPCgdjb250ZW50GAEgASgJIjAKHVF1ZXVlZE1lc3NhZ2VTdGVlclJlc3BvbnNlRHRvEg8KB291dGNvbWUYASABKAkiPAocUXVldWVkTWVzc2FnZVN0ZWVyUmVxdWVzdER0bxIcChRleGVjdXRpb25fbWVzc2FnZV9pZBgBIAEoCSKVAQoWUG9zdE1lc3NhZ2VSZXNwb25zZUR0bxIPCgdtZXNzYWdlGAEgASgJEiEKFHNjaGVkdWxlZF9tZXNzYWdlX2lkGAIgASgJSACIAQESLgoKZHVlX2F0X3V0YxgDIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCFwoVX3NjaGVkdWxlZF9tZXNzYWdlX2lkIu0BChJQb3N0TWVzc2FnZVJlcXVlc3QSDwoHY29udGVudBgBIAEoCRIMCgRtb2RlGAIgASgJEkIKCmltYWdlX3JlZnMYAyADKAsyLi5oYWdpY29kZS5zZXNzaW9uLnYxLlNlc3Npb25NZXNzYWdlSW1hZ2VSZWZEdG8SPgoPcGF0aF9yZWZlcmVuY2VzGAQgAygLMiUuaGFnaWNvZGUuc2Vzc2lvbi52MS5QYXRoUmVmZXJlbmNlRHRvEjQKEHNjaGVkdWxlZF9hdF91dGMYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIl4KK0NvbnZlcnRUb1Byb3Bvc2FsSGFnaVNraWxsUHJvbXB0UmVzcG9uc2VEdG8SDwoHb3V0Y29tZRgBIAEoCRITCgZwcm9tcHQYAiABKAlIAIgBAUIJCgdfcHJvbXB0ImAKH0Fubm90YXRpb25TdWJtaXNzaW9uUmVzcG9uc2VEdG8SDwoHbWVzc2FnZRgBIAEoCRIYChBhbm5vdGF0aW9uX2NvdW50GAIgASgFEhIKCmZpbGVfY291bnQYAyABKAUiygEKEkJsb2NrQW5ub3RhdGlvbkR0bxIZChFzdGFydF9saW5lX251bWJlchgBIAEoBRIXCg9lbmRfbGluZV9udW1iZXIYAiABKAUSGAoQb3JpZ2luYWxfY29udGVudBgDIAEoCRISCgpibG9ja190eXBlGAQgASgJEhcKD2Fubm90YXRpb25fdGV4dBgFIAEoCRItCgl0aW1lc3RhbXAYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEgoKAmlkGAcgASgJIq8BChFGaWxlQW5ub3RhdGlvbkR0bxIRCglmaWxlX25hbWUYASABKAkSEQoJZmlsZV9wYXRoGAIgASgJEkIKEWJsb2NrX2Fubm90YXRpb25zGAMgAygLMicuaGFnaWNvZGUuc2Vzc2lvbi52MS5CbG9ja0Fubm90YXRpb25EdG8SHAoPZmlsZV9hbm5vdGF0aW9uGAQgASgJSACIAQFCEgoQX2ZpbGVfYW5ub3RhdGlvbiLfAQoXQW5ub3RhdGlvblN1Ym1pc3Npb25EdG8SEgoKc2Vzc2lvbl9pZBgBIAEoCRI1CgVmaWxlcxgCIAMoCzImLmhhZ2ljb2RlLnNlc3Npb24udjEuRmlsZUFubm90YXRpb25EdG8SGQoRdG90YWxfYW5ub3RhdGlvbnMYAyABKAUSMAoMc3VibWl0dGVkX2F0GAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIaCg1nbG9iYWxfcHJvbXB0GAUgASgJSACIAQFCEAoOX2dsb2JhbF9wcm9tcHQykQoKF1Nlc3Npb25NZXNzYWdpbmdTZXJ2aWNlEnUKEkdldFNlc3Npb25NZXNzYWdlcxIuLmhhZ2ljb2RlLnNlc3Npb24udjEuR2V0U2Vzc2lvbk1lc3NhZ2VzUmVxdWVzdBovLmhhZ2ljb2RlLnNlc3Npb24udjEuR2V0U2Vzc2lvbk1lc3NhZ2VzUmVzcG9uc2USZgoNQ2FuY2VsU2Vzc2lvbhIpLmhhZ2ljb2RlLnNlc3Npb24udjEuQ2FuY2VsU2Vzc2lvblJlcXVlc3QaKi5oYWdpY29kZS5zZXNzaW9uLnYxLkNhbmNlbFNlc3Npb25SZXNwb25zZRKNAQoaR2V0U2Vzc2lvblByb2Nlc3NpbmdTdGF0dXMSNi5oYWdpY29kZS5zZXNzaW9uLnYxLkdldFNlc3Npb25Qcm9jZXNzaW5nU3RhdHVzUmVxdWVzdBo3LmhhZ2ljb2RlLnNlc3Npb24udjEuR2V0U2Vzc2lvblByb2Nlc3NpbmdTdGF0dXNSZXNwb25zZRJ7ChRDYW5jZWxQZW5kaW5nTWVzc2FnZRIwLmhhZ2ljb2RlLnNlc3Npb24udjEuQ2FuY2VsUGVuZGluZ01lc3NhZ2VSZXF1ZXN0GjEuaGFnaWNvZGUuc2Vzc2lvbi52MS5DYW5jZWxQZW5kaW5nTWVzc2FnZVJlc3BvbnNlEoEBChZDYW5jZWxTY2hlZHVsZWRNZXNzYWdlEjIuaGFnaWNvZGUuc2Vzc2lvbi52MS5DYW5jZWxTY2hlZHVsZWRNZXNzYWdlUmVxdWVzdBozLmhhZ2ljb2RlLnNlc3Npb24udjEuQ2FuY2VsU2NoZWR1bGVkTWVzc2FnZVJlc3BvbnNlEmMKDFN0ZWVyU2Vzc2lvbhIoLmhhZ2ljb2RlLnNlc3Npb24udjEuU3RlZXJTZXNzaW9uUmVxdWVzdBopLmhhZ2ljb2RlLnNlc3Npb24udjEuU3RlZXJTZXNzaW9uUmVzcG9uc2USdQoSU3RlZXJRdWV1ZWRNZXNzYWdlEi4uaGFnaWNvZGUuc2Vzc2lvbi52MS5TdGVlclF1ZXVlZE1lc3NhZ2VSZXF1ZXN0Gi8uaGFnaWNvZGUuc2Vzc2lvbi52MS5TdGVlclF1ZXVlZE1lc3NhZ2VSZXNwb25zZRJ1ChJQb3N0U2Vzc2lvbk1lc3NhZ2USLi5oYWdpY29kZS5zZXNzaW9uLnYxLlBvc3RTZXNzaW9uTWVzc2FnZVJlcXVlc3QaLy5oYWdpY29kZS5zZXNzaW9uLnYxLlBvc3RTZXNzaW9uTWVzc2FnZVJlc3BvbnNlEqgBCiNHZXRDb252ZXJ0VG9Qcm9wb3NhbEhhZ2lTa2lsbFByb21wdBI/LmhhZ2ljb2RlLnNlc3Npb24udjEuR2V0Q29udmVydFRvUHJvcG9zYWxIYWdpU2tpbGxQcm9tcHRSZXF1ZXN0GkAuaGFnaWNvZGUuc2Vzc2lvbi52MS5HZXRDb252ZXJ0VG9Qcm9wb3NhbEhhZ2lTa2lsbFByb21wdFJlc3BvbnNlEocBChhTdWJtaXRTZXNzaW9uQW5ub3RhdGlvbnMSNC5oYWdpY29kZS5zZXNzaW9uLnYxLlN1Ym1pdFNlc3Npb25Bbm5vdGF0aW9uc1JlcXVlc3QaNS5oYWdpY29kZS5zZXNzaW9uLnYxLlN1Ym1pdFNlc3Npb25Bbm5vdGF0aW9uc1Jlc3BvbnNlQimqAiZQQ29kZS5IdHRwQXBpLkdycGNDb250cmFjdHMuU2Vzc2lvbi5WMWIGcHJvdG8z",[Ue,Ne,de]),ab=v(Me,1),rb=v(Me,11),ib=v(Me,15),sb=v(Me,19),lb=v(Me,34),cb=v(Me,38),db=v(Me,43),ub=We(Me,0),Ie=oe("CipoYWdpY29kZS9zZXNzaW9uL3YxL3Nlc3Npb25fcHJvcG9zYWwucHJvdG8SE2hhZ2ljb2RlLnNlc3Npb24udjEiOAoiTGlzdFVubGlua2VkT3BlblNwZWNDaGFuZ2VzUmVxdWVzdBISCgpwcm9qZWN0X2lkGAEgASgJInIKI0xpc3RVbmxpbmtlZE9wZW5TcGVjQ2hhbmdlc1Jlc3BvbnNlEksKBnJlc3VsdBgBIAEoCzI7LmhhZ2ljb2RlLnNlc3Npb24udjEuVW5saW5rZWRPcGVuU3BlY0NoYW5nZXNMaXN0UmVzcG9uc2VEdG8ijQIKGVVubGlua2VkT3BlblNwZWNDaGFuZ2VEdG8SDAoEbmFtZRgBIAEoCRINCgV0aXRsZRgCIAEoCRIPCgdzdW1tYXJ5GAMgASgJEhwKD3Rhc2tzX2NvbXBsZXRlZBgEIAEoBUgAiAEBEhgKC3Rhc2tzX3RvdGFsGAUgASgFSAGIAQESGQoRaGFzX3Byb3Bvc2FsX2ZpbGUYBiABKAgSDQoFZmlsZXMYByADKAkSIgoVbm90X2ltcG9ydGFibGVfcmVhc29uGAggASgJSAKIAQFCEgoQX3Rhc2tzX2NvbXBsZXRlZEIOCgxfdGFza3NfdG90YWxCGAoWX25vdF9pbXBvcnRhYmxlX3JlYXNvbiJpCiZVbmxpbmtlZE9wZW5TcGVjQ2hhbmdlc0xpc3RSZXNwb25zZUR0bxI/CgdjaGFuZ2VzGAEgAygLMi4uaGFnaWNvZGUuc2Vzc2lvbi52MS5VbmxpbmtlZE9wZW5TcGVjQ2hhbmdlRHRvIjkKI0NvdW50VW5saW5rZWRPcGVuU3BlY0NoYW5nZXNSZXF1ZXN0EhIKCnByb2plY3RfaWQYASABKAkiawokQ291bnRVbmxpbmtlZE9wZW5TcGVjQ2hhbmdlc1Jlc3BvbnNlEkMKBnJlc3VsdBgBIAEoCzIzLmhhZ2ljb2RlLnNlc3Npb24udjEuVW5saW5rZWRPcGVuU3BlY0NoYW5nZUNvdW50RHRvIi8KHlVubGlua2VkT3BlblNwZWNDaGFuZ2VDb3VudER0bxINCgVjb3VudBgBIAEoBSJiCiRHZXRVbmxpbmtlZE9wZW5TcGVjQ2hhbmdlRmlsZVJlcXVlc3QSEgoKcHJvamVjdF9pZBgBIAEoCRITCgtjaGFuZ2VfbmFtZRgCIAEoCRIRCglmaWxlX3BhdGgYAyABKAkiawolR2V0VW5saW5rZWRPcGVuU3BlY0NoYW5nZUZpbGVSZXNwb25zZRJCCgZyZXN1bHQYASABKAsyMi5oYWdpY29kZS5zZXNzaW9uLnYxLlVubGlua2VkT3BlblNwZWNDaGFuZ2VGaWxlRHRvIkMKHVVubGlua2VkT3BlblNwZWNDaGFuZ2VGaWxlRHRvEhEKCWZpbGVfcGF0aBgBIAEoCRIPCgdjb250ZW50GAIgASgJIkgKHEltcG9ydE9wZW5TcGVjQ2hhbmdlc1JlcXVlc3QSEgoKcHJvamVjdF9pZBgBIAEoCRIUCgxjaGFuZ2VfbmFtZXMYAiADKAkiZAodSW1wb3J0T3BlblNwZWNDaGFuZ2VzUmVzcG9uc2USQwoGcmVzdWx0GAEgASgLMjMuaGFnaWNvZGUuc2Vzc2lvbi52MS5JbXBvcnRPcGVuU3BlY0NoYW5nZXNSZXN1bHREdG8iZAoeSW1wb3J0T3BlblNwZWNDaGFuZ2VzUmVzdWx0RHRvEkIKB3Jlc3VsdHMYASADKAsyMS5oYWdpY29kZS5zZXNzaW9uLnYxLkltcG9ydE9wZW5TcGVjQ2hhbmdlRW50cnlEdG8imAEKHEltcG9ydE9wZW5TcGVjQ2hhbmdlRW50cnlEdG8SDAoEbmFtZRgBIAEoCRIOCgZzdGF0dXMYAiABKAkSOAoHc2Vzc2lvbhgDIAEoCzInLmhhZ2ljb2RlLnNlc3Npb24udjEuU2Vzc2lvblJlc3BvbnNlRHRvEhQKB21lc3NhZ2UYBCABKAlIAIgBAUIKCghfbWVzc2FnZSJwCh5PcHRpbWl6ZVNlc3Npb25Qcm9wb3NhbFJlcXVlc3QSEgoKc2Vzc2lvbl9pZBgBIAEoCRI6CgRib2R5GAIgASgLMiwuaGFnaWNvZGUuc2Vzc2lvbi52MS5PcHRpbWl6ZVByb3Bvc2FsUmVxdWVzdCJtCh9PcHRpbWl6ZVNlc3Npb25Qcm9wb3NhbFJlc3BvbnNlEkoKBnJlc3VsdBgBIAEoCzI6LmhhZ2ljb2RlLnNlc3Npb24udjEuUHJvcG9zYWxPcHRpbWl6YXRpb25CdW5kbGVSZXNwb25zZUR0byJsChdHZW5lcmF0ZVByb3Bvc2FsUmVxdWVzdBISCgpzZXNzaW9uX2lkGAEgASgJEj0KBGJvZHkYAiABKAsyLy5oYWdpY29kZS5zZXNzaW9uLnYxLkdlbmVyYXRlUHJvcG9zYWxSZXF1ZXN0RHRvIlkKGEdlbmVyYXRlUHJvcG9zYWxSZXNwb25zZRI9CgZyZXN1bHQYASABKAsyLS5oYWdpY29kZS5zZXNzaW9uLnYxLlNpbXBsZU1lc3NhZ2VSZXNwb25zZUR0byJoChVBcmNoaXZlU2Vzc2lvblJlcXVlc3QSEgoKc2Vzc2lvbl9pZBgBIAEoCRI7CgRib2R5GAIgASgLMi0uaGFnaWNvZGUuc2Vzc2lvbi52MS5BcmNoaXZlU2Vzc2lvblJlcXVlc3REdG8iUQoWQXJjaGl2ZVNlc3Npb25SZXNwb25zZRI3CgZyZXN1bHQYASABKAsyJy5oYWdpY29kZS5zZXNzaW9uLnYxLlNlc3Npb25SZXNwb25zZUR0byJqChZFeGVjdXRlUHJvcG9zYWxSZXF1ZXN0EhIKCnNlc3Npb25faWQYASABKAkSPAoEYm9keRgCIAEoCzIuLmhhZ2ljb2RlLnNlc3Npb24udjEuRXhlY3V0ZVByb3Bvc2FsUmVxdWVzdER0byJYChdFeGVjdXRlUHJvcG9zYWxSZXNwb25zZRI9CgZyZXN1bHQYASABKAsyLS5oYWdpY29kZS5zZXNzaW9uLnYxLlNpbXBsZU1lc3NhZ2VSZXNwb25zZUR0byIsChZDb21wbGV0ZVNlc3Npb25SZXF1ZXN0EhIKCnNlc3Npb25faWQYASABKAkiUgoXQ29tcGxldGVTZXNzaW9uUmVzcG9uc2USNwoGcmVzdWx0GAEgASgLMicuaGFnaWNvZGUuc2Vzc2lvbi52MS5TZXNzaW9uUmVzcG9uc2VEdG8iMwodVmFsaWRhdGVTZXNzaW9uRXhlY3V0ZVJlcXVlc3QSEgoKc2Vzc2lvbl9pZBgBIAEoCSJaCh5WYWxpZGF0ZVNlc3Npb25FeGVjdXRlUmVzcG9uc2USOAoGcmVzdWx0GAEgASgLMiguaGFnaWNvZGUuc2Vzc2lvbi52MS5WYWxpZGF0aW9uUmVzdWx0RHRvIjEKG1ZhbGlkYXRlU2Vzc2lvblN0YXJ0UmVxdWVzdBISCgpzZXNzaW9uX2lkGAEgASgJIlgKHFZhbGlkYXRlU2Vzc2lvblN0YXJ0UmVzcG9uc2USOAoGcmVzdWx0GAEgASgLMiguaGFnaWNvZGUuc2Vzc2lvbi52MS5WYWxpZGF0aW9uUmVzdWx0RHRvIjMKHVZhbGlkYXRlU2Vzc2lvbkFyY2hpdmVSZXF1ZXN0EhIKCnNlc3Npb25faWQYASABKAkiWgoeVmFsaWRhdGVTZXNzaW9uQXJjaGl2ZVJlc3BvbnNlEjgKBnJlc3VsdBgBIAEoCzIoLmhhZ2ljb2RlLnNlc3Npb24udjEuVmFsaWRhdGlvblJlc3VsdER0byJyCiFQcm9wb3NhbE9wdGltaXphdGlvbkRpYWdub3N0aWNEdG8SDAoEY29kZRgBIAEoCRIQCghzZXZlcml0eRgCIAEoCRIPCgdtZXNzYWdlGAMgASgJEhIKBWZpZWxkGAQgASgJSACIAQFCCAoGX2ZpZWxkIo4BCi1Qcm9wb3NhbE9wdGltaXphdGlvbkJ1bmRsZVZhbGlkYXRpb25SZXN1bHREdG8SEAoIaXNfdmFsaWQYASABKAgSSwoLZGlhZ25vc3RpY3MYAiADKAsyNi5oYWdpY29kZS5zZXNzaW9uLnYxLlByb3Bvc2FsT3B0aW1pemF0aW9uRGlhZ25vc3RpY0R0byLcAwonUHJvcG9zYWxPcHRpbWl6YXRpb25TY2VuYXJpb1NldHRpbmdzRHRvEhcKCnNjcmlwdF9rZXkYASABKAlIAIgBARIdChBzZWxlY3RlZF9oZXJvX2lkGAIgASgJSAGIAQESHAoPY2FwdGFpbl9oZXJvX2lkGAMgASgJSAKIAQESFgoJcm9zdGVyX2lkGAQgASgJSAOIAQESawoQZXh0ZW5zaW9uX2ZpZWxkcxgFIAMoCzJRLmhhZ2ljb2RlLnNlc3Npb24udjEuUHJvcG9zYWxPcHRpbWl6YXRpb25TY2VuYXJpb1NldHRpbmdzRHRvLkV4dGVuc2lvbkZpZWxkc0VudHJ5EhYKCXN0YWdlX2tleRgGIAEoCUgEiAEBEh0KEHNlbGVjdGlvbl9zb3VyY2UYByABKAlIBYgBARo2ChRFeHRlbnNpb25GaWVsZHNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBQg0KC19zY3JpcHRfa2V5QhMKEV9zZWxlY3RlZF9oZXJvX2lkQhIKEF9jYXB0YWluX2hlcm9faWRCDAoKX3Jvc3Rlcl9pZEIMCgpfc3RhZ2Vfa2V5QhMKEV9zZWxlY3Rpb25fc291cmNlIr4DCiNQcm9wb3NhbE9wdGltaXphdGlvbkJ1bmRsZVJlc3VsdER0bxIcCg9vcHRpbWl6ZWRfdGl0bGUYASABKAlIAIgBARIoChtvcHRpbWl6ZWRfcHJvcG9zYWxfbWFya2Rvd24YAiABKAlIAYgBARIfChdvcHRpbWl6ZWRfcHJvcG9zYWxfbmFtZRgDIAEoCRIdChVvcHRpbWl6ZWRfZGVzY3JpcHRpb24YBCABKAkSVwoRc2NlbmFyaW9fc2V0dGluZ3MYBSABKAsyPC5oYWdpY29kZS5zZXNzaW9uLnYxLlByb3Bvc2FsT3B0aW1pemF0aW9uU2NlbmFyaW9TZXR0aW5nc0R0bxJWCgp2YWxpZGF0aW9uGAYgASgLMkIuaGFnaWNvZGUuc2Vzc2lvbi52MS5Qcm9wb3NhbE9wdGltaXphdGlvbkJ1bmRsZVZhbGlkYXRpb25SZXN1bHREdG8SGQoMcmF3X3Jlc3BvbnNlGAcgASgJSAKIAQFCEgoQX29wdGltaXplZF90aXRsZUIeChxfb3B0aW1pemVkX3Byb3Bvc2FsX21hcmtkb3duQg8KDV9yYXdfcmVzcG9uc2Ui0ggKJFByb3Bvc2FsT3B0aW1pemF0aW9uQnVuZGxlU3VtbWFyeUR0bxIbChNyZXF1ZXN0X2ZpbmdlcnByaW50GAEgASgJEjQKEGdlbmVyYXRlZF9hdF91dGMYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEg4KBnNvdXJjZRgDIAEoCRIVCg1hcHBsaWVkX3RpdGxlGAQgASgJEh0KFWFwcGxpZWRfcHJvcG9zYWxfbmFtZRgFIAEoCRIgChhwcm9wb3NhbF9kcmFmdF9hdmFpbGFibGUYBiABKAgSIAoYc2NlbmFyaW9fc2V0dGluZ3Nfc3RhdHVzGAcgASgJEhoKEmFwcGxpZWRfdGl0bGVfbW9kZRgIIAEoCRIQCghpc192YWxpZBgJIAEoCBJLCgtkaWFnbm9zdGljcxgKIAMoCzI2LmhhZ2ljb2RlLnNlc3Npb24udjEuUHJvcG9zYWxPcHRpbWl6YXRpb25EaWFnbm9zdGljRHRvEiYKGW9wdGltaXplZF90aXRsZV9jYW5kaWRhdGUYCyABKAlIAIgBARIjChZwcm9wb3NhbF9kcmFmdF9wcmV2aWV3GAwgASgJSAGIAQESGgoNYXJ0aWZhY3RfcGF0aBgNIAEoCUgCiAEBEhsKDmNvcnJlbGF0aW9uX2lkGA4gASgJSAOIAQESHQoQcmVzb2x2ZWRfaGVyb19pZBgPIAEoCUgEiAEBEh8KEnJlc29sdmVkX2hlcm9fbmFtZRgQIAEoCUgFiAEBEh8KEnJlc29sdmVkX2hlcm9faWNvbhgRIAEoCUgGiAEBEigKG3Jlc29sdmVkX2hlcm9fZXhlY3V0b3JfdHlwZRgSIAEoCUgHiAEBEiIKFWhlcm9fc2VsZWN0aW9uX3NvdXJjZRgTIAEoCUgIiAEBEiMKFmhlcm9fcm91dGluZ19zdGFnZV9rZXkYFCABKAlICYgBARIkChdoZXJvX3JvdXRpbmdfc2NyaXB0X2tleRgVIAEoCUgKiAEBEiQKF29wdGltaXphdGlvbl9jZXNzaW9uX2lkGBYgASgJSAuIAQFCHAoaX29wdGltaXplZF90aXRsZV9jYW5kaWRhdGVCGQoXX3Byb3Bvc2FsX2RyYWZ0X3ByZXZpZXdCEAoOX2FydGlmYWN0X3BhdGhCEQoPX2NvcnJlbGF0aW9uX2lkQhMKEV9yZXNvbHZlZF9oZXJvX2lkQhUKE19yZXNvbHZlZF9oZXJvX25hbWVCFQoTX3Jlc29sdmVkX2hlcm9faWNvbkIeChxfcmVzb2x2ZWRfaGVyb19leGVjdXRvcl90eXBlQhgKFl9oZXJvX3NlbGVjdGlvbl9zb3VyY2VCGQoXX2hlcm9fcm91dGluZ19zdGFnZV9rZXlCGgoYX2hlcm9fcm91dGluZ19zY3JpcHRfa2V5QhoKGF9vcHRpbWl6YXRpb25fY2Vzc2lvbl9pZCLVAQolUHJvcG9zYWxPcHRpbWl6YXRpb25CdW5kbGVSZXNwb25zZUR0bxJICgZyZXN1bHQYASABKAsyOC5oYWdpY29kZS5zZXNzaW9uLnYxLlByb3Bvc2FsT3B0aW1pemF0aW9uQnVuZGxlUmVzdWx0RHRvEkoKB3N1bW1hcnkYAiABKAsyOS5oYWdpY29kZS5zZXNzaW9uLnYxLlByb3Bvc2FsT3B0aW1pemF0aW9uQnVuZGxlU3VtbWFyeUR0bxIWCg5jb3JyZWxhdGlvbl9pZBgDIAEoCSKJAwoXT3B0aW1pemVQcm9wb3NhbFJlcXVlc3QSEwoLZGVzY3JpcHRpb24YASABKAkSJgoZcHJvcG9zYWxfY29udGVudF9sYW5ndWFnZRgCIAEoCUgAiAEBEiMKFm9wdGltaXphdGlvbl9kaXJlY3Rpb24YAyABKAlIAYgBARISCgV0aXRsZRgEIAEoCUgCiAEBEhgKEGlzX2RlZmF1bHRfdGl0bGUYBSABKAgSJQoYb3JpZ2luYWxfY2hpZWZfY29tcGxhaW50GAYgASgJSAOIAQESVwoRc2NlbmFyaW9fc2V0dGluZ3MYByABKAsyPC5oYWdpY29kZS5zZXNzaW9uLnYxLlByb3Bvc2FsT3B0aW1pemF0aW9uU2NlbmFyaW9TZXR0aW5nc0R0b0IcChpfcHJvcG9zYWxfY29udGVudF9sYW5ndWFnZUIZChdfb3B0aW1pemF0aW9uX2RpcmVjdGlvbkIICgZfdGl0bGVCGwoZX29yaWdpbmFsX2NoaWVmX2NvbXBsYWludCJFChpQbGFubmluZ0RpcmVjdGlvbk9wdGlvbkR0bxIPCgJpZBgBIAEoCUgAiAEBEg8KB2VuYWJsZWQYAiABKAhCBQoDX2lkIowCChpHZW5lcmF0ZVByb3Bvc2FsUmVxdWVzdER0bxIgChNlbmFibGVfZXhwbG9yZV9tb2RlGAEgASgISACIAQESTAoTcGxhbm5pbmdfZGlyZWN0aW9ucxgCIAMoCzIvLmhhZ2ljb2RlLnNlc3Npb24udjEuUGxhbm5pbmdEaXJlY3Rpb25PcHRpb25EdG8SJgoZcHJvcG9zYWxfY29udGVudF9sYW5ndWFnZRgDIAEoCUgBiAEBEhQKB2hlcm9faWQYBCABKAlIAogBAUIWChRfZW5hYmxlX2V4cGxvcmVfbW9kZUIcChpfcHJvcG9zYWxfY29udGVudF9sYW5ndWFnZUIKCghfaGVyb19pZCI8ChhBcmNoaXZlU2Vzc2lvblJlcXVlc3REdG8SFAoHaGVyb19pZBgBIAEoCUgAiAEBQgoKCF9oZXJvX2lkIj0KGUV4ZWN1dGVQcm9wb3NhbFJlcXVlc3REdG8SFAoHaGVyb19pZBgBIAEoCUgAiAEBQgoKCF9oZXJvX2lkIlcKC0NvbmZsaWN0RHRvEgwKBHR5cGUYASABKAkSEQoJZW50aXR5X2lkGAIgASgJEhMKC2Rlc2NyaXB0aW9uGAMgASgJEhIKCnJlc29sdXRpb24YBCABKAkiawoSVmFsaWRhdGlvbklzc3VlRHRvEgwKBGNvZGUYASABKAkSDwoHbWVzc2FnZRgCIAEoCRIQCghzZXZlcml0eRgDIAEoCRIWCgllbnRpdHlfaWQYBCABKAlIAIgBAUIMCgpfZW50aXR5X2lkIoUBChRWYWxpZGF0aW9uU3VtbWFyeUR0bxIVCg1wcm9qZWN0X2NvdW50GAEgASgFEhUKDXNlc3Npb25fY291bnQYAiABKAUSHwoXZHVwbGljYXRlX3Byb2plY3RfY291bnQYAyABKAUSHgoWb3JwaGFuZWRfc2Vzc2lvbl9jb3VudBgEIAEoBSKMAgoTVmFsaWRhdGlvblJlc3VsdER0bxIQCghpc192YWxpZBgBIAEoCBI5Cgh3YXJuaW5ncxgCIAMoCzInLmhhZ2ljb2RlLnNlc3Npb24udjEuVmFsaWRhdGlvbklzc3VlRHRvEjcKBmVycm9ycxgDIAMoCzInLmhhZ2ljb2RlLnNlc3Npb24udjEuVmFsaWRhdGlvbklzc3VlRHRvEjMKCWNvbmZsaWN0cxgEIAMoCzIgLmhhZ2ljb2RlLnNlc3Npb24udjEuQ29uZmxpY3REdG8SOgoHc3VtbWFyeRgFIAEoCzIpLmhhZ2ljb2RlLnNlc3Npb24udjEuVmFsaWRhdGlvblN1bW1hcnlEdG8yngwKFlNlc3Npb25Qcm9wb3NhbFNlcnZpY2UShAEKF09wdGltaXplU2Vzc2lvblByb3Bvc2FsEjMuaGFnaWNvZGUuc2Vzc2lvbi52MS5PcHRpbWl6ZVNlc3Npb25Qcm9wb3NhbFJlcXVlc3QaNC5oYWdpY29kZS5zZXNzaW9uLnYxLk9wdGltaXplU2Vzc2lvblByb3Bvc2FsUmVzcG9uc2USbwoQR2VuZXJhdGVQcm9wb3NhbBIsLmhhZ2ljb2RlLnNlc3Npb24udjEuR2VuZXJhdGVQcm9wb3NhbFJlcXVlc3QaLS5oYWdpY29kZS5zZXNzaW9uLnYxLkdlbmVyYXRlUHJvcG9zYWxSZXNwb25zZRJpCg5BcmNoaXZlU2Vzc2lvbhIqLmhhZ2ljb2RlLnNlc3Npb24udjEuQXJjaGl2ZVNlc3Npb25SZXF1ZXN0GisuaGFnaWNvZGUuc2Vzc2lvbi52MS5BcmNoaXZlU2Vzc2lvblJlc3BvbnNlEmwKD0V4ZWN1dGVQcm9wb3NhbBIrLmhhZ2ljb2RlLnNlc3Npb24udjEuRXhlY3V0ZVByb3Bvc2FsUmVxdWVzdBosLmhhZ2ljb2RlLnNlc3Npb24udjEuRXhlY3V0ZVByb3Bvc2FsUmVzcG9uc2USbAoPQ29tcGxldGVTZXNzaW9uEisuaGFnaWNvZGUuc2Vzc2lvbi52MS5Db21wbGV0ZVNlc3Npb25SZXF1ZXN0GiwuaGFnaWNvZGUuc2Vzc2lvbi52MS5Db21wbGV0ZVNlc3Npb25SZXNwb25zZRKBAQoWVmFsaWRhdGVTZXNzaW9uRXhlY3V0ZRIyLmhhZ2ljb2RlLnNlc3Npb24udjEuVmFsaWRhdGVTZXNzaW9uRXhlY3V0ZVJlcXVlc3QaMy5oYWdpY29kZS5zZXNzaW9uLnYxLlZhbGlkYXRlU2Vzc2lvbkV4ZWN1dGVSZXNwb25zZRJ7ChRWYWxpZGF0ZVNlc3Npb25TdGFydBIwLmhhZ2ljb2RlLnNlc3Npb24udjEuVmFsaWRhdGVTZXNzaW9uU3RhcnRSZXF1ZXN0GjEuaGFnaWNvZGUuc2Vzc2lvbi52MS5WYWxpZGF0ZVNlc3Npb25TdGFydFJlc3BvbnNlEoEBChZWYWxpZGF0ZVNlc3Npb25BcmNoaXZlEjIuaGFnaWNvZGUuc2Vzc2lvbi52MS5WYWxpZGF0ZVNlc3Npb25BcmNoaXZlUmVxdWVzdBozLmhhZ2ljb2RlLnNlc3Npb24udjEuVmFsaWRhdGVTZXNzaW9uQXJjaGl2ZVJlc3BvbnNlEpABChtMaXN0VW5saW5rZWRPcGVuU3BlY0NoYW5nZXMSNy5oYWdpY29kZS5zZXNzaW9uLnYxLkxpc3RVbmxpbmtlZE9wZW5TcGVjQ2hhbmdlc1JlcXVlc3QaOC5oYWdpY29kZS5zZXNzaW9uLnYxLkxpc3RVbmxpbmtlZE9wZW5TcGVjQ2hhbmdlc1Jlc3BvbnNlEpMBChxDb3VudFVubGlua2VkT3BlblNwZWNDaGFuZ2VzEjguaGFnaWNvZGUuc2Vzc2lvbi52MS5Db3VudFVubGlua2VkT3BlblNwZWNDaGFuZ2VzUmVxdWVzdBo5LmhhZ2ljb2RlLnNlc3Npb24udjEuQ291bnRVbmxpbmtlZE9wZW5TcGVjQ2hhbmdlc1Jlc3BvbnNlEpYBCh1HZXRVbmxpbmtlZE9wZW5TcGVjQ2hhbmdlRmlsZRI5LmhhZ2ljb2RlLnNlc3Npb24udjEuR2V0VW5saW5rZWRPcGVuU3BlY0NoYW5nZUZpbGVSZXF1ZXN0GjouaGFnaWNvZGUuc2Vzc2lvbi52MS5HZXRVbmxpbmtlZE9wZW5TcGVjQ2hhbmdlRmlsZVJlc3BvbnNlEn4KFUltcG9ydE9wZW5TcGVjQ2hhbmdlcxIxLmhhZ2ljb2RlLnNlc3Npb24udjEuSW1wb3J0T3BlblNwZWNDaGFuZ2VzUmVxdWVzdBoyLmhhZ2ljb2RlLnNlc3Npb24udjEuSW1wb3J0T3BlblNwZWNDaGFuZ2VzUmVzcG9uc2VCKaoCJlBDb2RlLkh0dHBBcGkuR3JwY0NvbnRyYWN0cy5TZXNzaW9uLlYxYgZwcm90bzM",[Ne,de]),mb=v(Ie,15),hb=v(Ie,17),bb=v(Ie,19),gb=v(Ie,21),pb=v(Ie,23),Ab=v(Ie,36),fb=v(Ie,38),Zb=v(Ie,39),Rb=v(Ie,40),Eb=We(Ie,0),Vb=oe("CixoYWdpY29kZS9jb29yZGluYXRpb24vdjEvcmVzb3VyY2VfbG9jay5wcm90bxIYaGFnaWNvZGUuY29vcmRpbmF0aW9uLnYxIuMFCgpMb2NrU3RhdHVzEg8KB2xvY2tfaWQYASABKAkSEAoIb3duZXJfaWQYAiABKAkSDgoGc3RhdHVzGAMgASgJEhAKCHBvc2l0aW9uGAQgASgFEg0KBWVwb2NoGAUgASgDEjQKEGxlYXNlX2V4cGlyZXNfYXQYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEjcKE21heF9ob2xkX2V4cGlyZXNfYXQYByABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEhcKD2hvbGRlcl9vd25lcl9pZBgIIAEoCRIUCgxob2xkZXJfbGFiZWwYCSABKAkSFAoMcXVldWVfbGVuZ3RoGAogASgFEiIKGnN1Z2dlc3RlZF9wb2xsX2ludGVydmFsX21zGAsgASgFEicKH3N1Z2dlc3RlZF9oZWFydGJlYXRfaW50ZXJ2YWxfbXMYDCABKAUSLwoLc2VydmVyX3RpbWUYDSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEiEKGXJlcXVpc2l0aW9uZWRfYnlfb3duZXJfaWQYDiABKAkSGgoScmVxdWlzaXRpb25fcmVhc29uGA8gASgJEjQKEHJlcXVpc2l0aW9uZWRfYXQYECABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEjgKFGNoZWNrX2luX2VhcmxpZXN0X2F0GBEgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBI2ChJjaGVja19pbl9sYXRlc3RfYXQYEiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEjQKEHR1cm5fZWFybGllc3RfYXQYEyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEjIKDnR1cm5fbGF0ZXN0X2F0GBQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCKrAQoSQWNxdWlyZUxvY2tSZXF1ZXN0Eg8KB2xvY2tfaWQYASABKAkSEAoIb3duZXJfaWQYAiABKAkSGgoNbGVhc2Vfc2Vjb25kcxgDIAEoBUgAiAEBEhIKBWxhYmVsGAQgASgJSAGIAQESFwoKc2Vzc2lvbl9pZBgFIAEoCUgCiAEBQhAKDl9sZWFzZV9zZWNvbmRzQggKBl9sYWJlbEINCgtfc2Vzc2lvbl9pZCJLChNBY3F1aXJlTG9ja1Jlc3BvbnNlEjQKBnJlc3VsdBgBIAEoCzIkLmhhZ2ljb2RlLmNvb3JkaW5hdGlvbi52MS5Mb2NrU3RhdHVzImUKFEdldExvY2tTdGF0dXNSZXF1ZXN0Eg8KB2xvY2tfaWQYASABKAkSEAoIb3duZXJfaWQYAiABKAkSGQoMd2FpdF9zZWNvbmRzGAMgASgFSACIAQFCDwoNX3dhaXRfc2Vjb25kcyJNChVHZXRMb2NrU3RhdHVzUmVzcG9uc2USNAoGcmVzdWx0GAEgASgLMiQuaGFnaWNvZGUuY29vcmRpbmF0aW9uLnYxLkxvY2tTdGF0dXMigQEKEFJlbmV3TG9ja1JlcXVlc3QSDwoHbG9ja19pZBgBIAEoCRIQCghvd25lcl9pZBgCIAEoCRIaCg1sZWFzZV9zZWNvbmRzGAMgASgFSACIAQESEgoFZXBvY2gYBCABKANIAYgBAUIQCg5fbGVhc2Vfc2Vjb25kc0IICgZfZXBvY2giSQoRUmVuZXdMb2NrUmVzcG9uc2USNAoGcmVzdWx0GAEgASgLMiQuaGFnaWNvZGUuY29vcmRpbmF0aW9uLnYxLkxvY2tTdGF0dXMiVQoSUmVsZWFzZUxvY2tSZXF1ZXN0Eg8KB2xvY2tfaWQYASABKAkSEAoIb3duZXJfaWQYAiABKAkSEgoFZXBvY2gYAyABKANIAIgBAUIICgZfZXBvY2giWQoTUmVsZWFzZUxvY2tSZXNwb25zZRIQCghyZWxlYXNlZBgBIAEoCBIXCg9wcmV2aW91c19zdGF0dXMYAiABKAkSFwoPaG9sZGVyX293bmVyX2lkGAMgASgJIpEBChZSZXF1aXNpdGlvbkxvY2tSZXF1ZXN0Eg8KB2xvY2tfaWQYASABKAkSEAoIb3duZXJfaWQYAiABKAkSDgoGcmVhc29uGAMgASgJEhIKBWxhYmVsGAQgASgJSACIAQESFwoKc2Vzc2lvbl9pZBgFIAEoCUgBiAEBQggKBl9sYWJlbEINCgtfc2Vzc2lvbl9pZCJPChdSZXF1aXNpdGlvbkxvY2tSZXNwb25zZRI0CgZyZXN1bHQYASABKAsyJC5oYWdpY29kZS5jb29yZGluYXRpb24udjEuTG9ja1N0YXR1cyIyChBMaXN0TG9ja3NSZXF1ZXN0EhMKBnByZWZpeBgBIAEoCUgAiAEBQgkKB19wcmVmaXgiSQoRTGlzdExvY2tzUmVzcG9uc2USNAoFbG9ja3MYASADKAsyJS5oYWdpY29kZS5jb29yZGluYXRpb24udjEuTG9ja1N1bW1hcnki3QEKC0xvY2tTdW1tYXJ5Eg8KB2xvY2tfaWQYASABKAkSFwoPaG9sZGVyX293bmVyX2lkGAIgASgJEhQKDGhvbGRlcl9sYWJlbBgDIAEoCRINCgVlcG9jaBgEIAEoAxI0ChBsZWFzZV9leHBpcmVzX2F0GAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIzCg9ob2xkX3N0YXJ0ZWRfYXQYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEhQKDHF1ZXVlX2xlbmd0aBgHIAEoBTKjBQoTUmVzb3VyY2VMb2NrU2VydmljZRJqCgtBY3F1aXJlTG9jaxIsLmhhZ2ljb2RlLmNvb3JkaW5hdGlvbi52MS5BY3F1aXJlTG9ja1JlcXVlc3QaLS5oYWdpY29kZS5jb29yZGluYXRpb24udjEuQWNxdWlyZUxvY2tSZXNwb25zZRJwCg1HZXRMb2NrU3RhdHVzEi4uaGFnaWNvZGUuY29vcmRpbmF0aW9uLnYxLkdldExvY2tTdGF0dXNSZXF1ZXN0Gi8uaGFnaWNvZGUuY29vcmRpbmF0aW9uLnYxLkdldExvY2tTdGF0dXNSZXNwb25zZRJkCglSZW5ld0xvY2sSKi5oYWdpY29kZS5jb29yZGluYXRpb24udjEuUmVuZXdMb2NrUmVxdWVzdBorLmhhZ2ljb2RlLmNvb3JkaW5hdGlvbi52MS5SZW5ld0xvY2tSZXNwb25zZRJqCgtSZWxlYXNlTG9jaxIsLmhhZ2ljb2RlLmNvb3JkaW5hdGlvbi52MS5SZWxlYXNlTG9ja1JlcXVlc3QaLS5oYWdpY29kZS5jb29yZGluYXRpb24udjEuUmVsZWFzZUxvY2tSZXNwb25zZRJ2Cg9SZXF1aXNpdGlvbkxvY2sSMC5oYWdpY29kZS5jb29yZGluYXRpb24udjEuUmVxdWlzaXRpb25Mb2NrUmVxdWVzdBoxLmhhZ2ljb2RlLmNvb3JkaW5hdGlvbi52MS5SZXF1aXNpdGlvbkxvY2tSZXNwb25zZRJkCglMaXN0TG9ja3MSKi5oYWdpY29kZS5jb29yZGluYXRpb24udjEuTGlzdExvY2tzUmVxdWVzdBorLmhhZ2ljb2RlLmNvb3JkaW5hdGlvbi52MS5MaXN0TG9ja3NSZXNwb25zZUIuqgIrUENvZGUuSHR0cEFwaS5HcnBjQ29udHJhY3RzLkNvb3JkaW5hdGlvbi5WMWIGcHJvdG8z",[Ne]),Gb=We(Vb,0),Hn=new Set([b.INT64,b.UINT64,b.SINT64,b.FIXED64,b.SFIXED64]),Ys=e=>e.typeName.startsWith("google.protobuf.");function Tn(e){if(typeof e!="string")return e;const t=Number(e);return Number.isSafeInteger(t)?t:e}function un(e,t){if(t==null||typeof t!="object"||Array.isArray(t)||Ys(e))return t;const n=t;for(const o of e.fields){const a=n[o.jsonName];a!==void 0&&(n[o.jsonName]=Sb(o,a))}return n}function Sb(e,t){switch(e.fieldKind){case"scalar":return Hn.has(e.scalar)?Tn(t):t;case"message":return un(e.message,t);case"list":return Array.isArray(t)?e.listKind==="scalar"?Hn.has(e.scalar)?t.map(Tn):t:e.listKind==="message"?t.map(n=>un(e.message,n)):t:t;case"map":{if(t===null||typeof t!="object"||Array.isArray(t))return t;const n=t;for(const o of Object.keys(n))e.mapKind==="scalar"&&Hn.has(e.scalar)?n[o]=Tn(n[o]):e.mapKind==="message"&&(n[o]=un(e.message,n[o]));return n}default:return t}}function Nb(e,t){return un(e,es(e,t,{alwaysEmitImplicit:!0}))}function vb(e,t){return Nb(e,t).result}function mn(e,t,n=0){if(t===null||typeof t!="object"||Array.isArray(t)||Ys(e)||n>8)return t;const o=t;for(const a of e.fields){const r=o[a.jsonName];if(!(r===null||typeof r!="object")){if(a.fieldKind==="message")mn(a.message,r,n+1);else if(a.fieldKind==="list"&&a.listKind==="message"&&Array.isArray(r))r.forEach(i=>mn(a.message,i,n+1));else if(a.fieldKind==="map"&&!Array.isArray(r)){const i=r;for(const s of Object.keys(i)){const l=i[s];a.mapKind==="scalar"&&a.scalar===b.STRING?l===null?delete i[s]:(typeof l=="number"||typeof l=="boolean")&&(i[s]=String(l)):a.mapKind==="message"&&mn(a.message,l,n+1)}}}}return t}function D(e,t){return is(e,t===void 0?t:mn(e,JSON.parse(JSON.stringify(t))),{ignoreUnknownFields:!0})}function Br(e,t){const n=Zs(e);if(n)throw t.forEach((o,a)=>{n.metadata.append(a,o)}),n;if(!t.has("Grpc-Status")&&!e.has("Grpc-Status"))throw new C("protocol error: missing status",E.Internal)}function Wb(e,t,n,o){var a,r;const i=new Headers(n??{});i.set(bm,e?Em:Vm),i.set(Rm,"1");const s=(r=(a=i.get("User-Agent"))!==null&&a!==void 0?a:i.get("X-User-Agent"))!==null&&r!==void 0?r:"connect-es/2.2.0";return i.set(Zm,s),o&&i.set(fm,s),t!==void 0&&i.set(pm,`${t}m`),i}function Cr(e,t,n,o,a,r){const i=Wb(e,t,n,r);return a!=null&&i.set(As,a.name),o.length>0&&i.set(gm,o.map(s=>s.name).join(",")),i}function yb(e){switch(e){case 400:return E.Internal;case 401:return E.Unauthenticated;case 403:return E.PermissionDenied;case 404:return E.Unimplemented;case 429:return E.Unavailable;case 502:return E.Unavailable;case 503:return E.Unavailable;case 504:return E.Unavailable;default:return E.Unknown}}function Ib(e,t){var n;if(e>=200&&e<300)return{foundStatus:t.has(fs),headerError:Zs(t)};throw new C(decodeURIComponent((n=t.get("Grpc-Message"))!==null&&n!==void 0?n:`HTTP ${e}`),yb(e),t)}function Fr(e,t,n){const{foundStatus:o,headerError:a}=Ib(t,n);let r;const i=n.get(As);if(i!==null&&i.toLowerCase()!=="identity"&&(r=e.find(s=>s.name===i),!r))throw new C(`unsupported response encoding "${i}"`,E.Internal,n);return{foundStatus:o,compression:r,headerError:a}}var wr=function(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t=e[Symbol.asyncIterator],n;return t?t.call(e):(e=typeof __values=="function"?__values(e):e[Symbol.iterator](),n={},o("next"),o("throw"),o("return"),n[Symbol.asyncIterator]=function(){return this},n);function o(r){n[r]=e[r]&&function(i){return new Promise(function(s,l){i=e[r](i),a(s,l,i.done,i.value)})}}function a(r,i,s,l){Promise.resolve(l).then(function(c){r({value:c,done:s})},i)}},ze=function(e){return this instanceof ze?(this.v=e,this):new ze(e)},Yb=function(e,t,n){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var o=n.apply(e,t||[]),a,r=[];return a=Object.create((typeof AsyncIterator=="function"?AsyncIterator:Object).prototype),s("next"),s("throw"),s("return",i),a[Symbol.asyncIterator]=function(){return this},a;function i(Z){return function(G){return Promise.resolve(G).then(Z,h)}}function s(Z,G){o[Z]&&(a[Z]=function(S){return new Promise(function(X,J){r.push([Z,S,X,J])>1||l(Z,S)})},G&&(a[Z]=G(a[Z])))}function l(Z,G){try{c(o[Z](G))}catch(S){A(r[0][3],S)}}function c(Z){Z.value instanceof ze?Promise.resolve(Z.value.v).then(u,h):A(r[0][2],Z)}function u(Z){l("next",Z)}function h(Z){l("throw",Z)}function A(Z,G){Z(G),r.shift(),r.length&&l(r[0][0],r[0][1])}};function Xb(e){return{async unary(t,n,o,a,r,i){const s=vr(t,e.binaryOptions,e.jsonOptions,e);return o=o===void 0?e.defaultTimeoutMs:o<=0?void 0:o,await Wm({interceptors:e.interceptors,signal:n,timeoutMs:o,req:{stream:!1,service:t.parent,method:t,requestMethod:"POST",url:Nr(e.baseUrl,t),header:Cr(e.useBinaryFormat,o,a,e.acceptCompression,e.sendCompression,!0),contextValues:i??Gr(),message:r},next:async l=>{const c=await e.httpClient({url:l.url,method:l.requestMethod,header:l.header,signal:l.signal,body:dn(bs([l.message]),Ar(s.getI(e.useBinaryFormat)),Zr(e.sendCompression,e.compressMinBytes),Er(),{propagateDownStreamError:!0})}),{compression:u,headerError:h}=Fr(e.acceptCompression,c.status,c.header),{trailer:A,message:Z}=await tm(c.body,Vr(e.readMaxBytes),Rr(u??null,e.readMaxBytes),fr(s.getO(e.useBinaryFormat),128,Sr()),async G=>{var S,X,J,d;let m,p;try{for(var g=!0,f=wr(G),V;V=await f.next(),S=V.done,!S;g=!0){d=V.value,g=!1;const B=d;if(B.end){if(p!==void 0)throw new C("protocol error: received extra trailer",E.Unimplemented);p=B.value}else{if(m!==void 0)throw new C("protocol error: received extra output message for unary method",E.Unimplemented);m=B.value}}}catch(B){X={error:B}}finally{try{!g&&!S&&(J=f.return)&&await J.call(f)}finally{if(X)throw X.error}}return{trailer:p,message:m}},{propagateDownStreamError:!1});if(A===void 0)throw h??new C("protocol error: missing trailer",c.header.has("Grpc-Status")?E.Unimplemented:E.Unknown);if(Br(A,c.header),Z===void 0)throw new C("protocol error: missing output message for unary method",A.has("Grpc-Status")?E.Unimplemented:E.Unknown);return{stream:!1,service:t.parent,method:t,header:c.header,message:Z,trailer:A}}})},async stream(t,n,o,a,r,i){const s=vr(t,e.binaryOptions,e.jsonOptions,e);return o=o===void 0?e.defaultTimeoutMs:o<=0?void 0:o,ym({interceptors:e.interceptors,signal:n,timeoutMs:o,req:{stream:!0,service:t.parent,method:t,requestMethod:"POST",url:Nr(e.baseUrl,t),header:Cr(e.useBinaryFormat,o,a,e.acceptCompression,e.sendCompression,!0),contextValues:i??Gr(),message:r},next:async l=>{const c=await e.httpClient({url:l.url,method:l.requestMethod,header:l.header,signal:l.signal,body:dn(l.message,Ar(s.getI(e.useBinaryFormat)),Zr(e.sendCompression,e.compressMinBytes),Er(),{propagateDownStreamError:!0})}),{compression:u,foundStatus:h,headerError:A}=Fr(e.acceptCompression,c.status,c.header);if(A)throw A;const Z=Object.assign(Object.assign({},l),{header:c.header,trailer:new Headers,message:dn(c.body,Vr(e.readMaxBytes),Rr(u??null,e.readMaxBytes),fr(s.getO(e.useBinaryFormat),128,Sr()),function(G){return Yb(this,arguments,function*(){var S,X,J,d;if(h){if((yield ze(G[Symbol.asyncIterator]().next())).done!==!0)throw new C("protocol error: extra data for trailers-only",E.InvalidArgument);return yield ze(void 0)}let m=!1;try{for(var p=!0,g=wr(G),f;f=yield ze(g.next()),S=f.done,!S;p=!0){d=f.value,p=!1;const V=d;if(V.end){if(m)throw new C("protocol error: received extra trailer",E.InvalidArgument);m=!0,Br(V.value,c.header),V.value.forEach((B,K)=>Z.trailer.set(K,B));continue}if(m)throw new C("protocol error: received extra message after trailer",E.InvalidArgument);yield yield ze(V.value)}}catch(V){X={error:V}}finally{try{!p&&!S&&(J=g.return)&&(yield ze(J.call(g)))}finally{if(X)throw X.error}}if(!m)throw new C("protocol error: missing trailer",E.Internal)})},{propagateDownStreamError:!0})});return Z}})}}}function Wn(e){let t=E.Internal;const n=$o(e).map(yn);n.some(a=>a.code=="ERR_STREAM_WRITE_AFTER_END")||n.some(a=>a.code=="ERR_STREAM_DESTROYED"||a.code=="ERR_HTTP2_INVALID_STREAM"||a.code=="ECONNRESET")?t=E.Aborted:n.some(a=>a.code=="ETIMEDOUT"||a.code=="ENOTFOUND"||a.code=="EAI_AGAIN"||a.code=="ECONNREFUSED")&&(t=E.Unavailable);const o=C.from(e,t);return o!==e&&(o.cause=e),o}function $o(e){const t=[];for(;!(!(e instanceof Error)||t.includes(e)||(t.push(e),!("cause"in e)));)e=e.cause;return t}function yn(e){const t={};return e instanceof Error&&("code"in e&&typeof e.code=="string"&&(t.code=e.code),"syscall"in e&&typeof e.syscall=="string"&&(t.syscall=e.syscall)),t}function Bb(e){switch(e){case $.PROTOCOL_ERROR:case $.INTERNAL_ERROR:case $.FLOW_CONTROL_ERROR:case $.SETTINGS_TIMEOUT:case $.FRAME_SIZE_ERROR:case $.COMPRESSION_ERROR:case $.CONNECT_ERROR:return new C(`http/2 stream closed with error code ${$[e]} (0x${e.toString(16)})`,E.Internal);case $.REFUSED_STREAM:return new C(`http/2 stream closed with error code ${$[e]} (0x${e.toString(16)})`,E.Unavailable);case $.CANCEL:return new C(`http/2 stream closed with error code ${$[e]} (0x${e.toString(16)})`,E.Canceled);case $.ENHANCE_YOUR_CALM:return new C(`http/2 stream closed with error code ${$[e]} (0x${e.toString(16)})`,E.ResourceExhausted);case $.INADEQUATE_SECURITY:return new C(`http/2 stream closed with error code ${$[e]} (0x${e.toString(16)})`,E.PermissionDenied);case $.HTTP_1_1_REQUIRED:return new C(`http/2 stream closed with error code ${$[e]} (0x${e.toString(16)})`,E.PermissionDenied);default:break}}var $;(function(e){e[e.PROTOCOL_ERROR=1]="PROTOCOL_ERROR",e[e.INTERNAL_ERROR=2]="INTERNAL_ERROR",e[e.FLOW_CONTROL_ERROR=3]="FLOW_CONTROL_ERROR",e[e.SETTINGS_TIMEOUT=4]="SETTINGS_TIMEOUT",e[e.STREAM_CLOSED=5]="STREAM_CLOSED",e[e.FRAME_SIZE_ERROR=6]="FRAME_SIZE_ERROR",e[e.REFUSED_STREAM=7]="REFUSED_STREAM",e[e.CANCEL=8]="CANCEL",e[e.COMPRESSION_ERROR=9]="COMPRESSION_ERROR",e[e.CONNECT_ERROR=10]="CONNECT_ERROR",e[e.ENHANCE_YOUR_CALM=11]="ENHANCE_YOUR_CALM",e[e.INADEQUATE_SECURITY=12]="INADEQUATE_SECURITY",e[e.HTTP_1_1_REQUIRED=13]="HTTP_1_1_REQUIRED"})($||($={}));var Cb=(0,Zn.promisify)(gt.gzip),Fb=(0,Zn.promisify)(gt.gunzip),wb=(0,Zn.promisify)(gt.brotliCompress),kb=(0,Zn.promisify)(gt.brotliDecompress),Ub={name:"gzip",compress(e){return gn(Cb(e,{}))},decompress(e,t){return e.length==0?Promise.resolve(new Uint8Array(0)):gn(Xs(Fb(e,{maxOutputLength:t}),t))}},Jb={name:"br",compress(e){return gn(wb(e,{}))},decompress(e,t){return e.length==0?Promise.resolve(new Uint8Array(0)):gn(Xs(kb(e,{maxOutputLength:t}),t))}};function gn(e){return e.then(t=>t.buffer instanceof ArrayBuffer?t:new Uint8Array(t))}function Xs(e,t){return e.catch(n=>{var o;const a=yn(n);let r=E.Internal,i="decompression failed";switch(a.code){case"ERR_BUFFER_TOO_LARGE":r=E.ResourceExhausted,i=`message is larger than configured readMaxBytes ${t} after decompression`;break;case"Z_DATA_ERROR":case"ERR_PADDING_2":r=E.InvalidArgument;break;default:!((o=a.code)===null||o===void 0)&&o.startsWith("ERR__ERROR_FORMAT_")&&(r=E.InvalidArgument);break}return Promise.reject(new C(i,r,void 0,void 0,n))})}function In(e){const t=new Headers;for(const[n,o]of Object.entries(e))if(!n.startsWith(":")&&o!==void 0)if(typeof o=="string")t.append(n,o);else if(typeof o=="number")t.append(n,String(o));else for(const a of o)t.append(n,a);return t}function Bs(e,t){if(e===void 0&&t===void 0)return;const n=Object.create(null);if(t!==void 0)if(Array.isArray(t))for(let o=0;o+1<t.length;o+=2){const a=t[o],r=t[o+1];Array.isArray(n[a])?n[a].push(r):typeof n[a]=="string"?n[a]=[n[a],r]:n[a]=r}else for(const[o,a]of Object.entries(t))Array.isArray(a)?n[o]=a.concat():a!==void 0&&(n[o]=a);if(e!==void 0)if(Array.isArray(e))for(const[o,a]of e)Qn(n,o,a);else if("forEach"in e)typeof e.forEach=="function"&&e.forEach((o,a)=>{Qn(n,a,o)});else for(const[o,a]of Object.entries(e))Qn(n,o,a);return n}function Qn(e,t,n){t=t.toLowerCase();const o=e[t];Array.isArray(o)?o.push(n):o===void 0?e[t]=n:e[t]=[o.toString(),n]}var Cs=class{state(){return this.s.t=="ready"?this.verifying!==void 0?"verifying":this.s.streamCount()>0?"open":"idle":this.s.t}error(){if(this.s.t=="error")return this.s.reason}constructor(e,t,n){var o,a,r,i;this.s=co(),this.shuttingDown=[],this.authority=new URL(e).origin,this.http2SessionOptions=n,this.options={pingIntervalMs:(o=t?.pingIntervalMs)!==null&&o!==void 0?o:Number.POSITIVE_INFINITY,pingTimeoutMs:(a=t?.pingTimeoutMs)!==null&&a!==void 0?a:1e3*15,pingIdleConnection:(r=t?.pingIdleConnection)!==null&&r!==void 0?r:!1,idleConnectionTimeoutMs:(i=t?.idleConnectionTimeoutMs)!==null&&i!==void 0?i:1e3*60*15}}async connect(){try{return(await this.gotoReady()).streamCount()>0?"open":"idle"}catch{return"error"}}async request(e,t,n,o){for(;;){const a=await this.gotoReady();try{const r=a.conn.request(Object.assign(Object.assign({},n),{":method":e,":path":t}),o);return a.registerRequest(r),r}catch(r){if(a.conn.closed||a.conn.destroyed)continue;throw r}}}notifyResponseByteRead(e){this.s.t=="ready"&&this.s.responseByteRead(e);for(const t of this.shuttingDown)t.responseByteRead(e)}abort(e){var t,n,o;const a=e??new C("connection aborted",E.Canceled);(n=(t=this.s).abort)===null||n===void 0||n.call(t,a);for(const r of this.shuttingDown)(o=r.abort)===null||o===void 0||o.call(r,a);this.setState(qt(a))}async gotoReady(){for(this.s.t=="ready"?this.s.isShuttingDown()||this.s.conn.closed||this.s.conn.destroyed?this.setState(Mn(this.authority,this.http2SessionOptions)):this.s.requiresVerify()&&await this.verify(this.s):(this.s.t=="closed"||this.s.t=="error")&&this.setState(Mn(this.authority,this.http2SessionOptions));this.s.t!=="ready";){if(this.s.t==="error")throw this.s.reason;this.s.t==="connecting"&&await this.s.conn}return this.s}setState(e){var t,n;if((n=(t=this.s).onExitState)===null||n===void 0||n.call(t),this.s.t=="ready"&&this.s.isShuttingDown()){const o=this.s;this.shuttingDown.push(o),o.onClose=o.onError=()=>{const a=this.shuttingDown.indexOf(o);a!==-1&&this.shuttingDown.splice(a,1)}}switch(e.t){case"connecting":e.conn.then(o=>{this.setState(Kb(o,this.options))},o=>{this.setState(qt(o))});break;case"ready":e.onClose=()=>this.setState(co()),e.onError=o=>this.setState(qt(o));break;case"closed":break;case"error":break}this.s=e}verify(e){return this.verifying!==void 0?this.verifying:(this.verifying=e.verify().then(t=>{t||this.setState(Mn(this.authority,this.http2SessionOptions))},t=>{this.setState(qt(t))}).finally(()=>{this.verifying=void 0}),this.verifying)}};function co(){return{t:"closed"}}function xb(e){return{t:"error",reason:e}}function qt(e){return e instanceof C&&C.from(e).code==E.Canceled?co():xb(e)}function Mn(e,t){let n,o;const a=new Promise((c,u)=>{n=c,o=u}),r=Re.connect(e,t);r.on("connect",i),r.on("error",s);function i(){n?.(r),l()}function s(c){o?.(Wn(c)),l()}function l(){r.off("connect",i),r.off("error",s)}return{t:"connecting",conn:a,abort(c){r.destroyed||r.destroy(void 0,Re.constants.NGHTTP2_CANCEL),o?.(c)},onExitState(){l()}}}function Kb(e,t){zb(e),e.unref();let n=Date.now(),o=0,a,r,i=!1,s=!1,l;S();const c={t:"ready",conn:e,streamCount(){return o},requiresVerify(){return Date.now()-n>t.pingIntervalMs},isShuttingDown(){return i},onClose:void 0,onError:void 0,registerRequest(g){o++,o==1&&(e.ref(),u(),G()),g.once("response",()=>{n=Date.now(),u()}),g.once("close",()=>{o--,o==0&&(e.unref(),u(),S())})},responseByteRead(g){g.session===e&&(e.closed||e.destroyed||o<=0||(n=Date.now(),u()))},verify(){return e.ref(),new Promise(g=>{const f=()=>{g(!1)};Z(()=>{o==0&&e.unref(),e.off("error",f),e.off("close",f),g(!0)}),e.once("error",f),e.once("close",f)})},abort(g){e.destroyed||(e.once("error",()=>{}),e.destroy(g,Re.constants.NGHTTP2_CANCEL))},onExitState(){c.isShuttingDown()||(p(),this.onError=void 0,this.onClose=void 0)}};function u(){h(),(o>0||t.pingIdleConnection)&&(a=On(A,t.pingIntervalMs))}function h(){clearTimeout(a),clearTimeout(r)}function A(){Z(u)}function Z(g){clearTimeout(r),r=On(()=>{e.destroy(new C("PING timed out",E.Unavailable),Re.constants.NGHTTP2_CANCEL)},t.pingTimeoutMs),e.ping((f,V)=>{if(clearTimeout(r),f===null){if(V>t.pingTimeoutMs){e.destroy(new C("PING timed out",E.Unavailable),Re.constants.NGHTTP2_CANCEL);return}n=Date.now(),g()}})}function G(){clearTimeout(l)}function S(){l=On(X,t.idleConnectionTimeoutMs)}function X(){e.close(),d()}function J(g,f,V){if(g===Re.constants.NGHTTP2_NO_ERROR&&o===0){e.destroy(new C("received GOAWAY without any open streams",E.Canceled),Re.constants.NGHTTP2_NO_ERROR);return}i=!0;const B=Buffer.from("too_many_pings","ascii");V?.equals(B)&&(t.pingIntervalMs=t.pingIntervalMs*2,s=!0)}function d(){var g;p(),(g=c.onClose)===null||g===void 0||g.call(c)}function m(g){var f,V;if(p(),s){const B=new C(`http/2 connection closed with error code ENHANCE_YOUR_CALM (0x${Re.constants.NGHTTP2_ENHANCE_YOUR_CALM.toString(16)}), too_many_pings, doubled the interval`,E.ResourceExhausted);(f=c.onError)===null||f===void 0||f.call(c,B)}else(V=c.onError)===null||V===void 0||V.call(c,Wn(g))}function p(){h(),G(),e.off("error",m),e.off("close",d),e.off("goaway",J)}return e.on("error",m),e.on("close",d),e.on("goaway",J),c}function On(e,t){if(!(t>2147483647))return setTimeout(e,t).unref()}function zb(e){if(e.connecting)throw new C("expected open session, but it is connecting",E.Internal);if(e.destroyed)throw new C("expected open session, but it is destroyed",E.Internal);if(e.closed)throw new C("expected open session, but it is closed",E.Internal)}function kr(e){var t;return e.httpVersion=="1.1"?Lb(e.nodeOptions):jb((t=e.sessionProvider)!==null&&t!==void 0?t:(n=>new Cs(n)))}function Lb(e){return async function(n){const o=ws(n.signal);return new Promise((a,r)=>{o.onError(i=>{r(i)}),Hb(o,n.url,Object.assign(Object.assign({},e),{headers:Bs(n.header,e?.headers),method:n.method}),i=>{Fs(n,i,o),i.on("response",s=>{var l;s.on("error",o.error),o.onError(u=>s.destroy(u));const c=new Headers;a({status:(l=s.statusCode)!==null&&l!==void 0?l:0,header:In(s.headers),body:Tb(o,s,c),trailer:c})})})})}}function jb(e){return function(n){const o=ws(n.signal),a=e(n.url);return new Promise((r,i)=>{o.onError(s=>{i(s)}),Qb(o,a,n.url,n.method,Bs(n.header),{},s=>{Fs(n,s,o),s.on("response",l=>{var c;r({status:(c=l[":status"])!==null&&c!==void 0?c:0,header:In(l),body:Ob(o,s,a),trailer:Mb(s)})})})})}}function Hb(e,t,n,o){let a;new URL(t).protocol.startsWith("https")?a=qn.request(t,n):a=Pn.request(t,n),e.onError(r=>a.destroy(r)),a.flushHeaders(),a.on("error",e.error),a.on("socket",function(i){function s(){i.off("connect",s),o(a)}i.readyState==="open"?o(a):i.on("connect",s)})}function Tb(e,t,n){const o=t[Symbol.asyncIterator]();return{[Symbol.asyncIterator](){return{async next(){const a=await e.race(o.next());return a.done===!0&&(In(t.trailers).forEach((r,i)=>{n.set(i,r)}),e.close()),a},throw(a){throw e.error(a),a}}}}}function Qb(e,t,n,o,a,r,i){const s=new URL(n);if(s.origin!==t.authority){const l=`cannot make a request to ${s.origin}: the http2 session is connected to ${t.authority}`;e.error(new C(l,E.Internal));return}t.request(o,s.pathname+s.search,a,{}).then(l=>{e.onError(c=>{if(l.closed)return;const u=c.code==E.Canceled?$.CANCEL:$.INTERNAL_ERROR;return new Promise(h=>l.close(u,h))}),l.on("error",function(u){l.writableEnded&&$o(u).map(yn).some(h=>h.code=="ERR_STREAM_WRITE_AFTER_END")||e.error(u)}),l.on("close",function(){const u=Bb(l.rstCode);u&&e.error(u)}),i(l)},l=>{e.error(l)})}function Mb(e){const t=new Headers;return e.on("trailers",n=>{In(n).forEach((o,a)=>{t.set(a,o)})}),t}function Ob(e,t,n){const o=t[Symbol.asyncIterator]();return{[Symbol.asyncIterator](){return{async next(){const a=await e.race(o.next());return a.done===!0&&e.close(),n?.notifyResponseByteRead(t),a},throw(a){throw e.error(a),a}}}}}async function Fs(e,t,n){if(e.body===void 0){await new Promise(a=>t.end(a));return}const o=e.body[Symbol.asyncIterator]();return new Promise(a=>{r();function r(){n.isClosed()||o.next().then(i=>{if(i.done===!0){t.end(a);return}t.write(i.value,"binary",s=>{if(s==null){r();return}o.throw!==void 0&&o.throw(Wn(s)).catch(()=>{}),!(t.writableEnded&&$o(s).map(yn).some(l=>l.code=="ERR_STREAM_WRITE_AFTER_END"))&&n.error(s)})},i=>{n.error(i)})}})}function ws(e){let t,n=!1,o,a=[];const r={error(l){if(!n){n=!0,o=l instanceof C?l:Wn(l),t?.(o);for(const c of a)c(o);i()}},close(){n||(n=!0,t&&t(new C("sentinel completed early",E.Internal)),i())},isClosed(){return n},onError(l){n?o!==void 0&&l(o):a.push(l)},race(l){let c;const u=new Promise((h,A)=>{c=h,t=A});return l.then(h=>{c?.(h)},h=>{t?.(h)}),n&&t?.(o??new C("sentinel completed early",E.Internal)),u}};function i(){e&&e.removeEventListener("abort",s),a=[],t=void 0}function s(){r.error(Lt(this))}return e&&(e.addEventListener("abort",s),e.aborted&&r.error(Lt(e))),r}function Db(e){var t,n,o,a;let r;if(e.httpVersion=="2"){let i;e.sessionManager?i=e.sessionManager:i=new Cs(e.baseUrl,{pingIntervalMs:e.pingIntervalMs,pingIdleConnection:e.pingIdleConnection,pingTimeoutMs:e.pingTimeoutMs,idleConnectionTimeoutMs:e.idleConnectionTimeoutMs},e.nodeOptions),r=kr({httpVersion:"2",sessionProvider:()=>i})}else r=kr({httpVersion:"1.1",nodeOptions:e.nodeOptions});return Object.assign(Object.assign(Object.assign({},e),{httpClient:r,useBinaryFormat:(t=e.useBinaryFormat)!==null&&t!==void 0?t:!0,interceptors:(n=e.interceptors)!==null&&n!==void 0?n:[],sendCompression:(o=e.sendCompression)!==null&&o!==void 0?o:null,acceptCompression:(a=e.acceptCompression)!==null&&a!==void 0?a:[Ub,Jb]}),Mu(e.readMaxBytes,e.writeMaxBytes,e.compressMinBytes))}function _b(e){return Xb(Db(e))}function $b(e){return`cli/${e??"unknown"}`}var Pb=$b("0.1.0-dev.52.1.13cffe6"),qb="/grpc";function eg(e){return`${e.replace(/\/+$/,"")}${qb}`}var tg=e=>async t=>{const{token:n,lang:o}=ys();return t.header.set("X-Hagi-Client",Pb),n&&t.header.set("Authorization",`Bearer ${n}`),o&&t.header.set("Accept-Language",o),e(t)},en;function Ye(){const e=eg(ys().baseUrl);return(!en||en.baseUrl!==e)&&(en={baseUrl:e,transport:_b({baseUrl:e,httpVersion:"1.1",useBinaryFormat:!0,interceptors:[tg]})}),en.transport}function Le(e){return e?Ud(e).toISOString():null}function pn(e){return e.length>0?e:null}function Ur(e,t){const n={earliestAt:Le(e),latestAt:Le(t)};return n.earliestAt||n.latestAt?n:null}function tn(e){return{lockId:e.lockId,ownerId:e.ownerId,status:e.status,myTurn:e.status==="Holding",position:e.position,epoch:Number(e.epoch),leaseExpiresAt:Le(e.leaseExpiresAt),maxHoldExpiresAt:Le(e.maxHoldExpiresAt),holder:e.holderOwnerId.length>0?{ownerId:e.holderOwnerId,label:pn(e.holderLabel)}:null,queueLength:e.queueLength,suggestedPollIntervalMs:e.suggestedPollIntervalMs,suggestedHeartbeatIntervalMs:e.suggestedHeartbeatIntervalMs,serverTime:Le(e.serverTime),requisition:e.requisitionedByOwnerId.length>0?{byOwnerId:e.requisitionedByOwnerId,reason:e.requisitionReason,at:Le(e.requisitionedAt)}:null,checkInWindow:Ur(e.checkInEarliestAt,e.checkInLatestAt),turnWindow:Ur(e.turnEarliestAt,e.turnLatestAt)}}function ng(e){return{lockId:e.lockId,holderOwnerId:pn(e.holderOwnerId),holderLabel:pn(e.holderLabel),epoch:Number(e.epoch),leaseExpiresAt:Le(e.leaseExpiresAt),holdStartedAt:Le(e.holdStartedAt),queueLength:e.queueLength}}function og(e){return e.locks.map(ng)}var Ze=()=>ve(rh,Ye()),lt=()=>ve(bh,Ye()),De=()=>ve(Eh,Ye()),Jr=()=>ve(Nh,Ye()),he=()=>ve(Lh,Ye()),ag=()=>ve(Hh,Ye()),xe=()=>ve(ob,Ye()),nn=()=>ve(ub,Ye()),Ct=()=>ve(Eb,Ye()),ct=()=>ve(Gb,Ye());async function w(e,t){return vb(e,await t)}function rg(){return{listSessions:async e=>w(Dh,xe().listSessions({type:e.type,activeOnly:e.activeOnly,includeArchived:e.includeArchived,projectId:e.projectId,projectIds:e.projectIds??[]})),getSession:async e=>w(Mh,xe().getSession({sessionId:e})),getSessionMessages:async(e,t={})=>w(ab,nn().getSessionMessages({sessionId:e,page:t.page,pageSize:t.pageSize,historyScope:t.historyScope,order:t.order})),createProposalSession:async e=>w(Qh,xe().openSession({body:D(eb,e)})),createChatSession:async e=>w(Th,xe().openChatSession({body:D(qh,e)})),createHagiTaskSession:async e=>w(Ph,xe().startHagiTaskSession({body:D(nb,e)})),listHagiTaskSchemas:async()=>w(Gh,Jr().listPresetTaskSchemas({})),getHagiTaskSchema:async e=>w(Sh,Jr().getPresetTaskSchema({presetTaskId:e})),updateSession:async(e,t)=>w(Oh,xe().saveSession({sessionId:e,body:D(tb,t)})),deleteSession:async(e,t)=>w(_h,xe().deleteSession({sessionId:e,deleteFiles:t??!1})),sendMessage:async(e,t)=>w(ib,nn().postSessionMessage({sessionId:e,body:D(cb,t)})),steerSession:async(e,t)=>w(rb,nn().steerSession({sessionId:e,body:D(lb,t)})),optimizeProposal:async(e,t)=>w(mb,Ct().optimizeSessionProposal({sessionId:e,body:D(Ab,t)})),generateProposal:async(e,t)=>w(hb,Ct().generateProposal({sessionId:e,body:D(fb,t)})),executeProposal:async(e,t)=>w(gb,Ct().executeProposal({sessionId:e,body:D(Rb,t??{})})),archiveProposal:async(e,t)=>w(bb,Ct().archiveSession({sessionId:e,body:D(Zb,t??{})})),completeProposal:async e=>w(pb,Ct().completeSession({sessionId:e})),submitAnnotations:async(e,t)=>w(sb,nn().submitSessionAnnotations({sessionId:e,body:D(db,t)})),listProjects:async()=>w(jh,ag().getAggregatedData({forceRefresh:!1})),createProject:async e=>w(Tm,Ze().createProject({body:D(eh,e)})),updateProject:async(e,t)=>w(Qm,Ze().updateProject({id:e,body:D(th,t)})),deleteProject:async e=>{await Ze().deleteProject({id:e})},getMonoSpecsManagement:async e=>w(Mm,Ze().getMonoSpecsManagement({projectId:e})),saveMonoSpecsManagement:async(e,t)=>w(Pm,Ze().updateMonoSpecsManagement({projectId:e,body:D(oh,t)})),initializeMonoSpecsManagement:async e=>w($m,Ze().initializeMonoSpecs({projectId:e})),reloadMonoSpecsManagement:async e=>w(Om,Ze().reloadMonoSpecs({projectId:e})),validateMonoSpecs:async e=>w(qm,Ze().validateMonoSpecsConfig({body:D(ah,e)})),cloneMonoSpecsRepositories:async(e,t)=>w(Dm,Ze().cloneMonoSpecsRepositories({projectId:e,body:D(nh,t)})),removeMonoSpecsRepositoryCheckout:async(e,t,n)=>w(_m,Ze().removeMonoSpecsRepositoryCheckout({projectId:e,path:t,force:n})),listPlans:async()=>w(gh,De().listScheduledPlans({})),getPlan:async e=>w(ph,De().getScheduledPlan({id:e})),createPlan:async e=>w(Ah,De().createScheduledPlan({body:D(Xr,e)})),updatePlan:async(e,t)=>w(fh,De().updateScheduledPlan({id:e,body:D(Xr,t)})),deletePlan:async e=>{await De().deleteScheduledPlan({id:e})},runPlan:async e=>w(Zh,De().runScheduledPlan({id:e})),startPlan:async e=>w(Rh,De().startScheduledPlan({id:e})),listVaults:async()=>w(ih,lt().listVaults({})),createVault:async e=>w(sh,lt().createVault({body:D(mh,e)})),updateVault:async(e,t)=>w(lh,lt().updateVault({id:e,body:D(hh,t)})),deleteVault:async(e,t)=>w(ch,lt().deleteVault({id:e,deleteLocalFiles:t??!1})),listVaultFiles:async(e,t)=>w(dh,lt().getVaultFiles({id:e,path:t})),previewVaultFile:async(e,t)=>w(uh,lt().getVaultFilePreview({id:e,path:t})),archiveChat:async e=>w($h,xe().archiveChatSession({sessionId:e})),listLocalSkills:async()=>w(vh,he().getLocalSkills({})),uninstallLocalSkill:async e=>w(Wh,he().uninstallLocalSkill({body:D(Uh,e)})),setBuiltInSkillAvailability:async e=>w(yh,he().setBuiltInSkillAvailability({body:D(Jh,e)})),searchSkillGallery:async e=>w(Ih,he().getSkillGallery({query:e})),getSkillGalleryDetail:async(e,t)=>w(Yh,he().getSkillGalleryDetail({id:e,source:t})),getSkillGalleryAudit:async(e,t)=>w(Xh,he().getSkillGalleryAudit({id:e,source:t})),installGallerySkill:async e=>w(kh,he().installSkill({body:D(zh,e)})),listTrustedSkillProviders:async()=>w(Bh,he().getTrustedSkillProviders({})),upsertTrustedSkillProvider:async e=>w(Ch,he().upsertTrustedSkillProvider({body:D(xh,e)})),deleteTrustedSkillProvider:async e=>w(Fh,he().deleteTrustedSkillProvider({body:D(Kh,e)})),resetTrustedSkillProviders:async()=>w(wh,he().resetTrustedSkillProviders({})),acquireLock:async e=>tn((await ct().acquireLock({lockId:e.lockId,ownerId:e.ownerId,leaseSeconds:e.leaseSeconds,label:e.label,sessionId:e.sessionId})).result),getLockStatus:async(e,t)=>tn((await ct().getLockStatus({lockId:e.lockId,ownerId:e.ownerId,waitSeconds:e.waitSeconds},{signal:t})).result),renewLock:async(e,t)=>tn((await ct().renewLock({lockId:e.lockId,ownerId:e.ownerId,leaseSeconds:e.leaseSeconds,epoch:e.epoch===void 0?void 0:BigInt(e.epoch)},{signal:t})).result),releaseLock:async e=>{const t=await ct().releaseLock({lockId:e.lockId,ownerId:e.ownerId,epoch:e.epoch===void 0?void 0:BigInt(e.epoch)});return{lockId:e.lockId,ownerId:e.ownerId,released:t.released,previousStatus:t.previousStatus,holderOwnerId:pn(t.holderOwnerId)}},requisitionLock:async e=>tn((await ct().requisitionLock({lockId:e.lockId,ownerId:e.ownerId,reason:e.reason,label:e.label,sessionId:e.sessionId})).result),listLocks:async e=>og(await ct().listLocks({prefix:e}))}}function ks(e){return process.on("SIGINT",e),process.on("SIGTERM",e),()=>{process.off("SIGINT",e),process.off("SIGTERM",e)}}function Po(e){return new Promise(t=>{setTimeout(t,e)})}function k(e){const t=e?.trim();return t||void 0}function x(e,t){const n=k(e);if(!n)throw new N(`${t} is required.`);return n}function uo(e){const t=e?.map(n=>k(n)).filter(Boolean);return t&&t.length>0?t:void 0}function Us(e=process.env,t={stdout:n=>{process.stdout.write(n)},stderr:n=>{process.stderr.write(n)}}){return{api:rg(),env:e,io:t,sleep:Po}}function ig(e){return e.option("--base-url <url>",'Backend API base URL. Overrides HAGI_API_BASE_URL and the "baseUrl" config file entry.').option("--token <token>","Bearer token for backend API calls. Overrides HAGI_API_TOKEN.").option("--lang <lang>","Accept-Language value for backend API calls. Overrides HAGI_API_LANG.")}function y(e){return e.option("--json","Emit deterministic JSON instead of human-readable text.")}function I(e,t){const n=e.optsWithGlobals();return{api:t.api,env:t.env,io:t.io,outputJson:n.json===!0,runtime:jm({baseUrl:n.baseUrl,token:n.token,lang:n.lang},t.env)}}var sg=5e3,lg=1e3,cg=1e4;function Js(e){return Math.min(lg*2**Math.max(0,e-1),cg)}async function mo(e,t,n){if(!n){await e.sleep(t);return}if(n.aborted)return;let o=()=>{};const a=new Promise(r=>{o=r,n.addEventListener("abort",o,{once:!0})});try{await Promise.race([e.sleep(t),a])}finally{n.removeEventListener("abort",o)}}function dg(e,t){return e.position!==t.position||e.holder?.ownerId!==t.holder?.ownerId}async function ug(e){const{read:t,clock:n,signal:o}=e,a=n.now(),r=e.timeoutSeconds*1e3;let i=e.initial,s=0,l=0;const c=u=>({outcome:u,status:i,polls:s,elapsedSeconds:Math.round((n.now()-a)/100)/10});for(;;){if(o?.aborted)return c("cancelled");const u=r-(n.now()-a);if(u<=0)return c("timeout");const h=Math.min(20,Math.max(1,Math.ceil(u/1e3))),A=n.now();let Z;try{Z=await t(h,o)}catch(X){if(o?.aborted)return c("cancelled");if(!Ss(X))throw X;l+=1,await mo(n,Math.min(Js(l),u),o);continue}l=0,s+=1;const G=i;if(i=Z,Z.status==="Holding")return c("holding");if(Z.status!=="Queued")return c("lost");const S=dg(G,Z);if(S&&e.onChange?.(Z),!S&&n.now()-A<1e3){const X=Z.suggestedPollIntervalMs>0?Z.suggestedPollIntervalMs:sg;await mo(n,Math.min(X,Math.max(0,r-(n.now()-a))),o)}}}var mg="HAGI_LOCK_OWNER",hg="HAGI_SESSION_ID";function bt(e){const t=e?.trim();return t||void 0}function bg(e,t){const n=bt(e)??bt(t.HAGI_LOCK_OWNER)??bt(t.HAGI_SESSION_ID);if(!n)throw new N(`No lock owner. Pass your own session ID as --owner <session-id>, or set ${mg} (or ${hg}). The CLI does not invent an owner ID.`);return n}function gg(e){const t=bt(e.lockId),n=bt(e.server),o=bt(e.game);if(t&&(n||o))throw new N("Use either --lock-id or the pair --server and --game, not both.");if(t)return t;if(n&&o)return`${n}/${o}`;throw n||o?new N("--server and --game must be given together."):new N("A lock is required: pass --lock-id <id>, or --server <name> and --game <name>.")}function St(e){return e.option("--lock-id <id>","Lock to use, for example eu-1/duckov. Alternative to --server and --game.").option("--server <name>","Server name; with --game, the lock is <server>/<game>.").option("--game <name>","Game name; with --server, the lock is <server>/<game>.").option("--owner <id>","Owner ID: your own session ID. Defaults to HAGI_LOCK_OWNER, then HAGI_SESSION_ID.")}function Nt(e,t){return{lockId:gg(e),ownerId:bg(e.owner,t)}}function Vt(e,t,n){if(e===void 0)return;const o=e.trim();if(!/^\d+$/.test(o))throw new N(`${t} must be a whole number of seconds.`);const a=Number(o);if(a<n)throw new N(`${t} must be ${n} second${n===1?"":"s"} or more.`);return a}function qo(e){if(e!==void 0){if(!/^\d+$/.test(e.trim()))throw new N("--epoch must be a whole number, the epoch an acquire printed.");return Number(e.trim())}}async function vt(e){try{return await e()}catch(t){throw Gs(t)??t}}function xs(e){return{now:e.now??Date.now,sleep:e.sleep??Po}}function pg(e,t){St(y(e.command("acquire").description("Take the lock or join its queue. Without --wait: one call, exit 0 for Holding and Queued. With --wait: wait for the turn, exit 0 only when Holding. There is no force option."))).option("--wait","Keep waiting in the queue (long-poll) until you hold the lock. Run it as a continuous watcher.").option("--timeout <seconds>","With --wait: give up after this many seconds (default 900), release the queue entry, exit code 31.").option("--lease-seconds <n>","Requested lease length in seconds (the backend clamps it to 30 to 600).").option("--label <text>","Short label shown to others as the holder (at most 200 characters).").action(async function(o){if(!o.wait&&o.timeout!==void 0)throw new N("--timeout needs --wait.");const a=o.wait?Vt(o.timeout,"--timeout",1)??900:void 0,r=Vt(o.leaseSeconds,"--lease-seconds",1),i=I(this,t),s=Nt(o,i.env),l=await vt(()=>i.api.acquireLock({...s,leaseSeconds:r,label:k(o.label)})),c=S=>i.io.stdout(i.outputJson?W(S):pt(S,"acquire"));if(a===void 0||l.status==="Holding"){c(l);return}if(l.status!=="Queued")throw c(l),new et(`Owner ${s.ownerId} neither holds nor queues for lock ${s.lockId} (${l.status}).`,{reported:!0});i.outputJson||c(l);const u=new AbortController,h=(t.onInterrupt??ks)(()=>u.abort());let A;try{A=await ug({initial:l,read:(S,X)=>i.api.getLockStatus({...s,waitSeconds:S},X),timeoutSeconds:a,clock:xs(t),signal:u.signal,onChange:S=>{i.outputJson||i.io.stdout(ec(S))}})}finally{h()}let Z;(A.outcome==="timeout"||A.outcome==="cancelled")&&(Z=await i.api.releaseLock(s).then(()=>!0,()=>!1));const G={outcome:A.outcome,polls:A.polls,elapsedSeconds:A.elapsedSeconds,released:Z};switch(i.outputJson?i.io.stdout(W({...A.status,wait:G})):i.io.stdout(A.outcome==="holding"?pt(A.status,"status"):tc(A,Z)),A.outcome){case"timeout":throw new Qo(`Timed out after ${A.elapsedSeconds}s waiting for lock ${s.lockId}; last status ${A.status.status}.`);case"cancelled":throw new U(`Interrupted while waiting for lock ${s.lockId}; the lock was not acquired.`);case"lost":throw new et(`The queue entry for lock ${s.lockId} was dropped (${A.status.status}).`,{reported:!0});default:}})}var Ag=6e4,xr=[30*6e4,5*6e4],wt="Stop using the resource now.";function Kr(e,t){switch(t.status){case"Requisitioned":{const n=t.requisition;return`Lock ${e} LOST: requisitioned by ${n?.byOwnerId??"another owner"}${n?.at?` at ${n.at}`:""}, reason: ${n?.reason??"not given"}. ${wt}`}case"Expired":return`Lock ${e} LOST: the lease expired or the hard cap passed. ${wt}`;case"Queued":return`Lock ${e} LOST: this owner is queued at position ${t.position}, not holding. ${wt}`;default:return`Lock ${e} LOST: the backend has no hold for this owner (${t.status}). ${wt}`}}function zr(e,t,n){if(!t)return null;const o=Date.parse(t),a=n?Date.parse(n):NaN;return Number.isNaN(a)?o:e.now()+(o-a)}async function fg(e){const{lockId:t,ownerId:n,api:o,clock:a,signal:r}=e;let i=e.epoch,s=e.intervalSeconds===void 0?void 0:e.intervalSeconds*1e3,l=!1,c=0,u=a.now(),h=null,A=null;const Z=new Set;let G=0,S=null,X=!1,J=!1;const d=(p,g,f)=>e.emit({kind:p,message:g,errorCode:f}),m=()=>{if(A===null)return;const p=xr.filter(f=>!Z.has(f)&&a.now()>=A-f);if(p.length===0)return;p.forEach(f=>Z.add(f));const g=Math.min(...p)/6e4;d("cap-warning",`Lock ${t}: the hard cap (${new Date(A).toISOString()}) is about ${g} minutes away. The lock is taken back at the cap even while heartbeating: finish and release before then.`)};for(;;){if(r.aborted)return{outcome:"stopped",beats:c};let p=u;if(A!==null)for(const f of xr)Z.has(f)||(p=Math.min(p,A-f));if(p>a.now()&&(await mo(a,p-a.now(),r),r.aborted))return{outcome:"stopped",beats:c};if(m(),a.now()<u)continue;let g;try{if(i===void 0){const f=await o.getLockStatus({lockId:t,ownerId:n},r);if(f.status!=="Holding"){const V=`Refusing to start: owner ${n} does not hold lock ${t}. ${Kr(t,f)}`;return d("refused",V),{outcome:"refused",message:V,beats:c}}i=f.epoch}g=await o.renewLock({lockId:t,ownerId:n,epoch:i,leaseSeconds:e.leaseSeconds},r)}catch(f){if(r.aborted)return{outcome:"stopped",beats:c};const V=Gs(f);if(V){const K=`Lock ${t} LOST: ${V.message}${/stop using/i.test(V.message)?"":` ${wt}`}`;return d("lost",K,V.errorCode),{outcome:"lost",message:K,beats:c}}if(!Ss(f))throw f;G+=1;const B=a.now();S??=B,!X&&B-S>=Ag&&(X=!0,d("outage",`Backend unreachable for ${Math.round((B-S)/1e3)}s; still retrying. The lock is only lost when the backend says so, but it is released after the lease runs out.`)),!J&&h!==null&&B>=h&&(J=!0,d("maybe-lost",`Lock ${t} may already be lost: the last known lease deadline passed during the outage.`)),u=a.now()+Js(G);continue}if(g.status!=="Holding"){const f=Kr(t,g);return d("lost",f),{outcome:"lost",message:f,beats:c}}c+=1,S!==null&&(X&&d("recovered",`Backend reachable again after ${Math.round((a.now()-S)/1e3)}s; heartbeat resumed.`),S=null,X=!1,J=!1),G=0,h=zr(a,g.leaseExpiresAt,g.serverTime),A=zr(a,g.maxHoldExpiresAt,g.serverTime)??A,s??=g.suggestedHeartbeatIntervalMs>0?g.suggestedHeartbeatIntervalMs:120*1e3,l?e.verbose&&d("beat",`Heartbeat ok: valid until ${g.leaseExpiresAt??"unknown"}, hard cap ${g.maxHoldExpiresAt??"unknown"}.`):(l=!0,d("started",`Heartbeat started for lock ${t} as ${n} (epoch ${g.epoch}): renewing every ${s/1e3}s, valid until ${g.leaseExpiresAt??"unknown"}, hard cap ${g.maxHoldExpiresAt??"unknown"}. Quiet unless something needs you.`)),u=a.now()+s}}function Zg(e,t){St(y(e.command("heartbeat").description("Keep a held lock alive: renew now and then every interval. Long-running and quiet on success; run it under a watcher. Exit code 32 when the lock is lost. Stopping it (SIGINT or SIGTERM) exits 0 and does not release."))).option("--epoch <n>","Epoch of your grant. Without it, the epoch of the first status read is used, and only while you hold the lock.").option("--interval <seconds>","Seconds between renewals (default: the interval the backend suggests, 120).").option("--lease-seconds <n>","Requested lease length in seconds on every renewal (the backend clamps it to 30 to 600).").option("--verbose","Also print one line per successful renewal.").action(async function(o){const a=qo(o.epoch),r=Vt(o.interval,"--interval",1),i=Vt(o.leaseSeconds,"--lease-seconds",1),s=I(this,t),l=Nt(o,s.env),c=new AbortController,u=(t.onInterrupt??ks)(()=>c.abort());try{const h=await fg({...l,epoch:a,intervalSeconds:r,leaseSeconds:i,verbose:o.verbose===!0,api:s.api,clock:xs(t),signal:c.signal,emit:A=>{s.io.stdout(s.outputJson?`${JSON.stringify({event:A.kind,...l,message:A.message,errorCode:A.errorCode})}
|
|
59
59
|
`:`${A.message}
|
|
60
60
|
`)}});if(h.outcome!=="stopped")throw new et(h.message??`Lock ${l.lockId} is lost.`,{reported:!0})}finally{u()}})}function Rg(e,t){y(e.command("list").description("List the locks that have a holder or a queue. An empty result exits 0.")).option("--prefix <text>","Only locks whose ID starts with this text.").action(async function(o){const a=I(this,t),r=await vt(()=>a.api.listLocks(k(o.prefix)));a.io.stdout(a.outputJson?W({locks:r}):oc(r))})}function Eg(e,t){St(y(e.command("release").description("Give the lock back, or leave the queue. Exit code 0 whether or not something was released. Stop the heartbeat first."))).option("--epoch <n>","Epoch of your grant, as printed by acquire. A stale epoch is refused, so a slow old holder cannot release a newer grant.").action(async function(o){const a=qo(o.epoch),r=I(this,t),i=Nt(o,r.env),s=await vt(()=>r.api.releaseLock({...i,epoch:a}));r.io.stdout(r.outputJson?W(s):nc(s))})}function Vg(e,t){St(y(e.command("renew").description("Renew the lease once (one heartbeat). Exit code 32 when the lock is no longer yours. Prefer `heartbeat` for keeping a lock alive."))).option("--epoch <n>","Epoch of your grant, as printed by acquire. A stale epoch is refused.").option("--lease-seconds <n>","Requested lease length in seconds (the backend clamps it to 30 to 600).").action(async function(o){const a=qo(o.epoch),r=Vt(o.leaseSeconds,"--lease-seconds",1),i=I(this,t),s=Nt(o,i.env),l=await vt(()=>i.api.renewLock({...s,epoch:a,leaseSeconds:r}));if(l.status!=="Holding")throw i.io.stdout(i.outputJson?W(l):pt(l,"renew")),new et(`Owner ${s.ownerId} no longer holds lock ${s.lockId} (${l.status}).`,{reported:!0});i.io.stdout(i.outputJson?W(l):pt(l,"renew"))})}var Lr=200;function Gg(e,t){St(y(e.command("requisition").description("EMERGENCY: take the lock at once and displace the holder. Only when the user explicitly ordered a forced take; otherwise use acquire and queue."))).requiredOption("--reason <text>","Why the lock is taken (1 to 200 characters). Quote the user's order; the displaced owner is told.").option("--label <text>","Short label shown to others as the holder (at most 200 characters).").action(async function(o){const a=k(o.reason);if(!a||a.length>Lr)throw new N(`--reason must be 1 to ${Lr} characters.`);const r=I(this,t),i=Nt(o,r.env),s=await vt(()=>r.api.requisitionLock({...i,reason:a,label:k(o.label)}));r.io.stdout(r.outputJson?W(s):pt(s,"requisition"))})}function Sg(e,t){St(y(e.command("status").description("Read this owner's state on a lock: Holding, Queued, Expired, Requisitioned or None. Exit code 0 for all of them."))).option("--wait-seconds <n>","Long-poll: return early when the state changes, or after this many seconds (the server caps it at 25).").action(async function(o){const a=Vt(o.waitSeconds,"--wait-seconds",0),r=I(this,t),i=Nt(o,r.env),s=await vt(()=>r.api.getLockStatus({...i,waitSeconds:a}));r.io.stdout(r.outputJson?W(s):pt(s,"status"))})}function Ng(e,t){const n=e.command("lock").description("Take turns on a shared resource with other agents: a fair queue lock with a heartbeat.");pg(n,t),Sg(n,t),Vg(n,t),Zg(n,t),Eg(n,t),Gg(n,t),Rg(n,t)}var vg=[Ng];function Wg(e,t,n=vg){const o=e.command("agent").description("Manage agent-facing capabilities, such as the shared resource lock.");for(const a of n)a(o,t)}function yg(e,t){y(e.command("archive").description("Archive a chat session through the dedicated chat archive endpoint.")).requiredOption("--session-id <id>","Chat session id to archive.").action(async function(o){const a=I(this,t),r=o.sessionId.trim(),i=await a.api.archiveChat(r);if(a.outputJson){a.io.stdout(W({sessionId:r,message:i.message}));return}a.io.stdout(`Chat archived
|
|
61
61
|
sessionId ${r}
|
|
@@ -198,8 +198,8 @@ ${we(s)}`)})}function CA(e,t){const n=e.command("proposal").description("Manage
|
|
|
198
198
|
`;case"freeze":return t.unchanged?`freeze unchanged: ${n} stays at revision ${String(t.revision)}
|
|
199
199
|
`:[`frozen: ${n} revision ${String(t.revision)}`+(t.previousRevision===null?"":` (revised from ${String(t.previousRevision)})`),`reopened: ${Or(t.reopened)} added: ${Or(t.added)}`,""].join(`
|
|
200
200
|
`);default:return`${e}: ${n}
|
|
201
|
-
`}}var da=["goal","research","acceptance","plan","run","amend"],LA=".gitignore";function
|
|
202
|
-
`)}function
|
|
201
|
+
`}}var da=["goal","research","acceptance","plan","run","amend"],LA="install/gitignore.template",jA=".gitignore";function HA(){return typeof __filename=="string"?(0,ai.pathToFileURL)(__filename).href:{}.url}function TA(e){let t=R.default.dirname((0,ai.fileURLToPath)(e));for(;;){const n=R.default.join(t,"resources","saga");if(Y.default.existsSync(n))return n;const o=R.default.dirname(t);if(o===t)break;t=o}throw new Error(`Unable to locate package resources/saga from ${e}`)}function dl(e,t){let n;try{n=Y.default.lstatSync(e)}catch(o){throw new U(`Unable to read ${t} at ${e}: ${o instanceof Error?o.message:String(o)}`)}if(!n.isFile())throw new U(`${t} is not a regular file: ${e}`);return Y.default.readFileSync(e)}function Dr(e,t,n,o){if(!e||typeof e!="object"||Array.isArray(e))throw new U(`Invalid Saga asset manifest at ${o}: ${n} must be an object`);const a=e,r=Object.keys(a).sort(),i=[...t].sort();if(r.length!==i.length||r.some((s,l)=>s!==i[l]))throw new U(`Invalid Saga asset manifest at ${o}: ${n} must list exactly ${t.join(", ")}`);for(const s of r)if(typeof a[s]!="string")throw new U(`Invalid Saga asset manifest at ${o}: ${n}.${s} must be a digest`);return a}function QA(e,t){let n;try{n=JSON.parse(e.toString("utf8"))}catch(a){throw new U(`Invalid Saga asset manifest at ${t}: ${a instanceof Error?a.message:String(a)}`)}if(!n||typeof n!="object"||Array.isArray(n))throw new U(`Invalid Saga asset manifest at ${t}: expected an object`);const o=n;if(o.schemaVersion!==2)throw new U(`Unsupported Saga asset manifest schema at ${t}`);return{schemaVersion:2,install:Dr(o.install,[LA],"install",t),methods:Dr(o.methods,da,"methods",t)}}function _r(e,t,n){const o=dl(R.default.join(e,...t.split("/")),`Saga asset ${t}`);if(!/^[0-9a-f]{64}$/.test(n)||(0,je.createHash)("sha256").update(o).digest("hex")!==n)throw new U(`Saga asset integrity check failed for ${t}`);return o}function Bn(e=HA()){const t=TA(e),n=R.default.join(t,"manifest.json"),o=QA(dl(n,"Saga asset manifest"),n),a=new Map;for(const[i,s]of Object.entries(o.install))a.set(jA,_r(t,i,s));const r=new Map;for(const i of da)r.set(i,_r(t,`prompts/${i}.md`,o.methods[i]));return{directory:t,install:a,methods:r}}var MA=/^- \[( |x)\] (\S+) (.*?)\s*\|\s*(.*)$/,OA=/^- ~ (\S+) (.*?)\s*\|\s*(.*)$/,DA=new Set(["## 待决问题","## Open questions"]),_A=["[已决定","[decided"],$A=new Set(["- 无","- none"]);function tt(){return new Date().toISOString().replace(/\.\d{3}Z$/,"Z")}function $e(e){return(0,je.createHash)("sha256").update(e).digest("hex")}function Mt(e){if(!e)return[];const t=e.split(/\r?\n/);return t.at(-1)===""&&t.pop(),t}function ul(e){const t=[],n=[];return Mt(e).forEach((o,a)=>{const r=MA.exec(o);if(r){t.push({line:a,id:r[2],title:r[3],done:r[1]==="x",note:r[4].trim()});return}const i=OA.exec(o);i&&n.push({id:i[1],title:i[2]})}),{active:t,superseded:n}}function ml(e){const t={};let n;for(const o of Mt(e)){const a=/^## (\S+)/.exec(o);a&&(n=a[1]);const r=/^cmd:\s*(.+)$/.exec(o);r&&n&&(t[n]=r[1].trim())}return t}function PA(e){const t=[];let n=!1;for(const o of Mt(e)){if(o.startsWith("## ")){n=DA.has(o.trim());continue}n&&o.startsWith("- ")&&!_A.some(a=>o.includes(a))&&!$A.has(o.trim().toLowerCase())&&t.push(o.slice(2).trim())}return t}function qA(e){const t=/^merged-in:[ \t]*(\S*)[ \t]*$/m.exec(e);return t?t[1]:""}function ef(e){return[...e.active.map(t=>`${t.id} ${t.title}`),...e.superseded.map(t=>`~ ${t.id} ${t.title}`)].join(`
|
|
202
|
+
`)}function tf(e){return Object.fromEntries(Object.entries(e).map(([t,n])=>[t,$e(n)]))}function $r(e){const t=n=>Object.entries(n).map(([o,a])=>` ${o}: ${a}
|
|
203
203
|
`).join("");return`revision: ${e.revision}
|
|
204
204
|
`+(e.frozenAt===void 0?"":`frozen-at: ${e.frozenAt}
|
|
205
205
|
`)+(e.prev===void 0?"":`prev: ${e.prev}
|
|
@@ -207,54 +207,54 @@ ${we(s)}`)})}function CA(e,t){const n=e.command("proposal").description("Manage
|
|
|
207
207
|
${t(e.hashes)}acceptance-by-item:
|
|
208
208
|
${t(e.acceptanceByItem)}`+(e.methods===void 0?"":`methods:
|
|
209
209
|
${t(e.methods)}`)+`items: ${e.items.join(" ")}
|
|
210
|
-
`}function hl(e,t="contract.lock"){const n=/^revision:\s*(\d+)/m.exec(e),o=/^hashes:\r?\n/m.exec(e),a=/^acceptance-by-item:\r?\n/m.exec(e),r=/^items:[ \t]*(.*)$/m.exec(e);if(!n||!o||!a||!r)throw new U(`Invalid Saga data in "${t}": malformed contract lock.`);const i=Number(n[1]);if(!Number.isSafeInteger(i))throw new U(`Invalid Saga data in "${t}": invalid revision.`);return{revision:i,frozenAt:/^frozen-at:[ \t]*(\S*)/m.exec(e)?.[1],prev:/^prev:[ \t]*(\S*)/m.exec(e)?.[1],hashes:$n(e,"hashes"),acceptanceByItem:$n(e,"acceptance-by-item"),methods:/^methods:\r?\n/m.test(e)?$n(e,"methods"):void 0,items:r[1].split(/\s+/).filter(Boolean)}}function $n(e,t){const n=new RegExp(`^${t}:\\r?\\n((?: .*\\r?\\n?)*)`,"m").exec(e);return n?Object.fromEntries([...n[1].matchAll(/^ {2}(\S+):\s*(\S+)\s*$/gm)].map(o=>[o[1],o[2]])):{}}var po="**/runtime/";function Gt(e){try{return(0,Y.lstatSync)(e)}catch(t){if(t.code==="ENOENT")return;throw t}}function
|
|
211
|
-
`)}function
|
|
212
|
-
${n}`:n))}catch(s){throw new U(`Cannot append to Saga data "${t}": ${Fn(s)}`)}finally{i!==void 0&&(0,Y.closeSync)(i)}}function bl(e,t){(0,Y.unlinkSync)(ne(e,t))}function
|
|
210
|
+
`}function hl(e,t="contract.lock"){const n=/^revision:\s*(\d+)/m.exec(e),o=/^hashes:\r?\n/m.exec(e),a=/^acceptance-by-item:\r?\n/m.exec(e),r=/^items:[ \t]*(.*)$/m.exec(e);if(!n||!o||!a||!r)throw new U(`Invalid Saga data in "${t}": malformed contract lock.`);const i=Number(n[1]);if(!Number.isSafeInteger(i))throw new U(`Invalid Saga data in "${t}": invalid revision.`);return{revision:i,frozenAt:/^frozen-at:[ \t]*(\S*)/m.exec(e)?.[1],prev:/^prev:[ \t]*(\S*)/m.exec(e)?.[1],hashes:$n(e,"hashes"),acceptanceByItem:$n(e,"acceptance-by-item"),methods:/^methods:\r?\n/m.test(e)?$n(e,"methods"):void 0,items:r[1].split(/\s+/).filter(Boolean)}}function $n(e,t){const n=new RegExp(`^${t}:\\r?\\n((?: .*\\r?\\n?)*)`,"m").exec(e);return n?Object.fromEntries([...n[1].matchAll(/^ {2}(\S+):\s*(\S+)\s*$/gm)].map(o=>[o[1],o[2]])):{}}var po="**/runtime/";function Gt(e){try{return(0,Y.lstatSync)(e)}catch(t){if(t.code==="ENOENT")return;throw t}}function nf(e,t){return process.platform==="win32"?e.toLowerCase()===t.toLowerCase():e===t}function ne(e,t){const n=R.default.resolve(e),o=R.default.resolve(t),a=R.default.relative(n,o);if(a==="")return o;if(a===".."||a.startsWith(`..${R.default.sep}`)||R.default.isAbsolute(a))throw new H([`path escapes the Saga root: ${t}`]);const r=Gt(n);if(r&&(r.isSymbolicLink()||!nf((0,Y.realpathSync)(n),n)))throw new H([`Saga root is redirected through a link: ${n}`]);let i=n;for(const s of a.split(R.default.sep)){i=R.default.join(i,s);const l=Gt(i);if(!l)break;if(l.isSymbolicLink())throw new H([`refusing a redirected Saga path: ${i}`])}return o}function ke(e,t){const n=ne(e,t);try{(0,Y.mkdirSync)(n,{recursive:!0})}catch(o){throw new U(`Cannot create Saga directory "${t}": ${Fn(o)}`)}}function Cn(e,t,n){const o=ne(e,t);let a;try{a=(0,Y.openSync)(o,"wx"),(0,Y.writeSync)(a,ma(n))}finally{a!==void 0&&(0,Y.closeSync)(a)}}function ht(e,t,n){const o=ne(e,t),a=R.default.join(R.default.dirname(o),`${R.default.basename(o)}.${(0,je.randomUUID)()}.tmp`);let r;try{r=(0,Y.openSync)(a,"wx"),(0,Y.writeSync)(r,ma(n)),(0,Y.closeSync)(r),r=void 0,(0,Y.renameSync)(a,o)}finally{r!==void 0&&(0,Y.closeSync)(r),Gt(a)&&(0,Y.unlinkSync)(a)}}function ua(e,t,n){ht(e,t,`${JSON.stringify(n,null,2)}
|
|
211
|
+
`)}function of(e,t,n){const o=ne(e,t),a=Wt(e,t),r=a!==void 0&&a.length>0&&a[a.length-1]!==10;let i;try{i=(0,Y.openSync)(o,"a"),(0,Y.writeSync)(i,ma(r?`
|
|
212
|
+
${n}`:n))}catch(s){throw new U(`Cannot append to Saga data "${t}": ${Fn(s)}`)}finally{i!==void 0&&(0,Y.closeSync)(i)}}function bl(e,t){(0,Y.unlinkSync)(ne(e,t))}function af(e,t,n){(0,Y.linkSync)(ne(e,t),ne(e,n))}function rf(e,t,n){const o=ne(e,t),a=ne(e,n);if(Gt(a))throw new H([`destination already exists: ${n}`]);(0,Y.renameSync)(o,a)}function Wt(e,t){const n=ne(e,t);try{return(0,Y.readFileSync)(n)}catch(o){if(o.code==="ENOENT")return;throw new U(`Cannot read Saga data "${t}": ${Fn(o)}`)}}function Pe(e,t){return Wt(e,t)?.toString("utf8")}function sf(e,t,n){const o=ne(e,t),a=ne(e,n);if(Gt(a))throw new H([`destination already exists: ${n}`]);(0,Y.renameSync)(o,a)}function lf(e){return e.split(/\r?\n/).includes(po)}function yt(e){ke(e,e);const t=ne(e,R.default.join(e,".gitignore"));let n;try{if(n=Gt(t)?(0,Y.readFileSync)(t,"utf8"):void 0,n!==void 0&&lf(n))return;if(n===void 0){Cn(e,t,`${po}
|
|
213
213
|
`);return}const o=n.includes(`\r
|
|
214
214
|
`)?`\r
|
|
215
215
|
`:`
|
|
216
216
|
`;(0,Y.appendFileSync)(t,`${n.length>0&&!n.endsWith(`
|
|
217
|
-
`)?o:""}${po}${o}`)}catch(o){throw o instanceof H?o:new U(`Cannot write the runtime ignore rule in "${t}": ${Fn(o)}. No runtime files were created.`)}}function ma(e){return typeof e=="string"?Buffer.from(e,"utf8"):e}function Fn(e){return e instanceof Error?e.message:String(e)}var
|
|
218
|
-
`)}catch(a){throw(0,Y.rmSync)(n,{recursive:!0,force:!0}),a}return o}var gl=[".hagicode",".hagicode/sagas"];function pl(e){return e.toString("utf8").split(/\r?\n/).includes("**/runtime/")}function
|
|
217
|
+
`)?o:""}${po}${o}`)}catch(o){throw o instanceof H?o:new U(`Cannot write the runtime ignore rule in "${t}": ${Fn(o)}. No runtime files were created.`)}}function ma(e){return typeof e=="string"?Buffer.from(e,"utf8"):e}function Fn(e){return e instanceof Error?e.message:String(e)}var cf=/^[a-z0-9][a-z0-9-]{0,62}$/,df=new Set(["prompts","tools","archive","runtime","amendments","revisions"]);function Ao(e){try{return(0,Y.lstatSync)(e),!0}catch(t){if(t.code==="ENOENT")return!1;throw t}}function uf(e){try{return(0,Y.statSync)(e).isDirectory()}catch(t){if(t.code==="ENOENT")return!1;throw t}}function mf(e,t){if(!cf.test(e))throw new N(`Invalid Saga ID ${JSON.stringify(e)}: use 1-63 lowercase letters, digits, or hyphens, beginning with a letter or digit.`);if(df.has(e))throw new N(`Saga ID ${JSON.stringify(e)} is reserved.`);const n=R.default.join(t,e);if(Ao(n))throw new U(`Saga "${e}" already exists at ${n}.`);const o=R.default.join(t,"archive");if(uf(o)){const a=(0,Y.readdirSync)(o).find(r=>r.endsWith(`-${e}`));if(a)throw new U(`Saga "${e}" already exists in the archive as "${a}".`)}}function hf(e){return`hagi saga init ${e.kind==="path"?"--path":"--project-id"} ${JSON.stringify(e.value)}`}function bf(e,t){const n=R.default.dirname(R.default.dirname(e)),o=[".hagicode",".hagicode/sagas"],a=[".gitignore"],r=s=>{throw new U(`Saga resource path "${s}" is missing or unsafe. Run ${hf(t)} after correcting the target.`)};for(const s of o){const l=R.default.join(n,s);Ao(l)||r(s);const c=(0,Y.lstatSync)(l);(c.isSymbolicLink()||!c.isDirectory())&&r(s)}for(const s of a){const l=R.default.join(e,...s.split("/"));Ao(l)||r(s);const c=(0,Y.lstatSync)(l);(c.isSymbolicLink()||!c.isFile())&&r(s)}const i=(0,Y.readFileSync)(R.default.join(e,".gitignore"),"utf8").split(/\r?\n/);!i.includes("**/runtime/")&&!i.includes("*/runtime/")&&r(".gitignore (runtime ignore rule)")}function gf(e,t){const n=ne(t,R.default.join(t,e));try{(0,Y.mkdirSync)(n)}catch(a){throw a.code==="EEXIST"?new U(`Saga "${e}" already exists at ${n}.`):a}const o={id:e,createdAt:tt(),method:1};try{Cn(t,R.default.join(n,"saga.json"),`${JSON.stringify(o,null,2)}
|
|
218
|
+
`)}catch(a){throw(0,Y.rmSync)(n,{recursive:!0,force:!0}),a}return o}var gl=[".hagicode",".hagicode/sagas"];function pl(e){return e.toString("utf8").split(/\r?\n/).includes("**/runtime/")}function pf(e){if(pl(e))return e;const t=e.toString("utf8"),n=t.match(/\r\n|\n/)?.[0]??`
|
|
219
219
|
`,o=e.length>0&&!t.endsWith(`
|
|
220
|
-
`)?n:"";return Buffer.concat([e,Buffer.from(`${o}**/runtime/`)])}function Ht(e){try{return(0,Y.lstatSync)(e)}catch(t){if(t.code==="ENOENT")return;throw t}}function Pr(e,t,n){const o=R.default.join(R.default.dirname(e),`.${R.default.basename(e)}.${(0,je.randomUUID)()}.tmp`);let a;try{a=(0,Y.openSync)(o,"wx",n??438),(0,Y.writeFileSync)(a,t),(0,Y.closeSync)(a),a=void 0,(0,Y.renameSync)(o,e)}finally{a!==void 0&&(0,Y.closeSync)(a),Ht(o)&&(0,Y.unlinkSync)(o)}}function qr(e,t,n){const o=R.default.relative(e,n);if(o===".."||o.startsWith(`..${R.default.sep}`)||R.default.isAbsolute(o))throw new U(`Saga installation path escapes the selected project: ${t}`);const a=R.default.resolve(t),r=R.default.resolve(n);if(process.platform==="win32"?a.toLowerCase()!==r.toLowerCase():a!==r)throw new U(`Saga installation path is redirected: ${t}`)}function on(e,t){const n=(0,Y.realpathSync)(e);if(!(0,Y.statSync)(n).isDirectory())throw new U(`Selected project path is not a directory: ${e}`);const o=R.default.join(n,".hagicode","sagas");for(const a of gl){const r=R.default.join(n,a),i=Ht(r);if(i){if(i.isSymbolicLink())throw new U(`Refusing redirected Saga installation directory: ${r}`);if(!i.isDirectory())throw new U(`Saga installation path is not a directory: ${r}`);qr(n,r,(0,Y.realpathSync)(r))}}for(const a of t.install.keys()){const r=R.default.join(o,...a.split("/")),i=Ht(r);if(i){if(i.isSymbolicLink())throw new U(`Refusing redirected Saga resource: ${r}`);if(!i.isFile())throw new U(`Saga resource is not a regular file: ${r}`);if(qr(o,r,(0,Y.realpathSync)(r)),i.nlink>1&&!pl((0,Y.readFileSync)(r)))throw new U(`Refusing to overwrite hard-linked Saga resource: ${r}`)}}return o}function
|
|
221
|
-
`);try{
|
|
222
|
-
`}function Nl(e){const t=e.path!==void 0;if(t===(e.projectId!==void 0))throw new N("Specify exactly one of --path <directory> or --project-id <id>.");if(t){const o=e.path;if(o===void 0||o==="")throw new N("--path <directory> must not be empty.");return{kind:"path",value:o}}const n=e.projectId?.trim();if(!n)throw new N("--project-id <id> must not be empty.");return{kind:"project-id",value:n}}function
|
|
220
|
+
`)?n:"";return Buffer.concat([e,Buffer.from(`${o}**/runtime/`)])}function Ht(e){try{return(0,Y.lstatSync)(e)}catch(t){if(t.code==="ENOENT")return;throw t}}function Pr(e,t,n){const o=R.default.join(R.default.dirname(e),`.${R.default.basename(e)}.${(0,je.randomUUID)()}.tmp`);let a;try{a=(0,Y.openSync)(o,"wx",n??438),(0,Y.writeFileSync)(a,t),(0,Y.closeSync)(a),a=void 0,(0,Y.renameSync)(o,e)}finally{a!==void 0&&(0,Y.closeSync)(a),Ht(o)&&(0,Y.unlinkSync)(o)}}function qr(e,t,n){const o=R.default.relative(e,n);if(o===".."||o.startsWith(`..${R.default.sep}`)||R.default.isAbsolute(o))throw new U(`Saga installation path escapes the selected project: ${t}`);const a=R.default.resolve(t),r=R.default.resolve(n);if(process.platform==="win32"?a.toLowerCase()!==r.toLowerCase():a!==r)throw new U(`Saga installation path is redirected: ${t}`)}function on(e,t){const n=(0,Y.realpathSync)(e);if(!(0,Y.statSync)(n).isDirectory())throw new U(`Selected project path is not a directory: ${e}`);const o=R.default.join(n,".hagicode","sagas");for(const a of gl){const r=R.default.join(n,a),i=Ht(r);if(i){if(i.isSymbolicLink())throw new U(`Refusing redirected Saga installation directory: ${r}`);if(!i.isDirectory())throw new U(`Saga installation path is not a directory: ${r}`);qr(n,r,(0,Y.realpathSync)(r))}}for(const a of t.install.keys()){const r=R.default.join(o,...a.split("/")),i=Ht(r);if(i){if(i.isSymbolicLink())throw new U(`Refusing redirected Saga resource: ${r}`);if(!i.isFile())throw new U(`Saga resource is not a regular file: ${r}`);if(qr(o,r,(0,Y.realpathSync)(r)),i.nlink>1&&!pl((0,Y.readFileSync)(r)))throw new U(`Refusing to overwrite hard-linked Saga resource: ${r}`)}}return o}function Af(e,t,n=!1){const o=on(e,t),a=R.default.dirname(R.default.dirname(o));for(const i of gl){const s=R.default.join(a,i);Ht(s)||(0,Y.mkdirSync)(s)}on(a,t);const r=[];for(const[i,s]of t.install){const l=R.default.join(o,...i.split("/")),c=Ht(l);if(!c){on(a,t),Pr(l,s),r.push({path:i,outcome:"created"});continue}const u=(0,Y.readFileSync)(l),h=pf(u);u.equals(h)?r.push({path:i,outcome:"unchanged"}):(on(a,t),Pr(l,h,c.mode&511),r.push({path:i,outcome:"merged"}))}return{root:o,force:n,files:r,conflicts:[]}}var Ot=da;function ff(e){return Ot.includes(e)}function Zf(e){return(0,je.createHash)("sha256").update(e).digest("hex")}function Al(e,t=Bn()){const n=t.methods.get(e);if(!n)throw new Error(`Saga method ${e} is missing from the verified bundle`);return{name:e,sha256:Zf(n),bytes:n}}function fl(e=Bn()){return Object.fromEntries(Ot.map(t=>[t,Al(t,e).sha256]))}var Zl=/^[a-z0-9][a-z0-9-]{0,62}$/,Rl=new Set(["prompts","tools","archive","runtime","amendments","revisions"]),Rf=[["goal","goal.md"],["research","research.md"],["acceptance","acceptance.md"],["plan","progress.md"]];function wn(e){return e instanceof Error&&"code"in e&&e.code==="ENOENT"}function It(e){let t;try{t=(0,Y.statSync)(e)}catch(n){if(wn(n))return;throw new U(`Cannot inspect Saga data "${e}": ${n instanceof Error?n.message:String(n)}`)}if(!t.isFile())throw new U(`Cannot read Saga data "${e}": not a regular file.`);try{return(0,Y.readFileSync)(e,"utf8")}catch(n){throw new U(`Cannot read Saga data "${e}": ${n instanceof Error?n.message:String(n)}`)}}function Ef(e){const t=ul(It(R.default.join(e,"progress.md"))??"");return{active:t.active.map(({id:n,title:o,done:a,note:r})=>({id:n,title:o,done:a,note:r})),superseded:t.superseded}}function Vf(e){return ml(It(R.default.join(e,"acceptance.md"))??"")}function Gf(e){const t=R.default.join(e,"runtime","blocked.json"),n=It(t);if(n===void 0)return{};let o;try{o=JSON.parse(n)}catch(a){throw new U(`Invalid Saga data in "${t}": ${a instanceof Error?a.message:String(a)}`)}if(!o||typeof o!="object"||Array.isArray(o))throw new U(`Invalid Saga data in "${t}": expected a JSON object.`);return o}function Sf(e){const t=R.default.join(e,"contract.lock"),n=It(t);return n===void 0?0:hl(n,t).revision}function ha(e){const t=R.default.join(e,"amendments");let n;try{if(!(0,Y.statSync)(t).isDirectory())return[];n=(0,Y.readdirSync)(t).filter(o=>o.endsWith(".md")).sort()}catch(o){if(wn(o))return[];throw new U(`Cannot read Saga amendments "${t}": ${o instanceof Error?o.message:String(o)}`)}return n.map(o=>{const a=R.default.join(t,o),r=It(a);if(r===void 0)throw new U(`Cannot read Saga amendment "${a}": not a regular file.`);return{name:o,mergedIn:qA(r)}})}function Nf(e){const t=n=>{const o=It(R.default.join(e,n));return o!==void 0&&o.trim()!==""};return{goal:t("goal.md"),research:t("research.md"),acceptance:t("acceptance.md"),plan:t("progress.md")}}function El(e){const t=Ef(e),n=Vf(e),o=Gf(e);return[...t.active.map(a=>({id:a.id,title:a.title,state:a.done?"done":a.id in o?"blocked":"pending",cmd:n[a.id]||"",note:a.note})),...t.superseded.map(a=>({id:a.id,title:a.title,state:"superseded",cmd:"",note:""}))]}function vf(e){return El(e)}function ba(e,t){const n=Sf(t),o=El(t),a=Nf(t),r=o.filter(l=>l.state!=="superseded"),i=o.filter(l=>l.state==="done").length,s=Rf.find(([l])=>!a[l])?.[0]??null;return{schema:"saga-status/2",sagaId:e,revision:n,state:n===0?s?"draft":"planned":i===r.length?"done":"running",updatedAt:new Date().toISOString().replace(/\.\d{3}Z$/,"Z"),note:"",artifacts:a,nextArtifact:s,counts:{total:r.length,done:i,blocked:o.filter(l=>l.state==="blocked").length,pending:o.filter(l=>l.state==="pending").length,superseded:o.filter(l=>l.state==="superseded").length},openAmendments:ha(t).filter(l=>!l.mergedIn).length,items:o.map(({id:l,title:c,state:u})=>({id:l,title:c,state:u}))}}function kn(e,t){const n=()=>{throw new ye(404,`Saga "${t}" was not found.`)};(!Zl.test(t)||Rl.has(t))&&n();const o=R.default.join(e,t);let a;try{a=(0,Y.lstatSync)(o)}catch(r){throw wn(r)&&n(),new U(`Cannot inspect Saga "${o}": ${r instanceof Error?r.message:String(r)}`)}return a.isDirectory()||n(),o}function Wf(e){let t;try{t=(0,Y.readdirSync)(e,{withFileTypes:!0})}catch(n){if(wn(n))return[];throw new U(`Cannot list Sagas in "${e}": ${n instanceof Error?n.message:String(n)}`)}return t.filter(n=>n.isDirectory()&&Zl.test(n.name)&&!Rl.has(n.name)).map(n=>n.name).sort()}function yf(e){return Wf(e).map(t=>{const n=ba(t,R.default.join(e,t));return{sagaId:n.sagaId,state:n.state,revision:n.revision,counts:n.counts,openAmendments:n.openAmendments,updatedAt:n.updatedAt}})}function If(e){return{sagas:yf(e)}}function Yf(e,t){return{sagaId:t,items:vf(kn(e,t))}}function ga(e,t){return R.default.join(e,t)}function pa(e,t){return R.default.join(ga(e,t),"runtime","execute.lock")}function Xf(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;const t=e;return typeof t.token=="string"&&typeof t.ownerSession=="string"&&typeof t.createdAt=="string"}function Aa(e,t){const n=ne(e,pa(e,t));let o;try{o=(0,Y.readFileSync)(n,"utf8")}catch(r){if(r.code==="ENOENT")return;throw new U(`Cannot read the execution lock of Saga "${t}": ${r.message}`)}let a;try{a=JSON.parse(o)}catch{throw new U(`The execution lock of Saga "${t}" is not valid JSON.`)}if(!Xf(a))throw new U(`The execution lock of Saga "${t}" has an unexpected shape.`);return a}function Vl(e,t){return t===void 0||t===""?!1:(0,je.timingSafeEqual)(Buffer.from($e(e),"hex"),Buffer.from($e(t),"hex"))}function Gl(e,t){return`Saga "${e}" is owned by session ${t}; reconcile the prior orchestrator and its workers. Ownership is never taken over by age.`}function Bf(e,t,n){const o=n?.trim();if(!o)throw new N("claim requires a nonempty --session <owner-session-id>.");yt(e),ke(e,R.default.join(ga(e,t),"runtime"));const a={token:(0,je.randomUUID)(),ownerSession:o,createdAt:tt()},r=pa(e,t),i=R.default.join(R.default.dirname(r),`.execute.lock.${(0,je.randomUUID)()}.tmp`);Cn(e,i,`${JSON.stringify(a,null,2)}
|
|
221
|
+
`);try{af(e,i,r)}catch(s){throw s.code!=="EEXIST"?s:new H([Gl(t,Aa(e,t)?.ownerSession??"unknown")])}finally{bl(e,i)}return a}function fa(e,t,n){const o=Aa(e,t);if(!o)return{locked:!1};if(!Vl(o.token,n))throw new H([`${Gl(t,o.ownerSession)} Supply the execution token with --token or SAGA_EXECUTION_TOKEN.`]);return{locked:!0,ownerSession:o.ownerSession}}function Cf(e,t){const n=ne(e,R.default.join(ga(e,t),"runtime","status.json"));let o;try{o=(0,Y.readFileSync)(n,"utf8")}catch(a){if(a.code==="ENOENT")return;throw a}try{const a=JSON.parse(o).state;return typeof a=="string"?a:void 0}catch{return}}function Ff(e,t,n){const o=Aa(e,t);if(!o)throw new H([`Saga "${t}" has no execution lock; there is nothing to release.`]);if(!Vl(o.token,n.token))throw new H([`the execution token does not match the owner session ${o.ownerSession}.`]);if(!n.workersSettled)throw new H(["confirm that every worker has settled with --workers-settled."]);const a=Cf(e,t);if(a!=="paused"&&a!=="done")throw new H([`the stored status is ${a??"missing"}; write a paused or done snapshot with set-status before releasing.`]);return bl(e,pa(e,t)),{ownerSession:o.ownerSession}}function Za(e){const t=R.default.resolve(e);let n;try{n=(0,Y.realpathSync)(t)}catch(o){throw new U(`Cannot use local project path "${e}": ${o instanceof Error?o.message:String(o)}`)}if(!(0,Y.statSync)(n).isDirectory())throw new U(`Local project path is not a directory: "${e}"`);return n}function fo(e){if(!Array.isArray(e.projects))throw new U("Backend project list did not include a projects collection.");return e.projects}function Sl(e,t){if(typeof e.path!="string"||e.path.length===0)throw new U(`Backend project "${t}" has no host-local project path.`);return Za(e.path)}async function wf(e,t,n){if(e.kind==="path")return Za(e.value);const o=fo(await I(t,n).api.listProjects()).find(a=>a.id===e.value);if(!o)throw new ye(404,`Project "${e.value}" was not found.`);return Sl(o,e.value)}function kf(e,t){return process.platform==="win32"?e.toLowerCase()===t.toLowerCase():e===t}function Uf(e){try{return(0,Y.realpathSync)(R.default.resolve(e))}catch{return}}function Jf(e,t){const n=e.flatMap(o=>{if(typeof o.id!="string"||typeof o.path!="string"||o.path.length===0)return[];const a=Uf(o.path);return a!==void 0&&kf(a,t)?[{id:o.id}]:[]});if(n.length===0)throw new H([`no registered project has the path ${t}; register the project or pass --project-id.`]);if(n.length>1){const o=n.map(a=>a.id).join(", ");throw new H([`${n.length} registered projects have the path ${t} (${o}); pass --project-id to choose one.`])}return{projectId:n[0].id,projectDirectory:t}}async function xf(e,t){if(e.kind==="path"){const o=Za(e.value);return Jf(fo(await t()),o)}const n=fo(await t()).find(o=>o.id===e.value);if(!n)throw new ye(404,`Project "${e.value}" was not found.`);return{projectId:e.value,projectDirectory:Sl(n,e.value)}}var ei=["implementation","verification"],Kf="worker";function zf(e){const t={"saga.id":e.sagaId,"saga.role":Kf,"saga.worker":e.role,"saga.master":e.masterSessionId};return e.item!==void 0&&(t["saga.item"]=e.item),t}function Lf(e){const t=e.title.replace(/\s+/g," ").trim(),n=e.createdAt??tt();return`- ${e.sessionId} | ${n} | ${e.role} | ${e.item??"-"} | ${t}
|
|
222
|
+
`}function Nl(e){const t=e.path!==void 0;if(t===(e.projectId!==void 0))throw new N("Specify exactly one of --path <directory> or --project-id <id>.");if(t){const o=e.path;if(o===void 0||o==="")throw new N("--path <directory> must not be empty.");return{kind:"path",value:o}}const n=e.projectId?.trim();if(!n)throw new N("--project-id <id> must not be empty.");return{kind:"project-id",value:n}}function jf(e,t){const n=e.opts().token??e.optsWithGlobals().token;if(e.optsWithGlobals().projectId!==void 0&&n!==void 0)throw new N("--token is the backend bearer token with --project-id; set SAGA_EXECUTION_TOKEN to pass the execution token.");return n!==void 0&&n!==""?n:t.SAGA_EXECUTION_TOKEN||void 0}async function Yt(e,t){const n=e.optsWithGlobals(),o=Nl(n),a=await wf(o,e,t);return{env:t.env,io:t.io,outputJson:n.json===!0,projectDirectory:a,sagaRoot:R.default.join(a,".hagicode","sagas"),selector:o}}var Ft="session create",Hf=/[\\/]/;function an(e,t){if(typeof e!="string"||e.trim()==="")throw new N(`session create requires a nonblank ${t} <value>.`);return e.trim()}function ti(e,t){if(Hf.test(e)||e==="."||e===".."||e.includes("\0"))throw new N(`${t} must not contain a path separator or a traversal segment: ${JSON.stringify(e)}.`);return e}function Tf(e){if(typeof e!="string"||!ei.includes(e))throw new N(`--role must be one of ${ei.join(", ")}.`);return e}function Qf(e,t){const n=ti(an(e.saga,"--saga"),"--saga"),o=an(e.title,"--title"),a=Tf(e.role),r=an(e.master,"--master"),i=e.item===void 0?void 0:ti(an(e.item,"--item"),"--item");if(e.token!==void 0)throw new N("--token is the backend bearer token; the Saga execution token comes only from SAGA_EXECUTION_TOKEN.");const s=t.SAGA_EXECUTION_TOKEN;if(s===void 0||s.trim()==="")throw new N("session create requires SAGA_EXECUTION_TOKEN to hold the execution token claimed for this Saga.");return{sagaId:n,title:o,role:a,masterSessionId:r,item:i,executionToken:s,selector:Nl(e)}}function Mf(e,t){const n=R.default.join(e,t,"runtime"),o=R.default.join(n,"sessions.md");return ne(e,o),yt(e),ke(e,n),o}function Of(e){return e instanceof Error?e.message:String(e)}function Df(e){return async function(){const n=Qf(this.optsWithGlobals(),e.env),o=I(this,e),a=i=>o.io.stdout(i),{sagaId:r}=n;try{const i=await xf(n.selector,()=>o.api.listProjects()),s=R.default.join(i.projectDirectory,".hagicode","sagas");kn(s,r),fa(s,r,n.executionToken);const l=Mf(s,r),c=Ae(await o.api.createChatSession({title:n.title,projectId:i.projectId,metadata:zf({sagaId:r,role:n.role,masterSessionId:n.masterSessionId,item:n.item})}));try{of(s,l,Lf({sessionId:c.sessionId,role:n.role,item:n.item,title:n.title}))}catch(h){const A=`session ${c.sessionId} was created but its record could not be written to ${l}: ${Of(h)}`,Z={sagaId:r,command:Ft,ok:!1,errors:[A],session:c};throw a(o.outputJson?W(Z):go(Ft,r,[A])),new H([A],{reported:!0})}const u={sagaId:r,command:Ft,ok:!0,session:c,record:l};a(o.outputJson?W(u):xA(u))}catch(i){if(i instanceof H&&!i.reported){const s={sagaId:r,command:Ft,ok:!1,errors:i.reasons};a(o.outputJson?W(s):go(Ft,r,i.reasons)),i.reported=!0}throw i}}}var _f=["goal.md","research.md","acceptance.md","progress.md"],vl=/^(状态|Status):\s*PASS\s*$/m;function Oe(e,t){const n=R.default.join(e,t),o=Pe(e,R.default.join(n,"progress.md")),a=Pe(e,R.default.join(n,"acceptance.md"));return{sagaRoot:e,sagaId:t,directory:n,goal:Wt(e,R.default.join(n,"goal.md")),research:Pe(e,R.default.join(n,"research.md")),acceptance:a,progress:o,plan:ul(o??""),commands:ml(a??"")}}function $f(e){return/[\\/]/.test(e)||e==="."||e===".."}function Un(e){const t=[],n={"goal.md":e.goal!==void 0,"research.md":e.research!==void 0,"acceptance.md":e.acceptance!==void 0,"progress.md":e.progress!==void 0};for(const a of _f)n[a]||t.push(`${a} is missing`);const o=e.plan.active.map(a=>a.id);o.length===0&&n["progress.md"]&&t.push("progress.md has no active items"),new Set(o).size!==o.length&&t.push("progress.md has duplicate item IDs");for(const a of[...o,...e.plan.superseded.map(r=>r.id)])$f(a)&&t.push(`unsafe item ID: ${a}`);for(const a of o)a in e.commands||t.push(`item ${a} has no acceptance cmd in acceptance.md`);for(const a of Object.keys(e.commands))o.includes(a)||t.push(`acceptance entry ${a} is not an active item in progress.md`);return t}function Wl(e){return{goal:$e(e.goal??Buffer.alloc(0)),acceptance:$e(e.acceptance!==void 0?Buffer.from(e.acceptance,"utf8"):Buffer.alloc(0)),"plan-items":$e(ef(e.plan))}}function Ra(e){return ha(e.directory).filter(t=>!t.mergedIn).map(t=>`open amendment ${t.name}: merge it into the artifacts and set merged-in`)}function yl(e){return PA(e.research??"").map(t=>`open question not decided by a human: ${t}`)}function Ea(e){const t=Pe(e.sagaRoot,R.default.join(e.directory,"contract.lock"));if(t!==void 0)return{text:t,lock:hl(t,R.default.join(e.directory,"contract.lock"))}}function Il(e){const t=[],n=Ea(e);if(!n)t.push("contract.lock missing: run freeze first");else{const o=Wl(e);for(const[a,r]of Object.entries(o))n.lock.hashes[a]!==r&&t.push(`hash mismatch for ${a}: frozen contract (r${n.lock.revision}) changed, run freeze after merging an amendment`)}return t.push(...Ra(e)),t.push(...yl(e)),t.push(...Pf(e)),t}function Pf(e){const t=[],n=R.default.join(e.directory,"runtime");for(const o of e.plan.active.filter(a=>a.done)){if(!o.note)t.push(`item ${o.id} is ticked but has no evidence reference`);else{const r=R.default.resolve(n,o.note);r.startsWith(`${R.default.resolve(n)}${R.default.sep}`)?Wt(e.sagaRoot,r)===void 0&&t.push(`item ${o.id} is ticked but evidence file is missing: ${o.note}`):t.push(`item ${o.id} evidence reference escapes the runtime directory: ${o.note}`)}const a=Pe(e.sagaRoot,R.default.join(n,"reports",`${o.id}.md`));(a===void 0||!vl.test(a))&&t.push(`item ${o.id} is ticked but its PASS report is missing`)}return t}function Yl(e,t,n){const o=Oe(e,t),a=Un(o);return n==="run"?[...a,...Il(o)]:a}function qf(e){const t=Ea(e);if(!t)return;const n=t.lock.methods;if(n===void 0)return{recorded:!1,drift:[]};const o=fl();return{recorded:!0,drift:Ot.filter(a=>n[a]!==o[a]).map(a=>({name:a,recorded:n[a]??null,current:o[a]}))}}function e2(e,t,n){const o=Oe(e,t),a=Un(o);return n==="plan"?{errors:a}:{errors:[...a,...Il(o)],methods:qf(o)}}function t2(e,t){const n=Oe(e,t).plan.active;return[...n.length>0&&n.every(o=>o.done)?[]:["active items remain pending or blocked, or there are no active items"],...Yl(e,t,"run")]}function n2(e){return tf(e.commands)}function o2(e,t){const n=fl(),o=Oe(e,t),a=[...Un(o),...yl(o),...Ra(o)];if(a.length>0)throw new H(a);const r=Wl(o),i=n2(o),s=o.plan.active,l=[...s.map(d=>d.id),...o.plan.superseded.map(d=>d.id)],c=R.default.join(o.directory,"contract.lock"),u=Ea(o);if(!u)return ht(e,c,$r({revision:1,frozenAt:tt(),prev:"-",hashes:r,acceptanceByItem:i,methods:n,items:l})),{revision:1,unchanged:!1,reopened:[],added:s.map(d=>d.id)};const{text:h,lock:A}=u;if(Object.keys(r).length===Object.keys(A.hashes).length&&Object.entries(r).every(([d,m])=>A.hashes[d]===m))return{revision:A.revision,unchanged:!0,reopened:[],added:[]};const Z=`r${A.revision+1}`;if(!ha(o.directory).some(d=>d.mergedIn===Z))throw new H([`contract changed without an amendment merged into ${Z}: tamper or unrecorded change`]);const G=new Set(l),S=A.items.filter(d=>!G.has(d));if(S.length>0)throw new H([`item removed without being marked superseded: ${S.join(", ")}`]);ke(e,R.default.join(o.directory,"revisions")),ht(e,R.default.join(o.directory,"revisions",`r${A.revision}.lock`),h);const X=Mt(o.progress??""),J=[];for(const d of s)d.done&&A.acceptanceByItem[d.id]!==i[d.id]&&(X[d.line]=`- [ ] ${d.id} ${d.title} | reopened in ${Z}: acceptance changed`,J.push(d.id));if(J.length>0){yt(e);const d=R.default.join(o.directory,"runtime","history",`r${A.revision}`);ke(e,d);for(const m of J)for(const p of[R.default.join(o.directory,"runtime","evidence",`${m}.log`),R.default.join(o.directory,"runtime","reports",`${m}.md`)])Wt(e,p)!==void 0&&rf(e,p,R.default.join(d,R.default.basename(p)))}return ht(e,R.default.join(o.directory,"progress.md"),`${X.join(`
|
|
223
223
|
`)}
|
|
224
|
-
`),ht(e,c,$r({revision:A.revision+1,frozenAt:tt(),prev:$e(h),hashes:r,acceptanceByItem:i,methods:n,items:l})),{revision:A.revision+1,previousRevision:A.revision,unchanged:!1,reopened:J,added:s.filter(d=>!A.items.includes(d.id)).map(d=>d.id)}}function Xl(e){return e.length>0&&!/[\\/]/.test(e)&&e!=="."&&e!==".."}function Va(e,t){const n=R.default.join(e,t,"runtime","blocked.json"),o=Pe(e,n);if(o===void 0)return{};let a;try{a=JSON.parse(o)}catch(r){throw new U(`Invalid Saga data in "${n}": ${r.message}`)}if(!a||typeof a!="object"||Array.isArray(a))throw new U(`Invalid Saga data in "${n}": expected a JSON object.`);return{...a}}function
|
|
224
|
+
`),ht(e,c,$r({revision:A.revision+1,frozenAt:tt(),prev:$e(h),hashes:r,acceptanceByItem:i,methods:n,items:l})),{revision:A.revision+1,previousRevision:A.revision,unchanged:!1,reopened:J,added:s.filter(d=>!A.items.includes(d.id)).map(d=>d.id)}}function Xl(e){return e.length>0&&!/[\\/]/.test(e)&&e!=="."&&e!==".."}function Va(e,t){const n=R.default.join(e,t,"runtime","blocked.json"),o=Pe(e,n);if(o===void 0)return{};let a;try{a=JSON.parse(o)}catch(r){throw new U(`Invalid Saga data in "${n}": ${r.message}`)}if(!a||typeof a!="object"||Array.isArray(a))throw new U(`Invalid Saga data in "${n}": expected a JSON object.`);return{...a}}function a2(e,t){return R.default.join(e,t,"progress.md")}function r2(e,t,n){if(!n||!Xl(n))throw new H([`invalid item ID: ${JSON.stringify(n??"")}`]);const o=Oe(e,t),a=o.plan.active.find(h=>h.id===n);if(!a)throw new H([`unknown item ${n}: it is not an active item in progress.md`]);const r=R.default.join(o.directory,"runtime"),i=Pe(e,R.default.join(r,"reports",`${n}.md`));if(i===void 0||!vl.test(i))throw new H([`no PASS report for ${n}: runtime/reports/${n}.md must contain "Status: PASS"`]);if(Wt(e,R.default.join(r,"evidence",`${n}.log`))===void 0)throw new H([`no evidence file for ${n}: runtime/evidence/${n}.log is missing`]);const s=Yl(e,t,"run");if(s.length>0)throw new H(s);const l=`evidence/${n}.log`,c=Mt(o.progress??"");c[a.line]=`- [x] ${n} ${a.title} | ${l}`,yt(e),ht(e,a2(e,t),`${c.join(`
|
|
225
225
|
`)}
|
|
226
|
-
`);const u=Va(e,t);return n in u&&(delete u[n],ua(e,R.default.join(r,"blocked.json"),u)),{itemId:n,evidence:l}}function
|
|
226
|
+
`);const u=Va(e,t);return n in u&&(delete u[n],ua(e,R.default.join(r,"blocked.json"),u)),{itemId:n,evidence:l}}function i2(e,t,n,o){if(o===void 0||o.trim()==="")throw new N("block requires a nonempty reason.");if(!n||!Xl(n))throw new H([`invalid item ID: ${JSON.stringify(n??"")}`]);const a=Oe(e,t);if(!a.plan.active.some(s=>s.id===n))throw new H([`unknown item ${n}: it is not an active item in progress.md`]);yt(e);const r=R.default.join(a.directory,"runtime");ke(e,r);const i=Va(e,t);return i[n]=o.trim(),ua(e,R.default.join(r,"blocked.json"),i),{itemId:n,reason:o.trim()}}function s2(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||"amendment"}function l2(e,t,n,o){const a=(n??"").replace(/\s*[\r\n]+\s*/g," ").trim();if(a==="")throw new N("amend requires a nonempty title.");const r=R.default.join(e,t,"amendments");ke(e,r);const i=(0,Y.readdirSync)(r).map(c=>/^(\d+)-.*\.md$/.exec(c)).filter(c=>c!==null).map(c=>Number(c[1])),s=(i.length>0?Math.max(...i):0)+1,l=`${String(s).padStart(3,"0")}-${s2(a)}.md`;return Cn(e,R.default.join(r,l),`title: ${a}
|
|
227
227
|
created-at: ${tt()}
|
|
228
228
|
merged-in:
|
|
229
229
|
---
|
|
230
230
|
${o}
|
|
231
|
-
`),{name:l,mergedIn:""}}function
|
|
232
|
-
${
|
|
233
|
-
`).action(
|
|
234
|
-
`);function nt(e){return e?"yes":"no"}function
|
|
231
|
+
`),{name:l,mergedIn:""}}function c2(){const e=new Date,t=n=>String(n).padStart(2,"0");return`${e.getFullYear()}-${t(e.getMonth()+1)}-${t(e.getDate())}`}function d2(e,t,n){const o=Oe(e,t),a=Va(e,t),r=[];o.plan.active.length===0&&r.push("the saga has no active items");for(const l of o.plan.active.filter(c=>!c.done))r.push(`item ${l.id} is ${l.id in a?"blocked":"pending"}`);if(r.push(...Ra(o)),r.length>0&&!n)throw new H([...r,"use --force to archive anyway"]);const i=R.default.join(e,"archive");ke(e,i);const s=R.default.join(i,`${c2()}-${t}`);return sf(e,R.default.join(e,t),s),{destination:s}}var Ga=["draft","planned","running","paused","done"];function Bl(e){return typeof e=="string"&&Ga.includes(e)}function u2(e,t,n,o){if(!Bl(n))throw new N(`--state must be one of ${Ga.join(", ")}.`);const a=R.default.join(e,t);if(n==="planned"||n==="running"){const i=Un(Oe(e,t));if(i.length>0)throw new H(i)}if(n==="done"){const i=t2(e,t);if(i.length>0)throw new H(i)}const r={...ba(t,a),state:n,note:o??"",updatedAt:tt()};return yt(e),ke(e,R.default.join(a,"runtime")),ua(e,R.default.join(a,"runtime","status.json"),r),r}function Xe(e,t){return async function(...o){const a=o.slice(0,-2).map(String),r=this.opts();t.preflight?.(r);const i=t.takesToken?jf(this,e.env):void 0,s=await Yt(this,e),l=a[0];if(!l)throw new N(`${t.name} requires a Saga ID.`);kn(s.sagaRoot,l);const c=u=>s.io.stdout(u);try{t.guard&&fa(s.sagaRoot,l,i);const u=t.run({sagaId:l,sagaRoot:s.sagaRoot,token:i},r,a),h={sagaId:l,command:t.name,ok:!0,...u};c(s.outputJson?W(h):zA(t.name,h))}catch(u){if(u instanceof H){const h={sagaId:l,command:t.name,ok:!1,errors:u.reasons,...u.details};c(s.outputJson?W(h):go(t.name,l,u.reasons)+KA(u.details)),u.reported=!0}throw u}}}function m2(e){if(typeof e.session!="string"||e.session.trim()==="")throw new N("claim requires a nonempty --session <owner-session-id>.")}function h2(e){return Xe(e,{name:"claim",takesToken:!1,preflight:m2,run:({sagaId:t,sagaRoot:n},o)=>{const a=Bf(n,t,o.session);return{ownerSession:a.ownerSession,token:a.token,createdAt:a.createdAt}}})}function b2(e){return Xe(e,{name:"assert-owner",takesToken:!0,run:({sagaId:t,sagaRoot:n,token:o})=>{const a=fa(n,t,o);return a.locked?{locked:!0,ownerSession:a.ownerSession}:{locked:!1}}})}function g2(e){return Xe(e,{name:"freeze",takesToken:!0,guard:!0,run:({sagaId:t,sagaRoot:n})=>{const o=o2(n,t);return{revision:o.revision,previousRevision:o.previousRevision??null,unchanged:o.unchanged,reopened:o.reopened,added:o.added}}})}function p2(e){return Xe(e,{name:"check",takesToken:!1,preflight:t=>{if(t.phase!=="plan"&&t.phase!=="run")throw new N("check --phase must be plan or run.")},run:({sagaId:t,sagaRoot:n},o)=>{const a=o.phase,{errors:r,methods:i}=e2(n,t,a),s=i===void 0?{}:{methods:i};if(r.length>0)throw new H(r,{details:s});return{phase:a,errors:[],...s}}})}function A2(e){return Xe(e,{name:"tick",takesToken:!0,guard:!0,run:({sagaId:t,sagaRoot:n},o,a)=>({...r2(n,t,a[1])})})}function f2(e){return Xe(e,{name:"block",takesToken:!0,guard:!0,run:({sagaId:t,sagaRoot:n},o,a)=>({...i2(n,t,a[1],a[2])})})}function Z2(e){return Xe(e,{name:"amend",takesToken:!0,guard:!0,run:({sagaId:t,sagaRoot:n},o,a)=>({name:l2(n,t,a[1],a[2]??"").name,merged:!1})})}function R2(e){return Xe(e,{name:"archive",takesToken:!0,guard:!0,run:({sagaId:t,sagaRoot:n},o)=>({...d2(n,t,o.force===!0)})})}function E2(e){return Xe(e,{name:"set-status",takesToken:!0,guard:!0,preflight:t=>{if(!Bl(t.state))throw new N(`--state must be one of ${Ga.join(", ")}.`)},run:({sagaId:t,sagaRoot:n},o)=>({...u2(n,t,o.state,o.note)})})}function V2(e){return Xe(e,{name:"release",takesToken:!0,run:({sagaId:t,sagaRoot:n,token:o},a)=>({released:!0,ownerSession:Ff(n,t,{token:o,workersSettled:a.workersSettled===!0}).ownerSession})})}function le(e){return y(e.option("--path <directory>","Select a local project directory without backend access.").option("--project-id <id>","Select a project from the configured backend."))}function Ke(e){return e.option("--token <token>","Execution token of the Saga owner (or set SAGA_EXECUTION_TOKEN).")}function G2(e){return async function(){const n=await Yt(this,e),o=this.opts().force===!0,a=Af(n.projectDirectory,Bn(),o);n.io.stdout(n.outputJson?W(a):FA(a))}}function S2(e){return async function(n){const o=this.optsWithGlobals();if(!ff(n))throw new N(`Unknown Saga method ${JSON.stringify(n)}: use one of ${Ot.join(", ")}.`);const a=Al(n,Bn()),r=a.bytes.toString("utf8");e.io.stdout(o.json===!0?W({name:a.name,sha256:a.sha256,content:r}):r)}}function N2(e){return async function(n){const o=await Yt(this,e);mf(n,o.sagaRoot),bf(o.sagaRoot,o.selector);const a=gf(n,o.sagaRoot),r={id:a.id,directory:R.default.join(o.sagaRoot,n),metadata:a};o.io.stdout(o.outputJson?W(r):wA(r))}}function v2(e){return async function(){const n=await Yt(this,e),o=If(n.sagaRoot);n.io.stdout(n.outputJson?W(o):kA(o))}}function W2(e){return async function(n){const o=await Yt(this,e),a=ba(n,kn(o.sagaRoot,n));o.io.stdout(o.outputJson?W(a):UA(a))}}function y2(e){return async function(n){const o=await Yt(this,e),a=Yf(o.sagaRoot,n);o.io.stdout(o.outputJson?W(a):JA(a))}}function I2(e,t){const n=e.command("saga").description("Initialize, create, and inspect project-local Sagas.");le(n.command("init").description("Install the Saga ignore rule. Method prompts come from the CLI (see method).")).option("--force","Accepted for compatibility; no managed resource is replaced.").action(G2(t)),y(n.command("method <name>").description(`Print a published Saga method (${Ot.join(", ")}) from the installed CLI.`)).action(S2(t)),le(n.command("new <saga-id>").description("Create a Saga in an initialized project.")).action(N2(t)),le(n.command("list").description("List active Sagas.")).action(v2(t)),le(n.command("status <saga-id>").description("Read a Saga status projection.")).action(W2(t)),le(n.command("items <saga-id>").description("Read Saga plan items.")).action(y2(t)),le(n.command("claim <saga-id>").description("Claim exclusive execution ownership of a Saga.")).requiredOption("--session <id>","Owner session identifier recorded in the lock.").action(h2(t)),Ke(le(n.command("assert-owner <saga-id>").description("Check the execution token before dispatch."))).action(b2(t)),Ke(le(n.command("release <saga-id>").description("Release execution ownership after a paused or done snapshot."))).option("--workers-settled","Confirm that every worker has settled.").action(V2(t)),Ke(le(n.command("freeze <saga-id>").description("Freeze the Saga contract as revision 1, or the next revision after a merged amendment."))).action(g2(t)),Ke(le(n.command("set-status <saga-id>").description("Write the runtime status snapshot (draft, planned, running, paused or done)."))).requiredOption("--state <state>","draft, planned, running, paused or done.").option("--note <text>","Note stored with the snapshot.").action(E2(t)),Ke(le(n.command("tick <saga-id> <item-id>").description("Mark a plan item done once its PASS report and evidence exist."))).action(A2(t)),Ke(le(n.command("block <saga-id> <item-id> <reason>").description("Record why a plan item is blocked."))).action(f2(t)),Ke(le(n.command("amend <saga-id> <title> <text>").description("Append an open amendment to the Saga contract."))).action(Z2(t)),Ke(le(n.command("archive <saga-id>").description("Archive a finished Saga; --force archives unfinished work."))).option("--force","Archive even when items are unfinished or amendments are open.").action(R2(t)),le(n.command("check <saga-id>").description("Check the plan (--phase plan) or the frozen run contract (--phase run, the default).")).option("--phase <phase>","plan or run.","run").action(p2(t)),y(n.command("session").description("Create Saga Worker chat sessions and record them.").command("create").description("Create a Worker chat session marked with saga.* metadata and record it in runtime/sessions.md.")).option("--saga <id>","Saga whose Worker this is.").option("--title <title>","Title of the Worker chat session.").option("--role <role>","implementation or verification.").option("--master <session-id>","Session ID of the orchestrating (master) session.").option("--item <id>",'Plan item the Worker serves; recorded as "-" when omitted.').option("--path <directory>","Project directory. The backend is called to find the registered project with this real path.").option("--project-id <id>","Backend project ID.").addHelpText("after",`
|
|
232
|
+
${Y2}
|
|
233
|
+
`).action(Df(t))}var Y2=["Metadata written to the session (userMetadata):"," saga.id the Saga ID"," saga.role always worker"," saga.worker the --role value"," saga.master the --master value"," saga.item the --item value (only when --item is given)","","The execution token comes only from SAGA_EXECUTION_TOKEN; --token is refused because it is the backend bearer token.","The command creates and records the session. It sends no message and does not archive it (see hagi chat archive).","","Exit codes: 0 created and recorded; 1 refused, or the record could not be written (the session ID is named);","2 usage error, nothing sent; 24 Saga not found.","",js(),"","Example:",' SAGA_EXECUTION_TOKEN=<token> hagi saga session create --saga demo --path <root> --title "T1 implementation"'," --role implementation --master <your-session-id> --item T1"].join(`
|
|
234
|
+
`);function nt(e){return e?"yes":"no"}function X2(e){return e&&e.length>0?e.join(", "):"-"}function Cl(e){return e.origin??"user"}function Fl(e){return Cl(e)==="built-in"}function B2(e){return Fl(e)?nt(e.builtIn?.enabled):"-"}function C2(e){return(Fl(e)?e.builtIn?.version:e.managedInstallMetadata?.version)??"-"}function F2(e){const t=e.items??[];return t.length===0?`No local skills installed.
|
|
235
235
|
`:`Local skills (${t.length})
|
|
236
|
-
${ie([{header:"Name",value:n=>n.name??"-"},{header:"Origin",value:Cl},{header:"Enabled",value:
|
|
237
|
-
`}function
|
|
236
|
+
${ie([{header:"Name",value:n=>n.name??"-"},{header:"Origin",value:Cl},{header:"Enabled",value:B2},{header:"Version",value:C2},{header:"Scope",value:n=>n.scope??"-"},{header:"Agents",value:n=>X2(n.agents)},{header:"Path",value:n=>n.path??"-"}],t)}
|
|
237
|
+
`}function w2(e){return q([["skillName",e.skillName??void 0],["status",e.status??void 0],["message",e.userMessage??void 0],["diagnostic",e.diagnosticMessage??void 0]])}function k2(e){return q([["skillName",e.slug??void 0],["enabled",nt(e.enabled)],["message",e.userMessage??void 0],["diagnostic",e.diagnosticMessage??void 0]])}function U2(e){const t=e.items??[];return t.length===0?`No gallery skills found.
|
|
238
238
|
`:`Gallery skills (${t.length})
|
|
239
239
|
${ie([{header:"ID",value:n=>n.id??"-"},{header:"Source",value:n=>n.source??"-"},{header:"Installs",value:n=>String(n.installs??0)},{header:"Trusted",value:n=>nt(n.isTrustedSource)}],t)}
|
|
240
|
-
`}function
|
|
241
|
-
`).join("")}`}function
|
|
240
|
+
`}function J2(e){return`skills.sh audit (${e.provider}): risk=${e.risk??"--"}, alerts=${e.alerts??"--"}, score=${e.score??"--"}, analyzedAt=${e.analyzedAt??"--"}`}function x2(e,t={providers:[]}){const n=e.trustedProvider;return`${q([["id",e.id??void 0],["source",e.source??void 0],["skillSlug",e.skillSlug??void 0],["installable",nt(e.isInstallable)],["description",e.description??void 0],["repository",e.repositoryFullName??e.repositoryName??void 0],["repositoryUrl",e.repositoryUrl??void 0],["defaultBranch",e.repositoryDefaultBranch??void 0],["trustedSource",nt(e.isTrustedSource)],["trustedProvider",n?`${n.displayName??n.providerId??"-"}`:void 0],["installReference",e.installReference??void 0],["installCommand",e.installCommandPreview??void 0],["installVersion",e.installVersion??void 0],["installHint",e.installHint??void 0]])}${t.providers.map(o=>`${J2(o)}
|
|
241
|
+
`).join("")}`}function K2(e){return q([["installReference",e.installReference??void 0],["normalizedSkillKey",e.normalizedSkillKey??void 0],["version",e.version??void 0],["status",e.status??void 0],["message",e.userMessage??void 0],["diagnostic",e.diagnosticMessage??void 0],["commandPreview",e.commandPreview??void 0]])}function rn(e){const t=e.items??[];return t.length===0?`No trusted providers (directory version ${e.version??0}).
|
|
242
242
|
`:`Trusted providers (${t.length}, directory version ${e.version??0})
|
|
243
243
|
${ie([{header:"Provider ID",value:n=>n.providerId??"-"},{header:"Name",value:n=>n.displayName??"-"},{header:"Enabled",value:n=>nt(n.isEnabled)},{header:"Preset",value:n=>nt(n.isPreset)},{header:"Rules",value:n=>String(n.ruleCount??0)}],t)}
|
|
244
|
-
`}function
|
|
244
|
+
`}function z2(e,t){const n=e.command("gallery").description("Search the skill gallery, read skill details, and start managed installs.");y(n.command("search").description("Search the skill gallery by keyword.")).option("--query <query>","Keyword to search for. Omit to list the gallery.").action(async function(a){const r=I(this,t),i=await r.api.searchSkillGallery(k(a.query));if(r.outputJson){r.io.stdout(W(i));return}r.io.stdout(U2(i))}),y(n.command("detail").description("Show one gallery skill with installability, trust, and repository details.")).requiredOption("--id <id>","Gallery skill id.").requiredOption("--source <source>","Gallery skill source.").action(async function(a){const r=I(this,t),i=x(a.id,"--id"),s=x(a.source,"--source"),[l,c]=await Promise.allSettled([r.api.getSkillGalleryDetail(i,s),r.api.getSkillGalleryAudit(i,s)]);if(l.status==="rejected")throw l.reason;const u=l.value,h={providers:c.status==="fulfilled"?c.value?.providers??[]:[]};if(r.outputJson){r.io.stdout(W({...u,audit:h}));return}r.io.stdout(x2(u,h))}),y(n.command("install").description("Start a managed install of one gallery skill.")).requiredOption("--id <id>","Gallery skill id.").requiredOption("--source <source>","Gallery skill source.").requiredOption("--skill-slug <slug>","Skill slug inside the source repository.").option("--version <version>","Optional version token to install.").action(async function(a){const r=I(this,t),i=await r.api.installGallerySkill({id:x(a.id,"--id"),source:x(a.source,"--source"),skillSlug:x(a.skillSlug,"--skill-slug"),version:k(a.version)});if(r.outputJson){r.io.stdout(W(i));return}r.io.stdout(K2(i))})}var L2="The change applies to agent runs that start afterwards; a run already in progress keeps its skills.";function ni(e,t,n){const o=n?"enable":"disable";y(e.command(o).description(`${n?"Turn on":"Turn off"} one built-in skill by name. ${L2}`)).requiredOption("--skill-name <name>",`Built-in skill name to ${o}.`).action(async function(r){const i=I(this,t),s=await i.api.setBuiltInSkillAvailability({slug:x(r.skillName,"--skill-name"),enabled:n});if(i.outputJson?i.io.stdout(W(s)):i.io.stdout(k2(s)),!s.succeeded)throw new U(s.userMessage??`The built-in skill availability was not changed for ${s.slug??r.skillName}.`)})}function j2(e,t){const n=e.command("local").description("List, enable or disable built-in skills, and uninstall user-installed local skills.");y(n.command("list").description("List installed local skills with their managed install metadata.")).action(async function(){const a=I(this,t),r=await a.api.listLocalSkills();if(a.outputJson){a.io.stdout(W(r));return}a.io.stdout(F2(r))}),ni(n,t,!0),ni(n,t,!1),y(n.command("uninstall").description("Uninstall one user-installed local skill by name. Built-in skills cannot be uninstalled; use `skills local disable --skill-name <name>` to stop one from loading.")).requiredOption("--skill-name <name>","Local skill name to uninstall.").action(async function(a){const r=I(this,t),i=await r.api.uninstallLocalSkill({skillName:x(a.skillName,"--skill-name")});if(r.outputJson){r.io.stdout(W(i));return}r.io.stdout(w2(i))})}async function H2(e,t){const n=await Xn(e);if(!n||typeof n!="object"||Array.isArray(n))throw new N(`${t} must be a JSON object.`);return n}function T2(e,t){const n=e.command("trusted").description("Manage the trusted skill provider directory.");y(n.command("list").description("List trusted skill providers.")).action(async function(){const a=I(this,t),r=await a.api.listTrustedSkillProviders();if(a.outputJson){a.io.stdout(W(r));return}a.io.stdout(rn(r))}),y(n.command("upsert").description("Create or update a trusted provider from a JSON document.")).requiredOption("--input <file>","JSON file path, or - to read from stdin.").action(async function(a){const r=I(this,t),i=await H2(x(a.input,"--input"),"Trusted provider input"),s=await r.api.upsertTrustedSkillProvider(i);if(r.outputJson){r.io.stdout(W(s));return}r.io.stdout(rn(s))}),y(n.command("delete").description("Delete one trusted provider by id.")).requiredOption("--provider-id <id>","Trusted provider id to delete.").action(async function(a){const r=I(this,t),i={providerId:x(a.providerId,"--provider-id")},s=await r.api.deleteTrustedSkillProvider(i);if(r.outputJson){r.io.stdout(W(s));return}r.io.stdout(rn(s))}),y(n.command("reset").description("Reset trusted providers to the backend defaults.")).action(async function(){const a=I(this,t),r=await a.api.resetTrustedSkillProviders();if(a.outputJson){a.io.stdout(W(r));return}a.io.stdout(rn(r))})}function Q2(e,t){const n=e.command("skills").description("Manage local skills, the skill gallery, and trusted providers.");j2(n,t),z2(n,t),T2(n,t)}function j(e){const t=e?.trim();return t||void 0}function M2(e){return{severity:j(e.severity)??"",code:j(e.code)??"",message:j(e.message)??"",relativePath:j(e.relativePath)}}function Sa(e){return{id:j(e.id)??"",name:j(e.name)??"",type:j(e.type)??"",physicalPath:j(e.physicalPath)??"",gitUrl:j(e.gitUrl),createdAtUtc:j(e.createdAtUtc),updatedAtUtc:j(e.updatedAtUtc),bootstrapDiagnostics:(e.bootstrapDiagnostics??[]).map(M2)}}function wl(e){return{generatedAtUtc:j(e.generatedAtUtc),vaults:(e.items??[]).map(Sa)}}function O2(e){return e.length===0?`No vaults found.
|
|
245
245
|
`:`Vaults (${e.length})
|
|
246
246
|
${ie([{header:"Vault ID",value:t=>t.id},{header:"Type",value:t=>t.type},{header:"Name",value:t=>t.name},{header:"Path",value:t=>t.physicalPath}],e)}
|
|
247
|
-
`}function kl(e,t=[]){return q([["id",e.id],["name",e.name],["type",e.type],["physicalPath",e.physicalPath],["gitUrl",e.gitUrl],["createdAtUtc",e.createdAtUtc],["updatedAtUtc",e.updatedAtUtc],["bootstrapDiagnostics",String(e.bootstrapDiagnostics.length)],...t])}function
|
|
248
|
-
${q([["vaultId",e.vaultId],["deleted",String(e.deleted)],["deleteLocalFilesRequested",String(e.deleteLocalFilesRequested)],["localFilesDeletionStatus",e.localFilesDeletionStatus],["localFilesDeleted",String(e.localFilesDeleted)]])}`}function
|
|
247
|
+
`}function kl(e,t=[]){return q([["id",e.id],["name",e.name],["type",e.type],["physicalPath",e.physicalPath],["gitUrl",e.gitUrl],["createdAtUtc",e.createdAtUtc],["updatedAtUtc",e.updatedAtUtc],["bootstrapDiagnostics",String(e.bootstrapDiagnostics.length)],...t])}function D2(e){return{relativePath:j(e.relativePath)??"",fileName:j(e.fileName)??"",isDirectory:e.isDirectory===!0,extension:j(e.extension)??"",sizeBytes:typeof e.sizeBytes=="number"?e.sizeBytes:0,lastModifiedUtc:j(e.lastModifiedUtc),previewSupported:e.previewSupported===!0}}function _2(e){return{vaultId:j(e.id)??"",deleted:e.deleted===!0,deleteLocalFilesRequested:e.deleteLocalFilesRequested===!0,localFilesDeletionStatus:j(e.localFilesDeletionStatus),localFilesDeleted:e.localFilesDeleted===!0}}function $2(e){return`Vault deleted
|
|
248
|
+
${q([["vaultId",e.vaultId],["deleted",String(e.deleted)],["deleteLocalFilesRequested",String(e.deleteLocalFilesRequested)],["localFilesDeletionStatus",e.localFilesDeletionStatus],["localFilesDeleted",String(e.localFilesDeleted)]])}`}function P2(e){return{vaultId:j(e.vaultId)??"",vaultName:j(e.vaultName)??"",physicalPath:j(e.physicalPath)??"",status:j(e.status)??"",errorCode:j(e.errorCode),message:j(e.message),isTruncated:e.isTruncated===!0,totalFileCount:typeof e.totalFileCount=="number"?e.totalFileCount:0,items:(e.items??[]).map(D2)}}function q2(e){const t=q([["vaultId",e.vaultId],["vaultName",e.vaultName],["physicalPath",e.physicalPath],["status",e.status],["errorCode",e.errorCode],["message",e.message],["isTruncated",String(e.isTruncated)],["totalFileCount",String(e.totalFileCount)]]);return e.items.length===0?`Vault files
|
|
249
249
|
${t}No files found.
|
|
250
250
|
`:`Vault files
|
|
251
251
|
${t}${ie([{header:"Relative Path",value:n=>n.relativePath},{header:"Directory",value:n=>n.isDirectory?"yes":"no"},{header:"Extension",value:n=>n.extension},{header:"Size",value:n=>String(n.sizeBytes)},{header:"Preview",value:n=>n.previewSupported?"yes":"no"}],e.items)}
|
|
252
|
-
`}function
|
|
252
|
+
`}function eZ(e){return{vaultId:j(e.vaultId)??"",vaultName:j(e.vaultName)??"",physicalPath:j(e.physicalPath)??"",relativePath:j(e.relativePath)??"",fileName:j(e.fileName)??"",extension:j(e.extension)??"",sizeBytes:typeof e.sizeBytes=="number"?e.sizeBytes:0,lastModifiedUtc:j(e.lastModifiedUtc),status:j(e.status)??"",errorCode:j(e.errorCode),message:j(e.message),previewSupported:e.previewSupported===!0,contentTruncated:e.contentTruncated===!0,content:j(e.content)}}function tZ(e){const t=q([["vaultId",e.vaultId],["vaultName",e.vaultName],["physicalPath",e.physicalPath],["relativePath",e.relativePath],["fileName",e.fileName],["extension",e.extension],["sizeBytes",String(e.sizeBytes)],["lastModifiedUtc",e.lastModifiedUtc],["status",e.status],["errorCode",e.errorCode],["message",e.message],["previewSupported",String(e.previewSupported)],["contentTruncated",String(e.contentTruncated)]]);if(!e.content)return`Vault file preview
|
|
253
253
|
${t}`;const n=e.content.endsWith(`
|
|
254
254
|
`)?"":`
|
|
255
255
|
`;return`Vault file preview
|
|
256
256
|
${t}content
|
|
257
257
|
-------
|
|
258
|
-
${e.content}${n}`}function
|
|
259
|
-
${kl(r)}`)})}function
|
|
260
|
-
${kl(h)}`)})}function
|
|
258
|
+
${e.content}${n}`}function nZ(e,t){y(e.command("create").description("Create a vault through the generated vault client.")).requiredOption("--name <name>","Vault display name.").requiredOption("--type <type>","Vault type, such as folder, obsidian, or coderef.").requiredOption("--physical-path <path>","Vault physical path.").option("--git-url <url>","Optional git remote URL for git-backed vaults.").action(async function(o){const a=I(this,t),r=Sa(await a.api.createVault({name:x(o.name,"--name"),type:x(o.type,"--type"),physicalPath:x(o.physicalPath,"--physical-path"),gitUrl:k(o.gitUrl)}));if(a.outputJson){a.io.stdout(W({vault:r}));return}a.io.stdout(`Vault created
|
|
259
|
+
${kl(r)}`)})}function oZ(e,t){y(e.command("delete").description("Delete a vault by id and optionally request local file cleanup.")).requiredOption("--id <id>","Vault id to delete.").option("--delete-local-files","Request backend deletion of local vault files.").action(async function(o){const a=I(this,t),r=_2(await a.api.deleteVault(x(o.id,"--id"),o.deleteLocalFiles===!0));if(a.outputJson){a.io.stdout(W(r));return}a.io.stdout($2(r))})}function aZ(e,t){y(e.command("list").description("List files under a registered vault path.")).requiredOption("--id <id>","Vault id to browse.").option("--path <path>","Optional relative path under the vault root.").action(async function(o){const a=I(this,t),r=P2(await a.api.listVaultFiles(x(o.id,"--id"),k(o.path)));if(a.outputJson){a.io.stdout(W(r));return}a.io.stdout(q2(r))})}function rZ(e,t){y(e.command("preview").description("Preview supported file content from a registered vault.")).requiredOption("--id <id>","Vault id to browse.").requiredOption("--path <path>","Relative file path to preview.").action(async function(o){const a=I(this,t),r=eZ(await a.api.previewVaultFile(x(o.id,"--id"),x(o.path,"--path")));if(a.outputJson){a.io.stdout(W(r));return}a.io.stdout(tZ(r))})}function iZ(e,t){y(e.command("list").description("List registered vaults through the generated vault client.")).action(async function(){const o=I(this,t),a=wl(await o.api.listVaults());if(o.outputJson){o.io.stdout(W(a));return}o.io.stdout(O2(a.vaults))})}function sZ(e,t){y(e.command("update").description("Update a vault by merging provided fields into the current vault snapshot.")).requiredOption("--id <id>","Vault id to update.").option("--name <name>","Updated vault display name.").option("--type <type>","Updated vault type.").option("--physical-path <path>","Updated vault physical path.").option("--git-url <url>","Updated git remote URL.").action(async function(o){const a=k(o.name),r=k(o.type),i=k(o.physicalPath),s=k(o.gitUrl);if(!a&&!r&&!i&&!s)throw new N("Provide at least one field to update: --name, --type, --physical-path, or --git-url.");const l=I(this,t),c=x(o.id,"--id"),u=wl(await l.api.listVaults()).vaults.find(A=>A.id===c);if(!u)throw new ye(404,`Vault ${c} was not found in the latest vault snapshot.`);const h=Sa(await l.api.updateVault(c,{name:a??u.name,type:r??u.type,physicalPath:i??u.physicalPath,gitUrl:s??u.gitUrl??null}));if(l.outputJson){l.io.stdout(W({vault:h}));return}l.io.stdout(`Vault updated
|
|
260
|
+
${kl(h)}`)})}function lZ(e,t){const n=e.command("vault").description("Manage Hagi vaults and vault file browsing through generated backend APIs.");iZ(n,t),nZ(n,t),sZ(n,t),oZ(n,t);const o=n.command("files").description("Browse registered vault files and preview supported content.");aZ(o,t),rZ(o,t)}function cZ(e){return e.includes("--json")}function Ul(e=Us(),t=!1){const n=new Pl;return n.name("hagi").description("HagiCode CLI for project, proposal, Saga, vault, chat, HagiTask, and scheduled plan management, plus agent-facing capabilities.").showHelpAfterError().exitOverride(),n.configureOutput({writeOut:o=>{e.io.stdout(o)},writeErr:o=>{t||e.io.stderr(o)},getOutHelpWidth:()=>100,getErrHelpWidth:()=>100}),ig(n),uA(n,e),CA(n,e),lZ(n,e),Pg(n,e),Vp(n,e),xp(n,e),Q2(n,e),Wg(n,e),I2(n,e),n}function dZ(e,t,n){return e.exitCode===0||e.code==="commander.helpDisplayed"||e.code==="commander.version"?0:(n&&t.io.stderr(vs({exitCode:P.USAGE,message:e.message},{json:!0})),P.USAGE)}async function uZ(e=process.argv,t=Us()){const n=cZ(e),o=Ul(t,n);try{return await o.parseAsync([...e]),0}catch(a){if(a instanceof $l)return dZ(a,t,n);const r=Ns(a,{baseUrl:Hm()});return(a instanceof et||a instanceof H)&&a.reported||t.io.stderr(vs(r,{json:n})),r.exitCode}}Object.defineProperty(exports,"EXIT_CODES",{enumerable:!0,get:function(){return P}});Object.defineProperty(exports,"createCliApp",{enumerable:!0,get:function(){return Ul}});Object.defineProperty(exports,"runCli",{enumerable:!0,get:function(){return uZ}});
|