@skeet-framework/discord-utils
Version:
Skeet Framework Plugin - Discord Utils
9 lines (8 loc) • 50.5 kB
JavaScript
var y=Object.defineProperty;var s=(t,r)=>y(t,"name",{value:r,configurable:!0});import{REST as w,Routes as C}from"discord.js";async function m(t,r,n,o){try{let e=new w({version:"10"}).setToken(t),a=[{id:r,deny:68608,type:0},{id:o,allow:68608,type:1}];return await e.post(C.guildChannels(r),{body:{name:n,type:0,permission_overwrites:a}})}catch(e){throw console.log(`createTextChannel: ${e}`),new Error(`createTextChannel: ${e}`)}}s(m,"createTextChannel");import{REST as R,Routes as x}from"discord.js";var p=s(async(t,r,n)=>{try{return!!(await new R({version:"10"}).setToken(t).get(x.guildChannels(r))).find(c=>c.name===n)}catch(o){throw new Error(`isChannelExist: ${o}`)}},"isChannelExist");var T=s(async(t,r,n,o)=>{try{let e=n.replace(".","");if(await p(t,r,e))return null;let a=await m(t,r,n,o);return console.log({res:a}),a}catch(e){throw new Error(`genChannel: ${e}`)}},"createPrivateChannel");import{REST as $,Routes as E}from"discord.js";async function b(t,r){try{await new $({version:"10"}).setToken(t).delete(E.channel(r))}catch(n){throw console.log(`deleteChannel: ${n}`),new Error(`deleteChannel: ${n}`)}}s(b,"deleteChannel");import{REST as S,Routes as v}from"discord.js";async function g(t,r,n){try{return await new S({version:"10"}).setToken(t).post(v.channelMessages(r),{body:n})}catch(o){throw new Error(`messageChannel: ${o}`)}}s(g,"messageChannel");import{REST as M,Routes as k}from"discord.js";var U=s(async(t,r,n)=>{try{let o=new M({version:"10"}).setToken(t),e=k.guildMember(r,n);return(await o.get(e)).roles}catch(o){throw new Error(`getUserRoles: ${o}`)}},"getUserRoles");import{REST as P,Routes as D}from"discord.js";async function G(t,r,n,o){try{let e=new P({version:"10"}).setToken(t),a=D.interactionCallback(r,n);return await e.post(a,{headers:{"Content-Type":"application/json"},body:{type:5,data:{content:o||"Processing...",flags:64}}}),!0}catch(e){throw console.log(`deferResponse: ${e}`),new Error(`deferResponse: ${e}`)}}s(G,"deferResponse");import{REST as j,Routes as L}from"discord.js";async function I(t,r,n,o){try{let e=new j({version:"10"}).setToken(t),a=L.webhookMessage(r,n);return await e.patch(a,{headers:{"Content-Type":"application/json"},body:{type:6,...o}}),!0}catch(e){throw console.log(`updateResponse: ${e}`),new Error(`updateResponse: ${e}`)}}s(I,"updateResponse");import{REST as B,Routes as O}from"discord.js";async function A(t,r,n,o){try{let e=new B({version:"10"}).setToken(t),a=O.guildMemberRole(r,n,o);await e.delete(a),console.log(`Role ${o} removed from user ${n} in guild ${r}.`)}catch(e){throw console.log(`removeUserRole: ${e}`),new Error(`removeUserRole: ${e}`)}}s(A,"removeUserRole");import{REST as _,Routes as J}from"discord.js";async function K(t,r,n,o){try{let e=new _({version:"10"}).setToken(t),a=J.guildMemberRole(r,n,o);await e.put(a),console.log(`Role ${o} added to user ${n} in guild ${r}.`)}catch(e){throw console.log(`addRoleToUser: ${e}`),new Error(`addRoleToUser: ${e}`)}}s(K,"addRoleToUser");import{execSync as q}from"child_process";var u=4e3,Y=s(async(t,r,n,o="")=>{try{let e=h(r),a=r.split("/")[1],i=o==="ja"?"\u3092\u30EA\u30EA\u30FC\u30B9\u3057\u307E\u3057\u305F":"Released",c=`## ${a} ${e.tag} ${i} \u{1F389}
${e.whatsChanged}
`;c=z(c);for(let l of n)await g(t,l,{content:c}),await new Promise(f=>setTimeout(f,300));return c}catch(e){return console.log(`Error in getChangeLog: ${e}`),""}},"discordChangeLog");function z(t){if(t.length>u){let r=t.split(`
`);for(;r.join(`
`).length>u;)r.pop();return r.join(`
`)}return t}s(z,"trimContent");function h(t){let r=q(`gh release view --repo ${t}`).toString(),o=r.split("--")[0].trim().split(`
`).map(i=>i.trim()),e={},a="";return o.forEach(i=>{if(i.includes(":")){let[c,l]=i.split(":").map(d=>d.trim());a=c,l&&(l==="true"||l==="false"?e[c]=l==="true":e[c]=l)}else a&&(e[a]+=i)}),e.whatsChanged=r.split("--")[1].trim(),e}s(h,"getReleaseInfoAsJson");import{REST as F,Routes as H}from"discord.js";var Q=s(async(t,r,n=1e3,o)=>{try{let e=new F({version:"10"}).setToken(t),a=H.guildMembers(r),i=`limit=${n}`;o&&(i+=`&after=${o}`);let c=new URLSearchParams(i);return await e.get(a,{query:c})}catch(e){throw new Error(`getGuildMembers: ${e}`)}},"getGuildMembers");import{REST as V,Routes as W}from"discord.js";async function X(t,r,n,o){try{console.log("Started refreshing application (/) commands."),await new V({version:"10"}).setToken(t).put(W.applicationGuildCommands(r,n),{body:o}),console.log("Successfully reloaded application (/) commands.")}catch(e){throw console.error(`deployCommands: ${e}`),new Error(`deployCommands: ${e}`)}}s(X,"deployCommands");import{REST as Z,Routes as N}from"discord.js";async function ee(t,r,n,o){try{let e=new Z({version:"10"}).setToken(t),a=N.interactionCallback(r,n);return await e.post(a,{headers:{"Content-Type":"application/json"},body:o}),!0}catch(e){throw console.log(`interactionMessage: ${e}`),new Error(`interactionMessage: ${e}`)}}s(ee,"interactionMessage");import{InteractionResponseType as gr,InteractionType as dr,verifyKey as ur,ButtonStyleTypes as hr,MessageComponentTypes as fr}from"discord-interactions";import{ComponentType as wr,TextInputStyle as Cr,ButtonStyle as Rr,SlashCommandBuilder as xr}from"discord.js";export{Rr as ButtonStyle,hr as ButtonStyleTypes,wr as ComponentType,gr as InteractionResponseType,dr as InteractionType,fr as MessageComponentTypes,xr as SlashCommandBuilder,Cr as TextInputStyle,K as addRoleToUser,T as createPrivateChannel,m as createTextChannel,G as deferResponse,b as deleteChannel,X as deployCommands,Y as discordChangeLog,Q as getGuildMembers,h as getReleaseInfoAsJson,U as getUserRoles,ee as interactionMessage,p as isChannelExist,g as messageChannel,A as removeUserRole,I as updateResponse,ur as verifyKey};
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2xpYi9jcmVhdGVUZXh0Q2hhbm5lbC50cyIsICIuLi9zcmMvbGliL2lzQ2hhbm5lbEV4aXN0LnRzIiwgIi4uL3NyYy9saWIvY3JlYXRlUHJpdmF0ZUNoYW5uZWwudHMiLCAiLi4vc3JjL2xpYi9kZWxldGVDaGFubmVsLnRzIiwgIi4uL3NyYy9saWIvbWVzc2FnZUNoYW5uZWwudHMiLCAiLi4vc3JjL2xpYi9nZXRVc2VyUm9sZXMudHMiLCAiLi4vc3JjL2xpYi9kZWZlclJlc3BvbnNlLnRzIiwgIi4uL3NyYy9saWIvdXBkYXRlUmVzcG9uc2UudHMiLCAiLi4vc3JjL2xpYi9yZW1vdmVVc2VyUm9sZS50cyIsICIuLi9zcmMvbGliL2FkZFJvbGVUb1VzZXIudHMiLCAiLi4vc3JjL2xpYi9kaXNjb3JkQ2hhbmdlTG9nLnRzIiwgIi4uL3NyYy9saWIvZ2V0R3VpbGRNZW1iZXJzLnRzIiwgIi4uL3NyYy9saWIvZGVwbG95Q29tbWFuZHMudHMiLCAiLi4vc3JjL2xpYi9pbnRlcmFjdGlvbk1lc3NhZ2UudHMiLCAiLi4vc3JjL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBSRVNULCBSb3V0ZXMsIFRleHRDaGFubmVsIH0gZnJvbSAnZGlzY29yZC5qcydcblxuLyoqXG4gKiBDcmVhdGVzIGEgdGV4dCBjaGFubmVsIHdpdGhpbiBhIGd1aWxkIHdpdGggc3BlY2lmaWVkIHBlcm1pc3Npb25zLlxuICpcbiAqIEBwYXJhbSB0b2tlbiAtIFRoZSB0b2tlbiB1c2VkIGZvciBhdXRoZW50aWNhdGlvbiB3aXRoIHRoZSBEaXNjb3JkIEFQSS5cbiAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCBpbiB3aGljaCB0byBjcmVhdGUgdGhlIGNoYW5uZWwuXG4gKiBAcGFyYW0gY2hhbm5lbE5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgY2hhbm5lbCB0byBjcmVhdGUuXG4gKiBAcGFyYW0gbWVtYmVySWQgLSBUaGUgSUQgb2YgdGhlIG1lbWJlciBmb3Igd2hvbSB0aGUgY2hhbm5lbCBpcyBiZWluZyBjcmVhdGVkLlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIG5ld2x5IGNyZWF0ZWQgVGV4dENoYW5uZWwuXG4gKiBAdGhyb3dzIFdpbGwgdGhyb3cgYW4gZXJyb3IgaWYgdGhlcmUgaXMgYSBwcm9ibGVtIGNyZWF0aW5nIHRoZSBjaGFubmVsLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCB0b2tlbiA9ICd5b3VyX2Rpc2NvcmRfdG9rZW5faGVyZSc7XG4gKiBjb25zdCBndWlsZElkID0gJ3lvdXJfZ3VpbGRfaWRfaGVyZSc7XG4gKiBjb25zdCBjaGFubmVsTmFtZSA9ICd0ZXh0LWNoYW5uZWwnO1xuICogY29uc3QgbWVtYmVySWQgPSAneW91cl9tZW1iZXJfaWRfaGVyZSc7XG4gKlxuICogY29uc3QgY2hhbm5lbCA9IGF3YWl0IGNyZWF0ZVRleHRDaGFubmVsKHRva2VuLCBndWlsZElkLCBjaGFubmVsTmFtZSwgbWVtYmVySWQpXG4gKiBjb25zb2xlLmxvZyhgQ2hhbm5lbCBjcmVhdGVkIHdpdGggSUQ6ICR7Y2hhbm5lbC5pZH1gKVxuICogYGBgXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVUZXh0Q2hhbm5lbChcbiAgdG9rZW46IHN0cmluZyxcbiAgZ3VpbGRJZDogc3RyaW5nLFxuICBjaGFubmVsTmFtZTogc3RyaW5nLFxuICBtZW1iZXJJZDogc3RyaW5nLFxuKTogUHJvbWlzZTxUZXh0Q2hhbm5lbD4ge1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3QgPSBuZXcgUkVTVCh7IHZlcnNpb246ICcxMCcgfSkuc2V0VG9rZW4odG9rZW4pXG4gICAgY29uc3Qgb3ZlcndyaXRlcyA9IFtcbiAgICAgIHtcbiAgICAgICAgaWQ6IGd1aWxkSWQsXG4gICAgICAgIGRlbnk6IDY4NjA4LFxuICAgICAgICB0eXBlOiAwLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWQ6IG1lbWJlcklkLFxuICAgICAgICBhbGxvdzogNjg2MDgsXG4gICAgICAgIHR5cGU6IDEsXG4gICAgICB9LFxuICAgIF1cbiAgICBjb25zdCBjaGFubmVsID0gYXdhaXQgcmVzdC5wb3N0KFJvdXRlcy5ndWlsZENoYW5uZWxzKGd1aWxkSWQpLCB7XG4gICAgICBib2R5OiB7XG4gICAgICAgIG5hbWU6IGNoYW5uZWxOYW1lLFxuICAgICAgICB0eXBlOiAwLFxuICAgICAgICBwZXJtaXNzaW9uX292ZXJ3cml0ZXM6IG92ZXJ3cml0ZXMsXG4gICAgICB9LFxuICAgIH0pXG4gICAgcmV0dXJuIGNoYW5uZWwgYXMgVGV4dENoYW5uZWxcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmxvZyhgY3JlYXRlVGV4dENoYW5uZWw6ICR7ZXJyb3J9YClcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGNyZWF0ZVRleHRDaGFubmVsOiAke2Vycm9yfWApXG4gIH1cbn1cbiIsICJpbXBvcnQgeyBSRVNULCBSb3V0ZXMsIFRleHRDaGFubmVsIH0gZnJvbSAnZGlzY29yZC5qcydcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBjaGFubmVsIHdpdGggYSBzcGVjaWZpZWQgbmFtZSBleGlzdHMgd2l0aGluIGEgZ3VpbGQuXG4gKlxuICogQHBhcmFtIHRva2VuIC0gVGhlIHRva2VuIHVzZWQgZm9yIGF1dGhlbnRpY2F0aW9uIHdpdGggdGhlIERpc2NvcmQgQVBJLlxuICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGNoZWNrLlxuICogQHBhcmFtIGNoYW5uZWxOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGNoYW5uZWwgdG8gbG9vayBmb3IuXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBjaGFubmVsIGV4aXN0cy5cbiAqIEB0aHJvd3MgV2lsbCB0aHJvdyBhbiBlcnJvciBpZiB0aGUgUkVTVCBBUEkgY2FsbCBmYWlscy5cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgdG9rZW4gPSAneW91cl9kaXNjb3JkX3Rva2VuX2hlcmUnO1xuICogY29uc3QgZ3VpbGRJZCA9ICd5b3VyX2d1aWxkX2lkX2hlcmUnO1xuICogY29uc3QgY2hhbm5lbE5hbWUgPSAnZ2VuZXJhbCc7XG4gKlxuICogaXNDaGFubmVsRXhpc3QodG9rZW4sIGd1aWxkSWQsIGNoYW5uZWxOYW1lKVxuICogICAudGhlbihleGlzdHMgPT4gY29uc29sZS5sb2coZXhpc3RzID8gJ0NoYW5uZWwgZXhpc3RzLicgOiAnQ2hhbm5lbCBkb2VzIG5vdCBleGlzdC4nKSlcbiAqICAgLmNhdGNoKGVycm9yID0+IGNvbnNvbGUuZXJyb3IoYEVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCkpO1xuICovXG5leHBvcnQgY29uc3QgaXNDaGFubmVsRXhpc3QgPSBhc3luYyAoXG4gIHRva2VuOiBzdHJpbmcsXG4gIGd1aWxkSWQ6IHN0cmluZyxcbiAgY2hhbm5lbE5hbWU6IHN0cmluZyxcbik6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3QgPSBuZXcgUkVTVCh7IHZlcnNpb246ICcxMCcgfSkuc2V0VG9rZW4odG9rZW4pXG4gICAgY29uc3QgcmVzID0gYXdhaXQgcmVzdC5nZXQoUm91dGVzLmd1aWxkQ2hhbm5lbHMoZ3VpbGRJZCkpXG4gICAgY29uc3QgY2hhbm5lbHMgPSByZXMgYXMgVGV4dENoYW5uZWxbXVxuICAgIGNvbnN0IGNoYW5uZWwgPSBjaGFubmVscy5maW5kKChjKSA9PiBjLm5hbWUgPT09IGNoYW5uZWxOYW1lKVxuICAgIHJldHVybiAhIWNoYW5uZWxcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGlzQ2hhbm5lbEV4aXN0OiAke2Vycm9yfWApXG4gIH1cbn1cbiIsICJpbXBvcnQgeyBpc0NoYW5uZWxFeGlzdCB9IGZyb20gJy4vaXNDaGFubmVsRXhpc3QnXG5pbXBvcnQgeyBjcmVhdGVUZXh0Q2hhbm5lbCB9IGZyb20gJy4vY3JlYXRlVGV4dENoYW5uZWwnXG5cbi8qKlxuICogQ3JlYXRlcyBhIHByaXZhdGUgY2hhbm5lbCB3aXRoaW4gYSBndWlsZCBpZiBhIGNoYW5uZWwgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUgZG9lcyBub3QgYWxyZWFkeSBleGlzdC5cbiAqXG4gKiBAcGFyYW0gdG9rZW4gLSBUaGUgdG9rZW4gdXNlZCBmb3IgYXV0aGVudGljYXRpb24gd2l0aCB0aGUgRGlzY29yZCBBUEkuXG4gKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgaW4gd2hpY2ggdG8gY3JlYXRlIHRoZSBjaGFubmVsLlxuICogQHBhcmFtIGNoYW5uZWxOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGNoYW5uZWwgdG8gY3JlYXRlLlxuICogQHBhcmFtIG1lbWJlcklkIC0gVGhlIElEIG9mIHRoZSBtZW1iZXIgZm9yIHdob20gdGhlIGNoYW5uZWwgaXMgYmVpbmcgY3JlYXRlZC5cbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRoZSBuZXdseSBjcmVhdGVkIFRleHRDaGFubmVsLCBvciBudWxsIGlmIGEgY2hhbm5lbCB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZSBhbHJlYWR5IGV4aXN0cy5cbiAqIEB0aHJvd3MgV2lsbCB0aHJvdyBhbiBlcnJvciBpZiB0aGVyZSBpcyBhIHByb2JsZW0gY3JlYXRpbmcgdGhlIGNoYW5uZWwuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHRva2VuID0gJ3lvdXJfZGlzY29yZF90b2tlbl9oZXJlJztcbiAqIGNvbnN0IGd1aWxkSWQgPSAneW91cl9ndWlsZF9pZF9oZXJlJztcbiAqIGNvbnN0IGNoYW5uZWxOYW1lID0gJ3ByaXZhdGUtY2hhbm5lbCc7XG4gKiBjb25zdCBtZW1iZXJJZCA9ICd5b3VyX21lbWJlcl9pZF9oZXJlJztcbiAqXG4gKiBjb25zdCBjaGFubmVsID0gYXdhaXQgY3JlYXRlUHJpdmF0ZUNoYW5uZWwodG9rZW4sIGd1aWxkSWQsIGNoYW5uZWxOYW1lLCBtZW1iZXJJZClcbiAqXG4gKiBpZiAoY2hhbm5lbCkge1xuICogICBjb25zb2xlLmxvZyhgQ2hhbm5lbCBjcmVhdGVkIHdpdGggSUQ6ICR7Y2hhbm5lbC5pZH1gKTtcbiAqIH0gZWxzZSB7XG4gKiAgIGNvbnNvbGUubG9nKCdDaGFubmVsIGFscmVhZHkgZXhpc3RzLicpO1xuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVQcml2YXRlQ2hhbm5lbCA9IGFzeW5jIChcbiAgdG9rZW46IHN0cmluZyxcbiAgZ3VpbGRJZDogc3RyaW5nLFxuICBjaGFubmVsTmFtZTogc3RyaW5nLFxuICBtZW1iZXJJZDogc3RyaW5nLFxuKSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3Qgcm1Eb3RDaGFubmVsTmFtZSA9IGNoYW5uZWxOYW1lLnJlcGxhY2UoJy4nLCAnJylcbiAgICBpZiAoYXdhaXQgaXNDaGFubmVsRXhpc3QodG9rZW4sIGd1aWxkSWQsIHJtRG90Q2hhbm5lbE5hbWUpKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgICBjb25zdCByZXMgPSBhd2FpdCBjcmVhdGVUZXh0Q2hhbm5lbCh0b2tlbiwgZ3VpbGRJZCwgY2hhbm5lbE5hbWUsIG1lbWJlcklkKVxuICAgIGNvbnNvbGUubG9nKHsgcmVzIH0pXG5cbiAgICByZXR1cm4gcmVzXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBnZW5DaGFubmVsOiAke2Vycm9yfWApXG4gIH1cbn1cbiIsICJpbXBvcnQgeyBSRVNULCBSb3V0ZXMgfSBmcm9tICdkaXNjb3JkLmpzJ1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gdG9rZW4gLSBUaGUgdG9rZW4gdXNlZCBmb3IgYXV0aGVudGljYXRpb24gd2l0aCB0aGUgRGlzY29yZCBBUEkuXG4gKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHRvIGRlbGV0ZS5cbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHZvaWQgd2hlbiB0aGUgY2hhbm5lbCBpcyBzdWNjZXNzZnVsbHkgZGVsZXRlZC5cbiAqIEB0aHJvd3MgV2lsbCB0aHJvdyBhbiBlcnJvciBpZiB0aGVyZSBpcyBhIHByb2JsZW0gZGVsZXRpbmcgdGhlIGNoYW5uZWwuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHRva2VuID0gJ3lvdXJfZGlzY29yZF90b2tlbl9oZXJlJ1xuICogY29uc3QgY2hhbm5lbElkID0gJ3lvdXJfY2hhbm5lbF9pZF9oZXJlJ1xuICpcbiAqIGNvbnN0IHJ1biA9IGFzeW5jICgpID0+IHtcbiAqICAgdHJ5IHtcbiAqICAgICBhd2FpdCBkZWxldGVDaGFubmVsKHRva2VuLCBjaGFubmVsSWQpXG4gKiAgICAgY29uc29sZS5sb2coJ0NoYW5uZWwgZGVsZXRlZCBzdWNjZXNzZnVsbHkuJylcbiAqICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAqICAgICBjb25zb2xlLmVycm9yKGBFcnJvcjogJHtlcnJvci5tZXNzYWdlfWApXG4gKiAgIH1cbiAqIH1cbiAqXG4gKiBydW4oKVxuICogYGBgXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWxldGVDaGFubmVsKFxuICB0b2tlbjogc3RyaW5nLFxuICBjaGFubmVsSWQ6IHN0cmluZyxcbik6IFByb21pc2U8dm9pZD4ge1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3QgPSBuZXcgUkVTVCh7IHZlcnNpb246ICcxMCcgfSkuc2V0VG9rZW4odG9rZW4pXG4gICAgYXdhaXQgcmVzdC5kZWxldGUoUm91dGVzLmNoYW5uZWwoY2hhbm5lbElkKSlcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmxvZyhgZGVsZXRlQ2hhbm5lbDogJHtlcnJvcn1gKVxuICAgIHRocm93IG5ldyBFcnJvcihgZGVsZXRlQ2hhbm5lbDogJHtlcnJvcn1gKVxuICB9XG59XG4iLCAiaW1wb3J0IHsgTWVzc2FnZSwgUkVTVCwgUm91dGVzIH0gZnJvbSAnZGlzY29yZC5qcydcblxuLyoqXG4gKiBTZW5kcyBhIG1lc3NhZ2UgdG8gYSBzcGVjaWZpZWQgY2hhbm5lbCBpbiBEaXNjb3JkLlxuICpcbiAqIEBwYXJhbSB0b2tlbiAtIFRoZSB0b2tlbiB1c2VkIGZvciBhdXRoZW50aWNhdGlvbiB3aXRoIHRoZSBEaXNjb3JkIEFQSS5cbiAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgdG8gd2hpY2ggdGhlIG1lc3NhZ2Ugd2lsbCBiZSBzZW50LlxuICogQHBhcmFtIGJvZHkgLSBUaGUgY29udGVudCBvZiB0aGUgbWVzc2FnZSB0byBiZSBzZW50LlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHNlbnQgTWVzc2FnZSBvYmplY3QuXG4gKiBAdGhyb3dzIFdpbGwgdGhyb3cgYW4gZXJyb3IgaWYgdGhlcmUgaXMgYSBwcm9ibGVtIHNlbmRpbmcgdGhlIG1lc3NhZ2UuXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHRva2VuID0gJ3lvdXJfZGlzY29yZF90b2tlbl9oZXJlJztcbiAqIGNvbnN0IGNoYW5uZWxJZCA9ICd5b3VyX2NoYW5uZWxfaWRfaGVyZSc7XG4gKiBjb25zdCBib2R5ID0ge1xuICogICBjb250ZW50OiAnSGVsbG8sIHdvcmxkIScsXG4gKiB9O1xuICpcbiAqIGNvbnN0IHJ1biA9IGFzeW5jICgpID0+IHtcbiAqICAgdHJ5IHtcbiAqICAgICBjb25zdCBtZXNzYWdlID0gYXdhaXQgbWVzc2FnZUNoYW5uZWwodG9rZW4sIGNoYW5uZWxJZCwgYm9keSk7XG4gKiAgICAgY29uc29sZS5sb2coYE1lc3NhZ2Ugc2VudCB3aXRoIElEOiAke21lc3NhZ2UuaWR9YCk7XG4gKiAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gKiAgICAgY29uc29sZS5lcnJvcihgRXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAqICAgfVxuICogfVxuICpcbiAqIHJ1bigpO1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbWVzc2FnZUNoYW5uZWwoXG4gIHRva2VuOiBzdHJpbmcsXG4gIGNoYW5uZWxJZDogc3RyaW5nLFxuICBib2R5OiBhbnksXG4pIHtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXN0ID0gbmV3IFJFU1QoeyB2ZXJzaW9uOiAnMTAnIH0pLnNldFRva2VuKHRva2VuKVxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlc3QucG9zdChSb3V0ZXMuY2hhbm5lbE1lc3NhZ2VzKGNoYW5uZWxJZCksIHtcbiAgICAgIGJvZHksXG4gICAgfSlcbiAgICByZXR1cm4gcmVzdWx0IGFzIE1lc3NhZ2VcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYG1lc3NhZ2VDaGFubmVsOiAke2Vycm9yfWApXG4gIH1cbn1cbiIsICJpbXBvcnQgeyBSRVNULCBSb3V0ZXMgfSBmcm9tICdkaXNjb3JkLmpzJ1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgcm9sZXMgb2YgYSB1c2VyIGluIGEgc3BlY2lmaWMgZ3VpbGQuXG4gKlxuICogQHBhcmFtIHRva2VuIC0gVGhlIHRva2VuIHVzZWQgZm9yIGF1dGhlbnRpY2F0aW9uIHdpdGggdGhlIERpc2NvcmQgQVBJLlxuICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIGZyb20gd2hpY2ggdG8gcmV0cmlldmUgdGhlIHVzZXIncyByb2xlcy5cbiAqIEBwYXJhbSB1c2VySWQgLSBUaGUgSUQgb2YgdGhlIHVzZXIgd2hvc2Ugcm9sZXMgYXJlIHRvIGJlIHJldHJpZXZlZC5cbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGFuIGFycmF5IG9mIHJvbGUgSURzLlxuICogQHRocm93cyBXaWxsIHRocm93IGFuIGVycm9yIGlmIHRoZXJlIGlzIGEgcHJvYmxlbSByZXRyaWV2aW5nIHRoZSB1c2VyJ3Mgcm9sZXMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHRva2VuID0gJ3lvdXJfZGlzY29yZF90b2tlbl9oZXJlJztcbiAqIGNvbnN0IGd1aWxkSWQgPSAneW91cl9ndWlsZF9pZF9oZXJlJztcbiAqIGNvbnN0IHVzZXJJZCA9ICd5b3VyX3VzZXJfaWRfaGVyZSc7XG4gKlxuICogY29uc3QgcnVuID0gYXN5bmMgKCkgPT4ge1xuICogICB0cnkge1xuICogICAgIGNvbnN0IHJvbGVzID0gYXdhaXQgZ2V0VXNlclJvbGVzKHRva2VuLCBndWlsZElkLCB1c2VySWQpO1xuICogICAgIGNvbnNvbGUubG9nKCdVc2VyIHJvbGVzOicsIHJvbGVzKTtcbiAqICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAqICAgICBjb25zb2xlLmVycm9yKGBFcnJvcjogJHtlcnJvci5tZXNzYWdlfWApO1xuICogICB9XG4gKiB9XG4gKlxuICogcnVuKCk7XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRVc2VyUm9sZXMgPSBhc3luYyAoXG4gIHRva2VuOiBzdHJpbmcsXG4gIGd1aWxkSWQ6IHN0cmluZyxcbiAgdXNlcklkOiBzdHJpbmcsXG4pOiBQcm9taXNlPHN0cmluZ1tdPiA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdCA9IG5ldyBSRVNUKHsgdmVyc2lvbjogJzEwJyB9KS5zZXRUb2tlbih0b2tlbilcbiAgICBjb25zdCByb3V0ZSA9IFJvdXRlcy5ndWlsZE1lbWJlcihndWlsZElkLCB1c2VySWQpXG4gICAgY29uc3QgdXNlciA9IChhd2FpdCByZXN0LmdldChyb3V0ZSkpIGFzIHsgcm9sZXM6IHN0cmluZ1tdIH1cblxuICAgIHJldHVybiB1c2VyLnJvbGVzIGFzIHN0cmluZ1tdXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBnZXRVc2VyUm9sZXM6ICR7ZXJyb3J9YClcbiAgfVxufVxuIiwgImltcG9ydCB7IFJFU1QsIFJvdXRlcyB9IGZyb20gJ2Rpc2NvcmQuanMnXG5cbi8qKlxuICogRGVmZXJzIHRoZSByZXNwb25zZSB0byBhIERpc2NvcmQgaW50ZXJhY3Rpb24sIGluZGljYXRpbmcgdGhhdCBhIGZ1dHVyZSByZXNwb25zZSB3aWxsIGJlIHNlbnQuXG4gKlxuICogQHBhcmFtIHRva2VuIC0gVGhlIHRva2VuIHVzZWQgZm9yIGF1dGhlbnRpY2F0aW9uIHdpdGggdGhlIERpc2NvcmQgQVBJLlxuICogQHBhcmFtIGludGVyYWN0aW9uSWQgLSBUaGUgSUQgb2YgdGhlIGludGVyYWN0aW9uIHRvIGRlZmVyLlxuICogQHBhcmFtIGludGVyYWN0aW9uVG9rZW4gLSBUaGUgdG9rZW4gb2YgdGhlIGludGVyYWN0aW9uIHRvIGRlZmVyLlxuICogQHBhcmFtIGNvbnRlbnQgLSBPcHRpb25hbCBjb250ZW50IHRvIGluY2x1ZGUgaW4gdGhlIGRlZmVycmVkIHJlc3BvbnNlLiBEZWZhdWx0cyB0byAnUHJvY2Vzc2luZy4uLicuXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBkZWZlciBvcGVyYXRpb24gd2FzIHN1Y2Nlc3NmdWwuXG4gKiBAdGhyb3dzIFdpbGwgdGhyb3cgYW4gZXJyb3IgaWYgdGhlcmUgaXMgYSBwcm9ibGVtIGRlZmVycmluZyB0aGUgcmVzcG9uc2UuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHRva2VuID0gJ3lvdXJfZGlzY29yZF90b2tlbl9oZXJlJztcbiAqIGNvbnN0IGludGVyYWN0aW9uSWQgPSAneW91cl9pbnRlcmFjdGlvbl9pZF9oZXJlJztcbiAqIGNvbnN0IGludGVyYWN0aW9uVG9rZW4gPSAneW91cl9pbnRlcmFjdGlvbl90b2tlbl9oZXJlJztcbiAqIGNvbnN0IGNvbnRlbnQgPSAnUGxlYXNlIHdhaXQuLi4nO1xuICpcbiAqIGRlZmVyUmVzcG9uc2UodG9rZW4sIGludGVyYWN0aW9uSWQsIGludGVyYWN0aW9uVG9rZW4sIGNvbnRlbnQpXG4gKiAgIC50aGVuKHN1Y2Nlc3MgPT4ge1xuICogICAgIGlmIChzdWNjZXNzKSB7XG4gKiAgICAgICBjb25zb2xlLmxvZygnUmVzcG9uc2UgZGVmZXJyZWQgc3VjY2Vzc2Z1bGx5LicpO1xuICogICAgIH0gZWxzZSB7XG4gKiAgICAgICBjb25zb2xlLmxvZygnRmFpbGVkIHRvIGRlZmVyIHRoZSByZXNwb25zZS4nKTtcbiAqICAgICB9XG4gKiAgIH0pXG4gKiAgIC5jYXRjaChlcnJvciA9PiBjb25zb2xlLmVycm9yKGBFcnJvcjogJHtlcnJvci5tZXNzYWdlfWApKTtcbiAqIGBgYFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVmZXJSZXNwb25zZShcbiAgdG9rZW46IHN0cmluZyxcbiAgaW50ZXJhY3Rpb25JZDogc3RyaW5nLFxuICBpbnRlcmFjdGlvblRva2VuOiBzdHJpbmcsXG4gIGNvbnRlbnQ/OiBzdHJpbmcsXG4pIHtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXN0ID0gbmV3IFJFU1QoeyB2ZXJzaW9uOiAnMTAnIH0pLnNldFRva2VuKHRva2VuKVxuICAgIGNvbnN0IHJvdXRlID0gUm91dGVzLmludGVyYWN0aW9uQ2FsbGJhY2soaW50ZXJhY3Rpb25JZCwgaW50ZXJhY3Rpb25Ub2tlbilcbiAgICBhd2FpdCByZXN0LnBvc3Qocm91dGUsIHtcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgIH0sXG4gICAgICBib2R5OiB7XG4gICAgICAgIHR5cGU6IDUsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBjb250ZW50OiBjb250ZW50IHx8ICdQcm9jZXNzaW5nLi4uJyxcbiAgICAgICAgICBmbGFnczogNjQsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pXG4gICAgcmV0dXJuIHRydWVcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmxvZyhgZGVmZXJSZXNwb25zZTogJHtlcnJvcn1gKVxuICAgIHRocm93IG5ldyBFcnJvcihgZGVmZXJSZXNwb25zZTogJHtlcnJvcn1gKVxuICB9XG59XG4iLCAiaW1wb3J0IHsgUkVTVCwgUm91dGVzIH0gZnJvbSAnZGlzY29yZC5qcydcblxuLyoqXG4gKiBVcGRhdGVzIGEgcHJldmlvdXMgcmVzcG9uc2UgdG8gYSBEaXNjb3JkIGludGVyYWN0aW9uLlxuICpcbiAqIEBwYXJhbSB0b2tlbiAtIFRoZSB0b2tlbiB1c2VkIGZvciBhdXRoZW50aWNhdGlvbiB3aXRoIHRoZSBEaXNjb3JkIEFQSS5cbiAqIEBwYXJhbSBhcHBsaWNhdGlvbklkIC0gVGhlIGFwcGxpY2F0aW9uIElEIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW50ZXJhY3Rpb24uXG4gKiBAcGFyYW0gaW50ZXJhY3Rpb25Ub2tlbiAtIFRoZSB0b2tlbiBvZiB0aGUgaW50ZXJhY3Rpb24gdG8gdXBkYXRlLlxuICogQHBhcmFtIGRhdGEgLSBUaGUgdXBkYXRlZCBkYXRhIHRvIHNlbmQgYXMgdGhlIHJlc3BvbnNlLlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdHJ1ZSB3aGVuIHRoZSByZXNwb25zZSBpcyBzdWNjZXNzZnVsbHkgdXBkYXRlZC5cbiAqIEB0aHJvd3MgV2lsbCB0aHJvdyBhbiBlcnJvciBpZiB0aGVyZSBpcyBhIHByb2JsZW0gdXBkYXRpbmcgdGhlIHJlc3BvbnNlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCB0b2tlbiA9ICd5b3VyX2Rpc2NvcmRfdG9rZW5faGVyZSc7XG4gKiBjb25zdCBhcHBsaWNhdGlvbklkID0gJ3lvdXJfYXBwbGljYXRpb25faWRfaGVyZSc7XG4gKiBjb25zdCBpbnRlcmFjdGlvblRva2VuID0gJ3lvdXJfaW50ZXJhY3Rpb25fdG9rZW5faGVyZSc7XG4gKiBjb25zdCBkYXRhID0ge1xuICogICBjb250ZW50OiAnVXBkYXRlZCByZXNwb25zZSEnLFxuICogfTtcbiAqXG4gKiBjb25zdCBydW4gPSBhc3luYyAoKSA9PiB7XG4gKiAgIHRyeSB7XG4gKiAgICAgY29uc3Qgc3VjY2VzcyA9IGF3YWl0IHVwZGF0ZVJlc3BvbnNlKHRva2VuLCBhcHBsaWNhdGlvbklkLCBpbnRlcmFjdGlvblRva2VuLCBkYXRhKTtcbiAqICAgICBpZiAoc3VjY2Vzcykge1xuICogICAgICAgY29uc29sZS5sb2coJ1Jlc3BvbnNlIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5LicpO1xuICogICAgIH0gZWxzZSB7XG4gKiAgICAgICBjb25zb2xlLmxvZygnRmFpbGVkIHRvIHVwZGF0ZSB0aGUgcmVzcG9uc2UuJyk7XG4gKiAgICAgfVxuICogICB9IGNhdGNoIChlcnJvcikge1xuICogICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gKiAgIH1cbiAqIH1cbiAqXG4gKiBydW4oKTtcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVJlc3BvbnNlKFxuICB0b2tlbjogc3RyaW5nLFxuICBhcHBsaWNhdGlvbklkOiBzdHJpbmcsXG4gIGludGVyYWN0aW9uVG9rZW46IHN0cmluZyxcbiAgZGF0YTogb2JqZWN0LFxuKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdCA9IG5ldyBSRVNUKHsgdmVyc2lvbjogJzEwJyB9KS5zZXRUb2tlbih0b2tlbilcbiAgICBjb25zdCByb3V0ZSA9IFJvdXRlcy53ZWJob29rTWVzc2FnZShhcHBsaWNhdGlvbklkLCBpbnRlcmFjdGlvblRva2VuKVxuICAgIGF3YWl0IHJlc3QucGF0Y2gocm91dGUsIHtcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgIH0sXG4gICAgICBib2R5OiB7XG4gICAgICAgIHR5cGU6IDYsXG4gICAgICAgIC4uLmRhdGEsXG4gICAgICB9LFxuICAgIH0pXG4gICAgcmV0dXJuIHRydWVcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmxvZyhgdXBkYXRlUmVzcG9uc2U6ICR7ZXJyb3J9YClcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHVwZGF0ZVJlc3BvbnNlOiAke2Vycm9yfWApXG4gIH1cbn1cbiIsICJpbXBvcnQgeyBSRVNULCBSb3V0ZXMgfSBmcm9tICdkaXNjb3JkLmpzJ1xuXG4vKipcbiAqIFJlbW92ZXMgYSByb2xlIGZyb20gYSB1c2VyIHdpdGhpbiBhIHNwZWNpZmljIGd1aWxkLlxuICpcbiAqIEBwYXJhbSB0b2tlbiAtIFRoZSB0b2tlbiB1c2VkIGZvciBhdXRoZW50aWNhdGlvbiB3aXRoIHRoZSBEaXNjb3JkIEFQSS5cbiAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCBmcm9tIHdoaWNoIHRoZSByb2xlIHdpbGwgYmUgcmVtb3ZlZC5cbiAqIEBwYXJhbSB1c2VySWQgLSBUaGUgSUQgb2YgdGhlIHVzZXIgZnJvbSB3aG9tIHRoZSByb2xlIHdpbGwgYmUgcmVtb3ZlZC5cbiAqIEBwYXJhbSByb2xlSWQgLSBUaGUgSUQgb2YgdGhlIHJvbGUgdG8gYmUgcmVtb3ZlZC5cbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHZvaWQgd2hlbiB0aGUgcm9sZSBpcyBzdWNjZXNzZnVsbHkgcmVtb3ZlZC5cbiAqIEB0aHJvd3MgV2lsbCB0aHJvdyBhbiBlcnJvciBpZiB0aGVyZSBpcyBhIHByb2JsZW0gcmVtb3ZpbmcgdGhlIHJvbGUuXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHRva2VuID0gJ3lvdXJfZGlzY29yZF90b2tlbl9oZXJlJztcbiAqIGNvbnN0IGd1aWxkSWQgPSAneW91cl9ndWlsZF9pZF9oZXJlJztcbiAqIGNvbnN0IHVzZXJJZCA9ICd5b3VyX3VzZXJfaWRfaGVyZSc7XG4gKiBjb25zdCByb2xlSWQgPSAneW91cl9yb2xlX2lkX2hlcmUnO1xuICpcbiAqIGNvbnN0IHJ1biA9IGFzeW5jICgpID0+IHtcbiAqICAgdHJ5IHtcbiAqICAgICBhd2FpdCByZW1vdmVVc2VyUm9sZSh0b2tlbiwgZ3VpbGRJZCwgdXNlcklkLCByb2xlSWQpO1xuICogICAgIGNvbnNvbGUubG9nKCdSb2xlIHJlbW92ZWQgc3VjY2Vzc2Z1bGx5LicpO1xuICogICB9IGNhdGNoIChlcnJvcikge1xuICogICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gKiAgIH1cbiAqIH1cbiAqXG4gKiBydW4oKTtcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbW92ZVVzZXJSb2xlKFxuICB0b2tlbjogc3RyaW5nLFxuICBndWlsZElkOiBzdHJpbmcsXG4gIHVzZXJJZDogc3RyaW5nLFxuICByb2xlSWQ6IHN0cmluZyxcbikge1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3QgPSBuZXcgUkVTVCh7IHZlcnNpb246ICcxMCcgfSkuc2V0VG9rZW4odG9rZW4pXG4gICAgY29uc3Qgcm91dGUgPSBSb3V0ZXMuZ3VpbGRNZW1iZXJSb2xlKGd1aWxkSWQsIHVzZXJJZCwgcm9sZUlkKVxuICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJvdXRlKVxuICAgIGNvbnNvbGUubG9nKFxuICAgICAgYFJvbGUgJHtyb2xlSWR9IHJlbW92ZWQgZnJvbSB1c2VyICR7dXNlcklkfSBpbiBndWlsZCAke2d1aWxkSWR9LmAsXG4gICAgKVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUubG9nKGByZW1vdmVVc2VyUm9sZTogJHtlcnJvcn1gKVxuICAgIHRocm93IG5ldyBFcnJvcihgcmVtb3ZlVXNlclJvbGU6ICR7ZXJyb3J9YClcbiAgfVxufVxuIiwgImltcG9ydCB7IFJFU1QsIFJvdXRlcyB9IGZyb20gJ2Rpc2NvcmQuanMnXG5cbi8qKlxuICogQWRkcyBhIHNwZWNpZmllZCByb2xlIHRvIGEgdXNlciB3aXRoaW4gYSBzcGVjaWZpYyBndWlsZC5cbiAqXG4gKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgd2hlcmUgdGhlIHVzZXIgYW5kIHJvbGUgYXJlIGxvY2F0ZWQuXG4gKiBAcGFyYW0gdXNlcklkIC0gVGhlIElEIG9mIHRoZSB1c2VyIHRvIHdob20gdGhlIHJvbGUgd2lsbCBiZSBhZGRlZC5cbiAqIEBwYXJhbSByb2xlSWQgLSBUaGUgSUQgb2YgdGhlIHJvbGUgdG8gYmUgYWRkZWQgdG8gdGhlIHVzZXIuXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB2b2lkIHdoZW4gdGhlIHJvbGUgaXMgc3VjY2Vzc2Z1bGx5IGFkZGVkLlxuICogQHRocm93cyBXaWxsIHRocm93IGFuIGVycm9yIGlmIHRoZXJlIGlzIGEgcHJvYmxlbSBhZGRpbmcgdGhlIHJvbGUuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHRva2VuID0gJ3lvdXJfZGlzY29yZF90b2tlbl9oZXJlJztcbiAqIGNvbnN0IGd1aWxkSWQgPSAneW91cl9ndWlsZF9pZF9oZXJlJztcbiAqIGNvbnN0IHVzZXJJZCA9ICd5b3VyX3VzZXJfaWRfaGVyZSc7XG4gKiBjb25zdCByb2xlSWQgPSAneW91cl9yb2xlX2lkX2hlcmUnO1xuICpcbiAqIGNvbnN0IHJ1biA9IGFzeW5jICgpID0+IHtcbiAqICAgdHJ5IHtcbiAqICAgICBhd2FpdCBhZGRSb2xlVG9Vc2VyKHRva2VuLCBndWlsZElkLCB1c2VySWQsIHJvbGVJZCk7XG4gKiAgICAgY29uc29sZS5sb2coJ1JvbGUgYWRkZWQgc3VjY2Vzc2Z1bGx5LicpO1xuICogICB9IGNhdGNoIChlcnJvcikge1xuICogICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gKiAgIH1cbiAqIH1cbiAqXG4gKiBydW4oKTtcbiAqIGBgYFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWRkUm9sZVRvVXNlcihcbiAgdG9rZW46IHN0cmluZyxcbiAgZ3VpbGRJZDogc3RyaW5nLFxuICB1c2VySWQ6IHN0cmluZyxcbiAgcm9sZUlkOiBzdHJpbmcsXG4pIHtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXN0ID0gbmV3IFJFU1QoeyB2ZXJzaW9uOiAnMTAnIH0pLnNldFRva2VuKHRva2VuKVxuICAgIGNvbnN0IHJvdXRlID0gUm91dGVzLmd1aWxkTWVtYmVyUm9sZShndWlsZElkLCB1c2VySWQsIHJvbGVJZClcbiAgICBhd2FpdCByZXN0LnB1dChyb3V0ZSlcbiAgICBjb25zb2xlLmxvZyhgUm9sZSAke3JvbGVJZH0gYWRkZWQgdG8gdXNlciAke3VzZXJJZH0gaW4gZ3VpbGQgJHtndWlsZElkfS5gKVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUubG9nKGBhZGRSb2xlVG9Vc2VyOiAke2Vycm9yfWApXG4gICAgdGhyb3cgbmV3IEVycm9yKGBhZGRSb2xlVG9Vc2VyOiAke2Vycm9yfWApXG4gIH1cbn1cbiIsICJpbXBvcnQgeyBleGVjU3luYyB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnXG5pbXBvcnQgeyBtZXNzYWdlQ2hhbm5lbCB9IGZyb20gJy4vbWVzc2FnZUNoYW5uZWwnXG5cbmNvbnN0IERJU0NPUkRfQk9EWV9MSU1JVCA9IDQwMDBcblxuZXhwb3J0IGNvbnN0IGRpc2NvcmRDaGFuZ2VMb2cgPSBhc3luYyAoXG4gIGRpc2NvcmRUb2tlbjogc3RyaW5nLFxuICByZXBvTmFtZTogc3RyaW5nLFxuICBjaGFubmVsSWRzOiBzdHJpbmdbXSxcbiAgbGFuZyA9ICcnLFxuKSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgbG9nID0gZ2V0UmVsZWFzZUluZm9Bc0pzb24ocmVwb05hbWUpXG4gICAgY29uc3QgcmVwbyA9IHJlcG9OYW1lLnNwbGl0KCcvJylbMV1cbiAgICBjb25zdCBoZWFkTGluZSA9IGxhbmcgPT09ICdqYScgPyAnXHUzMDkyXHUzMEVBXHUzMEVBXHUzMEZDXHUzMEI5XHUzMDU3XHUzMDdFXHUzMDU3XHUzMDVGJyA6ICdSZWxlYXNlZCdcbiAgICBsZXQgY29udGVudCA9IGAjIyAke3JlcG99ICR7bG9nLnRhZ30gJHtoZWFkTGluZX0gXHVEODNDXHVERjg5XG4gICAgXG4ke2xvZy53aGF0c0NoYW5nZWR9XG5gXG4gICAgY29udGVudCA9IHRyaW1Db250ZW50KGNvbnRlbnQpXG5cbiAgICBmb3IgKGNvbnN0IGNoYW5uZWxJZCBvZiBjaGFubmVsSWRzKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0ge1xuICAgICAgICBjb250ZW50LFxuICAgICAgfVxuICAgICAgYXdhaXQgbWVzc2FnZUNoYW5uZWwoZGlzY29yZFRva2VuLCBjaGFubmVsSWQsIG1lc3NhZ2UpXG4gICAgICAvLyBzbGVlcCBmb3IgMC4zIHNlY29uZCB0byBhdm9pZCByYXRlIGxpbWl0aW5nXG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCAzMDApKVxuICAgIH1cbiAgICByZXR1cm4gY29udGVudFxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUubG9nKGBFcnJvciBpbiBnZXRDaGFuZ2VMb2c6ICR7ZXJyb3J9YClcbiAgICByZXR1cm4gJydcbiAgfVxufVxuXG5mdW5jdGlvbiB0cmltQ29udGVudChjb250ZW50OiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoY29udGVudC5sZW5ndGggPiBESVNDT1JEX0JPRFlfTElNSVQpIHtcbiAgICBjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoJ1xcbicpXG4gICAgd2hpbGUgKGxpbmVzLmpvaW4oJ1xcbicpLmxlbmd0aCA+IERJU0NPUkRfQk9EWV9MSU1JVCkge1xuICAgICAgbGluZXMucG9wKClcbiAgICB9XG4gICAgcmV0dXJuIGxpbmVzLmpvaW4oJ1xcbicpXG4gIH1cbiAgcmV0dXJuIGNvbnRlbnRcbn1cblxuZXhwb3J0IHR5cGUgUmVsZWFzZUluZm8gPSB7XG4gIHRhZzogc3RyaW5nXG4gIGRyYWZ0OiBib29sZWFuXG4gIHByZXJlbGVhc2U6IGJvb2xlYW5cbiAgYXV0aG9yOiBzdHJpbmdcbiAgY3JlYXRlZDogc3RyaW5nXG4gIHB1Ymxpc2hlZDogc3RyaW5nXG4gIHVybDogc3RyaW5nXG4gIHdoYXRzQ2hhbmdlZDogc3RyaW5nXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZWxlYXNlSW5mb0FzSnNvbihyZXBvTmFtZTogc3RyaW5nKTogUmVsZWFzZUluZm8ge1xuICBjb25zdCBsb2cgPSBleGVjU3luYyhgZ2ggcmVsZWFzZSB2aWV3IC0tcmVwbyAke3JlcG9OYW1lfWApLnRvU3RyaW5nKClcbiAgY29uc3QgaGVhZGVyID0gbG9nLnNwbGl0KCctLScpWzBdLnRyaW0oKVxuICBjb25zdCBoZWFkZXJMaW5lcyA9IGhlYWRlci5zcGxpdCgnXFxuJykubWFwKChsaW5lKSA9PiBsaW5lLnRyaW0oKSlcblxuICBjb25zdCBqc29uT3V0cHV0OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB8IGJvb2xlYW4gfSA9IHt9XG5cbiAgbGV0IGN1cnJlbnRLZXkgPSAnJ1xuICBoZWFkZXJMaW5lcy5mb3JFYWNoKChsaW5lKSA9PiB7XG4gICAgaWYgKGxpbmUuaW5jbHVkZXMoJzonKSkge1xuICAgICAgY29uc3QgW2tleSwgdmFsdWVdID0gbGluZS5zcGxpdCgnOicpLm1hcCgoaXRlbSkgPT4gaXRlbS50cmltKCkpXG4gICAgICBjdXJyZW50S2V5ID0ga2V5XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSAndHJ1ZScgfHwgdmFsdWUgPT09ICdmYWxzZScpIHtcbiAgICAgICAgICBqc29uT3V0cHV0W2tleV0gPSB2YWx1ZSA9PT0gJ3RydWUnXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAganNvbk91dHB1dFtrZXldID0gdmFsdWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY3VycmVudEtleSkge1xuICAgICAganNvbk91dHB1dFtjdXJyZW50S2V5XSArPSBsaW5lXG4gICAgfVxuICB9KVxuICBqc29uT3V0cHV0LndoYXRzQ2hhbmdlZCA9IGxvZy5zcGxpdCgnLS0nKVsxXS50cmltKClcbiAgcmV0dXJuIGpzb25PdXRwdXQgYXMgUmVsZWFzZUluZm9cbn1cbiIsICJpbXBvcnQgeyBSRVNULCBSb3V0ZXMgfSBmcm9tICdkaXNjb3JkLmpzJ1xuaW1wb3J0IHsgR3VpbGRNZW1iZXIgfSBmcm9tICdzcmMvdHlwZXMvRGlzY29yZFVzZXInXG5cbi8qKlxuICogUmV0cmlldmVzIGEgbGlzdCBvZiBndWlsZCBtZW1iZXJzIGZyb20gYSBEaXNjb3JkIHNlcnZlci5cbiAqXG4gKiBAcGFyYW0gdG9rZW4gLSBUaGUgYXV0aG9yaXphdGlvbiB0b2tlbiBmb3IgdGhlIERpc2NvcmQgQVBJLlxuICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIERpc2NvcmQgZ3VpbGQgKHNlcnZlcikuXG4gKiBAcGFyYW0gbGltaXQgLSBUaGUgbWF4aW11bSBudW1iZXIgb2YgbWVtYmVycyB0byByZXRyaWV2ZSAoZGVmYXVsdCBpcyAxMDAwKS5cbiAqIEBwYXJhbSBhZnRlciAtIFRoZSBJRCBvZiB0aGUgbGFzdCBtZW1iZXIgcmVjZWl2ZWQgaW4gdGhlIHByZXZpb3VzIHJlcXVlc3QsIHVzZWQgZm9yIHBhZ2luYXRpb24uXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBgR3VpbGRNZW1iZXJgIG9iamVjdHMgcmVwcmVzZW50aW5nIHRoZSBtZW1iZXJzIG9mIHRoZSBndWlsZC5cbiAqIEB0aHJvd3MgV2lsbCB0aHJvdyBhbiBlcnJvciBpZiB0aGUgUkVTVCBjYWxsIGZhaWxzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgZG90ZW52IGZyb20gJ2RvdGVudidcbiAqIGltcG9ydCB7IGdldEd1aWxkTWVtYmVycyB9IGZyb20gJy4vcGF0aC10by10aGlzLWZpbGUnXG4gKiBkb3RlbnYuY29uZmlnKClcbiAqXG4gKiBjb25zdCB0b2tlbiA9IHByb2Nlc3MuZW52LkRJU0NPUkRfVE9LRU4gYXMgc3RyaW5nXG4gKiBjb25zdCBndWlsZElkID0gcHJvY2Vzcy5lbnYuRElTQ09SRF9HVUlMRF9JRCBhcyBzdHJpbmdcbiAqXG4gKiBjb25zdCBydW4gPSBhc3luYyAoKSA9PiB7XG4gKiAgIHRyeSB7XG4gKiAgICAgY29uc3QgbWVtYmVycyA9IGF3YWl0IGdldEd1aWxkTWVtYmVycyh0b2tlbiwgZ3VpbGRJZClcbiAqICAgICBjb25zb2xlLmxvZyhgUmV0cmlldmVkICR7bWVtYmVycy5sZW5ndGh9IG1lbWJlcnNgKVxuICogICB9IGNhdGNoIChlcnJvcikge1xuICogICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXG4gKiAgIH1cbiAqIH1cbiAqXG4gKiB2b2lkIHJ1bigpXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEd1aWxkTWVtYmVycyA9IGFzeW5jIChcbiAgdG9rZW46IHN0cmluZyxcbiAgZ3VpbGRJZDogc3RyaW5nLFxuICBsaW1pdCA9IDEwMDAsXG4gIGFmdGVyPzogc3RyaW5nLFxuKTogUHJvbWlzZTxHdWlsZE1lbWJlcltdPiA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdCA9IG5ldyBSRVNUKHsgdmVyc2lvbjogJzEwJyB9KS5zZXRUb2tlbih0b2tlbilcbiAgICBjb25zdCByb3V0ZSA9IFJvdXRlcy5ndWlsZE1lbWJlcnMoZ3VpbGRJZClcbiAgICBsZXQgcGFyYW1zU3RyaW5nID0gYGxpbWl0PSR7bGltaXR9YFxuICAgIGlmIChhZnRlcikge1xuICAgICAgcGFyYW1zU3RyaW5nICs9IGAmYWZ0ZXI9JHthZnRlcn1gXG4gICAgfVxuICAgIGNvbnN0IHF1ZXJ5ID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhwYXJhbXNTdHJpbmcpXG4gICAgY29uc3QgdXNlcnMgPSAoYXdhaXQgcmVzdC5nZXQocm91dGUsIHsgcXVlcnkgfSkpIGFzIEd1aWxkTWVtYmVyW11cblxuICAgIHJldHVybiB1c2Vyc1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IG5ldyBFcnJvcihgZ2V0R3VpbGRNZW1iZXJzOiAke2Vycm9yfWApXG4gIH1cbn1cbiIsICJpbXBvcnQgeyBSRVNULCBSb3V0ZXMgfSBmcm9tICdkaXNjb3JkLmpzJ1xuaW1wb3J0IHsgU2xhc2hDb21tYW5kQnVpbGRlciB9IGZyb20gJ2Rpc2NvcmQuanMnXG4vKipcbiAqIERlcGxveXMgYXBwbGljYXRpb24gY29tbWFuZHMgdG8gYSBzcGVjaWZpYyBndWlsZC5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGF1dGhlbnRpY2F0ZXMgd2l0aCB0aGUgRGlzY29yZCBBUEkgdXNpbmcgdGhlIHByb3ZpZGVkIHRva2VuLFxuICogdGhlbiBkZXBsb3lzIHRoZSBzcGVjaWZpZWQgY29tbWFuZHMgdG8gdGhlIGdpdmVuIGd1aWxkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0b2tlbiAtIFRoZSB0b2tlbiB1c2VkIGZvciBhdXRoZW50aWNhdGlvbiB3aXRoIHRoZSBEaXNjb3JkIEFQSS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkaXNjb3JkQ2xpZW50SWQgLSBUaGUgRGlzY29yZCBjbGllbnQgSUQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgd2hlcmUgY29tbWFuZHMgYXJlIGJlaW5nIGRlcGxveWVkLlxuICogQHBhcmFtIHsgU2xhc2hDb21tYW5kQnVpbGRlcltdfSBjb21tYW5kcyAtIEFuIGFycmF5IG9mICBTbGFzaENvbW1hbmRCdWlsZGVyIHJlcHJlc2VudGluZyB0aGUgY29tbWFuZHMgdG8gYmUgZGVwbG95ZWQuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiBjb21tYW5kcyBhcmUgc3VjY2Vzc2Z1bGx5IGRlcGxveWVkLlxuICogQHRocm93cyB7RXJyb3J9IFdpbGwgdGhyb3cgYW4gZXJyb3IgaWYgdGhlcmUgaXMgYSBwcm9ibGVtIHdpdGggdGhlIGRlcGxveW1lbnQuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IGNvbW1hbmRzIH0gZnJvbSBcIi4vY29tbWFuZHNcIjtcbiAqIGltcG9ydCB7IGRlcGxveUNvbW1hbmRzIH0gZnJvbSBcIkBza2VldC1mcmFtZXdvcmsvZGlzY29yZC11dGlsc1wiO1xuICogaW1wb3J0IHsgRElTQ09SRF9BUFBMSUNBVElPTl9JRCwgRElTQ09SRF9HVUlMRF9JRCB9IGZyb20gXCIuLi9jb25maWdcIjtcbiAqXG4gKiBjb25zdCBjb21tYW5kc0RhdGEgPSBPYmplY3QudmFsdWVzKGNvbW1hbmRzKS5tYXAoKGNvbW1hbmQpID0+IGNvbW1hbmQuZGF0YSk7XG4gKlxuICogY29uc3QgcnVuID0gYXN5bmMgKCkgPT4ge1xuICogICBjb25zdCB0b2tlbiA9IHByb2Nlc3MuYXJndlsyXSB8fCAnJztcbiAqICAgdHJ5IHtcbiAqICAgICBhd2FpdCBkZXBsb3lDb21tYW5kcyh0b2tlbiwgRElTQ09SRF9BUFBMSUNBVElPTl9JRCwgRElTQ09SRF9HVUlMRF9JRCwgY29tbWFuZHNEYXRhKTtcbiAqICAgICBjb25zb2xlLmxvZygnQ29tbWFuZHMgZGVwbG95ZWQgc3VjY2Vzc2Z1bGx5LicpO1xuICogICB9IGNhdGNoIChlcnJvcikge1xuICogICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIGRlcGxveWluZyBjb21tYW5kczogJHtlcnJvcn1gKTtcbiAqICAgfVxuICogfTtcbiAqXG4gKiBydW4oKVxuICogICAudGhlbigoKSA9PiBjb25zb2xlLmxvZygnRG9uZScpKVxuICogICAuY2F0Y2goKGVycm9yKSA9PiBjb25zb2xlLmVycm9yKGVycm9yKSk7XG4gKiBgYGBcbiAqL1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVwbG95Q29tbWFuZHMoXG4gIHRva2VuOiBzdHJpbmcsXG4gIGRpc2NvcmRDbGllbnRJZDogc3RyaW5nLFxuICBndWlsZElkOiBzdHJpbmcsXG4gIGNvbW1hbmRzOiBPbWl0PFNsYXNoQ29tbWFuZEJ1aWxkZXIsICdhZGRTdWJjb21tYW5kJyB8ICdhZGRTdWJjb21tYW5kR3JvdXAnPltdLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIHRyeSB7XG4gICAgY29uc29sZS5sb2coJ1N0YXJ0ZWQgcmVmcmVzaGluZyBhcHBsaWNhdGlvbiAoLykgY29tbWFuZHMuJylcbiAgICBjb25zdCByZXN0ID0gbmV3IFJFU1QoeyB2ZXJzaW9uOiAnMTAnIH0pLnNldFRva2VuKHRva2VuKVxuICAgIGF3YWl0IHJlc3QucHV0KFJvdXRlcy5hcHBsaWNhdGlvbkd1aWxkQ29tbWFuZHMoZGlzY29yZENsaWVudElkLCBndWlsZElkKSwge1xuICAgICAgYm9keTogY29tbWFuZHMsXG4gICAgfSlcblxuICAgIGNvbnNvbGUubG9nKCdTdWNjZXNzZnVsbHkgcmVsb2FkZWQgYXBwbGljYXRpb24gKC8pIGNvbW1hbmRzLicpXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihgZGVwbG95Q29tbWFuZHM6ICR7ZXJyb3J9YClcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGRlcGxveUNvbW1hbmRzOiAke2Vycm9yfWApXG4gIH1cbn1cbiIsICJpbXBvcnQgeyBSRVNULCBSb3V0ZXMgfSBmcm9tICdkaXNjb3JkLmpzJ1xuLyoqXG4gKiBTZW5kcyBhIHJlc3BvbnNlIHRvIGEgRGlzY29yZCBpbnRlcmFjdGlvbi5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdG9rZW4gLSBUaGUgYm90J3MgdG9rZW4gdXNlZCBmb3IgYXV0aGVudGljYXRpb24gd2l0aCB0aGUgRGlzY29yZCBBUEkuXG4gKiBAcGFyYW0ge3N0cmluZ30gaW50ZXJhY3Rpb25JZCAtIFRoZSBJRCBvZiB0aGUgaW50ZXJhY3Rpb24gdG8gcmVzcG9uZCB0by5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnRlcmFjdGlvblRva2VuIC0gVGhlIHRva2VuIHNwZWNpZmljIHRvIHRoZSBpbnRlcmFjdGlvbi5cbiAqIEBwYXJhbSB7YW55fSBib2R5IC0gVGhlIGNvbnRlbnQgb2YgdGhlIHJlc3BvbnNlIG1lc3NhZ2UuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdHJ1ZSBpZiB0aGUgcmVzcG9uc2UgaXMgc2VudCBzdWNjZXNzZnVsbHkuXG4gKiBAdGhyb3dzIHtFcnJvcn0gV2lsbCB0aHJvdyBhbiBlcnJvciBpZiB0aGVyZSBpcyBhIHByb2JsZW0gc2VuZGluZyB0aGUgcmVzcG9uc2UuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYFxuICogY29uc3QgdG9rZW4gPSAneW91cl9kaXNjb3JkX3Rva2VuX2hlcmUnXG4gKiBjb25zdCBpbnRlcmFjdGlvbklkID0gJ3lvdXJfaW50ZXJhY3Rpb25faWRfaGVyZSdcbiAqIGNvbnN0IGludGVyYWN0aW9uVG9rZW4gPSAneW91cl9pbnRlcmFjdGlvbl90b2tlbl9oZXJlJ1xuICogY29uc3QgYm9keSA9IHtcbiAqICB0eXBlOiA0LFxuICogIGRhdGE6IHtcbiAqICAgY29udGVudDogJ0hlbGxvLCB3b3JsZCEnLFxuICogIH0sXG4gKiB9XG4gKiBjb25zdCByZXN1bHQgPSBhd2FpdCBpbnRlcmFjdGlvbk1lc3NhZ2UodG9rZW4sIGludGVyYWN0aW9uSWQsIGludGVyYWN0aW9uVG9rZW4sIGJvZHkpXG4gKiBjb25zb2xlLmxvZyhyZXN1bHQpOyAvLyB0cnVlXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGludGVyYWN0aW9uTWVzc2FnZShcbiAgdG9rZW46IHN0cmluZyxcbiAgaW50ZXJhY3Rpb25JZDogc3RyaW5nLFxuICBpbnRlcmFjdGlvblRva2VuOiBzdHJpbmcsXG4gIGJvZHk6IGFueSxcbikge1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3QgPSBuZXcgUkVTVCh7IHZlcnNpb246ICcxMCcgfSkuc2V0VG9rZW4odG9rZW4pXG4gICAgY29uc3Qgcm91dGUgPSBSb3V0ZXMuaW50ZXJhY3Rpb25DYWxsYmFjayhpbnRlcmFjdGlvbklkLCBpbnRlcmFjdGlvblRva2VuKVxuXG4gICAgYXdhaXQgcmVzdC5wb3N0KHJvdXRlLCB7XG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICB9LFxuICAgICAgYm9keSxcbiAgICB9KVxuICAgIHJldHVybiB0cnVlXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5sb2coYGludGVyYWN0aW9uTWVzc2FnZTogJHtlcnJvcn1gKVxuICAgIHRocm93IG5ldyBFcnJvcihgaW50ZXJhY3Rpb25NZXNzYWdlOiAke2Vycm9yfWApXG4gIH1cbn1cbiIsICJleHBvcnQgeyBjcmVhdGVUZXh0Q2hhbm5lbCB9IGZyb20gJy4vbGliL2NyZWF0ZVRleHRDaGFubmVsJ1xuZXhwb3J0IHsgY3JlYXRlUHJpdmF0ZUNoYW5uZWwgfSBmcm9tICcuL2xpYi9jcmVhdGVQcml2YXRlQ2hhbm5lbCdcbmV4cG9ydCB7IGlzQ2hhbm5lbEV4aXN0IH0gZnJvbSAnLi9saWIvaXNDaGFubmVsRXhpc3QnXG5leHBvcnQgeyBkZWxldGVDaGFubmVsIH0gZnJvbSAnLi9saWIvZGVsZXRlQ2hhbm5lbCdcbmV4cG9ydCB7IG1lc3NhZ2VDaGFubmVsIH0gZnJvbSAnLi9saWIvbWVzc2FnZUNoYW5uZWwnXG5leHBvcnQgeyBnZXRVc2VyUm9sZXMgfSBmcm9tICcuL2xpYi9nZXRVc2VyUm9sZXMnXG5leHBvcnQgeyBkZWZlclJlc3BvbnNlIH0gZnJvbSAnLi9saWIvZGVmZXJSZXNwb25zZSdcbmV4cG9ydCB7IHVwZGF0ZVJlc3BvbnNlIH0gZnJvbSAnLi9saWIvdXBkYXRlUmVzcG9uc2UnXG5leHBvcnQgeyByZW1vdmVVc2VyUm9sZSB9IGZyb20gJy4vbGliL3JlbW92ZVVzZXJSb2xlJ1xuZXhwb3J0IHsgYWRkUm9sZVRvVXNlciB9IGZyb20gJy4vbGliL2FkZFJvbGVUb1VzZXInXG5leHBvcnQgeyBkaXNjb3JkQ2hhbmdlTG9nIH0gZnJvbSAnLi9saWIvZGlzY29yZENoYW5nZUxvZydcbmV4cG9ydCB7IGdldFJlbGVhc2VJbmZvQXNKc29uIH0gZnJvbSAnLi9saWIvZGlzY29yZENoYW5nZUxvZydcbmV4cG9ydCB7IGdldEd1aWxkTWVtYmVycyB9IGZyb20gJy4vbGliL2dldEd1aWxkTWVtYmVycydcbmV4cG9ydCB7IGRlcGxveUNvbW1hbmRzIH0gZnJvbSAnLi9saWIvZGVwbG95Q29tbWFuZHMnXG5leHBvcnQgeyBpbnRlcmFjdGlvbk1lc3NhZ2UgfSBmcm9tICcuL2xpYi9pbnRlcmFjdGlvbk1lc3NhZ2UnXG5leHBvcnQgdHlwZSB7IFJlbGVhc2VJbmZvIH0gZnJvbSAnLi9saWIvZGlzY29yZENoYW5nZUxvZydcbmV4cG9ydCB0eXBlIHsgRGlzY29yZFVzZXIsIEd1aWxkTWVtYmVyIH0gZnJvbSAnLi90eXBlcy9EaXNjb3JkVXNlcidcbmV4cG9ydCB0eXBlIHtcbiAgRGlzY29yZFJvdXRlclBhcmFtcyxcbiAgQ2hhbm5lbCxcbiAgQ29tbWFuZERhdGEsXG4gIENvbW1hbmRPcHRpb24sXG4gIEd1aWxkLFxuICBNZW1iZXIsXG4gIFVzZXIsXG4gIEFjdGlvbkRhdGEsXG59IGZyb20gJy4vdHlwZXMvZGlzY29yZFJvdXRlclBhcmFtcydcbmV4cG9ydCB0eXBlIHtcbiAgTWVzc2FnZSxcbiAgVGV4dENoYW5uZWwsXG4gIFRleHRDaGFubmVsVHlwZSxcbiAgTWVzc2FnZUNvbXBvbmVudFR5cGUsXG4gIEludGVyYWN0aW9uLFxuICBNZXNzYWdlQ29tcG9uZW50SW50ZXJhY3Rpb24sXG4gIEFwcGxpY2F0aW9uQ29tbWFuZERhdGEsXG59IGZyb20gJ2Rpc2NvcmQuanMnXG5leHBvcnQge1xuICBJbnRlcmFjdGlvblJlc3BvbnNlVHlwZSxcbiAgSW50ZXJhY3Rpb25UeXBlLFxuICB2ZXJpZnlLZXksXG4gIEJ1dHRvblN0eWxlVHlwZXMsXG4gIE1lc3NhZ2VDb21wb25lbnRUeXBlcyxcbn0gZnJvbSAnZGlzY29yZC1pbnRlcmFjdGlvbnMnXG5leHBvcnQge1xuICBDb21wb25lbnRUeXBlLFxuICBUZXh0SW5wdXRTdHlsZSxcbiAgQnV0dG9uU3R5bGUsXG4gIFNsYXNoQ29tbWFuZEJ1aWxkZXIsXG59IGZyb20gJ2Rpc2NvcmQuanMnXG4iXSwKICAibWFwcGluZ3MiOiAiK0VBQUEsT0FBUyxRQUFBQSxFQUFNLFVBQUFDLE1BQTJCLGFBdUIxQyxlQUFzQkMsRUFDcEJDLEVBQ0FDLEVBQ0FDLEVBQ0FDLEVBQ3NCLENBQ3RCLEdBQUksQ0FD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LENBQUssRUFDNUMsSUFBSUssRUFBTyx5QkFBeUJKLEVBQWlCQyxDQUFPLEVBQUcsQ0FDeEUsS0FBTUMsQ0FDUixDQUFDLEVBRUQsUUFBUSxJQUFJLGlEQUFpRCxDQUMvRCxPQUFTRyxFQUFPLENBQ2QsY0FBUSxNQUFNLG1CQUFtQkEsQ0FBSyxFQUFFLEVBQ2xDLElBQUksTUFBTSxtQkFBbUJBLENBQUssRUFBRSxDQUM1QyxDQUNGLENBbEJzQkMsRUFBQVIsRUFBQSxrQkN2Q3RCLE9BQVMsUUFBQVMsRUFBTSxVQUFBQyxNQUFjLGFBMEI3QixlQUFzQkMsR0FDcEJDLEVBQ0FDLEVBQ0FDLEVBQ0FDLEVBQ0EsQ0FDQSxHQUFJLENBQ0YsSUFBTUMsRUFBTyxJQUFJQyxFQUFLLENBQUUsUUFBUyxJQUFLLENBQUMsRUFBRSxTQUFTTCxDQUFLLEVBQ2pETSxFQUFRQyxFQUFPLG9CQUFvQk4sRUFBZUMsQ0FBZ0IsRUFFeEUsYUFBTUUsRUFBSyxLQUFLRSxFQUFPLENBQ3JCLFFBQVMsQ0FDUCxlQUFnQixrQkFDbEIsRUFDQSxLQUFBSCxDQUNGLENBQUMsRUFDTSxFQUNULE9BQVNLLEVBQU8sQ0FDZCxjQUFRLElBQUksdUJBQXVCQSxDQUFLLEVBQUUsRUFDcEMsSUFBSSxNQUFNLHVCQUF1QkEsQ0FBSyxFQUFFLENBQ2hELENBQ0YsQ0FyQnNCQyxFQUFBVixHQUFBLHNCQ1V0QixPQUNFLDJCQUFBVyxHQUNBLG1CQUFBQyxHQUNBLGFBQUFDLEdBQ0Esb0JBQUFDLEdBQ0EseUJBQUFDLE9BQ0ssdUJBQ1AsT0FDRSxpQkFBQUMsR0FDQSxrQkFBQUMsR0FDQSxlQUFBQyxHQUNBLHVCQUFBQyxPQUNLIiwKICAibmFtZXMiOiBbIlJFU1QiLCAiUm91dGVzIiwgImNyZWF0ZVRleHRDaGFubmVsIiwgInRva2VuIiwgImd1aWxkSWQiLCAiY2hhbm5lbE5hbWUiLCAibWVtYmVySWQiLCAicmVzdCIsICJSRVNUIiwgIm92ZXJ3cml0ZXMiLCAiUm91dGVzIiwgImVycm9yIiwgIl9fbmFtZSIsICJSRVNUIiwgIlJvdXRlcyIsICJpc0NoYW5uZWxFeGlzdCIsICJfX25hbWUiLCAidG9rZW4iLCAiZ3VpbGRJZCIsICJjaGFubmVsTmFtZSIsICJSRVNUIiwgIlJvdXRlcyIsICJlcnJvciIsICJjcmVhdGVQcml2YXRlQ2hhbm5lbCIsICJfX25hbWUiLCAidG9rZW4iLCAiZ3VpbGRJZCIsICJjaGFubmVsTmFtZSIsICJtZW1iZXJJZCIsICJybURvdENoYW5uZWxOYW1lIiwgImlzQ2hhbm5lbEV4aXN0IiwgInJlcyIsICJjcmVhdGVUZXh0Q2hhbm5lbCIsICJlcnJvciIsICJSRVNUIiwgIlJvdXRlcyIsICJkZWxldGVDaGFubmVsIiwgInRva2VuIiwgImNoYW5uZWxJZCIsICJSRVNUIiwgIlJvdXRlcyIsICJlcnJvciIsICJfX25hbWUiLCAiUkVTVCIsICJSb3V0ZXMiLCAibWVzc2FnZUNoYW5uZWwiLCAidG9rZW4iLCAiY2hhbm5lbElkIiwgImJvZHkiLCAiUkVTVCIsICJSb3V0ZXMiLCAiZXJyb3IiLCAiX19uYW1lIiwgIlJFU1QiLCAiUm91dGVzIiwgImdldFVzZXJSb2xlcyIsICJfX25hbWUiLCAidG9rZW4iLCAiZ3VpbGRJZCIsICJ1c2VySWQiLCAicmVzdCIsICJSRVNUIiwgInJvdXRlIiwgIlJvdXRlcyIsICJlcnJvciIsICJSRVNUIiwgIlJvdXRlcyIsICJkZWZlclJlc3BvbnNlIiwgInRva2VuIiwgImludGVyYWN0aW9uSWQiLCAiaW50ZXJhY3Rpb25Ub2tlbiIsICJjb250ZW50IiwgInJlc3QiLCAiUkVTVCIsICJyb3V0ZSIsICJSb3V0ZXMiLCAiZXJyb3IiLCAiX19uYW1lIiwgIlJFU1QiLCAiUm91dGVzIiwgInVwZGF0ZVJlc3BvbnNlIiwgInRva2VuIiwgImFwcGxpY2F0aW9uSWQiLCAiaW50ZXJhY3Rpb25Ub2tlbiIsICJkYXRhIiwgInJlc3QiLCAiUkVTVCIsICJyb3V0ZSIsICJSb3V0ZXMiLCAiZXJyb3IiLCAiX19uYW1lIiwgIlJFU1QiLCAiUm91dGVzIiwgInJlbW92ZVVzZXJSb2xlIiwgInRva2VuIiwgImd1aWxkSWQiLCAidXNlcklkIiwgInJvbGVJZCIsICJyZXN0IiwgIlJFU1QiLCAicm91dGUiLCAiUm91dGVzIiwgImVycm9yIiwgIl9fbmFtZSIsICJSRVNUIiwgIlJvdXRlcyIsICJhZGRSb2xlVG9Vc2VyIiwgInRva2VuIiwgImd1aWxkSWQiLCAidXNlcklkIiwgInJvbGVJZCIsICJyZXN0IiwgIlJFU1QiLCAicm91dGUiLCAiUm91dGVzIiwgImVycm9yIiwgIl9fbmFtZSIsICJleGVjU3luYyIsICJESVNDT1JEX0JPRFlfTElNSVQiLCAiZGlzY29yZENoYW5nZUxvZyIsICJfX25hbWUiLCAiZGlzY29yZFRva2VuIiwgInJlcG9OYW1lIiwgImNoYW5uZWxJZHMiLCAibGFuZyIsICJsb2ciLCAiZ2V0UmVsZWFzZUluZm9Bc0pzb24iLCAicmVwbyIsICJoZWFkTGluZSIsICJjb250ZW50IiwgInRyaW1Db250ZW50IiwgImNoYW5uZWxJZCIsICJtZXNzYWdlQ2hhbm5lbCIsICJyZXNvbHZlIiwgImVycm9yIiwgImxpbmVzIiwgImV4ZWNTeW5jIiwgImhlYWRlckxpbmVzIiwgImxpbmUiLCAianNvbk91dHB1dCIsICJjdXJyZW50S2V5IiwgImtleSIsICJ2YWx1ZSIsICJpdGVtIiwgIlJFU1QiLCAiUm91dGVzIiwgImdldEd1aWxkTWVtYmVycyIsICJfX25hbWUiLCAidG9rZW4iLCAiZ3VpbGRJZCIsICJsaW1pdCIsICJhZnRlciIsICJyZXN0IiwgIlJFU1QiLCAicm91dGUiLCAiUm91dGVzIiwgInBhcmFtc1N0cmluZyIsICJxdWVyeSIsICJlcnJvciIsICJSRVNUIiwgIlJvdXRlcyIsICJkZXBsb3lDb21tYW5kcyIsICJ0b2tlbiIsICJkaXNjb3JkQ2xpZW50SWQiLCAiZ3VpbGRJZCIsI