piclist 0.9.1 → 1.0.0

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.
Files changed (52) hide show
  1. package/.eslintrc.js +4 -1
  2. package/dist/core/Lifecycle.d.ts +1 -1
  3. package/dist/core/PicGo.d.ts +1 -1
  4. package/dist/i18n/en.d.ts +1 -1
  5. package/dist/i18n/index.d.ts +4 -4
  6. package/dist/i18n/zh-CN.d.ts +2 -2
  7. package/dist/i18n/zh-TW.d.ts +1 -1
  8. package/dist/index.cjs.js +2 -2
  9. package/dist/index.esm.js +2 -2
  10. package/dist/lib/Commander.d.ts +2 -2
  11. package/dist/lib/LifecyclePlugins.d.ts +1 -1
  12. package/dist/lib/Logger.d.ts +1 -1
  13. package/dist/lib/PluginHandler.d.ts +1 -1
  14. package/dist/lib/PluginLoader.d.ts +1 -1
  15. package/dist/lib/Request.d.ts +2 -2
  16. package/dist/plugins/beforetransformer/compress.d.ts +1 -1
  17. package/dist/plugins/beforetransformer/watermark.d.ts +1 -1
  18. package/dist/plugins/beforeupload/buildInRename.d.ts +1 -1
  19. package/dist/plugins/commander/config.d.ts +1 -1
  20. package/dist/plugins/commander/i18n.d.ts +1 -1
  21. package/dist/plugins/commander/index.d.ts +1 -1
  22. package/dist/plugins/commander/init.d.ts +1 -1
  23. package/dist/plugins/commander/pluginHandler.d.ts +1 -1
  24. package/dist/plugins/commander/proxy.d.ts +1 -1
  25. package/dist/plugins/commander/setting.d.ts +1 -1
  26. package/dist/plugins/commander/upload.d.ts +1 -1
  27. package/dist/plugins/commander/use.d.ts +1 -1
  28. package/dist/plugins/transformer/base64.d.ts +1 -1
  29. package/dist/plugins/transformer/index.d.ts +1 -1
  30. package/dist/plugins/transformer/path.d.ts +1 -1
  31. package/dist/plugins/uploader/aliyun.d.ts +1 -1
  32. package/dist/plugins/uploader/github.d.ts +1 -1
  33. package/dist/plugins/uploader/imgur.d.ts +1 -1
  34. package/dist/plugins/uploader/index.d.ts +1 -1
  35. package/dist/plugins/uploader/local.d.ts +1 -1
  36. package/dist/plugins/uploader/qiniu.d.ts +1 -1
  37. package/dist/plugins/uploader/sftp.d.ts +1 -1
  38. package/dist/plugins/uploader/smms.d.ts +1 -1
  39. package/dist/plugins/uploader/tcyun.d.ts +1 -1
  40. package/dist/plugins/uploader/upyun.d.ts +1 -1
  41. package/dist/plugins/uploader/webdav.d.ts +1 -1
  42. package/dist/types/index.d.ts +33 -49
  43. package/dist/types/oldRequest.d.ts +3 -7
  44. package/dist/utils/common.d.ts +1 -1
  45. package/dist/utils/createContext.d.ts +1 -1
  46. package/dist/utils/db.d.ts +2 -2
  47. package/dist/utils/getClipboardImage.d.ts +2 -2
  48. package/dist/utils/initUtils.d.ts +1 -1
  49. package/dist/utils/interfaces.d.ts +9 -13
  50. package/dist/utils/sshClient.d.ts +1 -1
  51. package/package.json +28 -38
  52. package/rollup.config.js +2 -2
package/dist/index.cjs.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("fs-extra"),t=require("path"),r=require("events"),n=require("os"),a=require("commander"),i=require("inquirer"),s=require("image-size"),o=require("url"),l=require("text-to-svg"),E=require("sharp"),u=require("crypto"),I=require("uuid"),_=require("chalk"),c=require("minimatch"),S=require("globby"),d=require("ejs"),P=require("download-git-repo"),p=require("rimraf"),g=require("dayjs"),f=require("util"),C=require("axios"),A=require("lodash"),m=require("heic-convert"),T=require("mime-types"),D=require("qiniu"),h=require("md5"),L=require("node-ssh-no-cpu-features"),U=require("resolve"),N=require("child_process"),R=require("is-wsl"),B=require("form-data"),O=require("https"),M=require("tunnel"),y=require("@picgo/store"),w=require("cross-spawn"),G=require("js-yaml"),b=require("@picgo/i18n");function x(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var F=x(e),$=x(t),H=x(n),W=x(i),v=x(l),K=x(E),k=x(u),q=x(_),Y=x(c),j=x(S),V=x(d),z=x(P),Q=x(p),X=x(g),Z=x(f),J=x(C),ee=x(m),te=x(T),re=x(D),ne=x(h),ae=x(U),ie=x(R),se=x(B),oe=x(O),le=x(M),Ee=x(w),ue=x(G);const Ie={handle:e=>{const t=e.cmd;t.program.command("install <plugins...>").description("install picgo plugin").alias("add").option("-p, --proxy <proxy>","Add proxy for installing").option("-r, --registry <registry>","Choose a registry for installing").action(((t,r)=>{const{proxy:n,registry:a}=r,i={proxy:n,registry:a};e.pluginHandler.install(t,i).catch((t=>{e.log.error(t)}))})),t.program.command("uninstall <plugins...>").alias("rm").description("uninstall picgo plugin").action((t=>{e.pluginHandler.uninstall(t).catch((t=>{e.log.error(t)}))})),t.program.command("update <plugins...>").description("update picgo plugin").option("-p, --proxy <proxy>","Add proxy for installing").option("-r, --registry <registry>","Choose a registry for installing").action(((t,r)=>{const{proxy:n,registry:a}=r,i={proxy:n,registry:a};e.pluginHandler.update(t,i).catch((t=>{e.log.error(t)}))}))}},_e={handle:e=>{e.cmd.program.option("-c, --config <path>","set config path")}};function ce(e){const t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";return Array.from({length:e}).map((()=>t.charAt(Math.floor(Math.random()*t.length)))).join("")}function Se(e,t,r){const n={"{Y}":()=>(new Date).getFullYear().toString(),"{y}":()=>(new Date).getFullYear().toString().slice(2),"{m}":()=>1===((new Date).getMonth()+1).toString().length?`0${(new Date).getMonth()+1}`:((new Date).getMonth()+1).toString(),"{d}":()=>1===(new Date).getDate().toString().length?`0${(new Date).getDate()}`:(new Date).getDate().toString(),"{h}":()=>1===(new Date).getHours().toString().length?`0${(new Date).getHours()}`:(new Date).getHours().toString(),"{i}":()=>1===(new Date).getMinutes().toString().length?`0${(new Date).getMinutes()}`:(new Date).getMinutes().toString(),"{s}":()=>1===(new Date).getSeconds().toString().length?`0${(new Date).getSeconds()}`:(new Date).getSeconds().toString(),"{md5}":()=>k.default.createHash("md5").update($.default.basename(e,$.default.extname(e))).digest("hex"),"{md5-16}":()=>k.default.createHash("md5").update($.default.basename(e,$.default.extname(e))).digest("hex").slice(0,16),"{str-10}":()=>ce(10),"{str-20}":()=>ce(20),"{filename}":()=>r?$.default.basename(r,$.default.extname(r)):$.default.basename(e,$.default.extname(e)),"{uuid}":()=>I.v4().replace(/-/g,""),"{timestamp}":()=>Math.floor(Date.now()/1e3).toString()};if(void 0===t||!Object.keys(n).some((e=>t.includes(e)))&&!t.includes("localFolder"))return e;const a=$.default.extname(e);let i=Object.keys(n).reduce(((e,t)=>e.replace(new RegExp(t,"g"),n[t]())),t)+a;return i=i.replace(/{(localFolder:?(\d+)?)}/gi,((t,r,n)=>{n=Math.max(1,n||0);return $.default.dirname(e).split($.default.sep).slice(0-n).reduce(((e,t)=>`${e}/${t}`)).replace(/:/g,"")})),i}const de=e=>/^https?:\/\//.test(e),Pe=e=>{e=e||"";try{return e!==decodeURI(e)}catch(e){return!1}},pe=e=>(Pe(e)||(e=encodeURI(e)),e),ge=e=>{try{const{width:t=0,height:r=0,type:n}=s.imageSize(e);return{real:!0,width:t,height:r,extname:n?`.${n}`:".png"}}catch(e){return{real:!1,width:200,height:200,extname:".png"}}},fe=async e=>{try{return{extname:$.default.extname(e),fileName:$.default.basename(e),buffer:await F.default.readFile(e),success:!0}}catch(t){return{reason:`read file ${e} error`,success:!1}}},Ce=async(e,t)=>{let r;e=pe(e);const n=new Promise(((n,a)=>{(async()=>{var a;try{const a=await t.request({method:"get",url:e,resolveWithFullResponse:!0,responseType:"arraybuffer"}).then((e=>e.data));clearTimeout(r);const i=new o.URL(e).pathname;let s="";try{s=new o.URL(e).searchParams.get("wx_fmt")||$.default.extname(i)||""}catch(e){s=$.default.extname(i)||""}!s.startsWith(".")&&s&&(s=`.${s}`),n({buffer:a,fileName:$.default.basename(i),extname:s,success:!0})}catch(t){clearTimeout(r),n({success:!1,reason:`request ${e} error, ${null!==(a=null==t?void 0:t.message)&&void 0!==a?a:""}`})}})().catch(a)})),a=new Promise((t=>{r=setTimeout((()=>{t({success:!1,reason:`request ${e} timeout`})}),3e4)}));return Promise.race([n,a])},Ae=e=>/^@[^/]+\/picgo-plugin-/.test(e)?"scope":e.startsWith("picgo-plugin-")?"normal":me(e)?"simple":"unknown",me=e=>{if($.default.isAbsolute(e))return!1;const t=$.default.join(process.cwd(),e);return!F.default.existsSync(t)&&(!e.includes("/")&&!e.includes("\\"))},Te=(e,t="")=>t?`@${t}/picgo-plugin-${e}`:`picgo-plugin-${e}`,De=(e,t=console)=>{switch(Ae(e)){case"normal":case"scope":return e;case"simple":return Te(e);default:{let r=e;return $.default.isAbsolute(e)&&F.default.existsSync(e)?Le(r):(r=$.default.join(process.cwd(),e),F.default.existsSync(r)?Le(r):(t.warn(`Can't find plugin ${e}`),""))}}},he=(e,t=console)=>{var r;switch(Ae(e)){case"normal":return Ue(e);case"scope":return Ue(e,!0);case"simple":return Ue(Te(e));default:{if(!F.default.existsSync(e))return t.warn(`Can't find plugin: ${e}`),"";const n=$.default.posix.join(e,"package.json");if(F.default.existsSync(n)){const e=F.default.readJSONSync(n)||{};return(null===(r=e.name)||void 0===r?void 0:r.includes("picgo-plugin-"))?e.name:(t.warn(`The plugin package.json's name filed is ${e.name||"empty"}, need to include the prefix: picgo-plugin-`),"")}return t.warn(`Can't find plugin: ${e}`),""}}},Le=e=>e.split($.default.sep).join("/"),Ue=(e,t=!1)=>{if(e.includes("@")){let r=/(.+\/)?(picgo-plugin-\w+)(@.+)*/;t&&(r=/(.+\/)?(^@[^/]+\/picgo-plugin-\w+)(@.+)*/);const n=e.match(r);return n?n[2]:(console.warn("can not remove plugin version"),e)}return e},Ne=[],Re=e=>Ne.some((t=>e.startsWith(t))),Be=e=>"object"==typeof e&&!Array.isArray(e)&&Object.keys(e).length>0;function Oe(e){try{return JSON.parse(e)}catch(t){return e}}const Me=(e=0)=>isNaN(Number(e))?0:Number(e),ye=()=>"development"===process.env.NODE_ENV;const we=`${__dirname}/assets/piclist.png`;async function Ge(e,t,r,n,a,i,s,o,l,E,u){o=!o||o<0||o>1?.15:o;const I=K.default(e),{width:_=200}=await I.metadata(),c=await async function(e,t,r,n,a,i,s,o=200,l=0){let E;"image"===e?(s=s||we,E=await K.default(s).toBuffer()):E=await async function(e,t,r,n){t=t||"测试",n=n||e;const a={anchor:"top",attributes:{fill:r=r||"rgba(204, 204, 204, 0.45)"}},i=v.default.loadSync(n).getSVG(t,a);return Buffer.from(i)}(t,r,i,n||t);const{width:u,height:I}=await async function(e){const{width:t,height:r}=await K.default(e).metadata();return{width:t||200,height:r||200}}(E),_=Math.floor(o*Me(a)),c=Math.floor(_*I/u);return await K.default(E).resize(_,c,{fit:"inside"}).rotate(l,{background:{r:255,g:255,b:255,alpha:0}}).toBuffer()}(t,r,i,s,o,l,E,_,a);return await I.composite([{input:c,gravity:u||"southeast",tile:n}]).toBuffer()}const be=(...e)=>e.every((e=>null!=e&&("string"==typeof e?""!==e:"number"==typeof e?e>0:"object"!=typeof e||Object.keys(e).length>0))),xe=["avif","dz","fits","gif","heif","input","jpeg","jpg","jp2","jxl","magick","openslide","pdf","png","ppm","raw","svg","tiff","tif","v","webp"],Fe=["jpg","jpeg","png","webp","bmp","tiff","tif","svg","ico","avif","heif","heic"];async function $e(e,t,r){try{let n=K.default(e);return be(t.watermarkText)&&(n=K.default(await Ge(e,t.watermarkType||"text",r,t.isFullScreenWatermark,Me(t.watermarkDegree),t.watermarkText,t.watermarkFontPath,Me(t.watermarkScaleRatio),t.watermarkColor,t.watermarkImagePath,t.watermarkPosition))),await n.toBuffer()}catch(t){return console.log(t),e}}function He(e){return{quality:Me(e.quality),isConvert:e.isConvert||!1,convertFormat:e.convertFormat||"jpg",isReSize:e.isReSize||!1,reSizeHeight:Me(e.reSizeHeight),reSizeWidth:Me(e.reSizeWidth),skipReSizeOfSmallImg:e.skipReSizeOfSmallImg||!1,isReSizeByPercent:e.isReSizeByPercent||!1,reSizePercent:Me(e.reSizePercent),isRotate:e.isRotate||!1,rotateDegree:Me(e.rotateDegree),picBed:e.picBed||"smms"}}async function We(e,t,r){t=He(t);try{if(r=r.toLowerCase().replace(".",""),!Fe.includes(r))return e;let a=K.default(e),i=100;if(be(t.quality)&&t.quality<100&&(i=t.quality),t.isReSizeByPercent){if(be(t.reSizePercent)){const e=await a.metadata().then((e=>e.width)),r=await a.metadata().then((e=>e.height));e&&r&&(a=a.resize(Math.round(e*t.reSizePercent/100),Math.round(r*t.reSizePercent/100),{fit:"inside"}))}}else if(t.isReSize)if("number"==typeof t.reSizeHeight&&t.reSizeHeight>0&&"number"==typeof t.reSizeWidth&&t.reSizeWidth>0)a=a.resize(t.reSizeWidth,t.reSizeHeight,{fit:"fill"});else if("number"==typeof t.reSizeHeight&&t.reSizeHeight>0&&("number"!=typeof t.reSizeWidth||0===t.reSizeWidth)){const e=await a.metadata().then((e=>e.width)),r=await a.metadata().then((e=>e.height));if(e&&r&&(!t.skipReSizeOfSmallImg||t.skipReSizeOfSmallImg&&t.reSizeHeight<r)){const n=t.reSizeHeight/r;a=a.resize(Math.round(e*n),t.reSizeHeight,{fit:"inside"})}}else if("number"==typeof t.reSizeWidth&&t.reSizeWidth>0&&("number"!=typeof t.reSizeHeight||0===t.reSizeHeight)){const e=await a.metadata().then((e=>e.width)),r=await a.metadata().then((e=>e.height));if(e&&r&&(!t.skipReSizeOfSmallImg||t.skipReSizeOfSmallImg&&t.reSizeWidth<e)){const n=t.reSizeWidth/e;a=a.resize(t.reSizeWidth,Math.round(r*n),{fit:"inside"})}}if(t.isRotate&&t.rotateDegree&&(a=a.rotate(t.rotateDegree,{background:{r:255,g:255,b:255,alpha:0}})),t.isConvert){let e=t.convertFormat||"jpg";"imgur"===t.picBed&&"webp"===e&&(e="jpg"),a=a.toFormat(e,{quality:i})}else a=r&&(n=r,xe.includes(n))?a.toFormat(r,{quality:i}):a.toFormat("jpg",{quality:i});return await a.toBuffer()}catch(t){return console.log(t),e}var n}const ve=["jpg","jpeg","png","webp","bmp","tiff","tif","svg","ico","avif","heif","heic"],Ke=(e,t)=>(t=t.toLowerCase().replace(".",""),!!e&&!!e.isAddWatermark&&ve.includes(t)),ke=(e,t)=>{if(t=t.toLowerCase().replace(".",""),!ve.includes(t))return!1;if(!e)return!1;e=He(e);const{quality:r,isReSizeByPercent:n,reSizePercent:a,isReSize:i,reSizeHeight:s,reSizeWidth:o,isRotate:l,rotateDegree:E,isConvert:u,convertFormat:I}=e;if(be(r)&&r<100)return!0;if(n&&be(a))return!0;if(i&&("number"==typeof s&&s>0||"number"==typeof o&&o>0))return!0;if(l&&E)return!0;if(u){return t!==(I||"jpg")}return!1},qe=async(e,t)=>(t=t.toLowerCase().replace(".",""),ve.includes(t)?await K.default(e).toBuffer():e);var Ye=Object.freeze({__proto__:null,randomStringGenerator:ce,renameFileNameWithTimestamp:function(e){return`${Math.floor(Date.now()/1e3)}${ce(5)}${$.default.extname(e)}`},renameFileNameWithRandomString:function(e,t=5){return`${ce(t)}${$.default.extname(e)}`},renameFileNameWithCustomString:Se,isUrl:de,isUrlEncode:Pe,handleUrlEncode:pe,getImageSize:ge,getFSFile:fe,getURLFile:Ce,getPluginNameType:Ae,isSimpleName:me,handleStreamlinePluginName:e=>/^@[^/]+\/picgo-plugin-/.test(e)?e.replace(/^@[^/]+\/picgo-plugin-/,""):e.replace(/picgo-plugin-/,""),handleCompletePluginName:Te,getProcessPluginName:De,getNormalPluginName:he,handleUnixStylePath:Le,removePluginVersion:Ue,configBlackList:Ne,isConfigKeyInBlackList:Re,isInputConfigValid:Be,safeParse:Oe,forceNumber:Me,isDev:ye,isProd:()=>"production"===process.env.NODE_ENV,AddWatermark:Ge,imageAddWaterMark:$e,imageProcess:We,needAddWatermark:Ke,needCompress:ke,removeExif:qe});const je={handle:e=>{e.cmd.program.command("upload").description("upload, go go go").arguments("[input...]").alias("u").action((t=>{(async()=>{const r=t.map((e=>de(e)?e:$.default.resolve(e))).filter((t=>{const r=F.default.existsSync(t)||de(t);return r||e.log.warn(`${t} does not exist.`),r}));await e.upload(r)})().catch((t=>{e.log.error(t)}))}))}};var Ve=e=>{const t=e.getConfig("buildIn.compress")||{};return[{name:"quality",type:"input",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_QUALITY")},required:!1,default:t.quality||100},{name:"isConvert",type:"confirm",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISCONVERT")},required:!1,default:t.isConvert||!1},{name:"convertFormat",type:"list",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_CONVERTFORMAT")},required:!1,choices:["avif","dz","fits","gif","heif","input","jpeg","jpg","jp2","jxl","magick","openslide","pdf","png","ppm","raw","svg","tiff","tif","v","webp"],default:"jpg"},{name:"isReSize",type:"confirm",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISRESIZE")},required:!1,default:t.isReSize||!1},{name:"reSizeWidth",type:"input",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_RESIZEWIDTH")},required:!1,default:t.reSizeWidth||500},{name:"reSizeHeight",type:"input",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_RESIZEHEIGHT")},required:!1,default:t.reSizeHeight||500},{name:"skipReSizeOfSmallImg",type:"confirm",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_SKIPRESIZEOFSMALLIMG")},required:!1,default:t.skipReSizeOfSmallImg||!1},{name:"isReSizeByPercent",type:"confirm",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISRESIZEBYPERCENT")},required:!1,default:t.isReSizeByPercent||!1},{name:"reSizePercent",type:"input",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_RESIZEPERCENT")},required:!1,default:t.reSizePercent||50},{name:"isRotate",type:"confirm",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISROTATE")},required:!1,default:t.isRotate||!1},{name:"rotateDegree",type:"input",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ROTATEDEGREE")},required:!1,default:t.rotateDegree||90},{name:"isRemoveExif",type:"confirm",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISREMOVEEXIF")},required:!1,default:t.isRemoveExif||!1}]};var ze=e=>{const t=e.getConfig("buildIn.watermark")||{};return[{name:"isAddWatermark",type:"confirm",get alias(){return e.i18n.translate("BUILDIN_WATERMARK_ISADDWATERMARK")},required:!1,default:t.isAddWatermark||!1},{name:"watermarkType",type:"list",get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKTYPE")},required:!1,choices:["text","image"],default:t.watermarkType||"text"},{name:"isFullScreenWatermark",type:"confirm",get alias(){return e.i18n.translate("BUILDIN_WATERMARK_ISFULLSCREENWATERMARK")},required:!1,default:t.isFullScreenWatermark||!1},{name:"watermarkDegree",type:"input",get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKDEGREE")},required:!1,default:t.watermarkDegree||0},{name:"watermarkText",type:"input",get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKTEXT")},required:!1,default:t.watermarkText||""},{name:"watermarkFontPath",type:"input",get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKTEXTFONTPATH")},required:!1,default:t.watermarkFontPath||""},{name:"watermarkScaleRatio",type:"input",get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKFONTRATIO")},required:!1,default:t.watermarkScaleRatio||.15},{name:"watermarkColor",type:"input",get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKFONTCOLOR")},required:!1,default:t.watermarkColor||"rgba(204, 204, 204, 0.45)"},{name:"watermarkImagePath",type:"input",get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKIMAGEPATH")},required:!1,default:t.watermarkImagePath||""},{name:"watermarkPosition",type:"list",get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKPOSITION")},required:!1,choices:["north","northeast","southeast","south","southwest","northwest","west","east","center","centre"],default:t.watermarkPosition||"southeast"}]};var Qe=e=>{const t=e.getConfig("buildIn.rename")||{};return[{name:"format",type:"input",get alias(){return e.i18n.translate("BUILDIN_RENAME_FORMAT")},required:!1,default:t.format||"{filename}"},{name:"enable",type:"confirm",get alias(){return e.i18n.translate("BUILDIN_RENAME_ENABLE")},required:!1,default:t.enable||!1}]};const Xe=async(e,t,r,n)=>{const a=await e.cmd.inquirer.prompt(t),i="uploader"===r?`picBed.${n}`:"transformer"===r?`transformer.${n}`:"buildin"===r?`buildIn.${n}`:n;e.saveConfig({[i]:a}),"uploader"===r?e.saveConfig({"picBed.current":n,"picBed.uploader":n}):"transformer"===r&&e.saveConfig({"picBed.transformer":n})},Ze={handle:e=>{e.cmd.program.command("set").alias("config").arguments("<module> [name]").description("configure config of picgo modules, uploader|transformer|plugin|buildin").action(((t,r)=>{(async()=>{var n,a;try{switch(t){case"buildin":if("compress"===r)await Xe(e,Ve(e),t,r);else if("watermark"===r)await Xe(e,ze(e),t,r);else if("rename"===r)await Xe(e,Qe(e),t,r);else{const r=[{type:"list",name:"buildin",choices:["compress","watermark","rename"],message:"Choose a buildin module"}],n=await e.cmd.inquirer.prompt(r);"compress"===n.buildin?await Xe(e,Ve(e),t,n.buildin):"watermark"===n.buildin?await Xe(e,ze(e),t,n.buildin):"rename"===n.buildin&&await Xe(e,Qe(e),t,n.buildin)}break;case"uploader":case"transformer":if(r){const n=e.helper[t].get(r);if(!n)return e.log.error(`No ${t} named ${r}`);n.config&&await Xe(e,n.config(e),t,r)}else{const r=[{type:"list",name:`${t}`,choices:e.helper[t].getIdList(),message:`Choose a(n) ${t}`}],n=await e.cmd.inquirer.prompt(r),a=e.helper[t].get(n[t]);(null==a?void 0:a.config)&&await Xe(e,a.config(e),t,n[t])}break;case"plugin":if(r){if(r.includes("picgo-plugin-")||(r=`picgo-plugin-${r}`),!Object.keys(e.getConfig("picgoPlugins")).includes(r))return e.log.error(`No plugin named ${r}`);(null===(n=e.pluginLoader.getPlugin(r))||void 0===n?void 0:n.config)&&await Xe(e,e.pluginLoader.getPlugin(r).config(e),"plugin",r)}else{const t=[{type:"list",name:"plugin",choices:e.pluginLoader.getFullList(),message:"Choose a plugin"}],r=await e.cmd.inquirer.prompt(t);(null===(a=e.pluginLoader.getPlugin(r.plugin))||void 0===a?void 0:a.config)&&await Xe(e,e.pluginLoader.getPlugin(r.plugin).config(e),"plugin",r.plugin)}break;default:return e.log.warn(`No module named ${t}`),e.log.warn("Available modules are uploader|transformer|plugin|buildin")}e.log.success("Configure config successfully!"),"plugin"===t&&e.log.info("If you want to use this config, please run 'picgo use plugins'")}catch(t){if(e.log.error(t),process.argv.includes("--debug"))throw t}})().catch((t=>{e.log.error(t)}))}))}},Je={handle:async e=>{const t=e.cmd;t.program.command("use").arguments("[module]").description("use modules of picgo").action((r=>{(async()=>{try{let n=[];const a={uploader:{type:"list",name:"uploader",message:"Use an uploader",choices:e.helper.uploader.getIdList(),default:e.getConfig("picBed.uploader")||e.getConfig("picBed.current")||"smms"},transformer:{type:"list",name:"transformer",message:"Use a transformer",choices:e.helper.transformer.getIdList(),default:e.getConfig("picBed.transformer")||"path"},plugins:{type:"checkbox",name:"plugins",message:"Use plugins",choices:e.pluginLoader.getFullList(),default:Object.keys(e.getConfig("picgoPlugins")).filter((t=>e.getConfig(`picgoPlugins.${t}`)))}};if(r){if(!a[r])return e.log.warn(`No module named ${r}`),e.log.warn("Available modules are uploader|transformer|plugins");n.push(a[r])}else n=Object.keys(a).map((e=>a[e]));const i=await t.inquirer.prompt(n);if(i.plugins){const t=e.getConfig("picgoPlugins");Object.keys(t).map((e=>{i.plugins.includes(e)?t[e]=!0:t[e]=!1})),e.saveConfig({picgoPlugins:t})}e.saveConfig({"picBed.current":i.uploader||e.getConfig("picBed.current"),"picBed.uploader":i.uploader||e.getConfig("picBed.current"),"picBed.transformer":i.transformer||"path"}),e.log.success("Configure config successfully!")}catch(t){if(e.log.error(t),process.argv.includes("--debug"))throw t}})().catch((t=>{e.log.error(t)}))}))}},et={handle:e=>{e.cmd.program.option("-p, --proxy <url>","set proxy for uploading",(t=>{e.setConfig({"picBed.proxy":t})}))}},tt=async(e,t)=>{try{const r=nt(t.tmp),n=$.default.join(t.tmp,"template");let a={};r.prompts&&r.prompts.length>0&&(a=await e.cmd.inquirer.prompt(r.prompts));let i=await j.default(["**/*"],{cwd:n,dot:!0});if(i=i.filter((t=>{let n="";return Object.keys(r.filters).forEach((e=>{Y.default(t,e,{dot:!0})&&(n=t)})),!n||rt(e,r.filters[n],a)})),0===i.length)return e.log.warn("Template files not found!");const s=at(i,n,a);it(t.dest,s),"function"==typeof r.complete&&r.complete({answers:a,options:t,files:i,ctx:e}),r.completeMessage&&e.log.success(r.completeMessage),e.log.success("Done!")}catch(t){return e.log.error(t)}},rt=(e,t,r)=>{const n=new Function("data","with (data) { return "+t+"}");try{return n(r)}catch(r){return e.log.error(`Error when evaluating filter condition: ${JSON.stringify(t)}`),!1}},nt=e=>{const t=$.default.join(e,"index.js");if(F.default.existsSync(t)){return require(t)}return{}},at=(e,t,r)=>{const n={};return e.forEach((e=>{const a=F.default.readFileSync($.default.join(t,e),"utf8"),i=V.default.render(a,r);(Buffer.isBuffer(i)||/[^\s]/.test(i))&&(n[e]=i)})),n},it=(e,t)=>{Object.keys(t).forEach((r=>{const n=$.default.join(e,r);F.default.ensureDirSync($.default.dirname(n)),F.default.writeFileSync(n,t[r])}))},st=(e,t)=>{t.offline?F.default.existsSync(t.template)?tt(e,t).catch((t=>{e.log.error(t)})):e.log.error(`Local template ${t.template} not found`):(t.template=t.hasSlash?t.template:"PicGo/picgo-template-"+t.template,ot(e,t))},ot=(e,t)=>{F.default.existsSync(t.tmp)&&Q.default.sync(t.tmp),e.log.info("Template files are downloading..."),z.default(t.template,t.tmp,{clone:t.clone},(r=>{if(r)return e.log.error(r);e.log.success("Template files are downloaded!"),tt(e,t).catch((t=>{e.log.error(t)}))}))},lt={handle:async e=>{e.cmd.program.command("init").arguments("<template> [project]").option("--clone","use git clone").option("--offline","use cached template").description("create picgo plugin's development templates").action(((t,r,a)=>{(async()=>{try{const i=t.includes("/"),s=!r||"."===r,o=$.default.resolve(r||"."),l=a.clone||!1,E=a.offline||!1,u=$.default.join(n.homedir(),".picgo/templates",t.replace(/[/:]/g,"-"));a.offline&&(t=u);const I={template:t,project:r,hasSlash:i,inPlace:s,dest:o,clone:l,tmp:u,offline:E};s||F.default.existsSync(o)?await e.cmd.inquirer.prompt([{type:"confirm",message:s?"Generate project in current directory?":"Target directory exists. Continue?",name:"ok"}]).then((t=>{t.ok&&st(e,I)})):st(e,I)}catch(t){if(e.log.error(t),process.argv.includes("--debug"))throw t}})().catch((t=>{e.log.error(t)}))})).on("--help",(()=>{console.log(),console.log("Examples:"),console.log(),console.log(q.default.gray(" # create a new project with an official template")),console.log(" $ picgo init plugin my-project"),console.log(),console.log(q.default.gray(" # create a new project straight from a github template")),console.log(" $ picgo init username/repo my-project"),console.log()}))}},Et={handle:e=>{e.cmd.program.command("i18n").arguments("[lang]").description("change picgo language").action((async(t="")=>{const r=e.i18n.getLanguageList();if(!t){const t=[{type:"list",name:"i18n",choices:r,message:"Choose a language",default:e.getConfig("settings.language")||"zh-CN"}],n=await e.cmd.inquirer.prompt(t);return e.i18n.setLanguage(n.i18n),void e.log.success(`Language set to ${n.i18n}`)}if(!r.includes(t))return e.log.warn("No such language");e.i18n.setLanguage(t),e.log.success(`Language set to ${t}`)}))}};class ut{constructor(e){this.name=e,this.list=new Map,this.pluginIdMap=new Map}register(e,t){var r;if(!e)throw new TypeError("id is required!");if("function"!=typeof t.handle)throw new TypeError("plugin.handle must be a function!");if(this.list.has(e))throw new TypeError(`${this.name} duplicate id: ${e}!`);this.list.set(e,t),ut.currentPlugin&&(this.pluginIdMap.has(ut.currentPlugin)?null===(r=this.pluginIdMap.get(ut.currentPlugin))||void 0===r||r.push(e):this.pluginIdMap.set(ut.currentPlugin,[e]))}unregister(e){if(this.pluginIdMap.has(e)){const t=this.pluginIdMap.get(e);null==t||t.forEach((e=>{this.list.delete(e)}))}}getName(){return this.name}get(e){return this.list.get(e)}getList(){return[...this.list.values()]}getIdList(){return[...this.list.keys()]}}const It=(e=null)=>{ut.currentPlugin=e};class _t{constructor(e){this.name="commander",this.list=new Map,this.pluginIdMap=new Map,this.program=new a.Command,this.inquirer=W.default,this.ctx=e}getName(){return this.name}init(){var e;this.program.version("0.9.1","-v, --version").option("-d, --debug","debug mode",(()=>{this.ctx.setConfig({debug:!0})})).option("-s, --silent","silent mode",(()=>{this.ctx.setConfig({silent:!0})})).on("command:*",(()=>{this.ctx.log.error(`Invalid command: ${this.program.args.join(" ")}\nSee --help for a list of available commands.`),process.exit(1)})),(e=this.ctx).cmd.register("pluginHandler",Ie),e.cmd.register("config",_e),e.cmd.register("setting",Ze),e.cmd.register("upload",je),e.cmd.register("use",Je),e.cmd.register("proxy",et),e.cmd.register("init",lt),e.cmd.register("i18n",Et)}register(e,t){var r;if(!e)throw new TypeError("name is required!");if("function"!=typeof t.handle)throw new TypeError("plugin.handle must be a function!");if(this.list.has(e))throw new TypeError(`${this.name} plugin duplicate id: ${e}!`);this.list.set(e,t);const n=ut.currentPlugin;null!==n&&(this.pluginIdMap.has(n)?null===(r=this.pluginIdMap.get(n))||void 0===r||r.push(e):this.pluginIdMap.set(n,[e]))}unregister(e){if(this.pluginIdMap.has(e)){const t=this.pluginIdMap.get(e);null==t||t.forEach((e=>{this.list.delete(e)}))}}loadCommands(){this.getList().forEach((e=>{try{e.handle(this.ctx)}catch(e){this.ctx.log.error(e)}}))}get(e){return this.list.get(e)}getList(){return[...this.list.values()]}getIdList(){return[...this.list.keys()]}}var ct,St,dt;!function(e){e.success="success",e.info="info",e.warn="warn",e.error="error"}(ct||(ct={})),function(e){e.UPLOAD_PROGRESS="uploadProgress",e.FAILED="failed",e.BEFORE_TRANSFORM="beforeTransform",e.BEFORE_UPLOAD="beforeUpload",e.AFTER_UPLOAD="afterUpload",e.FINISHED="finished",e.INSTALL="install",e.UNINSTALL="uninstall",e.UPDATE="update",e.NOTIFICATION="notification"}(St||(St={})),function(e){e.CONFIG_CHANGE="CONFIG_CHANGE"}(dt||(dt={}));class Pt{constructor(e){this.level={[ct.success]:"green",[ct.info]:"blue",[ct.warn]:"yellow",[ct.error]:"red"},this.ctx=e}handleLog(e,...t){if(!this.ctx.getConfig("silent")){const r=q.default[this.level[e]](`[PicList ${e.toUpperCase()}]:`);console.log(r,...t),this.logLevel=this.ctx.getConfig("settings.logLevel"),this.logPath=this.ctx.getConfig("settings.logPath")||$.default.join(this.ctx.baseDir,"./piclist.log"),setTimeout((()=>{try{const r=this.checkLogFileIsLarge(this.logPath);if(r.isLarge){const e=`Log file is too large (> ${r.logFileSizeLimit/1024/1024||"10"} MB), recreate log file`;console.log(q.default.yellow("[PicList WARN]:"),e),this.recreateLogFile(this.logPath),t.unshift(e)}this.handleWriteLog(this.logPath,e,...t)}catch(e){console.error("[PicList Error] on checking log file size",e)}}),0)}}checkLogFileIsLarge(e){if(F.default.existsSync(e)){const t=F.default.statSync(e).size,r=1024*Me(this.ctx.getConfig("settings.logFileSizeLimit")||10)*1024;return{isLarge:t>r,logFileSize:t,logFileSizeLimit:r}}return{isLarge:!1}}recreateLogFile(e){F.default.existsSync(e)&&(F.default.unlinkSync(e),F.default.createFileSync(e))}handleWriteLog(e,t,...r){try{if(this.checkLogLevel(t,this.logLevel)){let n=`${X.default().format("YYYY-MM-DD HH:mm:ss")} [PicList ${t.toUpperCase()}] `;r.forEach((e=>{e instanceof Error&&"error"===t?n+=`\n------Error Stack Begin------\n${Z.default.format(null==e?void 0:e.stack)}\n-------Error Stack End------- `:("object"==typeof e&&(e=JSON.stringify(e,null,2)),n+=`${e} `)})),n+="\n",F.default.appendFileSync(e,n)}}catch(e){console.error("[PicList Error] on writing log file",e)}}checkLogLevel(e,t){return void 0===t||"all"===t||(Array.isArray(t)?t.some((t=>t===e||"all"===t)):e===t)}success(...e){return this.handleLog(ct.success,...e)}info(...e){return this.handleLog(ct.info,...e)}error(...e){return this.handleLog(ct.error,...e)}warn(...e){return this.handleLog(ct.warn,...e)}debug(...e){ye()&&this.handleLog(ct.info,...e)}}class pt extends r.EventEmitter{constructor(e){super(),this.ttfLink="https://release.piclist.cn/simhei.ttf",this.ctx=e;const t=$.default.join(e.baseDir,"piclistTemp"),r=$.default.join(e.baseDir,"imgTemp");F.default.ensureDirSync(r),F.default.emptyDirSync(t),this.ttfPath=$.default.join(e.baseDir,"assets","simhei.ttf")}async downloadTTF(){const e=$.default.dirname(this.ttfPath);if(F.default.existsSync(e)||F.default.mkdirSync(e,{recursive:!0}),F.default.existsSync(this.ttfPath))return!0;this.ctx.log.info("Download ttf file.");try{const e=await J.default.get(this.ttfLink,{responseType:"arraybuffer"});return F.default.writeFileSync(this.ttfPath,e.data),this.ctx.log.info("Download ttf file success."),!0}catch(e){return this.ctx.log.error("Download ttf file failed."),!1}}async start(e){const t=(e=>({configPath:e.configPath,baseDir:e.baseDir,log:e.log,cmd:e.cmd,output:[],input:[],rawInput:[],pluginLoader:e.pluginLoader,pluginHandler:e.pluginHandler,Request:e.Request,helper:e.helper,VERSION:e.VERSION,GUI_VERSION:e.GUI_VERSION,request:e.request,i18n:e.i18n,getConfig:e.getConfig.bind(e),saveConfig:e.saveConfig.bind(e),removeConfig:e.removeConfig.bind(e),setConfig:e.setConfig.bind(e),unsetConfig:e.unsetConfig.bind(e),upload:e.upload.bind(e),addListener:e.addListener.bind(e),on:e.on.bind(e),once:e.once.bind(e),removeListener:e.removeListener.bind(e),off:e.off.bind(e),removeAllListeners:e.removeAllListeners.bind(e),setMaxListeners:e.setMaxListeners.bind(e),getMaxListeners:e.getMaxListeners.bind(e),listeners:e.listeners.bind(e),rawListeners:e.rawListeners.bind(e),emit:e.emit.bind(e),listenerCount:e.listenerCount.bind(e),prependListener:e.prependListener.bind(e),prependOnceListener:e.prependOnceListener.bind(e),eventNames:e.eventNames.bind(e)}))(this.ctx);try{if(!Array.isArray(e))throw new Error("Input must be an array.");t.input=e,t.rawInputPath=[],t.rawInput=A.cloneDeep(e),t.output=[];const r=t.getConfig("buildIn.compress"),n=t.getConfig("picBed.uploader")||t.getConfig("picBed.current")||"smms";!t.helper.uploader.get(n)&&r?r.picBed="smms":r&&(r.picBed=n);const a=t.getConfig("buildIn.watermark");if(r||a){const e=$.default.join(t.baseDir,"piclistTemp");F.default.existsSync(e)||F.default.mkdirSync(e);const n="Add watermark to image",i="Compress or convert image";await Promise.allSettled(t.input.map((async(s,o)=>{var l,E,u,I,_,c,S;let d;if(de(s)){if(t.rawInputPath[o]=s,d=await Ce(s,t),!d.success||!d.buffer)throw new Error(d.reason);{let S;if(Ke(a,null!==(l=d.extname)&&void 0!==l?l:"")){await this.downloadTTF()?(t.log.info(n),S=await $e(d.buffer,a,this.ttfPath)):this.ctx.log.warn("Download ttf file failed, skip add watermark.")}if(ke(r,null!==(E=d.extname)&&void 0!==E?E:"")&&(t.log.info(i),S=await We(null!=S?S:d.buffer,r,null!==(u=d.extname)&&void 0!==u?u:"")),!S&&(null==r?void 0:r.isRemoveExif)&&(t.log.info("Remove exif info."),S=await qe(d.buffer,null!==(I=d.extname)&&void 0!==I?I:"")),S){let n;n=(null==r?void 0:r.isConvert)?null!==(_=null==r?void 0:r.convertFormat)&&void 0!==_?_:"jpg":null!==(c=d.extname)&&void 0!==c?c:"",n=n.startsWith(".")?n:`.${n}`;const a=$.default.join(e,`${d.fileName?`${$.default.basename(d.fileName,$.default.extname(d.fileName))}${n}`:(new Date).getTime()}${n}`);t.rawInputPath[o]=$.default.join($.default.dirname(s),$.default.basename(a)),F.default.writeFileSync(a,S),t.input[o]=a}}}else{let l;if(t.rawInputPath[o]=s,Ke(a,$.default.extname(s))){await this.downloadTTF()?(t.log.info(n),l=await $e(F.default.readFileSync(s),a,this.ttfPath)):this.ctx.log.warn("Download ttf file failed, skip add watermark.")}if(ke(r,$.default.extname(s)))if(t.log.info(i),".heic"===$.default.extname(s)||".heif"===$.default.extname(s)){const t=F.default.readFileSync(s),n=await ee.default({buffer:t,format:"JPEG",quality:1}),a=$.default.join(e,`${$.default.basename(s,$.default.extname(s))}.jpg`);F.default.writeFileSync(a,Buffer.from(n)),l=await We(F.default.readFileSync(a),r,".jpg")}else l=await We(null!=l?l:F.default.readFileSync(s),r,$.default.extname(s));if(!l&&(null==r?void 0:r.isRemoveExif)&&(t.log.info("Remove exif info."),l=await qe(F.default.readFileSync(s),$.default.extname(s))),l){let n;n=(null==r?void 0:r.isConvert)?null!==(S=null==r?void 0:r.convertFormat)&&void 0!==S?S:"jpg":$.default.extname(s),n=n.startsWith(".")?n:`.${n}`;const a=$.default.join(e,`${$.default.basename(s,$.default.extname(s))}${n}`);t.rawInputPath[o]=$.default.join($.default.dirname(s),`${$.default.basename(s,$.default.extname(s))}${n}`),F.default.writeFileSync(a,l),t.input[o]=a}}})))}else for(const e of t.input)t.rawInputPath.push(e);await this.beforeTransform(t),await this.doTransform(t);const i=t.getConfig("buildIn.rename")||{};if(i.enable){const e=i.format||"{filename}";t.output=t.output.map(((r,n)=>{let a=r.fileName;return e&&(a=Se(t.rawInputPath[n],e),a=a.replace(/\/+/g,"/"),"/"===a.slice(-1)&&(a+=n.toString())),r.fileName=a,r}))}return await this.beforeUpload(t),await this.doUpload(t),t.input=t.rawInput,await this.afterUpload(t),t}catch(e){if(t.log.warn(St.FAILED),t.emit(St.UPLOAD_PROGRESS,-1),t.emit(St.FAILED,e),t.log.error(e),t.getConfig("debug"))throw e;return t}}async beforeTransform(e){return e.emit(St.UPLOAD_PROGRESS,0),e.emit(St.BEFORE_TRANSFORM,e),e.log.info("Before transform"),await this.handlePlugins(e.helper.beforeTransformPlugins,e),e}async doTransform(e){e.emit(St.UPLOAD_PROGRESS,30);const t=e.getConfig("picBed.transformer")||"path";let r=t,n=e.helper.transformer.get(t);return n||(n=e.helper.transformer.get("path"),r="path",e.log.warn(`Can't find transformer - ${t}, switch to default transformer - path`)),e.log.info(`Transforming... Current transformer is [${r}]`),await(null==n?void 0:n.handle(e)),e}async beforeUpload(e){return e.emit(St.UPLOAD_PROGRESS,60),e.log.info("Before upload"),e.emit(St.BEFORE_UPLOAD,e),await this.handlePlugins(e.helper.beforeUploadPlugins,e),e}async doUpload(e){let t=e.getConfig("picBed.uploader")||e.getConfig("picBed.current")||"smms",r=e.helper.uploader.get(t),n=t;r||(t="smms",n="smms",r=e.helper.uploader.get("smms"),e.log.warn(`Can't find uploader - ${t}, switch to default uploader - smms`)),e.log.info(`Uploading... Current uploader is [${n}]`),await(null==r?void 0:r.handle(e));for(const r of e.output)r.type=t;return e}async afterUpload(e){e.emit(St.AFTER_UPLOAD,e),e.emit(St.UPLOAD_PROGRESS,100),await this.handlePlugins(e.helper.afterUploadPlugins,e);let t="";const r=e.output.length,n=!0===e.getConfig("settings.encodeOutputURL");for(let a=0;a<r;a++)void 0!==e.output[a].imgUrl&&(t+=n?pe(e.output[a].imgUrl):e.output[a].imgUrl,a!==r-1&&(t+="\n")),delete e.output[a].base64Image,delete e.output[a].buffer;return e.emit(St.FINISHED,e),e.log.success(`\n${t}`),e}async handlePlugins(e,t){const r=e.getList(),n=e.getIdList(),a=e.getName();return await Promise.all(r.map((async(e,r)=>{try{t.log.info(`${a}: ${n[r]} running`),await e.handle(t)}catch(e){throw t.log.error(`${a}: ${n[r]} error`),e}}))),t}}const gt=(e,t,r,n="")=>({method:"POST",url:`https://${n||"sm.ms"}/api/v2/upload`,headers:{contentType:"multipart/form-data","User-Agent":"PicList",Authorization:r},formData:{smfile:{value:t,options:{filename:e}},ssl:"true"}}),ft=async e=>{const t=e.getConfig("picBed.smms");if(!t)throw new Error("Can not find smms config!");const r=e.output;for(const n of r)if(n.fileName&&n.buffer){let r=n.buffer;!r&&n.base64Image&&(r=Buffer.from(n.base64Image,"base64"));const a=gt(n.fileName,r,null==t?void 0:t.token,null==t?void 0:t.backupDomain);try{const t=await e.request(a),r=JSON.parse(t);if("success"===r.code)delete n.base64Image,delete n.buffer,n.imgUrl=r.data.url,n.hash=r.data.hash;else{if("image_repeated"!==r.code||"string"!=typeof r.images)throw e.emit(St.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:r.message}),new Error(r.message);delete n.base64Image,delete n.buffer,n.imgUrl=r.images}}catch(t){throw e.log.error(t),t}}return e},Ct=e=>{const t=e.getConfig("picBed.smms")||{};return[{name:"token",message:"api token",type:"password",get alias(){return e.i18n.translate("PICBED_SMMS_TOKEN")},default:t.token||"",required:!0},{name:"backupDomain",type:"input",get prefix(){return e.i18n.translate("PICBED_SMMS_BACKUP_DOMAIN")},get message(){return e.i18n.translate("PICBED_SMMS_MESSAGE_BACKUP_DOMAIN")},get alias(){return e.i18n.translate("PICBED_SMMS_BACKUP_DOMAIN")},default:t.backupDomain||"",required:!1}]};const At=(e,t)=>{const r=e.secretId,n=e.secretKey,a=e.appId,i=e.bucket;let s,o="";if(e.version&&"v4"!==e.version){const r=Math.floor((new Date).getTime()/1e3);o=`${r};${r+86400}`;const a=k.default.createHmac("sha1",n).update(o).digest("hex"),i=e.endpoint?e.endpoint:`cos.${e.area}.myqcloud.com`,l=`put\n/${e.path}${t}\n\nhost=${e.bucket}.${i}\n`,E=`sha1\n${o}\n${k.default.createHash("sha1").update(l).digest("hex")}\n`;s=k.default.createHmac("sha1",a).update(E).digest("hex")}else{const e=Math.floor(1e10*Math.random()),t=Math.floor((new Date).getTime()/1e3)-1,o=`a=${a}&b=${i}&k=${r}&e=${t+3600}&t=${t}&r=${e}&f=`,l=k.default.createHmac("sha1",n).update(o).digest(),E=Buffer.concat([l,Buffer.from(o)]);s=Buffer.from(E).toString("base64")}return{signature:s,appId:a,bucket:i,signTime:o}},mt=(e,t,r,n,a)=>{const i=e.area,s=e.path;if(e.version&&"v4"!==e.version){const i=e.endpoint?e.endpoint:`cos.${e.area}.myqcloud.com`;return{method:"PUT",url:`http://${e.bucket}.${i}/${encodeURIComponent(s)}${encodeURIComponent(t)}`,headers:{Host:`${e.bucket}.${i}`,Authorization:`q-sign-algorithm=sha1&q-ak=${e.secretId}&q-sign-time=${r.signTime}&q-key-time=${r.signTime}&q-header-list=host&q-url-param-list=&q-signature=${r.signature}`,contentType:te.default.lookup(t)||"application/octet-stream","User-Agent":`PicGo;${a};null;null`},body:n,resolveWithFullResponse:!0}}return{method:"POST",url:`http://${i}.file.myqcloud.com/files/v2/${r.appId}/${r.bucket}/${encodeURI(s)}${t}`,headers:{Host:`${i}.file.myqcloud.com`,Authorization:r.signature,contentType:"multipart/form-data","User-Agent":`PicGo;${a};null;null`},formData:{op:"upload",filecontent:n},resolveWithFullResponse:!0}},Tt=async e=>{var t,r,n,a;const i=e.getConfig("picBed.tcyun");if(!i)throw new Error("Can't find tencent COS config");try{const s=e.output,o=i.customUrl,l=null!==(t=i.path)&&void 0!==t?t:"",E=!i.version||"v4"===i.version;for(const t of s)if(t.fileName&&t.buffer){const s=At(i,t.fileName);if(!s)return!1;let u=t.buffer;!u&&t.base64Image&&(u=Buffer.from(t.base64Image,"base64"));const I=mt(i,t.fileName,s,u,e.GUI_VERSION||e.VERSION),_=await e.request(I).then((e=>e)).catch((t=>({statusCode:400,body:{msg:e.i18n.translate("AUTH_FAILED"),err:t}})));let c;if(c=E&&"string"==typeof _?JSON.parse(_):_,400===c.statusCode)throw(null===(r=null==c?void 0:c.body)||void 0===r?void 0:r.err)?c.body.err:new Error((null===(n=null==c?void 0:c.body)||void 0===n?void 0:n.msg)||(null===(a=null==c?void 0:c.body)||void 0===a?void 0:a.message));const S=i.options||"",d=void 0!==i.slim&&!!i.slim;if(E&&"SUCCESS"===c.message)delete t.base64Image,delete t.buffer,t.imgUrl=o?`${o}/${l}${t.fileName}`:`${c.data.source_url}${S}`;else{if(E||!c||200!==c.statusCode)throw new Error(_.body.msg);if(delete t.base64Image,delete t.buffer,o)t.imgUrl=`${o}/${encodeURIComponent(l)}${encodeURIComponent(t.fileName)}${S}`.replace(/%2F/g,"/");else{const e=i.endpoint?i.endpoint:`cos.${i.area}.myqcloud.com`;t.imgUrl=`https://${i.bucket}.${e}/${encodeURIComponent(l)}${encodeURIComponent(t.fileName)}${S}`.replace(/%2F/g,"/")}}d&&(t.imgUrl+=S?"&imageSlim":"?imageSlim")}return e}catch(t){if(!i.version||"v4"===i.version)try{const r=JSON.parse(t.error);e.emit(St.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("UPLOAD_FAILED_REASON",{code:r.code}),text:"https://cloud.tencent.com/document/product/436/8432"})}catch(e){}throw t}},Dt=e=>{const t=e.getConfig("picBed.tcyun")||{};return[{name:"version",type:"list",alias:e.i18n.translate("PICBED_TENCENTCLOUD_VERSION"),choices:["v4","v5"],default:"v5",required:!1},{name:"secretId",type:"input",get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_SECRETID")},default:t.secretId||"",required:!0},{name:"secretKey",type:"password",get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_SECRETKEY")},default:t.secretKey||"",required:!0},{name:"bucket",type:"input",get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_BUCKET")},default:t.bucket||"",required:!0},{name:"appId",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_APPID")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_APPID")},default:t.appId||"",get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_APPID")},required:!0},{name:"area",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_AREA")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_AREA")},default:t.area||"",get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_AREA")},required:!0},{name:"endpoint",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_ENDPOINT")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_ENDPOINT")},default:t.endpoint||"",get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_ENDPOINT")},required:!1},{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_PATH")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_PATH")},default:t.path||"",get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_PATH")},required:!1},{name:"customUrl",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_CUSTOMURL")},default:t.customUrl||"",get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_CUSTOMURL")},required:!1},{name:"options",type:"input",default:t.options||"",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_OPTIONS")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_OPTIONS")},get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_OPTIONS")},required:!1},{name:"slim",type:"confirm",default:void 0!==t.slim&&!!t.slim,get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_SLIM")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_SLIM")},required:!1,get confirmText(){return e.i18n.translate("PICBED_TENCENTCLOUD_SLIM_CONFIRM")},get cancelText(){return e.i18n.translate("PICBED_TENCENTCLOUD_SLIM_CANCEL")},get tips(){return e.i18n.translate("PICBED_TENCENTCLOUD_SLIM_TIP")}}]};const ht=(e,t,r)=>{const n=t.path||"",{token:a,repo:i}=t;return{method:"PUT",url:`https://api.github.com/repos/${i}/contents/${encodeURI(n)}${encodeURIComponent(e)}`.replace(/%2F/g,"/"),headers:{Authorization:`token ${a}`,"User-Agent":"PicList","Content-Type":te.default.lookup(e)||"application/octet-stream"},body:r,json:!0}},Lt=(e,t)=>{const r=t.path||"",{token:n,repo:a,branch:i}=t;return{method:"GET",url:`https://api.github.com/repos/${a}/contents/${encodeURI(r)}${encodeURIComponent(e)}?ref=${i}`.replace(/%2F/g,"/"),headers:{Authorization:`token ${n}`,"User-Agent":"PicGo"},json:!0}},Ut=async e=>{const t=e.getConfig("picBed.github");if(!t)throw new Error("Can't find github config");try{const r=e.output,n=t.path||"";for(const a of r)if(a.fileName&&a.buffer){const r=a.base64Image||Buffer.from(a.buffer).toString("base64"),i={message:"Upload by PicList",branch:t.branch,content:r,path:n+encodeURI(a.fileName)},s=ht(a.fileName,t,i);try{const r=await e.request(s);if(!r)throw new Error("Server error, please try again");delete a.base64Image,delete a.buffer,t.customUrl?a.imgUrl=`${t.customUrl}/${encodeURIComponent(n)}${encodeURIComponent(a.fileName)}`.replace(/%2F/g,"/"):a.imgUrl=r.content.download_url,a.hash=r.content.sha}catch(r){if(422!==r.statusCode)throw r;{delete a.base64Image,delete a.buffer;const r=await e.request(Lt(a.fileName,t));if(!Object.keys(r).length)throw new Error("Get Contents error, please try again");a.hash=r.sha,t.customUrl?a.imgUrl=`${t.customUrl}/${encodeURIComponent(n)}${encodeURIComponent(a.fileName)}`.replace(/%2F/g,"/"):a.imgUrl=r.download_url}}}return e}catch(t){throw e.emit(St.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS_AND_NETWORK")}),t}},Nt=e=>{const t=e.getConfig("picBed.github")||{};return[{name:"repo",type:"input",get prefix(){return e.i18n.translate("PICBED_GITHUB_REPO")},get alias(){return e.i18n.translate("PICBED_GITHUB_REPO")},get message(){return e.i18n.translate("PICBED_GITHUB_MESSAGE_REPO")},default:t.repo||"",required:!0},{name:"branch",type:"input",get prefix(){return e.i18n.translate("PICBED_GITHUB_BRANCH")},get alias(){return e.i18n.translate("PICBED_GITHUB_BRANCH")},get message(){return e.i18n.translate("PICBED_GITHUB_MESSAGE_BRANCH")},default:t.branch||"master",required:!0},{name:"token",type:"password",get alias(){return e.i18n.translate("PICBED_GITHUB_TOKEN")},default:t.token||"",required:!0},{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_GITHUB_PATH")},get alias(){return e.i18n.translate("PICBED_GITHUB_PATH")},get message(){return e.i18n.translate("PICBED_GITHUB_MESSAGE_PATH")},default:t.path||"",required:!1},{name:"customUrl",type:"input",get prefix(){return e.i18n.translate("PICBED_GITHUB_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_GITHUB_CUSTOMURL")},get message(){return e.i18n.translate("PICBED_GITHUB_MESSAGE_CUSTOMURL")},default:t.customUrl||"",required:!1}]};function Rt(e,t,r,n){const a=function(e){return"z0"===e?"":"-"+e}(e.area||"z0"),i=e.path||"";return{method:"POST",url:`http://upload${a}.qiniup.com/putb64/-1/key/${Buffer.from(i+t,"utf-8").toString("base64").replace(/\+/g,"-").replace(/\//g,"_")}`,headers:{Authorization:`UpToken ${r}`,"Content-Type":te.default.lookup(t)||"application/octet-stream"},body:n}}function Bt(e){const t=e.accessKey,r=e.secretKey,n=new re.default.auth.digest.Mac(t,r),a={scope:e.bucket};return new re.default.rs.PutPolicy(a).uploadToken(n)}const Ot=async e=>{const t=e.getConfig("picBed.qiniu");if(!t)throw new Error("Can't find qiniu config");try{const r=e.output;for(const n of r)if(n.fileName&&n.buffer){const r=n.base64Image||Buffer.from(n.buffer).toString("base64"),a=Rt(t,n.fileName,Bt(t),r),i=await e.request(a),s=JSON.parse(i);if(!(null==s?void 0:s.key))throw e.emit(St.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:s.msg}),e.log.error("qiniu error",s),new Error("Upload failed");{delete n.base64Image,delete n.buffer;const e=t.url,r=t.options||"";n.imgUrl=`${e}/${s.key}${r}`}}return e}catch(t){if("Upload failed"!==t.message&&t.response){const r=t.response.body;e.emit(St.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:r.error})}throw t}},Mt=e=>{const t=e.getConfig("picBed.qiniu")||{};return[{name:"accessKey",type:"input",get alias(){return e.i18n.translate("PICBED_QINIU_ACCESSKEY")},default:t.accessKey||"",required:!0},{name:"secretKey",type:"password",get alias(){return e.i18n.translate("PICBED_QINIU_SECRETKEY")},default:t.secretKey||"",required:!0},{name:"bucket",type:"input",get alias(){return e.i18n.translate("PICBED_QINIU_BUCKET")},default:t.bucket||"",required:!0},{name:"url",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_URL")},get alias(){return e.i18n.translate("PICBED_QINIU_URL")},get message(){return e.i18n.translate("PICBED_QINIU_MESSAGE_URL")},default:t.url||"",required:!0},{name:"area",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_AREA")},get alias(){return e.i18n.translate("PICBED_QINIU_AREA")},get message(){return e.i18n.translate("PICBED_QINIU_MESSAGE_AREA")},default:t.area||"",required:!0},{name:"options",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_OPTIONS")},get alias(){return e.i18n.translate("PICBED_QINIU_OPTIONS")},get message(){return e.i18n.translate("PICBED_QINIU_MESSAGE_OPTIONS")},default:t.options||"",required:!1},{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_PATH")},get alias(){return e.i18n.translate("PICBED_QINIU_PATH")},get message(){return e.i18n.translate("PICBED_QINIU_MESSAGE_PATH")},default:t.path||"",required:!1}]};const yt=async(e,t,r,n)=>{const a=t.clientId||"",i=t.username||"",s=(e=>e?e.startsWith("Bearer")?e:`Bearer ${e}`:"")(t.accessToken||""),o=t.album||"";let l;if(i&&s)l=s;else{if(!a)throw new Error("clientId or accessToken is required");l=`Client-ID ${a}`}const E={method:"POST",url:"https://api.imgur.com/3/image",headers:{Authorization:l,"content-type":"multipart/form-data",Host:"api.imgur.com","User-Agent":"PicList"},formData:{image:n,type:"base64",name:r,description:"Uploaded with PicList"}};if(i&&s&&o){let r,n=0,a="";do{const s={method:"GET",url:`https://api.imgur.com/3/account/${i}/albums/${n}`,headers:{Authorization:l},json:!0,resolveWithFullResponse:!0,timeout:1e4};if(t.proxy&&(s.proxy=t.proxy),r=await e.request(s),200!==r.statusCode||!r.body.success)throw new Error("Server error, please try again");const E=r.body.data;for(const e of E)if(e.title===o){a=e.id;break}n++}while(r.body.data.length>0);a&&E.formData&&(E.formData.album=a)}return t.proxy&&(E.proxy=t.proxy),E},wt=async e=>{var t;const r=e.getConfig("picBed.imgur");if(!r)throw new Error("Can't find imgur config");try{const t=e.output;for(const n of t)if(n.fileName&&n.buffer){const t=n.base64Image||Buffer.from(n.buffer).toString("base64"),a=await yt(e,r,n.fileName,t),i=await e.request(a),s="string"==typeof i?JSON.parse(i):i;if(!s.success)throw new Error("Server error, please try again");delete n.base64Image,delete n.buffer,n.imgUrl=s.data.link,n.hash=s.data.deletehash}return e}catch(r){throw e.emit(St.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS_AND_NETWORK"),text:"http://docs.imgur.com/api/errno/"}),(null===(t=null==r?void 0:r.response)||void 0===t?void 0:t.data)||r}},Gt=e=>{const t=e.getConfig("picBed.imgur")||{};return[{name:"clientId",type:"input",get prefix(){return e.i18n.translate("PICBED_IMGUR_CLIENTID")},get alias(){return e.i18n.translate("PICBED_IMGUR_CLIENTID")},get message(){return e.i18n.translate("PICBED_IMGUR_MESSAGE_CLIENTID")},default:t.clientId||"",required:!1},{name:"username",type:"input",get prefix(){return e.i18n.translate("PICBED_IMGUR_USERNAME")},get alias(){return e.i18n.translate("PICBED_IMGUR_USERNAME")},get message(){return e.i18n.translate("PICBED_IMGUR_MESSAGE_USERNAME")},default:t.username||"",required:!1},{name:"accessToken",type:"input",get prefix(){return e.i18n.translate("PICBED_IMGUR_ACCESS_TOKEN")},get alias(){return e.i18n.translate("PICBED_IMGUR_ACCESS_TOKEN")},get message(){return e.i18n.translate("PICBED_IMGUR_MESSAGE_ACCESS_TOKEN")},default:t.accessToken||"",required:!1},{name:"album",type:"input",get prefix(){return e.i18n.translate("PICBED_IMGUR_ALBUM")},get alias(){return e.i18n.translate("PICBED_IMGUR_ALBUM")},get message(){return e.i18n.translate("PICBED_IMGUR_MESSAGE_ALBUM")},default:t.album||"",required:!1},{name:"proxy",type:"input",get prefix(){return e.i18n.translate("PICBED_IMGUR_PROXY")},get alias(){return e.i18n.translate("PICBED_IMGUR_PROXY")},get message(){return e.i18n.translate("PICBED_IMGUR_MESSAGE_PROXY")},default:t.proxy||"",required:!1}]};const bt=(e,t)=>{const r=(new Date).toUTCString(),n=`PUT\n\n${te.default.lookup(t)||"application/octet-stream"}\n${r}\n/${e.bucket}/${e.path}${t}`,a=k.default.createHmac("sha1",e.accessKeySecret).update(n).digest("base64");return`OSS ${e.accessKeyId}:${a}`},xt=(e,t,r,n)=>({method:"PUT",url:`https://${e.bucket}.${e.area}.aliyuncs.com/${encodeURI(e.path)}${encodeURIComponent(t)}`.replace(/%2F/g,"/"),headers:{Host:`${e.bucket}.${e.area}.aliyuncs.com`,Authorization:r,Date:(new Date).toUTCString(),"Content-Type":te.default.lookup(t)},body:n,resolveWithFullResponse:!0}),Ft=async e=>{var t;const r=e.getConfig("picBed.aliyun");if(!r)throw new Error("Can't find aliYun OSS config");r.path=r.path.replace(/\/*$/,"").replace(/^\/*/,"")+"/","/"===r.path&&(r.path="");try{const n=e.output,a=r.customUrl,i=null!==(t=r.path)&&void 0!==t?t:"";for(const t of n)if(t.fileName&&t.buffer){const n=bt(r,t.fileName);let s=t.buffer;!s&&t.base64Image&&(s=Buffer.from(t.base64Image,"base64"));const o=xt(r,t.fileName,n,s);if(200!==(await e.request(o)).statusCode)throw new Error("Upload failed");{delete t.base64Image,delete t.buffer;const e=r.options||"";t.imgUrl=a?`${a}/${encodeURIComponent(i)}${encodeURIComponent(t.fileName)}${e}`.replace(/%2F/g,"/"):`https://${r.bucket}.${r.area}.aliyuncs.com/${encodeURIComponent(i)}${encodeURIComponent(t.fileName)}${e}`.replace(/%2F/g,"/")}}return e}catch(t){throw e.emit(St.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")}),t}},$t=e=>{const t=e.getConfig("picBed.aliyun")||{};return[{name:"accessKeyId",type:"input",get alias(){return e.i18n.translate("PICBED_ALICLOUD_ACCESSKEYID")},default:t.accessKeyId||"",required:!0},{name:"accessKeySecret",type:"password",get alias(){return e.i18n.translate("PICBED_ALICLOUD_ACCESSKEYSECRET")},default:t.accessKeySecret||"",required:!0},{name:"bucket",type:"input",get alias(){return e.i18n.translate("PICBED_ALICLOUD_BUCKET")},default:t.bucket||"",required:!0},{name:"area",type:"input",get prefix(){return e.i18n.translate("PICBED_ALICLOUD_AREA")},get alias(){return e.i18n.translate("PICBED_ALICLOUD_AREA")},default:t.area||"",get message(){return e.i18n.translate("PICBED_ALICLOUD_MESSAGE_AREA")},required:!0},{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_ALICLOUD_PATH")},get alias(){return e.i18n.translate("PICBED_ALICLOUD_PATH")},get message(){return e.i18n.translate("PICBED_ALICLOUD_MESSAGE_PATH")},default:t.path||"",required:!1},{name:"customUrl",type:"input",get prefix(){return e.i18n.translate("PICBED_ALICLOUD_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_ALICLOUD_CUSTOMURL")},get message(){return e.i18n.translate("PICBED_ALICLOUD_MESSAGE_CUSTOMURL")},default:t.customUrl||"",required:!1},{name:"options",type:"input",get prefix(){return e.i18n.translate("PICBED_ALICLOUD_OPTIONS")},get alias(){return e.i18n.translate("PICBED_ALICLOUD_OPTIONS")},get message(){return e.i18n.translate("PICBED_ALICLOUD_MESSAGE_OPTIONS")},default:t.options||"",required:!1}]};const Ht=(e,t)=>{const r=e.path||"",n=e.operator,a=e.password,i=ne.default(a),s=(new Date).toUTCString(),o=`PUT&${`/${e.bucket}/${encodeURI(r)}${encodeURIComponent(t)}`.replace(/%2F/g,"/")}&${s}`;return`UPYUN ${n}:${k.default.createHmac("sha1",i).update(o).digest("base64")}`},Wt=(e,t,r,n)=>{const a=e.bucket,i=e.path||"";return{method:"PUT",url:`https://v0.api.upyun.com/${a}/${encodeURI(i)}${encodeURIComponent(t)}`.replace(/%2F/g,"/"),headers:{Authorization:r,Date:(new Date).toUTCString(),"Content-Type":te.default.lookup(t)||"application/octet-stream"},body:n,resolveWithFullResponse:!0}},vt=(e,t,r,n)=>{const a=`/${encodeURI(r.path||"")}${encodeURIComponent(n)}`.replace(/%2F/g,"/").replace(/^\/+/g,"/"),i=Math.round((new Date).getTime()/1e3),s=t?i+parseInt(t.toString(),10):i+1800;return`_upt=${`${ne.default(`${e}&${s}&${a}`).substring(12,20)}${s}`}`},Kt=async e=>{const t=e.getConfig("picBed.upyun");if(!t)throw new Error("Can't find upYun config");try{const r=e.output,n=t.path||"";for(const a of r)if(a.fileName&&a.buffer){let r=a.buffer;!r&&a.base64Image&&(r=Buffer.from(a.base64Image,"base64"));const i=Ht(t,a.fileName),s=Wt(t,a.fileName,i,r),o=t.options||"";if(200!==(await e.request(s)).statusCode)throw new Error("Upload failed");if(delete a.base64Image,delete a.buffer,a.imgUrl=`${t.url}/${encodeURIComponent(n)}${encodeURIComponent(a.fileName)}${o}`.replace(/%2F/g,"/"),t.antiLeechToken){const e=vt(t.antiLeechToken,t.expireTime,t,a.fileName);a.imgUrl=a.imgUrl.includes("?")?`${a.imgUrl}&${e}`:`${a.imgUrl}?${e}`}}return e}catch(t){if("Upload failed"===t.message)e.emit(St.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")});else{const r=Oe(t.error);e.emit(St.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("UPLOAD_FAILED_REASON",{code:"object"==typeof r?r.code:r}),text:"http://docs.upyun.com/api/errno/"})}throw t}},kt=e=>{const t=e.getConfig("picBed.upyun")||{};return[{name:"bucket",type:"input",get alias(){return e.i18n.translate("PICBED_UPYUN_BUCKET")},default:t.bucket||"",required:!0},{name:"operator",type:"input",get alias(){return e.i18n.translate("PICBED_UPYUN_OPERATOR")},get prefix(){return e.i18n.translate("PICBED_UPYUN_OPERATOR")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_OPERATOR")},default:t.operator||"",required:!0},{name:"password",type:"password",get prefix(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_PASSWORD")},get alias(){return e.i18n.translate("PICBED_UPYUN_PASSWORD")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_PASSWORD")},default:t.password||"",required:!0},{name:"url",type:"input",get alias(){return e.i18n.translate("PICBED_UPYUN_URL")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_URL")},default:t.url||"",required:!0},{name:"options",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_OPTIONS")},get alias(){return e.i18n.translate("PICBED_UPYUN_OPTIONS")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_OPTIONS")},default:t.options||"",required:!1},{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_PATH")},get alias(){return e.i18n.translate("PICBED_UPYUN_PATH")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_PATH")},default:t.path||"",required:!1},{name:"antiLeechToken",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_ANTI_LEECH_TOKEN")},get alias(){return e.i18n.translate("PICBED_UPYUN_ANTI_LEECH_TOKEN")},get message(){return e.i18n.translate("PICBED_UPYUN_ANTI_LEECH_TOKEN")},default:t.antiLeechToken||"",required:!1},{name:"expireTime",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_EXPIRE_TIME")},get alias(){return e.i18n.translate("PICBED_UPYUN_EXPIRE_TIME")},get message(){return e.i18n.translate("PICBED_UPYUN_EXPIRE_TIME")},default:t.expireTime||"",required:!1}]};const qt=async(e,t,r,n)=>{const a=[...t.path.replace(/\/+$/g,"").split("/"),...$.default.dirname(r).split("/")];let i="";for(const r of a)if(r){i+=`/${r}`;const n={method:"MKCOL",url:`${t.host}${encodeURI(i)}`.replace(/%2F/g,"/"),headers:{Authorization:`Basic ${Buffer.from(`${t.username}:${t.password}`).toString("base64")}`}};try{await e.request(n)}catch(e){console.log(e)}}return{method:"PUT",url:`${t.host}/${"/"===t.path?"":encodeURI(t.path)}${encodeURIComponent(r)}`.replace(/%2F/g,"/"),headers:{Authorization:`Basic ${Buffer.from(`${t.username}:${t.password}`).toString("base64")}`,"Content-Type":te.default.lookup(r)||"application/octet-stream","Content-Length":n.length},body:n,resolveWithFullResponse:!0}},Yt=async e=>{const t=e.getConfig("picBed.webdavplist");if(!t)throw new Error("Can't find webdavplist config");t.host=t.host.replace(/^https?:\/\/|\/+$/g,""),t.host=(t.sslEnabled?"https://":"http://")+t.host,t.path=(t.path||"").replace(/^\/+|\/+$/g,"")+"/";const r=(t.webpath||"").replace(/^\/+|\/+$/g,"")+"/";try{const n=e.output,a=t.customUrl,i=t.path;for(const s of n)if(s.fileName&&s.buffer){let n=s.buffer;!n&&s.base64Image&&(n=Buffer.from(s.base64Image,"base64"));const o=await qt(e,t,s.fileName,n),l=await e.request(o);if(!(l.statusCode>=200&&l.statusCode<300))throw new Error("Upload failed");{const o=$.default.join(e.baseDir,"imgTemp");F.default.ensureDirSync($.default.dirname($.default.join(o,s.fileName))),F.default.writeFileSync($.default.join(o,s.fileName),n),delete s.base64Image,delete s.buffer;const l=a||t.host;t.webpath?s.imgUrl=`${l}/${"/"===r?"":encodeURIComponent(r)}${encodeURIComponent(s.fileName)}`.replace(/%2F/g,"/"):s.imgUrl=`${l}/${"/"===i?"":encodeURIComponent(i)}${encodeURIComponent(s.fileName)}`.replace(/%2F/g,"/"),s.galleryPath=`http://localhost:36699/${encodeURIComponent(s.fileName)}`}}return e}catch(t){throw e.emit(St.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")}),t}},jt=e=>{var t;const r=e.getConfig("picBed.webdavplist")||{};return[{name:"host",type:"input",get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_HOST")},default:r.host||"",required:!0},{name:"sslEnabled",type:"confirm",get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_SSLENABLED")},required:!1,default:null!==(t=r.sslEnabled)&&void 0!==t&&t,get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_SSLENABLED")},get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_SSLENABLED")}},{name:"username",type:"input",get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_USERNAME")},default:r.username||"",required:!0,get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_USERNAME")},get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_USERNAME")}},{name:"password",type:"password",get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_PASSWORD")},default:r.password||"",required:!0,get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_PASSWORD")},get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_PASSWORD")}},{name:"path",type:"input",get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_PATH")},default:r.path||"",required:!1,get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_PATH")},get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_PATH")}},{name:"webpath",type:"input",get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_WEBSITE_PATH")},default:r.path||"",required:!1,get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_WEBSITE_PATH")},get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_WEBSITE_PATH")}},{name:"customUrl",type:"input",get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_CUSTOMURL")},default:r.customUrl||"",required:!1,get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_CUSTOMURL")},get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_CUSTOMURL")}}]};const Vt=async e=>{const t=e.getConfig("picBed.local");if(!t)throw new Error("Can not find local config!");const r=t.path||"";let n=t.customUrl||"";n&&(n=n.replace(/\/$/,""));let a=t.webPath||"";a&&(a=a.replace(/\\/g,"/").replace(/^\//,"").replace(/\/$/,""));const i=e.output;for(const t of i)if(t.fileName&&t.buffer){let i=t.buffer;!i&&t.base64Image&&(i=Buffer.from(t.base64Image,"base64"));try{try{F.default.ensureDirSync(r),F.default.writeFileSync($.default.join(r,t.fileName),i),F.default.copyFileSync($.default.join(r,t.fileName),$.default.join(e.baseDir,"imgTemp",t.fileName)),delete t.base64Image,delete t.buffer,t.imgUrl=n?a?`${n}/${encodeURIComponent(a)}/${encodeURIComponent(t.fileName)}`.replace(/%2F/g,"/"):`${n}/${encodeURIComponent(t.fileName)}`.replace(/%2F/g,"/"):$.default.join(r,t.fileName),t.hash=$.default.join(r,t.fileName),t.galleryPath=`http://localhost:36699/${encodeURIComponent(t.fileName)}`}catch(t){throw e.emit(St.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:"failed to upload image"}),new Error("failed to upload image")}}catch(t){throw e.log.error(t),t}}return e},zt=e=>{const t=e.getConfig("picBed.local")||{};return[{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_LOCAL_PATH")},get alias(){return e.i18n.translate("PICBED_LOCAL_PATH")},default:t.path||"",get message(){return e.i18n.translate("PICBED_LOCAL_MESSAGE_PATH")},required:!0},{name:"customUrl",type:"input",get prefix(){return e.i18n.translate("PICBED_LOCAL_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_LOCAL_CUSTOMURL")},default:t.customUrl||"",get message(){return e.i18n.translate("PICBED_LOCAL_MESSAGE_CUSTOMURL")},required:!1},{name:"webPath",type:"input",get alias(){return e.i18n.translate("PICBED_LOCAL_WEBPATH")},default:t.webPath||"",required:!1,get prefix(){return e.i18n.translate("PICBED_LOCAL_WEBPATH")},get message(){return e.i18n.translate("PICBED_LOCAL_MESSAGE_WEBPATH")}}]};class Qt{constructor(){this._isConnected=!1}static get instance(){return this._instance||(this._instance=new this)}static get client(){return this._client||(this._client=new L.NodeSSH)}changeWinStylePathToUnix(e){return e.replace(/\\/g,"/")}async connect(e){const{username:t,password:r,privateKey:n,passphrase:a}=e,i=n?{username:t,privateKeyPath:n,passphrase:a||void 0}:{username:t,password:r};try{return await Qt.client.connect(Object.assign({host:e.host,port:Number(e.port)||22},i)),this._isConnected=!0,!0}catch(e){throw new Error(e)}}async upload(e,t,r){if(!this._isConnected)throw new Error("SSH 未连接");try{t=this.changeWinStylePathToUnix(t),await this.mkdir($.default.dirname(t).replace(/^\/+|\/+$/g,""),r),await Qt.client.putFile(e,t);const n=r.fileMode||"0644";if("0644"!==n){const e=`chmod ${n} "${t}"`;return await this.exec(e)}return!0}catch(e){return!1}}async mkdir(e,t){if(!Qt.client.isConnected())throw new Error("SSH 未连接");const r=t.dirMode||"0755";if("0755"!==r){const t=e.split("/");let n="";for(const e of t)if(e){n+=`/${e}`;const t=`mkdir "${n}" && chmod ${r} "${n}"`;await this.exec(t)}}else{const t=`mkdir -p "${e}"`;await this.exec(t)}}async chown(e,t,r){e=this.changeWinStylePathToUnix(e);const[n,a]=r?[t,r]:t.includes(":")?t.split(":"):[t,t],i=`chown ${n}:${a} "${e}"`;return this.exec(i)}async exec(e){return 0===(await Qt.client.execCommand(e)).code}close(){Qt.client.dispose(),this._isConnected=!1}}const Xt=async e=>{const t=e.getConfig("picBed.sftpplist");if(!t)throw new Error("Can not find sftpplist config!");t.port=Number(t.port)||22,t.uploadPath=(t.uploadPath||"").replace(/^\/+|\/+$/g,"")+"/";const r=(t.webPath||"").replace(/^\/+|\/+$/g,"")+"/";try{const n=e.output;for(const a of n)if(a.fileName&&a.buffer){let n=a.buffer;!n&&a.base64Image&&(n=Buffer.from(a.base64Image,"base64"));const i=$.default.join(e.baseDir,"uploadTemp"),s=$.default.join(e.baseDir,"imgTemp","sftpplist");F.default.ensureDirSync(i),F.default.ensureDirSync(s);const o=$.default.join(i,a.fileName);F.default.writeFileSync(o,n);const l=Qt.instance;await l.connect(t);const E=$.default.join(`/${t.uploadPath}`.replace(/\/\/+/g,"/"),a.fileName);await l.upload(o,E,t),t.fileUser&&await l.chown(E,t.fileUser),delete a.base64Image,delete a.buffer;const u=t.customUrl||t.host;t.webPath?a.imgUrl=`${u}/${"/"===r?"":encodeURIComponent(r)}${encodeURIComponent(a.fileName)}`.replace(/%2F/g,"/"):a.imgUrl=`${u}/${"/"===t.uploadPath?"":encodeURIComponent(t.uploadPath)}${encodeURIComponent(a.fileName)}`.replace(/%2F/g,"/"),F.default.moveSync(o,$.default.join(s,a.fileName)),a.galleryPath=`http://localhost:36699/sftpplist/${encodeURIComponent(a.fileName)}`,l.close()}return e}catch(t){throw e.emit(St.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")}),t}},Zt=e=>{const t=e.getConfig("picBed.sftpplist")||{};return[{name:"host",type:"input",get alias(){return e.i18n.translate("PICBED_SFTPPLIST_HOST")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_HOST")},default:t.host||"",required:!0},{name:"port",type:"input",get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_PORT")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_PORT")},default:t.port||22,required:!1},{name:"username",type:"input",get alias(){return e.i18n.translate("PICBED_SFTPPLIST_USERNAME")},default:t.username||"",required:!0},{name:"password",type:"input",get alias(){return e.i18n.translate("PICBED_SFTPPLIST_PASSWORD")},default:t.password||"",required:!1},{name:"privateKey",type:"input",get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_PRIVATEKEY")},default:t.privateKey||"",required:!1},{name:"passphrase",type:"input",get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY_PASSPHRASE")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_PRIVATEKEY_PASSPHRASE")},default:t.passphrase||"",required:!1},{name:"uploadPath",type:"input",get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_UPLOADPATH")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_UPLOADPATH")},default:t.uploadPath||"",required:!1},{name:"customUrl",type:"input",get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_CUSTOMURL")},default:t.customUrl||"",required:!1},{name:"webPath",type:"input",get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_WEBSITE_PATH")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_WEBSITE_PATH")},default:t.webPath||"",required:!1},{name:"fileUser",type:"input",get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_FILE_USER")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_FILE_USER")},default:t.fileUser||"",required:!1},{name:"fileMode",type:"input",get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_FILE_MODE")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_FILE_MODE")},default:t.fileMode||"",required:!1},{name:"dirMode",type:"input",get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_DIR_MODE")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_DIR_MODE")},default:t.dirMode||"",required:!1}]};const Jt=()=>({register(e){!function(e){e.helper.uploader.register("aliyun",{get name(){return e.i18n.translate("PICBED_ALICLOUD")},handle:Ft,config:$t})}(e),function(e){e.helper.uploader.register("tcyun",{get name(){return e.i18n.translate("PICBED_TENCENTCLOUD")},handle:Tt,config:Dt})}(e),function(e){e.helper.uploader.register("smms",{get name(){return e.i18n.translate("PICBED_SMMS")},handle:ft,config:Ct})}(e),function(e){e.helper.uploader.register("github",{get name(){return e.i18n.translate("PICBED_GITHUB")},handle:Ut,config:Nt})}(e),function(e){e.helper.uploader.register("qiniu",{get name(){return e.i18n.translate("PICBED_QINIU")},handle:Ot,config:Mt})}(e),function(e){e.helper.uploader.register("imgur",{get name(){return e.i18n.translate("PICBED_IMGUR")},handle:wt,config:Gt})}(e),function(e){e.helper.uploader.register("upyun",{get name(){return e.i18n.translate("PICBED_UPYUN")},handle:Kt,config:kt})}(e),function(e){e.helper.uploader.register("webdavplist",{get name(){return e.i18n.translate("PICBED_WEBDAVPLIST")},handle:Yt,config:jt})}(e),function(e){e.helper.uploader.register("local",{get name(){return e.i18n.translate("PICBED_LOCAL")},handle:Vt,config:zt})}(e),function(e){e.helper.uploader.register("sftpplist",{get name(){return e.i18n.translate("PICBED_SFTPPLIST")},handle:Xt,config:Zt})}(e)}}),er=(e,t,r)=>{const n=ge(t);return n.real||("string"==typeof r?e.log.warn(`can't get ${r}'s image size`):e.log.warn("can't get image size"),e.log.warn("fallback to 200 * 200")),n};var tr={handle:async e=>{const t=e.output;return await Promise.all(e.input.map((async(r,n)=>{let a;if(a=Buffer.isBuffer(r)?{success:!0,buffer:r,fileName:"",extname:""}:de(r)?await Ce(r,e):await fe(r),a.success&&a.buffer){const i=er(e,a.buffer,r),s=a.extname||i.extname||".png";t[n]={buffer:a.buffer,fileName:a.fileName||`${X.default().format("YYYYMMDDHHmmss")}${s}}`,width:i.width,height:i.height,extname:a.extname}}else e.log.error(a.reason)}))),e.output=t.filter((e=>e)),e}};var rr={handle:async e=>(e.output.push(...e.input),e)};class nr{constructor(e){this.list=[],this.fullList=new Set,this.pluginMap=new Map,this.ctx=e,this.init()}init(){const e=$.default.join(this.ctx.baseDir,"package.json");if(!F.default.existsSync(e)){const t={name:"picgo-plugins",description:"picgo-plugins",repository:"https://github.com/PicGo/PicGo-Core",license:"MIT"};F.default.writeFileSync(e,JSON.stringify(t),"utf8")}}resolvePlugin(e,t){try{return ae.default.sync(t,{basedir:e.baseDir})}catch(r){return $.default.join(e.baseDir,"node_modules",t)}}load(){const e=$.default.join(this.ctx.baseDir,"package.json"),t=$.default.join(this.ctx.baseDir,"node_modules/");if(!F.default.existsSync(t))return!1;const r=F.default.readJSONSync(e),n=Object.keys(r.dependencies||{}),a=Object.keys(r.devDependencies||{}),i=n.concat(a).filter((e=>{if(!/^picgo-plugin-|^@[^/]+\/picgo-plugin-/.test(e))return!1;const t=this.resolvePlugin(this.ctx,e);return F.default.existsSync(t)}));for(const e of i)this.registerPlugin(e);return!0}registerPlugin(e,t){if(e&&"string"==typeof e){this.fullList.add(e);try{if(t){this.list.push(e),It(e);const r=t(this.ctx);this.pluginMap.set(e,r),r.register(this.ctx)}else if(!0===this.ctx.getConfig(`picgoPlugins.${e}`)||void 0===this.ctx.getConfig(`picgoPlugins.${e}`)){this.list.push(e),It(e),this.getPlugin(e).register(this.ctx);const t=`picgoPlugins[${e}]`;this.ctx.saveConfig({[t]:!0})}}catch(t){this.pluginMap.delete(e),this.list=this.list.filter((t=>t!==e)),this.fullList.delete(e),this.ctx.log.error(t),this.ctx.emit(St.NOTIFICATION,{title:`Plugin ${e} Load Error`,body:t})}}else this.ctx.log.warn("Please provide valid plugin")}unregisterPlugin(e){this.list=this.list.filter((t=>t!==e)),this.fullList.delete(e),this.pluginMap.delete(e),It(e),this.ctx.helper.uploader.unregister(e),this.ctx.helper.transformer.unregister(e),this.ctx.helper.beforeTransformPlugins.unregister(e),this.ctx.helper.beforeUploadPlugins.unregister(e),this.ctx.helper.afterUploadPlugins.unregister(e),this.ctx.cmd.unregister(e),this.ctx.removeConfig("picgoPlugins",e)}getPlugin(e){if(this.pluginMap.has(e))return this.pluginMap.get(e);const t=$.default.join(this.ctx.baseDir,"node_modules/"),r=require(t+e)(this.ctx);return this.pluginMap.set(e,r),r}getList(){return this.list}hasPlugin(e){return this.fullList.has(e)}getFullList(){return[...this.fullList]}}const ar={darwin:'-- From https://github.com/mushanshitiancai/vscode-paste-image\r\nproperty fileTypes : {{«class PNGf», ".png"}}\r\n\r\non run argv\r\n\tif argv is {} then\r\n\t\treturn ""\r\n\tend if\r\n\r\n\tif ((clipboard info) as string) contains "«class furl»" then\r\n\t\treturn POSIX path of (the clipboard as «class furl»)\r\n\telse\r\n\t\tset imagePath to (item 1 of argv)\r\n\t\tset theType to getType()\r\n\r\n\t\tif theType is not missing value then\r\n\t\t\ttry\r\n\t\t\t\tset myFile to (open for access imagePath with write permission)\r\n\t\t\t\tset eof myFile to 0\r\n\t\t\t\twrite (the clipboard as (first item of theType)) to myFile\r\n\t\t\t\tclose access myFile\r\n\t\t\t\treturn (POSIX path of imagePath)\r\n\t\t\ton error\r\n\t\t\t\ttry\r\n\t\t\t\t\tclose access myFile\r\n\t\t\t\tend try\r\n\t\t\t\treturn "no image"\r\n\t\t\tend try\r\n\t\telse\r\n\t\t\treturn "no image"\r\n\t\tend if\r\n\tend if\r\nend run\r\n\r\non getType()\r\n\trepeat with aType in fileTypes\r\n\t\trepeat with theInfo in (clipboard info)\r\n\t\t\tif (first item of theInfo) is equal to (first item of aType) then return aType\r\n\t\tend repeat\r\n\tend repeat\r\n\treturn missing value\r\nend getType\r\n',win32:'\r\nparam($imagePath)\r\n\r\n# Adapted from https://github.com/octan3/img-clipboard-dump/blob/master/dump-clipboard-png.ps1\r\n\r\nAdd-Type -Assembly PresentationCore\r\n$img = [Windows.Clipboard]::GetImage()\r\n\r\nif ($img -eq $null) {\r\n "no image"\r\n Exit 1\r\n}\r\n\r\nif (-not $imagePath) {\r\n "no image"\r\n Exit 1\r\n}\r\n\r\n$fcb = new-object Windows.Media.Imaging.FormatConvertedBitmap($img, [Windows.Media.PixelFormats]::Rgb24, $null, 0)\r\n$stream = [IO.File]::Open($imagePath, "OpenOrCreate")\r\n$encoder = New-Object Windows.Media.Imaging.PngBitmapEncoder\r\n$encoder.Frames.Add([Windows.Media.Imaging.BitmapFrame]::Create($fcb)) | out-null\r\n$encoder.Save($stream) | out-null\r\n$stream.Dispose() | out-null\r\n\r\n$imagePath\r\n',win10:'# Adapted from https://github.com/octan3/img-clipboard-dump/blob/master/dump-clipboard-png.ps1\r\nparam($imagePath)\r\n\r\n# https://github.com/PowerShell/PowerShell/issues/7233\r\n# fix the output encoding bug\r\n[console]::InputEncoding = [console]::OutputEncoding = New-Object System.Text.UTF8Encoding\r\n\r\nAdd-Type -Assembly PresentationCore\r\nfunction main {\r\n $img = [Windows.Clipboard]::GetImage()\r\n\r\n if ($img -eq $null) {\r\n "no image"\r\n Exit 1\r\n }\r\n\r\n if (-not $imagePath) {\r\n "no image"\r\n Exit 1\r\n }\r\n\r\n $fcb = new-object Windows.Media.Imaging.FormatConvertedBitmap($img, [Windows.Media.PixelFormats]::Rgb24, $null, 0)\r\n $stream = [IO.File]::Open($imagePath, "OpenOrCreate")\r\n $encoder = New-Object Windows.Media.Imaging.PngBitmapEncoder\r\n $encoder.Frames.Add([Windows.Media.Imaging.BitmapFrame]::Create($fcb)) | out-null\r\n $encoder.Save($stream) | out-null\r\n $stream.Dispose() | out-null\r\n\r\n $imagePath\r\n # fix windows 10 native cmd crash bug when "picgo upload"\r\n # https://github.com/PicGo/PicGo-Core/issues/32\r\n Exit 1\r\n}\r\n\r\ntry {\r\n # For WIN10\r\n $file = Get-Clipboard -Format FileDropList\r\n if ($file -ne $null) {\r\n Convert-Path $file\r\n Exit 1\r\n }\r\n} catch {\r\n # For WIN7 WIN8 WIN10\r\n main\r\n}\r\n\r\nmain',linux:'#!/bin/sh\r\n\r\nif [ -z "$DISPLAY" ]; then\r\n echo "no support" >&2\r\n exit 1\r\nfi\r\n\r\ncase "$XDG_SESSION_TYPE" in\r\nwayland)\r\n command -v wl-copy >/dev/null 2>&1 || {\r\n echo >&2 "no wl-clipboard"\r\n exit 1\r\n }\r\n filePath=$(wl-copy -o 2>/dev/null | grep ^file:// | cut -c8-)\r\n if [ -z "$filePath" ]; then\r\n if\r\n wl-copy -t image/png image/png -o >"$1" 2>/dev/null\r\n then\r\n echo "$1"\r\n else\r\n rm -f "$1"\r\n echo "no image"\r\n fi\r\n else\r\n echo "$filePath"\r\n fi\r\n ;;\r\nx11 | tty)\r\n # require xclip(see http://stackoverflow.com/questions/592620/check-if-a-program-exists-from-a-bash-script/677212#677212)\r\n command -v xclip >/dev/null 2>&1 || {\r\n echo >&2 "no xclip"\r\n exit 1\r\n }\r\n # write image in clipboard to file (see http://unix.stackexchange.com/questions/145131/copy-image-from-clipboard-to-file)\r\n filePath=$(xclip -selection clipboard -o 2>/dev/null | grep ^file:// | cut -c8-)\r\n if [ -z "$filePath" ]; then\r\n if\r\n xclip -selection clipboard -target image/png -o >"$1" 2>/dev/null\r\n then\r\n echo "$1"\r\n else\r\n rm -f "$1"\r\n echo "no image"\r\n fi\r\n else\r\n echo "$filePath"\r\n fi\r\n ;;\r\nesac\r\n',wsl:'#!/bin/sh\r\n# grab the paths\r\nscriptPath=$(echo $0 | awk \'{ print substr( $0, 1, length($0)-6 ) }\')"windows10.ps1"\r\nimagePath=$(echo $1 | awk \'{ print substr( $0, 1, length($0)-18 ) }\')\r\nimageName=$(echo $1 | awk \'{ print substr( $0, length($0)-17, length($0) ) }\')\r\n\r\n# run the powershell script\r\nres=$(powershell.exe -noprofile -noninteractive -nologo -sta -executionpolicy unrestricted -file $(wslpath -w $scriptPath) $(wslpath -w $imagePath)"\\\\"$imageName)\r\n\r\n# note that there is a return symbol in powershell result\r\nnoImage=$(echo "no image\\r")\r\n\r\n# check whether image exists\r\nif [ "$res" = "$noImage" ] ;then\r\n echo "no image"\r\nelse\r\n echo $(wslpath -u -a "${res}")\r\nfi\r\n'},ir={darwin:"mac.applescript",win32:"windows.ps1",win10:"windows10.ps1",linux:"linux.sh",wsl:"wsl.sh"};const sr=async e=>{!function(e){const t=$.default.join(e.baseDir,"piclist-clipboard-images");F.default.existsSync(t)||F.default.mkdirSync(t)}(e);const t=$.default.join(e.baseDir,"piclist-clipboard-images",`${X.default().format("YYYYMMDDHHmmss")}.png`);return await new Promise(((r,n)=>{const a=(()=>{const e=process.platform;if(ie.default)return"wsl";if("win32"===e)return"10"===H.default.release().split(".")[0]?"win10":"win32";return"darwin"===e?"darwin":"linux"})(),i=$.default.join(e.baseDir,ir[a]);let s;F.default.existsSync(i)||F.default.writeFileSync(i,ar[a],"utf8"),s="darwin"===a?N.spawn("osascript",[i,t]):"win32"===a||"win10"===a?N.spawn("powershell",["-noprofile","-noninteractive","-nologo","-sta","-executionpolicy","unrestricted","-file",i,t]):N.spawn("sh",[i,t]),s.stdout.on("data",(i=>{if("linux"===a&&"no xclip or wl-clipboard"===i.toString().trim())return e.emit(St.NOTIFICATION,{title:"xclip or wl-clipboard not found",body:"Please install xclip(for x11) or wl-clipboard(for wayland) before run picgo"}),n(new Error("Please install xclip(for x11) or wl-clipboard(for wayland) before run picgo"));const s=i.toString().trim();let o=!1;if($.default.basename(s)!==$.default.basename(t)&&F.default.existsSync(s)&&(o=!0),"no image"!==s&&!F.default.existsSync(s))return n(new Error(`Can't find ${s}`));r({imgPath:s,shouldKeepAfterUploading:o})}))}))},or=new r.EventEmitter,lr=new oe.default.Agent({maxVersion:"TLSv1.2",minVersion:"TLSv1.2"});function Er(e,t,r){"object"==typeof r&&"value"in r&&"options"in r?e.append(t,r.value,r.options):e.append(t,r)}function ur(e){return Object.assign(Object.assign({},e),{statusCode:e.status,body:e.data})}function Ir(e){var t,r,n,a,i,s,o;const l={method:(null===(r=null===(t=null==e?void 0:e.config)||void 0===t?void 0:t.method)||void 0===r?void 0:r.toUpperCase())||"",url:(null===(n=null==e?void 0:e.config)||void 0===n?void 0:n.url)||"",statusCode:(null===(a=null==e?void 0:e.response)||void 0===a?void 0:a.status)||0,message:(null==e?void 0:e.message)||"",stack:(null==e?void 0:e.stack)||{},response:{status:(null===(i=null==e?void 0:e.response)||void 0===i?void 0:i.status)||0,statusCode:(null===(s=null==e?void 0:e.response)||void 0===s?void 0:s.status)||0,body:(null===(o=null==e?void 0:e.response)||void 0===o?void 0:o.data)||""}};return Promise.reject(l)}class _r{constructor(e){this.proxy="",this.options={},this.ctx=e,this.init(),or.on(dt.CONFIG_CHANGE,(e=>{var t;switch(e.configName){case"picBed":(null===(t=e.value)||void 0===t?void 0:t.proxy)&&(this.proxy=e.value.proxy);break;case"picBed.proxy":this.proxy=e.value}}))}init(){const e=this.ctx.getConfig("picBed.proxy");e&&(this.proxy=e)}handleProxy(){if(this.proxy)try{const e=new o.URL(this.proxy);return{host:e.hostname,port:parseInt(e.port||"0",10),protocol:e.protocol}}catch(e){}return!1}request(e){var t;this.options.proxy=this.handleProxy(),this.options.headers=e.headers||{},this.options.maxBodyLength=1/0,this.options.maxContentLength=1/0,this.options.proxy&&(null===(t=e.url)||void 0===t?void 0:t.startsWith("https://"))?(this.options.httpsAgent=le.default.httpsOverHttp({proxy:{host:this.options.proxy.host,port:this.options.proxy.port}}),this.options.proxy=!1):this.options.httpsAgent=lr;const r=J.default.create(this.options);r.interceptors.response.use(ur,Ir);const n=function(e){var t;let r=!1;const n=Object.assign(Object.assign({},e),{url:e.url||"",headers:e.headers||{}});if(e.proxy){let a=e.proxy;if("string"==typeof a){try{a=new o.URL(e.proxy)}catch(e){a=!1,n.proxy=!1,console.error(e)}r=!0}a&&((null===(t=e.url)||void 0===t?void 0:t.startsWith("https://"))?(n.proxy=!1,n.httpsAgent=le.default.httpsOverHttp({proxy:{host:null==a?void 0:a.hostname,port:parseInt(null==a?void 0:a.port,10)}})):n.proxy={host:a.hostname,port:parseInt(a.port,10),protocol:"http"})}if("formData"in e){const t=new se.default;for(const r in e.formData)Er(t,r,e.formData[r]);n.data=t,n.headers=Object.assign(n.headers||{},t.getHeaders()),r=!0,delete n.formData}return"body"in e&&(n.data=e.body,r=!0,delete n.body),"qs"in e&&(n.params=e.qs,r=!0),n.__isOldOptions=r,n}(e);return r.interceptors.request.use((function(e){var t,r,n;let a="";return(null===(t=null==e?void 0:e.headers)||void 0===t?void 0:t.contentType)?(a=e.headers.contentType,delete e.headers.contentType):(null===(r=null==e?void 0:e.headers)||void 0===r?void 0:r.ContentType)?(a=e.headers.ContentType,delete e.headers.ContentType):(null===(n=null==e?void 0:e.headers)||void 0===n?void 0:n["content-type"])&&(a=e.headers["content-type"],delete e.headers["content-type"]),""!==a&&e.headers&&(e.headers["Content-Type"]=a),e})),"resolveWithFullResponse"in e&&e.resolveWithFullResponse?r.request(n):r.request(n).then((t=>n.__isOldOptions?"json"in e?e.json?t.data:void 0:JSON.stringify(t.data):t.data))}}class cr{constructor(e){if(this.ctx=e,this.db=new y.JSONStore(this.ctx.configPath),!this.db.has("picBed"))try{this.db.set("picBed",{uploader:"smms",current:"smms"})}catch(e){throw this.ctx.log.error(e),e}if(!this.db.has("picgoPlugins"))try{this.db.set("picgoPlugins",{})}catch(e){throw this.ctx.log.error(e),e}}read(e){return this.db.read(e)}get(e=""){return this.read(!0),this.db.get(e)}set(e,t){return this.read(!0),this.db.set(e,t)}has(e){return this.read(!0),this.db.has(e)}unset(e,t){return this.read(!0),this.db.unset(e,t)}saveConfig(e){Object.keys(e).forEach((t=>{this.set(t,e[t])}))}removeConfig(e){Object.keys(e).forEach((t=>{this.unset(t,e[t])}))}}class Sr{constructor(e){this.ctx=e}async install(e,t={},r){const n=[],a=e.map((e=>dr(this.ctx,e))).filter((e=>this.ctx.pluginLoader.hasPlugin(e.pkgName)?(n.push(e.pkgName),this.ctx.log.success(`PicGo has already installed ${e.pkgName}`),!1):!!e.success)),i=a.map((e=>e.fullName)),s=a.map((e=>e.pkgName));if(i.length>0){const e=await this.execCommand("install",i,this.ctx.baseDir,t,r);if(e.code){const t=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_REASON",{code:`${e.code}`,data:e.data});this.ctx.log.error(t),this.ctx.emit("installFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED"),body:t});return{success:!1,body:t}}s.forEach((e=>{this.ctx.pluginLoader.registerPlugin(e)})),this.ctx.log.success(this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS")),this.ctx.emit("installSuccess",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS"),body:[...s,...n]});return{success:!0,body:[...s,...n]}}if(0===n.length){const e=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_VALID");this.ctx.log.error(e),this.ctx.emit("installFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED"),body:e});return{success:!1,body:e}}this.ctx.log.success(this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS")),this.ctx.emit("installSuccess",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS"),body:[...s,...n]});return{success:!0,body:[...s,...n]}}async uninstall(e){const t=e.map((e=>dr(this.ctx,e))).filter((e=>e.success)).map((e=>e.pkgName));if(t.length>0){const e=await this.execCommand("uninstall",t,this.ctx.baseDir);if(e.code){const t=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_REASON",{code:`${e.code}`,data:e.data});this.ctx.log.error(t),this.ctx.emit("uninstallFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED"),body:t});return{success:!1,body:t}}t.forEach((e=>{this.ctx.pluginLoader.unregisterPlugin(e)})),this.ctx.log.success(this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_SUCCESS")),this.ctx.emit("uninstallSuccess",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_SUCCESS"),body:t});return{success:!0,body:t}}{const e=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_VALID");this.ctx.log.error(e),this.ctx.emit("uninstallFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED"),body:e});return{success:!1,body:e}}}async update(e,t={},r){const n=e.map((e=>dr(this.ctx,e))).filter((e=>e.success)).map((e=>e.pkgName));if(n.length>0){const e=await this.execCommand("update",n,this.ctx.baseDir,t,r);if(e.code){const t=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_REASON",{code:`${e.code}`,data:e.data});this.ctx.log.error(t),this.ctx.emit("updateFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED"),body:t});return{success:!1,body:t}}this.ctx.log.success(this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_SUCCESS")),this.ctx.emit("updateSuccess",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_SUCCESS"),body:n});return{success:!0,body:n}}{const e=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_VALID");this.ctx.log.error(e),this.ctx.emit("updateFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED"),body:e});return{success:!1,body:e}}}async execCommand(e,t,r,n={},a={}){const i=n.registry||this.ctx.getConfig("settings.registry"),s=n.proxy||this.ctx.getConfig("settings.proxy");return await new Promise((n=>{var o,l;let E=[e].concat(t).concat("--color=always").concat("--save");i&&(E=E.concat(`--registry=${i}`)),s&&(E=E.concat(`--proxy=${s}`));try{const e=Ee.default("npm",E,{cwd:r,env:Object.assign({},process.env,a)});let t="";null===(o=e.stdout)||void 0===o||o.on("data",(e=>{t+=e})).pipe(process.stdout),null===(l=e.stderr)||void 0===l||l.on("data",(e=>{t+=e})).pipe(process.stderr),e.on("close",(e=>{n(e?{code:e,data:t}:{code:0,data:t})})),e.on("error",(e=>{this.ctx.log.error(e),this.ctx.log.error("NPM is not installed"),this.ctx.emit(St.FAILED,"NPM is not installed")}))}catch(e){this.ctx.log.error(e),this.ctx.emit(St.FAILED,e)}}))}}const dr=(e,t)=>{const r={success:!1,fullName:"",pkgName:""},n=De(t,e.log);if(!n)return r;const a=he(n,e.log);return a?{success:!0,fullName:n,pkgName:a}:r},Pr={"zh-CN":{UPLOAD_FAILED:"上传失败",CHECK_SETTINGS:"请检查你的配置项是否正确",CHECK_SETTINGS_AND_NETWORK:"请检查你的配置项以及网络",UPLOAD_FAILED_REASON:"错误码:${code},请打开浏览器粘贴地址查看相关原因",SERVER_ERROR:"服务端出错,请重试",AUTH_FAILED:"认证失败",PICBED_SMMS:"SM.MS",PICBED_SMMS_TOKEN:"设定Token",PICBED_SMMS_BACKUP_DOMAIN:"备用上传域名",PICBED_SMMS_MESSAGE_BACKUP_DOMAIN:"例如 smms.app",PICBED_LOCAL:"本地上传",PICBED_LOCAL_PATH:"设定路径",PICBED_LOCAL_MESSAGE_PATH:"例如 /usr/local/images/",PICBED_LOCAL_CUSTOMURL:"设定自定义域名",PICBED_LOCAL_MESSAGE_CUSTOMURL:"例如 https://test.com",PICBED_LOCAL_WEBPATH:"设定网站路径",PICBED_LOCAL_MESSAGE_WEBPATH:"用于拼接网址路径",PICBED_ALICLOUD:"阿里云OSS",PICBED_ALICLOUD_ACCESSKEYID:"设定KeyId",PICBED_ALICLOUD_ACCESSKEYSECRET:"设定KeySecret",PICBED_ALICLOUD_BUCKET:"设定Bucket",PICBED_ALICLOUD_AREA:"设定存储区域",PICBED_ALICLOUD_PATH:"设定存储路径",PICBED_ALICLOUD_CUSTOMURL:"设定自定义域名",PICBED_ALICLOUD_OPTIONS:"设定网址后缀",PICBED_ALICLOUD_MESSAGE_AREA:"例如:oss-cn-beijing",PICBED_ALICLOUD_MESSAGE_PATH:"例如:test/",PICBED_ALICLOUD_MESSAGE_OPTIONS:"例如:?x-oss-process=xxx",PICBED_ALICLOUD_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_TENCENTCLOUD:"腾讯云COS",PICBED_TENCENTCLOUD_VERSION:"COS版本",PICBED_TENCENTCLOUD_SECRETID:"设定SecretId",PICBED_TENCENTCLOUD_SECRETKEY:"设定SecretKey",PICBED_TENCENTCLOUD_APPID:"设定AppId",PICBED_TENCENTCLOUD_BUCKET:"设定Bucket",PICBED_TENCENTCLOUD_AREA:"设定存储区域",PICBED_TENCENTCLOUD_ENDPOINT:"设定接入点",PICBED_TENCENTCLOUD_PATH:"设定存储路径",PICBED_TENCENTCLOUD_OPTIONS:"设定网址后缀",PICBED_TENCENTCLOUD_CUSTOMURL:"设定自定义域名",PICBED_TENCENTCLOUD_MESSAGE_APPID:"例如:1234567890",PICBED_TENCENTCLOUD_MESSAGE_AREA:"例如:ap-beijing",PICBED_TENCENTCLOUD_MESSAGE_PATH:"例如:test/",PICBED_TENCENTCLOUD_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_TENCENTCLOUD_MESSAGE_OPTIONS:"例如:?imageMogr2",PICBED_TENCENTCLOUD_MESSAGE_ENDPOINT:"例如:cos-internal.accelerate.tencentcos.cn",PICBED_TENCENTCLOUD_SLIM:"极智压缩",PICBED_TENCENTCLOUD_SLIM_TIP:"图片极智压缩,详情请参考[文档说明](https://cloud.tencent.com/document/product/436/49259)",PICBED_TENCENTCLOUD_SLIM_CONFIRM:"开启",PICBED_TENCENTCLOUD_SLIM_CANCEL:"关闭",PICBED_GITHUB:"GitHub",PICBED_GITHUB_TOKEN:"设定Token",PICBED_GITHUB_REPO:"设定仓库名",PICBED_GITHUB_PATH:"设定存储路径",PICBED_GITHUB_BRANCH:"设定分支名",PICBED_GITHUB_CUSTOMURL:"设定自定义域名",PICBED_GITHUB_MESSAGE_REPO:"格式:username/repo",PICBED_GITHUB_MESSAGE_BRANCH:"例如:main",PICBED_GITHUB_MESSAGE_PATH:"例如:test/",PICBED_GITHUB_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_QINIU:"七牛云",PICBED_QINIU_ACCESSKEY:"设定AccessKey",PICBED_QINIU_SECRETKEY:"设定SecretKey",PICBED_QINIU_BUCKET:"设定Bucket",PICBED_QINIU_PATH:"设定存储路径",PICBED_QINIU_URL:"设定访问网址",PICBED_QINIU_OPTIONS:"设定网址后缀",PICBED_QINIU_AREA:"设定存储区域",PICBED_QINIU_MESSAGE_PATH:"例如:test/",PICBED_QINIU_MESSAGE_AREA:"例如:z0",PICBED_QINIU_MESSAGE_OPTIONS:"例如:?imageslim",PICBED_QINIU_MESSAGE_URL:"例如:https://xxx.yyy.glb.clouddn.com",PICBED_IMGUR:"Imgur",PICBED_IMGUR_CLIENTID:"设定ClientId",PICBED_IMGUR_USERNAME:"设定用户名",PICBED_IMGUR_ACCESS_TOKEN:"设定accessToken",PICBED_IMGUR_ALBUM:"设定相册名",PICBED_IMGUR_PROXY:"设定代理",PICBED_IMGUR_MESSAGE_CLIENTID:"匿名上传时填写",PICBED_IMGUR_MESSAGE_USERNAME:"需要上传到账户时填写",PICBED_IMGUR_MESSAGE_ACCESS_TOKEN:"需要上传到账户时填写",PICBED_IMGUR_MESSAGE_ALBUM:"例如:test",PICBED_IMGUR_MESSAGE_PROXY:"例如:http://127.0.0.1:1080",PICBED_UPYUN:"又拍云",PICBED_UPYUN_BUCKET:"设定Bucket",PICBED_UPYUN_OPERATOR:"设定操作员",PICBED_UPYUN_PASSWORD:"设定操作员密码",PICBED_UPYUN_PATH:"设定存储路径",PICBED_UPYUN_URL:"设定加速域名",PICBED_UPYUN_OPTIONS:"设定网址后缀",PICBED_UPYUN_ANTI_LEECH_TOKEN:"设定防盗链Token",PICBED_UPYUN_EXPIRE_TIME:"设定过期时间(秒)",PICBED_UPYUN_MESSAGE_OPERATOR:"例如:me",PICBED_UPYUN_MESSAGE_PASSWORD:"输入操作员密码",PICBED_UPYUN_MESSAGE_URL:"例如:http://xxx.test.upcdn.net",PICBED_UPYUN_MESSAGE_OPTIONS:"例如:!imgslim",PICBED_UPYUN_MESSAGE_PATH:"例如:test/",PICBED_WEBDAVPLIST:"WebDAV",PICBED_WEBDAVPLIST_HOST:"设定接口网址",PICBED_WEBDAVPLIST_SSLENABLED:"启用SSL",PICBED_WEBDAVPLIST_USERNAME:"设定用户名",PICBED_WEBDAVPLIST_PASSWORD:"设定密码",PICBED_WEBDAVPLIST_PATH:"设定存储路径",PICBED_WEBDAVPLIST_WEBSITE_PATH:"设定网址路径",PICBED_WEBDAVPLIST_CUSTOMURL:"设定自定义域名",PICBED_WEBDAVPLIST_MESSAGE_HOST:"例如:https://example.com/webdav",PICBED_WEBDAVPLIST_MESSAGE_SSLENABLED:"需要HTTPS时启用",PICBED_WEBDAVPLIST_MESSAGE_USERNAME:"例如:me",PICBED_WEBDAVPLIST_MESSAGE_PASSWORD:"输入密码",PICBED_WEBDAVPLIST_MESSAGE_PATH:"例如:test/",PICBED_WEBDAVPLIST_MESSAGE_WEBSITE_PATH:"拼接网址时使用",PICBED_WEBDAVPLIST_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_SFTPPLIST:"内置SFTP",PICBED_SFTPPLIST_HOST:"设定主机",PICBED_SFTPPLIST_PORT:"设定端口",PICBED_SFTPPLIST_USERNAME:"设定用户名",PICBED_SFTPPLIST_PASSWORD:"设定密码",PICBED_SFTPPLIST_PRIVATEKEY:"设定私钥",PICBED_SFTPPLIST_PRIVATEKEY_PASSPHRASE:"设定私钥密码",PICBED_SFTPPLIST_UPLOADPATH:"设定上传路径",PICBED_SFTPPLIST_CUSTOMURL:"设定自定义域名",PICBED_SFTPPLIST_WEBSITE_PATH:"设定网站路径",PICBED_SFTPPLIST_FILE_USER:"设定文件用户:组",PICBED_SFTPPLIST_FILE_MODE:"设定文件权限",PICBED_SFTPPLIST_DIR_MODE:"设定文件夹权限",PICBED_SFTPPLIST_MESSAGE_HOST:"例如:1.1.1.3",PICBED_SFTPPLIST_MESSAGE_PORT:"默认22",PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY:"例如:/Users/xxx/.ssh/id_rsa",PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY_PASSPHRASE:"输入私钥密码",PICBED_SFTPPLIST_MESSAGE_UPLOADPATH:"例如:test/",PICBED_SFTPPLIST_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_SFTPPLIST_MESSAGE_WEBSITE_PATH:"拼接网址时使用",PICBED_SFTPPLIST_MESSAGE_FILE_USER:"例如:www:data",PICBED_SFTPPLIST_MESSAGE_FILE_MODE:"例如:0664",PICBED_SFTPPLIST_MESSAGE_DIR_MODE:"例如:0775",BUILDIN_WATERMARK_ISADDWATERMARK:"是否添加水印",BUILDIN_WATERMARK_MESSAGE_ISADDWATERMARK:"需要添加水印时启用",BUILDIN_WATERMARK_WATERMARKTYPE:"设定水印类型",BUILDIN_WATERMARK_MESSAGE_WATERMARKTYPE:"请选择水印类型",BUILDIN_WATERMARK_ISFULLSCREENWATERMARK:"是否全屏水印",BUILDIN_WATERMARK_MESSAGE_ISFULLSCREENWATERMARK:"需要全屏水印时启用",BUILDIN_WATERMARK_WATERMARKDEGREE:"设定水印角度",BUILDIN_WATERMARK_MESSAGE_WATERMARKDEGREE:"请输入数字",BUILDIN_WATERMARK_WATERMARKTEXT:"设定水印文字",BUILDIN_WATERMARK_MESSAGE_WATERMARKTEXT:"请输入水印文字",BUILDIN_WATERMARK_WATERMARKTEXTFONTPATH:"设定水印字体文件路径",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTPATH:"请输入水印字体文件路径",BUILDIN_WATERMARK_WATERMARKFONTRATIO:"设定水印相对于图片的比例",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTRATIO:"请输入0-1的小数",BUILDIN_WATERMARK_WATERMARKFONTCOLOR:"设定水印字体颜色",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTCOLOR:"请输入rgb颜色值",BUILDIN_WATERMARK_WATERMARKIMAGEPATH:"设定水印图片路径",BUILDIN_WATERMARK_MESSAGE_WATERMARKIMAGEPATH:"请输入水印图片路径",BUILDIN_WATERMARK_WATERMARKPOSITION:"设定水印位置",BUILDIN_WATERMARK_MESSAGE_WATERMARKPOSITION:"请选择水印位置",BUILDIN_RENAME_FORMAT:"设定重命名格式",BUILDIN_RENAME_ENABLE:"是否启用重命名",BUILDIN_COMPRESS_QUALITY:"设定图片质量",BUILDIN_COMPRESS_MESSAGE_QUALITY:"请输入0-100的整数",BUILDIN_COMPRESS_ISCONVERT:"是否进行格式转换",BUILDIN_COMPRESS_MESSAGE_ISCONVERT:"需要转换时启用",BUILDIN_COMPRESS_CONVERTFORMAT:"设定转换格式",BUILDIN_COMPRESS_MESSAGE_CONVERTFORMAT:"请选择转换格式",BUILDIN_COMPRESS_ISRESIZE:"是否进行图片缩放",BUILDIN_COMPRESS_MESSAGE_ISRESIZE:"需要缩放时启用",BUILDIN_COMPRESS_RESIZEWIDTH:"设定缩放宽度",BUILDIN_COMPRESS_MESSAGE_RESIZEWIDTH:"请输入数字",BUILDIN_COMPRESS_RESIZEHEIGHT:"设定缩放高度",BUILDIN_COMPRESS_MESSAGE_RESIZEHEIGHT:"请输入数字",BUILDIN_COMPRESS_ISRESIZEBYPERCENT:"是否按百分比进行缩放",BUILDIN_COMPRESS_MESSAGE_ISRESIZEBYPERCENT:"需要按百分比缩放时启用",BUILDIN_COMPRESS_RESIZEPERCENT:"设定缩放百分比",BUILDIN_COMPRESS_MESSAGE_RESIZEPERCENT:"请输入数字",BUILDIN_COMPRESS_SKIPRESIZEOFSMALLIMG:"是否跳过小图缩放",BUILDIN_COMPRESS_ISROTATE:"是否进行图片旋转",BUILDIN_COMPRESS_MESSAGE_ISROTATE:"需要旋转时启用",BUILDIN_COMPRESS_ROTATEDEGREE:"设定旋转角度",BUILDIN_COMPRESS_MESSAGE_ROTATEDEGREE:"请输入数字,可为负数",BUILDIN_COMPRESS_ISREMOVEEXIF:"是否移除EXIF信息",BUILDIN_COMPRESS_MESSAGE_ISREMOVEEXIF:"需要移除EXIF信息时启用",PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS:"插件安装成功",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED:"插件安装失败",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_REASON:"插件安装失败,失败码为${code},错误日志为 \n ${data}",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_PATH:"插件安装失败,请输入合法插件名或合法安装路径",PLUGIN_HANDLER_PLUGIN_UNINSTALL_SUCCESS:"插件卸载成功",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED:"插件卸载失败",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_REASON:"插件卸载失败,失败码为${code},错误日志为 \n ${data}",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_VALID:"插件卸载失败,请输入合法插件名",PLUGIN_HANDLER_PLUGIN_UPDATE_SUCCESS:"插件更新成功",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED:"插件更新失败",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_REASON:"插件更新失败,失败码为${code},错误日志为 \n ${data}",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_VALID:"插件更新失败,请输入合法插件名"},"zh-TW":{UPLOAD_FAILED:"上傳失敗",CHECK_SETTINGS:"請檢查你的設定是否正確",CHECK_SETTINGS_AND_NETWORK:"請檢查你的設定及網路",UPLOAD_FAILED_REASON:"錯誤碼:${code},請打開瀏覽器貼上地址查看相關原因",SERVER_ERROR:"伺服器出錯,請重試",AUTH_FAILED:"認證失敗",PICBED_SMMS:"SM.MS",PICBED_SMMS_TOKEN:"設定Token",PICBED_SMMS_BACKUP_DOMAIN:"備用上傳網址",PICBED_SMMS_MESSAGE_BACKUP_DOMAIN:"例如 smms.app",PICBED_LOCAL:"本地",PICBED_LOCAL_PATH:"設定儲存路徑",PICBED_LOCAL_MESSAGE_PATH:"例如 /usr/local/images/",PICBED_LOCAL_CUSTOMURL:"設定自訂網址",PICBED_LOCAL_MESSAGE_CUSTOMURL:"例如 https://test.com",PICBED_LOCAL_WEBPATH:"設定網址路徑",PICBED_LOCAL_MESSAGE_WEBPATH:"用于網頁顯示的路徑",PICBED_ALICLOUD:"阿里云OSS",PICBED_ALICLOUD_ACCESSKEYID:"設定KeyId",PICBED_ALICLOUD_ACCESSKEYSECRET:"設定KeySecret",PICBED_ALICLOUD_BUCKET:"設定Bucket",PICBED_ALICLOUD_AREA:"設定儲存區域",PICBED_ALICLOUD_PATH:"設定儲存路徑",PICBED_ALICLOUD_CUSTOMURL:"設定自訂網址",PICBED_ALICLOUD_OPTIONS:"設定網址後綴",PICBED_ALICLOUD_MESSAGE_AREA:"例如:oss-cn-beijing",PICBED_ALICLOUD_MESSAGE_PATH:"例如:test/",PICBED_ALICLOUD_MESSAGE_OPTIONS:"例如:?x-oss-process=xxx",PICBED_ALICLOUD_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_TENCENTCLOUD:"騰訊云COS",PICBED_TENCENTCLOUD_VERSION:"COS版本",PICBED_TENCENTCLOUD_SECRETID:"設定SecretId",PICBED_TENCENTCLOUD_SECRETKEY:"設定SecretKey",PICBED_TENCENTCLOUD_APPID:"設定AppId",PICBED_TENCENTCLOUD_BUCKET:"設定Bucket",PICBED_TENCENTCLOUD_AREA:"設定儲存區域",PICBED_TENCENTCLOUD_ENDPOINT:"設定接入點",PICBED_TENCENTCLOUD_PATH:"設定儲存路徑",PICBED_TENCENTCLOUD_OPTIONS:"設定網址後綴",PICBED_TENCENTCLOUD_CUSTOMURL:"設定自訂網址",PICBED_TENCENTCLOUD_MESSAGE_APPID:"例如:1234567890",PICBED_TENCENTCLOUD_MESSAGE_AREA:"例如:ap-beijing",PICBED_TENCENTCLOUD_MESSAGE_PATH:"例如:test/",PICBED_TENCENTCLOUD_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_TENCENTCLOUD_MESSAGE_OPTIONS:"例如:?imageMogr2",PICBED_TENCENTCLOUD_MESSAGE_ENDPOINT:"例如:cos-internal.accelerate.tencentcos.cn",PICBED_TENCENTCLOUD_SLIM:"Set ImageSlim",PICBED_TENCENTCLOUD_SLIM_TIP:"Image extremely intelligent compression, please refer to the [document description](https://cloud.tencent.com/document/product/436/49259)",PICBED_TENCENTCLOUD_SLIM_CONFIRM:"OPEN",PICBED_TENCENTCLOUD_SLIM_CANCEL:"CLOSE",PICBED_GITHUB:"GitHub",PICBED_GITHUB_TOKEN:"設定Token",PICBED_GITHUB_REPO:"設定倉庫名稱",PICBED_GITHUB_PATH:"設定儲存路徑",PICBED_GITHUB_BRANCH:"設定分支名稱",PICBED_GITHUB_CUSTOMURL:"設定自訂網址",PICBED_GITHUB_MESSAGE_REPO:"格式:username/repo",PICBED_GITHUB_MESSAGE_BRANCH:"例如:main",PICBED_GITHUB_MESSAGE_PATH:"例如:test/",PICBED_GITHUB_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_QINIU:"七牛云",PICBED_QINIU_ACCESSKEY:"設定AccessKey",PICBED_QINIU_SECRETKEY:"設定SecretKey",PICBED_QINIU_BUCKET:"設定Bucket",PICBED_QINIU_PATH:"設定儲存路徑",PICBED_QINIU_URL:"設定訪問網址",PICBED_QINIU_OPTIONS:"設定網址後綴",PICBED_QINIU_AREA:"設定儲存區域",PICBED_QINIU_MESSAGE_PATH:"例如:test/",PICBED_QINIU_MESSAGE_AREA:"例如:z0",PICBED_QINIU_MESSAGE_OPTIONS:"例如:?imageslim",PICBED_QINIU_MESSAGE_URL:"例如:https://xxx.yyy.glb.clouddn.com",PICBED_IMGUR:"Imgur",PICBED_IMGUR_CLIENTID:"設定ClientId",PICBED_IMGUR_USERNAME:"設定用戶名",PICBED_IMGUR_ACCESS_TOKEN:"設定accessToken",PICBED_IMGUR_ALBUM:"設定相簿名",PICBED_IMGUR_PROXY:"設定PROXY",PICBED_IMGUR_MESSAGE_CLIENTID:"匿名上傳時填寫",PICBED_IMGUR_MESSAGE_USERNAME:"需要上傳到賬戶時填寫",PICBED_IMGUR_MESSAGE_ACCESS_TOKEN:"需要上傳到賬戶時填寫",PICBED_IMGUR_MESSAGE_ALBUM:"例如:test",PICBED_IMGUR_MESSAGE_PROXY:"例如:http://127.0.0.1:1080",PICBED_UPYUN:"又拍云",PICBED_UPYUN_BUCKET:"設定Bucket",PICBED_UPYUN_OPERATOR:"設定操作員",PICBED_UPYUN_PASSWORD:"設定操作員密碼",PICBED_UPYUN_PATH:"設定儲存路徑",PICBED_UPYUN_URL:"設定加速網址",PICBED_UPYUN_OPTIONS:"設定網址後綴",PICBED_UPYUN_ANTI_LEECH_TOKEN:"設定防盜鏈Token",PICBED_UPYUN_EXPIRE_TIME:"設定過期時間(秒)",PICBED_UPYUN_MESSAGE_OPERATOR:"例如:me",PICBED_UPYUN_MESSAGE_PASSWORD:"輸入操作員密碼",PICBED_UPYUN_MESSAGE_URL:"例如:http://xxx.test.upcdn.net",PICBED_UPYUN_MESSAGE_OPTIONS:"例如:!imgslim",PICBED_UPYUN_MESSAGE_PATH:"例如:test/",PICBED_WEBDAVPLIST:"WebDAV",PICBED_WEBDAVPLIST_HOST:"設定API主機",PICBED_WEBDAVPLIST_SSLENABLED:"需要HTTPS時啟用",PICBED_WEBDAVPLIST_USERNAME:"設定用戶名",PICBED_WEBDAVPLIST_PASSWORD:"設定密碼",PICBED_WEBDAVPLIST_PATH:"設定儲存路徑",PICBED_WEBDAVPLIST_CUSTOMURL:"設定自訂網址",PICBED_WEBDAVPLIST_WEBSITE_PATH:"設定網站路徑",PICBED_WEBDAVPLIST_MESSAGE_HOST:"例如:https://example.com/webdav",PICBED_WEBDAVPLIST_MESSAGE_SSLENABLED:"需要HTTPS時啟用",PICBED_WEBDAVPLIST_MESSAGE_USERNAME:"例如:me",PICBED_WEBDAVPLIST_MESSAGE_PASSWORD:"輸入用戶密碼",PICBED_WEBDAVPLIST_MESSAGE_PATH:"例如:test/",PICBED_WEBDAVPLIST_MESSAGE_WEBSITE_PATH:"拼接網址時使用",PICBED_WEBDAVPLIST_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_SFTPPLIST:"內置SFTP",PICBED_SFTPPLIST_HOST:"設定主機",PICBED_SFTPPLIST_PORT:"設定端口",PICBED_SFTPPLIST_USERNAME:"設定用戶名",PICBED_SFTPPLIST_PASSWORD:"設定密碼",PICBED_SFTPPLIST_PRIVATEKEY:"設定私鑰",PICBED_SFTPPLIST_PRIVATEKEY_PASSPHRASE:"設定私鑰密碼",PICBED_SFTPPLIST_UPLOADPATH:"設定上傳路徑",PICBED_SFTPPLIST_CUSTOMURL:"設定自訂網址",PICBED_SFTPPLIST_WEBSITE_PATH:"設定網站路徑",PICBED_SFTPPLIST_FILE_USER:"設定文件用戶:組",PICBED_SFTPPLIST_FILE_MODE:"設定文件權限",PICBED_SFTPPLIST_DIR_MODE:"設定文件夾權限",PICBED_SFTPPLIST_MESSAGE_HOST:"例如:1.1.1.3",PICBED_SFTPPLIST_MESSAGE_PORT:"默認22",PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY:"例如:/Users/xxx/.ssh/id_rsa",PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY_PASSPHRASE:"輸入私鑰密碼",PICBED_SFTPPLIST_MESSAGE_UPLOADPATH:"例如:test/",PICBED_SFTPPLIST_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_SFTPPLIST_MESSAGE_WEBSITE_PATH:"拼接網址時使用",PICBED_SFTPPLIST_MESSAGE_FILE_USER:"例如:www:data",PICBED_SFTPPLIST_MESSAGE_FILE_MODE:"例如:0664",PICBED_SFTPPLIST_MESSAGE_DIR_MODE:"例如:0775",BUILDIN_WATERMARK_ISADDWATERMARK:"是否添加水印",BUILDIN_WATERMARK_MESSAGE_ISADDWATERMARK:"需要添加水印時啟用",BUILDIN_WATERMARK_WATERMARKTYPE:"設定水印類型",BUILDIN_WATERMARK_MESSAGE_WATERMARKTYPE:"請選擇水印類型",BUILDIN_WATERMARK_ISFULLSCREENWATERMARK:"是否全屏水印",BUILDIN_WATERMARK_MESSAGE_ISFULLSCREENWATERMARK:"需要全屏水印時啟用",BUILDIN_WATERMARK_WATERMARKDEGREE:"設定水印角度",BUILDIN_WATERMARK_MESSAGE_WATERMARKDEGREE:"請輸入數字",BUILDIN_WATERMARK_WATERMARKTEXT:"設定水印文字",BUILDIN_WATERMARK_MESSAGE_WATERMARKTEXT:"請輸入水印文字",BUILDIN_WATERMARK_WATERMARKTEXTFONTPATH:"設定水印字體",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTPATH:"請輸入水印字體文件路徑",BUILDIN_WATERMARK_WATERMARKFONTRATIO:"設定水印圖片比例",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTRATIO:"請輸入0-1的數字",BUILDIN_WATERMARK_WATERMARKFONTCOLOR:"設定水印字體顏色",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTCOLOR:"請輸入rgb顏色值",BUILDIN_WATERMARK_WATERMARKIMAGEPATH:"設定水印圖片路徑",BUILDIN_WATERMARK_MESSAGE_WATERMARKIMAGEPATH:"請輸入水印圖片路徑",BUILDIN_WATERMARK_WATERMARKPOSITION:"設定水印位置",BUILDIN_WATERMARK_MESSAGE_WATERMARKPOSITION:"請選擇水印位置",BUILDIN_RENAME_FORMAT:"設定重命名格式",BUILDIN_RENAME_ENABLE:"是否啟用重命名",BUILDIN_COMPRESS_QUALITY:"設定圖片質量",BUILDIN_COMPRESS_MESSAGE_QUALITY:"請輸入0-100的整數",BUILDIN_COMPRESS_ISCONVERT:"是否進行格式轉換",BUILDIN_COMPRESS_MESSAGE_ISCONVERT:"需要轉換時啟用",BUILDIN_COMPRESS_CONVERTFORMAT:"設定轉換格式",BUILDIN_COMPRESS_MESSAGE_CONVERTFORMAT:"請選擇轉換格式",BUILDIN_COMPRESS_ISRESIZE:"是否進行圖片縮放",BUILDIN_COMPRESS_MESSAGE_ISRESIZE:"需要縮放時啟用",BUILDIN_COMPRESS_RESIZEWIDTH:"設定縮放寬度",BUILDIN_COMPRESS_MESSAGE_RESIZEWIDTH:"請輸入數字",BUILDIN_COMPRESS_RESIZEHEIGHT:"設定縮放高度",BUILDIN_COMPRESS_MESSAGE_RESIZEHEIGHT:"請輸入數字",BUILDIN_COMPRESS_ISRESIZEBYPERCENT:"是否按百分比進行縮放",BUILDIN_COMPRESS_MESSAGE_ISRESIZEBYPERCENT:"需要按百分比縮放時啟用",BUILDIN_COMPRESS_RESIZEPERCENT:"設定縮放百分比",BUILDIN_COMPRESS_MESSAGE_RESIZEPERCENT:"請輸入数字",BUILDIN_COMPRESS_SKIPRESIZEOFSMALLIMG:"是否跳過小圖縮放",BUILDIN_COMPRESS_ISROTATE:"是否進行圖片旋轉",BUILDIN_COMPRESS_MESSAGE_ISROTATE:"需要旋轉時啟用",BUILDIN_COMPRESS_ROTATEDEGREE:"設定旋轉角度",BUILDIN_COMPRESS_MESSAGE_ROTATEDEGREE:"請輸入數字,可為負數",BUILDIN_COMPRESS_ISREMOVEEXIF:"是否移除EXIF資訊",BUILDIN_COMPRESS_MESSAGE_ISREMOVEEXIF:"需要移除EXIF資訊時啟用",PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS:"插件安裝成功",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED:"插件安裝失敗",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_REASON:"插件安裝失敗,失敗碼為${code},錯誤紀錄為 \n ${data}",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_PATH:"插件安裝失敗,請輸入正確的插件名稱或正確的安裝路徑",PLUGIN_HANDLER_PLUGIN_UNINSTALL_SUCCESS:"插件卸載成功",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED:"插件卸載失敗",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_REASON:"插件卸載失敗,失敗碼為${code},錯誤紀錄為 \n ${data}",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_VALID:"插件卸載失敗,請輸入正確的插件名稱",PLUGIN_HANDLER_PLUGIN_UPDATE_SUCCESS:"插件更新成功",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED:"插件更新失敗",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_REASON:"插件更新失敗,失敗碼為${code},錯誤紀錄為 \n ${data}",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_VALID:"插件更新失敗,請輸入正確的插件名稱"},en:{UPLOAD_FAILED:"Upload failed",CHECK_SETTINGS:"Please check your settings",CHECK_SETTINGS_AND_NETWORK:"Please check your settings and network",UPLOAD_FAILED_REASON:"Error code: ${code}, please open the browser and paste the address to see the reason",SERVER_ERROR:"Server error, please try again later",AUTH_FAILED:"Authentication failed",PICBED_SMMS:"SM.MS",PICBED_SMMS_TOKEN:"Set Token",PICBED_SMMS_BACKUP_DOMAIN:"Set Backup Upload Domain",PICBED_SMMS_MESSAGE_BACKUP_DOMAIN:"Ex. smms.app",PICBED_LOCAL:"Local",PICBED_LOCAL_PATH:"Set Path",PICBED_LOCAL_MESSAGE_PATH:"Ex. /Users/name/Pictures/",PICBED_LOCAL_CUSTOMURL:"Set Custom URL",PICBED_LOCAL_MESSAGE_CUSTOMURL:"Ex. https://test.com",PICBED_LOCAL_WEBPATH:"Set Web Path",PICBED_LOCAL_MESSAGE_WEBPATH:"Used to generate url path",PICBED_ALICLOUD:"Ali Cloud",PICBED_ALICLOUD_ACCESSKEYID:"Set KeyId",PICBED_ALICLOUD_ACCESSKEYSECRET:"Set KeySecret",PICBED_ALICLOUD_BUCKET:"Set Bucket",PICBED_ALICLOUD_AREA:"Set Area",PICBED_ALICLOUD_PATH:"Set Path",PICBED_ALICLOUD_CUSTOMURL:"Set Custom URL",PICBED_ALICLOUD_OPTIONS:"Set URL Suffix",PICBED_ALICLOUD_MESSAGE_AREA:"Ex. oss-cn-beijing",PICBED_ALICLOUD_MESSAGE_PATH:"Ex. test/",PICBED_ALICLOUD_MESSAGE_OPTIONS:"Ex. ?x-oss-process=xxx",PICBED_ALICLOUD_MESSAGE_CUSTOMURL:"Ex. https://test.com",PICBED_TENCENTCLOUD:"Tencent Cloud",PICBED_TENCENTCLOUD_VERSION:"Choose COS version",PICBED_TENCENTCLOUD_SECRETID:"Set SecretId",PICBED_TENCENTCLOUD_SECRETKEY:"Set SecretKey",PICBED_TENCENTCLOUD_APPID:"Set AppId",PICBED_TENCENTCLOUD_BUCKET:"Set Bucket",PICBED_TENCENTCLOUD_AREA:"Set Area",PICBED_TENCENTCLOUD_ENDPOINT:"Set Endpoint",PICBED_TENCENTCLOUD_PATH:"Set Path",PICBED_TENCENTCLOUD_OPTIONS:"Set URL Suffix",PICBED_TENCENTCLOUD_CUSTOMURL:"Set Custom URL",PICBED_TENCENTCLOUD_MESSAGE_APPID:"Ex. 1234567890",PICBED_TENCENTCLOUD_MESSAGE_AREA:"Ex. ap-beijing",PICBED_TENCENTCLOUD_MESSAGE_PATH:"Ex. test/",PICBED_TENCENTCLOUD_MESSAGE_CUSTOMURL:"Ex. http://test.com",PICBED_TENCENTCLOUD_MESSAGE_OPTIONS:"Ex. ?imageMogr2",PICBED_TENCENTCLOUD_MESSAGE_ENDPOINT:"Ex. cos-internal.accelerate.tencentcos.cn",PICBED_TENCENTCLOUD_SLIM:"極智壓縮",PICBED_TENCENTCLOUD_SLIM_CANCEL:"關閉",PICBED_TENCENTCLOUD_SLIM_CONFIRM:"開啓",PICBED_TENCENTCLOUD_SLIM_TIP:"圖片極智壓縮,詳情請參考[文檔說明](https://cloud.tencent.com/document/product/436/49259)",PICBED_GITHUB:"GitHub",PICBED_GITHUB_TOKEN:"Set Token",PICBED_GITHUB_REPO:"Set Repo Name",PICBED_GITHUB_PATH:"Set Path",PICBED_GITHUB_BRANCH:"Set Branch",PICBED_GITHUB_CUSTOMURL:"Set Custom URL",PICBED_GITHUB_MESSAGE_REPO:"Ex. username/repo",PICBED_GITHUB_MESSAGE_BRANCH:"Ex. main",PICBED_GITHUB_MESSAGE_PATH:"Ex. test/",PICBED_GITHUB_MESSAGE_CUSTOMURL:"Ex. https://test.com",PICBED_QINIU:"Qiniu",PICBED_QINIU_ACCESSKEY:"Set AccessKey",PICBED_QINIU_SECRETKEY:"Set SecretKey",PICBED_QINIU_BUCKET:"Set Bucket",PICBED_QINIU_PATH:"Set Path",PICBED_QINIU_URL:"Set URL",PICBED_QINIU_OPTIONS:"Set URL Suffix",PICBED_QINIU_AREA:"Set Area",PICBED_QINIU_MESSAGE_PATH:"Ex. test/",PICBED_QINIU_MESSAGE_AREA:"Ex. z0",PICBED_QINIU_MESSAGE_OPTIONS:"Ex. ?imageslim",PICBED_QINIU_MESSAGE_URL:"Ex. https://xxx.yyy.glb.clouddn.com",PICBED_IMGUR:"Imgur",PICBED_IMGUR_CLIENTID:"Set ClientId",PICBED_IMGUR_USERNAME:"Set Username",PICBED_IMGUR_ACCESS_TOKEN:"Set Access Token",PICBED_IMGUR_ALBUM:"Set Album Name",PICBED_IMGUR_PROXY:"Set Proxy",PICBED_IMGUR_MESSAGE_CLIENTID:"Fill in when you need to upload as anonymous",PICBED_IMGUR_MESSAGE_USERNAME:"Fill in when you need to upload to the account",PICBED_IMGUR_MESSAGE_ACCESS_TOKEN:"Fill in when you need to upload to the account",PICBED_IMGUR_MESSAGE_ALBUM:"例如:test",PICBED_IMGUR_MESSAGE_PROXY:"Ex. http://127.0.0.1:1080",PICBED_UPYUN:"Upyun",PICBED_UPYUN_BUCKET:"Set Bucket",PICBED_UPYUN_OPERATOR:"Set Operator",PICBED_UPYUN_PASSWORD:"Set Operator Password",PICBED_UPYUN_PATH:"Set Path",PICBED_UPYUN_URL:"Set URL",PICBED_UPYUN_OPTIONS:"Set URL Suffix",PICBED_UPYUN_ANTI_LEECH_TOKEN:"Set Anti-Leech Token",PICBED_UPYUN_EXPIRE_TIME:"Set Expire Time(seconds)",PICBED_UPYUN_MESSAGE_OPERATOR:"Ex. me",PICBED_UPYUN_MESSAGE_PASSWORD:"Please type the operator password",PICBED_UPYUN_MESSAGE_URL:"Ex. http://xxx.test.upcdn.net",PICBED_UPYUN_MESSAGE_OPTIONS:"Ex. !imgslim",PICBED_UPYUN_MESSAGE_PATH:"Ex. test/",PICBED_WEBDAVPLIST:"WebDAV",PICBED_WEBDAVPLIST_HOST:"Set Host",PICBED_WEBDAVPLIST_SSLENABLED:"Enable HTTPS",PICBED_WEBDAVPLIST_USERNAME:"Set Username",PICBED_WEBDAVPLIST_PASSWORD:"Set Password",PICBED_WEBDAVPLIST_PATH:"Set Path",PICBED_WEBDAVPLIST_WEBSITE_PATH:"Set Website Path",PICBED_WEBDAVPLIST_CUSTOMURL:"Set Custom URL",PICBED_WEBDAVPLIST_MESSAGE_HOST:"Ex. https://example.com/webdav",PICBED_WEBDAVPLIST_MESSAGE_SSLENABLED:"Enable HTTPS",PICBED_WEBDAVPLIST_MESSAGE_USERNAME:"Ex. me",PICBED_WEBDAVPLIST_MESSAGE_PASSWORD:"Please type the password",PICBED_WEBDAVPLIST_MESSAGE_PATH:"Ex. test/",PICBED_WEBDAVPLIST_MESSAGE_WEBSITE_PATH:"Used to generate the URL of the image",PICBED_WEBDAVPLIST_MESSAGE_CUSTOMURL:"Ex. https://test.com",PICBED_SFTPPLIST:"SFTP Buildin",PICBED_SFTPPLIST_HOST:"Set Host",PICBED_SFTPPLIST_PORT:"Set Port",PICBED_SFTPPLIST_USERNAME:"Set Username",PICBED_SFTPPLIST_PASSWORD:"Set Password",PICBED_SFTPPLIST_PRIVATEKEY:"Set Private Key",PICBED_SFTPPLIST_PRIVATEKEY_PASSPHRASE:"Set Private Key Passphrase",PICBED_SFTPPLIST_UPLOADPATH:"Set Upload Path",PICBED_SFTPPLIST_CUSTOMURL:"Set Custom URL",PICBED_SFTPPLIST_WEBSITE_PATH:"Set Website Path",PICBED_SFTPPLIST_FILE_USER:"Set File User:Group",PICBED_SFTPPLIST_FILE_MODE:"Set File Mode",PICBED_SFTPPLIST_DIR_MODE:"Set Directory Mode",PICBED_SFTPPLIST_MESSAGE_HOST:"Ex. 1.1.1.3",PICBED_SFTPPLIST_MESSAGE_PORT:"Default 22",PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY:"Ex. /Users/xxx/.ssh/id_rsa",PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY_PASSPHRASE:"Please type the private key passphrase",PICBED_SFTPPLIST_MESSAGE_UPLOADPATH:"Ex. test/",PICBED_SFTPPLIST_MESSAGE_CUSTOMURL:"Ex. https://test.com",PICBED_SFTPPLIST_MESSAGE_WEBSITE_PATH:"Used to generate the URL of the image",PICBED_SFTPPLIST_MESSAGE_FILE_USER:"Ex. www:data",PICBED_SFTPPLIST_MESSAGE_FILE_MODE:"Ex. 0664",PICBED_SFTPPLIST_MESSAGE_DIR_MODE:"Ex. 0775",BUILDIN_RENAME_FORMAT:"Set rename format",BUILDIN_RENAME_ENABLE:"Enable rename",BUILDIN_WATERMARK_ISADDWATERMARK:"Whether to add watermark",BUILDIN_WATERMARK_MESSAGE_ISADDWATERMARK:"Enable when watermark is required",BUILDIN_WATERMARK_WATERMARKTYPE:"Set watermark type",BUILDIN_WATERMARK_MESSAGE_WATERMARKTYPE:"Please select watermark type",BUILDIN_WATERMARK_ISFULLSCREENWATERMARK:"Whether to use full-screen watermark",BUILDIN_WATERMARK_MESSAGE_ISFULLSCREENWATERMARK:"Enable when full-screen watermark is required",BUILDIN_WATERMARK_WATERMARKDEGREE:"Set watermark angle",BUILDIN_WATERMARK_MESSAGE_WATERMARKDEGREE:"Please enter a number",BUILDIN_WATERMARK_WATERMARKTEXT:"Set watermark text",BUILDIN_WATERMARK_MESSAGE_WATERMARKTEXT:"Please enter watermark text",BUILDIN_WATERMARK_WATERMARKTEXTFONTPATH:"Set watermark font",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTPATH:"Please enter the watermark font file path",BUILDIN_WATERMARK_WATERMARKFONTRATIO:"Set the ratio of the watermark to the image",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTRATIO:"Please enter a number between 0-1",BUILDIN_WATERMARK_WATERMARKFONTCOLOR:"Set watermark font color",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTCOLOR:"Please enter the RGB color value",BUILDIN_WATERMARK_WATERMARKIMAGEPATH:"Set watermark image path",BUILDIN_WATERMARK_MESSAGE_WATERMARKIMAGEPATH:"Please enter the watermark image path",BUILDIN_WATERMARK_WATERMARKPOSITION:"Set watermark position",BUILDIN_WATERMARK_MESSAGE_WATERMARKPOSITION:"Please select watermark position",BUILDIN_COMPRESS_QUALITY:"Set image quality",BUILDIN_COMPRESS_MESSAGE_QUALITY:"Please enter an integer between 0-100",BUILDIN_COMPRESS_ISCONVERT:"Whether to perform format conversion",BUILDIN_COMPRESS_MESSAGE_ISCONVERT:"Enable when format conversion is required",BUILDIN_COMPRESS_CONVERTFORMAT:"Set conversion format",BUILDIN_COMPRESS_MESSAGE_CONVERTFORMAT:"Please select conversion format",BUILDIN_COMPRESS_ISRESIZE:"Whether to resize the image",BUILDIN_COMPRESS_MESSAGE_ISRESIZE:"Enable when image resizing is required",BUILDIN_COMPRESS_RESIZEWIDTH:"Set resizing width",BUILDIN_COMPRESS_MESSAGE_RESIZEWIDTH:"Please enter a number",BUILDIN_COMPRESS_RESIZEHEIGHT:"Set resizing height",BUILDIN_COMPRESS_MESSAGE_RESIZEHEIGHT:"Please enter a number",BUILDIN_COMPRESS_ISRESIZEBYPERCENT:"Whether to resize the image by percentage",BUILDIN_COMPRESS_MESSAGE_ISRESIZEBYPERCENT:"Enable when resizing by percentage is required",BUILDIN_COMPRESS_RESIZEPERCENT:"Set resizing percentage",BUILDIN_COMPRESS_MESSAGE_RESIZEPERCENT:"Please enter a number",BUILDIN_COMPRESS_SKIPRESIZEOFSMALLIMG:"Whether to skip resizing of small images",BUILDIN_COMPRESS_ISROTATE:"Whether to rotate the image",BUILDIN_COMPRESS_MESSAGE_ISROTATE:"Enable when image rotation is required",BUILDIN_COMPRESS_ROTATEDEGREE:"Set rotation angle",BUILDIN_COMPRESS_MESSAGE_ROTATEDEGREE:"Please enter a number, can be negative",BUILDIN_COMPRESS_ISREMOVEEXIF:"Whether to remove EXIF information",BUILDIN_COMPRESS_MESSAGE_ISREMOVEEXIF:"Enable when removing EXIF information is required",PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS:"Plugin installed successfully",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED:"Plugin installation failed",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_REASON:"Plugin installation failed, error code is ${code}, error log is \n ${data}",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_PATH:"Plugin installation failed, please enter a valid plugin name or valid installation path",PLUGIN_HANDLER_PLUGIN_UNINSTALL_SUCCESS:"Plugin uninstalled successfully",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED:"Plugin uninstall failed",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_REASON:"Plugin uninstall failed, error code is ${code}, error log is \n ${data}",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_VALID:"Plugin uninstall failed, please enter a valid plugin name",PLUGIN_HANDLER_PLUGIN_UPDATE_SUCCESS:"Plugin updated successfully",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED:"Plugin update failed",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_REASON:"Plugin update failed, error code is ${code}, error log is \n ${data}",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_VALID:"Plugin update failed, please enter a valid plugin name"}};class pr{constructor(e){this.ctx=e,this.objectAdapter=new b.ObjectAdapter(Pr);let t=this.ctx.getConfig("settings.language")||"zh-CN";Pr[t]||(t="zh-CN"),this.i18n=new b.I18n({adapter:this.objectAdapter,defaultLanguage:t}),this.loadOutterI18n()}loadOutterI18n(){const e=this.getOutterI18nFolder();F.default.readdirSync(e,{withFileTypes:!0}).forEach((t=>{if(t.isFile()&&t.name.endsWith(".yml")){const r=$.default.join(e,t.name),n=F.default.readFileSync(r,"utf8");try{const e=ue.default.load(n);Pr[t.name.replace(/\.yml$/,"")]=e}catch(e){console.error(e)}}}))}getOutterI18nFolder(){const e=$.default.join(this.ctx.baseDir,"i18n-cli");return F.default.pathExistsSync(e)||F.default.ensureDirSync(e),e}translate(e,t){return this.i18n.translate(e,t)||e}setLanguage(e){this.i18n.setLanguage(e),this.ctx.saveConfig({"settings.language":e})}addLocale(e,t){const r=this.objectAdapter.getLocale(e);if(!r)return!1;const n=A.merge(r,t);return this.objectAdapter.setLocale(e,n),!0}addLanguage(e,t){return!this.objectAdapter.getLocale(e)&&(this.objectAdapter.setLocale(e,t),Pr[e]=t,!0)}getLanguageList(){return Object.keys(Pr)}}class gr extends r.EventEmitter{constructor(e=""){super(),this.VERSION="0.9.1",this.configPath=e,this.output=[],this.input=[],this.rawInput=[],this.helper={transformer:new ut("transformer"),uploader:new ut("uploader"),beforeTransformPlugins:new ut("beforeTransformPlugins"),beforeUploadPlugins:new ut("beforeUploadPlugins"),afterUploadPlugins:new ut("afterUploadPlugins")},this.initConfigPath(),this.log=new Pt(this),this.cmd=new _t(this),this.pluginHandler=new Sr(this),this.initConfig(),this.init()}get pluginLoader(){return this._pluginLoader}initConfigPath(){if(""===this.configPath&&(this.configPath=n.homedir()+"/.piclist/config.json"),".JSON"!==$.default.extname(this.configPath).toUpperCase())throw this.configPath="",Error("The configuration file only supports JSON format.");this.baseDir=$.default.dirname(this.configPath);F.default.pathExistsSync(this.configPath)||F.default.ensureFileSync(`${this.configPath}`)}initConfig(){this.db=new cr(this),this._config=this.db.read(!0)}init(){try{this.i18n=new pr(this),this.Request=new _r(this),this._pluginLoader=new nr(this),It("picgo"),Jt().register(this),{register(e){e.helper.transformer.register("path",tr),e.helper.transformer.register("base64",rr)}}.register(this),It(""),this._pluginLoader.load(),this.lifecycle=new pt(this)}catch(e){throw this.emit(St.UPLOAD_PROGRESS,-1),this.log.error(e),e}}use(e,t){if(t)return this.pluginLoader.registerPlugin(t,e),this.pluginLoader.getPlugin(t);return e(this)}registerCommands(){""!==this.configPath&&(this.cmd.init(),this.cmd.loadCommands())}getConfig(e){return e?A.get(this._config,e):this._config}saveConfig(e){Be(e)?(this.setConfig(e),this.db.saveConfig(e)):this.log.warn("the format of config is invalid, please provide object")}removeConfig(e,t){e&&t&&(Re(e)?this.log.warn(`the config.${e} can't be removed`):(this.unsetConfig(e,t),this.db.unset(e,t)))}setConfig(e){Be(e)?Object.keys(e).forEach((t=>{Re(t)&&(this.log.warn(`the config.${t} can't be modified`),delete e[t]),A.set(this._config,t,e[t]),or.emit(dt.CONFIG_CHANGE,{configName:t,value:e[t]})})):this.log.warn("the format of config is invalid, please provide object")}unsetConfig(e,t){e&&t&&(Re(e)?this.log.warn(`the config.${e} can't be unset`):A.unset(this.getConfig(e),t))}get request(){return this.Request.request.bind(this.Request)}async upload(e){if(""===this.configPath)return this.log.error("The configuration file only supports JSON format."),[];if(void 0!==e&&0!==e.length){const{output:t}=await this.lifecycle.start(e);return t}try{const{imgPath:e,shouldKeepAfterUploading:t}=await sr(this);if("no image"===e)throw new Error("image not found in clipboard");{this.once(St.FAILED,(()=>{t||F.default.remove(e).catch((e=>{this.log.error(e)}))})),this.once("finished",(()=>{t||F.default.remove(e).catch((e=>{this.log.error(e)}))}));const{output:r}=await this.lifecycle.start([e]);return r}}catch(e){throw this.emit(St.FAILED,e),e}}}exports.Commander=_t,exports.Lifecycle=pt,exports.LifecyclePlugins=ut,exports.Logger=Pt,exports.PicGo=gr,exports.PicGoUtils=Ye,exports.PluginHandler=Sr,exports.PluginLoader=nr,exports.Request=_r;
2
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY2pzLmpzIiwic291cmNlcyI6WyIuLi9zcmMvcGx1Z2lucy9jb21tYW5kZXIvcGx1Z2luSGFuZGxlci50cyIsIi4uL3NyYy9wbHVnaW5zL2NvbW1hbmRlci9jb25maWcudHMiLCIuLi9zcmMvdXRpbHMvY29tbW9uLnRzIiwiLi4vc3JjL3BsdWdpbnMvY29tbWFuZGVyL3VwbG9hZC50cyIsIi4uL3NyYy9wbHVnaW5zL2JlZm9yZXRyYW5zZm9ybWVyL2NvbXByZXNzLnRzIiwiLi4vc3JjL3BsdWdpbnMvYmVmb3JldHJhbnNmb3JtZXIvd2F0ZXJtYXJrLnRzIiwiLi4vc3JjL3BsdWdpbnMvYmVmb3JldXBsb2FkL2J1aWxkSW5SZW5hbWUudHMiLCIuLi9zcmMvcGx1Z2lucy9jb21tYW5kZXIvc2V0dGluZy50cyIsIi4uL3NyYy9wbHVnaW5zL2NvbW1hbmRlci91c2UudHMiLCIuLi9zcmMvcGx1Z2lucy9jb21tYW5kZXIvcHJveHkudHMiLCIuLi9zcmMvdXRpbHMvaW5pdFV0aWxzLnRzIiwiLi4vc3JjL3BsdWdpbnMvY29tbWFuZGVyL2luaXQudHMiLCIuLi9zcmMvcGx1Z2lucy9jb21tYW5kZXIvaTE4bi50cyIsIi4uL3NyYy9saWIvTGlmZWN5Y2xlUGx1Z2lucy50cyIsIi4uL3NyYy9saWIvQ29tbWFuZGVyLnRzIiwiLi4vc3JjL3BsdWdpbnMvY29tbWFuZGVyL2luZGV4LnRzIiwiLi4vc3JjL3V0aWxzL2VudW0udHMiLCIuLi9zcmMvbGliL0xvZ2dlci50cyIsIi4uL3NyYy9jb3JlL0xpZmVjeWNsZS50cyIsIi4uL3NyYy91dGlscy9jcmVhdGVDb250ZXh0LnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvc21tcy50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL3RjeXVuLnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvZ2l0aHViLnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvcWluaXUudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci9pbWd1ci50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL2FsaXl1bi50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL3VweXVuLnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvd2ViZGF2LnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvbG9jYWwudHMiLCIuLi9zcmMvdXRpbHMvc3NoQ2xpZW50LnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvc2Z0cC50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL2luZGV4LnRzIiwiLi4vc3JjL3BsdWdpbnMvdHJhbnNmb3JtZXIvcGF0aC50cyIsIi4uL3NyYy9wbHVnaW5zL3RyYW5zZm9ybWVyL2Jhc2U2NC50cyIsIi4uL3NyYy9saWIvUGx1Z2luTG9hZGVyLnRzIiwiLi4vc3JjL3V0aWxzL3N0YXRpYy50cyIsIi4uL3NyYy91dGlscy9nZXRDbGlwYm9hcmRJbWFnZS50cyIsIi4uL3NyYy91dGlscy9ldmVudEJ1cy50cyIsIi4uL3NyYy9saWIvUmVxdWVzdC50cyIsIi4uL3NyYy91dGlscy9kYi50cyIsIi4uL3NyYy9saWIvUGx1Z2luSGFuZGxlci50cyIsIi4uL3NyYy9pMThuL2luZGV4LnRzIiwiLi4vc3JjL2kxOG4vemgtQ04udHMiLCIuLi9zcmMvaTE4bi96aC1UVy50cyIsIi4uL3NyYy9pMThuL2VuLnRzIiwiLi4vc3JjL2NvcmUvUGljR28udHMiLCIuLi9zcmMvcGx1Z2lucy90cmFuc2Zvcm1lci9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJUGljR28sIElQbHVnaW4gfSBmcm9tICcuLi8uLi90eXBlcydcclxuXHJcbmNvbnN0IHBsdWdpbkhhbmRsZXI6IElQbHVnaW4gPSB7XHJcbiAgaGFuZGxlOiAoY3R4OiBJUGljR28pID0+IHtcclxuICAgIC8vIGNvbnN0IHBsdWdpbkhhbmRsZXIgPSBuZXcgUGx1Z2luSGFuZGxlcihjdHgpXHJcbiAgICBjb25zdCBjbWQgPSBjdHguY21kXHJcbiAgICBjbWQucHJvZ3JhbVxyXG4gICAgICAuY29tbWFuZCgnaW5zdGFsbCA8cGx1Z2lucy4uLj4nKVxyXG4gICAgICAuZGVzY3JpcHRpb24oJ2luc3RhbGwgcGljZ28gcGx1Z2luJylcclxuICAgICAgLmFsaWFzKCdhZGQnKVxyXG4gICAgICAub3B0aW9uKCctcCwgLS1wcm94eSA8cHJveHk+JywgJ0FkZCBwcm94eSBmb3IgaW5zdGFsbGluZycpXHJcbiAgICAgIC5vcHRpb24oJy1yLCAtLXJlZ2lzdHJ5IDxyZWdpc3RyeT4nLCAnQ2hvb3NlIGEgcmVnaXN0cnkgZm9yIGluc3RhbGxpbmcnKVxyXG4gICAgICAuYWN0aW9uKChwbHVnaW5zOiBzdHJpbmdbXSwgcHJvZ3JhbTogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBwcm94eSwgcmVnaXN0cnkgfSA9IHByb2dyYW1cclxuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICAgICAgcHJveHksXHJcbiAgICAgICAgICByZWdpc3RyeVxyXG4gICAgICAgIH1cclxuICAgICAgICBjdHgucGx1Z2luSGFuZGxlci5pbnN0YWxsKHBsdWdpbnMsIG9wdGlvbnMpLmNhdGNoKChlKSA9PiB7IGN0eC5sb2cuZXJyb3IoZSkgfSlcclxuICAgICAgfSlcclxuICAgIGNtZC5wcm9ncmFtXHJcbiAgICAgIC5jb21tYW5kKCd1bmluc3RhbGwgPHBsdWdpbnMuLi4+JylcclxuICAgICAgLmFsaWFzKCdybScpXHJcbiAgICAgIC5kZXNjcmlwdGlvbigndW5pbnN0YWxsIHBpY2dvIHBsdWdpbicpXHJcbiAgICAgIC5hY3Rpb24oKHBsdWdpbnM6IHN0cmluZ1tdKSA9PiB7XHJcbiAgICAgICAgY3R4LnBsdWdpbkhhbmRsZXIudW5pbnN0YWxsKHBsdWdpbnMpLmNhdGNoKChlKSA9PiB7IGN0eC5sb2cuZXJyb3IoZSkgfSlcclxuICAgICAgfSlcclxuICAgIGNtZC5wcm9ncmFtXHJcbiAgICAgIC5jb21tYW5kKCd1cGRhdGUgPHBsdWdpbnMuLi4+JylcclxuICAgICAgLmRlc2NyaXB0aW9uKCd1cGRhdGUgcGljZ28gcGx1Z2luJylcclxuICAgICAgLm9wdGlvbignLXAsIC0tcHJveHkgPHByb3h5PicsICdBZGQgcHJveHkgZm9yIGluc3RhbGxpbmcnKVxyXG4gICAgICAub3B0aW9uKCctciwgLS1yZWdpc3RyeSA8cmVnaXN0cnk+JywgJ0Nob29zZSBhIHJlZ2lzdHJ5IGZvciBpbnN0YWxsaW5nJylcclxuICAgICAgLmFjdGlvbigocGx1Z2luczogc3RyaW5nW10sIHByb2dyYW06IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHsgcHJveHksIHJlZ2lzdHJ5IH0gPSBwcm9ncmFtXHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgICAgIHByb3h5LFxyXG4gICAgICAgICAgcmVnaXN0cnlcclxuICAgICAgICB9XHJcbiAgICAgICAgY3R4LnBsdWdpbkhhbmRsZXIudXBkYXRlKHBsdWdpbnMsIG9wdGlvbnMpLmNhdGNoKChlOiBFcnJvcikgPT4geyBjdHgubG9nLmVycm9yKGUpIH0pXHJcbiAgICAgIH0pXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBwbHVnaW5IYW5kbGVyXHJcbiIsImltcG9ydCB7IElQaWNHbywgSVBsdWdpbiB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5cclxuY29uc3QgY29uZmlnOiBJUGx1Z2luID0ge1xyXG4gIGhhbmRsZTogKGN0eDogSVBpY0dvKSA9PiB7XHJcbiAgICBjb25zdCBjbWQgPSBjdHguY21kXHJcbiAgICBjbWQucHJvZ3JhbVxyXG4gICAgICAub3B0aW9uKCctYywgLS1jb25maWcgPHBhdGg+JywgJ3NldCBjb25maWcgcGF0aCcpXHJcbiAgICAgIC8vIHdpbGwgaGFuZGxlIGluIGBiaW4vcGljZ29gXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjb25maWdcclxuIiwiaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJ1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xyXG5pbXBvcnQgeyBpbWFnZVNpemUgfSBmcm9tICdpbWFnZS1zaXplJ1xyXG5pbXBvcnQge1xyXG4gIElJbWdTaXplLFxyXG4gIElQYXRoVHJhbnNmb3JtZWRJbWdJbmZvLFxyXG4gIElQbHVnaW5OYW1lVHlwZSxcclxuICBJTG9nZ2VyLFxyXG4gIElQaWNHbyxcclxuICBJQnVpbGRJbkNvbXByZXNzT3B0aW9ucyxcclxuICBJQnVpbGRJbldhdGVyTWFya09wdGlvbnNcclxufSBmcm9tICcuLi90eXBlcydcclxuaW1wb3J0IHsgVVJMIH0gZnJvbSAndXJsJ1xyXG5pbXBvcnQgVGV4dFRvU1ZHIGZyb20gJ3RleHQtdG8tc3ZnJ1xyXG5pbXBvcnQgc2hhcnAgZnJvbSAnc2hhcnAnXHJcbmltcG9ydCBjcnlwdG8gZnJvbSAnY3J5cHRvJ1xyXG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tICd1dWlkJ1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhbmRvbVN0cmluZ0dlbmVyYXRvciAobGVuZ3RoOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gIGNvbnN0IGNoYXJzID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5J1xyXG4gIHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoIH0pLm1hcCgoKSA9PiBjaGFycy5jaGFyQXQoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogY2hhcnMubGVuZ3RoKSkpLmpvaW4oJycpXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZW5hbWVGaWxlTmFtZVdpdGhUaW1lc3RhbXAgKG9sZE5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgcmV0dXJuIGAke01hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApfSR7cmFuZG9tU3RyaW5nR2VuZXJhdG9yKDUpfSR7cGF0aC5leHRuYW1lKG9sZE5hbWUpfWBcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlbmFtZUZpbGVOYW1lV2l0aFJhbmRvbVN0cmluZyAob2xkTmFtZTogc3RyaW5nLCBsZW5ndGg6IG51bWJlciA9IDUpOiBzdHJpbmcge1xyXG4gIHJldHVybiBgJHtyYW5kb21TdHJpbmdHZW5lcmF0b3IobGVuZ3RoKX0ke3BhdGguZXh0bmFtZShvbGROYW1lKX1gXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZW5hbWVGaWxlTmFtZVdpdGhDdXN0b21TdHJpbmcgKG9sZE5hbWU6IHN0cmluZywgY3VzdG9tRm9ybWF0OiBzdHJpbmcsIGFmZml4RmlsZU5hbWU/OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gIGNvbnN0IGNvbnZlcnNpb25NYXA6IHtba2V5OiBzdHJpbmddOiAoKSA9PiBzdHJpbmd9ID0ge1xyXG4gICAgJ3tZfSc6ICgpID0+IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKS50b1N0cmluZygpLFxyXG4gICAgJ3t5fSc6ICgpID0+IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKS50b1N0cmluZygpLnNsaWNlKDIpLFxyXG4gICAgJ3ttfSc6ICgpID0+IChuZXcgRGF0ZSgpLmdldE1vbnRoKCkgKyAxKS50b1N0cmluZygpLmxlbmd0aCA9PT0gMSA/IGAwJHtuZXcgRGF0ZSgpLmdldE1vbnRoKCkgKyAxfWAgOiAobmV3IERhdGUoKS5nZXRNb250aCgpICsgMSkudG9TdHJpbmcoKSxcclxuICAgICd7ZH0nOiAoKSA9PiBuZXcgRGF0ZSgpLmdldERhdGUoKS50b1N0cmluZygpLmxlbmd0aCA9PT0gMSA/IGAwJHtuZXcgRGF0ZSgpLmdldERhdGUoKX1gIDogbmV3IERhdGUoKS5nZXREYXRlKCkudG9TdHJpbmcoKSxcclxuICAgICd7aH0nOiAoKSA9PiBuZXcgRGF0ZSgpLmdldEhvdXJzKCkudG9TdHJpbmcoKS5sZW5ndGggPT09IDEgPyBgMCR7bmV3IERhdGUoKS5nZXRIb3VycygpfWAgOiBuZXcgRGF0ZSgpLmdldEhvdXJzKCkudG9TdHJpbmcoKSxcclxuICAgICd7aX0nOiAoKSA9PiBuZXcgRGF0ZSgpLmdldE1pbnV0ZXMoKS50b1N0cmluZygpLmxlbmd0aCA9PT0gMSA/IGAwJHtuZXcgRGF0ZSgpLmdldE1pbnV0ZXMoKX1gIDogbmV3IERhdGUoKS5nZXRNaW51dGVzKCkudG9TdHJpbmcoKSxcclxuICAgICd7c30nOiAoKSA9PiBuZXcgRGF0ZSgpLmdldFNlY29uZHMoKS50b1N0cmluZygpLmxlbmd0aCA9PT0gMSA/IGAwJHtuZXcgRGF0ZSgpLmdldFNlY29uZHMoKX1gIDogbmV3IERhdGUoKS5nZXRTZWNvbmRzKCkudG9TdHJpbmcoKSxcclxuICAgICd7bWQ1fSc6ICgpID0+IGNyeXB0by5jcmVhdGVIYXNoKCdtZDUnKS51cGRhdGUocGF0aC5iYXNlbmFtZShvbGROYW1lLCBwYXRoLmV4dG5hbWUob2xkTmFtZSkpKS5kaWdlc3QoJ2hleCcpLFxyXG4gICAgJ3ttZDUtMTZ9JzogKCkgPT4gY3J5cHRvLmNyZWF0ZUhhc2goJ21kNScpLnVwZGF0ZShwYXRoLmJhc2VuYW1lKG9sZE5hbWUsIHBhdGguZXh0bmFtZShvbGROYW1lKSkpLmRpZ2VzdCgnaGV4Jykuc2xpY2UoMCwgMTYpLFxyXG4gICAgJ3tzdHItMTB9JzogKCkgPT4gcmFuZG9tU3RyaW5nR2VuZXJhdG9yKDEwKSxcclxuICAgICd7c3RyLTIwfSc6ICgpID0+IHJhbmRvbVN0cmluZ0dlbmVyYXRvcigyMCksXHJcbiAgICAne2ZpbGVuYW1lfSc6ICgpID0+IGFmZml4RmlsZU5hbWUgPyBwYXRoLmJhc2VuYW1lKGFmZml4RmlsZU5hbWUsIHBhdGguZXh0bmFtZShhZmZpeEZpbGVOYW1lKSkgOiBwYXRoLmJhc2VuYW1lKG9sZE5hbWUsIHBhdGguZXh0bmFtZShvbGROYW1lKSksXHJcbiAgICAne3V1aWR9JzogKCkgPT4gdXVpZHY0KCkucmVwbGFjZSgvLS9nLCAnJyksXHJcbiAgICAne3RpbWVzdGFtcH0nOiAoKSA9PiBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKS50b1N0cmluZygpXHJcbiAgfVxyXG4gIGlmIChjdXN0b21Gb3JtYXQgPT09IHVuZGVmaW5lZCB8fCAoIU9iamVjdC5rZXlzKGNvbnZlcnNpb25NYXApLnNvbWUoaXRlbSA9PiBjdXN0b21Gb3JtYXQuaW5jbHVkZXMoaXRlbSkpICYmICFjdXN0b21Gb3JtYXQuaW5jbHVkZXMoJ2xvY2FsRm9sZGVyJykpKSB7XHJcbiAgICByZXR1cm4gb2xkTmFtZVxyXG4gIH1cclxuICBjb25zdCBleHQgPSBwYXRoLmV4dG5hbWUob2xkTmFtZSlcclxuICBsZXQgbmV3TmFtZSA9IE9iamVjdC5rZXlzKGNvbnZlcnNpb25NYXApLnJlZHVjZSgoYWNjLCBjdXIpID0+IHtcclxuICAgIHJldHVybiBhY2MucmVwbGFjZShuZXcgUmVnRXhwKGN1ciwgJ2cnKSwgY29udmVyc2lvbk1hcFtjdXJdKCkpXHJcbiAgfSwgY3VzdG9tRm9ybWF0KSArIGV4dFxyXG4gIG5ld05hbWUgPSBuZXdOYW1lLnJlcGxhY2UoL3sobG9jYWxGb2xkZXI6PyhcXGQrKT8pfS9naSwgKF9yZXN1bHQsIGtleSwgY291bnQpID0+IHtcclxuICAgIGNvdW50ID0gTWF0aC5tYXgoMSwgY291bnQgfHwgMClcclxuICAgIGNvbnN0IHBhdGhzID0gcGF0aC5kaXJuYW1lKG9sZE5hbWUpLnNwbGl0KHBhdGguc2VwKVxyXG4gICAga2V5ID0gcGF0aHMuc2xpY2UoMCAtIGNvdW50KS5yZWR1Y2UoKGEsIGIpID0+IGAke2F9LyR7Yn1gKVxyXG4gICAgcmV0dXJuIGtleS5yZXBsYWNlKC86L2csICcnKVxyXG4gIH0pXHJcbiAgcmV0dXJuIG5ld05hbWVcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGlzVXJsID0gKHVybDogc3RyaW5nKTogYm9vbGVhbiA9PiAoL15odHRwcz86XFwvXFwvLykudGVzdCh1cmwpXHJcblxyXG5leHBvcnQgY29uc3QgaXNVcmxFbmNvZGUgPSAodXJsOiBzdHJpbmcpOiBib29sZWFuID0+IHtcclxuICB1cmwgPSB1cmwgfHwgJydcclxuICB0cnkge1xyXG4gICAgLy8gdGhlIHdob2xlIHVybCBlbmNvZGUgb3IgZGVjb2RlIHNob2xkIG5vdCB1c2UgZW5jb2RlVVJJQ29tcG9uZW50IG9yIGRlY29kZVVSSUNvbXBvbmVudFxyXG4gICAgcmV0dXJuIHVybCAhPT0gZGVjb2RlVVJJKHVybClcclxuICB9IGNhdGNoIChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcbn1cclxuZXhwb3J0IGNvbnN0IGhhbmRsZVVybEVuY29kZSA9ICh1cmw6IHN0cmluZyk6IHN0cmluZyA9PiB7XHJcbiAgaWYgKCFpc1VybEVuY29kZSh1cmwpKSB7XHJcbiAgICB1cmwgPSBlbmNvZGVVUkkodXJsKVxyXG4gIH1cclxuICByZXR1cm4gdXJsXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBnZXRJbWFnZVNpemUgPSAoZmlsZTogQnVmZmVyKTogSUltZ1NpemUgPT4ge1xyXG4gIHRyeSB7XHJcbiAgICBjb25zdCB7IHdpZHRoID0gMCwgaGVpZ2h0ID0gMCwgdHlwZSB9ID0gaW1hZ2VTaXplKGZpbGUpXHJcbiAgICBjb25zdCBleHRuYW1lID0gdHlwZSA/IGAuJHt0eXBlfWAgOiAnLnBuZydcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHJlYWw6IHRydWUsXHJcbiAgICAgIHdpZHRoLFxyXG4gICAgICBoZWlnaHQsXHJcbiAgICAgIGV4dG5hbWVcclxuICAgIH1cclxuICB9IGNhdGNoIChlKSB7XHJcbiAgICAvLyBmYWxsYmFjayB0byAyMDAgKiAyMDBcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHJlYWw6IGZhbHNlLFxyXG4gICAgICB3aWR0aDogMjAwLFxyXG4gICAgICBoZWlnaHQ6IDIwMCxcclxuICAgICAgZXh0bmFtZTogJy5wbmcnXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgZ2V0RlNGaWxlID0gYXN5bmMgKGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPElQYXRoVHJhbnNmb3JtZWRJbWdJbmZvPiA9PiB7XHJcbiAgdHJ5IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGV4dG5hbWU6IHBhdGguZXh0bmFtZShmaWxlUGF0aCksXHJcbiAgICAgIGZpbGVOYW1lOiBwYXRoLmJhc2VuYW1lKGZpbGVQYXRoKSxcclxuICAgICAgYnVmZmVyOiBhd2FpdCBmcy5yZWFkRmlsZShmaWxlUGF0aCksXHJcbiAgICAgIHN1Y2Nlc3M6IHRydWVcclxuICAgIH1cclxuICB9IGNhdGNoIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHJlYXNvbjogYHJlYWQgZmlsZSAke2ZpbGVQYXRofSBlcnJvcmAsXHJcbiAgICAgIHN1Y2Nlc3M6IGZhbHNlXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgZ2V0VVJMRmlsZSA9IGFzeW5jICh1cmw6IHN0cmluZywgY3R4OiBJUGljR28pOiBQcm9taXNlPElQYXRoVHJhbnNmb3JtZWRJbWdJbmZvPiA9PiB7XHJcbiAgdXJsID0gaGFuZGxlVXJsRW5jb2RlKHVybClcclxuICBsZXQgdGltZW91dElkOiBOb2RlSlMuVGltZW91dFxyXG4gIGNvbnN0IHJlcXVlc3RGbiA9IG5ldyBQcm9taXNlPElQYXRoVHJhbnNmb3JtZWRJbWdJbmZvPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAoYXN5bmMgKCkgPT4ge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGN0eC5yZXF1ZXN0KHtcclxuICAgICAgICAgIG1ldGhvZDogJ2dldCcsXHJcbiAgICAgICAgICB1cmwsXHJcbiAgICAgICAgICByZXNvbHZlV2l0aEZ1bGxSZXNwb25zZTogdHJ1ZSxcclxuICAgICAgICAgIHJlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJ1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgICAudGhlbigocmVzcCkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzcC5kYXRhIGFzIEJ1ZmZlclxyXG4gICAgICAgICAgfSlcclxuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKVxyXG4gICAgICAgIGNvbnN0IHVybFBhdGggPSBuZXcgVVJMKHVybCkucGF0aG5hbWVcclxuICAgICAgICBsZXQgZXh0bmFtZSA9ICcnXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGNvbnN0IHVybFBhcmFtcyA9IG5ldyBVUkwodXJsKS5zZWFyY2hQYXJhbXNcclxuICAgICAgICAgIGV4dG5hbWUgPSB1cmxQYXJhbXMuZ2V0KCd3eF9mbXQnKSB8fCBwYXRoLmV4dG5hbWUodXJsUGF0aCkgfHwgJydcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgZXh0bmFtZSA9IHBhdGguZXh0bmFtZSh1cmxQYXRoKSB8fCAnJ1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWV4dG5hbWUuc3RhcnRzV2l0aCgnLicpICYmIGV4dG5hbWUpIHtcclxuICAgICAgICAgIGV4dG5hbWUgPSBgLiR7ZXh0bmFtZX1gXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlc29sdmUoe1xyXG4gICAgICAgICAgYnVmZmVyOiByZXMsXHJcbiAgICAgICAgICBmaWxlTmFtZTogcGF0aC5iYXNlbmFtZSh1cmxQYXRoKSxcclxuICAgICAgICAgIGV4dG5hbWUsXHJcbiAgICAgICAgICBzdWNjZXNzOiB0cnVlXHJcbiAgICAgICAgfSlcclxuICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xyXG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpXHJcbiAgICAgICAgcmVzb2x2ZSh7XHJcbiAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcclxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcmVzdHJpY3QtdGVtcGxhdGUtZXhwcmVzc2lvbnNcclxuICAgICAgICAgIHJlYXNvbjogYHJlcXVlc3QgJHt1cmx9IGVycm9yLCAke2Vycm9yPy5tZXNzYWdlID8/ICcnfWBcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9KSgpLmNhdGNoKHJlamVjdClcclxuICB9KVxyXG4gIGNvbnN0IHRpbWVvdXRQcm9taXNlID0gbmV3IFByb21pc2U8SVBhdGhUcmFuc2Zvcm1lZEltZ0luZm8+KChyZXNvbHZlKTogdm9pZCA9PiB7XHJcbiAgICB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgcmVzb2x2ZSh7XHJcbiAgICAgICAgc3VjY2VzczogZmFsc2UsXHJcbiAgICAgICAgcmVhc29uOiBgcmVxdWVzdCAke3VybH0gdGltZW91dGBcclxuICAgICAgfSlcclxuICAgIH0sIDMwMDAwKVxyXG4gIH0pXHJcbiAgcmV0dXJuIFByb21pc2UucmFjZShbcmVxdWVzdEZuLCB0aW1lb3V0UHJvbWlzZV0pXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBkZXRlY3QgdGhlIGlucHV0IHN0cmluZydzIHR5cGVcclxuICogZm9yIGV4YW1wbGVcclxuICogMS4gQHh4eC9waWNnby1wbHVnaW4teHh4IC0+IHNjb3BlXHJcbiAqIDIuIHBpY2dvLXBsdWdpbi14eHggLT4gbm9ybWFsXHJcbiAqIDMuIHh4eCAtPiBzaW1wbGVcclxuICogNC4gbm90IGV4aXN0cyBvciBpcyBhIHBhdGggLT4gdW5rbm93blxyXG4gKiBAcGFyYW0gbmFtZVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGdldFBsdWdpbk5hbWVUeXBlID0gKG5hbWU6IHN0cmluZyk6IElQbHVnaW5OYW1lVHlwZSA9PiB7XHJcbiAgaWYgKC9eQFteL10rXFwvcGljZ28tcGx1Z2luLS8udGVzdChuYW1lKSkge1xyXG4gICAgcmV0dXJuICdzY29wZSdcclxuICB9IGVsc2UgaWYgKG5hbWUuc3RhcnRzV2l0aCgncGljZ28tcGx1Z2luLScpKSB7XHJcbiAgICByZXR1cm4gJ25vcm1hbCdcclxuICB9IGVsc2UgaWYgKGlzU2ltcGxlTmFtZShuYW1lKSkge1xyXG4gICAgcmV0dXJuICdzaW1wbGUnXHJcbiAgfVxyXG4gIHJldHVybiAndW5rbm93bidcclxufVxyXG5cclxuLyoqXHJcbiAqIGRldGVjdCB0aGUgaW5wdXQgc3RyaW5nIGlzIGEgc2ltcGxlIHBsdWdpbiBuYW1lIG9yIG5vdFxyXG4gKiBmb3IgZXhhbXBsZVxyXG4gKiAxLiB4eHggLT4gdHJ1ZVxyXG4gKiAyLiAvVXNyL3h4L3h4eHgvcGljZ28tcGx1Z2luLXh4eCAtPiBmYWxzZVxyXG4gKiBAcGFyYW0gbmFtZSBwbHVnaW5OYW1lT3JQYXRoXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgaXNTaW1wbGVOYW1lID0gKG5hbWVPclBhdGg6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xyXG4gIGlmIChwYXRoLmlzQWJzb2x1dGUobmFtZU9yUGF0aCkpIHtcclxuICAgIHJldHVybiBmYWxzZVxyXG4gIH1cclxuICBjb25zdCBwbHVnaW5QYXRoID0gcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIG5hbWVPclBhdGgpXHJcbiAgaWYgKGZzLmV4aXN0c1N5bmMocGx1Z2luUGF0aCkpIHtcclxuICAgIHJldHVybiBmYWxzZVxyXG4gIH1cclxuICBpZiAobmFtZU9yUGF0aC5pbmNsdWRlcygnLycpIHx8IG5hbWVPclBhdGguaW5jbHVkZXMoJ1xcXFwnKSkge1xyXG4gICAgcmV0dXJuIGZhbHNlXHJcbiAgfVxyXG4gIHJldHVybiB0cnVlXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBzdHJlYW1saW5lIHRoZSBmdWxsIHBsdWdpbiBuYW1lIHRvIGEgc2ltcGxlIG9uZVxyXG4gKiBmb3IgZXhhbXBsZTpcclxuICogMS4gcGljZ28tcGx1Z2luLXh4eCAtPiB4eHhcclxuICogMi4gQHh4eC9waWNnby1wbHVnaW4teXl5IC0+IHl5eVxyXG4gKiBAcGFyYW0gbmFtZSBwbHVnaW5GdWxsTmFtZVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGhhbmRsZVN0cmVhbWxpbmVQbHVnaW5OYW1lID0gKG5hbWU6IHN0cmluZyk6IHN0cmluZyA9PiB7XHJcbiAgaWYgKC9eQFteL10rXFwvcGljZ28tcGx1Z2luLS8udGVzdChuYW1lKSkge1xyXG4gICAgcmV0dXJuIG5hbWUucmVwbGFjZSgvXkBbXi9dK1xcL3BpY2dvLXBsdWdpbi0vLCAnJylcclxuICB9IGVsc2Uge1xyXG4gICAgcmV0dXJuIG5hbWUucmVwbGFjZSgvcGljZ28tcGx1Z2luLS8sICcnKVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIGNvbXBsZXRlIHBsdWdpbiBuYW1lIHRvIGZ1bGwgbmFtZVxyXG4gKiBmb3IgZXhhbXBsZTpcclxuICogMS4geHh4IC0+IHBpY2dvLXBsdWdpbi14eHhcclxuICogMi4gcGljZ28tcGx1Z2luLXh4eCAtPiBwaWNnby1wbHVnaW4teHh4XHJcbiAqIEBwYXJhbSBuYW1lIHBsdWdpblNpbXBsZU5hbWVcclxuICogQHBhcmFtIHNjb3BlIHBsdWdpblNjb3BlXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgaGFuZGxlQ29tcGxldGVQbHVnaW5OYW1lID0gKG5hbWU6IHN0cmluZywgc2NvcGUgPSAnJyk6IHN0cmluZyA9PiB7XHJcbiAgaWYgKHNjb3BlKSB7XHJcbiAgICByZXR1cm4gYEAke3Njb3BlfS9waWNnby1wbHVnaW4tJHtuYW1lfWBcclxuICB9IGVsc2Uge1xyXG4gICAgcmV0dXJuIGBwaWNnby1wbHVnaW4tJHtuYW1lfWBcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBoYW5kbGUgaW5zdGFsbC91bmluc3RhbGwvdXBkYXRlIHBsdWdpbiBuYW1lIG9yIHBhdGhcclxuICogZm9yIGV4YW1wbGVcclxuICogMS4gcGljZ28tcGx1Z2luLXh4eCAtPiBwaWNnby1wbHVnaW4teHh4XHJcbiAqIDIuIEB4eHgvcGljZ28tcGx1Z2luLXh4eCAtPiBAeHh4L3BpY2dvLXBsdWdpbi14eHhcclxuICogMy4geHh4IC0+IHBpY2dvLXBsdWdpbi14eHhcclxuICogNC4gLi94eHh4L3BpY2dvLXBsdWdpbi14eHggLT4gL2Fic29sdXRlUGF0aC8uLi4veHh4eC9waWNnby1wbHVnaW4teHh4XHJcbiAqIDUuIC9hYnNvbHV0ZVBhdGgvLi4uL3BpY2dvLXBsdWdpbi14eHggLT4gL2Fic29sdXRlUGF0aC8uLi4vcGljZ28tcGx1Z2luLXh4eFxyXG4gKiBAcGFyYW0gbmFtZU9yUGF0aCBwbHVnaW5OYW1lIG9yIHBsdWdpblBhdGhcclxuICovXHJcbmV4cG9ydCBjb25zdCBnZXRQcm9jZXNzUGx1Z2luTmFtZSA9IChuYW1lT3JQYXRoOiBzdHJpbmcsIGxvZ2dlcjogSUxvZ2dlciB8IENvbnNvbGUgPSBjb25zb2xlKTogc3RyaW5nID0+IHtcclxuICBjb25zdCBwbHVnaW5OYW1lVHlwZSA9IGdldFBsdWdpbk5hbWVUeXBlKG5hbWVPclBhdGgpXHJcbiAgc3dpdGNoIChwbHVnaW5OYW1lVHlwZSkge1xyXG4gICAgY2FzZSAnbm9ybWFsJzpcclxuICAgIGNhc2UgJ3Njb3BlJzpcclxuICAgICAgcmV0dXJuIG5hbWVPclBhdGhcclxuICAgIGNhc2UgJ3NpbXBsZSc6XHJcbiAgICAgIHJldHVybiBoYW5kbGVDb21wbGV0ZVBsdWdpbk5hbWUobmFtZU9yUGF0aClcclxuICAgIGRlZmF1bHQ6IHtcclxuICAgICAgLy8gbm93LCB0aGUgcGx1Z2luTmFtZVR5cGUgaXMgdW5rbm93IGhlcmVcclxuICAgICAgLy8gMS4gY2hlY2sgaWYgaXMgYW4gYWJzb2x1dGUgcGF0aFxyXG4gICAgICBsZXQgcGx1Z2luUGF0aCA9IG5hbWVPclBhdGhcclxuICAgICAgaWYgKHBhdGguaXNBYnNvbHV0ZShuYW1lT3JQYXRoKSAmJiBmcy5leGlzdHNTeW5jKG5hbWVPclBhdGgpKSB7XHJcbiAgICAgICAgcmV0dXJuIGhhbmRsZVVuaXhTdHlsZVBhdGgocGx1Z2luUGF0aClcclxuICAgICAgfVxyXG4gICAgICAvLyAyLiBjaGVjayBpZiBpcyBhIHJlbGF0aXZlIHBhdGhcclxuICAgICAgcGx1Z2luUGF0aCA9IHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBuYW1lT3JQYXRoKVxyXG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyhwbHVnaW5QYXRoKSkge1xyXG4gICAgICAgIHJldHVybiBoYW5kbGVVbml4U3R5bGVQYXRoKHBsdWdpblBhdGgpXHJcbiAgICAgIH1cclxuICAgICAgLy8gMy4gaW52YWxpZCBuYW1lT3JQYXRoXHJcbiAgICAgIGxvZ2dlci53YXJuKGBDYW4ndCBmaW5kIHBsdWdpbiAke25hbWVPclBhdGh9YClcclxuICAgICAgcmV0dXJuICcnXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogZ2V0IHRoZSBub3JtYWwgcGx1Z2luIG5hbWVcclxuICogZm9yIGV4YW1wbGU6XHJcbiAqIDEuIHBpY2dvLXBsdWdpbi14eHggLT4gcGljZ28tcGx1Z2luLXh4eFxyXG4gKiAyLiBAeHh4L3BpY2dvLXBsdWdpbi14eHggLT4gQHh4eC9waWNnby1wbHVnaW4teHh4XHJcbiAqIDMuIC4veHh4eC9waWNnby1wbHVnaW4teHh4IC0+IHBpY2dvLXBsdWdpbi14eHhcclxuICogNC4gL2Fic29sdXRlUGF0aC8uLi4vcGljZ28tcGx1Z2luLXh4eCAtPiBwaWNnby1wbHVnaW4teHh4XHJcbiAqIDUuIGFuIGV4Y2VwdGlvbjogW3BhY2thZ2UuanNvbidzIG5hbWVdICE9PSBbZm9sZGVyIG5hbWVdXHJcbiAqIHRoZW4gdXNlIFtwYWNrYWdlLmpzb24ncyBuYW1lXSwgdXN1YWxseSBtYXRjaCB0aGUgc2NvcGUgcGFja2FnZS5cclxuICogNi4gaWYgcGx1Z2luIG5hbWUgaGFzIHZlcnNpb246IHBpY2dvLXBsdWdpbi14eHhAeC54LnggdGhlbiByZW1vdmUgdGhlIHZlcnNpb25cclxuICogQHBhcmFtIG5hbWVPclBhdGhcclxuICovXHJcbmV4cG9ydCBjb25zdCBnZXROb3JtYWxQbHVnaW5OYW1lID0gKG5hbWVPclBhdGg6IHN0cmluZywgbG9nZ2VyOiBJTG9nZ2VyIHwgQ29uc29sZSA9IGNvbnNvbGUpOiBzdHJpbmcgPT4ge1xyXG4gIGNvbnN0IHBsdWdpbk5hbWVUeXBlID0gZ2V0UGx1Z2luTmFtZVR5cGUobmFtZU9yUGF0aClcclxuICBzd2l0Y2ggKHBsdWdpbk5hbWVUeXBlKSB7XHJcbiAgICBjYXNlICdub3JtYWwnOlxyXG4gICAgICByZXR1cm4gcmVtb3ZlUGx1Z2luVmVyc2lvbihuYW1lT3JQYXRoKVxyXG4gICAgY2FzZSAnc2NvcGUnOlxyXG4gICAgICByZXR1cm4gcmVtb3ZlUGx1Z2luVmVyc2lvbihuYW1lT3JQYXRoLCB0cnVlKVxyXG4gICAgY2FzZSAnc2ltcGxlJzpcclxuICAgICAgcmV0dXJuIHJlbW92ZVBsdWdpblZlcnNpb24oaGFuZGxlQ29tcGxldGVQbHVnaW5OYW1lKG5hbWVPclBhdGgpKVxyXG4gICAgZGVmYXVsdDoge1xyXG4gICAgICAvLyBub3csIHRoZSBuYW1lT3JQYXRoIG11c3QgYmUgcGF0aFxyXG4gICAgICAvLyB0aGUgbmFtZU9yUGF0aCBoZXJlIHdpbGwgYmUgZW5zdXJlZCB3aXRoIHVuaXggc3R5bGVcclxuICAgICAgLy8gd2UgbmVlZCB0byBmaW5kIHRoZSBwYWNrYWdlLmpzb24ncyBuYW1lIGNhdXNlIG5wbSB1c2luZyB0aGUgbmFtZSBpbiBwYWNrYWdlLmpzb24ncyBuYW1lIGZpbGVkXHJcbiAgICAgIGlmICghZnMuZXhpc3RzU3luYyhuYW1lT3JQYXRoKSkge1xyXG4gICAgICAgIGxvZ2dlci53YXJuKGBDYW4ndCBmaW5kIHBsdWdpbjogJHtuYW1lT3JQYXRofWApXHJcbiAgICAgICAgcmV0dXJuICcnXHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgcGFja2FnZUpTT05QYXRoID0gcGF0aC5wb3NpeC5qb2luKG5hbWVPclBhdGgsICdwYWNrYWdlLmpzb24nKVxyXG4gICAgICBpZiAoIWZzLmV4aXN0c1N5bmMocGFja2FnZUpTT05QYXRoKSkge1xyXG4gICAgICAgIGxvZ2dlci53YXJuKGBDYW4ndCBmaW5kIHBsdWdpbjogJHtuYW1lT3JQYXRofWApXHJcbiAgICAgICAgcmV0dXJuICcnXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgcGtnID0gZnMucmVhZEpTT05TeW5jKHBhY2thZ2VKU09OUGF0aCkgfHwge31cclxuICAgICAgICBpZiAoIXBrZy5uYW1lPy5pbmNsdWRlcygncGljZ28tcGx1Z2luLScpKSB7XHJcbiAgICAgICAgICBsb2dnZXIud2FybihgVGhlIHBsdWdpbiBwYWNrYWdlLmpzb24ncyBuYW1lIGZpbGVkIGlzICR7cGtnLm5hbWUgYXMgc3RyaW5nIHx8ICdlbXB0eSd9LCBuZWVkIHRvIGluY2x1ZGUgdGhlIHByZWZpeDogcGljZ28tcGx1Z2luLWApXHJcbiAgICAgICAgICByZXR1cm4gJydcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHBrZy5uYW1lXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBoYW5kbGUgdHJhbnNmb3JtIHRoZSBwYXRoIHRvIHVuaXggc3R5bGVcclxuICogZm9yIGV4YW1wbGVcclxuICogMS4gQzpcXFxceHh4XFxcXHh4eCAtPiBDOi94eHgveHh4XHJcbiAqIDIuIC94eHgveHh4IC0+IC94eHgveHh4XHJcbiAqIEBwYXJhbSBwYXRoXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgaGFuZGxlVW5peFN0eWxlUGF0aCA9IChwYXRoU3RyOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xyXG4gIGNvbnN0IHBhdGhBcnIgPSBwYXRoU3RyLnNwbGl0KHBhdGguc2VwKVxyXG4gIHJldHVybiBwYXRoQXJyLmpvaW4oJy8nKVxyXG59XHJcblxyXG4vKipcclxuICogcmVtb3ZlIHBsdWdpbiB2ZXJzaW9uIHdoZW4gcmVnaXN0ZXIgcGx1Z2luIG5hbWVcclxuICogMS4gcGljZ28tcGx1Z2luLXh4eEAxLjAuMCAtPiBwaWNnby1wbHVnaW4teHh4XHJcbiAqIDIuIEB4eHgvcGljZ28tcGx1Z2luLXh4eEAxLjAuMCAtPiBAeHh4L3BpY2dvLXBsdWdpbi14eHhcclxuICogQHBhcmFtIG5hbWVPclBhdGhcclxuICogQHBhcmFtIHNjb3BlXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgcmVtb3ZlUGx1Z2luVmVyc2lvbiA9IChuYW1lT3JQYXRoOiBzdHJpbmcsIHNjb3BlOiBib29sZWFuID0gZmFsc2UpOiBzdHJpbmcgPT4ge1xyXG4gIGlmICghbmFtZU9yUGF0aC5pbmNsdWRlcygnQCcpKSB7XHJcbiAgICByZXR1cm4gbmFtZU9yUGF0aFxyXG4gIH0gZWxzZSB7XHJcbiAgICBsZXQgcmVnID0gLyguK1xcLyk/KHBpY2dvLXBsdWdpbi1cXHcrKShALispKi9cclxuICAgIC8vIGlmIGlzIGEgc2NvcGUgcGtnXHJcbiAgICBpZiAoc2NvcGUpIHtcclxuICAgICAgcmVnID0gLyguK1xcLyk/KF5AW14vXStcXC9waWNnby1wbHVnaW4tXFx3KykoQC4rKSovXHJcbiAgICB9XHJcbiAgICBjb25zdCBtYXRjaEFyciA9IG5hbWVPclBhdGgubWF0Y2gocmVnKVxyXG4gICAgaWYgKCFtYXRjaEFycikge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ2NhbiBub3QgcmVtb3ZlIHBsdWdpbiB2ZXJzaW9uJylcclxuICAgICAgcmV0dXJuIG5hbWVPclBhdGhcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBtYXRjaEFyclsyXVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIHRoZSBjb25maWcgYmxhY2sgaXRlbSBsaXN0IHdoaWNoIHdvbid0IGJlIHNldHRlZFxyXG4gKiBvbmx5IGNhbiBiZSBnb3RcclxuICovXHJcbmV4cG9ydCBjb25zdCBjb25maWdCbGFja0xpc3QgPSBbXVxyXG5cclxuLyoqXHJcbiAqIGNoZWNrIHNvbWUgY29uZmlnIGtleSBpcyBpbiBibGFja0xpc3RcclxuICogQHBhcmFtIGtleVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGlzQ29uZmlnS2V5SW5CbGFja0xpc3QgPSAoa2V5OiBzdHJpbmcpOiBib29sZWFuID0+IHtcclxuICByZXR1cm4gY29uZmlnQmxhY2tMaXN0LnNvbWUoYmxhY2tJdGVtID0+IGtleS5zdGFydHNXaXRoKGJsYWNrSXRlbSkpXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBjaGVjayB0aGUgaW5wdXQgY29uZmlnIGlzIHZhbGlkXHJcbiAqIGNvbmZpZyBtdXN0IGJlIG9iamVjdCBzdWNoIGFzIHsgeHh4OiAneHh4JyB9XHJcbiAqICYmIGNhbid0IGJlIGFycmF5XHJcbiAqIEBwYXJhbSBjb25maWdcclxuICogQHJldHVybnNcclxuICovXHJcbmV4cG9ydCBjb25zdCBpc0lucHV0Q29uZmlnVmFsaWQgPSAoY29uZmlnOiBhbnkpOiBib29sZWFuID0+IHtcclxuICBpZiAoXHJcbiAgICB0eXBlb2YgY29uZmlnID09PSAnb2JqZWN0JyAmJlxyXG4gICAgIUFycmF5LmlzQXJyYXkoY29uZmlnKSAmJlxyXG4gICAgT2JqZWN0LmtleXMoY29uZmlnKS5sZW5ndGggPiAwXHJcbiAgKSB7XHJcbiAgICByZXR1cm4gdHJ1ZVxyXG4gIH1cclxuICByZXR1cm4gZmFsc2VcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNhZmVQYXJzZTxUPiAoc3RyOiBzdHJpbmcpOiBUIHwgc3RyaW5nIHtcclxuICB0cnkge1xyXG4gICAgcmV0dXJuIEpTT04ucGFyc2Uoc3RyKVxyXG4gIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICByZXR1cm4gc3RyXHJcbiAgfVxyXG59XHJcblxyXG4vLyBob2xkLi4uXHJcbi8vIGV4cG9ydCBjb25zdCBjb25maWdXaGl0ZUxpc3Q6IFJlZ0V4cFtdID0gW1xyXG4vLyAgIC9ecGljQmVkLyxcclxuLy8gICAvXnBpY2dvUGx1Z2lucy8sXHJcbi8vICAgL15AW14vXStcXC9waWNnby1wbHVnaW4tLyxcclxuLy8gICAvZGVidWcvLFxyXG4vLyAgIC9zaWxlbnQvLFxyXG4vLyAgIC9jb25maWdQYXRoLyxcclxuLy8gICAvXnNldHRpbmdzLyxcclxuLy8gXVxyXG5cclxuLy8gZXhwb3J0IGNvbnN0IGlzQ29uZmlnS2V5SW5XaGl0ZUxpc3QgPSAoa2V5OiBzdHJpbmcpOiBib29sZWFuID0+IHtcclxuLy8gICByZXR1cm4gY29uZmlnV2hpdGVMaXN0LnNvbWUod2hpdGVJdGVtID0+IHdoaXRlSXRlbS50ZXN0KGtleSkpXHJcbi8vIH1cclxuXHJcbmV4cG9ydCBjb25zdCBmb3JjZU51bWJlciA9IChudW06IHN0cmluZyB8IG51bWJlciA9IDApOiBudW1iZXIgPT4ge1xyXG4gIHJldHVybiBpc05hTihOdW1iZXIobnVtKSkgPyAwIDogTnVtYmVyKG51bSlcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGlzRGV2ID0gKCk6IGJvb2xlYW4gPT4ge1xyXG4gIHJldHVybiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50J1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgaXNQcm9kID0gKCk6IGJvb2xlYW4gPT4ge1xyXG4gIHJldHVybiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nXHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIHRleHQyU1ZHIChcclxuICBkZWZhdWx0V2F0ZXJtYXJrRm9udFBhdGg6IHN0cmluZyxcclxuICB0ZXh0Pzogc3RyaW5nLFxyXG4gIGNvbG9yPzogc3RyaW5nLFxyXG4gIGZvbnRGYW1pbHk/OiBzdHJpbmdcclxuKTogUHJvbWlzZTxCdWZmZXI+IHtcclxuICB0ZXh0ID0gIXRleHQgPyAn5rWL6K+VJyA6IHRleHRcclxuICBmb250RmFtaWx5ID0gIWZvbnRGYW1pbHkgPyBkZWZhdWx0V2F0ZXJtYXJrRm9udFBhdGggOiBmb250RmFtaWx5XHJcbiAgY29sb3IgPSAhY29sb3IgPyAncmdiYSgyMDQsIDIwNCwgMjA0LCAwLjQ1KScgOiBjb2xvclxyXG4gIGNvbnN0IHRleHQyU1ZHID0gVGV4dFRvU1ZHLmxvYWRTeW5jKGZvbnRGYW1pbHkpXHJcbiAgY29uc3Qgb3B0aW9uczogVGV4dFRvU1ZHLkdlbmVyYXRpb25PcHRpb25zID0ge1xyXG4gICAgYW5jaG9yOiAndG9wJyxcclxuICAgIGF0dHJpYnV0ZXM6IHtcclxuICAgICAgZmlsbDogY29sb3JcclxuICAgIH1cclxuICB9XHJcbiAgY29uc3QgdGV4dFNWRyA9IHRleHQyU1ZHLmdldFNWRyh0ZXh0LCBvcHRpb25zKVxyXG4gIGNvbnN0IHN2ZyA9IEJ1ZmZlci5mcm9tKHRleHRTVkcpXHJcbiAgcmV0dXJuIHN2Z1xyXG59XHJcblxyXG5jb25zdCBkZWZhdWx0V2F0ZXJtYXJrSW1hZ2VQYXRoID0gYCR7X19kaXJuYW1lfS9hc3NldHMvcGljbGlzdC5wbmdgXHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gQWRkV2F0ZXJtYXJrIChcclxuICBpbWc6IEJ1ZmZlcixcclxuICB3YXRlcm1hcmtUeXBlOiAndGV4dCcgfCAnaW1hZ2UnLFxyXG4gIGRlZmF1bHRXYXRlcm1hcmtGb250UGF0aDogc3RyaW5nLFxyXG4gIGlzRnVsbFNjcmVlbldhdGVybWFyaz86IGJvb2xlYW4sXHJcbiAgd2F0ZXJtYXJrRGVncmVlPzogbnVtYmVyLFxyXG4gIHRleHQ/OiBzdHJpbmcsXHJcbiAgd2F0ZXJtYXJrRm9udFBhdGg/OiBzdHJpbmcsXHJcbiAgd2F0ZXJtYXJrU2NhbGVSYXRpbz86IG51bWJlcixcclxuICB3YXRlcm1hcmtDb2xvcj86IHN0cmluZyxcclxuICB3YXRlcm1hcmtJbWFnZVBhdGg/OiBzdHJpbmcsXHJcbiAgcG9zaXRpb24/OiBzaGFycC5HcmF2aXR5XHJcbik6IFByb21pc2U8QnVmZmVyPiB7XHJcbiAgd2F0ZXJtYXJrU2NhbGVSYXRpbyA9ICF3YXRlcm1hcmtTY2FsZVJhdGlvIHx8IHdhdGVybWFya1NjYWxlUmF0aW8gPCAwIHx8IHdhdGVybWFya1NjYWxlUmF0aW8gPiAxID8gMC4xNSA6IHdhdGVybWFya1NjYWxlUmF0aW9cclxuICBjb25zdCBpbWFnZSA9IHNoYXJwKGltZylcclxuICBjb25zdCB7IHdpZHRoOiBpbWdXaWR0aCA9IDIwMCB9ID0gYXdhaXQgaW1hZ2UubWV0YWRhdGEoKVxyXG4gIGNvbnN0IHdhdGVybWFyayA9IGF3YWl0IGNyZWF0ZVdhdGVybWFyayhcclxuICAgIHdhdGVybWFya1R5cGUsXHJcbiAgICBkZWZhdWx0V2F0ZXJtYXJrRm9udFBhdGgsXHJcbiAgICB0ZXh0LFxyXG4gICAgd2F0ZXJtYXJrRm9udFBhdGgsXHJcbiAgICB3YXRlcm1hcmtTY2FsZVJhdGlvLFxyXG4gICAgd2F0ZXJtYXJrQ29sb3IsXHJcbiAgICB3YXRlcm1hcmtJbWFnZVBhdGgsXHJcbiAgICBpbWdXaWR0aCxcclxuICAgIHdhdGVybWFya0RlZ3JlZVxyXG4gIClcclxuICBjb25zdCBjb21wb3NpdGVkID0gYXdhaXQgaW1hZ2VcclxuICAgIC5jb21wb3NpdGUoW1xyXG4gICAgICB7XHJcbiAgICAgICAgaW5wdXQ6IHdhdGVybWFyayxcclxuICAgICAgICBncmF2aXR5OiBwb3NpdGlvbiB8fCAnc291dGhlYXN0JyxcclxuICAgICAgICB0aWxlOiBpc0Z1bGxTY3JlZW5XYXRlcm1hcmtcclxuICAgICAgfVxyXG4gICAgXSlcclxuICAgIC50b0J1ZmZlcigpXHJcbiAgcmV0dXJuIGNvbXBvc2l0ZWRcclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlV2F0ZXJtYXJrIChcclxuICB3YXRlcm1hcmtUeXBlOiAndGV4dCcgfCAnaW1hZ2UnLFxyXG4gIGRlZmF1bHRXYXRlcm1hcmtGb250UGF0aDogc3RyaW5nLFxyXG4gIHRleHQ/OiBzdHJpbmcsXHJcbiAgd2F0ZXJtYXJrRm9udFBhdGg/OiBzdHJpbmcsXHJcbiAgd2F0ZXJtYXJrU2NhbGVSYXRpbz86IG51bWJlcixcclxuICB3YXRlcm1hcmtDb2xvcj86IHN0cmluZyxcclxuICB3YXRlcm1hcmtJbWFnZVBhdGg/OiBzdHJpbmcsXHJcbiAgaW1nV2lkdGg6IG51bWJlciA9IDIwMCxcclxuICB3YXRlcm1hcmtEZWdyZWU6IG51bWJlciA9IDBcclxuKTogUHJvbWlzZTxCdWZmZXI+IHtcclxuICBsZXQgd2F0ZXJtYXJrOiBhbnlcclxuICBpZiAod2F0ZXJtYXJrVHlwZSA9PT0gJ2ltYWdlJykge1xyXG4gICAgd2F0ZXJtYXJrSW1hZ2VQYXRoID0gd2F0ZXJtYXJrSW1hZ2VQYXRoIHx8IGRlZmF1bHRXYXRlcm1hcmtJbWFnZVBhdGhcclxuICAgIHdhdGVybWFyayA9IGF3YWl0IHNoYXJwKHdhdGVybWFya0ltYWdlUGF0aCkudG9CdWZmZXIoKVxyXG4gIH0gZWxzZSB7XHJcbiAgICB3YXRlcm1hcmsgPSBhd2FpdCB0ZXh0MlNWRyhcclxuICAgICAgZGVmYXVsdFdhdGVybWFya0ZvbnRQYXRoLFxyXG4gICAgICB0ZXh0LFxyXG4gICAgICB3YXRlcm1hcmtDb2xvcixcclxuICAgICAgd2F0ZXJtYXJrRm9udFBhdGggfHwgZGVmYXVsdFdhdGVybWFya0ZvbnRQYXRoXHJcbiAgICApXHJcbiAgfVxyXG4gIGNvbnN0IHsgd2lkdGg6IHdhdGVybWFya1dpZHRoLCBoZWlnaHQ6IHdhdGVybWFya0hlaWdodCB9ID0gYXdhaXQgZ2V0U2l6ZShcclxuICAgIHdhdGVybWFya1xyXG4gIClcclxuICBjb25zdCB3YXRlcm1hcmtSZXNpemVXaWR0aCA9IE1hdGguZmxvb3IoaW1nV2lkdGggKiBmb3JjZU51bWJlcih3YXRlcm1hcmtTY2FsZVJhdGlvKSlcclxuICBjb25zdCB3YXRlcm1hcmtSZXNpemVIZWlnaHQgPSBNYXRoLmZsb29yKFxyXG4gICAgKHdhdGVybWFya1Jlc2l6ZVdpZHRoICogd2F0ZXJtYXJrSGVpZ2h0KSAvIHdhdGVybWFya1dpZHRoXHJcbiAgKVxyXG4gIHJldHVybiBhd2FpdCBzaGFycCh3YXRlcm1hcmspXHJcbiAgICAucmVzaXplKHdhdGVybWFya1Jlc2l6ZVdpZHRoLCB3YXRlcm1hcmtSZXNpemVIZWlnaHQsIHtcclxuICAgICAgZml0OiAnaW5zaWRlJ1xyXG4gICAgfSlcclxuICAgIC5yb3RhdGUod2F0ZXJtYXJrRGVncmVlLCB7IGJhY2tncm91bmQ6IHsgcjogMjU1LCBnOiAyNTUsIGI6IDI1NSwgYWxwaGE6IDAgfSB9KVxyXG4gICAgLnRvQnVmZmVyKClcclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gZ2V0U2l6ZSAoaW1hZ2U6IEJ1ZmZlcik6IFByb21pc2U8eyB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciB9PiB7XHJcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBhd2FpdCBzaGFycChpbWFnZSkubWV0YWRhdGEoKVxyXG4gIHJldHVybiB7IHdpZHRoOiB3aWR0aCB8fCAyMDAsIGhlaWdodDogaGVpZ2h0IHx8IDIwMCB9XHJcbn1cclxuXHJcbmNvbnN0IHZhbGlkUGFyYW0gPSAoLi4ucGFyYW1zOiBhbnlbXSk6IGJvb2xlYW4gPT4ge1xyXG4gIHJldHVybiBwYXJhbXMuZXZlcnkocGFyYW0gPT4ge1xyXG4gICAgaWYgKHBhcmFtID09PSB1bmRlZmluZWQgfHwgcGFyYW0gPT09IG51bGwpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIHBhcmFtID09PSAnc3RyaW5nJykge1xyXG4gICAgICByZXR1cm4gcGFyYW0gIT09ICcnXHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIHBhcmFtID09PSAnbnVtYmVyJykge1xyXG4gICAgICByZXR1cm4gcGFyYW0gPiAwXHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIHBhcmFtID09PSAnb2JqZWN0Jykge1xyXG4gICAgICByZXR1cm4gT2JqZWN0LmtleXMocGFyYW0pLmxlbmd0aCA+IDBcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlXHJcbiAgfSlcclxufVxyXG5cclxuY29uc3QgYXZhaWxhYmxlQ29udmVydEZvcm1hdExpc3QgPSBbXHJcbiAgJ2F2aWYnLFxyXG4gICdkeicsXHJcbiAgJ2ZpdHMnLFxyXG4gICdnaWYnLFxyXG4gICdoZWlmJyxcclxuICAnaW5wdXQnLFxyXG4gICdqcGVnJyxcclxuICAnanBnJyxcclxuICAnanAyJyxcclxuICAnanhsJyxcclxuICAnbWFnaWNrJyxcclxuICAnb3BlbnNsaWRlJyxcclxuICAncGRmJyxcclxuICAncG5nJyxcclxuICAncHBtJyxcclxuICAncmF3JyxcclxuICAnc3ZnJyxcclxuICAndGlmZicsXHJcbiAgJ3RpZicsXHJcbiAgJ3YnLFxyXG4gICd3ZWJwJ1xyXG5dXHJcblxyXG5jb25zdCB2YWxpZE91dHB1dEZvcm1hdCA9IChmb3JtYXQ6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xyXG4gIHJldHVybiBhdmFpbGFibGVDb252ZXJ0Rm9ybWF0TGlzdC5pbmNsdWRlcyhmb3JtYXQpXHJcbn1cclxuXHJcbmNvbnN0IGltYWdlRXh0TGlzdCA9IFsnanBnJywgJ2pwZWcnLCAncG5nJywgJ3dlYnAnLCAnYm1wJywgJ3RpZmYnLCAndGlmJywgJ3N2ZycsICdpY28nLCAnYXZpZicsICdoZWlmJywgJ2hlaWMnXVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGltYWdlQWRkV2F0ZXJNYXJrIChpbWc6IEJ1ZmZlciwgb3B0aW9uczogSUJ1aWxkSW5XYXRlck1hcmtPcHRpb25zLCBkZWZhdWx0V2F0ZXJtYXJrRm9udFBhdGg6IHN0cmluZyk6IFByb21pc2U8QnVmZmVyPiB7XHJcbiAgdHJ5IHtcclxuICAgIGxldCBpbWFnZTogc2hhcnAuU2hhcnAgPSBzaGFycChpbWcpXHJcbiAgICBpZiAodmFsaWRQYXJhbShvcHRpb25zLndhdGVybWFya1RleHQpKSB7XHJcbiAgICAgIGltYWdlID0gc2hhcnAoYXdhaXQgQWRkV2F0ZXJtYXJrKFxyXG4gICAgICAgIGltZyxcclxuICAgICAgICBvcHRpb25zLndhdGVybWFya1R5cGUgfHwgJ3RleHQnLFxyXG4gICAgICAgIGRlZmF1bHRXYXRlcm1hcmtGb250UGF0aCxcclxuICAgICAgICBvcHRpb25zLmlzRnVsbFNjcmVlbldhdGVybWFyayxcclxuICAgICAgICBmb3JjZU51bWJlcihvcHRpb25zLndhdGVybWFya0RlZ3JlZSksXHJcbiAgICAgICAgb3B0aW9ucy53YXRlcm1hcmtUZXh0LFxyXG4gICAgICAgIG9wdGlvbnMud2F0ZXJtYXJrRm9udFBhdGgsXHJcbiAgICAgICAgZm9yY2VOdW1iZXIob3B0aW9ucy53YXRlcm1hcmtTY2FsZVJhdGlvKSxcclxuICAgICAgICBvcHRpb25zLndhdGVybWFya0NvbG9yLFxyXG4gICAgICAgIG9wdGlvbnMud2F0ZXJtYXJrSW1hZ2VQYXRoLFxyXG4gICAgICAgIG9wdGlvbnMud2F0ZXJtYXJrUG9zaXRpb25cclxuICAgICAgKSlcclxuICAgIH1cclxuICAgIHJldHVybiBhd2FpdCBpbWFnZS50b0J1ZmZlcigpXHJcbiAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgIGNvbnNvbGUubG9nKGVycm9yKVxyXG4gICAgcmV0dXJuIGltZ1xyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gZm9ybWF0T3B0aW9ucyAob3B0aW9uczogSUJ1aWxkSW5Db21wcmVzc09wdGlvbnMpOiBJQnVpbGRJbkNvbXByZXNzT3B0aW9ucyB7XHJcbiAgcmV0dXJuIHtcclxuICAgIHF1YWxpdHk6IGZvcmNlTnVtYmVyKG9wdGlvbnMucXVhbGl0eSksXHJcbiAgICBpc0NvbnZlcnQ6IG9wdGlvbnMuaXNDb252ZXJ0IHx8IGZhbHNlLFxyXG4gICAgY29udmVydEZvcm1hdDogb3B0aW9ucy5jb252ZXJ0Rm9ybWF0IHx8ICdqcGcnLFxyXG4gICAgaXNSZVNpemU6IG9wdGlvbnMuaXNSZVNpemUgfHwgZmFsc2UsXHJcbiAgICByZVNpemVIZWlnaHQ6IGZvcmNlTnVtYmVyKG9wdGlvbnMucmVTaXplSGVpZ2h0KSxcclxuICAgIHJlU2l6ZVdpZHRoOiBmb3JjZU51bWJlcihvcHRpb25zLnJlU2l6ZVdpZHRoKSxcclxuICAgIHNraXBSZVNpemVPZlNtYWxsSW1nOiBvcHRpb25zLnNraXBSZVNpemVPZlNtYWxsSW1nIHx8IGZhbHNlLFxyXG4gICAgaXNSZVNpemVCeVBlcmNlbnQ6IG9wdGlvbnMuaXNSZVNpemVCeVBlcmNlbnQgfHwgZmFsc2UsXHJcbiAgICByZVNpemVQZXJjZW50OiBmb3JjZU51bWJlcihvcHRpb25zLnJlU2l6ZVBlcmNlbnQpLFxyXG4gICAgaXNSb3RhdGU6IG9wdGlvbnMuaXNSb3RhdGUgfHwgZmFsc2UsXHJcbiAgICByb3RhdGVEZWdyZWU6IGZvcmNlTnVtYmVyKG9wdGlvbnMucm90YXRlRGVncmVlKSxcclxuICAgIHBpY0JlZDogb3B0aW9ucy5waWNCZWQgfHwgJ3NtbXMnXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW1hZ2VQcm9jZXNzIChpbWc6IEJ1ZmZlciwgb3B0aW9uczogSUJ1aWxkSW5Db21wcmVzc09wdGlvbnMsIHJhd0Zvcm1hdDogc3RyaW5nKTogUHJvbWlzZTxCdWZmZXI+IHtcclxuICBvcHRpb25zID0gZm9ybWF0T3B0aW9ucyhvcHRpb25zKVxyXG4gIHRyeSB7XHJcbiAgICByYXdGb3JtYXQgPSByYXdGb3JtYXQudG9Mb3dlckNhc2UoKS5yZXBsYWNlKCcuJywgJycpXHJcbiAgICBpZiAoIWltYWdlRXh0TGlzdC5pbmNsdWRlcyhyYXdGb3JtYXQpKSB7XHJcbiAgICAgIHJldHVybiBpbWdcclxuICAgIH1cclxuICAgIGxldCBpbWFnZTogc2hhcnAuU2hhcnAgPSBzaGFycChpbWcpXHJcbiAgICBsZXQgcXVhbGl0eSA9IDEwMFxyXG4gICAgaWYgKHZhbGlkUGFyYW0ob3B0aW9ucy5xdWFsaXR5KSAmJiBvcHRpb25zLnF1YWxpdHkhIDwgMTAwKSB7XHJcbiAgICAgIHF1YWxpdHkgPSBvcHRpb25zLnF1YWxpdHkhXHJcbiAgICB9XHJcbiAgICBpZiAob3B0aW9ucy5pc1JlU2l6ZUJ5UGVyY2VudCkge1xyXG4gICAgICBpZiAodmFsaWRQYXJhbShvcHRpb25zLnJlU2l6ZVBlcmNlbnQpKSB7XHJcbiAgICAgICAgY29uc3QgaW1hZ2VXaWR0aCA9IGF3YWl0IGltYWdlLm1ldGFkYXRhKCkudGhlbihtZXRhZGF0YSA9PiBtZXRhZGF0YS53aWR0aClcclxuICAgICAgICBjb25zdCBpbWFnZUhlaWdodCA9IGF3YWl0IGltYWdlLm1ldGFkYXRhKCkudGhlbihtZXRhZGF0YSA9PiBtZXRhZGF0YS5oZWlnaHQpXHJcbiAgICAgICAgaWYgKGltYWdlV2lkdGggJiYgaW1hZ2VIZWlnaHQpIHtcclxuICAgICAgICAgIGltYWdlID0gaW1hZ2UucmVzaXplKFxyXG4gICAgICAgICAgICBNYXRoLnJvdW5kKGltYWdlV2lkdGggKiBvcHRpb25zLnJlU2l6ZVBlcmNlbnQhIC8gMTAwKSxcclxuICAgICAgICAgICAgTWF0aC5yb3VuZChpbWFnZUhlaWdodCAqIG9wdGlvbnMucmVTaXplUGVyY2VudCEgLyAxMDApLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgZml0OiAnaW5zaWRlJ1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChvcHRpb25zLmlzUmVTaXplKSB7XHJcbiAgICAgIGlmICgodHlwZW9mIG9wdGlvbnMucmVTaXplSGVpZ2h0ID09PSAnbnVtYmVyJyAmJiBvcHRpb25zLnJlU2l6ZUhlaWdodCA+IDApICYmICh0eXBlb2Ygb3B0aW9ucy5yZVNpemVXaWR0aCA9PT0gJ251bWJlcicgJiYgb3B0aW9ucy5yZVNpemVXaWR0aCA+IDApKSB7XHJcbiAgICAgICAgaW1hZ2UgPSBpbWFnZS5yZXNpemUoXHJcbiAgICAgICAgICBvcHRpb25zLnJlU2l6ZVdpZHRoLFxyXG4gICAgICAgICAgb3B0aW9ucy5yZVNpemVIZWlnaHQsXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGZpdDogJ2ZpbGwnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKVxyXG4gICAgICB9IGVsc2UgaWYgKCh0eXBlb2Ygb3B0aW9ucy5yZVNpemVIZWlnaHQgPT09ICdudW1iZXInICYmIG9wdGlvbnMucmVTaXplSGVpZ2h0ID4gMCkgJiYgKHR5cGVvZiBvcHRpb25zLnJlU2l6ZVdpZHRoICE9PSAnbnVtYmVyJyB8fCBvcHRpb25zLnJlU2l6ZVdpZHRoID09PSAwKSkge1xyXG4gICAgICAgIGNvbnN0IGltYWdlV2lkdGggPSBhd2FpdCBpbWFnZS5tZXRhZGF0YSgpLnRoZW4obWV0YWRhdGEgPT4gbWV0YWRhdGEud2lkdGgpXHJcbiAgICAgICAgY29uc3QgaW1hZ2VIZWlnaHQgPSBhd2FpdCBpbWFnZS5tZXRhZGF0YSgpLnRoZW4obWV0YWRhdGEgPT4gbWV0YWRhdGEuaGVpZ2h0KVxyXG4gICAgICAgIGlmIChpbWFnZVdpZHRoICYmIGltYWdlSGVpZ2h0KSB7XHJcbiAgICAgICAgICBpZiAoIW9wdGlvbnMuc2tpcFJlU2l6ZU9mU21hbGxJbWcgfHwgKG9wdGlvbnMuc2tpcFJlU2l6ZU9mU21hbGxJbWcgJiYgb3B0aW9ucy5yZVNpemVIZWlnaHQgPCBpbWFnZUhlaWdodCkpIHtcclxuICAgICAgICAgICAgY29uc3Qgc2NhbGVSYXRpbyA9IG9wdGlvbnMucmVTaXplSGVpZ2h0IC8gaW1hZ2VIZWlnaHRcclxuICAgICAgICAgICAgaW1hZ2UgPSBpbWFnZS5yZXNpemUoXHJcbiAgICAgICAgICAgICAgTWF0aC5yb3VuZChpbWFnZVdpZHRoICogc2NhbGVSYXRpbyksXHJcbiAgICAgICAgICAgICAgb3B0aW9ucy5yZVNpemVIZWlnaHQsXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZml0OiAnaW5zaWRlJ1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmICgodHlwZW9mIG9wdGlvbnMucmVTaXplV2lkdGggPT09ICdudW1iZXInICYmIG9wdGlvbnMucmVTaXplV2lkdGggPiAwKSAmJiAodHlwZW9mIG9wdGlvbnMucmVTaXplSGVpZ2h0ICE9PSAnbnVtYmVyJyB8fCBvcHRpb25zLnJlU2l6ZUhlaWdodCA9PT0gMCkpIHtcclxuICAgICAgICBjb25zdCBpbWFnZVdpZHRoID0gYXdhaXQgaW1hZ2UubWV0YWRhdGEoKS50aGVuKG1ldGFkYXRhID0+IG1ldGFkYXRhLndpZHRoKVxyXG4gICAgICAgIGNvbnN0IGltYWdlSGVpZ2h0ID0gYXdhaXQgaW1hZ2UubWV0YWRhdGEoKS50aGVuKG1ldGFkYXRhID0+IG1ldGFkYXRhLmhlaWdodClcclxuICAgICAgICBpZiAoaW1hZ2VXaWR0aCAmJiBpbWFnZUhlaWdodCkge1xyXG4gICAgICAgICAgaWYgKCFvcHRpb25zLnNraXBSZVNpemVPZlNtYWxsSW1nIHx8IChvcHRpb25zLnNraXBSZVNpemVPZlNtYWxsSW1nICYmIG9wdGlvbnMucmVTaXplV2lkdGggPCBpbWFnZVdpZHRoKSkge1xyXG4gICAgICAgICAgICBjb25zdCBzY2FsZVJhdGlvID0gb3B0aW9ucy5yZVNpemVXaWR0aCAvIGltYWdlV2lkdGhcclxuICAgICAgICAgICAgaW1hZ2UgPSBpbWFnZS5yZXNpemUoXHJcbiAgICAgICAgICAgICAgb3B0aW9ucy5yZVNpemVXaWR0aCxcclxuICAgICAgICAgICAgICBNYXRoLnJvdW5kKGltYWdlSGVpZ2h0ICogc2NhbGVSYXRpbyksXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZml0OiAnaW5zaWRlJ1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKG9wdGlvbnMuaXNSb3RhdGUgJiYgb3B0aW9ucy5yb3RhdGVEZWdyZWUpIHtcclxuICAgICAgaW1hZ2UgPSBpbWFnZS5yb3RhdGUob3B0aW9ucy5yb3RhdGVEZWdyZWUsIHsgYmFja2dyb3VuZDogeyByOiAyNTUsIGc6IDI1NSwgYjogMjU1LCBhbHBoYTogMCB9IH0pXHJcbiAgICB9XHJcbiAgICBpZiAob3B0aW9ucy5pc0NvbnZlcnQpIHtcclxuICAgICAgbGV0IG5ld0Zvcm1hdCA9IG9wdGlvbnMuY29udmVydEZvcm1hdCB8fCAnanBnJ1xyXG4gICAgICBpZiAob3B0aW9ucy5waWNCZWQgPT09ICdpbWd1cicgJiYgbmV3Rm9ybWF0ID09PSAnd2VicCcpIHtcclxuICAgICAgICBuZXdGb3JtYXQgPSAnanBnJ1xyXG4gICAgICB9XHJcbiAgICAgIGltYWdlID0gaW1hZ2UudG9Gb3JtYXQobmV3Rm9ybWF0LCB7XHJcbiAgICAgICAgcXVhbGl0eVxyXG4gICAgICB9KVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHJhd0Zvcm1hdCAmJiB2YWxpZE91dHB1dEZvcm1hdChyYXdGb3JtYXQpKSB7XHJcbiAgICAgICAgaW1hZ2UgPSBpbWFnZS50b0Zvcm1hdChyYXdGb3JtYXQgYXMgYW55LCB7XHJcbiAgICAgICAgICBxdWFsaXR5XHJcbiAgICAgICAgfSlcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpbWFnZSA9IGltYWdlLnRvRm9ybWF0KCdqcGcnLCB7XHJcbiAgICAgICAgICBxdWFsaXR5XHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGF3YWl0IGltYWdlLnRvQnVmZmVyKClcclxuICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgY29uc29sZS5sb2coZXJyb3IpXHJcbiAgICByZXR1cm4gaW1nXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBpbWFnZUZvcm1hdExpc3QgPSBbJ2pwZycsICdqcGVnJywgJ3BuZycsICd3ZWJwJywgJ2JtcCcsICd0aWZmJywgJ3RpZicsICdzdmcnLCAnaWNvJywgJ2F2aWYnLCAnaGVpZicsICdoZWljJ11cclxuXHJcbmV4cG9ydCBjb25zdCBuZWVkQWRkV2F0ZXJtYXJrID0gKHdhdGVybWFya09wdGlvbnM6IElCdWlsZEluV2F0ZXJNYXJrT3B0aW9ucyB8IHVuZGVmaW5lZCwgZmlsZUV4dDogc3RyaW5nKTogYm9vbGVhbiA9PiB7XHJcbiAgZmlsZUV4dCA9IGZpbGVFeHQudG9Mb3dlckNhc2UoKS5yZXBsYWNlKCcuJywgJycpXHJcbiAgcmV0dXJuICEhd2F0ZXJtYXJrT3B0aW9ucyAmJiAhIXdhdGVybWFya09wdGlvbnMuaXNBZGRXYXRlcm1hcmsgJiYgaW1hZ2VGb3JtYXRMaXN0LmluY2x1ZGVzKGZpbGVFeHQpXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBuZWVkQ29tcHJlc3MgPSAoY29tcHJlc3NPcHRpb25zOiBJQnVpbGRJbkNvbXByZXNzT3B0aW9ucyB8IHVuZGVmaW5lZCwgZmlsZUV4dDogc3RyaW5nKTogYm9vbGVhbiA9PiB7XHJcbiAgZmlsZUV4dCA9IGZpbGVFeHQudG9Mb3dlckNhc2UoKS5yZXBsYWNlKCcuJywgJycpXHJcbiAgaWYgKCFpbWFnZUZvcm1hdExpc3QuaW5jbHVkZXMoZmlsZUV4dCkpIHtcclxuICAgIHJldHVybiBmYWxzZVxyXG4gIH1cclxuICBpZiAoIWNvbXByZXNzT3B0aW9ucykge1xyXG4gICAgcmV0dXJuIGZhbHNlXHJcbiAgfVxyXG5cclxuICBjb21wcmVzc09wdGlvbnMgPSBmb3JtYXRPcHRpb25zKGNvbXByZXNzT3B0aW9ucylcclxuICBjb25zdCB7IHF1YWxpdHksIGlzUmVTaXplQnlQZXJjZW50LCByZVNpemVQZXJjZW50LCBpc1JlU2l6ZSwgcmVTaXplSGVpZ2h0LCByZVNpemVXaWR0aCwgaXNSb3RhdGUsIHJvdGF0ZURlZ3JlZSwgaXNDb252ZXJ0LCBjb252ZXJ0Rm9ybWF0IH0gPSBjb21wcmVzc09wdGlvbnNcclxuXHJcbiAgaWYgKHZhbGlkUGFyYW0ocXVhbGl0eSkgJiYgcXVhbGl0eSEgPCAxMDApIHtcclxuICAgIHJldHVybiB0cnVlXHJcbiAgfVxyXG4gIGlmIChpc1JlU2l6ZUJ5UGVyY2VudCAmJiB2YWxpZFBhcmFtKHJlU2l6ZVBlcmNlbnQpKSB7XHJcbiAgICByZXR1cm4gdHJ1ZVxyXG4gIH1cclxuICBpZiAoaXNSZVNpemUgJiYgKCh0eXBlb2YgcmVTaXplSGVpZ2h0ID09PSAnbnVtYmVyJyAmJiByZVNpemVIZWlnaHQgPiAwKSB8fCAodHlwZW9mIHJlU2l6ZVdpZHRoID09PSAnbnVtYmVyJyAmJiByZVNpemVXaWR0aCA+IDApKSkge1xyXG4gICAgcmV0dXJuIHRydWVcclxuICB9XHJcbiAgaWYgKGlzUm90YXRlICYmIHJvdGF0ZURlZ3JlZSkge1xyXG4gICAgcmV0dXJuIHRydWVcclxuICB9XHJcbiAgaWYgKGlzQ29udmVydCkge1xyXG4gICAgY29uc3QgbmV3Rm9ybWF0ID0gY29udmVydEZvcm1hdCB8fCAnanBnJ1xyXG4gICAgcmV0dXJuIGZpbGVFeHQgIT09IG5ld0Zvcm1hdFxyXG4gIH1cclxuICByZXR1cm4gZmFsc2VcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IHJlbW92ZUV4aWYgPSBhc3luYyAoaW1nOiBCdWZmZXIsIGZpbGVFeHQ6IHN0cmluZyk6IFByb21pc2U8QnVmZmVyPiA9PiB7XHJcbiAgZmlsZUV4dCA9IGZpbGVFeHQudG9Mb3dlckNhc2UoKS5yZXBsYWNlKCcuJywgJycpXHJcbiAgaWYgKCFpbWFnZUZvcm1hdExpc3QuaW5jbHVkZXMoZmlsZUV4dCkpIHtcclxuICAgIHJldHVybiBpbWdcclxuICB9XHJcbiAgcmV0dXJuIGF3YWl0IHNoYXJwKGltZykudG9CdWZmZXIoKVxyXG59XHJcbiIsImltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXHJcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSdcclxuaW1wb3J0IHsgaXNVcmwgfSBmcm9tICcuLi8uLi91dGlscy9jb21tb24nXHJcbmltcG9ydCB7IElQaWNHbywgSVBsdWdpbiB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5cclxuY29uc3QgdXBsb2FkOiBJUGx1Z2luID0ge1xyXG4gIGhhbmRsZTogKGN0eDogSVBpY0dvKSA9PiB7XHJcbiAgICBjb25zdCBjbWQgPSBjdHguY21kXHJcbiAgICBjbWQucHJvZ3JhbVxyXG4gICAgICAuY29tbWFuZCgndXBsb2FkJylcclxuICAgICAgLmRlc2NyaXB0aW9uKCd1cGxvYWQsIGdvIGdvIGdvJylcclxuICAgICAgLmFyZ3VtZW50cygnW2lucHV0Li4uXScpXHJcbiAgICAgIC5hbGlhcygndScpXHJcbiAgICAgIC5hY3Rpb24oKGlucHV0OiBzdHJpbmdbXSkgPT4ge1xyXG4gICAgICAgIChhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBpbnB1dExpc3QgPSBpbnB1dFxyXG4gICAgICAgICAgICAubWFwKChpdGVtOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4gaXNVcmwoaXRlbSkgPyBpdGVtIDogcGF0aC5yZXNvbHZlKGl0ZW0pXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5maWx0ZXIoKGl0ZW06IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGV4aXN0ID0gZnMuZXhpc3RzU3luYyhpdGVtKSB8fCBpc1VybChpdGVtKVxyXG4gICAgICAgICAgICAgIGlmICghZXhpc3QpIHtcclxuICAgICAgICAgICAgICAgIGN0eC5sb2cud2FybihgJHtpdGVtfSBkb2VzIG5vdCBleGlzdC5gKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICByZXR1cm4gZXhpc3RcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIGF3YWl0IGN0eC51cGxvYWQoaW5wdXRMaXN0KVxyXG4gICAgICAgIH0pKCkuY2F0Y2goKGUpID0+IHsgY3R4LmxvZy5lcnJvcihlKSB9KVxyXG4gICAgICB9KVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgdXBsb2FkXHJcbiIsIlxyXG5pbXBvcnQgeyBJUGljR28sIElQbHVnaW5Db25maWcsIElCdWlsZEluQ29tcHJlc3NPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcclxuXHJcbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XHJcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SUJ1aWxkSW5Db21wcmVzc09wdGlvbnM+KCdidWlsZEluLmNvbXByZXNzJykgfHwge31cclxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3F1YWxpdHknLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19RVUFMSVRZJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnF1YWxpdHkgfHwgMTAwXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnaXNDb252ZXJ0JyxcclxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19JU0NPTlZFUlQnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuaXNDb252ZXJ0IHx8IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnY29udmVydEZvcm1hdCcsXHJcbiAgICAgIHR5cGU6ICdsaXN0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfQ09OVkVSVEZPUk1BVCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgY2hvaWNlczogWydhdmlmJywgJ2R6JywgJ2ZpdHMnLCAnZ2lmJywgJ2hlaWYnLCAnaW5wdXQnLCAnanBlZycsICdqcGcnLCAnanAyJywgJ2p4bCcsICdtYWdpY2snLCAnb3BlbnNsaWRlJywgJ3BkZicsICdwbmcnLCAncHBtJywgJ3JhdycsICdzdmcnLCAndGlmZicsICd0aWYnLCAndicsICd3ZWJwJ10sXHJcbiAgICAgIGRlZmF1bHQ6ICdqcGcnXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnaXNSZVNpemUnLFxyXG4gICAgICB0eXBlOiAnY29uZmlybScsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0lTUkVTSVpFJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmlzUmVTaXplIHx8IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAncmVTaXplV2lkdGgnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19SRVNJWkVXSURUSCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5yZVNpemVXaWR0aCB8fCA1MDBcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdyZVNpemVIZWlnaHQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19SRVNJWkVIRUlHSFQnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucmVTaXplSGVpZ2h0IHx8IDUwMFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3NraXBSZVNpemVPZlNtYWxsSW1nJyxcclxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19TS0lQUkVTSVpFT0ZTTUFMTElNRycpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5za2lwUmVTaXplT2ZTbWFsbEltZyB8fCBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2lzUmVTaXplQnlQZXJjZW50JyxcclxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19JU1JFU0laRUJZUEVSQ0VOVCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5pc1JlU2l6ZUJ5UGVyY2VudCB8fCBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3JlU2l6ZVBlcmNlbnQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19SRVNJWkVQRVJDRU5UJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnJlU2l6ZVBlcmNlbnQgfHwgNTBcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdpc1JvdGF0ZScsXHJcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfSVNST1RBVEUnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuaXNSb3RhdGUgfHwgZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdyb3RhdGVEZWdyZWUnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19ST1RBVEVERUdSRUUnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucm90YXRlRGVncmVlIHx8IDkwXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnaXNSZW1vdmVFeGlmJyxcclxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19JU1JFTU9WRUVYSUYnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuaXNSZW1vdmVFeGlmIHx8IGZhbHNlXHJcbiAgICB9XHJcbiAgXVxyXG4gIHJldHVybiBjb25maWdcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIGNvbmZpZ1xyXG59XHJcbiIsIlxyXG5pbXBvcnQgeyBJUGljR28sIElQbHVnaW5Db25maWcsIElCdWlsZEluV2F0ZXJNYXJrT3B0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5pbXBvcnQgeyBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXHJcblxyXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xyXG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElCdWlsZEluV2F0ZXJNYXJrT3B0aW9ucz4oJ2J1aWxkSW4ud2F0ZXJtYXJrJykgfHwge31cclxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2lzQWRkV2F0ZXJtYXJrJyxcclxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfSVNBRERXQVRFUk1BUksnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuaXNBZGRXYXRlcm1hcmsgfHwgZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd3YXRlcm1hcmtUeXBlJyxcclxuICAgICAgdHlwZTogJ2xpc3QnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVFlQRScpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgY2hvaWNlczogWyd0ZXh0JywgJ2ltYWdlJ10sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcud2F0ZXJtYXJrVHlwZSB8fCAndGV4dCdcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdpc0Z1bGxTY3JlZW5XYXRlcm1hcmsnLFxyXG4gICAgICB0eXBlOiAnY29uZmlybScsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19JU0ZVTExTQ1JFRU5XQVRFUk1BUksnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuaXNGdWxsU2NyZWVuV2F0ZXJtYXJrIHx8IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnd2F0ZXJtYXJrRGVncmVlJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0RFR1JFRScpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy53YXRlcm1hcmtEZWdyZWUgfHwgMFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3dhdGVybWFya1RleHQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVEVYVCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy53YXRlcm1hcmtUZXh0IHx8ICcnXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnd2F0ZXJtYXJrRm9udFBhdGgnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVEVYVEZPTlRQQVRIJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLndhdGVybWFya0ZvbnRQYXRoIHx8ICcnXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnd2F0ZXJtYXJrU2NhbGVSYXRpbycsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktGT05UUkFUSU8nKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcud2F0ZXJtYXJrU2NhbGVSYXRpbyB8fCAwLjE1XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnd2F0ZXJtYXJrQ29sb3InLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVENPTE9SJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLndhdGVybWFya0NvbG9yIHx8ICdyZ2JhKDIwNCwgMjA0LCAyMDQsIDAuNDUpJ1xyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3dhdGVybWFya0ltYWdlUGF0aCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktJTUFHRVBBVEgnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcud2F0ZXJtYXJrSW1hZ2VQYXRoIHx8ICcnXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnd2F0ZXJtYXJrUG9zaXRpb24nLFxyXG4gICAgICB0eXBlOiAnbGlzdCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktQT1NJVElPTicpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgY2hvaWNlczogWydub3J0aCcsICdub3J0aGVhc3QnLCAnc291dGhlYXN0JywgJ3NvdXRoJywgJ3NvdXRod2VzdCcsICdub3J0aHdlc3QnLCAnd2VzdCcsICdlYXN0JywgJ2NlbnRlcicsICdjZW50cmUnXSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy53YXRlcm1hcmtQb3NpdGlvbiB8fCAnc291dGhlYXN0J1xyXG4gICAgfVxyXG4gIF1cclxuICByZXR1cm4gY29uZmlnXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICBjb25maWdcclxufVxyXG4iLCJcclxuaW1wb3J0IHsgSVBpY0dvLCBJUGx1Z2luQ29uZmlnIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcclxuXHJcbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XHJcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8YW55PignYnVpbGRJbi5yZW5hbWUnKSB8fCB7fVxyXG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xyXG4gICAge1xyXG4gICAgICBuYW1lOiAnZm9ybWF0JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fUkVOQU1FX0ZPUk1BVCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5mb3JtYXQgfHwgJ3tmaWxlbmFtZX0nXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnZW5hYmxlJyxcclxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9SRU5BTUVfRU5BQkxFJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmVuYWJsZSB8fCBmYWxzZVxyXG4gICAgfVxyXG4gIF1cclxuICByZXR1cm4gY29uZmlnXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICBjb25maWdcclxufVxyXG4iLCJpbXBvcnQgeyBJUGljR28sIElQbHVnaW5Db25maWcsIElTdHJpbmdLZXlNYXAgfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IGNvbXByZXNzIGZyb20gJy4uL2JlZm9yZXRyYW5zZm9ybWVyL2NvbXByZXNzJ1xyXG5pbXBvcnQgd2F0ZXJtYXJrIGZyb20gJy4uL2JlZm9yZXRyYW5zZm9ybWVyL3dhdGVybWFyaydcclxuaW1wb3J0IHJlbmFtZSBmcm9tICcuLi9iZWZvcmV1cGxvYWQvYnVpbGRJblJlbmFtZSdcclxuXHJcbi8vIGhhbmRsZSBtb2R1bGVzIGNvbmZpZyAtPiBzYXZlIHRvIHBpY2dvIGNvbmZpZyBmaWxlXHJcbmNvbnN0IGhhbmRsZUNvbmZpZyA9IGFzeW5jIChjdHg6IElQaWNHbywgcHJvbXB0czogSVBsdWdpbkNvbmZpZ1tdLCBtb2R1bGU6IHN0cmluZywgbmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiA9PiB7XHJcbiAgY29uc3QgYW5zd2VyID0gYXdhaXQgY3R4LmNtZC5pbnF1aXJlci5wcm9tcHQocHJvbXB0cylcclxuICBjb25zdCBjb25maWdOYW1lID0gbW9kdWxlID09PSAndXBsb2FkZXInXHJcbiAgICA/IGBwaWNCZWQuJHtuYW1lfWAgOiBtb2R1bGUgPT09ICd0cmFuc2Zvcm1lcidcclxuICAgICAgPyBgdHJhbnNmb3JtZXIuJHtuYW1lfWAgOiBtb2R1bGUgPT09ICdidWlsZGluJ1xyXG4gICAgICAgID8gYGJ1aWxkSW4uJHtuYW1lfWAgOiBuYW1lXHJcbiAgY3R4LnNhdmVDb25maWcoe1xyXG4gICAgW2NvbmZpZ05hbWVdOiBhbnN3ZXJcclxuICB9KVxyXG4gIGlmIChtb2R1bGUgPT09ICd1cGxvYWRlcicpIHtcclxuICAgIGN0eC5zYXZlQ29uZmlnKHtcclxuICAgICAgJ3BpY0JlZC5jdXJyZW50JzogbmFtZSxcclxuICAgICAgJ3BpY0JlZC51cGxvYWRlcic6IG5hbWVcclxuICAgIH0pXHJcbiAgfSBlbHNlIGlmIChtb2R1bGUgPT09ICd0cmFuc2Zvcm1lcicpIHtcclxuICAgIGN0eC5zYXZlQ29uZmlnKHtcclxuICAgICAgJ3BpY0JlZC50cmFuc2Zvcm1lcic6IG5hbWVcclxuICAgIH0pXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBzZXR0aW5nID0ge1xyXG4gIGhhbmRsZTogKGN0eDogSVBpY0dvKSA9PiB7XHJcbiAgICBjb25zdCBjbWQgPSBjdHguY21kXHJcbiAgICBjbWQucHJvZ3JhbVxyXG4gICAgICAuY29tbWFuZCgnc2V0JylcclxuICAgICAgLmFsaWFzKCdjb25maWcnKVxyXG4gICAgICAuYXJndW1lbnRzKCc8bW9kdWxlPiBbbmFtZV0nKVxyXG4gICAgICAuZGVzY3JpcHRpb24oJ2NvbmZpZ3VyZSBjb25maWcgb2YgcGljZ28gbW9kdWxlcywgdXBsb2FkZXJ8dHJhbnNmb3JtZXJ8cGx1Z2lufGJ1aWxkaW4nKVxyXG4gICAgICAuYWN0aW9uKChtb2R1bGU6IHN0cmluZywgbmFtZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgKGFzeW5jICgpID0+IHtcclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIC8vIC8vIGxvYWQgdGhpcmQtcGFydHkgcGx1Z2luc1xyXG4gICAgICAgICAgICAvLyBhd2FpdCBjdHgucGx1Z2luTG9hZGVyLmxvYWQoKVxyXG4gICAgICAgICAgICAvLyBpZiBhIG1vZHVsZSBpcyBzcGVjaWZpYywgdGhlbiBqdXN0IHNldCB0aGlzIG9wdGlvbiBpbiBjb25maWdcclxuICAgICAgICAgICAgc3dpdGNoIChtb2R1bGUpIHtcclxuICAgICAgICAgICAgICBjYXNlICdidWlsZGluJzpcclxuICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSAnY29tcHJlc3MnKSB7XHJcbiAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZUNvbmZpZyhjdHgsIGNvbXByZXNzLmNvbmZpZyhjdHgpLCBtb2R1bGUsIG5hbWUpXHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICd3YXRlcm1hcmsnKSB7XHJcbiAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZUNvbmZpZyhjdHgsIHdhdGVybWFyay5jb25maWcoY3R4KSwgbW9kdWxlLCBuYW1lKVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09PSAncmVuYW1lJykge1xyXG4gICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVDb25maWcoY3R4LCByZW5hbWUuY29uZmlnKGN0eCksIG1vZHVsZSwgbmFtZSlcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHByb21wdHMgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2xpc3QnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2J1aWxkaW4nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgY2hvaWNlczogWydjb21wcmVzcycsICd3YXRlcm1hcmsnLCAncmVuYW1lJ10sXHJcbiAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnQ2hvb3NlIGEgYnVpbGRpbiBtb2R1bGUnXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGFuc3dlciA9IGF3YWl0IGN0eC5jbWQuaW5xdWlyZXIucHJvbXB0PElTdHJpbmdLZXlNYXA8YW55Pj4ocHJvbXB0cylcclxuICAgICAgICAgICAgICAgICAgaWYgKGFuc3dlci5idWlsZGluID09PSAnY29tcHJlc3MnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlQ29uZmlnKGN0eCwgY29tcHJlc3MuY29uZmlnKGN0eCksIG1vZHVsZSwgYW5zd2VyLmJ1aWxkaW4pXHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYW5zd2VyLmJ1aWxkaW4gPT09ICd3YXRlcm1hcmsnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlQ29uZmlnKGN0eCwgd2F0ZXJtYXJrLmNvbmZpZyhjdHgpLCBtb2R1bGUsIGFuc3dlci5idWlsZGluKVxyXG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFuc3dlci5idWlsZGluID09PSAncmVuYW1lJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZUNvbmZpZyhjdHgsIHJlbmFtZS5jb25maWcoY3R4KSwgbW9kdWxlLCBhbnN3ZXIuYnVpbGRpbilcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgICBjYXNlICd1cGxvYWRlcic6XHJcbiAgICAgICAgICAgICAgY2FzZSAndHJhbnNmb3JtZXInOlxyXG4gICAgICAgICAgICAgICAgaWYgKG5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IGN0eC5oZWxwZXJbbW9kdWxlXS5nZXQobmFtZSlcclxuICAgICAgICAgICAgICAgICAgaWYgKCFpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN0eC5sb2cuZXJyb3IoYE5vICR7bW9kdWxlfSBuYW1lZCAke25hbWV9YClcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBpZiAoaXRlbS5jb25maWcpIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVDb25maWcoY3R4LCBpdGVtLmNvbmZpZyhjdHgpLCBtb2R1bGUsIG5hbWUpXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHByb21wdHMgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2xpc3QnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZTogYCR7bW9kdWxlfWAsXHJcbiAgICAgICAgICAgICAgICAgICAgICBjaG9pY2VzOiBjdHguaGVscGVyW21vZHVsZV0uZ2V0SWRMaXN0KCksXHJcbiAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgQ2hvb3NlIGEobikgJHttb2R1bGV9YFxyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gZGVmYXVsdDogY3R4LmdldENvbmZpZygncGljQmVkLnVwbG9hZGVyJykgfHwgY3R4LmdldENvbmZpZygncGljQmVkLmN1cnJlbnQnKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICAgICAgICBjb25zdCBhbnN3ZXIgPSBhd2FpdCBjdHguY21kLmlucXVpcmVyLnByb21wdDxJU3RyaW5nS2V5TWFwPGFueT4+KHByb21wdHMpXHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBjdHguaGVscGVyW21vZHVsZV0uZ2V0KGFuc3dlclttb2R1bGVdKVxyXG4gICAgICAgICAgICAgICAgICBpZiAoaXRlbT8uY29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlQ29uZmlnKGN0eCwgaXRlbS5jb25maWcoY3R4KSwgbW9kdWxlLCBhbnN3ZXJbbW9kdWxlXSlcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgICBjYXNlICdwbHVnaW4nOlxyXG4gICAgICAgICAgICAgICAgaWYgKG5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKCFuYW1lLmluY2x1ZGVzKCdwaWNnby1wbHVnaW4tJykpIHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lID0gYHBpY2dvLXBsdWdpbi0ke25hbWV9YFxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhjdHguZ2V0Q29uZmlnKCdwaWNnb1BsdWdpbnMnKSkuaW5jbHVkZXMobmFtZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY3R4LnBsdWdpbkxvYWRlci5nZXRQbHVnaW4obmFtZSk/LmNvbmZpZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlQ29uZmlnKGN0eCwgY3R4LnBsdWdpbkxvYWRlci5nZXRQbHVnaW4obmFtZSkhLmNvbmZpZyEoY3R4KSwgJ3BsdWdpbicsIG5hbWUpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjdHgubG9nLmVycm9yKGBObyBwbHVnaW4gbmFtZWQgJHtuYW1lfWApXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHByb21wdHMgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2xpc3QnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ3BsdWdpbicsXHJcbiAgICAgICAgICAgICAgICAgICAgICBjaG9pY2VzOiBjdHgucGx1Z2luTG9hZGVyLmdldEZ1bGxMaXN0KCksXHJcbiAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnQ2hvb3NlIGEgcGx1Z2luJ1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICAgICAgICBjb25zdCBhbnN3ZXIgPSBhd2FpdCBjdHguY21kLmlucXVpcmVyLnByb21wdDxhbnk+KHByb21wdHMpXHJcbiAgICAgICAgICAgICAgICAgIGlmIChjdHgucGx1Z2luTG9hZGVyLmdldFBsdWdpbihhbnN3ZXIucGx1Z2luKT8uY29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlQ29uZmlnKGN0eCwgY3R4LnBsdWdpbkxvYWRlci5nZXRQbHVnaW4oYW5zd2VyLnBsdWdpbikhLmNvbmZpZyEoY3R4KSwgJ3BsdWdpbicsIGFuc3dlci5wbHVnaW4pXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIGN0eC5sb2cud2FybihgTm8gbW9kdWxlIG5hbWVkICR7bW9kdWxlfWApXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY3R4LmxvZy53YXJuKCdBdmFpbGFibGUgbW9kdWxlcyBhcmUgdXBsb2FkZXJ8dHJhbnNmb3JtZXJ8cGx1Z2lufGJ1aWxkaW4nKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGN0eC5sb2cuc3VjY2VzcygnQ29uZmlndXJlIGNvbmZpZyBzdWNjZXNzZnVsbHkhJylcclxuICAgICAgICAgICAgaWYgKG1vZHVsZSA9PT0gJ3BsdWdpbicpIHtcclxuICAgICAgICAgICAgICBjdHgubG9nLmluZm8oJ0lmIHlvdSB3YW50IHRvIHVzZSB0aGlzIGNvbmZpZywgcGxlYXNlIHJ1biBcXCdwaWNnbyB1c2UgcGx1Z2luc1xcJycpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgICAgICBjdHgubG9nLmVycm9yKGUpXHJcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmFyZ3YuaW5jbHVkZXMoJy0tZGVidWcnKSkge1xyXG4gICAgICAgICAgICAgIHRocm93IGVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pKCkuY2F0Y2goKGUpID0+IHsgY3R4LmxvZy5lcnJvcihlKSB9KVxyXG4gICAgICB9KVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgc2V0dGluZ1xyXG4iLCJpbXBvcnQgeyBJUGljR28sIElQbHVnaW4sIFVuZGVmaW5hYmxlLCBJQ0xJQ29uZmlncywgSVN0cmluZ0tleU1hcCB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5cclxuY29uc3QgdXNlOiBJUGx1Z2luID0ge1xyXG4gIGhhbmRsZTogYXN5bmMgKGN0eDogSVBpY0dvKSA9PiB7XHJcbiAgICBjb25zdCBjbWQgPSBjdHguY21kXHJcbiAgICBjbWQucHJvZ3JhbVxyXG4gICAgICAuY29tbWFuZCgndXNlJylcclxuICAgICAgLmFyZ3VtZW50cygnW21vZHVsZV0nKVxyXG4gICAgICAuZGVzY3JpcHRpb24oJ3VzZSBtb2R1bGVzIG9mIHBpY2dvJylcclxuICAgICAgLmFjdGlvbigobW9kdWxlOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAoYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgLy8gLy8gbG9hZCB0aGlyZC1wYXJ0eSBwbHVnaW5zXHJcbiAgICAgICAgICAgIC8vIGF3YWl0IGN0eC5wbHVnaW5Mb2FkZXIubG9hZCgpXHJcbiAgICAgICAgICAgIGxldCBwcm9tcHRzOiBhbnlbXSA9IFtdXHJcbiAgICAgICAgICAgIGNvbnN0IGNvbmZpZzogSUNMSUNvbmZpZ3MgPSB7XHJcbiAgICAgICAgICAgICAgdXBsb2FkZXI6IHtcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdsaXN0JyxcclxuICAgICAgICAgICAgICAgIG5hbWU6ICd1cGxvYWRlcicsXHJcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnVXNlIGFuIHVwbG9hZGVyJyxcclxuICAgICAgICAgICAgICAgIGNob2ljZXM6IGN0eC5oZWxwZXIudXBsb2FkZXIuZ2V0SWRMaXN0KCksXHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiBjdHguZ2V0Q29uZmlnKCdwaWNCZWQudXBsb2FkZXInKSB8fCBjdHguZ2V0Q29uZmlnKCdwaWNCZWQuY3VycmVudCcpIHx8ICdzbW1zJ1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgdHJhbnNmb3JtZXI6IHtcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdsaXN0JyxcclxuICAgICAgICAgICAgICAgIG5hbWU6ICd0cmFuc2Zvcm1lcicsXHJcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnVXNlIGEgdHJhbnNmb3JtZXInLFxyXG4gICAgICAgICAgICAgICAgY2hvaWNlczogY3R4LmhlbHBlci50cmFuc2Zvcm1lci5nZXRJZExpc3QoKSxcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8c3RyaW5nPj4oJ3BpY0JlZC50cmFuc2Zvcm1lcicpIHx8ICdwYXRoJ1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgcGx1Z2luczoge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogJ2NoZWNrYm94JyxcclxuICAgICAgICAgICAgICAgIG5hbWU6ICdwbHVnaW5zJyxcclxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdVc2UgcGx1Z2lucycsXHJcbiAgICAgICAgICAgICAgICBjaG9pY2VzOiBjdHgucGx1Z2luTG9hZGVyLmdldEZ1bGxMaXN0KCksXHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiBPYmplY3Qua2V5cyhjdHguZ2V0Q29uZmlnKCdwaWNnb1BsdWdpbnMnKSkuZmlsdGVyKChpdGVtOiBzdHJpbmcpID0+IGN0eC5nZXRDb25maWcoYHBpY2dvUGx1Z2lucy4ke2l0ZW19YCkpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIGlmIGFuIG9wdGlvbiBpcyBzcGVjaWZpYywgdGhlbiBqdXN0IHNldCB0aGlzIG9wdGlvbiBpbiBjb25maWdcclxuICAgICAgICAgICAgaWYgKG1vZHVsZSkge1xyXG4gICAgICAgICAgICAgIGlmIChjb25maWdbbW9kdWxlXSkge1xyXG4gICAgICAgICAgICAgICAgcHJvbXB0cy5wdXNoKGNvbmZpZ1ttb2R1bGVdKVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjdHgubG9nLndhcm4oYE5vIG1vZHVsZSBuYW1lZCAke21vZHVsZX1gKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGN0eC5sb2cud2FybignQXZhaWxhYmxlIG1vZHVsZXMgYXJlIHVwbG9hZGVyfHRyYW5zZm9ybWVyfHBsdWdpbnMnKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBwcm9tcHRzID0gT2JqZWN0LmtleXMoY29uZmlnKS5tYXAoKGl0ZW06IHN0cmluZykgPT4gY29uZmlnW2l0ZW1dKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGFuc3dlciA9IGF3YWl0IGNtZC5pbnF1aXJlci5wcm9tcHQ8YW55Pihwcm9tcHRzKVxyXG5cclxuICAgICAgICAgICAgLy8gaGFuZGxlIGZvciBwbHVnaW5zIG9wdGlvbiBmcm9tIEFycmF5IHRvIG9iamVjdFxyXG4gICAgICAgICAgICBpZiAoYW5zd2VyLnBsdWdpbnMpIHtcclxuICAgICAgICAgICAgICBjb25zdCBwbHVnaW5zID0gY3R4LmdldENvbmZpZzxJU3RyaW5nS2V5TWFwPGJvb2xlYW4+PigncGljZ29QbHVnaW5zJylcclxuICAgICAgICAgICAgICBPYmplY3Qua2V5cyhwbHVnaW5zKS5tYXAoKGl0ZW06IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGFuc3dlci5wbHVnaW5zLmluY2x1ZGVzKGl0ZW0pKSB7XHJcbiAgICAgICAgICAgICAgICAgIHBsdWdpbnNbaXRlbV0gPSB0cnVlXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBwbHVnaW5zW2l0ZW1dID0gZmFsc2VcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgIC8vIHNhdmUgY29uZmlnIGZvciBwbHVnaW5zXHJcbiAgICAgICAgICAgICAgY3R4LnNhdmVDb25maWcoe1xyXG4gICAgICAgICAgICAgICAgcGljZ29QbHVnaW5zOiBwbHVnaW5zXHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBzYXZlIGNvbmZpZyBmb3IgdXBsb2FkZXIgJiB0cmFuc2Zvcm1lclxyXG4gICAgICAgICAgICBjdHguc2F2ZUNvbmZpZyh7XHJcbiAgICAgICAgICAgICAgJ3BpY0JlZC5jdXJyZW50JzogYW5zd2VyLnVwbG9hZGVyIHx8IGN0eC5nZXRDb25maWc8c3RyaW5nPigncGljQmVkLmN1cnJlbnQnKSxcclxuICAgICAgICAgICAgICAncGljQmVkLnVwbG9hZGVyJzogYW5zd2VyLnVwbG9hZGVyIHx8IGN0eC5nZXRDb25maWc8c3RyaW5nPigncGljQmVkLmN1cnJlbnQnKSxcclxuICAgICAgICAgICAgICAncGljQmVkLnRyYW5zZm9ybWVyJzogYW5zd2VyLnRyYW5zZm9ybWVyIHx8ICdwYXRoJ1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICBjdHgubG9nLnN1Y2Nlc3MoJ0NvbmZpZ3VyZSBjb25maWcgc3VjY2Vzc2Z1bGx5IScpXHJcbiAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgY3R4LmxvZy5lcnJvcihlKVxyXG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5hcmd2LmluY2x1ZGVzKCctLWRlYnVnJykpIHtcclxuICAgICAgICAgICAgICB0aHJvdyBlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KSgpLmNhdGNoKChlKSA9PiB7IGN0eC5sb2cuZXJyb3IoZSkgfSlcclxuICAgICAgfSlcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHVzZVxyXG4iLCJpbXBvcnQgeyBJUGljR28sIElQbHVnaW4gfSBmcm9tICcuLi8uLi90eXBlcydcclxuXHJcbmNvbnN0IHByb3h5OiBJUGx1Z2luID0ge1xyXG4gIGhhbmRsZTogKGN0eDogSVBpY0dvKSA9PiB7XHJcbiAgICBjb25zdCBjbWQgPSBjdHguY21kXHJcbiAgICBjbWQucHJvZ3JhbVxyXG4gICAgICAub3B0aW9uKCctcCwgLS1wcm94eSA8dXJsPicsICdzZXQgcHJveHkgZm9yIHVwbG9hZGluZycsIChwcm94eTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgY3R4LnNldENvbmZpZyh7XHJcbiAgICAgICAgICAncGljQmVkLnByb3h5JzogcHJveHlcclxuICAgICAgICB9KVxyXG4gICAgICB9KVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgcHJveHlcclxuIiwiaW1wb3J0IG1hdGNoIGZyb20gJ21pbmltYXRjaCdcclxuaW1wb3J0IHsgSVBpY0dvLCBJT3B0aW9ucywgSUZpbGVUcmVlIH0gZnJvbSAnLi4vdHlwZXMnXHJcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSdcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcclxuaW1wb3J0IGdsb2JieSBmcm9tICdnbG9iYnknXHJcbmltcG9ydCBlanMgZnJvbSAnZWpzJ1xyXG5cclxuLyoqXHJcbiAqIEdlbmVyYXRlIHRlbXBsYXRlIGZpbGVzIHRvIGRlc3RpbmF0aW9uIGZpbGVzLlxyXG4gKiBAcGFyYW0ge1BpY0dvfSBjdHhcclxuICogQHBhcmFtIHtJT3B0aW9uc30gb3B0aW9uc1xyXG4gKi9cclxuY29uc3QgZ2VuZXJhdGUgPSBhc3luYyAoY3R4OiBJUGljR28sIG9wdGlvbnM6IElPcHRpb25zKTogUHJvbWlzZTxhbnk+ID0+IHtcclxuICB0cnkge1xyXG4gICAgY29uc3Qgb3B0cyA9IGdldE9wdGlvbnMob3B0aW9ucy50bXApXHJcbiAgICBjb25zdCBzb3VyY2UgPSBwYXRoLmpvaW4ob3B0aW9ucy50bXAsICd0ZW1wbGF0ZScpXHJcbiAgICBsZXQgYW5zd2VycyA9IHt9XHJcbiAgICBpZiAob3B0cy5wcm9tcHRzICYmIG9wdHMucHJvbXB0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGFuc3dlcnMgPSBhd2FpdCBjdHguY21kLmlucXVpcmVyLnByb21wdChvcHRzLnByb21wdHMpXHJcbiAgICB9XHJcbiAgICBsZXQgX2ZpbGVzOiBzdHJpbmdbXSA9IGF3YWl0IGdsb2JieShbJyoqLyonXSwgeyBjd2Q6IHNvdXJjZSwgZG90OiB0cnVlIH0pIC8vIGdldCBmaWxlcycgbmFtZSBhcnJheVxyXG4gICAgX2ZpbGVzID0gX2ZpbGVzLmZpbHRlcigoaXRlbTogc3RyaW5nKSA9PiB7XHJcbiAgICAgIGxldCBnbG9iID0gJydcclxuICAgICAgT2JqZWN0LmtleXMob3B0cy5maWx0ZXJzKS5mb3JFYWNoKChrZXk6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGlmIChtYXRjaChpdGVtLCBrZXksIHsgZG90OiB0cnVlIH0pKSB7XHJcbiAgICAgICAgICBnbG9iID0gaXRlbVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgaWYgKGdsb2IpIHsgLy8gZmluZCBhIGZpbHRlciBleHByZXNzaW9uXHJcbiAgICAgICAgcmV0dXJuIGZpbHRlcnMoY3R4LCBvcHRzLmZpbHRlcnNbZ2xvYl0sIGFuc3dlcnMpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWVcclxuICAgICAgfVxyXG4gICAgfSlcclxuICAgIGlmIChfZmlsZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiBjdHgubG9nLndhcm4oJ1RlbXBsYXRlIGZpbGVzIG5vdCBmb3VuZCEnKVxyXG4gICAgfVxyXG4gICAgY29uc3QgZmlsZXMgPSByZW5kZXIoX2ZpbGVzLCBzb3VyY2UsIGFuc3dlcnMpXHJcbiAgICB3cml0ZUZpbGVUcmVlKG9wdGlvbnMuZGVzdCwgZmlsZXMpXHJcbiAgICBpZiAodHlwZW9mIG9wdHMuY29tcGxldGUgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgb3B0cy5jb21wbGV0ZSh7IGFuc3dlcnMsIG9wdGlvbnMsIGZpbGVzOiBfZmlsZXMsIGN0eCB9KVxyXG4gICAgfVxyXG4gICAgaWYgKG9wdHMuY29tcGxldGVNZXNzYWdlKSB7XHJcbiAgICAgIGN0eC5sb2cuc3VjY2VzcyhvcHRzLmNvbXBsZXRlTWVzc2FnZSlcclxuICAgIH1cclxuICAgIGN0eC5sb2cuc3VjY2VzcygnRG9uZSEnKVxyXG4gIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgcmV0dXJuIGN0eC5sb2cuZXJyb3IoZSlcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm4gdGhlIGZpbHRlcnMnIHJlc3VsdFxyXG4gKiBAcGFyYW0gY3R4IFBpY0dvXHJcbiAqIEBwYXJhbSBleHAgY29uZGl0aW9uIGV4cHJlc3Npb25cclxuICogQHBhcmFtIGRhdGEgb3B0aW9ucyBkYXRhXHJcbiAqL1xyXG5jb25zdCBmaWx0ZXJzID0gKGN0eDogSVBpY0dvLCBleHA6IGFueSwgZGF0YTogYW55KTogYm9vbGVhbiA9PiB7XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC1wbHVzLW9wZXJhbmRzLCBuby1uZXctZnVuYywgQHR5cGVzY3JpcHQtZXNsaW50L25vLWltcGxpZWQtZXZhbFxyXG4gIGNvbnN0IGZuID0gbmV3IEZ1bmN0aW9uKCdkYXRhJywgJ3dpdGggKGRhdGEpIHsgcmV0dXJuICcgKyBleHAgKyAnfScpXHJcbiAgdHJ5IHtcclxuICAgIHJldHVybiBmbihkYXRhKVxyXG4gIH0gY2F0Y2ggKGUpIHtcclxuICAgIGN0eC5sb2cuZXJyb3IoYEVycm9yIHdoZW4gZXZhbHVhdGluZyBmaWx0ZXIgY29uZGl0aW9uOiAke0pTT04uc3RyaW5naWZ5KGV4cCl9YClcclxuICAgIHJldHVybiBmYWxzZVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEdldCB0ZW1wbGF0ZSBvcHRpb25zXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZW1wbGF0ZVBhdGhcclxuICovXHJcbmNvbnN0IGdldE9wdGlvbnMgPSAodGVtcGxhdGVQYXRoOiBzdHJpbmcpOiBhbnkgPT4ge1xyXG4gIGNvbnN0IG9wdGlvbnNQYXRoID0gcGF0aC5qb2luKHRlbXBsYXRlUGF0aCwgJ2luZGV4LmpzJylcclxuICBpZiAoZnMuZXhpc3RzU3luYyhvcHRpb25zUGF0aCkpIHtcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzXHJcbiAgICBjb25zdCBvcHRpb25zID0gcmVxdWlyZShvcHRpb25zUGF0aClcclxuICAgIHJldHVybiBvcHRpb25zXHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiB7fVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIFJlbmRlciBmaWxlcyB0byBhIHZpcnR1YWwgdHJlZSBvYmplY3RcclxuICogQHBhcmFtIHthcnJheX0gZmlsZXNcclxuICovXHJcbmNvbnN0IHJlbmRlciA9IChmaWxlczogc3RyaW5nW10sIHNvdXJjZTogc3RyaW5nLCBvcHRpb25zOiBhbnkpOiBhbnkgPT4ge1xyXG4gIGNvbnN0IGZpbGVUcmVlOiBJRmlsZVRyZWUgPSB7fVxyXG4gIGZpbGVzLmZvckVhY2goKGZpbGVQYXRoOiBzdHJpbmcpOiB2b2lkID0+IHtcclxuICAgIGNvbnN0IGZpbGUgPSBmcy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKHNvdXJjZSwgZmlsZVBhdGgpLCAndXRmOCcpXHJcbiAgICBjb25zdCBjb250ZW50ID0gZWpzLnJlbmRlcihmaWxlLCBvcHRpb25zKVxyXG4gICAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihjb250ZW50KSB8fCAvW15cXHNdLy50ZXN0KGNvbnRlbnQpKSB7XHJcbiAgICAgIGZpbGVUcmVlW2ZpbGVQYXRoXSA9IGNvbnRlbnRcclxuICAgIH1cclxuICB9KVxyXG4gIHJldHVybiBmaWxlVHJlZVxyXG59XHJcblxyXG4vKipcclxuICogV3JpdGUgcmVuZGVyZWQgZmlsZXMnIGNvbnRlbnQgdG8gcmVhbCBmaWxlXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBkaXJcclxuICogQHBhcmFtIHtvYmplY3R9IGZpbGVzXHJcbiAqL1xyXG5jb25zdCB3cml0ZUZpbGVUcmVlID0gKGRpcjogc3RyaW5nLCBmaWxlczogYW55KTogdm9pZCA9PiB7XHJcbiAgT2JqZWN0LmtleXMoZmlsZXMpLmZvckVhY2goKG5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4oZGlyLCBuYW1lKVxyXG4gICAgZnMuZW5zdXJlRGlyU3luYyhwYXRoLmRpcm5hbWUoZmlsZVBhdGgpKVxyXG4gICAgZnMud3JpdGVGaWxlU3luYyhmaWxlUGF0aCwgZmlsZXNbbmFtZV0pXHJcbiAgfSlcclxufVxyXG5cclxuZXhwb3J0IHtcclxuICBmaWx0ZXJzLFxyXG4gIGdlbmVyYXRlLFxyXG4gIHJlbmRlcixcclxuICB3cml0ZUZpbGVUcmVlXHJcbn1cclxuIiwiaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJ1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xyXG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnXHJcbmltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5pdFV0aWxzJ1xyXG5pbXBvcnQgeyBob21lZGlyIH0gZnJvbSAnb3MnXHJcbmltcG9ydCBkb3dubG9hZCBmcm9tICdkb3dubG9hZC1naXQtcmVwbydcclxuaW1wb3J0IHsgSU9wdGlvbnMsIElQbHVnaW4sIElQaWNHbyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5pbXBvcnQgcm0gZnJvbSAncmltcmFmJ1xyXG5cclxuY29uc3QgcnVuID0gKGN0eDogSVBpY0dvLCBvcHRpb25zOiBJT3B0aW9ucyk6IHZvaWQgPT4ge1xyXG4gIC8vIGNvbnN0IG5hbWUgPSBvcHRpb25zLmluUGxhY2UgPyBwYXRoLnJlbGF0aXZlKCcuLi8nLCBwcm9jZXNzLmN3ZCgpKSA6IG9wdGlvbnMucHJvamVjdFxyXG4gIGlmIChvcHRpb25zLm9mZmxpbmUpIHsgLy8gb2ZmbGluZSBtb2RlXHJcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhvcHRpb25zLnRlbXBsYXRlKSkge1xyXG4gICAgICBnZW5lcmF0ZShjdHgsIG9wdGlvbnMpLmNhdGNoKChlKSA9PiB7IGN0eC5sb2cuZXJyb3IoZSkgfSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGN0eC5sb2cuZXJyb3IoYExvY2FsIHRlbXBsYXRlICR7b3B0aW9ucy50ZW1wbGF0ZX0gbm90IGZvdW5kYClcclxuICAgIH1cclxuICB9IGVsc2UgeyAvLyBvbmxpbmUgbW9kZVxyXG4gICAgb3B0aW9ucy50ZW1wbGF0ZSA9ICFvcHRpb25zLmhhc1NsYXNoXHJcbiAgICAgID8gJ1BpY0dvL3BpY2dvLXRlbXBsYXRlLScgKyBvcHRpb25zLnRlbXBsYXRlIC8vIG9mZmljaWFsIHRlbXBsYXRlXHJcbiAgICAgIDogb3B0aW9ucy50ZW1wbGF0ZVxyXG4gICAgZG93bmxvYWRBbmRHZW5lcmF0ZShjdHgsIG9wdGlvbnMpXHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogZG93bmxvYWQgdGVtcGxhdGUgJiBnZW5lcmF0ZVxyXG4gKiBAcGFyYW0geyBQaWNHbyB9IGN0eFxyXG4gKiBAcGFyYW0geyBJT3B0aW9ucyB9IG9wdGlvbnNcclxuICovXHJcbmNvbnN0IGRvd25sb2FkQW5kR2VuZXJhdGUgPSAoY3R4OiBJUGljR28sIG9wdGlvbnM6IElPcHRpb25zKTogdm9pZCA9PiB7XHJcbiAgaWYgKGZzLmV4aXN0c1N5bmMob3B0aW9ucy50bXApKSB7XHJcbiAgICBybS5zeW5jKG9wdGlvbnMudG1wKVxyXG4gIH1cclxuICBjdHgubG9nLmluZm8oJ1RlbXBsYXRlIGZpbGVzIGFyZSBkb3dubG9hZGluZy4uLicpXHJcbiAgZG93bmxvYWQob3B0aW9ucy50ZW1wbGF0ZSwgb3B0aW9ucy50bXAsIHsgY2xvbmU6IG9wdGlvbnMuY2xvbmUgfSwgKGVycjogRXJyb3IpID0+IHtcclxuICAgIGlmIChlcnIpIHtcclxuICAgICAgcmV0dXJuIGN0eC5sb2cuZXJyb3IoZXJyKVxyXG4gICAgfVxyXG4gICAgY3R4LmxvZy5zdWNjZXNzKCdUZW1wbGF0ZSBmaWxlcyBhcmUgZG93bmxvYWRlZCEnKVxyXG4gICAgZ2VuZXJhdGUoY3R4LCBvcHRpb25zKS5jYXRjaCgoZSkgPT4geyBjdHgubG9nLmVycm9yKGUpIH0pXHJcbiAgfSlcclxufVxyXG5cclxuY29uc3QgaW5pdDogSVBsdWdpbiA9IHtcclxuICBoYW5kbGU6IGFzeW5jIChjdHg6IElQaWNHbykgPT4ge1xyXG4gICAgY29uc3QgY21kID0gY3R4LmNtZFxyXG4gICAgY21kLnByb2dyYW1cclxuICAgICAgLmNvbW1hbmQoJ2luaXQnKVxyXG4gICAgICAuYXJndW1lbnRzKCc8dGVtcGxhdGU+IFtwcm9qZWN0XScpXHJcbiAgICAgIC5vcHRpb24oJy0tY2xvbmUnLCAndXNlIGdpdCBjbG9uZScpXHJcbiAgICAgIC5vcHRpb24oJy0tb2ZmbGluZScsICd1c2UgY2FjaGVkIHRlbXBsYXRlJylcclxuICAgICAgLmRlc2NyaXB0aW9uKCdjcmVhdGUgcGljZ28gcGx1Z2luXFwncyBkZXZlbG9wbWVudCB0ZW1wbGF0ZXMnKVxyXG4gICAgICAuYWN0aW9uKCh0ZW1wbGF0ZTogc3RyaW5nLCBwcm9qZWN0OiBzdHJpbmcsIHByb2dyYW06IGFueSkgPT4ge1xyXG4gICAgICAgIChhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAvLyBUaGFua3MgdG8gdnVlLWNsaSBpbml0OiBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLWNsaS9ibG9iL21hc3Rlci9iaW4vdnVlLWluaXRcclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGhhc1NsYXNoID0gdGVtcGxhdGUuaW5jbHVkZXMoJy8nKVxyXG4gICAgICAgICAgICBjb25zdCBpblBsYWNlID0gIXByb2plY3QgfHwgcHJvamVjdCA9PT0gJy4nXHJcbiAgICAgICAgICAgIGNvbnN0IGRlc3QgPSBwYXRoLnJlc29sdmUocHJvamVjdCB8fCAnLicpXHJcbiAgICAgICAgICAgIGNvbnN0IGNsb25lID0gcHJvZ3JhbS5jbG9uZSB8fCBmYWxzZVxyXG4gICAgICAgICAgICBjb25zdCBvZmZsaW5lID0gcHJvZ3JhbS5vZmZsaW5lIHx8IGZhbHNlXHJcbiAgICAgICAgICAgIGNvbnN0IHRtcCA9IHBhdGguam9pbihob21lZGlyKCksICcucGljZ28vdGVtcGxhdGVzJywgdGVtcGxhdGUucmVwbGFjZSgvWy86XS9nLCAnLScpKSAvLyBmb3IgY2FjaGluZyB0ZW1wbGF0ZVxyXG5cclxuICAgICAgICAgICAgaWYgKHByb2dyYW0ub2ZmbGluZSkge1xyXG4gICAgICAgICAgICAgIHRlbXBsYXRlID0gdG1wXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgdGVtcGxhdGUsXHJcbiAgICAgICAgICAgICAgcHJvamVjdCxcclxuICAgICAgICAgICAgICBoYXNTbGFzaCxcclxuICAgICAgICAgICAgICBpblBsYWNlLFxyXG4gICAgICAgICAgICAgIGRlc3QsXHJcbiAgICAgICAgICAgICAgY2xvbmUsXHJcbiAgICAgICAgICAgICAgdG1wLFxyXG4gICAgICAgICAgICAgIG9mZmxpbmVcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gY2hlY2sgaWYgcHJvamVjdCBpcyBlbXB0eSBvciBleGlzdFxyXG4gICAgICAgICAgICBpZiAoaW5QbGFjZSB8fCBmcy5leGlzdHNTeW5jKGRlc3QpKSB7XHJcbiAgICAgICAgICAgICAgYXdhaXQgY3R4LmNtZC5pbnF1aXJlci5wcm9tcHQoW1xyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICB0eXBlOiAnY29uZmlybScsXHJcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGluUGxhY2VcclxuICAgICAgICAgICAgICAgICAgICA/ICdHZW5lcmF0ZSBwcm9qZWN0IGluIGN1cnJlbnQgZGlyZWN0b3J5PydcclxuICAgICAgICAgICAgICAgICAgICA6ICdUYXJnZXQgZGlyZWN0b3J5IGV4aXN0cy4gQ29udGludWU/JyxcclxuICAgICAgICAgICAgICAgICAgbmFtZTogJ29rJ1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIF0pLnRoZW4oKGFuc3dlcjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYW5zd2VyLm9rKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJ1bihjdHgsIG9wdGlvbnMpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfSBlbHNlIHsgLy8gcHJvamVjdCBpcyBnaXZlblxyXG4gICAgICAgICAgICAgIHJ1bihjdHgsIG9wdGlvbnMpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgICAgICBjdHgubG9nLmVycm9yKGUpXHJcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmFyZ3YuaW5jbHVkZXMoJy0tZGVidWcnKSkge1xyXG4gICAgICAgICAgICAgIHRocm93IGVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pKCkuY2F0Y2goKGUpID0+IHsgY3R4LmxvZy5lcnJvcihlKSB9KVxyXG4gICAgICB9KVxyXG4gICAgICAub24oJy0taGVscCcsICgpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZygpXHJcbiAgICAgICAgY29uc29sZS5sb2coJ0V4YW1wbGVzOicpXHJcbiAgICAgICAgY29uc29sZS5sb2coKVxyXG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJyAgIyBjcmVhdGUgYSBuZXcgcHJvamVjdCB3aXRoIGFuIG9mZmljaWFsIHRlbXBsYXRlJykpXHJcbiAgICAgICAgY29uc29sZS5sb2coJyAgJCBwaWNnbyBpbml0IHBsdWdpbiBteS1wcm9qZWN0JylcclxuICAgICAgICBjb25zb2xlLmxvZygpXHJcbiAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnICAjIGNyZWF0ZSBhIG5ldyBwcm9qZWN0IHN0cmFpZ2h0IGZyb20gYSBnaXRodWIgdGVtcGxhdGUnKSlcclxuICAgICAgICBjb25zb2xlLmxvZygnICAkIHBpY2dvIGluaXQgdXNlcm5hbWUvcmVwbyBteS1wcm9qZWN0JylcclxuICAgICAgICBjb25zb2xlLmxvZygpXHJcbiAgICAgIH0pXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBpbml0XHJcbiIsImltcG9ydCB7IElQbHVnaW4sIElQaWNHbywgSVN0cmluZ0tleU1hcCB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5cclxuY29uc3QgaTE4bjogSVBsdWdpbiA9IHtcclxuICBoYW5kbGU6IChjdHg6IElQaWNHbykgPT4ge1xyXG4gICAgY29uc3QgY21kID0gY3R4LmNtZFxyXG4gICAgY21kLnByb2dyYW1cclxuICAgICAgLmNvbW1hbmQoJ2kxOG4nKVxyXG4gICAgICAuYXJndW1lbnRzKCdbbGFuZ10nKVxyXG4gICAgICAuZGVzY3JpcHRpb24oJ2NoYW5nZSBwaWNnbyBsYW5ndWFnZScpXHJcbiAgICAgIC5hY3Rpb24oYXN5bmMgKGxhbmc6IHN0cmluZyA9ICcnKSA9PiB7XHJcbiAgICAgICAgY29uc3QgbGlzdCA9IGN0eC5pMThuLmdldExhbmd1YWdlTGlzdCgpXHJcbiAgICAgICAgaWYgKCFsYW5nKSB7XHJcbiAgICAgICAgICBjb25zdCBwcm9tcHRzID0gW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgdHlwZTogJ2xpc3QnLFxyXG4gICAgICAgICAgICAgIG5hbWU6ICdpMThuJyxcclxuICAgICAgICAgICAgICBjaG9pY2VzOiBsaXN0LFxyXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdDaG9vc2UgYSBsYW5ndWFnZScsXHJcbiAgICAgICAgICAgICAgZGVmYXVsdDogY3R4LmdldENvbmZpZygnc2V0dGluZ3MubGFuZ3VhZ2UnKSB8fCAnemgtQ04nXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIF1cclxuICAgICAgICAgIGNvbnN0IGFuc3dlciA9IGF3YWl0IGN0eC5jbWQuaW5xdWlyZXIucHJvbXB0PElTdHJpbmdLZXlNYXA8c3RyaW5nPj4ocHJvbXB0cylcclxuICAgICAgICAgIGN0eC5pMThuLnNldExhbmd1YWdlKGFuc3dlci5pMThuKVxyXG4gICAgICAgICAgY3R4LmxvZy5zdWNjZXNzKGBMYW5ndWFnZSBzZXQgdG8gJHthbnN3ZXIuaTE4bn1gKVxyXG4gICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghbGlzdC5pbmNsdWRlcyhsYW5nKSkge1xyXG4gICAgICAgICAgcmV0dXJuIGN0eC5sb2cud2FybignTm8gc3VjaCBsYW5ndWFnZScpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGN0eC5pMThuLnNldExhbmd1YWdlKGxhbmcpXHJcbiAgICAgICAgY3R4LmxvZy5zdWNjZXNzKGBMYW5ndWFnZSBzZXQgdG8gJHtsYW5nfWApXHJcbiAgICAgIH0pXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBpMThuXHJcbiIsImltcG9ydCB7IElQbHVnaW4sIElMaWZlY3ljbGVQbHVnaW5zIH0gZnJvbSAnLi4vdHlwZXMnXHJcblxyXG5leHBvcnQgY2xhc3MgTGlmZWN5Y2xlUGx1Z2lucyBpbXBsZW1lbnRzIElMaWZlY3ljbGVQbHVnaW5zIHtcclxuICBzdGF0aWMgY3VycmVudFBsdWdpbjogc3RyaW5nIHwgbnVsbFxyXG4gIHByaXZhdGUgcmVhZG9ubHkgbGlzdDogTWFwPHN0cmluZywgSVBsdWdpbj5cclxuICBwcml2YXRlIHJlYWRvbmx5IHBsdWdpbklkTWFwOiBNYXA8c3RyaW5nLCBzdHJpbmdbXT5cclxuICBwcml2YXRlIHJlYWRvbmx5IG5hbWU6IHN0cmluZ1xyXG5cclxuICBjb25zdHJ1Y3RvciAobmFtZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLm5hbWUgPSBuYW1lXHJcbiAgICB0aGlzLmxpc3QgPSBuZXcgTWFwKClcclxuICAgIHRoaXMucGx1Z2luSWRNYXAgPSBuZXcgTWFwKClcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyIChpZDogc3RyaW5nLCBwbHVnaW46IElQbHVnaW4pOiB2b2lkIHtcclxuICAgIGlmICghaWQpIHRocm93IG5ldyBUeXBlRXJyb3IoJ2lkIGlzIHJlcXVpcmVkIScpXHJcbiAgICBpZiAodHlwZW9mIHBsdWdpbi5oYW5kbGUgIT09ICdmdW5jdGlvbicpIHRocm93IG5ldyBUeXBlRXJyb3IoJ3BsdWdpbi5oYW5kbGUgbXVzdCBiZSBhIGZ1bmN0aW9uIScpXHJcbiAgICBpZiAodGhpcy5saXN0LmhhcyhpZCkpIHRocm93IG5ldyBUeXBlRXJyb3IoYCR7dGhpcy5uYW1lfSBkdXBsaWNhdGUgaWQ6ICR7aWR9IWApXHJcbiAgICB0aGlzLmxpc3Quc2V0KGlkLCBwbHVnaW4pXHJcbiAgICBpZiAoTGlmZWN5Y2xlUGx1Z2lucy5jdXJyZW50UGx1Z2luKSB7XHJcbiAgICAgIGlmICh0aGlzLnBsdWdpbklkTWFwLmhhcyhMaWZlY3ljbGVQbHVnaW5zLmN1cnJlbnRQbHVnaW4pKSB7XHJcbiAgICAgICAgdGhpcy5wbHVnaW5JZE1hcC5nZXQoTGlmZWN5Y2xlUGx1Z2lucy5jdXJyZW50UGx1Z2luKT8ucHVzaChpZClcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnBsdWdpbklkTWFwLnNldChMaWZlY3ljbGVQbHVnaW5zLmN1cnJlbnRQbHVnaW4sIFtpZF0pXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVucmVnaXN0ZXIgKHBsdWdpbk5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMucGx1Z2luSWRNYXAuaGFzKHBsdWdpbk5hbWUpKSB7XHJcbiAgICAgIGNvbnN0IHBsdWdpbkxpc3QgPSB0aGlzLnBsdWdpbklkTWFwLmdldChwbHVnaW5OYW1lKVxyXG4gICAgICBwbHVnaW5MaXN0Py5mb3JFYWNoKChwbHVnaW46IHN0cmluZykgPT4ge1xyXG4gICAgICAgIHRoaXMubGlzdC5kZWxldGUocGx1Z2luKVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0TmFtZSAoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLm5hbWVcclxuICB9XHJcblxyXG4gIGdldCAoaWQ6IHN0cmluZyk6IElQbHVnaW4gfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMubGlzdC5nZXQoaWQpXHJcbiAgfVxyXG5cclxuICBnZXRMaXN0ICgpOiBJUGx1Z2luW10ge1xyXG4gICAgcmV0dXJuIFsuLi50aGlzLmxpc3QudmFsdWVzKCldXHJcbiAgfVxyXG5cclxuICBnZXRJZExpc3QgKCk6IHN0cmluZ1tdIHtcclxuICAgIHJldHVybiBbLi4udGhpcy5saXN0LmtleXMoKV1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBzZXRDdXJyZW50UGx1Z2luTmFtZSA9IChuYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbCk6IHZvaWQgPT4ge1xyXG4gIExpZmVjeWNsZVBsdWdpbnMuY3VycmVudFBsdWdpbiA9IG5hbWVcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGdldEN1cnJlbnRQbHVnaW5OYW1lID0gKCk6IHN0cmluZyB8IG51bGwgPT4ge1xyXG4gIHJldHVybiBMaWZlY3ljbGVQbHVnaW5zLmN1cnJlbnRQbHVnaW5cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgTGlmZWN5Y2xlUGx1Z2luc1xyXG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbWlzdXNlZC1wcm9taXNlcyAqL1xyXG5pbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY29tbWFuZGVyJ1xyXG5pbXBvcnQgaW5xdWlyZXIsIHsgSW5xdWlyZXIgfSBmcm9tICdpbnF1aXJlcidcclxuaW1wb3J0IHsgSVBsdWdpbiwgSUNvbW1hbmRlciwgSVBpY0dvIH0gZnJvbSAnLi4vdHlwZXMnXHJcbmltcG9ydCBjb21tYW5kZXJzIGZyb20gJy4uL3BsdWdpbnMvY29tbWFuZGVyJ1xyXG5pbXBvcnQgeyBnZXRDdXJyZW50UGx1Z2luTmFtZSB9IGZyb20gJy4vTGlmZWN5Y2xlUGx1Z2lucydcclxuXHJcbmV4cG9ydCBjbGFzcyBDb21tYW5kZXIgaW1wbGVtZW50cyBJQ29tbWFuZGVyIHtcclxuICBwcml2YXRlIHJlYWRvbmx5IG5hbWUgPSAnY29tbWFuZGVyJ1xyXG4gIHN0YXRpYyBjdXJyZW50UGx1Z2luOiBzdHJpbmcgfCBudWxsXHJcbiAgcHJpdmF0ZSByZWFkb25seSBsaXN0OiBNYXA8c3RyaW5nLCBJUGx1Z2luPiA9IG5ldyBNYXAoKVxyXG4gIHByaXZhdGUgcmVhZG9ubHkgcGx1Z2luSWRNYXA6IE1hcDxzdHJpbmcsIHN0cmluZ1tdPiA9IG5ldyBNYXAoKVxyXG4gIHByaXZhdGUgcmVhZG9ubHkgY3R4OiBJUGljR29cclxuXHJcbiAgcHJvZ3JhbTogQ29tbWFuZFxyXG4gIGlucXVpcmVyOiBJbnF1aXJlclxyXG5cclxuICBjb25zdHJ1Y3RvciAoY3R4OiBJUGljR28pIHtcclxuICAgIHRoaXMucHJvZ3JhbSA9IG5ldyBDb21tYW5kKClcclxuICAgIHRoaXMuaW5xdWlyZXIgPSBpbnF1aXJlclxyXG4gICAgdGhpcy5jdHggPSBjdHhcclxuICB9XHJcblxyXG4gIGdldE5hbWUgKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5uYW1lXHJcbiAgfVxyXG5cclxuICBpbml0ICgpOiB2b2lkIHtcclxuICAgIHRoaXMucHJvZ3JhbVxyXG4gICAgICAudmVyc2lvbihwcm9jZXNzLmVudi5QSUNHT19WRVJTSU9OLCAnLXYsIC0tdmVyc2lvbicpXHJcbiAgICAgIC5vcHRpb24oJy1kLCAtLWRlYnVnJywgJ2RlYnVnIG1vZGUnLCAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jdHguc2V0Q29uZmlnKHtcclxuICAgICAgICAgIGRlYnVnOiB0cnVlXHJcbiAgICAgICAgfSlcclxuICAgICAgfSlcclxuICAgICAgLm9wdGlvbignLXMsIC0tc2lsZW50JywgJ3NpbGVudCBtb2RlJywgKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY3R4LnNldENvbmZpZyh7XHJcbiAgICAgICAgICBzaWxlbnQ6IHRydWVcclxuICAgICAgICB9KVxyXG4gICAgICB9KVxyXG4gICAgICAub24oJ2NvbW1hbmQ6KicsICgpID0+IHtcclxuICAgICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoYEludmFsaWQgY29tbWFuZDogJHt0aGlzLnByb2dyYW0uYXJncy5qb2luKCcgJyl9XFxuU2VlIC0taGVscCBmb3IgYSBsaXN0IG9mIGF2YWlsYWJsZSBjb21tYW5kcy5gKVxyXG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKVxyXG4gICAgICB9KVxyXG5cclxuICAgIC8vIGJ1aWx0LWluIGNvbW1hbmRzXHJcbiAgICBjb21tYW5kZXJzKHRoaXMuY3R4KVxyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXIgKGlkOiBzdHJpbmcsIHBsdWdpbjogSVBsdWdpbik6IHZvaWQge1xyXG4gICAgaWYgKCFpZCkgdGhyb3cgbmV3IFR5cGVFcnJvcignbmFtZSBpcyByZXF1aXJlZCEnKVxyXG4gICAgaWYgKHR5cGVvZiBwbHVnaW4uaGFuZGxlICE9PSAnZnVuY3Rpb24nKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdwbHVnaW4uaGFuZGxlIG11c3QgYmUgYSBmdW5jdGlvbiEnKVxyXG4gICAgaWYgKHRoaXMubGlzdC5oYXMoaWQpKSB0aHJvdyBuZXcgVHlwZUVycm9yKGAke3RoaXMubmFtZX0gcGx1Z2luIGR1cGxpY2F0ZSBpZDogJHtpZH0hYClcclxuICAgIHRoaXMubGlzdC5zZXQoaWQsIHBsdWdpbilcclxuICAgIGNvbnN0IGN1cnJlbnRQbHVnaW5OYW1lID0gZ2V0Q3VycmVudFBsdWdpbk5hbWUoKVxyXG4gICAgaWYgKGN1cnJlbnRQbHVnaW5OYW1lICE9PSBudWxsKSB7XHJcbiAgICAgIGlmICh0aGlzLnBsdWdpbklkTWFwLmhhcyhjdXJyZW50UGx1Z2luTmFtZSkpIHtcclxuICAgICAgICB0aGlzLnBsdWdpbklkTWFwLmdldChjdXJyZW50UGx1Z2luTmFtZSk/LnB1c2goaWQpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5wbHVnaW5JZE1hcC5zZXQoY3VycmVudFBsdWdpbk5hbWUsIFtpZF0pXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVucmVnaXN0ZXIgKHBsdWdpbk5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMucGx1Z2luSWRNYXAuaGFzKHBsdWdpbk5hbWUpKSB7XHJcbiAgICAgIGNvbnN0IHBsdWdpbkxpc3QgPSB0aGlzLnBsdWdpbklkTWFwLmdldChwbHVnaW5OYW1lKVxyXG4gICAgICBwbHVnaW5MaXN0Py5mb3JFYWNoKChwbHVnaW46IHN0cmluZykgPT4ge1xyXG4gICAgICAgIHRoaXMubGlzdC5kZWxldGUocGx1Z2luKVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbG9hZENvbW1hbmRzICgpOiB2b2lkIHtcclxuICAgIHRoaXMuZ2V0TGlzdCgpLmZvckVhY2goKGl0ZW06IElQbHVnaW4pID0+IHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBpdGVtLmhhbmRsZSh0aGlzLmN0eClcclxuICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGUpXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBnZXQgKGlkOiBzdHJpbmcpOiBJUGx1Z2luIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLmxpc3QuZ2V0KGlkKVxyXG4gIH1cclxuXHJcbiAgZ2V0TGlzdCAoKTogSVBsdWdpbltdIHtcclxuICAgIHJldHVybiBbLi4udGhpcy5saXN0LnZhbHVlcygpXVxyXG4gIH1cclxuXHJcbiAgZ2V0SWRMaXN0ICgpOiBzdHJpbmdbXSB7XHJcbiAgICByZXR1cm4gWy4uLnRoaXMubGlzdC5rZXlzKCldXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBDb21tYW5kZXJcclxuIiwiaW1wb3J0IHBsdWdpbkhhbmRsZXIgZnJvbSAnLi9wbHVnaW5IYW5kbGVyJ1xyXG5pbXBvcnQgY29uZmlnIGZyb20gJy4vY29uZmlnJ1xyXG5pbXBvcnQgdXBsb2FkIGZyb20gJy4vdXBsb2FkJ1xyXG5pbXBvcnQgc2V0dGluZyBmcm9tICcuL3NldHRpbmcnXHJcbmltcG9ydCB1c2UgZnJvbSAnLi91c2UnXHJcbmltcG9ydCBwcm94eSBmcm9tICcuL3Byb3h5J1xyXG5pbXBvcnQgaW5pdCBmcm9tICcuL2luaXQnXHJcbmltcG9ydCBpMThuIGZyb20gJy4vaTE4bidcclxuaW1wb3J0IHsgSVBpY0dvIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcblxyXG5leHBvcnQgZGVmYXVsdCAoY3R4OiBJUGljR28pOiB2b2lkID0+IHtcclxuICBjdHguY21kLnJlZ2lzdGVyKCdwbHVnaW5IYW5kbGVyJywgcGx1Z2luSGFuZGxlcilcclxuICBjdHguY21kLnJlZ2lzdGVyKCdjb25maWcnLCBjb25maWcpXHJcbiAgY3R4LmNtZC5yZWdpc3Rlcignc2V0dGluZycsIHNldHRpbmcpXHJcbiAgY3R4LmNtZC5yZWdpc3RlcigndXBsb2FkJywgdXBsb2FkKVxyXG4gIGN0eC5jbWQucmVnaXN0ZXIoJ3VzZScsIHVzZSlcclxuICBjdHguY21kLnJlZ2lzdGVyKCdwcm94eScsIHByb3h5KVxyXG4gIGN0eC5jbWQucmVnaXN0ZXIoJ2luaXQnLCBpbml0KVxyXG4gIGN0eC5jbWQucmVnaXN0ZXIoJ2kxOG4nLCBpMThuKVxyXG59XHJcbiIsImV4cG9ydCBlbnVtIElMb2dUeXBlIHtcclxuICBzdWNjZXNzID0gJ3N1Y2Nlc3MnLFxyXG4gIGluZm8gPSAnaW5mbycsXHJcbiAgd2FybiA9ICd3YXJuJyxcclxuICBlcnJvciA9ICdlcnJvcidcclxufVxyXG5cclxuLyoqXHJcbiAqIHRoZXNlIGV2ZW50cyB3aWxsIGJlIGNhdGNoZWQgYnkgdXNlcnNcclxuICovXHJcbmV4cG9ydCBlbnVtIElCdWlsZEluRXZlbnQge1xyXG4gIFVQTE9BRF9QUk9HUkVTUyA9ICd1cGxvYWRQcm9ncmVzcycsXHJcbiAgRkFJTEVEID0gJ2ZhaWxlZCcsXHJcbiAgQkVGT1JFX1RSQU5TRk9STSA9ICdiZWZvcmVUcmFuc2Zvcm0nLFxyXG4gIEJFRk9SRV9VUExPQUQgPSAnYmVmb3JlVXBsb2FkJyxcclxuICBBRlRFUl9VUExPQUQgPSAnYWZ0ZXJVcGxvYWQnLFxyXG4gIEZJTklTSEVEID0gJ2ZpbmlzaGVkJyxcclxuICBJTlNUQUxMID0gJ2luc3RhbGwnLFxyXG4gIFVOSU5TVEFMTCA9ICd1bmluc3RhbGwnLFxyXG4gIFVQREFURSA9ICd1cGRhdGUnLFxyXG4gIE5PVElGSUNBVElPTiA9ICdub3RpZmljYXRpb24nXHJcbn1cclxuXHJcbi8qKlxyXG4gKiB0aGVzZSBldmVudHMgd2lsbCBiZSBjYXRjaGVkIG9ubHkgYnkgcGljZ29cclxuICovXHJcbmV4cG9ydCBlbnVtIElCdXNFdmVudCB7XHJcbiAgQ09ORklHX0NIQU5HRSA9ICdDT05GSUdfQ0hBTkdFJ1xyXG59XHJcbiIsImltcG9ydCBjaGFsayBmcm9tICdjaGFsaydcclxuaW1wb3J0IGRheWpzIGZyb20gJ2RheWpzJ1xyXG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnXHJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXHJcbmltcG9ydCB1dGlsIGZyb20gJ3V0aWwnXHJcbmltcG9ydCB7IElMb2dUeXBlIH0gZnJvbSAnLi4vdXRpbHMvZW51bSdcclxuaW1wb3J0IHtcclxuICBJTG9nQXJndlR5cGUsXHJcbiAgSUxvZ0FyZ3ZUeXBlV2l0aEVycm9yLFxyXG4gIFVuZGVmaW5hYmxlLFxyXG4gIElMb2dDb2xvcixcclxuICBJTG9nZ2VyLFxyXG4gIElQaWNHb1xyXG59IGZyb20gJy4uL3R5cGVzJ1xyXG5pbXBvcnQgeyBmb3JjZU51bWJlciwgaXNEZXYgfSBmcm9tICcuLi91dGlscy9jb21tb24nXHJcblxyXG5leHBvcnQgY2xhc3MgTG9nZ2VyIGltcGxlbWVudHMgSUxvZ2dlciB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBsZXZlbCA9IHtcclxuICAgIFtJTG9nVHlwZS5zdWNjZXNzXTogJ2dyZWVuJyxcclxuICAgIFtJTG9nVHlwZS5pbmZvXTogJ2JsdWUnLFxyXG4gICAgW0lMb2dUeXBlLndhcm5dOiAneWVsbG93JyxcclxuICAgIFtJTG9nVHlwZS5lcnJvcl06ICdyZWQnXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IGN0eDogSVBpY0dvXHJcbiAgcHJpdmF0ZSBsb2dMZXZlbCE6IHN0cmluZ1xyXG4gIHByaXZhdGUgbG9nUGF0aCE6IHN0cmluZ1xyXG4gIGNvbnN0cnVjdG9yIChjdHg6IElQaWNHbykge1xyXG4gICAgdGhpcy5jdHggPSBjdHhcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlTG9nICh0eXBlOiBJTG9nVHlwZSwgLi4ubXNnOiBJTG9nQXJndlR5cGVXaXRoRXJyb3JbXSk6IHZvaWQge1xyXG4gICAgLy8gY2hlY2sgY29uZmlnLnNpbGVudFxyXG4gICAgaWYgKCF0aGlzLmN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8c3RyaW5nPj4oJ3NpbGVudCcpKSB7XHJcbiAgICAgIGNvbnN0IGxvZ0hlYWRlciA9IGNoYWxrW3RoaXMubGV2ZWxbdHlwZV0gYXMgSUxvZ0NvbG9yXShgW1BpY0xpc3QgJHt0eXBlLnRvVXBwZXJDYXNlKCl9XTpgKVxyXG4gICAgICBjb25zb2xlLmxvZyhsb2dIZWFkZXIsIC4uLm1zZylcclxuICAgICAgdGhpcy5sb2dMZXZlbCA9IHRoaXMuY3R4LmdldENvbmZpZygnc2V0dGluZ3MubG9nTGV2ZWwnKVxyXG4gICAgICB0aGlzLmxvZ1BhdGggPSB0aGlzLmN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8c3RyaW5nPj4oJ3NldHRpbmdzLmxvZ1BhdGgnKSB8fCBwYXRoLmpvaW4odGhpcy5jdHguYmFzZURpciwgJy4vcGljbGlzdC5sb2cnKVxyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAvLyBmaXggbG9nIGZpbGUgaXMgdG9vIGxhcmdlLCBub3cgdGhlIGxvZyBmaWxlJ3MgZGVmYXVsdCBzaXplIGlzIDEwIE1CXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuY2hlY2tMb2dGaWxlSXNMYXJnZSh0aGlzLmxvZ1BhdGgpXHJcbiAgICAgICAgICBpZiAocmVzdWx0LmlzTGFyZ2UpIHtcclxuICAgICAgICAgICAgY29uc3Qgd2FybmluZ01zZyA9IGBMb2cgZmlsZSBpcyB0b28gbGFyZ2UgKD4gJHsocmVzdWx0LmxvZ0ZpbGVTaXplTGltaXQhKSAvIDEwMjQgLyAxMDI0IHx8ICcxMCd9IE1CKSwgcmVjcmVhdGUgbG9nIGZpbGVgXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdygnW1BpY0xpc3QgV0FSTl06JyksIHdhcm5pbmdNc2cpXHJcbiAgICAgICAgICAgIHRoaXMucmVjcmVhdGVMb2dGaWxlKHRoaXMubG9nUGF0aClcclxuICAgICAgICAgICAgbXNnLnVuc2hpZnQod2FybmluZ01zZylcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuaGFuZGxlV3JpdGVMb2codGhpcy5sb2dQYXRoLCB0eXBlLCAuLi5tc2cpXHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgLy8gd2h5Pz8/XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdbUGljTGlzdCBFcnJvcl0gb24gY2hlY2tpbmcgbG9nIGZpbGUgc2l6ZScsIGUpXHJcbiAgICAgICAgfVxyXG4gICAgICB9LCAwKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaGVja0xvZ0ZpbGVJc0xhcmdlIChsb2dQYXRoOiBzdHJpbmcpOiB7XHJcbiAgICBpc0xhcmdlOiBib29sZWFuXHJcbiAgICBsb2dGaWxlU2l6ZT86IG51bWJlclxyXG4gICAgbG9nRmlsZVNpemVMaW1pdD86IG51bWJlclxyXG4gIH0ge1xyXG4gICAgaWYgKGZzLmV4aXN0c1N5bmMobG9nUGF0aCkpIHtcclxuICAgICAgY29uc3QgbG9nRmlsZVNpemUgPSBmcy5zdGF0U3luYyhsb2dQYXRoKS5zaXplXHJcbiAgICAgIGNvbnN0IGxvZ0ZpbGVTaXplTGltaXQgPSBmb3JjZU51bWJlcih0aGlzLmN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8bnVtYmVyPj4oJ3NldHRpbmdzLmxvZ0ZpbGVTaXplTGltaXQnKSB8fCAxMCkgKiAxMDI0ICogMTAyNCAvLyAxMCBNQiBkZWZhdWx0XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgaXNMYXJnZTogbG9nRmlsZVNpemUgPiBsb2dGaWxlU2l6ZUxpbWl0LFxyXG4gICAgICAgIGxvZ0ZpbGVTaXplLFxyXG4gICAgICAgIGxvZ0ZpbGVTaXplTGltaXRcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgaXNMYXJnZTogZmFsc2VcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVjcmVhdGVMb2dGaWxlIChsb2dQYXRoOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmIChmcy5leGlzdHNTeW5jKGxvZ1BhdGgpKSB7XHJcbiAgICAgIGZzLnVubGlua1N5bmMobG9nUGF0aClcclxuICAgICAgZnMuY3JlYXRlRmlsZVN5bmMobG9nUGF0aClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlV3JpdGVMb2cgKGxvZ1BhdGg6IHN0cmluZywgdHlwZTogc3RyaW5nLCAuLi5tc2c6IElMb2dBcmd2VHlwZVdpdGhFcnJvcltdKTogdm9pZCB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAodGhpcy5jaGVja0xvZ0xldmVsKHR5cGUsIHRoaXMubG9nTGV2ZWwpKSB7XHJcbiAgICAgICAgbGV0IGxvZyA9IGAke2RheWpzKCkuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tOnNzJyl9IFtQaWNMaXN0ICR7dHlwZS50b1VwcGVyQ2FzZSgpfV0gYFxyXG4gICAgICAgIG1zZy5mb3JFYWNoKChpdGVtOiBJTG9nQXJndlR5cGVXaXRoRXJyb3IpID0+IHtcclxuICAgICAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgRXJyb3IgJiYgdHlwZSA9PT0gJ2Vycm9yJykge1xyXG4gICAgICAgICAgICBsb2cgKz0gYFxcbi0tLS0tLUVycm9yIFN0YWNrIEJlZ2luLS0tLS0tXFxuJHt1dGlsLmZvcm1hdChpdGVtPy5zdGFjayl9XFxuLS0tLS0tLUVycm9yIFN0YWNrIEVuZC0tLS0tLS0gYFxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICAgIGl0ZW0gPSBKU09OLnN0cmluZ2lmeShpdGVtLCBudWxsLCAyKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxvZyArPSBgJHtpdGVtIGFzIHN0cmluZ30gYFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgbG9nICs9ICdcXG4nXHJcbiAgICAgICAgLy8gQSBzeW5jaHJvbml6ZWQgYXBwcm9hY2ggdG8gYXZvaWQgbG9nIG1zZyBzZXF1ZW5jZSBlcnJvcnNcclxuICAgICAgICBmcy5hcHBlbmRGaWxlU3luYyhsb2dQYXRoLCBsb2cpXHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignW1BpY0xpc3QgRXJyb3JdIG9uIHdyaXRpbmcgbG9nIGZpbGUnLCBlKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaGVja0xvZ0xldmVsICh0eXBlOiBzdHJpbmcsIGxldmVsOiB1bmRlZmluZWQgfCBzdHJpbmcgfCBzdHJpbmdbXSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKGxldmVsID09PSB1bmRlZmluZWQgfHwgbGV2ZWwgPT09ICdhbGwnKSB7XHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShsZXZlbCkpIHtcclxuICAgICAgcmV0dXJuIGxldmVsLnNvbWUoKGl0ZW06IHN0cmluZykgPT4gKGl0ZW0gPT09IHR5cGUgfHwgaXRlbSA9PT0gJ2FsbCcpKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHR5cGUgPT09IGxldmVsXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdWNjZXNzICguLi5tc2c6IElMb2dBcmd2VHlwZVtdKTogdm9pZCB7XHJcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVMb2coSUxvZ1R5cGUuc3VjY2VzcywgLi4ubXNnKVxyXG4gIH1cclxuXHJcbiAgaW5mbyAoLi4ubXNnOiBJTG9nQXJndlR5cGVbXSk6IHZvaWQge1xyXG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlTG9nKElMb2dUeXBlLmluZm8sIC4uLm1zZylcclxuICB9XHJcblxyXG4gIGVycm9yICguLi5tc2c6IElMb2dBcmd2VHlwZVdpdGhFcnJvcltdKTogdm9pZCB7XHJcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVMb2coSUxvZ1R5cGUuZXJyb3IsIC4uLm1zZylcclxuICB9XHJcblxyXG4gIHdhcm4gKC4uLm1zZzogSUxvZ0FyZ3ZUeXBlW10pOiB2b2lkIHtcclxuICAgIHJldHVybiB0aGlzLmhhbmRsZUxvZyhJTG9nVHlwZS53YXJuLCAuLi5tc2cpXHJcbiAgfVxyXG5cclxuICBkZWJ1ZyAoLi4ubXNnOiBJTG9nQXJndlR5cGVbXSk6IHZvaWQge1xyXG4gICAgaWYgKGlzRGV2KCkpIHtcclxuICAgICAgdGhpcy5oYW5kbGVMb2coSUxvZ1R5cGUuaW5mbywgLi4ubXNnKVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgTG9nZ2VyXHJcbiIsImltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ2V2ZW50cydcclxuaW1wb3J0IHsgSUJ1aWxkSW5XYXRlck1hcmtPcHRpb25zLCBJQnVpbGRJbkNvbXByZXNzT3B0aW9ucywgSUxpZmVjeWNsZVBsdWdpbnMsIElQYXRoVHJhbnNmb3JtZWRJbWdJbmZvLCBJUGljR28sIElQbHVnaW4sIFVuZGVmaW5hYmxlLCBJSW1nSW5mbyB9IGZyb20gJy4uL3R5cGVzJ1xyXG5pbXBvcnQgeyBnZXRVUkxGaWxlLCBoYW5kbGVVcmxFbmNvZGUsIGltYWdlUHJvY2VzcywgaXNVcmwsIG5lZWRDb21wcmVzcywgbmVlZEFkZFdhdGVybWFyaywgaW1hZ2VBZGRXYXRlck1hcmssIHJlbW92ZUV4aWYsIHJlbmFtZUZpbGVOYW1lV2l0aEN1c3RvbVN0cmluZyB9IGZyb20gJy4uL3V0aWxzL2NvbW1vbidcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tICcuLi91dGlscy9jcmVhdGVDb250ZXh0J1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xyXG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnXHJcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcydcclxuaW1wb3J0IHsgY2xvbmVEZWVwIH0gZnJvbSAnbG9kYXNoJ1xyXG5pbXBvcnQgaGVpY0NvbnZlcnQgZnJvbSAnaGVpYy1jb252ZXJ0J1xyXG5cclxuZXhwb3J0IGNsYXNzIExpZmVjeWNsZSBleHRlbmRzIEV2ZW50RW1pdHRlciB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBjdHg6IElQaWNHb1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgdHRmTGluazogc3RyaW5nID0gJ2h0dHBzOi8vcmVsZWFzZS5waWNsaXN0LmNuL3NpbWhlaS50dGYnXHJcbiAgdHRmUGF0aDogc3RyaW5nXHJcblxyXG4gIGNvbnN0cnVjdG9yIChjdHg6IElQaWNHbykge1xyXG4gICAgc3VwZXIoKVxyXG4gICAgdGhpcy5jdHggPSBjdHhcclxuICAgIGNvbnN0IHRlbXBGaWxlUGF0aCA9IHBhdGguam9pbihjdHguYmFzZURpciwgJ3BpY2xpc3RUZW1wJylcclxuICAgIGNvbnN0IGltZ0ZsZVBhdGggPSBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsICdpbWdUZW1wJylcclxuICAgIGZzLmVuc3VyZURpclN5bmMoaW1nRmxlUGF0aClcclxuICAgIGZzLmVtcHR5RGlyU3luYyh0ZW1wRmlsZVBhdGgpXHJcbiAgICB0aGlzLnR0ZlBhdGggPSBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsICdhc3NldHMnLCAnc2ltaGVpLnR0ZicpXHJcbiAgfVxyXG5cclxuICBhc3luYyBkb3dubG9hZFRURiAoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBjb25zdCBvdXRwdXREaXIgPSBwYXRoLmRpcm5hbWUodGhpcy50dGZQYXRoKVxyXG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKG91dHB1dERpcikpIHtcclxuICAgICAgZnMubWtkaXJTeW5jKG91dHB1dERpciwgeyByZWN1cnNpdmU6IHRydWUgfSlcclxuICAgIH1cclxuICAgIGlmICghZnMuZXhpc3RzU3luYyh0aGlzLnR0ZlBhdGgpKSB7XHJcbiAgICAgIHRoaXMuY3R4LmxvZy5pbmZvKCdEb3dubG9hZCB0dGYgZmlsZS4nKVxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGF4aW9zLmdldCh0aGlzLnR0ZkxpbmssIHsgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInIH0pXHJcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyh0aGlzLnR0ZlBhdGgsIHJlcy5kYXRhKVxyXG4gICAgICAgIHRoaXMuY3R4LmxvZy5pbmZvKCdEb3dubG9hZCB0dGYgZmlsZSBzdWNjZXNzLicpXHJcbiAgICAgICAgcmV0dXJuIHRydWVcclxuICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKCdEb3dubG9hZCB0dGYgZmlsZSBmYWlsZWQuJylcclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRydWVcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIHN0YXJ0IChpbnB1dDogYW55W10pOiBQcm9taXNlPElQaWNHbz4ge1xyXG4gICAgLy8gZW5zdXJlIGV2ZXJ5IHVwbG9hZCBwcm9jZXNzIGhhcyBhbiB1bmlxdWUgY29udGV4dFxyXG4gICAgY29uc3QgY3R4ID0gY3JlYXRlQ29udGV4dCh0aGlzLmN0eClcclxuICAgIHRyeSB7XHJcbiAgICAgIC8vIGltYWdlcyBpbnB1dFxyXG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnB1dCBtdXN0IGJlIGFuIGFycmF5LicpXHJcbiAgICAgIH1cclxuICAgICAgY3R4LmlucHV0ID0gaW5wdXRcclxuICAgICAgY3R4LnJhd0lucHV0UGF0aCA9IFtdIGFzIHN0cmluZ1tdXHJcbiAgICAgIGN0eC5yYXdJbnB1dCA9IGNsb25lRGVlcChpbnB1dClcclxuICAgICAgY3R4Lm91dHB1dCA9IFtdIGFzIElJbWdJbmZvW11cclxuICAgICAgY29uc3QgY29tcHJlc3NPcHRpb25zID0gY3R4LmdldENvbmZpZzxJQnVpbGRJbkNvbXByZXNzT3B0aW9ucz4oJ2J1aWxkSW4uY29tcHJlc3MnKVxyXG4gICAgICBjb25zdCB0eXBlID0gY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxzdHJpbmc+PigncGljQmVkLnVwbG9hZGVyJykgfHwgY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxzdHJpbmc+PigncGljQmVkLmN1cnJlbnQnKSB8fCAnc21tcydcclxuICAgICAgY29uc3QgdXBsb2FkZXIgPSBjdHguaGVscGVyLnVwbG9hZGVyLmdldCh0eXBlKVxyXG4gICAgICBpZiAoIXVwbG9hZGVyICYmIGNvbXByZXNzT3B0aW9ucykge1xyXG4gICAgICAgIGNvbXByZXNzT3B0aW9ucy5waWNCZWQgPSAnc21tcydcclxuICAgICAgfSBlbHNlIGlmIChjb21wcmVzc09wdGlvbnMpIHtcclxuICAgICAgICBjb21wcmVzc09wdGlvbnMucGljQmVkID0gdHlwZVxyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHdhdGVybWFya09wdGlvbnMgPSBjdHguZ2V0Q29uZmlnPElCdWlsZEluV2F0ZXJNYXJrT3B0aW9ucz4oJ2J1aWxkSW4ud2F0ZXJtYXJrJylcclxuICAgICAgaWYgKGNvbXByZXNzT3B0aW9ucyB8fCB3YXRlcm1hcmtPcHRpb25zKSB7XHJcbiAgICAgICAgY29uc3QgdGVtcEZpbGVQYXRoID0gcGF0aC5qb2luKGN0eC5iYXNlRGlyLCAncGljbGlzdFRlbXAnKVxyXG4gICAgICAgIGlmICghZnMuZXhpc3RzU3luYyh0ZW1wRmlsZVBhdGgpKSB7XHJcbiAgICAgICAgICBmcy5ta2RpclN5bmModGVtcEZpbGVQYXRoKVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB3YXRlcm1hcmtNc2cgPSAnQWRkIHdhdGVybWFyayB0byBpbWFnZSdcclxuICAgICAgICBjb25zdCBjb21wcmVzc01zZyA9ICdDb21wcmVzcyBvciBjb252ZXJ0IGltYWdlJ1xyXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChjdHguaW5wdXQubWFwKGFzeW5jIChpdGVtOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIGxldCBpbmZvOiBJUGF0aFRyYW5zZm9ybWVkSW1nSW5mb1xyXG4gICAgICAgICAgaWYgKGlzVXJsKGl0ZW0pKSB7XHJcbiAgICAgICAgICAgIGN0eC5yYXdJbnB1dFBhdGghW2luZGV4XSA9IGl0ZW1cclxuICAgICAgICAgICAgaW5mbyA9IGF3YWl0IGdldFVSTEZpbGUoaXRlbSwgY3R4KVxyXG4gICAgICAgICAgICBpZiAoaW5mby5zdWNjZXNzICYmIGluZm8uYnVmZmVyKSB7XHJcbiAgICAgICAgICAgICAgbGV0IHRyYW5zZm9ybWVkQnVmZmVyXHJcbiAgICAgICAgICAgICAgaWYgKG5lZWRBZGRXYXRlcm1hcmsod2F0ZXJtYXJrT3B0aW9ucywgaW5mby5leHRuYW1lID8/ICcnKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZG93bmxvYWRUVEZSZXQgPSBhd2FpdCB0aGlzLmRvd25sb2FkVFRGKClcclxuICAgICAgICAgICAgICAgIGlmICghZG93bmxvYWRUVEZSZXQpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5jdHgubG9nLndhcm4oJ0Rvd25sb2FkIHR0ZiBmaWxlIGZhaWxlZCwgc2tpcCBhZGQgd2F0ZXJtYXJrLicpXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBjdHgubG9nLmluZm8od2F0ZXJtYXJrTXNnKVxyXG4gICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZEJ1ZmZlciA9IGF3YWl0IGltYWdlQWRkV2F0ZXJNYXJrKGluZm8uYnVmZmVyLCB3YXRlcm1hcmtPcHRpb25zLCB0aGlzLnR0ZlBhdGgpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChuZWVkQ29tcHJlc3MoY29tcHJlc3NPcHRpb25zLCBpbmZvLmV4dG5hbWUgPz8gJycpKSB7XHJcbiAgICAgICAgICAgICAgICBjdHgubG9nLmluZm8oY29tcHJlc3NNc2cpXHJcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZEJ1ZmZlciA9IGF3YWl0IGltYWdlUHJvY2Vzcyh0cmFuc2Zvcm1lZEJ1ZmZlciA/PyBpbmZvLmJ1ZmZlciwgY29tcHJlc3NPcHRpb25zLCBpbmZvLmV4dG5hbWUgPz8gJycpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmICghdHJhbnNmb3JtZWRCdWZmZXIgJiYgY29tcHJlc3NPcHRpb25zPy5pc1JlbW92ZUV4aWYpIHtcclxuICAgICAgICAgICAgICAgIGN0eC5sb2cuaW5mbygnUmVtb3ZlIGV4aWYgaW5mby4nKVxyXG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtZWRCdWZmZXIgPSBhd2FpdCByZW1vdmVFeGlmKGluZm8uYnVmZmVyLCBpbmZvLmV4dG5hbWUgPz8gJycpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1lZEJ1ZmZlcikge1xyXG4gICAgICAgICAgICAgICAgbGV0IG5ld0V4dFxyXG4gICAgICAgICAgICAgICAgaWYgKGNvbXByZXNzT3B0aW9ucz8uaXNDb252ZXJ0KSB7XHJcbiAgICAgICAgICAgICAgICAgIG5ld0V4dCA9IGNvbXByZXNzT3B0aW9ucz8uY29udmVydEZvcm1hdCA/PyAnanBnJ1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgbmV3RXh0ID0gaW5mby5leHRuYW1lID8/ICcnXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBuZXdFeHQgPSBuZXdFeHQuc3RhcnRzV2l0aCgnLicpID8gbmV3RXh0IDogYC4ke25ld0V4dH1gXHJcbiAgICAgICAgICAgICAgICBjb25zdCB0ZW1wRmlsZSA9IHBhdGguam9pbih0ZW1wRmlsZVBhdGgsIGAke2luZm8uZmlsZU5hbWVcclxuICAgICAgICAgICAgICAgICAgPyBgJHtwYXRoLmJhc2VuYW1lKGluZm8uZmlsZU5hbWUsIHBhdGguZXh0bmFtZShpbmZvLmZpbGVOYW1lKSl9JHtuZXdFeHR9YFxyXG4gICAgICAgICAgICAgICAgICA6IG5ldyBEYXRlKCkuZ2V0VGltZSgpfSR7bmV3RXh0fWApXHJcbiAgICAgICAgICAgICAgICBjdHgucmF3SW5wdXRQYXRoIVtpbmRleF0gPSBwYXRoLmpvaW4ocGF0aC5kaXJuYW1lKGl0ZW0pLCBwYXRoLmJhc2VuYW1lKHRlbXBGaWxlKSlcclxuICAgICAgICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmModGVtcEZpbGUsIHRyYW5zZm9ybWVkQnVmZmVyKVxyXG4gICAgICAgICAgICAgICAgY3R4LmlucHV0W2luZGV4XSA9IHRlbXBGaWxlXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihpbmZvLnJlYXNvbilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IHRyYW5zZm9ybWVkQnVmZmVyXHJcbiAgICAgICAgICAgIGN0eC5yYXdJbnB1dFBhdGghW2luZGV4XSA9IGl0ZW1cclxuICAgICAgICAgICAgaWYgKG5lZWRBZGRXYXRlcm1hcmsod2F0ZXJtYXJrT3B0aW9ucywgcGF0aC5leHRuYW1lKGl0ZW0pKSkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGRvd25sb2FkVFRGUmV0ID0gYXdhaXQgdGhpcy5kb3dubG9hZFRURigpXHJcbiAgICAgICAgICAgICAgaWYgKCFkb3dubG9hZFRURlJldCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdHgubG9nLndhcm4oJ0Rvd25sb2FkIHR0ZiBmaWxlIGZhaWxlZCwgc2tpcCBhZGQgd2F0ZXJtYXJrLicpXHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGN0eC5sb2cuaW5mbyh3YXRlcm1hcmtNc2cpXHJcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZEJ1ZmZlciA9IGF3YWl0IGltYWdlQWRkV2F0ZXJNYXJrKGZzLnJlYWRGaWxlU3luYyhpdGVtKSwgd2F0ZXJtYXJrT3B0aW9ucywgdGhpcy50dGZQYXRoKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobmVlZENvbXByZXNzKGNvbXByZXNzT3B0aW9ucywgcGF0aC5leHRuYW1lKGl0ZW0pKSkge1xyXG4gICAgICAgICAgICAgIGN0eC5sb2cuaW5mbyhjb21wcmVzc01zZylcclxuICAgICAgICAgICAgICBpZiAocGF0aC5leHRuYW1lKGl0ZW0pID09PSAnLmhlaWMnIHx8IHBhdGguZXh0bmFtZShpdGVtKSA9PT0gJy5oZWlmJykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaGVpY0J1ZmZlciA9IGZzLnJlYWRGaWxlU3luYyhpdGVtKVxyXG4gICAgICAgICAgICAgICAgY29uc3QgaGVpY1Jlc3VsdCA9IGF3YWl0IGhlaWNDb252ZXJ0KHtcclxuICAgICAgICAgICAgICAgICAgYnVmZmVyOiBoZWljQnVmZmVyLFxyXG4gICAgICAgICAgICAgICAgICBmb3JtYXQ6ICdKUEVHJyxcclxuICAgICAgICAgICAgICAgICAgcXVhbGl0eTogMVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRlbXBIZWljQ29udmVydEZpbGUgPSBwYXRoLmpvaW4odGVtcEZpbGVQYXRoLCBgJHtwYXRoLmJhc2VuYW1lKGl0ZW0sIHBhdGguZXh0bmFtZShpdGVtKSl9LmpwZ2ApXHJcbiAgICAgICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHRlbXBIZWljQ29udmVydEZpbGUsIEJ1ZmZlci5mcm9tKGhlaWNSZXN1bHQpKVxyXG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtZWRCdWZmZXIgPSBhd2FpdCBpbWFnZVByb2Nlc3MoZnMucmVhZEZpbGVTeW5jKHRlbXBIZWljQ29udmVydEZpbGUpLCBjb21wcmVzc09wdGlvbnMsICcuanBnJylcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtZWRCdWZmZXIgPSBhd2FpdCBpbWFnZVByb2Nlc3ModHJhbnNmb3JtZWRCdWZmZXIgPz8gZnMucmVhZEZpbGVTeW5jKGl0ZW0pLCBjb21wcmVzc09wdGlvbnMsIHBhdGguZXh0bmFtZShpdGVtKSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCF0cmFuc2Zvcm1lZEJ1ZmZlciAmJiBjb21wcmVzc09wdGlvbnM/LmlzUmVtb3ZlRXhpZikge1xyXG4gICAgICAgICAgICAgIGN0eC5sb2cuaW5mbygnUmVtb3ZlIGV4aWYgaW5mby4nKVxyXG4gICAgICAgICAgICAgIHRyYW5zZm9ybWVkQnVmZmVyID0gYXdhaXQgcmVtb3ZlRXhpZihmcy5yZWFkRmlsZVN5bmMoaXRlbSksIHBhdGguZXh0bmFtZShpdGVtKSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodHJhbnNmb3JtZWRCdWZmZXIpIHtcclxuICAgICAgICAgICAgICBsZXQgbmV3RXh0XHJcbiAgICAgICAgICAgICAgaWYgKGNvbXByZXNzT3B0aW9ucz8uaXNDb252ZXJ0KSB7XHJcbiAgICAgICAgICAgICAgICBuZXdFeHQgPSBjb21wcmVzc09wdGlvbnM/LmNvbnZlcnRGb3JtYXQgPz8gJ2pwZydcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbmV3RXh0ID0gcGF0aC5leHRuYW1lKGl0ZW0pXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIG5ld0V4dCA9IG5ld0V4dC5zdGFydHNXaXRoKCcuJykgPyBuZXdFeHQgOiBgLiR7bmV3RXh0fWBcclxuICAgICAgICAgICAgICBjb25zdCB0ZW1wRmlsZSA9IHBhdGguam9pbih0ZW1wRmlsZVBhdGgsIGAke3BhdGguYmFzZW5hbWUoaXRlbSwgcGF0aC5leHRuYW1lKGl0ZW0pKX0ke25ld0V4dH1gKVxyXG4gICAgICAgICAgICAgIGN0eC5yYXdJbnB1dFBhdGghW2luZGV4XSA9IHBhdGguam9pbihwYXRoLmRpcm5hbWUoaXRlbSksIGAke3BhdGguYmFzZW5hbWUoaXRlbSwgcGF0aC5leHRuYW1lKGl0ZW0pKX0ke25ld0V4dH1gKVxyXG4gICAgICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmModGVtcEZpbGUsIHRyYW5zZm9ybWVkQnVmZmVyKVxyXG4gICAgICAgICAgICAgIGN0eC5pbnB1dFtpbmRleF0gPSB0ZW1wRmlsZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSkpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGN0eC5pbnB1dCkge1xyXG4gICAgICAgICAgY3R4LnJhd0lucHV0UGF0aC5wdXNoKGl0ZW0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8vIGxpZmVjeWNsZSBtYWluXHJcbiAgICAgIGF3YWl0IHRoaXMuYmVmb3JlVHJhbnNmb3JtKGN0eClcclxuICAgICAgYXdhaXQgdGhpcy5kb1RyYW5zZm9ybShjdHgpXHJcbiAgICAgIGNvbnN0IHJlbmFtZUNvbmZpZyA9IGN0eC5nZXRDb25maWc8YW55PignYnVpbGRJbi5yZW5hbWUnKSB8fCB7fVxyXG4gICAgICBpZiAocmVuYW1lQ29uZmlnLmVuYWJsZSkge1xyXG4gICAgICAgIGNvbnN0IGZvcm1hdCA9IHJlbmFtZUNvbmZpZy5mb3JtYXQgfHwgJ3tmaWxlbmFtZX0nXHJcbiAgICAgICAgY3R4Lm91dHB1dCA9IGN0eC5vdXRwdXQubWFwKChpdGVtOiBJSW1nSW5mbywgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgbGV0IGZpbGVOYW1lID0gaXRlbS5maWxlTmFtZVxyXG4gICAgICAgICAgaWYgKGZvcm1hdCkge1xyXG4gICAgICAgICAgICBmaWxlTmFtZSA9IHJlbmFtZUZpbGVOYW1lV2l0aEN1c3RvbVN0cmluZyhjdHgucmF3SW5wdXRQYXRoIVtpbmRleF0sIGZvcm1hdClcclxuICAgICAgICAgICAgZmlsZU5hbWUgPSBmaWxlTmFtZS5yZXBsYWNlKC9cXC8rL2csICcvJylcclxuICAgICAgICAgICAgaWYgKGZpbGVOYW1lLnNsaWNlKC0xKSA9PT0gJy8nKSB7XHJcbiAgICAgICAgICAgICAgZmlsZU5hbWUgPSBmaWxlTmFtZSArIGluZGV4LnRvU3RyaW5nKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaXRlbS5maWxlTmFtZSA9IGZpbGVOYW1lXHJcbiAgICAgICAgICByZXR1cm4gaXRlbVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgICAgYXdhaXQgdGhpcy5iZWZvcmVVcGxvYWQoY3R4KVxyXG4gICAgICBhd2FpdCB0aGlzLmRvVXBsb2FkKGN0eClcclxuICAgICAgY3R4LmlucHV0ID0gY3R4LnJhd0lucHV0XHJcbiAgICAgIGF3YWl0IHRoaXMuYWZ0ZXJVcGxvYWQoY3R4KVxyXG4gICAgICByZXR1cm4gY3R4XHJcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgY3R4LmxvZy53YXJuKElCdWlsZEluRXZlbnQuRkFJTEVEKVxyXG4gICAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50LlVQTE9BRF9QUk9HUkVTUywgLTEpXHJcbiAgICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuRkFJTEVELCBlKVxyXG4gICAgICBjdHgubG9nLmVycm9yKGUpXHJcbiAgICAgIGlmIChjdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdkZWJ1ZycpKSB7XHJcbiAgICAgICAgdGhyb3cgZVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBjdHhcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgYmVmb3JlVHJhbnNmb3JtIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiB7XHJcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50LlVQTE9BRF9QUk9HUkVTUywgMClcclxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuQkVGT1JFX1RSQU5TRk9STSwgY3R4KVxyXG4gICAgY3R4LmxvZy5pbmZvKCdCZWZvcmUgdHJhbnNmb3JtJylcclxuICAgIGF3YWl0IHRoaXMuaGFuZGxlUGx1Z2lucyhjdHguaGVscGVyLmJlZm9yZVRyYW5zZm9ybVBsdWdpbnMsIGN0eClcclxuICAgIHJldHVybiBjdHhcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgZG9UcmFuc2Zvcm0gKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+IHtcclxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuVVBMT0FEX1BST0dSRVNTLCAzMClcclxuICAgIGNvbnN0IHR5cGUgPSBjdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdwaWNCZWQudHJhbnNmb3JtZXInKSB8fCAncGF0aCdcclxuICAgIGxldCBjdXJyZW50VHJhbnNmb3JtZXIgPSB0eXBlXHJcbiAgICBsZXQgdHJhbnNmb3JtZXIgPSBjdHguaGVscGVyLnRyYW5zZm9ybWVyLmdldCh0eXBlKVxyXG4gICAgaWYgKCF0cmFuc2Zvcm1lcikge1xyXG4gICAgICB0cmFuc2Zvcm1lciA9IGN0eC5oZWxwZXIudHJhbnNmb3JtZXIuZ2V0KCdwYXRoJylcclxuICAgICAgY3VycmVudFRyYW5zZm9ybWVyID0gJ3BhdGgnXHJcbiAgICAgIGN0eC5sb2cud2FybihgQ2FuJ3QgZmluZCB0cmFuc2Zvcm1lciAtICR7dHlwZX0sIHN3aXRjaCB0byBkZWZhdWx0IHRyYW5zZm9ybWVyIC0gcGF0aGApXHJcbiAgICB9XHJcbiAgICBjdHgubG9nLmluZm8oYFRyYW5zZm9ybWluZy4uLiBDdXJyZW50IHRyYW5zZm9ybWVyIGlzIFske2N1cnJlbnRUcmFuc2Zvcm1lcn1dYClcclxuICAgIGF3YWl0IHRyYW5zZm9ybWVyPy5oYW5kbGUoY3R4KVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBiZWZvcmVVcGxvYWQgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+IHtcclxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuVVBMT0FEX1BST0dSRVNTLCA2MClcclxuICAgIGN0eC5sb2cuaW5mbygnQmVmb3JlIHVwbG9hZCcpXHJcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50LkJFRk9SRV9VUExPQUQsIGN0eClcclxuICAgIGF3YWl0IHRoaXMuaGFuZGxlUGx1Z2lucyhjdHguaGVscGVyLmJlZm9yZVVwbG9hZFBsdWdpbnMsIGN0eClcclxuICAgIHJldHVybiBjdHhcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgZG9VcGxvYWQgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+IHtcclxuICAgIGxldCB0eXBlID0gY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxzdHJpbmc+PigncGljQmVkLnVwbG9hZGVyJykgfHwgY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxzdHJpbmc+PigncGljQmVkLmN1cnJlbnQnKSB8fCAnc21tcydcclxuICAgIGxldCB1cGxvYWRlciA9IGN0eC5oZWxwZXIudXBsb2FkZXIuZ2V0KHR5cGUpXHJcbiAgICBsZXQgY3VycmVudFRyYW5zZm9ybWVyID0gdHlwZVxyXG4gICAgaWYgKCF1cGxvYWRlcikge1xyXG4gICAgICB0eXBlID0gJ3NtbXMnXHJcbiAgICAgIGN1cnJlbnRUcmFuc2Zvcm1lciA9ICdzbW1zJ1xyXG4gICAgICB1cGxvYWRlciA9IGN0eC5oZWxwZXIudXBsb2FkZXIuZ2V0KCdzbW1zJylcclxuICAgICAgY3R4LmxvZy53YXJuKGBDYW4ndCBmaW5kIHVwbG9hZGVyIC0gJHt0eXBlfSwgc3dpdGNoIHRvIGRlZmF1bHQgdXBsb2FkZXIgLSBzbW1zYClcclxuICAgIH1cclxuICAgIGN0eC5sb2cuaW5mbyhgVXBsb2FkaW5nLi4uIEN1cnJlbnQgdXBsb2FkZXIgaXMgWyR7Y3VycmVudFRyYW5zZm9ybWVyfV1gKVxyXG4gICAgYXdhaXQgdXBsb2FkZXI/LmhhbmRsZShjdHgpXHJcbiAgICBmb3IgKGNvbnN0IG91dHB1dEltZyBvZiBjdHgub3V0cHV0KSB7XHJcbiAgICAgIG91dHB1dEltZy50eXBlID0gdHlwZVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBhZnRlclVwbG9hZCAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4ge1xyXG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5BRlRFUl9VUExPQUQsIGN0eClcclxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuVVBMT0FEX1BST0dSRVNTLCAxMDApXHJcbiAgICBhd2FpdCB0aGlzLmhhbmRsZVBsdWdpbnMoY3R4LmhlbHBlci5hZnRlclVwbG9hZFBsdWdpbnMsIGN0eClcclxuICAgIGxldCBtc2cgPSAnJ1xyXG4gICAgY29uc3QgbGVuZ3RoID0gY3R4Lm91dHB1dC5sZW5ndGhcclxuICAgIGNvbnN0IGlzRW5jb2RlT3V0cHV0VVJMID0gY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxib29sZWFuPj4oJ3NldHRpbmdzLmVuY29kZU91dHB1dFVSTCcpID09PSB0cnVlXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmICh0eXBlb2YgY3R4Lm91dHB1dFtpXS5pbWdVcmwgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgbXNnICs9IGlzRW5jb2RlT3V0cHV0VVJMID8gaGFuZGxlVXJsRW5jb2RlKGN0eC5vdXRwdXRbaV0uaW1nVXJsISkgOiBjdHgub3V0cHV0W2ldLmltZ1VybCFcclxuICAgICAgICBpZiAoaSAhPT0gbGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgbXNnICs9ICdcXG4nXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGRlbGV0ZSBjdHgub3V0cHV0W2ldLmJhc2U2NEltYWdlXHJcbiAgICAgIGRlbGV0ZSBjdHgub3V0cHV0W2ldLmJ1ZmZlclxyXG4gICAgfVxyXG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5GSU5JU0hFRCwgY3R4KVxyXG4gICAgY3R4LmxvZy5zdWNjZXNzKGBcXG4ke21zZ31gKVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVQbHVnaW5zIChsaWZlQ3ljbGVQbHVnaW5zOiBJTGlmZWN5Y2xlUGx1Z2lucywgY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4ge1xyXG4gICAgY29uc3QgcGx1Z2lucyA9IGxpZmVDeWNsZVBsdWdpbnMuZ2V0TGlzdCgpXHJcbiAgICBjb25zdCBwbHVnaW5OYW1lcyA9IGxpZmVDeWNsZVBsdWdpbnMuZ2V0SWRMaXN0KClcclxuICAgIGNvbnN0IGxpZmVDeWNsZU5hbWUgPSBsaWZlQ3ljbGVQbHVnaW5zLmdldE5hbWUoKVxyXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwocGx1Z2lucy5tYXAoYXN5bmMgKHBsdWdpbjogSVBsdWdpbiwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGN0eC5sb2cuaW5mbyhgJHtsaWZlQ3ljbGVOYW1lfTogJHtwbHVnaW5OYW1lc1tpbmRleF19IHJ1bm5pbmdgKVxyXG4gICAgICAgIGF3YWl0IHBsdWdpbi5oYW5kbGUoY3R4KVxyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgY3R4LmxvZy5lcnJvcihgJHtsaWZlQ3ljbGVOYW1lfTogJHtwbHVnaW5OYW1lc1tpbmRleF19IGVycm9yYClcclxuICAgICAgICB0aHJvdyBlXHJcbiAgICAgIH1cclxuICAgIH0pKVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgTGlmZWN5Y2xlXHJcbiIsImltcG9ydCB7IElQaWNHbyB9IGZyb20gJy4uL3R5cGVzJ1xyXG5cclxuLyoqXHJcbiAqIGNyZWF0ZSBhbiB1bmlxdWUgY29udGV4dCBmb3IgZWFjaCB1cGxvYWQgcHJvY2Vzc1xyXG4gKiBAcGFyYW0gY3R4XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgY3JlYXRlQ29udGV4dCA9IChjdHg6IElQaWNHbyk6IElQaWNHbyA9PiB7XHJcbiAgcmV0dXJuIHtcclxuICAgIGNvbmZpZ1BhdGg6IGN0eC5jb25maWdQYXRoLFxyXG4gICAgYmFzZURpcjogY3R4LmJhc2VEaXIsXHJcbiAgICBsb2c6IGN0eC5sb2csXHJcbiAgICBjbWQ6IGN0eC5jbWQsXHJcbiAgICBvdXRwdXQ6IFtdLFxyXG4gICAgaW5wdXQ6IFtdLFxyXG4gICAgcmF3SW5wdXQ6IFtdLFxyXG4gICAgcGx1Z2luTG9hZGVyOiBjdHgucGx1Z2luTG9hZGVyLFxyXG4gICAgcGx1Z2luSGFuZGxlcjogY3R4LnBsdWdpbkhhbmRsZXIsXHJcbiAgICBSZXF1ZXN0OiBjdHguUmVxdWVzdCxcclxuICAgIGhlbHBlcjogY3R4LmhlbHBlcixcclxuICAgIFZFUlNJT046IGN0eC5WRVJTSU9OLFxyXG4gICAgR1VJX1ZFUlNJT046IGN0eC5HVUlfVkVSU0lPTixcclxuICAgIHJlcXVlc3Q6IGN0eC5yZXF1ZXN0LFxyXG4gICAgaTE4bjogY3R4LmkxOG4sXHJcbiAgICBnZXRDb25maWc6IGN0eC5nZXRDb25maWcuYmluZChjdHgpLFxyXG4gICAgc2F2ZUNvbmZpZzogY3R4LnNhdmVDb25maWcuYmluZChjdHgpLFxyXG4gICAgcmVtb3ZlQ29uZmlnOiBjdHgucmVtb3ZlQ29uZmlnLmJpbmQoY3R4KSxcclxuICAgIHNldENvbmZpZzogY3R4LnNldENvbmZpZy5iaW5kKGN0eCksXHJcbiAgICB1bnNldENvbmZpZzogY3R4LnVuc2V0Q29uZmlnLmJpbmQoY3R4KSxcclxuICAgIHVwbG9hZDogY3R4LnVwbG9hZC5iaW5kKGN0eCksXHJcbiAgICBhZGRMaXN0ZW5lcjogY3R4LmFkZExpc3RlbmVyLmJpbmQoY3R4KSxcclxuICAgIG9uOiBjdHgub24uYmluZChjdHgpLFxyXG4gICAgb25jZTogY3R4Lm9uY2UuYmluZChjdHgpLFxyXG4gICAgcmVtb3ZlTGlzdGVuZXI6IGN0eC5yZW1vdmVMaXN0ZW5lci5iaW5kKGN0eCksXHJcbiAgICBvZmY6IGN0eC5vZmYuYmluZChjdHgpLFxyXG4gICAgcmVtb3ZlQWxsTGlzdGVuZXJzOiBjdHgucmVtb3ZlQWxsTGlzdGVuZXJzLmJpbmQoY3R4KSxcclxuICAgIHNldE1heExpc3RlbmVyczogY3R4LnNldE1heExpc3RlbmVycy5iaW5kKGN0eCksXHJcbiAgICBnZXRNYXhMaXN0ZW5lcnM6IGN0eC5nZXRNYXhMaXN0ZW5lcnMuYmluZChjdHgpLFxyXG4gICAgbGlzdGVuZXJzOiBjdHgubGlzdGVuZXJzLmJpbmQoY3R4KSxcclxuICAgIHJhd0xpc3RlbmVyczogY3R4LnJhd0xpc3RlbmVycy5iaW5kKGN0eCksXHJcbiAgICBlbWl0OiBjdHguZW1pdC5iaW5kKGN0eCksXHJcbiAgICBsaXN0ZW5lckNvdW50OiBjdHgubGlzdGVuZXJDb3VudC5iaW5kKGN0eCksXHJcbiAgICBwcmVwZW5kTGlzdGVuZXI6IGN0eC5wcmVwZW5kTGlzdGVuZXIuYmluZChjdHgpLFxyXG4gICAgcHJlcGVuZE9uY2VMaXN0ZW5lcjogY3R4LnByZXBlbmRPbmNlTGlzdGVuZXIuYmluZChjdHgpLFxyXG4gICAgZXZlbnROYW1lczogY3R4LmV2ZW50TmFtZXMuYmluZChjdHgpXHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7IElQaWNHbywgSVBsdWdpbkNvbmZpZywgSVNtbXNDb25maWcsIElPbGRSZXFPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xyXG5pbXBvcnQgeyBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXHJcblxyXG5jb25zdCBwb3N0T3B0aW9ucyA9IChmaWxlTmFtZTogc3RyaW5nLCBpbWFnZTogQnVmZmVyLCBhcGlUb2tlbjogc3RyaW5nLCBiYWNrdXBEb21haW4gPSAnJyk6IElPbGRSZXFPcHRpb25zID0+IHtcclxuICBjb25zdCBkb21haW4gPSBiYWNrdXBEb21haW4gfHwgJ3NtLm1zJ1xyXG4gIHJldHVybiB7XHJcbiAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgIHVybDogYGh0dHBzOi8vJHtkb21haW59L2FwaS92Mi91cGxvYWRgLFxyXG4gICAgaGVhZGVyczoge1xyXG4gICAgICBjb250ZW50VHlwZTogJ211bHRpcGFydC9mb3JtLWRhdGEnLFxyXG4gICAgICAnVXNlci1BZ2VudCc6ICdQaWNMaXN0JyxcclxuICAgICAgQXV0aG9yaXphdGlvbjogYXBpVG9rZW5cclxuICAgIH0sXHJcbiAgICBmb3JtRGF0YToge1xyXG4gICAgICBzbWZpbGU6IHtcclxuICAgICAgICB2YWx1ZTogaW1hZ2UsXHJcbiAgICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgICAgZmlsZW5hbWU6IGZpbGVOYW1lXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBzc2w6ICd0cnVlJ1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcclxuICBjb25zdCBzbW1zQ29uZmlnID0gY3R4LmdldENvbmZpZzxJU21tc0NvbmZpZz4oJ3BpY0JlZC5zbW1zJylcclxuICBpZiAoIXNtbXNDb25maWcpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignQ2FuIG5vdCBmaW5kIHNtbXMgY29uZmlnIScpXHJcbiAgfVxyXG4gIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XHJcbiAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xyXG4gICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XHJcbiAgICAgIGxldCBpbWFnZSA9IGltZy5idWZmZXJcclxuICAgICAgaWYgKCFpbWFnZSAmJiBpbWcuYmFzZTY0SW1hZ2UpIHtcclxuICAgICAgICBpbWFnZSA9IEJ1ZmZlci5mcm9tKGltZy5iYXNlNjRJbWFnZSwgJ2Jhc2U2NCcpXHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgcG9zdENvbmZpZyA9IHBvc3RPcHRpb25zKGltZy5maWxlTmFtZSwgaW1hZ2UsIHNtbXNDb25maWc/LnRva2VuLCBzbW1zQ29uZmlnPy5iYWNrdXBEb21haW4pXHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgcmVzOiBzdHJpbmcgPSBhd2FpdCBjdHgucmVxdWVzdChwb3N0Q29uZmlnKVxyXG4gICAgICAgIGNvbnN0IGJvZHkgPSBKU09OLnBhcnNlKHJlcylcclxuICAgICAgICBpZiAoYm9keS5jb2RlID09PSAnc3VjY2VzcycpIHtcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXHJcbiAgICAgICAgICBpbWcuaW1nVXJsID0gYm9keS5kYXRhLnVybFxyXG4gICAgICAgICAgaW1nLmhhc2ggPSBib2R5LmRhdGEuaGFzaFxyXG4gICAgICAgIH0gZWxzZSBpZiAoYm9keS5jb2RlID09PSAnaW1hZ2VfcmVwZWF0ZWQnICYmIHR5cGVvZiBib2R5LmltYWdlcyA9PT0gJ3N0cmluZycpIHsgLy8gZG8gZXh0cmEgY2hlY2sgc2luY2UgdGhpcyBlcnJvciByZXR1cm4gaXMgbm90IGRvY3VtZW50ZWQgYXQgaHR0cHM6Ly9kb2Muc20ubXMvI2FwaS1JbWFnZS1VcGxvYWRcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXHJcbiAgICAgICAgICBpbWcuaW1nVXJsID0gYm9keS5pbWFnZXNcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcclxuICAgICAgICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcclxuICAgICAgICAgICAgYm9keTogYm9keS5tZXNzYWdlXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGJvZHkubWVzc2FnZSlcclxuICAgICAgICB9XHJcbiAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgIGN0eC5sb2cuZXJyb3IoZSlcclxuICAgICAgICB0aHJvdyBlXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIGN0eFxyXG59XHJcblxyXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xyXG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElTbW1zQ29uZmlnPigncGljQmVkLnNtbXMnKSB8fCB7fVxyXG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xyXG4gICAge1xyXG4gICAgICBuYW1lOiAndG9rZW4nLFxyXG4gICAgICBtZXNzYWdlOiAnYXBpIHRva2VuJyxcclxuICAgICAgdHlwZTogJ3Bhc3N3b3JkJyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TTU1TX1RPS0VOJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy50b2tlbiB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdiYWNrdXBEb21haW4nLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TTU1TX0JBQ0tVUF9ET01BSU4nKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TTU1TX01FU1NBR0VfQkFDS1VQX0RPTUFJTicpXHJcbiAgICAgIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU01NU19CQUNLVVBfRE9NQUlOJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5iYWNrdXBEb21haW4gfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfVxyXG4gIF1cclxuICByZXR1cm4gY29uZmlnXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyIChjdHg6IElQaWNHbyk6IHZvaWQge1xyXG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoJ3NtbXMnLCB7XHJcbiAgICBnZXQgbmFtZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU01NUycpIH0sXHJcbiAgICBoYW5kbGUsXHJcbiAgICBjb25maWdcclxuICB9KVxyXG59XHJcbiIsImltcG9ydCBjcnlwdG8gZnJvbSAnY3J5cHRvJ1xyXG5pbXBvcnQgbWltZSBmcm9tICdtaW1lLXR5cGVzJ1xyXG5pbXBvcnQgeyBJUGljR28sIElQbHVnaW5Db25maWcsIElUY3l1bkNvbmZpZywgSU9sZFJlcU9wdGlvbnNXaXRoRnVsbFJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xyXG5pbXBvcnQgeyBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXHJcblxyXG4vLyBnZW5lcmF0ZSBDT1Mgc2lnbmF0dXJlIHN0cmluZ1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJU2lnbmF0dXJlIHtcclxuICBzaWduYXR1cmU6IHN0cmluZ1xyXG4gIGFwcElkOiBzdHJpbmdcclxuICBidWNrZXQ6IHN0cmluZ1xyXG4gIHNpZ25UaW1lOiBzdHJpbmdcclxufVxyXG5cclxuY29uc3QgZ2VuZXJhdGVTaWduYXR1cmUgPSAob3B0aW9uczogSVRjeXVuQ29uZmlnLCBmaWxlTmFtZTogc3RyaW5nKTogSVNpZ25hdHVyZSA9PiB7XHJcbiAgY29uc3Qgc2VjcmV0SWQgPSBvcHRpb25zLnNlY3JldElkXHJcbiAgY29uc3Qgc2VjcmV0S2V5ID0gb3B0aW9ucy5zZWNyZXRLZXlcclxuICBjb25zdCBhcHBJZCA9IG9wdGlvbnMuYXBwSWRcclxuICBjb25zdCBidWNrZXQgPSBvcHRpb25zLmJ1Y2tldFxyXG4gIGxldCBzaWduYXR1cmVcclxuICBsZXQgc2lnblRpbWU6IHN0cmluZyA9ICcnXHJcbiAgaWYgKCFvcHRpb25zLnZlcnNpb24gfHwgb3B0aW9ucy52ZXJzaW9uID09PSAndjQnKSB7XHJcbiAgICBjb25zdCByYW5kb20gPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwMDAwMDAwMClcclxuICAgIGNvbnN0IGN1cnJlbnQgPSBNYXRoLmZsb29yKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCkgLSAxXHJcbiAgICBjb25zdCBleHBpcmVkID0gY3VycmVudCArIDM2MDBcclxuXHJcbiAgICBjb25zdCBtdWx0aVNpZ25hdHVyZSA9IGBhPSR7YXBwSWR9JmI9JHtidWNrZXR9Jms9JHtzZWNyZXRJZH0mZT0ke2V4cGlyZWR9JnQ9JHtjdXJyZW50fSZyPSR7cmFuZG9tfSZmPWBcclxuXHJcbiAgICBjb25zdCBzaWduSGV4S2V5ID0gY3J5cHRvLmNyZWF0ZUhtYWMoJ3NoYTEnLCBzZWNyZXRLZXkpLnVwZGF0ZShtdWx0aVNpZ25hdHVyZSkuZGlnZXN0KClcclxuICAgIGNvbnN0IHRlbXBTdHJpbmcgPSBCdWZmZXIuY29uY2F0KFtzaWduSGV4S2V5LCBCdWZmZXIuZnJvbShtdWx0aVNpZ25hdHVyZSldKVxyXG4gICAgc2lnbmF0dXJlID0gQnVmZmVyLmZyb20odGVtcFN0cmluZykudG9TdHJpbmcoJ2Jhc2U2NCcpXHJcbiAgfSBlbHNlIHtcclxuICAgIC8vIGh0dHBzOi8vY2xvdWQudGVuY2VudC5jb20vZG9jdW1lbnQvcHJvZHVjdC80MzYvNzc3OCNzaWduYXR1cmVcclxuICAgIGNvbnN0IHRvZGF5ID0gTWF0aC5mbG9vcihuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDApXHJcbiAgICBjb25zdCB0b21vcnJvdyA9IHRvZGF5ICsgODY0MDBcclxuICAgIHNpZ25UaW1lID0gYCR7dG9kYXl9OyR7dG9tb3Jyb3d9YFxyXG4gICAgY29uc3Qgc2lnbktleSA9IGNyeXB0by5jcmVhdGVIbWFjKCdzaGExJywgc2VjcmV0S2V5KS51cGRhdGUoc2lnblRpbWUpLmRpZ2VzdCgnaGV4JylcclxuICAgIGNvbnN0IGVuZHBvaW50ID0gb3B0aW9ucy5lbmRwb2ludCA/IG9wdGlvbnMuZW5kcG9pbnQgOiBgY29zLiR7b3B0aW9ucy5hcmVhfS5teXFjbG91ZC5jb21gXHJcbiAgICBjb25zdCBodHRwU3RyaW5nID0gYHB1dFxcbi8ke29wdGlvbnMucGF0aH0ke2ZpbGVOYW1lfVxcblxcbmhvc3Q9JHtvcHRpb25zLmJ1Y2tldH0uJHtlbmRwb2ludH1cXG5gXHJcbiAgICBjb25zdCBzaGExZWRIdHRwU3RyaW5nID0gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTEnKS51cGRhdGUoaHR0cFN0cmluZykuZGlnZXN0KCdoZXgnKVxyXG4gICAgY29uc3Qgc3RyaW5nVG9TaWduID0gYHNoYTFcXG4ke3NpZ25UaW1lfVxcbiR7c2hhMWVkSHR0cFN0cmluZ31cXG5gXHJcbiAgICBzaWduYXR1cmUgPSBjcnlwdG8uY3JlYXRlSG1hYygnc2hhMScsIHNpZ25LZXkpLnVwZGF0ZShzdHJpbmdUb1NpZ24pLmRpZ2VzdCgnaGV4JylcclxuICB9XHJcbiAgcmV0dXJuIHtcclxuICAgIHNpZ25hdHVyZSxcclxuICAgIGFwcElkLFxyXG4gICAgYnVja2V0LFxyXG4gICAgc2lnblRpbWVcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IHBvc3RPcHRpb25zID0gKG9wdGlvbnM6IElUY3l1bkNvbmZpZywgZmlsZU5hbWU6IHN0cmluZywgc2lnbmF0dXJlOiBJU2lnbmF0dXJlLCBpbWFnZTogQnVmZmVyLCB2ZXJzaW9uOiBzdHJpbmcpOiBJT2xkUmVxT3B0aW9uc1dpdGhGdWxsUmVzcG9uc2UgPT4ge1xyXG4gIGNvbnN0IGFyZWEgPSBvcHRpb25zLmFyZWFcclxuICBjb25zdCBwYXRoID0gb3B0aW9ucy5wYXRoXHJcbiAgaWYgKCFvcHRpb25zLnZlcnNpb24gfHwgb3B0aW9ucy52ZXJzaW9uID09PSAndjQnKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgICAgdXJsOiBgaHR0cDovLyR7YXJlYX0uZmlsZS5teXFjbG91ZC5jb20vZmlsZXMvdjIvJHtzaWduYXR1cmUuYXBwSWR9LyR7c2lnbmF0dXJlLmJ1Y2tldH0vJHtlbmNvZGVVUkkocGF0aCl9JHtmaWxlTmFtZX1gLFxyXG4gICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgSG9zdDogYCR7YXJlYX0uZmlsZS5teXFjbG91ZC5jb21gLFxyXG4gICAgICAgIEF1dGhvcml6YXRpb246IHNpZ25hdHVyZS5zaWduYXR1cmUsXHJcbiAgICAgICAgY29udGVudFR5cGU6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJyxcclxuICAgICAgICAnVXNlci1BZ2VudCc6IGBQaWNHbzske3ZlcnNpb259O251bGw7bnVsbGBcclxuICAgICAgfSxcclxuICAgICAgZm9ybURhdGE6IHtcclxuICAgICAgICBvcDogJ3VwbG9hZCcsXHJcbiAgICAgICAgZmlsZWNvbnRlbnQ6IGltYWdlXHJcbiAgICAgIH0sXHJcbiAgICAgIHJlc29sdmVXaXRoRnVsbFJlc3BvbnNlOiB0cnVlXHJcbiAgICB9XHJcbiAgfSBlbHNlIHtcclxuICAgIGNvbnN0IGVuZHBvaW50ID0gb3B0aW9ucy5lbmRwb2ludCA/IG9wdGlvbnMuZW5kcG9pbnQgOiBgY29zLiR7b3B0aW9ucy5hcmVhfS5teXFjbG91ZC5jb21gXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBtZXRob2Q6ICdQVVQnLFxyXG4gICAgICB1cmw6IGBodHRwOi8vJHtvcHRpb25zLmJ1Y2tldH0uJHtlbmRwb2ludH0vJHtlbmNvZGVVUklDb21wb25lbnQocGF0aCl9JHtlbmNvZGVVUklDb21wb25lbnQoZmlsZU5hbWUpfWAsXHJcbiAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICBIb3N0OiBgJHtvcHRpb25zLmJ1Y2tldH0uJHtlbmRwb2ludH1gLFxyXG4gICAgICAgIEF1dGhvcml6YXRpb246IGBxLXNpZ24tYWxnb3JpdGhtPXNoYTEmcS1haz0ke29wdGlvbnMuc2VjcmV0SWR9JnEtc2lnbi10aW1lPSR7c2lnbmF0dXJlLnNpZ25UaW1lfSZxLWtleS10aW1lPSR7c2lnbmF0dXJlLnNpZ25UaW1lfSZxLWhlYWRlci1saXN0PWhvc3QmcS11cmwtcGFyYW0tbGlzdD0mcS1zaWduYXR1cmU9JHtzaWduYXR1cmUuc2lnbmF0dXJlfWAsXHJcbiAgICAgICAgY29udGVudFR5cGU6IG1pbWUubG9va3VwKGZpbGVOYW1lKSB8fCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJyxcclxuICAgICAgICAnVXNlci1BZ2VudCc6IGBQaWNHbzske3ZlcnNpb259O251bGw7bnVsbGBcclxuICAgICAgfSxcclxuICAgICAgYm9keTogaW1hZ2UsXHJcbiAgICAgIHJlc29sdmVXaXRoRnVsbFJlc3BvbnNlOiB0cnVlXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbyB8IGJvb2xlYW4+ID0+IHtcclxuICBjb25zdCB0Y1l1bk9wdGlvbnMgPSBjdHguZ2V0Q29uZmlnPElUY3l1bkNvbmZpZz4oJ3BpY0JlZC50Y3l1bicpXHJcbiAgaWYgKCF0Y1l1bk9wdGlvbnMpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignQ2FuXFwndCBmaW5kIHRlbmNlbnQgQ09TIGNvbmZpZycpXHJcbiAgfVxyXG4gIHRyeSB7XHJcbiAgICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxyXG4gICAgY29uc3QgY3VzdG9tVXJsID0gdGNZdW5PcHRpb25zLmN1c3RvbVVybFxyXG4gICAgY29uc3QgcGF0aCA9IHRjWXVuT3B0aW9ucy5wYXRoID8/ICcnXHJcbiAgICBjb25zdCB1c2VWNCA9ICF0Y1l1bk9wdGlvbnMudmVyc2lvbiB8fCB0Y1l1bk9wdGlvbnMudmVyc2lvbiA9PT0gJ3Y0J1xyXG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xyXG4gICAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcclxuICAgICAgICBjb25zdCBzaWduYXR1cmUgPSBnZW5lcmF0ZVNpZ25hdHVyZSh0Y1l1bk9wdGlvbnMsIGltZy5maWxlTmFtZSlcclxuICAgICAgICBpZiAoIXNpZ25hdHVyZSkge1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBpbWFnZSA9IGltZy5idWZmZXJcclxuICAgICAgICBpZiAoIWltYWdlICYmIGltZy5iYXNlNjRJbWFnZSkge1xyXG4gICAgICAgICAgaW1hZ2UgPSBCdWZmZXIuZnJvbShpbWcuYmFzZTY0SW1hZ2UsICdiYXNlNjQnKVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBvcHRpb25zID0gcG9zdE9wdGlvbnModGNZdW5PcHRpb25zLCBpbWcuZmlsZU5hbWUsIHNpZ25hdHVyZSwgaW1hZ2UsIGN0eC5HVUlfVkVSU0lPTiB8fCBjdHguVkVSU0lPTilcclxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBjdHgucmVxdWVzdChvcHRpb25zKVxyXG4gICAgICAgICAgLnRoZW4oKHJlczogYW55KSA9PiByZXMpXHJcbiAgICAgICAgICAuY2F0Y2goKGVycjogRXJyb3IpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICBzdGF0dXNDb2RlOiA0MDAsXHJcbiAgICAgICAgICAgICAgYm9keToge1xyXG4gICAgICAgICAgICAgICAgbXNnOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdBVVRIX0ZBSUxFRCcpLFxyXG4gICAgICAgICAgICAgICAgZXJyXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIGxldCBib2R5XHJcbiAgICAgICAgaWYgKHVzZVY0ICYmIHR5cGVvZiByZXMgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICBib2R5ID0gSlNPTi5wYXJzZShyZXMpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGJvZHkgPSByZXNcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gNDAwKSB7XHJcbiAgICAgICAgICBpZiAoYm9keT8uYm9keT8uZXJyKSB7XHJcbiAgICAgICAgICAgIHRocm93IGJvZHkuYm9keS5lcnJcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihib2R5Py5ib2R5Py5tc2cgfHwgYm9keT8uYm9keT8ubWVzc2FnZSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgb3B0aW9uVXJsID0gdGNZdW5PcHRpb25zLm9wdGlvbnMgfHwgJydcclxuICAgICAgICBjb25zdCBzbGltID0gdGNZdW5PcHRpb25zLnNsaW0gPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogISF0Y1l1bk9wdGlvbnMuc2xpbVxyXG4gICAgICAgIGlmICh1c2VWNCAmJiBib2R5Lm1lc3NhZ2UgPT09ICdTVUNDRVNTJykge1xyXG4gICAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxyXG4gICAgICAgICAgZGVsZXRlIGltZy5idWZmZXJcclxuICAgICAgICAgIGlmIChjdXN0b21VcmwpIHtcclxuICAgICAgICAgICAgaW1nLmltZ1VybCA9IGAke2N1c3RvbVVybH0vJHtwYXRofSR7aW1nLmZpbGVOYW1lfWBcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGltZy5pbWdVcmwgPSBgJHtib2R5LmRhdGEuc291cmNlX3VybCBhcyBzdHJpbmd9JHtvcHRpb25Vcmx9YFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoIXVzZVY0ICYmIGJvZHkgJiYgYm9keS5zdGF0dXNDb2RlID09PSAyMDApIHtcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXHJcbiAgICAgICAgICBpZiAoY3VzdG9tVXJsKSB7XHJcbiAgICAgICAgICAgIGltZy5pbWdVcmwgPSBgJHtjdXN0b21Vcmx9LyR7ZW5jb2RlVVJJQ29tcG9uZW50KHBhdGgpfSR7ZW5jb2RlVVJJQ29tcG9uZW50KGltZy5maWxlTmFtZSl9JHtvcHRpb25Vcmx9YC5yZXBsYWNlKC8lMkYvZywgJy8nKVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgZW5kcG9pbnQgPSB0Y1l1bk9wdGlvbnMuZW5kcG9pbnQgPyB0Y1l1bk9wdGlvbnMuZW5kcG9pbnQgOiBgY29zLiR7dGNZdW5PcHRpb25zLmFyZWF9Lm15cWNsb3VkLmNvbWBcclxuICAgICAgICAgICAgaW1nLmltZ1VybCA9IGBodHRwczovLyR7dGNZdW5PcHRpb25zLmJ1Y2tldH0uJHtlbmRwb2ludH0vJHtlbmNvZGVVUklDb21wb25lbnQocGF0aCl9JHtlbmNvZGVVUklDb21wb25lbnQoaW1nLmZpbGVOYW1lKX0ke29wdGlvblVybH1gLnJlcGxhY2UoLyUyRi9nLCAnLycpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihyZXMuYm9keS5tc2cpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzbGltKSB7XHJcbiAgICAgICAgICBpZiAob3B0aW9uVXJsKSB7XHJcbiAgICAgICAgICAgIGltZy5pbWdVcmwgKz0gJyZpbWFnZVNsaW0nXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpbWcuaW1nVXJsICs9ICc/aW1hZ2VTbGltJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XHJcbiAgICBpZiAoIXRjWXVuT3B0aW9ucy52ZXJzaW9uIHx8IHRjWXVuT3B0aW9ucy52ZXJzaW9uID09PSAndjQnKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgYm9keSA9IEpTT04ucGFyc2UoZXJyLmVycm9yKVxyXG4gICAgICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XHJcbiAgICAgICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxyXG4gICAgICAgICAgYm9keTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRF9SRUFTT04nLCB7XHJcbiAgICAgICAgICAgIGNvZGU6IGJvZHkuY29kZSBhcyBzdHJpbmdcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgdGV4dDogJ2h0dHBzOi8vY2xvdWQudGVuY2VudC5jb20vZG9jdW1lbnQvcHJvZHVjdC80MzYvODQzMidcclxuICAgICAgICB9KVxyXG4gICAgICB9IGNhdGNoIChlKSB7fVxyXG4gICAgfVxyXG4gICAgdGhyb3cgZXJyXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xyXG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElUY3l1bkNvbmZpZz4oJ3BpY0JlZC50Y3l1bicpIHx8IHt9XHJcbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd2ZXJzaW9uJyxcclxuICAgICAgdHlwZTogJ2xpc3QnLFxyXG4gICAgICBhbGlhczogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9WRVJTSU9OJyksXHJcbiAgICAgIGNob2ljZXM6IFsndjQnLCAndjUnXSxcclxuICAgICAgZGVmYXVsdDogJ3Y1JyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnc2VjcmV0SWQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9TRUNSRVRJRCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuc2VjcmV0SWQgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnc2VjcmV0S2V5JyxcclxuICAgICAgdHlwZTogJ3Bhc3N3b3JkJyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUS0VZJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5zZWNyZXRLZXkgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYnVja2V0JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfQlVDS0VUJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5idWNrZXQgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYXBwSWQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfQVBQSUQnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9BUFBJRCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYXBwSWQgfHwgJycsXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9BUFBJRCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYXJlYScsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9BUkVBJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfQVJFQScpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYXJlYSB8fCAnJyxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FSRUEnKSB9LFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2VuZHBvaW50JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX0VORFBPSU5UJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfRU5EUE9JTlQnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmVuZHBvaW50IHx8ICcnLFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfRU5EUE9JTlQnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwYXRoJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX1BBVEgnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9QQVRIJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wYXRoIHx8ICcnLFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfUEFUSCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2N1c3RvbVVybCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9DVVNUT01VUkwnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9DVVNUT01VUkwnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmN1c3RvbVVybCB8fCAnJyxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0NVU1RPTVVSTCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ29wdGlvbnMnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLm9wdGlvbnMgfHwgJycsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9PUFRJT05TJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfT1BUSU9OUycpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9PUFRJT05TJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnc2xpbScsXHJcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5zbGltID09PSB1bmRlZmluZWQgPyBmYWxzZSA6ICEhdXNlckNvbmZpZy5zbGltLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTScpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU0nKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGdldCBjb25maXJtVGV4dCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fQ09ORklSTScpIH0sXHJcbiAgICAgIGdldCBjYW5jZWxUZXh0ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9DQU5DRUwnKSB9LFxyXG4gICAgICBnZXQgdGlwcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fVElQJykgfVxyXG4gICAgfVxyXG4gIF1cclxuICByZXR1cm4gY29uZmlnXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyIChjdHg6IElQaWNHbyk6IHZvaWQge1xyXG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoJ3RjeXVuJywge1xyXG4gICAgZ2V0IG5hbWUgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRCcpIH0sXHJcbiAgICBoYW5kbGUsXHJcbiAgICBjb25maWdcclxuICB9KVxyXG59XHJcbiIsImltcG9ydCB7IElQaWNHbywgSVBsdWdpbkNvbmZpZywgSUdpdGh1YkNvbmZpZywgSU9sZFJlcU9wdGlvbnNXaXRoSlNPTiB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcclxuaW1wb3J0IHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xyXG5pbXBvcnQgbWltZSBmcm9tICdtaW1lLXR5cGVzJ1xyXG5cclxuY29uc3QgcG9zdE9wdGlvbnMgPSAoZmlsZU5hbWU6IHN0cmluZywgb3B0aW9uczogSUdpdGh1YkNvbmZpZywgZGF0YTogYW55KTogSU9sZFJlcU9wdGlvbnNXaXRoSlNPTiA9PiB7XHJcbiAgY29uc3QgcGF0aCA9IG9wdGlvbnMucGF0aCB8fCAnJ1xyXG4gIGNvbnN0IHsgdG9rZW4sIHJlcG8gfSA9IG9wdGlvbnNcclxuICByZXR1cm4ge1xyXG4gICAgbWV0aG9kOiAnUFVUJyxcclxuICAgIHVybDogYGh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvJHtyZXBvfS9jb250ZW50cy8ke2VuY29kZVVSSShwYXRoKX0ke2VuY29kZVVSSUNvbXBvbmVudChmaWxlTmFtZSl9YC5yZXBsYWNlKC8lMkYvZywgJy8nKSxcclxuICAgIGhlYWRlcnM6IHtcclxuICAgICAgQXV0aG9yaXphdGlvbjogYHRva2VuICR7dG9rZW59YCxcclxuICAgICAgJ1VzZXItQWdlbnQnOiAnUGljTGlzdCcsXHJcbiAgICAgICdDb250ZW50LVR5cGUnOiBtaW1lLmxvb2t1cChmaWxlTmFtZSkgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSdcclxuICAgIH0sXHJcbiAgICBib2R5OiBkYXRhLFxyXG4gICAganNvbjogdHJ1ZVxyXG4gIH0gYXMgY29uc3RcclxufVxyXG5cclxuY29uc3QgZ2V0T3B0aW9ucyA9IChmaWxlTmFtZTogc3RyaW5nLCBvcHRpb25zOiBJR2l0aHViQ29uZmlnKTogSU9sZFJlcU9wdGlvbnNXaXRoSlNPTiA9PiB7XHJcbiAgY29uc3QgcGF0aCA9IG9wdGlvbnMucGF0aCB8fCAnJ1xyXG4gIGNvbnN0IHsgdG9rZW4sIHJlcG8sIGJyYW5jaCB9ID0gb3B0aW9uc1xyXG4gIHJldHVybiB7XHJcbiAgICBtZXRob2Q6ICdHRVQnLFxyXG4gICAgdXJsOiBgaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy8ke3JlcG99L2NvbnRlbnRzLyR7ZW5jb2RlVVJJKHBhdGgpfSR7ZW5jb2RlVVJJQ29tcG9uZW50KGZpbGVOYW1lKX0/cmVmPSR7YnJhbmNofWAucmVwbGFjZSgvJTJGL2csICcvJyksXHJcbiAgICBoZWFkZXJzOiB7XHJcbiAgICAgIEF1dGhvcml6YXRpb246IGB0b2tlbiAke3Rva2VufWAsXHJcbiAgICAgICdVc2VyLUFnZW50JzogJ1BpY0dvJ1xyXG4gICAgfSxcclxuICAgIGpzb246IHRydWVcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiA9PiB7XHJcbiAgY29uc3QgZ2l0aHViT3B0aW9ucyA9IGN0eC5nZXRDb25maWc8SUdpdGh1YkNvbmZpZz4oJ3BpY0JlZC5naXRodWInKVxyXG4gIGlmICghZ2l0aHViT3B0aW9ucykge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5cXCd0IGZpbmQgZ2l0aHViIGNvbmZpZycpXHJcbiAgfVxyXG4gIHRyeSB7XHJcbiAgICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxyXG4gICAgY29uc3QgdXBsb2FkUGF0aCA9IGdpdGh1Yk9wdGlvbnMucGF0aCB8fCAnJ1xyXG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xyXG4gICAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcclxuICAgICAgICBjb25zdCBiYXNlNjRJbWFnZSA9IGltZy5iYXNlNjRJbWFnZSB8fCBCdWZmZXIuZnJvbShpbWcuYnVmZmVyKS50b1N0cmluZygnYmFzZTY0JylcclxuICAgICAgICBjb25zdCBkYXRhID0ge1xyXG4gICAgICAgICAgbWVzc2FnZTogJ1VwbG9hZCBieSBQaWNMaXN0JyxcclxuICAgICAgICAgIGJyYW5jaDogZ2l0aHViT3B0aW9ucy5icmFuY2gsXHJcbiAgICAgICAgICBjb250ZW50OiBiYXNlNjRJbWFnZSxcclxuICAgICAgICAgIHBhdGg6IHVwbG9hZFBhdGggKyBlbmNvZGVVUkkoaW1nLmZpbGVOYW1lKVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBwb3N0Q29uZmlnID0gcG9zdE9wdGlvbnMoaW1nLmZpbGVOYW1lLCBnaXRodWJPcHRpb25zLCBkYXRhKVxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBjb25zdCBib2R5OiB7XHJcbiAgICAgICAgICAgIGNvbnRlbnQ6IHtcclxuICAgICAgICAgICAgICBkb3dubG9hZF91cmw6IHN0cmluZ1xyXG4gICAgICAgICAgICAgIHNoYTogc3RyaW5nXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gPSBhd2FpdCBjdHgucmVxdWVzdChwb3N0Q29uZmlnKVxyXG4gICAgICAgICAgaWYgKGJvZHkpIHtcclxuICAgICAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxyXG4gICAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxyXG4gICAgICAgICAgICBpZiAoZ2l0aHViT3B0aW9ucy5jdXN0b21VcmwpIHtcclxuICAgICAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7Z2l0aHViT3B0aW9ucy5jdXN0b21Vcmx9LyR7ZW5jb2RlVVJJQ29tcG9uZW50KHVwbG9hZFBhdGgpfSR7ZW5jb2RlVVJJQ29tcG9uZW50KGltZy5maWxlTmFtZSl9YC5yZXBsYWNlKC8lMkYvZywgJy8nKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGltZy5pbWdVcmwgPSBib2R5LmNvbnRlbnQuZG93bmxvYWRfdXJsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaW1nLmhhc2ggPSBib2R5LmNvbnRlbnQuc2hhXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlcnZlciBlcnJvciwgcGxlYXNlIHRyeSBhZ2FpbicpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcclxuICAgICAgICAgIGlmIChlcnIuc3RhdHVzQ29kZSA9PT0gNDIyKSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcclxuICAgICAgICAgICAgZGVsZXRlIGltZy5idWZmZXJcclxuICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgY3R4LnJlcXVlc3QoZ2V0T3B0aW9ucyhpbWcuZmlsZU5hbWUsIGdpdGh1Yk9wdGlvbnMpKSBhcyBhbnlcclxuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHJlcykubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgaW1nLmhhc2ggPSByZXMuc2hhXHJcbiAgICAgICAgICAgICAgaWYgKGdpdGh1Yk9wdGlvbnMuY3VzdG9tVXJsKSB7XHJcbiAgICAgICAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7Z2l0aHViT3B0aW9ucy5jdXN0b21Vcmx9LyR7ZW5jb2RlVVJJQ29tcG9uZW50KHVwbG9hZFBhdGgpfSR7ZW5jb2RlVVJJQ29tcG9uZW50KGltZy5maWxlTmFtZSl9YC5yZXBsYWNlKC8lMkYvZywgJy8nKVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpbWcuaW1nVXJsID0gcmVzLmRvd25sb2FkX3VybFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0dldCBDb250ZW50cyBlcnJvciwgcGxlYXNlIHRyeSBhZ2FpbicpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRocm93IGVyclxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH0gY2F0Y2ggKGVycikge1xyXG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcclxuICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcclxuICAgICAgYm9keTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQ0hFQ0tfU0VUVElOR1NfQU5EX05FVFdPUksnKVxyXG4gICAgfSlcclxuICAgIHRocm93IGVyclxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcclxuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJR2l0aHViQ29uZmlnPigncGljQmVkLmdpdGh1YicpIHx8IHt9XHJcbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdyZXBvJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX1JFUE8nKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9SRVBPJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9NRVNTQUdFX1JFUE8nKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnJlcG8gfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYnJhbmNoJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX0JSQU5DSCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX0JSQU5DSCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUJfTUVTU0FHRV9CUkFOQ0gnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmJyYW5jaCB8fCAnbWFzdGVyJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd0b2tlbicsXHJcbiAgICAgIHR5cGU6ICdwYXNzd29yZCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX1RPS0VOJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy50b2tlbiB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwYXRoJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX1BBVEgnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9QQVRIJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9NRVNTQUdFX1BBVEgnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhdGggfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2N1c3RvbVVybCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9DVVNUT01VUkwnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9DVVNUT01VUkwnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX01FU1NBR0VfQ1VTVE9NVVJMJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5jdXN0b21VcmwgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfVxyXG4gIF1cclxuICByZXR1cm4gY29uZmlnXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyIChjdHg6IElQaWNHbyk6IHZvaWQge1xyXG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoJ2dpdGh1YicsIHtcclxuICAgIGdldCBuYW1lICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUInKSB9LFxyXG4gICAgaGFuZGxlLFxyXG4gICAgY29uZmlnXHJcbiAgfSlcclxufVxyXG4iLCJpbXBvcnQgcWluaXUgZnJvbSAncWluaXUnXHJcbmltcG9ydCB7IElQbHVnaW5Db25maWcsIElRaW5pdUNvbmZpZywgSVBpY0dvLCBJT2xkUmVxT3B0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcclxuaW1wb3J0IHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xyXG5pbXBvcnQgbWltZSBmcm9tICdtaW1lLXR5cGVzJ1xyXG5cclxuZnVuY3Rpb24gcG9zdE9wdGlvbnMgKG9wdGlvbnM6IElRaW5pdUNvbmZpZywgZmlsZU5hbWU6IHN0cmluZywgdG9rZW46IHN0cmluZywgaW1nQmFzZTY0OiBzdHJpbmcpOiBJT2xkUmVxT3B0aW9ucyB7XHJcbiAgY29uc3QgYXJlYSA9IHNlbGVjdEFyZWEob3B0aW9ucy5hcmVhIHx8ICd6MCcpXHJcbiAgY29uc3QgcGF0aCA9IG9wdGlvbnMucGF0aCB8fCAnJ1xyXG4gIGNvbnN0IGJhc2U2NEZpbGVOYW1lID0gQnVmZmVyLmZyb20ocGF0aCArIGZpbGVOYW1lLCAndXRmLTgnKS50b1N0cmluZygnYmFzZTY0JykucmVwbGFjZSgvXFwrL2csICctJykucmVwbGFjZSgvXFwvL2csICdfJylcclxuICByZXR1cm4ge1xyXG4gICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICB1cmw6IGBodHRwOi8vdXBsb2FkJHthcmVhfS5xaW5pdXAuY29tL3B1dGI2NC8tMS9rZXkvJHtiYXNlNjRGaWxlTmFtZX1gLFxyXG4gICAgaGVhZGVyczoge1xyXG4gICAgICBBdXRob3JpemF0aW9uOiBgVXBUb2tlbiAke3Rva2VufWAsXHJcbiAgICAgICdDb250ZW50LVR5cGUnOiBtaW1lLmxvb2t1cChmaWxlTmFtZSkgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSdcclxuICAgIH0sXHJcbiAgICBib2R5OiBpbWdCYXNlNjRcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNlbGVjdEFyZWEgKGFyZWE6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgcmV0dXJuIGFyZWEgPT09ICd6MCcgPyAnJyA6ICctJyArIGFyZWFcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0VG9rZW4gKHFpbml1T3B0aW9uczogYW55KTogc3RyaW5nIHtcclxuICBjb25zdCBhY2Nlc3NLZXkgPSBxaW5pdU9wdGlvbnMuYWNjZXNzS2V5XHJcbiAgY29uc3Qgc2VjcmV0S2V5ID0gcWluaXVPcHRpb25zLnNlY3JldEtleVxyXG4gIGNvbnN0IG1hYyA9IG5ldyBxaW5pdS5hdXRoLmRpZ2VzdC5NYWMoYWNjZXNzS2V5LCBzZWNyZXRLZXkpXHJcbiAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgIHNjb3BlOiBxaW5pdU9wdGlvbnMuYnVja2V0XHJcbiAgfVxyXG4gIGNvbnN0IHB1dFBvbGljeSA9IG5ldyBxaW5pdS5ycy5QdXRQb2xpY3kob3B0aW9ucylcclxuICByZXR1cm4gcHV0UG9saWN5LnVwbG9hZFRva2VuKG1hYylcclxufVxyXG5cclxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcclxuICBjb25zdCBxaW5pdU9wdGlvbnMgPSBjdHguZ2V0Q29uZmlnPElRaW5pdUNvbmZpZz4oJ3BpY0JlZC5xaW5pdScpXHJcbiAgaWYgKCFxaW5pdU9wdGlvbnMpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignQ2FuXFwndCBmaW5kIHFpbml1IGNvbmZpZycpXHJcbiAgfVxyXG4gIHRyeSB7XHJcbiAgICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxyXG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xyXG4gICAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcclxuICAgICAgICBjb25zdCBiYXNlNjRJbWFnZSA9IGltZy5iYXNlNjRJbWFnZSB8fCBCdWZmZXIuZnJvbShpbWcuYnVmZmVyKS50b1N0cmluZygnYmFzZTY0JylcclxuICAgICAgICBjb25zdCBvcHRpb25zID0gcG9zdE9wdGlvbnMocWluaXVPcHRpb25zLCBpbWcuZmlsZU5hbWUsIGdldFRva2VuKHFpbml1T3B0aW9ucyksIGJhc2U2NEltYWdlKVxyXG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGN0eC5yZXF1ZXN0KG9wdGlvbnMpXHJcbiAgICAgICAgY29uc3QgYm9keSA9IEpTT04ucGFyc2UocmVzKVxyXG4gICAgICAgIGlmIChib2R5Py5rZXkpIHtcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXHJcbiAgICAgICAgICBjb25zdCBiYXNlVXJsID0gcWluaXVPcHRpb25zLnVybFxyXG4gICAgICAgICAgY29uc3QgdXJsT3B0aW9ucyA9IHFpbml1T3B0aW9ucy5vcHRpb25zIHx8ICcnXHJcbiAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7YmFzZVVybH0vJHtib2R5LmtleSBhcyBzdHJpbmd9JHt1cmxPcHRpb25zfWBcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcclxuICAgICAgICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcclxuICAgICAgICAgICAgYm9keTogYm9keS5tc2dcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICBjdHgubG9nLmVycm9yKCdxaW5pdSBlcnJvcicsIGJvZHkpXHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VwbG9hZCBmYWlsZWQnKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XHJcbiAgICBpZiAoZXJyLm1lc3NhZ2UgIT09ICdVcGxvYWQgZmFpbGVkJykge1xyXG4gICAgICAvLyBlcnIucmVzcG9uc2UgbWF5YmUgdW5kZWZpbmVkXHJcbiAgICAgIGlmIChlcnIucmVzcG9uc2UpIHtcclxuICAgICAgICBjb25zdCBlcnJvciA9IGVyci5yZXNwb25zZS5ib2R5XHJcbiAgICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcclxuICAgICAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXHJcbiAgICAgICAgICBib2R5OiBlcnJvci5lcnJvclxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRocm93IGVyclxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcclxuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJUWluaXVDb25maWc+KCdwaWNCZWQucWluaXUnKSB8fCB7fVxyXG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYWNjZXNzS2V5JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9BQ0NFU1NLRVknKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmFjY2Vzc0tleSB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdzZWNyZXRLZXknLFxyXG4gICAgICB0eXBlOiAncGFzc3dvcmQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX1NFQ1JFVEtFWScpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuc2VjcmV0S2V5IHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2J1Y2tldCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfQlVDS0VUJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5idWNrZXQgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAndXJsJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfVVJMJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9VUkwnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfTUVTU0FHRV9VUkwnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnVybCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdhcmVhJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfQVJFQScpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfQVJFQScpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9NRVNTQUdFX0FSRUEnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmFyZWEgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnb3B0aW9ucycsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX09QVElPTlMnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX09QVElPTlMnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfTUVTU0FHRV9PUFRJT05TJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5vcHRpb25zIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwYXRoJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfUEFUSCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfUEFUSCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9NRVNTQUdFX1BBVEgnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhdGggfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfVxyXG4gIF1cclxuICByZXR1cm4gY29uZmlnXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyIChjdHg6IElQaWNHbyk6IHZvaWQge1xyXG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoJ3Fpbml1Jywge1xyXG4gICAgZ2V0IG5hbWUgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVJykgfSxcclxuICAgIGhhbmRsZSxcclxuICAgIGNvbmZpZ1xyXG4gIH0pXHJcbn1cclxuIiwiaW1wb3J0IHsgSVBpY0dvLCBJUGx1Z2luQ29uZmlnLCBJSW1ndXJDb25maWcsIElPbGRSZXFPcHRpb25zLCBJRnVsbFJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xyXG5pbXBvcnQgeyBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXHJcblxyXG5jb25zdCBmb3JtYXRBY2Nlc3NUb2tlbiA9IChhY2Nlc3NUb2tlbjogc3RyaW5nKTogc3RyaW5nID0+IGFjY2Vzc1Rva2VuID8gYWNjZXNzVG9rZW4uc3RhcnRzV2l0aCgnQmVhcmVyJykgPyBhY2Nlc3NUb2tlbiA6IGBCZWFyZXIgJHthY2Nlc3NUb2tlbn1gIDogJydcclxuXHJcbmNvbnN0IHBvc3RPcHRpb25zID0gYXN5bmMgKGN0eDogSVBpY0dvLCBvcHRpb25zOiBJSW1ndXJDb25maWcsIGZpbGVOYW1lOiBzdHJpbmcsIGltZ0Jhc2U2NDogc3RyaW5nKTogUHJvbWlzZTxJT2xkUmVxT3B0aW9ucz4gPT4ge1xyXG4gIGNvbnN0IGNsaWVudElkID0gb3B0aW9ucy5jbGllbnRJZCB8fCAnJ1xyXG4gIGNvbnN0IHVzZXJuYW1lID0gb3B0aW9ucy51c2VybmFtZSB8fCAnJ1xyXG4gIGNvbnN0IGFjY2Vzc1Rva2VuID0gZm9ybWF0QWNjZXNzVG9rZW4ob3B0aW9ucy5hY2Nlc3NUb2tlbiB8fCAnJylcclxuICBjb25zdCBhbGJ1bSA9IG9wdGlvbnMuYWxidW0gfHwgJydcclxuICBsZXQgYXV0aG9yaXphdGlvblxyXG4gIGlmICh1c2VybmFtZSAmJiBhY2Nlc3NUb2tlbikge1xyXG4gICAgYXV0aG9yaXphdGlvbiA9IGFjY2Vzc1Rva2VuXHJcbiAgfSBlbHNlIGlmIChjbGllbnRJZCkge1xyXG4gICAgYXV0aG9yaXphdGlvbiA9IGBDbGllbnQtSUQgJHtjbGllbnRJZH1gXHJcbiAgfSBlbHNlIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignY2xpZW50SWQgb3IgYWNjZXNzVG9rZW4gaXMgcmVxdWlyZWQnKVxyXG4gIH1cclxuICBjb25zdCByZXF1ZXN0T3B0aW9uczogSU9sZFJlcU9wdGlvbnMgPSB7XHJcbiAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgIHVybDogJ2h0dHBzOi8vYXBpLmltZ3VyLmNvbS8zL2ltYWdlJyxcclxuICAgIGhlYWRlcnM6IHtcclxuICAgICAgQXV0aG9yaXphdGlvbjogYXV0aG9yaXphdGlvbixcclxuICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJyxcclxuICAgICAgSG9zdDogJ2FwaS5pbWd1ci5jb20nLFxyXG4gICAgICAnVXNlci1BZ2VudCc6ICdQaWNMaXN0J1xyXG4gICAgfSxcclxuICAgIGZvcm1EYXRhOiB7XHJcbiAgICAgIGltYWdlOiBpbWdCYXNlNjQsXHJcbiAgICAgIHR5cGU6ICdiYXNlNjQnLFxyXG4gICAgICBuYW1lOiBmaWxlTmFtZSxcclxuICAgICAgZGVzY3JpcHRpb246ICdVcGxvYWRlZCB3aXRoIFBpY0xpc3QnXHJcbiAgICB9XHJcbiAgfVxyXG4gIGlmICh1c2VybmFtZSAmJiBhY2Nlc3NUb2tlbiAmJiBhbGJ1bSkge1xyXG4gICAgbGV0IGluaXRQYWdlcyA9IDBcclxuICAgIGxldCByZXNcclxuICAgIGxldCBhbGJ1bUhhc2ggPSAnJ1xyXG4gICAgZG8ge1xyXG4gICAgICBjb25zdCBnZXRBbGJ1bUhhc2hPcHRpb25zOiBJT2xkUmVxT3B0aW9ucyA9IHtcclxuICAgICAgICBtZXRob2Q6ICdHRVQnLFxyXG4gICAgICAgIHVybDogYGh0dHBzOi8vYXBpLmltZ3VyLmNvbS8zL2FjY291bnQvJHt1c2VybmFtZX0vYWxidW1zLyR7aW5pdFBhZ2VzfWAsXHJcbiAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgQXV0aG9yaXphdGlvbjogYXV0aG9yaXphdGlvblxyXG4gICAgICAgIH0sXHJcbiAgICAgICAganNvbjogdHJ1ZSxcclxuICAgICAgICByZXNvbHZlV2l0aEZ1bGxSZXNwb25zZTogdHJ1ZSxcclxuICAgICAgICB0aW1lb3V0OiAxMDAwMFxyXG4gICAgICB9XHJcbiAgICAgIGlmIChvcHRpb25zLnByb3h5KSB7XHJcbiAgICAgICAgZ2V0QWxidW1IYXNoT3B0aW9ucy5wcm94eSA9IG9wdGlvbnMucHJveHlcclxuICAgICAgfVxyXG4gICAgICByZXMgPSBhd2FpdCBjdHgucmVxdWVzdChnZXRBbGJ1bUhhc2hPcHRpb25zKSBhcyB1bmtub3duIGFzIElGdWxsUmVzcG9uc2VcclxuICAgICAgaWYgKCEocmVzLnN0YXR1c0NvZGUgPT09IDIwMCAmJiByZXMuYm9keS5zdWNjZXNzKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignU2VydmVyIGVycm9yLCBwbGVhc2UgdHJ5IGFnYWluJylcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBhbGJ1bUxpc3QgPSByZXMuYm9keS5kYXRhXHJcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBhbGJ1bUxpc3QpIHtcclxuICAgICAgICBpZiAoaXRlbS50aXRsZSA9PT0gYWxidW0pIHtcclxuICAgICAgICAgIGFsYnVtSGFzaCA9IGl0ZW0uaWRcclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGluaXRQYWdlcysrXHJcbiAgICB9IHdoaWxlIChyZXMuYm9keS5kYXRhLmxlbmd0aCA+IDApXHJcbiAgICBpZiAoYWxidW1IYXNoICYmIHJlcXVlc3RPcHRpb25zLmZvcm1EYXRhKSB7XHJcbiAgICAgIHJlcXVlc3RPcHRpb25zLmZvcm1EYXRhLmFsYnVtID0gYWxidW1IYXNoXHJcbiAgICB9XHJcbiAgfVxyXG4gIGlmIChvcHRpb25zLnByb3h5KSB7XHJcbiAgICByZXF1ZXN0T3B0aW9ucy5wcm94eSA9IG9wdGlvbnMucHJveHlcclxuICB9XHJcbiAgcmV0dXJuIHJlcXVlc3RPcHRpb25zXHJcbn1cclxuXHJcbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiA9PiB7XHJcbiAgY29uc3QgaW1ndXJPcHRpb25zID0gY3R4LmdldENvbmZpZzxJSW1ndXJDb25maWc+KCdwaWNCZWQuaW1ndXInKVxyXG4gIGlmICghaW1ndXJPcHRpb25zKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhblxcJ3QgZmluZCBpbWd1ciBjb25maWcnKVxyXG4gIH1cclxuICB0cnkge1xyXG4gICAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcclxuICAgIGZvciAoY29uc3QgaW1nIG9mIGltZ0xpc3QpIHtcclxuICAgICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XHJcbiAgICAgICAgY29uc3QgYmFzZTY0SW1hZ2UgPSBpbWcuYmFzZTY0SW1hZ2UgfHwgQnVmZmVyLmZyb20oaW1nLmJ1ZmZlcikudG9TdHJpbmcoJ2Jhc2U2NCcpXHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGF3YWl0IHBvc3RPcHRpb25zKGN0eCwgaW1ndXJPcHRpb25zLCBpbWcuZmlsZU5hbWUsIGJhc2U2NEltYWdlKVxyXG4gICAgICAgIGNvbnN0IHJlczogc3RyaW5nID0gYXdhaXQgY3R4LnJlcXVlc3Qob3B0aW9ucylcclxuICAgICAgICBjb25zdCBib2R5ID0gdHlwZW9mIHJlcyA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKHJlcykgOiByZXNcclxuICAgICAgICBpZiAoYm9keS5zdWNjZXNzKSB7XHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxyXG4gICAgICAgICAgaW1nLmltZ1VybCA9IGJvZHkuZGF0YS5saW5rXHJcbiAgICAgICAgICBpbWcuaGFzaCA9IGJvZHkuZGF0YS5kZWxldGVoYXNoXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU2VydmVyIGVycm9yLCBwbGVhc2UgdHJ5IGFnYWluJylcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBjdHhcclxuICB9IGNhdGNoIChlcnIpIHtcclxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XHJcbiAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXHJcbiAgICAgIGJvZHk6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0NIRUNLX1NFVFRJTkdTX0FORF9ORVRXT1JLJyksXHJcbiAgICAgIHRleHQ6ICdodHRwOi8vZG9jcy5pbWd1ci5jb20vYXBpL2Vycm5vLydcclxuICAgIH0pXHJcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXHJcbiAgICB0aHJvdyBlcnI/LnJlc3BvbnNlPy5kYXRhIHx8IGVyclxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcclxuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJSW1ndXJDb25maWc+KCdwaWNCZWQuaW1ndXInKSB8fCB7fVxyXG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xyXG4gICAge1xyXG4gICAgICBuYW1lOiAnY2xpZW50SWQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9DTElFTlRJRCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfQ0xJRU5USUQnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfTUVTU0FHRV9DTElFTlRJRCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuY2xpZW50SWQgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3VzZXJuYW1lJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfVVNFUk5BTUUnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX1VTRVJOQU1FJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX01FU1NBR0VfVVNFUk5BTUUnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnVzZXJuYW1lIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdhY2Nlc3NUb2tlbicsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX0FDQ0VTU19UT0tFTicpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfQUNDRVNTX1RPS0VOJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX01FU1NBR0VfQUNDRVNTX1RPS0VOJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5hY2Nlc3NUb2tlbiB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYWxidW0nLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9BTEJVTScpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfQUxCVU0nKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfTUVTU0FHRV9BTEJVTScpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYWxidW0gfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3Byb3h5JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfUFJPWFknKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX1BST1hZJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX01FU1NBR0VfUFJPWFknKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnByb3h5IHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH1cclxuICBdXHJcbiAgcmV0dXJuIGNvbmZpZ1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlciAoY3R4OiBJUGljR28pOiB2b2lkIHtcclxuICBjdHguaGVscGVyLnVwbG9hZGVyLnJlZ2lzdGVyKCdpbWd1cicsIHtcclxuICAgIGdldCBuYW1lICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUicpIH0sXHJcbiAgICBoYW5kbGUsXHJcbiAgICBjb25maWdcclxuICB9KVxyXG59XHJcbiIsImltcG9ydCB7IElQaWNHbywgSVBsdWdpbkNvbmZpZywgSUFsaXl1bkNvbmZpZywgSU9sZFJlcU9wdGlvbnNXaXRoRnVsbFJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCBjcnlwdG8gZnJvbSAnY3J5cHRvJ1xyXG5pbXBvcnQgbWltZSBmcm9tICdtaW1lLXR5cGVzJ1xyXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcclxuaW1wb3J0IHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xyXG5cclxuLy8gZ2VuZXJhdGUgT1NTIHNpZ25hdHVyZVxyXG5jb25zdCBnZW5lcmF0ZVNpZ25hdHVyZSA9IChvcHRpb25zOiBJQWxpeXVuQ29uZmlnLCBmaWxlTmFtZTogc3RyaW5nKTogc3RyaW5nID0+IHtcclxuICBjb25zdCBkYXRlID0gbmV3IERhdGUoKS50b1VUQ1N0cmluZygpXHJcbiAgY29uc3QgbWltZVR5cGUgPSBtaW1lLmxvb2t1cChmaWxlTmFtZSkgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSdcclxuXHJcbiAgY29uc3Qgc2lnblN0cmluZyA9IGBQVVRcXG5cXG4ke21pbWVUeXBlfVxcbiR7ZGF0ZX1cXG4vJHtvcHRpb25zLmJ1Y2tldH0vJHtvcHRpb25zLnBhdGh9JHtmaWxlTmFtZX1gXHJcblxyXG4gIGNvbnN0IHNpZ25hdHVyZSA9IGNyeXB0by5jcmVhdGVIbWFjKCdzaGExJywgb3B0aW9ucy5hY2Nlc3NLZXlTZWNyZXQpLnVwZGF0ZShzaWduU3RyaW5nKS5kaWdlc3QoJ2Jhc2U2NCcpXHJcbiAgcmV0dXJuIGBPU1MgJHtvcHRpb25zLmFjY2Vzc0tleUlkfToke3NpZ25hdHVyZX1gXHJcbn1cclxuXHJcbmNvbnN0IHBvc3RPcHRpb25zID0gKG9wdGlvbnM6IElBbGl5dW5Db25maWcsIGZpbGVOYW1lOiBzdHJpbmcsIHNpZ25hdHVyZTogc3RyaW5nLCBpbWFnZTogQnVmZmVyKTogSU9sZFJlcU9wdGlvbnNXaXRoRnVsbFJlc3BvbnNlID0+IHtcclxuICByZXR1cm4ge1xyXG4gICAgbWV0aG9kOiAnUFVUJyxcclxuICAgIHVybDogYGh0dHBzOi8vJHtvcHRpb25zLmJ1Y2tldH0uJHtvcHRpb25zLmFyZWF9LmFsaXl1bmNzLmNvbS8ke2VuY29kZVVSSShvcHRpb25zLnBhdGgpfSR7ZW5jb2RlVVJJQ29tcG9uZW50KGZpbGVOYW1lKX1gLnJlcGxhY2UoLyUyRi9nLCAnLycpLFxyXG4gICAgaGVhZGVyczoge1xyXG4gICAgICBIb3N0OiBgJHtvcHRpb25zLmJ1Y2tldH0uJHtvcHRpb25zLmFyZWF9LmFsaXl1bmNzLmNvbWAsXHJcbiAgICAgIEF1dGhvcml6YXRpb246IHNpZ25hdHVyZSxcclxuICAgICAgRGF0ZTogbmV3IERhdGUoKS50b1VUQ1N0cmluZygpLFxyXG4gICAgICAnQ29udGVudC1UeXBlJzogbWltZS5sb29rdXAoZmlsZU5hbWUpXHJcbiAgICB9LFxyXG4gICAgYm9keTogaW1hZ2UsXHJcbiAgICByZXNvbHZlV2l0aEZ1bGxSZXNwb25zZTogdHJ1ZVxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcclxuICBjb25zdCBhbGlZdW5PcHRpb25zID0gY3R4LmdldENvbmZpZzxJQWxpeXVuQ29uZmlnPigncGljQmVkLmFsaXl1bicpXHJcbiAgaWYgKCFhbGlZdW5PcHRpb25zKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhblxcJ3QgZmluZCBhbGlZdW4gT1NTIGNvbmZpZycpXHJcbiAgfVxyXG4gIGFsaVl1bk9wdGlvbnMucGF0aCA9IGFsaVl1bk9wdGlvbnMucGF0aC5yZXBsYWNlKC9cXC8qJC8sICcnKS5yZXBsYWNlKC9eXFwvKi8sICcnKSArICcvJ1xyXG4gIGlmIChhbGlZdW5PcHRpb25zLnBhdGggPT09ICcvJykge1xyXG4gICAgYWxpWXVuT3B0aW9ucy5wYXRoID0gJydcclxuICB9XHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XHJcbiAgICBjb25zdCBjdXN0b21VcmwgPSBhbGlZdW5PcHRpb25zLmN1c3RvbVVybFxyXG4gICAgY29uc3QgcGF0aCA9IGFsaVl1bk9wdGlvbnMucGF0aCA/PyAnJ1xyXG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xyXG4gICAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcclxuICAgICAgICBjb25zdCBzaWduYXR1cmUgPSBnZW5lcmF0ZVNpZ25hdHVyZShhbGlZdW5PcHRpb25zLCBpbWcuZmlsZU5hbWUpXHJcbiAgICAgICAgbGV0IGltYWdlID0gaW1nLmJ1ZmZlclxyXG4gICAgICAgIGlmICghaW1hZ2UgJiYgaW1nLmJhc2U2NEltYWdlKSB7XHJcbiAgICAgICAgICBpbWFnZSA9IEJ1ZmZlci5mcm9tKGltZy5iYXNlNjRJbWFnZSwgJ2Jhc2U2NCcpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBwb3N0T3B0aW9ucyhhbGlZdW5PcHRpb25zLCBpbWcuZmlsZU5hbWUsIHNpZ25hdHVyZSwgaW1hZ2UpXHJcbiAgICAgICAgY29uc3QgYm9keSA9IGF3YWl0IGN0eC5yZXF1ZXN0KG9wdGlvbnMpXHJcbiAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxyXG4gICAgICAgICAgY29uc3Qgb3B0aW9uVXJsID0gYWxpWXVuT3B0aW9ucy5vcHRpb25zIHx8ICcnXHJcbiAgICAgICAgICBpZiAoY3VzdG9tVXJsKSB7XHJcbiAgICAgICAgICAgIGltZy5pbWdVcmwgPSBgJHtjdXN0b21Vcmx9LyR7ZW5jb2RlVVJJQ29tcG9uZW50KHBhdGgpfSR7ZW5jb2RlVVJJQ29tcG9uZW50KGltZy5maWxlTmFtZSl9JHtvcHRpb25Vcmx9YC5yZXBsYWNlKC8lMkYvZywgJy8nKVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaW1nLmltZ1VybCA9IGBodHRwczovLyR7YWxpWXVuT3B0aW9ucy5idWNrZXR9LiR7YWxpWXVuT3B0aW9ucy5hcmVhfS5hbGl5dW5jcy5jb20vJHtlbmNvZGVVUklDb21wb25lbnQocGF0aCl9JHtlbmNvZGVVUklDb21wb25lbnQoaW1nLmZpbGVOYW1lKX0ke29wdGlvblVybH1gLnJlcGxhY2UoLyUyRi9nLCAnLycpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVXBsb2FkIGZhaWxlZCcpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY3R4XHJcbiAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xyXG4gICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxyXG4gICAgICBib2R5OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdDSEVDS19TRVRUSU5HUycpXHJcbiAgICB9KVxyXG4gICAgdGhyb3cgZXJyXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xyXG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElBbGl5dW5Db25maWc+KCdwaWNCZWQuYWxpeXVuJykgfHwge31cclxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2FjY2Vzc0tleUlkJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9BQ0NFU1NLRVlJRCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYWNjZXNzS2V5SWQgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYWNjZXNzS2V5U2VjcmV0JyxcclxuICAgICAgdHlwZTogJ3Bhc3N3b3JkJyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9BQ0NFU1NLRVlTRUNSRVQnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmFjY2Vzc0tleVNlY3JldCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdidWNrZXQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX0JVQ0tFVCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYnVja2V0IHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2FyZWEnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9BUkVBJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9BUkVBJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5hcmVhIHx8ICcnLFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9BUkVBJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwYXRoJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfUEFUSCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfUEFUSCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX1BBVEgnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhdGggfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2N1c3RvbVVybCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX0NVU1RPTVVSTCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfQ1VTVE9NVVJMJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQ1VTVE9NVVJMJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5jdXN0b21VcmwgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ29wdGlvbnMnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9PUFRJT05TJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9PUFRJT05TJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfT1BUSU9OUycpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcub3B0aW9ucyB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9XHJcbiAgXVxyXG4gIHJldHVybiBjb25maWdcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIgKGN0eDogSVBpY0dvKTogdm9pZCB7XHJcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3RlcignYWxpeXVuJywge1xyXG4gICAgZ2V0IG5hbWUgKCkge1xyXG4gICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEJylcclxuICAgIH0sXHJcbiAgICBoYW5kbGUsXHJcbiAgICBjb25maWdcclxuICB9KVxyXG59XHJcbiIsImltcG9ydCB7IElQaWNHbywgSVBsdWdpbkNvbmZpZywgSVVweXVuQ29uZmlnLCBJT2xkUmVxT3B0aW9uc1dpdGhGdWxsUmVzcG9uc2UgfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IGNyeXB0byBmcm9tICdjcnlwdG8nXHJcbmltcG9ydCBNRDUgZnJvbSAnbWQ1J1xyXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcclxuaW1wb3J0IHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xyXG5pbXBvcnQgeyBzYWZlUGFyc2UgfSBmcm9tICcuLi8uLi91dGlscy9jb21tb24nXHJcbmltcG9ydCBtaW1lIGZyb20gJ21pbWUtdHlwZXMnXHJcblxyXG4vLyBnZW5lcmF0ZSBDT1Mgc2lnbmF0dXJlIHN0cmluZ1xyXG5jb25zdCBnZW5lcmF0ZVNpZ25hdHVyZSA9IChvcHRpb25zOiBJVXB5dW5Db25maWcsIGZpbGVOYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xyXG4gIGNvbnN0IHBhdGggPSBvcHRpb25zLnBhdGggfHwgJydcclxuICBjb25zdCBvcGVyYXRvciA9IG9wdGlvbnMub3BlcmF0b3JcclxuICBjb25zdCBwYXNzd29yZCA9IG9wdGlvbnMucGFzc3dvcmRcclxuICBjb25zdCBtZDVQYXNzd29yZCA9IE1ENShwYXNzd29yZClcclxuICBjb25zdCBkYXRlID0gbmV3IERhdGUoKS50b1VUQ1N0cmluZygpXHJcbiAgY29uc3QgdXJpID0gYC8ke29wdGlvbnMuYnVja2V0fS8ke2VuY29kZVVSSShwYXRoKX0ke2VuY29kZVVSSUNvbXBvbmVudChmaWxlTmFtZSl9YC5yZXBsYWNlKC8lMkYvZywgJy8nKVxyXG4gIGNvbnN0IHZhbHVlID0gYFBVVCYke3VyaX0mJHtkYXRlfWBcclxuICBjb25zdCBzaWduID0gY3J5cHRvLmNyZWF0ZUhtYWMoJ3NoYTEnLCBtZDVQYXNzd29yZCkudXBkYXRlKHZhbHVlKS5kaWdlc3QoJ2Jhc2U2NCcpXHJcbiAgcmV0dXJuIGBVUFlVTiAke29wZXJhdG9yfToke3NpZ259YFxyXG59XHJcblxyXG5jb25zdCBwb3N0T3B0aW9ucyA9IChvcHRpb25zOiBJVXB5dW5Db25maWcsIGZpbGVOYW1lOiBzdHJpbmcsIHNpZ25hdHVyZTogc3RyaW5nLCBpbWFnZTogQnVmZmVyKTogSU9sZFJlcU9wdGlvbnNXaXRoRnVsbFJlc3BvbnNlID0+IHtcclxuICBjb25zdCBidWNrZXQgPSBvcHRpb25zLmJ1Y2tldFxyXG4gIGNvbnN0IHBhdGggPSBvcHRpb25zLnBhdGggfHwgJydcclxuICByZXR1cm4ge1xyXG4gICAgbWV0aG9kOiAnUFVUJyxcclxuICAgIHVybDogYGh0dHBzOi8vdjAuYXBpLnVweXVuLmNvbS8ke2J1Y2tldH0vJHtlbmNvZGVVUkkocGF0aCl9JHtlbmNvZGVVUklDb21wb25lbnQoZmlsZU5hbWUpfWAucmVwbGFjZSgvJTJGL2csICcvJyksXHJcbiAgICBoZWFkZXJzOiB7XHJcbiAgICAgIEF1dGhvcml6YXRpb246IHNpZ25hdHVyZSxcclxuICAgICAgRGF0ZTogbmV3IERhdGUoKS50b1VUQ1N0cmluZygpLFxyXG4gICAgICAnQ29udGVudC1UeXBlJzogbWltZS5sb29rdXAoZmlsZU5hbWUpIHx8ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nXHJcbiAgICB9LFxyXG4gICAgYm9keTogaW1hZ2UsXHJcbiAgICByZXNvbHZlV2l0aEZ1bGxSZXNwb25zZTogdHJ1ZVxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgZ2V0QW50aUxlZWNoUGFyYW0gPSAoYW50aUxlZWNoVG9rZW46IHN0cmluZywgZXhwaXJlVGltZTogc3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkLCBvcHRpb25zOiBJVXB5dW5Db25maWcsIGZpbGVOYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xyXG4gIGNvbnN0IHVyaSA9IGAvJHtlbmNvZGVVUkkob3B0aW9ucy5wYXRoIHx8ICcnKX0ke2VuY29kZVVSSUNvbXBvbmVudChmaWxlTmFtZSl9YC5yZXBsYWNlKC8lMkYvZywgJy8nKS5yZXBsYWNlKC9eXFwvKy9nLCAnLycpXHJcbiAgY29uc3Qgbm93ID0gTWF0aC5yb3VuZChuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDApXHJcbiAgY29uc3QgZXhwaXJlID0gZXhwaXJlVGltZSA/IG5vdyArIHBhcnNlSW50KGV4cGlyZVRpbWUudG9TdHJpbmcoKSwgMTApIDogbm93ICsgMTgwMFxyXG4gIGNvbnN0IHNpZ24gPSBNRDUoYCR7YW50aUxlZWNoVG9rZW59JiR7ZXhwaXJlfSYke3VyaX1gKVxyXG4gIGNvbnN0IHVwdCA9IGAke3NpZ24uc3Vic3RyaW5nKDEyLCAyMCl9JHtleHBpcmV9YFxyXG4gIHJldHVybiBgX3VwdD0ke3VwdH1gXHJcbn1cclxuXHJcbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiA9PiB7XHJcbiAgY29uc3QgdXB5dW5PcHRpb25zID0gY3R4LmdldENvbmZpZzxJVXB5dW5Db25maWc+KCdwaWNCZWQudXB5dW4nKVxyXG4gIGlmICghdXB5dW5PcHRpb25zKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhblxcJ3QgZmluZCB1cFl1biBjb25maWcnKVxyXG4gIH1cclxuICB0cnkge1xyXG4gICAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcclxuICAgIGNvbnN0IHBhdGggPSB1cHl1bk9wdGlvbnMucGF0aCB8fCAnJ1xyXG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xyXG4gICAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcclxuICAgICAgICBsZXQgaW1hZ2UgPSBpbWcuYnVmZmVyXHJcbiAgICAgICAgaWYgKCFpbWFnZSAmJiBpbWcuYmFzZTY0SW1hZ2UpIHtcclxuICAgICAgICAgIGltYWdlID0gQnVmZmVyLmZyb20oaW1nLmJhc2U2NEltYWdlLCAnYmFzZTY0JylcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgc2lnbmF0dXJlID0gZ2VuZXJhdGVTaWduYXR1cmUodXB5dW5PcHRpb25zLCBpbWcuZmlsZU5hbWUpXHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHBvc3RPcHRpb25zKHVweXVuT3B0aW9ucywgaW1nLmZpbGVOYW1lLCBzaWduYXR1cmUsIGltYWdlKVxyXG4gICAgICAgIGNvbnN0IHN1ZmZpeCA9IHVweXVuT3B0aW9ucy5vcHRpb25zIHx8ICcnXHJcbiAgICAgICAgY29uc3QgYm9keSA9IGF3YWl0IGN0eC5yZXF1ZXN0KG9wdGlvbnMpXHJcbiAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxyXG4gICAgICAgICAgaW1nLmltZ1VybCA9IGAke3VweXVuT3B0aW9ucy51cmx9LyR7ZW5jb2RlVVJJQ29tcG9uZW50KHBhdGgpfSR7ZW5jb2RlVVJJQ29tcG9uZW50KGltZy5maWxlTmFtZSl9JHtzdWZmaXh9YC5yZXBsYWNlKC8lMkYvZywgJy8nKVxyXG4gICAgICAgICAgaWYgKHVweXVuT3B0aW9ucy5hbnRpTGVlY2hUb2tlbikge1xyXG4gICAgICAgICAgICBjb25zdCB1cHQgPSBnZXRBbnRpTGVlY2hQYXJhbSh1cHl1bk9wdGlvbnMuYW50aUxlZWNoVG9rZW4sIHVweXVuT3B0aW9ucy5leHBpcmVUaW1lLCB1cHl1bk9wdGlvbnMsIGltZy5maWxlTmFtZSlcclxuICAgICAgICAgICAgaW1nLmltZ1VybCA9IGltZy5pbWdVcmwuaW5jbHVkZXMoJz8nKSA/IGAke2ltZy5pbWdVcmx9JiR7dXB0fWAgOiBgJHtpbWcuaW1nVXJsfT8ke3VwdH1gXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVXBsb2FkIGZhaWxlZCcpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY3R4XHJcbiAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcclxuICAgIGlmIChlcnIubWVzc2FnZSA9PT0gJ1VwbG9hZCBmYWlsZWQnKSB7XHJcbiAgICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XHJcbiAgICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcclxuICAgICAgICBib2R5OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdDSEVDS19TRVRUSU5HUycpXHJcbiAgICAgIH0pXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBib2R5ID0gc2FmZVBhcnNlPHsgY29kZTogc3RyaW5nIH0+KGVyci5lcnJvcilcclxuICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcclxuICAgICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxyXG4gICAgICAgIGJvZHk6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRURfUkVBU09OJywge1xyXG4gICAgICAgICAgY29kZTogdHlwZW9mIGJvZHkgPT09ICdvYmplY3QnID8gYm9keS5jb2RlIDogYm9keVxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHRleHQ6ICdodHRwOi8vZG9jcy51cHl1bi5jb20vYXBpL2Vycm5vLydcclxuICAgICAgfSlcclxuICAgIH1cclxuICAgIHRocm93IGVyclxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcclxuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJVXB5dW5Db25maWc+KCdwaWNCZWQudXB5dW4nKSB8fCB7fVxyXG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYnVja2V0JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9CVUNLRVQnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmJ1Y2tldCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdvcGVyYXRvcicsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fT1BFUkFUT1InKSB9LFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHtcclxuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX09QRVJBVE9SJylcclxuICAgICAgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX01FU1NBR0VfT1BFUkFUT1InKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLm9wZXJhdG9yIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3Bhc3N3b3JkJyxcclxuICAgICAgdHlwZTogJ3Bhc3N3b3JkJyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fTUVTU0FHRV9QQVNTV09SRCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fUEFTU1dPUkQnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fTUVTU0FHRV9QQVNTV09SRCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGFzc3dvcmQgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAndXJsJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9VUkwnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fTUVTU0FHRV9VUkwnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnVybCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdvcHRpb25zJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fT1BUSU9OUycpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fT1BUSU9OUycpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9NRVNTQUdFX09QVElPTlMnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLm9wdGlvbnMgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3BhdGgnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9QQVRIJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9QQVRIJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX01FU1NBR0VfUEFUSCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGF0aCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYW50aUxlZWNoVG9rZW4nLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9BTlRJX0xFRUNIX1RPS0VOJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9BTlRJX0xFRUNIX1RPS0VOJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX0FOVElfTEVFQ0hfVE9LRU4nKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmFudGlMZWVjaFRva2VuIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdleHBpcmVUaW1lJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fRVhQSVJFX1RJTUUnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX0VYUElSRV9USU1FJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX0VYUElSRV9USU1FJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5leHBpcmVUaW1lIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH1cclxuICBdXHJcbiAgcmV0dXJuIGNvbmZpZ1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlciAoY3R4OiBJUGljR28pOiB2b2lkIHtcclxuICBjdHguaGVscGVyLnVwbG9hZGVyLnJlZ2lzdGVyKCd1cHl1bicsIHtcclxuICAgIGdldCBuYW1lICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTicpIH0sXHJcbiAgICBoYW5kbGUsXHJcbiAgICBjb25maWdcclxuICB9KVxyXG59XHJcbiIsImltcG9ydCB7IElQaWNHbywgSVBsdWdpbkNvbmZpZywgSVdlYmRhdlBsaXN0Q29uZmlnLCBJT2xkUmVxT3B0aW9uc1dpdGhGdWxsUmVzcG9uc2UgfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcclxuaW1wb3J0IG1pbWUgZnJvbSAnbWltZS10eXBlcydcclxuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJ1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xyXG5cclxuY29uc3QgcG9zdE9wdGlvbnMgPSBhc3luYyAoY3R4OiBJUGljR28sIG9wdGlvbnM6IElXZWJkYXZQbGlzdENvbmZpZywgZmlsZU5hbWU6IHN0cmluZywgaW1hZ2U6IEJ1ZmZlcik6IFByb21pc2U8SU9sZFJlcU9wdGlvbnNXaXRoRnVsbFJlc3BvbnNlPiA9PiB7XHJcbiAgY29uc3QgcGF0aHMgPSBbLi4ub3B0aW9ucy5wYXRoLnJlcGxhY2UoL1xcLyskL2csICcnKS5zcGxpdCgnLycpLCAuLi5wYXRoLmRpcm5hbWUoZmlsZU5hbWUpLnNwbGl0KCcvJyldXHJcbiAgbGV0IGN1cnJlbnRQYXRoID0gJydcclxuICBmb3IgKGNvbnN0IHAgb2YgcGF0aHMpIHtcclxuICAgIGlmIChwKSB7XHJcbiAgICAgIGN1cnJlbnRQYXRoICs9IGAvJHtwfWBcclxuICAgICAgY29uc3QgZGlyb3B0aW9ucyA9IHtcclxuICAgICAgICBtZXRob2Q6ICdNS0NPTCcsXHJcbiAgICAgICAgdXJsOiBgJHtvcHRpb25zLmhvc3R9JHtlbmNvZGVVUkkoY3VycmVudFBhdGgpfWAucmVwbGFjZSgvJTJGL2csICcvJyksXHJcbiAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgQXV0aG9yaXphdGlvbjogYEJhc2ljICR7QnVmZmVyLmZyb20oYCR7b3B0aW9ucy51c2VybmFtZX06JHtvcHRpb25zLnBhc3N3b3JkfWApLnRvU3RyaW5nKCdiYXNlNjQnKX1gXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgYXdhaXQgY3R4LnJlcXVlc3QoZGlyb3B0aW9ucylcclxuICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coZXJyKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiB7XHJcbiAgICBtZXRob2Q6ICdQVVQnLFxyXG4gICAgdXJsOiBgJHtvcHRpb25zLmhvc3R9LyR7b3B0aW9ucy5wYXRoID09PSAnLycgPyAnJyA6IGVuY29kZVVSSShvcHRpb25zLnBhdGgpfSR7ZW5jb2RlVVJJQ29tcG9uZW50KGZpbGVOYW1lKX1gLnJlcGxhY2UoLyUyRi9nLCAnLycpLFxyXG4gICAgaGVhZGVyczoge1xyXG4gICAgICBBdXRob3JpemF0aW9uOiBgQmFzaWMgJHtCdWZmZXIuZnJvbShgJHtvcHRpb25zLnVzZXJuYW1lfToke29wdGlvbnMucGFzc3dvcmR9YCkudG9TdHJpbmcoJ2Jhc2U2NCcpfWAsXHJcbiAgICAgICdDb250ZW50LVR5cGUnOiBtaW1lLmxvb2t1cChmaWxlTmFtZSkgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsXHJcbiAgICAgICdDb250ZW50LUxlbmd0aCc6IGltYWdlLmxlbmd0aFxyXG4gICAgfSxcclxuICAgIGJvZHk6IGltYWdlLFxyXG4gICAgcmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2U6IHRydWVcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvIHwgYm9vbGVhbj4gPT4ge1xyXG4gIGNvbnN0IHdlYmRhdnBsaXN0T3B0aW9ucyA9IGN0eC5nZXRDb25maWc8SVdlYmRhdlBsaXN0Q29uZmlnPigncGljQmVkLndlYmRhdnBsaXN0JylcclxuICBpZiAoIXdlYmRhdnBsaXN0T3B0aW9ucykge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5cXCd0IGZpbmQgd2ViZGF2cGxpc3QgY29uZmlnJylcclxuICB9XHJcbiAgd2ViZGF2cGxpc3RPcHRpb25zLmhvc3QgPSB3ZWJkYXZwbGlzdE9wdGlvbnMuaG9zdC5yZXBsYWNlKC9eaHR0cHM/OlxcL1xcL3xcXC8rJC9nLCAnJylcclxuICB3ZWJkYXZwbGlzdE9wdGlvbnMuaG9zdCA9ICh3ZWJkYXZwbGlzdE9wdGlvbnMuc3NsRW5hYmxlZCA/ICdodHRwczovLycgOiAnaHR0cDovLycpICsgd2ViZGF2cGxpc3RPcHRpb25zLmhvc3RcclxuICB3ZWJkYXZwbGlzdE9wdGlvbnMucGF0aCA9ICh3ZWJkYXZwbGlzdE9wdGlvbnMucGF0aCB8fCAnJykucmVwbGFjZSgvXlxcLyt8XFwvKyQvZywgJycpICsgJy8nXHJcbiAgY29uc3Qgd2VicGF0aCA9ICh3ZWJkYXZwbGlzdE9wdGlvbnMud2VicGF0aCB8fCAnJykucmVwbGFjZSgvXlxcLyt8XFwvKyQvZywgJycpICsgJy8nXHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XHJcbiAgICBjb25zdCBjdXN0b21VcmwgPSB3ZWJkYXZwbGlzdE9wdGlvbnMuY3VzdG9tVXJsXHJcbiAgICBjb25zdCB1cGxvYWRQYXRoID0gd2ViZGF2cGxpc3RPcHRpb25zLnBhdGhcclxuICAgIGZvciAoY29uc3QgaW1nIG9mIGltZ0xpc3QpIHtcclxuICAgICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XHJcbiAgICAgICAgbGV0IGltYWdlID0gaW1nLmJ1ZmZlclxyXG4gICAgICAgIGlmICghaW1hZ2UgJiYgaW1nLmJhc2U2NEltYWdlKSB7XHJcbiAgICAgICAgICBpbWFnZSA9IEJ1ZmZlci5mcm9tKGltZy5iYXNlNjRJbWFnZSwgJ2Jhc2U2NCcpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBhd2FpdCBwb3N0T3B0aW9ucyhjdHgsIHdlYmRhdnBsaXN0T3B0aW9ucywgaW1nLmZpbGVOYW1lLCBpbWFnZSlcclxuICAgICAgICBjb25zdCBib2R5ID0gYXdhaXQgY3R4LnJlcXVlc3Qob3B0aW9ucylcclxuICAgICAgICBpZiAoYm9keS5zdGF0dXNDb2RlID49IDIwMCAmJiBib2R5LnN0YXR1c0NvZGUgPCAzMDApIHtcclxuICAgICAgICAgIGNvbnN0IGltZ1RlbXBQYXRoID0gcGF0aC5qb2luKGN0eC5iYXNlRGlyLCAnaW1nVGVtcCcpXHJcbiAgICAgICAgICBmcy5lbnN1cmVEaXJTeW5jKHBhdGguZGlybmFtZShwYXRoLmpvaW4oaW1nVGVtcFBhdGgsIGltZy5maWxlTmFtZSkpKVxyXG4gICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhwYXRoLmpvaW4oaW1nVGVtcFBhdGgsIGltZy5maWxlTmFtZSksIGltYWdlKVxyXG4gICAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxyXG4gICAgICAgICAgZGVsZXRlIGltZy5idWZmZXJcclxuICAgICAgICAgIGNvbnN0IGJhc2VVcmwgPSBjdXN0b21VcmwgfHwgd2ViZGF2cGxpc3RPcHRpb25zLmhvc3RcclxuICAgICAgICAgIGlmICh3ZWJkYXZwbGlzdE9wdGlvbnMud2VicGF0aCkge1xyXG4gICAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7YmFzZVVybH0vJHt3ZWJwYXRoID09PSAnLycgPyAnJyA6IGVuY29kZVVSSUNvbXBvbmVudCh3ZWJwYXRoKX0ke2VuY29kZVVSSUNvbXBvbmVudChpbWcuZmlsZU5hbWUpfWAucmVwbGFjZSgvJTJGL2csICcvJylcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGltZy5pbWdVcmwgPSBgJHtiYXNlVXJsfS8ke3VwbG9hZFBhdGggPT09ICcvJyA/ICcnIDogZW5jb2RlVVJJQ29tcG9uZW50KHVwbG9hZFBhdGgpfSR7ZW5jb2RlVVJJQ29tcG9uZW50KGltZy5maWxlTmFtZSl9YC5yZXBsYWNlKC8lMkYvZywgJy8nKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaW1nLmdhbGxlcnlQYXRoID0gYGh0dHA6Ly9sb2NhbGhvc3Q6MzY2OTkvJHtlbmNvZGVVUklDb21wb25lbnQoaW1nLmZpbGVOYW1lKX1gXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVXBsb2FkIGZhaWxlZCcpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY3R4XHJcbiAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcclxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XHJcbiAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXHJcbiAgICAgIGJvZHk6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0NIRUNLX1NFVFRJTkdTJylcclxuICAgIH0pXHJcbiAgICB0aHJvdyBlcnJcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XHJcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SVdlYmRhdlBsaXN0Q29uZmlnPigncGljQmVkLndlYmRhdnBsaXN0JykgfHwge31cclxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2hvc3QnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX0hPU1QnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmhvc3QgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnc3NsRW5hYmxlZCcsXHJcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9TU0xFTkFCTEVEJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnNzbEVuYWJsZWQgPz8gZmFsc2UsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX1NTTEVOQUJMRUQnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9TU0xFTkFCTEVEJykgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3VzZXJuYW1lJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9VU0VSTkFNRScpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcudXNlcm5hbWUgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9VU0VSTkFNRScpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1VTRVJOQU1FJykgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3Bhc3N3b3JkJyxcclxuICAgICAgdHlwZTogJ3Bhc3N3b3JkJyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9QQVNTV09SRCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGFzc3dvcmQgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9QQVNTV09SRCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1BBU1NXT1JEJykgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3BhdGgnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX1BBVEgnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhdGggfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfUEFUSCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1BBVEgnKSB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnd2VicGF0aCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfV0VCU0lURV9QQVRIJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wYXRoIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX1dFQlNJVEVfUEFUSCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1dFQlNJVEVfUEFUSCcpIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdjdXN0b21VcmwnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX0NVU1RPTVVSTCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuY3VzdG9tVXJsIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX0NVU1RPTVVSTCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX0NVU1RPTVVSTCcpIH1cclxuICAgIH1cclxuICBdXHJcbiAgcmV0dXJuIGNvbmZpZ1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlciAoY3R4OiBJUGljR28pOiB2b2lkIHtcclxuICBjdHguaGVscGVyLnVwbG9hZGVyLnJlZ2lzdGVyKCd3ZWJkYXZwbGlzdCcsIHtcclxuICAgIGdldCBuYW1lICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVCcpIH0sXHJcbiAgICBoYW5kbGUsXHJcbiAgICBjb25maWdcclxuICB9KVxyXG59XHJcbiIsImltcG9ydCB7IElQaWNHbywgSVBsdWdpbkNvbmZpZywgSUxvY2FsQ29uZmlnIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xyXG5pbXBvcnQgeyBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXHJcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSdcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcclxuXHJcbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiA9PiB7XHJcbiAgY29uc3QgbG9jYWxDb25maWcgPSBjdHguZ2V0Q29uZmlnPElMb2NhbENvbmZpZz4oJ3BpY0JlZC5sb2NhbCcpXHJcbiAgaWYgKCFsb2NhbENvbmZpZykge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW4gbm90IGZpbmQgbG9jYWwgY29uZmlnIScpXHJcbiAgfVxyXG4gIGNvbnN0IHVwbG9hZFBhdGggPSBsb2NhbENvbmZpZy5wYXRoIHx8ICcnXHJcbiAgbGV0IGN1c3RvbVVybCA9IGxvY2FsQ29uZmlnLmN1c3RvbVVybCB8fCAnJ1xyXG4gIGlmIChjdXN0b21VcmwpIHtcclxuICAgIGN1c3RvbVVybCA9IGN1c3RvbVVybC5yZXBsYWNlKC9cXC8kLywgJycpXHJcbiAgfVxyXG4gIGxldCB3ZWJQYXRoID0gbG9jYWxDb25maWcud2ViUGF0aCB8fCAnJ1xyXG4gIGlmICh3ZWJQYXRoKSB7XHJcbiAgICB3ZWJQYXRoID0gd2ViUGF0aC5yZXBsYWNlKC9cXFxcL2csICcvJykucmVwbGFjZSgvXlxcLy8sICcnKS5yZXBsYWNlKC9cXC8kLywgJycpXHJcbiAgfVxyXG4gIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XHJcbiAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xyXG4gICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XHJcbiAgICAgIGxldCBpbWFnZSA9IGltZy5idWZmZXJcclxuICAgICAgaWYgKCFpbWFnZSAmJiBpbWcuYmFzZTY0SW1hZ2UpIHtcclxuICAgICAgICBpbWFnZSA9IEJ1ZmZlci5mcm9tKGltZy5iYXNlNjRJbWFnZSwgJ2Jhc2U2NCcpXHJcbiAgICAgIH1cclxuICAgICAgdHJ5IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgZnMuZW5zdXJlRGlyU3luYyh1cGxvYWRQYXRoKVxyXG4gICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhwYXRoLmpvaW4odXBsb2FkUGF0aCwgaW1nLmZpbGVOYW1lKSwgaW1hZ2UpXHJcbiAgICAgICAgICBmcy5jb3B5RmlsZVN5bmMocGF0aC5qb2luKHVwbG9hZFBhdGgsIGltZy5maWxlTmFtZSksIHBhdGguam9pbihjdHguYmFzZURpciwgJ2ltZ1RlbXAnLCBpbWcuZmlsZU5hbWUpKVxyXG4gICAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxyXG4gICAgICAgICAgZGVsZXRlIGltZy5idWZmZXJcclxuICAgICAgICAgIGlmIChjdXN0b21VcmwpIHtcclxuICAgICAgICAgICAgaWYgKHdlYlBhdGgpIHtcclxuICAgICAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7Y3VzdG9tVXJsfS8ke2VuY29kZVVSSUNvbXBvbmVudCh3ZWJQYXRoKX0vJHtlbmNvZGVVUklDb21wb25lbnQoaW1nLmZpbGVOYW1lKX1gLnJlcGxhY2UoLyUyRi9nLCAnLycpXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgaW1nLmltZ1VybCA9IGAke2N1c3RvbVVybH0vJHtlbmNvZGVVUklDb21wb25lbnQoaW1nLmZpbGVOYW1lKX1gLnJlcGxhY2UoLyUyRi9nLCAnLycpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGltZy5pbWdVcmwgPSBwYXRoLmpvaW4odXBsb2FkUGF0aCwgaW1nLmZpbGVOYW1lKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaW1nLmhhc2ggPSBwYXRoLmpvaW4odXBsb2FkUGF0aCwgaW1nLmZpbGVOYW1lKVxyXG4gICAgICAgICAgaW1nLmdhbGxlcnlQYXRoID0gYGh0dHA6Ly9sb2NhbGhvc3Q6MzY2OTkvJHtlbmNvZGVVUklDb21wb25lbnQoaW1nLmZpbGVOYW1lKX1gXHJcbiAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xyXG4gICAgICAgICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxyXG4gICAgICAgICAgICBib2R5OiAnZmFpbGVkIHRvIHVwbG9hZCBpbWFnZSdcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZhaWxlZCB0byB1cGxvYWQgaW1hZ2UnKVxyXG4gICAgICAgIH1cclxuICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgY3R4LmxvZy5lcnJvcihlKVxyXG4gICAgICAgIHRocm93IGVcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gY3R4XHJcbn1cclxuXHJcbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XHJcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SUxvY2FsQ29uZmlnPigncGljQmVkLmxvY2FsJykgfHwge31cclxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3BhdGgnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MT0NBTF9QQVRIJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MT0NBTF9QQVRIJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wYXRoIHx8ICcnLFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTE9DQUxfTUVTU0FHRV9QQVRIJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdjdXN0b21VcmwnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MT0NBTF9DVVNUT01VUkwnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xPQ0FMX0NVU1RPTVVSTCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuY3VzdG9tVXJsIHx8ICcnLFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTE9DQUxfTUVTU0FHRV9DVVNUT01VUkwnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd3ZWJQYXRoJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MT0NBTF9XRUJQQVRIJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy53ZWJQYXRoIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xPQ0FMX1dFQlBBVEgnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTE9DQUxfTUVTU0FHRV9XRUJQQVRIJykgfVxyXG4gICAgfVxyXG4gIF1cclxuICByZXR1cm4gY29uZmlnXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyIChjdHg6IElQaWNHbyk6IHZvaWQge1xyXG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoJ2xvY2FsJywge1xyXG4gICAgZ2V0IG5hbWUgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xPQ0FMJykgfSxcclxuICAgIGhhbmRsZSxcclxuICAgIGNvbmZpZ1xyXG4gIH0pXHJcbn1cclxuIiwiaW1wb3J0IHsgTm9kZVNTSCwgQ29uZmlnIH0gZnJvbSAnbm9kZS1zc2gtbm8tY3B1LWZlYXR1cmVzJ1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xyXG5pbXBvcnQgeyBJU2Z0cFBsaXN0Q29uZmlnIH0gZnJvbSAnLi4vdHlwZXMnXHJcblxyXG5jbGFzcyBTU0hDbGllbnQge1xyXG4gIHByaXZhdGUgc3RhdGljIF9pbnN0YW5jZTogU1NIQ2xpZW50XHJcbiAgcHJpdmF0ZSBzdGF0aWMgX2NsaWVudDogTm9kZVNTSFxyXG4gIHByaXZhdGUgX2lzQ29ubmVjdGVkID0gZmFsc2VcclxuXHJcbiAgcHVibGljIHN0YXRpYyBnZXQgaW5zdGFuY2UgKCk6IFNTSENsaWVudCB7XHJcbiAgICByZXR1cm4gdGhpcy5faW5zdGFuY2UgfHwgKHRoaXMuX2luc3RhbmNlID0gbmV3IHRoaXMoKSlcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgZ2V0IGNsaWVudCAoKTogTm9kZVNTSCB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2xpZW50IHx8ICh0aGlzLl9jbGllbnQgPSBuZXcgTm9kZVNTSCgpKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaGFuZ2VXaW5TdHlsZVBhdGhUb1VuaXggKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gcGF0aC5yZXBsYWNlKC9cXFxcL2csICcvJylcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjb25uZWN0IChjb25maWc6IElTZnRwUGxpc3RDb25maWcpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGNvbnN0IHsgdXNlcm5hbWUsIHBhc3N3b3JkLCBwcml2YXRlS2V5LCBwYXNzcGhyYXNlIH0gPSBjb25maWdcclxuICAgIGNvbnN0IGxvZ2luSW5mbzogQ29uZmlnID0gcHJpdmF0ZUtleVxyXG4gICAgICA/IHsgdXNlcm5hbWUsIHByaXZhdGVLZXlQYXRoOiBwcml2YXRlS2V5LCBwYXNzcGhyYXNlOiBwYXNzcGhyYXNlIHx8IHVuZGVmaW5lZCB9XHJcbiAgICAgIDogeyB1c2VybmFtZSwgcGFzc3dvcmQgfVxyXG4gICAgdHJ5IHtcclxuICAgICAgYXdhaXQgU1NIQ2xpZW50LmNsaWVudC5jb25uZWN0KHtcclxuICAgICAgICBob3N0OiBjb25maWcuaG9zdCxcclxuICAgICAgICBwb3J0OiBOdW1iZXIoY29uZmlnLnBvcnQpIHx8IDIyLFxyXG4gICAgICAgIC4uLmxvZ2luSW5mb1xyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLl9pc0Nvbm5lY3RlZCA9IHRydWVcclxuICAgICAgcmV0dXJuIHRydWVcclxuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnIpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgdXBsb2FkIChsb2NhbDogc3RyaW5nLCByZW1vdGU6IHN0cmluZywgY29uZmlnOiBJU2Z0cFBsaXN0Q29uZmlnKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBpZiAoIXRoaXMuX2lzQ29ubmVjdGVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignU1NIIOacqui/nuaOpScpXHJcbiAgICB9XHJcbiAgICB0cnkge1xyXG4gICAgICByZW1vdGUgPSB0aGlzLmNoYW5nZVdpblN0eWxlUGF0aFRvVW5peChyZW1vdGUpXHJcbiAgICAgIGF3YWl0IHRoaXMubWtkaXIocGF0aC5kaXJuYW1lKHJlbW90ZSkucmVwbGFjZSgvXlxcLyt8XFwvKyQvZywgJycpLCBjb25maWcpXHJcbiAgICAgIGF3YWl0IFNTSENsaWVudC5jbGllbnQucHV0RmlsZShsb2NhbCwgcmVtb3RlKVxyXG4gICAgICBjb25zdCBmaWxlTW9kZSA9IGNvbmZpZy5maWxlTW9kZSB8fCAnMDY0NCdcclxuICAgICAgaWYgKGZpbGVNb2RlICE9PSAnMDY0NCcpIHtcclxuICAgICAgICBjb25zdCBzY3JpcHQgPSBgY2htb2QgJHtmaWxlTW9kZX0gXCIke3JlbW90ZX1cImBcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmV4ZWMoc2NyaXB0KVxyXG4gICAgICAgIHJldHVybiByZXN1bHRcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIG1rZGlyIChkaXJQYXRoOiBzdHJpbmcsIGNvbmZpZzogSVNmdHBQbGlzdENvbmZpZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKCFTU0hDbGllbnQuY2xpZW50LmlzQ29ubmVjdGVkKCkpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTU0gg5pyq6L+e5o6lJylcclxuICAgIH1cclxuICAgIGNvbnN0IGRpcmVjdG9yeU1vZGUgPSBjb25maWcuZGlyTW9kZSB8fCAnMDc1NSdcclxuICAgIGlmIChkaXJlY3RvcnlNb2RlICE9PSAnMDc1NScpIHtcclxuICAgICAgY29uc3QgZGlycyA9IGRpclBhdGguc3BsaXQoJy8nKVxyXG4gICAgICBsZXQgY3VycmVudFBhdGggPSAnJ1xyXG4gICAgICBmb3IgKGNvbnN0IGRpciBvZiBkaXJzKSB7XHJcbiAgICAgICAgaWYgKGRpcikge1xyXG4gICAgICAgICAgY3VycmVudFBhdGggKz0gYC8ke2Rpcn1gXHJcbiAgICAgICAgICBjb25zdCBzY3JpcHQgPSBgbWtkaXIgXCIke2N1cnJlbnRQYXRofVwiICYmIGNobW9kICR7ZGlyZWN0b3J5TW9kZX0gXCIke2N1cnJlbnRQYXRofVwiYFxyXG4gICAgICAgICAgYXdhaXQgdGhpcy5leGVjKHNjcmlwdClcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IHNjcmlwdCA9IGBta2RpciAtcCBcIiR7ZGlyUGF0aH1cImBcclxuICAgICAgYXdhaXQgdGhpcy5leGVjKHNjcmlwdClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjaG93biAocmVtb3RlOiBzdHJpbmcsIHVzZXI6IHN0cmluZywgZ3JvdXA/OiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIHJlbW90ZSA9IHRoaXMuY2hhbmdlV2luU3R5bGVQYXRoVG9Vbml4KHJlbW90ZSlcclxuICAgIGNvbnN0IFtfdXNlciwgX2dyb3VwXSA9IGdyb3VwID8gW3VzZXIsIGdyb3VwXSA6IHVzZXIuaW5jbHVkZXMoJzonKSA/IHVzZXIuc3BsaXQoJzonKSA6IFt1c2VyLCB1c2VyXVxyXG5cclxuICAgIGNvbnN0IHNjcmlwdCA9IGBjaG93biAke191c2VyfToke19ncm91cH0gXCIke3JlbW90ZX1cImBcclxuICAgIHJldHVybiB0aGlzLmV4ZWMoc2NyaXB0KVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBleGVjIChzY3JpcHQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgY29uc3QgZXhlY1Jlc3VsdCA9IGF3YWl0IFNTSENsaWVudC5jbGllbnQuZXhlY0NvbW1hbmQoc2NyaXB0KVxyXG4gICAgcmV0dXJuIGV4ZWNSZXN1bHQuY29kZSA9PT0gMFxyXG4gIH1cclxuXHJcbiAgcHVibGljIGNsb3NlICgpOiB2b2lkIHtcclxuICAgIFNTSENsaWVudC5jbGllbnQuZGlzcG9zZSgpXHJcbiAgICB0aGlzLl9pc0Nvbm5lY3RlZCA9IGZhbHNlXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBTU0hDbGllbnRcclxuIiwiaW1wb3J0IHsgSVBpY0dvLCBJUGx1Z2luQ29uZmlnLCBJU2Z0cFBsaXN0Q29uZmlnIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xyXG5pbXBvcnQgeyBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXHJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXHJcbmltcG9ydCBTU0hDbGllbnQgZnJvbSAnLi4vLi4vdXRpbHMvc3NoQ2xpZW50J1xyXG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnXHJcblxyXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4gPT4ge1xyXG4gIGNvbnN0IHNmdHBwbGlzdENvbmZpZyA9IGN0eC5nZXRDb25maWc8SVNmdHBQbGlzdENvbmZpZz4oJ3BpY0JlZC5zZnRwcGxpc3QnKVxyXG4gIGlmICghc2Z0cHBsaXN0Q29uZmlnKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbiBub3QgZmluZCBzZnRwcGxpc3QgY29uZmlnIScpXHJcbiAgfVxyXG4gIHNmdHBwbGlzdENvbmZpZy5wb3J0ID0gTnVtYmVyKHNmdHBwbGlzdENvbmZpZy5wb3J0KSB8fCAyMlxyXG4gIHNmdHBwbGlzdENvbmZpZy51cGxvYWRQYXRoID0gKHNmdHBwbGlzdENvbmZpZy51cGxvYWRQYXRoIHx8ICcnKS5yZXBsYWNlKC9eXFwvK3xcXC8rJC9nLCAnJykgKyAnLydcclxuICBjb25zdCB3ZWJQYXRoID0gKHNmdHBwbGlzdENvbmZpZy53ZWJQYXRoIHx8ICcnKS5yZXBsYWNlKC9eXFwvK3xcXC8rJC9nLCAnJykgKyAnLydcclxuICB0cnkge1xyXG4gICAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcclxuICAgIGZvciAoY29uc3QgaW1nIG9mIGltZ0xpc3QpIHtcclxuICAgICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XHJcbiAgICAgICAgbGV0IGltYWdlID0gaW1nLmJ1ZmZlclxyXG4gICAgICAgIGlmICghaW1hZ2UgJiYgaW1nLmJhc2U2NEltYWdlKSB7XHJcbiAgICAgICAgICBpbWFnZSA9IEJ1ZmZlci5mcm9tKGltZy5iYXNlNjRJbWFnZSwgJ2Jhc2U2NCcpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHVwbG9hZFRlbXBQYXRoID0gcGF0aC5qb2luKGN0eC5iYXNlRGlyLCAndXBsb2FkVGVtcCcpXHJcbiAgICAgICAgY29uc3QgaW1nVGVtcFBhdGggPSBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsICdpbWdUZW1wJywgJ3NmdHBwbGlzdCcpXHJcbiAgICAgICAgZnMuZW5zdXJlRGlyU3luYyh1cGxvYWRUZW1wUGF0aClcclxuICAgICAgICBmcy5lbnN1cmVEaXJTeW5jKGltZ1RlbXBQYXRoKVxyXG4gICAgICAgIGNvbnN0IHRlbXBGaWxlUGF0aCA9IHBhdGguam9pbih1cGxvYWRUZW1wUGF0aCwgaW1nLmZpbGVOYW1lKVxyXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmModGVtcEZpbGVQYXRoLCBpbWFnZSlcclxuICAgICAgICBjb25zdCBjbGllbnQgPSBTU0hDbGllbnQuaW5zdGFuY2VcclxuICAgICAgICBhd2FpdCBjbGllbnQuY29ubmVjdChzZnRwcGxpc3RDb25maWcpXHJcbiAgICAgICAgY29uc3QgcmVtb3RlUGF0aCA9IHBhdGguam9pbihgLyR7c2Z0cHBsaXN0Q29uZmlnLnVwbG9hZFBhdGh9YC5yZXBsYWNlKC9cXC9cXC8rL2csICcvJyksIGltZy5maWxlTmFtZSlcclxuICAgICAgICBhd2FpdCBjbGllbnQudXBsb2FkKHRlbXBGaWxlUGF0aCwgcmVtb3RlUGF0aCwgc2Z0cHBsaXN0Q29uZmlnKVxyXG4gICAgICAgIHNmdHBwbGlzdENvbmZpZy5maWxlVXNlciAmJiBhd2FpdCBjbGllbnQuY2hvd24ocmVtb3RlUGF0aCwgc2Z0cHBsaXN0Q29uZmlnLmZpbGVVc2VyKVxyXG4gICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcclxuICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxyXG4gICAgICAgIGNvbnN0IGJhc2VVcmwgPSBzZnRwcGxpc3RDb25maWcuY3VzdG9tVXJsIHx8IHNmdHBwbGlzdENvbmZpZy5ob3N0XHJcbiAgICAgICAgaWYgKHNmdHBwbGlzdENvbmZpZy53ZWJQYXRoKSB7XHJcbiAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7YmFzZVVybH0vJHt3ZWJQYXRoID09PSAnLycgPyAnJyA6IGVuY29kZVVSSUNvbXBvbmVudCh3ZWJQYXRoKX0ke2VuY29kZVVSSUNvbXBvbmVudChpbWcuZmlsZU5hbWUpfWAucmVwbGFjZSgvJTJGL2csICcvJylcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaW1nLmltZ1VybCA9IGAke2Jhc2VVcmx9LyR7c2Z0cHBsaXN0Q29uZmlnLnVwbG9hZFBhdGggPT09ICcvJyA/ICcnIDogZW5jb2RlVVJJQ29tcG9uZW50KHNmdHBwbGlzdENvbmZpZy51cGxvYWRQYXRoKX0ke2VuY29kZVVSSUNvbXBvbmVudChpbWcuZmlsZU5hbWUpfWAucmVwbGFjZSgvJTJGL2csICcvJylcclxuICAgICAgICB9XHJcbiAgICAgICAgZnMubW92ZVN5bmModGVtcEZpbGVQYXRoLCBwYXRoLmpvaW4oaW1nVGVtcFBhdGgsIGltZy5maWxlTmFtZSkpXHJcbiAgICAgICAgaW1nLmdhbGxlcnlQYXRoID0gYGh0dHA6Ly9sb2NhbGhvc3Q6MzY2OTkvc2Z0cHBsaXN0LyR7ZW5jb2RlVVJJQ29tcG9uZW50KGltZy5maWxlTmFtZSl9YFxyXG4gICAgICAgIGNsaWVudC5jbG9zZSgpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBjdHhcclxuICB9IGNhdGNoIChlcnI6IGFueSkge1xyXG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcclxuICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcclxuICAgICAgYm9keTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQ0hFQ0tfU0VUVElOR1MnKVxyXG4gICAgfSlcclxuICAgIHRocm93IGVyclxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcclxuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJU2Z0cFBsaXN0Q29uZmlnPigncGljQmVkLnNmdHBwbGlzdCcpIHx8IHt9XHJcbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdob3N0JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfSE9TVCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHtcclxuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0hPU1QnKVxyXG4gICAgICB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmhvc3QgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAncG9ydCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHtcclxuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1BPUlQnKVxyXG4gICAgICB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9QT1JUJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wb3J0IHx8IDIyLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd1c2VybmFtZScsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX1VTRVJOQU1FJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy51c2VybmFtZSB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwYXNzd29yZCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX1BBU1NXT1JEJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wYXNzd29yZCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAncHJpdmF0ZUtleScsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHtcclxuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1BSSVZBVEVLRVknKVxyXG4gICAgICB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9QUklWQVRFS0VZJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wcml2YXRlS2V5IHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwYXNzcGhyYXNlJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkge1xyXG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUFJJVkFURUtFWV9QQVNTUEhSQVNFJylcclxuICAgICAgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfUFJJVkFURUtFWV9QQVNTUEhSQVNFJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wYXNzcGhyYXNlIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd1cGxvYWRQYXRoJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkge1xyXG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfVVBMT0FEUEFUSCcpXHJcbiAgICAgIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX1VQTE9BRFBBVEgnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnVwbG9hZFBhdGggfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2N1c3RvbVVybCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHtcclxuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0NVU1RPTVVSTCcpXHJcbiAgICAgIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX0NVU1RPTVVSTCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuY3VzdG9tVXJsIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd3ZWJQYXRoJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkge1xyXG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfV0VCU0lURV9QQVRIJylcclxuICAgICAgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfV0VCU0lURV9QQVRIJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy53ZWJQYXRoIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdmaWxlVXNlcicsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHtcclxuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0ZJTEVfVVNFUicpXHJcbiAgICAgIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX0ZJTEVfVVNFUicpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuZmlsZVVzZXIgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2ZpbGVNb2RlJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkge1xyXG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRklMRV9NT0RFJylcclxuICAgICAgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfRklMRV9NT0RFJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5maWxlTW9kZSB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnZGlyTW9kZScsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHtcclxuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0RJUl9NT0RFJylcclxuICAgICAgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfRElSX01PREUnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmRpck1vZGUgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfVxyXG4gIF1cclxuICByZXR1cm4gY29uZmlnXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyIChjdHg6IElQaWNHbyk6IHZvaWQge1xyXG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoJ3NmdHBwbGlzdCcsIHtcclxuICAgIGdldCBuYW1lICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1QnKSB9LFxyXG4gICAgaGFuZGxlLFxyXG4gICAgY29uZmlnXHJcbiAgfSlcclxufVxyXG4iLCJpbXBvcnQgeyBJUGljR28sIElQaWNHb1BsdWdpbiB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5pbXBvcnQgU01NU1VwbG9hZGVyIGZyb20gJy4vc21tcydcclxuaW1wb3J0IHRjWXVuVXBsb2FkZXIgZnJvbSAnLi90Y3l1bidcclxuaW1wb3J0IGdpdGh1YlVwbG9hZGVyIGZyb20gJy4vZ2l0aHViJ1xyXG5pbXBvcnQgcWluaXVVcGxvYWRlciBmcm9tICcuL3Fpbml1J1xyXG5pbXBvcnQgaW1ndXJVcGxvYWRlciBmcm9tICcuL2ltZ3VyJ1xyXG5pbXBvcnQgYWxpWXVuVXBsb2FkZXIgZnJvbSAnLi9hbGl5dW4nXHJcbmltcG9ydCB1cFl1blVwbG9hZGVyIGZyb20gJy4vdXB5dW4nXHJcbmltcG9ydCB3ZWJkYXZwbGlzdFVwbG9hZGVyIGZyb20gJy4vd2ViZGF2J1xyXG5pbXBvcnQgbG9jYWxVcGxvYWRlciBmcm9tICcuL2xvY2FsJ1xyXG5pbXBvcnQgc2Z0cFVwbG9hZGVyIGZyb20gJy4vc2Z0cCdcclxuXHJcbmNvbnN0IGJ1aWxkSW5VcGxvYWRlcnM6IElQaWNHb1BsdWdpbiA9ICgpID0+IHtcclxuICByZXR1cm4ge1xyXG4gICAgcmVnaXN0ZXIgKGN0eDogSVBpY0dvKSB7XHJcbiAgICAgIGFsaVl1blVwbG9hZGVyKGN0eClcclxuICAgICAgdGNZdW5VcGxvYWRlcihjdHgpXHJcbiAgICAgIFNNTVNVcGxvYWRlcihjdHgpXHJcbiAgICAgIGdpdGh1YlVwbG9hZGVyKGN0eClcclxuICAgICAgcWluaXVVcGxvYWRlcihjdHgpXHJcbiAgICAgIGltZ3VyVXBsb2FkZXIoY3R4KVxyXG4gICAgICB1cFl1blVwbG9hZGVyKGN0eClcclxuICAgICAgd2ViZGF2cGxpc3RVcGxvYWRlcihjdHgpXHJcbiAgICAgIGxvY2FsVXBsb2FkZXIoY3R4KVxyXG4gICAgICBzZnRwVXBsb2FkZXIoY3R4KVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgYnVpbGRJblVwbG9hZGVyc1xyXG4iLCJpbXBvcnQge1xyXG4gIGlzVXJsLFxyXG4gIGdldEltYWdlU2l6ZSxcclxuICBnZXRGU0ZpbGUsXHJcbiAgZ2V0VVJMRmlsZVxyXG59IGZyb20gJy4uLy4uL3V0aWxzL2NvbW1vbidcclxuaW1wb3J0IHsgSVBpY0dvLCBJUGF0aFRyYW5zZm9ybWVkSW1nSW5mbywgSUltZ0luZm8sIElJbWdTaXplIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCBkYXlqcyBmcm9tICdkYXlqcydcclxuXHJcbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiA9PiB7XHJcbiAgY29uc3QgcmVzdWx0czogSUltZ0luZm9bXSA9IGN0eC5vdXRwdXRcclxuICBhd2FpdCBQcm9taXNlLmFsbChjdHguaW5wdXQubWFwKGFzeW5jIChpdGVtOiBzdHJpbmcgfCBCdWZmZXIsIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgIGxldCBpbmZvOiBJUGF0aFRyYW5zZm9ybWVkSW1nSW5mb1xyXG4gICAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihpdGVtKSkge1xyXG4gICAgICBpbmZvID0ge1xyXG4gICAgICAgIHN1Y2Nlc3M6IHRydWUsXHJcbiAgICAgICAgYnVmZmVyOiBpdGVtLFxyXG4gICAgICAgIGZpbGVOYW1lOiAnJyxcclxuICAgICAgICBleHRuYW1lOiAnJ1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKGlzVXJsKGl0ZW0pKSB7XHJcbiAgICAgIGluZm8gPSBhd2FpdCBnZXRVUkxGaWxlKGl0ZW0sIGN0eClcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGluZm8gPSBhd2FpdCBnZXRGU0ZpbGUoaXRlbSlcclxuICAgIH1cclxuICAgIGlmIChpbmZvLnN1Y2Nlc3MgJiYgaW5mby5idWZmZXIpIHtcclxuICAgICAgY29uc3QgaW1nU2l6ZSA9IGdldEltZ1NpemUoY3R4LCBpbmZvLmJ1ZmZlciwgaXRlbSlcclxuICAgICAgY29uc3QgZXh0bmFtZSA9IGluZm8uZXh0bmFtZSB8fCBpbWdTaXplLmV4dG5hbWUgfHwgJy5wbmcnXHJcbiAgICAgIHJlc3VsdHNbaW5kZXhdID0ge1xyXG4gICAgICAgIGJ1ZmZlcjogaW5mby5idWZmZXIsXHJcbiAgICAgICAgZmlsZU5hbWU6IGluZm8uZmlsZU5hbWUgfHwgYCR7ZGF5anMoKS5mb3JtYXQoJ1lZWVlNTURESEhtbXNzJyl9JHtleHRuYW1lfX1gLFxyXG4gICAgICAgIHdpZHRoOiBpbWdTaXplLndpZHRoLFxyXG4gICAgICAgIGhlaWdodDogaW1nU2l6ZS5oZWlnaHQsXHJcbiAgICAgICAgZXh0bmFtZTogaW5mby5leHRuYW1lXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGN0eC5sb2cuZXJyb3IoaW5mby5yZWFzb24pXHJcbiAgICB9XHJcbiAgfSkpXHJcbiAgLy8gcmVtb3ZlIGVtcHR5IGl0ZW1cclxuICBjdHgub3V0cHV0ID0gcmVzdWx0cy5maWx0ZXIoaXRlbSA9PiBpdGVtKVxyXG4gIHJldHVybiBjdHhcclxufVxyXG5cclxuY29uc3QgZ2V0SW1nU2l6ZSA9IChjdHg6IElQaWNHbywgZmlsZTogQnVmZmVyLCBwYXRoOiBzdHJpbmcgfCBCdWZmZXIpOiBJSW1nU2l6ZSA9PiB7XHJcbiAgY29uc3QgaW1hZ2VTaXplID0gZ2V0SW1hZ2VTaXplKGZpbGUpXHJcbiAgaWYgKCFpbWFnZVNpemUucmVhbCkge1xyXG4gICAgaWYgKHR5cGVvZiBwYXRoID09PSAnc3RyaW5nJykge1xyXG4gICAgICBjdHgubG9nLndhcm4oYGNhbid0IGdldCAke3BhdGh9J3MgaW1hZ2Ugc2l6ZWApXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjdHgubG9nLndhcm4oJ2NhblxcJ3QgZ2V0IGltYWdlIHNpemUnKVxyXG4gICAgfVxyXG4gICAgY3R4LmxvZy53YXJuKCdmYWxsYmFjayB0byAyMDAgKiAyMDAnKVxyXG4gIH1cclxuICByZXR1cm4gaW1hZ2VTaXplXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICBoYW5kbGVcclxufVxyXG4iLCJpbXBvcnQgeyBJUGljR28gfSBmcm9tICcuLi8uLi90eXBlcydcclxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcclxuICBjdHgub3V0cHV0LnB1c2goLi4uY3R4LmlucHV0KVxyXG4gIHJldHVybiBjdHhcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIGhhbmRsZVxyXG59XHJcbiIsImltcG9ydCBmcyBmcm9tICdmcy1leHRyYSdcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcclxuaW1wb3J0IHJlc29sdmUgZnJvbSAncmVzb2x2ZSdcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB7IElQaWNHbywgSVBpY0dvUGx1Z2luLCBJUGx1Z2luTG9hZGVyLCBJUGljR29QbHVnaW5JbnRlcmZhY2UgfSBmcm9tICcuLi90eXBlcy9pbmRleCdcclxuaW1wb3J0IHsgc2V0Q3VycmVudFBsdWdpbk5hbWUgfSBmcm9tICcuL0xpZmVjeWNsZVBsdWdpbnMnXHJcblxyXG4vKipcclxuICogTG9jYWwgcGx1Z2luIGxvYWRlciwgZmlsZSBzeXN0ZW0gaXMgcmVxdWlyZWRcclxuICovXHJcbmV4cG9ydCBjbGFzcyBQbHVnaW5Mb2FkZXIgaW1wbGVtZW50cyBJUGx1Z2luTG9hZGVyIHtcclxuICBwcml2YXRlIHJlYWRvbmx5IGN0eDogSVBpY0dvXHJcbiAgcHJpdmF0ZSBsaXN0OiBzdHJpbmdbXSA9IFtdXHJcbiAgcHJpdmF0ZSByZWFkb25seSBmdWxsTGlzdDogU2V0PHN0cmluZz4gPSBuZXcgU2V0KClcclxuICBwcml2YXRlIHJlYWRvbmx5IHBsdWdpbk1hcDogTWFwPHN0cmluZywgSVBpY0dvUGx1Z2luSW50ZXJmYWNlPiA9IG5ldyBNYXAoKVxyXG4gIGNvbnN0cnVjdG9yIChjdHg6IElQaWNHbykge1xyXG4gICAgdGhpcy5jdHggPSBjdHhcclxuICAgIHRoaXMuaW5pdCgpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXQgKCk6IHZvaWQge1xyXG4gICAgY29uc3QgcGFja2FnZVBhdGggPSBwYXRoLmpvaW4odGhpcy5jdHguYmFzZURpciwgJ3BhY2thZ2UuanNvbicpXHJcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMocGFja2FnZVBhdGgpKSB7XHJcbiAgICAgIGNvbnN0IHBrZyA9IHtcclxuICAgICAgICBuYW1lOiAncGljZ28tcGx1Z2lucycsXHJcbiAgICAgICAgZGVzY3JpcHRpb246ICdwaWNnby1wbHVnaW5zJyxcclxuICAgICAgICByZXBvc2l0b3J5OiAnaHR0cHM6Ly9naXRodWIuY29tL1BpY0dvL1BpY0dvLUNvcmUnLFxyXG4gICAgICAgIGxpY2Vuc2U6ICdNSVQnXHJcbiAgICAgIH1cclxuICAgICAgZnMud3JpdGVGaWxlU3luYyhwYWNrYWdlUGF0aCwgSlNPTi5zdHJpbmdpZnkocGtnKSwgJ3V0ZjgnKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gZ2V0IHBsdWdpbiBlbnRyeVxyXG4gIHByaXZhdGUgcmVzb2x2ZVBsdWdpbiAoY3R4OiBJUGljR28sIG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICB0cnkge1xyXG4gICAgICByZXR1cm4gcmVzb2x2ZS5zeW5jKG5hbWUsIHsgYmFzZWRpcjogY3R4LmJhc2VEaXIgfSlcclxuICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICByZXR1cm4gcGF0aC5qb2luKGN0eC5iYXNlRGlyLCAnbm9kZV9tb2R1bGVzJywgbmFtZSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGxvYWQgYWxsIHRoaXJkIHBhcnR5IHBsdWdpblxyXG4gIGxvYWQgKCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgcGFja2FnZVBhdGggPSBwYXRoLmpvaW4odGhpcy5jdHguYmFzZURpciwgJ3BhY2thZ2UuanNvbicpXHJcbiAgICBjb25zdCBwbHVnaW5EaXIgPSBwYXRoLmpvaW4odGhpcy5jdHguYmFzZURpciwgJ25vZGVfbW9kdWxlcy8nKVxyXG4gICAgLy8gVGhhbmtzIHRvIGhleG8gLT4gaHR0cHM6Ly9naXRodWIuY29tL2hleG9qcy9oZXhvL2Jsb2IvbWFzdGVyL2xpYi9oZXhvL2xvYWRfcGx1Z2lucy5qc1xyXG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKHBsdWdpbkRpcikpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICB9XHJcbiAgICBjb25zdCBqc29uID0gZnMucmVhZEpTT05TeW5jKHBhY2thZ2VQYXRoKVxyXG4gICAgY29uc3QgZGVwcyA9IE9iamVjdC5rZXlzKGpzb24uZGVwZW5kZW5jaWVzIHx8IHt9KVxyXG4gICAgY29uc3QgZGV2RGVwcyA9IE9iamVjdC5rZXlzKGpzb24uZGV2RGVwZW5kZW5jaWVzIHx8IHt9KVxyXG4gICAgY29uc3QgbW9kdWxlcyA9IGRlcHMuY29uY2F0KGRldkRlcHMpLmZpbHRlcigobmFtZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgIGlmICghL15waWNnby1wbHVnaW4tfF5AW14vXStcXC9waWNnby1wbHVnaW4tLy50ZXN0KG5hbWUpKSByZXR1cm4gZmFsc2VcclxuICAgICAgY29uc3QgcGF0aCA9IHRoaXMucmVzb2x2ZVBsdWdpbih0aGlzLmN0eCwgbmFtZSlcclxuICAgICAgcmV0dXJuIGZzLmV4aXN0c1N5bmMocGF0aClcclxuICAgIH0pXHJcbiAgICBmb3IgKGNvbnN0IG1vZHVsZSBvZiBtb2R1bGVzKSB7XHJcbiAgICAgIHRoaXMucmVnaXN0ZXJQbHVnaW4obW9kdWxlKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWVcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyUGx1Z2luIChuYW1lOiBzdHJpbmcsIHBsdWdpbj86IElQaWNHb1BsdWdpbik6IHZvaWQge1xyXG4gICAgaWYgKCFuYW1lIHx8IHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xyXG4gICAgICB0aGlzLmN0eC5sb2cud2FybignUGxlYXNlIHByb3ZpZGUgdmFsaWQgcGx1Z2luJylcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICB0aGlzLmZ1bGxMaXN0LmFkZChuYW1lKVxyXG4gICAgdHJ5IHtcclxuICAgICAgLy8gcmVnaXN0ZXIgbG9jYWwgcGx1Z2luXHJcbiAgICAgIGlmICghcGx1Z2luKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3R4LmdldENvbmZpZyhgcGljZ29QbHVnaW5zLiR7bmFtZX1gKSA9PT0gdHJ1ZSB8fCAodGhpcy5jdHguZ2V0Q29uZmlnKGBwaWNnb1BsdWdpbnMuJHtuYW1lfWApID09PSB1bmRlZmluZWQpKSB7XHJcbiAgICAgICAgICB0aGlzLmxpc3QucHVzaChuYW1lKVxyXG4gICAgICAgICAgc2V0Q3VycmVudFBsdWdpbk5hbWUobmFtZSlcclxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXHJcbiAgICAgICAgICB0aGlzLmdldFBsdWdpbihuYW1lKSEucmVnaXN0ZXIodGhpcy5jdHgpXHJcbiAgICAgICAgICBjb25zdCBwbHVnaW4gPSBgcGljZ29QbHVnaW5zWyR7bmFtZX1dYFxyXG4gICAgICAgICAgdGhpcy5jdHguc2F2ZUNvbmZpZyhcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIFtwbHVnaW5dOiB0cnVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIClcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gcmVnaXN0ZXIgcHJvdmlkZWQgcGx1Z2luXHJcbiAgICAgICAgLy8gJiYgd29uJ3Qgd3JpdGUgY29uZmlnIHRvIGZpbGVzXHJcbiAgICAgICAgdGhpcy5saXN0LnB1c2gobmFtZSlcclxuICAgICAgICBzZXRDdXJyZW50UGx1Z2luTmFtZShuYW1lKVxyXG4gICAgICAgIGNvbnN0IHBsdWdpbkludGVyZmFjZSA9IHBsdWdpbih0aGlzLmN0eClcclxuICAgICAgICB0aGlzLnBsdWdpbk1hcC5zZXQobmFtZSwgcGx1Z2luSW50ZXJmYWNlKVxyXG4gICAgICAgIHBsdWdpbkludGVyZmFjZS5yZWdpc3Rlcih0aGlzLmN0eClcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICB0aGlzLnBsdWdpbk1hcC5kZWxldGUobmFtZSlcclxuICAgICAgdGhpcy5saXN0ID0gdGhpcy5saXN0LmZpbHRlcigoaXRlbTogc3RyaW5nKSA9PiBpdGVtICE9PSBuYW1lKVxyXG4gICAgICB0aGlzLmZ1bGxMaXN0LmRlbGV0ZShuYW1lKVxyXG4gICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoZSBhcyBFcnJvcilcclxuICAgICAgdGhpcy5jdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xyXG4gICAgICAgIHRpdGxlOiBgUGx1Z2luICR7bmFtZX0gTG9hZCBFcnJvcmAsXHJcbiAgICAgICAgYm9keTogZVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdW5yZWdpc3RlclBsdWdpbiAobmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmxpc3QgPSB0aGlzLmxpc3QuZmlsdGVyKChpdGVtOiBzdHJpbmcpID0+IGl0ZW0gIT09IG5hbWUpXHJcbiAgICB0aGlzLmZ1bGxMaXN0LmRlbGV0ZShuYW1lKVxyXG4gICAgdGhpcy5wbHVnaW5NYXAuZGVsZXRlKG5hbWUpXHJcbiAgICBzZXRDdXJyZW50UGx1Z2luTmFtZShuYW1lKVxyXG4gICAgdGhpcy5jdHguaGVscGVyLnVwbG9hZGVyLnVucmVnaXN0ZXIobmFtZSlcclxuICAgIHRoaXMuY3R4LmhlbHBlci50cmFuc2Zvcm1lci51bnJlZ2lzdGVyKG5hbWUpXHJcbiAgICB0aGlzLmN0eC5oZWxwZXIuYmVmb3JlVHJhbnNmb3JtUGx1Z2lucy51bnJlZ2lzdGVyKG5hbWUpXHJcbiAgICB0aGlzLmN0eC5oZWxwZXIuYmVmb3JlVXBsb2FkUGx1Z2lucy51bnJlZ2lzdGVyKG5hbWUpXHJcbiAgICB0aGlzLmN0eC5oZWxwZXIuYWZ0ZXJVcGxvYWRQbHVnaW5zLnVucmVnaXN0ZXIobmFtZSlcclxuICAgIHRoaXMuY3R4LmNtZC51bnJlZ2lzdGVyKG5hbWUpXHJcbiAgICB0aGlzLmN0eC5yZW1vdmVDb25maWcoJ3BpY2dvUGx1Z2lucycsIG5hbWUpXHJcbiAgfVxyXG5cclxuICAvLyBnZXQgcGx1Z2luIGJ5IG5hbWVcclxuICBnZXRQbHVnaW4gKG5hbWU6IHN0cmluZyk6IElQaWNHb1BsdWdpbkludGVyZmFjZSB8IHVuZGVmaW5lZCB7XHJcbiAgICBpZiAodGhpcy5wbHVnaW5NYXAuaGFzKG5hbWUpKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnBsdWdpbk1hcC5nZXQobmFtZSlcclxuICAgIH1cclxuICAgIGNvbnN0IHBsdWdpbkRpciA9IHBhdGguam9pbih0aGlzLmN0eC5iYXNlRGlyLCAnbm9kZV9tb2R1bGVzLycpXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXZhci1yZXF1aXJlc1xyXG4gICAgY29uc3QgcGx1Z2luID0gcmVxdWlyZShwbHVnaW5EaXIgKyBuYW1lKSh0aGlzLmN0eClcclxuICAgIHRoaXMucGx1Z2luTWFwLnNldChuYW1lLCBwbHVnaW4pXHJcbiAgICByZXR1cm4gcGx1Z2luXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgdGhlIGxpc3Qgb2YgZW5hYmxlZCBwbHVnaW5zXHJcbiAgICovXHJcbiAgZ2V0TGlzdCAoKTogc3RyaW5nW10ge1xyXG4gICAgcmV0dXJuIHRoaXMubGlzdFxyXG4gIH1cclxuXHJcbiAgaGFzUGx1Z2luIChuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmZ1bGxMaXN0LmhhcyhuYW1lKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHRoZSBmdWxsIGxpc3Qgb2YgcGx1Z2lucywgd2hldGhlciBpdCBpcyBlbmFibGVkIG9yIG5vdFxyXG4gICAqL1xyXG4gIGdldEZ1bGxMaXN0ICgpOiBzdHJpbmdbXSB7XHJcbiAgICByZXR1cm4gWy4uLnRoaXMuZnVsbExpc3RdXHJcbiAgfVxyXG59XHJcbmV4cG9ydCBkZWZhdWx0IFBsdWdpbkxvYWRlclxyXG4iLCJleHBvcnQgY29uc3QgQ0xJUEJPQVJEX0lNQUdFX0ZPTERFUiA9ICdwaWNsaXN0LWNsaXBib2FyZC1pbWFnZXMnXHJcbiIsImltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXHJcbmltcG9ydCB7IHNwYXduIH0gZnJvbSAnY2hpbGRfcHJvY2VzcydcclxuaW1wb3J0IGRheWpzIGZyb20gJ2RheWpzJ1xyXG5pbXBvcnQgb3MgZnJvbSAnb3MnXHJcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSdcclxuaW1wb3J0IGlzV3NsIGZyb20gJ2lzLXdzbCdcclxuaW1wb3J0IHsgSVBpY0dvLCBJQ2xpcGJvYXJkSW1hZ2UgfSBmcm9tICcuLi90eXBlcydcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4vZW51bSdcclxuaW1wb3J0IG1hY0NsaXBib2FyZFNjcmlwdCBmcm9tICcuL2NsaXBib2FyZC9tYWMuYXBwbGVzY3JpcHQnXHJcbmltcG9ydCB3aW5kb3dzQ2xpcGJvYXJkU2NyaXB0IGZyb20gJy4vY2xpcGJvYXJkL3dpbmRvd3MucHMxJ1xyXG5pbXBvcnQgd2luZG93czEwQ2xpcGJvYXJkU2NyaXB0IGZyb20gJy4vY2xpcGJvYXJkL3dpbmRvd3MxMC5wczEnXHJcbmltcG9ydCBsaW51eENsaXBib2FyZFNjcmlwdCBmcm9tICcuL2NsaXBib2FyZC9saW51eC5zaCdcclxuaW1wb3J0IHdzbENsaXBib2FyZFNjcmlwdCBmcm9tICcuL2NsaXBib2FyZC93c2wuc2gnXHJcbmltcG9ydCB7IENMSVBCT0FSRF9JTUFHRV9GT0xERVIgfSBmcm9tICcuL3N0YXRpYydcclxuXHJcbmV4cG9ydCB0eXBlIFBsYXRmb3JtID0gJ2RhcndpbicgfCAnd2luMzInIHwgJ3dpbjEwJyB8ICdsaW51eCcgfCAnd3NsJ1xyXG5cclxuY29uc3QgZ2V0Q3VycmVudFBsYXRmb3JtID0gKCk6IFBsYXRmb3JtID0+IHtcclxuICBjb25zdCBwbGF0Zm9ybSA9IHByb2Nlc3MucGxhdGZvcm1cclxuICBpZiAoaXNXc2wpIHtcclxuICAgIHJldHVybiAnd3NsJ1xyXG4gIH1cclxuICBpZiAocGxhdGZvcm0gPT09ICd3aW4zMicpIHtcclxuICAgIGNvbnN0IGN1cnJlbnRPUyA9IG9zLnJlbGVhc2UoKS5zcGxpdCgnLicpWzBdXHJcbiAgICBpZiAoY3VycmVudE9TID09PSAnMTAnKSB7XHJcbiAgICAgIHJldHVybiAnd2luMTAnXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gJ3dpbjMyJ1xyXG4gICAgfVxyXG4gIH0gZWxzZSBpZiAocGxhdGZvcm0gPT09ICdkYXJ3aW4nKSB7XHJcbiAgICByZXR1cm4gJ2RhcndpbidcclxuICB9IGVsc2Uge1xyXG4gICAgcmV0dXJuICdsaW51eCdcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IHBsYXRmb3JtMlNjcmlwdENvbnRlbnQ6IHtcclxuICBba2V5IGluIFBsYXRmb3JtXTogc3RyaW5nXHJcbn0gPSB7XHJcbiAgZGFyd2luOiBtYWNDbGlwYm9hcmRTY3JpcHQsXHJcbiAgd2luMzI6IHdpbmRvd3NDbGlwYm9hcmRTY3JpcHQsXHJcbiAgd2luMTA6IHdpbmRvd3MxMENsaXBib2FyZFNjcmlwdCxcclxuICBsaW51eDogbGludXhDbGlwYm9hcmRTY3JpcHQsXHJcbiAgd3NsOiB3c2xDbGlwYm9hcmRTY3JpcHRcclxufVxyXG4vKipcclxuICogcG93ZXJzaGVsbCB3aWxsIHJlcG9ydCBlcnJvciBpZiBmaWxlIGRvZXMgbm90IGhhdmUgYSAnLnBzMScgZXh0ZW5zaW9uLFxyXG4gKiBzbyB3ZSBzaG91bGQga2VlcCB0aGUgZXh0ZW5zaW9uIG5hbWUgY29uc2lzdGVudCB3aXRoIGNvcnJlc3BvbmRpbmcgc2hlbGxcclxuICovXHJcbmNvbnN0IHBsYXRmb3JtMlNjcmlwdEZpbGVuYW1lOiB7XHJcbiAgW2tleSBpbiBQbGF0Zm9ybV06IHN0cmluZ1xyXG59ID0ge1xyXG4gIGRhcndpbjogJ21hYy5hcHBsZXNjcmlwdCcsXHJcbiAgd2luMzI6ICd3aW5kb3dzLnBzMScsXHJcbiAgd2luMTA6ICd3aW5kb3dzMTAucHMxJyxcclxuICBsaW51eDogJ2xpbnV4LnNoJyxcclxuICB3c2w6ICd3c2wuc2gnXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZUltYWdlRm9sZGVyIChjdHg6IElQaWNHbyk6IHZvaWQge1xyXG4gIGNvbnN0IGltYWdlUGF0aCA9IHBhdGguam9pbihjdHguYmFzZURpciwgQ0xJUEJPQVJEX0lNQUdFX0ZPTERFUilcclxuICBpZiAoIWZzLmV4aXN0c1N5bmMoaW1hZ2VQYXRoKSkge1xyXG4gICAgZnMubWtkaXJTeW5jKGltYWdlUGF0aClcclxuICB9XHJcbn1cclxuXHJcbi8vIFRoYW5rcyB0byB2cy1waWNnbzogaHR0cHM6Ly9naXRodWIuY29tL1NwYWRlcy1TL3ZzLXBpY2dvL2Jsb2IvbWFzdGVyL3NyYy9leHRlbnNpb24udHNcclxuY29uc3QgZ2V0Q2xpcGJvYXJkSW1hZ2UgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElDbGlwYm9hcmRJbWFnZT4gPT4ge1xyXG4gIGNyZWF0ZUltYWdlRm9sZGVyKGN0eClcclxuICAvLyBhZGQgYW4gY2xpcGJvYXJkIGltYWdlIGZvbGRlciB0byBjb250cm9sIHRoZSBpbWFnZSBjYWNoZSBmaWxlXHJcbiAgY29uc3QgaW1hZ2VQYXRoID0gcGF0aC5qb2luKGN0eC5iYXNlRGlyLCBDTElQQk9BUkRfSU1BR0VfRk9MREVSLCBgJHtkYXlqcygpLmZvcm1hdCgnWVlZWU1NRERISG1tc3MnKX0ucG5nYClcclxuICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2U8SUNsaXBib2FyZEltYWdlPigocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pOiB2b2lkID0+IHtcclxuICAgIGNvbnN0IHBsYXRmb3JtID0gZ2V0Q3VycmVudFBsYXRmb3JtKClcclxuICAgIGNvbnN0IHNjcmlwdFBhdGggPSBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsIHBsYXRmb3JtMlNjcmlwdEZpbGVuYW1lW3BsYXRmb3JtXSlcclxuICAgIC8vIElmIHRoZSBzY3JpcHQgZG9lcyBub3QgZXhpc3QgeWV0LCB3ZSBuZWVkIHRvIHdyaXRlIHRoZSBjb250ZW50IHRvIHRoZSBzY3JpcHQgZmlsZVxyXG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKHNjcmlwdFBhdGgpKSB7XHJcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoXHJcbiAgICAgICAgc2NyaXB0UGF0aCxcclxuICAgICAgICBwbGF0Zm9ybTJTY3JpcHRDb250ZW50W3BsYXRmb3JtXSxcclxuICAgICAgICAndXRmOCdcclxuICAgICAgKVxyXG4gICAgfVxyXG4gICAgbGV0IGV4ZWN1dGlvblxyXG4gICAgaWYgKHBsYXRmb3JtID09PSAnZGFyd2luJykge1xyXG4gICAgICBleGVjdXRpb24gPSBzcGF3bignb3Nhc2NyaXB0JywgW3NjcmlwdFBhdGgsIGltYWdlUGF0aF0pXHJcbiAgICB9IGVsc2UgaWYgKHBsYXRmb3JtID09PSAnd2luMzInIHx8IHBsYXRmb3JtID09PSAnd2luMTAnKSB7XHJcbiAgICAgIGV4ZWN1dGlvbiA9IHNwYXduKCdwb3dlcnNoZWxsJywgW1xyXG4gICAgICAgICctbm9wcm9maWxlJyxcclxuICAgICAgICAnLW5vbmludGVyYWN0aXZlJyxcclxuICAgICAgICAnLW5vbG9nbycsXHJcbiAgICAgICAgJy1zdGEnLFxyXG4gICAgICAgICctZXhlY3V0aW9ucG9saWN5JywgJ3VucmVzdHJpY3RlZCcsXHJcbiAgICAgICAgLy8gZml4IHdpbmRvd3MgMTAgbmF0aXZlIGNtZCBjcmFzaCBidWcgd2hlbiBcInBpY2dvIHVwbG9hZFwiXHJcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL1BpY0dvL1BpY0dvLUNvcmUvaXNzdWVzLzMyXHJcbiAgICAgICAgLy8gJy13aW5kb3dzdHlsZScsJ2hpZGRlbicsXHJcbiAgICAgICAgLy8gJy1ub2V4aXQnLFxyXG4gICAgICAgICctZmlsZScsIHNjcmlwdFBhdGgsXHJcbiAgICAgICAgaW1hZ2VQYXRoXHJcbiAgICAgIF0pXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBleGVjdXRpb24gPSBzcGF3bignc2gnLCBbc2NyaXB0UGF0aCwgaW1hZ2VQYXRoXSlcclxuICAgIH1cclxuXHJcbiAgICBleGVjdXRpb24uc3Rkb3V0Lm9uKCdkYXRhJywgKGRhdGE6IEJ1ZmZlcikgPT4ge1xyXG4gICAgICBpZiAocGxhdGZvcm0gPT09ICdsaW51eCcpIHtcclxuICAgICAgICBpZiAoZGF0YS50b1N0cmluZygpLnRyaW0oKSA9PT0gJ25vIHhjbGlwIG9yIHdsLWNsaXBib2FyZCcpIHtcclxuICAgICAgICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XHJcbiAgICAgICAgICAgIHRpdGxlOiAneGNsaXAgb3Igd2wtY2xpcGJvYXJkIG5vdCBmb3VuZCcsXHJcbiAgICAgICAgICAgIGJvZHk6ICdQbGVhc2UgaW5zdGFsbCB4Y2xpcChmb3IgeDExKSBvciB3bC1jbGlwYm9hcmQoZm9yIHdheWxhbmQpIGJlZm9yZSBydW4gcGljZ28nXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoJ1BsZWFzZSBpbnN0YWxsIHhjbGlwKGZvciB4MTEpIG9yIHdsLWNsaXBib2FyZChmb3Igd2F5bGFuZCkgYmVmb3JlIHJ1biBwaWNnbycpKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBjb25zdCBpbWdQYXRoID0gZGF0YS50b1N0cmluZygpLnRyaW0oKVxyXG5cclxuICAgICAgLy8gaWYgdGhlIGZpbGVQYXRoIGlzIHRoZSByZWFsIGZpbGUgaW4gc3lzdGVtXHJcbiAgICAgIC8vIHdlIHNob3VsZCBrZWVwIGl0IGluc3RlYWQgb2YgcmVtb3ZpbmdcclxuICAgICAgbGV0IHNob3VsZEtlZXBBZnRlclVwbG9hZGluZyA9IGZhbHNlXHJcblxyXG4gICAgICAvLyBpbiBtYWNPUyBpZiB5b3VyIGNvcHkgdGhlIGZpbGUgaW4gc3lzdGVtLCBpdCdzIGJhc2VuYW1lIHdpbGwgbm90IGVxdWFsIHRvIG91ciBkZWZhdWx0IGJhc2VuYW1lXHJcbiAgICAgIGlmIChwYXRoLmJhc2VuYW1lKGltZ1BhdGgpICE9PSBwYXRoLmJhc2VuYW1lKGltYWdlUGF0aCkpIHtcclxuICAgICAgICAvLyBpZiB0aGUgcGF0aCBpcyBub3QgZ2VuZXJhdGUgYnkgcGljZ29cclxuICAgICAgICAvLyBidXQgdGhlIHBhdGggZXhpc3RzLCB3ZSBzaG91bGQga2VlcCBpdFxyXG4gICAgICAgIGlmIChmcy5leGlzdHNTeW5jKGltZ1BhdGgpKSB7XHJcbiAgICAgICAgICBzaG91bGRLZWVwQWZ0ZXJVcGxvYWRpbmcgPSB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8vIGlmIHRoZSBpbWdQYXRoIGlzIGludmFsaWRcclxuICAgICAgaWYgKGltZ1BhdGggIT09ICdubyBpbWFnZScgJiYgIWZzLmV4aXN0c1N5bmMoaW1nUGF0aCkpIHtcclxuICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcihgQ2FuJ3QgZmluZCAke2ltZ1BhdGh9YCkpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJlc29sdmUoe1xyXG4gICAgICAgIGltZ1BhdGgsXHJcbiAgICAgICAgc2hvdWxkS2VlcEFmdGVyVXBsb2FkaW5nXHJcbiAgICAgIH0pXHJcbiAgICB9KVxyXG4gIH0pXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGdldENsaXBib2FyZEltYWdlXHJcbiIsImltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ2V2ZW50cydcclxuXHJcbmNvbnN0IGV2ZW50QnVzID0gbmV3IEV2ZW50RW1pdHRlcigpXHJcbmV4cG9ydCB7XHJcbiAgZXZlbnRCdXNcclxufVxyXG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtZnVuY3Rpb24tcmV0dXJuLXR5cGUgKi9cclxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L3Byb21pc2UtZnVuY3Rpb24tYXN5bmMgKi9cclxuaW1wb3J0IGF4aW9zLCB7IEF4aW9zUmVxdWVzdENvbmZpZywgQXhpb3NSZXNwb25zZSB9IGZyb20gJ2F4aW9zJ1xyXG5pbXBvcnQgeyBJUGljR28sIFVuZGVmaW5hYmxlLCBJQ29uZmlnQ2hhbmdlUGF5bG9hZCwgSUNvbmZpZywgSVJlcXVlc3RDb25maWcsIElPbGRSZXFPcHRpb25zLCBJUmVzcG9uc2UsIElGdWxsUmVzcG9uc2UsIElSZXF1ZXN0IH0gZnJvbSAnLi4vdHlwZXMnXHJcbmltcG9ydCB7IElCdXNFdmVudCB9IGZyb20gJy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB7IGV2ZW50QnVzIH0gZnJvbSAnLi4vdXRpbHMvZXZlbnRCdXMnXHJcbmltcG9ydCB7IFVSTCB9IGZyb20gJ3VybCdcclxuaW1wb3J0IEZvcm1EYXRhIGZyb20gJ2Zvcm0tZGF0YSdcclxuaW1wb3J0IGh0dHBzIGZyb20gJ2h0dHBzJ1xyXG5pbXBvcnQgdHVubmVsIGZyb20gJ3R1bm5lbCdcclxuY29uc3QgaHR0cHNBZ2VudCA9IG5ldyBodHRwcy5BZ2VudCh7XHJcbiAgbWF4VmVyc2lvbjogJ1RMU3YxLjInLFxyXG4gIG1pblZlcnNpb246ICdUTFN2MS4yJ1xyXG59KVxyXG5cclxuLy8gdGhhbmtzIGZvciBodHRwczovL2dpdGh1Yi5kZXYvcmVxdWVzdC9yZXF1ZXN0L2Jsb2IvbWFzdGVyL2luZGV4LmpzXHJcbmZ1bmN0aW9uIGFwcGVuZEZvcm1EYXRhIChmb3JtOiBGb3JtRGF0YSwga2V5OiBzdHJpbmcsIGRhdGE6IGFueSk6IHZvaWQge1xyXG4gIGlmICh0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgJiYgJ3ZhbHVlJyBpbiBkYXRhICYmICdvcHRpb25zJyBpbiBkYXRhKSB7XHJcbiAgICBmb3JtLmFwcGVuZChrZXksIGRhdGEudmFsdWUsIGRhdGEub3B0aW9ucylcclxuICB9IGVsc2Uge1xyXG4gICAgZm9ybS5hcHBlbmQoa2V5LCBkYXRhKVxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gcmVxdWVzdEludGVyY2VwdG9yIChvcHRpb25zOiBJT2xkUmVxT3B0aW9ucyB8IEF4aW9zUmVxdWVzdENvbmZpZyk6IEF4aW9zUmVxdWVzdENvbmZpZyAmIHtcclxuICBfX2lzT2xkT3B0aW9ucz86IGJvb2xlYW5cclxufSB7XHJcbiAgbGV0IF9faXNPbGRPcHRpb25zID0gZmFsc2VcclxuICBjb25zdCBvcHQ6IEF4aW9zUmVxdWVzdENvbmZpZzxhbnk+ICYge1xyXG4gICAgX19pc09sZE9wdGlvbnM/OiBib29sZWFuXHJcbiAgfSA9IHtcclxuICAgIC4uLm9wdGlvbnMsXHJcbiAgICB1cmw6IChvcHRpb25zLnVybCBhcyBzdHJpbmcpIHx8ICcnLFxyXG4gICAgaGVhZGVyczogb3B0aW9ucy5oZWFkZXJzIHx8IHt9XHJcbiAgfVxyXG4gIC8vIHVzZXIgcmVxdWVzdCBjb25maWcgcHJveHlcclxuICBpZiAob3B0aW9ucy5wcm94eSkge1xyXG4gICAgbGV0IHByb3h5T3B0aW9ucyA9IG9wdGlvbnMucHJveHlcclxuICAgIGlmICh0eXBlb2YgcHJveHlPcHRpb25zID09PSAnc3RyaW5nJykge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHByb3h5T3B0aW9ucyA9IG5ldyBVUkwob3B0aW9ucy5wcm94eSlcclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIHByb3h5T3B0aW9ucyA9IGZhbHNlXHJcbiAgICAgICAgb3B0LnByb3h5ID0gZmFsc2VcclxuICAgICAgICBjb25zb2xlLmVycm9yKGUpXHJcbiAgICAgIH1cclxuICAgICAgX19pc09sZE9wdGlvbnMgPSB0cnVlXHJcbiAgICB9XHJcbiAgICBpZiAocHJveHlPcHRpb25zKSB7XHJcbiAgICAgIGlmIChvcHRpb25zLnVybD8uc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSkge1xyXG4gICAgICAgIG9wdC5wcm94eSA9IGZhbHNlXHJcbiAgICAgICAgb3B0Lmh0dHBzQWdlbnQgPSB0dW5uZWwuaHR0cHNPdmVySHR0cCh7XHJcbiAgICAgICAgICBwcm94eToge1xyXG4gICAgICAgICAgICBob3N0OiBwcm94eU9wdGlvbnM/Lmhvc3RuYW1lLFxyXG4gICAgICAgICAgICBwb3J0OiBwYXJzZUludChwcm94eU9wdGlvbnM/LnBvcnQsIDEwKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgb3B0LnByb3h5ID0ge1xyXG4gICAgICAgICAgaG9zdDogcHJveHlPcHRpb25zLmhvc3RuYW1lLFxyXG4gICAgICAgICAgcG9ydDogcGFyc2VJbnQocHJveHlPcHRpb25zLnBvcnQsIDEwKSxcclxuICAgICAgICAgIHByb3RvY29sOiAnaHR0cCdcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgaWYgKCdmb3JtRGF0YScgaW4gb3B0aW9ucykge1xyXG4gICAgY29uc3QgZm9ybSA9IG5ldyBGb3JtRGF0YSgpXHJcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvcHRpb25zLmZvcm1EYXRhKSB7XHJcbiAgICAgIGNvbnN0IGRhdGEgPSBvcHRpb25zLmZvcm1EYXRhW2tleV1cclxuICAgICAgYXBwZW5kRm9ybURhdGEoZm9ybSwga2V5LCBkYXRhKVxyXG4gICAgfVxyXG4gICAgb3B0LmRhdGEgPSBmb3JtXHJcbiAgICBvcHQuaGVhZGVycyA9IE9iamVjdC5hc3NpZ24ob3B0LmhlYWRlcnMgfHwge30sIGZvcm0uZ2V0SGVhZGVycygpKVxyXG4gICAgX19pc09sZE9wdGlvbnMgPSB0cnVlXHJcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXHJcbiAgICBkZWxldGUgb3B0LmZvcm1EYXRhXHJcbiAgfVxyXG4gIGlmICgnYm9keScgaW4gb3B0aW9ucykge1xyXG4gICAgb3B0LmRhdGEgPSBvcHRpb25zLmJvZHlcclxuICAgIF9faXNPbGRPcHRpb25zID0gdHJ1ZVxyXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvclxyXG4gICAgZGVsZXRlIG9wdC5ib2R5XHJcbiAgfVxyXG4gIGlmICgncXMnIGluIG9wdGlvbnMpIHtcclxuICAgIG9wdC5wYXJhbXMgPSBvcHRpb25zLnFzXHJcbiAgICBfX2lzT2xkT3B0aW9ucyA9IHRydWVcclxuICB9XHJcbiAgb3B0Ll9faXNPbGRPcHRpb25zID0gX19pc09sZE9wdGlvbnNcclxuICByZXR1cm4gb3B0XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlc3BvbnNlSW50ZXJjZXB0b3IgKHJlc3BvbnNlOiBBeGlvc1Jlc3BvbnNlKTogSUZ1bGxSZXNwb25zZSB7XHJcbiAgcmV0dXJuIHtcclxuICAgIC4uLnJlc3BvbnNlLFxyXG4gICAgc3RhdHVzQ29kZTogcmVzcG9uc2Uuc3RhdHVzLFxyXG4gICAgYm9keTogcmVzcG9uc2UuZGF0YVxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gcmVzcG9uc2VFcnJvckhhbmRsZXIgKGVycm9yOiBhbnkpIHtcclxuICAvLyBpZiAoZXJyb3IucmVzcG9uc2UpIHtcclxuICAvLyAgIC8vIFRoZSByZXF1ZXN0IHdhcyBtYWRlIGFuZCB0aGUgc2VydmVyIHJlc3BvbmRlZCB3aXRoIGEgc3RhdHVzIGNvZGVcclxuICAvLyAgIC8vIHRoYXQgZmFsbHMgb3V0IG9mIHRoZSByYW5nZSBvZiAyeHhcclxuICAvLyAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvKVxyXG4gIC8vIH0gZWxzZSBpZiAoZXJyb3IucmVxdWVzdCkge1xyXG4gIC8vICAgLy8gVGhlIHJlcXVlc3Qgd2FzIG1hZGUgYnV0IG5vIHJlc3BvbnNlIHdhcyByZWNlaXZlZFxyXG4gIC8vICAgLy8gYGVycm9yLnJlcXVlc3RgIGlzIGFuIGluc3RhbmNlIG9mIFhNTEh0dHBSZXF1ZXN0IGluIHRoZSBicm93c2VyIGFuZCBhbiBpbnN0YW5jZSBvZlxyXG4gIC8vICAgLy8gaHR0cC5DbGllbnRSZXF1ZXN0IGluIG5vZGUuanNcclxuICAvLyAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvci5yZXF1ZXN0KVxyXG4gIC8vIH0gZWxzZSB7XHJcbiAgLy8gICAvLyBTb21ldGhpbmcgaGFwcGVuZWQgaW4gc2V0dGluZyB1cCB0aGUgcmVxdWVzdCB0aGF0IHRyaWdnZXJlZCBhbiBFcnJvclxyXG4gIC8vICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yLm1lc3NhZ2UpXHJcbiAgLy8gfVxyXG4gIGNvbnN0IGVycm9yT2JqID0ge1xyXG4gICAgbWV0aG9kOiBlcnJvcj8uY29uZmlnPy5tZXRob2Q/LnRvVXBwZXJDYXNlKCkgfHwgJycsXHJcbiAgICB1cmw6IGVycm9yPy5jb25maWc/LnVybCB8fCAnJyxcclxuICAgIHN0YXR1c0NvZGU6IGVycm9yPy5yZXNwb25zZT8uc3RhdHVzIHx8IDAsXHJcbiAgICBtZXNzYWdlOiBlcnJvcj8ubWVzc2FnZSB8fCAnJyxcclxuICAgIHN0YWNrOiBlcnJvcj8uc3RhY2sgfHwge30sXHJcbiAgICByZXNwb25zZToge1xyXG4gICAgICBzdGF0dXM6IGVycm9yPy5yZXNwb25zZT8uc3RhdHVzIHx8IDAsXHJcbiAgICAgIHN0YXR1c0NvZGU6IGVycm9yPy5yZXNwb25zZT8uc3RhdHVzIHx8IDAsXHJcbiAgICAgIGJvZHk6IGVycm9yPy5yZXNwb25zZT8uZGF0YSB8fCAnJ1xyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3JPYmopXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBSZXF1ZXN0IGltcGxlbWVudHMgSVJlcXVlc3Qge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgY3R4OiBJUGljR29cclxuICBwcml2YXRlIHByb3h5OiBVbmRlZmluYWJsZTxzdHJpbmc+ID0gJydcclxuICBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWc8YW55PiA9IHt9XHJcbiAgY29uc3RydWN0b3IgKGN0eDogSVBpY0dvKSB7XHJcbiAgICB0aGlzLmN0eCA9IGN0eFxyXG4gICAgdGhpcy5pbml0KClcclxuICAgIGV2ZW50QnVzLm9uKElCdXNFdmVudC5DT05GSUdfQ0hBTkdFLCAoZGF0YTogSUNvbmZpZ0NoYW5nZVBheWxvYWQ8c3RyaW5nIHwgSUNvbmZpZ1sncGljQmVkJ10+KSA9PiB7XHJcbiAgICAgIHN3aXRjaCAoZGF0YS5jb25maWdOYW1lKSB7XHJcbiAgICAgICAgY2FzZSAncGljQmVkJzpcclxuICAgICAgICAgIGlmICgoZGF0YS52YWx1ZSBhcyBJQ29uZmlnWydwaWNCZWQnXSk/LnByb3h5KSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJveHkgPSAoZGF0YS52YWx1ZSBhcyBJQ29uZmlnWydwaWNCZWQnXSkucHJveHlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgY2FzZSAncGljQmVkLnByb3h5JzpcclxuICAgICAgICAgIHRoaXMucHJveHkgPSBkYXRhLnZhbHVlIGFzIHN0cmluZ1xyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdCAoKTogdm9pZCB7XHJcbiAgICBjb25zdCBwcm94eSA9IHRoaXMuY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxzdHJpbmc+PigncGljQmVkLnByb3h5JylcclxuICAgIGlmIChwcm94eSkge1xyXG4gICAgICB0aGlzLnByb3h5ID0gcHJveHlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlUHJveHkgKCk6IEF4aW9zUmVxdWVzdENvbmZpZ1sncHJveHknXSB8IGZhbHNlIHtcclxuICAgIGlmICh0aGlzLnByb3h5KSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgcHJveHlPcHRpb25zID0gbmV3IFVSTCh0aGlzLnByb3h5KVxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICBob3N0OiBwcm94eU9wdGlvbnMuaG9zdG5hbWUsXHJcbiAgICAgICAgICBwb3J0OiBwYXJzZUludChwcm94eU9wdGlvbnMucG9ydCB8fCAnMCcsIDEwKSxcclxuICAgICAgICAgIHByb3RvY29sOiBwcm94eU9wdGlvbnMucHJvdG9jb2xcclxuICAgICAgICB9XHJcbiAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlXHJcbiAgfVxyXG5cclxuICAvLyAjNjQgZHluYW1pYyBnZXQgcHJveHkgdmFsdWVcclxuICByZXF1ZXN0PFQsIFUgZXh0ZW5kcyAoXHJcbiAgICBJUmVxdWVzdENvbmZpZzxVPiBleHRlbmRzIElPbGRSZXFPcHRpb25zID8gSU9sZFJlcU9wdGlvbnMgOiBJUmVxdWVzdENvbmZpZzxVPiBleHRlbmRzIEF4aW9zUmVxdWVzdENvbmZpZyA/IEF4aW9zUmVxdWVzdENvbmZpZyA6IG5ldmVyXHJcbiAgKT4gKG9wdGlvbnM6IFUpOiBQcm9taXNlPElSZXNwb25zZTxULCBVPj4ge1xyXG4gICAgdGhpcy5vcHRpb25zLnByb3h5ID0gdGhpcy5oYW5kbGVQcm94eSgpXHJcbiAgICB0aGlzLm9wdGlvbnMuaGVhZGVycyA9IG9wdGlvbnMuaGVhZGVycyB8fCB7fVxyXG4gICAgdGhpcy5vcHRpb25zLm1heEJvZHlMZW5ndGggPSBJbmZpbml0eVxyXG4gICAgdGhpcy5vcHRpb25zLm1heENvbnRlbnRMZW5ndGggPSBJbmZpbml0eVxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5wcm94eSAmJiBvcHRpb25zLnVybD8uc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSkge1xyXG4gICAgICB0aGlzLm9wdGlvbnMuaHR0cHNBZ2VudCA9IHR1bm5lbC5odHRwc092ZXJIdHRwKHtcclxuICAgICAgICBwcm94eToge1xyXG4gICAgICAgICAgaG9zdDogdGhpcy5vcHRpb25zLnByb3h5Lmhvc3QsXHJcbiAgICAgICAgICBwb3J0OiB0aGlzLm9wdGlvbnMucHJveHkucG9ydFxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgdGhpcy5vcHRpb25zLnByb3h5ID0gZmFsc2VcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5odHRwc0FnZW50ID0gaHR0cHNBZ2VudFxyXG4gICAgfVxyXG4gICAgLy8gIU5PVElDRSB0aGlzLm9wdGlvbnMgIT09IG9wdGlvbnNcclxuICAgIC8vIHRoaXMub3B0aW9ucyBpcyB0aGUgZGVmYXVsdCBvcHRpb25zXHJcbiAgICBjb25zdCBpbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSh0aGlzLm9wdGlvbnMpXHJcbiAgICBpbnN0YW5jZS5pbnRlcmNlcHRvcnMucmVzcG9uc2UudXNlKHJlc3BvbnNlSW50ZXJjZXB0b3IsIHJlc3BvbnNlRXJyb3JIYW5kbGVyKVxyXG5cclxuICAgIC8vIGNvbXBhdGlibGUgd2l0aCBvbGQgcmVxdWVzdCBvcHRpb25zIHRvIG5ldyBvcHRpb25zXHJcbiAgICBjb25zdCBvcHQgPSByZXF1ZXN0SW50ZXJjZXB0b3Iob3B0aW9ucylcclxuXHJcbiAgICBpbnN0YW5jZS5pbnRlcmNlcHRvcnMucmVxdWVzdC51c2UoZnVuY3Rpb24gKG9iaikge1xyXG4gICAgICAvLyBoYW5kbGUgQ29udGVudC1UeXBlXHJcbiAgICAgIGxldCBjb250ZW50VHlwZSA9ICcnXHJcbiAgICAgIGlmIChvYmo/LmhlYWRlcnM/LmNvbnRlbnRUeXBlKSB7XHJcbiAgICAgICAgY29udGVudFR5cGUgPSBvYmouaGVhZGVycy5jb250ZW50VHlwZSBhcyBzdHJpbmdcclxuICAgICAgICBkZWxldGUgb2JqLmhlYWRlcnMuY29udGVudFR5cGVcclxuICAgICAgfSBlbHNlIGlmIChvYmo/LmhlYWRlcnM/LkNvbnRlbnRUeXBlKSB7XHJcbiAgICAgICAgY29udGVudFR5cGUgPSBvYmouaGVhZGVycy5Db250ZW50VHlwZSBhcyBzdHJpbmdcclxuICAgICAgICBkZWxldGUgb2JqLmhlYWRlcnMuQ29udGVudFR5cGVcclxuICAgICAgfSBlbHNlIGlmIChvYmo/LmhlYWRlcnM/LlsnY29udGVudC10eXBlJ10pIHtcclxuICAgICAgICBjb250ZW50VHlwZSA9IG9iai5oZWFkZXJzWydjb250ZW50LXR5cGUnXSBhcyBzdHJpbmdcclxuICAgICAgICBkZWxldGUgb2JqLmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddXHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbnRlbnRUeXBlICE9PSAnJyAmJiBvYmouaGVhZGVycykge1xyXG4gICAgICAgIG9iai5oZWFkZXJzWydDb250ZW50LVR5cGUnXSA9IGNvbnRlbnRUeXBlXHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG9ialxyXG4gICAgfSlcclxuICAgIGlmICgncmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2UnIGluIG9wdGlvbnMgJiYgb3B0aW9ucy5yZXNvbHZlV2l0aEZ1bGxSZXNwb25zZSkge1xyXG4gICAgICByZXR1cm4gaW5zdGFuY2UucmVxdWVzdChvcHQpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gaW5zdGFuY2UucmVxdWVzdChvcHQpLnRoZW4ocmVzID0+IHtcclxuICAgICAgICAvLyB1c2Ugb2xkIHJlcXVlc3Qgb3B0aW9uIGZvcm1hdFxyXG4gICAgICAgIGlmIChvcHQuX19pc09sZE9wdGlvbnMpIHtcclxuICAgICAgICAgIGlmICgnanNvbicgaW4gb3B0aW9ucykge1xyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5qc29uKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHJlcy5kYXRhXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShyZXMuZGF0YSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIHJlcy5kYXRhXHJcbiAgICAgICAgfVxyXG4gICAgICB9KSBhcyBQcm9taXNlPElSZXNwb25zZTxULCBVPj5cclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFJlcXVlc3RcclxuIiwiaW1wb3J0IHsgSUNvbmZpZywgSVBpY0dvIH0gZnJvbSAnLi4vdHlwZXMnXHJcbmltcG9ydCB7IEpTT05TdG9yZSB9IGZyb20gJ0BwaWNnby9zdG9yZSdcclxuaW1wb3J0IHsgSUpTT04gfSBmcm9tICdAcGljZ28vc3RvcmUvZGlzdC90eXBlcydcclxuXHJcbmNsYXNzIERCIHtcclxuICBwcml2YXRlIHJlYWRvbmx5IGN0eDogSVBpY0dvXHJcbiAgcHJpdmF0ZSByZWFkb25seSBkYjogSlNPTlN0b3JlXHJcbiAgY29uc3RydWN0b3IgKGN0eDogSVBpY0dvKSB7XHJcbiAgICB0aGlzLmN0eCA9IGN0eFxyXG4gICAgdGhpcy5kYiA9IG5ldyBKU09OU3RvcmUodGhpcy5jdHguY29uZmlnUGF0aClcclxuXHJcbiAgICBpZiAoIXRoaXMuZGIuaGFzKCdwaWNCZWQnKSkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHRoaXMuZGIuc2V0KCdwaWNCZWQnLCB7XHJcbiAgICAgICAgICB1cGxvYWRlcjogJ3NtbXMnLFxyXG4gICAgICAgICAgY3VycmVudDogJ3NtbXMnXHJcbiAgICAgICAgfSlcclxuICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGUpXHJcbiAgICAgICAgdGhyb3cgZVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuZGIuaGFzKCdwaWNnb1BsdWdpbnMnKSkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHRoaXMuZGIuc2V0KCdwaWNnb1BsdWdpbnMnLCB7fSlcclxuICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGUpXHJcbiAgICAgICAgdGhyb3cgZVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZWFkIChmbHVzaD86IGJvb2xlYW4pOiBJSlNPTiB7XHJcbiAgICByZXR1cm4gdGhpcy5kYi5yZWFkKGZsdXNoKVxyXG4gIH1cclxuXHJcbiAgZ2V0IChrZXk6IHN0cmluZyA9ICcnKTogYW55IHtcclxuICAgIHRoaXMucmVhZCh0cnVlKVxyXG4gICAgcmV0dXJuIHRoaXMuZGIuZ2V0KGtleSlcclxuICB9XHJcblxyXG4gIHNldCAoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMucmVhZCh0cnVlKVxyXG4gICAgcmV0dXJuIHRoaXMuZGIuc2V0KGtleSwgdmFsdWUpXHJcbiAgfVxyXG5cclxuICBoYXMgKGtleTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICB0aGlzLnJlYWQodHJ1ZSlcclxuICAgIHJldHVybiB0aGlzLmRiLmhhcyhrZXkpXHJcbiAgfVxyXG5cclxuICB1bnNldCAoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgIHRoaXMucmVhZCh0cnVlKVxyXG4gICAgcmV0dXJuIHRoaXMuZGIudW5zZXQoa2V5LCB2YWx1ZSlcclxuICB9XHJcblxyXG4gIHNhdmVDb25maWcgKGNvbmZpZzogUGFydGlhbDxJQ29uZmlnPik6IHZvaWQge1xyXG4gICAgT2JqZWN0LmtleXMoY29uZmlnKS5mb3JFYWNoKChuYW1lOiBzdHJpbmcpID0+IHtcclxuICAgICAgdGhpcy5zZXQobmFtZSwgY29uZmlnW25hbWVdKVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHJlbW92ZUNvbmZpZyAoY29uZmlnOiBJQ29uZmlnKTogdm9pZCB7XHJcbiAgICBPYmplY3Qua2V5cyhjb25maWcpLmZvckVhY2goKG5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICB0aGlzLnVuc2V0KG5hbWUsIGNvbmZpZ1tuYW1lXSlcclxuICAgIH0pXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBEQlxyXG5cclxuLy8gY29uc3QgaW5pdENvbmZpZyA9IChjb25maWdQYXRoOiBzdHJpbmcpOiBsb3dkYi5Mb3dkYlN5bmM8YW55PiA9PiB7XHJcbi8vIH1cclxuXHJcbi8vIGNvbnN0IHNhdmVDb25maWcgPSAoY29uZmlnUGF0aDogc3RyaW5nLCBjb25maWc6IGFueSk6IHZvaWQgPT4ge1xyXG4vLyAgIGNvbnN0IGRiID0gaW5pdENvbmZpZyhjb25maWdQYXRoKVxyXG4vLyAgIE9iamVjdC5rZXlzKGNvbmZpZykuZm9yRWFjaCgobmFtZTogc3RyaW5nKSA9PiB7XHJcbi8vICAgICBkYi5yZWFkKCkuc2V0KG5hbWUsIGNvbmZpZ1tuYW1lXSkud3JpdGUoKVxyXG4vLyAgIH0pXHJcbi8vIH1cclxuXHJcbi8vIGV4cG9ydCB7XHJcbi8vIGluaXRDb25maWcsXHJcbi8vIHNhdmVDb25maWdcclxuLy8gfVxyXG4iLCJpbXBvcnQgc3Bhd24gZnJvbSAnY3Jvc3Mtc3Bhd24nXHJcbmltcG9ydCB7XHJcbiAgSVJlc3VsdCxcclxuICBJUHJvY2Vzc0VudixcclxuICBJUGx1Z2luUHJvY2Vzc1Jlc3VsdCxcclxuICBJUGx1Z2luSGFuZGxlcixcclxuICBJUGx1Z2luSGFuZGxlck9wdGlvbnMsXHJcbiAgVW5kZWZpbmFibGUsXHJcbiAgSVBpY0dvLFxyXG4gIElQbHVnaW5IYW5kbGVyUmVzdWx0XHJcbn0gZnJvbSAnLi4vdHlwZXMnXHJcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi91dGlscy9lbnVtJ1xyXG5pbXBvcnQgeyBnZXRQcm9jZXNzUGx1Z2luTmFtZSwgZ2V0Tm9ybWFsUGx1Z2luTmFtZSB9IGZyb20gJy4uL3V0aWxzL2NvbW1vbidcclxuaW1wb3J0IHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi9pMThuL3poLUNOJ1xyXG5cclxuZXhwb3J0IGNsYXNzIFBsdWdpbkhhbmRsZXIgaW1wbGVtZW50cyBJUGx1Z2luSGFuZGxlciB7XHJcbiAgLy8gVGhhbmtzIHRvIGZlZmxvdyAtPiBodHRwczovL2dpdGh1Yi5jb20vZmVmbG93L2ZlZmxvdy9ibG9iL21hc3Rlci9saWIvaW50ZXJuYWwvaW5zdGFsbC9wbHVnaW4uanNcclxuICBwcml2YXRlIHJlYWRvbmx5IGN0eDogSVBpY0dvXHJcbiAgY29uc3RydWN0b3IgKGN0eDogSVBpY0dvKSB7XHJcbiAgICB0aGlzLmN0eCA9IGN0eFxyXG4gIH1cclxuXHJcbiAgYXN5bmMgaW5zdGFsbCAocGx1Z2luczogc3RyaW5nW10sIG9wdGlvbnM6IElQbHVnaW5IYW5kbGVyT3B0aW9ucyA9IHt9LCBlbnY/OiBJUHJvY2Vzc0Vudik6IFByb21pc2U8SVBsdWdpbkhhbmRsZXJSZXN1bHQ8Ym9vbGVhbj4+IHtcclxuICAgIGNvbnN0IGluc3RhbGxlZFBsdWdpbnM6IHN0cmluZ1tdID0gW11cclxuICAgIGNvbnN0IHByb2Nlc3NQbHVnaW5zID0gcGx1Z2luc1xyXG4gICAgICAubWFwKChpdGVtOiBzdHJpbmcpID0+IGhhbmRsZVBsdWdpbk5hbWVQcm9jZXNzKHRoaXMuY3R4LCBpdGVtKSlcclxuICAgICAgLmZpbHRlcigoaXRlbSkgPT4ge1xyXG4gICAgICAgIC8vIGRldGVjdCBpZiBoYXMgYWxyZWFkeSBpbnN0YWxsZWRcclxuICAgICAgICAvLyBvciB3aWxsIGNhdXNlIGVycm9yXHJcbiAgICAgICAgaWYgKHRoaXMuY3R4LnBsdWdpbkxvYWRlci5oYXNQbHVnaW4oaXRlbS5wa2dOYW1lKSkge1xyXG4gICAgICAgICAgaW5zdGFsbGVkUGx1Z2lucy5wdXNoKGl0ZW0ucGtnTmFtZSlcclxuICAgICAgICAgIHRoaXMuY3R4LmxvZy5zdWNjZXNzKGBQaWNHbyBoYXMgYWxyZWFkeSBpbnN0YWxsZWQgJHtpdGVtLnBrZ05hbWV9YClcclxuICAgICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBpZiBzb21ldGhpbmcgd3JvbmcsIGZpbHRlciBpdCBvdXRcclxuICAgICAgICBpZiAoIWl0ZW0uc3VjY2Vzcykge1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlXHJcbiAgICAgIH0pXHJcbiAgICBjb25zdCBmdWxsTmFtZUxpc3QgPSBwcm9jZXNzUGx1Z2lucy5tYXAoaXRlbSA9PiBpdGVtLmZ1bGxOYW1lKVxyXG4gICAgY29uc3QgcGtnTmFtZUxpc3QgPSBwcm9jZXNzUGx1Z2lucy5tYXAoaXRlbSA9PiBpdGVtLnBrZ05hbWUpXHJcbiAgICBpZiAoZnVsbE5hbWVMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgLy8gaW5zdGFsbCBwbHVnaW5zIG11c3QgdXNlIGZ1bGxOYW1lTGlzdDpcclxuICAgICAgLy8gMS4gaW5zdGFsbCByZW1vdGUgcGFjYWdlXHJcbiAgICAgIC8vIDIuIGluc3RhbGwgbG9jYWwgcGFjYWdlXHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZXhlY0NvbW1hbmQoJ2luc3RhbGwnLCBmdWxsTmFtZUxpc3QsIHRoaXMuY3R4LmJhc2VEaXIsIG9wdGlvbnMsIGVudilcclxuICAgICAgaWYgKCFyZXN1bHQuY29kZSkge1xyXG4gICAgICAgIHBrZ05hbWVMaXN0LmZvckVhY2goKHBsdWdpbk5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jdHgucGx1Z2luTG9hZGVyLnJlZ2lzdGVyUGx1Z2luKHBsdWdpbk5hbWUpXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLmN0eC5sb2cuc3VjY2Vzcyh0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX1NVQ0NFU1MnKSlcclxuICAgICAgICB0aGlzLmN0eC5lbWl0KCdpbnN0YWxsU3VjY2VzcycsIHtcclxuICAgICAgICAgIHRpdGxlOiB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX1NVQ0NFU1MnKSxcclxuICAgICAgICAgIGJvZHk6IFsuLi5wa2dOYW1lTGlzdCwgLi4uaW5zdGFsbGVkUGx1Z2luc11cclxuICAgICAgICB9KVxyXG4gICAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8dHJ1ZT4gPSB7XHJcbiAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxyXG4gICAgICAgICAgYm9keTogWy4uLnBrZ05hbWVMaXN0LCAuLi5pbnN0YWxsZWRQbHVnaW5zXVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgZXJyID0gdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRURfUkVBU09OJywge1xyXG4gICAgICAgICAgY29kZTogYCR7cmVzdWx0LmNvZGV9YCxcclxuICAgICAgICAgIGRhdGE6IHJlc3VsdC5kYXRhXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoZXJyKVxyXG4gICAgICAgIHRoaXMuY3R4LmVtaXQoJ2luc3RhbGxGYWlsZWQnLCB7XHJcbiAgICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRUQnKSxcclxuICAgICAgICAgIGJvZHk6IGVyclxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgY29uc3QgcmVzOiBJUGx1Z2luSGFuZGxlclJlc3VsdDxmYWxzZT4gPSB7XHJcbiAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcclxuICAgICAgICAgIGJvZHk6IGVyclxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoaW5zdGFsbGVkUGx1Z2lucy5sZW5ndGggPT09IDApIHtcclxuICAgICAgY29uc3QgZXJyID0gdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRF9WQUxJRCcpXHJcbiAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihlcnIpXHJcbiAgICAgIHRoaXMuY3R4LmVtaXQoJ2luc3RhbGxGYWlsZWQnLCB7XHJcbiAgICAgICAgdGl0bGU6IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEJyksXHJcbiAgICAgICAgYm9keTogZXJyXHJcbiAgICAgIH0pXHJcbiAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8ZmFsc2U+ID0ge1xyXG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxyXG4gICAgICAgIGJvZHk6IGVyclxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiByZXNcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY3R4LmxvZy5zdWNjZXNzKHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfU1VDQ0VTUycpKVxyXG4gICAgICB0aGlzLmN0eC5lbWl0KCdpbnN0YWxsU3VjY2VzcycsIHtcclxuICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9TVUNDRVNTJyksXHJcbiAgICAgICAgYm9keTogWy4uLnBrZ05hbWVMaXN0LCAuLi5pbnN0YWxsZWRQbHVnaW5zXVxyXG4gICAgICB9KVxyXG4gICAgICBjb25zdCByZXM6IElQbHVnaW5IYW5kbGVyUmVzdWx0PHRydWU+ID0ge1xyXG4gICAgICAgIHN1Y2Nlc3M6IHRydWUsXHJcbiAgICAgICAgYm9keTogWy4uLnBrZ05hbWVMaXN0LCAuLi5pbnN0YWxsZWRQbHVnaW5zXVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiByZXNcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIHVuaW5zdGFsbCAocGx1Z2luczogc3RyaW5nW10pOiBQcm9taXNlPElQbHVnaW5IYW5kbGVyUmVzdWx0PGJvb2xlYW4+PiB7XHJcbiAgICBjb25zdCBwcm9jZXNzUGx1Z2lucyA9IHBsdWdpbnMubWFwKChpdGVtOiBzdHJpbmcpID0+IGhhbmRsZVBsdWdpbk5hbWVQcm9jZXNzKHRoaXMuY3R4LCBpdGVtKSkuZmlsdGVyKGl0ZW0gPT4gaXRlbS5zdWNjZXNzKVxyXG4gICAgY29uc3QgcGtnTmFtZUxpc3QgPSBwcm9jZXNzUGx1Z2lucy5tYXAoaXRlbSA9PiBpdGVtLnBrZ05hbWUpXHJcbiAgICBpZiAocGtnTmFtZUxpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICAvLyB1bmluc3RhbGwgcGx1Z2lucyBtdXN0IHVzZSBwa2dOYW1lTGlzdDpcclxuICAgICAgLy8gbnBtIHVuaW5zdGFsbCB3aWxsIHVzZSB0aGUgcGFja2FnZS5qc29uJ3MgbmFtZVxyXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmV4ZWNDb21tYW5kKCd1bmluc3RhbGwnLCBwa2dOYW1lTGlzdCwgdGhpcy5jdHguYmFzZURpcilcclxuICAgICAgaWYgKCFyZXN1bHQuY29kZSkge1xyXG4gICAgICAgIHBrZ05hbWVMaXN0LmZvckVhY2goKHBsdWdpbk5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jdHgucGx1Z2luTG9hZGVyLnVucmVnaXN0ZXJQbHVnaW4ocGx1Z2luTmFtZSlcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuY3R4LmxvZy5zdWNjZXNzKHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9TVUNDRVNTJykpXHJcbiAgICAgICAgdGhpcy5jdHguZW1pdCgndW5pbnN0YWxsU3VjY2VzcycsIHtcclxuICAgICAgICAgIHRpdGxlOiB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfU1VDQ0VTUycpLFxyXG4gICAgICAgICAgYm9keTogcGtnTmFtZUxpc3RcclxuICAgICAgICB9KVxyXG4gICAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8dHJ1ZT4gPSB7XHJcbiAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxyXG4gICAgICAgICAgYm9keTogcGtnTmFtZUxpc3RcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGVyciA9IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfUkVBU09OJywge1xyXG4gICAgICAgICAgY29kZTogYCR7cmVzdWx0LmNvZGV9YCxcclxuICAgICAgICAgIGRhdGE6IHJlc3VsdC5kYXRhXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoZXJyKVxyXG4gICAgICAgIHRoaXMuY3R4LmVtaXQoJ3VuaW5zdGFsbEZhaWxlZCcsIHtcclxuICAgICAgICAgIHRpdGxlOiB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEJyksXHJcbiAgICAgICAgICBib2R5OiBlcnJcclxuICAgICAgICB9KVxyXG4gICAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8ZmFsc2U+ID0ge1xyXG4gICAgICAgICAgc3VjY2VzczogZmFsc2UsXHJcbiAgICAgICAgICBib2R5OiBlcnJcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBlcnIgPSB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEX1ZBTElEJylcclxuICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGVycilcclxuICAgICAgdGhpcy5jdHguZW1pdCgndW5pbnN0YWxsRmFpbGVkJywge1xyXG4gICAgICAgIHRpdGxlOiB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEJyksXHJcbiAgICAgICAgYm9keTogZXJyXHJcbiAgICAgIH0pXHJcbiAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8ZmFsc2U+ID0ge1xyXG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxyXG4gICAgICAgIGJvZHk6IGVyclxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiByZXNcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIHVwZGF0ZSAocGx1Z2luczogc3RyaW5nW10sIG9wdGlvbnM6IElQbHVnaW5IYW5kbGVyT3B0aW9ucyA9IHt9LCBlbnY/OiBJUHJvY2Vzc0Vudik6IFByb21pc2U8SVBsdWdpbkhhbmRsZXJSZXN1bHQ8Ym9vbGVhbj4+IHtcclxuICAgIGNvbnN0IHByb2Nlc3NQbHVnaW5zID0gcGx1Z2lucy5tYXAoKGl0ZW06IHN0cmluZykgPT4gaGFuZGxlUGx1Z2luTmFtZVByb2Nlc3ModGhpcy5jdHgsIGl0ZW0pKS5maWx0ZXIoaXRlbSA9PiBpdGVtLnN1Y2Nlc3MpXHJcbiAgICBjb25zdCBwa2dOYW1lTGlzdCA9IHByb2Nlc3NQbHVnaW5zLm1hcChpdGVtID0+IGl0ZW0ucGtnTmFtZSlcclxuICAgIGlmIChwa2dOYW1lTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIC8vIHVwZGF0ZSBwbHVnaW5zIG11c3QgdXNlIHBrZ05hbWVMaXN0OlxyXG4gICAgICAvLyBucG0gdXBkYXRlIHdpbGwgdXNlIHRoZSBwYWNrYWdlLmpzb24ncyBuYW1lXHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZXhlY0NvbW1hbmQoJ3VwZGF0ZScsIHBrZ05hbWVMaXN0LCB0aGlzLmN0eC5iYXNlRGlyLCBvcHRpb25zLCBlbnYpXHJcbiAgICAgIGlmICghcmVzdWx0LmNvZGUpIHtcclxuICAgICAgICB0aGlzLmN0eC5sb2cuc3VjY2Vzcyh0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfU1VDQ0VTUycpKVxyXG4gICAgICAgIHRoaXMuY3R4LmVtaXQoJ3VwZGF0ZVN1Y2Nlc3MnLCB7XHJcbiAgICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX1NVQ0NFU1MnKSxcclxuICAgICAgICAgIGJvZHk6IHBrZ05hbWVMaXN0XHJcbiAgICAgICAgfSlcclxuICAgICAgICBjb25zdCByZXM6IElQbHVnaW5IYW5kbGVyUmVzdWx0PHRydWU+ID0ge1xyXG4gICAgICAgICAgc3VjY2VzczogdHJ1ZSxcclxuICAgICAgICAgIGJvZHk6IHBrZ05hbWVMaXN0XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXNcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBlcnIgPSB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEX1JFQVNPTicsIHtcclxuICAgICAgICAgIGNvZGU6IGAke3Jlc3VsdC5jb2RlfWAsXHJcbiAgICAgICAgICBkYXRhOiByZXN1bHQuZGF0YVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGVycilcclxuICAgICAgICB0aGlzLmN0eC5lbWl0KCd1cGRhdGVGYWlsZWQnLCB7XHJcbiAgICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRCcpLFxyXG4gICAgICAgICAgYm9keTogZXJyXHJcbiAgICAgICAgfSlcclxuICAgICAgICBjb25zdCByZXM6IElQbHVnaW5IYW5kbGVyUmVzdWx0PGZhbHNlPiA9IHtcclxuICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxyXG4gICAgICAgICAgYm9keTogZXJyXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXNcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgZXJyID0gdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRF9WQUxJRCcpXHJcbiAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihlcnIpXHJcbiAgICAgIHRoaXMuY3R4LmVtaXQoJ3VwZGF0ZUZhaWxlZCcsIHtcclxuICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRCcpLFxyXG4gICAgICAgIGJvZHk6IGVyclxyXG4gICAgICB9KVxyXG4gICAgICBjb25zdCByZXM6IElQbHVnaW5IYW5kbGVyUmVzdWx0PGZhbHNlPiA9IHtcclxuICAgICAgICBzdWNjZXNzOiBmYWxzZSxcclxuICAgICAgICBib2R5OiBlcnJcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gcmVzXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGV4ZWNDb21tYW5kIChjbWQ6IHN0cmluZywgbW9kdWxlczogc3RyaW5nW10sIHdoZXJlOiBzdHJpbmcsIG9wdGlvbnM6IElQbHVnaW5IYW5kbGVyT3B0aW9ucyA9IHt9LCBlbnY6IElQcm9jZXNzRW52ID0ge30pOiBQcm9taXNlPElSZXN1bHQ+IHtcclxuICAgIC8vIG9wdGlvbnMgZmlyc3RcclxuICAgIGNvbnN0IHJlZ2lzdHJ5ID0gb3B0aW9ucy5yZWdpc3RyeSB8fCB0aGlzLmN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8c3RyaW5nPj4oJ3NldHRpbmdzLnJlZ2lzdHJ5JylcclxuICAgIGNvbnN0IHByb3h5ID0gb3B0aW9ucy5wcm94eSB8fCB0aGlzLmN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8c3RyaW5nPj4oJ3NldHRpbmdzLnByb3h5JylcclxuICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZTogYW55KTogdm9pZCA9PiB7XHJcbiAgICAgIGxldCBhcmdzID0gW2NtZF0uY29uY2F0KG1vZHVsZXMpLmNvbmNhdCgnLS1jb2xvcj1hbHdheXMnKS5jb25jYXQoJy0tc2F2ZScpXHJcbiAgICAgIGlmIChyZWdpc3RyeSkge1xyXG4gICAgICAgIGFyZ3MgPSBhcmdzLmNvbmNhdChgLS1yZWdpc3RyeT0ke3JlZ2lzdHJ5fWApXHJcbiAgICAgIH1cclxuICAgICAgaWYgKHByb3h5KSB7XHJcbiAgICAgICAgYXJncyA9IGFyZ3MuY29uY2F0KGAtLXByb3h5PSR7cHJveHl9YClcclxuICAgICAgfVxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IG5wbSA9IHNwYXduKCducG0nLCBhcmdzLCB7IGN3ZDogd2hlcmUsIGVudjogT2JqZWN0LmFzc2lnbih7fSwgcHJvY2Vzcy5lbnYsIGVudikgfSlcclxuXHJcbiAgICAgICAgbGV0IG91dHB1dCA9ICcnXHJcbiAgICAgICAgbnBtLnN0ZG91dD8ub24oJ2RhdGEnLCAoZGF0YTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICBvdXRwdXQgKz0gZGF0YVxyXG4gICAgICAgIH0pLnBpcGUocHJvY2Vzcy5zdGRvdXQpXHJcblxyXG4gICAgICAgIG5wbS5zdGRlcnI/Lm9uKCdkYXRhJywgKGRhdGE6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgb3V0cHV0ICs9IGRhdGFcclxuICAgICAgICB9KS5waXBlKHByb2Nlc3Muc3RkZXJyKVxyXG5cclxuICAgICAgICBucG0ub24oJ2Nsb3NlJywgKGNvZGU6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgaWYgKCFjb2RlKSB7XHJcbiAgICAgICAgICAgIHJlc29sdmUoeyBjb2RlOiAwLCBkYXRhOiBvdXRwdXQgfSlcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJlc29sdmUoeyBjb2RlOiBjb2RlLCBkYXRhOiBvdXRwdXQgfSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIC8vIGZvciB1c2VycyB3aG8gaGF2ZW4ndCBpbnN0YWxsZWQgbm9kZS5qc1xyXG4gICAgICAgIG5wbS5vbignZXJyb3InLCAoZXJyOiBFcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGVycilcclxuICAgICAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcignTlBNIGlzIG5vdCBpbnN0YWxsZWQnKVxyXG4gICAgICAgICAgdGhpcy5jdHguZW1pdChJQnVpbGRJbkV2ZW50LkZBSUxFRCwgJ05QTSBpcyBub3QgaW5zdGFsbGVkJylcclxuICAgICAgICB9KVxyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGUgYXMgRXJyb3IpXHJcbiAgICAgICAgdGhpcy5jdHguZW1pdChJQnVpbGRJbkV2ZW50LkZBSUxFRCwgZSlcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiB0cmFuc2Zvcm0gdGhlIGlucHV0IHBsdWdpbiBuYW1lIG9yIHBhdGggc3RyaW5nIHRvIHZhbGlkIHJlc3VsdFxyXG4gKiBAcGFyYW0gY3R4XHJcbiAqIEBwYXJhbSBuYW1lT3JQYXRoXHJcbiAqL1xyXG5jb25zdCBoYW5kbGVQbHVnaW5OYW1lUHJvY2VzcyA9IChjdHg6IElQaWNHbywgbmFtZU9yUGF0aDogc3RyaW5nKTogSVBsdWdpblByb2Nlc3NSZXN1bHQgPT4ge1xyXG4gIGNvbnN0IHJlcyA9IHtcclxuICAgIHN1Y2Nlc3M6IGZhbHNlLFxyXG4gICAgZnVsbE5hbWU6ICcnLFxyXG4gICAgcGtnTmFtZTogJydcclxuICB9XHJcbiAgY29uc3QgcmVzdWx0ID0gZ2V0UHJvY2Vzc1BsdWdpbk5hbWUobmFtZU9yUGF0aCwgY3R4LmxvZylcclxuICBpZiAoIXJlc3VsdCkge1xyXG4gICAgcmV0dXJuIHJlc1xyXG4gIH1cclxuICAvLyBmaXJzdCBnZXQgcmVzdWx0IHRoZW4gZG8gdGhpcyBwcm9jZXNzXHJcbiAgLy8gb3Igc29tZSBlcnJvciB3aWxsIGxvZyB0d2ljZVxyXG4gIGNvbnN0IHBrZ05hbWUgPSBnZXROb3JtYWxQbHVnaW5OYW1lKHJlc3VsdCwgY3R4LmxvZylcclxuICBpZiAoIXBrZ05hbWUpIHtcclxuICAgIHJldHVybiByZXNcclxuICB9XHJcbiAgcmV0dXJuIHtcclxuICAgIHN1Y2Nlc3M6IHRydWUsXHJcbiAgICBmdWxsTmFtZTogcmVzdWx0LFxyXG4gICAgcGtnTmFtZVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgUGx1Z2luSGFuZGxlclxyXG4iLCJpbXBvcnQgeyBaSF9DTiwgSUxvY2FsZXNLZXksIElMb2NhbGVzIH0gZnJvbSAnLi96aC1DTidcclxuaW1wb3J0IHsgbWVyZ2UgfSBmcm9tICdsb2Rhc2gnXHJcbmltcG9ydCB7IElQaWNHbyB9IGZyb20gJy4uL3R5cGVzJ1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xyXG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnXHJcbmltcG9ydCB5YW1sIGZyb20gJ2pzLXlhbWwnXHJcblxyXG5pbXBvcnQgeyBPYmplY3RBZGFwdGVyLCBJMThuIH0gZnJvbSAnQHBpY2dvL2kxOG4nXHJcbmltcG9ydCB7IElTdHJpbmdLZXlNYXAsIElJMThuTWFuYWdlciB9IGZyb20gJy4uL3R5cGVzL2luZGV4J1xyXG5pbXBvcnQgeyBJTG9jYWxlIH0gZnJvbSAnQHBpY2dvL2kxOG4vZGlzdC90eXBlcydcclxuaW1wb3J0IHsgRU4gfSBmcm9tICcuL2VuJ1xyXG5pbXBvcnQgeyBaSF9UVyB9IGZyb20gJy4vemgtVFcnXHJcblxyXG5jb25zdCBsYW5ndWFnZUxpc3Q6IElTdHJpbmdLZXlNYXA8SVN0cmluZ0tleU1hcDxzdHJpbmc+PiA9IHtcclxuICAnemgtQ04nOiBaSF9DTixcclxuICAnemgtVFcnOiBaSF9UVyxcclxuICBlbjogRU5cclxufVxyXG5cclxuY2xhc3MgSTE4bk1hbmFnZXIgaW1wbGVtZW50cyBJSTE4bk1hbmFnZXIge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgaTE4bjogSTE4blxyXG4gIHByaXZhdGUgcmVhZG9ubHkgb2JqZWN0QWRhcHRlcjogT2JqZWN0QWRhcHRlclxyXG4gIHByaXZhdGUgcmVhZG9ubHkgY3R4OiBJUGljR29cclxuICBjb25zdHJ1Y3RvciAoY3R4OiBJUGljR28pIHtcclxuICAgIHRoaXMuY3R4ID0gY3R4XHJcbiAgICB0aGlzLm9iamVjdEFkYXB0ZXIgPSBuZXcgT2JqZWN0QWRhcHRlcihsYW5ndWFnZUxpc3QpXHJcbiAgICBsZXQgbGFuZ3VhZ2UgPSB0aGlzLmN0eC5nZXRDb25maWc8c3RyaW5nPignc2V0dGluZ3MubGFuZ3VhZ2UnKSB8fCAnemgtQ04nXHJcbiAgICBpZiAoIWxhbmd1YWdlTGlzdFtsYW5ndWFnZV0pIHtcclxuICAgICAgbGFuZ3VhZ2UgPSAnemgtQ04nIC8vIHVzZSBkZWZhdWx0XHJcbiAgICB9XHJcbiAgICB0aGlzLmkxOG4gPSBuZXcgSTE4bih7XHJcbiAgICAgIGFkYXB0ZXI6IHRoaXMub2JqZWN0QWRhcHRlcixcclxuICAgICAgZGVmYXVsdExhbmd1YWdlOiBsYW5ndWFnZVxyXG4gICAgfSlcclxuICAgIHRoaXMubG9hZE91dHRlckkxOG4oKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsb2FkT3V0dGVySTE4biAoKTogdm9pZCB7XHJcbiAgICBjb25zdCBpMThuRm9sZGVyID0gdGhpcy5nZXRPdXR0ZXJJMThuRm9sZGVyKClcclxuICAgIGNvbnN0IGZpbGVzID0gZnMucmVhZGRpclN5bmMoaTE4bkZvbGRlciwge1xyXG4gICAgICB3aXRoRmlsZVR5cGVzOiB0cnVlXHJcbiAgICB9KVxyXG4gICAgZmlsZXMuZm9yRWFjaChmaWxlID0+IHtcclxuICAgICAgaWYgKGZpbGUuaXNGaWxlKCkgJiYgZmlsZS5uYW1lLmVuZHNXaXRoKCcueW1sJykpIHtcclxuICAgICAgICBjb25zdCBpMThuRmlsZVBhdGggPSBwYXRoLmpvaW4oaTE4bkZvbGRlciwgZmlsZS5uYW1lKVxyXG4gICAgICAgIGNvbnN0IGkxOG5GaWxlID0gZnMucmVhZEZpbGVTeW5jKGkxOG5GaWxlUGF0aCwgJ3V0ZjgnKVxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBjb25zdCBpMThuRmlsZU9iaiA9IHlhbWwubG9hZChpMThuRmlsZSkgYXMgSUxvY2FsZXNcclxuICAgICAgICAgIGxhbmd1YWdlTGlzdFtmaWxlLm5hbWUucmVwbGFjZSgvXFwueW1sJC8sICcnKV0gPSBpMThuRmlsZU9ialxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldE91dHRlckkxOG5Gb2xkZXIgKCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBpMThuRm9sZGVyID0gcGF0aC5qb2luKHRoaXMuY3R4LmJhc2VEaXIsICdpMThuLWNsaScpXHJcbiAgICBpZiAoIWZzLnBhdGhFeGlzdHNTeW5jKGkxOG5Gb2xkZXIpKSB7XHJcbiAgICAgIGZzLmVuc3VyZURpclN5bmMoaTE4bkZvbGRlcilcclxuICAgIH1cclxuICAgIHJldHVybiBpMThuRm9sZGVyXHJcbiAgfVxyXG5cclxuICB0cmFuc2xhdGU8VCBleHRlbmRzIHN0cmluZz4oa2V5OiBJTG9jYWxlc0tleSB8IFQsIGFyZ3M/OiBJU3RyaW5nS2V5TWFwPHN0cmluZz4pOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuaTE4bi50cmFuc2xhdGUoa2V5LCBhcmdzKSB8fCBrZXlcclxuICB9XHJcblxyXG4gIHNldExhbmd1YWdlIChsYW5ndWFnZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmkxOG4uc2V0TGFuZ3VhZ2UobGFuZ3VhZ2UpXHJcbiAgICB0aGlzLmN0eC5zYXZlQ29uZmlnKHtcclxuICAgICAgJ3NldHRpbmdzLmxhbmd1YWdlJzogbGFuZ3VhZ2VcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBhZGRMb2NhbGUgKGxhbmd1YWdlOiBzdHJpbmcsIGxvY2FsZXM6IElMb2NhbGUpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IG9yaWdpbkxvY2FsZXMgPSB0aGlzLm9iamVjdEFkYXB0ZXIuZ2V0TG9jYWxlKGxhbmd1YWdlKVxyXG4gICAgaWYgKCFvcmlnaW5Mb2NhbGVzKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgfVxyXG4gICAgY29uc3QgbmV3TG9jYWxlcyA9IG1lcmdlKG9yaWdpbkxvY2FsZXMsIGxvY2FsZXMpXHJcbiAgICB0aGlzLm9iamVjdEFkYXB0ZXIuc2V0TG9jYWxlKGxhbmd1YWdlLCBuZXdMb2NhbGVzKVxyXG4gICAgcmV0dXJuIHRydWVcclxuICB9XHJcblxyXG4gIGFkZExhbmd1YWdlIChsYW5ndWFnZTogc3RyaW5nLCBsb2NhbGVzOiBJTG9jYWxlKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBvcmlnaW5Mb2NhbGVzID0gdGhpcy5vYmplY3RBZGFwdGVyLmdldExvY2FsZShsYW5ndWFnZSlcclxuICAgIGlmIChvcmlnaW5Mb2NhbGVzKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgfVxyXG4gICAgdGhpcy5vYmplY3RBZGFwdGVyLnNldExvY2FsZShsYW5ndWFnZSwgbG9jYWxlcylcclxuICAgIGxhbmd1YWdlTGlzdFtsYW5ndWFnZV0gPSBsb2NhbGVzXHJcbiAgICByZXR1cm4gdHJ1ZVxyXG4gIH1cclxuXHJcbiAgZ2V0TGFuZ3VhZ2VMaXN0ICgpOiBzdHJpbmdbXSB7XHJcbiAgICByZXR1cm4gT2JqZWN0LmtleXMobGFuZ3VhZ2VMaXN0KVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IHtcclxuICBJMThuTWFuYWdlclxyXG59XHJcbiIsIi8qIGVzbGludC1kaXNhYmxlIG5vLXRlbXBsYXRlLWN1cmx5LWluLXN0cmluZyAqL1xyXG5leHBvcnQgY29uc3QgWkhfQ04gPSB7XHJcbiAgVVBMT0FEX0ZBSUxFRDogJ+S4iuS8oOWksei0pScsXHJcbiAgQ0hFQ0tfU0VUVElOR1M6ICfor7fmo4Dmn6XkvaDnmoTphY3nva7pobnmmK/lkKbmraPnoa4nLFxyXG4gIENIRUNLX1NFVFRJTkdTX0FORF9ORVRXT1JLOiAn6K+35qOA5p+l5L2g55qE6YWN572u6aG55Lul5Y+K572R57ucJyxcclxuICBVUExPQURfRkFJTEVEX1JFQVNPTjogJ+mUmeivr+egge+8miR7Y29kZX3vvIzor7fmiZPlvIDmtY/op4jlmajnspjotLTlnLDlnYDmn6XnnIvnm7jlhbPljp/lm6AnLFxyXG4gIFNFUlZFUl9FUlJPUjogJ+acjeWKoeerr+WHuumUme+8jOivt+mHjeivlScsXHJcbiAgQVVUSF9GQUlMRUQ6ICforqTor4HlpLHotKUnLFxyXG5cclxuICAvLyBzbW1zXHJcbiAgUElDQkVEX1NNTVM6ICdTTS5NUycsXHJcbiAgUElDQkVEX1NNTVNfVE9LRU46ICforr7lrppUb2tlbicsXHJcbiAgUElDQkVEX1NNTVNfQkFDS1VQX0RPTUFJTjogJ+Wkh+eUqOS4iuS8oOWfn+WQjScsXHJcbiAgUElDQkVEX1NNTVNfTUVTU0FHRV9CQUNLVVBfRE9NQUlOOiAn5L6L5aaCIHNtbXMuYXBwJyxcclxuXHJcbiAgLy8gbG9jYWxcclxuICBQSUNCRURfTE9DQUw6ICfmnKzlnLDkuIrkvKAnLFxyXG4gIFBJQ0JFRF9MT0NBTF9QQVRIOiAn6K6+5a6a6Lev5b6EJyxcclxuICBQSUNCRURfTE9DQUxfTUVTU0FHRV9QQVRIOiAn5L6L5aaCIC91c3IvbG9jYWwvaW1hZ2VzLycsXHJcbiAgUElDQkVEX0xPQ0FMX0NVU1RPTVVSTDogJ+iuvuWumuiHquWumuS5ieWfn+WQjScsXHJcbiAgUElDQkVEX0xPQ0FMX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaCIGh0dHBzOi8vdGVzdC5jb20nLFxyXG4gIFBJQ0JFRF9MT0NBTF9XRUJQQVRIOiAn6K6+5a6a572R56uZ6Lev5b6EJyxcclxuICBQSUNCRURfTE9DQUxfTUVTU0FHRV9XRUJQQVRIOiAn55So5LqO5ou85o6l572R5Z2A6Lev5b6EJyxcclxuXHJcbiAgLy8gQWxpLWNsb3VkXHJcbiAgUElDQkVEX0FMSUNMT1VEOiAn6Zi/6YeM5LqRT1NTJyxcclxuICBQSUNCRURfQUxJQ0xPVURfQUNDRVNTS0VZSUQ6ICforr7lrppLZXlJZCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWVNFQ1JFVDogJ+iuvuWumktleVNlY3JldCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0JVQ0tFVDogJ+iuvuWumkJ1Y2tldCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0FSRUE6ICforr7lrprlrZjlgqjljLrln58nLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9QQVRIOiAn6K6+5a6a5a2Y5YKo6Lev5b6EJyxcclxuICBQSUNCRURfQUxJQ0xPVURfQ1VTVE9NVVJMOiAn6K6+5a6a6Ieq5a6a5LmJ5Z+f5ZCNJyxcclxuICBQSUNCRURfQUxJQ0xPVURfT1BUSU9OUzogJ+iuvuWumue9keWdgOWQjue8gCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQVJFQTogJ+S+i+Wmgu+8mm9zcy1jbi1iZWlqaW5nJyxcclxuICBQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9QQVRIOiAn5L6L5aaC77yadGVzdC8nLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJo/eC1vc3MtcHJvY2Vzcz14eHgnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxyXG5cclxuICAvLyBUZW5jZW50LWNsb3VkXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRDogJ+iFvuiur+S6kUNPUycsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9WRVJTSU9OOiAnQ09T54mI5pysJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVElEOiAn6K6+5a6aU2VjcmV0SWQnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUS0VZOiAn6K6+5a6aU2VjcmV0S2V5JyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0FQUElEOiAn6K6+5a6aQXBwSWQnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQlVDS0VUOiAn6K6+5a6aQnVja2V0JyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0FSRUE6ICforr7lrprlrZjlgqjljLrln58nLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfRU5EUE9JTlQ6ICforr7lrprmjqXlhaXngrknLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfUEFUSDogJ+iuvuWumuWtmOWCqOi3r+W+hCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9PUFRJT05TOiAn6K6+5a6a572R5Z2A5ZCO57yAJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0NVU1RPTVVSTDogJ+iuvuWumuiHquWumuS5ieWfn+WQjScsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FQUElEOiAn5L6L5aaC77yaMTIzNDU2Nzg5MCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FSRUE6ICfkvovlpoLvvJphcC1iZWlqaW5nJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly90ZXN0LmNvbScsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJo/aW1hZ2VNb2dyMicsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0VORFBPSU5UOiAn5L6L5aaC77yaY29zLWludGVybmFsLmFjY2VsZXJhdGUudGVuY2VudGNvcy5jbicsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNOiAn5p6B5pm65Y6L57ypJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fVElQOiAn5Zu+54mH5p6B5pm65Y6L57yp77yM6K+m5oOF6K+35Y+C6ICDW+aWh+aho+ivtOaYjl0oaHR0cHM6Ly9jbG91ZC50ZW5jZW50LmNvbS9kb2N1bWVudC9wcm9kdWN0LzQzNi80OTI1OSknLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9DT05GSVJNOiAn5byA5ZCvJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fQ0FOQ0VMOiAn5YWz6ZetJyxcclxuXHJcbiAgLy8gR2l0SHViXHJcbiAgUElDQkVEX0dJVEhVQjogJ0dpdEh1YicsXHJcbiAgUElDQkVEX0dJVEhVQl9UT0tFTjogJ+iuvuWumlRva2VuJyxcclxuICBQSUNCRURfR0lUSFVCX1JFUE86ICforr7lrprku5PlupPlkI0nLFxyXG4gIFBJQ0JFRF9HSVRIVUJfUEFUSDogJ+iuvuWumuWtmOWCqOi3r+W+hCcsXHJcbiAgUElDQkVEX0dJVEhVQl9CUkFOQ0g6ICforr7lrprliIbmlK/lkI0nLFxyXG4gIFBJQ0JFRF9HSVRIVUJfQ1VTVE9NVVJMOiAn6K6+5a6a6Ieq5a6a5LmJ5Z+f5ZCNJyxcclxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfUkVQTzogJ+agvOW8j++8mnVzZXJuYW1lL3JlcG8nLFxyXG4gIFBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9CUkFOQ0g6ICfkvovlpoLvvJptYWluJyxcclxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcclxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly90ZXN0LmNvbScsXHJcblxyXG4gIC8vIHFpbml1XHJcbiAgUElDQkVEX1FJTklVOiAn5LiD54mb5LqRJyxcclxuICBQSUNCRURfUUlOSVVfQUNDRVNTS0VZOiAn6K6+5a6aQWNjZXNzS2V5JyxcclxuICBQSUNCRURfUUlOSVVfU0VDUkVUS0VZOiAn6K6+5a6aU2VjcmV0S2V5JyxcclxuICBQSUNCRURfUUlOSVVfQlVDS0VUOiAn6K6+5a6aQnVja2V0JyxcclxuICBQSUNCRURfUUlOSVVfUEFUSDogJ+iuvuWumuWtmOWCqOi3r+W+hCcsXHJcbiAgUElDQkVEX1FJTklVX1VSTDogJ+iuvuWumuiuv+mXrue9keWdgCcsXHJcbiAgUElDQkVEX1FJTklVX09QVElPTlM6ICforr7lrprnvZHlnYDlkI7nvIAnLFxyXG4gIFBJQ0JFRF9RSU5JVV9BUkVBOiAn6K6+5a6a5a2Y5YKo5Yy65Z+fJyxcclxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9QQVRIOiAn5L6L5aaC77yadGVzdC8nLFxyXG4gIFBJQ0JFRF9RSU5JVV9NRVNTQUdFX0FSRUE6ICfkvovlpoLvvJp6MCcsXHJcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfT1BUSU9OUzogJ+S+i+Wmgu+8mj9pbWFnZXNsaW0nLFxyXG4gIFBJQ0JFRF9RSU5JVV9NRVNTQUdFX1VSTDogJ+S+i+Wmgu+8mmh0dHBzOi8veHh4Lnl5eS5nbGIuY2xvdWRkbi5jb20nLFxyXG5cclxuICAvLyBpbWd1clxyXG4gIFBJQ0JFRF9JTUdVUjogJ0ltZ3VyJyxcclxuICBQSUNCRURfSU1HVVJfQ0xJRU5USUQ6ICforr7lrppDbGllbnRJZCcsXHJcbiAgUElDQkVEX0lNR1VSX1VTRVJOQU1FOiAn6K6+5a6a55So5oi35ZCNJyxcclxuICBQSUNCRURfSU1HVVJfQUNDRVNTX1RPS0VOOiAn6K6+5a6aYWNjZXNzVG9rZW4nLFxyXG4gIFBJQ0JFRF9JTUdVUl9BTEJVTTogJ+iuvuWumuebuOWGjOWQjScsXHJcbiAgUElDQkVEX0lNR1VSX1BST1hZOiAn6K6+5a6a5Luj55CGJyxcclxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9DTElFTlRJRDogJ+WMv+WQjeS4iuS8oOaXtuWhq+WGmScsXHJcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfVVNFUk5BTUU6ICfpnIDopoHkuIrkvKDliLDotKbmiLfml7bloavlhpknLFxyXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX0FDQ0VTU19UT0tFTjogJ+mcgOimgeS4iuS8oOWIsOi0puaIt+aXtuWhq+WGmScsXHJcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfQUxCVU06ICfkvovlpoLvvJp0ZXN0JyxcclxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9QUk9YWTogJ+S+i+Wmgu+8mmh0dHA6Ly8xMjcuMC4wLjE6MTA4MCcsXHJcblxyXG4gIC8vIHVweXVuXHJcbiAgUElDQkVEX1VQWVVOOiAn5Y+I5ouN5LqRJyxcclxuICBQSUNCRURfVVBZVU5fQlVDS0VUOiAn6K6+5a6aQnVja2V0JyxcclxuICBQSUNCRURfVVBZVU5fT1BFUkFUT1I6ICforr7lrprmk43kvZzlkZgnLFxyXG4gIFBJQ0JFRF9VUFlVTl9QQVNTV09SRDogJ+iuvuWumuaTjeS9nOWRmOWvhueggScsXHJcbiAgUElDQkVEX1VQWVVOX1BBVEg6ICforr7lrprlrZjlgqjot6/lvoQnLFxyXG4gIFBJQ0JFRF9VUFlVTl9VUkw6ICforr7lrprliqDpgJ/ln5/lkI0nLFxyXG4gIFBJQ0JFRF9VUFlVTl9PUFRJT05TOiAn6K6+5a6a572R5Z2A5ZCO57yAJyxcclxuICBQSUNCRURfVVBZVU5fQU5USV9MRUVDSF9UT0tFTjogJ+iuvuWumumYsuebl+mTvlRva2VuJyxcclxuICBQSUNCRURfVVBZVU5fRVhQSVJFX1RJTUU6ICforr7lrprov4fmnJ/ml7bpl7Qo56eSKScsXHJcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfT1BFUkFUT1I6ICfkvovlpoLvvJptZScsXHJcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfUEFTU1dPUkQ6ICfovpPlhaXmk43kvZzlkZjlr4bnoIEnLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX1VSTDogJ+S+i+Wmgu+8mmh0dHA6Ly94eHgudGVzdC51cGNkbi5uZXQnLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJohaW1nc2xpbScsXHJcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcclxuXHJcbiAgLy8gd2ViZGF2cGxpc3RcclxuICBQSUNCRURfV0VCREFWUExJU1Q6ICdXZWJEQVYnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9IT1NUOiAn6K6+5a6a5o6l5Y+j572R5Z2AJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfU1NMRU5BQkxFRDogJ+WQr+eUqFNTTCcsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1VTRVJOQU1FOiAn6K6+5a6a55So5oi35ZCNJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfUEFTU1dPUkQ6ICforr7lrprlr4bnoIEnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9QQVRIOiAn6K6+5a6a5a2Y5YKo6Lev5b6EJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfV0VCU0lURV9QQVRIOiAn6K6+5a6a572R5Z2A6Lev5b6EJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfQ1VTVE9NVVJMOiAn6K6+5a6a6Ieq5a6a5LmJ5Z+f5ZCNJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9IT1NUOiAn5L6L5aaC77yaaHR0cHM6Ly9leGFtcGxlLmNvbS93ZWJkYXYnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1NTTEVOQUJMRUQ6ICfpnIDopoFIVFRQU+aXtuWQr+eUqCcsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfVVNFUk5BTUU6ICfkvovlpoLvvJptZScsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfUEFTU1dPUkQ6ICfovpPlhaXlr4bnoIEnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1BBVEg6ICfkvovlpoLvvJp0ZXN0LycsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfV0VCU0lURV9QQVRIOiAn5ou85o6l572R5Z2A5pe25L2/55SoJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9DVVNUT01VUkw6ICfkvovlpoLvvJpodHRwczovL3Rlc3QuY29tJyxcclxuXHJcbiAgLy8gc2Z0cHBsaXN0XHJcbiAgUElDQkVEX1NGVFBQTElTVDogJ+WGhee9rlNGVFAnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfSE9TVDogJ+iuvuWumuS4u+acuicsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9QT1JUOiAn6K6+5a6a56uv5Y+jJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX1VTRVJOQU1FOiAn6K6+5a6a55So5oi35ZCNJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX1BBU1NXT1JEOiAn6K6+5a6a5a+G56CBJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX1BSSVZBVEVLRVk6ICforr7lrprnp4HpkqUnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfUFJJVkFURUtFWV9QQVNTUEhSQVNFOiAn6K6+5a6a56eB6ZKl5a+G56CBJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX1VQTE9BRFBBVEg6ICforr7lrprkuIrkvKDot6/lvoQnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfQ1VTVE9NVVJMOiAn6K6+5a6a6Ieq5a6a5LmJ5Z+f5ZCNJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX1dFQlNJVEVfUEFUSDogJ+iuvuWumue9keermei3r+W+hCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9GSUxFX1VTRVI6ICforr7lrprmlofku7bnlKjmiLc657uEJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX0ZJTEVfTU9ERTogJ+iuvuWumuaWh+S7tuadg+mZkCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9ESVJfTU9ERTogJ+iuvuWumuaWh+S7tuWkueadg+mZkCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0hPU1Q6ICfkvovlpoLvvJoxLjEuMS4zJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUE9SVDogJ+m7mOiupDIyJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUFJJVkFURUtFWTogJ+S+i+Wmgu+8mi9Vc2Vycy94eHgvLnNzaC9pZF9yc2EnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QUklWQVRFS0VZX1BBU1NQSFJBU0U6ICfovpPlhaXnp4HpkqXlr4bnoIEnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9VUExPQURQQVRIOiAn5L6L5aaC77yadGVzdC8nLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9DVVNUT01VUkw6ICfkvovlpoLvvJpodHRwczovL3Rlc3QuY29tJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfV0VCU0lURV9QQVRIOiAn5ou85o6l572R5Z2A5pe25L2/55SoJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRklMRV9VU0VSOiAn5L6L5aaC77yad3d3OmRhdGEnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9GSUxFX01PREU6ICfkvovlpoLvvJowNjY0JyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRElSX01PREU6ICfkvovlpoLvvJowNzc1JyxcclxuXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfSVNBRERXQVRFUk1BUks6ICfmmK/lkKbmt7vliqDmsLTljbAnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfSVNBRERXQVRFUk1BUks6ICfpnIDopoHmt7vliqDmsLTljbDml7blkK/nlKgnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RZUEU6ICforr7lrprmsLTljbDnsbvlnosnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLVFlQRTogJ+ivt+mAieaLqeawtOWNsOexu+WeiycsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfSVNGVUxMU0NSRUVOV0FURVJNQVJLOiAn5piv5ZCm5YWo5bGP5rC05Y2wJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX0lTRlVMTFNDUkVFTldBVEVSTUFSSzogJ+mcgOimgeWFqOWxj+awtOWNsOaXtuWQr+eUqCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLREVHUkVFOiAn6K6+5a6a5rC05Y2w6KeS5bqmJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0RFR1JFRTogJ+ivt+i+k+WFpeaVsOWtlycsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVEVYVDogJ+iuvuWumuawtOWNsOaWh+WtlycsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktURVhUOiAn6K+36L6T5YWl5rC05Y2w5paH5a2XJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktURVhURk9OVFBBVEg6ICforr7lrprmsLTljbDlrZfkvZPmlofku7bot6/lvoQnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVFBBVEg6ICfor7fovpPlhaXmsLTljbDlrZfkvZPmlofku7bot6/lvoQnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0ZPTlRSQVRJTzogJ+iuvuWumuawtOWNsOebuOWvueS6juWbvueJh+eahOavlOS+iycsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UUkFUSU86ICfor7fovpPlhaUwLTHnmoTlsI/mlbAnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0ZPTlRDT0xPUjogJ+iuvuWumuawtOWNsOWtl+S9k+minOiJsicsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UQ09MT1I6ICfor7fovpPlhaVyZ2LpopzoibLlgLwnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0lNQUdFUEFUSDogJ+iuvuWumuawtOWNsOWbvueJh+i3r+W+hCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktJTUFHRVBBVEg6ICfor7fovpPlhaXmsLTljbDlm77niYfot6/lvoQnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1BPU0lUSU9OOiAn6K6+5a6a5rC05Y2w5L2N572uJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1BPU0lUSU9OOiAn6K+36YCJ5oup5rC05Y2w5L2N572uJyxcclxuXHJcbiAgQlVJTERJTl9SRU5BTUVfRk9STUFUOiAn6K6+5a6a6YeN5ZG95ZCN5qC85byPJyxcclxuICBCVUlMRElOX1JFTkFNRV9FTkFCTEU6ICfmmK/lkKblkK/nlKjph43lkb3lkI0nLFxyXG5cclxuICBCVUlMRElOX0NPTVBSRVNTX1FVQUxJVFk6ICforr7lrprlm77niYfotKjph48nLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9RVUFMSVRZOiAn6K+36L6T5YWlMC0xMDDnmoTmlbTmlbAnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNDT05WRVJUOiAn5piv5ZCm6L+b6KGM5qC85byP6L2s5o2iJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNDT05WRVJUOiAn6ZyA6KaB6L2s5o2i5pe25ZCv55SoJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0NPTlZFUlRGT1JNQVQ6ICforr7lrprovazmjaLmoLzlvI8nLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9DT05WRVJURk9STUFUOiAn6K+36YCJ5oup6L2s5o2i5qC85byPJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0lTUkVTSVpFOiAn5piv5ZCm6L+b6KGM5Zu+54mH57yp5pS+JyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRVNJWkU6ICfpnIDopoHnvKnmlL7ml7blkK/nlKgnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfUkVTSVpFV0lEVEg6ICforr7lrprnvKnmlL7lrr3luqYnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVXSURUSDogJ+ivt+i+k+WFpeaVsOWtlycsXHJcbiAgQlVJTERJTl9DT01QUkVTU19SRVNJWkVIRUlHSFQ6ICforr7lrprnvKnmlL7pq5jluqYnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVIRUlHSFQ6ICfor7fovpPlhaXmlbDlrZcnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkVCWVBFUkNFTlQ6ICfmmK/lkKbmjInnmb7liIbmr5Tov5vooYznvKnmlL4nLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFU0laRUJZUEVSQ0VOVDogJ+mcgOimgeaMieeZvuWIhuavlOe8qeaUvuaXtuWQr+eUqCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19SRVNJWkVQRVJDRU5UOiAn6K6+5a6a57yp5pS+55m+5YiG5q+UJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFUEVSQ0VOVDogJ+ivt+i+k+WFpeaVsOWtlycsXHJcbiAgQlVJTERJTl9DT01QUkVTU19TS0lQUkVTSVpFT0ZTTUFMTElNRzogJ+aYr+WQpui3s+i/h+Wwj+Wbvue8qeaUvicsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU1JPVEFURTogJ+aYr+WQpui/m+ihjOWbvueJh+aXi+i9rCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUk9UQVRFOiAn6ZyA6KaB5peL6L2s5pe25ZCv55SoJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX1JPVEFURURFR1JFRTogJ+iuvuWumuaXi+i9rOinkuW6picsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JPVEFURURFR1JFRTogJ+ivt+i+k+WFpeaVsOWtl++8jOWPr+S4uui0n+aVsCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU1JFTU9WRUVYSUY6ICfmmK/lkKbnp7vpmaRFWElG5L+h5oGvJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRU1PVkVFWElGOiAn6ZyA6KaB56e76ZmkRVhJRuS/oeaBr+aXtuWQr+eUqCcsXHJcblxyXG4gIC8vIFBsdWdpbiBIYW5kbGVyXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfU1VDQ0VTUzogJ+aPkuS7tuWuieijheaIkOWKnycsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEOiAn5o+S5Lu25a6J6KOF5aSx6LSlJyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRURfUkVBU09OOiAn5o+S5Lu25a6J6KOF5aSx6LSl77yM5aSx6LSl56CB5Li6JHtjb2Rlfe+8jOmUmeivr+aXpeW/l+S4uiBcXG4gJHtkYXRhfScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEX1BBVEg6ICfmj5Lku7blronoo4XlpLHotKXvvIzor7fovpPlhaXlkIjms5Xmj5Lku7blkI3miJblkIjms5Xlronoo4Xot6/lvoQnLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfU1VDQ0VTUzogJ+aPkuS7tuWNuOi9veaIkOWKnycsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRUQ6ICfmj5Lku7bljbjovb3lpLHotKUnLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEX1JFQVNPTjogJ+aPkuS7tuWNuOi9veWksei0pe+8jOWksei0peeggeS4uiR7Y29kZX3vvIzplJnor6/ml6Xlv5fkuLogXFxuICR7ZGF0YX0nLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEX1ZBTElEOiAn5o+S5Lu25Y246L295aSx6LSl77yM6K+36L6T5YWl5ZCI5rOV5o+S5Lu25ZCNJyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX1NVQ0NFU1M6ICfmj5Lku7bmm7TmlrDmiJDlip8nLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEOiAn5o+S5Lu25pu05paw5aSx6LSlJyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRF9SRUFTT046ICfmj5Lku7bmm7TmlrDlpLHotKXvvIzlpLHotKXnoIHkuLoke2NvZGV977yM6ZSZ6K+v5pel5b+X5Li6IFxcbiAke2RhdGF9JyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRF9WQUxJRDogJ+aPkuS7tuabtOaWsOWksei0pe+8jOivt+i+k+WFpeWQiOazleaPkuS7tuWQjSdcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgSUxvY2FsZXNLZXkgPSBrZXlvZiB0eXBlb2YgWkhfQ05cclxuZXhwb3J0IHR5cGUgSUxvY2FsZXMgPSB0eXBlb2YgWkhfQ05cclxuIiwiaW1wb3J0IHsgSUxvY2FsZXMgfSBmcm9tICcuL3poLUNOJ1xyXG5cclxuLyogZXNsaW50LWRpc2FibGUgbm8tdGVtcGxhdGUtY3VybHktaW4tc3RyaW5nICovXHJcbmV4cG9ydCBjb25zdCBaSF9UVzogSUxvY2FsZXMgPSB7XHJcbiAgVVBMT0FEX0ZBSUxFRDogJ+S4iuWCs+WkseaVlycsXHJcbiAgQ0hFQ0tfU0VUVElOR1M6ICfoq4vmqqLmn6XkvaDnmoToqK3lrprmmK/lkKbmraPnoronLFxyXG4gIENIRUNLX1NFVFRJTkdTX0FORF9ORVRXT1JLOiAn6KuL5qqi5p+l5L2g55qE6Kit5a6a5Y+K57ay6LevJyxcclxuICBVUExPQURfRkFJTEVEX1JFQVNPTjogJ+mMr+iqpOeivO+8miR7Y29kZX3vvIzoq4vmiZPplovngI/opr3lmajosrzkuIrlnLDlnYDmn6XnnIvnm7jpl5zljp/lm6AnLFxyXG4gIFNFUlZFUl9FUlJPUjogJ+S8uuacjeWZqOWHuumMr++8jOiri+mHjeippicsXHJcbiAgQVVUSF9GQUlMRUQ6ICfoqo3orYnlpLHmlZcnLFxyXG5cclxuICAvLyBzbW1zXHJcbiAgUElDQkVEX1NNTVM6ICdTTS5NUycsXHJcbiAgUElDQkVEX1NNTVNfVE9LRU46ICfoqK3lrppUb2tlbicsXHJcbiAgUElDQkVEX1NNTVNfQkFDS1VQX0RPTUFJTjogJ+WCmeeUqOS4iuWCs+e2suWdgCcsXHJcbiAgUElDQkVEX1NNTVNfTUVTU0FHRV9CQUNLVVBfRE9NQUlOOiAn5L6L5aaCIHNtbXMuYXBwJyxcclxuXHJcbiAgLy8gbG9jYWxcclxuICBQSUNCRURfTE9DQUw6ICfmnKzlnLAnLFxyXG4gIFBJQ0JFRF9MT0NBTF9QQVRIOiAn6Kit5a6a5YSy5a2Y6Lev5b6RJyxcclxuICBQSUNCRURfTE9DQUxfTUVTU0FHRV9QQVRIOiAn5L6L5aaCIC91c3IvbG9jYWwvaW1hZ2VzLycsXHJcbiAgUElDQkVEX0xPQ0FMX0NVU1RPTVVSTDogJ+ioreWumuiHquiogue2suWdgCcsXHJcbiAgUElDQkVEX0xPQ0FMX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaCIGh0dHBzOi8vdGVzdC5jb20nLFxyXG4gIFBJQ0JFRF9MT0NBTF9XRUJQQVRIOiAn6Kit5a6a57ay5Z2A6Lev5b6RJyxcclxuICBQSUNCRURfTE9DQUxfTUVTU0FHRV9XRUJQQVRIOiAn55So5LqO57ay6aCB6aGv56S655qE6Lev5b6RJyxcclxuXHJcbiAgLy8gQWxpLWNsb3VkXHJcbiAgUElDQkVEX0FMSUNMT1VEOiAn6Zi/6YeM5LqRT1NTJyxcclxuICBQSUNCRURfQUxJQ0xPVURfQUNDRVNTS0VZSUQ6ICfoqK3lrppLZXlJZCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWVNFQ1JFVDogJ+ioreWumktleVNlY3JldCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0JVQ0tFVDogJ+ioreWumkJ1Y2tldCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0FSRUE6ICfoqK3lrprlhLLlrZjljYDln58nLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9QQVRIOiAn6Kit5a6a5YSy5a2Y6Lev5b6RJyxcclxuICBQSUNCRURfQUxJQ0xPVURfQ1VTVE9NVVJMOiAn6Kit5a6a6Ieq6KiC57ay5Z2AJyxcclxuICBQSUNCRURfQUxJQ0xPVURfT1BUSU9OUzogJ+ioreWumue2suWdgOW+jOe2tCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQVJFQTogJ+S+i+Wmgu+8mm9zcy1jbi1iZWlqaW5nJyxcclxuICBQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9QQVRIOiAn5L6L5aaC77yadGVzdC8nLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJo/eC1vc3MtcHJvY2Vzcz14eHgnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxyXG5cclxuICAvLyBUZW5jZW50LWNsb3VkXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRDogJ+mosOioiuS6kUNPUycsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9WRVJTSU9OOiAnQ09T54mI5pysJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVElEOiAn6Kit5a6aU2VjcmV0SWQnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUS0VZOiAn6Kit5a6aU2VjcmV0S2V5JyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0FQUElEOiAn6Kit5a6aQXBwSWQnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQlVDS0VUOiAn6Kit5a6aQnVja2V0JyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0FSRUE6ICfoqK3lrprlhLLlrZjljYDln58nLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfRU5EUE9JTlQ6ICfoqK3lrprmjqXlhaXpu54nLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfUEFUSDogJ+ioreWumuWEsuWtmOi3r+W+kScsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9PUFRJT05TOiAn6Kit5a6a57ay5Z2A5b6M57a0JyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0NVU1RPTVVSTDogJ+ioreWumuiHquiogue2suWdgCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FQUElEOiAn5L6L5aaC77yaMTIzNDU2Nzg5MCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FSRUE6ICfkvovlpoLvvJphcC1iZWlqaW5nJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly90ZXN0LmNvbScsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJo/aW1hZ2VNb2dyMicsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0VORFBPSU5UOiAn5L6L5aaC77yaY29zLWludGVybmFsLmFjY2VsZXJhdGUudGVuY2VudGNvcy5jbicsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNOiAnU2V0IEltYWdlU2xpbScsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNX1RJUDogJ0ltYWdlIGV4dHJlbWVseSBpbnRlbGxpZ2VudCBjb21wcmVzc2lvbiwgcGxlYXNlIHJlZmVyIHRvIHRoZSBbZG9jdW1lbnQgZGVzY3JpcHRpb25dKGh0dHBzOi8vY2xvdWQudGVuY2VudC5jb20vZG9jdW1lbnQvcHJvZHVjdC80MzYvNDkyNTkpJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fQ09ORklSTTogJ09QRU4nLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9DQU5DRUw6ICdDTE9TRScsXHJcblxyXG4gIC8vIEdpdEh1YlxyXG4gIFBJQ0JFRF9HSVRIVUI6ICdHaXRIdWInLFxyXG4gIFBJQ0JFRF9HSVRIVUJfVE9LRU46ICfoqK3lrppUb2tlbicsXHJcbiAgUElDQkVEX0dJVEhVQl9SRVBPOiAn6Kit5a6a5YCJ5bqr5ZCN56ixJyxcclxuICBQSUNCRURfR0lUSFVCX1BBVEg6ICfoqK3lrprlhLLlrZjot6/lvpEnLFxyXG4gIFBJQ0JFRF9HSVRIVUJfQlJBTkNIOiAn6Kit5a6a5YiG5pSv5ZCN56ixJyxcclxuICBQSUNCRURfR0lUSFVCX0NVU1RPTVVSTDogJ+ioreWumuiHquiogue2suWdgCcsXHJcbiAgUElDQkVEX0dJVEhVQl9NRVNTQUdFX1JFUE86ICfmoLzlvI/vvJp1c2VybmFtZS9yZXBvJyxcclxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfQlJBTkNIOiAn5L6L5aaC77yabWFpbicsXHJcbiAgUElDQkVEX0dJVEhVQl9NRVNTQUdFX1BBVEg6ICfkvovlpoLvvJp0ZXN0LycsXHJcbiAgUElDQkVEX0dJVEhVQl9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxyXG5cclxuICAvLyBxaW5pdVxyXG4gIFBJQ0JFRF9RSU5JVTogJ+S4g+eJm+S6kScsXHJcbiAgUElDQkVEX1FJTklVX0FDQ0VTU0tFWTogJ+ioreWumkFjY2Vzc0tleScsXHJcbiAgUElDQkVEX1FJTklVX1NFQ1JFVEtFWTogJ+ioreWumlNlY3JldEtleScsXHJcbiAgUElDQkVEX1FJTklVX0JVQ0tFVDogJ+ioreWumkJ1Y2tldCcsXHJcbiAgUElDQkVEX1FJTklVX1BBVEg6ICfoqK3lrprlhLLlrZjot6/lvpEnLFxyXG4gIFBJQ0JFRF9RSU5JVV9VUkw6ICfoqK3lrproqKrllY/ntrLlnYAnLFxyXG4gIFBJQ0JFRF9RSU5JVV9PUFRJT05TOiAn6Kit5a6a57ay5Z2A5b6M57a0JyxcclxuICBQSUNCRURfUUlOSVVfQVJFQTogJ+ioreWumuWEsuWtmOWNgOWfnycsXHJcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcclxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9BUkVBOiAn5L6L5aaC77yaejAnLFxyXG4gIFBJQ0JFRF9RSU5JVV9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJo/aW1hZ2VzbGltJyxcclxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9VUkw6ICfkvovlpoLvvJpodHRwczovL3h4eC55eXkuZ2xiLmNsb3VkZG4uY29tJyxcclxuXHJcbiAgLy8gaW1ndXJcclxuICBQSUNCRURfSU1HVVI6ICdJbWd1cicsXHJcbiAgUElDQkVEX0lNR1VSX0NMSUVOVElEOiAn6Kit5a6aQ2xpZW50SWQnLFxyXG4gIFBJQ0JFRF9JTUdVUl9VU0VSTkFNRTogJ+ioreWumueUqOaItuWQjScsXHJcbiAgUElDQkVEX0lNR1VSX0FDQ0VTU19UT0tFTjogJ+ioreWummFjY2Vzc1Rva2VuJyxcclxuICBQSUNCRURfSU1HVVJfQUxCVU06ICfoqK3lrprnm7jnsL/lkI0nLFxyXG4gIFBJQ0JFRF9JTUdVUl9QUk9YWTogJ+ioreWumlBST1hZJyxcclxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9DTElFTlRJRDogJ+WMv+WQjeS4iuWCs+aZguWhq+WvqycsXHJcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfVVNFUk5BTUU6ICfpnIDopoHkuIrlgrPliLDos6zmiLbmmYLloavlr6snLFxyXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX0FDQ0VTU19UT0tFTjogJ+mcgOimgeS4iuWCs+WIsOizrOaItuaZguWhq+WvqycsXHJcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfQUxCVU06ICfkvovlpoLvvJp0ZXN0JyxcclxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9QUk9YWTogJ+S+i+Wmgu+8mmh0dHA6Ly8xMjcuMC4wLjE6MTA4MCcsXHJcblxyXG4gIC8vIHVweXVuXHJcbiAgUElDQkVEX1VQWVVOOiAn5Y+I5ouN5LqRJyxcclxuICBQSUNCRURfVVBZVU5fQlVDS0VUOiAn6Kit5a6aQnVja2V0JyxcclxuICBQSUNCRURfVVBZVU5fT1BFUkFUT1I6ICfoqK3lrprmk43kvZzlk6EnLFxyXG4gIFBJQ0JFRF9VUFlVTl9QQVNTV09SRDogJ+ioreWumuaTjeS9nOWToeWvhueivCcsXHJcbiAgUElDQkVEX1VQWVVOX1BBVEg6ICfoqK3lrprlhLLlrZjot6/lvpEnLFxyXG4gIFBJQ0JFRF9VUFlVTl9VUkw6ICfoqK3lrprliqDpgJ/ntrLlnYAnLFxyXG4gIFBJQ0JFRF9VUFlVTl9PUFRJT05TOiAn6Kit5a6a57ay5Z2A5b6M57a0JyxcclxuICBQSUNCRURfVVBZVU5fQU5USV9MRUVDSF9UT0tFTjogJ+ioreWumumYsuebnOmPiFRva2VuJyxcclxuICBQSUNCRURfVVBZVU5fRVhQSVJFX1RJTUU6ICfoqK3lrprpgY7mnJ/mmYLplpMo56eSKScsXHJcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfT1BFUkFUT1I6ICfkvovlpoLvvJptZScsXHJcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfUEFTU1dPUkQ6ICfovLjlhaXmk43kvZzlk6Hlr4bnorwnLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX1VSTDogJ+S+i+Wmgu+8mmh0dHA6Ly94eHgudGVzdC51cGNkbi5uZXQnLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJohaW1nc2xpbScsXHJcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcclxuXHJcbiAgLy8gd2ViZGF2XHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUOiAnV2ViREFWJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfSE9TVDogJ+ioreWumkFQSeS4u+apnycsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1NTTEVOQUJMRUQ6ICfpnIDopoFIVFRQU+aZguWVn+eUqCcsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1VTRVJOQU1FOiAn6Kit5a6a55So5oi25ZCNJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfUEFTU1dPUkQ6ICfoqK3lrprlr4bnorwnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9QQVRIOiAn6Kit5a6a5YSy5a2Y6Lev5b6RJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfQ1VTVE9NVVJMOiAn6Kit5a6a6Ieq6KiC57ay5Z2AJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfV0VCU0lURV9QQVRIOiAn6Kit5a6a57ay56uZ6Lev5b6RJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9IT1NUOiAn5L6L5aaC77yaaHR0cHM6Ly9leGFtcGxlLmNvbS93ZWJkYXYnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1NTTEVOQUJMRUQ6ICfpnIDopoFIVFRQU+aZguWVn+eUqCcsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfVVNFUk5BTUU6ICfkvovlpoLvvJptZScsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfUEFTU1dPUkQ6ICfovLjlhaXnlKjmiLblr4bnorwnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1BBVEg6ICfkvovlpoLvvJp0ZXN0LycsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfV0VCU0lURV9QQVRIOiAn5ou85o6l57ay5Z2A5pmC5L2/55SoJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9DVVNUT01VUkw6ICfkvovlpoLvvJpodHRwczovL3Rlc3QuY29tJyxcclxuXHJcbiAgLy8gc2Z0cHBsaXN0XHJcbiAgUElDQkVEX1NGVFBQTElTVDogJ+WFp+e9rlNGVFAnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfSE9TVDogJ+ioreWumuS4u+apnycsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9QT1JUOiAn6Kit5a6a56uv5Y+jJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX1VTRVJOQU1FOiAn6Kit5a6a55So5oi25ZCNJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX1BBU1NXT1JEOiAn6Kit5a6a5a+G56K8JyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX1BSSVZBVEVLRVk6ICfoqK3lrprnp4HpkbAnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfUFJJVkFURUtFWV9QQVNTUEhSQVNFOiAn6Kit5a6a56eB6ZGw5a+G56K8JyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX1VQTE9BRFBBVEg6ICfoqK3lrprkuIrlgrPot6/lvpEnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfQ1VTVE9NVVJMOiAn6Kit5a6a6Ieq6KiC57ay5Z2AJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX1dFQlNJVEVfUEFUSDogJ+ioreWumue2suermei3r+W+kScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9GSUxFX1VTRVI6ICfoqK3lrprmlofku7bnlKjmiLY657WEJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX0ZJTEVfTU9ERTogJ+ioreWumuaWh+S7tuasiumZkCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9ESVJfTU9ERTogJ+ioreWumuaWh+S7tuWkvuasiumZkCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0hPU1Q6ICfkvovlpoLvvJoxLjEuMS4zJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUE9SVDogJ+m7mOiqjTIyJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUFJJVkFURUtFWTogJ+S+i+Wmgu+8mi9Vc2Vycy94eHgvLnNzaC9pZF9yc2EnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QUklWQVRFS0VZX1BBU1NQSFJBU0U6ICfovLjlhaXnp4HpkbDlr4bnorwnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9VUExPQURQQVRIOiAn5L6L5aaC77yadGVzdC8nLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9DVVNUT01VUkw6ICfkvovlpoLvvJpodHRwczovL3Rlc3QuY29tJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfV0VCU0lURV9QQVRIOiAn5ou85o6l57ay5Z2A5pmC5L2/55SoJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRklMRV9VU0VSOiAn5L6L5aaC77yad3d3OmRhdGEnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9GSUxFX01PREU6ICfkvovlpoLvvJowNjY0JyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRElSX01PREU6ICfkvovlpoLvvJowNzc1JyxcclxuXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfSVNBRERXQVRFUk1BUks6ICfmmK/lkKbmt7vliqDmsLTljbAnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfSVNBRERXQVRFUk1BUks6ICfpnIDopoHmt7vliqDmsLTljbDmmYLllZ/nlKgnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RZUEU6ICfoqK3lrprmsLTljbDpoZ7lnosnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLVFlQRTogJ+iri+mBuOaTh+awtOWNsOmhnuWeiycsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfSVNGVUxMU0NSRUVOV0FURVJNQVJLOiAn5piv5ZCm5YWo5bGP5rC05Y2wJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX0lTRlVMTFNDUkVFTldBVEVSTUFSSzogJ+mcgOimgeWFqOWxj+awtOWNsOaZguWVn+eUqCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLREVHUkVFOiAn6Kit5a6a5rC05Y2w6KeS5bqmJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0RFR1JFRTogJ+iri+i8uOWFpeaVuOWtlycsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVEVYVDogJ+ioreWumuawtOWNsOaWh+WtlycsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktURVhUOiAn6KuL6Ly45YWl5rC05Y2w5paH5a2XJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktURVhURk9OVFBBVEg6ICfoqK3lrprmsLTljbDlrZfpq5QnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVFBBVEg6ICfoq4vovLjlhaXmsLTljbDlrZfpq5Tmlofku7bot6/lvpEnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0ZPTlRSQVRJTzogJ+ioreWumuawtOWNsOWclueJh+avlOS+iycsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UUkFUSU86ICfoq4vovLjlhaUwLTHnmoTmlbjlrZcnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0ZPTlRDT0xPUjogJ+ioreWumuawtOWNsOWtl+mrlOmhj+iJsicsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UQ09MT1I6ICfoq4vovLjlhaVyZ2LpoY/oibLlgLwnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0lNQUdFUEFUSDogJ+ioreWumuawtOWNsOWclueJh+i3r+W+kScsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktJTUFHRVBBVEg6ICfoq4vovLjlhaXmsLTljbDlnJbniYfot6/lvpEnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1BPU0lUSU9OOiAn6Kit5a6a5rC05Y2w5L2N572uJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1BPU0lUSU9OOiAn6KuL6YG45pOH5rC05Y2w5L2N572uJyxcclxuXHJcbiAgQlVJTERJTl9SRU5BTUVfRk9STUFUOiAn6Kit5a6a6YeN5ZG95ZCN5qC85byPJyxcclxuICBCVUlMRElOX1JFTkFNRV9FTkFCTEU6ICfmmK/lkKbllZ/nlKjph43lkb3lkI0nLFxyXG5cclxuICBCVUlMRElOX0NPTVBSRVNTX1FVQUxJVFk6ICfoqK3lrprlnJbniYfos6rph48nLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9RVUFMSVRZOiAn6KuL6Ly45YWlMC0xMDDnmoTmlbTmlbgnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNDT05WRVJUOiAn5piv5ZCm6YCy6KGM5qC85byP6L2J5o+bJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNDT05WRVJUOiAn6ZyA6KaB6L2J5o+b5pmC5ZWf55SoJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0NPTlZFUlRGT1JNQVQ6ICfoqK3lrprovYnmj5vmoLzlvI8nLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9DT05WRVJURk9STUFUOiAn6KuL6YG45pOH6L2J5o+b5qC85byPJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0lTUkVTSVpFOiAn5piv5ZCm6YCy6KGM5ZyW54mH57iu5pS+JyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRVNJWkU6ICfpnIDopoHnuK7mlL7mmYLllZ/nlKgnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfUkVTSVpFV0lEVEg6ICfoqK3lrprnuK7mlL7lr6zluqYnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVXSURUSDogJ+iri+i8uOWFpeaVuOWtlycsXHJcbiAgQlVJTERJTl9DT01QUkVTU19SRVNJWkVIRUlHSFQ6ICfoqK3lrprnuK7mlL7pq5jluqYnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVIRUlHSFQ6ICfoq4vovLjlhaXmlbjlrZcnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkVCWVBFUkNFTlQ6ICfmmK/lkKbmjInnmb7liIbmr5TpgLLooYznuK7mlL4nLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFU0laRUJZUEVSQ0VOVDogJ+mcgOimgeaMieeZvuWIhuavlOe4ruaUvuaZguWVn+eUqCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19SRVNJWkVQRVJDRU5UOiAn6Kit5a6a57iu5pS+55m+5YiG5q+UJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFUEVSQ0VOVDogJ+iri+i8uOWFpeaVsOWtlycsXHJcbiAgQlVJTERJTl9DT01QUkVTU19TS0lQUkVTSVpFT0ZTTUFMTElNRzogJ+aYr+WQpui3s+mBjuWwj+Wclue4ruaUvicsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU1JPVEFURTogJ+aYr+WQpumAsuihjOWclueJh+aXi+i9iScsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUk9UQVRFOiAn6ZyA6KaB5peL6L2J5pmC5ZWf55SoJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX1JPVEFURURFR1JFRTogJ+ioreWumuaXi+i9ieinkuW6picsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JPVEFURURFR1JFRTogJ+iri+i8uOWFpeaVuOWtl++8jOWPr+eCuuiyoOaVuCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU1JFTU9WRUVYSUY6ICfmmK/lkKbnp7vpmaRFWElG6LOH6KiKJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRU1PVkVFWElGOiAn6ZyA6KaB56e76ZmkRVhJRuizh+ioiuaZguWVn+eUqCcsXHJcblxyXG4gIC8vIFBsdWdpbiBIYW5kbGVyXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfU1VDQ0VTUzogJ+aPkuS7tuWuieijneaIkOWKnycsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEOiAn5o+S5Lu25a6J6KOd5aSx5pWXJyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRURfUkVBU09OOiAn5o+S5Lu25a6J6KOd5aSx5pWX77yM5aSx5pWX56K854K6JHtjb2Rlfe+8jOmMr+iqpOe0gOmMhOeCuiBcXG4gJHtkYXRhfScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEX1BBVEg6ICfmj5Lku7blronoo53lpLHmlZfvvIzoq4vovLjlhaXmraPnorrnmoTmj5Lku7blkI3nqLHmiJbmraPnorrnmoTlronoo53ot6/lvpEnLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfU1VDQ0VTUzogJ+aPkuS7tuWNuOi8ieaIkOWKnycsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRUQ6ICfmj5Lku7bljbjovInlpLHmlZcnLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEX1JFQVNPTjogJ+aPkuS7tuWNuOi8ieWkseaVl++8jOWkseaVl+eivOeCuiR7Y29kZX3vvIzpjK/oqqTntIDpjITngrogXFxuICR7ZGF0YX0nLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEX1ZBTElEOiAn5o+S5Lu25Y246LyJ5aSx5pWX77yM6KuL6Ly45YWl5q2j56K655qE5o+S5Lu25ZCN56ixJyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX1NVQ0NFU1M6ICfmj5Lku7bmm7TmlrDmiJDlip8nLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEOiAn5o+S5Lu25pu05paw5aSx5pWXJyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRF9SRUFTT046ICfmj5Lku7bmm7TmlrDlpLHmlZfvvIzlpLHmlZfnorzngroke2NvZGV977yM6Yyv6Kqk57SA6YyE54K6IFxcbiAke2RhdGF9JyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRF9WQUxJRDogJ+aPkuS7tuabtOaWsOWkseaVl++8jOiri+i8uOWFpeato+eiuueahOaPkuS7tuWQjeeosSdcclxufVxyXG4iLCJpbXBvcnQgeyBJTG9jYWxlcyB9IGZyb20gJy4vemgtQ04nXHJcblxyXG4vKiBlc2xpbnQtZGlzYWJsZSBuby10ZW1wbGF0ZS1jdXJseS1pbi1zdHJpbmcgKi9cclxuZXhwb3J0IGNvbnN0IEVOOiBJTG9jYWxlcyA9IHtcclxuICBVUExPQURfRkFJTEVEOiAnVXBsb2FkIGZhaWxlZCcsXHJcbiAgQ0hFQ0tfU0VUVElOR1M6ICdQbGVhc2UgY2hlY2sgeW91ciBzZXR0aW5ncycsXHJcbiAgQ0hFQ0tfU0VUVElOR1NfQU5EX05FVFdPUks6ICdQbGVhc2UgY2hlY2sgeW91ciBzZXR0aW5ncyBhbmQgbmV0d29yaycsXHJcbiAgVVBMT0FEX0ZBSUxFRF9SRUFTT046ICdFcnJvciBjb2RlOiAke2NvZGV9LCBwbGVhc2Ugb3BlbiB0aGUgYnJvd3NlciBhbmQgcGFzdGUgdGhlIGFkZHJlc3MgdG8gc2VlIHRoZSByZWFzb24nLFxyXG4gIFNFUlZFUl9FUlJPUjogJ1NlcnZlciBlcnJvciwgcGxlYXNlIHRyeSBhZ2FpbiBsYXRlcicsXHJcbiAgQVVUSF9GQUlMRUQ6ICdBdXRoZW50aWNhdGlvbiBmYWlsZWQnLFxyXG5cclxuICAvLyBzbW1zXHJcbiAgUElDQkVEX1NNTVM6ICdTTS5NUycsXHJcbiAgUElDQkVEX1NNTVNfVE9LRU46ICdTZXQgVG9rZW4nLFxyXG4gIFBJQ0JFRF9TTU1TX0JBQ0tVUF9ET01BSU46ICdTZXQgQmFja3VwIFVwbG9hZCBEb21haW4nLFxyXG4gIFBJQ0JFRF9TTU1TX01FU1NBR0VfQkFDS1VQX0RPTUFJTjogJ0V4LiBzbW1zLmFwcCcsXHJcblxyXG4gIC8vIGxvY2FsXHJcbiAgUElDQkVEX0xPQ0FMOiAnTG9jYWwnLFxyXG4gIFBJQ0JFRF9MT0NBTF9QQVRIOiAnU2V0IFBhdGgnLFxyXG4gIFBJQ0JFRF9MT0NBTF9NRVNTQUdFX1BBVEg6ICdFeC4gL1VzZXJzL25hbWUvUGljdHVyZXMvJyxcclxuICBQSUNCRURfTE9DQUxfQ1VTVE9NVVJMOiAnU2V0IEN1c3RvbSBVUkwnLFxyXG4gIFBJQ0JFRF9MT0NBTF9NRVNTQUdFX0NVU1RPTVVSTDogJ0V4LiBodHRwczovL3Rlc3QuY29tJyxcclxuICBQSUNCRURfTE9DQUxfV0VCUEFUSDogJ1NldCBXZWIgUGF0aCcsXHJcbiAgUElDQkVEX0xPQ0FMX01FU1NBR0VfV0VCUEFUSDogJ1VzZWQgdG8gZ2VuZXJhdGUgdXJsIHBhdGgnLFxyXG5cclxuICAvLyBBbGktY2xvdWRcclxuICBQSUNCRURfQUxJQ0xPVUQ6ICdBbGkgQ2xvdWQnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9BQ0NFU1NLRVlJRDogJ1NldCBLZXlJZCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWVNFQ1JFVDogJ1NldCBLZXlTZWNyZXQnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9CVUNLRVQ6ICdTZXQgQnVja2V0JyxcclxuICBQSUNCRURfQUxJQ0xPVURfQVJFQTogJ1NldCBBcmVhJyxcclxuICBQSUNCRURfQUxJQ0xPVURfUEFUSDogJ1NldCBQYXRoJyxcclxuICBQSUNCRURfQUxJQ0xPVURfQ1VTVE9NVVJMOiAnU2V0IEN1c3RvbSBVUkwnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9PUFRJT05TOiAnU2V0IFVSTCBTdWZmaXgnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX0FSRUE6ICdFeC4gb3NzLWNuLWJlaWppbmcnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX1BBVEg6ICdFeC4gdGVzdC8nLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX09QVElPTlM6ICdFeC4gP3gtb3NzLXByb2Nlc3M9eHh4JyxcclxuICBQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9DVVNUT01VUkw6ICdFeC4gaHR0cHM6Ly90ZXN0LmNvbScsXHJcblxyXG4gIC8vIFRlbmNlbnQtY2xvdWRcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEOiAnVGVuY2VudCBDbG91ZCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9WRVJTSU9OOiAnQ2hvb3NlIENPUyB2ZXJzaW9uJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVElEOiAnU2V0IFNlY3JldElkJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVEtFWTogJ1NldCBTZWNyZXRLZXknLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQVBQSUQ6ICdTZXQgQXBwSWQnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQlVDS0VUOiAnU2V0IEJ1Y2tldCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9BUkVBOiAnU2V0IEFyZWEnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfRU5EUE9JTlQ6ICdTZXQgRW5kcG9pbnQnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfUEFUSDogJ1NldCBQYXRoJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX09QVElPTlM6ICdTZXQgVVJMIFN1ZmZpeCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9DVVNUT01VUkw6ICdTZXQgQ3VzdG9tIFVSTCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FQUElEOiAnRXguIDEyMzQ1Njc4OTAnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9BUkVBOiAnRXguIGFwLWJlaWppbmcnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9QQVRIOiAnRXguIHRlc3QvJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQ1VTVE9NVVJMOiAnRXguIGh0dHA6Ly90ZXN0LmNvbScsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX09QVElPTlM6ICdFeC4gP2ltYWdlTW9ncjInLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9FTkRQT0lOVDogJ0V4LiBjb3MtaW50ZXJuYWwuYWNjZWxlcmF0ZS50ZW5jZW50Y29zLmNuJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU06ICfmpbXmmbrlo5PnuK4nLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9DQU5DRUw6ICfpl5zploknLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9DT05GSVJNOiAn6ZaL5ZWTJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fVElQOiAn5ZyW54mH5qW15pm65aOT57iu77yM6Kmz5oOF6KuL5Y+D6ICDW+aWh+aqlOiqquaYjl0oaHR0cHM6Ly9jbG91ZC50ZW5jZW50LmNvbS9kb2N1bWVudC9wcm9kdWN0LzQzNi80OTI1OSknLFxyXG5cclxuICAvLyBHaXRIdWJcclxuICBQSUNCRURfR0lUSFVCOiAnR2l0SHViJyxcclxuICBQSUNCRURfR0lUSFVCX1RPS0VOOiAnU2V0IFRva2VuJyxcclxuICBQSUNCRURfR0lUSFVCX1JFUE86ICdTZXQgUmVwbyBOYW1lJyxcclxuICBQSUNCRURfR0lUSFVCX1BBVEg6ICdTZXQgUGF0aCcsXHJcbiAgUElDQkVEX0dJVEhVQl9CUkFOQ0g6ICdTZXQgQnJhbmNoJyxcclxuICBQSUNCRURfR0lUSFVCX0NVU1RPTVVSTDogJ1NldCBDdXN0b20gVVJMJyxcclxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfUkVQTzogJ0V4LiB1c2VybmFtZS9yZXBvJyxcclxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfQlJBTkNIOiAnRXguIG1haW4nLFxyXG4gIFBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9QQVRIOiAnRXguIHRlc3QvJyxcclxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfQ1VTVE9NVVJMOiAnRXguIGh0dHBzOi8vdGVzdC5jb20nLFxyXG5cclxuICAvLyBxaW5pdVxyXG4gIFBJQ0JFRF9RSU5JVTogJ1Fpbml1JyxcclxuICBQSUNCRURfUUlOSVVfQUNDRVNTS0VZOiAnU2V0IEFjY2Vzc0tleScsXHJcbiAgUElDQkVEX1FJTklVX1NFQ1JFVEtFWTogJ1NldCBTZWNyZXRLZXknLFxyXG4gIFBJQ0JFRF9RSU5JVV9CVUNLRVQ6ICdTZXQgQnVja2V0JyxcclxuICBQSUNCRURfUUlOSVVfUEFUSDogJ1NldCBQYXRoJyxcclxuICBQSUNCRURfUUlOSVVfVVJMOiAnU2V0IFVSTCcsXHJcbiAgUElDQkVEX1FJTklVX09QVElPTlM6ICdTZXQgVVJMIFN1ZmZpeCcsXHJcbiAgUElDQkVEX1FJTklVX0FSRUE6ICdTZXQgQXJlYScsXHJcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfUEFUSDogJ0V4LiB0ZXN0LycsXHJcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfQVJFQTogJ0V4LiB6MCcsXHJcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfT1BUSU9OUzogJ0V4LiA/aW1hZ2VzbGltJyxcclxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9VUkw6ICdFeC4gaHR0cHM6Ly94eHgueXl5LmdsYi5jbG91ZGRuLmNvbScsXHJcblxyXG4gIC8vIGltZ3VyXHJcbiAgUElDQkVEX0lNR1VSOiAnSW1ndXInLFxyXG4gIFBJQ0JFRF9JTUdVUl9DTElFTlRJRDogJ1NldCBDbGllbnRJZCcsXHJcbiAgUElDQkVEX0lNR1VSX1VTRVJOQU1FOiAnU2V0IFVzZXJuYW1lJyxcclxuICBQSUNCRURfSU1HVVJfQUNDRVNTX1RPS0VOOiAnU2V0IEFjY2VzcyBUb2tlbicsXHJcbiAgUElDQkVEX0lNR1VSX0FMQlVNOiAnU2V0IEFsYnVtIE5hbWUnLFxyXG4gIFBJQ0JFRF9JTUdVUl9QUk9YWTogJ1NldCBQcm94eScsXHJcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfQ0xJRU5USUQ6ICdGaWxsIGluIHdoZW4geW91IG5lZWQgdG8gdXBsb2FkIGFzIGFub255bW91cycsXHJcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfVVNFUk5BTUU6ICdGaWxsIGluIHdoZW4geW91IG5lZWQgdG8gdXBsb2FkIHRvIHRoZSBhY2NvdW50JyxcclxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9BQ0NFU1NfVE9LRU46ICdGaWxsIGluIHdoZW4geW91IG5lZWQgdG8gdXBsb2FkIHRvIHRoZSBhY2NvdW50JyxcclxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9BTEJVTTogJ+S+i+Wmgu+8mnRlc3QnLFxyXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX1BST1hZOiAnRXguIGh0dHA6Ly8xMjcuMC4wLjE6MTA4MCcsXHJcblxyXG4gIC8vIHVweXVuXHJcbiAgUElDQkVEX1VQWVVOOiAnVXB5dW4nLFxyXG4gIFBJQ0JFRF9VUFlVTl9CVUNLRVQ6ICdTZXQgQnVja2V0JyxcclxuICBQSUNCRURfVVBZVU5fT1BFUkFUT1I6ICdTZXQgT3BlcmF0b3InLFxyXG4gIFBJQ0JFRF9VUFlVTl9QQVNTV09SRDogJ1NldCBPcGVyYXRvciBQYXNzd29yZCcsXHJcbiAgUElDQkVEX1VQWVVOX1BBVEg6ICdTZXQgUGF0aCcsXHJcbiAgUElDQkVEX1VQWVVOX1VSTDogJ1NldCBVUkwnLFxyXG4gIFBJQ0JFRF9VUFlVTl9PUFRJT05TOiAnU2V0IFVSTCBTdWZmaXgnLFxyXG4gIFBJQ0JFRF9VUFlVTl9BTlRJX0xFRUNIX1RPS0VOOiAnU2V0IEFudGktTGVlY2ggVG9rZW4nLFxyXG4gIFBJQ0JFRF9VUFlVTl9FWFBJUkVfVElNRTogJ1NldCBFeHBpcmUgVGltZShzZWNvbmRzKScsXHJcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfT1BFUkFUT1I6ICdFeC4gbWUnLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX1BBU1NXT1JEOiAnUGxlYXNlIHR5cGUgdGhlIG9wZXJhdG9yIHBhc3N3b3JkJyxcclxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9VUkw6ICdFeC4gaHR0cDovL3h4eC50ZXN0LnVwY2RuLm5ldCcsXHJcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfT1BUSU9OUzogJ0V4LiAhaW1nc2xpbScsXHJcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfUEFUSDogJ0V4LiB0ZXN0LycsXHJcblxyXG4gIC8vIHdlYmRhdlxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVDogJ1dlYkRBVicsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX0hPU1Q6ICdTZXQgSG9zdCcsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1NTTEVOQUJMRUQ6ICdFbmFibGUgSFRUUFMnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9VU0VSTkFNRTogJ1NldCBVc2VybmFtZScsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1BBU1NXT1JEOiAnU2V0IFBhc3N3b3JkJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfUEFUSDogJ1NldCBQYXRoJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfV0VCU0lURV9QQVRIOiAnU2V0IFdlYnNpdGUgUGF0aCcsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX0NVU1RPTVVSTDogJ1NldCBDdXN0b20gVVJMJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9IT1NUOiAnRXguIGh0dHBzOi8vZXhhbXBsZS5jb20vd2ViZGF2JyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9TU0xFTkFCTEVEOiAnRW5hYmxlIEhUVFBTJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9VU0VSTkFNRTogJ0V4LiBtZScsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfUEFTU1dPUkQ6ICdQbGVhc2UgdHlwZSB0aGUgcGFzc3dvcmQnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1BBVEg6ICdFeC4gdGVzdC8nLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1dFQlNJVEVfUEFUSDogJ1VzZWQgdG8gZ2VuZXJhdGUgdGhlIFVSTCBvZiB0aGUgaW1hZ2UnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX0NVU1RPTVVSTDogJ0V4LiBodHRwczovL3Rlc3QuY29tJyxcclxuXHJcbiAgLy8gc2Z0cHBsaXN0XHJcbiAgUElDQkVEX1NGVFBQTElTVDogJ1NGVFAgQnVpbGRpbicsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9IT1NUOiAnU2V0IEhvc3QnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfUE9SVDogJ1NldCBQb3J0JyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX1VTRVJOQU1FOiAnU2V0IFVzZXJuYW1lJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX1BBU1NXT1JEOiAnU2V0IFBhc3N3b3JkJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX1BSSVZBVEVLRVk6ICdTZXQgUHJpdmF0ZSBLZXknLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfUFJJVkFURUtFWV9QQVNTUEhSQVNFOiAnU2V0IFByaXZhdGUgS2V5IFBhc3NwaHJhc2UnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfVVBMT0FEUEFUSDogJ1NldCBVcGxvYWQgUGF0aCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9DVVNUT01VUkw6ICdTZXQgQ3VzdG9tIFVSTCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9XRUJTSVRFX1BBVEg6ICdTZXQgV2Vic2l0ZSBQYXRoJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX0ZJTEVfVVNFUjogJ1NldCBGaWxlIFVzZXI6R3JvdXAnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfRklMRV9NT0RFOiAnU2V0IEZpbGUgTW9kZScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9ESVJfTU9ERTogJ1NldCBEaXJlY3RvcnkgTW9kZScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0hPU1Q6ICdFeC4gMS4xLjEuMycsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1BPUlQ6ICdEZWZhdWx0IDIyJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUFJJVkFURUtFWTogJ0V4LiAvVXNlcnMveHh4Ly5zc2gvaWRfcnNhJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUFJJVkFURUtFWV9QQVNTUEhSQVNFOiAnUGxlYXNlIHR5cGUgdGhlIHByaXZhdGUga2V5IHBhc3NwaHJhc2UnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9VUExPQURQQVRIOiAnRXguIHRlc3QvJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfQ1VTVE9NVVJMOiAnRXguIGh0dHBzOi8vdGVzdC5jb20nLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9XRUJTSVRFX1BBVEg6ICdVc2VkIHRvIGdlbmVyYXRlIHRoZSBVUkwgb2YgdGhlIGltYWdlJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRklMRV9VU0VSOiAnRXguIHd3dzpkYXRhJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRklMRV9NT0RFOiAnRXguIDA2NjQnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9ESVJfTU9ERTogJ0V4LiAwNzc1JyxcclxuXHJcbiAgQlVJTERJTl9SRU5BTUVfRk9STUFUOiAnU2V0IHJlbmFtZSBmb3JtYXQnLFxyXG4gIEJVSUxESU5fUkVOQU1FX0VOQUJMRTogJ0VuYWJsZSByZW5hbWUnLFxyXG5cclxuICBCVUlMRElOX1dBVEVSTUFSS19JU0FERFdBVEVSTUFSSzogJ1doZXRoZXIgdG8gYWRkIHdhdGVybWFyaycsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9JU0FERFdBVEVSTUFSSzogJ0VuYWJsZSB3aGVuIHdhdGVybWFyayBpcyByZXF1aXJlZCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVFlQRTogJ1NldCB3YXRlcm1hcmsgdHlwZScsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktUWVBFOiAnUGxlYXNlIHNlbGVjdCB3YXRlcm1hcmsgdHlwZScsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfSVNGVUxMU0NSRUVOV0FURVJNQVJLOiAnV2hldGhlciB0byB1c2UgZnVsbC1zY3JlZW4gd2F0ZXJtYXJrJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX0lTRlVMTFNDUkVFTldBVEVSTUFSSzogJ0VuYWJsZSB3aGVuIGZ1bGwtc2NyZWVuIHdhdGVybWFyayBpcyByZXF1aXJlZCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLREVHUkVFOiAnU2V0IHdhdGVybWFyayBhbmdsZScsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktERUdSRUU6ICdQbGVhc2UgZW50ZXIgYSBudW1iZXInLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RFWFQ6ICdTZXQgd2F0ZXJtYXJrIHRleHQnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLVEVYVDogJ1BsZWFzZSBlbnRlciB3YXRlcm1hcmsgdGV4dCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVEVYVEZPTlRQQVRIOiAnU2V0IHdhdGVybWFyayBmb250JyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0ZPTlRQQVRIOiAnUGxlYXNlIGVudGVyIHRoZSB3YXRlcm1hcmsgZm9udCBmaWxlIHBhdGgnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0ZPTlRSQVRJTzogJ1NldCB0aGUgcmF0aW8gb2YgdGhlIHdhdGVybWFyayB0byB0aGUgaW1hZ2UnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVFJBVElPOiAnUGxlYXNlIGVudGVyIGEgbnVtYmVyIGJldHdlZW4gMC0xJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktGT05UQ09MT1I6ICdTZXQgd2F0ZXJtYXJrIGZvbnQgY29sb3InLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVENPTE9SOiAnUGxlYXNlIGVudGVyIHRoZSBSR0IgY29sb3IgdmFsdWUnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0lNQUdFUEFUSDogJ1NldCB3YXRlcm1hcmsgaW1hZ2UgcGF0aCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktJTUFHRVBBVEg6ICdQbGVhc2UgZW50ZXIgdGhlIHdhdGVybWFyayBpbWFnZSBwYXRoJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktQT1NJVElPTjogJ1NldCB3YXRlcm1hcmsgcG9zaXRpb24nLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLUE9TSVRJT046ICdQbGVhc2Ugc2VsZWN0IHdhdGVybWFyayBwb3NpdGlvbicsXHJcblxyXG4gIEJVSUxESU5fQ09NUFJFU1NfUVVBTElUWTogJ1NldCBpbWFnZSBxdWFsaXR5JyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUVVBTElUWTogJ1BsZWFzZSBlbnRlciBhbiBpbnRlZ2VyIGJldHdlZW4gMC0xMDAnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNDT05WRVJUOiAnV2hldGhlciB0byBwZXJmb3JtIGZvcm1hdCBjb252ZXJzaW9uJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNDT05WRVJUOiAnRW5hYmxlIHdoZW4gZm9ybWF0IGNvbnZlcnNpb24gaXMgcmVxdWlyZWQnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfQ09OVkVSVEZPUk1BVDogJ1NldCBjb252ZXJzaW9uIGZvcm1hdCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0NPTlZFUlRGT1JNQVQ6ICdQbGVhc2Ugc2VsZWN0IGNvbnZlcnNpb24gZm9ybWF0JyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0lTUkVTSVpFOiAnV2hldGhlciB0byByZXNpemUgdGhlIGltYWdlJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRVNJWkU6ICdFbmFibGUgd2hlbiBpbWFnZSByZXNpemluZyBpcyByZXF1aXJlZCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19SRVNJWkVXSURUSDogJ1NldCByZXNpemluZyB3aWR0aCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRVdJRFRIOiAnUGxlYXNlIGVudGVyIGEgbnVtYmVyJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX1JFU0laRUhFSUdIVDogJ1NldCByZXNpemluZyBoZWlnaHQnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVIRUlHSFQ6ICdQbGVhc2UgZW50ZXIgYSBudW1iZXInLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkVCWVBFUkNFTlQ6ICdXaGV0aGVyIHRvIHJlc2l6ZSB0aGUgaW1hZ2UgYnkgcGVyY2VudGFnZScsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUkVTSVpFQllQRVJDRU5UOiAnRW5hYmxlIHdoZW4gcmVzaXppbmcgYnkgcGVyY2VudGFnZSBpcyByZXF1aXJlZCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19SRVNJWkVQRVJDRU5UOiAnU2V0IHJlc2l6aW5nIHBlcmNlbnRhZ2UnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVQRVJDRU5UOiAnUGxlYXNlIGVudGVyIGEgbnVtYmVyJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX1NLSVBSRVNJWkVPRlNNQUxMSU1HOiAnV2hldGhlciB0byBza2lwIHJlc2l6aW5nIG9mIHNtYWxsIGltYWdlcycsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU1JPVEFURTogJ1doZXRoZXIgdG8gcm90YXRlIHRoZSBpbWFnZScsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUk9UQVRFOiAnRW5hYmxlIHdoZW4gaW1hZ2Ugcm90YXRpb24gaXMgcmVxdWlyZWQnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfUk9UQVRFREVHUkVFOiAnU2V0IHJvdGF0aW9uIGFuZ2xlJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUk9UQVRFREVHUkVFOiAnUGxlYXNlIGVudGVyIGEgbnVtYmVyLCBjYW4gYmUgbmVnYXRpdmUnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNSRU1PVkVFWElGOiAnV2hldGhlciB0byByZW1vdmUgRVhJRiBpbmZvcm1hdGlvbicsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUkVNT1ZFRVhJRjogJ0VuYWJsZSB3aGVuIHJlbW92aW5nIEVYSUYgaW5mb3JtYXRpb24gaXMgcmVxdWlyZWQnLFxyXG4gIC8vIFBsdWdpbiBIYW5kbGVyXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfU1VDQ0VTUzogJ1BsdWdpbiBpbnN0YWxsZWQgc3VjY2Vzc2Z1bGx5JyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRUQ6ICdQbHVnaW4gaW5zdGFsbGF0aW9uIGZhaWxlZCcsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEX1JFQVNPTjogJ1BsdWdpbiBpbnN0YWxsYXRpb24gZmFpbGVkLCBlcnJvciBjb2RlIGlzICR7Y29kZX0sIGVycm9yIGxvZyBpcyBcXG4gJHtkYXRhfScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEX1BBVEg6ICdQbHVnaW4gaW5zdGFsbGF0aW9uIGZhaWxlZCwgcGxlYXNlIGVudGVyIGEgdmFsaWQgcGx1Z2luIG5hbWUgb3IgdmFsaWQgaW5zdGFsbGF0aW9uIHBhdGgnLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfU1VDQ0VTUzogJ1BsdWdpbiB1bmluc3RhbGxlZCBzdWNjZXNzZnVsbHknLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEOiAnUGx1Z2luIHVuaW5zdGFsbCBmYWlsZWQnLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEX1JFQVNPTjogJ1BsdWdpbiB1bmluc3RhbGwgZmFpbGVkLCBlcnJvciBjb2RlIGlzICR7Y29kZX0sIGVycm9yIGxvZyBpcyBcXG4gJHtkYXRhfScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfVkFMSUQ6ICdQbHVnaW4gdW5pbnN0YWxsIGZhaWxlZCwgcGxlYXNlIGVudGVyIGEgdmFsaWQgcGx1Z2luIG5hbWUnLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfU1VDQ0VTUzogJ1BsdWdpbiB1cGRhdGVkIHN1Y2Nlc3NmdWxseScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRUQ6ICdQbHVnaW4gdXBkYXRlIGZhaWxlZCcsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRURfUkVBU09OOiAnUGx1Z2luIHVwZGF0ZSBmYWlsZWQsIGVycm9yIGNvZGUgaXMgJHtjb2RlfSwgZXJyb3IgbG9nIGlzIFxcbiAke2RhdGF9JyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRF9WQUxJRDogJ1BsdWdpbiB1cGRhdGUgZmFpbGVkLCBwbGVhc2UgZW50ZXIgYSB2YWxpZCBwbHVnaW4gbmFtZSdcclxufVxyXG4iLCJpbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnXHJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXHJcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ2V2ZW50cydcclxuaW1wb3J0IHsgaG9tZWRpciB9IGZyb20gJ29zJ1xyXG5pbXBvcnQgQ29tbWFuZGVyIGZyb20gJy4uL2xpYi9Db21tYW5kZXInXHJcbmltcG9ydCB7IExvZ2dlciB9IGZyb20gJy4uL2xpYi9Mb2dnZXInXHJcbmltcG9ydCBMaWZlY3ljbGUgZnJvbSAnLi9MaWZlY3ljbGUnXHJcbmltcG9ydCBMaWZlY3ljbGVQbHVnaW5zLCB7IHNldEN1cnJlbnRQbHVnaW5OYW1lIH0gZnJvbSAnLi4vbGliL0xpZmVjeWNsZVBsdWdpbnMnXHJcbmltcG9ydCB1cGxvYWRlcnMgZnJvbSAnLi4vcGx1Z2lucy91cGxvYWRlcidcclxuaW1wb3J0IHRyYW5zZm9ybWVycyBmcm9tICcuLi9wbHVnaW5zL3RyYW5zZm9ybWVyJ1xyXG5pbXBvcnQgUGx1Z2luTG9hZGVyIGZyb20gJy4uL2xpYi9QbHVnaW5Mb2FkZXInXHJcbmltcG9ydCB7IGdldCwgc2V0LCB1bnNldCB9IGZyb20gJ2xvZGFzaCdcclxuaW1wb3J0IHsgSUhlbHBlciwgSUltZ0luZm8sIElDb25maWcsIElQaWNHbywgSVN0cmluZ0tleU1hcCwgSVBsdWdpbkxvYWRlciwgSUkxOG5NYW5hZ2VyLCBJUGljR29QbHVnaW4sIElQaWNHb1BsdWdpbkludGVyZmFjZSwgSVJlcXVlc3QgfSBmcm9tICcuLi90eXBlcydcclxuaW1wb3J0IGdldENsaXBib2FyZEltYWdlIGZyb20gJy4uL3V0aWxzL2dldENsaXBib2FyZEltYWdlJ1xyXG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuLi9saWIvUmVxdWVzdCdcclxuaW1wb3J0IERCIGZyb20gJy4uL3V0aWxzL2RiJ1xyXG5pbXBvcnQgUGx1Z2luSGFuZGxlciBmcm9tICcuLi9saWIvUGx1Z2luSGFuZGxlcidcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCwgSUJ1c0V2ZW50IH0gZnJvbSAnLi4vdXRpbHMvZW51bSdcclxuaW1wb3J0IHsgZXZlbnRCdXMgfSBmcm9tICcuLi91dGlscy9ldmVudEJ1cydcclxuaW1wb3J0IHsgaXNDb25maWdLZXlJbkJsYWNrTGlzdCwgaXNJbnB1dENvbmZpZ1ZhbGlkIH0gZnJvbSAnLi4vdXRpbHMvY29tbW9uJ1xyXG5pbXBvcnQgeyBJMThuTWFuYWdlciB9IGZyb20gJy4uL2kxOG4nXHJcblxyXG5leHBvcnQgY2xhc3MgUGljR28gZXh0ZW5kcyBFdmVudEVtaXR0ZXIgaW1wbGVtZW50cyBJUGljR28ge1xyXG4gIHByaXZhdGUgX2NvbmZpZyE6IElDb25maWdcclxuICBwcml2YXRlIGxpZmVjeWNsZSE6IExpZmVjeWNsZVxyXG4gIHByaXZhdGUgZGIhOiBEQlxyXG4gIHByaXZhdGUgX3BsdWdpbkxvYWRlciE6IFBsdWdpbkxvYWRlclxyXG4gIGNvbmZpZ1BhdGg6IHN0cmluZ1xyXG4gIGJhc2VEaXIhOiBzdHJpbmdcclxuICBoZWxwZXIhOiBJSGVscGVyXHJcbiAgbG9nOiBMb2dnZXJcclxuICBjbWQ6IENvbW1hbmRlclxyXG4gIG91dHB1dDogSUltZ0luZm9bXVxyXG4gIGlucHV0OiBhbnlbXVxyXG4gIHJhd0lucHV0OiBhbnlbXVxyXG4gIHBsdWdpbkhhbmRsZXI6IFBsdWdpbkhhbmRsZXJcclxuICAvKipcclxuICAgKiBAZGVwcmVjYXRlZCB3aWxsIGJlIHJlbW92ZWQgaW4gdjEuNS4wK1xyXG4gICAqXHJcbiAgICogdXNlIHJlcXVlc3QgaW5zdGVhZFxyXG4gICAqL1xyXG4gIFJlcXVlc3QhOiBSZXF1ZXN0XHJcbiAgaTE4biE6IElJMThuTWFuYWdlclxyXG4gIFZFUlNJT046IHN0cmluZyA9IHByb2Nlc3MuZW52LlBJQ0dPX1ZFUlNJT05cclxuICBHVUlfVkVSU0lPTj86IHN0cmluZ1xyXG5cclxuICBnZXQgcGx1Z2luTG9hZGVyICgpOiBJUGx1Z2luTG9hZGVyIHtcclxuICAgIHJldHVybiB0aGlzLl9wbHVnaW5Mb2FkZXJcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yIChjb25maWdQYXRoOiBzdHJpbmcgPSAnJykge1xyXG4gICAgc3VwZXIoKVxyXG4gICAgdGhpcy5jb25maWdQYXRoID0gY29uZmlnUGF0aFxyXG4gICAgdGhpcy5vdXRwdXQgPSBbXVxyXG4gICAgdGhpcy5pbnB1dCA9IFtdXHJcbiAgICB0aGlzLnJhd0lucHV0ID0gW11cclxuICAgIHRoaXMuaGVscGVyID0ge1xyXG4gICAgICB0cmFuc2Zvcm1lcjogbmV3IExpZmVjeWNsZVBsdWdpbnMoJ3RyYW5zZm9ybWVyJyksXHJcbiAgICAgIHVwbG9hZGVyOiBuZXcgTGlmZWN5Y2xlUGx1Z2lucygndXBsb2FkZXInKSxcclxuICAgICAgYmVmb3JlVHJhbnNmb3JtUGx1Z2luczogbmV3IExpZmVjeWNsZVBsdWdpbnMoJ2JlZm9yZVRyYW5zZm9ybVBsdWdpbnMnKSxcclxuICAgICAgYmVmb3JlVXBsb2FkUGx1Z2luczogbmV3IExpZmVjeWNsZVBsdWdpbnMoJ2JlZm9yZVVwbG9hZFBsdWdpbnMnKSxcclxuICAgICAgYWZ0ZXJVcGxvYWRQbHVnaW5zOiBuZXcgTGlmZWN5Y2xlUGx1Z2lucygnYWZ0ZXJVcGxvYWRQbHVnaW5zJylcclxuICAgIH1cclxuICAgIHRoaXMuaW5pdENvbmZpZ1BhdGgoKVxyXG4gICAgdGhpcy5sb2cgPSBuZXcgTG9nZ2VyKHRoaXMpXHJcbiAgICB0aGlzLmNtZCA9IG5ldyBDb21tYW5kZXIodGhpcylcclxuICAgIHRoaXMucGx1Z2luSGFuZGxlciA9IG5ldyBQbHVnaW5IYW5kbGVyKHRoaXMpXHJcbiAgICB0aGlzLmluaXRDb25maWcoKVxyXG4gICAgdGhpcy5pbml0KClcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdENvbmZpZ1BhdGggKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY29uZmlnUGF0aCA9PT0gJycpIHtcclxuICAgICAgdGhpcy5jb25maWdQYXRoID0gaG9tZWRpcigpICsgJy8ucGljbGlzdC9jb25maWcuanNvbidcclxuICAgIH1cclxuICAgIGlmIChwYXRoLmV4dG5hbWUodGhpcy5jb25maWdQYXRoKS50b1VwcGVyQ2FzZSgpICE9PSAnLkpTT04nKSB7XHJcbiAgICAgIHRoaXMuY29uZmlnUGF0aCA9ICcnXHJcbiAgICAgIHRocm93IEVycm9yKCdUaGUgY29uZmlndXJhdGlvbiBmaWxlIG9ubHkgc3VwcG9ydHMgSlNPTiBmb3JtYXQuJylcclxuICAgIH1cclxuICAgIHRoaXMuYmFzZURpciA9IHBhdGguZGlybmFtZSh0aGlzLmNvbmZpZ1BhdGgpXHJcbiAgICBjb25zdCBleGlzdCA9IGZzLnBhdGhFeGlzdHNTeW5jKHRoaXMuY29uZmlnUGF0aClcclxuICAgIGlmICghZXhpc3QpIHtcclxuICAgICAgZnMuZW5zdXJlRmlsZVN5bmMoYCR7dGhpcy5jb25maWdQYXRofWApXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRDb25maWcgKCk6IHZvaWQge1xyXG4gICAgdGhpcy5kYiA9IG5ldyBEQih0aGlzKVxyXG4gICAgdGhpcy5fY29uZmlnID0gdGhpcy5kYi5yZWFkKHRydWUpIGFzIElDb25maWdcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdCAoKTogdm9pZCB7XHJcbiAgICB0cnkge1xyXG4gICAgICAvLyBpbml0IDE4biBhdCBmaXJzdFxyXG4gICAgICB0aGlzLmkxOG4gPSBuZXcgSTE4bk1hbmFnZXIodGhpcylcclxuICAgICAgdGhpcy5SZXF1ZXN0ID0gbmV3IFJlcXVlc3QodGhpcylcclxuICAgICAgdGhpcy5fcGx1Z2luTG9hZGVyID0gbmV3IFBsdWdpbkxvYWRlcih0aGlzKVxyXG4gICAgICAvLyBsb2FkIHNlbGYgcGx1Z2luc1xyXG4gICAgICBzZXRDdXJyZW50UGx1Z2luTmFtZSgncGljZ28nKVxyXG4gICAgICB1cGxvYWRlcnModGhpcykucmVnaXN0ZXIodGhpcylcclxuICAgICAgdHJhbnNmb3JtZXJzKHRoaXMpLnJlZ2lzdGVyKHRoaXMpXHJcbiAgICAgIHNldEN1cnJlbnRQbHVnaW5OYW1lKCcnKVxyXG4gICAgICAvLyBsb2FkIHRoaXJkLXBhcnR5IHBsdWdpbnNcclxuICAgICAgdGhpcy5fcGx1Z2luTG9hZGVyLmxvYWQoKVxyXG4gICAgICB0aGlzLmxpZmVjeWNsZSA9IG5ldyBMaWZlY3ljbGUodGhpcylcclxuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICB0aGlzLmVtaXQoSUJ1aWxkSW5FdmVudC5VUExPQURfUFJPR1JFU1MsIC0xKVxyXG4gICAgICB0aGlzLmxvZy5lcnJvcihlKVxyXG4gICAgICB0aHJvdyBlXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBlYXNpbHkgbWFubnVhbGx5IGxvYWQgYSBwbHVnaW5cclxuICAgKiBpZiBwcm92aWRlIHBsdWdpbiBuYW1lLCB3aWxsIHJlZ2lzdGVyIHBsdWdpbiBieSBuYW1lXHJcbiAgICogb3IganVzdCBpbnN0YW50aWF0ZSBhIHBsdWdpblxyXG4gICAqL1xyXG4gIHVzZSAocGx1Z2luOiBJUGljR29QbHVnaW4sIG5hbWU/OiBzdHJpbmcpOiBJUGljR29QbHVnaW5JbnRlcmZhY2Uge1xyXG4gICAgaWYgKG5hbWUpIHtcclxuICAgICAgdGhpcy5wbHVnaW5Mb2FkZXIucmVnaXN0ZXJQbHVnaW4obmFtZSwgcGx1Z2luKVxyXG4gICAgICByZXR1cm4gdGhpcy5wbHVnaW5Mb2FkZXIuZ2V0UGx1Z2luKG5hbWUpIVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgcGx1Z2luSW5zdGFuY2UgPSBwbHVnaW4odGhpcylcclxuICAgICAgcmV0dXJuIHBsdWdpbkluc3RhbmNlXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZWdpc3RlckNvbW1hbmRzICgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmNvbmZpZ1BhdGggIT09ICcnKSB7XHJcbiAgICAgIHRoaXMuY21kLmluaXQoKVxyXG4gICAgICB0aGlzLmNtZC5sb2FkQ29tbWFuZHMoKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0Q29uZmlnPFQ+IChuYW1lPzogc3RyaW5nKTogVCB7XHJcbiAgICBpZiAoIW5hbWUpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZyBhcyB1bmtub3duIGFzIFRcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBnZXQodGhpcy5fY29uZmlnLCBuYW1lKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2F2ZUNvbmZpZyAoY29uZmlnOiBJU3RyaW5nS2V5TWFwPGFueT4pOiB2b2lkIHtcclxuICAgIGlmICghaXNJbnB1dENvbmZpZ1ZhbGlkKGNvbmZpZykpIHtcclxuICAgICAgdGhpcy5sb2cud2FybigndGhlIGZvcm1hdCBvZiBjb25maWcgaXMgaW52YWxpZCwgcGxlYXNlIHByb3ZpZGUgb2JqZWN0JylcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICB0aGlzLnNldENvbmZpZyhjb25maWcpXHJcbiAgICB0aGlzLmRiLnNhdmVDb25maWcoY29uZmlnKVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlQ29uZmlnIChrZXk6IHN0cmluZywgcHJvcE5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKCFrZXkgfHwgIXByb3BOYW1lKSByZXR1cm5cclxuICAgIGlmIChpc0NvbmZpZ0tleUluQmxhY2tMaXN0KGtleSkpIHtcclxuICAgICAgdGhpcy5sb2cud2FybihgdGhlIGNvbmZpZy4ke2tleX0gY2FuJ3QgYmUgcmVtb3ZlZGApXHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgdGhpcy51bnNldENvbmZpZyhrZXksIHByb3BOYW1lKVxyXG4gICAgdGhpcy5kYi51bnNldChrZXksIHByb3BOYW1lKVxyXG4gIH1cclxuXHJcbiAgc2V0Q29uZmlnIChjb25maWc6IElTdHJpbmdLZXlNYXA8YW55Pik6IHZvaWQge1xyXG4gICAgaWYgKCFpc0lucHV0Q29uZmlnVmFsaWQoY29uZmlnKSkge1xyXG4gICAgICB0aGlzLmxvZy53YXJuKCd0aGUgZm9ybWF0IG9mIGNvbmZpZyBpcyBpbnZhbGlkLCBwbGVhc2UgcHJvdmlkZSBvYmplY3QnKVxyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIE9iamVjdC5rZXlzKGNvbmZpZykuZm9yRWFjaCgobmFtZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgIGlmIChpc0NvbmZpZ0tleUluQmxhY2tMaXN0KG5hbWUpKSB7XHJcbiAgICAgICAgdGhpcy5sb2cud2FybihgdGhlIGNvbmZpZy4ke25hbWV9IGNhbid0IGJlIG1vZGlmaWVkYClcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWR5bmFtaWMtZGVsZXRlXHJcbiAgICAgICAgZGVsZXRlIGNvbmZpZ1tuYW1lXVxyXG4gICAgICB9XHJcbiAgICAgIHNldCh0aGlzLl9jb25maWcsIG5hbWUsIGNvbmZpZ1tuYW1lXSlcclxuICAgICAgZXZlbnRCdXMuZW1pdChJQnVzRXZlbnQuQ09ORklHX0NIQU5HRSwge1xyXG4gICAgICAgIGNvbmZpZ05hbWU6IG5hbWUsXHJcbiAgICAgICAgdmFsdWU6IGNvbmZpZ1tuYW1lXVxyXG4gICAgICB9KVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHVuc2V0Q29uZmlnIChrZXk6IHN0cmluZywgcHJvcE5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKCFrZXkgfHwgIXByb3BOYW1lKSByZXR1cm5cclxuICAgIGlmIChpc0NvbmZpZ0tleUluQmxhY2tMaXN0KGtleSkpIHtcclxuICAgICAgdGhpcy5sb2cud2FybihgdGhlIGNvbmZpZy4ke2tleX0gY2FuJ3QgYmUgdW5zZXRgKVxyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIHVuc2V0KHRoaXMuZ2V0Q29uZmlnKGtleSksIHByb3BOYW1lKVxyXG4gIH1cclxuXHJcbiAgZ2V0IHJlcXVlc3QgKCk6IElSZXF1ZXN0WydyZXF1ZXN0J10ge1xyXG4gICAgcmV0dXJuIHRoaXMuUmVxdWVzdC5yZXF1ZXN0LmJpbmQodGhpcy5SZXF1ZXN0KVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgdXBsb2FkIChpbnB1dD86IGFueVtdKTogUHJvbWlzZTxJSW1nSW5mb1tdIHwgRXJyb3I+IHtcclxuICAgIGlmICh0aGlzLmNvbmZpZ1BhdGggPT09ICcnKSB7XHJcbiAgICAgIHRoaXMubG9nLmVycm9yKCdUaGUgY29uZmlndXJhdGlvbiBmaWxlIG9ubHkgc3VwcG9ydHMgSlNPTiBmb3JtYXQuJylcclxuICAgICAgcmV0dXJuIFtdXHJcbiAgICB9XHJcbiAgICAvLyB1cGxvYWQgZnJvbSBjbGlwYm9hcmRcclxuICAgIGlmIChpbnB1dCA9PT0gdW5kZWZpbmVkIHx8IGlucHV0Lmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHsgaW1nUGF0aCwgc2hvdWxkS2VlcEFmdGVyVXBsb2FkaW5nIH0gPSBhd2FpdCBnZXRDbGlwYm9hcmRJbWFnZSh0aGlzKVxyXG4gICAgICAgIGlmIChpbWdQYXRoID09PSAnbm8gaW1hZ2UnKSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ltYWdlIG5vdCBmb3VuZCBpbiBjbGlwYm9hcmQnKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLm9uY2UoSUJ1aWxkSW5FdmVudC5GQUlMRUQsICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKCFzaG91bGRLZWVwQWZ0ZXJVcGxvYWRpbmcpIHtcclxuICAgICAgICAgICAgICAvLyDliKDpmaQgcGljZ28g55Sf5oiQ55qE5Zu+54mH5paH5Lu277yM5L6L5aaCIGB+Ly5waWNnby8yMDIwMDYyMTIwNTcyMC5wbmdgXHJcbiAgICAgICAgICAgICAgZnMucmVtb3ZlKGltZ1BhdGgpLmNhdGNoKChlKSA9PiB7IHRoaXMubG9nLmVycm9yKGUpIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICB0aGlzLm9uY2UoJ2ZpbmlzaGVkJywgKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXNob3VsZEtlZXBBZnRlclVwbG9hZGluZykge1xyXG4gICAgICAgICAgICAgIGZzLnJlbW92ZShpbWdQYXRoKS5jYXRjaCgoZSkgPT4geyB0aGlzLmxvZy5lcnJvcihlKSB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgY29uc3QgeyBvdXRwdXQgfSA9IGF3YWl0IHRoaXMubGlmZWN5Y2xlLnN0YXJ0KFtpbWdQYXRoXSlcclxuICAgICAgICAgIHJldHVybiBvdXRwdXRcclxuICAgICAgICB9XHJcbiAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICB0aGlzLmVtaXQoSUJ1aWxkSW5FdmVudC5GQUlMRUQsIGUpXHJcbiAgICAgICAgdGhyb3cgZVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyB1cGxvYWQgZnJvbSBwYXRoXHJcbiAgICAgIGNvbnN0IHsgb3V0cHV0IH0gPSBhd2FpdCB0aGlzLmxpZmVjeWNsZS5zdGFydChpbnB1dClcclxuICAgICAgcmV0dXJuIG91dHB1dFxyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgeyBJUGljR28sIElQaWNHb1BsdWdpbiB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5pbXBvcnQgSW1nRnJvbVBhdGggZnJvbSAnLi9wYXRoJ1xyXG5pbXBvcnQgSW1nRnJvbUJhc2U2NCBmcm9tICcuL2Jhc2U2NCdcclxuXHJcbmNvbnN0IGJ1aWxkSW5UcmFuc2Zvcm1lcnM6IElQaWNHb1BsdWdpbiA9ICgpID0+IHtcclxuICByZXR1cm4ge1xyXG4gICAgcmVnaXN0ZXIgKGN0eDogSVBpY0dvKSB7XHJcbiAgICAgIGN0eC5oZWxwZXIudHJhbnNmb3JtZXIucmVnaXN0ZXIoJ3BhdGgnLCBJbWdGcm9tUGF0aClcclxuICAgICAgY3R4LmhlbHBlci50cmFuc2Zvcm1lci5yZWdpc3RlcignYmFzZTY0JywgSW1nRnJvbUJhc2U2NClcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGJ1aWxkSW5UcmFuc2Zvcm1lcnNcclxuIl0sIm5hbWVzIjpbInBsdWdpbkhhbmRsZXIiLCJoYW5kbGUiLCJjdHgiLCJjbWQiLCJwcm9ncmFtIiwiY29tbWFuZCIsImRlc2NyaXB0aW9uIiwiYWxpYXMiLCJvcHRpb24iLCJhY3Rpb24iLCJwbHVnaW5zIiwicHJveHkiLCJyZWdpc3RyeSIsIm9wdGlvbnMiLCJpbnN0YWxsIiwiY2F0Y2giLCJlIiwibG9nIiwiZXJyb3IiLCJ1bmluc3RhbGwiLCJ1cGRhdGUiLCJjb25maWciLCJyYW5kb21TdHJpbmdHZW5lcmF0b3IiLCJsZW5ndGgiLCJjaGFycyIsIkFycmF5IiwiZnJvbSIsIm1hcCIsImNoYXJBdCIsIk1hdGgiLCJmbG9vciIsInJhbmRvbSIsImpvaW4iLCJyZW5hbWVGaWxlTmFtZVdpdGhDdXN0b21TdHJpbmciLCJvbGROYW1lIiwiY3VzdG9tRm9ybWF0IiwiYWZmaXhGaWxlTmFtZSIsImNvbnZlcnNpb25NYXAiLCJEYXRlIiwiZ2V0RnVsbFllYXIiLCJ0b1N0cmluZyIsInNsaWNlIiwiZ2V0TW9udGgiLCJnZXREYXRlIiwiZ2V0SG91cnMiLCJnZXRNaW51dGVzIiwiZ2V0U2Vjb25kcyIsImNyeXB0byIsImNyZWF0ZUhhc2giLCJwYXRoIiwiYmFzZW5hbWUiLCJleHRuYW1lIiwiZGlnZXN0IiwidXVpZHY0IiwicmVwbGFjZSIsIm5vdyIsInVuZGVmaW5lZCIsIk9iamVjdCIsImtleXMiLCJzb21lIiwiaXRlbSIsImluY2x1ZGVzIiwiZXh0IiwibmV3TmFtZSIsInJlZHVjZSIsImFjYyIsImN1ciIsIlJlZ0V4cCIsIl9yZXN1bHQiLCJrZXkiLCJjb3VudCIsIm1heCIsImRpcm5hbWUiLCJzcGxpdCIsInNlcCIsImEiLCJiIiwiaXNVcmwiLCJ1cmwiLCJ0ZXN0IiwiaXNVcmxFbmNvZGUiLCJkZWNvZGVVUkkiLCJoYW5kbGVVcmxFbmNvZGUiLCJlbmNvZGVVUkkiLCJnZXRJbWFnZVNpemUiLCJmaWxlIiwid2lkdGgiLCJoZWlnaHQiLCJ0eXBlIiwiaW1hZ2VTaXplIiwicmVhbCIsImdldEZTRmlsZSIsImFzeW5jIiwiZmlsZVBhdGgiLCJmaWxlTmFtZSIsImJ1ZmZlciIsImZzIiwicmVhZEZpbGUiLCJzdWNjZXNzIiwicmVhc29uIiwiZ2V0VVJMRmlsZSIsInRpbWVvdXRJZCIsInJlcXVlc3RGbiIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwicmVzIiwicmVxdWVzdCIsIm1ldGhvZCIsInJlc29sdmVXaXRoRnVsbFJlc3BvbnNlIiwicmVzcG9uc2VUeXBlIiwidGhlbiIsInJlc3AiLCJkYXRhIiwiY2xlYXJUaW1lb3V0IiwidXJsUGF0aCIsIlVSTCIsInBhdGhuYW1lIiwic2VhcmNoUGFyYW1zIiwiZ2V0Iiwic3RhcnRzV2l0aCIsIm1lc3NhZ2UiLCJ0aW1lb3V0UHJvbWlzZSIsInNldFRpbWVvdXQiLCJyYWNlIiwiZ2V0UGx1Z2luTmFtZVR5cGUiLCJuYW1lIiwiaXNTaW1wbGVOYW1lIiwibmFtZU9yUGF0aCIsImlzQWJzb2x1dGUiLCJwbHVnaW5QYXRoIiwicHJvY2VzcyIsImN3ZCIsImV4aXN0c1N5bmMiLCJoYW5kbGVDb21wbGV0ZVBsdWdpbk5hbWUiLCJzY29wZSIsImdldFByb2Nlc3NQbHVnaW5OYW1lIiwibG9nZ2VyIiwiY29uc29sZSIsImhhbmRsZVVuaXhTdHlsZVBhdGgiLCJ3YXJuIiwiZ2V0Tm9ybWFsUGx1Z2luTmFtZSIsInJlbW92ZVBsdWdpblZlcnNpb24iLCJwYWNrYWdlSlNPTlBhdGgiLCJwb3NpeCIsInBrZyIsInJlYWRKU09OU3luYyIsInBhdGhTdHIiLCJyZWciLCJtYXRjaEFyciIsIm1hdGNoIiwiY29uZmlnQmxhY2tMaXN0IiwiaXNDb25maWdLZXlJbkJsYWNrTGlzdCIsImJsYWNrSXRlbSIsImlzSW5wdXRDb25maWdWYWxpZCIsImlzQXJyYXkiLCJzYWZlUGFyc2UiLCJzdHIiLCJKU09OIiwicGFyc2UiLCJmb3JjZU51bWJlciIsIm51bSIsImlzTmFOIiwiTnVtYmVyIiwiaXNEZXYiLCJlbnYiLCJOT0RFX0VOViIsImRlZmF1bHRXYXRlcm1hcmtJbWFnZVBhdGgiLCJfX2Rpcm5hbWUiLCJBZGRXYXRlcm1hcmsiLCJpbWciLCJ3YXRlcm1hcmtUeXBlIiwiZGVmYXVsdFdhdGVybWFya0ZvbnRQYXRoIiwiaXNGdWxsU2NyZWVuV2F0ZXJtYXJrIiwid2F0ZXJtYXJrRGVncmVlIiwidGV4dCIsIndhdGVybWFya0ZvbnRQYXRoIiwid2F0ZXJtYXJrU2NhbGVSYXRpbyIsIndhdGVybWFya0NvbG9yIiwid2F0ZXJtYXJrSW1hZ2VQYXRoIiwicG9zaXRpb24iLCJpbWFnZSIsInNoYXJwIiwiaW1nV2lkdGgiLCJtZXRhZGF0YSIsIndhdGVybWFyayIsInRvQnVmZmVyIiwiY29sb3IiLCJmb250RmFtaWx5IiwiYW5jaG9yIiwiYXR0cmlidXRlcyIsImZpbGwiLCJ0ZXh0U1ZHIiwiVGV4dFRvU1ZHIiwibG9hZFN5bmMiLCJnZXRTVkciLCJCdWZmZXIiLCJ0ZXh0MlNWRyIsIndhdGVybWFya1dpZHRoIiwid2F0ZXJtYXJrSGVpZ2h0IiwiZ2V0U2l6ZSIsIndhdGVybWFya1Jlc2l6ZVdpZHRoIiwid2F0ZXJtYXJrUmVzaXplSGVpZ2h0IiwicmVzaXplIiwiZml0Iiwicm90YXRlIiwiYmFja2dyb3VuZCIsInIiLCJnIiwiYWxwaGEiLCJjcmVhdGVXYXRlcm1hcmsiLCJjb21wb3NpdGUiLCJpbnB1dCIsImdyYXZpdHkiLCJ0aWxlIiwidmFsaWRQYXJhbSIsInBhcmFtcyIsImV2ZXJ5IiwicGFyYW0iLCJhdmFpbGFibGVDb252ZXJ0Rm9ybWF0TGlzdCIsImltYWdlRXh0TGlzdCIsImltYWdlQWRkV2F0ZXJNYXJrIiwid2F0ZXJtYXJrVGV4dCIsIndhdGVybWFya1Bvc2l0aW9uIiwiZm9ybWF0T3B0aW9ucyIsInF1YWxpdHkiLCJpc0NvbnZlcnQiLCJjb252ZXJ0Rm9ybWF0IiwiaXNSZVNpemUiLCJyZVNpemVIZWlnaHQiLCJyZVNpemVXaWR0aCIsInNraXBSZVNpemVPZlNtYWxsSW1nIiwiaXNSZVNpemVCeVBlcmNlbnQiLCJyZVNpemVQZXJjZW50IiwiaXNSb3RhdGUiLCJyb3RhdGVEZWdyZWUiLCJwaWNCZWQiLCJpbWFnZVByb2Nlc3MiLCJyYXdGb3JtYXQiLCJ0b0xvd2VyQ2FzZSIsImltYWdlV2lkdGgiLCJpbWFnZUhlaWdodCIsInJvdW5kIiwic2NhbGVSYXRpbyIsIm5ld0Zvcm1hdCIsInRvRm9ybWF0IiwiZm9ybWF0IiwiaW1hZ2VGb3JtYXRMaXN0IiwibmVlZEFkZFdhdGVybWFyayIsIndhdGVybWFya09wdGlvbnMiLCJmaWxlRXh0IiwiaXNBZGRXYXRlcm1hcmsiLCJuZWVkQ29tcHJlc3MiLCJjb21wcmVzc09wdGlvbnMiLCJyZW1vdmVFeGlmIiwidXBsb2FkIiwiYXJndW1lbnRzIiwiaW5wdXRMaXN0IiwiZmlsdGVyIiwiZXhpc3QiLCJ1c2VyQ29uZmlnIiwiZ2V0Q29uZmlnIiwiaTE4biIsInRyYW5zbGF0ZSIsInJlcXVpcmVkIiwiZGVmYXVsdCIsImNob2ljZXMiLCJpc1JlbW92ZUV4aWYiLCJlbmFibGUiLCJoYW5kbGVDb25maWciLCJwcm9tcHRzIiwibW9kdWxlIiwiYW5zd2VyIiwiaW5xdWlyZXIiLCJwcm9tcHQiLCJjb25maWdOYW1lIiwic2F2ZUNvbmZpZyIsInNldHRpbmciLCJjb21wcmVzcyIsInJlbmFtZSIsImJ1aWxkaW4iLCJoZWxwZXIiLCJnZXRJZExpc3QiLCJwbHVnaW5Mb2FkZXIiLCJnZXRQbHVnaW4iLCJnZXRGdWxsTGlzdCIsInBsdWdpbiIsImluZm8iLCJhcmd2IiwidXNlIiwidXBsb2FkZXIiLCJ0cmFuc2Zvcm1lciIsInB1c2giLCJwaWNnb1BsdWdpbnMiLCJzZXRDb25maWciLCJnZW5lcmF0ZSIsIm9wdHMiLCJnZXRPcHRpb25zIiwidG1wIiwic291cmNlIiwiYW5zd2VycyIsIl9maWxlcyIsImdsb2JieSIsImRvdCIsImdsb2IiLCJmaWx0ZXJzIiwiZm9yRWFjaCIsImZpbGVzIiwicmVuZGVyIiwid3JpdGVGaWxlVHJlZSIsImRlc3QiLCJjb21wbGV0ZSIsImNvbXBsZXRlTWVzc2FnZSIsImV4cCIsImZuIiwiRnVuY3Rpb24iLCJzdHJpbmdpZnkiLCJ0ZW1wbGF0ZVBhdGgiLCJvcHRpb25zUGF0aCIsInJlcXVpcmUiLCJmaWxlVHJlZSIsInJlYWRGaWxlU3luYyIsImNvbnRlbnQiLCJlanMiLCJpc0J1ZmZlciIsImRpciIsImVuc3VyZURpclN5bmMiLCJ3cml0ZUZpbGVTeW5jIiwicnVuIiwib2ZmbGluZSIsInRlbXBsYXRlIiwiaGFzU2xhc2giLCJkb3dubG9hZEFuZEdlbmVyYXRlIiwicm0iLCJzeW5jIiwiZG93bmxvYWQiLCJjbG9uZSIsImVyciIsImluaXQiLCJwcm9qZWN0IiwiaW5QbGFjZSIsImhvbWVkaXIiLCJvayIsIm9uIiwiY2hhbGsiLCJncmF5IiwibGFuZyIsImxpc3QiLCJnZXRMYW5ndWFnZUxpc3QiLCJzZXRMYW5ndWFnZSIsIkxpZmVjeWNsZVBsdWdpbnMiLCJjb25zdHJ1Y3RvciIsInRoaXMiLCJNYXAiLCJwbHVnaW5JZE1hcCIsInJlZ2lzdGVyIiwiaWQiLCJUeXBlRXJyb3IiLCJoYXMiLCJzZXQiLCJjdXJyZW50UGx1Z2luIiwidW5yZWdpc3RlciIsInBsdWdpbk5hbWUiLCJwbHVnaW5MaXN0IiwiZGVsZXRlIiwiZ2V0TmFtZSIsImdldExpc3QiLCJ2YWx1ZXMiLCJzZXRDdXJyZW50UGx1Z2luTmFtZSIsIkNvbW1hbmRlciIsIkNvbW1hbmQiLCJ2ZXJzaW9uIiwiZGVidWciLCJzaWxlbnQiLCJhcmdzIiwiZXhpdCIsImN1cnJlbnRQbHVnaW5OYW1lIiwibG9hZENvbW1hbmRzIiwiSUxvZ1R5cGUiLCJJQnVpbGRJbkV2ZW50IiwiSUJ1c0V2ZW50IiwiTG9nZ2VyIiwiaGFuZGxlTG9nIiwibXNnIiwibG9nSGVhZGVyIiwibGV2ZWwiLCJ0b1VwcGVyQ2FzZSIsImxvZ0xldmVsIiwibG9nUGF0aCIsImJhc2VEaXIiLCJyZXN1bHQiLCJjaGVja0xvZ0ZpbGVJc0xhcmdlIiwiaXNMYXJnZSIsIndhcm5pbmdNc2ciLCJ5ZWxsb3ciLCJyZWNyZWF0ZUxvZ0ZpbGUiLCJ1bnNoaWZ0IiwiaGFuZGxlV3JpdGVMb2ciLCJsb2dGaWxlU2l6ZSIsInN0YXRTeW5jIiwic2l6ZSIsImxvZ0ZpbGVTaXplTGltaXQiLCJ1bmxpbmtTeW5jIiwiY3JlYXRlRmlsZVN5bmMiLCJjaGVja0xvZ0xldmVsIiwiZGF5anMiLCJFcnJvciIsInV0aWwiLCJzdGFjayIsImFwcGVuZEZpbGVTeW5jIiwiTGlmZWN5Y2xlIiwiRXZlbnRFbWl0dGVyIiwic3VwZXIiLCJ0ZW1wRmlsZVBhdGgiLCJpbWdGbGVQYXRoIiwiZW1wdHlEaXJTeW5jIiwidHRmUGF0aCIsIm91dHB1dERpciIsIm1rZGlyU3luYyIsInJlY3Vyc2l2ZSIsImF4aW9zIiwidHRmTGluayIsImNvbmZpZ1BhdGgiLCJvdXRwdXQiLCJyYXdJbnB1dCIsIlJlcXVlc3QiLCJWRVJTSU9OIiwiR1VJX1ZFUlNJT04iLCJiaW5kIiwicmVtb3ZlQ29uZmlnIiwidW5zZXRDb25maWciLCJhZGRMaXN0ZW5lciIsIm9uY2UiLCJyZW1vdmVMaXN0ZW5lciIsIm9mZiIsInJlbW92ZUFsbExpc3RlbmVycyIsInNldE1heExpc3RlbmVycyIsImdldE1heExpc3RlbmVycyIsImxpc3RlbmVycyIsInJhd0xpc3RlbmVycyIsImVtaXQiLCJsaXN0ZW5lckNvdW50IiwicHJlcGVuZExpc3RlbmVyIiwicHJlcGVuZE9uY2VMaXN0ZW5lciIsImV2ZW50TmFtZXMiLCJjcmVhdGVDb250ZXh0IiwicmF3SW5wdXRQYXRoIiwiY2xvbmVEZWVwIiwid2F0ZXJtYXJrTXNnIiwiY29tcHJlc3NNc2ciLCJhbGxTZXR0bGVkIiwiaW5kZXgiLCJ0cmFuc2Zvcm1lZEJ1ZmZlciIsImRvd25sb2FkVFRGIiwibmV3RXh0IiwidGVtcEZpbGUiLCJnZXRUaW1lIiwiaGVpY0J1ZmZlciIsImhlaWNSZXN1bHQiLCJoZWljQ29udmVydCIsInRlbXBIZWljQ29udmVydEZpbGUiLCJiZWZvcmVUcmFuc2Zvcm0iLCJkb1RyYW5zZm9ybSIsInJlbmFtZUNvbmZpZyIsImJlZm9yZVVwbG9hZCIsImRvVXBsb2FkIiwiYWZ0ZXJVcGxvYWQiLCJGQUlMRUQiLCJVUExPQURfUFJPR1JFU1MiLCJCRUZPUkVfVFJBTlNGT1JNIiwiaGFuZGxlUGx1Z2lucyIsImJlZm9yZVRyYW5zZm9ybVBsdWdpbnMiLCJjdXJyZW50VHJhbnNmb3JtZXIiLCJCRUZPUkVfVVBMT0FEIiwiYmVmb3JlVXBsb2FkUGx1Z2lucyIsIm91dHB1dEltZyIsIkFGVEVSX1VQTE9BRCIsImFmdGVyVXBsb2FkUGx1Z2lucyIsImlzRW5jb2RlT3V0cHV0VVJMIiwiaSIsImltZ1VybCIsImJhc2U2NEltYWdlIiwiRklOSVNIRUQiLCJsaWZlQ3ljbGVQbHVnaW5zIiwicGx1Z2luTmFtZXMiLCJsaWZlQ3ljbGVOYW1lIiwiYWxsIiwicG9zdE9wdGlvbnMiLCJhcGlUb2tlbiIsImJhY2t1cERvbWFpbiIsImhlYWRlcnMiLCJjb250ZW50VHlwZSIsIkF1dGhvcml6YXRpb24iLCJmb3JtRGF0YSIsInNtZmlsZSIsInZhbHVlIiwiZmlsZW5hbWUiLCJzc2wiLCJzbW1zQ29uZmlnIiwiaW1nTGlzdCIsInBvc3RDb25maWciLCJ0b2tlbiIsImJvZHkiLCJjb2RlIiwiaGFzaCIsImltYWdlcyIsIk5PVElGSUNBVElPTiIsInRpdGxlIiwicHJlZml4IiwiZ2VuZXJhdGVTaWduYXR1cmUiLCJzZWNyZXRJZCIsInNlY3JldEtleSIsImFwcElkIiwiYnVja2V0Iiwic2lnbmF0dXJlIiwic2lnblRpbWUiLCJ0b2RheSIsInNpZ25LZXkiLCJjcmVhdGVIbWFjIiwiZW5kcG9pbnQiLCJhcmVhIiwiaHR0cFN0cmluZyIsInN0cmluZ1RvU2lnbiIsImN1cnJlbnQiLCJtdWx0aVNpZ25hdHVyZSIsInNpZ25IZXhLZXkiLCJ0ZW1wU3RyaW5nIiwiY29uY2F0IiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiSG9zdCIsIm1pbWUiLCJsb29rdXAiLCJvcCIsImZpbGVjb250ZW50IiwidGNZdW5PcHRpb25zIiwiY3VzdG9tVXJsIiwidXNlVjQiLCJzdGF0dXNDb2RlIiwib3B0aW9uVXJsIiwic2xpbSIsInNvdXJjZV91cmwiLCJjb25maXJtVGV4dCIsImNhbmNlbFRleHQiLCJ0aXBzIiwicmVwbyIsImpzb24iLCJicmFuY2giLCJnaXRodWJPcHRpb25zIiwidXBsb2FkUGF0aCIsImRvd25sb2FkX3VybCIsInNoYSIsImltZ0Jhc2U2NCIsInNlbGVjdEFyZWEiLCJnZXRUb2tlbiIsInFpbml1T3B0aW9ucyIsImFjY2Vzc0tleSIsIm1hYyIsInFpbml1IiwiYXV0aCIsIk1hYyIsInJzIiwiUHV0UG9saWN5IiwidXBsb2FkVG9rZW4iLCJiYXNlVXJsIiwidXJsT3B0aW9ucyIsInJlc3BvbnNlIiwiY2xpZW50SWQiLCJ1c2VybmFtZSIsImFjY2Vzc1Rva2VuIiwiZm9ybWF0QWNjZXNzVG9rZW4iLCJhbGJ1bSIsImF1dGhvcml6YXRpb24iLCJyZXF1ZXN0T3B0aW9ucyIsImluaXRQYWdlcyIsImFsYnVtSGFzaCIsImdldEFsYnVtSGFzaE9wdGlvbnMiLCJ0aW1lb3V0IiwiYWxidW1MaXN0IiwiaW1ndXJPcHRpb25zIiwibGluayIsImRlbGV0ZWhhc2giLCJkYXRlIiwidG9VVENTdHJpbmciLCJzaWduU3RyaW5nIiwiYWNjZXNzS2V5U2VjcmV0IiwiYWNjZXNzS2V5SWQiLCJhbGlZdW5PcHRpb25zIiwib3BlcmF0b3IiLCJwYXNzd29yZCIsIm1kNVBhc3N3b3JkIiwiTUQ1IiwiZ2V0QW50aUxlZWNoUGFyYW0iLCJhbnRpTGVlY2hUb2tlbiIsImV4cGlyZVRpbWUiLCJ1cmkiLCJleHBpcmUiLCJwYXJzZUludCIsInN1YnN0cmluZyIsInVweXVuT3B0aW9ucyIsInN1ZmZpeCIsInVwdCIsInBhdGhzIiwiY3VycmVudFBhdGgiLCJwIiwiZGlyb3B0aW9ucyIsImhvc3QiLCJ3ZWJkYXZwbGlzdE9wdGlvbnMiLCJzc2xFbmFibGVkIiwid2VicGF0aCIsImltZ1RlbXBQYXRoIiwiZ2FsbGVyeVBhdGgiLCJsb2NhbENvbmZpZyIsIndlYlBhdGgiLCJjb3B5RmlsZVN5bmMiLCJTU0hDbGllbnQiLCJpbnN0YW5jZSIsIl9pbnN0YW5jZSIsImNsaWVudCIsIl9jbGllbnQiLCJOb2RlU1NIIiwiY2hhbmdlV2luU3R5bGVQYXRoVG9Vbml4IiwicHJpdmF0ZUtleSIsInBhc3NwaHJhc2UiLCJsb2dpbkluZm8iLCJwcml2YXRlS2V5UGF0aCIsImNvbm5lY3QiLCJwb3J0IiwiX2lzQ29ubmVjdGVkIiwibG9jYWwiLCJyZW1vdGUiLCJta2RpciIsInB1dEZpbGUiLCJmaWxlTW9kZSIsInNjcmlwdCIsImV4ZWMiLCJkaXJQYXRoIiwiaXNDb25uZWN0ZWQiLCJkaXJlY3RvcnlNb2RlIiwiZGlyTW9kZSIsImRpcnMiLCJ1c2VyIiwiZ3JvdXAiLCJfdXNlciIsIl9ncm91cCIsImV4ZWNDb21tYW5kIiwiY2xvc2UiLCJkaXNwb3NlIiwic2Z0cHBsaXN0Q29uZmlnIiwidXBsb2FkVGVtcFBhdGgiLCJyZW1vdGVQYXRoIiwiZmlsZVVzZXIiLCJjaG93biIsIm1vdmVTeW5jIiwiYnVpbGRJblVwbG9hZGVycyIsImFsaVl1blVwbG9hZGVyIiwidGNZdW5VcGxvYWRlciIsIlNNTVNVcGxvYWRlciIsImdpdGh1YlVwbG9hZGVyIiwicWluaXVVcGxvYWRlciIsImltZ3VyVXBsb2FkZXIiLCJ1cFl1blVwbG9hZGVyIiwid2ViZGF2cGxpc3RVcGxvYWRlciIsImxvY2FsVXBsb2FkZXIiLCJzZnRwVXBsb2FkZXIiLCJnZXRJbWdTaXplIiwicmVzdWx0cyIsImltZ1NpemUiLCJQbHVnaW5Mb2FkZXIiLCJTZXQiLCJwYWNrYWdlUGF0aCIsInJlcG9zaXRvcnkiLCJsaWNlbnNlIiwicmVzb2x2ZVBsdWdpbiIsImJhc2VkaXIiLCJsb2FkIiwicGx1Z2luRGlyIiwiZGVwcyIsImRlcGVuZGVuY2llcyIsImRldkRlcHMiLCJkZXZEZXBlbmRlbmNpZXMiLCJtb2R1bGVzIiwicmVnaXN0ZXJQbHVnaW4iLCJmdWxsTGlzdCIsImFkZCIsInBsdWdpbkludGVyZmFjZSIsInBsdWdpbk1hcCIsInVucmVnaXN0ZXJQbHVnaW4iLCJoYXNQbHVnaW4iLCJwbGF0Zm9ybTJTY3JpcHRDb250ZW50IiwiZGFyd2luIiwid2luMzIiLCJ3aW4xMCIsImxpbnV4Iiwid3NsIiwicGxhdGZvcm0yU2NyaXB0RmlsZW5hbWUiLCJnZXRDbGlwYm9hcmRJbWFnZSIsImltYWdlUGF0aCIsImNyZWF0ZUltYWdlRm9sZGVyIiwicGxhdGZvcm0iLCJpc1dzbCIsIm9zIiwicmVsZWFzZSIsImdldEN1cnJlbnRQbGF0Zm9ybSIsInNjcmlwdFBhdGgiLCJleGVjdXRpb24iLCJzcGF3biIsInN0ZG91dCIsInRyaW0iLCJpbWdQYXRoIiwic2hvdWxkS2VlcEFmdGVyVXBsb2FkaW5nIiwiZXZlbnRCdXMiLCJodHRwc0FnZW50IiwiaHR0cHMiLCJBZ2VudCIsIm1heFZlcnNpb24iLCJtaW5WZXJzaW9uIiwiYXBwZW5kRm9ybURhdGEiLCJmb3JtIiwiYXBwZW5kIiwicmVzcG9uc2VJbnRlcmNlcHRvciIsInN0YXR1cyIsInJlc3BvbnNlRXJyb3JIYW5kbGVyIiwiZXJyb3JPYmoiLCJDT05GSUdfQ0hBTkdFIiwiaGFuZGxlUHJveHkiLCJwcm94eU9wdGlvbnMiLCJob3N0bmFtZSIsInByb3RvY29sIiwibWF4Qm9keUxlbmd0aCIsIkluZmluaXR5IiwibWF4Q29udGVudExlbmd0aCIsInR1bm5lbCIsImh0dHBzT3Zlckh0dHAiLCJjcmVhdGUiLCJpbnRlcmNlcHRvcnMiLCJvcHQiLCJfX2lzT2xkT3B0aW9ucyIsIkZvcm1EYXRhIiwiYXNzaWduIiwiZ2V0SGVhZGVycyIsInFzIiwicmVxdWVzdEludGVyY2VwdG9yIiwib2JqIiwiQ29udGVudFR5cGUiLCJEQiIsImRiIiwiSlNPTlN0b3JlIiwicmVhZCIsImZsdXNoIiwidW5zZXQiLCJQbHVnaW5IYW5kbGVyIiwiaW5zdGFsbGVkUGx1Z2lucyIsInByb2Nlc3NQbHVnaW5zIiwiaGFuZGxlUGx1Z2luTmFtZVByb2Nlc3MiLCJwa2dOYW1lIiwiZnVsbE5hbWVMaXN0IiwiZnVsbE5hbWUiLCJwa2dOYW1lTGlzdCIsIndoZXJlIiwibnBtIiwicGlwZSIsInN0ZGVyciIsImxhbmd1YWdlTGlzdCIsIlVQTE9BRF9GQUlMRUQiLCJDSEVDS19TRVRUSU5HUyIsIkNIRUNLX1NFVFRJTkdTX0FORF9ORVRXT1JLIiwiVVBMT0FEX0ZBSUxFRF9SRUFTT04iLCJTRVJWRVJfRVJST1IiLCJBVVRIX0ZBSUxFRCIsIlBJQ0JFRF9TTU1TIiwiUElDQkVEX1NNTVNfVE9LRU4iLCJQSUNCRURfU01NU19CQUNLVVBfRE9NQUlOIiwiUElDQkVEX1NNTVNfTUVTU0FHRV9CQUNLVVBfRE9NQUlOIiwiUElDQkVEX0xPQ0FMIiwiUElDQkVEX0xPQ0FMX1BBVEgiLCJQSUNCRURfTE9DQUxfTUVTU0FHRV9QQVRIIiwiUElDQkVEX0xPQ0FMX0NVU1RPTVVSTCIsIlBJQ0JFRF9MT0NBTF9NRVNTQUdFX0NVU1RPTVVSTCIsIlBJQ0JFRF9MT0NBTF9XRUJQQVRIIiwiUElDQkVEX0xPQ0FMX01FU1NBR0VfV0VCUEFUSCIsIlBJQ0JFRF9BTElDTE9VRCIsIlBJQ0JFRF9BTElDTE9VRF9BQ0NFU1NLRVlJRCIsIlBJQ0JFRF9BTElDTE9VRF9BQ0NFU1NLRVlTRUNSRVQiLCJQSUNCRURfQUxJQ0xPVURfQlVDS0VUIiwiUElDQkVEX0FMSUNMT1VEX0FSRUEiLCJQSUNCRURfQUxJQ0xPVURfUEFUSCIsIlBJQ0JFRF9BTElDTE9VRF9DVVNUT01VUkwiLCJQSUNCRURfQUxJQ0xPVURfT1BUSU9OUyIsIlBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX0FSRUEiLCJQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9QQVRIIiwiUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfT1BUSU9OUyIsIlBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX0NVU1RPTVVSTCIsIlBJQ0JFRF9URU5DRU5UQ0xPVUQiLCJQSUNCRURfVEVOQ0VOVENMT1VEX1ZFUlNJT04iLCJQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVElEIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9TRUNSRVRLRVkiLCJQSUNCRURfVEVOQ0VOVENMT1VEX0FQUElEIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9CVUNLRVQiLCJQSUNCRURfVEVOQ0VOVENMT1VEX0FSRUEiLCJQSUNCRURfVEVOQ0VOVENMT1VEX0VORFBPSU5UIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9QQVRIIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9PUFRJT05TIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9DVVNUT01VUkwiLCJQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQVBQSUQiLCJQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQVJFQSIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9QQVRIIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0NVU1RPTVVSTCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9PUFRJT05TIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0VORFBPSU5UIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNX1RJUCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9DT05GSVJNIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNX0NBTkNFTCIsIlBJQ0JFRF9HSVRIVUIiLCJQSUNCRURfR0lUSFVCX1RPS0VOIiwiUElDQkVEX0dJVEhVQl9SRVBPIiwiUElDQkVEX0dJVEhVQl9QQVRIIiwiUElDQkVEX0dJVEhVQl9CUkFOQ0giLCJQSUNCRURfR0lUSFVCX0NVU1RPTVVSTCIsIlBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9SRVBPIiwiUElDQkVEX0dJVEhVQl9NRVNTQUdFX0JSQU5DSCIsIlBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9QQVRIIiwiUElDQkVEX0dJVEhVQl9NRVNTQUdFX0NVU1RPTVVSTCIsIlBJQ0JFRF9RSU5JVSIsIlBJQ0JFRF9RSU5JVV9BQ0NFU1NLRVkiLCJQSUNCRURfUUlOSVVfU0VDUkVUS0VZIiwiUElDQkVEX1FJTklVX0JVQ0tFVCIsIlBJQ0JFRF9RSU5JVV9QQVRIIiwiUElDQkVEX1FJTklVX1VSTCIsIlBJQ0JFRF9RSU5JVV9PUFRJT05TIiwiUElDQkVEX1FJTklVX0FSRUEiLCJQSUNCRURfUUlOSVVfTUVTU0FHRV9QQVRIIiwiUElDQkVEX1FJTklVX01FU1NBR0VfQVJFQSIsIlBJQ0JFRF9RSU5JVV9NRVNTQUdFX09QVElPTlMiLCJQSUNCRURfUUlOSVVfTUVTU0FHRV9VUkwiLCJQSUNCRURfSU1HVVIiLCJQSUNCRURfSU1HVVJfQ0xJRU5USUQiLCJQSUNCRURfSU1HVVJfVVNFUk5BTUUiLCJQSUNCRURfSU1HVVJfQUNDRVNTX1RPS0VOIiwiUElDQkVEX0lNR1VSX0FMQlVNIiwiUElDQkVEX0lNR1VSX1BST1hZIiwiUElDQkVEX0lNR1VSX01FU1NBR0VfQ0xJRU5USUQiLCJQSUNCRURfSU1HVVJfTUVTU0FHRV9VU0VSTkFNRSIsIlBJQ0JFRF9JTUdVUl9NRVNTQUdFX0FDQ0VTU19UT0tFTiIsIlBJQ0JFRF9JTUdVUl9NRVNTQUdFX0FMQlVNIiwiUElDQkVEX0lNR1VSX01FU1NBR0VfUFJPWFkiLCJQSUNCRURfVVBZVU4iLCJQSUNCRURfVVBZVU5fQlVDS0VUIiwiUElDQkVEX1VQWVVOX09QRVJBVE9SIiwiUElDQkVEX1VQWVVOX1BBU1NXT1JEIiwiUElDQkVEX1VQWVVOX1BBVEgiLCJQSUNCRURfVVBZVU5fVVJMIiwiUElDQkVEX1VQWVVOX09QVElPTlMiLCJQSUNCRURfVVBZVU5fQU5USV9MRUVDSF9UT0tFTiIsIlBJQ0JFRF9VUFlVTl9FWFBJUkVfVElNRSIsIlBJQ0JFRF9VUFlVTl9NRVNTQUdFX09QRVJBVE9SIiwiUElDQkVEX1VQWVVOX01FU1NBR0VfUEFTU1dPUkQiLCJQSUNCRURfVVBZVU5fTUVTU0FHRV9VUkwiLCJQSUNCRURfVVBZVU5fTUVTU0FHRV9PUFRJT05TIiwiUElDQkVEX1VQWVVOX01FU1NBR0VfUEFUSCIsIlBJQ0JFRF9XRUJEQVZQTElTVCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9IT1NUIiwiUElDQkVEX1dFQkRBVlBMSVNUX1NTTEVOQUJMRUQiLCJQSUNCRURfV0VCREFWUExJU1RfVVNFUk5BTUUiLCJQSUNCRURfV0VCREFWUExJU1RfUEFTU1dPUkQiLCJQSUNCRURfV0VCREFWUExJU1RfUEFUSCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9XRUJTSVRFX1BBVEgiLCJQSUNCRURfV0VCREFWUExJU1RfQ1VTVE9NVVJMIiwiUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfSE9TVCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1NTTEVOQUJMRUQiLCJQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9VU0VSTkFNRSIsIlBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1BBU1NXT1JEIiwiUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfUEFUSCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1dFQlNJVEVfUEFUSCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX0NVU1RPTVVSTCIsIlBJQ0JFRF9TRlRQUExJU1QiLCJQSUNCRURfU0ZUUFBMSVNUX0hPU1QiLCJQSUNCRURfU0ZUUFBMSVNUX1BPUlQiLCJQSUNCRURfU0ZUUFBMSVNUX1VTRVJOQU1FIiwiUElDQkVEX1NGVFBQTElTVF9QQVNTV09SRCIsIlBJQ0JFRF9TRlRQUExJU1RfUFJJVkFURUtFWSIsIlBJQ0JFRF9TRlRQUExJU1RfUFJJVkFURUtFWV9QQVNTUEhSQVNFIiwiUElDQkVEX1NGVFBQTElTVF9VUExPQURQQVRIIiwiUElDQkVEX1NGVFBQTElTVF9DVVNUT01VUkwiLCJQSUNCRURfU0ZUUFBMSVNUX1dFQlNJVEVfUEFUSCIsIlBJQ0JFRF9TRlRQUExJU1RfRklMRV9VU0VSIiwiUElDQkVEX1NGVFBQTElTVF9GSUxFX01PREUiLCJQSUNCRURfU0ZUUFBMSVNUX0RJUl9NT0RFIiwiUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0hPU1QiLCJQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUE9SVCIsIlBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QUklWQVRFS0VZIiwiUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1BSSVZBVEVLRVlfUEFTU1BIUkFTRSIsIlBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9VUExPQURQQVRIIiwiUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0NVU1RPTVVSTCIsIlBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9XRUJTSVRFX1BBVEgiLCJQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRklMRV9VU0VSIiwiUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0ZJTEVfTU9ERSIsIlBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9ESVJfTU9ERSIsIkJVSUxESU5fV0FURVJNQVJLX0lTQUREV0FURVJNQVJLIiwiQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9JU0FERFdBVEVSTUFSSyIsIkJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RZUEUiLCJCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1RZUEUiLCJCVUlMRElOX1dBVEVSTUFSS19JU0ZVTExTQ1JFRU5XQVRFUk1BUksiLCJCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX0lTRlVMTFNDUkVFTldBVEVSTUFSSyIsIkJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0RFR1JFRSIsIkJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLREVHUkVFIiwiQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVEVYVCIsIkJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLVEVYVCIsIkJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RFWFRGT05UUEFUSCIsIkJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVFBBVEgiLCJCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktGT05UUkFUSU8iLCJCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0ZPTlRSQVRJTyIsIkJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0ZPTlRDT0xPUiIsIkJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVENPTE9SIiwiQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLSU1BR0VQQVRIIiwiQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktJTUFHRVBBVEgiLCJCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktQT1NJVElPTiIsIkJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLUE9TSVRJT04iLCJCVUlMRElOX1JFTkFNRV9GT1JNQVQiLCJCVUlMRElOX1JFTkFNRV9FTkFCTEUiLCJCVUlMRElOX0NPTVBSRVNTX1FVQUxJVFkiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUVVBTElUWSIsIkJVSUxESU5fQ09NUFJFU1NfSVNDT05WRVJUIiwiQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTQ09OVkVSVCIsIkJVSUxESU5fQ09NUFJFU1NfQ09OVkVSVEZPUk1BVCIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9DT05WRVJURk9STUFUIiwiQlVJTERJTl9DT01QUkVTU19JU1JFU0laRSIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFU0laRSIsIkJVSUxESU5fQ09NUFJFU1NfUkVTSVpFV0lEVEgiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFV0lEVEgiLCJCVUlMRElOX0NPTVBSRVNTX1JFU0laRUhFSUdIVCIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVIRUlHSFQiLCJCVUlMRElOX0NPTVBSRVNTX0lTUkVTSVpFQllQRVJDRU5UIiwiQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUkVTSVpFQllQRVJDRU5UIiwiQlVJTERJTl9DT01QUkVTU19SRVNJWkVQRVJDRU5UIiwiQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRVBFUkNFTlQiLCJCVUlMRElOX0NPTVBSRVNTX1NLSVBSRVNJWkVPRlNNQUxMSU1HIiwiQlVJTERJTl9DT01QUkVTU19JU1JPVEFURSIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JPVEFURSIsIkJVSUxESU5fQ09NUFJFU1NfUk9UQVRFREVHUkVFIiwiQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JPVEFURURFR1JFRSIsIkJVSUxESU5fQ09NUFJFU1NfSVNSRU1PVkVFWElGIiwiQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUkVNT1ZFRVhJRiIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX1NVQ0NFU1MiLCJQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRUQiLCJQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRURfUkVBU09OIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEX1BBVEgiLCJQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX1NVQ0NFU1MiLCJQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRCIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEX1JFQVNPTiIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEX1ZBTElEIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9TVUNDRVNTIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRUQiLCJQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRF9SRUFTT04iLCJQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRF9WQUxJRCIsImVuIiwiSTE4bk1hbmFnZXIiLCJvYmplY3RBZGFwdGVyIiwiT2JqZWN0QWRhcHRlciIsImxhbmd1YWdlIiwiSTE4biIsImFkYXB0ZXIiLCJkZWZhdWx0TGFuZ3VhZ2UiLCJsb2FkT3V0dGVySTE4biIsImkxOG5Gb2xkZXIiLCJnZXRPdXR0ZXJJMThuRm9sZGVyIiwicmVhZGRpclN5bmMiLCJ3aXRoRmlsZVR5cGVzIiwiaXNGaWxlIiwiZW5kc1dpdGgiLCJpMThuRmlsZVBhdGgiLCJpMThuRmlsZSIsImkxOG5GaWxlT2JqIiwieWFtbCIsInBhdGhFeGlzdHNTeW5jIiwiYWRkTG9jYWxlIiwibG9jYWxlcyIsIm9yaWdpbkxvY2FsZXMiLCJnZXRMb2NhbGUiLCJuZXdMb2NhbGVzIiwibWVyZ2UiLCJzZXRMb2NhbGUiLCJhZGRMYW5ndWFnZSIsIlBpY0dvIiwiaW5pdENvbmZpZ1BhdGgiLCJpbml0Q29uZmlnIiwiX3BsdWdpbkxvYWRlciIsImVuc3VyZUZpbGVTeW5jIiwiX2NvbmZpZyIsInVwbG9hZGVycyIsIkltZ0Zyb21QYXRoIiwiSW1nRnJvbUJhc2U2NCIsImxpZmVjeWNsZSIsInJlZ2lzdGVyQ29tbWFuZHMiLCJwcm9wTmFtZSIsInN0YXJ0IiwicmVtb3ZlIl0sIm1hcHBpbmdzIjoiNm5DQUVBLE1BQU1BLEdBQXlCLENBQzdCQyxPQUFTQyxJQUVQLE1BQU1DLEVBQU1ELEVBQUlDLElBQ2hCQSxFQUFJQyxRQUNEQyxRQUFRLHdCQUNSQyxZQUFZLHdCQUNaQyxNQUFNLE9BQ05DLE9BQU8sc0JBQXVCLDRCQUM5QkEsT0FBTyw0QkFBNkIsb0NBQ3BDQyxRQUFPLENBQUNDLEVBQW1CTixLQUMxQixNQUFNTyxNQUFFQSxFQUFLQyxTQUFFQSxHQUFhUixFQUN0QlMsRUFBVSxDQUNkRixNQUFBQSxFQUNBQyxTQUFBQSxHQUVGVixFQUFJRixjQUFjYyxRQUFRSixFQUFTRyxHQUFTRSxPQUFPQyxJQUFRZCxFQUFJZSxJQUFJQyxNQUFNRixTQUU3RWIsRUFBSUMsUUFDREMsUUFBUSwwQkFDUkUsTUFBTSxNQUNORCxZQUFZLDBCQUNaRyxRQUFRQyxJQUNQUixFQUFJRixjQUFjbUIsVUFBVVQsR0FBU0ssT0FBT0MsSUFBUWQsRUFBSWUsSUFBSUMsTUFBTUYsU0FFdEViLEVBQUlDLFFBQ0RDLFFBQVEsdUJBQ1JDLFlBQVksdUJBQ1pFLE9BQU8sc0JBQXVCLDRCQUM5QkEsT0FBTyw0QkFBNkIsb0NBQ3BDQyxRQUFPLENBQUNDLEVBQW1CTixLQUMxQixNQUFNTyxNQUFFQSxFQUFLQyxTQUFFQSxHQUFhUixFQUN0QlMsRUFBVSxDQUNkRixNQUFBQSxFQUNBQyxTQUFBQSxHQUVGVixFQUFJRixjQUFjb0IsT0FBT1YsRUFBU0csR0FBU0UsT0FBT0MsSUFBZWQsRUFBSWUsSUFBSUMsTUFBTUYsV0NwQ2pGSyxHQUFrQixDQUN0QnBCLE9BQVNDLElBQ0tBLEVBQUlDLElBQ1pDLFFBQ0RJLE9BQU8sc0JBQXVCLDhCQ1lyQmMsR0FBdUJDLEdBQ3JDLE1BQU1DLEVBQVEsaUVBQ2QsT0FBT0MsTUFBTUMsS0FBSyxDQUFFSCxPQUFBQSxJQUFVSSxLQUFJLElBQU1ILEVBQU1JLE9BQU9DLEtBQUtDLE1BQU1ELEtBQUtFLFNBQVdQLEVBQU1ELFdBQVVTLEtBQUssYUFXdkZDLEdBQWdDQyxFQUFpQkMsRUFBc0JDLEdBQ3JGLE1BQU1DLEVBQStDLENBQ25ELE1BQU8sS0FBTSxJQUFJQyxNQUFPQyxjQUFjQyxXQUN0QyxNQUFPLEtBQU0sSUFBSUYsTUFBT0MsY0FBY0MsV0FBV0MsTUFBTSxHQUN2RCxNQUFPLElBQXdELE1BQWpELElBQUlILE1BQU9JLFdBQWEsR0FBR0YsV0FBV2pCLE9BQWUsS0FBSSxJQUFJZSxNQUFPSSxXQUFhLE1BQU8sSUFBSUosTUFBT0ksV0FBYSxHQUFHRixXQUNqSSxNQUFPLElBQWlELEtBQTNDLElBQUlGLE1BQU9LLFVBQVVILFdBQVdqQixPQUFlLEtBQUksSUFBSWUsTUFBT0ssYUFBYyxJQUFJTCxNQUFPSyxVQUFVSCxXQUM5RyxNQUFPLElBQWtELEtBQTVDLElBQUlGLE1BQU9NLFdBQVdKLFdBQVdqQixPQUFlLEtBQUksSUFBSWUsTUFBT00sY0FBZSxJQUFJTixNQUFPTSxXQUFXSixXQUNqSCxNQUFPLElBQW9ELEtBQTlDLElBQUlGLE1BQU9PLGFBQWFMLFdBQVdqQixPQUFlLEtBQUksSUFBSWUsTUFBT08sZ0JBQWlCLElBQUlQLE1BQU9PLGFBQWFMLFdBQ3ZILE1BQU8sSUFBb0QsS0FBOUMsSUFBSUYsTUFBT1EsYUFBYU4sV0FBV2pCLE9BQWUsS0FBSSxJQUFJZSxNQUFPUSxnQkFBaUIsSUFBSVIsTUFBT1EsYUFBYU4sV0FDdkgsUUFBUyxJQUFNTyxVQUFPQyxXQUFXLE9BQU81QixPQUFPNkIsVUFBS0MsU0FBU2hCLEVBQVNlLFVBQUtFLFFBQVFqQixLQUFXa0IsT0FBTyxPQUNyRyxXQUFZLElBQU1MLFVBQU9DLFdBQVcsT0FBTzVCLE9BQU82QixVQUFLQyxTQUFTaEIsRUFBU2UsVUFBS0UsUUFBUWpCLEtBQVdrQixPQUFPLE9BQU9YLE1BQU0sRUFBRyxJQUN4SCxXQUFZLElBQU1uQixHQUFzQixJQUN4QyxXQUFZLElBQU1BLEdBQXNCLElBQ3hDLGFBQWMsSUFBTWMsRUFBZ0JhLFVBQUtDLFNBQVNkLEVBQWVhLFVBQUtFLFFBQVFmLElBQWtCYSxVQUFLQyxTQUFTaEIsRUFBU2UsVUFBS0UsUUFBUWpCLElBQ3BJLFNBQVUsSUFBTW1CLE9BQVNDLFFBQVEsS0FBTSxJQUN2QyxjQUFlLElBQU16QixLQUFLQyxNQUFNUSxLQUFLaUIsTUFBUSxLQUFNZixZQUVyRCxRQUFxQmdCLElBQWpCckIsSUFBZ0NzQixPQUFPQyxLQUFLckIsR0FBZXNCLE1BQUtDLEdBQVF6QixFQUFhMEIsU0FBU0QsT0FBV3pCLEVBQWEwQixTQUFTLGVBQ2pJLE9BQU8zQixFQUVULE1BQU00QixFQUFNYixVQUFLRSxRQUFRakIsR0FDekIsSUFBSTZCLEVBQVVOLE9BQU9DLEtBQUtyQixHQUFlMkIsUUFBTyxDQUFDQyxFQUFLQyxJQUM3Q0QsRUFBSVgsUUFBUSxJQUFJYSxPQUFPRCxFQUFLLEtBQU03QixFQUFjNkIsT0FDdEQvQixHQUFnQjJCLEVBT25CLE9BTkFDLEVBQVVBLEVBQVFULFFBQVEsNkJBQTZCLENBQUNjLEVBQVNDLEVBQUtDLEtBQ3BFQSxFQUFRekMsS0FBSzBDLElBQUksRUFBR0QsR0FBUyxHQUc3QixPQUZjckIsVUFBS3VCLFFBQVF0QyxHQUFTdUMsTUFBTXhCLFVBQUt5QixLQUNuQ2pDLE1BQU0sRUFBSTZCLEdBQU9OLFFBQU8sQ0FBQ1csRUFBR0MsSUFBTSxHQUFHRCxLQUFLQyxNQUMzQ3RCLFFBQVEsS0FBTSxPQUVwQlMsRUFHRixNQUFNYyxHQUFTQyxHQUF5QixlQUFpQkMsS0FBS0QsR0FFeERFLEdBQWVGLElBQzFCQSxFQUFNQSxHQUFPLEdBQ2IsSUFFRSxPQUFPQSxJQUFRRyxVQUFVSCxHQUN6QixNQUFPOUQsR0FDUCxPQUFPLElBR0VrRSxHQUFtQkosSUFDekJFLEdBQVlGLEtBQ2ZBLEVBQU1LLFVBQVVMLElBRVhBLEdBR0lNLEdBQWdCQyxJQUMzQixJQUNFLE1BQU1DLE1BQUVBLEVBQVEsRUFBQ0MsT0FBRUEsRUFBUyxFQUFDQyxLQUFFQSxHQUFTQyxZQUFVSixHQUVsRCxNQUFPLENBQ0xLLE1BQU0sRUFDTkosTUFBQUEsRUFDQUMsT0FBQUEsRUFDQXBDLFFBTGNxQyxFQUFPLElBQUlBLElBQVMsUUFPcEMsTUFBT3hFLEdBRVAsTUFBTyxDQUNMMEUsTUFBTSxFQUNOSixNQUFPLElBQ1BDLE9BQVEsSUFDUnBDLFFBQVMsVUFLRndDLEdBQVlDLE1BQU9DLElBQzlCLElBQ0UsTUFBTyxDQUNMMUMsUUFBU0YsVUFBS0UsUUFBUTBDLEdBQ3RCQyxTQUFVN0MsVUFBS0MsU0FBUzJDLEdBQ3hCRSxhQUFjQyxVQUFHQyxTQUFTSixHQUMxQkssU0FBUyxHQUVYLFNBQ0EsTUFBTyxDQUNMQyxPQUFRLGFBQWFOLFVBQ3JCSyxTQUFTLEtBS0ZFLEdBQWFSLE1BQU9kLEVBQWE1RSxLQUU1QyxJQUFJbUcsRUFESnZCLEVBQU1JLEdBQWdCSixHQUV0QixNQUFNd0IsRUFBWSxJQUFJQyxTQUFpQyxDQUFDQyxFQUFTQyxLQUMvRCxpQkFDRSxJQUNFLE1BQU1DLFFBQVl4RyxFQUFJeUcsUUFBUSxDQUM1QkMsT0FBUSxVQUNSOUIsRUFDQStCLHlCQUF5QixFQUN6QkMsYUFBYyxnQkFFYkMsTUFBTUMsR0FDRUEsRUFBS0MsT0FFaEJDLGFBQWFiLEdBQ2IsTUFBTWMsRUFBVSxJQUFJQyxNQUFJdEMsR0FBS3VDLFNBQzdCLElBQUlsRSxFQUFVLEdBQ2QsSUFFRUEsRUFEa0IsSUFBSWlFLE1BQUl0QyxHQUFLd0MsYUFDWEMsSUFBSSxXQUFhdEUsVUFBS0UsUUFBUWdFLElBQVksR0FDOUQsTUFBT2pHLEdBQ1BpQyxFQUFVRixVQUFLRSxRQUFRZ0UsSUFBWSxJQUVoQ2hFLEVBQVFxRSxXQUFXLE1BQVFyRSxJQUM5QkEsRUFBVSxJQUFJQSxLQUVoQnFELEVBQVEsQ0FDTlQsT0FBUVcsRUFDUlosU0FBVTdDLFVBQUtDLFNBQVNpRSxHQUN4QmhFLFFBQUFBLEVBQ0ErQyxTQUFTLElBRVgsTUFBT2hGLEdBQ1BnRyxhQUFhYixHQUNiRyxFQUFRLENBQ05OLFNBQVMsRUFFVEMsT0FBUSxXQUFXckIsc0JBQWM1RCxNQUFBQSxTQUFBQSxFQUFPdUcsdUJBQVcsU0FsQ3pELEdBcUNLMUcsTUFBTTBGLE1BRVBpQixFQUFpQixJQUFJbkIsU0FBa0NDLElBQzNESCxFQUFZc0IsWUFBVyxLQUNyQm5CLEVBQVEsQ0FDTk4sU0FBUyxFQUNUQyxPQUFRLFdBQVdyQixnQkFFcEIsUUFFTCxPQUFPeUIsUUFBUXFCLEtBQUssQ0FBQ3RCLEVBQVdvQixLQVlyQkcsR0FBcUJDLEdBQzVCLHlCQUF5Qi9DLEtBQUsrQyxHQUN6QixRQUNFQSxFQUFLTixXQUFXLGlCQUNsQixTQUNFTyxHQUFhRCxHQUNmLFNBRUYsVUFVSUMsR0FBZ0JDLElBQzNCLEdBQUkvRSxVQUFLZ0YsV0FBV0QsR0FDbEIsT0FBTyxFQUVULE1BQU1FLEVBQWFqRixVQUFLakIsS0FBS21HLFFBQVFDLE1BQU9KLEdBQzVDLE9BQUloQyxVQUFHcUMsV0FBV0gsTUFHZEYsRUFBV25FLFNBQVMsT0FBUW1FLEVBQVduRSxTQUFTLFFBNkJ6Q3lFLEdBQTJCLENBQUNSLEVBQWNTLEVBQVEsS0FDekRBLEVBQ0ssSUFBSUEsa0JBQXNCVCxJQUUxQixnQkFBZ0JBLElBY2RVLEdBQXVCLENBQUNSLEVBQW9CUyxFQUE0QkMsV0FFbkYsT0FEdUJiLEdBQWtCRyxJQUV2QyxJQUFLLFNBQ0wsSUFBSyxRQUNILE9BQU9BLEVBQ1QsSUFBSyxTQUNILE9BQU9NLEdBQXlCTixHQUNsQyxRQUFTLENBR1AsSUFBSUUsRUFBYUYsRUFDakIsT0FBSS9FLFVBQUtnRixXQUFXRCxJQUFlaEMsVUFBR3FDLFdBQVdMLEdBQ3hDVyxHQUFvQlQsSUFHN0JBLEVBQWFqRixVQUFLakIsS0FBS21HLFFBQVFDLE1BQU9KLEdBQ2xDaEMsVUFBR3FDLFdBQVdILEdBQ1RTLEdBQW9CVCxJQUc3Qk8sRUFBT0csS0FBSyxxQkFBcUJaLEtBQzFCLFFBaUJBYSxHQUFzQixDQUFDYixFQUFvQlMsRUFBNEJDLGlCQUVsRixPQUR1QmIsR0FBa0JHLElBRXZDLElBQUssU0FDSCxPQUFPYyxHQUFvQmQsR0FDN0IsSUFBSyxRQUNILE9BQU9jLEdBQW9CZCxHQUFZLEdBQ3pDLElBQUssU0FDSCxPQUFPYyxHQUFvQlIsR0FBeUJOLElBQ3RELFFBQVMsQ0FJUCxJQUFLaEMsVUFBR3FDLFdBQVdMLEdBRWpCLE9BREFTLEVBQU9HLEtBQUssc0JBQXNCWixLQUMzQixHQUVULE1BQU1lLEVBQWtCOUYsVUFBSytGLE1BQU1oSCxLQUFLZ0csRUFBWSxnQkFDcEQsR0FBS2hDLFVBQUdxQyxXQUFXVSxHQUdaLENBQ0wsTUFBTUUsRUFBTWpELFVBQUdrRCxhQUFhSCxJQUFvQixHQUNoRCxpQkFBS0UsRUFBSW5CLDJCQUFNakUsU0FBUyxrQkFJakJvRixFQUFJbkIsTUFIVFcsRUFBT0csS0FBSywyQ0FBMkNLLEVBQUluQixNQUFrQixzREFDdEUsSUFMVCxPQURBVyxFQUFPRyxLQUFLLHNCQUFzQlosS0FDM0IsTUFvQkZXLEdBQXVCUSxHQUNsQkEsRUFBUTFFLE1BQU14QixVQUFLeUIsS0FDcEIxQyxLQUFLLEtBVVQ4RyxHQUFzQixDQUFDZCxFQUFvQk8sR0FBaUIsS0FDdkUsR0FBS1AsRUFBV25FLFNBQVMsS0FFbEIsQ0FDTCxJQUFJdUYsRUFBTSxrQ0FFTmIsSUFDRmEsRUFBTSw0Q0FFUixNQUFNQyxFQUFXckIsRUFBV3NCLE1BQU1GLEdBQ2xDLE9BQUtDLEVBSUlBLEVBQVMsSUFIaEJYLFFBQVFFLEtBQUssaUNBQ05aLEdBVlQsT0FBT0EsR0FxQkV1QixHQUFrQixHQU1sQkMsR0FBMEJuRixHQUM5QmtGLEdBQWdCNUYsTUFBSzhGLEdBQWFwRixFQUFJbUQsV0FBV2lDLEtBVTdDQyxHQUFzQnJJLEdBRWIsaUJBQVhBLElBQ05JLE1BQU1rSSxRQUFRdEksSUFDZm9DLE9BQU9DLEtBQUtyQyxHQUFRRSxPQUFTLFdBT2pCcUksR0FBY0MsR0FDNUIsSUFDRSxPQUFPQyxLQUFLQyxNQUFNRixHQUNsQixNQUFPM0ksR0FDUCxPQUFPMkksR0FtQkosTUFBTUcsR0FBYyxDQUFDQyxFQUF1QixJQUMxQ0MsTUFBTUMsT0FBT0YsSUFBUSxFQUFJRSxPQUFPRixHQUc1QkcsR0FBUSxJQUNhLGdCQUF6QmpDLFFBQVFrQyxJQUFJQyxTQTRCckIsTUFBTUMsR0FBNEIsR0FBR0MsK0JBRTlCNUUsZUFBZTZFLEdBQ3BCQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxHQUVBSCxHQUF1QkEsR0FBdUJBLEVBQXNCLEdBQUtBLEVBQXNCLEVBQUksSUFBT0EsRUFDMUcsTUFBTUksRUFBUUMsVUFBTVosSUFDWnBGLE1BQU9pRyxFQUFXLFdBQWNGLEVBQU1HLFdBQ3hDQyxRQXVCUjdGLGVBQ0UrRSxFQUNBQyxFQUNBRyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBSSxFQUFtQixJQUNuQlQsRUFBMEIsR0FFMUIsSUFBSVcsRUFDa0IsVUFBbEJkLEdBQ0ZRLEVBQXFCQSxHQUFzQlosR0FDM0NrQixRQUFrQkgsVUFBTUgsR0FBb0JPLFlBRTVDRCxRQTlFSjdGLGVBQ0VnRixFQUNBRyxFQUNBWSxFQUNBQyxHQUVBYixFQUFRQSxHQUFPLEtBQ2ZhLEVBQWNBLEdBQWFoQixFQUUzQixNQUNNL0osRUFBdUMsQ0FDM0NnTCxPQUFRLE1BQ1JDLFdBQVksQ0FDVkMsS0FMSkosRUFBU0EsR0FBUSw4QkFRWEssRUFQV0MsVUFBVUMsU0FBU04sR0FPWE8sT0FBT3BCLEVBQU1sSyxHQUV0QyxPQURZdUwsT0FBTzFLLEtBQUtzSyxHQTZESkssQ0FDaEJ6QixFQUNBRyxFQUNBRyxFQUNBRixHQUFxQkosR0FHekIsTUFBUXRGLE1BQU9nSCxFQUFnQi9HLE9BQVFnSCxTQWV6QzNHLGVBQXdCeUYsR0FDdEIsTUFBTS9GLE1BQUVBLEVBQUtDLE9BQUVBLFNBQWlCK0YsVUFBTUQsR0FBT0csV0FDN0MsTUFBTyxDQUFFbEcsTUFBT0EsR0FBUyxJQUFLQyxPQUFRQSxHQUFVLEtBakJpQmlILENBQy9EZixHQUVJZ0IsRUFBdUI1SyxLQUFLQyxNQUFNeUosRUFBV3ZCLEdBQVlpQixJQUN6RHlCLEVBQXdCN0ssS0FBS0MsTUFDaEMySyxFQUF1QkYsRUFBbUJELEdBRTdDLGFBQWFoQixVQUFNRyxHQUNoQmtCLE9BQU9GLEVBQXNCQyxFQUF1QixDQUNuREUsSUFBSyxXQUVOQyxPQUFPL0IsRUFBaUIsQ0FBRWdDLFdBQVksQ0FBRUMsRUFBRyxJQUFLQyxFQUFHLElBQUtwSSxFQUFHLElBQUtxSSxNQUFPLEtBQ3ZFdkIsV0ExRHFCd0IsQ0FDdEJ2QyxFQUNBQyxFQUNBRyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBSSxFQUNBVCxHQVdGLGFBVHlCTyxFQUN0QjhCLFVBQVUsQ0FDVCxDQUNFQyxNQUFPM0IsRUFDUDRCLFFBQVNqQyxHQUFZLFlBQ3JCa0MsS0FBTXpDLEtBR1RhLFdBK0NMLE1BQU02QixHQUFhLElBQUlDLElBQ2RBLEVBQU9DLE9BQU1DLEdBQ2RBLE1BQUFBLElBR2lCLGlCQUFWQSxFQUNRLEtBQVZBLEVBRVksaUJBQVZBLEVBQ0ZBLEVBQVEsRUFFSSxpQkFBVkEsR0FDRmpLLE9BQU9DLEtBQUtnSyxHQUFPbk0sT0FBUyxLQU1uQ29NLEdBQTZCLENBQ2pDLE9BQ0EsS0FDQSxPQUNBLE1BQ0EsT0FDQSxRQUNBLE9BQ0EsTUFDQSxNQUNBLE1BQ0EsU0FDQSxZQUNBLE1BQ0EsTUFDQSxNQUNBLE1BQ0EsTUFDQSxPQUNBLE1BQ0EsSUFDQSxRQU9JQyxHQUFlLENBQUMsTUFBTyxPQUFRLE1BQU8sT0FBUSxNQUFPLE9BQVEsTUFBTyxNQUFPLE1BQU8sT0FBUSxPQUFRLFFBRWpHaEksZUFBZWlJLEdBQW1CbkQsRUFBYTdKLEVBQW1DK0osR0FDdkYsSUFDRSxJQUFJUyxFQUFxQkMsVUFBTVosR0FnQi9CLE9BZkk2QyxHQUFXMU0sRUFBUWlOLGlCQUNyQnpDLEVBQVFDLGdCQUFZYixHQUNsQkMsRUFDQTdKLEVBQVE4SixlQUFpQixPQUN6QkMsRUFDQS9KLEVBQVFnSyxzQkFDUmIsR0FBWW5KLEVBQVFpSyxpQkFDcEJqSyxFQUFRaU4sY0FDUmpOLEVBQVFtSyxrQkFDUmhCLEdBQVluSixFQUFRb0sscUJBQ3BCcEssRUFBUXFLLGVBQ1JySyxFQUFRc0ssbUJBQ1J0SyxFQUFRa04sMkJBR0MxQyxFQUFNSyxXQUNuQixNQUFPeEssR0FFUCxPQURBd0gsUUFBUXpILElBQUlDLEdBQ0x3SixHQUlYLFNBQVNzRCxHQUFlbk4sR0FDdEIsTUFBTyxDQUNMb04sUUFBU2pFLEdBQVluSixFQUFRb04sU0FDN0JDLFVBQVdyTixFQUFRcU4sWUFBYSxFQUNoQ0MsY0FBZXROLEVBQVFzTixlQUFpQixNQUN4Q0MsU0FBVXZOLEVBQVF1TixXQUFZLEVBQzlCQyxhQUFjckUsR0FBWW5KLEVBQVF3TixjQUNsQ0MsWUFBYXRFLEdBQVluSixFQUFReU4sYUFDakNDLHFCQUFzQjFOLEVBQVEwTix1QkFBd0IsRUFDdERDLGtCQUFtQjNOLEVBQVEyTixvQkFBcUIsRUFDaERDLGNBQWV6RSxHQUFZbkosRUFBUTROLGVBQ25DQyxTQUFVN04sRUFBUTZOLFdBQVksRUFDOUJDLGFBQWMzRSxHQUFZbkosRUFBUThOLGNBQ2xDQyxPQUFRL04sRUFBUStOLFFBQVUsUUFJdkJoSixlQUFlaUosR0FBY25FLEVBQWE3SixFQUFrQ2lPLEdBQ2pGak8sRUFBVW1OLEdBQWNuTixHQUN4QixJQUVFLEdBREFpTyxFQUFZQSxFQUFVQyxjQUFjekwsUUFBUSxJQUFLLEtBQzVDc0ssR0FBYS9KLFNBQVNpTCxHQUN6QixPQUFPcEUsRUFFVCxJQUFJVyxFQUFxQkMsVUFBTVosR0FDM0J1RCxFQUFVLElBSWQsR0FISVYsR0FBVzFNLEVBQVFvTixVQUFZcE4sRUFBUW9OLFFBQVcsTUFDcERBLEVBQVVwTixFQUFRb04sU0FFaEJwTixFQUFRMk4sbUJBQ1YsR0FBSWpCLEdBQVcxTSxFQUFRNE4sZUFBZ0IsQ0FDckMsTUFBTU8sUUFBbUIzRCxFQUFNRyxXQUFXekUsTUFBS3lFLEdBQVlBLEVBQVNsRyxRQUM5RDJKLFFBQW9CNUQsRUFBTUcsV0FBV3pFLE1BQUt5RSxHQUFZQSxFQUFTakcsU0FDakV5SixHQUFjQyxJQUNoQjVELEVBQVFBLEVBQU1zQixPQUNaOUssS0FBS3FOLE1BQU1GLEVBQWFuTyxFQUFRNE4sY0FBaUIsS0FDakQ1TSxLQUFLcU4sTUFBTUQsRUFBY3BPLEVBQVE0TixjQUFpQixLQUNsRCxDQUNFN0IsSUFBSyxrQkFJUixHQUFJL0wsRUFBUXVOLFNBQ2pCLEdBQXFDLGlCQUF6QnZOLEVBQVF3TixjQUE2QnhOLEVBQVF3TixhQUFlLEdBQXNDLGlCQUF4QnhOLEVBQVF5TixhQUE0QnpOLEVBQVF5TixZQUFjLEVBQzlJakQsRUFBUUEsRUFBTXNCLE9BQ1o5TCxFQUFReU4sWUFDUnpOLEVBQVF3TixhQUNSLENBQ0V6QixJQUFLLGNBR0osR0FBcUMsaUJBQXpCL0wsRUFBUXdOLGNBQTZCeE4sRUFBUXdOLGFBQWUsSUFBc0MsaUJBQXhCeE4sRUFBUXlOLGFBQW9ELElBQXhCek4sRUFBUXlOLGFBQW9CLENBQzNKLE1BQU1VLFFBQW1CM0QsRUFBTUcsV0FBV3pFLE1BQUt5RSxHQUFZQSxFQUFTbEcsUUFDOUQySixRQUFvQjVELEVBQU1HLFdBQVd6RSxNQUFLeUUsR0FBWUEsRUFBU2pHLFNBQ3JFLEdBQUl5SixHQUFjQyxLQUNYcE8sRUFBUTBOLHNCQUF5QjFOLEVBQVEwTixzQkFBd0IxTixFQUFRd04sYUFBZVksR0FBYyxDQUN6RyxNQUFNRSxFQUFhdE8sRUFBUXdOLGFBQWVZLEVBQzFDNUQsRUFBUUEsRUFBTXNCLE9BQ1o5SyxLQUFLcU4sTUFBTUYsRUFBYUcsR0FDeEJ0TyxFQUFRd04sYUFDUixDQUNFekIsSUFBSyxpQkFLUixHQUFvQyxpQkFBeEIvTCxFQUFReU4sYUFBNEJ6TixFQUFReU4sWUFBYyxJQUF1QyxpQkFBekJ6TixFQUFRd04sY0FBc0QsSUFBekJ4TixFQUFRd04sY0FBcUIsQ0FDM0osTUFBTVcsUUFBbUIzRCxFQUFNRyxXQUFXekUsTUFBS3lFLEdBQVlBLEVBQVNsRyxRQUM5RDJKLFFBQW9CNUQsRUFBTUcsV0FBV3pFLE1BQUt5RSxHQUFZQSxFQUFTakcsU0FDckUsR0FBSXlKLEdBQWNDLEtBQ1hwTyxFQUFRME4sc0JBQXlCMU4sRUFBUTBOLHNCQUF3QjFOLEVBQVF5TixZQUFjVSxHQUFhLENBQ3ZHLE1BQU1HLEVBQWF0TyxFQUFReU4sWUFBY1UsRUFDekMzRCxFQUFRQSxFQUFNc0IsT0FDWjlMLEVBQVF5TixZQUNSek0sS0FBS3FOLE1BQU1ELEVBQWNFLEdBQ3pCLENBQ0V2QyxJQUFLLFlBVWpCLEdBSEkvTCxFQUFRNk4sVUFBWTdOLEVBQVE4TixlQUM5QnRELEVBQVFBLEVBQU13QixPQUFPaE0sRUFBUThOLGFBQWMsQ0FBRTdCLFdBQVksQ0FBRUMsRUFBRyxJQUFLQyxFQUFHLElBQUtwSSxFQUFHLElBQUtxSSxNQUFPLE1BRXhGcE0sRUFBUXFOLFVBQVcsQ0FDckIsSUFBSWtCLEVBQVl2TyxFQUFRc04sZUFBaUIsTUFDbEIsVUFBbkJ0TixFQUFRK04sUUFBb0MsU0FBZFEsSUFDaENBLEVBQVksT0FFZC9ELEVBQVFBLEVBQU1nRSxTQUFTRCxFQUFXLENBQ2hDbkIsUUFBQUEsU0FJQTVDLEVBREV5RCxJQTlIaUJRLEVBOEhjUixFQTdIaENuQixHQUEyQjlKLFNBQVN5TCxJQThIN0JqRSxFQUFNZ0UsU0FBU1AsRUFBa0IsQ0FDdkNiLFFBQUFBLElBR001QyxFQUFNZ0UsU0FBUyxNQUFPLENBQzVCcEIsUUFBQUEsSUFJTixhQUFhNUMsRUFBTUssV0FDbkIsTUFBT3hLLEdBRVAsT0FEQXdILFFBQVF6SCxJQUFJQyxHQUNMd0osRUEzSWUsSUFBQzRFLEVBK0kzQixNQUFNQyxHQUFrQixDQUFDLE1BQU8sT0FBUSxNQUFPLE9BQVEsTUFBTyxPQUFRLE1BQU8sTUFBTyxNQUFPLE9BQVEsT0FBUSxRQUU5RkMsR0FBbUIsQ0FBQ0MsRUFBd0RDLEtBQ3ZGQSxFQUFVQSxFQUFRWCxjQUFjekwsUUFBUSxJQUFLLE1BQ3BDbU0sS0FBc0JBLEVBQWlCRSxnQkFBa0JKLEdBQWdCMUwsU0FBUzZMLElBR2hGRSxHQUFlLENBQUNDLEVBQXNESCxLQUVqRixHQURBQSxFQUFVQSxFQUFRWCxjQUFjekwsUUFBUSxJQUFLLEtBQ3hDaU0sR0FBZ0IxTCxTQUFTNkwsR0FDNUIsT0FBTyxFQUVULElBQUtHLEVBQ0gsT0FBTyxFQUdUQSxFQUFrQjdCLEdBQWM2QixHQUNoQyxNQUFNNUIsUUFBRUEsRUFBT08sa0JBQUVBLEVBQWlCQyxjQUFFQSxFQUFhTCxTQUFFQSxFQUFRQyxhQUFFQSxFQUFZQyxZQUFFQSxFQUFXSSxTQUFFQSxFQUFRQyxhQUFFQSxFQUFZVCxVQUFFQSxFQUFTQyxjQUFFQSxHQUFrQjBCLEVBRTdJLEdBQUl0QyxHQUFXVSxJQUFZQSxFQUFXLElBQ3BDLE9BQU8sRUFFVCxHQUFJTyxHQUFxQmpCLEdBQVdrQixHQUNsQyxPQUFPLEVBRVQsR0FBSUwsSUFBc0MsaUJBQWpCQyxHQUE2QkEsRUFBZSxHQUE4QixpQkFBaEJDLEdBQTRCQSxFQUFjLEdBQzNILE9BQU8sRUFFVCxHQUFJSSxHQUFZQyxFQUNkLE9BQU8sRUFFVCxHQUFJVCxFQUFXLENBRWIsT0FBT3dCLEtBRFd2QixHQUFpQixPQUdyQyxPQUFPLEdBR0kyQixHQUFhbEssTUFBTzhFLEVBQWFnRixLQUM1Q0EsRUFBVUEsRUFBUVgsY0FBY3pMLFFBQVEsSUFBSyxJQUN4Q2lNLEdBQWdCMUwsU0FBUzZMLFNBR2pCcEUsVUFBTVosR0FBS2dCLFdBRmZoQixzR0FwdUJrQ3hJLEdBQzNDLE1BQU8sR0FBR0wsS0FBS0MsTUFBTVEsS0FBS2lCLE1BQVEsT0FBUWpDLEdBQXNCLEtBQUsyQixVQUFLRSxRQUFRakIsOENBR3BDQSxFQUFpQlgsRUFBaUIsR0FDaEYsTUFBTyxHQUFHRCxHQUFzQkMsS0FBVTBCLFVBQUtFLFFBQVFqQiw4TEFpTWQ0RixHQUNyQyx5QkFBeUIvQyxLQUFLK0MsR0FDekJBLEVBQUt4RSxRQUFRLHlCQUEwQixJQUV2Q3dFLEVBQUt4RSxRQUFRLGdCQUFpQiw0T0EyTW5CLElBQ1ksZUFBekI2RSxRQUFRa0MsSUFBSUMsa0hDeGFyQixNQUFNeUYsR0FBa0IsQ0FDdEI5UCxPQUFTQyxJQUNLQSxFQUFJQyxJQUNaQyxRQUNEQyxRQUFRLFVBQ1JDLFlBQVksb0JBQ1owUCxVQUFVLGNBQ1Z6UCxNQUFNLEtBQ05FLFFBQVEyTSxJQUNQLFdBQ0UsTUFBTTZDLEVBQVk3QyxFQUNmekwsS0FBS2lDLEdBQ0dpQixHQUFNakIsR0FBUUEsRUFBT1gsVUFBS3VELFFBQVE1QyxLQUUxQ3NNLFFBQVF0TSxJQUNQLE1BQU11TSxFQUFRbkssVUFBR3FDLFdBQVd6RSxJQUFTaUIsR0FBTWpCLEdBSTNDLE9BSEt1TSxHQUNIalEsRUFBSWUsSUFBSTJILEtBQUssR0FBR2hGLHFCQUVYdU0sV0FFTGpRLEVBQUk2UCxPQUFPRSxJQVpuQixHQWFLbFAsT0FBT0MsSUFBUWQsRUFBSWUsSUFBSUMsTUFBTUYsV0NxRTFDLE9BNUZnQmQsSUFDZCxNQUFNa1EsRUFBYWxRLEVBQUltUSxVQUFtQyxxQkFBdUIsR0F3RmpGLE1BdkZnQyxDQUM5QixDQUNFdkksS0FBTSxVQUNOdEMsS0FBTSxRQUNGakYsWUFBVyxPQUFPTCxFQUFJb1EsS0FBS0MsVUFBdUIsNkJBQ3REQyxVQUFVLEVBQ1ZDLFFBQVNMLEVBQVduQyxTQUFXLEtBRWpDLENBQ0VuRyxLQUFNLFlBQ050QyxLQUFNLFVBQ0ZqRixZQUFXLE9BQU9MLEVBQUlvUSxLQUFLQyxVQUF1QiwrQkFDdERDLFVBQVUsRUFDVkMsUUFBU0wsRUFBV2xDLFlBQWEsR0FFbkMsQ0FDRXBHLEtBQU0sZ0JBQ050QyxLQUFNLE9BQ0ZqRixZQUFXLE9BQU9MLEVBQUlvUSxLQUFLQyxVQUF1QixtQ0FDdERDLFVBQVUsRUFDVkUsUUFBUyxDQUFDLE9BQVEsS0FBTSxPQUFRLE1BQU8sT0FBUSxRQUFTLE9BQVEsTUFBTyxNQUFPLE1BQU8sU0FBVSxZQUFhLE1BQU8sTUFBTyxNQUFPLE1BQU8sTUFBTyxPQUFRLE1BQU8sSUFBSyxRQUNuS0QsUUFBUyxPQUVYLENBQ0UzSSxLQUFNLFdBQ050QyxLQUFNLFVBQ0ZqRixZQUFXLE9BQU9MLEVBQUlvUSxLQUFLQyxVQUF1Qiw4QkFDdERDLFVBQVUsRUFDVkMsUUFBU0wsRUFBV2hDLFdBQVksR0FFbEMsQ0FDRXRHLEtBQU0sY0FDTnRDLEtBQU0sUUFDRmpGLFlBQVcsT0FBT0wsRUFBSW9RLEtBQUtDLFVBQXVCLGlDQUN0REMsVUFBVSxFQUNWQyxRQUFTTCxFQUFXOUIsYUFBZSxLQUVyQyxDQUNFeEcsS0FBTSxlQUNOdEMsS0FBTSxRQUNGakYsWUFBVyxPQUFPTCxFQUFJb1EsS0FBS0MsVUFBdUIsa0NBQ3REQyxVQUFVLEVBQ1ZDLFFBQVNMLEVBQVcvQixjQUFnQixLQUV0QyxDQUNFdkcsS0FBTSx1QkFDTnRDLEtBQU0sVUFDRmpGLFlBQVcsT0FBT0wsRUFBSW9RLEtBQUtDLFVBQXVCLDBDQUN0REMsVUFBVSxFQUNWQyxRQUFTTCxFQUFXN0IsdUJBQXdCLEdBRTlDLENBQ0V6RyxLQUFNLG9CQUNOdEMsS0FBTSxVQUNGakYsWUFBVyxPQUFPTCxFQUFJb1EsS0FBS0MsVUFBdUIsdUNBQ3REQyxVQUFVLEVBQ1ZDLFFBQVNMLEVBQVc1QixvQkFBcUIsR0FFM0MsQ0FDRTFHLEtBQU0sZ0JBQ050QyxLQUFNLFFBQ0ZqRixZQUFXLE9BQU9MLEVBQUlvUSxLQUFLQyxVQUF1QixtQ0FDdERDLFVBQVUsRUFDVkMsUUFBU0wsRUFBVzNCLGVBQWlCLElBRXZDLENBQ0UzRyxLQUFNLFdBQ050QyxLQUFNLFVBQ0ZqRixZQUFXLE9BQU9MLEVBQUlvUSxLQUFLQyxVQUF1Qiw4QkFDdERDLFVBQVUsRUFDVkMsUUFBU0wsRUFBVzFCLFdBQVksR0FFbEMsQ0FDRTVHLEtBQU0sZUFDTnRDLEtBQU0sUUFDRmpGLFlBQVcsT0FBT0wsRUFBSW9RLEtBQUtDLFVBQXVCLGtDQUN0REMsVUFBVSxFQUNWQyxRQUFTTCxFQUFXekIsY0FBZ0IsSUFFdEMsQ0FDRTdHLEtBQU0sZUFDTnRDLEtBQU0sVUFDRmpGLFlBQVcsT0FBT0wsRUFBSW9RLEtBQUtDLFVBQXVCLGtDQUN0REMsVUFBVSxFQUNWQyxRQUFTTCxFQUFXTyxlQUFnQixLQ1AxQyxPQS9FZ0J6USxJQUNkLE1BQU1rUSxFQUFhbFEsRUFBSW1RLFVBQW9DLHNCQUF3QixHQTJFbkYsTUExRWdDLENBQzlCLENBQ0V2SSxLQUFNLGlCQUNOdEMsS0FBTSxVQUNGakYsWUFBVyxPQUFPTCxFQUFJb1EsS0FBS0MsVUFBdUIscUNBQ3REQyxVQUFVLEVBQ1ZDLFFBQVNMLEVBQVdULGlCQUFrQixHQUV4QyxDQUNFN0gsS0FBTSxnQkFDTnRDLEtBQU0sT0FDRmpGLFlBQVcsT0FBT0wsRUFBSW9RLEtBQUtDLFVBQXVCLG9DQUN0REMsVUFBVSxFQUNWRSxRQUFTLENBQUMsT0FBUSxTQUNsQkQsUUFBU0wsRUFBV3pGLGVBQWlCLFFBRXZDLENBQ0U3QyxLQUFNLHdCQUNOdEMsS0FBTSxVQUNGakYsWUFBVyxPQUFPTCxFQUFJb1EsS0FBS0MsVUFBdUIsNENBQ3REQyxVQUFVLEVBQ1ZDLFFBQVNMLEVBQVd2Rix3QkFBeUIsR0FFL0MsQ0FDRS9DLEtBQU0sa0JBQ050QyxLQUFNLFFBQ0ZqRixZQUFXLE9BQU9MLEVBQUlvUSxLQUFLQyxVQUF1QixzQ0FDdERDLFVBQVUsRUFDVkMsUUFBU0wsRUFBV3RGLGlCQUFtQixHQUV6QyxDQUNFaEQsS0FBTSxnQkFDTnRDLEtBQU0sUUFDRmpGLFlBQVcsT0FBT0wsRUFBSW9RLEtBQUtDLFVBQXVCLG9DQUN0REMsVUFBVSxFQUNWQyxRQUFTTCxFQUFXdEMsZUFBaUIsSUFFdkMsQ0FDRWhHLEtBQU0sb0JBQ050QyxLQUFNLFFBQ0ZqRixZQUFXLE9BQU9MLEVBQUlvUSxLQUFLQyxVQUF1Qiw0Q0FDdERDLFVBQVUsRUFDVkMsUUFBU0wsRUFBV3BGLG1CQUFxQixJQUUzQyxDQUNFbEQsS0FBTSxzQkFDTnRDLEtBQU0sUUFDRmpGLFlBQVcsT0FBT0wsRUFBSW9RLEtBQUtDLFVBQXVCLHlDQUN0REMsVUFBVSxFQUNWQyxRQUFTTCxFQUFXbkYscUJBQXVCLEtBRTdDLENBQ0VuRCxLQUFNLGlCQUNOdEMsS0FBTSxRQUNGakYsWUFBVyxPQUFPTCxFQUFJb1EsS0FBS0MsVUFBdUIseUNBQ3REQyxVQUFVLEVBQ1ZDLFFBQVNMLEVBQVdsRixnQkFBa0IsNkJBRXhDLENBQ0VwRCxLQUFNLHFCQUNOdEMsS0FBTSxRQUNGakYsWUFBVyxPQUFPTCxFQUFJb1EsS0FBS0MsVUFBdUIseUNBQ3REQyxVQUFVLEVBQ1ZDLFFBQVNMLEVBQVdqRixvQkFBc0IsSUFFNUMsQ0FDRXJELEtBQU0sb0JBQ050QyxLQUFNLE9BQ0ZqRixZQUFXLE9BQU9MLEVBQUlvUSxLQUFLQyxVQUF1Qix3Q0FDdERDLFVBQVUsRUFDVkUsUUFBUyxDQUFDLFFBQVMsWUFBYSxZQUFhLFFBQVMsWUFBYSxZQUFhLE9BQVEsT0FBUSxTQUFVLFVBQzFHRCxRQUFTTCxFQUFXckMsbUJBQXFCLGVDcEQvQyxPQXJCZ0I3TixJQUNkLE1BQU1rUSxFQUFhbFEsRUFBSW1RLFVBQWUsbUJBQXFCLEdBaUIzRCxNQWhCZ0MsQ0FDOUIsQ0FDRXZJLEtBQU0sU0FDTnRDLEtBQU0sUUFDRmpGLFlBQVcsT0FBT0wsRUFBSW9RLEtBQUtDLFVBQXVCLDBCQUN0REMsVUFBVSxFQUNWQyxRQUFTTCxFQUFXZCxRQUFVLGNBRWhDLENBQ0V4SCxLQUFNLFNBQ050QyxLQUFNLFVBQ0ZqRixZQUFXLE9BQU9MLEVBQUlvUSxLQUFLQyxVQUF1QiwwQkFDdERDLFVBQVUsRUFDVkMsUUFBU0wsRUFBV1EsU0FBVSxLQ2JwQyxNQUFNQyxHQUFlakwsTUFBTzFGLEVBQWE0USxFQUEwQkMsRUFBZ0JqSixLQUNqRixNQUFNa0osUUFBZTlRLEVBQUlDLElBQUk4USxTQUFTQyxPQUFPSixHQUN2Q0ssRUFBd0IsYUFBWEosRUFDZixVQUFVakosSUFBb0IsZ0JBQVhpSixFQUNqQixlQUFlakosSUFBb0IsWUFBWGlKLEVBQ3RCLFdBQVdqSixJQUFTQSxFQUM1QjVILEVBQUlrUixXQUFXLENBQ2JELENBQUNBLEdBQWFILElBRUQsYUFBWEQsRUFDRjdRLEVBQUlrUixXQUFXLENBQ2IsaUJBQWtCdEosRUFDbEIsa0JBQW1CQSxJQUVELGdCQUFYaUosR0FDVDdRLEVBQUlrUixXQUFXLENBQ2IscUJBQXNCdEosS0FLdEJ1SixHQUFVLENBQ2RwUixPQUFTQyxJQUNLQSxFQUFJQyxJQUNaQyxRQUNEQyxRQUFRLE9BQ1JFLE1BQU0sVUFDTnlQLFVBQVUsbUJBQ1YxUCxZQUFZLDBFQUNaRyxRQUFPLENBQUNzUSxFQUFnQmpKLEtBQ3ZCLG1CQUNFLElBSUUsT0FBUWlKLEdBQ04sSUFBSyxVQUNILEdBQWEsYUFBVGpKLFFBQ0krSSxHQUFhM1EsRUFBS29SLEdBQWdCcFIsR0FBTTZRLEVBQVFqSixRQUNqRCxHQUFhLGNBQVRBLFFBQ0grSSxHQUFhM1EsRUFBS3VMLEdBQWlCdkwsR0FBTTZRLEVBQVFqSixRQUNsRCxHQUFhLFdBQVRBLFFBQ0grSSxHQUFhM1EsRUFBS3FSLEdBQWNyUixHQUFNNlEsRUFBUWpKLE9BQy9DLENBQ0wsTUFBTWdKLEVBQVUsQ0FDZCxDQUNFdEwsS0FBTSxPQUNOc0MsS0FBTSxVQUNONEksUUFBUyxDQUFDLFdBQVksWUFBYSxVQUNuQ2pKLFFBQVMsNEJBR1B1SixRQUFlOVEsRUFBSUMsSUFBSThRLFNBQVNDLE9BQTJCSixHQUMxQyxhQUFuQkUsRUFBT1EsY0FDSFgsR0FBYTNRLEVBQUtvUixHQUFnQnBSLEdBQU02USxFQUFRQyxFQUFPUSxTQUNqQyxjQUFuQlIsRUFBT1EsY0FDVlgsR0FBYTNRLEVBQUt1TCxHQUFpQnZMLEdBQU02USxFQUFRQyxFQUFPUSxTQUNsQyxXQUFuQlIsRUFBT1EsZUFDVlgsR0FBYTNRLEVBQUtxUixHQUFjclIsR0FBTTZRLEVBQVFDLEVBQU9RLFNBRy9ELE1BQ0YsSUFBSyxXQUNMLElBQUssY0FDSCxHQUFJMUosRUFBTSxDQUNSLE1BQU1sRSxFQUFPMUQsRUFBSXVSLE9BQU9WLEdBQVF4SixJQUFJTyxHQUNwQyxJQUFLbEUsRUFDSCxPQUFPMUQsRUFBSWUsSUFBSUMsTUFBTSxNQUFNNlAsV0FBZ0JqSixLQUV6Q2xFLEVBQUt2QyxjQUNEd1AsR0FBYTNRLEVBQUswRCxFQUFLdkMsT0FBT25CLEdBQU02USxFQUFRakosT0FFL0MsQ0FDTCxNQUFNZ0osRUFBVSxDQUNkLENBQ0V0TCxLQUFNLE9BQ05zQyxLQUFNLEdBQUdpSixJQUNUTCxRQUFTeFEsRUFBSXVSLE9BQU9WLEdBQVFXLFlBQzVCakssUUFBUyxlQUFlc0osTUFJdEJDLFFBQWU5USxFQUFJQyxJQUFJOFEsU0FBU0MsT0FBMkJKLEdBQzNEbE4sRUFBTzFELEVBQUl1UixPQUFPVixHQUFReEosSUFBSXlKLEVBQU9ELEtBQ3ZDbk4sTUFBQUEsU0FBQUEsRUFBTXZDLGVBQ0Z3UCxHQUFhM1EsRUFBSzBELEVBQUt2QyxPQUFPbkIsR0FBTTZRLEVBQVFDLEVBQU9ELElBRzdELE1BQ0YsSUFBSyxTQUNILEdBQUlqSixFQUFNLENBSVIsR0FIS0EsRUFBS2pFLFNBQVMsbUJBQ2pCaUUsRUFBTyxnQkFBZ0JBLE1BRXJCckUsT0FBT0MsS0FBS3hELEVBQUltUSxVQUFVLGlCQUFpQnhNLFNBQVNpRSxHQUt0RCxPQUFPNUgsRUFBSWUsSUFBSUMsTUFBTSxtQkFBbUI0RyxnQkFKcEM1SCxFQUFJeVIsYUFBYUMsVUFBVTlKLHlCQUFPekcsZUFDOUJ3UCxHQUFhM1EsRUFBS0EsRUFBSXlSLGFBQWFDLFVBQVU5SixHQUFPekcsT0FBUW5CLEdBQU0sU0FBVTRILE9BS2pGLENBQ0wsTUFBTWdKLEVBQVUsQ0FDZCxDQUNFdEwsS0FBTSxPQUNOc0MsS0FBTSxTQUNONEksUUFBU3hRLEVBQUl5UixhQUFhRSxjQUMxQnBLLFFBQVMsb0JBR1B1SixRQUFlOVEsRUFBSUMsSUFBSThRLFNBQVNDLE9BQVlKLGNBQzlDNVEsRUFBSXlSLGFBQWFDLFVBQVVaLEVBQU9jLDhCQUFTelEsZUFDdkN3UCxHQUFhM1EsRUFBS0EsRUFBSXlSLGFBQWFDLFVBQVVaLEVBQU9jLFFBQVN6USxPQUFRbkIsR0FBTSxTQUFVOFEsRUFBT2MsUUFHdEcsTUFDRixRQUVFLE9BREE1UixFQUFJZSxJQUFJMkgsS0FBSyxtQkFBbUJtSSxLQUN6QjdRLEVBQUllLElBQUkySCxLQUFLLDZEQUV4QjFJLEVBQUllLElBQUlpRixRQUFRLGtDQUNELFdBQVg2SyxHQUNGN1EsRUFBSWUsSUFBSThRLEtBQUssa0VBRWYsTUFBTy9RLEdBRVAsR0FEQWQsRUFBSWUsSUFBSUMsTUFBTUYsR0FDVm1ILFFBQVE2SixLQUFLbk8sU0FBUyxXQUN4QixNQUFNN0MsSUFqR1osR0FvR0tELE9BQU9DLElBQVFkLEVBQUllLElBQUlDLE1BQU1GLFdDdElwQ2lSLEdBQWUsQ0FDbkJoUyxPQUFRMkYsTUFBTzFGLElBQ2IsTUFBTUMsRUFBTUQsRUFBSUMsSUFDaEJBLEVBQUlDLFFBQ0RDLFFBQVEsT0FDUjJQLFVBQVUsWUFDVjFQLFlBQVksd0JBQ1pHLFFBQVFzUSxJQUNQLFdBQ0UsSUFHRSxJQUFJRCxFQUFpQixHQUNyQixNQUFNelAsRUFBc0IsQ0FDMUI2USxTQUFVLENBQ1IxTSxLQUFNLE9BQ05zQyxLQUFNLFdBQ05MLFFBQVMsa0JBQ1RpSixRQUFTeFEsRUFBSXVSLE9BQU9TLFNBQVNSLFlBQzdCakIsUUFBU3ZRLEVBQUltUSxVQUFVLG9CQUFzQm5RLEVBQUltUSxVQUFVLG1CQUFxQixRQUVsRjhCLFlBQWEsQ0FDWDNNLEtBQU0sT0FDTnNDLEtBQU0sY0FDTkwsUUFBUyxvQkFDVGlKLFFBQVN4USxFQUFJdVIsT0FBT1UsWUFBWVQsWUFDaENqQixRQUFTdlEsRUFBSW1RLFVBQStCLHVCQUF5QixRQUV2RTNQLFFBQVMsQ0FDUDhFLEtBQU0sV0FDTnNDLEtBQU0sVUFDTkwsUUFBUyxjQUNUaUosUUFBU3hRLEVBQUl5UixhQUFhRSxjQUMxQnBCLFFBQVNoTixPQUFPQyxLQUFLeEQsRUFBSW1RLFVBQVUsaUJBQWlCSCxRQUFRdE0sR0FBaUIxRCxFQUFJbVEsVUFBVSxnQkFBZ0J6TSxTQUkvRyxHQUFJbU4sRUFBUSxDQUNWLElBQUkxUCxFQUFPMFAsR0FJVCxPQURBN1EsRUFBSWUsSUFBSTJILEtBQUssbUJBQW1CbUksS0FDekI3USxFQUFJZSxJQUFJMkgsS0FBSyxzREFIcEJrSSxFQUFRc0IsS0FBSy9RLEVBQU8wUCxTQU10QkQsRUFBVXJOLE9BQU9DLEtBQUtyQyxHQUFRTSxLQUFLaUMsR0FBaUJ2QyxFQUFPdUMsS0FFN0QsTUFBTW9OLFFBQWU3USxFQUFJOFEsU0FBU0MsT0FBWUosR0FHOUMsR0FBSUUsRUFBT3RRLFFBQVMsQ0FDbEIsTUFBTUEsRUFBVVIsRUFBSW1RLFVBQWtDLGdCQUN0RDVNLE9BQU9DLEtBQUtoRCxHQUFTaUIsS0FBS2lDLElBQ3BCb04sRUFBT3RRLFFBQVFtRCxTQUFTRCxHQUMxQmxELEVBQVFrRCxJQUFRLEVBRWhCbEQsRUFBUWtELElBQVEsS0FJcEIxRCxFQUFJa1IsV0FBVyxDQUNiaUIsYUFBYzNSLElBSWxCUixFQUFJa1IsV0FBVyxDQUNiLGlCQUFrQkosRUFBT2tCLFVBQVloUyxFQUFJbVEsVUFBa0Isa0JBQzNELGtCQUFtQlcsRUFBT2tCLFVBQVloUyxFQUFJbVEsVUFBa0Isa0JBQzVELHFCQUFzQlcsRUFBT21CLGFBQWUsU0FFOUNqUyxFQUFJZSxJQUFJaUYsUUFBUSxrQ0FDaEIsTUFBT2xGLEdBRVAsR0FEQWQsRUFBSWUsSUFBSUMsTUFBTUYsR0FDVm1ILFFBQVE2SixLQUFLbk8sU0FBUyxXQUN4QixNQUFNN0MsSUFsRVosR0FxRUtELE9BQU9DLElBQVFkLEVBQUllLElBQUlDLE1BQU1GLFdDN0VwQ0wsR0FBaUIsQ0FDckJWLE9BQVNDLElBQ0tBLEVBQUlDLElBQ1pDLFFBQ0RJLE9BQU8sb0JBQXFCLDJCQUE0QkcsSUFDdkRULEVBQUlvUyxVQUFVLENBQ1osZUFBZ0IzUixTQ0lwQjRSLEdBQVczTSxNQUFPMUYsRUFBYVcsS0FDbkMsSUFDRSxNQUFNMlIsRUFBT0MsR0FBVzVSLEVBQVE2UixLQUMxQkMsRUFBUzFQLFVBQUtqQixLQUFLbkIsRUFBUTZSLElBQUssWUFDdEMsSUFBSUUsRUFBVSxHQUNWSixFQUFLMUIsU0FBVzBCLEVBQUsxQixRQUFRdlAsT0FBUyxJQUN4Q3FSLFFBQWdCMVMsRUFBSUMsSUFBSThRLFNBQVNDLE9BQU9zQixFQUFLMUIsVUFFL0MsSUFBSStCLFFBQXlCQyxVQUFPLENBQUMsUUFBUyxDQUFFMUssSUFBS3VLLEVBQVFJLEtBQUssSUFjbEUsR0FiQUYsRUFBU0EsRUFBTzNDLFFBQVF0TSxJQUN0QixJQUFJb1AsRUFBTyxHQU1YLE9BTEF2UCxPQUFPQyxLQUFLOE8sRUFBS1MsU0FBU0MsU0FBUzdPLElBQzdCaUYsVUFBTTFGLEVBQU1TLEVBQUssQ0FBRTBPLEtBQUssTUFDMUJDLEVBQU9wUCxPQUdQb1AsR0FDS0MsR0FBUS9TLEVBQUtzUyxFQUFLUyxRQUFRRCxHQUFPSixNQUt0QixJQUFsQkMsRUFBT3RSLE9BQ1QsT0FBT3JCLEVBQUllLElBQUkySCxLQUFLLDZCQUV0QixNQUFNdUssRUFBUUMsR0FBT1AsRUFBUUYsRUFBUUMsR0FDckNTLEdBQWN4UyxFQUFReVMsS0FBTUgsR0FDQyxtQkFBbEJYLEVBQUtlLFVBQ2RmLEVBQUtlLFNBQVMsQ0FBRVgsUUFBQUEsRUFBUy9SLFFBQUFBLEVBQVNzUyxNQUFPTixFQUFRM1MsSUFBQUEsSUFFL0NzUyxFQUFLZ0IsaUJBQ1B0VCxFQUFJZSxJQUFJaUYsUUFBUXNNLEVBQUtnQixpQkFFdkJ0VCxFQUFJZSxJQUFJaUYsUUFBUSxTQUNoQixNQUFPbEYsR0FDUCxPQUFPZCxFQUFJZSxJQUFJQyxNQUFNRixLQVVuQmlTLEdBQVUsQ0FBQy9TLEVBQWF1VCxFQUFVeE0sS0FFdEMsTUFBTXlNLEVBQUssSUFBSUMsU0FBUyxPQUFRLHdCQUEwQkYsRUFBTSxLQUNoRSxJQUNFLE9BQU9DLEVBQUd6TSxHQUNWLE1BQU9qRyxHQUVQLE9BREFkLEVBQUllLElBQUlDLE1BQU0sMkNBQTJDNEksS0FBSzhKLFVBQVVILE9BQ2pFLElBUUxoQixHQUFjb0IsSUFDbEIsTUFBTUMsRUFBYzdRLFVBQUtqQixLQUFLNlIsRUFBYyxZQUM1QyxHQUFJN04sVUFBR3FDLFdBQVd5TCxHQUFjLENBRzlCLE9BRGdCQyxRQUFRRCxHQUd4QixNQUFPLElBUUxWLEdBQVMsQ0FBQ0QsRUFBaUJSLEVBQWdCOVIsS0FDL0MsTUFBTW1ULEVBQXNCLEdBUTVCLE9BUEFiLEVBQU1ELFNBQVNyTixJQUNiLE1BQU1SLEVBQU9XLFVBQUdpTyxhQUFhaFIsVUFBS2pCLEtBQUsyUSxFQUFROU0sR0FBVyxRQUNwRHFPLEVBQVVDLFVBQUlmLE9BQU8vTixFQUFNeEUsSUFDN0J1TCxPQUFPZ0ksU0FBU0YsSUFBWSxRQUFRblAsS0FBS21QLE1BQzNDRixFQUFTbk8sR0FBWXFPLE1BR2xCRixHQVFIWCxHQUFnQixDQUFDZ0IsRUFBYWxCLEtBQ2xDMVAsT0FBT0MsS0FBS3lQLEdBQU9ELFNBQVNwTCxJQUMxQixNQUFNakMsRUFBVzVDLFVBQUtqQixLQUFLcVMsRUFBS3ZNLEdBQ2hDOUIsVUFBR3NPLGNBQWNyUixVQUFLdUIsUUFBUXFCLElBQzlCRyxVQUFHdU8sY0FBYzFPLEVBQVVzTixFQUFNckwsUUNuRy9CME0sR0FBTSxDQUFDdFUsRUFBYVcsS0FFcEJBLEVBQVE0VCxRQUNOek8sVUFBR3FDLFdBQVd4SCxFQUFRNlQsVUFDeEJuQyxHQUFTclMsRUFBS1csR0FBU0UsT0FBT0MsSUFBUWQsRUFBSWUsSUFBSUMsTUFBTUYsTUFFcERkLEVBQUllLElBQUlDLE1BQU0sa0JBQWtCTCxFQUFRNlQsdUJBRzFDN1QsRUFBUTZULFNBQVk3VCxFQUFROFQsU0FFeEI5VCxFQUFRNlQsU0FEUix3QkFBMEI3VCxFQUFRNlQsU0FFdENFLEdBQW9CMVUsRUFBS1csS0FTdkIrVCxHQUFzQixDQUFDMVUsRUFBYVcsS0FDcENtRixVQUFHcUMsV0FBV3hILEVBQVE2UixNQUN4Qm1DLFVBQUdDLEtBQUtqVSxFQUFRNlIsS0FFbEJ4UyxFQUFJZSxJQUFJOFEsS0FBSyxxQ0FDYmdELFVBQVNsVSxFQUFRNlQsU0FBVTdULEVBQVE2UixJQUFLLENBQUVzQyxNQUFPblUsRUFBUW1VLFFBQVVDLElBQ2pFLEdBQUlBLEVBQ0YsT0FBTy9VLEVBQUllLElBQUlDLE1BQU0rVCxHQUV2Qi9VLEVBQUllLElBQUlpRixRQUFRLGtDQUNoQnFNLEdBQVNyUyxFQUFLVyxHQUFTRSxPQUFPQyxJQUFRZCxFQUFJZSxJQUFJQyxNQUFNRixVQUlsRGtVLEdBQWdCLENBQ3BCalYsT0FBUTJGLE1BQU8xRixJQUNEQSxFQUFJQyxJQUNaQyxRQUNEQyxRQUFRLFFBQ1IyUCxVQUFVLHdCQUNWeFAsT0FBTyxVQUFXLGlCQUNsQkEsT0FBTyxZQUFhLHVCQUNwQkYsWUFBWSwrQ0FDWkcsUUFBTyxDQUFDaVUsRUFBa0JTLEVBQWlCL1UsS0FDMUMsV0FFRSxJQUNFLE1BQU11VSxFQUFXRCxFQUFTN1EsU0FBUyxLQUM3QnVSLEdBQVdELEdBQXVCLE1BQVpBLEVBQ3RCN0IsRUFBT3JRLFVBQUt1RCxRQUFRMk8sR0FBVyxLQUMvQkgsRUFBUTVVLEVBQVE0VSxRQUFTLEVBQ3pCUCxFQUFVclUsRUFBUXFVLFVBQVcsRUFDN0IvQixFQUFNelAsVUFBS2pCLEtBQUtxVCxZQUFXLG1CQUFvQlgsRUFBU3BSLFFBQVEsUUFBUyxNQUUzRWxELEVBQVFxVSxVQUNWQyxFQUFXaEMsR0FHYixNQUFNN1IsRUFBVSxDQUNkNlQsU0FBQUEsRUFDQVMsUUFBQUEsRUFDQVIsU0FBQUEsRUFDQVMsUUFBQUEsRUFDQTlCLEtBQUFBLEVBQ0EwQixNQUFBQSxFQUNBdEMsSUFBQUEsRUFDQStCLFFBQUFBLEdBSUVXLEdBQVdwUCxVQUFHcUMsV0FBV2lMLFNBQ3JCcFQsRUFBSUMsSUFBSThRLFNBQVNDLE9BQU8sQ0FDNUIsQ0FDRTFMLEtBQU0sVUFDTmlDLFFBQVMyTixFQUNMLHlDQUNBLHFDQUNKdE4sS0FBTSxRQUVQZixNQUFNaUssSUFDSEEsRUFBT3NFLElBQ1RkLEdBQUl0VSxFQUFLVyxNQUliMlQsR0FBSXRVLEVBQUtXLEdBRVgsTUFBT0csR0FFUCxHQURBZCxFQUFJZSxJQUFJQyxNQUFNRixHQUNWbUgsUUFBUTZKLEtBQUtuTyxTQUFTLFdBQ3hCLE1BQU03QyxJQTlDWixHQWlES0QsT0FBT0MsSUFBUWQsRUFBSWUsSUFBSUMsTUFBTUYsU0FFbkN1VSxHQUFHLFVBQVUsS0FDWjdNLFFBQVF6SCxNQUNSeUgsUUFBUXpILElBQUksYUFDWnlILFFBQVF6SCxNQUNSeUgsUUFBUXpILElBQUl1VSxVQUFNQyxLQUFLLHVEQUN2Qi9NLFFBQVF6SCxJQUFJLG9DQUNaeUgsUUFBUXpILE1BQ1J5SCxRQUFRekgsSUFBSXVVLFVBQU1DLEtBQUssNkRBQ3ZCL00sUUFBUXpILElBQUksMkNBQ1p5SCxRQUFRekgsV0NoSFZxUCxHQUFnQixDQUNwQnJRLE9BQVNDLElBQ0tBLEVBQUlDLElBQ1pDLFFBQ0RDLFFBQVEsUUFDUjJQLFVBQVUsVUFDVjFQLFlBQVkseUJBQ1pHLFFBQU9tRixNQUFPOFAsRUFBZSxNQUM1QixNQUFNQyxFQUFPelYsRUFBSW9RLEtBQUtzRixrQkFDdEIsSUFBS0YsRUFBTSxDQUNULE1BQU01RSxFQUFVLENBQ2QsQ0FDRXRMLEtBQU0sT0FDTnNDLEtBQU0sT0FDTjRJLFFBQVNpRixFQUNUbE8sUUFBUyxvQkFDVGdKLFFBQVN2USxFQUFJbVEsVUFBVSxzQkFBd0IsVUFHN0NXLFFBQWU5USxFQUFJQyxJQUFJOFEsU0FBU0MsT0FBOEJKLEdBR3BFLE9BRkE1USxFQUFJb1EsS0FBS3VGLFlBQVk3RSxFQUFPVixXQUM1QnBRLEVBQUllLElBQUlpRixRQUFRLG1CQUFtQjhLLEVBQU9WLFFBRzVDLElBQUtxRixFQUFLOVIsU0FBUzZSLEdBQ2pCLE9BQU94VixFQUFJZSxJQUFJMkgsS0FBSyxvQkFFdEIxSSxFQUFJb1EsS0FBS3VGLFlBQVlILEdBQ3JCeFYsRUFBSWUsSUFBSWlGLFFBQVEsbUJBQW1Cd1AsZ0JDNUI5QkksR0FNWEMsWUFBYWpPLEdBQ1hrTyxLQUFLbE8sS0FBT0EsRUFDWmtPLEtBQUtMLEtBQU8sSUFBSU0sSUFDaEJELEtBQUtFLFlBQWMsSUFBSUQsSUFHekJFLFNBQVVDLEVBQVl0RSxTQUNwQixJQUFLc0UsRUFBSSxNQUFNLElBQUlDLFVBQVUsbUJBQzdCLEdBQTZCLG1CQUFsQnZFLEVBQU83UixPQUF1QixNQUFNLElBQUlvVyxVQUFVLHFDQUM3RCxHQUFJTCxLQUFLTCxLQUFLVyxJQUFJRixHQUFLLE1BQU0sSUFBSUMsVUFBVSxHQUFHTCxLQUFLbE8sc0JBQXNCc08sTUFDekVKLEtBQUtMLEtBQUtZLElBQUlILEVBQUl0RSxHQUNkZ0UsR0FBaUJVLGdCQUNmUixLQUFLRSxZQUFZSSxJQUFJUixHQUFpQlUseUJBQ3hDUixLQUFLRSxZQUFZM08sSUFBSXVPLEdBQWlCVSwrQkFBZ0JwRSxLQUFLZ0UsR0FFM0RKLEtBQUtFLFlBQVlLLElBQUlULEdBQWlCVSxjQUFlLENBQUNKLEtBSzVESyxXQUFZQyxHQUNWLEdBQUlWLEtBQUtFLFlBQVlJLElBQUlJLEdBQWEsQ0FDcEMsTUFBTUMsRUFBYVgsS0FBS0UsWUFBWTNPLElBQUltUCxHQUN4Q0MsTUFBQUEsR0FBQUEsRUFBWXpELFNBQVNwQixJQUNuQmtFLEtBQUtMLEtBQUtpQixPQUFPOUUsT0FLdkIrRSxVQUNFLE9BQU9iLEtBQUtsTyxLQUdkUCxJQUFLNk8sR0FDSCxPQUFPSixLQUFLTCxLQUFLcE8sSUFBSTZPLEdBR3ZCVSxVQUNFLE1BQU8sSUFBSWQsS0FBS0wsS0FBS29CLFVBR3ZCckYsWUFDRSxNQUFPLElBQUlzRSxLQUFLTCxLQUFLalMsU0FJbEIsTUFBTXNULEdBQXVCLENBQUNsUCxFQUFzQixRQUN6RGdPLEdBQWlCVSxjQUFnQjFPLFNDaER0Qm1QLEdBVVhsQixZQUFhN1YsR0FUSThWLFVBQU8sWUFFUEEsVUFBNkIsSUFBSUMsSUFDakNELGlCQUFxQyxJQUFJQyxJQU94REQsS0FBSzVWLFFBQVUsSUFBSThXLFVBQ25CbEIsS0FBSy9FLFNBQVdBLFVBQ2hCK0UsS0FBSzlWLElBQU1BLEVBR2IyVyxVQUNFLE9BQU9iLEtBQUtsTyxLQUdkb04sT0NqQmEsSUFBQ2hWLEVEa0JaOFYsS0FBSzVWLFFBQ0YrVyxRQUFRLFFBQTJCLGlCQUNuQzNXLE9BQU8sY0FBZSxjQUFjLEtBQ25Dd1YsS0FBSzlWLElBQUlvUyxVQUFVLENBQ2pCOEUsT0FBTyxPQUdWNVcsT0FBTyxlQUFnQixlQUFlLEtBQ3JDd1YsS0FBSzlWLElBQUlvUyxVQUFVLENBQ2pCK0UsUUFBUSxPQUdYOUIsR0FBRyxhQUFhLEtBQ2ZTLEtBQUs5VixJQUFJZSxJQUFJQyxNQUFNLG9CQUFvQjhVLEtBQUs1VixRQUFRa1gsS0FBS3RWLEtBQUssc0RBQzlEbUcsUUFBUW9QLEtBQUssT0NoQ0xyWCxFRG9DRDhWLEtBQUs5VixLQ25DZEMsSUFBSWdXLFNBQVMsZ0JBQWlCblcsSUFDbENFLEVBQUlDLElBQUlnVyxTQUFTLFNBQVU5VSxJQUMzQm5CLEVBQUlDLElBQUlnVyxTQUFTLFVBQVc5RSxJQUM1Qm5SLEVBQUlDLElBQUlnVyxTQUFTLFNBQVVwRyxJQUMzQjdQLEVBQUlDLElBQUlnVyxTQUFTLE1BQU9sRSxJQUN4Qi9SLEVBQUlDLElBQUlnVyxTQUFTLFFBQVN4VixJQUMxQlQsRUFBSUMsSUFBSWdXLFNBQVMsT0FBUWpCLElBQ3pCaFYsRUFBSUMsSUFBSWdXLFNBQVMsT0FBUTdGLElEK0J6QjZGLFNBQVVDLEVBQVl0RSxTQUNwQixJQUFLc0UsRUFBSSxNQUFNLElBQUlDLFVBQVUscUJBQzdCLEdBQTZCLG1CQUFsQnZFLEVBQU83UixPQUF1QixNQUFNLElBQUlvVyxVQUFVLHFDQUM3RCxHQUFJTCxLQUFLTCxLQUFLVyxJQUFJRixHQUFLLE1BQU0sSUFBSUMsVUFBVSxHQUFHTCxLQUFLbE8sNkJBQTZCc08sTUFDaEZKLEtBQUtMLEtBQUtZLElBQUlILEVBQUl0RSxHQUNsQixNQUFNMEYsRURLRDFCLEdBQWlCVSxjQ0pJLE9BQXRCZ0IsSUFDRXhCLEtBQUtFLFlBQVlJLElBQUlrQixhQUN2QnhCLEtBQUtFLFlBQVkzTyxJQUFJaVEsbUJBQW9CcEYsS0FBS2dFLEdBRTlDSixLQUFLRSxZQUFZSyxJQUFJaUIsRUFBbUIsQ0FBQ3BCLEtBSy9DSyxXQUFZQyxHQUNWLEdBQUlWLEtBQUtFLFlBQVlJLElBQUlJLEdBQWEsQ0FDcEMsTUFBTUMsRUFBYVgsS0FBS0UsWUFBWTNPLElBQUltUCxHQUN4Q0MsTUFBQUEsR0FBQUEsRUFBWXpELFNBQVNwQixJQUNuQmtFLEtBQUtMLEtBQUtpQixPQUFPOUUsT0FLdkIyRixlQUNFekIsS0FBS2MsVUFBVTVELFNBQVN0UCxJQUN0QixJQUNFQSxFQUFLM0QsT0FBTytWLEtBQUs5VixLQUNqQixNQUFPYyxHQUNQZ1YsS0FBSzlWLElBQUllLElBQUlDLE1BQU1GLE9BS3pCdUcsSUFBSzZPLEdBQ0gsT0FBT0osS0FBS0wsS0FBS3BPLElBQUk2TyxHQUd2QlUsVUFDRSxNQUFPLElBQUlkLEtBQUtMLEtBQUtvQixVQUd2QnJGLFlBQ0UsTUFBTyxJQUFJc0UsS0FBS0wsS0FBS2pTLFNFNUZ6QixJQUFZZ1UsR0FVQUMsR0FnQkFDLElBMUJaLFNBQVlGLEdBQ1ZBLG9CQUNBQSxjQUNBQSxjQUNBQSxnQkFKRixDQUFZQSxLQUFBQSxRQVVaLFNBQVlDLEdBQ1ZBLG1DQUNBQSxrQkFDQUEscUNBQ0FBLCtCQUNBQSw2QkFDQUEsc0JBQ0FBLG9CQUNBQSx3QkFDQUEsa0JBQ0FBLDhCQVZGLENBQVlBLEtBQUFBLFFBZ0JaLFNBQVlDLEdBQ1ZBLGdDQURGLENBQVlBLEtBQUFBLGNDVkNDLEdBV1g5QixZQUFhN1YsR0FWSThWLFdBQVEsQ0FDdkIsQ0FBQzBCLEdBQVN4UixTQUFVLFFBQ3BCLENBQUN3UixHQUFTM0YsTUFBTyxPQUNqQixDQUFDMkYsR0FBUzlPLE1BQU8sU0FDakIsQ0FBQzhPLEdBQVN4VyxPQUFRLE9BT2xCOFUsS0FBSzlWLElBQU1BLEVBR0w0WCxVQUFXdFMsS0FBbUJ1UyxHQUVwQyxJQUFLL0IsS0FBSzlWLElBQUltUSxVQUErQixVQUFXLENBQ3RELE1BQU0ySCxFQUFZeEMsVUFBTVEsS0FBS2lDLE1BQU16UyxJQUFvQixZQUFZQSxFQUFLMFMsbUJBQ3hFeFAsUUFBUXpILElBQUkrVyxLQUFjRCxHQUMxQi9CLEtBQUttQyxTQUFXbkMsS0FBSzlWLElBQUltUSxVQUFVLHFCQUNuQzJGLEtBQUtvQyxRQUFVcEMsS0FBSzlWLElBQUltUSxVQUErQixxQkFBdUJwTixVQUFLakIsS0FBS2dVLEtBQUs5VixJQUFJbVksUUFBUyxpQkFDMUcxUSxZQUFXLEtBRVQsSUFDRSxNQUFNMlEsRUFBU3RDLEtBQUt1QyxvQkFBb0J2QyxLQUFLb0MsU0FDN0MsR0FBSUUsRUFBT0UsUUFBUyxDQUNsQixNQUFNQyxFQUFhLDRCQUE2QkgsRUFBd0IsaUJBQUksS0FBTyxNQUFRLDhCQUMzRjVQLFFBQVF6SCxJQUFJdVUsVUFBTWtELE9BQU8sbUJBQW9CRCxHQUM3Q3pDLEtBQUsyQyxnQkFBZ0IzQyxLQUFLb0MsU0FDMUJMLEVBQUlhLFFBQVFILEdBRWR6QyxLQUFLNkMsZUFBZTdDLEtBQUtvQyxRQUFTNVMsS0FBU3VTLEdBQzNDLE1BQU8vVyxHQUVQMEgsUUFBUXhILE1BQU0sNENBQTZDRixNQUU1RCxJQUlDdVgsb0JBQXFCSCxHQUszQixHQUFJcFMsVUFBR3FDLFdBQVcrUCxHQUFVLENBQzFCLE1BQU1VLEVBQWM5UyxVQUFHK1MsU0FBU1gsR0FBU1ksS0FDbkNDLEVBQTZHLEtBQTFGalAsR0FBWWdNLEtBQUs5VixJQUFJbVEsVUFBK0IsOEJBQWdDLElBQWEsS0FDMUgsTUFBTyxDQUNMbUksUUFBU00sRUFBY0csRUFDdkJILFlBQUFBLEVBQ0FHLGlCQUFBQSxHQUdKLE1BQU8sQ0FDTFQsU0FBUyxHQUlMRyxnQkFBaUJQLEdBQ25CcFMsVUFBR3FDLFdBQVcrUCxLQUNoQnBTLFVBQUdrVCxXQUFXZCxHQUNkcFMsVUFBR21ULGVBQWVmLElBSWRTLGVBQWdCVCxFQUFpQjVTLEtBQWlCdVMsR0FDeEQsSUFDRSxHQUFJL0IsS0FBS29ELGNBQWM1VCxFQUFNd1EsS0FBS21DLFVBQVcsQ0FDM0MsSUFBSWxYLEVBQU0sR0FBR29ZLFlBQVEvSixPQUFPLG1DQUFtQzlKLEVBQUswUyxrQkFDcEVILEVBQUk3RSxTQUFTdFAsSUFDUEEsYUFBZ0IwVixPQUFrQixVQUFUOVQsRUFDM0J2RSxHQUFPLG9DQUFvQ3NZLFVBQUtqSyxPQUFPMUwsTUFBQUEsU0FBQUEsRUFBTTRWLDBDQUV6QyxpQkFBVDVWLElBQ1RBLEVBQU9rRyxLQUFLOEosVUFBVWhRLEVBQU0sS0FBTSxJQUVwQzNDLEdBQU8sR0FBRzJDLFNBR2QzQyxHQUFPLEtBRVArRSxVQUFHeVQsZUFBZXJCLEVBQVNuWCxJQUU3QixNQUFPRCxHQUNQMEgsUUFBUXhILE1BQU0sc0NBQXVDRixJQUlqRG9ZLGNBQWU1VCxFQUFjeVMsR0FDbkMsWUFBY3pVLElBQVZ5VSxHQUFpQyxRQUFWQSxJQUd2QnhXLE1BQU1rSSxRQUFRc08sR0FDVEEsRUFBTXRVLE1BQU1DLEdBQWtCQSxJQUFTNEIsR0FBaUIsUUFBVDVCLElBRS9DNEIsSUFBU3lTLEdBSXBCL1IsV0FBWTZSLEdBQ1YsT0FBTy9CLEtBQUs4QixVQUFVSixHQUFTeFIsV0FBWTZSLEdBRzdDaEcsUUFBU2dHLEdBQ1AsT0FBTy9CLEtBQUs4QixVQUFVSixHQUFTM0YsUUFBU2dHLEdBRzFDN1csU0FBVTZXLEdBQ1IsT0FBTy9CLEtBQUs4QixVQUFVSixHQUFTeFcsU0FBVTZXLEdBRzNDblAsUUFBU21QLEdBQ1AsT0FBTy9CLEtBQUs4QixVQUFVSixHQUFTOU8sUUFBU21QLEdBRzFDWCxTQUFVVyxHQUNKM04sTUFDRjRMLEtBQUs4QixVQUFVSixHQUFTM0YsUUFBU2dHLFVDNUgxQjJCLFdBQWtCQyxlQUs3QjVELFlBQWE3VixHQUNYMFosUUFKZTVELGFBQWtCLHdDQUtqQ0EsS0FBSzlWLElBQU1BLEVBQ1gsTUFBTTJaLEVBQWU1VyxVQUFLakIsS0FBSzlCLEVBQUltWSxRQUFTLGVBQ3RDeUIsRUFBYTdXLFVBQUtqQixLQUFLOUIsRUFBSW1ZLFFBQVMsV0FDMUNyUyxVQUFHc08sY0FBY3dGLEdBQ2pCOVQsVUFBRytULGFBQWFGLEdBQ2hCN0QsS0FBS2dFLFFBQVUvVyxVQUFLakIsS0FBSzlCLEVBQUltWSxRQUFTLFNBQVUsY0FHbER6UyxvQkFDRSxNQUFNcVUsRUFBWWhYLFVBQUt1QixRQUFRd1IsS0FBS2dFLFNBSXBDLEdBSEtoVSxVQUFHcUMsV0FBVzRSLElBQ2pCalUsVUFBR2tVLFVBQVVELEVBQVcsQ0FBRUUsV0FBVyxJQUVsQ25VLFVBQUdxQyxXQUFXMk4sS0FBS2dFLFNBWXRCLE9BQU8sRUFYUGhFLEtBQUs5VixJQUFJZSxJQUFJOFEsS0FBSyxzQkFDbEIsSUFDRSxNQUFNckwsUUFBWTBULFVBQU03UyxJQUFJeU8sS0FBS3FFLFFBQVMsQ0FBRXZULGFBQWMsZ0JBRzFELE9BRkFkLFVBQUd1TyxjQUFjeUIsS0FBS2dFLFFBQVN0VCxFQUFJTyxNQUNuQytPLEtBQUs5VixJQUFJZSxJQUFJOFEsS0FBSywrQkFDWCxFQUNQLE1BQU8vUSxHQUVQLE9BREFnVixLQUFLOVYsSUFBSWUsSUFBSUMsTUFBTSw4QkFDWixHQU9iMEUsWUFBYXdILEdBRVgsTUFBTWxOLEVDM0NtQixDQUFDQSxJQUNyQixDQUNMb2EsV0FBWXBhLEVBQUlvYSxXQUNoQmpDLFFBQVNuWSxFQUFJbVksUUFDYnBYLElBQUtmLEVBQUllLElBQ1RkLElBQUtELEVBQUlDLElBQ1RvYSxPQUFRLEdBQ1JuTixNQUFPLEdBQ1BvTixTQUFVLEdBQ1Y3SSxhQUFjelIsRUFBSXlSLGFBQ2xCM1IsY0FBZUUsRUFBSUYsY0FDbkJ5YSxRQUFTdmEsRUFBSXVhLFFBQ2JoSixPQUFRdlIsRUFBSXVSLE9BQ1ppSixRQUFTeGEsRUFBSXdhLFFBQ2JDLFlBQWF6YSxFQUFJeWEsWUFDakJoVSxRQUFTekcsRUFBSXlHLFFBQ2IySixLQUFNcFEsRUFBSW9RLEtBQ1ZELFVBQVduUSxFQUFJbVEsVUFBVXVLLEtBQUsxYSxHQUM5QmtSLFdBQVlsUixFQUFJa1IsV0FBV3dKLEtBQUsxYSxHQUNoQzJhLGFBQWMzYSxFQUFJMmEsYUFBYUQsS0FBSzFhLEdBQ3BDb1MsVUFBV3BTLEVBQUlvUyxVQUFVc0ksS0FBSzFhLEdBQzlCNGEsWUFBYTVhLEVBQUk0YSxZQUFZRixLQUFLMWEsR0FDbEM2UCxPQUFRN1AsRUFBSTZQLE9BQU82SyxLQUFLMWEsR0FDeEI2YSxZQUFhN2EsRUFBSTZhLFlBQVlILEtBQUsxYSxHQUNsQ3FWLEdBQUlyVixFQUFJcVYsR0FBR3FGLEtBQUsxYSxHQUNoQjhhLEtBQU05YSxFQUFJOGEsS0FBS0osS0FBSzFhLEdBQ3BCK2EsZUFBZ0IvYSxFQUFJK2EsZUFBZUwsS0FBSzFhLEdBQ3hDZ2IsSUFBS2hiLEVBQUlnYixJQUFJTixLQUFLMWEsR0FDbEJpYixtQkFBb0JqYixFQUFJaWIsbUJBQW1CUCxLQUFLMWEsR0FDaERrYixnQkFBaUJsYixFQUFJa2IsZ0JBQWdCUixLQUFLMWEsR0FDMUNtYixnQkFBaUJuYixFQUFJbWIsZ0JBQWdCVCxLQUFLMWEsR0FDMUNvYixVQUFXcGIsRUFBSW9iLFVBQVVWLEtBQUsxYSxHQUM5QnFiLGFBQWNyYixFQUFJcWIsYUFBYVgsS0FBSzFhLEdBQ3BDc2IsS0FBTXRiLEVBQUlzYixLQUFLWixLQUFLMWEsR0FDcEJ1YixjQUFldmIsRUFBSXViLGNBQWNiLEtBQUsxYSxHQUN0Q3diLGdCQUFpQnhiLEVBQUl3YixnQkFBZ0JkLEtBQUsxYSxHQUMxQ3liLG9CQUFxQnpiLEVBQUl5YixvQkFBb0JmLEtBQUsxYSxHQUNsRDBiLFdBQVkxYixFQUFJMGIsV0FBV2hCLEtBQUsxYSxLRE1wQjJiLENBQWM3RixLQUFLOVYsS0FDL0IsSUFFRSxJQUFLdUIsTUFBTWtJLFFBQVF5RCxHQUNqQixNQUFNLElBQUlrTSxNQUFNLDJCQUVsQnBaLEVBQUlrTixNQUFRQSxFQUNabE4sRUFBSTRiLGFBQWUsR0FDbkI1YixFQUFJc2EsU0FBV3VCLFlBQVUzTyxHQUN6QmxOLEVBQUlxYSxPQUFTLEdBQ2IsTUFBTTFLLEVBQWtCM1AsRUFBSW1RLFVBQW1DLG9CQUN6RDdLLEVBQU90RixFQUFJbVEsVUFBK0Isb0JBQXNCblEsRUFBSW1RLFVBQStCLG1CQUFxQixRQUM3R25RLEVBQUl1UixPQUFPUyxTQUFTM0ssSUFBSS9CLElBQ3hCcUssRUFDZkEsRUFBZ0JqQixPQUFTLE9BQ2hCaUIsSUFDVEEsRUFBZ0JqQixPQUFTcEosR0FFM0IsTUFBTWlLLEVBQW1CdlAsRUFBSW1RLFVBQW9DLHFCQUNqRSxHQUFJUixHQUFtQkosRUFBa0IsQ0FDdkMsTUFBTW9LLEVBQWU1VyxVQUFLakIsS0FBSzlCLEVBQUltWSxRQUFTLGVBQ3ZDclMsVUFBR3FDLFdBQVd3UixJQUNqQjdULFVBQUdrVSxVQUFVTCxHQUVmLE1BQU1tQyxFQUFlLHlCQUNmQyxFQUFjLGtDQUNkMVYsUUFBUTJWLFdBQVdoYyxFQUFJa04sTUFBTXpMLEtBQUlpRSxNQUFPaEMsRUFBY3VZLHVCQUMxRCxJQUFJcEssRUFDSixHQUFJbE4sR0FBTWpCLEdBQU8sQ0FHZixHQUZBMUQsRUFBSTRiLGFBQWNLLEdBQVN2WSxFQUMzQm1PLFFBQWEzTCxHQUFXeEMsRUFBTTFELElBQzFCNlIsRUFBSzdMLFVBQVc2TCxFQUFLaE0sT0FtQ3ZCLE1BQU0sSUFBSXVULE1BQU12SCxFQUFLNUwsUUFuQ1UsQ0FDL0IsSUFBSWlXLEVBQ0osR0FBSTVNLEdBQWlCQyxZQUFrQnNDLEVBQUs1Tyx1QkFBVyxJQUFLLE9BQzdCNlMsS0FBS3FHLGVBSWhDbmMsRUFBSWUsSUFBSThRLEtBQUtpSyxHQUNiSSxRQUEwQnZPLEdBQWtCa0UsRUFBS2hNLE9BQVEwSixFQUFrQnVHLEtBQUtnRSxVQUhoRmhFLEtBQUs5VixJQUFJZSxJQUFJMkgsS0FBSyxpREFjdEIsR0FSSWdILEdBQWFDLFlBQWlCa0MsRUFBSzVPLHVCQUFXLE1BQ2hEakQsRUFBSWUsSUFBSThRLEtBQUtrSyxHQUNiRyxRQUEwQnZOLEdBQWF1TixNQUFBQSxFQUFBQSxFQUFxQnJLLEVBQUtoTSxPQUFROEosWUFBaUJrQyxFQUFLNU8sdUJBQVcsTUFFdkdpWixJQUFxQnZNLE1BQUFBLFNBQUFBLEVBQWlCYyxnQkFDekN6USxFQUFJZSxJQUFJOFEsS0FBSyxxQkFDYnFLLFFBQTBCdE0sR0FBV2lDLEVBQUtoTSxpQkFBUWdNLEVBQUs1Tyx1QkFBVyxLQUVoRWlaLEVBQW1CLENBQ3JCLElBQUlFLEVBRUZBLEdBREV6TSxNQUFBQSxTQUFBQSxFQUFpQjNCLHFCQUNWMkIsTUFBQUEsU0FBQUEsRUFBaUIxQiw2QkFBaUIsZ0JBRWxDNEQsRUFBSzVPLHVCQUFXLEdBRTNCbVosRUFBU0EsRUFBTzlVLFdBQVcsS0FBTzhVLEVBQVMsSUFBSUEsSUFDL0MsTUFBTUMsRUFBV3RaLFVBQUtqQixLQUFLNlgsRUFBYyxHQUFHOUgsRUFBS2pNLFNBQzdDLEdBQUc3QyxVQUFLQyxTQUFTNk8sRUFBS2pNLFNBQVU3QyxVQUFLRSxRQUFRNE8sRUFBS2pNLGFBQWF3VyxLQUMvRCxJQUFJaGEsTUFBT2thLFlBQVlGLEtBQzNCcGMsRUFBSTRiLGFBQWNLLEdBQVNsWixVQUFLakIsS0FBS2lCLFVBQUt1QixRQUFRWixHQUFPWCxVQUFLQyxTQUFTcVosSUFDdkV2VyxVQUFHdU8sY0FBY2dJLEVBQVVILEdBQzNCbGMsRUFBSWtOLE1BQU0rTyxHQUFTSSxRQUtsQixDQUNMLElBQUlILEVBRUosR0FEQWxjLEVBQUk0YixhQUFjSyxHQUFTdlksRUFDdkI0TCxHQUFpQkMsRUFBa0J4TSxVQUFLRSxRQUFRUyxJQUFRLE9BQzdCb1MsS0FBS3FHLGVBSWhDbmMsRUFBSWUsSUFBSThRLEtBQUtpSyxHQUNiSSxRQUEwQnZPLEdBQWtCN0gsVUFBR2lPLGFBQWFyUSxHQUFPNkwsRUFBa0J1RyxLQUFLZ0UsVUFIMUZoRSxLQUFLOVYsSUFBSWUsSUFBSTJILEtBQUssaURBTXRCLEdBQUlnSCxHQUFhQyxFQUFpQjVNLFVBQUtFLFFBQVFTLElBRTdDLEdBREExRCxFQUFJZSxJQUFJOFEsS0FBS2tLLEdBQ2MsVUFBdkJoWixVQUFLRSxRQUFRUyxJQUE0QyxVQUF2QlgsVUFBS0UsUUFBUVMsR0FBbUIsQ0FDcEUsTUFBTTZZLEVBQWF6VyxVQUFHaU8sYUFBYXJRLEdBQzdCOFksUUFBbUJDLFdBQVksQ0FDbkM1VyxPQUFRMFcsRUFDUm5OLE9BQVEsT0FDUnJCLFFBQVMsSUFFTDJPLEVBQXNCM1osVUFBS2pCLEtBQUs2WCxFQUFjLEdBQUc1VyxVQUFLQyxTQUFTVSxFQUFNWCxVQUFLRSxRQUFRUyxXQUN4Rm9DLFVBQUd1TyxjQUFjcUksRUFBcUJ4USxPQUFPMUssS0FBS2diLElBQ2xETixRQUEwQnZOLEdBQWE3SSxVQUFHaU8sYUFBYTJJLEdBQXNCL00sRUFBaUIsYUFFOUZ1TSxRQUEwQnZOLEdBQWF1TixNQUFBQSxFQUFBQSxFQUFxQnBXLFVBQUdpTyxhQUFhclEsR0FBT2lNLEVBQWlCNU0sVUFBS0UsUUFBUVMsSUFPckgsSUFKS3dZLElBQXFCdk0sTUFBQUEsU0FBQUEsRUFBaUJjLGdCQUN6Q3pRLEVBQUllLElBQUk4USxLQUFLLHFCQUNicUssUUFBMEJ0TSxHQUFXOUosVUFBR2lPLGFBQWFyUSxHQUFPWCxVQUFLRSxRQUFRUyxLQUV2RXdZLEVBQW1CLENBQ3JCLElBQUlFLEVBRUZBLEdBREV6TSxNQUFBQSxTQUFBQSxFQUFpQjNCLHFCQUNWMkIsTUFBQUEsU0FBQUEsRUFBaUIxQiw2QkFBaUIsTUFFbENsTCxVQUFLRSxRQUFRUyxHQUV4QjBZLEVBQVNBLEVBQU85VSxXQUFXLEtBQU84VSxFQUFTLElBQUlBLElBQy9DLE1BQU1DLEVBQVd0WixVQUFLakIsS0FBSzZYLEVBQWMsR0FBRzVXLFVBQUtDLFNBQVNVLEVBQU1YLFVBQUtFLFFBQVFTLE1BQVMwWSxLQUN0RnBjLEVBQUk0YixhQUFjSyxHQUFTbFosVUFBS2pCLEtBQUtpQixVQUFLdUIsUUFBUVosR0FBTyxHQUFHWCxVQUFLQyxTQUFTVSxFQUFNWCxVQUFLRSxRQUFRUyxNQUFTMFksS0FDdEd0VyxVQUFHdU8sY0FBY2dJLEVBQVVILEdBQzNCbGMsRUFBSWtOLE1BQU0rTyxHQUFTSSxhQUt6QixJQUFLLE1BQU0zWSxLQUFRMUQsRUFBSWtOLE1BQ3JCbE4sRUFBSTRiLGFBQWExSixLQUFLeE8sU0FJcEJvUyxLQUFLNkcsZ0JBQWdCM2MsU0FDckI4VixLQUFLOEcsWUFBWTVjLEdBQ3ZCLE1BQU02YyxFQUFlN2MsRUFBSW1RLFVBQWUsbUJBQXFCLEdBQzdELEdBQUkwTSxFQUFhbk0sT0FBUSxDQUN2QixNQUFNdEIsRUFBU3lOLEVBQWF6TixRQUFVLGFBQ3RDcFAsRUFBSXFhLE9BQVNyYSxFQUFJcWEsT0FBTzVZLEtBQUksQ0FBQ2lDLEVBQWdCdVksS0FDM0MsSUFBSXJXLEVBQVdsQyxFQUFLa0MsU0FTcEIsT0FSSXdKLElBQ0Z4SixFQUFXN0QsR0FBK0IvQixFQUFJNGIsYUFBY0ssR0FBUTdNLEdBQ3BFeEosRUFBV0EsRUFBU3hDLFFBQVEsT0FBUSxLQUNULE1BQXZCd0MsRUFBU3JELE9BQU8sS0FDbEJxRCxHQUFzQnFXLEVBQU0zWixhQUdoQ29CLEVBQUtrQyxTQUFXQSxFQUNUbEMsS0FPWCxhQUpNb1MsS0FBS2dILGFBQWE5YyxTQUNsQjhWLEtBQUtpSCxTQUFTL2MsR0FDcEJBLEVBQUlrTixNQUFRbE4sRUFBSXNhLGVBQ1Z4RSxLQUFLa0gsWUFBWWhkLEdBQ2hCQSxFQUNQLE1BQU9jLEdBS1AsR0FKQWQsRUFBSWUsSUFBSTJILEtBQUsrTyxHQUFjd0YsUUFDM0JqZCxFQUFJc2IsS0FBSzdELEdBQWN5RixpQkFBa0IsR0FDekNsZCxFQUFJc2IsS0FBSzdELEdBQWN3RixPQUFRbmMsR0FDL0JkLEVBQUllLElBQUlDLE1BQU1GLEdBQ1ZkLEVBQUltUSxVQUErQixTQUNyQyxNQUFNclAsRUFFUixPQUFPZCxHQUlIMEYsc0JBQXVCMUYsR0FLN0IsT0FKQUEsRUFBSXNiLEtBQUs3RCxHQUFjeUYsZ0JBQWlCLEdBQ3hDbGQsRUFBSXNiLEtBQUs3RCxHQUFjMEYsaUJBQWtCbmQsR0FDekNBLEVBQUllLElBQUk4USxLQUFLLDBCQUNQaUUsS0FBS3NILGNBQWNwZCxFQUFJdVIsT0FBTzhMLHVCQUF3QnJkLEdBQ3JEQSxFQUdEMEYsa0JBQW1CMUYsR0FDekJBLEVBQUlzYixLQUFLN0QsR0FBY3lGLGdCQUFpQixJQUN4QyxNQUFNNVgsRUFBT3RGLEVBQUltUSxVQUErQix1QkFBeUIsT0FDekUsSUFBSW1OLEVBQXFCaFksRUFDckIyTSxFQUFjalMsRUFBSXVSLE9BQU9VLFlBQVk1SyxJQUFJL0IsR0FRN0MsT0FQSzJNLElBQ0hBLEVBQWNqUyxFQUFJdVIsT0FBT1UsWUFBWTVLLElBQUksUUFDekNpVyxFQUFxQixPQUNyQnRkLEVBQUllLElBQUkySCxLQUFLLDRCQUE0QnBELDRDQUUzQ3RGLEVBQUllLElBQUk4USxLQUFLLDJDQUEyQ3lMLFlBQ2xEckwsTUFBQUEsU0FBQUEsRUFBYWxTLE9BQU9DLElBQ25CQSxFQUdEMEYsbUJBQW9CMUYsR0FLMUIsT0FKQUEsRUFBSXNiLEtBQUs3RCxHQUFjeUYsZ0JBQWlCLElBQ3hDbGQsRUFBSWUsSUFBSThRLEtBQUssaUJBQ2I3UixFQUFJc2IsS0FBSzdELEdBQWM4RixjQUFldmQsU0FDaEM4VixLQUFLc0gsY0FBY3BkLEVBQUl1UixPQUFPaU0sb0JBQXFCeGQsR0FDbERBLEVBR0QwRixlQUFnQjFGLEdBQ3RCLElBQUlzRixFQUFPdEYsRUFBSW1RLFVBQStCLG9CQUFzQm5RLEVBQUltUSxVQUErQixtQkFBcUIsT0FDeEg2QixFQUFXaFMsRUFBSXVSLE9BQU9TLFNBQVMzSyxJQUFJL0IsR0FDbkNnWSxFQUFxQmhZLEVBQ3BCME0sSUFDSDFNLEVBQU8sT0FDUGdZLEVBQXFCLE9BQ3JCdEwsRUFBV2hTLEVBQUl1UixPQUFPUyxTQUFTM0ssSUFBSSxRQUNuQ3JILEVBQUllLElBQUkySCxLQUFLLHlCQUF5QnBELHlDQUV4Q3RGLEVBQUllLElBQUk4USxLQUFLLHFDQUFxQ3lMLFlBQzVDdEwsTUFBQUEsU0FBQUEsRUFBVWpTLE9BQU9DLElBQ3ZCLElBQUssTUFBTXlkLEtBQWF6ZCxFQUFJcWEsT0FDMUJvRCxFQUFVblksS0FBT0EsRUFFbkIsT0FBT3RGLEVBR0QwRixrQkFBbUIxRixHQUN6QkEsRUFBSXNiLEtBQUs3RCxHQUFjaUcsYUFBYzFkLEdBQ3JDQSxFQUFJc2IsS0FBSzdELEdBQWN5RixnQkFBaUIsV0FDbENwSCxLQUFLc0gsY0FBY3BkLEVBQUl1UixPQUFPb00sbUJBQW9CM2QsR0FDeEQsSUFBSTZYLEVBQU0sR0FDVixNQUFNeFcsRUFBU3JCLEVBQUlxYSxPQUFPaFosT0FDcEJ1YyxHQUF3RixJQUFwRTVkLEVBQUltUSxVQUFnQyw0QkFDOUQsSUFBSyxJQUFJME4sRUFBSSxFQUFHQSxFQUFJeGMsRUFBUXdjLFNBQ1UsSUFBekI3ZCxFQUFJcWEsT0FBT3dELEdBQUdDLFNBQ3ZCakcsR0FBTytGLEVBQW9CNVksR0FBZ0JoRixFQUFJcWEsT0FBT3dELEdBQUdDLFFBQVc5ZCxFQUFJcWEsT0FBT3dELEdBQUdDLE9BQzlFRCxJQUFNeGMsRUFBUyxJQUNqQndXLEdBQU8sY0FHSjdYLEVBQUlxYSxPQUFPd0QsR0FBR0UsbUJBQ2QvZCxFQUFJcWEsT0FBT3dELEdBQUdoWSxPQUl2QixPQUZBN0YsRUFBSXNiLEtBQUs3RCxHQUFjdUcsU0FBVWhlLEdBQ2pDQSxFQUFJZSxJQUFJaUYsUUFBUSxLQUFLNlIsS0FDZDdYLEVBR0QwRixvQkFBcUJ1WSxFQUFxQ2plLEdBQ2hFLE1BQU1RLEVBQVV5ZCxFQUFpQnJILFVBQzNCc0gsRUFBY0QsRUFBaUJ6TSxZQUMvQjJNLEVBQWdCRixFQUFpQnRILFVBVXZDLGFBVE10USxRQUFRK1gsSUFBSTVkLEVBQVFpQixLQUFJaUUsTUFBT2tNLEVBQWlCcUssS0FDcEQsSUFDRWpjLEVBQUllLElBQUk4USxLQUFLLEdBQUdzTSxNQUFrQkQsRUFBWWpDLG9CQUN4Q3JLLEVBQU83UixPQUFPQyxHQUNwQixNQUFPYyxHQUVQLE1BREFkLEVBQUllLElBQUlDLE1BQU0sR0FBR21kLE1BQWtCRCxFQUFZakMsWUFDekNuYixPQUdIZCxHRTdSWCxNQUFNcWUsR0FBYyxDQUFDelksRUFBa0J1RixFQUFlbVQsRUFBa0JDLEVBQWUsTUFFOUUsQ0FDTDdYLE9BQVEsT0FDUjlCLElBQUssV0FIUTJaLEdBQWdCLHdCQUk3QkMsUUFBUyxDQUNQQyxZQUFhLHNCQUNiLGFBQWMsVUFDZEMsY0FBZUosR0FFakJLLFNBQVUsQ0FDUkMsT0FBUSxDQUNOQyxNQUFPMVQsRUFDUHhLLFFBQVMsQ0FDUG1lLFNBQVVsWixJQUdkbVosSUFBSyxVQUtMaGYsR0FBUzJGLE1BQU8xRixJQUNwQixNQUFNZ2YsRUFBYWhmLEVBQUltUSxVQUF1QixlQUM5QyxJQUFLNk8sRUFDSCxNQUFNLElBQUk1RixNQUFNLDZCQUVsQixNQUFNNkYsRUFBVWpmLEVBQUlxYSxPQUNwQixJQUFLLE1BQU03UCxLQUFPeVUsRUFDaEIsR0FBSXpVLEVBQUk1RSxVQUFZNEUsRUFBSTNFLE9BQVEsQ0FDOUIsSUFBSXNGLEVBQVFYLEVBQUkzRSxRQUNYc0YsR0FBU1gsRUFBSXVULGNBQ2hCNVMsRUFBUWUsT0FBTzFLLEtBQUtnSixFQUFJdVQsWUFBYSxXQUV2QyxNQUFNbUIsRUFBYWIsR0FBWTdULEVBQUk1RSxTQUFVdUYsRUFBTzZULE1BQUFBLFNBQUFBLEVBQVlHLE1BQU9ILE1BQUFBLFNBQUFBLEVBQVlULGNBQ25GLElBQ0UsTUFBTS9YLFFBQW9CeEcsRUFBSXlHLFFBQVF5WSxHQUNoQ0UsRUFBT3hWLEtBQUtDLE1BQU1yRCxHQUN4QixHQUFrQixZQUFkNFksRUFBS0MsWUFDQTdVLEVBQUl1VCxtQkFDSnZULEVBQUkzRSxPQUNYMkUsRUFBSXNULE9BQVNzQixFQUFLclksS0FBS25DLElBQ3ZCNEYsRUFBSThVLEtBQU9GLEVBQUtyWSxLQUFLdVksU0FDaEIsQ0FBQSxHQUFrQixtQkFBZEYsRUFBS0MsTUFBb0QsaUJBQWhCRCxFQUFLRyxPQVN2RCxNQUpBdmYsRUFBSXNiLEtBQUs3RCxHQUFjK0gsYUFBYyxDQUNuQ0MsTUFBT3pmLEVBQUlvUSxLQUFLQyxVQUF1QixpQkFDdkMrTyxLQUFNQSxFQUFLN1gsVUFFUCxJQUFJNlIsTUFBTWdHLEVBQUs3WCxnQkFSZGlELEVBQUl1VCxtQkFDSnZULEVBQUkzRSxPQUNYMkUsRUFBSXNULE9BQVNzQixFQUFLRyxRQVFwQixNQUFPemUsR0FFUCxNQURBZCxFQUFJZSxJQUFJQyxNQUFNRixHQUNSQSxHQUlaLE9BQU9kLEdBR0htQixHQUFVbkIsSUFDZCxNQUFNa1EsRUFBYWxRLEVBQUltUSxVQUF1QixnQkFBa0IsR0FzQmhFLE1BckJnQyxDQUM5QixDQUNFdkksS0FBTSxRQUNOTCxRQUFTLFlBQ1RqQyxLQUFNLFdBQ0ZqRixZQUFXLE9BQU9MLEVBQUlvUSxLQUFLQyxVQUF1QixzQkFDdERFLFFBQVNMLEVBQVdpUCxPQUFTLEdBQzdCN08sVUFBVSxHQUVaLENBQ0UxSSxLQUFNLGVBQ050QyxLQUFNLFFBQ0ZvYSxhQUFZLE9BQU8xZixFQUFJb1EsS0FBS0MsVUFBdUIsOEJBQ25EOUksY0FDRixPQUFPdkgsRUFBSW9RLEtBQUtDLFVBQXVCLHNDQUVyQ2hRLFlBQVcsT0FBT0wsRUFBSW9RLEtBQUtDLFVBQXVCLDhCQUN0REUsUUFBU0wsRUFBV3FPLGNBQWdCLEdBQ3BDak8sVUFBVSxLQ3hFaEIsTUFBTXFQLEdBQW9CLENBQUNoZixFQUF1QmlGLEtBQ2hELE1BQU1nYSxFQUFXamYsRUFBUWlmLFNBQ25CQyxFQUFZbGYsRUFBUWtmLFVBQ3BCQyxFQUFRbmYsRUFBUW1mLE1BQ2hCQyxFQUFTcGYsRUFBUW9mLE9BQ3ZCLElBQUlDLEVBQ0FDLEVBQW1CLEdBQ3ZCLEdBQUt0ZixFQUFRc1csU0FBK0IsT0FBcEJ0VyxFQUFRc1csUUFVekIsQ0FFTCxNQUFNaUosRUFBUXZlLEtBQUtDLE9BQU0sSUFBSVEsTUFBT2thLFVBQVksS0FFaEQyRCxFQUFXLEdBQUdDLEtBREdBLEVBQVEsUUFFekIsTUFBTUMsRUFBVXRkLFVBQU91ZCxXQUFXLE9BQVFQLEdBQVczZSxPQUFPK2UsR0FBVS9jLE9BQU8sT0FDdkVtZCxFQUFXMWYsRUFBUTBmLFNBQVcxZixFQUFRMGYsU0FBVyxPQUFPMWYsRUFBUTJmLG9CQUNoRUMsRUFBYSxTQUFTNWYsRUFBUW9DLE9BQU82QyxhQUFvQmpGLEVBQVFvZixVQUFVTSxNQUUzRUcsRUFBZSxTQUFTUCxNQURMcGQsVUFBT0MsV0FBVyxRQUFRNUIsT0FBT3FmLEdBQVlyZCxPQUFPLFdBRTdFOGMsRUFBWW5kLFVBQU91ZCxXQUFXLE9BQVFELEdBQVNqZixPQUFPc2YsR0FBY3RkLE9BQU8sV0FwQjNCLENBQ2hELE1BQU1yQixFQUFTRixLQUFLQyxNQUFzQixLQUFoQkQsS0FBS0UsVUFDekI0ZSxFQUFVOWUsS0FBS0MsT0FBTSxJQUFJUSxNQUFPa2EsVUFBWSxLQUFRLEVBR3BEb0UsRUFBaUIsS0FBS1osT0FBV0MsT0FBWUgsT0FGbkNhLEVBQVUsVUFFb0RBLE9BQWE1ZSxPQUVyRjhlLEVBQWE5ZCxVQUFPdWQsV0FBVyxPQUFRUCxHQUFXM2UsT0FBT3dmLEdBQWdCeGQsU0FDekUwZCxFQUFhMVUsT0FBTzJVLE9BQU8sQ0FBQ0YsRUFBWXpVLE9BQU8xSyxLQUFLa2YsS0FDMURWLEVBQVk5VCxPQUFPMUssS0FBS29mLEdBQVl0ZSxTQUFTLFVBYS9DLE1BQU8sQ0FDTDBkLFVBQUFBLEVBQ0FGLE1BQUFBLEVBQ0FDLE9BQUFBLEVBQ0FFLFNBQUFBLElBSUU1QixHQUFjLENBQUMxZCxFQUF1QmlGLEVBQWtCb2EsRUFBdUI3VSxFQUFlOEwsS0FDbEcsTUFBTXFKLEVBQU8zZixFQUFRMmYsS0FDZnZkLEVBQU9wQyxFQUFRb0MsS0FDckIsR0FBS3BDLEVBQVFzVyxTQUErQixPQUFwQnRXLEVBQVFzVyxRQWdCekIsQ0FDTCxNQUFNb0osRUFBVzFmLEVBQVEwZixTQUFXMWYsRUFBUTBmLFNBQVcsT0FBTzFmLEVBQVEyZixvQkFDdEUsTUFBTyxDQUNMNVosT0FBUSxNQUNSOUIsSUFBSyxVQUFVakUsRUFBUW9mLFVBQVVNLEtBQVlTLG1CQUFtQi9kLEtBQVErZCxtQkFBbUJsYixLQUMzRjRZLFFBQVMsQ0FDUHVDLEtBQU0sR0FBR3BnQixFQUFRb2YsVUFBVU0sSUFDM0IzQixjQUFlLDhCQUE4Qi9kLEVBQVFpZix3QkFBd0JJLEVBQVVDLHVCQUF1QkQsRUFBVUMsNkRBQTZERCxFQUFVQSxZQUMvTHZCLFlBQWF1QyxXQUFLQyxPQUFPcmIsSUFBYSwyQkFDdEMsYUFBYyxTQUFTcVIsZUFFekJtSSxLQUFNalUsRUFDTnhFLHlCQUF5QixHQTNCM0IsTUFBTyxDQUNMRCxPQUFRLE9BQ1I5QixJQUFLLFVBQVUwYixnQ0FBbUNOLEVBQVVGLFNBQVNFLEVBQVVELFVBQVU5YSxVQUFVbEMsS0FBUTZDLElBQzNHNFksUUFBUyxDQUNQdUMsS0FBTSxHQUFHVCxzQkFDVDVCLGNBQWVzQixFQUFVQSxVQUN6QnZCLFlBQWEsc0JBQ2IsYUFBYyxTQUFTeEgsZUFFekIwSCxTQUFVLENBQ1J1QyxHQUFJLFNBQ0pDLFlBQWFoVyxHQUVmeEUseUJBQXlCLElBbUJ6QjVHLEdBQVMyRixNQUFPMUYsZ0JBQ3BCLE1BQU1vaEIsRUFBZXBoQixFQUFJbVEsVUFBd0IsZ0JBQ2pELElBQUtpUixFQUNILE1BQU0sSUFBSWhJLE1BQU0saUNBRWxCLElBQ0UsTUFBTTZGLEVBQVVqZixFQUFJcWEsT0FDZGdILEVBQVlELEVBQWFDLFVBQ3pCdGUsWUFBT3FlLEVBQWFyZSxvQkFBUSxHQUM1QnVlLEdBQVNGLEVBQWFuSyxTQUFvQyxPQUF6Qm1LLEVBQWFuSyxRQUNwRCxJQUFLLE1BQU16TSxLQUFPeVUsRUFDaEIsR0FBSXpVLEVBQUk1RSxVQUFZNEUsRUFBSTNFLE9BQVEsQ0FDOUIsTUFBTW1hLEVBQVlMLEdBQWtCeUIsRUFBYzVXLEVBQUk1RSxVQUN0RCxJQUFLb2EsRUFDSCxPQUFPLEVBRVQsSUFBSTdVLEVBQVFYLEVBQUkzRSxRQUNYc0YsR0FBU1gsRUFBSXVULGNBQ2hCNVMsRUFBUWUsT0FBTzFLLEtBQUtnSixFQUFJdVQsWUFBYSxXQUV2QyxNQUFNcGQsRUFBVTBkLEdBQVkrQyxFQUFjNVcsRUFBSTVFLFNBQVVvYSxFQUFXN1UsRUFBT25MLEVBQUl5YSxhQUFlemEsRUFBSXdhLFNBQzNGaFUsUUFBWXhHLEVBQUl5RyxRQUFROUYsR0FDM0JrRyxNQUFNTCxHQUFhQSxJQUNuQjNGLE9BQU9rVSxJQUNDLENBQ0x3TSxXQUFZLElBQ1puQyxLQUFNLENBQ0p2SCxJQUFLN1gsRUFBSW9RLEtBQUtDLFVBQXVCLGVBQ3JDMEUsSUFBQUEsT0FJUixJQUFJcUssRUFNSixHQUpFQSxFQURFa0MsR0FBd0IsaUJBQVI5YSxFQUNYb0QsS0FBS0MsTUFBTXJELEdBRVhBLEVBRWUsTUFBcEI0WSxFQUFLbUMsV0FDUCxnQkFBSW5DLE1BQUFBLFNBQUFBLEVBQU1BLDJCQUFNckssS0FDUnFLLEVBQUtBLEtBQUtySyxJQUVWLElBQUlxRSxpQkFBTWdHLE1BQUFBLFNBQUFBLEVBQU1BLDJCQUFNdkgsaUJBQU91SCxNQUFBQSxTQUFBQSxFQUFNQSwyQkFBTTdYLFVBR25ELE1BQU1pYSxFQUFZSixFQUFhemdCLFNBQVcsR0FDcEM4Z0IsT0FBNkJuZSxJQUF0QjhkLEVBQWFLLFFBQStCTCxFQUFhSyxLQUN0RSxHQUFJSCxHQUEwQixZQUFqQmxDLEVBQUs3WCxlQUNUaUQsRUFBSXVULG1CQUNKdlQsRUFBSTNFLE9BRVQyRSxFQUFJc1QsT0FERnVELEVBQ1csR0FBR0EsS0FBYXRlLElBQU95SCxFQUFJNUUsV0FFM0IsR0FBR3daLEVBQUtyWSxLQUFLMmEsYUFBdUJGLFFBRTlDLENBQUEsR0FBS0YsSUFBU2xDLEdBQTRCLE1BQXBCQSxFQUFLbUMsV0FVaEMsTUFBTSxJQUFJbkksTUFBTTVTLEVBQUk0WSxLQUFLdkgsS0FQekIsVUFGT3JOLEVBQUl1VCxtQkFDSnZULEVBQUkzRSxPQUNQd2IsRUFDRjdXLEVBQUlzVCxPQUFTLEdBQUd1RCxLQUFhUCxtQkFBbUIvZCxLQUFRK2QsbUJBQW1CdFcsRUFBSTVFLFlBQVk0YixJQUFZcGUsUUFBUSxPQUFRLFNBQ2xILENBQ0wsTUFBTWlkLEVBQVdlLEVBQWFmLFNBQVdlLEVBQWFmLFNBQVcsT0FBT2UsRUFBYWQsb0JBQ3JGOVYsRUFBSXNULE9BQVMsV0FBV3NELEVBQWFyQixVQUFVTSxLQUFZUyxtQkFBbUIvZCxLQUFRK2QsbUJBQW1CdFcsRUFBSTVFLFlBQVk0YixJQUFZcGUsUUFBUSxPQUFRLE1BS3JKcWUsSUFFQWpYLEVBQUlzVCxRQURGMEQsRUFDWSxhQUVBLGNBS3RCLE9BQU94aEIsRUFDUCxNQUFPK1UsR0FDUCxJQUFLcU0sRUFBYW5LLFNBQW9DLE9BQXpCbUssRUFBYW5LLFFBQ3hDLElBQ0UsTUFBTW1JLEVBQU94VixLQUFLQyxNQUFNa0wsRUFBSS9ULE9BQzVCaEIsRUFBSXNiLEtBQUs3RCxHQUFjK0gsYUFBYyxDQUNuQ0MsTUFBT3pmLEVBQUlvUSxLQUFLQyxVQUF1QixpQkFDdkMrTyxLQUFNcGYsRUFBSW9RLEtBQUtDLFVBQXVCLHVCQUF3QixDQUM1RGdQLEtBQU1ELEVBQUtDLE9BRWJ4VSxLQUFNLHdEQUVSLE1BQU8vSixJQUVYLE1BQU1pVSxJQUlKNVQsR0FBVW5CLElBQ2QsTUFBTWtRLEVBQWFsUSxFQUFJbVEsVUFBd0IsaUJBQW1CLEdBaUdsRSxNQWhHZ0MsQ0FDOUIsQ0FDRXZJLEtBQU0sVUFDTnRDLEtBQU0sT0FDTmpGLE1BQU9MLEVBQUlvUSxLQUFLQyxVQUF1QiwrQkFDdkNHLFFBQVMsQ0FBQyxLQUFNLE1BQ2hCRCxRQUFTLEtBQ1RELFVBQVUsR0FFWixDQUNFMUksS0FBTSxXQUNOdEMsS0FBTSxRQUNGakYsWUFBVyxPQUFPTCxFQUFJb1EsS0FBS0MsVUFBdUIsaUNBQ3RERSxRQUFTTCxFQUFXMFAsVUFBWSxHQUNoQ3RQLFVBQVUsR0FFWixDQUNFMUksS0FBTSxZQUNOdEMsS0FBTSxXQUNGakYsWUFBVyxPQUFPTCxFQUFJb1EsS0FBS0MsVUFBdUIsa0NBQ3RERSxRQUFTTCxFQUFXMlAsV0FBYSxHQUNqQ3ZQLFVBQVUsR0FFWixDQUNFMUksS0FBTSxTQUNOdEMsS0FBTSxRQUNGakYsWUFBVyxPQUFPTCxFQUFJb1EsS0FBS0MsVUFBdUIsK0JBQ3RERSxRQUFTTCxFQUFXNlAsUUFBVSxHQUM5QnpQLFVBQVUsR0FFWixDQUNFMUksS0FBTSxRQUNOdEMsS0FBTSxRQUNGb2EsYUFBWSxPQUFPMWYsRUFBSW9RLEtBQUtDLFVBQXVCLDhCQUNuRGhRLFlBQVcsT0FBT0wsRUFBSW9RLEtBQUtDLFVBQXVCLDhCQUN0REUsUUFBU0wsRUFBVzRQLE9BQVMsR0FDekJ2WSxjQUFhLE9BQU92SCxFQUFJb1EsS0FBS0MsVUFBdUIsc0NBQ3hEQyxVQUFVLEdBRVosQ0FDRTFJLEtBQU0sT0FDTnRDLEtBQU0sUUFDRm9hLGFBQVksT0FBTzFmLEVBQUlvUSxLQUFLQyxVQUF1Qiw2QkFDbkRoUSxZQUFXLE9BQU9MLEVBQUlvUSxLQUFLQyxVQUF1Qiw2QkFDdERFLFFBQVNMLEVBQVdvUSxNQUFRLEdBQ3hCL1ksY0FBYSxPQUFPdkgsRUFBSW9RLEtBQUtDLFVBQXVCLHFDQUN4REMsVUFBVSxHQUVaLENBQ0UxSSxLQUFNLFdBQ050QyxLQUFNLFFBQ0ZvYSxhQUFZLE9BQU8xZixFQUFJb1EsS0FBS0MsVUFBdUIsaUNBQ25EaFEsWUFBVyxPQUFPTCxFQUFJb1EsS0FBS0MsVUFBdUIsaUNBQ3RERSxRQUFTTCxFQUFXbVEsVUFBWSxHQUM1QjlZLGNBQWEsT0FBT3ZILEVBQUlvUSxLQUFLQyxVQUF1Qix5Q0FDeERDLFVBQVUsR0FFWixDQUNFMUksS0FBTSxPQUNOdEMsS0FBTSxRQUNGb2EsYUFBWSxPQUFPMWYsRUFBSW9RLEtBQUtDLFVBQXVCLDZCQUNuRGhRLFlBQVcsT0FBT0wsRUFBSW9RLEtBQUtDLFVBQXVCLDZCQUN0REUsUUFBU0wsRUFBV25OLE1BQVEsR0FDeEJ3RSxjQUFhLE9BQU92SCxFQUFJb1EsS0FBS0MsVUFBdUIscUNBQ3hEQyxVQUFVLEdBRVosQ0FDRTFJLEtBQU0sWUFDTnRDLEtBQU0sUUFDRm9hLGFBQVksT0FBTzFmLEVBQUlvUSxLQUFLQyxVQUF1QixrQ0FDbkRoUSxZQUFXLE9BQU9MLEVBQUlvUSxLQUFLQyxVQUF1QixrQ0FDdERFLFFBQVNMLEVBQVdtUixXQUFhLEdBQzdCOVosY0FBYSxPQUFPdkgsRUFBSW9RLEtBQUtDLFVBQXVCLDBDQUN4REMsVUFBVSxHQUVaLENBQ0UxSSxLQUFNLFVBQ050QyxLQUFNLFFBQ05pTCxRQUFTTCxFQUFXdlAsU0FBVyxHQUMzQitlLGFBQVksT0FBTzFmLEVBQUlvUSxLQUFLQyxVQUF1QixnQ0FDbkRoUSxZQUFXLE9BQU9MLEVBQUlvUSxLQUFLQyxVQUF1QixnQ0FDbEQ5SSxjQUFhLE9BQU92SCxFQUFJb1EsS0FBS0MsVUFBdUIsd0NBQ3hEQyxVQUFVLEdBRVosQ0FDRTFJLEtBQU0sT0FDTnRDLEtBQU0sVUFDTmlMLGFBQTZCak4sSUFBcEI0TSxFQUFXdVIsUUFBK0J2UixFQUFXdVIsS0FDMUQvQixhQUFZLE9BQU8xZixFQUFJb1EsS0FBS0MsVUFBdUIsNkJBQ25EaFEsWUFBVyxPQUFPTCxFQUFJb1EsS0FBS0MsVUFBdUIsNkJBQ3REQyxVQUFVLEVBQ05xUixrQkFBaUIsT0FBTzNoQixFQUFJb1EsS0FBS0MsVUFBdUIscUNBQ3hEdVIsaUJBQWdCLE9BQU81aEIsRUFBSW9RLEtBQUtDLFVBQXVCLG9DQUN2RHdSLFdBQVUsT0FBTzdoQixFQUFJb1EsS0FBS0MsVUFBdUIsb0NDaFIzRCxNQUFNZ08sR0FBYyxDQUFDelksRUFBa0JqRixFQUF3Qm9HLEtBQzdELE1BQU1oRSxFQUFPcEMsRUFBUW9DLE1BQVEsSUFDdkJvYyxNQUFFQSxFQUFLMkMsS0FBRUEsR0FBU25oQixFQUN4QixNQUFPLENBQ0wrRixPQUFRLE1BQ1I5QixJQUFLLGdDQUFnQ2tkLGNBQWlCN2MsVUFBVWxDLEtBQVErZCxtQkFBbUJsYixLQUFZeEMsUUFBUSxPQUFRLEtBQ3ZIb2IsUUFBUyxDQUNQRSxjQUFlLFNBQVNTLElBQ3hCLGFBQWMsVUFDZCxlQUFnQjZCLFdBQUtDLE9BQU9yYixJQUFhLDRCQUUzQ3daLEtBQU1yWSxFQUNOZ2IsTUFBTSxJQUlKeFAsR0FBYSxDQUFDM00sRUFBa0JqRixLQUNwQyxNQUFNb0MsRUFBT3BDLEVBQVFvQyxNQUFRLElBQ3ZCb2MsTUFBRUEsRUFBSzJDLEtBQUVBLEVBQUlFLE9BQUVBLEdBQVdyaEIsRUFDaEMsTUFBTyxDQUNMK0YsT0FBUSxNQUNSOUIsSUFBSyxnQ0FBZ0NrZCxjQUFpQjdjLFVBQVVsQyxLQUFRK2QsbUJBQW1CbGIsVUFBaUJvYyxJQUFTNWUsUUFBUSxPQUFRLEtBQ3JJb2IsUUFBUyxDQUNQRSxjQUFlLFNBQVNTLElBQ3hCLGFBQWMsU0FFaEI0QyxNQUFNLElBSUpoaUIsR0FBUzJGLE1BQU8xRixJQUNwQixNQUFNaWlCLEVBQWdCamlCLEVBQUltUSxVQUF5QixpQkFDbkQsSUFBSzhSLEVBQ0gsTUFBTSxJQUFJN0ksTUFBTSw0QkFFbEIsSUFDRSxNQUFNNkYsRUFBVWpmLEVBQUlxYSxPQUNkNkgsRUFBYUQsRUFBY2xmLE1BQVEsR0FDekMsSUFBSyxNQUFNeUgsS0FBT3lVLEVBQ2hCLEdBQUl6VSxFQUFJNUUsVUFBWTRFLEVBQUkzRSxPQUFRLENBQzlCLE1BQU1rWSxFQUFjdlQsRUFBSXVULGFBQWU3UixPQUFPMUssS0FBS2dKLEVBQUkzRSxRQUFRdkQsU0FBUyxVQUNsRXlFLEVBQU8sQ0FDWFEsUUFBUyxvQkFDVHlhLE9BQVFDLEVBQWNELE9BQ3RCaE8sUUFBUytKLEVBQ1RoYixLQUFNbWYsRUFBYWpkLFVBQVV1RixFQUFJNUUsV0FFN0JzWixFQUFhYixHQUFZN1QsRUFBSTVFLFNBQVVxYyxFQUFlbGIsR0FDNUQsSUFDRSxNQUFNcVksUUFLSXBmLEVBQUl5RyxRQUFReVksR0FDdEIsSUFBSUUsRUFVRixNQUFNLElBQUloRyxNQUFNLHlDQVRUNU8sRUFBSXVULG1CQUNKdlQsRUFBSTNFLE9BQ1BvYyxFQUFjWixVQUNoQjdXLEVBQUlzVCxPQUFTLEdBQUdtRSxFQUFjWixhQUFhUCxtQkFBbUJvQixLQUFjcEIsbUJBQW1CdFcsRUFBSTVFLFlBQVl4QyxRQUFRLE9BQVEsS0FFL0hvSCxFQUFJc1QsT0FBU3NCLEVBQUtwTCxRQUFRbU8sYUFFNUIzWCxFQUFJOFUsS0FBT0YsRUFBS3BMLFFBQVFvTyxJQUkxQixNQUFPck4sR0FDUCxHQUF1QixNQUFuQkEsRUFBSXdNLFdBZU4sTUFBTXhNLEVBZm9CLFFBQ25CdkssRUFBSXVULG1CQUNKdlQsRUFBSTNFLE9BQ1gsTUFBTVcsUUFBWXhHLEVBQUl5RyxRQUFROEwsR0FBVy9ILEVBQUk1RSxTQUFVcWMsSUFDdkQsSUFBSTFlLE9BQU9DLEtBQUtnRCxHQUFLbkYsT0FRbkIsTUFBTSxJQUFJK1gsTUFBTSx3Q0FQaEI1TyxFQUFJOFUsS0FBTzlZLEVBQUk0YixJQUNYSCxFQUFjWixVQUNoQjdXLEVBQUlzVCxPQUFTLEdBQUdtRSxFQUFjWixhQUFhUCxtQkFBbUJvQixLQUFjcEIsbUJBQW1CdFcsRUFBSTVFLFlBQVl4QyxRQUFRLE9BQVEsS0FFL0hvSCxFQUFJc1QsT0FBU3RYLEVBQUkyYixlQVc3QixPQUFPbmlCLEVBQ1AsTUFBTytVLEdBS1AsTUFKQS9VLEVBQUlzYixLQUFLN0QsR0FBYytILGFBQWMsQ0FDbkNDLE1BQU96ZixFQUFJb1EsS0FBS0MsVUFBdUIsaUJBQ3ZDK08sS0FBTXBmLEVBQUlvUSxLQUFLQyxVQUF1QixnQ0FFbEMwRSxJQUlKNVQsR0FBVW5CLElBQ2QsTUFBTWtRLEVBQWFsUSxFQUFJbVEsVUFBeUIsa0JBQW9CLEdBOENwRSxNQTdDZ0MsQ0FDOUIsQ0FDRXZJLEtBQU0sT0FDTnRDLEtBQU0sUUFDRm9hLGFBQVksT0FBTzFmLEVBQUlvUSxLQUFLQyxVQUF1Qix1QkFDbkRoUSxZQUFXLE9BQU9MLEVBQUlvUSxLQUFLQyxVQUF1Qix1QkFDbEQ5SSxjQUFhLE9BQU92SCxFQUFJb1EsS0FBS0MsVUFBdUIsK0JBQ3hERSxRQUFTTCxFQUFXNFIsTUFBUSxHQUM1QnhSLFVBQVUsR0FFWixDQUNFMUksS0FBTSxTQUNOdEMsS0FBTSxRQUNGb2EsYUFBWSxPQUFPMWYsRUFBSW9RLEtBQUtDLFVBQXVCLHlCQUNuRGhRLFlBQVcsT0FBT0wsRUFBSW9RLEtBQUtDLFVBQXVCLHlCQUNsRDlJLGNBQWEsT0FBT3ZILEVBQUlvUSxLQUFLQyxVQUF1QixpQ0FDeERFLFFBQVNMLEVBQVc4UixRQUFVLFNBQzlCMVIsVUFBVSxHQUVaLENBQ0UxSSxLQUFNLFFBQ050QyxLQUFNLFdBQ0ZqRixZQUFXLE9BQU9MLEVBQUlvUSxLQUFLQyxVQUF1Qix3QkFDdERFLFFBQVNMLEVBQVdpUCxPQUFTLEdBQzdCN08sVUFBVSxHQUVaLENBQ0UxSSxLQUFNLE9BQ050QyxLQUFNLFFBQ0ZvYSxhQUFZLE9BQU8xZixFQUFJb1EsS0FBS0MsVUFBdUIsdUJBQ25EaFEsWUFBVyxPQUFPTCxFQUFJb1EsS0FBS0MsVUFBdUIsdUJBQ2xEOUksY0FBYSxPQUFPdkgsRUFBSW9RLEtBQUtDLFVBQXVCLCtCQUN4REUsUUFBU0wsRUFBV25OLE1BQVEsR0FDNUJ1TixVQUFVLEdBRVosQ0FDRTFJLEtBQU0sWUFDTnRDLEtBQU0sUUFDRm9hLGFBQVksT0FBTzFmLEVBQUlvUSxLQUFLQyxVQUF1Qiw0QkFDbkRoUSxZQUFXLE9BQU9MLEVBQUlvUSxLQUFLQyxVQUF1Qiw0QkFDbEQ5SSxjQUFhLE9BQU92SCxFQUFJb1EsS0FBS0MsVUFBdUIsb0NBQ3hERSxRQUFTTCxFQUFXbVIsV0FBYSxHQUNqQy9RLFVBQVUsS0M3SWhCLFNBQVMrTixHQUFhMWQsRUFBdUJpRixFQUFrQnVaLEVBQWVrRCxHQUM1RSxNQUFNL0IsRUFjUixTQUFxQkEsR0FDbkIsTUFBZ0IsT0FBVEEsRUFBZ0IsR0FBSyxJQUFNQSxFQWZyQmdDLENBQVczaEIsRUFBUTJmLE1BQVEsTUFDbEN2ZCxFQUFPcEMsRUFBUW9DLE1BQVEsR0FFN0IsTUFBTyxDQUNMMkQsT0FBUSxPQUNSOUIsSUFBSyxnQkFBZ0IwYiw4QkFIQXBVLE9BQU8xSyxLQUFLdUIsRUFBTzZDLEVBQVUsU0FBU3RELFNBQVMsVUFBVWMsUUFBUSxNQUFPLEtBQUtBLFFBQVEsTUFBTyxPQUlqSG9iLFFBQVMsQ0FDUEUsY0FBZSxXQUFXUyxJQUMxQixlQUFnQjZCLFdBQUtDLE9BQU9yYixJQUFhLDRCQUUzQ3daLEtBQU1pRCxHQVFWLFNBQVNFLEdBQVVDLEdBQ2pCLE1BQU1DLEVBQVlELEVBQWFDLFVBQ3pCNUMsRUFBWTJDLEVBQWEzQyxVQUN6QjZDLEVBQU0sSUFBSUMsV0FBTUMsS0FBSzFmLE9BQU8yZixJQUFJSixFQUFXNUMsR0FDM0NsZixFQUFVLENBQ2QwSCxNQUFPbWEsRUFBYXpDLFFBR3RCLE9BRGtCLElBQUk0QyxXQUFNRyxHQUFHQyxVQUFVcGlCLEdBQ3hCcWlCLFlBQVlOLEdBRy9CLE1BQU0zaUIsR0FBUzJGLE1BQU8xRixJQUNwQixNQUFNd2lCLEVBQWV4aUIsRUFBSW1RLFVBQXdCLGdCQUNqRCxJQUFLcVMsRUFDSCxNQUFNLElBQUlwSixNQUFNLDJCQUVsQixJQUNFLE1BQU02RixFQUFVamYsRUFBSXFhLE9BQ3BCLElBQUssTUFBTTdQLEtBQU95VSxFQUNoQixHQUFJelUsRUFBSTVFLFVBQVk0RSxFQUFJM0UsT0FBUSxDQUM5QixNQUFNa1ksRUFBY3ZULEVBQUl1VCxhQUFlN1IsT0FBTzFLLEtBQUtnSixFQUFJM0UsUUFBUXZELFNBQVMsVUFDbEUzQixFQUFVMGQsR0FBWW1FLEVBQWNoWSxFQUFJNUUsU0FBVTJjLEdBQVNDLEdBQWV6RSxHQUMxRXZYLFFBQVl4RyxFQUFJeUcsUUFBUTlGLEdBQ3hCeWUsRUFBT3hWLEtBQUtDLE1BQU1yRCxHQUN4QixLQUFJNFksTUFBQUEsU0FBQUEsRUFBTWpiLEtBWVIsTUFMQW5FLEVBQUlzYixLQUFLN0QsR0FBYytILGFBQWMsQ0FDbkNDLE1BQU96ZixFQUFJb1EsS0FBS0MsVUFBdUIsaUJBQ3ZDK08sS0FBTUEsRUFBS3ZILE1BRWI3WCxFQUFJZSxJQUFJQyxNQUFNLGNBQWVvZSxHQUN2QixJQUFJaEcsTUFBTSxpQkFaSCxRQUNONU8sRUFBSXVULG1CQUNKdlQsRUFBSTNFLE9BQ1gsTUFBTW9kLEVBQVVULEVBQWE1ZCxJQUN2QnNlLEVBQWFWLEVBQWE3aEIsU0FBVyxHQUMzQzZKLEVBQUlzVCxPQUFTLEdBQUdtRixLQUFXN0QsRUFBS2piLE1BQWdCK2UsS0FXdEQsT0FBT2xqQixFQUNQLE1BQU8rVSxHQUNQLEdBQW9CLGtCQUFoQkEsRUFBSXhOLFNBRUZ3TixFQUFJb08sU0FBVSxDQUNoQixNQUFNbmlCLEVBQVErVCxFQUFJb08sU0FBUy9ELEtBQzNCcGYsRUFBSXNiLEtBQUs3RCxHQUFjK0gsYUFBYyxDQUNuQ0MsTUFBT3pmLEVBQUlvUSxLQUFLQyxVQUF1QixpQkFDdkMrTyxLQUFNcGUsRUFBTUEsUUFJbEIsTUFBTStULElBSUo1VCxHQUFVbkIsSUFDZCxNQUFNa1EsRUFBYWxRLEVBQUltUSxVQUF3QixpQkFBbUIsR0E0RGxFLE1BM0RnQyxDQUM5QixDQUNFdkksS0FBTSxZQUNOdEMsS0FBTSxRQUNGakYsWUFBVyxPQUFPTCxFQUFJb1EsS0FBS0MsVUFBdUIsMkJBQ3RERSxRQUFTTCxFQUFXdVMsV0FBYSxHQUNqQ25TLFVBQVUsR0FFWixDQUNFMUksS0FBTSxZQUNOdEMsS0FBTSxXQUNGakYsWUFBVyxPQUFPTCxFQUFJb1EsS0FBS0MsVUFBdUIsMkJBQ3RERSxRQUFTTCxFQUFXMlAsV0FBYSxHQUNqQ3ZQLFVBQVUsR0FFWixDQUNFMUksS0FBTSxTQUNOdEMsS0FBTSxRQUNGakYsWUFBVyxPQUFPTCxFQUFJb1EsS0FBS0MsVUFBdUIsd0JBQ3RERSxRQUFTTCxFQUFXNlAsUUFBVSxHQUM5QnpQLFVBQVUsR0FFWixDQUNFMUksS0FBTSxNQUNOdEMsS0FBTSxRQUNGb2EsYUFBWSxPQUFPMWYsRUFBSW9RLEtBQUtDLFVBQXVCLHFCQUNuRGhRLFlBQVcsT0FBT0wsRUFBSW9RLEtBQUtDLFVBQXVCLHFCQUNsRDlJLGNBQWEsT0FBT3ZILEVBQUlvUSxLQUFLQyxVQUF1Qiw2QkFDeERFLFFBQVNMLEVBQVd0TCxLQUFPLEdBQzNCMEwsVUFBVSxHQUVaLENBQ0UxSSxLQUFNLE9BQ050QyxLQUFNLFFBQ0ZvYSxhQUFZLE9BQU8xZixFQUFJb1EsS0FBS0MsVUFBdUIsc0JBQ25EaFEsWUFBVyxPQUFPTCxFQUFJb1EsS0FBS0MsVUFBdUIsc0JBQ2xEOUksY0FBYSxPQUFPdkgsRUFBSW9RLEtBQUtDLFVBQXVCLDhCQUN4REUsUUFBU0wsRUFBV29RLE1BQVEsR0FDNUJoUSxVQUFVLEdBRVosQ0FDRTFJLEtBQU0sVUFDTnRDLEtBQU0sUUFDRm9hLGFBQVksT0FBTzFmLEVBQUlvUSxLQUFLQyxVQUF1Qix5QkFDbkRoUSxZQUFXLE9BQU9MLEVBQUlvUSxLQUFLQyxVQUF1Qix5QkFDbEQ5SSxjQUFhLE9BQU92SCxFQUFJb1EsS0FBS0MsVUFBdUIsaUNBQ3hERSxRQUFTTCxFQUFXdlAsU0FBVyxHQUMvQjJQLFVBQVUsR0FFWixDQUNFMUksS0FBTSxPQUNOdEMsS0FBTSxRQUNGb2EsYUFBWSxPQUFPMWYsRUFBSW9RLEtBQUtDLFVBQXVCLHNCQUNuRGhRLFlBQVcsT0FBT0wsRUFBSW9RLEtBQUtDLFVBQXVCLHNCQUNsRDlJLGNBQWEsT0FBT3ZILEVBQUlvUSxLQUFLQyxVQUF1Qiw4QkFDeERFLFFBQVNMLEVBQVduTixNQUFRLEdBQzVCdU4sVUFBVSxLQ3ZJaEIsTUFFTStOLEdBQWMzWSxNQUFPMUYsRUFBYVcsRUFBdUJpRixFQUFrQnljLEtBQy9FLE1BQU1lLEVBQVd6aUIsRUFBUXlpQixVQUFZLEdBQy9CQyxFQUFXMWlCLEVBQVEwaUIsVUFBWSxHQUMvQkMsRUFMa0IsQ0FBQ0EsR0FBZ0NBLEVBQWNBLEVBQVloYyxXQUFXLFVBQVlnYyxFQUFjLFVBQVVBLElBQWdCLEdBSzlIQyxDQUFrQjVpQixFQUFRMmlCLGFBQWUsSUFDdkRFLEVBQVE3aUIsRUFBUTZpQixPQUFTLEdBQy9CLElBQUlDLEVBQ0osR0FBSUosR0FBWUMsRUFDZEcsRUFBZ0JILE1BQ1gsQ0FBQSxJQUFJRixFQUdULE1BQU0sSUFBSWhLLE1BQU0sdUNBRmhCcUssRUFBZ0IsYUFBYUwsSUFJL0IsTUFBTU0sRUFBaUMsQ0FDckNoZCxPQUFRLE9BQ1I5QixJQUFLLGdDQUNMNFosUUFBUyxDQUNQRSxjQUFlK0UsRUFDZixlQUFnQixzQkFDaEIxQyxLQUFNLGdCQUNOLGFBQWMsV0FFaEJwQyxTQUFVLENBQ1J4VCxNQUFPa1gsRUFDUC9jLEtBQU0sU0FDTnNDLEtBQU1oQyxFQUNOeEYsWUFBYSwwQkFHakIsR0FBSWlqQixHQUFZQyxHQUFlRSxFQUFPLENBQ3BDLElBQ0loZCxFQURBbWQsRUFBWSxFQUVaQyxFQUFZLEdBQ2hCLEVBQUcsQ0FDRCxNQUFNQyxFQUFzQyxDQUMxQ25kLE9BQVEsTUFDUjlCLElBQUssbUNBQW1DeWUsWUFBbUJNLElBQzNEbkYsUUFBUyxDQUNQRSxjQUFlK0UsR0FFakIxQixNQUFNLEVBQ05wYix5QkFBeUIsRUFDekJtZCxRQUFTLEtBTVgsR0FKSW5qQixFQUFRRixRQUNWb2pCLEVBQW9CcGpCLE1BQVFFLEVBQVFGLE9BRXRDK0YsUUFBWXhHLEVBQUl5RyxRQUFRb2QsR0FDQyxNQUFuQnJkLEVBQUkrYSxhQUFzQi9hLEVBQUk0WSxLQUFLcFosUUFDdkMsTUFBTSxJQUFJb1QsTUFBTSxrQ0FFbEIsTUFBTTJLLEVBQVl2ZCxFQUFJNFksS0FBS3JZLEtBQzNCLElBQUssTUFBTXJELEtBQVFxZ0IsRUFDakIsR0FBSXJnQixFQUFLK2IsUUFBVStELEVBQU8sQ0FDeEJJLEVBQVlsZ0IsRUFBS3dTLEdBQ2pCLE1BR0p5TixVQUNPbmQsRUFBSTRZLEtBQUtyWSxLQUFLMUYsT0FBUyxHQUM1QnVpQixHQUFhRixFQUFlL0UsV0FDOUIrRSxFQUFlL0UsU0FBUzZFLE1BQVFJLEdBTXBDLE9BSElqakIsRUFBUUYsUUFDVmlqQixFQUFlampCLE1BQVFFLEVBQVFGLE9BRTFCaWpCLEdBR0gzakIsR0FBUzJGLE1BQU8xRixVQUNwQixNQUFNZ2tCLEVBQWVoa0IsRUFBSW1RLFVBQXdCLGdCQUNqRCxJQUFLNlQsRUFDSCxNQUFNLElBQUk1SyxNQUFNLDJCQUVsQixJQUNFLE1BQU02RixFQUFVamYsRUFBSXFhLE9BQ3BCLElBQUssTUFBTTdQLEtBQU95VSxFQUNoQixHQUFJelUsRUFBSTVFLFVBQVk0RSxFQUFJM0UsT0FBUSxDQUM5QixNQUFNa1ksRUFBY3ZULEVBQUl1VCxhQUFlN1IsT0FBTzFLLEtBQUtnSixFQUFJM0UsUUFBUXZELFNBQVMsVUFDbEUzQixRQUFnQjBkLEdBQVlyZSxFQUFLZ2tCLEVBQWN4WixFQUFJNUUsU0FBVW1ZLEdBQzdEdlgsUUFBb0J4RyxFQUFJeUcsUUFBUTlGLEdBQ2hDeWUsRUFBc0IsaUJBQVI1WSxFQUFtQm9ELEtBQUtDLE1BQU1yRCxHQUFPQSxFQUN6RCxJQUFJNFksRUFBS3BaLFFBTVAsTUFBTSxJQUFJb1QsTUFBTSx5Q0FMVDVPLEVBQUl1VCxtQkFDSnZULEVBQUkzRSxPQUNYMkUsRUFBSXNULE9BQVNzQixFQUFLclksS0FBS2tkLEtBQ3ZCelosRUFBSThVLEtBQU9GLEVBQUtyWSxLQUFLbWQsV0FNM0IsT0FBT2xrQixFQUNQLE1BQU8rVSxHQU9QLE1BTkEvVSxFQUFJc2IsS0FBSzdELEdBQWMrSCxhQUFjLENBQ25DQyxNQUFPemYsRUFBSW9RLEtBQUtDLFVBQXVCLGlCQUN2QytPLEtBQU1wZixFQUFJb1EsS0FBS0MsVUFBdUIsOEJBQ3RDeEYsS0FBTSxnREFHRmtLLE1BQUFBLFNBQUFBLEVBQUtvTywrQkFBVXBjLE9BQVFnTyxJQUkzQjVULEdBQVVuQixJQUNkLE1BQU1rUSxFQUFhbFEsRUFBSW1RLFVBQXdCLGlCQUFtQixHQWdEbEUsTUEvQ2dDLENBQzlCLENBQ0V2SSxLQUFNLFdBQ050QyxLQUFNLFFBQ0ZvYSxhQUFZLE9BQU8xZixFQUFJb1EsS0FBS0MsVUFBdUIsMEJBQ25EaFEsWUFBVyxPQUFPTCxFQUFJb1EsS0FBS0MsVUFBdUIsMEJBQ2xEOUksY0FBYSxPQUFPdkgsRUFBSW9RLEtBQUtDLFVBQXVCLGtDQUN4REUsUUFBU0wsRUFBV2tULFVBQVksR0FDaEM5UyxVQUFVLEdBRVosQ0FDRTFJLEtBQU0sV0FDTnRDLEtBQU0sUUFDRm9hLGFBQVksT0FBTzFmLEVBQUlvUSxLQUFLQyxVQUF1QiwwQkFDbkRoUSxZQUFXLE9BQU9MLEVBQUlvUSxLQUFLQyxVQUF1QiwwQkFDbEQ5SSxjQUFhLE9BQU92SCxFQUFJb1EsS0FBS0MsVUFBdUIsa0NBQ3hERSxRQUFTTCxFQUFXbVQsVUFBWSxHQUNoQy9TLFVBQVUsR0FFWixDQUNFMUksS0FBTSxjQUNOdEMsS0FBTSxRQUNGb2EsYUFBWSxPQUFPMWYsRUFBSW9RLEtBQUtDLFVBQXVCLDhCQUNuRGhRLFlBQVcsT0FBT0wsRUFBSW9RLEtBQUtDLFVBQXVCLDhCQUNsRDlJLGNBQWEsT0FBT3ZILEVBQUlvUSxLQUFLQyxVQUF1QixzQ0FDeERFLFFBQVNMLEVBQVdvVCxhQUFlLEdBQ25DaFQsVUFBVSxHQUVaLENBQ0UxSSxLQUFNLFFBQ050QyxLQUFNLFFBQ0ZvYSxhQUFZLE9BQU8xZixFQUFJb1EsS0FBS0MsVUFBdUIsdUJBQ25EaFEsWUFBVyxPQUFPTCxFQUFJb1EsS0FBS0MsVUFBdUIsdUJBQ2xEOUksY0FBYSxPQUFPdkgsRUFBSW9RLEtBQUtDLFVBQXVCLCtCQUN4REUsUUFBU0wsRUFBV3NULE9BQVMsR0FDN0JsVCxVQUFVLEdBRVosQ0FDRTFJLEtBQU0sUUFDTnRDLEtBQU0sUUFDRm9hLGFBQVksT0FBTzFmLEVBQUlvUSxLQUFLQyxVQUF1Qix1QkFDbkRoUSxZQUFXLE9BQU9MLEVBQUlvUSxLQUFLQyxVQUF1Qix1QkFDbEQ5SSxjQUFhLE9BQU92SCxFQUFJb1EsS0FBS0MsVUFBdUIsK0JBQ3hERSxRQUFTTCxFQUFXelAsT0FBUyxHQUM3QjZQLFVBQVUsS0N0SmhCLE1BQU1xUCxHQUFvQixDQUFDaGYsRUFBd0JpRixLQUNqRCxNQUFNdWUsR0FBTyxJQUFJL2hCLE1BQU9naUIsY0FHbEJDLEVBQWEsVUFGRnJELFdBQUtDLE9BQU9yYixJQUFhLCtCQUVBdWUsT0FBVXhqQixFQUFRb2YsVUFBVXBmLEVBQVFvQyxPQUFPNkMsSUFFL0VvYSxFQUFZbmQsVUFBT3VkLFdBQVcsT0FBUXpmLEVBQVEyakIsaUJBQWlCcGpCLE9BQU9takIsR0FBWW5oQixPQUFPLFVBQy9GLE1BQU8sT0FBT3ZDLEVBQVE0akIsZUFBZXZFLEtBR2pDM0IsR0FBYyxDQUFDMWQsRUFBd0JpRixFQUFrQm9hLEVBQW1CN1UsS0FDekUsQ0FDTHpFLE9BQVEsTUFDUjlCLElBQUssV0FBV2pFLEVBQVFvZixVQUFVcGYsRUFBUTJmLHFCQUFxQnJiLFVBQVV0RSxFQUFRb0MsUUFBUStkLG1CQUFtQmxiLEtBQVl4QyxRQUFRLE9BQVEsS0FDeElvYixRQUFTLENBQ1B1QyxLQUFNLEdBQUdwZ0IsRUFBUW9mLFVBQVVwZixFQUFRMmYsb0JBQ25DNUIsY0FBZXNCLEVBQ2Y1ZCxNQUFNLElBQUlBLE1BQU9naUIsY0FDakIsZUFBZ0JwRCxXQUFLQyxPQUFPcmIsSUFFOUJ3WixLQUFNalUsRUFDTnhFLHlCQUF5QixJQUl2QjVHLEdBQVMyRixNQUFPMUYsVUFDcEIsTUFBTXdrQixFQUFnQnhrQixFQUFJbVEsVUFBeUIsaUJBQ25ELElBQUtxVSxFQUNILE1BQU0sSUFBSXBMLE1BQU0sZ0NBRWxCb0wsRUFBY3poQixLQUFPeWhCLEVBQWN6aEIsS0FBS0ssUUFBUSxPQUFRLElBQUlBLFFBQVEsT0FBUSxJQUFNLElBQ3ZELE1BQXZCb2hCLEVBQWN6aEIsT0FDaEJ5aEIsRUFBY3poQixLQUFPLElBRXZCLElBQ0UsTUFBTWtjLEVBQVVqZixFQUFJcWEsT0FDZGdILEVBQVltRCxFQUFjbkQsVUFDMUJ0ZSxZQUFPeWhCLEVBQWN6aEIsb0JBQVEsR0FDbkMsSUFBSyxNQUFNeUgsS0FBT3lVLEVBQ2hCLEdBQUl6VSxFQUFJNUUsVUFBWTRFLEVBQUkzRSxPQUFRLENBQzlCLE1BQU1tYSxFQUFZTCxHQUFrQjZFLEVBQWVoYSxFQUFJNUUsVUFDdkQsSUFBSXVGLEVBQVFYLEVBQUkzRSxRQUNYc0YsR0FBU1gsRUFBSXVULGNBQ2hCNVMsRUFBUWUsT0FBTzFLLEtBQUtnSixFQUFJdVQsWUFBYSxXQUV2QyxNQUFNcGQsRUFBVTBkLEdBQVltRyxFQUFlaGEsRUFBSTVFLFNBQVVvYSxFQUFXN1UsR0FFcEUsR0FBd0IsYUFETG5MLEVBQUl5RyxRQUFROUYsSUFDdEI0Z0IsV0FVUCxNQUFNLElBQUluSSxNQUFNLGlCQVZXLFFBQ3BCNU8sRUFBSXVULG1CQUNKdlQsRUFBSTNFLE9BQ1gsTUFBTTJiLEVBQVlnRCxFQUFjN2pCLFNBQVcsR0FFekM2SixFQUFJc1QsT0FERnVELEVBQ1csR0FBR0EsS0FBYVAsbUJBQW1CL2QsS0FBUStkLG1CQUFtQnRXLEVBQUk1RSxZQUFZNGIsSUFBWXBlLFFBQVEsT0FBUSxLQUUxRyxXQUFXb2hCLEVBQWN6RSxVQUFVeUUsRUFBY2xFLHFCQUFxQlEsbUJBQW1CL2QsS0FBUStkLG1CQUFtQnRXLEVBQUk1RSxZQUFZNGIsSUFBWXBlLFFBQVEsT0FBUSxNQU9yTCxPQUFPcEQsRUFDUCxNQUFPK1UsR0FLUCxNQUpBL1UsRUFBSXNiLEtBQUs3RCxHQUFjK0gsYUFBYyxDQUNuQ0MsTUFBT3pmLEVBQUlvUSxLQUFLQyxVQUF1QixpQkFDdkMrTyxLQUFNcGYsRUFBSW9RLEtBQUtDLFVBQXVCLG9CQUVsQzBFLElBSUo1VCxHQUFVbkIsSUFDZCxNQUFNa1EsRUFBYWxRLEVBQUltUSxVQUF5QixrQkFBb0IsR0E0RHBFLE1BM0RnQyxDQUM5QixDQUNFdkksS0FBTSxjQUNOdEMsS0FBTSxRQUNGakYsWUFBVyxPQUFPTCxFQUFJb1EsS0FBS0MsVUFBdUIsZ0NBQ3RERSxRQUFTTCxFQUFXcVUsYUFBZSxHQUNuQ2pVLFVBQVUsR0FFWixDQUNFMUksS0FBTSxrQkFDTnRDLEtBQU0sV0FDRmpGLFlBQVcsT0FBT0wsRUFBSW9RLEtBQUtDLFVBQXVCLG9DQUN0REUsUUFBU0wsRUFBV29VLGlCQUFtQixHQUN2Q2hVLFVBQVUsR0FFWixDQUNFMUksS0FBTSxTQUNOdEMsS0FBTSxRQUNGakYsWUFBVyxPQUFPTCxFQUFJb1EsS0FBS0MsVUFBdUIsMkJBQ3RERSxRQUFTTCxFQUFXNlAsUUFBVSxHQUM5QnpQLFVBQVUsR0FFWixDQUNFMUksS0FBTSxPQUNOdEMsS0FBTSxRQUNGb2EsYUFBWSxPQUFPMWYsRUFBSW9RLEtBQUtDLFVBQXVCLHlCQUNuRGhRLFlBQVcsT0FBT0wsRUFBSW9RLEtBQUtDLFVBQXVCLHlCQUN0REUsUUFBU0wsRUFBV29RLE1BQVEsR0FDeEIvWSxjQUFhLE9BQU92SCxFQUFJb1EsS0FBS0MsVUFBdUIsaUNBQ3hEQyxVQUFVLEdBRVosQ0FDRTFJLEtBQU0sT0FDTnRDLEtBQU0sUUFDRm9hLGFBQVksT0FBTzFmLEVBQUlvUSxLQUFLQyxVQUF1Qix5QkFDbkRoUSxZQUFXLE9BQU9MLEVBQUlvUSxLQUFLQyxVQUF1Qix5QkFDbEQ5SSxjQUFhLE9BQU92SCxFQUFJb1EsS0FBS0MsVUFBdUIsaUNBQ3hERSxRQUFTTCxFQUFXbk4sTUFBUSxHQUM1QnVOLFVBQVUsR0FFWixDQUNFMUksS0FBTSxZQUNOdEMsS0FBTSxRQUNGb2EsYUFBWSxPQUFPMWYsRUFBSW9RLEtBQUtDLFVBQXVCLDhCQUNuRGhRLFlBQVcsT0FBT0wsRUFBSW9RLEtBQUtDLFVBQXVCLDhCQUNsRDlJLGNBQWEsT0FBT3ZILEVBQUlvUSxLQUFLQyxVQUF1QixzQ0FDeERFLFFBQVNMLEVBQVdtUixXQUFhLEdBQ2pDL1EsVUFBVSxHQUVaLENBQ0UxSSxLQUFNLFVBQ050QyxLQUFNLFFBQ0ZvYSxhQUFZLE9BQU8xZixFQUFJb1EsS0FBS0MsVUFBdUIsNEJBQ25EaFEsWUFBVyxPQUFPTCxFQUFJb1EsS0FBS0MsVUFBdUIsNEJBQ2xEOUksY0FBYSxPQUFPdkgsRUFBSW9RLEtBQUtDLFVBQXVCLG9DQUN4REUsUUFBU0wsRUFBV3ZQLFNBQVcsR0FDL0IyUCxVQUFVLEtDL0hoQixNQUFNcVAsR0FBb0IsQ0FBQ2hmLEVBQXVCaUYsS0FDaEQsTUFBTTdDLEVBQU9wQyxFQUFRb0MsTUFBUSxHQUN2QjBoQixFQUFXOWpCLEVBQVE4akIsU0FDbkJDLEVBQVcvakIsRUFBUStqQixTQUNuQkMsRUFBY0MsV0FBSUYsR0FDbEJQLEdBQU8sSUFBSS9oQixNQUFPZ2lCLGNBRWxCdkYsRUFBUSxPQURGLElBQUlsZSxFQUFRb2YsVUFBVTlhLFVBQVVsQyxLQUFRK2QsbUJBQW1CbGIsS0FBWXhDLFFBQVEsT0FBUSxRQUN2RStnQixJQUU1QixNQUFPLFNBQVNNLEtBREg1aEIsVUFBT3VkLFdBQVcsT0FBUXVFLEdBQWF6akIsT0FBTzJkLEdBQU8zYixPQUFPLGFBSXJFbWIsR0FBYyxDQUFDMWQsRUFBdUJpRixFQUFrQm9hLEVBQW1CN1UsS0FDL0UsTUFBTTRVLEVBQVNwZixFQUFRb2YsT0FDakJoZCxFQUFPcEMsRUFBUW9DLE1BQVEsR0FDN0IsTUFBTyxDQUNMMkQsT0FBUSxNQUNSOUIsSUFBSyw0QkFBNEJtYixLQUFVOWEsVUFBVWxDLEtBQVErZCxtQkFBbUJsYixLQUFZeEMsUUFBUSxPQUFRLEtBQzVHb2IsUUFBUyxDQUNQRSxjQUFlc0IsRUFDZjVkLE1BQU0sSUFBSUEsTUFBT2dpQixjQUNqQixlQUFnQnBELFdBQUtDLE9BQU9yYixJQUFhLDRCQUUzQ3daLEtBQU1qVSxFQUNOeEUseUJBQXlCLElBSXZCa2UsR0FBb0IsQ0FBQ0MsRUFBd0JDLEVBQXlDcGtCLEVBQXVCaUYsS0FDakgsTUFBTW9mLEVBQU0sSUFBSS9mLFVBQVV0RSxFQUFRb0MsTUFBUSxNQUFNK2QsbUJBQW1CbGIsS0FBWXhDLFFBQVEsT0FBUSxLQUFLQSxRQUFRLFFBQVMsS0FDL0dDLEVBQU0xQixLQUFLcU4sT0FBTSxJQUFJNU0sTUFBT2thLFVBQVksS0FDeEMySSxFQUFTRixFQUFhMWhCLEVBQU02aEIsU0FBU0gsRUFBV3ppQixXQUFZLElBQU1lLEVBQU0sS0FHOUUsTUFBTyxRQURLLEdBREN1aEIsV0FBSSxHQUFHRSxLQUFrQkcsS0FBVUQsS0FDNUJHLFVBQVUsR0FBSSxNQUFNRixPQUlwQ2xsQixHQUFTMkYsTUFBTzFGLElBQ3BCLE1BQU1vbEIsRUFBZXBsQixFQUFJbVEsVUFBd0IsZ0JBQ2pELElBQUtpVixFQUNILE1BQU0sSUFBSWhNLE1BQU0sMkJBRWxCLElBQ0UsTUFBTTZGLEVBQVVqZixFQUFJcWEsT0FDZHRYLEVBQU9xaUIsRUFBYXJpQixNQUFRLEdBQ2xDLElBQUssTUFBTXlILEtBQU95VSxFQUNoQixHQUFJelUsRUFBSTVFLFVBQVk0RSxFQUFJM0UsT0FBUSxDQUM5QixJQUFJc0YsRUFBUVgsRUFBSTNFLFFBQ1hzRixHQUFTWCxFQUFJdVQsY0FDaEI1UyxFQUFRZSxPQUFPMUssS0FBS2dKLEVBQUl1VCxZQUFhLFdBRXZDLE1BQU1pQyxFQUFZTCxHQUFrQnlGLEVBQWM1YSxFQUFJNUUsVUFDaERqRixFQUFVMGQsR0FBWStHLEVBQWM1YSxFQUFJNUUsU0FBVW9hLEVBQVc3VSxHQUM3RGthLEVBQVNELEVBQWF6a0IsU0FBVyxHQUV2QyxHQUF3QixhQURMWCxFQUFJeUcsUUFBUTlGLElBQ3RCNGdCLFdBU1AsTUFBTSxJQUFJbkksTUFBTSxpQkFMaEIsVUFITzVPLEVBQUl1VCxtQkFDSnZULEVBQUkzRSxPQUNYMkUsRUFBSXNULE9BQVMsR0FBR3NILEVBQWF4Z0IsT0FBT2tjLG1CQUFtQi9kLEtBQVErZCxtQkFBbUJ0VyxFQUFJNUUsWUFBWXlmLElBQVNqaUIsUUFBUSxPQUFRLEtBQ3ZIZ2lCLEVBQWFOLGVBQWdCLENBQy9CLE1BQU1RLEVBQU1ULEdBQWtCTyxFQUFhTixlQUFnQk0sRUFBYUwsV0FBWUssRUFBYzVhLEVBQUk1RSxVQUN0RzRFLEVBQUlzVCxPQUFTdFQsRUFBSXNULE9BQU9uYSxTQUFTLEtBQU8sR0FBRzZHLEVBQUlzVCxVQUFVd0gsSUFBUSxHQUFHOWEsRUFBSXNULFVBQVV3SCxLQU8xRixPQUFPdGxCLEVBQ1AsTUFBTytVLEdBQ1AsR0FBb0Isa0JBQWhCQSxFQUFJeE4sUUFDTnZILEVBQUlzYixLQUFLN0QsR0FBYytILGFBQWMsQ0FDbkNDLE1BQU96ZixFQUFJb1EsS0FBS0MsVUFBdUIsaUJBQ3ZDK08sS0FBTXBmLEVBQUlvUSxLQUFLQyxVQUF1Qix3QkFFbkMsQ0FDTCxNQUFNK08sRUFBTzFWLEdBQTRCcUwsRUFBSS9ULE9BQzdDaEIsRUFBSXNiLEtBQUs3RCxHQUFjK0gsYUFBYyxDQUNuQ0MsTUFBT3pmLEVBQUlvUSxLQUFLQyxVQUF1QixpQkFDdkMrTyxLQUFNcGYsRUFBSW9RLEtBQUtDLFVBQXVCLHVCQUF3QixDQUM1RGdQLEtBQXNCLGlCQUFURCxFQUFvQkEsRUFBS0MsS0FBT0QsSUFFL0N2VSxLQUFNLHFDQUdWLE1BQU1rSyxJQUlKNVQsR0FBVW5CLElBQ2QsTUFBTWtRLEVBQWFsUSxFQUFJbVEsVUFBd0IsaUJBQW1CLEdBMEVsRSxNQXpFZ0MsQ0FDOUIsQ0FDRXZJLEtBQU0sU0FDTnRDLEtBQU0sUUFDRmpGLFlBQVcsT0FBT0wsRUFBSW9RLEtBQUtDLFVBQXVCLHdCQUN0REUsUUFBU0wsRUFBVzZQLFFBQVUsR0FDOUJ6UCxVQUFVLEdBRVosQ0FDRTFJLEtBQU0sV0FDTnRDLEtBQU0sUUFDRmpGLFlBQVcsT0FBT0wsRUFBSW9RLEtBQUtDLFVBQXVCLDBCQUNsRHFQLGFBQ0YsT0FBTzFmLEVBQUlvUSxLQUFLQyxVQUF1QiwwQkFFckM5SSxjQUFhLE9BQU92SCxFQUFJb1EsS0FBS0MsVUFBdUIsa0NBQ3hERSxRQUFTTCxFQUFXdVUsVUFBWSxHQUNoQ25VLFVBQVUsR0FFWixDQUNFMUksS0FBTSxXQUNOdEMsS0FBTSxXQUNGb2EsYUFBWSxPQUFPMWYsRUFBSW9RLEtBQUtDLFVBQXVCLGtDQUNuRGhRLFlBQVcsT0FBT0wsRUFBSW9RLEtBQUtDLFVBQXVCLDBCQUNsRDlJLGNBQWEsT0FBT3ZILEVBQUlvUSxLQUFLQyxVQUF1QixrQ0FDeERFLFFBQVNMLEVBQVd3VSxVQUFZLEdBQ2hDcFUsVUFBVSxHQUVaLENBQ0UxSSxLQUFNLE1BQ050QyxLQUFNLFFBQ0ZqRixZQUFXLE9BQU9MLEVBQUlvUSxLQUFLQyxVQUF1QixxQkFDbEQ5SSxjQUFhLE9BQU92SCxFQUFJb1EsS0FBS0MsVUFBdUIsNkJBQ3hERSxRQUFTTCxFQUFXdEwsS0FBTyxHQUMzQjBMLFVBQVUsR0FFWixDQUNFMUksS0FBTSxVQUNOdEMsS0FBTSxRQUNGb2EsYUFBWSxPQUFPMWYsRUFBSW9RLEtBQUtDLFVBQXVCLHlCQUNuRGhRLFlBQVcsT0FBT0wsRUFBSW9RLEtBQUtDLFVBQXVCLHlCQUNsRDlJLGNBQWEsT0FBT3ZILEVBQUlvUSxLQUFLQyxVQUF1QixpQ0FDeERFLFFBQVNMLEVBQVd2UCxTQUFXLEdBQy9CMlAsVUFBVSxHQUVaLENBQ0UxSSxLQUFNLE9BQ050QyxLQUFNLFFBQ0ZvYSxhQUFZLE9BQU8xZixFQUFJb1EsS0FBS0MsVUFBdUIsc0JBQ25EaFEsWUFBVyxPQUFPTCxFQUFJb1EsS0FBS0MsVUFBdUIsc0JBQ2xEOUksY0FBYSxPQUFPdkgsRUFBSW9RLEtBQUtDLFVBQXVCLDhCQUN4REUsUUFBU0wsRUFBV25OLE1BQVEsR0FDNUJ1TixVQUFVLEdBRVosQ0FDRTFJLEtBQU0saUJBQ050QyxLQUFNLFFBQ0ZvYSxhQUFZLE9BQU8xZixFQUFJb1EsS0FBS0MsVUFBdUIsa0NBQ25EaFEsWUFBVyxPQUFPTCxFQUFJb1EsS0FBS0MsVUFBdUIsa0NBQ2xEOUksY0FBYSxPQUFPdkgsRUFBSW9RLEtBQUtDLFVBQXVCLGtDQUN4REUsUUFBU0wsRUFBVzRVLGdCQUFrQixHQUN0Q3hVLFVBQVUsR0FFWixDQUNFMUksS0FBTSxhQUNOdEMsS0FBTSxRQUNGb2EsYUFBWSxPQUFPMWYsRUFBSW9RLEtBQUtDLFVBQXVCLDZCQUNuRGhRLFlBQVcsT0FBT0wsRUFBSW9RLEtBQUtDLFVBQXVCLDZCQUNsRDlJLGNBQWEsT0FBT3ZILEVBQUlvUSxLQUFLQyxVQUF1Qiw2QkFDeERFLFFBQVNMLEVBQVc2VSxZQUFjLEdBQ2xDelUsVUFBVSxLQ25LaEIsTUFBTStOLEdBQWMzWSxNQUFPMUYsRUFBYVcsRUFBNkJpRixFQUFrQnVGLEtBQ3JGLE1BQU1vYSxFQUFRLElBQUk1a0IsRUFBUW9DLEtBQUtLLFFBQVEsUUFBUyxJQUFJbUIsTUFBTSxRQUFTeEIsVUFBS3VCLFFBQVFzQixHQUFVckIsTUFBTSxNQUNoRyxJQUFJaWhCLEVBQWMsR0FDbEIsSUFBSyxNQUFNQyxLQUFLRixFQUNkLEdBQUlFLEVBQUcsQ0FDTEQsR0FBZSxJQUFJQyxJQUNuQixNQUFNQyxFQUFhLENBQ2pCaGYsT0FBUSxRQUNSOUIsSUFBSyxHQUFHakUsRUFBUWdsQixPQUFPMWdCLFVBQVV1Z0IsS0FBZXBpQixRQUFRLE9BQVEsS0FDaEVvYixRQUFTLENBQ1BFLGNBQWUsU0FBU3hTLE9BQU8xSyxLQUFLLEdBQUdiLEVBQVEwaUIsWUFBWTFpQixFQUFRK2pCLFlBQVlwaUIsU0FBUyxjQUc1RixVQUNRdEMsRUFBSXlHLFFBQVFpZixHQUNsQixNQUFPM1EsR0FDUHZNLFFBQVF6SCxJQUFJZ1UsSUFJbEIsTUFBTyxDQUNMck8sT0FBUSxNQUNSOUIsSUFBSyxHQUFHakUsRUFBUWdsQixRQUF5QixNQUFqQmhsQixFQUFRb0MsS0FBZSxHQUFLa0MsVUFBVXRFLEVBQVFvQyxRQUFRK2QsbUJBQW1CbGIsS0FBWXhDLFFBQVEsT0FBUSxLQUM3SG9iLFFBQVMsQ0FDUEUsY0FBZSxTQUFTeFMsT0FBTzFLLEtBQUssR0FBR2IsRUFBUTBpQixZQUFZMWlCLEVBQVErakIsWUFBWXBpQixTQUFTLFlBQ3hGLGVBQWdCMGUsV0FBS0MsT0FBT3JiLElBQWEsMkJBQ3pDLGlCQUFrQnVGLEVBQU05SixRQUUxQitkLEtBQU1qVSxFQUNOeEUseUJBQXlCLElBSXZCNUcsR0FBUzJGLE1BQU8xRixJQUNwQixNQUFNNGxCLEVBQXFCNWxCLEVBQUltUSxVQUE4QixzQkFDN0QsSUFBS3lWLEVBQ0gsTUFBTSxJQUFJeE0sTUFBTSxpQ0FFbEJ3TSxFQUFtQkQsS0FBT0MsRUFBbUJELEtBQUt2aUIsUUFBUSxxQkFBc0IsSUFDaEZ3aUIsRUFBbUJELE1BQVFDLEVBQW1CQyxXQUFhLFdBQWEsV0FBYUQsRUFBbUJELEtBQ3hHQyxFQUFtQjdpQixNQUFRNmlCLEVBQW1CN2lCLE1BQVEsSUFBSUssUUFBUSxhQUFjLElBQU0sSUFDdEYsTUFBTTBpQixHQUFXRixFQUFtQkUsU0FBVyxJQUFJMWlCLFFBQVEsYUFBYyxJQUFNLElBQy9FLElBQ0UsTUFBTTZiLEVBQVVqZixFQUFJcWEsT0FDZGdILEVBQVl1RSxFQUFtQnZFLFVBQy9CYSxFQUFhMEQsRUFBbUI3aUIsS0FDdEMsSUFBSyxNQUFNeUgsS0FBT3lVLEVBQ2hCLEdBQUl6VSxFQUFJNUUsVUFBWTRFLEVBQUkzRSxPQUFRLENBQzlCLElBQUlzRixFQUFRWCxFQUFJM0UsUUFDWHNGLEdBQVNYLEVBQUl1VCxjQUNoQjVTLEVBQVFlLE9BQU8xSyxLQUFLZ0osRUFBSXVULFlBQWEsV0FFdkMsTUFBTXBkLFFBQWdCMGQsR0FBWXJlLEVBQUs0bEIsRUFBb0JwYixFQUFJNUUsU0FBVXVGLEdBQ25FaVUsUUFBYXBmLEVBQUl5RyxRQUFROUYsR0FDL0IsS0FBSXllLEVBQUttQyxZQUFjLEtBQU9uQyxFQUFLbUMsV0FBYSxLQWM5QyxNQUFNLElBQUluSSxNQUFNLGlCQWRtQyxDQUNuRCxNQUFNMk0sRUFBY2hqQixVQUFLakIsS0FBSzlCLEVBQUltWSxRQUFTLFdBQzNDclMsVUFBR3NPLGNBQWNyUixVQUFLdUIsUUFBUXZCLFVBQUtqQixLQUFLaWtCLEVBQWF2YixFQUFJNUUsWUFDekRFLFVBQUd1TyxjQUFjdFIsVUFBS2pCLEtBQUtpa0IsRUFBYXZiLEVBQUk1RSxVQUFXdUYsVUFDaERYLEVBQUl1VCxtQkFDSnZULEVBQUkzRSxPQUNYLE1BQU1vZCxFQUFVNUIsR0FBYXVFLEVBQW1CRCxLQUM1Q0MsRUFBbUJFLFFBQ3JCdGIsRUFBSXNULE9BQVMsR0FBR21GLEtBQXVCLE1BQVo2QyxFQUFrQixHQUFLaEYsbUJBQW1CZ0YsS0FBV2hGLG1CQUFtQnRXLEVBQUk1RSxZQUFZeEMsUUFBUSxPQUFRLEtBRW5Jb0gsRUFBSXNULE9BQVMsR0FBR21GLEtBQTBCLE1BQWZmLEVBQXFCLEdBQUtwQixtQkFBbUJvQixLQUFjcEIsbUJBQW1CdFcsRUFBSTVFLFlBQVl4QyxRQUFRLE9BQVEsS0FFM0lvSCxFQUFJd2IsWUFBYywwQkFBMEJsRixtQkFBbUJ0VyxFQUFJNUUsYUFNekUsT0FBTzVGLEVBQ1AsTUFBTytVLEdBS1AsTUFKQS9VLEVBQUlzYixLQUFLN0QsR0FBYytILGFBQWMsQ0FDbkNDLE1BQU96ZixFQUFJb1EsS0FBS0MsVUFBdUIsaUJBQ3ZDK08sS0FBTXBmLEVBQUlvUSxLQUFLQyxVQUF1QixvQkFFbEMwRSxJQUlKNVQsR0FBVW5CLFVBQ2QsTUFBTWtRLEVBQWFsUSxFQUFJbVEsVUFBOEIsdUJBQXlCLEdBZ0U5RSxNQS9EZ0MsQ0FDOUIsQ0FDRXZJLEtBQU0sT0FDTnRDLEtBQU0sUUFDRmpGLFlBQVcsT0FBT0wsRUFBSW9RLEtBQUtDLFVBQXVCLDRCQUN0REUsUUFBU0wsRUFBV3lWLE1BQVEsR0FDNUJyVixVQUFVLEdBRVosQ0FDRTFJLEtBQU0sYUFDTnRDLEtBQU0sVUFDRmpGLFlBQVcsT0FBT0wsRUFBSW9RLEtBQUtDLFVBQXVCLGtDQUN0REMsVUFBVSxFQUNWQyxrQkFBU0wsRUFBVzJWLDJCQUNoQm5HLGFBQVksT0FBTzFmLEVBQUlvUSxLQUFLQyxVQUF1QixrQ0FDbkQ5SSxjQUFhLE9BQU92SCxFQUFJb1EsS0FBS0MsVUFBdUIsMkNBRTFELENBQ0V6SSxLQUFNLFdBQ050QyxLQUFNLFFBQ0ZqRixZQUFXLE9BQU9MLEVBQUlvUSxLQUFLQyxVQUF1QixnQ0FDdERFLFFBQVNMLEVBQVdtVCxVQUFZLEdBQ2hDL1MsVUFBVSxFQUNOb1AsYUFBWSxPQUFPMWYsRUFBSW9RLEtBQUtDLFVBQXVCLGdDQUNuRDlJLGNBQWEsT0FBT3ZILEVBQUlvUSxLQUFLQyxVQUF1Qix5Q0FFMUQsQ0FDRXpJLEtBQU0sV0FDTnRDLEtBQU0sV0FDRmpGLFlBQVcsT0FBT0wsRUFBSW9RLEtBQUtDLFVBQXVCLGdDQUN0REUsUUFBU0wsRUFBV3dVLFVBQVksR0FDaENwVSxVQUFVLEVBQ05vUCxhQUFZLE9BQU8xZixFQUFJb1EsS0FBS0MsVUFBdUIsZ0NBQ25EOUksY0FBYSxPQUFPdkgsRUFBSW9RLEtBQUtDLFVBQXVCLHlDQUUxRCxDQUNFekksS0FBTSxPQUNOdEMsS0FBTSxRQUNGakYsWUFBVyxPQUFPTCxFQUFJb1EsS0FBS0MsVUFBdUIsNEJBQ3RERSxRQUFTTCxFQUFXbk4sTUFBUSxHQUM1QnVOLFVBQVUsRUFDTm9QLGFBQVksT0FBTzFmLEVBQUlvUSxLQUFLQyxVQUF1Qiw0QkFDbkQ5SSxjQUFhLE9BQU92SCxFQUFJb1EsS0FBS0MsVUFBdUIscUNBRTFELENBQ0V6SSxLQUFNLFVBQ050QyxLQUFNLFFBQ0ZqRixZQUFXLE9BQU9MLEVBQUlvUSxLQUFLQyxVQUF1QixvQ0FDdERFLFFBQVNMLEVBQVduTixNQUFRLEdBQzVCdU4sVUFBVSxFQUNOb1AsYUFBWSxPQUFPMWYsRUFBSW9RLEtBQUtDLFVBQXVCLG9DQUNuRDlJLGNBQWEsT0FBT3ZILEVBQUlvUSxLQUFLQyxVQUF1Qiw2Q0FFMUQsQ0FDRXpJLEtBQU0sWUFDTnRDLEtBQU0sUUFDRmpGLFlBQVcsT0FBT0wsRUFBSW9RLEtBQUtDLFVBQXVCLGlDQUN0REUsUUFBU0wsRUFBV21SLFdBQWEsR0FDakMvUSxVQUFVLEVBQ05vUCxhQUFZLE9BQU8xZixFQUFJb1EsS0FBS0MsVUFBdUIsaUNBQ25EOUksY0FBYSxPQUFPdkgsRUFBSW9RLEtBQUtDLFVBQXVCLDRDQ2pKOUQsTUFBTXRRLEdBQVMyRixNQUFPMUYsSUFDcEIsTUFBTWltQixFQUFjam1CLEVBQUltUSxVQUF3QixnQkFDaEQsSUFBSzhWLEVBQ0gsTUFBTSxJQUFJN00sTUFBTSw4QkFFbEIsTUFBTThJLEVBQWErRCxFQUFZbGpCLE1BQVEsR0FDdkMsSUFBSXNlLEVBQVk0RSxFQUFZNUUsV0FBYSxHQUNyQ0EsSUFDRkEsRUFBWUEsRUFBVWplLFFBQVEsTUFBTyxLQUV2QyxJQUFJOGlCLEVBQVVELEVBQVlDLFNBQVcsR0FDakNBLElBQ0ZBLEVBQVVBLEVBQVE5aUIsUUFBUSxNQUFPLEtBQUtBLFFBQVEsTUFBTyxJQUFJQSxRQUFRLE1BQU8sS0FFMUUsTUFBTTZiLEVBQVVqZixFQUFJcWEsT0FDcEIsSUFBSyxNQUFNN1AsS0FBT3lVLEVBQ2hCLEdBQUl6VSxFQUFJNUUsVUFBWTRFLEVBQUkzRSxPQUFRLENBQzlCLElBQUlzRixFQUFRWCxFQUFJM0UsUUFDWHNGLEdBQVNYLEVBQUl1VCxjQUNoQjVTLEVBQVFlLE9BQU8xSyxLQUFLZ0osRUFBSXVULFlBQWEsV0FFdkMsSUFDRSxJQUNFalksVUFBR3NPLGNBQWM4TixHQUNqQnBjLFVBQUd1TyxjQUFjdFIsVUFBS2pCLEtBQUtvZ0IsRUFBWTFYLEVBQUk1RSxVQUFXdUYsR0FDdERyRixVQUFHcWdCLGFBQWFwakIsVUFBS2pCLEtBQUtvZ0IsRUFBWTFYLEVBQUk1RSxVQUFXN0MsVUFBS2pCLEtBQUs5QixFQUFJbVksUUFBUyxVQUFXM04sRUFBSTVFLGtCQUNwRjRFLEVBQUl1VCxtQkFDSnZULEVBQUkzRSxPQUdQMkUsRUFBSXNULE9BRkp1RCxFQUNFNkUsRUFDVyxHQUFHN0UsS0FBYVAsbUJBQW1Cb0YsTUFBWXBGLG1CQUFtQnRXLEVBQUk1RSxZQUFZeEMsUUFBUSxPQUFRLEtBRWxHLEdBQUdpZSxLQUFhUCxtQkFBbUJ0VyxFQUFJNUUsWUFBWXhDLFFBQVEsT0FBUSxLQUdyRUwsVUFBS2pCLEtBQUtvZ0IsRUFBWTFYLEVBQUk1RSxVQUV6QzRFLEVBQUk4VSxLQUFPdmMsVUFBS2pCLEtBQUtvZ0IsRUFBWTFYLEVBQUk1RSxVQUNyQzRFLEVBQUl3YixZQUFjLDBCQUEwQmxGLG1CQUFtQnRXLEVBQUk1RSxZQUNuRSxNQUFPOUUsR0FLUCxNQUpBZCxFQUFJc2IsS0FBSzdELEdBQWMrSCxhQUFjLENBQ25DQyxNQUFPemYsRUFBSW9RLEtBQUtDLFVBQXVCLGlCQUN2QytPLEtBQU0sMkJBRUYsSUFBSWhHLE1BQU0sMkJBRWxCLE1BQU90WSxHQUVQLE1BREFkLEVBQUllLElBQUlDLE1BQU1GLEdBQ1JBLEdBSVosT0FBT2QsR0FHSG1CLEdBQVVuQixJQUNkLE1BQU1rUSxFQUFhbFEsRUFBSW1RLFVBQXdCLGlCQUFtQixHQThCbEUsTUE3QmdDLENBQzlCLENBQ0V2SSxLQUFNLE9BQ050QyxLQUFNLFFBQ0ZvYSxhQUFZLE9BQU8xZixFQUFJb1EsS0FBS0MsVUFBdUIsc0JBQ25EaFEsWUFBVyxPQUFPTCxFQUFJb1EsS0FBS0MsVUFBdUIsc0JBQ3RERSxRQUFTTCxFQUFXbk4sTUFBUSxHQUN4QndFLGNBQWEsT0FBT3ZILEVBQUlvUSxLQUFLQyxVQUF1Qiw4QkFDeERDLFVBQVUsR0FFWixDQUNFMUksS0FBTSxZQUNOdEMsS0FBTSxRQUNGb2EsYUFBWSxPQUFPMWYsRUFBSW9RLEtBQUtDLFVBQXVCLDJCQUNuRGhRLFlBQVcsT0FBT0wsRUFBSW9RLEtBQUtDLFVBQXVCLDJCQUN0REUsUUFBU0wsRUFBV21SLFdBQWEsR0FDN0I5WixjQUFhLE9BQU92SCxFQUFJb1EsS0FBS0MsVUFBdUIsbUNBQ3hEQyxVQUFVLEdBRVosQ0FDRTFJLEtBQU0sVUFDTnRDLEtBQU0sUUFDRmpGLFlBQVcsT0FBT0wsRUFBSW9RLEtBQUtDLFVBQXVCLHlCQUN0REUsUUFBU0wsRUFBV2dXLFNBQVcsR0FDL0I1VixVQUFVLEVBQ05vUCxhQUFZLE9BQU8xZixFQUFJb1EsS0FBS0MsVUFBdUIseUJBQ25EOUksY0FBYSxPQUFPdkgsRUFBSW9RLEtBQUtDLFVBQXVCLG9DQ3JGOUQsTUFBTStWLEdBQU52USxjQUdVQyxtQkFBZSxFQUVMdVEsc0JBQ2hCLE9BQU92USxLQUFLd1EsWUFBY3hRLEtBQUt3USxVQUFZLElBQUl4USxNQUcvQnlRLG9CQUNoQixPQUFPelEsS0FBSzBRLFVBQVkxUSxLQUFLMFEsUUFBVSxJQUFJQyxXQUdyQ0MseUJBQTBCM2pCLEdBQ2hDLE9BQU9BLEVBQUtLLFFBQVEsTUFBTyxLQUd0QnNDLGNBQWV2RSxHQUNwQixNQUFNa2lCLFNBQUVBLEVBQVFxQixTQUFFQSxFQUFRaUMsV0FBRUEsRUFBVUMsV0FBRUEsR0FBZXpsQixFQUNqRDBsQixFQUFvQkYsRUFDdEIsQ0FBRXRELFNBQUFBLEVBQVV5RCxlQUFnQkgsRUFBWUMsV0FBWUEsUUFBY3RqQixHQUNsRSxDQUFFK2YsU0FBQUEsRUFBVXFCLFNBQUFBLEdBQ2hCLElBT0UsYUFOTTBCLEdBQVVHLE9BQU9RLHVCQUNyQnBCLEtBQU14a0IsRUFBT3drQixLQUNicUIsS0FBTS9jLE9BQU85SSxFQUFPNmxCLE9BQVMsSUFDMUJILElBRUwvUSxLQUFLbVIsY0FBZSxHQUNiLEVBQ1AsTUFBT2xTLEdBQ1AsTUFBTSxJQUFJcUUsTUFBTXJFLElBSWJyUCxhQUFjd2hCLEVBQWVDLEVBQWdCaG1CLEdBQ2xELElBQUsyVSxLQUFLbVIsYUFDUixNQUFNLElBQUk3TixNQUFNLFdBRWxCLElBQ0UrTixFQUFTclIsS0FBSzRRLHlCQUF5QlMsU0FDakNyUixLQUFLc1IsTUFBTXJrQixVQUFLdUIsUUFBUTZpQixHQUFRL2pCLFFBQVEsYUFBYyxJQUFLakMsU0FDM0RpbEIsR0FBVUcsT0FBT2MsUUFBUUgsRUFBT0MsR0FDdEMsTUFBTUcsRUFBV25tQixFQUFPbW1CLFVBQVksT0FDcEMsR0FBaUIsU0FBYkEsRUFBcUIsQ0FDdkIsTUFBTUMsRUFBUyxTQUFTRCxNQUFhSCxLQUVyQyxhQURxQnJSLEtBQUswUixLQUFLRCxHQUdqQyxPQUFPLEVBQ1AsTUFBT3hTLEdBQ1AsT0FBTyxHQUlIclAsWUFBYStoQixFQUFpQnRtQixHQUNwQyxJQUFLaWxCLEdBQVVHLE9BQU9tQixjQUNwQixNQUFNLElBQUl0TyxNQUFNLFdBRWxCLE1BQU11TyxFQUFnQnhtQixFQUFPeW1CLFNBQVcsT0FDeEMsR0FBc0IsU0FBbEJELEVBQTBCLENBQzVCLE1BQU1FLEVBQU9KLEVBQVFsakIsTUFBTSxLQUMzQixJQUFJaWhCLEVBQWMsR0FDbEIsSUFBSyxNQUFNclIsS0FBTzBULEVBQ2hCLEdBQUkxVCxFQUFLLENBQ1BxUixHQUFlLElBQUlyUixJQUNuQixNQUFNb1QsRUFBUyxVQUFVL0IsZUFBeUJtQyxNQUFrQm5DLFdBQzlEMVAsS0FBSzBSLEtBQUtELFFBR2YsQ0FDTCxNQUFNQSxFQUFTLGFBQWFFLFdBQ3RCM1IsS0FBSzBSLEtBQUtELElBSWI3aEIsWUFBYXloQixFQUFnQlcsRUFBY0MsR0FDaERaLEVBQVNyUixLQUFLNFEseUJBQXlCUyxHQUN2QyxNQUFPYSxFQUFPQyxHQUFVRixFQUFRLENBQUNELEVBQU1DLEdBQVNELEVBQUtua0IsU0FBUyxLQUFPbWtCLEVBQUt2akIsTUFBTSxLQUFPLENBQUN1akIsRUFBTUEsR0FFeEZQLEVBQVMsU0FBU1MsS0FBU0MsTUFBV2QsS0FDNUMsT0FBT3JSLEtBQUswUixLQUFLRCxHQUdYN2hCLFdBQVk2aEIsR0FFbEIsT0FBMkIsV0FERm5CLEdBQVVHLE9BQU8yQixZQUFZWCxJQUNwQ2xJLEtBR2I4SSxRQUNML0IsR0FBVUcsT0FBTzZCLFVBQ2pCdFMsS0FBS21SLGNBQWUsR0N4RnhCLE1BQU1sbkIsR0FBUzJGLE1BQU8xRixJQUNwQixNQUFNcW9CLEVBQWtCcm9CLEVBQUltUSxVQUE0QixvQkFDeEQsSUFBS2tZLEVBQ0gsTUFBTSxJQUFJalAsTUFBTSxrQ0FFbEJpUCxFQUFnQnJCLEtBQU8vYyxPQUFPb2UsRUFBZ0JyQixPQUFTLEdBQ3ZEcUIsRUFBZ0JuRyxZQUFjbUcsRUFBZ0JuRyxZQUFjLElBQUk5ZSxRQUFRLGFBQWMsSUFBTSxJQUM1RixNQUFNOGlCLEdBQVdtQyxFQUFnQm5DLFNBQVcsSUFBSTlpQixRQUFRLGFBQWMsSUFBTSxJQUM1RSxJQUNFLE1BQU02YixFQUFVamYsRUFBSXFhLE9BQ3BCLElBQUssTUFBTTdQLEtBQU95VSxFQUNoQixHQUFJelUsRUFBSTVFLFVBQVk0RSxFQUFJM0UsT0FBUSxDQUM5QixJQUFJc0YsRUFBUVgsRUFBSTNFLFFBQ1hzRixHQUFTWCxFQUFJdVQsY0FDaEI1UyxFQUFRZSxPQUFPMUssS0FBS2dKLEVBQUl1VCxZQUFhLFdBRXZDLE1BQU11SyxFQUFpQnZsQixVQUFLakIsS0FBSzlCLEVBQUltWSxRQUFTLGNBQ3hDNE4sRUFBY2hqQixVQUFLakIsS0FBSzlCLEVBQUltWSxRQUFTLFVBQVcsYUFDdERyUyxVQUFHc08sY0FBY2tVLEdBQ2pCeGlCLFVBQUdzTyxjQUFjMlIsR0FDakIsTUFBTXBNLEVBQWU1VyxVQUFLakIsS0FBS3dtQixFQUFnQjlkLEVBQUk1RSxVQUNuREUsVUFBR3VPLGNBQWNzRixFQUFjeE8sR0FDL0IsTUFBTW9iLEVBQVNILEdBQVVDLGVBQ25CRSxFQUFPUSxRQUFRc0IsR0FDckIsTUFBTUUsRUFBYXhsQixVQUFLakIsS0FBSyxJQUFJdW1CLEVBQWdCbkcsYUFBYTllLFFBQVEsU0FBVSxLQUFNb0gsRUFBSTVFLGdCQUNwRjJnQixFQUFPMVcsT0FBTzhKLEVBQWM0TyxFQUFZRixHQUM5Q0EsRUFBZ0JHLGdCQUFrQmpDLEVBQU9rQyxNQUFNRixFQUFZRixFQUFnQkcsaUJBQ3BFaGUsRUFBSXVULG1CQUNKdlQsRUFBSTNFLE9BQ1gsTUFBTW9kLEVBQVVvRixFQUFnQmhILFdBQWFnSCxFQUFnQjFDLEtBQ3pEMEMsRUFBZ0JuQyxRQUNsQjFiLEVBQUlzVCxPQUFTLEdBQUdtRixLQUF1QixNQUFaaUQsRUFBa0IsR0FBS3BGLG1CQUFtQm9GLEtBQVdwRixtQkFBbUJ0VyxFQUFJNUUsWUFBWXhDLFFBQVEsT0FBUSxLQUVuSW9ILEVBQUlzVCxPQUFTLEdBQUdtRixLQUEwQyxNQUEvQm9GLEVBQWdCbkcsV0FBcUIsR0FBS3BCLG1CQUFtQnVILEVBQWdCbkcsY0FBY3BCLG1CQUFtQnRXLEVBQUk1RSxZQUFZeEMsUUFBUSxPQUFRLEtBRTNLMEMsVUFBRzRpQixTQUFTL08sRUFBYzVXLFVBQUtqQixLQUFLaWtCLEVBQWF2YixFQUFJNUUsV0FDckQ0RSxFQUFJd2IsWUFBYyxvQ0FBb0NsRixtQkFBbUJ0VyxFQUFJNUUsWUFDN0UyZ0IsRUFBTzRCLFFBR1gsT0FBT25vQixFQUNQLE1BQU8rVSxHQUtQLE1BSkEvVSxFQUFJc2IsS0FBSzdELEdBQWMrSCxhQUFjLENBQ25DQyxNQUFPemYsRUFBSW9RLEtBQUtDLFVBQXVCLGlCQUN2QytPLEtBQU1wZixFQUFJb1EsS0FBS0MsVUFBdUIsb0JBRWxDMEUsSUFJSjVULEdBQVVuQixJQUNkLE1BQU1rUSxFQUFhbFEsRUFBSW1RLFVBQTRCLHFCQUF1QixHQXFIMUUsTUFwSGdDLENBQzlCLENBQ0V2SSxLQUFNLE9BQ050QyxLQUFNLFFBQ0ZqRixZQUFXLE9BQU9MLEVBQUlvUSxLQUFLQyxVQUF1QiwwQkFDbEQ5SSxjQUNGLE9BQU92SCxFQUFJb1EsS0FBS0MsVUFBdUIsa0NBRXpDRSxRQUFTTCxFQUFXeVYsTUFBUSxHQUM1QnJWLFVBQVUsR0FFWixDQUNFMUksS0FBTSxPQUNOdEMsS0FBTSxRQUNGaUMsY0FDRixPQUFPdkgsRUFBSW9RLEtBQUtDLFVBQXVCLGtDQUVyQ2hRLFlBQVcsT0FBT0wsRUFBSW9RLEtBQUtDLFVBQXVCLDBCQUN0REUsUUFBU0wsRUFBVzhXLE1BQVEsR0FDNUIxVyxVQUFVLEdBRVosQ0FDRTFJLEtBQU0sV0FDTnRDLEtBQU0sUUFDRmpGLFlBQVcsT0FBT0wsRUFBSW9RLEtBQUtDLFVBQXVCLDhCQUN0REUsUUFBU0wsRUFBV21ULFVBQVksR0FDaEMvUyxVQUFVLEdBRVosQ0FDRTFJLEtBQU0sV0FDTnRDLEtBQU0sUUFDRmpGLFlBQVcsT0FBT0wsRUFBSW9RLEtBQUtDLFVBQXVCLDhCQUN0REUsUUFBU0wsRUFBV3dVLFVBQVksR0FDaENwVSxVQUFVLEdBRVosQ0FDRTFJLEtBQU0sYUFDTnRDLEtBQU0sUUFDRmlDLGNBQ0YsT0FBT3ZILEVBQUlvUSxLQUFLQyxVQUF1Qix3Q0FFckNoUSxZQUFXLE9BQU9MLEVBQUlvUSxLQUFLQyxVQUF1QixnQ0FDdERFLFFBQVNMLEVBQVd5VyxZQUFjLEdBQ2xDclcsVUFBVSxHQUVaLENBQ0UxSSxLQUFNLGFBQ050QyxLQUFNLFFBQ0ZpQyxjQUNGLE9BQU92SCxFQUFJb1EsS0FBS0MsVUFBdUIsbURBRXJDaFEsWUFBVyxPQUFPTCxFQUFJb1EsS0FBS0MsVUFBdUIsMkNBQ3RERSxRQUFTTCxFQUFXMFcsWUFBYyxHQUNsQ3RXLFVBQVUsR0FFWixDQUNFMUksS0FBTSxhQUNOdEMsS0FBTSxRQUNGaUMsY0FDRixPQUFPdkgsRUFBSW9RLEtBQUtDLFVBQXVCLHdDQUVyQ2hRLFlBQVcsT0FBT0wsRUFBSW9RLEtBQUtDLFVBQXVCLGdDQUN0REUsUUFBU0wsRUFBV2dTLFlBQWMsR0FDbEM1UixVQUFVLEdBRVosQ0FDRTFJLEtBQU0sWUFDTnRDLEtBQU0sUUFDRmlDLGNBQ0YsT0FBT3ZILEVBQUlvUSxLQUFLQyxVQUF1Qix1Q0FFckNoUSxZQUFXLE9BQU9MLEVBQUlvUSxLQUFLQyxVQUF1QiwrQkFDdERFLFFBQVNMLEVBQVdtUixXQUFhLEdBQ2pDL1EsVUFBVSxHQUVaLENBQ0UxSSxLQUFNLFVBQ050QyxLQUFNLFFBQ0ZpQyxjQUNGLE9BQU92SCxFQUFJb1EsS0FBS0MsVUFBdUIsMENBRXJDaFEsWUFBVyxPQUFPTCxFQUFJb1EsS0FBS0MsVUFBdUIsa0NBQ3RERSxRQUFTTCxFQUFXZ1csU0FBVyxHQUMvQjVWLFVBQVUsR0FFWixDQUNFMUksS0FBTSxXQUNOdEMsS0FBTSxRQUNGaUMsY0FDRixPQUFPdkgsRUFBSW9RLEtBQUtDLFVBQXVCLHVDQUVyQ2hRLFlBQVcsT0FBT0wsRUFBSW9RLEtBQUtDLFVBQXVCLCtCQUN0REUsUUFBU0wsRUFBV3NZLFVBQVksR0FDaENsWSxVQUFVLEdBRVosQ0FDRTFJLEtBQU0sV0FDTnRDLEtBQU0sUUFDRmlDLGNBQ0YsT0FBT3ZILEVBQUlvUSxLQUFLQyxVQUF1Qix1Q0FFckNoUSxZQUFXLE9BQU9MLEVBQUlvUSxLQUFLQyxVQUF1QiwrQkFDdERFLFFBQVNMLEVBQVdvWCxVQUFZLEdBQ2hDaFgsVUFBVSxHQUVaLENBQ0UxSSxLQUFNLFVBQ050QyxLQUFNLFFBQ0ZpQyxjQUNGLE9BQU92SCxFQUFJb1EsS0FBS0MsVUFBdUIsc0NBRXJDaFEsWUFBVyxPQUFPTCxFQUFJb1EsS0FBS0MsVUFBdUIsOEJBQ3RERSxRQUFTTCxFQUFXMFgsU0FBVyxHQUMvQnRYLFVBQVUsS0NoS2hCLE1BQU1xWSxHQUFpQyxLQUM5QixDQUNMMVMsU0FBVWpXLGFOZ0lvQkEsR0FDaENBLEVBQUl1UixPQUFPUyxTQUFTaUUsU0FBUyxTQUFVLENBQ2pDck8sV0FDRixPQUFPNUgsRUFBSW9RLEtBQUtDLFVBQXVCLDJCQUV6Q3RRLFVBQ0FvQixLTXJJRXluQixDQUFlNW9CLFlWNFFhQSxHQUNoQ0EsRUFBSXVSLE9BQU9TLFNBQVNpRSxTQUFTLFFBQVMsQ0FDaENyTyxXQUFVLE9BQU81SCxFQUFJb1EsS0FBS0MsVUFBdUIsK0JBQ3JEdFEsVUFDQW9CLEtVL1FFMG5CLENBQWM3b0IsWVg2RWNBLEdBQ2hDQSxFQUFJdVIsT0FBT1MsU0FBU2lFLFNBQVMsT0FBUSxDQUMvQnJPLFdBQVUsT0FBTzVILEVBQUlvUSxLQUFLQyxVQUF1Qix1QkFDckR0USxVQUNBb0IsS1doRkUybkIsQ0FBYTlvQixZVHdJZUEsR0FDaENBLEVBQUl1UixPQUFPUyxTQUFTaUUsU0FBUyxTQUFVLENBQ2pDck8sV0FBVSxPQUFPNUgsRUFBSW9RLEtBQUtDLFVBQXVCLHlCQUNyRHRRLFVBQ0FvQixLUzNJRTRuQixDQUFlL29CLFlSK0hhQSxHQUNoQ0EsRUFBSXVSLE9BQU9TLFNBQVNpRSxTQUFTLFFBQVMsQ0FDaENyTyxXQUFVLE9BQU81SCxFQUFJb1EsS0FBS0MsVUFBdUIsd0JBQ3JEdFEsVUFDQW9CLEtRbElFNm5CLENBQWNocEIsWVBnSmNBLEdBQ2hDQSxFQUFJdVIsT0FBT1MsU0FBU2lFLFNBQVMsUUFBUyxDQUNoQ3JPLFdBQVUsT0FBTzVILEVBQUlvUSxLQUFLQyxVQUF1Qix3QkFDckR0USxVQUNBb0IsS09uSkU4bkIsQ0FBY2pwQixZTDRKY0EsR0FDaENBLEVBQUl1UixPQUFPUyxTQUFTaUUsU0FBUyxRQUFTLENBQ2hDck8sV0FBVSxPQUFPNUgsRUFBSW9RLEtBQUtDLFVBQXVCLHdCQUNyRHRRLFVBQ0FvQixLSy9KRStuQixDQUFjbHBCLFlKd0ljQSxHQUNoQ0EsRUFBSXVSLE9BQU9TLFNBQVNpRSxTQUFTLGNBQWUsQ0FDdENyTyxXQUFVLE9BQU81SCxFQUFJb1EsS0FBS0MsVUFBdUIsOEJBQ3JEdFEsVUFDQW9CLEtJM0lFZ29CLENBQW9CbnBCLFlIeUVRQSxHQUNoQ0EsRUFBSXVSLE9BQU9TLFNBQVNpRSxTQUFTLFFBQVMsQ0FDaENyTyxXQUFVLE9BQU81SCxFQUFJb1EsS0FBS0MsVUFBdUIsd0JBQ3JEdFEsVUFDQW9CLEtHNUVFaW9CLENBQWNwcEIsWUQySmNBLEdBQ2hDQSxFQUFJdVIsT0FBT1MsU0FBU2lFLFNBQVMsWUFBYSxDQUNwQ3JPLFdBQVUsT0FBTzVILEVBQUlvUSxLQUFLQyxVQUF1Qiw0QkFDckR0USxHQUNBb0IsT0FBQUEsS0M5SkVrb0IsQ0FBYXJwQixNQ29CYnNwQixHQUFhLENBQUN0cEIsRUFBYW1GLEVBQWNwQyxLQUM3QyxNQUFNd0MsRUFBWUwsR0FBYUMsR0FTL0IsT0FSS0ksRUFBVUMsT0FDTyxpQkFBVHpDLEVBQ1QvQyxFQUFJZSxJQUFJMkgsS0FBSyxhQUFhM0Ysa0JBRTFCL0MsRUFBSWUsSUFBSTJILEtBQUssd0JBRWYxSSxFQUFJZSxJQUFJMkgsS0FBSywwQkFFUm5ELEdBR1QsT0FBZSxRQWhEQUcsTUFBTzFGLElBQ3BCLE1BQU11cEIsRUFBc0J2cEIsRUFBSXFhLE9BK0JoQyxhQTlCTWhVLFFBQVErWCxJQUFJcGUsRUFBSWtOLE1BQU16TCxLQUFJaUUsTUFBT2hDLEVBQXVCdVksS0FDNUQsSUFBSXBLLEVBYUosR0FYRUEsRUFERTNGLE9BQU9nSSxTQUFTeFEsR0FDWCxDQUNMc0MsU0FBUyxFQUNUSCxPQUFRbkMsRUFDUmtDLFNBQVUsR0FDVjNDLFFBQVMsSUFFRjBCLEdBQU1qQixTQUNGd0MsR0FBV3hDLEVBQU0xRCxTQUVqQnlGLEdBQVUvQixHQUVyQm1PLEVBQUs3TCxTQUFXNkwsRUFBS2hNLE9BQVEsQ0FDL0IsTUFBTTJqQixFQUFVRixHQUFXdHBCLEVBQUs2UixFQUFLaE0sT0FBUW5DLEdBQ3ZDVCxFQUFVNE8sRUFBSzVPLFNBQVd1bUIsRUFBUXZtQixTQUFXLE9BQ25Ec21CLEVBQVF0TixHQUFTLENBQ2ZwVyxPQUFRZ00sRUFBS2hNLE9BQ2JELFNBQVVpTSxFQUFLak0sVUFBWSxHQUFHdVQsWUFBUS9KLE9BQU8sb0JBQW9Cbk0sS0FDakVtQyxNQUFPb2tCLEVBQVFwa0IsTUFDZkMsT0FBUW1rQixFQUFRbmtCLE9BQ2hCcEMsUUFBUzRPLEVBQUs1TyxjQUdoQmpELEVBQUllLElBQUlDLE1BQU02USxFQUFLNUwsWUFJdkJqRyxFQUFJcWEsT0FBU2tQLEVBQVF2WixRQUFPdE0sR0FBUUEsSUFDN0IxRCxJQ25DVCxPQUFlLENBQ2JELE9BTmEyRixNQUFPMUYsSUFDcEJBLEVBQUlxYSxPQUFPbkksUUFBUWxTLEVBQUlrTixPQUNoQmxOLFVDT0l5cEIsR0FLWDVULFlBQWE3VixHQUhMOFYsVUFBaUIsR0FDUkEsY0FBd0IsSUFBSTRULElBQzVCNVQsZUFBZ0QsSUFBSUMsSUFFbkVELEtBQUs5VixJQUFNQSxFQUNYOFYsS0FBS2QsT0FHQ0EsT0FDTixNQUFNMlUsRUFBYzVtQixVQUFLakIsS0FBS2dVLEtBQUs5VixJQUFJbVksUUFBUyxnQkFDaEQsSUFBS3JTLFVBQUdxQyxXQUFXd2hCLEdBQWMsQ0FDL0IsTUFBTTVnQixFQUFNLENBQ1ZuQixLQUFNLGdCQUNOeEgsWUFBYSxnQkFDYndwQixXQUFZLHNDQUNaQyxRQUFTLE9BRVgvakIsVUFBR3VPLGNBQWNzVixFQUFhL2YsS0FBSzhKLFVBQVUzSyxHQUFNLFNBSy9DK2dCLGNBQWU5cEIsRUFBYTRILEdBQ2xDLElBQ0UsT0FBT3RCLFdBQVFzTyxLQUFLaE4sRUFBTSxDQUFFbWlCLFFBQVMvcEIsRUFBSW1ZLFVBQ3pDLE1BQU9wRCxHQUNQLE9BQU9oUyxVQUFLakIsS0FBSzlCLEVBQUltWSxRQUFTLGVBQWdCdlEsSUFLbERvaUIsT0FDRSxNQUFNTCxFQUFjNW1CLFVBQUtqQixLQUFLZ1UsS0FBSzlWLElBQUltWSxRQUFTLGdCQUMxQzhSLEVBQVlsbkIsVUFBS2pCLEtBQUtnVSxLQUFLOVYsSUFBSW1ZLFFBQVMsaUJBRTlDLElBQUtyUyxVQUFHcUMsV0FBVzhoQixHQUNqQixPQUFPLEVBRVQsTUFBTWxJLEVBQU9qYyxVQUFHa0QsYUFBYTJnQixHQUN2Qk8sRUFBTzNtQixPQUFPQyxLQUFLdWUsRUFBS29JLGNBQWdCLElBQ3hDQyxFQUFVN21CLE9BQU9DLEtBQUt1ZSxFQUFLc0ksaUJBQW1CLElBQzlDQyxFQUFVSixFQUFLckosT0FBT3VKLEdBQVNwYSxRQUFRcEksSUFDM0MsSUFBSyx3Q0FBd0MvQyxLQUFLK0MsR0FBTyxPQUFPLEVBQ2hFLE1BQU03RSxFQUFPK1MsS0FBS2dVLGNBQWNoVSxLQUFLOVYsSUFBSzRILEdBQzFDLE9BQU85QixVQUFHcUMsV0FBV3BGLE1BRXZCLElBQUssTUFBTThOLEtBQVV5WixFQUNuQnhVLEtBQUt5VSxlQUFlMVosR0FFdEIsT0FBTyxFQUdUMFosZUFBZ0IzaUIsRUFBY2dLLEdBQzVCLEdBQUtoSyxHQUF3QixpQkFBVEEsRUFBcEIsQ0FJQWtPLEtBQUswVSxTQUFTQyxJQUFJN2lCLEdBQ2xCLElBRUUsR0FBS2dLLEVBYUUsQ0FHTGtFLEtBQUtMLEtBQUt2RCxLQUFLdEssR0FDZmtQLEdBQXFCbFAsR0FDckIsTUFBTThpQixFQUFrQjlZLEVBQU9rRSxLQUFLOVYsS0FDcEM4VixLQUFLNlUsVUFBVXRVLElBQUl6TyxFQUFNOGlCLEdBQ3pCQSxFQUFnQnpVLFNBQVNILEtBQUs5VixVQW5COUIsSUFBbUQsSUFBL0M4VixLQUFLOVYsSUFBSW1RLFVBQVUsZ0JBQWdCdkksV0FBb0V0RSxJQUEvQ3dTLEtBQUs5VixJQUFJbVEsVUFBVSxnQkFBZ0J2SSxLQUF3QixDQUNySGtPLEtBQUtMLEtBQUt2RCxLQUFLdEssR0FDZmtQLEdBQXFCbFAsR0FFckJrTyxLQUFLcEUsVUFBVTlKLEdBQU9xTyxTQUFTSCxLQUFLOVYsS0FDcEMsTUFBTTRSLEVBQVMsZ0JBQWdCaEssS0FDL0JrTyxLQUFLOVYsSUFBSWtSLFdBQ1AsQ0FDRVUsQ0FBQ0EsSUFBUyxLQWFsQixNQUFPOVEsR0FDUGdWLEtBQUs2VSxVQUFValUsT0FBTzlPLEdBQ3RCa08sS0FBS0wsS0FBT0ssS0FBS0wsS0FBS3pGLFFBQVF0TSxHQUFpQkEsSUFBU2tFLElBQ3hEa08sS0FBSzBVLFNBQVM5VCxPQUFPOU8sR0FDckJrTyxLQUFLOVYsSUFBSWUsSUFBSUMsTUFBTUYsR0FDbkJnVixLQUFLOVYsSUFBSXNiLEtBQUs3RCxHQUFjK0gsYUFBYyxDQUN4Q0MsTUFBTyxVQUFVN1gsZUFDakJ3WCxLQUFNdGUsVUFuQ1JnVixLQUFLOVYsSUFBSWUsSUFBSTJILEtBQUssK0JBd0N0QmtpQixpQkFBa0JoakIsR0FDaEJrTyxLQUFLTCxLQUFPSyxLQUFLTCxLQUFLekYsUUFBUXRNLEdBQWlCQSxJQUFTa0UsSUFDeERrTyxLQUFLMFUsU0FBUzlULE9BQU85TyxHQUNyQmtPLEtBQUs2VSxVQUFValUsT0FBTzlPLEdBQ3RCa1AsR0FBcUJsUCxHQUNyQmtPLEtBQUs5VixJQUFJdVIsT0FBT1MsU0FBU3VFLFdBQVczTyxHQUNwQ2tPLEtBQUs5VixJQUFJdVIsT0FBT1UsWUFBWXNFLFdBQVczTyxHQUN2Q2tPLEtBQUs5VixJQUFJdVIsT0FBTzhMLHVCQUF1QjlHLFdBQVczTyxHQUNsRGtPLEtBQUs5VixJQUFJdVIsT0FBT2lNLG9CQUFvQmpILFdBQVczTyxHQUMvQ2tPLEtBQUs5VixJQUFJdVIsT0FBT29NLG1CQUFtQnBILFdBQVczTyxHQUM5Q2tPLEtBQUs5VixJQUFJQyxJQUFJc1csV0FBVzNPLEdBQ3hCa08sS0FBSzlWLElBQUkyYSxhQUFhLGVBQWdCL1MsR0FJeEM4SixVQUFXOUosR0FDVCxHQUFJa08sS0FBSzZVLFVBQVV2VSxJQUFJeE8sR0FDckIsT0FBT2tPLEtBQUs2VSxVQUFVdGpCLElBQUlPLEdBRTVCLE1BQU1xaUIsRUFBWWxuQixVQUFLakIsS0FBS2dVLEtBQUs5VixJQUFJbVksUUFBUyxpQkFFeEN2RyxFQUFTaUMsUUFBUW9XLEVBQVlyaUIsRUFBcEJpTSxDQUEwQmlDLEtBQUs5VixLQUU5QyxPQURBOFYsS0FBSzZVLFVBQVV0VSxJQUFJek8sRUFBTWdLLEdBQ2xCQSxFQU1UZ0YsVUFDRSxPQUFPZCxLQUFLTCxLQUdkb1YsVUFBV2pqQixHQUNULE9BQU9rTyxLQUFLMFUsU0FBU3BVLElBQUl4TyxHQU0zQitKLGNBQ0UsTUFBTyxJQUFJbUUsS0FBSzBVLFdDbkpiLE1Db0NETSxHQUVGLENBQ0ZDLDJxQ0FDQUMsaXdCQUNBQyxnNENBQ0FDLGs1Q0FDQUMsa3VCQU1JQyxHQUVGLENBQ0ZMLE9BQVEsa0JBQ1JDLE1BQU8sY0FDUEMsTUFBTyxnQkFDUEMsTUFBTyxXQUNQQyxJQUFLLFVBV1AsTUFBTUUsR0FBb0IzbEIsTUFBTzFGLEtBUmpDLFNBQTRCQSxHQUMxQixNQUFNc3JCLEVBQVl2b0IsVUFBS2pCLEtBQUs5QixFQUFJbVksUUQ1REksNEJDNkQvQnJTLFVBQUdxQyxXQUFXbWpCLElBQ2pCeGxCLFVBQUdrVSxVQUFVc1IsR0FNZkMsQ0FBa0J2ckIsR0FFbEIsTUFBTXNyQixFQUFZdm9CLFVBQUtqQixLQUFLOUIsRUFBSW1ZLFFEdEVJLDJCQ3NFNkIsR0FBR2dCLFlBQVEvSixPQUFPLHlCQUNuRixhQUFhLElBQUkvSSxTQUF5QixDQUFDQyxFQUFtQkMsS0FDNUQsTUFBTWlsQixFQXZEaUIsTUFDekIsTUFBTUEsRUFBV3ZqQixRQUFRdWpCLFNBQ3pCLEdBQUlDLFdBQ0YsTUFBTyxNQUVULEdBQWlCLFVBQWJELEVBRUYsTUFBa0IsT0FEQUUsVUFBR0MsVUFBVXBuQixNQUFNLEtBQUssR0FFakMsUUFFQSxRQUVKLE1BQWlCLFdBQWJpbkIsRUFDRixTQUVBLFNBd0NVSSxHQUNYQyxFQUFhOW9CLFVBQUtqQixLQUFLOUIsRUFBSW1ZLFFBQVNpVCxHQUF3QkksSUFTbEUsSUFBSU0sRUFQQ2htQixVQUFHcUMsV0FBVzBqQixJQUNqQi9sQixVQUFHdU8sY0FDRHdYLEVBQ0FmLEdBQXVCVSxHQUN2QixRQUtGTSxFQURlLFdBQWJOLEVBQ1VPLFFBQU0sWUFBYSxDQUFDRixFQUFZUCxJQUN0QixVQUFiRSxHQUFxQyxVQUFiQSxFQUNyQk8sUUFBTSxhQUFjLENBQzlCLGFBQ0Esa0JBQ0EsVUFDQSxPQUNBLG1CQUFvQixlQUtwQixRQUFTRixFQUNUUCxJQUdVUyxRQUFNLEtBQU0sQ0FBQ0YsRUFBWVAsSUFHdkNRLEVBQVVFLE9BQU8zVyxHQUFHLFFBQVN0TyxJQUMzQixHQUFpQixVQUFieWtCLEdBQzZCLDZCQUEzQnprQixFQUFLekUsV0FBVzJwQixPQUtsQixPQUpBanNCLEVBQUlzYixLQUFLN0QsR0FBYytILGFBQWMsQ0FDbkNDLE1BQU8sa0NBQ1BMLEtBQU0sZ0ZBRUQ3WSxFQUFPLElBQUk2UyxNQUFNLGdGQUc1QixNQUFNOFMsRUFBVW5sQixFQUFLekUsV0FBVzJwQixPQUloQyxJQUFJRSxHQUEyQixFQVcvQixHQVJJcHBCLFVBQUtDLFNBQVNrcEIsS0FBYW5wQixVQUFLQyxTQUFTc29CLElBR3ZDeGxCLFVBQUdxQyxXQUFXK2pCLEtBQ2hCQyxHQUEyQixHQUlmLGFBQVpELElBQTJCcG1CLFVBQUdxQyxXQUFXK2pCLEdBQzNDLE9BQU8zbEIsRUFBTyxJQUFJNlMsTUFBTSxjQUFjOFMsTUFHeEM1bEIsRUFBUSxDQUNONGxCLFFBQUFBLEVBQ0FDLHlCQUFBQSxXQ3BJRkMsR0FBVyxJQUFJM1MsZUNRZjRTLEdBQWEsSUFBSUMsV0FBTUMsTUFBTSxDQUNqQ0MsV0FBWSxVQUNaQyxXQUFZLFlBSWQsU0FBU0MsR0FBZ0JDLEVBQWdCeG9CLEVBQWE0QyxHQUNoQyxpQkFBVEEsR0FBcUIsVUFBV0EsR0FBUSxZQUFhQSxFQUM5RDRsQixFQUFLQyxPQUFPem9CLEVBQUs0QyxFQUFLOFgsTUFBTzlYLEVBQUtwRyxTQUVsQ2dzQixFQUFLQyxPQUFPem9CLEVBQUs0QyxHQXdFckIsU0FBUzhsQixHQUFxQjFKLEdBQzVCLHNDQUNLQSxJQUNINUIsV0FBWTRCLEVBQVMySixPQUNyQjFOLEtBQU0rRCxFQUFTcGMsT0FJbkIsU0FBU2dtQixHQUFzQi9yQixxQkFjN0IsTUFBTWdzQixFQUFXLENBQ2Z0bUIsNEJBQVExRixNQUFBQSxTQUFBQSxFQUFPRyw2QkFBUXVGLDZCQUFRc1IsZ0JBQWlCLEdBQ2hEcFQsZUFBSzVELE1BQUFBLFNBQUFBLEVBQU9HLDZCQUFReUQsTUFBTyxHQUMzQjJjLHNCQUFZdmdCLE1BQUFBLFNBQUFBLEVBQU9taUIsK0JBQVUySixTQUFVLEVBQ3ZDdmxCLFNBQVN2RyxNQUFBQSxTQUFBQSxFQUFPdUcsVUFBVyxHQUMzQitSLE9BQU90WSxNQUFBQSxTQUFBQSxFQUFPc1ksUUFBUyxHQUN2QjZKLFNBQVUsQ0FDUjJKLGtCQUFROXJCLE1BQUFBLFNBQUFBLEVBQU9taUIsK0JBQVUySixTQUFVLEVBQ25Ddkwsc0JBQVl2Z0IsTUFBQUEsU0FBQUEsRUFBT21pQiwrQkFBVTJKLFNBQVUsRUFDdkMxTixnQkFBTXBlLE1BQUFBLFNBQUFBLEVBQU9taUIsK0JBQVVwYyxPQUFRLEtBR25DLE9BQU9WLFFBQVFFLE9BQU95bUIsU0FHWHpTLEdBSVgxRSxZQUFhN1YsR0FGTDhWLFdBQTZCLEdBQ3JDQSxhQUFtQyxHQUVqQ0EsS0FBSzlWLElBQU1BLEVBQ1g4VixLQUFLZCxPQUNMb1gsR0FBUy9XLEdBQUdxQyxHQUFVdVYsZUFBZ0JsbUIsVUFDcEMsT0FBUUEsRUFBS2tLLFlBQ1gsSUFBSyxvQkFDRWxLLEVBQUs4WCw0QkFBNkJwZSxTQUNyQ3FWLEtBQUtyVixNQUFTc0csRUFBSzhYLE1BQTRCcGUsT0FFakQsTUFDRixJQUFLLGVBQ0hxVixLQUFLclYsTUFBUXNHLEVBQUs4WCxVQU1sQjdKLE9BQ04sTUFBTXZVLEVBQVFxVixLQUFLOVYsSUFBSW1RLFVBQStCLGdCQUNsRDFQLElBQ0ZxVixLQUFLclYsTUFBUUEsR0FJVHlzQixjQUNOLEdBQUlwWCxLQUFLclYsTUFDUCxJQUNFLE1BQU0wc0IsRUFBZSxJQUFJam1CLE1BQUk0TyxLQUFLclYsT0FDbEMsTUFBTyxDQUNMa2xCLEtBQU13SCxFQUFhQyxTQUNuQnBHLEtBQU05QixTQUFTaUksRUFBYW5HLE1BQVEsSUFBSyxJQUN6Q3FHLFNBQVVGLEVBQWFFLFVBRXpCLE1BQU92c0IsSUFHWCxPQUFPLEVBSVQyRixRQUVJOUYsU0FDRm1WLEtBQUtuVixRQUFRRixNQUFRcVYsS0FBS29YLGNBQzFCcFgsS0FBS25WLFFBQVE2ZCxRQUFVN2QsRUFBUTZkLFNBQVcsR0FDMUMxSSxLQUFLblYsUUFBUTJzQixjQUFnQkMsRUFBQUEsRUFDN0J6WCxLQUFLblYsUUFBUTZzQixpQkFBbUJELEVBQUFBLEVBQzVCelgsS0FBS25WLFFBQVFGLGtCQUFTRSxFQUFRaUUsMEJBQUswQyxXQUFXLGNBQ2hEd08sS0FBS25WLFFBQVEwckIsV0FBYW9CLFdBQU9DLGNBQWMsQ0FDN0NqdEIsTUFBTyxDQUNMa2xCLEtBQU03UCxLQUFLblYsUUFBUUYsTUFBTWtsQixLQUN6QnFCLEtBQU1sUixLQUFLblYsUUFBUUYsTUFBTXVtQixRQUc3QmxSLEtBQUtuVixRQUFRRixPQUFRLEdBRXJCcVYsS0FBS25WLFFBQVEwckIsV0FBYUEsR0FJNUIsTUFBTWhHLEVBQVduTSxVQUFNeVQsT0FBTzdYLEtBQUtuVixTQUNuQzBsQixFQUFTdUgsYUFBYXpLLFNBQVNwUixJQUFJOGEsR0FBcUJFLElBR3hELE1BQU1jLEVBN0tWLFNBQTZCbHRCLFNBRzNCLElBQUltdEIsR0FBaUIsRUFDckIsTUFBTUQsaUNBR0RsdEIsSUFDSGlFLElBQU1qRSxFQUFRaUUsS0FBa0IsR0FDaEM0WixRQUFTN2QsRUFBUTZkLFNBQVcsS0FHOUIsR0FBSTdkLEVBQVFGLE1BQU8sQ0FDakIsSUFBSTBzQixFQUFleHNCLEVBQVFGLE1BQzNCLEdBQTRCLGlCQUFqQjBzQixFQUEyQixDQUNwQyxJQUNFQSxFQUFlLElBQUlqbUIsTUFBSXZHLEVBQVFGLE9BQy9CLE1BQU9LLEdBQ1Bxc0IsR0FBZSxFQUNmVSxFQUFJcHRCLE9BQVEsRUFDWitILFFBQVF4SCxNQUFNRixHQUVoQmd0QixHQUFpQixFQUVmWCxlQUNFeHNCLEVBQVFpRSwwQkFBSzBDLFdBQVcsY0FDMUJ1bUIsRUFBSXB0QixPQUFRLEVBQ1pvdEIsRUFBSXhCLFdBQWFvQixXQUFPQyxjQUFjLENBQ3BDanRCLE1BQU8sQ0FDTGtsQixLQUFNd0gsTUFBQUEsU0FBQUEsRUFBY0MsU0FDcEJwRyxLQUFNOUIsU0FBU2lJLE1BQUFBLFNBQUFBLEVBQWNuRyxLQUFNLFFBSXZDNkcsRUFBSXB0QixNQUFRLENBQ1ZrbEIsS0FBTXdILEVBQWFDLFNBQ25CcEcsS0FBTTlCLFNBQVNpSSxFQUFhbkcsS0FBTSxJQUNsQ3FHLFNBQVUsU0FLbEIsR0FBSSxhQUFjMXNCLEVBQVMsQ0FDekIsTUFBTWdzQixFQUFPLElBQUlvQixXQUNqQixJQUFLLE1BQU01cEIsS0FBT3hELEVBQVFnZSxTQUV4QitOLEdBQWVDLEVBQU14b0IsRUFEUnhELEVBQVFnZSxTQUFTeGEsSUFHaEMwcEIsRUFBSTltQixLQUFPNGxCLEVBQ1hrQixFQUFJclAsUUFBVWpiLE9BQU95cUIsT0FBT0gsRUFBSXJQLFNBQVcsR0FBSW1PLEVBQUtzQixjQUNwREgsR0FBaUIsU0FFVkQsRUFBSWxQLFNBYWIsTUFYSSxTQUFVaGUsSUFDWmt0QixFQUFJOW1CLEtBQU9wRyxFQUFReWUsS0FDbkIwTyxHQUFpQixTQUVWRCxFQUFJek8sTUFFVCxPQUFRemUsSUFDVmt0QixFQUFJdmdCLE9BQVMzTSxFQUFRdXRCLEdBQ3JCSixHQUFpQixHQUVuQkQsRUFBSUMsZUFBaUJBLEVBQ2RELEVBNEdPTSxDQUFtQnh0QixHQW9CL0IsT0FsQkEwbEIsRUFBU3VILGFBQWFubkIsUUFBUXNMLEtBQUksU0FBVXFjLGFBRTFDLElBQUkzUCxFQUFjLEdBY2xCLGlCQWJJMlAsTUFBQUEsU0FBQUEsRUFBSzVQLDhCQUFTQyxjQUNoQkEsRUFBYzJQLEVBQUk1UCxRQUFRQyxtQkFDbkIyUCxFQUFJNVAsUUFBUUMsd0JBQ1YyUCxNQUFBQSxTQUFBQSxFQUFLNVAsOEJBQVM2UCxjQUN2QjVQLEVBQWMyUCxFQUFJNVAsUUFBUTZQLG1CQUNuQkQsRUFBSTVQLFFBQVE2UCx3QkFDVkQsTUFBQUEsU0FBQUEsRUFBSzVQLDhCQUFVLG1CQUN4QkMsRUFBYzJQLEVBQUk1UCxRQUFRLHVCQUNuQjRQLEVBQUk1UCxRQUFRLGlCQUVELEtBQWhCQyxHQUFzQjJQLEVBQUk1UCxVQUM1QjRQLEVBQUk1UCxRQUFRLGdCQUFrQkMsR0FFekIyUCxLQUVMLDRCQUE2Qnp0QixHQUFXQSxFQUFRZ0csd0JBQzNDMGYsRUFBUzVmLFFBQVFvbkIsR0FFakJ4SCxFQUFTNWYsUUFBUW9uQixHQUFLaG5CLE1BQUtMLEdBRTVCcW5CLEVBQUlDLGVBQ0YsU0FBVW50QixFQUNSQSxFQUFRb2hCLEtBQ0h2YixFQUFJTyxVQURiLEVBSU82QyxLQUFLOEosVUFBVWxOLEVBQUlPLE1BR3JCUCxFQUFJTyxRQ25PckIsTUFBTXVuQixHQUdKelksWUFBYTdWLEdBSVgsR0FIQThWLEtBQUs5VixJQUFNQSxFQUNYOFYsS0FBS3lZLEdBQUssSUFBSUMsWUFBVTFZLEtBQUs5VixJQUFJb2EsYUFFNUJ0RSxLQUFLeVksR0FBR25ZLElBQUksVUFDZixJQUNFTixLQUFLeVksR0FBR2xZLElBQUksU0FBVSxDQUNwQnJFLFNBQVUsT0FDVnlPLFFBQVMsU0FFWCxNQUFPM2YsR0FFUCxNQURBZ1YsS0FBSzlWLElBQUllLElBQUlDLE1BQU1GLEdBQ2JBLEVBR1YsSUFBS2dWLEtBQUt5WSxHQUFHblksSUFBSSxnQkFDZixJQUNFTixLQUFLeVksR0FBR2xZLElBQUksZUFBZ0IsSUFDNUIsTUFBT3ZWLEdBRVAsTUFEQWdWLEtBQUs5VixJQUFJZSxJQUFJQyxNQUFNRixHQUNiQSxHQUtaMnRCLEtBQU1DLEdBQ0osT0FBTzVZLEtBQUt5WSxHQUFHRSxLQUFLQyxHQUd0QnJuQixJQUFLbEQsRUFBYyxJQUVqQixPQURBMlIsS0FBSzJZLE1BQUssR0FDSDNZLEtBQUt5WSxHQUFHbG5CLElBQUlsRCxHQUdyQmtTLElBQUtsUyxFQUFhMGEsR0FFaEIsT0FEQS9JLEtBQUsyWSxNQUFLLEdBQ0gzWSxLQUFLeVksR0FBR2xZLElBQUlsUyxFQUFLMGEsR0FHMUJ6SSxJQUFLalMsR0FFSCxPQURBMlIsS0FBSzJZLE1BQUssR0FDSDNZLEtBQUt5WSxHQUFHblksSUFBSWpTLEdBR3JCd3FCLE1BQU94cUIsRUFBYTBhLEdBRWxCLE9BREEvSSxLQUFLMlksTUFBSyxHQUNIM1ksS0FBS3lZLEdBQUdJLE1BQU14cUIsRUFBSzBhLEdBRzVCM04sV0FBWS9QLEdBQ1ZvQyxPQUFPQyxLQUFLckMsR0FBUTZSLFNBQVNwTCxJQUMzQmtPLEtBQUtPLElBQUl6TyxFQUFNekcsRUFBT3lHLE9BSTFCK1MsYUFBY3haLEdBQ1pvQyxPQUFPQyxLQUFLckMsR0FBUTZSLFNBQVNwTCxJQUMzQmtPLEtBQUs2WSxNQUFNL21CLEVBQU16RyxFQUFPeUcsY0NqRGpCZ25CLEdBR1gvWSxZQUFhN1YsR0FDWDhWLEtBQUs5VixJQUFNQSxFQUdiMEYsY0FBZWxGLEVBQW1CRyxFQUFpQyxHQUFJd0osR0FDckUsTUFBTTBrQixFQUE2QixHQUM3QkMsRUFBaUJ0dUIsRUFDcEJpQixLQUFLaUMsR0FBaUJxckIsR0FBd0JqWixLQUFLOVYsSUFBSzBELEtBQ3hEc00sUUFBUXRNLEdBR0hvUyxLQUFLOVYsSUFBSXlSLGFBQWFvWixVQUFVbm5CLEVBQUtzckIsVUFDdkNILEVBQWlCM2MsS0FBS3hPLEVBQUtzckIsU0FDM0JsWixLQUFLOVYsSUFBSWUsSUFBSWlGLFFBQVEsK0JBQStCdEMsRUFBS3NyQixZQUNsRCxLQUdKdHJCLEVBQUtzQyxVQUtSaXBCLEVBQWVILEVBQWVydEIsS0FBSWlDLEdBQVFBLEVBQUt3ckIsV0FDL0NDLEVBQWNMLEVBQWVydEIsS0FBSWlDLEdBQVFBLEVBQUtzckIsVUFDcEQsR0FBSUMsRUFBYTV0QixPQUFTLEVBQUcsQ0FJM0IsTUFBTStXLFFBQWV0QyxLQUFLb1MsWUFBWSxVQUFXK0csRUFBY25aLEtBQUs5VixJQUFJbVksUUFBU3hYLEVBQVN3SixHQUMxRixHQUFLaU8sRUFBT2lILEtBY0wsQ0FDTCxNQUFNdEssRUFBTWUsS0FBSzlWLElBQUlvUSxLQUFLQyxVQUF1Qiw4Q0FBK0MsQ0FDOUZnUCxLQUFNLEdBQUdqSCxFQUFPaUgsT0FDaEJ0WSxLQUFNcVIsRUFBT3JSLE9BRWYrTyxLQUFLOVYsSUFBSWUsSUFBSUMsTUFBTStULEdBQ25CZSxLQUFLOVYsSUFBSXNiLEtBQUssZ0JBQWlCLENBQzdCbUUsTUFBTzNKLEtBQUs5VixJQUFJb1EsS0FBS0MsVUFBdUIsd0NBQzVDK08sS0FBTXJLLElBTVIsTUFKeUMsQ0FDdkMvTyxTQUFTLEVBQ1RvWixLQUFNckssR0F6QlJvYSxFQUFZbmMsU0FBU3dELElBQ25CVixLQUFLOVYsSUFBSXlSLGFBQWE4WSxlQUFlL1QsTUFFdkNWLEtBQUs5VixJQUFJZSxJQUFJaUYsUUFBUThQLEtBQUs5VixJQUFJb1EsS0FBS0MsVUFBdUIsMENBQzFEeUYsS0FBSzlWLElBQUlzYixLQUFLLGlCQUFrQixDQUM5Qm1FLE1BQU8zSixLQUFLOVYsSUFBSW9RLEtBQUtDLFVBQXVCLHlDQUM1QytPLEtBQU0sSUFBSStQLEtBQWdCTixLQU01QixNQUp3QyxDQUN0QzdvQixTQUFTLEVBQ1RvWixLQUFNLElBQUkrUCxLQUFnQk4sSUFtQnpCLEdBQWdDLElBQTVCQSxFQUFpQnh0QixPQUFjLENBQ3hDLE1BQU0wVCxFQUFNZSxLQUFLOVYsSUFBSW9RLEtBQUtDLFVBQXVCLGdEQUNqRHlGLEtBQUs5VixJQUFJZSxJQUFJQyxNQUFNK1QsR0FDbkJlLEtBQUs5VixJQUFJc2IsS0FBSyxnQkFBaUIsQ0FDN0JtRSxNQUFPM0osS0FBSzlWLElBQUlvUSxLQUFLQyxVQUF1Qix3Q0FDNUMrTyxLQUFNckssSUFNUixNQUp5QyxDQUN2Qy9PLFNBQVMsRUFDVG9aLEtBQU1ySyxHQUlSZSxLQUFLOVYsSUFBSWUsSUFBSWlGLFFBQVE4UCxLQUFLOVYsSUFBSW9RLEtBQUtDLFVBQXVCLDBDQUMxRHlGLEtBQUs5VixJQUFJc2IsS0FBSyxpQkFBa0IsQ0FDOUJtRSxNQUFPM0osS0FBSzlWLElBQUlvUSxLQUFLQyxVQUF1Qix5Q0FDNUMrTyxLQUFNLElBQUkrUCxLQUFnQk4sS0FNNUIsTUFKd0MsQ0FDdEM3b0IsU0FBUyxFQUNUb1osS0FBTSxJQUFJK1AsS0FBZ0JOLElBTWhDbnBCLGdCQUFpQmxGLEdBQ2YsTUFDTTJ1QixFQURpQjN1QixFQUFRaUIsS0FBS2lDLEdBQWlCcXJCLEdBQXdCalosS0FBSzlWLElBQUswRCxLQUFPc00sUUFBT3RNLEdBQVFBLEVBQUtzQyxVQUMvRXZFLEtBQUlpQyxHQUFRQSxFQUFLc3JCLFVBQ3BELEdBQUlHLEVBQVk5dEIsT0FBUyxFQUFHLENBRzFCLE1BQU0rVyxRQUFldEMsS0FBS29TLFlBQVksWUFBYWlILEVBQWFyWixLQUFLOVYsSUFBSW1ZLFNBQ3pFLEdBQUtDLEVBQU9pSCxLQWNMLENBQ0wsTUFBTXRLLEVBQU1lLEtBQUs5VixJQUFJb1EsS0FBS0MsVUFBdUIsZ0RBQWlELENBQ2hHZ1AsS0FBTSxHQUFHakgsRUFBT2lILE9BQ2hCdFksS0FBTXFSLEVBQU9yUixPQUVmK08sS0FBSzlWLElBQUllLElBQUlDLE1BQU0rVCxHQUNuQmUsS0FBSzlWLElBQUlzYixLQUFLLGtCQUFtQixDQUMvQm1FLE1BQU8zSixLQUFLOVYsSUFBSW9RLEtBQUtDLFVBQXVCLDBDQUM1QytPLEtBQU1ySyxJQU1SLE1BSnlDLENBQ3ZDL08sU0FBUyxFQUNUb1osS0FBTXJLLEdBekJSb2EsRUFBWW5jLFNBQVN3RCxJQUNuQlYsS0FBSzlWLElBQUl5UixhQUFhbVosaUJBQWlCcFUsTUFFekNWLEtBQUs5VixJQUFJZSxJQUFJaUYsUUFBUThQLEtBQUs5VixJQUFJb1EsS0FBS0MsVUFBdUIsNENBQzFEeUYsS0FBSzlWLElBQUlzYixLQUFLLG1CQUFvQixDQUNoQ21FLE1BQU8zSixLQUFLOVYsSUFBSW9RLEtBQUtDLFVBQXVCLDJDQUM1QytPLEtBQU0rUCxJQU1SLE1BSndDLENBQ3RDbnBCLFNBQVMsRUFDVG9aLEtBQU0rUCxHQW1CTCxDQUNMLE1BQU1wYSxFQUFNZSxLQUFLOVYsSUFBSW9RLEtBQUtDLFVBQXVCLGdEQUNqRHlGLEtBQUs5VixJQUFJZSxJQUFJQyxNQUFNK1QsR0FDbkJlLEtBQUs5VixJQUFJc2IsS0FBSyxrQkFBbUIsQ0FDL0JtRSxNQUFPM0osS0FBSzlWLElBQUlvUSxLQUFLQyxVQUF1QiwwQ0FDNUMrTyxLQUFNckssSUFNUixNQUp5QyxDQUN2Qy9PLFNBQVMsRUFDVG9aLEtBQU1ySyxJQU1aclAsYUFBY2xGLEVBQW1CRyxFQUFpQyxHQUFJd0osR0FDcEUsTUFDTWdsQixFQURpQjN1QixFQUFRaUIsS0FBS2lDLEdBQWlCcXJCLEdBQXdCalosS0FBSzlWLElBQUswRCxLQUFPc00sUUFBT3RNLEdBQVFBLEVBQUtzQyxVQUMvRXZFLEtBQUlpQyxHQUFRQSxFQUFLc3JCLFVBQ3BELEdBQUlHLEVBQVk5dEIsT0FBUyxFQUFHLENBRzFCLE1BQU0rVyxRQUFldEMsS0FBS29TLFlBQVksU0FBVWlILEVBQWFyWixLQUFLOVYsSUFBSW1ZLFFBQVN4WCxFQUFTd0osR0FDeEYsR0FBS2lPLEVBQU9pSCxLQVdMLENBQ0wsTUFBTXRLLEVBQU1lLEtBQUs5VixJQUFJb1EsS0FBS0MsVUFBdUIsNkNBQThDLENBQzdGZ1AsS0FBTSxHQUFHakgsRUFBT2lILE9BQ2hCdFksS0FBTXFSLEVBQU9yUixPQUVmK08sS0FBSzlWLElBQUllLElBQUlDLE1BQU0rVCxHQUNuQmUsS0FBSzlWLElBQUlzYixLQUFLLGVBQWdCLENBQzVCbUUsTUFBTzNKLEtBQUs5VixJQUFJb1EsS0FBS0MsVUFBdUIsdUNBQzVDK08sS0FBTXJLLElBTVIsTUFKeUMsQ0FDdkMvTyxTQUFTLEVBQ1RvWixLQUFNckssR0F0QlJlLEtBQUs5VixJQUFJZSxJQUFJaUYsUUFBUThQLEtBQUs5VixJQUFJb1EsS0FBS0MsVUFBdUIseUNBQzFEeUYsS0FBSzlWLElBQUlzYixLQUFLLGdCQUFpQixDQUM3Qm1FLE1BQU8zSixLQUFLOVYsSUFBSW9RLEtBQUtDLFVBQXVCLHdDQUM1QytPLEtBQU0rUCxJQU1SLE1BSndDLENBQ3RDbnBCLFNBQVMsRUFDVG9aLEtBQU0rUCxHQW1CTCxDQUNMLE1BQU1wYSxFQUFNZSxLQUFLOVYsSUFBSW9RLEtBQUtDLFVBQXVCLDZDQUNqRHlGLEtBQUs5VixJQUFJZSxJQUFJQyxNQUFNK1QsR0FDbkJlLEtBQUs5VixJQUFJc2IsS0FBSyxlQUFnQixDQUM1Qm1FLE1BQU8zSixLQUFLOVYsSUFBSW9RLEtBQUtDLFVBQXVCLHVDQUM1QytPLEtBQU1ySyxJQU1SLE1BSnlDLENBQ3ZDL08sU0FBUyxFQUNUb1osS0FBTXJLLElBTUpyUCxrQkFBbUJ6RixFQUFhcXFCLEVBQW1COEUsRUFBZXp1QixFQUFpQyxHQUFJd0osRUFBbUIsSUFFaEksTUFBTXpKLEVBQVdDLEVBQVFELFVBQVlvVixLQUFLOVYsSUFBSW1RLFVBQStCLHFCQUN2RTFQLEVBQVFFLEVBQVFGLE9BQVNxVixLQUFLOVYsSUFBSW1RLFVBQStCLGtCQUN2RSxhQUFhLElBQUk5SixTQUFTQyxZQUN4QixJQUFJOFEsRUFBTyxDQUFDblgsR0FBSzRnQixPQUFPeUosR0FBU3pKLE9BQU8sa0JBQWtCQSxPQUFPLFVBQzdEbmdCLElBQ0YwVyxFQUFPQSxFQUFLeUosT0FBTyxjQUFjbmdCLE1BRS9CRCxJQUNGMlcsRUFBT0EsRUFBS3lKLE9BQU8sV0FBV3BnQixNQUVoQyxJQUNFLE1BQU00dUIsRUFBTXRELFdBQU0sTUFBTzNVLEVBQU0sQ0FBRWxQLElBQUtrbkIsRUFBT2psQixJQUFLNUcsT0FBT3lxQixPQUFPLEdBQUkvbEIsUUFBUWtDLElBQUtBLEtBRWpGLElBQUlrUSxFQUFTLGFBQ2JnVixFQUFJckQsdUJBQVEzVyxHQUFHLFFBQVN0TyxJQUN0QnNULEdBQVV0VCxLQUNUdW9CLEtBQUtybkIsUUFBUStqQixrQkFFaEJxRCxFQUFJRSx1QkFBUWxhLEdBQUcsUUFBU3RPLElBQ3RCc1QsR0FBVXRULEtBQ1R1b0IsS0FBS3JuQixRQUFRc25CLFFBRWhCRixFQUFJaGEsR0FBRyxTQUFVZ0ssSUFJYi9ZLEVBSEcrWSxFQUdLLENBQUVBLEtBQU1BLEVBQU10WSxLQUFNc1QsR0FGcEIsQ0FBRWdGLEtBQU0sRUFBR3RZLEtBQU1zVCxPQU03QmdWLEVBQUloYSxHQUFHLFNBQVVOLElBQ2ZlLEtBQUs5VixJQUFJZSxJQUFJQyxNQUFNK1QsR0FDbkJlLEtBQUs5VixJQUFJZSxJQUFJQyxNQUFNLHdCQUNuQjhVLEtBQUs5VixJQUFJc2IsS0FBSzdELEdBQWN3RixPQUFRLDJCQUV0QyxNQUFPbmMsR0FDUGdWLEtBQUs5VixJQUFJZSxJQUFJQyxNQUFNRixHQUNuQmdWLEtBQUs5VixJQUFJc2IsS0FBSzdELEdBQWN3RixPQUFRbmMsUUFXNUMsTUFBTWl1QixHQUEwQixDQUFDL3VCLEVBQWE4SCxLQUM1QyxNQUFNdEIsRUFBTSxDQUNWUixTQUFTLEVBQ1RrcEIsU0FBVSxHQUNWRixRQUFTLElBRUw1VyxFQUFTOVAsR0FBcUJSLEVBQVk5SCxFQUFJZSxLQUNwRCxJQUFLcVgsRUFDSCxPQUFPNVIsRUFJVCxNQUFNd29CLEVBQVVybUIsR0FBb0J5UCxFQUFRcFksRUFBSWUsS0FDaEQsT0FBS2l1QixFQUdFLENBQ0xocEIsU0FBUyxFQUNUa3BCLFNBQVU5VyxFQUNWNFcsUUFBQUEsR0FMT3hvQixHQy9QTGdwQixHQUFxRCxDQUN6RCxRQ2JtQixDQUNuQkMsY0FBZSxPQUNmQyxlQUFnQixlQUNoQkMsMkJBQTRCLGVBQzVCQyxxQkFBc0IsK0JBQ3RCQyxhQUFjLFlBQ2RDLFlBQWEsT0FHYkMsWUFBYSxRQUNiQyxrQkFBbUIsVUFDbkJDLDBCQUEyQixTQUMzQkMsa0NBQW1DLGNBR25DQyxhQUFjLE9BQ2RDLGtCQUFtQixPQUNuQkMsMEJBQTJCLHdCQUMzQkMsdUJBQXdCLFVBQ3hCQywrQkFBZ0Msc0JBQ2hDQyxxQkFBc0IsU0FDdEJDLDZCQUE4QixXQUc5QkMsZ0JBQWlCLFNBQ2pCQyw0QkFBNkIsVUFDN0JDLGdDQUFpQyxjQUNqQ0MsdUJBQXdCLFdBQ3hCQyxxQkFBc0IsU0FDdEJDLHFCQUFzQixTQUN0QkMsMEJBQTJCLFVBQzNCQyx3QkFBeUIsU0FDekJDLDZCQUE4QixvQkFDOUJDLDZCQUE4QixXQUM5QkMsZ0NBQWlDLHdCQUNqQ0Msa0NBQW1DLHNCQUduQ0Msb0JBQXFCLFNBQ3JCQyw0QkFBNkIsUUFDN0JDLDZCQUE4QixhQUM5QkMsOEJBQStCLGNBQy9CQywwQkFBMkIsVUFDM0JDLDJCQUE0QixXQUM1QkMseUJBQTBCLFNBQzFCQyw2QkFBOEIsUUFDOUJDLHlCQUEwQixTQUMxQkMsNEJBQTZCLFNBQzdCQyw4QkFBK0IsVUFDL0JDLGtDQUFtQyxnQkFDbkNDLGlDQUFrQyxnQkFDbENDLGlDQUFrQyxXQUNsQ0Msc0NBQXVDLHNCQUN2Q0Msb0NBQXFDLGlCQUNyQ0MscUNBQXNDLDJDQUN0Q0MseUJBQTBCLE9BQzFCQyw2QkFBOEIsMkVBQzlCQyxpQ0FBa0MsS0FDbENDLGdDQUFpQyxLQUdqQ0MsY0FBZSxTQUNmQyxvQkFBcUIsVUFDckJDLG1CQUFvQixRQUNwQkMsbUJBQW9CLFNBQ3BCQyxxQkFBc0IsUUFDdEJDLHdCQUF5QixVQUN6QkMsMkJBQTRCLG1CQUM1QkMsNkJBQThCLFVBQzlCQywyQkFBNEIsV0FDNUJDLGdDQUFpQyxzQkFHakNDLGFBQWMsTUFDZEMsdUJBQXdCLGNBQ3hCQyx1QkFBd0IsY0FDeEJDLG9CQUFxQixXQUNyQkMsa0JBQW1CLFNBQ25CQyxpQkFBa0IsU0FDbEJDLHFCQUFzQixTQUN0QkMsa0JBQW1CLFNBQ25CQywwQkFBMkIsV0FDM0JDLDBCQUEyQixRQUMzQkMsNkJBQThCLGdCQUM5QkMseUJBQTBCLHFDQUcxQkMsYUFBYyxRQUNkQyxzQkFBdUIsYUFDdkJDLHNCQUF1QixRQUN2QkMsMEJBQTJCLGdCQUMzQkMsbUJBQW9CLFFBQ3BCQyxtQkFBb0IsT0FDcEJDLDhCQUErQixVQUMvQkMsOEJBQStCLGFBQy9CQyxrQ0FBbUMsYUFDbkNDLDJCQUE0QixVQUM1QkMsMkJBQTRCLDJCQUc1QkMsYUFBYyxNQUNkQyxvQkFBcUIsV0FDckJDLHNCQUF1QixRQUN2QkMsc0JBQXVCLFVBQ3ZCQyxrQkFBbUIsU0FDbkJDLGlCQUFrQixTQUNsQkMscUJBQXNCLFNBQ3RCQyw4QkFBK0IsYUFDL0JDLHlCQUEwQixZQUMxQkMsOEJBQStCLFFBQy9CQyw4QkFBK0IsVUFDL0JDLHlCQUEwQiwrQkFDMUJDLDZCQUE4QixjQUM5QkMsMEJBQTJCLFdBRzNCQyxtQkFBb0IsU0FDcEJDLHdCQUF5QixTQUN6QkMsOEJBQStCLFFBQy9CQyw0QkFBNkIsUUFDN0JDLDRCQUE2QixPQUM3QkMsd0JBQXlCLFNBQ3pCQyxnQ0FBaUMsU0FDakNDLDZCQUE4QixVQUM5QkMsZ0NBQWlDLGdDQUNqQ0Msc0NBQXVDLGFBQ3ZDQyxvQ0FBcUMsUUFDckNDLG9DQUFxQyxPQUNyQ0MsZ0NBQWlDLFdBQ2pDQyx3Q0FBeUMsVUFDekNDLHFDQUFzQyxzQkFHdENDLGlCQUFrQixTQUNsQkMsc0JBQXVCLE9BQ3ZCQyxzQkFBdUIsT0FDdkJDLDBCQUEyQixRQUMzQkMsMEJBQTJCLE9BQzNCQyw0QkFBNkIsT0FDN0JDLHVDQUF3QyxTQUN4Q0MsNEJBQTZCLFNBQzdCQywyQkFBNEIsVUFDNUJDLDhCQUErQixTQUMvQkMsMkJBQTRCLFdBQzVCQywyQkFBNEIsU0FDNUJDLDBCQUEyQixVQUMzQkMsOEJBQStCLGFBQy9CQyw4QkFBK0IsT0FDL0JDLG9DQUFxQyw0QkFDckNDLCtDQUFnRCxTQUNoREMsb0NBQXFDLFdBQ3JDQyxtQ0FBb0Msc0JBQ3BDQyxzQ0FBdUMsVUFDdkNDLG1DQUFvQyxjQUNwQ0MsbUNBQW9DLFVBQ3BDQyxrQ0FBbUMsVUFFbkNDLGlDQUFrQyxTQUNsQ0MseUNBQTBDLFlBQzFDQyxnQ0FBaUMsU0FDakNDLHdDQUF5QyxVQUN6Q0Msd0NBQXlDLFNBQ3pDQyxnREFBaUQsWUFDakRDLGtDQUFtQyxTQUNuQ0MsMENBQTJDLFFBQzNDQyxnQ0FBaUMsU0FDakNDLHdDQUF5QyxVQUN6Q0Msd0NBQXlDLGFBQ3pDQyw0Q0FBNkMsY0FDN0NDLHFDQUFzQyxlQUN0Q0MsNkNBQThDLFlBQzlDQyxxQ0FBc0MsV0FDdENDLDZDQUE4QyxZQUM5Q0MscUNBQXNDLFdBQ3RDQyw2Q0FBOEMsWUFDOUNDLG9DQUFxQyxTQUNyQ0MsNENBQTZDLFVBRTdDQyxzQkFBdUIsVUFDdkJDLHNCQUF1QixVQUV2QkMseUJBQTBCLFNBQzFCQyxpQ0FBa0MsY0FDbENDLDJCQUE0QixXQUM1QkMsbUNBQW9DLFVBQ3BDQywrQkFBZ0MsU0FDaENDLHVDQUF3QyxVQUN4Q0MsMEJBQTJCLFdBQzNCQyxrQ0FBbUMsVUFDbkNDLDZCQUE4QixTQUM5QkMscUNBQXNDLFFBQ3RDQyw4QkFBK0IsU0FDL0JDLHNDQUF1QyxRQUN2Q0MsbUNBQW9DLGFBQ3BDQywyQ0FBNEMsY0FDNUNDLCtCQUFnQyxVQUNoQ0MsdUNBQXdDLFFBQ3hDQyxzQ0FBdUMsV0FDdkNDLDBCQUEyQixXQUMzQkMsa0NBQW1DLFVBQ25DQyw4QkFBK0IsU0FDL0JDLHNDQUF1QyxhQUN2Q0MsOEJBQStCLGFBQy9CQyxzQ0FBdUMsZ0JBR3ZDQyxzQ0FBdUMsU0FDdkNDLHFDQUFzQyxTQUN0Q0MsNENBQTZDLHNDQUM3Q0MsMENBQTJDLHlCQUMzQ0Msd0NBQXlDLFNBQ3pDQyx1Q0FBd0MsU0FDeENDLDhDQUErQyxzQ0FDL0NDLDZDQUE4QyxrQkFDOUNDLHFDQUFzQyxTQUN0Q0Msb0NBQXFDLFNBQ3JDQywyQ0FBNEMsc0NBQzVDQywwQ0FBMkMsbUJEM00zQyxRRVo2QixDQUM3Qi9MLGNBQWUsT0FDZkMsZUFBZ0IsY0FDaEJDLDJCQUE0QixhQUM1QkMscUJBQXNCLCtCQUN0QkMsYUFBYyxZQUNkQyxZQUFhLE9BR2JDLFlBQWEsUUFDYkMsa0JBQW1CLFVBQ25CQywwQkFBMkIsU0FDM0JDLGtDQUFtQyxjQUduQ0MsYUFBYyxLQUNkQyxrQkFBbUIsU0FDbkJDLDBCQUEyQix3QkFDM0JDLHVCQUF3QixTQUN4QkMsK0JBQWdDLHNCQUNoQ0MscUJBQXNCLFNBQ3RCQyw2QkFBOEIsWUFHOUJDLGdCQUFpQixTQUNqQkMsNEJBQTZCLFVBQzdCQyxnQ0FBaUMsY0FDakNDLHVCQUF3QixXQUN4QkMscUJBQXNCLFNBQ3RCQyxxQkFBc0IsU0FDdEJDLDBCQUEyQixTQUMzQkMsd0JBQXlCLFNBQ3pCQyw2QkFBOEIsb0JBQzlCQyw2QkFBOEIsV0FDOUJDLGdDQUFpQyx3QkFDakNDLGtDQUFtQyxzQkFHbkNDLG9CQUFxQixTQUNyQkMsNEJBQTZCLFFBQzdCQyw2QkFBOEIsYUFDOUJDLDhCQUErQixjQUMvQkMsMEJBQTJCLFVBQzNCQywyQkFBNEIsV0FDNUJDLHlCQUEwQixTQUMxQkMsNkJBQThCLFFBQzlCQyx5QkFBMEIsU0FDMUJDLDRCQUE2QixTQUM3QkMsOEJBQStCLFNBQy9CQyxrQ0FBbUMsZ0JBQ25DQyxpQ0FBa0MsZ0JBQ2xDQyxpQ0FBa0MsV0FDbENDLHNDQUF1QyxzQkFDdkNDLG9DQUFxQyxpQkFDckNDLHFDQUFzQywyQ0FDdENDLHlCQUEwQixnQkFDMUJDLDZCQUE4Qiw0SUFDOUJDLGlDQUFrQyxPQUNsQ0MsZ0NBQWlDLFFBR2pDQyxjQUFlLFNBQ2ZDLG9CQUFxQixVQUNyQkMsbUJBQW9CLFNBQ3BCQyxtQkFBb0IsU0FDcEJDLHFCQUFzQixTQUN0QkMsd0JBQXlCLFNBQ3pCQywyQkFBNEIsbUJBQzVCQyw2QkFBOEIsVUFDOUJDLDJCQUE0QixXQUM1QkMsZ0NBQWlDLHNCQUdqQ0MsYUFBYyxNQUNkQyx1QkFBd0IsY0FDeEJDLHVCQUF3QixjQUN4QkMsb0JBQXFCLFdBQ3JCQyxrQkFBbUIsU0FDbkJDLGlCQUFrQixTQUNsQkMscUJBQXNCLFNBQ3RCQyxrQkFBbUIsU0FDbkJDLDBCQUEyQixXQUMzQkMsMEJBQTJCLFFBQzNCQyw2QkFBOEIsZ0JBQzlCQyx5QkFBMEIscUNBRzFCQyxhQUFjLFFBQ2RDLHNCQUF1QixhQUN2QkMsc0JBQXVCLFFBQ3ZCQywwQkFBMkIsZ0JBQzNCQyxtQkFBb0IsUUFDcEJDLG1CQUFvQixVQUNwQkMsOEJBQStCLFVBQy9CQyw4QkFBK0IsYUFDL0JDLGtDQUFtQyxhQUNuQ0MsMkJBQTRCLFVBQzVCQywyQkFBNEIsMkJBRzVCQyxhQUFjLE1BQ2RDLG9CQUFxQixXQUNyQkMsc0JBQXVCLFFBQ3ZCQyxzQkFBdUIsVUFDdkJDLGtCQUFtQixTQUNuQkMsaUJBQWtCLFNBQ2xCQyxxQkFBc0IsU0FDdEJDLDhCQUErQixhQUMvQkMseUJBQTBCLFlBQzFCQyw4QkFBK0IsUUFDL0JDLDhCQUErQixVQUMvQkMseUJBQTBCLCtCQUMxQkMsNkJBQThCLGNBQzlCQywwQkFBMkIsV0FHM0JDLG1CQUFvQixTQUNwQkMsd0JBQXlCLFVBQ3pCQyw4QkFBK0IsYUFDL0JDLDRCQUE2QixRQUM3QkMsNEJBQTZCLE9BQzdCQyx3QkFBeUIsU0FDekJFLDZCQUE4QixTQUM5QkQsZ0NBQWlDLFNBQ2pDRSxnQ0FBaUMsZ0NBQ2pDQyxzQ0FBdUMsYUFDdkNDLG9DQUFxQyxRQUNyQ0Msb0NBQXFDLFNBQ3JDQyxnQ0FBaUMsV0FDakNDLHdDQUF5QyxVQUN6Q0MscUNBQXNDLHNCQUd0Q0MsaUJBQWtCLFNBQ2xCQyxzQkFBdUIsT0FDdkJDLHNCQUF1QixPQUN2QkMsMEJBQTJCLFFBQzNCQywwQkFBMkIsT0FDM0JDLDRCQUE2QixPQUM3QkMsdUNBQXdDLFNBQ3hDQyw0QkFBNkIsU0FDN0JDLDJCQUE0QixTQUM1QkMsOEJBQStCLFNBQy9CQywyQkFBNEIsV0FDNUJDLDJCQUE0QixTQUM1QkMsMEJBQTJCLFVBQzNCQyw4QkFBK0IsYUFDL0JDLDhCQUErQixPQUMvQkMsb0NBQXFDLDRCQUNyQ0MsK0NBQWdELFNBQ2hEQyxvQ0FBcUMsV0FDckNDLG1DQUFvQyxzQkFDcENDLHNDQUF1QyxVQUN2Q0MsbUNBQW9DLGNBQ3BDQyxtQ0FBb0MsVUFDcENDLGtDQUFtQyxVQUVuQ0MsaUNBQWtDLFNBQ2xDQyx5Q0FBMEMsWUFDMUNDLGdDQUFpQyxTQUNqQ0Msd0NBQXlDLFVBQ3pDQyx3Q0FBeUMsU0FDekNDLGdEQUFpRCxZQUNqREMsa0NBQW1DLFNBQ25DQywwQ0FBMkMsUUFDM0NDLGdDQUFpQyxTQUNqQ0Msd0NBQXlDLFVBQ3pDQyx3Q0FBeUMsU0FDekNDLDRDQUE2QyxjQUM3Q0MscUNBQXNDLFdBQ3RDQyw2Q0FBOEMsWUFDOUNDLHFDQUFzQyxXQUN0Q0MsNkNBQThDLFlBQzlDQyxxQ0FBc0MsV0FDdENDLDZDQUE4QyxZQUM5Q0Msb0NBQXFDLFNBQ3JDQyw0Q0FBNkMsVUFFN0NDLHNCQUF1QixVQUN2QkMsc0JBQXVCLFVBRXZCQyx5QkFBMEIsU0FDMUJDLGlDQUFrQyxjQUNsQ0MsMkJBQTRCLFdBQzVCQyxtQ0FBb0MsVUFDcENDLCtCQUFnQyxTQUNoQ0MsdUNBQXdDLFVBQ3hDQywwQkFBMkIsV0FDM0JDLGtDQUFtQyxVQUNuQ0MsNkJBQThCLFNBQzlCQyxxQ0FBc0MsUUFDdENDLDhCQUErQixTQUMvQkMsc0NBQXVDLFFBQ3ZDQyxtQ0FBb0MsYUFDcENDLDJDQUE0QyxjQUM1Q0MsK0JBQWdDLFVBQ2hDQyx1Q0FBd0MsUUFDeENDLHNDQUF1QyxXQUN2Q0MsMEJBQTJCLFdBQzNCQyxrQ0FBbUMsVUFDbkNDLDhCQUErQixTQUMvQkMsc0NBQXVDLGFBQ3ZDQyw4QkFBK0IsYUFDL0JDLHNDQUF1QyxnQkFHdkNDLHNDQUF1QyxTQUN2Q0MscUNBQXNDLFNBQ3RDQyw0Q0FBNkMsc0NBQzdDQywwQ0FBMkMsNEJBQzNDQyx3Q0FBeUMsU0FDekNDLHVDQUF3QyxTQUN4Q0MsOENBQStDLHNDQUMvQ0MsNkNBQThDLG9CQUM5Q0MscUNBQXNDLFNBQ3RDQyxvQ0FBcUMsU0FDckNDLDJDQUE0QyxzQ0FDNUNDLDBDQUEyQyxxQkY1TTNDQyxHR2IwQixDQUMxQmhNLGNBQWUsZ0JBQ2ZDLGVBQWdCLDZCQUNoQkMsMkJBQTRCLHlDQUM1QkMscUJBQXNCLHVGQUN0QkMsYUFBYyx1Q0FDZEMsWUFBYSx3QkFHYkMsWUFBYSxRQUNiQyxrQkFBbUIsWUFDbkJDLDBCQUEyQiwyQkFDM0JDLGtDQUFtQyxlQUduQ0MsYUFBYyxRQUNkQyxrQkFBbUIsV0FDbkJDLDBCQUEyQiw0QkFDM0JDLHVCQUF3QixpQkFDeEJDLCtCQUFnQyx1QkFDaENDLHFCQUFzQixlQUN0QkMsNkJBQThCLDRCQUc5QkMsZ0JBQWlCLFlBQ2pCQyw0QkFBNkIsWUFDN0JDLGdDQUFpQyxnQkFDakNDLHVCQUF3QixhQUN4QkMscUJBQXNCLFdBQ3RCQyxxQkFBc0IsV0FDdEJDLDBCQUEyQixpQkFDM0JDLHdCQUF5QixpQkFDekJDLDZCQUE4QixxQkFDOUJDLDZCQUE4QixZQUM5QkMsZ0NBQWlDLHlCQUNqQ0Msa0NBQW1DLHVCQUduQ0Msb0JBQXFCLGdCQUNyQkMsNEJBQTZCLHFCQUM3QkMsNkJBQThCLGVBQzlCQyw4QkFBK0IsZ0JBQy9CQywwQkFBMkIsWUFDM0JDLDJCQUE0QixhQUM1QkMseUJBQTBCLFdBQzFCQyw2QkFBOEIsZUFDOUJDLHlCQUEwQixXQUMxQkMsNEJBQTZCLGlCQUM3QkMsOEJBQStCLGlCQUMvQkMsa0NBQW1DLGlCQUNuQ0MsaUNBQWtDLGlCQUNsQ0MsaUNBQWtDLFlBQ2xDQyxzQ0FBdUMsc0JBQ3ZDQyxvQ0FBcUMsa0JBQ3JDQyxxQ0FBc0MsNENBQ3RDQyx5QkFBMEIsT0FDMUJHLGdDQUFpQyxLQUNqQ0QsaUNBQWtDLEtBQ2xDRCw2QkFBOEIsMkVBRzlCRyxjQUFlLFNBQ2ZDLG9CQUFxQixZQUNyQkMsbUJBQW9CLGdCQUNwQkMsbUJBQW9CLFdBQ3BCQyxxQkFBc0IsYUFDdEJDLHdCQUF5QixpQkFDekJDLDJCQUE0QixvQkFDNUJDLDZCQUE4QixXQUM5QkMsMkJBQTRCLFlBQzVCQyxnQ0FBaUMsdUJBR2pDQyxhQUFjLFFBQ2RDLHVCQUF3QixnQkFDeEJDLHVCQUF3QixnQkFDeEJDLG9CQUFxQixhQUNyQkMsa0JBQW1CLFdBQ25CQyxpQkFBa0IsVUFDbEJDLHFCQUFzQixpQkFDdEJDLGtCQUFtQixXQUNuQkMsMEJBQTJCLFlBQzNCQywwQkFBMkIsU0FDM0JDLDZCQUE4QixpQkFDOUJDLHlCQUEwQixzQ0FHMUJDLGFBQWMsUUFDZEMsc0JBQXVCLGVBQ3ZCQyxzQkFBdUIsZUFDdkJDLDBCQUEyQixtQkFDM0JDLG1CQUFvQixpQkFDcEJDLG1CQUFvQixZQUNwQkMsOEJBQStCLCtDQUMvQkMsOEJBQStCLGlEQUMvQkMsa0NBQW1DLGlEQUNuQ0MsMkJBQTRCLFVBQzVCQywyQkFBNEIsNEJBRzVCQyxhQUFjLFFBQ2RDLG9CQUFxQixhQUNyQkMsc0JBQXVCLGVBQ3ZCQyxzQkFBdUIsd0JBQ3ZCQyxrQkFBbUIsV0FDbkJDLGlCQUFrQixVQUNsQkMscUJBQXNCLGlCQUN0QkMsOEJBQStCLHVCQUMvQkMseUJBQTBCLDJCQUMxQkMsOEJBQStCLFNBQy9CQyw4QkFBK0Isb0NBQy9CQyx5QkFBMEIsZ0NBQzFCQyw2QkFBOEIsZUFDOUJDLDBCQUEyQixZQUczQkMsbUJBQW9CLFNBQ3BCQyx3QkFBeUIsV0FDekJDLDhCQUErQixlQUMvQkMsNEJBQTZCLGVBQzdCQyw0QkFBNkIsZUFDN0JDLHdCQUF5QixXQUN6QkMsZ0NBQWlDLG1CQUNqQ0MsNkJBQThCLGlCQUM5QkMsZ0NBQWlDLGlDQUNqQ0Msc0NBQXVDLGVBQ3ZDQyxvQ0FBcUMsU0FDckNDLG9DQUFxQywyQkFDckNDLGdDQUFpQyxZQUNqQ0Msd0NBQXlDLHdDQUN6Q0MscUNBQXNDLHVCQUd0Q0MsaUJBQWtCLGVBQ2xCQyxzQkFBdUIsV0FDdkJDLHNCQUF1QixXQUN2QkMsMEJBQTJCLGVBQzNCQywwQkFBMkIsZUFDM0JDLDRCQUE2QixrQkFDN0JDLHVDQUF3Qyw2QkFDeENDLDRCQUE2QixrQkFDN0JDLDJCQUE0QixpQkFDNUJDLDhCQUErQixtQkFDL0JDLDJCQUE0QixzQkFDNUJDLDJCQUE0QixnQkFDNUJDLDBCQUEyQixxQkFDM0JDLDhCQUErQixjQUMvQkMsOEJBQStCLGFBQy9CQyxvQ0FBcUMsNkJBQ3JDQywrQ0FBZ0QseUNBQ2hEQyxvQ0FBcUMsWUFDckNDLG1DQUFvQyx1QkFDcENDLHNDQUF1Qyx3Q0FDdkNDLG1DQUFvQyxlQUNwQ0MsbUNBQW9DLFdBQ3BDQyxrQ0FBbUMsV0FFbkNxQixzQkFBdUIsb0JBQ3ZCQyxzQkFBdUIsZ0JBRXZCckIsaUNBQWtDLDJCQUNsQ0MseUNBQTBDLG9DQUMxQ0MsZ0NBQWlDLHFCQUNqQ0Msd0NBQXlDLCtCQUN6Q0Msd0NBQXlDLHVDQUN6Q0MsZ0RBQWlELGdEQUNqREMsa0NBQW1DLHNCQUNuQ0MsMENBQTJDLHdCQUMzQ0MsZ0NBQWlDLHFCQUNqQ0Msd0NBQXlDLDhCQUN6Q0Msd0NBQXlDLHFCQUN6Q0MsNENBQTZDLDRDQUM3Q0MscUNBQXNDLDhDQUN0Q0MsNkNBQThDLG9DQUM5Q0MscUNBQXNDLDJCQUN0Q0MsNkNBQThDLG1DQUM5Q0MscUNBQXNDLDJCQUN0Q0MsNkNBQThDLHdDQUM5Q0Msb0NBQXFDLHlCQUNyQ0MsNENBQTZDLG1DQUU3Q0cseUJBQTBCLG9CQUMxQkMsaUNBQWtDLHdDQUNsQ0MsMkJBQTRCLHVDQUM1QkMsbUNBQW9DLDRDQUNwQ0MsK0JBQWdDLHdCQUNoQ0MsdUNBQXdDLGtDQUN4Q0MsMEJBQTJCLDhCQUMzQkMsa0NBQW1DLHlDQUNuQ0MsNkJBQThCLHFCQUM5QkMscUNBQXNDLHdCQUN0Q0MsOEJBQStCLHNCQUMvQkMsc0NBQXVDLHdCQUN2Q0MsbUNBQW9DLDRDQUNwQ0MsMkNBQTRDLGlEQUM1Q0MsK0JBQWdDLDBCQUNoQ0MsdUNBQXdDLHdCQUN4Q0Msc0NBQXVDLDJDQUN2Q0MsMEJBQTJCLDhCQUMzQkMsa0NBQW1DLHlDQUNuQ0MsOEJBQStCLHFCQUMvQkMsc0NBQXVDLHlDQUN2Q0MsOEJBQStCLHFDQUMvQkMsc0NBQXVDLG9EQUV2Q0Msc0NBQXVDLGdDQUN2Q0MscUNBQXNDLDZCQUN0Q0MsNENBQTZDLDZFQUM3Q0MsMENBQTJDLDBGQUMzQ0Msd0NBQXlDLGtDQUN6Q0MsdUNBQXdDLDBCQUN4Q0MsOENBQStDLDBFQUMvQ0MsNkNBQThDLDREQUM5Q0MscUNBQXNDLDhCQUN0Q0Msb0NBQXFDLHVCQUNyQ0MsMkNBQTRDLHVFQUM1Q0MsMENBQTJDLDJESHhNN0MsTUFBTUUsR0FJSjdsQixZQUFhN1YsR0FDWDhWLEtBQUs5VixJQUFNQSxFQUNYOFYsS0FBSzZsQixjQUFnQixJQUFJQyxnQkFBY3BNLElBQ3ZDLElBQUlxTSxFQUFXL2xCLEtBQUs5VixJQUFJbVEsVUFBa0Isc0JBQXdCLFFBQzdEcWYsR0FBYXFNLEtBQ2hCQSxFQUFXLFNBRWIvbEIsS0FBSzFGLEtBQU8sSUFBSTByQixPQUFLLENBQ25CQyxRQUFTam1CLEtBQUs2bEIsY0FDZEssZ0JBQWlCSCxJQUVuQi9sQixLQUFLbW1CLGlCQUdDQSxpQkFDTixNQUFNQyxFQUFhcG1CLEtBQUtxbUIsc0JBQ1ZyMkIsVUFBR3MyQixZQUFZRixFQUFZLENBQ3ZDRyxlQUFlLElBRVhycEIsU0FBUTdOLElBQ1osR0FBSUEsRUFBS20zQixVQUFZbjNCLEVBQUt5QyxLQUFLMjBCLFNBQVMsUUFBUyxDQUMvQyxNQUFNQyxFQUFlejVCLFVBQUtqQixLQUFLbzZCLEVBQVkvMkIsRUFBS3lDLE1BQzFDNjBCLEVBQVczMkIsVUFBR2lPLGFBQWF5b0IsRUFBYyxRQUMvQyxJQUNFLE1BQU1FLEVBQWNDLFdBQUszUyxLQUFLeVMsR0FDOUJqTixHQUFhcnFCLEVBQUt5QyxLQUFLeEUsUUFBUSxTQUFVLEtBQU9zNUIsRUFDaEQsTUFBTzU3QixHQUNQMEgsUUFBUXhILE1BQU1GLFFBTWRxN0Isc0JBQ04sTUFBTUQsRUFBYW41QixVQUFLakIsS0FBS2dVLEtBQUs5VixJQUFJbVksUUFBUyxZQUkvQyxPQUhLclMsVUFBRzgyQixlQUFlVixJQUNyQnAyQixVQUFHc08sY0FBYzhuQixHQUVaQSxFQUdUN3JCLFVBQTRCbE0sRUFBc0JpVCxHQUNoRCxPQUFPdEIsS0FBSzFGLEtBQUtDLFVBQVVsTSxFQUFLaVQsSUFBU2pULEVBRzNDd1IsWUFBYWttQixHQUNYL2xCLEtBQUsxRixLQUFLdUYsWUFBWWttQixHQUN0Qi9sQixLQUFLOVYsSUFBSWtSLFdBQVcsQ0FDbEIsb0JBQXFCMnFCLElBSXpCZ0IsVUFBV2hCLEVBQWtCaUIsR0FDM0IsTUFBTUMsRUFBZ0JqbkIsS0FBSzZsQixjQUFjcUIsVUFBVW5CLEdBQ25ELElBQUtrQixFQUNILE9BQU8sRUFFVCxNQUFNRSxFQUFhQyxRQUFNSCxFQUFlRCxHQUV4QyxPQURBaG5CLEtBQUs2bEIsY0FBY3dCLFVBQVV0QixFQUFVb0IsSUFDaEMsRUFHVEcsWUFBYXZCLEVBQWtCaUIsR0FFN0IsT0FEc0JobkIsS0FBSzZsQixjQUFjcUIsVUFBVW5CLEtBSW5EL2xCLEtBQUs2bEIsY0FBY3dCLFVBQVV0QixFQUFVaUIsR0FDdkN0TixHQUFhcU0sR0FBWWlCLEdBQ2xCLEdBR1RwbkIsa0JBQ0UsT0FBT25TLE9BQU9DLEtBQUtnc0IsV0kxRVY2TixXQUFjNWpCLGVBNEJ6QjVELFlBQWF1RSxFQUFxQixJQUNoQ1YsUUFSRjVELGFBQWtCLFFBU2hCQSxLQUFLc0UsV0FBYUEsRUFDbEJ0RSxLQUFLdUUsT0FBUyxHQUNkdkUsS0FBSzVJLE1BQVEsR0FDYjRJLEtBQUt3RSxTQUFXLEdBQ2hCeEUsS0FBS3ZFLE9BQVMsQ0FDWlUsWUFBYSxJQUFJMkQsR0FBaUIsZUFDbEM1RCxTQUFVLElBQUk0RCxHQUFpQixZQUMvQnlILHVCQUF3QixJQUFJekgsR0FBaUIsMEJBQzdDNEgsb0JBQXFCLElBQUk1SCxHQUFpQix1QkFDMUMrSCxtQkFBb0IsSUFBSS9ILEdBQWlCLHVCQUUzQ0UsS0FBS3duQixpQkFDTHhuQixLQUFLL1UsSUFBTSxJQUFJNFcsR0FBTzdCLE1BQ3RCQSxLQUFLN1YsSUFBTSxJQUFJOFcsR0FBVWpCLE1BQ3pCQSxLQUFLaFcsY0FBZ0IsSUFBSTh1QixHQUFjOVksTUFDdkNBLEtBQUt5bkIsYUFDTHpuQixLQUFLZCxPQXRCSHZELG1CQUNGLE9BQU9xRSxLQUFLMG5CLGNBd0JORixpQkFJTixHQUh3QixLQUFwQnhuQixLQUFLc0UsYUFDUHRFLEtBQUtzRSxXQUFhakYsWUFBWSx5QkFFb0IsVUFBaERwUyxVQUFLRSxRQUFRNlMsS0FBS3NFLFlBQVlwQyxjQUVoQyxNQURBbEMsS0FBS3NFLFdBQWEsR0FDWmhCLE1BQU0scURBRWR0RCxLQUFLcUMsUUFBVXBWLFVBQUt1QixRQUFRd1IsS0FBS3NFLFlBQ25CdFUsVUFBRzgyQixlQUFlOW1CLEtBQUtzRSxhQUVuQ3RVLFVBQUcyM0IsZUFBZSxHQUFHM25CLEtBQUtzRSxjQUl0Qm1qQixhQUNOem5CLEtBQUt5WSxHQUFLLElBQUlELEdBQUd4WSxNQUNqQkEsS0FBSzRuQixRQUFVNW5CLEtBQUt5WSxHQUFHRSxNQUFLLEdBR3RCelosT0FDTixJQUVFYyxLQUFLMUYsS0FBTyxJQUFJc3JCLEdBQVk1bEIsTUFDNUJBLEtBQUt5RSxRQUFVLElBQUlBLEdBQVF6RSxNQUMzQkEsS0FBSzBuQixjQUFnQixJQUFJL1QsR0FBYTNULE1BRXRDZ0IsR0FBcUIsU0FDckI2bUIsS0FBZ0IxbkIsU0FBU0gsTUM5RnRCLENBQ0xHLFNBQVVqVyxHQUNSQSxFQUFJdVIsT0FBT1UsWUFBWWdFLFNBQVMsT0FBUTJuQixJQUN4QzU5QixFQUFJdVIsT0FBT1UsWUFBWWdFLFNBQVMsU0FBVTRuQixNRDRGdkI1bkIsU0FBU0gsTUFDNUJnQixHQUFxQixJQUVyQmhCLEtBQUswbkIsY0FBY3hULE9BQ25CbFUsS0FBS2dvQixVQUFZLElBQUl0a0IsR0FBVTFELE1BQy9CLE1BQU9oVixHQUdQLE1BRkFnVixLQUFLd0YsS0FBSzdELEdBQWN5RixpQkFBa0IsR0FDMUNwSCxLQUFLL1UsSUFBSUMsTUFBTUYsR0FDVEEsR0FTVmlSLElBQUtILEVBQXNCaEssR0FDekIsR0FBSUEsRUFFRixPQURBa08sS0FBS3JFLGFBQWE4WSxlQUFlM2lCLEVBQU1nSyxHQUNoQ2tFLEtBQUtyRSxhQUFhQyxVQUFVOUosR0FHbkMsT0FEdUJnSyxFQUFPa0UsTUFLbENpb0IsbUJBQzBCLEtBQXBCam9CLEtBQUtzRSxhQUNQdEUsS0FBSzdWLElBQUkrVSxPQUNUYyxLQUFLN1YsSUFBSXNYLGdCQUlicEgsVUFBY3ZJLEdBQ1osT0FBS0EsRUFHSVAsTUFBSXlPLEtBQUs0bkIsUUFBUzkxQixHQUZsQmtPLEtBQUs0bkIsUUFNaEJ4c0IsV0FBWS9QLEdBQ0xxSSxHQUFtQnJJLElBSXhCMlUsS0FBSzFELFVBQVVqUixHQUNmMlUsS0FBS3lZLEdBQUdyZCxXQUFXL1AsSUFKakIyVSxLQUFLL1UsSUFBSTJILEtBQUssMERBT2xCaVMsYUFBY3hXLEVBQWE2NUIsR0FDcEI3NUIsR0FBUTY1QixJQUNUMTBCLEdBQXVCbkYsR0FDekIyUixLQUFLL1UsSUFBSTJILEtBQUssY0FBY3ZFLHVCQUc5QjJSLEtBQUs4RSxZQUFZelcsRUFBSzY1QixHQUN0QmxvQixLQUFLeVksR0FBR0ksTUFBTXhxQixFQUFLNjVCLEtBR3JCNXJCLFVBQVdqUixHQUNKcUksR0FBbUJySSxHQUl4Qm9DLE9BQU9DLEtBQUtyQyxHQUFRNlIsU0FBU3BMLElBQ3ZCMEIsR0FBdUIxQixLQUN6QmtPLEtBQUsvVSxJQUFJMkgsS0FBSyxjQUFjZCw4QkFFckJ6RyxFQUFPeUcsSUFFaEJ5TyxNQUFJUCxLQUFLNG5CLFFBQVM5MUIsRUFBTXpHLEVBQU95RyxJQUMvQndrQixHQUFTOVEsS0FBSzVELEdBQVV1VixjQUFlLENBQ3JDaGMsV0FBWXJKLEVBQ1ppWCxNQUFPMWQsRUFBT3lHLFFBWmhCa08sS0FBSy9VLElBQUkySCxLQUFLLDBEQWlCbEJrUyxZQUFhelcsRUFBYTY1QixHQUNuQjc1QixHQUFRNjVCLElBQ1QxMEIsR0FBdUJuRixHQUN6QjJSLEtBQUsvVSxJQUFJMkgsS0FBSyxjQUFjdkUsb0JBRzlCd3FCLFFBQU03WSxLQUFLM0YsVUFBVWhNLEdBQU02NUIsSUFHekJ2M0IsY0FDRixPQUFPcVAsS0FBS3lFLFFBQVE5VCxRQUFRaVUsS0FBSzVFLEtBQUt5RSxTQUd4QzdVLGFBQWN3SCxHQUNaLEdBQXdCLEtBQXBCNEksS0FBS3NFLFdBRVAsT0FEQXRFLEtBQUsvVSxJQUFJQyxNQUFNLHFEQUNSLEdBR1QsUUFBY3NDLElBQVY0SixHQUF3QyxJQUFqQkEsRUFBTTdMLE9Bd0IxQixDQUVMLE1BQU1nWixPQUFFQSxTQUFpQnZFLEtBQUtnb0IsVUFBVUcsTUFBTS93QixHQUM5QyxPQUFPbU4sRUExQlAsSUFDRSxNQUFNNlIsUUFBRUEsRUFBT0MseUJBQUVBLFNBQW1DZCxHQUFrQnZWLE1BQ3RFLEdBQWdCLGFBQVpvVyxFQUNGLE1BQU0sSUFBSTlTLE1BQU0sZ0NBQ1gsQ0FDTHRELEtBQUtnRixLQUFLckQsR0FBY3dGLFFBQVEsS0FDekJrUCxHQUVIcm1CLFVBQUdvNEIsT0FBT2hTLEdBQVNyckIsT0FBT0MsSUFBUWdWLEtBQUsvVSxJQUFJQyxNQUFNRixTQUdyRGdWLEtBQUtnRixLQUFLLFlBQVksS0FDZnFSLEdBQ0hybUIsVUFBR280QixPQUFPaFMsR0FBU3JyQixPQUFPQyxJQUFRZ1YsS0FBSy9VLElBQUlDLE1BQU1GLFNBR3JELE1BQU11WixPQUFFQSxTQUFpQnZFLEtBQUtnb0IsVUFBVUcsTUFBTSxDQUFDL1IsSUFDL0MsT0FBTzdSLEdBRVQsTUFBT3ZaLEdBRVAsTUFEQWdWLEtBQUt3RixLQUFLN0QsR0FBY3dGLE9BQVFuYyxHQUMxQkEifQ==
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("fs-extra"),t=require("path"),r=require("events"),n=require("os"),a=require("commander"),i=require("inquirer"),s=require("image-size"),o=require("url"),l=require("text-to-svg"),E=require("sharp"),u=require("crypto"),I=require("uuid"),_=require("chalk"),c=require("minimatch"),S=require("globby"),d=require("ejs"),P=require("download-git-repo"),p=require("rimraf"),g=require("dayjs"),f=require("util"),C=require("axios"),A=require("lodash"),m=require("heic-convert"),T=require("mime-types"),D=require("qiniu"),h=require("node-ssh-no-cpu-features"),L=require("resolve"),U=require("child_process"),N=require("is-wsl"),R=require("form-data"),B=require("https"),O=require("tunnel"),M=require("@picgo/store"),y=require("cross-spawn"),w=require("js-yaml"),G=require("@picgo/i18n");function b(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var x=b(e),F=b(t),$=b(n),H=b(i),W=b(l),v=b(E),K=b(u),k=b(_),q=b(c),Y=b(S),j=b(d),V=b(P),z=b(p),Q=b(g),X=b(f),Z=b(C),J=b(m),ee=b(T),te=b(D),re=b(L),ne=b(N),ae=b(R),ie=b(B),se=b(O),oe=b(y),le=b(w);const Ee={handle:e=>{const t=e.cmd;t.program.command("install <plugins...>").description("install picgo plugin").alias("add").option("-p, --proxy <proxy>","Add proxy for installing").option("-r, --registry <registry>","Choose a registry for installing").action(((t,r)=>{const{proxy:n,registry:a}=r,i={proxy:n,registry:a};e.pluginHandler.install(t,i).catch((t=>{e.log.error(t)}))})),t.program.command("uninstall <plugins...>").alias("rm").description("uninstall picgo plugin").action((t=>{e.pluginHandler.uninstall(t).catch((t=>{e.log.error(t)}))})),t.program.command("update <plugins...>").description("update picgo plugin").option("-p, --proxy <proxy>","Add proxy for installing").option("-r, --registry <registry>","Choose a registry for installing").action(((t,r)=>{const{proxy:n,registry:a}=r,i={proxy:n,registry:a};e.pluginHandler.update(t,i).catch((t=>{e.log.error(t)}))}))}},ue={handle:e=>{e.cmd.program.option("-c, --config <path>","set config path")}};function Ie(e){const t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";return Array.from({length:e}).map((()=>t.charAt(Math.floor(Math.random()*t.length)))).join("")}function _e(e,t,r){const n={"{Y}":()=>(new Date).getFullYear().toString(),"{y}":()=>(new Date).getFullYear().toString().slice(2),"{m}":()=>1===((new Date).getMonth()+1).toString().length?`0${(new Date).getMonth()+1}`:((new Date).getMonth()+1).toString(),"{d}":()=>1===(new Date).getDate().toString().length?`0${(new Date).getDate()}`:(new Date).getDate().toString(),"{h}":()=>1===(new Date).getHours().toString().length?`0${(new Date).getHours()}`:(new Date).getHours().toString(),"{i}":()=>1===(new Date).getMinutes().toString().length?`0${(new Date).getMinutes()}`:(new Date).getMinutes().toString(),"{s}":()=>1===(new Date).getSeconds().toString().length?`0${(new Date).getSeconds()}`:(new Date).getSeconds().toString(),"{md5}":()=>K.default.createHash("md5").update(F.default.basename(e,F.default.extname(e))).digest("hex"),"{md5-16}":()=>K.default.createHash("md5").update(F.default.basename(e,F.default.extname(e))).digest("hex").slice(0,16),"{str-10}":()=>Ie(10),"{str-20}":()=>Ie(20),"{filename}":()=>r?F.default.basename(r,F.default.extname(r)):F.default.basename(e,F.default.extname(e)),"{uuid}":()=>I.v4().replace(/-/g,""),"{timestamp}":()=>Math.floor(Date.now()/1e3).toString()};if(void 0===t||!Object.keys(n).some((e=>t.includes(e)))&&!t.includes("localFolder"))return e;const a=F.default.extname(e);let i=Object.keys(n).reduce(((e,t)=>e.replace(new RegExp(t,"g"),n[t]())),t)+a;return i=i.replace(/{(localFolder:?(\d+)?)}/gi,((t,r,n)=>{n=Math.max(1,n||0);return F.default.dirname(e).split(F.default.sep).slice(0-n).reduce(((e,t)=>`${e}/${t}`)).replace(/:/g,"")})),i}const ce=e=>/^https?:\/\//.test(e),Se=e=>{e=e||"";try{return e!==decodeURI(e)}catch(e){return!1}},de=e=>(Se(e)||(e=encodeURI(e)),e),Pe=e=>{try{const{width:t=0,height:r=0,type:n}=s.imageSize(e);return{real:!0,width:t,height:r,extname:n?`.${n}`:".png"}}catch(e){return{real:!1,width:200,height:200,extname:".png"}}},pe=async e=>{try{return{extname:F.default.extname(e),fileName:F.default.basename(e),buffer:await x.default.readFile(e),success:!0}}catch(t){return{reason:`read file ${e} error`,success:!1}}},ge=async(e,t)=>{let r;e=de(e);const n=new Promise(((n,a)=>{(async()=>{var a;try{const a=await t.request({method:"get",url:e,resolveWithFullResponse:!0,responseType:"arraybuffer"}).then((e=>e.data));clearTimeout(r);const i=new o.URL(e).pathname;let s="";try{s=new o.URL(e).searchParams.get("wx_fmt")||F.default.extname(i)||""}catch(e){s=F.default.extname(i)||""}!s.startsWith(".")&&s&&(s=`.${s}`),n({buffer:a,fileName:F.default.basename(i),extname:s,success:!0})}catch(t){clearTimeout(r),n({success:!1,reason:`request ${e} error, ${null!==(a=null==t?void 0:t.message)&&void 0!==a?a:""}`})}})().catch(a)})),a=new Promise((t=>{r=setTimeout((()=>{t({success:!1,reason:`request ${e} timeout`})}),3e4)}));return Promise.race([n,a])},fe=e=>/^@[^/]+\/picgo-plugin-/.test(e)?"scope":e.startsWith("picgo-plugin-")?"normal":Ce(e)?"simple":"unknown",Ce=e=>{if(F.default.isAbsolute(e))return!1;const t=F.default.join(process.cwd(),e);return!x.default.existsSync(t)&&(!e.includes("/")&&!e.includes("\\"))},Ae=(e,t="")=>t?`@${t}/picgo-plugin-${e}`:`picgo-plugin-${e}`,me=(e,t=console)=>{switch(fe(e)){case"normal":case"scope":return e;case"simple":return Ae(e);default:{let r=e;return F.default.isAbsolute(e)&&x.default.existsSync(e)?De(r):(r=F.default.join(process.cwd(),e),x.default.existsSync(r)?De(r):(t.warn(`Can't find plugin ${e}`),""))}}},Te=(e,t=console)=>{var r;switch(fe(e)){case"normal":return he(e);case"scope":return he(e,!0);case"simple":return he(Ae(e));default:{if(!x.default.existsSync(e))return t.warn(`Can't find plugin: ${e}`),"";const n=F.default.posix.join(e,"package.json");if(x.default.existsSync(n)){const e=x.default.readJSONSync(n)||{};return(null===(r=e.name)||void 0===r?void 0:r.includes("picgo-plugin-"))?e.name:(t.warn(`The plugin package.json's name filed is ${e.name||"empty"}, need to include the prefix: picgo-plugin-`),"")}return t.warn(`Can't find plugin: ${e}`),""}}},De=e=>e.split(F.default.sep).join("/"),he=(e,t=!1)=>{if(e.includes("@")){let r=/(.+\/)?(picgo-plugin-\w+)(@.+)*/;t&&(r=/(.+\/)?(^@[^/]+\/picgo-plugin-\w+)(@.+)*/);const n=e.match(r);return n?n[2]:(console.warn("can not remove plugin version"),e)}return e},Le=[],Ue=e=>Le.some((t=>e.startsWith(t))),Ne=e=>"object"==typeof e&&!Array.isArray(e)&&Object.keys(e).length>0;function Re(e){try{return JSON.parse(e)}catch(t){return e}}const Be=(e=0)=>isNaN(Number(e))?0:Number(e),Oe=()=>"development"===process.env.NODE_ENV;const Me=F.default.join(__dirname,"assets","piclist.png");async function ye(e,t,r,n,a,i,s,o,l,E,u){o=!o||o<0||o>1?.15:o;const I=v.default(e),{width:_=200}=await I.metadata(),c=await async function(e,t,r,n,a,i,s,o=200,l=0){let E;"image"===e?(s=s||Me,E=await v.default(s).toBuffer()):E=await async function(e,t,r,n){t=t||"测试",n=n||e;const a={anchor:"top",attributes:{fill:r=r||"rgba(204, 204, 204, 0.45)"}},i=W.default.loadSync(n).getSVG(t,a);return Buffer.from(i)}(t,r,i,n||t);const{width:u,height:I}=await async function(e){const{width:t,height:r}=await v.default(e).metadata();return{width:t||200,height:r||200}}(E),_=Math.floor(o*Be(a)),c=Math.floor(_*I/u);return await v.default(E).resize(_,c,{fit:"inside"}).rotate(l,{background:{r:255,g:255,b:255,alpha:0}}).toBuffer()}(t,r,i,s,o,l,E,_,a);return await I.composite([{input:c,gravity:u||"southeast",tile:n}]).toBuffer()}const we=(...e)=>e.every((e=>null!=e&&("string"==typeof e?""!==e:"number"==typeof e?e>0:"object"!=typeof e||Object.keys(e).length>0))),Ge=["avif","dz","fits","gif","heif","input","jpeg","jpg","jp2","jxl","magick","openslide","pdf","png","ppm","raw","svg","tiff","tif","v","webp"],be=["jpg","jpeg","png","webp","bmp","tiff","tif","svg","ico","avif","heif","heic"];async function xe(e,t,r){try{let n=v.default(e);return we(t.watermarkText)&&(n=v.default(await ye(e,t.watermarkType||"text",r,t.isFullScreenWatermark,Be(t.watermarkDegree),t.watermarkText,t.watermarkFontPath,Be(t.watermarkScaleRatio),t.watermarkColor,t.watermarkImagePath,t.watermarkPosition))),await n.toBuffer()}catch(t){return console.log(t),e}}function Fe(e){return{quality:Be(e.quality),isConvert:e.isConvert||!1,convertFormat:e.convertFormat||"jpg",isReSize:e.isReSize||!1,reSizeHeight:Be(e.reSizeHeight),reSizeWidth:Be(e.reSizeWidth),skipReSizeOfSmallImg:e.skipReSizeOfSmallImg||!1,isReSizeByPercent:e.isReSizeByPercent||!1,reSizePercent:Be(e.reSizePercent),isRotate:e.isRotate||!1,rotateDegree:Be(e.rotateDegree),picBed:e.picBed||"smms"}}async function $e(e,t,r){t=Fe(t);try{if(r=r.toLowerCase().replace(".",""),!be.includes(r))return e;let a=v.default(e),i=100;if(we(t.quality)&&t.quality<100&&(i=t.quality),t.isReSizeByPercent){if(we(t.reSizePercent)){const e=await a.metadata().then((e=>e.width)),r=await a.metadata().then((e=>e.height));e&&r&&(a=a.resize(Math.round(e*t.reSizePercent/100),Math.round(r*t.reSizePercent/100),{fit:"inside"}))}}else if(t.isReSize)if("number"==typeof t.reSizeHeight&&t.reSizeHeight>0&&"number"==typeof t.reSizeWidth&&t.reSizeWidth>0)a=a.resize(t.reSizeWidth,t.reSizeHeight,{fit:"fill"});else if("number"==typeof t.reSizeHeight&&t.reSizeHeight>0&&("number"!=typeof t.reSizeWidth||0===t.reSizeWidth)){const e=await a.metadata().then((e=>e.width)),r=await a.metadata().then((e=>e.height));if(e&&r&&(!t.skipReSizeOfSmallImg||t.skipReSizeOfSmallImg&&t.reSizeHeight<r)){const n=t.reSizeHeight/r;a=a.resize(Math.round(e*n),t.reSizeHeight,{fit:"inside"})}}else if("number"==typeof t.reSizeWidth&&t.reSizeWidth>0&&("number"!=typeof t.reSizeHeight||0===t.reSizeHeight)){const e=await a.metadata().then((e=>e.width)),r=await a.metadata().then((e=>e.height));if(e&&r&&(!t.skipReSizeOfSmallImg||t.skipReSizeOfSmallImg&&t.reSizeWidth<e)){const n=t.reSizeWidth/e;a=a.resize(t.reSizeWidth,Math.round(r*n),{fit:"inside"})}}if(t.isRotate&&t.rotateDegree&&(a=a.rotate(t.rotateDegree,{background:{r:255,g:255,b:255,alpha:0}})),t.isConvert){let e=t.convertFormat||"jpg";"imgur"===t.picBed&&"webp"===e&&(e="jpg"),a=a.toFormat(e,{quality:i})}else a=r&&(n=r,Ge.includes(n))?a.toFormat(r,{quality:i}):a.toFormat("jpg",{quality:i});return await a.toBuffer()}catch(t){return console.log(t),e}var n}const He=["jpg","jpeg","png","webp","bmp","tiff","tif","svg","ico","avif","heif","heic"],We=(e,t)=>(t=t.toLowerCase().replace(".",""),!!e&&!!e.isAddWatermark&&He.includes(t)),ve=(e,t)=>{if(t=t.toLowerCase().replace(".",""),!He.includes(t))return!1;if(!e)return!1;e=Fe(e);const{quality:r,isReSizeByPercent:n,reSizePercent:a,isReSize:i,reSizeHeight:s,reSizeWidth:o,isRotate:l,rotateDegree:E,isConvert:u,convertFormat:I}=e;if(we(r)&&r<100)return!0;if(n&&we(a))return!0;if(i&&("number"==typeof s&&s>0||"number"==typeof o&&o>0))return!0;if(l&&E)return!0;if(u){return t!==(I||"jpg")}return!1},Ke=async(e,t)=>(t=t.toLowerCase().replace(".",""),He.includes(t)?await v.default(e).toBuffer():e);var ke=Object.freeze({__proto__:null,randomStringGenerator:Ie,renameFileNameWithTimestamp:function(e){return`${Math.floor(Date.now()/1e3)}${Ie(5)}${F.default.extname(e)}`},renameFileNameWithRandomString:function(e,t=5){return`${Ie(t)}${F.default.extname(e)}`},renameFileNameWithCustomString:_e,isUrl:ce,isUrlEncode:Se,handleUrlEncode:de,getImageSize:Pe,getFSFile:pe,getURLFile:ge,getPluginNameType:fe,isSimpleName:Ce,handleStreamlinePluginName:e=>/^@[^/]+\/picgo-plugin-/.test(e)?e.replace(/^@[^/]+\/picgo-plugin-/,""):e.replace(/picgo-plugin-/,""),handleCompletePluginName:Ae,getProcessPluginName:me,getNormalPluginName:Te,handleUnixStylePath:De,removePluginVersion:he,configBlackList:Le,isConfigKeyInBlackList:Ue,isInputConfigValid:Ne,safeParse:Re,forceNumber:Be,isDev:Oe,isProd:()=>"production"===process.env.NODE_ENV,AddWatermark:ye,imageAddWaterMark:xe,imageProcess:$e,needAddWatermark:We,needCompress:ve,removeExif:Ke});const qe={handle:e=>{e.cmd.program.command("upload").description("upload, go go go").arguments("[input...]").alias("u").action((t=>{(async()=>{const r=t.map((e=>ce(e)?e:F.default.resolve(e))).filter((t=>{const r=x.default.existsSync(t)||ce(t);return r||e.log.warn(`${t} does not exist.`),r}));await e.upload(r)})().catch((t=>{e.log.error(t)}))}))}};var Ye=e=>{const t=e.getConfig("buildIn.compress")||{};return[{name:"quality",type:"input",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_QUALITY")},required:!1,default:t.quality||100},{name:"isConvert",type:"confirm",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISCONVERT")},required:!1,default:t.isConvert||!1},{name:"convertFormat",type:"list",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_CONVERTFORMAT")},required:!1,choices:["avif","dz","fits","gif","heif","input","jpeg","jpg","jp2","jxl","magick","openslide","pdf","png","ppm","raw","svg","tiff","tif","v","webp"],default:"jpg"},{name:"isReSize",type:"confirm",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISRESIZE")},required:!1,default:t.isReSize||!1},{name:"reSizeWidth",type:"input",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_RESIZEWIDTH")},required:!1,default:t.reSizeWidth||500},{name:"reSizeHeight",type:"input",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_RESIZEHEIGHT")},required:!1,default:t.reSizeHeight||500},{name:"skipReSizeOfSmallImg",type:"confirm",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_SKIPRESIZEOFSMALLIMG")},required:!1,default:t.skipReSizeOfSmallImg||!1},{name:"isReSizeByPercent",type:"confirm",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISRESIZEBYPERCENT")},required:!1,default:t.isReSizeByPercent||!1},{name:"reSizePercent",type:"input",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_RESIZEPERCENT")},required:!1,default:t.reSizePercent||50},{name:"isRotate",type:"confirm",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISROTATE")},required:!1,default:t.isRotate||!1},{name:"rotateDegree",type:"input",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ROTATEDEGREE")},required:!1,default:t.rotateDegree||90},{name:"isRemoveExif",type:"confirm",get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISREMOVEEXIF")},required:!1,default:t.isRemoveExif||!1}]};var je=e=>{const t=e.getConfig("buildIn.watermark")||{};return[{name:"isAddWatermark",type:"confirm",get alias(){return e.i18n.translate("BUILDIN_WATERMARK_ISADDWATERMARK")},required:!1,default:t.isAddWatermark||!1},{name:"watermarkType",type:"list",get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKTYPE")},required:!1,choices:["text","image"],default:t.watermarkType||"text"},{name:"isFullScreenWatermark",type:"confirm",get alias(){return e.i18n.translate("BUILDIN_WATERMARK_ISFULLSCREENWATERMARK")},required:!1,default:t.isFullScreenWatermark||!1},{name:"watermarkDegree",type:"input",get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKDEGREE")},required:!1,default:t.watermarkDegree||0},{name:"watermarkText",type:"input",get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKTEXT")},required:!1,default:t.watermarkText||""},{name:"watermarkFontPath",type:"input",get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKTEXTFONTPATH")},required:!1,default:t.watermarkFontPath||""},{name:"watermarkScaleRatio",type:"input",get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKFONTRATIO")},required:!1,default:t.watermarkScaleRatio||.15},{name:"watermarkColor",type:"input",get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKFONTCOLOR")},required:!1,default:t.watermarkColor||"rgba(204, 204, 204, 0.45)"},{name:"watermarkImagePath",type:"input",get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKIMAGEPATH")},required:!1,default:t.watermarkImagePath||""},{name:"watermarkPosition",type:"list",get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKPOSITION")},required:!1,choices:["north","northeast","southeast","south","southwest","northwest","west","east","center","centre"],default:t.watermarkPosition||"southeast"}]};var Ve=e=>{const t=e.getConfig("buildIn.rename")||{};return[{name:"format",type:"input",get alias(){return e.i18n.translate("BUILDIN_RENAME_FORMAT")},required:!1,default:t.format||"{filename}"},{name:"enable",type:"confirm",get alias(){return e.i18n.translate("BUILDIN_RENAME_ENABLE")},required:!1,default:t.enable||!1}]};const ze=async(e,t,r,n)=>{const a=await e.cmd.inquirer.prompt(t),i="uploader"===r?`picBed.${n}`:"transformer"===r?`transformer.${n}`:"buildin"===r?`buildIn.${n}`:n;e.saveConfig({[i]:a}),"uploader"===r?e.saveConfig({"picBed.current":n,"picBed.uploader":n}):"transformer"===r&&e.saveConfig({"picBed.transformer":n})},Qe={handle:e=>{e.cmd.program.command("set").alias("config").arguments("<module> [name]").description("configure config of picgo modules, uploader|transformer|plugin|buildin").action(((t,r)=>{(async()=>{var n,a;try{switch(t){case"buildin":if("compress"===r)await ze(e,Ye(e),t,r);else if("watermark"===r)await ze(e,je(e),t,r);else if("rename"===r)await ze(e,Ve(e),t,r);else{const r=[{type:"list",name:"buildin",choices:["compress","watermark","rename"],message:"Choose a buildin module"}],n=await e.cmd.inquirer.prompt(r);"compress"===n.buildin?await ze(e,Ye(e),t,n.buildin):"watermark"===n.buildin?await ze(e,je(e),t,n.buildin):"rename"===n.buildin&&await ze(e,Ve(e),t,n.buildin)}break;case"uploader":case"transformer":if(r){const n=e.helper[t].get(r);if(!n)return void e.log.error(`No ${t} named ${r}`);n.config&&await ze(e,n.config(e),t,r)}else{const r=[{type:"list",name:`${t}`,choices:e.helper[t].getIdList(),message:`Choose a(n) ${t}`}],n=await e.cmd.inquirer.prompt(r),a=e.helper[t].get(n[t]);(null==a?void 0:a.config)&&await ze(e,a.config(e),t,n[t])}break;case"plugin":if(r){if(r.includes("picgo-plugin-")||(r=`picgo-plugin-${r}`),!Object.keys(e.getConfig("picgoPlugins")).includes(r))return void e.log.error(`No plugin named ${r}`);(null===(n=e.pluginLoader.getPlugin(r))||void 0===n?void 0:n.config)&&await ze(e,e.pluginLoader.getPlugin(r).config(e),"plugin",r)}else{const t=[{type:"list",name:"plugin",choices:e.pluginLoader.getFullList(),message:"Choose a plugin"}],r=await e.cmd.inquirer.prompt(t);(null===(a=e.pluginLoader.getPlugin(r.plugin))||void 0===a?void 0:a.config)&&await ze(e,e.pluginLoader.getPlugin(r.plugin).config(e),"plugin",r.plugin)}break;default:return e.log.warn(`No module named ${t}`),void e.log.warn("Available modules are uploader|transformer|plugin|buildin")}e.log.success("Configure config successfully!"),"plugin"===t&&e.log.info("If you want to use this config, please run 'picgo use plugins'")}catch(t){if(e.log.error(t),process.argv.includes("--debug"))throw t}})().catch((t=>{e.log.error(t)}))}))}},Xe={handle:async e=>{const t=e.cmd;t.program.command("use").arguments("[module]").description("use modules of picgo").action((r=>{(async()=>{try{let n=[];const a={uploader:{type:"list",name:"uploader",message:"Use an uploader",choices:e.helper.uploader.getIdList(),default:e.getConfig("picBed.uploader")||e.getConfig("picBed.current")||"smms"},transformer:{type:"list",name:"transformer",message:"Use a transformer",choices:e.helper.transformer.getIdList(),default:e.getConfig("picBed.transformer")||"path"},plugins:{type:"checkbox",name:"plugins",message:"Use plugins",choices:e.pluginLoader.getFullList(),default:Object.keys(e.getConfig("picgoPlugins")).filter((t=>e.getConfig(`picgoPlugins.${t}`)))}};if(r){if(!a[r])return e.log.warn(`No module named ${r}`),void e.log.warn("Available modules are uploader|transformer|plugins");n.push(a[r])}else n=Object.keys(a).map((e=>a[e]));const i=await t.inquirer.prompt(n);if(i.plugins){const t=e.getConfig("picgoPlugins");Object.keys(t).forEach((e=>{i.plugins.includes(e)?t[e]=!0:t[e]=!1})),e.saveConfig({picgoPlugins:t})}e.saveConfig({"picBed.current":i.uploader||e.getConfig("picBed.current"),"picBed.uploader":i.uploader||e.getConfig("picBed.current"),"picBed.transformer":i.transformer||"path"}),e.log.success("Configure config successfully!")}catch(t){if(e.log.error(t),process.argv.includes("--debug"))throw t}})().catch((t=>{e.log.error(t)}))}))}},Ze={handle:e=>{e.cmd.program.option("-p, --proxy <url>","set proxy for uploading",(t=>{e.setConfig({"picBed.proxy":t})}))}},Je=async(e,t)=>{try{const r=tt(t.tmp),n=F.default.join(t.tmp,"template");let a={};r.prompts&&r.prompts.length>0&&(a=await e.cmd.inquirer.prompt(r.prompts));let i=await Y.default(["**/*"],{cwd:n,dot:!0});if(i=i.filter((t=>{let n="";return Object.keys(r.filters).forEach((e=>{q.default(t,e,{dot:!0})&&(n=t)})),!n||et(e,r.filters[n],a)})),0===i.length)return void e.log.warn("Template files not found!");const s=rt(i,n,a);nt(t.dest,s),"function"==typeof r.complete&&r.complete({answers:a,options:t,files:i,ctx:e}),r.completeMessage&&e.log.success(r.completeMessage),e.log.success("Done!")}catch(t){e.log.error(t)}},et=(e,t,r)=>{const n=new Function("data","with (data) { return "+t+"}");try{return n(r)}catch(r){return e.log.error(`Error when evaluating filter condition: ${JSON.stringify(t)}`),!1}},tt=e=>{const t=F.default.join(e,"index.js");if(x.default.existsSync(t)){return require(t)}return{}},rt=(e,t,r)=>{const n={};return e.forEach((e=>{const a=x.default.readFileSync(F.default.join(t,e),"utf8"),i=j.default.render(a,r);(Buffer.isBuffer(i)||/[^\s]/.test(i))&&(n[e]=i)})),n},nt=(e,t)=>{Object.keys(t).forEach((r=>{const n=F.default.join(e,r);x.default.ensureDirSync(F.default.dirname(n)),x.default.writeFileSync(n,t[r])}))},at=(e,t)=>{t.offline?x.default.existsSync(t.template)?Je(e,t).catch((t=>{e.log.error(t)})):e.log.error(`Local template ${t.template} not found`):(t.template=t.hasSlash?t.template:"PicGo/picgo-template-"+t.template,it(e,t))},it=(e,t)=>{x.default.existsSync(t.tmp)&&z.default.sync(t.tmp),e.log.info("Template files are downloading..."),V.default(t.template,t.tmp,{clone:t.clone},(r=>{r?e.log.error(r):(e.log.success("Template files are downloaded!"),Je(e,t).catch((t=>{e.log.error(t)})))}))},st={handle:async e=>{e.cmd.program.command("init").arguments("<template> [project]").option("--clone","use git clone").option("--offline","use cached template").description("create picgo plugin's development templates").action(((t,r,a)=>{(async()=>{try{const i=t.includes("/"),s=!r||"."===r,o=F.default.resolve(r||"."),l=a.clone||!1,E=a.offline||!1,u=F.default.join(n.homedir(),".picgo/templates",t.replace(/[/:]/g,"-"));a.offline&&(t=u);const I={template:t,project:r,hasSlash:i,inPlace:s,dest:o,clone:l,tmp:u,offline:E};s||x.default.existsSync(o)?await e.cmd.inquirer.prompt([{type:"confirm",message:s?"Generate project in current directory?":"Target directory exists. Continue?",name:"ok"}]).then((t=>{t.ok&&at(e,I)})):at(e,I)}catch(t){if(e.log.error(t),process.argv.includes("--debug"))throw t}})().catch((t=>{e.log.error(t)}))})).on("--help",(()=>{console.log(),console.log("Examples:"),console.log(),console.log(k.default.gray(" # create a new project with an official template")),console.log(" $ picgo init plugin my-project"),console.log(),console.log(k.default.gray(" # create a new project straight from a github template")),console.log(" $ picgo init username/repo my-project"),console.log()}))}},ot={handle:e=>{e.cmd.program.command("i18n").arguments("[lang]").description("change picgo language").action((async(t="")=>{const r=e.i18n.getLanguageList();if(!t){const t=[{type:"list",name:"i18n",choices:r,message:"Choose a language",default:e.getConfig("settings.language")||"zh-CN"}],n=await e.cmd.inquirer.prompt(t);return e.i18n.setLanguage(n.i18n),void e.log.success(`Language set to ${n.i18n}`)}r.includes(t)?(e.i18n.setLanguage(t),e.log.success(`Language set to ${t}`)):e.log.warn("No such language")}))}};class lt{constructor(e){this.name=e,this.list=new Map,this.pluginIdMap=new Map}register(e,t){var r;if(!e)throw new TypeError("id is required!");if("function"!=typeof t.handle)throw new TypeError("plugin.handle must be a function!");if(this.list.has(e))throw new TypeError(`${this.name} duplicate id: ${e}!`);this.list.set(e,t),lt.currentPlugin&&(this.pluginIdMap.has(lt.currentPlugin)?null===(r=this.pluginIdMap.get(lt.currentPlugin))||void 0===r||r.push(e):this.pluginIdMap.set(lt.currentPlugin,[e]))}unregister(e){if(this.pluginIdMap.has(e)){const t=this.pluginIdMap.get(e);null==t||t.forEach((e=>{this.list.delete(e)}))}}getName(){return this.name}get(e){return this.list.get(e)}getList(){return[...this.list.values()]}getIdList(){return[...this.list.keys()]}}const Et=(e=null)=>{lt.currentPlugin=e};class ut{constructor(e){this.name="commander",this.list=new Map,this.pluginIdMap=new Map,this.program=new a.Command,this.inquirer=H.default,this.ctx=e}getName(){return this.name}init(){var e;this.program.version("1.0.0","-v, --version").option("-d, --debug","debug mode",(()=>{this.ctx.setConfig({debug:!0})})).option("-s, --silent","silent mode",(()=>{this.ctx.setConfig({silent:!0})})).on("command:*",(()=>{this.ctx.log.error(`Invalid command: ${this.program.args.join(" ")}\nSee --help for a list of available commands.`),process.exit(1)})),(e=this.ctx).cmd.register("pluginHandler",Ee),e.cmd.register("config",ue),e.cmd.register("setting",Qe),e.cmd.register("upload",qe),e.cmd.register("use",Xe),e.cmd.register("proxy",Ze),e.cmd.register("init",st),e.cmd.register("i18n",ot)}register(e,t){var r;if(!e)throw new TypeError("name is required!");if("function"!=typeof t.handle)throw new TypeError("plugin.handle must be a function!");if(this.list.has(e))throw new TypeError(`${this.name} plugin duplicate id: ${e}!`);this.list.set(e,t);const n=lt.currentPlugin;null!==n&&(this.pluginIdMap.has(n)?null===(r=this.pluginIdMap.get(n))||void 0===r||r.push(e):this.pluginIdMap.set(n,[e]))}unregister(e){if(this.pluginIdMap.has(e)){const t=this.pluginIdMap.get(e);null==t||t.forEach((e=>{this.list.delete(e)}))}}loadCommands(){this.getList().forEach((e=>{try{e.handle(this.ctx)}catch(e){this.ctx.log.error(e)}}))}get(e){return this.list.get(e)}getList(){return[...this.list.values()]}getIdList(){return[...this.list.keys()]}}var It,_t,ct;!function(e){e.success="success",e.info="info",e.warn="warn",e.error="error"}(It||(It={})),function(e){e.UPLOAD_PROGRESS="uploadProgress",e.FAILED="failed",e.BEFORE_TRANSFORM="beforeTransform",e.BEFORE_UPLOAD="beforeUpload",e.AFTER_UPLOAD="afterUpload",e.FINISHED="finished",e.INSTALL="install",e.UNINSTALL="uninstall",e.UPDATE="update",e.NOTIFICATION="notification"}(_t||(_t={})),function(e){e.CONFIG_CHANGE="CONFIG_CHANGE"}(ct||(ct={}));class St{constructor(e){this.level={[It.success]:"green",[It.info]:"blue",[It.warn]:"yellow",[It.error]:"red"},this.ctx=e}handleLog(e,...t){if(!this.ctx.getConfig("silent")){const r=k.default[this.level[e]](`[PicList ${e.toUpperCase()}]:`);console.log(r,...t),this.logLevel=this.ctx.getConfig("settings.logLevel"),this.logPath=this.ctx.getConfig("settings.logPath")||F.default.join(this.ctx.baseDir,"./piclist.log"),setTimeout((()=>{try{const r=this.checkLogFileIsLarge(this.logPath);if(r.isLarge){const e=`Log file is too large (> ${r.logFileSizeLimit/1024/1024||"10"} MB), recreate log file`;console.log(k.default.yellow("[PicList WARN]:"),e),this.recreateLogFile(this.logPath),t.unshift(e)}this.handleWriteLog(this.logPath,e,...t)}catch(e){console.error("[PicList Error] on checking log file size",e)}}),0)}}checkLogFileIsLarge(e){if(x.default.existsSync(e)){const t=x.default.statSync(e).size,r=1024*Be(this.ctx.getConfig("settings.logFileSizeLimit")||10)*1024;return{isLarge:t>r,logFileSize:t,logFileSizeLimit:r}}return{isLarge:!1}}recreateLogFile(e){x.default.existsSync(e)&&(x.default.unlinkSync(e),x.default.createFileSync(e))}handleWriteLog(e,t,...r){try{if(this.checkLogLevel(t,this.logLevel)){let n=`${Q.default().format("YYYY-MM-DD HH:mm:ss")} [PicList ${t.toUpperCase()}] `;r.forEach((e=>{e instanceof Error&&"error"===t?n+=`\n------Error Stack Begin------\n${X.default.format(null==e?void 0:e.stack)}\n-------Error Stack End------- `:("object"==typeof e&&(e=JSON.stringify(e,null,2)),n+=`${e} `)})),n+="\n",x.default.appendFileSync(e,n)}}catch(e){console.error("[PicList Error] on writing log file",e)}}checkLogLevel(e,t){return void 0===t||"all"===t||(Array.isArray(t)?t.some((t=>t===e||"all"===t)):e===t)}success(...e){this.handleLog(It.success,...e)}info(...e){this.handleLog(It.info,...e)}error(...e){this.handleLog(It.error,...e)}warn(...e){this.handleLog(It.warn,...e)}debug(...e){Oe()&&this.handleLog(It.info,...e)}}class dt extends r.EventEmitter{constructor(e){super(),this.ttfLink="https://release.piclist.cn/simhei.ttf",this.ctx=e;const t=F.default.join(e.baseDir,"piclistTemp"),r=F.default.join(e.baseDir,"imgTemp");x.default.ensureDirSync(r),x.default.emptyDirSync(t),this.ttfPath=F.default.join(e.baseDir,"assets","simhei.ttf")}async downloadTTF(){const e=F.default.dirname(this.ttfPath);if(x.default.existsSync(e)||x.default.mkdirSync(e,{recursive:!0}),x.default.existsSync(this.ttfPath))return!0;this.ctx.log.info("Download ttf file.");try{const e=await Z.default.get(this.ttfLink,{responseType:"arraybuffer"});return x.default.writeFileSync(this.ttfPath,e.data),this.ctx.log.info("Download ttf file success."),!0}catch(e){return this.ctx.log.error("Download ttf file failed."),!1}}async start(e){const t=(e=>({configPath:e.configPath,baseDir:e.baseDir,log:e.log,cmd:e.cmd,output:[],input:[],rawInput:[],pluginLoader:e.pluginLoader,pluginHandler:e.pluginHandler,Request:e.Request,helper:e.helper,VERSION:e.VERSION,GUI_VERSION:e.GUI_VERSION,request:e.request,i18n:e.i18n,getConfig:e.getConfig.bind(e),saveConfig:e.saveConfig.bind(e),removeConfig:e.removeConfig.bind(e),setConfig:e.setConfig.bind(e),unsetConfig:e.unsetConfig.bind(e),upload:e.upload.bind(e),addListener:e.addListener.bind(e),on:e.on.bind(e),once:e.once.bind(e),removeListener:e.removeListener.bind(e),off:e.off.bind(e),removeAllListeners:e.removeAllListeners.bind(e),setMaxListeners:e.setMaxListeners.bind(e),getMaxListeners:e.getMaxListeners.bind(e),listeners:e.listeners.bind(e),rawListeners:e.rawListeners.bind(e),emit:e.emit.bind(e),listenerCount:e.listenerCount.bind(e),prependListener:e.prependListener.bind(e),prependOnceListener:e.prependOnceListener.bind(e),eventNames:e.eventNames.bind(e)}))(this.ctx);try{if(!Array.isArray(e))throw new Error("Input must be an array.");t.input=e,t.rawInputPath=[],t.rawInput=A.cloneDeep(e),t.output=[];const r=t.getConfig("buildIn.compress"),n=t.getConfig("picBed.uploader")||t.getConfig("picBed.current")||"smms";!t.helper.uploader.get(n)&&r?r.picBed="smms":r&&(r.picBed=n);const a=t.getConfig("buildIn.watermark");if(r||a){const e=F.default.join(t.baseDir,"piclistTemp");x.default.existsSync(e)||x.default.mkdirSync(e);const n="Add watermark to image",i="Compress or convert image";await Promise.allSettled(t.input.map((async(s,o)=>{var l,E,u,I,_,c,S;let d;if(ce(s)){if(t.rawInputPath[o]=s,d=await ge(s,t),!d.success||!d.buffer)throw new Error(d.reason);{let S;if(We(a,null!==(l=d.extname)&&void 0!==l?l:"")){await this.downloadTTF()?(t.log.info(n),S=await xe(d.buffer,a,this.ttfPath)):this.ctx.log.warn("Download ttf file failed, skip add watermark.")}if(ve(r,null!==(E=d.extname)&&void 0!==E?E:"")&&(t.log.info(i),S=await $e(null!=S?S:d.buffer,r,null!==(u=d.extname)&&void 0!==u?u:"")),!S&&(null==r?void 0:r.isRemoveExif)&&(t.log.info("Remove exif info."),S=await Ke(d.buffer,null!==(I=d.extname)&&void 0!==I?I:"")),S){let n;n=(null==r?void 0:r.isConvert)?null!==(_=null==r?void 0:r.convertFormat)&&void 0!==_?_:"jpg":null!==(c=d.extname)&&void 0!==c?c:"",n=n.startsWith(".")?n:`.${n}`;const a=F.default.join(e,`${d.fileName?`${F.default.basename(d.fileName,F.default.extname(d.fileName))}${n}`:(new Date).getTime()}${n}`);t.rawInputPath[o]=F.default.join(F.default.dirname(s),F.default.basename(a)),x.default.writeFileSync(a,S),t.input[o]=a}}}else{let l;if(t.rawInputPath[o]=s,We(a,F.default.extname(s))){await this.downloadTTF()?(t.log.info(n),l=await xe(x.default.readFileSync(s),a,this.ttfPath)):this.ctx.log.warn("Download ttf file failed, skip add watermark.")}if(ve(r,F.default.extname(s)))if(t.log.info(i),".heic"===F.default.extname(s)||".heif"===F.default.extname(s)){const t=x.default.readFileSync(s),n=await J.default({buffer:t,format:"JPEG",quality:1}),a=F.default.join(e,`${F.default.basename(s,F.default.extname(s))}.jpg`);x.default.writeFileSync(a,Buffer.from(n)),l=await $e(x.default.readFileSync(a),r,".jpg")}else l=await $e(null!=l?l:x.default.readFileSync(s),r,F.default.extname(s));if(!l&&(null==r?void 0:r.isRemoveExif)&&(t.log.info("Remove exif info."),l=await Ke(x.default.readFileSync(s),F.default.extname(s))),l){let n;n=(null==r?void 0:r.isConvert)?null!==(S=null==r?void 0:r.convertFormat)&&void 0!==S?S:"jpg":F.default.extname(s),n=n.startsWith(".")?n:`.${n}`;const a=F.default.join(e,`${F.default.basename(s,F.default.extname(s))}${n}`);t.rawInputPath[o]=F.default.join(F.default.dirname(s),`${F.default.basename(s,F.default.extname(s))}${n}`),x.default.writeFileSync(a,l),t.input[o]=a}}})))}else for(const e of t.input)t.rawInputPath.push(e);await this.beforeTransform(t),await this.doTransform(t);const i=t.getConfig("buildIn.rename")||{};if(i.enable){const e=i.format||"{filename}";t.output=t.output.map(((r,n)=>{let a=r.fileName;return e&&(a=_e(t.rawInputPath[n],e),a=a.replace(/\/+/g,"/"),"/"===a.slice(-1)&&(a+=n.toString())),r.fileName=a,r}))}return await this.beforeUpload(t),await this.doUpload(t),t.input=t.rawInput,await this.afterUpload(t),t}catch(e){if(t.log.warn(_t.FAILED),t.emit(_t.UPLOAD_PROGRESS,-1),t.emit(_t.FAILED,e),t.log.error(e),t.getConfig("debug"))throw e;return t}}async beforeTransform(e){return e.emit(_t.UPLOAD_PROGRESS,0),e.emit(_t.BEFORE_TRANSFORM,e),e.log.info("Before transform"),await this.handlePlugins(e.helper.beforeTransformPlugins,e),e}async doTransform(e){e.emit(_t.UPLOAD_PROGRESS,30);const t=e.getConfig("picBed.transformer")||"path";let r=t,n=e.helper.transformer.get(t);return n||(n=e.helper.transformer.get("path"),r="path",e.log.warn(`Can't find transformer - ${t}, switch to default transformer - path`)),e.log.info(`Transforming... Current transformer is [${r}]`),await(null==n?void 0:n.handle(e)),e}async beforeUpload(e){return e.emit(_t.UPLOAD_PROGRESS,60),e.log.info("Before upload"),e.emit(_t.BEFORE_UPLOAD,e),await this.handlePlugins(e.helper.beforeUploadPlugins,e),e}async doUpload(e){let t=e.getConfig("picBed.uploader")||e.getConfig("picBed.current")||"smms",r=e.helper.uploader.get(t),n=t;r||(t="smms",n="smms",r=e.helper.uploader.get("smms"),e.log.warn(`Can't find uploader - ${t}, switch to default uploader - smms`)),e.log.info(`Uploading... Current uploader is [${n}]`),await(null==r?void 0:r.handle(e));for(const r of e.output)r.type=t;return e}async afterUpload(e){e.emit(_t.AFTER_UPLOAD,e),e.emit(_t.UPLOAD_PROGRESS,100),await this.handlePlugins(e.helper.afterUploadPlugins,e);let t="";const r=e.output.length,n=!0===e.getConfig("settings.encodeOutputURL");for(let a=0;a<r;a++)void 0!==e.output[a].imgUrl&&(t+=n?de(e.output[a].imgUrl):e.output[a].imgUrl,a!==r-1&&(t+="\n")),delete e.output[a].base64Image,delete e.output[a].buffer;return e.emit(_t.FINISHED,e),e.log.success(`\n${t}`),e}async handlePlugins(e,t){const r=e.getList(),n=e.getIdList(),a=e.getName();return await Promise.all(r.map((async(e,r)=>{try{t.log.info(`${a}: ${n[r]} running`),await e.handle(t)}catch(e){throw t.log.error(`${a}: ${n[r]} error`),e}}))),t}}const Pt=(e,t,r,n="")=>({method:"POST",url:`https://${n||"sm.ms"}/api/v2/upload`,headers:{contentType:"multipart/form-data","User-Agent":"PicList",Authorization:r},formData:{smfile:{value:t,options:{filename:e}},ssl:"true"}}),pt=async e=>{const t=e.getConfig("picBed.smms");if(!t)throw new Error("Can not find smms config!");const r=e.output;for(const n of r)if(n.fileName&&n.buffer){let r=n.buffer;!r&&n.base64Image&&(r=Buffer.from(n.base64Image,"base64"));const a=Pt(n.fileName,r,null==t?void 0:t.token,null==t?void 0:t.backupDomain);try{const t=await e.request(a),r=JSON.parse(t);if("success"===r.code)delete n.base64Image,delete n.buffer,n.imgUrl=r.data.url,n.hash=r.data.hash;else{if("image_repeated"!==r.code||"string"!=typeof r.images)throw e.emit(_t.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:r.message}),new Error(r.message);delete n.base64Image,delete n.buffer,n.imgUrl=r.images}}catch(t){throw e.log.error(t),t}}return e},gt=e=>{const t=e.getConfig("picBed.smms")||{};return[{name:"token",message:"api token",type:"password",get alias(){return e.i18n.translate("PICBED_SMMS_TOKEN")},default:t.token||"",required:!0},{name:"backupDomain",type:"input",get prefix(){return e.i18n.translate("PICBED_SMMS_BACKUP_DOMAIN")},get message(){return e.i18n.translate("PICBED_SMMS_MESSAGE_BACKUP_DOMAIN")},get alias(){return e.i18n.translate("PICBED_SMMS_BACKUP_DOMAIN")},default:t.backupDomain||"",required:!1}]};const ft=(e,t)=>{const r=e.secretId,n=e.secretKey,a=e.appId,i=e.bucket;let s,o="";if(e.version&&"v4"!==e.version){const r=Math.floor((new Date).getTime()/1e3);o=`${r};${r+86400}`;const a=K.default.createHmac("sha1",n).update(o).digest("hex"),i=e.endpoint?e.endpoint:`cos.${e.area}.myqcloud.com`,l=`put\n/${e.path}${t}\n\nhost=${e.bucket}.${i}\n`,E=`sha1\n${o}\n${K.default.createHash("sha1").update(l).digest("hex")}\n`;s=K.default.createHmac("sha1",a).update(E).digest("hex")}else{const e=Math.floor(1e10*Math.random()),t=Math.floor((new Date).getTime()/1e3)-1,o=`a=${a}&b=${i}&k=${r}&e=${t+3600}&t=${t}&r=${e}&f=`,l=K.default.createHmac("sha1",n).update(o).digest(),E=Buffer.concat([l,Buffer.from(o)]);s=Buffer.from(E).toString("base64")}return{signature:s,appId:a,bucket:i,signTime:o}},Ct=(e,t,r,n,a)=>{const i=e.area,s=e.path;if(e.version&&"v4"!==e.version){const i=e.endpoint?e.endpoint:`cos.${e.area}.myqcloud.com`;return{method:"PUT",url:`http://${e.bucket}.${i}/${encodeURIComponent(s)}${encodeURIComponent(t)}`,headers:{Host:`${e.bucket}.${i}`,Authorization:`q-sign-algorithm=sha1&q-ak=${e.secretId}&q-sign-time=${r.signTime}&q-key-time=${r.signTime}&q-header-list=host&q-url-param-list=&q-signature=${r.signature}`,contentType:ee.default.lookup(t)||"application/octet-stream","User-Agent":`PicGo;${a};null;null`},body:n,resolveWithFullResponse:!0}}return{method:"POST",url:`http://${i}.file.myqcloud.com/files/v2/${r.appId}/${r.bucket}/${encodeURI(s)}${t}`,headers:{Host:`${i}.file.myqcloud.com`,Authorization:r.signature,contentType:"multipart/form-data","User-Agent":`PicGo;${a};null;null`},formData:{op:"upload",filecontent:n},resolveWithFullResponse:!0}},At=async e=>{var t,r,n,a;const i=e.getConfig("picBed.tcyun");if(!i)throw new Error("Can't find tencent COS config");try{const s=e.output,o=i.customUrl,l=null!==(t=i.path)&&void 0!==t?t:"",E=!i.version||"v4"===i.version;for(const t of s)if(t.fileName&&t.buffer){const s=ft(i,t.fileName);if(!s)return!1;let u=t.buffer;!u&&t.base64Image&&(u=Buffer.from(t.base64Image,"base64"));const I=Ct(i,t.fileName,s,u,e.GUI_VERSION||e.VERSION),_=await e.request(I).then((e=>e)).catch((t=>({statusCode:400,body:{msg:e.i18n.translate("AUTH_FAILED"),err:t}})));let c;if(c=E&&"string"==typeof _?JSON.parse(_):_,400===c.statusCode)throw(null===(r=null==c?void 0:c.body)||void 0===r?void 0:r.err)?c.body.err:new Error((null===(n=null==c?void 0:c.body)||void 0===n?void 0:n.msg)||(null===(a=null==c?void 0:c.body)||void 0===a?void 0:a.message));const S=i.options||"",d=void 0!==i.slim&&!!i.slim;if(E&&"SUCCESS"===c.message)delete t.base64Image,delete t.buffer,t.imgUrl=o?`${o}/${l}${t.fileName}`:`${c.data.source_url}${S}`;else{if(E||!c||200!==c.statusCode)throw new Error(_.body.msg);if(delete t.base64Image,delete t.buffer,o)t.imgUrl=`${o}/${encodeURIComponent(l)}${encodeURIComponent(t.fileName)}${S}`.replace(/%2F/g,"/");else{const e=i.endpoint?i.endpoint:`cos.${i.area}.myqcloud.com`;t.imgUrl=`https://${i.bucket}.${e}/${encodeURIComponent(l)}${encodeURIComponent(t.fileName)}${S}`.replace(/%2F/g,"/")}}d&&(t.imgUrl+=S?"&imageSlim":"?imageSlim")}return e}catch(t){if(!i.version||"v4"===i.version)try{const r=JSON.parse(t.error);e.emit(_t.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("UPLOAD_FAILED_REASON",{code:r.code}),text:"https://cloud.tencent.com/document/product/436/8432"})}catch(e){}throw t}},mt=e=>{const t=e.getConfig("picBed.tcyun")||{};return[{name:"version",type:"list",alias:e.i18n.translate("PICBED_TENCENTCLOUD_VERSION"),choices:["v4","v5"],default:"v5",required:!1},{name:"secretId",type:"input",get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_SECRETID")},default:t.secretId||"",required:!0},{name:"secretKey",type:"password",get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_SECRETKEY")},default:t.secretKey||"",required:!0},{name:"bucket",type:"input",get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_BUCKET")},default:t.bucket||"",required:!0},{name:"appId",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_APPID")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_APPID")},default:t.appId||"",get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_APPID")},required:!0},{name:"area",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_AREA")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_AREA")},default:t.area||"",get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_AREA")},required:!0},{name:"endpoint",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_ENDPOINT")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_ENDPOINT")},default:t.endpoint||"",get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_ENDPOINT")},required:!1},{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_PATH")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_PATH")},default:t.path||"",get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_PATH")},required:!1},{name:"customUrl",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_CUSTOMURL")},default:t.customUrl||"",get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_CUSTOMURL")},required:!1},{name:"options",type:"input",default:t.options||"",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_OPTIONS")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_OPTIONS")},get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_OPTIONS")},required:!1},{name:"slim",type:"confirm",default:void 0!==t.slim&&!!t.slim,get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_SLIM")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_SLIM")},required:!1,get confirmText(){return e.i18n.translate("PICBED_TENCENTCLOUD_SLIM_CONFIRM")},get cancelText(){return e.i18n.translate("PICBED_TENCENTCLOUD_SLIM_CANCEL")},get tips(){return e.i18n.translate("PICBED_TENCENTCLOUD_SLIM_TIP")}}]};const Tt=(e,t,r)=>{const n=t.path||"",{token:a,repo:i}=t;return{method:"PUT",url:`https://api.github.com/repos/${i}/contents/${encodeURI(n)}${encodeURIComponent(e)}`.replace(/%2F/g,"/"),headers:{Authorization:`token ${a}`,"User-Agent":"PicList","Content-Type":ee.default.lookup(e)||"application/octet-stream"},body:r,json:!0}},Dt=(e,t)=>{const r=t.path||"",{token:n,repo:a,branch:i}=t;return{method:"GET",url:`https://api.github.com/repos/${a}/contents/${encodeURI(r)}${encodeURIComponent(e)}?ref=${i}`.replace(/%2F/g,"/"),headers:{Authorization:`token ${n}`,"User-Agent":"PicGo"},json:!0}},ht=async e=>{const t=e.getConfig("picBed.github");if(!t)throw new Error("Can't find github config");try{const r=e.output,n=t.path||"";for(const a of r)if(a.fileName&&a.buffer){const r=a.base64Image||Buffer.from(a.buffer).toString("base64"),i={message:"Upload by PicList",branch:t.branch,content:r,path:n+encodeURI(a.fileName)},s=Tt(a.fileName,t,i);try{const r=await e.request(s);if(!r)throw new Error("Server error, please try again");delete a.base64Image,delete a.buffer,t.customUrl?a.imgUrl=`${t.customUrl}/${encodeURIComponent(n)}${encodeURIComponent(a.fileName)}`.replace(/%2F/g,"/"):a.imgUrl=r.content.download_url,a.hash=r.content.sha}catch(r){if(422!==r.statusCode)throw r;{delete a.base64Image,delete a.buffer;const r=await e.request(Dt(a.fileName,t));if(!Object.keys(r).length)throw new Error("Get Contents error, please try again");a.hash=r.sha,t.customUrl?a.imgUrl=`${t.customUrl}/${encodeURIComponent(n)}${encodeURIComponent(a.fileName)}`.replace(/%2F/g,"/"):a.imgUrl=r.download_url}}}return e}catch(t){throw e.emit(_t.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS_AND_NETWORK")}),t}},Lt=e=>{const t=e.getConfig("picBed.github")||{};return[{name:"repo",type:"input",get prefix(){return e.i18n.translate("PICBED_GITHUB_REPO")},get alias(){return e.i18n.translate("PICBED_GITHUB_REPO")},get message(){return e.i18n.translate("PICBED_GITHUB_MESSAGE_REPO")},default:t.repo||"",required:!0},{name:"branch",type:"input",get prefix(){return e.i18n.translate("PICBED_GITHUB_BRANCH")},get alias(){return e.i18n.translate("PICBED_GITHUB_BRANCH")},get message(){return e.i18n.translate("PICBED_GITHUB_MESSAGE_BRANCH")},default:t.branch||"master",required:!0},{name:"token",type:"password",get alias(){return e.i18n.translate("PICBED_GITHUB_TOKEN")},default:t.token||"",required:!0},{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_GITHUB_PATH")},get alias(){return e.i18n.translate("PICBED_GITHUB_PATH")},get message(){return e.i18n.translate("PICBED_GITHUB_MESSAGE_PATH")},default:t.path||"",required:!1},{name:"customUrl",type:"input",get prefix(){return e.i18n.translate("PICBED_GITHUB_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_GITHUB_CUSTOMURL")},get message(){return e.i18n.translate("PICBED_GITHUB_MESSAGE_CUSTOMURL")},default:t.customUrl||"",required:!1}]};function Ut(e,t,r,n){const a=function(e){return"z0"===e?"":"-"+e}(e.area||"z0"),i=e.path||"";return{method:"POST",url:`http://upload${a}.qiniup.com/putb64/-1/key/${Buffer.from(i+t,"utf-8").toString("base64").replace(/\+/g,"-").replace(/\//g,"_")}`,headers:{Authorization:`UpToken ${r}`,"Content-Type":ee.default.lookup(t)||"application/octet-stream"},body:n}}function Nt(e){const t=e.accessKey,r=e.secretKey,n=new te.default.auth.digest.Mac(t,r),a={scope:e.bucket};return new te.default.rs.PutPolicy(a).uploadToken(n)}const Rt=async e=>{const t=e.getConfig("picBed.qiniu");if(!t)throw new Error("Can't find qiniu config");try{const r=e.output;for(const n of r)if(n.fileName&&n.buffer){const r=n.base64Image||Buffer.from(n.buffer).toString("base64"),a=Ut(t,n.fileName,Nt(t),r),i=await e.request(a),s=JSON.parse(i);if(!(null==s?void 0:s.key))throw e.emit(_t.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:s.msg}),e.log.error("qiniu error",s),new Error("Upload failed");{delete n.base64Image,delete n.buffer;const e=t.url,r=t.options||"";n.imgUrl=`${e}/${s.key}${r}`}}return e}catch(t){if("Upload failed"!==t.message&&t.response){const r=t.response.body;e.emit(_t.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:r.error})}throw t}},Bt=e=>{const t=e.getConfig("picBed.qiniu")||{};return[{name:"accessKey",type:"input",get alias(){return e.i18n.translate("PICBED_QINIU_ACCESSKEY")},default:t.accessKey||"",required:!0},{name:"secretKey",type:"password",get alias(){return e.i18n.translate("PICBED_QINIU_SECRETKEY")},default:t.secretKey||"",required:!0},{name:"bucket",type:"input",get alias(){return e.i18n.translate("PICBED_QINIU_BUCKET")},default:t.bucket||"",required:!0},{name:"url",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_URL")},get alias(){return e.i18n.translate("PICBED_QINIU_URL")},get message(){return e.i18n.translate("PICBED_QINIU_MESSAGE_URL")},default:t.url||"",required:!0},{name:"area",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_AREA")},get alias(){return e.i18n.translate("PICBED_QINIU_AREA")},get message(){return e.i18n.translate("PICBED_QINIU_MESSAGE_AREA")},default:t.area||"",required:!0},{name:"options",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_OPTIONS")},get alias(){return e.i18n.translate("PICBED_QINIU_OPTIONS")},get message(){return e.i18n.translate("PICBED_QINIU_MESSAGE_OPTIONS")},default:t.options||"",required:!1},{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_PATH")},get alias(){return e.i18n.translate("PICBED_QINIU_PATH")},get message(){return e.i18n.translate("PICBED_QINIU_MESSAGE_PATH")},default:t.path||"",required:!1}]};const Ot=async(e,t,r,n)=>{const a=t.clientId||"",i=t.username||"",s=(e=>e?e.startsWith("Bearer")?e:`Bearer ${e}`:"")(t.accessToken||""),o=t.album||"";let l;if(i&&s)l=s;else{if(!a)throw new Error("clientId or accessToken is required");l=`Client-ID ${a}`}const E={method:"POST",url:"https://api.imgur.com/3/image",headers:{Authorization:l,"content-type":"multipart/form-data",Host:"api.imgur.com","User-Agent":"PicList"},formData:{image:n,type:"base64",name:r,description:"Uploaded with PicList"}};if(i&&s&&o){let r,n=0,a="";do{const s={method:"GET",url:`https://api.imgur.com/3/account/${i}/albums/${n}`,headers:{Authorization:l},json:!0,resolveWithFullResponse:!0,timeout:1e4};if(t.proxy&&(s.proxy=t.proxy),r=await e.request(s),200!==r.statusCode||!r.body.success)throw new Error("Server error, please try again");const E=r.body.data;for(const e of E)if(e.title===o){a=e.id;break}n++}while(r.body.data.length>0);a&&E.formData&&(E.formData.album=a)}return t.proxy&&(E.proxy=t.proxy),E},Mt=async e=>{var t;const r=e.getConfig("picBed.imgur");if(!r)throw new Error("Can't find imgur config");try{const t=e.output;for(const n of t)if(n.fileName&&n.buffer){const t=n.base64Image||Buffer.from(n.buffer).toString("base64"),a=await Ot(e,r,n.fileName,t),i=await e.request(a),s="string"==typeof i?JSON.parse(i):i;if(!s.success)throw new Error("Server error, please try again");delete n.base64Image,delete n.buffer,n.imgUrl=s.data.link,n.hash=s.data.deletehash}return e}catch(r){throw e.emit(_t.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS_AND_NETWORK"),text:"http://docs.imgur.com/api/errno/"}),(null===(t=null==r?void 0:r.response)||void 0===t?void 0:t.data)||r}},yt=e=>{const t=e.getConfig("picBed.imgur")||{};return[{name:"clientId",type:"input",get prefix(){return e.i18n.translate("PICBED_IMGUR_CLIENTID")},get alias(){return e.i18n.translate("PICBED_IMGUR_CLIENTID")},get message(){return e.i18n.translate("PICBED_IMGUR_MESSAGE_CLIENTID")},default:t.clientId||"",required:!1},{name:"username",type:"input",get prefix(){return e.i18n.translate("PICBED_IMGUR_USERNAME")},get alias(){return e.i18n.translate("PICBED_IMGUR_USERNAME")},get message(){return e.i18n.translate("PICBED_IMGUR_MESSAGE_USERNAME")},default:t.username||"",required:!1},{name:"accessToken",type:"input",get prefix(){return e.i18n.translate("PICBED_IMGUR_ACCESS_TOKEN")},get alias(){return e.i18n.translate("PICBED_IMGUR_ACCESS_TOKEN")},get message(){return e.i18n.translate("PICBED_IMGUR_MESSAGE_ACCESS_TOKEN")},default:t.accessToken||"",required:!1},{name:"album",type:"input",get prefix(){return e.i18n.translate("PICBED_IMGUR_ALBUM")},get alias(){return e.i18n.translate("PICBED_IMGUR_ALBUM")},get message(){return e.i18n.translate("PICBED_IMGUR_MESSAGE_ALBUM")},default:t.album||"",required:!1},{name:"proxy",type:"input",get prefix(){return e.i18n.translate("PICBED_IMGUR_PROXY")},get alias(){return e.i18n.translate("PICBED_IMGUR_PROXY")},get message(){return e.i18n.translate("PICBED_IMGUR_MESSAGE_PROXY")},default:t.proxy||"",required:!1}]};const wt=(e,t)=>{const r=(new Date).toUTCString(),n=`PUT\n\n${ee.default.lookup(t)||"application/octet-stream"}\n${r}\n/${e.bucket}/${e.path}${t}`,a=K.default.createHmac("sha1",e.accessKeySecret).update(n).digest("base64");return`OSS ${e.accessKeyId}:${a}`},Gt=(e,t,r,n)=>({method:"PUT",url:`https://${e.bucket}.${e.area}.aliyuncs.com/${encodeURI(e.path)}${encodeURIComponent(t)}`.replace(/%2F/g,"/"),headers:{Host:`${e.bucket}.${e.area}.aliyuncs.com`,Authorization:r,Date:(new Date).toUTCString(),"Content-Type":ee.default.lookup(t)},body:n,resolveWithFullResponse:!0}),bt=async e=>{var t;const r=e.getConfig("picBed.aliyun");if(!r)throw new Error("Can't find aliYun OSS config");r.path=r.path.replace(/\/*$/,"").replace(/^\/*/,"")+"/","/"===r.path&&(r.path="");try{const n=e.output,a=r.customUrl,i=null!==(t=r.path)&&void 0!==t?t:"";for(const t of n)if(t.fileName&&t.buffer){const n=wt(r,t.fileName);let s=t.buffer;!s&&t.base64Image&&(s=Buffer.from(t.base64Image,"base64"));const o=Gt(r,t.fileName,n,s);if(200!==(await e.request(o)).statusCode)throw new Error("Upload failed");{delete t.base64Image,delete t.buffer;const e=r.options||"";t.imgUrl=a?`${a}/${encodeURIComponent(i)}${encodeURIComponent(t.fileName)}${e}`.replace(/%2F/g,"/"):`https://${r.bucket}.${r.area}.aliyuncs.com/${encodeURIComponent(i)}${encodeURIComponent(t.fileName)}${e}`.replace(/%2F/g,"/")}}return e}catch(t){throw e.emit(_t.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")}),t}},xt=e=>{const t=e.getConfig("picBed.aliyun")||{};return[{name:"accessKeyId",type:"input",get alias(){return e.i18n.translate("PICBED_ALICLOUD_ACCESSKEYID")},default:t.accessKeyId||"",required:!0},{name:"accessKeySecret",type:"password",get alias(){return e.i18n.translate("PICBED_ALICLOUD_ACCESSKEYSECRET")},default:t.accessKeySecret||"",required:!0},{name:"bucket",type:"input",get alias(){return e.i18n.translate("PICBED_ALICLOUD_BUCKET")},default:t.bucket||"",required:!0},{name:"area",type:"input",get prefix(){return e.i18n.translate("PICBED_ALICLOUD_AREA")},get alias(){return e.i18n.translate("PICBED_ALICLOUD_AREA")},default:t.area||"",get message(){return e.i18n.translate("PICBED_ALICLOUD_MESSAGE_AREA")},required:!0},{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_ALICLOUD_PATH")},get alias(){return e.i18n.translate("PICBED_ALICLOUD_PATH")},get message(){return e.i18n.translate("PICBED_ALICLOUD_MESSAGE_PATH")},default:t.path||"",required:!1},{name:"customUrl",type:"input",get prefix(){return e.i18n.translate("PICBED_ALICLOUD_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_ALICLOUD_CUSTOMURL")},get message(){return e.i18n.translate("PICBED_ALICLOUD_MESSAGE_CUSTOMURL")},default:t.customUrl||"",required:!1},{name:"options",type:"input",get prefix(){return e.i18n.translate("PICBED_ALICLOUD_OPTIONS")},get alias(){return e.i18n.translate("PICBED_ALICLOUD_OPTIONS")},get message(){return e.i18n.translate("PICBED_ALICLOUD_MESSAGE_OPTIONS")},default:t.options||"",required:!1}]};const Ft=(e,t)=>{const r=e.path||"",n=e.operator,a=Ht(e.password),i=(new Date).toUTCString(),s=`PUT&${`/${e.bucket}/${encodeURI(r)}${encodeURIComponent(t)}`.replace(/%2F/g,"/")}&${i}`;return`UPYUN ${n}:${K.default.createHmac("sha1",a).update(s).digest("base64")}`},$t=(e,t,r,n)=>{const a=e.bucket,i=e.path||"";return{method:"PUT",url:`https://v0.api.upyun.com/${a}/${encodeURI(i)}${encodeURIComponent(t)}`.replace(/%2F/g,"/"),headers:{Authorization:r,Date:(new Date).toUTCString(),"Content-Type":ee.default.lookup(t)||"application/octet-stream"},body:n,resolveWithFullResponse:!0}};function Ht(e){return K.default.createHash("md5").update(e).digest("hex")}const Wt=(e,t,r,n)=>{const a=`/${encodeURI(r.path||"")}${encodeURIComponent(n)}`.replace(/%2F/g,"/").replace(/^\/+/g,"/"),i=Math.round((new Date).getTime()/1e3),s=t?i+parseInt(t.toString(),10):i+1800;return`_upt=${`${Ht(`${e}&${s}&${a}`).substring(12,20)}${s}`}`},vt=async e=>{const t=e.getConfig("picBed.upyun");if(!t)throw new Error("Can't find upYun config");try{const r=e.output,n=t.path||"";for(const a of r)if(a.fileName&&a.buffer){let r=a.buffer;!r&&a.base64Image&&(r=Buffer.from(a.base64Image,"base64"));const i=Ft(t,a.fileName),s=$t(t,a.fileName,i,r),o=t.options||"";if(200!==(await e.request(s)).statusCode)throw new Error("Upload failed");if(delete a.base64Image,delete a.buffer,a.imgUrl=`${t.url}/${encodeURIComponent(n)}${encodeURIComponent(a.fileName)}${o}`.replace(/%2F/g,"/"),t.antiLeechToken){const e=Wt(t.antiLeechToken,t.expireTime,t,a.fileName);a.imgUrl=a.imgUrl.includes("?")?`${a.imgUrl}&${e}`:`${a.imgUrl}?${e}`}}return e}catch(t){if("Upload failed"===t.message)e.emit(_t.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")});else{const r=Re(t.error);e.emit(_t.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("UPLOAD_FAILED_REASON",{code:"object"==typeof r?r.code:r}),text:"http://docs.upyun.com/api/errno/"})}throw t}},Kt=e=>{const t=e.getConfig("picBed.upyun")||{};return[{name:"bucket",type:"input",get alias(){return e.i18n.translate("PICBED_UPYUN_BUCKET")},default:t.bucket||"",required:!0},{name:"operator",type:"input",get alias(){return e.i18n.translate("PICBED_UPYUN_OPERATOR")},get prefix(){return e.i18n.translate("PICBED_UPYUN_OPERATOR")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_OPERATOR")},default:t.operator||"",required:!0},{name:"password",type:"password",get prefix(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_PASSWORD")},get alias(){return e.i18n.translate("PICBED_UPYUN_PASSWORD")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_PASSWORD")},default:t.password||"",required:!0},{name:"url",type:"input",get alias(){return e.i18n.translate("PICBED_UPYUN_URL")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_URL")},default:t.url||"",required:!0},{name:"options",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_OPTIONS")},get alias(){return e.i18n.translate("PICBED_UPYUN_OPTIONS")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_OPTIONS")},default:t.options||"",required:!1},{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_PATH")},get alias(){return e.i18n.translate("PICBED_UPYUN_PATH")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_PATH")},default:t.path||"",required:!1},{name:"antiLeechToken",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_ANTI_LEECH_TOKEN")},get alias(){return e.i18n.translate("PICBED_UPYUN_ANTI_LEECH_TOKEN")},get message(){return e.i18n.translate("PICBED_UPYUN_ANTI_LEECH_TOKEN")},default:t.antiLeechToken||"",required:!1},{name:"expireTime",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_EXPIRE_TIME")},get alias(){return e.i18n.translate("PICBED_UPYUN_EXPIRE_TIME")},get message(){return e.i18n.translate("PICBED_UPYUN_EXPIRE_TIME")},default:t.expireTime||"",required:!1}]};const kt=async(e,t,r,n)=>{const a=[...t.path.replace(/\/+$/g,"").split("/"),...F.default.dirname(r).split("/")];let i="";for(const r of a)if(r){i+=`/${r}`;const n={method:"MKCOL",url:`${t.host}${encodeURI(i)}`.replace(/%2F/g,"/"),headers:{Authorization:`Basic ${Buffer.from(`${t.username}:${t.password}`).toString("base64")}`}};try{await e.request(n)}catch(e){console.log(e)}}return{method:"PUT",url:`${t.host}/${"/"===t.path?"":encodeURI(t.path)}${encodeURIComponent(r)}`.replace(/%2F/g,"/"),headers:{Authorization:`Basic ${Buffer.from(`${t.username}:${t.password}`).toString("base64")}`,"Content-Type":ee.default.lookup(r)||"application/octet-stream","Content-Length":n.length},body:n,resolveWithFullResponse:!0}},qt=async e=>{const t=e.getConfig("picBed.webdavplist");if(!t)throw new Error("Can't find webdavplist config");t.host=t.host.replace(/^https?:\/\/|\/+$/g,""),t.host=(t.sslEnabled?"https://":"http://")+t.host,t.path=(t.path||"").replace(/^\/+|\/+$/g,"")+"/";const r=(t.webpath||"").replace(/^\/+|\/+$/g,"")+"/";try{const n=e.output,a=t.customUrl,i=t.path;for(const s of n)if(s.fileName&&s.buffer){let n=s.buffer;!n&&s.base64Image&&(n=Buffer.from(s.base64Image,"base64"));const o=await kt(e,t,s.fileName,n),l=await e.request(o);if(!(l.statusCode>=200&&l.statusCode<300))throw new Error("Upload failed");{const o=F.default.join(e.baseDir,"imgTemp");x.default.ensureDirSync(F.default.dirname(F.default.join(o,s.fileName))),x.default.writeFileSync(F.default.join(o,s.fileName),n),delete s.base64Image,delete s.buffer;const l=a||t.host;t.webpath?s.imgUrl=`${l}/${"/"===r?"":encodeURIComponent(r)}${encodeURIComponent(s.fileName)}`.replace(/%2F/g,"/"):s.imgUrl=`${l}/${"/"===i?"":encodeURIComponent(i)}${encodeURIComponent(s.fileName)}`.replace(/%2F/g,"/"),s.galleryPath=`http://localhost:36699/${encodeURIComponent(s.fileName)}`}}return e}catch(t){throw e.emit(_t.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")}),t}},Yt=e=>{var t;const r=e.getConfig("picBed.webdavplist")||{};return[{name:"host",type:"input",get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_HOST")},default:r.host||"",required:!0},{name:"sslEnabled",type:"confirm",get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_SSLENABLED")},required:!1,default:null!==(t=r.sslEnabled)&&void 0!==t&&t,get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_SSLENABLED")},get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_SSLENABLED")}},{name:"username",type:"input",get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_USERNAME")},default:r.username||"",required:!0,get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_USERNAME")},get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_USERNAME")}},{name:"password",type:"password",get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_PASSWORD")},default:r.password||"",required:!0,get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_PASSWORD")},get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_PASSWORD")}},{name:"path",type:"input",get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_PATH")},default:r.path||"",required:!1,get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_PATH")},get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_PATH")}},{name:"webpath",type:"input",get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_WEBSITE_PATH")},default:r.path||"",required:!1,get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_WEBSITE_PATH")},get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_WEBSITE_PATH")}},{name:"customUrl",type:"input",get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_CUSTOMURL")},default:r.customUrl||"",required:!1,get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_CUSTOMURL")},get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_CUSTOMURL")}}]};const jt=async e=>{const t=e.getConfig("picBed.local");if(!t)throw new Error("Can not find local config!");const r=t.path||"";let n=t.customUrl||"";n&&(n=n.replace(/\/$/,""));let a=t.webPath||"";a&&(a=a.replace(/\\/g,"/").replace(/^\//,"").replace(/\/$/,""));const i=e.output;for(const t of i)if(t.fileName&&t.buffer){let i=t.buffer;!i&&t.base64Image&&(i=Buffer.from(t.base64Image,"base64"));try{try{x.default.ensureDirSync(r),x.default.writeFileSync(F.default.join(r,t.fileName),i),x.default.copyFileSync(F.default.join(r,t.fileName),F.default.join(e.baseDir,"imgTemp",t.fileName)),delete t.base64Image,delete t.buffer,t.imgUrl=n?a?`${n}/${encodeURIComponent(a)}/${encodeURIComponent(t.fileName)}`.replace(/%2F/g,"/"):`${n}/${encodeURIComponent(t.fileName)}`.replace(/%2F/g,"/"):F.default.join(r,t.fileName),t.hash=F.default.join(r,t.fileName),t.galleryPath=`http://localhost:36699/${encodeURIComponent(t.fileName)}`}catch(t){throw e.emit(_t.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:"failed to upload image"}),new Error("failed to upload image")}}catch(t){throw e.log.error(t),t}}return e},Vt=e=>{const t=e.getConfig("picBed.local")||{};return[{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_LOCAL_PATH")},get alias(){return e.i18n.translate("PICBED_LOCAL_PATH")},default:t.path||"",get message(){return e.i18n.translate("PICBED_LOCAL_MESSAGE_PATH")},required:!0},{name:"customUrl",type:"input",get prefix(){return e.i18n.translate("PICBED_LOCAL_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_LOCAL_CUSTOMURL")},default:t.customUrl||"",get message(){return e.i18n.translate("PICBED_LOCAL_MESSAGE_CUSTOMURL")},required:!1},{name:"webPath",type:"input",get alias(){return e.i18n.translate("PICBED_LOCAL_WEBPATH")},default:t.webPath||"",required:!1,get prefix(){return e.i18n.translate("PICBED_LOCAL_WEBPATH")},get message(){return e.i18n.translate("PICBED_LOCAL_MESSAGE_WEBPATH")}}]};class zt{constructor(){this._isConnected=!1}static get instance(){return this._instance||(this._instance=new this)}static get client(){return this._client||(this._client=new h.NodeSSH)}changeWinStylePathToUnix(e){return e.replace(/\\/g,"/")}async connect(e){const{username:t,password:r,privateKey:n,passphrase:a}=e,i=n?{username:t,privateKeyPath:n,passphrase:a||void 0}:{username:t,password:r};try{return await zt.client.connect(Object.assign({host:e.host,port:Number(e.port)||22},i)),this._isConnected=!0,!0}catch(e){throw new Error(e)}}async upload(e,t,r){if(!this._isConnected)throw new Error("SSH 未连接");try{t=this.changeWinStylePathToUnix(t),await this.mkdir(F.default.dirname(t).replace(/^\/+|\/+$/g,""),r),await zt.client.putFile(e,t);const n=r.fileMode||"0644";if("0644"!==n){const e=`chmod ${n} "${t}"`;return await this.exec(e)}return!0}catch(e){return!1}}async mkdir(e,t){if(!zt.client.isConnected())throw new Error("SSH 未连接");const r=t.dirMode||"0755";if("0755"!==r){const t=e.split("/");let n="";for(const e of t)if(e){n+=`/${e}`;const t=`mkdir "${n}" && chmod ${r} "${n}"`;await this.exec(t)}}else{const t=`mkdir -p "${e}"`;await this.exec(t)}}async chown(e,t,r){e=this.changeWinStylePathToUnix(e);const[n,a]=r?[t,r]:t.includes(":")?t.split(":"):[t,t],i=`chown ${n}:${a} "${e}"`;return this.exec(i)}async exec(e){return 0===(await zt.client.execCommand(e)).code}close(){zt.client.dispose(),this._isConnected=!1}}const Qt=async e=>{const t=e.getConfig("picBed.sftpplist");if(!t)throw new Error("Can not find sftpplist config!");t.port=Number(t.port)||22,t.uploadPath=(t.uploadPath||"").replace(/^\/+|\/+$/g,"")+"/";const r=(t.webPath||"").replace(/^\/+|\/+$/g,"")+"/";try{const n=e.output;for(const a of n)if(a.fileName&&a.buffer){let n=a.buffer;!n&&a.base64Image&&(n=Buffer.from(a.base64Image,"base64"));const i=F.default.join(e.baseDir,"uploadTemp"),s=F.default.join(e.baseDir,"imgTemp","sftpplist");x.default.ensureDirSync(i),x.default.ensureDirSync(s);const o=F.default.join(i,a.fileName);x.default.writeFileSync(o,n);const l=zt.instance;await l.connect(t);const E=F.default.join(`/${t.uploadPath}`.replace(/\/\/+/g,"/"),a.fileName);await l.upload(o,E,t),t.fileUser&&await l.chown(E,t.fileUser),delete a.base64Image,delete a.buffer;const u=t.customUrl||t.host;t.webPath?a.imgUrl=`${u}/${"/"===r?"":encodeURIComponent(r)}${encodeURIComponent(a.fileName)}`.replace(/%2F/g,"/"):a.imgUrl=`${u}/${"/"===t.uploadPath?"":encodeURIComponent(t.uploadPath)}${encodeURIComponent(a.fileName)}`.replace(/%2F/g,"/"),x.default.moveSync(o,F.default.join(s,a.fileName)),a.galleryPath=`http://localhost:36699/sftpplist/${encodeURIComponent(a.fileName)}`,l.close()}return e}catch(t){throw e.emit(_t.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")}),t}},Xt=e=>{const t=e.getConfig("picBed.sftpplist")||{};return[{name:"host",type:"input",get alias(){return e.i18n.translate("PICBED_SFTPPLIST_HOST")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_HOST")},default:t.host||"",required:!0},{name:"port",type:"input",get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_PORT")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_PORT")},default:t.port||22,required:!1},{name:"username",type:"input",get alias(){return e.i18n.translate("PICBED_SFTPPLIST_USERNAME")},default:t.username||"",required:!0},{name:"password",type:"input",get alias(){return e.i18n.translate("PICBED_SFTPPLIST_PASSWORD")},default:t.password||"",required:!1},{name:"privateKey",type:"input",get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_PRIVATEKEY")},default:t.privateKey||"",required:!1},{name:"passphrase",type:"input",get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY_PASSPHRASE")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_PRIVATEKEY_PASSPHRASE")},default:t.passphrase||"",required:!1},{name:"uploadPath",type:"input",get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_UPLOADPATH")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_UPLOADPATH")},default:t.uploadPath||"",required:!1},{name:"customUrl",type:"input",get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_CUSTOMURL")},default:t.customUrl||"",required:!1},{name:"webPath",type:"input",get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_WEBSITE_PATH")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_WEBSITE_PATH")},default:t.webPath||"",required:!1},{name:"fileUser",type:"input",get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_FILE_USER")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_FILE_USER")},default:t.fileUser||"",required:!1},{name:"fileMode",type:"input",get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_FILE_MODE")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_FILE_MODE")},default:t.fileMode||"",required:!1},{name:"dirMode",type:"input",get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_DIR_MODE")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_DIR_MODE")},default:t.dirMode||"",required:!1}]};const Zt=()=>({register(e){!function(e){e.helper.uploader.register("aliyun",{get name(){return e.i18n.translate("PICBED_ALICLOUD")},handle:bt,config:xt})}(e),function(e){e.helper.uploader.register("tcyun",{get name(){return e.i18n.translate("PICBED_TENCENTCLOUD")},handle:At,config:mt})}(e),function(e){e.helper.uploader.register("smms",{get name(){return e.i18n.translate("PICBED_SMMS")},handle:pt,config:gt})}(e),function(e){e.helper.uploader.register("github",{get name(){return e.i18n.translate("PICBED_GITHUB")},handle:ht,config:Lt})}(e),function(e){e.helper.uploader.register("qiniu",{get name(){return e.i18n.translate("PICBED_QINIU")},handle:Rt,config:Bt})}(e),function(e){e.helper.uploader.register("imgur",{get name(){return e.i18n.translate("PICBED_IMGUR")},handle:Mt,config:yt})}(e),function(e){e.helper.uploader.register("upyun",{get name(){return e.i18n.translate("PICBED_UPYUN")},handle:vt,config:Kt})}(e),function(e){e.helper.uploader.register("webdavplist",{get name(){return e.i18n.translate("PICBED_WEBDAVPLIST")},handle:qt,config:Yt})}(e),function(e){e.helper.uploader.register("local",{get name(){return e.i18n.translate("PICBED_LOCAL")},handle:jt,config:Vt})}(e),function(e){e.helper.uploader.register("sftpplist",{get name(){return e.i18n.translate("PICBED_SFTPPLIST")},handle:Qt,config:Xt})}(e)}}),Jt=(e,t,r)=>{const n=Pe(t);return n.real||("string"==typeof r?e.log.warn(`can't get ${r}'s image size`):e.log.warn("can't get image size"),e.log.warn("fallback to 200 * 200")),n};var er={handle:async e=>{const t=e.output;return await Promise.all(e.input.map((async(r,n)=>{let a;if(a=Buffer.isBuffer(r)?{success:!0,buffer:r,fileName:"",extname:""}:ce(r)?await ge(r,e):await pe(r),a.success&&a.buffer){const i=Jt(e,a.buffer,r),s=a.extname||i.extname||".png";t[n]={buffer:a.buffer,fileName:a.fileName||`${Q.default().format("YYYYMMDDHHmmss")}${s}}`,width:i.width,height:i.height,extname:a.extname}}else e.log.error(a.reason)}))),e.output=t.filter((e=>e)),e}};var tr={handle:async e=>(e.output.push(...e.input),e)};class rr{constructor(e){this.list=[],this.fullList=new Set,this.pluginMap=new Map,this.ctx=e,this.init()}init(){const e=F.default.join(this.ctx.baseDir,"package.json");if(!x.default.existsSync(e)){const t={name:"picgo-plugins",description:"picgo-plugins",repository:"https://github.com/PicGo/PicGo-Core",license:"MIT"};x.default.writeFileSync(e,JSON.stringify(t),"utf8")}}resolvePlugin(e,t){try{return re.default.sync(t,{basedir:e.baseDir})}catch(r){return F.default.join(e.baseDir,"node_modules",t)}}load(){const e=F.default.join(this.ctx.baseDir,"package.json"),t=F.default.join(this.ctx.baseDir,"node_modules/");if(!x.default.existsSync(t))return!1;const r=x.default.readJSONSync(e),n=Object.keys(r.dependencies||{}),a=Object.keys(r.devDependencies||{}),i=n.concat(a).filter((e=>{if(!/^picgo-plugin-|^@[^/]+\/picgo-plugin-/.test(e))return!1;const t=this.resolvePlugin(this.ctx,e);return x.default.existsSync(t)}));for(const e of i)this.registerPlugin(e);return!0}registerPlugin(e,t){if(e&&"string"==typeof e){this.fullList.add(e);try{if(t){this.list.push(e),Et(e);const r=t(this.ctx);this.pluginMap.set(e,r),r.register(this.ctx)}else if(!0===this.ctx.getConfig(`picgoPlugins.${e}`)||void 0===this.ctx.getConfig(`picgoPlugins.${e}`)){this.list.push(e),Et(e),this.getPlugin(e).register(this.ctx);const t=`picgoPlugins[${e}]`;this.ctx.saveConfig({[t]:!0})}}catch(t){this.pluginMap.delete(e),this.list=this.list.filter((t=>t!==e)),this.fullList.delete(e),this.ctx.log.error(t),this.ctx.emit(_t.NOTIFICATION,{title:`Plugin ${e} Load Error`,body:t})}}else this.ctx.log.warn("Please provide valid plugin")}unregisterPlugin(e){this.list=this.list.filter((t=>t!==e)),this.fullList.delete(e),this.pluginMap.delete(e),Et(e),this.ctx.helper.uploader.unregister(e),this.ctx.helper.transformer.unregister(e),this.ctx.helper.beforeTransformPlugins.unregister(e),this.ctx.helper.beforeUploadPlugins.unregister(e),this.ctx.helper.afterUploadPlugins.unregister(e),this.ctx.cmd.unregister(e),this.ctx.removeConfig("picgoPlugins",e)}getPlugin(e){if(this.pluginMap.has(e))return this.pluginMap.get(e);const t=F.default.join(this.ctx.baseDir,"node_modules/"),r=require(t+e)(this.ctx);return this.pluginMap.set(e,r),r}getList(){return this.list}hasPlugin(e){return this.fullList.has(e)}getFullList(){return[...this.fullList]}}const nr={darwin:'-- From https://github.com/mushanshitiancai/vscode-paste-image\r\nproperty fileTypes : {{«class PNGf», ".png"}}\r\n\r\non run argv\r\n\tif argv is {} then\r\n\t\treturn ""\r\n\tend if\r\n\r\n\tif ((clipboard info) as string) contains "«class furl»" then\r\n\t\treturn POSIX path of (the clipboard as «class furl»)\r\n\telse\r\n\t\tset imagePath to (item 1 of argv)\r\n\t\tset theType to getType()\r\n\r\n\t\tif theType is not missing value then\r\n\t\t\ttry\r\n\t\t\t\tset myFile to (open for access imagePath with write permission)\r\n\t\t\t\tset eof myFile to 0\r\n\t\t\t\twrite (the clipboard as (first item of theType)) to myFile\r\n\t\t\t\tclose access myFile\r\n\t\t\t\treturn (POSIX path of imagePath)\r\n\t\t\ton error\r\n\t\t\t\ttry\r\n\t\t\t\t\tclose access myFile\r\n\t\t\t\tend try\r\n\t\t\t\treturn "no image"\r\n\t\t\tend try\r\n\t\telse\r\n\t\t\treturn "no image"\r\n\t\tend if\r\n\tend if\r\nend run\r\n\r\non getType()\r\n\trepeat with aType in fileTypes\r\n\t\trepeat with theInfo in (clipboard info)\r\n\t\t\tif (first item of theInfo) is equal to (first item of aType) then return aType\r\n\t\tend repeat\r\n\tend repeat\r\n\treturn missing value\r\nend getType\r\n',win32:'\r\nparam($imagePath)\r\n\r\n# Adapted from https://github.com/octan3/img-clipboard-dump/blob/master/dump-clipboard-png.ps1\r\n\r\nAdd-Type -Assembly PresentationCore\r\n$img = [Windows.Clipboard]::GetImage()\r\n\r\nif ($img -eq $null) {\r\n "no image"\r\n Exit 1\r\n}\r\n\r\nif (-not $imagePath) {\r\n "no image"\r\n Exit 1\r\n}\r\n\r\n$fcb = new-object Windows.Media.Imaging.FormatConvertedBitmap($img, [Windows.Media.PixelFormats]::Rgb24, $null, 0)\r\n$stream = [IO.File]::Open($imagePath, "OpenOrCreate")\r\n$encoder = New-Object Windows.Media.Imaging.PngBitmapEncoder\r\n$encoder.Frames.Add([Windows.Media.Imaging.BitmapFrame]::Create($fcb)) | out-null\r\n$encoder.Save($stream) | out-null\r\n$stream.Dispose() | out-null\r\n\r\n$imagePath\r\n',win10:'# Adapted from https://github.com/octan3/img-clipboard-dump/blob/master/dump-clipboard-png.ps1\r\nparam($imagePath)\r\n\r\n# https://github.com/PowerShell/PowerShell/issues/7233\r\n# fix the output encoding bug\r\n[console]::InputEncoding = [console]::OutputEncoding = New-Object System.Text.UTF8Encoding\r\n\r\nAdd-Type -Assembly PresentationCore\r\nfunction main {\r\n $img = [Windows.Clipboard]::GetImage()\r\n\r\n if ($img -eq $null) {\r\n "no image"\r\n Exit 1\r\n }\r\n\r\n if (-not $imagePath) {\r\n "no image"\r\n Exit 1\r\n }\r\n\r\n $fcb = new-object Windows.Media.Imaging.FormatConvertedBitmap($img, [Windows.Media.PixelFormats]::Rgb24, $null, 0)\r\n $stream = [IO.File]::Open($imagePath, "OpenOrCreate")\r\n $encoder = New-Object Windows.Media.Imaging.PngBitmapEncoder\r\n $encoder.Frames.Add([Windows.Media.Imaging.BitmapFrame]::Create($fcb)) | out-null\r\n $encoder.Save($stream) | out-null\r\n $stream.Dispose() | out-null\r\n\r\n $imagePath\r\n # fix windows 10 native cmd crash bug when "picgo upload"\r\n # https://github.com/PicGo/PicGo-Core/issues/32\r\n Exit 1\r\n}\r\n\r\ntry {\r\n # For WIN10\r\n $file = Get-Clipboard -Format FileDropList\r\n if ($file -ne $null) {\r\n Convert-Path $file\r\n Exit 1\r\n }\r\n} catch {\r\n # For WIN7 WIN8 WIN10\r\n main\r\n}\r\n\r\nmain',linux:'#!/bin/sh\r\n\r\nif [ -z "$DISPLAY" ]; then\r\n echo "no support" >&2\r\n exit 1\r\nfi\r\n\r\ncase "$XDG_SESSION_TYPE" in\r\nwayland)\r\n command -v wl-copy >/dev/null 2>&1 || {\r\n echo >&2 "no wl-clipboard"\r\n exit 1\r\n }\r\n filePath=$(wl-copy -o 2>/dev/null | grep ^file:// | cut -c8-)\r\n if [ -z "$filePath" ]; then\r\n if\r\n wl-copy -t image/png image/png -o >"$1" 2>/dev/null\r\n then\r\n echo "$1"\r\n else\r\n rm -f "$1"\r\n echo "no image"\r\n fi\r\n else\r\n echo "$filePath"\r\n fi\r\n ;;\r\nx11 | tty)\r\n # require xclip(see http://stackoverflow.com/questions/592620/check-if-a-program-exists-from-a-bash-script/677212#677212)\r\n command -v xclip >/dev/null 2>&1 || {\r\n echo >&2 "no xclip"\r\n exit 1\r\n }\r\n # write image in clipboard to file (see http://unix.stackexchange.com/questions/145131/copy-image-from-clipboard-to-file)\r\n filePath=$(xclip -selection clipboard -o 2>/dev/null | grep ^file:// | cut -c8-)\r\n if [ -z "$filePath" ]; then\r\n if\r\n xclip -selection clipboard -target image/png -o >"$1" 2>/dev/null\r\n then\r\n echo "$1"\r\n else\r\n rm -f "$1"\r\n echo "no image"\r\n fi\r\n else\r\n echo "$filePath"\r\n fi\r\n ;;\r\nesac\r\n',wsl:'#!/bin/sh\r\n# grab the paths\r\nscriptPath=$(echo $0 | awk \'{ print substr( $0, 1, length($0)-6 ) }\')"windows10.ps1"\r\nimagePath=$(echo $1 | awk \'{ print substr( $0, 1, length($0)-18 ) }\')\r\nimageName=$(echo $1 | awk \'{ print substr( $0, length($0)-17, length($0) ) }\')\r\n\r\n# run the powershell script\r\nres=$(powershell.exe -noprofile -noninteractive -nologo -sta -executionpolicy unrestricted -file $(wslpath -w $scriptPath) $(wslpath -w $imagePath)"\\\\"$imageName)\r\n\r\n# note that there is a return symbol in powershell result\r\nnoImage=$(echo "no image\\r")\r\n\r\n# check whether image exists\r\nif [ "$res" = "$noImage" ] ;then\r\n echo "no image"\r\nelse\r\n echo $(wslpath -u -a "${res}")\r\nfi\r\n'},ar={darwin:"mac.applescript",win32:"windows.ps1",win10:"windows10.ps1",linux:"linux.sh",wsl:"wsl.sh"};const ir=async e=>{!function(e){const t=F.default.join(e.baseDir,"piclist-clipboard-images");x.default.existsSync(t)||x.default.mkdirSync(t)}(e);const t=F.default.join(e.baseDir,"piclist-clipboard-images",`${Q.default().format("YYYYMMDDHHmmss")}.png`);return await new Promise(((r,n)=>{const a=(()=>{const e=process.platform;if(ne.default)return"wsl";if("win32"===e)return"10"===$.default.release().split(".")[0]?"win10":"win32";return"darwin"===e?"darwin":"linux"})(),i=F.default.join(e.baseDir,ar[a]);let s;x.default.existsSync(i)||x.default.writeFileSync(i,nr[a],"utf8"),s="darwin"===a?U.spawn("osascript",[i,t]):"win32"===a||"win10"===a?U.spawn("powershell",["-noprofile","-noninteractive","-nologo","-sta","-executionpolicy","unrestricted","-file",i,t]):U.spawn("sh",[i,t]),s.stdout.on("data",(i=>{if("linux"===a&&"no xclip or wl-clipboard"===i.toString().trim())return e.emit(_t.NOTIFICATION,{title:"xclip or wl-clipboard not found",body:"Please install xclip(for x11) or wl-clipboard(for wayland) before run picgo"}),n(new Error("Please install xclip(for x11) or wl-clipboard(for wayland) before run picgo"));const s=i.toString().trim();let o=!1;if(F.default.basename(s)!==F.default.basename(t)&&x.default.existsSync(s)&&(o=!0),"no image"!==s&&!x.default.existsSync(s))return n(new Error(`Can't find ${s}`));r({imgPath:s,shouldKeepAfterUploading:o})}))}))},sr=new r.EventEmitter,or=new ie.default.Agent({maxVersion:"TLSv1.2",minVersion:"TLSv1.2"});function lr(e,t,r){"object"==typeof r&&"value"in r&&"options"in r?e.append(t,r.value,r.options):e.append(t,r)}function Er(e){return Object.assign(Object.assign({},e),{statusCode:e.status,body:e.data})}function ur(e){var t,r,n,a,i,s,o;const l={method:(null===(r=null===(t=null==e?void 0:e.config)||void 0===t?void 0:t.method)||void 0===r?void 0:r.toUpperCase())||"",url:(null===(n=null==e?void 0:e.config)||void 0===n?void 0:n.url)||"",statusCode:(null===(a=null==e?void 0:e.response)||void 0===a?void 0:a.status)||0,message:(null==e?void 0:e.message)||"",stack:(null==e?void 0:e.stack)||{},response:{status:(null===(i=null==e?void 0:e.response)||void 0===i?void 0:i.status)||0,statusCode:(null===(s=null==e?void 0:e.response)||void 0===s?void 0:s.status)||0,body:(null===(o=null==e?void 0:e.response)||void 0===o?void 0:o.data)||""}};return Promise.reject(l)}class Ir{constructor(e){this.proxy="",this.options={},this.ctx=e,this.init(),sr.on(ct.CONFIG_CHANGE,(e=>{var t;switch(e.configName){case"picBed":(null===(t=e.value)||void 0===t?void 0:t.proxy)&&(this.proxy=e.value.proxy);break;case"picBed.proxy":this.proxy=e.value}}))}init(){const e=this.ctx.getConfig("picBed.proxy");e&&(this.proxy=e)}handleProxy(){if(this.proxy)try{const e=new o.URL(this.proxy);return{host:e.hostname,port:parseInt(e.port||"0",10),protocol:e.protocol}}catch(e){}return!1}request(e){var t;this.options.proxy=this.handleProxy(),this.options.headers=e.headers||{},this.options.maxBodyLength=1/0,this.options.maxContentLength=1/0,this.options.proxy&&(null===(t=e.url)||void 0===t?void 0:t.startsWith("https://"))?(this.options.httpsAgent=se.default.httpsOverHttp({proxy:{host:this.options.proxy.host,port:this.options.proxy.port}}),this.options.proxy=!1):this.options.httpsAgent=or;const r=Z.default.create(this.options);r.interceptors.response.use(Er,ur);const n=function(e){var t;let r=!1;const n=Object.assign(Object.assign({},e),{url:e.url||"",headers:e.headers||{}});if(e.proxy){let a=e.proxy;if("string"==typeof a){try{a=new o.URL(e.proxy)}catch(e){a=!1,n.proxy=!1,console.error(e)}r=!0}a&&((null===(t=e.url)||void 0===t?void 0:t.startsWith("https://"))?(n.proxy=!1,n.httpsAgent=se.default.httpsOverHttp({proxy:{host:null==a?void 0:a.hostname,port:parseInt(null==a?void 0:a.port,10)}})):n.proxy={host:a.hostname,port:parseInt(a.port,10),protocol:"http"})}if("formData"in e){const t=new ae.default;for(const r in e.formData)lr(t,r,e.formData[r]);n.data=t,n.headers=Object.assign(n.headers||{},t.getHeaders()),r=!0,delete n.formData}return"body"in e&&(n.data=e.body,r=!0,delete n.body),"qs"in e&&(n.params=e.qs,r=!0),n.__isOldOptions=r,n}(e);return r.interceptors.request.use((function(e){var t,r,n;let a="";return(null===(t=null==e?void 0:e.headers)||void 0===t?void 0:t.contentType)?(a=e.headers.contentType,delete e.headers.contentType):(null===(r=null==e?void 0:e.headers)||void 0===r?void 0:r.ContentType)?(a=e.headers.ContentType,delete e.headers.ContentType):(null===(n=null==e?void 0:e.headers)||void 0===n?void 0:n["content-type"])&&(a=e.headers["content-type"],delete e.headers["content-type"]),""!==a&&e.headers&&(e.headers["Content-Type"]=a),e})),"resolveWithFullResponse"in e&&e.resolveWithFullResponse?r.request(n):r.request(n).then((t=>n.__isOldOptions?"json"in e?e.json?t.data:void 0:JSON.stringify(t.data):t.data))}}class _r{constructor(e){if(this.ctx=e,this.db=new M.JSONStore(this.ctx.configPath),!this.db.has("picBed"))try{this.db.set("picBed",{uploader:"smms",current:"smms"})}catch(e){throw this.ctx.log.error(e),e}if(!this.db.has("picgoPlugins"))try{this.db.set("picgoPlugins",{})}catch(e){throw this.ctx.log.error(e),e}}read(e){return this.db.read(e)}get(e=""){return this.read(!0),this.db.get(e)}set(e,t){this.read(!0),this.db.set(e,t)}has(e){return this.read(!0),this.db.has(e)}unset(e,t){return this.read(!0),this.db.unset(e,t)}saveConfig(e){Object.keys(e).forEach((t=>{this.set(t,e[t])}))}removeConfig(e){Object.keys(e).forEach((t=>{this.unset(t,e[t])}))}}class cr{constructor(e){this.ctx=e}async install(e,t={},r){const n=[],a=e.map((e=>Sr(this.ctx,e))).filter((e=>this.ctx.pluginLoader.hasPlugin(e.pkgName)?(n.push(e.pkgName),this.ctx.log.success(`PicGo has already installed ${e.pkgName}`),!1):!!e.success)),i=a.map((e=>e.fullName)),s=a.map((e=>e.pkgName));if(i.length>0){const e=await this.execCommand("install",i,this.ctx.baseDir,t,r);if(e.code){const t=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_REASON",{code:`${e.code}`,data:e.data});this.ctx.log.error(t),this.ctx.emit("installFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED"),body:t});return{success:!1,body:t}}s.forEach((e=>{this.ctx.pluginLoader.registerPlugin(e)})),this.ctx.log.success(this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS")),this.ctx.emit("installSuccess",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS"),body:[...s,...n]});return{success:!0,body:[...s,...n]}}if(0===n.length){const e=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_VALID");this.ctx.log.error(e),this.ctx.emit("installFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED"),body:e});return{success:!1,body:e}}this.ctx.log.success(this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS")),this.ctx.emit("installSuccess",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS"),body:[...s,...n]});return{success:!0,body:[...s,...n]}}async uninstall(e){const t=e.map((e=>Sr(this.ctx,e))).filter((e=>e.success)).map((e=>e.pkgName));if(t.length>0){const e=await this.execCommand("uninstall",t,this.ctx.baseDir);if(e.code){const t=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_REASON",{code:`${e.code}`,data:e.data});this.ctx.log.error(t),this.ctx.emit("uninstallFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED"),body:t});return{success:!1,body:t}}t.forEach((e=>{this.ctx.pluginLoader.unregisterPlugin(e)})),this.ctx.log.success(this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_SUCCESS")),this.ctx.emit("uninstallSuccess",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_SUCCESS"),body:t});return{success:!0,body:t}}{const e=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_VALID");this.ctx.log.error(e),this.ctx.emit("uninstallFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED"),body:e});return{success:!1,body:e}}}async update(e,t={},r){const n=e.map((e=>Sr(this.ctx,e))).filter((e=>e.success)).map((e=>e.pkgName));if(n.length>0){const e=await this.execCommand("update",n,this.ctx.baseDir,t,r);if(e.code){const t=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_REASON",{code:`${e.code}`,data:e.data});this.ctx.log.error(t),this.ctx.emit("updateFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED"),body:t});return{success:!1,body:t}}this.ctx.log.success(this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_SUCCESS")),this.ctx.emit("updateSuccess",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_SUCCESS"),body:n});return{success:!0,body:n}}{const e=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_VALID");this.ctx.log.error(e),this.ctx.emit("updateFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED"),body:e});return{success:!1,body:e}}}async execCommand(e,t,r,n={},a={}){const i=n.registry||this.ctx.getConfig("settings.registry"),s=n.proxy||this.ctx.getConfig("settings.proxy");return await new Promise((n=>{var o,l;let E=[e].concat(t).concat("--color=always").concat("--save");i&&(E=E.concat(`--registry=${i}`)),s&&(E=E.concat(`--proxy=${s}`));try{const e=oe.default("npm",E,{cwd:r,env:Object.assign({},process.env,a)});let t="";null===(o=e.stdout)||void 0===o||o.on("data",(e=>{t+=e})).pipe(process.stdout),null===(l=e.stderr)||void 0===l||l.on("data",(e=>{t+=e})).pipe(process.stderr),e.on("close",(e=>{n(e?{code:e,data:t}:{code:0,data:t})})),e.on("error",(e=>{this.ctx.log.error(e),this.ctx.log.error("NPM is not installed"),this.ctx.emit(_t.FAILED,"NPM is not installed")}))}catch(e){this.ctx.log.error(e),this.ctx.emit(_t.FAILED,e)}}))}}const Sr=(e,t)=>{const r={success:!1,fullName:"",pkgName:""},n=me(t,e.log);if(!n)return r;const a=Te(n,e.log);return a?{success:!0,fullName:n,pkgName:a}:r},dr={"zh-CN":{UPLOAD_FAILED:"上传失败",CHECK_SETTINGS:"请检查你的配置项是否正确",CHECK_SETTINGS_AND_NETWORK:"请检查你的配置项以及网络",UPLOAD_FAILED_REASON:"错误码:${code},请打开浏览器粘贴地址查看相关原因",SERVER_ERROR:"服务端出错,请重试",AUTH_FAILED:"认证失败",PICBED_SMMS:"SM.MS",PICBED_SMMS_TOKEN:"设定Token",PICBED_SMMS_BACKUP_DOMAIN:"备用上传域名",PICBED_SMMS_MESSAGE_BACKUP_DOMAIN:"例如 smms.app",PICBED_LOCAL:"本地上传",PICBED_LOCAL_PATH:"设定路径",PICBED_LOCAL_MESSAGE_PATH:"例如 /usr/local/images/",PICBED_LOCAL_CUSTOMURL:"设定自定义域名",PICBED_LOCAL_MESSAGE_CUSTOMURL:"例如 https://test.com",PICBED_LOCAL_WEBPATH:"设定网站路径",PICBED_LOCAL_MESSAGE_WEBPATH:"用于拼接网址路径",PICBED_ALICLOUD:"阿里云OSS",PICBED_ALICLOUD_ACCESSKEYID:"设定KeyId",PICBED_ALICLOUD_ACCESSKEYSECRET:"设定KeySecret",PICBED_ALICLOUD_BUCKET:"设定Bucket",PICBED_ALICLOUD_AREA:"设定存储区域",PICBED_ALICLOUD_PATH:"设定存储路径",PICBED_ALICLOUD_CUSTOMURL:"设定自定义域名",PICBED_ALICLOUD_OPTIONS:"设定网址后缀",PICBED_ALICLOUD_MESSAGE_AREA:"例如:oss-cn-beijing",PICBED_ALICLOUD_MESSAGE_PATH:"例如:test/",PICBED_ALICLOUD_MESSAGE_OPTIONS:"例如:?x-oss-process=xxx",PICBED_ALICLOUD_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_TENCENTCLOUD:"腾讯云COS",PICBED_TENCENTCLOUD_VERSION:"COS版本",PICBED_TENCENTCLOUD_SECRETID:"设定SecretId",PICBED_TENCENTCLOUD_SECRETKEY:"设定SecretKey",PICBED_TENCENTCLOUD_APPID:"设定AppId",PICBED_TENCENTCLOUD_BUCKET:"设定Bucket",PICBED_TENCENTCLOUD_AREA:"设定存储区域",PICBED_TENCENTCLOUD_ENDPOINT:"设定接入点",PICBED_TENCENTCLOUD_PATH:"设定存储路径",PICBED_TENCENTCLOUD_OPTIONS:"设定网址后缀",PICBED_TENCENTCLOUD_CUSTOMURL:"设定自定义域名",PICBED_TENCENTCLOUD_MESSAGE_APPID:"例如:1234567890",PICBED_TENCENTCLOUD_MESSAGE_AREA:"例如:ap-beijing",PICBED_TENCENTCLOUD_MESSAGE_PATH:"例如:test/",PICBED_TENCENTCLOUD_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_TENCENTCLOUD_MESSAGE_OPTIONS:"例如:?imageMogr2",PICBED_TENCENTCLOUD_MESSAGE_ENDPOINT:"例如:cos-internal.accelerate.tencentcos.cn",PICBED_TENCENTCLOUD_SLIM:"极智压缩",PICBED_TENCENTCLOUD_SLIM_TIP:"图片极智压缩,详情请参考[文档说明](https://cloud.tencent.com/document/product/436/49259)",PICBED_TENCENTCLOUD_SLIM_CONFIRM:"开启",PICBED_TENCENTCLOUD_SLIM_CANCEL:"关闭",PICBED_GITHUB:"GitHub",PICBED_GITHUB_TOKEN:"设定Token",PICBED_GITHUB_REPO:"设定仓库名",PICBED_GITHUB_PATH:"设定存储路径",PICBED_GITHUB_BRANCH:"设定分支名",PICBED_GITHUB_CUSTOMURL:"设定自定义域名",PICBED_GITHUB_MESSAGE_REPO:"格式:username/repo",PICBED_GITHUB_MESSAGE_BRANCH:"例如:main",PICBED_GITHUB_MESSAGE_PATH:"例如:test/",PICBED_GITHUB_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_QINIU:"七牛云",PICBED_QINIU_ACCESSKEY:"设定AccessKey",PICBED_QINIU_SECRETKEY:"设定SecretKey",PICBED_QINIU_BUCKET:"设定Bucket",PICBED_QINIU_PATH:"设定存储路径",PICBED_QINIU_URL:"设定访问网址",PICBED_QINIU_OPTIONS:"设定网址后缀",PICBED_QINIU_AREA:"设定存储区域",PICBED_QINIU_MESSAGE_PATH:"例如:test/",PICBED_QINIU_MESSAGE_AREA:"例如:z0",PICBED_QINIU_MESSAGE_OPTIONS:"例如:?imageslim",PICBED_QINIU_MESSAGE_URL:"例如:https://xxx.yyy.glb.clouddn.com",PICBED_IMGUR:"Imgur",PICBED_IMGUR_CLIENTID:"设定ClientId",PICBED_IMGUR_USERNAME:"设定用户名",PICBED_IMGUR_ACCESS_TOKEN:"设定accessToken",PICBED_IMGUR_ALBUM:"设定相册名",PICBED_IMGUR_PROXY:"设定代理",PICBED_IMGUR_MESSAGE_CLIENTID:"匿名上传时填写",PICBED_IMGUR_MESSAGE_USERNAME:"需要上传到账户时填写",PICBED_IMGUR_MESSAGE_ACCESS_TOKEN:"需要上传到账户时填写",PICBED_IMGUR_MESSAGE_ALBUM:"例如:test",PICBED_IMGUR_MESSAGE_PROXY:"例如:http://127.0.0.1:1080",PICBED_UPYUN:"又拍云",PICBED_UPYUN_BUCKET:"设定Bucket",PICBED_UPYUN_OPERATOR:"设定操作员",PICBED_UPYUN_PASSWORD:"设定操作员密码",PICBED_UPYUN_PATH:"设定存储路径",PICBED_UPYUN_URL:"设定加速域名",PICBED_UPYUN_OPTIONS:"设定网址后缀",PICBED_UPYUN_ANTI_LEECH_TOKEN:"设定防盗链Token",PICBED_UPYUN_EXPIRE_TIME:"设定过期时间(秒)",PICBED_UPYUN_MESSAGE_OPERATOR:"例如:me",PICBED_UPYUN_MESSAGE_PASSWORD:"输入操作员密码",PICBED_UPYUN_MESSAGE_URL:"例如:http://xxx.test.upcdn.net",PICBED_UPYUN_MESSAGE_OPTIONS:"例如:!imgslim",PICBED_UPYUN_MESSAGE_PATH:"例如:test/",PICBED_WEBDAVPLIST:"WebDAV",PICBED_WEBDAVPLIST_HOST:"设定接口网址",PICBED_WEBDAVPLIST_SSLENABLED:"启用SSL",PICBED_WEBDAVPLIST_USERNAME:"设定用户名",PICBED_WEBDAVPLIST_PASSWORD:"设定密码",PICBED_WEBDAVPLIST_PATH:"设定存储路径",PICBED_WEBDAVPLIST_WEBSITE_PATH:"设定网址路径",PICBED_WEBDAVPLIST_CUSTOMURL:"设定自定义域名",PICBED_WEBDAVPLIST_MESSAGE_HOST:"例如:https://example.com/webdav",PICBED_WEBDAVPLIST_MESSAGE_SSLENABLED:"需要HTTPS时启用",PICBED_WEBDAVPLIST_MESSAGE_USERNAME:"例如:me",PICBED_WEBDAVPLIST_MESSAGE_PASSWORD:"输入密码",PICBED_WEBDAVPLIST_MESSAGE_PATH:"例如:test/",PICBED_WEBDAVPLIST_MESSAGE_WEBSITE_PATH:"拼接网址时使用",PICBED_WEBDAVPLIST_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_SFTPPLIST:"内置SFTP",PICBED_SFTPPLIST_HOST:"设定主机",PICBED_SFTPPLIST_PORT:"设定端口",PICBED_SFTPPLIST_USERNAME:"设定用户名",PICBED_SFTPPLIST_PASSWORD:"设定密码",PICBED_SFTPPLIST_PRIVATEKEY:"设定私钥",PICBED_SFTPPLIST_PRIVATEKEY_PASSPHRASE:"设定私钥密码",PICBED_SFTPPLIST_UPLOADPATH:"设定上传路径",PICBED_SFTPPLIST_CUSTOMURL:"设定自定义域名",PICBED_SFTPPLIST_WEBSITE_PATH:"设定网站路径",PICBED_SFTPPLIST_FILE_USER:"设定文件用户:组",PICBED_SFTPPLIST_FILE_MODE:"设定文件权限",PICBED_SFTPPLIST_DIR_MODE:"设定文件夹权限",PICBED_SFTPPLIST_MESSAGE_HOST:"例如:1.1.1.3",PICBED_SFTPPLIST_MESSAGE_PORT:"默认22",PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY:"例如:/Users/xxx/.ssh/id_rsa",PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY_PASSPHRASE:"输入私钥密码",PICBED_SFTPPLIST_MESSAGE_UPLOADPATH:"例如:test/",PICBED_SFTPPLIST_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_SFTPPLIST_MESSAGE_WEBSITE_PATH:"拼接网址时使用",PICBED_SFTPPLIST_MESSAGE_FILE_USER:"例如:www:data",PICBED_SFTPPLIST_MESSAGE_FILE_MODE:"例如:0664",PICBED_SFTPPLIST_MESSAGE_DIR_MODE:"例如:0775",BUILDIN_WATERMARK_ISADDWATERMARK:"是否添加水印",BUILDIN_WATERMARK_MESSAGE_ISADDWATERMARK:"需要添加水印时启用",BUILDIN_WATERMARK_WATERMARKTYPE:"设定水印类型",BUILDIN_WATERMARK_MESSAGE_WATERMARKTYPE:"请选择水印类型",BUILDIN_WATERMARK_ISFULLSCREENWATERMARK:"是否全屏水印",BUILDIN_WATERMARK_MESSAGE_ISFULLSCREENWATERMARK:"需要全屏水印时启用",BUILDIN_WATERMARK_WATERMARKDEGREE:"设定水印角度",BUILDIN_WATERMARK_MESSAGE_WATERMARKDEGREE:"请输入数字",BUILDIN_WATERMARK_WATERMARKTEXT:"设定水印文字",BUILDIN_WATERMARK_MESSAGE_WATERMARKTEXT:"请输入水印文字",BUILDIN_WATERMARK_WATERMARKTEXTFONTPATH:"设定水印字体文件路径",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTPATH:"请输入水印字体文件路径",BUILDIN_WATERMARK_WATERMARKFONTRATIO:"设定水印相对于图片的比例",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTRATIO:"请输入0-1的小数",BUILDIN_WATERMARK_WATERMARKFONTCOLOR:"设定水印字体颜色",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTCOLOR:"请输入rgb颜色值",BUILDIN_WATERMARK_WATERMARKIMAGEPATH:"设定水印图片路径",BUILDIN_WATERMARK_MESSAGE_WATERMARKIMAGEPATH:"请输入水印图片路径",BUILDIN_WATERMARK_WATERMARKPOSITION:"设定水印位置",BUILDIN_WATERMARK_MESSAGE_WATERMARKPOSITION:"请选择水印位置",BUILDIN_RENAME_FORMAT:"设定重命名格式",BUILDIN_RENAME_ENABLE:"是否启用重命名",BUILDIN_COMPRESS_QUALITY:"设定图片质量",BUILDIN_COMPRESS_MESSAGE_QUALITY:"请输入0-100的整数",BUILDIN_COMPRESS_ISCONVERT:"是否进行格式转换",BUILDIN_COMPRESS_MESSAGE_ISCONVERT:"需要转换时启用",BUILDIN_COMPRESS_CONVERTFORMAT:"设定转换格式",BUILDIN_COMPRESS_MESSAGE_CONVERTFORMAT:"请选择转换格式",BUILDIN_COMPRESS_ISRESIZE:"是否进行图片缩放",BUILDIN_COMPRESS_MESSAGE_ISRESIZE:"需要缩放时启用",BUILDIN_COMPRESS_RESIZEWIDTH:"设定缩放宽度",BUILDIN_COMPRESS_MESSAGE_RESIZEWIDTH:"请输入数字",BUILDIN_COMPRESS_RESIZEHEIGHT:"设定缩放高度",BUILDIN_COMPRESS_MESSAGE_RESIZEHEIGHT:"请输入数字",BUILDIN_COMPRESS_ISRESIZEBYPERCENT:"是否按百分比进行缩放",BUILDIN_COMPRESS_MESSAGE_ISRESIZEBYPERCENT:"需要按百分比缩放时启用",BUILDIN_COMPRESS_RESIZEPERCENT:"设定缩放百分比",BUILDIN_COMPRESS_MESSAGE_RESIZEPERCENT:"请输入数字",BUILDIN_COMPRESS_SKIPRESIZEOFSMALLIMG:"是否跳过小图缩放",BUILDIN_COMPRESS_ISROTATE:"是否进行图片旋转",BUILDIN_COMPRESS_MESSAGE_ISROTATE:"需要旋转时启用",BUILDIN_COMPRESS_ROTATEDEGREE:"设定旋转角度",BUILDIN_COMPRESS_MESSAGE_ROTATEDEGREE:"请输入数字,可为负数",BUILDIN_COMPRESS_ISREMOVEEXIF:"是否移除EXIF信息",BUILDIN_COMPRESS_MESSAGE_ISREMOVEEXIF:"需要移除EXIF信息时启用",PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS:"插件安装成功",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED:"插件安装失败",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_REASON:"插件安装失败,失败码为${code},错误日志为 \n ${data}",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_PATH:"插件安装失败,请输入合法插件名或合法安装路径",PLUGIN_HANDLER_PLUGIN_UNINSTALL_SUCCESS:"插件卸载成功",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED:"插件卸载失败",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_REASON:"插件卸载失败,失败码为${code},错误日志为 \n ${data}",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_VALID:"插件卸载失败,请输入合法插件名",PLUGIN_HANDLER_PLUGIN_UPDATE_SUCCESS:"插件更新成功",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED:"插件更新失败",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_REASON:"插件更新失败,失败码为${code},错误日志为 \n ${data}",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_VALID:"插件更新失败,请输入合法插件名"},"zh-TW":{UPLOAD_FAILED:"上傳失敗",CHECK_SETTINGS:"請檢查你的設定是否正確",CHECK_SETTINGS_AND_NETWORK:"請檢查你的設定及網路",UPLOAD_FAILED_REASON:"錯誤碼:${code},請打開瀏覽器貼上地址查看相關原因",SERVER_ERROR:"伺服器出錯,請重試",AUTH_FAILED:"認證失敗",PICBED_SMMS:"SM.MS",PICBED_SMMS_TOKEN:"設定Token",PICBED_SMMS_BACKUP_DOMAIN:"備用上傳網址",PICBED_SMMS_MESSAGE_BACKUP_DOMAIN:"例如 smms.app",PICBED_LOCAL:"本地",PICBED_LOCAL_PATH:"設定儲存路徑",PICBED_LOCAL_MESSAGE_PATH:"例如 /usr/local/images/",PICBED_LOCAL_CUSTOMURL:"設定自訂網址",PICBED_LOCAL_MESSAGE_CUSTOMURL:"例如 https://test.com",PICBED_LOCAL_WEBPATH:"設定網址路徑",PICBED_LOCAL_MESSAGE_WEBPATH:"用于網頁顯示的路徑",PICBED_ALICLOUD:"阿里云OSS",PICBED_ALICLOUD_ACCESSKEYID:"設定KeyId",PICBED_ALICLOUD_ACCESSKEYSECRET:"設定KeySecret",PICBED_ALICLOUD_BUCKET:"設定Bucket",PICBED_ALICLOUD_AREA:"設定儲存區域",PICBED_ALICLOUD_PATH:"設定儲存路徑",PICBED_ALICLOUD_CUSTOMURL:"設定自訂網址",PICBED_ALICLOUD_OPTIONS:"設定網址後綴",PICBED_ALICLOUD_MESSAGE_AREA:"例如:oss-cn-beijing",PICBED_ALICLOUD_MESSAGE_PATH:"例如:test/",PICBED_ALICLOUD_MESSAGE_OPTIONS:"例如:?x-oss-process=xxx",PICBED_ALICLOUD_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_TENCENTCLOUD:"騰訊云COS",PICBED_TENCENTCLOUD_VERSION:"COS版本",PICBED_TENCENTCLOUD_SECRETID:"設定SecretId",PICBED_TENCENTCLOUD_SECRETKEY:"設定SecretKey",PICBED_TENCENTCLOUD_APPID:"設定AppId",PICBED_TENCENTCLOUD_BUCKET:"設定Bucket",PICBED_TENCENTCLOUD_AREA:"設定儲存區域",PICBED_TENCENTCLOUD_ENDPOINT:"設定接入點",PICBED_TENCENTCLOUD_PATH:"設定儲存路徑",PICBED_TENCENTCLOUD_OPTIONS:"設定網址後綴",PICBED_TENCENTCLOUD_CUSTOMURL:"設定自訂網址",PICBED_TENCENTCLOUD_MESSAGE_APPID:"例如:1234567890",PICBED_TENCENTCLOUD_MESSAGE_AREA:"例如:ap-beijing",PICBED_TENCENTCLOUD_MESSAGE_PATH:"例如:test/",PICBED_TENCENTCLOUD_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_TENCENTCLOUD_MESSAGE_OPTIONS:"例如:?imageMogr2",PICBED_TENCENTCLOUD_MESSAGE_ENDPOINT:"例如:cos-internal.accelerate.tencentcos.cn",PICBED_TENCENTCLOUD_SLIM:"Set ImageSlim",PICBED_TENCENTCLOUD_SLIM_TIP:"Image extremely intelligent compression, please refer to the [document description](https://cloud.tencent.com/document/product/436/49259)",PICBED_TENCENTCLOUD_SLIM_CONFIRM:"OPEN",PICBED_TENCENTCLOUD_SLIM_CANCEL:"CLOSE",PICBED_GITHUB:"GitHub",PICBED_GITHUB_TOKEN:"設定Token",PICBED_GITHUB_REPO:"設定倉庫名稱",PICBED_GITHUB_PATH:"設定儲存路徑",PICBED_GITHUB_BRANCH:"設定分支名稱",PICBED_GITHUB_CUSTOMURL:"設定自訂網址",PICBED_GITHUB_MESSAGE_REPO:"格式:username/repo",PICBED_GITHUB_MESSAGE_BRANCH:"例如:main",PICBED_GITHUB_MESSAGE_PATH:"例如:test/",PICBED_GITHUB_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_QINIU:"七牛云",PICBED_QINIU_ACCESSKEY:"設定AccessKey",PICBED_QINIU_SECRETKEY:"設定SecretKey",PICBED_QINIU_BUCKET:"設定Bucket",PICBED_QINIU_PATH:"設定儲存路徑",PICBED_QINIU_URL:"設定訪問網址",PICBED_QINIU_OPTIONS:"設定網址後綴",PICBED_QINIU_AREA:"設定儲存區域",PICBED_QINIU_MESSAGE_PATH:"例如:test/",PICBED_QINIU_MESSAGE_AREA:"例如:z0",PICBED_QINIU_MESSAGE_OPTIONS:"例如:?imageslim",PICBED_QINIU_MESSAGE_URL:"例如:https://xxx.yyy.glb.clouddn.com",PICBED_IMGUR:"Imgur",PICBED_IMGUR_CLIENTID:"設定ClientId",PICBED_IMGUR_USERNAME:"設定用戶名",PICBED_IMGUR_ACCESS_TOKEN:"設定accessToken",PICBED_IMGUR_ALBUM:"設定相簿名",PICBED_IMGUR_PROXY:"設定PROXY",PICBED_IMGUR_MESSAGE_CLIENTID:"匿名上傳時填寫",PICBED_IMGUR_MESSAGE_USERNAME:"需要上傳到賬戶時填寫",PICBED_IMGUR_MESSAGE_ACCESS_TOKEN:"需要上傳到賬戶時填寫",PICBED_IMGUR_MESSAGE_ALBUM:"例如:test",PICBED_IMGUR_MESSAGE_PROXY:"例如:http://127.0.0.1:1080",PICBED_UPYUN:"又拍云",PICBED_UPYUN_BUCKET:"設定Bucket",PICBED_UPYUN_OPERATOR:"設定操作員",PICBED_UPYUN_PASSWORD:"設定操作員密碼",PICBED_UPYUN_PATH:"設定儲存路徑",PICBED_UPYUN_URL:"設定加速網址",PICBED_UPYUN_OPTIONS:"設定網址後綴",PICBED_UPYUN_ANTI_LEECH_TOKEN:"設定防盜鏈Token",PICBED_UPYUN_EXPIRE_TIME:"設定過期時間(秒)",PICBED_UPYUN_MESSAGE_OPERATOR:"例如:me",PICBED_UPYUN_MESSAGE_PASSWORD:"輸入操作員密碼",PICBED_UPYUN_MESSAGE_URL:"例如:http://xxx.test.upcdn.net",PICBED_UPYUN_MESSAGE_OPTIONS:"例如:!imgslim",PICBED_UPYUN_MESSAGE_PATH:"例如:test/",PICBED_WEBDAVPLIST:"WebDAV",PICBED_WEBDAVPLIST_HOST:"設定API主機",PICBED_WEBDAVPLIST_SSLENABLED:"需要HTTPS時啟用",PICBED_WEBDAVPLIST_USERNAME:"設定用戶名",PICBED_WEBDAVPLIST_PASSWORD:"設定密碼",PICBED_WEBDAVPLIST_PATH:"設定儲存路徑",PICBED_WEBDAVPLIST_CUSTOMURL:"設定自訂網址",PICBED_WEBDAVPLIST_WEBSITE_PATH:"設定網站路徑",PICBED_WEBDAVPLIST_MESSAGE_HOST:"例如:https://example.com/webdav",PICBED_WEBDAVPLIST_MESSAGE_SSLENABLED:"需要HTTPS時啟用",PICBED_WEBDAVPLIST_MESSAGE_USERNAME:"例如:me",PICBED_WEBDAVPLIST_MESSAGE_PASSWORD:"輸入用戶密碼",PICBED_WEBDAVPLIST_MESSAGE_PATH:"例如:test/",PICBED_WEBDAVPLIST_MESSAGE_WEBSITE_PATH:"拼接網址時使用",PICBED_WEBDAVPLIST_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_SFTPPLIST:"內置SFTP",PICBED_SFTPPLIST_HOST:"設定主機",PICBED_SFTPPLIST_PORT:"設定端口",PICBED_SFTPPLIST_USERNAME:"設定用戶名",PICBED_SFTPPLIST_PASSWORD:"設定密碼",PICBED_SFTPPLIST_PRIVATEKEY:"設定私鑰",PICBED_SFTPPLIST_PRIVATEKEY_PASSPHRASE:"設定私鑰密碼",PICBED_SFTPPLIST_UPLOADPATH:"設定上傳路徑",PICBED_SFTPPLIST_CUSTOMURL:"設定自訂網址",PICBED_SFTPPLIST_WEBSITE_PATH:"設定網站路徑",PICBED_SFTPPLIST_FILE_USER:"設定文件用戶:組",PICBED_SFTPPLIST_FILE_MODE:"設定文件權限",PICBED_SFTPPLIST_DIR_MODE:"設定文件夾權限",PICBED_SFTPPLIST_MESSAGE_HOST:"例如:1.1.1.3",PICBED_SFTPPLIST_MESSAGE_PORT:"默認22",PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY:"例如:/Users/xxx/.ssh/id_rsa",PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY_PASSPHRASE:"輸入私鑰密碼",PICBED_SFTPPLIST_MESSAGE_UPLOADPATH:"例如:test/",PICBED_SFTPPLIST_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_SFTPPLIST_MESSAGE_WEBSITE_PATH:"拼接網址時使用",PICBED_SFTPPLIST_MESSAGE_FILE_USER:"例如:www:data",PICBED_SFTPPLIST_MESSAGE_FILE_MODE:"例如:0664",PICBED_SFTPPLIST_MESSAGE_DIR_MODE:"例如:0775",BUILDIN_WATERMARK_ISADDWATERMARK:"是否添加水印",BUILDIN_WATERMARK_MESSAGE_ISADDWATERMARK:"需要添加水印時啟用",BUILDIN_WATERMARK_WATERMARKTYPE:"設定水印類型",BUILDIN_WATERMARK_MESSAGE_WATERMARKTYPE:"請選擇水印類型",BUILDIN_WATERMARK_ISFULLSCREENWATERMARK:"是否全屏水印",BUILDIN_WATERMARK_MESSAGE_ISFULLSCREENWATERMARK:"需要全屏水印時啟用",BUILDIN_WATERMARK_WATERMARKDEGREE:"設定水印角度",BUILDIN_WATERMARK_MESSAGE_WATERMARKDEGREE:"請輸入數字",BUILDIN_WATERMARK_WATERMARKTEXT:"設定水印文字",BUILDIN_WATERMARK_MESSAGE_WATERMARKTEXT:"請輸入水印文字",BUILDIN_WATERMARK_WATERMARKTEXTFONTPATH:"設定水印字體",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTPATH:"請輸入水印字體文件路徑",BUILDIN_WATERMARK_WATERMARKFONTRATIO:"設定水印圖片比例",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTRATIO:"請輸入0-1的數字",BUILDIN_WATERMARK_WATERMARKFONTCOLOR:"設定水印字體顏色",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTCOLOR:"請輸入rgb顏色值",BUILDIN_WATERMARK_WATERMARKIMAGEPATH:"設定水印圖片路徑",BUILDIN_WATERMARK_MESSAGE_WATERMARKIMAGEPATH:"請輸入水印圖片路徑",BUILDIN_WATERMARK_WATERMARKPOSITION:"設定水印位置",BUILDIN_WATERMARK_MESSAGE_WATERMARKPOSITION:"請選擇水印位置",BUILDIN_RENAME_FORMAT:"設定重命名格式",BUILDIN_RENAME_ENABLE:"是否啟用重命名",BUILDIN_COMPRESS_QUALITY:"設定圖片質量",BUILDIN_COMPRESS_MESSAGE_QUALITY:"請輸入0-100的整數",BUILDIN_COMPRESS_ISCONVERT:"是否進行格式轉換",BUILDIN_COMPRESS_MESSAGE_ISCONVERT:"需要轉換時啟用",BUILDIN_COMPRESS_CONVERTFORMAT:"設定轉換格式",BUILDIN_COMPRESS_MESSAGE_CONVERTFORMAT:"請選擇轉換格式",BUILDIN_COMPRESS_ISRESIZE:"是否進行圖片縮放",BUILDIN_COMPRESS_MESSAGE_ISRESIZE:"需要縮放時啟用",BUILDIN_COMPRESS_RESIZEWIDTH:"設定縮放寬度",BUILDIN_COMPRESS_MESSAGE_RESIZEWIDTH:"請輸入數字",BUILDIN_COMPRESS_RESIZEHEIGHT:"設定縮放高度",BUILDIN_COMPRESS_MESSAGE_RESIZEHEIGHT:"請輸入數字",BUILDIN_COMPRESS_ISRESIZEBYPERCENT:"是否按百分比進行縮放",BUILDIN_COMPRESS_MESSAGE_ISRESIZEBYPERCENT:"需要按百分比縮放時啟用",BUILDIN_COMPRESS_RESIZEPERCENT:"設定縮放百分比",BUILDIN_COMPRESS_MESSAGE_RESIZEPERCENT:"請輸入数字",BUILDIN_COMPRESS_SKIPRESIZEOFSMALLIMG:"是否跳過小圖縮放",BUILDIN_COMPRESS_ISROTATE:"是否進行圖片旋轉",BUILDIN_COMPRESS_MESSAGE_ISROTATE:"需要旋轉時啟用",BUILDIN_COMPRESS_ROTATEDEGREE:"設定旋轉角度",BUILDIN_COMPRESS_MESSAGE_ROTATEDEGREE:"請輸入數字,可為負數",BUILDIN_COMPRESS_ISREMOVEEXIF:"是否移除EXIF資訊",BUILDIN_COMPRESS_MESSAGE_ISREMOVEEXIF:"需要移除EXIF資訊時啟用",PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS:"插件安裝成功",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED:"插件安裝失敗",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_REASON:"插件安裝失敗,失敗碼為${code},錯誤紀錄為 \n ${data}",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_PATH:"插件安裝失敗,請輸入正確的插件名稱或正確的安裝路徑",PLUGIN_HANDLER_PLUGIN_UNINSTALL_SUCCESS:"插件卸載成功",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED:"插件卸載失敗",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_REASON:"插件卸載失敗,失敗碼為${code},錯誤紀錄為 \n ${data}",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_VALID:"插件卸載失敗,請輸入正確的插件名稱",PLUGIN_HANDLER_PLUGIN_UPDATE_SUCCESS:"插件更新成功",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED:"插件更新失敗",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_REASON:"插件更新失敗,失敗碼為${code},錯誤紀錄為 \n ${data}",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_VALID:"插件更新失敗,請輸入正確的插件名稱"},en:{UPLOAD_FAILED:"Upload failed",CHECK_SETTINGS:"Please check your settings",CHECK_SETTINGS_AND_NETWORK:"Please check your settings and network",UPLOAD_FAILED_REASON:"Error code: ${code}, please open the browser and paste the address to see the reason",SERVER_ERROR:"Server error, please try again later",AUTH_FAILED:"Authentication failed",PICBED_SMMS:"SM.MS",PICBED_SMMS_TOKEN:"Set Token",PICBED_SMMS_BACKUP_DOMAIN:"Set Backup Upload Domain",PICBED_SMMS_MESSAGE_BACKUP_DOMAIN:"Ex. smms.app",PICBED_LOCAL:"Local",PICBED_LOCAL_PATH:"Set Path",PICBED_LOCAL_MESSAGE_PATH:"Ex. /Users/name/Pictures/",PICBED_LOCAL_CUSTOMURL:"Set Custom URL",PICBED_LOCAL_MESSAGE_CUSTOMURL:"Ex. https://test.com",PICBED_LOCAL_WEBPATH:"Set Web Path",PICBED_LOCAL_MESSAGE_WEBPATH:"Used to generate url path",PICBED_ALICLOUD:"Ali Cloud",PICBED_ALICLOUD_ACCESSKEYID:"Set KeyId",PICBED_ALICLOUD_ACCESSKEYSECRET:"Set KeySecret",PICBED_ALICLOUD_BUCKET:"Set Bucket",PICBED_ALICLOUD_AREA:"Set Area",PICBED_ALICLOUD_PATH:"Set Path",PICBED_ALICLOUD_CUSTOMURL:"Set Custom URL",PICBED_ALICLOUD_OPTIONS:"Set URL Suffix",PICBED_ALICLOUD_MESSAGE_AREA:"Ex. oss-cn-beijing",PICBED_ALICLOUD_MESSAGE_PATH:"Ex. test/",PICBED_ALICLOUD_MESSAGE_OPTIONS:"Ex. ?x-oss-process=xxx",PICBED_ALICLOUD_MESSAGE_CUSTOMURL:"Ex. https://test.com",PICBED_TENCENTCLOUD:"Tencent Cloud",PICBED_TENCENTCLOUD_VERSION:"Choose COS version",PICBED_TENCENTCLOUD_SECRETID:"Set SecretId",PICBED_TENCENTCLOUD_SECRETKEY:"Set SecretKey",PICBED_TENCENTCLOUD_APPID:"Set AppId",PICBED_TENCENTCLOUD_BUCKET:"Set Bucket",PICBED_TENCENTCLOUD_AREA:"Set Area",PICBED_TENCENTCLOUD_ENDPOINT:"Set Endpoint",PICBED_TENCENTCLOUD_PATH:"Set Path",PICBED_TENCENTCLOUD_OPTIONS:"Set URL Suffix",PICBED_TENCENTCLOUD_CUSTOMURL:"Set Custom URL",PICBED_TENCENTCLOUD_MESSAGE_APPID:"Ex. 1234567890",PICBED_TENCENTCLOUD_MESSAGE_AREA:"Ex. ap-beijing",PICBED_TENCENTCLOUD_MESSAGE_PATH:"Ex. test/",PICBED_TENCENTCLOUD_MESSAGE_CUSTOMURL:"Ex. http://test.com",PICBED_TENCENTCLOUD_MESSAGE_OPTIONS:"Ex. ?imageMogr2",PICBED_TENCENTCLOUD_MESSAGE_ENDPOINT:"Ex. cos-internal.accelerate.tencentcos.cn",PICBED_TENCENTCLOUD_SLIM:"極智壓縮",PICBED_TENCENTCLOUD_SLIM_CANCEL:"關閉",PICBED_TENCENTCLOUD_SLIM_CONFIRM:"開啓",PICBED_TENCENTCLOUD_SLIM_TIP:"圖片極智壓縮,詳情請參考[文檔說明](https://cloud.tencent.com/document/product/436/49259)",PICBED_GITHUB:"GitHub",PICBED_GITHUB_TOKEN:"Set Token",PICBED_GITHUB_REPO:"Set Repo Name",PICBED_GITHUB_PATH:"Set Path",PICBED_GITHUB_BRANCH:"Set Branch",PICBED_GITHUB_CUSTOMURL:"Set Custom URL",PICBED_GITHUB_MESSAGE_REPO:"Ex. username/repo",PICBED_GITHUB_MESSAGE_BRANCH:"Ex. main",PICBED_GITHUB_MESSAGE_PATH:"Ex. test/",PICBED_GITHUB_MESSAGE_CUSTOMURL:"Ex. https://test.com",PICBED_QINIU:"Qiniu",PICBED_QINIU_ACCESSKEY:"Set AccessKey",PICBED_QINIU_SECRETKEY:"Set SecretKey",PICBED_QINIU_BUCKET:"Set Bucket",PICBED_QINIU_PATH:"Set Path",PICBED_QINIU_URL:"Set URL",PICBED_QINIU_OPTIONS:"Set URL Suffix",PICBED_QINIU_AREA:"Set Area",PICBED_QINIU_MESSAGE_PATH:"Ex. test/",PICBED_QINIU_MESSAGE_AREA:"Ex. z0",PICBED_QINIU_MESSAGE_OPTIONS:"Ex. ?imageslim",PICBED_QINIU_MESSAGE_URL:"Ex. https://xxx.yyy.glb.clouddn.com",PICBED_IMGUR:"Imgur",PICBED_IMGUR_CLIENTID:"Set ClientId",PICBED_IMGUR_USERNAME:"Set Username",PICBED_IMGUR_ACCESS_TOKEN:"Set Access Token",PICBED_IMGUR_ALBUM:"Set Album Name",PICBED_IMGUR_PROXY:"Set Proxy",PICBED_IMGUR_MESSAGE_CLIENTID:"Fill in when you need to upload as anonymous",PICBED_IMGUR_MESSAGE_USERNAME:"Fill in when you need to upload to the account",PICBED_IMGUR_MESSAGE_ACCESS_TOKEN:"Fill in when you need to upload to the account",PICBED_IMGUR_MESSAGE_ALBUM:"例如:test",PICBED_IMGUR_MESSAGE_PROXY:"Ex. http://127.0.0.1:1080",PICBED_UPYUN:"Upyun",PICBED_UPYUN_BUCKET:"Set Bucket",PICBED_UPYUN_OPERATOR:"Set Operator",PICBED_UPYUN_PASSWORD:"Set Operator Password",PICBED_UPYUN_PATH:"Set Path",PICBED_UPYUN_URL:"Set URL",PICBED_UPYUN_OPTIONS:"Set URL Suffix",PICBED_UPYUN_ANTI_LEECH_TOKEN:"Set Anti-Leech Token",PICBED_UPYUN_EXPIRE_TIME:"Set Expire Time(seconds)",PICBED_UPYUN_MESSAGE_OPERATOR:"Ex. me",PICBED_UPYUN_MESSAGE_PASSWORD:"Please type the operator password",PICBED_UPYUN_MESSAGE_URL:"Ex. http://xxx.test.upcdn.net",PICBED_UPYUN_MESSAGE_OPTIONS:"Ex. !imgslim",PICBED_UPYUN_MESSAGE_PATH:"Ex. test/",PICBED_WEBDAVPLIST:"WebDAV",PICBED_WEBDAVPLIST_HOST:"Set Host",PICBED_WEBDAVPLIST_SSLENABLED:"Enable HTTPS",PICBED_WEBDAVPLIST_USERNAME:"Set Username",PICBED_WEBDAVPLIST_PASSWORD:"Set Password",PICBED_WEBDAVPLIST_PATH:"Set Path",PICBED_WEBDAVPLIST_WEBSITE_PATH:"Set Website Path",PICBED_WEBDAVPLIST_CUSTOMURL:"Set Custom URL",PICBED_WEBDAVPLIST_MESSAGE_HOST:"Ex. https://example.com/webdav",PICBED_WEBDAVPLIST_MESSAGE_SSLENABLED:"Enable HTTPS",PICBED_WEBDAVPLIST_MESSAGE_USERNAME:"Ex. me",PICBED_WEBDAVPLIST_MESSAGE_PASSWORD:"Please type the password",PICBED_WEBDAVPLIST_MESSAGE_PATH:"Ex. test/",PICBED_WEBDAVPLIST_MESSAGE_WEBSITE_PATH:"Used to generate the URL of the image",PICBED_WEBDAVPLIST_MESSAGE_CUSTOMURL:"Ex. https://test.com",PICBED_SFTPPLIST:"SFTP Buildin",PICBED_SFTPPLIST_HOST:"Set Host",PICBED_SFTPPLIST_PORT:"Set Port",PICBED_SFTPPLIST_USERNAME:"Set Username",PICBED_SFTPPLIST_PASSWORD:"Set Password",PICBED_SFTPPLIST_PRIVATEKEY:"Set Private Key",PICBED_SFTPPLIST_PRIVATEKEY_PASSPHRASE:"Set Private Key Passphrase",PICBED_SFTPPLIST_UPLOADPATH:"Set Upload Path",PICBED_SFTPPLIST_CUSTOMURL:"Set Custom URL",PICBED_SFTPPLIST_WEBSITE_PATH:"Set Website Path",PICBED_SFTPPLIST_FILE_USER:"Set File User:Group",PICBED_SFTPPLIST_FILE_MODE:"Set File Mode",PICBED_SFTPPLIST_DIR_MODE:"Set Directory Mode",PICBED_SFTPPLIST_MESSAGE_HOST:"Ex. 1.1.1.3",PICBED_SFTPPLIST_MESSAGE_PORT:"Default 22",PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY:"Ex. /Users/xxx/.ssh/id_rsa",PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY_PASSPHRASE:"Please type the private key passphrase",PICBED_SFTPPLIST_MESSAGE_UPLOADPATH:"Ex. test/",PICBED_SFTPPLIST_MESSAGE_CUSTOMURL:"Ex. https://test.com",PICBED_SFTPPLIST_MESSAGE_WEBSITE_PATH:"Used to generate the URL of the image",PICBED_SFTPPLIST_MESSAGE_FILE_USER:"Ex. www:data",PICBED_SFTPPLIST_MESSAGE_FILE_MODE:"Ex. 0664",PICBED_SFTPPLIST_MESSAGE_DIR_MODE:"Ex. 0775",BUILDIN_RENAME_FORMAT:"Set rename format",BUILDIN_RENAME_ENABLE:"Enable rename",BUILDIN_WATERMARK_ISADDWATERMARK:"Whether to add watermark",BUILDIN_WATERMARK_MESSAGE_ISADDWATERMARK:"Enable when watermark is required",BUILDIN_WATERMARK_WATERMARKTYPE:"Set watermark type",BUILDIN_WATERMARK_MESSAGE_WATERMARKTYPE:"Please select watermark type",BUILDIN_WATERMARK_ISFULLSCREENWATERMARK:"Whether to use full-screen watermark",BUILDIN_WATERMARK_MESSAGE_ISFULLSCREENWATERMARK:"Enable when full-screen watermark is required",BUILDIN_WATERMARK_WATERMARKDEGREE:"Set watermark angle",BUILDIN_WATERMARK_MESSAGE_WATERMARKDEGREE:"Please enter a number",BUILDIN_WATERMARK_WATERMARKTEXT:"Set watermark text",BUILDIN_WATERMARK_MESSAGE_WATERMARKTEXT:"Please enter watermark text",BUILDIN_WATERMARK_WATERMARKTEXTFONTPATH:"Set watermark font",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTPATH:"Please enter the watermark font file path",BUILDIN_WATERMARK_WATERMARKFONTRATIO:"Set the ratio of the watermark to the image",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTRATIO:"Please enter a number between 0-1",BUILDIN_WATERMARK_WATERMARKFONTCOLOR:"Set watermark font color",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTCOLOR:"Please enter the RGB color value",BUILDIN_WATERMARK_WATERMARKIMAGEPATH:"Set watermark image path",BUILDIN_WATERMARK_MESSAGE_WATERMARKIMAGEPATH:"Please enter the watermark image path",BUILDIN_WATERMARK_WATERMARKPOSITION:"Set watermark position",BUILDIN_WATERMARK_MESSAGE_WATERMARKPOSITION:"Please select watermark position",BUILDIN_COMPRESS_QUALITY:"Set image quality",BUILDIN_COMPRESS_MESSAGE_QUALITY:"Please enter an integer between 0-100",BUILDIN_COMPRESS_ISCONVERT:"Whether to perform format conversion",BUILDIN_COMPRESS_MESSAGE_ISCONVERT:"Enable when format conversion is required",BUILDIN_COMPRESS_CONVERTFORMAT:"Set conversion format",BUILDIN_COMPRESS_MESSAGE_CONVERTFORMAT:"Please select conversion format",BUILDIN_COMPRESS_ISRESIZE:"Whether to resize the image",BUILDIN_COMPRESS_MESSAGE_ISRESIZE:"Enable when image resizing is required",BUILDIN_COMPRESS_RESIZEWIDTH:"Set resizing width",BUILDIN_COMPRESS_MESSAGE_RESIZEWIDTH:"Please enter a number",BUILDIN_COMPRESS_RESIZEHEIGHT:"Set resizing height",BUILDIN_COMPRESS_MESSAGE_RESIZEHEIGHT:"Please enter a number",BUILDIN_COMPRESS_ISRESIZEBYPERCENT:"Whether to resize the image by percentage",BUILDIN_COMPRESS_MESSAGE_ISRESIZEBYPERCENT:"Enable when resizing by percentage is required",BUILDIN_COMPRESS_RESIZEPERCENT:"Set resizing percentage",BUILDIN_COMPRESS_MESSAGE_RESIZEPERCENT:"Please enter a number",BUILDIN_COMPRESS_SKIPRESIZEOFSMALLIMG:"Whether to skip resizing of small images",BUILDIN_COMPRESS_ISROTATE:"Whether to rotate the image",BUILDIN_COMPRESS_MESSAGE_ISROTATE:"Enable when image rotation is required",BUILDIN_COMPRESS_ROTATEDEGREE:"Set rotation angle",BUILDIN_COMPRESS_MESSAGE_ROTATEDEGREE:"Please enter a number, can be negative",BUILDIN_COMPRESS_ISREMOVEEXIF:"Whether to remove EXIF information",BUILDIN_COMPRESS_MESSAGE_ISREMOVEEXIF:"Enable when removing EXIF information is required",PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS:"Plugin installed successfully",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED:"Plugin installation failed",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_REASON:"Plugin installation failed, error code is ${code}, error log is \n ${data}",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_PATH:"Plugin installation failed, please enter a valid plugin name or valid installation path",PLUGIN_HANDLER_PLUGIN_UNINSTALL_SUCCESS:"Plugin uninstalled successfully",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED:"Plugin uninstall failed",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_REASON:"Plugin uninstall failed, error code is ${code}, error log is \n ${data}",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_VALID:"Plugin uninstall failed, please enter a valid plugin name",PLUGIN_HANDLER_PLUGIN_UPDATE_SUCCESS:"Plugin updated successfully",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED:"Plugin update failed",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_REASON:"Plugin update failed, error code is ${code}, error log is \n ${data}",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_VALID:"Plugin update failed, please enter a valid plugin name"}};class Pr{constructor(e){this.ctx=e,this.objectAdapter=new G.ObjectAdapter(dr);let t=this.ctx.getConfig("settings.language")||"zh-CN";dr[t]||(t="zh-CN"),this.i18n=new G.I18n({adapter:this.objectAdapter,defaultLanguage:t}),this.loadOutterI18n()}loadOutterI18n(){const e=this.getOutterI18nFolder();x.default.readdirSync(e,{withFileTypes:!0}).forEach((t=>{if(t.isFile()&&t.name.endsWith(".yml")){const r=F.default.join(e,t.name),n=x.default.readFileSync(r,"utf8");try{const e=le.default.load(n);dr[t.name.replace(/\.yml$/,"")]=e}catch(e){console.error(e)}}}))}getOutterI18nFolder(){const e=F.default.join(this.ctx.baseDir,"i18n-cli");return x.default.pathExistsSync(e)||x.default.ensureDirSync(e),e}translate(e,t){return this.i18n.translate(e,t)||e}setLanguage(e){this.i18n.setLanguage(e),this.ctx.saveConfig({"settings.language":e})}addLocale(e,t){const r=this.objectAdapter.getLocale(e);if(!r)return!1;const n=A.merge(r,t);return this.objectAdapter.setLocale(e,n),!0}addLanguage(e,t){return!this.objectAdapter.getLocale(e)&&(this.objectAdapter.setLocale(e,t),dr[e]=t,!0)}getLanguageList(){return Object.keys(dr)}}class pr extends r.EventEmitter{get pluginLoader(){return this._pluginLoader}constructor(e=""){super(),this.VERSION="1.0.0",this.configPath=e,this.output=[],this.input=[],this.rawInput=[],this.helper={transformer:new lt("transformer"),uploader:new lt("uploader"),beforeTransformPlugins:new lt("beforeTransformPlugins"),beforeUploadPlugins:new lt("beforeUploadPlugins"),afterUploadPlugins:new lt("afterUploadPlugins")},this.initConfigPath(),this.log=new St(this),this.cmd=new ut(this),this.pluginHandler=new cr(this),this.initConfig(),this.init()}initConfigPath(){if(""===this.configPath&&(this.configPath=n.homedir()+"/.piclist/config.json"),".JSON"!==F.default.extname(this.configPath).toUpperCase())throw this.configPath="",Error("The configuration file only supports JSON format.");this.baseDir=F.default.dirname(this.configPath);x.default.pathExistsSync(this.configPath)||x.default.ensureFileSync(`${this.configPath}`)}initConfig(){this.db=new _r(this),this._config=this.db.read(!0)}init(){try{this.i18n=new Pr(this),this.Request=new Ir(this),this._pluginLoader=new rr(this),Et("picgo"),Zt().register(this),{register(e){e.helper.transformer.register("path",er),e.helper.transformer.register("base64",tr)}}.register(this),Et(""),this._pluginLoader.load(),this.lifecycle=new dt(this)}catch(e){throw this.emit(_t.UPLOAD_PROGRESS,-1),this.log.error(e),e}}use(e,t){if(t)return this.pluginLoader.registerPlugin(t,e),this.pluginLoader.getPlugin(t);return e(this)}registerCommands(){""!==this.configPath&&(this.cmd.init(),this.cmd.loadCommands())}getConfig(e){return e?A.get(this._config,e):this._config}saveConfig(e){Ne(e)?(this.setConfig(e),this.db.saveConfig(e)):this.log.warn("the format of config is invalid, please provide object")}removeConfig(e,t){e&&t&&(Ue(e)?this.log.warn(`the config.${e} can't be removed`):(this.unsetConfig(e,t),this.db.unset(e,t)))}setConfig(e){Ne(e)?Object.keys(e).forEach((t=>{Ue(t)&&(this.log.warn(`the config.${t} can't be modified`),delete e[t]),A.set(this._config,t,e[t]),sr.emit(ct.CONFIG_CHANGE,{configName:t,value:e[t]})})):this.log.warn("the format of config is invalid, please provide object")}unsetConfig(e,t){e&&t&&(Ue(e)?this.log.warn(`the config.${e} can't be unset`):A.unset(this.getConfig(e),t))}get request(){return this.Request.request.bind(this.Request)}async upload(e){if(""===this.configPath)return this.log.error("The configuration file only supports JSON format."),[];if(void 0!==e&&0!==e.length){const{output:t}=await this.lifecycle.start(e);return t}try{const{imgPath:e,shouldKeepAfterUploading:t}=await ir(this);if("no image"===e)throw new Error("image not found in clipboard");{this.once(_t.FAILED,(()=>{t||x.default.remove(e).catch((e=>{this.log.error(e)}))})),this.once("finished",(()=>{t||x.default.remove(e).catch((e=>{this.log.error(e)}))}));const{output:r}=await this.lifecycle.start([e]);return r}}catch(e){throw this.emit(_t.FAILED,e),e}}}exports.Commander=ut,exports.Lifecycle=dt,exports.LifecyclePlugins=lt,exports.Logger=St,exports.PicGo=pr,exports.PicGoUtils=ke,exports.PluginHandler=cr,exports.PluginLoader=rr,exports.Request=Ir;
2
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY2pzLmpzIiwic291cmNlcyI6WyIuLi9zcmMvcGx1Z2lucy9jb21tYW5kZXIvcGx1Z2luSGFuZGxlci50cyIsIi4uL3NyYy9wbHVnaW5zL2NvbW1hbmRlci9jb25maWcudHMiLCIuLi9zcmMvdXRpbHMvY29tbW9uLnRzIiwiLi4vc3JjL3BsdWdpbnMvY29tbWFuZGVyL3VwbG9hZC50cyIsIi4uL3NyYy9wbHVnaW5zL2JlZm9yZXRyYW5zZm9ybWVyL2NvbXByZXNzLnRzIiwiLi4vc3JjL3BsdWdpbnMvYmVmb3JldHJhbnNmb3JtZXIvd2F0ZXJtYXJrLnRzIiwiLi4vc3JjL3BsdWdpbnMvYmVmb3JldXBsb2FkL2J1aWxkSW5SZW5hbWUudHMiLCIuLi9zcmMvcGx1Z2lucy9jb21tYW5kZXIvc2V0dGluZy50cyIsIi4uL3NyYy9wbHVnaW5zL2NvbW1hbmRlci91c2UudHMiLCIuLi9zcmMvcGx1Z2lucy9jb21tYW5kZXIvcHJveHkudHMiLCIuLi9zcmMvdXRpbHMvaW5pdFV0aWxzLnRzIiwiLi4vc3JjL3BsdWdpbnMvY29tbWFuZGVyL2luaXQudHMiLCIuLi9zcmMvcGx1Z2lucy9jb21tYW5kZXIvaTE4bi50cyIsIi4uL3NyYy9saWIvTGlmZWN5Y2xlUGx1Z2lucy50cyIsIi4uL3NyYy9saWIvQ29tbWFuZGVyLnRzIiwiLi4vc3JjL3BsdWdpbnMvY29tbWFuZGVyL2luZGV4LnRzIiwiLi4vc3JjL3V0aWxzL2VudW0udHMiLCIuLi9zcmMvbGliL0xvZ2dlci50cyIsIi4uL3NyYy9jb3JlL0xpZmVjeWNsZS50cyIsIi4uL3NyYy91dGlscy9jcmVhdGVDb250ZXh0LnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvc21tcy50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL3RjeXVuLnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvZ2l0aHViLnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvcWluaXUudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci9pbWd1ci50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL2FsaXl1bi50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL3VweXVuLnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvd2ViZGF2LnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvbG9jYWwudHMiLCIuLi9zcmMvdXRpbHMvc3NoQ2xpZW50LnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvc2Z0cC50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL2luZGV4LnRzIiwiLi4vc3JjL3BsdWdpbnMvdHJhbnNmb3JtZXIvcGF0aC50cyIsIi4uL3NyYy9wbHVnaW5zL3RyYW5zZm9ybWVyL2Jhc2U2NC50cyIsIi4uL3NyYy9saWIvUGx1Z2luTG9hZGVyLnRzIiwiLi4vc3JjL3V0aWxzL3N0YXRpYy50cyIsIi4uL3NyYy91dGlscy9nZXRDbGlwYm9hcmRJbWFnZS50cyIsIi4uL3NyYy91dGlscy9ldmVudEJ1cy50cyIsIi4uL3NyYy9saWIvUmVxdWVzdC50cyIsIi4uL3NyYy91dGlscy9kYi50cyIsIi4uL3NyYy9saWIvUGx1Z2luSGFuZGxlci50cyIsIi4uL3NyYy9pMThuL2luZGV4LnRzIiwiLi4vc3JjL2kxOG4vemgtQ04udHMiLCIuLi9zcmMvaTE4bi96aC1UVy50cyIsIi4uL3NyYy9pMThuL2VuLnRzIiwiLi4vc3JjL2NvcmUvUGljR28udHMiLCIuLi9zcmMvcGx1Z2lucy90cmFuc2Zvcm1lci9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIElQaWNHbywgdHlwZSBJUGx1Z2luIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcblxyXG5jb25zdCBwbHVnaW5IYW5kbGVyOiBJUGx1Z2luID0ge1xyXG4gIGhhbmRsZTogKGN0eDogSVBpY0dvKSA9PiB7XHJcbiAgICAvLyBjb25zdCBwbHVnaW5IYW5kbGVyID0gbmV3IFBsdWdpbkhhbmRsZXIoY3R4KVxyXG4gICAgY29uc3QgY21kID0gY3R4LmNtZFxyXG4gICAgY21kLnByb2dyYW1cclxuICAgICAgLmNvbW1hbmQoJ2luc3RhbGwgPHBsdWdpbnMuLi4+JylcclxuICAgICAgLmRlc2NyaXB0aW9uKCdpbnN0YWxsIHBpY2dvIHBsdWdpbicpXHJcbiAgICAgIC5hbGlhcygnYWRkJylcclxuICAgICAgLm9wdGlvbignLXAsIC0tcHJveHkgPHByb3h5PicsICdBZGQgcHJveHkgZm9yIGluc3RhbGxpbmcnKVxyXG4gICAgICAub3B0aW9uKCctciwgLS1yZWdpc3RyeSA8cmVnaXN0cnk+JywgJ0Nob29zZSBhIHJlZ2lzdHJ5IGZvciBpbnN0YWxsaW5nJylcclxuICAgICAgLmFjdGlvbigocGx1Z2luczogc3RyaW5nW10sIHByb2dyYW06IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHsgcHJveHksIHJlZ2lzdHJ5IH0gPSBwcm9ncmFtXHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgICAgIHByb3h5LFxyXG4gICAgICAgICAgcmVnaXN0cnlcclxuICAgICAgICB9XHJcbiAgICAgICAgY3R4LnBsdWdpbkhhbmRsZXIuaW5zdGFsbChwbHVnaW5zLCBvcHRpb25zKS5jYXRjaCgoZSkgPT4geyBjdHgubG9nLmVycm9yKGUpIH0pXHJcbiAgICAgIH0pXHJcbiAgICBjbWQucHJvZ3JhbVxyXG4gICAgICAuY29tbWFuZCgndW5pbnN0YWxsIDxwbHVnaW5zLi4uPicpXHJcbiAgICAgIC5hbGlhcygncm0nKVxyXG4gICAgICAuZGVzY3JpcHRpb24oJ3VuaW5zdGFsbCBwaWNnbyBwbHVnaW4nKVxyXG4gICAgICAuYWN0aW9uKChwbHVnaW5zOiBzdHJpbmdbXSkgPT4ge1xyXG4gICAgICAgIGN0eC5wbHVnaW5IYW5kbGVyLnVuaW5zdGFsbChwbHVnaW5zKS5jYXRjaCgoZSkgPT4geyBjdHgubG9nLmVycm9yKGUpIH0pXHJcbiAgICAgIH0pXHJcbiAgICBjbWQucHJvZ3JhbVxyXG4gICAgICAuY29tbWFuZCgndXBkYXRlIDxwbHVnaW5zLi4uPicpXHJcbiAgICAgIC5kZXNjcmlwdGlvbigndXBkYXRlIHBpY2dvIHBsdWdpbicpXHJcbiAgICAgIC5vcHRpb24oJy1wLCAtLXByb3h5IDxwcm94eT4nLCAnQWRkIHByb3h5IGZvciBpbnN0YWxsaW5nJylcclxuICAgICAgLm9wdGlvbignLXIsIC0tcmVnaXN0cnkgPHJlZ2lzdHJ5PicsICdDaG9vc2UgYSByZWdpc3RyeSBmb3IgaW5zdGFsbGluZycpXHJcbiAgICAgIC5hY3Rpb24oKHBsdWdpbnM6IHN0cmluZ1tdLCBwcm9ncmFtOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCB7IHByb3h5LCByZWdpc3RyeSB9ID0gcHJvZ3JhbVxyXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICBwcm94eSxcclxuICAgICAgICAgIHJlZ2lzdHJ5XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGN0eC5wbHVnaW5IYW5kbGVyLnVwZGF0ZShwbHVnaW5zLCBvcHRpb25zKS5jYXRjaCgoZTogRXJyb3IpID0+IHsgY3R4LmxvZy5lcnJvcihlKSB9KVxyXG4gICAgICB9KVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgcGx1Z2luSGFuZGxlclxyXG4iLCJpbXBvcnQgeyB0eXBlIElQaWNHbywgdHlwZSBJUGx1Z2luIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcblxyXG5jb25zdCBjb25maWc6IElQbHVnaW4gPSB7XHJcbiAgaGFuZGxlOiAoY3R4OiBJUGljR28pID0+IHtcclxuICAgIGNvbnN0IGNtZCA9IGN0eC5jbWRcclxuICAgIGNtZC5wcm9ncmFtXHJcbiAgICAgIC5vcHRpb24oJy1jLCAtLWNvbmZpZyA8cGF0aD4nLCAnc2V0IGNvbmZpZyBwYXRoJylcclxuICAgICAgLy8gd2lsbCBoYW5kbGUgaW4gYGJpbi9waWNnb2BcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNvbmZpZ1xyXG4iLCJpbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnXHJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXHJcbmltcG9ydCB7IGltYWdlU2l6ZSB9IGZyb20gJ2ltYWdlLXNpemUnXHJcbmltcG9ydCB7XHJcbiAgdHlwZSBJSW1nU2l6ZSxcclxuICB0eXBlIElQYXRoVHJhbnNmb3JtZWRJbWdJbmZvLFxyXG4gIHR5cGUgSVBsdWdpbk5hbWVUeXBlLFxyXG4gIHR5cGUgSUxvZ2dlcixcclxuICB0eXBlIElQaWNHbyxcclxuICB0eXBlIElCdWlsZEluQ29tcHJlc3NPcHRpb25zLFxyXG4gIHR5cGUgSUJ1aWxkSW5XYXRlck1hcmtPcHRpb25zXHJcbn0gZnJvbSAnLi4vdHlwZXMnXHJcbmltcG9ydCB7IFVSTCB9IGZyb20gJ3VybCdcclxuaW1wb3J0IFRleHRUb1NWRyBmcm9tICd0ZXh0LXRvLXN2ZydcclxuaW1wb3J0IHNoYXJwIGZyb20gJ3NoYXJwJ1xyXG5pbXBvcnQgY3J5cHRvIGZyb20gJ2NyeXB0bydcclxuaW1wb3J0IHsgdjQgYXMgdXVpZHY0IH0gZnJvbSAndXVpZCdcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYW5kb21TdHJpbmdHZW5lcmF0b3IgKGxlbmd0aDogbnVtYmVyKTogc3RyaW5nIHtcclxuICBjb25zdCBjaGFycyA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSdcclxuICByZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aCB9KS5tYXAoKCkgPT4gY2hhcnMuY2hhckF0KE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGNoYXJzLmxlbmd0aCkpKS5qb2luKCcnKVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmVuYW1lRmlsZU5hbWVXaXRoVGltZXN0YW1wIChvbGROYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gIHJldHVybiBgJHtNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKX0ke3JhbmRvbVN0cmluZ0dlbmVyYXRvcig1KX0ke3BhdGguZXh0bmFtZShvbGROYW1lKX1gXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZW5hbWVGaWxlTmFtZVdpdGhSYW5kb21TdHJpbmcgKG9sZE5hbWU6IHN0cmluZywgbGVuZ3RoOiBudW1iZXIgPSA1KTogc3RyaW5nIHtcclxuICByZXR1cm4gYCR7cmFuZG9tU3RyaW5nR2VuZXJhdG9yKGxlbmd0aCl9JHtwYXRoLmV4dG5hbWUob2xkTmFtZSl9YFxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmVuYW1lRmlsZU5hbWVXaXRoQ3VzdG9tU3RyaW5nIChvbGROYW1lOiBzdHJpbmcsIGN1c3RvbUZvcm1hdDogc3RyaW5nLCBhZmZpeEZpbGVOYW1lPzogc3RyaW5nKTogc3RyaW5nIHtcclxuICBjb25zdCBjb252ZXJzaW9uTWFwOiBSZWNvcmQ8c3RyaW5nLCAoKSA9PiBzdHJpbmc+ID0ge1xyXG4gICAgJ3tZfSc6ICgpID0+IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKS50b1N0cmluZygpLFxyXG4gICAgJ3t5fSc6ICgpID0+IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKS50b1N0cmluZygpLnNsaWNlKDIpLFxyXG4gICAgJ3ttfSc6ICgpID0+IChuZXcgRGF0ZSgpLmdldE1vbnRoKCkgKyAxKS50b1N0cmluZygpLmxlbmd0aCA9PT0gMSA/IGAwJHtuZXcgRGF0ZSgpLmdldE1vbnRoKCkgKyAxfWAgOiAobmV3IERhdGUoKS5nZXRNb250aCgpICsgMSkudG9TdHJpbmcoKSxcclxuICAgICd7ZH0nOiAoKSA9PiBuZXcgRGF0ZSgpLmdldERhdGUoKS50b1N0cmluZygpLmxlbmd0aCA9PT0gMSA/IGAwJHtuZXcgRGF0ZSgpLmdldERhdGUoKX1gIDogbmV3IERhdGUoKS5nZXREYXRlKCkudG9TdHJpbmcoKSxcclxuICAgICd7aH0nOiAoKSA9PiBuZXcgRGF0ZSgpLmdldEhvdXJzKCkudG9TdHJpbmcoKS5sZW5ndGggPT09IDEgPyBgMCR7bmV3IERhdGUoKS5nZXRIb3VycygpfWAgOiBuZXcgRGF0ZSgpLmdldEhvdXJzKCkudG9TdHJpbmcoKSxcclxuICAgICd7aX0nOiAoKSA9PiBuZXcgRGF0ZSgpLmdldE1pbnV0ZXMoKS50b1N0cmluZygpLmxlbmd0aCA9PT0gMSA/IGAwJHtuZXcgRGF0ZSgpLmdldE1pbnV0ZXMoKX1gIDogbmV3IERhdGUoKS5nZXRNaW51dGVzKCkudG9TdHJpbmcoKSxcclxuICAgICd7c30nOiAoKSA9PiBuZXcgRGF0ZSgpLmdldFNlY29uZHMoKS50b1N0cmluZygpLmxlbmd0aCA9PT0gMSA/IGAwJHtuZXcgRGF0ZSgpLmdldFNlY29uZHMoKX1gIDogbmV3IERhdGUoKS5nZXRTZWNvbmRzKCkudG9TdHJpbmcoKSxcclxuICAgICd7bWQ1fSc6ICgpID0+IGNyeXB0by5jcmVhdGVIYXNoKCdtZDUnKS51cGRhdGUocGF0aC5iYXNlbmFtZShvbGROYW1lLCBwYXRoLmV4dG5hbWUob2xkTmFtZSkpKS5kaWdlc3QoJ2hleCcpLFxyXG4gICAgJ3ttZDUtMTZ9JzogKCkgPT4gY3J5cHRvLmNyZWF0ZUhhc2goJ21kNScpLnVwZGF0ZShwYXRoLmJhc2VuYW1lKG9sZE5hbWUsIHBhdGguZXh0bmFtZShvbGROYW1lKSkpLmRpZ2VzdCgnaGV4Jykuc2xpY2UoMCwgMTYpLFxyXG4gICAgJ3tzdHItMTB9JzogKCkgPT4gcmFuZG9tU3RyaW5nR2VuZXJhdG9yKDEwKSxcclxuICAgICd7c3RyLTIwfSc6ICgpID0+IHJhbmRvbVN0cmluZ0dlbmVyYXRvcigyMCksXHJcbiAgICAne2ZpbGVuYW1lfSc6ICgpID0+IGFmZml4RmlsZU5hbWUgPyBwYXRoLmJhc2VuYW1lKGFmZml4RmlsZU5hbWUsIHBhdGguZXh0bmFtZShhZmZpeEZpbGVOYW1lKSkgOiBwYXRoLmJhc2VuYW1lKG9sZE5hbWUsIHBhdGguZXh0bmFtZShvbGROYW1lKSksXHJcbiAgICAne3V1aWR9JzogKCkgPT4gdXVpZHY0KCkucmVwbGFjZSgvLS9nLCAnJyksXHJcbiAgICAne3RpbWVzdGFtcH0nOiAoKSA9PiBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKS50b1N0cmluZygpXHJcbiAgfVxyXG4gIGlmIChjdXN0b21Gb3JtYXQgPT09IHVuZGVmaW5lZCB8fCAoIU9iamVjdC5rZXlzKGNvbnZlcnNpb25NYXApLnNvbWUoaXRlbSA9PiBjdXN0b21Gb3JtYXQuaW5jbHVkZXMoaXRlbSkpICYmICFjdXN0b21Gb3JtYXQuaW5jbHVkZXMoJ2xvY2FsRm9sZGVyJykpKSB7XHJcbiAgICByZXR1cm4gb2xkTmFtZVxyXG4gIH1cclxuICBjb25zdCBleHQgPSBwYXRoLmV4dG5hbWUob2xkTmFtZSlcclxuICBsZXQgbmV3TmFtZSA9IE9iamVjdC5rZXlzKGNvbnZlcnNpb25NYXApLnJlZHVjZSgoYWNjLCBjdXIpID0+IHtcclxuICAgIHJldHVybiBhY2MucmVwbGFjZShuZXcgUmVnRXhwKGN1ciwgJ2cnKSwgY29udmVyc2lvbk1hcFtjdXJdKCkpXHJcbiAgfSwgY3VzdG9tRm9ybWF0KSArIGV4dFxyXG4gIG5ld05hbWUgPSBuZXdOYW1lLnJlcGxhY2UoL3sobG9jYWxGb2xkZXI6PyhcXGQrKT8pfS9naSwgKF9yZXN1bHQsIGtleSwgY291bnQpID0+IHtcclxuICAgIGNvdW50ID0gTWF0aC5tYXgoMSwgY291bnQgfHwgMClcclxuICAgIGNvbnN0IHBhdGhzID0gcGF0aC5kaXJuYW1lKG9sZE5hbWUpLnNwbGl0KHBhdGguc2VwKVxyXG4gICAga2V5ID0gcGF0aHMuc2xpY2UoMCAtIGNvdW50KS5yZWR1Y2UoKGEsIGIpID0+IGAke2F9LyR7Yn1gKVxyXG4gICAgcmV0dXJuIGtleS5yZXBsYWNlKC86L2csICcnKVxyXG4gIH0pXHJcbiAgcmV0dXJuIG5ld05hbWVcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGlzVXJsID0gKHVybDogc3RyaW5nKTogYm9vbGVhbiA9PiAoL15odHRwcz86XFwvXFwvLykudGVzdCh1cmwpXHJcblxyXG5leHBvcnQgY29uc3QgaXNVcmxFbmNvZGUgPSAodXJsOiBzdHJpbmcpOiBib29sZWFuID0+IHtcclxuICB1cmwgPSB1cmwgfHwgJydcclxuICB0cnkge1xyXG4gICAgLy8gdGhlIHdob2xlIHVybCBlbmNvZGUgb3IgZGVjb2RlIHNob2xkIG5vdCB1c2UgZW5jb2RlVVJJQ29tcG9uZW50IG9yIGRlY29kZVVSSUNvbXBvbmVudFxyXG4gICAgcmV0dXJuIHVybCAhPT0gZGVjb2RlVVJJKHVybClcclxuICB9IGNhdGNoIChlKSB7XHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcbn1cclxuZXhwb3J0IGNvbnN0IGhhbmRsZVVybEVuY29kZSA9ICh1cmw6IHN0cmluZyk6IHN0cmluZyA9PiB7XHJcbiAgaWYgKCFpc1VybEVuY29kZSh1cmwpKSB7XHJcbiAgICB1cmwgPSBlbmNvZGVVUkkodXJsKVxyXG4gIH1cclxuICByZXR1cm4gdXJsXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBnZXRJbWFnZVNpemUgPSAoZmlsZTogQnVmZmVyKTogSUltZ1NpemUgPT4ge1xyXG4gIHRyeSB7XHJcbiAgICBjb25zdCB7IHdpZHRoID0gMCwgaGVpZ2h0ID0gMCwgdHlwZSB9ID0gaW1hZ2VTaXplKGZpbGUpXHJcbiAgICBjb25zdCBleHRuYW1lID0gdHlwZSA/IGAuJHt0eXBlfWAgOiAnLnBuZydcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHJlYWw6IHRydWUsXHJcbiAgICAgIHdpZHRoLFxyXG4gICAgICBoZWlnaHQsXHJcbiAgICAgIGV4dG5hbWVcclxuICAgIH1cclxuICB9IGNhdGNoIChlKSB7XHJcbiAgICAvLyBmYWxsYmFjayB0byAyMDAgKiAyMDBcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHJlYWw6IGZhbHNlLFxyXG4gICAgICB3aWR0aDogMjAwLFxyXG4gICAgICBoZWlnaHQ6IDIwMCxcclxuICAgICAgZXh0bmFtZTogJy5wbmcnXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgZ2V0RlNGaWxlID0gYXN5bmMgKGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPElQYXRoVHJhbnNmb3JtZWRJbWdJbmZvPiA9PiB7XHJcbiAgdHJ5IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGV4dG5hbWU6IHBhdGguZXh0bmFtZShmaWxlUGF0aCksXHJcbiAgICAgIGZpbGVOYW1lOiBwYXRoLmJhc2VuYW1lKGZpbGVQYXRoKSxcclxuICAgICAgYnVmZmVyOiBhd2FpdCBmcy5yZWFkRmlsZShmaWxlUGF0aCksXHJcbiAgICAgIHN1Y2Nlc3M6IHRydWVcclxuICAgIH1cclxuICB9IGNhdGNoIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHJlYXNvbjogYHJlYWQgZmlsZSAke2ZpbGVQYXRofSBlcnJvcmAsXHJcbiAgICAgIHN1Y2Nlc3M6IGZhbHNlXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgZ2V0VVJMRmlsZSA9IGFzeW5jICh1cmw6IHN0cmluZywgY3R4OiBJUGljR28pOiBQcm9taXNlPElQYXRoVHJhbnNmb3JtZWRJbWdJbmZvPiA9PiB7XHJcbiAgdXJsID0gaGFuZGxlVXJsRW5jb2RlKHVybClcclxuICBsZXQgdGltZW91dElkOiBOb2RlSlMuVGltZW91dFxyXG4gIGNvbnN0IHJlcXVlc3RGbiA9IG5ldyBQcm9taXNlPElQYXRoVHJhbnNmb3JtZWRJbWdJbmZvPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAoYXN5bmMgKCkgPT4ge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGN0eC5yZXF1ZXN0KHtcclxuICAgICAgICAgIG1ldGhvZDogJ2dldCcsXHJcbiAgICAgICAgICB1cmwsXHJcbiAgICAgICAgICByZXNvbHZlV2l0aEZ1bGxSZXNwb25zZTogdHJ1ZSxcclxuICAgICAgICAgIHJlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJ1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgICAudGhlbigocmVzcCkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzcC5kYXRhIGFzIEJ1ZmZlclxyXG4gICAgICAgICAgfSlcclxuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKVxyXG4gICAgICAgIGNvbnN0IHVybFBhdGggPSBuZXcgVVJMKHVybCkucGF0aG5hbWVcclxuICAgICAgICBsZXQgZXh0bmFtZSA9ICcnXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGNvbnN0IHVybFBhcmFtcyA9IG5ldyBVUkwodXJsKS5zZWFyY2hQYXJhbXNcclxuICAgICAgICAgIGV4dG5hbWUgPSB1cmxQYXJhbXMuZ2V0KCd3eF9mbXQnKSB8fCBwYXRoLmV4dG5hbWUodXJsUGF0aCkgfHwgJydcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgZXh0bmFtZSA9IHBhdGguZXh0bmFtZSh1cmxQYXRoKSB8fCAnJ1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWV4dG5hbWUuc3RhcnRzV2l0aCgnLicpICYmIGV4dG5hbWUpIHtcclxuICAgICAgICAgIGV4dG5hbWUgPSBgLiR7ZXh0bmFtZX1gXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlc29sdmUoe1xyXG4gICAgICAgICAgYnVmZmVyOiByZXMsXHJcbiAgICAgICAgICBmaWxlTmFtZTogcGF0aC5iYXNlbmFtZSh1cmxQYXRoKSxcclxuICAgICAgICAgIGV4dG5hbWUsXHJcbiAgICAgICAgICBzdWNjZXNzOiB0cnVlXHJcbiAgICAgICAgfSlcclxuICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xyXG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpXHJcbiAgICAgICAgcmVzb2x2ZSh7XHJcbiAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcclxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcmVzdHJpY3QtdGVtcGxhdGUtZXhwcmVzc2lvbnNcclxuICAgICAgICAgIHJlYXNvbjogYHJlcXVlc3QgJHt1cmx9IGVycm9yLCAke2Vycm9yPy5tZXNzYWdlID8/ICcnfWBcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9KSgpLmNhdGNoKHJlamVjdClcclxuICB9KVxyXG4gIGNvbnN0IHRpbWVvdXRQcm9taXNlID0gbmV3IFByb21pc2U8SVBhdGhUcmFuc2Zvcm1lZEltZ0luZm8+KChyZXNvbHZlKTogdm9pZCA9PiB7XHJcbiAgICB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgcmVzb2x2ZSh7XHJcbiAgICAgICAgc3VjY2VzczogZmFsc2UsXHJcbiAgICAgICAgcmVhc29uOiBgcmVxdWVzdCAke3VybH0gdGltZW91dGBcclxuICAgICAgfSlcclxuICAgIH0sIDMwMDAwKVxyXG4gIH0pXHJcbiAgcmV0dXJuIFByb21pc2UucmFjZShbcmVxdWVzdEZuLCB0aW1lb3V0UHJvbWlzZV0pXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBkZXRlY3QgdGhlIGlucHV0IHN0cmluZydzIHR5cGVcclxuICogZm9yIGV4YW1wbGVcclxuICogMS4gQHh4eC9waWNnby1wbHVnaW4teHh4IC0+IHNjb3BlXHJcbiAqIDIuIHBpY2dvLXBsdWdpbi14eHggLT4gbm9ybWFsXHJcbiAqIDMuIHh4eCAtPiBzaW1wbGVcclxuICogNC4gbm90IGV4aXN0cyBvciBpcyBhIHBhdGggLT4gdW5rbm93blxyXG4gKiBAcGFyYW0gbmFtZVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGdldFBsdWdpbk5hbWVUeXBlID0gKG5hbWU6IHN0cmluZyk6IElQbHVnaW5OYW1lVHlwZSA9PiB7XHJcbiAgaWYgKC9eQFteL10rXFwvcGljZ28tcGx1Z2luLS8udGVzdChuYW1lKSkge1xyXG4gICAgcmV0dXJuICdzY29wZSdcclxuICB9IGVsc2UgaWYgKG5hbWUuc3RhcnRzV2l0aCgncGljZ28tcGx1Z2luLScpKSB7XHJcbiAgICByZXR1cm4gJ25vcm1hbCdcclxuICB9IGVsc2UgaWYgKGlzU2ltcGxlTmFtZShuYW1lKSkge1xyXG4gICAgcmV0dXJuICdzaW1wbGUnXHJcbiAgfVxyXG4gIHJldHVybiAndW5rbm93bidcclxufVxyXG5cclxuLyoqXHJcbiAqIGRldGVjdCB0aGUgaW5wdXQgc3RyaW5nIGlzIGEgc2ltcGxlIHBsdWdpbiBuYW1lIG9yIG5vdFxyXG4gKiBmb3IgZXhhbXBsZVxyXG4gKiAxLiB4eHggLT4gdHJ1ZVxyXG4gKiAyLiAvVXNyL3h4L3h4eHgvcGljZ28tcGx1Z2luLXh4eCAtPiBmYWxzZVxyXG4gKiBAcGFyYW0gbmFtZSBwbHVnaW5OYW1lT3JQYXRoXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgaXNTaW1wbGVOYW1lID0gKG5hbWVPclBhdGg6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xyXG4gIGlmIChwYXRoLmlzQWJzb2x1dGUobmFtZU9yUGF0aCkpIHtcclxuICAgIHJldHVybiBmYWxzZVxyXG4gIH1cclxuICBjb25zdCBwbHVnaW5QYXRoID0gcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIG5hbWVPclBhdGgpXHJcbiAgaWYgKGZzLmV4aXN0c1N5bmMocGx1Z2luUGF0aCkpIHtcclxuICAgIHJldHVybiBmYWxzZVxyXG4gIH1cclxuICBpZiAobmFtZU9yUGF0aC5pbmNsdWRlcygnLycpIHx8IG5hbWVPclBhdGguaW5jbHVkZXMoJ1xcXFwnKSkge1xyXG4gICAgcmV0dXJuIGZhbHNlXHJcbiAgfVxyXG4gIHJldHVybiB0cnVlXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBzdHJlYW1saW5lIHRoZSBmdWxsIHBsdWdpbiBuYW1lIHRvIGEgc2ltcGxlIG9uZVxyXG4gKiBmb3IgZXhhbXBsZTpcclxuICogMS4gcGljZ28tcGx1Z2luLXh4eCAtPiB4eHhcclxuICogMi4gQHh4eC9waWNnby1wbHVnaW4teXl5IC0+IHl5eVxyXG4gKiBAcGFyYW0gbmFtZSBwbHVnaW5GdWxsTmFtZVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGhhbmRsZVN0cmVhbWxpbmVQbHVnaW5OYW1lID0gKG5hbWU6IHN0cmluZyk6IHN0cmluZyA9PiB7XHJcbiAgaWYgKC9eQFteL10rXFwvcGljZ28tcGx1Z2luLS8udGVzdChuYW1lKSkge1xyXG4gICAgcmV0dXJuIG5hbWUucmVwbGFjZSgvXkBbXi9dK1xcL3BpY2dvLXBsdWdpbi0vLCAnJylcclxuICB9IGVsc2Uge1xyXG4gICAgcmV0dXJuIG5hbWUucmVwbGFjZSgvcGljZ28tcGx1Z2luLS8sICcnKVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIGNvbXBsZXRlIHBsdWdpbiBuYW1lIHRvIGZ1bGwgbmFtZVxyXG4gKiBmb3IgZXhhbXBsZTpcclxuICogMS4geHh4IC0+IHBpY2dvLXBsdWdpbi14eHhcclxuICogMi4gcGljZ28tcGx1Z2luLXh4eCAtPiBwaWNnby1wbHVnaW4teHh4XHJcbiAqIEBwYXJhbSBuYW1lIHBsdWdpblNpbXBsZU5hbWVcclxuICogQHBhcmFtIHNjb3BlIHBsdWdpblNjb3BlXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgaGFuZGxlQ29tcGxldGVQbHVnaW5OYW1lID0gKG5hbWU6IHN0cmluZywgc2NvcGUgPSAnJyk6IHN0cmluZyA9PiB7XHJcbiAgaWYgKHNjb3BlKSB7XHJcbiAgICByZXR1cm4gYEAke3Njb3BlfS9waWNnby1wbHVnaW4tJHtuYW1lfWBcclxuICB9IGVsc2Uge1xyXG4gICAgcmV0dXJuIGBwaWNnby1wbHVnaW4tJHtuYW1lfWBcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBoYW5kbGUgaW5zdGFsbC91bmluc3RhbGwvdXBkYXRlIHBsdWdpbiBuYW1lIG9yIHBhdGhcclxuICogZm9yIGV4YW1wbGVcclxuICogMS4gcGljZ28tcGx1Z2luLXh4eCAtPiBwaWNnby1wbHVnaW4teHh4XHJcbiAqIDIuIEB4eHgvcGljZ28tcGx1Z2luLXh4eCAtPiBAeHh4L3BpY2dvLXBsdWdpbi14eHhcclxuICogMy4geHh4IC0+IHBpY2dvLXBsdWdpbi14eHhcclxuICogNC4gLi94eHh4L3BpY2dvLXBsdWdpbi14eHggLT4gL2Fic29sdXRlUGF0aC8uLi4veHh4eC9waWNnby1wbHVnaW4teHh4XHJcbiAqIDUuIC9hYnNvbHV0ZVBhdGgvLi4uL3BpY2dvLXBsdWdpbi14eHggLT4gL2Fic29sdXRlUGF0aC8uLi4vcGljZ28tcGx1Z2luLXh4eFxyXG4gKiBAcGFyYW0gbmFtZU9yUGF0aCBwbHVnaW5OYW1lIG9yIHBsdWdpblBhdGhcclxuICovXHJcbmV4cG9ydCBjb25zdCBnZXRQcm9jZXNzUGx1Z2luTmFtZSA9IChuYW1lT3JQYXRoOiBzdHJpbmcsIGxvZ2dlcjogSUxvZ2dlciB8IENvbnNvbGUgPSBjb25zb2xlKTogc3RyaW5nID0+IHtcclxuICBjb25zdCBwbHVnaW5OYW1lVHlwZSA9IGdldFBsdWdpbk5hbWVUeXBlKG5hbWVPclBhdGgpXHJcbiAgc3dpdGNoIChwbHVnaW5OYW1lVHlwZSkge1xyXG4gICAgY2FzZSAnbm9ybWFsJzpcclxuICAgIGNhc2UgJ3Njb3BlJzpcclxuICAgICAgcmV0dXJuIG5hbWVPclBhdGhcclxuICAgIGNhc2UgJ3NpbXBsZSc6XHJcbiAgICAgIHJldHVybiBoYW5kbGVDb21wbGV0ZVBsdWdpbk5hbWUobmFtZU9yUGF0aClcclxuICAgIGRlZmF1bHQ6IHtcclxuICAgICAgLy8gbm93LCB0aGUgcGx1Z2luTmFtZVR5cGUgaXMgdW5rbm93IGhlcmVcclxuICAgICAgLy8gMS4gY2hlY2sgaWYgaXMgYW4gYWJzb2x1dGUgcGF0aFxyXG4gICAgICBsZXQgcGx1Z2luUGF0aCA9IG5hbWVPclBhdGhcclxuICAgICAgaWYgKHBhdGguaXNBYnNvbHV0ZShuYW1lT3JQYXRoKSAmJiBmcy5leGlzdHNTeW5jKG5hbWVPclBhdGgpKSB7XHJcbiAgICAgICAgcmV0dXJuIGhhbmRsZVVuaXhTdHlsZVBhdGgocGx1Z2luUGF0aClcclxuICAgICAgfVxyXG4gICAgICAvLyAyLiBjaGVjayBpZiBpcyBhIHJlbGF0aXZlIHBhdGhcclxuICAgICAgcGx1Z2luUGF0aCA9IHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBuYW1lT3JQYXRoKVxyXG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyhwbHVnaW5QYXRoKSkge1xyXG4gICAgICAgIHJldHVybiBoYW5kbGVVbml4U3R5bGVQYXRoKHBsdWdpblBhdGgpXHJcbiAgICAgIH1cclxuICAgICAgLy8gMy4gaW52YWxpZCBuYW1lT3JQYXRoXHJcbiAgICAgIGxvZ2dlci53YXJuKGBDYW4ndCBmaW5kIHBsdWdpbiAke25hbWVPclBhdGh9YClcclxuICAgICAgcmV0dXJuICcnXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogZ2V0IHRoZSBub3JtYWwgcGx1Z2luIG5hbWVcclxuICogZm9yIGV4YW1wbGU6XHJcbiAqIDEuIHBpY2dvLXBsdWdpbi14eHggLT4gcGljZ28tcGx1Z2luLXh4eFxyXG4gKiAyLiBAeHh4L3BpY2dvLXBsdWdpbi14eHggLT4gQHh4eC9waWNnby1wbHVnaW4teHh4XHJcbiAqIDMuIC4veHh4eC9waWNnby1wbHVnaW4teHh4IC0+IHBpY2dvLXBsdWdpbi14eHhcclxuICogNC4gL2Fic29sdXRlUGF0aC8uLi4vcGljZ28tcGx1Z2luLXh4eCAtPiBwaWNnby1wbHVnaW4teHh4XHJcbiAqIDUuIGFuIGV4Y2VwdGlvbjogW3BhY2thZ2UuanNvbidzIG5hbWVdICE9PSBbZm9sZGVyIG5hbWVdXHJcbiAqIHRoZW4gdXNlIFtwYWNrYWdlLmpzb24ncyBuYW1lXSwgdXN1YWxseSBtYXRjaCB0aGUgc2NvcGUgcGFja2FnZS5cclxuICogNi4gaWYgcGx1Z2luIG5hbWUgaGFzIHZlcnNpb246IHBpY2dvLXBsdWdpbi14eHhAeC54LnggdGhlbiByZW1vdmUgdGhlIHZlcnNpb25cclxuICogQHBhcmFtIG5hbWVPclBhdGhcclxuICovXHJcbmV4cG9ydCBjb25zdCBnZXROb3JtYWxQbHVnaW5OYW1lID0gKG5hbWVPclBhdGg6IHN0cmluZywgbG9nZ2VyOiBJTG9nZ2VyIHwgQ29uc29sZSA9IGNvbnNvbGUpOiBzdHJpbmcgPT4ge1xyXG4gIGNvbnN0IHBsdWdpbk5hbWVUeXBlID0gZ2V0UGx1Z2luTmFtZVR5cGUobmFtZU9yUGF0aClcclxuICBzd2l0Y2ggKHBsdWdpbk5hbWVUeXBlKSB7XHJcbiAgICBjYXNlICdub3JtYWwnOlxyXG4gICAgICByZXR1cm4gcmVtb3ZlUGx1Z2luVmVyc2lvbihuYW1lT3JQYXRoKVxyXG4gICAgY2FzZSAnc2NvcGUnOlxyXG4gICAgICByZXR1cm4gcmVtb3ZlUGx1Z2luVmVyc2lvbihuYW1lT3JQYXRoLCB0cnVlKVxyXG4gICAgY2FzZSAnc2ltcGxlJzpcclxuICAgICAgcmV0dXJuIHJlbW92ZVBsdWdpblZlcnNpb24oaGFuZGxlQ29tcGxldGVQbHVnaW5OYW1lKG5hbWVPclBhdGgpKVxyXG4gICAgZGVmYXVsdDoge1xyXG4gICAgICAvLyBub3csIHRoZSBuYW1lT3JQYXRoIG11c3QgYmUgcGF0aFxyXG4gICAgICAvLyB0aGUgbmFtZU9yUGF0aCBoZXJlIHdpbGwgYmUgZW5zdXJlZCB3aXRoIHVuaXggc3R5bGVcclxuICAgICAgLy8gd2UgbmVlZCB0byBmaW5kIHRoZSBwYWNrYWdlLmpzb24ncyBuYW1lIGNhdXNlIG5wbSB1c2luZyB0aGUgbmFtZSBpbiBwYWNrYWdlLmpzb24ncyBuYW1lIGZpbGVkXHJcbiAgICAgIGlmICghZnMuZXhpc3RzU3luYyhuYW1lT3JQYXRoKSkge1xyXG4gICAgICAgIGxvZ2dlci53YXJuKGBDYW4ndCBmaW5kIHBsdWdpbjogJHtuYW1lT3JQYXRofWApXHJcbiAgICAgICAgcmV0dXJuICcnXHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgcGFja2FnZUpTT05QYXRoID0gcGF0aC5wb3NpeC5qb2luKG5hbWVPclBhdGgsICdwYWNrYWdlLmpzb24nKVxyXG4gICAgICBpZiAoIWZzLmV4aXN0c1N5bmMocGFja2FnZUpTT05QYXRoKSkge1xyXG4gICAgICAgIGxvZ2dlci53YXJuKGBDYW4ndCBmaW5kIHBsdWdpbjogJHtuYW1lT3JQYXRofWApXHJcbiAgICAgICAgcmV0dXJuICcnXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgcGtnID0gZnMucmVhZEpTT05TeW5jKHBhY2thZ2VKU09OUGF0aCkgfHwge31cclxuICAgICAgICBpZiAoIXBrZy5uYW1lPy5pbmNsdWRlcygncGljZ28tcGx1Z2luLScpKSB7XHJcbiAgICAgICAgICBsb2dnZXIud2FybihgVGhlIHBsdWdpbiBwYWNrYWdlLmpzb24ncyBuYW1lIGZpbGVkIGlzICR7cGtnLm5hbWUgYXMgc3RyaW5nIHx8ICdlbXB0eSd9LCBuZWVkIHRvIGluY2x1ZGUgdGhlIHByZWZpeDogcGljZ28tcGx1Z2luLWApXHJcbiAgICAgICAgICByZXR1cm4gJydcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHBrZy5uYW1lXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBoYW5kbGUgdHJhbnNmb3JtIHRoZSBwYXRoIHRvIHVuaXggc3R5bGVcclxuICogZm9yIGV4YW1wbGVcclxuICogMS4gQzpcXFxceHh4XFxcXHh4eCAtPiBDOi94eHgveHh4XHJcbiAqIDIuIC94eHgveHh4IC0+IC94eHgveHh4XHJcbiAqIEBwYXJhbSBwYXRoXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgaGFuZGxlVW5peFN0eWxlUGF0aCA9IChwYXRoU3RyOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xyXG4gIGNvbnN0IHBhdGhBcnIgPSBwYXRoU3RyLnNwbGl0KHBhdGguc2VwKVxyXG4gIHJldHVybiBwYXRoQXJyLmpvaW4oJy8nKVxyXG59XHJcblxyXG4vKipcclxuICogcmVtb3ZlIHBsdWdpbiB2ZXJzaW9uIHdoZW4gcmVnaXN0ZXIgcGx1Z2luIG5hbWVcclxuICogMS4gcGljZ28tcGx1Z2luLXh4eEAxLjAuMCAtPiBwaWNnby1wbHVnaW4teHh4XHJcbiAqIDIuIEB4eHgvcGljZ28tcGx1Z2luLXh4eEAxLjAuMCAtPiBAeHh4L3BpY2dvLXBsdWdpbi14eHhcclxuICogQHBhcmFtIG5hbWVPclBhdGhcclxuICogQHBhcmFtIHNjb3BlXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgcmVtb3ZlUGx1Z2luVmVyc2lvbiA9IChuYW1lT3JQYXRoOiBzdHJpbmcsIHNjb3BlOiBib29sZWFuID0gZmFsc2UpOiBzdHJpbmcgPT4ge1xyXG4gIGlmICghbmFtZU9yUGF0aC5pbmNsdWRlcygnQCcpKSB7XHJcbiAgICByZXR1cm4gbmFtZU9yUGF0aFxyXG4gIH0gZWxzZSB7XHJcbiAgICBsZXQgcmVnID0gLyguK1xcLyk/KHBpY2dvLXBsdWdpbi1cXHcrKShALispKi9cclxuICAgIC8vIGlmIGlzIGEgc2NvcGUgcGtnXHJcbiAgICBpZiAoc2NvcGUpIHtcclxuICAgICAgcmVnID0gLyguK1xcLyk/KF5AW14vXStcXC9waWNnby1wbHVnaW4tXFx3KykoQC4rKSovXHJcbiAgICB9XHJcbiAgICBjb25zdCBtYXRjaEFyciA9IG5hbWVPclBhdGgubWF0Y2gocmVnKVxyXG4gICAgaWYgKCFtYXRjaEFycikge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ2NhbiBub3QgcmVtb3ZlIHBsdWdpbiB2ZXJzaW9uJylcclxuICAgICAgcmV0dXJuIG5hbWVPclBhdGhcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBtYXRjaEFyclsyXVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIHRoZSBjb25maWcgYmxhY2sgaXRlbSBsaXN0IHdoaWNoIHdvbid0IGJlIHNldHRlZFxyXG4gKiBvbmx5IGNhbiBiZSBnb3RcclxuICovXHJcbmV4cG9ydCBjb25zdCBjb25maWdCbGFja0xpc3QgPSBbXVxyXG5cclxuLyoqXHJcbiAqIGNoZWNrIHNvbWUgY29uZmlnIGtleSBpcyBpbiBibGFja0xpc3RcclxuICogQHBhcmFtIGtleVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGlzQ29uZmlnS2V5SW5CbGFja0xpc3QgPSAoa2V5OiBzdHJpbmcpOiBib29sZWFuID0+IHtcclxuICByZXR1cm4gY29uZmlnQmxhY2tMaXN0LnNvbWUoYmxhY2tJdGVtID0+IGtleS5zdGFydHNXaXRoKGJsYWNrSXRlbSkpXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBjaGVjayB0aGUgaW5wdXQgY29uZmlnIGlzIHZhbGlkXHJcbiAqIGNvbmZpZyBtdXN0IGJlIG9iamVjdCBzdWNoIGFzIHsgeHh4OiAneHh4JyB9XHJcbiAqICYmIGNhbid0IGJlIGFycmF5XHJcbiAqIEBwYXJhbSBjb25maWdcclxuICogQHJldHVybnNcclxuICovXHJcbmV4cG9ydCBjb25zdCBpc0lucHV0Q29uZmlnVmFsaWQgPSAoY29uZmlnOiBhbnkpOiBib29sZWFuID0+IHtcclxuICBpZiAoXHJcbiAgICB0eXBlb2YgY29uZmlnID09PSAnb2JqZWN0JyAmJlxyXG4gICAgIUFycmF5LmlzQXJyYXkoY29uZmlnKSAmJlxyXG4gICAgT2JqZWN0LmtleXMoY29uZmlnKS5sZW5ndGggPiAwXHJcbiAgKSB7XHJcbiAgICByZXR1cm4gdHJ1ZVxyXG4gIH1cclxuICByZXR1cm4gZmFsc2VcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNhZmVQYXJzZTxUPiAoc3RyOiBzdHJpbmcpOiBUIHwgc3RyaW5nIHtcclxuICB0cnkge1xyXG4gICAgcmV0dXJuIEpTT04ucGFyc2Uoc3RyKVxyXG4gIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICByZXR1cm4gc3RyXHJcbiAgfVxyXG59XHJcblxyXG4vLyBob2xkLi4uXHJcbi8vIGV4cG9ydCBjb25zdCBjb25maWdXaGl0ZUxpc3Q6IFJlZ0V4cFtdID0gW1xyXG4vLyAgIC9ecGljQmVkLyxcclxuLy8gICAvXnBpY2dvUGx1Z2lucy8sXHJcbi8vICAgL15AW14vXStcXC9waWNnby1wbHVnaW4tLyxcclxuLy8gICAvZGVidWcvLFxyXG4vLyAgIC9zaWxlbnQvLFxyXG4vLyAgIC9jb25maWdQYXRoLyxcclxuLy8gICAvXnNldHRpbmdzLyxcclxuLy8gXVxyXG5cclxuLy8gZXhwb3J0IGNvbnN0IGlzQ29uZmlnS2V5SW5XaGl0ZUxpc3QgPSAoa2V5OiBzdHJpbmcpOiBib29sZWFuID0+IHtcclxuLy8gICByZXR1cm4gY29uZmlnV2hpdGVMaXN0LnNvbWUod2hpdGVJdGVtID0+IHdoaXRlSXRlbS50ZXN0KGtleSkpXHJcbi8vIH1cclxuXHJcbmV4cG9ydCBjb25zdCBmb3JjZU51bWJlciA9IChudW06IHN0cmluZyB8IG51bWJlciA9IDApOiBudW1iZXIgPT4ge1xyXG4gIHJldHVybiBpc05hTihOdW1iZXIobnVtKSkgPyAwIDogTnVtYmVyKG51bSlcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGlzRGV2ID0gKCk6IGJvb2xlYW4gPT4ge1xyXG4gIHJldHVybiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50J1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgaXNQcm9kID0gKCk6IGJvb2xlYW4gPT4ge1xyXG4gIHJldHVybiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nXHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIHRleHQyU1ZHIChcclxuICBkZWZhdWx0V2F0ZXJtYXJrRm9udFBhdGg6IHN0cmluZyxcclxuICB0ZXh0Pzogc3RyaW5nLFxyXG4gIGNvbG9yPzogc3RyaW5nLFxyXG4gIGZvbnRGYW1pbHk/OiBzdHJpbmdcclxuKTogUHJvbWlzZTxCdWZmZXI+IHtcclxuICB0ZXh0ID0gIXRleHQgPyAn5rWL6K+VJyA6IHRleHRcclxuICBmb250RmFtaWx5ID0gIWZvbnRGYW1pbHkgPyBkZWZhdWx0V2F0ZXJtYXJrRm9udFBhdGggOiBmb250RmFtaWx5XHJcbiAgY29sb3IgPSAhY29sb3IgPyAncmdiYSgyMDQsIDIwNCwgMjA0LCAwLjQ1KScgOiBjb2xvclxyXG4gIGNvbnN0IHRleHQyU1ZHID0gVGV4dFRvU1ZHLmxvYWRTeW5jKGZvbnRGYW1pbHkpXHJcbiAgY29uc3Qgb3B0aW9uczogVGV4dFRvU1ZHLkdlbmVyYXRpb25PcHRpb25zID0ge1xyXG4gICAgYW5jaG9yOiAndG9wJyxcclxuICAgIGF0dHJpYnV0ZXM6IHtcclxuICAgICAgZmlsbDogY29sb3JcclxuICAgIH1cclxuICB9XHJcbiAgY29uc3QgdGV4dFNWRyA9IHRleHQyU1ZHLmdldFNWRyh0ZXh0LCBvcHRpb25zKVxyXG4gIGNvbnN0IHN2ZyA9IEJ1ZmZlci5mcm9tKHRleHRTVkcpXHJcbiAgcmV0dXJuIHN2Z1xyXG59XHJcblxyXG5jb25zdCBkZWZhdWx0V2F0ZXJtYXJrSW1hZ2VQYXRoID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJ2Fzc2V0cycsICdwaWNsaXN0LnBuZycpXHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gQWRkV2F0ZXJtYXJrIChcclxuICBpbWc6IEJ1ZmZlcixcclxuICB3YXRlcm1hcmtUeXBlOiAndGV4dCcgfCAnaW1hZ2UnLFxyXG4gIGRlZmF1bHRXYXRlcm1hcmtGb250UGF0aDogc3RyaW5nLFxyXG4gIGlzRnVsbFNjcmVlbldhdGVybWFyaz86IGJvb2xlYW4sXHJcbiAgd2F0ZXJtYXJrRGVncmVlPzogbnVtYmVyLFxyXG4gIHRleHQ/OiBzdHJpbmcsXHJcbiAgd2F0ZXJtYXJrRm9udFBhdGg/OiBzdHJpbmcsXHJcbiAgd2F0ZXJtYXJrU2NhbGVSYXRpbz86IG51bWJlcixcclxuICB3YXRlcm1hcmtDb2xvcj86IHN0cmluZyxcclxuICB3YXRlcm1hcmtJbWFnZVBhdGg/OiBzdHJpbmcsXHJcbiAgcG9zaXRpb24/OiBzaGFycC5HcmF2aXR5XHJcbik6IFByb21pc2U8QnVmZmVyPiB7XHJcbiAgd2F0ZXJtYXJrU2NhbGVSYXRpbyA9ICF3YXRlcm1hcmtTY2FsZVJhdGlvIHx8IHdhdGVybWFya1NjYWxlUmF0aW8gPCAwIHx8IHdhdGVybWFya1NjYWxlUmF0aW8gPiAxID8gMC4xNSA6IHdhdGVybWFya1NjYWxlUmF0aW9cclxuICBjb25zdCBpbWFnZSA9IHNoYXJwKGltZylcclxuICBjb25zdCB7IHdpZHRoOiBpbWdXaWR0aCA9IDIwMCB9ID0gYXdhaXQgaW1hZ2UubWV0YWRhdGEoKVxyXG4gIGNvbnN0IHdhdGVybWFyayA9IGF3YWl0IGNyZWF0ZVdhdGVybWFyayhcclxuICAgIHdhdGVybWFya1R5cGUsXHJcbiAgICBkZWZhdWx0V2F0ZXJtYXJrRm9udFBhdGgsXHJcbiAgICB0ZXh0LFxyXG4gICAgd2F0ZXJtYXJrRm9udFBhdGgsXHJcbiAgICB3YXRlcm1hcmtTY2FsZVJhdGlvLFxyXG4gICAgd2F0ZXJtYXJrQ29sb3IsXHJcbiAgICB3YXRlcm1hcmtJbWFnZVBhdGgsXHJcbiAgICBpbWdXaWR0aCxcclxuICAgIHdhdGVybWFya0RlZ3JlZVxyXG4gIClcclxuICBjb25zdCBjb21wb3NpdGVkID0gYXdhaXQgaW1hZ2VcclxuICAgIC5jb21wb3NpdGUoW1xyXG4gICAgICB7XHJcbiAgICAgICAgaW5wdXQ6IHdhdGVybWFyayxcclxuICAgICAgICBncmF2aXR5OiBwb3NpdGlvbiB8fCAnc291dGhlYXN0JyxcclxuICAgICAgICB0aWxlOiBpc0Z1bGxTY3JlZW5XYXRlcm1hcmtcclxuICAgICAgfVxyXG4gICAgXSlcclxuICAgIC50b0J1ZmZlcigpXHJcbiAgcmV0dXJuIGNvbXBvc2l0ZWRcclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlV2F0ZXJtYXJrIChcclxuICB3YXRlcm1hcmtUeXBlOiAndGV4dCcgfCAnaW1hZ2UnLFxyXG4gIGRlZmF1bHRXYXRlcm1hcmtGb250UGF0aDogc3RyaW5nLFxyXG4gIHRleHQ/OiBzdHJpbmcsXHJcbiAgd2F0ZXJtYXJrRm9udFBhdGg/OiBzdHJpbmcsXHJcbiAgd2F0ZXJtYXJrU2NhbGVSYXRpbz86IG51bWJlcixcclxuICB3YXRlcm1hcmtDb2xvcj86IHN0cmluZyxcclxuICB3YXRlcm1hcmtJbWFnZVBhdGg/OiBzdHJpbmcsXHJcbiAgaW1nV2lkdGg6IG51bWJlciA9IDIwMCxcclxuICB3YXRlcm1hcmtEZWdyZWU6IG51bWJlciA9IDBcclxuKTogUHJvbWlzZTxCdWZmZXI+IHtcclxuICBsZXQgd2F0ZXJtYXJrOiBhbnlcclxuICBpZiAod2F0ZXJtYXJrVHlwZSA9PT0gJ2ltYWdlJykge1xyXG4gICAgd2F0ZXJtYXJrSW1hZ2VQYXRoID0gd2F0ZXJtYXJrSW1hZ2VQYXRoIHx8IGRlZmF1bHRXYXRlcm1hcmtJbWFnZVBhdGhcclxuICAgIHdhdGVybWFyayA9IGF3YWl0IHNoYXJwKHdhdGVybWFya0ltYWdlUGF0aCkudG9CdWZmZXIoKVxyXG4gIH0gZWxzZSB7XHJcbiAgICB3YXRlcm1hcmsgPSBhd2FpdCB0ZXh0MlNWRyhcclxuICAgICAgZGVmYXVsdFdhdGVybWFya0ZvbnRQYXRoLFxyXG4gICAgICB0ZXh0LFxyXG4gICAgICB3YXRlcm1hcmtDb2xvcixcclxuICAgICAgd2F0ZXJtYXJrRm9udFBhdGggfHwgZGVmYXVsdFdhdGVybWFya0ZvbnRQYXRoXHJcbiAgICApXHJcbiAgfVxyXG4gIGNvbnN0IHsgd2lkdGg6IHdhdGVybWFya1dpZHRoLCBoZWlnaHQ6IHdhdGVybWFya0hlaWdodCB9ID0gYXdhaXQgZ2V0U2l6ZShcclxuICAgIHdhdGVybWFya1xyXG4gIClcclxuICBjb25zdCB3YXRlcm1hcmtSZXNpemVXaWR0aCA9IE1hdGguZmxvb3IoaW1nV2lkdGggKiBmb3JjZU51bWJlcih3YXRlcm1hcmtTY2FsZVJhdGlvKSlcclxuICBjb25zdCB3YXRlcm1hcmtSZXNpemVIZWlnaHQgPSBNYXRoLmZsb29yKFxyXG4gICAgKHdhdGVybWFya1Jlc2l6ZVdpZHRoICogd2F0ZXJtYXJrSGVpZ2h0KSAvIHdhdGVybWFya1dpZHRoXHJcbiAgKVxyXG4gIHJldHVybiBhd2FpdCBzaGFycCh3YXRlcm1hcmspXHJcbiAgICAucmVzaXplKHdhdGVybWFya1Jlc2l6ZVdpZHRoLCB3YXRlcm1hcmtSZXNpemVIZWlnaHQsIHtcclxuICAgICAgZml0OiAnaW5zaWRlJ1xyXG4gICAgfSlcclxuICAgIC5yb3RhdGUod2F0ZXJtYXJrRGVncmVlLCB7IGJhY2tncm91bmQ6IHsgcjogMjU1LCBnOiAyNTUsIGI6IDI1NSwgYWxwaGE6IDAgfSB9KVxyXG4gICAgLnRvQnVmZmVyKClcclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gZ2V0U2l6ZSAoaW1hZ2U6IEJ1ZmZlcik6IFByb21pc2U8eyB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciB9PiB7XHJcbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBhd2FpdCBzaGFycChpbWFnZSkubWV0YWRhdGEoKVxyXG4gIHJldHVybiB7IHdpZHRoOiB3aWR0aCB8fCAyMDAsIGhlaWdodDogaGVpZ2h0IHx8IDIwMCB9XHJcbn1cclxuXHJcbmNvbnN0IHZhbGlkUGFyYW0gPSAoLi4ucGFyYW1zOiBhbnlbXSk6IGJvb2xlYW4gPT4ge1xyXG4gIHJldHVybiBwYXJhbXMuZXZlcnkocGFyYW0gPT4ge1xyXG4gICAgaWYgKHBhcmFtID09PSB1bmRlZmluZWQgfHwgcGFyYW0gPT09IG51bGwpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIHBhcmFtID09PSAnc3RyaW5nJykge1xyXG4gICAgICByZXR1cm4gcGFyYW0gIT09ICcnXHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIHBhcmFtID09PSAnbnVtYmVyJykge1xyXG4gICAgICByZXR1cm4gcGFyYW0gPiAwXHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIHBhcmFtID09PSAnb2JqZWN0Jykge1xyXG4gICAgICByZXR1cm4gT2JqZWN0LmtleXMocGFyYW0pLmxlbmd0aCA+IDBcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlXHJcbiAgfSlcclxufVxyXG5cclxuY29uc3QgYXZhaWxhYmxlQ29udmVydEZvcm1hdExpc3QgPSBbXHJcbiAgJ2F2aWYnLFxyXG4gICdkeicsXHJcbiAgJ2ZpdHMnLFxyXG4gICdnaWYnLFxyXG4gICdoZWlmJyxcclxuICAnaW5wdXQnLFxyXG4gICdqcGVnJyxcclxuICAnanBnJyxcclxuICAnanAyJyxcclxuICAnanhsJyxcclxuICAnbWFnaWNrJyxcclxuICAnb3BlbnNsaWRlJyxcclxuICAncGRmJyxcclxuICAncG5nJyxcclxuICAncHBtJyxcclxuICAncmF3JyxcclxuICAnc3ZnJyxcclxuICAndGlmZicsXHJcbiAgJ3RpZicsXHJcbiAgJ3YnLFxyXG4gICd3ZWJwJ1xyXG5dXHJcblxyXG5jb25zdCB2YWxpZE91dHB1dEZvcm1hdCA9IChmb3JtYXQ6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xyXG4gIHJldHVybiBhdmFpbGFibGVDb252ZXJ0Rm9ybWF0TGlzdC5pbmNsdWRlcyhmb3JtYXQpXHJcbn1cclxuXHJcbmNvbnN0IGltYWdlRXh0TGlzdCA9IFsnanBnJywgJ2pwZWcnLCAncG5nJywgJ3dlYnAnLCAnYm1wJywgJ3RpZmYnLCAndGlmJywgJ3N2ZycsICdpY28nLCAnYXZpZicsICdoZWlmJywgJ2hlaWMnXVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGltYWdlQWRkV2F0ZXJNYXJrIChpbWc6IEJ1ZmZlciwgb3B0aW9uczogSUJ1aWxkSW5XYXRlck1hcmtPcHRpb25zLCBkZWZhdWx0V2F0ZXJtYXJrRm9udFBhdGg6IHN0cmluZyk6IFByb21pc2U8QnVmZmVyPiB7XHJcbiAgdHJ5IHtcclxuICAgIGxldCBpbWFnZTogc2hhcnAuU2hhcnAgPSBzaGFycChpbWcpXHJcbiAgICBpZiAodmFsaWRQYXJhbShvcHRpb25zLndhdGVybWFya1RleHQpKSB7XHJcbiAgICAgIGltYWdlID0gc2hhcnAoYXdhaXQgQWRkV2F0ZXJtYXJrKFxyXG4gICAgICAgIGltZyxcclxuICAgICAgICBvcHRpb25zLndhdGVybWFya1R5cGUgfHwgJ3RleHQnLFxyXG4gICAgICAgIGRlZmF1bHRXYXRlcm1hcmtGb250UGF0aCxcclxuICAgICAgICBvcHRpb25zLmlzRnVsbFNjcmVlbldhdGVybWFyayxcclxuICAgICAgICBmb3JjZU51bWJlcihvcHRpb25zLndhdGVybWFya0RlZ3JlZSksXHJcbiAgICAgICAgb3B0aW9ucy53YXRlcm1hcmtUZXh0LFxyXG4gICAgICAgIG9wdGlvbnMud2F0ZXJtYXJrRm9udFBhdGgsXHJcbiAgICAgICAgZm9yY2VOdW1iZXIob3B0aW9ucy53YXRlcm1hcmtTY2FsZVJhdGlvKSxcclxuICAgICAgICBvcHRpb25zLndhdGVybWFya0NvbG9yLFxyXG4gICAgICAgIG9wdGlvbnMud2F0ZXJtYXJrSW1hZ2VQYXRoLFxyXG4gICAgICAgIG9wdGlvbnMud2F0ZXJtYXJrUG9zaXRpb25cclxuICAgICAgKSlcclxuICAgIH1cclxuICAgIHJldHVybiBhd2FpdCBpbWFnZS50b0J1ZmZlcigpXHJcbiAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgIGNvbnNvbGUubG9nKGVycm9yKVxyXG4gICAgcmV0dXJuIGltZ1xyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gZm9ybWF0T3B0aW9ucyAob3B0aW9uczogSUJ1aWxkSW5Db21wcmVzc09wdGlvbnMpOiBJQnVpbGRJbkNvbXByZXNzT3B0aW9ucyB7XHJcbiAgcmV0dXJuIHtcclxuICAgIHF1YWxpdHk6IGZvcmNlTnVtYmVyKG9wdGlvbnMucXVhbGl0eSksXHJcbiAgICBpc0NvbnZlcnQ6IG9wdGlvbnMuaXNDb252ZXJ0IHx8IGZhbHNlLFxyXG4gICAgY29udmVydEZvcm1hdDogb3B0aW9ucy5jb252ZXJ0Rm9ybWF0IHx8ICdqcGcnLFxyXG4gICAgaXNSZVNpemU6IG9wdGlvbnMuaXNSZVNpemUgfHwgZmFsc2UsXHJcbiAgICByZVNpemVIZWlnaHQ6IGZvcmNlTnVtYmVyKG9wdGlvbnMucmVTaXplSGVpZ2h0KSxcclxuICAgIHJlU2l6ZVdpZHRoOiBmb3JjZU51bWJlcihvcHRpb25zLnJlU2l6ZVdpZHRoKSxcclxuICAgIHNraXBSZVNpemVPZlNtYWxsSW1nOiBvcHRpb25zLnNraXBSZVNpemVPZlNtYWxsSW1nIHx8IGZhbHNlLFxyXG4gICAgaXNSZVNpemVCeVBlcmNlbnQ6IG9wdGlvbnMuaXNSZVNpemVCeVBlcmNlbnQgfHwgZmFsc2UsXHJcbiAgICByZVNpemVQZXJjZW50OiBmb3JjZU51bWJlcihvcHRpb25zLnJlU2l6ZVBlcmNlbnQpLFxyXG4gICAgaXNSb3RhdGU6IG9wdGlvbnMuaXNSb3RhdGUgfHwgZmFsc2UsXHJcbiAgICByb3RhdGVEZWdyZWU6IGZvcmNlTnVtYmVyKG9wdGlvbnMucm90YXRlRGVncmVlKSxcclxuICAgIHBpY0JlZDogb3B0aW9ucy5waWNCZWQgfHwgJ3NtbXMnXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW1hZ2VQcm9jZXNzIChpbWc6IEJ1ZmZlciwgb3B0aW9uczogSUJ1aWxkSW5Db21wcmVzc09wdGlvbnMsIHJhd0Zvcm1hdDogc3RyaW5nKTogUHJvbWlzZTxCdWZmZXI+IHtcclxuICBvcHRpb25zID0gZm9ybWF0T3B0aW9ucyhvcHRpb25zKVxyXG4gIHRyeSB7XHJcbiAgICByYXdGb3JtYXQgPSByYXdGb3JtYXQudG9Mb3dlckNhc2UoKS5yZXBsYWNlKCcuJywgJycpXHJcbiAgICBpZiAoIWltYWdlRXh0TGlzdC5pbmNsdWRlcyhyYXdGb3JtYXQpKSB7XHJcbiAgICAgIHJldHVybiBpbWdcclxuICAgIH1cclxuICAgIGxldCBpbWFnZTogc2hhcnAuU2hhcnAgPSBzaGFycChpbWcpXHJcbiAgICBsZXQgcXVhbGl0eSA9IDEwMFxyXG4gICAgaWYgKHZhbGlkUGFyYW0ob3B0aW9ucy5xdWFsaXR5KSAmJiBvcHRpb25zLnF1YWxpdHkhIDwgMTAwKSB7XHJcbiAgICAgIHF1YWxpdHkgPSBvcHRpb25zLnF1YWxpdHkhXHJcbiAgICB9XHJcbiAgICBpZiAob3B0aW9ucy5pc1JlU2l6ZUJ5UGVyY2VudCkge1xyXG4gICAgICBpZiAodmFsaWRQYXJhbShvcHRpb25zLnJlU2l6ZVBlcmNlbnQpKSB7XHJcbiAgICAgICAgY29uc3QgaW1hZ2VXaWR0aCA9IGF3YWl0IGltYWdlLm1ldGFkYXRhKCkudGhlbihtZXRhZGF0YSA9PiBtZXRhZGF0YS53aWR0aClcclxuICAgICAgICBjb25zdCBpbWFnZUhlaWdodCA9IGF3YWl0IGltYWdlLm1ldGFkYXRhKCkudGhlbihtZXRhZGF0YSA9PiBtZXRhZGF0YS5oZWlnaHQpXHJcbiAgICAgICAgaWYgKGltYWdlV2lkdGggJiYgaW1hZ2VIZWlnaHQpIHtcclxuICAgICAgICAgIGltYWdlID0gaW1hZ2UucmVzaXplKFxyXG4gICAgICAgICAgICBNYXRoLnJvdW5kKGltYWdlV2lkdGggKiBvcHRpb25zLnJlU2l6ZVBlcmNlbnQhIC8gMTAwKSxcclxuICAgICAgICAgICAgTWF0aC5yb3VuZChpbWFnZUhlaWdodCAqIG9wdGlvbnMucmVTaXplUGVyY2VudCEgLyAxMDApLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgZml0OiAnaW5zaWRlJ1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChvcHRpb25zLmlzUmVTaXplKSB7XHJcbiAgICAgIGlmICgodHlwZW9mIG9wdGlvbnMucmVTaXplSGVpZ2h0ID09PSAnbnVtYmVyJyAmJiBvcHRpb25zLnJlU2l6ZUhlaWdodCA+IDApICYmICh0eXBlb2Ygb3B0aW9ucy5yZVNpemVXaWR0aCA9PT0gJ251bWJlcicgJiYgb3B0aW9ucy5yZVNpemVXaWR0aCA+IDApKSB7XHJcbiAgICAgICAgaW1hZ2UgPSBpbWFnZS5yZXNpemUoXHJcbiAgICAgICAgICBvcHRpb25zLnJlU2l6ZVdpZHRoLFxyXG4gICAgICAgICAgb3B0aW9ucy5yZVNpemVIZWlnaHQsXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGZpdDogJ2ZpbGwnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKVxyXG4gICAgICB9IGVsc2UgaWYgKCh0eXBlb2Ygb3B0aW9ucy5yZVNpemVIZWlnaHQgPT09ICdudW1iZXInICYmIG9wdGlvbnMucmVTaXplSGVpZ2h0ID4gMCkgJiYgKHR5cGVvZiBvcHRpb25zLnJlU2l6ZVdpZHRoICE9PSAnbnVtYmVyJyB8fCBvcHRpb25zLnJlU2l6ZVdpZHRoID09PSAwKSkge1xyXG4gICAgICAgIGNvbnN0IGltYWdlV2lkdGggPSBhd2FpdCBpbWFnZS5tZXRhZGF0YSgpLnRoZW4obWV0YWRhdGEgPT4gbWV0YWRhdGEud2lkdGgpXHJcbiAgICAgICAgY29uc3QgaW1hZ2VIZWlnaHQgPSBhd2FpdCBpbWFnZS5tZXRhZGF0YSgpLnRoZW4obWV0YWRhdGEgPT4gbWV0YWRhdGEuaGVpZ2h0KVxyXG4gICAgICAgIGlmIChpbWFnZVdpZHRoICYmIGltYWdlSGVpZ2h0KSB7XHJcbiAgICAgICAgICBpZiAoIW9wdGlvbnMuc2tpcFJlU2l6ZU9mU21hbGxJbWcgfHwgKG9wdGlvbnMuc2tpcFJlU2l6ZU9mU21hbGxJbWcgJiYgb3B0aW9ucy5yZVNpemVIZWlnaHQgPCBpbWFnZUhlaWdodCkpIHtcclxuICAgICAgICAgICAgY29uc3Qgc2NhbGVSYXRpbyA9IG9wdGlvbnMucmVTaXplSGVpZ2h0IC8gaW1hZ2VIZWlnaHRcclxuICAgICAgICAgICAgaW1hZ2UgPSBpbWFnZS5yZXNpemUoXHJcbiAgICAgICAgICAgICAgTWF0aC5yb3VuZChpbWFnZVdpZHRoICogc2NhbGVSYXRpbyksXHJcbiAgICAgICAgICAgICAgb3B0aW9ucy5yZVNpemVIZWlnaHQsXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZml0OiAnaW5zaWRlJ1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmICgodHlwZW9mIG9wdGlvbnMucmVTaXplV2lkdGggPT09ICdudW1iZXInICYmIG9wdGlvbnMucmVTaXplV2lkdGggPiAwKSAmJiAodHlwZW9mIG9wdGlvbnMucmVTaXplSGVpZ2h0ICE9PSAnbnVtYmVyJyB8fCBvcHRpb25zLnJlU2l6ZUhlaWdodCA9PT0gMCkpIHtcclxuICAgICAgICBjb25zdCBpbWFnZVdpZHRoID0gYXdhaXQgaW1hZ2UubWV0YWRhdGEoKS50aGVuKG1ldGFkYXRhID0+IG1ldGFkYXRhLndpZHRoKVxyXG4gICAgICAgIGNvbnN0IGltYWdlSGVpZ2h0ID0gYXdhaXQgaW1hZ2UubWV0YWRhdGEoKS50aGVuKG1ldGFkYXRhID0+IG1ldGFkYXRhLmhlaWdodClcclxuICAgICAgICBpZiAoaW1hZ2VXaWR0aCAmJiBpbWFnZUhlaWdodCkge1xyXG4gICAgICAgICAgaWYgKCFvcHRpb25zLnNraXBSZVNpemVPZlNtYWxsSW1nIHx8IChvcHRpb25zLnNraXBSZVNpemVPZlNtYWxsSW1nICYmIG9wdGlvbnMucmVTaXplV2lkdGggPCBpbWFnZVdpZHRoKSkge1xyXG4gICAgICAgICAgICBjb25zdCBzY2FsZVJhdGlvID0gb3B0aW9ucy5yZVNpemVXaWR0aCAvIGltYWdlV2lkdGhcclxuICAgICAgICAgICAgaW1hZ2UgPSBpbWFnZS5yZXNpemUoXHJcbiAgICAgICAgICAgICAgb3B0aW9ucy5yZVNpemVXaWR0aCxcclxuICAgICAgICAgICAgICBNYXRoLnJvdW5kKGltYWdlSGVpZ2h0ICogc2NhbGVSYXRpbyksXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZml0OiAnaW5zaWRlJ1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKG9wdGlvbnMuaXNSb3RhdGUgJiYgb3B0aW9ucy5yb3RhdGVEZWdyZWUpIHtcclxuICAgICAgaW1hZ2UgPSBpbWFnZS5yb3RhdGUob3B0aW9ucy5yb3RhdGVEZWdyZWUsIHsgYmFja2dyb3VuZDogeyByOiAyNTUsIGc6IDI1NSwgYjogMjU1LCBhbHBoYTogMCB9IH0pXHJcbiAgICB9XHJcbiAgICBpZiAob3B0aW9ucy5pc0NvbnZlcnQpIHtcclxuICAgICAgbGV0IG5ld0Zvcm1hdCA9IG9wdGlvbnMuY29udmVydEZvcm1hdCB8fCAnanBnJ1xyXG4gICAgICBpZiAob3B0aW9ucy5waWNCZWQgPT09ICdpbWd1cicgJiYgbmV3Rm9ybWF0ID09PSAnd2VicCcpIHtcclxuICAgICAgICBuZXdGb3JtYXQgPSAnanBnJ1xyXG4gICAgICB9XHJcbiAgICAgIGltYWdlID0gaW1hZ2UudG9Gb3JtYXQobmV3Rm9ybWF0LCB7XHJcbiAgICAgICAgcXVhbGl0eVxyXG4gICAgICB9KVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHJhd0Zvcm1hdCAmJiB2YWxpZE91dHB1dEZvcm1hdChyYXdGb3JtYXQpKSB7XHJcbiAgICAgICAgaW1hZ2UgPSBpbWFnZS50b0Zvcm1hdChyYXdGb3JtYXQgYXMgYW55LCB7XHJcbiAgICAgICAgICBxdWFsaXR5XHJcbiAgICAgICAgfSlcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpbWFnZSA9IGltYWdlLnRvRm9ybWF0KCdqcGcnLCB7XHJcbiAgICAgICAgICBxdWFsaXR5XHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGF3YWl0IGltYWdlLnRvQnVmZmVyKClcclxuICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgY29uc29sZS5sb2coZXJyb3IpXHJcbiAgICByZXR1cm4gaW1nXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBpbWFnZUZvcm1hdExpc3QgPSBbJ2pwZycsICdqcGVnJywgJ3BuZycsICd3ZWJwJywgJ2JtcCcsICd0aWZmJywgJ3RpZicsICdzdmcnLCAnaWNvJywgJ2F2aWYnLCAnaGVpZicsICdoZWljJ11cclxuXHJcbmV4cG9ydCBjb25zdCBuZWVkQWRkV2F0ZXJtYXJrID0gKHdhdGVybWFya09wdGlvbnM6IElCdWlsZEluV2F0ZXJNYXJrT3B0aW9ucyB8IHVuZGVmaW5lZCwgZmlsZUV4dDogc3RyaW5nKTogYm9vbGVhbiA9PiB7XHJcbiAgZmlsZUV4dCA9IGZpbGVFeHQudG9Mb3dlckNhc2UoKS5yZXBsYWNlKCcuJywgJycpXHJcbiAgcmV0dXJuICEhd2F0ZXJtYXJrT3B0aW9ucyAmJiAhIXdhdGVybWFya09wdGlvbnMuaXNBZGRXYXRlcm1hcmsgJiYgaW1hZ2VGb3JtYXRMaXN0LmluY2x1ZGVzKGZpbGVFeHQpXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBuZWVkQ29tcHJlc3MgPSAoY29tcHJlc3NPcHRpb25zOiBJQnVpbGRJbkNvbXByZXNzT3B0aW9ucyB8IHVuZGVmaW5lZCwgZmlsZUV4dDogc3RyaW5nKTogYm9vbGVhbiA9PiB7XHJcbiAgZmlsZUV4dCA9IGZpbGVFeHQudG9Mb3dlckNhc2UoKS5yZXBsYWNlKCcuJywgJycpXHJcbiAgaWYgKCFpbWFnZUZvcm1hdExpc3QuaW5jbHVkZXMoZmlsZUV4dCkpIHtcclxuICAgIHJldHVybiBmYWxzZVxyXG4gIH1cclxuICBpZiAoIWNvbXByZXNzT3B0aW9ucykge1xyXG4gICAgcmV0dXJuIGZhbHNlXHJcbiAgfVxyXG5cclxuICBjb21wcmVzc09wdGlvbnMgPSBmb3JtYXRPcHRpb25zKGNvbXByZXNzT3B0aW9ucylcclxuICBjb25zdCB7IHF1YWxpdHksIGlzUmVTaXplQnlQZXJjZW50LCByZVNpemVQZXJjZW50LCBpc1JlU2l6ZSwgcmVTaXplSGVpZ2h0LCByZVNpemVXaWR0aCwgaXNSb3RhdGUsIHJvdGF0ZURlZ3JlZSwgaXNDb252ZXJ0LCBjb252ZXJ0Rm9ybWF0IH0gPSBjb21wcmVzc09wdGlvbnNcclxuXHJcbiAgaWYgKHZhbGlkUGFyYW0ocXVhbGl0eSkgJiYgcXVhbGl0eSEgPCAxMDApIHtcclxuICAgIHJldHVybiB0cnVlXHJcbiAgfVxyXG4gIGlmIChpc1JlU2l6ZUJ5UGVyY2VudCAmJiB2YWxpZFBhcmFtKHJlU2l6ZVBlcmNlbnQpKSB7XHJcbiAgICByZXR1cm4gdHJ1ZVxyXG4gIH1cclxuICBpZiAoaXNSZVNpemUgJiYgKCh0eXBlb2YgcmVTaXplSGVpZ2h0ID09PSAnbnVtYmVyJyAmJiByZVNpemVIZWlnaHQgPiAwKSB8fCAodHlwZW9mIHJlU2l6ZVdpZHRoID09PSAnbnVtYmVyJyAmJiByZVNpemVXaWR0aCA+IDApKSkge1xyXG4gICAgcmV0dXJuIHRydWVcclxuICB9XHJcbiAgaWYgKGlzUm90YXRlICYmIHJvdGF0ZURlZ3JlZSkge1xyXG4gICAgcmV0dXJuIHRydWVcclxuICB9XHJcbiAgaWYgKGlzQ29udmVydCkge1xyXG4gICAgY29uc3QgbmV3Rm9ybWF0ID0gY29udmVydEZvcm1hdCB8fCAnanBnJ1xyXG4gICAgcmV0dXJuIGZpbGVFeHQgIT09IG5ld0Zvcm1hdFxyXG4gIH1cclxuICByZXR1cm4gZmFsc2VcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IHJlbW92ZUV4aWYgPSBhc3luYyAoaW1nOiBCdWZmZXIsIGZpbGVFeHQ6IHN0cmluZyk6IFByb21pc2U8QnVmZmVyPiA9PiB7XHJcbiAgZmlsZUV4dCA9IGZpbGVFeHQudG9Mb3dlckNhc2UoKS5yZXBsYWNlKCcuJywgJycpXHJcbiAgaWYgKCFpbWFnZUZvcm1hdExpc3QuaW5jbHVkZXMoZmlsZUV4dCkpIHtcclxuICAgIHJldHVybiBpbWdcclxuICB9XHJcbiAgcmV0dXJuIGF3YWl0IHNoYXJwKGltZykudG9CdWZmZXIoKVxyXG59XHJcbiIsImltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXHJcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSdcclxuaW1wb3J0IHsgaXNVcmwgfSBmcm9tICcuLi8uLi91dGlscy9jb21tb24nXHJcbmltcG9ydCB7IHR5cGUgSVBpY0dvLCB0eXBlIElQbHVnaW4gfSBmcm9tICcuLi8uLi90eXBlcydcclxuXHJcbmNvbnN0IHVwbG9hZDogSVBsdWdpbiA9IHtcclxuICBoYW5kbGU6IChjdHg6IElQaWNHbykgPT4ge1xyXG4gICAgY29uc3QgY21kID0gY3R4LmNtZFxyXG4gICAgY21kLnByb2dyYW1cclxuICAgICAgLmNvbW1hbmQoJ3VwbG9hZCcpXHJcbiAgICAgIC5kZXNjcmlwdGlvbigndXBsb2FkLCBnbyBnbyBnbycpXHJcbiAgICAgIC5hcmd1bWVudHMoJ1tpbnB1dC4uLl0nKVxyXG4gICAgICAuYWxpYXMoJ3UnKVxyXG4gICAgICAuYWN0aW9uKChpbnB1dDogc3RyaW5nW10pID0+IHtcclxuICAgICAgICAoYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgaW5wdXRMaXN0ID0gaW5wdXRcclxuICAgICAgICAgICAgLm1hcCgoaXRlbTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGlzVXJsKGl0ZW0pID8gaXRlbSA6IHBhdGgucmVzb2x2ZShpdGVtKVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuZmlsdGVyKChpdGVtOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCBleGlzdCA9IGZzLmV4aXN0c1N5bmMoaXRlbSkgfHwgaXNVcmwoaXRlbSlcclxuICAgICAgICAgICAgICBpZiAoIWV4aXN0KSB7XHJcbiAgICAgICAgICAgICAgICBjdHgubG9nLndhcm4oYCR7aXRlbX0gZG9lcyBub3QgZXhpc3QuYClcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGV4aXN0XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICBhd2FpdCBjdHgudXBsb2FkKGlucHV0TGlzdClcclxuICAgICAgICB9KSgpLmNhdGNoKChlKSA9PiB7IGN0eC5sb2cuZXJyb3IoZSkgfSlcclxuICAgICAgfSlcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHVwbG9hZFxyXG4iLCJpbXBvcnQgeyB0eXBlIElQaWNHbywgdHlwZSBJUGx1Z2luQ29uZmlnLCB0eXBlIElCdWlsZEluQ29tcHJlc3NPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCB7IHR5cGUgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xyXG5cclxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcclxuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJQnVpbGRJbkNvbXByZXNzT3B0aW9ucz4oJ2J1aWxkSW4uY29tcHJlc3MnKSB8fCB7fVxyXG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xyXG4gICAge1xyXG4gICAgICBuYW1lOiAncXVhbGl0eScsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX1FVQUxJVFknKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucXVhbGl0eSB8fCAxMDBcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdpc0NvbnZlcnQnLFxyXG4gICAgICB0eXBlOiAnY29uZmlybScsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0lTQ09OVkVSVCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5pc0NvbnZlcnQgfHwgZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdjb252ZXJ0Rm9ybWF0JyxcclxuICAgICAgdHlwZTogJ2xpc3QnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19DT05WRVJURk9STUFUJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBjaG9pY2VzOiBbJ2F2aWYnLCAnZHonLCAnZml0cycsICdnaWYnLCAnaGVpZicsICdpbnB1dCcsICdqcGVnJywgJ2pwZycsICdqcDInLCAnanhsJywgJ21hZ2ljaycsICdvcGVuc2xpZGUnLCAncGRmJywgJ3BuZycsICdwcG0nLCAncmF3JywgJ3N2ZycsICd0aWZmJywgJ3RpZicsICd2JywgJ3dlYnAnXSxcclxuICAgICAgZGVmYXVsdDogJ2pwZydcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdpc1JlU2l6ZScsXHJcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkUnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuaXNSZVNpemUgfHwgZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdyZVNpemVXaWR0aCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX1JFU0laRVdJRFRIJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnJlU2l6ZVdpZHRoIHx8IDUwMFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3JlU2l6ZUhlaWdodCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX1JFU0laRUhFSUdIVCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5yZVNpemVIZWlnaHQgfHwgNTAwXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnc2tpcFJlU2l6ZU9mU21hbGxJbWcnLFxyXG4gICAgICB0eXBlOiAnY29uZmlybScsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX1NLSVBSRVNJWkVPRlNNQUxMSU1HJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnNraXBSZVNpemVPZlNtYWxsSW1nIHx8IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnaXNSZVNpemVCeVBlcmNlbnQnLFxyXG4gICAgICB0eXBlOiAnY29uZmlybScsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0lTUkVTSVpFQllQRVJDRU5UJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmlzUmVTaXplQnlQZXJjZW50IHx8IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAncmVTaXplUGVyY2VudCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX1JFU0laRVBFUkNFTlQnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucmVTaXplUGVyY2VudCB8fCA1MFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2lzUm90YXRlJyxcclxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19JU1JPVEFURScpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5pc1JvdGF0ZSB8fCBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3JvdGF0ZURlZ3JlZScsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX1JPVEFURURFR1JFRScpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5yb3RhdGVEZWdyZWUgfHwgOTBcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdpc1JlbW92ZUV4aWYnLFxyXG4gICAgICB0eXBlOiAnY29uZmlybScsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0lTUkVNT1ZFRVhJRicpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5pc1JlbW92ZUV4aWYgfHwgZmFsc2VcclxuICAgIH1cclxuICBdXHJcbiAgcmV0dXJuIGNvbmZpZ1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgY29uZmlnXHJcbn1cclxuIiwiaW1wb3J0IHsgdHlwZSBJUGljR28sIHR5cGUgSVBsdWdpbkNvbmZpZywgdHlwZSBJQnVpbGRJbldhdGVyTWFya09wdGlvbnMgfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IHsgdHlwZSBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXHJcblxyXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xyXG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElCdWlsZEluV2F0ZXJNYXJrT3B0aW9ucz4oJ2J1aWxkSW4ud2F0ZXJtYXJrJykgfHwge31cclxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2lzQWRkV2F0ZXJtYXJrJyxcclxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfSVNBRERXQVRFUk1BUksnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuaXNBZGRXYXRlcm1hcmsgfHwgZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd3YXRlcm1hcmtUeXBlJyxcclxuICAgICAgdHlwZTogJ2xpc3QnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVFlQRScpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgY2hvaWNlczogWyd0ZXh0JywgJ2ltYWdlJ10sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcud2F0ZXJtYXJrVHlwZSB8fCAndGV4dCdcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdpc0Z1bGxTY3JlZW5XYXRlcm1hcmsnLFxyXG4gICAgICB0eXBlOiAnY29uZmlybScsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19JU0ZVTExTQ1JFRU5XQVRFUk1BUksnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuaXNGdWxsU2NyZWVuV2F0ZXJtYXJrIHx8IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnd2F0ZXJtYXJrRGVncmVlJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0RFR1JFRScpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy53YXRlcm1hcmtEZWdyZWUgfHwgMFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3dhdGVybWFya1RleHQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVEVYVCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy53YXRlcm1hcmtUZXh0IHx8ICcnXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnd2F0ZXJtYXJrRm9udFBhdGgnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVEVYVEZPTlRQQVRIJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLndhdGVybWFya0ZvbnRQYXRoIHx8ICcnXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnd2F0ZXJtYXJrU2NhbGVSYXRpbycsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktGT05UUkFUSU8nKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcud2F0ZXJtYXJrU2NhbGVSYXRpbyB8fCAwLjE1XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnd2F0ZXJtYXJrQ29sb3InLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVENPTE9SJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLndhdGVybWFya0NvbG9yIHx8ICdyZ2JhKDIwNCwgMjA0LCAyMDQsIDAuNDUpJ1xyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3dhdGVybWFya0ltYWdlUGF0aCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktJTUFHRVBBVEgnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcud2F0ZXJtYXJrSW1hZ2VQYXRoIHx8ICcnXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnd2F0ZXJtYXJrUG9zaXRpb24nLFxyXG4gICAgICB0eXBlOiAnbGlzdCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktQT1NJVElPTicpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgY2hvaWNlczogWydub3J0aCcsICdub3J0aGVhc3QnLCAnc291dGhlYXN0JywgJ3NvdXRoJywgJ3NvdXRod2VzdCcsICdub3J0aHdlc3QnLCAnd2VzdCcsICdlYXN0JywgJ2NlbnRlcicsICdjZW50cmUnXSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy53YXRlcm1hcmtQb3NpdGlvbiB8fCAnc291dGhlYXN0J1xyXG4gICAgfVxyXG4gIF1cclxuICByZXR1cm4gY29uZmlnXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICBjb25maWdcclxufVxyXG4iLCJpbXBvcnQgeyB0eXBlIElQaWNHbywgdHlwZSBJUGx1Z2luQ29uZmlnIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCB7IHR5cGUgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xyXG5cclxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcclxuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxhbnk+KCdidWlsZEluLnJlbmFtZScpIHx8IHt9XHJcbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdmb3JtYXQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9SRU5BTUVfRk9STUFUJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmZvcm1hdCB8fCAne2ZpbGVuYW1lfSdcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdlbmFibGUnLFxyXG4gICAgICB0eXBlOiAnY29uZmlybScsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1JFTkFNRV9FTkFCTEUnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuZW5hYmxlIHx8IGZhbHNlXHJcbiAgICB9XHJcbiAgXVxyXG4gIHJldHVybiBjb25maWdcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIGNvbmZpZ1xyXG59XHJcbiIsImltcG9ydCB7IHR5cGUgSVBpY0dvLCB0eXBlIElQbHVnaW5Db25maWcsIHR5cGUgSVN0cmluZ0tleU1hcCB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5pbXBvcnQgY29tcHJlc3MgZnJvbSAnLi4vYmVmb3JldHJhbnNmb3JtZXIvY29tcHJlc3MnXHJcbmltcG9ydCB3YXRlcm1hcmsgZnJvbSAnLi4vYmVmb3JldHJhbnNmb3JtZXIvd2F0ZXJtYXJrJ1xyXG5pbXBvcnQgcmVuYW1lIGZyb20gJy4uL2JlZm9yZXVwbG9hZC9idWlsZEluUmVuYW1lJ1xyXG5cclxuLy8gaGFuZGxlIG1vZHVsZXMgY29uZmlnIC0+IHNhdmUgdG8gcGljZ28gY29uZmlnIGZpbGVcclxuY29uc3QgaGFuZGxlQ29uZmlnID0gYXN5bmMgKGN0eDogSVBpY0dvLCBwcm9tcHRzOiBJUGx1Z2luQ29uZmlnW10sIG1vZHVsZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+ID0+IHtcclxuICBjb25zdCBhbnN3ZXIgPSBhd2FpdCBjdHguY21kLmlucXVpcmVyLnByb21wdChwcm9tcHRzKVxyXG4gIGNvbnN0IGNvbmZpZ05hbWUgPSBtb2R1bGUgPT09ICd1cGxvYWRlcidcclxuICAgID8gYHBpY0JlZC4ke25hbWV9YFxyXG4gICAgOiBtb2R1bGUgPT09ICd0cmFuc2Zvcm1lcidcclxuICAgICAgPyBgdHJhbnNmb3JtZXIuJHtuYW1lfWBcclxuICAgICAgOiBtb2R1bGUgPT09ICdidWlsZGluJ1xyXG4gICAgICAgID8gYGJ1aWxkSW4uJHtuYW1lfWBcclxuICAgICAgICA6IG5hbWVcclxuICBjdHguc2F2ZUNvbmZpZyh7XHJcbiAgICBbY29uZmlnTmFtZV06IGFuc3dlclxyXG4gIH0pXHJcbiAgaWYgKG1vZHVsZSA9PT0gJ3VwbG9hZGVyJykge1xyXG4gICAgY3R4LnNhdmVDb25maWcoe1xyXG4gICAgICAncGljQmVkLmN1cnJlbnQnOiBuYW1lLFxyXG4gICAgICAncGljQmVkLnVwbG9hZGVyJzogbmFtZVxyXG4gICAgfSlcclxuICB9IGVsc2UgaWYgKG1vZHVsZSA9PT0gJ3RyYW5zZm9ybWVyJykge1xyXG4gICAgY3R4LnNhdmVDb25maWcoe1xyXG4gICAgICAncGljQmVkLnRyYW5zZm9ybWVyJzogbmFtZVxyXG4gICAgfSlcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IHNldHRpbmcgPSB7XHJcbiAgaGFuZGxlOiAoY3R4OiBJUGljR28pID0+IHtcclxuICAgIGNvbnN0IGNtZCA9IGN0eC5jbWRcclxuICAgIGNtZC5wcm9ncmFtXHJcbiAgICAgIC5jb21tYW5kKCdzZXQnKVxyXG4gICAgICAuYWxpYXMoJ2NvbmZpZycpXHJcbiAgICAgIC5hcmd1bWVudHMoJzxtb2R1bGU+IFtuYW1lXScpXHJcbiAgICAgIC5kZXNjcmlwdGlvbignY29uZmlndXJlIGNvbmZpZyBvZiBwaWNnbyBtb2R1bGVzLCB1cGxvYWRlcnx0cmFuc2Zvcm1lcnxwbHVnaW58YnVpbGRpbicpXHJcbiAgICAgIC5hY3Rpb24oKG1vZHVsZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAoYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgLy8gLy8gbG9hZCB0aGlyZC1wYXJ0eSBwbHVnaW5zXHJcbiAgICAgICAgICAgIC8vIGF3YWl0IGN0eC5wbHVnaW5Mb2FkZXIubG9hZCgpXHJcbiAgICAgICAgICAgIC8vIGlmIGEgbW9kdWxlIGlzIHNwZWNpZmljLCB0aGVuIGp1c3Qgc2V0IHRoaXMgb3B0aW9uIGluIGNvbmZpZ1xyXG4gICAgICAgICAgICBzd2l0Y2ggKG1vZHVsZSkge1xyXG4gICAgICAgICAgICAgIGNhc2UgJ2J1aWxkaW4nOlxyXG4gICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdjb21wcmVzcycpIHtcclxuICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlQ29uZmlnKGN0eCwgY29tcHJlc3MuY29uZmlnKGN0eCksIG1vZHVsZSwgbmFtZSlcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ3dhdGVybWFyaycpIHtcclxuICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlQ29uZmlnKGN0eCwgd2F0ZXJtYXJrLmNvbmZpZyhjdHgpLCBtb2R1bGUsIG5hbWUpXHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICdyZW5hbWUnKSB7XHJcbiAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZUNvbmZpZyhjdHgsIHJlbmFtZS5jb25maWcoY3R4KSwgbW9kdWxlLCBuYW1lKVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgcHJvbXB0cyA9IFtcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnbGlzdCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnYnVpbGRpbicsXHJcbiAgICAgICAgICAgICAgICAgICAgICBjaG9pY2VzOiBbJ2NvbXByZXNzJywgJ3dhdGVybWFyaycsICdyZW5hbWUnXSxcclxuICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdDaG9vc2UgYSBidWlsZGluIG1vZHVsZSdcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgICAgICAgY29uc3QgYW5zd2VyID0gYXdhaXQgY3R4LmNtZC5pbnF1aXJlci5wcm9tcHQ8SVN0cmluZ0tleU1hcDxhbnk+Pihwcm9tcHRzKVxyXG4gICAgICAgICAgICAgICAgICBpZiAoYW5zd2VyLmJ1aWxkaW4gPT09ICdjb21wcmVzcycpIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVDb25maWcoY3R4LCBjb21wcmVzcy5jb25maWcoY3R4KSwgbW9kdWxlLCBhbnN3ZXIuYnVpbGRpbilcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhbnN3ZXIuYnVpbGRpbiA9PT0gJ3dhdGVybWFyaycpIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVDb25maWcoY3R4LCB3YXRlcm1hcmsuY29uZmlnKGN0eCksIG1vZHVsZSwgYW5zd2VyLmJ1aWxkaW4pXHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYW5zd2VyLmJ1aWxkaW4gPT09ICdyZW5hbWUnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlQ29uZmlnKGN0eCwgcmVuYW1lLmNvbmZpZyhjdHgpLCBtb2R1bGUsIGFuc3dlci5idWlsZGluKVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgIGNhc2UgJ3VwbG9hZGVyJzpcclxuICAgICAgICAgICAgICBjYXNlICd0cmFuc2Zvcm1lcic6XHJcbiAgICAgICAgICAgICAgICBpZiAobmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gY3R4LmhlbHBlclttb2R1bGVdLmdldChuYW1lKVxyXG4gICAgICAgICAgICAgICAgICBpZiAoIWl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICBjdHgubG9nLmVycm9yKGBObyAke21vZHVsZX0gbmFtZWQgJHtuYW1lfWApOyByZXR1cm5cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBpZiAoaXRlbS5jb25maWcpIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVDb25maWcoY3R4LCBpdGVtLmNvbmZpZyhjdHgpLCBtb2R1bGUsIG5hbWUpXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHByb21wdHMgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2xpc3QnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZTogYCR7bW9kdWxlfWAsXHJcbiAgICAgICAgICAgICAgICAgICAgICBjaG9pY2VzOiBjdHguaGVscGVyW21vZHVsZV0uZ2V0SWRMaXN0KCksXHJcbiAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgQ2hvb3NlIGEobikgJHttb2R1bGV9YFxyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gZGVmYXVsdDogY3R4LmdldENvbmZpZygncGljQmVkLnVwbG9hZGVyJykgfHwgY3R4LmdldENvbmZpZygncGljQmVkLmN1cnJlbnQnKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICAgICAgICBjb25zdCBhbnN3ZXIgPSBhd2FpdCBjdHguY21kLmlucXVpcmVyLnByb21wdDxJU3RyaW5nS2V5TWFwPGFueT4+KHByb21wdHMpXHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBjdHguaGVscGVyW21vZHVsZV0uZ2V0KGFuc3dlclttb2R1bGVdKVxyXG4gICAgICAgICAgICAgICAgICBpZiAoaXRlbT8uY29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlQ29uZmlnKGN0eCwgaXRlbS5jb25maWcoY3R4KSwgbW9kdWxlLCBhbnN3ZXJbbW9kdWxlXSlcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWtcclxuICAgICAgICAgICAgICBjYXNlICdwbHVnaW4nOlxyXG4gICAgICAgICAgICAgICAgaWYgKG5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKCFuYW1lLmluY2x1ZGVzKCdwaWNnby1wbHVnaW4tJykpIHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lID0gYHBpY2dvLXBsdWdpbi0ke25hbWV9YFxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhjdHguZ2V0Q29uZmlnKCdwaWNnb1BsdWdpbnMnKSkuaW5jbHVkZXMobmFtZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY3R4LnBsdWdpbkxvYWRlci5nZXRQbHVnaW4obmFtZSk/LmNvbmZpZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlQ29uZmlnKGN0eCwgY3R4LnBsdWdpbkxvYWRlci5nZXRQbHVnaW4obmFtZSkhLmNvbmZpZyEoY3R4KSwgJ3BsdWdpbicsIG5hbWUpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGN0eC5sb2cuZXJyb3IoYE5vIHBsdWdpbiBuYW1lZCAke25hbWV9YCk7IHJldHVyblxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBwcm9tcHRzID0gW1xyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdsaXN0JyxcclxuICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdwbHVnaW4nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgY2hvaWNlczogY3R4LnBsdWdpbkxvYWRlci5nZXRGdWxsTGlzdCgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ0Nob29zZSBhIHBsdWdpbidcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgICAgICAgY29uc3QgYW5zd2VyID0gYXdhaXQgY3R4LmNtZC5pbnF1aXJlci5wcm9tcHQ8YW55Pihwcm9tcHRzKVxyXG4gICAgICAgICAgICAgICAgICBpZiAoY3R4LnBsdWdpbkxvYWRlci5nZXRQbHVnaW4oYW5zd2VyLnBsdWdpbik/LmNvbmZpZykge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZUNvbmZpZyhjdHgsIGN0eC5wbHVnaW5Mb2FkZXIuZ2V0UGx1Z2luKGFuc3dlci5wbHVnaW4pIS5jb25maWchKGN0eCksICdwbHVnaW4nLCBhbnN3ZXIucGx1Z2luKVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICBjdHgubG9nLndhcm4oYE5vIG1vZHVsZSBuYW1lZCAke21vZHVsZX1gKVxyXG4gICAgICAgICAgICAgICAgY3R4LmxvZy53YXJuKCdBdmFpbGFibGUgbW9kdWxlcyBhcmUgdXBsb2FkZXJ8dHJhbnNmb3JtZXJ8cGx1Z2lufGJ1aWxkaW4nKTsgcmV0dXJuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY3R4LmxvZy5zdWNjZXNzKCdDb25maWd1cmUgY29uZmlnIHN1Y2Nlc3NmdWxseSEnKVxyXG4gICAgICAgICAgICBpZiAobW9kdWxlID09PSAncGx1Z2luJykge1xyXG4gICAgICAgICAgICAgIGN0eC5sb2cuaW5mbygnSWYgeW91IHdhbnQgdG8gdXNlIHRoaXMgY29uZmlnLCBwbGVhc2UgcnVuIFxcJ3BpY2dvIHVzZSBwbHVnaW5zXFwnJylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgICAgIGN0eC5sb2cuZXJyb3IoZSlcclxuICAgICAgICAgICAgaWYgKHByb2Nlc3MuYXJndi5pbmNsdWRlcygnLS1kZWJ1ZycpKSB7XHJcbiAgICAgICAgICAgICAgdGhyb3cgZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSkoKS5jYXRjaCgoZSkgPT4geyBjdHgubG9nLmVycm9yKGUpIH0pXHJcbiAgICAgIH0pXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBzZXR0aW5nXHJcbiIsImltcG9ydCB7IHR5cGUgSVBpY0dvLCB0eXBlIElQbHVnaW4sIHR5cGUgVW5kZWZpbmFibGUsIHR5cGUgSUNMSUNvbmZpZ3MsIHR5cGUgSVN0cmluZ0tleU1hcCB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5cclxuY29uc3QgdXNlOiBJUGx1Z2luID0ge1xyXG4gIGhhbmRsZTogYXN5bmMgKGN0eDogSVBpY0dvKSA9PiB7XHJcbiAgICBjb25zdCBjbWQgPSBjdHguY21kXHJcbiAgICBjbWQucHJvZ3JhbVxyXG4gICAgICAuY29tbWFuZCgndXNlJylcclxuICAgICAgLmFyZ3VtZW50cygnW21vZHVsZV0nKVxyXG4gICAgICAuZGVzY3JpcHRpb24oJ3VzZSBtb2R1bGVzIG9mIHBpY2dvJylcclxuICAgICAgLmFjdGlvbigobW9kdWxlOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAoYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgLy8gLy8gbG9hZCB0aGlyZC1wYXJ0eSBwbHVnaW5zXHJcbiAgICAgICAgICAgIC8vIGF3YWl0IGN0eC5wbHVnaW5Mb2FkZXIubG9hZCgpXHJcbiAgICAgICAgICAgIGxldCBwcm9tcHRzOiBhbnlbXSA9IFtdXHJcbiAgICAgICAgICAgIGNvbnN0IGNvbmZpZzogSUNMSUNvbmZpZ3MgPSB7XHJcbiAgICAgICAgICAgICAgdXBsb2FkZXI6IHtcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdsaXN0JyxcclxuICAgICAgICAgICAgICAgIG5hbWU6ICd1cGxvYWRlcicsXHJcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnVXNlIGFuIHVwbG9hZGVyJyxcclxuICAgICAgICAgICAgICAgIGNob2ljZXM6IGN0eC5oZWxwZXIudXBsb2FkZXIuZ2V0SWRMaXN0KCksXHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiBjdHguZ2V0Q29uZmlnKCdwaWNCZWQudXBsb2FkZXInKSB8fCBjdHguZ2V0Q29uZmlnKCdwaWNCZWQuY3VycmVudCcpIHx8ICdzbW1zJ1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgdHJhbnNmb3JtZXI6IHtcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdsaXN0JyxcclxuICAgICAgICAgICAgICAgIG5hbWU6ICd0cmFuc2Zvcm1lcicsXHJcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnVXNlIGEgdHJhbnNmb3JtZXInLFxyXG4gICAgICAgICAgICAgICAgY2hvaWNlczogY3R4LmhlbHBlci50cmFuc2Zvcm1lci5nZXRJZExpc3QoKSxcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8c3RyaW5nPj4oJ3BpY0JlZC50cmFuc2Zvcm1lcicpIHx8ICdwYXRoJ1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgcGx1Z2luczoge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogJ2NoZWNrYm94JyxcclxuICAgICAgICAgICAgICAgIG5hbWU6ICdwbHVnaW5zJyxcclxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdVc2UgcGx1Z2lucycsXHJcbiAgICAgICAgICAgICAgICBjaG9pY2VzOiBjdHgucGx1Z2luTG9hZGVyLmdldEZ1bGxMaXN0KCksXHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiBPYmplY3Qua2V5cyhjdHguZ2V0Q29uZmlnKCdwaWNnb1BsdWdpbnMnKSkuZmlsdGVyKChpdGVtOiBzdHJpbmcpID0+IGN0eC5nZXRDb25maWcoYHBpY2dvUGx1Z2lucy4ke2l0ZW19YCkpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIGlmIGFuIG9wdGlvbiBpcyBzcGVjaWZpYywgdGhlbiBqdXN0IHNldCB0aGlzIG9wdGlvbiBpbiBjb25maWdcclxuICAgICAgICAgICAgaWYgKG1vZHVsZSkge1xyXG4gICAgICAgICAgICAgIGlmIChjb25maWdbbW9kdWxlXSkge1xyXG4gICAgICAgICAgICAgICAgcHJvbXB0cy5wdXNoKGNvbmZpZ1ttb2R1bGVdKVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjdHgubG9nLndhcm4oYE5vIG1vZHVsZSBuYW1lZCAke21vZHVsZX1gKVxyXG4gICAgICAgICAgICAgICAgY3R4LmxvZy53YXJuKCdBdmFpbGFibGUgbW9kdWxlcyBhcmUgdXBsb2FkZXJ8dHJhbnNmb3JtZXJ8cGx1Z2lucycpOyByZXR1cm5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgcHJvbXB0cyA9IE9iamVjdC5rZXlzKGNvbmZpZykubWFwKChpdGVtOiBzdHJpbmcpID0+IGNvbmZpZ1tpdGVtXSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBhbnN3ZXIgPSBhd2FpdCBjbWQuaW5xdWlyZXIucHJvbXB0PGFueT4ocHJvbXB0cylcclxuXHJcbiAgICAgICAgICAgIC8vIGhhbmRsZSBmb3IgcGx1Z2lucyBvcHRpb24gZnJvbSBBcnJheSB0byBvYmplY3RcclxuICAgICAgICAgICAgaWYgKGFuc3dlci5wbHVnaW5zKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgcGx1Z2lucyA9IGN0eC5nZXRDb25maWc8SVN0cmluZ0tleU1hcDxib29sZWFuPj4oJ3BpY2dvUGx1Z2lucycpXHJcbiAgICAgICAgICAgICAgT2JqZWN0LmtleXMocGx1Z2lucykuZm9yRWFjaCgoaXRlbTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYW5zd2VyLnBsdWdpbnMuaW5jbHVkZXMoaXRlbSkpIHtcclxuICAgICAgICAgICAgICAgICAgcGx1Z2luc1tpdGVtXSA9IHRydWVcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIHBsdWdpbnNbaXRlbV0gPSBmYWxzZVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgLy8gc2F2ZSBjb25maWcgZm9yIHBsdWdpbnNcclxuICAgICAgICAgICAgICBjdHguc2F2ZUNvbmZpZyh7XHJcbiAgICAgICAgICAgICAgICBwaWNnb1BsdWdpbnM6IHBsdWdpbnNcclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIHNhdmUgY29uZmlnIGZvciB1cGxvYWRlciAmIHRyYW5zZm9ybWVyXHJcbiAgICAgICAgICAgIGN0eC5zYXZlQ29uZmlnKHtcclxuICAgICAgICAgICAgICAncGljQmVkLmN1cnJlbnQnOiBhbnN3ZXIudXBsb2FkZXIgfHwgY3R4LmdldENvbmZpZzxzdHJpbmc+KCdwaWNCZWQuY3VycmVudCcpLFxyXG4gICAgICAgICAgICAgICdwaWNCZWQudXBsb2FkZXInOiBhbnN3ZXIudXBsb2FkZXIgfHwgY3R4LmdldENvbmZpZzxzdHJpbmc+KCdwaWNCZWQuY3VycmVudCcpLFxyXG4gICAgICAgICAgICAgICdwaWNCZWQudHJhbnNmb3JtZXInOiBhbnN3ZXIudHJhbnNmb3JtZXIgfHwgJ3BhdGgnXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGN0eC5sb2cuc3VjY2VzcygnQ29uZmlndXJlIGNvbmZpZyBzdWNjZXNzZnVsbHkhJylcclxuICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgICAgICBjdHgubG9nLmVycm9yKGUpXHJcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmFyZ3YuaW5jbHVkZXMoJy0tZGVidWcnKSkge1xyXG4gICAgICAgICAgICAgIHRocm93IGVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pKCkuY2F0Y2goKGUpID0+IHsgY3R4LmxvZy5lcnJvcihlKSB9KVxyXG4gICAgICB9KVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgdXNlXHJcbiIsImltcG9ydCB7IHR5cGUgSVBpY0dvLCB0eXBlIElQbHVnaW4gfSBmcm9tICcuLi8uLi90eXBlcydcclxuXHJcbmNvbnN0IHByb3h5OiBJUGx1Z2luID0ge1xyXG4gIGhhbmRsZTogKGN0eDogSVBpY0dvKSA9PiB7XHJcbiAgICBjb25zdCBjbWQgPSBjdHguY21kXHJcbiAgICBjbWQucHJvZ3JhbVxyXG4gICAgICAub3B0aW9uKCctcCwgLS1wcm94eSA8dXJsPicsICdzZXQgcHJveHkgZm9yIHVwbG9hZGluZycsIChwcm94eTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgY3R4LnNldENvbmZpZyh7XHJcbiAgICAgICAgICAncGljQmVkLnByb3h5JzogcHJveHlcclxuICAgICAgICB9KVxyXG4gICAgICB9KVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgcHJveHlcclxuIiwiaW1wb3J0IG1hdGNoIGZyb20gJ21pbmltYXRjaCdcclxuaW1wb3J0IHsgdHlwZSBJUGljR28sIHR5cGUgSU9wdGlvbnMsIHR5cGUgSUZpbGVUcmVlIH0gZnJvbSAnLi4vdHlwZXMnXHJcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSdcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcclxuaW1wb3J0IGdsb2JieSBmcm9tICdnbG9iYnknXHJcbmltcG9ydCBlanMgZnJvbSAnZWpzJ1xyXG5cclxuLyoqXHJcbiAqIEdlbmVyYXRlIHRlbXBsYXRlIGZpbGVzIHRvIGRlc3RpbmF0aW9uIGZpbGVzLlxyXG4gKiBAcGFyYW0ge1BpY0dvfSBjdHhcclxuICogQHBhcmFtIHtJT3B0aW9uc30gb3B0aW9uc1xyXG4gKi9cclxuY29uc3QgZ2VuZXJhdGUgPSBhc3luYyAoY3R4OiBJUGljR28sIG9wdGlvbnM6IElPcHRpb25zKTogUHJvbWlzZTxhbnk+ID0+IHtcclxuICB0cnkge1xyXG4gICAgY29uc3Qgb3B0cyA9IGdldE9wdGlvbnMob3B0aW9ucy50bXApXHJcbiAgICBjb25zdCBzb3VyY2UgPSBwYXRoLmpvaW4ob3B0aW9ucy50bXAsICd0ZW1wbGF0ZScpXHJcbiAgICBsZXQgYW5zd2VycyA9IHt9XHJcbiAgICBpZiAob3B0cy5wcm9tcHRzICYmIG9wdHMucHJvbXB0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGFuc3dlcnMgPSBhd2FpdCBjdHguY21kLmlucXVpcmVyLnByb21wdChvcHRzLnByb21wdHMpXHJcbiAgICB9XHJcbiAgICBsZXQgX2ZpbGVzOiBzdHJpbmdbXSA9IGF3YWl0IGdsb2JieShbJyoqLyonXSwgeyBjd2Q6IHNvdXJjZSwgZG90OiB0cnVlIH0pIC8vIGdldCBmaWxlcycgbmFtZSBhcnJheVxyXG4gICAgX2ZpbGVzID0gX2ZpbGVzLmZpbHRlcigoaXRlbTogc3RyaW5nKSA9PiB7XHJcbiAgICAgIGxldCBnbG9iID0gJydcclxuICAgICAgT2JqZWN0LmtleXMob3B0cy5maWx0ZXJzKS5mb3JFYWNoKChrZXk6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGlmIChtYXRjaChpdGVtLCBrZXksIHsgZG90OiB0cnVlIH0pKSB7XHJcbiAgICAgICAgICBnbG9iID0gaXRlbVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgaWYgKGdsb2IpIHsgLy8gZmluZCBhIGZpbHRlciBleHByZXNzaW9uXHJcbiAgICAgICAgcmV0dXJuIGZpbHRlcnMoY3R4LCBvcHRzLmZpbHRlcnNbZ2xvYl0sIGFuc3dlcnMpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWVcclxuICAgICAgfVxyXG4gICAgfSlcclxuICAgIGlmIChfZmlsZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIGN0eC5sb2cud2FybignVGVtcGxhdGUgZmlsZXMgbm90IGZvdW5kIScpOyByZXR1cm5cclxuICAgIH1cclxuICAgIGNvbnN0IGZpbGVzID0gcmVuZGVyKF9maWxlcywgc291cmNlLCBhbnN3ZXJzKVxyXG4gICAgd3JpdGVGaWxlVHJlZShvcHRpb25zLmRlc3QsIGZpbGVzKVxyXG4gICAgaWYgKHR5cGVvZiBvcHRzLmNvbXBsZXRlID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIG9wdHMuY29tcGxldGUoeyBhbnN3ZXJzLCBvcHRpb25zLCBmaWxlczogX2ZpbGVzLCBjdHggfSlcclxuICAgIH1cclxuICAgIGlmIChvcHRzLmNvbXBsZXRlTWVzc2FnZSkge1xyXG4gICAgICBjdHgubG9nLnN1Y2Nlc3Mob3B0cy5jb21wbGV0ZU1lc3NhZ2UpXHJcbiAgICB9XHJcbiAgICBjdHgubG9nLnN1Y2Nlc3MoJ0RvbmUhJylcclxuICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgIGN0eC5sb2cuZXJyb3IoZSlcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXR1cm4gdGhlIGZpbHRlcnMnIHJlc3VsdFxyXG4gKiBAcGFyYW0gY3R4IFBpY0dvXHJcbiAqIEBwYXJhbSBleHAgY29uZGl0aW9uIGV4cHJlc3Npb25cclxuICogQHBhcmFtIGRhdGEgb3B0aW9ucyBkYXRhXHJcbiAqL1xyXG5jb25zdCBmaWx0ZXJzID0gKGN0eDogSVBpY0dvLCBleHA6IGFueSwgZGF0YTogYW55KTogYm9vbGVhbiA9PiB7XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC1wbHVzLW9wZXJhbmRzLCBuby1uZXctZnVuYywgQHR5cGVzY3JpcHQtZXNsaW50L25vLWltcGxpZWQtZXZhbFxyXG4gIGNvbnN0IGZuID0gbmV3IEZ1bmN0aW9uKCdkYXRhJywgJ3dpdGggKGRhdGEpIHsgcmV0dXJuICcgKyBleHAgKyAnfScpXHJcbiAgdHJ5IHtcclxuICAgIHJldHVybiBmbihkYXRhKVxyXG4gIH0gY2F0Y2ggKGUpIHtcclxuICAgIGN0eC5sb2cuZXJyb3IoYEVycm9yIHdoZW4gZXZhbHVhdGluZyBmaWx0ZXIgY29uZGl0aW9uOiAke0pTT04uc3RyaW5naWZ5KGV4cCl9YClcclxuICAgIHJldHVybiBmYWxzZVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEdldCB0ZW1wbGF0ZSBvcHRpb25zXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZW1wbGF0ZVBhdGhcclxuICovXHJcbmNvbnN0IGdldE9wdGlvbnMgPSAodGVtcGxhdGVQYXRoOiBzdHJpbmcpOiBhbnkgPT4ge1xyXG4gIGNvbnN0IG9wdGlvbnNQYXRoID0gcGF0aC5qb2luKHRlbXBsYXRlUGF0aCwgJ2luZGV4LmpzJylcclxuICBpZiAoZnMuZXhpc3RzU3luYyhvcHRpb25zUGF0aCkpIHtcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzXHJcbiAgICBjb25zdCBvcHRpb25zID0gcmVxdWlyZShvcHRpb25zUGF0aClcclxuICAgIHJldHVybiBvcHRpb25zXHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiB7fVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIFJlbmRlciBmaWxlcyB0byBhIHZpcnR1YWwgdHJlZSBvYmplY3RcclxuICogQHBhcmFtIHthcnJheX0gZmlsZXNcclxuICovXHJcbmNvbnN0IHJlbmRlciA9IChmaWxlczogc3RyaW5nW10sIHNvdXJjZTogc3RyaW5nLCBvcHRpb25zOiBhbnkpOiBhbnkgPT4ge1xyXG4gIGNvbnN0IGZpbGVUcmVlOiBJRmlsZVRyZWUgPSB7fVxyXG4gIGZpbGVzLmZvckVhY2goKGZpbGVQYXRoOiBzdHJpbmcpOiB2b2lkID0+IHtcclxuICAgIGNvbnN0IGZpbGUgPSBmcy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKHNvdXJjZSwgZmlsZVBhdGgpLCAndXRmOCcpXHJcbiAgICBjb25zdCBjb250ZW50ID0gZWpzLnJlbmRlcihmaWxlLCBvcHRpb25zKVxyXG4gICAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihjb250ZW50KSB8fCAvW15cXHNdLy50ZXN0KGNvbnRlbnQpKSB7XHJcbiAgICAgIGZpbGVUcmVlW2ZpbGVQYXRoXSA9IGNvbnRlbnRcclxuICAgIH1cclxuICB9KVxyXG4gIHJldHVybiBmaWxlVHJlZVxyXG59XHJcblxyXG4vKipcclxuICogV3JpdGUgcmVuZGVyZWQgZmlsZXMnIGNvbnRlbnQgdG8gcmVhbCBmaWxlXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBkaXJcclxuICogQHBhcmFtIHtvYmplY3R9IGZpbGVzXHJcbiAqL1xyXG5jb25zdCB3cml0ZUZpbGVUcmVlID0gKGRpcjogc3RyaW5nLCBmaWxlczogYW55KTogdm9pZCA9PiB7XHJcbiAgT2JqZWN0LmtleXMoZmlsZXMpLmZvckVhY2goKG5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4oZGlyLCBuYW1lKVxyXG4gICAgZnMuZW5zdXJlRGlyU3luYyhwYXRoLmRpcm5hbWUoZmlsZVBhdGgpKVxyXG4gICAgZnMud3JpdGVGaWxlU3luYyhmaWxlUGF0aCwgZmlsZXNbbmFtZV0pXHJcbiAgfSlcclxufVxyXG5cclxuZXhwb3J0IHtcclxuICBmaWx0ZXJzLFxyXG4gIGdlbmVyYXRlLFxyXG4gIHJlbmRlcixcclxuICB3cml0ZUZpbGVUcmVlXHJcbn1cclxuIiwiaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJ1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xyXG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnXHJcbmltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5pdFV0aWxzJ1xyXG5pbXBvcnQgeyBob21lZGlyIH0gZnJvbSAnb3MnXHJcbmltcG9ydCBkb3dubG9hZCBmcm9tICdkb3dubG9hZC1naXQtcmVwbydcclxuaW1wb3J0IHsgdHlwZSBJT3B0aW9ucywgdHlwZSBJUGx1Z2luLCB0eXBlIElQaWNHbyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5pbXBvcnQgcm0gZnJvbSAncmltcmFmJ1xyXG5cclxuY29uc3QgcnVuID0gKGN0eDogSVBpY0dvLCBvcHRpb25zOiBJT3B0aW9ucyk6IHZvaWQgPT4ge1xyXG4gIC8vIGNvbnN0IG5hbWUgPSBvcHRpb25zLmluUGxhY2UgPyBwYXRoLnJlbGF0aXZlKCcuLi8nLCBwcm9jZXNzLmN3ZCgpKSA6IG9wdGlvbnMucHJvamVjdFxyXG4gIGlmIChvcHRpb25zLm9mZmxpbmUpIHsgLy8gb2ZmbGluZSBtb2RlXHJcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhvcHRpb25zLnRlbXBsYXRlKSkge1xyXG4gICAgICBnZW5lcmF0ZShjdHgsIG9wdGlvbnMpLmNhdGNoKChlKSA9PiB7IGN0eC5sb2cuZXJyb3IoZSkgfSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGN0eC5sb2cuZXJyb3IoYExvY2FsIHRlbXBsYXRlICR7b3B0aW9ucy50ZW1wbGF0ZX0gbm90IGZvdW5kYClcclxuICAgIH1cclxuICB9IGVsc2UgeyAvLyBvbmxpbmUgbW9kZVxyXG4gICAgb3B0aW9ucy50ZW1wbGF0ZSA9ICFvcHRpb25zLmhhc1NsYXNoXHJcbiAgICAgID8gJ1BpY0dvL3BpY2dvLXRlbXBsYXRlLScgKyBvcHRpb25zLnRlbXBsYXRlIC8vIG9mZmljaWFsIHRlbXBsYXRlXHJcbiAgICAgIDogb3B0aW9ucy50ZW1wbGF0ZVxyXG4gICAgZG93bmxvYWRBbmRHZW5lcmF0ZShjdHgsIG9wdGlvbnMpXHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogZG93bmxvYWQgdGVtcGxhdGUgJiBnZW5lcmF0ZVxyXG4gKiBAcGFyYW0geyBQaWNHbyB9IGN0eFxyXG4gKiBAcGFyYW0geyBJT3B0aW9ucyB9IG9wdGlvbnNcclxuICovXHJcbmNvbnN0IGRvd25sb2FkQW5kR2VuZXJhdGUgPSAoY3R4OiBJUGljR28sIG9wdGlvbnM6IElPcHRpb25zKTogdm9pZCA9PiB7XHJcbiAgaWYgKGZzLmV4aXN0c1N5bmMob3B0aW9ucy50bXApKSB7XHJcbiAgICBybS5zeW5jKG9wdGlvbnMudG1wKVxyXG4gIH1cclxuICBjdHgubG9nLmluZm8oJ1RlbXBsYXRlIGZpbGVzIGFyZSBkb3dubG9hZGluZy4uLicpXHJcbiAgZG93bmxvYWQob3B0aW9ucy50ZW1wbGF0ZSwgb3B0aW9ucy50bXAsIHsgY2xvbmU6IG9wdGlvbnMuY2xvbmUgfSwgKGVycjogRXJyb3IpID0+IHtcclxuICAgIGlmIChlcnIpIHtcclxuICAgICAgY3R4LmxvZy5lcnJvcihlcnIpOyByZXR1cm5cclxuICAgIH1cclxuICAgIGN0eC5sb2cuc3VjY2VzcygnVGVtcGxhdGUgZmlsZXMgYXJlIGRvd25sb2FkZWQhJylcclxuICAgIGdlbmVyYXRlKGN0eCwgb3B0aW9ucykuY2F0Y2goKGUpID0+IHsgY3R4LmxvZy5lcnJvcihlKSB9KVxyXG4gIH0pXHJcbn1cclxuXHJcbmNvbnN0IGluaXQ6IElQbHVnaW4gPSB7XHJcbiAgaGFuZGxlOiBhc3luYyAoY3R4OiBJUGljR28pID0+IHtcclxuICAgIGNvbnN0IGNtZCA9IGN0eC5jbWRcclxuICAgIGNtZC5wcm9ncmFtXHJcbiAgICAgIC5jb21tYW5kKCdpbml0JylcclxuICAgICAgLmFyZ3VtZW50cygnPHRlbXBsYXRlPiBbcHJvamVjdF0nKVxyXG4gICAgICAub3B0aW9uKCctLWNsb25lJywgJ3VzZSBnaXQgY2xvbmUnKVxyXG4gICAgICAub3B0aW9uKCctLW9mZmxpbmUnLCAndXNlIGNhY2hlZCB0ZW1wbGF0ZScpXHJcbiAgICAgIC5kZXNjcmlwdGlvbignY3JlYXRlIHBpY2dvIHBsdWdpblxcJ3MgZGV2ZWxvcG1lbnQgdGVtcGxhdGVzJylcclxuICAgICAgLmFjdGlvbigodGVtcGxhdGU6IHN0cmluZywgcHJvamVjdDogc3RyaW5nLCBwcm9ncmFtOiBhbnkpID0+IHtcclxuICAgICAgICAoYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgLy8gVGhhbmtzIHRvIHZ1ZS1jbGkgaW5pdDogaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1jbGkvYmxvYi9tYXN0ZXIvYmluL3Z1ZS1pbml0XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBoYXNTbGFzaCA9IHRlbXBsYXRlLmluY2x1ZGVzKCcvJylcclxuICAgICAgICAgICAgY29uc3QgaW5QbGFjZSA9ICFwcm9qZWN0IHx8IHByb2plY3QgPT09ICcuJ1xyXG4gICAgICAgICAgICBjb25zdCBkZXN0ID0gcGF0aC5yZXNvbHZlKHByb2plY3QgfHwgJy4nKVxyXG4gICAgICAgICAgICBjb25zdCBjbG9uZSA9IHByb2dyYW0uY2xvbmUgfHwgZmFsc2VcclxuICAgICAgICAgICAgY29uc3Qgb2ZmbGluZSA9IHByb2dyYW0ub2ZmbGluZSB8fCBmYWxzZVxyXG4gICAgICAgICAgICBjb25zdCB0bXAgPSBwYXRoLmpvaW4oaG9tZWRpcigpLCAnLnBpY2dvL3RlbXBsYXRlcycsIHRlbXBsYXRlLnJlcGxhY2UoL1svOl0vZywgJy0nKSkgLy8gZm9yIGNhY2hpbmcgdGVtcGxhdGVcclxuXHJcbiAgICAgICAgICAgIGlmIChwcm9ncmFtLm9mZmxpbmUpIHtcclxuICAgICAgICAgICAgICB0ZW1wbGF0ZSA9IHRtcFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgIHRlbXBsYXRlLFxyXG4gICAgICAgICAgICAgIHByb2plY3QsXHJcbiAgICAgICAgICAgICAgaGFzU2xhc2gsXHJcbiAgICAgICAgICAgICAgaW5QbGFjZSxcclxuICAgICAgICAgICAgICBkZXN0LFxyXG4gICAgICAgICAgICAgIGNsb25lLFxyXG4gICAgICAgICAgICAgIHRtcCxcclxuICAgICAgICAgICAgICBvZmZsaW5lXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIGNoZWNrIGlmIHByb2plY3QgaXMgZW1wdHkgb3IgZXhpc3RcclxuICAgICAgICAgICAgaWYgKGluUGxhY2UgfHwgZnMuZXhpc3RzU3luYyhkZXN0KSkge1xyXG4gICAgICAgICAgICAgIGF3YWl0IGN0eC5jbWQuaW5xdWlyZXIucHJvbXB0KFtcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgdHlwZTogJ2NvbmZpcm0nLFxyXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlOiBpblBsYWNlXHJcbiAgICAgICAgICAgICAgICAgICAgPyAnR2VuZXJhdGUgcHJvamVjdCBpbiBjdXJyZW50IGRpcmVjdG9yeT8nXHJcbiAgICAgICAgICAgICAgICAgICAgOiAnVGFyZ2V0IGRpcmVjdG9yeSBleGlzdHMuIENvbnRpbnVlPycsXHJcbiAgICAgICAgICAgICAgICAgIG5hbWU6ICdvaydcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBdKS50aGVuKChhbnN3ZXI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGFuc3dlci5vaykge1xyXG4gICAgICAgICAgICAgICAgICBydW4oY3R4LCBvcHRpb25zKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH0gZWxzZSB7IC8vIHByb2plY3QgaXMgZ2l2ZW5cclxuICAgICAgICAgICAgICBydW4oY3R4LCBvcHRpb25zKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgY3R4LmxvZy5lcnJvcihlKVxyXG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5hcmd2LmluY2x1ZGVzKCctLWRlYnVnJykpIHtcclxuICAgICAgICAgICAgICB0aHJvdyBlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KSgpLmNhdGNoKChlKSA9PiB7IGN0eC5sb2cuZXJyb3IoZSkgfSlcclxuICAgICAgfSlcclxuICAgICAgLm9uKCctLWhlbHAnLCAoKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coKVxyXG4gICAgICAgIGNvbnNvbGUubG9nKCdFeGFtcGxlczonKVxyXG4gICAgICAgIGNvbnNvbGUubG9nKClcclxuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgICMgY3JlYXRlIGEgbmV3IHByb2plY3Qgd2l0aCBhbiBvZmZpY2lhbCB0ZW1wbGF0ZScpKVxyXG4gICAgICAgIGNvbnNvbGUubG9nKCcgICQgcGljZ28gaW5pdCBwbHVnaW4gbXktcHJvamVjdCcpXHJcbiAgICAgICAgY29uc29sZS5sb2coKVxyXG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJyAgIyBjcmVhdGUgYSBuZXcgcHJvamVjdCBzdHJhaWdodCBmcm9tIGEgZ2l0aHViIHRlbXBsYXRlJykpXHJcbiAgICAgICAgY29uc29sZS5sb2coJyAgJCBwaWNnbyBpbml0IHVzZXJuYW1lL3JlcG8gbXktcHJvamVjdCcpXHJcbiAgICAgICAgY29uc29sZS5sb2coKVxyXG4gICAgICB9KVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgaW5pdFxyXG4iLCJpbXBvcnQgeyB0eXBlIElQbHVnaW4sIHR5cGUgSVBpY0dvLCB0eXBlIElTdHJpbmdLZXlNYXAgfSBmcm9tICcuLi8uLi90eXBlcydcclxuXHJcbmNvbnN0IGkxOG46IElQbHVnaW4gPSB7XHJcbiAgaGFuZGxlOiAoY3R4OiBJUGljR28pID0+IHtcclxuICAgIGNvbnN0IGNtZCA9IGN0eC5jbWRcclxuICAgIGNtZC5wcm9ncmFtXHJcbiAgICAgIC5jb21tYW5kKCdpMThuJylcclxuICAgICAgLmFyZ3VtZW50cygnW2xhbmddJylcclxuICAgICAgLmRlc2NyaXB0aW9uKCdjaGFuZ2UgcGljZ28gbGFuZ3VhZ2UnKVxyXG4gICAgICAuYWN0aW9uKGFzeW5jIChsYW5nOiBzdHJpbmcgPSAnJykgPT4ge1xyXG4gICAgICAgIGNvbnN0IGxpc3QgPSBjdHguaTE4bi5nZXRMYW5ndWFnZUxpc3QoKVxyXG4gICAgICAgIGlmICghbGFuZykge1xyXG4gICAgICAgICAgY29uc3QgcHJvbXB0cyA9IFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHR5cGU6ICdsaXN0JyxcclxuICAgICAgICAgICAgICBuYW1lOiAnaTE4bicsXHJcbiAgICAgICAgICAgICAgY2hvaWNlczogbGlzdCxcclxuICAgICAgICAgICAgICBtZXNzYWdlOiAnQ2hvb3NlIGEgbGFuZ3VhZ2UnLFxyXG4gICAgICAgICAgICAgIGRlZmF1bHQ6IGN0eC5nZXRDb25maWcoJ3NldHRpbmdzLmxhbmd1YWdlJykgfHwgJ3poLUNOJ1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICBdXHJcbiAgICAgICAgICBjb25zdCBhbnN3ZXIgPSBhd2FpdCBjdHguY21kLmlucXVpcmVyLnByb21wdDxJU3RyaW5nS2V5TWFwPHN0cmluZz4+KHByb21wdHMpXHJcbiAgICAgICAgICBjdHguaTE4bi5zZXRMYW5ndWFnZShhbnN3ZXIuaTE4bilcclxuICAgICAgICAgIGN0eC5sb2cuc3VjY2VzcyhgTGFuZ3VhZ2Ugc2V0IHRvICR7YW5zd2VyLmkxOG59YClcclxuICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWxpc3QuaW5jbHVkZXMobGFuZykpIHtcclxuICAgICAgICAgIGN0eC5sb2cud2FybignTm8gc3VjaCBsYW5ndWFnZScpOyByZXR1cm5cclxuICAgICAgICB9XHJcbiAgICAgICAgY3R4LmkxOG4uc2V0TGFuZ3VhZ2UobGFuZylcclxuICAgICAgICBjdHgubG9nLnN1Y2Nlc3MoYExhbmd1YWdlIHNldCB0byAke2xhbmd9YClcclxuICAgICAgfSlcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGkxOG5cclxuIiwiaW1wb3J0IHsgdHlwZSBJUGx1Z2luLCB0eXBlIElMaWZlY3ljbGVQbHVnaW5zIH0gZnJvbSAnLi4vdHlwZXMnXHJcblxyXG5leHBvcnQgY2xhc3MgTGlmZWN5Y2xlUGx1Z2lucyBpbXBsZW1lbnRzIElMaWZlY3ljbGVQbHVnaW5zIHtcclxuICBzdGF0aWMgY3VycmVudFBsdWdpbjogc3RyaW5nIHwgbnVsbFxyXG4gIHByaXZhdGUgcmVhZG9ubHkgbGlzdDogTWFwPHN0cmluZywgSVBsdWdpbj5cclxuICBwcml2YXRlIHJlYWRvbmx5IHBsdWdpbklkTWFwOiBNYXA8c3RyaW5nLCBzdHJpbmdbXT5cclxuICBwcml2YXRlIHJlYWRvbmx5IG5hbWU6IHN0cmluZ1xyXG5cclxuICBjb25zdHJ1Y3RvciAobmFtZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLm5hbWUgPSBuYW1lXHJcbiAgICB0aGlzLmxpc3QgPSBuZXcgTWFwKClcclxuICAgIHRoaXMucGx1Z2luSWRNYXAgPSBuZXcgTWFwKClcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyIChpZDogc3RyaW5nLCBwbHVnaW46IElQbHVnaW4pOiB2b2lkIHtcclxuICAgIGlmICghaWQpIHRocm93IG5ldyBUeXBlRXJyb3IoJ2lkIGlzIHJlcXVpcmVkIScpXHJcbiAgICBpZiAodHlwZW9mIHBsdWdpbi5oYW5kbGUgIT09ICdmdW5jdGlvbicpIHRocm93IG5ldyBUeXBlRXJyb3IoJ3BsdWdpbi5oYW5kbGUgbXVzdCBiZSBhIGZ1bmN0aW9uIScpXHJcbiAgICBpZiAodGhpcy5saXN0LmhhcyhpZCkpIHRocm93IG5ldyBUeXBlRXJyb3IoYCR7dGhpcy5uYW1lfSBkdXBsaWNhdGUgaWQ6ICR7aWR9IWApXHJcbiAgICB0aGlzLmxpc3Quc2V0KGlkLCBwbHVnaW4pXHJcbiAgICBpZiAoTGlmZWN5Y2xlUGx1Z2lucy5jdXJyZW50UGx1Z2luKSB7XHJcbiAgICAgIGlmICh0aGlzLnBsdWdpbklkTWFwLmhhcyhMaWZlY3ljbGVQbHVnaW5zLmN1cnJlbnRQbHVnaW4pKSB7XHJcbiAgICAgICAgdGhpcy5wbHVnaW5JZE1hcC5nZXQoTGlmZWN5Y2xlUGx1Z2lucy5jdXJyZW50UGx1Z2luKT8ucHVzaChpZClcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnBsdWdpbklkTWFwLnNldChMaWZlY3ljbGVQbHVnaW5zLmN1cnJlbnRQbHVnaW4sIFtpZF0pXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVucmVnaXN0ZXIgKHBsdWdpbk5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMucGx1Z2luSWRNYXAuaGFzKHBsdWdpbk5hbWUpKSB7XHJcbiAgICAgIGNvbnN0IHBsdWdpbkxpc3QgPSB0aGlzLnBsdWdpbklkTWFwLmdldChwbHVnaW5OYW1lKVxyXG4gICAgICBwbHVnaW5MaXN0Py5mb3JFYWNoKChwbHVnaW46IHN0cmluZykgPT4ge1xyXG4gICAgICAgIHRoaXMubGlzdC5kZWxldGUocGx1Z2luKVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0TmFtZSAoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLm5hbWVcclxuICB9XHJcblxyXG4gIGdldCAoaWQ6IHN0cmluZyk6IElQbHVnaW4gfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMubGlzdC5nZXQoaWQpXHJcbiAgfVxyXG5cclxuICBnZXRMaXN0ICgpOiBJUGx1Z2luW10ge1xyXG4gICAgcmV0dXJuIFsuLi50aGlzLmxpc3QudmFsdWVzKCldXHJcbiAgfVxyXG5cclxuICBnZXRJZExpc3QgKCk6IHN0cmluZ1tdIHtcclxuICAgIHJldHVybiBbLi4udGhpcy5saXN0LmtleXMoKV1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBzZXRDdXJyZW50UGx1Z2luTmFtZSA9IChuYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbCk6IHZvaWQgPT4ge1xyXG4gIExpZmVjeWNsZVBsdWdpbnMuY3VycmVudFBsdWdpbiA9IG5hbWVcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGdldEN1cnJlbnRQbHVnaW5OYW1lID0gKCk6IHN0cmluZyB8IG51bGwgPT4ge1xyXG4gIHJldHVybiBMaWZlY3ljbGVQbHVnaW5zLmN1cnJlbnRQbHVnaW5cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgTGlmZWN5Y2xlUGx1Z2luc1xyXG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbWlzdXNlZC1wcm9taXNlcyAqL1xyXG5pbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY29tbWFuZGVyJ1xyXG5pbXBvcnQgaW5xdWlyZXIsIHsgdHlwZSBJbnF1aXJlciB9IGZyb20gJ2lucXVpcmVyJ1xyXG5pbXBvcnQgeyB0eXBlIElQbHVnaW4sIHR5cGUgSUNvbW1hbmRlciwgdHlwZSBJUGljR28gfSBmcm9tICcuLi90eXBlcydcclxuaW1wb3J0IGNvbW1hbmRlcnMgZnJvbSAnLi4vcGx1Z2lucy9jb21tYW5kZXInXHJcbmltcG9ydCB7IGdldEN1cnJlbnRQbHVnaW5OYW1lIH0gZnJvbSAnLi9MaWZlY3ljbGVQbHVnaW5zJ1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbW1hbmRlciBpbXBsZW1lbnRzIElDb21tYW5kZXIge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgbmFtZSA9ICdjb21tYW5kZXInXHJcbiAgc3RhdGljIGN1cnJlbnRQbHVnaW46IHN0cmluZyB8IG51bGxcclxuICBwcml2YXRlIHJlYWRvbmx5IGxpc3QgPSBuZXcgTWFwPHN0cmluZywgSVBsdWdpbj4oKVxyXG4gIHByaXZhdGUgcmVhZG9ubHkgcGx1Z2luSWRNYXAgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nW10+KClcclxuICBwcml2YXRlIHJlYWRvbmx5IGN0eDogSVBpY0dvXHJcblxyXG4gIHByb2dyYW06IENvbW1hbmRcclxuICBpbnF1aXJlcjogSW5xdWlyZXJcclxuXHJcbiAgY29uc3RydWN0b3IgKGN0eDogSVBpY0dvKSB7XHJcbiAgICB0aGlzLnByb2dyYW0gPSBuZXcgQ29tbWFuZCgpXHJcbiAgICB0aGlzLmlucXVpcmVyID0gaW5xdWlyZXJcclxuICAgIHRoaXMuY3R4ID0gY3R4XHJcbiAgfVxyXG5cclxuICBnZXROYW1lICgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMubmFtZVxyXG4gIH1cclxuXHJcbiAgaW5pdCAoKTogdm9pZCB7XHJcbiAgICB0aGlzLnByb2dyYW1cclxuICAgICAgLnZlcnNpb24ocHJvY2Vzcy5lbnYuUElDR09fVkVSU0lPTiwgJy12LCAtLXZlcnNpb24nKVxyXG4gICAgICAub3B0aW9uKCctZCwgLS1kZWJ1ZycsICdkZWJ1ZyBtb2RlJywgKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY3R4LnNldENvbmZpZyh7XHJcbiAgICAgICAgICBkZWJ1ZzogdHJ1ZVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0pXHJcbiAgICAgIC5vcHRpb24oJy1zLCAtLXNpbGVudCcsICdzaWxlbnQgbW9kZScsICgpID0+IHtcclxuICAgICAgICB0aGlzLmN0eC5zZXRDb25maWcoe1xyXG4gICAgICAgICAgc2lsZW50OiB0cnVlXHJcbiAgICAgICAgfSlcclxuICAgICAgfSlcclxuICAgICAgLm9uKCdjb21tYW5kOionLCAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGBJbnZhbGlkIGNvbW1hbmQ6ICR7dGhpcy5wcm9ncmFtLmFyZ3Muam9pbignICcpfVxcblNlZSAtLWhlbHAgZm9yIGEgbGlzdCBvZiBhdmFpbGFibGUgY29tbWFuZHMuYClcclxuICAgICAgICBwcm9jZXNzLmV4aXQoMSlcclxuICAgICAgfSlcclxuXHJcbiAgICAvLyBidWlsdC1pbiBjb21tYW5kc1xyXG4gICAgY29tbWFuZGVycyh0aGlzLmN0eClcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyIChpZDogc3RyaW5nLCBwbHVnaW46IElQbHVnaW4pOiB2b2lkIHtcclxuICAgIGlmICghaWQpIHRocm93IG5ldyBUeXBlRXJyb3IoJ25hbWUgaXMgcmVxdWlyZWQhJylcclxuICAgIGlmICh0eXBlb2YgcGx1Z2luLmhhbmRsZSAhPT0gJ2Z1bmN0aW9uJykgdGhyb3cgbmV3IFR5cGVFcnJvcigncGx1Z2luLmhhbmRsZSBtdXN0IGJlIGEgZnVuY3Rpb24hJylcclxuICAgIGlmICh0aGlzLmxpc3QuaGFzKGlkKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt0aGlzLm5hbWV9IHBsdWdpbiBkdXBsaWNhdGUgaWQ6ICR7aWR9IWApXHJcbiAgICB0aGlzLmxpc3Quc2V0KGlkLCBwbHVnaW4pXHJcbiAgICBjb25zdCBjdXJyZW50UGx1Z2luTmFtZSA9IGdldEN1cnJlbnRQbHVnaW5OYW1lKClcclxuICAgIGlmIChjdXJyZW50UGx1Z2luTmFtZSAhPT0gbnVsbCkge1xyXG4gICAgICBpZiAodGhpcy5wbHVnaW5JZE1hcC5oYXMoY3VycmVudFBsdWdpbk5hbWUpKSB7XHJcbiAgICAgICAgdGhpcy5wbHVnaW5JZE1hcC5nZXQoY3VycmVudFBsdWdpbk5hbWUpPy5wdXNoKGlkKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucGx1Z2luSWRNYXAuc2V0KGN1cnJlbnRQbHVnaW5OYW1lLCBbaWRdKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1bnJlZ2lzdGVyIChwbHVnaW5OYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnBsdWdpbklkTWFwLmhhcyhwbHVnaW5OYW1lKSkge1xyXG4gICAgICBjb25zdCBwbHVnaW5MaXN0ID0gdGhpcy5wbHVnaW5JZE1hcC5nZXQocGx1Z2luTmFtZSlcclxuICAgICAgcGx1Z2luTGlzdD8uZm9yRWFjaCgocGx1Z2luOiBzdHJpbmcpID0+IHtcclxuICAgICAgICB0aGlzLmxpc3QuZGVsZXRlKHBsdWdpbilcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGxvYWRDb21tYW5kcyAoKTogdm9pZCB7XHJcbiAgICB0aGlzLmdldExpc3QoKS5mb3JFYWNoKChpdGVtOiBJUGx1Z2luKSA9PiB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgaXRlbS5oYW5kbGUodGhpcy5jdHgpXHJcbiAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihlKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZ2V0IChpZDogc3RyaW5nKTogSVBsdWdpbiB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5saXN0LmdldChpZClcclxuICB9XHJcblxyXG4gIGdldExpc3QgKCk6IElQbHVnaW5bXSB7XHJcbiAgICByZXR1cm4gWy4uLnRoaXMubGlzdC52YWx1ZXMoKV1cclxuICB9XHJcblxyXG4gIGdldElkTGlzdCAoKTogc3RyaW5nW10ge1xyXG4gICAgcmV0dXJuIFsuLi50aGlzLmxpc3Qua2V5cygpXVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgQ29tbWFuZGVyXHJcbiIsImltcG9ydCBwbHVnaW5IYW5kbGVyIGZyb20gJy4vcGx1Z2luSGFuZGxlcidcclxuaW1wb3J0IGNvbmZpZyBmcm9tICcuL2NvbmZpZydcclxuaW1wb3J0IHVwbG9hZCBmcm9tICcuL3VwbG9hZCdcclxuaW1wb3J0IHNldHRpbmcgZnJvbSAnLi9zZXR0aW5nJ1xyXG5pbXBvcnQgdXNlIGZyb20gJy4vdXNlJ1xyXG5pbXBvcnQgcHJveHkgZnJvbSAnLi9wcm94eSdcclxuaW1wb3J0IGluaXQgZnJvbSAnLi9pbml0J1xyXG5pbXBvcnQgaTE4biBmcm9tICcuL2kxOG4nXHJcbmltcG9ydCB7IHR5cGUgSVBpY0dvIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcblxyXG5leHBvcnQgZGVmYXVsdCAoY3R4OiBJUGljR28pOiB2b2lkID0+IHtcclxuICBjdHguY21kLnJlZ2lzdGVyKCdwbHVnaW5IYW5kbGVyJywgcGx1Z2luSGFuZGxlcilcclxuICBjdHguY21kLnJlZ2lzdGVyKCdjb25maWcnLCBjb25maWcpXHJcbiAgY3R4LmNtZC5yZWdpc3Rlcignc2V0dGluZycsIHNldHRpbmcpXHJcbiAgY3R4LmNtZC5yZWdpc3RlcigndXBsb2FkJywgdXBsb2FkKVxyXG4gIGN0eC5jbWQucmVnaXN0ZXIoJ3VzZScsIHVzZSlcclxuICBjdHguY21kLnJlZ2lzdGVyKCdwcm94eScsIHByb3h5KVxyXG4gIGN0eC5jbWQucmVnaXN0ZXIoJ2luaXQnLCBpbml0KVxyXG4gIGN0eC5jbWQucmVnaXN0ZXIoJ2kxOG4nLCBpMThuKVxyXG59XHJcbiIsImV4cG9ydCBlbnVtIElMb2dUeXBlIHtcclxuICBzdWNjZXNzID0gJ3N1Y2Nlc3MnLFxyXG4gIGluZm8gPSAnaW5mbycsXHJcbiAgd2FybiA9ICd3YXJuJyxcclxuICBlcnJvciA9ICdlcnJvcidcclxufVxyXG5cclxuLyoqXHJcbiAqIHRoZXNlIGV2ZW50cyB3aWxsIGJlIGNhdGNoZWQgYnkgdXNlcnNcclxuICovXHJcbmV4cG9ydCBlbnVtIElCdWlsZEluRXZlbnQge1xyXG4gIFVQTE9BRF9QUk9HUkVTUyA9ICd1cGxvYWRQcm9ncmVzcycsXHJcbiAgRkFJTEVEID0gJ2ZhaWxlZCcsXHJcbiAgQkVGT1JFX1RSQU5TRk9STSA9ICdiZWZvcmVUcmFuc2Zvcm0nLFxyXG4gIEJFRk9SRV9VUExPQUQgPSAnYmVmb3JlVXBsb2FkJyxcclxuICBBRlRFUl9VUExPQUQgPSAnYWZ0ZXJVcGxvYWQnLFxyXG4gIEZJTklTSEVEID0gJ2ZpbmlzaGVkJyxcclxuICBJTlNUQUxMID0gJ2luc3RhbGwnLFxyXG4gIFVOSU5TVEFMTCA9ICd1bmluc3RhbGwnLFxyXG4gIFVQREFURSA9ICd1cGRhdGUnLFxyXG4gIE5PVElGSUNBVElPTiA9ICdub3RpZmljYXRpb24nXHJcbn1cclxuXHJcbi8qKlxyXG4gKiB0aGVzZSBldmVudHMgd2lsbCBiZSBjYXRjaGVkIG9ubHkgYnkgcGljZ29cclxuICovXHJcbmV4cG9ydCBlbnVtIElCdXNFdmVudCB7XHJcbiAgQ09ORklHX0NIQU5HRSA9ICdDT05GSUdfQ0hBTkdFJ1xyXG59XHJcbiIsImltcG9ydCBjaGFsayBmcm9tICdjaGFsaydcclxuaW1wb3J0IGRheWpzIGZyb20gJ2RheWpzJ1xyXG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnXHJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXHJcbmltcG9ydCB1dGlsIGZyb20gJ3V0aWwnXHJcbmltcG9ydCB7IElMb2dUeXBlIH0gZnJvbSAnLi4vdXRpbHMvZW51bSdcclxuaW1wb3J0IHtcclxuICB0eXBlIElMb2dBcmd2VHlwZSxcclxuICB0eXBlIElMb2dBcmd2VHlwZVdpdGhFcnJvcixcclxuICB0eXBlIFVuZGVmaW5hYmxlLFxyXG4gIHR5cGUgSUxvZ0NvbG9yLFxyXG4gIHR5cGUgSUxvZ2dlcixcclxuICB0eXBlIElQaWNHb1xyXG59IGZyb20gJy4uL3R5cGVzJ1xyXG5pbXBvcnQgeyBmb3JjZU51bWJlciwgaXNEZXYgfSBmcm9tICcuLi91dGlscy9jb21tb24nXHJcblxyXG5leHBvcnQgY2xhc3MgTG9nZ2VyIGltcGxlbWVudHMgSUxvZ2dlciB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBsZXZlbCA9IHtcclxuICAgIFtJTG9nVHlwZS5zdWNjZXNzXTogJ2dyZWVuJyxcclxuICAgIFtJTG9nVHlwZS5pbmZvXTogJ2JsdWUnLFxyXG4gICAgW0lMb2dUeXBlLndhcm5dOiAneWVsbG93JyxcclxuICAgIFtJTG9nVHlwZS5lcnJvcl06ICdyZWQnXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IGN0eDogSVBpY0dvXHJcbiAgcHJpdmF0ZSBsb2dMZXZlbCE6IHN0cmluZ1xyXG4gIHByaXZhdGUgbG9nUGF0aCE6IHN0cmluZ1xyXG4gIGNvbnN0cnVjdG9yIChjdHg6IElQaWNHbykge1xyXG4gICAgdGhpcy5jdHggPSBjdHhcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlTG9nICh0eXBlOiBJTG9nVHlwZSwgLi4ubXNnOiBJTG9nQXJndlR5cGVXaXRoRXJyb3JbXSk6IHZvaWQge1xyXG4gICAgLy8gY2hlY2sgY29uZmlnLnNpbGVudFxyXG4gICAgaWYgKCF0aGlzLmN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8c3RyaW5nPj4oJ3NpbGVudCcpKSB7XHJcbiAgICAgIGNvbnN0IGxvZ0hlYWRlciA9IGNoYWxrW3RoaXMubGV2ZWxbdHlwZV0gYXMgSUxvZ0NvbG9yXShgW1BpY0xpc3QgJHt0eXBlLnRvVXBwZXJDYXNlKCl9XTpgKVxyXG4gICAgICBjb25zb2xlLmxvZyhsb2dIZWFkZXIsIC4uLm1zZylcclxuICAgICAgdGhpcy5sb2dMZXZlbCA9IHRoaXMuY3R4LmdldENvbmZpZygnc2V0dGluZ3MubG9nTGV2ZWwnKVxyXG4gICAgICB0aGlzLmxvZ1BhdGggPSB0aGlzLmN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8c3RyaW5nPj4oJ3NldHRpbmdzLmxvZ1BhdGgnKSB8fCBwYXRoLmpvaW4odGhpcy5jdHguYmFzZURpciwgJy4vcGljbGlzdC5sb2cnKVxyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAvLyBmaXggbG9nIGZpbGUgaXMgdG9vIGxhcmdlLCBub3cgdGhlIGxvZyBmaWxlJ3MgZGVmYXVsdCBzaXplIGlzIDEwIE1CXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuY2hlY2tMb2dGaWxlSXNMYXJnZSh0aGlzLmxvZ1BhdGgpXHJcbiAgICAgICAgICBpZiAocmVzdWx0LmlzTGFyZ2UpIHtcclxuICAgICAgICAgICAgY29uc3Qgd2FybmluZ01zZyA9IGBMb2cgZmlsZSBpcyB0b28gbGFyZ2UgKD4gJHsocmVzdWx0LmxvZ0ZpbGVTaXplTGltaXQhKSAvIDEwMjQgLyAxMDI0IHx8ICcxMCd9IE1CKSwgcmVjcmVhdGUgbG9nIGZpbGVgXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdygnW1BpY0xpc3QgV0FSTl06JyksIHdhcm5pbmdNc2cpXHJcbiAgICAgICAgICAgIHRoaXMucmVjcmVhdGVMb2dGaWxlKHRoaXMubG9nUGF0aClcclxuICAgICAgICAgICAgbXNnLnVuc2hpZnQod2FybmluZ01zZylcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuaGFuZGxlV3JpdGVMb2codGhpcy5sb2dQYXRoLCB0eXBlLCAuLi5tc2cpXHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgLy8gd2h5Pz8/XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdbUGljTGlzdCBFcnJvcl0gb24gY2hlY2tpbmcgbG9nIGZpbGUgc2l6ZScsIGUpXHJcbiAgICAgICAgfVxyXG4gICAgICB9LCAwKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaGVja0xvZ0ZpbGVJc0xhcmdlIChsb2dQYXRoOiBzdHJpbmcpOiB7XHJcbiAgICBpc0xhcmdlOiBib29sZWFuXHJcbiAgICBsb2dGaWxlU2l6ZT86IG51bWJlclxyXG4gICAgbG9nRmlsZVNpemVMaW1pdD86IG51bWJlclxyXG4gIH0ge1xyXG4gICAgaWYgKGZzLmV4aXN0c1N5bmMobG9nUGF0aCkpIHtcclxuICAgICAgY29uc3QgbG9nRmlsZVNpemUgPSBmcy5zdGF0U3luYyhsb2dQYXRoKS5zaXplXHJcbiAgICAgIGNvbnN0IGxvZ0ZpbGVTaXplTGltaXQgPSBmb3JjZU51bWJlcih0aGlzLmN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8bnVtYmVyPj4oJ3NldHRpbmdzLmxvZ0ZpbGVTaXplTGltaXQnKSB8fCAxMCkgKiAxMDI0ICogMTAyNCAvLyAxMCBNQiBkZWZhdWx0XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgaXNMYXJnZTogbG9nRmlsZVNpemUgPiBsb2dGaWxlU2l6ZUxpbWl0LFxyXG4gICAgICAgIGxvZ0ZpbGVTaXplLFxyXG4gICAgICAgIGxvZ0ZpbGVTaXplTGltaXRcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgaXNMYXJnZTogZmFsc2VcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVjcmVhdGVMb2dGaWxlIChsb2dQYXRoOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmIChmcy5leGlzdHNTeW5jKGxvZ1BhdGgpKSB7XHJcbiAgICAgIGZzLnVubGlua1N5bmMobG9nUGF0aClcclxuICAgICAgZnMuY3JlYXRlRmlsZVN5bmMobG9nUGF0aClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlV3JpdGVMb2cgKGxvZ1BhdGg6IHN0cmluZywgdHlwZTogc3RyaW5nLCAuLi5tc2c6IElMb2dBcmd2VHlwZVdpdGhFcnJvcltdKTogdm9pZCB7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAodGhpcy5jaGVja0xvZ0xldmVsKHR5cGUsIHRoaXMubG9nTGV2ZWwpKSB7XHJcbiAgICAgICAgbGV0IGxvZyA9IGAke2RheWpzKCkuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tOnNzJyl9IFtQaWNMaXN0ICR7dHlwZS50b1VwcGVyQ2FzZSgpfV0gYFxyXG4gICAgICAgIG1zZy5mb3JFYWNoKChpdGVtOiBJTG9nQXJndlR5cGVXaXRoRXJyb3IpID0+IHtcclxuICAgICAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgRXJyb3IgJiYgdHlwZSA9PT0gJ2Vycm9yJykge1xyXG4gICAgICAgICAgICBsb2cgKz0gYFxcbi0tLS0tLUVycm9yIFN0YWNrIEJlZ2luLS0tLS0tXFxuJHt1dGlsLmZvcm1hdChpdGVtPy5zdGFjayl9XFxuLS0tLS0tLUVycm9yIFN0YWNrIEVuZC0tLS0tLS0gYFxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICAgIGl0ZW0gPSBKU09OLnN0cmluZ2lmeShpdGVtLCBudWxsLCAyKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxvZyArPSBgJHtpdGVtIGFzIHN0cmluZ30gYFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgbG9nICs9ICdcXG4nXHJcbiAgICAgICAgLy8gQSBzeW5jaHJvbml6ZWQgYXBwcm9hY2ggdG8gYXZvaWQgbG9nIG1zZyBzZXF1ZW5jZSBlcnJvcnNcclxuICAgICAgICBmcy5hcHBlbmRGaWxlU3luYyhsb2dQYXRoLCBsb2cpXHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignW1BpY0xpc3QgRXJyb3JdIG9uIHdyaXRpbmcgbG9nIGZpbGUnLCBlKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaGVja0xvZ0xldmVsICh0eXBlOiBzdHJpbmcsIGxldmVsOiB1bmRlZmluZWQgfCBzdHJpbmcgfCBzdHJpbmdbXSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKGxldmVsID09PSB1bmRlZmluZWQgfHwgbGV2ZWwgPT09ICdhbGwnKSB7XHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShsZXZlbCkpIHtcclxuICAgICAgcmV0dXJuIGxldmVsLnNvbWUoKGl0ZW06IHN0cmluZykgPT4gKGl0ZW0gPT09IHR5cGUgfHwgaXRlbSA9PT0gJ2FsbCcpKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHR5cGUgPT09IGxldmVsXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdWNjZXNzICguLi5tc2c6IElMb2dBcmd2VHlwZVtdKTogdm9pZCB7XHJcbiAgICB0aGlzLmhhbmRsZUxvZyhJTG9nVHlwZS5zdWNjZXNzLCAuLi5tc2cpXHJcbiAgfVxyXG5cclxuICBpbmZvICguLi5tc2c6IElMb2dBcmd2VHlwZVtdKTogdm9pZCB7XHJcbiAgICB0aGlzLmhhbmRsZUxvZyhJTG9nVHlwZS5pbmZvLCAuLi5tc2cpXHJcbiAgfVxyXG5cclxuICBlcnJvciAoLi4ubXNnOiBJTG9nQXJndlR5cGVXaXRoRXJyb3JbXSk6IHZvaWQge1xyXG4gICAgdGhpcy5oYW5kbGVMb2coSUxvZ1R5cGUuZXJyb3IsIC4uLm1zZylcclxuICB9XHJcblxyXG4gIHdhcm4gKC4uLm1zZzogSUxvZ0FyZ3ZUeXBlW10pOiB2b2lkIHtcclxuICAgIHRoaXMuaGFuZGxlTG9nKElMb2dUeXBlLndhcm4sIC4uLm1zZylcclxuICB9XHJcblxyXG4gIGRlYnVnICguLi5tc2c6IElMb2dBcmd2VHlwZVtdKTogdm9pZCB7XHJcbiAgICBpZiAoaXNEZXYoKSkge1xyXG4gICAgICB0aGlzLmhhbmRsZUxvZyhJTG9nVHlwZS5pbmZvLCAuLi5tc2cpXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBMb2dnZXJcclxuIiwiaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJ1xyXG5pbXBvcnQgeyB0eXBlIElCdWlsZEluV2F0ZXJNYXJrT3B0aW9ucywgdHlwZSBJQnVpbGRJbkNvbXByZXNzT3B0aW9ucywgdHlwZSBJTGlmZWN5Y2xlUGx1Z2lucywgdHlwZSBJUGF0aFRyYW5zZm9ybWVkSW1nSW5mbywgdHlwZSBJUGljR28sIHR5cGUgSVBsdWdpbiwgdHlwZSBVbmRlZmluYWJsZSwgdHlwZSBJSW1nSW5mbyB9IGZyb20gJy4uL3R5cGVzJ1xyXG5pbXBvcnQgeyBnZXRVUkxGaWxlLCBoYW5kbGVVcmxFbmNvZGUsIGltYWdlUHJvY2VzcywgaXNVcmwsIG5lZWRDb21wcmVzcywgbmVlZEFkZFdhdGVybWFyaywgaW1hZ2VBZGRXYXRlck1hcmssIHJlbW92ZUV4aWYsIHJlbmFtZUZpbGVOYW1lV2l0aEN1c3RvbVN0cmluZyB9IGZyb20gJy4uL3V0aWxzL2NvbW1vbidcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tICcuLi91dGlscy9jcmVhdGVDb250ZXh0J1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xyXG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnXHJcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcydcclxuaW1wb3J0IHsgY2xvbmVEZWVwIH0gZnJvbSAnbG9kYXNoJ1xyXG5pbXBvcnQgaGVpY0NvbnZlcnQgZnJvbSAnaGVpYy1jb252ZXJ0J1xyXG5cclxuZXhwb3J0IGNsYXNzIExpZmVjeWNsZSBleHRlbmRzIEV2ZW50RW1pdHRlciB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBjdHg6IElQaWNHb1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgdHRmTGluazogc3RyaW5nID0gJ2h0dHBzOi8vcmVsZWFzZS5waWNsaXN0LmNuL3NpbWhlaS50dGYnXHJcbiAgdHRmUGF0aDogc3RyaW5nXHJcblxyXG4gIGNvbnN0cnVjdG9yIChjdHg6IElQaWNHbykge1xyXG4gICAgc3VwZXIoKVxyXG4gICAgdGhpcy5jdHggPSBjdHhcclxuICAgIGNvbnN0IHRlbXBGaWxlUGF0aCA9IHBhdGguam9pbihjdHguYmFzZURpciwgJ3BpY2xpc3RUZW1wJylcclxuICAgIGNvbnN0IGltZ0ZsZVBhdGggPSBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsICdpbWdUZW1wJylcclxuICAgIGZzLmVuc3VyZURpclN5bmMoaW1nRmxlUGF0aClcclxuICAgIGZzLmVtcHR5RGlyU3luYyh0ZW1wRmlsZVBhdGgpXHJcbiAgICB0aGlzLnR0ZlBhdGggPSBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsICdhc3NldHMnLCAnc2ltaGVpLnR0ZicpXHJcbiAgfVxyXG5cclxuICBhc3luYyBkb3dubG9hZFRURiAoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBjb25zdCBvdXRwdXREaXIgPSBwYXRoLmRpcm5hbWUodGhpcy50dGZQYXRoKVxyXG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKG91dHB1dERpcikpIHtcclxuICAgICAgZnMubWtkaXJTeW5jKG91dHB1dERpciwgeyByZWN1cnNpdmU6IHRydWUgfSlcclxuICAgIH1cclxuICAgIGlmICghZnMuZXhpc3RzU3luYyh0aGlzLnR0ZlBhdGgpKSB7XHJcbiAgICAgIHRoaXMuY3R4LmxvZy5pbmZvKCdEb3dubG9hZCB0dGYgZmlsZS4nKVxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGF4aW9zLmdldCh0aGlzLnR0ZkxpbmssIHsgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInIH0pXHJcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyh0aGlzLnR0ZlBhdGgsIHJlcy5kYXRhKVxyXG4gICAgICAgIHRoaXMuY3R4LmxvZy5pbmZvKCdEb3dubG9hZCB0dGYgZmlsZSBzdWNjZXNzLicpXHJcbiAgICAgICAgcmV0dXJuIHRydWVcclxuICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKCdEb3dubG9hZCB0dGYgZmlsZSBmYWlsZWQuJylcclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRydWVcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIHN0YXJ0IChpbnB1dDogYW55W10pOiBQcm9taXNlPElQaWNHbz4ge1xyXG4gICAgLy8gZW5zdXJlIGV2ZXJ5IHVwbG9hZCBwcm9jZXNzIGhhcyBhbiB1bmlxdWUgY29udGV4dFxyXG4gICAgY29uc3QgY3R4ID0gY3JlYXRlQ29udGV4dCh0aGlzLmN0eClcclxuICAgIHRyeSB7XHJcbiAgICAgIC8vIGltYWdlcyBpbnB1dFxyXG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnB1dCBtdXN0IGJlIGFuIGFycmF5LicpXHJcbiAgICAgIH1cclxuICAgICAgY3R4LmlucHV0ID0gaW5wdXRcclxuICAgICAgY3R4LnJhd0lucHV0UGF0aCA9IFtdIGFzIHN0cmluZ1tdXHJcbiAgICAgIGN0eC5yYXdJbnB1dCA9IGNsb25lRGVlcChpbnB1dClcclxuICAgICAgY3R4Lm91dHB1dCA9IFtdIGFzIElJbWdJbmZvW11cclxuICAgICAgY29uc3QgY29tcHJlc3NPcHRpb25zID0gY3R4LmdldENvbmZpZzxJQnVpbGRJbkNvbXByZXNzT3B0aW9ucz4oJ2J1aWxkSW4uY29tcHJlc3MnKVxyXG4gICAgICBjb25zdCB0eXBlID0gY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxzdHJpbmc+PigncGljQmVkLnVwbG9hZGVyJykgfHwgY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxzdHJpbmc+PigncGljQmVkLmN1cnJlbnQnKSB8fCAnc21tcydcclxuICAgICAgY29uc3QgdXBsb2FkZXIgPSBjdHguaGVscGVyLnVwbG9hZGVyLmdldCh0eXBlKVxyXG4gICAgICBpZiAoIXVwbG9hZGVyICYmIGNvbXByZXNzT3B0aW9ucykge1xyXG4gICAgICAgIGNvbXByZXNzT3B0aW9ucy5waWNCZWQgPSAnc21tcydcclxuICAgICAgfSBlbHNlIGlmIChjb21wcmVzc09wdGlvbnMpIHtcclxuICAgICAgICBjb21wcmVzc09wdGlvbnMucGljQmVkID0gdHlwZVxyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHdhdGVybWFya09wdGlvbnMgPSBjdHguZ2V0Q29uZmlnPElCdWlsZEluV2F0ZXJNYXJrT3B0aW9ucz4oJ2J1aWxkSW4ud2F0ZXJtYXJrJylcclxuICAgICAgaWYgKGNvbXByZXNzT3B0aW9ucyB8fCB3YXRlcm1hcmtPcHRpb25zKSB7XHJcbiAgICAgICAgY29uc3QgdGVtcEZpbGVQYXRoID0gcGF0aC5qb2luKGN0eC5iYXNlRGlyLCAncGljbGlzdFRlbXAnKVxyXG4gICAgICAgIGlmICghZnMuZXhpc3RzU3luYyh0ZW1wRmlsZVBhdGgpKSB7XHJcbiAgICAgICAgICBmcy5ta2RpclN5bmModGVtcEZpbGVQYXRoKVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB3YXRlcm1hcmtNc2cgPSAnQWRkIHdhdGVybWFyayB0byBpbWFnZSdcclxuICAgICAgICBjb25zdCBjb21wcmVzc01zZyA9ICdDb21wcmVzcyBvciBjb252ZXJ0IGltYWdlJ1xyXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChjdHguaW5wdXQubWFwKGFzeW5jIChpdGVtOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIGxldCBpbmZvOiBJUGF0aFRyYW5zZm9ybWVkSW1nSW5mb1xyXG4gICAgICAgICAgaWYgKGlzVXJsKGl0ZW0pKSB7XHJcbiAgICAgICAgICAgIGN0eC5yYXdJbnB1dFBhdGghW2luZGV4XSA9IGl0ZW1cclxuICAgICAgICAgICAgaW5mbyA9IGF3YWl0IGdldFVSTEZpbGUoaXRlbSwgY3R4KVxyXG4gICAgICAgICAgICBpZiAoaW5mby5zdWNjZXNzICYmIGluZm8uYnVmZmVyKSB7XHJcbiAgICAgICAgICAgICAgbGV0IHRyYW5zZm9ybWVkQnVmZmVyXHJcbiAgICAgICAgICAgICAgaWYgKG5lZWRBZGRXYXRlcm1hcmsod2F0ZXJtYXJrT3B0aW9ucywgaW5mby5leHRuYW1lID8/ICcnKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZG93bmxvYWRUVEZSZXQgPSBhd2FpdCB0aGlzLmRvd25sb2FkVFRGKClcclxuICAgICAgICAgICAgICAgIGlmICghZG93bmxvYWRUVEZSZXQpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5jdHgubG9nLndhcm4oJ0Rvd25sb2FkIHR0ZiBmaWxlIGZhaWxlZCwgc2tpcCBhZGQgd2F0ZXJtYXJrLicpXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBjdHgubG9nLmluZm8od2F0ZXJtYXJrTXNnKVxyXG4gICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZEJ1ZmZlciA9IGF3YWl0IGltYWdlQWRkV2F0ZXJNYXJrKGluZm8uYnVmZmVyLCB3YXRlcm1hcmtPcHRpb25zLCB0aGlzLnR0ZlBhdGgpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChuZWVkQ29tcHJlc3MoY29tcHJlc3NPcHRpb25zLCBpbmZvLmV4dG5hbWUgPz8gJycpKSB7XHJcbiAgICAgICAgICAgICAgICBjdHgubG9nLmluZm8oY29tcHJlc3NNc2cpXHJcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZEJ1ZmZlciA9IGF3YWl0IGltYWdlUHJvY2Vzcyh0cmFuc2Zvcm1lZEJ1ZmZlciA/PyBpbmZvLmJ1ZmZlciwgY29tcHJlc3NPcHRpb25zLCBpbmZvLmV4dG5hbWUgPz8gJycpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmICghdHJhbnNmb3JtZWRCdWZmZXIgJiYgY29tcHJlc3NPcHRpb25zPy5pc1JlbW92ZUV4aWYpIHtcclxuICAgICAgICAgICAgICAgIGN0eC5sb2cuaW5mbygnUmVtb3ZlIGV4aWYgaW5mby4nKVxyXG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtZWRCdWZmZXIgPSBhd2FpdCByZW1vdmVFeGlmKGluZm8uYnVmZmVyLCBpbmZvLmV4dG5hbWUgPz8gJycpXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1lZEJ1ZmZlcikge1xyXG4gICAgICAgICAgICAgICAgbGV0IG5ld0V4dFxyXG4gICAgICAgICAgICAgICAgaWYgKGNvbXByZXNzT3B0aW9ucz8uaXNDb252ZXJ0KSB7XHJcbiAgICAgICAgICAgICAgICAgIG5ld0V4dCA9IGNvbXByZXNzT3B0aW9ucz8uY29udmVydEZvcm1hdCA/PyAnanBnJ1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgbmV3RXh0ID0gaW5mby5leHRuYW1lID8/ICcnXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBuZXdFeHQgPSBuZXdFeHQuc3RhcnRzV2l0aCgnLicpID8gbmV3RXh0IDogYC4ke25ld0V4dH1gXHJcbiAgICAgICAgICAgICAgICBjb25zdCB0ZW1wRmlsZSA9IHBhdGguam9pbih0ZW1wRmlsZVBhdGgsIGAke2luZm8uZmlsZU5hbWVcclxuICAgICAgICAgICAgICAgICAgPyBgJHtwYXRoLmJhc2VuYW1lKGluZm8uZmlsZU5hbWUsIHBhdGguZXh0bmFtZShpbmZvLmZpbGVOYW1lKSl9JHtuZXdFeHR9YFxyXG4gICAgICAgICAgICAgICAgICA6IG5ldyBEYXRlKCkuZ2V0VGltZSgpfSR7bmV3RXh0fWApXHJcbiAgICAgICAgICAgICAgICBjdHgucmF3SW5wdXRQYXRoIVtpbmRleF0gPSBwYXRoLmpvaW4ocGF0aC5kaXJuYW1lKGl0ZW0pLCBwYXRoLmJhc2VuYW1lKHRlbXBGaWxlKSlcclxuICAgICAgICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmModGVtcEZpbGUsIHRyYW5zZm9ybWVkQnVmZmVyKVxyXG4gICAgICAgICAgICAgICAgY3R4LmlucHV0W2luZGV4XSA9IHRlbXBGaWxlXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihpbmZvLnJlYXNvbilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IHRyYW5zZm9ybWVkQnVmZmVyXHJcbiAgICAgICAgICAgIGN0eC5yYXdJbnB1dFBhdGghW2luZGV4XSA9IGl0ZW1cclxuICAgICAgICAgICAgaWYgKG5lZWRBZGRXYXRlcm1hcmsod2F0ZXJtYXJrT3B0aW9ucywgcGF0aC5leHRuYW1lKGl0ZW0pKSkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGRvd25sb2FkVFRGUmV0ID0gYXdhaXQgdGhpcy5kb3dubG9hZFRURigpXHJcbiAgICAgICAgICAgICAgaWYgKCFkb3dubG9hZFRURlJldCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdHgubG9nLndhcm4oJ0Rvd25sb2FkIHR0ZiBmaWxlIGZhaWxlZCwgc2tpcCBhZGQgd2F0ZXJtYXJrLicpXHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGN0eC5sb2cuaW5mbyh3YXRlcm1hcmtNc2cpXHJcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZEJ1ZmZlciA9IGF3YWl0IGltYWdlQWRkV2F0ZXJNYXJrKGZzLnJlYWRGaWxlU3luYyhpdGVtKSwgd2F0ZXJtYXJrT3B0aW9ucywgdGhpcy50dGZQYXRoKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobmVlZENvbXByZXNzKGNvbXByZXNzT3B0aW9ucywgcGF0aC5leHRuYW1lKGl0ZW0pKSkge1xyXG4gICAgICAgICAgICAgIGN0eC5sb2cuaW5mbyhjb21wcmVzc01zZylcclxuICAgICAgICAgICAgICBpZiAocGF0aC5leHRuYW1lKGl0ZW0pID09PSAnLmhlaWMnIHx8IHBhdGguZXh0bmFtZShpdGVtKSA9PT0gJy5oZWlmJykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaGVpY0J1ZmZlciA9IGZzLnJlYWRGaWxlU3luYyhpdGVtKVxyXG4gICAgICAgICAgICAgICAgY29uc3QgaGVpY1Jlc3VsdCA9IGF3YWl0IGhlaWNDb252ZXJ0KHtcclxuICAgICAgICAgICAgICAgICAgYnVmZmVyOiBoZWljQnVmZmVyLFxyXG4gICAgICAgICAgICAgICAgICBmb3JtYXQ6ICdKUEVHJyxcclxuICAgICAgICAgICAgICAgICAgcXVhbGl0eTogMVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRlbXBIZWljQ29udmVydEZpbGUgPSBwYXRoLmpvaW4odGVtcEZpbGVQYXRoLCBgJHtwYXRoLmJhc2VuYW1lKGl0ZW0sIHBhdGguZXh0bmFtZShpdGVtKSl9LmpwZ2ApXHJcbiAgICAgICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHRlbXBIZWljQ29udmVydEZpbGUsIEJ1ZmZlci5mcm9tKGhlaWNSZXN1bHQpKVxyXG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtZWRCdWZmZXIgPSBhd2FpdCBpbWFnZVByb2Nlc3MoZnMucmVhZEZpbGVTeW5jKHRlbXBIZWljQ29udmVydEZpbGUpLCBjb21wcmVzc09wdGlvbnMsICcuanBnJylcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtZWRCdWZmZXIgPSBhd2FpdCBpbWFnZVByb2Nlc3ModHJhbnNmb3JtZWRCdWZmZXIgPz8gZnMucmVhZEZpbGVTeW5jKGl0ZW0pLCBjb21wcmVzc09wdGlvbnMsIHBhdGguZXh0bmFtZShpdGVtKSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCF0cmFuc2Zvcm1lZEJ1ZmZlciAmJiBjb21wcmVzc09wdGlvbnM/LmlzUmVtb3ZlRXhpZikge1xyXG4gICAgICAgICAgICAgIGN0eC5sb2cuaW5mbygnUmVtb3ZlIGV4aWYgaW5mby4nKVxyXG4gICAgICAgICAgICAgIHRyYW5zZm9ybWVkQnVmZmVyID0gYXdhaXQgcmVtb3ZlRXhpZihmcy5yZWFkRmlsZVN5bmMoaXRlbSksIHBhdGguZXh0bmFtZShpdGVtKSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodHJhbnNmb3JtZWRCdWZmZXIpIHtcclxuICAgICAgICAgICAgICBsZXQgbmV3RXh0XHJcbiAgICAgICAgICAgICAgaWYgKGNvbXByZXNzT3B0aW9ucz8uaXNDb252ZXJ0KSB7XHJcbiAgICAgICAgICAgICAgICBuZXdFeHQgPSBjb21wcmVzc09wdGlvbnM/LmNvbnZlcnRGb3JtYXQgPz8gJ2pwZydcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbmV3RXh0ID0gcGF0aC5leHRuYW1lKGl0ZW0pXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIG5ld0V4dCA9IG5ld0V4dC5zdGFydHNXaXRoKCcuJykgPyBuZXdFeHQgOiBgLiR7bmV3RXh0fWBcclxuICAgICAgICAgICAgICBjb25zdCB0ZW1wRmlsZSA9IHBhdGguam9pbih0ZW1wRmlsZVBhdGgsIGAke3BhdGguYmFzZW5hbWUoaXRlbSwgcGF0aC5leHRuYW1lKGl0ZW0pKX0ke25ld0V4dH1gKVxyXG4gICAgICAgICAgICAgIGN0eC5yYXdJbnB1dFBhdGghW2luZGV4XSA9IHBhdGguam9pbihwYXRoLmRpcm5hbWUoaXRlbSksIGAke3BhdGguYmFzZW5hbWUoaXRlbSwgcGF0aC5leHRuYW1lKGl0ZW0pKX0ke25ld0V4dH1gKVxyXG4gICAgICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmModGVtcEZpbGUsIHRyYW5zZm9ybWVkQnVmZmVyKVxyXG4gICAgICAgICAgICAgIGN0eC5pbnB1dFtpbmRleF0gPSB0ZW1wRmlsZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSkpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGN0eC5pbnB1dCkge1xyXG4gICAgICAgICAgY3R4LnJhd0lucHV0UGF0aC5wdXNoKGl0ZW0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8vIGxpZmVjeWNsZSBtYWluXHJcbiAgICAgIGF3YWl0IHRoaXMuYmVmb3JlVHJhbnNmb3JtKGN0eClcclxuICAgICAgYXdhaXQgdGhpcy5kb1RyYW5zZm9ybShjdHgpXHJcbiAgICAgIGNvbnN0IHJlbmFtZUNvbmZpZyA9IGN0eC5nZXRDb25maWc8YW55PignYnVpbGRJbi5yZW5hbWUnKSB8fCB7fVxyXG4gICAgICBpZiAocmVuYW1lQ29uZmlnLmVuYWJsZSkge1xyXG4gICAgICAgIGNvbnN0IGZvcm1hdCA9IHJlbmFtZUNvbmZpZy5mb3JtYXQgfHwgJ3tmaWxlbmFtZX0nXHJcbiAgICAgICAgY3R4Lm91dHB1dCA9IGN0eC5vdXRwdXQubWFwKChpdGVtOiBJSW1nSW5mbywgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgbGV0IGZpbGVOYW1lID0gaXRlbS5maWxlTmFtZVxyXG4gICAgICAgICAgaWYgKGZvcm1hdCkge1xyXG4gICAgICAgICAgICBmaWxlTmFtZSA9IHJlbmFtZUZpbGVOYW1lV2l0aEN1c3RvbVN0cmluZyhjdHgucmF3SW5wdXRQYXRoIVtpbmRleF0sIGZvcm1hdClcclxuICAgICAgICAgICAgZmlsZU5hbWUgPSBmaWxlTmFtZS5yZXBsYWNlKC9cXC8rL2csICcvJylcclxuICAgICAgICAgICAgaWYgKGZpbGVOYW1lLnNsaWNlKC0xKSA9PT0gJy8nKSB7XHJcbiAgICAgICAgICAgICAgZmlsZU5hbWUgPSBmaWxlTmFtZSArIGluZGV4LnRvU3RyaW5nKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaXRlbS5maWxlTmFtZSA9IGZpbGVOYW1lXHJcbiAgICAgICAgICByZXR1cm4gaXRlbVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgICAgYXdhaXQgdGhpcy5iZWZvcmVVcGxvYWQoY3R4KVxyXG4gICAgICBhd2FpdCB0aGlzLmRvVXBsb2FkKGN0eClcclxuICAgICAgY3R4LmlucHV0ID0gY3R4LnJhd0lucHV0XHJcbiAgICAgIGF3YWl0IHRoaXMuYWZ0ZXJVcGxvYWQoY3R4KVxyXG4gICAgICByZXR1cm4gY3R4XHJcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgY3R4LmxvZy53YXJuKElCdWlsZEluRXZlbnQuRkFJTEVEKVxyXG4gICAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50LlVQTE9BRF9QUk9HUkVTUywgLTEpXHJcbiAgICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuRkFJTEVELCBlKVxyXG4gICAgICBjdHgubG9nLmVycm9yKGUpXHJcbiAgICAgIGlmIChjdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdkZWJ1ZycpKSB7XHJcbiAgICAgICAgdGhyb3cgZVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBjdHhcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgYmVmb3JlVHJhbnNmb3JtIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiB7XHJcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50LlVQTE9BRF9QUk9HUkVTUywgMClcclxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuQkVGT1JFX1RSQU5TRk9STSwgY3R4KVxyXG4gICAgY3R4LmxvZy5pbmZvKCdCZWZvcmUgdHJhbnNmb3JtJylcclxuICAgIGF3YWl0IHRoaXMuaGFuZGxlUGx1Z2lucyhjdHguaGVscGVyLmJlZm9yZVRyYW5zZm9ybVBsdWdpbnMsIGN0eClcclxuICAgIHJldHVybiBjdHhcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgZG9UcmFuc2Zvcm0gKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+IHtcclxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuVVBMT0FEX1BST0dSRVNTLCAzMClcclxuICAgIGNvbnN0IHR5cGUgPSBjdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdwaWNCZWQudHJhbnNmb3JtZXInKSB8fCAncGF0aCdcclxuICAgIGxldCBjdXJyZW50VHJhbnNmb3JtZXIgPSB0eXBlXHJcbiAgICBsZXQgdHJhbnNmb3JtZXIgPSBjdHguaGVscGVyLnRyYW5zZm9ybWVyLmdldCh0eXBlKVxyXG4gICAgaWYgKCF0cmFuc2Zvcm1lcikge1xyXG4gICAgICB0cmFuc2Zvcm1lciA9IGN0eC5oZWxwZXIudHJhbnNmb3JtZXIuZ2V0KCdwYXRoJylcclxuICAgICAgY3VycmVudFRyYW5zZm9ybWVyID0gJ3BhdGgnXHJcbiAgICAgIGN0eC5sb2cud2FybihgQ2FuJ3QgZmluZCB0cmFuc2Zvcm1lciAtICR7dHlwZX0sIHN3aXRjaCB0byBkZWZhdWx0IHRyYW5zZm9ybWVyIC0gcGF0aGApXHJcbiAgICB9XHJcbiAgICBjdHgubG9nLmluZm8oYFRyYW5zZm9ybWluZy4uLiBDdXJyZW50IHRyYW5zZm9ybWVyIGlzIFske2N1cnJlbnRUcmFuc2Zvcm1lcn1dYClcclxuICAgIGF3YWl0IHRyYW5zZm9ybWVyPy5oYW5kbGUoY3R4KVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBiZWZvcmVVcGxvYWQgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+IHtcclxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuVVBMT0FEX1BST0dSRVNTLCA2MClcclxuICAgIGN0eC5sb2cuaW5mbygnQmVmb3JlIHVwbG9hZCcpXHJcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50LkJFRk9SRV9VUExPQUQsIGN0eClcclxuICAgIGF3YWl0IHRoaXMuaGFuZGxlUGx1Z2lucyhjdHguaGVscGVyLmJlZm9yZVVwbG9hZFBsdWdpbnMsIGN0eClcclxuICAgIHJldHVybiBjdHhcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgZG9VcGxvYWQgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+IHtcclxuICAgIGxldCB0eXBlID0gY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxzdHJpbmc+PigncGljQmVkLnVwbG9hZGVyJykgfHwgY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxzdHJpbmc+PigncGljQmVkLmN1cnJlbnQnKSB8fCAnc21tcydcclxuICAgIGxldCB1cGxvYWRlciA9IGN0eC5oZWxwZXIudXBsb2FkZXIuZ2V0KHR5cGUpXHJcbiAgICBsZXQgY3VycmVudFRyYW5zZm9ybWVyID0gdHlwZVxyXG4gICAgaWYgKCF1cGxvYWRlcikge1xyXG4gICAgICB0eXBlID0gJ3NtbXMnXHJcbiAgICAgIGN1cnJlbnRUcmFuc2Zvcm1lciA9ICdzbW1zJ1xyXG4gICAgICB1cGxvYWRlciA9IGN0eC5oZWxwZXIudXBsb2FkZXIuZ2V0KCdzbW1zJylcclxuICAgICAgY3R4LmxvZy53YXJuKGBDYW4ndCBmaW5kIHVwbG9hZGVyIC0gJHt0eXBlfSwgc3dpdGNoIHRvIGRlZmF1bHQgdXBsb2FkZXIgLSBzbW1zYClcclxuICAgIH1cclxuICAgIGN0eC5sb2cuaW5mbyhgVXBsb2FkaW5nLi4uIEN1cnJlbnQgdXBsb2FkZXIgaXMgWyR7Y3VycmVudFRyYW5zZm9ybWVyfV1gKVxyXG4gICAgYXdhaXQgdXBsb2FkZXI/LmhhbmRsZShjdHgpXHJcbiAgICBmb3IgKGNvbnN0IG91dHB1dEltZyBvZiBjdHgub3V0cHV0KSB7XHJcbiAgICAgIG91dHB1dEltZy50eXBlID0gdHlwZVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBhZnRlclVwbG9hZCAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4ge1xyXG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5BRlRFUl9VUExPQUQsIGN0eClcclxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuVVBMT0FEX1BST0dSRVNTLCAxMDApXHJcbiAgICBhd2FpdCB0aGlzLmhhbmRsZVBsdWdpbnMoY3R4LmhlbHBlci5hZnRlclVwbG9hZFBsdWdpbnMsIGN0eClcclxuICAgIGxldCBtc2cgPSAnJ1xyXG4gICAgY29uc3QgbGVuZ3RoID0gY3R4Lm91dHB1dC5sZW5ndGhcclxuICAgIGNvbnN0IGlzRW5jb2RlT3V0cHV0VVJMID0gY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxib29sZWFuPj4oJ3NldHRpbmdzLmVuY29kZU91dHB1dFVSTCcpID09PSB0cnVlXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmICh0eXBlb2YgY3R4Lm91dHB1dFtpXS5pbWdVcmwgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgbXNnICs9IGlzRW5jb2RlT3V0cHV0VVJMID8gaGFuZGxlVXJsRW5jb2RlKGN0eC5vdXRwdXRbaV0uaW1nVXJsISkgOiBjdHgub3V0cHV0W2ldLmltZ1VybCFcclxuICAgICAgICBpZiAoaSAhPT0gbGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgbXNnICs9ICdcXG4nXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGRlbGV0ZSBjdHgub3V0cHV0W2ldLmJhc2U2NEltYWdlXHJcbiAgICAgIGRlbGV0ZSBjdHgub3V0cHV0W2ldLmJ1ZmZlclxyXG4gICAgfVxyXG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5GSU5JU0hFRCwgY3R4KVxyXG4gICAgY3R4LmxvZy5zdWNjZXNzKGBcXG4ke21zZ31gKVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVQbHVnaW5zIChsaWZlQ3ljbGVQbHVnaW5zOiBJTGlmZWN5Y2xlUGx1Z2lucywgY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4ge1xyXG4gICAgY29uc3QgcGx1Z2lucyA9IGxpZmVDeWNsZVBsdWdpbnMuZ2V0TGlzdCgpXHJcbiAgICBjb25zdCBwbHVnaW5OYW1lcyA9IGxpZmVDeWNsZVBsdWdpbnMuZ2V0SWRMaXN0KClcclxuICAgIGNvbnN0IGxpZmVDeWNsZU5hbWUgPSBsaWZlQ3ljbGVQbHVnaW5zLmdldE5hbWUoKVxyXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwocGx1Z2lucy5tYXAoYXN5bmMgKHBsdWdpbjogSVBsdWdpbiwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGN0eC5sb2cuaW5mbyhgJHtsaWZlQ3ljbGVOYW1lfTogJHtwbHVnaW5OYW1lc1tpbmRleF19IHJ1bm5pbmdgKVxyXG4gICAgICAgIGF3YWl0IHBsdWdpbi5oYW5kbGUoY3R4KVxyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgY3R4LmxvZy5lcnJvcihgJHtsaWZlQ3ljbGVOYW1lfTogJHtwbHVnaW5OYW1lc1tpbmRleF19IGVycm9yYClcclxuICAgICAgICB0aHJvdyBlXHJcbiAgICAgIH1cclxuICAgIH0pKVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgTGlmZWN5Y2xlXHJcbiIsImltcG9ydCB7IHR5cGUgSVBpY0dvIH0gZnJvbSAnLi4vdHlwZXMnXHJcblxyXG4vKipcclxuICogY3JlYXRlIGFuIHVuaXF1ZSBjb250ZXh0IGZvciBlYWNoIHVwbG9hZCBwcm9jZXNzXHJcbiAqIEBwYXJhbSBjdHhcclxuICovXHJcbmV4cG9ydCBjb25zdCBjcmVhdGVDb250ZXh0ID0gKGN0eDogSVBpY0dvKTogSVBpY0dvID0+IHtcclxuICByZXR1cm4ge1xyXG4gICAgY29uZmlnUGF0aDogY3R4LmNvbmZpZ1BhdGgsXHJcbiAgICBiYXNlRGlyOiBjdHguYmFzZURpcixcclxuICAgIGxvZzogY3R4LmxvZyxcclxuICAgIGNtZDogY3R4LmNtZCxcclxuICAgIG91dHB1dDogW10sXHJcbiAgICBpbnB1dDogW10sXHJcbiAgICByYXdJbnB1dDogW10sXHJcbiAgICBwbHVnaW5Mb2FkZXI6IGN0eC5wbHVnaW5Mb2FkZXIsXHJcbiAgICBwbHVnaW5IYW5kbGVyOiBjdHgucGx1Z2luSGFuZGxlcixcclxuICAgIFJlcXVlc3Q6IGN0eC5SZXF1ZXN0LFxyXG4gICAgaGVscGVyOiBjdHguaGVscGVyLFxyXG4gICAgVkVSU0lPTjogY3R4LlZFUlNJT04sXHJcbiAgICBHVUlfVkVSU0lPTjogY3R4LkdVSV9WRVJTSU9OLFxyXG4gICAgcmVxdWVzdDogY3R4LnJlcXVlc3QsXHJcbiAgICBpMThuOiBjdHguaTE4bixcclxuICAgIGdldENvbmZpZzogY3R4LmdldENvbmZpZy5iaW5kKGN0eCksXHJcbiAgICBzYXZlQ29uZmlnOiBjdHguc2F2ZUNvbmZpZy5iaW5kKGN0eCksXHJcbiAgICByZW1vdmVDb25maWc6IGN0eC5yZW1vdmVDb25maWcuYmluZChjdHgpLFxyXG4gICAgc2V0Q29uZmlnOiBjdHguc2V0Q29uZmlnLmJpbmQoY3R4KSxcclxuICAgIHVuc2V0Q29uZmlnOiBjdHgudW5zZXRDb25maWcuYmluZChjdHgpLFxyXG4gICAgdXBsb2FkOiBjdHgudXBsb2FkLmJpbmQoY3R4KSxcclxuICAgIGFkZExpc3RlbmVyOiBjdHguYWRkTGlzdGVuZXIuYmluZChjdHgpLFxyXG4gICAgb246IGN0eC5vbi5iaW5kKGN0eCksXHJcbiAgICBvbmNlOiBjdHgub25jZS5iaW5kKGN0eCksXHJcbiAgICByZW1vdmVMaXN0ZW5lcjogY3R4LnJlbW92ZUxpc3RlbmVyLmJpbmQoY3R4KSxcclxuICAgIG9mZjogY3R4Lm9mZi5iaW5kKGN0eCksXHJcbiAgICByZW1vdmVBbGxMaXN0ZW5lcnM6IGN0eC5yZW1vdmVBbGxMaXN0ZW5lcnMuYmluZChjdHgpLFxyXG4gICAgc2V0TWF4TGlzdGVuZXJzOiBjdHguc2V0TWF4TGlzdGVuZXJzLmJpbmQoY3R4KSxcclxuICAgIGdldE1heExpc3RlbmVyczogY3R4LmdldE1heExpc3RlbmVycy5iaW5kKGN0eCksXHJcbiAgICBsaXN0ZW5lcnM6IGN0eC5saXN0ZW5lcnMuYmluZChjdHgpLFxyXG4gICAgcmF3TGlzdGVuZXJzOiBjdHgucmF3TGlzdGVuZXJzLmJpbmQoY3R4KSxcclxuICAgIGVtaXQ6IGN0eC5lbWl0LmJpbmQoY3R4KSxcclxuICAgIGxpc3RlbmVyQ291bnQ6IGN0eC5saXN0ZW5lckNvdW50LmJpbmQoY3R4KSxcclxuICAgIHByZXBlbmRMaXN0ZW5lcjogY3R4LnByZXBlbmRMaXN0ZW5lci5iaW5kKGN0eCksXHJcbiAgICBwcmVwZW5kT25jZUxpc3RlbmVyOiBjdHgucHJlcGVuZE9uY2VMaXN0ZW5lci5iaW5kKGN0eCksXHJcbiAgICBldmVudE5hbWVzOiBjdHguZXZlbnROYW1lcy5iaW5kKGN0eClcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgdHlwZSBJUGljR28sIHR5cGUgSVBsdWdpbkNvbmZpZywgdHlwZSBJU21tc0NvbmZpZywgdHlwZSBJT2xkUmVxT3B0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcclxuaW1wb3J0IHsgdHlwZSBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXHJcblxyXG5jb25zdCBwb3N0T3B0aW9ucyA9IChmaWxlTmFtZTogc3RyaW5nLCBpbWFnZTogQnVmZmVyLCBhcGlUb2tlbjogc3RyaW5nLCBiYWNrdXBEb21haW4gPSAnJyk6IElPbGRSZXFPcHRpb25zID0+IHtcclxuICBjb25zdCBkb21haW4gPSBiYWNrdXBEb21haW4gfHwgJ3NtLm1zJ1xyXG4gIHJldHVybiB7XHJcbiAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgIHVybDogYGh0dHBzOi8vJHtkb21haW59L2FwaS92Mi91cGxvYWRgLFxyXG4gICAgaGVhZGVyczoge1xyXG4gICAgICBjb250ZW50VHlwZTogJ211bHRpcGFydC9mb3JtLWRhdGEnLFxyXG4gICAgICAnVXNlci1BZ2VudCc6ICdQaWNMaXN0JyxcclxuICAgICAgQXV0aG9yaXphdGlvbjogYXBpVG9rZW5cclxuICAgIH0sXHJcbiAgICBmb3JtRGF0YToge1xyXG4gICAgICBzbWZpbGU6IHtcclxuICAgICAgICB2YWx1ZTogaW1hZ2UsXHJcbiAgICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgICAgZmlsZW5hbWU6IGZpbGVOYW1lXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBzc2w6ICd0cnVlJ1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcclxuICBjb25zdCBzbW1zQ29uZmlnID0gY3R4LmdldENvbmZpZzxJU21tc0NvbmZpZz4oJ3BpY0JlZC5zbW1zJylcclxuICBpZiAoIXNtbXNDb25maWcpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignQ2FuIG5vdCBmaW5kIHNtbXMgY29uZmlnIScpXHJcbiAgfVxyXG4gIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XHJcbiAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xyXG4gICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XHJcbiAgICAgIGxldCBpbWFnZSA9IGltZy5idWZmZXJcclxuICAgICAgaWYgKCFpbWFnZSAmJiBpbWcuYmFzZTY0SW1hZ2UpIHtcclxuICAgICAgICBpbWFnZSA9IEJ1ZmZlci5mcm9tKGltZy5iYXNlNjRJbWFnZSwgJ2Jhc2U2NCcpXHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgcG9zdENvbmZpZyA9IHBvc3RPcHRpb25zKGltZy5maWxlTmFtZSwgaW1hZ2UsIHNtbXNDb25maWc/LnRva2VuLCBzbW1zQ29uZmlnPy5iYWNrdXBEb21haW4pXHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgcmVzOiBzdHJpbmcgPSBhd2FpdCBjdHgucmVxdWVzdChwb3N0Q29uZmlnKVxyXG4gICAgICAgIGNvbnN0IGJvZHkgPSBKU09OLnBhcnNlKHJlcylcclxuICAgICAgICBpZiAoYm9keS5jb2RlID09PSAnc3VjY2VzcycpIHtcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXHJcbiAgICAgICAgICBpbWcuaW1nVXJsID0gYm9keS5kYXRhLnVybFxyXG4gICAgICAgICAgaW1nLmhhc2ggPSBib2R5LmRhdGEuaGFzaFxyXG4gICAgICAgIH0gZWxzZSBpZiAoYm9keS5jb2RlID09PSAnaW1hZ2VfcmVwZWF0ZWQnICYmIHR5cGVvZiBib2R5LmltYWdlcyA9PT0gJ3N0cmluZycpIHsgLy8gZG8gZXh0cmEgY2hlY2sgc2luY2UgdGhpcyBlcnJvciByZXR1cm4gaXMgbm90IGRvY3VtZW50ZWQgYXQgaHR0cHM6Ly9kb2Muc20ubXMvI2FwaS1JbWFnZS1VcGxvYWRcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXHJcbiAgICAgICAgICBpbWcuaW1nVXJsID0gYm9keS5pbWFnZXNcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcclxuICAgICAgICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcclxuICAgICAgICAgICAgYm9keTogYm9keS5tZXNzYWdlXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGJvZHkubWVzc2FnZSlcclxuICAgICAgICB9XHJcbiAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgIGN0eC5sb2cuZXJyb3IoZSlcclxuICAgICAgICB0aHJvdyBlXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIGN0eFxyXG59XHJcblxyXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xyXG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElTbW1zQ29uZmlnPigncGljQmVkLnNtbXMnKSB8fCB7fVxyXG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xyXG4gICAge1xyXG4gICAgICBuYW1lOiAndG9rZW4nLFxyXG4gICAgICBtZXNzYWdlOiAnYXBpIHRva2VuJyxcclxuICAgICAgdHlwZTogJ3Bhc3N3b3JkJyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TTU1TX1RPS0VOJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy50b2tlbiB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdiYWNrdXBEb21haW4nLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TTU1TX0JBQ0tVUF9ET01BSU4nKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TTU1TX01FU1NBR0VfQkFDS1VQX0RPTUFJTicpXHJcbiAgICAgIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU01NU19CQUNLVVBfRE9NQUlOJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5iYWNrdXBEb21haW4gfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfVxyXG4gIF1cclxuICByZXR1cm4gY29uZmlnXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyIChjdHg6IElQaWNHbyk6IHZvaWQge1xyXG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoJ3NtbXMnLCB7XHJcbiAgICBnZXQgbmFtZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU01NUycpIH0sXHJcbiAgICBoYW5kbGUsXHJcbiAgICBjb25maWdcclxuICB9KVxyXG59XHJcbiIsImltcG9ydCBjcnlwdG8gZnJvbSAnY3J5cHRvJ1xyXG5pbXBvcnQgbWltZSBmcm9tICdtaW1lLXR5cGVzJ1xyXG5pbXBvcnQgeyB0eXBlIElQaWNHbywgdHlwZSBJUGx1Z2luQ29uZmlnLCB0eXBlIElUY3l1bkNvbmZpZywgdHlwZSBJT2xkUmVxT3B0aW9uc1dpdGhGdWxsUmVzcG9uc2UgfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB7IHR5cGUgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xyXG5cclxuLy8gZ2VuZXJhdGUgQ09TIHNpZ25hdHVyZSBzdHJpbmdcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSVNpZ25hdHVyZSB7XHJcbiAgc2lnbmF0dXJlOiBzdHJpbmdcclxuICBhcHBJZDogc3RyaW5nXHJcbiAgYnVja2V0OiBzdHJpbmdcclxuICBzaWduVGltZTogc3RyaW5nXHJcbn1cclxuXHJcbmNvbnN0IGdlbmVyYXRlU2lnbmF0dXJlID0gKG9wdGlvbnM6IElUY3l1bkNvbmZpZywgZmlsZU5hbWU6IHN0cmluZyk6IElTaWduYXR1cmUgPT4ge1xyXG4gIGNvbnN0IHNlY3JldElkID0gb3B0aW9ucy5zZWNyZXRJZFxyXG4gIGNvbnN0IHNlY3JldEtleSA9IG9wdGlvbnMuc2VjcmV0S2V5XHJcbiAgY29uc3QgYXBwSWQgPSBvcHRpb25zLmFwcElkXHJcbiAgY29uc3QgYnVja2V0ID0gb3B0aW9ucy5idWNrZXRcclxuICBsZXQgc2lnbmF0dXJlXHJcbiAgbGV0IHNpZ25UaW1lOiBzdHJpbmcgPSAnJ1xyXG4gIGlmICghb3B0aW9ucy52ZXJzaW9uIHx8IG9wdGlvbnMudmVyc2lvbiA9PT0gJ3Y0Jykge1xyXG4gICAgY29uc3QgcmFuZG9tID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwMDAwMDAwMDApXHJcbiAgICBjb25zdCBjdXJyZW50ID0gTWF0aC5mbG9vcihuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDApIC0gMVxyXG4gICAgY29uc3QgZXhwaXJlZCA9IGN1cnJlbnQgKyAzNjAwXHJcblxyXG4gICAgY29uc3QgbXVsdGlTaWduYXR1cmUgPSBgYT0ke2FwcElkfSZiPSR7YnVja2V0fSZrPSR7c2VjcmV0SWR9JmU9JHtleHBpcmVkfSZ0PSR7Y3VycmVudH0mcj0ke3JhbmRvbX0mZj1gXHJcblxyXG4gICAgY29uc3Qgc2lnbkhleEtleSA9IGNyeXB0by5jcmVhdGVIbWFjKCdzaGExJywgc2VjcmV0S2V5KS51cGRhdGUobXVsdGlTaWduYXR1cmUpLmRpZ2VzdCgpXHJcbiAgICBjb25zdCB0ZW1wU3RyaW5nID0gQnVmZmVyLmNvbmNhdChbc2lnbkhleEtleSwgQnVmZmVyLmZyb20obXVsdGlTaWduYXR1cmUpXSlcclxuICAgIHNpZ25hdHVyZSA9IEJ1ZmZlci5mcm9tKHRlbXBTdHJpbmcpLnRvU3RyaW5nKCdiYXNlNjQnKVxyXG4gIH0gZWxzZSB7XHJcbiAgICAvLyBodHRwczovL2Nsb3VkLnRlbmNlbnQuY29tL2RvY3VtZW50L3Byb2R1Y3QvNDM2Lzc3Nzgjc2lnbmF0dXJlXHJcbiAgICBjb25zdCB0b2RheSA9IE1hdGguZmxvb3IobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKVxyXG4gICAgY29uc3QgdG9tb3Jyb3cgPSB0b2RheSArIDg2NDAwXHJcbiAgICBzaWduVGltZSA9IGAke3RvZGF5fTske3RvbW9ycm93fWBcclxuICAgIGNvbnN0IHNpZ25LZXkgPSBjcnlwdG8uY3JlYXRlSG1hYygnc2hhMScsIHNlY3JldEtleSkudXBkYXRlKHNpZ25UaW1lKS5kaWdlc3QoJ2hleCcpXHJcbiAgICBjb25zdCBlbmRwb2ludCA9IG9wdGlvbnMuZW5kcG9pbnQgPyBvcHRpb25zLmVuZHBvaW50IDogYGNvcy4ke29wdGlvbnMuYXJlYX0ubXlxY2xvdWQuY29tYFxyXG4gICAgY29uc3QgaHR0cFN0cmluZyA9IGBwdXRcXG4vJHtvcHRpb25zLnBhdGh9JHtmaWxlTmFtZX1cXG5cXG5ob3N0PSR7b3B0aW9ucy5idWNrZXR9LiR7ZW5kcG9pbnR9XFxuYFxyXG4gICAgY29uc3Qgc2hhMWVkSHR0cFN0cmluZyA9IGNyeXB0by5jcmVhdGVIYXNoKCdzaGExJykudXBkYXRlKGh0dHBTdHJpbmcpLmRpZ2VzdCgnaGV4JylcclxuICAgIGNvbnN0IHN0cmluZ1RvU2lnbiA9IGBzaGExXFxuJHtzaWduVGltZX1cXG4ke3NoYTFlZEh0dHBTdHJpbmd9XFxuYFxyXG4gICAgc2lnbmF0dXJlID0gY3J5cHRvLmNyZWF0ZUhtYWMoJ3NoYTEnLCBzaWduS2V5KS51cGRhdGUoc3RyaW5nVG9TaWduKS5kaWdlc3QoJ2hleCcpXHJcbiAgfVxyXG4gIHJldHVybiB7XHJcbiAgICBzaWduYXR1cmUsXHJcbiAgICBhcHBJZCxcclxuICAgIGJ1Y2tldCxcclxuICAgIHNpZ25UaW1lXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBwb3N0T3B0aW9ucyA9IChvcHRpb25zOiBJVGN5dW5Db25maWcsIGZpbGVOYW1lOiBzdHJpbmcsIHNpZ25hdHVyZTogSVNpZ25hdHVyZSwgaW1hZ2U6IEJ1ZmZlciwgdmVyc2lvbjogc3RyaW5nKTogSU9sZFJlcU9wdGlvbnNXaXRoRnVsbFJlc3BvbnNlID0+IHtcclxuICBjb25zdCBhcmVhID0gb3B0aW9ucy5hcmVhXHJcbiAgY29uc3QgcGF0aCA9IG9wdGlvbnMucGF0aFxyXG4gIGlmICghb3B0aW9ucy52ZXJzaW9uIHx8IG9wdGlvbnMudmVyc2lvbiA9PT0gJ3Y0Jykge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICAgIHVybDogYGh0dHA6Ly8ke2FyZWF9LmZpbGUubXlxY2xvdWQuY29tL2ZpbGVzL3YyLyR7c2lnbmF0dXJlLmFwcElkfS8ke3NpZ25hdHVyZS5idWNrZXR9LyR7ZW5jb2RlVVJJKHBhdGgpfSR7ZmlsZU5hbWV9YCxcclxuICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgIEhvc3Q6IGAke2FyZWF9LmZpbGUubXlxY2xvdWQuY29tYCxcclxuICAgICAgICBBdXRob3JpemF0aW9uOiBzaWduYXR1cmUuc2lnbmF0dXJlLFxyXG4gICAgICAgIGNvbnRlbnRUeXBlOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScsXHJcbiAgICAgICAgJ1VzZXItQWdlbnQnOiBgUGljR287JHt2ZXJzaW9ufTtudWxsO251bGxgXHJcbiAgICAgIH0sXHJcbiAgICAgIGZvcm1EYXRhOiB7XHJcbiAgICAgICAgb3A6ICd1cGxvYWQnLFxyXG4gICAgICAgIGZpbGVjb250ZW50OiBpbWFnZVxyXG4gICAgICB9LFxyXG4gICAgICByZXNvbHZlV2l0aEZ1bGxSZXNwb25zZTogdHJ1ZVxyXG4gICAgfVxyXG4gIH0gZWxzZSB7XHJcbiAgICBjb25zdCBlbmRwb2ludCA9IG9wdGlvbnMuZW5kcG9pbnQgPyBvcHRpb25zLmVuZHBvaW50IDogYGNvcy4ke29wdGlvbnMuYXJlYX0ubXlxY2xvdWQuY29tYFxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgbWV0aG9kOiAnUFVUJyxcclxuICAgICAgdXJsOiBgaHR0cDovLyR7b3B0aW9ucy5idWNrZXR9LiR7ZW5kcG9pbnR9LyR7ZW5jb2RlVVJJQ29tcG9uZW50KHBhdGgpfSR7ZW5jb2RlVVJJQ29tcG9uZW50KGZpbGVOYW1lKX1gLFxyXG4gICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgSG9zdDogYCR7b3B0aW9ucy5idWNrZXR9LiR7ZW5kcG9pbnR9YCxcclxuICAgICAgICBBdXRob3JpemF0aW9uOiBgcS1zaWduLWFsZ29yaXRobT1zaGExJnEtYWs9JHtvcHRpb25zLnNlY3JldElkfSZxLXNpZ24tdGltZT0ke3NpZ25hdHVyZS5zaWduVGltZX0mcS1rZXktdGltZT0ke3NpZ25hdHVyZS5zaWduVGltZX0mcS1oZWFkZXItbGlzdD1ob3N0JnEtdXJsLXBhcmFtLWxpc3Q9JnEtc2lnbmF0dXJlPSR7c2lnbmF0dXJlLnNpZ25hdHVyZX1gLFxyXG4gICAgICAgIGNvbnRlbnRUeXBlOiBtaW1lLmxvb2t1cChmaWxlTmFtZSkgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsXHJcbiAgICAgICAgJ1VzZXItQWdlbnQnOiBgUGljR287JHt2ZXJzaW9ufTtudWxsO251bGxgXHJcbiAgICAgIH0sXHJcbiAgICAgIGJvZHk6IGltYWdlLFxyXG4gICAgICByZXNvbHZlV2l0aEZ1bGxSZXNwb25zZTogdHJ1ZVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28gfCBib29sZWFuPiA9PiB7XHJcbiAgY29uc3QgdGNZdW5PcHRpb25zID0gY3R4LmdldENvbmZpZzxJVGN5dW5Db25maWc+KCdwaWNCZWQudGN5dW4nKVxyXG4gIGlmICghdGNZdW5PcHRpb25zKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhblxcJ3QgZmluZCB0ZW5jZW50IENPUyBjb25maWcnKVxyXG4gIH1cclxuICB0cnkge1xyXG4gICAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcclxuICAgIGNvbnN0IGN1c3RvbVVybCA9IHRjWXVuT3B0aW9ucy5jdXN0b21VcmxcclxuICAgIGNvbnN0IHBhdGggPSB0Y1l1bk9wdGlvbnMucGF0aCA/PyAnJ1xyXG4gICAgY29uc3QgdXNlVjQgPSAhdGNZdW5PcHRpb25zLnZlcnNpb24gfHwgdGNZdW5PcHRpb25zLnZlcnNpb24gPT09ICd2NCdcclxuICAgIGZvciAoY29uc3QgaW1nIG9mIGltZ0xpc3QpIHtcclxuICAgICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XHJcbiAgICAgICAgY29uc3Qgc2lnbmF0dXJlID0gZ2VuZXJhdGVTaWduYXR1cmUodGNZdW5PcHRpb25zLCBpbWcuZmlsZU5hbWUpXHJcbiAgICAgICAgaWYgKCFzaWduYXR1cmUpIHtcclxuICAgICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgaW1hZ2UgPSBpbWcuYnVmZmVyXHJcbiAgICAgICAgaWYgKCFpbWFnZSAmJiBpbWcuYmFzZTY0SW1hZ2UpIHtcclxuICAgICAgICAgIGltYWdlID0gQnVmZmVyLmZyb20oaW1nLmJhc2U2NEltYWdlLCAnYmFzZTY0JylcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHBvc3RPcHRpb25zKHRjWXVuT3B0aW9ucywgaW1nLmZpbGVOYW1lLCBzaWduYXR1cmUsIGltYWdlLCBjdHguR1VJX1ZFUlNJT04gfHwgY3R4LlZFUlNJT04pXHJcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgY3R4LnJlcXVlc3Qob3B0aW9ucylcclxuICAgICAgICAgIC50aGVuKChyZXM6IGFueSkgPT4gcmVzKVxyXG4gICAgICAgICAgLmNhdGNoKChlcnI6IEVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgc3RhdHVzQ29kZTogNDAwLFxyXG4gICAgICAgICAgICAgIGJvZHk6IHtcclxuICAgICAgICAgICAgICAgIG1zZzogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQVVUSF9GQUlMRUQnKSxcclxuICAgICAgICAgICAgICAgIGVyclxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICBsZXQgYm9keVxyXG4gICAgICAgIGlmICh1c2VWNCAmJiB0eXBlb2YgcmVzID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgYm9keSA9IEpTT04ucGFyc2UocmVzKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBib2R5ID0gcmVzXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChib2R5LnN0YXR1c0NvZGUgPT09IDQwMCkge1xyXG4gICAgICAgICAgaWYgKGJvZHk/LmJvZHk/LmVycikge1xyXG4gICAgICAgICAgICB0aHJvdyBib2R5LmJvZHkuZXJyXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYm9keT8uYm9keT8ubXNnIHx8IGJvZHk/LmJvZHk/Lm1lc3NhZ2UpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG9wdGlvblVybCA9IHRjWXVuT3B0aW9ucy5vcHRpb25zIHx8ICcnXHJcbiAgICAgICAgY29uc3Qgc2xpbSA9IHRjWXVuT3B0aW9ucy5zbGltID09PSB1bmRlZmluZWQgPyBmYWxzZSA6ICEhdGNZdW5PcHRpb25zLnNsaW1cclxuICAgICAgICBpZiAodXNlVjQgJiYgYm9keS5tZXNzYWdlID09PSAnU1VDQ0VTUycpIHtcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXHJcbiAgICAgICAgICBpZiAoY3VzdG9tVXJsKSB7XHJcbiAgICAgICAgICAgIGltZy5pbWdVcmwgPSBgJHtjdXN0b21Vcmx9LyR7cGF0aH0ke2ltZy5maWxlTmFtZX1gXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7Ym9keS5kYXRhLnNvdXJjZV91cmwgYXMgc3RyaW5nfSR7b3B0aW9uVXJsfWBcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKCF1c2VWNCAmJiBib2R5ICYmIGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxyXG4gICAgICAgICAgaWYgKGN1c3RvbVVybCkge1xyXG4gICAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7Y3VzdG9tVXJsfS8ke2VuY29kZVVSSUNvbXBvbmVudChwYXRoKX0ke2VuY29kZVVSSUNvbXBvbmVudChpbWcuZmlsZU5hbWUpfSR7b3B0aW9uVXJsfWAucmVwbGFjZSgvJTJGL2csICcvJylcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZHBvaW50ID0gdGNZdW5PcHRpb25zLmVuZHBvaW50ID8gdGNZdW5PcHRpb25zLmVuZHBvaW50IDogYGNvcy4ke3RjWXVuT3B0aW9ucy5hcmVhfS5teXFjbG91ZC5jb21gXHJcbiAgICAgICAgICAgIGltZy5pbWdVcmwgPSBgaHR0cHM6Ly8ke3RjWXVuT3B0aW9ucy5idWNrZXR9LiR7ZW5kcG9pbnR9LyR7ZW5jb2RlVVJJQ29tcG9uZW50KHBhdGgpfSR7ZW5jb2RlVVJJQ29tcG9uZW50KGltZy5maWxlTmFtZSl9JHtvcHRpb25Vcmx9YC5yZXBsYWNlKC8lMkYvZywgJy8nKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IocmVzLmJvZHkubXNnKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2xpbSkge1xyXG4gICAgICAgICAgaWYgKG9wdGlvblVybCkge1xyXG4gICAgICAgICAgICBpbWcuaW1nVXJsICs9ICcmaW1hZ2VTbGltJ1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaW1nLmltZ1VybCArPSAnP2ltYWdlU2xpbSdcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBjdHhcclxuICB9IGNhdGNoIChlcnI6IGFueSkge1xyXG4gICAgaWYgKCF0Y1l1bk9wdGlvbnMudmVyc2lvbiB8fCB0Y1l1bk9wdGlvbnMudmVyc2lvbiA9PT0gJ3Y0Jykge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IGJvZHkgPSBKU09OLnBhcnNlKGVyci5lcnJvcilcclxuICAgICAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xyXG4gICAgICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcclxuICAgICAgICAgIGJvZHk6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRURfUkVBU09OJywge1xyXG4gICAgICAgICAgICBjb2RlOiBib2R5LmNvZGUgYXMgc3RyaW5nXHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICAgIHRleHQ6ICdodHRwczovL2Nsb3VkLnRlbmNlbnQuY29tL2RvY3VtZW50L3Byb2R1Y3QvNDM2Lzg0MzInXHJcbiAgICAgICAgfSlcclxuICAgICAgfSBjYXRjaCAoZSkge31cclxuICAgIH1cclxuICAgIHRocm93IGVyclxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcclxuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJVGN5dW5Db25maWc+KCdwaWNCZWQudGN5dW4nKSB8fCB7fVxyXG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xyXG4gICAge1xyXG4gICAgICBuYW1lOiAndmVyc2lvbicsXHJcbiAgICAgIHR5cGU6ICdsaXN0JyxcclxuICAgICAgYWxpYXM6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfVkVSU0lPTicpLFxyXG4gICAgICBjaG9pY2VzOiBbJ3Y0JywgJ3Y1J10sXHJcbiAgICAgIGRlZmF1bHQ6ICd2NScsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3NlY3JldElkJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUSUQnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnNlY3JldElkIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3NlY3JldEtleScsXHJcbiAgICAgIHR5cGU6ICdwYXNzd29yZCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVEtFWScpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuc2VjcmV0S2V5IHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2J1Y2tldCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX0JVQ0tFVCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYnVja2V0IHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2FwcElkJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX0FQUElEJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfQVBQSUQnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmFwcElkIHx8ICcnLFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQVBQSUQnKSB9LFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2FyZWEnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfQVJFQScpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX0FSRUEnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmFyZWEgfHwgJycsXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9BUkVBJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdlbmRwb2ludCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9FTkRQT0lOVCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX0VORFBPSU5UJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5lbmRwb2ludCB8fCAnJyxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0VORFBPSU5UJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAncGF0aCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9QQVRIJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfUEFUSCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGF0aCB8fCAnJyxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX1BBVEgnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdjdXN0b21VcmwnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfQ1VTVE9NVVJMJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfQ1VTVE9NVVJMJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5jdXN0b21VcmwgfHwgJycsXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9DVVNUT01VUkwnKSB9LFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdvcHRpb25zJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5vcHRpb25zIHx8ICcnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfT1BUSU9OUycpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX09QVElPTlMnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfT1BUSU9OUycpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3NsaW0nLFxyXG4gICAgICB0eXBlOiAnY29uZmlybScsXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuc2xpbSA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiAhIXVzZXJDb25maWcuc2xpbSxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU0nKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBnZXQgY29uZmlybVRleHQgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNX0NPTkZJUk0nKSB9LFxyXG4gICAgICBnZXQgY2FuY2VsVGV4dCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fQ0FOQ0VMJykgfSxcclxuICAgICAgZ2V0IHRpcHMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNX1RJUCcpIH1cclxuICAgIH1cclxuICBdXHJcbiAgcmV0dXJuIGNvbmZpZ1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlciAoY3R4OiBJUGljR28pOiB2b2lkIHtcclxuICBjdHguaGVscGVyLnVwbG9hZGVyLnJlZ2lzdGVyKCd0Y3l1bicsIHtcclxuICAgIGdldCBuYW1lICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVUQnKSB9LFxyXG4gICAgaGFuZGxlLFxyXG4gICAgY29uZmlnXHJcbiAgfSlcclxufVxyXG4iLCJpbXBvcnQgeyB0eXBlIElQaWNHbywgdHlwZSBJUGx1Z2luQ29uZmlnLCB0eXBlIElHaXRodWJDb25maWcsIHR5cGUgSU9sZFJlcU9wdGlvbnNXaXRoSlNPTiB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcclxuaW1wb3J0IHsgdHlwZSBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXHJcbmltcG9ydCBtaW1lIGZyb20gJ21pbWUtdHlwZXMnXHJcblxyXG5jb25zdCBwb3N0T3B0aW9ucyA9IChmaWxlTmFtZTogc3RyaW5nLCBvcHRpb25zOiBJR2l0aHViQ29uZmlnLCBkYXRhOiBhbnkpOiBJT2xkUmVxT3B0aW9uc1dpdGhKU09OID0+IHtcclxuICBjb25zdCBwYXRoID0gb3B0aW9ucy5wYXRoIHx8ICcnXHJcbiAgY29uc3QgeyB0b2tlbiwgcmVwbyB9ID0gb3B0aW9uc1xyXG4gIHJldHVybiB7XHJcbiAgICBtZXRob2Q6ICdQVVQnLFxyXG4gICAgdXJsOiBgaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy8ke3JlcG99L2NvbnRlbnRzLyR7ZW5jb2RlVVJJKHBhdGgpfSR7ZW5jb2RlVVJJQ29tcG9uZW50KGZpbGVOYW1lKX1gLnJlcGxhY2UoLyUyRi9nLCAnLycpLFxyXG4gICAgaGVhZGVyczoge1xyXG4gICAgICBBdXRob3JpemF0aW9uOiBgdG9rZW4gJHt0b2tlbn1gLFxyXG4gICAgICAnVXNlci1BZ2VudCc6ICdQaWNMaXN0JyxcclxuICAgICAgJ0NvbnRlbnQtVHlwZSc6IG1pbWUubG9va3VwKGZpbGVOYW1lKSB8fCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJ1xyXG4gICAgfSxcclxuICAgIGJvZHk6IGRhdGEsXHJcbiAgICBqc29uOiB0cnVlXHJcbiAgfSBhcyBjb25zdFxyXG59XHJcblxyXG5jb25zdCBnZXRPcHRpb25zID0gKGZpbGVOYW1lOiBzdHJpbmcsIG9wdGlvbnM6IElHaXRodWJDb25maWcpOiBJT2xkUmVxT3B0aW9uc1dpdGhKU09OID0+IHtcclxuICBjb25zdCBwYXRoID0gb3B0aW9ucy5wYXRoIHx8ICcnXHJcbiAgY29uc3QgeyB0b2tlbiwgcmVwbywgYnJhbmNoIH0gPSBvcHRpb25zXHJcbiAgcmV0dXJuIHtcclxuICAgIG1ldGhvZDogJ0dFVCcsXHJcbiAgICB1cmw6IGBodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zLyR7cmVwb30vY29udGVudHMvJHtlbmNvZGVVUkkocGF0aCl9JHtlbmNvZGVVUklDb21wb25lbnQoZmlsZU5hbWUpfT9yZWY9JHticmFuY2h9YC5yZXBsYWNlKC8lMkYvZywgJy8nKSxcclxuICAgIGhlYWRlcnM6IHtcclxuICAgICAgQXV0aG9yaXphdGlvbjogYHRva2VuICR7dG9rZW59YCxcclxuICAgICAgJ1VzZXItQWdlbnQnOiAnUGljR28nXHJcbiAgICB9LFxyXG4gICAganNvbjogdHJ1ZVxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcclxuICBjb25zdCBnaXRodWJPcHRpb25zID0gY3R4LmdldENvbmZpZzxJR2l0aHViQ29uZmlnPigncGljQmVkLmdpdGh1YicpXHJcbiAgaWYgKCFnaXRodWJPcHRpb25zKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhblxcJ3QgZmluZCBnaXRodWIgY29uZmlnJylcclxuICB9XHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XHJcbiAgICBjb25zdCB1cGxvYWRQYXRoID0gZ2l0aHViT3B0aW9ucy5wYXRoIHx8ICcnXHJcbiAgICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XHJcbiAgICAgIGlmIChpbWcuZmlsZU5hbWUgJiYgaW1nLmJ1ZmZlcikge1xyXG4gICAgICAgIGNvbnN0IGJhc2U2NEltYWdlID0gaW1nLmJhc2U2NEltYWdlIHx8IEJ1ZmZlci5mcm9tKGltZy5idWZmZXIpLnRvU3RyaW5nKCdiYXNlNjQnKVxyXG4gICAgICAgIGNvbnN0IGRhdGEgPSB7XHJcbiAgICAgICAgICBtZXNzYWdlOiAnVXBsb2FkIGJ5IFBpY0xpc3QnLFxyXG4gICAgICAgICAgYnJhbmNoOiBnaXRodWJPcHRpb25zLmJyYW5jaCxcclxuICAgICAgICAgIGNvbnRlbnQ6IGJhc2U2NEltYWdlLFxyXG4gICAgICAgICAgcGF0aDogdXBsb2FkUGF0aCArIGVuY29kZVVSSShpbWcuZmlsZU5hbWUpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHBvc3RDb25maWcgPSBwb3N0T3B0aW9ucyhpbWcuZmlsZU5hbWUsIGdpdGh1Yk9wdGlvbnMsIGRhdGEpXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGNvbnN0IGJvZHk6IHtcclxuICAgICAgICAgICAgY29udGVudDoge1xyXG4gICAgICAgICAgICAgIGRvd25sb2FkX3VybDogc3RyaW5nXHJcbiAgICAgICAgICAgICAgc2hhOiBzdHJpbmdcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSA9IGF3YWl0IGN0eC5yZXF1ZXN0KHBvc3RDb25maWcpXHJcbiAgICAgICAgICBpZiAoYm9keSkge1xyXG4gICAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXHJcbiAgICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXHJcbiAgICAgICAgICAgIGlmIChnaXRodWJPcHRpb25zLmN1c3RvbVVybCkge1xyXG4gICAgICAgICAgICAgIGltZy5pbWdVcmwgPSBgJHtnaXRodWJPcHRpb25zLmN1c3RvbVVybH0vJHtlbmNvZGVVUklDb21wb25lbnQodXBsb2FkUGF0aCl9JHtlbmNvZGVVUklDb21wb25lbnQoaW1nLmZpbGVOYW1lKX1gLnJlcGxhY2UoLyUyRi9nLCAnLycpXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgaW1nLmltZ1VybCA9IGJvZHkuY29udGVudC5kb3dubG9hZF91cmxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpbWcuaGFzaCA9IGJvZHkuY29udGVudC5zaGFcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU2VydmVyIGVycm9yLCBwbGVhc2UgdHJ5IGFnYWluJylcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xyXG4gICAgICAgICAgaWYgKGVyci5zdGF0dXNDb2RlID09PSA0MjIpIHtcclxuICAgICAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxyXG4gICAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxyXG4gICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBjdHgucmVxdWVzdChnZXRPcHRpb25zKGltZy5maWxlTmFtZSwgZ2l0aHViT3B0aW9ucykpIGFzIGFueVxyXG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMocmVzKS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICBpbWcuaGFzaCA9IHJlcy5zaGFcclxuICAgICAgICAgICAgICBpZiAoZ2l0aHViT3B0aW9ucy5jdXN0b21VcmwpIHtcclxuICAgICAgICAgICAgICAgIGltZy5pbWdVcmwgPSBgJHtnaXRodWJPcHRpb25zLmN1c3RvbVVybH0vJHtlbmNvZGVVUklDb21wb25lbnQodXBsb2FkUGF0aCl9JHtlbmNvZGVVUklDb21wb25lbnQoaW1nLmZpbGVOYW1lKX1gLnJlcGxhY2UoLyUyRi9nLCAnLycpXHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGltZy5pbWdVcmwgPSByZXMuZG93bmxvYWRfdXJsXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignR2V0IENvbnRlbnRzIGVycm9yLCBwbGVhc2UgdHJ5IGFnYWluJylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhyb3cgZXJyXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY3R4XHJcbiAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xyXG4gICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxyXG4gICAgICBib2R5OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdDSEVDS19TRVRUSU5HU19BTkRfTkVUV09SSycpXHJcbiAgICB9KVxyXG4gICAgdGhyb3cgZXJyXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xyXG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElHaXRodWJDb25maWc+KCdwaWNCZWQuZ2l0aHViJykgfHwge31cclxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3JlcG8nLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUJfUkVQTycpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX1JFUE8nKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX01FU1NBR0VfUkVQTycpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucmVwbyB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdicmFuY2gnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUJfQlJBTkNIJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUJfQlJBTkNIJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9NRVNTQUdFX0JSQU5DSCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYnJhbmNoIHx8ICdtYXN0ZXInLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3Rva2VuJyxcclxuICAgICAgdHlwZTogJ3Bhc3N3b3JkJyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUJfVE9LRU4nKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnRva2VuIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3BhdGgnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUJfUEFUSCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX1BBVEgnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX01FU1NBR0VfUEFUSCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGF0aCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnY3VzdG9tVXJsJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX0NVU1RPTVVSTCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX0NVU1RPTVVSTCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUJfTUVTU0FHRV9DVVNUT01VUkwnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmN1c3RvbVVybCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9XHJcbiAgXVxyXG4gIHJldHVybiBjb25maWdcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIgKGN0eDogSVBpY0dvKTogdm9pZCB7XHJcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3RlcignZ2l0aHViJywge1xyXG4gICAgZ2V0IG5hbWUgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQicpIH0sXHJcbiAgICBoYW5kbGUsXHJcbiAgICBjb25maWdcclxuICB9KVxyXG59XHJcbiIsImltcG9ydCBxaW5pdSBmcm9tICdxaW5pdSdcclxuaW1wb3J0IHsgdHlwZSBJUGx1Z2luQ29uZmlnLCB0eXBlIElRaW5pdUNvbmZpZywgdHlwZSBJUGljR28sIHR5cGUgSU9sZFJlcU9wdGlvbnMgfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB7IHR5cGUgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xyXG5pbXBvcnQgbWltZSBmcm9tICdtaW1lLXR5cGVzJ1xyXG5cclxuZnVuY3Rpb24gcG9zdE9wdGlvbnMgKG9wdGlvbnM6IElRaW5pdUNvbmZpZywgZmlsZU5hbWU6IHN0cmluZywgdG9rZW46IHN0cmluZywgaW1nQmFzZTY0OiBzdHJpbmcpOiBJT2xkUmVxT3B0aW9ucyB7XHJcbiAgY29uc3QgYXJlYSA9IHNlbGVjdEFyZWEob3B0aW9ucy5hcmVhIHx8ICd6MCcpXHJcbiAgY29uc3QgcGF0aCA9IG9wdGlvbnMucGF0aCB8fCAnJ1xyXG4gIGNvbnN0IGJhc2U2NEZpbGVOYW1lID0gQnVmZmVyLmZyb20ocGF0aCArIGZpbGVOYW1lLCAndXRmLTgnKS50b1N0cmluZygnYmFzZTY0JykucmVwbGFjZSgvXFwrL2csICctJykucmVwbGFjZSgvXFwvL2csICdfJylcclxuICByZXR1cm4ge1xyXG4gICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICB1cmw6IGBodHRwOi8vdXBsb2FkJHthcmVhfS5xaW5pdXAuY29tL3B1dGI2NC8tMS9rZXkvJHtiYXNlNjRGaWxlTmFtZX1gLFxyXG4gICAgaGVhZGVyczoge1xyXG4gICAgICBBdXRob3JpemF0aW9uOiBgVXBUb2tlbiAke3Rva2VufWAsXHJcbiAgICAgICdDb250ZW50LVR5cGUnOiBtaW1lLmxvb2t1cChmaWxlTmFtZSkgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSdcclxuICAgIH0sXHJcbiAgICBib2R5OiBpbWdCYXNlNjRcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNlbGVjdEFyZWEgKGFyZWE6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgcmV0dXJuIGFyZWEgPT09ICd6MCcgPyAnJyA6ICctJyArIGFyZWFcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0VG9rZW4gKHFpbml1T3B0aW9uczogYW55KTogc3RyaW5nIHtcclxuICBjb25zdCBhY2Nlc3NLZXkgPSBxaW5pdU9wdGlvbnMuYWNjZXNzS2V5XHJcbiAgY29uc3Qgc2VjcmV0S2V5ID0gcWluaXVPcHRpb25zLnNlY3JldEtleVxyXG4gIGNvbnN0IG1hYyA9IG5ldyBxaW5pdS5hdXRoLmRpZ2VzdC5NYWMoYWNjZXNzS2V5LCBzZWNyZXRLZXkpXHJcbiAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgIHNjb3BlOiBxaW5pdU9wdGlvbnMuYnVja2V0XHJcbiAgfVxyXG4gIGNvbnN0IHB1dFBvbGljeSA9IG5ldyBxaW5pdS5ycy5QdXRQb2xpY3kob3B0aW9ucylcclxuICByZXR1cm4gcHV0UG9saWN5LnVwbG9hZFRva2VuKG1hYylcclxufVxyXG5cclxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcclxuICBjb25zdCBxaW5pdU9wdGlvbnMgPSBjdHguZ2V0Q29uZmlnPElRaW5pdUNvbmZpZz4oJ3BpY0JlZC5xaW5pdScpXHJcbiAgaWYgKCFxaW5pdU9wdGlvbnMpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignQ2FuXFwndCBmaW5kIHFpbml1IGNvbmZpZycpXHJcbiAgfVxyXG4gIHRyeSB7XHJcbiAgICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxyXG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xyXG4gICAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcclxuICAgICAgICBjb25zdCBiYXNlNjRJbWFnZSA9IGltZy5iYXNlNjRJbWFnZSB8fCBCdWZmZXIuZnJvbShpbWcuYnVmZmVyKS50b1N0cmluZygnYmFzZTY0JylcclxuICAgICAgICBjb25zdCBvcHRpb25zID0gcG9zdE9wdGlvbnMocWluaXVPcHRpb25zLCBpbWcuZmlsZU5hbWUsIGdldFRva2VuKHFpbml1T3B0aW9ucyksIGJhc2U2NEltYWdlKVxyXG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGN0eC5yZXF1ZXN0KG9wdGlvbnMpXHJcbiAgICAgICAgY29uc3QgYm9keSA9IEpTT04ucGFyc2UocmVzKVxyXG4gICAgICAgIGlmIChib2R5Py5rZXkpIHtcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXHJcbiAgICAgICAgICBjb25zdCBiYXNlVXJsID0gcWluaXVPcHRpb25zLnVybFxyXG4gICAgICAgICAgY29uc3QgdXJsT3B0aW9ucyA9IHFpbml1T3B0aW9ucy5vcHRpb25zIHx8ICcnXHJcbiAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7YmFzZVVybH0vJHtib2R5LmtleSBhcyBzdHJpbmd9JHt1cmxPcHRpb25zfWBcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcclxuICAgICAgICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcclxuICAgICAgICAgICAgYm9keTogYm9keS5tc2dcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICBjdHgubG9nLmVycm9yKCdxaW5pdSBlcnJvcicsIGJvZHkpXHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VwbG9hZCBmYWlsZWQnKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XHJcbiAgICBpZiAoZXJyLm1lc3NhZ2UgIT09ICdVcGxvYWQgZmFpbGVkJykge1xyXG4gICAgICAvLyBlcnIucmVzcG9uc2UgbWF5YmUgdW5kZWZpbmVkXHJcbiAgICAgIGlmIChlcnIucmVzcG9uc2UpIHtcclxuICAgICAgICBjb25zdCBlcnJvciA9IGVyci5yZXNwb25zZS5ib2R5XHJcbiAgICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcclxuICAgICAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXHJcbiAgICAgICAgICBib2R5OiBlcnJvci5lcnJvclxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRocm93IGVyclxyXG4gIH1cclxufVxyXG5cclxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcclxuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJUWluaXVDb25maWc+KCdwaWNCZWQucWluaXUnKSB8fCB7fVxyXG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYWNjZXNzS2V5JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9BQ0NFU1NLRVknKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmFjY2Vzc0tleSB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdzZWNyZXRLZXknLFxyXG4gICAgICB0eXBlOiAncGFzc3dvcmQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX1NFQ1JFVEtFWScpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuc2VjcmV0S2V5IHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2J1Y2tldCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfQlVDS0VUJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5idWNrZXQgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAndXJsJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfVVJMJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9VUkwnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfTUVTU0FHRV9VUkwnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnVybCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdhcmVhJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfQVJFQScpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfQVJFQScpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9NRVNTQUdFX0FSRUEnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmFyZWEgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnb3B0aW9ucycsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX09QVElPTlMnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX09QVElPTlMnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfTUVTU0FHRV9PUFRJT05TJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5vcHRpb25zIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwYXRoJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfUEFUSCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfUEFUSCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9NRVNTQUdFX1BBVEgnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhdGggfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfVxyXG4gIF1cclxuICByZXR1cm4gY29uZmlnXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyIChjdHg6IElQaWNHbyk6IHZvaWQge1xyXG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoJ3Fpbml1Jywge1xyXG4gICAgZ2V0IG5hbWUgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVJykgfSxcclxuICAgIGhhbmRsZSxcclxuICAgIGNvbmZpZ1xyXG4gIH0pXHJcbn1cclxuIiwiaW1wb3J0IHsgdHlwZSBJUGljR28sIHR5cGUgSVBsdWdpbkNvbmZpZywgdHlwZSBJSW1ndXJDb25maWcsIHR5cGUgSU9sZFJlcU9wdGlvbnMsIHR5cGUgSUZ1bGxSZXNwb25zZSB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcclxuaW1wb3J0IHsgdHlwZSBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXHJcblxyXG5jb25zdCBmb3JtYXRBY2Nlc3NUb2tlbiA9IChhY2Nlc3NUb2tlbjogc3RyaW5nKTogc3RyaW5nID0+IGFjY2Vzc1Rva2VuID8gYWNjZXNzVG9rZW4uc3RhcnRzV2l0aCgnQmVhcmVyJykgPyBhY2Nlc3NUb2tlbiA6IGBCZWFyZXIgJHthY2Nlc3NUb2tlbn1gIDogJydcclxuXHJcbmNvbnN0IHBvc3RPcHRpb25zID0gYXN5bmMgKGN0eDogSVBpY0dvLCBvcHRpb25zOiBJSW1ndXJDb25maWcsIGZpbGVOYW1lOiBzdHJpbmcsIGltZ0Jhc2U2NDogc3RyaW5nKTogUHJvbWlzZTxJT2xkUmVxT3B0aW9ucz4gPT4ge1xyXG4gIGNvbnN0IGNsaWVudElkID0gb3B0aW9ucy5jbGllbnRJZCB8fCAnJ1xyXG4gIGNvbnN0IHVzZXJuYW1lID0gb3B0aW9ucy51c2VybmFtZSB8fCAnJ1xyXG4gIGNvbnN0IGFjY2Vzc1Rva2VuID0gZm9ybWF0QWNjZXNzVG9rZW4ob3B0aW9ucy5hY2Nlc3NUb2tlbiB8fCAnJylcclxuICBjb25zdCBhbGJ1bSA9IG9wdGlvbnMuYWxidW0gfHwgJydcclxuICBsZXQgYXV0aG9yaXphdGlvblxyXG4gIGlmICh1c2VybmFtZSAmJiBhY2Nlc3NUb2tlbikge1xyXG4gICAgYXV0aG9yaXphdGlvbiA9IGFjY2Vzc1Rva2VuXHJcbiAgfSBlbHNlIGlmIChjbGllbnRJZCkge1xyXG4gICAgYXV0aG9yaXphdGlvbiA9IGBDbGllbnQtSUQgJHtjbGllbnRJZH1gXHJcbiAgfSBlbHNlIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignY2xpZW50SWQgb3IgYWNjZXNzVG9rZW4gaXMgcmVxdWlyZWQnKVxyXG4gIH1cclxuICBjb25zdCByZXF1ZXN0T3B0aW9uczogSU9sZFJlcU9wdGlvbnMgPSB7XHJcbiAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgIHVybDogJ2h0dHBzOi8vYXBpLmltZ3VyLmNvbS8zL2ltYWdlJyxcclxuICAgIGhlYWRlcnM6IHtcclxuICAgICAgQXV0aG9yaXphdGlvbjogYXV0aG9yaXphdGlvbixcclxuICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJyxcclxuICAgICAgSG9zdDogJ2FwaS5pbWd1ci5jb20nLFxyXG4gICAgICAnVXNlci1BZ2VudCc6ICdQaWNMaXN0J1xyXG4gICAgfSxcclxuICAgIGZvcm1EYXRhOiB7XHJcbiAgICAgIGltYWdlOiBpbWdCYXNlNjQsXHJcbiAgICAgIHR5cGU6ICdiYXNlNjQnLFxyXG4gICAgICBuYW1lOiBmaWxlTmFtZSxcclxuICAgICAgZGVzY3JpcHRpb246ICdVcGxvYWRlZCB3aXRoIFBpY0xpc3QnXHJcbiAgICB9XHJcbiAgfVxyXG4gIGlmICh1c2VybmFtZSAmJiBhY2Nlc3NUb2tlbiAmJiBhbGJ1bSkge1xyXG4gICAgbGV0IGluaXRQYWdlcyA9IDBcclxuICAgIGxldCByZXNcclxuICAgIGxldCBhbGJ1bUhhc2ggPSAnJ1xyXG4gICAgZG8ge1xyXG4gICAgICBjb25zdCBnZXRBbGJ1bUhhc2hPcHRpb25zOiBJT2xkUmVxT3B0aW9ucyA9IHtcclxuICAgICAgICBtZXRob2Q6ICdHRVQnLFxyXG4gICAgICAgIHVybDogYGh0dHBzOi8vYXBpLmltZ3VyLmNvbS8zL2FjY291bnQvJHt1c2VybmFtZX0vYWxidW1zLyR7aW5pdFBhZ2VzfWAsXHJcbiAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgQXV0aG9yaXphdGlvbjogYXV0aG9yaXphdGlvblxyXG4gICAgICAgIH0sXHJcbiAgICAgICAganNvbjogdHJ1ZSxcclxuICAgICAgICByZXNvbHZlV2l0aEZ1bGxSZXNwb25zZTogdHJ1ZSxcclxuICAgICAgICB0aW1lb3V0OiAxMDAwMFxyXG4gICAgICB9XHJcbiAgICAgIGlmIChvcHRpb25zLnByb3h5KSB7XHJcbiAgICAgICAgZ2V0QWxidW1IYXNoT3B0aW9ucy5wcm94eSA9IG9wdGlvbnMucHJveHlcclxuICAgICAgfVxyXG4gICAgICByZXMgPSBhd2FpdCBjdHgucmVxdWVzdChnZXRBbGJ1bUhhc2hPcHRpb25zKSBhcyB1bmtub3duIGFzIElGdWxsUmVzcG9uc2VcclxuICAgICAgaWYgKCEocmVzLnN0YXR1c0NvZGUgPT09IDIwMCAmJiByZXMuYm9keS5zdWNjZXNzKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignU2VydmVyIGVycm9yLCBwbGVhc2UgdHJ5IGFnYWluJylcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBhbGJ1bUxpc3QgPSByZXMuYm9keS5kYXRhXHJcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBhbGJ1bUxpc3QpIHtcclxuICAgICAgICBpZiAoaXRlbS50aXRsZSA9PT0gYWxidW0pIHtcclxuICAgICAgICAgIGFsYnVtSGFzaCA9IGl0ZW0uaWRcclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGluaXRQYWdlcysrXHJcbiAgICB9IHdoaWxlIChyZXMuYm9keS5kYXRhLmxlbmd0aCA+IDApXHJcbiAgICBpZiAoYWxidW1IYXNoICYmIHJlcXVlc3RPcHRpb25zLmZvcm1EYXRhKSB7XHJcbiAgICAgIHJlcXVlc3RPcHRpb25zLmZvcm1EYXRhLmFsYnVtID0gYWxidW1IYXNoXHJcbiAgICB9XHJcbiAgfVxyXG4gIGlmIChvcHRpb25zLnByb3h5KSB7XHJcbiAgICByZXF1ZXN0T3B0aW9ucy5wcm94eSA9IG9wdGlvbnMucHJveHlcclxuICB9XHJcbiAgcmV0dXJuIHJlcXVlc3RPcHRpb25zXHJcbn1cclxuXHJcbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiA9PiB7XHJcbiAgY29uc3QgaW1ndXJPcHRpb25zID0gY3R4LmdldENvbmZpZzxJSW1ndXJDb25maWc+KCdwaWNCZWQuaW1ndXInKVxyXG4gIGlmICghaW1ndXJPcHRpb25zKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhblxcJ3QgZmluZCBpbWd1ciBjb25maWcnKVxyXG4gIH1cclxuICB0cnkge1xyXG4gICAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcclxuICAgIGZvciAoY29uc3QgaW1nIG9mIGltZ0xpc3QpIHtcclxuICAgICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XHJcbiAgICAgICAgY29uc3QgYmFzZTY0SW1hZ2UgPSBpbWcuYmFzZTY0SW1hZ2UgfHwgQnVmZmVyLmZyb20oaW1nLmJ1ZmZlcikudG9TdHJpbmcoJ2Jhc2U2NCcpXHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGF3YWl0IHBvc3RPcHRpb25zKGN0eCwgaW1ndXJPcHRpb25zLCBpbWcuZmlsZU5hbWUsIGJhc2U2NEltYWdlKVxyXG4gICAgICAgIGNvbnN0IHJlczogc3RyaW5nID0gYXdhaXQgY3R4LnJlcXVlc3Qob3B0aW9ucylcclxuICAgICAgICBjb25zdCBib2R5ID0gdHlwZW9mIHJlcyA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKHJlcykgOiByZXNcclxuICAgICAgICBpZiAoYm9keS5zdWNjZXNzKSB7XHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxyXG4gICAgICAgICAgaW1nLmltZ1VybCA9IGJvZHkuZGF0YS5saW5rXHJcbiAgICAgICAgICBpbWcuaGFzaCA9IGJvZHkuZGF0YS5kZWxldGVoYXNoXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU2VydmVyIGVycm9yLCBwbGVhc2UgdHJ5IGFnYWluJylcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBjdHhcclxuICB9IGNhdGNoIChlcnIpIHtcclxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XHJcbiAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXHJcbiAgICAgIGJvZHk6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0NIRUNLX1NFVFRJTkdTX0FORF9ORVRXT1JLJyksXHJcbiAgICAgIHRleHQ6ICdodHRwOi8vZG9jcy5pbWd1ci5jb20vYXBpL2Vycm5vLydcclxuICAgIH0pXHJcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIHN0cmluZyB8IElFcnJvclxyXG4gICAgdGhyb3cgZXJyPy5yZXNwb25zZT8uZGF0YSB8fCBlcnJcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XHJcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SUltZ3VyQ29uZmlnPigncGljQmVkLmltZ3VyJykgfHwge31cclxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2NsaWVudElkJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfQ0xJRU5USUQnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX0NMSUVOVElEJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX01FU1NBR0VfQ0xJRU5USUQnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmNsaWVudElkIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd1c2VybmFtZScsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX1VTRVJOQU1FJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9VU0VSTkFNRScpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9NRVNTQUdFX1VTRVJOQU1FJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy51c2VybmFtZSB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYWNjZXNzVG9rZW4nLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9BQ0NFU1NfVE9LRU4nKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX0FDQ0VTU19UT0tFTicpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9NRVNTQUdFX0FDQ0VTU19UT0tFTicpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYWNjZXNzVG9rZW4gfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2FsYnVtJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfQUxCVU0nKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX0FMQlVNJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX01FU1NBR0VfQUxCVU0nKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmFsYnVtIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwcm94eScsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX1BST1hZJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9QUk9YWScpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9NRVNTQUdFX1BST1hZJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wcm94eSB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9XHJcbiAgXVxyXG4gIHJldHVybiBjb25maWdcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIgKGN0eDogSVBpY0dvKTogdm9pZCB7XHJcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3RlcignaW1ndXInLCB7XHJcbiAgICBnZXQgbmFtZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVInKSB9LFxyXG4gICAgaGFuZGxlLFxyXG4gICAgY29uZmlnXHJcbiAgfSlcclxufVxyXG4iLCJpbXBvcnQgeyB0eXBlIElQaWNHbywgdHlwZSBJUGx1Z2luQ29uZmlnLCB0eXBlIElBbGl5dW5Db25maWcsIHR5cGUgSU9sZFJlcU9wdGlvbnNXaXRoRnVsbFJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCBjcnlwdG8gZnJvbSAnY3J5cHRvJ1xyXG5pbXBvcnQgbWltZSBmcm9tICdtaW1lLXR5cGVzJ1xyXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcclxuaW1wb3J0IHsgdHlwZSBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXHJcblxyXG4vLyBnZW5lcmF0ZSBPU1Mgc2lnbmF0dXJlXHJcbmNvbnN0IGdlbmVyYXRlU2lnbmF0dXJlID0gKG9wdGlvbnM6IElBbGl5dW5Db25maWcsIGZpbGVOYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xyXG4gIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpLnRvVVRDU3RyaW5nKClcclxuICBjb25zdCBtaW1lVHlwZSA9IG1pbWUubG9va3VwKGZpbGVOYW1lKSB8fCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJ1xyXG5cclxuICBjb25zdCBzaWduU3RyaW5nID0gYFBVVFxcblxcbiR7bWltZVR5cGV9XFxuJHtkYXRlfVxcbi8ke29wdGlvbnMuYnVja2V0fS8ke29wdGlvbnMucGF0aH0ke2ZpbGVOYW1lfWBcclxuXHJcbiAgY29uc3Qgc2lnbmF0dXJlID0gY3J5cHRvLmNyZWF0ZUhtYWMoJ3NoYTEnLCBvcHRpb25zLmFjY2Vzc0tleVNlY3JldCkudXBkYXRlKHNpZ25TdHJpbmcpLmRpZ2VzdCgnYmFzZTY0JylcclxuICByZXR1cm4gYE9TUyAke29wdGlvbnMuYWNjZXNzS2V5SWR9OiR7c2lnbmF0dXJlfWBcclxufVxyXG5cclxuY29uc3QgcG9zdE9wdGlvbnMgPSAob3B0aW9uczogSUFsaXl1bkNvbmZpZywgZmlsZU5hbWU6IHN0cmluZywgc2lnbmF0dXJlOiBzdHJpbmcsIGltYWdlOiBCdWZmZXIpOiBJT2xkUmVxT3B0aW9uc1dpdGhGdWxsUmVzcG9uc2UgPT4ge1xyXG4gIHJldHVybiB7XHJcbiAgICBtZXRob2Q6ICdQVVQnLFxyXG4gICAgdXJsOiBgaHR0cHM6Ly8ke29wdGlvbnMuYnVja2V0fS4ke29wdGlvbnMuYXJlYX0uYWxpeXVuY3MuY29tLyR7ZW5jb2RlVVJJKG9wdGlvbnMucGF0aCl9JHtlbmNvZGVVUklDb21wb25lbnQoZmlsZU5hbWUpfWAucmVwbGFjZSgvJTJGL2csICcvJyksXHJcbiAgICBoZWFkZXJzOiB7XHJcbiAgICAgIEhvc3Q6IGAke29wdGlvbnMuYnVja2V0fS4ke29wdGlvbnMuYXJlYX0uYWxpeXVuY3MuY29tYCxcclxuICAgICAgQXV0aG9yaXphdGlvbjogc2lnbmF0dXJlLFxyXG4gICAgICBEYXRlOiBuZXcgRGF0ZSgpLnRvVVRDU3RyaW5nKCksXHJcbiAgICAgICdDb250ZW50LVR5cGUnOiBtaW1lLmxvb2t1cChmaWxlTmFtZSlcclxuICAgIH0sXHJcbiAgICBib2R5OiBpbWFnZSxcclxuICAgIHJlc29sdmVXaXRoRnVsbFJlc3BvbnNlOiB0cnVlXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4gPT4ge1xyXG4gIGNvbnN0IGFsaVl1bk9wdGlvbnMgPSBjdHguZ2V0Q29uZmlnPElBbGl5dW5Db25maWc+KCdwaWNCZWQuYWxpeXVuJylcclxuICBpZiAoIWFsaVl1bk9wdGlvbnMpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignQ2FuXFwndCBmaW5kIGFsaVl1biBPU1MgY29uZmlnJylcclxuICB9XHJcbiAgYWxpWXVuT3B0aW9ucy5wYXRoID0gYWxpWXVuT3B0aW9ucy5wYXRoLnJlcGxhY2UoL1xcLyokLywgJycpLnJlcGxhY2UoL15cXC8qLywgJycpICsgJy8nXHJcbiAgaWYgKGFsaVl1bk9wdGlvbnMucGF0aCA9PT0gJy8nKSB7XHJcbiAgICBhbGlZdW5PcHRpb25zLnBhdGggPSAnJ1xyXG4gIH1cclxuICB0cnkge1xyXG4gICAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcclxuICAgIGNvbnN0IGN1c3RvbVVybCA9IGFsaVl1bk9wdGlvbnMuY3VzdG9tVXJsXHJcbiAgICBjb25zdCBwYXRoID0gYWxpWXVuT3B0aW9ucy5wYXRoID8/ICcnXHJcbiAgICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XHJcbiAgICAgIGlmIChpbWcuZmlsZU5hbWUgJiYgaW1nLmJ1ZmZlcikge1xyXG4gICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IGdlbmVyYXRlU2lnbmF0dXJlKGFsaVl1bk9wdGlvbnMsIGltZy5maWxlTmFtZSlcclxuICAgICAgICBsZXQgaW1hZ2UgPSBpbWcuYnVmZmVyXHJcbiAgICAgICAgaWYgKCFpbWFnZSAmJiBpbWcuYmFzZTY0SW1hZ2UpIHtcclxuICAgICAgICAgIGltYWdlID0gQnVmZmVyLmZyb20oaW1nLmJhc2U2NEltYWdlLCAnYmFzZTY0JylcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHBvc3RPcHRpb25zKGFsaVl1bk9wdGlvbnMsIGltZy5maWxlTmFtZSwgc2lnbmF0dXJlLCBpbWFnZSlcclxuICAgICAgICBjb25zdCBib2R5ID0gYXdhaXQgY3R4LnJlcXVlc3Qob3B0aW9ucylcclxuICAgICAgICBpZiAoYm9keS5zdGF0dXNDb2RlID09PSAyMDApIHtcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXHJcbiAgICAgICAgICBjb25zdCBvcHRpb25VcmwgPSBhbGlZdW5PcHRpb25zLm9wdGlvbnMgfHwgJydcclxuICAgICAgICAgIGlmIChjdXN0b21VcmwpIHtcclxuICAgICAgICAgICAgaW1nLmltZ1VybCA9IGAke2N1c3RvbVVybH0vJHtlbmNvZGVVUklDb21wb25lbnQocGF0aCl9JHtlbmNvZGVVUklDb21wb25lbnQoaW1nLmZpbGVOYW1lKX0ke29wdGlvblVybH1gLnJlcGxhY2UoLyUyRi9nLCAnLycpXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpbWcuaW1nVXJsID0gYGh0dHBzOi8vJHthbGlZdW5PcHRpb25zLmJ1Y2tldH0uJHthbGlZdW5PcHRpb25zLmFyZWF9LmFsaXl1bmNzLmNvbS8ke2VuY29kZVVSSUNvbXBvbmVudChwYXRoKX0ke2VuY29kZVVSSUNvbXBvbmVudChpbWcuZmlsZU5hbWUpfSR7b3B0aW9uVXJsfWAucmVwbGFjZSgvJTJGL2csICcvJylcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVcGxvYWQgZmFpbGVkJylcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBjdHhcclxuICB9IGNhdGNoIChlcnIpIHtcclxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XHJcbiAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXHJcbiAgICAgIGJvZHk6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0NIRUNLX1NFVFRJTkdTJylcclxuICAgIH0pXHJcbiAgICB0aHJvdyBlcnJcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XHJcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SUFsaXl1bkNvbmZpZz4oJ3BpY0JlZC5hbGl5dW4nKSB8fCB7fVxyXG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYWNjZXNzS2V5SWQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWUlEJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5hY2Nlc3NLZXlJZCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdhY2Nlc3NLZXlTZWNyZXQnLFxyXG4gICAgICB0eXBlOiAncGFzc3dvcmQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWVNFQ1JFVCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYWNjZXNzS2V5U2VjcmV0IHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2J1Y2tldCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfQlVDS0VUJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5idWNrZXQgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnYXJlYScsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX0FSRUEnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX0FSRUEnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmFyZWEgfHwgJycsXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX0FSRUEnKSB9LFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3BhdGgnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9QQVRIJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9QQVRIJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfUEFUSCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGF0aCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnY3VzdG9tVXJsJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfQ1VTVE9NVVJMJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9DVVNUT01VUkwnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9DVVNUT01VUkwnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmN1c3RvbVVybCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnb3B0aW9ucycsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX09QVElPTlMnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX09QVElPTlMnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9PUFRJT05TJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5vcHRpb25zIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH1cclxuICBdXHJcbiAgcmV0dXJuIGNvbmZpZ1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlciAoY3R4OiBJUGljR28pOiB2b2lkIHtcclxuICBjdHguaGVscGVyLnVwbG9hZGVyLnJlZ2lzdGVyKCdhbGl5dW4nLCB7XHJcbiAgICBnZXQgbmFtZSAoKSB7XHJcbiAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVUQnKVxyXG4gICAgfSxcclxuICAgIGhhbmRsZSxcclxuICAgIGNvbmZpZ1xyXG4gIH0pXHJcbn1cclxuIiwiaW1wb3J0IHsgdHlwZSBJUGljR28sIHR5cGUgSVBsdWdpbkNvbmZpZywgdHlwZSBJVXB5dW5Db25maWcsIHR5cGUgSU9sZFJlcU9wdGlvbnNXaXRoRnVsbFJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCBjcnlwdG8gZnJvbSAnY3J5cHRvJ1xyXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcclxuaW1wb3J0IHsgdHlwZSBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXHJcbmltcG9ydCB7IHNhZmVQYXJzZSB9IGZyb20gJy4uLy4uL3V0aWxzL2NvbW1vbidcclxuaW1wb3J0IG1pbWUgZnJvbSAnbWltZS10eXBlcydcclxuXHJcbi8vIGdlbmVyYXRlIENPUyBzaWduYXR1cmUgc3RyaW5nXHJcbmNvbnN0IGdlbmVyYXRlU2lnbmF0dXJlID0gKG9wdGlvbnM6IElVcHl1bkNvbmZpZywgZmlsZU5hbWU6IHN0cmluZyk6IHN0cmluZyA9PiB7XHJcbiAgY29uc3QgcGF0aCA9IG9wdGlvbnMucGF0aCB8fCAnJ1xyXG4gIGNvbnN0IG9wZXJhdG9yID0gb3B0aW9ucy5vcGVyYXRvclxyXG4gIGNvbnN0IHBhc3N3b3JkID0gb3B0aW9ucy5wYXNzd29yZFxyXG4gIGNvbnN0IG1kNVBhc3N3b3JkID0gTUQ1KHBhc3N3b3JkKVxyXG4gIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpLnRvVVRDU3RyaW5nKClcclxuICBjb25zdCB1cmkgPSBgLyR7b3B0aW9ucy5idWNrZXR9LyR7ZW5jb2RlVVJJKHBhdGgpfSR7ZW5jb2RlVVJJQ29tcG9uZW50KGZpbGVOYW1lKX1gLnJlcGxhY2UoLyUyRi9nLCAnLycpXHJcbiAgY29uc3QgdmFsdWUgPSBgUFVUJiR7dXJpfSYke2RhdGV9YFxyXG4gIGNvbnN0IHNpZ24gPSBjcnlwdG8uY3JlYXRlSG1hYygnc2hhMScsIG1kNVBhc3N3b3JkKS51cGRhdGUodmFsdWUpLmRpZ2VzdCgnYmFzZTY0JylcclxuICByZXR1cm4gYFVQWVVOICR7b3BlcmF0b3J9OiR7c2lnbn1gXHJcbn1cclxuXHJcbmNvbnN0IHBvc3RPcHRpb25zID0gKG9wdGlvbnM6IElVcHl1bkNvbmZpZywgZmlsZU5hbWU6IHN0cmluZywgc2lnbmF0dXJlOiBzdHJpbmcsIGltYWdlOiBCdWZmZXIpOiBJT2xkUmVxT3B0aW9uc1dpdGhGdWxsUmVzcG9uc2UgPT4ge1xyXG4gIGNvbnN0IGJ1Y2tldCA9IG9wdGlvbnMuYnVja2V0XHJcbiAgY29uc3QgcGF0aCA9IG9wdGlvbnMucGF0aCB8fCAnJ1xyXG4gIHJldHVybiB7XHJcbiAgICBtZXRob2Q6ICdQVVQnLFxyXG4gICAgdXJsOiBgaHR0cHM6Ly92MC5hcGkudXB5dW4uY29tLyR7YnVja2V0fS8ke2VuY29kZVVSSShwYXRoKX0ke2VuY29kZVVSSUNvbXBvbmVudChmaWxlTmFtZSl9YC5yZXBsYWNlKC8lMkYvZywgJy8nKSxcclxuICAgIGhlYWRlcnM6IHtcclxuICAgICAgQXV0aG9yaXphdGlvbjogc2lnbmF0dXJlLFxyXG4gICAgICBEYXRlOiBuZXcgRGF0ZSgpLnRvVVRDU3RyaW5nKCksXHJcbiAgICAgICdDb250ZW50LVR5cGUnOiBtaW1lLmxvb2t1cChmaWxlTmFtZSkgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSdcclxuICAgIH0sXHJcbiAgICBib2R5OiBpbWFnZSxcclxuICAgIHJlc29sdmVXaXRoRnVsbFJlc3BvbnNlOiB0cnVlXHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBNRDUgKGNvbnRlbnQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgcmV0dXJuIGNyeXB0by5jcmVhdGVIYXNoKCdtZDUnKS51cGRhdGUoY29udGVudCkuZGlnZXN0KCdoZXgnKVxyXG59XHJcblxyXG5jb25zdCBnZXRBbnRpTGVlY2hQYXJhbSA9IChhbnRpTGVlY2hUb2tlbjogc3RyaW5nLCBleHBpcmVUaW1lOiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQsIG9wdGlvbnM6IElVcHl1bkNvbmZpZywgZmlsZU5hbWU6IHN0cmluZyk6IHN0cmluZyA9PiB7XHJcbiAgY29uc3QgdXJpID0gYC8ke2VuY29kZVVSSShvcHRpb25zLnBhdGggfHwgJycpfSR7ZW5jb2RlVVJJQ29tcG9uZW50KGZpbGVOYW1lKX1gLnJlcGxhY2UoLyUyRi9nLCAnLycpLnJlcGxhY2UoL15cXC8rL2csICcvJylcclxuICBjb25zdCBub3cgPSBNYXRoLnJvdW5kKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMClcclxuICBjb25zdCBleHBpcmUgPSBleHBpcmVUaW1lID8gbm93ICsgcGFyc2VJbnQoZXhwaXJlVGltZS50b1N0cmluZygpLCAxMCkgOiBub3cgKyAxODAwXHJcbiAgY29uc3Qgc2lnbiA9IE1ENShgJHthbnRpTGVlY2hUb2tlbn0mJHtleHBpcmV9JiR7dXJpfWApXHJcbiAgY29uc3QgdXB0ID0gYCR7c2lnbi5zdWJzdHJpbmcoMTIsIDIwKX0ke2V4cGlyZX1gXHJcbiAgcmV0dXJuIGBfdXB0PSR7dXB0fWBcclxufVxyXG5cclxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcclxuICBjb25zdCB1cHl1bk9wdGlvbnMgPSBjdHguZ2V0Q29uZmlnPElVcHl1bkNvbmZpZz4oJ3BpY0JlZC51cHl1bicpXHJcbiAgaWYgKCF1cHl1bk9wdGlvbnMpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignQ2FuXFwndCBmaW5kIHVwWXVuIGNvbmZpZycpXHJcbiAgfVxyXG4gIHRyeSB7XHJcbiAgICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxyXG4gICAgY29uc3QgcGF0aCA9IHVweXVuT3B0aW9ucy5wYXRoIHx8ICcnXHJcbiAgICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XHJcbiAgICAgIGlmIChpbWcuZmlsZU5hbWUgJiYgaW1nLmJ1ZmZlcikge1xyXG4gICAgICAgIGxldCBpbWFnZSA9IGltZy5idWZmZXJcclxuICAgICAgICBpZiAoIWltYWdlICYmIGltZy5iYXNlNjRJbWFnZSkge1xyXG4gICAgICAgICAgaW1hZ2UgPSBCdWZmZXIuZnJvbShpbWcuYmFzZTY0SW1hZ2UsICdiYXNlNjQnKVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzaWduYXR1cmUgPSBnZW5lcmF0ZVNpZ25hdHVyZSh1cHl1bk9wdGlvbnMsIGltZy5maWxlTmFtZSlcclxuICAgICAgICBjb25zdCBvcHRpb25zID0gcG9zdE9wdGlvbnModXB5dW5PcHRpb25zLCBpbWcuZmlsZU5hbWUsIHNpZ25hdHVyZSwgaW1hZ2UpXHJcbiAgICAgICAgY29uc3Qgc3VmZml4ID0gdXB5dW5PcHRpb25zLm9wdGlvbnMgfHwgJydcclxuICAgICAgICBjb25zdCBib2R5ID0gYXdhaXQgY3R4LnJlcXVlc3Qob3B0aW9ucylcclxuICAgICAgICBpZiAoYm9keS5zdGF0dXNDb2RlID09PSAyMDApIHtcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcclxuICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXHJcbiAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7dXB5dW5PcHRpb25zLnVybH0vJHtlbmNvZGVVUklDb21wb25lbnQocGF0aCl9JHtlbmNvZGVVUklDb21wb25lbnQoaW1nLmZpbGVOYW1lKX0ke3N1ZmZpeH1gLnJlcGxhY2UoLyUyRi9nLCAnLycpXHJcbiAgICAgICAgICBpZiAodXB5dW5PcHRpb25zLmFudGlMZWVjaFRva2VuKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHVwdCA9IGdldEFudGlMZWVjaFBhcmFtKHVweXVuT3B0aW9ucy5hbnRpTGVlY2hUb2tlbiwgdXB5dW5PcHRpb25zLmV4cGlyZVRpbWUsIHVweXVuT3B0aW9ucywgaW1nLmZpbGVOYW1lKVxyXG4gICAgICAgICAgICBpbWcuaW1nVXJsID0gaW1nLmltZ1VybC5pbmNsdWRlcygnPycpID8gYCR7aW1nLmltZ1VybH0mJHt1cHR9YCA6IGAke2ltZy5pbWdVcmx9PyR7dXB0fWBcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVcGxvYWQgZmFpbGVkJylcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBjdHhcclxuICB9IGNhdGNoIChlcnI6IGFueSkge1xyXG4gICAgaWYgKGVyci5tZXNzYWdlID09PSAnVXBsb2FkIGZhaWxlZCcpIHtcclxuICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcclxuICAgICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxyXG4gICAgICAgIGJvZHk6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0NIRUNLX1NFVFRJTkdTJylcclxuICAgICAgfSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGJvZHkgPSBzYWZlUGFyc2U8eyBjb2RlOiBzdHJpbmcgfT4oZXJyLmVycm9yKVxyXG4gICAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xyXG4gICAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXHJcbiAgICAgICAgYm9keTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRF9SRUFTT04nLCB7XHJcbiAgICAgICAgICBjb2RlOiB0eXBlb2YgYm9keSA9PT0gJ29iamVjdCcgPyBib2R5LmNvZGUgOiBib2R5XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgdGV4dDogJ2h0dHA6Ly9kb2NzLnVweXVuLmNvbS9hcGkvZXJybm8vJ1xyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgdGhyb3cgZXJyXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xyXG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElVcHl1bkNvbmZpZz4oJ3BpY0JlZC51cHl1bicpIHx8IHt9XHJcbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdidWNrZXQnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX0JVQ0tFVCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYnVja2V0IHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ29wZXJhdG9yJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9PUEVSQVRPUicpIH0sXHJcbiAgICAgIGdldCBwcmVmaXggKCkge1xyXG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fT1BFUkFUT1InKVxyXG4gICAgICB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fTUVTU0FHRV9PUEVSQVRPUicpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcub3BlcmF0b3IgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAncGFzc3dvcmQnLFxyXG4gICAgICB0eXBlOiAncGFzc3dvcmQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9NRVNTQUdFX1BBU1NXT1JEJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9QQVNTV09SRCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9NRVNTQUdFX1BBU1NXT1JEJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wYXNzd29yZCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICd1cmwnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX1VSTCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9NRVNTQUdFX1VSTCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcudXJsIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ29wdGlvbnMnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9PUFRJT05TJykgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9PUFRJT05TJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX01FU1NBR0VfT1BUSU9OUycpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcub3B0aW9ucyB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAncGF0aCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX1BBVEgnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX1BBVEgnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fTUVTU0FHRV9QQVRIJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wYXRoIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdhbnRpTGVlY2hUb2tlbicsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX0FOVElfTEVFQ0hfVE9LRU4nKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX0FOVElfTEVFQ0hfVE9LRU4nKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fQU5USV9MRUVDSF9UT0tFTicpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYW50aUxlZWNoVG9rZW4gfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2V4cGlyZVRpbWUnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9FWFBJUkVfVElNRScpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fRVhQSVJFX1RJTUUnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fRVhQSVJFX1RJTUUnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmV4cGlyZVRpbWUgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfVxyXG4gIF1cclxuICByZXR1cm4gY29uZmlnXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyIChjdHg6IElQaWNHbyk6IHZvaWQge1xyXG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoJ3VweXVuJywge1xyXG4gICAgZ2V0IG5hbWUgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOJykgfSxcclxuICAgIGhhbmRsZSxcclxuICAgIGNvbmZpZ1xyXG4gIH0pXHJcbn1cclxuIiwiaW1wb3J0IHsgdHlwZSBJUGljR28sIHR5cGUgSVBsdWdpbkNvbmZpZywgdHlwZSBJV2ViZGF2UGxpc3RDb25maWcsIHR5cGUgSU9sZFJlcU9wdGlvbnNXaXRoRnVsbFJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xyXG5pbXBvcnQgeyB0eXBlIElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcclxuaW1wb3J0IG1pbWUgZnJvbSAnbWltZS10eXBlcydcclxuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJ1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xyXG5cclxuY29uc3QgcG9zdE9wdGlvbnMgPSBhc3luYyAoY3R4OiBJUGljR28sIG9wdGlvbnM6IElXZWJkYXZQbGlzdENvbmZpZywgZmlsZU5hbWU6IHN0cmluZywgaW1hZ2U6IEJ1ZmZlcik6IFByb21pc2U8SU9sZFJlcU9wdGlvbnNXaXRoRnVsbFJlc3BvbnNlPiA9PiB7XHJcbiAgY29uc3QgcGF0aHMgPSBbLi4ub3B0aW9ucy5wYXRoLnJlcGxhY2UoL1xcLyskL2csICcnKS5zcGxpdCgnLycpLCAuLi5wYXRoLmRpcm5hbWUoZmlsZU5hbWUpLnNwbGl0KCcvJyldXHJcbiAgbGV0IGN1cnJlbnRQYXRoID0gJydcclxuICBmb3IgKGNvbnN0IHAgb2YgcGF0aHMpIHtcclxuICAgIGlmIChwKSB7XHJcbiAgICAgIGN1cnJlbnRQYXRoICs9IGAvJHtwfWBcclxuICAgICAgY29uc3QgZGlyb3B0aW9ucyA9IHtcclxuICAgICAgICBtZXRob2Q6ICdNS0NPTCcsXHJcbiAgICAgICAgdXJsOiBgJHtvcHRpb25zLmhvc3R9JHtlbmNvZGVVUkkoY3VycmVudFBhdGgpfWAucmVwbGFjZSgvJTJGL2csICcvJyksXHJcbiAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgQXV0aG9yaXphdGlvbjogYEJhc2ljICR7QnVmZmVyLmZyb20oYCR7b3B0aW9ucy51c2VybmFtZX06JHtvcHRpb25zLnBhc3N3b3JkfWApLnRvU3RyaW5nKCdiYXNlNjQnKX1gXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgYXdhaXQgY3R4LnJlcXVlc3QoZGlyb3B0aW9ucylcclxuICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coZXJyKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiB7XHJcbiAgICBtZXRob2Q6ICdQVVQnLFxyXG4gICAgdXJsOiBgJHtvcHRpb25zLmhvc3R9LyR7b3B0aW9ucy5wYXRoID09PSAnLycgPyAnJyA6IGVuY29kZVVSSShvcHRpb25zLnBhdGgpfSR7ZW5jb2RlVVJJQ29tcG9uZW50KGZpbGVOYW1lKX1gLnJlcGxhY2UoLyUyRi9nLCAnLycpLFxyXG4gICAgaGVhZGVyczoge1xyXG4gICAgICBBdXRob3JpemF0aW9uOiBgQmFzaWMgJHtCdWZmZXIuZnJvbShgJHtvcHRpb25zLnVzZXJuYW1lfToke29wdGlvbnMucGFzc3dvcmR9YCkudG9TdHJpbmcoJ2Jhc2U2NCcpfWAsXHJcbiAgICAgICdDb250ZW50LVR5cGUnOiBtaW1lLmxvb2t1cChmaWxlTmFtZSkgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsXHJcbiAgICAgICdDb250ZW50LUxlbmd0aCc6IGltYWdlLmxlbmd0aFxyXG4gICAgfSxcclxuICAgIGJvZHk6IGltYWdlLFxyXG4gICAgcmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2U6IHRydWVcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvIHwgYm9vbGVhbj4gPT4ge1xyXG4gIGNvbnN0IHdlYmRhdnBsaXN0T3B0aW9ucyA9IGN0eC5nZXRDb25maWc8SVdlYmRhdlBsaXN0Q29uZmlnPigncGljQmVkLndlYmRhdnBsaXN0JylcclxuICBpZiAoIXdlYmRhdnBsaXN0T3B0aW9ucykge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5cXCd0IGZpbmQgd2ViZGF2cGxpc3QgY29uZmlnJylcclxuICB9XHJcbiAgd2ViZGF2cGxpc3RPcHRpb25zLmhvc3QgPSB3ZWJkYXZwbGlzdE9wdGlvbnMuaG9zdC5yZXBsYWNlKC9eaHR0cHM/OlxcL1xcL3xcXC8rJC9nLCAnJylcclxuICB3ZWJkYXZwbGlzdE9wdGlvbnMuaG9zdCA9ICh3ZWJkYXZwbGlzdE9wdGlvbnMuc3NsRW5hYmxlZCA/ICdodHRwczovLycgOiAnaHR0cDovLycpICsgd2ViZGF2cGxpc3RPcHRpb25zLmhvc3RcclxuICB3ZWJkYXZwbGlzdE9wdGlvbnMucGF0aCA9ICh3ZWJkYXZwbGlzdE9wdGlvbnMucGF0aCB8fCAnJykucmVwbGFjZSgvXlxcLyt8XFwvKyQvZywgJycpICsgJy8nXHJcbiAgY29uc3Qgd2VicGF0aCA9ICh3ZWJkYXZwbGlzdE9wdGlvbnMud2VicGF0aCB8fCAnJykucmVwbGFjZSgvXlxcLyt8XFwvKyQvZywgJycpICsgJy8nXHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XHJcbiAgICBjb25zdCBjdXN0b21VcmwgPSB3ZWJkYXZwbGlzdE9wdGlvbnMuY3VzdG9tVXJsXHJcbiAgICBjb25zdCB1cGxvYWRQYXRoID0gd2ViZGF2cGxpc3RPcHRpb25zLnBhdGhcclxuICAgIGZvciAoY29uc3QgaW1nIG9mIGltZ0xpc3QpIHtcclxuICAgICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XHJcbiAgICAgICAgbGV0IGltYWdlID0gaW1nLmJ1ZmZlclxyXG4gICAgICAgIGlmICghaW1hZ2UgJiYgaW1nLmJhc2U2NEltYWdlKSB7XHJcbiAgICAgICAgICBpbWFnZSA9IEJ1ZmZlci5mcm9tKGltZy5iYXNlNjRJbWFnZSwgJ2Jhc2U2NCcpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBhd2FpdCBwb3N0T3B0aW9ucyhjdHgsIHdlYmRhdnBsaXN0T3B0aW9ucywgaW1nLmZpbGVOYW1lLCBpbWFnZSlcclxuICAgICAgICBjb25zdCBib2R5ID0gYXdhaXQgY3R4LnJlcXVlc3Qob3B0aW9ucylcclxuICAgICAgICBpZiAoYm9keS5zdGF0dXNDb2RlID49IDIwMCAmJiBib2R5LnN0YXR1c0NvZGUgPCAzMDApIHtcclxuICAgICAgICAgIGNvbnN0IGltZ1RlbXBQYXRoID0gcGF0aC5qb2luKGN0eC5iYXNlRGlyLCAnaW1nVGVtcCcpXHJcbiAgICAgICAgICBmcy5lbnN1cmVEaXJTeW5jKHBhdGguZGlybmFtZShwYXRoLmpvaW4oaW1nVGVtcFBhdGgsIGltZy5maWxlTmFtZSkpKVxyXG4gICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhwYXRoLmpvaW4oaW1nVGVtcFBhdGgsIGltZy5maWxlTmFtZSksIGltYWdlKVxyXG4gICAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxyXG4gICAgICAgICAgZGVsZXRlIGltZy5idWZmZXJcclxuICAgICAgICAgIGNvbnN0IGJhc2VVcmwgPSBjdXN0b21VcmwgfHwgd2ViZGF2cGxpc3RPcHRpb25zLmhvc3RcclxuICAgICAgICAgIGlmICh3ZWJkYXZwbGlzdE9wdGlvbnMud2VicGF0aCkge1xyXG4gICAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7YmFzZVVybH0vJHt3ZWJwYXRoID09PSAnLycgPyAnJyA6IGVuY29kZVVSSUNvbXBvbmVudCh3ZWJwYXRoKX0ke2VuY29kZVVSSUNvbXBvbmVudChpbWcuZmlsZU5hbWUpfWAucmVwbGFjZSgvJTJGL2csICcvJylcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGltZy5pbWdVcmwgPSBgJHtiYXNlVXJsfS8ke3VwbG9hZFBhdGggPT09ICcvJyA/ICcnIDogZW5jb2RlVVJJQ29tcG9uZW50KHVwbG9hZFBhdGgpfSR7ZW5jb2RlVVJJQ29tcG9uZW50KGltZy5maWxlTmFtZSl9YC5yZXBsYWNlKC8lMkYvZywgJy8nKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaW1nLmdhbGxlcnlQYXRoID0gYGh0dHA6Ly9sb2NhbGhvc3Q6MzY2OTkvJHtlbmNvZGVVUklDb21wb25lbnQoaW1nLmZpbGVOYW1lKX1gXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVXBsb2FkIGZhaWxlZCcpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY3R4XHJcbiAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcclxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XHJcbiAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXHJcbiAgICAgIGJvZHk6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0NIRUNLX1NFVFRJTkdTJylcclxuICAgIH0pXHJcbiAgICB0aHJvdyBlcnJcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XHJcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SVdlYmRhdlBsaXN0Q29uZmlnPigncGljQmVkLndlYmRhdnBsaXN0JykgfHwge31cclxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2hvc3QnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX0hPU1QnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmhvc3QgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnc3NsRW5hYmxlZCcsXHJcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9TU0xFTkFCTEVEJykgfSxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnNzbEVuYWJsZWQgPz8gZmFsc2UsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX1NTTEVOQUJMRUQnKSB9LFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9TU0xFTkFCTEVEJykgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3VzZXJuYW1lJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9VU0VSTkFNRScpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcudXNlcm5hbWUgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9VU0VSTkFNRScpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1VTRVJOQU1FJykgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3Bhc3N3b3JkJyxcclxuICAgICAgdHlwZTogJ3Bhc3N3b3JkJyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9QQVNTV09SRCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGFzc3dvcmQgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxyXG4gICAgICBnZXQgcHJlZml4ICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9QQVNTV09SRCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1BBU1NXT1JEJykgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3BhdGgnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX1BBVEgnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhdGggfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfUEFUSCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1BBVEgnKSB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnd2VicGF0aCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfV0VCU0lURV9QQVRIJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wYXRoIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX1dFQlNJVEVfUEFUSCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1dFQlNJVEVfUEFUSCcpIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdjdXN0b21VcmwnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX0NVU1RPTVVSTCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuY3VzdG9tVXJsIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX0NVU1RPTVVSTCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX0NVU1RPTVVSTCcpIH1cclxuICAgIH1cclxuICBdXHJcbiAgcmV0dXJuIGNvbmZpZ1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlciAoY3R4OiBJUGljR28pOiB2b2lkIHtcclxuICBjdHguaGVscGVyLnVwbG9hZGVyLnJlZ2lzdGVyKCd3ZWJkYXZwbGlzdCcsIHtcclxuICAgIGdldCBuYW1lICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVCcpIH0sXHJcbiAgICBoYW5kbGUsXHJcbiAgICBjb25maWdcclxuICB9KVxyXG59XHJcbiIsImltcG9ydCB7IHR5cGUgSVBpY0dvLCB0eXBlIElQbHVnaW5Db25maWcsIHR5cGUgSUxvY2FsQ29uZmlnIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xyXG5pbXBvcnQgeyB0eXBlIElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcclxuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJ1xyXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xyXG5cclxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcclxuICBjb25zdCBsb2NhbENvbmZpZyA9IGN0eC5nZXRDb25maWc8SUxvY2FsQ29uZmlnPigncGljQmVkLmxvY2FsJylcclxuICBpZiAoIWxvY2FsQ29uZmlnKSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbiBub3QgZmluZCBsb2NhbCBjb25maWchJylcclxuICB9XHJcbiAgY29uc3QgdXBsb2FkUGF0aCA9IGxvY2FsQ29uZmlnLnBhdGggfHwgJydcclxuICBsZXQgY3VzdG9tVXJsID0gbG9jYWxDb25maWcuY3VzdG9tVXJsIHx8ICcnXHJcbiAgaWYgKGN1c3RvbVVybCkge1xyXG4gICAgY3VzdG9tVXJsID0gY3VzdG9tVXJsLnJlcGxhY2UoL1xcLyQvLCAnJylcclxuICB9XHJcbiAgbGV0IHdlYlBhdGggPSBsb2NhbENvbmZpZy53ZWJQYXRoIHx8ICcnXHJcbiAgaWYgKHdlYlBhdGgpIHtcclxuICAgIHdlYlBhdGggPSB3ZWJQYXRoLnJlcGxhY2UoL1xcXFwvZywgJy8nKS5yZXBsYWNlKC9eXFwvLywgJycpLnJlcGxhY2UoL1xcLyQvLCAnJylcclxuICB9XHJcbiAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcclxuICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XHJcbiAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcclxuICAgICAgbGV0IGltYWdlID0gaW1nLmJ1ZmZlclxyXG4gICAgICBpZiAoIWltYWdlICYmIGltZy5iYXNlNjRJbWFnZSkge1xyXG4gICAgICAgIGltYWdlID0gQnVmZmVyLmZyb20oaW1nLmJhc2U2NEltYWdlLCAnYmFzZTY0JylcclxuICAgICAgfVxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBmcy5lbnN1cmVEaXJTeW5jKHVwbG9hZFBhdGgpXHJcbiAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbih1cGxvYWRQYXRoLCBpbWcuZmlsZU5hbWUpLCBpbWFnZSlcclxuICAgICAgICAgIGZzLmNvcHlGaWxlU3luYyhwYXRoLmpvaW4odXBsb2FkUGF0aCwgaW1nLmZpbGVOYW1lKSwgcGF0aC5qb2luKGN0eC5iYXNlRGlyLCAnaW1nVGVtcCcsIGltZy5maWxlTmFtZSkpXHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXHJcbiAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxyXG4gICAgICAgICAgaWYgKGN1c3RvbVVybCkge1xyXG4gICAgICAgICAgICBpZiAod2ViUGF0aCkge1xyXG4gICAgICAgICAgICAgIGltZy5pbWdVcmwgPSBgJHtjdXN0b21Vcmx9LyR7ZW5jb2RlVVJJQ29tcG9uZW50KHdlYlBhdGgpfS8ke2VuY29kZVVSSUNvbXBvbmVudChpbWcuZmlsZU5hbWUpfWAucmVwbGFjZSgvJTJGL2csICcvJylcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7Y3VzdG9tVXJsfS8ke2VuY29kZVVSSUNvbXBvbmVudChpbWcuZmlsZU5hbWUpfWAucmVwbGFjZSgvJTJGL2csICcvJylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaW1nLmltZ1VybCA9IHBhdGguam9pbih1cGxvYWRQYXRoLCBpbWcuZmlsZU5hbWUpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpbWcuaGFzaCA9IHBhdGguam9pbih1cGxvYWRQYXRoLCBpbWcuZmlsZU5hbWUpXHJcbiAgICAgICAgICBpbWcuZ2FsbGVyeVBhdGggPSBgaHR0cDovL2xvY2FsaG9zdDozNjY5OS8ke2VuY29kZVVSSUNvbXBvbmVudChpbWcuZmlsZU5hbWUpfWBcclxuICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XHJcbiAgICAgICAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXHJcbiAgICAgICAgICAgIGJvZHk6ICdmYWlsZWQgdG8gdXBsb2FkIGltYWdlJ1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZmFpbGVkIHRvIHVwbG9hZCBpbWFnZScpXHJcbiAgICAgICAgfVxyXG4gICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICBjdHgubG9nLmVycm9yKGUpXHJcbiAgICAgICAgdGhyb3cgZVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiBjdHhcclxufVxyXG5cclxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcclxuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJTG9jYWxDb25maWc+KCdwaWNCZWQubG9jYWwnKSB8fCB7fVxyXG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xyXG4gICAge1xyXG4gICAgICBuYW1lOiAncGF0aCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xPQ0FMX1BBVEgnKSB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xPQ0FMX1BBVEgnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhdGggfHwgJycsXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MT0NBTF9NRVNTQUdFX1BBVEgnKSB9LFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2N1c3RvbVVybCcsXHJcbiAgICAgIHR5cGU6ICdpbnB1dCcsXHJcbiAgICAgIGdldCBwcmVmaXggKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xPQ0FMX0NVU1RPTVVSTCcpIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTE9DQUxfQ1VTVE9NVVJMJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5jdXN0b21VcmwgfHwgJycsXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MT0NBTF9NRVNTQUdFX0NVU1RPTVVSTCcpIH0sXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3dlYlBhdGgnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xPQ0FMX1dFQlBBVEgnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLndlYlBhdGggfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgZ2V0IHByZWZpeCAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTE9DQUxfV0VCUEFUSCcpIH0sXHJcbiAgICAgIGdldCBtZXNzYWdlICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MT0NBTF9NRVNTQUdFX1dFQlBBVEgnKSB9XHJcbiAgICB9XHJcbiAgXVxyXG4gIHJldHVybiBjb25maWdcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIgKGN0eDogSVBpY0dvKTogdm9pZCB7XHJcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3RlcignbG9jYWwnLCB7XHJcbiAgICBnZXQgbmFtZSAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTE9DQUwnKSB9LFxyXG4gICAgaGFuZGxlLFxyXG4gICAgY29uZmlnXHJcbiAgfSlcclxufVxyXG4iLCJpbXBvcnQgeyBOb2RlU1NILCB0eXBlIENvbmZpZyB9IGZyb20gJ25vZGUtc3NoLW5vLWNwdS1mZWF0dXJlcydcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcclxuaW1wb3J0IHsgdHlwZSBJU2Z0cFBsaXN0Q29uZmlnIH0gZnJvbSAnLi4vdHlwZXMnXHJcblxyXG5jbGFzcyBTU0hDbGllbnQge1xyXG4gIHByaXZhdGUgc3RhdGljIF9pbnN0YW5jZTogU1NIQ2xpZW50XHJcbiAgcHJpdmF0ZSBzdGF0aWMgX2NsaWVudDogTm9kZVNTSFxyXG4gIHByaXZhdGUgX2lzQ29ubmVjdGVkID0gZmFsc2VcclxuXHJcbiAgcHVibGljIHN0YXRpYyBnZXQgaW5zdGFuY2UgKCk6IFNTSENsaWVudCB7XHJcbiAgICByZXR1cm4gdGhpcy5faW5zdGFuY2UgfHwgKHRoaXMuX2luc3RhbmNlID0gbmV3IHRoaXMoKSlcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgZ2V0IGNsaWVudCAoKTogTm9kZVNTSCB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2xpZW50IHx8ICh0aGlzLl9jbGllbnQgPSBuZXcgTm9kZVNTSCgpKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaGFuZ2VXaW5TdHlsZVBhdGhUb1VuaXggKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gcGF0aC5yZXBsYWNlKC9cXFxcL2csICcvJylcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjb25uZWN0IChjb25maWc6IElTZnRwUGxpc3RDb25maWcpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGNvbnN0IHsgdXNlcm5hbWUsIHBhc3N3b3JkLCBwcml2YXRlS2V5LCBwYXNzcGhyYXNlIH0gPSBjb25maWdcclxuICAgIGNvbnN0IGxvZ2luSW5mbzogQ29uZmlnID0gcHJpdmF0ZUtleVxyXG4gICAgICA/IHsgdXNlcm5hbWUsIHByaXZhdGVLZXlQYXRoOiBwcml2YXRlS2V5LCBwYXNzcGhyYXNlOiBwYXNzcGhyYXNlIHx8IHVuZGVmaW5lZCB9XHJcbiAgICAgIDogeyB1c2VybmFtZSwgcGFzc3dvcmQgfVxyXG4gICAgdHJ5IHtcclxuICAgICAgYXdhaXQgU1NIQ2xpZW50LmNsaWVudC5jb25uZWN0KHtcclxuICAgICAgICBob3N0OiBjb25maWcuaG9zdCxcclxuICAgICAgICBwb3J0OiBOdW1iZXIoY29uZmlnLnBvcnQpIHx8IDIyLFxyXG4gICAgICAgIC4uLmxvZ2luSW5mb1xyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLl9pc0Nvbm5lY3RlZCA9IHRydWVcclxuICAgICAgcmV0dXJuIHRydWVcclxuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnIpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgdXBsb2FkIChsb2NhbDogc3RyaW5nLCByZW1vdGU6IHN0cmluZywgY29uZmlnOiBJU2Z0cFBsaXN0Q29uZmlnKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBpZiAoIXRoaXMuX2lzQ29ubmVjdGVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignU1NIIOacqui/nuaOpScpXHJcbiAgICB9XHJcbiAgICB0cnkge1xyXG4gICAgICByZW1vdGUgPSB0aGlzLmNoYW5nZVdpblN0eWxlUGF0aFRvVW5peChyZW1vdGUpXHJcbiAgICAgIGF3YWl0IHRoaXMubWtkaXIocGF0aC5kaXJuYW1lKHJlbW90ZSkucmVwbGFjZSgvXlxcLyt8XFwvKyQvZywgJycpLCBjb25maWcpXHJcbiAgICAgIGF3YWl0IFNTSENsaWVudC5jbGllbnQucHV0RmlsZShsb2NhbCwgcmVtb3RlKVxyXG4gICAgICBjb25zdCBmaWxlTW9kZSA9IGNvbmZpZy5maWxlTW9kZSB8fCAnMDY0NCdcclxuICAgICAgaWYgKGZpbGVNb2RlICE9PSAnMDY0NCcpIHtcclxuICAgICAgICBjb25zdCBzY3JpcHQgPSBgY2htb2QgJHtmaWxlTW9kZX0gXCIke3JlbW90ZX1cImBcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmV4ZWMoc2NyaXB0KVxyXG4gICAgICAgIHJldHVybiByZXN1bHRcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIG1rZGlyIChkaXJQYXRoOiBzdHJpbmcsIGNvbmZpZzogSVNmdHBQbGlzdENvbmZpZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKCFTU0hDbGllbnQuY2xpZW50LmlzQ29ubmVjdGVkKCkpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTU0gg5pyq6L+e5o6lJylcclxuICAgIH1cclxuICAgIGNvbnN0IGRpcmVjdG9yeU1vZGUgPSBjb25maWcuZGlyTW9kZSB8fCAnMDc1NSdcclxuICAgIGlmIChkaXJlY3RvcnlNb2RlICE9PSAnMDc1NScpIHtcclxuICAgICAgY29uc3QgZGlycyA9IGRpclBhdGguc3BsaXQoJy8nKVxyXG4gICAgICBsZXQgY3VycmVudFBhdGggPSAnJ1xyXG4gICAgICBmb3IgKGNvbnN0IGRpciBvZiBkaXJzKSB7XHJcbiAgICAgICAgaWYgKGRpcikge1xyXG4gICAgICAgICAgY3VycmVudFBhdGggKz0gYC8ke2Rpcn1gXHJcbiAgICAgICAgICBjb25zdCBzY3JpcHQgPSBgbWtkaXIgXCIke2N1cnJlbnRQYXRofVwiICYmIGNobW9kICR7ZGlyZWN0b3J5TW9kZX0gXCIke2N1cnJlbnRQYXRofVwiYFxyXG4gICAgICAgICAgYXdhaXQgdGhpcy5leGVjKHNjcmlwdClcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IHNjcmlwdCA9IGBta2RpciAtcCBcIiR7ZGlyUGF0aH1cImBcclxuICAgICAgYXdhaXQgdGhpcy5leGVjKHNjcmlwdClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjaG93biAocmVtb3RlOiBzdHJpbmcsIHVzZXI6IHN0cmluZywgZ3JvdXA/OiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIHJlbW90ZSA9IHRoaXMuY2hhbmdlV2luU3R5bGVQYXRoVG9Vbml4KHJlbW90ZSlcclxuICAgIGNvbnN0IFtfdXNlciwgX2dyb3VwXSA9IGdyb3VwID8gW3VzZXIsIGdyb3VwXSA6IHVzZXIuaW5jbHVkZXMoJzonKSA/IHVzZXIuc3BsaXQoJzonKSA6IFt1c2VyLCB1c2VyXVxyXG5cclxuICAgIGNvbnN0IHNjcmlwdCA9IGBjaG93biAke191c2VyfToke19ncm91cH0gXCIke3JlbW90ZX1cImBcclxuICAgIHJldHVybiB0aGlzLmV4ZWMoc2NyaXB0KVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBleGVjIChzY3JpcHQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgY29uc3QgZXhlY1Jlc3VsdCA9IGF3YWl0IFNTSENsaWVudC5jbGllbnQuZXhlY0NvbW1hbmQoc2NyaXB0KVxyXG4gICAgcmV0dXJuIGV4ZWNSZXN1bHQuY29kZSA9PT0gMFxyXG4gIH1cclxuXHJcbiAgcHVibGljIGNsb3NlICgpOiB2b2lkIHtcclxuICAgIFNTSENsaWVudC5jbGllbnQuZGlzcG9zZSgpXHJcbiAgICB0aGlzLl9pc0Nvbm5lY3RlZCA9IGZhbHNlXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBTU0hDbGllbnRcclxuIiwiaW1wb3J0IHsgdHlwZSBJUGljR28sIHR5cGUgSVBsdWdpbkNvbmZpZywgdHlwZSBJU2Z0cFBsaXN0Q29uZmlnIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xyXG5pbXBvcnQgeyB0eXBlIElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcclxuaW1wb3J0IFNTSENsaWVudCBmcm9tICcuLi8uLi91dGlscy9zc2hDbGllbnQnXHJcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSdcclxuXHJcbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiA9PiB7XHJcbiAgY29uc3Qgc2Z0cHBsaXN0Q29uZmlnID0gY3R4LmdldENvbmZpZzxJU2Z0cFBsaXN0Q29uZmlnPigncGljQmVkLnNmdHBwbGlzdCcpXHJcbiAgaWYgKCFzZnRwcGxpc3RDb25maWcpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcignQ2FuIG5vdCBmaW5kIHNmdHBwbGlzdCBjb25maWchJylcclxuICB9XHJcbiAgc2Z0cHBsaXN0Q29uZmlnLnBvcnQgPSBOdW1iZXIoc2Z0cHBsaXN0Q29uZmlnLnBvcnQpIHx8IDIyXHJcbiAgc2Z0cHBsaXN0Q29uZmlnLnVwbG9hZFBhdGggPSAoc2Z0cHBsaXN0Q29uZmlnLnVwbG9hZFBhdGggfHwgJycpLnJlcGxhY2UoL15cXC8rfFxcLyskL2csICcnKSArICcvJ1xyXG4gIGNvbnN0IHdlYlBhdGggPSAoc2Z0cHBsaXN0Q29uZmlnLndlYlBhdGggfHwgJycpLnJlcGxhY2UoL15cXC8rfFxcLyskL2csICcnKSArICcvJ1xyXG4gIHRyeSB7XHJcbiAgICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxyXG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xyXG4gICAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcclxuICAgICAgICBsZXQgaW1hZ2UgPSBpbWcuYnVmZmVyXHJcbiAgICAgICAgaWYgKCFpbWFnZSAmJiBpbWcuYmFzZTY0SW1hZ2UpIHtcclxuICAgICAgICAgIGltYWdlID0gQnVmZmVyLmZyb20oaW1nLmJhc2U2NEltYWdlLCAnYmFzZTY0JylcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdXBsb2FkVGVtcFBhdGggPSBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsICd1cGxvYWRUZW1wJylcclxuICAgICAgICBjb25zdCBpbWdUZW1wUGF0aCA9IHBhdGguam9pbihjdHguYmFzZURpciwgJ2ltZ1RlbXAnLCAnc2Z0cHBsaXN0JylcclxuICAgICAgICBmcy5lbnN1cmVEaXJTeW5jKHVwbG9hZFRlbXBQYXRoKVxyXG4gICAgICAgIGZzLmVuc3VyZURpclN5bmMoaW1nVGVtcFBhdGgpXHJcbiAgICAgICAgY29uc3QgdGVtcEZpbGVQYXRoID0gcGF0aC5qb2luKHVwbG9hZFRlbXBQYXRoLCBpbWcuZmlsZU5hbWUpXHJcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyh0ZW1wRmlsZVBhdGgsIGltYWdlKVxyXG4gICAgICAgIGNvbnN0IGNsaWVudCA9IFNTSENsaWVudC5pbnN0YW5jZVxyXG4gICAgICAgIGF3YWl0IGNsaWVudC5jb25uZWN0KHNmdHBwbGlzdENvbmZpZylcclxuICAgICAgICBjb25zdCByZW1vdGVQYXRoID0gcGF0aC5qb2luKGAvJHtzZnRwcGxpc3RDb25maWcudXBsb2FkUGF0aH1gLnJlcGxhY2UoL1xcL1xcLysvZywgJy8nKSwgaW1nLmZpbGVOYW1lKVxyXG4gICAgICAgIGF3YWl0IGNsaWVudC51cGxvYWQodGVtcEZpbGVQYXRoLCByZW1vdGVQYXRoLCBzZnRwcGxpc3RDb25maWcpXHJcbiAgICAgICAgc2Z0cHBsaXN0Q29uZmlnLmZpbGVVc2VyICYmIGF3YWl0IGNsaWVudC5jaG93bihyZW1vdGVQYXRoLCBzZnRwcGxpc3RDb25maWcuZmlsZVVzZXIpXHJcbiAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxyXG4gICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXHJcbiAgICAgICAgY29uc3QgYmFzZVVybCA9IHNmdHBwbGlzdENvbmZpZy5jdXN0b21VcmwgfHwgc2Z0cHBsaXN0Q29uZmlnLmhvc3RcclxuICAgICAgICBpZiAoc2Z0cHBsaXN0Q29uZmlnLndlYlBhdGgpIHtcclxuICAgICAgICAgIGltZy5pbWdVcmwgPSBgJHtiYXNlVXJsfS8ke3dlYlBhdGggPT09ICcvJyA/ICcnIDogZW5jb2RlVVJJQ29tcG9uZW50KHdlYlBhdGgpfSR7ZW5jb2RlVVJJQ29tcG9uZW50KGltZy5maWxlTmFtZSl9YC5yZXBsYWNlKC8lMkYvZywgJy8nKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7YmFzZVVybH0vJHtzZnRwcGxpc3RDb25maWcudXBsb2FkUGF0aCA9PT0gJy8nID8gJycgOiBlbmNvZGVVUklDb21wb25lbnQoc2Z0cHBsaXN0Q29uZmlnLnVwbG9hZFBhdGgpfSR7ZW5jb2RlVVJJQ29tcG9uZW50KGltZy5maWxlTmFtZSl9YC5yZXBsYWNlKC8lMkYvZywgJy8nKVxyXG4gICAgICAgIH1cclxuICAgICAgICBmcy5tb3ZlU3luYyh0ZW1wRmlsZVBhdGgsIHBhdGguam9pbihpbWdUZW1wUGF0aCwgaW1nLmZpbGVOYW1lKSlcclxuICAgICAgICBpbWcuZ2FsbGVyeVBhdGggPSBgaHR0cDovL2xvY2FsaG9zdDozNjY5OS9zZnRwcGxpc3QvJHtlbmNvZGVVUklDb21wb25lbnQoaW1nLmZpbGVOYW1lKX1gXHJcbiAgICAgICAgY2xpZW50LmNsb3NlKClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGN0eFxyXG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XHJcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xyXG4gICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxyXG4gICAgICBib2R5OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdDSEVDS19TRVRUSU5HUycpXHJcbiAgICB9KVxyXG4gICAgdGhyb3cgZXJyXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xyXG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElTZnRwUGxpc3RDb25maWc+KCdwaWNCZWQuc2Z0cHBsaXN0JykgfHwge31cclxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2hvc3QnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9IT1NUJykgfSxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkge1xyXG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfSE9TVCcpXHJcbiAgICAgIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuaG9zdCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwb3J0JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkge1xyXG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUE9SVCcpXHJcbiAgICAgIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX1BPUlQnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBvcnQgfHwgMjIsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3VzZXJuYW1lJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfVVNFUk5BTUUnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnVzZXJuYW1lIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3Bhc3N3b3JkJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfUEFTU1dPUkQnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhc3N3b3JkIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdwcml2YXRlS2V5JyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkge1xyXG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUFJJVkFURUtFWScpXHJcbiAgICAgIH0sXHJcbiAgICAgIGdldCBhbGlhcyAoKSB7IHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX1BSSVZBVEVLRVknKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnByaXZhdGVLZXkgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3Bhc3NwaHJhc2UnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QUklWQVRFS0VZX1BBU1NQSFJBU0UnKVxyXG4gICAgICB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9QUklWQVRFS0VZX1BBU1NQSFJBU0UnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhc3NwaHJhc2UgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3VwbG9hZFBhdGgnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9VUExPQURQQVRIJylcclxuICAgICAgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfVVBMT0FEUEFUSCcpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcudXBsb2FkUGF0aCB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnY3VzdG9tVXJsJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkge1xyXG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfQ1VTVE9NVVJMJylcclxuICAgICAgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfQ1VTVE9NVVJMJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5jdXN0b21VcmwgfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ3dlYlBhdGgnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9XRUJTSVRFX1BBVEgnKVxyXG4gICAgICB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9XRUJTSVRFX1BBVEgnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLndlYlBhdGggfHwgJycsXHJcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2ZpbGVVc2VyJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkge1xyXG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRklMRV9VU0VSJylcclxuICAgICAgfSxcclxuICAgICAgZ2V0IGFsaWFzICgpIHsgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfRklMRV9VU0VSJykgfSxcclxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5maWxlVXNlciB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiAnZmlsZU1vZGUnLFxyXG4gICAgICB0eXBlOiAnaW5wdXQnLFxyXG4gICAgICBnZXQgbWVzc2FnZSAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9GSUxFX01PREUnKVxyXG4gICAgICB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9GSUxFX01PREUnKSB9LFxyXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmZpbGVNb2RlIHx8ICcnLFxyXG4gICAgICByZXF1aXJlZDogZmFsc2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIG5hbWU6ICdkaXJNb2RlJyxcclxuICAgICAgdHlwZTogJ2lucHV0JyxcclxuICAgICAgZ2V0IG1lc3NhZ2UgKCkge1xyXG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRElSX01PREUnKVxyXG4gICAgICB9LFxyXG4gICAgICBnZXQgYWxpYXMgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9ESVJfTU9ERScpIH0sXHJcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuZGlyTW9kZSB8fCAnJyxcclxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXHJcbiAgICB9XHJcbiAgXVxyXG4gIHJldHVybiBjb25maWdcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIgKGN0eDogSVBpY0dvKTogdm9pZCB7XHJcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3Rlcignc2Z0cHBsaXN0Jywge1xyXG4gICAgZ2V0IG5hbWUgKCkgeyByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVCcpIH0sXHJcbiAgICBoYW5kbGUsXHJcbiAgICBjb25maWdcclxuICB9KVxyXG59XHJcbiIsImltcG9ydCB7IHR5cGUgSVBpY0dvLCB0eXBlIElQaWNHb1BsdWdpbiB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5pbXBvcnQgU01NU1VwbG9hZGVyIGZyb20gJy4vc21tcydcclxuaW1wb3J0IHRjWXVuVXBsb2FkZXIgZnJvbSAnLi90Y3l1bidcclxuaW1wb3J0IGdpdGh1YlVwbG9hZGVyIGZyb20gJy4vZ2l0aHViJ1xyXG5pbXBvcnQgcWluaXVVcGxvYWRlciBmcm9tICcuL3Fpbml1J1xyXG5pbXBvcnQgaW1ndXJVcGxvYWRlciBmcm9tICcuL2ltZ3VyJ1xyXG5pbXBvcnQgYWxpWXVuVXBsb2FkZXIgZnJvbSAnLi9hbGl5dW4nXHJcbmltcG9ydCB1cFl1blVwbG9hZGVyIGZyb20gJy4vdXB5dW4nXHJcbmltcG9ydCB3ZWJkYXZwbGlzdFVwbG9hZGVyIGZyb20gJy4vd2ViZGF2J1xyXG5pbXBvcnQgbG9jYWxVcGxvYWRlciBmcm9tICcuL2xvY2FsJ1xyXG5pbXBvcnQgc2Z0cFVwbG9hZGVyIGZyb20gJy4vc2Z0cCdcclxuXHJcbmNvbnN0IGJ1aWxkSW5VcGxvYWRlcnM6IElQaWNHb1BsdWdpbiA9ICgpID0+IHtcclxuICByZXR1cm4ge1xyXG4gICAgcmVnaXN0ZXIgKGN0eDogSVBpY0dvKSB7XHJcbiAgICAgIGFsaVl1blVwbG9hZGVyKGN0eClcclxuICAgICAgdGNZdW5VcGxvYWRlcihjdHgpXHJcbiAgICAgIFNNTVNVcGxvYWRlcihjdHgpXHJcbiAgICAgIGdpdGh1YlVwbG9hZGVyKGN0eClcclxuICAgICAgcWluaXVVcGxvYWRlcihjdHgpXHJcbiAgICAgIGltZ3VyVXBsb2FkZXIoY3R4KVxyXG4gICAgICB1cFl1blVwbG9hZGVyKGN0eClcclxuICAgICAgd2ViZGF2cGxpc3RVcGxvYWRlcihjdHgpXHJcbiAgICAgIGxvY2FsVXBsb2FkZXIoY3R4KVxyXG4gICAgICBzZnRwVXBsb2FkZXIoY3R4KVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgYnVpbGRJblVwbG9hZGVyc1xyXG4iLCJpbXBvcnQge1xyXG4gIGlzVXJsLFxyXG4gIGdldEltYWdlU2l6ZSxcclxuICBnZXRGU0ZpbGUsXHJcbiAgZ2V0VVJMRmlsZVxyXG59IGZyb20gJy4uLy4uL3V0aWxzL2NvbW1vbidcclxuaW1wb3J0IHsgdHlwZSBJUGljR28sIHR5cGUgSVBhdGhUcmFuc2Zvcm1lZEltZ0luZm8sIHR5cGUgSUltZ0luZm8sIHR5cGUgSUltZ1NpemUgfSBmcm9tICcuLi8uLi90eXBlcydcclxuaW1wb3J0IGRheWpzIGZyb20gJ2RheWpzJ1xyXG5cclxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcclxuICBjb25zdCByZXN1bHRzOiBJSW1nSW5mb1tdID0gY3R4Lm91dHB1dFxyXG4gIGF3YWl0IFByb21pc2UuYWxsKGN0eC5pbnB1dC5tYXAoYXN5bmMgKGl0ZW06IHN0cmluZyB8IEJ1ZmZlciwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgbGV0IGluZm86IElQYXRoVHJhbnNmb3JtZWRJbWdJbmZvXHJcbiAgICBpZiAoQnVmZmVyLmlzQnVmZmVyKGl0ZW0pKSB7XHJcbiAgICAgIGluZm8gPSB7XHJcbiAgICAgICAgc3VjY2VzczogdHJ1ZSxcclxuICAgICAgICBidWZmZXI6IGl0ZW0sXHJcbiAgICAgICAgZmlsZU5hbWU6ICcnLFxyXG4gICAgICAgIGV4dG5hbWU6ICcnXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoaXNVcmwoaXRlbSkpIHtcclxuICAgICAgaW5mbyA9IGF3YWl0IGdldFVSTEZpbGUoaXRlbSwgY3R4KVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaW5mbyA9IGF3YWl0IGdldEZTRmlsZShpdGVtKVxyXG4gICAgfVxyXG4gICAgaWYgKGluZm8uc3VjY2VzcyAmJiBpbmZvLmJ1ZmZlcikge1xyXG4gICAgICBjb25zdCBpbWdTaXplID0gZ2V0SW1nU2l6ZShjdHgsIGluZm8uYnVmZmVyLCBpdGVtKVxyXG4gICAgICBjb25zdCBleHRuYW1lID0gaW5mby5leHRuYW1lIHx8IGltZ1NpemUuZXh0bmFtZSB8fCAnLnBuZydcclxuICAgICAgcmVzdWx0c1tpbmRleF0gPSB7XHJcbiAgICAgICAgYnVmZmVyOiBpbmZvLmJ1ZmZlcixcclxuICAgICAgICBmaWxlTmFtZTogaW5mby5maWxlTmFtZSB8fCBgJHtkYXlqcygpLmZvcm1hdCgnWVlZWU1NRERISG1tc3MnKX0ke2V4dG5hbWV9fWAsXHJcbiAgICAgICAgd2lkdGg6IGltZ1NpemUud2lkdGgsXHJcbiAgICAgICAgaGVpZ2h0OiBpbWdTaXplLmhlaWdodCxcclxuICAgICAgICBleHRuYW1lOiBpbmZvLmV4dG5hbWVcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY3R4LmxvZy5lcnJvcihpbmZvLnJlYXNvbilcclxuICAgIH1cclxuICB9KSlcclxuICAvLyByZW1vdmUgZW1wdHkgaXRlbVxyXG4gIGN0eC5vdXRwdXQgPSByZXN1bHRzLmZpbHRlcihpdGVtID0+IGl0ZW0pXHJcbiAgcmV0dXJuIGN0eFxyXG59XHJcblxyXG5jb25zdCBnZXRJbWdTaXplID0gKGN0eDogSVBpY0dvLCBmaWxlOiBCdWZmZXIsIHBhdGg6IHN0cmluZyB8IEJ1ZmZlcik6IElJbWdTaXplID0+IHtcclxuICBjb25zdCBpbWFnZVNpemUgPSBnZXRJbWFnZVNpemUoZmlsZSlcclxuICBpZiAoIWltYWdlU2l6ZS5yZWFsKSB7XHJcbiAgICBpZiAodHlwZW9mIHBhdGggPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIGN0eC5sb2cud2FybihgY2FuJ3QgZ2V0ICR7cGF0aH0ncyBpbWFnZSBzaXplYClcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGN0eC5sb2cud2FybignY2FuXFwndCBnZXQgaW1hZ2Ugc2l6ZScpXHJcbiAgICB9XHJcbiAgICBjdHgubG9nLndhcm4oJ2ZhbGxiYWNrIHRvIDIwMCAqIDIwMCcpXHJcbiAgfVxyXG4gIHJldHVybiBpbWFnZVNpemVcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIGhhbmRsZVxyXG59XHJcbiIsImltcG9ydCB7IHR5cGUgSVBpY0dvIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiA9PiB7XHJcbiAgY3R4Lm91dHB1dC5wdXNoKC4uLmN0eC5pbnB1dClcclxuICByZXR1cm4gY3R4XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICBoYW5kbGVcclxufVxyXG4iLCJpbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnXHJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXHJcbmltcG9ydCByZXNvbHZlIGZyb20gJ3Jlc29sdmUnXHJcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi91dGlscy9lbnVtJ1xyXG5pbXBvcnQgeyB0eXBlIElQaWNHbywgdHlwZSBJUGljR29QbHVnaW4sIHR5cGUgSVBsdWdpbkxvYWRlciwgdHlwZSBJUGljR29QbHVnaW5JbnRlcmZhY2UgfSBmcm9tICcuLi90eXBlcy9pbmRleCdcclxuaW1wb3J0IHsgc2V0Q3VycmVudFBsdWdpbk5hbWUgfSBmcm9tICcuL0xpZmVjeWNsZVBsdWdpbnMnXHJcblxyXG4vKipcclxuICogTG9jYWwgcGx1Z2luIGxvYWRlciwgZmlsZSBzeXN0ZW0gaXMgcmVxdWlyZWRcclxuICovXHJcbmV4cG9ydCBjbGFzcyBQbHVnaW5Mb2FkZXIgaW1wbGVtZW50cyBJUGx1Z2luTG9hZGVyIHtcclxuICBwcml2YXRlIHJlYWRvbmx5IGN0eDogSVBpY0dvXHJcbiAgcHJpdmF0ZSBsaXN0OiBzdHJpbmdbXSA9IFtdXHJcbiAgcHJpdmF0ZSByZWFkb25seSBmdWxsTGlzdCA9IG5ldyBTZXQ8c3RyaW5nPigpXHJcbiAgcHJpdmF0ZSByZWFkb25seSBwbHVnaW5NYXAgPSBuZXcgTWFwPHN0cmluZywgSVBpY0dvUGx1Z2luSW50ZXJmYWNlPigpXHJcbiAgY29uc3RydWN0b3IgKGN0eDogSVBpY0dvKSB7XHJcbiAgICB0aGlzLmN0eCA9IGN0eFxyXG4gICAgdGhpcy5pbml0KClcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdCAoKTogdm9pZCB7XHJcbiAgICBjb25zdCBwYWNrYWdlUGF0aCA9IHBhdGguam9pbih0aGlzLmN0eC5iYXNlRGlyLCAncGFja2FnZS5qc29uJylcclxuICAgIGlmICghZnMuZXhpc3RzU3luYyhwYWNrYWdlUGF0aCkpIHtcclxuICAgICAgY29uc3QgcGtnID0ge1xyXG4gICAgICAgIG5hbWU6ICdwaWNnby1wbHVnaW5zJyxcclxuICAgICAgICBkZXNjcmlwdGlvbjogJ3BpY2dvLXBsdWdpbnMnLFxyXG4gICAgICAgIHJlcG9zaXRvcnk6ICdodHRwczovL2dpdGh1Yi5jb20vUGljR28vUGljR28tQ29yZScsXHJcbiAgICAgICAgbGljZW5zZTogJ01JVCdcclxuICAgICAgfVxyXG4gICAgICBmcy53cml0ZUZpbGVTeW5jKHBhY2thZ2VQYXRoLCBKU09OLnN0cmluZ2lmeShwa2cpLCAndXRmOCcpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBnZXQgcGx1Z2luIGVudHJ5XHJcbiAgcHJpdmF0ZSByZXNvbHZlUGx1Z2luIChjdHg6IElQaWNHbywgbmFtZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHJldHVybiByZXNvbHZlLnN5bmMobmFtZSwgeyBiYXNlZGlyOiBjdHguYmFzZURpciB9KVxyXG4gICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgIHJldHVybiBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsICdub2RlX21vZHVsZXMnLCBuYW1lKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gbG9hZCBhbGwgdGhpcmQgcGFydHkgcGx1Z2luXHJcbiAgbG9hZCAoKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBwYWNrYWdlUGF0aCA9IHBhdGguam9pbih0aGlzLmN0eC5iYXNlRGlyLCAncGFja2FnZS5qc29uJylcclxuICAgIGNvbnN0IHBsdWdpbkRpciA9IHBhdGguam9pbih0aGlzLmN0eC5iYXNlRGlyLCAnbm9kZV9tb2R1bGVzLycpXHJcbiAgICAvLyBUaGFua3MgdG8gaGV4byAtPiBodHRwczovL2dpdGh1Yi5jb20vaGV4b2pzL2hleG8vYmxvYi9tYXN0ZXIvbGliL2hleG8vbG9hZF9wbHVnaW5zLmpzXHJcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMocGx1Z2luRGlyKSkge1xyXG4gICAgICByZXR1cm4gZmFsc2VcclxuICAgIH1cclxuICAgIGNvbnN0IGpzb24gPSBmcy5yZWFkSlNPTlN5bmMocGFja2FnZVBhdGgpXHJcbiAgICBjb25zdCBkZXBzID0gT2JqZWN0LmtleXMoanNvbi5kZXBlbmRlbmNpZXMgfHwge30pXHJcbiAgICBjb25zdCBkZXZEZXBzID0gT2JqZWN0LmtleXMoanNvbi5kZXZEZXBlbmRlbmNpZXMgfHwge30pXHJcbiAgICBjb25zdCBtb2R1bGVzID0gZGVwcy5jb25jYXQoZGV2RGVwcykuZmlsdGVyKChuYW1lOiBzdHJpbmcpID0+IHtcclxuICAgICAgaWYgKCEvXnBpY2dvLXBsdWdpbi18XkBbXi9dK1xcL3BpY2dvLXBsdWdpbi0vLnRlc3QobmFtZSkpIHJldHVybiBmYWxzZVxyXG4gICAgICBjb25zdCBwYXRoID0gdGhpcy5yZXNvbHZlUGx1Z2luKHRoaXMuY3R4LCBuYW1lKVxyXG4gICAgICByZXR1cm4gZnMuZXhpc3RzU3luYyhwYXRoKVxyXG4gICAgfSlcclxuICAgIGZvciAoY29uc3QgbW9kdWxlIG9mIG1vZHVsZXMpIHtcclxuICAgICAgdGhpcy5yZWdpc3RlclBsdWdpbihtb2R1bGUpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZVxyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJQbHVnaW4gKG5hbWU6IHN0cmluZywgcGx1Z2luPzogSVBpY0dvUGx1Z2luKTogdm9pZCB7XHJcbiAgICBpZiAoIW5hbWUgfHwgdHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHRoaXMuY3R4LmxvZy53YXJuKCdQbGVhc2UgcHJvdmlkZSB2YWxpZCBwbHVnaW4nKVxyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIHRoaXMuZnVsbExpc3QuYWRkKG5hbWUpXHJcbiAgICB0cnkge1xyXG4gICAgICAvLyByZWdpc3RlciBsb2NhbCBwbHVnaW5cclxuICAgICAgaWYgKCFwbHVnaW4pIHtcclxuICAgICAgICBpZiAodGhpcy5jdHguZ2V0Q29uZmlnKGBwaWNnb1BsdWdpbnMuJHtuYW1lfWApID09PSB0cnVlIHx8ICh0aGlzLmN0eC5nZXRDb25maWcoYHBpY2dvUGx1Z2lucy4ke25hbWV9YCkgPT09IHVuZGVmaW5lZCkpIHtcclxuICAgICAgICAgIHRoaXMubGlzdC5wdXNoKG5hbWUpXHJcbiAgICAgICAgICBzZXRDdXJyZW50UGx1Z2luTmFtZShuYW1lKVxyXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cclxuICAgICAgICAgIHRoaXMuZ2V0UGx1Z2luKG5hbWUpIS5yZWdpc3Rlcih0aGlzLmN0eClcclxuICAgICAgICAgIGNvbnN0IHBsdWdpbiA9IGBwaWNnb1BsdWdpbnNbJHtuYW1lfV1gXHJcbiAgICAgICAgICB0aGlzLmN0eC5zYXZlQ29uZmlnKFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgW3BsdWdpbl06IHRydWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyByZWdpc3RlciBwcm92aWRlZCBwbHVnaW5cclxuICAgICAgICAvLyAmJiB3b24ndCB3cml0ZSBjb25maWcgdG8gZmlsZXNcclxuICAgICAgICB0aGlzLmxpc3QucHVzaChuYW1lKVxyXG4gICAgICAgIHNldEN1cnJlbnRQbHVnaW5OYW1lKG5hbWUpXHJcbiAgICAgICAgY29uc3QgcGx1Z2luSW50ZXJmYWNlID0gcGx1Z2luKHRoaXMuY3R4KVxyXG4gICAgICAgIHRoaXMucGx1Z2luTWFwLnNldChuYW1lLCBwbHVnaW5JbnRlcmZhY2UpXHJcbiAgICAgICAgcGx1Z2luSW50ZXJmYWNlLnJlZ2lzdGVyKHRoaXMuY3R4KVxyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIHRoaXMucGx1Z2luTWFwLmRlbGV0ZShuYW1lKVxyXG4gICAgICB0aGlzLmxpc3QgPSB0aGlzLmxpc3QuZmlsdGVyKChpdGVtOiBzdHJpbmcpID0+IGl0ZW0gIT09IG5hbWUpXHJcbiAgICAgIHRoaXMuZnVsbExpc3QuZGVsZXRlKG5hbWUpXHJcbiAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihlIGFzIEVycm9yKVxyXG4gICAgICB0aGlzLmN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XHJcbiAgICAgICAgdGl0bGU6IGBQbHVnaW4gJHtuYW1lfSBMb2FkIEVycm9yYCxcclxuICAgICAgICBib2R5OiBlXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1bnJlZ2lzdGVyUGx1Z2luIChuYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMubGlzdCA9IHRoaXMubGlzdC5maWx0ZXIoKGl0ZW06IHN0cmluZykgPT4gaXRlbSAhPT0gbmFtZSlcclxuICAgIHRoaXMuZnVsbExpc3QuZGVsZXRlKG5hbWUpXHJcbiAgICB0aGlzLnBsdWdpbk1hcC5kZWxldGUobmFtZSlcclxuICAgIHNldEN1cnJlbnRQbHVnaW5OYW1lKG5hbWUpXHJcbiAgICB0aGlzLmN0eC5oZWxwZXIudXBsb2FkZXIudW5yZWdpc3RlcihuYW1lKVxyXG4gICAgdGhpcy5jdHguaGVscGVyLnRyYW5zZm9ybWVyLnVucmVnaXN0ZXIobmFtZSlcclxuICAgIHRoaXMuY3R4LmhlbHBlci5iZWZvcmVUcmFuc2Zvcm1QbHVnaW5zLnVucmVnaXN0ZXIobmFtZSlcclxuICAgIHRoaXMuY3R4LmhlbHBlci5iZWZvcmVVcGxvYWRQbHVnaW5zLnVucmVnaXN0ZXIobmFtZSlcclxuICAgIHRoaXMuY3R4LmhlbHBlci5hZnRlclVwbG9hZFBsdWdpbnMudW5yZWdpc3RlcihuYW1lKVxyXG4gICAgdGhpcy5jdHguY21kLnVucmVnaXN0ZXIobmFtZSlcclxuICAgIHRoaXMuY3R4LnJlbW92ZUNvbmZpZygncGljZ29QbHVnaW5zJywgbmFtZSlcclxuICB9XHJcblxyXG4gIC8vIGdldCBwbHVnaW4gYnkgbmFtZVxyXG4gIGdldFBsdWdpbiAobmFtZTogc3RyaW5nKTogSVBpY0dvUGx1Z2luSW50ZXJmYWNlIHwgdW5kZWZpbmVkIHtcclxuICAgIGlmICh0aGlzLnBsdWdpbk1hcC5oYXMobmFtZSkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMucGx1Z2luTWFwLmdldChuYW1lKVxyXG4gICAgfVxyXG4gICAgY29uc3QgcGx1Z2luRGlyID0gcGF0aC5qb2luKHRoaXMuY3R4LmJhc2VEaXIsICdub2RlX21vZHVsZXMvJylcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzXHJcbiAgICBjb25zdCBwbHVnaW4gPSByZXF1aXJlKHBsdWdpbkRpciArIG5hbWUpKHRoaXMuY3R4KVxyXG4gICAgdGhpcy5wbHVnaW5NYXAuc2V0KG5hbWUsIHBsdWdpbilcclxuICAgIHJldHVybiBwbHVnaW5cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCB0aGUgbGlzdCBvZiBlbmFibGVkIHBsdWdpbnNcclxuICAgKi9cclxuICBnZXRMaXN0ICgpOiBzdHJpbmdbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5saXN0XHJcbiAgfVxyXG5cclxuICBoYXNQbHVnaW4gKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZnVsbExpc3QuaGFzKG5hbWUpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgdGhlIGZ1bGwgbGlzdCBvZiBwbHVnaW5zLCB3aGV0aGVyIGl0IGlzIGVuYWJsZWQgb3Igbm90XHJcbiAgICovXHJcbiAgZ2V0RnVsbExpc3QgKCk6IHN0cmluZ1tdIHtcclxuICAgIHJldHVybiBbLi4udGhpcy5mdWxsTGlzdF1cclxuICB9XHJcbn1cclxuZXhwb3J0IGRlZmF1bHQgUGx1Z2luTG9hZGVyXHJcbiIsImV4cG9ydCBjb25zdCBDTElQQk9BUkRfSU1BR0VfRk9MREVSID0gJ3BpY2xpc3QtY2xpcGJvYXJkLWltYWdlcydcclxuIiwiaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcclxuaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdjaGlsZF9wcm9jZXNzJ1xyXG5pbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnXHJcbmltcG9ydCBvcyBmcm9tICdvcydcclxuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJ1xyXG5pbXBvcnQgaXNXc2wgZnJvbSAnaXMtd3NsJ1xyXG5pbXBvcnQgeyB0eXBlIElQaWNHbywgdHlwZSBJQ2xpcGJvYXJkSW1hZ2UgfSBmcm9tICcuLi90eXBlcydcclxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4vZW51bSdcclxuaW1wb3J0IG1hY0NsaXBib2FyZFNjcmlwdCBmcm9tICcuL2NsaXBib2FyZC9tYWMuYXBwbGVzY3JpcHQnXHJcbmltcG9ydCB3aW5kb3dzQ2xpcGJvYXJkU2NyaXB0IGZyb20gJy4vY2xpcGJvYXJkL3dpbmRvd3MucHMxJ1xyXG5pbXBvcnQgd2luZG93czEwQ2xpcGJvYXJkU2NyaXB0IGZyb20gJy4vY2xpcGJvYXJkL3dpbmRvd3MxMC5wczEnXHJcbmltcG9ydCBsaW51eENsaXBib2FyZFNjcmlwdCBmcm9tICcuL2NsaXBib2FyZC9saW51eC5zaCdcclxuaW1wb3J0IHdzbENsaXBib2FyZFNjcmlwdCBmcm9tICcuL2NsaXBib2FyZC93c2wuc2gnXHJcbmltcG9ydCB7IENMSVBCT0FSRF9JTUFHRV9GT0xERVIgfSBmcm9tICcuL3N0YXRpYydcclxuXHJcbmV4cG9ydCB0eXBlIFBsYXRmb3JtID0gJ2RhcndpbicgfCAnd2luMzInIHwgJ3dpbjEwJyB8ICdsaW51eCcgfCAnd3NsJ1xyXG5cclxuY29uc3QgZ2V0Q3VycmVudFBsYXRmb3JtID0gKCk6IFBsYXRmb3JtID0+IHtcclxuICBjb25zdCBwbGF0Zm9ybSA9IHByb2Nlc3MucGxhdGZvcm1cclxuICBpZiAoaXNXc2wpIHtcclxuICAgIHJldHVybiAnd3NsJ1xyXG4gIH1cclxuICBpZiAocGxhdGZvcm0gPT09ICd3aW4zMicpIHtcclxuICAgIGNvbnN0IGN1cnJlbnRPUyA9IG9zLnJlbGVhc2UoKS5zcGxpdCgnLicpWzBdXHJcbiAgICBpZiAoY3VycmVudE9TID09PSAnMTAnKSB7XHJcbiAgICAgIHJldHVybiAnd2luMTAnXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gJ3dpbjMyJ1xyXG4gICAgfVxyXG4gIH0gZWxzZSBpZiAocGxhdGZvcm0gPT09ICdkYXJ3aW4nKSB7XHJcbiAgICByZXR1cm4gJ2RhcndpbidcclxuICB9IGVsc2Uge1xyXG4gICAgcmV0dXJuICdsaW51eCdcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IHBsYXRmb3JtMlNjcmlwdENvbnRlbnQ6IHtcclxuICBba2V5IGluIFBsYXRmb3JtXTogc3RyaW5nXHJcbn0gPSB7XHJcbiAgZGFyd2luOiBtYWNDbGlwYm9hcmRTY3JpcHQsXHJcbiAgd2luMzI6IHdpbmRvd3NDbGlwYm9hcmRTY3JpcHQsXHJcbiAgd2luMTA6IHdpbmRvd3MxMENsaXBib2FyZFNjcmlwdCxcclxuICBsaW51eDogbGludXhDbGlwYm9hcmRTY3JpcHQsXHJcbiAgd3NsOiB3c2xDbGlwYm9hcmRTY3JpcHRcclxufVxyXG4vKipcclxuICogcG93ZXJzaGVsbCB3aWxsIHJlcG9ydCBlcnJvciBpZiBmaWxlIGRvZXMgbm90IGhhdmUgYSAnLnBzMScgZXh0ZW5zaW9uLFxyXG4gKiBzbyB3ZSBzaG91bGQga2VlcCB0aGUgZXh0ZW5zaW9uIG5hbWUgY29uc2lzdGVudCB3aXRoIGNvcnJlc3BvbmRpbmcgc2hlbGxcclxuICovXHJcbmNvbnN0IHBsYXRmb3JtMlNjcmlwdEZpbGVuYW1lOiB7XHJcbiAgW2tleSBpbiBQbGF0Zm9ybV06IHN0cmluZ1xyXG59ID0ge1xyXG4gIGRhcndpbjogJ21hYy5hcHBsZXNjcmlwdCcsXHJcbiAgd2luMzI6ICd3aW5kb3dzLnBzMScsXHJcbiAgd2luMTA6ICd3aW5kb3dzMTAucHMxJyxcclxuICBsaW51eDogJ2xpbnV4LnNoJyxcclxuICB3c2w6ICd3c2wuc2gnXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZUltYWdlRm9sZGVyIChjdHg6IElQaWNHbyk6IHZvaWQge1xyXG4gIGNvbnN0IGltYWdlUGF0aCA9IHBhdGguam9pbihjdHguYmFzZURpciwgQ0xJUEJPQVJEX0lNQUdFX0ZPTERFUilcclxuICBpZiAoIWZzLmV4aXN0c1N5bmMoaW1hZ2VQYXRoKSkge1xyXG4gICAgZnMubWtkaXJTeW5jKGltYWdlUGF0aClcclxuICB9XHJcbn1cclxuXHJcbi8vIFRoYW5rcyB0byB2cy1waWNnbzogaHR0cHM6Ly9naXRodWIuY29tL1NwYWRlcy1TL3ZzLXBpY2dvL2Jsb2IvbWFzdGVyL3NyYy9leHRlbnNpb24udHNcclxuY29uc3QgZ2V0Q2xpcGJvYXJkSW1hZ2UgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElDbGlwYm9hcmRJbWFnZT4gPT4ge1xyXG4gIGNyZWF0ZUltYWdlRm9sZGVyKGN0eClcclxuICAvLyBhZGQgYW4gY2xpcGJvYXJkIGltYWdlIGZvbGRlciB0byBjb250cm9sIHRoZSBpbWFnZSBjYWNoZSBmaWxlXHJcbiAgY29uc3QgaW1hZ2VQYXRoID0gcGF0aC5qb2luKGN0eC5iYXNlRGlyLCBDTElQQk9BUkRfSU1BR0VfRk9MREVSLCBgJHtkYXlqcygpLmZvcm1hdCgnWVlZWU1NRERISG1tc3MnKX0ucG5nYClcclxuICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2U8SUNsaXBib2FyZEltYWdlPigocmVzb2x2ZTogYW55LCByZWplY3Q6IGFueSk6IHZvaWQgPT4ge1xyXG4gICAgY29uc3QgcGxhdGZvcm0gPSBnZXRDdXJyZW50UGxhdGZvcm0oKVxyXG4gICAgY29uc3Qgc2NyaXB0UGF0aCA9IHBhdGguam9pbihjdHguYmFzZURpciwgcGxhdGZvcm0yU2NyaXB0RmlsZW5hbWVbcGxhdGZvcm1dKVxyXG4gICAgLy8gSWYgdGhlIHNjcmlwdCBkb2VzIG5vdCBleGlzdCB5ZXQsIHdlIG5lZWQgdG8gd3JpdGUgdGhlIGNvbnRlbnQgdG8gdGhlIHNjcmlwdCBmaWxlXHJcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMoc2NyaXB0UGF0aCkpIHtcclxuICAgICAgZnMud3JpdGVGaWxlU3luYyhcclxuICAgICAgICBzY3JpcHRQYXRoLFxyXG4gICAgICAgIHBsYXRmb3JtMlNjcmlwdENvbnRlbnRbcGxhdGZvcm1dLFxyXG4gICAgICAgICd1dGY4J1xyXG4gICAgICApXHJcbiAgICB9XHJcbiAgICBsZXQgZXhlY3V0aW9uXHJcbiAgICBpZiAocGxhdGZvcm0gPT09ICdkYXJ3aW4nKSB7XHJcbiAgICAgIGV4ZWN1dGlvbiA9IHNwYXduKCdvc2FzY3JpcHQnLCBbc2NyaXB0UGF0aCwgaW1hZ2VQYXRoXSlcclxuICAgIH0gZWxzZSBpZiAocGxhdGZvcm0gPT09ICd3aW4zMicgfHwgcGxhdGZvcm0gPT09ICd3aW4xMCcpIHtcclxuICAgICAgZXhlY3V0aW9uID0gc3Bhd24oJ3Bvd2Vyc2hlbGwnLCBbXHJcbiAgICAgICAgJy1ub3Byb2ZpbGUnLFxyXG4gICAgICAgICctbm9uaW50ZXJhY3RpdmUnLFxyXG4gICAgICAgICctbm9sb2dvJyxcclxuICAgICAgICAnLXN0YScsXHJcbiAgICAgICAgJy1leGVjdXRpb25wb2xpY3knLCAndW5yZXN0cmljdGVkJyxcclxuICAgICAgICAvLyBmaXggd2luZG93cyAxMCBuYXRpdmUgY21kIGNyYXNoIGJ1ZyB3aGVuIFwicGljZ28gdXBsb2FkXCJcclxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vUGljR28vUGljR28tQ29yZS9pc3N1ZXMvMzJcclxuICAgICAgICAvLyAnLXdpbmRvd3N0eWxlJywnaGlkZGVuJyxcclxuICAgICAgICAvLyAnLW5vZXhpdCcsXHJcbiAgICAgICAgJy1maWxlJywgc2NyaXB0UGF0aCxcclxuICAgICAgICBpbWFnZVBhdGhcclxuICAgICAgXSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGV4ZWN1dGlvbiA9IHNwYXduKCdzaCcsIFtzY3JpcHRQYXRoLCBpbWFnZVBhdGhdKVxyXG4gICAgfVxyXG5cclxuICAgIGV4ZWN1dGlvbi5zdGRvdXQub24oJ2RhdGEnLCAoZGF0YTogQnVmZmVyKSA9PiB7XHJcbiAgICAgIGlmIChwbGF0Zm9ybSA9PT0gJ2xpbnV4Jykge1xyXG4gICAgICAgIGlmIChkYXRhLnRvU3RyaW5nKCkudHJpbSgpID09PSAnbm8geGNsaXAgb3Igd2wtY2xpcGJvYXJkJykge1xyXG4gICAgICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcclxuICAgICAgICAgICAgdGl0bGU6ICd4Y2xpcCBvciB3bC1jbGlwYm9hcmQgbm90IGZvdW5kJyxcclxuICAgICAgICAgICAgYm9keTogJ1BsZWFzZSBpbnN0YWxsIHhjbGlwKGZvciB4MTEpIG9yIHdsLWNsaXBib2FyZChmb3Igd2F5bGFuZCkgYmVmb3JlIHJ1biBwaWNnbydcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcignUGxlYXNlIGluc3RhbGwgeGNsaXAoZm9yIHgxMSkgb3Igd2wtY2xpcGJvYXJkKGZvciB3YXlsYW5kKSBiZWZvcmUgcnVuIHBpY2dvJykpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGltZ1BhdGggPSBkYXRhLnRvU3RyaW5nKCkudHJpbSgpXHJcblxyXG4gICAgICAvLyBpZiB0aGUgZmlsZVBhdGggaXMgdGhlIHJlYWwgZmlsZSBpbiBzeXN0ZW1cclxuICAgICAgLy8gd2Ugc2hvdWxkIGtlZXAgaXQgaW5zdGVhZCBvZiByZW1vdmluZ1xyXG4gICAgICBsZXQgc2hvdWxkS2VlcEFmdGVyVXBsb2FkaW5nID0gZmFsc2VcclxuXHJcbiAgICAgIC8vIGluIG1hY09TIGlmIHlvdXIgY29weSB0aGUgZmlsZSBpbiBzeXN0ZW0sIGl0J3MgYmFzZW5hbWUgd2lsbCBub3QgZXF1YWwgdG8gb3VyIGRlZmF1bHQgYmFzZW5hbWVcclxuICAgICAgaWYgKHBhdGguYmFzZW5hbWUoaW1nUGF0aCkgIT09IHBhdGguYmFzZW5hbWUoaW1hZ2VQYXRoKSkge1xyXG4gICAgICAgIC8vIGlmIHRoZSBwYXRoIGlzIG5vdCBnZW5lcmF0ZSBieSBwaWNnb1xyXG4gICAgICAgIC8vIGJ1dCB0aGUgcGF0aCBleGlzdHMsIHdlIHNob3VsZCBrZWVwIGl0XHJcbiAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoaW1nUGF0aCkpIHtcclxuICAgICAgICAgIHNob3VsZEtlZXBBZnRlclVwbG9hZGluZyA9IHRydWVcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLy8gaWYgdGhlIGltZ1BhdGggaXMgaW52YWxpZFxyXG4gICAgICBpZiAoaW1nUGF0aCAhPT0gJ25vIGltYWdlJyAmJiAhZnMuZXhpc3RzU3luYyhpbWdQYXRoKSkge1xyXG4gICAgICAgIHJldHVybiByZWplY3QobmV3IEVycm9yKGBDYW4ndCBmaW5kICR7aW1nUGF0aH1gKSlcclxuICAgICAgfVxyXG5cclxuICAgICAgcmVzb2x2ZSh7XHJcbiAgICAgICAgaW1nUGF0aCxcclxuICAgICAgICBzaG91bGRLZWVwQWZ0ZXJVcGxvYWRpbmdcclxuICAgICAgfSlcclxuICAgIH0pXHJcbiAgfSlcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZ2V0Q2xpcGJvYXJkSW1hZ2VcclxuIiwiaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJ1xyXG5cclxuY29uc3QgZXZlbnRCdXMgPSBuZXcgRXZlbnRFbWl0dGVyKClcclxuZXhwb3J0IHtcclxuICBldmVudEJ1c1xyXG59XHJcbiIsIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1mdW5jdGlvbi1yZXR1cm4tdHlwZSAqL1xyXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvcHJvbWlzZS1mdW5jdGlvbi1hc3luYyAqL1xyXG5pbXBvcnQgYXhpb3MsIHsgdHlwZSBBeGlvc1JlcXVlc3RDb25maWcsIHR5cGUgQXhpb3NSZXNwb25zZSB9IGZyb20gJ2F4aW9zJ1xyXG5pbXBvcnQgeyB0eXBlIElQaWNHbywgdHlwZSBVbmRlZmluYWJsZSwgdHlwZSBJQ29uZmlnQ2hhbmdlUGF5bG9hZCwgdHlwZSBJQ29uZmlnLCB0eXBlIElSZXF1ZXN0Q29uZmlnLCB0eXBlIElPbGRSZXFPcHRpb25zLCB0eXBlIElSZXNwb25zZSwgdHlwZSBJRnVsbFJlc3BvbnNlLCB0eXBlIElSZXF1ZXN0IH0gZnJvbSAnLi4vdHlwZXMnXHJcbmltcG9ydCB7IElCdXNFdmVudCB9IGZyb20gJy4uL3V0aWxzL2VudW0nXHJcbmltcG9ydCB7IGV2ZW50QnVzIH0gZnJvbSAnLi4vdXRpbHMvZXZlbnRCdXMnXHJcbmltcG9ydCB7IFVSTCB9IGZyb20gJ3VybCdcclxuaW1wb3J0IEZvcm1EYXRhIGZyb20gJ2Zvcm0tZGF0YSdcclxuaW1wb3J0IGh0dHBzIGZyb20gJ2h0dHBzJ1xyXG5pbXBvcnQgdHVubmVsIGZyb20gJ3R1bm5lbCdcclxuY29uc3QgaHR0cHNBZ2VudCA9IG5ldyBodHRwcy5BZ2VudCh7XHJcbiAgbWF4VmVyc2lvbjogJ1RMU3YxLjInLFxyXG4gIG1pblZlcnNpb246ICdUTFN2MS4yJ1xyXG59KVxyXG5cclxuLy8gdGhhbmtzIGZvciBodHRwczovL2dpdGh1Yi5kZXYvcmVxdWVzdC9yZXF1ZXN0L2Jsb2IvbWFzdGVyL2luZGV4LmpzXHJcbmZ1bmN0aW9uIGFwcGVuZEZvcm1EYXRhIChmb3JtOiBGb3JtRGF0YSwga2V5OiBzdHJpbmcsIGRhdGE6IGFueSk6IHZvaWQge1xyXG4gIGlmICh0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgJiYgJ3ZhbHVlJyBpbiBkYXRhICYmICdvcHRpb25zJyBpbiBkYXRhKSB7XHJcbiAgICBmb3JtLmFwcGVuZChrZXksIGRhdGEudmFsdWUsIGRhdGEub3B0aW9ucylcclxuICB9IGVsc2Uge1xyXG4gICAgZm9ybS5hcHBlbmQoa2V5LCBkYXRhKVxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gcmVxdWVzdEludGVyY2VwdG9yIChvcHRpb25zOiBJT2xkUmVxT3B0aW9ucyB8IEF4aW9zUmVxdWVzdENvbmZpZyk6IEF4aW9zUmVxdWVzdENvbmZpZyAmIHtcclxuICBfX2lzT2xkT3B0aW9ucz86IGJvb2xlYW5cclxufSB7XHJcbiAgbGV0IF9faXNPbGRPcHRpb25zID0gZmFsc2VcclxuICBjb25zdCBvcHQ6IEF4aW9zUmVxdWVzdENvbmZpZzxhbnk+ICYge1xyXG4gICAgX19pc09sZE9wdGlvbnM/OiBib29sZWFuXHJcbiAgfSA9IHtcclxuICAgIC4uLm9wdGlvbnMsXHJcbiAgICB1cmw6IChvcHRpb25zLnVybCBhcyBzdHJpbmcpIHx8ICcnLFxyXG4gICAgaGVhZGVyczogb3B0aW9ucy5oZWFkZXJzIHx8IHt9XHJcbiAgfVxyXG4gIC8vIHVzZXIgcmVxdWVzdCBjb25maWcgcHJveHlcclxuICBpZiAob3B0aW9ucy5wcm94eSkge1xyXG4gICAgbGV0IHByb3h5T3B0aW9ucyA9IG9wdGlvbnMucHJveHlcclxuICAgIGlmICh0eXBlb2YgcHJveHlPcHRpb25zID09PSAnc3RyaW5nJykge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHByb3h5T3B0aW9ucyA9IG5ldyBVUkwob3B0aW9ucy5wcm94eSlcclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIHByb3h5T3B0aW9ucyA9IGZhbHNlXHJcbiAgICAgICAgb3B0LnByb3h5ID0gZmFsc2VcclxuICAgICAgICBjb25zb2xlLmVycm9yKGUpXHJcbiAgICAgIH1cclxuICAgICAgX19pc09sZE9wdGlvbnMgPSB0cnVlXHJcbiAgICB9XHJcbiAgICBpZiAocHJveHlPcHRpb25zKSB7XHJcbiAgICAgIGlmIChvcHRpb25zLnVybD8uc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSkge1xyXG4gICAgICAgIG9wdC5wcm94eSA9IGZhbHNlXHJcbiAgICAgICAgb3B0Lmh0dHBzQWdlbnQgPSB0dW5uZWwuaHR0cHNPdmVySHR0cCh7XHJcbiAgICAgICAgICBwcm94eToge1xyXG4gICAgICAgICAgICBob3N0OiBwcm94eU9wdGlvbnM/Lmhvc3RuYW1lLFxyXG4gICAgICAgICAgICBwb3J0OiBwYXJzZUludChwcm94eU9wdGlvbnM/LnBvcnQsIDEwKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgb3B0LnByb3h5ID0ge1xyXG4gICAgICAgICAgaG9zdDogcHJveHlPcHRpb25zLmhvc3RuYW1lLFxyXG4gICAgICAgICAgcG9ydDogcGFyc2VJbnQocHJveHlPcHRpb25zLnBvcnQsIDEwKSxcclxuICAgICAgICAgIHByb3RvY29sOiAnaHR0cCdcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgaWYgKCdmb3JtRGF0YScgaW4gb3B0aW9ucykge1xyXG4gICAgY29uc3QgZm9ybSA9IG5ldyBGb3JtRGF0YSgpXHJcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvcHRpb25zLmZvcm1EYXRhKSB7XHJcbiAgICAgIGNvbnN0IGRhdGEgPSBvcHRpb25zLmZvcm1EYXRhW2tleV1cclxuICAgICAgYXBwZW5kRm9ybURhdGEoZm9ybSwga2V5LCBkYXRhKVxyXG4gICAgfVxyXG4gICAgb3B0LmRhdGEgPSBmb3JtXHJcbiAgICBvcHQuaGVhZGVycyA9IE9iamVjdC5hc3NpZ24ob3B0LmhlYWRlcnMgfHwge30sIGZvcm0uZ2V0SGVhZGVycygpKVxyXG4gICAgX19pc09sZE9wdGlvbnMgPSB0cnVlXHJcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIHRoaXMgaXMgb2xkIG9wdGlvblxyXG4gICAgZGVsZXRlIG9wdC5mb3JtRGF0YVxyXG4gIH1cclxuICBpZiAoJ2JvZHknIGluIG9wdGlvbnMpIHtcclxuICAgIG9wdC5kYXRhID0gb3B0aW9ucy5ib2R5XHJcbiAgICBfX2lzT2xkT3B0aW9ucyA9IHRydWVcclxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgdGhpcyBpcyBvbGQgb3B0aW9uc1xyXG4gICAgZGVsZXRlIG9wdC5ib2R5XHJcbiAgfVxyXG4gIGlmICgncXMnIGluIG9wdGlvbnMpIHtcclxuICAgIG9wdC5wYXJhbXMgPSBvcHRpb25zLnFzXHJcbiAgICBfX2lzT2xkT3B0aW9ucyA9IHRydWVcclxuICB9XHJcbiAgb3B0Ll9faXNPbGRPcHRpb25zID0gX19pc09sZE9wdGlvbnNcclxuICByZXR1cm4gb3B0XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlc3BvbnNlSW50ZXJjZXB0b3IgKHJlc3BvbnNlOiBBeGlvc1Jlc3BvbnNlKTogSUZ1bGxSZXNwb25zZSB7XHJcbiAgcmV0dXJuIHtcclxuICAgIC4uLnJlc3BvbnNlLFxyXG4gICAgc3RhdHVzQ29kZTogcmVzcG9uc2Uuc3RhdHVzLFxyXG4gICAgYm9keTogcmVzcG9uc2UuZGF0YVxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gcmVzcG9uc2VFcnJvckhhbmRsZXIgKGVycm9yOiBhbnkpIHtcclxuICAvLyBpZiAoZXJyb3IucmVzcG9uc2UpIHtcclxuICAvLyAgIC8vIFRoZSByZXF1ZXN0IHdhcyBtYWRlIGFuZCB0aGUgc2VydmVyIHJlc3BvbmRlZCB3aXRoIGEgc3RhdHVzIGNvZGVcclxuICAvLyAgIC8vIHRoYXQgZmFsbHMgb3V0IG9mIHRoZSByYW5nZSBvZiAyeHhcclxuICAvLyAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvKVxyXG4gIC8vIH0gZWxzZSBpZiAoZXJyb3IucmVxdWVzdCkge1xyXG4gIC8vICAgLy8gVGhlIHJlcXVlc3Qgd2FzIG1hZGUgYnV0IG5vIHJlc3BvbnNlIHdhcyByZWNlaXZlZFxyXG4gIC8vICAgLy8gYGVycm9yLnJlcXVlc3RgIGlzIGFuIGluc3RhbmNlIG9mIFhNTEh0dHBSZXF1ZXN0IGluIHRoZSBicm93c2VyIGFuZCBhbiBpbnN0YW5jZSBvZlxyXG4gIC8vICAgLy8gaHR0cC5DbGllbnRSZXF1ZXN0IGluIG5vZGUuanNcclxuICAvLyAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvci5yZXF1ZXN0KVxyXG4gIC8vIH0gZWxzZSB7XHJcbiAgLy8gICAvLyBTb21ldGhpbmcgaGFwcGVuZWQgaW4gc2V0dGluZyB1cCB0aGUgcmVxdWVzdCB0aGF0IHRyaWdnZXJlZCBhbiBFcnJvclxyXG4gIC8vICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yLm1lc3NhZ2UpXHJcbiAgLy8gfVxyXG4gIGNvbnN0IGVycm9yT2JqID0ge1xyXG4gICAgbWV0aG9kOiBlcnJvcj8uY29uZmlnPy5tZXRob2Q/LnRvVXBwZXJDYXNlKCkgfHwgJycsXHJcbiAgICB1cmw6IGVycm9yPy5jb25maWc/LnVybCB8fCAnJyxcclxuICAgIHN0YXR1c0NvZGU6IGVycm9yPy5yZXNwb25zZT8uc3RhdHVzIHx8IDAsXHJcbiAgICBtZXNzYWdlOiBlcnJvcj8ubWVzc2FnZSB8fCAnJyxcclxuICAgIHN0YWNrOiBlcnJvcj8uc3RhY2sgfHwge30sXHJcbiAgICByZXNwb25zZToge1xyXG4gICAgICBzdGF0dXM6IGVycm9yPy5yZXNwb25zZT8uc3RhdHVzIHx8IDAsXHJcbiAgICAgIHN0YXR1c0NvZGU6IGVycm9yPy5yZXNwb25zZT8uc3RhdHVzIHx8IDAsXHJcbiAgICAgIGJvZHk6IGVycm9yPy5yZXNwb25zZT8uZGF0YSB8fCAnJ1xyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3JPYmopXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBSZXF1ZXN0IGltcGxlbWVudHMgSVJlcXVlc3Qge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgY3R4OiBJUGljR29cclxuICBwcml2YXRlIHByb3h5OiBVbmRlZmluYWJsZTxzdHJpbmc+ID0gJydcclxuICBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWc8YW55PiA9IHt9XHJcbiAgY29uc3RydWN0b3IgKGN0eDogSVBpY0dvKSB7XHJcbiAgICB0aGlzLmN0eCA9IGN0eFxyXG4gICAgdGhpcy5pbml0KClcclxuICAgIGV2ZW50QnVzLm9uKElCdXNFdmVudC5DT05GSUdfQ0hBTkdFLCAoZGF0YTogSUNvbmZpZ0NoYW5nZVBheWxvYWQ8c3RyaW5nIHwgSUNvbmZpZ1sncGljQmVkJ10+KSA9PiB7XHJcbiAgICAgIHN3aXRjaCAoZGF0YS5jb25maWdOYW1lKSB7XHJcbiAgICAgICAgY2FzZSAncGljQmVkJzpcclxuICAgICAgICAgIGlmICgoZGF0YS52YWx1ZSBhcyBJQ29uZmlnWydwaWNCZWQnXSk/LnByb3h5KSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJveHkgPSAoZGF0YS52YWx1ZSBhcyBJQ29uZmlnWydwaWNCZWQnXSkucHJveHlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgY2FzZSAncGljQmVkLnByb3h5JzpcclxuICAgICAgICAgIHRoaXMucHJveHkgPSBkYXRhLnZhbHVlIGFzIHN0cmluZ1xyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdCAoKTogdm9pZCB7XHJcbiAgICBjb25zdCBwcm94eSA9IHRoaXMuY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxzdHJpbmc+PigncGljQmVkLnByb3h5JylcclxuICAgIGlmIChwcm94eSkge1xyXG4gICAgICB0aGlzLnByb3h5ID0gcHJveHlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlUHJveHkgKCk6IEF4aW9zUmVxdWVzdENvbmZpZ1sncHJveHknXSB8IGZhbHNlIHtcclxuICAgIGlmICh0aGlzLnByb3h5KSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgcHJveHlPcHRpb25zID0gbmV3IFVSTCh0aGlzLnByb3h5KVxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICBob3N0OiBwcm94eU9wdGlvbnMuaG9zdG5hbWUsXHJcbiAgICAgICAgICBwb3J0OiBwYXJzZUludChwcm94eU9wdGlvbnMucG9ydCB8fCAnMCcsIDEwKSxcclxuICAgICAgICAgIHByb3RvY29sOiBwcm94eU9wdGlvbnMucHJvdG9jb2xcclxuICAgICAgICB9XHJcbiAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlXHJcbiAgfVxyXG5cclxuICAvLyAjNjQgZHluYW1pYyBnZXQgcHJveHkgdmFsdWVcclxuICByZXF1ZXN0PFQsIFUgZXh0ZW5kcyAoXHJcbiAgICBJUmVxdWVzdENvbmZpZzxVPiBleHRlbmRzIElPbGRSZXFPcHRpb25zID8gSU9sZFJlcU9wdGlvbnMgOiBJUmVxdWVzdENvbmZpZzxVPiBleHRlbmRzIEF4aW9zUmVxdWVzdENvbmZpZyA/IEF4aW9zUmVxdWVzdENvbmZpZyA6IG5ldmVyXHJcbiAgKT4gKG9wdGlvbnM6IFUpOiBQcm9taXNlPElSZXNwb25zZTxULCBVPj4ge1xyXG4gICAgdGhpcy5vcHRpb25zLnByb3h5ID0gdGhpcy5oYW5kbGVQcm94eSgpXHJcbiAgICB0aGlzLm9wdGlvbnMuaGVhZGVycyA9IG9wdGlvbnMuaGVhZGVycyB8fCB7fVxyXG4gICAgdGhpcy5vcHRpb25zLm1heEJvZHlMZW5ndGggPSBJbmZpbml0eVxyXG4gICAgdGhpcy5vcHRpb25zLm1heENvbnRlbnRMZW5ndGggPSBJbmZpbml0eVxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5wcm94eSAmJiBvcHRpb25zLnVybD8uc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSkge1xyXG4gICAgICB0aGlzLm9wdGlvbnMuaHR0cHNBZ2VudCA9IHR1bm5lbC5odHRwc092ZXJIdHRwKHtcclxuICAgICAgICBwcm94eToge1xyXG4gICAgICAgICAgaG9zdDogdGhpcy5vcHRpb25zLnByb3h5Lmhvc3QsXHJcbiAgICAgICAgICBwb3J0OiB0aGlzLm9wdGlvbnMucHJveHkucG9ydFxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgdGhpcy5vcHRpb25zLnByb3h5ID0gZmFsc2VcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5odHRwc0FnZW50ID0gaHR0cHNBZ2VudFxyXG4gICAgfVxyXG4gICAgLy8gIU5PVElDRSB0aGlzLm9wdGlvbnMgIT09IG9wdGlvbnNcclxuICAgIC8vIHRoaXMub3B0aW9ucyBpcyB0aGUgZGVmYXVsdCBvcHRpb25zXHJcbiAgICBjb25zdCBpbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSh0aGlzLm9wdGlvbnMpXHJcbiAgICBpbnN0YW5jZS5pbnRlcmNlcHRvcnMucmVzcG9uc2UudXNlKHJlc3BvbnNlSW50ZXJjZXB0b3IsIHJlc3BvbnNlRXJyb3JIYW5kbGVyKVxyXG5cclxuICAgIC8vIGNvbXBhdGlibGUgd2l0aCBvbGQgcmVxdWVzdCBvcHRpb25zIHRvIG5ldyBvcHRpb25zXHJcbiAgICBjb25zdCBvcHQgPSByZXF1ZXN0SW50ZXJjZXB0b3Iob3B0aW9ucylcclxuXHJcbiAgICBpbnN0YW5jZS5pbnRlcmNlcHRvcnMucmVxdWVzdC51c2UoZnVuY3Rpb24gKG9iaikge1xyXG4gICAgICAvLyBoYW5kbGUgQ29udGVudC1UeXBlXHJcbiAgICAgIGxldCBjb250ZW50VHlwZSA9ICcnXHJcbiAgICAgIGlmIChvYmo/LmhlYWRlcnM/LmNvbnRlbnRUeXBlKSB7XHJcbiAgICAgICAgY29udGVudFR5cGUgPSBvYmouaGVhZGVycy5jb250ZW50VHlwZSBhcyBzdHJpbmdcclxuICAgICAgICBkZWxldGUgb2JqLmhlYWRlcnMuY29udGVudFR5cGVcclxuICAgICAgfSBlbHNlIGlmIChvYmo/LmhlYWRlcnM/LkNvbnRlbnRUeXBlKSB7XHJcbiAgICAgICAgY29udGVudFR5cGUgPSBvYmouaGVhZGVycy5Db250ZW50VHlwZSBhcyBzdHJpbmdcclxuICAgICAgICBkZWxldGUgb2JqLmhlYWRlcnMuQ29udGVudFR5cGVcclxuICAgICAgfSBlbHNlIGlmIChvYmo/LmhlYWRlcnM/LlsnY29udGVudC10eXBlJ10pIHtcclxuICAgICAgICBjb250ZW50VHlwZSA9IG9iai5oZWFkZXJzWydjb250ZW50LXR5cGUnXSBhcyBzdHJpbmdcclxuICAgICAgICBkZWxldGUgb2JqLmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddXHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbnRlbnRUeXBlICE9PSAnJyAmJiBvYmouaGVhZGVycykge1xyXG4gICAgICAgIG9iai5oZWFkZXJzWydDb250ZW50LVR5cGUnXSA9IGNvbnRlbnRUeXBlXHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG9ialxyXG4gICAgfSlcclxuICAgIGlmICgncmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2UnIGluIG9wdGlvbnMgJiYgb3B0aW9ucy5yZXNvbHZlV2l0aEZ1bGxSZXNwb25zZSkge1xyXG4gICAgICByZXR1cm4gaW5zdGFuY2UucmVxdWVzdChvcHQpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gaW5zdGFuY2UucmVxdWVzdChvcHQpLnRoZW4ocmVzID0+IHtcclxuICAgICAgICAvLyB1c2Ugb2xkIHJlcXVlc3Qgb3B0aW9uIGZvcm1hdFxyXG4gICAgICAgIGlmIChvcHQuX19pc09sZE9wdGlvbnMpIHtcclxuICAgICAgICAgIGlmICgnanNvbicgaW4gb3B0aW9ucykge1xyXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5qc29uKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHJlcy5kYXRhXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShyZXMuZGF0YSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIHJlcy5kYXRhXHJcbiAgICAgICAgfVxyXG4gICAgICB9KSBhcyBQcm9taXNlPElSZXNwb25zZTxULCBVPj5cclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFJlcXVlc3RcclxuIiwiaW1wb3J0IHsgdHlwZSBJQ29uZmlnLCB0eXBlIElQaWNHbyB9IGZyb20gJy4uL3R5cGVzJ1xyXG5pbXBvcnQgeyBKU09OU3RvcmUgfSBmcm9tICdAcGljZ28vc3RvcmUnXHJcbmltcG9ydCB7IHR5cGUgSUpTT04gfSBmcm9tICdAcGljZ28vc3RvcmUvZGlzdC90eXBlcydcclxuXHJcbmNsYXNzIERCIHtcclxuICBwcml2YXRlIHJlYWRvbmx5IGN0eDogSVBpY0dvXHJcbiAgcHJpdmF0ZSByZWFkb25seSBkYjogSlNPTlN0b3JlXHJcbiAgY29uc3RydWN0b3IgKGN0eDogSVBpY0dvKSB7XHJcbiAgICB0aGlzLmN0eCA9IGN0eFxyXG4gICAgdGhpcy5kYiA9IG5ldyBKU09OU3RvcmUodGhpcy5jdHguY29uZmlnUGF0aClcclxuXHJcbiAgICBpZiAoIXRoaXMuZGIuaGFzKCdwaWNCZWQnKSkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHRoaXMuZGIuc2V0KCdwaWNCZWQnLCB7XHJcbiAgICAgICAgICB1cGxvYWRlcjogJ3NtbXMnLFxyXG4gICAgICAgICAgY3VycmVudDogJ3NtbXMnXHJcbiAgICAgICAgfSlcclxuICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGUpXHJcbiAgICAgICAgdGhyb3cgZVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuZGIuaGFzKCdwaWNnb1BsdWdpbnMnKSkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHRoaXMuZGIuc2V0KCdwaWNnb1BsdWdpbnMnLCB7fSlcclxuICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGUpXHJcbiAgICAgICAgdGhyb3cgZVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZWFkIChmbHVzaD86IGJvb2xlYW4pOiBJSlNPTiB7XHJcbiAgICByZXR1cm4gdGhpcy5kYi5yZWFkKGZsdXNoKVxyXG4gIH1cclxuXHJcbiAgZ2V0IChrZXk6IHN0cmluZyA9ICcnKTogYW55IHtcclxuICAgIHRoaXMucmVhZCh0cnVlKVxyXG4gICAgcmV0dXJuIHRoaXMuZGIuZ2V0KGtleSlcclxuICB9XHJcblxyXG4gIHNldCAoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMucmVhZCh0cnVlKVxyXG4gICAgdGhpcy5kYi5zZXQoa2V5LCB2YWx1ZSlcclxuICB9XHJcblxyXG4gIGhhcyAoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHRoaXMucmVhZCh0cnVlKVxyXG4gICAgcmV0dXJuIHRoaXMuZGIuaGFzKGtleSlcclxuICB9XHJcblxyXG4gIHVuc2V0IChrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgdGhpcy5yZWFkKHRydWUpXHJcbiAgICByZXR1cm4gdGhpcy5kYi51bnNldChrZXksIHZhbHVlKVxyXG4gIH1cclxuXHJcbiAgc2F2ZUNvbmZpZyAoY29uZmlnOiBQYXJ0aWFsPElDb25maWc+KTogdm9pZCB7XHJcbiAgICBPYmplY3Qua2V5cyhjb25maWcpLmZvckVhY2goKG5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICB0aGlzLnNldChuYW1lLCBjb25maWdbbmFtZV0pXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlQ29uZmlnIChjb25maWc6IElDb25maWcpOiB2b2lkIHtcclxuICAgIE9iamVjdC5rZXlzKGNvbmZpZykuZm9yRWFjaCgobmFtZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgIHRoaXMudW5zZXQobmFtZSwgY29uZmlnW25hbWVdKVxyXG4gICAgfSlcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IERCXHJcblxyXG4vLyBjb25zdCBpbml0Q29uZmlnID0gKGNvbmZpZ1BhdGg6IHN0cmluZyk6IGxvd2RiLkxvd2RiU3luYzxhbnk+ID0+IHtcclxuLy8gfVxyXG5cclxuLy8gY29uc3Qgc2F2ZUNvbmZpZyA9IChjb25maWdQYXRoOiBzdHJpbmcsIGNvbmZpZzogYW55KTogdm9pZCA9PiB7XHJcbi8vICAgY29uc3QgZGIgPSBpbml0Q29uZmlnKGNvbmZpZ1BhdGgpXHJcbi8vICAgT2JqZWN0LmtleXMoY29uZmlnKS5mb3JFYWNoKChuYW1lOiBzdHJpbmcpID0+IHtcclxuLy8gICAgIGRiLnJlYWQoKS5zZXQobmFtZSwgY29uZmlnW25hbWVdKS53cml0ZSgpXHJcbi8vICAgfSlcclxuLy8gfVxyXG5cclxuLy8gZXhwb3J0IHtcclxuLy8gaW5pdENvbmZpZyxcclxuLy8gc2F2ZUNvbmZpZ1xyXG4vLyB9XHJcbiIsImltcG9ydCBzcGF3biBmcm9tICdjcm9zcy1zcGF3bidcclxuaW1wb3J0IHtcclxuICB0eXBlIElSZXN1bHQsXHJcbiAgdHlwZSBJUHJvY2Vzc0VudixcclxuICB0eXBlIElQbHVnaW5Qcm9jZXNzUmVzdWx0LFxyXG4gIHR5cGUgSVBsdWdpbkhhbmRsZXIsXHJcbiAgdHlwZSBJUGx1Z2luSGFuZGxlck9wdGlvbnMsXHJcbiAgdHlwZSBVbmRlZmluYWJsZSxcclxuICB0eXBlIElQaWNHbyxcclxuICB0eXBlIElQbHVnaW5IYW5kbGVyUmVzdWx0XHJcbn0gZnJvbSAnLi4vdHlwZXMnXHJcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi91dGlscy9lbnVtJ1xyXG5pbXBvcnQgeyBnZXRQcm9jZXNzUGx1Z2luTmFtZSwgZ2V0Tm9ybWFsUGx1Z2luTmFtZSB9IGZyb20gJy4uL3V0aWxzL2NvbW1vbidcclxuaW1wb3J0IHsgdHlwZSBJTG9jYWxlc0tleSB9IGZyb20gJy4uL2kxOG4vemgtQ04nXHJcblxyXG5leHBvcnQgY2xhc3MgUGx1Z2luSGFuZGxlciBpbXBsZW1lbnRzIElQbHVnaW5IYW5kbGVyIHtcclxuICAvLyBUaGFua3MgdG8gZmVmbG93IC0+IGh0dHBzOi8vZ2l0aHViLmNvbS9mZWZsb3cvZmVmbG93L2Jsb2IvbWFzdGVyL2xpYi9pbnRlcm5hbC9pbnN0YWxsL3BsdWdpbi5qc1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgY3R4OiBJUGljR29cclxuICBjb25zdHJ1Y3RvciAoY3R4OiBJUGljR28pIHtcclxuICAgIHRoaXMuY3R4ID0gY3R4XHJcbiAgfVxyXG5cclxuICBhc3luYyBpbnN0YWxsIChwbHVnaW5zOiBzdHJpbmdbXSwgb3B0aW9uczogSVBsdWdpbkhhbmRsZXJPcHRpb25zID0ge30sIGVudj86IElQcm9jZXNzRW52KTogUHJvbWlzZTxJUGx1Z2luSGFuZGxlclJlc3VsdDxib29sZWFuPj4ge1xyXG4gICAgY29uc3QgaW5zdGFsbGVkUGx1Z2luczogc3RyaW5nW10gPSBbXVxyXG4gICAgY29uc3QgcHJvY2Vzc1BsdWdpbnMgPSBwbHVnaW5zXHJcbiAgICAgIC5tYXAoKGl0ZW06IHN0cmluZykgPT4gaGFuZGxlUGx1Z2luTmFtZVByb2Nlc3ModGhpcy5jdHgsIGl0ZW0pKVxyXG4gICAgICAuZmlsdGVyKChpdGVtKSA9PiB7XHJcbiAgICAgICAgLy8gZGV0ZWN0IGlmIGhhcyBhbHJlYWR5IGluc3RhbGxlZFxyXG4gICAgICAgIC8vIG9yIHdpbGwgY2F1c2UgZXJyb3JcclxuICAgICAgICBpZiAodGhpcy5jdHgucGx1Z2luTG9hZGVyLmhhc1BsdWdpbihpdGVtLnBrZ05hbWUpKSB7XHJcbiAgICAgICAgICBpbnN0YWxsZWRQbHVnaW5zLnB1c2goaXRlbS5wa2dOYW1lKVxyXG4gICAgICAgICAgdGhpcy5jdHgubG9nLnN1Y2Nlc3MoYFBpY0dvIGhhcyBhbHJlYWR5IGluc3RhbGxlZCAke2l0ZW0ucGtnTmFtZX1gKVxyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGlmIHNvbWV0aGluZyB3cm9uZywgZmlsdGVyIGl0IG91dFxyXG4gICAgICAgIGlmICghaXRlbS5zdWNjZXNzKSB7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWVcclxuICAgICAgfSlcclxuICAgIGNvbnN0IGZ1bGxOYW1lTGlzdCA9IHByb2Nlc3NQbHVnaW5zLm1hcChpdGVtID0+IGl0ZW0uZnVsbE5hbWUpXHJcbiAgICBjb25zdCBwa2dOYW1lTGlzdCA9IHByb2Nlc3NQbHVnaW5zLm1hcChpdGVtID0+IGl0ZW0ucGtnTmFtZSlcclxuICAgIGlmIChmdWxsTmFtZUxpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICAvLyBpbnN0YWxsIHBsdWdpbnMgbXVzdCB1c2UgZnVsbE5hbWVMaXN0OlxyXG4gICAgICAvLyAxLiBpbnN0YWxsIHJlbW90ZSBwYWNhZ2VcclxuICAgICAgLy8gMi4gaW5zdGFsbCBsb2NhbCBwYWNhZ2VcclxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5leGVjQ29tbWFuZCgnaW5zdGFsbCcsIGZ1bGxOYW1lTGlzdCwgdGhpcy5jdHguYmFzZURpciwgb3B0aW9ucywgZW52KVxyXG4gICAgICBpZiAoIXJlc3VsdC5jb2RlKSB7XHJcbiAgICAgICAgcGtnTmFtZUxpc3QuZm9yRWFjaCgocGx1Z2luTmFtZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmN0eC5wbHVnaW5Mb2FkZXIucmVnaXN0ZXJQbHVnaW4ocGx1Z2luTmFtZSlcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuY3R4LmxvZy5zdWNjZXNzKHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfU1VDQ0VTUycpKVxyXG4gICAgICAgIHRoaXMuY3R4LmVtaXQoJ2luc3RhbGxTdWNjZXNzJywge1xyXG4gICAgICAgICAgdGl0bGU6IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfU1VDQ0VTUycpLFxyXG4gICAgICAgICAgYm9keTogWy4uLnBrZ05hbWVMaXN0LCAuLi5pbnN0YWxsZWRQbHVnaW5zXVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgY29uc3QgcmVzOiBJUGx1Z2luSGFuZGxlclJlc3VsdDx0cnVlPiA9IHtcclxuICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXHJcbiAgICAgICAgICBib2R5OiBbLi4ucGtnTmFtZUxpc3QsIC4uLmluc3RhbGxlZFBsdWdpbnNdXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXNcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBlcnIgPSB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRF9SRUFTT04nLCB7XHJcbiAgICAgICAgICBjb2RlOiBgJHtyZXN1bHQuY29kZX1gLFxyXG4gICAgICAgICAgZGF0YTogcmVzdWx0LmRhdGFcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihlcnIpXHJcbiAgICAgICAgdGhpcy5jdHguZW1pdCgnaW5zdGFsbEZhaWxlZCcsIHtcclxuICAgICAgICAgIHRpdGxlOiB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRCcpLFxyXG4gICAgICAgICAgYm9keTogZXJyXHJcbiAgICAgICAgfSlcclxuICAgICAgICBjb25zdCByZXM6IElQbHVnaW5IYW5kbGVyUmVzdWx0PGZhbHNlPiA9IHtcclxuICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxyXG4gICAgICAgICAgYm9keTogZXJyXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXNcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChpbnN0YWxsZWRQbHVnaW5zLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICBjb25zdCBlcnIgPSB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEX1ZBTElEJylcclxuICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGVycilcclxuICAgICAgdGhpcy5jdHguZW1pdCgnaW5zdGFsbEZhaWxlZCcsIHtcclxuICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRUQnKSxcclxuICAgICAgICBib2R5OiBlcnJcclxuICAgICAgfSlcclxuICAgICAgY29uc3QgcmVzOiBJUGx1Z2luSGFuZGxlclJlc3VsdDxmYWxzZT4gPSB7XHJcbiAgICAgICAgc3VjY2VzczogZmFsc2UsXHJcbiAgICAgICAgYm9keTogZXJyXHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHJlc1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jdHgubG9nLnN1Y2Nlc3ModGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9TVUNDRVNTJykpXHJcbiAgICAgIHRoaXMuY3R4LmVtaXQoJ2luc3RhbGxTdWNjZXNzJywge1xyXG4gICAgICAgIHRpdGxlOiB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX1NVQ0NFU1MnKSxcclxuICAgICAgICBib2R5OiBbLi4ucGtnTmFtZUxpc3QsIC4uLmluc3RhbGxlZFBsdWdpbnNdXHJcbiAgICAgIH0pXHJcbiAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8dHJ1ZT4gPSB7XHJcbiAgICAgICAgc3VjY2VzczogdHJ1ZSxcclxuICAgICAgICBib2R5OiBbLi4ucGtnTmFtZUxpc3QsIC4uLmluc3RhbGxlZFBsdWdpbnNdXHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHJlc1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgdW5pbnN0YWxsIChwbHVnaW5zOiBzdHJpbmdbXSk6IFByb21pc2U8SVBsdWdpbkhhbmRsZXJSZXN1bHQ8Ym9vbGVhbj4+IHtcclxuICAgIGNvbnN0IHByb2Nlc3NQbHVnaW5zID0gcGx1Z2lucy5tYXAoKGl0ZW06IHN0cmluZykgPT4gaGFuZGxlUGx1Z2luTmFtZVByb2Nlc3ModGhpcy5jdHgsIGl0ZW0pKS5maWx0ZXIoaXRlbSA9PiBpdGVtLnN1Y2Nlc3MpXHJcbiAgICBjb25zdCBwa2dOYW1lTGlzdCA9IHByb2Nlc3NQbHVnaW5zLm1hcChpdGVtID0+IGl0ZW0ucGtnTmFtZSlcclxuICAgIGlmIChwa2dOYW1lTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIC8vIHVuaW5zdGFsbCBwbHVnaW5zIG11c3QgdXNlIHBrZ05hbWVMaXN0OlxyXG4gICAgICAvLyBucG0gdW5pbnN0YWxsIHdpbGwgdXNlIHRoZSBwYWNrYWdlLmpzb24ncyBuYW1lXHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZXhlY0NvbW1hbmQoJ3VuaW5zdGFsbCcsIHBrZ05hbWVMaXN0LCB0aGlzLmN0eC5iYXNlRGlyKVxyXG4gICAgICBpZiAoIXJlc3VsdC5jb2RlKSB7XHJcbiAgICAgICAgcGtnTmFtZUxpc3QuZm9yRWFjaCgocGx1Z2luTmFtZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmN0eC5wbHVnaW5Mb2FkZXIudW5yZWdpc3RlclBsdWdpbihwbHVnaW5OYW1lKVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy5jdHgubG9nLnN1Y2Nlc3ModGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX1NVQ0NFU1MnKSlcclxuICAgICAgICB0aGlzLmN0eC5lbWl0KCd1bmluc3RhbGxTdWNjZXNzJywge1xyXG4gICAgICAgICAgdGl0bGU6IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9TVUNDRVNTJyksXHJcbiAgICAgICAgICBib2R5OiBwa2dOYW1lTGlzdFxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgY29uc3QgcmVzOiBJUGx1Z2luSGFuZGxlclJlc3VsdDx0cnVlPiA9IHtcclxuICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXHJcbiAgICAgICAgICBib2R5OiBwa2dOYW1lTGlzdFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgZXJyID0gdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRF9SRUFTT04nLCB7XHJcbiAgICAgICAgICBjb2RlOiBgJHtyZXN1bHQuY29kZX1gLFxyXG4gICAgICAgICAgZGF0YTogcmVzdWx0LmRhdGFcclxuICAgICAgICB9KVxyXG4gICAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihlcnIpXHJcbiAgICAgICAgdGhpcy5jdHguZW1pdCgndW5pbnN0YWxsRmFpbGVkJywge1xyXG4gICAgICAgICAgdGl0bGU6IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRUQnKSxcclxuICAgICAgICAgIGJvZHk6IGVyclxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgY29uc3QgcmVzOiBJUGx1Z2luSGFuZGxlclJlc3VsdDxmYWxzZT4gPSB7XHJcbiAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcclxuICAgICAgICAgIGJvZHk6IGVyclxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGVyciA9IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfVkFMSUQnKVxyXG4gICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoZXJyKVxyXG4gICAgICB0aGlzLmN0eC5lbWl0KCd1bmluc3RhbGxGYWlsZWQnLCB7XHJcbiAgICAgICAgdGl0bGU6IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRUQnKSxcclxuICAgICAgICBib2R5OiBlcnJcclxuICAgICAgfSlcclxuICAgICAgY29uc3QgcmVzOiBJUGx1Z2luSGFuZGxlclJlc3VsdDxmYWxzZT4gPSB7XHJcbiAgICAgICAgc3VjY2VzczogZmFsc2UsXHJcbiAgICAgICAgYm9keTogZXJyXHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHJlc1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgdXBkYXRlIChwbHVnaW5zOiBzdHJpbmdbXSwgb3B0aW9uczogSVBsdWdpbkhhbmRsZXJPcHRpb25zID0ge30sIGVudj86IElQcm9jZXNzRW52KTogUHJvbWlzZTxJUGx1Z2luSGFuZGxlclJlc3VsdDxib29sZWFuPj4ge1xyXG4gICAgY29uc3QgcHJvY2Vzc1BsdWdpbnMgPSBwbHVnaW5zLm1hcCgoaXRlbTogc3RyaW5nKSA9PiBoYW5kbGVQbHVnaW5OYW1lUHJvY2Vzcyh0aGlzLmN0eCwgaXRlbSkpLmZpbHRlcihpdGVtID0+IGl0ZW0uc3VjY2VzcylcclxuICAgIGNvbnN0IHBrZ05hbWVMaXN0ID0gcHJvY2Vzc1BsdWdpbnMubWFwKGl0ZW0gPT4gaXRlbS5wa2dOYW1lKVxyXG4gICAgaWYgKHBrZ05hbWVMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgLy8gdXBkYXRlIHBsdWdpbnMgbXVzdCB1c2UgcGtnTmFtZUxpc3Q6XHJcbiAgICAgIC8vIG5wbSB1cGRhdGUgd2lsbCB1c2UgdGhlIHBhY2thZ2UuanNvbidzIG5hbWVcclxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5leGVjQ29tbWFuZCgndXBkYXRlJywgcGtnTmFtZUxpc3QsIHRoaXMuY3R4LmJhc2VEaXIsIG9wdGlvbnMsIGVudilcclxuICAgICAgaWYgKCFyZXN1bHQuY29kZSkge1xyXG4gICAgICAgIHRoaXMuY3R4LmxvZy5zdWNjZXNzKHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9TVUNDRVNTJykpXHJcbiAgICAgICAgdGhpcy5jdHguZW1pdCgndXBkYXRlU3VjY2VzcycsIHtcclxuICAgICAgICAgIHRpdGxlOiB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfU1VDQ0VTUycpLFxyXG4gICAgICAgICAgYm9keTogcGtnTmFtZUxpc3RcclxuICAgICAgICB9KVxyXG4gICAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8dHJ1ZT4gPSB7XHJcbiAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxyXG4gICAgICAgICAgYm9keTogcGtnTmFtZUxpc3RcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGVyciA9IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRURfUkVBU09OJywge1xyXG4gICAgICAgICAgY29kZTogYCR7cmVzdWx0LmNvZGV9YCxcclxuICAgICAgICAgIGRhdGE6IHJlc3VsdC5kYXRhXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoZXJyKVxyXG4gICAgICAgIHRoaXMuY3R4LmVtaXQoJ3VwZGF0ZUZhaWxlZCcsIHtcclxuICAgICAgICAgIHRpdGxlOiB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEJyksXHJcbiAgICAgICAgICBib2R5OiBlcnJcclxuICAgICAgICB9KVxyXG4gICAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8ZmFsc2U+ID0ge1xyXG4gICAgICAgICAgc3VjY2VzczogZmFsc2UsXHJcbiAgICAgICAgICBib2R5OiBlcnJcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBlcnIgPSB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEX1ZBTElEJylcclxuICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGVycilcclxuICAgICAgdGhpcy5jdHguZW1pdCgndXBkYXRlRmFpbGVkJywge1xyXG4gICAgICAgIHRpdGxlOiB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEJyksXHJcbiAgICAgICAgYm9keTogZXJyXHJcbiAgICAgIH0pXHJcbiAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8ZmFsc2U+ID0ge1xyXG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxyXG4gICAgICAgIGJvZHk6IGVyclxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiByZXNcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgZXhlY0NvbW1hbmQgKGNtZDogc3RyaW5nLCBtb2R1bGVzOiBzdHJpbmdbXSwgd2hlcmU6IHN0cmluZywgb3B0aW9uczogSVBsdWdpbkhhbmRsZXJPcHRpb25zID0ge30sIGVudjogSVByb2Nlc3NFbnYgPSB7fSk6IFByb21pc2U8SVJlc3VsdD4ge1xyXG4gICAgLy8gb3B0aW9ucyBmaXJzdFxyXG4gICAgY29uc3QgcmVnaXN0cnkgPSBvcHRpb25zLnJlZ2lzdHJ5IHx8IHRoaXMuY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxzdHJpbmc+Pignc2V0dGluZ3MucmVnaXN0cnknKVxyXG4gICAgY29uc3QgcHJveHkgPSBvcHRpb25zLnByb3h5IHx8IHRoaXMuY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxzdHJpbmc+Pignc2V0dGluZ3MucHJveHknKVxyXG4gICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlOiBhbnkpOiB2b2lkID0+IHtcclxuICAgICAgbGV0IGFyZ3MgPSBbY21kXS5jb25jYXQobW9kdWxlcykuY29uY2F0KCctLWNvbG9yPWFsd2F5cycpLmNvbmNhdCgnLS1zYXZlJylcclxuICAgICAgaWYgKHJlZ2lzdHJ5KSB7XHJcbiAgICAgICAgYXJncyA9IGFyZ3MuY29uY2F0KGAtLXJlZ2lzdHJ5PSR7cmVnaXN0cnl9YClcclxuICAgICAgfVxyXG4gICAgICBpZiAocHJveHkpIHtcclxuICAgICAgICBhcmdzID0gYXJncy5jb25jYXQoYC0tcHJveHk9JHtwcm94eX1gKVxyXG4gICAgICB9XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgbnBtID0gc3Bhd24oJ25wbScsIGFyZ3MsIHsgY3dkOiB3aGVyZSwgZW52OiBPYmplY3QuYXNzaWduKHt9LCBwcm9jZXNzLmVudiwgZW52KSB9KVxyXG5cclxuICAgICAgICBsZXQgb3V0cHV0ID0gJydcclxuICAgICAgICBucG0uc3Rkb3V0Py5vbignZGF0YScsIChkYXRhOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgIG91dHB1dCArPSBkYXRhXHJcbiAgICAgICAgfSkucGlwZShwcm9jZXNzLnN0ZG91dClcclxuXHJcbiAgICAgICAgbnBtLnN0ZGVycj8ub24oJ2RhdGEnLCAoZGF0YTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICBvdXRwdXQgKz0gZGF0YVxyXG4gICAgICAgIH0pLnBpcGUocHJvY2Vzcy5zdGRlcnIpXHJcblxyXG4gICAgICAgIG5wbS5vbignY2xvc2UnLCAoY29kZTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICBpZiAoIWNvZGUpIHtcclxuICAgICAgICAgICAgcmVzb2x2ZSh7IGNvZGU6IDAsIGRhdGE6IG91dHB1dCB9KVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmVzb2x2ZSh7IGNvZGUsIGRhdGE6IG91dHB1dCB9KVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLy8gZm9yIHVzZXJzIHdobyBoYXZlbid0IGluc3RhbGxlZCBub2RlLmpzXHJcbiAgICAgICAgbnBtLm9uKCdlcnJvcicsIChlcnI6IEVycm9yKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoZXJyKVxyXG4gICAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKCdOUE0gaXMgbm90IGluc3RhbGxlZCcpXHJcbiAgICAgICAgICB0aGlzLmN0eC5lbWl0KElCdWlsZEluRXZlbnQuRkFJTEVELCAnTlBNIGlzIG5vdCBpbnN0YWxsZWQnKVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoZSBhcyBFcnJvcilcclxuICAgICAgICB0aGlzLmN0eC5lbWl0KElCdWlsZEluRXZlbnQuRkFJTEVELCBlKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIHRyYW5zZm9ybSB0aGUgaW5wdXQgcGx1Z2luIG5hbWUgb3IgcGF0aCBzdHJpbmcgdG8gdmFsaWQgcmVzdWx0XHJcbiAqIEBwYXJhbSBjdHhcclxuICogQHBhcmFtIG5hbWVPclBhdGhcclxuICovXHJcbmNvbnN0IGhhbmRsZVBsdWdpbk5hbWVQcm9jZXNzID0gKGN0eDogSVBpY0dvLCBuYW1lT3JQYXRoOiBzdHJpbmcpOiBJUGx1Z2luUHJvY2Vzc1Jlc3VsdCA9PiB7XHJcbiAgY29uc3QgcmVzID0ge1xyXG4gICAgc3VjY2VzczogZmFsc2UsXHJcbiAgICBmdWxsTmFtZTogJycsXHJcbiAgICBwa2dOYW1lOiAnJ1xyXG4gIH1cclxuICBjb25zdCByZXN1bHQgPSBnZXRQcm9jZXNzUGx1Z2luTmFtZShuYW1lT3JQYXRoLCBjdHgubG9nKVxyXG4gIGlmICghcmVzdWx0KSB7XHJcbiAgICByZXR1cm4gcmVzXHJcbiAgfVxyXG4gIC8vIGZpcnN0IGdldCByZXN1bHQgdGhlbiBkbyB0aGlzIHByb2Nlc3NcclxuICAvLyBvciBzb21lIGVycm9yIHdpbGwgbG9nIHR3aWNlXHJcbiAgY29uc3QgcGtnTmFtZSA9IGdldE5vcm1hbFBsdWdpbk5hbWUocmVzdWx0LCBjdHgubG9nKVxyXG4gIGlmICghcGtnTmFtZSkge1xyXG4gICAgcmV0dXJuIHJlc1xyXG4gIH1cclxuICByZXR1cm4ge1xyXG4gICAgc3VjY2VzczogdHJ1ZSxcclxuICAgIGZ1bGxOYW1lOiByZXN1bHQsXHJcbiAgICBwa2dOYW1lXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBQbHVnaW5IYW5kbGVyXHJcbiIsImltcG9ydCB7IFpIX0NOLCB0eXBlIElMb2NhbGVzS2V5LCB0eXBlIElMb2NhbGVzIH0gZnJvbSAnLi96aC1DTidcclxuaW1wb3J0IHsgbWVyZ2UgfSBmcm9tICdsb2Rhc2gnXHJcbmltcG9ydCB7IHR5cGUgSVBpY0dvIH0gZnJvbSAnLi4vdHlwZXMnXHJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXHJcbmltcG9ydCBmcyBmcm9tICdmcy1leHRyYSdcclxuaW1wb3J0IHlhbWwgZnJvbSAnanMteWFtbCdcclxuXHJcbmltcG9ydCB7IE9iamVjdEFkYXB0ZXIsIEkxOG4gfSBmcm9tICdAcGljZ28vaTE4bidcclxuaW1wb3J0IHsgdHlwZSBJU3RyaW5nS2V5TWFwLCB0eXBlIElJMThuTWFuYWdlciB9IGZyb20gJy4uL3R5cGVzL2luZGV4J1xyXG5pbXBvcnQgeyB0eXBlIElMb2NhbGUgfSBmcm9tICdAcGljZ28vaTE4bi9kaXN0L3R5cGVzJ1xyXG5pbXBvcnQgeyBFTiB9IGZyb20gJy4vZW4nXHJcbmltcG9ydCB7IFpIX1RXIH0gZnJvbSAnLi96aC1UVydcclxuXHJcbmNvbnN0IGxhbmd1YWdlTGlzdDogSVN0cmluZ0tleU1hcDxJU3RyaW5nS2V5TWFwPHN0cmluZz4+ID0ge1xyXG4gICd6aC1DTic6IFpIX0NOLFxyXG4gICd6aC1UVyc6IFpIX1RXLFxyXG4gIGVuOiBFTlxyXG59XHJcblxyXG5jbGFzcyBJMThuTWFuYWdlciBpbXBsZW1lbnRzIElJMThuTWFuYWdlciB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBpMThuOiBJMThuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBvYmplY3RBZGFwdGVyOiBPYmplY3RBZGFwdGVyXHJcbiAgcHJpdmF0ZSByZWFkb25seSBjdHg6IElQaWNHb1xyXG4gIGNvbnN0cnVjdG9yIChjdHg6IElQaWNHbykge1xyXG4gICAgdGhpcy5jdHggPSBjdHhcclxuICAgIHRoaXMub2JqZWN0QWRhcHRlciA9IG5ldyBPYmplY3RBZGFwdGVyKGxhbmd1YWdlTGlzdClcclxuICAgIGxldCBsYW5ndWFnZSA9IHRoaXMuY3R4LmdldENvbmZpZzxzdHJpbmc+KCdzZXR0aW5ncy5sYW5ndWFnZScpIHx8ICd6aC1DTidcclxuICAgIGlmICghbGFuZ3VhZ2VMaXN0W2xhbmd1YWdlXSkge1xyXG4gICAgICBsYW5ndWFnZSA9ICd6aC1DTicgLy8gdXNlIGRlZmF1bHRcclxuICAgIH1cclxuICAgIHRoaXMuaTE4biA9IG5ldyBJMThuKHtcclxuICAgICAgYWRhcHRlcjogdGhpcy5vYmplY3RBZGFwdGVyLFxyXG4gICAgICBkZWZhdWx0TGFuZ3VhZ2U6IGxhbmd1YWdlXHJcbiAgICB9KVxyXG4gICAgdGhpcy5sb2FkT3V0dGVySTE4bigpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvYWRPdXR0ZXJJMThuICgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGkxOG5Gb2xkZXIgPSB0aGlzLmdldE91dHRlckkxOG5Gb2xkZXIoKVxyXG4gICAgY29uc3QgZmlsZXMgPSBmcy5yZWFkZGlyU3luYyhpMThuRm9sZGVyLCB7XHJcbiAgICAgIHdpdGhGaWxlVHlwZXM6IHRydWVcclxuICAgIH0pXHJcbiAgICBmaWxlcy5mb3JFYWNoKGZpbGUgPT4ge1xyXG4gICAgICBpZiAoZmlsZS5pc0ZpbGUoKSAmJiBmaWxlLm5hbWUuZW5kc1dpdGgoJy55bWwnKSkge1xyXG4gICAgICAgIGNvbnN0IGkxOG5GaWxlUGF0aCA9IHBhdGguam9pbihpMThuRm9sZGVyLCBmaWxlLm5hbWUpXHJcbiAgICAgICAgY29uc3QgaTE4bkZpbGUgPSBmcy5yZWFkRmlsZVN5bmMoaTE4bkZpbGVQYXRoLCAndXRmOCcpXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGNvbnN0IGkxOG5GaWxlT2JqID0geWFtbC5sb2FkKGkxOG5GaWxlKSBhcyBJTG9jYWxlc1xyXG4gICAgICAgICAgbGFuZ3VhZ2VMaXN0W2ZpbGUubmFtZS5yZXBsYWNlKC9cXC55bWwkLywgJycpXSA9IGkxOG5GaWxlT2JqXHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihlKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0T3V0dGVySTE4bkZvbGRlciAoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGkxOG5Gb2xkZXIgPSBwYXRoLmpvaW4odGhpcy5jdHguYmFzZURpciwgJ2kxOG4tY2xpJylcclxuICAgIGlmICghZnMucGF0aEV4aXN0c1N5bmMoaTE4bkZvbGRlcikpIHtcclxuICAgICAgZnMuZW5zdXJlRGlyU3luYyhpMThuRm9sZGVyKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGkxOG5Gb2xkZXJcclxuICB9XHJcblxyXG4gIHRyYW5zbGF0ZTxUIGV4dGVuZHMgc3RyaW5nPihrZXk6IElMb2NhbGVzS2V5IHwgVCwgYXJncz86IElTdHJpbmdLZXlNYXA8c3RyaW5nPik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5pMThuLnRyYW5zbGF0ZShrZXksIGFyZ3MpIHx8IGtleVxyXG4gIH1cclxuXHJcbiAgc2V0TGFuZ3VhZ2UgKGxhbmd1YWdlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuaTE4bi5zZXRMYW5ndWFnZShsYW5ndWFnZSlcclxuICAgIHRoaXMuY3R4LnNhdmVDb25maWcoe1xyXG4gICAgICAnc2V0dGluZ3MubGFuZ3VhZ2UnOiBsYW5ndWFnZVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGFkZExvY2FsZSAobGFuZ3VhZ2U6IHN0cmluZywgbG9jYWxlczogSUxvY2FsZSk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3Qgb3JpZ2luTG9jYWxlcyA9IHRoaXMub2JqZWN0QWRhcHRlci5nZXRMb2NhbGUobGFuZ3VhZ2UpXHJcbiAgICBpZiAoIW9yaWdpbkxvY2FsZXMpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICB9XHJcbiAgICBjb25zdCBuZXdMb2NhbGVzID0gbWVyZ2Uob3JpZ2luTG9jYWxlcywgbG9jYWxlcylcclxuICAgIHRoaXMub2JqZWN0QWRhcHRlci5zZXRMb2NhbGUobGFuZ3VhZ2UsIG5ld0xvY2FsZXMpXHJcbiAgICByZXR1cm4gdHJ1ZVxyXG4gIH1cclxuXHJcbiAgYWRkTGFuZ3VhZ2UgKGxhbmd1YWdlOiBzdHJpbmcsIGxvY2FsZXM6IElMb2NhbGUpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IG9yaWdpbkxvY2FsZXMgPSB0aGlzLm9iamVjdEFkYXB0ZXIuZ2V0TG9jYWxlKGxhbmd1YWdlKVxyXG4gICAgaWYgKG9yaWdpbkxvY2FsZXMpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICB9XHJcbiAgICB0aGlzLm9iamVjdEFkYXB0ZXIuc2V0TG9jYWxlKGxhbmd1YWdlLCBsb2NhbGVzKVxyXG4gICAgbGFuZ3VhZ2VMaXN0W2xhbmd1YWdlXSA9IGxvY2FsZXNcclxuICAgIHJldHVybiB0cnVlXHJcbiAgfVxyXG5cclxuICBnZXRMYW5ndWFnZUxpc3QgKCk6IHN0cmluZ1tdIHtcclxuICAgIHJldHVybiBPYmplY3Qua2V5cyhsYW5ndWFnZUxpc3QpXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQge1xyXG4gIEkxOG5NYW5hZ2VyXHJcbn1cclxuIiwiLyogZXNsaW50LWRpc2FibGUgbm8tdGVtcGxhdGUtY3VybHktaW4tc3RyaW5nICovXHJcbmV4cG9ydCBjb25zdCBaSF9DTiA9IHtcclxuICBVUExPQURfRkFJTEVEOiAn5LiK5Lyg5aSx6LSlJyxcclxuICBDSEVDS19TRVRUSU5HUzogJ+ivt+ajgOafpeS9oOeahOmFjee9rumhueaYr+WQpuato+ehricsXHJcbiAgQ0hFQ0tfU0VUVElOR1NfQU5EX05FVFdPUks6ICfor7fmo4Dmn6XkvaDnmoTphY3nva7pobnku6Xlj4rnvZHnu5wnLFxyXG4gIFVQTE9BRF9GQUlMRURfUkVBU09OOiAn6ZSZ6K+v56CB77yaJHtjb2Rlfe+8jOivt+aJk+W8gOa1j+iniOWZqOeymOi0tOWcsOWdgOafpeeci+ebuOWFs+WOn+WboCcsXHJcbiAgU0VSVkVSX0VSUk9SOiAn5pyN5Yqh56uv5Ye66ZSZ77yM6K+36YeN6K+VJyxcclxuICBBVVRIX0ZBSUxFRDogJ+iupOivgeWksei0pScsXHJcblxyXG4gIC8vIHNtbXNcclxuICBQSUNCRURfU01NUzogJ1NNLk1TJyxcclxuICBQSUNCRURfU01NU19UT0tFTjogJ+iuvuWumlRva2VuJyxcclxuICBQSUNCRURfU01NU19CQUNLVVBfRE9NQUlOOiAn5aSH55So5LiK5Lyg5Z+f5ZCNJyxcclxuICBQSUNCRURfU01NU19NRVNTQUdFX0JBQ0tVUF9ET01BSU46ICfkvovlpoIgc21tcy5hcHAnLFxyXG5cclxuICAvLyBsb2NhbFxyXG4gIFBJQ0JFRF9MT0NBTDogJ+acrOWcsOS4iuS8oCcsXHJcbiAgUElDQkVEX0xPQ0FMX1BBVEg6ICforr7lrprot6/lvoQnLFxyXG4gIFBJQ0JFRF9MT0NBTF9NRVNTQUdFX1BBVEg6ICfkvovlpoIgL3Vzci9sb2NhbC9pbWFnZXMvJyxcclxuICBQSUNCRURfTE9DQUxfQ1VTVE9NVVJMOiAn6K6+5a6a6Ieq5a6a5LmJ5Z+f5ZCNJyxcclxuICBQSUNCRURfTE9DQUxfTUVTU0FHRV9DVVNUT01VUkw6ICfkvovlpoIgaHR0cHM6Ly90ZXN0LmNvbScsXHJcbiAgUElDQkVEX0xPQ0FMX1dFQlBBVEg6ICforr7lrprnvZHnq5not6/lvoQnLFxyXG4gIFBJQ0JFRF9MT0NBTF9NRVNTQUdFX1dFQlBBVEg6ICfnlKjkuo7mi7zmjqXnvZHlnYDot6/lvoQnLFxyXG5cclxuICAvLyBBbGktY2xvdWRcclxuICBQSUNCRURfQUxJQ0xPVUQ6ICfpmL/ph4zkupFPU1MnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9BQ0NFU1NLRVlJRDogJ+iuvuWumktleUlkJyxcclxuICBQSUNCRURfQUxJQ0xPVURfQUNDRVNTS0VZU0VDUkVUOiAn6K6+5a6aS2V5U2VjcmV0JyxcclxuICBQSUNCRURfQUxJQ0xPVURfQlVDS0VUOiAn6K6+5a6aQnVja2V0JyxcclxuICBQSUNCRURfQUxJQ0xPVURfQVJFQTogJ+iuvuWumuWtmOWCqOWMuuWfnycsXHJcbiAgUElDQkVEX0FMSUNMT1VEX1BBVEg6ICforr7lrprlrZjlgqjot6/lvoQnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9DVVNUT01VUkw6ICforr7lrproh6rlrprkuYnln5/lkI0nLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9PUFRJT05TOiAn6K6+5a6a572R5Z2A5ZCO57yAJyxcclxuICBQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9BUkVBOiAn5L6L5aaC77yab3NzLWNuLWJlaWppbmcnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX1BBVEg6ICfkvovlpoLvvJp0ZXN0LycsXHJcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfT1BUSU9OUzogJ+S+i+Wmgu+8mj94LW9zcy1wcm9jZXNzPXh4eCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly90ZXN0LmNvbScsXHJcblxyXG4gIC8vIFRlbmNlbnQtY2xvdWRcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEOiAn6IW+6K6v5LqRQ09TJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1ZFUlNJT046ICdDT1PniYjmnKwnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUSUQ6ICforr7lrppTZWNyZXRJZCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TRUNSRVRLRVk6ICforr7lrppTZWNyZXRLZXknLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQVBQSUQ6ICforr7lrppBcHBJZCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9CVUNLRVQ6ICforr7lrppCdWNrZXQnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQVJFQTogJ+iuvuWumuWtmOWCqOWMuuWfnycsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9FTkRQT0lOVDogJ+iuvuWumuaOpeWFpeeCuScsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9QQVRIOiAn6K6+5a6a5a2Y5YKo6Lev5b6EJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX09QVElPTlM6ICforr7lrprnvZHlnYDlkI7nvIAnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQ1VTVE9NVVJMOiAn6K6+5a6a6Ieq5a6a5LmJ5Z+f5ZCNJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQVBQSUQ6ICfkvovlpoLvvJoxMjM0NTY3ODkwJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQVJFQTogJ+S+i+Wmgu+8mmFwLWJlaWppbmcnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9QQVRIOiAn5L6L5aaC77yadGVzdC8nLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9DVVNUT01VUkw6ICfkvovlpoLvvJpodHRwczovL3Rlc3QuY29tJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfT1BUSU9OUzogJ+S+i+Wmgu+8mj9pbWFnZU1vZ3IyJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfRU5EUE9JTlQ6ICfkvovlpoLvvJpjb3MtaW50ZXJuYWwuYWNjZWxlcmF0ZS50ZW5jZW50Y29zLmNuJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU06ICfmnoHmmbrljovnvKknLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9USVA6ICflm77niYfmnoHmmbrljovnvKnvvIzor6bmg4Xor7flj4LogINb5paH5qGj6K+05piOXShodHRwczovL2Nsb3VkLnRlbmNlbnQuY29tL2RvY3VtZW50L3Byb2R1Y3QvNDM2LzQ5MjU5KScsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNX0NPTkZJUk06ICflvIDlkK8nLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9DQU5DRUw6ICflhbPpl60nLFxyXG5cclxuICAvLyBHaXRIdWJcclxuICBQSUNCRURfR0lUSFVCOiAnR2l0SHViJyxcclxuICBQSUNCRURfR0lUSFVCX1RPS0VOOiAn6K6+5a6aVG9rZW4nLFxyXG4gIFBJQ0JFRF9HSVRIVUJfUkVQTzogJ+iuvuWumuS7k+W6k+WQjScsXHJcbiAgUElDQkVEX0dJVEhVQl9QQVRIOiAn6K6+5a6a5a2Y5YKo6Lev5b6EJyxcclxuICBQSUNCRURfR0lUSFVCX0JSQU5DSDogJ+iuvuWumuWIhuaUr+WQjScsXHJcbiAgUElDQkVEX0dJVEhVQl9DVVNUT01VUkw6ICforr7lrproh6rlrprkuYnln5/lkI0nLFxyXG4gIFBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9SRVBPOiAn5qC85byP77yadXNlcm5hbWUvcmVwbycsXHJcbiAgUElDQkVEX0dJVEhVQl9NRVNTQUdFX0JSQU5DSDogJ+S+i+Wmgu+8mm1haW4nLFxyXG4gIFBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9QQVRIOiAn5L6L5aaC77yadGVzdC8nLFxyXG4gIFBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9DVVNUT01VUkw6ICfkvovlpoLvvJpodHRwczovL3Rlc3QuY29tJyxcclxuXHJcbiAgLy8gcWluaXVcclxuICBQSUNCRURfUUlOSVU6ICfkuIPniZvkupEnLFxyXG4gIFBJQ0JFRF9RSU5JVV9BQ0NFU1NLRVk6ICforr7lrppBY2Nlc3NLZXknLFxyXG4gIFBJQ0JFRF9RSU5JVV9TRUNSRVRLRVk6ICforr7lrppTZWNyZXRLZXknLFxyXG4gIFBJQ0JFRF9RSU5JVV9CVUNLRVQ6ICforr7lrppCdWNrZXQnLFxyXG4gIFBJQ0JFRF9RSU5JVV9QQVRIOiAn6K6+5a6a5a2Y5YKo6Lev5b6EJyxcclxuICBQSUNCRURfUUlOSVVfVVJMOiAn6K6+5a6a6K6/6Zeu572R5Z2AJyxcclxuICBQSUNCRURfUUlOSVVfT1BUSU9OUzogJ+iuvuWumue9keWdgOWQjue8gCcsXHJcbiAgUElDQkVEX1FJTklVX0FSRUE6ICforr7lrprlrZjlgqjljLrln58nLFxyXG4gIFBJQ0JFRF9RSU5JVV9NRVNTQUdFX1BBVEg6ICfkvovlpoLvvJp0ZXN0LycsXHJcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfQVJFQTogJ+S+i+Wmgu+8mnowJyxcclxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9PUFRJT05TOiAn5L6L5aaC77yaP2ltYWdlc2xpbScsXHJcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly94eHgueXl5LmdsYi5jbG91ZGRuLmNvbScsXHJcblxyXG4gIC8vIGltZ3VyXHJcbiAgUElDQkVEX0lNR1VSOiAnSW1ndXInLFxyXG4gIFBJQ0JFRF9JTUdVUl9DTElFTlRJRDogJ+iuvuWumkNsaWVudElkJyxcclxuICBQSUNCRURfSU1HVVJfVVNFUk5BTUU6ICforr7lrprnlKjmiLflkI0nLFxyXG4gIFBJQ0JFRF9JTUdVUl9BQ0NFU1NfVE9LRU46ICforr7lrpphY2Nlc3NUb2tlbicsXHJcbiAgUElDQkVEX0lNR1VSX0FMQlVNOiAn6K6+5a6a55u45YaM5ZCNJyxcclxuICBQSUNCRURfSU1HVVJfUFJPWFk6ICforr7lrprku6PnkIYnLFxyXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX0NMSUVOVElEOiAn5Yy/5ZCN5LiK5Lyg5pe25aGr5YaZJyxcclxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9VU0VSTkFNRTogJ+mcgOimgeS4iuS8oOWIsOi0puaIt+aXtuWhq+WGmScsXHJcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfQUNDRVNTX1RPS0VOOiAn6ZyA6KaB5LiK5Lyg5Yiw6LSm5oi35pe25aGr5YaZJyxcclxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9BTEJVTTogJ+S+i+Wmgu+8mnRlc3QnLFxyXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX1BST1hZOiAn5L6L5aaC77yaaHR0cDovLzEyNy4wLjAuMToxMDgwJyxcclxuXHJcbiAgLy8gdXB5dW5cclxuICBQSUNCRURfVVBZVU46ICflj4jmi43kupEnLFxyXG4gIFBJQ0JFRF9VUFlVTl9CVUNLRVQ6ICforr7lrppCdWNrZXQnLFxyXG4gIFBJQ0JFRF9VUFlVTl9PUEVSQVRPUjogJ+iuvuWumuaTjeS9nOWRmCcsXHJcbiAgUElDQkVEX1VQWVVOX1BBU1NXT1JEOiAn6K6+5a6a5pON5L2c5ZGY5a+G56CBJyxcclxuICBQSUNCRURfVVBZVU5fUEFUSDogJ+iuvuWumuWtmOWCqOi3r+W+hCcsXHJcbiAgUElDQkVEX1VQWVVOX1VSTDogJ+iuvuWumuWKoOmAn+Wfn+WQjScsXHJcbiAgUElDQkVEX1VQWVVOX09QVElPTlM6ICforr7lrprnvZHlnYDlkI7nvIAnLFxyXG4gIFBJQ0JFRF9VUFlVTl9BTlRJX0xFRUNIX1RPS0VOOiAn6K6+5a6a6Ziy55uX6ZO+VG9rZW4nLFxyXG4gIFBJQ0JFRF9VUFlVTl9FWFBJUkVfVElNRTogJ+iuvuWumui/h+acn+aXtumXtCjnp5IpJyxcclxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9PUEVSQVRPUjogJ+S+i+Wmgu+8mm1lJyxcclxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9QQVNTV09SRDogJ+i+k+WFpeaTjeS9nOWRmOWvhueggScsXHJcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfVVJMOiAn5L6L5aaC77yaaHR0cDovL3h4eC50ZXN0LnVwY2RuLm5ldCcsXHJcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfT1BUSU9OUzogJ+S+i+Wmgu+8miFpbWdzbGltJyxcclxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9QQVRIOiAn5L6L5aaC77yadGVzdC8nLFxyXG5cclxuICAvLyB3ZWJkYXZwbGlzdFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVDogJ1dlYkRBVicsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX0hPU1Q6ICforr7lrprmjqXlj6PnvZHlnYAnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9TU0xFTkFCTEVEOiAn5ZCv55SoU1NMJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfVVNFUk5BTUU6ICforr7lrprnlKjmiLflkI0nLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9QQVNTV09SRDogJ+iuvuWumuWvhueggScsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1BBVEg6ICforr7lrprlrZjlgqjot6/lvoQnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9XRUJTSVRFX1BBVEg6ICforr7lrprnvZHlnYDot6/lvoQnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9DVVNUT01VUkw6ICforr7lrproh6rlrprkuYnln5/lkI0nLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX0hPU1Q6ICfkvovlpoLvvJpodHRwczovL2V4YW1wbGUuY29tL3dlYmRhdicsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfU1NMRU5BQkxFRDogJ+mcgOimgUhUVFBT5pe25ZCv55SoJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9VU0VSTkFNRTogJ+S+i+Wmgu+8mm1lJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9QQVNTV09SRDogJ+i+k+WFpeWvhueggScsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9XRUJTSVRFX1BBVEg6ICfmi7zmjqXnvZHlnYDml7bkvb/nlKgnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxyXG5cclxuICAvLyBzZnRwcGxpc3RcclxuICBQSUNCRURfU0ZUUFBMSVNUOiAn5YaF572uU0ZUUCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9IT1NUOiAn6K6+5a6a5Li75py6JyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX1BPUlQ6ICforr7lrprnq6/lj6MnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfVVNFUk5BTUU6ICforr7lrprnlKjmiLflkI0nLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfUEFTU1dPUkQ6ICforr7lrprlr4bnoIEnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfUFJJVkFURUtFWTogJ+iuvuWumuengemSpScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9QUklWQVRFS0VZX1BBU1NQSFJBU0U6ICforr7lrprnp4HpkqXlr4bnoIEnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfVVBMT0FEUEFUSDogJ+iuvuWumuS4iuS8oOi3r+W+hCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9DVVNUT01VUkw6ICforr7lrproh6rlrprkuYnln5/lkI0nLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfV0VCU0lURV9QQVRIOiAn6K6+5a6a572R56uZ6Lev5b6EJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX0ZJTEVfVVNFUjogJ+iuvuWumuaWh+S7tueUqOaItzrnu4QnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfRklMRV9NT0RFOiAn6K6+5a6a5paH5Lu25p2D6ZmQJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX0RJUl9NT0RFOiAn6K6+5a6a5paH5Lu25aS55p2D6ZmQJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfSE9TVDogJ+S+i+Wmgu+8mjEuMS4xLjMnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QT1JUOiAn6buY6K6kMjInLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QUklWQVRFS0VZOiAn5L6L5aaC77yaL1VzZXJzL3h4eC8uc3NoL2lkX3JzYScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1BSSVZBVEVLRVlfUEFTU1BIUkFTRTogJ+i+k+WFpeengemSpeWvhueggScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1VQTE9BRFBBVEg6ICfkvovlpoLvvJp0ZXN0LycsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9XRUJTSVRFX1BBVEg6ICfmi7zmjqXnvZHlnYDml7bkvb/nlKgnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9GSUxFX1VTRVI6ICfkvovlpoLvvJp3d3c6ZGF0YScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0ZJTEVfTU9ERTogJ+S+i+Wmgu+8mjA2NjQnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9ESVJfTU9ERTogJ+S+i+Wmgu+8mjA3NzUnLFxyXG5cclxuICBCVUlMRElOX1dBVEVSTUFSS19JU0FERFdBVEVSTUFSSzogJ+aYr+WQpua3u+WKoOawtOWNsCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9JU0FERFdBVEVSTUFSSzogJ+mcgOimgea3u+WKoOawtOWNsOaXtuWQr+eUqCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVFlQRTogJ+iuvuWumuawtOWNsOexu+WeiycsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktUWVBFOiAn6K+36YCJ5oup5rC05Y2w57G75Z6LJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19JU0ZVTExTQ1JFRU5XQVRFUk1BUks6ICfmmK/lkKblhajlsY/msLTljbAnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfSVNGVUxMU0NSRUVOV0FURVJNQVJLOiAn6ZyA6KaB5YWo5bGP5rC05Y2w5pe25ZCv55SoJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktERUdSRUU6ICforr7lrprmsLTljbDop5LluqYnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLREVHUkVFOiAn6K+36L6T5YWl5pWw5a2XJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktURVhUOiAn6K6+5a6a5rC05Y2w5paH5a2XJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1RFWFQ6ICfor7fovpPlhaXmsLTljbDmloflrZcnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RFWFRGT05UUEFUSDogJ+iuvuWumuawtOWNsOWtl+S9k+aWh+S7tui3r+W+hCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UUEFUSDogJ+ivt+i+k+WFpeawtOWNsOWtl+S9k+aWh+S7tui3r+W+hCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVFJBVElPOiAn6K6+5a6a5rC05Y2w55u45a+55LqO5Zu+54mH55qE5q+U5L6LJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0ZPTlRSQVRJTzogJ+ivt+i+k+WFpTAtMeeahOWwj+aVsCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVENPTE9SOiAn6K6+5a6a5rC05Y2w5a2X5L2T6aKc6ImyJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0ZPTlRDT0xPUjogJ+ivt+i+k+WFpXJnYuminOiJsuWAvCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLSU1BR0VQQVRIOiAn6K6+5a6a5rC05Y2w5Zu+54mH6Lev5b6EJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0lNQUdFUEFUSDogJ+ivt+i+k+WFpeawtOWNsOWbvueJh+i3r+W+hCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLUE9TSVRJT046ICforr7lrprmsLTljbDkvY3nva4nLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLUE9TSVRJT046ICfor7fpgInmi6nmsLTljbDkvY3nva4nLFxyXG5cclxuICBCVUlMRElOX1JFTkFNRV9GT1JNQVQ6ICforr7lrprph43lkb3lkI3moLzlvI8nLFxyXG4gIEJVSUxESU5fUkVOQU1FX0VOQUJMRTogJ+aYr+WQpuWQr+eUqOmHjeWRveWQjScsXHJcblxyXG4gIEJVSUxESU5fQ09NUFJFU1NfUVVBTElUWTogJ+iuvuWumuWbvueJh+i0qOmHjycsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1FVQUxJVFk6ICfor7fovpPlhaUwLTEwMOeahOaVtOaVsCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU0NPTlZFUlQ6ICfmmK/lkKbov5vooYzmoLzlvI/ovazmjaInLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU0NPTlZFUlQ6ICfpnIDopoHovazmjaLml7blkK/nlKgnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfQ09OVkVSVEZPUk1BVDogJ+iuvuWumui9rOaNouagvOW8jycsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0NPTlZFUlRGT1JNQVQ6ICfor7fpgInmi6novazmjaLmoLzlvI8nLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkU6ICfmmK/lkKbov5vooYzlm77niYfnvKnmlL4nLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFU0laRTogJ+mcgOimgee8qeaUvuaXtuWQr+eUqCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19SRVNJWkVXSURUSDogJ+iuvuWumue8qeaUvuWuveW6picsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRVdJRFRIOiAn6K+36L6T5YWl5pWw5a2XJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX1JFU0laRUhFSUdIVDogJ+iuvuWumue8qeaUvumrmOW6picsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRUhFSUdIVDogJ+ivt+i+k+WFpeaVsOWtlycsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU1JFU0laRUJZUEVSQ0VOVDogJ+aYr+WQpuaMieeZvuWIhuavlOi/m+ihjOe8qeaUvicsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUkVTSVpFQllQRVJDRU5UOiAn6ZyA6KaB5oyJ55m+5YiG5q+U57yp5pS+5pe25ZCv55SoJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX1JFU0laRVBFUkNFTlQ6ICforr7lrprnvKnmlL7nmb7liIbmr5QnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVQRVJDRU5UOiAn6K+36L6T5YWl5pWw5a2XJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX1NLSVBSRVNJWkVPRlNNQUxMSU1HOiAn5piv5ZCm6Lez6L+H5bCP5Zu+57yp5pS+JyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0lTUk9UQVRFOiAn5piv5ZCm6L+b6KGM5Zu+54mH5peL6L2sJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNST1RBVEU6ICfpnIDopoHml4vovazml7blkK/nlKgnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfUk9UQVRFREVHUkVFOiAn6K6+5a6a5peL6L2s6KeS5bqmJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUk9UQVRFREVHUkVFOiAn6K+36L6T5YWl5pWw5a2X77yM5Y+v5Li66LSf5pWwJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0lTUkVNT1ZFRVhJRjogJ+aYr+WQpuenu+mZpEVYSUbkv6Hmga8nLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFTU9WRUVYSUY6ICfpnIDopoHnp7vpmaRFWElG5L+h5oGv5pe25ZCv55SoJyxcclxuXHJcbiAgLy8gUGx1Z2luIEhhbmRsZXJcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9TVUNDRVNTOiAn5o+S5Lu25a6J6KOF5oiQ5YqfJyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRUQ6ICfmj5Lku7blronoo4XlpLHotKUnLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRF9SRUFTT046ICfmj5Lku7blronoo4XlpLHotKXvvIzlpLHotKXnoIHkuLoke2NvZGV977yM6ZSZ6K+v5pel5b+X5Li6IFxcbiAke2RhdGF9JyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRURfUEFUSDogJ+aPkuS7tuWuieijheWksei0pe+8jOivt+i+k+WFpeWQiOazleaPkuS7tuWQjeaIluWQiOazleWuieijhei3r+W+hCcsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9TVUNDRVNTOiAn5o+S5Lu25Y246L295oiQ5YqfJyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRDogJ+aPkuS7tuWNuOi9veWksei0pScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfUkVBU09OOiAn5o+S5Lu25Y246L295aSx6LSl77yM5aSx6LSl56CB5Li6JHtjb2Rlfe+8jOmUmeivr+aXpeW/l+S4uiBcXG4gJHtkYXRhfScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfVkFMSUQ6ICfmj5Lku7bljbjovb3lpLHotKXvvIzor7fovpPlhaXlkIjms5Xmj5Lku7blkI0nLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfU1VDQ0VTUzogJ+aPkuS7tuabtOaWsOaIkOWKnycsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRUQ6ICfmj5Lku7bmm7TmlrDlpLHotKUnLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEX1JFQVNPTjogJ+aPkuS7tuabtOaWsOWksei0pe+8jOWksei0peeggeS4uiR7Y29kZX3vvIzplJnor6/ml6Xlv5fkuLogXFxuICR7ZGF0YX0nLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEX1ZBTElEOiAn5o+S5Lu25pu05paw5aSx6LSl77yM6K+36L6T5YWl5ZCI5rOV5o+S5Lu25ZCNJ1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBJTG9jYWxlc0tleSA9IGtleW9mIHR5cGVvZiBaSF9DTlxyXG5leHBvcnQgdHlwZSBJTG9jYWxlcyA9IHR5cGVvZiBaSF9DTlxyXG4iLCJpbXBvcnQgeyB0eXBlIElMb2NhbGVzIH0gZnJvbSAnLi96aC1DTidcclxuXHJcbi8qIGVzbGludC1kaXNhYmxlIG5vLXRlbXBsYXRlLWN1cmx5LWluLXN0cmluZyAqL1xyXG5leHBvcnQgY29uc3QgWkhfVFc6IElMb2NhbGVzID0ge1xyXG4gIFVQTE9BRF9GQUlMRUQ6ICfkuIrlgrPlpLHmlZcnLFxyXG4gIENIRUNLX1NFVFRJTkdTOiAn6KuL5qqi5p+l5L2g55qE6Kit5a6a5piv5ZCm5q2j56K6JyxcclxuICBDSEVDS19TRVRUSU5HU19BTkRfTkVUV09SSzogJ+iri+aqouafpeS9oOeahOioreWumuWPiue2sui3rycsXHJcbiAgVVBMT0FEX0ZBSUxFRF9SRUFTT046ICfpjK/oqqTnorzvvJoke2NvZGV977yM6KuL5omT6ZaL54CP6Ka95Zmo6LK85LiK5Zyw5Z2A5p+l55yL55u46Zec5Y6f5ZugJyxcclxuICBTRVJWRVJfRVJST1I6ICfkvLrmnI3lmajlh7rpjK/vvIzoq4vph43oqaYnLFxyXG4gIEFVVEhfRkFJTEVEOiAn6KqN6K2J5aSx5pWXJyxcclxuXHJcbiAgLy8gc21tc1xyXG4gIFBJQ0JFRF9TTU1TOiAnU00uTVMnLFxyXG4gIFBJQ0JFRF9TTU1TX1RPS0VOOiAn6Kit5a6aVG9rZW4nLFxyXG4gIFBJQ0JFRF9TTU1TX0JBQ0tVUF9ET01BSU46ICflgpnnlKjkuIrlgrPntrLlnYAnLFxyXG4gIFBJQ0JFRF9TTU1TX01FU1NBR0VfQkFDS1VQX0RPTUFJTjogJ+S+i+WmgiBzbW1zLmFwcCcsXHJcblxyXG4gIC8vIGxvY2FsXHJcbiAgUElDQkVEX0xPQ0FMOiAn5pys5ZywJyxcclxuICBQSUNCRURfTE9DQUxfUEFUSDogJ+ioreWumuWEsuWtmOi3r+W+kScsXHJcbiAgUElDQkVEX0xPQ0FMX01FU1NBR0VfUEFUSDogJ+S+i+WmgiAvdXNyL2xvY2FsL2ltYWdlcy8nLFxyXG4gIFBJQ0JFRF9MT0NBTF9DVVNUT01VUkw6ICfoqK3lrproh6roqILntrLlnYAnLFxyXG4gIFBJQ0JFRF9MT0NBTF9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+WmgiBodHRwczovL3Rlc3QuY29tJyxcclxuICBQSUNCRURfTE9DQUxfV0VCUEFUSDogJ+ioreWumue2suWdgOi3r+W+kScsXHJcbiAgUElDQkVEX0xPQ0FMX01FU1NBR0VfV0VCUEFUSDogJ+eUqOS6jue2sumggemhr+ekuueahOi3r+W+kScsXHJcblxyXG4gIC8vIEFsaS1jbG91ZFxyXG4gIFBJQ0JFRF9BTElDTE9VRDogJ+mYv+mHjOS6kU9TUycsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWUlEOiAn6Kit5a6aS2V5SWQnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9BQ0NFU1NLRVlTRUNSRVQ6ICfoqK3lrppLZXlTZWNyZXQnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9CVUNLRVQ6ICfoqK3lrppCdWNrZXQnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9BUkVBOiAn6Kit5a6a5YSy5a2Y5Y2A5Z+fJyxcclxuICBQSUNCRURfQUxJQ0xPVURfUEFUSDogJ+ioreWumuWEsuWtmOi3r+W+kScsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0NVU1RPTVVSTDogJ+ioreWumuiHquiogue2suWdgCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX09QVElPTlM6ICfoqK3lrprntrLlnYDlvozntrQnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX0FSRUE6ICfkvovlpoLvvJpvc3MtY24tYmVpamluZycsXHJcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcclxuICBQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9PUFRJT05TOiAn5L6L5aaC77yaP3gtb3NzLXByb2Nlc3M9eHh4JyxcclxuICBQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9DVVNUT01VUkw6ICfkvovlpoLvvJpodHRwczovL3Rlc3QuY29tJyxcclxuXHJcbiAgLy8gVGVuY2VudC1jbG91ZFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVUQ6ICfpqLDoqIrkupFDT1MnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfVkVSU0lPTjogJ0NPU+eJiOacrCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TRUNSRVRJRDogJ+ioreWumlNlY3JldElkJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVEtFWTogJ+ioreWumlNlY3JldEtleScsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9BUFBJRDogJ+ioreWumkFwcElkJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0JVQ0tFVDogJ+ioreWumkJ1Y2tldCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9BUkVBOiAn6Kit5a6a5YSy5a2Y5Y2A5Z+fJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0VORFBPSU5UOiAn6Kit5a6a5o6l5YWl6bueJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1BBVEg6ICfoqK3lrprlhLLlrZjot6/lvpEnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfT1BUSU9OUzogJ+ioreWumue2suWdgOW+jOe2tCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9DVVNUT01VUkw6ICfoqK3lrproh6roqILntrLlnYAnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9BUFBJRDogJ+S+i+Wmgu+8mjEyMzQ1Njc4OTAnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9BUkVBOiAn5L6L5aaC77yaYXAtYmVpamluZycsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX1BBVEg6ICfkvovlpoLvvJp0ZXN0LycsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9PUFRJT05TOiAn5L6L5aaC77yaP2ltYWdlTW9ncjInLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9FTkRQT0lOVDogJ+S+i+Wmgu+8mmNvcy1pbnRlcm5hbC5hY2NlbGVyYXRlLnRlbmNlbnRjb3MuY24nLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTTogJ1NldCBJbWFnZVNsaW0nLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9USVA6ICdJbWFnZSBleHRyZW1lbHkgaW50ZWxsaWdlbnQgY29tcHJlc3Npb24sIHBsZWFzZSByZWZlciB0byB0aGUgW2RvY3VtZW50IGRlc2NyaXB0aW9uXShodHRwczovL2Nsb3VkLnRlbmNlbnQuY29tL2RvY3VtZW50L3Byb2R1Y3QvNDM2LzQ5MjU5KScsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNX0NPTkZJUk06ICdPUEVOJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fQ0FOQ0VMOiAnQ0xPU0UnLFxyXG5cclxuICAvLyBHaXRIdWJcclxuICBQSUNCRURfR0lUSFVCOiAnR2l0SHViJyxcclxuICBQSUNCRURfR0lUSFVCX1RPS0VOOiAn6Kit5a6aVG9rZW4nLFxyXG4gIFBJQ0JFRF9HSVRIVUJfUkVQTzogJ+ioreWumuWAieW6q+WQjeeosScsXHJcbiAgUElDQkVEX0dJVEhVQl9QQVRIOiAn6Kit5a6a5YSy5a2Y6Lev5b6RJyxcclxuICBQSUNCRURfR0lUSFVCX0JSQU5DSDogJ+ioreWumuWIhuaUr+WQjeeosScsXHJcbiAgUElDQkVEX0dJVEhVQl9DVVNUT01VUkw6ICfoqK3lrproh6roqILntrLlnYAnLFxyXG4gIFBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9SRVBPOiAn5qC85byP77yadXNlcm5hbWUvcmVwbycsXHJcbiAgUElDQkVEX0dJVEhVQl9NRVNTQUdFX0JSQU5DSDogJ+S+i+Wmgu+8mm1haW4nLFxyXG4gIFBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9QQVRIOiAn5L6L5aaC77yadGVzdC8nLFxyXG4gIFBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9DVVNUT01VUkw6ICfkvovlpoLvvJpodHRwczovL3Rlc3QuY29tJyxcclxuXHJcbiAgLy8gcWluaXVcclxuICBQSUNCRURfUUlOSVU6ICfkuIPniZvkupEnLFxyXG4gIFBJQ0JFRF9RSU5JVV9BQ0NFU1NLRVk6ICfoqK3lrppBY2Nlc3NLZXknLFxyXG4gIFBJQ0JFRF9RSU5JVV9TRUNSRVRLRVk6ICfoqK3lrppTZWNyZXRLZXknLFxyXG4gIFBJQ0JFRF9RSU5JVV9CVUNLRVQ6ICfoqK3lrppCdWNrZXQnLFxyXG4gIFBJQ0JFRF9RSU5JVV9QQVRIOiAn6Kit5a6a5YSy5a2Y6Lev5b6RJyxcclxuICBQSUNCRURfUUlOSVVfVVJMOiAn6Kit5a6a6Kiq5ZWP57ay5Z2AJyxcclxuICBQSUNCRURfUUlOSVVfT1BUSU9OUzogJ+ioreWumue2suWdgOW+jOe2tCcsXHJcbiAgUElDQkVEX1FJTklVX0FSRUE6ICfoqK3lrprlhLLlrZjljYDln58nLFxyXG4gIFBJQ0JFRF9RSU5JVV9NRVNTQUdFX1BBVEg6ICfkvovlpoLvvJp0ZXN0LycsXHJcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfQVJFQTogJ+S+i+Wmgu+8mnowJyxcclxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9PUFRJT05TOiAn5L6L5aaC77yaP2ltYWdlc2xpbScsXHJcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly94eHgueXl5LmdsYi5jbG91ZGRuLmNvbScsXHJcblxyXG4gIC8vIGltZ3VyXHJcbiAgUElDQkVEX0lNR1VSOiAnSW1ndXInLFxyXG4gIFBJQ0JFRF9JTUdVUl9DTElFTlRJRDogJ+ioreWumkNsaWVudElkJyxcclxuICBQSUNCRURfSU1HVVJfVVNFUk5BTUU6ICfoqK3lrprnlKjmiLblkI0nLFxyXG4gIFBJQ0JFRF9JTUdVUl9BQ0NFU1NfVE9LRU46ICfoqK3lrpphY2Nlc3NUb2tlbicsXHJcbiAgUElDQkVEX0lNR1VSX0FMQlVNOiAn6Kit5a6a55u457C/5ZCNJyxcclxuICBQSUNCRURfSU1HVVJfUFJPWFk6ICfoqK3lrppQUk9YWScsXHJcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfQ0xJRU5USUQ6ICfljL/lkI3kuIrlgrPmmYLloavlr6snLFxyXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX1VTRVJOQU1FOiAn6ZyA6KaB5LiK5YKz5Yiw6LOs5oi25pmC5aGr5a+rJyxcclxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9BQ0NFU1NfVE9LRU46ICfpnIDopoHkuIrlgrPliLDos6zmiLbmmYLloavlr6snLFxyXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX0FMQlVNOiAn5L6L5aaC77yadGVzdCcsXHJcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfUFJPWFk6ICfkvovlpoLvvJpodHRwOi8vMTI3LjAuMC4xOjEwODAnLFxyXG5cclxuICAvLyB1cHl1blxyXG4gIFBJQ0JFRF9VUFlVTjogJ+WPiOaLjeS6kScsXHJcbiAgUElDQkVEX1VQWVVOX0JVQ0tFVDogJ+ioreWumkJ1Y2tldCcsXHJcbiAgUElDQkVEX1VQWVVOX09QRVJBVE9SOiAn6Kit5a6a5pON5L2c5ZOhJyxcclxuICBQSUNCRURfVVBZVU5fUEFTU1dPUkQ6ICfoqK3lrprmk43kvZzlk6Hlr4bnorwnLFxyXG4gIFBJQ0JFRF9VUFlVTl9QQVRIOiAn6Kit5a6a5YSy5a2Y6Lev5b6RJyxcclxuICBQSUNCRURfVVBZVU5fVVJMOiAn6Kit5a6a5Yqg6YCf57ay5Z2AJyxcclxuICBQSUNCRURfVVBZVU5fT1BUSU9OUzogJ+ioreWumue2suWdgOW+jOe2tCcsXHJcbiAgUElDQkVEX1VQWVVOX0FOVElfTEVFQ0hfVE9LRU46ICfoqK3lrprpmLLnm5zpj4hUb2tlbicsXHJcbiAgUElDQkVEX1VQWVVOX0VYUElSRV9USU1FOiAn6Kit5a6a6YGO5pyf5pmC6ZaTKOenkiknLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX09QRVJBVE9SOiAn5L6L5aaC77yabWUnLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX1BBU1NXT1JEOiAn6Ly45YWl5pON5L2c5ZOh5a+G56K8JyxcclxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9VUkw6ICfkvovlpoLvvJpodHRwOi8veHh4LnRlc3QudXBjZG4ubmV0JyxcclxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9PUFRJT05TOiAn5L6L5aaC77yaIWltZ3NsaW0nLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX1BBVEg6ICfkvovlpoLvvJp0ZXN0LycsXHJcblxyXG4gIC8vIHdlYmRhdlxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVDogJ1dlYkRBVicsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX0hPU1Q6ICfoqK3lrppBUEnkuLvmqZ8nLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9TU0xFTkFCTEVEOiAn6ZyA6KaBSFRUUFPmmYLllZ/nlKgnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9VU0VSTkFNRTogJ+ioreWumueUqOaItuWQjScsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1BBU1NXT1JEOiAn6Kit5a6a5a+G56K8JyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfUEFUSDogJ+ioreWumuWEsuWtmOi3r+W+kScsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX0NVU1RPTVVSTDogJ+ioreWumuiHquiogue2suWdgCcsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1dFQlNJVEVfUEFUSDogJ+ioreWumue2suermei3r+W+kScsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfSE9TVDogJ+S+i+Wmgu+8mmh0dHBzOi8vZXhhbXBsZS5jb20vd2ViZGF2JyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9TU0xFTkFCTEVEOiAn6ZyA6KaBSFRUUFPmmYLllZ/nlKgnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1VTRVJOQU1FOiAn5L6L5aaC77yabWUnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1BBU1NXT1JEOiAn6Ly45YWl55So5oi25a+G56K8JyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9QQVRIOiAn5L6L5aaC77yadGVzdC8nLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1dFQlNJVEVfUEFUSDogJ+aLvOaOpee2suWdgOaZguS9v+eUqCcsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly90ZXN0LmNvbScsXHJcblxyXG4gIC8vIHNmdHBwbGlzdFxyXG4gIFBJQ0JFRF9TRlRQUExJU1Q6ICflhafnva5TRlRQJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX0hPU1Q6ICfoqK3lrprkuLvmqZ8nLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfUE9SVDogJ+ioreWumuerr+WPoycsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9VU0VSTkFNRTogJ+ioreWumueUqOaItuWQjScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9QQVNTV09SRDogJ+ioreWumuWvhueivCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9QUklWQVRFS0VZOiAn6Kit5a6a56eB6ZGwJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX1BSSVZBVEVLRVlfUEFTU1BIUkFTRTogJ+ioreWumuengemRsOWvhueivCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9VUExPQURQQVRIOiAn6Kit5a6a5LiK5YKz6Lev5b6RJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX0NVU1RPTVVSTDogJ+ioreWumuiHquiogue2suWdgCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9XRUJTSVRFX1BBVEg6ICfoqK3lrprntrLnq5not6/lvpEnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfRklMRV9VU0VSOiAn6Kit5a6a5paH5Lu255So5oi2Oue1hCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9GSUxFX01PREU6ICfoqK3lrprmlofku7bmrIrpmZAnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfRElSX01PREU6ICfoqK3lrprmlofku7blpL7mrIrpmZAnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9IT1NUOiAn5L6L5aaC77yaMS4xLjEuMycsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1BPUlQ6ICfpu5joqo0yMicsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1BSSVZBVEVLRVk6ICfkvovlpoLvvJovVXNlcnMveHh4Ly5zc2gvaWRfcnNhJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUFJJVkFURUtFWV9QQVNTUEhSQVNFOiAn6Ly45YWl56eB6ZGw5a+G56K8JyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfVVBMT0FEUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly90ZXN0LmNvbScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1dFQlNJVEVfUEFUSDogJ+aLvOaOpee2suWdgOaZguS9v+eUqCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0ZJTEVfVVNFUjogJ+S+i+Wmgu+8mnd3dzpkYXRhJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRklMRV9NT0RFOiAn5L6L5aaC77yaMDY2NCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0RJUl9NT0RFOiAn5L6L5aaC77yaMDc3NScsXHJcblxyXG4gIEJVSUxESU5fV0FURVJNQVJLX0lTQUREV0FURVJNQVJLOiAn5piv5ZCm5re75Yqg5rC05Y2wJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX0lTQUREV0FURVJNQVJLOiAn6ZyA6KaB5re75Yqg5rC05Y2w5pmC5ZWf55SoJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktUWVBFOiAn6Kit5a6a5rC05Y2w6aGe5Z6LJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1RZUEU6ICfoq4vpgbjmk4fmsLTljbDpoZ7lnosnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX0lTRlVMTFNDUkVFTldBVEVSTUFSSzogJ+aYr+WQpuWFqOWxj+awtOWNsCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9JU0ZVTExTQ1JFRU5XQVRFUk1BUks6ICfpnIDopoHlhajlsY/msLTljbDmmYLllZ/nlKgnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0RFR1JFRTogJ+ioreWumuawtOWNsOinkuW6picsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktERUdSRUU6ICfoq4vovLjlhaXmlbjlrZcnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RFWFQ6ICfoqK3lrprmsLTljbDmloflrZcnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLVEVYVDogJ+iri+i8uOWFpeawtOWNsOaWh+WtlycsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVEVYVEZPTlRQQVRIOiAn6Kit5a6a5rC05Y2w5a2X6auUJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0ZPTlRQQVRIOiAn6KuL6Ly45YWl5rC05Y2w5a2X6auU5paH5Lu26Lev5b6RJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktGT05UUkFUSU86ICfoqK3lrprmsLTljbDlnJbniYfmr5TkvosnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVFJBVElPOiAn6KuL6Ly45YWlMC0x55qE5pW45a2XJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktGT05UQ09MT1I6ICfoqK3lrprmsLTljbDlrZfpq5TpoY/oibInLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVENPTE9SOiAn6KuL6Ly45YWlcmdi6aGP6Imy5YC8JyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktJTUFHRVBBVEg6ICfoqK3lrprmsLTljbDlnJbniYfot6/lvpEnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLSU1BR0VQQVRIOiAn6KuL6Ly45YWl5rC05Y2w5ZyW54mH6Lev5b6RJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktQT1NJVElPTjogJ+ioreWumuawtOWNsOS9jee9ricsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktQT1NJVElPTjogJ+iri+mBuOaTh+awtOWNsOS9jee9ricsXHJcblxyXG4gIEJVSUxESU5fUkVOQU1FX0ZPUk1BVDogJ+ioreWumumHjeWRveWQjeagvOW8jycsXHJcbiAgQlVJTERJTl9SRU5BTUVfRU5BQkxFOiAn5piv5ZCm5ZWf55So6YeN5ZG95ZCNJyxcclxuXHJcbiAgQlVJTERJTl9DT01QUkVTU19RVUFMSVRZOiAn6Kit5a6a5ZyW54mH6LOq6YePJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUVVBTElUWTogJ+iri+i8uOWFpTAtMTAw55qE5pW05pW4JyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0lTQ09OVkVSVDogJ+aYr+WQpumAsuihjOagvOW8j+i9ieaPmycsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTQ09OVkVSVDogJ+mcgOimgei9ieaPm+aZguWVn+eUqCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19DT05WRVJURk9STUFUOiAn6Kit5a6a6L2J5o+b5qC85byPJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfQ09OVkVSVEZPUk1BVDogJ+iri+mBuOaTh+i9ieaPm+agvOW8jycsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU1JFU0laRTogJ+aYr+WQpumAsuihjOWclueJh+e4ruaUvicsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUkVTSVpFOiAn6ZyA6KaB57iu5pS+5pmC5ZWf55SoJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX1JFU0laRVdJRFRIOiAn6Kit5a6a57iu5pS+5a+s5bqmJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFV0lEVEg6ICfoq4vovLjlhaXmlbjlrZcnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfUkVTSVpFSEVJR0hUOiAn6Kit5a6a57iu5pS+6auY5bqmJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFSEVJR0hUOiAn6KuL6Ly45YWl5pW45a2XJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0lTUkVTSVpFQllQRVJDRU5UOiAn5piv5ZCm5oyJ55m+5YiG5q+U6YCy6KGM57iu5pS+JyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRVNJWkVCWVBFUkNFTlQ6ICfpnIDopoHmjInnmb7liIbmr5TnuK7mlL7mmYLllZ/nlKgnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfUkVTSVpFUEVSQ0VOVDogJ+ioreWumue4ruaUvueZvuWIhuavlCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRVBFUkNFTlQ6ICfoq4vovLjlhaXmlbDlrZcnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfU0tJUFJFU0laRU9GU01BTExJTUc6ICfmmK/lkKbot7PpgY7lsI/lnJbnuK7mlL4nLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNST1RBVEU6ICfmmK/lkKbpgLLooYzlnJbniYfml4vovYknLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JPVEFURTogJ+mcgOimgeaXi+i9ieaZguWVn+eUqCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19ST1RBVEVERUdSRUU6ICfoqK3lrprml4vovYnop5LluqYnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9ST1RBVEVERUdSRUU6ICfoq4vovLjlhaXmlbjlrZfvvIzlj6/ngrrosqDmlbgnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNSRU1PVkVFWElGOiAn5piv5ZCm56e76ZmkRVhJRuizh+ioiicsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUkVNT1ZFRVhJRjogJ+mcgOimgeenu+mZpEVYSUbos4foqIrmmYLllZ/nlKgnLFxyXG5cclxuICAvLyBQbHVnaW4gSGFuZGxlclxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX1NVQ0NFU1M6ICfmj5Lku7blronoo53miJDlip8nLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRDogJ+aPkuS7tuWuieijneWkseaVlycsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEX1JFQVNPTjogJ+aPkuS7tuWuieijneWkseaVl++8jOWkseaVl+eivOeCuiR7Y29kZX3vvIzpjK/oqqTntIDpjITngrogXFxuICR7ZGF0YX0nLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRF9QQVRIOiAn5o+S5Lu25a6J6KOd5aSx5pWX77yM6KuL6Ly45YWl5q2j56K655qE5o+S5Lu25ZCN56ix5oiW5q2j56K655qE5a6J6KOd6Lev5b6RJyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX1NVQ0NFU1M6ICfmj5Lku7bljbjovInmiJDlip8nLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEOiAn5o+S5Lu25Y246LyJ5aSx5pWXJyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRF9SRUFTT046ICfmj5Lku7bljbjovInlpLHmlZfvvIzlpLHmlZfnorzngroke2NvZGV977yM6Yyv6Kqk57SA6YyE54K6IFxcbiAke2RhdGF9JyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRF9WQUxJRDogJ+aPkuS7tuWNuOi8ieWkseaVl++8jOiri+i8uOWFpeato+eiuueahOaPkuS7tuWQjeeosScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9TVUNDRVNTOiAn5o+S5Lu25pu05paw5oiQ5YqfJyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRDogJ+aPkuS7tuabtOaWsOWkseaVlycsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRURfUkVBU09OOiAn5o+S5Lu25pu05paw5aSx5pWX77yM5aSx5pWX56K854K6JHtjb2Rlfe+8jOmMr+iqpOe0gOmMhOeCuiBcXG4gJHtkYXRhfScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRURfVkFMSUQ6ICfmj5Lku7bmm7TmlrDlpLHmlZfvvIzoq4vovLjlhaXmraPnorrnmoTmj5Lku7blkI3nqLEnXHJcbn1cclxuIiwiaW1wb3J0IHsgdHlwZSBJTG9jYWxlcyB9IGZyb20gJy4vemgtQ04nXHJcblxyXG4vKiBlc2xpbnQtZGlzYWJsZSBuby10ZW1wbGF0ZS1jdXJseS1pbi1zdHJpbmcgKi9cclxuZXhwb3J0IGNvbnN0IEVOOiBJTG9jYWxlcyA9IHtcclxuICBVUExPQURfRkFJTEVEOiAnVXBsb2FkIGZhaWxlZCcsXHJcbiAgQ0hFQ0tfU0VUVElOR1M6ICdQbGVhc2UgY2hlY2sgeW91ciBzZXR0aW5ncycsXHJcbiAgQ0hFQ0tfU0VUVElOR1NfQU5EX05FVFdPUks6ICdQbGVhc2UgY2hlY2sgeW91ciBzZXR0aW5ncyBhbmQgbmV0d29yaycsXHJcbiAgVVBMT0FEX0ZBSUxFRF9SRUFTT046ICdFcnJvciBjb2RlOiAke2NvZGV9LCBwbGVhc2Ugb3BlbiB0aGUgYnJvd3NlciBhbmQgcGFzdGUgdGhlIGFkZHJlc3MgdG8gc2VlIHRoZSByZWFzb24nLFxyXG4gIFNFUlZFUl9FUlJPUjogJ1NlcnZlciBlcnJvciwgcGxlYXNlIHRyeSBhZ2FpbiBsYXRlcicsXHJcbiAgQVVUSF9GQUlMRUQ6ICdBdXRoZW50aWNhdGlvbiBmYWlsZWQnLFxyXG5cclxuICAvLyBzbW1zXHJcbiAgUElDQkVEX1NNTVM6ICdTTS5NUycsXHJcbiAgUElDQkVEX1NNTVNfVE9LRU46ICdTZXQgVG9rZW4nLFxyXG4gIFBJQ0JFRF9TTU1TX0JBQ0tVUF9ET01BSU46ICdTZXQgQmFja3VwIFVwbG9hZCBEb21haW4nLFxyXG4gIFBJQ0JFRF9TTU1TX01FU1NBR0VfQkFDS1VQX0RPTUFJTjogJ0V4LiBzbW1zLmFwcCcsXHJcblxyXG4gIC8vIGxvY2FsXHJcbiAgUElDQkVEX0xPQ0FMOiAnTG9jYWwnLFxyXG4gIFBJQ0JFRF9MT0NBTF9QQVRIOiAnU2V0IFBhdGgnLFxyXG4gIFBJQ0JFRF9MT0NBTF9NRVNTQUdFX1BBVEg6ICdFeC4gL1VzZXJzL25hbWUvUGljdHVyZXMvJyxcclxuICBQSUNCRURfTE9DQUxfQ1VTVE9NVVJMOiAnU2V0IEN1c3RvbSBVUkwnLFxyXG4gIFBJQ0JFRF9MT0NBTF9NRVNTQUdFX0NVU1RPTVVSTDogJ0V4LiBodHRwczovL3Rlc3QuY29tJyxcclxuICBQSUNCRURfTE9DQUxfV0VCUEFUSDogJ1NldCBXZWIgUGF0aCcsXHJcbiAgUElDQkVEX0xPQ0FMX01FU1NBR0VfV0VCUEFUSDogJ1VzZWQgdG8gZ2VuZXJhdGUgdXJsIHBhdGgnLFxyXG5cclxuICAvLyBBbGktY2xvdWRcclxuICBQSUNCRURfQUxJQ0xPVUQ6ICdBbGkgQ2xvdWQnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9BQ0NFU1NLRVlJRDogJ1NldCBLZXlJZCcsXHJcbiAgUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWVNFQ1JFVDogJ1NldCBLZXlTZWNyZXQnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9CVUNLRVQ6ICdTZXQgQnVja2V0JyxcclxuICBQSUNCRURfQUxJQ0xPVURfQVJFQTogJ1NldCBBcmVhJyxcclxuICBQSUNCRURfQUxJQ0xPVURfUEFUSDogJ1NldCBQYXRoJyxcclxuICBQSUNCRURfQUxJQ0xPVURfQ1VTVE9NVVJMOiAnU2V0IEN1c3RvbSBVUkwnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9PUFRJT05TOiAnU2V0IFVSTCBTdWZmaXgnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX0FSRUE6ICdFeC4gb3NzLWNuLWJlaWppbmcnLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX1BBVEg6ICdFeC4gdGVzdC8nLFxyXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX09QVElPTlM6ICdFeC4gP3gtb3NzLXByb2Nlc3M9eHh4JyxcclxuICBQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9DVVNUT01VUkw6ICdFeC4gaHR0cHM6Ly90ZXN0LmNvbScsXHJcblxyXG4gIC8vIFRlbmNlbnQtY2xvdWRcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEOiAnVGVuY2VudCBDbG91ZCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9WRVJTSU9OOiAnQ2hvb3NlIENPUyB2ZXJzaW9uJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVElEOiAnU2V0IFNlY3JldElkJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVEtFWTogJ1NldCBTZWNyZXRLZXknLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQVBQSUQ6ICdTZXQgQXBwSWQnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQlVDS0VUOiAnU2V0IEJ1Y2tldCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9BUkVBOiAnU2V0IEFyZWEnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfRU5EUE9JTlQ6ICdTZXQgRW5kcG9pbnQnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfUEFUSDogJ1NldCBQYXRoJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX09QVElPTlM6ICdTZXQgVVJMIFN1ZmZpeCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9DVVNUT01VUkw6ICdTZXQgQ3VzdG9tIFVSTCcsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FQUElEOiAnRXguIDEyMzQ1Njc4OTAnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9BUkVBOiAnRXguIGFwLWJlaWppbmcnLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9QQVRIOiAnRXguIHRlc3QvJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQ1VTVE9NVVJMOiAnRXguIGh0dHA6Ly90ZXN0LmNvbScsXHJcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX09QVElPTlM6ICdFeC4gP2ltYWdlTW9ncjInLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9FTkRQT0lOVDogJ0V4LiBjb3MtaW50ZXJuYWwuYWNjZWxlcmF0ZS50ZW5jZW50Y29zLmNuJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU06ICfmpbXmmbrlo5PnuK4nLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9DQU5DRUw6ICfpl5zploknLFxyXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9DT05GSVJNOiAn6ZaL5ZWTJyxcclxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fVElQOiAn5ZyW54mH5qW15pm65aOT57iu77yM6Kmz5oOF6KuL5Y+D6ICDW+aWh+aqlOiqquaYjl0oaHR0cHM6Ly9jbG91ZC50ZW5jZW50LmNvbS9kb2N1bWVudC9wcm9kdWN0LzQzNi80OTI1OSknLFxyXG5cclxuICAvLyBHaXRIdWJcclxuICBQSUNCRURfR0lUSFVCOiAnR2l0SHViJyxcclxuICBQSUNCRURfR0lUSFVCX1RPS0VOOiAnU2V0IFRva2VuJyxcclxuICBQSUNCRURfR0lUSFVCX1JFUE86ICdTZXQgUmVwbyBOYW1lJyxcclxuICBQSUNCRURfR0lUSFVCX1BBVEg6ICdTZXQgUGF0aCcsXHJcbiAgUElDQkVEX0dJVEhVQl9CUkFOQ0g6ICdTZXQgQnJhbmNoJyxcclxuICBQSUNCRURfR0lUSFVCX0NVU1RPTVVSTDogJ1NldCBDdXN0b20gVVJMJyxcclxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfUkVQTzogJ0V4LiB1c2VybmFtZS9yZXBvJyxcclxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfQlJBTkNIOiAnRXguIG1haW4nLFxyXG4gIFBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9QQVRIOiAnRXguIHRlc3QvJyxcclxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfQ1VTVE9NVVJMOiAnRXguIGh0dHBzOi8vdGVzdC5jb20nLFxyXG5cclxuICAvLyBxaW5pdVxyXG4gIFBJQ0JFRF9RSU5JVTogJ1Fpbml1JyxcclxuICBQSUNCRURfUUlOSVVfQUNDRVNTS0VZOiAnU2V0IEFjY2Vzc0tleScsXHJcbiAgUElDQkVEX1FJTklVX1NFQ1JFVEtFWTogJ1NldCBTZWNyZXRLZXknLFxyXG4gIFBJQ0JFRF9RSU5JVV9CVUNLRVQ6ICdTZXQgQnVja2V0JyxcclxuICBQSUNCRURfUUlOSVVfUEFUSDogJ1NldCBQYXRoJyxcclxuICBQSUNCRURfUUlOSVVfVVJMOiAnU2V0IFVSTCcsXHJcbiAgUElDQkVEX1FJTklVX09QVElPTlM6ICdTZXQgVVJMIFN1ZmZpeCcsXHJcbiAgUElDQkVEX1FJTklVX0FSRUE6ICdTZXQgQXJlYScsXHJcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfUEFUSDogJ0V4LiB0ZXN0LycsXHJcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfQVJFQTogJ0V4LiB6MCcsXHJcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfT1BUSU9OUzogJ0V4LiA/aW1hZ2VzbGltJyxcclxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9VUkw6ICdFeC4gaHR0cHM6Ly94eHgueXl5LmdsYi5jbG91ZGRuLmNvbScsXHJcblxyXG4gIC8vIGltZ3VyXHJcbiAgUElDQkVEX0lNR1VSOiAnSW1ndXInLFxyXG4gIFBJQ0JFRF9JTUdVUl9DTElFTlRJRDogJ1NldCBDbGllbnRJZCcsXHJcbiAgUElDQkVEX0lNR1VSX1VTRVJOQU1FOiAnU2V0IFVzZXJuYW1lJyxcclxuICBQSUNCRURfSU1HVVJfQUNDRVNTX1RPS0VOOiAnU2V0IEFjY2VzcyBUb2tlbicsXHJcbiAgUElDQkVEX0lNR1VSX0FMQlVNOiAnU2V0IEFsYnVtIE5hbWUnLFxyXG4gIFBJQ0JFRF9JTUdVUl9QUk9YWTogJ1NldCBQcm94eScsXHJcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfQ0xJRU5USUQ6ICdGaWxsIGluIHdoZW4geW91IG5lZWQgdG8gdXBsb2FkIGFzIGFub255bW91cycsXHJcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfVVNFUk5BTUU6ICdGaWxsIGluIHdoZW4geW91IG5lZWQgdG8gdXBsb2FkIHRvIHRoZSBhY2NvdW50JyxcclxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9BQ0NFU1NfVE9LRU46ICdGaWxsIGluIHdoZW4geW91IG5lZWQgdG8gdXBsb2FkIHRvIHRoZSBhY2NvdW50JyxcclxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9BTEJVTTogJ+S+i+Wmgu+8mnRlc3QnLFxyXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX1BST1hZOiAnRXguIGh0dHA6Ly8xMjcuMC4wLjE6MTA4MCcsXHJcblxyXG4gIC8vIHVweXVuXHJcbiAgUElDQkVEX1VQWVVOOiAnVXB5dW4nLFxyXG4gIFBJQ0JFRF9VUFlVTl9CVUNLRVQ6ICdTZXQgQnVja2V0JyxcclxuICBQSUNCRURfVVBZVU5fT1BFUkFUT1I6ICdTZXQgT3BlcmF0b3InLFxyXG4gIFBJQ0JFRF9VUFlVTl9QQVNTV09SRDogJ1NldCBPcGVyYXRvciBQYXNzd29yZCcsXHJcbiAgUElDQkVEX1VQWVVOX1BBVEg6ICdTZXQgUGF0aCcsXHJcbiAgUElDQkVEX1VQWVVOX1VSTDogJ1NldCBVUkwnLFxyXG4gIFBJQ0JFRF9VUFlVTl9PUFRJT05TOiAnU2V0IFVSTCBTdWZmaXgnLFxyXG4gIFBJQ0JFRF9VUFlVTl9BTlRJX0xFRUNIX1RPS0VOOiAnU2V0IEFudGktTGVlY2ggVG9rZW4nLFxyXG4gIFBJQ0JFRF9VUFlVTl9FWFBJUkVfVElNRTogJ1NldCBFeHBpcmUgVGltZShzZWNvbmRzKScsXHJcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfT1BFUkFUT1I6ICdFeC4gbWUnLFxyXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX1BBU1NXT1JEOiAnUGxlYXNlIHR5cGUgdGhlIG9wZXJhdG9yIHBhc3N3b3JkJyxcclxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9VUkw6ICdFeC4gaHR0cDovL3h4eC50ZXN0LnVwY2RuLm5ldCcsXHJcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfT1BUSU9OUzogJ0V4LiAhaW1nc2xpbScsXHJcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfUEFUSDogJ0V4LiB0ZXN0LycsXHJcblxyXG4gIC8vIHdlYmRhdlxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVDogJ1dlYkRBVicsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX0hPU1Q6ICdTZXQgSG9zdCcsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1NTTEVOQUJMRUQ6ICdFbmFibGUgSFRUUFMnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9VU0VSTkFNRTogJ1NldCBVc2VybmFtZScsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1BBU1NXT1JEOiAnU2V0IFBhc3N3b3JkJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfUEFUSDogJ1NldCBQYXRoJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfV0VCU0lURV9QQVRIOiAnU2V0IFdlYnNpdGUgUGF0aCcsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX0NVU1RPTVVSTDogJ1NldCBDdXN0b20gVVJMJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9IT1NUOiAnRXguIGh0dHBzOi8vZXhhbXBsZS5jb20vd2ViZGF2JyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9TU0xFTkFCTEVEOiAnRW5hYmxlIEhUVFBTJyxcclxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9VU0VSTkFNRTogJ0V4LiBtZScsXHJcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfUEFTU1dPUkQ6ICdQbGVhc2UgdHlwZSB0aGUgcGFzc3dvcmQnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1BBVEg6ICdFeC4gdGVzdC8nLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1dFQlNJVEVfUEFUSDogJ1VzZWQgdG8gZ2VuZXJhdGUgdGhlIFVSTCBvZiB0aGUgaW1hZ2UnLFxyXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX0NVU1RPTVVSTDogJ0V4LiBodHRwczovL3Rlc3QuY29tJyxcclxuXHJcbiAgLy8gc2Z0cHBsaXN0XHJcbiAgUElDQkVEX1NGVFBQTElTVDogJ1NGVFAgQnVpbGRpbicsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9IT1NUOiAnU2V0IEhvc3QnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfUE9SVDogJ1NldCBQb3J0JyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX1VTRVJOQU1FOiAnU2V0IFVzZXJuYW1lJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX1BBU1NXT1JEOiAnU2V0IFBhc3N3b3JkJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX1BSSVZBVEVLRVk6ICdTZXQgUHJpdmF0ZSBLZXknLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfUFJJVkFURUtFWV9QQVNTUEhSQVNFOiAnU2V0IFByaXZhdGUgS2V5IFBhc3NwaHJhc2UnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfVVBMT0FEUEFUSDogJ1NldCBVcGxvYWQgUGF0aCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9DVVNUT01VUkw6ICdTZXQgQ3VzdG9tIFVSTCcsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9XRUJTSVRFX1BBVEg6ICdTZXQgV2Vic2l0ZSBQYXRoJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX0ZJTEVfVVNFUjogJ1NldCBGaWxlIFVzZXI6R3JvdXAnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfRklMRV9NT0RFOiAnU2V0IEZpbGUgTW9kZScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9ESVJfTU9ERTogJ1NldCBEaXJlY3RvcnkgTW9kZScsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0hPU1Q6ICdFeC4gMS4xLjEuMycsXHJcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1BPUlQ6ICdEZWZhdWx0IDIyJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUFJJVkFURUtFWTogJ0V4LiAvVXNlcnMveHh4Ly5zc2gvaWRfcnNhJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUFJJVkFURUtFWV9QQVNTUEhSQVNFOiAnUGxlYXNlIHR5cGUgdGhlIHByaXZhdGUga2V5IHBhc3NwaHJhc2UnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9VUExPQURQQVRIOiAnRXguIHRlc3QvJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfQ1VTVE9NVVJMOiAnRXguIGh0dHBzOi8vdGVzdC5jb20nLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9XRUJTSVRFX1BBVEg6ICdVc2VkIHRvIGdlbmVyYXRlIHRoZSBVUkwgb2YgdGhlIGltYWdlJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRklMRV9VU0VSOiAnRXguIHd3dzpkYXRhJyxcclxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRklMRV9NT0RFOiAnRXguIDA2NjQnLFxyXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9ESVJfTU9ERTogJ0V4LiAwNzc1JyxcclxuXHJcbiAgQlVJTERJTl9SRU5BTUVfRk9STUFUOiAnU2V0IHJlbmFtZSBmb3JtYXQnLFxyXG4gIEJVSUxESU5fUkVOQU1FX0VOQUJMRTogJ0VuYWJsZSByZW5hbWUnLFxyXG5cclxuICBCVUlMRElOX1dBVEVSTUFSS19JU0FERFdBVEVSTUFSSzogJ1doZXRoZXIgdG8gYWRkIHdhdGVybWFyaycsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9JU0FERFdBVEVSTUFSSzogJ0VuYWJsZSB3aGVuIHdhdGVybWFyayBpcyByZXF1aXJlZCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVFlQRTogJ1NldCB3YXRlcm1hcmsgdHlwZScsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktUWVBFOiAnUGxlYXNlIHNlbGVjdCB3YXRlcm1hcmsgdHlwZScsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfSVNGVUxMU0NSRUVOV0FURVJNQVJLOiAnV2hldGhlciB0byB1c2UgZnVsbC1zY3JlZW4gd2F0ZXJtYXJrJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX0lTRlVMTFNDUkVFTldBVEVSTUFSSzogJ0VuYWJsZSB3aGVuIGZ1bGwtc2NyZWVuIHdhdGVybWFyayBpcyByZXF1aXJlZCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLREVHUkVFOiAnU2V0IHdhdGVybWFyayBhbmdsZScsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktERUdSRUU6ICdQbGVhc2UgZW50ZXIgYSBudW1iZXInLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RFWFQ6ICdTZXQgd2F0ZXJtYXJrIHRleHQnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLVEVYVDogJ1BsZWFzZSBlbnRlciB3YXRlcm1hcmsgdGV4dCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVEVYVEZPTlRQQVRIOiAnU2V0IHdhdGVybWFyayBmb250JyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0ZPTlRQQVRIOiAnUGxlYXNlIGVudGVyIHRoZSB3YXRlcm1hcmsgZm9udCBmaWxlIHBhdGgnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0ZPTlRSQVRJTzogJ1NldCB0aGUgcmF0aW8gb2YgdGhlIHdhdGVybWFyayB0byB0aGUgaW1hZ2UnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVFJBVElPOiAnUGxlYXNlIGVudGVyIGEgbnVtYmVyIGJldHdlZW4gMC0xJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktGT05UQ09MT1I6ICdTZXQgd2F0ZXJtYXJrIGZvbnQgY29sb3InLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVENPTE9SOiAnUGxlYXNlIGVudGVyIHRoZSBSR0IgY29sb3IgdmFsdWUnLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0lNQUdFUEFUSDogJ1NldCB3YXRlcm1hcmsgaW1hZ2UgcGF0aCcsXHJcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktJTUFHRVBBVEg6ICdQbGVhc2UgZW50ZXIgdGhlIHdhdGVybWFyayBpbWFnZSBwYXRoJyxcclxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktQT1NJVElPTjogJ1NldCB3YXRlcm1hcmsgcG9zaXRpb24nLFxyXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLUE9TSVRJT046ICdQbGVhc2Ugc2VsZWN0IHdhdGVybWFyayBwb3NpdGlvbicsXHJcblxyXG4gIEJVSUxESU5fQ09NUFJFU1NfUVVBTElUWTogJ1NldCBpbWFnZSBxdWFsaXR5JyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUVVBTElUWTogJ1BsZWFzZSBlbnRlciBhbiBpbnRlZ2VyIGJldHdlZW4gMC0xMDAnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNDT05WRVJUOiAnV2hldGhlciB0byBwZXJmb3JtIGZvcm1hdCBjb252ZXJzaW9uJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNDT05WRVJUOiAnRW5hYmxlIHdoZW4gZm9ybWF0IGNvbnZlcnNpb24gaXMgcmVxdWlyZWQnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfQ09OVkVSVEZPUk1BVDogJ1NldCBjb252ZXJzaW9uIGZvcm1hdCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0NPTlZFUlRGT1JNQVQ6ICdQbGVhc2Ugc2VsZWN0IGNvbnZlcnNpb24gZm9ybWF0JyxcclxuICBCVUlMRElOX0NPTVBSRVNTX0lTUkVTSVpFOiAnV2hldGhlciB0byByZXNpemUgdGhlIGltYWdlJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRVNJWkU6ICdFbmFibGUgd2hlbiBpbWFnZSByZXNpemluZyBpcyByZXF1aXJlZCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19SRVNJWkVXSURUSDogJ1NldCByZXNpemluZyB3aWR0aCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRVdJRFRIOiAnUGxlYXNlIGVudGVyIGEgbnVtYmVyJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX1JFU0laRUhFSUdIVDogJ1NldCByZXNpemluZyBoZWlnaHQnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVIRUlHSFQ6ICdQbGVhc2UgZW50ZXIgYSBudW1iZXInLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkVCWVBFUkNFTlQ6ICdXaGV0aGVyIHRvIHJlc2l6ZSB0aGUgaW1hZ2UgYnkgcGVyY2VudGFnZScsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUkVTSVpFQllQRVJDRU5UOiAnRW5hYmxlIHdoZW4gcmVzaXppbmcgYnkgcGVyY2VudGFnZSBpcyByZXF1aXJlZCcsXHJcbiAgQlVJTERJTl9DT01QUkVTU19SRVNJWkVQRVJDRU5UOiAnU2V0IHJlc2l6aW5nIHBlcmNlbnRhZ2UnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVQRVJDRU5UOiAnUGxlYXNlIGVudGVyIGEgbnVtYmVyJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX1NLSVBSRVNJWkVPRlNNQUxMSU1HOiAnV2hldGhlciB0byBza2lwIHJlc2l6aW5nIG9mIHNtYWxsIGltYWdlcycsXHJcbiAgQlVJTERJTl9DT01QUkVTU19JU1JPVEFURTogJ1doZXRoZXIgdG8gcm90YXRlIHRoZSBpbWFnZScsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUk9UQVRFOiAnRW5hYmxlIHdoZW4gaW1hZ2Ugcm90YXRpb24gaXMgcmVxdWlyZWQnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfUk9UQVRFREVHUkVFOiAnU2V0IHJvdGF0aW9uIGFuZ2xlJyxcclxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUk9UQVRFREVHUkVFOiAnUGxlYXNlIGVudGVyIGEgbnVtYmVyLCBjYW4gYmUgbmVnYXRpdmUnLFxyXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNSRU1PVkVFWElGOiAnV2hldGhlciB0byByZW1vdmUgRVhJRiBpbmZvcm1hdGlvbicsXHJcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUkVNT1ZFRVhJRjogJ0VuYWJsZSB3aGVuIHJlbW92aW5nIEVYSUYgaW5mb3JtYXRpb24gaXMgcmVxdWlyZWQnLFxyXG4gIC8vIFBsdWdpbiBIYW5kbGVyXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfU1VDQ0VTUzogJ1BsdWdpbiBpbnN0YWxsZWQgc3VjY2Vzc2Z1bGx5JyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRUQ6ICdQbHVnaW4gaW5zdGFsbGF0aW9uIGZhaWxlZCcsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEX1JFQVNPTjogJ1BsdWdpbiBpbnN0YWxsYXRpb24gZmFpbGVkLCBlcnJvciBjb2RlIGlzICR7Y29kZX0sIGVycm9yIGxvZyBpcyBcXG4gJHtkYXRhfScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEX1BBVEg6ICdQbHVnaW4gaW5zdGFsbGF0aW9uIGZhaWxlZCwgcGxlYXNlIGVudGVyIGEgdmFsaWQgcGx1Z2luIG5hbWUgb3IgdmFsaWQgaW5zdGFsbGF0aW9uIHBhdGgnLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfU1VDQ0VTUzogJ1BsdWdpbiB1bmluc3RhbGxlZCBzdWNjZXNzZnVsbHknLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEOiAnUGx1Z2luIHVuaW5zdGFsbCBmYWlsZWQnLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEX1JFQVNPTjogJ1BsdWdpbiB1bmluc3RhbGwgZmFpbGVkLCBlcnJvciBjb2RlIGlzICR7Y29kZX0sIGVycm9yIGxvZyBpcyBcXG4gJHtkYXRhfScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfVkFMSUQ6ICdQbHVnaW4gdW5pbnN0YWxsIGZhaWxlZCwgcGxlYXNlIGVudGVyIGEgdmFsaWQgcGx1Z2luIG5hbWUnLFxyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfU1VDQ0VTUzogJ1BsdWdpbiB1cGRhdGVkIHN1Y2Nlc3NmdWxseScsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRUQ6ICdQbHVnaW4gdXBkYXRlIGZhaWxlZCcsXHJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRURfUkVBU09OOiAnUGx1Z2luIHVwZGF0ZSBmYWlsZWQsIGVycm9yIGNvZGUgaXMgJHtjb2RlfSwgZXJyb3IgbG9nIGlzIFxcbiAke2RhdGF9JyxcclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRF9WQUxJRDogJ1BsdWdpbiB1cGRhdGUgZmFpbGVkLCBwbGVhc2UgZW50ZXIgYSB2YWxpZCBwbHVnaW4gbmFtZSdcclxufVxyXG4iLCJpbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnXHJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXHJcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ2V2ZW50cydcclxuaW1wb3J0IHsgaG9tZWRpciB9IGZyb20gJ29zJ1xyXG5pbXBvcnQgQ29tbWFuZGVyIGZyb20gJy4uL2xpYi9Db21tYW5kZXInXHJcbmltcG9ydCB7IExvZ2dlciB9IGZyb20gJy4uL2xpYi9Mb2dnZXInXHJcbmltcG9ydCBMaWZlY3ljbGUgZnJvbSAnLi9MaWZlY3ljbGUnXHJcbmltcG9ydCBMaWZlY3ljbGVQbHVnaW5zLCB7IHNldEN1cnJlbnRQbHVnaW5OYW1lIH0gZnJvbSAnLi4vbGliL0xpZmVjeWNsZVBsdWdpbnMnXHJcbmltcG9ydCB1cGxvYWRlcnMgZnJvbSAnLi4vcGx1Z2lucy91cGxvYWRlcidcclxuaW1wb3J0IHRyYW5zZm9ybWVycyBmcm9tICcuLi9wbHVnaW5zL3RyYW5zZm9ybWVyJ1xyXG5pbXBvcnQgUGx1Z2luTG9hZGVyIGZyb20gJy4uL2xpYi9QbHVnaW5Mb2FkZXInXHJcbmltcG9ydCB7IGdldCwgc2V0LCB1bnNldCB9IGZyb20gJ2xvZGFzaCdcclxuaW1wb3J0IHsgdHlwZSBJSGVscGVyLCB0eXBlIElJbWdJbmZvLCB0eXBlIElDb25maWcsIHR5cGUgSVBpY0dvLCB0eXBlIElTdHJpbmdLZXlNYXAsIHR5cGUgSVBsdWdpbkxvYWRlciwgdHlwZSBJSTE4bk1hbmFnZXIsIHR5cGUgSVBpY0dvUGx1Z2luLCB0eXBlIElQaWNHb1BsdWdpbkludGVyZmFjZSwgdHlwZSBJUmVxdWVzdCB9IGZyb20gJy4uL3R5cGVzJ1xyXG5pbXBvcnQgZ2V0Q2xpcGJvYXJkSW1hZ2UgZnJvbSAnLi4vdXRpbHMvZ2V0Q2xpcGJvYXJkSW1hZ2UnXHJcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4uL2xpYi9SZXF1ZXN0J1xyXG5pbXBvcnQgREIgZnJvbSAnLi4vdXRpbHMvZGInXHJcbmltcG9ydCBQbHVnaW5IYW5kbGVyIGZyb20gJy4uL2xpYi9QbHVnaW5IYW5kbGVyJ1xyXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50LCBJQnVzRXZlbnQgfSBmcm9tICcuLi91dGlscy9lbnVtJ1xyXG5pbXBvcnQgeyBldmVudEJ1cyB9IGZyb20gJy4uL3V0aWxzL2V2ZW50QnVzJ1xyXG5pbXBvcnQgeyBpc0NvbmZpZ0tleUluQmxhY2tMaXN0LCBpc0lucHV0Q29uZmlnVmFsaWQgfSBmcm9tICcuLi91dGlscy9jb21tb24nXHJcbmltcG9ydCB7IEkxOG5NYW5hZ2VyIH0gZnJvbSAnLi4vaTE4bidcclxuXHJcbmV4cG9ydCBjbGFzcyBQaWNHbyBleHRlbmRzIEV2ZW50RW1pdHRlciBpbXBsZW1lbnRzIElQaWNHbyB7XHJcbiAgcHJpdmF0ZSBfY29uZmlnITogSUNvbmZpZ1xyXG4gIHByaXZhdGUgbGlmZWN5Y2xlITogTGlmZWN5Y2xlXHJcbiAgcHJpdmF0ZSBkYiE6IERCXHJcbiAgcHJpdmF0ZSBfcGx1Z2luTG9hZGVyITogUGx1Z2luTG9hZGVyXHJcbiAgY29uZmlnUGF0aDogc3RyaW5nXHJcbiAgYmFzZURpciE6IHN0cmluZ1xyXG4gIGhlbHBlciE6IElIZWxwZXJcclxuICBsb2c6IExvZ2dlclxyXG4gIGNtZDogQ29tbWFuZGVyXHJcbiAgb3V0cHV0OiBJSW1nSW5mb1tdXHJcbiAgaW5wdXQ6IGFueVtdXHJcbiAgcmF3SW5wdXQ6IGFueVtdXHJcbiAgcGx1Z2luSGFuZGxlcjogUGx1Z2luSGFuZGxlclxyXG4gIC8qKlxyXG4gICAqIEBkZXByZWNhdGVkIHdpbGwgYmUgcmVtb3ZlZCBpbiB2MS41LjArXHJcbiAgICpcclxuICAgKiB1c2UgcmVxdWVzdCBpbnN0ZWFkXHJcbiAgICovXHJcbiAgUmVxdWVzdCE6IFJlcXVlc3RcclxuICBpMThuITogSUkxOG5NYW5hZ2VyXHJcbiAgVkVSU0lPTjogc3RyaW5nID0gcHJvY2Vzcy5lbnYuUElDR09fVkVSU0lPTlxyXG4gIEdVSV9WRVJTSU9OPzogc3RyaW5nXHJcblxyXG4gIGdldCBwbHVnaW5Mb2FkZXIgKCk6IElQbHVnaW5Mb2FkZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BsdWdpbkxvYWRlclxyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IgKGNvbmZpZ1BhdGg6IHN0cmluZyA9ICcnKSB7XHJcbiAgICBzdXBlcigpXHJcbiAgICB0aGlzLmNvbmZpZ1BhdGggPSBjb25maWdQYXRoXHJcbiAgICB0aGlzLm91dHB1dCA9IFtdXHJcbiAgICB0aGlzLmlucHV0ID0gW11cclxuICAgIHRoaXMucmF3SW5wdXQgPSBbXVxyXG4gICAgdGhpcy5oZWxwZXIgPSB7XHJcbiAgICAgIHRyYW5zZm9ybWVyOiBuZXcgTGlmZWN5Y2xlUGx1Z2lucygndHJhbnNmb3JtZXInKSxcclxuICAgICAgdXBsb2FkZXI6IG5ldyBMaWZlY3ljbGVQbHVnaW5zKCd1cGxvYWRlcicpLFxyXG4gICAgICBiZWZvcmVUcmFuc2Zvcm1QbHVnaW5zOiBuZXcgTGlmZWN5Y2xlUGx1Z2lucygnYmVmb3JlVHJhbnNmb3JtUGx1Z2lucycpLFxyXG4gICAgICBiZWZvcmVVcGxvYWRQbHVnaW5zOiBuZXcgTGlmZWN5Y2xlUGx1Z2lucygnYmVmb3JlVXBsb2FkUGx1Z2lucycpLFxyXG4gICAgICBhZnRlclVwbG9hZFBsdWdpbnM6IG5ldyBMaWZlY3ljbGVQbHVnaW5zKCdhZnRlclVwbG9hZFBsdWdpbnMnKVxyXG4gICAgfVxyXG4gICAgdGhpcy5pbml0Q29uZmlnUGF0aCgpXHJcbiAgICB0aGlzLmxvZyA9IG5ldyBMb2dnZXIodGhpcylcclxuICAgIHRoaXMuY21kID0gbmV3IENvbW1hbmRlcih0aGlzKVxyXG4gICAgdGhpcy5wbHVnaW5IYW5kbGVyID0gbmV3IFBsdWdpbkhhbmRsZXIodGhpcylcclxuICAgIHRoaXMuaW5pdENvbmZpZygpXHJcbiAgICB0aGlzLmluaXQoKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0Q29uZmlnUGF0aCAoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jb25maWdQYXRoID09PSAnJykge1xyXG4gICAgICB0aGlzLmNvbmZpZ1BhdGggPSBob21lZGlyKCkgKyAnLy5waWNsaXN0L2NvbmZpZy5qc29uJ1xyXG4gICAgfVxyXG4gICAgaWYgKHBhdGguZXh0bmFtZSh0aGlzLmNvbmZpZ1BhdGgpLnRvVXBwZXJDYXNlKCkgIT09ICcuSlNPTicpIHtcclxuICAgICAgdGhpcy5jb25maWdQYXRoID0gJydcclxuICAgICAgdGhyb3cgRXJyb3IoJ1RoZSBjb25maWd1cmF0aW9uIGZpbGUgb25seSBzdXBwb3J0cyBKU09OIGZvcm1hdC4nKVxyXG4gICAgfVxyXG4gICAgdGhpcy5iYXNlRGlyID0gcGF0aC5kaXJuYW1lKHRoaXMuY29uZmlnUGF0aClcclxuICAgIGNvbnN0IGV4aXN0ID0gZnMucGF0aEV4aXN0c1N5bmModGhpcy5jb25maWdQYXRoKVxyXG4gICAgaWYgKCFleGlzdCkge1xyXG4gICAgICBmcy5lbnN1cmVGaWxlU3luYyhgJHt0aGlzLmNvbmZpZ1BhdGh9YClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdENvbmZpZyAoKTogdm9pZCB7XHJcbiAgICB0aGlzLmRiID0gbmV3IERCKHRoaXMpXHJcbiAgICB0aGlzLl9jb25maWcgPSB0aGlzLmRiLnJlYWQodHJ1ZSkgYXMgSUNvbmZpZ1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0ICgpOiB2b2lkIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIC8vIGluaXQgMThuIGF0IGZpcnN0XHJcbiAgICAgIHRoaXMuaTE4biA9IG5ldyBJMThuTWFuYWdlcih0aGlzKVxyXG4gICAgICB0aGlzLlJlcXVlc3QgPSBuZXcgUmVxdWVzdCh0aGlzKVxyXG4gICAgICB0aGlzLl9wbHVnaW5Mb2FkZXIgPSBuZXcgUGx1Z2luTG9hZGVyKHRoaXMpXHJcbiAgICAgIC8vIGxvYWQgc2VsZiBwbHVnaW5zXHJcbiAgICAgIHNldEN1cnJlbnRQbHVnaW5OYW1lKCdwaWNnbycpXHJcbiAgICAgIHVwbG9hZGVycyh0aGlzKS5yZWdpc3Rlcih0aGlzKVxyXG4gICAgICB0cmFuc2Zvcm1lcnModGhpcykucmVnaXN0ZXIodGhpcylcclxuICAgICAgc2V0Q3VycmVudFBsdWdpbk5hbWUoJycpXHJcbiAgICAgIC8vIGxvYWQgdGhpcmQtcGFydHkgcGx1Z2luc1xyXG4gICAgICB0aGlzLl9wbHVnaW5Mb2FkZXIubG9hZCgpXHJcbiAgICAgIHRoaXMubGlmZWN5Y2xlID0gbmV3IExpZmVjeWNsZSh0aGlzKVxyXG4gICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgIHRoaXMuZW1pdChJQnVpbGRJbkV2ZW50LlVQTE9BRF9QUk9HUkVTUywgLTEpXHJcbiAgICAgIHRoaXMubG9nLmVycm9yKGUpXHJcbiAgICAgIHRocm93IGVcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGVhc2lseSBtYW5udWFsbHkgbG9hZCBhIHBsdWdpblxyXG4gICAqIGlmIHByb3ZpZGUgcGx1Z2luIG5hbWUsIHdpbGwgcmVnaXN0ZXIgcGx1Z2luIGJ5IG5hbWVcclxuICAgKiBvciBqdXN0IGluc3RhbnRpYXRlIGEgcGx1Z2luXHJcbiAgICovXHJcbiAgdXNlIChwbHVnaW46IElQaWNHb1BsdWdpbiwgbmFtZT86IHN0cmluZyk6IElQaWNHb1BsdWdpbkludGVyZmFjZSB7XHJcbiAgICBpZiAobmFtZSkge1xyXG4gICAgICB0aGlzLnBsdWdpbkxvYWRlci5yZWdpc3RlclBsdWdpbihuYW1lLCBwbHVnaW4pXHJcbiAgICAgIHJldHVybiB0aGlzLnBsdWdpbkxvYWRlci5nZXRQbHVnaW4obmFtZSkhXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBwbHVnaW5JbnN0YW5jZSA9IHBsdWdpbih0aGlzKVxyXG4gICAgICByZXR1cm4gcGx1Z2luSW5zdGFuY2VcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyQ29tbWFuZHMgKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY29uZmlnUGF0aCAhPT0gJycpIHtcclxuICAgICAgdGhpcy5jbWQuaW5pdCgpXHJcbiAgICAgIHRoaXMuY21kLmxvYWRDb21tYW5kcygpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRDb25maWc8VD4gKG5hbWU/OiBzdHJpbmcpOiBUIHtcclxuICAgIGlmICghbmFtZSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5fY29uZmlnIGFzIHVua25vd24gYXMgVFxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGdldCh0aGlzLl9jb25maWcsIG5hbWUpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzYXZlQ29uZmlnIChjb25maWc6IElTdHJpbmdLZXlNYXA8YW55Pik6IHZvaWQge1xyXG4gICAgaWYgKCFpc0lucHV0Q29uZmlnVmFsaWQoY29uZmlnKSkge1xyXG4gICAgICB0aGlzLmxvZy53YXJuKCd0aGUgZm9ybWF0IG9mIGNvbmZpZyBpcyBpbnZhbGlkLCBwbGVhc2UgcHJvdmlkZSBvYmplY3QnKVxyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIHRoaXMuc2V0Q29uZmlnKGNvbmZpZylcclxuICAgIHRoaXMuZGIuc2F2ZUNvbmZpZyhjb25maWcpXHJcbiAgfVxyXG5cclxuICByZW1vdmVDb25maWcgKGtleTogc3RyaW5nLCBwcm9wTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAoIWtleSB8fCAhcHJvcE5hbWUpIHJldHVyblxyXG4gICAgaWYgKGlzQ29uZmlnS2V5SW5CbGFja0xpc3Qoa2V5KSkge1xyXG4gICAgICB0aGlzLmxvZy53YXJuKGB0aGUgY29uZmlnLiR7a2V5fSBjYW4ndCBiZSByZW1vdmVkYClcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICB0aGlzLnVuc2V0Q29uZmlnKGtleSwgcHJvcE5hbWUpXHJcbiAgICB0aGlzLmRiLnVuc2V0KGtleSwgcHJvcE5hbWUpXHJcbiAgfVxyXG5cclxuICBzZXRDb25maWcgKGNvbmZpZzogSVN0cmluZ0tleU1hcDxhbnk+KTogdm9pZCB7XHJcbiAgICBpZiAoIWlzSW5wdXRDb25maWdWYWxpZChjb25maWcpKSB7XHJcbiAgICAgIHRoaXMubG9nLndhcm4oJ3RoZSBmb3JtYXQgb2YgY29uZmlnIGlzIGludmFsaWQsIHBsZWFzZSBwcm92aWRlIG9iamVjdCcpXHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgT2JqZWN0LmtleXMoY29uZmlnKS5mb3JFYWNoKChuYW1lOiBzdHJpbmcpID0+IHtcclxuICAgICAgaWYgKGlzQ29uZmlnS2V5SW5CbGFja0xpc3QobmFtZSkpIHtcclxuICAgICAgICB0aGlzLmxvZy53YXJuKGB0aGUgY29uZmlnLiR7bmFtZX0gY2FuJ3QgYmUgbW9kaWZpZWRgKVxyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZHluYW1pYy1kZWxldGVcclxuICAgICAgICBkZWxldGUgY29uZmlnW25hbWVdXHJcbiAgICAgIH1cclxuICAgICAgc2V0KHRoaXMuX2NvbmZpZywgbmFtZSwgY29uZmlnW25hbWVdKVxyXG4gICAgICBldmVudEJ1cy5lbWl0KElCdXNFdmVudC5DT05GSUdfQ0hBTkdFLCB7XHJcbiAgICAgICAgY29uZmlnTmFtZTogbmFtZSxcclxuICAgICAgICB2YWx1ZTogY29uZmlnW25hbWVdXHJcbiAgICAgIH0pXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgdW5zZXRDb25maWcgKGtleTogc3RyaW5nLCBwcm9wTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAoIWtleSB8fCAhcHJvcE5hbWUpIHJldHVyblxyXG4gICAgaWYgKGlzQ29uZmlnS2V5SW5CbGFja0xpc3Qoa2V5KSkge1xyXG4gICAgICB0aGlzLmxvZy53YXJuKGB0aGUgY29uZmlnLiR7a2V5fSBjYW4ndCBiZSB1bnNldGApXHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgdW5zZXQodGhpcy5nZXRDb25maWcoa2V5KSwgcHJvcE5hbWUpXHJcbiAgfVxyXG5cclxuICBnZXQgcmVxdWVzdCAoKTogSVJlcXVlc3RbJ3JlcXVlc3QnXSB7XHJcbiAgICByZXR1cm4gdGhpcy5SZXF1ZXN0LnJlcXVlc3QuYmluZCh0aGlzLlJlcXVlc3QpXHJcbiAgfVxyXG5cclxuICBhc3luYyB1cGxvYWQgKGlucHV0PzogYW55W10pOiBQcm9taXNlPElJbWdJbmZvW10gfCBFcnJvcj4ge1xyXG4gICAgaWYgKHRoaXMuY29uZmlnUGF0aCA9PT0gJycpIHtcclxuICAgICAgdGhpcy5sb2cuZXJyb3IoJ1RoZSBjb25maWd1cmF0aW9uIGZpbGUgb25seSBzdXBwb3J0cyBKU09OIGZvcm1hdC4nKVxyXG4gICAgICByZXR1cm4gW11cclxuICAgIH1cclxuICAgIC8vIHVwbG9hZCBmcm9tIGNsaXBib2FyZFxyXG4gICAgaWYgKGlucHV0ID09PSB1bmRlZmluZWQgfHwgaW5wdXQubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgeyBpbWdQYXRoLCBzaG91bGRLZWVwQWZ0ZXJVcGxvYWRpbmcgfSA9IGF3YWl0IGdldENsaXBib2FyZEltYWdlKHRoaXMpXHJcbiAgICAgICAgaWYgKGltZ1BhdGggPT09ICdubyBpbWFnZScpIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaW1hZ2Ugbm90IGZvdW5kIGluIGNsaXBib2FyZCcpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMub25jZShJQnVpbGRJbkV2ZW50LkZBSUxFRCwgKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXNob3VsZEtlZXBBZnRlclVwbG9hZGluZykge1xyXG4gICAgICAgICAgICAgIC8vIOWIoOmZpCBwaWNnbyDnlJ/miJDnmoTlm77niYfmlofku7bvvIzkvovlpoIgYH4vLnBpY2dvLzIwMjAwNjIxMjA1NzIwLnBuZ2BcclxuICAgICAgICAgICAgICBmcy5yZW1vdmUoaW1nUGF0aCkuY2F0Y2goKGUpID0+IHsgdGhpcy5sb2cuZXJyb3IoZSkgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIHRoaXMub25jZSgnZmluaXNoZWQnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghc2hvdWxkS2VlcEFmdGVyVXBsb2FkaW5nKSB7XHJcbiAgICAgICAgICAgICAgZnMucmVtb3ZlKGltZ1BhdGgpLmNhdGNoKChlKSA9PiB7IHRoaXMubG9nLmVycm9yKGUpIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICBjb25zdCB7IG91dHB1dCB9ID0gYXdhaXQgdGhpcy5saWZlY3ljbGUuc3RhcnQoW2ltZ1BhdGhdKVxyXG4gICAgICAgICAgcmV0dXJuIG91dHB1dFxyXG4gICAgICAgIH1cclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIHRoaXMuZW1pdChJQnVpbGRJbkV2ZW50LkZBSUxFRCwgZSlcclxuICAgICAgICB0aHJvdyBlXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIHVwbG9hZCBmcm9tIHBhdGhcclxuICAgICAgY29uc3QgeyBvdXRwdXQgfSA9IGF3YWl0IHRoaXMubGlmZWN5Y2xlLnN0YXJ0KGlucHV0KVxyXG4gICAgICByZXR1cm4gb3V0cHV0XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7IHR5cGUgSVBpY0dvLCB0eXBlIElQaWNHb1BsdWdpbiB9IGZyb20gJy4uLy4uL3R5cGVzJ1xyXG5pbXBvcnQgSW1nRnJvbVBhdGggZnJvbSAnLi9wYXRoJ1xyXG5pbXBvcnQgSW1nRnJvbUJhc2U2NCBmcm9tICcuL2Jhc2U2NCdcclxuXHJcbmNvbnN0IGJ1aWxkSW5UcmFuc2Zvcm1lcnM6IElQaWNHb1BsdWdpbiA9ICgpID0+IHtcclxuICByZXR1cm4ge1xyXG4gICAgcmVnaXN0ZXIgKGN0eDogSVBpY0dvKSB7XHJcbiAgICAgIGN0eC5oZWxwZXIudHJhbnNmb3JtZXIucmVnaXN0ZXIoJ3BhdGgnLCBJbWdGcm9tUGF0aClcclxuICAgICAgY3R4LmhlbHBlci50cmFuc2Zvcm1lci5yZWdpc3RlcignYmFzZTY0JywgSW1nRnJvbUJhc2U2NClcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGJ1aWxkSW5UcmFuc2Zvcm1lcnNcclxuIl0sIm5hbWVzIjpbInBsdWdpbkhhbmRsZXIiLCJoYW5kbGUiLCJjdHgiLCJjbWQiLCJwcm9ncmFtIiwiY29tbWFuZCIsImRlc2NyaXB0aW9uIiwiYWxpYXMiLCJvcHRpb24iLCJhY3Rpb24iLCJwbHVnaW5zIiwicHJveHkiLCJyZWdpc3RyeSIsIm9wdGlvbnMiLCJpbnN0YWxsIiwiY2F0Y2giLCJlIiwibG9nIiwiZXJyb3IiLCJ1bmluc3RhbGwiLCJ1cGRhdGUiLCJjb25maWciLCJyYW5kb21TdHJpbmdHZW5lcmF0b3IiLCJsZW5ndGgiLCJjaGFycyIsIkFycmF5IiwiZnJvbSIsIm1hcCIsImNoYXJBdCIsIk1hdGgiLCJmbG9vciIsInJhbmRvbSIsImpvaW4iLCJyZW5hbWVGaWxlTmFtZVdpdGhDdXN0b21TdHJpbmciLCJvbGROYW1lIiwiY3VzdG9tRm9ybWF0IiwiYWZmaXhGaWxlTmFtZSIsImNvbnZlcnNpb25NYXAiLCJEYXRlIiwiZ2V0RnVsbFllYXIiLCJ0b1N0cmluZyIsInNsaWNlIiwiZ2V0TW9udGgiLCJnZXREYXRlIiwiZ2V0SG91cnMiLCJnZXRNaW51dGVzIiwiZ2V0U2Vjb25kcyIsImNyeXB0byIsImNyZWF0ZUhhc2giLCJwYXRoIiwiYmFzZW5hbWUiLCJleHRuYW1lIiwiZGlnZXN0IiwidXVpZHY0IiwidjQiLCJyZXBsYWNlIiwibm93IiwidW5kZWZpbmVkIiwiT2JqZWN0Iiwia2V5cyIsInNvbWUiLCJpdGVtIiwiaW5jbHVkZXMiLCJleHQiLCJuZXdOYW1lIiwicmVkdWNlIiwiYWNjIiwiY3VyIiwiUmVnRXhwIiwiX3Jlc3VsdCIsImtleSIsImNvdW50IiwibWF4IiwiZGlybmFtZSIsInNwbGl0Iiwic2VwIiwiYSIsImIiLCJpc1VybCIsInVybCIsInRlc3QiLCJpc1VybEVuY29kZSIsImRlY29kZVVSSSIsImhhbmRsZVVybEVuY29kZSIsImVuY29kZVVSSSIsImdldEltYWdlU2l6ZSIsImZpbGUiLCJ3aWR0aCIsImhlaWdodCIsInR5cGUiLCJpbWFnZVNpemUiLCJyZWFsIiwiZ2V0RlNGaWxlIiwiYXN5bmMiLCJmaWxlUGF0aCIsImZpbGVOYW1lIiwiYnVmZmVyIiwiZnMiLCJyZWFkRmlsZSIsInN1Y2Nlc3MiLCJfYSIsInJlYXNvbiIsImdldFVSTEZpbGUiLCJ0aW1lb3V0SWQiLCJyZXF1ZXN0Rm4iLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInJlcyIsInJlcXVlc3QiLCJtZXRob2QiLCJyZXNvbHZlV2l0aEZ1bGxSZXNwb25zZSIsInJlc3BvbnNlVHlwZSIsInRoZW4iLCJyZXNwIiwiZGF0YSIsImNsZWFyVGltZW91dCIsInVybFBhdGgiLCJVUkwiLCJwYXRobmFtZSIsInNlYXJjaFBhcmFtcyIsImdldCIsInN0YXJ0c1dpdGgiLCJtZXNzYWdlIiwidGltZW91dFByb21pc2UiLCJzZXRUaW1lb3V0IiwicmFjZSIsImdldFBsdWdpbk5hbWVUeXBlIiwibmFtZSIsImlzU2ltcGxlTmFtZSIsIm5hbWVPclBhdGgiLCJpc0Fic29sdXRlIiwicGx1Z2luUGF0aCIsInByb2Nlc3MiLCJjd2QiLCJleGlzdHNTeW5jIiwiaGFuZGxlQ29tcGxldGVQbHVnaW5OYW1lIiwic2NvcGUiLCJnZXRQcm9jZXNzUGx1Z2luTmFtZSIsImxvZ2dlciIsImNvbnNvbGUiLCJoYW5kbGVVbml4U3R5bGVQYXRoIiwid2FybiIsImdldE5vcm1hbFBsdWdpbk5hbWUiLCJyZW1vdmVQbHVnaW5WZXJzaW9uIiwicGFja2FnZUpTT05QYXRoIiwicG9zaXgiLCJwa2ciLCJyZWFkSlNPTlN5bmMiLCJwYXRoU3RyIiwicmVnIiwibWF0Y2hBcnIiLCJtYXRjaCIsImNvbmZpZ0JsYWNrTGlzdCIsImlzQ29uZmlnS2V5SW5CbGFja0xpc3QiLCJibGFja0l0ZW0iLCJpc0lucHV0Q29uZmlnVmFsaWQiLCJpc0FycmF5Iiwic2FmZVBhcnNlIiwic3RyIiwiSlNPTiIsInBhcnNlIiwiZm9yY2VOdW1iZXIiLCJudW0iLCJpc05hTiIsIk51bWJlciIsImlzRGV2IiwiZW52IiwiTk9ERV9FTlYiLCJkZWZhdWx0V2F0ZXJtYXJrSW1hZ2VQYXRoIiwiX19kaXJuYW1lIiwiQWRkV2F0ZXJtYXJrIiwiaW1nIiwid2F0ZXJtYXJrVHlwZSIsImRlZmF1bHRXYXRlcm1hcmtGb250UGF0aCIsImlzRnVsbFNjcmVlbldhdGVybWFyayIsIndhdGVybWFya0RlZ3JlZSIsInRleHQiLCJ3YXRlcm1hcmtGb250UGF0aCIsIndhdGVybWFya1NjYWxlUmF0aW8iLCJ3YXRlcm1hcmtDb2xvciIsIndhdGVybWFya0ltYWdlUGF0aCIsInBvc2l0aW9uIiwiaW1hZ2UiLCJzaGFycCIsImltZ1dpZHRoIiwibWV0YWRhdGEiLCJ3YXRlcm1hcmsiLCJ0b0J1ZmZlciIsImNvbG9yIiwiZm9udEZhbWlseSIsImFuY2hvciIsImF0dHJpYnV0ZXMiLCJmaWxsIiwidGV4dFNWRyIsIlRleHRUb1NWRyIsImxvYWRTeW5jIiwiZ2V0U1ZHIiwiQnVmZmVyIiwidGV4dDJTVkciLCJ3YXRlcm1hcmtXaWR0aCIsIndhdGVybWFya0hlaWdodCIsImdldFNpemUiLCJ3YXRlcm1hcmtSZXNpemVXaWR0aCIsIndhdGVybWFya1Jlc2l6ZUhlaWdodCIsInJlc2l6ZSIsImZpdCIsInJvdGF0ZSIsImJhY2tncm91bmQiLCJyIiwiZyIsImFscGhhIiwiY3JlYXRlV2F0ZXJtYXJrIiwiY29tcG9zaXRlIiwiaW5wdXQiLCJncmF2aXR5IiwidGlsZSIsInZhbGlkUGFyYW0iLCJwYXJhbXMiLCJldmVyeSIsInBhcmFtIiwiYXZhaWxhYmxlQ29udmVydEZvcm1hdExpc3QiLCJpbWFnZUV4dExpc3QiLCJpbWFnZUFkZFdhdGVyTWFyayIsIndhdGVybWFya1RleHQiLCJ3YXRlcm1hcmtQb3NpdGlvbiIsImZvcm1hdE9wdGlvbnMiLCJxdWFsaXR5IiwiaXNDb252ZXJ0IiwiY29udmVydEZvcm1hdCIsImlzUmVTaXplIiwicmVTaXplSGVpZ2h0IiwicmVTaXplV2lkdGgiLCJza2lwUmVTaXplT2ZTbWFsbEltZyIsImlzUmVTaXplQnlQZXJjZW50IiwicmVTaXplUGVyY2VudCIsImlzUm90YXRlIiwicm90YXRlRGVncmVlIiwicGljQmVkIiwiaW1hZ2VQcm9jZXNzIiwicmF3Rm9ybWF0IiwidG9Mb3dlckNhc2UiLCJpbWFnZVdpZHRoIiwiaW1hZ2VIZWlnaHQiLCJyb3VuZCIsInNjYWxlUmF0aW8iLCJuZXdGb3JtYXQiLCJ0b0Zvcm1hdCIsImZvcm1hdCIsImltYWdlRm9ybWF0TGlzdCIsIm5lZWRBZGRXYXRlcm1hcmsiLCJ3YXRlcm1hcmtPcHRpb25zIiwiZmlsZUV4dCIsImlzQWRkV2F0ZXJtYXJrIiwibmVlZENvbXByZXNzIiwiY29tcHJlc3NPcHRpb25zIiwicmVtb3ZlRXhpZiIsInVwbG9hZCIsImFyZ3VtZW50cyIsImlucHV0TGlzdCIsImZpbHRlciIsImV4aXN0IiwiY29tcHJlc3MiLCJ1c2VyQ29uZmlnIiwiZ2V0Q29uZmlnIiwiaTE4biIsInRyYW5zbGF0ZSIsInJlcXVpcmVkIiwiZGVmYXVsdCIsImNob2ljZXMiLCJpc1JlbW92ZUV4aWYiLCJyZW5hbWUiLCJlbmFibGUiLCJoYW5kbGVDb25maWciLCJwcm9tcHRzIiwibW9kdWxlIiwiYW5zd2VyIiwiaW5xdWlyZXIiLCJwcm9tcHQiLCJjb25maWdOYW1lIiwic2F2ZUNvbmZpZyIsInNldHRpbmciLCJidWlsZGluIiwiaGVscGVyIiwiZ2V0SWRMaXN0IiwicGx1Z2luTG9hZGVyIiwiZ2V0UGx1Z2luIiwiZ2V0RnVsbExpc3QiLCJfYiIsInBsdWdpbiIsImluZm8iLCJhcmd2IiwidXNlIiwidXBsb2FkZXIiLCJ0cmFuc2Zvcm1lciIsInB1c2giLCJmb3JFYWNoIiwicGljZ29QbHVnaW5zIiwic2V0Q29uZmlnIiwiZ2VuZXJhdGUiLCJvcHRzIiwiZ2V0T3B0aW9ucyIsInRtcCIsInNvdXJjZSIsImFuc3dlcnMiLCJfZmlsZXMiLCJnbG9iYnkiLCJkb3QiLCJnbG9iIiwiZmlsdGVycyIsImZpbGVzIiwicmVuZGVyIiwid3JpdGVGaWxlVHJlZSIsImRlc3QiLCJjb21wbGV0ZSIsImNvbXBsZXRlTWVzc2FnZSIsImV4cCIsImZuIiwiRnVuY3Rpb24iLCJzdHJpbmdpZnkiLCJ0ZW1wbGF0ZVBhdGgiLCJvcHRpb25zUGF0aCIsInJlcXVpcmUiLCJmaWxlVHJlZSIsInJlYWRGaWxlU3luYyIsImNvbnRlbnQiLCJlanMiLCJpc0J1ZmZlciIsImRpciIsImVuc3VyZURpclN5bmMiLCJ3cml0ZUZpbGVTeW5jIiwicnVuIiwib2ZmbGluZSIsInRlbXBsYXRlIiwiaGFzU2xhc2giLCJkb3dubG9hZEFuZEdlbmVyYXRlIiwicm0iLCJzeW5jIiwiZG93bmxvYWQiLCJjbG9uZSIsImVyciIsImluaXQiLCJwcm9qZWN0IiwiaW5QbGFjZSIsImhvbWVkaXIiLCJvayIsIm9uIiwiY2hhbGsiLCJncmF5IiwibGFuZyIsImxpc3QiLCJnZXRMYW5ndWFnZUxpc3QiLCJzZXRMYW5ndWFnZSIsIkxpZmVjeWNsZVBsdWdpbnMiLCJjb25zdHJ1Y3RvciIsInRoaXMiLCJNYXAiLCJwbHVnaW5JZE1hcCIsInJlZ2lzdGVyIiwiaWQiLCJUeXBlRXJyb3IiLCJoYXMiLCJzZXQiLCJjdXJyZW50UGx1Z2luIiwidW5yZWdpc3RlciIsInBsdWdpbk5hbWUiLCJwbHVnaW5MaXN0IiwiZGVsZXRlIiwiZ2V0TmFtZSIsImdldExpc3QiLCJ2YWx1ZXMiLCJzZXRDdXJyZW50UGx1Z2luTmFtZSIsIkNvbW1hbmRlciIsIkNvbW1hbmQiLCJ2ZXJzaW9uIiwiZGVidWciLCJzaWxlbnQiLCJhcmdzIiwiZXhpdCIsImN1cnJlbnRQbHVnaW5OYW1lIiwibG9hZENvbW1hbmRzIiwiSUxvZ1R5cGUiLCJJQnVpbGRJbkV2ZW50IiwiSUJ1c0V2ZW50IiwiTG9nZ2VyIiwibGV2ZWwiLCJoYW5kbGVMb2ciLCJtc2ciLCJsb2dIZWFkZXIiLCJ0b1VwcGVyQ2FzZSIsImxvZ0xldmVsIiwibG9nUGF0aCIsImJhc2VEaXIiLCJyZXN1bHQiLCJjaGVja0xvZ0ZpbGVJc0xhcmdlIiwiaXNMYXJnZSIsIndhcm5pbmdNc2ciLCJ5ZWxsb3ciLCJyZWNyZWF0ZUxvZ0ZpbGUiLCJ1bnNoaWZ0IiwiaGFuZGxlV3JpdGVMb2ciLCJsb2dGaWxlU2l6ZSIsInN0YXRTeW5jIiwic2l6ZSIsImxvZ0ZpbGVTaXplTGltaXQiLCJ1bmxpbmtTeW5jIiwiY3JlYXRlRmlsZVN5bmMiLCJjaGVja0xvZ0xldmVsIiwiZGF5anMiLCJFcnJvciIsInV0aWwiLCJzdGFjayIsImFwcGVuZEZpbGVTeW5jIiwiTGlmZWN5Y2xlIiwiRXZlbnRFbWl0dGVyIiwic3VwZXIiLCJ0dGZMaW5rIiwidGVtcEZpbGVQYXRoIiwiaW1nRmxlUGF0aCIsImVtcHR5RGlyU3luYyIsInR0ZlBhdGgiLCJvdXRwdXREaXIiLCJta2RpclN5bmMiLCJyZWN1cnNpdmUiLCJheGlvcyIsImNvbmZpZ1BhdGgiLCJvdXRwdXQiLCJyYXdJbnB1dCIsIlJlcXVlc3QiLCJWRVJTSU9OIiwiR1VJX1ZFUlNJT04iLCJiaW5kIiwicmVtb3ZlQ29uZmlnIiwidW5zZXRDb25maWciLCJhZGRMaXN0ZW5lciIsIm9uY2UiLCJyZW1vdmVMaXN0ZW5lciIsIm9mZiIsInJlbW92ZUFsbExpc3RlbmVycyIsInNldE1heExpc3RlbmVycyIsImdldE1heExpc3RlbmVycyIsImxpc3RlbmVycyIsInJhd0xpc3RlbmVycyIsImVtaXQiLCJsaXN0ZW5lckNvdW50IiwicHJlcGVuZExpc3RlbmVyIiwicHJlcGVuZE9uY2VMaXN0ZW5lciIsImV2ZW50TmFtZXMiLCJjcmVhdGVDb250ZXh0IiwicmF3SW5wdXRQYXRoIiwiY2xvbmVEZWVwIiwid2F0ZXJtYXJrTXNnIiwiY29tcHJlc3NNc2ciLCJhbGxTZXR0bGVkIiwiaW5kZXgiLCJ0cmFuc2Zvcm1lZEJ1ZmZlciIsImRvd25sb2FkVFRGIiwiX2MiLCJfZCIsIm5ld0V4dCIsIl9lIiwiX2YiLCJ0ZW1wRmlsZSIsImdldFRpbWUiLCJoZWljQnVmZmVyIiwiaGVpY1Jlc3VsdCIsImhlaWNDb252ZXJ0IiwidGVtcEhlaWNDb252ZXJ0RmlsZSIsIl9nIiwiYmVmb3JlVHJhbnNmb3JtIiwiZG9UcmFuc2Zvcm0iLCJyZW5hbWVDb25maWciLCJiZWZvcmVVcGxvYWQiLCJkb1VwbG9hZCIsImFmdGVyVXBsb2FkIiwiRkFJTEVEIiwiVVBMT0FEX1BST0dSRVNTIiwiQkVGT1JFX1RSQU5TRk9STSIsImhhbmRsZVBsdWdpbnMiLCJiZWZvcmVUcmFuc2Zvcm1QbHVnaW5zIiwiY3VycmVudFRyYW5zZm9ybWVyIiwiQkVGT1JFX1VQTE9BRCIsImJlZm9yZVVwbG9hZFBsdWdpbnMiLCJvdXRwdXRJbWciLCJBRlRFUl9VUExPQUQiLCJhZnRlclVwbG9hZFBsdWdpbnMiLCJpc0VuY29kZU91dHB1dFVSTCIsImkiLCJpbWdVcmwiLCJiYXNlNjRJbWFnZSIsIkZJTklTSEVEIiwibGlmZUN5Y2xlUGx1Z2lucyIsInBsdWdpbk5hbWVzIiwibGlmZUN5Y2xlTmFtZSIsImFsbCIsInBvc3RPcHRpb25zIiwiYXBpVG9rZW4iLCJiYWNrdXBEb21haW4iLCJoZWFkZXJzIiwiY29udGVudFR5cGUiLCJBdXRob3JpemF0aW9uIiwiZm9ybURhdGEiLCJzbWZpbGUiLCJ2YWx1ZSIsImZpbGVuYW1lIiwic3NsIiwic21tc0NvbmZpZyIsImltZ0xpc3QiLCJwb3N0Q29uZmlnIiwidG9rZW4iLCJib2R5IiwiY29kZSIsImhhc2giLCJpbWFnZXMiLCJOT1RJRklDQVRJT04iLCJ0aXRsZSIsInByZWZpeCIsImdlbmVyYXRlU2lnbmF0dXJlIiwic2VjcmV0SWQiLCJzZWNyZXRLZXkiLCJhcHBJZCIsImJ1Y2tldCIsInNpZ25hdHVyZSIsInNpZ25UaW1lIiwidG9kYXkiLCJzaWduS2V5IiwiY3JlYXRlSG1hYyIsImVuZHBvaW50IiwiYXJlYSIsImh0dHBTdHJpbmciLCJzdHJpbmdUb1NpZ24iLCJjdXJyZW50IiwibXVsdGlTaWduYXR1cmUiLCJzaWduSGV4S2V5IiwidGVtcFN0cmluZyIsImNvbmNhdCIsImVuY29kZVVSSUNvbXBvbmVudCIsIkhvc3QiLCJtaW1lIiwibG9va3VwIiwib3AiLCJmaWxlY29udGVudCIsInRjWXVuT3B0aW9ucyIsImN1c3RvbVVybCIsInVzZVY0Iiwic3RhdHVzQ29kZSIsIm9wdGlvblVybCIsInNsaW0iLCJzb3VyY2VfdXJsIiwiY29uZmlybVRleHQiLCJjYW5jZWxUZXh0IiwidGlwcyIsInJlcG8iLCJqc29uIiwiYnJhbmNoIiwiZ2l0aHViT3B0aW9ucyIsInVwbG9hZFBhdGgiLCJkb3dubG9hZF91cmwiLCJzaGEiLCJpbWdCYXNlNjQiLCJzZWxlY3RBcmVhIiwiZ2V0VG9rZW4iLCJxaW5pdU9wdGlvbnMiLCJhY2Nlc3NLZXkiLCJtYWMiLCJxaW5pdSIsImF1dGgiLCJNYWMiLCJycyIsIlB1dFBvbGljeSIsInVwbG9hZFRva2VuIiwiYmFzZVVybCIsInVybE9wdGlvbnMiLCJyZXNwb25zZSIsImNsaWVudElkIiwidXNlcm5hbWUiLCJhY2Nlc3NUb2tlbiIsImZvcm1hdEFjY2Vzc1Rva2VuIiwiYWxidW0iLCJhdXRob3JpemF0aW9uIiwicmVxdWVzdE9wdGlvbnMiLCJpbml0UGFnZXMiLCJhbGJ1bUhhc2giLCJnZXRBbGJ1bUhhc2hPcHRpb25zIiwidGltZW91dCIsImFsYnVtTGlzdCIsImltZ3VyT3B0aW9ucyIsImxpbmsiLCJkZWxldGVoYXNoIiwiZGF0ZSIsInRvVVRDU3RyaW5nIiwic2lnblN0cmluZyIsImFjY2Vzc0tleVNlY3JldCIsImFjY2Vzc0tleUlkIiwiYWxpWXVuT3B0aW9ucyIsIm9wZXJhdG9yIiwibWQ1UGFzc3dvcmQiLCJNRDUiLCJwYXNzd29yZCIsImdldEFudGlMZWVjaFBhcmFtIiwiYW50aUxlZWNoVG9rZW4iLCJleHBpcmVUaW1lIiwidXJpIiwiZXhwaXJlIiwicGFyc2VJbnQiLCJzdWJzdHJpbmciLCJ1cHl1bk9wdGlvbnMiLCJzdWZmaXgiLCJ1cHQiLCJwYXRocyIsImN1cnJlbnRQYXRoIiwicCIsImRpcm9wdGlvbnMiLCJob3N0Iiwid2ViZGF2cGxpc3RPcHRpb25zIiwic3NsRW5hYmxlZCIsIndlYnBhdGgiLCJpbWdUZW1wUGF0aCIsImdhbGxlcnlQYXRoIiwibG9jYWxDb25maWciLCJ3ZWJQYXRoIiwiY29weUZpbGVTeW5jIiwiU1NIQ2xpZW50IiwiX2lzQ29ubmVjdGVkIiwiaW5zdGFuY2UiLCJfaW5zdGFuY2UiLCJjbGllbnQiLCJfY2xpZW50IiwiTm9kZVNTSCIsImNoYW5nZVdpblN0eWxlUGF0aFRvVW5peCIsInByaXZhdGVLZXkiLCJwYXNzcGhyYXNlIiwibG9naW5JbmZvIiwicHJpdmF0ZUtleVBhdGgiLCJjb25uZWN0IiwicG9ydCIsImxvY2FsIiwicmVtb3RlIiwibWtkaXIiLCJwdXRGaWxlIiwiZmlsZU1vZGUiLCJzY3JpcHQiLCJleGVjIiwiZGlyUGF0aCIsImlzQ29ubmVjdGVkIiwiZGlyZWN0b3J5TW9kZSIsImRpck1vZGUiLCJkaXJzIiwidXNlciIsImdyb3VwIiwiX3VzZXIiLCJfZ3JvdXAiLCJleGVjQ29tbWFuZCIsImNsb3NlIiwiZGlzcG9zZSIsInNmdHBwbGlzdENvbmZpZyIsInVwbG9hZFRlbXBQYXRoIiwicmVtb3RlUGF0aCIsImZpbGVVc2VyIiwiY2hvd24iLCJtb3ZlU3luYyIsImJ1aWxkSW5VcGxvYWRlcnMiLCJhbGlZdW5VcGxvYWRlciIsInRjWXVuVXBsb2FkZXIiLCJTTU1TVXBsb2FkZXIiLCJnaXRodWJVcGxvYWRlciIsInFpbml1VXBsb2FkZXIiLCJpbWd1clVwbG9hZGVyIiwidXBZdW5VcGxvYWRlciIsIndlYmRhdnBsaXN0VXBsb2FkZXIiLCJsb2NhbFVwbG9hZGVyIiwic2Z0cFVwbG9hZGVyIiwiZ2V0SW1nU2l6ZSIsIkltZ0Zyb21QYXRoIiwicmVzdWx0cyIsImltZ1NpemUiLCJJbWdGcm9tQmFzZTY0IiwiUGx1Z2luTG9hZGVyIiwiZnVsbExpc3QiLCJTZXQiLCJwbHVnaW5NYXAiLCJwYWNrYWdlUGF0aCIsInJlcG9zaXRvcnkiLCJsaWNlbnNlIiwicmVzb2x2ZVBsdWdpbiIsImJhc2VkaXIiLCJsb2FkIiwicGx1Z2luRGlyIiwiZGVwcyIsImRlcGVuZGVuY2llcyIsImRldkRlcHMiLCJkZXZEZXBlbmRlbmNpZXMiLCJtb2R1bGVzIiwicmVnaXN0ZXJQbHVnaW4iLCJhZGQiLCJwbHVnaW5JbnRlcmZhY2UiLCJ1bnJlZ2lzdGVyUGx1Z2luIiwiaGFzUGx1Z2luIiwicGxhdGZvcm0yU2NyaXB0Q29udGVudCIsImRhcndpbiIsIndpbjMyIiwid2luMTAiLCJsaW51eCIsIndzbCIsInBsYXRmb3JtMlNjcmlwdEZpbGVuYW1lIiwiZ2V0Q2xpcGJvYXJkSW1hZ2UiLCJpbWFnZVBhdGgiLCJjcmVhdGVJbWFnZUZvbGRlciIsInBsYXRmb3JtIiwiaXNXc2wiLCJvcyIsInJlbGVhc2UiLCJnZXRDdXJyZW50UGxhdGZvcm0iLCJzY3JpcHRQYXRoIiwiZXhlY3V0aW9uIiwic3Bhd24iLCJzdGRvdXQiLCJ0cmltIiwiaW1nUGF0aCIsInNob3VsZEtlZXBBZnRlclVwbG9hZGluZyIsImV2ZW50QnVzIiwiaHR0cHNBZ2VudCIsImh0dHBzIiwiQWdlbnQiLCJtYXhWZXJzaW9uIiwibWluVmVyc2lvbiIsImFwcGVuZEZvcm1EYXRhIiwiZm9ybSIsImFwcGVuZCIsInJlc3BvbnNlSW50ZXJjZXB0b3IiLCJhc3NpZ24iLCJzdGF0dXMiLCJyZXNwb25zZUVycm9ySGFuZGxlciIsImVycm9yT2JqIiwiQ09ORklHX0NIQU5HRSIsImhhbmRsZVByb3h5IiwicHJveHlPcHRpb25zIiwiaG9zdG5hbWUiLCJwcm90b2NvbCIsIm1heEJvZHlMZW5ndGgiLCJJbmZpbml0eSIsIm1heENvbnRlbnRMZW5ndGgiLCJ0dW5uZWwiLCJodHRwc092ZXJIdHRwIiwiY3JlYXRlIiwiaW50ZXJjZXB0b3JzIiwib3B0IiwiX19pc09sZE9wdGlvbnMiLCJGb3JtRGF0YSIsImdldEhlYWRlcnMiLCJxcyIsInJlcXVlc3RJbnRlcmNlcHRvciIsIm9iaiIsIkNvbnRlbnRUeXBlIiwiREIiLCJkYiIsIkpTT05TdG9yZSIsInJlYWQiLCJmbHVzaCIsInVuc2V0IiwiUGx1Z2luSGFuZGxlciIsImluc3RhbGxlZFBsdWdpbnMiLCJwcm9jZXNzUGx1Z2lucyIsImhhbmRsZVBsdWdpbk5hbWVQcm9jZXNzIiwicGtnTmFtZSIsImZ1bGxOYW1lTGlzdCIsImZ1bGxOYW1lIiwicGtnTmFtZUxpc3QiLCJ3aGVyZSIsIm5wbSIsInBpcGUiLCJzdGRlcnIiLCJsYW5ndWFnZUxpc3QiLCJVUExPQURfRkFJTEVEIiwiQ0hFQ0tfU0VUVElOR1MiLCJDSEVDS19TRVRUSU5HU19BTkRfTkVUV09SSyIsIlVQTE9BRF9GQUlMRURfUkVBU09OIiwiU0VSVkVSX0VSUk9SIiwiQVVUSF9GQUlMRUQiLCJQSUNCRURfU01NUyIsIlBJQ0JFRF9TTU1TX1RPS0VOIiwiUElDQkVEX1NNTVNfQkFDS1VQX0RPTUFJTiIsIlBJQ0JFRF9TTU1TX01FU1NBR0VfQkFDS1VQX0RPTUFJTiIsIlBJQ0JFRF9MT0NBTCIsIlBJQ0JFRF9MT0NBTF9QQVRIIiwiUElDQkVEX0xPQ0FMX01FU1NBR0VfUEFUSCIsIlBJQ0JFRF9MT0NBTF9DVVNUT01VUkwiLCJQSUNCRURfTE9DQUxfTUVTU0FHRV9DVVNUT01VUkwiLCJQSUNCRURfTE9DQUxfV0VCUEFUSCIsIlBJQ0JFRF9MT0NBTF9NRVNTQUdFX1dFQlBBVEgiLCJQSUNCRURfQUxJQ0xPVUQiLCJQSUNCRURfQUxJQ0xPVURfQUNDRVNTS0VZSUQiLCJQSUNCRURfQUxJQ0xPVURfQUNDRVNTS0VZU0VDUkVUIiwiUElDQkVEX0FMSUNMT1VEX0JVQ0tFVCIsIlBJQ0JFRF9BTElDTE9VRF9BUkVBIiwiUElDQkVEX0FMSUNMT1VEX1BBVEgiLCJQSUNCRURfQUxJQ0xPVURfQ1VTVE9NVVJMIiwiUElDQkVEX0FMSUNMT1VEX09QVElPTlMiLCJQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9BUkVBIiwiUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfUEFUSCIsIlBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX09QVElPTlMiLCJQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9DVVNUT01VUkwiLCJQSUNCRURfVEVOQ0VOVENMT1VEIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9WRVJTSU9OIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9TRUNSRVRJRCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUS0VZIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9BUFBJRCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfQlVDS0VUIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9BUkVBIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9FTkRQT0lOVCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfUEFUSCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfT1BUSU9OUyIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfQ1VTVE9NVVJMIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FQUElEIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FSRUEiLCJQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfUEFUSCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9DVVNUT01VUkwiLCJQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfT1BUSU9OUyIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9FTkRQT0lOVCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTSIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9USVAiLCJQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fQ09ORklSTSIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9DQU5DRUwiLCJQSUNCRURfR0lUSFVCIiwiUElDQkVEX0dJVEhVQl9UT0tFTiIsIlBJQ0JFRF9HSVRIVUJfUkVQTyIsIlBJQ0JFRF9HSVRIVUJfUEFUSCIsIlBJQ0JFRF9HSVRIVUJfQlJBTkNIIiwiUElDQkVEX0dJVEhVQl9DVVNUT01VUkwiLCJQSUNCRURfR0lUSFVCX01FU1NBR0VfUkVQTyIsIlBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9CUkFOQ0giLCJQSUNCRURfR0lUSFVCX01FU1NBR0VfUEFUSCIsIlBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9DVVNUT01VUkwiLCJQSUNCRURfUUlOSVUiLCJQSUNCRURfUUlOSVVfQUNDRVNTS0VZIiwiUElDQkVEX1FJTklVX1NFQ1JFVEtFWSIsIlBJQ0JFRF9RSU5JVV9CVUNLRVQiLCJQSUNCRURfUUlOSVVfUEFUSCIsIlBJQ0JFRF9RSU5JVV9VUkwiLCJQSUNCRURfUUlOSVVfT1BUSU9OUyIsIlBJQ0JFRF9RSU5JVV9BUkVBIiwiUElDQkVEX1FJTklVX01FU1NBR0VfUEFUSCIsIlBJQ0JFRF9RSU5JVV9NRVNTQUdFX0FSRUEiLCJQSUNCRURfUUlOSVVfTUVTU0FHRV9PUFRJT05TIiwiUElDQkVEX1FJTklVX01FU1NBR0VfVVJMIiwiUElDQkVEX0lNR1VSIiwiUElDQkVEX0lNR1VSX0NMSUVOVElEIiwiUElDQkVEX0lNR1VSX1VTRVJOQU1FIiwiUElDQkVEX0lNR1VSX0FDQ0VTU19UT0tFTiIsIlBJQ0JFRF9JTUdVUl9BTEJVTSIsIlBJQ0JFRF9JTUdVUl9QUk9YWSIsIlBJQ0JFRF9JTUdVUl9NRVNTQUdFX0NMSUVOVElEIiwiUElDQkVEX0lNR1VSX01FU1NBR0VfVVNFUk5BTUUiLCJQSUNCRURfSU1HVVJfTUVTU0FHRV9BQ0NFU1NfVE9LRU4iLCJQSUNCRURfSU1HVVJfTUVTU0FHRV9BTEJVTSIsIlBJQ0JFRF9JTUdVUl9NRVNTQUdFX1BST1hZIiwiUElDQkVEX1VQWVVOIiwiUElDQkVEX1VQWVVOX0JVQ0tFVCIsIlBJQ0JFRF9VUFlVTl9PUEVSQVRPUiIsIlBJQ0JFRF9VUFlVTl9QQVNTV09SRCIsIlBJQ0JFRF9VUFlVTl9QQVRIIiwiUElDQkVEX1VQWVVOX1VSTCIsIlBJQ0JFRF9VUFlVTl9PUFRJT05TIiwiUElDQkVEX1VQWVVOX0FOVElfTEVFQ0hfVE9LRU4iLCJQSUNCRURfVVBZVU5fRVhQSVJFX1RJTUUiLCJQSUNCRURfVVBZVU5fTUVTU0FHRV9PUEVSQVRPUiIsIlBJQ0JFRF9VUFlVTl9NRVNTQUdFX1BBU1NXT1JEIiwiUElDQkVEX1VQWVVOX01FU1NBR0VfVVJMIiwiUElDQkVEX1VQWVVOX01FU1NBR0VfT1BUSU9OUyIsIlBJQ0JFRF9VUFlVTl9NRVNTQUdFX1BBVEgiLCJQSUNCRURfV0VCREFWUExJU1QiLCJQSUNCRURfV0VCREFWUExJU1RfSE9TVCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9TU0xFTkFCTEVEIiwiUElDQkVEX1dFQkRBVlBMSVNUX1VTRVJOQU1FIiwiUElDQkVEX1dFQkRBVlBMSVNUX1BBU1NXT1JEIiwiUElDQkVEX1dFQkRBVlBMSVNUX1BBVEgiLCJQSUNCRURfV0VCREFWUExJU1RfV0VCU0lURV9QQVRIIiwiUElDQkVEX1dFQkRBVlBMSVNUX0NVU1RPTVVSTCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX0hPU1QiLCJQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9TU0xFTkFCTEVEIiwiUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfVVNFUk5BTUUiLCJQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9QQVNTV09SRCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1BBVEgiLCJQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9XRUJTSVRFX1BBVEgiLCJQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9DVVNUT01VUkwiLCJQSUNCRURfU0ZUUFBMSVNUIiwiUElDQkVEX1NGVFBQTElTVF9IT1NUIiwiUElDQkVEX1NGVFBQTElTVF9QT1JUIiwiUElDQkVEX1NGVFBQTElTVF9VU0VSTkFNRSIsIlBJQ0JFRF9TRlRQUExJU1RfUEFTU1dPUkQiLCJQSUNCRURfU0ZUUFBMSVNUX1BSSVZBVEVLRVkiLCJQSUNCRURfU0ZUUFBMSVNUX1BSSVZBVEVLRVlfUEFTU1BIUkFTRSIsIlBJQ0JFRF9TRlRQUExJU1RfVVBMT0FEUEFUSCIsIlBJQ0JFRF9TRlRQUExJU1RfQ1VTVE9NVVJMIiwiUElDQkVEX1NGVFBQTElTVF9XRUJTSVRFX1BBVEgiLCJQSUNCRURfU0ZUUFBMSVNUX0ZJTEVfVVNFUiIsIlBJQ0JFRF9TRlRQUExJU1RfRklMRV9NT0RFIiwiUElDQkVEX1NGVFBQTElTVF9ESVJfTU9ERSIsIlBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9IT1NUIiwiUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1BPUlQiLCJQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUFJJVkFURUtFWSIsIlBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QUklWQVRFS0VZX1BBU1NQSFJBU0UiLCJQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfVVBMT0FEUEFUSCIsIlBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9DVVNUT01VUkwiLCJQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfV0VCU0lURV9QQVRIIiwiUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0ZJTEVfVVNFUiIsIlBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9GSUxFX01PREUiLCJQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRElSX01PREUiLCJCVUlMRElOX1dBVEVSTUFSS19JU0FERFdBVEVSTUFSSyIsIkJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfSVNBRERXQVRFUk1BUksiLCJCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktUWVBFIiwiQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktUWVBFIiwiQlVJTERJTl9XQVRFUk1BUktfSVNGVUxMU0NSRUVOV0FURVJNQVJLIiwiQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9JU0ZVTExTQ1JFRU5XQVRFUk1BUksiLCJCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktERUdSRUUiLCJCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0RFR1JFRSIsIkJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RFWFQiLCJCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1RFWFQiLCJCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktURVhURk9OVFBBVEgiLCJCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0ZPTlRQQVRIIiwiQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVFJBVElPIiwiQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UUkFUSU8iLCJCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktGT05UQ09MT1IiLCJCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0ZPTlRDT0xPUiIsIkJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0lNQUdFUEFUSCIsIkJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLSU1BR0VQQVRIIiwiQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLUE9TSVRJT04iLCJCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1BPU0lUSU9OIiwiQlVJTERJTl9SRU5BTUVfRk9STUFUIiwiQlVJTERJTl9SRU5BTUVfRU5BQkxFIiwiQlVJTERJTl9DT01QUkVTU19RVUFMSVRZIiwiQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1FVQUxJVFkiLCJCVUlMRElOX0NPTVBSRVNTX0lTQ09OVkVSVCIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU0NPTlZFUlQiLCJCVUlMRElOX0NPTVBSRVNTX0NPTlZFUlRGT1JNQVQiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfQ09OVkVSVEZPUk1BVCIsIkJVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkUiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRVNJWkUiLCJCVUlMRElOX0NPTVBSRVNTX1JFU0laRVdJRFRIIiwiQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRVdJRFRIIiwiQlVJTERJTl9DT01QUkVTU19SRVNJWkVIRUlHSFQiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFSEVJR0hUIiwiQlVJTERJTl9DT01QUkVTU19JU1JFU0laRUJZUEVSQ0VOVCIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFU0laRUJZUEVSQ0VOVCIsIkJVSUxESU5fQ09NUFJFU1NfUkVTSVpFUEVSQ0VOVCIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVQRVJDRU5UIiwiQlVJTERJTl9DT01QUkVTU19TS0lQUkVTSVpFT0ZTTUFMTElNRyIsIkJVSUxESU5fQ09NUFJFU1NfSVNST1RBVEUiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNST1RBVEUiLCJCVUlMRElOX0NPTVBSRVNTX1JPVEFURURFR1JFRSIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9ST1RBVEVERUdSRUUiLCJCVUlMRElOX0NPTVBSRVNTX0lTUkVNT1ZFRVhJRiIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFTU9WRUVYSUYiLCJQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9TVUNDRVNTIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEX1JFQVNPTiIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRF9QQVRIIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9TVUNDRVNTIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRUQiLCJQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRF9SRUFTT04iLCJQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRF9WQUxJRCIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfU1VDQ0VTUyIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRURfUkVBU09OIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRURfVkFMSUQiLCJlbiIsIkkxOG5NYW5hZ2VyIiwib2JqZWN0QWRhcHRlciIsIk9iamVjdEFkYXB0ZXIiLCJsYW5ndWFnZSIsIkkxOG4iLCJhZGFwdGVyIiwiZGVmYXVsdExhbmd1YWdlIiwibG9hZE91dHRlckkxOG4iLCJpMThuRm9sZGVyIiwiZ2V0T3V0dGVySTE4bkZvbGRlciIsInJlYWRkaXJTeW5jIiwid2l0aEZpbGVUeXBlcyIsImlzRmlsZSIsImVuZHNXaXRoIiwiaTE4bkZpbGVQYXRoIiwiaTE4bkZpbGUiLCJpMThuRmlsZU9iaiIsInlhbWwiLCJwYXRoRXhpc3RzU3luYyIsImFkZExvY2FsZSIsImxvY2FsZXMiLCJvcmlnaW5Mb2NhbGVzIiwiZ2V0TG9jYWxlIiwibmV3TG9jYWxlcyIsIm1lcmdlIiwic2V0TG9jYWxlIiwiYWRkTGFuZ3VhZ2UiLCJQaWNHbyIsIl9wbHVnaW5Mb2FkZXIiLCJpbml0Q29uZmlnUGF0aCIsImluaXRDb25maWciLCJlbnN1cmVGaWxlU3luYyIsIl9jb25maWciLCJ1cGxvYWRlcnMiLCJsaWZlY3ljbGUiLCJyZWdpc3RlckNvbW1hbmRzIiwicHJvcE5h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